25#ifndef MBED_LORA_RADIO_DRV_SX126X_LORARADIO_H_
26#define MBED_LORA_RADIO_DRV_SX126X_LORARADIO_H_
30#include "mbed_critical.h"
32#include "InterruptIn.h"
33#include "DigitalOut.h"
34#include "DigitalInOut.h"
38#include "rtos/Mutex.h"
39#ifdef MBED_CONF_RTOS_PRESENT
40#include "rtos/Thread.h"
41#include "rtos/ThisThread.h"
44#include "lorawan/LoRaRadio.h"
46#ifdef MBED_CONF_SX126X_LORA_DRIVER_BUFFER_SIZE
47#define MAX_DATA_BUFFER_SIZE_SX126X MBED_CONF_SX126X_LORA_DRIVER_BUFFER_SIZE
49#define MAX_DATA_BUFFER_SIZE_SX126X 255
63 PinName device_select,
64 PinName crystal_select,
93 uint32_t datarate, uint8_t coderate,
94 uint32_t bandwidth_afc, uint16_t preamble_len,
95 uint16_t symb_timeout,
bool fix_len,
97 bool crc_on,
bool freq_hop_on, uint8_t hop_period,
98 bool iq_inverted,
bool rx_continuous)
override;
130 uint32_t bandwidth, uint32_t datarate,
131 uint8_t coderate, uint16_t preamble_len,
132 bool fix_len,
bool crc_on,
bool freq_hop_on,
133 uint8_t hop_period,
bool iq_inverted, uint32_t timeout);
143 virtual void send(uint8_t *buffer, uint8_t size);
219 int16_t rssi_threshold,
220 uint32_t max_carrier_sense_time);
269#if MBED_CONF_SX126X_LORA_DRIVER_FREQ_SUPPORT == -1
276#if MBED_CONF_SX126X_LORA_DRIVER_DEVICE_VARIANT == -1
294 uint8_t _data_buffer[MAX_DATA_BUFFER_SIZE_SX126X];
296#ifdef MBED_CONF_RTOS_PRESENT
306 void read_opmode_command(uint8_t cmd, uint8_t *buffer, uint16_t size);
307 void write_opmode_command(uint8_t cmd, uint8_t *buffer, uint16_t size);
308 void set_dio2_as_rfswitch_ctrl(uint8_t enable);
310 uint8_t get_device_variant(
void);
311 void set_device_ready(
void);
313 uint8_t get_fsk_bw_reg_val(uint32_t bandwidth);
314 void write_to_register(uint16_t addr, uint8_t data);
315 void write_to_register(uint16_t addr, uint8_t *data, uint8_t size);
316 uint8_t read_register(uint16_t addr);
317 void read_register(uint16_t addr, uint8_t *buffer, uint8_t size);
318 void write_fifo(uint8_t *buffer, uint8_t size);
319 void read_fifo(uint8_t *buffer, uint8_t size, uint8_t offset);
320 void rf_irq_task(
void);
321 void set_modem(uint8_t modem);
323 uint16_t get_irq_status(
void);
324 uint8_t get_frequency_support(
void);
330 void handle_dio1_irq();
337 void set_buffer_base_addr(uint8_t tx_base_addr, uint8_t rx_base_addr);
338 void get_rx_buffer_status(uint8_t *payload_len, uint8_t *rx_buffer_ptr);
341 void clear_device_errors(
void);
342 void clear_irq_status(uint16_t irq);
343 void set_crc_seed(uint16_t seed);
344 void set_crc_polynomial(uint16_t polynomial);
345 void set_whitening_seed(uint16_t seed);
346 void set_pa_config(uint8_t pa_DC, uint8_t hp_max, uint8_t device_type,
348 void set_tx_power(int8_t power);
349 void calibrate_image(uint32_t freq);
350 void configure_dio_irq(uint16_t irq_mask, uint16_t dio1_mask,
351 uint16_t dio2_mask, uint16_t dio3_mask);
352 void cold_start_wakeup();
355 uint8_t _active_modem;
356 uint8_t _standby_mode;
357 uint8_t _operation_mode;
358 uint8_t _reception_mode;
359 uint32_t _tx_timeout;
360 uint32_t _rx_timeout;
361 uint8_t _rx_timeout_in_symbols;
363 bool _image_calibrated;
364 bool _force_image_calibration;
365 bool _network_mode_public;
Interface for the radios, containing the main functions that a radio needs, and five callback functio...
virtual bool check_rf_frequency(uint32_t frequency)
Check if the given RF is in range.
virtual void set_public_network(bool enable)
Sets the network to public or private.
void set_rx_config(radio_modems_t modem, uint32_t bandwidth, uint32_t datarate, uint8_t coderate, uint32_t bandwidth_afc, uint16_t preamble_len, uint16_t symb_timeout, bool fix_len, uint8_t payload_len, bool crc_on, bool freq_hop_on, uint8_t hop_period, bool iq_inverted, bool rx_continuous) override
Sets reception parameters.
virtual void set_channel(uint32_t freq)
Sets the carrier frequency.
virtual uint32_t time_on_air(radio_modems_t modem, uint8_t pkt_len)
Computes the packet time on air for the given payload.
radio_state_t get_status(void) override
Gets the radio status.
virtual void unlock(void)
Release exclusive access.
virtual void set_tx_config(radio_modems_t modem, int8_t power, uint32_t fdev, uint32_t bandwidth, uint32_t datarate, uint8_t coderate, uint16_t preamble_len, bool fix_len, bool crc_on, bool freq_hop_on, uint8_t hop_period, bool iq_inverted, uint32_t timeout)
Sets the transmission parameters.
virtual void receive(void)
Sets the radio to receive.
virtual void send(uint8_t *buffer, uint8_t size)
Sends the buffer of size.
virtual bool perform_carrier_sense(radio_modems_t modem, uint32_t freq, int16_t rssi_threshold, uint32_t max_carrier_sense_time)
Perform carrier sensing.
virtual void init_radio(radio_events_t *events)
Registers radio events with the Mbed LoRaWAN stack and undergoes initialization steps if any.
virtual void sleep(void)
Put the RF module in sleep mode.
virtual void standby(void)
Sets the radio in standby mode.
virtual void radio_reset()
Resets the radio module.
virtual void set_tx_continuous_wave(uint32_t freq, int8_t power, uint16_t time)
Sets the radio in continuous wave transmission mode.
virtual uint32_t random(void)
Generates a 32 bits random value based on the RSSI readings.
virtual void lock(void)
Acquire exclusive access.
virtual void set_max_payload_length(radio_modems_t modem, uint8_t max)
Sets the maximum payload length.
virtual void start_cad(void)
Sets the radio in CAD mode.
An analog input, used for reading the voltage on a pin.
A digital input, used for reading the state of a pin.
A digital input/output, used for setting or reading a bi-directional pin.
A digital output, used for setting the state of a pin.
A digital interrupt input, used to call a function on a rising or falling edge.
An SPI Master, used for communicating with SPI slave devices.
The Mutex class is used to synchronize the execution of threads.
The Thread class allow defining, creating, and controlling thread functions in the system.
enum radio_state radio_state_t
Radio driver internal state.
enum modem_type radio_modems_t
Type of modem.
The type describing the modulation parameters for every packet types.
The type describing the packet parameters for every packet types.
Represents the packet status for every packet type.
Reporting functions for upper layers.
SX126x driver implementation.
radio_TCXO_ctrl_voltage_t
Represents the volatge used to control the TCXO on/off from DIO3.
lora_cad_symbols_t
Represents the number of symbols to be used for channel activity detection operation.
cad_exit_modes_t
Represents the Channel Activity Detection actions after the CAD operation is finished.
Represents the possible radio system error states.