use num_enum::{IntoPrimitive, TryFromPrimitive};
#[derive(Debug, PartialEq, Eq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum Error<InnerError> {
ValueOutOfBounds(u16),
WriteSizeExceeded,
StartingChannelMismatch,
I2CError(InnerError),
}
impl<InnerError> From<InnerError> for Error<InnerError> {
fn from(inner: InnerError) -> Self {
Error::I2CError(inner)
}
}
#[derive(IntoPrimitive, TryFromPrimitive, Debug, PartialEq, Eq, Copy, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
pub enum Channel {
A = 0,
B = 1,
C = 2,
D = 3,
}
#[derive(IntoPrimitive, TryFromPrimitive, Debug, PartialEq, Eq, Copy, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
pub enum OutputEnableMode {
Update = 0,
NoUpdate = 1,
}
#[derive(IntoPrimitive, TryFromPrimitive, Debug, PartialEq, Eq, Copy, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
pub enum VoltageReferenceMode {
External = 0,
Internal = 1,
}
#[derive(IntoPrimitive, TryFromPrimitive, Debug, PartialEq, Eq, Copy, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
pub enum PowerDownMode {
Normal = 0,
PowerDownOneK = 1,
PowerDownOneHundredK = 2,
PowerDownFiveHundredK = 3,
}
#[derive(IntoPrimitive, TryFromPrimitive, Debug, PartialEq, Eq, Copy, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
pub enum GainMode {
TimesOne = 0,
TimesTwo = 1,
}
#[derive(IntoPrimitive, TryFromPrimitive, Debug, PartialEq, Eq, Copy, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
pub enum ReadyState {
Busy = 0,
Ready = 1,
}
#[derive(IntoPrimitive, TryFromPrimitive, Debug, PartialEq, Eq, Copy, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
pub enum PowerState {
Off = 0,
On = 1,
}
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct ChannelRegisters {
pub channel_state: ChannelState,
pub ready_state: ReadyState,
pub power_state: PowerState,
}
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct Registers {
pub channel_a_input: ChannelRegisters,
pub channel_a_eeprom: ChannelRegisters,
pub channel_b_input: ChannelRegisters,
pub channel_b_eeprom: ChannelRegisters,
pub channel_c_input: ChannelRegisters,
pub channel_c_eeprom: ChannelRegisters,
pub channel_d_input: ChannelRegisters,
pub channel_d_eeprom: ChannelRegisters,
}
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct ChannelState {
pub voltage_reference_mode: VoltageReferenceMode,
pub power_down_mode: PowerDownMode,
pub gain_mode: GainMode,
pub value: u16,
}
impl ChannelState {
pub fn new() -> ChannelState {
ChannelState {
voltage_reference_mode: VoltageReferenceMode::Internal,
power_down_mode: PowerDownMode::Normal,
gain_mode: GainMode::TimesOne,
value: 0,
}
}
pub fn voltage_reference_mode(mut self, new_val: VoltageReferenceMode) -> ChannelState {
self.voltage_reference_mode = new_val;
self
}
pub fn power_down_mode(mut self, new_val: PowerDownMode) -> ChannelState {
self.power_down_mode = new_val;
self
}
pub fn gain_mode(mut self, new_val: GainMode) -> ChannelState {
self.gain_mode = new_val;
self
}
pub fn value(mut self, new_val: u16) -> ChannelState {
self.value = new_val;
self
}
}
impl Default for ChannelState {
fn default() -> Self {
Self::new()
}
}