pub use lora_modulation::{Bandwidth, CodingRate, SpreadingFactor};
#[allow(clippy::upper_case_acronyms)]
#[derive(Debug, defmt::Format, PartialEq)]
#[allow(missing_docs)]
pub enum RadioError {
SPI,
Reset,
RfSwitchRx,
RfSwitchTx,
Busy,
Irq,
DIO1,
InvalidConfiguration,
InvalidRadioMode,
OpError(u8),
InvalidBaseAddress(usize, usize),
PayloadSizeUnexpected(usize),
PayloadSizeMismatch(usize, usize),
UnavailableSpreadingFactor,
UnavailableBandwidth,
InvalidBandwidthForFrequency,
InvalidSF6ExplicitHeaderRequest,
InvalidOutputPowerForFrequency,
TransmitTimeout,
ReceiveTimeout,
DutyCycleUnsupported,
RngUnsupported,
}
#[derive(Clone, Copy)]
#[allow(missing_docs)]
pub struct PacketStatus {
pub rssi: i16,
pub snr: i16,
}
#[derive(Clone, Copy, defmt::Format, PartialEq)]
pub enum RadioMode {
Sleep,
Standby,
FrequencySynthesis,
Transmit,
Receive(RxMode),
ChannelActivityDetection,
}
impl From<RxMode> for RadioMode {
fn from(rx_mode: RxMode) -> Self {
RadioMode::Receive(rx_mode)
}
}
#[derive(Clone, Copy, defmt::Format, PartialEq)]
pub enum RxMode {
Single(u16),
Continuous,
DutyCycle(DutyCycleParams),
}
pub struct ModulationParams {
pub(crate) spreading_factor: SpreadingFactor,
pub(crate) bandwidth: Bandwidth,
pub(crate) coding_rate: CodingRate,
pub(crate) low_data_rate_optimize: u8,
pub(crate) frequency_in_hz: u32,
}
pub struct PacketParams {
pub(crate) preamble_length: u16, pub(crate) implicit_header: bool, pub(crate) payload_length: u8,
pub(crate) crc_on: bool,
pub(crate) iq_inverted: bool,
}
impl PacketParams {
pub(crate) fn set_payload_length(&mut self, payload_length: usize) -> Result<(), RadioError> {
if payload_length > 255 {
return Err(RadioError::PayloadSizeUnexpected(payload_length));
}
self.payload_length = payload_length as u8;
Ok(())
}
}
#[derive(Clone, Copy, defmt::Format, PartialEq)]
pub struct DutyCycleParams {
pub rx_time: u32,
pub sleep_time: u32,
}