教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

ZigBee学习之绑定表管理函数详解——ZStack API解读

来源:网络收集 时间:2026-10-02
导读: ZigBee ZigBee学习之绑定表管理函数详解——ZStack API解读 2010-12-29 14:05:20| 分类: | 标签:入口 终端函数 |字号 订阅 应用支持子层(APS) 应用支持子层提供如下管理功能: 邦定表管理 组表管理 快速地址查找 除了管理功能外,APS还提供数据服务,只

ZigBee

ZigBee学习之绑定表管理函数详解——ZStack API解读 2010-12-29 14:05:20| 分类: | 标签:入口 终端函数 |字号 订阅

应用支持子层(APS)

应用支持子层提供如下管理功能:

· 邦定表管理

· 组表管理

· 快速地址查找

除了管理功能外,APS还提供数据服务,只是应用不能访问数据服务。应用需要通过AF数据接口AF_DataRequest()来发送数据。如果要使用邦定表函数需要包含BindingTable.h头文件。

邦定表管理

请注意,绑定服务只能在“互补”设备之间建立。那就是,只有分别在两个节点的简单描述结构体(simple descriptor structure)中,同时注册了相同的命令标识符(command_id)并且方向相反(一个属于输出指令“output”,另一个属于输入指令“input”),才能成功建立绑定。

APS邦定表是在静态RAM中定义的一张表,定义在nwk_globals.c中。表的大小可以通过f8wConfig.cfg中的【NWK_MAX_BINDING_ENTRIES和MAX_BINDING_CLUSTER_IDS】莱配置。只有定义了REFLECTOR或者COORDINATOR_BINDING才能包含此表,用REFLECTOR编译选项来支持APS层的源邦定。

邦定表结构 – BindingEntry_t

typedef struct

{

uint16 srcIdx; // Address Manager index

uint8 srcEP;

uint8 dstGroupMode; // Destination address type; 0 - Normal address index, 1 - // Group address

uint16 dstIdx; // This field is used in both modes (group and non-group) to // save NV and RAM space

// dstGroupMode = 0 - Address Manager index

// dstGroupMode = 1 - Group Address

uint8 dstEP;

uint8 numClusterIds;

uint16 clusterIdList【MAX_BINDING_CLUSTER_IDS】;

// Don t use MAX_BINDING_CLUSTERS_ID when

// using the clusterIdList field. Use

// gMAX_BINDING_CLUSTER_IDS

ZigBee

} BindingEntry_t;

srcIdx –源地址(绑定记录的源地址)的地址管理器索引,地址管理器保存着源地址的IEEE地址和短地址。

srcEP -源终端

dstGroupMode -目的地址类型。

0 普通地址

1 组地址

dstIdx -若dstGroupMode为0,则包含目的地址的地址管理器索引,若dstGroupMode为1,则包含目的组地址

dstEP -目的终端

numClusterIds -clusterIdList中的入口数目

clusterIdList -簇ID列表。列表的最大数目定义由MAX_BINDING_CLUSTER_IDS

【f8wConfig.cfg】指定

邦定表维护

BindingEntry_t *bindAddEntry( zAddrType_t *srcAddr, byte srcEpInt,

zAddrType_t *dstAddr, byte dstEpInt,

byte numClusterIds, uint16 *clusterIds );

在邦定表中增加一个入口。由于每个入口可以有多个cluster ID,所以此函数有可能仅仅在已有邦定条目上增加cluster ID

srcAddr -邦定记录源地址。为Addr16Bit或者Addr64Bit的addr数据结构

srcEpInt -邦定记录源终端

dstAddr -邦定记录目的地址,为Addr16Bit,Addr64Bit或AddrGroup addrMode,若为AddrGroup则组ID(group ID)填充到addr.shortAddr

dstEpInt -邦定记录目标终端,若dstAddr为组地址,则忽略此位

clusterIds -指向要增加的cluster ID(16位)列表。

返回值:BindingEntry_t -指向一条新加入的邦定入口

byte bindRemoveEntry( BindingEntry_t *pBind );

pBind -指向邦定表中一个入口的指针

byte bindRemoveClusterIdFromList( BindingEntry_t *entry, uint16 clusterId );

从已存在的邦定表入口的cluster ID列表中移除一个cluster ID。如果至少移除了一个cluster ID则返回真。此函数不检查参数的正确性。

entry -指向邦定表的指针

clusterId -要移除的16位的cluster ID

byte bindAddClusterIdToList( BindingEntry_t *entry, uint16 clusterId );

是上面那个函数的反操作函数

void bindRemoveDev( zAddrType_t *Addr );

移除参数指定的所有邦定表入口,一旦Addr匹配了源地址或者目的地址,则对应的入口将被删除

void bindRemoveSrcDev( zAddrType_t *srcAddr, uint8 ep );

功能同上,只是限定了终端和源地址的匹配项目

void bindUpdateAddr( uint16 oldAddr, uint16 newAddr );

交换邦定表中的短地址,所有oldAddr将被newAddr取代。

BindingEntry_t *bindFindExisting( zAddrType_t *srcAddr, byte srcEpInt,

ZigBee

zAddrType_t *dstAddr, byte dstEpInt );

按指定参数查找一个已存在的邦定表入口。若找到则返回指向此邦定表入口的指针,否则返回NULL。

byte bindIsClusterIDinList( BindingEntry_t *entry, uint16 clusterId );

检查此cluster ID是否在簇ID列表中。如果在列表中则返回真。

邦定表统计函数

byte bindNumBoundTo( zAddrType_t *devAddr, byte devEpInt, byte srcMode ); 计算符合条件的邦定表入口数目。返回找到的邦定表入口数目。

devAddr -要查找的邦定表地址

devEpInt -终端

srcMode

TRUE 查找源地址,FALSE 查找目的地址

uint16 bindNumOfEntries( void );

返回邦定表中的条目数,以cluster计数。

void bindCapacity( uint16 *maxEntries, uint16 *usedEntries );

返回邦定表的可能最大数目,和在用的最大数目,以入口记录计数。

maxEntries -指向最大入口数目的变量,绑定表的最大入口可以通过

NWK_MAX_BINDING_ENTRIES【f8wConfig.cfg】更改

usedEntries -指向在用的入口数目的变量

邦定表的非易失性储存

用这些API需要首先设置编译选项NV_RESTORE【f8wConfig.cfg】,推荐用户使用BindWriteNV函数,因为binding NV初始化和读取在设备启动的时候会自动执行。 void BindWriteNV( void );

把绑定表写入非易失性储存器,如果用户应用改变了邦定表则可以调用此函数。如果邦定表通过ZDO更新,则ZDO会调用此函数,用户应用就不需调用了。

组表管理

APS组表是由分配的RAM【osal_mem_alloc()】定义得链表,因此当组表增加时,OSAL堆也将增加。表定义在nwk_globals.c,通过调整APS_MAX_GROUPS【f8wConfig.cfg】来改变组表的最大大小。用这些API需要包含aps_groups.h头文件。

组表结构体

组:组是用来将一系列节点集合到一个单地址实体的方式。一个数据请求能够到达组中的每个节点。在Zigbee协议中组是可选配置,但是在某些剖面中是必选的,比如家庭自动化剖面。组关注的是一系列设备同时执行一个行为。

typedef struct

{

uint16 ID; // Unique to this table

uint8 name【APS_GROUP_NAME_LEN】; // Human readable name of group } aps_Group_t;

ID -16位的组ID

name -文本组名(人类语言)APS_GROUP_NAME_LEN为16且不可更改。

ZigBee

组表入口-apsGroupItem_t

组表记录(入口)

typedef struct apsGroupItem

{

struct apsGroupItem *next;

ui …… 此处隐藏:3718字,全部文档内容请下载后查看。喜欢就下载吧 ……

ZigBee学习之绑定表管理函数详解——ZStack API解读.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/281519.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)