summaryrefslogtreecommitdiff
path: root/tmp117/src/id.rs
diff options
context:
space:
mode:
authorunitexe <unitexe70@gmail.com>2026-04-08 23:53:17 -0500
committerunitexe <unitexe70@gmail.com>2026-04-08 23:54:28 -0500
commitde3f7ed45185f3a678ba0de04d98cc9ac92de0c8 (patch)
tree3db0159c1370f240d42c1e8b89a67247538f43d1 /tmp117/src/id.rs
Initial commit
Diffstat (limited to 'tmp117/src/id.rs')
-rw-r--r--tmp117/src/id.rs52
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);
+ }
+}