diff options
| author | unitexe <unitexe70@gmail.com> | 2026-04-08 23:53:17 -0500 |
|---|---|---|
| committer | unitexe <unitexe70@gmail.com> | 2026-04-08 23:54:28 -0500 |
| commit | de3f7ed45185f3a678ba0de04d98cc9ac92de0c8 (patch) | |
| tree | 3db0159c1370f240d42c1e8b89a67247538f43d1 /tmp117/src/id.rs | |
Initial commit
Diffstat (limited to 'tmp117/src/id.rs')
| -rw-r--r-- | tmp117/src/id.rs | 52 |
1 files changed, 52 insertions, 0 deletions
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<u16> 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); + } +} |
