协调器掉线以后,起初我用ZDApp_StopJoiningCycle关闭了加入网络搜索,随后我又调用NLME_OrphanJoinRequest( zgDefaultChannelList,
zgDefaultStartingScanDuration );开启了搜索,但是这个函数会导致搜网周期过长,约为8-9s,而且这段时间内功耗很高,有80mW。请问这个高功耗的时间能不能缩短,而且这段时间终端到底在干哪些事情?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
协调器掉线以后,起初我用ZDApp_StopJoiningCycle关闭了加入网络搜索,随后我又调用NLME_OrphanJoinRequest( zgDefaultChannelList,
zgDefaultStartingScanDuration );开启了搜索,但是这个函数会导致搜网周期过长,约为8-9s,而且这段时间内功耗很高,有80mW。请问这个高功耗的时间能不能缩短,而且这段时间终端到底在干哪些事情?
@VV
非常感谢VV给我的解答,问题已经解决。维持8-9s的高功耗状态是因为在Ztack机制里当扫描失败次数达到5次时if (startMode == MODE_REJOIN && scanCnt++ >= 5 ),扫描信道被置为所有信道zgDefaultChannelList = MAX_CHANNELS_24GHZ,所以导致扫描周期变长,我把这句注释掉就好了。
至于您说的用ZDApp_StartJoiningCycle,我试过可是一直不可以,当启用该函数时一直都加不上网络,而且功耗会一直维持在80mW的高功耗状态,但是用NLME_OrphanJoinRequest或者直接调用ZDOInitDevice( 0 )却都能加入网络,现在我还在找原因在哪,如果您知道的话也希望能指点一二,谢谢。
@VV
谢谢,现在如果我使用ZDApp_StartJoiningCycle();,我通过打印串口信息发现当时的devState的确是DEV_NWK_DISC,而且此时的devStartMode == MODE_REJOIN,若在执行ZDApp_StartJoiningCycle()的前一刻重新打开Coordinator,则函数进入case ZDO_NWK_DISC_CNF---->else if ( devStartMode == MODE_REJOIN )----->if ( NLME_ReJoinRequest( ZDO_UseExtendedPANID, pChosenNwk->logicalChannel) != ZSuccess )----->ZDO_JoinConfirmCB回调函数------->case ZDO_NWK_JOIN_IND------>ZDApp_ProcessNetworkJoin()------->else if ( devState == DEV_NWK_ORPHAN || devState == DEV_NWK_REJOIN )--------->此时nwkStatus !== ZSuccess,所以进入else------->ZDApp_NetworkInit(),一直无法rejoin的话就形成死循环了。
请问为什么这个时候EndDevice无法rejoin入协调器的网络呢,我的协调器已经加入了预编译NV_INIT和NV_RESTORE,EndDevice预编译选项是NV_RESTORE,期待您的解答,谢谢!