Other Parts Discussed in Thread: Z-STACK, CC2530
协议栈:Z-Stack Home 1.2.2a
芯片:CC2530
一个终端和一个协调器,入网正常。
在终端,运行下列代码打印终端的短地址(网络地址)和长地址(MAC地址)。
shortAddr = NLME_GetShortAddr();
extAddr = NLME_GetExtAddr();
printf("S1 is pressed.\r\n");
printf("IEEE: ");
for (i=7; i>=0; i--) {
if (extAddr[i]<=0x0F)
printf("0%X", extAddr[i]);
else
printf("%X", extAddr[i]);
if (i==0) printf("\r\n");
}
printf("nwkID: %X\r\n", shortAddr);
打印结果:
IEEE: 00124B00213CD303
nwkID: 7732
终端用ZCL通信进行定时(每隔30s)属性上报,在协调器,从接收的消息中提取终端短地址和长地址,代码如下。
static uint8 zclSampleSw_ProcessInReportCmd(zclIncomingMsg_t *pInMsg)
{
int i, j;
uint8 *attrDat, *extAddr;
uint16 shortAddr;
zclReportCmd_t *reportCmd;
printf("Report received:\r\n");
shortAddr = pInMsg->srcAddr.addr.shortAddr;
extAddr = pInMsg->srcAddr.addr.extAddr;
printf("IEEE: ");
for (i=7; i>=0; i--) {
if (extAddr[i]<=0x0F)
printf("0%X", extAddr[i]);
else
printf("%X", extAddr[i]);
if (i==0) printf("\r\n");
}
printf("nwkID: %X\r\n", shortAddr);
打印结果:
Report received:
IEEE: 124B00000A007732
nwkID: 7732
Rx value: AA 55 01 00 00
Zigbee Coord heartbeat, vdd=3449mV
Command: OFF
Report received:
IEEE: 00302A2208447732
nwkID: 7732
Rx value: AA 55 01 00 00
Zigbee Coord heartbeat, vdd=3449mV
Command: ON
Report received:
IEEE: 000000004A007732
nwkID: 7732
Rx value: AA 55 01 00 00
可以看到,打印的短地址都是7732,和终端本地打印的短地址一致。但是协调器打印的长地址,在不停的变化,只有最后4位等于短地址,是固定的。
请问,协调器从接收消息中获取的extAddr是怎么定义的?