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

2024-03-16 05:48

本文主要是介绍ZigBee学习之绑定表管理函数详解——ZStack API解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.163.com/weiqianen@126/blog/static/9204547620101129242921/
应用支持子层(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 
} 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, 
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提供了一对函数用来做快速地址转换(查找),用这些函数在IEEE和短地址之间作转换。 
uint8 APSME_LookupExtAddr(uint16 nwkAddr, uint8* extAddr ); 
基于短地址查找IEEE扩展地址。 
nwkAddr -拥有的短地址,用来查找扩展地址。 
extAddr -指向扩展地址存放的缓存 
uint8 APSME_LookupNwkAddr( uint8* extAddr, uint16* nwkAddr ); 

这篇关于ZigBee学习之绑定表管理函数详解——ZStack API解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/814496

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" /><PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /><PackageReference Include="Serilog

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

十四、观察者模式与访问者模式详解

21.观察者模式 21.1.课程目标 1、 掌握观察者模式和访问者模式的应用场景。 2、 掌握观察者模式在具体业务场景中的应用。 3、 了解访问者模式的双分派。 4、 观察者模式和访问者模式的优、缺点。 21.2.内容定位 1、 有 Swing开发经验的人群更容易理解观察者模式。 2、 访问者模式被称为最复杂的设计模式。 21.3.观察者模式 观 察 者 模 式 ( Obser

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号