// Initiate an End Device Bind Request for the mandatory endpoint
dstAddr.addrMode = Addr16Bit;
dstAddr.addr.shortAddr = 0x0000; // Coordinator
ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(),
GenericApp_epDesc.endPoint,
GENERICAPP_PROFID,
GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList,
GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList,
FALSE );
}
很明显这里按键2(右键)是发送绑定请求的命令。
if ( keys & HAL_KEY_SW_4 )
{
HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF );
// Initiate a Match Description Request (Service Discovery)
dstAddr.addrMode = AddrBroadcast;
dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR;
ZDP_MatchDescReq( &dstAddr, NWK_BROADCAST_SHORTADDR,
GENERICAPP_PROFID,
GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList,
GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList,
FALSE );
}
显然按键4(左)是初始化一个匹配描述符请求,也就是发现服务,或者叫自动寻求匹配设备。
这就不怪我按键有反映了!
而且在发送数据和接收数据处理函数发现:
void GenericApp_SendTheMessage( void )
{
char theMessageData[] = "Hello World";
if ( AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc,
GENERICAPP_CLUSTERID,
(byte)osal_strlen( theMessageData ) + 1,
(byte *)&theMessageData,
&GenericApp_TransID,
AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
// Successfully requested to be sent.
}
else
{
// Error occurred in request to send.
}
}
居然发送的是一个字符串“Hello World”。
void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
switch ( pkt->clusterId )
{
case GENERICAPP_CLUSTERID:
// "the" message
#if defined( LCD_SUPPORTED )
HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );
#elif defined( WIN32 )
WPRINTSTR( pkt->cmd.Data );
#endif
break;
}
}
接收数据处理函数里居然要通过液晶显示,本人这里的液晶暂时没有移植过来,因为暂时还不具备那个实力,怪不得看不到发送数据的状况!
这里本人就自作聪明的把以前SampleApp例子里面的一句话加过来了:
void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
switch ( pkt->clusterId )
{
case GENERICAPP_CLUSTERID:
// "the" message
HalLedBlink( HAL_LED_4, 4, 50, (500) );
#if defined( LCD_SUPPORTED )
HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );
#elif defined( WIN32 )
WPRINTSTR( pkt->cmd.Data );
#endif
break;
}
}
麽想到啊,这么一加居然就有反应了,o(∩_∩)o…!我不愧是天才的接班人啊!
其实这里很简单的了,就是接收到数据后闪烁4下灯,间隔0.5S。因为从:
if ( events & GENERICAPP_SEND_MSG_EVT )
{
// Send "the" message
GenericApp_SendTheMessage();
// Setup to send message again
osal_start_timerEx( GenericApp_TaskID,
GENERICAPP_SEND_MSG_EVT,
GENERICAPP_SEND_MSG_TIMEOUT );
// return unprocessed events
return (events ^ GENERICAPP_SEND_MSG_EVT);
}
这里可以看出,这个例子很明显仅仅是个发送周期信息的例子。所以LED4就周期性的闪烁4下,当然是协调器发送,路由器闪烁,路由器发送,协调器闪烁。
但是这例子里体现了绑定的概念,应该说是从基本功能上很齐全的一个例子,而且在ZSTACK上实现无线网络数传,没有任何多余的功能。所以该例子是一个典型的ZSTACK模板,也就是为用户提供了一个通用模板可以通过这个建立自己的应用。关于如何在这个例子上建立、修改成自己的工程和应用项目详细见文档:
Create New Application For The CC2430DB_F8W-2005-0033_.pdf
这个例子就到此结束了,否则不然就很难把下面的弄玩了!
2、SimpleApp
这个例子我基本跑通了,可是鉴于时间的关系,没有来得及打字了,所以就留到下一次了,时间真是如流水啊-------------------快!
文章评论(0条评论)
登录后参与讨论