版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、這里給大家截取一篇使用開發(fā)系統(tǒng),學習 ZIGBEE2006 協(xié)議棧的文章. 芯片:CC2430 程序部分:深圳市無線龍電子有限公司2. 建立自己的項目 2.1 功能分析 項目的功能一共有按鍵檢測、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、小燈控制四種,在協(xié)議棧中已經(jīng)將 CC2430 的底層驅(qū)動全部固化在協(xié)議棧中,我們直接調(diào)用就可以了。 2.2 添加一個任務 整個協(xié)議棧是以一個 OS 貫穿的,我們要加入自己的應用,就要添加一個任務,(具體關于操作系統(tǒng)的介紹,請參考 OSAL API_F8W-2003-0002_.pdf 文檔),在任務中執(zhí)行,與協(xié)議棧實現(xiàn)無縫連接。 在協(xié)議棧中的 OSAL.c 文件中,byte osa
2、l_init_system( void )函數(shù)的功能是初始化 OS、添加任務到OS 任務表中。在這個函數(shù)中通過調(diào)用 osalAddTasks()函數(shù)來定制項目所需要應用的任務,該函數(shù)屬于應用層和 OS 之間的接口函數(shù),一般項目的建立需要根據(jù)系統(tǒng)的需要自己編寫改函數(shù),并將函數(shù)放到應用層。osalAddTasks()函數(shù)是通過 osalTaskAdd()函數(shù)完成任務添加。 首先,將支持協(xié)議棧功能需要的任務加載到該函數(shù)中, void osalAddTasks( void )osalTaskAdd (Hal_Init, Hal_ProcessEvent, OSAL_TASK_PRIORITY_LOW)
3、; #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 ); #endifosalTaskAdd( nwk_init, nwk_event_loop, OSAL_TASK_PRIORITY_MED ); osalTaskAdd( APS_Init, APS_event_loop, O
4、SAL_TASK_PRIORITY_LOW ); osalTaskAdd( ZDApp_Init, ZDApp_event_loop, OSAL_TASK_PRIORITY_LOW );這些任務是協(xié)議棧運行的先決條件,為了更好的使用協(xié)議棧,建議將這些任務都添加到任務列表中。這 些函數(shù)的參數(shù)條件在協(xié)議棧中已經(jīng)定義好,可以直接使用。 從上面加載的函數(shù)中可以發(fā)現(xiàn),要建立一個單獨的任務,必須先將 osalTaskAdd()函數(shù)所需要的參數(shù)條件定義好,這些參數(shù)分別是初始化函數(shù) WXL_example_Init,任務處理函數(shù) WXL_example_event_loop 和任務優(yōu)先級。 2.2.1 任務初
5、始化函數(shù) 任務初始化函數(shù)的功能是將該任務需要完成的功能的功能部件初始化,在每一個任務的初始化函數(shù)中, 必須完成的功能是要得到設置任務的任務 ID。 void WXL_ SampleApp _Init ( uint8 task_id )WXL_ SampleApp _Init = task_id;由于在這個任務中還有其他的功能,所以,我們對其他功能也需要做一定的初始化,包括對發(fā)送數(shù)據(jù)的 設置,按鍵的設置等。實現(xiàn)的函數(shù)為: void WXL_SampleApp_Init ( uint8 task_id )WXL_SampleApp_TaskID = task_id;/任務ID/*/7/*通訊需要的
6、參數(shù)*/*/ WXL_SampleApp_NwkState = DEV_INIT;/網(wǎng)絡類型WXL_SampleApp_TransID = 0;/ 設置發(fā)送數(shù)據(jù)的方式和目的地址 / 廣播到所有的設備 WXL_SampleApp_All_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast; WXL_SampleApp_All_DstAddr.endPoint = WXL_SAMPLEAPP_ENDPOINT; WXL_SampleApp_All_DstAddr.addr.shortAddr = 0xFFFF;/ 單播到一個設備 WXL_SampleApp
7、_Single_DstAddr.addrMode = (afAddrMode_t)afAddrGroup; WXL_SampleApp_Single_DstAddr.endPoint = WXL_SAMPLEAPP_ENDPOINT;/ 設置 endpoint description.WXL_SampleApp_epDesc.endPoint = WXL_SAMPLEAPP_ENDPOINT; WXL_SampleApp_epDesc.task_id = &WXL_SampleApp_TaskID; WXL_SampleApp_epDesc.simpleDesc= (SimpleDescrip
8、tionFormat_t *)&WXL_SampleApp_SimpleDesc; WXL_SampleApp_epDesc.latencyReq = noLatencyReqs;/ 登記(或注冊)endpoint description 到 AF afRegister( &WXL_SampleApp_epDesc );/ 登記(或注冊)所有的按鍵 RegisterForKeys( WXL_SampleApp_TaskID );2.2.2 任務處理函數(shù)任務處理函數(shù)是對任務發(fā)生后的 進行處理,在這個項目中主要完成的功能是通過協(xié)調(diào)器上的按鍵發(fā) 送一個數(shù)據(jù),控制路由器的小燈。所以里面就應該設計到按鍵
9、的 處理,網(wǎng)絡狀態(tài)的判斷(判斷設備 的類型,是協(xié)調(diào)器還是路由器或者是終端設備)和接收到信息后的處理。處理函數(shù)為: /* 函數(shù)名WXL_SampleApp_ProcessEvent* 函數(shù)功能: 一般應用任務處理,這個函數(shù)是處理所有的到任務,包括 * 時間片、消息和所有其他使用者定義過的時間。 * 參 數(shù): task_id - OS 分配的任務ID.這個ID 將用于發(fā)送數(shù)據(jù)和設置時間片.* events- 處理的 * returnnone*/uint16 WXL_SampleApp_ProcessEvent( uint8 task_id, uint16 events )afIncomingMSG
10、Packet_t *MSGpkt;if ( events & SYS_EVENT_MSG )/系統(tǒng)信息 /OS 發(fā)送過來的信息 MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( WXL_SampleApp_TaskID ); while ( MSGpkt )switch ( MSGpkt-hdr.event )case KEY_CHANGE:/ 按鍵 WXL_SampleApp_HandleKeys( (keyChange_t *)MSGpkt)-keys );/按鍵處理函數(shù)break;case AF_INCOMING_MSG_CMD:/
11、接收數(shù)據(jù)WXL_SampleApp_MessageMSGCB( MSGpkt );/接收數(shù)據(jù)的處理函數(shù)break;case ZDO_STATE_CHANGE:/ 網(wǎng)絡狀態(tài)發(fā)生變化時間WXL_SampleApp_NwkState= (devStates_t)(MSGpkt-hdr.status);/獲取網(wǎng)絡狀態(tài)if ( (WXL_SampleApp_NwkState = DEV_ZB_COORD)/判斷網(wǎng)絡類型 | (WXL_SampleApp_NwkState = DEV_ROUTER)| (WXL_SampleApp_NwkState = DEV_END_DEVICE) )else/ 設備不
12、屬于這個網(wǎng)絡 break;default:break;osal_msg_deallocate( (uint8 *)MSGpkt );/ 釋放存儲器 / Next - 如果有一個空閑的任務 MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( WXL_SampleApp_TaskID );return (events SYS_EVENT_MSG);/ 返回未處理的任務 return 0;2.2.3 按鍵子函數(shù)按鍵子函數(shù)的功能是處理所有的按鍵 ,在這里需要特別申明的是,本程序只實用與無線龍通訊 科技有限公司的硬件。按鍵的底層驅(qū)動函數(shù)在 Hal_ke
13、y.c 中,我們在這里按鍵需要完成的任務是,當協(xié)調(diào)器按鍵 1 被按下后,以廣播的方式發(fā)送數(shù)據(jù)去讓路由器小燈閃爍。 /* 函數(shù)名WXL_SampleApp_HandleKeys* 函數(shù)功能: 處理所有的按鍵 * 參數(shù):keys - 返回的按鍵值 * returnnone*/ void WXL_SampleApp_HandleKeys(uint8 keys )if ( keys & HAL_KEY_SW_1 )if(WXL_SampleApp_NwkState = DEV_ZB_COORD)/如果是協(xié)調(diào)器WXL_SampleApp_SendFlashMessage( WXL_SAMPLEAPP_F
14、LASH_DURATION ); /發(fā)送數(shù)據(jù)else2.2.4 接收處理函數(shù)接收處理函數(shù)的功能有兩部分,一是路由器的接收函數(shù),二是協(xié)調(diào)器的接收處理函數(shù)。在這個項目里面, 我們將這兩種設備的處理函數(shù)都固化在了一個函數(shù)里面,用串 ID(即 clusterID)來判斷他們的設備類型。 當路由器接收到數(shù)據(jù)后,先判斷該信息的串 ID,然后判斷命令,如果命令正確,則小燈閃爍,然后單播發(fā)送確認信號給協(xié)調(diào)器,協(xié)調(diào)器收到信號后,同樣先判斷串 ID,然后確認命令后小燈閃爍示意。 /* 函數(shù)名:SampleApp_MessageMSGCB* 函數(shù)功能: 接收的數(shù)據(jù)處理量.根據(jù)不同的串ID 實現(xiàn)不同的功能。 * pa
15、ramnone* returnnone*/ void WXL_SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )unsigned char Rx_Buf4; switch ( pkt-clusterId )case WXL_SAMPLEAPP_CLUSTERID1:/協(xié)調(diào)器memcpy(Rx_Buf,pkt-cmd.Data,3);if(Rx_Buf0 = Y) & (Rx_Buf1 = E) & (Rx_Buf2 = S)HalLedBlink( HAL_LED_4, 4, 50, 250);/小燈閃爍四次 break;case WXL_
16、SAMPLEAPP_CLUSTERID2:/路由器memcpy(Rx_Buf,pkt-cmd.Data,4);if(Rx_Buf0 = O) & (Rx_Buf1 = P) & (Rx_Buf2 = E) & (Rx_Buf3 = N)HalLedBlink( HAL_LED_4, 4, 50, 250);/小燈閃爍四次SendData(YES,pkt-srcAddr.addr.shortAddr,3);/以單播的方式回復信號 break;2.2.5 發(fā)送函數(shù)/* 函數(shù)名:SampleApp_SendFlashMessage* 函數(shù)功能: 廣播發(fā)送一串數(shù)據(jù)。 * paramnone* retu
17、rnnone*/ void WXL_SampleApp_SendFlashMessage( uint8 *buffer )if ( AF_DataRequest(&WXL_SampleApp_All_DstAddr,&WXL_SampleApp_epDesc, WXL_SAMPLEAPP_CLUSTERID2, 4,buffer, &WXL_SampleApp_TransID, AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) = afStatus_SUCCESS )else/ Error occurred in request to send./*/函數(shù)功能:以短地址方式
18、發(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ā)送的地址和模式 else&WXL_SampleApp_epDesc,/終端(比如操作系統(tǒng)中任務ID 等) WXL_SAMPLEAPP_CLUSTERID1,/發(fā)送串IDLeng,
19、 buf,&WXL_SampleApp_TransID, AF_DISCV_ROUTE,/AF_ACK_REQUEST,AF_DEFAULT_RADIUS ) = afStatus_SUCCESS )發(fā)送數(shù)據(jù)只是調(diào)用一個函數(shù),在這里不多做解釋。 2.2 完成任務的添加這時候回到 2.2 節(jié)中將建立的任務添加在列表中。 void osalAddTasks( void )osalTaskAdd (Hal_Init, Hal_ProcessEvent, OSAL_TASK_PRIORITY_LOW); #if defined( ZMAC_F8W )osalTaskAdd( macTaskInit,
20、macEventLoop, OSAL_TASK_PRIORITY_HIGH ); #endif#if defined( MT_TASK )osalTaskAdd( MT_TaskInit, MT_ProcessEvent, OSAL_TASK_PRIORITY_LOW ); #endifosalTaskAdd( nwk_init, nwk_event_loop, OSAL_TASK_PRIORITY_MED ); osalTaskAdd( APS_Init, APS_event_loop, OSAL_TASK_PRIORITY_LOW ); osalTaskAdd( ZDApp_Init, Z
21、DApp_event_loop, OSAL_TASK_PRIORITY_LOW );osalTaskAdd( WXL_SampleApp_Init, WXL_SampleApp_ProcessEvent, OSAL_TASK_PRIORITY_LOW );2.3 其他定義const cId_t WXL_SampleApp_ClusterListWXL_SAMPLEAPP_MAX_CLUSTERS =WXL_SAMPLEAPP_CLUSTERID1,/協(xié)調(diào)器WXL_SAMPLEAPP_CLUSTERID2/路由器 ;const SimpleDescriptionFormat_t WXL_Samp
22、leApp_SimpleDesc =WXL_SAMPLEAPP_ENDPOINT,/int Endpoint;WXL_SAMPLEAPP_PROFID,/uint16 AppProfId2;WXL_SAMPLEAPP_DEVICEID,/uint16 AppDeviceId2;WXL_SAMPLEAPP_DEVICE_VERSION,/intAppDevVer:4; WXL_SAMPLEAPP_FLAGS,/intAppFlags:4; WXL_SAMPLEAPP_MAX_CLUSTERS,/uint8AppNumInClusters; (cId_t *)WXL_SampleApp_ClusterList,/uint8 *pAppInClusterList; WXL_SAMPLEAPP_MAX_CLUSTERS,/uint8AppNumInClusters; (cId_t *)WXL_SampleApp_ClusterList/uint8 *pAppInClusterList;endPoin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大三(會計學)財務管理學試題
- 2025年大學本科三年級(電影學)電影史論基礎測試題及答案
- 2025年高職計算機網(wǎng)絡技術(網(wǎng)絡安全)試題及答案
- 2025年高職中醫(yī)學(中醫(yī)針灸)試題及答案
- 2025年中職安全工程技術(安全工程應用)模擬試題
- 2025年高職第二學年(軟件技術)Web前端開發(fā)測試題及答案
- 2025年大學(旅游管理)旅游經(jīng)濟學原理階段測試題及評分標準
- 2026年藥學(藥物研發(fā))專項測試題及答案
- 2025年大學舞蹈教學(舞蹈教學方法)試題及答案
- 印后制作員風險評估評優(yōu)考核試卷含答案
- 污泥安全管理制度范本
- 2023心力衰竭器械治療進展
- 2025年大學《應急裝備技術與工程-應急裝備概論》考試備考試題及答案解析
- 2025年國家開放大學(電大)《護理倫理學》期末考試復習題庫及答案解析
- 煤礦絞車證考試題庫及答案
- 中國水性丙烯酸壓敏膠項目商業(yè)計劃書
- 液流電池制造項目可行性研究報告
- 組織文化與員工滿意度
- GB/T 46075.1-2025電子束焊機驗收檢驗第1部分:原則與驗收條件
- DB21-T 1844-2022 保溫裝飾板外墻外保溫工程技術規(guī)程
- 艾梅乙安全助產(chǎn)培訓課件
評論
0/150
提交評論