微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 关于数据发送API AF_DataRequest()应答问题

关于数据发送API AF_DataRequest()应答问题

时间:10-02 整理:3721RD 点击:
经抓包分析,每个发送包里面都携带了ACK请求,即需要接收端给应答信号,但我不知道这个应答请求是在哪设置的。请问是 AF_DataRequest()默认带了应答请求,还是在别的地方可以设置是否需要应答请求呢?

这个好像是协议栈默认的吧我也不确定

谈谈这个函数

1,AF_DataRequest()的参数options设置的各个取值有什么特点和要求

#define AF_PREPROCESS 0x04 // Will force APS to callback to preprocess before calling NWK layer
#define AF_LIMIT_CONCENTRATOR 0x08
#define AF_ACK_REQUEST 0x10
#define AF_DISCV_ROUTE 0x20 // This option is no longer used, and will be taken out later
#define AF_EN_SECURITY 0x40
#define AF_SKIP_ROUTING 0x80

2,ack流程
一般数据的发送是由AF_DataRequest来完成的。AF_DataRequest 函数的调用会触发afDataConfirm(...)函数,数据的发送结果也由afDataConfirm(...)函数返回.

当数据到了接收方的MAC层,对方会回复一个MAC ACK,然后发送方在收到这个MAC ACK以后,会从底层发送一个AF_DATA_CONFIRM_CMD到应用层。

当数据到了接受放的应用层,则会回复一个APS ACK。MAC ACK是默认常开的,而APS ACK需要使能AF_ACK_REQUEST



3,探究配置细节
当调用AF_DataRequest()函数的option中并没有使能AF_ACK_REQUEST时,表明只需要MAC层的ACK,那么此时不会再有AF_DATA_CONFIRM_CMD事件。 只有当option中使能了AF_ACK_REQUEST时,才会有AF_DATA_CONFIRM_CMD事件返回

这些api文档不是都有讲吗,zb学习思路,仿真+抓包
无他

纠正一个错误
只要有AF_DataRequest就会产生AF_DATA_CONFIRM_CMD,不管有没有应答,甚至不管数据发没发出去。AF_DataRequest的作用不是发送数据,而是把要发送的数据放到发送队列,由MAC来发送。MAC收到要发的数据就务必尽全力把数据发出去,而且不管有没有发出去,要通过消息AF_DATA_CONFIRM_CMD返回给应用层

仔细理解这种设计欠妥
暂不追究对错问题
如果是 只要有AF_DataRequest就会产生AF_DATA_CONFIRM_CMD 那么何必要呢 直接return表明

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top