ZigBee怎么输出消息来源的地址

问题遇到的现象和发生背景

我想获取消息来源的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));

https://ask.csdn.net/questions/349670?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-1.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-1.pc_feed_download_top3ask

第一种方法,利用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输出