ZigBee長地址的使用

通過已知的IEEE地址獲得該節點的網絡地址:

1、將某終端的IEEE地址保存至數組(與用SmartRF Flash讀出的長地址順序相反)

uint8 pDestination[] ={0x34,0xB1,0xC4,0x08,0x00,0x4B,0x12,0x00};

2、在應用層調用查詢網絡地址函數:

DP_NwkAddrReq(pDestination,ZDP_ADDR_REQTYPE_SINGLE,0,0);

3、消息會以廣播的形式發給網絡中所有未休眠的節點,擁有該IEEE地址的終端收到請求後會將網絡地址發回給請求方,請求方可以在ZDO層的處理函數中進行處理。在case NWK_addr_rsp下調用消息解析函數ZDO_ParseAddrRsp(); 提取出消息中的短地址:

ZDApp_ProcessOSALMsg();->case ZDO_CB_MSG:   ZDApp_ProcessMsgCBs();

case NWK_addr_rsp:

{            

 ZDO_NwkIEEEAddrResp_t  *My_pAddrRsp= ZDO_ParseAddrRsp(inMsg);

 mu_addr=My_pAddrRsp->nwkAddr; //把短地址保存起來

 break;    

 }

目前已實現用IEEE地址獲取休眠節點的網絡地址,並進行通訊。

直接使用IEEE地址進行發送數據:

1、將某終端的IEEE地址保存至數組(與用SmartRF Flash讀出的長地址順序相反)

uint8 pDestination[] ={0x34,0xB1,0xC4,0x08,0x00,0x4B,0x12,0x00};

2、創建地址結構體並進行填充:

afAddrType_t SampleApp_IEEE_DstAddr;   //長地址發送

SampleApp_IEEE_DstAddr.addrMode = (afAddrMode_t)Addr64Bit; //長地址發送

SampleApp_IEEE_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; 

osal_memcpy( &(SampleApp_IEEE_DstAddr.addr.extAddr),pDestination,8); 

3、調用AF函數對數據進行發送:

AF_DataRequest(&SampleApp_IEEE_DstAddr,&SampleApp_epDesc,SAMPLEAPP_P2P_CLUSTERID,4,data,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS )

PS:此方法只能用於與子節點的通訊。

發佈了36 篇原創文章 · 獲贊 27 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章