zoukankan      html  css  js  c++  java
  • Z-Stack学习笔记

    Technorati 标签:

    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来确保。如果使用自定义的栈配置,进行如下配置

    image image

     

    image

     

    2. Z-Stack寻址

    应用程序通常使用AF_DataRequest.

    组寻址,使用组寻址时,地址模式设置为afAddrGroup并且addr.shortAddr设置为组ID。

    image

     

    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

  • 相关阅读:
    flask——flask-sqlachemy中的一对多,多对多关系
    flask——flask-sqlachemy的使用,模块划分
    Ubuntu下安装JDK和Open Jdk
    flask——全文检索
    Flask——部署
    在Ubuntu上安装Chrome浏览器和ChromeDriver
    jinja2模板语言的循环序号
    CentOS7安装mongodb
    CentOS7安装PhantomJS
    使用screen在后台运行程序
  • 原文地址:https://www.cnblogs.com/cherishui/p/4290359.html
Copyright © 2011-2022 走看看