组网过程
初始化:
osal_init_system()->osalInitTasks()在OSAL.c中
osalInitTasks()->ZDApp_Init()在OSAL_GenericApp.c中
ZDApp_Init()->ZDOInitDevice()在ZDApp.c中
ZDOInitDevice()->ZDApp_NetworkInit()在ZDApp.c中
ZDApp_NetworkInit()->ZDO_NETWORK_INIT在ZDApp.c中
任务轮询:
osal_start_system()->ZDApp_event_loop在OSAL.c中
ZDApp_event_loop->events & ZDO_NETWORK_INIT->ZDO_StartDevice() 在ZDApp.c中
ZDO_StartDevice()根据不同的设备类型(协调器,终端)来形成网络在ZDObject.c中
本来想通过追踪组网的过程来查看在哪里触发GenericApp_ProcessEvent()中有关组网的事件(或者说确定一下
完成组网之后在APP中有没有相关的处理事件),但是很可惜,根据上面的查找思路,最后都趋向于调用下层API,
所以就到此为止了。
我们都知道,zstack的组网是上电自动完成的,是不用我们过多操心的。但是我们怎么知道组网有没有成功,或者
怎么根据组网的状态进行下一步调用?(对于前者,LED、LCD会有指示,对于后者,应该是根据
GenericApp_ProcessEvent()中的case ZDO_STATE_CHANGE)。
至于ZDO_STATE_CHANGE,应该是当设备状态由DEV_INIT 改变为 DEV_END_DEV时由ZDO自动触发的(这个
我没有找到代码,是看TI论坛上有人这么说,应该是正确的)。也就是说,只要设备状态改变(这里的状态devState
也有很多定义,至于怎么变还不清楚,应该与组网有关)就会触发事件,所以不太适合处理接收到的信息,但是可
以发送信息。
至于接收信息,用AF_INCOMING_MSG_CMD比较合适,具体在哪里触发,我也没找到……(晕,我今天都干了些
神马)
(关于AF_INCOMING_MSG_CMD,这篇文章讲的有点道理,但还有问题,先附上
http://zacard168.blog.163.com/blog/static/51980168201071322455/)
(再补一篇参考比较多的文章,关于zigbee组网的硕士学位论文http://www.doc88.com/p-743861203783.html)