如何在Contiki的RDC层中发送广播数据包



我正在使用PW-MAC协议在Contiki中编码自己的RDC层。我想知道如何在此层发送广播,因为没有网络,也没有传输层。我必须使用的功能是:

NETSTACK_RDC.send(mac_callback_t sent, void *ptr)

但是我真的不知道Mac_callback_t和Ptr是什么...来源中的示例使用UDP进行广播,因此如果我必须实现运输层,这将非常烦人。

感谢您的回答

您应该检查一些文档和代码,这可能会对您有很大帮助。 ptr是数据指针(void*)。因此您要发送的数据。 mac_call_back_t很清楚:触发回调到MAC层。(功能指针)
要发送广播,只需发送到FFF地址即可。(您必须使用PacketBuf更改地址,检查Packetbuf的DOC。检查rime中的 broadcast_conn,以了解广播的完成方式和示例。

RDC代表"无线电骑行"。RDC层直接使用无线电函数,因此发送数据包可以像调用NETSTACK_RADIO.send(packetbuf_hdrptr(), packetbuf_totlen())一样简单。

contiki网络堆栈具有此分层结构:

NETWORK layer -> MAC layer -> RDC layer -> RADIO layer.

(在最近的版本中,网络和MAC层之间还有一个额外的LLSEC层。)

因此,RDC层API的实现使用无线电层API,并通过/报告将其调用到MAC层API。您可以查看core/net/mac/nullrdc.c以查看如何实现简单的RDC驱动程序。

正如您指出的,NETSTACK_RDC.send(mac_callback_t sent, void *ptr)采用两个参数。第一个是回调类型,您需要在完成发送后需要调用,第二个是用户数据,您需要传递给回调。

回调是在net/mac/mac.h中的typedef as:

typedef void (* mac_callback_t)(void *ptr, int status, int transmissions);
  • ptr是传递给NETSTACK_RDC.send;
  • 的用户数据指针
  • status是Mac状态代码,例如MAC_TX_OK-传输;
  • transmissions是传输的数量。

最新更新