113 miosix::Thread* irq_wait_thread =
nullptr;
115 bool is_rx_frontend_on =
false;
117 bool is_tx_frontend_on =
false;
123 static constexpr int IRQ_TIMEOUT = 100;
133 miosix::GpioPin dio1, miosix::GpioPin dio3,
135 std::unique_ptr<ISX1278Frontend> frontend)
137 dio1(dio1), dio3(dio3), frontend(
std::move(frontend))
168 : driver(driver), lock(lock)
171 old_state = driver.lockMode(mode, mapping, dio1_trigger,
180 DeviceState old_state;
190 bool set_rx_frontend_on);
196 bool unlock =
false);
227 bool waitForIrqInner(LockMode& guard,
bool unlock);
231 bool set_rx_frontend_on);
232 void unlockMode(DeviceState old_state);
238 bool set_tx_frontend_on,
bool set_rx_frontend_on);
240 miosix::FastMutex mutex;
243 miosix::GpioPin dio0;
244 miosix::GpioPin dio1;
245 miosix::GpioPin dio3;
246 std::unique_ptr<ISX1278Frontend> frontend;
Driver for STM32 low level SPI peripheral.
Shared interface between all SX1278 frontends.
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?
virtual void enableRx()=0
virtual void disableRx()=0
virtual void disableTx()=0
virtual void enableTx()=0
Shared interface between all SX1278 drivers.
virtual IrqFlags getIrqFlags()=0
virtual float getLastRxFei()
Get the frequency error index in Hz, during last packet receive (NaN if not available).
virtual void setMode(Mode mode)=0
virtual void setMapping(DioMapping mapping)=0
virtual void resetIrqFlags(IrqFlags flags)=0
virtual float getLastRxRssi()=0
Get the RSSI in dBm, during last packet receive.
virtual float getLastRxSnr()
Get the signal to noise ratio, during last packet receive (NaN if not available).
RAII scoped bus lock guard.
Lock(SX1278Common &driver)
RAII scoped mode lock, requires a previous lock.
LockMode(SX1278Common &driver, Lock &lock, Mode mode, DioMapping mapping, InterruptTrigger dio1_trigger, bool set_tx_frontend_on=false, bool set_rx_frontend_on=false)
void handleDioIRQ()
Handle generic DIO irq.
ISX1278Frontend & getFrontend()
IrqFlags waitForIrqBusy(LockMode &guard, IrqFlags set_irq, IrqFlags reset_irq, int timeout)
Busy waits for an interrupt by polling the irq register.
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.
SX1278Common(SPIBus &bus, miosix::GpioPin cs, miosix::GpioPin dio0, miosix::GpioPin dio1, miosix::GpioPin dio3, SPI::ClockDivider clock_divider, std::unique_ptr< ISX1278Frontend > frontend)
IrqFlags waitForIrq(LockMode &guard, IrqFlags set_irq, IrqFlags reset_irq, bool unlock=false)
Wait for generic irq.
ClockDivider
SPI Clock divider.
SPIBusConfig getSpiBusConfig(SPI::ClockDivider clock_divider)
RegDioMapping::Mapping DioMapping
This file includes all the types the logdecoder script will decode.
Contains information about a single SPI slave device.
Represents an actual Dio mapping..