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
};
浙公网安备 33010602011771号