#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PowerMode {
Nominal = 0b00,
LPM1 = 0b01,
LPM2 = 0b10,
LPM3 = 0b11,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Hysteresis {
Off = 0b00,
Lsb1 = 0b01,
Lsb2 = 0b10,
Lsb3 = 0b11,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum OutputStage {
AnalogFull = 0b00,
AnalogReduced = 0b01,
PWM = 0b10,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PwmFrequency {
Hz115 = 0b00,
Hz230 = 0b01,
Hz460 = 0b10,
Hz920 = 0b11,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SlowFilter {
X16 = 0b00,
X8 = 0b01,
X4 = 0b10,
X2 = 0b11,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FastFilterThreshold {
SlowOnly = 0b000,
Lsb6 = 0b001,
Lsb7 = 0b010,
Lsb9 = 0b011,
Lsb18 = 0b100,
Lsb21 = 0b101,
Lsb24 = 0b110,
Lsb10 = 0b111,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct MagnetStatus {
pub detected: bool,
pub too_weak: bool,
pub too_strong: bool,
}
#[derive(Debug, Clone, Copy)]
pub struct Configuration {
pub power_mode: PowerMode,
pub hysteresis: Hysteresis,
pub output_stage: OutputStage,
pub pwm_frequency: PwmFrequency,
pub slow_filter: SlowFilter,
pub fast_filter_threshold: FastFilterThreshold,
pub watchdog: bool,
}
impl Default for Configuration {
fn default() -> Self {
Self {
power_mode: PowerMode::Nominal,
hysteresis: Hysteresis::Lsb1,
output_stage: OutputStage::AnalogFull,
pwm_frequency: PwmFrequency::Hz115,
slow_filter: SlowFilter::X16,
fast_filter_threshold: FastFilterThreshold::SlowOnly,
watchdog: true,
}
}
}