From 4d3c55f42b8c7d84b6d20fe945f34b0bebd77736 Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Mon, 1 Jun 2015 16:39:33 +0200 Subject: [PATCH 1/4] ng_slip: fix DEBUG output --- sys/net/gnrc/link_layer/slip/gnrc_slip.c | 29 ++++++++++++++++-------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/sys/net/gnrc/link_layer/slip/gnrc_slip.c b/sys/net/gnrc/link_layer/slip/gnrc_slip.c index d72d504261..a759dc13de 100644 --- a/sys/net/gnrc/link_layer/slip/gnrc_slip.c +++ b/sys/net/gnrc/link_layer/slip/gnrc_slip.c @@ -29,6 +29,7 @@ #include "msg.h" #include "net/gnrc.h" #include "periph/uart.h" +#include "od.h" #include "ringbuffer.h" #include "thread.h" #include "net/ipv6/hdr.h" @@ -134,10 +135,16 @@ static void _slip_receive(gnrc_slip_dev_t *dev, size_t bytes) hdr->if_pid = thread_getpid(); if (ringbuffer_get(dev->in_buf, pkt->data, bytes) != bytes) { - DEBUG("slip: could not read %zu bytes from ringbuffer\n", bytes); + DEBUG("slip: could not read %u bytes from ringbuffer\n", (unsigned)bytes); gnrc_pktbuf_release(pkt); return; } +#if ENABLE_DEBUG && defined(MODULE_OD) + else { + DEBUG("slip: received data\n"); + od_hex_dump(pkt->data, bytes, OD_WIDTH_DEFAULT); + } +#endif #ifdef MODULE_GNRC_IPV6 if ((pkt->size >= sizeof(ipv6_hdr_t)) && ipv6_hdr_is(pkt->data)) { @@ -155,7 +162,8 @@ static void _slip_receive(gnrc_slip_dev_t *dev, size_t bytes) gnrc_pktbuf_hold(pkt, gnrc_netreg_num(pkt->type, GNRC_NETREG_DEMUX_CTX_ALL) - 1); while (sendto != NULL) { - DEBUG("slip: sending pkt %p to PID %u\n", pkt, sendto->pid); + DEBUG("slip: sending pkt %p to PID %" PRIkernel_pid "\n", (void *)pkt, + sendto->pid); gnrc_netapi_receive(sendto->pid, pkt); sendto = gnrc_netreg_getnext(sendto); } @@ -175,7 +183,7 @@ static void _slip_send(gnrc_slip_dev_t *dev, gnrc_pktsnip_t *pkt) ptr = pkt->next; /* ignore gnrc_netif_hdr_t, we don't need it */ while (ptr != NULL) { - DEBUG("slip: send pktsnip of length %zu over UART_%d\n", ptr->size, uart); + DEBUG("slip: send pktsnip of length %u over UART_%d\n", (unsigned)ptr->size, dev->uart); char *data = ptr->data; for (size_t i = 0; i < ptr->size; i++) { @@ -216,7 +224,7 @@ static void *_slip(void *args) dev->slip_pid = thread_getpid(); gnrc_netif_add(dev->slip_pid); - DEBUG("slip: SLIP runs on UART_%d\n", uart); + DEBUG("slip: SLIP runs on UART_%d\n", dev->uart); while (1) { DEBUG("slip: waiting for incoming messages\n"); @@ -224,7 +232,8 @@ static void *_slip(void *args) switch (msg.type) { case _SLIP_MSG_TYPE: - DEBUG("slip: incoming message from UART in buffer\n"); + DEBUG("slip: incoming message of size %" PRIu32 " from UART_%d in buffer\n", + msg.content.value, dev->uart); _slip_receive(dev, (size_t)msg.content.value); break; @@ -264,10 +273,10 @@ kernel_pid_t gnrc_slip_init(gnrc_slip_dev_t *dev, uart_t uart, uint32_t baudrate ringbuffer_init(dev->out_buf, dev->tx_mem, sizeof(dev->tx_mem)); /* initialize UART */ - DEBUG("slip: initialize UART_%d\n", uart); - res = uart_init(uart, baudrate, _slip_rx_cb, _slip_tx_cb, dev); - if (res < 0) { - DEBUG("slip: error initializing UART_%i with baudrate %u\n", + DEBUG("slip: initialize UART_%d with baudrate %" PRIu32 "\n", uart, + baudrate); + if (uart_init(uart, baudrate, _slip_rx_cb, _slip_tx_cb, dev) < 0) { + DEBUG("slip: error initializing UART_%i with baudrate %" PRIu32 "\n", uart, baudrate); return -ENODEV; } @@ -280,5 +289,5 @@ kernel_pid_t gnrc_slip_init(gnrc_slip_dev_t *dev, uart_t uart, uint32_t baudrate DEBUG("slip: unable to create SLIP thread\n"); return -EFAULT; } - return res; + return pid; } From b47c4af50bcd567294673cdb0daa3aa3b76ef08c Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Mon, 1 Jun 2015 16:40:24 +0200 Subject: [PATCH 2/4] ng_slip: fix some bugs --- sys/include/net/gnrc/slip.h | 4 ++-- sys/net/gnrc/link_layer/slip/gnrc_slip.c | 23 +++++++++++------------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/sys/include/net/gnrc/slip.h b/sys/include/net/gnrc/slip.h index ca9039c79b..2e8f620c9d 100644 --- a/sys/include/net/gnrc/slip.h +++ b/sys/include/net/gnrc/slip.h @@ -49,8 +49,8 @@ extern "C" { */ typedef struct { uart_t uart; /**< the UART interface */ - ringbuffer_t *in_buf; /**< RX buffer */ - ringbuffer_t *out_buf; /**< TX buffer */ + ringbuffer_t in_buf; /**< RX buffer */ + ringbuffer_t out_buf; /**< TX buffer */ char rx_mem[GNRC_SLIP_BUFSIZE]; /**< memory used by RX buffer */ char tx_mem[GNRC_SLIP_BUFSIZE]; /**< memory used by TX buffer */ uint32_t in_bytes; /**< the number of bytes received of a diff --git a/sys/net/gnrc/link_layer/slip/gnrc_slip.c b/sys/net/gnrc/link_layer/slip/gnrc_slip.c index a759dc13de..0169d991e7 100644 --- a/sys/net/gnrc/link_layer/slip/gnrc_slip.c +++ b/sys/net/gnrc/link_layer/slip/gnrc_slip.c @@ -63,20 +63,19 @@ static void _slip_rx_cb(void *arg, char data) _SLIP_DEV(arg)->in_bytes = 0; } - - if (_SLIP_DEV(arg)->in_esc) { + else if (_SLIP_DEV(arg)->in_esc) { _SLIP_DEV(arg)->in_esc = 0; switch (data) { case (_SLIP_END_ESC): - if (ringbuffer_add_one(_SLIP_DEV(arg)->in_buf, _SLIP_END) < 0) { + if (ringbuffer_add_one(&_SLIP_DEV(arg)->in_buf, _SLIP_END) < 0) { _SLIP_DEV(arg)->in_bytes++; } break; case (_SLIP_ESC_ESC): - if (ringbuffer_add_one(_SLIP_DEV(arg)->in_buf, _SLIP_ESC) < 0) { + if (ringbuffer_add_one(&_SLIP_DEV(arg)->in_buf, _SLIP_ESC) < 0) { _SLIP_DEV(arg)->in_bytes++; } @@ -90,7 +89,7 @@ static void _slip_rx_cb(void *arg, char data) _SLIP_DEV(arg)->in_esc = 1; } else { - if (ringbuffer_add_one(_SLIP_DEV(arg)->in_buf, data) < 0) { + if (ringbuffer_add_one(&_SLIP_DEV(arg)->in_buf, data) < 0) { _SLIP_DEV(arg)->in_bytes++; } } @@ -98,8 +97,8 @@ static void _slip_rx_cb(void *arg, char data) int _slip_tx_cb(void *arg) { - if (_SLIP_DEV(arg)->out_buf->avail > 0) { - char c = (char)ringbuffer_get_one(_SLIP_DEV(arg)->out_buf); + if (_SLIP_DEV(arg)->out_buf.avail > 0) { + char c = (char)ringbuffer_get_one(&_SLIP_DEV(arg)->out_buf); uart_write((uart_t)(_SLIP_DEV(arg)->uart), c); return 1; } @@ -134,7 +133,7 @@ static void _slip_receive(gnrc_slip_dev_t *dev, size_t bytes) gnrc_netif_hdr_init(hdr, 0, 0); hdr->if_pid = thread_getpid(); - if (ringbuffer_get(dev->in_buf, pkt->data, bytes) != bytes) { + if (ringbuffer_get(&dev->in_buf, pkt->data, bytes) != bytes) { DEBUG("slip: could not read %u bytes from ringbuffer\n", (unsigned)bytes); gnrc_pktbuf_release(pkt); return; @@ -171,7 +170,7 @@ static void _slip_receive(gnrc_slip_dev_t *dev, size_t bytes) static inline void _slip_send_char(gnrc_slip_dev_t *dev, char c) { - ringbuffer_add_one(dev->out_buf, c); + ringbuffer_add_one(&dev->out_buf, c); uart_tx_begin(dev->uart); } @@ -260,17 +259,17 @@ static void *_slip(void *args) kernel_pid_t gnrc_slip_init(gnrc_slip_dev_t *dev, uart_t uart, uint32_t baudrate, char *stack, size_t stack_size, char priority) { - int res; kernel_pid_t pid; /* reset device descriptor fields */ + dev->uart = uart; dev->in_bytes = 0; dev->in_esc = 0; dev->slip_pid = KERNEL_PID_UNDEF; /* initialize buffers */ - ringbuffer_init(dev->in_buf, dev->rx_mem, sizeof(dev->rx_mem)); - ringbuffer_init(dev->out_buf, dev->tx_mem, sizeof(dev->tx_mem)); + ringbuffer_init(&dev->in_buf, dev->rx_mem, sizeof(dev->rx_mem)); + ringbuffer_init(&dev->out_buf, dev->tx_mem, sizeof(dev->tx_mem)); /* initialize UART */ DEBUG("slip: initialize UART_%d with baudrate %" PRIu32 "\n", uart, From b66ada2ae7752b0f90181a85491945ac41207603 Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Mon, 1 Jun 2015 16:41:03 +0200 Subject: [PATCH 3/4] ng_slip: fix auto initialization --- sys/auto_init/auto_init.c | 5 +++++ sys/auto_init/netif/auto_init_slip.c | 8 ++++---- tests/slip/Makefile | 5 ++++- tests/slip/slip_params.h | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/sys/auto_init/auto_init.c b/sys/auto_init/auto_init.c index e3f305a913..6f07e43a07 100644 --- a/sys/auto_init/auto_init.c +++ b/sys/auto_init/auto_init.c @@ -167,6 +167,11 @@ void auto_init(void) auto_init_at86rf2xx(); #endif +#ifdef MODULE_NG_SLIP + extern void auto_init_slip(void); + auto_init_slip(); +#endif + #ifdef MODULE_XBEE extern void auto_init_xbee(void); auto_init_xbee(); diff --git a/sys/auto_init/netif/auto_init_slip.c b/sys/auto_init/netif/auto_init_slip.c index 94510aec8d..2ebfe97079 100644 --- a/sys/auto_init/netif/auto_init_slip.c +++ b/sys/auto_init/netif/auto_init_slip.c @@ -23,7 +23,7 @@ #include "net/gnrc/nomac.h" #include "net/gnrc.h" -#include "slip.h" +#include "net/gnrc/slip.h" #include "slip_params.h" #define ENABLE_DEBUG (0) @@ -37,8 +37,8 @@ static gnrc_slip_dev_t slip_devs[SLIP_NUM]; * @brief Define stack parameters for the MAC layer thread * @{ */ -#define SLIP_STACKSIZE (KERNEL_CONF_STACKSIZE_DEFAULT) -#define SLIP_PRIO (PRIORITY_MAIN - 4) +#define SLIP_STACKSIZE (THREAD_STACKSIZE_DEFAULT) +#define SLIP_PRIO (THREAD_PRIORITY_MAIN - 4) /** * @brief Stacks for the MAC layer threads @@ -55,7 +55,7 @@ void auto_init_slip(void) SLIP_PRIO); if (res <= KERNEL_PID_UNDEF) { - DEBUG("Error initializing XBee radio device!"); + DEBUG("Error initializing SLIP radio device!\n"); } } } diff --git a/tests/slip/Makefile b/tests/slip/Makefile index 1c63c8de2a..c8ac08ad17 100644 --- a/tests/slip/Makefile +++ b/tests/slip/Makefile @@ -3,17 +3,20 @@ include ../Makefile.tests_common BOARD_INSUFFICIENT_RAM := stm32f0discovery +USEMODULE += auto_init_ng_netif USEMODULE += gnrc USEMODULE += gnrc_pktdump USEMODULE += gnrc_slip USEMODULE += shell USEMODULE += shell_commands +CFLAGS += -I$(CURDIR) + ifneq (,$(SLIP_UART)) CFLAGS += -DSLIP_UART=$(SLIP_UART) else # set default - CFLAGS += -DSLIP_UART=UART_0 + CFLAGS += -DSLIP_UART="(UART_NUMOF-1)" endif ifneq (,$(SLIP_BAUDRATE)) CFLAGS += -DSLIP_BAUDRATE=$(SLIP_BAUDRATE) diff --git a/tests/slip/slip_params.h b/tests/slip/slip_params.h index 814297a2ba..526507f878 100644 --- a/tests/slip/slip_params.h +++ b/tests/slip/slip_params.h @@ -25,7 +25,7 @@ extern "C" { #endif -static gnrc_slip_params_t xbee_params[] = { +static gnrc_slip_params_t gnrc_slip_params[] = { { .uart = SLIP_UART, .baudrate = SLIP_BAUDRATE, From 8609678bcd2b55cd1b53254d74d7f02430a58816 Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Thu, 16 Jul 2015 22:15:40 +0200 Subject: [PATCH 4/4] ng_slip: port to ng_netapi_dispatch_receive() --- sys/net/gnrc/link_layer/slip/gnrc_slip.c | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/sys/net/gnrc/link_layer/slip/gnrc_slip.c b/sys/net/gnrc/link_layer/slip/gnrc_slip.c index 0169d991e7..1e40b8ae9e 100644 --- a/sys/net/gnrc/link_layer/slip/gnrc_slip.c +++ b/sys/net/gnrc/link_layer/slip/gnrc_slip.c @@ -110,7 +110,6 @@ int _slip_tx_cb(void *arg) static void _slip_receive(gnrc_slip_dev_t *dev, size_t bytes) { gnrc_netif_hdr_t *hdr; - gnrc_netreg_entry_t *sendto; gnrc_pktsnip_t *pkt, *netif_hdr; pkt = gnrc_pktbuf_add(NULL, NULL, bytes, GNRC_NETTYPE_UNDEF); @@ -151,21 +150,10 @@ static void _slip_receive(gnrc_slip_dev_t *dev, size_t bytes) } #endif - sendto = gnrc_netreg_lookup(pkt->type, GNRC_NETREG_DEMUX_CTX_ALL); - - if (sendto == NULL) { + if (gnrc_netapi_dispatch_receive(pkt->type, GNRC_NETREG_DEMUX_CTX_ALL, pkt) == 0) { DEBUG("slip: unable to forward packet of type %i\n", pkt->type); gnrc_pktbuf_release(pkt); } - - gnrc_pktbuf_hold(pkt, gnrc_netreg_num(pkt->type, GNRC_NETREG_DEMUX_CTX_ALL) - 1); - - while (sendto != NULL) { - DEBUG("slip: sending pkt %p to PID %" PRIkernel_pid "\n", (void *)pkt, - sendto->pid); - gnrc_netapi_receive(sendto->pid, pkt); - sendto = gnrc_netreg_getnext(sendto); - } } static inline void _slip_send_char(gnrc_slip_dev_t *dev, char c)