在子设备掉线之后,我调用了 ZDApp_StopJoiningCycle();抓包发现子设备确实停止发送beacon request,但是一段时间后它又开始发送beacon request,这个时间段刚好就是1分钟,也就是和我的设置一样:
-DREJOIN_POLL_RATE=440
-DREJOIN_BACKOFF=60000
-DREJOIN_SCAN=60000
以上,为什么我停止了搜索功能,它还是会再次开启?
VV:
有一个rejoin back off的状态
Susan Yang:
ZDApp_StopJoiningCycle只有在DEV_INIT或者DEV_NWK_DISC状态的时候才会有效果。
底层改变devState地方我们是没法看到的,但是当devState改变的时候,会以 ZDO_STATE_CHANGE这个事件通知应用层节点的状态改变,您只要在发送事件到达的地方加入ZDApp_StopJoiningCycle()就可以了。
Brightness L:
回复 Susan Yang:
感谢回答。
我就是在ZDO_STATE_CHANGE中调用的 ZDApp_StopJoiningCycle();,判断条件为SmartHome_NwkState == DEV_NWK_ORPHAN,但即使是这样,子设备还是会恢复搜索功能,继续发送beacon request。
跟踪发现,程序还是会来到以下这里,搜索的REJOIN_SCAN和REJOIN_BACKOFF还是正常的循环,所以才会ZDApp_StopJoiningCycle后还是会恢复搜索。
所以改怎么样解决这个问题,是否需要停止这个定时osal_start_timerEx( ZDAppTaskID, ZDO_REJOIN_BACKOFF, zgDefaultRejoinScan );?
user4381970:
回复 Brightness L:
-DREJOIN_BACKOFF=60000
当然会60秒后再找了
MarS:
回复 Brightness L:
是的 ,在这里你需要将这个定时器关掉!