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

时间:2016-06-14 14:06:08

标签: contiki

我正在尝试使用PW-MAC协议在contiki中编写自己的RDC层。 我想知道如何在这一层发送广播,因为没有网络和传输层。 我必须使用的功能是:

NETSTACK_RDC.send(mac_callback_t sent, void *ptr)

但我真的不知道mac_callback_t和ptr是什么......源中的例子使用udp进行广播,所以如果我必须实现一个传输层,那将非常烦人。

感谢您的回答

2 个答案:

答案 0 :(得分:0)

你应该检查一下doc和代码,这对你有很大的帮助。 ptr是数据指针(void*)。所以它的数据要发送。 mac_call_back_t很明确:触发对mac图层的回调。 (函数指针)
要发送广播,只需发送到FFF地址即可。 (你必须用packetbuf更改地址,检查packetbuf的文档。(packet_buf的一个很好的链接:http://anrg.usc.edu/contiki/index.php/Packetbuffer_Basics
检查Rime中的broadcast_conn以了解广播的完成情况并举例说明。

答案 1 :(得分:0)

RDC代表“无线电任务循环”。 RDC层直接使用无线电功能,因此发送数据包可以像调用NETSTACK_RADIO.send(packetbuf_hdrptr(), packetbuf_totlen())一样简单。

Contiki网络堆栈具有以下分层结构:

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

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

因此,RDC层API的实现使用RADIO层API,并由/报告给MAC层API。您可以查看core/net/mac/nullrdc.c以了解如何实现简单的RDC驱动程序。

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

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

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