协议栈:ZHA1.2 芯片:cc2530
终端调用了如下命令:
NLME_LeaveReq_t LeaveReq;
LeaveReq.extAddr = NULL;
LeaveReq.removeChildren =false;
LeaveReq.rejoin = true;
LeaveReq.silent = false;
NLME_LeaveReq(&LeaveReq);
执行退网后,终端自动重入网,终端信息并没有被删除。
那么我想在不改变上述命令的条件下,能否执行完退网命令后,不让他重新入网。并且删除自身的信息,使下次入网,网关能分配给新的地址。
Alvin Chen:
LeaveReq.rejoin = false;
你需要吧rejoin设置为false。
YiKai Chen:
rejoin要設定為false吧
user5032796:
回复 Alvin Chen:
可是设置为false后,每次执行后都要复位。{// Set the NV startup option to force a "new" join.zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
// The device has been in the UNAUTH state, so reset// Note: there will be no return from this callSystemResetSoft();}
如果在复位期间我会再执行入网。就卡死了。
所以才问问在rejoin=true的情况下,有没有可能不自动重新入网,并且删除掉网络信息。
user5032796:
回复 YiKai Chen:
可是设置为false后,每次执行后都要复位。{// Set the NV startup option to force a "new" join.zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
// The device has been in the UNAUTH state, so reset// Note: there will be no return from this callSystemResetSoft();}
如果在复位期间我会再执行入网。就卡死了。
所以才问问在rejoin=true的情况下,有没有可能不自动重新入网,并且删除掉网络信息。
YiKai Chen:
回复 user5032796:
試試參考Cetri在 e2e.ti.com/…/1343379 的回覆
user5032796:
回复 YiKai Chen:
试了一下,还是同样的,退网后,自动rejoin
YiKai Chen:
回复 user5032796:
不要自动重新入网可以試著移除Cetri的下面這些程序碼
+// For rejoin, specify the extended PANID to look for
+osal_cpyExtAddr( ZDO_UseExtendedPANID, _NIB.extendedPANID );
+
+_NIB.nwkState = NWK_DISC;
+
+zdoDiscCounter = 3;
+NLME_NwkDiscTerm();
+
+ZDApp_NetworkInit((uint16)(NWK_START_DELAY + ((uint16) (osal_rand() & EXTENDED_JOINING_RANDOM_MASK ))));
user5032796:
回复 YiKai Chen:
恩,解决一半了。可是退网后再入网是以rejoin的方式,短地址还是没变。请问有方法在退网后,清掉网络信息么。我希望再入网能重新获得新的地址。
Alvin Chen:
回复 user5032796:
你可以去除NV里面的数据。
user5032796:
回复 Alvin Chen:
感谢!问题解决了。zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
+
SystemResetSoft(); //复位