2016-06-14 59 views
0

我试图用PW-MAC协议在contiki中编写我自己的RDC层。 我想知道如何在这一层发送广播,因为没有网络,也没有传输层。 我必须使用该功能将是:如何在Contiki的RDC层中发送广播数据包?

NETSTACK_RDC.send(mac_callback_t sent, void *ptr) 

但我真的不知道该怎么mac_callback_t和PTR是...在源的例子使用UDP广播所以这将是很烦人的,如果我有实现传输层。

谢谢您的回答

+0

你听起来很困惑。你知道如何发送单播数据包,并想修改你的代码来发送广播数据包,或者你只是想发送任何数据包?对于具有广播与单播数据包的RDC层,可能没有太大的差别。 – kfx

回答

0

您应该检查了一下文档和代码,可以帮助你很多。 ptr是数据指针(void*)。所以你的数据发送。 mac_call_back_t很清楚:触发到mac层的回调。 (函数指针)
要发送广播,只需发送到FFF地址。 (你必须改变与packetbuf地址,检查packetbuf的文档(一个很好的链接packet_buf:。http://anrg.usc.edu/contiki/index.php/Packetbuffer_Basics
检查雾凇的broadcast_conn了解广播是如何完成的,并有一个例子

+0

'ptr'肯定不是要发送的数据。 – kfx

+0

@kfx那么他的ptr的目的是什么?我在contiki上的所有应用程序都使用ptr作为数据。也许我做错了,但是告诉我什么是最初的目的。 –

+0

我为此为grepped Contiki代码。看起来它只被Rime使用来指定一个频道:https://github.com/contiki-os/contiki/blob/master/core/net/rime/rime.c#L183其他发送代码只传递NULL '作为'ptr'。 – kfx

0

RDC代表“无线电负载循环”的RDC层直接使用无线电功能,所以发送报文可能是一样简单主叫NETSTACK_RADIO.send(packetbuf_hdrptr(), packetbuf_totlen())

的半自助旅游旅行社网络堆栈具有此分层结构:

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

(在RECE nt版本在NETWORK和MAC层之间存在额外的LLSEC层)。

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

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

回调是在的typedef为net/mac/mac.h

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