zoukankan      html  css  js  c++  java
  • ZigBee绑定细节

    ZigBee中的绑定由APS层来管理,除了绑定表管理外,APS层还有组表管理、快速地址查找等服务功能。应用层不能直接调用APS层中的数据服务来传输数据,只能通过AF层封装的AD_DataRequest函数来实现数据传输。

    看了许多相关的文档,里面说及到,绑定服务在两个不同节点的简单描述符中,定义相同的簇ID,且方向相反(一个在输出簇,一个在输入簇),才能成功建立绑定。

    APS绑定表的大小受限于静态RAM的大小,由f8wConfig.cfg中的参数来指定。

    image

    默认配置中,有四个绑定表条目,每个条目中,可以有4个簇ID。

    要配置使用绑定表,需要定义REFLECTOR宏(在f8wconfig.cfg中配)

    绑定表操作

    对一个表的操作,无非就是增删改查。

    1. 增加一个绑定表条目
    
    函数原型:
    BindingEntry_t *bindAddEntry( byte srcEpInt,
                                  zAddrType_t *dstAddr, byte dstEpInt,
                                  byte numClusterIds, uint16 *clusterIds )
    
    srcEpInt:源端点
    dstAddr:目的地址
    dstEpInt:目的端点
    numClusterIds:簇列表数目
    clusterIds:簇列表
    
    成功返回指向新加入绑定表的指针,失败返回NULL
    
    2.移除一个绑定表条目
    
    函数原型:
    byte bindRemoveEntry( BindingEntry_t *pBind )
    pBind:指向想要删除的绑定表指针
    
    成功返回TRUE
    
    3.移除绑定条目中的簇命令
    
    函数原型:
    byte bindRemoveClusterIdFromList( BindingEntry_t *entry, uint16 clusterId )
    entry:绑定表的入口
    clusterID:待删除的簇ID
    
    成功返回TRUR,至少有一个对于的簇ID。如果没有的话,返回FALSE
    
    4.增加绑定表条目中的簇
    
    函数原型:
    byte bindAddClusterIdToList( BindingEntry_t *entry, uint16 clusterId )
    entry:绑定表入口
    clusterID:需要添加的簇ID
    
    成功返回TRUE,失败返回FALSE
    
    5.找到一个已经存在的源端点到目的地址的绑定记录
    
    函数类型:
    BindingEntry_t *bindFindExisting( byte srcEpInt,
                                      zAddrType_t *dstAddr, byte dstEpInt )
    
    srcEpInt:源端点
    dstAddr:目的地址类型
    dstEInt:目的地址端点号

    使用Flash时,需要设置编译选项NV_RESTORE[f8wConfig.cfg],保存绑定表,建议使用BindWriteNV函数。

    组管理

    组用来将一系列节点集合到一个单地址实体的方式,向这个地址发送数据请求,请求能够达到组中的每个节点。

     image

    第一个结构体为组结构标书,第二个结构体为组链表描述。

    组操作函数有

    将一个端点加入一个组:extern ZStatus_t aps_AddGroup( uint8 endpoint, aps_Group_t *group );

    使用方法:

    定义一个组:aps_Group_t  SampleApp_Group;

    初始化组信息:

            SampleApp_Group.ID = SAMPLEAPP_FLASH_GROUP;
                 osal_memcpy( SampleApp_Group.name, "Group 1", 7  );

    将端点加入一个组:

            aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );

    从组表中根据端点和组ID找到组索引

             aps_Group_t *grp;
                  grp = aps_FindGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP );

    根据组ID,移除其中的端点

            aps_RemoveGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP );

     

     

     

     

    快速地址查找

    APS提供函数用来快速地址转换,在IEEE和网络地址之间做转换。

    uint8 APSME_LookupExtAddr( uint16 nwkAddr, uint8* extAddr ); 基于网络地址获得IEEE 地址

    uint8 APSME_LookupNwkAddr( uint8* extAddr, uint16* nwkAddr ); 基于IEEE地址获得NWK地址

  • 相关阅读:
    DB2
    Data Queue
    QMQY
    CMD(SA400 Command)
    Software development process
    CSS display样式
    CSS行高line-height解释
    CS和CS3知识点
    HTML图片<img>标签空白解决方法
    CS清除浮动
  • 原文地址:https://www.cnblogs.com/cherishui/p/3892917.html
Copyright © 2011-2022 走看看