1
0
mirror of https://github.com/DarthAffe/RGB.NET.git synced 2025-12-13 10:08:31 +00:00

Compare commits

...

16 Commits

Author SHA1 Message Date
Robert Beekman
d3335b20ae
Merge pull request #212 from DarthAffe/SDK/Logitech
Logitech PID corrections
2021-05-13 19:45:47 +02:00
Robert Beekman
faf7535eaf
Merge pull request #213 from DarthAffe/SDK/Wooting
Wooting - Fixed race condition during SDK load/unload
2021-05-13 19:45:33 +02:00
Robert Beekman
17db44d007
Merge pull request #192 from DarthAffe/SDK/ASUS
ASUS updates & tweaks
2021-05-13 19:45:18 +02:00
Robert
41f9d82edc Wooting - Fixed race condition during SDK load/unload 2021-05-06 21:18:34 +02:00
Robert
20809f2835 Logitech - Removed duplicate G213 HID definition
Logitech - Removed incorrect G512 PID
Logitech - Corrected G513 Carbon PID
Logitech - Added G610 PID
2021-05-06 14:46:06 +02:00
Robert
4055ee9b0a ASUS - Refactored to use LedMappings
ASUS - Added laptop model detection
ASUS - Added the option to provide extra LED mappings to keyboards based on model
ASUS - Removed old attempts at detecting non-key LEDs on keyboards
2021-04-29 17:20:24 +02:00
Robert
6254eae845 Merge branch 'Development' into SDK/ASUS 2021-04-29 15:46:05 +02:00
Robert
6665e14e1d ASUS - Explain what is going on with LED tagging 2021-04-26 22:58:52 +02:00
Robert
d6054cf527 ASUS - Added mechanism to add extra LEDs via lights 2021-04-23 22:11:00 +02:00
Robert
e86003f1ea ASUS - Attempt to add lights that aren't present as keys 2021-04-22 17:30:19 +02:00
Robert
ca264a4603 Merge branch 'Development' into SDK/ASUS 2021-04-22 16:36:24 +02:00
Robert
9bfc53087c ASUS - Cleaned up code and removed strangly placed per-device logic 2021-03-29 16:17:14 +02:00
Robert
40cce7aaaf Core - Added Unknown LED IDs
Core - Moved Custom LED IDs from 0xFF to 0xFE
ASUS - Use Unknown LED IDs for missing LED mappings
2021-03-29 00:59:26 +02:00
Robert
c446673c3c Merge branch 'Development' into SDK/ASUS 2021-03-28 16:13:49 +02:00
Robert
a52bb474ef ASUS - Keyboards guard against double LEDs
ASUS - Keyboards return the correct AsusLed in GetLedCustomData
2021-03-27 14:39:51 +01:00
Robert
c963bcd9d7 ASUS - Added more undocumented LED IDs
ASUS - Reversed LED mapping to have the ASUS ID as the key
ASUS - Throw informative exception on missing LED mapping
2021-03-26 23:15:40 +01:00
13 changed files with 639 additions and 347 deletions

View File

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

View File

@ -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())
};

View File

@ -2,7 +2,10 @@
namespace RGB.NET.Devices.Asus
{
internal enum AsusLedId : ushort
/// <summary>
/// Represents a LED ID as they are known by the ASUS SDK
/// </summary>
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
}
}

View File

@ -0,0 +1,18 @@
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,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
}
}

View File

@ -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;

View File

@ -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<LedId, AsusLedId> 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 },
};
/// <summary>
/// A LED mapping containing ASUS keyboard LED IDs
/// </summary>
public static readonly LedMapping<AsusLedId> 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}
};
/// <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,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
{
/// <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}" />
/// <summary>
/// Represents a Asus keyboard.
@ -13,8 +24,22 @@ namespace RGB.NET.Devices.Asus
{
#region Properties & Fields
private readonly LedMapping<AsusLedId>? _ledMapping;
private Dictionary<LedId, AsusLedId> _ledAsusLed = new();
private Dictionary<LedId, int> _ledAsusLights = new();
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
#region Constructors
@ -24,9 +49,11 @@ namespace RGB.NET.Devices.Asus
/// Initializes a new instance of the <see cref="T:RGB.NET.Devices.Asus.AsusKeyboardRGBDevice" /> class.
/// </summary>
/// <param name="info">The specific information provided by Asus for the keyboard.</param>
internal AsusKeyboardRGBDevice(AsusKeyboardRGBDeviceInfo info, IDeviceUpdateTrigger updateTrigger)
internal AsusKeyboardRGBDevice(AsusKeyboardRGBDeviceInfo info, LedMapping<AsusLedId>? ledMapping, IDeviceUpdateTrigger updateTrigger)
: base(info, updateTrigger)
{
this._ledMapping = ledMapping;
InitializeLayout();
}
@ -36,18 +63,29 @@ namespace RGB.NET.Devices.Asus
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)
{
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
/// <inheritdoc />
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];
/// <summary>
/// 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

View File

@ -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
/// <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 />
public KeyboardLayoutType Layout => KeyboardLayoutType.Unknown;
@ -23,9 +30,18 @@ namespace RGB.NET.Devices.Asus
/// </summary>
/// <param name="device">The <see cref="IAuraSyncDevice"/> backing this RGB.NET device.</param>
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
}
}

View File

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

View File

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

View File

@ -16,6 +16,7 @@ namespace RGB.NET.Devices.Wooting.Native
#region Library management
private static IntPtr _dllHandle = IntPtr.Zero;
internal static object SdkLock = new();
/// <summary>
/// Reloads the SDK.
@ -52,6 +53,16 @@ namespace RGB.NET.Devices.Wooting.Native
{
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
while (FreeLibrary(_dllHandle)) ;
_dllHandle = IntPtr.Zero;
@ -116,3 +127,4 @@ namespace RGB.NET.Devices.Wooting.Native
#endregion
}
}

View File

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