Z-Stack学习笔记
1. 栈配置profile
栈参数的集合需要被配置为一定的值,连同这些值在一起被称之为栈配置。ZigBee联盟定义了这些由栈配置组成的栈参数,ZigBee联盟已经定了许多标准的配置文件(公共模板),比如远程控制开关配置文件和光传感器配置文件,这些配置文件定义了设备的应用环境、设备类型以及用于设备间通信的簇。公共的配置文件可以确保不同供应商是设备在相同应用领域的互操作性。
每个配置文件可以定义最多256个集群(Cluster),每个集群最多可以有65536个属性。ZigBee设备有模板定义,以应用对象(Application Objects)的形式实现,每个对象通过一个端点(双向的)连接到ZigBee堆栈的余下部分,端点之间的通讯是通过一个称之为簇的数据结构(簇标示符)来实现的,簇是应用对象之间共享信息所需的全部属性的容器。
两个特殊的端点:
应用程序使用端点0来配置和管理ZigBee协议栈,此应用程序称之为ZigBee设备对象(ZDO)。
端点255用于向所有端点的广播。
端点241~254为扩展保留端点,其他端点(1~240)为应用程序可使用的端点。
- 所有端点都使用APS(应用支持子层)提供的服务,
ZigBee2006协议栈规定了一些参数的值。
MAC_DEPTH = 5
MAX_ROUTERS = 6
MAX_CHILDREN = 20
整个地址空间不能超过216,参数的合法性校验可用CSkip.xls来确保。如果使用自定义的栈配置,进行如下配置


2. Z-Stack寻址
应用程序通常使用AF_DataRequest.
组寻址,使用组寻址时,地址模式设置为afAddrGroup并且addr.shortAddr设置为组ID。

3.绑定
绑定是一种两个应用设备之间信息流的控制机制。绑定机制允许应用程序发送一个数据包而不需要知道目标地址,APS层从它的绑定表中确定目标地址,然后将数据包继续向目标应用或者目标组发送。
3.1 建立绑定表
有三种方式建立一个绑定表
1. ZigBee 设备对象绑定请求(ZigBee Device Object Bind Request):
利用ZDO的配置文件ZDP相关的功能函数实现,EndDevice_Bind_Rsp响应。
ZDP_BindReq()建立绑定表,参数有目的网络地址、源网络地址,源端点,簇ID,目的地址模式,目的地址端点,安全模式。
ZDP_UnbindReq(),采用和ZDP_BindReq相同的参数,用于删除一个绑定表。
目的设备端进入ZDApp_ProcessMsgCBs来响应这些请求。ZDP_Bindreq请求对于bind_rsp响应,ZDP_UnbindReq请求对于unbind_rsp响应
2. ZigBee设备对象终端绑定请求(ZigBee Device Object End Device Bind Request):在指定的时间内,通过按下选定设备上的按钮或者类似动作来绑定,需要协调器的协助。涉及到的函数有ZDP_EndDeviceBindReq(发送绑定请求)和ZDO_MatchEndDeviceBind。 或者 zb_BindDevice()和zb_AllowBind,zb_AllowBindConfirm这三个个函数对 ZDApp_ProcessMsgCB来解析响应各种请求。
3. 设备程序绑定管理(Device Application):
设备应用程序建立或者管理一个绑定表.
由于所有绑定信息都在ZigBee协调器中,所有只有协调器才能接受绑定请求。
ZDO绑定API
ZDO Binding API ZDP Binding Service Command
ZDP_EndDeviceBindReq() End_Device_Bind_req 构建并发送节点设备绑定请求
ZDP_EndDeviceBindRsp() End_Device_Bind_rsp 请求协调器利用簇ID绑定应用
ZDP_BindReq() Bind_req
ZDP_BindRsp() Bind_rsp
ZDP_UnbindReq() Unbind_req
ZDP_UnbindRsp() Unbind_rsp
4.ZigBee设备对象ZDO
ZDO是一个特殊的应用程序,是应用层其他端点与应用支持子层管理实体交互的接口,主要提供一下功能:
1. 初始化应用支持子层、网络层
2. 节点管理 :设备发现(获取其他设备是否存在)和服务发现(获取其他设备提供服务的功能)。
在无信标的网络中,加入的节点只对其父节点可见,而其他节点可以通过ZDO的功能来确定网络的整体拓扑结构以及新发现节点能够提供的功能。ZDO提供网络监测、获取路由和绑定信息,发起脱离网路过程等一系列节点管理功能。
3. 安全加密管理,主要包括安全Key的建立和发送,以及安全授权
4. 网络的维护功能,涉及的函数为ZDApp_Init
5. 绑定管理:绑定的功能由应用支持子层APS提供,绑定功能的管理由ZDO提供,它确定了绑定表的大小、发起和解除等功能
ZDO_RegisterForZDOMsg 注册ZDO消息绑定
ZDO_CB_MSG 接收到的ZDO消息事件
例如ZDP_NwkAddrReq()响应对于NWK_addr_req的请求,ZDP_NWKAddrRsp()的响应对于NWK_addr_rsp的请求等等
ZDO管理API,这些消息用来获得设备状态和更新表格
ZDP Management API ZDP Network Management Service Command
ZDP_MgmtNwkDiscReq() Mgmt_NWK_Disc_req 扫描网络请求
ZDP_MgmtNwkDiscRsp() Mgmt_NWK_Disc_rsp
ZDP_MgmtLqiReq() Mgmt_Lqi_req 为目标设备产生返回邻居列表请求
ZDP_MgmtLqiRsp() Mgmt_Lqi_rsp
ZDP_MgmtRtgReq() Mgmt_Lqi_req 为目标设备产生返回路由列表请求
ZDP_MgmtRtgRsp() Mgmt_Rtg_rsp
ZDP_MgmtBindReq() Mgmt_Bind_req 为目标设备产生返回绑定表请求
ZDP_MgmtBindRsp() Mgmt_Bind_rsp
ZDP_MgmtLeaveReq() Mgmt_Leave_req 请求目标设备脱离网
ZDP_MgmtLeaveRsp() Mgmt_Leave_rsp
ZDP_MgmtDirectJoinReq() Mgmt_Direct_Join_req 请求目标设备直接加入其他设备
ZDP_MgmtDirectJoinRsp() Mgmt_Direct_Join_rsp
ZDP_MgmtPermitJoinReq() Mgmt_Permit_Join_req 请求远端设备允许或者不允许关联
ZDP_MgmtPermitJoinRsp() Mgmt_Permit_Join_rsp
APS绑定表相关:http://bbs.ednchina.com/BLOG_ARTICLE_428609.HTM
Z-Stack学习笔记的更多相关文章
- Docker Stack 学习笔记
该文为<深入浅出Docker>的学习笔记,感谢查看,如有错误,欢迎指正 一.简介 Docker Stack 是为了解决大规模场景下的多服务部署和管理,提供了期望状态,滚动升级,简单易用,扩 ...
- Core Data Stack学习笔记
Entity Entities 实体->数据表一个实体可以表示一个数据模型 1> 通过图形化界面可以建立一个模型关系图,可以指定一对多,多对一,多对多的数据关系 -在数据库开发中,少用多对 ...
- salt stack学习笔记
saltstack运行模式: local master/minion salt ssh saltstack三大功能 远程执行命令 配置管理(状态管理) 云管理 安装: master salt-mas ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9894 Solved: 4561[Subm ...
- Flutter学习笔记(23)--多个子元素的布局Widget(Rwo、Column、Stack、IndexedStack、Table、Wrap)
如需转载,请注明出处:Flutter学习笔记(23)--多个子元素的布局Widget(Rwo.Column.Stack.IndexedStack.Table.Wrap) 上一篇梳理了拥有单个子元素布局 ...
- Spring Boot学习笔记2——基本使用之最佳实践[z]
前言 在上一篇文章Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用已经对Spring Boot的基本体系与基本使用进行了学习,本文主要目的是更加进一步的来说明对于Spring B ...
- stl源码剖析 详细学习笔记stack queue
// // stack.cpp // 笔记 // // Created by fam on 15/3/15. // // //---------------------------15/03/1 ...
- OpenGL学习笔记:拾取与选择
转自:OpenGL学习笔记:拾取与选择 在开发OpenGL程序时,一个重要的问题就是互动,假设一个场景里面有很多元素,当用鼠标点击不同元素时,期待作出不同的反应,那么在OpenGL里面,是怎么知道我当 ...
- shell学习笔记
shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
随机推荐
- Caching Best Practices--reference
reference:http://java.dzone.com/articles/caching-best-practices There is an irresistible attraction ...
- Nginx的一些基本功能极速入门
本文主要介绍一些Nginx的最基本功能以及简单配置,但不包括Nginx的安装部署以及实现原理. 1.静态HTTP服务器 首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML.图片 ...
- 3. Android框架和工具之 xUtils(ViewUtils )
1. ViewUtils 作用: 完全注解方式就可以进行UI绑定和事件绑定. 无需findViewById和setClickListener等. 2. UI绑定 和 事件绑定 (1)UI绑定 下面我們 ...
- 基于阿里云ECS的phpwind网站备案前如何远程访问调试?
基于阿里云ECS的phpwind网站部署非常方便,但云主机的外网IP绑定域名却比较复杂.先要申请域名,成功后还需要备案.尤其是企业网站备案,需要提交的资料较多,准备资料以及审批的时间较长.这段时间在外 ...
- 使用hibernate配置多数据源链接MySQL和Oracle数据库
最近做项目要将读取到的数据同时插入到MySQL数据库和Oracle数据库当中,以前都是使用一个数据库,没有用过多数据源的情况,现在把这个问题搞定了,写下来希望对大家有点帮助,可能我所使用的方法不是最好 ...
- c#入门实例
1.概述 C#是一个语言,.net是一个平台,上面支持用C#或者VB.Net写代码 2.注释 若注释量较少用 // 开头,大量用 /* */ 表示 输出结果 3.命名空间 所谓n ...
- 推荐一款好用的项目管理工具:project
Microsoft Project (MSP)是微软开发的一个国际上享有盛誉的通用的项目管理工具软件. 在项目管理的时候,这个软件可以帮你定制时间计划,还有其它很多好用的功能. 2010版本的下载传送 ...
- Visual Studio 扩展包(.vsix)制作
前言:上篇介绍了 Visual Studio扩展工具添加与卸载,本编要介绍的是Visual Studio 扩展包(.vsix)的制作. 方法: ①.下载并安装Visual Studio 2010 SD ...
- jQuery阻止事件冒泡的例子
下面给给各位朋友稍加整理了一jquery中阻止事件冒泡的一些例子,我们知道JQuery 提供了两种方式来阻止事件冒泡,但我们简单的利用它来做一些应用可能不深入或不理解,下面整理了更详细的方法,有兴趣的 ...
- 【前端JS、后台C#】编码解码。
最近做项目,出现中文乱码的问题,特地研究一下. GB2312,指的是中文 UTF8,指的是国标,包含中文.英文. 但是通过JQuery.ajax的Get.Post,如果直接传递中文或者特殊字符的特使字 ...