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);
}
}
|