Zigbee事件
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事件。
///未完待續
總結
- 上一篇: Flash,EEPROM区别
- 下一篇: Zigbee中添加用户任务