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 "platform/PlatformMutex.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 54 extern void set_antenna_switch(RBI_Switch_TypeDef state);
79 virtual void sleep(
void);
122 uint32_t datarate, uint8_t coderate,
123 uint32_t bandwidth_afc, uint16_t preamble_len,
124 uint16_t symb_timeout,
bool fix_len,
126 bool crc_on,
bool freq_hop_on, uint8_t hop_period,
127 bool iq_inverted,
bool rx_continuous);
159 uint32_t bandwidth, uint32_t datarate,
160 uint8_t coderate, uint16_t preamble_len,
161 bool fix_len,
bool crc_on,
bool freq_hop_on,
162 uint8_t hop_period,
bool iq_inverted, uint32_t timeout);
172 virtual void send(uint8_t *buffer, uint8_t size);
208 virtual uint32_t
random(
void);
263 int16_t rssi_threshold,
264 uint32_t max_carrier_sense_time);
290 virtual void lock(
void);
295 virtual void unlock(
void);
297 static void HAL_SUBGHZ_TxCpltCallback(
void);
298 static void HAL_SUBGHZ_RxCpltCallback(
void);
299 static void HAL_SUBGHZ_CRCErrorCallback(
void);
300 static void HAL_SUBGHZ_CADStatusCallback(
void);
301 static void HAL_SUBGHZ_RxTxTimeoutCallback(
void);
304 static void clear_irq_status(uint16_t irq);
305 static uint16_t get_irq_status(
void);
306 static void read_opmode_command(uint8_t cmd, uint8_t *buffer, uint16_t size);
307 static void write_opmode_command(uint8_t cmd, uint8_t *buffer, uint16_t size);
308 static void read_fifo(uint8_t *buffer, uint8_t size, uint8_t offset);
309 static void get_rx_buffer_status(uint8_t *payload_len, uint8_t *rx_buffer_ptr);
311 static uint8_t get_modem();
312 static uint8_t read_register(uint16_t addr);
322 void SUBGRF_SetTcxoMode(radio_TCXO_ctrl_voltage_t voltage, uint32_t timeout);
323 void set_device_ready(
void);
325 uint8_t get_fsk_bw_reg_val(uint32_t bandwidth);
326 void write_to_register(uint16_t addr, uint8_t data);
327 void write_to_register(uint16_t addr, uint8_t *data, uint8_t size);
329 void read_register(uint16_t addr, uint8_t *buffer, uint8_t size);
330 void write_fifo(uint8_t *buffer, uint8_t size);
332 void rf_irq_task(
void);
333 void set_modem(uint8_t modem);
336 uint8_t get_frequency_support(
void);
342 void set_cad_params(lora_cad_symbols_t nb_symbols, uint8_t det_peak,
343 uint8_t det_min, cad_exit_modes_t exit_mode,
345 void set_buffer_base_addr(uint8_t tx_base_addr, uint8_t rx_base_addr);
348 void clear_device_errors(
void);
350 void set_crc_seed(uint16_t seed);
351 void set_crc_polynomial(uint16_t polynomial);
352 void set_whitening_seed(uint16_t seed);
353 void set_pa_config(uint8_t pa_DC, uint8_t hp_max, uint8_t device_type,
355 void set_tx_power(int8_t power);
356 void calibrate_image(uint32_t freq);
357 void configure_dio_irq(uint16_t irq_mask, uint16_t dio1_mask,
358 uint16_t dio2_mask, uint16_t dio3_mask);
359 void cold_start_wakeup();
361 void SUBGRF_SetSwitch(uint8_t paSelect,
RFState_t rxtx);
362 uint8_t SUBGRF_SetRfTxPower(int8_t power);
363 void SUBGRF_SetTxParams(uint8_t paSelect, int8_t power, radio_ramp_time_t rampTime);
364 void Radio_SMPS_Set(uint8_t level);
365 uint32_t RadioGetWakeupTime(
void);
368 uint8_t _standby_mode;
370 uint8_t _reception_mode;
371 uint32_t _tx_timeout;
372 uint32_t _rx_timeout;
373 uint8_t _rx_timeout_in_symbols;
375 uint8_t _antSwitchPaSelect;
376 bool _image_calibrated;
377 bool _force_image_calibration;
378 bool _network_mode_public;
virtual uint8_t get_status(void)
Get radio status.
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.
The type describing the packet parameters for every packet types.
virtual void receive(uint32_t timeout)
For backwards compatibility.
virtual void start_cad(void)
Sets the radio in CAD mode.
STM32WL driver implementation.
virtual void receive(void)
Sets the radio to receive.
virtual void send(uint8_t *buffer, uint8_t size)
Sends the buffer of size.
Represents the possible radio system error states.
virtual void init_radio(radio_events_t *events)
Registers radio events with the Mbed LoRaWAN stack and undergoes initialization steps if any...
enum modem_type radio_modems_t
Type of modem.
virtual void set_max_payload_length(radio_modems_t modem, uint8_t max)
Sets the maximum payload length.
virtual void lock(void)
Acquire exclusive access.
Represents the packet status for every packet type.
virtual void radio_reset()
Resets the radio module.
Reporting functions for upper layers.
virtual void set_channel(uint32_t freq)
Sets the carrier frequency.
virtual void standby(void)
Sets the radio in standby mode.
virtual 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)
Sets the reception parameters.
virtual void unlock(void)
Release exclusive access.
RFState_t
Radio driver internal state machine states definition.
virtual void set_public_network(bool enable)
Sets the network to public or private.
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 bool check_rf_frequency(uint32_t frequency)
Check if the given RF is in range.
virtual void sleep(void)
Put the RF module in sleep mode.
virtual uint32_t time_on_air(radio_modems_t modem, uint8_t pkt_len)
Computes the packet time on air for the given payload.
Interface for the radios, containing the main functions that a radio needs, and five callback functio...
virtual uint32_t random(void)
Generates a 32 bits random value based on the RSSI readings.
The type describing the modulation parameters for every packet types.
virtual void set_tx_continuous_wave(uint32_t freq, int8_t power, uint16_t time)
Sets the radio in continuous wave transmission mode.