Zigbee事件

weixin_33896726發表於2017-04-22

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事件。


///////////////////////未完待續

相關文章