zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    从零开始入门 K8s | 应用编排与管理
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    203. Remove Linked List Elements
    183. Customers Who Never Order
    182. Duplicate Emails
    181. Employees Earning More Than Their Managers
    1261. Find Elements in a Contaminated Binary Tree
    1260. Shift 2D Grid
  • 原文地址:https://www.cnblogs.com/liushao/p/6351506.html
Copyright © 2011-2022 走看看