一个ZigBee终端周围可能有多个协调器,如何让终端连接到指定的协调器?
先简单的谈一下终端的入网流程(相关代码自己去看源码): 1,终端上电,调用ZDOInitDevice初始化ZDO层的task 2, 在ZDOInitDevice中调用ZDApp_NetworkInit方法初始化网络 3,在ZDApp_NetworkInit方法中发送了ZDO_NETWORK_INIT事件消息 4,在ZDApp_event_loop中处理ZDO_NETWORK_INIT事件消息,并调用ZDO_StartDevice方法来启动网络 5,在ZDO_StartDevice方法,调用了NLME_NetworkFormationRequest来搜索网络,搜索的结果会定时回调ZDO_NetworkDiscoveryConfirmCB方法:
ZStatus_t ZDO_NetworkDiscoveryConfirmCB( uint8 ResultCount,
networkDesc_t *NetworkList )
{
//......
}
该方法第一个参数表示搜索到的结果,第二个参数表示一个搜索到的协调器或路由器,每次返回NetworkList可以一样,也可能不一样。NetworkList里面包含了padid等参数
6,在ZDO_NetworkDiscoveryConfirmCB方法中发出ZDO_NWK_DISC_CNF消息事件 7,在事件消息最终会调用ZDApp_ProcessOSALMsg方法: void ZDApp_ProcessOSALMsg( osal_event_hdr_t *msgPtr )
8,在ZDApp_ProcessOSALMsg方法中,调用NLME_JoinRequest发起连接请求
9,如果连接成功后,会回调ZDO_JoinConfirmCB方法 10,在ZDO_JoinConfirmCB方法中,最终会调用ZDApp_SaveNetworkStateEvt,将网络信息写到底层和flash,下次启动的时候就会自动连接该网络
以上就是终端入网的一个大概流程。
|