1. 程式人生 > >ZIGBEE獲取本裝置及父裝置的IEEE64地址和短地址

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);