zigbee终端向多个协调器发起请求的思路(终端入网流程分析)
一个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终端向多个协调器发起请求的思路(终端入网流程分析)相关推荐
- zigbee现存网络下更换协调器
应用场景:现场协调器坏了,更换协调器,只改panid.加密信息.信道等是不行的 因为之前坏掉的协调器已经创建了一个网络,即使旧协调器坏了,网络还在,新协调器如果开机前没有之前的网络设备处于开启状态,它 ...
- Zigbee学习(二)协调器程序
*********************************************************************在协议栈中控制LED闪烁协调器程序(Coordinator.c ...
- Zigbee设备入网流程分析(关联方式)
在一个zigbee协 调器设备建立网络后,路由器设备或者终端设备(end device),可以加入协调器建立的网络,具体加入网络有两种方式,一种是通过关联(association)方式,就是待加入的设 ...
- zigbee设备入网流程分析
下图片展示的是一个zigbee设备的入网流程 下面是一个router设备连接到coordinator的过程: 1.router发送beacon request router会在每一个信道发送一个bea ...
- mesh 协调器 路由器_双模网络协调器、双模路由器、双模mesh组网系统及其方法与流程...
本发明涉及mesh组网领域,特别涉及双模网络协调器.双模路由器.双模mesh组网系统及其方法. 背景技术: 无线mesh是一种非常适合于覆盖大面积开放区城(包括室外和室内)的无线区域网络解决方案.无线 ...
- 使用zigbee的协议栈进行协调器路由器终端初始化
实验目的: 使用协议栈,外加自己写的数码管的代码模块 配置协调器路由器终端,各自对应数码管数字C,R,E. 本身不是很细致,只是把一些重要步骤截了一下,IAR工程什么的默认大家都会了. zigbee协 ...
- Zigbee应用开发 协调器控制多个终端
协调器控制多个终端 功能要求: 协调器通过串口向终端发送控制命令 发送1 则终端1 的D8灯亮 发送 2 则 终端2 的灯亮 发送 0 则 俩个终端都灭 实现过程: 当网络状态发生改变时,通过串口打印 ...
- 组一个包括协调器路由器终端节点的zigbee网络,通过串口能获取它们的拓扑结构。
组一个包括协调器路由器终端节点的zigbee网络,通过串口能获取它们的拓扑结构. 实验简介 实验环境 实验准备 1.下载基本工程文件 2.打开工程文件 3.尝试编译 路由器和终端节点 查看完整原文 旧 ...
- 基于Zigbee的SHT10温湿度数据采集系统(已实现控制12个终端节点)——Zigbee协调器主要代码解析
之前实现了基于Zigbee的SHT10温湿度数据采集系统,这里来重新复盘一些主要的知识和代码. 写在前面: 1 功能介绍:使用Zigbee终端节点采集环境的温度和湿度数据,然后将数据无线发送的Zigb ...
- Zigbee协调器主动使终端节点退网
我使用ZDP_MgmtLeaveReq()这个函数来让已知短地址的终端退网,代码如下:我这样使用的结果是,可以将节点退网,节点上也需要做一些配置.我在函数里禁止节点重连,但是节点退网后会获取到新的短地 ...
最新文章
- 正确使用STL-MAP中Erase函数
- linux设置账号权限设置,Linux账号管理与ACL权限设置
- Google Dremel 原理 - 如何能3秒分析1PB
- 开发、测试与QA的区别以及其他
- 计算机硬件知识考证题,计算机硬件知识题(答案)资料
- 抓取新浪的每日星座运势
- 云免流控服务器响应失败,云免流服务器是否违法
- 多看系统下载_制冷系统压力检测有多重要?看了你就知道了
- python自动交易 缠论_缠论自动交易系统实现了
- 数值分析(计算方法)
- web前端教程,详解引入CSS的4种方式
- Axure安装、破解、汉化一条龙
- Android mvp 架构的自述
- 软考:嵌入式系统设计师
- 利用pygame写星球大战小游戏
- hive中的date函数
- Buffer之position,limit,capacity
- opencv环境配置相关软件
- 你知道怎样进行芝麻动态vps速度测试吗?
- [vue]vue接入AntV G2Plot
热门文章
- 算法的两大性能指标:时间复杂度和空间复杂度
- LOCAL_PRIVILEGED_MODULE 详解(3)
- 错误: 此上下文中不允许函数定义。
- 加拿大移民-雇主担保移民政策解读
- C++中begin()函数的含参数的使用
- 一二三代壳和加壳技术分类识别
- 微软大中华区迎来10年来首位华人CEO;华为前高管出任云南白药CEO;港交所新行政总裁委任获批 | 高管变动...
- 聚焦基因组学研究,JMP参加第七届国际统计遗传学与基因组学高峰论坛
- pandas读取文件自动生成表头
- 基于ssm的自动化办公oa系统的设计