use uom::si::{electric_current::milliampere, f32::ElectricCurrent};
use crate::modes::{LedMode, ThreeLedsMode, TwoLedsMode};
#[derive(Clone, Copy, Debug)]
pub struct LedCurrentConfiguration<MODE: LedMode> {
led1: ElectricCurrent,
led2: ElectricCurrent,
led3: ElectricCurrent,
mode: core::marker::PhantomData<MODE>,
}
impl<MODE> LedCurrentConfiguration<MODE>
where
MODE: LedMode,
{
pub fn led1(&self) -> &ElectricCurrent {
&self.led1
}
pub fn led2(&self) -> &ElectricCurrent {
&self.led2
}
pub fn led1_mut(&mut self) -> &mut ElectricCurrent {
&mut self.led1
}
pub fn led2_mut(&mut self) -> &mut ElectricCurrent {
&mut self.led2
}
}
impl LedCurrentConfiguration<ThreeLedsMode> {
pub fn new(led1: ElectricCurrent, led2: ElectricCurrent, led3: ElectricCurrent) -> Self {
Self {
led1,
led2,
led3,
mode: core::marker::PhantomData,
}
}
pub fn led3(&self) -> &ElectricCurrent {
&self.led3
}
pub fn led3_mut(&mut self) -> &mut ElectricCurrent {
&mut self.led3
}
}
impl LedCurrentConfiguration<TwoLedsMode> {
pub fn new(led1: ElectricCurrent, led2: ElectricCurrent) -> Self {
Self {
led1,
led2,
led3: ElectricCurrent::new::<milliampere>(0.0),
mode: core::marker::PhantomData,
}
}
}
#[derive(Clone, Copy, Debug)]
pub struct OffsetCurrentConfiguration<MODE: LedMode> {
led1: ElectricCurrent,
led2: ElectricCurrent,
ambient1: ElectricCurrent,
ambient2_or_led3: ElectricCurrent,
mode: core::marker::PhantomData<MODE>,
}
impl<MODE> OffsetCurrentConfiguration<MODE>
where
MODE: LedMode,
{
pub fn led1(&self) -> &ElectricCurrent {
&self.led1
}
pub fn led2(&self) -> &ElectricCurrent {
&self.led2
}
pub fn led1_mut(&mut self) -> &mut ElectricCurrent {
&mut self.led1
}
pub fn led2_mut(&mut self) -> &mut ElectricCurrent {
&mut self.led2
}
}
impl OffsetCurrentConfiguration<ThreeLedsMode> {
pub fn new(
led1: ElectricCurrent,
led2: ElectricCurrent,
led3: ElectricCurrent,
ambient: ElectricCurrent,
) -> Self {
Self {
led1,
led2,
ambient1: ambient,
ambient2_or_led3: led3,
mode: core::marker::PhantomData,
}
}
pub fn led3(&self) -> &ElectricCurrent {
&self.ambient2_or_led3
}
pub fn ambient(&self) -> &ElectricCurrent {
&self.ambient1
}
pub fn led3_mut(&mut self) -> &mut ElectricCurrent {
&mut self.ambient2_or_led3
}
pub fn ambient_mut(&mut self) -> &mut ElectricCurrent {
&mut self.ambient1
}
}
impl OffsetCurrentConfiguration<TwoLedsMode> {
pub fn new(
led1: ElectricCurrent,
led2: ElectricCurrent,
ambient1: ElectricCurrent,
ambient2: ElectricCurrent,
) -> Self {
Self {
led1,
led2,
ambient1,
ambient2_or_led3: ambient2,
mode: core::marker::PhantomData,
}
}
pub fn ambient1(&self) -> &ElectricCurrent {
&self.ambient1
}
pub fn ambient2(&self) -> &ElectricCurrent {
&self.ambient2_or_led3
}
pub fn ambient1_mut(&mut self) -> &mut ElectricCurrent {
&mut self.ambient1
}
pub fn ambient2_mut(&mut self) -> &mut ElectricCurrent {
&mut self.ambient2_or_led3
}
}