26 #ifndef SX1272_LORARADIO_H_ 27 #define SX1272_LORARADIO_H_ 32 #include "InterruptIn.h" 33 #include "DigitalOut.h" 34 #include "DigitalInOut.h" 36 #include "platform/PlatformMutex.h" 37 #ifdef MBED_CONF_RTOS_PRESENT 38 #include "rtos/Thread.h" 41 #include "lorawan/LoRaRadio.h" 43 #ifdef MBED_CONF_SX1272_LORA_DRIVER_BUFFER_SIZE 44 #define MAX_DATA_BUFFER_SIZE_SX172 MBED_CONF_SX1272_LORA_DRIVER_BUFFER_SIZE 46 #define MAX_DATA_BUFFER_SIZE_SX172 255 50 #include "LowPowerTimeout.h" 51 #define ALIAS_LORAWAN_TIMER mbed::LowPowerTimeout 54 #define ALIAS_LORAWAN_TIMER mbed::Timeout 79 PinName rf_switch_ctl1 = NC,
80 PinName rf_switch_ctl2 = NC,
83 PinName ant_switch = NC,
84 PinName pwr_amp_ctl = NC,
108 virtual void sleep(
void);
151 uint32_t datarate, uint8_t coderate,
152 uint32_t bandwidth_afc, uint16_t preamble_len,
153 uint16_t symb_timeout,
bool fix_len,
155 bool crc_on,
bool freq_hop_on, uint8_t hop_period,
156 bool iq_inverted,
bool rx_continuous);
188 uint32_t bandwidth, uint32_t datarate,
189 uint8_t coderate, uint16_t preamble_len,
190 bool fix_len,
bool crc_on,
bool freq_hop_on,
191 uint8_t hop_period,
bool iq_inverted, uint32_t timeout);
201 virtual void send(uint8_t *buffer, uint8_t size);
237 virtual uint32_t
random(
void);
292 int16_t rssi_threshold,
293 uint32_t max_carrier_sense_time);
319 virtual void lock(
void);
324 virtual void unlock(
void);
373 uint8_t _data_buffer[MAX_DATA_BUFFER_SIZE_SX172];
379 ALIAS_LORAWAN_TIMER tx_timeout_timer;
381 #ifdef MBED_CONF_RTOS_PRESENT 389 uint8_t radio_variant;
394 bool radio_is_active;
397 void setup_registers();
398 void default_antenna_switch_ctrls();
399 void set_antenna_switch(uint8_t operation_mode);
403 void setup_interrupts();
404 void set_modem(uint8_t modem);
405 void set_operation_mode(uint8_t mode);
406 void set_low_power_mode(
bool status);
407 void set_sx1272_variant_type();
408 uint8_t get_pa_conf_reg();
409 void set_rf_tx_power(int8_t power);
411 uint8_t get_fsk_bw_reg_val(uint32_t bandwidth);
412 void write_to_register(uint8_t addr, uint8_t data);
413 void write_to_register(uint8_t addr, uint8_t *data, uint8_t size);
414 uint8_t read_register(uint8_t addr);
415 void read_register(uint8_t addr, uint8_t *buffer, uint8_t size);
416 void write_fifo(uint8_t *buffer, uint8_t size);
417 void read_fifo(uint8_t *buffer, uint8_t size);
418 void transmit(uint32_t timeout);
419 void rf_irq_task(
void);
428 void timeout_irq_isr();
431 void handle_dio0_irq();
432 void handle_dio1_irq();
433 void handle_dio2_irq();
434 void handle_dio3_irq();
435 void handle_dio4_irq();
436 void handle_dio5_irq();
437 void handle_timeout_irq();
The Thread class allow defining, creating, and controlling thread functions in the system...
virtual uint32_t time_on_air(radio_modems_t modem, uint8_t pkt_len)
Computes the packet time on air for the given payload.
virtual void receive(void)
Sets the radio to receive.
virtual void standby(void)
Sets the radio in standby mode.
enum modem_type radio_modems_t
Type of modem.
virtual void set_channel(uint32_t freq)
Sets the carrier frequency.
Structure to hold RF controls for LoRa Radio.
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 start_cad(void)
Sets the radio in CAD mode.
virtual ~SX1272_LoRaRadio()
Destructor.
virtual void radio_reset()
Resets the radio module.
A digital input/output, used for setting or reading a bi-directional pin.
SX1272_LoRaRadio(PinName mosi, PinName miso, PinName sclk, PinName nss, PinName reset, PinName dio0, PinName dio1, PinName dio2, PinName dio3, PinName dio4, PinName dio5, PinName rf_switch_ctl1=NC, PinName rf_switch_ctl2=NC, PinName txctl=NC, PinName rxctl=NC, PinName ant_switch=NC, PinName pwr_amp_ctl=NC, PinName tcxo=NC)
Use this constructor if pin definitions are provided manually.
virtual void set_tx_continuous_wave(uint32_t freq, int8_t power, uint16_t time)
Sets the radio in continuous wave transmission mode.
Reporting functions for upper layers.
virtual void unlock(void)
Release exclusive access.
virtual void set_max_payload_length(radio_modems_t modem, uint8_t max)
Sets the maximum payload length.
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 init_radio(radio_events_t *events)
Registers radio events with the Mbed LoRaWAN stack and undergoes initialization steps if any...
virtual void lock(void)
Acquire exclusive access.
virtual void send(uint8_t *buffer, uint8_t size)
Sends the buffer of size.
A digital interrupt input, used to call a function on a rising or falling edge.
virtual void receive(uint32_t timeout)
For backwards compatibility.
virtual bool check_rf_frequency(uint32_t frequency)
Check if the given RF is in range.
A digital output, used for setting the state of a pin.
A SPI Master, used for communicating with SPI slave devices.
virtual uint32_t random(void)
Generates a 32 bits random value based on the RSSI readings.
Radio driver implementation for Semtech SX1272 plus variants.
virtual uint8_t get_status(void)
Get radio status.
Interface for the radios, containing the main functions that a radio needs, and five callback functio...
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 set_public_network(bool enable)
Sets the network to public or private.
virtual void sleep(void)
Put the RF module in sleep mode.