ZIGBEE事件有两类。系统定义事件和用户定义事件。

系统类事件是协议栈已定义好的。用户类事件是我们用户层面来定义的。



事件类号採用一个16bit的常量,使用独热码编码,独热码是仅仅有一个bit为1,其它全为0的一种码制,採用独热码的长处是操作方便,能够使用简单的位操作指令实现,如:提取系统类事件用events & SYS_EVENT_MSG。清除系统类事件用events ^ SYS_EVENT_MSG;因为事件类号是16bit,也就是说zigbee事件类仅仅有16个。系统类事件SYS_EVENT_MSG使用0x8000,故自己定义事件类仅仅有15个。可採用0x4000至0x0001。



事件处理函数为:app_ProcessEvent( byte task_id, UINT16events ),可见调用此函数将传递两个參数,task_id任务号和events事件类号;事件处理函数首先依据事件类号来推断是何种类型事件。然后依据任务号得到消息指针pMsg,最后依据消息指针结构里的事件号pMsg->event来详细处理事件,event为8bit的常量,系统event在ZComDef.h里定义。



在ZigBee协议栈中,不论什么通信数据都是利用帧的格式来组织的,协议栈的每一层都有特定的帧结构;AF定义了两种帧类型,键值对(Key Value Pair,KVP)和报文(Message,MSG)。KVP消息主要用于传输一些较为简单的变量格式;但因为Zigbee的非常多应用领域中的消息较为复杂并不适用KVP格式。因此Zigbee协议规划定义了MSG类型。MSG对数据格式不作要求。适合不论什么格式的传输数据。因此能够用于传送数据量大的消息。



以下对系统event说明(当中AF_代表应用框架,ZDO_代表设备对象):

1、AF_DATA_CONFIRM_CMD:Data confirmation数据收到确认;A设备发送数据,B设备收到数据后将返回应答ack给A。A收到此ack将触发AF_DATA_CONFIRM_CMD事件;F_DataRequest函数參数options如设AF_ACK_REQUEST,则要求对方设备回复ack。



2、AF_INCOMING_MSG_CMD:Incoming MSG type message收到报文类型的消息;A设备用AF_DataRequest函数发出报文消息,B设备收到报文消息将触发AF_INCOMING_MSG_CMD事件。



3、AF_INCOMING_KVP_CMD:Incoming KVP type message收到键值对类型的消息。



4、AF_INCOMING_GRP_KVP_CMD:Incoming Group KVP type message收到群键值对类型的消息。

5、KEY_CHANGE:Key Events按键触发事件。

6、ZDO_NEW_DSTADDR:ZDO has received a new DstAddr for this app ZDO终端获得新地址。匹配描写叙述符请求(Match Descriptor Request)响应指示(比如:自己主动匹配)。如A设备增加绑定后。A设备触发ZDO_NEW_DSTADDR事件。



7、ZDO_STATE_CHANGE:ZDO has changed the device's network state ZDO网络状态改变;当A设备的网络状态改变时,A就会触发此消息。如SampleApp_NwkState = DEV_INIT也会触发(我理解。不知对不正确)。

8、ZDO_MATCH_DESC_RSP_SENT:ZDO match descriptor response was sent ZDO描写叙述符匹配响应发送;A设备发送ZDP_MatchDescReq函数请求描写叙述符匹配绑定,B设备收到后发送ZDP_MatchDescRsp函数响应,B设备发送响应函数后触发ZDO_MATCH_DESC_RSP_SENT事件。



9、ZDO_CB_MSG:ZDO incoming message callback 收到ZDO反馈消息;A设备用函数ZDO_RegisterForZDOMsg注冊了特定消息,A设备才干用ZDO_CB_MSG消息接收解析此特定消息;应用绑定样例:A设备发送绑定请求,B设备收到后发送匹配响应,A设备收到响应触发ZDO_CB_MSG事件。

///////////////////////未完待续

Zigbee事件的更多相关文章

  1. JNI详解---从不懂到理解

    转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...

  2. zigbee 中 OSAL 事件传递机制和消息传递机制

    一.概述 OSAL (Operating System Abstraction Layer) ,翻译为"操作系统抽象层". OSAL 就是一种支持多任务运行的系统资源分配机制.OS ...

  3. 【转】zigbee终端无法重连的问题解决

    zigbee终端无法重连的问题解决 1.zigbee重连的原因 (1)zigbee由于各种原因的干扰导致信号太差而掉线. (2)协调器重启. 2.zigbee终端重连的处理 (1)zigbee掉线后会 ...

  4. 【转】ZigBee终端入网方式深入分析

    前述 继之前对终端Direct Join的分析,发现很多东西还很模糊,存在很多问题.终于找到时间继续深入挖下去,这次应该比较完整地搞清了终端的入网机制,并纠正之前的几个认识偏差. 由于Z-Stack网 ...

  5. 【转译】加入ZigBee联盟,共画物联网的未来

    Zigbee联盟是物联网全球革命的领导者,创造了随心控制的时代.Zigbee简化了无线产品的整合.加快了市场化,同时让那些希望引入高能效的无线控制的厂商,降低了成本和风险.我们的联盟成员在开放的全球环 ...

  6. [ZigBee] 16、Zigbee协议栈应用(二)——基于OSAL的无线控制LED闪烁分析(下)

    说在前面:上一篇介绍了无线LED闪烁实现的OSAL部分,本篇介绍如何实现无线数据收发及数据处理: 上一篇是用SI跟着流程查看源码,我个人认为以架构的思维去了解代码能让人更清晰 ::ZMain.c程序入 ...

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

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

  8. zigbee学习之路(十四):基于协议栈的无线数据传输

    一.前言 上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发.在这个实验中,我们要进行zigbee的接受和发送实验. 二.实验功能 ...

  9. zigbee学习之路(十二):zigbee协议原理介绍

    一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...

随机推荐

  1. DELPHI 参数前缀的使用

    传值参数传值参数可在过程内部修改,但过程返回时该修改不会反映出来.不加任何前缀,就表示该参数为传值参数.Procedure Foo( I : Integer );I 的值被传递到Foo 过程.当Foo ...

  2. java的maven项目(三)私服的搭建(windows版)

    1       私服 nexus 安装nexus 启动服务 启动失败的解决方法: 登录nexus 用户名/密码  admin/admin123 仓库类型 Virtual   虚拟仓库 Proxy  代 ...

  3. 【NppExec】直接在notepad++运行python的插件:NppExec

    1.下载NppExec    http://sourceforge.net/projects/npp-plugins/files/NppExec/ 2.安装   解压,全部复制到d:/program ...

  4. F - Oil Deposits 【地图型BFS+联通性】

    The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSu ...

  5. hdu6155

    hdu6155 题意 给出一个只由 \(01\) 组成的字符串 \(s\),有两种操作: 翻转区间 \([l, r]\) 查询区间 \([l, r]\) 有多少不同的子串 分析 首先考虑怎么统计区间有 ...

  6. Linux命令之ip

    ip [ OPTIONS ] OBJECT { COMMAND | help } 这一条命令几乎包含了所有使用方法,其中 对象OBJECT={ link | addr | addrlabel | ro ...

  7. 数字 function

    SELECT TRUNC(15.79), TRUNC(), ROUND(15.79), ), ), FLOOR(26.983), CEIL(26.123), ), ), ), MOD(,) FROM ...

  8. 【动态规划】bzoj3992 [Sdoi2015]序列统计 10分

    #include<cstdio> using namespace std; #define MOD 1004535809 int a[8001],f[1001][101],n,m,x,S; ...

  9. python3开发进阶-Djamgo框架中的JSON和AJAX

    阅读目录 什么是JSON 什么是AJAX AJAX常见的应用情景 jQery实现AJAX AJAX请求如何设置csrf_token AJAX上传文件 补充Django内置的serializers 一. ...

  10. Spring使用ComponentScan扫描Maven多模块工程的其它模块

    说明:在新建好了Maven多模块工程后,如果想要在其它模块也能使用Spring的对象管理,比如@Autowrited这些注入方式,那么就必须开启包扫描的功能才能使其进行注入到Spring的对象管理中. ...