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 69 PinName miso = MBED_CONF_SX1272_LORA_DRIVER_SPI_MISO,
70 PinName sclk = MBED_CONF_SX1272_LORA_DRIVER_SPI_SCLK,
71 PinName nss = MBED_CONF_SX1272_LORA_DRIVER_SPI_CS,
72 PinName reset = MBED_CONF_SX1272_LORA_DRIVER_RESET,
73 PinName dio0 = MBED_CONF_SX1272_LORA_DRIVER_DIO0,
74 PinName dio1 = MBED_CONF_SX1272_LORA_DRIVER_DIO1,
75 PinName dio2 = MBED_CONF_SX1272_LORA_DRIVER_DIO2,
76 PinName dio3 = MBED_CONF_SX1272_LORA_DRIVER_DIO3,
77 PinName dio4 = MBED_CONF_SX1272_LORA_DRIVER_DIO4,
78 PinName dio5 = MBED_CONF_SX1272_LORA_DRIVER_DIO5,
79 PinName rf_switch_ctl1 = MBED_CONF_SX1272_LORA_DRIVER_RF_SWITCH_CTL1,
80 PinName rf_switch_ctl2 = MBED_CONF_SX1272_LORA_DRIVER_RF_SWITCH_CTL2,
81 PinName txctl = MBED_CONF_SX1272_LORA_DRIVER_TXCTL,
82 PinName rxctl = MBED_CONF_SX1272_LORA_DRIVER_RXCTL,
83 PinName ant_switch = MBED_CONF_SX1272_LORA_DRIVER_ANT_SWITCH,
84 PinName pwr_amp_ctl = MBED_CONF_SX1272_LORA_DRIVER_PWR_AMP_CTL,
85 PinName tcxo = MBED_CONF_SX1272_LORA_DRIVER_TCXO
109 virtual void sleep(
void);
152 uint32_t datarate, uint8_t coderate,
153 uint32_t bandwidth_afc, uint16_t preamble_len,
154 uint16_t symb_timeout,
bool fix_len,
156 bool crc_on,
bool freq_hop_on, uint8_t hop_period,
157 bool iq_inverted,
bool rx_continuous);
189 uint32_t bandwidth, uint32_t datarate,
190 uint8_t coderate, uint16_t preamble_len,
191 bool fix_len,
bool crc_on,
bool freq_hop_on,
192 uint8_t hop_period,
bool iq_inverted, uint32_t timeout);
202 virtual void send(uint8_t *buffer, uint8_t size);
238 virtual uint32_t
random(
void);
293 int16_t rssi_threshold,
294 uint32_t max_carrier_sense_time);
320 virtual void lock(
void);
325 virtual void unlock(
void);
374 uint8_t _data_buffer[MAX_DATA_BUFFER_SIZE_SX172];
380 ALIAS_LORAWAN_TIMER tx_timeout_timer;
382 #ifdef MBED_CONF_RTOS_PRESENT 390 uint8_t radio_variant;
395 bool radio_is_active;
398 void setup_registers();
399 void default_antenna_switch_ctrls();
400 void set_antenna_switch(uint8_t operation_mode);
404 void setup_interrupts();
405 void set_modem(uint8_t modem);
406 void set_operation_mode(uint8_t mode);
407 void set_low_power_mode(
bool status);
408 void set_sx1272_variant_type();
409 uint8_t get_pa_conf_reg();
410 void set_rf_tx_power(int8_t power);
412 uint8_t get_fsk_bw_reg_val(uint32_t bandwidth);
413 void write_to_register(uint8_t addr, uint8_t data);
414 void write_to_register(uint8_t addr, uint8_t *data, uint8_t size);
415 uint8_t read_register(uint8_t addr);
416 void read_register(uint8_t addr, uint8_t *buffer, uint8_t size);
417 void write_fifo(uint8_t *buffer, uint8_t size);
418 void read_fifo(uint8_t *buffer, uint8_t size);
419 void transmit(uint32_t timeout);
420 void rf_irq_task(
void);
429 void timeout_irq_isr();
432 void handle_dio0_irq();
433 void handle_dio1_irq();
434 void handle_dio2_irq();
435 void handle_dio3_irq();
436 void handle_dio4_irq();
437 void handle_dio5_irq();
438 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.
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.
SX1272_LoRaRadio(PinName mosi=MBED_CONF_SX1272_LORA_DRIVER_SPI_MOSI, PinName miso=MBED_CONF_SX1272_LORA_DRIVER_SPI_MISO, PinName sclk=MBED_CONF_SX1272_LORA_DRIVER_SPI_SCLK, PinName nss=MBED_CONF_SX1272_LORA_DRIVER_SPI_CS, PinName reset=MBED_CONF_SX1272_LORA_DRIVER_RESET, PinName dio0=MBED_CONF_SX1272_LORA_DRIVER_DIO0, PinName dio1=MBED_CONF_SX1272_LORA_DRIVER_DIO1, PinName dio2=MBED_CONF_SX1272_LORA_DRIVER_DIO2, PinName dio3=MBED_CONF_SX1272_LORA_DRIVER_DIO3, PinName dio4=MBED_CONF_SX1272_LORA_DRIVER_DIO4, PinName dio5=MBED_CONF_SX1272_LORA_DRIVER_DIO5, PinName rf_switch_ctl1=MBED_CONF_SX1272_LORA_DRIVER_RF_SWITCH_CTL1, PinName rf_switch_ctl2=MBED_CONF_SX1272_LORA_DRIVER_RF_SWITCH_CTL2, PinName txctl=MBED_CONF_SX1272_LORA_DRIVER_TXCTL, PinName rxctl=MBED_CONF_SX1272_LORA_DRIVER_RXCTL, PinName ant_switch=MBED_CONF_SX1272_LORA_DRIVER_ANT_SWITCH, PinName pwr_amp_ctl=MBED_CONF_SX1272_LORA_DRIVER_PWR_AMP_CTL, PinName tcxo=MBED_CONF_SX1272_LORA_DRIVER_TCXO)
Use this constructor if pin definitions are provided manually.
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.