diff --git a/RGB.NET.Devices.Corsair/CorsairDeviceProvider.cs b/RGB.NET.Devices.Corsair/CorsairDeviceProvider.cs
index 49053dc..0389501 100644
--- a/RGB.NET.Devices.Corsair/CorsairDeviceProvider.cs
+++ b/RGB.NET.Devices.Corsair/CorsairDeviceProvider.cs
@@ -3,8 +3,6 @@
using System;
using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Linq;
using System.Runtime.InteropServices;
using RGB.NET.Core;
using RGB.NET.Devices.Corsair.Native;
@@ -85,7 +83,17 @@ namespace RGB.NET.Devices.Corsair
Throw(new CUEException(LastError));
}
+ ///
protected override IEnumerable LoadDevices()
+ {
+ foreach (ICorsairRGBDevice corsairDevice in LoadCorsairDevices())
+ {
+ corsairDevice.Initialize();
+ yield return corsairDevice;
+ }
+ }
+
+ private IEnumerable LoadCorsairDevices()
{
int deviceCount = _CUESDK.CorsairGetDeviceCount();
for (int i = 0; i < deviceCount; i++)
@@ -122,6 +130,14 @@ namespace RGB.NET.Devices.Corsair
yield return new CorsairMemoryRGBDevice(new CorsairMemoryRGBDeviceInfo(i, nativeDeviceInfo), updateQueue);
break;
+ case CorsairDeviceType.Mainboard:
+ yield return new CorsairMainboardRGBDevice(new CorsairMainboardRGBDeviceInfo(i, nativeDeviceInfo), updateQueue);
+ break;
+
+ case CorsairDeviceType.GraphicsCard:
+ yield return new CorsairGraphicsCardRGBDevice(new CorsairGraphicsCardRGBDeviceInfo(i, nativeDeviceInfo), updateQueue);
+ break;
+
case CorsairDeviceType.Cooler:
case CorsairDeviceType.CommanderPro:
case CorsairDeviceType.LightningNodePro:
@@ -129,6 +145,7 @@ namespace RGB.NET.Devices.Corsair
if (channelsInfo != null)
{
IntPtr channelInfoPtr = channelsInfo.channels;
+ int ledOffset = 0;
for (int channel = 0; channel < channelsInfo.channelsCount; channel++)
{
@@ -144,9 +161,10 @@ namespace RGB.NET.Devices.Corsair
{
_CorsairChannelDeviceInfo channelDeviceInfo = (_CorsairChannelDeviceInfo)Marshal.PtrToStructure(channelDeviceInfoPtr, typeof(_CorsairChannelDeviceInfo))!;
- yield return new CorsairCustomRGBDevice(new CorsairCustomRGBDeviceInfo(info, nativeDeviceInfo, channelDeviceInfo, referenceLed), updateQueue);
+ yield return new CorsairCustomRGBDevice(new CorsairCustomRGBDeviceInfo(info, nativeDeviceInfo, channelDeviceInfo, referenceLed, ledOffset), updateQueue);
referenceLed += channelDeviceInfo.deviceLedCount;
+ ledOffset += channelDeviceInfo.deviceLedCount;
channelDeviceInfoPtr = new IntPtr(channelDeviceInfoPtr.ToInt64() + channelDeviceInfoStructSize);
}
@@ -155,7 +173,6 @@ namespace RGB.NET.Devices.Corsair
}
}
break;
-
default:
Throw(new RGBDeviceException("Unknown Device-Type"));
break;
diff --git a/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDevice.cs b/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDevice.cs
index fc67e5a..d534d2b 100644
--- a/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDevice.cs
+++ b/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDevice.cs
@@ -1,8 +1,10 @@
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedMember.Global
-using System.Collections.Generic;
+using System;
+using System.Runtime.InteropServices;
using RGB.NET.Core;
+using RGB.NET.Devices.Corsair.Native;
namespace RGB.NET.Devices.Corsair
{
@@ -12,12 +14,6 @@ namespace RGB.NET.Devices.Corsair
///
public class CorsairCustomRGBDevice : CorsairRGBDevice, IUnknownDevice
{
- #region Properties & Fields
-
- private readonly Dictionary _idMapping = new();
-
- #endregion
-
#region Constructors
///
@@ -26,46 +22,52 @@ namespace RGB.NET.Devices.Corsair
///
/// The specific information provided by CUE for the custom-device.
internal CorsairCustomRGBDevice(CorsairCustomRGBDeviceInfo info, CorsairDeviceUpdateQueue updateQueue)
- : base(info, updateQueue)
- {
- InitializeLayout();
- }
+ : base(info, new LedMapping(), updateQueue)
+ { }
#endregion
#region Methods
- private void InitializeLayout()
+ ///
+ protected override void InitializeLayout()
{
- LedId referenceId = GetReferenceLed(DeviceInfo.DeviceType);
+ Mapping.Clear();
- for (int i = 0; i < DeviceInfo.LedCount; i++)
+ _CorsairLedPositions? nativeLedPositions = (_CorsairLedPositions?)Marshal.PtrToStructure(_CUESDK.CorsairGetLedPositionsByDeviceIndex(DeviceInfo.CorsairDeviceIndex), typeof(_CorsairLedPositions));
+ if (nativeLedPositions == null) return;
+
+ int structSize = Marshal.SizeOf(typeof(_CorsairLedPosition));
+ IntPtr ptr = new(nativeLedPositions.pLedPosition.ToInt64() + (structSize * DeviceInfo.LedOffset));
+
+ LedId referenceLedId = GetReferenceLed(DeviceInfo.DeviceType);
+ for (int i = 0; i < nativeLedPositions.numberOfLed; i++)
{
- LedId ledId = referenceId + i;
- _idMapping.Add(ledId, DeviceInfo.ReferenceCorsairLed + i);
- AddLed(ledId, new Point(i * 10, 0), new Size(10, 10));
+ LedId ledId = referenceLedId + i;
+ _CorsairLedPosition? ledPosition = (_CorsairLedPosition?)Marshal.PtrToStructure(ptr, typeof(_CorsairLedPosition));
+ if (ledPosition == null)
+ {
+ ptr = new IntPtr(ptr.ToInt64() + structSize);
+ continue;
+ }
+
+ Mapping.Add(ledId, ledPosition.LedId);
+
+ Rectangle rectangle = ledPosition.ToRectangle();
+ AddLed(ledId, rectangle.Location, rectangle.Size);
+
+ ptr = new IntPtr(ptr.ToInt64() + structSize);
}
}
-
- protected override object GetLedCustomData(LedId ledId) => _idMapping.TryGetValue(ledId, out CorsairLedId id) ? id : CorsairLedId.Invalid;
-
- protected virtual LedId GetReferenceLed(RGBDeviceType deviceType)
- {
- switch (deviceType)
+
+ private static LedId GetReferenceLed(RGBDeviceType deviceType)
+ => deviceType switch
{
- case RGBDeviceType.LedStripe:
- return LedId.LedStripe1;
-
- case RGBDeviceType.Fan:
- return LedId.Fan1;
-
- case RGBDeviceType.Cooler:
- return LedId.Cooler1;
-
- default:
- return LedId.Custom1;
- }
- }
+ RGBDeviceType.LedStripe => LedId.LedStripe1,
+ RGBDeviceType.Fan => LedId.Fan1,
+ RGBDeviceType.Cooler => LedId.Cooler1,
+ _ => LedId.Custom1
+ };
#endregion
}
diff --git a/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDeviceInfo.cs b/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDeviceInfo.cs
index 923f989..3a5eb31 100644
--- a/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDeviceInfo.cs
+++ b/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDeviceInfo.cs
@@ -17,6 +17,7 @@ namespace RGB.NET.Devices.Corsair
public CorsairLedId ReferenceCorsairLed { get; }
public int LedCount { get; }
+ internal int LedOffset { get; }
#endregion
@@ -31,11 +32,11 @@ namespace RGB.NET.Devices.Corsair
/// The native -struct
/// The native representing this device.
/// The id of the first led of this device.
- /// A dictionary containing counters to create unique names for equal devices models.
- internal CorsairCustomRGBDeviceInfo(CorsairRGBDeviceInfo info, _CorsairDeviceInfo nativeInfo, _CorsairChannelDeviceInfo channelDeviceInfo, CorsairLedId referenceCorsairLed)
+ internal CorsairCustomRGBDeviceInfo(CorsairRGBDeviceInfo info, _CorsairDeviceInfo nativeInfo, _CorsairChannelDeviceInfo channelDeviceInfo, CorsairLedId referenceCorsairLed, int ledOffset)
: base(info.CorsairDeviceIndex, GetDeviceType(channelDeviceInfo.type), nativeInfo, GetModelName(info, channelDeviceInfo))
{
this.ReferenceCorsairLed = referenceCorsairLed;
+ this.LedOffset = ledOffset;
LedCount = channelDeviceInfo.deviceLedCount;
}
diff --git a/RGB.NET.Devices.Corsair/Generic/CorsairRGBDevice.cs b/RGB.NET.Devices.Corsair/Generic/CorsairRGBDevice.cs
index c7e1864..22792fc 100644
--- a/RGB.NET.Devices.Corsair/Generic/CorsairRGBDevice.cs
+++ b/RGB.NET.Devices.Corsair/Generic/CorsairRGBDevice.cs
@@ -1,4 +1,7 @@
-using RGB.NET.Core;
+using System;
+using System.Runtime.InteropServices;
+using RGB.NET.Core;
+using RGB.NET.Devices.Corsair.Native;
namespace RGB.NET.Devices.Corsair
{
@@ -9,15 +12,57 @@ namespace RGB.NET.Devices.Corsair
public abstract class CorsairRGBDevice : AbstractRGBDevice, ICorsairRGBDevice
where TDeviceInfo : CorsairRGBDeviceInfo
{
+ #region Properties & Fields
+
+ protected LedMapping Mapping { get; }
+
+ #endregion
+
#region Constructors
///
/// Initializes a new instance of the class.
///
/// The generic information provided by CUE for the device.
- protected CorsairRGBDevice(TDeviceInfo info, CorsairDeviceUpdateQueue updateQueue)
+ protected CorsairRGBDevice(TDeviceInfo info, LedMapping mapping, CorsairDeviceUpdateQueue updateQueue)
: base(info, updateQueue)
- { }
+ {
+ this.Mapping = mapping;
+ }
+
+ #endregion
+
+ #region Methods
+
+ void ICorsairRGBDevice.Initialize() => InitializeLayout();
+
+ protected virtual void InitializeLayout()
+ {
+ _CorsairLedPositions? nativeLedPositions = (_CorsairLedPositions?)Marshal.PtrToStructure(_CUESDK.CorsairGetLedPositionsByDeviceIndex(DeviceInfo.CorsairDeviceIndex), typeof(_CorsairLedPositions));
+ if (nativeLedPositions == null) return;
+
+ int structSize = Marshal.SizeOf(typeof(_CorsairLedPosition));
+ IntPtr ptr = nativeLedPositions.pLedPosition;
+
+ for (int i = 0; i < nativeLedPositions.numberOfLed; i++)
+ {
+ _CorsairLedPosition? ledPosition = (_CorsairLedPosition?)Marshal.PtrToStructure(ptr, typeof(_CorsairLedPosition));
+ if (ledPosition == null)
+ {
+ ptr = new IntPtr(ptr.ToInt64() + structSize);
+ continue;
+ }
+
+ LedId ledId = Mapping.TryGetValue(ledPosition.LedId, out LedId id) ? id : LedId.Invalid;
+ Rectangle rectangle = ledPosition.ToRectangle();
+ AddLed(ledId, rectangle.Location, rectangle.Size);
+
+ ptr = new IntPtr(ptr.ToInt64() + structSize);
+ }
+ }
+
+ ///
+ protected override object GetLedCustomData(LedId ledId) => Mapping.TryGetValue(ledId, out CorsairLedId corsairLedId) ? corsairLedId : CorsairLedId.Invalid;
#endregion
}
diff --git a/RGB.NET.Devices.Corsair/Generic/CorsairRGBDeviceInfo.cs b/RGB.NET.Devices.Corsair/Generic/CorsairRGBDeviceInfo.cs
index 256ed6b..8033837 100644
--- a/RGB.NET.Devices.Corsair/Generic/CorsairRGBDeviceInfo.cs
+++ b/RGB.NET.Devices.Corsair/Generic/CorsairRGBDeviceInfo.cs
@@ -36,6 +36,7 @@ namespace RGB.NET.Devices.Corsair
///
public string Model { get; }
+ ///
public object? LayoutMetadata { get; set; }
///
@@ -53,7 +54,6 @@ namespace RGB.NET.Devices.Corsair
/// The index of the .
/// The type of the .
/// The native -struct
- /// A dictionary containing counters to create unique names for equal devices models.
internal CorsairRGBDeviceInfo(int deviceIndex, RGBDeviceType deviceType, _CorsairDeviceInfo nativeInfo)
{
this.CorsairDeviceIndex = deviceIndex;
@@ -72,7 +72,6 @@ namespace RGB.NET.Devices.Corsair
/// The type of the .
/// The native -struct
/// The name of the device-model (overwrites the one provided with the device info).
- /// A dictionary containing counters to create unique names for equal devices models.
internal CorsairRGBDeviceInfo(int deviceIndex, RGBDeviceType deviceType, _CorsairDeviceInfo nativeInfo, string modelName)
{
this.CorsairDeviceIndex = deviceIndex;
@@ -84,11 +83,6 @@ namespace RGB.NET.Devices.Corsair
DeviceName = DeviceHelper.CreateDeviceName(Manufacturer, Model);
}
- #endregion
-
- #region Methods
-
-
#endregion
}
}
diff --git a/RGB.NET.Devices.Corsair/Generic/ICorsairRGBDevice.cs b/RGB.NET.Devices.Corsair/Generic/ICorsairRGBDevice.cs
index 9caca09..f236be3 100644
--- a/RGB.NET.Devices.Corsair/Generic/ICorsairRGBDevice.cs
+++ b/RGB.NET.Devices.Corsair/Generic/ICorsairRGBDevice.cs
@@ -6,5 +6,7 @@ namespace RGB.NET.Devices.Corsair
/// Represents a corsair RGB-device.
///
public interface ICorsairRGBDevice : IRGBDevice
- { }
+ {
+ internal void Initialize();
+ }
}
diff --git a/RGB.NET.Devices.Corsair/Keyboard/KeyboardIdMapping.cs b/RGB.NET.Devices.Corsair/Generic/LedMappings.cs
similarity index 84%
rename from RGB.NET.Devices.Corsair/Keyboard/KeyboardIdMapping.cs
rename to RGB.NET.Devices.Corsair/Generic/LedMappings.cs
index d7855f6..c53c647 100644
--- a/RGB.NET.Devices.Corsair/Keyboard/KeyboardIdMapping.cs
+++ b/RGB.NET.Devices.Corsair/Generic/LedMappings.cs
@@ -1,12 +1,51 @@
-using System.Collections.Generic;
-using RGB.NET.Core;
+using RGB.NET.Core;
namespace RGB.NET.Devices.Corsair
{
- internal static class KeyboardIdMapping
+ public static class LedMappings
{
- internal static readonly Dictionary DEFAULT = new()
- {
+ static LedMappings()
+ {
+ for (int i = 0; i <= (CorsairLedId.GPU50 - CorsairLedId.GPU1); i++)
+ GraphicsCard.Add(LedId.GraphicsCard1 + i, (CorsairLedId.GPU1 + i));
+
+ for (int i = 0; i <= (CorsairLedId.HeadsetStandZone9 - CorsairLedId.HeadsetStandZone1); i++)
+ HeadsetStand.Add(LedId.HeadsetStand1 + i, (CorsairLedId.HeadsetStandZone1 + i));
+
+ for (int i = 0; i <= (CorsairLedId.Mainboard100 - CorsairLedId.Mainboard1); i++)
+ Mainboard.Add(LedId.Mainboard1 + i, (CorsairLedId.Mainboard1 + i));
+
+ for (int i = 0; i <= (CorsairLedId.DRAM12 - CorsairLedId.DRAM1); i++)
+ Memory.Add(LedId.DRAM1 + i, (CorsairLedId.DRAM1 + i));
+
+ for (int i = 0; i <= (CorsairLedId.Zone15 - CorsairLedId.Zone1); i++)
+ Mousepad.Add(LedId.Mousepad1 + i, (CorsairLedId.Zone1 + i));
+ }
+
+ public static LedMapping GraphicsCard = new();
+ public static LedMapping HeadsetStand = new();
+ public static LedMapping Mainboard = new();
+ public static LedMapping Memory = new();
+ public static LedMapping Mousepad = new();
+
+ public static LedMapping Headset = new()
+ {
+ { LedId.Headset1, CorsairLedId.LeftLogo },
+ { LedId.Headset2, CorsairLedId.RightLogo },
+ };
+
+ public static LedMapping Mouse = new()
+ {
+ { LedId.Mouse1, CorsairLedId.B1 },
+ { LedId.Mouse2, CorsairLedId.B2 },
+ { LedId.Mouse3, CorsairLedId.B3 },
+ { LedId.Mouse4, CorsairLedId.B4 },
+ { LedId.Mouse5, CorsairLedId.B5 },
+ { LedId.Mouse6, CorsairLedId.B6 },
+ };
+
+ public static LedMapping Keyboard = new()
+ {
{ LedId.Invalid, CorsairLedId.Invalid },
{ LedId.Logo, CorsairLedId.Logo },
{ LedId.Keyboard_Escape, CorsairLedId.Escape },
diff --git a/RGB.NET.Devices.Corsair/GraphicsCard/CorsairGraphicsCardRGBDevice.cs b/RGB.NET.Devices.Corsair/GraphicsCard/CorsairGraphicsCardRGBDevice.cs
new file mode 100644
index 0000000..e2f7205
--- /dev/null
+++ b/RGB.NET.Devices.Corsair/GraphicsCard/CorsairGraphicsCardRGBDevice.cs
@@ -0,0 +1,27 @@
+// ReSharper disable MemberCanBePrivate.Global
+// ReSharper disable UnusedMember.Global
+
+using RGB.NET.Core;
+
+namespace RGB.NET.Devices.Corsair
+{
+ ///
+ ///
+ /// Represents a corsair graphics card.
+ ///
+ public class CorsairGraphicsCardRGBDevice : CorsairRGBDevice, IGraphicsCard
+ {
+ #region Constructors
+
+ ///
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The specific information provided by CUE for the graphics card.
+ internal CorsairGraphicsCardRGBDevice(CorsairGraphicsCardRGBDeviceInfo info, CorsairDeviceUpdateQueue updateQueue)
+ : base(info, LedMappings.GraphicsCard, updateQueue)
+ { }
+
+ #endregion
+ }
+}
diff --git a/RGB.NET.Devices.Corsair/GraphicsCard/CorsairGraphicsCardRGBDeviceInfo.cs b/RGB.NET.Devices.Corsair/GraphicsCard/CorsairGraphicsCardRGBDeviceInfo.cs
new file mode 100644
index 0000000..70f3cea
--- /dev/null
+++ b/RGB.NET.Devices.Corsair/GraphicsCard/CorsairGraphicsCardRGBDeviceInfo.cs
@@ -0,0 +1,29 @@
+// ReSharper disable MemberCanBePrivate.Global
+// ReSharper disable UnusedMember.Global
+
+using RGB.NET.Core;
+using RGB.NET.Devices.Corsair.Native;
+
+namespace RGB.NET.Devices.Corsair
+{
+ ///
+ ///
+ /// Represents a generic information for a .
+ ///
+ public class CorsairGraphicsCardRGBDeviceInfo : CorsairRGBDeviceInfo
+ {
+ #region Constructors
+
+ ///
+ ///
+ /// Internal constructor of managed .
+ ///
+ /// The index of the .
+ /// The native -struct
+ internal CorsairGraphicsCardRGBDeviceInfo(int deviceIndex, _CorsairDeviceInfo nativeInfo)
+ : base(deviceIndex, RGBDeviceType.GraphicsCard, nativeInfo)
+ { }
+
+ #endregion
+ }
+}
diff --git a/RGB.NET.Devices.Corsair/Headset/CorsairHeadsetRGBDevice.cs b/RGB.NET.Devices.Corsair/Headset/CorsairHeadsetRGBDevice.cs
index 92455d9..b1e1228 100644
--- a/RGB.NET.Devices.Corsair/Headset/CorsairHeadsetRGBDevice.cs
+++ b/RGB.NET.Devices.Corsair/Headset/CorsairHeadsetRGBDevice.cs
@@ -19,22 +19,8 @@ namespace RGB.NET.Devices.Corsair
///
/// The specific information provided by CUE for the headset
internal CorsairHeadsetRGBDevice(CorsairHeadsetRGBDeviceInfo info, CorsairDeviceUpdateQueue updateQueue)
- : base(info, updateQueue)
- {
- InitializeLayout();
- }
-
- #endregion
-
- #region Methods
-
- private void InitializeLayout()
- {
- AddLed(LedId.Headset1, new Point(0, 0), new Size(10, 10));
- AddLed(LedId.Headset2, new Point(10, 0), new Size(10, 10));
- }
-
- protected override object GetLedCustomData(LedId ledId) => HeadsetIdMapping.DEFAULT.TryGetValue(ledId, out CorsairLedId id) ? id : CorsairLedId.Invalid;
+ : base(info, LedMappings.Headset, updateQueue)
+ { }
#endregion
}
diff --git a/RGB.NET.Devices.Corsair/Headset/HeadsetIdMapping.cs b/RGB.NET.Devices.Corsair/Headset/HeadsetIdMapping.cs
deleted file mode 100644
index 7448184..0000000
--- a/RGB.NET.Devices.Corsair/Headset/HeadsetIdMapping.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Collections.Generic;
-using RGB.NET.Core;
-
-namespace RGB.NET.Devices.Corsair
-{
- internal static class HeadsetIdMapping
- {
- internal static readonly Dictionary DEFAULT = new()
- {
- { LedId.Headset1, CorsairLedId.LeftLogo },
- { LedId.Headset2, CorsairLedId.RightLogo },
- };
- }
-}
diff --git a/RGB.NET.Devices.Corsair/HeadsetStand/CorsairHeadsetStandRGBDevice.cs b/RGB.NET.Devices.Corsair/HeadsetStand/CorsairHeadsetStandRGBDevice.cs
index ca17c0e..e55ab93 100644
--- a/RGB.NET.Devices.Corsair/HeadsetStand/CorsairHeadsetStandRGBDevice.cs
+++ b/RGB.NET.Devices.Corsair/HeadsetStand/CorsairHeadsetStandRGBDevice.cs
@@ -1,12 +1,7 @@
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedMember.Global
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.InteropServices;
using RGB.NET.Core;
-using RGB.NET.Devices.Corsair.Native;
namespace RGB.NET.Devices.Corsair
{
@@ -24,44 +19,8 @@ namespace RGB.NET.Devices.Corsair
///
/// The specific information provided by CUE for the headset stand
internal CorsairHeadsetStandRGBDevice(CorsairHeadsetStandRGBDeviceInfo info, CorsairDeviceUpdateQueue updateQueue)
- : base(info, updateQueue)
- {
- InitializeLayout();
- }
-
- #endregion
-
- #region Methods
-
- private void InitializeLayout()
- {
- _CorsairLedPositions? nativeLedPositions = (_CorsairLedPositions?)Marshal.PtrToStructure(_CUESDK.CorsairGetLedPositionsByDeviceIndex(DeviceInfo.CorsairDeviceIndex), typeof(_CorsairLedPositions));
- if (nativeLedPositions == null) return;
-
- int structSize = Marshal.SizeOf(typeof(_CorsairLedPosition));
- IntPtr ptr = nativeLedPositions.pLedPosition;
-
- List<_CorsairLedPosition> positions = new();
- for (int i = 0; i < nativeLedPositions.numberOfLed; i++)
- {
- _CorsairLedPosition? ledPosition = (_CorsairLedPosition?)Marshal.PtrToStructure(ptr, typeof(_CorsairLedPosition));
- if (ledPosition == null) continue;
-
- ptr = new IntPtr(ptr.ToInt64() + structSize);
- positions.Add(ledPosition);
- }
-
- Dictionary mapping = HeadsetStandIdMapping.DEFAULT.SwapKeyValue();
- foreach (_CorsairLedPosition ledPosition in positions.OrderBy(p => p.LedId))
- {
- LedId ledId = mapping.TryGetValue(ledPosition.LedId, out LedId id) ? id : LedId.Invalid;
- Rectangle rectangle = ledPosition.ToRectangle();
- AddLed(ledId, rectangle.Location, rectangle.Size);
- }
- }
-
- ///
- protected override object GetLedCustomData(LedId ledId) => HeadsetStandIdMapping.DEFAULT.TryGetValue(ledId, out CorsairLedId id) ? id : CorsairLedId.Invalid;
+ : base(info, LedMappings.HeadsetStand, updateQueue)
+ { }
#endregion
}
diff --git a/RGB.NET.Devices.Corsair/HeadsetStand/HeadsetStandIdMapping.cs b/RGB.NET.Devices.Corsair/HeadsetStand/HeadsetStandIdMapping.cs
deleted file mode 100644
index 4987118..0000000
--- a/RGB.NET.Devices.Corsair/HeadsetStand/HeadsetStandIdMapping.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System.Collections.Generic;
-using RGB.NET.Core;
-
-namespace RGB.NET.Devices.Corsair
-{
- internal static class HeadsetStandIdMapping
- {
- internal static readonly Dictionary DEFAULT = new()
- {
- { LedId.HeadsetStand1, CorsairLedId.HeadsetStandZone1 },
- { LedId.HeadsetStand2, CorsairLedId.HeadsetStandZone2 },
- { LedId.HeadsetStand3, CorsairLedId.HeadsetStandZone3 },
- { LedId.HeadsetStand4, CorsairLedId.HeadsetStandZone4 },
- { LedId.HeadsetStand5, CorsairLedId.HeadsetStandZone5 },
- { LedId.HeadsetStand6, CorsairLedId.HeadsetStandZone6 },
- { LedId.HeadsetStand7, CorsairLedId.HeadsetStandZone7 },
- { LedId.HeadsetStand8, CorsairLedId.HeadsetStandZone8 },
- { LedId.HeadsetStand9, CorsairLedId.HeadsetStandZone9 }
- };
- }
-}
diff --git a/RGB.NET.Devices.Corsair/Keyboard/CorsairKeyboardRGBDevice.cs b/RGB.NET.Devices.Corsair/Keyboard/CorsairKeyboardRGBDevice.cs
index 268cd75..68eb450 100644
--- a/RGB.NET.Devices.Corsair/Keyboard/CorsairKeyboardRGBDevice.cs
+++ b/RGB.NET.Devices.Corsair/Keyboard/CorsairKeyboardRGBDevice.cs
@@ -1,11 +1,7 @@
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedMember.Global
-using System;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
using RGB.NET.Core;
-using RGB.NET.Devices.Corsair.Native;
namespace RGB.NET.Devices.Corsair
{
@@ -29,38 +25,8 @@ namespace RGB.NET.Devices.Corsair
///
/// The specific information provided by CUE for the keyboard
internal CorsairKeyboardRGBDevice(CorsairKeyboardRGBDeviceInfo info, CorsairDeviceUpdateQueue updateQueue)
- : base(info, updateQueue)
- {
- InitializeLayout();
- }
-
- #endregion
-
- #region Methods
-
- private void InitializeLayout()
- {
- _CorsairLedPositions? nativeLedPositions = (_CorsairLedPositions?)Marshal.PtrToStructure(_CUESDK.CorsairGetLedPositionsByDeviceIndex(DeviceInfo.CorsairDeviceIndex), typeof(_CorsairLedPositions));
- if (nativeLedPositions == null) return;
-
- int structSize = Marshal.SizeOf(typeof(_CorsairLedPosition));
- IntPtr ptr = nativeLedPositions.pLedPosition;
-
- Dictionary mapping = KeyboardIdMapping.DEFAULT.SwapKeyValue();
- for (int i = 0; i < nativeLedPositions.numberOfLed; i++)
- {
- _CorsairLedPosition? ledPosition = (_CorsairLedPosition?)Marshal.PtrToStructure(ptr, typeof(_CorsairLedPosition));
- if (ledPosition == null) continue;
-
- LedId ledId = mapping.TryGetValue(ledPosition.LedId, out LedId id) ? id : LedId.Invalid;
- Rectangle rectangle = ledPosition.ToRectangle();
- AddLed(ledId, rectangle.Location, rectangle.Size);
-
- ptr = new IntPtr(ptr.ToInt64() + structSize);
- }
- }
-
- protected override object GetLedCustomData(LedId ledId) => KeyboardIdMapping.DEFAULT.TryGetValue(ledId, out CorsairLedId id) ? id : CorsairLedId.Invalid;
+ : base(info, LedMappings.Keyboard, updateQueue)
+ { }
#endregion
}
diff --git a/RGB.NET.Devices.Corsair/Mainboard/CorsairMainboardRGBDevice.cs b/RGB.NET.Devices.Corsair/Mainboard/CorsairMainboardRGBDevice.cs
new file mode 100644
index 0000000..9652bf0
--- /dev/null
+++ b/RGB.NET.Devices.Corsair/Mainboard/CorsairMainboardRGBDevice.cs
@@ -0,0 +1,27 @@
+// ReSharper disable MemberCanBePrivate.Global
+// ReSharper disable UnusedMember.Global
+
+using RGB.NET.Core;
+
+namespace RGB.NET.Devices.Corsair
+{
+ ///
+ ///
+ /// Represents a corsair memory.
+ ///
+ public class CorsairMainboardRGBDevice : CorsairRGBDevice, IMainboard
+ {
+ #region Constructors
+
+ ///
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The specific information provided by CUE for the memory.
+ internal CorsairMainboardRGBDevice(CorsairMainboardRGBDeviceInfo info, CorsairDeviceUpdateQueue updateQueue)
+ : base(info, LedMappings.Mainboard, updateQueue)
+ { }
+
+ #endregion
+ }
+}
diff --git a/RGB.NET.Devices.Corsair/Mainboard/CorsairMainboardRGBDeviceInfo.cs b/RGB.NET.Devices.Corsair/Mainboard/CorsairMainboardRGBDeviceInfo.cs
new file mode 100644
index 0000000..43e58b0
--- /dev/null
+++ b/RGB.NET.Devices.Corsair/Mainboard/CorsairMainboardRGBDeviceInfo.cs
@@ -0,0 +1,29 @@
+// ReSharper disable MemberCanBePrivate.Global
+// ReSharper disable UnusedMember.Global
+
+using RGB.NET.Core;
+using RGB.NET.Devices.Corsair.Native;
+
+namespace RGB.NET.Devices.Corsair
+{
+ ///
+ ///
+ /// Represents a generic information for a .
+ ///
+ public class CorsairMainboardRGBDeviceInfo : CorsairRGBDeviceInfo
+ {
+ #region Constructors
+
+ ///
+ ///
+ /// Internal constructor of managed .
+ ///
+ /// The index of the .
+ /// The native -struct
+ internal CorsairMainboardRGBDeviceInfo(int deviceIndex, _CorsairDeviceInfo nativeInfo)
+ : base(deviceIndex, RGBDeviceType.Mainboard, nativeInfo)
+ { }
+
+ #endregion
+ }
+}
diff --git a/RGB.NET.Devices.Corsair/Memory/CorsairMemoryRGBDevice.cs b/RGB.NET.Devices.Corsair/Memory/CorsairMemoryRGBDevice.cs
index cdc42e7..1f37d1c 100644
--- a/RGB.NET.Devices.Corsair/Memory/CorsairMemoryRGBDevice.cs
+++ b/RGB.NET.Devices.Corsair/Memory/CorsairMemoryRGBDevice.cs
@@ -1,11 +1,7 @@
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedMember.Global
-using System;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
using RGB.NET.Core;
-using RGB.NET.Devices.Corsair.Native;
namespace RGB.NET.Devices.Corsair
{
@@ -23,38 +19,8 @@ namespace RGB.NET.Devices.Corsair
///
/// The specific information provided by CUE for the memory.
internal CorsairMemoryRGBDevice(CorsairMemoryRGBDeviceInfo info, CorsairDeviceUpdateQueue updateQueue)
- : base(info, updateQueue)
- {
- InitializeLayout();
- }
-
- #endregion
-
- #region Methods
-
- private void InitializeLayout()
- {
- _CorsairLedPositions? nativeLedPositions = (_CorsairLedPositions?)Marshal.PtrToStructure(_CUESDK.CorsairGetLedPositionsByDeviceIndex(DeviceInfo.CorsairDeviceIndex), typeof(_CorsairLedPositions));
- if (nativeLedPositions == null) return;
-
- int structSize = Marshal.SizeOf(typeof(_CorsairLedPosition));
- IntPtr ptr = nativeLedPositions.pLedPosition;
-
- Dictionary mapping = MemoryIdMapping.DEFAULT.SwapKeyValue();
- for (int i = 0; i < nativeLedPositions.numberOfLed; i++)
- {
- _CorsairLedPosition? ledPosition = (_CorsairLedPosition?)Marshal.PtrToStructure(ptr, typeof(_CorsairLedPosition));
- if (ledPosition == null) continue;
-
- LedId ledId = mapping.TryGetValue(ledPosition.LedId, out LedId id) ? id : LedId.Invalid;
- Rectangle rectangle = ledPosition.ToRectangle();
- AddLed(ledId, rectangle.Location, rectangle.Size);
-
- ptr = new IntPtr(ptr.ToInt64() + structSize);
- }
- }
-
- protected override object GetLedCustomData(LedId ledId) => MemoryIdMapping.DEFAULT.TryGetValue(ledId, out CorsairLedId id) ? id : CorsairLedId.Invalid;
+ : base(info, LedMappings.Memory, updateQueue)
+ { }
#endregion
}
diff --git a/RGB.NET.Devices.Corsair/Memory/MemoryIdMapping.cs b/RGB.NET.Devices.Corsair/Memory/MemoryIdMapping.cs
deleted file mode 100644
index 50750cd..0000000
--- a/RGB.NET.Devices.Corsair/Memory/MemoryIdMapping.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System.Collections.Generic;
-using RGB.NET.Core;
-
-namespace RGB.NET.Devices.Corsair
-{
- internal static class MemoryIdMapping
- {
- internal static readonly Dictionary DEFAULT = new()
- {
- { LedId.Invalid, CorsairLedId.Invalid },
- { LedId.DRAM1, CorsairLedId.DRAM1 },
- { LedId.DRAM2, CorsairLedId.DRAM2 },
- { LedId.DRAM3, CorsairLedId.DRAM3 },
- { LedId.DRAM4, CorsairLedId.DRAM4 },
- { LedId.DRAM5, CorsairLedId.DRAM5 },
- { LedId.DRAM6, CorsairLedId.DRAM6 },
- { LedId.DRAM7, CorsairLedId.DRAM7 },
- { LedId.DRAM8, CorsairLedId.DRAM8 },
- { LedId.DRAM9, CorsairLedId.DRAM9 },
- { LedId.DRAM10, CorsairLedId.DRAM10 },
- { LedId.DRAM11, CorsairLedId.DRAM11 },
- { LedId.DRAM12, CorsairLedId.DRAM12 },
- };
- }
-}
diff --git a/RGB.NET.Devices.Corsair/Mouse/CorsairMouseRGBDevice.cs b/RGB.NET.Devices.Corsair/Mouse/CorsairMouseRGBDevice.cs
index a3d015f..e69e22e 100644
--- a/RGB.NET.Devices.Corsair/Mouse/CorsairMouseRGBDevice.cs
+++ b/RGB.NET.Devices.Corsair/Mouse/CorsairMouseRGBDevice.cs
@@ -1,7 +1,6 @@
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedMember.Global
-using System;
using RGB.NET.Core;
namespace RGB.NET.Devices.Corsair
@@ -20,51 +19,8 @@ namespace RGB.NET.Devices.Corsair
///
/// The specific information provided by CUE for the mouse
internal CorsairMouseRGBDevice(CorsairMouseRGBDeviceInfo info, CorsairDeviceUpdateQueue updateQueue)
- : base(info, updateQueue)
- {
- InitializeLayout();
- }
-
- #endregion
-
- #region Methods
-
- private void InitializeLayout()
- {
- switch (DeviceInfo.PhysicalLayout)
- {
- case CorsairPhysicalMouseLayout.Zones1:
- AddLed(LedId.Mouse1, new Point(0, 0), new Size(10, 10));
- break;
- case CorsairPhysicalMouseLayout.Zones2:
- AddLed(LedId.Mouse1, new Point(0, 0), new Size(10, 10));
- AddLed(LedId.Mouse2, new Point(10, 0), new Size(10, 10));
- break;
- case CorsairPhysicalMouseLayout.Zones3:
- AddLed(LedId.Mouse1, new Point(0, 0), new Size(10, 10));
- AddLed(LedId.Mouse2, new Point(10, 0), new Size(10, 10));
- AddLed(LedId.Mouse3, new Point(20, 0), new Size(10, 10));
- break;
- case CorsairPhysicalMouseLayout.Zones4:
- AddLed(LedId.Mouse1, new Point(0, 0), new Size(10, 10));
- AddLed(LedId.Mouse2, new Point(10, 0), new Size(10, 10));
- AddLed(LedId.Mouse3, new Point(20, 0), new Size(10, 10));
- AddLed(LedId.Mouse4, new Point(30, 0), new Size(10, 10));
- break;
- default:
- throw new RGBDeviceException($"Can't initialize mouse with layout '{DeviceInfo.PhysicalLayout}'");
- }
- }
-
- protected override object GetLedCustomData(LedId ledId)
- {
- if (string.Equals(DeviceInfo.Model, "GLAIVE RGB", StringComparison.OrdinalIgnoreCase))
- return MouseIdMapping.GLAIVE.TryGetValue(ledId, out CorsairLedId id) ? id : CorsairLedId.Invalid;
- else if (string.Equals(DeviceInfo.Model, "M65 RGB ELITE", StringComparison.OrdinalIgnoreCase))
- return MouseIdMapping.M65_RGB_ELITE.TryGetValue(ledId, out CorsairLedId id) ? id : CorsairLedId.Invalid;
- else
- return MouseIdMapping.DEFAULT.TryGetValue(ledId, out CorsairLedId id) ? id : CorsairLedId.Invalid;
- }
+ : base(info, LedMappings.Mouse, updateQueue)
+ { }
#endregion
}
diff --git a/RGB.NET.Devices.Corsair/Mouse/MouseIdMapping.cs b/RGB.NET.Devices.Corsair/Mouse/MouseIdMapping.cs
deleted file mode 100644
index 95982fd..0000000
--- a/RGB.NET.Devices.Corsair/Mouse/MouseIdMapping.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System.Collections.Generic;
-using RGB.NET.Core;
-
-namespace RGB.NET.Devices.Corsair
-{
- internal static class MouseIdMapping
- {
- internal static readonly Dictionary DEFAULT = new()
- {
- { LedId.Mouse1, CorsairLedId.B1 },
- { LedId.Mouse2, CorsairLedId.B2 },
- { LedId.Mouse3, CorsairLedId.B3 },
- { LedId.Mouse4, CorsairLedId.B4 },
- { LedId.Mouse5, CorsairLedId.B5 },
- { LedId.Mouse6, CorsairLedId.B6 },
- };
-
- internal static readonly Dictionary GLAIVE = new()
- {
- { LedId.Mouse1, CorsairLedId.B1 },
- { LedId.Mouse2, CorsairLedId.B2 },
- { LedId.Mouse3, CorsairLedId.B5 },
- };
-
- internal static readonly Dictionary M65_RGB_ELITE = new()
- {
- { LedId.Mouse1, CorsairLedId.B1 },
- { LedId.Mouse2, CorsairLedId.B3 },
- };
- }
-}
diff --git a/RGB.NET.Devices.Corsair/Mousepad/CorsairMousepadRGBDevice.cs b/RGB.NET.Devices.Corsair/Mousepad/CorsairMousepadRGBDevice.cs
index 1f74aee..d475a6f 100644
--- a/RGB.NET.Devices.Corsair/Mousepad/CorsairMousepadRGBDevice.cs
+++ b/RGB.NET.Devices.Corsair/Mousepad/CorsairMousepadRGBDevice.cs
@@ -1,12 +1,7 @@
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedMember.Global
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.InteropServices;
using RGB.NET.Core;
-using RGB.NET.Devices.Corsair.Native;
namespace RGB.NET.Devices.Corsair
{
@@ -24,43 +19,8 @@ namespace RGB.NET.Devices.Corsair
///
/// The specific information provided by CUE for the mousepad
internal CorsairMousepadRGBDevice(CorsairMousepadRGBDeviceInfo info, CorsairDeviceUpdateQueue updateQueue)
- : base(info, updateQueue)
- {
- InitializeLayout();
- }
-
- #endregion
-
- #region Methods
-
- private void InitializeLayout()
- {
- _CorsairLedPositions? nativeLedPositions = (_CorsairLedPositions?)Marshal.PtrToStructure(_CUESDK.CorsairGetLedPositionsByDeviceIndex(DeviceInfo.CorsairDeviceIndex), typeof(_CorsairLedPositions));
- if (nativeLedPositions == null) return;
-
- int structSize = Marshal.SizeOf(typeof(_CorsairLedPosition));
- IntPtr ptr = nativeLedPositions.pLedPosition;
-
- List<_CorsairLedPosition> positions = new();
- for (int i = 0; i < nativeLedPositions.numberOfLed; i++)
- {
- _CorsairLedPosition? ledPosition = (_CorsairLedPosition?)Marshal.PtrToStructure(ptr, typeof(_CorsairLedPosition));
- if (ledPosition == null) continue;
-
- ptr = new IntPtr(ptr.ToInt64() + structSize);
- positions.Add(ledPosition);
- }
-
- Dictionary mapping = MousepadIdMapping.DEFAULT.SwapKeyValue();
- foreach (_CorsairLedPosition ledPosition in positions.OrderBy(p => p.LedId))
- {
- LedId ledId = mapping.TryGetValue(ledPosition.LedId, out LedId id) ? id : LedId.Invalid;
- Rectangle rectangle = ledPosition.ToRectangle();
- AddLed(ledId, rectangle.Location, rectangle.Size);
- }
- }
-
- protected override object GetLedCustomData(LedId ledId) => MousepadIdMapping.DEFAULT.TryGetValue(ledId, out CorsairLedId id) ? id : CorsairLedId.Invalid;
+ : base(info, LedMappings.Mousepad, updateQueue)
+ { }
#endregion
}
diff --git a/RGB.NET.Devices.Corsair/Mousepad/MousepadIdMapping.cs b/RGB.NET.Devices.Corsair/Mousepad/MousepadIdMapping.cs
deleted file mode 100644
index a415df6..0000000
--- a/RGB.NET.Devices.Corsair/Mousepad/MousepadIdMapping.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System.Collections.Generic;
-using RGB.NET.Core;
-
-namespace RGB.NET.Devices.Corsair
-{
- internal static class MousepadIdMapping
- {
- internal static readonly Dictionary DEFAULT = new()
- {
- { LedId.Mousepad1, CorsairLedId.Zone1 },
- { LedId.Mousepad2, CorsairLedId.Zone2 },
- { LedId.Mousepad3, CorsairLedId.Zone3 },
- { LedId.Mousepad4, CorsairLedId.Zone4 },
- { LedId.Mousepad5, CorsairLedId.Zone5 },
- { LedId.Mousepad6, CorsairLedId.Zone6 },
- { LedId.Mousepad7, CorsairLedId.Zone7 },
- { LedId.Mousepad8, CorsairLedId.Zone8 },
- { LedId.Mousepad9, CorsairLedId.Zone9 },
- { LedId.Mousepad10, CorsairLedId.Zone10 },
- { LedId.Mousepad11, CorsairLedId.Zone11 },
- { LedId.Mousepad12, CorsairLedId.Zone12 },
- { LedId.Mousepad13, CorsairLedId.Zone13 },
- { LedId.Mousepad14, CorsairLedId.Zone14 },
- { LedId.Mousepad15, CorsairLedId.Zone15 }
- };
- }
-}
diff --git a/RGB.NET.Devices.Corsair/RGB.NET.Devices.Corsair.csproj.DotSettings b/RGB.NET.Devices.Corsair/RGB.NET.Devices.Corsair.csproj.DotSettings
index 704d9f9..0501b9d 100644
--- a/RGB.NET.Devices.Corsair/RGB.NET.Devices.Corsair.csproj.DotSettings
+++ b/RGB.NET.Devices.Corsair/RGB.NET.Devices.Corsair.csproj.DotSettings
@@ -1,8 +1,10 @@
True
+ True
True
True
True
+ True
True
True
False