From 03c8d3542164066fd467762d3e39b04661026bcd Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 28 Dec 2019 13:19:21 +0100 Subject: [PATCH] Device Support Asus strix scope tested Asus strix flare not tested Signed-off-by: Alex --- .../Generic/AsusUpdateQueue.cs | 59 +++- .../Keyboard/AsusKeyboardRGBDevice.cs | 264 +++++++++++++++++- .../Keyboard/AsusKeyboardRGBDeviceInfo.cs | 2 +- 3 files changed, 309 insertions(+), 16 deletions(-) diff --git a/RGB.NET.Devices.Asus/Generic/AsusUpdateQueue.cs b/RGB.NET.Devices.Asus/Generic/AsusUpdateQueue.cs index fb32a3e..48f2b0d 100644 --- a/RGB.NET.Devices.Asus/Generic/AsusUpdateQueue.cs +++ b/RGB.NET.Devices.Asus/Generic/AsusUpdateQueue.cs @@ -48,14 +48,58 @@ namespace RGB.NET.Devices.Asus { try { - foreach (KeyValuePair data in dataSet) + if (Device.Type == 0x00080000 || Device.Type == 0x00081000)//Keyboard { - 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) + { + ushort index = (ushort)data.Key; + IAuraSyncKeyboard keyboard = (IAuraSyncKeyboard)Device; + if (keyboard != null) + { + IAuraRgbLight light; + //UK keyboard Layout + if (index == 0x56) + { + light = keyboard.Lights[(int)(3 * keyboard.Width + 13)]; + } + else if (index == 0x59) + { + light = keyboard.Lights[(int)(4 * keyboard.Width + 1)]; + } + else + { + light = keyboard.Key[index]; + } + // Asus Strix Scope + if (keyboard.Name == "Charm") + { + if (index == 0XDB) + { + light = keyboard.Lights[(int)(5 * keyboard.Width + 2)]; + } + else if (index == 0x38) + { + light = keyboard.Lights[(int)(5 * keyboard.Width + 3)]; + } + } + (_, 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(); @@ -63,7 +107,6 @@ namespace RGB.NET.Devices.Asus catch (Exception ex) { /* "The server threw an exception." seems to be a thing here ... */ } } - #endregion } } diff --git a/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDevice.cs b/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDevice.cs index f16acf4..f3d1b6a 100644 --- a/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDevice.cs +++ b/RGB.NET.Devices.Asus/Keyboard/AsusKeyboardRGBDevice.cs @@ -1,4 +1,5 @@ -using RGB.NET.Core; +using AuraServiceLib; +using RGB.NET.Core; namespace RGB.NET.Devices.Asus { @@ -22,22 +23,271 @@ namespace RGB.NET.Devices.Asus #endregion #region Methods - + private ushort asusCode; /// 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)); + if (DeviceInfo.Device.Type != 0x00081001) + { + int pos = 0; + foreach (IAuraRgbKey key in ((IAuraSyncKeyboard)DeviceInfo.Device).Keys) + { + asusCode = key.Code; + InitializeLed(AsusLedIdMapper(key.Code), new Rectangle(pos++ * 19, 0, 19, 19)); + } + //UK Layout + asusCode = 0x56; + InitializeLed(AsusLedIdMapper(asusCode), new Rectangle(pos++ * 19, 0, 19, 19)); + asusCode = 0x59; + InitializeLed(AsusLedIdMapper(asusCode), new Rectangle(pos++ * 19, 0, 19, 19)); + } + else + { + int ledCount = DeviceInfo.Device.Lights.Count; + for (int i = 0; i < ledCount; i++) + { + asusCode = (ushort)i; + InitializeLed(LedId.Keyboard_Custom1 + i, new Rectangle(i * 19, 0, 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) => asusCode; + /// + private LedId AsusLedIdMapper(ushort asusKey) + { + switch (asusKey) + { + case 0x01: + return LedId.Keyboard_Escape; + case 0x3B: + return LedId.Keyboard_F1; + case 0x3C: + return LedId.Keyboard_F2; + case 0x3D: + return LedId.Keyboard_F3; + case 0x3E: + return LedId.Keyboard_F4; + case 0x3F: + return LedId.Keyboard_F5; + case 0x40: + return LedId.Keyboard_F6; + case 0x41: + return LedId.Keyboard_F7; + case 0x42: + return LedId.Keyboard_F8; + case 0x43: + return LedId.Keyboard_F9; + case 0x44: + return LedId.Keyboard_F10; + case 0x57: + return LedId.Keyboard_F11; + case 0x58: + return LedId.Keyboard_F12; + case 0x02: + return LedId.Keyboard_1; + case 0x03: + return LedId.Keyboard_2; + case 0x04: + return LedId.Keyboard_3; + case 0x05: + return LedId.Keyboard_4; + case 0x06: + return LedId.Keyboard_5; + case 0x07: + return LedId.Keyboard_6; + case 0x08: + return LedId.Keyboard_7; + case 0x09: + return LedId.Keyboard_8; + case 0x0A: + return LedId.Keyboard_9; + case 0x0B: + return LedId.Keyboard_0; + case 0x0C: + return LedId.Keyboard_MinusAndUnderscore; + case 0x0D: + return LedId.Keyboard_EqualsAndPlus; + case 0x0E: + return LedId.Keyboard_Backspace; + case 0x0F: + return LedId.Keyboard_Tab; + case 0x10: + return LedId.Keyboard_Q; + case 0x11: + return LedId.Keyboard_W; + case 0x12: + return LedId.Keyboard_E; + case 0x13: + return LedId.Keyboard_R; + case 0x14: + return LedId.Keyboard_T; + case 0x15: + return LedId.Keyboard_Y; + case 0x16: + return LedId.Keyboard_U; + case 0x17: + return LedId.Keyboard_I; + case 0x18: + return LedId.Keyboard_O; + case 0x19: + return LedId.Keyboard_P; + case 0x1A: + return LedId.Keyboard_BracketLeft; + case 0x1B: + return LedId.Keyboard_BracketRight; + case 0x1C: + return LedId.Keyboard_Enter; + case 0x3A: + return LedId.Keyboard_CapsLock; + case 0x1E: + return LedId.Keyboard_A; + case 0x1F: + return LedId.Keyboard_S; + case 0x20: + return LedId.Keyboard_D; + case 0x21: + return LedId.Keyboard_F; + case 0x22: + return LedId.Keyboard_G; + case 0x23: + return LedId.Keyboard_H; + case 0x24: + return LedId.Keyboard_J; + case 0x25: + return LedId.Keyboard_K; + case 0x26: + return LedId.Keyboard_L; + case 0x27: + return LedId.Keyboard_SemicolonAndColon; + case 0x28: + return LedId.Keyboard_ApostropheAndDoubleQuote; + case 0x29: + return LedId.Keyboard_GraveAccentAndTilde; + case 0x2A: + return LedId.Keyboard_LeftShift; + case 0x2B: + return LedId.Keyboard_Backslash; + case 0x2C: + return LedId.Keyboard_Z; + case 0x2D: + return LedId.Keyboard_X; + case 0x2E: + return LedId.Keyboard_C; + case 0x2F: + return LedId.Keyboard_V; + case 0x30: + return LedId.Keyboard_B; + case 0x31: + return LedId.Keyboard_N; + case 0x32: + return LedId.Keyboard_M; + case 0x33: + return LedId.Keyboard_CommaAndLessThan; + case 0x34: + return LedId.Keyboard_PeriodAndBiggerThan; + case 0x35: + return LedId.Keyboard_SlashAndQuestionMark; + case 0x36: + return LedId.Keyboard_RightShift; + case 0x1D: + return LedId.Keyboard_LeftCtrl; + case 0xDB: + return LedId.Keyboard_LeftGui; + case 0x38: + return LedId.Keyboard_LeftAlt; + case 0x39: + return LedId.Keyboard_Space; + case 0xB8: + return LedId.Keyboard_RightAlt; + case 0x100: + return LedId.Keyboard_RightGui; + case 0xDD: + return LedId.Keyboard_Application; + case 0x9D: + return LedId.Keyboard_RightCtrl; + case 0xB7: + return LedId.Keyboard_PrintScreen; + case 0x46: + return LedId.Keyboard_ScrollLock; + case 0xC5: + return LedId.Keyboard_PauseBreak; + case 0xD2: + return LedId.Keyboard_Insert; + case 0xC7: + return LedId.Keyboard_Home; + case 0xC9: + return LedId.Keyboard_PageUp; + case 0xD3: + return LedId.Keyboard_Delete; + case 0xCF: + return LedId.Keyboard_End; + case 0xD1: + return LedId.Keyboard_PageDown; + case 0xC8: + return LedId.Keyboard_ArrowUp; + case 0xCB: + return LedId.Keyboard_ArrowLeft; + case 0xD0: + return LedId.Keyboard_ArrowDown; + case 0xCD: + return LedId.Keyboard_ArrowRight; + case 0x45: + return LedId.Keyboard_NumLock; + case 0xB5: + return LedId.Keyboard_NumSlash; + case 0x37: + return LedId.Keyboard_NumAsterisk; + case 0x4A: + return LedId.Keyboard_NumMinus; + case 0x47: + return LedId.Keyboard_Num7; + case 0x48: + return LedId.Keyboard_Num8; + case 0x49: + return LedId.Keyboard_Num9; + case 0x53: + return LedId.Keyboard_NumPeriodAndDelete; + case 0x4E: + return LedId.Keyboard_NumPlus; + case 0x4B: + return LedId.Keyboard_Num4; + case 0x4C: + return LedId.Keyboard_Num5; + case 0x4D: + return LedId.Keyboard_Num6; + case 0x4F: + return LedId.Keyboard_Num1; + case 0x50: + return LedId.Keyboard_Num2; + case 0x51: + return LedId.Keyboard_Num3; + case 0x52: + return LedId.Keyboard_Num0; + case 0x9C: + return LedId.Keyboard_NumEnter; + case 0x59: + return LedId.Keyboard_NonUsBackslash; + case 0x56: + return LedId.Keyboard_NonUsTilde; + case 0xB3: + return LedId.Keyboard_NumComma; + case 0x101: + return LedId.Logo; + case 0x102: + return LedId.Keyboard_Custom1; + case 0x103: + return LedId.Keyboard_Custom2; + default: + return LedId.Invalid; + } + } #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); }