|
这个我有研究过,如果不配置DEV_HOLD,设备会一直加网,直到有网络。如果想要设备隔一段时间再加网,可以参照下面的做法(需要注意的是,我只验证了设备会按照设定的时间起来加网,并不能说明降低了功耗)。
#define NWK_INIT_fAIL_MAX 5
UINT16 ZDApp_event_loop( uint8 task_id, UINT16 events )
{
……
if ( events & ZDO_NETWORK_INIT )
{
static uint8 initFailCounter = 0;
// Initialize apps and start the network
devState = DEV_INIT;
osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
//by asura 20140901
if(initFailCounter++ >= NWK_INIT_fAIL_MAX )
{
osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, 60000 );
initFailCounter = 0;
return(events ^ ZDO_NETWORK_INIT);
}
ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,
DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );
// Return unprocessed events
return (events ^ ZDO_NETWORK_INIT);
}
……
}
这样更改以后,设备上电会首先尝试5次加网,如果都失败,其后就会每1分钟起来加网一次。
另外,由于osal_start_timerEx()第二个参数为uint16类型的,这样就限制了延迟时间的大小,我想问下,怎么设置5分钟或更长时间的延迟? |
|