修改方法:
1、设置预编译选项
ZTOOL_P1
NV_INIT
NV_RESTORE
2、在工程应用层目录中添加 sapi.c 文件
3、添加头文件 sapi.h OSAL_Nv.h
4、将sapi.c 中的 #define OSAL_SAPI TRUE 改为 #define OSAL_SAPI FALSE
5、在需要更改PanID处添加以下代码:
uint16 mypanid = 0x1122;
_NIB.nwkPanId = mypanid;
NLME_UpdateNV(0x01);
zgConfigPANID = mypanid;
osal_nv_write(ZCD_NV_PANID, 0, osal_nv_item_len( ZCD_NV_PANID ), &zgConfigPANID);
//要用定时器延时一段时间后再重启,否则 osal_nv_write 会来不及执行
osal_start_timerEx( SampleApp_TaskID,SAMPLEAPP_RESET_EVT,SAMPLEAPP_RESET_TIMEOUT );
5、SAMPLEAPP_RESET_EVT 时间中 调用 zb_SystemReset();
SAMPLEAPP_RESET_TIMEOUT 设置为2000 时 ,运行正常。
其他说明:
1、终端无法随意切换PanID的问题:
若终端在修改PanID语句中没有添加
zgConfigPANID = mypanid;
osal_nv_write(ZCD_NV_PANID, 0, osal_nv_item_len( ZCD_NV_PANID ), &zgConfigPANID);
这两句,则只能修改至f8wConfig.cfg 中设置的 PANID,其他PANID需要在联网的情况下才能切换。
加上上面两句后不会出现以上问题。
2、发信息给对方,让其改PanID,随后自己也改:
发送方的Reset Timeout 要比接收方稍微大一些。
在实验中,终端5s ,协调器3s ,运行正常。
3、其他修改PanID和Channe的方法(未验证,单独使用未成功)
zb_WriteConfiguration(ZCD_NV_CHANLIST,4,&channelList);
zb_WriteConfiguration(ZCD_NV_PANID, sizeof(uint16), &pan_id) ;
zb_SystemReset();//重启后才会启用新的PAN_ID,不然只是修改了NV里面的数据。
4、其他修改PanID和Channe的方法(未验证,单独使用未成功)
添加NV_INIT编译选项后,data request间隔只能为3S。