




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ZigBee学习之绑定表管理函数详解ZStack API解读2010-12-29 14:05:20|分类:ZigBee技术|标签:入口终端uint8uint16函数|字号订阅应用支持子层(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_ttypedef structuint16 srcIdx; / Address Manager indexuint8 srcEP;uint8 dstGroupMode; / Destination address type; 0 - Normal address index, 1 -/ Group addressuint16 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 Addressuint8 dstEP;uint8 numClusterIds;uint16 clusterIdList【MAX_BINDING_CLUSTER_IDS】;/ Dont 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 IDsrcAddr -邦定记录源地址。为Addr16Bit或者Addr64Bit的addr数据结构srcEpInt -邦定记录源终端dstAddr -邦定记录目的地址,为Addr16Bit,Addr64Bit或AddrGroup addrMode,若为AddrGroup则组ID(group ID)填充到addr.shortAddrdstEpInt -邦定记录目标终端,若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 IDbyte 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 -终端srcModeTRUE 查找源地址,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 structuint16 ID; / Unique to this tableuint8 name【APS_GROUP_NAME_LEN】; / Human readable name of group aps_Group_t;ID -16位的组IDname -文本组名(人类语言)APS_GROUP_NAME_LEN为16且不可更改。组表入口-apsGroupItem_t组表记录(入口)typedef struct apsGroupItemstruct apsGroupItem *next;uint8 endpoint;aps_Group_t group; apsGroupItem_t;next -指向组表的下一个入口(组表为链表结构),推荐使用组表查找和维护函数来遍历组表。endpoint -接受消息的终端group -组ID和组名组表维护函数ZStatus_t aps_AddGroup( uint8 endpoint, aps_Group_t *group );往组表中添加一个组。先定义aps_Group_t,然后填充这个结构,最后调用此函数来添加。若NV_RESTORE使能,则函数将更新保存到非易失性储存。返回值:成功则返回ZSuccess,否则返回错误,错误可以是:ZApsDuplicateEntry,ZApsTableFull,ZMemError【ZComDef.h】uint8 aps_RemoveGroup( uint8 endpoint, uint16 groupID );移除一个组,若NV_RESTORE使能,则函数将更新保存到非易失性储存。void aps_RemoveAllGroup( uint8 endpoint );按给定的参数,移除终端的所有组。组表查询函数aps_Group_t *aps_FindGroup( uint8 endpoint, uint16 groupID );endpoint -将接收消息的终端返回值:指向组元件的指针uint8 aps_FindGroupForEndpoint( uint16 groupID, uint8 lastEP );从组ID中查找终端,这个函数用来跳过终端,然后返回下一个终端。lastEP -返回的终端前要跳过的终端。用APS_GROUPS_FIND_FIRST来指定要查找的第一个终端。返回终端,或者APS_GROUPS_EP_NOT_FOUND(没有找到或者找到多个)uint8 aps_FindAllGroupsForEndpoint( uint8 endpoint, uint16 *groupList );得到一个属于一个组的所有终端。endpoint -要查找的终端groupList -指向存放终端所有表的空间uint8 aps_CountGroups( uint8 endpoint );uint8 aps_CountAllGroups( void );组表的非易失性储存若定义了编译选项NV_RESTORE,则当组发生改变时会自动储存。组表的NV初始化和恢复在器件启动时自动执行。若用户应用改变了组表的入口,则必须直接调用Aps_GroupsWriteNV()void aps_GroupsWriteNV( void )若是通
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年租赁合同范本:办公场所租赁合同
- 商场展柜制作合同范本
- 2025财务顾问劳动合同书模板
- 2025《设备采购与安装合同》示范文本
- 2025年03月江苏泰州医药高新区(高港区)事业单位公开招聘20人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2025年03月国家应急管理部所属单位公开招聘拟聘人员笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 商品化色浆项目风险分析和评估报告
- 2025年上海市15区高三语文二模试题汇编之文言文一(学生版)
- 天津市宝坻区高中2025届高三质量监测(三)英语试题试卷含解析
- 中央司法警官学院《数学建模与科学计算》2023-2024学年第一学期期末试卷
- 第四课 人民民主专政的社会主义国家 课件-高考政治一轮复习统编版必修三政治与法治
- 2025年郑州黄河护理职业学院单招职业适应性考试题库带答案
- (完整版)特殊教育与随班就读
- 旋流风口RA-N3选型计算表格
- 《VB程序结构基础》课件教程
- 个人房屋租赁合同标准版范本
- DBJ50-T-157-2022房屋建筑和市政基础设施工程施工现场从业人员配备标准
- 2024年中考模拟试卷地理(湖北卷)
- 大学生心理健康教育知到智慧树章节测试课后答案2024年秋长春医学高等专科学校
- 慢肾风中医辨证施护
- 危险化学品工伤事故形势及典型事故案例
评论
0/150
提交评论