终端位置变化后,从发出孤立广播到开始重新关联耗时约5s,能否调整协议栈加快重新关联操作
如题,采用MESH协议,终端从一个路由器旁移动到另一个路由器旁时,发送数据,因发送失败进入孤立状态,发出孤立广播,发出后约5s才开始请求beacon进行重新关联的操作,能否修改协议栈参数降低这5s的等待时间。
通过修改DEXTENDED_JOINING_RANDOM_MASK、DBEACON_REQ_DELAY_MASK参数已经加快重连速度。
你好,首先你要知道节点变成孤立节点以后,状态是怎么样变化,协议栈处理的流程是什么,这样可以去看能不能改动。
当节点跟父设备断开以后,首先会调用ZDO_SyncIndicationCB( type, shortAddr );
这个函数里面会发送ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_JOIN_REQ, sizeof(osal_event_hdr_t), NULL );给ZDO层。
在下面处理这个消息
case ZDO_NWK_JOIN_REQ:
if ( ZG_BUILD_JOINING_TYPE && ZG_DEVICE_JOINING_TYPE )
{
retryCnt = 0;
devStartMode = MODE_RESUME;
_tmpRejoinState = true;
osal_cpyExtAddr( ZDO_UseExtendedPANID, _NIB.extendedPANID );
zgDefaultStartingScanDuration = BEACON_ORDER_60_MSEC;
ZDApp_NetworkInit( 0 );
}
break;
在上面把节点改成resume,然后初始化节点,
zgDefaultStartingScanDuration = BEACON_ORDER_60_MSEC;是orphan在每个信道广播的时间
--------------------------------
if ( events & ZDO_NETWORK_INIT )
{
// Initialize apps and start the network
devState = DEV_INIT;
osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,
DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );
// Return unprocessed events
return (events ^ ZDO_NETWORK_INIT);
}
-----------------------------------
在ZDO_StartDevice里面,然后调用
NLME_OrphanJoinRequest( zgDefaultChannelList,
zgDefaultStartingScanDuration );发送orphan notification,
然后然后,你可以再跟踪下到什么时候再去发送beacon了。。。。。