ZigBee學習一 任務處理函數_ProcessEvent


ZigBee學習一 任務處理函數_ProcessEvent

//任務處理函數
UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events )
{
  //定義應用層數據包
  afIncomingMSGPacket_t *MSGpkt;  //定義一個指向接收消息結構體的指針MSGpkt

//如果系統消息到來
  if ( events & SYS_EVENT_MSG )
  {
    //接收數據包
    MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );//使用osal_msg_receive函數從消息隊列上接收消息,該消息中包含了接收到的無線數據包(准確地說是包含了指向接收到的無線數據包的指針)。


   
    //如果數據包不為空
    while ( MSGpkt )
    {

       //判斷消息類型
          switch ( MSGpkt->hdr.event )
          {  

       //處理在初始化中注冊的消息
            case ZDO_CB_MSG:
                SAPI_ProcessZDOMsgs( (zdoIncomingMsg_t *)pMsg );
                break;

       //按鍵消息
            case KEY_CHANGE:
                //調用按鍵處理函數
                GenericApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
                break;

       //數據發送后返回信息處理函數

       case AF_DATA_CONFIRM_CMD:
                // This message is received as a confirmation of a data packet sent.
                // The status is of ZStatus_t type [defined in ZComDef.h]
                // The message fields are defined in AF.h
                pDataConfirm = (afDataConfirm_t *) pMsg;
                SAPI_SendDataConfirm( pDataConfirm->transID, pDataConfirm->hdr.status );
                break;

       //接收數據事件
            case AF_INCOMING_MSG_CMD:
                //調接收數據的處理函數
                GenericApp_MessageMSGCB( MSGpkt );
                break;

        //網絡狀態發生變化事件
            case ZDO_STATE_CHANGE:
                //獲取網絡狀態
                GenericApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
                //判斷網絡類型
                if ( (GenericApp_NwkState == DEV_ZB_COORD)
                    || (GenericApp_NwkState == DEV_ROUTER)
                    || (GenericApp_NwkState == DEV_END_DEVICE) )
                {
           
                }
                break;
         
            default:
                break;
        }

       //釋放存儲區
        osal_msg_deallocate( (uint8 *)MSGpkt );

       //判斷操作系統層是否有未處理的數據包,繼續處理緩沖區中的包
        MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );//處理完一個消息后,再從消息隊列里接收消息,然后對其進行相應的處理,直到所有消息都處理完為止。
    }

   // 返回未處理的任務
    return (events ^ SYS_EVENT_MSG);
  }

// Discard unknown events
  return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM