利用 Device_annce 获取网络地址
在写ZigBee协议栈程序时,可利用ZigBee协议栈的 Device_annce 获取网络地址。
在XXX_Init()函数中注册 ZDO_RegisterForZDOMsg( zclSampleLight_TaskID, Device_annce );然后在XXX_eventLoop函数的SYS_EVENT_MSG中加入ZDO_CB_MSG消息的处理:
if ( events & SYS_EVENT_MSG )
{
while ( (MSGpkt =
(afIncomingMSGPacket_t*)osal_msg_receive( zclSampleLight_TaskID )) )
{
switch ( MSGpkt->hdr.event )
{
case ZCL_INCOMING_MSG:
// Incoming ZCL Foundation command/response messages
zclSampleLight_ProcessIncomingMsg( (zclIncomingMsg_t*)MSGpk
t );
break;
case KEY_CHANGE:
zclSampleLight_HandleKeys( ((keyChange_t*)MSGpkt)->state((k
eyChange_t *)MSGpkt)->keys );
break;
case ZDO_CB_MSG:
zclSampleLight_ProcessZDOMsgs( (zdoIncomingMsg_t *)MSGpkt );
break;
default:
break;
}
// Release the memory
osal_msg_deallocate( (uint8 *)MSGpkt );
}
最后在这个函数中对Device Annce处理时显示。
void zclSampleLight_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg )
{
switch ( inMsg->clusterID )
{
case Device_annce:
// 显示新加入的节点信息,inMsg->asdu 中第一二个字节是新节点的网络
地址,第3个开始的8个字节是新节点的长地址。
break;
default:
break;
}
}