关于数据发送API 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表明