diff --git a/RGB.NET.Core/Leds/LedId.cs b/RGB.NET.Core/Leds/LedId.cs index acc0206..cb25108 100644 --- a/RGB.NET.Core/Leds/LedId.cs +++ b/RGB.NET.Core/Leds/LedId.cs @@ -1236,133 +1236,263 @@ namespace RGB.NET.Core Cooler64 = 0x00D00040, /*### Custom ###*/ - Custom1 = 0x0FF00001, - Custom2 = 0x0FF00002, - Custom3 = 0x0FF00003, - Custom4 = 0x0FF00004, - Custom5 = 0x0FF00005, - Custom6 = 0x0FF00006, - Custom7 = 0x0FF00007, - Custom8 = 0x0FF00008, - Custom9 = 0x0FF00009, - Custom10 = 0x0FF0000A, - Custom11 = 0x0FF0000B, - Custom12 = 0x0FF0000C, - Custom13 = 0x0FF0000D, - Custom14 = 0x0FF0000E, - Custom15 = 0x0FF0000F, - Custom16 = 0x0FF00010, - Custom17 = 0x0FF00011, - Custom18 = 0x0FF00012, - Custom19 = 0x0FF00013, - Custom20 = 0x0FF00014, - Custom21 = 0x0FF00015, - Custom22 = 0x0FF00016, - Custom23 = 0x0FF00017, - Custom24 = 0x0FF00018, - Custom25 = 0x0FF00019, - Custom26 = 0x0FF0001A, - Custom27 = 0x0FF0001B, - Custom28 = 0x0FF0001C, - Custom29 = 0x0FF0001D, - Custom30 = 0x0FF0001E, - Custom31 = 0x0FF0001F, - Custom32 = 0x0FF00020, - Custom33 = 0x0FF00021, - Custom34 = 0x0FF00022, - Custom35 = 0x0FF00023, - Custom36 = 0x0FF00024, - Custom37 = 0x0FF00025, - Custom38 = 0x0FF00026, - Custom39 = 0x0FF00027, - Custom40 = 0x0FF00028, - Custom41 = 0x0FF00029, - Custom42 = 0x0FF0002A, - Custom43 = 0x0FF0002B, - Custom44 = 0x0FF0002C, - Custom45 = 0x0FF0002D, - Custom46 = 0x0FF0002E, - Custom47 = 0x0FF0002F, - Custom48 = 0x0FF00030, - Custom49 = 0x0FF00031, - Custom50 = 0x0FF00032, - Custom51 = 0x0FF00033, - Custom52 = 0x0FF00034, - Custom53 = 0x0FF00035, - Custom54 = 0x0FF00036, - Custom55 = 0x0FF00037, - Custom56 = 0x0FF00038, - Custom57 = 0x0FF00039, - Custom58 = 0x0FF0003A, - Custom59 = 0x0FF0003B, - Custom60 = 0x0FF0003C, - Custom61 = 0x0FF0003D, - Custom62 = 0x0FF0003E, - Custom63 = 0x0FF0003F, - Custom64 = 0x0FF00040, - Custom65 = 0x0FF00041, - Custom66 = 0x0FF00042, - Custom67 = 0x0FF00043, - Custom68 = 0x0FF00044, - Custom69 = 0x0FF00045, - Custom70 = 0x0FF00046, - Custom71 = 0x0FF00047, - Custom72 = 0x0FF00048, - Custom73 = 0x0FF00049, - Custom74 = 0x0FF0004A, - Custom75 = 0x0FF0004B, - Custom76 = 0x0FF0004C, - Custom77 = 0x0FF0004D, - Custom78 = 0x0FF0004E, - Custom79 = 0x0FF0004F, - Custom80 = 0x0FF00050, - Custom81 = 0x0FF00051, - Custom82 = 0x0FF00052, - Custom83 = 0x0FF00053, - Custom84 = 0x0FF00054, - Custom85 = 0x0FF00055, - Custom86 = 0x0FF00056, - Custom87 = 0x0FF00057, - Custom88 = 0x0FF00058, - Custom89 = 0x0FF00059, - Custom90 = 0x0FF0005A, - Custom91 = 0x0FF0005B, - Custom92 = 0x0FF0005C, - Custom93 = 0x0FF0005D, - Custom94 = 0x0FF0005E, - Custom95 = 0x0FF0005F, - Custom96 = 0x0FF00060, - Custom97 = 0x0FF00061, - Custom98 = 0x0FF00062, - Custom99 = 0x0FF00063, - Custom100 = 0x0FF00064, - Custom101 = 0x0FF00065, - Custom102 = 0x0FF00066, - Custom103 = 0x0FF00067, - Custom104 = 0x0FF00068, - Custom105 = 0x0FF00069, - Custom106 = 0x0FF0006A, - Custom107 = 0x0FF0006B, - Custom108 = 0x0FF0006C, - Custom109 = 0x0FF0006D, - Custom110 = 0x0FF0006E, - Custom111 = 0x0FF0006F, - Custom112 = 0x0FF00070, - Custom113 = 0x0FF00071, - Custom114 = 0x0FF00072, - Custom115 = 0x0FF00073, - Custom116 = 0x0FF00074, - Custom117 = 0x0FF00075, - Custom118 = 0x0FF00076, - Custom119 = 0x0FF00077, - Custom120 = 0x0FF00078, - Custom121 = 0x0FF00079, - Custom122 = 0x0FF0007A, - Custom123 = 0x0FF0007B, - Custom124 = 0x0FF0007C, - Custom125 = 0x0FF0007D, - Custom126 = 0x0FF0007E, - Custom127 = 0x0FF0007F, - Custom128 = 0x0FF00080, + Custom1 = 0x0FE00001, + Custom2 = 0x0FE00002, + Custom3 = 0x0FE00003, + Custom4 = 0x0FE00004, + Custom5 = 0x0FE00005, + Custom6 = 0x0FE00006, + Custom7 = 0x0FE00007, + Custom8 = 0x0FE00008, + Custom9 = 0x0FE00009, + Custom10 = 0x0FE0000A, + Custom11 = 0x0FE0000B, + Custom12 = 0x0FE0000C, + Custom13 = 0x0FE0000D, + Custom14 = 0x0FE0000E, + Custom15 = 0x0FE0000F, + Custom16 = 0x0FE00010, + Custom17 = 0x0FE00011, + Custom18 = 0x0FE00012, + Custom19 = 0x0FE00013, + Custom20 = 0x0FE00014, + Custom21 = 0x0FE00015, + Custom22 = 0x0FE00016, + Custom23 = 0x0FE00017, + Custom24 = 0x0FE00018, + Custom25 = 0x0FE00019, + Custom26 = 0x0FE0001A, + Custom27 = 0x0FE0001B, + Custom28 = 0x0FE0001C, + Custom29 = 0x0FE0001D, + Custom30 = 0x0FE0001E, + Custom31 = 0x0FE0001F, + Custom32 = 0x0FE00020, + Custom33 = 0x0FE00021, + Custom34 = 0x0FE00022, + Custom35 = 0x0FE00023, + Custom36 = 0x0FE00024, + Custom37 = 0x0FE00025, + Custom38 = 0x0FE00026, + Custom39 = 0x0FE00027, + Custom40 = 0x0FE00028, + Custom41 = 0x0FE00029, + Custom42 = 0x0FE0002A, + Custom43 = 0x0FE0002B, + Custom44 = 0x0FE0002C, + Custom45 = 0x0FE0002D, + Custom46 = 0x0FE0002E, + Custom47 = 0x0FE0002F, + Custom48 = 0x0FE00030, + Custom49 = 0x0FE00031, + Custom50 = 0x0FE00032, + Custom51 = 0x0FE00033, + Custom52 = 0x0FE00034, + Custom53 = 0x0FE00035, + Custom54 = 0x0FE00036, + Custom55 = 0x0FE00037, + Custom56 = 0x0FE00038, + Custom57 = 0x0FE00039, + Custom58 = 0x0FE0003A, + Custom59 = 0x0FE0003B, + Custom60 = 0x0FE0003C, + Custom61 = 0x0FE0003D, + Custom62 = 0x0FE0003E, + Custom63 = 0x0FE0003F, + Custom64 = 0x0FE00040, + Custom65 = 0x0FE00041, + Custom66 = 0x0FE00042, + Custom67 = 0x0FE00043, + Custom68 = 0x0FE00044, + Custom69 = 0x0FE00045, + Custom70 = 0x0FE00046, + Custom71 = 0x0FE00047, + Custom72 = 0x0FE00048, + Custom73 = 0x0FE00049, + Custom74 = 0x0FE0004A, + Custom75 = 0x0FE0004B, + Custom76 = 0x0FE0004C, + Custom77 = 0x0FE0004D, + Custom78 = 0x0FE0004E, + Custom79 = 0x0FE0004F, + Custom80 = 0x0FE00050, + Custom81 = 0x0FE00051, + Custom82 = 0x0FE00052, + Custom83 = 0x0FE00053, + Custom84 = 0x0FE00054, + Custom85 = 0x0FE00055, + Custom86 = 0x0FE00056, + Custom87 = 0x0FE00057, + Custom88 = 0x0FE00058, + Custom89 = 0x0FE00059, + Custom90 = 0x0FE0005A, + Custom91 = 0x0FE0005B, + Custom92 = 0x0FE0005C, + Custom93 = 0x0FE0005D, + Custom94 = 0x0FE0005E, + Custom95 = 0x0FE0005F, + Custom96 = 0x0FE00060, + Custom97 = 0x0FE00061, + Custom98 = 0x0FE00062, + Custom99 = 0x0FE00063, + Custom100 = 0x0FE00064, + Custom101 = 0x0FE00065, + Custom102 = 0x0FE00066, + Custom103 = 0x0FE00067, + Custom104 = 0x0FE00068, + Custom105 = 0x0FE00069, + Custom106 = 0x0FE0006A, + Custom107 = 0x0FE0006B, + Custom108 = 0x0FE0006C, + Custom109 = 0x0FE0006D, + Custom110 = 0x0FE0006E, + Custom111 = 0x0FE0006F, + Custom112 = 0x0FE00070, + Custom113 = 0x0FE00071, + Custom114 = 0x0FE00072, + Custom115 = 0x0FE00073, + Custom116 = 0x0FE00074, + Custom117 = 0x0FE00075, + Custom118 = 0x0FE00076, + Custom119 = 0x0FE00077, + Custom120 = 0x0FE00078, + Custom121 = 0x0FE00079, + Custom122 = 0x0FE0007A, + Custom123 = 0x0FE0007B, + Custom124 = 0x0FE0007C, + Custom125 = 0x0FE0007D, + Custom126 = 0x0FE0007E, + Custom127 = 0x0FE0007F, + Custom128 = 0x0FE00080, + + /*### Unknown ###*/ + Unknown1 = 0x0FF00001, + Unknown2 = 0x0FF00002, + Unknown3 = 0x0FF00003, + Unknown4 = 0x0FF00004, + Unknown5 = 0x0FF00005, + Unknown6 = 0x0FF00006, + Unknown7 = 0x0FF00007, + Unknown8 = 0x0FF00008, + Unknown9 = 0x0FF00009, + Unknown10 = 0x0FF0000A, + Unknown11 = 0x0FF0000B, + Unknown12 = 0x0FF0000C, + Unknown13 = 0x0FF0000D, + Unknown14 = 0x0FF0000E, + Unknown15 = 0x0FF0000F, + Unknown16 = 0x0FF00010, + Unknown17 = 0x0FF00011, + Unknown18 = 0x0FF00012, + Unknown19 = 0x0FF00013, + Unknown20 = 0x0FF00014, + Unknown21 = 0x0FF00015, + Unknown22 = 0x0FF00016, + Unknown23 = 0x0FF00017, + Unknown24 = 0x0FF00018, + Unknown25 = 0x0FF00019, + Unknown26 = 0x0FF0001A, + Unknown27 = 0x0FF0001B, + Unknown28 = 0x0FF0001C, + Unknown29 = 0x0FF0001D, + Unknown30 = 0x0FF0001E, + Unknown31 = 0x0FF0001F, + Unknown32 = 0x0FF00020, + Unknown33 = 0x0FF00021, + Unknown34 = 0x0FF00022, + Unknown35 = 0x0FF00023, + Unknown36 = 0x0FF00024, + Unknown37 = 0x0FF00025, + Unknown38 = 0x0FF00026, + Unknown39 = 0x0FF00027, + Unknown40 = 0x0FF00028, + Unknown41 = 0x0FF00029, + Unknown42 = 0x0FF0002A, + Unknown43 = 0x0FF0002B, + Unknown44 = 0x0FF0002C, + Unknown45 = 0x0FF0002D, + Unknown46 = 0x0FF0002E, + Unknown47 = 0x0FF0002F, + Unknown48 = 0x0FF00030, + Unknown49 = 0x0FF00031, + Unknown50 = 0x0FF00032, + Unknown51 = 0x0FF00033, + Unknown52 = 0x0FF00034, + Unknown53 = 0x0FF00035, + Unknown54 = 0x0FF00036, + Unknown55 = 0x0FF00037, + Unknown56 = 0x0FF00038, + Unknown57 = 0x0FF00039, + Unknown58 = 0x0FF0003A, + Unknown59 = 0x0FF0003B, + Unknown60 = 0x0FF0003C, + Unknown61 = 0x0FF0003D, + Unknown62 = 0x0FF0003E, + Unknown63 = 0x0FF0003F, + Unknown64 = 0x0FF00040, + Unknown65 = 0x0FF00041, + Unknown66 = 0x0FF00042, + Unknown67 = 0x0FF00043, + Unknown68 = 0x0FF00044, + Unknown69 = 0x0FF00045, + Unknown70 = 0x0FF00046, + Unknown71 = 0x0FF00047, + Unknown72 = 0x0FF00048, + Unknown73 = 0x0FF00049, + Unknown74 = 0x0FF0004A, + Unknown75 = 0x0FF0004B, + Unknown76 = 0x0FF0004C, + Unknown77 = 0x0FF0004D, + Unknown78 = 0x0FF0004E, + Unknown79 = 0x0FF0004F, + Unknown80 = 0x0FF00050, + Unknown81 = 0x0FF00051, + Unknown82 = 0x0FF00052, + Unknown83 = 0x0FF00053, + Unknown84 = 0x0FF00054, + Unknown85 = 0x0FF00055, + Unknown86 = 0x0FF00056, + Unknown87 = 0x0FF00057, + Unknown88 = 0x0FF00058, + Unknown89 = 0x0FF00059, + Unknown90 = 0x0FF0005A, + Unknown91 = 0x0FF0005B, + Unknown92 = 0x0FF0005C, + Unknown93 = 0x0FF0005D, + Unknown94 = 0x0FF0005E, + Unknown95 = 0x0FF0005F, + Unknown96 = 0x0FF00060, + Unknown97 = 0x0FF00061, + Unknown98 = 0x0FF00062, + Unknown99 = 0x0FF00063, + Unknown100 = 0x0FF00064, + Unknown101 = 0x0FF00065, + Unknown102 = 0x0FF00066, + Unknown103 = 0x0FF00067, + Unknown104 = 0x0FF00068, + Unknown105 = 0x0FF00069, + Unknown106 = 0x0FF0006A, + Unknown107 = 0x0FF0006B, + Unknown108 = 0x0FF0006C, + Unknown109 = 0x0FF0006D, + Unknown110 = 0x0FF0006E, + Unknown111 = 0x0FF0006F, + Unknown112 = 0x0FF00070, + Unknown113 = 0x0FF00071, + Unknown114 = 0x0FF00072, + Unknown115 = 0x0FF00073, + Unknown116 = 0x0FF00074, + Unknown117 = 0x0FF00075, + Unknown118 = 0x0FF00076, + Unknown119 = 0x0FF00077, + Unknown120 = 0x0FF00078, + Unknown121 = 0x0FF00079, + Unknown122 = 0x0FF0007A, + Unknown123 = 0x0FF0007B, + Unknown124 = 0x0FF0007C, + Unknown125 = 0x0FF0007D, + Unknown126 = 0x0FF0007E, + Unknown127 = 0x0FF0007F, + Unknown128 = 0x0FF00080, } } diff --git a/RGB.NET.Devices.Asus/AsusDeviceProvider.cs b/RGB.NET.Devices.Asus/AsusDeviceProvider.cs index 580ab42..68c545f 100644 --- a/RGB.NET.Devices.Asus/AsusDeviceProvider.cs +++ b/RGB.NET.Devices.Asus/AsusDeviceProvider.cs @@ -45,6 +45,7 @@ namespace RGB.NET.Devices.Asus protected override void InitializeSDK() { + // ReSharper disable once SuspiciousTypeConversion.Global _sdk = (IAuraSdk2)new AuraSdk(); _sdk.SwitchMode(); } @@ -64,9 +65,9 @@ namespace RGB.NET.Devices.Asus AsusDeviceType.VGA_RGB => new AsusGraphicsCardRGBDevice(new AsusRGBDeviceInfo(RGBDeviceType.GraphicsCard, device), GetUpdateTrigger()), AsusDeviceType.HEADSET_RGB => new AsusHeadsetRGBDevice(new AsusRGBDeviceInfo(RGBDeviceType.Headset, device), GetUpdateTrigger()), AsusDeviceType.DRAM_RGB => new AsusDramRGBDevice(new AsusRGBDeviceInfo(RGBDeviceType.DRAM, device), GetUpdateTrigger()), - AsusDeviceType.KEYBOARD_RGB => new AsusKeyboardRGBDevice(new AsusKeyboardRGBDeviceInfo(device), GetUpdateTrigger()), - AsusDeviceType.NB_KB_RGB => new AsusKeyboardRGBDevice(new AsusKeyboardRGBDeviceInfo(device), GetUpdateTrigger()), - AsusDeviceType.NB_KB_4ZONE_RGB => new AsusKeyboardRGBDevice(new AsusKeyboardRGBDeviceInfo(device), GetUpdateTrigger()), + AsusDeviceType.KEYBOARD_RGB => new AsusKeyboardRGBDevice(new AsusKeyboardRGBDeviceInfo(device), LedMappings.KeyboardMapping, GetUpdateTrigger()), + AsusDeviceType.NB_KB_RGB => new AsusKeyboardRGBDevice(new AsusKeyboardRGBDeviceInfo(device), LedMappings.KeyboardMapping, GetUpdateTrigger()), + AsusDeviceType.NB_KB_4ZONE_RGB => new AsusKeyboardRGBDevice(new AsusKeyboardRGBDeviceInfo(device), null, GetUpdateTrigger()), AsusDeviceType.MOUSE_RGB => new AsusMouseRGBDevice(new AsusRGBDeviceInfo(RGBDeviceType.Mouse, device), GetUpdateTrigger()), _ => new AsusUnspecifiedRGBDevice(new AsusRGBDeviceInfo(RGBDeviceType.Unknown, device), LedId.Custom1, GetUpdateTrigger()) }; diff --git a/RGB.NET.Devices.Asus/Enum/AsusLedId.cs b/RGB.NET.Devices.Asus/Enum/AsusLedId.cs index f56d64a..5a9a118 100644 --- a/RGB.NET.Devices.Asus/Enum/AsusLedId.cs +++ b/RGB.NET.Devices.Asus/Enum/AsusLedId.cs @@ -2,7 +2,10 @@ namespace RGB.NET.Devices.Asus { - internal enum AsusLedId : ushort + /// + /// Represents a LED ID as they are known by the ASUS SDK + /// + public enum AsusLedId : ushort { KEY_ESCAPE = 0x01, KEY_1 = 0x02, @@ -156,5 +159,6 @@ namespace RGB.NET.Devices.Asus UNDOCUMENTED_3 = 0x101, UNDOCUMENTED_4 = 0x102, UNDOCUMENTED_5 = 0x103, + UNDOCUMENTED_6 = 0xDA, // Bottom-left function on the ROG Zephyrus Duo 15 } } diff --git a/RGB.NET.Devices.Asus/Enum/AsusLedType.cs b/RGB.NET.Devices.Asus/Enum/AsusLedType.cs new file mode 100644 index 0000000..7134ccd --- /dev/null +++ b/RGB.NET.Devices.Asus/Enum/AsusLedType.cs @@ -0,0 +1,18 @@ +namespace RGB.NET.Devices.Asus +{ + /// + /// Represents a type of ASUS LED as known by the ASUS SDK + /// + public enum AsusLedType + { + /// + /// An ASUS LED that is present on a device's IAuraSyncKeyboard.Keys enumerable + /// + Key, + + /// + /// An ASUS LED that is present on a device's IAuraSyncDevice.Lights enumerable + /// + Light + } +} diff --git a/RGB.NET.Devices.Asus/Generic/AsusUpdateQueue.cs b/RGB.NET.Devices.Asus/Generic/AsusUpdateQueue.cs index 70b1a38..77d4540 100644 --- a/RGB.NET.Devices.Asus/Generic/AsusUpdateQueue.cs +++ b/RGB.NET.Devices.Asus/Generic/AsusUpdateQueue.cs @@ -42,28 +42,23 @@ namespace RGB.NET.Devices.Asus { if ((Device.Type == (uint)AsusDeviceType.KEYBOARD_RGB) || (Device.Type == (uint)AsusDeviceType.NB_KB_RGB)) { - foreach ((object key, Color value) in dataSet) + if (Device is not IAuraSyncKeyboard keyboard) + return; + + foreach ((object customData, Color value) in dataSet) { - AsusLedId index = (AsusLedId)key; - if (Device is IAuraSyncKeyboard keyboard) + (AsusLedType ledType, int id) = (AsusKeyboardLedCustomData)customData; + if (ledType == AsusLedType.Key) { - IAuraRgbLight light = index switch - { - //UK keyboard Layout - AsusLedId.KEY_OEM_102 => keyboard.Lights[(int)((3 * keyboard.Width) + 13)], - AsusLedId.UNDOCUMENTED_1 => keyboard.Lights[(int)((4 * keyboard.Width) + 1)], - _ => keyboard.Key[(ushort)index] - }; - - // Asus Strix Scope - if (keyboard.Name == "Charm") - light = index switch - { - AsusLedId.KEY_LWIN => keyboard.Lights[(int)((5 * keyboard.Width) + 2)], - AsusLedId.KEY_LMENU => keyboard.Lights[(int)((5 * keyboard.Width) + 3)], - _ => light - }; - + IAuraRgbLight light = keyboard.Key[(ushort)id]; + (_, byte r, byte g, byte b) = value.GetRGBBytes(); + light.Red = r; + light.Green = g; + light.Blue = b; + } + else + { + IAuraRgbLight light = keyboard.Lights[id]; (_, byte r, byte g, byte b) = value.GetRGBBytes(); light.Red = r; light.Green = g; @@ -88,8 +83,10 @@ namespace RGB.NET.Devices.Asus Device.Apply(); } catch - { /* "The server threw an exception." seems to be a thing here ... */ } + { /* "The server threw an exception." seems to be a thing here ... */ + } } + #endregion } } diff --git a/RGB.NET.Devices.Asus/Helper/WMIHelper.cs b/RGB.NET.Devices.Asus/Helper/WMIHelper.cs index 0a43046..42f599f 100644 --- a/RGB.NET.Devices.Asus/Helper/WMIHelper.cs +++ b/RGB.NET.Devices.Asus/Helper/WMIHelper.cs @@ -9,13 +9,15 @@ namespace RGB.NET.Devices.Asus #region Properties & Fields // ReSharper disable InconsistentNaming + private static readonly ManagementObjectSearcher? _systemModelSearcher; private static readonly ManagementObjectSearcher? _mainboardSearcher; private static readonly ManagementObjectSearcher? _graphicsCardSearcher; // ReSharper restore InconsistentNaming + private static string? _systemModelInfo; private static (string manufacturer, string model)? _mainboardInfo; private static string? _graphicsCardInfo; - + #endregion #region Constructors @@ -24,6 +26,7 @@ namespace RGB.NET.Devices.Asus { if (OperatingSystem.IsWindows()) { + _systemModelSearcher = new ManagementObjectSearcher(@"root\CIMV2", "SELECT Model FROM Win32_ComputerSystem"); _mainboardSearcher = new ManagementObjectSearcher(@"root\CIMV2", "SELECT Manufacturer,Product FROM Win32_BaseBoard"); _graphicsCardSearcher = new ManagementObjectSearcher(@"root\CIMV2", "SELECT Name FROM Win32_VideoController"); } @@ -33,6 +36,20 @@ namespace RGB.NET.Devices.Asus #region Methods + internal static string? GetSystemModelInfo() + { + if (!OperatingSystem.IsWindows()) return null; + + if ((_systemModelInfo == null) && (_systemModelSearcher != null)) + foreach (ManagementBaseObject managementBaseObject in _systemModelSearcher.Get()) + { + _systemModelInfo = managementBaseObject["Model"]?.ToString(); + break; + } + + return _systemModelInfo; + } + internal static (string manufacturer, string model)? GetMainboardInfo() { if (!OperatingSystem.IsWindows()) return null; diff --git a/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardLedMapping.cs b/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardLedMapping.cs index 3b9f802..30fd811 100644 --- a/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardLedMapping.cs +++ b/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardLedMapping.cs @@ -1,161 +1,189 @@ -using System.Collections.Generic; -using RGB.NET.Core; +using RGB.NET.Core; namespace RGB.NET.Devices.Asus { - internal static class AsusKeyboardLedMapping + public static class LedMappings { - public static readonly Dictionary MAPPING = new() - { - { LedId.Keyboard_Escape, AsusLedId.KEY_ESCAPE }, - { LedId.Keyboard_F1, AsusLedId.KEY_F1 }, - { LedId.Keyboard_F2, AsusLedId.KEY_F2 }, - { LedId.Keyboard_F3, AsusLedId.KEY_F3 }, - { LedId.Keyboard_F4, AsusLedId.KEY_F4 }, - { LedId.Keyboard_F5, AsusLedId.KEY_F5 }, - { LedId.Keyboard_F6, AsusLedId.KEY_F6 }, - { LedId.Keyboard_F7, AsusLedId.KEY_F7 }, - { LedId.Keyboard_F8, AsusLedId.KEY_F8 }, - { LedId.Keyboard_F9, AsusLedId.KEY_F9 }, - { LedId.Keyboard_F10, AsusLedId.KEY_F10 }, - { LedId.Keyboard_F11, AsusLedId.KEY_F11 }, - { LedId.Keyboard_F12, AsusLedId.KEY_F12 }, - { LedId.Keyboard_1, AsusLedId.KEY_1 }, - { LedId.Keyboard_2, AsusLedId.KEY_2 }, - { LedId.Keyboard_3, AsusLedId.KEY_3 }, - { LedId.Keyboard_4, AsusLedId.KEY_4 }, - { LedId.Keyboard_5, AsusLedId.KEY_5 }, - { LedId.Keyboard_6, AsusLedId.KEY_6 }, - { LedId.Keyboard_7, AsusLedId.KEY_7 }, - { LedId.Keyboard_8, AsusLedId.KEY_8 }, - { LedId.Keyboard_9, AsusLedId.KEY_9 }, - { LedId.Keyboard_0, AsusLedId.KEY_0 }, - { LedId.Keyboard_MinusAndUnderscore, AsusLedId.KEY_MINUS }, - { LedId.Keyboard_EqualsAndPlus, AsusLedId.KEY_EQUALS }, - { LedId.Keyboard_Backspace, AsusLedId.KEY_BACK }, - { LedId.Keyboard_Tab, AsusLedId.KEY_TAB }, - { LedId.Keyboard_Q, AsusLedId.KEY_Q }, - { LedId.Keyboard_W, AsusLedId.KEY_W }, - { LedId.Keyboard_E, AsusLedId.KEY_E }, - { LedId.Keyboard_R, AsusLedId.KEY_R }, - { LedId.Keyboard_T, AsusLedId.KEY_T }, - { LedId.Keyboard_Y, AsusLedId.KEY_Y }, - { LedId.Keyboard_U, AsusLedId.KEY_U }, - { LedId.Keyboard_I, AsusLedId.KEY_I }, - { LedId.Keyboard_O, AsusLedId.KEY_O }, - { LedId.Keyboard_P, AsusLedId.KEY_P }, - { LedId.Keyboard_BracketLeft, AsusLedId.KEY_LBRACKET }, - { LedId.Keyboard_BracketRight, AsusLedId.KEY_RBRACKET }, - { LedId.Keyboard_Enter, AsusLedId.KEY_RETURN }, - { LedId.Keyboard_CapsLock, AsusLedId.KEY_CAPITAL }, - { LedId.Keyboard_A, AsusLedId.KEY_A }, - { LedId.Keyboard_S, AsusLedId.KEY_S }, - { LedId.Keyboard_D, AsusLedId.KEY_D }, - { LedId.Keyboard_F, AsusLedId.KEY_F }, - { LedId.Keyboard_G, AsusLedId.KEY_G }, - { LedId.Keyboard_H, AsusLedId.KEY_H }, - { LedId.Keyboard_J, AsusLedId.KEY_J }, - { LedId.Keyboard_K, AsusLedId.KEY_K }, - { LedId.Keyboard_L, AsusLedId.KEY_L }, - { LedId.Keyboard_SemicolonAndColon, AsusLedId.KEY_SEMICOLON }, - { LedId.Keyboard_ApostropheAndDoubleQuote, AsusLedId.KEY_APOSTROPHE }, - { LedId.Keyboard_GraveAccentAndTilde, AsusLedId.KEY_GRAVE }, - { LedId.Keyboard_LeftShift, AsusLedId.KEY_LSHIFT }, - { LedId.Keyboard_Backslash, AsusLedId.KEY_BACKSLASH }, - { LedId.Keyboard_Z, AsusLedId.KEY_Z }, - { LedId.Keyboard_X, AsusLedId.KEY_X }, - { LedId.Keyboard_C, AsusLedId.KEY_C }, - { LedId.Keyboard_V, AsusLedId.KEY_V }, - { LedId.Keyboard_B, AsusLedId.KEY_B }, - { LedId.Keyboard_N, AsusLedId.KEY_N }, - { LedId.Keyboard_M, AsusLedId.KEY_M }, - { LedId.Keyboard_CommaAndLessThan, AsusLedId.KEY_COMMA }, - { LedId.Keyboard_PeriodAndBiggerThan, AsusLedId.KEY_PERIOD }, - { LedId.Keyboard_SlashAndQuestionMark, AsusLedId.KEY_SLASH }, - { LedId.Keyboard_RightShift, AsusLedId.KEY_RSHIFT }, - { LedId.Keyboard_LeftCtrl, AsusLedId.KEY_LCONTROL }, - { LedId.Keyboard_LeftGui, AsusLedId.KEY_LWIN }, - { LedId.Keyboard_LeftAlt, AsusLedId.KEY_LMENU }, - { LedId.Keyboard_Space, AsusLedId.KEY_SPACE }, - { LedId.Keyboard_RightAlt, AsusLedId.KEY_RMENU }, - { LedId.Keyboard_RightGui, AsusLedId.KEY_RWIN }, - { LedId.Keyboard_Application, AsusLedId.KEY_APPS }, - { LedId.Keyboard_RightCtrl, AsusLedId.KEY_RCONTROL }, - { LedId.Keyboard_PrintScreen, AsusLedId.KEY_SYSRQ }, - { LedId.Keyboard_ScrollLock, AsusLedId.KEY_SCROLL }, - { LedId.Keyboard_PauseBreak, AsusLedId.KEY_PAUSE }, - { LedId.Keyboard_Insert, AsusLedId.KEY_INSERT }, - { LedId.Keyboard_Home, AsusLedId.KEY_HOME }, - { LedId.Keyboard_PageUp, AsusLedId.KEY_PRIOR }, - { LedId.Keyboard_Delete, AsusLedId.KEY_DELETE }, - { LedId.Keyboard_End, AsusLedId.KEY_END }, - { LedId.Keyboard_PageDown, AsusLedId.KEY_NEXT }, - { LedId.Keyboard_ArrowUp, AsusLedId.KEY_UP }, - { LedId.Keyboard_ArrowLeft, AsusLedId.KEY_LEFT }, - { LedId.Keyboard_ArrowDown, AsusLedId.KEY_DOWN }, - { LedId.Keyboard_ArrowRight, AsusLedId.KEY_RIGHT }, - { LedId.Keyboard_NumLock, AsusLedId.KEY_NUMLOCK }, - { LedId.Keyboard_NumSlash, AsusLedId.KEY_DIVIDE }, - { LedId.Keyboard_NumAsterisk, AsusLedId.KEY_MULTIPLY }, - { LedId.Keyboard_NumMinus, AsusLedId.KEY_SUBTRACT }, - { LedId.Keyboard_Num7, AsusLedId.KEY_NUMPAD7 }, - { LedId.Keyboard_Num8, AsusLedId.KEY_NUMPAD8 }, - { LedId.Keyboard_Num9, AsusLedId.KEY_NUMPAD9 }, - { LedId.Keyboard_NumPeriodAndDelete, AsusLedId.KEY_DECIMAL }, - { LedId.Keyboard_NumPlus, AsusLedId.KEY_ADD }, - { LedId.Keyboard_Num4, AsusLedId.KEY_NUMPAD4 }, - { LedId.Keyboard_Num5, AsusLedId.KEY_NUMPAD5 }, - { LedId.Keyboard_Num6, AsusLedId.KEY_NUMPAD6 }, - { LedId.Keyboard_Num1, AsusLedId.KEY_NUMPAD1 }, - { LedId.Keyboard_Num2, AsusLedId.KEY_NUMPAD2 }, - { LedId.Keyboard_Num3, AsusLedId.KEY_NUMPAD3 }, - { LedId.Keyboard_Num0, AsusLedId.KEY_NUMPAD0 }, - { LedId.Keyboard_NumEnter, AsusLedId.KEY_NUMPADENTER }, - { LedId.Keyboard_NonUsBackslash, AsusLedId.UNDOCUMENTED_1 }, - { LedId.Keyboard_NonUsTilde, AsusLedId.UNDOCUMENTED_2 }, - { LedId.Keyboard_NumComma, AsusLedId.KEY_NUMPADCOMMA }, - { LedId.Logo, AsusLedId.UNDOCUMENTED_3 }, - { LedId.Keyboard_Custom1, AsusLedId.UNDOCUMENTED_4 }, - { LedId.Keyboard_Custom2, AsusLedId.UNDOCUMENTED_5 }, - { LedId.Keyboard_Custom3, AsusLedId.KEY_F13 }, - { LedId.Keyboard_Custom4, AsusLedId.KEY_F14 }, - { LedId.Keyboard_Custom5, AsusLedId.KEY_F15 }, - { LedId.Keyboard_Custom6, AsusLedId.KEY_KANA }, - { LedId.Keyboard_Custom7, AsusLedId.KEY_ABNT_C1 }, - { LedId.Keyboard_Custom8, AsusLedId.KEY_CONVERT }, - { LedId.Keyboard_Custom9, AsusLedId.KEY_NOCONVERT }, - { LedId.Keyboard_Custom10, AsusLedId.KEY_YEN }, - { LedId.Keyboard_Custom11, AsusLedId.KEY_ABNT_C2 }, - { LedId.Keyboard_Custom12, AsusLedId.KEY_NUMPADEQUALS }, - { LedId.Keyboard_Custom13, AsusLedId.KEY_CIRCUMFLEX }, - { LedId.Keyboard_Custom14, AsusLedId.KEY_AT }, - { LedId.Keyboard_Custom15, AsusLedId.KEY_COLON }, - { LedId.Keyboard_Custom16, AsusLedId.KEY_UNDERLINE }, - { LedId.Keyboard_Custom17, AsusLedId.KEY_KANJI }, - { LedId.Keyboard_Custom18, AsusLedId.KEY_STOP }, - { LedId.Keyboard_Custom19, AsusLedId.KEY_AX }, - { LedId.Keyboard_Custom20, AsusLedId.KEY_UNLABELED }, - { LedId.Keyboard_Custom21, AsusLedId.KEY_NEXTTRACK }, - { LedId.Keyboard_Custom22, AsusLedId.KEY_CALCULATOR }, - { LedId.Keyboard_Custom23, AsusLedId.KEY_POWER }, - { LedId.Keyboard_Custom24, AsusLedId.KEY_SLEEP }, - { LedId.Keyboard_Custom25, AsusLedId.KEY_WAKE }, - { LedId.Keyboard_Custom26, AsusLedId.KEY_WEBSEARCH }, - { LedId.Keyboard_Custom27, AsusLedId.KEY_WEBFAVORITES }, - { LedId.Keyboard_Custom28, AsusLedId.KEY_WEBREFRESH }, - { LedId.Keyboard_Custom29, AsusLedId.KEY_WEBSTOP }, - { LedId.Keyboard_Custom30, AsusLedId.KEY_WEBFORWARD }, - { LedId.Keyboard_Custom31, AsusLedId.KEY_WEBHOME }, - { LedId.Keyboard_Custom32, AsusLedId.KEY_WEBBACK }, - { LedId.Keyboard_Custom33, AsusLedId.KEY_MYCOMPUTER }, - { LedId.Keyboard_Custom34, AsusLedId.KEY_MAIL }, - { LedId.Keyboard_Custom35, AsusLedId.KEY_MEDIASELECT }, - { LedId.Keyboard_Custom36, AsusLedId.KEY_FN }, - { LedId.Keyboard_MediaMute, AsusLedId.KEY_MUTE }, - { LedId.Keyboard_MediaPlay, AsusLedId.KEY_PLAYPAUSE }, - { LedId.Keyboard_MediaStop, AsusLedId.KEY_MEDIASTOP }, - { LedId.Keyboard_MediaVolumeDown, AsusLedId.KEY_VOLUMEDOWN }, - { LedId.Keyboard_MediaVolumeUp, AsusLedId.KEY_VOLUMEUP }, - }; + /// + /// A LED mapping containing ASUS keyboard LED IDs + /// + public static readonly LedMapping KeyboardMapping = + new() + { + {LedId.Keyboard_Escape, AsusLedId.KEY_ESCAPE}, + {LedId.Keyboard_F1, AsusLedId.KEY_F1}, + {LedId.Keyboard_F2, AsusLedId.KEY_F2}, + {LedId.Keyboard_F3, AsusLedId.KEY_F3}, + {LedId.Keyboard_F4, AsusLedId.KEY_F4}, + {LedId.Keyboard_F5, AsusLedId.KEY_F5}, + {LedId.Keyboard_F6, AsusLedId.KEY_F6}, + {LedId.Keyboard_F7, AsusLedId.KEY_F7}, + {LedId.Keyboard_F8, AsusLedId.KEY_F8}, + {LedId.Keyboard_F9, AsusLedId.KEY_F9}, + {LedId.Keyboard_F10, AsusLedId.KEY_F10}, + {LedId.Keyboard_F11, AsusLedId.KEY_F11}, + {LedId.Keyboard_F12, AsusLedId.KEY_F12}, + {LedId.Keyboard_1, AsusLedId.KEY_1}, + {LedId.Keyboard_2, AsusLedId.KEY_2}, + {LedId.Keyboard_3, AsusLedId.KEY_3}, + {LedId.Keyboard_4, AsusLedId.KEY_4}, + {LedId.Keyboard_5, AsusLedId.KEY_5}, + {LedId.Keyboard_6, AsusLedId.KEY_6}, + {LedId.Keyboard_7, AsusLedId.KEY_7}, + {LedId.Keyboard_8, AsusLedId.KEY_8}, + {LedId.Keyboard_9, AsusLedId.KEY_9}, + {LedId.Keyboard_0, AsusLedId.KEY_0}, + {LedId.Keyboard_MinusAndUnderscore, AsusLedId.KEY_MINUS}, + {LedId.Keyboard_EqualsAndPlus, AsusLedId.KEY_EQUALS}, + {LedId.Keyboard_Backspace, AsusLedId.KEY_BACK}, + {LedId.Keyboard_Tab, AsusLedId.KEY_TAB}, + {LedId.Keyboard_Q, AsusLedId.KEY_Q}, + {LedId.Keyboard_W, AsusLedId.KEY_W}, + {LedId.Keyboard_E, AsusLedId.KEY_E}, + {LedId.Keyboard_R, AsusLedId.KEY_R}, + {LedId.Keyboard_T, AsusLedId.KEY_T}, + {LedId.Keyboard_Y, AsusLedId.KEY_Y}, + {LedId.Keyboard_U, AsusLedId.KEY_U}, + {LedId.Keyboard_I, AsusLedId.KEY_I}, + {LedId.Keyboard_O, AsusLedId.KEY_O}, + {LedId.Keyboard_P, AsusLedId.KEY_P}, + {LedId.Keyboard_BracketLeft, AsusLedId.KEY_LBRACKET}, + {LedId.Keyboard_BracketRight, AsusLedId.KEY_RBRACKET}, + {LedId.Keyboard_Enter, AsusLedId.KEY_RETURN}, + {LedId.Keyboard_CapsLock, AsusLedId.KEY_CAPITAL}, + {LedId.Keyboard_A, AsusLedId.KEY_A}, + {LedId.Keyboard_S, AsusLedId.KEY_S}, + {LedId.Keyboard_D, AsusLedId.KEY_D}, + {LedId.Keyboard_F, AsusLedId.KEY_F}, + {LedId.Keyboard_G, AsusLedId.KEY_G}, + {LedId.Keyboard_H, AsusLedId.KEY_H}, + {LedId.Keyboard_J, AsusLedId.KEY_J}, + {LedId.Keyboard_K, AsusLedId.KEY_K}, + {LedId.Keyboard_L, AsusLedId.KEY_L}, + {LedId.Keyboard_SemicolonAndColon, AsusLedId.KEY_SEMICOLON}, + {LedId.Keyboard_ApostropheAndDoubleQuote, AsusLedId.KEY_APOSTROPHE}, + {LedId.Keyboard_GraveAccentAndTilde, AsusLedId.KEY_GRAVE}, + {LedId.Keyboard_LeftShift, AsusLedId.KEY_LSHIFT}, + {LedId.Keyboard_Backslash, AsusLedId.KEY_BACKSLASH}, + {LedId.Keyboard_Z, AsusLedId.KEY_Z}, + {LedId.Keyboard_X, AsusLedId.KEY_X}, + {LedId.Keyboard_C, AsusLedId.KEY_C}, + {LedId.Keyboard_V, AsusLedId.KEY_V}, + {LedId.Keyboard_B, AsusLedId.KEY_B}, + {LedId.Keyboard_N, AsusLedId.KEY_N}, + {LedId.Keyboard_M, AsusLedId.KEY_M}, + {LedId.Keyboard_CommaAndLessThan, AsusLedId.KEY_COMMA}, + {LedId.Keyboard_PeriodAndBiggerThan, AsusLedId.KEY_PERIOD}, + {LedId.Keyboard_SlashAndQuestionMark, AsusLedId.KEY_SLASH}, + {LedId.Keyboard_RightShift, AsusLedId.KEY_RSHIFT}, + {LedId.Keyboard_LeftCtrl, AsusLedId.KEY_LCONTROL}, + {LedId.Keyboard_LeftGui, AsusLedId.KEY_LWIN}, + {LedId.Keyboard_LeftAlt, AsusLedId.KEY_LMENU}, + {LedId.Keyboard_Space, AsusLedId.KEY_SPACE}, + {LedId.Keyboard_RightAlt, AsusLedId.KEY_RMENU}, + {LedId.Keyboard_RightGui, AsusLedId.KEY_RWIN}, + {LedId.Keyboard_Application, AsusLedId.KEY_APPS}, + {LedId.Keyboard_RightCtrl, AsusLedId.KEY_RCONTROL}, + {LedId.Keyboard_PrintScreen, AsusLedId.KEY_SYSRQ}, + {LedId.Keyboard_ScrollLock, AsusLedId.KEY_SCROLL}, + {LedId.Keyboard_PauseBreak, AsusLedId.KEY_PAUSE}, + {LedId.Keyboard_Insert, AsusLedId.KEY_INSERT}, + {LedId.Keyboard_Home, AsusLedId.KEY_HOME}, + {LedId.Keyboard_PageUp, AsusLedId.KEY_PRIOR}, + {LedId.Keyboard_Delete, AsusLedId.KEY_DELETE}, + {LedId.Keyboard_End, AsusLedId.KEY_END}, + {LedId.Keyboard_PageDown, AsusLedId.KEY_NEXT}, + {LedId.Keyboard_ArrowUp, AsusLedId.KEY_UP}, + {LedId.Keyboard_ArrowLeft, AsusLedId.KEY_LEFT}, + {LedId.Keyboard_ArrowDown, AsusLedId.KEY_DOWN}, + {LedId.Keyboard_ArrowRight, AsusLedId.KEY_RIGHT}, + {LedId.Keyboard_NumLock, AsusLedId.KEY_NUMLOCK}, + {LedId.Keyboard_NumSlash, AsusLedId.KEY_DIVIDE}, + {LedId.Keyboard_NumAsterisk, AsusLedId.KEY_MULTIPLY}, + {LedId.Keyboard_NumMinus, AsusLedId.KEY_SUBTRACT}, + {LedId.Keyboard_Num7, AsusLedId.KEY_NUMPAD7}, + {LedId.Keyboard_Num8, AsusLedId.KEY_NUMPAD8}, + {LedId.Keyboard_Num9, AsusLedId.KEY_NUMPAD9}, + {LedId.Keyboard_NumPeriodAndDelete, AsusLedId.KEY_DECIMAL}, + {LedId.Keyboard_NumPlus, AsusLedId.KEY_ADD}, + {LedId.Keyboard_Num4, AsusLedId.KEY_NUMPAD4}, + {LedId.Keyboard_Num5, AsusLedId.KEY_NUMPAD5}, + {LedId.Keyboard_Num6, AsusLedId.KEY_NUMPAD6}, + {LedId.Keyboard_Num1, AsusLedId.KEY_NUMPAD1}, + {LedId.Keyboard_Num2, AsusLedId.KEY_NUMPAD2}, + {LedId.Keyboard_Num3, AsusLedId.KEY_NUMPAD3}, + {LedId.Keyboard_Num0, AsusLedId.KEY_NUMPAD0}, + {LedId.Keyboard_NumEnter, AsusLedId.KEY_NUMPADENTER}, + {LedId.Keyboard_NonUsBackslash, AsusLedId.UNDOCUMENTED_1}, + {LedId.Keyboard_NonUsTilde, AsusLedId.UNDOCUMENTED_2}, + {LedId.Keyboard_NumComma, AsusLedId.KEY_NUMPADCOMMA}, + {LedId.Logo, AsusLedId.UNDOCUMENTED_3}, + {LedId.Keyboard_Function, AsusLedId.KEY_FN}, + {LedId.Keyboard_MediaMute, AsusLedId.KEY_MUTE}, + {LedId.Keyboard_MediaPlay, AsusLedId.KEY_PLAYPAUSE}, + {LedId.Keyboard_MediaStop, AsusLedId.KEY_MEDIASTOP}, + {LedId.Keyboard_MediaVolumeDown, AsusLedId.KEY_VOLUMEDOWN}, + {LedId.Keyboard_MediaVolumeUp, AsusLedId.KEY_VOLUMEUP}, + {LedId.Keyboard_Custom1, AsusLedId.KEY_F13}, + {LedId.Keyboard_Custom2, AsusLedId.KEY_F14}, + {LedId.Keyboard_Custom3, AsusLedId.KEY_F15}, + {LedId.Keyboard_Custom4, AsusLedId.KEY_KANA}, + {LedId.Keyboard_Custom5, AsusLedId.KEY_ABNT_C1}, + {LedId.Keyboard_Custom6, AsusLedId.KEY_CONVERT}, + {LedId.Keyboard_Custom7, AsusLedId.KEY_NOCONVERT}, + {LedId.Keyboard_Custom8, AsusLedId.KEY_YEN}, + {LedId.Keyboard_Custom9, AsusLedId.KEY_ABNT_C2}, + {LedId.Keyboard_Custom10, AsusLedId.KEY_NUMPADEQUALS}, + {LedId.Keyboard_Custom11, AsusLedId.KEY_CIRCUMFLEX}, + {LedId.Keyboard_Custom12, AsusLedId.KEY_AT}, + {LedId.Keyboard_Custom13, AsusLedId.KEY_COLON}, + {LedId.Keyboard_Custom14, AsusLedId.KEY_UNDERLINE}, + {LedId.Keyboard_Custom15, AsusLedId.KEY_KANJI}, + {LedId.Keyboard_Custom16, AsusLedId.KEY_STOP}, + {LedId.Keyboard_Custom17, AsusLedId.KEY_AX}, + {LedId.Keyboard_Custom18, AsusLedId.KEY_UNLABELED}, + {LedId.Keyboard_Custom19, AsusLedId.KEY_NEXTTRACK}, + {LedId.Keyboard_Custom20, AsusLedId.KEY_CALCULATOR}, + {LedId.Keyboard_Custom21, AsusLedId.KEY_POWER}, + {LedId.Keyboard_Custom22, AsusLedId.KEY_SLEEP}, + {LedId.Keyboard_Custom23, AsusLedId.KEY_WAKE}, + {LedId.Keyboard_Custom24, AsusLedId.KEY_WEBSEARCH}, + {LedId.Keyboard_Custom25, AsusLedId.KEY_WEBFAVORITES}, + {LedId.Keyboard_Custom26, AsusLedId.KEY_WEBREFRESH}, + {LedId.Keyboard_Custom27, AsusLedId.KEY_WEBSTOP}, + {LedId.Keyboard_Custom28, AsusLedId.KEY_WEBFORWARD}, + {LedId.Keyboard_Custom29, AsusLedId.KEY_WEBHOME}, + {LedId.Keyboard_Custom30, AsusLedId.KEY_WEBBACK}, + {LedId.Keyboard_Custom31, AsusLedId.KEY_MYCOMPUTER}, + {LedId.Keyboard_Custom32, AsusLedId.KEY_MAIL}, + {LedId.Keyboard_Custom33, AsusLedId.KEY_MEDIASELECT}, + {LedId.Keyboard_Custom34, AsusLedId.UNDOCUMENTED_4}, + {LedId.Keyboard_Custom35, AsusLedId.UNDOCUMENTED_5}, + {LedId.Keyboard_Custom36, AsusLedId.UNDOCUMENTED_6} + }; + + /// + /// A LED mapping containing extra lights for the ROG Zephyrus Duo 15 + /// + /// ASUS notebooks have extra lights under wide keys like space and backspace, these do not appear as keys on the device. + /// Instead they only appear in the Lights enumerable, this mapping maps LED IDs to the index of these lights. + /// + /// You may add more of these by further populating . + /// + public static readonly LedMapping ROGZephyrusDuo15 = + new() + { + {LedId.Keyboard_Custom50, 39}, // Mapping starts at Custom50 to avoid possible conflicts with KeyboardMapping above + {LedId.Keyboard_Custom51, 40}, + {LedId.Keyboard_Custom52, 55}, + {LedId.Keyboard_Custom53, 57}, + {LedId.Keyboard_Custom54, 97}, + {LedId.Keyboard_Custom55, 99}, + {LedId.Keyboard_Custom56, 118}, + {LedId.Keyboard_Custom57, 120}, + {LedId.Keyboard_Custom58, 130}, + {LedId.Keyboard_Custom59, 131}, + {LedId.Keyboard_Custom60, 133}, + }; } } diff --git a/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDevice.cs b/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDevice.cs index 28cfbec..f2a02c9 100644 --- a/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDevice.cs +++ b/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDevice.cs @@ -1,10 +1,21 @@ using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; using AuraServiceLib; using RGB.NET.Core; namespace RGB.NET.Devices.Asus { + /// + /// Represents custom LED data for ASUS keyboard LEDs. + /// + public record AsusKeyboardLedCustomData(AsusLedType LedType, int Id); + + /// + /// Represents a record containing regex that matches to an ASUS device model and a LED mapping mapping to Light indexes. + /// + public record AsusKeyboardExtraMapping(Regex Regex, LedMapping LedMapping); + /// /// /// Represents a Asus keyboard. @@ -13,8 +24,22 @@ namespace RGB.NET.Devices.Asus { #region Properties & Fields + private readonly LedMapping? _ledMapping; + private Dictionary _ledAsusLed = new(); + private Dictionary _ledAsusLights = new(); + IKeyboardDeviceInfo IKeyboard.DeviceInfo => DeviceInfo; + /// + /// Gets or sets a list of extra LED mappings to apply to modes that match the provided regex + /// Note: These LED mappings should be based on light indexes + /// + public static List ExtraLedMappings = + new() + { + new AsusKeyboardExtraMapping(new Regex("(ROG Zephyrus Duo 15).*?"), LedMappings.ROGZephyrusDuo15) + }; + #endregion #region Constructors @@ -24,9 +49,11 @@ namespace RGB.NET.Devices.Asus /// Initializes a new instance of the class. /// /// The specific information provided by Asus for the keyboard. - internal AsusKeyboardRGBDevice(AsusKeyboardRGBDeviceInfo info, IDeviceUpdateTrigger updateTrigger) + internal AsusKeyboardRGBDevice(AsusKeyboardRGBDeviceInfo info, LedMapping? ledMapping, IDeviceUpdateTrigger updateTrigger) : base(info, updateTrigger) { + this._ledMapping = ledMapping; + InitializeLayout(); } @@ -36,18 +63,29 @@ namespace RGB.NET.Devices.Asus private void InitializeLayout() { - Dictionary reversedMapping = AsusKeyboardLedMapping.MAPPING.ToDictionary(x => x.Value, x => x.Key); - if (DeviceInfo.Device.Type != (uint)AsusDeviceType.NB_KB_4ZONE_RGB) { int pos = 0; + int unknownLed = (int)LedId.Unknown1; + foreach (IAuraRgbKey key in ((IAuraSyncKeyboard)DeviceInfo.Device).Keys) - AddLed(reversedMapping[(AsusLedId)key.Code], new Point(pos++ * 19, 0), new Size(19, 19)); + { + if ((_ledMapping != null) && _ledMapping.TryGetValue((AsusLedId)key.Code, out LedId ledId)) + AddAsusLed((AsusLedId)key.Code, ledId, new Point(pos++ * 19, 0), new Size(19, 19)); + else + { + AddAsusLed((AsusLedId)key.Code, (LedId)unknownLed, new Point(pos++ * 19, 0), new Size(19, 19)); + unknownLed++; + } + } - //UK Layout - AddLed(reversedMapping[AsusLedId.KEY_OEM_102], new Point(pos++ * 19, 0), new Size(19, 19)); - - AddLed(reversedMapping[AsusLedId.UNDOCUMENTED_1], new Point(pos * 19, 0), new Size(19, 19)); + // Add extra LED mapping if required + AsusKeyboardExtraMapping? extraMapping = ExtraLedMappings.FirstOrDefault(m => m.Regex.IsMatch(this.DeviceInfo.Model)); + if (extraMapping != null) + { + foreach ((LedId ledId, int lightIndex) in extraMapping.LedMapping) + AddAsusLed(lightIndex, ledId, new Point(pos++ * 19, 0), new Size(19, 19)); + } } else { @@ -60,10 +98,33 @@ namespace RGB.NET.Devices.Asus /// protected override object? GetLedCustomData(LedId ledId) { - if (DeviceInfo.Device.Type == (uint)AsusDeviceType.NB_KB_4ZONE_RGB) - return ledId - LedId.Keyboard_Custom1; + if (this._ledAsusLed.TryGetValue(ledId, out AsusLedId asusLedId)) + return new AsusKeyboardLedCustomData(AsusLedType.Key, (int)asusLedId); + if (this._ledAsusLights.TryGetValue(ledId, out int lightIndex)) + return new AsusKeyboardLedCustomData(AsusLedType.Light, lightIndex); + return null; + } - return AsusKeyboardLedMapping.MAPPING[ledId]; + /// + /// Add an ASUS LED by its LED ID + /// + private void AddAsusLed(AsusLedId asusLedId, LedId ledId, Point position, Size size) + { + if (this._ledAsusLed.TryGetValue(ledId, out AsusLedId firstAsusLed)) + throw new RGBDeviceException($"Got LED '{ledId}' twice, first ASUS LED '{firstAsusLed}' " + + $"second ASUS LED '{asusLedId}' on device '{DeviceInfo.DeviceName}'"); + + this._ledAsusLed.Add(ledId, asusLedId); + AddLed(ledId, position, size); + } + + /// + /// Add an ASUS LED by its light index + /// + private void AddAsusLed(int index, LedId ledId, Point position, Size size) + { + this._ledAsusLights.Add(ledId, index); + AddLed(ledId, position, size); } #endregion diff --git a/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDeviceInfo.cs b/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDeviceInfo.cs index a74ab1b..0301934 100644 --- a/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDeviceInfo.cs @@ -1,4 +1,5 @@ -using AuraServiceLib; +using System.Collections.Generic; +using AuraServiceLib; using RGB.NET.Core; namespace RGB.NET.Devices.Asus @@ -10,6 +11,12 @@ namespace RGB.NET.Devices.Asus { #region Properties & Fields + /// + /// The ASUS SDK returns useless names for notebook keyboards, possibly for others as well. + /// Keep a list of those and rely on to get the real model + /// + private static List GenericDeviceNames = new() {"NotebookKeyboard"}; + /// public KeyboardLayoutType Layout => KeyboardLayoutType.Unknown; @@ -23,9 +30,18 @@ namespace RGB.NET.Devices.Asus /// /// The backing this RGB.NET device. internal AsusKeyboardRGBDeviceInfo(IAuraSyncDevice device) - : base(RGBDeviceType.Keyboard, device, device.Name) + : base(RGBDeviceType.Keyboard, device, GetKeyboardModel(device.Name)) { } #endregion + + #region Methods + + private static string? GetKeyboardModel(string deviceName) + { + return GenericDeviceNames.Contains(deviceName) ? WMIHelper.GetSystemModelInfo() : deviceName; + } + + #endregion } }