diff --git a/drivers/at86rf2xx/at86rf2xx.c b/drivers/at86rf2xx/at86rf2xx.c index b8cb1905aebb37ef6eb94b0d08be06567e330d6f..fb5436d0b14d8d3f3b125dbd82ae97e1ce7e6c69 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) { @@ -142,23 +143,14 @@ void at86rf2xx_tx_prepare(at86rf2xx_t *dev) uint8_t state; dev->pending_tx++; - - /* make sure ongoing transmissions are finished */ - do { - state = at86rf2xx_get_status(dev); - } while (state == AT86RF2XX_STATE_BUSY_RX_AACK || - state == AT86RF2XX_STATE_BUSY_TX_ARET); - + state = at86rf2xx_set_state(dev, AT86RF2XX_STATE_TX_ARET_ON); if (state != AT86RF2XX_STATE_TX_ARET_ON) { dev->idle_state = state; } - - at86rf2xx_set_state(dev, AT86RF2XX_STATE_TX_ARET_ON); - 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; @@ -166,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 fc66c557ccffeb70768c393f04d1cc2a4bcda6d4..e5558e720ab110041868ae1b56ffde66794859db 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 @@ -347,86 +329,58 @@ void at86rf2xx_set_option(at86rf2xx_t *dev, uint16_t option, bool state) DEBUG("set option %i to %i\n", option, state); /* set option field */ - if (state) { - dev->netdev.flags |= option; - /* trigger option specific actions */ - switch (option) { - case AT86RF2XX_OPT_CSMA: + dev->netdev.flags = (state) ? (dev->netdev.flags | option) + : (dev->netdev.flags & ~option); + /* trigger option specific actions */ + switch (option) { + case AT86RF2XX_OPT_CSMA: + if (state) { DEBUG("[at86rf2xx] opt: enabling CSMA mode" \ "(4 retries, min BE: 3 max BE: 5)\n"); /* Initialize CSMA seed with hardware address */ at86rf2xx_set_csma_seed(dev, dev->netdev.long_addr); at86rf2xx_set_csma_max_retries(dev, 4); at86rf2xx_set_csma_backoff_exp(dev, 3, 5); - break; - case AT86RF2XX_OPT_PROMISCUOUS: - DEBUG("[at86rf2xx] opt: enabling PROMISCUOUS mode\n"); - /* disable auto ACKs in promiscuous mode */ - tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__CSMA_SEED_1); - tmp |= AT86RF2XX_CSMA_SEED_1__AACK_DIS_ACK; - at86rf2xx_reg_write(dev, AT86RF2XX_REG__CSMA_SEED_1, tmp); - /* enable promiscuous mode */ - tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__XAH_CTRL_1); - tmp |= AT86RF2XX_XAH_CTRL_1__AACK_PROM_MODE; - at86rf2xx_reg_write(dev, AT86RF2XX_REG__XAH_CTRL_1, tmp); - break; - case AT86RF2XX_OPT_AUTOACK: - DEBUG("[at86rf2xx] opt: enabling auto ACKs\n"); - tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__CSMA_SEED_1); - tmp &= ~(AT86RF2XX_CSMA_SEED_1__AACK_DIS_ACK); - at86rf2xx_reg_write(dev, AT86RF2XX_REG__CSMA_SEED_1, tmp); - break; - case AT86RF2XX_OPT_TELL_RX_START: - DEBUG("[at86rf2xx] opt: enabling SFD IRQ\n"); - tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__IRQ_MASK); - tmp |= AT86RF2XX_IRQ_STATUS_MASK__RX_START; - at86rf2xx_reg_write(dev, AT86RF2XX_REG__IRQ_MASK, tmp); - break; - default: - /* do nothing */ - break; - } - } - else { - dev->netdev.flags &= ~(option); - /* trigger option specific actions */ - switch (option) { - case AT86RF2XX_OPT_CSMA: + } + else { DEBUG("[at86rf2xx] opt: disabling CSMA mode\n"); /* setting retries to -1 means CSMA disabled */ at86rf2xx_set_csma_max_retries(dev, -1); - break; - case AT86RF2XX_OPT_PROMISCUOUS: - DEBUG("[at86rf2xx] opt: disabling PROMISCUOUS mode\n"); - /* disable promiscuous mode */ - tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__XAH_CTRL_1); - tmp &= ~(AT86RF2XX_XAH_CTRL_1__AACK_PROM_MODE); - at86rf2xx_reg_write(dev, AT86RF2XX_REG__XAH_CTRL_1, tmp); - /* re-enable AUTOACK only if the option is set */ - if (dev->netdev.flags & AT86RF2XX_OPT_AUTOACK) { - tmp = at86rf2xx_reg_read(dev, - AT86RF2XX_REG__CSMA_SEED_1); - tmp &= ~(AT86RF2XX_CSMA_SEED_1__AACK_DIS_ACK); - at86rf2xx_reg_write(dev, AT86RF2XX_REG__CSMA_SEED_1, - tmp); - } - break; - case AT86RF2XX_OPT_AUTOACK: - DEBUG("[at86rf2xx] opt: disabling auto ACKs\n"); - tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__CSMA_SEED_1); - tmp |= AT86RF2XX_CSMA_SEED_1__AACK_DIS_ACK; - at86rf2xx_reg_write(dev, AT86RF2XX_REG__CSMA_SEED_1, tmp); - break; - case AT86RF2XX_OPT_TELL_RX_START: - DEBUG("[at86rf2xx] opt: disabling SFD IRQ\n"); - tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__IRQ_MASK); - tmp &= ~AT86RF2XX_IRQ_STATUS_MASK__RX_START; - at86rf2xx_reg_write(dev, AT86RF2XX_REG__IRQ_MASK, tmp); - break; - default: - /* do nothing */ - break; - } + } + break; + case AT86RF2XX_OPT_PROMISCUOUS: + DEBUG("[at86rf2xx] opt: %s PROMISCUOUS mode\n", + (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) + : (tmp & ~AT86RF2XX_CSMA_SEED_1__AACK_DIS_ACK); + at86rf2xx_reg_write(dev, AT86RF2XX_REG__CSMA_SEED_1, tmp); + /* enable/disable promiscuous mode */ + tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__XAH_CTRL_1); + tmp = (state) ? (tmp | AT86RF2XX_XAH_CTRL_1__AACK_PROM_MODE) + : (tmp & ~AT86RF2XX_XAH_CTRL_1__AACK_PROM_MODE); + at86rf2xx_reg_write(dev, AT86RF2XX_REG__XAH_CTRL_1, tmp); + break; + case AT86RF2XX_OPT_AUTOACK: + DEBUG("[at86rf2xx] opt: %s auto ACKs\n", + (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); + at86rf2xx_reg_write(dev, AT86RF2XX_REG__CSMA_SEED_1, tmp); + break; + case AT86RF2XX_OPT_TELL_RX_START: + DEBUG("[at86rf2xx] opt: %s SFD IRQ\n", + (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); + at86rf2xx_reg_write(dev, AT86RF2XX_REG__IRQ_MASK, tmp); + break; + default: + /* do nothing */ + break; } } @@ -476,36 +430,29 @@ uint8_t at86rf2xx_set_state(at86rf2xx_t *dev, uint8_t state) if (state == AT86RF2XX_STATE_FORCE_TRX_OFF) { _set_state(dev, AT86RF2XX_STATE_TRX_OFF, state); - return old_state; } - - if (state == old_state) { - return old_state; - } - - /* we need to go via PLL_ON if we are moving between RX_AACK_ON <-> TX_ARET_ON */ - if ((old_state == AT86RF2XX_STATE_RX_AACK_ON && - state == AT86RF2XX_STATE_TX_ARET_ON) || - (old_state == AT86RF2XX_STATE_TX_ARET_ON && - state == AT86RF2XX_STATE_RX_AACK_ON)) { - _set_state(dev, AT86RF2XX_STATE_PLL_ON, AT86RF2XX_STATE_PLL_ON); - } - /* check if we need to wake up from sleep mode */ - else if (old_state == AT86RF2XX_STATE_SLEEP) { - DEBUG("at86rf2xx: waking up from sleep mode\n"); - at86rf2xx_assert_awake(dev); - } - - if (state == AT86RF2XX_STATE_SLEEP) { - /* First go to TRX_OFF */ - at86rf2xx_set_state(dev, AT86RF2XX_STATE_FORCE_TRX_OFF); - /* Discard all IRQ flags, framebuffer is lost anyway */ - at86rf2xx_reg_read(dev, AT86RF2XX_REG__IRQ_STATUS); - /* Go to SLEEP mode from TRX_OFF */ - gpio_set(dev->params.sleep_pin); - dev->state = state; - } else { - _set_state(dev, state, state); + else if (state != old_state) { + /* we need to go via PLL_ON if we are moving between RX_AACK_ON <-> TX_ARET_ON */ + if ((old_state | state) == (AT86RF2XX_STATE_RX_AACK_ON | AT86RF2XX_STATE_TX_ARET_ON)) { + _set_state(dev, AT86RF2XX_STATE_PLL_ON, AT86RF2XX_STATE_PLL_ON); + } + /* check if we need to wake up from sleep mode */ + if (state == AT86RF2XX_STATE_SLEEP) { + /* First go to TRX_OFF */ + _set_state(dev, AT86RF2XX_STATE_TRX_OFF, + AT86RF2XX_STATE_FORCE_TRX_OFF); + /* Discard all IRQ flags, framebuffer is lost anyway */ + at86rf2xx_reg_read(dev, AT86RF2XX_REG__IRQ_STATUS); + /* Go to SLEEP mode from TRX_OFF */ + gpio_set(dev->params.sleep_pin); + dev->state = state; + } else { + if (old_state == AT86RF2XX_STATE_SLEEP) { + DEBUG("at86rf2xx: waking up from sleep mode\n"); + at86rf2xx_assert_awake(dev); + } + _set_state(dev, state, state); + } } return old_state; diff --git a/drivers/at86rf2xx/at86rf2xx_internal.c b/drivers/at86rf2xx/at86rf2xx_internal.c index 26d1c8e0f710d69dffb85c24081fe3fc3c12baaf..593c40805fbcc83e67151a80ac87ebec034afc46 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 391f7bcde84683a029fb61c0e2fd737659ce02f4..d93632186019973273b9d7360baa5b01288ac25c 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 77266a8196200d5a4df341cb6971ef94e73f6f06..e24ea0ed5f45e534fb1b4939faca8d09d9716657 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 c441d59be356f03688c578bbf77d7a4fa0832080..5dc42b4038e89fdf081662eea78801917617d705 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 17fb82f064ed292f57c30e8418a5bc4f81e1b8b0..c6873c4b5cfba41558c3a02b4658b63f85f9259d 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)