From 95eeef2d04f23d89f7f942e4212c743d677f2288 Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Fri, 2 Jul 2021 22:17:12 +0200 Subject: [PATCH 1/2] Added corsair device id --- RGB.NET.Devices.Corsair/Generic/CorsairRGBDeviceInfo.cs | 8 ++++++++ RGB.NET.Devices.Corsair/Native/_CorsairDeviceInfo.cs | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/RGB.NET.Devices.Corsair/Generic/CorsairRGBDeviceInfo.cs b/RGB.NET.Devices.Corsair/Generic/CorsairRGBDeviceInfo.cs index 8033837..5b41eef 100644 --- a/RGB.NET.Devices.Corsair/Generic/CorsairRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Corsair/Generic/CorsairRGBDeviceInfo.cs @@ -36,6 +36,12 @@ namespace RGB.NET.Devices.Corsair /// public string Model { get; } + /// + /// Returns the unique ID provided by the Corsair-SDK. + /// Returns string.Empty for Custom devices. + /// + public string DeviceId { get; } + /// public object? LayoutMetadata { get; set; } @@ -60,6 +66,7 @@ namespace RGB.NET.Devices.Corsair this.DeviceType = deviceType; this.CorsairDeviceType = nativeInfo.type; this.Model = nativeInfo.model == IntPtr.Zero ? string.Empty : Regex.Replace(Marshal.PtrToStringAnsi(nativeInfo.model) ?? string.Empty, " ?DEMO", string.Empty, RegexOptions.IgnoreCase); + this.DeviceId = nativeInfo.deviceId ?? string.Empty; this.CapsMask = (CorsairDeviceCaps)nativeInfo.capsMask; DeviceName = DeviceHelper.CreateDeviceName(Manufacturer, Model); @@ -78,6 +85,7 @@ namespace RGB.NET.Devices.Corsair this.DeviceType = deviceType; this.CorsairDeviceType = nativeInfo.type; this.Model = modelName; + this.DeviceId = nativeInfo.deviceId ?? string.Empty; this.CapsMask = (CorsairDeviceCaps)nativeInfo.capsMask; DeviceName = DeviceHelper.CreateDeviceName(Manufacturer, Model); diff --git a/RGB.NET.Devices.Corsair/Native/_CorsairDeviceInfo.cs b/RGB.NET.Devices.Corsair/Native/_CorsairDeviceInfo.cs index 418e9f6..da35dbf 100644 --- a/RGB.NET.Devices.Corsair/Native/_CorsairDeviceInfo.cs +++ b/RGB.NET.Devices.Corsair/Native/_CorsairDeviceInfo.cs @@ -48,5 +48,11 @@ namespace RGB.NET.Devices.Corsair.Native /// CUE-SDK: structure that describes channels of the DIY-devices /// internal _CorsairChannelsInfo? channels; + + /// + /// CUE-SDK: null-terminated string that contains unique device identifier that uniquely identifies device at least within session + /// + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] + internal string? deviceId; } } From eedeadabdaa40b9177fdb6ef0e2695933c3b28c3 Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Fri, 2 Jul 2021 22:23:35 +0200 Subject: [PATCH 2/2] Added workaround for corsair custom devices with wrongly reported channel counts --- RGB.NET.Devices.Corsair/CorsairDeviceProvider.cs | 2 +- RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDeviceInfo.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/RGB.NET.Devices.Corsair/CorsairDeviceProvider.cs b/RGB.NET.Devices.Corsair/CorsairDeviceProvider.cs index 03dcdcd..f2d80ce 100644 --- a/RGB.NET.Devices.Corsair/CorsairDeviceProvider.cs +++ b/RGB.NET.Devices.Corsair/CorsairDeviceProvider.cs @@ -156,7 +156,7 @@ namespace RGB.NET.Devices.Corsair int channelDeviceInfoStructSize = Marshal.SizeOf(typeof(_CorsairChannelDeviceInfo)); IntPtr channelDeviceInfoPtr = channelInfo.devices; - for (int device = 0; device < channelInfo.devicesCount; device++) + for (int device = 0; (device < channelInfo.devicesCount) && (ledOffset < nativeDeviceInfo.ledsCount); device++) { _CorsairChannelDeviceInfo channelDeviceInfo = (_CorsairChannelDeviceInfo)Marshal.PtrToStructure(channelDeviceInfoPtr, typeof(_CorsairChannelDeviceInfo))!; diff --git a/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDeviceInfo.cs b/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDeviceInfo.cs index d6e222d..259c409 100644 --- a/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDeviceInfo.cs @@ -81,7 +81,7 @@ namespace RGB.NET.Devices.Corsair switch (channelDeviceInfo.type) { case CorsairChannelDeviceType.Invalid: - return "Invalid"; + return model; case CorsairChannelDeviceType.FanHD: return "HD Fan";