diff --git a/drivers/include/sx127x.h b/drivers/include/sx127x.h index 9d200d0a64fa2ecbc29b88a1ec8369914e713e2a..4e2d5d77edd85e9feb38edabfd430e9f2abcee4b 100644 --- a/drivers/include/sx127x.h +++ b/drivers/include/sx127x.h @@ -83,17 +83,8 @@ extern "C" { #define SX127X_TX_TIMEOUT_DEFAULT (1000U * 1000U * 30UL) /**< TX timeout, 30s */ #define SX127X_RX_SINGLE (false) /**< Single byte receive mode => continuous by default */ #define SX127X_RX_BUFFER_SIZE (256) /**< RX buffer size */ - #define SX127X_RADIO_TX_POWER (14U) /**< Radio power in dBm */ -#ifndef SX1272_DEFAULT_PASELECT -/** @brief Default PA selection config (1: RFO, 0: PABOOST) - * - * This depends on the module configuration. - */ -#define SX1272_DEFAULT_PASELECT (1U) -#endif - #define SX127X_EVENT_HANDLER_STACK_SIZE (2048U) /**< Stack size event handler */ #define SX127X_IRQ_DIO0 (1<<0) /**< DIO0 IRQ */ #define SX127X_IRQ_DIO1 (1<<1) /**< DIO1 IRQ */ @@ -144,6 +135,18 @@ enum { SX127X_CAD_DONE, /**< Channel activity detection complete */ }; +/** + * @brief Power amplifier modes + * + * Default value is SX127X_PA_RFO. + * + * The power amplifier mode depends on the module hardware configuration. + */ +enum { + SX127X_PA_RFO = 0, /**< RFO HF or RFO LF */ + SX127X_PA_BOOST, /**< Power amplifier boost (high power) */ +}; + /** * @name SX127X device descriptor boolean flags * @{ @@ -205,6 +208,7 @@ typedef struct { gpio_t dio3_pin; /**< Interrupt line DIO3 (CAD done) */ gpio_t dio4_pin; /**< Interrupt line DIO4 (not used) */ gpio_t dio5_pin; /**< Interrupt line DIO5 (not used) */ + uint8_t paselect; /**< Power amplifier mode (RFO or PABOOST) */ } sx127x_params_t; /** diff --git a/drivers/sx127x/include/sx127x_params.h b/drivers/sx127x/include/sx127x_params.h index e74ec69a0d32d19293ea955953b26e3b68c63a97..15763b4a9e424b4589fac0bfb585f5ee7273bf7a 100644 --- a/drivers/sx127x/include/sx127x_params.h +++ b/drivers/sx127x/include/sx127x_params.h @@ -60,6 +60,10 @@ extern "C" { #define SX127X_PARAM_DIO3 GPIO_PIN(1, 4) /* D5 */ #endif +#ifndef SX127X_PARAM_PASELECT +#define SX127X_PARAM_PASELECT (SX127X_PA_RFO) +#endif + #ifndef SX127X_PARAMS #define SX127X_PARAMS { .spi = SX127X_PARAM_SPI, \ .nss_pin = SX127X_PARAM_SPI_NSS, \ @@ -67,7 +71,8 @@ extern "C" { .dio0_pin = SX127X_PARAM_DIO0, \ .dio1_pin = SX127X_PARAM_DIO1, \ .dio2_pin = SX127X_PARAM_DIO2, \ - .dio3_pin = SX127X_PARAM_DIO3 } + .dio3_pin = SX127X_PARAM_DIO3, \ + .paselect = SX127X_PARAM_PASELECT } #endif /**@}*/ diff --git a/drivers/sx127x/sx127x_getset.c b/drivers/sx127x/sx127x_getset.c index fe1d429f7aee40e62e50b4675ac62efd7696e35f..6887631daf5bdb1e37512be96f6a0e58fa69c046 100644 --- a/drivers/sx127x/sx127x_getset.c +++ b/drivers/sx127x/sx127x_getset.c @@ -707,23 +707,13 @@ void sx127x_set_payload_length(sx127x_t *dev, uint8_t len) sx127x_reg_write(dev, SX127X_REG_LR_PAYLOADLENGTH, len); } -static inline uint8_t sx127x_get_pa_select(uint32_t channel) +static inline uint8_t sx127x_get_pa_select(const sx127x_t *dev) { -#if defined(MODULE_SX1272) - (void) channel; -#if SX1272_DEFAULT_PASELECT - return SX127X_RF_PACONFIG_PASELECT_RFO; -#else - return SX127X_RF_PACONFIG_PASELECT_PABOOST; -#endif -#else /* MODULE_SX1276 */ - if (channel < SX127X_RF_MID_BAND_THRESH) { + if (dev->params.paselect == SX127X_PA_BOOST) { return SX127X_RF_PACONFIG_PASELECT_PABOOST; } - else { - return SX127X_RF_PACONFIG_PASELECT_RFO; - } -#endif + + return SX127X_RF_PACONFIG_PASELECT_RFO; } uint8_t sx127x_get_tx_power(const sx127x_t *dev) @@ -745,7 +735,7 @@ void sx127x_set_tx_power(sx127x_t *dev, int8_t power) #endif pa_config = ((pa_config & SX127X_RF_PACONFIG_PASELECT_MASK) | - sx127x_get_pa_select(dev->settings.channel)); + sx127x_get_pa_select(dev)); #if defined(MODULE_SX1276) /* max power is 14dBm */