From f5ec7790099ade8386d0daeb6e2043f843ee745e Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Sat, 6 Feb 2016 17:12:37 +0100 Subject: [PATCH] fixup! fixup! emb6: add netdev2 wrapper --- pkg/emb6/contrib/netdev2/emb6_netdev2.c | 58 ++++++++++++++----------- pkg/emb6/include/emb6/netdev2.h | 2 +- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/pkg/emb6/contrib/netdev2/emb6_netdev2.c b/pkg/emb6/contrib/netdev2/emb6_netdev2.c index 1d268bb5bafcb..932da81ee33f7 100644 --- a/pkg/emb6/contrib/netdev2/emb6_netdev2.c +++ b/pkg/emb6/contrib/netdev2/emb6_netdev2.c @@ -21,6 +21,7 @@ #include "net/netdev2.h" #include "thread.h" +#include "evproc.h" #include "emb6.h" #include "linkaddr.h" #include "packetbuf.h" @@ -28,14 +29,17 @@ #define ENABLE_DEBUG (0) #include "debug.h" -#define _EMB6_STACKSIZE (THREAD_STACKSIZE_DEFAULT) -#define _EMB6_PRIO (THREAD_PRIORITY_MAIN - 4) -#define _EMB6_MSG_QUEUE_SIZE (8) -#define _EMB6_NETDEV2_MSG_TYPE (0x1236) +#define _TAIL_LEN (4) +#define _LQI_TAIL_POS (2) +#define _RSSI_TAIL_POS (3) +#define _EMB6_NETDEV2_STACKSIZE (THREAD_STACKSIZE_DEFAULT) +#define _EMB6_NETDEV2_PRIO (THREAD_PRIORITY_MAIN - 4) +#define _EMB6_NETDEV2_MSG_QUEUE_SIZE (8) +#define _EMB6_NETDEV2_MSG_TYPE (0x1236) extern uip_lladdr_t uip_lladdr; -static char _stack[_EMB6_STACKSIZE]; +static char _stack[_EMB6_NETDEV2_STACKSIZE]; static netdev2_t *_dev = NULL; static s_nsLowMac_t *_lowmac = NULL; static kernel_pid_t _pid = KERNEL_PID_UNDEF; @@ -73,13 +77,15 @@ static void _get_recv_pkt(void) { int8_t len; unsigned state; + char *dataptr; packetbuf_clear(); state = disableIRQ(); - - len = _dev->driver->recv(_dev, packetbuf_dataptr(), PACKETBUF_SIZE); - + dataptr = packetbuf_dataptr(); + len = _dev->driver->recv(_dev, dataptr, PACKETBUF_SIZE); + len -= _TAIL_LEN; + _last_rssi = dataptr[len + _RSSI_TAIL_POS]; /* Restore interrupts. */ restoreIRQ(state); @@ -116,15 +122,10 @@ static void _event_cb(netdev2_t *dev, netdev2_event_t event, void *arg) static void *_thread(void *args) { - s_ns_t *stack = args; - msg_t msg_queue[_EMB6_MSG_QUEUE_SIZE]; + (void)args; + msg_t msg_queue[_EMB6_NETDEV2_MSG_QUEUE_SIZE]; - msg_init_queue(msg_queue, _EMB6_MSG_QUEUE_SIZE); - - if (!emb6_init(stack)) { - DEBUG("Unable to initialize emb6\n"); - return NULL; - } + msg_init_queue(msg_queue, _EMB6_NETDEV2_MSG_QUEUE_SIZE); while (1) { msg_t msg; @@ -136,12 +137,13 @@ static void *_thread(void *args) return NULL; } -int emb6_netdev2_setup(netdev2_t *dev, s_ns_t *stack) +int emb6_netdev2_setup(netdev2_t *dev) { if (_dev == NULL) { _dev = dev; - _pid = thread_create(_stack, sizeof(_stack), _EMB6_PRIO, - THREAD_CREATE_STACKTEST, _thread, stack, "emb6"); + _pid = thread_create(_stack, sizeof(_stack), + _EMB6_NETDEV2_PRIO, THREAD_CREATE_STACKTEST, _thread, + NULL, "emb6_netdev2"); return 0; } return -1; @@ -149,10 +151,14 @@ int emb6_netdev2_setup(netdev2_t *dev, s_ns_t *stack) static int8_t _netdev2_init(s_ns_t *p_ns) { - if ((_dev != NULL) || (p_ns != NULL) || (p_ns->lmac != NULL)) { + if ((_dev != NULL) && (p_ns != NULL) && (p_ns->lmac != NULL)) { _dev->event_callback = _event_cb; - _dev->driver->get(_dev, NETOPT_ADDRESS_LONG, &uip_lladdr, - sizeof(uip_lladdr)); + _dev->driver->get(_dev, NETOPT_ADDRESS_LONG, &mac_phy_config.mac_address, + sizeof(mac_phy_config.mac_address)); + memcpy(&uip_lladdr, mac_phy_config.mac_address, + sizeof(mac_phy_config.mac_address)); + _dev->driver->get(_dev, NETOPT_NID, &mac_phy_config.pan_id, + sizeof(mac_phy_config.pan_id)); linkaddr_set_node_addr((linkaddr_t *)&uip_lladdr); _lowmac = p_ns->lmac; return 1; @@ -162,17 +168,17 @@ static int8_t _netdev2_init(s_ns_t *p_ns) static int8_t _netdev2_send(const void *pr_payload, uint8_t c_len) { - if (_dev == NULL) { + if (_dev != NULL) { const struct iovec vector = { .iov_base = (void *)pr_payload, .iov_len = c_len }; if (_dev->driver->send(_dev, &vector, 1) < 0) { - return 0; + return RADIO_TX_ERR; } - return 1; + return RADIO_TX_OK; } - return 0; + return RADIO_TX_ERR; } static int8_t _netdev2_on(void) diff --git a/pkg/emb6/include/emb6/netdev2.h b/pkg/emb6/include/emb6/netdev2.h index 256bffed78c29..3317069dd8650 100644 --- a/pkg/emb6/include/emb6/netdev2.h +++ b/pkg/emb6/include/emb6/netdev2.h @@ -30,7 +30,7 @@ extern "C" { extern const s_nsIf_t emb6_netdev2_driver; -int emb6_netdev2_setup(netdev2_t *dev, s_ns_t *stack); +int emb6_netdev2_setup(netdev2_t *dev); #ifdef __cplusplus }