zigbee设备启动分析资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设备启动准备
一、设备类型选择:
通过Workspace下拉框选择设备的类型:
图1:协调器
图2:路由器
图3:终端节点
协议栈设备类型:
#define ZG_DEVICETYPE_COORDINATOR 0x00
#define ZG_DEVICETYPE_ROUTER 0x01
#define ZG_DEVICETYPE_ENDDEVICE 0x02
#define ZG_DEVICETYPE_SOFT 0x03
ZG_DEVICETYPE_SOFT说明:可选设备类型。可以成为路由器、也可以成为协调器,由后面的程序决定。
初始化:
对于DEVICE_LOGICAL_TYPE的值各逻辑类型设备初始化如下:
// Device Logical Type
//zgDeviceLogicalType = DEVICE_LOGICAL_TYPE
在ZGlobals.h文件中设备逻辑类型进行了初始化:
#if defined ( SOFT_START )
#define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_SOFT //可选择类型
#elif defined( ZDO_COORDINATOR )
#define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_COORDINATOR //协调器
#elif defined (RTR_NWK)
#define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_ROUTER //路由器
#else
#define DEVICE_LOGICAL_TYPE ZG_DEVICETYPE_ENDDEVICE //终端
#endif
说明:如果编译了SOFT_START,则初始化设备逻辑类型(DEVICE_LOGICAL_TYPE)为可选择
类型(ZG_DEVICETYPE_SOFT)即设备可以作为协调器启动创建一个网络或者作为路由器加入一个已经存在的网络。如果没有编译SOFT_START但编译了ZDO_COORDINATOR,则初始化设备逻辑类型(DEVICE_LOGICAL_TYPE)为协调器(ZG_DEVICETYPE_COORDINATOR),即设备作为路由器启动并创建一个网络。如果没有编译SOFT_START和ZDO_COORDINATOR,但编译了RTR_NWK,则初始化设备的逻辑类型为路由器,即设备作为路由器启动并加入网络。其他情况则初始化为终端节点并加入网络。
SOFT-START说明:
SOFT_START is a compile option that allows the device to start as a coordinator if one isn't found.
设备启动模式(devStartMode)、设备状态(devState)
启动模式:表示了设备是以何种方式启动
typedef enum
{
MODE_JOIN, //加入
MODE_RESUME, //恢复
//MODE_SOFT, //暂不支持
MODE_HARD, //创建网络
MODE_REJOIN //重新加入
} devStartModes_t;
说明:MODE_JOIN和MODE_REJOIN 是路由器和终端使用的选项,用来加入或者重新
加入网络。而MODE_HARD是协调器使用的选项。用来创建一个网络。而MODE_RESUME 是恢复设备原来的状态。
设备状态标识了设备此时的状态:
typedef enum
{
DEV_HOLD, // Initialized - not started automatically
DEV_INIT, // Initialized - not connected to anything
DEV_NWK_DISC, // Discovering PAN's to join
DEV_NWK_JOINING, // Joining a PAN
DEV_NWK_REJOIN, // ReJoining a PAN, only for end devices
DEV_END_DEVICE_UNAUTH, // Joined but not yet authenticated by trust center
DEV_END_DEVICE, // Started as device after authentication
DEV_ROUTER, // Device joined, authenticated and is a router
DEV_COORD_STARTING, // Started as Zigbee Coordinator
DEV_ZB_COORD, // Started as Zigbee Coordinator
DEV_NWK_ORPHAN // Device has lost information about its parent..
} devStates_t;
初始化(以协调器为例)
devStartMode和devState的初始化,ZDApp.c中
启动模式(devStartModes_t)
#if defined( ZDO_COORDINATOR ) && !defined( SOFT_START )
// Set the default to coodinator
devStartModes_t devStartMode = MODE_HARD;
#else
// Assume joining
devStartModes_t devStartMode = MODE_JOIN;
#endif
说明:如果编译了ZDO_COORDINATOR并且没有编译SOFT_START,则初始化设备启
动模式(devStartMode)为MODE_HARD,即协调器创建网络。其他情况初始化设备启动模式(devStartMode)为MODE_JOIN,即设备加入网络。.
以上可以看出,如果编译了SOFT_START。首先并不是创建网络,而是先加入网络。如果网络加入失败,则考虑创建一个网络。
设备状态(devState):
#if defined( HOLD_AUTO_START )
devStates_t devState = DEV_HOLD;// Initialized - not started automatically
#else
devStates_t devState = DEV_INIT;// Initialized - not connected to anything
#endif
说明:如果编译了HOLD_AUTO_START,则设备状态(devState)为DEV_HOLD;否则设备状态(devState)为DEV_INIT。
Hold Auto Start说明:
A device will automatically start trying to form or join a network . If the device should wait on a timer or other external event before joining, then
HOLD_AUTO_START must be defined. In order to manually start the join process at a later time.