From 13639c1bb33be4de502fcb7066071762292e43df Mon Sep 17 00:00:00 2001
From: smlng <s@mlng.net>
Date: Fri, 30 Jun 2017 13:53:29 +0200
Subject: [PATCH] drivers, at86rf2xx: cleanup

    - update documentation
    - adapt constness
    - fix code alignment and stlye
---
 drivers/at86rf2xx/at86rf2xx.c                 |   9 +-
 drivers/at86rf2xx/at86rf2xx_getset.c          | 102 ++++++++----------
 drivers/at86rf2xx/at86rf2xx_internal.c        |  55 ++++------
 drivers/at86rf2xx/at86rf2xx_netdev.c          |  32 +++---
 .../at86rf2xx/include/at86rf2xx_internal.h    |  50 ++++++---
 drivers/at86rf2xx/include/at86rf2xx_params.h  |   1 -
 drivers/include/at86rf2xx.h                   |  61 +++++------
 7 files changed, 146 insertions(+), 164 deletions(-)

diff --git a/drivers/at86rf2xx/at86rf2xx.c b/drivers/at86rf2xx/at86rf2xx.c
index 7b2592da04..fb5436d0b1 100644
--- a/drivers/at86rf2xx/at86rf2xx.c
+++ b/drivers/at86rf2xx/at86rf2xx.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2013 Alaeddine Weslati <alaeddine.weslati@inria.fr>
  * Copyright (C) 2015 Freie Universität Berlin
+ *               2017 HAW Hamburg
  *
  * This file is subject to the terms and conditions of the GNU Lesser
  * General Public License v2.1. See the file LICENSE in the top level
@@ -19,7 +20,7 @@
  * @author      Hauke Petersen <hauke.petersen@fu-berlin.de>
  * @author      Kaspar Schleiser <kaspar@schleiser.de>
  * @author      Oliver Hahm <oliver.hahm@inria.fr>
- *
+ * @author      Sebastian Meiling <s@mlng.net>
  * @}
  */
 
@@ -124,7 +125,7 @@ void at86rf2xx_reset(at86rf2xx_t *dev)
     DEBUG("at86rf2xx_reset(): reset complete.\n");
 }
 
-size_t at86rf2xx_send(at86rf2xx_t *dev, uint8_t *data, size_t len)
+size_t at86rf2xx_send(at86rf2xx_t *dev, const uint8_t *data, size_t len)
 {
     /* check data length */
     if (len > AT86RF2XX_MAX_PKT_LENGTH) {
@@ -149,7 +150,7 @@ void at86rf2xx_tx_prepare(at86rf2xx_t *dev)
     dev->tx_frame_len = IEEE802154_FCS_LEN;
 }
 
-size_t at86rf2xx_tx_load(at86rf2xx_t *dev, uint8_t *data,
+size_t at86rf2xx_tx_load(at86rf2xx_t *dev, const uint8_t *data,
                          size_t len, size_t offset)
 {
     dev->tx_frame_len += (uint8_t)len;
@@ -157,7 +158,7 @@ size_t at86rf2xx_tx_load(at86rf2xx_t *dev, uint8_t *data,
     return offset + len;
 }
 
-void at86rf2xx_tx_exec(at86rf2xx_t *dev)
+void at86rf2xx_tx_exec(const at86rf2xx_t *dev)
 {
     netdev_t *netdev = (netdev_t *)dev;
 
diff --git a/drivers/at86rf2xx/at86rf2xx_getset.c b/drivers/at86rf2xx/at86rf2xx_getset.c
index bfd55da17f..e5558e720a 100644
--- a/drivers/at86rf2xx/at86rf2xx_getset.c
+++ b/drivers/at86rf2xx/at86rf2xx_getset.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2015 Freie Universität Berlin
+ *               2017 HAW Hamburg
  *
  * This file is subject to the terms and conditions of the GNU Lesser
  * General Public License v2.1. See the file LICENSE in the top level
@@ -19,7 +20,7 @@
  * @author      Daniel Krebs <github@daniel-krebs.net>
  * @author      Kévin Roussel <Kevin.Roussel@inria.fr>
  * @author      Joakim Nohlgård <joakim.nohlgard@eistec.se>
- *
+ * @author      Sebastian Meiling <s@mlng.net>
  * @}
  */
 
@@ -48,13 +49,15 @@ static const uint8_t dbm_to_tx_pow_915[] = {0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x17,
                                             0x04, 0x03, 0x02, 0x01, 0x00, 0x86,
                                             0x40, 0x84, 0x83, 0x82, 0x80, 0xc1,
                                             0xc0};
-static int16_t _tx_pow_to_dbm_212b(uint8_t channel, uint8_t page, uint8_t reg) {
-    const uint8_t *dbm_to_tx_pow;
-    size_t nelem;
 
+static int16_t _tx_pow_to_dbm_212b(uint8_t channel, uint8_t page, uint8_t reg)
+{
     if (page == 0 || page == 2) {
-        /* Channel 0 is 868.3 MHz */
+        const uint8_t *dbm_to_tx_pow;
+        size_t nelem;
+
         if (channel == 0) {
+            /* Channel 0 is 868.3 MHz */
             dbm_to_tx_pow = &dbm_to_tx_pow_868[0];
             nelem = sizeof(dbm_to_tx_pow_868) / sizeof(dbm_to_tx_pow_868[0]);
         }
@@ -63,16 +66,14 @@ static int16_t _tx_pow_to_dbm_212b(uint8_t channel, uint8_t page, uint8_t reg) {
             dbm_to_tx_pow = &dbm_to_tx_pow_915[0];
             nelem = sizeof(dbm_to_tx_pow_915) / sizeof(dbm_to_tx_pow_915[0]);
         }
-    }
-    else {
-        return 0;
-    }
 
-    for(size_t i = 0; i < nelem; i++){
-        if (dbm_to_tx_pow[i] == reg) {
-            return i - 25;
+        for (size_t i = 0; i < nelem; ++i) {
+            if (dbm_to_tx_pow[i] == reg) {
+                return (i - AT86RF2XX_TXPOWER_OFF);
+            }
         }
     }
+
     return 0;
 }
 
@@ -92,7 +93,7 @@ static const uint8_t dbm_to_tx_pow[] = {0x0f, 0x0f, 0x0f, 0x0e, 0x0e, 0x0e,
                                         0x05, 0x03, 0x00};
 #endif
 
-uint16_t at86rf2xx_get_addr_short(at86rf2xx_t *dev)
+uint16_t at86rf2xx_get_addr_short(const at86rf2xx_t *dev)
 {
     return (dev->netdev.short_addr[0] << 8) | dev->netdev.short_addr[1];
 }
@@ -112,7 +113,7 @@ void at86rf2xx_set_addr_short(at86rf2xx_t *dev, uint16_t addr)
                         dev->netdev.short_addr[0]);
 }
 
-uint64_t at86rf2xx_get_addr_long(at86rf2xx_t *dev)
+uint64_t at86rf2xx_get_addr_long(const at86rf2xx_t *dev)
 {
     uint64_t addr;
     uint8_t *ap = (uint8_t *)(&addr);
@@ -131,7 +132,7 @@ void at86rf2xx_set_addr_long(at86rf2xx_t *dev, uint64_t addr)
     }
 }
 
-uint8_t at86rf2xx_get_chan(at86rf2xx_t *dev)
+uint8_t at86rf2xx_get_chan(const at86rf2xx_t *dev)
 {
     return dev->netdev.chan;
 }
@@ -149,7 +150,7 @@ void at86rf2xx_set_chan(at86rf2xx_t *dev, uint8_t channel)
     at86rf2xx_configure_phy(dev);
 }
 
-uint8_t at86rf2xx_get_page(at86rf2xx_t *dev)
+uint8_t at86rf2xx_get_page(const at86rf2xx_t *dev)
 {
 #ifdef MODULE_AT86RF212B
     return dev->page;
@@ -162,19 +163,17 @@ uint8_t at86rf2xx_get_page(at86rf2xx_t *dev)
 void at86rf2xx_set_page(at86rf2xx_t *dev, uint8_t page)
 {
 #ifdef MODULE_AT86RF212B
-    if ((page != 0) && (page != 2)) {
-        return;
+    if ((page == 0) || (page == 2)) {
+        dev->page = page;
+        at86rf2xx_configure_phy(dev);
     }
-    dev->page = page;
-
-    at86rf2xx_configure_phy(dev);
 #else
     (void) dev;
     (void) page;
 #endif
 }
 
-uint16_t at86rf2xx_get_pan(at86rf2xx_t *dev)
+uint16_t at86rf2xx_get_pan(const at86rf2xx_t *dev)
 {
     return dev->netdev.pan;
 }
@@ -188,7 +187,7 @@ void at86rf2xx_set_pan(at86rf2xx_t *dev, uint16_t pan)
     at86rf2xx_reg_write(dev, AT86RF2XX_REG__PAN_ID_1, le_pan.u8[1]);
 }
 
-int16_t at86rf2xx_get_txpower(at86rf2xx_t *dev)
+int16_t at86rf2xx_get_txpower(const at86rf2xx_t *dev)
 {
 #ifdef MODULE_AT86RF212B
     uint8_t txpower = at86rf2xx_reg_read(dev, AT86RF2XX_REG__PHY_TX_PWR);
@@ -201,28 +200,15 @@ int16_t at86rf2xx_get_txpower(at86rf2xx_t *dev)
 #endif
 }
 
-void at86rf2xx_set_txpower(at86rf2xx_t *dev, int16_t txpower)
+void at86rf2xx_set_txpower(const at86rf2xx_t *dev, int16_t txpower)
 {
-#ifdef MODULE_AT86RF212B
-    txpower += 25;
-#else
-    txpower += 17;
-#endif
+    txpower += AT86RF2XX_TXPOWER_OFF;
+
     if (txpower < 0) {
         txpower = 0;
-#ifdef MODULE_AT86RF212B
     }
-    else if (txpower > 36) {
-        txpower = 36;
-#elif MODULE_AT86RF233
-    }
-    else if (txpower > 21) {
-        txpower = 21;
-#else
-    }
-    else if (txpower > 20) {
-        txpower = 20;
-#endif
+    else if (txpower > AT86RF2XX_TXPOWER_MAX) {
+        txpower = AT86RF2XX_TXPOWER_MAX;
     }
 #ifdef MODULE_AT86RF212B
     if (dev->netdev.chan == 0) {
@@ -239,21 +225,20 @@ void at86rf2xx_set_txpower(at86rf2xx_t *dev, int16_t txpower)
 #endif
 }
 
-uint8_t at86rf2xx_get_max_retries(at86rf2xx_t *dev)
+uint8_t at86rf2xx_get_max_retries(const at86rf2xx_t *dev)
 {
     return (at86rf2xx_reg_read(dev, AT86RF2XX_REG__XAH_CTRL_0) >> 4);
 }
 
-void at86rf2xx_set_max_retries(at86rf2xx_t *dev, uint8_t max)
+void at86rf2xx_set_max_retries(const at86rf2xx_t *dev, uint8_t max)
 {
-    max = (max > 7) ? 7 : max;
     uint8_t tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__XAH_CTRL_0);
     tmp &= ~(AT86RF2XX_XAH_CTRL_0__MAX_FRAME_RETRIES);
-    tmp |= (max << 4);
+    tmp |= ((max > 7) ? 7 : max) << 4;
     at86rf2xx_reg_write(dev, AT86RF2XX_REG__XAH_CTRL_0, tmp);
 }
 
-uint8_t at86rf2xx_get_csma_max_retries(at86rf2xx_t *dev)
+uint8_t at86rf2xx_get_csma_max_retries(const at86rf2xx_t *dev)
 {
     uint8_t tmp;
     tmp  = at86rf2xx_reg_read(dev, AT86RF2XX_REG__XAH_CTRL_0);
@@ -262,7 +247,7 @@ uint8_t at86rf2xx_get_csma_max_retries(at86rf2xx_t *dev)
     return tmp;
 }
 
-void at86rf2xx_set_csma_max_retries(at86rf2xx_t *dev, int8_t retries)
+void at86rf2xx_set_csma_max_retries(const at86rf2xx_t *dev, int8_t retries)
 {
     retries = (retries > 5) ? 5 : retries; /* valid values: 0-5 */
     retries = (retries < 0) ? 7 : retries; /* max < 0 => disable CSMA (set to 7) */
@@ -274,18 +259,17 @@ void at86rf2xx_set_csma_max_retries(at86rf2xx_t *dev, int8_t retries)
     at86rf2xx_reg_write(dev, AT86RF2XX_REG__XAH_CTRL_0, tmp);
 }
 
-void at86rf2xx_set_csma_backoff_exp(at86rf2xx_t *dev, uint8_t min, uint8_t max)
+void at86rf2xx_set_csma_backoff_exp(const at86rf2xx_t *dev,
+                                    uint8_t min, uint8_t max)
 {
     max = (max > 8) ? 8 : max;
     min = (min > max) ? max : min;
     DEBUG("[at86rf2xx] opt: Set min BE=%u, max BE=%u\n", min, max);
 
-    at86rf2xx_reg_write(dev,
-            AT86RF2XX_REG__CSMA_BE,
-            (max << 4) | (min));
+    at86rf2xx_reg_write(dev, AT86RF2XX_REG__CSMA_BE, (max << 4) | (min));
 }
 
-void at86rf2xx_set_csma_seed(at86rf2xx_t *dev, uint8_t entropy[2])
+void at86rf2xx_set_csma_seed(const at86rf2xx_t *dev, const uint8_t entropy[2])
 {
     if(entropy == NULL) {
         DEBUG("[at86rf2xx] opt: CSMA seed entropy is nullpointer\n");
@@ -293,9 +277,7 @@ void at86rf2xx_set_csma_seed(at86rf2xx_t *dev, uint8_t entropy[2])
     }
     DEBUG("[at86rf2xx] opt: Set CSMA seed to 0x%x 0x%x\n", entropy[0], entropy[1]);
 
-    at86rf2xx_reg_write(dev,
-                           AT86RF2XX_REG__CSMA_SEED_0,
-                           entropy[0]);
+    at86rf2xx_reg_write(dev, AT86RF2XX_REG__CSMA_SEED_0, entropy[0]);
 
     uint8_t tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__CSMA_SEED_1);
     tmp &= ~(AT86RF2XX_CSMA_SEED_1__CSMA_SEED_1);
@@ -303,7 +285,7 @@ void at86rf2xx_set_csma_seed(at86rf2xx_t *dev, uint8_t entropy[2])
     at86rf2xx_reg_write(dev, AT86RF2XX_REG__CSMA_SEED_1, tmp);
 }
 
-int8_t at86rf2xx_get_cca_threshold(at86rf2xx_t *dev)
+int8_t at86rf2xx_get_cca_threshold(const at86rf2xx_t *dev)
 {
     int8_t tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__CCA_THRES);
     tmp &= AT86RF2XX_CCA_THRES_MASK__CCA_ED_THRES;
@@ -311,7 +293,7 @@ int8_t at86rf2xx_get_cca_threshold(at86rf2xx_t *dev)
     return (RSSI_BASE_VAL + tmp);
 }
 
-void at86rf2xx_set_cca_threshold(at86rf2xx_t *dev, int8_t value)
+void at86rf2xx_set_cca_threshold(const at86rf2xx_t *dev, int8_t value)
 {
     /* ensure the given value is negative, since a CCA threshold > 0 is
        just impossible: thus, any positive value given is considered
@@ -368,7 +350,7 @@ void at86rf2xx_set_option(at86rf2xx_t *dev, uint16_t option, bool state)
             break;
         case AT86RF2XX_OPT_PROMISCUOUS:
             DEBUG("[at86rf2xx] opt: %s PROMISCUOUS mode\n",
-                  (state ? "enabling" : "disabling"));
+                  (state ? "enable" : "disable"));
             /* disable/enable auto ACKs in promiscuous mode */
             tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__CSMA_SEED_1);
             tmp = (state) ? (tmp |  AT86RF2XX_CSMA_SEED_1__AACK_DIS_ACK)
@@ -382,7 +364,7 @@ void at86rf2xx_set_option(at86rf2xx_t *dev, uint16_t option, bool state)
             break;
         case AT86RF2XX_OPT_AUTOACK:
             DEBUG("[at86rf2xx] opt: %s auto ACKs\n",
-                  (state ? "enabling" : "disabling"));
+                  (state ? "enable" : "disable"));
             tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__CSMA_SEED_1);
             tmp = (state) ? (tmp & ~AT86RF2XX_CSMA_SEED_1__AACK_DIS_ACK)
                           : (tmp |  AT86RF2XX_CSMA_SEED_1__AACK_DIS_ACK);
@@ -390,7 +372,7 @@ void at86rf2xx_set_option(at86rf2xx_t *dev, uint16_t option, bool state)
             break;
         case AT86RF2XX_OPT_TELL_RX_START:
             DEBUG("[at86rf2xx] opt: %s SFD IRQ\n",
-                  (state ? "enabling" : "disabling"));
+                  (state ? "enable" : "disable"));
             tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__IRQ_MASK);
             tmp = (state) ? (tmp |  AT86RF2XX_IRQ_STATUS_MASK__RX_START)
                           : (tmp & ~AT86RF2XX_IRQ_STATUS_MASK__RX_START);
diff --git a/drivers/at86rf2xx/at86rf2xx_internal.c b/drivers/at86rf2xx/at86rf2xx_internal.c
index 26d1c8e0f7..593c40805f 100644
--- a/drivers/at86rf2xx/at86rf2xx_internal.c
+++ b/drivers/at86rf2xx/at86rf2xx_internal.c
@@ -18,7 +18,6 @@
  * @author      Thomas Eichinger <thomas.eichinger@fu-berlin.de>
  * @author      Joakim Nohlgård <joakim.nohlgard@eistec.se>
  * @author      Hauke Petersen <hauke.petersen@fu-berlin.de>
- *
  * @}
  */
 
@@ -36,9 +35,7 @@ static inline void getbus(const at86rf2xx_t *dev)
     spi_acquire(SPIDEV, CSPIN, SPI_MODE_0, dev->params.spi_clk);
 }
 
-void at86rf2xx_reg_write(const at86rf2xx_t *dev,
-                         const uint8_t addr,
-                         const uint8_t value)
+void at86rf2xx_reg_write(const at86rf2xx_t *dev, uint8_t addr, uint8_t value)
 {
     uint8_t reg = (AT86RF2XX_ACCESS_REG | AT86RF2XX_ACCESS_WRITE | addr);
 
@@ -47,7 +44,7 @@ void at86rf2xx_reg_write(const at86rf2xx_t *dev,
     spi_release(SPIDEV);
 }
 
-uint8_t at86rf2xx_reg_read(const at86rf2xx_t *dev, const uint8_t addr)
+uint8_t at86rf2xx_reg_read(const at86rf2xx_t *dev, uint8_t addr)
 {
     uint8_t reg = (AT86RF2XX_ACCESS_REG | AT86RF2XX_ACCESS_READ | addr);
     uint8_t value;
@@ -59,10 +56,8 @@ uint8_t at86rf2xx_reg_read(const at86rf2xx_t *dev, const uint8_t addr)
     return value;
 }
 
-void at86rf2xx_sram_read(const at86rf2xx_t *dev,
-                         const uint8_t offset,
-                         uint8_t *data,
-                         const size_t len)
+void at86rf2xx_sram_read(const at86rf2xx_t *dev, uint8_t offset,
+                         uint8_t *data, size_t len)
 {
     uint8_t reg = (AT86RF2XX_ACCESS_SRAM | AT86RF2XX_ACCESS_READ);
 
@@ -73,10 +68,8 @@ void at86rf2xx_sram_read(const at86rf2xx_t *dev,
     spi_release(SPIDEV);
 }
 
-void at86rf2xx_sram_write(const at86rf2xx_t *dev,
-                          const uint8_t offset,
-                          const uint8_t *data,
-                          const size_t len)
+void at86rf2xx_sram_write(const at86rf2xx_t *dev, uint8_t offset,
+                          const uint8_t *data, size_t len)
 {
     uint8_t reg = (AT86RF2XX_ACCESS_SRAM | AT86RF2XX_ACCESS_WRITE);
 
@@ -96,8 +89,7 @@ void at86rf2xx_fb_start(const at86rf2xx_t *dev)
 }
 
 void at86rf2xx_fb_read(const at86rf2xx_t *dev,
-                       uint8_t *data,
-                       const size_t len)
+                       uint8_t *data, size_t len)
 {
     spi_transfer_bytes(SPIDEV, CSPIN, true, NULL, data, len);
 }
@@ -112,17 +104,17 @@ void at86rf2xx_fb_stop(const at86rf2xx_t *dev)
 uint8_t at86rf2xx_get_status(const at86rf2xx_t *dev)
 {
     /* if sleeping immediately return state */
-    if(dev->state == AT86RF2XX_STATE_SLEEP)
+    if (dev->state == AT86RF2XX_STATE_SLEEP) {
         return dev->state;
+    }
 
-    return at86rf2xx_reg_read(dev, AT86RF2XX_REG__TRX_STATUS)
-                & AT86RF2XX_TRX_STATUS_MASK__TRX_STATUS;
+    return (at86rf2xx_reg_read(dev, AT86RF2XX_REG__TRX_STATUS)
+            & AT86RF2XX_TRX_STATUS_MASK__TRX_STATUS);
 }
 
 void at86rf2xx_assert_awake(at86rf2xx_t *dev)
 {
-    if(at86rf2xx_get_status(dev) == AT86RF2XX_STATE_SLEEP) {
-
+    if (at86rf2xx_get_status(dev) == AT86RF2XX_STATE_SLEEP) {
         /* wake up and wait for transition to TRX_OFF */
         gpio_clear(dev->params.sleep_pin);
         xtimer_usleep(AT86RF2XX_WAKEUP_DELAY);
@@ -133,9 +125,9 @@ void at86rf2xx_assert_awake(at86rf2xx_t *dev)
          * Spin until we are actually awake
          */
         do {
-            dev->state = at86rf2xx_reg_read(dev, AT86RF2XX_REG__TRX_STATUS) &
-                         AT86RF2XX_TRX_STATUS_MASK__TRX_STATUS;
-        } while(dev->state != AT86RF2XX_TRX_STATUS__TRX_OFF);
+            dev->state = at86rf2xx_reg_read(dev, AT86RF2XX_REG__TRX_STATUS)
+                         & AT86RF2XX_TRX_STATUS_MASK__TRX_STATUS;
+        } while (dev->state != AT86RF2XX_TRX_STATUS__TRX_OFF);
     }
 }
 
@@ -151,10 +143,10 @@ void at86rf2xx_hardware_reset(at86rf2xx_t *dev)
      * it remains P_ON. Otherwise, it should go to TRX_OFF
      */
     do {
-        dev->state = at86rf2xx_reg_read(dev, AT86RF2XX_REG__TRX_STATUS) &
-                     AT86RF2XX_TRX_STATUS_MASK__TRX_STATUS;
-    } while((dev->state != AT86RF2XX_STATE_TRX_OFF) &&
-            (dev->state != AT86RF2XX_STATE_P_ON));
+        dev->state = at86rf2xx_reg_read(dev, AT86RF2XX_REG__TRX_STATUS)
+                     & AT86RF2XX_TRX_STATUS_MASK__TRX_STATUS;
+    } while ((dev->state != AT86RF2XX_STATE_TRX_OFF)
+             && (dev->state != AT86RF2XX_STATE_P_ON));
 }
 
 void at86rf2xx_configure_phy(at86rf2xx_t *dev)
@@ -214,7 +206,7 @@ void at86rf2xx_configure_phy(at86rf2xx_t *dev)
 }
 
 #if defined(MODULE_AT86RF233) || defined(MODULE_AT86RF231)
-void at86rf2xx_get_random(at86rf2xx_t *dev, uint8_t *data, const size_t len)
+void at86rf2xx_get_random(const at86rf2xx_t *dev, uint8_t *data, size_t len)
 {
     for (size_t byteCount = 0; byteCount < len; ++byteCount) {
         uint8_t rnd = 0;
@@ -231,10 +223,3 @@ void at86rf2xx_get_random(at86rf2xx_t *dev, uint8_t *data, const size_t len)
     }
 }
 #endif
-
-void at86rf2xx_force_trx_off(const at86rf2xx_t *dev)
-{
-    at86rf2xx_reg_write(dev, AT86RF2XX_REG__TRX_STATE,
-                        AT86RF2XX_TRX_STATE__FORCE_TRX_OFF);
-    while (at86rf2xx_get_status(dev) != AT86RF2XX_STATE_TRX_OFF) {}
-}
diff --git a/drivers/at86rf2xx/at86rf2xx_netdev.c b/drivers/at86rf2xx/at86rf2xx_netdev.c
index 391f7bcde8..d936321860 100644
--- a/drivers/at86rf2xx/at86rf2xx_netdev.c
+++ b/drivers/at86rf2xx/at86rf2xx_netdev.c
@@ -81,8 +81,7 @@ static int _init(netdev_t *netdev)
     at86rf2xx_reset(dev);
 
     /* test if the SPI is set up correctly and the device is responding */
-    if (at86rf2xx_reg_read(dev, AT86RF2XX_REG__PART_NUM) !=
-        AT86RF2XX_PARTNUM) {
+    if (at86rf2xx_reg_read(dev, AT86RF2XX_REG__PART_NUM) != AT86RF2XX_PARTNUM) {
         DEBUG("[at86rf2xx] error: unable to read correct part number\n");
         return -1;
     }
@@ -103,7 +102,7 @@ static int _send(netdev_t *netdev, const struct iovec *vector, unsigned count)
     at86rf2xx_tx_prepare(dev);
 
     /* load packet data into FIFO */
-    for (unsigned i = 0; i < count; i++, ptr++) {
+    for (unsigned i = 0; i < count; ++i, ++ptr) {
         /* current packet data + FCS too long */
         if ((len + ptr->iov_len + 2) > AT86RF2XX_MAX_PKT_LENGTH) {
             DEBUG("[at86rf2xx] error: packet too large (%u byte) to be send\n",
@@ -427,8 +426,8 @@ static int _set(netdev_t *netdev, netopt_t opt, const void *val, size_t len)
         case NETOPT_CHANNEL:
             assert(len != sizeof(uint8_t));
             uint8_t chan = ((const uint8_t *)val)[0];
-            if (chan < AT86RF2XX_MIN_CHANNEL ||
-                chan > AT86RF2XX_MAX_CHANNEL) {
+            if ((chan < AT86RF2XX_MIN_CHANNEL)
+                || (chan > AT86RF2XX_MAX_CHANNEL)) {
                 res = -EINVAL;
                 break;
             }
@@ -547,14 +546,13 @@ static int _set(netdev_t *netdev, netopt_t opt, const void *val, size_t len)
     }
 
     /* go back to sleep if were sleeping and state hasn't been changed */
-    if ((old_state == AT86RF2XX_STATE_SLEEP) &&
-        (opt != NETOPT_STATE)) {
+    if ((old_state == AT86RF2XX_STATE_SLEEP)
+        && (opt != NETOPT_STATE)) {
         at86rf2xx_set_state(dev, AT86RF2XX_STATE_SLEEP);
     }
 
     if (res == -ENOTSUP) {
-        res = netdev_ieee802154_set((netdev_ieee802154_t *)netdev, opt,
-                                     val, len);
+        res = netdev_ieee802154_set((netdev_ieee802154_t *)netdev, opt, val, len);
     }
 
     return res;
@@ -578,8 +576,8 @@ static void _isr(netdev_t *netdev)
     /* read (consume) device status */
     irq_mask = at86rf2xx_reg_read(dev, AT86RF2XX_REG__IRQ_STATUS);
 
-    trac_status = at86rf2xx_reg_read(dev, AT86RF2XX_REG__TRX_STATE) &
-                  AT86RF2XX_TRX_STATE_MASK__TRAC;
+    trac_status = at86rf2xx_reg_read(dev, AT86RF2XX_REG__TRX_STATE)
+                  & AT86RF2XX_TRX_STATE_MASK__TRAC;
 
     if (irq_mask & AT86RF2XX_IRQ_STATUS_MASK__RX_START) {
         netdev->event_callback(netdev, NETDEV_EVENT_RX_STARTED);
@@ -587,16 +585,16 @@ static void _isr(netdev_t *netdev)
     }
 
     if (irq_mask & AT86RF2XX_IRQ_STATUS_MASK__TRX_END) {
-        if (state == AT86RF2XX_STATE_RX_AACK_ON ||
-            state == AT86RF2XX_STATE_BUSY_RX_AACK) {
+        if ((state == AT86RF2XX_STATE_RX_AACK_ON)
+            || (state == AT86RF2XX_STATE_BUSY_RX_AACK)) {
             DEBUG("[at86rf2xx] EVT - RX_END\n");
             if (!(dev->netdev.flags & AT86RF2XX_OPT_TELL_RX_END)) {
                 return;
             }
             netdev->event_callback(netdev, NETDEV_EVENT_RX_COMPLETE);
         }
-        else if (state == AT86RF2XX_STATE_TX_ARET_ON ||
-                 state == AT86RF2XX_STATE_BUSY_TX_ARET) {
+        else if ((state == AT86RF2XX_STATE_TX_ARET_ON)
+                 || (state == AT86RF2XX_STATE_BUSY_TX_ARET)) {
             /* check for more pending TX calls and return to idle state if
              * there are none */
             assert(dev->pending_tx != 0);
@@ -606,8 +604,8 @@ static void _isr(netdev_t *netdev)
             }
 /* Only radios with the XAH_CTRL_2 register support frame retry reporting */
 #if AT86RF2XX_HAVE_RETRIES
-            dev->tx_retries = ( at86rf2xx_reg_read(dev, AT86RF2XX_REG__XAH_CTRL_2) &
-                                AT86RF2XX_XAH_CTRL_2__ARET_FRAME_RETRIES_MASK ) >>
+            dev->tx_retries = (at86rf2xx_reg_read(dev, AT86RF2XX_REG__XAH_CTRL_2)
+                               & AT86RF2XX_XAH_CTRL_2__ARET_FRAME_RETRIES_MASK) >>
                               AT86RF2XX_XAH_CTRL_2__ARET_FRAME_RETRIES_OFFSET;
 #endif
 
diff --git a/drivers/at86rf2xx/include/at86rf2xx_internal.h b/drivers/at86rf2xx/include/at86rf2xx_internal.h
index 77266a8196..e24ea0ed5f 100644
--- a/drivers/at86rf2xx/include/at86rf2xx_internal.h
+++ b/drivers/at86rf2xx/include/at86rf2xx_internal.h
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2013 Alaeddine Weslati <alaeddine.weslati@inria.fr>
  * Copyright (C) 2015 Freie Universität Berlin
+ *               2017 HAW Hamburg
  *
  * This file is subject to the terms and conditions of the GNU Lesser General
  * Public License v2.1. See the file LICENSE in the top level directory for more
@@ -17,6 +18,7 @@
  * @author      Alaeddine Weslati <alaeddine.weslati@inria.fr>
  * @author      Thomas Eichinger <thomas.eichinger@fu-berlin.de>
  * @author      Hauke Petersen <hauke.petersen@fu-berlin.de>
+ * @author      Sebastian Meiling <s@mlng.net>
  */
 
 #ifndef AT86RF2XX_INTERNAL_H
@@ -31,6 +33,26 @@
 extern "C" {
 #endif
 
+/**
+ * @brief Max. allowed transmit power for the transceiver
+ */
+#ifdef MODULE_AT86RF212B
+#define AT86RF2XX_TXPOWER_MAX           (36)
+#elif MODULE_AT86RF233
+#define AT86RF2XX_TXPOWER_MAX           (21)
+#else
+#define AT86RF2XX_TXPOWER_MAX           (20)
+#endif
+
+/**
+ * @brief Transmit power offset
+ */
+#ifdef MODULE_AT86RF212B
+#define AT86RF2XX_TXPOWER_OFF           (25)
+#else
+#define AT86RF2XX_TXPOWER_OFF           (17)
+#endif
+
 /**
  * @brief   Transition time from SLEEP to TRX_OFF in us, refer figure 7-4, p.42.
  *          For different environments refer figure 13-13, p.201
@@ -59,7 +81,7 @@ extern "C" {
  *
  * @return              the value of the specified register
  */
-uint8_t at86rf2xx_reg_read(const at86rf2xx_t *dev, const uint8_t addr);
+uint8_t at86rf2xx_reg_read(const at86rf2xx_t *dev, uint8_t addr);
 
 /**
  * @brief   Write to a register at address `addr` from device `dev`.
@@ -68,8 +90,7 @@ uint8_t at86rf2xx_reg_read(const at86rf2xx_t *dev, const uint8_t addr);
  * @param[in] addr      address of the register to write
  * @param[in] value     value to write to the given register
  */
-void at86rf2xx_reg_write(const at86rf2xx_t *dev, const uint8_t addr,
-                         const uint8_t value);
+void at86rf2xx_reg_write(const at86rf2xx_t *dev, uint8_t addr, uint8_t value);
 
 /**
  * @brief   Read a chunk of data from the SRAM of the given device
@@ -79,10 +100,8 @@ void at86rf2xx_reg_write(const at86rf2xx_t *dev, const uint8_t addr,
  * @param[out] data     buffer to read data into
  * @param[in]  len      number of bytes to read from SRAM
  */
-void at86rf2xx_sram_read(const at86rf2xx_t *dev,
-                         const uint8_t offset,
-                         uint8_t *data,
-                         const size_t len);
+void at86rf2xx_sram_read(const at86rf2xx_t *dev, uint8_t offset,
+                         uint8_t *data, size_t len);
 
 /**
  * @brief   Write a chunk of data into the SRAM of the given device
@@ -92,10 +111,8 @@ void at86rf2xx_sram_read(const at86rf2xx_t *dev,
  * @param[in] data      data to copy into SRAM
  * @param[in] len       number of bytes to write to SRAM
  */
-void at86rf2xx_sram_write(const at86rf2xx_t *dev,
-                          const uint8_t offset,
-                          const uint8_t *data,
-                          const size_t len);
+void at86rf2xx_sram_write(const at86rf2xx_t *dev, uint8_t offset,
+                          const uint8_t *data, size_t len);
 
 /**
  * @brief   Start a read transcation internal frame buffer of the given device
@@ -116,8 +133,7 @@ void at86rf2xx_fb_start(const at86rf2xx_t *dev);
  * @param[out] data     buffer to copy the data to
  * @param[in]  len      number of bytes to read from the frame buffer
  */
-void at86rf2xx_fb_read(const at86rf2xx_t *dev,
-                       uint8_t *data, const size_t len);
+void at86rf2xx_fb_read(const at86rf2xx_t *dev, uint8_t *data, size_t len);
 
 /**
  * @brief   Stop a read transcation internal frame buffer of the given device
@@ -140,14 +156,14 @@ uint8_t at86rf2xx_get_status(const at86rf2xx_t *dev);
 /**
  * @brief   Make sure that device is not sleeping
  *
- * @param[in] dev       device to eventually wake up
+ * @param[in,out] dev   device to eventually wake up
  */
 void at86rf2xx_assert_awake(at86rf2xx_t *dev);
 
 /**
  * @brief   Trigger a hardware reset
  *
- * @param[in] dev       device to reset
+ * @param[in,out] dev   device to reset
  */
 void at86rf2xx_hardware_reset(at86rf2xx_t *dev);
 
@@ -155,7 +171,7 @@ void at86rf2xx_hardware_reset(at86rf2xx_t *dev);
 /**
  * @brief   Set PHY parameters based on channel and page number
  *
- * @param[in] dev       device to configure
+ * @param[in,out] dev   device to configure
  */
 void at86rf2xx_configure_phy(at86rf2xx_t *dev);
 
@@ -175,7 +191,7 @@ void at86rf2xx_configure_phy(at86rf2xx_t *dev);
  * @param[out] data     buffer to copy the random data to
  * @param[in]  len      number of random bytes to store in data
  */
-void at86rf2xx_get_random(at86rf2xx_t *dev, uint8_t *data, const size_t len);
+void at86rf2xx_get_random(const at86rf2xx_t *dev, uint8_t *data, size_t len);
 #endif
 
 #ifdef __cplusplus
diff --git a/drivers/at86rf2xx/include/at86rf2xx_params.h b/drivers/at86rf2xx/include/at86rf2xx_params.h
index c441d59be3..5dc42b4038 100644
--- a/drivers/at86rf2xx/include/at86rf2xx_params.h
+++ b/drivers/at86rf2xx/include/at86rf2xx_params.h
@@ -9,7 +9,6 @@
 
 /**
  * @ingroup     drivers_at86rf2xx
- *
  * @{
  * @file
  * @brief       Default configuration for the AT86RF2xx driver
diff --git a/drivers/include/at86rf2xx.h b/drivers/include/at86rf2xx.h
index 17fb82f064..c6873c4b5c 100644
--- a/drivers/include/at86rf2xx.h
+++ b/drivers/include/at86rf2xx.h
@@ -199,7 +199,7 @@ void at86rf2xx_setup(at86rf2xx_t *dev, const at86rf2xx_params_t *params);
 /**
  * @brief   Trigger a hardware reset and configure radio with default values
  *
- * @param[in] dev           device to reset
+ * @param[in,out] dev       device to reset
  */
 void at86rf2xx_reset(at86rf2xx_t *dev);
 
@@ -210,12 +210,12 @@ void at86rf2xx_reset(at86rf2xx_t *dev);
  *
  * @return                  the currently set (2-byte) short address
  */
-uint16_t at86rf2xx_get_addr_short(at86rf2xx_t *dev);
+uint16_t at86rf2xx_get_addr_short(const at86rf2xx_t *dev);
 
 /**
  * @brief   Set the short address of the given device
  *
- * @param[in] dev           device to write to
+ * @param[in,out] dev       device to write to
  * @param[in] addr          (2-byte) short address to set
  */
 void at86rf2xx_set_addr_short(at86rf2xx_t *dev, uint16_t addr);
@@ -227,12 +227,12 @@ void at86rf2xx_set_addr_short(at86rf2xx_t *dev, uint16_t addr);
  *
  * @return                  the currently set (8-byte) long address
  */
-uint64_t at86rf2xx_get_addr_long(at86rf2xx_t *dev);
+uint64_t at86rf2xx_get_addr_long(const at86rf2xx_t *dev);
 
 /**
  * @brief   Set the long address of the given device
  *
- * @param[in] dev           device to write to
+ * @param[in,out] dev       device to write to
  * @param[in] addr          (8-byte) long address to set
  */
 void at86rf2xx_set_addr_long(at86rf2xx_t *dev, uint64_t addr);
@@ -244,12 +244,12 @@ void at86rf2xx_set_addr_long(at86rf2xx_t *dev, uint64_t addr);
  *
  * @return                  the currently set channel number
  */
-uint8_t at86rf2xx_get_chan(at86rf2xx_t *dev);
+uint8_t at86rf2xx_get_chan(const at86rf2xx_t *dev);
 
 /**
  * @brief   Set the channel number of the given device
  *
- * @param[in] dev           device to write to
+ * @param[in,out] dev       device to write to
  * @param[in] chan          channel number to set
  */
 void at86rf2xx_set_chan(at86rf2xx_t *dev, uint8_t chan);
@@ -261,12 +261,12 @@ void at86rf2xx_set_chan(at86rf2xx_t *dev, uint8_t chan);
  *
  * @return                  the currently set channel page
  */
-uint8_t at86rf2xx_get_page(at86rf2xx_t *dev);
+uint8_t at86rf2xx_get_page(const at86rf2xx_t *dev);
 
 /**
  * @brief   Set the channel page of the given device
  *
- * @param[in] dev           device to write to
+ * @param[in,out] dev       device to write to
  * @param[in] page          channel page to set
  */
 void at86rf2xx_set_page(at86rf2xx_t *dev, uint8_t page);
@@ -278,12 +278,12 @@ void at86rf2xx_set_page(at86rf2xx_t *dev, uint8_t page);
  *
  * @return                  the currently set PAN ID
  */
-uint16_t at86rf2xx_get_pan(at86rf2xx_t *dev);
+uint16_t at86rf2xx_get_pan(const at86rf2xx_t *dev);
 
 /**
  * @brief   Set the PAN ID of the given device
  *
- * @param[in] dev           device to write to
+ * @param[in,out] dev       device to write to
  * @param[in] pan           PAN ID to set
  */
 void at86rf2xx_set_pan(at86rf2xx_t *dev, uint16_t pan);
@@ -295,7 +295,7 @@ void at86rf2xx_set_pan(at86rf2xx_t *dev, uint16_t pan);
  *
  * @return                  configured transmission power in dBm
  */
-int16_t at86rf2xx_get_txpower(at86rf2xx_t *dev);
+int16_t at86rf2xx_get_txpower(const at86rf2xx_t *dev);
 
 /**
  * @brief   Set the transmission power of the given device [in dBm]
@@ -308,7 +308,7 @@ int16_t at86rf2xx_get_txpower(at86rf2xx_t *dev);
  * @param[in] dev           device to write to
  * @param[in] txpower       transmission power in dBm
  */
-void at86rf2xx_set_txpower(at86rf2xx_t *dev, int16_t txpower);
+void at86rf2xx_set_txpower(const at86rf2xx_t *dev, int16_t txpower);
 
 /**
  * @brief   Get the maximum number of retransmissions
@@ -317,7 +317,7 @@ void at86rf2xx_set_txpower(at86rf2xx_t *dev, int16_t txpower);
  *
  * @return                  configured number of retransmissions
  */
-uint8_t at86rf2xx_get_max_retries(at86rf2xx_t *dev);
+uint8_t at86rf2xx_get_max_retries(const at86rf2xx_t *dev);
 
 /**
  * @brief   Set the maximum number of retransmissions
@@ -329,7 +329,7 @@ uint8_t at86rf2xx_get_max_retries(at86rf2xx_t *dev);
  * @param[in] dev           device to write to
  * @param[in] max           the maximum number of retransmissions
  */
-void at86rf2xx_set_max_retries(at86rf2xx_t *dev, uint8_t max);
+void at86rf2xx_set_max_retries(const at86rf2xx_t *dev, uint8_t max);
 
 /**
  * @brief   Get the maximum number of channel access attempts per frame (CSMA)
@@ -338,7 +338,7 @@ void at86rf2xx_set_max_retries(at86rf2xx_t *dev, uint8_t max);
  *
  * @return                  configured number of retries
  */
-uint8_t at86rf2xx_get_csma_max_retries(at86rf2xx_t *dev);
+uint8_t at86rf2xx_get_csma_max_retries(const at86rf2xx_t *dev);
 
 /**
  * @brief   Set the maximum number of channel access attempts per frame (CSMA)
@@ -351,7 +351,7 @@ uint8_t at86rf2xx_get_csma_max_retries(at86rf2xx_t *dev);
  * @param[in] dev           device to write to
  * @param[in] retries       the maximum number of retries
  */
-void at86rf2xx_set_csma_max_retries(at86rf2xx_t *dev, int8_t retries);
+void at86rf2xx_set_csma_max_retries(const at86rf2xx_t *dev, int8_t retries);
 
 /**
  * @brief   Set the min and max backoff exponent for CSMA/CA
@@ -363,7 +363,8 @@ void at86rf2xx_set_csma_max_retries(at86rf2xx_t *dev, int8_t retries);
  * @param[in] min           the minimum BE
  * @param[in] max           the maximum BE
  */
-void at86rf2xx_set_csma_backoff_exp(at86rf2xx_t *dev, uint8_t min, uint8_t max);
+void at86rf2xx_set_csma_backoff_exp(const at86rf2xx_t *dev,
+                                    uint8_t min, uint8_t max);
 
 /**
  * @brief   Set seed for CSMA random backoff
@@ -371,7 +372,7 @@ void at86rf2xx_set_csma_backoff_exp(at86rf2xx_t *dev, uint8_t min, uint8_t max);
  * @param[in] dev           device to write to
  * @param[in] entropy       11 bit of entropy as seed for random backoff
  */
-void at86rf2xx_set_csma_seed(at86rf2xx_t *dev, uint8_t entropy[2]);
+void at86rf2xx_set_csma_seed(const at86rf2xx_t *dev, const uint8_t entropy[2]);
 
 /**
  * @brief   Get the CCA threshold value
@@ -380,7 +381,7 @@ void at86rf2xx_set_csma_seed(at86rf2xx_t *dev, uint8_t entropy[2]);
  *
  * @return                  the current CCA threshold value
  */
-int8_t at86rf2xx_get_cca_threshold(at86rf2xx_t *dev);
+int8_t at86rf2xx_get_cca_threshold(const at86rf2xx_t *dev);
 
 /**
  * @brief   Set the CCA threshold value
@@ -388,7 +389,7 @@ int8_t at86rf2xx_get_cca_threshold(at86rf2xx_t *dev);
  * @param[in] dev           device to write to
  * @param[in] value         the new CCA threshold value
  */
-void at86rf2xx_set_cca_threshold(at86rf2xx_t *dev, int8_t value);
+void at86rf2xx_set_cca_threshold(const at86rf2xx_t *dev, int8_t value);
 
 /**
  * @brief   Get the latest ED level measurement
@@ -402,7 +403,7 @@ int8_t at86rf2xx_get_ed_level(at86rf2xx_t *dev);
 /**
  * @brief   Enable or disable driver specific options
  *
- * @param[in] dev           device to set/clear option flag for
+ * @param[in,out] dev       device to set/clear option flag for
  * @param[in] option        option to enable/disable
  * @param[in] state         true for enable, false for disable
  */
@@ -411,7 +412,7 @@ void at86rf2xx_set_option(at86rf2xx_t *dev, uint16_t option, bool state);
 /**
  * @brief   Set the state of the given device (trigger a state change)
  *
- * @param[in] dev           device to change state of
+ * @param[in,out] dev       device to change state of
  * @param[in] state         the targeted new state
  *
  * @return                  the previous state before the new state was set
@@ -423,14 +424,14 @@ uint8_t at86rf2xx_set_state(at86rf2xx_t *dev, uint8_t state);
  *
  * @note This function ignores the PRELOADING option
  *
- * @param[in] dev           device to use for sending
+ * @param[in,out] dev       device to use for sending
  * @param[in] data          data to send (must include IEEE802.15.4 header)
  * @param[in] len           length of @p data
  *
  * @return                  number of bytes that were actually send
  * @return                  0 on error
  */
-size_t at86rf2xx_send(at86rf2xx_t *dev, uint8_t *data, size_t len);
+size_t at86rf2xx_send(at86rf2xx_t *dev, const uint8_t *data, size_t len);
 
 /**
  * @brief   Prepare for sending of data
@@ -438,29 +439,29 @@ size_t at86rf2xx_send(at86rf2xx_t *dev, uint8_t *data, size_t len);
  * This function puts the given device into the TX state, so no receiving of
  * data is possible after it was called.
  *
- * @param[in] dev            device to prepare for sending
+ * @param[in,out] dev        device to prepare for sending
  */
 void at86rf2xx_tx_prepare(at86rf2xx_t *dev);
 
 /**
  * @brief   Load chunks of data into the transmit buffer of the given device
  *
- * @param[in] dev           device to write data to
+ * @param[in,out] dev       device to write data to
  * @param[in] data          buffer containing the data to load
  * @param[in] len           number of bytes in @p buffer
  * @param[in] offset        offset used when writing data to internal buffer
  *
  * @return                  offset + number of bytes written
  */
-size_t at86rf2xx_tx_load(at86rf2xx_t *dev, uint8_t *data, size_t len,
-                         size_t offset);
+size_t at86rf2xx_tx_load(at86rf2xx_t *dev, const uint8_t *data,
+                         size_t len, size_t offset);
 
 /**
  * @brief   Trigger sending of data previously loaded into transmit buffer
  *
  * @param[in] dev           device to trigger
  */
-void at86rf2xx_tx_exec(at86rf2xx_t *dev);
+void at86rf2xx_tx_exec(const at86rf2xx_t *dev);
 
 /**
  * @brief   Perform one manual channel clear assessment (CCA)
-- 
GitLab