在z-dump stack实现中,可以使用什么函数实现数据的发送和接收

Z-Stack协议――发送函数AF_DataRequest
Z-Stack 中发送数据通过在应用层调用函数
void SampleApp_SendFlashMessage( uint16 flashTime )完成,其中flash Time 为发送的数据,这个函数在应用中通过调用
afStatus_t
AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP,
uint16 cID, uint16 len, uint8 *buf, uint8 *transID,
uint8 options, uint8 radius )
函数完成数据的发送。如果熟悉了其中的每个参数的含义,就可以很灵活的使用发送函数发送自己的数据。
第一个参数 dstAddr,在文件AF.h中,该参数是一个结构体的指针。在该参数中除了指定了网络地址外,还需要指定目的地址的模式参数。
typedef struct
uint16 shortA
afAddrMode_t addrM //afAddrMode_t是一个枚举类型模式参数
byte endP //指定的端点号 端点241―254保留端点 范围 1-240 } afAddrType_t;
下面的是 afAddrMode_t结构体的定义
目的地址模式可以设置为以下几个值:
afAddrNotPresent
AddrNotPresent,//间接传送(Indirect)
afAddr16Bit
Addr16Bit,//指定地址单点传送(Unicast)
afAddrGroup
AddrGroup,//组寻址(Group Addressing)
afAddrBroadcast
AddrBroadcast//广播传送(broadcast)
} afAddrMode_t;
下面详细解释各种地址模式
单点传送(Unicast)
Uicast 是标准寻址模式,它将数据包发送给一个已经知道网络地址的网络设 备。将 afAddrMode 设置为 Addr16Bit 并且在数据包中携带目标设备地址。
间接传送(Indirect)
当应用程序不清楚数据包的最终目标的时候使用间接传送。将模式设置为
AddrNotPresent 并且不指定目标地址。取而代之的是,从发送设备的栈的绑定表中查找到的目标。这种特点称之为源绑定(在后面的绑定一节详细介绍)。当数据向下发送到栈中,从绑定表中查找并且使用该目标地址。这样,数据包将被处理成为一个标准的单点传送数据包。如果在绑定表中找到多个设备,则向每个设备都发送一个数据包的拷贝。
上一个版本的 ZigBee(ZigBee04),有一个选项可以讲绑定表保存在协调器 (Coordinator)当中。发送设备将数据包发送给协调器,协调器查找它栈中的绑定表,然后将数据发送给最终的目标设备。这个附加的特性叫做协调器绑定(Coordinator Binding)。
广播传送(broadcast)
当应用程序需要将数据包发送给网络的每一个设备时,使用这种模式。地址模式设置为 AddrBroadcast。目标地址可以设置为下面广播地址的一种:NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)――数据包将被传送到网络上的所有设备,包括睡眠中的设备。对于睡眠中的设备,数据包将被保留在其父亲节点 直到查询到它或者消息超时(NWK_INDIRECT_MSG_TIMEO在f8wConifg.cfg 中)。 NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)――数据包将被传送到网络上的所有的打开接收的空闲设备(RXONWHENIDLE),也就是说,除了睡眠中的所有设备。 NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)――数据包发送给所有的路由器,包括协调器。
组寻址(Group Addressing)
当应用程序需要将数据包发送给网络上的一组设备时,使用该模式。地址模 式设置为 afAddrGroup 并且 addr.shortAddr 设置为组 ID。
在使用这个功能之前,必须在网络中定义组。(参见 Z-stack API 文档中的 aps_AddGroup()函数)。
注意组可以用来关联间接寻址。再绑定表中找到的目标地址可能是是单点传送或者是一个组地址。另外,广播发送可以看做是一个组寻址的特例。下面的代码是一个设备怎样加入到一个 ID 为 1 的组当中:
aps_Group_
group.name[0]
string aps_AddGroup(
SAMPLEAPP_ENDPOINT,
[ZComDef.h]
AddrNotPresent = 0,
AddrGroup = 1,
Addr16Bit = 2,
Addr64Bit = 3, // 指定IEEE地址进行单播传输 64位
AddrBroadcast = 15
注意:ZigBee设备有两种类型的地址。一种是64位IEEE地址(物理),即MAC地址,另一种是16位网络地址。
64位地址使全球唯一的地址,设备将在它的生命周期中一直拥有它。它通常由制造商或者被安装时设置。这些地址由IEEE来维护和分配。
16为网络地址是当设备加入网络后由协调器或路由器分配的。它在网络中是唯一的,用来在网络中鉴别设备和发送数据。
第二个参数endPointDesc_t *srcEP,也是一个结构体的指针,目的网络地址描述,每个终端都必须要有一个ZigBee的简单描述。
typedef struct
byte endP //端点号
byte *task_ // Pointer to location of the Application task ID.
SimpleDescriptionFormat_t *simpleD //设备的简单描述
afNetworkLatencyReq_t latencyR //枚举结构 必须用 noLatencyReqs 填充
} endPointDesc_t;
目标设备的简单描述结构
typedef struct
byte EndP //EP ID (EP=End Point)
uint16 AppProfId; // profile ID(剖面ID)
uint16 AppDeviceId; // Device ID
byte AppDevVer:4; //Device Version 0x00 为 Version 1.0
byte Reserved:4; // AF_V1_SUPPORT uses for AppFlags:4.
byte AppNumInC //终端支持的输入簇的个数
cId_t *pAppInClusterL
//指向输入Cluster ID列表的指针
byte AppNumOutC
//输出簇的个数
cId_t *pAppOutClusterL //指向输出Cluseter ID列表的指针
} SimpleDescriptionFormat_t;
typedef enum
noLatencyReqs,
fastBeacons,
slowBeacons
} afNetworkLatencyReq_t;
第三个参数:uint16 cID 簇ID
第四个参数:len
要发送的数据的长度
第五个参数:uint8 *buf
指向发送数据缓冲的指针
第六个参数:uint8 *transID事务序列号指针。如果消息缓存发送,这个函数将增加这个数字
第七个参数:发送选项,可以由下面一项,或几项相或得到
AF_ACK_REQUEST 0x10 要求APS应答,这是应用层的应答,只在直接发送(单播)时使用。
AF_DISCV_ROUTE 0x20 总要包含这个选项
AF_SKIP_ROUTING 0x80 设置这个选项将导致设备跳过路由而直接发送消息。终点设备将不向其父亲发送消息。在直接发送(单播)和广播消息时很好用。 返回值:
该函数的返回值:afStatus_t类型枚举型的,成功或
typedef enum
afStatus_SUCCESS,
afStatus_FAILED = 0x80,
afStatus_MEM_FAIL,
afStatus_INVALID_PARAMETER
} afStatus_t;
下面是这个函数完整的源代码:
/*********************************************************************
AF_DataRequest
Common functionality for invoking APSDE_DataReq() for both
SendMulti and MSG-Send.
* input parameters
*dstAddr - Full ZB destination address: Nwk Addr + End Point.
*srcEP - Origination (i.e. respond to or ack to) End Point Descr.
cID - A valid cluster ID as specified by the Profile.在Z-Stack中使用直接加入请求功能
CCCC2431Z-stack
●●●直接加入孤节点
IAR嵌入式工作台
在一个典型的ZigBee网络中,设备将自动加入该网络,并挑选最好的父节点加入。设备将尽可能加入树的高层,并加入到具有最高LQI的父节点下面去。
在一些应用中,拓扑结构可能需要更多的控制。Z-Stack中的NLME直接加入请求可以用来完成这个工作。这个设计说明描述了可能使用这个功能的一个特定脚本。该脚本让一个终端设备(RFD)正常加入网络,然后为它提供一种加入某个特定路由器(
FFD)的方法。
本范例的设置包括协调器、路由器
和终端设备。由于假定终端设备是在协调器的范围内,它将在上电时首先加入协调器。然后,一个操纵杆行为导致路由器允许终端设备直接加入。另一个操纵杆行为告诉终端设备要离开网络,然后重新加入到路由器下面。
下面的代码片段逐步解释了这是如何完成的。这适用于Z-Stack的1.4.3版本。
SWRU124A1/7
关键字...................................................................................................................................................1
1、简介.................................................................................................................................................1
2、缩略语.............................................................................................................................................2
3、修改ZDApp.c.................................................................................................................................3
4、操纵杆行为导致路由器增加终端设备,告诉终端设备离开并重新加入路由器....................3
5、预期结果.........................................................................................................................................4
6、常用信息.........................................................................................................................................5
6.1文件历史..............................................................................................................................5重要声明...............................................................................................................................................6
RFD全功能设备链路质量指示媒体访问控制,ZigBee使用的较低的层简化功能设备
SWRU124A2/7
3、修改ZDApp.c
下面ZDApp.c中的代码控制设备如何启动。通常devStartMode变量设置为MODE_JOIN,这意味着设备将经过默认联接程序加入网络。如果devStartMode设置为MODE_RESUME,终端设备将执行一个孤节点加入,而不是通过联接加入。通过下面粗体显示的非注释行,可以设置devStartMode为
MODE_RESUME。
4、操纵杆行为导致路由器增加终端设备,告诉终端设备离开并重新加入路由器
要使用NLME直接加入请求,必须先知道两个信息,即设备的IEEE64位地址和它的MAC容量信息。在本范例中,我们使用的是IEEE地址0xCB1200(注意字节顺序)。
首先,通过把dev板上的操纵杆按到右边位置(SW2),把终端设备增加到路由器,然后通过把操纵杆按到向下位置(SW3),告诉终端设备重新加入路由器。在ZDObject.c的ZDO_ProcessMgmtLeaveReq()函数中,把req.rejoin结构体成员设置为TRUE。这将允许设备一旦离开先前的父节点,它可以重新加入。否则,设备将处于一个“保持”状态,网络加入程序必须通过应用程序手动激活。作为离开程序的一部分,设备进行一个硬复位,然后根据req.rejoin参数的值决定是否尝试重新加入。
注意:为了支持离开程序,建议每个设备开启如下的编译选项:
ZDO_MGMT_LEAVE_REQUEST
ZDO_MGMT_LEAVE_RESPONSE
SWRU124A3/7
看过本文章的还看过。。。
英《z-stack中使用直接加入请求功能》(中)_it计算机_专业资料。对于加入......
英《z-stack api 接口》(中)_信息与通信_工程科技_...数据结构和辅助功能, 是传入信息的终端多路 复 用...当zdo层接收到一个“管理直接加入请求”信息时,将.........
英这里我所提及的现有平台即是 zstack 自带 的 mt 包,其实 zstack 中的这个 mt 包功能相当强大,通过 ti 提供的 ztool 工具可以用串 口的方式同整个协议栈进行.........
■ 24小时热门信息
cloudstack vs openstack vs eucalyptus ia......
cloudstack vs openstack vs eucalyptus-- iaas private cloud brief comparison_互联网_it计算机_专业资料。cloudstack vs openstack vs eucalyptus iaas private clo.........
表 1 列出了 cloudstack 与 openstack 的一些对比。 表 cloudstack 与 openstack 的对比 cloudstack license apache 0 授权协议,可免费用于商业模式 openstack.........
openstack vs vmware_计算机硬件及网络_it计算机_专业资料。openstack vs vmware-- openstack vs vmware 网易杭州研究院云计算技术组 王盼 ease..........
■ 相关热门内容
openstack和cloudstack对比研究报告_互联网_it计算机_专业......
openstack与cloudstack比较_数学_小学教育_教育专区 暂无评价|0人阅读|0次下载|举报文档openstack与cloudstack比较_数学_小学教育_教育专区。 .........
cloudstack openstack对比分析_计算机软件及应用_it计算机_专业资料。cloudstack与openstack全面对比分析。cloudstack、openstack对比 目录 ? ? ? ? ? ? ? ? ? 项.........
cloudstack与openstack对比_互联网_it计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 cloudstack与openstack对比_互联网_it计算机_专业资料。 .........
用户界面 openstack copyright 2010 tcloud computing inc. 权限管理 ? cloudstack 由管理节点统一管理,分为domainsubdomainaccountuser,树状结构 account属于某个.........
cloudstack与openstack的对比_互联网_it计算机_专业资料。cloudstack与openstack的对比,功能对比 cloudplatform vs openstack: competitive reference card openstack .........
openstack vs cloudstack_计算机软件及应用_it计算机_专业资料。openstack vs cloudstack --刘毅 简介第一部分从架构、portal、租户三个角度简单介绍两者 在使用及.........
z1 october 2014 doi:3969j.issn.x.z014 基于 cloudstack 和 openstack 的 kvm 虚拟机跨平台迁移方法郑楠 1,,陈立南 1,2,郑礼雄 ........
■ 热门推荐温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
1、定义一个串口初始化函数,函数里面对串口进行配置void initUart(halUARTCBack_t pf){halUARTCfg_t uartCuartConfig.configured = TRUE;uartConfig.baudRate = HAL_UART_BR_38400;uartConfig.flowControl = FALSE;uartConfig.flowControlThreshold = 48;uartConfig.rx.maxBufSize = RX_BUF_LEN;uartConfig.tx.maxBufSize = 128;uartConfig.idleTimeout = 6;&uartConfig.intEnable = TRUE;&uartConfig.callBackFunc =HalUARTOpen (HAL_UART_PORT_0, &uartConfig);}&2、在&ZB_ENTRY_EVENT 这个事件的处理函数中,调用initUart();参数uartRxCB是串口的回调函数。if( event & ZB_ENTRY_EVENT ){&…………if ( appState == APP_INIT ){&&logicalType = ZG_DEVICETYPE_COORDINATOR;zb_WriteConfiguration(ZCD_NV_LOGICAL_TYPE, sizeof(uint8), &logicalType);initUart(uartRxCB);&}&3、定义回调函数,用以接收串口数据void uartRxCB( uint8 port, uint8 event ){uint8 pBuf[RX_BUF_LEN];uint16uint16uint16 Endivce_if ( event != HAL_UART_TX_EMPTY )&{len = HalUARTRead(HAL_UART_PORT_0, pBuf, RX_BUF_LEN)&;//HalUARTRead把接收到的数据存储到pBuf数组里。if ( len&0 )&{cmd = BUILD_UINT16(pBuf[SYS_PING_CMD_OFFSET+ 1], pBuf[SYS_PING_CMD_OFFSET]);if( (pBuf[FRAME_SOF_OFFSET] == CPT_SOP) && (cmd == SYS_PING_REQUEST) ) //CPT_SOP=0xFE{// sysPingReqRcvd();&}else{HalLcdWriteScreen( "Receive Datas","From PC" );HalLcdWriteValue(pBuf[0],10,3);HalLcdWriteValue (255, 16, 4);Endivce_addr = pBuf[1]*256 + pBuf[0];zb_SendDataRequest( Endivce_addr, LED_PWM_CMD_ID, len, pBuf, 0, 0, 0 );//AF_DEFAULT_RADIUS Endivce_addr}}}}&4、使用HalUARTWrite()函数进行串口数据的发送;如HalUARTWrite(HAL_UART_PORT_0, pFrame, FRAME_LENTH);
阅读(100)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'Z-stack 串口的使用',
blogAbstract:'/qmlm8844/archive//2377800.html',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:2,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}查看: 938|回复: 0
zstack(zibee2006)数据的发送和接收模式
数据的发送和接收
一、& && && && &数据的发送在ZStack2006的协议栈中,我们只需调用函数AF_DataRequest()即可完成数据的发送。afStatus_t AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP,& && && && && && && && && &uint16 cID, uint16 len, uint8 *buf, uint8 *transID, uint8 options, uint8 radius )而我们在使用AF_DataRequest() 函数时只需要了解其参数便可以非常灵活的以各种方式来发送数据。AF_DataRequest()函数参数说明如下:*dstAddr---------------------发送目的地址、端点地址以及传送模式*srcEP -----------------------源端点cID ---------------------------簇IDlen ---------------------------数据长度*buf -------------------------数据*transID --------------------序列号options ----------------------发送选项radius -----------------------跳数*dstAddr决定了消息发送到那个设备及那个endpoint,而簇ID(cID)决定了设备接收到信息如何处理。簇可以理解为是一种约定,约定了信息怎么处理。 重要参数说明:1、地址 afAddrType_ttypedef struct{union{uint16 shortA //短地址}afAddrMode_taddrM //传送模式byteendP //端点号}afAddrType_t; 2、端点描述符 endPointDesc_ttypedef struct{byteendP //端点号byte*task_ //那一个任务的端点号SimpleDescriptionFormat_t*simpleD//简单的端点描述afNetworkLatencyReq_tlatencyR}endPointDesc_t; 3、简单描述符 SimpleDescriptionFormat_ttypedef struct{byte EndP //EPuint16 AppProfId; //应用规范IDuint16 AppDeviceId; //特定规范ID 的设备类型byte AppDevVer:4; //特定规范ID 的设备的版本byte Reserved:4; //AF_V1_SUPPORTusesforAppFlags:4.byte AppNumInC //输入簇ID 的个数cId_t *pAppInClusterL //输入簇ID 的列表byte AppNumOutC //输出簇ID 的个数cId_t *pAppOutClusterL //输出簇ID 的列表}SimpleDescriptionFormat_t;4、簇ID cIDClusterID--具体应用串ID5、发送选项 options发送选项有如下选项#defineAF_FRAGMENTED 0x01#defineAF_ACK_REQUEST 0x10#defineAF_DISCV_ROUTE 0x20#defineAF_EN_SECURITY 0x40#defineAF_SKIP_ROUTING 0x80其中AF_ACK_REQUEST为发送后需要接收方的确认6、半径、条数 radius传输跳数或传输半径,默认值为10 数据发送模式说明:在协议栈数据发送模式有以下几种:单播、组播、广播和直接发送四种模式。 广播发送广播发送可以分为三种,如果想使用广播发送,则只需将dstAddr-&addrMode设为AddrBroadcast,dstAddr-&addr-&shortAddr设置为相应的广播类型即可。具体的定义如下:NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)——数据包将被传送到网络上的所有设备,包括睡眠中的设备。对于睡眠中的设备,数据包将被保留在其父亲节点直到查询到它,或者消息超时。NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)——数据包将被传送到网络上的所有接收机的设备(RXONWHENIDLE),也就是说,除了睡眠中的所有设备。NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)——数据包发送给所有的路由器,包括协调器。 组播发送如果设备想传输数据到某一组设备,那么只需将dstAddr-&addrMode设为AddrGroup,dstAddr-&addr-&shortAddr设置为相应的组ID 即可。代码如下://Setupfortheflash command's destinationaddress-Group1SampleApp_Flash_DstAddr.addrMode=(afAddrMode_t)afAddrGSampleApp_Flash_DstAddr.endPoint=SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.addr.shortAddr=SAMPLEAPP_FLASH_GROUP;根据上面代码的配置,然后使用AF_DataRequest()函数来进行组播发送。 单播发送单播发送需要知道目标设备的短地址,需要将 dstAddr-& addrMode 设为Addr16Bit,dstAddr-&addr-&shortAddr设置为目标设备的短地址即可。代码如下:SampleApp_Flash_DstAddr.addrMode=(afAddrMode_t)afAddr16BSampleApp_Flash_DstAddr.endPoint=SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.addr.shortAddr=0x00;根据上面代码的配置,然后使用AF_DataRequest()函数来进行点对点发送。 绑定发送绑定发送目标设备可以是一个设备、多个设备、或者一组设备,由绑定表中的绑定信息决定。绑定发送,需要将dstAddr-&addrMode设为AddrNotPresent,dstAddr-&addr-&shortAddr设置为无效地址0xFFFE。代码如下:ZDAppNwkAddr.addrMode = AddrNotPZDAppNwkAddr.addr.shortAddr = 0xFFFE;根据上面代码的配置,然后使用AF_DataRequest()函数来进行绑定发送。 二、& && && && &数据的接受& && & 在Zstack中,如当接收到OTA信息后,将触发SYS_EVENT_MSG事件下的AF_INCOMING_MSG_CMD事件。我们只需处理AF_INCOMING_MSG_CMD便可。 数据收发实例:&&在SampleApp工程中Zstack要周期性的向网络所有设备广发送一个信息,其具体代码如下: 程序代码:void SampleApp_SendPeriodicMessage( void ){&&if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,& && && && && && && &&&SAMPLEAPP_PERIODIC_CLUSTERID,& && && && && && && &&&1,& && && && && && && &&&(uint8*)&SampleAppPeriodicCounter,& && && && && && && &&&&SampleApp_TransID,& && && && && && && &&&AF_DISCV_ROUTE,& && && && && && && &&&AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )&&{&&}&&else&&{& & // Error occurred in request to send.&&}}在这个函数中调用了函数AF_DataRequest()完成数据的发送,发送地址为SampleApp_Periodic_DstAddr,即SampleApp周期信息地址,该地址为0xFFFF,具体参见SampleApp。而簇ID为SAMPLEAPP_PERIODIC_CLUSTERID。 在接受端触发了目标设备的AF_INCOMING_MSG_CMD事件。具体程序代码如下: 程序代码:uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ){&&……&&case AF_INCOMING_MSG_CMD:SampleApp_MessageMSGCB( MSGpkt )……} 在对事件AF_INCOMING_MSG_CMD进行处理时,Zstack又调用了函数SampleApp_MessageMSGCB( MSGpkt ),其代码如下:程序代码:void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ){&&uint16 flashT &&switch ( pkt-&clusterId )&&{& & case SAMPLEAPP_PERIODIC_CLUSTERID:& && && &&&& & case SAMPLEAPP_FLASH_CLUSTERID:& && &flashTime = BUILD_UINT16(pkt-&cmd.Data[1], pkt-&cmd.Data[2] );& && &HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );& && & &&}}在函数SampleApp_MessageMSGCB( MSGpkt )中会根据接收到信息的簇ID的不同,进行相关的处理,也就是上面提及的簇是一种约定,约定了信息将如何处理。这个实例中Zstack对周期信息的处理就是什么都没有做,可以根据实际需要用户自己添加相关代码。说明:在Zstack协议栈中数据的发送函数为AF_DataRequest(),但是在SimpleApp实例中,Zstack调用了函数zb_SendDataRequest ()进行数据的发送,其实在函数zb_SendDataRequest ()中最终还是调用了AF_DataRequest()对数据进行的发送。
Powered by

我要回帖

更多关于 zstack串口接收 的文章

 

随机推荐