微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 关于ZDO_STATE_CHANGE的疑惑

关于ZDO_STATE_CHANGE的疑惑

时间:10-02 整理:3721RD 点击:

各位技术大神,关于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这部分代码,貌似有添加,但总体结构没有改变。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top