通過已知的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:此方法只能用於與子節點的通訊。