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
}
}