32using namespace SX1278;
33using namespace SX1278::Lora;
35static constexpr uint8_t MAX_PAYLOAD_LENGTH = 0xff;
36static constexpr uint8_t FIFO_TX_BASE_ADDR = 0x00;
37static constexpr uint8_t FIFO_RX_BASE_ADDR = 0x00;
108 bool freq_rf_low_range = 410000000 <=
freq_rf &&
freq_rf <= 525000000;
109 bool freq_rf_high_range = 862000000 <=
freq_rf &&
freq_rf <= 1020000000;
171 "[sx1278] Configured power invalid for given frontend!");
173 (config.
ocp >= 130 && config.
ocp <= 240)) &&
174 "[sx1278] Invalid ocp!");
176 "[sx1278] Invalid freq_rf");
197 int ocp = config.
ocp <= 120 ? std::max(std::min(config.
ocp, 120), 0)
198 : std::max(std::min(config.
ocp, 240), 130);
205 low_data_rate_optimize =
true;
234 else if (power != 20)
320 readFifo(FIFO_RX_BASE_ADDR,
pkt, len);
335 writeFifo(FIFO_TX_BASE_ADDR,
pkt, len);
373 return static_cast<float>(
378void SX1278Lora::enterLoraMode()
386 miosix::Thread::sleep(1);
391 miosix::Thread::sleep(1);
394void SX1278Lora::readFifo(uint8_t addr, uint8_t* dst, uint8_t size)
398 spi.readRegisters(
REG_FIFO, dst, size);
401void SX1278Lora::writeFifo(uint8_t addr, uint8_t* src, uint8_t size)
405 spi.writeRegisters(
REG_FIFO, src, size);
414void SX1278Lora::resetIrqFlags(IrqFlags flags)
#define LOG_ERR(logger,...)
Provides high-level access to the SPI Bus for a single transaction.
uint8_t readRegister(uint8_t reg)
Reads an 8 bit register.
void writeRegister24(uint8_t reg, uint32_t data)
Writes a 24 bit register.
void writeRegister(uint8_t reg, uint8_t data)
Writes an 8 bit register.
virtual bool isOnPaBoost()=0
Is this frontend connected to PA_BOOST or RFO_LF/_HF?
virtual int maxInPower()=0
What is the maximum power supported by this frontend?
RAII scoped bus lock guard.
RAII scoped mode lock, requires a previous lock.
ISX1278Frontend & getFrontend()
void setDefaultMode(Mode mode, DioMapping mapping, InterruptTrigger dio1_trigger, bool set_tx_frontend_on, bool set_rx_frontend_on)
Set default device mode.
IrqFlags checkForIrqAndReset(IrqFlags set_irq, IrqFlags reset_irq)
Returns a mask containing triggered interrupts.
IrqFlags waitForIrq(LockMode &guard, IrqFlags set_irq, IrqFlags reset_irq, bool unlock=false)
Wait for generic irq.
float getLastRxSnr() override
Get the RSSI in dBm, during last packet receive.
bool send(uint8_t *pkt, size_t len) override
Send a packet. The function must block until the packet is sent (successfully or not)
ssize_t receive(uint8_t *pkt, size_t max_len) override
Wait until a new packet is received.
virtual Error init(const Config &config)
Setup the device.
virtual Error configure(const Config &config)
Configure this device on the fly.
static constexpr size_t MTU
float getLastRxRssi() override
Get the RSSI in dBm, during last packet receive.
constexpr uint8_t make(uint8_t ocp_trim, bool ocp_on)
constexpr uint8_t make(Mode mode, bool low_frequency_mode_on, ModulationType modulation_type)
constexpr uint8_t make(uint8_t output_power, uint8_t max_power, bool pa_select)
constexpr uint8_t make(PaDac pa_dac)
constexpr uint8_t make(uint8_t detection_optimize, bool automatic_if_on)
constexpr uint8_t make(bool implicit_mode_on, Cr coding_rate, Bw bw)
constexpr uint32_t bandwidthToInt(Bw bw)
constexpr uint8_t make(bool rx_payload_crc_on, bool tx_continuous_mode, Sf spreading_factor)
constexpr uint8_t make(bool agc_auto_on, bool low_data_rate_optimize)
constexpr uint32_t symbolDuration(uint32_t spreading_factor, uint32_t bandwidth)
Computes the symbol duration in microseconds.
@ REG_DETECTION_THRESHOLD
constexpr float FSTEP
Frequency step (Hz) used in some calculations.
RegDioMapping::Mapping DioMapping
constexpr int MIN_FREQ_RF
constexpr int MAX_FREQ_RF
This file includes all the types the logdecoder script will decode.
constexpr DioMapping DEFAULT_MAPPING
static ErrataRegistersValues calculate(RegModemConfig1::Bw bw, int freq_rf)
int reg_high_bw_optimize_2
int reg_high_bw_optimize_1
Requested SX1278 configuration.
bool low_data_rate_optimize