我正在使用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
是传输的数量。