public List <ControlDevice> GetDevices() { var terp = new OpenConfiguration(); terp.SetOption(OpenOption.Transient, true); var loader = new HidDeviceLoader(); HidDevice device = null; HidSharp.HidDevice[] devices = null; foreach (var supportedId in supportedIds) { HidSharp.HidDevice[] tempdevices = loader.GetDevices(VENDOR_ID, supportedId).ToArray(); if (tempdevices.Length > 0) { devices = tempdevices; } } if (devices == null || devices.Length == 0) { return(new List <ControlDevice>()); } int attempts = 0; bool success = false; while (attempts < 100 && !success) { try { Console.WriteLine("Attempting connection"); device = devices[attempts % devices.Count()]; byte[] t = device.GetRawReportDescriptor(); Console.WriteLine(device.GetFriendlyName()); stream = device.Open(terp); stream.SetCalibration(); stream.SendPacket(0x60, 0); success = true; } catch { attempts++; Thread.Sleep(100); } } if (!success) { return(new List <ControlDevice>()); } Bitmap pcieArea; Bitmap rgbPins; Bitmap vrm; Assembly myAssembly = Assembly.GetExecutingAssembly(); using (Stream myStream = myAssembly.GetManifestResourceStream("IT8297Driver.PCIArea.png")) { pcieArea = (Bitmap)Image.FromStream(myStream); } using (Stream myStream = myAssembly.GetManifestResourceStream("IT8297Driver.rgbpins.png")) { rgbPins = (Bitmap)Image.FromStream(myStream); } using (Stream myStream = myAssembly.GetManifestResourceStream("IT8297Driver.VRM.png")) { vrm = (Bitmap)Image.FromStream(myStream); } byte[] buffer = new byte[64]; buffer[0] = 0xCC; stream.GetFeature(buffer); It8297ReportComplete report = GetReport(buffer); stream.SetLedCount(); stream.Init(); List <ControlDevice> result = new List <ControlDevice>(); result.Add(new ControlDevice { LEDs = leds1, Driver = this, DeviceType = DeviceTypes.Fan, Name = "ARGB Header 1", ProductImage = rgbPins, SupportsLEDCountOverride = true }); result.Add(new ControlDevice { LEDs = leds2, Driver = this, DeviceType = DeviceTypes.Fan, Name = "ARGB Header 2", ProductImage = rgbPins, SupportsLEDCountOverride = true }); result.Add(new ControlDevice { LEDs = vrmLeds, Driver = this, DeviceType = DeviceTypes.MotherBoard, Name = "VRM Block", ProductImage = vrm }); result.Add(new ControlDevice { LEDs = pciLeds, Driver = this, DeviceType = DeviceTypes.MotherBoard, Name = "PCI area", ProductImage = pcieArea }); return(result); }
public List <IT8297ControlDevice> GetDevices() { var mbmanu = MotherboardInfo.Manufacturer; var mbmodel = MotherboardInfo.Model; var mbpn = MotherboardInfo.PartNumber; var mbproduct = MotherboardInfo.Product; var bm = MotherboardInfo.SystemName; var terp = new OpenConfiguration(); terp.SetOption(OpenOption.Transient, true); var loader = new HidDeviceLoader(); HidDevice device = null; HidSharp.HidDevice[] devices = null; foreach (var supportedId in supportedIds) { HidSharp.HidDevice[] tempdevices = loader.GetDevices(VENDOR_ID, supportedId).ToArray(); if (tempdevices.Length > 0) { devices = tempdevices; } } if (devices == null || devices.Length == 0) { return(new List <IT8297ControlDevice>()); } int attempts = 0; bool success = false; foreach (HidDevice ddevice in devices) { device = ddevice; try { var ps = attempts % devices.Count(); Console.WriteLine("Trying connection " + ps); // device = devices[attempts % devices.Count()]; Console.WriteLine(device.DevicePath); byte[] t = device.GetRawReportDescriptor(); Debug.WriteLine("got raw"); Console.WriteLine(device.GetFriendlyName()); Debug.WriteLine("got friendly name"); stream = device.Open(terp); Debug.WriteLine("got strean"); stream.SetCalibration(); Debug.WriteLine("set callibration"); stream.SendPacket(0x60, 0); success = true; } catch { attempts++; Thread.Sleep(100); } } if (!success) { return(new List <IT8297ControlDevice>()); } Bitmap pcieArea; Bitmap rgbPins; Bitmap vrm; Debug.WriteLine("Loading PCI Area png"); pcieArea = (Bitmap)Image.FromStream(new MemoryStream(PCIArea_png.binary)); Debug.WriteLine("Loading RGB Pins png"); rgbPins = (Bitmap)Image.FromStream(new MemoryStream(rgbpins_png.binary)); Debug.WriteLine("Loading VRM Area png"); vrm = (Bitmap)Image.FromStream(new MemoryStream(VRM_png.binary)); byte[] buffer = new byte[64]; buffer[0] = 0xCC; stream.GetFeature(buffer); It8297ReportComplete report = GetReport(buffer); stream.SetLedCount(); stream.Init(); string name = report.ProductName; boardname = mbproduct; string layout = ""; if (!GBMaps.ContainsKey(name)) { name = "IT8297BX-GBX570"; } layout = GBMaps[name]; if (GBoverrides.ContainsKey(mbproduct)) { layout = GBoverrides[mbproduct]; } List <IT8297ControlDevice> result = new List <IT8297ControlDevice>(); switch (layout) { case "FALLBACK": { result.Add(new IT8297ControlDevice { OverrideSupport = OverrideSupport.All, Driver = this, DeviceType = DeviceTypes.Fan, Name = "ARGB Header 1", ProductImage = rgbPins, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x58, Setter = RGBSetter.Strip } }); result.Add(new IT8297ControlDevice { OverrideSupport = OverrideSupport.All, Driver = this, DeviceType = DeviceTypes.Fan, Name = "ARGB Header 2", ProductImage = rgbPins, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x59, Setter = RGBSetter.Strip } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "VRM Block", ProductImage = vrm, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 32, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "PCI Area", ProductImage = pcieArea, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 35, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, DeviceType = DeviceTypes.Fan, Name = "C1C2 Header", ProductImage = rgbPins, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x24, Setter = RGBSetter.Single } }); break; } case "390": { result.Add(new IT8297ControlDevice { OverrideSupport = OverrideSupport.All, Driver = this, DeviceType = DeviceTypes.Fan, Name = "ARGB Header 1", ProductImage = rgbPins, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x58, Setter = RGBSetter.Strip } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[21], Driver = this, DeviceType = DeviceTypes.MotherBoard, Name = "VRM", ProductImage = vrm, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x59, Setter = RGBSetter.Strip, RGBOrder = RGBOrder.GRB } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "Thing 1", ProductImage = vrm, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x20, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "Thing 2", ProductImage = vrm, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x21, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "Thing 3", ProductImage = vrm, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x22, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "Chipset", ProductImage = vrm, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x23, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "Thing 4", ProductImage = vrm, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x24, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "Thing 5", ProductImage = vrm, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x25, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "Thing 6", ProductImage = vrm, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x26, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "Thing 7", ProductImage = vrm, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x27, Setter = RGBSetter.Single } }); break; } case "MINI_ITX": { result.Add(new IT8297ControlDevice { OverrideSupport = OverrideSupport.All, Driver = this, DeviceType = DeviceTypes.Fan, Name = "ARGB Header 1", ProductImage = rgbPins, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x58, Setter = RGBSetter.Strip } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "Back I/O", ProductImage = vrm, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = HDR_BACK_IO, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[4], Driver = this, Name = "MOBO Backlight", ProductImage = pcieArea, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = HDR_CPU, Setter = RGBSetter.Composite, CompositeOrder = new int[] { 0x20, 0x21, 0x22, 0x23 } } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, DeviceType = DeviceTypes.Fan, Name = "C1C2 Header", ProductImage = rgbPins, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x24, Setter = RGBSetter.Single } }); //result.Add(new IT8297ControlDevice //{ // LEDs = new ControlDevice.LedUnit[1], // Driver = this, // Name = "PCIExpress", // ProductImage = pcieArea, // DeviceType = DeviceTypes.MotherBoard, // GigabyteRGBDevice = new GigabyteRGBDevice // { // FirstAddress = HDR_PCIE, // Setter = RGBSetter.Single // } //}); //result.Add(new IT8297ControlDevice //{ // LEDs = new ControlDevice.LedUnit[1], // Driver = this, // DeviceType = DeviceTypes.Fan, // Name = "C1C2 Header", // ProductImage = rgbPins, // GigabyteRGBDevice = new GigabyteRGBDevice // { // FirstAddress = 0x24, // Setter = RGBSetter.Single // } //}); break; } case "ITX": { result.Add(new IT8297ControlDevice { OverrideSupport = OverrideSupport.All, Driver = this, DeviceType = DeviceTypes.Fan, Name = "ARGB Header 1", ProductImage = rgbPins, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x58, Setter = RGBSetter.Strip } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "Back I/O", ProductImage = vrm, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = HDR_BACK_IO, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "CPU Header", ProductImage = vrm, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = HDR_CPU, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "PCIExpress", ProductImage = pcieArea, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = HDR_PCIE, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, DeviceType = DeviceTypes.Fan, Name = "C1C2 Header", ProductImage = rgbPins, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x24, Setter = RGBSetter.Single } }); break; } case "STD_ATX": { result.Add(new IT8297ControlDevice { OverrideSupport = OverrideSupport.All, Driver = this, DeviceType = DeviceTypes.Fan, Name = "ARGB Header 1", ProductImage = rgbPins, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x58, Setter = RGBSetter.Strip } }); result.Add(new IT8297ControlDevice { OverrideSupport = OverrideSupport.All, Driver = this, DeviceType = DeviceTypes.Fan, Name = "ARGB Header 2", ProductImage = rgbPins, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x59, Setter = RGBSetter.Strip } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "Back I/O", ProductImage = vrm, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = HDR_BACK_IO, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "CPU Header", ProductImage = vrm, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = HDR_CPU, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, Name = "PCIExpress", ProductImage = pcieArea, DeviceType = DeviceTypes.MotherBoard, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = HDR_PCIE, Setter = RGBSetter.Single } }); result.Add(new IT8297ControlDevice { LEDs = new ControlDevice.LedUnit[1], Driver = this, DeviceType = DeviceTypes.Fan, Name = "C1C2 Header", ProductImage = rgbPins, GigabyteRGBDevice = new GigabyteRGBDevice { FirstAddress = 0x24, Setter = RGBSetter.Single } }); break; } } foreach (IT8297ControlDevice it8297ControlDevice in result.Where(x => x.LEDs == null || x.LEDs.Length < 1)) { SetDeviceOverride(it8297ControlDevice, new GenericFan()); } foreach (IT8297ControlDevice it8297ControlDevice in result) { for (int i = 0; i < it8297ControlDevice.LEDs.Length; i++) { it8297ControlDevice.LEDs[i] = new ControlDevice.LedUnit { Color = new LEDColor(0, 0, 0), Data = new ControlDevice.LEDData { LEDNumber = i }, LEDName = it8297ControlDevice.Name + " " + (i + 1) }; } } return(result); }