ZigBee动态修改PanID

修改方法:

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 );

5SAMPLEAPP_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、其他修改PanIDChanne的方法(未验证,单独使用未成功)

zb_WriteConfiguration(ZCD_NV_CHANLIST,4,&channelList);

zb_WriteConfiguration(ZCD_NV_PANID, sizeof(uint16),  &pan_id) ;

zb_SystemReset();//重启后才会启用新的PAN_ID,不然只是修改了NV里面的数据。

4、其他修改PanIDChanne的方法(未验证,单独使用未成功)

添加NV_INIT编译选项后,data request间隔只能为3S

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页