在Contiki (Rime) 中,如何了解您成功传输了哪条单播消息?
How to understand which runicast message you have succesfully transmitted in Contiki (Rime)?
之后我用函数runicast_send
发送不同的runicast消息,我怎么知道触发回调sent_runicast
时哪个消息被确认了?
runicast.h 文件指出:
The runicast primitive adds two packet attributes: the single-hop
packet type and the single-hop packet ID. The runicast primitive
uses the packet ID attribute as a sequence number for matching
acknowledgement packets to the corresponding data packets.
但我在实践中不明白如何去做。有人可以举个例子吗?
一种方法是在发送数据包之前查看 struct runicast_conn *c
的字段 sndnxt
,然后比较 "sent" 中 packetbuf_attr(PACKETBUF_ATTR_PACKET_ID)
的值代码回调。
但是请注意,默认情况下,runicast 数据包 ID 的长度仅为 2 位。在大多数情况下足以对 ACK 进行多路分解,但可能不足以满足您的目的。 (可以通过重新定义 RUNICAST_PACKET_ID_BITS
来更改以位为单位的数据包 ID 大小。)
Rime 也已过时。不要在你的代码中使用它,尤其是生产代码,除非你知道你在做什么。 runicast
从来都不是 Rime 的亮点之一,我怀疑没有更好的选择(例如 uIPv6 堆栈)来满足您的需求。
之后我用函数runicast_send
发送不同的runicast消息,我怎么知道触发回调sent_runicast
时哪个消息被确认了?
runicast.h 文件指出:
The runicast primitive adds two packet attributes: the single-hop packet type and the single-hop packet ID. The runicast primitive uses the packet ID attribute as a sequence number for matching acknowledgement packets to the corresponding data packets.
但我在实践中不明白如何去做。有人可以举个例子吗?
一种方法是在发送数据包之前查看 struct runicast_conn *c
的字段 sndnxt
,然后比较 "sent" 中 packetbuf_attr(PACKETBUF_ATTR_PACKET_ID)
的值代码回调。
但是请注意,默认情况下,runicast 数据包 ID 的长度仅为 2 位。在大多数情况下足以对 ACK 进行多路分解,但可能不足以满足您的目的。 (可以通过重新定义 RUNICAST_PACKET_ID_BITS
来更改以位为单位的数据包 ID 大小。)
Rime 也已过时。不要在你的代码中使用它,尤其是生产代码,除非你知道你在做什么。 runicast
从来都不是 Rime 的亮点之一,我怀疑没有更好的选择(例如 uIPv6 堆栈)来满足您的需求。