Zigbee事件

原创 2015年07月09日 13:54:37

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中的Cluster

___________________________________________     上述定义来自《Zigbee Cluster Library Specification》。     ...
  • WWBOY249
  • WWBOY249
  • 2013年07月15日 16:00
  • 1883

Zigbee事件

ZIGBEE事件有两类,系统定义事件和用户定义事件。 系统类事件是协议栈已定义好的,用户类事件是我们用户层面来定义的。 事件类号采用一个16bit的常量,使用独热码编码,独热码是只有一个b...
  • guomutian911
  • guomutian911
  • 2015年07月09日 13:54
  • 1058

Zigbee

一、概述      OSAL (Operating System Abstraction Layer),翻译为“操作系统抽象层”。    在ZigBee协议中,协议本身已经定义了大部分内容。在基于...
  • sinat_14824287
  • sinat_14824287
  • 2017年05月30日 10:08
  • 404

ZigBee 中 z-Stack协议中的任务、事件、消息处理流程

1,系统上电以后在main函数的最后会调用osal_start_system()方法来启动系统,这个方法是个死循环,只循环里面只做一件事:不断的检测任务,看任务里面有没有事件需要处理;    检测方...
  • PZ0605
  • PZ0605
  • 2017年03月17日 11:53
  • 760

ZIGBEE:协议栈工作流程简要分析与学习方法记录

消息处理机制:一般是通过回调函数实现的。例如:在按键发生时,它会调用按键的回调函数(响应函数也叫),通过回调函数生成一个任务出来,然后通过任务发送osal_msg_send函数,发送消息处理循环,注册...
  • nt_yjj
  • nt_yjj
  • 2015年04月28日 09:55
  • 1588

zigbee 是怎样注册,产生,处理 按键事件的?

当硬件有按键按下时调用 uint8 OnBoard_SendKeys( uint8 keys, uint8 state ) {   keyChange_t *msgPtr;   i...
  • wangzongze1986
  • wangzongze1986
  • 2013年01月07日 16:30
  • 1166

ZigBee中的技术问题以及解决方案

1.组网后,怎样获取新加入的Endpoint的地址? 答:     现在有一个最常见的场景,我有一个100个节点的网络同时发送数据给协调器,我很想知道那个地址对应那个节点。其实楼上的就想知...
  • NBE999
  • NBE999
  • 2017年04月27日 15:46
  • 988

ZiGbee CC2530 OSAL系统 按键事件讲解

因朋友所托而我也正在学习Zigbee跟BLE4.0所以就花了两小时先看了下KEY的运作原理 下面来介绍下 首先打开Zmain.c文件的main函数我们可以看到 HalDriverInit(); 硬...
  • Everler
  • Everler
  • 2017年03月24日 15:01
  • 188

ZigBee终端入网方式深入分析

前述继之前对终端Direct Join的分析,发现很多东西还很模糊,存在很多问题。终于找到时间继续深入挖下去,这次应该比较完整地搞清了终端的三种入网机制,并纠正之前的几个认识偏差。由于Z-Stack...
  • m12m12m1
  • m12m12m1
  • 2015年06月27日 15:19
  • 4308
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Zigbee事件
举报原因:
原因补充:

(最多只允许输入30个字)