Mbed OS Reference
Loading...
Searching...
No Matches
SX1276_LoRaRadio Class Reference

Radio driver implementation for Semtech SX1272 plus variants. More...

#include <SX1276_LoRaRadio.h>

Inheritance diagram for SX1276_LoRaRadio:
LoRaRadio

Public Member Functions

 SX1276_LoRaRadio (PinName mosi=MBED_CONF_SX1276_LORA_DRIVER_SPI_MOSI, PinName miso=MBED_CONF_SX1276_LORA_DRIVER_SPI_MISO, PinName sclk=MBED_CONF_SX1276_LORA_DRIVER_SPI_SCLK, PinName nss=MBED_CONF_SX1276_LORA_DRIVER_SPI_CS, PinName reset=MBED_CONF_SX1276_LORA_DRIVER_RESET, PinName dio0=MBED_CONF_SX1276_LORA_DRIVER_DIO0, PinName dio1=MBED_CONF_SX1276_LORA_DRIVER_DIO1, PinName dio2=MBED_CONF_SX1276_LORA_DRIVER_DIO2, PinName dio3=MBED_CONF_SX1276_LORA_DRIVER_DIO3, PinName dio4=MBED_CONF_SX1276_LORA_DRIVER_DIO4, PinName dio5=MBED_CONF_SX1276_LORA_DRIVER_DIO5, PinName rf_switch_ctl1=MBED_CONF_SX1276_LORA_DRIVER_RF_SWITCH_CTL1, PinName rf_switch_ctl2=MBED_CONF_SX1276_LORA_DRIVER_RF_SWITCH_CTL2, PinName txctl=MBED_CONF_SX1276_LORA_DRIVER_TXCTL, PinName rxctl=MBED_CONF_SX1276_LORA_DRIVER_RXCTL, PinName ant_switch=MBED_CONF_SX1276_LORA_DRIVER_ANT_SWITCH, PinName pwr_amp_ctl=MBED_CONF_SX1276_LORA_DRIVER_PWR_AMP_CTL, PinName tcxo=MBED_CONF_SX1276_LORA_DRIVER_TCXO)
 Use this constructor if pin definitions are provided manually. More...
 
virtual ~SX1276_LoRaRadio ()
 Destructor. More...
 
virtual void init_radio (radio_events_t *events)
 Registers radio events with the Mbed LoRaWAN stack and undergoes initialization steps if any. More...
 
virtual void radio_reset ()
 Resets the radio module. More...
 
virtual void sleep (void)
 Put the RF module in sleep mode. More...
 
virtual void standby (void)
 Sets the radio in standby mode. More...
 
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. More...
 
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. More...
 
virtual void send (uint8_t *buffer, uint8_t size)
 Sends the buffer of size. More...
 
virtual void receive (uint32_t timeout)
 For backwards compatibility. More...
 
virtual void receive (void)
 Sets the radio to receive. More...
 
virtual void set_channel (uint32_t freq)
 Sets the carrier frequency. More...
 
virtual uint32_t random (void)
 Generates a 32 bits random value based on the RSSI readings. More...
 
radio_state_t get_status (void) override
 Gets the radio status. More...
 
virtual void set_max_payload_length (radio_modems_t modem, uint8_t max)
 Sets the maximum payload length. More...
 
virtual void set_public_network (bool enable)
 Sets the network to public or private. More...
 
virtual uint32_t time_on_air (radio_modems_t modem, uint8_t pkt_len)
 Computes the packet time on air for the given payload. More...
 
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. More...
 
virtual void start_cad (void)
 Sets the radio in CAD mode. More...
 
virtual bool check_rf_frequency (uint32_t frequency)
 Check if the given RF is in range. More...
 
virtual void set_tx_continuous_wave (uint32_t freq, int8_t power, uint16_t time)
 Sets the radio in continuous wave transmission mode. More...
 
virtual void lock (void)
 Acquire exclusive access. More...
 
virtual void unlock (void)
 Release exclusive access. More...
 

Detailed Description

Radio driver implementation for Semtech SX1272 plus variants.

Supports only SPI at the moment. Implements pure virtual LoRaRadio class.

Definition at line 61 of file SX1276_LoRaRadio.h.

Constructor & Destructor Documentation

◆ SX1276_LoRaRadio()

SX1276_LoRaRadio ( PinName  mosi = MBED_CONF_SX1276_LORA_DRIVER_SPI_MOSI,
PinName  miso = MBED_CONF_SX1276_LORA_DRIVER_SPI_MISO,
PinName  sclk = MBED_CONF_SX1276_LORA_DRIVER_SPI_SCLK,
PinName  nss = MBED_CONF_SX1276_LORA_DRIVER_SPI_CS,
PinName  reset = MBED_CONF_SX1276_LORA_DRIVER_RESET,
PinName  dio0 = MBED_CONF_SX1276_LORA_DRIVER_DIO0,
PinName  dio1 = MBED_CONF_SX1276_LORA_DRIVER_DIO1,
PinName  dio2 = MBED_CONF_SX1276_LORA_DRIVER_DIO2,
PinName  dio3 = MBED_CONF_SX1276_LORA_DRIVER_DIO3,
PinName  dio4 = MBED_CONF_SX1276_LORA_DRIVER_DIO4,
PinName  dio5 = MBED_CONF_SX1276_LORA_DRIVER_DIO5,
PinName  rf_switch_ctl1 = MBED_CONF_SX1276_LORA_DRIVER_RF_SWITCH_CTL1,
PinName  rf_switch_ctl2 = MBED_CONF_SX1276_LORA_DRIVER_RF_SWITCH_CTL2,
PinName  txctl = MBED_CONF_SX1276_LORA_DRIVER_TXCTL,
PinName  rxctl = MBED_CONF_SX1276_LORA_DRIVER_RXCTL,
PinName  ant_switch = MBED_CONF_SX1276_LORA_DRIVER_ANT_SWITCH,
PinName  pwr_amp_ctl = MBED_CONF_SX1276_LORA_DRIVER_PWR_AMP_CTL,
PinName  tcxo = MBED_CONF_SX1276_LORA_DRIVER_TCXO 
)

Use this constructor if pin definitions are provided manually.

The pins that are marked NC are optional. It is assumed that these pins are not connected until/unless configured otherwise.

Note: Pin ant_switch is equivalent to RxTx pin at https://developer.mbed.org/components/SX1276MB1xAS/. Reading the state of this pin indicates if the radio module type is SX1276MB1LAS(North American frequency band supported) or SX1276MAS (European frequency band supported). Pin dio4 can be mapped to multiple pins on the board, please refer to schematic of your board. For reference look at https://developer.mbed.org/components/SX1276MB1xAS/

Most of the radio module control pins are not being used at the moment as the SX1276MB1xAS shield has not connected them. For consistency and future use we are leaving the pins in the constructor. For example, if in some setting SX1276 radio module gets connected to an external power amplifier or radio latch controls are connected.

◆ ~SX1276_LoRaRadio()

virtual ~SX1276_LoRaRadio ( )
virtual

Destructor.

Member Function Documentation

◆ init_radio()

virtual void init_radio ( radio_events_t events)
virtual

Registers radio events with the Mbed LoRaWAN stack and undergoes initialization steps if any.

Parameters
eventsStructure containing the driver callback functions

Implements LoRaRadio.

◆ radio_reset()

virtual void radio_reset ( )
virtual

Resets the radio module.

Implements LoRaRadio.

◆ sleep()

virtual void sleep ( void  )
virtual

Put the RF module in sleep mode.

Implements LoRaRadio.

◆ standby()

virtual void standby ( void  )
virtual

Sets the radio in standby mode.

Implements LoRaRadio.

◆ set_rx_config()

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 
)
overridevirtual

Sets reception parameters.

Parameters
modemThe radio modem [0: FSK, 1: LoRa].
bandwidthSets the bandwidth. FSK : >= 2600 and <= 250000 Hz LoRa: [0: 125 kHz, 1: 250 kHz, 2: 500 kHz, 3: Reserved]
datarateSets the datarate. FSK : 600..300000 bits/s LoRa: [6: 64, 7: 128, 8: 256, 9: 512, 10: 1024, 11: 2048, 12: 4096 chips]
coderateSets the coding rate (LoRa only). FSK : N/A ( set to 0 ) LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
bandwidth_afcSets the AFC bandwidth (FSK only). FSK : >= 2600 and <= 250000 Hz LoRa: N/A (set to 0)
preamble_lenSets the preamble length (LoRa only). FSK : N/A (set to 0) LoRa: Length in symbols (the hardware adds four more symbols).
symb_timeoutSets the RxSingle timeout value. FSK : Timeout number of bytes LoRa: Timeout in symbols
fix_lenFixed length packets [0: variable, 1: fixed].
payload_lenSets the payload length when fixed length is used.
crc_onEnables/disables CRC [0: OFF, 1: ON].
freq_hop_onEnables/disables intra-packet frequency hopping [0: OFF, 1: ON] (LoRa only).
hop_periodThe number of symbols bewteen each hop (LoRa only).
iq_invertedInverts the IQ signals (LoRa only). FSK : N/A (set to 0) LoRa: [0: not inverted, 1: inverted]
rx_continuousSets the reception to continuous mode. [false: single mode, true: continuous mode]

Implements LoRaRadio.

◆ set_tx_config()

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 
)
virtual

Sets the transmission parameters.

Parameters
modemRadio modem to be used [0: FSK, 1: LoRa]
powerSets the output power [dBm]
fdevSets the frequency deviation ( FSK only ) FSK : [Hz] LoRa: 0
bandwidthSets the bandwidth ( LoRa only ) FSK : 0 LoRa: [0: 125 kHz, 1: 250 kHz, 2: 500 kHz, 3: Reserved]
datarateSets the Datarate FSK : 600..300000 bits/s LoRa: [6: 64, 7: 128, 8: 256, 9: 512, 10: 1024, 11: 2048, 12: 4096 chips]
coderateSets the coding rate ( LoRa only ) FSK : N/A ( set to 0 ) LoRa: [1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8]
preamble_lenSets the preamble length
fix_lenFixed length packets [0: variable, 1: fixed]
crc_onEnables disables the CRC [0: OFF, 1: ON]
freq_hop_onEnables disables the intra-packet frequency hopping [0: OFF, 1: ON] (LoRa only)
hop_periodNumber of symbols bewteen each hop (LoRa only)
iq_invertedInverts IQ signals ( LoRa only ) FSK : N/A ( set to 0 ) LoRa: [0: not inverted, 1: inverted]
timeoutTransmission timeout [ms]

Implements LoRaRadio.

◆ send()

virtual void send ( uint8_t *  buffer,
uint8_t  size 
)
virtual

Sends the buffer of size.

Prepares the packet to be sent and sets the radio in transmission

Parameters
bufferBuffer pointer
sizeBuffer size

Implements LoRaRadio.

◆ receive() [1/2]

virtual void receive ( uint32_t  timeout)
virtual

For backwards compatibility.

Definition at line 187 of file SX1276_LoRaRadio.h.

◆ receive() [2/2]

virtual void receive ( void  )
virtual

Sets the radio to receive.

All necessary configuration options for reception are set in 'set_rx_config(parameters)' API.

Implements LoRaRadio.

◆ set_channel()

virtual void set_channel ( uint32_t  freq)
virtual

Sets the carrier frequency.

Parameters
freqChannel RF frequency

Implements LoRaRadio.

◆ random()

virtual uint32_t random ( void  )
virtual

Generates a 32 bits random value based on the RSSI readings.

Remark this function sets the radio in LoRa modem mode and disables all interrupts. After calling this function either Radio.SetRxConfig or Radio.SetTxConfig functions must be called.

Returns
32 bits random value

Implements LoRaRadio.

◆ get_status()

radio_state_t get_status ( void  )
overridevirtual

Gets the radio status.

Returns
The current radio status (RF_IDLE, RF_RX_RUNNING, RF_TX_RUNNING, etc.)

Implements LoRaRadio.

◆ set_max_payload_length()

virtual void set_max_payload_length ( radio_modems_t  modem,
uint8_t  max 
)
virtual

Sets the maximum payload length.

Parameters
modemRadio modem to be used [0: FSK, 1: LoRa]
maxMaximum payload length in bytes

Implements LoRaRadio.

◆ set_public_network()

virtual void set_public_network ( bool  enable)
virtual

Sets the network to public or private.

Updates the sync byte. Applies to LoRa modem only

Parameters
enableif true, it enables a public network

Implements LoRaRadio.

◆ time_on_air()

virtual uint32_t time_on_air ( radio_modems_t  modem,
uint8_t  pkt_len 
)
virtual

Computes the packet time on air for the given payload.

Remark can only be called once SetRxConfig or SetTxConfig have been called

Parameters
modemRadio modem to be used [0: FSK, 1: LoRa]
pkt_lenPacket payload length
Returns
Computed airTime for the given packet payload length

Implements LoRaRadio.

◆ perform_carrier_sense()

virtual bool perform_carrier_sense ( radio_modems_t  modem,
uint32_t  freq,
int16_t  rssi_threshold,
uint32_t  max_carrier_sense_time 
)
virtual

Perform carrier sensing.

Checks for a certain time if the RSSI is above a given threshold. This threshold determines if there is already a transmission going on in the channel or not.

Parameters
modemType of the radio modem
freqCarrier frequency
rssi_thresholdThreshold value of RSSI
max_carrier_sense_timetime to sense the channel
Returns
true if there is no active transmission in the channel, false otherwise

Implements LoRaRadio.

◆ start_cad()

virtual void start_cad ( void  )
virtual

Sets the radio in CAD mode.

Implements LoRaRadio.

◆ check_rf_frequency()

virtual bool check_rf_frequency ( uint32_t  frequency)
virtual

Check if the given RF is in range.

Parameters
frequencyfrequency needed to be checked

Implements LoRaRadio.

◆ set_tx_continuous_wave()

virtual void set_tx_continuous_wave ( uint32_t  freq,
int8_t  power,
uint16_t  time 
)
virtual

Sets the radio in continuous wave transmission mode.

Parameters
freqChannel RF frequency
powerSets the output power [dBm]
timeTransmission mode timeout [s]

Implements LoRaRadio.

◆ lock()

virtual void lock ( void  )
virtual

Acquire exclusive access.

Implements LoRaRadio.

◆ unlock()

virtual void unlock ( void  )
virtual

Release exclusive access.

Implements LoRaRadio.