绑定(Binding)——ZigBee协议栈Z-Stack开发指南

绑定是一种两个(或者多个)应用设备之间信息流的控制机制。在ZigBee2006发布版本中,它被称为资源绑定,所有的设备都必须执行绑定机制。

绑定允许应用程序发送一个数据包而不需要知道目标地址。APS层从它的绑定表中确定目标地址,然后将数据继续向目标应用或者目标组发送。

注意:在ZigBee的1.0版本中,绑定表是保存在协调器(Coordinator当中)。现在所有的绑定记录都保存在发送信息的设备当中。


3.1建立绑定表(Building a Binding Table)

有三种方法可以建立一个绑定表:

l Zigbee Device Object Bind Request——一个启动工具可以告诉设备创建一个绑定记录

l Zigbee Device Object End Device Bind Request——两个设备可以告诉协调器它们想要建立一个绑定表记录。协调器来协调并在两个设备中创建绑定表记录。

l Device Application——一个设备上的应用程序建立或者管理一个绑定表


3.1.1ZigBee Device Object Binding Request

任何一个设备都可以发送一个ZDO信息给网络中的另一个设备,用来建立绑定表。称之为援助绑定,它可以为一个发送设备创建一个绑定记录。


3.1.1.1启动申请(The Commissioning Application)

一个应用程序可以通过ZDP_BindReq()函数(在ZDProfile.h),并在绑定表中包含两个请求(地址和终点)以及想要的群ID。第一个参数(目标dstAddr)是绑定源的短地址即,16位网络地址。

确定你已经在ZDConfig.h允许了这个功能(ZDO_BIND_UNBIND_REQUEST)。

你也可以使用ZDP_UnbindReq()用同样的参数取消绑定记录。

目标设备发回ZigBee Device Object Bind 或者Unbind Response信息,该信息是ZDO代码根据动作的状态,通过调用ZDApp_BindRsq()或者ZDApp_UnbindRsq()函数来分析和通知ZDApp.c的。

对于绑定响应,从协调器返回的状态将是ZDP_SUCCESS,ZDP_TABLE_FULL或者ZDP_NOT_SUPPORTED。

对于解除绑定响应,从协调器返回的状态将是ZDP_SUCCESS,ZDP_NO_ENTRY或者ZDP_NOT_SUPPORTED。


3.1.1.2ZigBee Device Object End Device Bind Request

这个机制是在指定的时间周期(timeout period)内,通过按下选定设备上的按钮或者类似的动作来绑定。协调器在指定的时间周期内,搜集终端设备的绑定请求信息,然后以配置ID(Profile ID)和群ID(Cluster ID)协议为基础,创建一个绑定表记录作为结果。默认的设备绑定时间周期(APS_DEFAULT_MAXBINDING_TIME)是16秒钟(在nwk_globals.h中定义)。但是将它添加到f8wConfig.cfg中,则可以更改。

在“用户指南”中的应用程序就是一个终端设备绑定的例子(在每个设备上按下RIGHT按键)。

你应该注意到,所有的例程都有处理关键事件的函数(例如:在TransmitApp.c中的TransmitApp_HandleKeys()函数)。这个函数调用ZDApp_SendEndDeviceBindReq()(在ZDApp.c中)。这个函数搜集所有终端节点的请求信息,然后调用ZDP_EndDeviceBindReq()函数将这些信息发送给协调器。

协调器调用函数ZDP_IncomingData()【ZDProfile.c中】函数接收这些信息,然后再调用ZDApp_ProcessEndDeviceBindReq ()【ZDObject.c中】函数分析这些信息,最后调用ZDApp_EndDeviceBindReqCB【ZDApp.c中】函数,这个函数再调用ZDO_MatchEndDeviceBind()【ZDObject.c中】函数来处理这个请求。

当收到两个匹配的终端设备绑定请求,协调器在请求设备中启动创建源绑定记录的进程。假设在ZDO终端设备中发现了匹配的请求,协调器将执行下面的步骤:

l 发送一个解除绑定请求给第一个设备。这个终端设备锁定进程,这样解除绑定被首先发送来去掉一个已经存在的绑定记录。

l 等待ZDO解除绑定的响应,如果响应的状态是ZDP_NO_ENTRY,则发送一个ZDO绑定请求在源设备中创建一个绑定记录。如果状态是ZDP_SUCCESS,则继续前进到第一个设备的群ID。

l 等待ZDO绑定响应,如果收到了,则继续前进到第一个设备的下一个群ID。

l 当地一个设备完成后,用同样的方法处理第二个设备。

l 当第二个设备也完成之后,发送ZDO 终端设备绑定请求消息给两个设备。


3.1.1.3Device Application Binding Manager

另一种进入设备绑定记录的方式是应用自己管理绑定表。这就意味着应用程序需要通过调用下面的绑定管理函数在本地进入并且删除绑定记录:

l bindAddEntry()——在绑定表中增加一个记录

l bindRemoveEntry()——从绑定表中删除一个记录

l bindRomoveClusterIdFromList()——从一个存在的绑定表记录中删除一个群ID

l bindAddClusterIdToList()——向一个已经存在的绑定记录中增加一个群ID

l bindRemoveDev()——删除所有地址引用的记录

l bindRemoveSrcDev()——删除所有源地址引用的记录

l bindUpdateAddr()——将记录更新为另一个地址

l bindFindExisting()——查找一个绑定表记录

l bindIsClusterIdInList()——在表记录中检查一个已经存在的群ID

l bindNumBoundTo()——拥有相同地址(源或者目的)的记录的个数

l bindNumEntries()——表中记录的个数

l bindCapacity()——最多允许的记录个数

l bindWriteNV()——在NV中更新表


3.1.2配置源绑定(Configuring Source Binding)

为了在你的设备中使能源绑定在f8wConfig.cfg文件中包含REFLECTOR编译标志。同时在f8wConfig.cfg文件中查看配置项目NWK_MAX_BINDING_ENTRIES和MAX_BINDING_CLUSTER_IDS。NWK_MAX_BINDING_ENTRIES是限制绑定表中的记录的最大个数,MAX_BINDING_CLUSTER_IDS是每个绑定记录的群ID的最大个数。

绑定表在静态RAM中(未分配),因此绑定表中记录的个数,每条记录中群ID的个数都实际影响着使用RAM的数量。每一条绑定记录是8字节多(MAX_BINDING_CLUSTER_IDS * 2字节)。除了绑定表使用的静态RAM的数量,绑定配置项目也影响地址管理器中的记录的个数。


BINDING KuangJunBin:本文是作者根据TI Z-Stack开发文档,ZigBee Specification-2007,《Zigbee Wireless Networking》等英文资料整合和翻译而成,采用中英双语对照方便读者理解,文中翻译不当之处,望广大同行不吝赐教。推广ZigBee技术,提高国内电子行业的国际影响力,是我们无线通讯工程师的愿景。本文欢迎转载,请保留作者信息和出处,作为支持我继续努力前行的动力,谢谢! E-mail:kuangjunbin@gmail.com In the Zigbee 2006 release,the binding mechanism is implemented in all devices and is called source binding. Binding allows an application to send a packet without knowing the destination address,the APS layer determines the destination address from its binding table,and then forwards the message on to the destination application(or multiple applications)or group. ZigBee2006版本中规定,在全部节点中实现绑定机制,并将其称为源绑定绑定机制允许一个应用服务在不知道目标地址的情况下向对方(的应用服务)发送数据包。发送时使用的目标地址将由应用支持子层(APS)从绑定表中自动获得,从而能使消息顺利被目标节点的一个或多个应用服务,乃至分组接收。 Binding Table 1.Defined in RAM,but can be saved in Flash if the NV_RESTORE compiler option is used 2.Stored on source node(REFLECTOR compiler option required) 3.Entries map messages to their intended destination 4.Each entry in the binding table contains the following: typedef struct { uint16 srcIdx;//Source index uint8 srcEP;//Source endpoint uint8 dstGroupMode;//Specifies normal or group addressing uint16 dstIdx;//Destination index or group address uint8 dstEP;//Destination endpoint uint8 numClusterIds;//Number of cluster IDs in the clusterIdList below uint16 clusterIdList[MAX_BINDING_CLUSTER_IDS]; }BindingEntry_t; 绑定表 1. 绑定表存放的位置是内存中预先定义的RAM块,如果编译选项NV_RESTORE被激活,也能保存在Flash里。 2. 绑定表放置在源节点(需要激活编译选项REFLECTOR)。 3. 绑定表的条目把需要发送的消息映射到它们的目标地址上。 4. 绑定表中每个条目(entry)包括以下内容: 绑定表条目结构体的定义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值