35#ifndef MBED_LORA_RADIO_DRV_STM32WL_LORARADIO_H_
36#define MBED_LORA_RADIO_DRV_STM32WL_LORARADIO_H_
38#include "platform/mbed_critical.h"
39#include "drivers/DigitalOut.h"
40#include "rtos/Mutex.h"
41#include "lorawan/LoRaRadio.h"
48#ifdef MBED_CONF_STM32WL_LORA_DRIVER_BUFFER_SIZE
49#define MAX_DATA_BUFFER_SIZE_STM32WL MBED_CONF_STM32WL_LORA_DRIVER_BUFFER_SIZE
51#define MAX_DATA_BUFFER_SIZE_STM32WL 255
54extern void set_antenna_switch(RBI_Switch_TypeDef state);
87 uint32_t datarate, uint8_t coderate,
88 uint32_t bandwidth_afc, uint16_t preamble_len,
89 uint16_t symb_timeout,
bool fix_len,
91 bool crc_on,
bool freq_hop_on, uint8_t hop_period,
92 bool iq_inverted,
bool rx_continuous)
override;
124 uint32_t bandwidth, uint32_t datarate,
125 uint8_t coderate, uint16_t preamble_len,
126 bool fix_len,
bool crc_on,
bool freq_hop_on,
127 uint8_t hop_period,
bool iq_inverted, uint32_t timeout);
137 virtual void send(uint8_t *buffer, uint8_t size);
222 int16_t rssi_threshold,
223 uint32_t max_carrier_sense_time);
256 static void HAL_SUBGHZ_TxCpltCallback(
void);
257 static void HAL_SUBGHZ_RxCpltCallback(
void);
258 static void HAL_SUBGHZ_CRCErrorCallback(
void);
259 static void HAL_SUBGHZ_CADStatusCallback(
void);
260 static void HAL_SUBGHZ_RxTxTimeoutCallback(
void);
263 static void clear_irq_status(uint16_t irq);
264 static uint16_t get_irq_status(
void);
265 static void read_opmode_command(uint8_t cmd, uint8_t *buffer, uint16_t size);
266 static void write_opmode_command(uint8_t cmd, uint8_t *buffer, uint16_t size);
267 static void read_fifo(uint8_t *buffer, uint8_t size, uint8_t offset);
268 static void get_rx_buffer_status(uint8_t *payload_len, uint8_t *rx_buffer_ptr);
270 static uint8_t get_modem();
271 static uint8_t read_register(uint16_t addr);
282 void set_device_ready(
void);
284 uint8_t get_fsk_bw_reg_val(uint32_t bandwidth);
285 void write_to_register(uint16_t addr, uint8_t data);
286 void write_to_register(uint16_t addr, uint8_t *data, uint8_t size);
288 void read_register(uint16_t addr, uint8_t *buffer, uint8_t size);
289 void write_fifo(uint8_t *buffer, uint8_t size);
291 void rf_irq_task(
void);
292 void set_modem(uint8_t modem);
295 uint8_t get_frequency_support(
void);
304 void set_buffer_base_addr(uint8_t tx_base_addr, uint8_t rx_base_addr);
307 void clear_device_errors(
void);
309 void set_crc_seed(uint16_t seed);
310 void set_crc_polynomial(uint16_t polynomial);
311 void set_whitening_seed(uint16_t seed);
312 void set_pa_config(uint8_t pa_DC, uint8_t hp_max, uint8_t device_type,
314 void set_tx_power(int8_t power);
315 void calibrate_image(uint32_t freq);
316 void configure_dio_irq(uint16_t irq_mask, uint16_t dio1_mask,
317 uint16_t dio2_mask, uint16_t dio3_mask);
318 void cold_start_wakeup();
320 void SUBGRF_SetSwitch(uint8_t paSelect,
RFState_t rxtx);
321 uint8_t SUBGRF_SetRfTxPower(int8_t power);
322 void SUBGRF_SetTxParams(uint8_t paSelect, int8_t power,
radio_ramp_time_t rampTime);
323 void Radio_SMPS_Set(uint8_t level);
324 uint32_t RadioGetWakeupTime(
void);
327 uint8_t _standby_mode;
329 uint8_t _reception_mode;
330 uint32_t _tx_timeout;
331 uint32_t _rx_timeout;
332 uint8_t _rx_timeout_in_symbols;
334 uint8_t _antSwitchPaSelect;
335 bool _image_calibrated;
336 bool _force_image_calibration;
337 bool _network_mode_public;
STM32WL driver implementation.
RFState_t
Radio driver internal state machine states definition.
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 void receive(uint32_t timeout)
For backwards compatibility.
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.
The Mutex class is used to synchronize the execution of threads.
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.
radio_ramp_time_t
Represents the ramping time for power amplifier.
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.