From c62d9feff724245d8c68921e8416bfeb201f58a2 Mon Sep 17 00:00:00 2001 From: francisco Date: Fri, 8 Mar 2019 16:31:57 +0100 Subject: [PATCH] drivers/sx127x: add support for rx and tx switch pin --- drivers/include/sx127x.h | 4 ++++ drivers/sx127x/include/sx127x_params.h | 19 +++++++++++++++++++ drivers/sx127x/sx127x.c | 11 +++++++++++ drivers/sx127x/sx127x_getset.c | 15 ++++++++++++++- 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/drivers/include/sx127x.h b/drivers/include/sx127x.h index 016b47fe33..8c3586dec6 100644 --- a/drivers/include/sx127x.h +++ b/drivers/include/sx127x.h @@ -216,6 +216,10 @@ typedef struct { gpio_t dio5_pin; /**< Interrupt line DIO5 (not used) */ #ifdef SX127X_USE_DIO_MULTI gpio_t dio_multi_pin; /**< Interrupt line for multiple IRQs */ +#endif +#if defined(SX127X_USE_TX_SWITCH) || defined(SX127X_USE_RX_SWITCH) + gpio_t rx_switch_pin; /**< Rx antenna switch */ + gpio_t tx_switch_pin; /**< Tx antenna switch */ #endif 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 3e621161b4..a33f1e6d4f 100644 --- a/drivers/sx127x/include/sx127x_params.h +++ b/drivers/sx127x/include/sx127x_params.h @@ -68,6 +68,14 @@ extern "C" { #define SX127X_PARAM_PASELECT (SX127X_PA_RFO) #endif +#ifndef SX127X_PARAM_TX_SWITCH +#define SX127X_PARAM_TX_SWITCH GPIO_UNDEF +#endif + +#ifndef SX127X_PARAM_RX_SWITCH +#define SX127X_PARAM_RX_SWITCH GPIO_UNDEF +#endif + #ifndef SX127X_PARAMS #ifdef SX127X_USE_DIO_MULTI #define SX127X_PARAMS { .spi = SX127X_PARAM_SPI, \ @@ -79,6 +87,17 @@ extern "C" { .dio3_pin = SX127X_PARAM_DIO3, \ .dio_multi_pin = SX127X_PARAM_DIO_MULTI,\ .paselect = SX127X_PARAM_PASELECT } +#elif defined(SX127X_USE_TX_SWITCH) || defined(SX127X_USE_RX_SWITCH) +#define SX127X_PARAMS { .spi = SX127X_PARAM_SPI, \ + .nss_pin = SX127X_PARAM_SPI_NSS, \ + .reset_pin = SX127X_PARAM_RESET, \ + .dio0_pin = SX127X_PARAM_DIO0, \ + .dio1_pin = SX127X_PARAM_DIO1, \ + .dio2_pin = SX127X_PARAM_DIO2, \ + .dio3_pin = SX127X_PARAM_DIO3, \ + .rx_switch_pin = SX127X_PARAM_RX_SWITCH, \ + .tx_switch_pin = SX127X_PARAM_TX_SWITCH, \ + .paselect = SX127X_PARAM_PASELECT } #else #define SX127X_PARAMS { .spi = SX127X_PARAM_SPI, \ .nss_pin = SX127X_PARAM_SPI_NSS, \ diff --git a/drivers/sx127x/sx127x.c b/drivers/sx127x/sx127x.c index fdd51acd3e..d7f8b42f7b 100644 --- a/drivers/sx127x/sx127x.c +++ b/drivers/sx127x/sx127x.c @@ -84,6 +84,17 @@ int sx127x_reset(const sx127x_t *dev) gpio_init(dev->params.reset_pin, GPIO_OUT); +#ifdef SX127X_USE_TX_SWITCH + /* tx switch as output, start in rx */ + gpio_init(dev->params.tx_switch_pin, GPIO_OUT); + gpio_clear(dev->params.tx_switch_pin); +#endif +#ifdef SX127X_USE_RX_SWITCH + /* rx switch as output, start in rx */ + gpio_init(dev->params.rx_switch_pin, GPIO_OUT); + gpio_set(dev->params.rx_switch_pin); +#endif + /* Set reset pin to 0 */ gpio_clear(dev->params.reset_pin); diff --git a/drivers/sx127x/sx127x_getset.c b/drivers/sx127x/sx127x_getset.c index c9e0f1504b..b491920c7c 100644 --- a/drivers/sx127x/sx127x_getset.c +++ b/drivers/sx127x/sx127x_getset.c @@ -35,7 +35,6 @@ #define ENABLE_DEBUG (0) #include "debug.h" - uint8_t sx127x_get_state(const sx127x_t *dev) { return dev->settings.state; @@ -225,6 +224,13 @@ void sx127x_set_rx(sx127x_t *dev) { DEBUG("[sx127x] Set RX\n"); +#ifdef SX127X_USE_TX_SWITCH + gpio_clear(dev->params.tx_switch_pin); +#endif +#ifdef SX127X_USE_RX_SWITCH + gpio_set(dev->params.rx_switch_pin); +#endif + switch (dev->settings.modem) { case SX127X_MODEM_FSK: /* todo */ @@ -328,6 +334,13 @@ void sx127x_set_rx(sx127x_t *dev) void sx127x_set_tx(sx127x_t *dev) { +#ifdef SX127X_USE_RX_SWITCH + gpio_clear(dev->params.rx_switch_pin); +#endif +#ifdef SX127X_USE_TX_SWITCH + gpio_set(dev->params.tx_switch_pin); +#endif + switch (dev->settings.modem) { case SX127X_MODEM_FSK: /* todo */