summaryrefslogtreecommitdiff
path: root/tmp117/src/reg.rs
blob: 20ac429296de9d350ac7835fd2dbe24e111edc0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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);
    }
}