![zigbee組網(wǎng)程序解讀_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/4/65e9f2a9-91bb-4a4d-a335-e6ffac42f291/65e9f2a9-91bb-4a4d-a335-e6ffac42f2911.gif)
![zigbee組網(wǎng)程序解讀_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/4/65e9f2a9-91bb-4a4d-a335-e6ffac42f291/65e9f2a9-91bb-4a4d-a335-e6ffac42f2912.gif)
![zigbee組網(wǎng)程序解讀_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/4/65e9f2a9-91bb-4a4d-a335-e6ffac42f291/65e9f2a9-91bb-4a4d-a335-e6ffac42f2913.gif)
![zigbee組網(wǎng)程序解讀_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/4/65e9f2a9-91bb-4a4d-a335-e6ffac42f291/65e9f2a9-91bb-4a4d-a335-e6ffac42f2914.gif)
![zigbee組網(wǎng)程序解讀_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/4/65e9f2a9-91bb-4a4d-a335-e6ffac42f291/65e9f2a9-91bb-4a4d-a335-e6ffac42f2915.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Zigbee組網(wǎng)過程解讀第一個功能:協(xié)調(diào)器的組網(wǎng),終端設(shè)備和路由設(shè)備發(fā)現(xiàn)網(wǎng)絡(luò)以及加入網(wǎng)絡(luò)/第一步:Z-Stack 由 main()函數(shù)開始執(zhí)行,main()函數(shù)共做了 2 件事:一是系統(tǒng)初始化,另外一件是開始執(zhí)行輪轉(zhuǎn)查詢式操作系統(tǒng)int main( void )
2、./ Initialize the operating systemosal_init_system(); /第二步,操作系統(tǒng)初始化.osal_start_system(); /初始化完系統(tǒng)任務(wù)事件后,正式開始執(zhí)行操作系統(tǒng) . /第二步,進(jìn)入 osal_init_system()函數(shù),執(zhí)行操作系統(tǒng)初始化uint8 osal_init_system( void ) /初始化操作系統(tǒng),其中最重要的是,初始化操作系統(tǒng)的任務(wù)/ Initialize the Memory Allocation System
3、160; osal_mem_init();/ Initialize the message queue osal_qHead = NULL;/ Initialize the timers osalTimerInit();/ Initialize the Power Management System osal_pwrmgr_init();/ Initialize the system tasks.osalInitTasks(); /第三步,執(zhí)行操作系統(tǒng)任務(wù)初始化函數(shù)/ Setup efficient search for the first fr
4、ee block of heap. osal_mem_kick(); return ( SUCCESS );/第三步,進(jìn)入osalInitTasks()函數(shù),執(zhí)行操作系統(tǒng)任務(wù)初始化void osalInitTasks( void ) /第三步,初始化操作系統(tǒng)任務(wù) uint8 taskID = 0; tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt); osal_memset( t
5、asksEvents, 0, (sizeof( uint16 ) * tasksCnt);/任務(wù)優(yōu)先級由高向低依次排列,高優(yōu)先級對應(yīng) taskID 的值反而小 macTaskInit( taskID+ ); /不需要用戶考慮 nwk_init( taskID+ ); /不需要用戶考慮 Hal_Init( taskID+ ); /硬件抽象層初始化,需要我們考慮#if defined( MT_TASK )
6、160; MT_TaskInit( taskID+ );#endif APS_Init( taskID+ ); /不需要用戶考慮#if defined ( ZIGBEE_FRAGMENTATION ) APSF_Init( taskID+ );#endifZDApp_Init( taskID+ ); /第四步,ZDApp層,初始化 ,執(zhí)行ZDApp_init函數(shù)后,如果是協(xié)調(diào)器將建立網(wǎng)絡(luò),如果是終端設(shè)備將加入網(wǎng)絡(luò)。#if def
7、ined ( ZIGBEE_FREQ_AGILITY ) | defined ( ZIGBEE_PANID_CONFLICT ) ZDNwkMgr_Init( taskID+ );#endif SerialApp_Init( taskID ); /應(yīng)用層SerialApp層初始化,需要用戶考慮 在此處設(shè)置了一個按鍵觸發(fā)事件,
8、; /當(dāng)有按鍵按下的時候,產(chǎn)生一個系統(tǒng)消息
9、60; /第四步,進(jìn)入ZDApp_init()函數(shù),執(zhí)行ZDApp層初始化/The first stepvoid ZDApp_Init( uint8 task_id ) /The first step,ZDApp層初始化。/ Save the task ID ZDAppTaskID = task_id;/ Initialize the ZDO global device short address storage ZDAppNwkAddr.addrMode = Ad
10、dr16Bit; ZDAppNwkAddr.addr.shortAddr = INVALID_NODE_ADDR; (void)NLME_GetExtAddr(); / Load the saveExtAddr pointer./ Check for manual "Hold Auto Start" ZDAppCheckForHoldKey();/ Initialize ZDO items and setup the device - type of device to create. ZDO_Init();/ R
11、egister the endpoint description with the AF / This task doesn't have a Simple description, but we still need / to register the endpoint. afRegister( (endPointDesc_t *)&ZDApp_epDesc );#if defined( ZDO_USERDESC_RESPONSE ) ZDApp_InitUserDesc();#endif / ZDO_USERDESC_RESP
12、ONSE/ Start the device? if ( devState != DEV_HOLD ) /devState 初值為DEV_INIT , 所以在初始化ZDA層時,就執(zhí)行該條件語句 ZDOInitDevice( 0 ); /The second step, 接著轉(zhuǎn)到ZDOInitDevice()函數(shù),執(zhí)行The third step; else / Blink LED to indicate
13、 HOLD_START HalLedBlink ( HAL_LED_4, 0, 50, 500 ); ZDApp_RegisterCBs();/The third step,執(zhí)行ZDOInitDevice()函數(shù),執(zhí)行設(shè)備初始化uint8 ZDOInitDevice( uint16 startDelay ) /The third step, ZDO層初始化設(shè)備, ./ Trigger the network startZDApp_NetworkInit( extendedDelay );
14、; /網(wǎng)絡(luò)初始化,跳到相應(yīng)的函數(shù)里頭,執(zhí)行The fourth step ./The fouth step,執(zhí)行 ZDApp_NetWorkInit()函數(shù)void ZDApp_NetworkInit( uint16 delay ) /The fourth step,網(wǎng)絡(luò)初始化 if ( delay ) / Wait awhile before starting the device osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, d
15、elay ); /發(fā)送ZDO_NETWORK_INIT(網(wǎng)絡(luò)初始化)消息到 ZDApp層,轉(zhuǎn)到 &
16、#160; &
17、#160; /ZDApp層,執(zhí)行The fifth step , ZDApp_event_loop() 函數(shù)
18、; else
19、; osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT ); /The fifth step,轉(zhuǎn)到ZDApp_event_loop()函數(shù)UINT16 ZDApp_event_loop( uint8 task_id, UINT16 events )if ( events & ZDO_NETWORK_INIT ) /The fivth step,網(wǎng)絡(luò)初始化事件處理 / Initialize apps and start the network devSt
20、ate = DEV_INIT;/設(shè)備邏輯類型,啟動模式,信標(biāo)時間,超幀長度,接著轉(zhuǎn)到The sixth step,去啟動設(shè)備,接著執(zhí)行The sixth step,轉(zhuǎn)到ZDO_StartDevice()ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,
21、160; DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );/ Return unprocessed events return (events ZDO_NETWORK_INIT); /The sixth step,執(zhí)行ZDO_StartDevice()函數(shù),啟動設(shè)備void ZDO_StartDevice( byte logicalType, devStartModes_t startMode, byte beaconOrder, byte superframeOrder ) /The sixth
22、 step.if ( ZG_BUILD_COORDINATOR_TYPE && logicalType = NODETYPE_COORDINATOR ) /當(dāng)設(shè)備作為協(xié)調(diào)器時,執(zhí)行這個條件語句。 if ( startMode = MODE_HARD ) devState = DEV_COORD_STARTING; /向網(wǎng)絡(luò)層發(fā)送網(wǎng)絡(luò)形成請求。當(dāng)網(wǎng)絡(luò)層執(zhí)行 NLME_NetworkFormationR
23、equest()建立網(wǎng)絡(luò)后,將給予 ZDO層反饋信息。 / 接著轉(zhuǎn)到The seventh step,去執(zhí)行ZDApp層的 ZDO_NetworkFormationConfirmCB()函數(shù) ret = NLME_NetworkFormationRequest( zgConfigPANID, zgApsUseExtendedPANID, zgDefaultChannelList, &
24、#160; zgDefaultStartingScanDuration, beaconOrder,
25、; superframeOrder, false ); if ( ZG_BUILD_JOINING_TYPE && (logicalType = NOD
26、ETYPE_ROUTER | logicalType = NODETYPE_DEVICE) ) /當(dāng)為終端設(shè)備或路由時 if ( (startMode = MODE_JOIN) | (startMode = MODE_REJOIN) ) devState = DEV_NWK_DISC;/ zgDefaultChannelList與協(xié)調(diào)器形成網(wǎng)絡(luò)的通道號匹配。 網(wǎng)絡(luò)發(fā)現(xiàn)請求。 / 繼而轉(zhuǎn)到Z
27、DO_NetworkDiscoveryConfirmCB()函數(shù) ret = NLME_NetworkDiscoveryRequest( zgDefaultChannelList, zgDefaultStartingScanDuration ); ./The seventh step,分兩種情況,1.協(xié)調(diào)器 2.路由器或終端設(shè)備1)協(xié)調(diào)器void ZDO_NetworkFormationConfirmCB( ZStatus_t Status ) /The sev
28、enth step,給予ZDO層網(wǎng)絡(luò)形成反饋信息(協(xié)調(diào)器)osal_set_event( ZDAppTaskID, ZDO_NETWORK_START ); /發(fā)送網(wǎng)絡(luò)啟動事件 到 ZDApp層,接著轉(zhuǎn)到ZDApp_event_loop()函數(shù) .UIN
29、T16 ZDApp_event_loop( uint8 task_id, UINT16 events ).if ( events & ZDO_NETWORK_START ) / 網(wǎng)絡(luò)啟動事件 ZDApp_NetworkStartEvt(); /網(wǎng)絡(luò)啟動事件,接著跳轉(zhuǎn)到The ninth step, 執(zhí)行ZDApp_NetworkStartEvt()函數(shù) . void ZDApp_NetworkStartEvt( void )
30、0; /處理網(wǎng)絡(luò)啟動事件.osal_pwrmgr_device( PWRMGR_ALWAYS_ON ); /電源總是上電osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT ); /設(shè)置網(wǎng)絡(luò)狀態(tài)改變事件,發(fā)送到ZDApp層,轉(zhuǎn)到T
31、he tenth step,去.
32、160; / ZDApp
33、_event_loop()函數(shù),找到相對應(yīng)的網(wǎng)絡(luò)改變事件。2)路由器或終端設(shè)備/The seventh step(終端設(shè)備), 當(dāng)發(fā)現(xiàn)有網(wǎng)絡(luò)存在時,網(wǎng)絡(luò)層將給予 ZDO 層發(fā)現(xiàn)網(wǎng)絡(luò)反饋信息ZStatus_t ZDO_NetworkDiscoveryConfirmCB( uint8 ResultCount, networkDesc_t *NetworkList ) ./把網(wǎng)絡(luò)發(fā)現(xiàn)這個反饋消息,發(fā)送到ZDA層,轉(zhuǎn)到 ZDApp_ProcessOSALMsg(),執(zhí)行 ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_
34、DISC_CNF, sizeof(ZDO_NetworkDiscoveryCfm_t), (uint8 *)&msg );void ZDApp_ProcessOSALMsg( osal_event_hdr_t *msgPtr ) . case ZDO_NWK_DISC_CNF: / (終端設(shè)備),網(wǎng)絡(luò)發(fā)現(xiàn)響應(yīng)。 ./當(dāng)發(fā)現(xiàn)有網(wǎng)絡(luò)存在時,網(wǎng)絡(luò)層將給予 ZDO 層發(fā)現(xiàn)網(wǎng)絡(luò)反饋信息。然后由網(wǎng)絡(luò)層發(fā)起加入網(wǎng)絡(luò)請求, &
35、#160; /如加入網(wǎng)絡(luò)成功,則網(wǎng)絡(luò)層將給予 ZDO 層加入網(wǎng)絡(luò)反饋,執(zhí)行NLME_JoinRequest()函數(shù)。然后轉(zhuǎn)到 /The ninth step,執(zhí)行 ZDO_JoinConfirmCB()函數(shù) if ( NLME_JoinRequest( (ZDO_NetworkDiscoveryCf
36、m_t *)msgPtr)->extendedPANID, BUILD_UINT16( (ZDO_NetworkDiscoveryCfm_t *)msgPtr)->panIdLSB, (ZDO_NetworkDiscoveryCfm_t *)msgPtr)->panIdMSB ),
37、 (ZDO_NetworkDiscoveryCfm_t *)msgPtr)->logicalChannel, ZDO_Config_Node_Descriptor.CapabilityFlags ) != ZSuccess )
38、0; ZDApp_NetworkInit( (uint16)(NWK_START_DELAY + (uint16)(osal_rand()& EXTENDED_JOINING_RANDOM_MA
39、SK) ); . void ZDO_JoinConfirmCB( uint16 PanId, ZStatus_t Status ) /The ninth step(終端設(shè)備), 終端設(shè)備加入網(wǎng)絡(luò)響應(yīng)。./將ZDO_NWK_JOIN_IND事件發(fā)送到ZDA層,執(zhí)行 ZDApp_ProcessOSALMsg()函數(shù)。
40、0; ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_JOIN_IND, sizeof(osal_event_hdr_t), (byte*)NULL );void ZDApp_ProcessOSALMsg( osal_event_hdr_t *msgPtr ).case ZDO_NWK_JOIN_IND: /終端設(shè)備,加入網(wǎng)絡(luò)反饋信息事件。 if ( ZG_BUILD_JOININ
41、G_TYPE && ZG_DEVICE_JOINING_TYPE ) ZDApp_ProcessNetworkJoin(); /轉(zhuǎn)到ZDApp_ProcessNetworkJoin(),執(zhí)行ZDApp_ProcessNetworkJoin()函數(shù)。 break;. 在執(zhí)行ZDApp_ProcessNetworkJoin()函數(shù)的時候,要分兩種情況,一種是終端設(shè)備,一種是路由器:3)終端設(shè)備
42、:void ZDApp_ProcessNetworkJoin( void ) /處理網(wǎng)絡(luò)加入事件。.if ( nwkStatus = ZSuccess ) /設(shè)置 ZDO_STATE_CHANGE_EVT ,發(fā)送到ZDA層,執(zhí)行 ZDApp_event_loop()函數(shù)。 osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT ); .4)路由器:void ZDApp_ProcessNetwork
43、Join( void ) . if ( ZSTACK_ROUTER_BUILD ) / NOTE: first two parameters are not used, see NLMEDE.h for details if ( ZDO_Config_Node_Descriptor.LogicalType != NODETYPE_DEVICE ) &
44、#160; NLME_StartRouterRequest( 0, 0, false ); /路由啟動請求 .void ZDO_StartRouterConfirmCB( ZSt
45、atus_t Status ) nwkStatus = (byte)Status;. osal_set_event( ZDAppTaskID, ZDO_ROUTER_START );UINT16 ZDApp_event_loop( uint8 task_id, UINT16 events ) if ( events & ZDO_ROUTER_START ) if ( nwkStatus = ZSuccess )
46、0; if ( devState = DEV_END_DEVICE ) devState = DEV_ROUTER; &
47、#160; /設(shè)備狀態(tài)變成路由器 osal_pwrmgr_device( PWRMGR_ALWAYS_ON ); else / remain as end device!
48、160; osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT ); /設(shè)置ZDO狀態(tài)改變事件 / Return unprocessed events return (events ZDO_ROUTER_START); /The eighth step,執(zhí)行ZDO狀態(tài)改變事件UINT16 ZDApp_event_
49、loop( uint8 task_id, UINT16 events ).if ( events & ZDO_STATE_CHANGE_EVT ) /The eighth step, 網(wǎng)絡(luò)改變事件,這個事件就是在設(shè)備加入網(wǎng)絡(luò)成功后,
50、 /并在網(wǎng)絡(luò)中的身份確定后產(chǎn)生的一個事件 ZDO_UpdateNwkStatus( devState );
51、/更新網(wǎng)絡(luò)狀態(tài),轉(zhuǎn)到The eleventh step,執(zhí)行 ZDO_UpdateNwkStatus()函數(shù)。. /The ninth step,執(zhí)行ZDO_UpdateNwkStatus()函數(shù),完成網(wǎng)絡(luò)狀態(tài)更新void ZDO_UpdateNwkStatus(devStates_t state) /The ninth step, 更新網(wǎng)絡(luò)狀態(tài).zdoSendStateChangeMsg(state, *(pItem->epDesc->task_id); /發(fā)送狀態(tài)改變消息到zdo層,這是The tenth step,轉(zhuǎn)到
52、;
53、;
54、; /zdoSendStateChangeMsg()函數(shù). ZDAppNwkAddr.addr.shortAddr = NLME_GetShortAddr(); /調(diào)用NLME_GetShortAddr()函數(shù),獲得16位短地址。 (void)NLME_GetExtAddr(); / Load the saveExtAddr pointer. /獲得64位的IEEE地址。/The tenth step,執(zhí)行zdoSendStateChangeMsg()函數(shù)static void zdoSendStateChangeMsg(
55、uint8 state, uint8 taskId) /The tenth step, osal_event_hdr_t *pMsg = (osal_event_hdr_t *)osal_msg_find(taskId, ZDO_STATE_CHANGE); if (NULL = pMsg) if (NULL = (pMsg = (osal_event_hdr_t *)osal_msg_allocate(sizeof(osal_event_hdr_t)
56、0; / Upon failure to notify any EndPoint of the state change, re-set the ZDO event to / try again later when more Heap may be available. osal_set_event(ZDAppTaskID, ZDO_STATE_CHANGE_EVT); /如果ZDO狀態(tài)沒有任何改變,再一次,跳到 &
57、#160; &
58、#160; &
59、#160; /ZDO_STATE_CHANGE_EVT事件處理函數(shù)。 else pMsg->event = ZDO_STATE_CHANGE; /如果ZDO狀態(tài)改變了 了,把ZDO_STATE_CHANGE這個消息保存到pMsg pMsg->status = state;
60、 (void)osal_msg_send(taskId, (uint8 *)pMsg); /轉(zhuǎn)到MT_TASK.C,去執(zhí)行The eleven step, MT_ProcessIncomingCommand()函數(shù) ./The eleventh step,去執(zhí)行MT_ProcessIncomingCommand()函數(shù)void MT_ProcessIncomingCommand( mtOSALSerialData_t *msg ).case ZDO_STATE
61、_CHANGE: /The thirteenth step, 接著跳到MT_ZdoStateChangeCB()函數(shù)。 &
62、#160; /自此,協(xié)調(diào)器組網(wǎng)形成(終端設(shè)備成功加入網(wǎng)絡(luò))MT_ZdoStateChangeCB(osal_event_hdr_t *)msg); break;./第五步,/初始化玩系統(tǒng)任務(wù)事件后,正是開始執(zhí)行操作系統(tǒng),此時操作系統(tǒng)不斷的檢測有沒有任務(wù)事件發(fā)生,一
63、旦檢測到有事件發(fā)生,就轉(zhuǎn) /到相應(yīng)的處理函數(shù),進(jìn)行處理。void osal_start_system( void ) /第五步,正式執(zhí)行操作系統(tǒng)#if !defined ( ZBIT ) && !defined ( UBIT ) for(;) / Forever Loop /死循環(huán)#endif uint8 idx = 0; osalTimeUpdate(); Hal_Proc
64、essPoll(); / This replaces MT_SerialPoll() and osal_check_timer(). do if (tasksEventsidx) / Task is highest priority that is ready. break;
65、0; / 得到待處理的最高優(yōu)先級任務(wù)索引號idx while (+idx < tasksCnt); if (idx < tasksCnt) uint16 events; halIntState_t intState;
66、0; HAL_ENTER_CRITICAL_SECTION(intState); /進(jìn)入臨界區(qū) events = tasksEventsidx; /提取需要處理的任務(wù)中的事件 tasksEventsidx = 0; / Clear the Events for this task. /
67、清除本次任務(wù)的事件 HAL_EXIT_CRITICAL_SECTION(intState); /退出臨界區(qū) events = (tasksArridx)( idx, events ); /通過指針調(diào)用任務(wù)處理函數(shù) , 緊接著跳到相應(yīng)的函數(shù)去處理,此為第五步 HAL_ENTER_CRITICAL_SECTION(intState); /進(jìn)入臨界區(qū) &
68、#160; tasksEventsidx |= events; / Add back unprocessed events to the current task. / 保存未處理的事件 HAL_EXIT_CRITICAL_SECTION(intState); /退出臨界區(qū) #if defined( POWER_SAVING ) else
69、0; / Complete pass through all task events with no activity? osal_pwrmgr_powerconserve(); / Put the processor/system into sleep #endif 第二個功能:設(shè)備間的綁定
70、160;
71、160;
72、160;
73、160;
74、160; -引用自藍(lán)天白云 UINT16 SerialApp_ProcessEvent( uint8 task_id, UINT16 events ) /當(dāng)有事件傳遞到應(yīng)用層的時候,執(zhí)行此處if ( events & SYS_EVENT_MSG ) / 有事件傳遞過來,故通過這個條件語句 .case KEY_CHANGE:
75、60; /鍵盤觸發(fā)事件 SerialApp_HandleKeys( (keyChange_t *)MSGpkt)->state, (keyChange_t *)MSGpkt)->keys ); /接著跳到相應(yīng)的按鍵處理函數(shù)去執(zhí)行 break;. ZDO終端設(shè)備綁定請求:設(shè)備能告訴協(xié)調(diào)器他們想建立綁定表格報告。該協(xié)調(diào)器將使協(xié)調(diào)并在這兩個設(shè)備上創(chuàng)建綁定表格條目。
76、在這里是以SerialApp例子為例。void SerialApp_HandleKeys( uint8 shift, uint8 keys ). if ( keys & HAL_KEY_SW_2 ) / Joystick right HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF );/終端設(shè)備綁定請求
77、/ Initiate an End Device Bind Request for the mandatory endpoint dstAddr.addrMode = Addr16Bit; dstAddr.addr.shortAddr = 0x0000; / Coordinator 地址ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(),
78、0; /終端設(shè)備綁定請求 SerialApp_epDesc.endPoint,
79、60; SERIALAPP_PROFID,
80、60; SERIALAPP_MAX_CLUSTERS, (cId_t *)SerialApp_ClusterList, &
81、#160; SERIALAPP_MAX_CLUSTERS, (cId_t *)SerialApp_ClusterList
82、, FALSE ); . if ( keys & HAL_KEY_SW_4 ) HalLedSet
83、 ( HAL_LED_4, HAL_LED_MODE_OFF ); / Initiate a Match Description Request (Service Discovery) dstAddr.addrMode = AddrBroadcast; /廣播地址 dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR;ZDP_MatchDescReq( &dstAd
84、dr, NWK_BROADCAST_SHORTADDR, /描述符匹配請求 這也是兩不同匹配方式,使用的按鍵不同
85、0; SERIALAPP_PROFID, SERIALAPP_MAX_CLUSTERS,
86、0; (cId_t *)SerialApp_ClusterList, SERIALAPP_MAX_CLUSTERS,
87、160; (cId_t *)SerialApp_ClusterList, FALSE ); 說明:從上面可以看到,SW2是發(fā)送終端設(shè)備綁定請求方式,SW4是發(fā)送描述符
88、匹配請求方式。如果按下SW2的話,使用終端設(shè)備綁定請求方式,這里是要通過終端告訴協(xié)調(diào)器他們想要建立綁定表格,協(xié)調(diào)器將協(xié)調(diào)這兩個請求的設(shè)備,在兩個設(shè)備上建立綁定表格條目。(1)終端設(shè)備向協(xié)調(diào)器發(fā)送終端設(shè)備綁定請求 調(diào)用ZDP_EndDeviceBindReq()函數(shù)發(fā)送綁定請求。ZDP_EndDeviceBindReq( &dstAddr, /目的地址設(shè)為0x0000;
89、60; NLME_GetShortAddr(), SerialApp_epDesc.endPoint, /EP號
90、0; SERIALAPP_PROFID,/Profile ID SERIALAPP_MAX_CLUSTERS, /輸入簇的數(shù)目
91、60; (cId_t *)SerialApp_ClusterList, /輸入簇列表 SERIALAPP_MAX_CLUSTERS, /輸出簇數(shù)目
92、; (cId_t *)SerialApp_ClusterList,/輸出簇列表 FALSE );該函數(shù)實(shí)際調(diào)用無線發(fā)送函數(shù)將綁定請求發(fā)送給協(xié)調(diào)器節(jié)點(diǎn):默認(rèn)clusterID為End_Device_Bind
93、_req,最后通過AF_DataRequest()發(fā)送出去.fillAndSend( &ZDP_TransID, dstAddr, End_Device_Bind_req, len );最后通過AF_DataRequest()發(fā)送出去,這里的&afAddr,是目的地址; &ZDApp_epDesc ,是端口號; clusterID,是簇號; len+1,是數(shù)據(jù)的長度;/ZDP_TmpBuf-1,是數(shù)據(jù)的內(nèi)容; transSeq,是數(shù)據(jù)的順序號; ZDP_TxOptions,是發(fā)射的一個選項 ; AF_DEFAULT_RADIUS,是一個默認(rèn)的半徑(跳數(shù))。AF_Data
94、Request( &afAddr, &ZDApp_epDesc, clusterID, (uint16)(len+1), (uint8*)(ZDP_TmpBuf-1), transSeq, ZDP_TxOptions, AF_DEFAULT_RADIUS );(2) 協(xié)調(diào)
95、器收到終端設(shè)備綁定請求End_Device_Bind_req這個信息會傳送到ZDO層,在ZDO層的事件處理函數(shù)中,調(diào)用ZDApp_ProcessOSALMsg( (osal_event_hdr_t *)msg_ptr );UINT16 ZDApp_event_loop( byte task_id, UINT16 events ) uint8 *msg_ptr; if ( events & SYS_EVENT_MSG ) while ( (msg_ptr = osal_msg_receive( ZDAppTaskI
96、D ) ) ZDApp_ProcessOSALMsg( (osal_event_hdr_t *)msg_ptr ); / Release the memory osal_msg_deallocate( msg_ptr ); / Return unprocessed eventsreturn (events SYS_EVENT_MSG); void ZDApp_ProcessOSALMsg( osal_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 千古奇書《明心寶鑒·孝行篇》(原文+譯文+解讀)
- 二零二五年度補(bǔ)充耕地指標(biāo)出讓與農(nóng)村土地經(jīng)營權(quán)流轉(zhuǎn)糾紛訴訟合同3篇
- 2025年中國SB開邊龍鳳市場調(diào)查研究報告
- 二零二五年度民辦學(xué)校新生試讀協(xié)議書范本及校園食品安全管理
- 二零二五年度農(nóng)業(yè)觀光旅游項目借款協(xié)議
- 二零二五年度配音演員經(jīng)紀(jì)合作協(xié)議示范文本
- 2025-2030全球法律顧問服務(wù)平臺行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球游戲插畫行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國待命救助船行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球船艉驅(qū)動推進(jìn)系統(tǒng)行業(yè)調(diào)研及趨勢分析報告
- 海通食品集團(tuán)楊梅汁產(chǎn)品市場營銷
- 圍術(shù)期下肢深靜脈血栓預(yù)防的術(shù)中護(hù)理
- DBJ51-T 151-2020 四川省海綿城市建設(shè)工程評價標(biāo)準(zhǔn)
- GB/T 12996-2012電動輪椅車
- 小象學(xué)院深度學(xué)習(xí)-第7講遞歸神經(jīng)網(wǎng)絡(luò)
- 三方采購協(xié)議范本
- 國有金融企業(yè)年金管理辦法
- 傾聽是一種美德
- 《水上加油站安全與防污染技術(shù)要求》J
- 項目部組織機(jī)構(gòu)框圖(共2頁)
- 機(jī)動車登記證書
評論
0/150
提交評論