ZigBee2007 协议栈 API 函数使用说明
2010
ZigBee2007 协议栈 API 函数使用说明
锋硕电子科技有限公司 邮箱:fuccesso@163.com 联系人:韩军 电话:13401235152
1
ZigBee2007 协议栈 API 函数使用说明
2010
第一章
第二章
介绍 ........................................................................................................................................................................................................ 4
应用函数接口(API).................................................................................................................................................................... 5
2.1 设备对象(ZDO) ........................................................................................................................................................................................ 5
2.1.1 概述 ................................................................................................................................................................................................... 5
2.1.2 ZDO 网络设备启动 ....................................................................................................................................................................... 5
2.1.3 ZDO 信息回调函数 ....................................................................................................................................................................... 7
2.1.3 .1 ZDO_RegisterForZDOMsg() .................................................................................................................................... 7
2.1.3 .2 ZDO_RemoveRegistedCB() ...................................................................................................................................... 9
2.1.4 ZDO 发现 API ............................................................................................................................................................................... 10
2.1.4.1 ZDP_NwkAddrReq() .................................................................................................................................................... 11
2.1.4.2 ZDP_NWKAddrRsp() .................................................................................................................................................... 12
2.1.4.3 网络地址请求和响应应用举例分析 .................................................................................................................. 13
2.1.4.4 ZDP_IEEEAddrReq() .................................................................................................................................................. 14
2.1.4.5 ZDP_IEEEAddrRsp() .................................................................................................................................................. 15
2.1.4.6 IEEE 地址请求和响应应用举例分析 ................................................................................................................. 16
2.1.4.7 ZDP_NodeDescReq() .................................................................................................................................................. 17
2.1.4.8 ZDP_NodeDescMsg() .................................................................................................................................................. 18
2.1.4.9 节点描述符请求和响应应用举例分析 ............................................................................................................... 18
2.1.4.10 ZDP_PowerDescReq() ............................................................................................................................................. 20
2.1.4.11 ZDP_PowerDescMsg() ............................................................................................................................................. 20
2.1.4.12 电源描述符请求和响应应用举例分析 ............................................................................................................ 21
2.1.4.13 ZDP_SimpleDescReq() ........................................................................................................................................... 22
2.1.4.14 ZDP_SimpleDescMsg() ........................................................................................................................................... 23
2.1.4.15 简单描述符请求和响应应用举例分析 ............................................................................................................ 23
2.1.4.16 ZDP_ActiveEPIFReq () ........................................................................................................................................ 24
2.1.4.17 ZDP_ActiveEPIFRsp() ........................................................................................................................................... 25
2.1.4.18 活动端点请求和响应应用举例分析 ................................................................................................................. 26
2.1.4.20 ZDP_MatchDescRsp() ............................................................................................................................................. 27
2.1.4.21 匹配描述符请求和响应应用举例分析 ............................................................................................................ 28
2.1.4.22 ZDP_DeviceAnnce () ............................................................................................................................................. 29
2.1.5 ZDO 绑定 API ............................................................................................................................................................................... 30
2.1.5.1 ZDP_EndDeviceBindReq () ................................................................................................................................... 31
2.1.5.2 ZDP_EndDeviceBindRsp () ................................................................................................................................... 32
2.1.5.3 终端设备绑定请求和响应应用举例分析 ......................................................................................................... 32
2.1.5.4 ZDP_BindReq () ......................................................................................................................................................... 33
2.1.5.5 ZDP_BindRsp () ......................................................................................................................................................... 34
2.1.5.6 绑定请求和响应应用举例分析 ............................................................................................................................. 34
2.2 应用框架(AF) ........................................................................................................................................................................................ 36
2.2.1 概述 ................................................................................................................................................................................................. 36
2.2.2 端点管理 ...................................................................................................................................................................................... 36
2.2.2.1 afRegister() .............................................................................................................................................................. 36
2.2.2.2 afFindEndPointDesc() ........................................................................................................................................... 37
2.2.2.3 afFindSimpleDesc()................................................................................................................................................ 38
2.2.2.4 afGetMatch() .............................................................................................................................................................. 38
2.2.2.4 afSetMatch() .............................................................................................................................................................. 39
2.2.3 发送数据 ...................................................................................................................................................................................... 39
锋硕电子科技有限公司 邮箱:fuccesso@163.com 联系人:韩军 电话:13401235152
2
ZigBee2007 协议栈 API 函数使用说明
2010
2.2.3.1 AF_DataRequest() .................................................................................................................................................. 39
2.2.4 接收数据 ...................................................................................................................................................................................... 40
2.3 应用支持子层(APS) ........................................................................................................................................................................... 42
2.3.1 绑定表管理.................................................................................................................................................................................. 42
2.3.2 组表管理 ...................................................................................................................................................................................... 42
2.3.2.1 aps_AddGroup( ) ....................................................................................................................................................... 43
2.3.2.2 aps_RemoveGroup( )................................................................................................................................................ 43
2.3.2.3 aps_FindGroup( ) .................................................................................................................................................... 44
2.4 网络层(NWK) .......................................................................................................................................................................................... 44
2.4.1 网络管理 ...................................................................................................................................................................................... 44
2.4.1.1 NLME_NetworkFormationRequest() .................................................................................................................. 44
2.4.1.2 网络层-组建网络请求举例分析 .......................................................................................................................... 45
2.4.1.3 NLME_NetworkDiscoveryRequest() .................................................................................................................. 46
2.4.1.4 网络层-发现网络请求举例分析 ........................................................................................................................... 47
2.4.1.5 NLME_JoinRequest()................................................................................................................................................ 49
2.4.1.6 网络层-加入网络请求举例分析 ........................................................................................................................... 49
2.4.1.7 NLME_ReJoinRequest() ........................................................................................................................................... 50
2.4.1.8 网络层-重新加入网络请求举例分析 ................................................................................................................. 51
2.4.1.9 NLME_OrphanJoinRequest() ................................................................................................................................. 51
2.4.1.10 网络层-孤立节点连接父节点请求举例分析 ................................................................................................ 52
2.4.1.11 NLME_StartRouterRequest() ............................................................................................................................ 53
2.4.1.12 网络层-路由器启动请求举例分析.................................................................................................................... 53
2.4.2 地址管理 ...................................................................................................................................................................................... 54
2.4.2.1 NLME_GetExtAddr() .................................................................................................................................................. 54
2.4.2.2 NLME_GetShortAddr() ............................................................................................................................................. 55
2.4.2.3 NLME_GetCoordShortAddr() ................................................................................................................................. 55
2.4.2.4 NLME_GetCoordExtAddr() ...................................................................................................................................... 56
2.4.2.5 NLME_IsAddressBroadcast() .............................................................................................................................. 56
2.4.2.6 NLME_SetBroadCastFilter() .............................................................................................................................. 56
锋硕电子科技有限公司 邮箱:fuccesso@163.com 联系人:韩军 电话:13401235152
3
ZigBee2007 协议栈 API 函数使用说明
2010
第一章 介绍
这份文档为目前发布的 ZigBee 2007 协议栈提供了应用程序接口函数(API)的使用说明。为使得
我们更好地开发和理解 ZigBee 项目,这份文档详细的讲述了协议栈中的数据结构和函数调用。首先,
我们来了解一下在 ZigBee 2007 协议栈中使用的各个层次:
ZDO
设备对象层,即 ZDO(ZigBee Device Object)层,提供了管理一个 ZigBee 节点所要使用的功能
函数。ZDO API 为协调器、路由器和终端设备提供了应用端点的管理函数,其中包括:建立、发
现和加入一个 ZigBee 网络,绑定应用端点和安全管理。
AF
应用框架层,即 AF(Application Framework),提供了针对协议栈的应用端点(EndPoint1~240)
和设备对象端点(EndPoint0)接口,其中主要包含:设备描述数据结构和数据收、发函数。
APS
应用支持子层,即 APS(Application Support Sublayer),为设备对象和应用实体提供了一系列的支
持服务。
NWK
网络层,即 NWK(ZigBee network),为上层提供了管理服务和数据服务。
ZMAC
介质访问层,即 ZMAC,在 802.15.4 MAC 与 网络层之间提供接口。
锋硕电子科技有限公司 邮箱:fuccesso@163.com 联系人:韩军 电话:13401235152
4
ZigBee2007 协议栈 API 函数使用说明
2010
第二章 应用函数接口(API)
接下来我们讲述的应用函数接口主要包含一些经常使用的数据结构和各层提供的关键性函数。
2.1 设备对象(ZDO)
本节列举出了在 ZigBee 设备规范,即 ZigBee Device Profile(ZDP),所定义的相关命令和响应函
数。
2.1.1 概述
ZDP 描述了 ZDO 内部一般性的 ZigBee 设备功能是如何实现的。它定义了使用命令和响应对的设
备描述和簇。ZDP 为 ZDO 和应用程序提供如下功能:
设备网络启动
设备和服务发现
终端设备绑定、绑定和取消绑定服务
网络管理服务
2.1.2 ZDO 网络设备启动
通过默认的 ZDApp_Init()(在 ZDApp.c 中)启动 ZigBee 网络中的设备。但是一个应用程序可以
跳过这个默认行为:
ZDApp.c
#if defined( HOLD_AUTO_START )
devStates_t devState = DEV_HOLD;
#else
devStates_t devState = DEV_INIT;
#endif
其中 HOLD_AUTO_START 在 IAR ->Project->Option->C/C++ Compile->Preprocess->Defined symbols
锋硕电子科技有限公司 邮箱:fuccesso@163.com 联系人:韩军 电话:13401235152
5
ZigBee2007 协议栈 API 函数使用说明
2010
中定义。如果预编译选择 HOLD_AUTO_START,则 ZDO 不启动网络设备,只是闪烁 LED4。交由
应用程序启动网络设备。
ZDApp.c
void ZDApp_Init( uint8 task_id )
{
if ( devState != DEV_HOLD )
{
ZDOInitDevice( 0 );
}
else
{
// Blink LED to indicate HOLD_START
HalLedBlink ( HAL_LED_4, 0, 50, 500 );
}
}
sapi.c
UINT16 SAPI_ProcessEvent( byte task_id, UINT16 events )
{
if ( events & ZB_ENTRY_EVENT )
{
if ( startOptions & ZCD_STARTOPT_AUTO_START )
{
zb_StartRequest();//即调用 ZDOInitDevice (zgStartDelay)
}
else
{
// blink leds and wait for external input to config and restart
HalLedBlink(HAL_LED_2, 0, 50, 500);
}
}
}
ZDOInitDevice()具体描述如下:
函数原型:
uint8 ZDOInitDevice( uint16 startDelay );
参数:
startDelay –设备启动延时(毫秒)
锋硕电子科技有限公司 邮箱:fuccesso@163.com 联系人:韩军 电话:13401235152
6
ZigBee2007 协议栈 API 函数使用说明
2010
返回值:
ZDO_INITDEV_RESTORED_NETWORK_STATE(网络状态为恢复)
ZDO_INITDEV_NEW_NETWORK_STATE (网络状态为初始化)
ZDO_INITDEV_LEAVE_NOT_STARTED (网络状态为未启动)
举例分析:
2.1.3 ZDO 信息回调函数
通过函数 ZDO_RegisterForZDOMsg()注册请求或响应消息,这样就可以接收其他设备无线传输的
消息。
2.1.3 .1 ZDO_RegisterForZDOMsg()
调用该函数可以将接收到的无线传输信息复制一份到 OSAL 层的某个任务。该任务接收到消息后
可以自行解析此消息或者通过 ZDO 解析函数解析此消息。只有响应消息需要使用 ZDO 解析函数。
函数原型:
ZStatus_t ZDO_RegisterForZDOMsg( uint8 taskID, uint16 clusterID );
参数:
taskID -任务ID,该任务发送OSAL 消息;
clustered-簇 ID (例如: NWK_addr_rsp),在 ZDProfile.h 定义了相关的簇.
返回值:
ZStatus_t-状态
锋硕电子科技有限公司 邮箱:fuccesso@163.com 联系人:韩军 电话:13401235152
7
ZigBee2007 协议栈 API 函数使用说明
2010
消 息 接 收 到 之 后 作 为 ZDO_CB_Msg ( 一 种 系 统 消 息 ) 发 送 至 应 用 或 者 任 务 , 消 息 结 构 体
zdoIncomingMsg_t 定义在 ZDProfile.h 中:
#define ZDO_CB_MSG 0xD3 // ZDO incoming message callback
消息结构体 zdoIncomingMsg_t:
typedef struct
{
osal_event_hdr_t hdr;
zAddrType_t srcAddr;
uint8 wasBroadcast;
cId_t clusterID;
uint8 SecurityUse;
uint8 TransSeq;
uint8 asduLen;
uint16 macDestAddr;
uint8 *asdu;
} zdoIncomingMsg_t;
在应用层使用该函数注册的消息有:
void SAPI_Init( byte task_id )
{
// Register callback evetns from the ZDApp
ZDO_RegisterForZDOMsg( sapi_TaskID, NWK_addr_rsp );
ZDO_RegisterForZDOMsg( sapi_TaskID, Match_Desc_rsp );
}
调用 ZDO_RegisterForZDOMsg()在应用层注册后,应用层处理接收到的消息方式如下:
UINT16 SAPI_ProcessEvent( byte task_id, UINT16 events )
{
osal_event_hdr_t *pMsg;
if ( events & SYS_EVENT_MSG )
{
pMsg = (osal_event_hdr_t *) osal_msg_receive( task_id );
while ( pMsg )
{
switch ( pMsg->event )
{
case ZDO_CB_MSG:
SAPI_ProcessZDOMsgs( (zdoIncomingMsg_t *)pMsg );
break;
}
}
锋硕电子科技有限公司 邮箱:fuccesso@163.com 联系人:韩军 电话:13401235152
8