Zigbee 获取设备地址信息
生活随笔
收集整理的這篇文章主要介紹了
Zigbee 获取设备地址信息
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
refer to ?http://blog.csdn.net/tanqiuwei/article/details/7640952
第一種方法,利用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,方法如下:
#include "OSAL_Nv.h"
uint8 pValue[8];
osal_nv_read(ZCD_NV_EXTADDR ,0 , Z_EXTADDR_LEN, pValue);
pValue里保存的即是設備擴展地址
第五種方法,利用OnBoard.c里定義的全局變量aExtendedAddress獲取IEEE地址,如下:
uint8 pValue[Z_EXTADDR_LEN];
osal_memcpy(pValue, &aExtendedAddress, Z_EXTADDR_LEN);
第六種方法,利用ZMacGetReq()函數,如下:
#include "ZMAC.h"
#include "zmac_internal.h"
uint8 ?pValue[Z_EXTADDR_LEN];
其中第6中方法是獲得MIB屬性,MIB屬性如下:
// MAC PIB Attributes enum {ZMacAckWaitDuration = MAC_ACK_WAIT_DURATION,ZMacAssociationPermit = MAC_ASSOCIATION_PERMIT,ZMacAutoRequest = MAC_AUTO_REQUEST,ZMacBattLifeExt = MAC_BATT_LIFE_EXT,ZMacBattLeftExtPeriods = MAC_BATT_LIFE_EXT_PERIODS,ZMacBeaconMSDU = MAC_BEACON_PAYLOAD,ZMacBeaconMSDULength = MAC_BEACON_PAYLOAD_LENGTH,ZMacBeaconOrder = MAC_BEACON_ORDER,ZMacBeaconTxTime = MAC_BEACON_TX_TIME,ZMacBSN = MAC_BSN,ZMacCoordExtendedAddress = MAC_COORD_EXTENDED_ADDRESS,ZMacCoordShortAddress = MAC_COORD_SHORT_ADDRESS,ZMacDSN = MAC_DSN,ZMacGTSPermit = MAC_GTS_PERMIT,ZMacMaxCSMABackoffs = MAC_MAX_CSMA_BACKOFFS,ZMacMinBE = MAC_MIN_BE,ZMacPanId = MAC_PAN_ID,ZMacPromiscuousMode = MAC_PROMISCUOUS_MODE,ZMacRxOnIdle = MAC_RX_ON_WHEN_IDLE,ZMacShortAddress = MAC_SHORT_ADDRESS,ZMacSuperframeOrder = MAC_SUPERFRAME_ORDER,ZMacTransactionPersistenceTime = MAC_TRANSACTION_PERSISTENCE_TIME,ZMacAssociatedPanCoord = MAC_ASSOCIATED_PAN_COORD,ZMacMaxBE = MAC_MAX_BE,ZMacMaxFrameTotalWaitTime = MAC_MAX_FRAME_TOTAL_WAIT_TIME,ZMacMaxFrameRetries = MAC_MAX_FRAME_RETRIES,ZMacResponseWaitTime = MAC_RESPONSE_WAIT_TIME,ZMacSyncSymbolOffset = MAC_SYNC_SYMBOL_OFFSET,ZMacTimestampSupported = MAC_TIMESTAMP_SUPPORTED,ZMacSecurityEnabled = MAC_SECURITY_ENABLED,// Proprietary ItemsZMacPhyTransmitPower = MAC_PHY_TRANSMIT_POWER,ZMacChannel = MAC_LOGICAL_CHANNEL,ZMacExtAddr = MAC_EXTENDED_ADDRESS,ZMacAltBE = MAC_ALT_BE,// JunkZMacACLDefaultSecurityMaterialLength = 0, // not implementedZMacTxGTSId = 1, // not implementedZMacUpperLayerType = 2, // not implementedZMacRxGTSId = 3, // not implementedZMacSnoozePermit = 4 // not implemented };
第一種方法,利用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,方法如下:
#include "OSAL_Nv.h"
uint8 pValue[8];
osal_nv_read(ZCD_NV_EXTADDR ,0 , Z_EXTADDR_LEN, pValue);
pValue里保存的即是設備擴展地址
第五種方法,利用OnBoard.c里定義的全局變量aExtendedAddress獲取IEEE地址,如下:
uint8 pValue[Z_EXTADDR_LEN];
osal_memcpy(pValue, &aExtendedAddress, Z_EXTADDR_LEN);
第六種方法,利用ZMacGetReq()函數,如下:
#include "ZMAC.h"
#include "zmac_internal.h"
uint8 ?pValue[Z_EXTADDR_LEN];
ZMacGetReq(ZMacExtAddr,pValue);
其中第3中方法是獲得NIB屬性,NIB屬性如下:
其中第6中方法是獲得MIB屬性,MIB屬性如下:
// MAC PIB Attributes enum {ZMacAckWaitDuration = MAC_ACK_WAIT_DURATION,ZMacAssociationPermit = MAC_ASSOCIATION_PERMIT,ZMacAutoRequest = MAC_AUTO_REQUEST,ZMacBattLifeExt = MAC_BATT_LIFE_EXT,ZMacBattLeftExtPeriods = MAC_BATT_LIFE_EXT_PERIODS,ZMacBeaconMSDU = MAC_BEACON_PAYLOAD,ZMacBeaconMSDULength = MAC_BEACON_PAYLOAD_LENGTH,ZMacBeaconOrder = MAC_BEACON_ORDER,ZMacBeaconTxTime = MAC_BEACON_TX_TIME,ZMacBSN = MAC_BSN,ZMacCoordExtendedAddress = MAC_COORD_EXTENDED_ADDRESS,ZMacCoordShortAddress = MAC_COORD_SHORT_ADDRESS,ZMacDSN = MAC_DSN,ZMacGTSPermit = MAC_GTS_PERMIT,ZMacMaxCSMABackoffs = MAC_MAX_CSMA_BACKOFFS,ZMacMinBE = MAC_MIN_BE,ZMacPanId = MAC_PAN_ID,ZMacPromiscuousMode = MAC_PROMISCUOUS_MODE,ZMacRxOnIdle = MAC_RX_ON_WHEN_IDLE,ZMacShortAddress = MAC_SHORT_ADDRESS,ZMacSuperframeOrder = MAC_SUPERFRAME_ORDER,ZMacTransactionPersistenceTime = MAC_TRANSACTION_PERSISTENCE_TIME,ZMacAssociatedPanCoord = MAC_ASSOCIATED_PAN_COORD,ZMacMaxBE = MAC_MAX_BE,ZMacMaxFrameTotalWaitTime = MAC_MAX_FRAME_TOTAL_WAIT_TIME,ZMacMaxFrameRetries = MAC_MAX_FRAME_RETRIES,ZMacResponseWaitTime = MAC_RESPONSE_WAIT_TIME,ZMacSyncSymbolOffset = MAC_SYNC_SYMBOL_OFFSET,ZMacTimestampSupported = MAC_TIMESTAMP_SUPPORTED,ZMacSecurityEnabled = MAC_SECURITY_ENABLED,// Proprietary ItemsZMacPhyTransmitPower = MAC_PHY_TRANSMIT_POWER,ZMacChannel = MAC_LOGICAL_CHANNEL,ZMacExtAddr = MAC_EXTENDED_ADDRESS,ZMacAltBE = MAC_ALT_BE,// JunkZMacACLDefaultSecurityMaterialLength = 0, // not implementedZMacTxGTSId = 1, // not implementedZMacUpperLayerType = 2, // not implementedZMacRxGTSId = 3, // not implementedZMacSnoozePermit = 4 // not implemented };
轉載于:https://www.cnblogs.com/-song/archive/2013/03/13/3331820.html
總結
以上是生活随笔為你收集整理的Zigbee 获取设备地址信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android联系人Contacts详解
- 下一篇: 使用ILmerge合并Exe、Dll文件