#[derive(Debug)]
pub enum Error<E> {
I2C(E),
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum IntegrationTime {
Ms25,
Ms50,
Ms100,
Ms200,
Ms400,
Ms800,
}
impl IntegrationTime {
pub fn as_ms(&self) -> u16 {
match self {
IntegrationTime::Ms25 => 25,
IntegrationTime::Ms50 => 50,
IntegrationTime::Ms100 => 100,
IntegrationTime::Ms200 => 200,
IntegrationTime::Ms400 => 400,
IntegrationTime::Ms800 => 800,
}
}
pub fn as_us(&self) -> u32 {
(self.as_ms() as u32) * 1000
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum Gain {
OneEighth,
OneQuarter,
One,
Two,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum FaultCount {
One,
Two,
Four,
Eight,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum PowerSavingMode {
One,
Two,
Three,
Four,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct InterruptStatus {
pub was_too_low: bool,
pub was_too_high: bool,
}
#[derive(Debug, Clone, Copy)]
pub enum SlaveAddr {
Default,
Alternative(bool),
}
impl Default for SlaveAddr {
fn default() -> Self {
SlaveAddr::Default
}
}
impl SlaveAddr {
pub(crate) fn addr(self) -> u8 {
match self {
SlaveAddr::Default => 0x10,
SlaveAddr::Alternative(true) => 0x48,
SlaveAddr::Alternative(false) => 0x10,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn can_get_default_address() {
let addr = SlaveAddr::default();
assert_eq!(0x10, addr.addr());
}
#[test]
fn can_generate_alternative_addresses() {
assert_eq!(0x10, SlaveAddr::Alternative(false).addr());
assert_eq!(0x48, SlaveAddr::Alternative(true).addr());
}
#[test]
fn integration_time_as_int() {
assert_eq!(IntegrationTime::Ms25.as_ms(), 25);
assert_eq!(IntegrationTime::Ms25.as_us(), 25_000);
assert_eq!(IntegrationTime::Ms800.as_ms(), 800);
assert_eq!(IntegrationTime::Ms800.as_us(), 800_000);
}
}