diff --git a/Documentation/DeviceLayout.xsd b/Documentation/DeviceLayout.xsd
index d534089..8624cf4 100644
--- a/Documentation/DeviceLayout.xsd
+++ b/Documentation/DeviceLayout.xsd
@@ -7,7 +7,6 @@
-
diff --git a/RGB.NET.Core/Leds/LedMapping.cs b/RGB.NET.Core/Leds/LedMapping.cs
new file mode 100644
index 0000000..0c980d1
--- /dev/null
+++ b/RGB.NET.Core/Leds/LedMapping.cs
@@ -0,0 +1,81 @@
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace RGB.NET.Core
+{
+ public class LedMapping : IEnumerable<(LedId ledId, T mapping)>
+ where T : notnull
+ {
+ #region Properties & Fields
+
+ private readonly Dictionary _mapping = new();
+ private readonly Dictionary _reverseMapping = new();
+
+ public int Count => _mapping.Count;
+
+ public ICollection LedIds => _mapping.Keys;
+ public ICollection Mappings => _reverseMapping.Keys;
+
+ #endregion
+
+ #region Indexer
+
+ public T this[LedId ledId]
+ {
+ get => _mapping[ledId];
+ set
+ {
+ _mapping[ledId] = value;
+ _reverseMapping[value] = ledId;
+ }
+ }
+
+ public LedId this[T mapping]
+ {
+ get => _reverseMapping[mapping];
+ set => this[value] = mapping;
+ }
+
+ #endregion
+
+ #region Methods
+
+ public void Add(LedId ledId, T mapping)
+ {
+ _mapping.Add(ledId, mapping);
+ _reverseMapping.Add(mapping, ledId);
+ }
+
+ public bool Contains(LedId ledId) => _mapping.ContainsKey(ledId);
+ public bool Contains(T mapping) => _reverseMapping.ContainsKey(mapping);
+
+ public bool TryGetValue(LedId ledId, out T? mapping) => _mapping.TryGetValue(ledId, out mapping);
+ public bool TryGetValue(T mapping, out LedId ledId) => _reverseMapping.TryGetValue(mapping, out ledId);
+
+ public bool Remove(LedId ledId)
+ {
+ if (_mapping.TryGetValue(ledId, out T? mapping))
+ _reverseMapping.Remove(mapping);
+ return _mapping.Remove(ledId);
+ }
+
+ public bool Remove(T mapping)
+ {
+ if (_reverseMapping.TryGetValue(mapping, out LedId ledId))
+ _mapping.Remove(ledId);
+ return _reverseMapping.Remove(mapping);
+ }
+
+ public void Clear()
+ {
+ _mapping.Clear();
+ _reverseMapping.Clear();
+ }
+
+ IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
+ public IEnumerator<(LedId ledId, T mapping)> GetEnumerator() => _mapping.Select(x => (x.Key, x.Value)).GetEnumerator();
+
+ #endregion
+ }
+}
diff --git a/RGB.NET.Devices.Asus/AsusDeviceProvider.cs b/RGB.NET.Devices.Asus/AsusDeviceProvider.cs
index 59a1351..580ab42 100644
--- a/RGB.NET.Devices.Asus/AsusDeviceProvider.cs
+++ b/RGB.NET.Devices.Asus/AsusDeviceProvider.cs
@@ -23,6 +23,7 @@ namespace RGB.NET.Devices.Asus
public static AsusDeviceProvider Instance => _instance ?? new AsusDeviceProvider();
private IAuraSdk2? _sdk;
+ private IAuraSyncDeviceCollection? _devices; //HACK DarthAffe 05.04.2021: Due to some researches this might fix the access violation in the asus-sdk
#endregion
@@ -52,8 +53,10 @@ namespace RGB.NET.Devices.Asus
{
if (_sdk == null) yield break;
- foreach (IAuraSyncDevice device in _sdk.Enumerate(0))
+ _devices = _sdk.Enumerate(0);
+ for (int i = 0; i < _devices.Count; i++)
{
+ IAuraSyncDevice device = _devices[i];
yield return (AsusDeviceType)device.Type switch
{
AsusDeviceType.MB_RGB => new AsusMainboardRGBDevice(new AsusRGBDeviceInfo(RGBDeviceType.Mainboard, device, WMIHelper.GetMainboardInfo()?.model ?? device.Name), GetUpdateTrigger()),
@@ -78,6 +81,7 @@ namespace RGB.NET.Devices.Asus
try { _sdk?.ReleaseControl(0); }
catch { /* at least we tried */ }
+ _devices = null;
_sdk = null;
}
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..5deab5c 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();
+ _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 < DeviceInfo.LedCount; 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
diff --git a/RGB.NET.Devices.DMX/E131/E131DeviceInfo.cs b/RGB.NET.Devices.DMX/E131/E131DeviceInfo.cs
index f9f28fd..602acd5 100644
--- a/RGB.NET.Devices.DMX/E131/E131DeviceInfo.cs
+++ b/RGB.NET.Devices.DMX/E131/E131DeviceInfo.cs
@@ -67,12 +67,12 @@ namespace RGB.NET.Devices.DMX.E131
this.Hostname = deviceDefinition.Hostname;
this.Port = deviceDefinition.Port;
this.Universe = deviceDefinition.Universe;
-
+
byte[]? cid = deviceDefinition.CID;
- if ((CID == null) || (CID.Length != CID_LENGTH))
+ if ((cid == null) || (cid.Length != CID_LENGTH))
{
- CID = new byte[CID_LENGTH];
- new Random().NextBytes(CID);
+ cid = new byte[CID_LENGTH];
+ new Random().NextBytes(cid);
}
CID = cid!;
diff --git a/RGB.NET.Devices.Logitech/Enum/LogitechLedId.cs b/RGB.NET.Devices.Logitech/Enum/LogitechLedId.cs
index 60d7103..b879ab4 100644
--- a/RGB.NET.Devices.Logitech/Enum/LogitechLedId.cs
+++ b/RGB.NET.Devices.Logitech/Enum/LogitechLedId.cs
@@ -1,15 +1,12 @@
-// ReSharper disable InconsistentNaming
-
-#pragma warning disable 1591 // Missing XML comment for publicly visible type or member
+#pragma warning disable 1591 // Missing XML comment for publicly visible type or member
namespace RGB.NET.Devices.Logitech
{
///
- /// Contains list of all LEDs available for all logitech devices.
+ /// Contains a list of Logitech LED IDs
///
public enum LogitechLedId
{
- Invalid = 0,
ESC = 0x01,
F1 = 0x3b,
F2 = 0x3c,
@@ -25,8 +22,7 @@ namespace RGB.NET.Devices.Logitech
F12 = 0x58,
PRINT_SCREEN = 0x137,
SCROLL_LOCK = 0x46,
- PAUSE_BREAK = 0x45,
-
+ PAUSE_BREAK = 0x145,
TILDE = 0x29,
ONE = 0x02,
TWO = 0x03,
@@ -44,11 +40,10 @@ namespace RGB.NET.Devices.Logitech
INSERT = 0x152,
HOME = 0x147,
PAGE_UP = 0x149,
- NUM_LOCK = 0x145,
+ NUM_LOCK = 0x45,
NUM_SLASH = 0x135,
NUM_ASTERISK = 0x37,
NUM_MINUS = 0x4A,
-
TAB = 0x0F,
Q = 0x10,
W = 0x11,
@@ -70,7 +65,6 @@ namespace RGB.NET.Devices.Logitech
NUM_EIGHT = 0x48,
NUM_NINE = 0x49,
NUM_PLUS = 0x4E,
-
CAPS_LOCK = 0x3A,
A = 0x1E,
S = 0x1F,
@@ -83,12 +77,10 @@ namespace RGB.NET.Devices.Logitech
L = 0x26,
SEMICOLON = 0x27,
APOSTROPHE = 0x28,
- NonUsTilde = 0xFF, //TODO DarthAffe 26.03.2017: Find the real ID/Name of this key - it's not documented ...
ENTER = 0x1C,
NUM_FOUR = 0x4B,
NUM_FIVE = 0x4C,
NUM_SIX = 0x4D,
-
LEFT_SHIFT = 0x2A,
Z = 0x2C,
X = 0x2D,
@@ -106,7 +98,6 @@ namespace RGB.NET.Devices.Logitech
NUM_TWO = 0x50,
NUM_THREE = 0x51,
NUM_ENTER = 0x11C,
-
LEFT_CONTROL = 0x1D,
LEFT_WINDOWS = 0x15B,
LEFT_ALT = 0x38,
@@ -120,7 +111,8 @@ namespace RGB.NET.Devices.Logitech
ARROW_RIGHT = 0x14D,
NUM_ZERO = 0x52,
NUM_PERIOD = 0x53,
-
+ ISO_BACKSLASH = 0x56,
+ ISO_TILDE = 0x5D,
G_1 = 0xFFF1,
G_2 = 0xFFF2,
G_3 = 0xFFF3,
@@ -131,8 +123,6 @@ namespace RGB.NET.Devices.Logitech
G_8 = 0xFFF8,
G_9 = 0xFFF9,
G_LOGO = 0xFFFF1,
- G_BADGE = 0xFFFF2,
-
- DEVICE = 0xFFFFFFF
- }
+ G_BADGE = 0xFFFF2
+ };
}
diff --git a/RGB.NET.Devices.Logitech/Generic/LedMappings.cs b/RGB.NET.Devices.Logitech/Generic/LedMappings.cs
new file mode 100644
index 0000000..679a4e3
--- /dev/null
+++ b/RGB.NET.Devices.Logitech/Generic/LedMappings.cs
@@ -0,0 +1,319 @@
+using RGB.NET.Core;
+
+namespace RGB.NET.Devices.Logitech
+{
+ public static class LedMappings
+ {
+ public static LedMapping PerKey { get; } = new()
+ {
+ { LedId.Keyboard_Escape, LogitechLedId.ESC },
+ { LedId.Keyboard_F1, LogitechLedId.F1 },
+ { LedId.Keyboard_F2, LogitechLedId.F2},
+ { LedId.Keyboard_F3, LogitechLedId.F3 },
+ { LedId.Keyboard_F4, LogitechLedId.F4 },
+ { LedId.Keyboard_F5, LogitechLedId.F5 },
+ { LedId.Keyboard_F6, LogitechLedId.F6 },
+ { LedId.Keyboard_F7, LogitechLedId.F7 },
+ { LedId.Keyboard_F8, LogitechLedId.F8 },
+ { LedId.Keyboard_F9, LogitechLedId.F9 },
+ { LedId.Keyboard_F10, LogitechLedId.F10 },
+ { LedId.Keyboard_F11, LogitechLedId.F11 },
+ { LedId.Keyboard_F12, LogitechLedId.F12 },
+ { LedId.Keyboard_PrintScreen, LogitechLedId.PRINT_SCREEN },
+ { LedId.Keyboard_ScrollLock, LogitechLedId.SCROLL_LOCK },
+ { LedId.Keyboard_PauseBreak, LogitechLedId.PAUSE_BREAK },
+
+ { LedId.Keyboard_GraveAccentAndTilde, LogitechLedId.TILDE },
+ { LedId.Keyboard_1, LogitechLedId.ONE },
+ { LedId.Keyboard_2, LogitechLedId.TWO },
+ { LedId.Keyboard_3, LogitechLedId.THREE },
+ { LedId.Keyboard_4, LogitechLedId.FOUR },
+ { LedId.Keyboard_5, LogitechLedId.FIVE },
+ { LedId.Keyboard_6, LogitechLedId.SIX },
+ { LedId.Keyboard_7, LogitechLedId.SEVEN },
+ { LedId.Keyboard_8, LogitechLedId.EIGHT },
+ { LedId.Keyboard_9, LogitechLedId.NINE },
+ { LedId.Keyboard_0, LogitechLedId.ZERO },
+ { LedId.Keyboard_MinusAndUnderscore, LogitechLedId.MINUS },
+ { LedId.Keyboard_EqualsAndPlus, LogitechLedId.EQUALS },
+ { LedId.Keyboard_Backspace, LogitechLedId.BACKSPACE },
+ { LedId.Keyboard_Insert, LogitechLedId.INSERT },
+ { LedId.Keyboard_Home, LogitechLedId.HOME },
+ { LedId.Keyboard_PageUp, LogitechLedId.PAGE_UP },
+ { LedId.Keyboard_NumLock, LogitechLedId.NUM_LOCK },
+ { LedId.Keyboard_NumSlash, LogitechLedId.NUM_SLASH },
+ { LedId.Keyboard_NumAsterisk, LogitechLedId.NUM_ASTERISK },
+ { LedId.Keyboard_NumMinus, LogitechLedId.NUM_MINUS },
+
+ { LedId.Keyboard_Tab, LogitechLedId.TAB },
+ { LedId.Keyboard_Q, LogitechLedId.Q },
+ { LedId.Keyboard_W, LogitechLedId.W },
+ { LedId.Keyboard_E, LogitechLedId.E },
+ { LedId.Keyboard_R, LogitechLedId.R },
+ { LedId.Keyboard_T, LogitechLedId.T },
+ { LedId.Keyboard_Y, LogitechLedId.Y },
+ { LedId.Keyboard_U, LogitechLedId.U },
+ { LedId.Keyboard_I, LogitechLedId.I },
+ { LedId.Keyboard_O, LogitechLedId.O },
+ { LedId.Keyboard_P, LogitechLedId.P },
+ { LedId.Keyboard_BracketLeft, LogitechLedId.OPEN_BRACKET },
+ { LedId.Keyboard_BracketRight, LogitechLedId.CLOSE_BRACKET },
+ { LedId.Keyboard_Backslash, LogitechLedId.BACKSLASH },
+ { LedId.Keyboard_Delete, LogitechLedId.KEYBOARD_DELETE },
+ { LedId.Keyboard_End, LogitechLedId.END },
+ { LedId.Keyboard_PageDown, LogitechLedId.PAGE_DOWN },
+ { LedId.Keyboard_Num7, LogitechLedId.NUM_SEVEN },
+ { LedId.Keyboard_Num8, LogitechLedId.NUM_EIGHT },
+ { LedId.Keyboard_Num9, LogitechLedId.NUM_NINE },
+ { LedId.Keyboard_NumPlus, LogitechLedId.NUM_PLUS },
+
+ { LedId.Keyboard_CapsLock, LogitechLedId.CAPS_LOCK },
+ { LedId.Keyboard_A, LogitechLedId.A },
+ { LedId.Keyboard_S, LogitechLedId.S },
+ { LedId.Keyboard_D, LogitechLedId.D },
+ { LedId.Keyboard_F, LogitechLedId.F },
+ { LedId.Keyboard_G, LogitechLedId.G },
+ { LedId.Keyboard_H, LogitechLedId.H },
+ { LedId.Keyboard_J, LogitechLedId.J },
+ { LedId.Keyboard_K, LogitechLedId.K },
+ { LedId.Keyboard_L, LogitechLedId.L },
+ { LedId.Keyboard_SemicolonAndColon, LogitechLedId.SEMICOLON },
+ { LedId.Keyboard_ApostropheAndDoubleQuote, LogitechLedId.APOSTROPHE },
+ { LedId.Keyboard_NonUsTilde, LogitechLedId.ISO_TILDE },
+ { LedId.Keyboard_Enter, LogitechLedId.ENTER },
+ { LedId.Keyboard_Num4, LogitechLedId.NUM_FOUR },
+ { LedId.Keyboard_Num5, LogitechLedId.NUM_FIVE },
+ { LedId.Keyboard_Num6, LogitechLedId.NUM_SIX },
+
+ { LedId.Keyboard_LeftShift, LogitechLedId.LEFT_SHIFT },
+ { LedId.Keyboard_NonUsBackslash, LogitechLedId.ISO_BACKSLASH },
+ { LedId.Keyboard_Z, LogitechLedId.Z },
+ { LedId.Keyboard_X, LogitechLedId.X },
+ { LedId.Keyboard_C, LogitechLedId.C },
+ { LedId.Keyboard_V, LogitechLedId.V },
+ { LedId.Keyboard_B, LogitechLedId.B },
+ { LedId.Keyboard_N, LogitechLedId.N },
+ { LedId.Keyboard_M, LogitechLedId.M },
+ { LedId.Keyboard_CommaAndLessThan, LogitechLedId.COMMA },
+ { LedId.Keyboard_PeriodAndBiggerThan, LogitechLedId.PERIOD },
+ { LedId.Keyboard_SlashAndQuestionMark, LogitechLedId.FORWARD_SLASH },
+ { LedId.Keyboard_RightShift, LogitechLedId.RIGHT_SHIFT },
+ { LedId.Keyboard_ArrowUp, LogitechLedId.ARROW_UP },
+ { LedId.Keyboard_Num1, LogitechLedId.NUM_ONE },
+ { LedId.Keyboard_Num2, LogitechLedId.NUM_TWO },
+ { LedId.Keyboard_Num3, LogitechLedId.NUM_THREE },
+ { LedId.Keyboard_NumEnter, LogitechLedId.NUM_ENTER },
+
+ { LedId.Keyboard_LeftCtrl, LogitechLedId.LEFT_CONTROL },
+ { LedId.Keyboard_LeftGui, LogitechLedId.LEFT_WINDOWS },
+ { LedId.Keyboard_LeftAlt, LogitechLedId.LEFT_ALT },
+ { LedId.Keyboard_Space, LogitechLedId.SPACE },
+ { LedId.Keyboard_RightAlt, LogitechLedId.RIGHT_ALT },
+ { LedId.Keyboard_RightGui, LogitechLedId.RIGHT_WINDOWS },
+ { LedId.Keyboard_Application, LogitechLedId.APPLICATION_SELECT },
+ { LedId.Keyboard_RightCtrl, LogitechLedId.RIGHT_CONTROL },
+ { LedId.Keyboard_ArrowLeft, LogitechLedId.ARROW_LEFT },
+ { LedId.Keyboard_ArrowDown, LogitechLedId.ARROW_DOWN },
+ { LedId.Keyboard_ArrowRight, LogitechLedId.ARROW_RIGHT },
+ { LedId.Keyboard_Num0, LogitechLedId.NUM_ZERO },
+ { LedId.Keyboard_NumPeriodAndDelete, LogitechLedId.NUM_PERIOD },
+
+ { LedId.Keyboard_Programmable1, LogitechLedId.G_1 },
+ { LedId.Keyboard_Programmable2, LogitechLedId.G_2 },
+ { LedId.Keyboard_Programmable3, LogitechLedId.G_3 },
+ { LedId.Keyboard_Programmable4, LogitechLedId.G_4 },
+ { LedId.Keyboard_Programmable5, LogitechLedId.G_5 },
+ { LedId.Keyboard_Programmable6, LogitechLedId.G_6 },
+ { LedId.Keyboard_Programmable7, LogitechLedId.G_7 },
+ { LedId.Keyboard_Programmable8, LogitechLedId.G_8 },
+ { LedId.Keyboard_Programmable9, LogitechLedId.G_9 },
+ { LedId.Logo, LogitechLedId.G_LOGO },
+ { LedId.Keyboard_Custom1, LogitechLedId.G_BADGE },
+ };
+
+ public static LedMapping Device { get; } = new()
+ {
+ { LedId.Custom1, 0 }
+ };
+
+ public static LedMapping ZoneKeyboard { get; } = new()
+ {
+ { LedId.Keyboard_Programmable1, 0 },
+ { LedId.Keyboard_Programmable2, 1 },
+ { LedId.Keyboard_Programmable3, 2 },
+ { LedId.Keyboard_Programmable4, 3 },
+ { LedId.Keyboard_Programmable5, 4 },
+ { LedId.Keyboard_Programmable6, 5 },
+ { LedId.Keyboard_Programmable7, 6 },
+ { LedId.Keyboard_Programmable8, 7 },
+ { LedId.Keyboard_Programmable9, 8 },
+ { LedId.Keyboard_Programmable10, 9 },
+ { LedId.Keyboard_Programmable11, 10 },
+ { LedId.Keyboard_Programmable12, 11 },
+ { LedId.Keyboard_Programmable13, 12 },
+ { LedId.Keyboard_Programmable14, 13 },
+ { LedId.Keyboard_Programmable15, 14 },
+ { LedId.Keyboard_Programmable16, 15 },
+ { LedId.Keyboard_Programmable17, 16 },
+ { LedId.Keyboard_Programmable18, 17 },
+ { LedId.Keyboard_Programmable19, 18 },
+ { LedId.Keyboard_Programmable20, 19 },
+ { LedId.Keyboard_Programmable21, 20 },
+ { LedId.Keyboard_Programmable22, 21 },
+ { LedId.Keyboard_Programmable23, 22 },
+ { LedId.Keyboard_Programmable24, 23 },
+ { LedId.Keyboard_Programmable25, 24 },
+ { LedId.Keyboard_Programmable26, 25 },
+ { LedId.Keyboard_Programmable27, 26 },
+ { LedId.Keyboard_Programmable28, 27 },
+ { LedId.Keyboard_Programmable29, 28 },
+ { LedId.Keyboard_Programmable30, 29 },
+ { LedId.Keyboard_Programmable31, 30 },
+ { LedId.Keyboard_Programmable32, 31 },
+ };
+
+ public static LedMapping ZoneMouse { get; } = new()
+ {
+ { LedId.Mouse1, 0 },
+ { LedId.Mouse2, 1 },
+ { LedId.Mouse3, 2 },
+ { LedId.Mouse4, 3 },
+ { LedId.Mouse5, 4 },
+ { LedId.Mouse6, 5 },
+ { LedId.Mouse7, 6 },
+ { LedId.Mouse8, 7 },
+ { LedId.Mouse9, 8 },
+ { LedId.Mouse10, 9 },
+ { LedId.Mouse11, 10 },
+ { LedId.Mouse12, 11 },
+ { LedId.Mouse13, 12 },
+ { LedId.Mouse14, 13 },
+ { LedId.Mouse15, 14 },
+ { LedId.Mouse16, 15 },
+ { LedId.Mouse17, 16 },
+ { LedId.Mouse18, 17 },
+ { LedId.Mouse19, 18 },
+ { LedId.Mouse20, 19 },
+ { LedId.Mouse21, 20 },
+ { LedId.Mouse22, 21 },
+ { LedId.Mouse23, 22 },
+ { LedId.Mouse24, 23 },
+ { LedId.Mouse25, 24 },
+ { LedId.Mouse26, 25 },
+ { LedId.Mouse27, 26 },
+ { LedId.Mouse28, 27 },
+ { LedId.Mouse29, 28 },
+ { LedId.Mouse30, 29 },
+ { LedId.Mouse31, 30 },
+ { LedId.Mouse32, 31 },
+ };
+
+ public static LedMapping ZoneHeadset { get; } = new()
+ {
+ { LedId.Headset1, 0 },
+ { LedId.Headset2, 1 },
+ { LedId.Headset3, 2 },
+ { LedId.Headset4, 3 },
+ { LedId.Headset5, 4 },
+ { LedId.Headset6, 5 },
+ { LedId.Headset7, 6 },
+ { LedId.Headset8, 7 },
+ { LedId.Headset9, 8 },
+ { LedId.Headset10, 9 },
+ { LedId.Headset11, 10 },
+ { LedId.Headset12, 11 },
+ { LedId.Headset13, 12 },
+ { LedId.Headset14, 13 },
+ { LedId.Headset15, 14 },
+ { LedId.Headset16, 15 },
+ { LedId.Headset17, 16 },
+ { LedId.Headset18, 17 },
+ { LedId.Headset19, 18 },
+ { LedId.Headset20, 19 },
+ { LedId.Headset21, 20 },
+ { LedId.Headset22, 21 },
+ { LedId.Headset23, 22 },
+ { LedId.Headset24, 23 },
+ { LedId.Headset25, 24 },
+ { LedId.Headset26, 25 },
+ { LedId.Headset27, 26 },
+ { LedId.Headset28, 27 },
+ { LedId.Headset29, 28 },
+ { LedId.Headset30, 29 },
+ { LedId.Headset31, 30 },
+ { LedId.Headset32, 31 },
+ };
+
+ public static LedMapping ZoneMousepad { get; } = new()
+ {
+ { LedId.Mousepad1, 0 },
+ { LedId.Mousepad2, 1 },
+ { LedId.Mousepad3, 2 },
+ { LedId.Mousepad4, 3 },
+ { LedId.Mousepad5, 4 },
+ { LedId.Mousepad6, 5 },
+ { LedId.Mousepad7, 6 },
+ { LedId.Mousepad8, 7 },
+ { LedId.Mousepad9, 8 },
+ { LedId.Mousepad10, 9 },
+ { LedId.Mousepad11, 10 },
+ { LedId.Mousepad12, 11 },
+ { LedId.Mousepad13, 12 },
+ { LedId.Mousepad14, 13 },
+ { LedId.Mousepad15, 14 },
+ { LedId.Mousepad16, 15 },
+ { LedId.Mousepad17, 16 },
+ { LedId.Mousepad18, 17 },
+ { LedId.Mousepad19, 18 },
+ { LedId.Mousepad20, 19 },
+ { LedId.Mousepad21, 20 },
+ { LedId.Mousepad22, 21 },
+ { LedId.Mousepad23, 22 },
+ { LedId.Mousepad24, 23 },
+ { LedId.Mousepad25, 24 },
+ { LedId.Mousepad26, 25 },
+ { LedId.Mousepad27, 26 },
+ { LedId.Mousepad28, 27 },
+ { LedId.Mousepad29, 28 },
+ { LedId.Mousepad30, 29 },
+ { LedId.Mousepad31, 30 },
+ { LedId.Mousepad32, 31 },
+ };
+
+ public static LedMapping ZoneSpeaker { get; } = new()
+ {
+ { LedId.Speaker1, 0 },
+ { LedId.Speaker2, 1 },
+ { LedId.Speaker3, 2 },
+ { LedId.Speaker4, 3 },
+ { LedId.Speaker5, 4 },
+ { LedId.Speaker6, 5 },
+ { LedId.Speaker7, 6 },
+ { LedId.Speaker8, 7 },
+ { LedId.Speaker9, 8 },
+ { LedId.Speaker10, 9 },
+ { LedId.Speaker11, 10 },
+ { LedId.Speaker12, 11 },
+ { LedId.Speaker13, 12 },
+ { LedId.Speaker14, 13 },
+ { LedId.Speaker15, 14 },
+ { LedId.Speaker16, 15 },
+ { LedId.Speaker17, 16 },
+ { LedId.Speaker18, 17 },
+ { LedId.Speaker19, 18 },
+ { LedId.Speaker20, 19 },
+ { LedId.Speaker21, 20 },
+ { LedId.Speaker22, 21 },
+ { LedId.Speaker23, 22 },
+ { LedId.Speaker24, 23 },
+ { LedId.Speaker25, 24 },
+ { LedId.Speaker26, 25 },
+ { LedId.Speaker27, 26 },
+ { LedId.Speaker28, 27 },
+ { LedId.Speaker29, 28 },
+ { LedId.Speaker30, 29 },
+ { LedId.Speaker31, 30 },
+ { LedId.Speaker32, 31 },
+ };
+ }
+}
diff --git a/RGB.NET.Devices.Logitech/HID/DeviceChecker.cs b/RGB.NET.Devices.Logitech/HID/DeviceChecker.cs
deleted file mode 100644
index 01ba947..0000000
--- a/RGB.NET.Devices.Logitech/HID/DeviceChecker.cs
+++ /dev/null
@@ -1,133 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using HidSharp;
-using RGB.NET.Core;
-
-namespace RGB.NET.Devices.Logitech.HID
-{
- internal static class DeviceChecker
- {
- #region Constants
-
- private const int VENDOR_ID = 0x046D;
-
- private static readonly List<(string model, RGBDeviceType deviceType, int id, int zones)> PER_KEY_DEVICES
- = new()
- {
- ("G910", RGBDeviceType.Keyboard, 0xC32B, 0),
- ("G910v2", RGBDeviceType.Keyboard, 0xC335, 0),
- ("G915", RGBDeviceType.Keyboard, 0xC541, 0),
- ("G815", RGBDeviceType.Keyboard, 0xC33F, 0),
- ("G810", RGBDeviceType.Keyboard, 0xC337, 0),
- ("G810", RGBDeviceType.Keyboard, 0xC331, 0),
- ("G610", RGBDeviceType.Keyboard, 0xC333, 0),
- ("G512", RGBDeviceType.Keyboard, 0xC33C, 0),
- ("G512 SE", RGBDeviceType.Keyboard, 0xC342, 0),
- ("G410", RGBDeviceType.Keyboard, 0xC330, 0),
- ("G213", RGBDeviceType.Keyboard, 0xC336, 0),
- ("Pro", RGBDeviceType.Keyboard, 0xC339, 0),
- ("G915 TKL", RGBDeviceType.Keyboard, 0xC343, 0),
- ("Lightspeed Keyboard Dongle", RGBDeviceType.Keyboard, 0xC545, 0),
- };
-
- private static readonly List<(string model, RGBDeviceType deviceType, int id, int zones)> PER_DEVICE_DEVICES
- = new()
- {
- ("G19", RGBDeviceType.Keyboard, 0xC228, 0),
- ("G19s", RGBDeviceType.Keyboard, 0xC229, 0),
- ("G600", RGBDeviceType.Mouse, 0xC24A, 0),
- ("G300s", RGBDeviceType.Mouse, 0xC246, 0),
- ("G510", RGBDeviceType.Keyboard, 0xC22D, 0),
- ("G510s", RGBDeviceType.Keyboard, 0xC22E, 0),
- ("G13", RGBDeviceType.Keypad, 0xC21C, 0),
- ("G110", RGBDeviceType.Keyboard, 0xC22B, 0),
- ("G710+", RGBDeviceType.Keyboard, 0xC24D, 0),
- ("G105", RGBDeviceType.Keyboard, 0xC248, 0),
- ("G15", RGBDeviceType.Keyboard, 0xC222, 0),
- ("G11", RGBDeviceType.Keyboard, 0xC225, 0),
- };
-
- private static readonly List<(string model, RGBDeviceType deviceType, int id, int zones)> ZONE_DEVICES
- = new()
- {
- ("G213", RGBDeviceType.Keyboard, 0xC336, 5),
- ("G903", RGBDeviceType.Mouse, 0xC086, 2),
- ("Lightspeed Mouse Dongle", RGBDeviceType.Mouse, 0xC539, 2),
- ("G703", RGBDeviceType.Mouse, 0xC087, 2),
- ("G502 HERO", RGBDeviceType.Mouse, 0xC08B, 2),
- ("G502 Lightspeed", RGBDeviceType.Mouse, 0xC08D, 2),
- ("G502", RGBDeviceType.Mouse, 0xC332, 2),
- ("G403", RGBDeviceType.Mouse, 0xC083, 2),
- ("G303", RGBDeviceType.Mouse, 0xC080, 2),
- ("G203", RGBDeviceType.Mouse, 0xC084, 1),
- ("G Pro", RGBDeviceType.Mouse, 0xC085, 1),
- ("G Pro Wireless", RGBDeviceType.Mouse, 0xC088, 2),
- ("G Pro Hero", RGBDeviceType.Mouse, 0xC08C, 1),
- ("G633", RGBDeviceType.Headset, 0x0A5C, 2),
- ("G933", RGBDeviceType.Headset, 0x0A5B, 2),
- ("G935", RGBDeviceType.Headset, 0x0A87, 2),
- ("G560", RGBDeviceType.Speaker, 0x0A78, 4),
- ("G733", RGBDeviceType.Speaker, 0xAB5, 2),
- };
-
- #endregion
-
- #region Properties & Fields
-
- public static bool IsPerKeyDeviceConnected { get; private set; }
- public static (string model, RGBDeviceType deviceType, int id, int zones) PerKeyDeviceData { get; private set; }
-
- public static bool IsPerDeviceDeviceConnected { get; private set; }
- public static (string model, RGBDeviceType deviceType, int id, int zones) PerDeviceDeviceData { get; private set; }
-
- public static bool IsZoneDeviceConnected { get; private set; }
- public static IEnumerable<(string model, RGBDeviceType deviceType, int id, int zones)> ZoneDeviceData { get; private set; } = Enumerable.Empty<(string model, RGBDeviceType deviceType, int id, int zones)>();
-
- #endregion
-
- #region Methods
-
- internal static void LoadDeviceList()
- {
- List ids = DeviceList.Local.GetHidDevices(VENDOR_ID).Select(x => x.ProductID).Distinct().ToList();
-
- foreach ((string model, RGBDeviceType deviceType, int id, int zones) deviceData in PER_KEY_DEVICES)
- if (ids.Contains(deviceData.id))
- {
- IsPerKeyDeviceConnected = true;
- PerKeyDeviceData = deviceData;
- break;
- }
-
- foreach ((string model, RGBDeviceType deviceType, int id, int zones) deviceData in PER_DEVICE_DEVICES)
- if (ids.Contains(deviceData.id))
- {
- IsPerDeviceDeviceConnected = true;
- PerDeviceDeviceData = deviceData;
- break;
- }
-
- Dictionary> connectedZoneDevices = new();
- foreach ((string model, RGBDeviceType deviceType, int id, int zones) deviceData in ZONE_DEVICES)
- {
- if (ids.Contains(deviceData.id))
- {
- IsZoneDeviceConnected = true;
- if (!connectedZoneDevices.TryGetValue(deviceData.deviceType, out List<(string model, RGBDeviceType deviceType, int id, int zones)>? deviceList))
- connectedZoneDevices.Add(deviceData.deviceType, deviceList = new List<(string model, RGBDeviceType deviceType, int id, int zones)>());
- deviceList.Add(deviceData);
- }
- }
- List<(string model, RGBDeviceType deviceType, int id, int zones)> zoneDeviceData = new();
- foreach (KeyValuePair> connectedZoneDevice in connectedZoneDevices)
- {
- int maxZones = connectedZoneDevice.Value.Max(x => x.zones);
- zoneDeviceData.Add(connectedZoneDevice.Value.First(x => x.zones == maxZones));
- }
-
- ZoneDeviceData = zoneDeviceData;
- }
-
- #endregion
- }
-}
diff --git a/RGB.NET.Devices.Logitech/LogitechDeviceProvider.cs b/RGB.NET.Devices.Logitech/LogitechDeviceProvider.cs
index aa75343..f24ecad 100644
--- a/RGB.NET.Devices.Logitech/LogitechDeviceProvider.cs
+++ b/RGB.NET.Devices.Logitech/LogitechDeviceProvider.cs
@@ -3,9 +3,11 @@
using System;
using System.Collections.Generic;
+using System.Linq;
+using HidSharp;
using RGB.NET.Core;
-using RGB.NET.Devices.Logitech.HID;
using RGB.NET.Devices.Logitech.Native;
+using RGB.NET.HID;
namespace RGB.NET.Devices.Logitech
{
@@ -38,6 +40,66 @@ namespace RGB.NET.Devices.Logitech
private LogitechPerDeviceUpdateQueue? _perDeviceUpdateQueue;
private LogitechPerKeyUpdateQueue? _perKeyUpdateQueue;
+ private const int VENDOR_ID = 0x046D;
+
+ public static HIDLoader PerKeyDeviceDefinitions { get; } = new(VENDOR_ID)
+ {
+ { 0xC32B, RGBDeviceType.Keyboard, "G910", LedMappings.PerKey, 0 },
+ { 0xC335, RGBDeviceType.Keyboard, "G910v2", LedMappings.PerKey, 0 },
+ { 0xC541, RGBDeviceType.Keyboard, "G915", LedMappings.PerKey, 0 },
+ { 0xC33F, RGBDeviceType.Keyboard, "G815", LedMappings.PerKey, 0 },
+ { 0xC337, RGBDeviceType.Keyboard, "G810", LedMappings.PerKey, 0 },
+ { 0xC331, RGBDeviceType.Keyboard, "G810", LedMappings.PerKey, 0 },
+ { 0xC333, RGBDeviceType.Keyboard, "G610", LedMappings.PerKey, 0 },
+ { 0xC33C, RGBDeviceType.Keyboard, "G512", LedMappings.PerKey, 0 },
+ { 0xC342, RGBDeviceType.Keyboard, "G512 SE", LedMappings.PerKey, 0 },
+ { 0xC232, RGBDeviceType.Keyboard, "G513 Carbon", LedMappings.PerKey, 0 },
+ { 0xC330, RGBDeviceType.Keyboard, "G410", LedMappings.PerKey, 0 },
+ { 0xC336, RGBDeviceType.Keyboard, "G213", LedMappings.PerKey, 0 },
+ { 0xC339, RGBDeviceType.Keyboard, "Pro", LedMappings.PerKey, 0 },
+ { 0xC343, RGBDeviceType.Keyboard, "G915 TKL", LedMappings.PerKey, 0 },
+ { 0xC545, RGBDeviceType.Keyboard, "Lightspeed Keyboard Dongle", LedMappings.PerKey, 0 },
+ };
+
+ public static HIDLoader PerZoneDeviceDefinitions { get; } = new(VENDOR_ID)
+ {
+ { 0xC336, RGBDeviceType.Keyboard, "G213", LedMappings.ZoneKeyboard, (LogitechDeviceType.Keyboard, 2) },
+ { 0xC086, RGBDeviceType.Mouse, "G903", LedMappings.ZoneMouse, (LogitechDeviceType.Mouse, 2) },
+ { 0xC081, RGBDeviceType.Mouse, "G900", LedMappings.ZoneMouse, (LogitechDeviceType.Mouse, 2) },
+ { 0xC539, RGBDeviceType.Mouse, "Lightspeed Mouse Dongle", LedMappings.ZoneMouse, (LogitechDeviceType.Mouse, 2) },
+ { 0xC087, RGBDeviceType.Mouse, "G703", LedMappings.ZoneMouse, (LogitechDeviceType.Mouse, 2) },
+ { 0xC08B, RGBDeviceType.Mouse, "G502 HERO", LedMappings.ZoneMouse, (LogitechDeviceType.Mouse, 2) },
+ { 0xC08D, RGBDeviceType.Mouse, "G502 Lightspeed", LedMappings.ZoneMouse, (LogitechDeviceType.Mouse, 2) },
+ { 0xC332, RGBDeviceType.Mouse, "G502", LedMappings.ZoneMouse, (LogitechDeviceType.Mouse, 2) },
+ { 0xC083, RGBDeviceType.Mouse, "G403", LedMappings.ZoneMouse, (LogitechDeviceType.Mouse, 2) },
+ { 0xC080, RGBDeviceType.Mouse, "G303", LedMappings.ZoneMouse, (LogitechDeviceType.Mouse, 2) },
+ { 0xC084, RGBDeviceType.Mouse, "G203", LedMappings.ZoneMouse, (LogitechDeviceType.Mouse, 1) },
+ { 0xC085, RGBDeviceType.Mouse, "G Pro", LedMappings.ZoneMouse, (LogitechDeviceType.Mouse, 1) },
+ { 0xC088, RGBDeviceType.Mouse, "G Pro Wireless", LedMappings.ZoneMouse, (LogitechDeviceType.Mouse, 2) },
+ { 0xC08C, RGBDeviceType.Mouse, "G Pro Hero", LedMappings.ZoneMouse, (LogitechDeviceType.Mouse, 1) },
+ { 0x0A5C, RGBDeviceType.Headset, "G633", LedMappings.ZoneHeadset, (LogitechDeviceType.Headset, 2) },
+ { 0x0A5B, RGBDeviceType.Headset, "G933", LedMappings.ZoneHeadset, (LogitechDeviceType.Headset, 2) },
+ { 0x0A87, RGBDeviceType.Headset, "G935", LedMappings.ZoneHeadset, (LogitechDeviceType.Headset, 2) },
+ { 0x0A78, RGBDeviceType.Speaker, "G560", LedMappings.ZoneHeadset, (LogitechDeviceType.Speaker, 4) },
+ { 0xAB5, RGBDeviceType.Speaker, "G733", LedMappings.ZoneSpeaker, (LogitechDeviceType.Speaker, 2) },
+ };
+
+ public static HIDLoader PerDeviceDeviceDefinitions { get; } = new(VENDOR_ID)
+ {
+ { 0xC228, RGBDeviceType.Keyboard, "G19", LedMappings.Device, 0 },
+ { 0xC229, RGBDeviceType.Keyboard, "G19s", LedMappings.Device, 0 },
+ { 0xC24A, RGBDeviceType.Mouse, "G600", LedMappings.Device, 0 },
+ { 0xC246, RGBDeviceType.Mouse, "G300s", LedMappings.Device, 0 },
+ { 0xC22D, RGBDeviceType.Keyboard, "G510", LedMappings.Device, 0 },
+ { 0xC22E, RGBDeviceType.Keyboard, "G510s", LedMappings.Device, 0 },
+ { 0xC21C, RGBDeviceType.Keypad, "G13", LedMappings.Device, 0 },
+ { 0xC22B, RGBDeviceType.Keyboard, "G110", LedMappings.Device, 0 },
+ { 0xC24D, RGBDeviceType.Keyboard, "G710+", LedMappings.Device, 0 },
+ { 0xC248, RGBDeviceType.Keyboard, "G105", LedMappings.Device, 0 },
+ { 0xC222, RGBDeviceType.Keyboard, "G15", LedMappings.Device, 0 },
+ { 0xC225, RGBDeviceType.Keyboard, "G11", LedMappings.Device, 0 },
+ };
+
#endregion
#region Constructors
@@ -67,30 +129,37 @@ namespace RGB.NET.Devices.Logitech
_LogitechGSDK.LogiLedSaveCurrentLighting();
}
+ protected override IEnumerable GetLoadedDevices(RGBDeviceType loadFilter)
+ {
+ PerKeyDeviceDefinitions.LoadFilter = loadFilter;
+ PerZoneDeviceDefinitions.LoadFilter = loadFilter;
+ PerDeviceDeviceDefinitions.LoadFilter = loadFilter;
+
+ return base.GetLoadedDevices(loadFilter);
+ }
+
//TODO DarthAffe 04.03.2021: Rework device selection and configuration for HID-based providers
protected override IEnumerable LoadDevices()
{
- DeviceChecker.LoadDeviceList();
-
- if (DeviceChecker.IsPerKeyDeviceConnected && (_perKeyUpdateQueue != null))
+ IEnumerable<(HIDDeviceDefinition definition, HidDevice device)> perKeyDevices = PerKeyDeviceDefinitions.GetConnectedDevices();
+ if ((_perKeyUpdateQueue != null) && perKeyDevices.Any())
{
- (string model, RGBDeviceType deviceType, int _, int _) = DeviceChecker.PerKeyDeviceData;
- yield return new LogitechPerKeyRGBDevice(new LogitechRGBDeviceInfo(deviceType, model, LogitechDeviceCaps.PerKeyRGB, 0), _perKeyUpdateQueue);
+ (HIDDeviceDefinition definition, _) = perKeyDevices.First();
+ yield return new LogitechPerKeyRGBDevice(new LogitechRGBDeviceInfo(definition.DeviceType, definition.Name, LogitechDeviceCaps.PerKeyRGB, 0), _perKeyUpdateQueue, definition.LedMapping);
}
- if (DeviceChecker.IsPerDeviceDeviceConnected && (_perDeviceUpdateQueue != null))
+ IEnumerable<(HIDDeviceDefinition definition, HidDevice device)> perZoneDevices = PerZoneDeviceDefinitions.GetConnectedDevices(x => x.CustomData.deviceType);
+ foreach ((HIDDeviceDefinition definition, _) in perZoneDevices)
{
- (string model, RGBDeviceType deviceType, int _, int _) = DeviceChecker.PerDeviceDeviceData;
- yield return new LogitechPerDeviceRGBDevice(new LogitechRGBDeviceInfo(deviceType, model, LogitechDeviceCaps.DeviceRGB, 0), _perDeviceUpdateQueue);
+ LogitechZoneUpdateQueue updateQueue = new(GetUpdateTrigger(), definition.CustomData.deviceType);
+ yield return new LogitechZoneRGBDevice(new LogitechRGBDeviceInfo(definition.DeviceType, definition.Name, LogitechDeviceCaps.DeviceRGB, definition.CustomData.zones), updateQueue, definition.LedMapping);
}
- if (DeviceChecker.IsZoneDeviceConnected)
+ IEnumerable<(HIDDeviceDefinition definition, HidDevice device)> perDeviceDevices = PerDeviceDeviceDefinitions.GetConnectedDevices();
+ if ((_perDeviceUpdateQueue != null) && perDeviceDevices.Any())
{
- foreach ((string model, RGBDeviceType deviceType, int _, int zones) in DeviceChecker.ZoneDeviceData)
- {
- LogitechZoneUpdateQueue updateQueue = new(GetUpdateTrigger(), deviceType);
- yield return new LogitechZoneRGBDevice(new LogitechRGBDeviceInfo(deviceType, model, LogitechDeviceCaps.DeviceRGB, zones), updateQueue);
- }
+ (HIDDeviceDefinition definition, _) = perDeviceDevices.First();
+ yield return new LogitechPerDeviceRGBDevice(new LogitechRGBDeviceInfo(definition.DeviceType, definition.Name, LogitechDeviceCaps.DeviceRGB, 0), _perDeviceUpdateQueue, definition.LedMapping);
}
}
diff --git a/RGB.NET.Devices.Logitech/PerDevice/LogitechPerDeviceRGBDevice.cs b/RGB.NET.Devices.Logitech/PerDevice/LogitechPerDeviceRGBDevice.cs
index b65ba13..eff963b 100644
--- a/RGB.NET.Devices.Logitech/PerDevice/LogitechPerDeviceRGBDevice.cs
+++ b/RGB.NET.Devices.Logitech/PerDevice/LogitechPerDeviceRGBDevice.cs
@@ -10,16 +10,23 @@ namespace RGB.NET.Devices.Logitech
///
public class LogitechPerDeviceRGBDevice : LogitechRGBDevice, IUnknownDevice //TODO DarthAffe 18.04.2020: It's know which kind of device this is, but they would need to be separated
{
+ #region Properties & Fields
+
+ private readonly LedMapping _ledMapping;
+
+ #endregion
+
#region Constructors
///
///
/// Initializes a new instance of the class.
///
- /// The specific information provided by logitech for the per-device-lightable device
- internal LogitechPerDeviceRGBDevice(LogitechRGBDeviceInfo info, IUpdateQueue updateQueue)
+ internal LogitechPerDeviceRGBDevice(LogitechRGBDeviceInfo info, IUpdateQueue updateQueue, LedMapping ledMapping)
: base(info, updateQueue)
{
+ this._ledMapping = ledMapping;
+
InitializeLayout();
}
@@ -31,8 +38,9 @@ namespace RGB.NET.Devices.Logitech
{
AddLed(LedId.Custom1, new Point(0, 0), new Size(10, 10));
}
+
///
- protected override object GetLedCustomData(LedId ledId) => (ledId, LogitechLedId.DEVICE);
+ protected override object GetLedCustomData(LedId ledId) => _ledMapping[ledId];
///
protected override void UpdateLeds(IEnumerable ledsToUpdate) => UpdateQueue.SetData(GetUpdateData(ledsToUpdate.Take(1)));
diff --git a/RGB.NET.Devices.Logitech/PerKey/BitmapMapping.cs b/RGB.NET.Devices.Logitech/PerKey/BitmapMapping.cs
deleted file mode 100644
index 6c0b8c9..0000000
--- a/RGB.NET.Devices.Logitech/PerKey/BitmapMapping.cs
+++ /dev/null
@@ -1,169 +0,0 @@
-using System.Collections.Generic;
-using System.Runtime.CompilerServices;
-using RGB.NET.Core;
-
-namespace RGB.NET.Devices.Logitech
-{
- internal static class BitmapMapping
- {
- #region Constants
-
- private const int BITMAP_SIZE = 21 * 6 * 4;
-
- #endregion
-
- #region Properties & Fields
-
- internal static Dictionary BitmapOffset { get; } = new()
- {
- { LedId.Keyboard_Escape, 0 },
- { LedId.Keyboard_F1, 4 },
- { LedId.Keyboard_F2, 8 },
- { LedId.Keyboard_F3, 12 },
- { LedId.Keyboard_F4, 16 },
- { LedId.Keyboard_F5, 20 },
- { LedId.Keyboard_F6, 24 },
- { LedId.Keyboard_F7, 28 },
- { LedId.Keyboard_F8, 32 },
- { LedId.Keyboard_F9, 36 },
- { LedId.Keyboard_F10, 40 },
- { LedId.Keyboard_F11, 44 },
- { LedId.Keyboard_F12, 48 },
- { LedId.Keyboard_PrintScreen, 52 },
- { LedId.Keyboard_ScrollLock, 56 },
- { LedId.Keyboard_PauseBreak, 60 },
- // { LedId.Keyboard_?, 64 },
- // { LedId.Keyboard_?, 68 },
- // { LedId.Keyboard_?, 72 },
- // { LedId.Keyboard_?, 76 },
- // { LedId.Keyboard_?, 80 },
-
- { LedId.Keyboard_GraveAccentAndTilde, 84 },
- { LedId.Keyboard_1, 88 },
- { LedId.Keyboard_2, 92 },
- { LedId.Keyboard_3, 96 },
- { LedId.Keyboard_4, 100 },
- { LedId.Keyboard_5, 104 },
- { LedId.Keyboard_6, 108 },
- { LedId.Keyboard_7, 112 },
- { LedId.Keyboard_8, 116 },
- { LedId.Keyboard_9, 120 },
- { LedId.Keyboard_0, 124 },
- { LedId.Keyboard_MinusAndUnderscore, 128 },
- { LedId.Keyboard_EqualsAndPlus, 132 },
- { LedId.Keyboard_Backspace, 136 },
- { LedId.Keyboard_Insert, 140 },
- { LedId.Keyboard_Home, 144 },
- { LedId.Keyboard_PageUp, 148 },
- { LedId.Keyboard_NumLock, 152 },
- { LedId.Keyboard_NumSlash, 156 },
- { LedId.Keyboard_NumAsterisk, 160 },
- { LedId.Keyboard_NumMinus, 164 },
-
- { LedId.Keyboard_Tab, 168 },
- { LedId.Keyboard_Q, 172 },
- { LedId.Keyboard_W, 176 },
- { LedId.Keyboard_E, 180 },
- { LedId.Keyboard_R, 184 },
- { LedId.Keyboard_T, 188 },
- { LedId.Keyboard_Y, 192 },
- { LedId.Keyboard_U, 196 },
- { LedId.Keyboard_I, 200 },
- { LedId.Keyboard_O, 204 },
- { LedId.Keyboard_P, 208 },
- { LedId.Keyboard_BracketLeft, 212 },
- { LedId.Keyboard_BracketRight, 216 },
- { LedId.Keyboard_Backslash, 220 },
- { LedId.Keyboard_Delete, 224 },
- { LedId.Keyboard_End, 228 },
- { LedId.Keyboard_PageDown, 232 },
- { LedId.Keyboard_Num7, 236 },
- { LedId.Keyboard_Num8, 240 },
- { LedId.Keyboard_Num9, 244 },
- { LedId.Keyboard_NumPlus, 248 },
-
- { LedId.Keyboard_CapsLock, 252 },
- { LedId.Keyboard_A, 256 },
- { LedId.Keyboard_S, 260 },
- { LedId.Keyboard_D, 264 },
- { LedId.Keyboard_F, 268 },
- { LedId.Keyboard_G, 272 },
- { LedId.Keyboard_H, 276 },
- { LedId.Keyboard_J, 280 },
- { LedId.Keyboard_K, 284 },
- { LedId.Keyboard_L, 288 },
- { LedId.Keyboard_SemicolonAndColon, 292 },
- { LedId.Keyboard_ApostropheAndDoubleQuote, 296 },
- { LedId.Keyboard_NonUsTilde, 300 }, //TODO DarthAffe 26.03.2017: Find the real ID/Name of this key - it's not documented ...
- { LedId.Keyboard_Enter, 304 },
- // { LedId.Keyboard_?, 308 },
- // { LedId.Keyboard_?, 312 },
- // { LedId.Keyboard_?, 316 },
- { LedId.Keyboard_Num4, 320 },
- { LedId.Keyboard_Num5, 324 },
- { LedId.Keyboard_Num6, 328 },
- // { LedId.Keyboard_?, 332 },
-
- { LedId.Keyboard_LeftShift, 336 },
- { LedId.Keyboard_NonUsBackslash, 340 },
- { LedId.Keyboard_Z, 344 },
- { LedId.Keyboard_X, 348 },
- { LedId.Keyboard_C, 352 },
- { LedId.Keyboard_V, 356 },
- { LedId.Keyboard_B, 360 },
- { LedId.Keyboard_N, 364 },
- { LedId.Keyboard_M, 368 },
- { LedId.Keyboard_CommaAndLessThan, 372 },
- { LedId.Keyboard_PeriodAndBiggerThan, 376 },
- { LedId.Keyboard_SlashAndQuestionMark, 380 },
- { LedId.Keyboard_RightShift, 388 },
- // { LedId.Keyboard_?, 392 },
- { LedId.Keyboard_ArrowUp, 396 },
- // { LedId.Keyboard_?, 400 },
- { LedId.Keyboard_Num1, 404 },
- { LedId.Keyboard_Num2, 408 },
- { LedId.Keyboard_Num3, 412 },
- { LedId.Keyboard_NumEnter, 416 },
-
- { LedId.Keyboard_LeftCtrl, 420 },
- { LedId.Keyboard_LeftGui, 424 },
- { LedId.Keyboard_LeftAlt, 428 },
- // { LedId.Keyboard_?, 432 },
- // { LedId.Keyboard_?, 436 },
- { LedId.Keyboard_Space, 440 },
- // { LedId.Keyboard_?, 444 },
- // { LedId.Keyboard_?, 448 },
- // { LedId.Keyboard_?, 452 },
- // { LedId.Keyboard_?, 456 },
- // { LedId.Keyboard_?, 460 },
- { LedId.Keyboard_RightAlt, 464 },
- { LedId.Keyboard_RightGui, 468 },
- { LedId.Keyboard_Application, 472 },
- { LedId.Keyboard_RightCtrl, 476 },
- { LedId.Keyboard_ArrowLeft, 480 },
- { LedId.Keyboard_ArrowDown, 484 },
- { LedId.Keyboard_ArrowRight, 488 },
- { LedId.Keyboard_Num0, 492 },
- { LedId.Keyboard_NumPeriodAndDelete, 496 },
- // { LedId.Keyboard_?, 500 },
- };
-
- #endregion
-
- #region Methods
-
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- internal static byte[] CreateBitmap() => new byte[BITMAP_SIZE];
-
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- internal static void SetColor(byte[] bitmap, int offset, Color color)
- {
- bitmap[offset] = color.GetB();
- bitmap[offset + 1] = color.GetG();
- bitmap[offset + 2] = color.GetR();
- bitmap[offset + 3] = color.GetA();
- }
-
- #endregion
- }
-}
diff --git a/RGB.NET.Devices.Logitech/PerKey/LogitechPerKeyRGBDevice.cs b/RGB.NET.Devices.Logitech/PerKey/LogitechPerKeyRGBDevice.cs
index 29660c3..7595b25 100644
--- a/RGB.NET.Devices.Logitech/PerKey/LogitechPerKeyRGBDevice.cs
+++ b/RGB.NET.Devices.Logitech/PerKey/LogitechPerKeyRGBDevice.cs
@@ -9,23 +9,30 @@ namespace RGB.NET.Devices.Logitech
///
public class LogitechPerKeyRGBDevice : LogitechRGBDevice, IUnknownDevice //TODO DarthAffe 18.04.2020: It's know which kind of device this is, but they would need to be separated
{
+ #region Properties & Fields
+
+ private readonly LedMapping _ledMapping;
+
+ #endregion
+
#region Constructors
///
///
/// Initializes a new instance of the class.
///
- /// The specific information provided by logitech for the per-key-lightable device
- internal LogitechPerKeyRGBDevice(LogitechRGBDeviceInfo info, IUpdateQueue updateQueue)
+ internal LogitechPerKeyRGBDevice(LogitechRGBDeviceInfo info, IUpdateQueue updateQueue, LedMapping ledMapping)
: base(info, updateQueue)
- { }
+ {
+ this._ledMapping = ledMapping;
+ }
#endregion
#region Methods
///
- protected override object GetLedCustomData(LedId ledId) => (ledId, PerKeyIdMapping.DEFAULT.TryGetValue(ledId, out LogitechLedId logitechLedId) ? logitechLedId : LogitechLedId.Invalid);
+ protected override object GetLedCustomData(LedId ledId) => _ledMapping.TryGetValue(ledId, out LogitechLedId logitechLedId) ? logitechLedId : -1;
///
protected override void UpdateLeds(IEnumerable ledsToUpdate) => UpdateQueue.SetData(GetUpdateData(ledsToUpdate));
diff --git a/RGB.NET.Devices.Logitech/PerKey/LogitechPerKeyUpdateQueue.cs b/RGB.NET.Devices.Logitech/PerKey/LogitechPerKeyUpdateQueue.cs
index 6077ed6..5bc6177 100644
--- a/RGB.NET.Devices.Logitech/PerKey/LogitechPerKeyUpdateQueue.cs
+++ b/RGB.NET.Devices.Logitech/PerKey/LogitechPerKeyUpdateQueue.cs
@@ -9,12 +9,6 @@ namespace RGB.NET.Devices.Logitech
///
public class LogitechPerKeyUpdateQueue : UpdateQueue
{
- #region Properties & Fields
-
- private readonly byte[] _bitmap;
-
- #endregion
-
#region Constructors
///
@@ -24,7 +18,6 @@ namespace RGB.NET.Devices.Logitech
public LogitechPerKeyUpdateQueue(IDeviceUpdateTrigger updateTrigger)
: base(updateTrigger)
{
- _bitmap = BitmapMapping.CreateBitmap();
}
#endregion
@@ -36,27 +29,15 @@ namespace RGB.NET.Devices.Logitech
{
_LogitechGSDK.LogiLedSetTargetDevice(LogitechDeviceCaps.PerKeyRGB);
- Array.Clear(_bitmap, 0, _bitmap.Length);
- bool usesBitmap = false;
foreach ((object key, Color color) in dataSet)
{
- (LedId id, LogitechLedId customData) = ((LedId, LogitechLedId))key;
-
- // DarthAffe 26.03.2017: This is only needed since update by name doesn't work as expected for all keys ...
- if (BitmapMapping.BitmapOffset.TryGetValue(id, out int bitmapOffset))
- {
- BitmapMapping.SetColor(_bitmap, bitmapOffset, color);
- usesBitmap = true;
- }
- else
- _LogitechGSDK.LogiLedSetLightingForKeyWithKeyName((int)customData,
- (int)MathF.Round(color.R * 100),
- (int)MathF.Round(color.G * 100),
- (int)MathF.Round(color.B * 100));
+ // These will be LogitechLedId but the SDK expects an int and doesn't care about invalid values
+ int keyName = (int)key;
+ _LogitechGSDK.LogiLedSetLightingForKeyWithKeyName(keyName,
+ (int)MathF.Round(color.R * 100),
+ (int)MathF.Round(color.G * 100),
+ (int)MathF.Round(color.B * 100));
}
-
- if (usesBitmap)
- _LogitechGSDK.LogiLedSetLightingFromBitmap(_bitmap);
}
#endregion
diff --git a/RGB.NET.Devices.Logitech/PerKey/PerKeyIdMapping.cs b/RGB.NET.Devices.Logitech/PerKey/PerKeyIdMapping.cs
deleted file mode 100644
index 2e6a05c..0000000
--- a/RGB.NET.Devices.Logitech/PerKey/PerKeyIdMapping.cs
+++ /dev/null
@@ -1,130 +0,0 @@
-using System.Collections.Generic;
-using RGB.NET.Core;
-
-namespace RGB.NET.Devices.Logitech
-{
- internal static class PerKeyIdMapping
- {
- internal static readonly Dictionary DEFAULT = new()
- {
- { LedId.Invalid, LogitechLedId.Invalid },
- { LedId.Keyboard_Escape, LogitechLedId.ESC },
- { LedId.Keyboard_F1, LogitechLedId.F1 },
- { LedId.Keyboard_F2, LogitechLedId.F2 },
- { LedId.Keyboard_F3, LogitechLedId.F3 },
- { LedId.Keyboard_F4, LogitechLedId.F4 },
- { LedId.Keyboard_F5, LogitechLedId.F5 },
- { LedId.Keyboard_F6, LogitechLedId.F6 },
- { LedId.Keyboard_F7, LogitechLedId.F7 },
- { LedId.Keyboard_F8, LogitechLedId.F8 },
- { LedId.Keyboard_F9, LogitechLedId.F9 },
- { LedId.Keyboard_F10, LogitechLedId.F10 },
- { LedId.Keyboard_F11, LogitechLedId.F11 },
- { LedId.Keyboard_GraveAccentAndTilde, LogitechLedId.TILDE },
- { LedId.Keyboard_1, LogitechLedId.ONE },
- { LedId.Keyboard_2, LogitechLedId.TWO },
- { LedId.Keyboard_3, LogitechLedId.THREE },
- { LedId.Keyboard_4, LogitechLedId.FOUR },
- { LedId.Keyboard_5, LogitechLedId.FIVE },
- { LedId.Keyboard_6, LogitechLedId.SIX },
- { LedId.Keyboard_7, LogitechLedId.SEVEN },
- { LedId.Keyboard_8, LogitechLedId.EIGHT },
- { LedId.Keyboard_9, LogitechLedId.NINE },
- { LedId.Keyboard_0, LogitechLedId.ZERO },
- { LedId.Keyboard_MinusAndUnderscore, LogitechLedId.MINUS },
- { LedId.Keyboard_Tab, LogitechLedId.TAB },
- { LedId.Keyboard_Q, LogitechLedId.Q },
- { LedId.Keyboard_W, LogitechLedId.W },
- { LedId.Keyboard_E, LogitechLedId.E },
- { LedId.Keyboard_R, LogitechLedId.R },
- { LedId.Keyboard_T, LogitechLedId.T },
- { LedId.Keyboard_Y, LogitechLedId.Y },
- { LedId.Keyboard_U, LogitechLedId.U },
- { LedId.Keyboard_I, LogitechLedId.I },
- { LedId.Keyboard_O, LogitechLedId.O },
- { LedId.Keyboard_P, LogitechLedId.P },
- { LedId.Keyboard_BracketLeft, LogitechLedId.OPEN_BRACKET },
- { LedId.Keyboard_CapsLock, LogitechLedId.CAPS_LOCK },
- { LedId.Keyboard_A, LogitechLedId.A },
- { LedId.Keyboard_S, LogitechLedId.S },
- { LedId.Keyboard_D, LogitechLedId.D },
- { LedId.Keyboard_F, LogitechLedId.F },
- { LedId.Keyboard_G, LogitechLedId.G },
- { LedId.Keyboard_H, LogitechLedId.H },
- { LedId.Keyboard_J, LogitechLedId.J },
- { LedId.Keyboard_K, LogitechLedId.K },
- { LedId.Keyboard_L, LogitechLedId.L },
- { LedId.Keyboard_SemicolonAndColon, LogitechLedId.SEMICOLON },
- { LedId.Keyboard_ApostropheAndDoubleQuote, LogitechLedId.APOSTROPHE },
- { LedId.Keyboard_LeftShift, LogitechLedId.LEFT_SHIFT },
- { LedId.Keyboard_Z, LogitechLedId.Z },
- { LedId.Keyboard_X, LogitechLedId.X },
- { LedId.Keyboard_C, LogitechLedId.C },
- { LedId.Keyboard_V, LogitechLedId.V },
- { LedId.Keyboard_B, LogitechLedId.B },
- { LedId.Keyboard_N, LogitechLedId.N },
- { LedId.Keyboard_M, LogitechLedId.M },
- { LedId.Keyboard_CommaAndLessThan, LogitechLedId.COMMA },
- { LedId.Keyboard_PeriodAndBiggerThan, LogitechLedId.PERIOD },
- { LedId.Keyboard_SlashAndQuestionMark, LogitechLedId.FORWARD_SLASH },
- { LedId.Keyboard_LeftCtrl, LogitechLedId.LEFT_CONTROL },
- { LedId.Keyboard_LeftGui, LogitechLedId.LEFT_WINDOWS },
- { LedId.Keyboard_LeftAlt, LogitechLedId.LEFT_ALT },
- { LedId.Keyboard_Space, LogitechLedId.SPACE },
- { LedId.Keyboard_RightAlt, LogitechLedId.RIGHT_ALT },
- { LedId.Keyboard_RightGui, LogitechLedId.RIGHT_WINDOWS },
- { LedId.Keyboard_Application, LogitechLedId.APPLICATION_SELECT },
- { LedId.Keyboard_F12, LogitechLedId.F12 },
- { LedId.Keyboard_PrintScreen, LogitechLedId.PRINT_SCREEN },
- { LedId.Keyboard_ScrollLock, LogitechLedId.SCROLL_LOCK },
- { LedId.Keyboard_PauseBreak, LogitechLedId.PAUSE_BREAK },
- { LedId.Keyboard_Insert, LogitechLedId.INSERT },
- { LedId.Keyboard_Home, LogitechLedId.HOME },
- { LedId.Keyboard_PageUp, LogitechLedId.PAGE_UP },
- { LedId.Keyboard_BracketRight, LogitechLedId.CLOSE_BRACKET },
- { LedId.Keyboard_NonUsBackslash, LogitechLedId.BACKSLASH },
- { LedId.Keyboard_Backslash, LogitechLedId.BACKSLASH },
- { LedId.Keyboard_NonUsTilde, LogitechLedId.NonUsTilde },
- { LedId.Keyboard_Enter, LogitechLedId.ENTER },
- { LedId.Keyboard_EqualsAndPlus, LogitechLedId.EQUALS },
- { LedId.Keyboard_Backspace, LogitechLedId.BACKSPACE },
- { LedId.Keyboard_Delete, LogitechLedId.KEYBOARD_DELETE },
- { LedId.Keyboard_End, LogitechLedId.END },
- { LedId.Keyboard_PageDown, LogitechLedId.PAGE_DOWN },
- { LedId.Keyboard_RightShift, LogitechLedId.RIGHT_SHIFT },
- { LedId.Keyboard_RightCtrl, LogitechLedId.RIGHT_CONTROL },
- { LedId.Keyboard_ArrowUp, LogitechLedId.ARROW_UP },
- { LedId.Keyboard_ArrowLeft, LogitechLedId.ARROW_LEFT },
- { LedId.Keyboard_ArrowDown, LogitechLedId.ARROW_DOWN },
- { LedId.Keyboard_ArrowRight, LogitechLedId.ARROW_RIGHT },
- { LedId.Keyboard_NumLock, LogitechLedId.NUM_LOCK },
- { LedId.Keyboard_NumSlash, LogitechLedId.NUM_SLASH },
- { LedId.Keyboard_NumAsterisk, LogitechLedId.NUM_ASTERISK },
- { LedId.Keyboard_NumMinus, LogitechLedId.NUM_MINUS },
- { LedId.Keyboard_NumPlus, LogitechLedId.NUM_PLUS },
- { LedId.Keyboard_NumEnter, LogitechLedId.NUM_ENTER },
- { LedId.Keyboard_Num7, LogitechLedId.NUM_SEVEN },
- { LedId.Keyboard_Num8, LogitechLedId.NUM_EIGHT },
- { LedId.Keyboard_Num9, LogitechLedId.NUM_NINE },
- { LedId.Keyboard_Num4, LogitechLedId.NUM_FOUR },
- { LedId.Keyboard_Num5, LogitechLedId.NUM_FIVE },
- { LedId.Keyboard_Num6, LogitechLedId.NUM_SIX },
- { LedId.Keyboard_Num1, LogitechLedId.NUM_ONE },
- { LedId.Keyboard_Num2, LogitechLedId.NUM_TWO },
- { LedId.Keyboard_Num3, LogitechLedId.NUM_THREE },
- { LedId.Keyboard_Num0, LogitechLedId.NUM_ZERO },
- { LedId.Keyboard_NumPeriodAndDelete, LogitechLedId.NUM_PERIOD },
- { LedId.Keyboard_Programmable1, LogitechLedId.G_1 },
- { LedId.Keyboard_Programmable2, LogitechLedId.G_2 },
- { LedId.Keyboard_Programmable3, LogitechLedId.G_3 },
- { LedId.Keyboard_Programmable4, LogitechLedId.G_4 },
- { LedId.Keyboard_Programmable5, LogitechLedId.G_5 },
- { LedId.Keyboard_Programmable6, LogitechLedId.G_6 },
- { LedId.Keyboard_Programmable7, LogitechLedId.G_7 },
- { LedId.Keyboard_Programmable8, LogitechLedId.G_8 },
- { LedId.Keyboard_Programmable9, LogitechLedId.G_9 },
- { LedId.Logo, LogitechLedId.G_LOGO },
- { LedId.Keyboard_Custom1, LogitechLedId.G_BADGE },
- };
- }
-}
diff --git a/RGB.NET.Devices.Logitech/RGB.NET.Devices.Logitech.csproj b/RGB.NET.Devices.Logitech/RGB.NET.Devices.Logitech.csproj
index fb496dd..d8ff36b 100644
--- a/RGB.NET.Devices.Logitech/RGB.NET.Devices.Logitech.csproj
+++ b/RGB.NET.Devices.Logitech/RGB.NET.Devices.Logitech.csproj
@@ -52,6 +52,6 @@
-
+
\ No newline at end of file
diff --git a/RGB.NET.Devices.Logitech/Zone/LogitechZoneRGBDevice.cs b/RGB.NET.Devices.Logitech/Zone/LogitechZoneRGBDevice.cs
index 120dbf1..c4c18b3 100644
--- a/RGB.NET.Devices.Logitech/Zone/LogitechZoneRGBDevice.cs
+++ b/RGB.NET.Devices.Logitech/Zone/LogitechZoneRGBDevice.cs
@@ -9,22 +9,9 @@ namespace RGB.NET.Devices.Logitech
///
public class LogitechZoneRGBDevice : LogitechRGBDevice, IUnknownDevice //TODO DarthAffe 18.04.2020: It's know which kind of device this is, but they would need to be separated
{
- #region Constants
-
- private static readonly Dictionary BASE_LED_MAPPING = new()
- {
- { RGBDeviceType.Keyboard, LedId.Keyboard_Programmable1 },
- { RGBDeviceType.Mouse, LedId.Mouse1 },
- { RGBDeviceType.Headset, LedId.Headset1 },
- { RGBDeviceType.Mousepad, LedId.Mousepad1 },
- { RGBDeviceType.Speaker, LedId.Speaker1 }
- };
-
- #endregion
-
#region Properties & Fields
- private LedId _baseLedId;
+ private readonly LedMapping _ledMapping;
#endregion
@@ -34,11 +21,10 @@ namespace RGB.NET.Devices.Logitech
///
/// Initializes a new instance of the class.
///
- /// The specific information provided by logitech for the zone-lightable device
- internal LogitechZoneRGBDevice(LogitechRGBDeviceInfo info, IUpdateQueue updateQueue)
+ internal LogitechZoneRGBDevice(LogitechRGBDeviceInfo info, IUpdateQueue updateQueue, LedMapping ledMapping)
: base(info, updateQueue)
{
- _baseLedId = BASE_LED_MAPPING.TryGetValue(info.DeviceType, out LedId id) ? id : LedId.Custom1;
+ this._ledMapping = ledMapping;
InitializeLayout();
}
@@ -50,11 +36,11 @@ namespace RGB.NET.Devices.Logitech
private void InitializeLayout()
{
for (int i = 0; i < DeviceInfo.Zones; i++)
- AddLed(_baseLedId + i, new Point(i * 10, 0), new Size(10, 10));
+ AddLed(_ledMapping[i], new Point(i * 10, 0), new Size(10, 10));
}
///
- protected override object? GetLedCustomData(LedId ledId) => (int)(ledId - _baseLedId);
+ protected override object? GetLedCustomData(LedId ledId) => _ledMapping[ledId];
///
protected override void UpdateLeds(IEnumerable ledsToUpdate) => UpdateQueue.SetData(GetUpdateData(ledsToUpdate));
diff --git a/RGB.NET.Devices.Logitech/Zone/LogitechZoneUpdateQueue.cs b/RGB.NET.Devices.Logitech/Zone/LogitechZoneUpdateQueue.cs
index 7c34363..a52d3ac 100644
--- a/RGB.NET.Devices.Logitech/Zone/LogitechZoneUpdateQueue.cs
+++ b/RGB.NET.Devices.Logitech/Zone/LogitechZoneUpdateQueue.cs
@@ -1,5 +1,4 @@
using System;
-using System.Collections.Generic;
using RGB.NET.Core;
using RGB.NET.Devices.Logitech.Native;
@@ -10,19 +9,6 @@ namespace RGB.NET.Devices.Logitech
///
public class LogitechZoneUpdateQueue : UpdateQueue
{
- #region Constants
-
- private static readonly Dictionary DEVICE_TYPE_MAPPING = new()
- {
- { RGBDeviceType.Keyboard, LogitechDeviceType.Keyboard },
- { RGBDeviceType.Mouse, LogitechDeviceType.Mouse },
- { RGBDeviceType.Headset, LogitechDeviceType.Headset },
- { RGBDeviceType.Mousepad, LogitechDeviceType.Mousemat },
- { RGBDeviceType.Speaker, LogitechDeviceType.Speaker }
- };
-
- #endregion
-
#region Properties & Fields
private readonly LogitechDeviceType _deviceType;
@@ -36,11 +22,10 @@ namespace RGB.NET.Devices.Logitech
///
/// The update trigger used by this queue.
/// The tpye of the device this queue is updating.
- public LogitechZoneUpdateQueue(IDeviceUpdateTrigger updateTrigger, RGBDeviceType deviceType)
+ public LogitechZoneUpdateQueue(IDeviceUpdateTrigger updateTrigger, LogitechDeviceType deviceType)
: base(updateTrigger)
{
- if (!DEVICE_TYPE_MAPPING.TryGetValue(deviceType, out _deviceType))
- throw new ArgumentException($"Invalid type '{deviceType.ToString()}'", nameof(deviceType));
+ this._deviceType = deviceType;
}
#endregion
diff --git a/RGB.NET.Devices.Razer/Generic/LedMappings.cs b/RGB.NET.Devices.Razer/Generic/LedMappings.cs
new file mode 100644
index 0000000..8ea529e
--- /dev/null
+++ b/RGB.NET.Devices.Razer/Generic/LedMappings.cs
@@ -0,0 +1,10 @@
+using RGB.NET.Core;
+
+namespace RGB.NET.Devices.Razer
+{
+ public static class LedMappings
+ {
+ public static LedMapping TODO { get; } = new()
+ { };
+ }
+}
diff --git a/RGB.NET.Devices.Razer/HID/DeviceChecker.cs b/RGB.NET.Devices.Razer/HID/DeviceChecker.cs
deleted file mode 100644
index ea9aa1b..0000000
--- a/RGB.NET.Devices.Razer/HID/DeviceChecker.cs
+++ /dev/null
@@ -1,188 +0,0 @@
-using System.Collections.Generic;
-using System.Linq;
-using HidSharp;
-using RGB.NET.Core;
-using DeviceDataList =
- System.Collections.Generic.List<(string model, RGB.NET.Core.RGBDeviceType deviceType, RGB.NET.Devices.Razer.RazerEndpointType
- razerDeviceType, int id)>;
-
-namespace RGB.NET.Devices.Razer.HID
-{
- internal static class DeviceChecker
- {
- #region Constants
-
- private const int VENDOR_ID = 0x1532;
-
- private static readonly DeviceDataList DEVICES
- = new()
- {
- // Keyboards
- ("BlackWidow Ultimate 2012", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x010D),
- ("BlackWidow Classic (Alternate)", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x010E),
- ("Anansi", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x010F),
- ("BlackWidow Ultimate 2013", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x011A),
- ("BlackWidow Stealth", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x011B),
- ("DeathStalker Expert", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0202),
- ("BlackWidow Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0203),
- ("DeathStalker Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0204),
- ("Blade Stealth", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0205),
- ("BlackWidow Tournament Edition Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0209),
- ("Blade QHD", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x020F),
- ("Blade Pro (Late 2016)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0210),
- ("BlackWidow Chroma (Overwatch)", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0211),
- ("BlackWidow Ultimate 2016", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0214),
- ("BlackWidow X Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0216),
- ("BlackWidow X Ultimate", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0217),
- ("BlackWidow X Tournament Edition Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x021A),
- ("Ornata Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x021E),
- ("Ornata", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x021F),
- ("Blade Stealth (Late 2016)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0220),
- ("BlackWidow Chroma V2", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0221),
- ("Blade (Late 2016)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0224),
- ("Blade Pro (2017)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0225),
- ("Huntsman Elite", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0226),
- ("Huntsman", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0227),
- ("BlackWidow Elite", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0228),
- ("Cynosa Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x022A),
- ("Blade Stealth (Mid 2017)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x022D),
- ("Blade Pro FullHD (2017)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x022F),
- ("Blade Stealth (Late 2017)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0232),
- ("Blade 15 (2018)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0233),
- ("Blade Pro 17 (2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0234),
- ("BlackWidow Lite (2018)", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0235),
- ("BlackWidow Essential", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0237),
- ("Blade Stealth (2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0239),
- ("Blade 15 (2019) Advanced", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x023A),
- ("Blade 15 (2018) Base Model", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x023B),
- ("Cynosa Lite", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x023F),
- ("Blade 15 (2018) Mercury", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0240),
- ("BlackWidow (2019)", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0241),
- ("Huntsman Tournament Edition", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0243),
- ("Blade 15 (Mid 2019) Mercury", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0245),
- ("Blade 15 (Mid 2019) Base", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0246),
- ("Blade Stealth (Late 2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x024A),
- ("Blade Pro (Late 2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x024C),
- ("Blade 15 Studio Edition (2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x024D),
- ("Blade Stealth (Early 2020)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0252),
- ("Blade 15 Advanced (2020)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0253),
- ("Blade 15 (Early 2020) Base", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0255),
- ("Blade Stealth (Late 2020)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0259),
- ("BlackWidow V3 Pro", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x25A), // The keyboard, only present when connected with cable
- ("BlackWidow V3 Pro", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x25C), // The dongle, may not be present when connected with cable
- ("Ornata Chroma V2", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x025D),
- ("Cynosa V2", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x025E),
-
- // Mice
- ("Orochi 2011", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0013),
- ("DeathAdder 3.5G", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0016),
- ("Abyssus 1800", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0020),
- ("Mamba 2012 (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0024),
- ("Mamba 2012 (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0025),
- ("Naga 2012", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x002E),
- ("Imperator 2012", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x002F),
- ("Ouroboros 2012", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0032),
- ("Taipan", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0034),
- ("Naga Hex (Red)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0036),
- ("DeathAdder 2013", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0037),
- ("DeathAdder 1800", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0038),
- ("Orochi 2013", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0039),
- ("Naga 2014", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0040),
- ("Naga Hex", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0041),
- ("Abyssus 2014", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0042),
- ("DeathAdder Chroma", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0043),
- ("Mamba (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0044),
- ("Mamba (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0045),
- ("Mamba Tournament Edition", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0046),
- ("Orochi (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0048),
- ("Diamondback Chroma", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x004C),
- ("DeathAdder 2000", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x004F),
- ("Naga Hex V2", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0050),
- ("Naga Chroma", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0053),
- ("DeathAdder 3500", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0054),
- ("Lancehead (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0059),
- ("Lancehead (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x005A),
- ("Abyssus V2", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x005B),
- ("DeathAdder Elite", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x005C),
- ("Abyssus 2000", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x005E),
- ("Lancehead Tournament Edition", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0060),
- ("Atheris (Receiver)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0062),
- ("Basilisk", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0064),
- ("Naga Trinity", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0067),
- ("Abyssus Elite (D.Va Edition)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006A),
- ("Abyssus Essential", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006B),
- ("Mamba Elite (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006C),
- ("DeathAdder Essential", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006E),
- ("Lancehead Wireless (Receiver)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006F),
- ("Lancehead Wireless (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0070),
- ("DeathAdder Essential (White Edition)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0071),
- ("Mamba Wireless (Receiver)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0072),
- ("Mamba Wireless (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0073),
- ("Viper", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0078),
- ("Viper Ultimate (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x007A),
- ("Viper Ultimate (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x007B),
- ("DeathAdder V2 Pro (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x007C),
- ("DeathAdder V2 Pro (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x007D),
- ("Basilisk X HyperSpeed", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0083),
- ("Basilisk Ultimate", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0088),
- ("DeathAdder V2", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0084),
- ("Viper Mini", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x008A),
-
- // Mousepads
- ("Firefly Hyperflux", RGBDeviceType.Mousepad, RazerEndpointType.Mousepad, 0x0068),
- ("Firefly", RGBDeviceType.Mousepad, RazerEndpointType.Mousepad, 0x0C00),
- ("Goliathus", RGBDeviceType.Mousepad, RazerEndpointType.ChromaLink, 0x0C01),
- ("Goliathus Extended", RGBDeviceType.Mousepad, RazerEndpointType.ChromaLink, 0x0C02),
- ("Firefly v2", RGBDeviceType.Mousepad, RazerEndpointType.Mousepad, 0x0C04),
-
- // Headsets
- ("Kraken 7.1", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0501),
- ("Kraken 7.1 Chroma", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0504),
- ("Kraken 7.1", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0506),
- ("Kraken 7.1 V2", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0510),
- ("Kraken Ultimate", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0527),
- ("Kraken Kitty Edition", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0F19),
-
- // Keypads
- ("Nostromo", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0111),
- ("Orbweaver", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0113),
- ("Tartarus", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0201),
- ("Orbweaver Chroma", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0207),
- ("Tartarus Chroma", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0208),
- ("Tartarus V2", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x022B),
- ("Tartarus Pro", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0244),
-
- // Misc - guessing these are through ChromaLink
- ("Core", RGBDeviceType.GraphicsCard, RazerEndpointType.ChromaLink, 0x0215),
- ("Base Station Chroma", RGBDeviceType.HeadsetStand, RazerEndpointType.ChromaLink, 0x0F08),
- ("Nommo Chroma", RGBDeviceType.Speaker, RazerEndpointType.ChromaLink, 0x0517),
- ("Nommo Pro", RGBDeviceType.Speaker, RazerEndpointType.ChromaLink, 0x0518),
- ("Chroma Mug Holder", RGBDeviceType.Unknown, RazerEndpointType.ChromaLink, 0x0F07),
- ("Chroma Hardware Development Kit (HDK)", RGBDeviceType.Unknown, RazerEndpointType.ChromaLink, 0x0F09),
- ("Mouse Bungee V3 Chroma", RGBDeviceType.Unknown, RazerEndpointType.ChromaLink, 0x0F1D),
- ("Base Station V2 Chroma", RGBDeviceType.Unknown, RazerEndpointType.ChromaLink, 0x0F20)
- };
-
- #endregion
-
- #region Properties & Fields
-
- public static DeviceDataList ConnectedDevices { get; } = new();
-
- #endregion
-
- #region Methods
-
- internal static void LoadDeviceList(RGBDeviceType loadFilter)
- {
- ConnectedDevices.Clear();
-
- HashSet ids = new(DeviceList.Local.GetHidDevices(VENDOR_ID).Select(x => x.ProductID).Distinct());
- DeviceDataList connectedDevices = DEVICES.Where(d => ids.Contains(d.id) && loadFilter.HasFlag(d.deviceType)).ToList();
-
- ConnectedDevices.AddRange(connectedDevices);
- }
-
- #endregion
- }
-}
diff --git a/RGB.NET.Devices.Razer/RGB.NET.Devices.Razer.csproj b/RGB.NET.Devices.Razer/RGB.NET.Devices.Razer.csproj
index 6610e29..570b036 100644
--- a/RGB.NET.Devices.Razer/RGB.NET.Devices.Razer.csproj
+++ b/RGB.NET.Devices.Razer/RGB.NET.Devices.Razer.csproj
@@ -50,11 +50,8 @@
$(DefineConstants);RELEASE
-
-
-
-
+
\ No newline at end of file
diff --git a/RGB.NET.Devices.Razer/RazerDeviceProvider.cs b/RGB.NET.Devices.Razer/RazerDeviceProvider.cs
index 7cd5cf2..0d3215c 100644
--- a/RGB.NET.Devices.Razer/RazerDeviceProvider.cs
+++ b/RGB.NET.Devices.Razer/RazerDeviceProvider.cs
@@ -6,8 +6,8 @@ using System;
using System.Collections.Generic;
using System.Linq;
using RGB.NET.Core;
-using RGB.NET.Devices.Razer.HID;
using RGB.NET.Devices.Razer.Native;
+using RGB.NET.HID;
namespace RGB.NET.Devices.Razer
{
@@ -42,6 +42,156 @@ namespace RGB.NET.Devices.Razer
///
public bool LoadEmulatorDevices { get; set; } = false;
+ private const int VENDOR_ID = 0x1532;
+
+ public static HIDLoader DeviceDefinitions { get; } = new(VENDOR_ID)
+ {
+ // Keyboards
+ { 0x010D, RGBDeviceType.Keyboard, "BlackWidow Ultimate 2012", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x010E, RGBDeviceType.Keyboard, "BlackWidow Classic (Alternate)", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x010F, RGBDeviceType.Keyboard, "Anansi", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x011A, RGBDeviceType.Keyboard, "BlackWidow Ultimate 2013", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x011B, RGBDeviceType.Keyboard, "BlackWidow Stealth", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0202, RGBDeviceType.Keyboard, "DeathStalker Expert", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0203, RGBDeviceType.Keyboard, "BlackWidow Chroma", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0204, RGBDeviceType.Keyboard, "DeathStalker Chroma", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0205, RGBDeviceType.Keyboard, "Blade Stealth", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0209, RGBDeviceType.Keyboard, "BlackWidow Tournament Edition Chroma", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x020F, RGBDeviceType.Keyboard, "Blade QHD", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0210, RGBDeviceType.Keyboard, "Blade Pro (Late 2016)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0211, RGBDeviceType.Keyboard, "BlackWidow Chroma (Overwatch)", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0214, RGBDeviceType.Keyboard, "BlackWidow Ultimate 2016", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0216, RGBDeviceType.Keyboard, "BlackWidow X Chroma", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0217, RGBDeviceType.Keyboard, "BlackWidow X Ultimate", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x021A, RGBDeviceType.Keyboard, "BlackWidow X Tournament Edition Chroma", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x021E, RGBDeviceType.Keyboard, "Ornata Chroma", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x021F, RGBDeviceType.Keyboard, "Ornata", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0220, RGBDeviceType.Keyboard, "Blade Stealth (Late 2016)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0221, RGBDeviceType.Keyboard, "BlackWidow Chroma V2", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0224, RGBDeviceType.Keyboard, "Blade (Late 2016)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0225, RGBDeviceType.Keyboard, "Blade Pro (2017)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0226, RGBDeviceType.Keyboard, "Huntsman Elite", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0227, RGBDeviceType.Keyboard, "Huntsman", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0228, RGBDeviceType.Keyboard, "BlackWidow Elite", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x022A, RGBDeviceType.Keyboard, "Cynosa Chroma", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x022D, RGBDeviceType.Keyboard, "Blade Stealth (Mid 2017)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x022F, RGBDeviceType.Keyboard, "Blade Pro FullHD (2017)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0232, RGBDeviceType.Keyboard, "Blade Stealth (Late 2017)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0233, RGBDeviceType.Keyboard, "Blade 15 (2018)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0234, RGBDeviceType.Keyboard, "Blade Pro 17 (2019)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0235, RGBDeviceType.Keyboard, "BlackWidow Lite (2018)", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0237, RGBDeviceType.Keyboard, "BlackWidow Essential", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0239, RGBDeviceType.Keyboard, "Blade Stealth (2019)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x023A, RGBDeviceType.Keyboard, "Blade 15 (2019) Advanced", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x023B, RGBDeviceType.Keyboard, "Blade 15 (2018) Base Model", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x023F, RGBDeviceType.Keyboard, "Cynosa Lite", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0240, RGBDeviceType.Keyboard, "Blade 15 (2018) Mercury", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0241, RGBDeviceType.Keyboard, "BlackWidow (2019)", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0243, RGBDeviceType.Keyboard, "Huntsman Tournament Edition", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x0245, RGBDeviceType.Keyboard, "Blade 15 (Mid 2019) Mercury", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0246, RGBDeviceType.Keyboard, "Blade 15 (Mid 2019) Base", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x024A, RGBDeviceType.Keyboard, "Blade Stealth (Late 2019)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x024C, RGBDeviceType.Keyboard, "Blade Pro (Late 2019)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x024D, RGBDeviceType.Keyboard, "Blade 15 Studio Edition (2019)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0252, RGBDeviceType.Keyboard, "Blade Stealth (Early 2020)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0253, RGBDeviceType.Keyboard, "Blade 15 Advanced (2020)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0255, RGBDeviceType.Keyboard, "Blade 15 (Early 2020) Base", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x0259, RGBDeviceType.Keyboard, "Blade Stealth (Late 2020)", LedMappings.TODO, RazerEndpointType.LaptopKeyboard },
+ { 0x25A, RGBDeviceType.Keyboard, "BlackWidow V3 Pro", LedMappings.TODO, RazerEndpointType.Keyboard }, // The keyboard, only present when connected with cable
+ { 0x25C, RGBDeviceType.Keyboard, "BlackWidow V3 Pro", LedMappings.TODO, RazerEndpointType.Keyboard }, // The dongle, may not be present when connected with cable
+ { 0x025D, RGBDeviceType.Keyboard, "Ornata Chroma V2", LedMappings.TODO, RazerEndpointType.Keyboard },
+ { 0x025E, RGBDeviceType.Keyboard, "Cynosa V2", LedMappings.TODO, RazerEndpointType.Keyboard },
+
+ // Mice
+ { 0x0013, RGBDeviceType.Mouse, "Orochi 2011", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0016, RGBDeviceType.Mouse, "DeathAdder 3.5G", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0020, RGBDeviceType.Mouse, "Abyssus 1800", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0024, RGBDeviceType.Mouse, "Mamba 2012 (Wired)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0025, RGBDeviceType.Mouse, "Mamba 2012 (Wireless)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x002E, RGBDeviceType.Mouse, "Naga 2012", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x002F, RGBDeviceType.Mouse, "Imperator 2012", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0032, RGBDeviceType.Mouse, "Ouroboros 2012", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0034, RGBDeviceType.Mouse, "Taipan", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0036, RGBDeviceType.Mouse, "Naga Hex (Red)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0037, RGBDeviceType.Mouse, "DeathAdder 2013", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0038, RGBDeviceType.Mouse, "DeathAdder 1800", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0039, RGBDeviceType.Mouse, "Orochi 2013", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0040, RGBDeviceType.Mouse, "Naga 2014", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0041, RGBDeviceType.Mouse, "Naga Hex", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0042, RGBDeviceType.Mouse, "Abyssus 2014", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0043, RGBDeviceType.Mouse, "DeathAdder Chroma", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0044, RGBDeviceType.Mouse, "Mamba (Wired)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0045, RGBDeviceType.Mouse, "Mamba (Wireless)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0046, RGBDeviceType.Mouse, "Mamba Tournament Edition", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0048, RGBDeviceType.Mouse, "Orochi (Wired)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x004C, RGBDeviceType.Mouse, "Diamondback Chroma", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x004F, RGBDeviceType.Mouse, "DeathAdder 2000", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0050, RGBDeviceType.Mouse, "Naga Hex V2", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0053, RGBDeviceType.Mouse, "Naga Chroma", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0054, RGBDeviceType.Mouse, "DeathAdder 3500", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0059, RGBDeviceType.Mouse, "Lancehead (Wired)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x005A, RGBDeviceType.Mouse, "Lancehead (Wireless)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x005B, RGBDeviceType.Mouse, "Abyssus V2", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x005C, RGBDeviceType.Mouse, "DeathAdder Elite", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x005E, RGBDeviceType.Mouse, "Abyssus 2000", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0060, RGBDeviceType.Mouse, "Lancehead Tournament Edition", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0062, RGBDeviceType.Mouse, "Atheris (Receiver)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0064, RGBDeviceType.Mouse, "Basilisk", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0067, RGBDeviceType.Mouse, "Naga Trinity", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x006A, RGBDeviceType.Mouse, "Abyssus Elite (D.Va Edition)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x006B, RGBDeviceType.Mouse, "Abyssus Essential", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x006C, RGBDeviceType.Mouse, "Mamba Elite (Wired)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x006E, RGBDeviceType.Mouse, "DeathAdder Essential", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x006F, RGBDeviceType.Mouse, "Lancehead Wireless (Receiver)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0070, RGBDeviceType.Mouse, "Lancehead Wireless (Wired)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0071, RGBDeviceType.Mouse, "DeathAdder Essential (White Edition)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0072, RGBDeviceType.Mouse, "Mamba Wireless (Receiver)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0073, RGBDeviceType.Mouse, "Mamba Wireless (Wired)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0078, RGBDeviceType.Mouse, "Viper", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x007A, RGBDeviceType.Mouse, "Viper Ultimate (Wired)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x007B, RGBDeviceType.Mouse, "Viper Ultimate (Wireless)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x007C, RGBDeviceType.Mouse, "DeathAdder V2 Pro (Wired)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x007D, RGBDeviceType.Mouse, "DeathAdder V2 Pro (Wireless)", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0083, RGBDeviceType.Mouse, "Basilisk X HyperSpeed", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0088, RGBDeviceType.Mouse, "Basilisk Ultimate", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x0084, RGBDeviceType.Mouse, "DeathAdder V2", LedMappings.TODO, RazerEndpointType.Mouse },
+ { 0x008A, RGBDeviceType.Mouse, "Viper Mini", LedMappings.TODO, RazerEndpointType.Mouse },
+
+ // Mousepads
+ { 0x0068, RGBDeviceType.Mousepad, "Firefly Hyperflux", LedMappings.TODO, RazerEndpointType.Mousepad },
+ { 0x0C00, RGBDeviceType.Mousepad, "Firefly", LedMappings.TODO, RazerEndpointType.Mousepad },
+ { 0x0C01, RGBDeviceType.Mousepad, "Goliathus", LedMappings.TODO, RazerEndpointType.ChromaLink },
+ { 0x0C02, RGBDeviceType.Mousepad, "Goliathus Extended", LedMappings.TODO, RazerEndpointType.ChromaLink },
+ { 0x0C04, RGBDeviceType.Mousepad, "Firefly v2", LedMappings.TODO, RazerEndpointType.Mousepad },
+
+ // Headsets
+ { 0x0501, RGBDeviceType.Headset, "Kraken 7.1", LedMappings.TODO, RazerEndpointType.Headset },
+ { 0x0504, RGBDeviceType.Headset, "Kraken 7.1 Chroma", LedMappings.TODO, RazerEndpointType.Headset },
+ { 0x0506, RGBDeviceType.Headset, "Kraken 7.1", LedMappings.TODO, RazerEndpointType.Headset },
+ { 0x0510, RGBDeviceType.Headset, "Kraken 7.1 V2", LedMappings.TODO, RazerEndpointType.Headset },
+ { 0x0527, RGBDeviceType.Headset, "Kraken Ultimate", LedMappings.TODO, RazerEndpointType.Headset },
+ { 0x0F19, RGBDeviceType.Headset, "Kraken Kitty Edition", LedMappings.TODO, RazerEndpointType.Headset },
+
+ // Keypads
+ { 0x0111, RGBDeviceType.Keypad, "Nostromo", LedMappings.TODO, RazerEndpointType.Keypad },
+ { 0x0113, RGBDeviceType.Keypad, "Orbweaver", LedMappings.TODO, RazerEndpointType.Keypad },
+ { 0x0201, RGBDeviceType.Keypad, "Tartarus", LedMappings.TODO, RazerEndpointType.Keypad },
+ { 0x0207, RGBDeviceType.Keypad, "Orbweaver Chroma", LedMappings.TODO, RazerEndpointType.Keypad },
+ { 0x0208, RGBDeviceType.Keypad, "Tartarus Chroma", LedMappings.TODO, RazerEndpointType.Keypad },
+ { 0x022B, RGBDeviceType.Keypad, "Tartarus V2", LedMappings.TODO, RazerEndpointType.Keypad },
+ { 0x0244, RGBDeviceType.Keypad, "Tartarus Pro", LedMappings.TODO, RazerEndpointType.Keypad },
+
+ // Misc - guessing these are through ChromaLink
+ { 0x0215, RGBDeviceType.GraphicsCard, "Core", LedMappings.TODO, RazerEndpointType.ChromaLink },
+ { 0x0F08, RGBDeviceType.HeadsetStand, "Base Station Chroma", LedMappings.TODO, RazerEndpointType.ChromaLink },
+ { 0x0517, RGBDeviceType.Speaker, "Nommo Chroma", LedMappings.TODO, RazerEndpointType.ChromaLink },
+ { 0x0518, RGBDeviceType.Speaker, "Nommo Pro", LedMappings.TODO, RazerEndpointType.ChromaLink },
+ { 0x0F07, RGBDeviceType.Unknown, "Chroma Mug Holder", LedMappings.TODO, RazerEndpointType.ChromaLink },
+ { 0x0F09, RGBDeviceType.Unknown, "Chroma Hardware Development Kit (HDK)", LedMappings.TODO, RazerEndpointType.ChromaLink },
+ { 0x0F1D, RGBDeviceType.Unknown, "Mouse Bungee V3 Chroma", LedMappings.TODO, RazerEndpointType.ChromaLink },
+ { 0x0F20, RGBDeviceType.Unknown, "Base Station V2 Chroma", LedMappings.TODO, RazerEndpointType.ChromaLink }
+ };
+
#endregion
#region Constructors
@@ -73,7 +223,7 @@ namespace RGB.NET.Devices.Razer
protected override IEnumerable GetLoadedDevices(RGBDeviceType loadFilter)
{
- DeviceChecker.LoadDeviceList(loadFilter);
+ DeviceDefinitions.LoadFilter = loadFilter;
IList devices = base.GetLoadedDevices(loadFilter).ToList();
@@ -99,28 +249,22 @@ namespace RGB.NET.Devices.Razer
protected override IEnumerable LoadDevices()
{
// Only take the first device of each endpoint type, the Razer SDK doesn't allow separate control over multiple devices using the same endpoint
- foreach ((var model, RGBDeviceType deviceType, RazerEndpointType endpointType, int _) in DeviceChecker.ConnectedDevices.GroupBy(GetEndpointDeviceType).Select(t => t.First()))
+ foreach ((HIDDeviceDefinition definition, _) in DeviceDefinitions.GetConnectedDevices(x => x.CustomData == RazerEndpointType.LaptopKeyboard ? RazerEndpointType.Keyboard : x.CustomData))
{
- yield return endpointType switch
+ yield return definition.CustomData switch
{
- RazerEndpointType.Keyboard => new RazerKeyboardRGBDevice(new RazerKeyboardRGBDeviceInfo(model, endpointType), GetUpdateTrigger()),
- RazerEndpointType.LaptopKeyboard => new RazerKeyboardRGBDevice(new RazerKeyboardRGBDeviceInfo(model, endpointType), GetUpdateTrigger()),
- RazerEndpointType.Mouse => new RazerMouseRGBDevice(new RazerRGBDeviceInfo(deviceType, endpointType, model), GetUpdateTrigger()),
- RazerEndpointType.Headset => new RazerHeadsetRGBDevice(new RazerRGBDeviceInfo(deviceType, endpointType, model), GetUpdateTrigger()),
- RazerEndpointType.Mousepad => new RazerMousepadRGBDevice(new RazerRGBDeviceInfo(deviceType, endpointType, model), GetUpdateTrigger()),
- RazerEndpointType.Keypad => new RazerKeypadRGBDevice(new RazerRGBDeviceInfo(deviceType, endpointType, model), GetUpdateTrigger()),
- RazerEndpointType.ChromaLink => new RazerChromaLinkRGBDevice(new RazerRGBDeviceInfo(deviceType, endpointType, model), GetUpdateTrigger()),
- _ => throw new RGBDeviceException($"Razer SDK does not support endpoint '{endpointType}'")
+ RazerEndpointType.Keyboard => new RazerKeyboardRGBDevice(new RazerKeyboardRGBDeviceInfo(definition.Name, definition.CustomData), GetUpdateTrigger()),
+ RazerEndpointType.LaptopKeyboard => new RazerKeyboardRGBDevice(new RazerKeyboardRGBDeviceInfo(definition.Name, definition.CustomData), GetUpdateTrigger()),
+ RazerEndpointType.Mouse => new RazerMouseRGBDevice(new RazerRGBDeviceInfo(definition.DeviceType, definition.CustomData, definition.Name), GetUpdateTrigger()),
+ RazerEndpointType.Headset => new RazerHeadsetRGBDevice(new RazerRGBDeviceInfo(definition.DeviceType, definition.CustomData, definition.Name), GetUpdateTrigger()),
+ RazerEndpointType.Mousepad => new RazerMousepadRGBDevice(new RazerRGBDeviceInfo(definition.DeviceType, definition.CustomData, definition.Name), GetUpdateTrigger()),
+ RazerEndpointType.Keypad => new RazerKeypadRGBDevice(new RazerRGBDeviceInfo(definition.DeviceType, definition.CustomData, definition.Name), GetUpdateTrigger()),
+ RazerEndpointType.ChromaLink => new RazerChromaLinkRGBDevice(new RazerRGBDeviceInfo(definition.DeviceType, definition.CustomData, definition.Name), GetUpdateTrigger()),
+ _ => throw new RGBDeviceException($"Razer SDK does not support endpoint '{definition.CustomData}'")
};
}
}
- private RazerEndpointType GetEndpointDeviceType((string model, RGBDeviceType deviceType, RazerEndpointType razerDeviceType, int id) device)
- {
- // Treat laptop keyboards as regular keyboards
- return device.razerDeviceType == RazerEndpointType.LaptopKeyboard ? RazerEndpointType.Keyboard : device.razerDeviceType;
- }
-
private void ThrowRazerError(RazerError errorCode) => throw new RazerException(errorCode);
private void TryUnInit()
diff --git a/RGB.NET.Devices.SteelSeries/HID/DeviceChecker.cs b/RGB.NET.Devices.SteelSeries/Generic/LedMappings.cs
similarity index 76%
rename from RGB.NET.Devices.SteelSeries/HID/DeviceChecker.cs
rename to RGB.NET.Devices.SteelSeries/Generic/LedMappings.cs
index 2741391..ec8d699 100644
--- a/RGB.NET.Devices.SteelSeries/HID/DeviceChecker.cs
+++ b/RGB.NET.Devices.SteelSeries/Generic/LedMappings.cs
@@ -1,446 +1,369 @@
-using System.Collections.Generic;
-using System.Linq;
-using HidSharp;
-using RGB.NET.Core;
-using DeviceDataList = System.Collections.Generic.List<(string model, RGB.NET.Core.RGBDeviceType deviceType, int id, RGB.NET.Devices.SteelSeries.SteelSeriesDeviceType steelSeriesDeviceType, System.Collections.Generic.Dictionary ledMapping)>;
-using LedMapping = System.Collections.Generic.Dictionary;
-
-namespace RGB.NET.Devices.SteelSeries.HID
-{
- internal static class DeviceChecker
- {
- #region Constants
-
- private static readonly LedMapping KEYBOARD_MAPPING_UK = new()
- {
- { LedId.Logo, SteelSeriesLedId.Logo },
- { LedId.Keyboard_Escape, SteelSeriesLedId.Escape },
- { LedId.Keyboard_F1, SteelSeriesLedId.F1 },
- { LedId.Keyboard_F2, SteelSeriesLedId.F2 },
- { LedId.Keyboard_F3, SteelSeriesLedId.F3 },
- { LedId.Keyboard_F4, SteelSeriesLedId.F4 },
- { LedId.Keyboard_F5, SteelSeriesLedId.F5 },
- { LedId.Keyboard_F6, SteelSeriesLedId.F6 },
- { LedId.Keyboard_F7, SteelSeriesLedId.F7 },
- { LedId.Keyboard_F8, SteelSeriesLedId.F8 },
- { LedId.Keyboard_F9, SteelSeriesLedId.F9 },
- { LedId.Keyboard_F10, SteelSeriesLedId.F10 },
- { LedId.Keyboard_F11, SteelSeriesLedId.F11 },
- { LedId.Keyboard_GraveAccentAndTilde, SteelSeriesLedId.Backqoute },
- { LedId.Keyboard_1, SteelSeriesLedId.Keyboard1 },
- { LedId.Keyboard_2, SteelSeriesLedId.Keyboard2 },
- { LedId.Keyboard_3, SteelSeriesLedId.Keyboard3 },
- { LedId.Keyboard_4, SteelSeriesLedId.Keyboard4 },
- { LedId.Keyboard_5, SteelSeriesLedId.Keyboard5 },
- { LedId.Keyboard_6, SteelSeriesLedId.Keyboard6 },
- { LedId.Keyboard_7, SteelSeriesLedId.Keyboard7 },
- { LedId.Keyboard_8, SteelSeriesLedId.Keyboard8 },
- { LedId.Keyboard_9, SteelSeriesLedId.Keyboard9 },
- { LedId.Keyboard_0, SteelSeriesLedId.Keyboard0 },
- { LedId.Keyboard_MinusAndUnderscore, SteelSeriesLedId.Dash },
- { LedId.Keyboard_Tab, SteelSeriesLedId.Tab },
- { LedId.Keyboard_Q, SteelSeriesLedId.Q },
- { LedId.Keyboard_W, SteelSeriesLedId.W },
- { LedId.Keyboard_E, SteelSeriesLedId.E },
- { LedId.Keyboard_R, SteelSeriesLedId.R },
- { LedId.Keyboard_T, SteelSeriesLedId.T },
- { LedId.Keyboard_Y, SteelSeriesLedId.Y },
- { LedId.Keyboard_U, SteelSeriesLedId.U },
- { LedId.Keyboard_I, SteelSeriesLedId.I },
- { LedId.Keyboard_O, SteelSeriesLedId.O },
- { LedId.Keyboard_P, SteelSeriesLedId.P },
- { LedId.Keyboard_BracketLeft, SteelSeriesLedId.LBracket },
- { LedId.Keyboard_CapsLock, SteelSeriesLedId.Caps },
- { LedId.Keyboard_A, SteelSeriesLedId.A },
- { LedId.Keyboard_S, SteelSeriesLedId.S },
- { LedId.Keyboard_D, SteelSeriesLedId.D },
- { LedId.Keyboard_F, SteelSeriesLedId.F },
- { LedId.Keyboard_G, SteelSeriesLedId.G },
- { LedId.Keyboard_H, SteelSeriesLedId.H },
- { LedId.Keyboard_J, SteelSeriesLedId.J },
- { LedId.Keyboard_K, SteelSeriesLedId.K },
- { LedId.Keyboard_L, SteelSeriesLedId.L },
- { LedId.Keyboard_SemicolonAndColon, SteelSeriesLedId.Semicolon },
- { LedId.Keyboard_ApostropheAndDoubleQuote, SteelSeriesLedId.Quote },
- { LedId.Keyboard_LeftShift, SteelSeriesLedId.LShift },
- { LedId.Keyboard_NonUsTilde, SteelSeriesLedId.Pound },
- { LedId.Keyboard_Z, SteelSeriesLedId.Z },
- { LedId.Keyboard_X, SteelSeriesLedId.X },
- { LedId.Keyboard_C, SteelSeriesLedId.C },
- { LedId.Keyboard_V, SteelSeriesLedId.V },
- { LedId.Keyboard_B, SteelSeriesLedId.B },
- { LedId.Keyboard_N, SteelSeriesLedId.N },
- { LedId.Keyboard_M, SteelSeriesLedId.M },
- { LedId.Keyboard_CommaAndLessThan, SteelSeriesLedId.Comma },
- { LedId.Keyboard_PeriodAndBiggerThan, SteelSeriesLedId.Period },
- { LedId.Keyboard_SlashAndQuestionMark, SteelSeriesLedId.Slash },
- { LedId.Keyboard_LeftCtrl, SteelSeriesLedId.LCtrl },
- { LedId.Keyboard_LeftGui, SteelSeriesLedId.LWin },
- { LedId.Keyboard_LeftAlt, SteelSeriesLedId.LAlt },
- { LedId.Keyboard_Space, SteelSeriesLedId.Spacebar },
- { LedId.Keyboard_RightAlt, SteelSeriesLedId.RAlt },
- { LedId.Keyboard_RightGui, SteelSeriesLedId.RWin },
- { LedId.Keyboard_Application, SteelSeriesLedId.SSKey },
- { LedId.Keyboard_F12, SteelSeriesLedId.F12 },
- { LedId.Keyboard_PrintScreen, SteelSeriesLedId.PrintScreen },
- { LedId.Keyboard_ScrollLock, SteelSeriesLedId.ScrollLock },
- { LedId.Keyboard_PauseBreak, SteelSeriesLedId.Pause },
- { LedId.Keyboard_Insert, SteelSeriesLedId.Insert },
- { LedId.Keyboard_Home, SteelSeriesLedId.Home },
- { LedId.Keyboard_PageUp, SteelSeriesLedId.PageUp },
- { LedId.Keyboard_BracketRight, SteelSeriesLedId.RBracket },
- { LedId.Keyboard_Backslash, SteelSeriesLedId.Backslash },
- { LedId.Keyboard_Enter, SteelSeriesLedId.Return },
- { LedId.Keyboard_EqualsAndPlus, SteelSeriesLedId.Equal },
- { LedId.Keyboard_Backspace, SteelSeriesLedId.Backspace },
- { LedId.Keyboard_Delete, SteelSeriesLedId.Delete },
- { LedId.Keyboard_End, SteelSeriesLedId.End },
- { LedId.Keyboard_PageDown, SteelSeriesLedId.PageDown },
- { LedId.Keyboard_RightShift, SteelSeriesLedId.RShift },
- { LedId.Keyboard_RightCtrl, SteelSeriesLedId.RCtrl },
- { LedId.Keyboard_ArrowUp, SteelSeriesLedId.UpArrow },
- { LedId.Keyboard_ArrowLeft, SteelSeriesLedId.LeftArrow },
- { LedId.Keyboard_ArrowDown, SteelSeriesLedId.DownArrow },
- { LedId.Keyboard_ArrowRight, SteelSeriesLedId.RightArrow },
- { LedId.Keyboard_NumLock, SteelSeriesLedId.KeypadNumLock },
- { LedId.Keyboard_NumSlash, SteelSeriesLedId.KeypadDivide },
- { LedId.Keyboard_NumAsterisk, SteelSeriesLedId.KeypadTimes },
- { LedId.Keyboard_NumMinus, SteelSeriesLedId.KeypadMinus },
- { LedId.Keyboard_NumPlus, SteelSeriesLedId.KeypadPlus },
- { LedId.Keyboard_NumEnter, SteelSeriesLedId.KeypadEnter },
- { LedId.Keyboard_Num7, SteelSeriesLedId.Keypad7 },
- { LedId.Keyboard_Num8, SteelSeriesLedId.Keypad8 },
- { LedId.Keyboard_Num9, SteelSeriesLedId.Keypad9 },
- { LedId.Keyboard_Num4, SteelSeriesLedId.Keypad4 },
- { LedId.Keyboard_Num5, SteelSeriesLedId.Keypad5 },
- { LedId.Keyboard_Num6, SteelSeriesLedId.Keypad6 },
- { LedId.Keyboard_Num1, SteelSeriesLedId.Keypad1 },
- { LedId.Keyboard_Num2, SteelSeriesLedId.Keypad2 },
- { LedId.Keyboard_Num3, SteelSeriesLedId.Keypad3 },
- { LedId.Keyboard_Num0, SteelSeriesLedId.Keypad0 },
- { LedId.Keyboard_NumPeriodAndDelete, SteelSeriesLedId.KeypadPeriod }
- };
-
- private static readonly LedMapping KEYBOARD_TKL_MAPPING_UK = new()
- {
- { LedId.Logo, SteelSeriesLedId.Logo },
- { LedId.Keyboard_Escape, SteelSeriesLedId.Escape },
- { LedId.Keyboard_F1, SteelSeriesLedId.F1 },
- { LedId.Keyboard_F2, SteelSeriesLedId.F2 },
- { LedId.Keyboard_F3, SteelSeriesLedId.F3 },
- { LedId.Keyboard_F4, SteelSeriesLedId.F4 },
- { LedId.Keyboard_F5, SteelSeriesLedId.F5 },
- { LedId.Keyboard_F6, SteelSeriesLedId.F6 },
- { LedId.Keyboard_F7, SteelSeriesLedId.F7 },
- { LedId.Keyboard_F8, SteelSeriesLedId.F8 },
- { LedId.Keyboard_F9, SteelSeriesLedId.F9 },
- { LedId.Keyboard_F10, SteelSeriesLedId.F10 },
- { LedId.Keyboard_F11, SteelSeriesLedId.F11 },
- { LedId.Keyboard_GraveAccentAndTilde, SteelSeriesLedId.Backqoute },
- { LedId.Keyboard_1, SteelSeriesLedId.Keyboard1 },
- { LedId.Keyboard_2, SteelSeriesLedId.Keyboard2 },
- { LedId.Keyboard_3, SteelSeriesLedId.Keyboard3 },
- { LedId.Keyboard_4, SteelSeriesLedId.Keyboard4 },
- { LedId.Keyboard_5, SteelSeriesLedId.Keyboard5 },
- { LedId.Keyboard_6, SteelSeriesLedId.Keyboard6 },
- { LedId.Keyboard_7, SteelSeriesLedId.Keyboard7 },
- { LedId.Keyboard_8, SteelSeriesLedId.Keyboard8 },
- { LedId.Keyboard_9, SteelSeriesLedId.Keyboard9 },
- { LedId.Keyboard_0, SteelSeriesLedId.Keyboard0 },
- { LedId.Keyboard_MinusAndUnderscore, SteelSeriesLedId.Dash },
- { LedId.Keyboard_Tab, SteelSeriesLedId.Tab },
- { LedId.Keyboard_Q, SteelSeriesLedId.Q },
- { LedId.Keyboard_W, SteelSeriesLedId.W },
- { LedId.Keyboard_E, SteelSeriesLedId.E },
- { LedId.Keyboard_R, SteelSeriesLedId.R },
- { LedId.Keyboard_T, SteelSeriesLedId.T },
- { LedId.Keyboard_Y, SteelSeriesLedId.Y },
- { LedId.Keyboard_U, SteelSeriesLedId.U },
- { LedId.Keyboard_I, SteelSeriesLedId.I },
- { LedId.Keyboard_O, SteelSeriesLedId.O },
- { LedId.Keyboard_P, SteelSeriesLedId.P },
- { LedId.Keyboard_BracketLeft, SteelSeriesLedId.LBracket },
- { LedId.Keyboard_CapsLock, SteelSeriesLedId.Caps },
- { LedId.Keyboard_A, SteelSeriesLedId.A },
- { LedId.Keyboard_S, SteelSeriesLedId.S },
- { LedId.Keyboard_D, SteelSeriesLedId.D },
- { LedId.Keyboard_F, SteelSeriesLedId.F },
- { LedId.Keyboard_G, SteelSeriesLedId.G },
- { LedId.Keyboard_H, SteelSeriesLedId.H },
- { LedId.Keyboard_J, SteelSeriesLedId.J },
- { LedId.Keyboard_K, SteelSeriesLedId.K },
- { LedId.Keyboard_L, SteelSeriesLedId.L },
- { LedId.Keyboard_SemicolonAndColon, SteelSeriesLedId.Semicolon },
- { LedId.Keyboard_ApostropheAndDoubleQuote, SteelSeriesLedId.Quote },
- { LedId.Keyboard_LeftShift, SteelSeriesLedId.LShift },
- { LedId.Keyboard_NonUsTilde, SteelSeriesLedId.Pound },
- { LedId.Keyboard_Z, SteelSeriesLedId.Z },
- { LedId.Keyboard_X, SteelSeriesLedId.X },
- { LedId.Keyboard_C, SteelSeriesLedId.C },
- { LedId.Keyboard_V, SteelSeriesLedId.V },
- { LedId.Keyboard_B, SteelSeriesLedId.B },
- { LedId.Keyboard_N, SteelSeriesLedId.N },
- { LedId.Keyboard_M, SteelSeriesLedId.M },
- { LedId.Keyboard_CommaAndLessThan, SteelSeriesLedId.Comma },
- { LedId.Keyboard_PeriodAndBiggerThan, SteelSeriesLedId.Period },
- { LedId.Keyboard_SlashAndQuestionMark, SteelSeriesLedId.Slash },
- { LedId.Keyboard_LeftCtrl, SteelSeriesLedId.LCtrl },
- { LedId.Keyboard_LeftGui, SteelSeriesLedId.LWin },
- { LedId.Keyboard_LeftAlt, SteelSeriesLedId.LAlt },
- { LedId.Keyboard_Space, SteelSeriesLedId.Spacebar },
- { LedId.Keyboard_RightAlt, SteelSeriesLedId.RAlt },
- { LedId.Keyboard_RightGui, SteelSeriesLedId.RWin },
- { LedId.Keyboard_Application, SteelSeriesLedId.SSKey },
- { LedId.Keyboard_F12, SteelSeriesLedId.F12 },
- { LedId.Keyboard_PrintScreen, SteelSeriesLedId.PrintScreen },
- { LedId.Keyboard_ScrollLock, SteelSeriesLedId.ScrollLock },
- { LedId.Keyboard_PauseBreak, SteelSeriesLedId.Pause },
- { LedId.Keyboard_Insert, SteelSeriesLedId.Insert },
- { LedId.Keyboard_Home, SteelSeriesLedId.Home },
- { LedId.Keyboard_PageUp, SteelSeriesLedId.PageUp },
- { LedId.Keyboard_BracketRight, SteelSeriesLedId.RBracket },
- { LedId.Keyboard_Backslash, SteelSeriesLedId.Backslash },
- { LedId.Keyboard_Enter, SteelSeriesLedId.Return },
- { LedId.Keyboard_EqualsAndPlus, SteelSeriesLedId.Equal },
- { LedId.Keyboard_Backspace, SteelSeriesLedId.Backspace },
- { LedId.Keyboard_Delete, SteelSeriesLedId.Delete },
- { LedId.Keyboard_End, SteelSeriesLedId.End },
- { LedId.Keyboard_PageDown, SteelSeriesLedId.PageDown },
- { LedId.Keyboard_RightShift, SteelSeriesLedId.RShift },
- { LedId.Keyboard_RightCtrl, SteelSeriesLedId.RCtrl },
- { LedId.Keyboard_ArrowUp, SteelSeriesLedId.UpArrow },
- { LedId.Keyboard_ArrowLeft, SteelSeriesLedId.LeftArrow },
- { LedId.Keyboard_ArrowDown, SteelSeriesLedId.DownArrow },
- { LedId.Keyboard_ArrowRight, SteelSeriesLedId.RightArrow }
- };
-
- private static readonly LedMapping MOUSE_ONE_ZONE = new()
- {
- { LedId.Mouse1, SteelSeriesLedId.ZoneOne }
- };
-
- private static readonly LedMapping MOUSE_TWO_ZONE = new()
- {
- { LedId.Mouse1, SteelSeriesLedId.ZoneOne },
- { LedId.Mouse2, SteelSeriesLedId.ZoneTwo }
- };
-
- private static readonly LedMapping MOUSE_THREE_ZONE = new()
- {
- { LedId.Mouse1, SteelSeriesLedId.ZoneOne },
- { LedId.Mouse2, SteelSeriesLedId.ZoneTwo },
- { LedId.Mouse3, SteelSeriesLedId.ZoneThree }
- };
-
- private static readonly LedMapping MOUSE_EIGHT_ZONE = new()
- {
- { LedId.Mouse1, SteelSeriesLedId.ZoneOne },
- { LedId.Mouse2, SteelSeriesLedId.ZoneTwo },
- { LedId.Mouse3, SteelSeriesLedId.ZoneThree },
- { LedId.Mouse4, SteelSeriesLedId.ZoneFour },
- { LedId.Mouse5, SteelSeriesLedId.ZoneFive },
- { LedId.Mouse6, SteelSeriesLedId.ZoneSix },
- { LedId.Mouse7, SteelSeriesLedId.ZoneSeven },
- { LedId.Mouse8, SteelSeriesLedId.ZoneEight }
- };
-
- private static readonly LedMapping HEADSET_TWO_ZONE = new()
- {
- { LedId.Headset1, SteelSeriesLedId.ZoneOne },
- { LedId.Headset2, SteelSeriesLedId.ZoneTwo }
- };
-
- private static readonly LedMapping MOUSEPAD_TWELVE_ZONE = new()
- {
- { LedId.Mousepad1, SteelSeriesLedId.ZoneOne },
- { LedId.Mousepad2, SteelSeriesLedId.ZoneTwo },
- { LedId.Mousepad3, SteelSeriesLedId.ZoneThree },
- { LedId.Mousepad4, SteelSeriesLedId.ZoneFour },
- { LedId.Mousepad5, SteelSeriesLedId.ZoneFive },
- { LedId.Mousepad6, SteelSeriesLedId.ZoneSix },
- { LedId.Mousepad7, SteelSeriesLedId.ZoneSeven },
- { LedId.Mousepad8, SteelSeriesLedId.ZoneEight },
- { LedId.Mousepad9, SteelSeriesLedId.ZoneNine },
- { LedId.Mousepad10, SteelSeriesLedId.ZoneTen },
- { LedId.Mousepad11, SteelSeriesLedId.ZoneEleven },
- { LedId.Mousepad12, SteelSeriesLedId.ZoneTwelve },
- };
-
- private static readonly LedMapping MONITOR_ONEHUNDREDANDTHREE_ZONE = new()
- {
- { LedId.LedStripe1, SteelSeriesLedId.ZoneOne },
- { LedId.LedStripe2, SteelSeriesLedId.ZoneTwo },
- { LedId.LedStripe3, SteelSeriesLedId.ZoneThree },
- { LedId.LedStripe4, SteelSeriesLedId.ZoneFour },
- { LedId.LedStripe5, SteelSeriesLedId.ZoneFive },
- { LedId.LedStripe6, SteelSeriesLedId.ZoneSix },
- { LedId.LedStripe7, SteelSeriesLedId.ZoneSeven },
- { LedId.LedStripe8, SteelSeriesLedId.ZoneEight },
- { LedId.LedStripe9, SteelSeriesLedId.ZoneNine },
- { LedId.LedStripe10, SteelSeriesLedId.ZoneTen },
- { LedId.LedStripe11, SteelSeriesLedId.ZoneEleven },
- { LedId.LedStripe12, SteelSeriesLedId.ZoneTwelve },
- { LedId.LedStripe13, SteelSeriesLedId.ZoneThirteen },
- { LedId.LedStripe14, SteelSeriesLedId.ZoneFourteen },
- { LedId.LedStripe15, SteelSeriesLedId.ZoneFifteen },
- { LedId.LedStripe16, SteelSeriesLedId.ZoneSixteen },
- { LedId.LedStripe17, SteelSeriesLedId.ZoneSeventeen },
- { LedId.LedStripe18, SteelSeriesLedId.ZoneEighteen },
- { LedId.LedStripe19, SteelSeriesLedId.ZoneNineteen },
- { LedId.LedStripe20, SteelSeriesLedId.ZoneTwenty },
- { LedId.LedStripe21, SteelSeriesLedId.ZoneTwentyOne },
- { LedId.LedStripe22, SteelSeriesLedId.ZoneTwentyTwo },
- { LedId.LedStripe23, SteelSeriesLedId.ZoneTwentyThree },
- { LedId.LedStripe24, SteelSeriesLedId.ZoneTwentyFour },
- { LedId.LedStripe25, SteelSeriesLedId.ZoneTwentyFive },
- { LedId.LedStripe26, SteelSeriesLedId.ZoneTwentySix },
- { LedId.LedStripe27, SteelSeriesLedId.ZoneTwentySeven },
- { LedId.LedStripe28, SteelSeriesLedId.ZoneTwentyEight },
- { LedId.LedStripe29, SteelSeriesLedId.ZoneTwentyNine },
- { LedId.LedStripe30, SteelSeriesLedId.ZoneThirty },
- { LedId.LedStripe31, SteelSeriesLedId.ZoneThirtyOne },
- { LedId.LedStripe32, SteelSeriesLedId.ZoneThirtyTwo },
- { LedId.LedStripe33, SteelSeriesLedId.ZoneThirtyThree },
- { LedId.LedStripe34, SteelSeriesLedId.ZoneThirtyFour },
- { LedId.LedStripe35, SteelSeriesLedId.ZoneThirtyFive },
- { LedId.LedStripe36, SteelSeriesLedId.ZoneThirtySix },
- { LedId.LedStripe37, SteelSeriesLedId.ZoneThirtySeven },
- { LedId.LedStripe38, SteelSeriesLedId.ZoneThirtyEight },
- { LedId.LedStripe39, SteelSeriesLedId.ZoneThirtyNine },
- { LedId.LedStripe40, SteelSeriesLedId.ZoneForty },
- { LedId.LedStripe41, SteelSeriesLedId.ZoneFortyOne },
- { LedId.LedStripe42, SteelSeriesLedId.ZoneFortyTwo },
- { LedId.LedStripe43, SteelSeriesLedId.ZoneFortyThree },
- { LedId.LedStripe44, SteelSeriesLedId.ZoneFortyFour },
- { LedId.LedStripe45, SteelSeriesLedId.ZoneFortyFive },
- { LedId.LedStripe46, SteelSeriesLedId.ZoneFortySix },
- { LedId.LedStripe47, SteelSeriesLedId.ZoneFortySeven },
- { LedId.LedStripe48, SteelSeriesLedId.ZoneFortyEight },
- { LedId.LedStripe49, SteelSeriesLedId.ZoneFortyNine },
- { LedId.LedStripe50, SteelSeriesLedId.ZoneFifty },
- { LedId.LedStripe51, SteelSeriesLedId.ZoneFiftyOne },
- { LedId.LedStripe52, SteelSeriesLedId.ZoneFiftyTwo },
- { LedId.LedStripe53, SteelSeriesLedId.ZoneFiftyThree },
- { LedId.LedStripe54, SteelSeriesLedId.ZoneFiftyFour },
- { LedId.LedStripe55, SteelSeriesLedId.ZoneFiftyFive },
- { LedId.LedStripe56, SteelSeriesLedId.ZoneFiftySix },
- { LedId.LedStripe57, SteelSeriesLedId.ZoneFiftySeven },
- { LedId.LedStripe58, SteelSeriesLedId.ZoneFiftyEight },
- { LedId.LedStripe59, SteelSeriesLedId.ZoneFiftyNine },
- { LedId.LedStripe60, SteelSeriesLedId.ZoneSixty },
- { LedId.LedStripe61, SteelSeriesLedId.ZoneSixtyOne },
- { LedId.LedStripe62, SteelSeriesLedId.ZoneSixtyTwo },
- { LedId.LedStripe63, SteelSeriesLedId.ZoneSixtyThree },
- { LedId.LedStripe64, SteelSeriesLedId.ZoneSixtyFour },
- { LedId.LedStripe65, SteelSeriesLedId.ZoneSixtyFive },
- { LedId.LedStripe66, SteelSeriesLedId.ZoneSixtySix },
- { LedId.LedStripe67, SteelSeriesLedId.ZoneSixtySeven },
- { LedId.LedStripe68, SteelSeriesLedId.ZoneSixtyEight },
- { LedId.LedStripe69, SteelSeriesLedId.ZoneSixtyNine },
- { LedId.LedStripe70, SteelSeriesLedId.ZoneSeventy },
- { LedId.LedStripe71, SteelSeriesLedId.ZoneSeventyOne },
- { LedId.LedStripe72, SteelSeriesLedId.ZoneSeventyTwo },
- { LedId.LedStripe73, SteelSeriesLedId.ZoneSeventyThree },
- { LedId.LedStripe74, SteelSeriesLedId.ZoneSeventyFour },
- { LedId.LedStripe75, SteelSeriesLedId.ZoneSeventyFive },
- { LedId.LedStripe76, SteelSeriesLedId.ZoneSeventySix },
- { LedId.LedStripe77, SteelSeriesLedId.ZoneSeventySeven },
- { LedId.LedStripe78, SteelSeriesLedId.ZoneSeventyEight },
- { LedId.LedStripe79, SteelSeriesLedId.ZoneSeventyNine },
- { LedId.LedStripe80, SteelSeriesLedId.ZoneEighty },
- { LedId.LedStripe81, SteelSeriesLedId.ZoneEightyOne },
- { LedId.LedStripe82, SteelSeriesLedId.ZoneEightyTwo },
- { LedId.LedStripe83, SteelSeriesLedId.ZoneEightyThree },
- { LedId.LedStripe84, SteelSeriesLedId.ZoneEightyFour },
- { LedId.LedStripe85, SteelSeriesLedId.ZoneEightyFive },
- { LedId.LedStripe86, SteelSeriesLedId.ZoneEightySix },
- { LedId.LedStripe87, SteelSeriesLedId.ZoneEightySeven },
- { LedId.LedStripe88, SteelSeriesLedId.ZoneEightyEight },
- { LedId.LedStripe89, SteelSeriesLedId.ZoneEightyNine },
- { LedId.LedStripe90, SteelSeriesLedId.ZoneNinety },
- { LedId.LedStripe91, SteelSeriesLedId.ZoneNinetyOne },
- { LedId.LedStripe92, SteelSeriesLedId.ZoneNinetyTwo },
- { LedId.LedStripe93, SteelSeriesLedId.ZoneNinetyThree },
- { LedId.LedStripe94, SteelSeriesLedId.ZoneNinetyFour },
- { LedId.LedStripe95, SteelSeriesLedId.ZoneNinetyFive },
- { LedId.LedStripe96, SteelSeriesLedId.ZoneNinetySix },
- { LedId.LedStripe97, SteelSeriesLedId.ZoneNinetySeven },
- { LedId.LedStripe98, SteelSeriesLedId.ZoneNinetyEight },
- { LedId.LedStripe99, SteelSeriesLedId.ZoneNinetyNine },
- { LedId.LedStripe100, SteelSeriesLedId.ZoneOneHundred },
- { LedId.LedStripe101, SteelSeriesLedId.ZoneOneHundredOne },
- { LedId.LedStripe102, SteelSeriesLedId.ZoneOneHundredTwo },
- { LedId.LedStripe103, SteelSeriesLedId.ZoneOneHundredThree }
- };
-
- private const int VENDOR_ID = 0x1038;
-
- //TODO DarthAffe 16.02.2019: Add devices
- private static readonly DeviceDataList DEVICES = new()
- {
- //Mice
- ("Aerox 3", RGBDeviceType.Mouse, 0x1836, SteelSeriesDeviceType.ThreeZone, MOUSE_THREE_ZONE),
- ("Aerox 3 Wireless", RGBDeviceType.Mouse, 0x183A, SteelSeriesDeviceType.ThreeZone, MOUSE_THREE_ZONE),
- ("Rival 100", RGBDeviceType.Mouse, 0x1702, SteelSeriesDeviceType.OneZone, MOUSE_ONE_ZONE),
- ("Rival 105", RGBDeviceType.Mouse, 0x1814, SteelSeriesDeviceType.OneZone, MOUSE_ONE_ZONE),
- ("Rival 106", RGBDeviceType.Mouse, 0x1816, SteelSeriesDeviceType.OneZone, MOUSE_ONE_ZONE),
- ("Rival 110", RGBDeviceType.Mouse, 0x1729, SteelSeriesDeviceType.OneZone, MOUSE_ONE_ZONE),
- ("Rival 150", RGBDeviceType.Mouse, 0x0472, SteelSeriesDeviceType.OneZone, MOUSE_ONE_ZONE),
- ("Rival 300", RGBDeviceType.Mouse, 0x1710, SteelSeriesDeviceType.TwoZone, MOUSE_TWO_ZONE),
- ("Rival 310", RGBDeviceType.Mouse, 0x1720, SteelSeriesDeviceType.TwoZone, MOUSE_TWO_ZONE),
- ("Rival 500", RGBDeviceType.Mouse, 0x170E, SteelSeriesDeviceType.TwoZone, MOUSE_TWO_ZONE),
- ("Rival 600", RGBDeviceType.Mouse, 0x1724, SteelSeriesDeviceType.EightZone, MOUSE_EIGHT_ZONE),
- ("Rival 700", RGBDeviceType.Mouse, 0x1700, SteelSeriesDeviceType.TwoZone, MOUSE_TWO_ZONE),
- ("Rival 3 (Old Firmware)", RGBDeviceType.Mouse, 0x1824, SteelSeriesDeviceType.ThreeZone, MOUSE_THREE_ZONE),
- ("Rival 3", RGBDeviceType.Mouse, 0x184C, SteelSeriesDeviceType.ThreeZone, MOUSE_THREE_ZONE),
- ("Rival 3 Wireless", RGBDeviceType.Mouse, 0x1830, SteelSeriesDeviceType.ThreeZone, MOUSE_THREE_ZONE),
- ("Sensei Ten", RGBDeviceType.Mouse, 0x1832, SteelSeriesDeviceType.TwoZone, MOUSE_TWO_ZONE),
-
- //Keyboards
- ("Apex 5", RGBDeviceType.Keyboard, 0x161C, SteelSeriesDeviceType.PerKey, KEYBOARD_MAPPING_UK),
- ("Apex 7", RGBDeviceType.Keyboard, 0x1612, SteelSeriesDeviceType.PerKey, KEYBOARD_MAPPING_UK),
- ("Apex 7 TKL", RGBDeviceType.Keyboard, 0x1618, SteelSeriesDeviceType.PerKey, KEYBOARD_TKL_MAPPING_UK),
- ("Apex M750", RGBDeviceType.Keyboard, 0x0616, SteelSeriesDeviceType.PerKey, KEYBOARD_MAPPING_UK),
- ("Apex M800", RGBDeviceType.Keyboard, 0x1600, SteelSeriesDeviceType.PerKey, KEYBOARD_MAPPING_UK),
- ("Apex Pro", RGBDeviceType.Keyboard, 0x1610, SteelSeriesDeviceType.PerKey, KEYBOARD_MAPPING_UK),
- ("Apex Pro TKL", RGBDeviceType.Keyboard, 0x1614, SteelSeriesDeviceType.PerKey, KEYBOARD_TKL_MAPPING_UK),
-
- //Headsets
- ("Arctis 5", RGBDeviceType.Headset, 0x12AA, SteelSeriesDeviceType.TwoZone, HEADSET_TWO_ZONE),
- ("Arctis 5 Game", RGBDeviceType.Headset, 0x1250, SteelSeriesDeviceType.TwoZone, HEADSET_TWO_ZONE),
- ("Arctis 5 Game - Dota 2 edition", RGBDeviceType.Headset, 0x1251, SteelSeriesDeviceType.TwoZone, HEADSET_TWO_ZONE),
- ("Arctis 5 Game - PUBG edition", RGBDeviceType.Headset, 0x12A8, SteelSeriesDeviceType.TwoZone, HEADSET_TWO_ZONE),
- ("Arctis Pro Game", RGBDeviceType.Headset, 0x1252, SteelSeriesDeviceType.TwoZone, HEADSET_TWO_ZONE),
-
- //Mousepads
- ("QCK Prism", RGBDeviceType.Mousepad, 0x1507, SteelSeriesDeviceType.TwelveZone, MOUSEPAD_TWELVE_ZONE),
-
- //Monitors
- ("MGP27C", RGBDeviceType.Monitor, 0x1126, SteelSeriesDeviceType.OneHundredAndThreeZone, MONITOR_ONEHUNDREDANDTHREE_ZONE),
- };
-
- #endregion
-
- #region Properties & Fields
-
- public static DeviceDataList ConnectedDevices { get; } = new();
-
- #endregion
-
- #region Methods
-
- internal static void LoadDeviceList(RGBDeviceType loadFilter)
- {
- ConnectedDevices.Clear();
-
- HashSet ids = new(DeviceList.Local.GetHidDevices(VENDOR_ID).Select(x => x.ProductID).Distinct());
- DeviceDataList connectedDevices = DEVICES.Where(d => ids.Contains(d.id) && loadFilter.HasFlag(d.deviceType)).ToList();
-
- List connectedDeviceTypes = connectedDevices.Select(d => d.steelSeriesDeviceType).ToList();
- foreach (SteelSeriesDeviceType deviceType in connectedDeviceTypes)
- ConnectedDevices.Add(connectedDevices.Where(d => d.steelSeriesDeviceType == deviceType).OrderByDescending(d => d.ledMapping.Count).First());
- }
-
- #endregion
- }
-}
+using RGB.NET.Core;
+
+namespace RGB.NET.Devices.SteelSeries
+{
+ public static class LedMappings
+ {
+ public static LedMapping KeyboardMappingUk { get; } = new()
+ {
+ { LedId.Logo, SteelSeriesLedId.Logo },
+ { LedId.Keyboard_Escape, SteelSeriesLedId.Escape },
+ { LedId.Keyboard_F1, SteelSeriesLedId.F1 },
+ { LedId.Keyboard_F2, SteelSeriesLedId.F2 },
+ { LedId.Keyboard_F3, SteelSeriesLedId.F3 },
+ { LedId.Keyboard_F4, SteelSeriesLedId.F4 },
+ { LedId.Keyboard_F5, SteelSeriesLedId.F5 },
+ { LedId.Keyboard_F6, SteelSeriesLedId.F6 },
+ { LedId.Keyboard_F7, SteelSeriesLedId.F7 },
+ { LedId.Keyboard_F8, SteelSeriesLedId.F8 },
+ { LedId.Keyboard_F9, SteelSeriesLedId.F9 },
+ { LedId.Keyboard_F10, SteelSeriesLedId.F10 },
+ { LedId.Keyboard_F11, SteelSeriesLedId.F11 },
+ { LedId.Keyboard_GraveAccentAndTilde, SteelSeriesLedId.Backqoute },
+ { LedId.Keyboard_1, SteelSeriesLedId.Keyboard1 },
+ { LedId.Keyboard_2, SteelSeriesLedId.Keyboard2 },
+ { LedId.Keyboard_3, SteelSeriesLedId.Keyboard3 },
+ { LedId.Keyboard_4, SteelSeriesLedId.Keyboard4 },
+ { LedId.Keyboard_5, SteelSeriesLedId.Keyboard5 },
+ { LedId.Keyboard_6, SteelSeriesLedId.Keyboard6 },
+ { LedId.Keyboard_7, SteelSeriesLedId.Keyboard7 },
+ { LedId.Keyboard_8, SteelSeriesLedId.Keyboard8 },
+ { LedId.Keyboard_9, SteelSeriesLedId.Keyboard9 },
+ { LedId.Keyboard_0, SteelSeriesLedId.Keyboard0 },
+ { LedId.Keyboard_MinusAndUnderscore, SteelSeriesLedId.Dash },
+ { LedId.Keyboard_Tab, SteelSeriesLedId.Tab },
+ { LedId.Keyboard_Q, SteelSeriesLedId.Q },
+ { LedId.Keyboard_W, SteelSeriesLedId.W },
+ { LedId.Keyboard_E, SteelSeriesLedId.E },
+ { LedId.Keyboard_R, SteelSeriesLedId.R },
+ { LedId.Keyboard_T, SteelSeriesLedId.T },
+ { LedId.Keyboard_Y, SteelSeriesLedId.Y },
+ { LedId.Keyboard_U, SteelSeriesLedId.U },
+ { LedId.Keyboard_I, SteelSeriesLedId.I },
+ { LedId.Keyboard_O, SteelSeriesLedId.O },
+ { LedId.Keyboard_P, SteelSeriesLedId.P },
+ { LedId.Keyboard_BracketLeft, SteelSeriesLedId.LBracket },
+ { LedId.Keyboard_CapsLock, SteelSeriesLedId.Caps },
+ { LedId.Keyboard_A, SteelSeriesLedId.A },
+ { LedId.Keyboard_S, SteelSeriesLedId.S },
+ { LedId.Keyboard_D, SteelSeriesLedId.D },
+ { LedId.Keyboard_F, SteelSeriesLedId.F },
+ { LedId.Keyboard_G, SteelSeriesLedId.G },
+ { LedId.Keyboard_H, SteelSeriesLedId.H },
+ { LedId.Keyboard_J, SteelSeriesLedId.J },
+ { LedId.Keyboard_K, SteelSeriesLedId.K },
+ { LedId.Keyboard_L, SteelSeriesLedId.L },
+ { LedId.Keyboard_SemicolonAndColon, SteelSeriesLedId.Semicolon },
+ { LedId.Keyboard_ApostropheAndDoubleQuote, SteelSeriesLedId.Quote },
+ { LedId.Keyboard_LeftShift, SteelSeriesLedId.LShift },
+ { LedId.Keyboard_NonUsTilde, SteelSeriesLedId.Pound },
+ { LedId.Keyboard_Z, SteelSeriesLedId.Z },
+ { LedId.Keyboard_X, SteelSeriesLedId.X },
+ { LedId.Keyboard_C, SteelSeriesLedId.C },
+ { LedId.Keyboard_V, SteelSeriesLedId.V },
+ { LedId.Keyboard_B, SteelSeriesLedId.B },
+ { LedId.Keyboard_N, SteelSeriesLedId.N },
+ { LedId.Keyboard_M, SteelSeriesLedId.M },
+ { LedId.Keyboard_CommaAndLessThan, SteelSeriesLedId.Comma },
+ { LedId.Keyboard_PeriodAndBiggerThan, SteelSeriesLedId.Period },
+ { LedId.Keyboard_SlashAndQuestionMark, SteelSeriesLedId.Slash },
+ { LedId.Keyboard_LeftCtrl, SteelSeriesLedId.LCtrl },
+ { LedId.Keyboard_LeftGui, SteelSeriesLedId.LWin },
+ { LedId.Keyboard_LeftAlt, SteelSeriesLedId.LAlt },
+ { LedId.Keyboard_Space, SteelSeriesLedId.Spacebar },
+ { LedId.Keyboard_RightAlt, SteelSeriesLedId.RAlt },
+ { LedId.Keyboard_RightGui, SteelSeriesLedId.RWin },
+ { LedId.Keyboard_Application, SteelSeriesLedId.SSKey },
+ { LedId.Keyboard_F12, SteelSeriesLedId.F12 },
+ { LedId.Keyboard_PrintScreen, SteelSeriesLedId.PrintScreen },
+ { LedId.Keyboard_ScrollLock, SteelSeriesLedId.ScrollLock },
+ { LedId.Keyboard_PauseBreak, SteelSeriesLedId.Pause },
+ { LedId.Keyboard_Insert, SteelSeriesLedId.Insert },
+ { LedId.Keyboard_Home, SteelSeriesLedId.Home },
+ { LedId.Keyboard_PageUp, SteelSeriesLedId.PageUp },
+ { LedId.Keyboard_BracketRight, SteelSeriesLedId.RBracket },
+ { LedId.Keyboard_Backslash, SteelSeriesLedId.Backslash },
+ { LedId.Keyboard_Enter, SteelSeriesLedId.Return },
+ { LedId.Keyboard_EqualsAndPlus, SteelSeriesLedId.Equal },
+ { LedId.Keyboard_Backspace, SteelSeriesLedId.Backspace },
+ { LedId.Keyboard_Delete, SteelSeriesLedId.Delete },
+ { LedId.Keyboard_End, SteelSeriesLedId.End },
+ { LedId.Keyboard_PageDown, SteelSeriesLedId.PageDown },
+ { LedId.Keyboard_RightShift, SteelSeriesLedId.RShift },
+ { LedId.Keyboard_RightCtrl, SteelSeriesLedId.RCtrl },
+ { LedId.Keyboard_ArrowUp, SteelSeriesLedId.UpArrow },
+ { LedId.Keyboard_ArrowLeft, SteelSeriesLedId.LeftArrow },
+ { LedId.Keyboard_ArrowDown, SteelSeriesLedId.DownArrow },
+ { LedId.Keyboard_ArrowRight, SteelSeriesLedId.RightArrow },
+ { LedId.Keyboard_NumLock, SteelSeriesLedId.KeypadNumLock },
+ { LedId.Keyboard_NumSlash, SteelSeriesLedId.KeypadDivide },
+ { LedId.Keyboard_NumAsterisk, SteelSeriesLedId.KeypadTimes },
+ { LedId.Keyboard_NumMinus, SteelSeriesLedId.KeypadMinus },
+ { LedId.Keyboard_NumPlus, SteelSeriesLedId.KeypadPlus },
+ { LedId.Keyboard_NumEnter, SteelSeriesLedId.KeypadEnter },
+ { LedId.Keyboard_Num7, SteelSeriesLedId.Keypad7 },
+ { LedId.Keyboard_Num8, SteelSeriesLedId.Keypad8 },
+ { LedId.Keyboard_Num9, SteelSeriesLedId.Keypad9 },
+ { LedId.Keyboard_Num4, SteelSeriesLedId.Keypad4 },
+ { LedId.Keyboard_Num5, SteelSeriesLedId.Keypad5 },
+ { LedId.Keyboard_Num6, SteelSeriesLedId.Keypad6 },
+ { LedId.Keyboard_Num1, SteelSeriesLedId.Keypad1 },
+ { LedId.Keyboard_Num2, SteelSeriesLedId.Keypad2 },
+ { LedId.Keyboard_Num3, SteelSeriesLedId.Keypad3 },
+ { LedId.Keyboard_Num0, SteelSeriesLedId.Keypad0 },
+ { LedId.Keyboard_NumPeriodAndDelete, SteelSeriesLedId.KeypadPeriod }
+ };
+
+ public static LedMapping KeyboardTklMappingUk { get; } = new()
+ {
+ { LedId.Logo, SteelSeriesLedId.Logo },
+ { LedId.Keyboard_Escape, SteelSeriesLedId.Escape },
+ { LedId.Keyboard_F1, SteelSeriesLedId.F1 },
+ { LedId.Keyboard_F2, SteelSeriesLedId.F2 },
+ { LedId.Keyboard_F3, SteelSeriesLedId.F3 },
+ { LedId.Keyboard_F4, SteelSeriesLedId.F4 },
+ { LedId.Keyboard_F5, SteelSeriesLedId.F5 },
+ { LedId.Keyboard_F6, SteelSeriesLedId.F6 },
+ { LedId.Keyboard_F7, SteelSeriesLedId.F7 },
+ { LedId.Keyboard_F8, SteelSeriesLedId.F8 },
+ { LedId.Keyboard_F9, SteelSeriesLedId.F9 },
+ { LedId.Keyboard_F10, SteelSeriesLedId.F10 },
+ { LedId.Keyboard_F11, SteelSeriesLedId.F11 },
+ { LedId.Keyboard_GraveAccentAndTilde, SteelSeriesLedId.Backqoute },
+ { LedId.Keyboard_1, SteelSeriesLedId.Keyboard1 },
+ { LedId.Keyboard_2, SteelSeriesLedId.Keyboard2 },
+ { LedId.Keyboard_3, SteelSeriesLedId.Keyboard3 },
+ { LedId.Keyboard_4, SteelSeriesLedId.Keyboard4 },
+ { LedId.Keyboard_5, SteelSeriesLedId.Keyboard5 },
+ { LedId.Keyboard_6, SteelSeriesLedId.Keyboard6 },
+ { LedId.Keyboard_7, SteelSeriesLedId.Keyboard7 },
+ { LedId.Keyboard_8, SteelSeriesLedId.Keyboard8 },
+ { LedId.Keyboard_9, SteelSeriesLedId.Keyboard9 },
+ { LedId.Keyboard_0, SteelSeriesLedId.Keyboard0 },
+ { LedId.Keyboard_MinusAndUnderscore, SteelSeriesLedId.Dash },
+ { LedId.Keyboard_Tab, SteelSeriesLedId.Tab },
+ { LedId.Keyboard_Q, SteelSeriesLedId.Q },
+ { LedId.Keyboard_W, SteelSeriesLedId.W },
+ { LedId.Keyboard_E, SteelSeriesLedId.E },
+ { LedId.Keyboard_R, SteelSeriesLedId.R },
+ { LedId.Keyboard_T, SteelSeriesLedId.T },
+ { LedId.Keyboard_Y, SteelSeriesLedId.Y },
+ { LedId.Keyboard_U, SteelSeriesLedId.U },
+ { LedId.Keyboard_I, SteelSeriesLedId.I },
+ { LedId.Keyboard_O, SteelSeriesLedId.O },
+ { LedId.Keyboard_P, SteelSeriesLedId.P },
+ { LedId.Keyboard_BracketLeft, SteelSeriesLedId.LBracket },
+ { LedId.Keyboard_CapsLock, SteelSeriesLedId.Caps },
+ { LedId.Keyboard_A, SteelSeriesLedId.A },
+ { LedId.Keyboard_S, SteelSeriesLedId.S },
+ { LedId.Keyboard_D, SteelSeriesLedId.D },
+ { LedId.Keyboard_F, SteelSeriesLedId.F },
+ { LedId.Keyboard_G, SteelSeriesLedId.G },
+ { LedId.Keyboard_H, SteelSeriesLedId.H },
+ { LedId.Keyboard_J, SteelSeriesLedId.J },
+ { LedId.Keyboard_K, SteelSeriesLedId.K },
+ { LedId.Keyboard_L, SteelSeriesLedId.L },
+ { LedId.Keyboard_SemicolonAndColon, SteelSeriesLedId.Semicolon },
+ { LedId.Keyboard_ApostropheAndDoubleQuote, SteelSeriesLedId.Quote },
+ { LedId.Keyboard_LeftShift, SteelSeriesLedId.LShift },
+ { LedId.Keyboard_NonUsTilde, SteelSeriesLedId.Pound },
+ { LedId.Keyboard_Z, SteelSeriesLedId.Z },
+ { LedId.Keyboard_X, SteelSeriesLedId.X },
+ { LedId.Keyboard_C, SteelSeriesLedId.C },
+ { LedId.Keyboard_V, SteelSeriesLedId.V },
+ { LedId.Keyboard_B, SteelSeriesLedId.B },
+ { LedId.Keyboard_N, SteelSeriesLedId.N },
+ { LedId.Keyboard_M, SteelSeriesLedId.M },
+ { LedId.Keyboard_CommaAndLessThan, SteelSeriesLedId.Comma },
+ { LedId.Keyboard_PeriodAndBiggerThan, SteelSeriesLedId.Period },
+ { LedId.Keyboard_SlashAndQuestionMark, SteelSeriesLedId.Slash },
+ { LedId.Keyboard_LeftCtrl, SteelSeriesLedId.LCtrl },
+ { LedId.Keyboard_LeftGui, SteelSeriesLedId.LWin },
+ { LedId.Keyboard_LeftAlt, SteelSeriesLedId.LAlt },
+ { LedId.Keyboard_Space, SteelSeriesLedId.Spacebar },
+ { LedId.Keyboard_RightAlt, SteelSeriesLedId.RAlt },
+ { LedId.Keyboard_RightGui, SteelSeriesLedId.RWin },
+ { LedId.Keyboard_Application, SteelSeriesLedId.SSKey },
+ { LedId.Keyboard_F12, SteelSeriesLedId.F12 },
+ { LedId.Keyboard_PrintScreen, SteelSeriesLedId.PrintScreen },
+ { LedId.Keyboard_ScrollLock, SteelSeriesLedId.ScrollLock },
+ { LedId.Keyboard_PauseBreak, SteelSeriesLedId.Pause },
+ { LedId.Keyboard_Insert, SteelSeriesLedId.Insert },
+ { LedId.Keyboard_Home, SteelSeriesLedId.Home },
+ { LedId.Keyboard_PageUp, SteelSeriesLedId.PageUp },
+ { LedId.Keyboard_BracketRight, SteelSeriesLedId.RBracket },
+ { LedId.Keyboard_Backslash, SteelSeriesLedId.Backslash },
+ { LedId.Keyboard_Enter, SteelSeriesLedId.Return },
+ { LedId.Keyboard_EqualsAndPlus, SteelSeriesLedId.Equal },
+ { LedId.Keyboard_Backspace, SteelSeriesLedId.Backspace },
+ { LedId.Keyboard_Delete, SteelSeriesLedId.Delete },
+ { LedId.Keyboard_End, SteelSeriesLedId.End },
+ { LedId.Keyboard_PageDown, SteelSeriesLedId.PageDown },
+ { LedId.Keyboard_RightShift, SteelSeriesLedId.RShift },
+ { LedId.Keyboard_RightCtrl, SteelSeriesLedId.RCtrl },
+ { LedId.Keyboard_ArrowUp, SteelSeriesLedId.UpArrow },
+ { LedId.Keyboard_ArrowLeft, SteelSeriesLedId.LeftArrow },
+ { LedId.Keyboard_ArrowDown, SteelSeriesLedId.DownArrow },
+ { LedId.Keyboard_ArrowRight, SteelSeriesLedId.RightArrow }
+ };
+
+ public static LedMapping MouseOneZone { get; } = new()
+ {
+ { LedId.Mouse1, SteelSeriesLedId.ZoneOne }
+ };
+
+ public static LedMapping MouseTwoZone { get; } = new()
+ {
+ { LedId.Mouse1, SteelSeriesLedId.ZoneOne },
+ { LedId.Mouse2, SteelSeriesLedId.ZoneTwo }
+ };
+
+ public static LedMapping MouseThreeZone { get; } = new()
+ {
+ { LedId.Mouse1, SteelSeriesLedId.ZoneOne },
+ { LedId.Mouse2, SteelSeriesLedId.ZoneTwo },
+ { LedId.Mouse3, SteelSeriesLedId.ZoneThree }
+ };
+
+ public static LedMapping MouseEightZone { get; } = new()
+ {
+ { LedId.Mouse1, SteelSeriesLedId.ZoneOne },
+ { LedId.Mouse2, SteelSeriesLedId.ZoneTwo },
+ { LedId.Mouse3, SteelSeriesLedId.ZoneThree },
+ { LedId.Mouse4, SteelSeriesLedId.ZoneFour },
+ { LedId.Mouse5, SteelSeriesLedId.ZoneFive },
+ { LedId.Mouse6, SteelSeriesLedId.ZoneSix },
+ { LedId.Mouse7, SteelSeriesLedId.ZoneSeven },
+ { LedId.Mouse8, SteelSeriesLedId.ZoneEight }
+ };
+
+ public static LedMapping HeadsetTwoZone { get; } = new()
+ {
+ { LedId.Headset1, SteelSeriesLedId.ZoneOne },
+ { LedId.Headset2, SteelSeriesLedId.ZoneTwo }
+ };
+
+ public static LedMapping MousepadTwelveZone { get; } = new()
+ {
+ { LedId.Mousepad1, SteelSeriesLedId.ZoneOne },
+ { LedId.Mousepad2, SteelSeriesLedId.ZoneTwo },
+ { LedId.Mousepad3, SteelSeriesLedId.ZoneThree },
+ { LedId.Mousepad4, SteelSeriesLedId.ZoneFour },
+ { LedId.Mousepad5, SteelSeriesLedId.ZoneFive },
+ { LedId.Mousepad6, SteelSeriesLedId.ZoneSix },
+ { LedId.Mousepad7, SteelSeriesLedId.ZoneSeven },
+ { LedId.Mousepad8, SteelSeriesLedId.ZoneEight },
+ { LedId.Mousepad9, SteelSeriesLedId.ZoneNine },
+ { LedId.Mousepad10, SteelSeriesLedId.ZoneTen },
+ { LedId.Mousepad11, SteelSeriesLedId.ZoneEleven },
+ { LedId.Mousepad12, SteelSeriesLedId.ZoneTwelve },
+ };
+
+ public static LedMapping MonitorOnehundredandthreeZone { get; } = new()
+ {
+ { LedId.LedStripe1, SteelSeriesLedId.ZoneOne },
+ { LedId.LedStripe2, SteelSeriesLedId.ZoneTwo },
+ { LedId.LedStripe3, SteelSeriesLedId.ZoneThree },
+ { LedId.LedStripe4, SteelSeriesLedId.ZoneFour },
+ { LedId.LedStripe5, SteelSeriesLedId.ZoneFive },
+ { LedId.LedStripe6, SteelSeriesLedId.ZoneSix },
+ { LedId.LedStripe7, SteelSeriesLedId.ZoneSeven },
+ { LedId.LedStripe8, SteelSeriesLedId.ZoneEight },
+ { LedId.LedStripe9, SteelSeriesLedId.ZoneNine },
+ { LedId.LedStripe10, SteelSeriesLedId.ZoneTen },
+ { LedId.LedStripe11, SteelSeriesLedId.ZoneEleven },
+ { LedId.LedStripe12, SteelSeriesLedId.ZoneTwelve },
+ { LedId.LedStripe13, SteelSeriesLedId.ZoneThirteen },
+ { LedId.LedStripe14, SteelSeriesLedId.ZoneFourteen },
+ { LedId.LedStripe15, SteelSeriesLedId.ZoneFifteen },
+ { LedId.LedStripe16, SteelSeriesLedId.ZoneSixteen },
+ { LedId.LedStripe17, SteelSeriesLedId.ZoneSeventeen },
+ { LedId.LedStripe18, SteelSeriesLedId.ZoneEighteen },
+ { LedId.LedStripe19, SteelSeriesLedId.ZoneNineteen },
+ { LedId.LedStripe20, SteelSeriesLedId.ZoneTwenty },
+ { LedId.LedStripe21, SteelSeriesLedId.ZoneTwentyOne },
+ { LedId.LedStripe22, SteelSeriesLedId.ZoneTwentyTwo },
+ { LedId.LedStripe23, SteelSeriesLedId.ZoneTwentyThree },
+ { LedId.LedStripe24, SteelSeriesLedId.ZoneTwentyFour },
+ { LedId.LedStripe25, SteelSeriesLedId.ZoneTwentyFive },
+ { LedId.LedStripe26, SteelSeriesLedId.ZoneTwentySix },
+ { LedId.LedStripe27, SteelSeriesLedId.ZoneTwentySeven },
+ { LedId.LedStripe28, SteelSeriesLedId.ZoneTwentyEight },
+ { LedId.LedStripe29, SteelSeriesLedId.ZoneTwentyNine },
+ { LedId.LedStripe30, SteelSeriesLedId.ZoneThirty },
+ { LedId.LedStripe31, SteelSeriesLedId.ZoneThirtyOne },
+ { LedId.LedStripe32, SteelSeriesLedId.ZoneThirtyTwo },
+ { LedId.LedStripe33, SteelSeriesLedId.ZoneThirtyThree },
+ { LedId.LedStripe34, SteelSeriesLedId.ZoneThirtyFour },
+ { LedId.LedStripe35, SteelSeriesLedId.ZoneThirtyFive },
+ { LedId.LedStripe36, SteelSeriesLedId.ZoneThirtySix },
+ { LedId.LedStripe37, SteelSeriesLedId.ZoneThirtySeven },
+ { LedId.LedStripe38, SteelSeriesLedId.ZoneThirtyEight },
+ { LedId.LedStripe39, SteelSeriesLedId.ZoneThirtyNine },
+ { LedId.LedStripe40, SteelSeriesLedId.ZoneForty },
+ { LedId.LedStripe41, SteelSeriesLedId.ZoneFortyOne },
+ { LedId.LedStripe42, SteelSeriesLedId.ZoneFortyTwo },
+ { LedId.LedStripe43, SteelSeriesLedId.ZoneFortyThree },
+ { LedId.LedStripe44, SteelSeriesLedId.ZoneFortyFour },
+ { LedId.LedStripe45, SteelSeriesLedId.ZoneFortyFive },
+ { LedId.LedStripe46, SteelSeriesLedId.ZoneFortySix },
+ { LedId.LedStripe47, SteelSeriesLedId.ZoneFortySeven },
+ { LedId.LedStripe48, SteelSeriesLedId.ZoneFortyEight },
+ { LedId.LedStripe49, SteelSeriesLedId.ZoneFortyNine },
+ { LedId.LedStripe50, SteelSeriesLedId.ZoneFifty },
+ { LedId.LedStripe51, SteelSeriesLedId.ZoneFiftyOne },
+ { LedId.LedStripe52, SteelSeriesLedId.ZoneFiftyTwo },
+ { LedId.LedStripe53, SteelSeriesLedId.ZoneFiftyThree },
+ { LedId.LedStripe54, SteelSeriesLedId.ZoneFiftyFour },
+ { LedId.LedStripe55, SteelSeriesLedId.ZoneFiftyFive },
+ { LedId.LedStripe56, SteelSeriesLedId.ZoneFiftySix },
+ { LedId.LedStripe57, SteelSeriesLedId.ZoneFiftySeven },
+ { LedId.LedStripe58, SteelSeriesLedId.ZoneFiftyEight },
+ { LedId.LedStripe59, SteelSeriesLedId.ZoneFiftyNine },
+ { LedId.LedStripe60, SteelSeriesLedId.ZoneSixty },
+ { LedId.LedStripe61, SteelSeriesLedId.ZoneSixtyOne },
+ { LedId.LedStripe62, SteelSeriesLedId.ZoneSixtyTwo },
+ { LedId.LedStripe63, SteelSeriesLedId.ZoneSixtyThree },
+ { LedId.LedStripe64, SteelSeriesLedId.ZoneSixtyFour },
+ { LedId.LedStripe65, SteelSeriesLedId.ZoneSixtyFive },
+ { LedId.LedStripe66, SteelSeriesLedId.ZoneSixtySix },
+ { LedId.LedStripe67, SteelSeriesLedId.ZoneSixtySeven },
+ { LedId.LedStripe68, SteelSeriesLedId.ZoneSixtyEight },
+ { LedId.LedStripe69, SteelSeriesLedId.ZoneSixtyNine },
+ { LedId.LedStripe70, SteelSeriesLedId.ZoneSeventy },
+ { LedId.LedStripe71, SteelSeriesLedId.ZoneSeventyOne },
+ { LedId.LedStripe72, SteelSeriesLedId.ZoneSeventyTwo },
+ { LedId.LedStripe73, SteelSeriesLedId.ZoneSeventyThree },
+ { LedId.LedStripe74, SteelSeriesLedId.ZoneSeventyFour },
+ { LedId.LedStripe75, SteelSeriesLedId.ZoneSeventyFive },
+ { LedId.LedStripe76, SteelSeriesLedId.ZoneSeventySix },
+ { LedId.LedStripe77, SteelSeriesLedId.ZoneSeventySeven },
+ { LedId.LedStripe78, SteelSeriesLedId.ZoneSeventyEight },
+ { LedId.LedStripe79, SteelSeriesLedId.ZoneSeventyNine },
+ { LedId.LedStripe80, SteelSeriesLedId.ZoneEighty },
+ { LedId.LedStripe81, SteelSeriesLedId.ZoneEightyOne },
+ { LedId.LedStripe82, SteelSeriesLedId.ZoneEightyTwo },
+ { LedId.LedStripe83, SteelSeriesLedId.ZoneEightyThree },
+ { LedId.LedStripe84, SteelSeriesLedId.ZoneEightyFour },
+ { LedId.LedStripe85, SteelSeriesLedId.ZoneEightyFive },
+ { LedId.LedStripe86, SteelSeriesLedId.ZoneEightySix },
+ { LedId.LedStripe87, SteelSeriesLedId.ZoneEightySeven },
+ { LedId.LedStripe88, SteelSeriesLedId.ZoneEightyEight },
+ { LedId.LedStripe89, SteelSeriesLedId.ZoneEightyNine },
+ { LedId.LedStripe90, SteelSeriesLedId.ZoneNinety },
+ { LedId.LedStripe91, SteelSeriesLedId.ZoneNinetyOne },
+ { LedId.LedStripe92, SteelSeriesLedId.ZoneNinetyTwo },
+ { LedId.LedStripe93, SteelSeriesLedId.ZoneNinetyThree },
+ { LedId.LedStripe94, SteelSeriesLedId.ZoneNinetyFour },
+ { LedId.LedStripe95, SteelSeriesLedId.ZoneNinetyFive },
+ { LedId.LedStripe96, SteelSeriesLedId.ZoneNinetySix },
+ { LedId.LedStripe97, SteelSeriesLedId.ZoneNinetySeven },
+ { LedId.LedStripe98, SteelSeriesLedId.ZoneNinetyEight },
+ { LedId.LedStripe99, SteelSeriesLedId.ZoneNinetyNine },
+ { LedId.LedStripe100, SteelSeriesLedId.ZoneOneHundred },
+ { LedId.LedStripe101, SteelSeriesLedId.ZoneOneHundredOne },
+ { LedId.LedStripe102, SteelSeriesLedId.ZoneOneHundredTwo },
+ { LedId.LedStripe103, SteelSeriesLedId.ZoneOneHundredThree }
+ };
+ }
+}
diff --git a/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesRGBDevice.cs b/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesRGBDevice.cs
index d97bb12..57679dc 100644
--- a/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesRGBDevice.cs
+++ b/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesRGBDevice.cs
@@ -12,7 +12,7 @@ namespace RGB.NET.Devices.SteelSeries
{
#region Properties & Fields
- private readonly Dictionary _ledMapping;
+ private readonly LedMapping _ledMapping;
#endregion
@@ -21,8 +21,7 @@ namespace RGB.NET.Devices.SteelSeries
///
/// Initializes a new instance of the class.
///
- /// The generic information provided by SteelSeries for the device.
- internal SteelSeriesRGBDevice(SteelSeriesRGBDeviceInfo info, string apiName, Dictionary ledMapping, IDeviceUpdateTrigger updateTrigger)
+ internal SteelSeriesRGBDevice(SteelSeriesRGBDeviceInfo info, string apiName, LedMapping ledMapping, IDeviceUpdateTrigger updateTrigger)
: base(info, new SteelSeriesDeviceUpdateQueue(updateTrigger, apiName))
{
this._ledMapping = ledMapping;
@@ -37,8 +36,8 @@ namespace RGB.NET.Devices.SteelSeries
private void InitializeLayout()
{
int counter = 0;
- foreach (KeyValuePair mapping in _ledMapping)
- AddLed(mapping.Key, new Point((counter++) * 10, 0), new Size(10, 10));
+ foreach ((LedId ledId, _) in _ledMapping)
+ AddLed(ledId, new Point((counter++) * 10, 0), new Size(10, 10));
}
///
@@ -47,15 +46,6 @@ namespace RGB.NET.Devices.SteelSeries
///
protected override void UpdateLeds(IEnumerable ledsToUpdate) => UpdateQueue.SetData(GetUpdateData(ledsToUpdate));
- ///
- public override void Dispose()
- {
- try { UpdateQueue?.Dispose(); }
- catch { /* at least we tried */ }
-
- base.Dispose();
- }
-
#endregion
}
}
diff --git a/RGB.NET.Devices.SteelSeries/RGB.NET.Devices.SteelSeries.csproj b/RGB.NET.Devices.SteelSeries/RGB.NET.Devices.SteelSeries.csproj
index 1543a8c..a37c0e1 100644
--- a/RGB.NET.Devices.SteelSeries/RGB.NET.Devices.SteelSeries.csproj
+++ b/RGB.NET.Devices.SteelSeries/RGB.NET.Devices.SteelSeries.csproj
@@ -52,6 +52,6 @@
-
+
\ No newline at end of file
diff --git a/RGB.NET.Devices.SteelSeries/SteelSeriesDeviceProvider.cs b/RGB.NET.Devices.SteelSeries/SteelSeriesDeviceProvider.cs
index f1793fd..81ca9c5 100644
--- a/RGB.NET.Devices.SteelSeries/SteelSeriesDeviceProvider.cs
+++ b/RGB.NET.Devices.SteelSeries/SteelSeriesDeviceProvider.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using RGB.NET.Core;
using RGB.NET.Devices.SteelSeries.API;
-using RGB.NET.Devices.SteelSeries.HID;
+using RGB.NET.HID;
namespace RGB.NET.Devices.SteelSeries
{
@@ -20,6 +20,52 @@ namespace RGB.NET.Devices.SteelSeries
///
public static SteelSeriesDeviceProvider Instance => _instance ?? new SteelSeriesDeviceProvider();
+ private const int VENDOR_ID = 0x1038;
+
+ public static HIDLoader DeviceDefinitions { get; } = new(VENDOR_ID)
+ {
+ //Mice
+ { 0x1836, RGBDeviceType.Mouse, "Aerox 3", LedMappings.MouseThreeZone, SteelSeriesDeviceType.ThreeZone },
+ { 0x183A, RGBDeviceType.Mouse, "Aerox 3 Wireless", LedMappings.MouseThreeZone, SteelSeriesDeviceType.ThreeZone },
+ { 0x1702, RGBDeviceType.Mouse, "Rival 100", LedMappings.MouseOneZone, SteelSeriesDeviceType.OneZone },
+ { 0x1814, RGBDeviceType.Mouse, "Rival 105", LedMappings.MouseOneZone, SteelSeriesDeviceType.OneZone },
+ { 0x1816, RGBDeviceType.Mouse, "Rival 106", LedMappings.MouseOneZone, SteelSeriesDeviceType.OneZone },
+ { 0x1729, RGBDeviceType.Mouse, "Rival 110", LedMappings.MouseOneZone, SteelSeriesDeviceType.OneZone },
+ { 0x0472, RGBDeviceType.Mouse, "Rival 150", LedMappings.MouseOneZone, SteelSeriesDeviceType.OneZone },
+ { 0x1710, RGBDeviceType.Mouse, "Rival 300", LedMappings.MouseTwoZone, SteelSeriesDeviceType.TwoZone },
+ { 0x1720, RGBDeviceType.Mouse, "Rival 310", LedMappings.MouseTwoZone, SteelSeriesDeviceType.TwoZone },
+ { 0x170E, RGBDeviceType.Mouse, "Rival 500", LedMappings.MouseTwoZone, SteelSeriesDeviceType.TwoZone },
+ { 0x1724, RGBDeviceType.Mouse, "Rival 600", LedMappings.MouseEightZone, SteelSeriesDeviceType.EightZone },
+ { 0x172B, RGBDeviceType.Mouse, "Rival 650", LedMappings.MouseEightZone, SteelSeriesDeviceType.EightZone },
+ { 0x1700, RGBDeviceType.Mouse, "Rival 700", LedMappings.MouseTwoZone, SteelSeriesDeviceType.TwoZone },
+ { 0x1824, RGBDeviceType.Mouse, "Rival 3 (Old Firmware)", LedMappings.MouseThreeZone, SteelSeriesDeviceType.ThreeZone },
+ { 0x184C, RGBDeviceType.Mouse, "Rival 3", LedMappings.MouseThreeZone, SteelSeriesDeviceType.ThreeZone },
+ { 0x1830, RGBDeviceType.Mouse, "Rival 3 Wireless", LedMappings.MouseThreeZone, SteelSeriesDeviceType.ThreeZone },
+ { 0x1832, RGBDeviceType.Mouse, "Sensei Ten", LedMappings.MouseTwoZone, SteelSeriesDeviceType.TwoZone },
+
+ //Keyboards
+ { 0x161C, RGBDeviceType.Keyboard, "Apex 5", LedMappings.KeyboardMappingUk, SteelSeriesDeviceType.PerKey },
+ { 0x1612, RGBDeviceType.Keyboard, "Apex 7", LedMappings.KeyboardMappingUk, SteelSeriesDeviceType.PerKey },
+ { 0x1618, RGBDeviceType.Keyboard, "Apex 7 TKL", LedMappings.KeyboardTklMappingUk, SteelSeriesDeviceType.PerKey },
+ { 0x0616, RGBDeviceType.Keyboard, "Apex M750", LedMappings.KeyboardMappingUk, SteelSeriesDeviceType.PerKey },
+ { 0x1600, RGBDeviceType.Keyboard, "Apex M800", LedMappings.KeyboardMappingUk, SteelSeriesDeviceType.PerKey },
+ { 0x1610, RGBDeviceType.Keyboard, "Apex Pro", LedMappings.KeyboardMappingUk, SteelSeriesDeviceType.PerKey },
+ { 0x1614, RGBDeviceType.Keyboard, "Apex Pro TKL", LedMappings.KeyboardTklMappingUk, SteelSeriesDeviceType.PerKey },
+
+ //Headsets
+ { 0x12AA, RGBDeviceType.Headset, "Arctis 5", LedMappings.HeadsetTwoZone, SteelSeriesDeviceType.TwoZone },
+ { 0x1250, RGBDeviceType.Headset, "Arctis 5 Game", LedMappings.HeadsetTwoZone, SteelSeriesDeviceType.TwoZone },
+ { 0x1251, RGBDeviceType.Headset, "Arctis 5 Game - Dota 2 edition", LedMappings.HeadsetTwoZone, SteelSeriesDeviceType.TwoZone },
+ { 0x12A8, RGBDeviceType.Headset, "Arctis 5 Game - PUBG edition", LedMappings.HeadsetTwoZone, SteelSeriesDeviceType.TwoZone },
+ { 0x1252, RGBDeviceType.Headset, "Arctis Pro Game", LedMappings.HeadsetTwoZone, SteelSeriesDeviceType.TwoZone },
+
+ //Mousepads
+ { 0x1507, RGBDeviceType.Mousepad, "QCK Prism", LedMappings.MousepadTwelveZone, SteelSeriesDeviceType.TwelveZone },
+
+ //Monitors
+ { 0x1126, RGBDeviceType.Monitor, "MGP27C", LedMappings.MonitorOnehundredandthreeZone, SteelSeriesDeviceType.OneHundredAndThreeZone },
+ };
+
#endregion
#region Constructors
@@ -38,31 +84,37 @@ namespace RGB.NET.Devices.SteelSeries
#region Methods
+ ///
protected override void InitializeSDK()
{
if (!SteelSeriesSDK.IsInitialized)
SteelSeriesSDK.Initialize();
}
+ ///
protected override IEnumerable GetLoadedDevices(RGBDeviceType loadFilter)
{
- DeviceChecker.LoadDeviceList(loadFilter);
+ DeviceDefinitions.LoadFilter = loadFilter;
return base.GetLoadedDevices(loadFilter);
}
+ ///
protected override IEnumerable LoadDevices()
{
- foreach ((string model, RGBDeviceType deviceType, int _, SteelSeriesDeviceType steelSeriesDeviceType, Dictionary ledMapping) in DeviceChecker.ConnectedDevices)
+ foreach ((HIDDeviceDefinition definition, _) in DeviceDefinitions.GetConnectedDevices(x => x.CustomData))
{
- string? apiName = steelSeriesDeviceType.GetAPIName();
+ string? apiName = definition.CustomData.GetAPIName();
if (apiName == null)
- Throw(new RGBDeviceException($"Missing API-name for device {model}"));
+ Throw(new RGBDeviceException($"Missing API-name for device {definition.Name}"));
else
- yield return new SteelSeriesRGBDevice(new SteelSeriesRGBDeviceInfo(deviceType, model, steelSeriesDeviceType), apiName, ledMapping, GetUpdateTrigger());
+ yield return new SteelSeriesRGBDevice(new SteelSeriesRGBDeviceInfo(definition.DeviceType, definition.Name, definition.CustomData), apiName, definition.LedMapping, GetUpdateTrigger());
}
}
+ ///
+ protected override IDeviceUpdateTrigger CreateUpdateTrigger(int id, double updateRateHardLimit) => new SteelSeriesDeviceUpdateTrigger(updateRateHardLimit);
+
///
public override void Dispose()
{
diff --git a/RGB.NET.HID/HIDLoader.cs b/RGB.NET.HID/HIDLoader.cs
new file mode 100644
index 0000000..f4a7389
--- /dev/null
+++ b/RGB.NET.HID/HIDLoader.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using HidSharp;
+using RGB.NET.Core;
+
+namespace RGB.NET.HID
+{
+ public record HIDDeviceDefinition(int ProductId, RGBDeviceType DeviceType, string Name, LedMapping LedMapping, TData CustomData) where TLed : notnull;
+
+ public class HIDLoader : IEnumerable>
+ where TLed : notnull
+ {
+ #region Properties & Fields
+
+ private readonly Dictionary> _deviceDefinitions = new();
+
+ public int VendorId { get; }
+
+ public RGBDeviceType LoadFilter { get; set; } = RGBDeviceType.All;
+
+ #endregion
+
+ #region Constructors
+
+ public HIDLoader(int vendorId)
+ {
+ this.VendorId = vendorId;
+ }
+
+ #endregion
+
+ #region Methods
+
+ public void Add(int productId, RGBDeviceType deviceType, string name, LedMapping ledMapping, TData customData)
+ => _deviceDefinitions.Add(productId, new HIDDeviceDefinition(productId, deviceType, name, ledMapping, customData));
+
+ public IEnumerable<(HIDDeviceDefinition definition, HidDevice device)> GetConnectedDevices()
+ {
+ IEnumerable devices = DeviceList.Local.GetHidDevices(VendorId);
+ foreach (HidDevice device in devices)
+ {
+ if (_deviceDefinitions.TryGetValue(device.ProductID, out HIDDeviceDefinition? definition))
+ if (LoadFilter.HasFlag(definition.DeviceType))
+ yield return (definition, device);
+ }
+ }
+
+ public IEnumerable<(HIDDeviceDefinition definition, HidDevice device)> GetConnectedDevices(Func, TKey> groupBy)
+ => GetConnectedDevices().GroupBy(x => groupBy(x.definition))
+ .Select(group => group.First());
+
+ IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
+ public IEnumerator> GetEnumerator() => _deviceDefinitions.Values.GetEnumerator();
+
+ #endregion
+ }
+}
diff --git a/RGB.NET.HID/RGB.NET.HID.csproj b/RGB.NET.HID/RGB.NET.HID.csproj
new file mode 100644
index 0000000..65c0bbb
--- /dev/null
+++ b/RGB.NET.HID/RGB.NET.HID.csproj
@@ -0,0 +1,60 @@
+
+
+ net5.0
+ latest
+ enable
+
+ Darth Affe
+ Wyrez
+ en-US
+ en-US
+ RGB.NET.HID
+ RGB.NET.HID
+ RGB.NET.HID
+ RGB.NET.HID
+ RGB.NET.HID
+ HID-Module of RGB.NET
+ HID-Module of RGB.NET, a C# (.NET) library for accessing various RGB-peripherals
+ Copyright © Darth Affe 2021
+ Copyright © Darth Affe 2021
+ http://lib.arge.be/icon.png
+ https://github.com/DarthAffe/RGB.NET
+ https://raw.githubusercontent.com/DarthAffe/RGB.NET/master/LICENSE
+ Github
+ https://github.com/DarthAffe/RGB.NET
+ True
+
+
+
+ 0.0.1
+ 0.0.1
+ 0.0.1
+
+ ..\bin\
+ true
+ True
+ True
+
+
+
+ $(DefineConstants);TRACE;DEBUG
+ true
+ full
+ false
+
+
+
+ pdbonly
+ true
+ $(NoWarn);CS1591;CS1572;CS1573
+ $(DefineConstants);RELEASE
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/RGB.NET.Layout/DeviceLayout.cs b/RGB.NET.Layout/DeviceLayout.cs
index f4363c8..dbcaa88 100644
--- a/RGB.NET.Layout/DeviceLayout.cs
+++ b/RGB.NET.Layout/DeviceLayout.cs
@@ -30,6 +30,12 @@ namespace RGB.NET.Layout
[XmlElement("Description")]
public string? Description { get; set; }
+ ///
+ /// Gets or sets the author of the .
+ ///
+ [XmlElement("Author")]
+ public string? Author { get; set; }
+
///
/// Gets or sets the of the .
///
diff --git a/RGB.NET.Layout/IDeviceLayout.cs b/RGB.NET.Layout/IDeviceLayout.cs
index 677353c..2879200 100644
--- a/RGB.NET.Layout/IDeviceLayout.cs
+++ b/RGB.NET.Layout/IDeviceLayout.cs
@@ -15,6 +15,11 @@ namespace RGB.NET.Layout
///
string? Description { get; }
+ ///
+ /// Gets or sets the author of the .
+ ///
+ string? Author { get; }
+
///
/// Gets or sets the of the .
///
diff --git a/RGB.NET.sln b/RGB.NET.sln
index c9ec688..3737317 100644
--- a/RGB.NET.sln
+++ b/RGB.NET.sln
@@ -39,6 +39,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RGB.NET.Devices.Wooting", "
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RGB.NET.Layout", "RGB.NET.Layout\RGB.NET.Layout.csproj", "{8AAB3736-B443-402C-B8AC-63D1A6DAFCCB}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RGB.NET.HID", "RGB.NET.HID\RGB.NET.HID.csproj", "{4F4B7329-4858-4314-BA32-9DF3B1B33482}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -109,6 +111,10 @@ Global
{8AAB3736-B443-402C-B8AC-63D1A6DAFCCB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8AAB3736-B443-402C-B8AC-63D1A6DAFCCB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8AAB3736-B443-402C-B8AC-63D1A6DAFCCB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4F4B7329-4858-4314-BA32-9DF3B1B33482}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4F4B7329-4858-4314-BA32-9DF3B1B33482}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4F4B7329-4858-4314-BA32-9DF3B1B33482}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4F4B7329-4858-4314-BA32-9DF3B1B33482}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE