节点在失去父节点以后,会调用下面的callback函数
void ZDO_SyncIndicationCB( uint8 type, uint16 shortAddr )
在这个函数里面,会把节点的状态改成devStartMode = MODE_RESUME,然后开始重新去找原先的网络
然后会调用ZDO_StartDevice
在这个函数里面 开始Orphan join,
这个时候你可以开启一个timer event,如果没有join成功,可以加长尝试搜网的时间。如果加网成功了可以把这个timer event清除掉。
最新的Z-Stack Home 1.2.2 里面已经把这个功能加进去了。你可以参考下,代码如下。
if( events & ZDO_REJOIN_BACKOFF )
[
if( devState == DEV_NWK_BACKOFF )
[
ZDApp_ChangeState(DEV_NWK_DISC);
// Restart scan for rejoin
ZDApp_StartJoiningCycle();
osal_start_timerEx( ZDAppTaskID, ZDO_REJOIN_BACKOFF, zgDefaultRejoinScan );
]
else
[
// Rejoin backoff, silent period
ZDApp_ChangeState(DEV_NWK_BACKOFF);
ZDApp_StopJoiningCycle();
osal_start_timerEx( ZDAppTaskID, ZDO_REJOIN_BACKOFF, zgDefaultRejoinBackoff );
]
return ( events ^ ZDO_REJOIN_BACKOFF);
]
节点在失去父节点以后,会调用下面的callback函数
void ZDO_SyncIndicationCB( uint8 type, uint16 shortAddr )
在这个函数里面,会把节点的状态改成devStartMode = MODE_RESUME,然后开始重新去找原先的网络
然后会调用ZDO_StartDevice
在这个函数里面 开始Orphan join,
这个时候你可以开启一个timer event,如果没有join成功,可以加长尝试搜网的时间。如果加网成功了可以把这个timer event清除掉。
最新的Z-Stack Home 1.2.2 里面已经把这个功能加进去了。你可以参考下,代码如下。
if( events & ZDO_REJOIN_BACKOFF )
[
if( devState == DEV_NWK_BACKOFF )
[
ZDApp_ChangeState(DEV_NWK_DISC);
// Restart scan for rejoin
ZDApp_StartJoiningCycle();
osal_start_timerEx( ZDAppTaskID, ZDO_REJOIN_BACKOFF, zgDefaultRejoinScan );
]
else
[
// Rejoin backoff, silent period
ZDApp_ChangeState(DEV_NWK_BACKOFF);
ZDApp_StopJoiningCycle();
osal_start_timerEx( ZDAppTaskID, ZDO_REJOIN_BACKOFF, zgDefaultRejoinBackoff );
]
return ( events ^ ZDO_REJOIN_BACKOFF);
]
举报