資源描述:
《Z-Stack中SimpleApp控制節(jié)點(diǎn)建立網(wǎng)絡(luò)的過程》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Z-Stack中SimpleApp控制節(jié)點(diǎn)建立網(wǎng)絡(luò)的過程(2010-12-0713:51)分類:ZigBee技術(shù)學(xué)習(xí)當(dāng)控制節(jié)點(diǎn)上電后,首先經(jīng)歷一系列的初始化工作,最終在sapi層設(shè)置進(jìn)入事件,然后通過任務(wù)事件處理函數(shù)對該事件進(jìn)行處理,當(dāng)讀取NV的啟動模式選項(xiàng)時,zb_ReadConfiguration(ZCD_NV_STARTUP_OPTION,sizeof(uint8),&startOptions);在編譯選項(xiàng)中進(jìn)行了設(shè)備,非自動啟動模式,判斷為非自動啟動,因此看到控制節(jié)點(diǎn)的LED_2閃爍,HalLedBlink(HAL_LED_2,0
2、,50,500);操作系統(tǒng)等待其他事件發(fā)生。當(dāng)按下按鍵S1后,由于在sapi層注冊了按鍵事件,因此會發(fā)送KEY_CHANGE消息到sapi層,當(dāng)收到KEY_CHANGE消息后,sapi層的任務(wù)事件處理函數(shù)調(diào)用:zb_HandleKeys(((keyChange_t*)pMsg)->state,((keyChange_t*)pMsg)->keys);然后將設(shè)備邏輯類型(協(xié)調(diào)器)寫入到NV,并將自動啟動模式寫入到NV:zb_WriteConfiguration(ZCD_NV_LOGICAL_TYPE,sizeof(uint8),&logica
3、lType);zb_WriteConfiguration(ZCD_NV_STARTUP_OPTION,sizeof(uint8),&startOptions);最后重新啟動:zb_SystemReset();重新啟動后,依然進(jìn)入通過任務(wù)事件處理函數(shù)對進(jìn)入事件進(jìn)行處理,也就是ZB_ENTRY_EVENT當(dāng)讀取NV的啟動模式選項(xiàng)時,判斷為自動啟動,然后調(diào)用:zb_StartRequest();緊接著調(diào)用ZDO層的初始化設(shè)備函數(shù):ZDOInitDevice(zgStartDelay);在該函數(shù)中設(shè)置了NV網(wǎng)絡(luò)狀態(tài),并修改了當(dāng)前設(shè)備狀態(tài):netw
4、orkStateNV=ZDO_INITDEV_NEW_NETWORK_STATE;devState=DEV_INIT;最終觸發(fā)網(wǎng)絡(luò)初始化函數(shù):ZDApp_NetworkInit(extendedDelay);設(shè)置網(wǎng)絡(luò)初始化事件:osal_set_event(ZDAppTaskID,ZDO_NETWORK_INIT);ZDO層的任務(wù)事件處理函數(shù)對網(wǎng)絡(luò)初始化事件進(jìn)行處理,即啟動該設(shè)備:ZDO_StartDevice((uint8)ZDO_Config_Node_Descriptor.LogicalType,devStartMode,DEFAU
5、LT_BEACON_ORDER,DEFAULT_SUPERFRAME_ORDER);此時將改變設(shè)備狀態(tài)為協(xié)調(diào)器啟動:devState=DEV_COORD_STARTING;并根據(jù)設(shè)備邏輯類型和啟動模式調(diào)用NWK層網(wǎng)絡(luò)形成請求函數(shù):NLME_NetworkFormationRequest(zgConfigPANID,zgApsUseExtendedPANID,zgDefaultChannelList,zgDefaultStartingScanDuration,beaconOrder,superframeOrder,false);其中,個域網(wǎng)
6、ID號和默認(rèn)通道號在f8wConfig.Cfg中定義:-DZDAPP_CONFIG_PAN_ID=0xFFFF//PAN_ID-DDEFAULT_CHANLIST=0x00000800//11-0x0B信道號當(dāng)NWK層通過調(diào)用MAC和PHY層相關(guān)功能函數(shù)執(zhí)行一些列網(wǎng)絡(luò)形成動作后,NWK層將接收到網(wǎng)絡(luò)形成反饋,這里的很多網(wǎng)絡(luò)層MAC層的函數(shù)都不是開源的,可能會看不到源代碼。即:ZDO_NetworkFormationConfirmCB()設(shè)置網(wǎng)絡(luò)啟動事件:osal_set_event(ZDAppTaskID,ZDO_NETWORK_STAR
7、T);ZDO層任務(wù)事件處理函數(shù)將執(zhí)行網(wǎng)絡(luò)啟動事件處理:ZDApp_NetworkStartEvt();此時將改變設(shè)備狀態(tài)為協(xié)調(diào)器,并且保證電源供電:devState=DEV_ZB_COORD;osal_pwrmgr_device(PWRMGR_ALWAYS_ON);而且設(shè)置ZDO狀態(tài)改變事件:osal_set_event(ZDAppTaskID,ZDO_STATE_CHANGE_EVT);ZDO層任務(wù)事件處理函數(shù)將執(zhí)行ZDO更新網(wǎng)絡(luò)狀態(tài)事件處理:ZDO_UpdateNwkStatus(devState);此時搜索端點(diǎn)列表,尋找曾經(jīng)在sap
8、i層注冊過的端點(diǎn)號,并且將ZDO狀態(tài)改變消息發(fā)送給這些端點(diǎn):zdoSendStateChangeMsg(state,*(pItem->epDesc->task_id));而且確定控制節(jié)點(diǎn)(此時