Skip to content
Snippets Groups Projects
Commit 9328a1f2 authored by Alexandre Abadie's avatar Alexandre Abadie
Browse files

drivers/sx127x: make paselect configurable

parent 690c36b3
No related branches found
No related tags found
No related merge requests found
......@@ -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;
/**
......
......@@ -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
/**@}*/
......
......@@ -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 */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment