AF_DataRequest发送时打开了AF_ACK_REQUEST选项,使能aps ack,希望得到端到端的ack,而不仅仅是一跳的。
请问,在GenericApp_ProcessEvent中处理AF_DATA_CONFIRM_CMD的时候,如果aps ack失败,返回的错误码是什么,ZApsNoAck吗?
测试结果来看,直连ZC的时候,错误码是ZMacNoACK,mesh的时候,错误码是ZNwkNoRoute,看着像MAC ack。
这样就没法分辨返回的是 MAC ack还是APS ack。应用希望只关心APS ack,再做一些业务处理。
请TI大神帮忙解答一下,谢谢。
Susan Yang:
MAC ACK是点到点的,当节点收到数据的目的地址和自己的MAC add一样的时候,就会回复MAC ACK出去,带有Seq number作为match对象取代了目标地址的功能。其他节点都会收到,但并不会做处理。而APS ACK是应用层的ACK,端到端的,只有Destination得点会发出去,中间的经过的路由不会发送。
在协议栈的ACK机制中,MAC层ACK是默认开启的。
chao wang22:
回复 Susan Yang:
谢谢,概念知道的。
我想问的是在AF_DATA_CONFIRM_CMD处理ack的时候,如何判断是不是APS ACK?
我开了应用层的APS ACK,希望在AF_DATA_CONFIRM_CMD处理APS ACK。
Brightness L:
回复 chao wang22:
您好,我现在遇到和您一样的问题,请问你解决了吗?
Aries Lord:
回复 chao wang22:
开启APS ACK有多次重传,但是error码并不能准确指示ApsNoAck的情况,MacNoAck和NwkNoRouter的优先级比ApsNoAck更高。
另外纠正一下Susan Yang的说法,MAC ACK并非无关节点不处理,MAC ACK本身就是广播发送的,在IEEE802.15.4的早期规范里,任何节点收到与自己无关的广播MAC ACK,会修正CSMA的定时时间。