我正在尝试使用PW-MAC协议在contiki中编写自己的RDC层。 我想知道如何在这一层发送广播,因为没有网络和传输层。 我必须使用的功能是:
NETSTACK_RDC.send(mac_callback_t sent, void *ptr)
但我真的不知道mac_callback_t和ptr是什么......源中的例子使用udp进行广播,所以如果我必须实现一个传输层,那将非常烦人。
感谢您的回答
答案 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
是传输次数。