ZigBee2006協(xié)議棧使用指南_第1頁
ZigBee2006協(xié)議棧使用指南_第2頁
ZigBee2006協(xié)議棧使用指南_第3頁
ZigBee2006協(xié)議棧使用指南_第4頁
ZigBee2006協(xié)議棧使用指南_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、通往無線的橋梁 無線世界的先鋒 目 錄 1.認識協(xié)議棧.2 2.建立自己的項目.3 2.1 功能分析.3 2.2 添加一個任務(wù).3 2.2.1 任務(wù)初始化函數(shù).4 2.2.2 任務(wù)處理函數(shù).5 2.2.3 按鍵子函數(shù).7 2.2.4 接收處理函數(shù).7 2.2.5 發(fā)送函數(shù).8 2.2 完成任務(wù)的添加.10 2.3 其他定義.10 3.小結(jié) .11 成都無線龍通訊科技有限公司 2008 年 8 月 地址:成都市武成大街 2 號萊茵春天大廈 902 室 電話傳真成都無線龍通訊科技有限公司 網(wǎng)址: Email: info 通往無線的橋梁 無線世

2、界的先鋒 說明: 本說明書介紹的是基于成都無線龍通訊科技有限公司的 ZigBee 無線網(wǎng)絡(luò)開發(fā)系統(tǒng) C51RF-3 系列(C51RF-3-PK/CS/JKS/LPK/WSN)所配置的 ZigBee2006 協(xié)議棧。 1.認識協(xié)議棧 打開協(xié)議棧,在工程文件的左邊 Workspace 中可以看到整個協(xié)議棧的構(gòu)架,如圖所示, APP:應(yīng)用層目錄,這是用戶創(chuàng)建各種不同工程的區(qū)域,在這個目錄中包含了應(yīng)用層的 內(nèi)容和這個項目的主要內(nèi)容,在協(xié)議棧里面一般是以操作系統(tǒng)的任務(wù)實現(xiàn)的。 HAL:硬件層目錄,包含有與硬件相關(guān)的配置和驅(qū)動及操作函數(shù)。 MAC:MAC 層目錄,包含了 MAC 層的參數(shù)配置文件及其 MA

3、C 的 LIB 庫的函數(shù)接口 文件。 MT:實現(xiàn)通過串口可控各層,于各層進行直接交互。 NWK:網(wǎng)絡(luò)層目錄,含網(wǎng)絡(luò)層配置參數(shù)文件及網(wǎng)絡(luò)層庫的函數(shù)接口文件,APS 層庫的 函數(shù)接口 OSAL:協(xié)議棧的操作系統(tǒng)。 Profile:AF 層目錄,包含 AF 層處理函數(shù)文件。 Security:安全層目錄,安全層處理函數(shù),比如加密函數(shù)等。 地址:成都市武成大街 2 號萊茵春天大廈 902 室 電話傳真成都無線龍通訊科技有限公司 網(wǎng)址: Email: info 通往無線的橋梁 無線世界的先鋒 Services:地址處理函數(shù)目錄,包括著地址模式的定義

4、及地址處 理函數(shù)。 Tools:工程配置目錄,包括空間劃分及 ZStack 相關(guān)配置信息。 ZDO:ZDO 目錄。 ZMac: MAC 層目錄,包括 MAC 層參數(shù)配置及 MAC 層 LIB 庫函數(shù)回調(diào)處理函數(shù)。 ZMain:主函數(shù)目錄,包括入口函數(shù)及硬件配置文件。 Output:輸出文件目錄,這個 EW8051 IDE 自動生成的。 從上面的描述中可以看出,整個協(xié)議棧中,對于 ZigBee 的功能已經(jīng)全部體現(xiàn),在次基 礎(chǔ)上建立一個項目的方法主要是改動應(yīng)用層,下面,我們以一個簡單的例子,協(xié)調(diào)器用按鍵 控制發(fā)送一組數(shù)據(jù),通過這組數(shù)據(jù)控制路由器設(shè)備的小燈閃爍,來講解整個協(xié)議棧的使用。 我們將這個項

5、目的名字設(shè)置為 WXL_example 2.建立自己的項目 2.1 功能分析 項目的功能一共有按鍵檢測、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、小燈控制四種,在協(xié)議棧中已經(jīng) 將 CC2430 的底層驅(qū)動全部固化在協(xié)議棧中,我們直接調(diào)用就可以了。 2.2 添加一個任務(wù) 整個協(xié)議棧是以一個 OS 貫穿的,我們要加入自己的應(yīng)用,就要添加一個任務(wù), (具體 關(guān)于操作系統(tǒng)的介紹,請參考 OSAL API_F8W-2003-0002_.pdf 文檔) ,在任務(wù)中執(zhí)行,與協(xié) 議棧實現(xiàn)無縫連接。 在協(xié)議棧中的 OSAL.c 文件中, byte osal_init_system( void )函數(shù)的功能是初始化 OS、 添 加任務(wù)

6、到 OS 任務(wù)表中。在這個函數(shù)中通過調(diào)用 osalAddTasks()函數(shù)來定制項目所需要應(yīng)用 的任務(wù),該函數(shù)屬于應(yīng)用層和 OS 之間的接口函數(shù),一般項目的建立需要根據(jù)系統(tǒng)的需要自 己編寫改函數(shù),并將函數(shù)放到應(yīng)用層。osalAddTasks()函數(shù)是通過 osalTaskAdd()函數(shù)完成任 務(wù)添加。 首先,將支持協(xié)議棧功能需要的任務(wù)加載到該函數(shù)中, void osalAddTasks( void ) osalTaskAdd (Hal_Init, Hal_ProcessEvent, OSAL_TASK_PRIORITY_LOW); #if defined( ZMAC_F8W ) osalTas

7、kAdd( macTaskInit, macEventLoop, OSAL_TASK_PRIORITY_HIGH ); #endif #if defined( MT_TASK ) osalTaskAdd( MT_TaskInit, MT_ProcessEvent, OSAL_TASK_PRIORITY_LOW ); #endif osalTaskAdd( nwk_init, nwk_event_loop, OSAL_TASK_PRIORITY_MED ); 地址:成都市武成大街 2 號萊茵春天大廈 902 室 網(wǎng)址: 電話傳真Email:

8、 info 成都無線龍通訊科技有限公司 通往無線的橋梁 無線世界的先鋒 osalTaskAdd( OSAL_TASK_PRIORITY_LOW ); osalTaskAdd( ZDApp_Init, ZDApp_event_loop, OSAL_TASK_PRIORITY_LOW ); APS_Init, APS_event_loop, 這些任務(wù)是協(xié)議棧運行的先決條件,為了更好的使用協(xié)議棧,建議將這些任務(wù)都添加 到任務(wù)列表中。這些函數(shù)的參數(shù)條件在協(xié)議棧中已經(jīng)定義好,可以直接使用。 從上面加載的函數(shù)中可以發(fā)現(xiàn),要建立一個單獨的任務(wù),必須先將 osalTaskAdd()函數(shù) 所需要的參數(shù)條件定義好

9、,這些參數(shù)分別是初始化函數(shù) WXL_example_Init,任務(wù)處理函數(shù) WXL_example_event_loop 和任務(wù)優(yōu)先級。 2.2.1 任務(wù)初始化函數(shù) 任務(wù)初始化函數(shù)的功能是將該任務(wù)需要完成的功能的功能部件初始化,在每一個任務(wù) 的初始化函數(shù)中,必須完成的功能是要得到設(shè)置任務(wù)的任務(wù) ID。 void WXL_ SampleApp _Init ( uint8 task_id ) WXL_ SampleApp _Init = task_id; 由于在這個任務(wù)中還有其他的功能,所以,我們對其他功能也需要做一定的初始化, 包括對發(fā)送數(shù)據(jù)的設(shè)置,按鍵的設(shè)置等。實現(xiàn)的函數(shù)為: void WXL

10、_SampleApp_Init ( uint8 task_id ) WXL_SampleApp_TaskID = task_id; 通訊需要的參數(shù) /任務(wù) ID /*/ /* */ /*/ WXL_SampleApp_NwkState = DEV_INIT; WXL_SampleApp_TransID = 0; / 設(shè)置發(fā)送數(shù)據(jù)的方式和目的地址 / 廣播到所有的設(shè)備 /網(wǎng)絡(luò)類型 WXL_SampleApp_All_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast; WXL_SampleApp_All_DstAddr.endPoint = WXL_SA

11、MPLEAPP_ENDPOINT; WXL_SampleApp_All_DstAddr.addr.shortAddr = 0xFFFF; / 單播到一個設(shè)備 WXL_SampleApp_Single_DstAddr.addrMode = (afAddrMode_t)afAddrGroup; WXL_SampleApp_Single_DstAddr.endPoint = WXL_SAMPLEAPP_ENDPOINT; / 設(shè)置 endpoint description. WXL_SampleApp_epDesc.endPoint = WXL_SAMPLEAPP_ENDPOINT; WXL_Sam

12、pleApp_epDesc.task_id = &WXL_SampleApp_TaskID; 地址:成都市武成大街 2 號萊茵春天大廈 902 室 電話傳真成都無線龍通訊科技有限公司 網(wǎng)址: Email: info 通往無線的橋梁 無線世界的先鋒 WXL_SampleApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&WXL_SampleApp_SimpleDesc; WXL_SampleApp_epDesc.latencyReq = noLatencyReqs; /

13、 登記 endpoint description 到 AF afRegister( &WXL_SampleApp_epDesc ); / 登記所有的按鍵事件 RegisterForKeys( WXL_SampleApp_TaskID ); 2.2.2 任務(wù)處理函數(shù) 任務(wù)處理函數(shù)是對任務(wù)發(fā)生后的事件進行處理,在這個項目中主要完成的功能是通過 協(xié)調(diào)器上的按鍵發(fā)送一個數(shù)據(jù), 控制路由器的小燈。 所以里面就應(yīng)該設(shè)計到按鍵的事件處理, 網(wǎng)絡(luò)狀態(tài)的判斷(判斷設(shè)備的類型,是協(xié)調(diào)器還是路由器或者是終端設(shè)備)和接收到信息后 的處理。處理函數(shù)為: /* * 函數(shù)名 * * 函數(shù)功能: 一般應(yīng)用任務(wù)事件處理

14、,這個函數(shù)是處理所有的事件到任務(wù),事件包括 * * * 參 數(shù): task_id - OS 分配的任務(wù) ID. 這個 ID 將用于發(fā)送數(shù)據(jù)和設(shè)置時間片. * * * return */ uint16 WXL_SampleApp_ProcessEvent( uint8 task_id, uint16 events ) afIncomingMSGPacket_t *MSGpkt; none events - 處理的事件 時間片、消息和所有其他使用者定義過的時間。 WXL_SampleApp_ProcessEvent if ( events & SYS_EVENT_MSG ) 信息, MSG

15、pkt = (afIncomingMSGPacket_t *)osal_msg_receive( WXL_SampleApp_TaskID ); 過來的信息 while ( MSGpkt ) switch ( MSGpkt->hdr.event ) / 按鍵事件 case KEY_CHANGE: 地址:成都市武成大街 2 號萊茵春天大廈 902 室 電話傳真成都無線龍通訊科技有限公司 網(wǎng)址: Email: info /系統(tǒng) /OS 發(fā)送 通往無線的橋梁 無線世界的先鋒 /按鍵處理函數(shù) WXL_SampleApp_HandleKeys

16、( (keyChange_t *)MSGpkt)->keys ); break; / 接收數(shù)據(jù)事件 case AF_INCOMING_MSG_CMD: /接收數(shù)據(jù)的處理函數(shù) WXL_SampleApp_MessageMSGCB( MSGpkt ); break; / 網(wǎng)絡(luò)狀態(tài)發(fā)生變化時間 case ZDO_STATE_CHANGE: WXL_SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status); if ( (WXL_SampleApp_NwkState = DEV_ZB_COORD) 絡(luò)類型 | (WXL_SampleApp_

17、NwkState = DEV_ROUTER) | (WXL_SampleApp_NwkState = DEV_END_DEVICE) ) /獲取網(wǎng)絡(luò)狀態(tài) /判斷網(wǎng) else / 設(shè)備不屬于這個網(wǎng)絡(luò) break; default: break; / 釋放存儲器 osal_msg_deallocate( (uint8 *)MSGpkt ); / Next - 如果有一個空閑的任務(wù) MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( WXL_SampleApp_TaskID ); / 返回未處理的任務(wù) return (events SYS_EVEN

18、T_MSG); return 0; 地址:成都市武成大街 2 號萊茵春天大廈 902 室 電話傳真成都無線龍通訊科技有限公司 網(wǎng)址: Email: info 通往無線的橋梁 無線世界的先鋒 2.2.3 按鍵子函數(shù) 按鍵子函數(shù)的功能是處理所有的按鍵事件, 在這里需要特別申明的是, 本程序只實用與 無線龍通訊科技有限公司的硬件。按鍵的底層驅(qū)動函數(shù)在 Hal_key.c 中,我們在這里按鍵需 要完成的任務(wù)是,當(dāng)協(xié)調(diào)器按鍵 1 被按下后,以廣播的方式發(fā)送數(shù)據(jù)去讓路由器小燈閃爍。 /* * 函數(shù)名 * * 函數(shù)功能: 處理所有的按鍵事件 * * 參

19、數(shù): * * * return */ void WXL_SampleApp_HandleKeys(uint8 keys ) if ( keys & HAL_KEY_SW_1 ) if(WXL_SampleApp_NwkState = DEV_ZB_COORD) /如果是協(xié)調(diào)器 none keys - 返回的按鍵值 WXL_SampleApp_HandleKeys WXL_SampleApp_SendFlashMessage( WXL_SAMPLEAPP_FLASH_DURATION ); /發(fā)送數(shù)據(jù) else 2.2.4 接收處理函數(shù) 接收處理函數(shù)的功能有兩部分,一是路由器的接收函數(shù),

20、二是協(xié)調(diào)器的接收處理函數(shù)。 在這個項目里面,我們將這兩種設(shè)備的處理函數(shù)都固化在了一個函數(shù)里面,用串 ID 來判斷 他們的設(shè)備類型。當(dāng)路由器接收到數(shù)據(jù)后,先判斷該信息的串 ID,然后判斷命令,如果命 令正確,則小燈閃爍,然后單播發(fā)送確認信號給協(xié)調(diào)器,協(xié)調(diào)器收到信號后,同樣先判斷串 ID,然后確認命令后小燈閃爍示意。 /* * 函數(shù)名: * * 函數(shù)功能: 接收的數(shù)據(jù)處理量.根據(jù)不同的串 ID 實現(xiàn)不同的功能。 * * param * 地址:成都市武成大街 2 號萊茵春天大廈 902 室 電話傳真成都無線龍通訊科技有限公司 網(wǎng)址: Email

21、: info none SampleApp_MessageMSGCB 通往無線的橋梁 無線世界的先鋒 * return */ void WXL_SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) unsigned char Rx_Buf4; switch ( pkt->clusterId ) case WXL_SAMPLEAPP_CLUSTERID1: memcpy(Rx_Buf,pkt->cmd.Data,3); if(Rx_Buf0 = 'Y') && (Rx_Buf1 = 'E

22、9;) && (Rx_Buf2 = 'S') HalLedBlink( HAL_LED_4, 4, 50, 250); break; /小燈閃爍四次 none case WXL_SAMPLEAPP_CLUSTERID2: memcpy(Rx_Buf,pkt->cmd.Data,4); if(Rx_Buf0 = 'O') && (Rx_Buf1 = 'P') && (Rx_Buf2 = 'E') && (Rx_Buf3 = 'N') HalLedB

23、link( HAL_LED_4, 4, 50, 250); SendData("YES",pkt->srcAddr.addr.shortAddr,3); break; /小燈閃爍四次 /以單播的方式回復(fù)信號 2.2.5 發(fā)送函數(shù) /* * 函數(shù)名: * * 函數(shù)功能: 廣播發(fā)送一串?dāng)?shù)據(jù)。 * * param * * return */ none none SampleApp_SendFlashMessage void WXL_SampleApp_SendFlashMessage( uint8 *buffer ) if ( AF_DataRequest( &WX

24、L_SampleApp_All_DstAddr, &WXL_SampleApp_epDesc, WXL_SAMPLEAPP_CLUSTERID2, 地址:成都市武成大街 2 號萊茵春天大廈 902 室 電話傳真成都無線龍通訊科技有限公司 網(wǎng)址: Email: info 通往無線的橋梁 無線世界的先鋒 4, buffer, &WXL_SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) = afStatus_SUCCESS ) else / Error occurred

25、 in request to send. /* /*以短地址方式發(fā)送數(shù)據(jù) /buf :發(fā)送的數(shù)據(jù) /addr:目的地址 /Leng:數(shù)據(jù)長度 /* void WXL_SampleApp_SendData(uint8 *buf, uint16 addr, uint8 Leng) WXL_SampleApp_Single_DstAddr.addr.shortAddr = addr; if ( AF_DataRequest( &WXL_SampleApp_Single_DstAddr, /發(fā)送的地址和模式 &WXL_SampleApp_epDesc, /終端(比如操作系統(tǒng)中任務(wù) ID

26、 等) WXL_SAMPLEAPP_CLUSTERID1,/發(fā)送串 ID Leng, buf, &WXL_SampleApp_TransID, AF_DISCV_ROUTE, / AF_ACK_REQUEST, AF_DEFAULT_RADIUS ) = afStatus_SUCCESS ) else 發(fā)送數(shù)據(jù)只是掉用一個函數(shù),在這里不多做解釋。 地址:成都市武成大街 2 號萊茵春天大廈 902 室 電話傳真成都無線龍通訊科技有限公司 網(wǎng)址: Email: info 通往無線的橋梁 無線世界的先鋒 2.2 完成任務(wù)的添加 這時候回

27、到 2.2 節(jié)中將建立的任務(wù)添加在列表中。 void osalAddTasks( void ) osalTaskAdd (Hal_Init, Hal_ProcessEvent, OSAL_TASK_PRIORITY_LOW); #if defined( ZMAC_F8W ) osalTaskAdd( macTaskInit, macEventLoop, OSAL_TASK_PRIORITY_HIGH ); #endif #if defined( MT_TASK ) osalTaskAdd( MT_TaskInit, MT_ProcessEvent, OSAL_TASK_PRIORITY_LOW

28、 ); #endif osalTaskAdd( nwk_init, nwk_event_loop, OSAL_TASK_PRIORITY_MED ); osalTaskAdd( APS_Init, APS_event_loop, OSAL_TASK_PRIORITY_LOW ); osalTaskAdd( ZDApp_Init, ZDApp_event_loop, OSAL_TASK_PRIORITY_LOW ); osalTaskAdd( OSAL_TASK_PRIORITY_LOW ); WXL_SampleApp_Init, WXL_SampleApp_ProcessEvent, 2.3

29、 其他定義 const cId_t WXL_SampleApp_ClusterListWXL_SAMPLEAPP_MAX_CLUSTERS = WXL_SAMPLEAPP_CLUSTERID1, WXL_SAMPLEAPP_CLUSTERID2 ; const SimpleDescriptionFormat_t WXL_SampleApp_SimpleDesc = WXL_SAMPLEAPP_ENDPOINT, WXL_SAMPLEAPP_PROFID, WXL_SAMPLEAPP_DEVICEID, WXL_SAMPLEAPP_DEVICE_VERSION, WXL_SAMPLEAPP_FL

30、AGS, WXL_SAMPLEAPP_MAX_CLUSTERS, (cId_t *)WXL_SampleApp_ClusterList, WXL_SAMPLEAPP_MAX_CLUSTERS, (cId_t *)WXL_SampleApp_ClusterList ; / / / / / / int Endpoint; uint16 AppProfId2; uint16 AppDeviceId2; int int / AppDevVer:4; AppFlags:4; uint8 AppNumInClusters; uint8 *pAppInClusterList; / uint8 AppNumInClusters; / uint8

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論