diff --git a/cpu/cc26xx-cc13xx/rf-core/prop-mode.c b/cpu/cc26xx-cc13xx/rf-core/prop-mode.c index 0a7c4692f..7f46c7aed 100644 --- a/cpu/cc26xx-cc13xx/rf-core/prop-mode.c +++ b/cpu/cc26xx-cc13xx/rf-core/prop-mode.c @@ -647,6 +647,7 @@ static int transmit(unsigned short transmit_len) { int ret; + uint8_t was_off = 0; uint32_t cmd_status; volatile rfc_CMD_PROP_TX_ADV_t *cmd_tx_adv; @@ -654,6 +655,7 @@ transmit(unsigned short transmit_len) uint16_t total_length; if(!rf_is_on()) { + was_off = 1; if(on() != RF_CORE_CMD_OK) { PRINTF("transmit: on() failed\n"); return RADIO_TX_ERR; @@ -739,6 +741,10 @@ transmit(unsigned short transmit_len) rx_on_prop(); + if(was_off) { + off(); + } + return ret; } /*---------------------------------------------------------------------------*/ @@ -971,6 +977,8 @@ off(void) rx_off_prop(); rf_core_power_down(); + ENERGEST_OFF(ENERGEST_TYPE_LISTEN); + /* Switch HF clock source to the RCOSC to preserve power */ oscillators_switch_to_hf_rc(); @@ -1058,6 +1066,12 @@ set_value(radio_param_t param, radio_value_t value) return RADIO_RESULT_INVALID_VALUE; } + if(get_channel() == (uint8_t)value) { + /* We already have that very same channel configured. + * Nothing to do here. */ + return RADIO_RESULT_OK; + } + set_channel((uint8_t)value); break; case RADIO_PARAM_TXPOWER: