diff --git a/drivers/at86rf2xx/at86rf2xx.c b/drivers/at86rf2xx/at86rf2xx.c index 75da3e77fc90f35456ab01531b0eea8b0ddcd283..6ec20a1fb4017f8475f5b39ddaba283185f5baa6 100644 --- a/drivers/at86rf2xx/at86rf2xx.c +++ b/drivers/at86rf2xx/at86rf2xx.c @@ -220,13 +220,9 @@ void at86rf2xx_tx_prepare(at86rf2xx_t *dev) do { state = at86rf2xx_get_status(dev); } - while (state == AT86RF2XX_STATE_BUSY_TX_ARET); - - /* if receiving cancel */ - if(state == AT86RF2XX_STATE_BUSY_RX_AACK) { - at86rf2xx_force_trx_off(dev); - dev->idle_state = AT86RF2XX_STATE_RX_AACK_ON; - } else if (state != AT86RF2XX_STATE_TX_ARET_ON) { + while (state == AT86RF2XX_STATE_BUSY_RX_AACK || + state == AT86RF2XX_STATE_BUSY_TX_ARET); + if (state != AT86RF2XX_STATE_TX_ARET_ON) { dev->idle_state = state; } at86rf2xx_set_state(dev, AT86RF2XX_STATE_TX_ARET_ON); diff --git a/drivers/at86rf2xx/at86rf2xx_getset.c b/drivers/at86rf2xx/at86rf2xx_getset.c index faf9ab58783a276d7150d0db67419965d180acc6..abe2982bec39f9512d8d572837ee7cd8dfce962d 100644 --- a/drivers/at86rf2xx/at86rf2xx_getset.c +++ b/drivers/at86rf2xx/at86rf2xx_getset.c @@ -407,6 +407,12 @@ static inline void _set_state(at86rf2xx_t *dev, uint8_t state) dev->state = state; } +static inline void _force_trx_off(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); +} + void at86rf2xx_set_state(at86rf2xx_t *dev, uint8_t state) { uint8_t old_state = at86rf2xx_get_status(dev); @@ -437,7 +443,7 @@ void at86rf2xx_set_state(at86rf2xx_t *dev, uint8_t state) if (state == AT86RF2XX_STATE_SLEEP) { /* First go to TRX_OFF */ - at86rf2xx_force_trx_off(dev); + _force_trx_off(dev); /* Discard all IRQ flags, framebuffer is lost anyway */ at86rf2xx_reg_read(dev, AT86RF2XX_REG__IRQ_STATUS); /* Go to SLEEP mode from TRX_OFF */ @@ -459,5 +465,5 @@ void at86rf2xx_reset_state_machine(at86rf2xx_t *dev) old_state = at86rf2xx_get_status(dev); } while (old_state == AT86RF2XX_STATE_IN_PROGRESS); - at86rf2xx_force_trx_off(dev); + _force_trx_off(dev); } diff --git a/drivers/at86rf2xx/at86rf2xx_internal.c b/drivers/at86rf2xx/at86rf2xx_internal.c index fc9ea8d40398b2fb8a242c2ab5b6aa6b727cc50f..4a9ef5c0bc771d7a81815716bf6c54b421943a3d 100644 --- a/drivers/at86rf2xx/at86rf2xx_internal.c +++ b/drivers/at86rf2xx/at86rf2xx_internal.c @@ -135,11 +135,3 @@ void at86rf2xx_hardware_reset(at86rf2xx_t *dev) gpio_set(dev->reset_pin); xtimer_usleep(AT86RF2XX_RESET_DELAY); } - -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/include/at86rf2xx_internal.h b/drivers/at86rf2xx/include/at86rf2xx_internal.h index 863f1fedf3dc1cc135cd748965c399f5536666a0..616181bbab171a09f8e9cfb0237aaae58b7ee2f3 100644 --- a/drivers/at86rf2xx/include/at86rf2xx_internal.h +++ b/drivers/at86rf2xx/include/at86rf2xx_internal.h @@ -107,13 +107,6 @@ void at86rf2xx_sram_write(const at86rf2xx_t *dev, void at86rf2xx_fb_read(const at86rf2xx_t *dev, uint8_t *data, const size_t len); -/** - * @brief Cancel ongoing transactions and switch to TRX_OFF state - * - * @param[in] dev device to manipulate - */ -void at86rf2xx_force_trx_off(const at86rf2xx_t *dev); - /** * @brief Convenience function for reading the status of the given device *