From a33f80aa792c5bf92c730fdc7481dea7b8196d6d Mon Sep 17 00:00:00 2001 From: SpoinkyNL Date: Fri, 29 Jul 2016 13:23:12 +0200 Subject: [PATCH] Added Corsair key map --- Artemis/Artemis/Artemis.csproj | 1 + .../Corsair/CorsairKeyboards.cs | 28 ++++++-- .../Corsair/Utilities/KeyMap.cs | 72 +++++++++++++++++++ 3 files changed, 95 insertions(+), 6 deletions(-) create mode 100644 Artemis/Artemis/DeviceProviders/Corsair/Utilities/KeyMap.cs diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj index cb4942ed2..55adb05fb 100644 --- a/Artemis/Artemis/Artemis.csproj +++ b/Artemis/Artemis/Artemis.csproj @@ -279,6 +279,7 @@ + diff --git a/Artemis/Artemis/DeviceProviders/Corsair/CorsairKeyboards.cs b/Artemis/Artemis/DeviceProviders/Corsair/CorsairKeyboards.cs index ff52332f6..3a64c1099 100644 --- a/Artemis/Artemis/DeviceProviders/Corsair/CorsairKeyboards.cs +++ b/Artemis/Artemis/DeviceProviders/Corsair/CorsairKeyboards.cs @@ -1,13 +1,17 @@ -using System.Drawing; +using System; +using System.Drawing; using System.Linq; using System.Windows; using System.Windows.Forms; +using Artemis.DeviceProviders.Corsair.Utilities; using Artemis.Properties; using Artemis.Utilities; using CUE.NET; using CUE.NET.Brushes; using CUE.NET.Devices.Generic.Enums; using CUE.NET.Devices.Keyboard; +using CUE.NET.Devices.Keyboard.Enums; +using CUE.NET.Devices.Keyboard.Keys; using Ninject.Extensions.Logging; using Point = System.Drawing.Point; @@ -49,6 +53,7 @@ namespace Artemis.DeviceProviders.Corsair case "K95 RGB": Height = 7; Width = 25; + Slug = "corsair-k95-rgb"; PreviewSettings = new PreviewSettings(676, 190, new Thickness(0, -15, 0, 0), Resources.k95); break; case "K70 RGB": @@ -56,22 +61,24 @@ namespace Artemis.DeviceProviders.Corsair case "K70 LUX RGB": Height = 7; Width = 21; + Slug = "corsair-k70-rgb"; PreviewSettings = new PreviewSettings(676, 210, new Thickness(0, -25, 0, 0), Resources.k70); break; case "K65 RGB": Height = 7; Width = 18; + Slug = "corsair-k65-rgb"; PreviewSettings = new PreviewSettings(610, 240, new Thickness(0, -30, 0, 0), Resources.k65); break; case "STRAFE RGB": Height = 7; Width = 22; + Slug = "corsair-strafe-rgb"; PreviewSettings = new PreviewSettings(665, 215, new Thickness(0, -5, 0, 0), Resources.strafe); break; } - Logger.Debug("Corsair SDK reported device as: {0}", _keyboard.DeviceInfo.Model); - Slug = "corsair-" + _keyboard.DeviceInfo.Model.Replace(' ', '-').ToLower(); + Logger.Debug("Corsair SDK reported device as: {0}", _keyboard.DeviceInfo.Model); _keyboard.Brush = _keyboardBrush ?? (_keyboardBrush = new ImageBrush()); } @@ -114,9 +121,18 @@ namespace Artemis.DeviceProviders.Corsair { var widthMultiplier = Width/_keyboard.KeyboardRectangle.Width; var heightMultiplier = Height/_keyboard.KeyboardRectangle.Height; - - // TODO: Not all key codes translate to CUE keys - var cueKey = _keyboard.Keys.FirstOrDefault(k => k.KeyId.ToString() == keyCode.ToString()); + + CorsairKey cueKey = null; + try + { + cueKey = _keyboard.Keys.FirstOrDefault(k => k.KeyId.ToString() == keyCode.ToString()) ?? + _keyboard.Keys.FirstOrDefault(k => k.KeyId == KeyMap.FormsKeys[keyCode]); + } + catch (Exception) + { + // ignored + } + if (cueKey != null) return new KeyMatch(keyCode, (int) (cueKey.KeyRectangle.X*widthMultiplier), (int) (cueKey.KeyRectangle.Y*heightMultiplier)); diff --git a/Artemis/Artemis/DeviceProviders/Corsair/Utilities/KeyMap.cs b/Artemis/Artemis/DeviceProviders/Corsair/Utilities/KeyMap.cs new file mode 100644 index 000000000..aa8f34795 --- /dev/null +++ b/Artemis/Artemis/DeviceProviders/Corsair/Utilities/KeyMap.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using System.Windows.Forms; +using CUE.NET.Devices.Keyboard.Enums; +using CUE.NET.Devices.Keyboard.Keys; + +namespace Artemis.DeviceProviders.Corsair.Utilities +{ + public static class KeyMap + { + static KeyMap() + { + FormsKeys = new Dictionary + { + {Keys.Scroll, CorsairKeyboardKeyId.ScrollLock}, + {Keys.Pause, CorsairKeyboardKeyId.PauseBreak}, + {Keys.Back, CorsairKeyboardKeyId.Backspace}, + {Keys.Oemtilde, CorsairKeyboardKeyId.GraveAccentAndTilde}, + {Keys.OemMinus, CorsairKeyboardKeyId.MinusAndUnderscore}, + {Keys.Oemplus, CorsairKeyboardKeyId.EqualsAndPlus}, + {Keys.OemOpenBrackets, CorsairKeyboardKeyId.BracketLeft}, + {Keys.Oem6, CorsairKeyboardKeyId.BracketRight}, + {Keys.Return, CorsairKeyboardKeyId.Enter}, + {Keys.Next, CorsairKeyboardKeyId.PageDown}, + {Keys.Capital, CorsairKeyboardKeyId.CapsLock}, + {Keys.Oem1, CorsairKeyboardKeyId.SemicolonAndColon}, + {Keys.Oem7, CorsairKeyboardKeyId.ApostropheAndDoubleQuote}, + {Keys.OemBackslash, CorsairKeyboardKeyId.Backslash}, + {Keys.LShiftKey, CorsairKeyboardKeyId.LeftShift}, + {Keys.Oem5, CorsairKeyboardKeyId.NonUsBackslash}, + {Keys.Oemcomma, CorsairKeyboardKeyId.CommaAndLessThan}, + {Keys.OemPeriod, CorsairKeyboardKeyId.PeriodAndBiggerThan}, + {Keys.OemQuestion, CorsairKeyboardKeyId.SlashAndQuestionMark}, + {Keys.RShiftKey, CorsairKeyboardKeyId.RightShift}, + {Keys.LControlKey, CorsairKeyboardKeyId.LeftCtrl}, + {Keys.LWin, CorsairKeyboardKeyId.LeftGui}, + {Keys.LMenu, CorsairKeyboardKeyId.LeftAlt}, + {Keys.RMenu, CorsairKeyboardKeyId.RightAlt}, + {Keys.RWin, CorsairKeyboardKeyId.RightGui}, + {Keys.Apps, CorsairKeyboardKeyId.Application}, + {Keys.RControlKey, CorsairKeyboardKeyId.RightCtrl}, + {Keys.Left, CorsairKeyboardKeyId.LeftArrow}, + {Keys.Down, CorsairKeyboardKeyId.DownArrow}, + {Keys.Right, CorsairKeyboardKeyId.RightArrow}, + {Keys.Up, CorsairKeyboardKeyId.UpArrow}, + {Keys.NumPad0, CorsairKeyboardKeyId.Keypad0}, + {Keys.NumPad1, CorsairKeyboardKeyId.Keypad1}, + {Keys.NumPad2, CorsairKeyboardKeyId.Keypad2}, + {Keys.NumPad3, CorsairKeyboardKeyId.Keypad3}, + {Keys.NumPad4, CorsairKeyboardKeyId.Keypad4}, + {Keys.NumPad5, CorsairKeyboardKeyId.Keypad5}, + {Keys.NumPad6, CorsairKeyboardKeyId.Keypad6}, + {Keys.NumPad7, CorsairKeyboardKeyId.Keypad7}, + {Keys.NumPad8, CorsairKeyboardKeyId.Keypad8}, + {Keys.NumPad9, CorsairKeyboardKeyId.Keypad9}, + {Keys.Divide, CorsairKeyboardKeyId.KeypadSlash}, + {Keys.Multiply, CorsairKeyboardKeyId.KeypadAsterisk}, + {Keys.Subtract, CorsairKeyboardKeyId.KeypadMinus}, + {Keys.Add, CorsairKeyboardKeyId.KeypadPlus}, + {Keys.Decimal, CorsairKeyboardKeyId.KeypadPeriodAndDelete}, + {Keys.MediaStop, CorsairKeyboardKeyId.Stop}, + {Keys.MediaPreviousTrack, CorsairKeyboardKeyId.ScanPreviousTrack}, + {Keys.MediaNextTrack, CorsairKeyboardKeyId.ScanNextTrack}, + {Keys.MediaPlayPause, CorsairKeyboardKeyId.PlayPause}, + {Keys.VolumeMute, CorsairKeyboardKeyId.Mute}, + {Keys.VolumeUp, CorsairKeyboardKeyId.VolumeUp}, + {Keys.VolumeDown, CorsairKeyboardKeyId.VolumeDown} + }; + } + + public static Dictionary FormsKeys { get; set; } + } +} \ No newline at end of file