关联AssociatedDevList表的操作
来源:互联网 发布:铝框拉杆箱选购 知乎 编辑:程序博客网 时间:2024/06/05 12:07
5)、关联表的操作
AssociatedDevList 表为与此设备相关联的设备表,并不是 ZigBee 网络中的所有设备
信息表。表中信息的 IEEE 地址是唯一的,每个设备加入它的父节点时会在表中添加一个记
录,但是子节点断电离开网络时不会删除该条记录,如果有多个子节点,频繁更换父节点会
造成 AssociatedDevList 表满或溢出,使其它子节点无法加入该父节点,因此需要及时的删
除一些已离开的子节点记录。
5.1、关联表的定义
在 nwk_globals.C 文件中有对关联表的定义,代码如下:
#if defined(RTR_NWK)
// Statically defined Associated Device List
associated_devices_t AssociatedDevList;
#endif
5.2、关联表的结构
在 AssocList.h 文件中有对关联表结构 associated_devices_t 的定义,代码如下:
typedef struct
{
UINT16 shortAddr;// 关联设备的短地址
uint16 addrIdx;// 地址管理时的索引
byte nodeRelation;// 关联设备的描述
byte devStatus;// 设备的状态值
byte assocCnt; // 联接次数,相同 IEEE 地址连接时会加 1
linkInfo_t linkInfo; // 连接信息
} associated_devices_t;
devStatus 可以设置为以下的值
#define DEV_LINK_STATUS 0x01 // link is in-active ? 活动联接
#define DEV_LINK_REPAIR0x02 // link repair in progress ?正在修复联接
#define DEV_SEC_INIT_STATUS 0x04 // security init 初后的安全
#define DEV_SEC_AUTH_STATUS 0x08 // security authenticated 验正过的安全
nodeRelation 可以设置为以下的值
// Node Relations
#define PARENT0//父节点 一般指协调器
#define CHILD_RFD1//简功能节点 一般指终端
#define CHILD_RFD_RX_IDLE2//简功能节点(空闭进 RF 接收开启) 一般指终端
#define CHILD_FFD3//全功能节点 一般指路由器
#define CHILD_FFD_RX_IDLE4//全功能节点(空闭进 RF 接收开启) 一般指路由器
#define NEIGHBOR5//邻居设备
#define OTHER6//其它设备
#define NOTUSED0xFF //没有使用
在 ZComDef.h 文件中有对 linkInfo_t 的定义,代码如下:
typedef struct
{
uint8 txCost;
uint8 rxCost;
// counter of transmission success/failures
// average of received rssi values
uint8 inKeySeqNum; // security key sequence number
uint32 inFrmCntr;
// security frame counter..
} linkInfo_t;
5.3、关联表记录的查看
可以直接从 AssociatedDevList数组中查看关联设备的信息,比如:
for (uint8 x=0;x<NWK_MAX_DEVICES;x++)
{
byte nr = AssociatedDevList.nodeRelation;
…
5.4、关联表记录的删除
关联表的删除可以有多种方法,可以用 AssocList.h 文件中的函数,也可以直接在 NV
区中删除,下面只对 AssocList.h 文件中的函数部分举例说明,代码如下:
AddrMgrEntry_t addrEntry;
NLME_LeaveReq_t req;
uint8 i = Z_EXTADDR_LEN + 1;
// Set up device info
addrEntry.user = ADDRMGR_USER_DEFAULT;
addrEntry.index = index;
if (AddrMgrEntryGet( &addrEntry ))
{
for (i = 0; i < Z_EXTADDR_LEN; i++ )
{
if ( addrEntry.extAddr != 0 ){ break;}
}
}
if(i < Z_EXTADDR_LEN){
// Remove device
req.extAddr = addrEntry.extAddr;
req.removeChildren = TRUE;
req.rejoin = TRUE;
req.silent = FALSE;
NLME_LeaveReq( &req );
}else{
AssocRemove(addrEntry.extAddr);
ZDApp_NVUpdate();
}
AssociatedDevList 表为与此设备相关联的设备表,并不是 ZigBee 网络中的所有设备
信息表。表中信息的 IEEE 地址是唯一的,每个设备加入它的父节点时会在表中添加一个记
录,但是子节点断电离开网络时不会删除该条记录,如果有多个子节点,频繁更换父节点会
造成 AssociatedDevList 表满或溢出,使其它子节点无法加入该父节点,因此需要及时的删
除一些已离开的子节点记录。
5.1、关联表的定义
在 nwk_globals.C 文件中有对关联表的定义,代码如下:
#if defined(RTR_NWK)
// Statically defined Associated Device List
associated_devices_t AssociatedDevList;
#endif
5.2、关联表的结构
在 AssocList.h 文件中有对关联表结构 associated_devices_t 的定义,代码如下:
typedef struct
{
UINT16 shortAddr;// 关联设备的短地址
uint16 addrIdx;// 地址管理时的索引
byte nodeRelation;// 关联设备的描述
byte devStatus;// 设备的状态值
byte assocCnt; // 联接次数,相同 IEEE 地址连接时会加 1
linkInfo_t linkInfo; // 连接信息
} associated_devices_t;
devStatus 可以设置为以下的值
#define DEV_LINK_STATUS 0x01 // link is in-active ? 活动联接
#define DEV_LINK_REPAIR0x02 // link repair in progress ?正在修复联接
#define DEV_SEC_INIT_STATUS 0x04 // security init 初后的安全
#define DEV_SEC_AUTH_STATUS 0x08 // security authenticated 验正过的安全
nodeRelation 可以设置为以下的值
// Node Relations
#define PARENT0//父节点 一般指协调器
#define CHILD_RFD1//简功能节点 一般指终端
#define CHILD_RFD_RX_IDLE2//简功能节点(空闭进 RF 接收开启) 一般指终端
#define CHILD_FFD3//全功能节点 一般指路由器
#define CHILD_FFD_RX_IDLE4//全功能节点(空闭进 RF 接收开启) 一般指路由器
#define NEIGHBOR5//邻居设备
#define OTHER6//其它设备
#define NOTUSED0xFF //没有使用
在 ZComDef.h 文件中有对 linkInfo_t 的定义,代码如下:
typedef struct
{
uint8 txCost;
uint8 rxCost;
// counter of transmission success/failures
// average of received rssi values
uint8 inKeySeqNum; // security key sequence number
uint32 inFrmCntr;
// security frame counter..
} linkInfo_t;
5.3、关联表记录的查看
可以直接从 AssociatedDevList数组中查看关联设备的信息,比如:
for (uint8 x=0;x<NWK_MAX_DEVICES;x++)
{
byte nr = AssociatedDevList.nodeRelation;
…
5.4、关联表记录的删除
关联表的删除可以有多种方法,可以用 AssocList.h 文件中的函数,也可以直接在 NV
区中删除,下面只对 AssocList.h 文件中的函数部分举例说明,代码如下:
AddrMgrEntry_t addrEntry;
NLME_LeaveReq_t req;
uint8 i = Z_EXTADDR_LEN + 1;
// Set up device info
addrEntry.user = ADDRMGR_USER_DEFAULT;
addrEntry.index = index;
if (AddrMgrEntryGet( &addrEntry ))
{
for (i = 0; i < Z_EXTADDR_LEN; i++ )
{
if ( addrEntry.extAddr != 0 ){ break;}
}
}
if(i < Z_EXTADDR_LEN){
// Remove device
req.extAddr = addrEntry.extAddr;
req.removeChildren = TRUE;
req.rejoin = TRUE;
req.silent = FALSE;
NLME_LeaveReq( &req );
}else{
AssocRemove(addrEntry.extAddr);
ZDApp_NVUpdate();
}
0 0
- 关联AssociatedDevList表的操作
- Zigbee关联表AssociatedDevList的操作
- Zigbee关联表AssociatedDevList的操作
- zigbee关联表AssociatedDevList
- zigbee关联表AssociatedDevList
- zigbee 关联表AssociatedDevList
- mybatis关联表的操作
- MongoDB的多表关联操作
- abap中内表和表的关联操作
- 关联容器的操作
- 数据库的关联操作
- hibernate表关联操作
- 关联关系的级联操作
- 关联关系的级联操作
- 关联关系的级联操作
- Hibernate入门BLOG[十一、Hibernate表关联的级联操作]
- Zend Framework的DB处理-表关联操作
- ThinkPHP学习笔记(十八)数据库表的关联操作
- 运行程序是内存溢出的情况:OutOfMemoryError: PermGenspace
- IOS之百度翻译API使用
- wince5.0下载链接
- 黑马程序员---【OC语言】08Foundation框架
- IOS本地通知和推送通知
- 关联AssociatedDevList表的操作
- JPA入门例子(采用JPA的hibernate实现版本)
- ListView详解
- pkg_resources.DistributionNotFound 错误
- 简单的 读取文件 InputStream 与 写出文件 OutputStream
- 动态设置CCNode的zOrder
- 房子也许是租来的,但生活不是
- 黑马程序员-----------java语法知识
- Linux查看glibc版本信息