This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于ZDO_STATE_CHANGE的疑惑

各位技术大神,关于ZDO_STATE_CHANGE有以下几个疑惑:

1、对于ZDO_STATE_CHANGE来说,我的理解是设备入网时,来判断设备当前在网络中的状态(所扮演的角色),不知道是否正确;

2、关于ZDO_STATE_CHANGE触发的条件,是否是只有在入网时才被触发?会不会有其他触发情况?如果有,请描述出来;

在此,小弟表示感谢!

  • Once device change its state in ZigBee network (e.g., grom DEV_INIT to DEV_END_DEV),

    the ZDO_STATE_CHANGE will be invoked automatically by ZDO.

  • 网络状态一有改变就应该出发ZDO里面的ZDO_STATE_CHANGE_EVT,

    从而sapi里面case:ZDO_STATE_CHANGE 。对吗?

    为什么2.5.1a版本在SAPI_StartConfirm里面判断网络状态myAppState = APP_START或者;APP_INIT

    case ZDO_STATE_CHANGE:
    // If the device has started up, notify the application
    if (pMsg->status == DEV_END_DEVICE ||
    pMsg->status == DEV_ROUTER ||
    pMsg->status == DEV_ZB_COORD )
    {
    SAPI_StartConfirm( ZB_SUCCESS );//成功入网


    }
    else if (pMsg->status == DEV_HOLD ||
    pMsg->status == DEV_INIT)
    {
    SAPI_StartConfirm( ZB_INIT );//此处为什么从来都不会进来呢?掉线也不会进来。那么应该在哪里判断掉线呢?
    }

    感觉此处有bug?后来我在ZDO_JoinConfirmCB判断掉线,可以吗?

  • 对于路由来说,没有掉线的概念。

  • 我指的是终端.终端不知道什么原因,也不确定时间,可能发生掉线。有时候掉线重连就一直连不回去。该怎么办呢?为什么一直连不回去呢?

    路由没有掉线的概念是什么意思呢?若只有一个协调器一个路由。路由失去了父节点不会触发掉线吗?网络状态也会改变吧?应用层好根据网络状态标识来进行不同的处理

  • 掉线是正常现象,一般都是因为节点发送数据,父设备没有ACK,就会断线。

    断线以后节点的状态会做改变,而且会去重连。

    你可以确认下断线以后,节点是什么状态,devState?,有没有在搜索网络。

  • 的确是您说的那样没有应答就掉线了。我认为他执行重新初始化去尝试重连了,但就一直连不上,但之后也可能就好了,时间不一定,有时候是断电了,有时候没有断电,只是重启了。

    我单步调试过,我使用一些相对容易出现重连失败的设备仿真的。点击复位后点击全速,有时候就会连不上(之前已经加入过协调器网络的设备)。这时候通过断点发现,开始是devState = DEV_INIT,devStartMode = MODE_RESUME;之后就是rejoin,不断的执行初始化,在回调ZDO_JoinConfirmCB等待Status == ZSUCCESS。抓包发现几情况:

    1,终端不发出orphan request,只是一直发beacon request,之后也不发rejoin request。

    2,终端发出orphan request,但协调器没有响应回复coordinate realignment,一直发beacon request,之后一直没有发出rejoin request

    3,若是成功恢复网络的就2种状况:1.终端发出orphanrequest,协调器响应coordinate realignment 2.抓包发现rejoin request (好像抓到rejoin的就一定成功,失败的都抓不到rejoin request)

    网络初始化这部分代码,我们没有修改过,我也对比过home和mesh这部分代码,貌似有添加,但总体结构没有改变。