TI大神,请教下zigbee关联表的一些问题
我用的协议栈是 zstack 2.5.1a,最近在测试中发现关联表的一些问题,希望TI大神帮解答下
按照协议栈里的 #define NWK_MAX_DEVICE_LIST 30 ,协调器关联表里应该最多能允许30个设备直接挂接在它下面,也就是关联表里最多有30个设备的相关信息,以上理解如果没错,下面是我读取关联里的子设备mac地址操作:
uint8 _nodeCounter;
uint8 _assocNum=0;
uint8 assoclist[243];
for ( _nodeCounter = 0; _nodeCounter < NWK_MAX_DEVICES; _nodeCounter++ )
{
AddrMgrEntry_t addrEntry;
addrEntry.user = ADDRMGR_USER_ASSOC;
addrEntry.index = _nodeCounter;
if ( AddrMgrEntryGet( &addrEntry ) )
{
//HalUARTWrite(0,addrEntry.extAddr,Z_EXTADDR_LEN);
osal_memcpy(&assoclist[_assocNum*8],addrEntry.extAddr,Z_EXTADDR_LEN);
_assocNum++;
}
}
通过打印出assoclist这个数组,发现关联表里会有mac全是ff的地址出来,正常情况下如果这个index为空的话,应该是无法进入if条件判断的吧,实际测试发现,关联表这些mac为ff的地址似乎也是实际占用着表的位置,导致设备接入几个后协调器返回给设备的信息里就告诉无法接入了。这种情况下试了下只能通过zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE)重建网络,其他的assoc操作好像不行,这会对已经加入的设备造成问题,所以不知出现这种ff地址该怎么处理?
你打印的是地址表的内容,不是关联表的内容。
你可以直接答应Assoclist里面的,看下短地址是否有FF的。
无法接入是,节点发送beacon request,协调器回复的beacon显示满了吗?
感谢VV的答复,按照提示我打印出关联表里所有的shortAddr,除去加入的正常的短地址,其他的地址都是FF。。。
uint8 shortlist[62];
for ( _nodeCounter = 0; _nodeCounter < NWK_MAX_DEVICES; _nodeCounter++ )
{
osal_memcpy(&shortlist[_nodeCounter*2],&AssociatedDevList[_nodeCounter].shortAddr,2);
}
无法接入,是我加打印发现,没有用抓包,zdapp.c里, 函数networkDesc_t* ZDApp_NwkDescListProcessing(void)里有过滤的 if ( !pNwkDesc->routerCapacity )
{ continue; }程序进入continue,由此判断协调器回复信息应该是满了。我想知道当地址表里出现大量的FF地址,该怎么删除。