想问一下,当我开启aps ack时,如果的我终端设备发送数据给协调器后,
1、协调器正确接收到数据,是单播返回给终端设备一个ack还是给应用层一个ack
2、如果1是正确的当终端检测到协调器正确的ack后,再开启下一次传输,那如果接收到了错误的zck,应用层是否需要用户处理?
3、有没有这种情况,协调器实际接收到了终端设备发来的数据,但是还没来及的给终端一个ack,会导致终端又发送了一次?
YiKai Chen:
1. 不知道你说的”是单播返回给终端设备一个ack”是什麼、幾本上就是会给应用层一个ack
2. 应用层要自己處理
3. Z-Stack底層不會、除非你應用程序部分这樣作
user4711142:
请问能否讲解一下aps ack 的流程?有没有类似的帖子或者guides?
user4711142:
回复 YiKai Chen:
搞不清楚,如果我发送的时候,令options = AF_ACK_REQUEST时,我应该怎么做?再协调器和终端两个设备上,要做哪些处理?能否讲解一下思路,以终端单播数据给协调器为例
Alvin Chen:
回复 user4711142:
去ZigBee alliance 下载specification
YiKai Chen:
回复 user4711142:
协调器上不用特別处理,终端设备上,就是記住你發送的sequence number然後在你终端设备zclXXX_event_loop的case AF_DATA_CONFIRM_CMD: 裡面去檢查有沒有收到相同sequence number的APS ack
user4711142:
回复 YiKai Chen:
您好,
1、我在ZDAPP_event_loop中case:AF_DATA_CONFIRM_CMD在串口打印提示信息。只有在上电的时候会执行一次
2、在zclXXX_event_loop中case:AF_DATA_CONFIRM_CMD每次都有相同的提示信息。
想问一下这两个有什么区别?第二种情况消息发送出去了,是给设备本身应用层的ack。还是接受方给发送方的ACK?
user4711142:
回复 user4711142:
我协调器广播的时候,竟然也会进入zclXXX_event_loop中case:AF_DATA_CONFIRM_CMD
Alvin Chen:
回复 user4711142:
这是正常的啊,有设备回复了ack 就会进入。
user4711142:
回复 YiKai Chen:
这个是两次的抓包文件。想知道哪个才是真正的ACK 消息,如图片所示,有两种ack的消息形式,这两种都是谁发出的?
ACK2.psd
YiKai Chen:
回复 user4711142:
Length=27的那個封包才是APS ack,length=5的是mac ack,其實你需要的是一個好的sniffer,比如說Ubiqua