From de3f7ed45185f3a678ba0de04d98cc9ac92de0c8 Mon Sep 17 00:00:00 2001 From: unitexe Date: Wed, 8 Apr 2026 23:53:17 -0500 Subject: Initial commit --- tmp117/src/id.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 tmp117/src/id.rs (limited to 'tmp117/src/id.rs') diff --git a/tmp117/src/id.rs b/tmp117/src/id.rs new file mode 100644 index 0000000..e1fcc8b --- /dev/null +++ b/tmp117/src/id.rs @@ -0,0 +1,52 @@ +pub struct Identity { + pub device_id: u16, + + pub revision_number: u8, +} + +impl From for Identity { + fn from(register: u16) -> Self { + let device_id = register & 0x0FFF; + let revision_number = ((register >> 12) & 0xF) as u8; + Self { + device_id, + revision_number, + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_identity_from_known_device_id() { + let identity = Identity::from(0x0117); + assert_eq!(identity.device_id, 0x117); + assert_eq!(identity.revision_number, 0); + } + + #[test] + fn test_identity_device_id_masked() { + // bits 11:0 are device ID + let identity = Identity::from(0x0FFF); + assert_eq!(identity.device_id, 0x0FFF); + assert_eq!(identity.revision_number, 0); + } + + #[test] + fn test_identity_revision_number_extracted() { + // bits 15:12 are revision + let identity = Identity::from(0x1000); + assert_eq!(identity.device_id, 0x000); + assert_eq!(identity.revision_number, 1); + } + + #[test] + fn test_identity_both_fields() { + // revision = 0xA, device_id = 0x117 + let identity = Identity::from(0xA117); + assert_eq!(identity.device_id, 0x117); + assert_eq!(identity.revision_number, 0xA); + } +} -- cgit v1.2.3