我是靠谱客的博主 阔达红牛,最近开发中收集的这篇文章主要介绍zigbee协议栈中常见的名词,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.NWK_MAX_DEVICES

1.支持的设备数,关键宏:NWK_MAX_DEVICES

NWK_MAX_DEVICES 定义了关联表的最大设备数,包含了一个父节点和 NWK_MAX_DEVICE_LIST 个子节点。

关联表:AssociatedDevList[ ] :所有入网的设备(EndDevice和Router)都会存储在这里面。NWK_MAX_DEVICES 每增加1,会占用28字节的RAM。关联表需要定期维护,删除不在网络中的设备,否则关联表满了之后,就无法再增加设备

NWK_MAX_DEVICE_LIST :支持直连的子节点数。

NWK_MAX_ROUTERS :从字面意思看,是支持直连的Router数。但是,这样理解你就掉坑了!!!新协议栈,这个宏是无用的!!!

在研究深度和广度的过程中,还有像:MAX_NODE_DEPTH、CskipRtrs[]、CskipChldrn[],这些,都是被遗弃的,没有用了。新的协议栈,支持设备数就是NWK_MAX_DEVICES

,只有限定ED和Router的总数。

转自:https://blog.csdn.net/ruson525/article/details/78920436

2.关联表的操作

   AssociatedDevList 表为与此设备相关联的设备表,并不是 ZigBee 网络中的所有设备信息表。表中信息的 IEEE 地址是唯一的,每个设备加入它的父节点时会在表中添加一个记录,但是子节点断电离开网络时不会删除该条记录,如果有多个子节点,频繁更换父节点会造成 AssociatedDevList 表满或溢出,使其它子节点无法加入该父节点,因此需要及时的删除一些已离开的子节点记录。

5.1、关联表的定义
在 nwk_globals.C 文件中有对关联表的定义,代码如下:
#if defined(RTR_NWK)
// Statically defined Associated Device List
associated_devices_t AssociatedDevList[NWK_MAX_DEVICES];
#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_REPAIR  0x02 // link repair in progress ?正在修复联接
#define DEV_SEC_INIT_STATUS 0x04 // security init 初后的安全
#define DEV_SEC_AUTH_STATUS 0x08 // security authenticated 验正过的安全


nodeRelation 可以设置为以下的值
// Node Relations

#define PARENT  0//父节点 一般指协调器
#define CHILD_RFD  1//简功能节点 一般指终端
#define CHILD_RFD_RX_IDLE  2//简功能节点(空闭进 RF 接收开启) 一般指终端
#define CHILD_FFD  3//全功能节点 一般指路由器
#define CHILD_FFD_RX_IDLE  4//全功能节点(空闭进 RF 接收开启) 一般指路由器
#define NEIGHBOR  5//邻居设备
#define OTHER  6//其它设备
#define NOTUSED  0xFF //没有使用

在 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[NWK_MAX_DEVICES]数组中查看关联设备的信息,比如:
for (uint8 x=0;x
{
byte nr = AssociatedDevList[x].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();
}

3.邻居表

关联表是用来保存父子设备的

邻居表用来保存邻居设备

 

最后

以上就是阔达红牛为你收集整理的zigbee协议栈中常见的名词的全部内容,希望文章能够帮你解决zigbee协议栈中常见的名词所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部