




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、無線傳感器網絡第第8 8章章 Z-StackZ-Stack協議棧協議棧計計算機科算機科學學系系 宋文強宋文強1 什什么么是是協議棧協議棧?v 協議協議是一系列的通信是一系列的通信標標準,通信準,通信雙雙方需要共同按照方需要共同按照這這一一標標準準進進行正常行正常的的數數據據發發射和接收。射和接收。v 協議棧協議棧是是協議協議的具體的具體實現實現形式,是形式,是協議協議和用和用戶戶之之間間的一的一個個接口,接口,開發開發人人員員通通過過使用使用協議棧來協議棧來使用使用這個協議這個協議,進進而而實現實現無無線數線數據收據收發發。 v ZigBeeZigBee協議棧協議棧就是就是將將各各個層個層定定
2、義義的的協議協議都集合在一直,以函都集合在一直,以函數數的形的形式式實現實現,并給并給用用戶戶提供提供 API(API(應應用用層層) ) ),用,用戶戶可以直接可以直接調調用。用。2 ZigBee ZigBee 協議棧協議棧v ZigBee ZigBee 的的協議協議分分為兩為兩部分,部分,IEEE 802.15.4 IEEE 802.15.4 定定義義了了 PHYPHY(物理(物理層層)和和 MACMAC(介(介質訪問層質訪問層)技)技術規術規范;范;ZigBeeZigBee聯聯盟定盟定義義了了 NWKNWK(網絡網絡層層)、)、APSAPS(應應用程序支持子用程序支持子層層)、)、APL
3、APL(應應用用層層)技)技術規術規范。范。3 安裝安裝協議棧協議棧雙擊雙擊4 安裝安裝過過后的后的啟動啟動v 安裝之后的安裝之后的資資源管理器窗口源管理器窗口6 內內容容說說明明v ComponentsComponents,存放,存放庫庫的文件的文件夾夾,里面放了一些我,里面放了一些我們們用到的用到的 ZDOZDO,driverdriver,halhal,zcl zcl 等等庫庫的代的代碼碼v DocumentsDocuments,存放,存放 TI TI 的的開發開發文文檔檔,里面很多都是,里面很多都是講講述述協議棧協議棧的的 APIAPIv ProjectsProjects,存放,存放 T
4、I TI 協議棧協議棧的例程序,一的例程序,一個個個個例程例程序都是以序都是以 projectproject的形式提供的,的形式提供的,學學好好這這些例程序些例程序里面的一里面的一兩個兩個,基本上就能做事情了,基本上就能做事情了v ToolsTools,存放,存放 TI TI 例程序的一些上位機之例程序的一些上位機之類類的程序,的程序,作作為為工具使用工具使用7 協議棧協議棧是是協議協議的的實現實現v 協議棧協議棧是是協議協議的的實現實現,可以理解,可以理解為為代代碼碼,函,函數庫數庫,供上,供上層應層應用用調調用,用,協協議較議較底下的底下的層與應層與應用是相互用是相互獨獨立的。立的。v 商
5、商業業化的化的協議棧給協議棧給用用戶寫戶寫好了底好了底層層的代的代碼碼,符合,符合協議標協議標準,提供一準,提供一個個功功能模能模塊塊供用供用戶調戶調用。用。v 用用戶戶需要需要關關心的就是心的就是應應用用邏輯邏輯,數數據據從哪從哪里到里到哪哪里,里,怎么怎么存存儲儲、處處理,理,還還有系有系統內設備統內設備之之間間的通信的通信順順序。序。v 當應當應用需要用需要數數據通信據通信時時,調調用用組網組網函函數組數組建想要的建想要的網絡網絡;v 想想從從一一個設備發數個設備發數據到另一據到另一個設備時個設備時,調調用無用無線數線數據據發發送函送函數數;接收端;接收端就就調調用接收函用接收函數數;v
6、 當設備閑當設備閑置置時時,調調用睡眠函用睡眠函數數;工作;工作時調時調用用喚喚醒函醒函數數。v 當當用用戶戶做具體做具體應應用用時時,不需要,不需要關關心心協議棧協議棧是是怎么寫怎么寫的,里面的每的,里面的每條條代代碼碼是什是什么么意思。除非意思。除非你你要做要做協議研協議研究。究。v 每每個廠個廠商的商的協議棧協議棧有有區別區別,即函,即函數數名名稱稱和和參數參數可能有可能有區別區別,要看具體的,要看具體的例子、例子、說說明文明文檔檔。8 8.1.1 Z-Stack8.1.1 Z-Stack協議棧簡協議棧簡介介 v TITI公司在推出公司在推出CC2530CC2530射射頻頻芯片同芯片同時
7、時,也向用,也向用戶戶提供了提供了ZigBeeZigBee協議棧軟協議棧軟件件Z-StackZ-Stack。v 這這是一款是一款經過經過ZigBeeZigBee聯聯盟的盟的認認可,可,為為全球全球眾眾多多開發開發商所廣泛商所廣泛采用的商采用的商業級協議棧業級協議棧v 使用使用IAR Embedded Workbench for 8051IAR Embedded Workbench for 8051作作為為集成集成開發環開發環境境v TITI公司公司為為Z-StackZ-Stack協議棧協議棧中提供了一中提供了一個個名名為為操作系操作系統統抽象抽象層層OSALOSAL的的協議棧調協議棧調度程序。
8、度程序。對對于用于用戶來說戶來說,除了能,除了能夠夠看到看到這個這個調調度程序外,其度程序外,其它它任何任何協議棧協議棧操作的具體操作的具體實現細節實現細節都被封裝在都被封裝在庫庫代代碼碼中。用中。用戶戶在在應應用用開發時開發時只能通只能通過調過調用用APIAPI接口接口來進來進行,行,而無法知道而無法知道ZigBeeZigBee協議棧實現協議棧實現的具體的具體細節細節9 8.1.2 Z-Stack8.1.2 Z-Stack協議棧協議棧基本基本概概念念1 1)協調協調器器u 負責啟動負責啟動整整個網絡個網絡,也是,也是網絡網絡的第一的第一個設備個設備。協調協調器器選擇選擇一一個個信道和一信道和
9、一個個PAN IDPAN ID(即(即Personal Area Network ID)Personal Area Network ID),隨隨后后啟動啟動整整個網絡個網絡。u 協調協調器也可以用器也可以用來協來協助建立助建立網絡網絡中安全中安全層層和和應應用用層層的的綁綁定定(bindings)(bindings)。u 協調協調器的角色主要涉及器的角色主要涉及網絡網絡的的啟動啟動和配置。一旦和配置。一旦這這些都完成后,些都完成后,協調協調器器的工作就和一的工作就和一個個路由器相同。由于路由器相同。由于ZigBeeZigBee網絡網絡本身的分布特性,因此接本身的分布特性,因此接下下來來整整個網
10、絡個網絡的操作就不再依的操作就不再依賴協調賴協調器是否存在。器是否存在。2 2)路由器)路由器u 功能:允功能:允許許其他其他設備設備加入加入網絡網絡,多跳路由,多跳路由協協助由助由電電池供池供電電的子的子終終端端設備設備的通的通訊訊。u 通常,路由器需要一直通常,路由器需要一直處處于活于活動狀態動狀態,因此必,因此必須須使用主使用主電電源供源供電電。但是。但是當當使用使用樹這種網絡樹這種網絡拓撲拓撲結構時結構時,允,允許許路由器路由器間間隔一定的周期操作一次,隔一定的周期操作一次,這樣這樣就可以使用就可以使用電電池池給給其供其供電電。3 3)終終端端設備設備u 終終端端設備沒設備沒有有維維持
11、持網絡結構網絡結構的的職責職責,它它可以睡眠或者可以睡眠或者喚喚醒,因此可以是醒,因此可以是由由電電池供池供電電的的設備設備。u 通常,通常,終終端端設備對設備對存存儲儲空空間間( (特特別別是是RAMRAM的需要的需要) )比比較較小。小。 10 8.1.2 Z-Stack8.1.2 Z-Stack協議棧協議棧信道信道 u ZigBeeZigBee采用直接序列采用直接序列擴頻擴頻(DSSSDSSS)在工)在工業業科科學醫療學醫療(ISM)(ISM)頻頻段,段,2.4GHz(2.4GHz(全球全球) )、915MHz(915MHz(美美國國) )和和868MHz(868MHz(歐歐洲洲) )。
12、在在2.4G2.4G頻頻段上段上IEEE802.15.4/ZigBeeIEEE802.15.4/ZigBee規規定了定了1616個個信道信道, ,每每個個信道信道頻帶寬頻帶寬度度為為5MHz5MHz。u ZigBeeZigBee與與其他通信其他通信協議協議的信道沖突:的信道沖突: 15 15,2020,2525,2626信道信道與與Wi-FiWi-Fi信道沖突信道沖突較較小小 藍藍牙牙 基本不基本不會會沖突。無沖突。無繩電話盡繩電話盡量不量不與與ZigBeeZigBee同同時時使用使用 11 8.1.2 Z-Stack8.1.2 Z-Stack協議棧協議棧PANIDPANIDv 1616位位I
13、DID值值用用來標識來標識唯一一唯一一個個ZigBeeZigBee網絡網絡,主要是用于,主要是用于區區分分網絡網絡,使得同一地,使得同一地區區可以同可以同時時存在多存在多個個ZigBeeZigBee網絡網絡。取取值值范范圍圍是是0 x00000 x00000 x3FFF0 x3FFF。v 當設當設置置為為0 xFFFF0 xFFFF時時,協調協調器可以器可以隨隨機機獲獲取一取一個個1616位的位的PANIDPANID建立一建立一個網絡個網絡。v 路由器或者路由器或者終終端端設備設備可以加入任意一可以加入任意一個個已已設設定信道上的定信道上的網網絡絡而不去而不去關關心心PANIDPANID。v
14、PANIDPANID用于在用于在邏輯邏輯上上區區分同一地分同一地區區或者同一信道上的或者同一信道上的ZigBeeZigBee節節點,在不同地點,在不同地區區或者同一地或者同一地區區不同的信道可以使不同的信道可以使用同一用同一PANIDPANID。 12 8.1.2 Z-Stack8.1.2 Z-Stack協議棧協議棧地址地址 v ZigBeeZigBee設備設備有有兩種類兩種類型的地址。型的地址。v 6464位位IEEEIEEE地址,即地址,即MACMAC地址地址v 6464位地址是全球唯一的地址,位地址是全球唯一的地址,設備將設備將在在它它的生命周期中一的生命周期中一直直擁擁有有它它。它它通
15、常由制造商或者被安裝通常由制造商或者被安裝時設時設置。置。這這些地址些地址由由IEEEIEEE來維護來維護和分配。和分配。v 1616位位網絡網絡地址地址v 1616位地址位地址為網絡為網絡地址是地址是當設備當設備加入加入網絡網絡后分配的,后分配的,協調協調器器按照一定的算法按照一定的算法進進行分配。行分配。它它在在網絡網絡中是唯一的,用中是唯一的,用來來在在網絡網絡中中鑒別設備鑒別設備和和發發送送數數據。據。 13 8.1.2 Z-Stack8.1.2 Z-Stack協議棧協議棧數數據據傳傳送方式送方式(1 1)單單點點傳傳送送(Unicast)(Unicast) 將數將數據包據包發發送送給
16、給一一個個已已經經知道知道網絡網絡地址的地址的網絡設備網絡設備。(2 2)間間接接傳傳送送(Indirect)(Indirect) 當應當應用程序不知道用程序不知道數數據包的目據包的目標設備標設備在在哪哪里的里的時時候使用的模候使用的模式。式。從發從發送送設備設備的的棧棧的的綁綁定表中定表中查查找目找目標設備標設備。這種這種特點特點稱稱之之為為源源綁綁定。定。當數當數據向下據向下發發送到送到達棧達棧中,中,從綁從綁定表中定表中查查找找并并且使用且使用該該目目標標地址。地址。 這樣這樣,數數據包據包將將被被處處理成理成為為一一個標個標準的準的單單點點傳傳送送數數據包。如據包。如果在果在綁綁定表中
17、找到多定表中找到多個設備個設備,則則向每向每個設備個設備都都發發送一送一個數個數據據包的拷包的拷貝貝。 14 數數據據傳傳送方式送方式廣播廣播傳傳送送(3 3)廣播廣播傳傳送送(broadcast)(broadcast) 當應當應用程序需要用程序需要將數將數據包據包發發送送給網絡給網絡的每一的每一個設備時個設備時,使用,使用這種數這種數據據傳傳送方式。目送方式。目標標地址可以地址可以設設置置為為下面廣播地址的一下面廣播地址的一種種: (0 xFFFF)(0 xFFFF)數數據包據包將將被被傳傳送到送到網絡網絡上的所有上的所有設備設備,包括睡,包括睡眠中的眠中的設備設備。對對于睡眠中的于睡眠中的
18、設備設備,數數據包據包將將被保留在其父被保留在其父親親節節點直到點直到查詢查詢到到它它,或者消息超,或者消息超時時。 (0 xFFFD)(0 xFFFD)數數據包據包將將被被傳傳送到送到網絡網絡上的所有在空上的所有在空閑時閑時打打開開接收的接收的設備設備,也就是,也就是說說,除了睡眠中的所有,除了睡眠中的所有設備設備。 (0 xFFFC)(0 xFFFC)數數據包據包發發送送給給所有的路由器,包括所有的路由器,包括協調協調器。器。 15 (4 4)組尋組尋址址v 當應當應用程序需要用程序需要將數將數據包據包發發送送給網絡給網絡上的一上的一組設備組設備時時,可以使用,可以使用組尋組尋址。址。v
19、在使用在使用這個這個功能之前,必功能之前,必須須在在網絡網絡中定中定義組義組v 組組可以用可以用來關聯間來關聯間接接尋尋址址v 綁綁定表中找到的目定表中找到的目標標地址可能是地址可能是單單點點傳傳送或者是一送或者是一個組個組地址地址v 廣播廣播發發送可以看作是一送可以看作是一個組尋個組尋址的特例址的特例16 8.1.2 Z-Stack8.1.2 Z-Stack協議棧協議棧端點端點 v 端點(端點(EndPointEndPoint):):為實現為實現一一個設備個設備描述而定描述而定義義的一的一組組群集,定群集,定義義了一了一個設備內個設備內的一的一個個通信通信實實體,體,一一個個特定特定應應用通
20、用通過它過它被被執執行。行。v ZDOZDO的的EndpointEndpoint為為0 0,其他,其他應應用程序的用程序的EndpointEndpoint從從12401240,241255241255保留未用。保留未用。v 關關于于EndPointEndPoint的理解就是的理解就是虛擬鏈虛擬鏈路。路。 17 8.1.2 Z-Stack8.1.2 Z-Stack協議棧協議棧拓撲拓撲結構結構v ZigBeeZigBee技技術術具有強大的具有強大的組網組網能力,可以形成星型能力,可以形成星型、樹樹型和型和MESHMESH網狀網網狀網,可以根據,可以根據實際項實際項目需要目需要來來選擇選擇合適的合適
21、的網絡結構網絡結構。v 默默認認的拓撲的拓撲結構結構是是MESHMESH網狀網狀拓撲拓撲結構結構。 18 8.1.2 Z-Stack8.1.2 Z-Stack協議棧協議棧簇簇v 簇(簇(clustercluster):一):一個應個應用用規規范范內內的所有的所有設備設備,通,通過過簇的方式彼此簇的方式彼此進進行通信。行通信。v 簇可被簇可被輸輸入入給給一一個設備個設備,也可,也可從從一一個設備個設備被被輸輸出。出。v 簇的作用主要在于簇的作用主要在于發發送方和接收方送方和接收方關關于通信的一于通信的一種種約約定,接收方接收到的信息的簇定,接收方接收到的信息的簇IDID來來判定要判定要對對接收接
22、收到的信息到的信息進進行行怎樣怎樣的的處處理。理。 19 8.1.2 Z-Stack8.1.2 Z-Stack協議棧協議棧路由路由 v 路由能路由能夠夠自愈自愈ZigBeeZigBee網絡網絡v 如果某如果某個個無無線連線連接接斷開斷開了,路由功能又能自了,路由功能又能自動尋動尋找找一一條條新的路新的路徑徑避避開開那那個斷開個斷開的的網絡連網絡連接。接。這這就就極極大大地提高了地提高了網絡網絡的可靠性,同的可靠性,同時時也是也是ZigBeeZigBee網絡網絡的的一一個關鍵個關鍵特性。特性。 20 8.1.2 Z-Stack8.1.2 Z-Stack協議棧協議棧協議棧規協議棧規范范 v Zig
23、BeeZigBee聯聯盟定盟定義義指定。在同一指定。在同一個網絡個網絡中的中的設備設備必必須須符合同一符合同一個協議棧規個協議棧規范(同一范(同一個網絡個網絡中所有中所有設備設備的的協議棧規協議棧規范必范必須須一一致)。致)。 v ZigBeeZigBee聯聯盟盟為為ZigBeeZigBee協議棧協議棧20072007定定義義了了2 2個規個規范:范:ZigBeeZigBee和和ZigBee PROZigBee PRO。所有的。所有的設備設備只要遵循只要遵循該規該規范,即使在不同范,即使在不同廠廠商商買買的不同的不同設備設備同同樣樣可以形成可以形成網絡網絡。v ZigBeeZigBee和和Zi
24、gBee PROZigBee PRO之之間間最主要的特性差最主要的特性差異異就是就是對對高高級別級別安全性的支持。高安全性的支持。高級別級別安全性提供了一安全性提供了一個個在點在點對對點點連連接之接之間間建立建立鏈鏈路密匙的機制,路密匙的機制,并并且且當網絡設備當網絡設備在在應應用用層層無法得到信無法得到信任任時時增加了更多的安全性。像增加了更多的安全性。像許許多多PROPRO特性那特性那樣樣,高,高級級安全安全特性特性對對于某些于某些應應用而言非常有用,但在有效利用用而言非常有用,但在有效利用寶貴節寶貴節點空點空間間方面卻付出很大代價。方面卻付出很大代價。 21 8.2 Sample App
25、lication8.2 Sample Application工程工程工程路徑:C:Texas InstrumentsZ-Stack-CC2530-2.5.0ProjectZ-StackSamplesCC2530DBSampleApp.ewp實際應用時,創建工程的路徑不要層次太多,否則有可能打不開,或者運行速度很慢22 8.2.1 Z-Stack8.2.1 Z-Stack目目錄結構錄結構 v APPAPP(Application ProgrammingApplication Programming):應應用用層層目目錄錄,這這是用是用戶創戶創建各建各種種不同工程的不同工程的區區域,在域,在這個這
26、個目目錄錄中包含了中包含了應應用用層層的的內內容和容和這個項這個項目的主要目的主要內內容。容。v HALHAL(Hardware (H/W) Abstraction LayerHardware (H/W) Abstraction Layer):硬件:硬件層層目目錄錄,包含有,包含有與與硬件相硬件相關關的配置和的配置和驅動驅動及操作函及操作函數數。v MACMAC:MAC MAC 層層目目錄錄,包含了,包含了MAC MAC 層層的的參數參數配置文件及其配置文件及其MAC MAC 的的LIB LIB 庫庫的函的函數數接口文件。接口文件。v MTMT(Monitor TestMonitor Test
27、):實現實現通通過過串口可控各串口可控各層層,于各,于各層進層進行行直接交互。直接交互。v NWKNWK(ZigBee Network LayerZigBee Network Layer):網絡層網絡層目目錄錄,含,含網絡層網絡層配配置置參數參數文件及文件及網絡層庫網絡層庫的函的函數數接口文件接口文件23 8.2.1 Z-Stack8.2.1 Z-Stack目目錄結構錄結構v OSALOSAL(Operating System (OS) Abstraction LayerOperating System (OS) Abstraction Layer):協協議棧議棧的操作系的操作系統統。v Pr
28、ofileProfile:AF AF 層層目目錄錄,包含,包含AF AF 層處層處理函理函數數文件。文件。v SecuritySecurity:安全:安全層層目目錄錄,安全,安全層處層處理函理函數數,比如加密函,比如加密函數數等等v ServicesServices:地址:地址處處理函理函數數目目錄錄,包括著地址模式的定,包括著地址模式的定義義及地及地址址處處理函理函數數v ToolsTools:工程配置目:工程配置目錄錄,包括空,包括空間劃間劃分及分及Z-Stack Z-Stack 相相關關配置配置信息。信息。v ZDOZDO(ZigBee Device ObjectsZigBee Devi
29、ce Objects):ZDO ZDO 目目錄錄。v ZMacZMac: MAC MAC 層層目目錄錄,包括,包括MAC MAC 層參數層參數配置及配置及MAC MAC 層層LIB LIB 庫庫函函數數回回調處調處理函理函數數。v ZMainZMain:主函:主函數數目目錄錄,包括入口函,包括入口函數數及硬件配置文件。及硬件配置文件。v OutputOutput:輸輸出文件目出文件目錄錄,這個這個IAR IAR 自自動動生成的。生成的。 24 8.2.2 Sample Application8.2.2 Sample Application工程工程概況概況 v 工程中的每工程中的每個設備個設備都
30、可以都可以發發送和接收送和接收兩種兩種信息:信息:(1 1)周期信息)周期信息v 設備設備加入加入網絡網絡后,每隔后,每隔5s5s發發送一送一個個周期信息,周期信息,該該信息的信息的數數據據載載荷荷為發為發送信息的次送信息的次數數(2 2)閃爍閃爍信息信息v 按下按下SW1SW1發發送一送一個個控制控制LEDLED燈燈閃爍閃爍的廣播信息,的廣播信息,該該廣播信廣播信息只息只針對組針對組1 1內內的所有的所有設備設備。v 所有所有設備設備初始化后都被加入初始化后都被加入組組1 1,所以,所以網絡網絡一旦建立完成一旦建立完成便可便可執執行行LEDLED閃爍閃爍v 按下按下SW2SW2退出退出組組1
31、 1,不再接收,不再接收來來自自組組1 1的消息的消息v 再次按下再次按下SW2SW2又可以加入又可以加入組組1 1,再次接收,再次接收來來自自組組1 1的消息的消息25 8.2.3 Sample Application8.2.3 Sample Application工程初始化工程初始化與與事件事件處處理理v Z-StackZ-Stack協議棧協議棧的核心是事件的的核心是事件的產產生和事件的生和事件的處處理理v Z-StackZ-Stack協議棧協議棧各各層層的初始化是事件的初始化是事件處處理的前提理的前提26 8.2.3 Sample Application8.2.3 Sample Appl
32、ication初始化函初始化函數數void SampleApp_Init( uint8 task_id )void SampleApp_Init( uint8 task_id ) SampleApp_TaskID = task_id; SampleApp_TaskID = task_id;/ / 通通過參數過參數的的傳遞為傳遞為每一每一層層分分發發任任務務IDID SampleApp_NwkState = DEV_INIT; SampleApp_NwkState = DEV_INIT; SampleApp_TransID = 0; SampleApp_TransID = 0;#if defin
33、ed (BUILD_ALL_DEVICES)#if defined (BUILD_ALL_DEVICES)/BUILD_ALL_DEVICES /BUILD_ALL_DEVICES 是一是一個編譯選項個編譯選項 if ( readCoordinatorJumper() ) if ( readCoordinatorJumper() )/ / 如果如果檢測檢測到跳到跳線線,按照,按照協調協調器器啟動啟動 zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR; zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR;
34、else else/ / 否否則則按路由器按路由器啟動啟動 zgDeviceLogicalType = ZG_DEVICETYPE_ROUTER; zgDeviceLogicalType = ZG_DEVICETYPE_ROUTER;#endif#endif#if defined ( HOLD_AUTO_START ) #if defined ( HOLD_AUTO_START ) / / 如果定如果定義義了了HOLD_AUTO_START HOLD_AUTO_START 編譯選項編譯選項 ZDOInitDevice(0); ZDOInitDevice(0);/ / 執執行此函行此函數數#en
35、dif#endif/ / 設設置周期信息的目置周期信息的目標標地址,此地址地址,此地址為為廣播地址廣播地址0 xFFFF0 xFFFF SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast; SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast; SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; SampleApp_Periodic_DstAddr.endPoint = SA
36、MPLEAPP_ENDPOINT; SampleApp_Periodic_DstAddr.addr.shortAddr = 0 xFFFF; SampleApp_Periodic_DstAddr.addr.shortAddr = 0 xFFFF;27 8.2.3 Sample Application8.2.3 Sample Application初始化函初始化函數數/ / 設設置置閃爍閃爍信息的地址,此地址信息的地址,此地址為組為組1 1的地址的地址SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup;SampleApp_Fl
37、ash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup;SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP;SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP;/ / 對對端點端點 endpoi
38、nt endpoint 進進行描述行描述SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_epDesc.endPoint = SAMPLEAPP_ENDPOINT;SampleApp_epDesc.task_id = &SampleApp_TaskID;SampleApp_epDesc.task_id = &SampleApp_TaskID;SampleApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t SampleApp_epDesc.simpleDesc = (SimpleDe
39、scriptionFormat_t * *)&SampleApp_SimpleDesc;)&SampleApp_SimpleDesc;SampleApp_epDesc.latencyReq = noLatencyReqs; SampleApp_epDesc.latencyReq = noLatencyReqs; afRegister( &SampleApp_epDesc ); afRegister( &SampleApp_epDesc ); / / 注注冊冊端點描述符端點描述符/ / 注注冊冊按按鍵鍵事件,按事件,按鍵鍵事件由事件由應應用用層處層處理理RegisterForKeys( Samp
40、leApp_TaskID );RegisterForKeys( SampleApp_TaskID );/ / 默默認認情情況況,所有,所有設備設備都加入都加入組組1 1SampleApp_Group.ID = 0 x0001;SampleApp_Group.ID = 0 x0001;/ / 設設定定組組IDIDosal_memcpy( SampleApp_G, “Group 1”, 7 );osal_memcpy( SampleApp_G, “Group 1”, 7 );/ / 設設定定組組名名aps_AddGroup( SAMPLEAPP_ENDPOINT
41、, &SampleApp_Group );aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );/ / 加入加入組組#if defined ( LCD_SUPPORTED ) #if defined ( LCD_SUPPORTED ) / / 如果如果編譯編譯了了LCD_SUPPORTEDLCD_SUPPORTED,執執行液晶行液晶顯顯示示 HalLcdWriteString( SampleApp, HAL_LCD_LINE_1 ); HalLcdWriteString( SampleApp, HAL_LCD_LINE_1 );#endif#
42、endif 28 8.2.4 Sample Application8.2.4 Sample Application事件事件處處理函理函數數uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ) afIncomingMSGPacket_t afIncomingMSGPacket_t * *MSGpkt;MSGpkt; (void)task_id; (void)task_id; / Intentionally
43、unreferenced parameter/ Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) if ( events & SYS_EVENT_MSG )/如果有事件如果有事件發發生生 / / 從從消息列表中消息列表中獲獲取取SampleApp_TaskIDSampleApp_TaskID相相關關的消息的消息 MSGpkt = (afIncomingMSGPacket_t MSGpkt = (afIncomingMSGPacket_t * *)osal_msg_receive( SampleApp_TaskI
44、D );)osal_msg_receive( SampleApp_TaskID ); while ( MSGpkt ) while ( MSGpkt ) switch ( MSGpkt-hdr.event )switch ( MSGpkt-hdr.event )/ / 根據不同的事件,根據不同的事件,執執行相行相應應的程序分支的程序分支 case KEY_CHANGE:case KEY_CHANGE:/ / 按按鍵鍵事件事件 SampleApp_HandleKeys( (keyChange_t SampleApp_HandleKeys( (keyChange_t * *)MSGpkt)-sta
45、te, (keyChange_t )MSGpkt)-state, (keyChange_t * *)MSGpkt)-keys );)MSGpkt)-keys ); break; break; case AF_INCOMING_MSG_CMD:case AF_INCOMING_MSG_CMD:/ OTA/ OTA消息事件消息事件 SampleApp_MessageMSGCB( MSGpkt ); SampleApp_MessageMSGCB( MSGpkt ); break; break; case ZDO_STATE_CHANGE:case ZDO_STATE_CHANGE:/ / 設備狀態設
46、備狀態改改變變事件事件 SampleApp_NwkState = (devStates_t)(MSGpkt-hdr.status); SampleApp_NwkState = (devStates_t)(MSGpkt-hdr.status); if ( (SampleApp_NwkState = DEV_ZB_COORD) | (SampleApp_NwkState = DEV_ROUTER) if ( (SampleApp_NwkState = DEV_ZB_COORD) | (SampleApp_NwkState = DEV_ROUTER) | (SampleApp_NwkState =
47、DEV_END_DEVICE) ) | (SampleApp_NwkState = DEV_END_DEVICE) ) osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); else / else / 設備設備不在
48、不在網絡網絡中中 break; break; default:default: break; break; 29 8.2.4 Sample Application8.2.4 Sample Application事件事件處處理函理函數數 osal_msg_deallocate( (uint8 osal_msg_deallocate( (uint8 * *)MSGpkt );)MSGpkt );/ / 釋釋放放內內存存 MSGpkt = (afIncomingMSGPacket_t MSGpkt = (afIncomingMSGPacket_t * *)osal_msg_receive( Samp
49、leApp_TaskID );)osal_msg_receive( SampleApp_TaskID ); return (events SYS_EVENT_MSG); return (events SYS_EVENT_MSG); / / 返回未返回未處處理事件理事件 if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )/ / 周期信息事件周期信息事件 SampleApp_SendPeriodicMessage(); SampleApp_SendPeriodi
50、cMessage();/ / 發發送周期信息送周期信息 / Setup to send message again in normal period (+ a little jitter)/ Setup to send message again in normal period (+ a little jitter) osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EV
51、T, (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0 x00FF) ); (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0 x00FF) ); return (events SAMPLEAPP_SEND_PERIODIC_MSG_EVT); return (events SAMPLEAPP_SEND_PERIODIC_MSG_EVT); / / 返回未返回未處處理事件理事件 return 0; return 0; / / 放棄未知事件放棄未知事件 30 8.2.5 Sa
52、mple Application8.2.5 Sample Application工程流程工程流程1.1.周期信息周期信息 在在Sample ApplicationSample Application工程中,工程中,當設備當設備成功成功啟動啟動最最終觸發終觸發了事件了事件ZDO_STATE_CHANGEZDO_STATE_CHANGE,此事件此事件會調會調用用Sample ApplicationSample Application工程工程應應用用層層的事件的事件處處理函理函數數SampleApp_ProcessEvent()SampleApp_ProcessEvent()進進行行處處理。理。ca
53、se ZDO_STATE_CHANGE:case ZDO_STATE_CHANGE:/ / 設備狀態設備狀態改改變變事件事件 SampleApp_NwkState = (devStates_t)(MSGpkt-hdr.status); SampleApp_NwkState = (devStates_t)(MSGpkt-hdr.status); if ( (SampleApp_NwkState = DEV_ZB_COORD) if ( (SampleApp_NwkState = DEV_ZB_COORD) | (SampleApp_NwkState = DEV_ROUTER) | (Sample
54、App_NwkState = DEV_ROUTER) | (SampleApp_NwkState = DEV_END_DEVICE) ) | (SampleApp_NwkState = DEV_END_DEVICE) ) osal_start_timerEx( SampleApp_TaskID, osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); SAMPLEAP
55、P_SEND_PERIODIC_MSG_TIMEOUT ); else else / / 設備設備不在不在網絡網絡中中 break; break;31 代代碼碼分析分析下述下述條條件件語語句:句:if ( (SampleApp_NwkState = DEV_ZB_COORD) if ( (SampleApp_NwkState = DEV_ZB_COORD) | (SampleApp_NwkState = | (SampleApp_NwkState = DEV_ROUTER) DEV_ROUTER) | (SampleApp_NwkState = DEV_END_DEVICE) | (Sampl
56、eApp_NwkState = DEV_END_DEVICE) ) )v 如果如果設備設備的的網絡狀態為網絡狀態為下列之一:下列之一:vDEV_ZB_COORDDEV_ZB_COORD/ / 協調協調器器vDEV_ROUTER DEV_ROUTER / / 路由器路由器 vDEV_END_DEVICEDEV_END_DEVICE/ / 終終端端設備設備v 則則表明表明設備啟動設備啟動成功成功v 網絡狀態網絡狀態在在設備啟動時設備啟動時被被設設定定v 如果如果設備啟動設備啟動成功,成功,則調則調用函用函數數osal_start_timerEx()osal_start_timerEx()進進行行處
57、處理理32 處處理理設備網終狀態設備網終狀態的代的代碼碼如下:如下:osal_start_timerEx( SampleApp_TaskID, osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_EVT, SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT ); SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );v 參數說參數說明:明:vSampleApp_TaskIDSampleApp_TaskID任任
58、務務IDIDvSAMPLEAPP_SEND_PERIODIC_MSG_EVTSAMPLEAPP_SEND_PERIODIC_MSG_EVT定定時觸發時觸發事件事件 vSAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUTSAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT定定時長時長度度33 代代碼碼分析分析執執行行switchswitch分支程序分支程序過過后,仍后,仍將執將執行下述代行下述代碼碼:if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )if ( events & SAMPLEAPP_SEND_PERIO
59、DIC_MSG_EVT )/ / 周期信息事件周期信息事件 SampleApp_SendPeriodicMessage(); SampleApp_SendPeriodicMessage();/ / 發發送周期信息送周期信息 / Setup to send message again in normal period (+ a little jitter)/ Setup to send message again in normal period (+ a little jitter) osal_start_timerEx( SampleApp_TaskID, osal_start_timerE
60、x( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,SAMPLEAPP_SEND_PERIODIC_MSG_EVT,(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0 x00FF) );(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0 x00FF) );return (events SAMPLEAPP_SEND_PERIODIC_MSG_EVT);return (events SAMPLEAPP_SEND_PERIODI
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司繪畫體驗活動方案
- 公司百年活動方案
- 公司游玩海邊活動方案
- 公司溫泉游活動策劃方案
- 公司管理部策劃方案
- 公司組織籃球活動方案
- 公司棋類活動方案
- 公司歡聚日活動策劃方案
- 公司旅游漂流活動方案
- 公司模擬面試活動方案
- 2024年天津市應急管理局招聘行政執法專職技術檢查員筆試真題
- 2025年養老護理員職業考試試題及答案
- 揭陽惠來縣紀委監委等部門屬下事業單位招聘筆試真題2024
- 春蘇教版六年級數學總復習30課時教學設計
- 黨課課件含講稿:以作風建設新成效激發干事創業新作為
- 西安美術學院《舞臺編導藝術》2023-2024學年第二學期期末試卷
- 城投公司工程管理制度
- 2025全國農業(水產)行業職業技能大賽(水生物病害防治員)選拔賽試題庫(含答案)
- 油浸式變壓器 電抗器 檢修規范標準
- 2025年中國膨潤土貓砂項目投資可行性研究報告
- 職業技術學院2024級智能機器人技術專業人才培養方案
評論
0/150
提交評論