Added Led-Mapping base class and centralized HID-device-detection

This commit is contained in:
DarthAffe committed 2021-04-02 00:32:22 +02:00
1 parent eb3b91d8d8
commit 7f3abaefec
24 files changed
+1246 -1296

No files matched your search

@@ -1,5 +1,4 @@
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Runtime.CompilerServices;
using RGB.NET.Core;
namespace RGB.NET.Devices.Logitech
@@ -11,145 +10,7 @@ namespace RGB.NET.Devices.Logitech
private const int BITMAP_SIZE = 21 * 6 * 4;
#endregion
#region Properties & Fields
internal static Dictionary<LedId, int> 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)]
@@ -9,23 +9,30 @@ namespace RGB.NET.Devices.Logitech
/// </summary>
public class LogitechPerKeyRGBDevice : LogitechRGBDevice<LogitechRGBDeviceInfo>, 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<int> _ledMapping;
#endregion
#region Constructors
/// <inheritdoc />
/// <summary>
/// Initializes a new instance of the <see cref="T:RGB.NET.Devices.Logitech.LogitechPerKeyRGBDevice" /> class.
/// </summary>
/// <param name="info">The specific information provided by logitech for the per-key-lightable device</param>
internal LogitechPerKeyRGBDevice(LogitechRGBDeviceInfo info, IUpdateQueue updateQueue)
internal LogitechPerKeyRGBDevice(LogitechRGBDeviceInfo info, IUpdateQueue updateQueue, LedMapping<int> ledMapping)
: base(info, updateQueue)
{ }
{
this._ledMapping = ledMapping;
}
#endregion
#region Methods
/// <inheritdoc />
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 int logitechLedId) ? logitechLedId : -1;
/// <inheritdoc />
protected override void UpdateLeds(IEnumerable<Led> ledsToUpdate) => UpdateQueue.SetData(GetUpdateData(ledsToUpdate));
@@ -37,26 +37,10 @@ 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;
BitmapMapping.SetColor(_bitmap, (int)key, color);
// 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));
}
if (usesBitmap)
_LogitechGSDK.LogiLedSetLightingFromBitmap(_bitmap);
_LogitechGSDK.LogiLedSetLightingFromBitmap(_bitmap);
}
#endregion
@@ -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<LedId, LogitechLedId> 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 },
};
}
}