Other Parts Discussed in Thread: Z-STACK
z-stack 3.0.1;NV_INIT、NV_RESTORE已开启;GenericApp例程。
在zclGenericApp_Init中加入了手动组入网操作:
#ifdef ZDO_COORDINATOR bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_FORMATION | BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING); NLME_PermitJoiningRequest(255); #else bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING); NLME_PermitJoiningRequest(255); #endif
一,当只一个ZC,没有其它ZD,ZED的时候:
1)每一次上电,协调器,会进行组网,组网成功后zclGenericApp_ProcessCommissioningStatus回调函数会进入,组网模式的成功状态信息,如下:
switch(bdbCommissioningModeMsg->bdbCommissioningMode)
{
case BDB_COMMISSIONING_FORMATION:
if(bdbCommissioningModeMsg->bdbCommissioningStatus == BDB_COMMISSIONING_SUCCESS)
{
//After formation, perform nwk steering again plus the remaining commissioning modes that has not been process yet
HalUARTWrite(0, "Have formated!\n", 15);
bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | bdbCommissioningModeMsg->bdbRemainingCommissioningModes);
}
......
}
2)如果此时,对协调器进行软件复位操作(不断电),那么上面形成的网络是否还存在?协调器会直接加入网络,入zclGenericApp_ProcessCommissioningStatus的以下代码段?
case BDB_COMMISSIONING_NWK_STEERING:
if(bdbCommissioningModeMsg->bdbCommissioningStatus == BDB_COMMISSIONING_SUCCESS)
{
//YOUR JOB:
//We are on the nwk, what now?
HalUARTWrite(0, "Have Joined!\n", 13);
}
......
3)如果,直接把协调断电重启后,是否认为此网络已不存在,协调器会重新组网?成功后并进行入"1)"的回调结果?
4)而现在实际测试,只有每一次烧写完程序(应该是重新清除了Flash),第一次上电启动,才会进行组网(进入“1)”),后续不管是断电重启,还是软重启,都是直接加入网络(进入"2)")。
二、有一个ZC,一个ZR的情况:
1)先启动ZC,认为ZC会先组网成功,然后ZR加入网络,成功后会返回“一,2)“状态中,(是否是这样?)
2)先启动ZR,后启动ZC,此时还没有ZC组网,所以,ZR会在BDB_COMMISSIONING_NWK_STEERING模式下返回BDB_COMMISSIONING_NO_NETWORK状态,所以我判断了一下BDB_COMMISSIONING_NO_NETWORK状态,并重新进行入网操作,等待协调器组网成功后顺利入网,代码如下:(理解是否正确?)
case BDB_COMMISSIONING_NWK_STEERING:
if(bdbCommissioningModeMsg->bdbCommissioningStatus == BDB_COMMISSIONING_SUCCESS)
{
//YOUR JOB:
//We are on the nwk, what now?
HalUARTWrite(0, "Have Joined!\n");
}
else
{
//See the possible errors for nwk steering procedure
//No suitable networks found
//Want to try other channels?
//try with bdb_setChannelAttribute
if (bdbCommissioningModeMsg->bdbCommissioningStatus == BDB_COMMISSIONING_NO_NETWORK)
{
#ifdef ZDO_COORDINATOR
#else
bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING);
NLME_PermitJoiningRequest(255);
#endif
}
}
break;
......
3)而实际测试,不管是先启动ZC还是先启动ZR,ZR都无法入网,总是提示BDB_COMMISSIONING_NO_NETWORK,不知道是什么原因?
望各位高手,指正,帮助解决问题,谢谢!