mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
driver/sx126x : Add set_rf_mode interface
This commit is contained in:
parent
8870a885cb
commit
17ad0fc5a7
@ -34,6 +34,20 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * @note Forward declaration of the SX126x device descriptor
|
||||||
|
*/
|
||||||
|
typedef struct sx126x sx126x_t;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief RF switch states
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
SX126X_RF_MODE_RX,
|
||||||
|
SX126X_RF_MODE_TX_LPA,
|
||||||
|
SX126X_RF_MODE_TX_HPA,
|
||||||
|
} sx126x_rf_mode_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Whether there's only one variant of this driver at compile time or
|
* @brief Whether there's only one variant of this driver at compile time or
|
||||||
* not.
|
* not.
|
||||||
@ -76,12 +90,18 @@ typedef struct {
|
|||||||
gpio_t dio1_pin; /**< Dio1 pin */
|
gpio_t dio1_pin; /**< Dio1 pin */
|
||||||
sx126x_reg_mod_t regulator; /**< Power regulator mode */
|
sx126x_reg_mod_t regulator; /**< Power regulator mode */
|
||||||
sx126x_type_t type; /**< Variant of sx126x */
|
sx126x_type_t type; /**< Variant of sx126x */
|
||||||
|
#if IS_USED(MODULE_SX126X_RF_SWITCH)
|
||||||
|
/**
|
||||||
|
* @ brief Interface to set RF switch parameters
|
||||||
|
*/
|
||||||
|
void(*set_rf_mode)(sx126x_t *dev, sx126x_rf_mode_t rf_mode);
|
||||||
|
#endif
|
||||||
} sx126x_params_t;
|
} sx126x_params_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Device descriptor for the driver
|
* @brief Device descriptor for the driver
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
struct sx126x {
|
||||||
netdev_t netdev; /**< Netdev parent struct */
|
netdev_t netdev; /**< Netdev parent struct */
|
||||||
sx126x_params_t *params; /**< Initialization parameters */
|
sx126x_params_t *params; /**< Initialization parameters */
|
||||||
sx126x_pkt_params_lora_t pkt_params; /**< Lora packet parameters */
|
sx126x_pkt_params_lora_t pkt_params; /**< Lora packet parameters */
|
||||||
@ -89,7 +109,7 @@ typedef struct {
|
|||||||
uint32_t channel; /**< Current channel frequency (in Hz) */
|
uint32_t channel; /**< Current channel frequency (in Hz) */
|
||||||
uint8_t rx_timeout; /**< Rx Timeout in terms of symbols */
|
uint8_t rx_timeout; /**< Rx Timeout in terms of symbols */
|
||||||
bool radio_sleep; /**< Radio sleep status */
|
bool radio_sleep; /**< Radio sleep status */
|
||||||
} sx126x_t;
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Setup the radio device
|
* @brief Setup the radio device
|
||||||
|
@ -57,6 +57,10 @@ extern "C" {
|
|||||||
#define SX126X_PARAM_REGULATOR SX126X_REG_MODE_DCDC
|
#define SX126X_PARAM_REGULATOR SX126X_REG_MODE_DCDC
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef SX126X_PARAM_SET_RF_MODE_CB
|
||||||
|
#define SX126X_PARAM_SET_RF_MODE_CB NULL
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef SX126X_PARAM_TYPE
|
#ifndef SX126X_PARAM_TYPE
|
||||||
# if IS_USED(MODULE_SX1261)
|
# if IS_USED(MODULE_SX1261)
|
||||||
# define SX126X_PARAM_TYPE SX126X_TYPE_SX1261
|
# define SX126X_PARAM_TYPE SX126X_TYPE_SX1261
|
||||||
@ -73,13 +77,21 @@ extern "C" {
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if IS_USED(MODULE_SX126X_RF_SWITCH)
|
||||||
|
#define SX126X_SET_RF_MODE .set_rf_mode = SX126X_PARAM_SET_RF_MODE_CB
|
||||||
|
#else
|
||||||
|
#define SX126X_SET_RF_MODE
|
||||||
|
#endif
|
||||||
|
|
||||||
#define SX126X_PARAMS { .spi = SX126X_PARAM_SPI, \
|
#define SX126X_PARAMS { .spi = SX126X_PARAM_SPI, \
|
||||||
.nss_pin = SX126X_PARAM_SPI_NSS, \
|
.nss_pin = SX126X_PARAM_SPI_NSS, \
|
||||||
.reset_pin = SX126X_PARAM_RESET, \
|
.reset_pin = SX126X_PARAM_RESET, \
|
||||||
.busy_pin = SX126X_PARAM_BUSY, \
|
.busy_pin = SX126X_PARAM_BUSY, \
|
||||||
.dio1_pin = SX126X_PARAM_DIO1, \
|
.dio1_pin = SX126X_PARAM_DIO1, \
|
||||||
.type = SX126X_PARAM_TYPE, \
|
.type = SX126X_PARAM_TYPE, \
|
||||||
.regulator = SX126X_PARAM_REGULATOR }
|
.regulator = SX126X_PARAM_REGULATOR, \
|
||||||
|
SX126X_SET_RF_MODE }
|
||||||
|
|
||||||
/**@}*/
|
/**@}*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -311,6 +311,12 @@ static int _set_state(sx126x_t *dev, netopt_state_t state)
|
|||||||
case NETOPT_STATE_IDLE:
|
case NETOPT_STATE_IDLE:
|
||||||
case NETOPT_STATE_RX:
|
case NETOPT_STATE_RX:
|
||||||
DEBUG("[sx126x] netdev: set NETOPT_STATE_RX state\n");
|
DEBUG("[sx126x] netdev: set NETOPT_STATE_RX state\n");
|
||||||
|
#if IS_USED(MODULE_SX126X_RF_SWITCH)
|
||||||
|
/* Refer Section 4.2 RF Switch in Application Note (AN5406) */
|
||||||
|
if (dev->params->set_rf_mode) {
|
||||||
|
dev->params->set_rf_mode(dev, SX126X_RF_MODE_RX);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
sx126x_cfg_rx_boosted(dev, true);
|
sx126x_cfg_rx_boosted(dev, true);
|
||||||
int _timeout = (sx126x_symbol_to_msec(dev, dev->rx_timeout));
|
int _timeout = (sx126x_symbol_to_msec(dev, dev->rx_timeout));
|
||||||
if (_timeout != 0) {
|
if (_timeout != 0) {
|
||||||
@ -323,6 +329,11 @@ static int _set_state(sx126x_t *dev, netopt_state_t state)
|
|||||||
|
|
||||||
case NETOPT_STATE_TX:
|
case NETOPT_STATE_TX:
|
||||||
DEBUG("[sx126x] netdev: set NETOPT_STATE_TX state\n");
|
DEBUG("[sx126x] netdev: set NETOPT_STATE_TX state\n");
|
||||||
|
#if IS_USED(MODULE_SX126X_RF_SWITCH)
|
||||||
|
if (dev->params->set_rf_mode) {
|
||||||
|
dev->params->set_rf_mode(dev, SX126X_RF_MODE_TX_LPA);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
sx126x_set_tx(dev, 0);
|
sx126x_set_tx(dev, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user