ZigBee中的API接口及结构体
- 格式:doc
- 大小:21.50 KB
- 文档页数:2
#1楼主:【原创】ZigBee学习之14——ZStack API解读2文章发表于:2010-02-06 15:50ZDO邦定API绑定机制允许一个应用服务在不知道目标地址的情况下向对方(的应用服务)发送数据包。
发送时使用的目标地址将由应用支持子层从绑定表中自动获得,从而能使消息顺利被目标节点的一个或多个应用服务,乃至分组接收。
由于所有邦定信息都在Zigbee协调器中,所以只有协调器才能接收邦定请求。
ZDO Binding API ZDP Binding Service CommandZDP_EndDeviceBindReq() End_Device_Bind_reqZDP_EndDeviceBindRsp() End_Device_Bind_rspZDP_BindReq() Bind_reqZDP_BindRsp() Bind_rspZDP_UnbindReq() Unbind_reqZDP_UnbindRsp() Unbind_rspafStatus_t ZDP_EndDeviceBindReq( zAddrType_t *dstAddr,uint16 LocalCoordinator, byte epIntf,uint16 ProfileID,byte NumInClusters, byte *InClusterList,byte NumOutClusters, byte *OutClusterList,byte SecuritySuite );构建并发送节点设备邦定请求(Hand Bingding)。
LocalCoordinator - 设备父协调器的16位网络地址NumInClusters - 输入簇中的cluster ID数目InClusterList - 输入cluster IDs的数组afStatus_t ZDP_EndDeviceBindRsp( byte TranSeq, zAddrType_t *dstAddr,byte Status, byte SecurityEnable );Status - SUCCESS 0NOT_SUPPORTED 1TIMEOUT 2NO_MATCH 3afStatus_t ZDP_BindReq( zAddrType_t *dstAddr, byte *SourceAddr,byte SrcEPIntf, byte ClusterID, byte *DestinationAddr, byte DstEPIntf,byte SecuritySuite );请求协调器利用cluster ID邦定应用ClusterID –要邦定的cluster IDDestinationAddr –接收消息的设备的64位地址afStatus_t ZDP_BindRsp( byte TranSeq, zAddrType_t *dstAddr,byte Status, byte SecurityEnable );Status - SUCCESS 0NOT_SUPPORTED 1TABLE_FULL 2afStatus_t ZDP_UnbindReq( zAddrType_t *dstAddr,byte *SourceAddr, byte SrcEPIntf,byte ClusterID,byte *DestinationAddr, byte DstEPIntf,byte SecuritySuite );请求Zigbee协调器移除邦定。
Z i g B e e-协议架构根据应用和市场需要定义了ZigBee 协议的分层架构,其协议的体系结构如图1 所示,其中物理层(physical layer,PHY)和媒介访问控制层(medium access control sub-layer,MAC)是由IEEE802.15.4-2003 标准定义的,在这个底层协议的基础上ZigBee 联盟定义了网络层(network layer,PHY)和应用层(application layer,APL)架构.图1 zigbee协议栈体系结构物理层规范物理层定义了它与MAC 层之间的两个接口:数据服务接口PD-SAP 和管理服务接口PLME-SAP,其中PD-SAP 接口还为物理层提供了相应的数据服务,负责从无线物理信道上收发数据,而PLME-SAP 接口同时为物理层提供相应的管理服务,用于维护一个由物理层相关数据组成的数据库。
物理层负责数据的调制、发送和接收、空闲信道评估(clear channel assessment,CCA)信道能量的监测(energy detect,ED)和链接质量指示(link quality indication,LQI)等。
物理层帧结构由同步头、物理层帧头和物理层有效载荷三部分组成,如表1 所示。
同步头又包括32bit 的前同步码和8bit 的帧定界符,前同步码用来为数据收发提供码元或数据符号的同步;帧界定符用来标识同步域的结束及数据的开始。
物理层帧头包括7bit 的帧长度和1bit 的预留位,帧长度定义了物理层净荷的字节数。
物理层有效载荷就是MAC层的帧内容。
表一物理层帧格式媒体接入控制层规范MAC 层定义了它与网络层之间的接口,包括提供给网络层的数据服务接口MLDE-SAP 和管理服务接口MLME-SAP,同时提供了MAC 层数据服务和MAC 层管理服务。
MAC层数据服务主要实现数据帧的传输;MAC 层管理服务主要负责媒介访问控制、差错控制等。
根据应用和市场需要定义了ZigBee协议的分层架构,其协议的体系结构如图1所示,其中物理层(physical layer,PHY)和媒介访问控制层(medium access control sub—layer,MAC)是由IEEE802.15。
4—2003 标准定义的,在这个底层协议的基础上ZigBee联盟定义了网络层(network layer,PHY)和应用层(application layer,APL)架构。
图1 zigbee协议栈体系结构物理层规范物理层定义了它与MAC 层之间的两个接口:数据服务接口PD—SAP 和管理服务接口PLME—SAP,其中PD-SAP 接口还为物理层提供了相应的数据服务,负责从无线物理信道上收发数据,而PLME-SAP 接口同时为物理层提供相应的管理服务,用于维护一个由物理层相关数据组成的数据库.物理层负责数据的调制、发送和接收、空闲信道评估(clear channel assessment,CCA)信道能量的监测(energy detect,ED)和链接质量指示(link quality indication,LQI)等。
物理层帧结构由同步头、物理层帧头和物理层有效载荷三部分组成,如表1 所示.同步头又包括32bit 的前同步码和8bit 的帧定界符,前同步码用来为数据收发提供码元或数据符号的同步;帧界定符用来标识同步域的结束及数据的开始.物理层帧头包括7bit 的帧长度和1bit 的预留位,帧长度定义了物理层净荷的字节数。
物理层有效载荷就是MAC层的帧内容。
表一物理层帧格式媒体接入控制层规范MAC 层定义了它与网络层之间的接口,包括提供给网络层的数据服务接口MLDE—SAP 和管理服务接口MLME—SAP,同时提供了MAC 层数据服务和MAC 层管理服务。
MAC层数据服务主要实现数据帧的传输;MAC 层管理服务主要负责媒介访问控制、差错控制等。
MAC 层主要功能包括以下几个方面:(1)ZigBee协调器产生网络信标(2)设备与信标同步(3)支持节点加入或着退出操作(4)信道接入方式采用免冲突载波检测多路访问(CSMA-CA)机制(5)建立并维护保护时隙机制(6)为设备提供安全支持MAC 帧格式由三个基本部分组成:MAC 帧头、MAC 帧载荷和MAC 帧尾。
ZigBee学习之16——ZStack API解读4应用支持子层(APS)应用支持子层提供如下管理功能:∙邦定表管理∙组表管理∙快速地址查找除了管理功能外,APS还提供数据服务,只是应用不能访问数据服务。
应用需要通过AF数据接口AF_DataRequest()来发送数据。
如果要使用邦定表函数需要包含BindingTable.h头文件。
邦定表管理请注意,绑定服务只能在“互补”设备之间建立。
那就是,只有分别在两个节点的简单描述结构体(simple descriptor structure)中,同时注册了相同的命令标识符(command_id)并且方向相反(一个属于输出指令“output”,另一个属于输入指令“input”),才能成功建立绑定。
APS邦定表是在静态RAM中定义的一张表,定义在nwk_globals.c中。
表的大小可以通过f8wCo nfig.cfg中的[NWK_MAX_BINDING_ENTRIES和MAX_BINDING_CLUSTER_IDS]莱配置。
只有定义了R EFLECTOR或者COORDINATOR_BINDING才能包含此表,用REFLECTOR编译选项来支持APS层的源邦定。
邦定表结构– BindingEntry_ttypedef struct{uint16 srcIdx; // Address Manager indexuint8 srcEP;uint8 dstGroupMode; // Destination address type; 0 - Normal address index, 1 -// Group addressuint16 dstIdx; // This field is used in both modes (group and non-group) to// save NV and RAM space// dstGroupMode = 0 - Address Manager index// dstGroupMode = 1 - Group Addressuint8 dstEP;uint8 numClusterIds;uint16 clusterIdList[MAX_BINDING_CLUSTER_IDS];// Don't use MAX_BINDING_CLUSTERS_ID when// using the clusterIdList field. Use// gMAX_BINDING_CLUSTER_IDS} BindingEntry_t;srcIdx –源地址(绑定记录的源地址)的地址管理器索引,地址管理器保存着源地址的IEEE地址和短地址。
网络层(NWK)网络层为高层提供下面函数功能:∙网络管理∙地址管理∙网络变量和效能函数除了管理功能外,NWK还提供数据服务,只是应用不能访问数据服务。
应用需要通过AF数据接口AF_DataRequest()来发送数据。
网络管理ZStatus_t NLME_NetworkDiscoveryRequest( uint32 ScanChannels,byte ScanDuration );用来请求网络层发现邻居路由器。
在加入操作执行网络扫描前应该调用此函数。
扫描确认(结果)将以回调函数ZDO_NetworkDiscoveryConfirmCB()返回。
推荐用户使用ZDO_StartDevice()来代替此函数。
(除非你清楚的知道网络加入过程)ScanChannels -执行发现的通道,2.4GHz条件下只能使用通道11-26(0x07FFF800)ScanDuration -新网络启动前,每个通道被其他网络扫描的时间BEACON_ORDER_15_MSEC 0 15.36 millisecondsBEACON_ORDER_30_MSEC 1 30.72 millisecondsBEACON_ORDER_60_MSEC 2 61.44 millisecondsBEACON_ORDER_120_MSEC 3 122.88 millisecondsBEACON_ORDER_240_MSEC 4 245.76 millisecondsBEACON_ORDER_480_MSEC 5 491.52 millisecondsBEACON_ORDER_1_SECOND 6 983.04 millisecondsBEACON_ORDER_2_SECONDS 7 1966.08 millisecondsBEACON_ORDER_4_SECONDS 8 3932.16 millisecondsBEACON_ORDER_7_5_SECONDS 9 7864.32 milliseconds BEACON_ORDER_15_SECONDS 10 15728.64 milliseconds BEACON_ORDER_31_SECONDS 11 31457.28 milliseconds BEACON_ORDER_1_MINUTE 12 62914.58 millisecondsBEACON_ORDER_2_MINUTES 13 125829.12 milliseconds BEACON_ORDER_4_MINUTES 14 251658.24 milliseconds BEACON_ORDER_NO_BEACONS 15 No Beacons transmitted 返回值:ZStatus_t -ZComDef.h中定义的状态值ZStatus_t NLME_NwkDiscReq2( NLME_ScanFields_t* fields );用来请求网络层发现邻居路由器。
ZigBee 学习之1515——————ZStackZStack API 解读3应用框架(AF)应用框架层是应用道APS 层的OTA 数据接口。
此层也接收数据消息的终端多路复用器。
AF 为应用提供以下功能:•终端(Endpoint)管理•发送和接收数据哈哈,这里的函数应该就是我们经常要用到的函数了。
终端管理每个设备都是Zigbee 中的节点,每个节点有长地址和短地址,短地址被其他设备用来发送数据。
每个节点又241个终端(0保留,1-240可分配给应用)。
每个终端可以独立设置地址;当设备发送数据时必须指定目标设备的短地址和接收终端。
一个应用必须注册一个或多个终端用来接收或者发送数据。
简单描述符-SimpleDescriptionFormat_t每个终端都必须有一个Zigbee 简单描述。
这些描述对Zigbee 网络刻画了这个终端,其他设备可以询问这个终端以知道这个设备的类型。
typedef struct{byte EndPoint;uint16AppProfId;uint16AppDeviceId;byte AppDevVer:4;byte Reserved:4;//AF_V1_SUPPORT uses for AppFlags:4.byte AppNumInClusters;cId_t *pAppInClusterList;byte AppNumOutClusters;cId_t *pAppOutClusterList;}SimpleDescriptionFormat_t;EndPoint –终端号:1-240这是节点的子地址,用来接收数据AppProfId –定义了这个终端上支持的Profile ID(剖面ID),ID 最好遵循由ZigBee 联盟的分配。
AppDeviceId –终端支持的设备ID,ID 最好遵循ZigBee 联盟的分配。
AppDevVer –此终端上设备执行的设备描述的版本:0x00为Version 1.0.Reserved –保留AppNumInClusters –终端支持的输入簇数目pAppInClusterList –指向输入Cluster ID 列表的指针AppNumOutClusters –终端支持的输出簇数目pAppOutClusterList –指向输出Cluster ID 列表的指针终端描述符-endPointDesc_t节点中的每一个终端都必须有一个终端描述符typedef struct{byte endPoint;byte *task_id;//Pointer to location of the Application task ID.SimpleDescriptionFormat_t*simpleDesc;afNetworkLatencyReq_t latencyReq;}endPointDesc_t;task_id-任务ID指针,当接收到消息时,此任务ID将指示消息传递目的。
ZigBee的结构体系●当今世界通信技术迅猛发展,ZigBee作为一种新兴的短距离无线通信技术,正有力地推动着低速率无线个人区域网络LR-WPAN(Low-Rate Wireless Personal Area Network)的发展。
●ZigBee是基于IEEE802.15.4标准的应用于无线监测与控制应用的全球性无线通信标准,强调简单易用、近距离、低速率、低功耗(长电池寿命)且极廉价的市场定位,可以广泛应用于工业控制、家庭自动化、医疗护理、智能农业、消费类电子和远程控制等领域。
●并且,基于ZigBee技术的网络特征与无线传感器网络存在很多相似之处,故很多研究机构已经把它作为无线传感器网络的无线通信平台。
目前在蓝牙技术复杂,应用系统费用高,功耗高,供电电池寿命短,且还无法突破价格瓶颈的情况下,ZigBee技术无疑将拥有广阔的应用前景。
ZigBee的结构体系相对于其他无线通信标准,ZigBee协议栈显得更为紧凑和简单。
如图1所示,ZigBee协议栈的体系结构由底层硬件模块、中间协议层和高端应用层3部分组成。
1、ZigBee底层硬件模块底层硬件模块是ZigBee技术的核心模块,所有嵌入ZigBee技术的设备都必须包括底层模块。
它主要由射频RF(Radio-Frequency)、ZigBee无线RF收发器和底层控制模块组成。
ZigBee标准协议定义了两个物理层(PHY)标准,分别是2.4GHz物理层和868/915MHz物理层。
两个物理层都基于直接序列扩频DSSS技术,使用相同的物理层数据包格式;区别在于工作频率、调制方式、信号处理过程和传输速率。
底层控制模块定义了物理无线信道和MAC子层之间的接口,提供物理层数据服务和物理层管理服务。
物理层数据服务从无线物理信道上收发数据;物理层管理服务维护一个由物理层相关数据组成的数据库。
数据服务主要包括:激活和休眠射频收发器,收发数据,信道能量检测,链路质量指示和空闲信道评估。
ZigBee 学习之1313——————ZStackZStack API 解读API实现了所有ZDP(ZigBee Device Profile)定义的命令和回应所需要的函数。
ZDP 描述了ZDO 如何实现普通ZigBee 设备的特性,它定义了设备描述和簇,ZDP 为ZDO 和应用提供一下功能:•设备网络建立•设备和服务发现•节点设备邦定和解邦定服务•网络管理服务设备发现是ZigBee 设备发现其他ZigBee 设备的过程。
比如将已知的IEEE 地址作为数据载荷广播到网络的NWK 地址请求,相关设备必须回应并告知其网络地址。
服务发现提供了PAN 中一个设备发现其他设备提供的服务的能力。
它利用多种描述符去指定设备的能力。
当用户需要邦定控制器与被控设备(比如开关和灯)时,将用到邦定和解邦定服务。
特别是终端设备邦定支持利用用户的输入来定义控制/被控设备对的简单邦定方法。
邦定和解邦服务可以创建和删除邦定表入口。
网络管理服务主要提供给用户和调试工具网络管理的能力,它能够从设备重新获得管理信息,包括网络发现结果,路由表的内容,邻居节点链路质量,邦定表内容。
也可以通过解关联将设备从PAN 中脱离来控制网络关联。
ZDO 设备网络建立在ZigBee 网络中默认ZDApp_Init()[in ZDApp.c]开始器件的启动,但是应用能覆盖整个默认行为,为了使应用接管网络的启动,必须在编译选项中包含HOLD_AUTO_START,推荐同时包含NV_RESTORE(储存ZigBee 网络状态到NV)编译选项,包含这个两个编译选项后就需要调用ZDOIni tDevice()来启动网络中的设备。
uint8ZDOInitDevice(uint16startDelay )启动网络中的设备。
如果应用想要强制一个“新的”加入(即不恢复网络状态),则应该先调用z gWriteStartupOptions(ZG_STARTUP_SET,ZCD_STARTOPT_DEFAULT_NETWORK_STATE)来设置ZCD_NV_STARTUP_OPTION 中的ZCD_STARTOPT_DEFAULT_NETWORK_STATE 位。
ZigBee协议简介一、ZigBee协议体系结构ZigBee协议基于IEEE802.15.4标准,由IEEE802.15.4和ZigBee联盟共同制定。
ZigBee协议栈由物理层(PHY)、媒体介质访问层(MAC)、网络层(NWK)和应用层(APL)共4层构成,其中PHY层和MAC层由IEEE802.15.4标准工作组制订,而NWK层和APL层由ZigBee联盟自行制订。
每一层都完成其各自特定的任务并且向上一层提供服务,数据服务实体主要负责数据传输服务,管理服务实体则主要负责所有的其他管理服务。
每个服务实体为其上层提供需要的接口都是通过其相应的服务接入点(SAP)实现的,每个SAP所对应的功能通过服务原语来完成,且每个SAP支持许多种不同的服务原语。
ZigBee协议体系结构如图2.1所示:IEEE802.15.4制定终端制造商制定ZigBee联盟制定各层接口图2.1 ZigBee协议体系结构图1物理层(PHY)物理层定义了物理无线信道和MAC 层之间的接口,提供三种不同的通信频段:868MHz-868.6MHz、902MHz-928MHz和2400MHz-24835MHz,以及1个、10个以及16个不同的信道。
物理层提供两种服务:物理层数据服务(PD)和物理层管理服务(PLME)。
通过无线信道的发送和接收以及物理层协议数据单元(PPDU)来实现物理层数据服务。
PLME主要通过调用物理层管理功能函数来提供管理和服务,其中物理层数据服务接入点(PD-SAP)给MAC层提供数据服务接口,而物理层管理实体服务接入点(PLME-SAP)给MAC层提供管理服务接口。
驱动程序为物理层提供的接口是无线射频服务接入点(RF-SAP),从外界接收到数据包后,从物理层中提取信息并通过PD-SAP上传给上层协议。
物理层结构及接口示意图如图2.2所示。
图2.2 物理层结构及接口示意图物理层的主要功能包括:1)ZigBee系统的启动和关闭;2)当前信道的能量检测;3)链路质量信息;4)信道评估与选择;5)传输和接收数据。
移动设备中ZigBee接口的实现引言ZigBee是一种短距离、低速率无线网络技术,是一种介于RFID和Bluetooth 之间的技术提案。
ZigBee一般采用IEEE 802.15.4收发器与ZigBee协议栈的组合,在数千个微小的节点之间相互协调实现通信。
这些节点只需要很少的能量,以接力的方式通过无线电波将数据从一个传感器传到另一个节点,所以它们的通信效率非常高。
因此,ZigBee在传感器网络、智能家居、工业自动化等领域有广泛的应用。
市场研究公司NSR曾发布报告指出,首批具备ZigBee功能的产品将于2006年第一季在北美、欧洲和亚太地区展开,该机构并预估,到2010年,全球将可望部署5.8亿个ZigBee组件,成长非常快速。
同样,市调机构In-Stat也曾在2005年发布新闻指出,五年内,ZigBee成长将超过200%。
但是,由于各家使用ZigBee技术的设备商采用的应用协议不同,所以目前市场上很少通用的测试设备,执行包括信道检测,数据监听,发送功率等功能。
本文介绍了一种在移动设备中实现ZigBee接口的方法,以windows mobile 6.0 Professional为平台,在仿真器中给出了演示,同时,在HP iPaq rx3700的真机下测试通过。
1.系统组成及功能如图1所示,按照功能,系统可以分成ZigBee模块和移动设备这两个部分,它们通过串口进行通信。
ZigBee模块负责IEEE 802.15.4信号的发送和接收,移动设备负责数据的处理,并向用户提供有好的UI。
图1系统组成框图系统的功能如下:1.信道检测。
通过扫描,完成ZigBee技术2.4GHz频段16个信道的状态检测,并返回给UI进行显示。
2.发送/接收信道设置。
用户通过UI给ZigBee模块发送指令,使之通过设定的信道来发送和接收数据。
3.发送/接收数据。
用户可以用文本方式或者HEX方式发送数据,并且可以用一定间隔进行连续发送。
typedef struct
{
osal_event_hdr_t hdr; /* OSAL Message header *///OSAL消息头
uint16 groupId; /* Message's group ID - 0 if not set *///消息组ID
uint16 clusterId; /* Message's cluster ID *///消息族ID
afAddrType_t srcAddr; /* Source Address, if endpoint is
STUBAPS_INTER_PAN_EP,
it's an InterPAN message *///源地址类型
uint16 macDestAddr; /* MAC header destination short address *///MAC物理地址uint8 endPoint; /* destination endpoint */ //目的端点
uint8 wasBroadcast; /* TRUE if network destination was a broadcast address *///广播地址
uint8 LinkQuality; /* The link quality of the received data frame */ //接收数据帧的链路质量
uint8 correlation; /* The raw correlation value of the received data frame *///接收数据帧的未加工相关值。
int8 rssi; /* The received RF power in units dBm *///接收的射频功率。
uint8 SecurityUse; /* deprecated *///弃用
uint32 timestamp; /* receipt timestamp from MAC *///收到时间标记。
afMSGCommandFormat_t cmd; /* Application Data */应用程序数据
} afIncomingMSGPacket_t; //无线数据包格式结构体
发送数据
afStatus_t AF_DataRequest(afAddrType_t *dstAddr,
endPointDesc_t *srcEP,
uint16 cID,
uint16 len,
uint8 *buf,
uint8 *transID,
uint8 options,
uint8 radius)
1、afAddrType_t *dstAddr,——该参数包含了目的节点的网络地址以及发送数据的格式,如广播、单播或多播等
2、endPointDesc_t *srcEP,——在ZigBee无线网络中,通过网络地址可以找到某个具体的节点,如协调器的网络地址是0X0000,但是具体到某一个节点上,还有不同的端口,每个节点上最多支持240个端口。
节点与端口的关系如图所示,每个节点上最多有240个端口,端口0是默认的ZDO,端口(0~240)用户可以自己定义,引入端口主要是由于TI实现的ZigBee协议栈中加入了一个小的操作系统,这样,每个节点上的所有端口共用一个发射/接收天线,不同节点上的端口之间可以进行通信。
如节点1的端口1可以给节点2的端口1发送控制命令来点亮LED,节点1的端口1也可以给节点2的端口2发送命令进行数据采集操作,但是节点2上端口1和端口2的网络上址是相同的,所以仅仅通过网络地址无法区分,所以在发送数据地不但要
指定网络地址,还要指定端口号
因此,通过上面的论述可能得到如下结论:使用网络地址来区分不同的节点;使用端口号来区分同一节点上的端口。
3、uint16 cID——这个参数描述的是命令号,在ZigBee协议里的命令主要用来标识不同的控制操作,不同的命令号代表了不同的控制命令,如节点1的端口1可以给节点2的端口1发送控制命令1,当该命令的ID为1时表示点亮LED,当该命令的ID为0时表示熄灭LED,因此,该参数主要是为了区别不同的命令。
如终端节点在发送数据时使用的命令ID是GENERICAPP_CLUSTERIC,该宏定义是在Coordinator.h文件中定义的,它的值为1
4、uint16 len——该参数标识了发送数据的长度
5、Uint8 *buf——该参数是指向发送数据缓冲区的指针,发送数据时只需要将所要发送的数据缓冲区的地址传递给该参数即可,数据发送函数会从该地址开始按照指令的数据长度取得发送数据进行发送
6、Uint8 *transID——该参数是一个指向发送序号的指印,每次发送数据时,发送序号会自动加1(协议栈里面实现的该功能),在接收端可以通过发送序号来判断是否丢包,同时可以计算出丢包率。
7、uint8 options——发送选项,uint8 radius——最大的跳数,这个两参数一般取默认值即可,options参数可以取AF_DISCV_ROUTE,radius参数可以取AF_DEFAULT_RADIUS
8、afStatus_t——成功则为ZSuccess(defined in ZComDef.h);否则Errors(defined in ComDef.h)
接收数据
当协调器接收到数据后,操作系统会将该数据封装成一个消息,然后放入消息队列中,每个消息都有自己的消息ID,标识接收到新数据的消息的ID是AF_INCOMING_MSG_CMD,其中AF_INCOMING_MSG_CMD的值是0X1A,这是在ZigBee协议栈中定义好的,用户不可更改。
首先使用osal_msg_receive函数从消息队列中接收一个消息,然后使用switch-case文句对消息类型进行判断(判断消息ID),如果消息ID是AF_INCOMING_MSG_CMD则进行相应的数据处理
到此为止,我们至少理清楚这条线索:当协调器收到数据后,用户只需要从消息队列中接收消息,然后从消息中取得所需要的数据即可,其他工作都由ZigBee协议栈自动完成。