Add support for Corsair Lighting Pro
[temp2RGB.git] / src / cpu_temperature.rs
diff --git a/src/cpu_temperature.rs b/src/cpu_temperature.rs
new file mode 100644 (file)
index 0000000..21150c0
--- /dev/null
@@ -0,0 +1,34 @@
+use crate::wrapper_winring0;
+
+const OLS_TYPE: u32 = 40000;
+
+const F17H_M01H_THM_TCON_CUR_TMP: u32 = 0x00059800;
+const F17H_TEMP_OFFSET_FLAG: u32 = 0x80000;
+const FAMILY_17H_PCI_CONTROL_REGISTER: u32 = 0x60;
+
+pub fn read() -> f32 {
+    unsafe {
+        wrapper_winring0::WritePciConfigDwordEx(
+            0x00,
+            FAMILY_17H_PCI_CONTROL_REGISTER,
+            F17H_M01H_THM_TCON_CUR_TMP,
+        );
+
+        let output: &mut u32 = &mut 0;
+        let ok = wrapper_winring0::ReadPciConfigDwordEx(
+            0x00,
+            FAMILY_17H_PCI_CONTROL_REGISTER + 4,
+            output,
+        );
+        let offset_flag = *output & F17H_TEMP_OFFSET_FLAG != 0;
+        let mut temperature = ((*output >> 21) * 125) as f32 * 0.001;
+        if offset_flag {
+            temperature -= 49.;
+        }
+
+        // dbg!(ok);
+        // dbg!(temperature);
+
+        temperature
+    }
+}