ImageVerifierCode 换一换
格式:DOCX , 页数:7 ,大小:17.12KB ,
资源ID:4947054      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4947054.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(发送函数AFDataRequest.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

发送函数AFDataRequest.docx

1、发送函数AFDataRequestZ-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 )函数完成数据的发送。如果熟悉了其中的每个

2、参数的含义,就可以很灵活的使用发送函数发送自己的数据。 第一个参数 dstAddr,在文件AF.h中,该参数是一个结构体的指针。在该参数中除了指定了网络地址外,还需要指定目的地址的模式参数。 typedef struct union uint16 shortAddr; addr; afAddrMode_t addrMode; /afAddrMode_t是一个枚举类型模式参数 byte endPoint; /指定的端点号端点241254保留端点 范围 1-240 afAddrType_t;下面的是 afAddrMode_t结构体的定义 typedef enum afAddrNotPresent

3、= AddrNotPresent, /按照绑定表进行绑定传输 afAddr16Bit = Addr16Bit, / 指定目标网络地址进行单薄传输 16位 afAddrGroup = AddrGroup, / 组播传输 afAddrBroadcast = AddrBroadcast /广播传输 afAddrMode_t;enum AddrNotPresent = 0, AddrGroup = 1, Addr16Bit = 2, Addr64Bit = 3, / 指定IEEE地址进行单播传输 64位 AddrBroadcast = 15; 注意:ZigBee设备有两种类型的地址。一种是64位IEE

4、E地址(物理),即MAC地址,另一种是16位网络地址。64位地址使全球唯一的地址,设备将在它的生命周期中一直拥有它。它通常由制造商或者被安装时设置。这些地址由IEEE来维护和分配。16为网络地址是当设备加入网络后由协调器或路由器分配的。它在网络中是唯一的,用来在网络中鉴别设备和发送数据。第二个参数endPointDesc_t *srcEP,也是一个结构体的指针,源网络地址描述,每个终端都必须要有一个ZigBeezz的简单描述。typedef struct byte endPoint; /端点号 byte *task_id; / Pointer to location of the Applic

5、ation task ID. SimpleDescriptionFormat_t *simpleDesc; /设备的简单描述 afNetworkLatencyReq_t latencyReq; /枚举结构必须用 noLatencyReqs 填充 endPointDesc_t;目标设备的简单描述结构typedef struct byte EndPoint; /EP ID (EP=End Point) uint16 AppProfId; / profile ID(剖面ID) uint16 AppDeviceId; / Device ID byte AppDevVer:4; /Device Vers

6、ion 0x00 为 Version 1.0 byte Reserved:4; / AF_V1_SUPPORT uses for AppFlags:4. byte AppNumInClusters; /终端支持的输入簇的个数 cId_t *pAppInClusterList; /指向输入Cluster ID列表的指针 byte AppNumOutClusters; /输出簇的个数 cId_t *pAppOutClusterList; /指向输出Cluseter ID列表的指针 SimpleDescriptionFormat_t;typedef enum noLatencyReqs, fastB

7、eacons, slowBeacons afNetworkLatencyReq_t;第三个参数:uint16 cID 簇ID第四个参数:len 要发送的数据的长度第五个参数:uint8 *buf 指向发送数据缓冲的指针第六个参数:uint8 *transID事务序列号指针。如果消息缓存发送,这个函数将增加这个数字第七个参数:发送选项,可以由下面一项,或几项相或得到AF_ACK_REQUEST 0x10 要求APS应答,这是应用层的应答,只在直接发送(单播)时使用。AF_DISCV_ROUTE 0x20 总要包含这个选项AF_SKIP_ROUTING 0x80 设置这个选项将导致设备跳过路由而直

8、接发送消息。终点设备将不向其父亲发送消息。在直接发送(单播)和广播消息时很好用。第八个参数:uint8 radius 最大的跳数,用默认值AF_DEFAULT_RADIUS返回值:该函数的返回值:afStatus_t类型 枚举型的,成功 或typedef enum afStatus_SUCCESS, afStatus_FAILED = 0x80, afStatus_MEM_FAIL, afStatus_INVALID_PARAMETER afStatus_t;下面是这个函数完整的源代码: afStatus_t AF_DataRequest( afAddrType_t *dstAddr, end

9、PointDesc_t *srcEP, uint16 cID, uint16 len, uint8 *buf, uint8 *transID, uint8 options, uint8 radius ) pDescCB pfnDescCB; ZStatus_t stat; APSDE_DataReq_t req; afDataReqMTU_t mtu; / Verify source end point 判断源节点是否为空 if ( srcEP = NULL ) return afStatus_INVALID_PARAMETER; #if !defined( REFLECTOR ) if (

10、dstAddr-addrMode = afAddrNotPresent ) return afStatus_INVALID_PARAMETER; #endif / Verify destination address 判断目的地址 req.dstAddr.addr.shortAddr = dstAddr-addr.shortAddr; / Validate broadcasting 判断地址的模式 if ( ( dstAddr-addrMode = afAddr16Bit ) | ( dstAddr-addrMode = afAddrBroadcast ) ) / Check for vali

11、d broadcast values 核对有效的广播值 if( ADDR_NOT_BCAST != NLME_IsAddressBroadcast( dstAddr-addr.shortAddr ) ) / Force mode to broadcast 强制转换成广播模式 dstAddr-addrMode = afAddrBroadcast; else / Address is not a valid broadcast type 地址不是一个有效的广播地址类型 if ( dstAddr-addrMode = afAddrBroadcast ) return afStatus_INVALID

12、_PARAMETER; else if ( dstAddr-addrMode != afAddrGroup & dstAddr-addrMode != afAddrNotPresent ) return afStatus_INVALID_PARAMETER; req.dstAddr.addrMode = dstAddr-addrMode; req.profileID = ZDO_PROFILE_ID; if ( (pfnDescCB = afGetDescCB( srcEP ) ) uint16 *pID = (uint16 *)(pfnDescCB( AF_DESCRIPTOR_PROFIL

13、E_ID, srcEP-endPoint ); if ( pID ) req.profileID = *pID; osal_mem_free( pID ); else if ( srcEP-simpleDesc ) req.profileID = srcEP-simpleDesc-AppProfId; req.txOptions = 0; if ( ( options & AF_ACK_REQUEST ) & ( req.dstAddr.addrMode != AddrBroadcast ) & ( req.dstAddr.addrMode != AddrGroup ) ) req.txOpt

14、ions |= APS_TX_OPTIONS_ACK; if ( options & AF_SKIP_ROUTING ) req.txOptions |= APS_TX_OPTIONS_SKIP_ROUTING; if ( options & AF_EN_SECURITY ) req.txOptions |= APS_TX_OPTIONS_SECURITY_ENABLE; mtu.aps.secure = TRUE; else mtu.aps.secure = FALSE; mtu.kvp = FALSE; req.transID = *transID; req.srcEP = srcEP-e

15、ndPoint; req.dstEP = dstAddr-endPoint; req.clusterID = cID; req.asduLen = len; req.asdu = buf; req.discoverRoute = TRUE;/(uint8)(options & AF_DISCV_ROUTE) ? 1 : 0); req.radiusCounter = radius; if (len afDataReqMTU( &mtu ) ) if (apsfSendFragmented) req.txOptions |= AF_FRAGMENTED | APS_TX_OPTIONS_ACK;

16、 stat = (*apsfSendFragmented)( &req ); else stat = afStatus_INVALID_PARAMETER; else stat = APSDE_DataReq( &req ); if ( (req.dstAddr.addrMode = Addr16Bit) & (req.dstAddr.addr.shortAddr = NLME_GetShortAddr() ) afDataConfirm( srcEP-endPoint, *transID, stat ); if ( stat = afStatus_SUCCESS ) (*transID)+; return (afStatus_t)stat;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1