终端设备处于休眠状态,路由设备异常重启。结果终端设备无法重新组网。
我在父节点丢失时,调用退出休眠,如下:
case BDB_COMMISSIONING_PARENT_LOST: //父节点丢失GENERICAPP_END_DEVICE_REJOIN_DELAY秒后,重新入网。
if(bdbCommissioningModeMsg->bdbCommissioningStatus == BDB_COMMISSIONING_NETWORK_RESTORED) //网络恢复
{ }
else
{
if(MYAPP_SLEEP_FLAG1 == 0x01) //休眠状态下丢失父节点
{
MyApp_DownSleep(1000,100,100,1000,1000); //退出休眠
}
osal_start_timerEx(zclGenericApp_TaskID, GENERICAPP_END_DEVICE_REJOIN_EVT, GENERICAPP_END_DEVICE_REJOIN_DELAY);
}
break;
void MyApp_DownSleep(uint32 PRate,uint32 QRate,uint32 RRate,uint32 BackTime,uint32 ScanTime)
{
osal_pwrmgr_device( PWRMGR_ALWAYS_ON );
osal_pwrmgr_task_state( zclGenericApp_TaskID, PWRMGR_HOLD );
NLME_SetPollRate(PRate);//退出循环后,330ms轮询一次
NLME_SetQueuedPollRate(QRate);//
NLME_SetResponseRate(RRate);//
ZDApp_SetRejoinBackoffDuration(BackTime);
ZDApp_SetRejoinScanDuration(ScanTime);
}
经测试发现,设备根本没有退出休眠。想问一下,我这种方式让设备退出休眠是否有问题?有没有其他方式可以让终端退出休眠
YiKai Chen:
退出休眠只要調用osal_pwrmgr_device( PWRMGR_ALWAYS_ON );就可以了吧