ZigBee学习之任务处理函数_ProcessEvent:SampleApp_ProcessEvent( uint8 task_id, uint16 events )

//任务处理函数

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;

     //数据发送后返回信息处理函数

       caseAF_DATA_CONFIRM_CMD:

                // This message is received as a confirmation of a data packetsent.

                // 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;

}

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值