概述
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, UINT16 events ),可见调用此函数将传递两个参数,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:Dataconfirmation数据收到确认;A设备发送数据,B设备收到数据后将返回应答ack给A,A收到此ack将触发AF_DATA_CONFIRM_CMD事件;F_DataRequest函数参数options如设AF_ACK_REQUEST,则要求对方设备回复ack。
2、AF_INCOMING_MSG_CMD:IncomingMSG type message收到报文类型的消息;A设备用AF_DataRequest函数发出报文消息,B设备收到报文消息将触发AF_INCOMING_MSG_CMD事件。
3、AF_INCOMING_KVP_CMD:IncomingKVP type message收到键值对类型的消息。
4、AF_INCOMING_GRP_KVP_CMD:IncomingGroup KVP type message收到群键值对类型的消息。
5、KEY_CHANGE:KeyEvents按键触发事件。
6、ZDO_NEW_DSTADDR:ZDOhas received a new DstAddr for this app ZDO终端获得新地址;匹配描述符请求(MatchDescriptor Request)响应指示(例如:自动匹配);如A设备加入绑定后,A设备触发ZDO_NEW_DSTADDR事件。
7、ZDO_STATE_CHANGE:ZDOhas changed the device's network state ZDO网络状态改变;当A设备的网络状态改变时,A就会触发此消息,如SampleApp_NwkState= DEV_INIT也会触发(我理解,不知对不对)。
8、ZDO_MATCH_DESC_RSP_SENT:ZDOmatch descriptor response was sent ZDO描述符匹配响应发送;A设备发送ZDP_MatchDescReq函数请求描述符匹配绑定,B设备收到后发送ZDP_MatchDescRsp函数响应,B设备发送响应函数后触发ZDO_MATCH_DESC_RSP_SENT事件。
9、ZDO_CB_MSG:ZDOincoming message callback 收到ZDO反馈消息;A设备用函数ZDO_RegisterForZDOMsg注册了特定消息,A设备才能用ZDO_CB_MSG消息接收解析此特定消息;应用绑定例子:A设备发送绑定请求,B设备收到后发送匹配响应,A设备收到响应触发ZDO_CB_MSG事件。
最后
以上就是优美帽子为你收集整理的ZIGBEE事件类型的全部内容,希望文章能够帮你解决ZIGBEE事件类型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复