协调器广播数据疑问
时间:10-02
整理:3721RD
点击:
小弟在项目中,需要这样的应用场景。协调器建立网络后,周期性的发送特定信息,终端入网后接受到广播信息后,然后向协调器发送动作指令,协调器接收到此动作指令后,进行相关的动作,然后回复终端一个响应信息,并且等待终端设备的ACK回应,在ACK响应处理中,如果是响应操作结果的话,则更新状态信息,否则重发响应信息。问题就出现在这里的。
我的广播消息是这样来发送的:
dstAddr.endPoint = sapi_epDesc.simpleDesc->EndPoint; dstAddr.addr.shortAddr = 0xFFFF; dstAddr.addrMode = (afAddrMode_t)AddrBroadcast; uint8 SendBuffer[2]; SendBuffer[0] = 0xFF; SendBuffer[1] = 0x55; AF_DataRequest(&dstAddr, &sapi_epDesc, 0x78, sizeof(SendBuffer), SendBuffer, &SmartLock_TransID, 0, 10);
协调器发送响应的代码为:
dstAddr.endPoint = sapi_epDesc.simpleDesc->EndPoint; //Set the endpoint dstAddr.addr.shortAddr = dest_nwk; dstAddr.addrMode = afAddr16Bit; status = AF_DataRequest(&dstAddr, &sapi_epDesc, KEY_OEPN_DOOR_CLUSTERID_CB, sizeof(Buffer), (uint8 *)&Buffer, &SmartLock_TransID, AF_ACK_REQUEST, AF_DEFAULT_RADIUS);
在ACK响应接收那里,广播消息也会有ACK响应,但是从sniffer抓包上面,是没有ACK响应的。现在要在ACK响应里面,区分广播的ACK和发送响应消息的ACK,请问,有什么好的办法来解决?广播的ACK是怎么回事?自己的猜测,可能是MAC向上层通知这个广播数据已经发送出去了,向上层的报告?请问,真实情况是怎么样的?
广播是没有ACK消息过来的。
如果你使能了APS ACK的话,可以通过发送出去的数据帧里面的transID判断
在你应用层里面加ack,afconfirm是af data request调用一次就触发一次