diff --git a/RGB.NET.Core/Leds/LedId.cs b/RGB.NET.Core/Leds/LedId.cs index 6278aae..536263e 100644 --- a/RGB.NET.Core/Leds/LedId.cs +++ b/RGB.NET.Core/Leds/LedId.cs @@ -213,6 +213,38 @@ namespace RGB.NET.Core Keyboard_Custom30 = 0x0000701E, Keyboard_Custom31 = 0x0000701F, Keyboard_Custom32 = 0x00007020, + Keyboard_Custom33 = 0x00007021, + Keyboard_Custom34 = 0x00007022, + Keyboard_Custom35 = 0x00007023, + Keyboard_Custom36 = 0x00007024, + Keyboard_Custom37 = 0x00007025, + Keyboard_Custom38 = 0x00007026, + Keyboard_Custom39 = 0x00007027, + Keyboard_Custom40 = 0x00007028, + Keyboard_Custom41 = 0x00007029, + Keyboard_Custom42 = 0x0000702A, + Keyboard_Custom43 = 0x0000702B, + Keyboard_Custom44 = 0x0000702C, + Keyboard_Custom45 = 0x0000702D, + Keyboard_Custom46 = 0x0000702E, + Keyboard_Custom47 = 0x0000702F, + Keyboard_Custom48 = 0x00007030, + Keyboard_Custom49 = 0x00007031, + Keyboard_Custom50 = 0x00007032, + Keyboard_Custom51 = 0x00007033, + Keyboard_Custom52 = 0x00007034, + Keyboard_Custom53 = 0x00007035, + Keyboard_Custom54 = 0x00007036, + Keyboard_Custom55 = 0x00007037, + Keyboard_Custom56 = 0x00007038, + Keyboard_Custom57 = 0x00007039, + Keyboard_Custom58 = 0x0000703A, + Keyboard_Custom59 = 0x0000703B, + Keyboard_Custom60 = 0x0000703C, + Keyboard_Custom61 = 0x0000703D, + Keyboard_Custom62 = 0x0000703E, + Keyboard_Custom63 = 0x0000703F, + Keyboard_Custom64 = 0x00007040, /*### Mouse ###*/ Mouse1 = 0x00100001, diff --git a/RGB.NET.Devices.Asus/Enum/AsusDeviceType.cs b/RGB.NET.Devices.Asus/Enum/AsusDeviceType.cs new file mode 100644 index 0000000..7990bce --- /dev/null +++ b/RGB.NET.Devices.Asus/Enum/AsusDeviceType.cs @@ -0,0 +1,25 @@ +// ReSharper disable InconsistentNaming + +namespace RGB.NET.Devices.Asus +{ + internal enum AsusDeviceType : uint + { + ALL = 0, + MB_RGB = 0x10000, + MB_ADDRESABLE = 0x11000, + DESKTOP_RGB = 0x12000, + VGA_RGB = 0x20000, + DISPLAY_RGB = 0x30000, + HEADSET_RGB = 0x40000, + MICROPHONE_RGB = 0x50000, + EXTERNAL_HARD_DRIVER_RGB = 0x60000, + EXTERNAL_BLUE_RAY_RGB = 0x61000, + DRAM_RGB = 0x70000, + KEYBOARD_RGB = 0x80000, + NB_KB_RGB = 0x81000, + NB_KB_4ZONE_RGB = 0x81001, + MOUSE_RGB = 0x90000, + CHASSIS_RGB = 0xB0000, + PROJECTOR_RGB = 0xC0000 + } +} diff --git a/RGB.NET.Devices.Asus/Enum/AsusLedId.cs b/RGB.NET.Devices.Asus/Enum/AsusLedId.cs new file mode 100644 index 0000000..f56d64a --- /dev/null +++ b/RGB.NET.Devices.Asus/Enum/AsusLedId.cs @@ -0,0 +1,160 @@ +// ReSharper disable InconsistentNaming + +namespace RGB.NET.Devices.Asus +{ + internal enum AsusLedId : ushort + { + KEY_ESCAPE = 0x01, + KEY_1 = 0x02, + KEY_2 = 0x03, + KEY_3 = 0x04, + KEY_4 = 0x05, + KEY_5 = 0x06, + KEY_6 = 0x07, + KEY_7 = 0x08, + KEY_8 = 0x09, + KEY_9 = 0x0A, + KEY_0 = 0x0B, + KEY_MINUS = 0x0C, // - on main keyboard + KEY_EQUALS = 0x0D, + KEY_BACK = 0x0E, // backspace + KEY_TAB = 0x0F, + KEY_Q = 0x10, + KEY_W = 0x11, + KEY_E = 0x12, + KEY_R = 0x13, + KEY_T = 0x14, + KEY_Y = 0x15, + KEY_U = 0x16, + KEY_I = 0x17, + KEY_O = 0x18, + KEY_P = 0x19, + KEY_LBRACKET = 0x1A, + KEY_RBRACKET = 0x1B, + KEY_RETURN = 0x1C, // Enter on main keyboard + KEY_LCONTROL = 0x1D, + KEY_A = 0x1E, + KEY_S = 0x1F, + KEY_D = 0x20, + KEY_F = 0x21, + KEY_G = 0x22, + KEY_H = 0x23, + KEY_J = 0x24, + KEY_K = 0x25, + KEY_L = 0x26, + KEY_SEMICOLON = 0x27, + KEY_APOSTROPHE = 0x28, + KEY_GRAVE = 0x29, // accent grave + KEY_LSHIFT = 0x2A, + KEY_BACKSLASH = 0x2B, + KEY_Z = 0x2C, + KEY_X = 0x2D, + KEY_C = 0x2E, + KEY_V = 0x2F, + KEY_B = 0x30, + KEY_N = 0x31, + KEY_M = 0x32, + KEY_COMMA = 0x33, + KEY_PERIOD = 0x34, // . on main keyboard + KEY_SLASH = 0x35, // / on main keyboard + KEY_RSHIFT = 0x36, + KEY_MULTIPLY = 0x37, // * on numeric keypad + KEY_LMENU = 0x38, // left Alt + KEY_SPACE = 0x39, + KEY_CAPITAL = 0x3A, + KEY_F1 = 0x3B, + KEY_F2 = 0x3C, + KEY_F3 = 0x3D, + KEY_F4 = 0x3E, + KEY_F5 = 0x3F, + KEY_F6 = 0x40, + KEY_F7 = 0x41, + KEY_F8 = 0x42, + KEY_F9 = 0x43, + KEY_F10 = 0x44, + KEY_NUMLOCK = 0x45, + KEY_SCROLL = 0x46, // Scroll Lock + KEY_NUMPAD7 = 0x47, + KEY_NUMPAD8 = 0x48, + KEY_NUMPAD9 = 0x49, + KEY_SUBTRACT = 0x4A, // - on numeric keypad + KEY_NUMPAD4 = 0x4B, + KEY_NUMPAD5 = 0x4C, + KEY_NUMPAD6 = 0x4D, + KEY_ADD = 0x4E, // + on numeric keypad + KEY_NUMPAD1 = 0x4F, + KEY_NUMPAD2 = 0x50, + KEY_NUMPAD3 = 0x51, + KEY_NUMPAD0 = 0x52, + KEY_DECIMAL = 0x53, // . on numeric keypad + KEY_OEM_102 = 0x56, // < > | on UK/Germany keyboards + KEY_F11 = 0x57, + KEY_F12 = 0x58, + KEY_F13 = 0x64, // (NEC PC98) + KEY_F14 = 0x65, // (NEC PC98) + KEY_F15 = 0x66, // (NEC PC98) + KEY_KANA = 0x70, // (Japanese keyboard) + KEY_ABNT_C1 = 0x73, // / ? on Portugese (Brazilian) keyboards + KEY_CONVERT = 0x79, // (Japanese keyboard) + KEY_NOCONVERT = 0x7B, // (Japanese keyboard) + KEY_YEN = 0x7D, // (Japanese keyboard) + KEY_ABNT_C2 = 0x7E, // Numpad . on Portugese (Brazilian) keyboards + KEY_NUMPADEQUALS = 0x8D, // = on numeric keypad (NEC PC98) + KEY_CIRCUMFLEX = 0x90, // (Japanese keyboard) + KEY_AT = 0x91, // (NEC PC98) + KEY_COLON = 0x92, // (NEC PC98) + KEY_UNDERLINE = 0x93, // (NEC PC98) + KEY_KANJI = 0x94, // (Japanese keyboard) + KEY_STOP = 0x95, // (NEC PC98) + KEY_AX = 0x96, // (Japan AX) + KEY_UNLABELED = 0x97, // (J3100) + KEY_NEXTTRACK = 0x99, // Next Track + KEY_NUMPADENTER = 0x9C, // Enter on numeric keypad + KEY_RCONTROL = 0x9D, // + KEY_MUTE = 0xA0, // Mute + KEY_CALCULATOR = 0xA1, // Calculator + KEY_PLAYPAUSE = 0xA2, // Play / Pause + KEY_MEDIASTOP = 0xA4, // Media Stop + KEY_VOLUMEDOWN = 0xAE, // Volume - + KEY_VOLUMEUP = 0xB0, // Volume + + KEY_WEBHOME = 0xB2, // Web home + KEY_NUMPADCOMMA = 0xB3, // , on numeric keypad (NEC PC98) + KEY_DIVIDE = 0xB5, // / on numeric keypad + KEY_SYSRQ = 0xB7, // + KEY_RMENU = 0xB8, // right Alt + KEY_PAUSE = 0xC5, // Pause + KEY_HOME = 0xC7, // Home on arrow keypad + KEY_UP = 0xC8, // UpArrow on arrow keypad + KEY_PRIOR = 0xC9, // PgUp on arrow keypad + KEY_LEFT = 0xCB, // LeftArrow on arrow keypad + KEY_RIGHT = 0xCD, // RightArrow on arrow keypad + KEY_END = 0xCF, // End on arrow keypad + KEY_DOWN = 0xD0, // DownArrow on arrow keypad + KEY_NEXT = 0xD1, // PgDn on arrow keypad + KEY_INSERT = 0xD2, // Insert on arrow keypad + KEY_DELETE = 0xD3, // Delete on arrow keypad + KEY_LWIN = 0xDB, // Left Windows key + KEY_RWIN = 0xDC, // Right Windows key + KEY_APPS = 0xDD, // AppMenu key + KEY_POWER = 0xDE, // + KEY_SLEEP = 0xDF, // + KEY_WAKE = 0xE3, // System Wake + KEY_WEBSEARCH = 0xE5, // Web Search + KEY_WEBFAVORITES = 0xE6, // Web Favorites + KEY_WEBREFRESH = 0xE7, // Web Refresh + KEY_WEBSTOP = 0xE8, // Web Stop + KEY_WEBFORWARD = 0xE9, // Web Forward + KEY_WEBBACK = 0xEA, // Web Back + KEY_MYCOMPUTER = 0xEB, // My Computer + KEY_MAIL = 0xEC, // Mail + KEY_MEDIASELECT = 0xED, // Media Select + KEY_FN = 0x100, // Function key + + // Undocumented + UNDOCUMENTED_1 = 0x59, + UNDOCUMENTED_2 = 0x56, + UNDOCUMENTED_3 = 0x101, + UNDOCUMENTED_4 = 0x102, + UNDOCUMENTED_5 = 0x103, + } +} diff --git a/RGB.NET.Devices.Asus/Generic/AsusUpdateQueue.cs b/RGB.NET.Devices.Asus/Generic/AsusUpdateQueue.cs index fb32a3e..9a3b260 100644 --- a/RGB.NET.Devices.Asus/Generic/AsusUpdateQueue.cs +++ b/RGB.NET.Devices.Asus/Generic/AsusUpdateQueue.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using AuraServiceLib; using RGB.NET.Core; @@ -48,22 +47,57 @@ namespace RGB.NET.Devices.Asus { try { - foreach (KeyValuePair data in dataSet) + if ((Device.Type == (uint)AsusDeviceType.KEYBOARD_RGB) || (Device.Type == (uint)AsusDeviceType.NB_KB_RGB)) { - int index = (int)data.Key; - IAuraRgbLight light = Device.Lights[index]; - (_, byte r, byte g, byte b) = data.Value.GetRGBBytes(); - light.Red = r; - light.Green = g; - light.Blue = b; + foreach (KeyValuePair data in dataSet) + { + AsusLedId index = (AsusLedId)data.Key; + IAuraSyncKeyboard keyboard = (IAuraSyncKeyboard)Device; + if (keyboard != null) + { + 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 + }; + + (_, byte r, byte g, byte b) = data.Value.GetRGBBytes(); + light.Red = r; + light.Green = g; + light.Blue = b; + } + } + } + else + { + foreach (KeyValuePair data in dataSet) + { + int index = (int)data.Key; + IAuraRgbLight light = Device.Lights[index]; + + (_, byte r, byte g, byte b) = data.Value.GetRGBBytes(); + light.Red = r; + light.Green = g; + light.Blue = b; + } } Device.Apply(); } - catch (Exception ex) + catch { /* "The server threw an exception." seems to be a thing here ... */ } } - #endregion } } diff --git a/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardLedMapping.cs b/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardLedMapping.cs new file mode 100644 index 0000000..2b48961 --- /dev/null +++ b/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardLedMapping.cs @@ -0,0 +1,161 @@ +using System.Collections.Generic; +using RGB.NET.Core; + +namespace RGB.NET.Devices.Asus +{ + internal static class AsusKeyboardLedMapping + { + public static readonly Dictionary MAPPING = new Dictionary + { + { 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 }, + }; + } +} diff --git a/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDevice.cs b/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDevice.cs index 95e3140..7c444cf 100644 --- a/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDevice.cs +++ b/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDevice.cs @@ -1,4 +1,7 @@ -using RGB.NET.Core; +using System.Collections.Generic; +using System.Linq; +using AuraServiceLib; +using RGB.NET.Core; namespace RGB.NET.Devices.Asus { @@ -26,17 +29,38 @@ namespace RGB.NET.Devices.Asus /// protected override void InitializeLayout() { - //TODO DarthAffe 07.10.2017: This doesn't make sense at all ... Find someone with such a keyboard! - int ledCount = DeviceInfo.Device.Lights.Count; - for (int i = 0; i < ledCount; i++) - InitializeLed(LedId.Keyboard_Escape + i, new Rectangle(i * 19, 0, 19, 19)); + Dictionary reversedMapping = AsusKeyboardLedMapping.MAPPING.ToDictionary(x => x.Value, x => x.Key); + + if (DeviceInfo.Device.Type != (uint)AsusDeviceType.NB_KB_4ZONE_RGB) + { + int pos = 0; + foreach (IAuraRgbKey key in ((IAuraSyncKeyboard)DeviceInfo.Device).Keys) + InitializeLed(reversedMapping[(AsusLedId)key.Code], new Point(pos++ * 19, 0), new Size(19, 19)); + + //UK Layout + InitializeLed(reversedMapping[AsusLedId.KEY_OEM_102], new Point(pos++ * 19, 0), new Size(19, 19)); + + InitializeLed(reversedMapping[AsusLedId.UNDOCUMENTED_1], new Point(pos * 19, 0), new Size(19, 19)); + } + else + { + int ledCount = DeviceInfo.Device.Lights.Count; + for (int i = 0; i < ledCount; i++) + InitializeLed(LedId.Keyboard_Custom1 + i, new Point(i * 19, 0), new Size(19, 19)); + } string model = DeviceInfo.Model.Replace(" ", string.Empty).ToUpper(); ApplyLayoutFromFile(PathHelper.GetAbsolutePath(this, $@"Layouts\Asus\Keyboards\{model}", $"{DeviceInfo.PhysicalLayout.ToString().ToUpper()}.xml"), DeviceInfo.LogicalLayout.ToString()); } /// - protected override object CreateLedCustomData(LedId ledId) => (int)ledId - (int)LedId.Keyboard_Escape; + protected override object CreateLedCustomData(LedId ledId) + { + if (DeviceInfo.Device.Type == (uint)AsusDeviceType.NB_KB_4ZONE_RGB) + return ledId - LedId.Keyboard_Custom1; + + return AsusKeyboardLedMapping.MAPPING[ledId]; + } #endregion } diff --git a/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDeviceInfo.cs b/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDeviceInfo.cs index bf020a6..5b8a55e 100644 --- a/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDeviceInfo.cs @@ -33,7 +33,7 @@ namespace RGB.NET.Devices.Asus /// The backing this RGB.NET device. /// The of the layout this keyboard is using. internal AsusKeyboardRGBDeviceInfo(IAuraSyncDevice device, CultureInfo culture) - : base(RGBDeviceType.Keyboard, device, "Claymore") + : base(RGBDeviceType.Keyboard, device, device.Name) { SetLayouts(culture.KeyboardLayoutId); }