42static constexpr auto MIN_IRQ_PRIORITY = miosix::PRIORITY_MAX - 2;
116 miosix::Thread* irq_wait_thread =
nullptr;
118 bool is_rx_frontend_on =
false;
120 bool is_tx_frontend_on =
false;
126 static constexpr int IRQ_TIMEOUT = 100;
136 miosix::GpioPin dio1, miosix::GpioPin dio3,
138 std::unique_ptr<ISX1278Frontend> frontend)
140 dio1(dio1), dio3(dio3), frontend(
std::move(frontend))
171 : driver(driver), lock(lock)
174 old_state = driver.lockMode(mode, mapping, dio1_trigger,
183 DeviceState old_state;
193 bool set_rx_frontend_on);
199 bool unlock =
false);
230 bool waitForIrqInner(LockMode& guard,
bool unlock);
234 bool set_rx_frontend_on);
235 void unlockMode(DeviceState old_state);
241 bool set_tx_frontend_on,
bool set_rx_frontend_on);
243 miosix::FastMutex mutex;
246 miosix::GpioPin dio0;
247 miosix::GpioPin dio1;
248 miosix::GpioPin dio3;
249 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
Driver for the VN100S IMU.
Contains information about a single SPI slave device.
Represents an actual Dio mapping..