ZIGBEE的各种问题,求救!
1.怎么在应用层查找网络的PANID、信道等信息,在网上看到有说直接读_NIB中的信息就行了,但是我在程序中写的是:Channel_Value = _NIB.nwkLogicalChannel;但发现这一句连断点都加不了,个人感觉是这一句根本没编译。想问问这个是怎么回事?还有就是怎么在应用层查找网络的PANID、信道等信息?
2.我配置DZDAPP_CONFIG_PAN_ID为0xFFFF,也就是组网后会随机选一个PANID作为网络ID,然后预编译NV_INIT和NV_RESTORE,这个理论上掉电重启后PANID应该不会变的吧?但是我调试时发现,每次RESET后,组网成功后_NIB中的nwkPanId会变。这个是怎么回事
3.我是这样想的(这里我打算组多个网,每个网有50-90个节点):网络中的每个设备的DZDAPP_CONFIG_PAN_ID设置为0xFFFF,默认的信道都打开,也就是第11-26个信道都作为默认信道,每个网络都预编译NV_INIT和NV_RESTORE。这样当协调器第一次组网后,每个设备随机加入网络,网络确定后,下一次掉电重启后,每个网络都能重新恢复到原来的网络。不知道这种方案可不可靠。
您可以利用zb_GetDeviceInfo()函数在应用层获取PANID及信道等信息
查看该函数定义即可知用法:
void zb_GetDeviceInfo ( uint8 param, void *pValue )
{
switch(param)
{
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_panid;
zb_GetDeviceInfo(ZB_INFO_PAN_ID,my_panid);
谢谢,我还想请问一下,我预编译了NV_INIT和NV_RESTORE,组网后发现每次复位后PANID都会变,难道不会把PANID存在非易失寄存器里面吗?
对了,我还想问一下,有没Z-Stack协议栈里面的所有函数手册啊?这样查找起来方便点。
您可以参考协议栈安装文件夹内的C:\Texas Instruments\ZStack-CC2530-2.5.1a\Documents
里面有API的相关文档