已入网 的 路由设备 断电后重新启动 疑问。。。。?
以下讨论的内容,设备均是开启NV_RESTORE。
1. 已入网的终端设备,断电后重启时,会发orphan notification 然后如果没有收到父节点 的coordinator relegatment ,就会进入rejoin 发beacon request。
2. 但是已入网的路由设备却不会。 经过debug 观察它的 流程 如下:
前期 ZDApp_Init()--->ZDOInitDevice()===>ZDApp_RestoreNetworkState---> 从而读取出startMode 是 MODE_RESUME
进入ZDO_StartDevice() 函数后 执行 nwk_ScanJoiningOrphan(&scanCnf); 但是抓包软件并没有抓到 orphan notification
if ( ZG_BUILD_JOINING_TYPE && (logicalType == NODETYPE_ROUTER || logicalType == NODETYPE_DEVICE) )
{
...
else if ( startMode == MODE_RESUME )
{
if ( logicalType == NODETYPE_ROUTER )
{//路由设备
ZMacScanCnf_t scanCnf;
ZDApp_ChangeState( DEV_NWK_ORPHAN );
/* if router and nvram is available, fake successful orphan scan */
scanCnf.hdr.Status = ZSUCCESS;
scanCnf.ScanType = ZMAC_ORPHAN_SCAN;
scanCnf.UnscannedChannels = 0;
scanCnf.ResultListSize = 0;
nwk_ScanJoiningOrphan(&scanCnf);
ret = ZSuccess;
}
}
而且之后 路由 也不发rejoin request~~~~~
请问这是为什么, 哪里将其切换了?
路由设备除了第一入网请求发送beacon request,入网后是不会再发送beacon request ,和协调器一样有维护网络的功能,
即便此路由器的父节点断电离线,它自己就可以维护网络,发送link 帧,默认15秒一次