use crate::register::*;
use radio::ReceiveInfo;
#[derive(Copy, Clone, PartialEq, Debug)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "serde", serde(default))]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct Channel {
pub freq: u32,
pub br: u32,
pub bw: Bandwidth,
pub bw_afc: Bandwidth,
pub fdev: u32,
}
impl Default for Channel {
fn default() -> Self {
Self {
freq: 868_000_000,
br: 50_000,
bw: Bandwidth::Bw125000,
bw_afc: Bandwidth::Bw125000,
fdev: 50_000,
}
}
}
#[derive(Clone, PartialEq, Debug)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct Config {
pub preamble_len: u16,
pub payload_mode: PayloadMode,
pub dc_free: DcFree,
pub crc: Crc,
pub crc_auto_clear: CrcAutoClear,
pub address_filter: AddressFilter,
pub modulation: ModulationType,
pub data_mode: DataMode,
pub sync_word: &'static [u8],
pub node_address: u8,
pub broadcast_address: u8,
pub rx_continuous: bool,
pub channel: Channel,
pub power: i8,
pub xtal_freq: u32,
pub freq_step: f32,
pub timeout_ticks: u32,
pub rssi_threshold: u8,
pub auto_rx_restart: AutoRxRestart,
pub inter_packet_rx_delay: u8,
pub tx_start_condition: TxStartCondition,
pub fifo_threshold: u8,
pub afc_low_beta: bool,
}
impl Default for Config {
fn default() -> Self {
Self {
preamble_len: 0x8,
payload_mode: PayloadMode::Variable,
dc_free: DcFree::Off,
crc: Crc::Off,
crc_auto_clear: CrcAutoClear::Off,
address_filter: AddressFilter::Off,
modulation: ModulationType::Fsk,
data_mode: DataMode::Packet,
sync_word: &[],
node_address: 0,
broadcast_address: 0,
rx_continuous: false,
channel: Channel::default(),
power: 13,
xtal_freq: 32_000_000u32,
freq_step: 61.035156,
timeout_ticks: 2048,
rssi_threshold: 200, auto_rx_restart: AutoRxRestart::On,
inter_packet_rx_delay: 4,
tx_start_condition: TxStartCondition::FifoNotEmpty,
fifo_threshold: 32,
afc_low_beta: true,
}
}
}
#[derive(Copy, Clone, PartialEq, Debug)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum PayloadMode {
Constant(u16),
Variable,
}
#[derive(Clone, PartialEq, Debug, Default)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct PacketInfo {
pub rssi: i16,
pub snr: Option<i16>,
}
impl ReceiveInfo for PacketInfo {
fn rssi(&self) -> i16 {
self.rssi
}
}