#[repr(u8)] pub enum Registers { Temperature = 0x00, Configuration = 0x01, HighLimit = 0x02, LowLimit = 0x03, Eeprom1 = 0x05, Eeprom2 = 0x06, TemperatureOffset = 0x07, Eeprom3 = 0x08, DeviceId = 0x0F, } impl Registers { pub const TEMPERATURE_RESET: u16 = 0x8000; pub const CONFIGURATION_RESET: u16 = 0x0220; pub const HIGH_LIMIT_RESET: u16 = 0x6000; pub const LOW_LIMIT_RESET: u16 = 0x8000; pub const TEMPERATURE_OFFSET_RESET: u16 = 0x0000; pub const DEVICE_ID_RESET: u16 = 0x0117; pub fn factory_default_reset(&self) -> Option { match self { Registers::Temperature => Some(Registers::TEMPERATURE_RESET), Registers::Configuration => Some(Registers::CONFIGURATION_RESET), Registers::HighLimit => Some(Registers::HIGH_LIMIT_RESET), Registers::LowLimit => Some(Registers::LOW_LIMIT_RESET), Registers::TemperatureOffset => Some(Registers::TEMPERATURE_OFFSET_RESET), Registers::DeviceId => Some(Registers::DEVICE_ID_RESET), _ => None, } } } #[cfg(test)] mod tests { use super::*; #[test] fn test_register_addresses() { assert_eq!(Registers::Temperature as u8, 0x00); assert_eq!(Registers::Configuration as u8, 0x01); assert_eq!(Registers::HighLimit as u8, 0x02); assert_eq!(Registers::LowLimit as u8, 0x03); assert_eq!(Registers::Eeprom1 as u8, 0x05); assert_eq!(Registers::Eeprom2 as u8, 0x06); assert_eq!(Registers::TemperatureOffset as u8, 0x07); assert_eq!(Registers::Eeprom3 as u8, 0x08); assert_eq!(Registers::DeviceId as u8, 0x0F); } #[test] fn test_factory_default_reset_known() { assert_eq!(Registers::Temperature.factory_default_reset(), Some(0x8000)); assert_eq!( Registers::Configuration.factory_default_reset(), Some(0x0220) ); assert_eq!(Registers::HighLimit.factory_default_reset(), Some(0x6000)); assert_eq!(Registers::LowLimit.factory_default_reset(), Some(0x8000)); assert_eq!( Registers::TemperatureOffset.factory_default_reset(), Some(0x0000) ); assert_eq!(Registers::DeviceId.factory_default_reset(), Some(0x0117)); } #[test] fn test_factory_default_reset_unknown() { assert_eq!(Registers::Eeprom1.factory_default_reset(), None); assert_eq!(Registers::Eeprom2.factory_default_reset(), None); assert_eq!(Registers::Eeprom3.factory_default_reset(), None); } }