标签: 杂谈 |
1.1 ZigBee 设备对象(ZDO)
本节列举了ZDO 层提供的所有函数调用,它们对于实现ZigBee 设备功能层(ZDP)定义的所有命令和响应,以及其它能使设备像ZigBee 设备一样运行的功能都是必需的。在概述一节中根据功能将ZDO 的所有API 函数分类,每一类将在以下的章节中进行讨论。
1.1.1 概述
ZDP描述了ZDO内部一般性的ZigBee 设备功能是如何实现的。它定义了使用命令和响应对的设备描述和簇。通过定义命令结构体的信息,ZDP为ZDO和应用程序提供了如下功能:
• 设备网络启动
• 设备和服务发现
• 终端设备绑定、绑定和取消绑定服务
• 网络管理服务
设备发现是为一个ZigBee 设备找到另一个ZigBee 设备的过程。设备发现的一个例子是网络寻址命令,它以广播的形式发送,携带已知的IEEE 地址作为数据的有效载荷。目标设备应该做出响应并告知其网络地址。设备发现能使个人区域网络中的设备发现其它ZigBee 设备提供的服务。它使用各种描述符来指定设备的功能。
典型的绑定用于网络配置期间,即当用户需要将控制设备绑定到被控制设备(比如开关和灯光)时。特别地,终端设备绑定支持一个简化的绑定方法,即使用用户的输入来识别控制或被控制的设备对。绑定和取消绑定服务提供了创建和删除绑定表条目的功能,其中绑定表的功能是记录控制信息及其各自的目的地。
网络管理服务提供了检索设备管理信息的功能,包括网络发现结果、路由表内容、到周边节点的链路质量以及绑定表内容。它还提供了通过断开与个人区域网络设备的联系来控制网络联系的功能。网络管理服务主要是针对用户或调试工具而设计,用来管理网络。以上三种功能的API将在下面的分节中讨论。
1.1.2 ZDO 网络启动
通过默认的ZDApp_Init()(在ZDApp.c中)启动ZigBee 网络中的设备。但是一个应用程序可以跳过这个默认行为。对于控制网路设备启动的应用程序,必须包含HOLD_AUTO_START作为编译选项,还建议包含NV_RESTORE编译选项(以便在NV中保存ZigBee 网络状态)。如果设备包含这些编译标志,将需要调用ZDOInitDevice()来启动网络中的设备。
1.1.2.1 ZDOInitDevice()
启动网络中的设备。这个函数将读取ZCD_NV_STARTUP_OPTION (NV 条目)的值来决定是否恢复设备的网络状态。要调用这个函数,设备必须先编译HOLD_AUTO_START 编译标志。
如果应用程序想要强制加入一个新设备,在调用此函数之前应用程序应该设置ZCD_NV_STARTUP_OPTION NV条目下的ZCD_STARTOPT_DEFAULT_NETWORK_STATE位,加入新设备意味着不再恢复设备的网络状态。使用zgWriteStartupOptions()来设置这些选项[zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);]。
函数原型
uint8 ZDOInitDevice( uint16 startDelay );
参数描述
startDelay—设备启动时延(单位为毫秒)。这一时延增加了一个变化幅度:((NWK_START_DELAY + startDelay) + (osal_rand() & EXTENDED_JOINING_RANDOM_MASK))
返回值
这个函数将返回下面值之一:
ZDO _INITDEV_RESTORED_NET WORK_STATE 该设备的网络状态为恢复状态。
ZDO _INITDEV_NEW_NETWORK_STATE 网络状态初始化。这可能意味ZCD_NV_STARTUP_OPTION说,不能恢复,或它可能意味着,没有任何网络状态恢复。
ZDO _INITDEV_LEAVE_ NOT_STARTED 复位前,网络假发重返选项设置为TRUE。因此,该设备没有在网络中启动(仅一次)。下一次调用该函数它才会启动。
1.1.3 ZDO 信息回调
一个应用程序使用ZDO_RegisterForZDOMsg()登记信息,就能够接收任何无线信息(请求或响应)。
1.1.3.1 ZDO_Regis terForZDOMsg()
调用此函数请求一个空中信息。该信息的复本会被送到OSAL信息的一个任务中。接收此信息的任务可以自己解析信息或调用一个ZDO解析函数来解析该信息。只有响应信息具有ZDO解析函数。
登记信息之后,信息被接收(OTA:无线传送),作为一个ZDO_CB_ MSG(OSAL 信息)被发送至一个应用程序或任务。信息的主体(zdoIncomingMsg_t—定义在ZDProfile.h 中)包含了OTA信息。
函数原型
ZStatus_t ZDO_RegisterForZDOMsg( uint8 taskID, uint16 clusterID );
参数描述
tasked—应用程序的任务ID。这将用于发送OSAL信息。
clustered—要接收的无线信息的簇ID号(例如:NWK_addr_rsp)。这些定义在ZDProfile.h中。
返回值
ZStatus_t —定义在ZComDef.h中的ZStatus_t 状态值。
1.1.3.2 ZDO_Remo veRegisteredCB()
调用此函数取消一个无线信息请求。
函数原型
ZStatus_t ZDO_RemoveRegisteredCB( uint8 taskID, uint16 clusterID );
参数描述
tasked—应用程序的任务ID。调用ZDO_RegisterForZDOMsg()时必须使用同一ID。
clustered—无线信息的簇ID。调用ZDO_RegisterForZDOMsg()时必须使用同一ID。
返回值
ZStatus_t—定义在ZComDef.h中的ZStatus_t状态值。
1.1.4 ZDO 查询API
查询API建立、发送ZDO设备和服务的查询请求和响应。所有API函数及其相应的ZDP命令列在下表中。用户可以将命令名称作为关键字在最新的ZigBee 规范中查阅,以作进一步参考。这些函数将在下面的分节中一一详细讨论。
Zigbee设备对象API 函数ZDP发现命令
ZDP_NwkAddrReq() NWK_addr_req
ZDP_NWKAddrRsp() NWK_addr_rsp
ZDP_IEEEAddrReq() IEEE_addr_req
ZDP_IEEEAddrRsp() IEEE_addr_rsp
ZDP_NodeDescReq() Node_Desc_req
ZDP_NodeDescRsp() Node_Desc_rsp
ZDP_PowerDescReq() Power_Desc_req
ZDP_PowerDescRsp() Power_Desc_rsp
ZDP_SimpleDescReq() Simple_Desc_req
ZDP_SimpleDescRsp() Simple_Desc_rsp
ZDP_ComplexDescReq() Complex_Desc_req
ZDP_ActiveEPIFReq() Active_EP_req
ZDP_ActiveEPIFRsp() Active_EP_rsp
ZDP_MatchDescReq() Match_Desc_req
ZDP_MatchDescRsp() Match_Desc_rsp
ZDP_UserDescSet() User_Desc_set
ZDP_UserDescConf() User_Desc_conf
ZDP_UserDescReq() User_Desc_req
ZDP_UserDescRsp() User_Desc_rsp
ZDP_EndDeviceAnnce() Device_annce
ZDP_ServerDiscReq() System_Server_Discovery_req
ZDP_ServerDiscRsp() System_Server_Discovery_rsp