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

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

ID:37714144

大小:19.66 KB

页数:5页

时间:2019-05-29

上传者:U-2437
ZigBee学习之绑定表管理函数详解——ZStack API解读_第1页
ZigBee学习之绑定表管理函数详解——ZStack API解读_第2页
ZigBee学习之绑定表管理函数详解——ZStack API解读_第3页
ZigBee学习之绑定表管理函数详解——ZStack API解读_第4页
ZigBee学习之绑定表管理函数详解——ZStack API解读_第5页
资源描述:

《ZigBee学习之绑定表管理函数详解——ZStack API解读》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

ZigBee学习之绑定表管理函数详解——ZStackAPI解读  2010-12-2914:05:20|  分类: ZigBee技术 |  标签:入口  终端  uint8  uint16  函数  |字号 订阅应用支持子层(APS) 应用支持子层提供如下管理功能: ·邦定表管理 ·组表管理 ·快速地址查找 除了管理功能外,APS还提供数据服务,只是应用不能访问数据服务。应用需要通过AF数据接口AF_DataRequest()来发送数据。如果要使用邦定表函数需要包含BindingTable.h头文件。 邦定表管理 请注意,绑定服务只能在“互补”设备之间建立。那就是,只有分别在两个节点的简单描述结构体(simpledescriptorstructure)中,同时注册了相同的命令标识符(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 typedefstruct { uint16srcIdx;//AddressManagerindex uint8srcEP; uint8dstGroupMode;//Destinationaddresstype;0-Normaladdressindex,1- //Groupaddress uint16dstIdx;//Thisfieldisusedinbothmodes(groupandnon-group)to //saveNVandRAMspace //dstGroupMode=0-AddressManagerindex //dstGroupMode=1-GroupAddress uint8dstEP; uint8numClusterIds; uint16clusterIdList【MAX_BINDING_CLUSTER_IDS】; //Don‘tuseMAX_BINDING_CLUSTERS_IDwhen //usingtheclusterIdListfield.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,bytesrcEpInt, zAddrType_t*dstAddr,bytedstEpInt, bytenumClusterIds,uint16*clusterIds); 在邦定表中增加一个入口。由于每个入口可以有多个clusterID,所以此函数有可能仅仅在已有邦定条目上增加clusterID srcAddr-邦定记录源地址。为Addr16Bit或者Addr64Bit的addr数据结构 srcEpInt-邦定记录源终端 dstAddr-邦定记录目的地址,为Addr16Bit,Addr64Bit或AddrGroupaddrMode,若为AddrGroup则组ID(groupID)填充到addr.shortAddr dstEpInt-邦定记录目标终端,若dstAddr为组地址,则忽略此位 clusterIds-指向要增加的clusterID(16位)列表。 返回值:BindingEntry_t-指向一条新加入的邦定入口 bytebindRemoveEntry(BindingEntry_t*pBind); pBind-指向邦定表中一个入口的指针 bytebindRemoveClusterIdFromList(BindingEntry_t*entry,uint16clusterId); 从已存在的邦定表入口的clusterID列表中移除一个clusterID。如果至少移除了一个clusterID则返回真。此函数不检查参数的正确性。 entry-指向邦定表的指针 clusterId-要移除的16位的clusterID bytebindAddClusterIdToList(BindingEntry_t*entry,uint16clusterId); 是上面那个函数的反操作函数 voidbindRemoveDev(zAddrType_t*Addr); 移除参数指定的所有邦定表入口,一旦Addr匹配了源地址或者目的地址,则对应的入口将被删除 voidbindRemoveSrcDev(zAddrType_t*srcAddr,uint8ep); 功能同上,只是限定了终端和源地址的匹配项目 voidbindUpdateAddr(uint16oldAddr,uint16newAddr); 交换邦定表中的短地址,所有oldAddr将被newAddr取代。  BindingEntry_t*bindFindExisting(zAddrType_t*srcAddr,bytesrcEpInt, zAddrType_t*dstAddr,bytedstEpInt); 按指定参数查找一个已存在的邦定表入口。若找到则返回指向此邦定表入口的指针,否则返回NULL。 bytebindIsClusterIDinList(BindingEntry_t*entry,uint16clusterId); 检查此clusterID是否在簇ID列表中。如果在列表中则返回真。 邦定表统计函数 bytebindNumBoundTo(zAddrType_t*devAddr,bytedevEpInt,bytesrcMode); 计算符合条件的邦定表入口数目。返回找到的邦定表入口数目。 devAddr-要查找的邦定表地址 devEpInt-终端 srcMode TRUE查找源地址,FALSE查找目的地址 uint16bindNumOfEntries(void); 返回邦定表中的条目数,以cluster计数。 voidbindCapacity(uint16*maxEntries,uint16*usedEntries); 返回邦定表的可能最大数目,和在用的最大数目,以入口记录计数。 maxEntries-指向最大入口数目的变量,绑定表的最大入口可以通过NWK_MAX_BINDING_ENTRIES【f8wConfig.cfg】更改 usedEntries-指向在用的入口数目的变量 邦定表的非易失性储存 用这些API需要首先设置编译选项NV_RESTORE【f8wConfig.cfg】,推荐用户使用BindWriteNV函数,因为bindingNV初始化和读取在设备启动的时候会自动执行。 voidBindWriteNV(void); 把绑定表写入非易失性储存器,如果用户应用改变了邦定表则可以调用此函数。如果邦定表通过ZDO更新,则ZDO会调用此函数,用户应用就不需调用了。 组表管理 APS组表是由分配的RAM【osal_mem_alloc()】定义得链表,因此当组表增加时,OSAL堆也将增加。表定义在nwk_globals.c,通过调整APS_MAX_GROUPS【f8wConfig.cfg】来改变组表的最大大小。用这些API需要包含aps_groups.h头文件。 组表结构体 组:组是用来将一系列节点集合到一个单地址实体的方式。一个数据请求能够到达组中的每个节点。在Zigbee协议中组是可选配置,但是在某些剖面中是必选的,比如家庭自动化剖面。组关注的是一系列设备同时执行一个行为。 typedefstruct { uint16ID;//Uniquetothistable uint8name【APS_GROUP_NAME_LEN】;//Humanreadablenameofgroup }aps_Group_t; ID-16位的组ID  name-文本组名(人类语言)APS_GROUP_NAME_LEN为16且不可更改。 组表入口-apsGroupItem_t 组表记录(入口) typedefstructapsGroupItem { structapsGroupItem*next; uint8endpoint; aps_Group_tgroup; }apsGroupItem_t; next-指向组表的下一个入口(组表为链表结构),推荐使用组表查找和维护函数来遍历组表。 endpoint-接受消息的终端 group-组ID和组名 组表维护函数 ZStatus_taps_AddGroup(uint8endpoint,aps_Group_t*group); 往组表中添加一个组。先定义aps_Group_t,然后填充这个结构,最后调用此函数来添加。若NV_RESTORE使能,则函数将更新保存到非易失性储存。 返回值:成功则返回ZSuccess,否则返回错误,错误可以是:ZApsDuplicateEntry,ZApsTableFull,ZMemError【ZComDef.h】 uint8aps_RemoveGroup(uint8endpoint,uint16groupID); 移除一个组,若NV_RESTORE使能,则函数将更新保存到非易失性储存。 voidaps_RemoveAllGroup(uint8endpoint); 按给定的参数,移除终端的所有组。 组表查询函数 aps_Group_t*aps_FindGroup(uint8endpoint,uint16groupID); endpoint-将接收消息的终端 返回值:指向组元件的指针 uint8aps_FindGroupForEndpoint(uint16groupID,uint8lastEP); 从组ID中查找终端,这个函数用来跳过终端,然后返回下一个终端。 lastEP-返回的终端前要跳过的终端。用APS_GROUPS_FIND_FIRST来指定要查找的第一个终端。 返回终端,或者APS_GROUPS_EP_NOT_FOUND(没有找到或者找到多个) uint8aps_FindAllGroupsForEndpoint(uint8endpoint,uint16*groupList); 得到一个属于一个组的所有终端。 endpoint-要查找的终端 groupList-指向存放终端所有表的空间 uint8aps_CountGroups(uint8endpoint); uint8aps_CountAllGroups(void); 组表的非易失性储存 若定义了编译选项NV_RESTORE,则当组发生改变时会自动储存。组表的NV 初始化和恢复在器件启动时自动执行。若用户应用改变了组表的入口,则必须直接调用Aps_GroupsWriteNV() voidaps_GroupsWriteNV(void) 若是通过正常的组添加,移除函数的调用来更改组表,则不必调用此函数。 快速地址查找 APS提供了一对函数用来做快速地址转换(查找),用这些函数在IEEE和短地址之间作转换。 uint8APSME_LookupExtAddr(uint16nwkAddr,uint8*extAddr); 基于短地址查找IEEE扩展地址。 nwkAddr-拥有的短地址,用来查找扩展地址。 extAddr-指向扩展地址存放的缓存 uint8APSME_LookupNwkAddr(uint8*extAddr,uint16*nwkAddr); 

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭