From 17bd13b995e2e3e725426fe9fbe6015b32668671 Mon Sep 17 00:00:00 2001 From: Diogo Trindade Date: Sun, 22 Aug 2021 01:52:25 +0100 Subject: [PATCH] Updated wooting device provider to support newer keyboards --- .../Enum/WootingDeviceType.cs | 4 +++ .../Enum/WootingDevicesIndexes.cs | 21 -------------- .../Generic/WootingRGBDeviceInfo.cs | 13 +++++---- .../Keyboard/WootingKeyboardLedMappings.cs | 28 +++++++++---------- .../Keyboard/WootingKeyboardRGBDevice.cs | 4 +-- .../Keyboard/WootingKeyboardRGBDeviceInfo.cs | 7 +++-- .../Native/_WootingDeviceInfo.cs | 2 ++ .../WootingDeviceProvider.cs | 11 +------- 8 files changed, 34 insertions(+), 56 deletions(-) delete mode 100644 RGB.NET.Devices.Wooting/Enum/WootingDevicesIndexes.cs diff --git a/RGB.NET.Devices.Wooting/Enum/WootingDeviceType.cs b/RGB.NET.Devices.Wooting/Enum/WootingDeviceType.cs index 6b25a54..53c2015 100644 --- a/RGB.NET.Devices.Wooting/Enum/WootingDeviceType.cs +++ b/RGB.NET.Devices.Wooting/Enum/WootingDeviceType.cs @@ -7,10 +7,14 @@ namespace RGB.NET.Devices.Wooting.Enum /// public enum WootingDeviceType { + /// /// 10 Keyless Keyboard. E.g. Wooting One + /// KeyboardTKL = 1, + /// /// Full Size keyboard. E.g. Wooting Two + /// Keyboard = 2 } } diff --git a/RGB.NET.Devices.Wooting/Enum/WootingDevicesIndexes.cs b/RGB.NET.Devices.Wooting/Enum/WootingDevicesIndexes.cs deleted file mode 100644 index c25afa4..0000000 --- a/RGB.NET.Devices.Wooting/Enum/WootingDevicesIndexes.cs +++ /dev/null @@ -1,21 +0,0 @@ -// ReSharper disable InconsistentNaming -// ReSharper disable UnusedMember.Global - -using System.ComponentModel; - -#pragma warning disable 1591 // Missing XML comment for publicly visible type or member - -namespace RGB.NET.Devices.Wooting.Enum -{ - /// - /// Contains a list of available device-indexes. - /// - public enum WootingDevicesIndexes - { - [Description("Wooting One")] - WootingOne = 0, - - [Description("Wooting Two")] - WootingTwo = 1 - } -} diff --git a/RGB.NET.Devices.Wooting/Generic/WootingRGBDeviceInfo.cs b/RGB.NET.Devices.Wooting/Generic/WootingRGBDeviceInfo.cs index 850f8a4..f217c00 100644 --- a/RGB.NET.Devices.Wooting/Generic/WootingRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Wooting/Generic/WootingRGBDeviceInfo.cs @@ -1,6 +1,7 @@ using RGB.NET.Core; using RGB.NET.Devices.Wooting.Enum; using RGB.NET.Devices.Wooting.Helper; +using RGB.NET.Devices.Wooting.Native; namespace RGB.NET.Devices.Wooting.Generic { @@ -28,9 +29,9 @@ namespace RGB.NET.Devices.Wooting.Generic public object? LayoutMetadata { get; set; } /// - /// Gets the of the . + /// Gets the of the . /// - public WootingDevicesIndexes DeviceIndex { get; } + public WootingDeviceType WootingDeviceType { get; } #endregion @@ -40,13 +41,13 @@ namespace RGB.NET.Devices.Wooting.Generic /// Internal constructor of managed . /// /// The type of the . - /// The of the . - internal WootingRGBDeviceInfo(RGBDeviceType deviceType, WootingDevicesIndexes deviceIndex) + /// The of the . + internal WootingRGBDeviceInfo(RGBDeviceType deviceType, _WootingDeviceInfo deviceInfo) { this.DeviceType = deviceType; - this.DeviceIndex = deviceIndex; + this.WootingDeviceType = deviceInfo.DeviceType; - Model = deviceIndex.GetDescription(); + Model = deviceInfo.Model; DeviceName = DeviceHelper.CreateDeviceName(Manufacturer, Model); } diff --git a/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardLedMappings.cs b/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardLedMappings.cs index 0ce7e41..618f31c 100644 --- a/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardLedMappings.cs +++ b/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardLedMappings.cs @@ -13,9 +13,9 @@ namespace RGB.NET.Devices.Wooting.Keyboard { #region Properties & Fields - #region Wooting One + #region TKL - private static readonly Dictionary WootingOne_US = new() + private static readonly Dictionary TKL_US = new() { { LedId.Keyboard_Escape, (0,0) }, { LedId.Keyboard_F1, (0,2) }, @@ -111,7 +111,7 @@ namespace RGB.NET.Devices.Wooting.Keyboard { LedId.Keyboard_ArrowRight, (5,16) } }; - private static readonly Dictionary WootingOne_UK = new() + private static readonly Dictionary TKL_UK = new() { { LedId.Keyboard_Escape, (0,0) }, { LedId.Keyboard_F1, (0,2) }, @@ -178,7 +178,7 @@ namespace RGB.NET.Devices.Wooting.Keyboard { LedId.Keyboard_L, (3,9) }, { LedId.Keyboard_SemicolonAndColon, (3,10) }, { LedId.Keyboard_ApostropheAndDoubleQuote, (3,11) }, - { LedId.Keyboard_NonUsTilde, (3,11) }, + { LedId.Keyboard_NonUsTilde, (3,12) }, { LedId.Keyboard_Enter, (3,13) }, { LedId.Keyboard_LeftShift, (4,0) }, @@ -211,9 +211,9 @@ namespace RGB.NET.Devices.Wooting.Keyboard #endregion - #region Wooting Two + #region Fullsize - private static readonly Dictionary WootingTwo_US = new() + private static readonly Dictionary Fullsize_US = new() { { LedId.Keyboard_Escape, (0,0) }, { LedId.Keyboard_F1, (0,2) }, @@ -330,7 +330,7 @@ namespace RGB.NET.Devices.Wooting.Keyboard { LedId.Keyboard_NumPeriodAndDelete, (5,19) } }; - private static readonly Dictionary WootingTwo_UK = new() + private static readonly Dictionary Fullsize_UK = new() { { LedId.Keyboard_Escape, (0,0) }, { LedId.Keyboard_F1, (0,2) }, @@ -454,20 +454,20 @@ namespace RGB.NET.Devices.Wooting.Keyboard /// /// Contains all the hardware-id mappings for Wooting devices. /// - public static readonly Dictionary>> Mapping = + public static readonly Dictionary>> Mapping = new() { - { WootingDevicesIndexes.WootingOne, new Dictionary> + { WootingDeviceType.KeyboardTKL, new Dictionary> { - { WootingPhysicalKeyboardLayout.US, WootingOne_US }, - { WootingPhysicalKeyboardLayout.UK, WootingOne_UK } + { WootingPhysicalKeyboardLayout.US, TKL_US }, + { WootingPhysicalKeyboardLayout.UK, TKL_UK } } }, - { WootingDevicesIndexes.WootingTwo, new Dictionary> + { WootingDeviceType.Keyboard, new Dictionary> { - { WootingPhysicalKeyboardLayout.US, WootingTwo_US }, - { WootingPhysicalKeyboardLayout.UK, WootingTwo_UK } + { WootingPhysicalKeyboardLayout.US, Fullsize_US }, + { WootingPhysicalKeyboardLayout.UK, Fullsize_UK } } } }; diff --git a/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDevice.cs b/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDevice.cs index 4e643bd..cace6cd 100644 --- a/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDevice.cs +++ b/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDevice.cs @@ -38,14 +38,14 @@ namespace RGB.NET.Devices.Wooting.Keyboard private void InitializeLayout() { //TODO DarthAffe 13.02.2021: Check how the mapping can work without knowing the physical layout - Dictionary mapping = WootingKeyboardLedMappings.Mapping[DeviceInfo.DeviceIndex][WootingPhysicalKeyboardLayout.US]; + Dictionary mapping = WootingKeyboardLedMappings.Mapping[DeviceInfo.WootingDeviceType][WootingPhysicalKeyboardLayout.US]; foreach (KeyValuePair led in mapping) AddLed(led.Key, new Point(led.Value.column * 19, led.Value.row * 19), new Size(19, 19)); } /// - protected override object GetLedCustomData(LedId ledId) => WootingKeyboardLedMappings.Mapping[DeviceInfo.DeviceIndex][WootingPhysicalKeyboardLayout.US][ledId]; + protected override object GetLedCustomData(LedId ledId) => WootingKeyboardLedMappings.Mapping[DeviceInfo.WootingDeviceType][WootingPhysicalKeyboardLayout.US][ledId]; /// protected override void UpdateLeds(IEnumerable ledsToUpdate) => UpdateQueue.SetData(GetUpdateData(ledsToUpdate)); diff --git a/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDeviceInfo.cs b/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDeviceInfo.cs index f2dcfdf..abfe5dd 100644 --- a/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDeviceInfo.cs @@ -1,6 +1,7 @@ using RGB.NET.Core; using RGB.NET.Devices.Wooting.Enum; using RGB.NET.Devices.Wooting.Generic; +using RGB.NET.Devices.Wooting.Native; namespace RGB.NET.Devices.Wooting.Keyboard { @@ -22,9 +23,9 @@ namespace RGB.NET.Devices.Wooting.Keyboard /// /// Internal constructor of managed . /// - /// The index of the . - internal WootingKeyboardRGBDeviceInfo(WootingDevicesIndexes deviceIndex) - : base(RGBDeviceType.Keyboard, deviceIndex) + /// The native . + internal WootingKeyboardRGBDeviceInfo(_WootingDeviceInfo deviceInfo) + : base(RGBDeviceType.Keyboard, deviceInfo) { } #endregion diff --git a/RGB.NET.Devices.Wooting/Native/_WootingDeviceInfo.cs b/RGB.NET.Devices.Wooting/Native/_WootingDeviceInfo.cs index b1a7d51..fab57c6 100644 --- a/RGB.NET.Devices.Wooting/Native/_WootingDeviceInfo.cs +++ b/RGB.NET.Devices.Wooting/Native/_WootingDeviceInfo.cs @@ -20,5 +20,7 @@ namespace RGB.NET.Devices.Wooting.Native internal byte KeycodeLimit { get; private set; } internal WootingDeviceType DeviceType { get; private set; } + + internal bool V2Interface { get; set; } } } diff --git a/RGB.NET.Devices.Wooting/WootingDeviceProvider.cs b/RGB.NET.Devices.Wooting/WootingDeviceProvider.cs index 6c06d35..3f964e0 100644 --- a/RGB.NET.Devices.Wooting/WootingDeviceProvider.cs +++ b/RGB.NET.Devices.Wooting/WootingDeviceProvider.cs @@ -70,17 +70,8 @@ namespace RGB.NET.Devices.Wooting if (_WootingSDK.KeyboardConnected()) { _WootingDeviceInfo nativeDeviceInfo = (_WootingDeviceInfo)Marshal.PtrToStructure(_WootingSDK.GetDeviceInfo(), typeof(_WootingDeviceInfo))!; - IWootingRGBDevice? device = nativeDeviceInfo.Model switch - { - "Wooting two" => new WootingKeyboardRGBDevice(new WootingKeyboardRGBDeviceInfo(WootingDevicesIndexes.WootingTwo), GetUpdateTrigger()), - "Wooting one" => new WootingKeyboardRGBDevice(new WootingKeyboardRGBDeviceInfo(WootingDevicesIndexes.WootingOne), GetUpdateTrigger()), - _ => null - }; - if (device == null) - Throw(new RGBDeviceException("No supported Wooting keyboard connected")); - else - yield return device; + yield return new WootingKeyboardRGBDevice(new WootingKeyboardRGBDeviceInfo(nativeDeviceInfo), GetUpdateTrigger()); } } }