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

ZigBee学习一 任务处理函数_ProcessEvent的更多相关文章

  1. zigbee学习:示例程序SampleApp中通讯流程

    zigbee学习:示例程序SampleApp中通讯流程 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 参考链接: http://wjf88223.bl ...

  2. zigbee学习之路(十五):基于协议栈的按键实验

    一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...

  3. zigbee学习:示例程序SampleApp中按键工作流程

    zigbee学习:示例程序SampleApp中按键工作流程 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:IAR8. ...

  4. ZigBee学习五 无线温度检测

    ZigBee学习五 无线温度检测 1)修改公用头文件GenericApp.h typedef union h{ uint8 TEMP[4]; struct RFRXBUF { unsigned cha ...

  5. ZigBee学习四 无线+UART通信

    ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique messag ...

  6. ZigBee学习三 UART通信

    ZigBee学习三 UART通信 在使用串口时,只需掌握ZigBee协议栈提供的串口操作相关的三个函数即可. uint8 HalUARTOpen(uint8 port,halUARTCfg_t *co ...

  7. ZigBee学习二 LED点对点通信

    ZigBee学习二 LED点对点通信 终端上电后,自动连接协调器进行组网,成功后,开始发送LED字符数据.当协调器接收到数据后,终端和协调器的LED1都开始闪烁. 工程搭建和文件添加 步骤这里就省了. ...

  8. 学习js回调函数

    <!DOCTYPE HTML> <html> <head> <meta charset="GBK" /> <title> ...

  9. JavaScript学习03 JS函数

    JavaScript学习03 JS函数 函数就是包裹在花括号中的代码块,前面使用了关键词function: function functionName() { 这里是要执行的代码 } 函数参数 函数的 ...

随机推荐

  1. 如何在python中读写和存储matlab的数据文件(*.mat)

    使用sicpy.io即可.sicpy.io提供了两个函数loadmat和savemat,非常方便. 以前也有一些开源的库(pymat和pymat2等)来做这个事, 不过自从有了numpy和scipy以 ...

  2. 白鹭引擎eui控件的简单创建和管理方法

    一.创建ui文件: 1. 创建exml文件,改成group类型,拖入default.res.json文件里面,文件类型改成text. 2. 将创建的exml文件拖入控件,控件可以在属性面板命名. 3. ...

  3. 1503: [NOI2004]郁闷的出纳员

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 13723  Solved: 4989[Submit][Status][Discuss] Descripti ...

  4. (82)zabbix如何选择适合的监控类型

    zabbix提供十几种监控类型,包括:Zabbix agent, Simple checks, SNMP, Zabbix internal, IPMI, JMX monitoring等等,那我们应该如 ...

  5. Linux ps与top命令

    Linux ps与top命令 这两个命令都是查看系统进程信息的命令,但是用处有点儿不同 1.ps命令--提供系统过去信息的一次性快照 也就是说ps命令能够查看刚刚系统的进程信息  命令:ps aux或 ...

  6. SpringSecurity项目报错

    启动时,提示: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory be ...

  7. Postgres安装详解

    PG安装 一.基础包的安装(yum源的配置,可以采用光盘挂载,及ftp yum源,针对外网环境忽略此步): yum -y install wget tcpdump glibc libgcc gcc g ...

  8. 解决Uva网站打开慢的问题

    https://blog.csdn.net/richenyunqi/article/details/80990535

  9. 9、python中的控制流

    学习完python的基础与数据后,我们就可以编写一些简单的命令了.但这时我们发现,目前位置写出来的程序都是自上而下顺序地执行的.要想程序改变这种自上而下的流程多一点变化,我们就要学习三种程序中的语句. ...

  10. (ADO.NET小知识点汇总)看到什么记什么

    1.数据库连接池:在同时连接数不多的情况下, 打开一个链接往数据库导1W条数据的耗时 跟 导一条数据就打开跟关闭数据库连接的耗时 两者其实相差不大,这是为什么呢?打开关闭的本身不是有很多耗时吗?这是因 ...