use core::fmt::Debug;
#[allow(clippy::upper_case_acronyms)]
#[derive(Debug, defmt::Format, PartialEq)]
#[allow(dead_code, missing_docs)]
pub enum RadioError {
SPI,
NSS,
Reset,
RfSwitchRx,
RfSwitchTx,
Busy,
Irq,
DIO1,
DelayError,
OpError(u8),
InvalidBaseAddress(usize, usize),
PayloadSizeUnexpected(usize),
PayloadSizeMismatch(usize, usize),
InvalidSymbolTimeout,
RetentionListExceeded,
UnavailableSpreadingFactor,
UnavailableBandwidth,
UnavailableCodingRate,
InvalidBandwidthForFrequency,
InvalidSF6ExplicitHeaderRequest,
InvalidOutputPower,
InvalidOutputPowerForFrequency,
HeaderError,
CRCErrorUnexpected,
CRCErrorOnReceive,
TransmitTimeout,
ReceiveTimeout,
PollingTimeout,
TimeoutUnexpected,
TransmitDoneUnexpected,
ReceiveDoneUnexpected,
DutyCycleUnsupported,
DutyCycleRxContinuousUnsupported,
CADUnexpected,
RngUnsupported,
BoardTypeUnsupportedForRadioKind,
}
#[derive(Clone, Copy)]
#[allow(missing_docs)]
pub struct PacketStatus {
pub rssi: i16,
pub snr: i16,
}
#[derive(Clone, Copy, PartialEq)]
#[allow(missing_docs)]
pub enum BoardType {
CustomBoard,
GenericSx1261, HeltecWifiLoraV31262,
RpPicoWaveshareSx1262,
Rak4631Sx1262,
Rak3172Sx1262,
Stm32l0Sx1276,
Stm32wlSx1262,
}
#[derive(Clone, Copy, PartialEq)]
#[allow(missing_docs)]
pub enum ChipType {
CustomChip,
Sx1261,
Sx1262,
Sx1276,
Sx1277,
Sx1278,
Sx1279,
}
impl From<BoardType> for ChipType {
fn from(board_type: BoardType) -> Self {
match board_type {
BoardType::CustomBoard => ChipType::CustomChip,
BoardType::GenericSx1261 => ChipType::Sx1261,
BoardType::HeltecWifiLoraV31262 => ChipType::Sx1262,
BoardType::RpPicoWaveshareSx1262 => ChipType::Sx1262,
BoardType::Rak4631Sx1262 => ChipType::Sx1262,
BoardType::Rak3172Sx1262 => ChipType::Sx1262,
BoardType::Stm32l0Sx1276 => ChipType::Sx1276,
BoardType::Stm32wlSx1262 => ChipType::Sx1262,
}
}
}
#[derive(Clone, Copy, defmt::Format, PartialEq)]
#[allow(missing_docs)]
pub enum RadioMode {
Sleep, Standby, FrequencySynthesis, Transmit, Receive, ReceiveDutyCycle, ChannelActivityDetection, }
#[derive(Clone, Copy, PartialEq)]
#[allow(missing_docs)]
pub enum SpreadingFactor {
_5,
_6,
_7,
_8,
_9,
_10,
_11,
_12,
}
impl SpreadingFactor {
pub fn value(self) -> u32 {
match self {
SpreadingFactor::_5 => 5,
SpreadingFactor::_6 => 6,
SpreadingFactor::_7 => 7,
SpreadingFactor::_8 => 8,
SpreadingFactor::_9 => 9,
SpreadingFactor::_10 => 10,
SpreadingFactor::_11 => 11,
SpreadingFactor::_12 => 12,
}
}
}
#[derive(Clone, Copy, PartialEq)]
#[allow(missing_docs)]
pub enum Bandwidth {
_7KHz,
_10KHz,
_15KHz,
_20KHz,
_31KHz,
_41KHz,
_62KHz,
_125KHz,
_250KHz,
_500KHz,
}
impl Bandwidth {
pub fn value_in_hz(self) -> u32 {
match self {
Bandwidth::_7KHz => 7810u32,
Bandwidth::_10KHz => 10420u32,
Bandwidth::_15KHz => 15630u32,
Bandwidth::_20KHz => 20830u32,
Bandwidth::_31KHz => 31250u32,
Bandwidth::_41KHz => 41670u32,
Bandwidth::_62KHz => 62500u32,
Bandwidth::_125KHz => 125000u32,
Bandwidth::_250KHz => 250000u32,
Bandwidth::_500KHz => 500000u32,
}
}
}
#[derive(Clone, Copy)]
#[allow(missing_docs)]
pub enum CodingRate {
_4_5,
_4_6,
_4_7,
_4_8,
}
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)]
#[allow(missing_docs)]
pub struct DutyCycleParams {
pub rx_time: u32, pub sleep_time: u32, }