一个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,下次启动的时候就会自动连接该网络

以上就是终端入网的一个大概流程。

在ZDO_NetworkDiscoveryConfirmCB方法中,在发送消息之前,我们可以将消息参数设置为我们需要连接的网络,比如在该方法中增加:

  if(ZSTACK_END_DEVICE_BUILD){msg.hdr.status = ZDO_SUCCESS;msg.panIdLSB = LO_UINT16( NetworkList->panId );msg.panIdMSB = HI_UINT16( NetworkList->panId );msg.logicalChannel = pNwkDesc->logicalChannel;msg.version = pNwkDesc->version;osal_cpyExtAddr( msg.extendedPANID, NetworkList->extendedPANID );}ZDApp_SendMsg( ZDAppTaskID, ZDO_NWK_DISC_CNF, sizeof(ZDO_NetworkDiscoveryCfm_t), (uint8 *)&msg );

然后在处理消息的时候,再将数据取出来,如:

            if ( NLME_JoinRequest( ((ZDO_NetworkDiscoveryCfm_t *)msgPtr)->extendedPANID,BUILD_UINT16( ((ZDO_NetworkDiscoveryCfm_t *)msgPtr)->panIdLSB, ((ZDO_NetworkDiscoveryCfm_t *)msgPtr)->panIdMSB ),((ZDO_NetworkDiscoveryCfm_t *)msgPtr)->logicalChannel,ZDO_Config_Node_Descriptor.CapabilityFlags ) != ZSuccess ){ZDApp_NetworkInit( (uint16)(NWK_START_DELAY+ ((uint16)(osal_rand()& EXTENDED_JOINING_RANDOM_MASK))) );}

其中msgPtr就是消息传过去的参数。这样底层返回什么协调器,终端就会什么协调器发起请求,每个协调器收到请求后,就将信息发给用户确认,用户在哪个协调器上面确认,哪个协调器就允许终端接入。

以上只是一个基本思路,由于可能连续几次返回的协调器信息一样、在实际中还要考虑每次上电后的情况、终端的低功耗等等,还需要很大程度上的修改、测试。

zigbee终端向多个协调器发起请求的思路(终端入网流程分析)相关推荐

  1. zigbee现存网络下更换协调器

    应用场景:现场协调器坏了,更换协调器,只改panid.加密信息.信道等是不行的 因为之前坏掉的协调器已经创建了一个网络,即使旧协调器坏了,网络还在,新协调器如果开机前没有之前的网络设备处于开启状态,它 ...

  2. Zigbee学习(二)协调器程序

    *********************************************************************在协议栈中控制LED闪烁协调器程序(Coordinator.c ...

  3. Zigbee设备入网流程分析(关联方式)

    在一个zigbee协 调器设备建立网络后,路由器设备或者终端设备(end device),可以加入协调器建立的网络,具体加入网络有两种方式,一种是通过关联(association)方式,就是待加入的设 ...

  4. zigbee设备入网流程分析

    下图片展示的是一个zigbee设备的入网流程 下面是一个router设备连接到coordinator的过程: 1.router发送beacon request router会在每一个信道发送一个bea ...

  5. mesh 协调器 路由器_双模网络协调器、双模路由器、双模mesh组网系统及其方法与流程...

    本发明涉及mesh组网领域,特别涉及双模网络协调器.双模路由器.双模mesh组网系统及其方法. 背景技术: 无线mesh是一种非常适合于覆盖大面积开放区城(包括室外和室内)的无线区域网络解决方案.无线 ...

  6. 使用zigbee的协议栈进行协调器路由器终端初始化

    实验目的: 使用协议栈,外加自己写的数码管的代码模块 配置协调器路由器终端,各自对应数码管数字C,R,E. 本身不是很细致,只是把一些重要步骤截了一下,IAR工程什么的默认大家都会了. zigbee协 ...

  7. Zigbee应用开发 协调器控制多个终端

    协调器控制多个终端 功能要求: 协调器通过串口向终端发送控制命令 发送1 则终端1 的D8灯亮 发送 2 则 终端2 的灯亮 发送 0 则 俩个终端都灭 实现过程: 当网络状态发生改变时,通过串口打印 ...

  8. 组一个包括协调器路由器终端节点的zigbee网络,通过串口能获取它们的拓扑结构。

    组一个包括协调器路由器终端节点的zigbee网络,通过串口能获取它们的拓扑结构. 实验简介 实验环境 实验准备 1.下载基本工程文件 2.打开工程文件 3.尝试编译 路由器和终端节点 查看完整原文 旧 ...

  9. 基于Zigbee的SHT10温湿度数据采集系统(已实现控制12个终端节点)——Zigbee协调器主要代码解析

    之前实现了基于Zigbee的SHT10温湿度数据采集系统,这里来重新复盘一些主要的知识和代码. 写在前面: 1 功能介绍:使用Zigbee终端节点采集环境的温度和湿度数据,然后将数据无线发送的Zigb ...

  10. Zigbee协调器主动使终端节点退网

    我使用ZDP_MgmtLeaveReq()这个函数来让已知短地址的终端退网,代码如下:我这样使用的结果是,可以将节点退网,节点上也需要做一些配置.我在函数里禁止节点重连,但是节点退网后会获取到新的短地 ...

最新文章

  1. 正确使用STL-MAP中Erase函数
  2. linux设置账号权限设置,Linux账号管理与ACL权限设置
  3. Google Dremel 原理 - 如何能3秒分析1PB
  4. 开发、测试与QA的区别以及其他
  5. 计算机硬件知识考证题,计算机硬件知识题(答案)资料
  6. 抓取新浪的每日星座运势
  7. 云免流控服务器响应失败,云免流服务器是否违法
  8. 多看系统下载_制冷系统压力检测有多重要?看了你就知道了
  9. python自动交易 缠论_缠论自动交易系统实现了
  10. 数值分析(计算方法)
  11. web前端教程,详解引入CSS的4种方式
  12. Axure安装、破解、汉化一条龙
  13. Android mvp 架构的自述
  14. 软考:嵌入式系统设计师
  15. 利用pygame写星球大战小游戏
  16. hive中的date函数
  17. Buffer之position,limit,capacity
  18. opencv环境配置相关软件
  19. 你知道怎样进行芝麻动态vps速度测试吗?
  20. [vue]vue接入AntV G2Plot

热门文章

  1. 算法的两大性能指标:时间复杂度和空间复杂度
  2. LOCAL_PRIVILEGED_MODULE 详解(3)
  3. 错误: 此上下文中不允许函数定义。
  4. 加拿大移民-雇主担保移民政策解读
  5. C++中begin()函数的含参数的使用
  6. 一二三代壳和加壳技术分类识别
  7. 微软大中华区迎来10年来首位华人CEO;华为前高管出任云南白药CEO;港交所新行政总裁委任获批 | 高管变动...
  8. 聚焦基因组学研究,JMP参加第七届国际统计遗传学与基因组学高峰论坛
  9. pandas读取文件自动生成表头
  10. 基于ssm的自动化办公oa系统的设计