我想获取消息来源的MAC地址,但是不知道这么去类型转换
//uint8和uint16
typedef unsigned char uint8;
typedef unsigned short uint16;
//afIncomingMSGPacket_t 结构
typedef struct
{
osal_event_hdr_t hdr;
uint16 groupId;
uint16 clusterId;
afAddrType_t srcAddr;
uint16 macDestAddr; /*MAC物理地址 */
uint8 endPoint;
uint8 wasBroadcast;
uint8 LinkQuality;
uint8 correlation;
int8 rssi;
uint8 SecurityUse;
uint32 timestamp;
afMSGCommandFormat_t cmd;
} afIncomingMSGPacket_t;
//接受消息方法
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
uint8 testAddr[];
testAddr=pkt->macDestAddr;//怎么把MAC地址给testAddr
HalUARTWrite(0, "Mac:", 4); //提示接收到数据
HalUARTWrite(0, testAddr, 8);//串口输出MAC地址。
HalUARTWrite(0, "\n", 1); // 换行
}
//串口输出方法
uint16 HalUARTWrite(uint8 port, uint8 *buf, uint16 len)
{
//代码省略
}
testAddr=pkt->macDestAddr; 赋值报错,不知道如何转换
对C/C++不熟
用HalUARTWrite输出MAC地址,如下
Mac:0x00124B0007165581
mac地址只有16位?
uint8 buffer[64];
sprintf(buffer, "Mac: 0x%x\n", pkt->macDestAddr);
HalUARTWrite(0, buffer, strlen(buffer));
第一种方法,利用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 )
{undefined
switch(param)
{undefined
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);
你那个地址时字符串吧,用%lc输出