1
0
mirror of https://github.com/DarthAffe/RGB.NET.git synced 2026-01-01 18:23:38 +00:00

Compare commits

..

No commits in common. "d3335b20ae58500ae5671d6f9b6e7995e72217e8" and "91d380ed401ab40d929cdbe343299b3b4d1d17ba" have entirely different histories.

13 changed files with 347 additions and 639 deletions

View File

@ -1236,263 +1236,133 @@ namespace RGB.NET.Core
Cooler64 = 0x00D00040, Cooler64 = 0x00D00040,
/*### Custom ###*/ /*### Custom ###*/
Custom1 = 0x0FE00001, Custom1 = 0x0FF00001,
Custom2 = 0x0FE00002, Custom2 = 0x0FF00002,
Custom3 = 0x0FE00003, Custom3 = 0x0FF00003,
Custom4 = 0x0FE00004, Custom4 = 0x0FF00004,
Custom5 = 0x0FE00005, Custom5 = 0x0FF00005,
Custom6 = 0x0FE00006, Custom6 = 0x0FF00006,
Custom7 = 0x0FE00007, Custom7 = 0x0FF00007,
Custom8 = 0x0FE00008, Custom8 = 0x0FF00008,
Custom9 = 0x0FE00009, Custom9 = 0x0FF00009,
Custom10 = 0x0FE0000A, Custom10 = 0x0FF0000A,
Custom11 = 0x0FE0000B, Custom11 = 0x0FF0000B,
Custom12 = 0x0FE0000C, Custom12 = 0x0FF0000C,
Custom13 = 0x0FE0000D, Custom13 = 0x0FF0000D,
Custom14 = 0x0FE0000E, Custom14 = 0x0FF0000E,
Custom15 = 0x0FE0000F, Custom15 = 0x0FF0000F,
Custom16 = 0x0FE00010, Custom16 = 0x0FF00010,
Custom17 = 0x0FE00011, Custom17 = 0x0FF00011,
Custom18 = 0x0FE00012, Custom18 = 0x0FF00012,
Custom19 = 0x0FE00013, Custom19 = 0x0FF00013,
Custom20 = 0x0FE00014, Custom20 = 0x0FF00014,
Custom21 = 0x0FE00015, Custom21 = 0x0FF00015,
Custom22 = 0x0FE00016, Custom22 = 0x0FF00016,
Custom23 = 0x0FE00017, Custom23 = 0x0FF00017,
Custom24 = 0x0FE00018, Custom24 = 0x0FF00018,
Custom25 = 0x0FE00019, Custom25 = 0x0FF00019,
Custom26 = 0x0FE0001A, Custom26 = 0x0FF0001A,
Custom27 = 0x0FE0001B, Custom27 = 0x0FF0001B,
Custom28 = 0x0FE0001C, Custom28 = 0x0FF0001C,
Custom29 = 0x0FE0001D, Custom29 = 0x0FF0001D,
Custom30 = 0x0FE0001E, Custom30 = 0x0FF0001E,
Custom31 = 0x0FE0001F, Custom31 = 0x0FF0001F,
Custom32 = 0x0FE00020, Custom32 = 0x0FF00020,
Custom33 = 0x0FE00021, Custom33 = 0x0FF00021,
Custom34 = 0x0FE00022, Custom34 = 0x0FF00022,
Custom35 = 0x0FE00023, Custom35 = 0x0FF00023,
Custom36 = 0x0FE00024, Custom36 = 0x0FF00024,
Custom37 = 0x0FE00025, Custom37 = 0x0FF00025,
Custom38 = 0x0FE00026, Custom38 = 0x0FF00026,
Custom39 = 0x0FE00027, Custom39 = 0x0FF00027,
Custom40 = 0x0FE00028, Custom40 = 0x0FF00028,
Custom41 = 0x0FE00029, Custom41 = 0x0FF00029,
Custom42 = 0x0FE0002A, Custom42 = 0x0FF0002A,
Custom43 = 0x0FE0002B, Custom43 = 0x0FF0002B,
Custom44 = 0x0FE0002C, Custom44 = 0x0FF0002C,
Custom45 = 0x0FE0002D, Custom45 = 0x0FF0002D,
Custom46 = 0x0FE0002E, Custom46 = 0x0FF0002E,
Custom47 = 0x0FE0002F, Custom47 = 0x0FF0002F,
Custom48 = 0x0FE00030, Custom48 = 0x0FF00030,
Custom49 = 0x0FE00031, Custom49 = 0x0FF00031,
Custom50 = 0x0FE00032, Custom50 = 0x0FF00032,
Custom51 = 0x0FE00033, Custom51 = 0x0FF00033,
Custom52 = 0x0FE00034, Custom52 = 0x0FF00034,
Custom53 = 0x0FE00035, Custom53 = 0x0FF00035,
Custom54 = 0x0FE00036, Custom54 = 0x0FF00036,
Custom55 = 0x0FE00037, Custom55 = 0x0FF00037,
Custom56 = 0x0FE00038, Custom56 = 0x0FF00038,
Custom57 = 0x0FE00039, Custom57 = 0x0FF00039,
Custom58 = 0x0FE0003A, Custom58 = 0x0FF0003A,
Custom59 = 0x0FE0003B, Custom59 = 0x0FF0003B,
Custom60 = 0x0FE0003C, Custom60 = 0x0FF0003C,
Custom61 = 0x0FE0003D, Custom61 = 0x0FF0003D,
Custom62 = 0x0FE0003E, Custom62 = 0x0FF0003E,
Custom63 = 0x0FE0003F, Custom63 = 0x0FF0003F,
Custom64 = 0x0FE00040, Custom64 = 0x0FF00040,
Custom65 = 0x0FE00041, Custom65 = 0x0FF00041,
Custom66 = 0x0FE00042, Custom66 = 0x0FF00042,
Custom67 = 0x0FE00043, Custom67 = 0x0FF00043,
Custom68 = 0x0FE00044, Custom68 = 0x0FF00044,
Custom69 = 0x0FE00045, Custom69 = 0x0FF00045,
Custom70 = 0x0FE00046, Custom70 = 0x0FF00046,
Custom71 = 0x0FE00047, Custom71 = 0x0FF00047,
Custom72 = 0x0FE00048, Custom72 = 0x0FF00048,
Custom73 = 0x0FE00049, Custom73 = 0x0FF00049,
Custom74 = 0x0FE0004A, Custom74 = 0x0FF0004A,
Custom75 = 0x0FE0004B, Custom75 = 0x0FF0004B,
Custom76 = 0x0FE0004C, Custom76 = 0x0FF0004C,
Custom77 = 0x0FE0004D, Custom77 = 0x0FF0004D,
Custom78 = 0x0FE0004E, Custom78 = 0x0FF0004E,
Custom79 = 0x0FE0004F, Custom79 = 0x0FF0004F,
Custom80 = 0x0FE00050, Custom80 = 0x0FF00050,
Custom81 = 0x0FE00051, Custom81 = 0x0FF00051,
Custom82 = 0x0FE00052, Custom82 = 0x0FF00052,
Custom83 = 0x0FE00053, Custom83 = 0x0FF00053,
Custom84 = 0x0FE00054, Custom84 = 0x0FF00054,
Custom85 = 0x0FE00055, Custom85 = 0x0FF00055,
Custom86 = 0x0FE00056, Custom86 = 0x0FF00056,
Custom87 = 0x0FE00057, Custom87 = 0x0FF00057,
Custom88 = 0x0FE00058, Custom88 = 0x0FF00058,
Custom89 = 0x0FE00059, Custom89 = 0x0FF00059,
Custom90 = 0x0FE0005A, Custom90 = 0x0FF0005A,
Custom91 = 0x0FE0005B, Custom91 = 0x0FF0005B,
Custom92 = 0x0FE0005C, Custom92 = 0x0FF0005C,
Custom93 = 0x0FE0005D, Custom93 = 0x0FF0005D,
Custom94 = 0x0FE0005E, Custom94 = 0x0FF0005E,
Custom95 = 0x0FE0005F, Custom95 = 0x0FF0005F,
Custom96 = 0x0FE00060, Custom96 = 0x0FF00060,
Custom97 = 0x0FE00061, Custom97 = 0x0FF00061,
Custom98 = 0x0FE00062, Custom98 = 0x0FF00062,
Custom99 = 0x0FE00063, Custom99 = 0x0FF00063,
Custom100 = 0x0FE00064, Custom100 = 0x0FF00064,
Custom101 = 0x0FE00065, Custom101 = 0x0FF00065,
Custom102 = 0x0FE00066, Custom102 = 0x0FF00066,
Custom103 = 0x0FE00067, Custom103 = 0x0FF00067,
Custom104 = 0x0FE00068, Custom104 = 0x0FF00068,
Custom105 = 0x0FE00069, Custom105 = 0x0FF00069,
Custom106 = 0x0FE0006A, Custom106 = 0x0FF0006A,
Custom107 = 0x0FE0006B, Custom107 = 0x0FF0006B,
Custom108 = 0x0FE0006C, Custom108 = 0x0FF0006C,
Custom109 = 0x0FE0006D, Custom109 = 0x0FF0006D,
Custom110 = 0x0FE0006E, Custom110 = 0x0FF0006E,
Custom111 = 0x0FE0006F, Custom111 = 0x0FF0006F,
Custom112 = 0x0FE00070, Custom112 = 0x0FF00070,
Custom113 = 0x0FE00071, Custom113 = 0x0FF00071,
Custom114 = 0x0FE00072, Custom114 = 0x0FF00072,
Custom115 = 0x0FE00073, Custom115 = 0x0FF00073,
Custom116 = 0x0FE00074, Custom116 = 0x0FF00074,
Custom117 = 0x0FE00075, Custom117 = 0x0FF00075,
Custom118 = 0x0FE00076, Custom118 = 0x0FF00076,
Custom119 = 0x0FE00077, Custom119 = 0x0FF00077,
Custom120 = 0x0FE00078, Custom120 = 0x0FF00078,
Custom121 = 0x0FE00079, Custom121 = 0x0FF00079,
Custom122 = 0x0FE0007A, Custom122 = 0x0FF0007A,
Custom123 = 0x0FE0007B, Custom123 = 0x0FF0007B,
Custom124 = 0x0FE0007C, Custom124 = 0x0FF0007C,
Custom125 = 0x0FE0007D, Custom125 = 0x0FF0007D,
Custom126 = 0x0FE0007E, Custom126 = 0x0FF0007E,
Custom127 = 0x0FE0007F, Custom127 = 0x0FF0007F,
Custom128 = 0x0FE00080, Custom128 = 0x0FF00080,
/*### 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,
} }
} }

View File

@ -45,7 +45,6 @@ namespace RGB.NET.Devices.Asus
protected override void InitializeSDK() protected override void InitializeSDK()
{ {
// ReSharper disable once SuspiciousTypeConversion.Global
_sdk = (IAuraSdk2)new AuraSdk(); _sdk = (IAuraSdk2)new AuraSdk();
_sdk.SwitchMode(); _sdk.SwitchMode();
} }
@ -65,9 +64,9 @@ namespace RGB.NET.Devices.Asus
AsusDeviceType.VGA_RGB => new AsusGraphicsCardRGBDevice(new AsusRGBDeviceInfo(RGBDeviceType.GraphicsCard, device), GetUpdateTrigger()), AsusDeviceType.VGA_RGB => new AsusGraphicsCardRGBDevice(new AsusRGBDeviceInfo(RGBDeviceType.GraphicsCard, device), GetUpdateTrigger()),
AsusDeviceType.HEADSET_RGB => new AsusHeadsetRGBDevice(new AsusRGBDeviceInfo(RGBDeviceType.Headset, 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.DRAM_RGB => new AsusDramRGBDevice(new AsusRGBDeviceInfo(RGBDeviceType.DRAM, device), GetUpdateTrigger()),
AsusDeviceType.KEYBOARD_RGB => new AsusKeyboardRGBDevice(new AsusKeyboardRGBDeviceInfo(device), LedMappings.KeyboardMapping, GetUpdateTrigger()), AsusDeviceType.KEYBOARD_RGB => new AsusKeyboardRGBDevice(new AsusKeyboardRGBDeviceInfo(device), GetUpdateTrigger()),
AsusDeviceType.NB_KB_RGB => new AsusKeyboardRGBDevice(new AsusKeyboardRGBDeviceInfo(device), LedMappings.KeyboardMapping, GetUpdateTrigger()), AsusDeviceType.NB_KB_RGB => new AsusKeyboardRGBDevice(new AsusKeyboardRGBDeviceInfo(device), GetUpdateTrigger()),
AsusDeviceType.NB_KB_4ZONE_RGB => new AsusKeyboardRGBDevice(new AsusKeyboardRGBDeviceInfo(device), null, GetUpdateTrigger()), AsusDeviceType.NB_KB_4ZONE_RGB => new AsusKeyboardRGBDevice(new AsusKeyboardRGBDeviceInfo(device), GetUpdateTrigger()),
AsusDeviceType.MOUSE_RGB => new AsusMouseRGBDevice(new AsusRGBDeviceInfo(RGBDeviceType.Mouse, device), GetUpdateTrigger()), AsusDeviceType.MOUSE_RGB => new AsusMouseRGBDevice(new AsusRGBDeviceInfo(RGBDeviceType.Mouse, device), GetUpdateTrigger()),
_ => new AsusUnspecifiedRGBDevice(new AsusRGBDeviceInfo(RGBDeviceType.Unknown, device), LedId.Custom1, GetUpdateTrigger()) _ => new AsusUnspecifiedRGBDevice(new AsusRGBDeviceInfo(RGBDeviceType.Unknown, device), LedId.Custom1, GetUpdateTrigger())
}; };

View File

@ -2,10 +2,7 @@
namespace RGB.NET.Devices.Asus namespace RGB.NET.Devices.Asus
{ {
/// <summary> internal enum AsusLedId : ushort
/// Represents a LED ID as they are known by the ASUS SDK
/// </summary>
public enum AsusLedId : ushort
{ {
KEY_ESCAPE = 0x01, KEY_ESCAPE = 0x01,
KEY_1 = 0x02, KEY_1 = 0x02,
@ -159,6 +156,5 @@ namespace RGB.NET.Devices.Asus
UNDOCUMENTED_3 = 0x101, UNDOCUMENTED_3 = 0x101,
UNDOCUMENTED_4 = 0x102, UNDOCUMENTED_4 = 0x102,
UNDOCUMENTED_5 = 0x103, UNDOCUMENTED_5 = 0x103,
UNDOCUMENTED_6 = 0xDA, // Bottom-left function on the ROG Zephyrus Duo 15
} }
} }

View File

@ -1,18 +0,0 @@
namespace RGB.NET.Devices.Asus
{
/// <summary>
/// Represents a type of ASUS LED as known by the ASUS SDK
/// </summary>
public enum AsusLedType
{
/// <summary>
/// An ASUS LED that is present on a device's IAuraSyncKeyboard.Keys enumerable
/// </summary>
Key,
/// <summary>
/// An ASUS LED that is present on a device's IAuraSyncDevice.Lights enumerable
/// </summary>
Light
}
}

View File

@ -42,23 +42,28 @@ namespace RGB.NET.Devices.Asus
{ {
if ((Device.Type == (uint)AsusDeviceType.KEYBOARD_RGB) || (Device.Type == (uint)AsusDeviceType.NB_KB_RGB)) if ((Device.Type == (uint)AsusDeviceType.KEYBOARD_RGB) || (Device.Type == (uint)AsusDeviceType.NB_KB_RGB))
{ {
if (Device is not IAuraSyncKeyboard keyboard) foreach ((object key, Color value) in dataSet)
return;
foreach ((object customData, Color value) in dataSet)
{ {
(AsusLedType ledType, int id) = (AsusKeyboardLedCustomData)customData; AsusLedId index = (AsusLedId)key;
if (ledType == AsusLedType.Key) if (Device is IAuraSyncKeyboard keyboard)
{ {
IAuraRgbLight light = keyboard.Key[(ushort)id]; IAuraRgbLight light = index switch
(_, byte r, byte g, byte b) = value.GetRGBBytes(); {
light.Red = r; //UK keyboard Layout
light.Green = g; AsusLedId.KEY_OEM_102 => keyboard.Lights[(int)((3 * keyboard.Width) + 13)],
light.Blue = b; AsusLedId.UNDOCUMENTED_1 => keyboard.Lights[(int)((4 * keyboard.Width) + 1)],
} _ => keyboard.Key[(ushort)index]
else };
{
IAuraRgbLight light = keyboard.Lights[id]; // 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
};
(_, byte r, byte g, byte b) = value.GetRGBBytes(); (_, byte r, byte g, byte b) = value.GetRGBBytes();
light.Red = r; light.Red = r;
light.Green = g; light.Green = g;
@ -83,10 +88,8 @@ namespace RGB.NET.Devices.Asus
Device.Apply(); Device.Apply();
} }
catch catch
{ /* "The server threw an exception." seems to be a thing here ... */ { /* "The server threw an exception." seems to be a thing here ... */ }
}
} }
#endregion #endregion
} }
} }

View File

@ -9,15 +9,13 @@ namespace RGB.NET.Devices.Asus
#region Properties & Fields #region Properties & Fields
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
private static readonly ManagementObjectSearcher? _systemModelSearcher;
private static readonly ManagementObjectSearcher? _mainboardSearcher; private static readonly ManagementObjectSearcher? _mainboardSearcher;
private static readonly ManagementObjectSearcher? _graphicsCardSearcher; private static readonly ManagementObjectSearcher? _graphicsCardSearcher;
// ReSharper restore InconsistentNaming // ReSharper restore InconsistentNaming
private static string? _systemModelInfo;
private static (string manufacturer, string model)? _mainboardInfo; private static (string manufacturer, string model)? _mainboardInfo;
private static string? _graphicsCardInfo; private static string? _graphicsCardInfo;
#endregion #endregion
#region Constructors #region Constructors
@ -26,7 +24,6 @@ namespace RGB.NET.Devices.Asus
{ {
if (OperatingSystem.IsWindows()) if (OperatingSystem.IsWindows())
{ {
_systemModelSearcher = new ManagementObjectSearcher(@"root\CIMV2", "SELECT Model FROM Win32_ComputerSystem");
_mainboardSearcher = new ManagementObjectSearcher(@"root\CIMV2", "SELECT Manufacturer,Product FROM Win32_BaseBoard"); _mainboardSearcher = new ManagementObjectSearcher(@"root\CIMV2", "SELECT Manufacturer,Product FROM Win32_BaseBoard");
_graphicsCardSearcher = new ManagementObjectSearcher(@"root\CIMV2", "SELECT Name FROM Win32_VideoController"); _graphicsCardSearcher = new ManagementObjectSearcher(@"root\CIMV2", "SELECT Name FROM Win32_VideoController");
} }
@ -36,20 +33,6 @@ namespace RGB.NET.Devices.Asus
#region Methods #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() internal static (string manufacturer, string model)? GetMainboardInfo()
{ {
if (!OperatingSystem.IsWindows()) return null; if (!OperatingSystem.IsWindows()) return null;

View File

@ -1,189 +1,161 @@
using RGB.NET.Core; using System.Collections.Generic;
using RGB.NET.Core;
namespace RGB.NET.Devices.Asus namespace RGB.NET.Devices.Asus
{ {
public static class LedMappings internal static class AsusKeyboardLedMapping
{ {
/// <summary> public static readonly Dictionary<LedId, AsusLedId> MAPPING = new()
/// A LED mapping containing ASUS keyboard LED IDs {
/// </summary> { LedId.Keyboard_Escape, AsusLedId.KEY_ESCAPE },
public static readonly LedMapping<AsusLedId> KeyboardMapping = { LedId.Keyboard_F1, AsusLedId.KEY_F1 },
new() { LedId.Keyboard_F2, AsusLedId.KEY_F2 },
{ { LedId.Keyboard_F3, AsusLedId.KEY_F3 },
{LedId.Keyboard_Escape, AsusLedId.KEY_ESCAPE}, { LedId.Keyboard_F4, AsusLedId.KEY_F4 },
{LedId.Keyboard_F1, AsusLedId.KEY_F1}, { LedId.Keyboard_F5, AsusLedId.KEY_F5 },
{LedId.Keyboard_F2, AsusLedId.KEY_F2}, { LedId.Keyboard_F6, AsusLedId.KEY_F6 },
{LedId.Keyboard_F3, AsusLedId.KEY_F3}, { LedId.Keyboard_F7, AsusLedId.KEY_F7 },
{LedId.Keyboard_F4, AsusLedId.KEY_F4}, { LedId.Keyboard_F8, AsusLedId.KEY_F8 },
{LedId.Keyboard_F5, AsusLedId.KEY_F5}, { LedId.Keyboard_F9, AsusLedId.KEY_F9 },
{LedId.Keyboard_F6, AsusLedId.KEY_F6}, { LedId.Keyboard_F10, AsusLedId.KEY_F10 },
{LedId.Keyboard_F7, AsusLedId.KEY_F7}, { LedId.Keyboard_F11, AsusLedId.KEY_F11 },
{LedId.Keyboard_F8, AsusLedId.KEY_F8}, { LedId.Keyboard_F12, AsusLedId.KEY_F12 },
{LedId.Keyboard_F9, AsusLedId.KEY_F9}, { LedId.Keyboard_1, AsusLedId.KEY_1 },
{LedId.Keyboard_F10, AsusLedId.KEY_F10}, { LedId.Keyboard_2, AsusLedId.KEY_2 },
{LedId.Keyboard_F11, AsusLedId.KEY_F11}, { LedId.Keyboard_3, AsusLedId.KEY_3 },
{LedId.Keyboard_F12, AsusLedId.KEY_F12}, { LedId.Keyboard_4, AsusLedId.KEY_4 },
{LedId.Keyboard_1, AsusLedId.KEY_1}, { LedId.Keyboard_5, AsusLedId.KEY_5 },
{LedId.Keyboard_2, AsusLedId.KEY_2}, { LedId.Keyboard_6, AsusLedId.KEY_6 },
{LedId.Keyboard_3, AsusLedId.KEY_3}, { LedId.Keyboard_7, AsusLedId.KEY_7 },
{LedId.Keyboard_4, AsusLedId.KEY_4}, { LedId.Keyboard_8, AsusLedId.KEY_8 },
{LedId.Keyboard_5, AsusLedId.KEY_5}, { LedId.Keyboard_9, AsusLedId.KEY_9 },
{LedId.Keyboard_6, AsusLedId.KEY_6}, { LedId.Keyboard_0, AsusLedId.KEY_0 },
{LedId.Keyboard_7, AsusLedId.KEY_7}, { LedId.Keyboard_MinusAndUnderscore, AsusLedId.KEY_MINUS },
{LedId.Keyboard_8, AsusLedId.KEY_8}, { LedId.Keyboard_EqualsAndPlus, AsusLedId.KEY_EQUALS },
{LedId.Keyboard_9, AsusLedId.KEY_9}, { LedId.Keyboard_Backspace, AsusLedId.KEY_BACK },
{LedId.Keyboard_0, AsusLedId.KEY_0}, { LedId.Keyboard_Tab, AsusLedId.KEY_TAB },
{LedId.Keyboard_MinusAndUnderscore, AsusLedId.KEY_MINUS}, { LedId.Keyboard_Q, AsusLedId.KEY_Q },
{LedId.Keyboard_EqualsAndPlus, AsusLedId.KEY_EQUALS}, { LedId.Keyboard_W, AsusLedId.KEY_W },
{LedId.Keyboard_Backspace, AsusLedId.KEY_BACK}, { LedId.Keyboard_E, AsusLedId.KEY_E },
{LedId.Keyboard_Tab, AsusLedId.KEY_TAB}, { LedId.Keyboard_R, AsusLedId.KEY_R },
{LedId.Keyboard_Q, AsusLedId.KEY_Q}, { LedId.Keyboard_T, AsusLedId.KEY_T },
{LedId.Keyboard_W, AsusLedId.KEY_W}, { LedId.Keyboard_Y, AsusLedId.KEY_Y },
{LedId.Keyboard_E, AsusLedId.KEY_E}, { LedId.Keyboard_U, AsusLedId.KEY_U },
{LedId.Keyboard_R, AsusLedId.KEY_R}, { LedId.Keyboard_I, AsusLedId.KEY_I },
{LedId.Keyboard_T, AsusLedId.KEY_T}, { LedId.Keyboard_O, AsusLedId.KEY_O },
{LedId.Keyboard_Y, AsusLedId.KEY_Y}, { LedId.Keyboard_P, AsusLedId.KEY_P },
{LedId.Keyboard_U, AsusLedId.KEY_U}, { LedId.Keyboard_BracketLeft, AsusLedId.KEY_LBRACKET },
{LedId.Keyboard_I, AsusLedId.KEY_I}, { LedId.Keyboard_BracketRight, AsusLedId.KEY_RBRACKET },
{LedId.Keyboard_O, AsusLedId.KEY_O}, { LedId.Keyboard_Enter, AsusLedId.KEY_RETURN },
{LedId.Keyboard_P, AsusLedId.KEY_P}, { LedId.Keyboard_CapsLock, AsusLedId.KEY_CAPITAL },
{LedId.Keyboard_BracketLeft, AsusLedId.KEY_LBRACKET}, { LedId.Keyboard_A, AsusLedId.KEY_A },
{LedId.Keyboard_BracketRight, AsusLedId.KEY_RBRACKET}, { LedId.Keyboard_S, AsusLedId.KEY_S },
{LedId.Keyboard_Enter, AsusLedId.KEY_RETURN}, { LedId.Keyboard_D, AsusLedId.KEY_D },
{LedId.Keyboard_CapsLock, AsusLedId.KEY_CAPITAL}, { LedId.Keyboard_F, AsusLedId.KEY_F },
{LedId.Keyboard_A, AsusLedId.KEY_A}, { LedId.Keyboard_G, AsusLedId.KEY_G },
{LedId.Keyboard_S, AsusLedId.KEY_S}, { LedId.Keyboard_H, AsusLedId.KEY_H },
{LedId.Keyboard_D, AsusLedId.KEY_D}, { LedId.Keyboard_J, AsusLedId.KEY_J },
{LedId.Keyboard_F, AsusLedId.KEY_F}, { LedId.Keyboard_K, AsusLedId.KEY_K },
{LedId.Keyboard_G, AsusLedId.KEY_G}, { LedId.Keyboard_L, AsusLedId.KEY_L },
{LedId.Keyboard_H, AsusLedId.KEY_H}, { LedId.Keyboard_SemicolonAndColon, AsusLedId.KEY_SEMICOLON },
{LedId.Keyboard_J, AsusLedId.KEY_J}, { LedId.Keyboard_ApostropheAndDoubleQuote, AsusLedId.KEY_APOSTROPHE },
{LedId.Keyboard_K, AsusLedId.KEY_K}, { LedId.Keyboard_GraveAccentAndTilde, AsusLedId.KEY_GRAVE },
{LedId.Keyboard_L, AsusLedId.KEY_L}, { LedId.Keyboard_LeftShift, AsusLedId.KEY_LSHIFT },
{LedId.Keyboard_SemicolonAndColon, AsusLedId.KEY_SEMICOLON}, { LedId.Keyboard_Backslash, AsusLedId.KEY_BACKSLASH },
{LedId.Keyboard_ApostropheAndDoubleQuote, AsusLedId.KEY_APOSTROPHE}, { LedId.Keyboard_Z, AsusLedId.KEY_Z },
{LedId.Keyboard_GraveAccentAndTilde, AsusLedId.KEY_GRAVE}, { LedId.Keyboard_X, AsusLedId.KEY_X },
{LedId.Keyboard_LeftShift, AsusLedId.KEY_LSHIFT}, { LedId.Keyboard_C, AsusLedId.KEY_C },
{LedId.Keyboard_Backslash, AsusLedId.KEY_BACKSLASH}, { LedId.Keyboard_V, AsusLedId.KEY_V },
{LedId.Keyboard_Z, AsusLedId.KEY_Z}, { LedId.Keyboard_B, AsusLedId.KEY_B },
{LedId.Keyboard_X, AsusLedId.KEY_X}, { LedId.Keyboard_N, AsusLedId.KEY_N },
{LedId.Keyboard_C, AsusLedId.KEY_C}, { LedId.Keyboard_M, AsusLedId.KEY_M },
{LedId.Keyboard_V, AsusLedId.KEY_V}, { LedId.Keyboard_CommaAndLessThan, AsusLedId.KEY_COMMA },
{LedId.Keyboard_B, AsusLedId.KEY_B}, { LedId.Keyboard_PeriodAndBiggerThan, AsusLedId.KEY_PERIOD },
{LedId.Keyboard_N, AsusLedId.KEY_N}, { LedId.Keyboard_SlashAndQuestionMark, AsusLedId.KEY_SLASH },
{LedId.Keyboard_M, AsusLedId.KEY_M}, { LedId.Keyboard_RightShift, AsusLedId.KEY_RSHIFT },
{LedId.Keyboard_CommaAndLessThan, AsusLedId.KEY_COMMA}, { LedId.Keyboard_LeftCtrl, AsusLedId.KEY_LCONTROL },
{LedId.Keyboard_PeriodAndBiggerThan, AsusLedId.KEY_PERIOD}, { LedId.Keyboard_LeftGui, AsusLedId.KEY_LWIN },
{LedId.Keyboard_SlashAndQuestionMark, AsusLedId.KEY_SLASH}, { LedId.Keyboard_LeftAlt, AsusLedId.KEY_LMENU },
{LedId.Keyboard_RightShift, AsusLedId.KEY_RSHIFT}, { LedId.Keyboard_Space, AsusLedId.KEY_SPACE },
{LedId.Keyboard_LeftCtrl, AsusLedId.KEY_LCONTROL}, { LedId.Keyboard_RightAlt, AsusLedId.KEY_RMENU },
{LedId.Keyboard_LeftGui, AsusLedId.KEY_LWIN}, { LedId.Keyboard_RightGui, AsusLedId.KEY_RWIN },
{LedId.Keyboard_LeftAlt, AsusLedId.KEY_LMENU}, { LedId.Keyboard_Application, AsusLedId.KEY_APPS },
{LedId.Keyboard_Space, AsusLedId.KEY_SPACE}, { LedId.Keyboard_RightCtrl, AsusLedId.KEY_RCONTROL },
{LedId.Keyboard_RightAlt, AsusLedId.KEY_RMENU}, { LedId.Keyboard_PrintScreen, AsusLedId.KEY_SYSRQ },
{LedId.Keyboard_RightGui, AsusLedId.KEY_RWIN}, { LedId.Keyboard_ScrollLock, AsusLedId.KEY_SCROLL },
{LedId.Keyboard_Application, AsusLedId.KEY_APPS}, { LedId.Keyboard_PauseBreak, AsusLedId.KEY_PAUSE },
{LedId.Keyboard_RightCtrl, AsusLedId.KEY_RCONTROL}, { LedId.Keyboard_Insert, AsusLedId.KEY_INSERT },
{LedId.Keyboard_PrintScreen, AsusLedId.KEY_SYSRQ}, { LedId.Keyboard_Home, AsusLedId.KEY_HOME },
{LedId.Keyboard_ScrollLock, AsusLedId.KEY_SCROLL}, { LedId.Keyboard_PageUp, AsusLedId.KEY_PRIOR },
{LedId.Keyboard_PauseBreak, AsusLedId.KEY_PAUSE}, { LedId.Keyboard_Delete, AsusLedId.KEY_DELETE },
{LedId.Keyboard_Insert, AsusLedId.KEY_INSERT}, { LedId.Keyboard_End, AsusLedId.KEY_END },
{LedId.Keyboard_Home, AsusLedId.KEY_HOME}, { LedId.Keyboard_PageDown, AsusLedId.KEY_NEXT },
{LedId.Keyboard_PageUp, AsusLedId.KEY_PRIOR}, { LedId.Keyboard_ArrowUp, AsusLedId.KEY_UP },
{LedId.Keyboard_Delete, AsusLedId.KEY_DELETE}, { LedId.Keyboard_ArrowLeft, AsusLedId.KEY_LEFT },
{LedId.Keyboard_End, AsusLedId.KEY_END}, { LedId.Keyboard_ArrowDown, AsusLedId.KEY_DOWN },
{LedId.Keyboard_PageDown, AsusLedId.KEY_NEXT}, { LedId.Keyboard_ArrowRight, AsusLedId.KEY_RIGHT },
{LedId.Keyboard_ArrowUp, AsusLedId.KEY_UP}, { LedId.Keyboard_NumLock, AsusLedId.KEY_NUMLOCK },
{LedId.Keyboard_ArrowLeft, AsusLedId.KEY_LEFT}, { LedId.Keyboard_NumSlash, AsusLedId.KEY_DIVIDE },
{LedId.Keyboard_ArrowDown, AsusLedId.KEY_DOWN}, { LedId.Keyboard_NumAsterisk, AsusLedId.KEY_MULTIPLY },
{LedId.Keyboard_ArrowRight, AsusLedId.KEY_RIGHT}, { LedId.Keyboard_NumMinus, AsusLedId.KEY_SUBTRACT },
{LedId.Keyboard_NumLock, AsusLedId.KEY_NUMLOCK}, { LedId.Keyboard_Num7, AsusLedId.KEY_NUMPAD7 },
{LedId.Keyboard_NumSlash, AsusLedId.KEY_DIVIDE}, { LedId.Keyboard_Num8, AsusLedId.KEY_NUMPAD8 },
{LedId.Keyboard_NumAsterisk, AsusLedId.KEY_MULTIPLY}, { LedId.Keyboard_Num9, AsusLedId.KEY_NUMPAD9 },
{LedId.Keyboard_NumMinus, AsusLedId.KEY_SUBTRACT}, { LedId.Keyboard_NumPeriodAndDelete, AsusLedId.KEY_DECIMAL },
{LedId.Keyboard_Num7, AsusLedId.KEY_NUMPAD7}, { LedId.Keyboard_NumPlus, AsusLedId.KEY_ADD },
{LedId.Keyboard_Num8, AsusLedId.KEY_NUMPAD8}, { LedId.Keyboard_Num4, AsusLedId.KEY_NUMPAD4 },
{LedId.Keyboard_Num9, AsusLedId.KEY_NUMPAD9}, { LedId.Keyboard_Num5, AsusLedId.KEY_NUMPAD5 },
{LedId.Keyboard_NumPeriodAndDelete, AsusLedId.KEY_DECIMAL}, { LedId.Keyboard_Num6, AsusLedId.KEY_NUMPAD6 },
{LedId.Keyboard_NumPlus, AsusLedId.KEY_ADD}, { LedId.Keyboard_Num1, AsusLedId.KEY_NUMPAD1 },
{LedId.Keyboard_Num4, AsusLedId.KEY_NUMPAD4}, { LedId.Keyboard_Num2, AsusLedId.KEY_NUMPAD2 },
{LedId.Keyboard_Num5, AsusLedId.KEY_NUMPAD5}, { LedId.Keyboard_Num3, AsusLedId.KEY_NUMPAD3 },
{LedId.Keyboard_Num6, AsusLedId.KEY_NUMPAD6}, { LedId.Keyboard_Num0, AsusLedId.KEY_NUMPAD0 },
{LedId.Keyboard_Num1, AsusLedId.KEY_NUMPAD1}, { LedId.Keyboard_NumEnter, AsusLedId.KEY_NUMPADENTER },
{LedId.Keyboard_Num2, AsusLedId.KEY_NUMPAD2}, { LedId.Keyboard_NonUsBackslash, AsusLedId.UNDOCUMENTED_1 },
{LedId.Keyboard_Num3, AsusLedId.KEY_NUMPAD3}, { LedId.Keyboard_NonUsTilde, AsusLedId.UNDOCUMENTED_2 },
{LedId.Keyboard_Num0, AsusLedId.KEY_NUMPAD0}, { LedId.Keyboard_NumComma, AsusLedId.KEY_NUMPADCOMMA },
{LedId.Keyboard_NumEnter, AsusLedId.KEY_NUMPADENTER}, { LedId.Logo, AsusLedId.UNDOCUMENTED_3 },
{LedId.Keyboard_NonUsBackslash, AsusLedId.UNDOCUMENTED_1}, { LedId.Keyboard_Custom1, AsusLedId.UNDOCUMENTED_4 },
{LedId.Keyboard_NonUsTilde, AsusLedId.UNDOCUMENTED_2}, { LedId.Keyboard_Custom2, AsusLedId.UNDOCUMENTED_5 },
{LedId.Keyboard_NumComma, AsusLedId.KEY_NUMPADCOMMA}, { LedId.Keyboard_Custom3, AsusLedId.KEY_F13 },
{LedId.Logo, AsusLedId.UNDOCUMENTED_3}, { LedId.Keyboard_Custom4, AsusLedId.KEY_F14 },
{LedId.Keyboard_Function, AsusLedId.KEY_FN}, { LedId.Keyboard_Custom5, AsusLedId.KEY_F15 },
{LedId.Keyboard_MediaMute, AsusLedId.KEY_MUTE}, { LedId.Keyboard_Custom6, AsusLedId.KEY_KANA },
{LedId.Keyboard_MediaPlay, AsusLedId.KEY_PLAYPAUSE}, { LedId.Keyboard_Custom7, AsusLedId.KEY_ABNT_C1 },
{LedId.Keyboard_MediaStop, AsusLedId.KEY_MEDIASTOP}, { LedId.Keyboard_Custom8, AsusLedId.KEY_CONVERT },
{LedId.Keyboard_MediaVolumeDown, AsusLedId.KEY_VOLUMEDOWN}, { LedId.Keyboard_Custom9, AsusLedId.KEY_NOCONVERT },
{LedId.Keyboard_MediaVolumeUp, AsusLedId.KEY_VOLUMEUP}, { LedId.Keyboard_Custom10, AsusLedId.KEY_YEN },
{LedId.Keyboard_Custom1, AsusLedId.KEY_F13}, { LedId.Keyboard_Custom11, AsusLedId.KEY_ABNT_C2 },
{LedId.Keyboard_Custom2, AsusLedId.KEY_F14}, { LedId.Keyboard_Custom12, AsusLedId.KEY_NUMPADEQUALS },
{LedId.Keyboard_Custom3, AsusLedId.KEY_F15}, { LedId.Keyboard_Custom13, AsusLedId.KEY_CIRCUMFLEX },
{LedId.Keyboard_Custom4, AsusLedId.KEY_KANA}, { LedId.Keyboard_Custom14, AsusLedId.KEY_AT },
{LedId.Keyboard_Custom5, AsusLedId.KEY_ABNT_C1}, { LedId.Keyboard_Custom15, AsusLedId.KEY_COLON },
{LedId.Keyboard_Custom6, AsusLedId.KEY_CONVERT}, { LedId.Keyboard_Custom16, AsusLedId.KEY_UNDERLINE },
{LedId.Keyboard_Custom7, AsusLedId.KEY_NOCONVERT}, { LedId.Keyboard_Custom17, AsusLedId.KEY_KANJI },
{LedId.Keyboard_Custom8, AsusLedId.KEY_YEN}, { LedId.Keyboard_Custom18, AsusLedId.KEY_STOP },
{LedId.Keyboard_Custom9, AsusLedId.KEY_ABNT_C2}, { LedId.Keyboard_Custom19, AsusLedId.KEY_AX },
{LedId.Keyboard_Custom10, AsusLedId.KEY_NUMPADEQUALS}, { LedId.Keyboard_Custom20, AsusLedId.KEY_UNLABELED },
{LedId.Keyboard_Custom11, AsusLedId.KEY_CIRCUMFLEX}, { LedId.Keyboard_Custom21, AsusLedId.KEY_NEXTTRACK },
{LedId.Keyboard_Custom12, AsusLedId.KEY_AT}, { LedId.Keyboard_Custom22, AsusLedId.KEY_CALCULATOR },
{LedId.Keyboard_Custom13, AsusLedId.KEY_COLON}, { LedId.Keyboard_Custom23, AsusLedId.KEY_POWER },
{LedId.Keyboard_Custom14, AsusLedId.KEY_UNDERLINE}, { LedId.Keyboard_Custom24, AsusLedId.KEY_SLEEP },
{LedId.Keyboard_Custom15, AsusLedId.KEY_KANJI}, { LedId.Keyboard_Custom25, AsusLedId.KEY_WAKE },
{LedId.Keyboard_Custom16, AsusLedId.KEY_STOP}, { LedId.Keyboard_Custom26, AsusLedId.KEY_WEBSEARCH },
{LedId.Keyboard_Custom17, AsusLedId.KEY_AX}, { LedId.Keyboard_Custom27, AsusLedId.KEY_WEBFAVORITES },
{LedId.Keyboard_Custom18, AsusLedId.KEY_UNLABELED}, { LedId.Keyboard_Custom28, AsusLedId.KEY_WEBREFRESH },
{LedId.Keyboard_Custom19, AsusLedId.KEY_NEXTTRACK}, { LedId.Keyboard_Custom29, AsusLedId.KEY_WEBSTOP },
{LedId.Keyboard_Custom20, AsusLedId.KEY_CALCULATOR}, { LedId.Keyboard_Custom30, AsusLedId.KEY_WEBFORWARD },
{LedId.Keyboard_Custom21, AsusLedId.KEY_POWER}, { LedId.Keyboard_Custom31, AsusLedId.KEY_WEBHOME },
{LedId.Keyboard_Custom22, AsusLedId.KEY_SLEEP}, { LedId.Keyboard_Custom32, AsusLedId.KEY_WEBBACK },
{LedId.Keyboard_Custom23, AsusLedId.KEY_WAKE}, { LedId.Keyboard_Custom33, AsusLedId.KEY_MYCOMPUTER },
{LedId.Keyboard_Custom24, AsusLedId.KEY_WEBSEARCH}, { LedId.Keyboard_Custom34, AsusLedId.KEY_MAIL },
{LedId.Keyboard_Custom25, AsusLedId.KEY_WEBFAVORITES}, { LedId.Keyboard_Custom35, AsusLedId.KEY_MEDIASELECT },
{LedId.Keyboard_Custom26, AsusLedId.KEY_WEBREFRESH}, { LedId.Keyboard_Custom36, AsusLedId.KEY_FN },
{LedId.Keyboard_Custom27, AsusLedId.KEY_WEBSTOP}, { LedId.Keyboard_MediaMute, AsusLedId.KEY_MUTE },
{LedId.Keyboard_Custom28, AsusLedId.KEY_WEBFORWARD}, { LedId.Keyboard_MediaPlay, AsusLedId.KEY_PLAYPAUSE },
{LedId.Keyboard_Custom29, AsusLedId.KEY_WEBHOME}, { LedId.Keyboard_MediaStop, AsusLedId.KEY_MEDIASTOP },
{LedId.Keyboard_Custom30, AsusLedId.KEY_WEBBACK}, { LedId.Keyboard_MediaVolumeDown, AsusLedId.KEY_VOLUMEDOWN },
{LedId.Keyboard_Custom31, AsusLedId.KEY_MYCOMPUTER}, { LedId.Keyboard_MediaVolumeUp, AsusLedId.KEY_VOLUMEUP },
{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}
};
/// <summary>
/// A LED mapping containing extra lights for the ROG Zephyrus Duo 15
/// <para>
/// 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.
/// </para>
/// <para>You may add more of these by further populating <see cref="AsusKeyboardRGBDevice.ExtraLedMappings"/>.</para>
/// </summary>
public static readonly LedMapping<int> 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},
};
} }
} }

View File

@ -1,21 +1,10 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions;
using AuraServiceLib; using AuraServiceLib;
using RGB.NET.Core; using RGB.NET.Core;
namespace RGB.NET.Devices.Asus namespace RGB.NET.Devices.Asus
{ {
/// <summary>
/// Represents custom LED data for ASUS keyboard LEDs.
/// </summary>
public record AsusKeyboardLedCustomData(AsusLedType LedType, int Id);
/// <summary>
/// Represents a record containing regex that matches to an ASUS device model and a LED mapping mapping to Light indexes.
/// </summary>
public record AsusKeyboardExtraMapping(Regex Regex, LedMapping<int> LedMapping);
/// <inheritdoc cref="AsusRGBDevice{TDeviceInfo}" /> /// <inheritdoc cref="AsusRGBDevice{TDeviceInfo}" />
/// <summary> /// <summary>
/// Represents a Asus keyboard. /// Represents a Asus keyboard.
@ -24,22 +13,8 @@ namespace RGB.NET.Devices.Asus
{ {
#region Properties & Fields #region Properties & Fields
private readonly LedMapping<AsusLedId>? _ledMapping;
private Dictionary<LedId, AsusLedId> _ledAsusLed = new();
private Dictionary<LedId, int> _ledAsusLights = new();
IKeyboardDeviceInfo IKeyboard.DeviceInfo => DeviceInfo; IKeyboardDeviceInfo IKeyboard.DeviceInfo => DeviceInfo;
/// <summary>
/// Gets or sets a list of extra LED mappings to apply to modes that match the provided regex
/// <para>Note: These LED mappings should be based on light indexes</para>
/// </summary>
public static List<AsusKeyboardExtraMapping> ExtraLedMappings =
new()
{
new AsusKeyboardExtraMapping(new Regex("(ROG Zephyrus Duo 15).*?"), LedMappings.ROGZephyrusDuo15)
};
#endregion #endregion
#region Constructors #region Constructors
@ -49,11 +24,9 @@ namespace RGB.NET.Devices.Asus
/// Initializes a new instance of the <see cref="T:RGB.NET.Devices.Asus.AsusKeyboardRGBDevice" /> class. /// Initializes a new instance of the <see cref="T:RGB.NET.Devices.Asus.AsusKeyboardRGBDevice" /> class.
/// </summary> /// </summary>
/// <param name="info">The specific information provided by Asus for the keyboard.</param> /// <param name="info">The specific information provided by Asus for the keyboard.</param>
internal AsusKeyboardRGBDevice(AsusKeyboardRGBDeviceInfo info, LedMapping<AsusLedId>? ledMapping, IDeviceUpdateTrigger updateTrigger) internal AsusKeyboardRGBDevice(AsusKeyboardRGBDeviceInfo info, IDeviceUpdateTrigger updateTrigger)
: base(info, updateTrigger) : base(info, updateTrigger)
{ {
this._ledMapping = ledMapping;
InitializeLayout(); InitializeLayout();
} }
@ -63,29 +36,18 @@ namespace RGB.NET.Devices.Asus
private void InitializeLayout() private void InitializeLayout()
{ {
Dictionary<AsusLedId, LedId> reversedMapping = AsusKeyboardLedMapping.MAPPING.ToDictionary(x => x.Value, x => x.Key);
if (DeviceInfo.Device.Type != (uint)AsusDeviceType.NB_KB_4ZONE_RGB) if (DeviceInfo.Device.Type != (uint)AsusDeviceType.NB_KB_4ZONE_RGB)
{ {
int pos = 0; int pos = 0;
int unknownLed = (int)LedId.Unknown1;
foreach (IAuraRgbKey key in ((IAuraSyncKeyboard)DeviceInfo.Device).Keys) 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++;
}
}
// Add extra LED mapping if required //UK Layout
AsusKeyboardExtraMapping? extraMapping = ExtraLedMappings.FirstOrDefault(m => m.Regex.IsMatch(this.DeviceInfo.Model)); AddLed(reversedMapping[AsusLedId.KEY_OEM_102], new Point(pos++ * 19, 0), new Size(19, 19));
if (extraMapping != null)
{ AddLed(reversedMapping[AsusLedId.UNDOCUMENTED_1], new Point(pos * 19, 0), new Size(19, 19));
foreach ((LedId ledId, int lightIndex) in extraMapping.LedMapping)
AddAsusLed(lightIndex, ledId, new Point(pos++ * 19, 0), new Size(19, 19));
}
} }
else else
{ {
@ -98,33 +60,10 @@ namespace RGB.NET.Devices.Asus
/// <inheritdoc /> /// <inheritdoc />
protected override object? GetLedCustomData(LedId ledId) protected override object? GetLedCustomData(LedId ledId)
{ {
if (this._ledAsusLed.TryGetValue(ledId, out AsusLedId asusLedId)) if (DeviceInfo.Device.Type == (uint)AsusDeviceType.NB_KB_4ZONE_RGB)
return new AsusKeyboardLedCustomData(AsusLedType.Key, (int)asusLedId); return ledId - LedId.Keyboard_Custom1;
if (this._ledAsusLights.TryGetValue(ledId, out int lightIndex))
return new AsusKeyboardLedCustomData(AsusLedType.Light, lightIndex);
return null;
}
/// <summary> return AsusKeyboardLedMapping.MAPPING[ledId];
/// Add an ASUS LED by its LED ID
/// </summary>
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);
}
/// <summary>
/// Add an ASUS LED by its light index
/// </summary>
private void AddAsusLed(int index, LedId ledId, Point position, Size size)
{
this._ledAsusLights.Add(ledId, index);
AddLed(ledId, position, size);
} }
#endregion #endregion

View File

@ -1,5 +1,4 @@
using System.Collections.Generic; using AuraServiceLib;
using AuraServiceLib;
using RGB.NET.Core; using RGB.NET.Core;
namespace RGB.NET.Devices.Asus namespace RGB.NET.Devices.Asus
@ -11,12 +10,6 @@ namespace RGB.NET.Devices.Asus
{ {
#region Properties & Fields #region Properties & Fields
/// <summary>
/// The ASUS SDK returns useless names for notebook keyboards, possibly for others as well.
/// Keep a list of those and rely on <see cref="WMIHelper.GetSystemModelInfo()"/> to get the real model
/// </summary>
private static List<string> GenericDeviceNames = new() {"NotebookKeyboard"};
/// <inheritdoc /> /// <inheritdoc />
public KeyboardLayoutType Layout => KeyboardLayoutType.Unknown; public KeyboardLayoutType Layout => KeyboardLayoutType.Unknown;
@ -30,18 +23,9 @@ namespace RGB.NET.Devices.Asus
/// </summary> /// </summary>
/// <param name="device">The <see cref="IAuraSyncDevice"/> backing this RGB.NET device.</param> /// <param name="device">The <see cref="IAuraSyncDevice"/> backing this RGB.NET device.</param>
internal AsusKeyboardRGBDeviceInfo(IAuraSyncDevice device) internal AsusKeyboardRGBDeviceInfo(IAuraSyncDevice device)
: base(RGBDeviceType.Keyboard, device, GetKeyboardModel(device.Name)) : base(RGBDeviceType.Keyboard, device, device.Name)
{ } { }
#endregion #endregion
#region Methods
private static string? GetKeyboardModel(string deviceName)
{
return GenericDeviceNames.Contains(deviceName) ? WMIHelper.GetSystemModelInfo() : deviceName;
}
#endregion
} }
} }

View File

@ -51,10 +51,11 @@ namespace RGB.NET.Devices.Logitech
{ 0xC337, RGBDeviceType.Keyboard, "G810", LedMappings.PerKey, 0 }, { 0xC337, RGBDeviceType.Keyboard, "G810", LedMappings.PerKey, 0 },
{ 0xC331, RGBDeviceType.Keyboard, "G810", LedMappings.PerKey, 0 }, { 0xC331, RGBDeviceType.Keyboard, "G810", LedMappings.PerKey, 0 },
{ 0xC333, RGBDeviceType.Keyboard, "G610", LedMappings.PerKey, 0 }, { 0xC333, RGBDeviceType.Keyboard, "G610", LedMappings.PerKey, 0 },
{ 0xC338, RGBDeviceType.Keyboard, "G610", LedMappings.PerKey, 0 }, { 0xC33C, RGBDeviceType.Keyboard, "G512", LedMappings.PerKey, 0 },
{ 0xC342, RGBDeviceType.Keyboard, "G512 SE", LedMappings.PerKey, 0 }, { 0xC342, RGBDeviceType.Keyboard, "G512 SE", LedMappings.PerKey, 0 },
{ 0xC33C, RGBDeviceType.Keyboard, "G513 Carbon", LedMappings.PerKey, 0 }, { 0xC232, RGBDeviceType.Keyboard, "G513 Carbon", LedMappings.PerKey, 0 },
{ 0xC330, RGBDeviceType.Keyboard, "G410", LedMappings.PerKey, 0 }, { 0xC330, RGBDeviceType.Keyboard, "G410", LedMappings.PerKey, 0 },
{ 0xC336, RGBDeviceType.Keyboard, "G213", LedMappings.PerKey, 0 },
{ 0xC339, RGBDeviceType.Keyboard, "Pro", LedMappings.PerKey, 0 }, { 0xC339, RGBDeviceType.Keyboard, "Pro", LedMappings.PerKey, 0 },
{ 0xC343, RGBDeviceType.Keyboard, "G915 TKL", LedMappings.PerKey, 0 }, { 0xC343, RGBDeviceType.Keyboard, "G915 TKL", LedMappings.PerKey, 0 },
{ 0xC545, RGBDeviceType.Keyboard, "Lightspeed Keyboard Dongle", LedMappings.PerKey, 0 }, { 0xC545, RGBDeviceType.Keyboard, "Lightspeed Keyboard Dongle", LedMappings.PerKey, 0 },

View File

@ -28,16 +28,13 @@ namespace RGB.NET.Devices.Wooting.Generic
/// <inheritdoc /> /// <inheritdoc />
protected override void Update(in ReadOnlySpan<(object key, Color color)> dataSet) protected override void Update(in ReadOnlySpan<(object key, Color color)> dataSet)
{ {
lock (_WootingSDK.SdkLock) foreach ((object key, Color color) in dataSet)
{ {
foreach ((object key, Color color) in dataSet) (int row, int column) = ((int, int))key;
{ _WootingSDK.ArraySetSingle((byte)row, (byte)column, color.GetR(), color.GetG(), color.GetB());
(int row, int column) = ((int, int))key;
_WootingSDK.ArraySetSingle((byte)row, (byte)column, color.GetR(), color.GetG(), color.GetB());
}
_WootingSDK.ArrayUpdateKeyboard();
} }
_WootingSDK.ArrayUpdateKeyboard();
} }
#endregion #endregion

View File

@ -16,7 +16,6 @@ namespace RGB.NET.Devices.Wooting.Native
#region Library management #region Library management
private static IntPtr _dllHandle = IntPtr.Zero; private static IntPtr _dllHandle = IntPtr.Zero;
internal static object SdkLock = new();
/// <summary> /// <summary>
/// Reloads the SDK. /// Reloads the SDK.
@ -53,16 +52,6 @@ namespace RGB.NET.Devices.Wooting.Native
{ {
if (_dllHandle == IntPtr.Zero) return; if (_dllHandle == IntPtr.Zero) return;
Reset();
Close();
_getDeviceInfoPointer = null;
_keyboardConnectedPointer = null;
_arrayUpdateKeyboardPointer = null;
_arraySetSinglePointer = null;
_resetPointer = null;
_closePointer = null;
// ReSharper disable once EmptyEmbeddedStatement - DarthAffe 20.02.2016: We might need to reduce the internal reference counter more than once to set the library free // ReSharper disable once EmptyEmbeddedStatement - DarthAffe 20.02.2016: We might need to reduce the internal reference counter more than once to set the library free
while (FreeLibrary(_dllHandle)) ; while (FreeLibrary(_dllHandle)) ;
_dllHandle = IntPtr.Zero; _dllHandle = IntPtr.Zero;
@ -127,4 +116,3 @@ namespace RGB.NET.Devices.Wooting.Native
#endregion #endregion
} }
} }

View File

@ -55,31 +55,25 @@ namespace RGB.NET.Devices.Wooting
protected override void InitializeSDK() protected override void InitializeSDK()
{ {
lock (_WootingSDK.SdkLock) _WootingSDK.Reload();
{
_WootingSDK.Reload();
}
} }
protected override IEnumerable<IRGBDevice> LoadDevices() protected override IEnumerable<IRGBDevice> LoadDevices()
{ {
lock (_WootingSDK.SdkLock) if (_WootingSDK.KeyboardConnected())
{ {
if (_WootingSDK.KeyboardConnected()) _WootingDeviceInfo nativeDeviceInfo = (_WootingDeviceInfo)Marshal.PtrToStructure(_WootingSDK.GetDeviceInfo(), typeof(_WootingDeviceInfo))!;
IWootingRGBDevice? device = nativeDeviceInfo.Model switch
{ {
_WootingDeviceInfo nativeDeviceInfo = (_WootingDeviceInfo)Marshal.PtrToStructure(_WootingSDK.GetDeviceInfo(), typeof(_WootingDeviceInfo))!; "Wooting two" => new WootingKeyboardRGBDevice(new WootingKeyboardRGBDeviceInfo(WootingDevicesIndexes.WootingTwo), GetUpdateTrigger()),
IWootingRGBDevice? device = nativeDeviceInfo.Model switch "Wooting one" => new WootingKeyboardRGBDevice(new WootingKeyboardRGBDeviceInfo(WootingDevicesIndexes.WootingOne), GetUpdateTrigger()),
{ _ => null
"Wooting two" => new WootingKeyboardRGBDevice(new WootingKeyboardRGBDeviceInfo(WootingDevicesIndexes.WootingTwo), GetUpdateTrigger()), };
"Wooting one" => new WootingKeyboardRGBDevice(new WootingKeyboardRGBDeviceInfo(WootingDevicesIndexes.WootingOne), GetUpdateTrigger()),
_ => null
};
if (device == null) if (device == null)
Throw(new RGBDeviceException("No supported Wooting keyboard connected")); Throw(new RGBDeviceException("No supported Wooting keyboard connected"));
else else
yield return device; yield return device;
}
} }
} }
@ -88,11 +82,11 @@ namespace RGB.NET.Devices.Wooting
{ {
base.Dispose(); base.Dispose();
lock (_WootingSDK.SdkLock) try { _WootingSDK.Close(); }
{ catch { /* Unlucky.. */ }
try { _WootingSDK.UnloadWootingSDK(); }
catch { /* at least we tried */ } try { _WootingSDK.UnloadWootingSDK(); }
} catch { /* at least we tried */ }
} }
#endregion #endregion