TI大神:
小弟在测试相互之间通讯时,通过sniffer来观察相互之间通讯过程。
终端设备向协调器发送簇ID为0x16的命令,协调器处理完成后,回复簇ID为0x17的命令。这两条命令,是应用层主动来发送和处理的。每条命令都需要ACK响应。
从抓包来看,第一第二条是可以理解的。第三第四条,是我无法理解的。从已经抓到的包来看,当协调器口接收到簇ID为0x16的命令时,它反而将这条命令再转发给终端设备了,终端设备接收到此命令,回复给协调器,这后面这两条命令的APS层负载是空。
从这段时间的抓包来看,我有几个疑惑,请W大神解释一下。
1. 协调器接收到命令包时(device annonce、Match_Desc_Req等),会以广播的形式转发这条命令包,这将导致发送方接收到自己的发送的命令包,发送端的应用层需要对此命令包做对应命令的处理。在ZStack上,对于这种机制的设计思想是怎么样的? 我觉的比较奇怪,协调器收到发给自己的命令包,还要原封不同的广播发回去?
2. 协调器接收到数据包时(AF_Datarequest发送的数据包),会向源发送设备发送同样命令的数据包(其中,没有APS层负载数据)。源发送设备的应用层接收不到这样的信息,它应该是在NWK层直接处理返回了。 请问,这样的设计有什么意图?
VV:
因为数据包需要APS ACK,所以后面两条是你APS ACK。
关于问题1和问题2,我觉得你能不能先看下ZigBee Specification,www.zigbee.org上面可以下载到