當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 協(xié)調(diào)器還是終端設(shè)備?
我們知道協(xié)調(diào)器(coordinator)和終端節(jié)點(diǎn)(enddevice)是通過(guò)不同的工程區(qū)分的,但我們發(fā)現(xiàn)兩個(gè)工程包含的文件又大致相同。那協(xié)議棧中如何判斷設(shè)備的類(lèi)型并進(jìn)行相應(yīng)的操作呢?
首先帶大家認(rèn)識(shí)一個(gè)全局變量zgDeviceLogicalType,他就是設(shè)備邏輯類(lèi)型。這個(gè)變量位于ZGlobals.c文件中,他是協(xié)議棧中的一個(gè)全局變量,我們用戶(hù)不需要修改。到這里我們可能想到他的值是什么,那就確定了該設(shè)備的類(lèi)型。那我們go to define跟蹤一下DEVICE_LOGICAL_TYPE這個(gè)宏。
發(fā)現(xiàn)協(xié)議棧是根據(jù)ZG_BUILD_COORDINATOR_TYPE、ZG_BUILD_RTR_TYPE、ZG_BUILD_ENDDEVICE_TYPE這三個(gè)宏來(lái)決定DEVICE_LOGICAL_TYPE。
那ZG_BUILD_COORDINATOR_TYPE、ZG_BUILD_RTR_TYPE、ZG_BUILD_ENDDEVICE_TYPE分別又是什么呢?從下圖我們可以發(fā)現(xiàn)當(dāng)定義了ZDO_COORDINATOR設(shè)備就是協(xié)調(diào)器,定義了RTR_NWK設(shè)備就是路由,如果前兩者均未定義則設(shè)備為終端設(shè)備。
ZDO_COORDINATOR和RTR_NWK是何時(shí)被定義的呢?我們來(lái)看下邊的圖,我們發(fā)現(xiàn)不同的工程會(huì)包含不同的文件,協(xié)調(diào)器工程包含f8wCoord.cfg、路由器工程包含f8wRouter.cfg、終端設(shè)備工程包含f8wEndev.cfg。
我們發(fā)現(xiàn)f8wCoord.cfg中有Coordinator Settings:-DZDO_COORDINATOR -DRTR_NWK,f8wRouter.cfg中有Router Settings:-DRTR_NWK,f8wEndev.cfg中沒(méi)有相關(guān)的配置。到這里我們已經(jīng)知道了協(xié)議棧是如何通過(guò)配置文件來(lái)配置設(shè)備類(lèi)型了。