Add Mshroom machine implementation
[temp2RGB.git] / src / machine.rs
diff --git a/src/machine.rs b/src/machine.rs
deleted file mode 100644 (file)
index 1012c00..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-use log::error;
-use nvapi::sys::i2c;
-
-use crate::{
-    /*a770,*/ asus_aura_usb, corsair_lighting_pro, corsair_vengeance, cpu_temperature,
-    intel_arc, lian_li_sl_infinity, rgb,
-};
-
-const RGB_FUSION2_GPU_REG_COLOR: u8 = 0x40;
-const RGB_FUSION2_GPU_REG_MODE: u8 = 0x88;
-
-const GIGABYTE_RTX3080TI_VISION_OC_ADDR: u8 = 0x63;
-
-pub trait Machine {
-    fn set_color(&mut self, color: &rgb::RGB);
-    fn get_gpu_tmp(&self) -> f32;
-    fn get_cpu_tmp(&self) -> f32;
-}
-
-pub struct MachineJiji {
-    ram: Vec<corsair_vengeance::Controller>,
-    b650e_device: asus_aura_usb::Device,
-    // a770: a770::A770,
-    // gpu_devices: intel_arc::Devices,
-    gpus: Vec<nvapi::PhysicalGpu>,
-}
-
-impl MachineJiji {
-    pub fn new() -> anyhow::Result<Self> {
-        let api = hidapi::HidApi::new().unwrap();
-        Ok(MachineJiji {
-            ram: vec![
-                corsair_vengeance::Controller::new(0x19),
-                corsair_vengeance::Controller::new(0x1B),
-            ],
-            b650e_device: asus_aura_usb::Device::new(&api, asus_aura_usb::Motherboard::Asus650e)?,
-            // a770: a770::A770::new()?,
-            // gpu_devices: unsafe { intel_arc::GetDevices() },
-            gpus: nvapi::PhysicalGpu::enumerate()?,
-        })
-    }
-}
-
-impl Machine for MachineJiji {
-    fn set_color(&mut self, color: &rgb::RGB) {
-        for controller in &self.ram {
-            controller.set_color(&color);
-        }
-        self.b650e_device.set_color(&color);
-        // if let Err(error) = self.a770.set_color(color.red, color.green, color.blue) {
-        // error!("Unable to set color: {:?}", error);
-        // }
-    }
-
-    fn get_gpu_tmp(&self) -> f32 {
-        // unsafe { intel_arc::GetTemperature(self.gpu_devices, 0) as f32 }
-        self.gpus[0].thermal_settings(None).unwrap()[0]
-            .current_temperature
-            .0 as f32
-    }
-
-    fn get_cpu_tmp(&self) -> f32 {
-        cpu_temperature::read()
-    }
-}
-
-// impl Drop for MachineJiji {
-//     fn drop(&mut self) {
-//         unsafe {
-//             intel_arc::FreeDevices(self.gpu_devices);
-//         }
-//     }
-// }
-
-pub struct MachineLyssMetal {
-    crosshair_device: asus_aura_usb::Device,
-    corsair_lignting_pro: corsair_lighting_pro::Device,
-    lian_li_sl_infinity: lian_li_sl_infinity::Device,
-    gpus: Vec<nvapi::PhysicalGpu>,
-}
-
-impl MachineLyssMetal {
-    pub fn new() -> anyhow::Result<Self> {
-        let api = hidapi::HidApi::new()?;
-
-        nvapi::initialize().expect("Unable to initialize nvapi (Nvidia API)");
-
-        let machine = MachineLyssMetal {
-            crosshair_device: asus_aura_usb::Device::new(
-                &api,
-                asus_aura_usb::Motherboard::AsusCrosshairVIIIHero,
-            )?,
-            corsair_lignting_pro: corsair_lighting_pro::Device::new(
-                &api,
-                &rgb::RGB {
-                    red: 0,
-                    green: 255,
-                    blue: 40,
-                },
-            ),
-            lian_li_sl_infinity: lian_li_sl_infinity::Device::new(&api),
-            gpus: nvapi::PhysicalGpu::enumerate()?,
-        };
-
-        // machine.set_mode_3080ti();
-        Ok(machine)
-    }
-
-    // Doesn't work: "Error: NotSupported".
-    // From OpenRGB, see the following files:
-    //  * Controllers\GigabyteRGBFusion2GPUController\GigabyteRGBFusion2GPUControllerDetect.cpp
-    //  * Controllers\GigabyteRGBFusion2GPUController\RGBController_GigabyteRGBFusion2GPU.cpp
-    //  * Controllers\GigabyteRGBFusion2GPUController\GigabyteRGBFusion2GPUController.cpp
-    //  * i2c_smbus\i2c_smbus_nvapi.cpp
-    // Implementation of nvapi-rs: https://github.com/arcnmx/nvapi-rs/blob/master/src/gpu.rs#L645
-    pub fn test_i2c(&self) {
-        // Test from 'GigabyteRGBFusion2GPUControllerDetect.cpp'
-        let data = [0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];
-        self.gpus[0]
-            .i2c_write(
-                0,
-                Some(1),
-                false,
-                GIGABYTE_RTX3080TI_VISION_OC_ADDR,
-                &[],
-                &data,
-                i2c::I2cSpeed::Default,
-            )
-            .expect("Error");
-    }
-
-    fn set_mode_3080ti(&self) {
-        let data = [
-            RGB_FUSION2_GPU_REG_MODE,
-            0x01, // Mode (1: static).
-            0x00, // Speed.
-            0x63, // Brightness max.
-            0x00, // Mistery flag.
-            0x01, // Zone.
-            0x00,
-            0x00,
-        ];
-        self.gpus[0]
-            .i2c_write(
-                0,
-                Some(1),
-                false,
-                GIGABYTE_RTX3080TI_VISION_OC_ADDR,
-                &[],
-                &data,
-                i2c::I2cSpeed::Default,
-            )
-            .expect("Error");
-    }
-
-    fn set_color_3080ti(&self, color: &rgb::RGB) {
-        // TODO.
-        self.test_i2c();
-    }
-}
-
-impl Machine for MachineLyssMetal {
-    fn set_color(&mut self, color: &rgb::RGB) {
-        self.crosshair_device.set_color(&color).unwrap();
-        self.corsair_lignting_pro.set_color(&color);
-        self.lian_li_sl_infinity.set_color(&color);
-        // self.set_color_3080ti(&color); // TODO.
-    }
-
-    fn get_gpu_tmp(&self) -> f32 {
-        self.gpus[0].thermal_settings(None).unwrap()[0]
-            .current_temperature
-            .0 as f32
-    }
-
-    fn get_cpu_tmp(&self) -> f32 {
-        cpu_temperature::read()
-    }
-}