drivers/sx127x: add support for rx and tx switch pin

This commit is contained in:
francisco 2019-03-08 16:31:57 +01:00
parent 2f8e705679
commit c62d9feff7
4 changed files with 48 additions and 1 deletions

View File

@ -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;

View File

@ -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, \

View File

@ -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);

View File

@ -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 */