zigbee判断首次入网

171 阅读1分钟

 

 * Initialize the Nwk, Assoc device list, and binding NV Items
*   returns ZSUCCESS if successful, NV_ITEM_UNINIT if item did not
*          exist in NV, NV_OPER_FAILED if failure.
*/
extern byte NLME_InitNV( void ); //初始化NV

返回值如下:NV_ITEM_UNINIT表示没有入网,是首次入网 ;SUCESS表示已经入过网  

注意:获取网络状态时,路由器,协调器和终端都不一样

uint8 Get_NWK_Sta(void)
{
uint8 nvStat;
static uint8 Sta_Flag = OTHER_STA; //初始化为其它状态

if(Sta_Flag == OTHER_STA)  //判断首次入网
{
nvStat = NLME_InitNV();

if ( nvStat != NV_OPER_FAILED )  //如果没有初始化失败
{
if(nvStat == ZSUCCESS) //已经入过网
Sta_Flag = JOIN_SECOND; //不进行首次入网判断
else   //NV里面没东西
Sta_Flag = JOIN_FIRST;
}
}
else if(Sta_Flag == JOIN_FIRST)  //如果是首次入网判断是否连接上协调器/组网成功 时入网失败认为是NV没东西 
{
if(SampleApp_NwkState == DEV_ROUTER) //组网成功
{
Sta_Flag = JOIN_SUCESS;
}
if(SampleApp_NwkState == DEV_INIT)  //组网失败
{
Sta_Flag = JOIN_FIRST;
}
}
else if(Sta_Flag == JOIN_SECOND)  //如果是二次入网判断是否连接上协调器/组网成功   
{
if(SampleApp_NwkState == DEV_ROUTER) //组网成功
{
Sta_Flag = JOIN_SUCESS;
}
if(SampleApp_NwkState == DEV_INIT)  //组网失败
{
Sta_Flag = JOIN_FAIL;
}

else if(Sta_Flag == JOIN_SUCESS) // 如果入网成功,判断后续会不会失去协调器,通过ACK方式判断
{
// if(SampleApp_NwkState == DEV_HOLD)
if(AF_NOACK_Flag) //丢失协调器
Sta_Flag = COOR_LOSE;
else Sta_Flag = JOIN_SUCESS;

}

return Sta_Flag;

}