我通过Texas Instrument 读出终端模块的IEEE地址(MAC),该终端与协调器组网后,在协调器app通过调用ZDP_NwkAddrReq()想获得终端的网络地址,可是怎么也得不到啊?是不是要在ZDApp_ProcessMsgCBs() case NWK_addr_rsp:中操作?
我的app部分代码如下:
byte pDestination[] ={0x00,0x12,0x4B,0x00,0x03,0x3E,0xCB,0x71};
ZDP_NwkAddrReq(pDestination,ZDP_ADDR_REQTYPE_SINGLE,0,0);
ZDapp修改代码如下:
void ZDApp_ProcessMsgCBs( zdoIncomingMsg_t *inMsg )
{
switch ( inMsg->clusterID )
{
#if defined ( ZDO_NWKADDR_REQUEST ) || defined ( ZDO_IEEEADDR_REQUEST ) || defined ( REFLECTOR )
case NWK_addr_rsp:
{
printf("inMsg = %sn",inMsg);
ZDO_NwkIEEEAddrResp_t *My_pAddrRsp;
My_pAddrRsp = ZDO_ParseAddrRsp( inMsg );
Sure_nwkAddr = My_pAddrRsp->nwkAddr;
break;
}
....
}收起
我有更好的答案
/******************************************************************************
* @fn AddrMgrNwkAddrLookup
*
* @brief Lookup NWK address using the EXT address.
*
* @param extAddr - [in] EXT address
* nwkAddr - [out] NWK address
*
* @return uint8 - success(TRUE:FALSE)
*/
extern uint8 AddrMgrNwkAddrLookup( uint8* extAddr, uint16* nwkAddr );
可以用协议栈提供的函数,根据已知的IEEE地址获取IP
/******************************************************************************
* @fn AddrMgrNwkAddrLookup
*
* @brief Lookup NWK address using the EXT address.
*
* @param extAddr - [in] EXT address
* nwkAddr - [out] NWK address
*
* @return uint8 - success(TRUE:FALSE)
*/
extern uint8 AddrMgrNwkAddrLookup( uint8* extAddr, uint16* nwkAddr );
可以用协议栈提供的函数,根据已知的IEEE地址获取IP