sx1280.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2022 Inria
3  * Copyright (C) 2020-2022 Université Grenoble Alpes
4  *
5  * This file is subject to the terms and conditions of the GNU Lesser
6  * General Public License v2.1. See the file LICENSE in the top level
7  * directory for more details.
8  */
9 
24 #ifndef SX1280_H
25 #define SX1280_H
26 
27 #include <assert.h>
28 
29 #include "sx1280_driver/src/sx1280_hal.h"
30 #include "sx1280_driver/src/sx1280.h"
31 #include "smtc_ral/src/ral.h"
32 #include "smtc_ral/src/ral_defs.h"
33 
34 #include "net/netdev.h"
35 
36 #include "periph/gpio.h"
37 #include "periph/spi.h"
38 
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
47 #define SX1280_CHANNEL_DEFAULT (2403000000UL)
48 #define SX1280_RADIO_TX_POWER (SX1280_PWR_MAX)
54 typedef struct sx1280 sx1280_t;
55 
59 typedef struct {
60  spi_t spi;
63  gpio_t nss_pin;
64  gpio_t reset_pin;
65  gpio_t busy_pin;
66  gpio_t dio0_pin;
67  gpio_t dio1_pin;
68  sx1280_reg_mod_t regulator;
70 
74 struct sx1280 {
76  ral_t ral;
77  ral_params_lora_t ral_params_lora;
79  sx1280_hal_operating_mode_t mode;
80 };
81 
90 void sx1280_setup(sx1280_t *dev, const sx1280_params_t *params, uint8_t index);
91 
100 
108 uint32_t sx1280_get_channel(const sx1280_t *dev);
109 
117 uint32_t sx1280_random(const sx1280_t *dev);
124 void sx1280_set_channel(sx1280_t *dev, uint32_t freq);
125 
133 uint32_t sx1280_get_bandwidth(const sx1280_t *dev);
134 
141 void sx1280_set_bandwidth(sx1280_t *dev, uint16_t bandwidth);
142 
151 
158 void sx1280_set_spreading_factor(sx1280_t *dev, uint8_t sf);
159 
167 uint8_t sx1280_get_coding_rate(const sx1280_t *dev);
168 
175 void sx1280_set_coding_rate(sx1280_t *dev, uint8_t cr);
176 
185 
192 void sx1280_set_lora_payload_length(sx1280_t *dev, uint8_t len);
193 
201 bool sx1280_get_lora_crc(const sx1280_t *dev);
202 
209 void sx1280_set_lora_crc(sx1280_t *dev, bool crc);
210 
219 
227 
236 
243 void sx1280_set_lora_preamble_length(sx1280_t *dev, uint16_t preamble);
244 
253 
260 void sx1280_set_lora_iq_invert(sx1280_t *dev, bool iq_invert);
261 
262 #ifdef __cplusplus
263 }
264 #endif
265 
266 #endif /* SX1280_H */
POSIX.1-2008 compliant version of the assert macro.
spi_clk_t
Definition: periph_cpu.h:352
Definitions low-level network driver interface.
Low-level GPIO peripheral driver interface definitions.
uint32_t sx1280_get_bandwidth(const sx1280_t *dev)
Gets the LoRa bandwidth.
uint32_t sx1280_get_channel(const sx1280_t *dev)
Gets the channel RF frequency.
bool sx1280_get_lora_iq_invert(const sx1280_t *dev)
Checks if the LoRa inverted IQ mode is enabled/disabled.
void sx1280_setup(sx1280_t *dev, const sx1280_params_t *params, uint8_t index)
Setup the radio device.
bool sx1280_get_lora_crc(const sx1280_t *dev)
Checks if CRC verification mode is enabled.
void sx1280_set_channel(sx1280_t *dev, uint32_t freq)
Sets the channel RF frequency.
uint32_t sx1280_random(const sx1280_t *dev)
Gets a random number.
uint8_t sx1280_get_lora_payload_length(const sx1280_t *dev)
Gets the payload length.
void sx1280_set_lora_payload_length(sx1280_t *dev, uint8_t len)
Sets the payload length.
void sx1280_set_bandwidth(sx1280_t *dev, uint16_t bandwidth)
Sets the LoRa bandwidth.
bool sx1280_get_lora_implicit_header(const sx1280_t *dev)
Gets the LoRa implicit header mode.
void sx1280_set_lora_preamble_length(sx1280_t *dev, uint16_t preamble)
Sets the LoRa preamble length.
uint8_t sx1280_get_coding_rate(const sx1280_t *dev)
Gets the LoRa coding rate.
uint8_t sx1280_get_spreading_factor(const sx1280_t *dev)
Gets the LoRa spreading factor.
void sx1280_set_lora_iq_invert(sx1280_t *dev, bool iq_invert)
Enable/disable the LoRa IQ inverted mode.
int sx1280_init(sx1280_t *dev)
Initialize the given device.
void sx1280_set_spreading_factor(sx1280_t *dev, uint8_t sf)
Sets the LoRa spreading factor.
void sx1280_set_lora_crc(sx1280_t *dev, bool crc)
Enable/Disable CRC verification mode.
void sx1280_set_lora_implicit_header(sx1280_t *dev, bool mode)
Sets LoRa implicit header mode.
void sx1280_set_coding_rate(sx1280_t *dev, uint8_t cr)
Sets the LoRa coding rate.
uint16_t sx1280_get_lora_preamble_length(const sx1280_t *dev)
Gets the LoRa preamble length.
spi_mode_t
Support SPI modes.
Definition: periph_cpu.h:43
Low-level SPI peripheral driver interface definition.
Structure to hold driver state.
Definition: netdev.h:365
Device initialization parameters.
Definition: sx1280.h:59
gpio_t busy_pin
Busy pin.
Definition: sx1280.h:65
sx1280_reg_mod_t regulator
Power regulator mode.
Definition: sx1280.h:68
spi_t spi
SPI device.
Definition: sx1280.h:60
spi_clk_t spi_clk
SPI clk.
Definition: sx1280.h:62
gpio_t nss_pin
SPI NSS pin.
Definition: sx1280.h:63
gpio_t dio0_pin
Dio0 pin.
Definition: sx1280.h:66
gpio_t dio1_pin
Dio1 pin.
Definition: sx1280.h:67
gpio_t reset_pin
Reset pin.
Definition: sx1280.h:64
spi_mode_t spi_mode
SPI mode.
Definition: sx1280.h:61
Device descriptor for the driver.
Definition: sx1280.h:74
sx1280_params_t * params
Initialization parameters.
Definition: sx1280.h:78
sx1280_hal_operating_mode_t mode
Operating Mode.
Definition: sx1280.h:79
ral_params_lora_t ral_params_lora
LoRa modulation parameters.
Definition: sx1280.h:77
ral_t ral
Radio abstraction.
Definition: sx1280.h:76
netdev_t netdev
Netdev parent struct.
Definition: sx1280.h:75