Skip to content
Snippets Groups Projects
Unverified Commit f0c3a648 authored by Alexandre Abadie's avatar Alexandre Abadie Committed by GitHub
Browse files

Merge pull request #8834 from aabadie/pr/drivers/sx127x_paselect

drivers/sx127x: make paselect configurable in the driver params
parents 719515a0 9328a1f2
No related branches found
No related tags found
No related merge requests found
...@@ -83,17 +83,8 @@ extern "C" { ...@@ -83,17 +83,8 @@ extern "C" {
#define SX127X_TX_TIMEOUT_DEFAULT (1000U * 1000U * 30UL) /**< TX timeout, 30s */ #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_SINGLE (false) /**< Single byte receive mode => continuous by default */
#define SX127X_RX_BUFFER_SIZE (256) /**< RX buffer size */ #define SX127X_RX_BUFFER_SIZE (256) /**< RX buffer size */
#define SX127X_RADIO_TX_POWER (14U) /**< Radio power in dBm */ #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_EVENT_HANDLER_STACK_SIZE (2048U) /**< Stack size event handler */
#define SX127X_IRQ_DIO0 (1<<0) /**< DIO0 IRQ */ #define SX127X_IRQ_DIO0 (1<<0) /**< DIO0 IRQ */
#define SX127X_IRQ_DIO1 (1<<1) /**< DIO1 IRQ */ #define SX127X_IRQ_DIO1 (1<<1) /**< DIO1 IRQ */
...@@ -144,6 +135,18 @@ enum { ...@@ -144,6 +135,18 @@ enum {
SX127X_CAD_DONE, /**< Channel activity detection complete */ 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 * @name SX127X device descriptor boolean flags
* @{ * @{
...@@ -205,6 +208,7 @@ typedef struct { ...@@ -205,6 +208,7 @@ typedef struct {
gpio_t dio3_pin; /**< Interrupt line DIO3 (CAD done) */ gpio_t dio3_pin; /**< Interrupt line DIO3 (CAD done) */
gpio_t dio4_pin; /**< Interrupt line DIO4 (not used) */ gpio_t dio4_pin; /**< Interrupt line DIO4 (not used) */
gpio_t dio5_pin; /**< Interrupt line DIO5 (not used) */ gpio_t dio5_pin; /**< Interrupt line DIO5 (not used) */
uint8_t paselect; /**< Power amplifier mode (RFO or PABOOST) */
} sx127x_params_t; } sx127x_params_t;
/** /**
......
...@@ -60,6 +60,10 @@ extern "C" { ...@@ -60,6 +60,10 @@ extern "C" {
#define SX127X_PARAM_DIO3 GPIO_PIN(1, 4) /* D5 */ #define SX127X_PARAM_DIO3 GPIO_PIN(1, 4) /* D5 */
#endif #endif
#ifndef SX127X_PARAM_PASELECT
#define SX127X_PARAM_PASELECT (SX127X_PA_RFO)
#endif
#ifndef SX127X_PARAMS #ifndef SX127X_PARAMS
#define SX127X_PARAMS { .spi = SX127X_PARAM_SPI, \ #define SX127X_PARAMS { .spi = SX127X_PARAM_SPI, \
.nss_pin = SX127X_PARAM_SPI_NSS, \ .nss_pin = SX127X_PARAM_SPI_NSS, \
...@@ -67,7 +71,8 @@ extern "C" { ...@@ -67,7 +71,8 @@ extern "C" {
.dio0_pin = SX127X_PARAM_DIO0, \ .dio0_pin = SX127X_PARAM_DIO0, \
.dio1_pin = SX127X_PARAM_DIO1, \ .dio1_pin = SX127X_PARAM_DIO1, \
.dio2_pin = SX127X_PARAM_DIO2, \ .dio2_pin = SX127X_PARAM_DIO2, \
.dio3_pin = SX127X_PARAM_DIO3 } .dio3_pin = SX127X_PARAM_DIO3, \
.paselect = SX127X_PARAM_PASELECT }
#endif #endif
/**@}*/ /**@}*/
......
...@@ -707,23 +707,13 @@ void sx127x_set_payload_length(sx127x_t *dev, uint8_t len) ...@@ -707,23 +707,13 @@ void sx127x_set_payload_length(sx127x_t *dev, uint8_t len)
sx127x_reg_write(dev, SX127X_REG_LR_PAYLOADLENGTH, 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) if (dev->params.paselect == SX127X_PA_BOOST) {
(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) {
return SX127X_RF_PACONFIG_PASELECT_PABOOST; return SX127X_RF_PACONFIG_PASELECT_PABOOST;
} }
else {
return SX127X_RF_PACONFIG_PASELECT_RFO; return SX127X_RF_PACONFIG_PASELECT_RFO;
}
#endif
} }
uint8_t sx127x_get_tx_power(const sx127x_t *dev) 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) ...@@ -745,7 +735,7 @@ void sx127x_set_tx_power(sx127x_t *dev, int8_t power)
#endif #endif
pa_config = ((pa_config & SX127X_RF_PACONFIG_PASELECT_MASK) | 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) #if defined(MODULE_SX1276)
/* max power is 14dBm */ /* max power is 14dBm */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment