在ZIGBEE中消息处理是在SerialApp_ProcessEvent中,分析一下代码
UINT16 SerialApp_ProcessEvent( uint8 task_id, UINT16 events )
{
(void)task_id;
if ( events & SYS_EVENT_MSG )
{
afIncomingMSGPacket_t *MSGpkt;
while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SerialApp_TaskID )) )
{
switch ( MSGpkt->hdr.event )
{
case ZDO_CB_MSG:
SerialApp_ProcessZDOMsgs( (zdoIncomingMsg_t *)MSGpkt );
break;
case KEY_CHANGE:
SerialApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
break;
case AF_INCOMING_MSG_CMD:
SerialApp_ProcessMSGCmd( MSGpkt );
break;
case ZDO_STATE_CHANGE:
SerialApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
if ( (SerialApp_NwkState == DEV_ZB_COORD)
|| (SerialApp_NwkState == DEV_ROUTER)
|| (SerialApp_NwkState == DEV_END_DEVICE) )