From e0e20aa3fdbe7241b2606d2a31923fd40671bc1f Mon Sep 17 00:00:00 2001 From: George Oikonomou Date: Mon, 9 Nov 2015 13:48:47 +0000 Subject: [PATCH 1/3] Turn off ENERGEST_TYPE_LISTEN in CC13xx prop mode off() --- cpu/cc26xx-cc13xx/rf-core/prop-mode.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cpu/cc26xx-cc13xx/rf-core/prop-mode.c b/cpu/cc26xx-cc13xx/rf-core/prop-mode.c index 0a7c4692f..a3ab8e171 100644 --- a/cpu/cc26xx-cc13xx/rf-core/prop-mode.c +++ b/cpu/cc26xx-cc13xx/rf-core/prop-mode.c @@ -971,6 +971,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(); From 320a753666c4ca8795b205b7b18ce599a1d0e3d8 Mon Sep 17 00:00:00 2001 From: George Oikonomou Date: Mon, 9 Nov 2015 13:49:26 +0000 Subject: [PATCH 2/3] Turn CC13xx RF back off after prop TX if it was off to start with --- cpu/cc26xx-cc13xx/rf-core/prop-mode.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cpu/cc26xx-cc13xx/rf-core/prop-mode.c b/cpu/cc26xx-cc13xx/rf-core/prop-mode.c index a3ab8e171..10bcbd00e 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; } /*---------------------------------------------------------------------------*/ From b4393e861f8be347b7f102d841c964d60620dc4c Mon Sep 17 00:00:00 2001 From: George Oikonomou Date: Mon, 9 Nov 2015 13:50:03 +0000 Subject: [PATCH 3/3] Only set CC13xx prop mode channel if a new channel is being requested --- cpu/cc26xx-cc13xx/rf-core/prop-mode.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cpu/cc26xx-cc13xx/rf-core/prop-mode.c b/cpu/cc26xx-cc13xx/rf-core/prop-mode.c index 10bcbd00e..7f46c7aed 100644 --- a/cpu/cc26xx-cc13xx/rf-core/prop-mode.c +++ b/cpu/cc26xx-cc13xx/rf-core/prop-mode.c @@ -1066,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: