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属性如下:
第一种方法,利用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属性如下:
typedef struct { byte SequenceNum; byte PassiveAckTimeout; byte MaxBroadcastRetries; byte MaxChildren; byte MaxDepth; byte MaxRouters; //neighborEntry_t * pNeighborTable; byte dummyNeighborTable; // to make everything a byte!! byte BroadcastDeliveryTime; byte ReportConstantCost; byte RouteDiscRetries; //rtgEntry_t * pRoutingTable; byte dummyRoutingTable; // to make everything a byte!! byte SecureAllFrames; byte SecurityLevel; byte SymLink; byte CapabilityInfo; uint16 TransactionPersistenceTime; byte nwkProtocolVersion; // non-standard attributes byte RouteDiscoveryTime; byte RouteExpiryTime; // set to 0 to turn off expiration of routes // non-settable uint16 nwkDevAddress; byte nwkLogicalChannel; uint16 nwkCoordAddress; byte nwkCoordExtAddress[Z_EXTADDR_LEN]; uint16 nwkPanId; // Other global items - non-settable nwk_states_t nwkState; uint32 channelList; byte beaconOrder; byte superFrameOrder; byte scanDuration; byte battLifeExt; uint32 allocatedRouterAddresses; uint32 allocatedEndDeviceAddresses; byte nodeDepth; // Version 1.1 - extended PAN ID uint8 extendedPANID[Z_EXTADDR_LEN]; // Key information uint8 nwkKeyLoaded; nwkKeyDesc nwkActiveKey; nwkKeyDesc nwkAlternateKey; // Zigbee Pro extensions uint8 nwkAddrAlloc; uint8 nwkUniqueAddr; uint8 nwkLinkStatusPeriod; // The time in seconds betwee link status // command frames uint8 nwkRouterAgeLimit; // The number of missed link status // command frames before resetting the // link cost to zero uint8 nwkUseMultiCast; // ZigBee Pro extentions: MTO routing uint8 nwkIsConcentrator; // If set, then the device is concentrator uint8 nwkConcentratorDiscoveryTime; // Time period between two consecutive MTO route discovery uint8 nwkConcentratorRadius; // Broadcast radius of the MTO route discovery uint8 nwkAllFresh; uint8 nwkSrcRtgExpiryTime; uint16 nwkManagerAddr; // Network Manager Address uint16 nwkTotalTransmissions; uint8 nwkUpdateId; } nwkIB_t;
其中第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 Items ZMacPhyTransmitPower = MAC_PHY_TRANSMIT_POWER, ZMacChannel = MAC_LOGICAL_CHANNEL, ZMacExtAddr = MAC_EXTENDED_ADDRESS, ZMacAltBE = MAC_ALT_BE, // Junk ZMacACLDefaultSecurityMaterialLength = 0, // not implemented ZMacTxGTSId = 1, // not implemented ZMacUpperLayerType = 2, // not implemented ZMacRxGTSId = 3, // not implemented ZMacSnoozePermit = 4 // not implemented };