1pub use lora_modulation::{Bandwidth, CodingRate, SpreadingFactor};
2
3#[allow(clippy::upper_case_acronyms)]
5#[derive(Debug, defmt::Format, PartialEq)]
6#[allow(missing_docs)]
7pub enum RadioError {
8 SPI,
9 Reset,
10 RfSwitchRx,
11 RfSwitchTx,
12 Busy,
13 Irq,
14 DIO1,
15 InvalidConfiguration,
16 InvalidRadioMode,
17 OpError(u8),
18 InvalidBaseAddress(usize, usize),
19 PayloadSizeUnexpected(usize),
20 PayloadSizeMismatch(usize, usize),
21 UnavailableSpreadingFactor,
22 UnavailableBandwidth,
23 InvalidBandwidthForFrequency,
24 InvalidSF6ExplicitHeaderRequest,
25 InvalidOutputPowerForFrequency,
26 TransmitTimeout,
27 ReceiveTimeout,
28 DutyCycleUnsupported,
29 RngUnsupported,
30}
31
32#[derive(Clone, Copy)]
34#[allow(missing_docs)]
35pub struct PacketStatus {
36 pub rssi: i16,
37 pub snr: i16,
38}
39
40#[derive(Clone, Copy, defmt::Format, PartialEq)]
42pub enum RadioMode {
43 Sleep,
45 Standby,
47 FrequencySynthesis,
49 Transmit,
51 Receive(RxMode),
53 ChannelActivityDetection,
55}
56
57impl From<RxMode> for RadioMode {
58 fn from(rx_mode: RxMode) -> Self {
59 RadioMode::Receive(rx_mode)
60 }
61}
62
63#[derive(Clone, Copy, defmt::Format, PartialEq)]
65pub enum RxMode {
66 Single(u16),
73 Continuous,
75 DutyCycle(DutyCycleParams),
77}
78
79pub struct ModulationParams {
81 pub(crate) spreading_factor: SpreadingFactor,
82 pub(crate) bandwidth: Bandwidth,
83 pub(crate) coding_rate: CodingRate,
84 pub(crate) low_data_rate_optimize: u8,
85 pub(crate) frequency_in_hz: u32,
86}
87
88pub struct PacketParams {
90 pub(crate) preamble_length: u16, pub(crate) implicit_header: bool, pub(crate) payload_length: u8,
93 pub(crate) crc_on: bool,
94 pub(crate) iq_inverted: bool,
95}
96
97impl PacketParams {
98 pub(crate) fn set_payload_length(&mut self, payload_length: usize) -> Result<(), RadioError> {
99 if payload_length > 255 {
100 return Err(RadioError::PayloadSizeUnexpected(payload_length));
101 }
102 self.payload_length = payload_length as u8;
103 Ok(())
104 }
105}
106
107#[derive(Clone, Copy, defmt::Format, PartialEq)]
109pub struct DutyCycleParams {
110 pub rx_time: u32,
112 pub sleep_time: u32,
114}