邻居表和路由表在Z-stack已经定义,我们可以从网络属性库中利用z-stack提供的API来打印信息。
函数原型:(在NLMEDE.h中定义)
ZStatus_t NLME_GetRequest(ZNwkAttributes_t NIBAttribute,uint 16 index,void *Value);
参数描述: NIBAttribute-支持的属性:
nwkCapabilityInfo 网络容量
nwkNumNeighborTableEntries 邻居表数目
nwkNeighborTable 邻居表
nwkNumRoutingTableEntries 路由表数目
nwkRoutingTable 路由表
Index-------用于表的索引
Value-------指向包含属性值的内存位置的指针
如果要使用此函数,首先要看看已编辑的文件中是不是包含了NLMEDE.h的头文件,没有请包含。
初次使用API,感觉重要的是要把参数以及格式处理好。我使用的方法是在z-stack中搜索这个函数,发现在ZDO中使用过这个函数,就按照它的格式进行修改。代码如下:
/*******************************************************************邻居表和路由表的读取
********************************************************************/
uint8 capabilities;
NLME_GetRequest(nwkCapabilityInfo, 0, &capabilities);
byte ntnum=0;
NLME_GetRequest(nwkNumNeighborTableEntries,0,&ntnum);
byte index=0;
neighborEntry_t* ntTable;
uint8 *pNtBuf = NULL;
pNtBuf =osal_mem_alloc((short)(ntnum*sizeof(neighborEntry_t)));
if(pNtBuf!=NULL){
ntTable = (neighborEntry_t *)pNtBuf;
for(;index<ntnum;index++)
{
NLME_GetRequest(nwkNeighborTable,index,(void *)ntTable);
ntTable++;
}
}
/******************************************************************
neighborEntry_t nt2;
NLME_GetRequest(nwkNeighborTable,1,&nt2);
*****************************************************************/
byte rtnum;
NLME_GetRequest(nwkNumRoutingTableEntries,0,&rtnum);
uint8 *pRtBuf = NULL;
rtgItem_t* rtTable;
pRtBuf =osal_mem_alloc((short)rtnum* sizeof(rtgItem_t));