当前位置:首页 >> 互联网 >>

zigbee网络建立与加入_图文

协议栈如何辨别设备类型?

在上图中可以看到协调器建立网络的步骤以及路由器和终端加入网络的过 程,但协议栈究竟如何区分设备类型,仅从图中无法看出。 在 ZDApp.c 文件中, ZDOInitDevice( uint16 startDelay ) 函数调用了 ZDAppDetermineDeviceType()函数,函数原型: /********************************************************************* * @fn * @brief * * * * * * * * @param * @return */ void ZDAppDetermineDeviceType( void ) { if ( zgDeviceLogicalType == ZG_DEVICETYPE_COORDINATOR ) { devStartMode = MODE_HARD; // Start as a coordinator none none Looks at zgDeviceLogicalType and determines what type of device to start. The types are: ZG_DEVICETYPE_COORDINATOR ZG_DEVICETYPE_ROUTER ZG_DEVICETYPE_ENDDEVICE ZDAppDetermineDeviceType() Determines the type of device to start.

ZDO_Config_Node_Descriptor.LogicalType NODETYPE_COORDINATOR; } else { if ( zgDeviceLogicalType == ZG_DEVICETYPE_ROUTER ) ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_ROUTER; else if ( zgDeviceLogicalType == ZG_DEVICETYPE_ENDDEVICE ) ZDO_Config_Node_Descriptor.LogicalType = NODETYPE_DEVICE;

=

// If AIB_apsUseExtendedPANID is set to a non-zero value by commissioning // The device shall do rejoin the network. Otherwise, do normal join if ( nwk_ExtPANIDValid( AIB_apsUseExtendedPANID ) == false ) { devStartMode = MODE_JOIN; } else { devStartMode = MODE_REJOIN; } } // Assume joining

} 该 函 数 中 的 关 键 句 是 if(zgDeviceLogicalType ==

ZG_DEVICETYPE_COORDINATOR) ,其中,在 ZGlobals,c 文件中有如下定 义 : zgDeviceLogicalType = DEVICE_LOGICAL_TYPE 而在

ZGlobals.h 文 件 中 有 如 下 宏 定 义 : #define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_COORDINATOR,最终在 sapi.h 文件中,出现如下宏定义: #define ZG_DEVICETYPE_COORDINATOR 0x00 ,这样看来似乎绕了

一圈又绕回了原点,其实并非如此,在 ZGlobals.h 文件中完整的宏定义代码: // Default Device Logical Type #if !defined ( DEVICE_LOGICAL_TYPE ) #if ( ZG_BUILD_COORDINATOR_TYPE ) // If capable, default to coordinator #define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_COORDINATOR #elif ( ZG_BUILD_RTR_TYPE ) #define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_ROUTER #elif ( ZG_BUILD_ENDDEVICE_TYPE ) // Must be an end device #define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_ENDDEVICE #else #error ZSTACK_DEVICE_BUILD must be defined as something! #endif #endif

可以看出,设备是协调器,路由器还是终端,都是在这里区别开来的。区别 的关键就变成了条件编译语句中的判断条件(高亮显示的三个语句),还是该头 文件下,有以下条件编译: // Setup to work with the existing (old) compile flags #if !defined ( ZSTACK_DEVICE_BUILD ) #if defined ( ZDO_COORDINATOR ) #define ZSTACK_DEVICE_BUILD (DEVICE_BUILD_COORDINATOR) #elif defined ( RTR_NWK ) #define ZSTACK_DEVICE_BUILD (DEVICE_BUILD_ROUTER) #else #define ZSTACK_DEVICE_BUILD (DEVICE_BUILD_ENDDEVICE) #endif #endif // Use the following to macros to make device type decisions #define ZG_BUILD_COORDINATOR_TYPE DEVICE_BUILD_COORDINATOR) #define ZG_BUILD_RTR_TYPE (ZSTACK_DEVICE_BUILD & (ZSTACK_DEVICE_BUILD &

(DEVICE_BUILD_COORDINATOR | DEVICE_BUILD_ROUTER)) #define ZG_BUILD_ENDDEVICE_TYPE DEVICE_BUILD_ENDDEVICE) #define ZG_BUILD_RTRONLY_TYPE DEVICE_BUILD_ROUTER) (ZSTACK_DEVICE_BUILD == (ZSTACK_DEVICE_BUILD &

#define ZG_BUILD_JOINING_TYPE

(ZSTACK_DEVICE_BUILD &

(DEVICE_BUILD_ROUTER | DEVICE_BUILD_ENDDEVICE))

#if ( ZSTACK_DEVICE_BUILD == DEVICE_BUILD_COORDINATOR ) #define ZG_DEVICE_COORDINATOR_TYPE 1 #else #define ZG_DEVICE_COORDINATOR_TYPE (zgDeviceLogicalType == ZG_DEVICETYPE_COORDINATOR) #endif

#if

(

ZSTACK_DEVICE_BUILD

==

(DEVICE_BUILD_ROUTER

|

DEVICE_BUILD_COORDINATOR) ) #define ZG_DEVICE_RTR_TYPE 1 #else #define ZG_DEVICE_RTR_TYPE || ((zgDeviceLogicalType (zgDeviceLogicalType == ==

ZG_DEVICETYPE_COORDINATOR) ZG_DEVICETYPE_ROUTER)) #endif

#if ( ZSTACK_DEVICE_BUILD == DEVICE_BUILD_ENDDEVICE ) #define ZG_DEVICE_ENDDEVICE_TYPE 1 #else

#define

ZG_DEVICE_ENDDEVICE_TYPE

(zgDeviceLogicalType

==

ZG_DEVICETYPE_ENDDEVICE) #endif

#define ZG_DEVICE_JOINING_TYPE ZG_DEVICETYPE_ROUTER) ZG_DEVICETYPE_ENDDEVICE)) ||

((zgDeviceLogicalType == (zgDeviceLogicalType ==

#if ( ZG_BUILD_RTR_TYPE ) #if ( ZG_BUILD_ENDDEVICE_TYPE ) #define ZSTACK_ROUTER_BUILD ZG_DEVICE_RTR_TYPE) #else #define ZSTACK_ROUTER_BUILD #endif #else #define ZSTACK_ROUTER_BUILD #endif 0 1 (ZG_BUILD_RTR_TYPE &&

#if ( ZG_BUILD_ENDDEVICE_TYPE ) #if ( ZG_BUILD_RTR_TYPE ) #define ZSTACK_END_DEVICE_BUILD

(ZG_BUILD_ENDDEVICE_TYPE && ZG_DEVICE_ENDDEVICE_TYPE) #else #define ZSTACK_END_DEVICE_BUILD #endif #else #define ZSTACK_END_DEVICE_BUILD #endif 可以看到该段代码的解释 Use the following to macros to make device type decisions,使用下列宏来决定设备类型。其实,整个文件都是一些宏定义和条 件编译语句,都是涉及如何区别设备类型,但鉴于代码太难读,又是初学,所以 无法再往下分析了。 总 之 , ZDOInitDevice( uint16 startDelay ) 函 数 调 用 0 1

ZDAppDetermineDeviceType()函数之后就已经确定了设备类型。

今天发现,设备类型的最终定义在 Tools 文件下的三个配置文件中,

图1 在 f8wCoord.cfg、 f8wEndev.cfg 和 f8wRouter.cfg 三个配置文件中分别定义 了协调器、路由器和终端各自所具有的的功能。协调器中有: /* Coordinator Settings */

-DZDO_COORDINATOR -DRTR_NWK 路由器: /* Router Settings */ -DRTR_NWK

// Coordinator Functions // Router Functions

// Router Functions

终端配置文件中则没有相应代码。同时,我们发现在上文绿色底纹代码段中涉及 ZDO_COORDINATOR 的。 f8wCoord.cfg、 f8wEndev.cfg、 f8wRouter.cfg: 各类型设备具体的编译选项, 由 Workspace 下拉菜单中的选项决定使用那一个,从而区分出设备类型。若要 给某一个设备类型的所有项目增加编译选项, 简单在链接文件中适当位置增加一 行,若要关闭某一编译选项,可在一行的左边放置"//"来注释掉。 另外,在 下拉框中,当 RTR_NWK 等常量,正是在上述三个配置文件中定义

我们选择一种设备类型后,其他类型设备的配置文件就会变灰。如我们选择了 CoordinatorEB,Tools 文件夹就如图 1 所示,也就是说我们在下拉框中选择设 备类型后,协议栈会据此来判断设备类型。 最后,设备启动涉及到 HOLD_AUTO_START、SOFT_START 和

自 动 启 动 模 式 , 不 同 的 模 式 会 选 择 不 同 的 配 置 文 件 f8wCoord.cfg 、
f8wEndev.cfg、f8wRouter.cfg 进行编译,详见《网络设备启动》


相关文章:
zigbee网络建立与加入_图文.doc
zigbee网络建立与加入 - 详细介绍了zigbee网络的建立过程以及节点加入网络的过程... zigbee网络建立与加入_互联网_IT/计算机_专业资料。详细介绍了zigbee网络的建立过程...
ZigBee网络的建立_图文.doc
【基本信息】 【开课部门】 【实验课程】 青软实训 ZigBee 技术应用实验 独立□ 【实验项目】 【项目类型】 【学生姓名】 【专业】 ZigBee 网络建立 基础?...
ZIGBEE配置与组网_图文.ppt
ZIGBEE配置与组网_计算机硬件及网络_IT/计算机_专业资料。zigbee简单的配置与组网...? 它负责发起建立新的网络、设定网络参数、管理网络中的节点 以及存储网络中节点...
第5章 ZigBee网络定位_图文.ppt
11 网络组建及节点入网 按照节点的不同, 有不同的网络组建方法: (l)协调器组建网络 (2)终端节点加入网络 12 ZigBee技术的应用场合 ZigBee的目标是建立一个“...
实验七 ZigBee终端节点加入和离开网络实验_图文.pdf
一个ZigBee网络由一个协调器节 点、多个路由器和多个终端设备节点组成。这个协调器建立一个 ZigBee网络.它是网络上的第一个设备.协调器首先选择一个信道和网 络...
ZigBee无线网络组网及数据传输研究与实现_图文.pdf
3.2设备加入网络 zigBee汇聚节点是建立和配置网络的节点,在整个网络 中只有一个。汇聚节点可以保持间接寻址用的绑定表格,可 以支持关联和执行其他任务。 zigBee路由...
ZigBee网络层_图文.ppt
2 ? ZigBee技术是一种新兴的近距离、低复杂度、低 功耗、低数据速率(小于250...设备加入网络: 设备加入网络功能就是通过与已加入网络的协调者或 路由器设备建立...
ZigBee网络_图文.ppt
中是最为复杂的,是一种特殊 的点到点的网络结构,其路由可以自动建立 和维护...能够兼容之前的 Zigbee2006版本,并且加入了 Zibgeepro 部分,此时 Zig beel联盟...
ZigBee网络的构成_图文.ppt
5.5 ZigBee技术 5.5.3 ZigBee网络的构成 CLH5 CID=4 重庆邮电大学 CID=5...(3)链路建立成功后,主从设备之间即可进行双向的数据或语音通信。 5.7 蓝牙及...
ZigBee网络系统节点硬件设计与实现_图文.pdf
2008 ZigBee 网络系统节点硬件设计与实现吴光荣 , 章剑雄 , 徐向华 1 1 2 (...50 杭州电子科技大学学报 2008 年 建立可靠的链接等功能 。 网络层规定了加入...
ZigBee组网及实时网络状态管理方法的研究_图文.pdf
山东轻工业学院 硕士学位论文 ZigBee组网及实时网络状态管理方法的研究 姓名
KC06121802-q02-Zigbee网络节点网络地址的分配._图文.ppt
器生成的,PANID是可选配置项,用来控制 ZigBee路由器终端节点要加入那个网络。...分配 地址分配 ZigBee网络地址的形成首先,由ZigBee协调器建立一个新的ZigBee网络...
05.ZigBee网络层_图文.ppt
ZigBee协议栈的核心部分在网络层。网络层主要实现节点加入或离开网络、接收或抛弃...网络层属性管理 网络建立与维护 ? 网络层与MAC层比较 MAC层:只考虑本地通信...
第5章_ZigBee技术原理_图文.ppt
第5章_ZigBee技术原理_信息与通信_工程科技_专业资料。第5章 Zigbee技术原理 5.1 概述 5.2 Zigbee网络结构 5.3 IEEE802.15.4通信层 5.4 Zigbee...
ZigBee基础知识讲解_图文.ppt
配置选包括:ZigBee协调器的开始操作,加入一个现有的网络等。 (2)开始一个新网络(starting a new network)。具有建立一个新网络的能力。 (3)加入和离开一个...
现代通信技术实验ZigBee星状网络实验_图文.doc
现代通信技术实验ZigBee星状网络实验_计算机硬件网络_IT/计算机_专业资料。...使协调器建立一 个 ZigBee 网络,其他 终端节点连接到网络时,直接以协调器节点...
ZigBee网络的路由协议研究_图文.pdf
图l ZigBee协议栈 1 ZigBee网络描述及建立ZigBee支持星形(S
基于ZigBee的无线传感器网络研究_图文.pdf
ZigBee协调器,即ZigBee的个域网协调器,是网络 建立的起点,负责网络的初始化,确定个域网标识符和 网络工作的物理信道,并统筹短地址的分配。ZigBee 协调器必须是全...
zigbee网络建立过程.pdf
zigbee网络建立过程_信息与通信_工程科技_专业资料。zigbee网络建立过程zigbee网络建立过程zigbee网络建立过程 项目日志Z-STACK网络建立过程--芦苇地带 Page 1 of ...
zigbee实验_图文.doc
组成,各自功能如下: (1)家庭内部网络采用 ZigBee 无线技术实现内部网络组建。...无线传感器网络组网过程包括两个步骤 :主节点举起网络和子节点 申请加入网络,单个...