ZIGBEE獲取本裝置及父裝置的IEEE64地址和短地址
第一種方法,利用NLME.h裡面定義的專門API
獲取裝置自身IEEE地址
extern byte *NLME_GetExtAddr( void );
獲取裝置自身網路地址
extern uint16 NLME_GetShortAddr( void );
獲取父裝置網路地址
extern uint16 NLME_GetCoordShortAddr( void );
獲取父裝置IEEE地址
extern void NLME_GetCoordExtAddr( byte * );
第二種方法:
利用zb_GetDeviceInfo()函式-------------------這個方法測試沒通過,不知道為什麼老是提示函式沒定義,我將所有標頭檔案都加入了,還是這個提示!!
檢視該函式定義即可知用法:
void zb_GetDeviceInfo ( uint8 param, void *pValue )
{
switch(param)
{
case ZB_INFO_DEV_STATE:
osal_memcpy(pValue, &devState, sizeof(uint8));
break;
case ZB_INFO_IEEE_ADDR:
osal_memcpy(pValue, &aExtendedAddress, Z_EXTADDR_LEN);
break;
case ZB_INFO_SHORT_ADDR:
osal_memcpy(pValue, &_NIB.nwkDevAddress, sizeof(uint16));
break;
case ZB_INFO_PARENT_SHORT_ADDR:
osal_memcpy(pValue, &_NIB.nwkCoordAddress, sizeof(uint16));
break;
case ZB_INFO_PARENT_IEEE_ADDR:
osal_memcpy(pValue, &_NIB.nwkCoordExtAddress, Z_EXTADDR_LEN);
break;
case ZB_INFO_CHANNEL:
osal_memcpy(pValue, &_NIB.nwkLogicalChannel, sizeof(uint8));
break;
case ZB_INFO_PAN_ID:
osal_memcpy(pValue, &_NIB.nwkPanId, sizeof(uint16));
break;
case ZB_INFO_EXT_PAN_ID:
osal_memcpy(pValue, &_NIB.extendedPANID, Z_EXTADDR_LEN);
break;
}
}
例如要獲取裝置短地址,可以這樣:
uint16 my_short_addr;
zb_GetDeviceInfo(ZB_INFO_SHORT_ADDR,my_short_addr);
第三種方法:利用上述zb_GetDeviceInfo()函式的定義,同樣可知,通過讀取_NIB的值也可以獲取地址資訊,如下呼叫即可
uint16 my_short_addr = _NIB.nwkDevAddress;
第四種方法:直接讀NV,方法如下:
uint8 pValue[8];
osal_nv_read(ZCD_NV_EXTADDR , Z_EXTADDR_LEN, size, pValue);
pValue裡儲存的即是裝置擴充套件地址
第五種方法,利用OnBoard.c裡定義的全域性變數aExtendedAddress獲取IEEE地址,如下:
uint8 * pValue[Z_EXTADDR_LEN];
osal_memcpy(pValue, &aExtendedAddress, Z_EXTADDR_LEN);
第六種方法,利用ZMacGetReq()函式,如下:
uint8 * pValue[Z_EXTADDR_LEN];
ZMacGetReq(ZMacExtAddr,pValue);