From 4597193da47616631a65b091c24b2e1193f2c396 Mon Sep 17 00:00:00 2001
From: Martine Lenders <m.lenders@fu-berlin.de>
Date: Wed, 26 Jul 2017 17:51:27 +0200
Subject: [PATCH] nrfmin: port for gnrc_netif2

---
 cpu/nrf5x_common/radio/nrfmin/nrfmin_gnrc.c | 39 +++++++++++++++++++--
 1 file changed, 37 insertions(+), 2 deletions(-)

diff --git a/cpu/nrf5x_common/radio/nrfmin/nrfmin_gnrc.c b/cpu/nrf5x_common/radio/nrfmin/nrfmin_gnrc.c
index d43c7d0d9e..efab2f0be9 100644
--- a/cpu/nrf5x_common/radio/nrfmin/nrfmin_gnrc.c
+++ b/cpu/nrf5x_common/radio/nrfmin/nrfmin_gnrc.c
@@ -18,8 +18,13 @@
  * @}
  */
 
+#include "net/gnrc.h"
 #include "thread.h"
+#ifdef MODULE_GNRC_NETIF2
+#include "net/gnrc/netif2.h"
+#else
 #include "net/gnrc/netdev.h"
+#endif
 
 #include "nrfmin_gnrc.h"
 
@@ -31,8 +36,12 @@
  * @{
  */
 #ifndef NRFMIN_GNRC_THREAD_PRIO
+#ifdef MODULE_GNRC_NETIF2
+#define NRFMIN_GNRC_THREAD_PRIO     GNRC_NETIF2_PRIO
+#else
 #define NRFMIN_GNRC_THREAD_PRIO     GNRC_NETDEV_MAC_PRIO
 #endif
+#endif
 
 #ifndef NRFMIN_GNRC_STACKSIZE
 #define NRFMIN_GNRC_STACKSIZE       THREAD_STACKSIZE_DEFAULT
@@ -49,10 +58,12 @@
  */
 static char stack[NRFMIN_GNRC_STACKSIZE];
 
+#ifndef MODULE_GNRC_NETIF2
 /**
  * @brief   Allocate the GNRC netdev data structure.
  */
 static gnrc_netdev_t plug;
+#endif
 
 
 static int hdr_netif_to_nrfmin(nrfmin_hdr_t *nrfmin, gnrc_pktsnip_t *pkt)
@@ -81,7 +92,11 @@ static int hdr_netif_to_nrfmin(nrfmin_hdr_t *nrfmin, gnrc_pktsnip_t *pkt)
     return 0;
 }
 
+#ifdef MODULE_GNRC_NETIF2
+static int gnrc_nrfmin_send(gnrc_netif2_t *dev, gnrc_pktsnip_t *pkt)
+#else
 static int gnrc_nrfmin_send(gnrc_netdev_t *dev, gnrc_pktsnip_t *pkt)
+#endif
 {
     int res;
     struct iovec *vec;
@@ -124,7 +139,11 @@ static int gnrc_nrfmin_send(gnrc_netdev_t *dev, gnrc_pktsnip_t *pkt)
     return res;
 }
 
+#ifdef MODULE_GNRC_NETIF2
+static gnrc_pktsnip_t *gnrc_nrfmin_recv(gnrc_netif2_t *dev)
+#else
 static gnrc_pktsnip_t *gnrc_nrfmin_recv(gnrc_netdev_t *dev)
+#endif
 {
     int pktsize;
     nrfmin_hdr_t *nrfmin;
@@ -175,7 +194,7 @@ static gnrc_pktsnip_t *gnrc_nrfmin_recv(gnrc_netdev_t *dev)
     }
     netif->lqi = 0;
     netif->rssi = 0;
-    netif->if_pid = plug.pid;
+    netif->if_pid = dev->pid;
     pkt_snip->type = nrfmin->proto;
 
     /* finally: remove the nrfmin header and append the netif header */
@@ -185,11 +204,26 @@ static gnrc_pktsnip_t *gnrc_nrfmin_recv(gnrc_netdev_t *dev)
     return pkt_snip;
 }
 
+#ifdef MODULE_GNRC_NETIF2
+static const gnrc_netif2_ops_t gnrc_nrfmin_ops = {
+    .send = gnrc_nrfmin_send,
+    .recv = gnrc_nrfmin_recv,
+    .get = gnrc_netif2_get_from_netdev,
+    .set = gnrc_netif2_set_from_netdev,
+};
+#endif
+
 void gnrc_nrfmin_init(void)
 {
     /* setup the NRFMIN driver */
     nrfmin_setup();
-
+#ifdef MODULE_GNRC_NETIF2
+    if (!gnrc_netif2_create(stack, sizeof(stack), NRFMIN_GNRC_THREAD_PRIO,
+                            "nrfmin", (netdev_t *)&nrfmin_dev,
+                            &gnrc_nrfmin_ops)) {
+        DEBUG("[nrfmin_dev] error initializing GNRC interface for nrfmin radio\n");
+    }
+#else
     /* initialize the GNRC plug struct */
     plug.send = gnrc_nrfmin_send;
     plug.recv = gnrc_nrfmin_recv;
@@ -198,4 +232,5 @@ void gnrc_nrfmin_init(void)
     gnrc_netdev_init(stack, sizeof(stack),
                       NRFMIN_GNRC_THREAD_PRIO,
                       "nrfmin", &plug);
+#endif
 }
-- 
GitLab