在stack协议栈,我知道可以在烧录程序之前在f8wConfig.cfg中修改-DDEFAULT_CHANLIST、-DZDAPP_CONFIG_PAN_ID来修改信道和网络PANID,不过现在我想让终端节点上电后可以由人的操作来选择一个信道和网络PANID,请问在哪个位置修改和使用哪些函数?谢谢(问题的由来:为了较好的互换性,在终端节点坏了之后可以直接拿过来一个好的终端节点,并手动在终端节点选择一个信道和PANID入网,这就避免了重新烧录程序的麻烦)
Susan Yang:
可以尝试使用
void zb_WriteConfiguration( uint8 configId, uint8 len, void *pValue ) // The zb_WriteConfiguration function is used to write a Configuration Property to nonvolatile memory.
第一个参数configId在OSAL下的ZComDef.h文件中定义。
其中有一条:
#define ZCD_NV_PANID 0x0083
可尝试如下语句
zb_WriteConfiguration(ZCD_NV_PANID, sizeof(uint16), &pan_id) ;
zb_SystemReset();
Shuzhao Wang:
回复 Susan Yang:
你好,我一直看到ZDO_StartDevice()函数,它分别调用了NLME_NetworkFormationRequest、NLME_NetworkDiscoveryRequest和NLME_OrphanJoinRequest函数来建立、发现加入网络,但是我发现NLME_NetworkFormationRequest()函数第一个、第三个形参分别来源于ZDAPP_CONFIG_PAN_ID、DEFAULT_CHANLIST,再往下我就看不到了,这里我认为这个形参调用了f8wConfig.cfg里面的配置参数,这样还是使
用了事先配置好的参数,不知道对不对?问题是,我不知道下面
zb_WriteConfiguration(ZCD_NV_PANID, sizeof(uint16), &pan_id) ;
zb_WriteConfiguration(ZCD_NV_CHANLIST , sizeof(uint16), &channel_id;) ;
zb_SystemReset();
在哪里的文件或是函数位置添加才能修改PANID和信道?否则的话只能在f8wConfig.cfg里面事先配置好了
VV:
回复 Shuzhao Wang:
如果定义了NV_INIT的话,那么上电以后使用的PANID和Chanellist就是从NV里面获取,如果没有定义的话就是从f8w文件里面获取。
你可以加你想加的地方,比方说无线数据命令收到后修改,或者按键触发后修改。
yun ye:
回复 VV:
Hi VV,
我用Z-Stack Home 1.2.2a, 设备选择为Coordinator.
我用osal_nv_item_write, 去修改panid 和 channellist, nv_item_read 和 nv_item_write() 的结果是一致的。 可是channel 就是修改不了,也就是说nv 里面的参数没有被用到或者起作用,请问一下是什么原因?
谢谢。