zigbee总结
zigbee分析如下
myApp_ProcessEvent 是event处理函数,从这里入手。
1. 首先当设备接入时 会触发 ZDO_STATE_CHANGE 事件,该事件回调函数
static void myApp_ZDOStateChange(afIncomingMSGPacket_t *pckt)
{
}
注意,这里面会区分当前设备,比如路由器,节点或者协调器,做不同的处理。
最常见是osal_start_timerEx 启动定时器,注意第二个参数event_id,这个在myApp_ProcessEvent会轮询。
if ( events & MYAPP_SEND_MSG_EVT )
{
}
2. 如果设备接入时, ZDO_STATE_CHANGE 事件回调函数里面什么都不做, 那这时通常是等待别的触发,比如按键
KEY_CHANGE, 回调函数
myApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys )
{
}
以上两种回调函数里面多半会调用
myApp_SendxxxMessage,这个表示广播, 组播或者点播信息发布。
3. 一旦信息发布后,必然会触发AF_INCOMING_MSG_CMD, 信息接收,其回调函数
static void myApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
switch ( pkt->clusterId )
{
case MYAPP_PERIODIC_CLUSTERID:// 广播
myApp_Message_Periodic_Handler(pkt);
break;
case MYAPP_FLASH_CLUSTERID: // 组播
myApp_Message_Flash_Handler(pkt);
break;
case MYAPP_P2P_CLUSTERID: // 点播
myApp_Message_P2P_Handler(pkt);
break;
default:
break;
}
}
分别根据信息发布形式作对应处理。
以上,zigbee就完了。