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. Android(java)学习笔记84:SQLiteDatabase的query方法参数

    1. SQLiteDatabase的query方法: public Cursor query (boolean distinct, String table, String[] columns, St ...

  2. 【转载】2018 hosts 持续更新访问 gu歌【更新于:2018-05-03】

      修改HOSTS实现免费,简单访问谷歌的目的   也是比较稳定的方法.修改hosts.修改hosts的方法,原理在于直接存储谷歌网站的IP地址.这样就不用DNS来解析网址了.也就是说,当我们输入谷歌 ...

  3. PAT (Basic Level) Practise (中文)- 1002. 写出这个数 (20)

    http://www.patest.cn/contests/pat-b-practise/1002 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个 ...

  4. ubuntu jdk install

    1.下载jdk-7u75-linux-x64.tar.gz,默认在/home/csf/Downloads 2.csf@ubuntu:~/Downloads$ sudo mkdir /usr/java ...

  5. BundleConfig的作用

    在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和css进行压缩(多个文件可以打包成一个文件),并且可以区分调试和非调试,在调试时不进行压缩,以原 ...

  6. ActiveMQ RabbitMQ RokcetMQ Kafka实战 消息队列中间件视频教程

    附上消息队列中间件百度网盘连接: 链接: https://pan.baidu.com/s/1FFZQ5w17e1TlLDSF7yhzmA 密码: hr63

  7. 整理好的一些mysql表详细操作

    一.创建表的完整语法#语法:create table 库名.表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件]);约束条件:是 ...

  8. Android Studio 3.0 安装注意点

    在安装Android studio 3.0+ 时候,会遇到默认不带Android SDK 的问题. 在启动Android studio 后,会提示让选择SDK目录,选择下载目录,对应的去下载 那么问题 ...

  9. Java模拟音乐播放器 暂停与重新播放——线程如何控制另外一个线程的状态

    package com.example.Thread; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEve ...

  10. vim的常用操作

      vim的几种编辑模式 正常模式:可以使用快捷键命令,或按:输入命令行. 插入模式:可以输入文本,在正常模式下,按i.a.o等都可以进入插入模式. 可视模式:正常模式下按v可以进入可视模式, 在可视 ...