/* * Copyright (c) 2019 Manivannan Sadhasivam * Copyright (c) 2020 Andreas Sandberg * Copyright (c) 2021 Fabio Baltieri * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_DRIVERS_SX126X_COMMON_H_ #define ZEPHYR_DRIVERS_SX126X_COMMON_H_ #include #include #include #include #include #include #if DT_HAS_COMPAT_STATUS_OKAY(semtech_sx1261) #define DT_DRV_COMPAT semtech_sx1261 #define SX126X_DEVICE_ID SX1261 #elif DT_HAS_COMPAT_STATUS_OKAY(semtech_sx1262) #define DT_DRV_COMPAT semtech_sx1262 #define SX126X_DEVICE_ID SX1262 #elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32wl_subghz_radio) #define DT_DRV_COMPAT st_stm32wl_subghz_radio #define SX126X_DEVICE_ID SX1262 #else #error No SX126x instance in device tree. #endif #define HAVE_GPIO_ANTENNA_ENABLE \ DT_INST_NODE_HAS_PROP(0, antenna_enable_gpios) #define HAVE_GPIO_TX_ENABLE DT_INST_NODE_HAS_PROP(0, tx_enable_gpios) #define HAVE_GPIO_RX_ENABLE DT_INST_NODE_HAS_PROP(0, rx_enable_gpios) struct sx126x_config { struct spi_dt_spec bus; #if HAVE_GPIO_ANTENNA_ENABLE struct gpio_dt_spec antenna_enable; #endif #if HAVE_GPIO_TX_ENABLE struct gpio_dt_spec tx_enable; #endif #if HAVE_GPIO_RX_ENABLE struct gpio_dt_spec rx_enable; #endif }; struct sx126x_data { struct gpio_callback dio1_irq_callback; struct k_work dio1_irq_work; DioIrqHandler *radio_dio_irq; RadioOperatingModes_t mode; }; void sx126x_reset(struct sx126x_data *dev_data); bool sx126x_is_busy(struct sx126x_data *dev_data); uint32_t sx126x_get_dio1_pin_state(struct sx126x_data *dev_data); void sx126x_dio1_irq_enable(struct sx126x_data *dev_data); void sx126x_dio1_irq_disable(struct sx126x_data *dev_data); void sx126x_set_tx_params(int8_t power, RadioRampTimes_t ramp_time); int sx126x_variant_init(const struct device *dev); #endif /* ZEPHYR_DRIVERS_SX126X_COMMON_H_ */