summaryrefslogtreecommitdiff
path: root/tmp117/src/reg.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tmp117/src/reg.rs')
-rw-r--r--tmp117/src/reg.rs74
1 files changed, 74 insertions, 0 deletions
diff --git a/tmp117/src/reg.rs b/tmp117/src/reg.rs
new file mode 100644
index 0000000..20ac429
--- /dev/null
+++ b/tmp117/src/reg.rs
@@ -0,0 +1,74 @@
+#[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<u16> {
+ 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);
+ }
+}