diff --git a/.all-contributorsrc b/.all-contributorsrc
index bbda21bd0..a076c205f 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -233,8 +233,29 @@
"profile": "https://github.com/xQwexx",
"contributions": [
"code"
+ "question",
+ "maintenance",
+ "doc",
+ "design",
+ "review"
+ "ideas"
+ ]
+ },
+ {
+ "login": "Predator4578",
+ "name": "Codename-Antares",
+ "avatar_url": "https://avatars.githubusercontent.com/Predator4578",
+ "profile": "https://github.com/Predator4578",
+ "contributions": [
+ "code"
+ "question",
+ "maintenance",
+ "doc",
+ "design",
+ "review"
+ "ideas"
]
- }
+ }
],
"contributorsPerLine": 7
}
diff --git a/.github/workflows/aurora-dev.yml b/.github/workflows/aurora-dev.yml
new file mode 100644
index 000000000..f02d57ccc
--- /dev/null
+++ b/.github/workflows/aurora-dev.yml
@@ -0,0 +1,87 @@
+name: Aurora CD
+
+on:
+ push:
+ branches: [ dev ]
+
+jobs:
+
+ build:
+
+ strategy:
+ matrix:
+ configuration: [Release]
+
+ runs-on: windows-2019 # For a list of available runner types, refer to
+ # https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on
+
+ env:
+ Solution_Name: Project-Aurora/Project-Aurora.sln
+
+ steps:
+ - name: Generate build number
+ id: buildnumber
+ uses: einaregilsson/build-number@v3
+ with:
+ token: ${{secrets.github_token}}
+
+ - uses: rishabhgupta/split-by@v1
+ id: split
+ with:
+ string: ${{github.repository}}
+ split-by: '/'
+
+ - name: Checkout
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ submodules: true
+
+ # Install the .NET Core workload
+ - name: Install .NET Core
+ uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: 5.0.x
+
+ # Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild
+ - name: Setup MSBuild.exe
+ uses: microsoft/setup-msbuild@v1.0.2
+
+ # Restore the application to populate the obj folder with RuntimeIdentifiers
+ - name: Restore the application
+ run: msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration
+ env:
+ Configuration: ${{ matrix.configuration }}
+
+ - name: Build
+ run: msbuild $env:Solution_Name /p:Configuration=$env:Configuration
+ env:
+ APPVEYOR_BUILD_VERSION: v${{steps.buildnumber.outputs.build_number}}
+ OWNER: ${{ steps.split.outputs._0 }}
+ REPOSITORY: ${{ steps.split.outputs._1 }}
+ Configuration: ${{ matrix.configuration }}
+
+ # Create the app package by building and packaging the Windows Application Packaging project
+ - name: Building the installer
+ run: |
+ "%programfiles(x86)%\Inno Setup 6\iscc.exe" /DEXTERNAL_VERSION=${{steps.buildnumber.outputs.build_number}} Installer\installer.iss
+ shell: cmd
+
+ - name: Archive Build
+ shell: pwsh
+ run: |
+ Compress-Archive .\Build\Release\* Aurora-v${{steps.buildnumber.outputs.build_number}}.zip
+
+ - name: Installer Release
+ uses: softprops/action-gh-release@v1
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+ target_commitish: dev
+ draft: true
+ files: |
+ Aurora-setup-v${{steps.buildnumber.outputs.build_number}}.exe
+ Aurora-v${{steps.buildnumber.outputs.build_number}}.zip
+ tag_name: v${{steps.buildnumber.outputs.build_number}}
+ allow_override: false
+ prerelease: true
+
diff --git a/.github/workflows/aurora-release.yml b/.github/workflows/aurora-release.yml
new file mode 100644
index 000000000..b0b42b990
--- /dev/null
+++ b/.github/workflows/aurora-release.yml
@@ -0,0 +1,91 @@
+name: Aurora CD
+
+on:
+ push:
+ branches: [ master ]
+
+jobs:
+
+ build:
+
+ strategy:
+ matrix:
+ configuration: [Release]
+
+ runs-on: windows-2019 # For a list of available runner types, refer to
+ # https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on
+
+ env:
+ Solution_Name: Project-Aurora/Project-Aurora.sln
+
+ steps:
+ - name: Generate build number
+ id: buildnumber
+ uses: einaregilsson/build-number@v3
+ with:
+ token: ${{secrets.github_token}}
+
+ - uses: rishabhgupta/split-by@v1
+ id: split
+ with:
+ string: ${{github.repository}}
+ split-by: '/'
+
+ - name: Checkout
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ submodules: true
+
+ # Install the .NET Core workload
+ - name: Install .NET Core
+ uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: 5.0.x
+
+ # Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild
+ - name: Setup MSBuild.exe
+ uses: microsoft/setup-msbuild@v1.0.2
+
+ # Restore the application to populate the obj folder with RuntimeIdentifiers
+ - name: Restore the application
+ run: msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration
+ env:
+ Configuration: ${{ matrix.configuration }}
+
+ - name: Build
+ run: msbuild $env:Solution_Name /p:Configuration=$env:Configuration
+ env:
+ APPVEYOR_BUILD_VERSION: v${{steps.buildnumber.outputs.build_number}}
+ OWNER: ${{ steps.split.outputs._0 }}
+ REPOSITORY: ${{ steps.split.outputs._1 }}
+ Configuration: ${{ matrix.configuration }}
+
+ # Decode the base 64 encoded pfx and save the Signing_Certificate
+ #- name: Decode the pfx
+ # run: |
+ # $pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.Base64_Encoded_Pfx }}")
+ # $certificatePath = Join-Path -Path $env:Wap_Project_Directory -ChildPath GitHubActionsWorkflow.pfx
+ # [IO.File]::WriteAllBytes("$certificatePath", $pfx_cert_byte)
+
+ # Create the app package by building and packaging the Windows Application Packaging project
+ - name: Building the installer
+ run: |
+ "%programfiles(x86)%\Inno Setup 6\iscc.exe" /DEXTERNAL_VERSION=${{steps.buildnumber.outputs.build_number}} Installer\installer.iss
+ shell: cmd
+
+ - name: Archive Build
+ shell: pwsh
+ run: |
+ Compress-Archive .\Build\Release\* Aurora-v${{steps.buildnumber.outputs.build_number}}.zip
+
+ - name: Release
+ uses: softprops/action-gh-release@v1
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+ draft: true
+ files: |
+ Aurora-setup-v${{steps.buildnumber.outputs.build_number}}.exe
+ Aurora-v${{steps.buildnumber.outputs.build_number}}.zip
+ tag_name: v${{steps.buildnumber.outputs.build_number}}
+ allow_override: true
diff --git a/Project-Aurora/Aurora-Updater/Aurora-Updater.csproj b/Project-Aurora/Aurora-Updater/Aurora-Updater.csproj
index c45859826..0d855c201 100644
--- a/Project-Aurora/Aurora-Updater/Aurora-Updater.csproj
+++ b/Project-Aurora/Aurora-Updater/Aurora-Updater.csproj
@@ -56,20 +56,20 @@
-
+
false
- 12.0.3
+ 13.0.1
- 0.47.0
+ 0.50.0
- 1.2.2
+ 1.3.0
diff --git a/Project-Aurora/Aurora-Updater/Program.cs b/Project-Aurora/Aurora-Updater/Program.cs
index 4f9216a61..06f8d5889 100755
--- a/Project-Aurora/Aurora-Updater/Program.cs
+++ b/Project-Aurora/Aurora-Updater/Program.cs
@@ -4,6 +4,7 @@
using System.Security.Principal;
using System.Windows.Forms;
using System.Linq;
+using System.Reflection;
using Version = SemVer.Version;
namespace Aurora_Updater
@@ -82,10 +83,13 @@ static void Main(string[] args)
MessageBoxButtons.OK);
return;
}
- versionMajor = new Version(_maj, true);
+ versionMajor = new Version(_maj.TrimStart('v') + ".0.0", true);
+
+ string owner = FileVersionInfo.GetVersionInfo(auroraPath).CompanyName;
+ string repository = FileVersionInfo.GetVersionInfo(auroraPath).ProductName;
//Initialize UpdateManager
- StaticStorage.Manager = new UpdateManager(versionMajor);
+ StaticStorage.Manager = new UpdateManager(versionMajor, owner, repository);
//Check if update retrieval was successful.
if (StaticStorage.Manager.updateState == UpdateStatus.Error)
@@ -109,7 +113,7 @@ static void Main(string[] args)
}
else
{
- Version latestV = new Version(StaticStorage.Manager.LatestRelease.TagName.TrimStart('v'), true);
+ Version latestV = new Version(StaticStorage.Manager.LatestRelease.TagName.TrimStart('v') + ".0.0", true);
if (latestV > versionMajor)
{
diff --git a/Project-Aurora/Aurora-Updater/UpdateManager.cs b/Project-Aurora/Aurora-Updater/UpdateManager.cs
index 54aec18df..7cace90f3 100755
--- a/Project-Aurora/Aurora-Updater/UpdateManager.cs
+++ b/Project-Aurora/Aurora-Updater/UpdateManager.cs
@@ -75,11 +75,11 @@ public class UpdateManager
private GitHubClient gClient = new GitHubClient(new ProductHeaderValue("aurora-updater"));
public Release LatestRelease;
- public UpdateManager(Version version)
+ public UpdateManager(Version version, string author, string repoName)
{
LoadSettings();
PerformCleanup();
- FetchData(version);
+ FetchData(version, author, repoName);
}
public void LoadSettings()
@@ -109,20 +109,23 @@ public int GetTotalProgress()
return (int)((downloadProgess + extractProgess) / 2.0f * 100.0f);
}
- private bool FetchData(Version version)
+ private bool FetchData(Version version, string owner, string repositoryName)
{
try
{
if (Config.GetDevReleases || !String.IsNullOrWhiteSpace(version.PreRelease))
- LatestRelease = gClient.Repository.Release.GetAll("Aurora-RGB", "Aurora", new ApiOptions { PageCount = 1, PageSize = 1 }).Result[0];
+ LatestRelease = gClient.Repository.Release.GetAll(owner, repositoryName, new ApiOptions { PageCount = 1, PageSize = 1 }).Result[0];
else
- LatestRelease = gClient.Repository.Release.GetLatest("Aurora-RGB", "Aurora").Result;
+ LatestRelease = gClient.Repository.Release.GetLatest(owner, repositoryName).Result;
//Console.WriteLine(reply);
}
catch (Exception exc)
{
updateState = UpdateStatus.Error;
+ MessageBox.Show(
+ $"Could not find update.\r\nError:\r\n{exc}",
+ "Aurora Updater - Error");
return false;
}
@@ -242,11 +245,11 @@ private bool ExtractUpdate()
for (int i = 0; i < countOfEntries; i++)
{
- float percentage = ((float)i / (float)countOfEntries);
+ float percentage = i / (float)countOfEntries;
var fileEntry = updateFile.Entries[i];
log.Enqueue(new LogEntry($"[{Math.Truncate(percentage * 100)}%] Updating: {fileEntry.FullName}"));
- this.extractProgess = (float)(Math.Truncate(percentage * 100) / 100.0f);
+ extractProgess = (float)(Math.Truncate(percentage * 100) / 100.0f);
if (ignoreFiles.Contains(fileEntry.FullName))
continue;
@@ -256,6 +259,7 @@ private bool ExtractUpdate()
var filePath = Path.Combine(Program.exePath, fileEntry.FullName);
if (File.Exists(filePath))
File.Move(filePath, $"{filePath}.updateremove");
+ Directory.CreateDirectory(Path.GetDirectoryName(filePath));
fileEntry.ExtractToFile(filePath);
}
catch (IOException e)
@@ -264,7 +268,6 @@ private bool ExtractUpdate()
MessageBox.Show($"{fileEntry.FullName} is inaccessible.\r\nPlease close Aurora.\r\n\r\n {e.Message}");
i--;
- continue;
}
}
diff --git a/Project-Aurora/Project-Aurora/App.xaml.cs b/Project-Aurora/Project-Aurora/App.xaml.cs
index d8d696750..0f2f2caf0 100755
--- a/Project-Aurora/Project-Aurora/App.xaml.cs
+++ b/Project-Aurora/Project-Aurora/App.xaml.cs
@@ -116,7 +116,7 @@ public static void LogLine(this NLog.Logger logger, string text, Logging_Level l
public static NetworkListener net_listener;
public static Configuration Configuration;
public static DeviceManager dev_manager;
- public static KeyboardLayoutManager kbLayout;
+ public static DeviceLayoutManager devicesLayout;
public static Effects effengine;
public static KeyRecorder key_recorder;
public static RzSdkManager razerSdkManager;
@@ -313,9 +313,9 @@ protected override void OnStartup(StartupEventArgs e)
Global.logger.Info("Loading Plugins");
(Global.PluginManager = new PluginManager()).Initialize();
- Global.logger.Info("Loading KB Layouts");
- Global.kbLayout = new KeyboardLayoutManager();
- Global.kbLayout.LoadBrandDefault();
+
+ Global.devicesLayout = new DeviceLayoutManager();
+
Global.logger.Info("Loading Input Hooking");
Global.InputEvents = new InputEvents();
@@ -405,8 +405,11 @@ protected override void OnStartup(StartupEventArgs e)
Global.logger.Info("Loading ConfigUI...");
MainWindow = new ConfigUI();
+ Global.LightingStateManager.InitUpdate();
((ConfigUI)MainWindow).Display();
+ Global.logger.Info("Loading Device Layouts");
+
//Debug Windows on Startup
if (Global.Configuration.BitmapWindowOnStartUp)
Window_BitmapView.Open();
@@ -461,9 +464,12 @@ private static void InterceptVolumeAsBrightness(object sender, InputInterceptor.
{
if (e.KeyDown)
{
- float brightness = Global.Configuration.GlobalBrightness;
- brightness += keys == Keys.VolumeUp ? 0.05f : -0.05f;
- Global.Configuration.GlobalBrightness = Math.Max(0f, Math.Min(1f, brightness));
+ float brightness = Global.Configuration.KeyboardBrightness; // Changed Global to Keyboard (for OpenRGB devices)
+ brightness += keys == Keys.VolumeUp ? 0.01f : -0.01f;
+// Global.Configuration.GlobalBrightness = Math.Max(0f, Math.Min(1f, brightness));
+ Global.Configuration.GlobalBrightness = Math.Max(0f, Math.Min(1f, brightness)); // Added Global Brightness for SDK Devices
+ Global.Configuration.KeyboardBrightness = Math.Max(0f, Math.Min(1f, brightness)); // Added Keyboard for Brightness too (for OpenRGB devices
+ Global.Configuration.PeripheralBrightness = Math.Max(0f, Math.Min(1f, brightness)); // Added Pheripheral for Brightness too (for Pheripheral devices)
ConfigManager.Save(Global.Configuration);
}
@@ -517,28 +523,33 @@ protected override void OnExit(ExitEventArgs e)
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Exception exc = (Exception)e.ExceptionObject;
- Global.logger.Fatal("Fatal Exception caught : " + exc);
+ Global.logger.Fatal("Fatal Exception caught : " + exc, exc);
Global.logger.Fatal(String.Format("Runtime terminating: {0}", e.IsTerminating));
LogManager.Flush();
-
- System.Windows.MessageBox.Show("Aurora fatally crashed. Please report the follow to author: \r\n\r\n" + exc, "Aurora has stopped working");
- //Perform exit operations
- System.Windows.Application.Current.Shutdown();
+ if (Global.Configuration.CloseProgramOnException)
+ {
+ System.Windows.MessageBox.Show("Aurora fatally crashed. Please report the follow to author: \r\n\r\n" + exc, "Aurora has stopped working");
+ //Perform exit operations
+ System.Windows.Application.Current.Shutdown();
+ }
}
private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
- Exception exc = (Exception)e.Exception;
- Global.logger.Fatal("Fatal Exception caught : " + exc);
+ Exception exc = e.Exception;
+ Global.logger.Fatal("Fatal Exception caught : " + exc, exc);
LogManager.Flush();
if (!Global.isDebug)
e.Handled = true;
else
throw exc;
- System.Windows.MessageBox.Show("Aurora fatally crashed. Please report the follow to author: \r\n\r\n" + exc, "Aurora has stopped working");
- //Perform exit operations
- System.Windows.Application.Current.Shutdown();
+ if (Global.Configuration.CloseProgramOnException)
+ {
+ System.Windows.MessageBox.Show("Aurora fatally crashed. Please report the follow to author: \r\n\r\n" + exc, "Aurora has stopped working");
+ //Perform exit operations
+ System.Windows.Application.Current.Shutdown();
+ }
}
public static void InstallLogitech()
diff --git a/Project-Aurora/Project-Aurora/ConfigUI.xaml b/Project-Aurora/Project-Aurora/ConfigUI.xaml
index f682fe89c..8214d9745 100755
--- a/Project-Aurora/Project-Aurora/ConfigUI.xaml
+++ b/Project-Aurora/Project-Aurora/ConfigUI.xaml
@@ -6,7 +6,7 @@
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
xmlns:local="clr-namespace:Aurora"
xmlns:tb="http://www.hardcodet.net/taskbar"
- xmlns:Controls="clr-namespace:Aurora.Controls" xmlns:Settings="clr-namespace:Aurora.Settings" x:Class="Aurora.ConfigUI"
+ xmlns:Controls="clr-namespace:Aurora.Controls" xmlns:Settings="clr-namespace:Aurora.Settings" xmlns:DeviceLayout="clr-namespace:Aurora.Settings.DeviceLayoutViewer" x:Class="Aurora.ConfigUI"
mc:Ignorable="d" Height="656" Width="1000" Title="Aurora" Loaded="Window_Loaded" Initialized="Window_Initialized" Closing="Window_Closing" Activated="Window_Activated" Deactivated="Window_Deactivated" HorizontalContentAlignment="Stretch" MinWidth="926" MinHeight="575"
DataContext="{Binding RelativeSource={RelativeSource Self}}" SizeChanged="Window_SizeChanged">
@@ -87,18 +87,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/Project-Aurora/Project-Aurora/ConfigUI.xaml.cs b/Project-Aurora/Project-Aurora/ConfigUI.xaml.cs
index 01133260d..d278c9519 100755
--- a/Project-Aurora/Project-Aurora/ConfigUI.xaml.cs
+++ b/Project-Aurora/Project-Aurora/ConfigUI.xaml.cs
@@ -15,11 +15,9 @@
using Aurora.Controls;
using Aurora.Profiles.Generic_Application;
using System.IO;
-using Aurora.Settings.Keycaps;
using Aurora.Profiles;
using Aurora.Settings.Layers;
using Aurora.Profiles.Aurora_Wrapper;
-using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using PropertyChanged;
@@ -27,42 +25,35 @@
namespace Aurora
{
[DoNotNotify]
- partial class ConfigUI : Window, INotifyPropertyChanged
+ partial class ConfigUI : INotifyPropertyChanged
{
- Control_Settings settingsControl = new Control_Settings();
- Control_LayerControlPresenter layerPresenter = new Control_LayerControlPresenter();
- Control_ProfileControlPresenter profilePresenter = new Control_ProfileControlPresenter();
+ Control_Settings settingsControl = new();
+ Control_LayerControlPresenter layerPresenter = new();
+ Control_ProfileControlPresenter profilePresenter = new();
- EffectColor desktop_color_scheme = new EffectColor(0, 0, 0);
+ EffectColor desktop_color_scheme = new(0, 0, 0);
- EffectColor transition_color = new EffectColor();
- EffectColor current_color = new EffectColor();
+ EffectColor transition_color = new();
+ EffectColor current_color = new();
- private float transitionamount = 0.0f;
+ private float transitionamount;
- private FrameworkElement selected_item = null;
- private FrameworkElement _selectedManager = null;
+ private FrameworkElement selected_item;
+ private FrameworkElement _selectedManager;
- private bool settingsloaded = false;
- private bool shownHiddenMessage = false;
+ private bool settingsloaded;
+ private bool shownHiddenMessage;
private string saved_preview_key = "";
private Timer virtual_keyboard_timer;
- private Stopwatch recording_stopwatch = new Stopwatch();
- private Grid virtial_kb = new Grid();
- private readonly double virtual_keyboard_width;
- private readonly double virtual_keyboard_height;
-
- private readonly double width;
- private readonly double height;
public static readonly DependencyProperty FocusedApplicationProperty = DependencyProperty.Register("FocusedApplication", typeof(Profiles.Application), typeof(ConfigUI), new PropertyMetadata(null, new PropertyChangedCallback(FocusedProfileChanged)));
public Profiles.Application FocusedApplication
{
- get { return (Profiles.Application)GetValue(FocusedApplicationProperty); }
+ get => (Profiles.Application)GetValue(FocusedApplicationProperty);
set
{
SetValue(FocusedApplicationProperty, value);
@@ -70,17 +61,15 @@ public Profiles.Application FocusedApplication
}
}
- LayerEditor layer_editor = new LayerEditor();
-
- private bool _ShowHidden = false;
+ private bool _ShowHidden;
public bool ShowHidden
{
- get { return _ShowHidden; }
+ get => _ShowHidden;
set
{
_ShowHidden = value;
- this.ShowHiddenChanged(value);
+ ShowHiddenChanged(value);
}
}
@@ -88,34 +77,24 @@ public ConfigUI()
{
InitializeComponent();
- virtual_keyboard_height = this.keyboard_grid.Height;
- virtual_keyboard_width = this.keyboard_grid.Width;
-
- width = Width;
- height = Height;
-
- Global.kbLayout.KeyboardLayoutUpdated += KbLayout_KeyboardLayoutUpdated;
-
ctrlProfileManager.ProfileSelected += CtrlProfileManager_ProfileSelected;
GenerateProfileStack();
settingsControl.DataContext = this;
-
-
}
internal void Display()
{
if (App.isSilent || Global.Configuration.StartSilently)
{
- this.Visibility = Visibility.Hidden;
- this.WindowStyle = WindowStyle.None;
- this.ShowInTaskbar = false;
+ Visibility = Visibility.Hidden;
+ WindowStyle = WindowStyle.None;
+ ShowInTaskbar = false;
Hide();
}
else
{
- this.Show();
+ Show();
}
}
@@ -123,7 +102,7 @@ private void CtrlProfileManager_ProfileSelected(ApplicationProfile profile)
{
profilePresenter.Profile = profile;
- if (_selectedManager.Equals(this.ctrlProfileManager))
+ if (_selectedManager.Equals(ctrlProfileManager))
SelectedControl = profilePresenter;
}
@@ -141,28 +120,7 @@ private void Layer_manager_NewLayer(Layer layer)
SelectedControl = layerPresenter;
}
- private void KbLayout_KeyboardLayoutUpdated(object sender)
- {
- virtial_kb = Global.kbLayout.Virtual_keyboard;
-
- keyboard_grid.Children.Clear();
- keyboard_grid.Children.Add(virtial_kb);
- keyboard_grid.Children.Add(new LayerEditor());
-
- keyboard_grid.Width = virtial_kb.Width;
- this.Width = width + (virtial_kb.Width - virtual_keyboard_width);
-
- keyboard_grid.Height = virtial_kb.Height;
- this.Height = height + (virtial_kb.Height - virtual_keyboard_height);
-
- keyboard_grid.UpdateLayout();
-
- keyboard_viewbox.MaxWidth = virtial_kb.Width + 50;
- keyboard_viewbox.MaxHeight = virtial_kb.Height + 50;
- keyboard_viewbox.UpdateLayout();
-
- this.UpdateLayout();
- }
+
private void Window_Loaded(object sender, RoutedEventArgs e)
{
@@ -170,45 +128,26 @@ private void Window_Loaded(object sender, RoutedEventArgs e)
if (!settingsloaded)
{
- virtual_keyboard_timer = new Timer(33);
- virtual_keyboard_timer.Elapsed += new ElapsedEventHandler(virtual_keyboard_timer_Tick);
+ virtual_keyboard_timer = new Timer(8);
+ virtual_keyboard_timer.Elapsed += LayoutRenderTimerTick;
virtual_keyboard_timer.Start();
settingsloaded = true;
}
- this.keyboard_record_message.Visibility = Visibility.Hidden;
-
current_color = desktop_color_scheme;
bg_grid.Background = new SolidColorBrush(Color.FromRgb(desktop_color_scheme.Red, desktop_color_scheme.Green, desktop_color_scheme.Blue));
- virtial_kb = Global.kbLayout.Virtual_keyboard;
-
- keyboard_grid.Children.Clear();
- keyboard_grid.Children.Add(virtial_kb);
- keyboard_grid.Children.Add(new LayerEditor());
-
- keyboard_grid.Width = virtial_kb.Width;
- this.Width = width + (virtial_kb.Width - virtual_keyboard_width);
-
- keyboard_grid.Height = virtial_kb.Height;
- this.Height = height + (virtial_kb.Height - virtual_keyboard_height);
-
- keyboard_grid.UpdateLayout();
-
- keyboard_viewbox.MaxWidth = virtial_kb.Width + 50;
- keyboard_viewbox.MaxHeight = virtial_kb.Height + 50;
- keyboard_viewbox.UpdateLayout();
UpdateManagerStackFocus(ctrlLayerManager);
- this.UpdateLayout();
+ UpdateLayout();
- foreach (Image child in this.profiles_stack.Children)
+ foreach (Image child in profiles_stack.Children)
{
if (child.Visibility == Visibility.Visible)
{
- this.ProfileImage_MouseDown(child, null);
+ ProfileImage_MouseDown(child, null);
break;
}
}
@@ -233,7 +172,7 @@ public static bool ApplicationIsActivated()
[System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
private static extern int GetWindowThreadProcessId(IntPtr handle, out int processId);
- private void virtual_keyboard_timer_Tick(object sender, EventArgs e)
+ private void LayoutRenderTimerTick(object sender, EventArgs e)
{
if (!ApplicationIsActivated())
return;
@@ -249,20 +188,11 @@ private void virtual_keyboard_timer_Tick(object sender, EventArgs e)
bg_grid.UpdateLayout();
}
-
- Dictionary keylights = new Dictionary();
-
if (IsActive)
{
- keylights = Global.effengine.GetKeyboardLights();
- Global.kbLayout.SetKeyboardColors(keylights);
+ deviceLayerPresenter.Refresh();
}
- if (Global.key_recorder.IsRecording())
- this.keyboard_record_message.Visibility = Visibility.Visible;
- else
- this.keyboard_record_message.Visibility = Visibility.Hidden;
-
});
}
@@ -280,9 +210,9 @@ private void trayicon_menu_quit_Click(object sender, RoutedEventArgs e)
private void trayicon_menu_settings_Click(object sender, RoutedEventArgs e)
{
- this.ShowInTaskbar = true;
- this.WindowStyle = WindowStyle.SingleBorderWindow;
- this.Show();
+ ShowInTaskbar = true;
+ WindowStyle = WindowStyle.SingleBorderWindow;
+ Show();
}
private void Window_Initialized(object sender, EventArgs e)
@@ -290,7 +220,7 @@ private void Window_Initialized(object sender, EventArgs e)
}
- private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
+ private void Window_Closing(object sender, CancelEventArgs e)
{
if (Global.Configuration.CloseMode == AppExitMode.Ask)
{
@@ -326,7 +256,7 @@ private void exitApp()
private void minimizeApp()
{
- this.FocusedApplication?.SaveAll();
+ FocusedApplication?.SaveAll();
if (!shownHiddenMessage)
{
@@ -360,13 +290,13 @@ private void Window_Deactivated(object sender, EventArgs e)
private Image profile_hidden;
- private BitmapImage _visible = new BitmapImage(new Uri(@"Resources/Visible.png", UriKind.Relative));
- private BitmapImage _not_visible = new BitmapImage(new Uri(@"Resources/Not Visible.png", UriKind.Relative));
+ private BitmapImage _visible = new(new Uri(@"Resources/Visible.png", UriKind.Relative));
+ private BitmapImage _not_visible = new(new Uri(@"Resources/Not Visible.png", UriKind.Relative));
private void GenerateProfileStack(string focusedKey = null)
{
selected_item = null;
- this.profiles_stack.Children.Clear();
+ profiles_stack.Children.Clear();
/*Image profile_desktop = new Image
{
@@ -428,7 +358,7 @@ private void GenerateProfileStack(string focusedKey = null)
profile_grid.Children.Add(profile_image);
profile_grid.Children.Add(profile_remove);
- this.profiles_stack.Children.Add(profile_grid);
+ profiles_stack.Children.Add(profile_grid);
}
else
{
@@ -441,13 +371,13 @@ private void GenerateProfileStack(string focusedKey = null)
Visibility = application.Settings.Hidden ? Visibility.Collapsed : Visibility.Visible
};
profile_image.MouseDown += ProfileImage_MouseDown;
- this.profiles_stack.Children.Add(profile_image);
+ profiles_stack.Children.Add(profile_image);
}
if (application.Config.ID.Equals(focusedKey))
{
- this.FocusedApplication = application;
- this.TransitionToProfile(profile_image);
+ FocusedApplication = application;
+ TransitionToProfile(profile_image);
}
}
}
@@ -460,7 +390,7 @@ private void GenerateProfileStack(string focusedKey = null)
Margin = new Thickness(0, 5, 0, 0)
};
profile_add.MouseDown += AddProfile_MouseDown;
- this.profiles_stack.Children.Add(profile_add);
+ profiles_stack.Children.Add(profile_add);
//Show hidden profiles button
profile_hidden = new Image
@@ -470,12 +400,12 @@ private void GenerateProfileStack(string focusedKey = null)
Margin = new Thickness(0, 5, 0, 0)
};
profile_hidden.MouseDown += HiddenProfile_MouseDown;
- this.profiles_stack.Children.Add(profile_hidden);
+ profiles_stack.Children.Add(profile_hidden);
}
private void HiddenProfile_MouseDown(object sender, EventArgs e)
{
- this.ShowHidden = !this.ShowHidden;
+ ShowHidden = !ShowHidden;
}
protected void ShowHiddenChanged(bool value)
@@ -502,13 +432,13 @@ protected void ShowHiddenChanged(bool value)
private void mbtnHidden_Checked(object sender, RoutedEventArgs e)
{
MenuItem btn = sender as MenuItem;
- Image img = this.cmenuProfiles.PlacementTarget as Image;
+ Image img = cmenuProfiles.PlacementTarget as Image;
if (img != null)
{
img.Opacity = btn.IsChecked ? 0.5 : 1;
- if (!this.ShowHidden && btn.IsChecked)
+ if (!ShowHidden && btn.IsChecked)
img.Visibility = Visibility.Collapsed;
(img.Tag as Profiles.Application)?.SaveProfiles();
@@ -537,14 +467,6 @@ private void ContextMenu_Opened(object sender, RoutedEventArgs e)
}
- private void ProfileImage_Edit_MouseUp(object sender, MouseEventArgs e)
- {
- Image img = sender as Image;
- Profiles.Application profile = img.Tag as Profiles.Application;
- profile.Settings.Hidden = !profile.Settings.Hidden;
- img.Opacity = profile.Settings.Hidden ? 0.5 : 1;
- }
-
private void Profile_grid_MouseLeave(object sender, MouseEventArgs e)
{
if ((sender as Grid)?.Tag is Image)
@@ -559,7 +481,7 @@ private void Profile_grid_MouseEnter(object sender, MouseEventArgs e)
private void TransitionToProfile(Image source)
{
- this.FocusedApplication = source.Tag as Profiles.Application;
+ FocusedApplication = source.Tag as Profiles.Application;
var bitmap = (BitmapSource)source.Source;
var color = Utils.ColorUtils.GetAverageColor(bitmap);
@@ -577,11 +499,11 @@ private void ProfileImage_MouseDown(object sender, MouseButtonEventArgs e)
if (image != null && image.Tag != null && image.Tag is Profiles.Application)
{
if (e == null || e.LeftButton == MouseButtonState.Pressed)
- this.TransitionToProfile(image);
+ TransitionToProfile(image);
else if (e.RightButton == MouseButtonState.Pressed)
{
- this.cmenuProfiles.PlacementTarget = (Image)sender;
- this.cmenuProfiles.IsOpen = true;
+ cmenuProfiles.PlacementTarget = (Image)sender;
+ cmenuProfiles.IsOpen = true;
}
}
}
@@ -626,7 +548,7 @@ private void RemoveProfile_MouseDown(object sender, MouseButtonEventArgs e)
var idx = Math.Max(eventList.FindIndex(x => x.Key == name), 0);
Global.LightingStateManager.RemoveGenericProfile(name);
//ConfigManager.Save(Global.Configuration);
- this.GenerateProfileStack(eventList[idx].Key);
+ GenerateProfileStack(eventList[idx].Key);
}
}
}
@@ -674,7 +596,7 @@ private void AddProfile_MouseDown(object sender, MouseButtonEventArgs e)
private void DesktopControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
- this.FocusedApplication = null;
+ FocusedApplication = null;
SelectedControl = settingsControl;
current_color = desktop_color_scheme;
@@ -755,18 +677,18 @@ private void UpdateProfileStackBackground(FrameworkElement item)
public void ShowWindow()
{
Global.logger.Info("Show Window called");
- this.Visibility = Visibility.Visible;
- this.WindowStyle = WindowStyle.SingleBorderWindow;
- this.ShowInTaskbar = true;
+ Visibility = Visibility.Visible;
+ WindowStyle = WindowStyle.SingleBorderWindow;
+ ShowInTaskbar = true;
//this.Topmost = true;
- this.Show();
- this.Activate();
+ Show();
+ Activate();
}
private void trayicon_TrayMouseDoubleClick(object sender, RoutedEventArgs e)
{
- this.ShowInTaskbar = true;
- this.ShowWindow();
+ ShowInTaskbar = true;
+ ShowWindow();
}
private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
@@ -802,13 +724,13 @@ private void UpdateManagerStackFocus(object focusedElement, bool forced = false)
private void ctrlLayerManager_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (!sender.Equals(_selectedManager))
- SelectedControl = this.FocusedApplication.Profile.Layers.Count > 0 ? layerPresenter : this.FocusedApplication.Control;
+ SelectedControl = FocusedApplication.Profile.Layers.Count > 0 ? layerPresenter : FocusedApplication.Control;
UpdateManagerStackFocus(sender);
}
private void ctrlOverlayLayerManager_PreviewMouseDown(object sender, MouseButtonEventArgs e) {
if (!sender.Equals(_selectedManager))
- SelectedControl = this.FocusedApplication.Profile.OverlayLayers.Count > 0 ? layerPresenter : this.FocusedApplication.Control;
+ SelectedControl = FocusedApplication.Profile.OverlayLayers.Count > 0 ? layerPresenter : FocusedApplication.Control;
UpdateManagerStackFocus(sender);
}
@@ -821,7 +743,7 @@ private void ctrlProfileManager_PreviewMouseDown(object sender, MouseButtonEvent
private void brdOverview_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
- this._selectedManager = SelectedControl = this.FocusedApplication.Control;
+ _selectedManager = SelectedControl = FocusedApplication.Control;
}
diff --git a/Project-Aurora/Project-Aurora/Controls/Control_AnimationEditor.xaml b/Project-Aurora/Project-Aurora/Controls/Control_AnimationEditor.xaml
index 3f9a01541..37ff25097 100644
--- a/Project-Aurora/Project-Aurora/Controls/Control_AnimationEditor.xaml
+++ b/Project-Aurora/Project-Aurora/Controls/Control_AnimationEditor.xaml
@@ -4,6 +4,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Aurora.Controls"
+ xmlns:DeviceLayout="clr-namespace:Aurora.Settings.DeviceLayoutViewer"
mc:Ignorable="d"
d:DesignHeight="414" d:DesignWidth="535" Loaded="UserControl_Loaded" PreviewKeyDown="UserControl_PreviewKeyDown">
@@ -11,20 +12,14 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/Project-Aurora/Project-Aurora/Controls/Control_AnimationEditor.xaml.cs b/Project-Aurora/Project-Aurora/Controls/Control_AnimationEditor.xaml.cs
index aa69a1fa9..56781528a 100644
--- a/Project-Aurora/Project-Aurora/Controls/Control_AnimationEditor.xaml.cs
+++ b/Project-Aurora/Project-Aurora/Controls/Control_AnimationEditor.xaml.cs
@@ -1,5 +1,6 @@
using Aurora.Devices;
using Aurora.EffectsEngine.Animations;
+using Aurora.Settings;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -57,55 +58,25 @@ public Control_AnimationEditor()
{
InitializeComponent();
- UpdateVirtualKeyboard();
-
- Global.kbLayout.KeyboardLayoutUpdated += KbLayout_KeyboardLayoutUpdated;
- }
-
- private void KbLayout_KeyboardLayoutUpdated(object sender)
- {
- UpdateVirtualKeyboard();
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
- }
-
- private void UpdateVirtualKeyboard()
- {
- Grid virtial_kb = Global.kbLayout.AbstractVirtualKeyboard;
-
- keyboard_grid.Children.Clear();
- keyboard_grid.Children.Add(virtial_kb);
- keyboard_grid.Children.Add(new LayerEditor());
-
- keyboard_grid.Width = virtial_kb.Width;
- keyboard_grid.Height = virtial_kb.Height;
-
- keyboard_grid.UpdateLayout();
-
- viewbxAnimationView.MaxWidth = virtial_kb.Width + 50;
- viewbxAnimationView.MaxHeight = virtial_kb.Height + 50;
- viewbxAnimationView.UpdateLayout();
-
- this.UpdateLayout();
-
- //Generate a new mapping
- foreach (FrameworkElement Child in virtial_kb.Children)
+ foreach (Settings.DeviceLayoutViewer.Control_Keycap key in deviceLayerPresenter.Keycaps)
{
- if (Child is Settings.Keycaps.IKeycap && (Child as Settings.Keycaps.IKeycap).GetKey() != DeviceKeys.NONE)
+ if (key.GetKey() != DeviceKeys.NONE)
{
- Child.PreviewMouseLeftButtonDown += KeyboardKey_PreviewMouseLeftButtonDown;
- Child.PreviewMouseRightButtonDown += KeyboardKey_PreviewMouseRightButtonDown;
+ key.PreviewMouseLeftButtonDown += KeyboardKey_PreviewMouseLeftButtonDown;
+ key.PreviewMouseRightButtonDown += KeyboardKey_PreviewMouseRightButtonDown;
}
}
}
private void KeyboardKey_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
- if (_selectedFrameItem != null && (_selectedFrameItem as Control_AnimationFrameItem).ContextFrame is AnimationManualColorFrame && sender is Settings.Keycaps.IKeycap)
+ if (_selectedFrameItem != null && (_selectedFrameItem as Control_AnimationFrameItem).ContextFrame is AnimationManualColorFrame && sender is Settings.DeviceLayoutViewer.Keycaps.KeycapViewer keycapViewer)
{
- SetKeyColor((sender as Settings.Keycaps.IKeycap).GetKey(), _PrimaryManualColor);
+ SetKeyColor(keycapViewer.GetKey(), _PrimaryManualColor);
this.animMixer.UpdatePlaybackTime();
}
@@ -113,15 +84,15 @@ private void KeyboardKey_PreviewMouseLeftButtonDown(object sender, MouseButtonEv
private void KeyboardKey_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
- if (_selectedFrameItem != null && (_selectedFrameItem as Control_AnimationFrameItem).ContextFrame is AnimationManualColorFrame && sender is Settings.Keycaps.IKeycap)
+ if (_selectedFrameItem != null && (_selectedFrameItem as Control_AnimationFrameItem).ContextFrame is AnimationManualColorFrame && sender is Settings.DeviceLayoutViewer.Keycaps.KeycapViewer keycapViewer)
{
- SetKeyColor((sender as Settings.Keycaps.IKeycap).GetKey(), _SecondaryManualColor);
+ SetKeyColor(keycapViewer.GetKey(), _SecondaryManualColor);
this.animMixer.UpdatePlaybackTime();
}
}
- private void SetKeyColor(DeviceKeys key, System.Drawing.Color color)
+ private void SetKeyColor(DeviceKey key, System.Drawing.Color color)
{
if (_selectedFrameItem != null && (_selectedFrameItem as Control_AnimationFrameItem).ContextFrame is AnimationManualColorFrame)
{
@@ -136,7 +107,9 @@ private void animMixer_AnimationMixRendered(object sender)
{
using (MemoryStream memory = new MemoryStream())
{
- (sender as Control_AnimationMixPresenter).RenderedBitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp);
+ Bitmap renderedBitmap = (sender as Control_AnimationMixPresenter).RenderedBitmap;
+ renderedBitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp);
+
memory.Position = 0;
BitmapImage bitmapimage = new BitmapImage();
bitmapimage.BeginInit();
@@ -158,17 +131,28 @@ private void keyboard_overlayPreview_SizeChanged(object sender, SizeChangedEvent
UpdateScale(e.NewSize.Width);
}
+ private float _prevScale = 0;
private void UpdateScale(double width)
{
- float scale = (float)(width / Effects.canvas_width);
-
+ float scale = (float)(width / Effects.CanvasWidth);
if (scale < 1.0f)
scale = 1.0f;
+ if(_prevScale == 0)
+ {
+ animMixer.AnimationScale = scale;
- animMixer.AnimationScale = scale;
+ _prevScale = scale;
+ }
+ else if (_prevScale != scale)
+ {
+
+ animMixer.AnimationScale = scale;
- rulerHorizontalPixels.MarkSize = scale;
- rulerVerticalPixels.MarkSize = scale;
+ rulerHorizontalPixels.MarkSize = scale;
+ rulerVerticalPixels.MarkSize = scale;
+
+ _prevScale = scale;
+ }
}
private void animMixer_AnimationFrameItemSelected(object sender, AnimationFrame frame)
@@ -443,7 +427,7 @@ private void BtnClearColors_Click(object sender, RoutedEventArgs e)
{
AnimationManualColorFrame frame = ((_selectedFrameItem as Control_AnimationFrameItem).ContextFrame as AnimationManualColorFrame);
- frame.SetBitmapColors(new Dictionary());
+ frame.SetBitmapColors(new Dictionary());
this.animMixer.UpdatePlaybackTime();
}
diff --git a/Project-Aurora/Project-Aurora/Controls/Control_AnimationMixPresenter.xaml.cs b/Project-Aurora/Project-Aurora/Controls/Control_AnimationMixPresenter.xaml.cs
index c4322eb1e..75f498072 100644
--- a/Project-Aurora/Project-Aurora/Controls/Control_AnimationMixPresenter.xaml.cs
+++ b/Project-Aurora/Project-Aurora/Controls/Control_AnimationMixPresenter.xaml.cs
@@ -1,4 +1,5 @@
using Aurora.EffectsEngine.Animations;
+using Aurora.Profiles;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -49,6 +50,7 @@ public AnimationMix ContextMix
//stkPanelTracks.Children.Add(new Separator());
}
+ ContextMix.SetScale(AnimationScale);
AnimationMixUpdated?.Invoke(this, ContextMix);
}
}
@@ -92,37 +94,65 @@ private void NewTrack_AnimationTrackUpdated(object sender, AnimationTrack track)
public Bitmap RenderedBitmap;
- public float AnimationScale = 1.0f;
+ private float _animationScale = 1.0f;
+ public float AnimationScale {
+ get {
+ return _animationScale;
+ }
+ set {
+ _animationScale = value;
+ if(ContextMix != null)
+ ContextMix.SetScale(AnimationScale);
+ }
+ }
private float _currentPlaybackTime = 0.0f;
- private Timer _playbackTimer = new Timer(33);
+ private Timer _playbackTimer = new Timer(Global.Configuration.UpdateDelay);
public Control_AnimationMixPresenter()
{
InitializeComponent();
- RenderedBitmap = new Bitmap(Effects.canvas_width, Effects.canvas_height);
-
_playbackTimer.Elapsed += _playbackTimer_Elapsed;
}
private void _playbackTimer_Elapsed(object sender, ElapsedEventArgs e)
{
Dispatcher.Invoke(() =>
+ {
+ var cm = ContextMix;
+ Task.Run(() =>
{
- _currentPlaybackTime += 0.033f;
+ _currentPlaybackTime += (float)Global.Configuration.UpdateDelay / 1000;
- if (!ContextMix.AnyActiveTracksAt(_currentPlaybackTime))
+ if (!cm.AnyActiveTracksAt(_currentPlaybackTime))
{
_currentPlaybackTime = 0.0f;
_playbackTimer.Stop();
}
- gridScrubber.Margin = new Thickness(ConvertToLocation(_currentPlaybackTime) + 100.0, 0, 0, 0);
+ Bitmap newBitmap = new Bitmap((int)(Effects.CanvasWidth * AnimationScale), (int)(Effects.CanvasHeight * AnimationScale));
+ RenderedBitmap = newBitmap;
+
+ using (Graphics g = Graphics.FromImage(newBitmap))
+ {
+ g.Clear(System.Drawing.Color.Black);
+ cm.Draw(g, _currentPlaybackTime);
+ }
+
+ Dispatcher.Invoke(() =>
+ {
+
+ if (chkbxDrawToDevices.IsChecked.Value)
+ Global.effengine.ForceImageRender(newBitmap);
- UpdatePlaybackTime();
+ AnimationMixRendered?.Invoke(this);
+
+ UpdatePlaybackTime();
+ });
});
+ });
}
private void btnPlayStop_Click(object sender, RoutedEventArgs e)
@@ -154,26 +184,13 @@ private void grdsplitrScrubber_DragDelta(object sender, System.Windows.Controls.
public void UpdatePlaybackTime()
{
+
+ gridScrubber.Margin = new Thickness(ConvertToLocation(_currentPlaybackTime) + 100.0, 0, 0, 0);
+
int seconds = (int)_currentPlaybackTime;
int milliseconds = (int)((_currentPlaybackTime - seconds) * 1000.0);
this.txtblkCurrentTime.Text = $"{seconds};{milliseconds}";
-
- Bitmap newBitmap = new Bitmap((int)(Effects.canvas_width * AnimationScale), (int)(Effects.canvas_height * AnimationScale));
-
- using (Graphics g = Graphics.FromImage(newBitmap))
- {
- g.Clear(System.Drawing.Color.Black);
-
- ContextMix.Draw(g, _currentPlaybackTime, AnimationScale);
- }
-
- RenderedBitmap = newBitmap;
-
- if (chkbxDrawToDevices.IsChecked.Value)
- Global.effengine.ForceImageRender(RenderedBitmap);
-
- AnimationMixRendered?.Invoke(this);
}
private double ConvertToLocation(float time)
diff --git a/Project-Aurora/Project-Aurora/Controls/EditorResources/ResizeDecorator.xaml b/Project-Aurora/Project-Aurora/Controls/EditorResources/ResizeDecorator.xaml
index 05e2d7309..39ecdc79f 100644
--- a/Project-Aurora/Project-Aurora/Controls/EditorResources/ResizeDecorator.xaml
+++ b/Project-Aurora/Project-Aurora/Controls/EditorResources/ResizeDecorator.xaml
@@ -3,24 +3,26 @@
xmlns:s="clr-namespace:Aurora.Controls.EditorResources">
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/Controls/EditorResources/RotateDecorator.xaml b/Project-Aurora/Project-Aurora/Controls/EditorResources/RotateDecorator.xaml
index 9f0bee33e..ead7cd844 100644
--- a/Project-Aurora/Project-Aurora/Controls/EditorResources/RotateDecorator.xaml
+++ b/Project-Aurora/Project-Aurora/Controls/EditorResources/RotateDecorator.xaml
@@ -22,18 +22,18 @@
-
-
+
+
-
+
-
+
diff --git a/Project-Aurora/Project-Aurora/Controls/KeySequence.xaml b/Project-Aurora/Project-Aurora/Controls/KeySequence.xaml
index 7fb9bb7de..0ca0b0687 100644
--- a/Project-Aurora/Project-Aurora/Controls/KeySequence.xaml
+++ b/Project-Aurora/Project-Aurora/Controls/KeySequence.xaml
@@ -3,20 +3,15 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:EnumValueConverters="clr-namespace:Aurora.Utils"
mc:Ignorable="d" MinWidth="230" MinHeight="111" Loaded="UserControl_Loaded" Unloaded="UserControl_Unloaded" IsEnabledChanged="UserControl_IsEnabledChanged" IsVisibleChanged="UserControl_IsVisibleChanged">
-
-
-
-
-
-
-
-
+
+
+
+
diff --git a/Project-Aurora/Project-Aurora/Controls/KeySequence.xaml.cs b/Project-Aurora/Project-Aurora/Controls/KeySequence.xaml.cs
index d4bd8b644..1e78b7055 100644
--- a/Project-Aurora/Project-Aurora/Controls/KeySequence.xaml.cs
+++ b/Project-Aurora/Project-Aurora/Controls/KeySequence.xaml.cs
@@ -1,4 +1,5 @@
-using System;
+using Aurora.Settings;
+using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
@@ -8,7 +9,7 @@
namespace Aurora.Controls
{
- public partial class KeySequence : UserControl
+ public partial class KeySequence
{
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title", typeof(string), typeof(UserControl));
@@ -30,17 +31,11 @@ public string Title
public string RecordingTag
{
- get
- {
- return (string)GetValue(RecordingTagProperty);
- }
- set
- {
- SetValue(RecordingTagProperty, value);
- }
+ get => (string)GetValue(RecordingTagProperty);
+ set => SetValue(RecordingTagProperty, value);
}
- public List List
+ public List List
{
get
{
@@ -53,39 +48,44 @@ public List List
{
if (Sequence == null)
Sequence = new Settings.KeySequence(value.ToArray());
- else {
+ else
+ {
Sequence.keys = value;
}
- SequenceKeysChange?.Invoke(this, new EventArgs());
+ SequenceKeysChange?.Invoke(this, EventArgs.Empty);
}
}
- private bool allowListRefresh = true;
+ private bool _allowListRefresh = true;
#region Sequence Dependency Property
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public static readonly DependencyProperty SequenceProperty = DependencyProperty.Register("Sequence", typeof(Settings.KeySequence), typeof(UserControl), new PropertyMetadata(new Settings.KeySequence(), SequencePropertyChanged));
- public Settings.KeySequence Sequence {
+ public Settings.KeySequence Sequence
+ {
get => (Settings.KeySequence)GetValue(SequenceProperty);
set => SetValue(SequenceProperty, value);
}
- private static void SequencePropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) {
+ private static void SequencePropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
+ {
var source = (KeySequence)sender;
- if (!(e.NewValue is Settings.KeySequence@new)) {
+ if (e.NewValue is not Settings.KeySequence @new)
+ {
source.Sequence = new Settings.KeySequence();
return;
}
// If the old sequence is a region, remove that region from the editor
- if (e.OldValue is Settings.KeySequence old && old.type == Settings.KeySequenceType.FreeForm)
+ if (e.OldValue is Settings.KeySequence {type: Settings.KeySequenceType.FreeForm} old)
LayerEditor.RemoveKeySequenceElement(old.freeform);
// Handle the new sequence. If a region, this will add it to the editor
source.sequence_updateToLayerEditor();
// Manually update the keysequence list. Gross
- if (source.allowListRefresh) {
+ if (source._allowListRefresh)
+ {
source.keys_keysequence.Items.Clear();
foreach (var key in @new.keys)
source.keys_keysequence.Items.Add(key);
@@ -95,7 +95,7 @@ private static void SequencePropertyChanged(DependencyObject sender, DependencyP
source.sequence_freestyle_checkbox.IsChecked = @new.type == Settings.KeySequenceType.FreeForm;
// Fire an event? Dunno if this is really neccessary but since it was already there I feel like I should keep it
- source.SequenceUpdated?.Invoke(source, new EventArgs());
+ source.SequenceUpdated?.Invoke(source, EventArgs.Empty);
}
#endregion
@@ -106,23 +106,20 @@ private static void SequencePropertyChanged(DependencyObject sender, DependencyP
public bool FreestyleEnabled
{
- get
- {
- return (bool)GetValue(FreestyleEnabledProperty);
- }
+ get => (bool)GetValue(FreestyleEnabledProperty);
set
{
SetValue(FreestyleEnabledProperty, value);
- this.sequence_freestyle_checkbox.IsEnabled = value;
- this.sequence_freestyle_checkbox.ToolTip = (value ? null : "Freestyle has been disabled.");
-
+ sequence_freestyle_checkbox.IsEnabled = value;
+ sequence_freestyle_checkbox.ToolTip = value ? null : "Freestyle has been disabled.";
}
}
#region ShowOnCanvas property
// Drawn freeform object bounds will only appear if this is true.
- public bool ShowOnCanvas {
+ public bool ShowOnCanvas
+ {
get => (bool)GetValue(ShowOnCanvasProperty);
set => SetValue(ShowOnCanvasProperty, value);
}
@@ -159,9 +156,9 @@ private void sequence_remove_keys_Click(object sender, RoutedEventArgs e)
{
if (Utils.UIUtils.ListBoxRemoveSelected(this.keys_keysequence))
{
- allowListRefresh = false;
+ _allowListRefresh = false;
List = Utils.UIUtils.SequenceToList(this.keys_keysequence.Items);
- allowListRefresh = true;
+ _allowListRefresh = true;
}
}
@@ -169,9 +166,9 @@ private void sequence_up_keys_Click(object sender, RoutedEventArgs e)
{
if (Utils.UIUtils.ListBoxMoveSelectedUp(this.keys_keysequence))
{
- allowListRefresh = false;
+ _allowListRefresh = false;
List = Utils.UIUtils.SequenceToList(this.keys_keysequence.Items);
- allowListRefresh = true;
+ _allowListRefresh = true;
}
}
@@ -179,9 +176,9 @@ private void sequence_down_keys_Click(object sender, RoutedEventArgs e)
{
if (Utils.UIUtils.ListBoxMoveSelectedDown(this.keys_keysequence))
{
- allowListRefresh = false;
+ _allowListRefresh = false;
List = Utils.UIUtils.SequenceToList(this.keys_keysequence.Items);
- allowListRefresh = true;
+ _allowListRefresh = true;
}
}
@@ -189,9 +186,9 @@ private void btnReverseOrder_Click(object sender, RoutedEventArgs e)
{
if (Utils.UIUtils.ListBoxReverseOrder(this.keys_keysequence))
{
- allowListRefresh = false;
+ _allowListRefresh = false;
List = Utils.UIUtils.SequenceToList(this.keys_keysequence.Items);
- allowListRefresh = true;
+ _allowListRefresh = true;
}
}
@@ -199,9 +196,9 @@ private void btnReverseOrder_Click(object sender, RoutedEventArgs e)
private void sequence_record_keys_Click(object sender, RoutedEventArgs e)
{
RecordKeySequence(RecordingTag, (sender as Button), this.keys_keysequence);
- allowListRefresh = false;
+ _allowListRefresh = false;
List = Utils.UIUtils.SequenceToList(this.keys_keysequence.Items);
- allowListRefresh = true;
+ _allowListRefresh = true;
}
private void RecordKeySequence(string whoisrecording, Button button, ListBox sequence_listbox)
@@ -214,7 +211,7 @@ private void RecordKeySequence(string whoisrecording, Button button, ListBox seq
button.Content = "Assign Keys";
- Devices.DeviceKeys[] recorded_keys = Global.key_recorder.GetKeys();
+ DeviceKey[] recorded_keys = Global.key_recorder.GetKeys();
if (sequence_listbox.SelectedIndex > 0 && sequence_listbox.SelectedIndex < (sequence_listbox.Items.Count - 1))
{
@@ -250,14 +247,14 @@ private void sequence_freestyle_checkbox_Checked(object sender, RoutedEventArgs
Settings.KeySequence seq = Sequence;
if (seq != null && sender is CheckBox && (sender as CheckBox).IsChecked.HasValue)
{
- seq.type = ((sender as CheckBox).IsChecked.Value ? Settings.KeySequenceType.FreeForm : Settings.KeySequenceType.Sequence);
+ seq.type = (sender as CheckBox).IsChecked.Value ? Settings.KeySequenceType.FreeForm : Settings.KeySequenceType.Sequence;
Sequence = seq;
sequence_updateToLayerEditor();
}
}
- public void sequence_updateToLayerEditor()
+ private void sequence_updateToLayerEditor()
{
if (Sequence != null && IsInitialized && IsVisible && IsEnabled)
{
@@ -274,14 +271,13 @@ public void sequence_updateToLayerEditor()
}
}
- private void freeform_updated(Settings.FreeFormObject newfreeform)
+ private void freeform_updated(object sender, FreeFormChangedArgs args)
{
- if(newfreeform != null)
+ if (args.FreeForm != null)
{
- Sequence.freeform = newfreeform;
+ Sequence.freeform = args.FreeForm;
- if (SequenceUpdated != null)
- SequenceUpdated(this, new EventArgs());
+ SequenceUpdated?.Invoke(this, EventArgs.Empty);
}
}
@@ -309,7 +305,7 @@ private void UserControl_Unloaded(object sender, RoutedEventArgs e)
private void UserControl_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
{
- if(e.NewValue is bool)
+ if (e.NewValue is bool)
{
this.keys_keysequence.IsEnabled = (bool)e.NewValue;
this.sequence_record.IsEnabled = (bool)e.NewValue;
@@ -328,7 +324,7 @@ private void UserControl_IsEnabledChanged(object sender, DependencyPropertyChang
private void keys_keysequence_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
- if(keys_keysequence.SelectedItems.Count <= 1)
+ if (keys_keysequence.SelectedItems.Count <= 1)
{
this.sequence_up.IsEnabled = IsEnabled && true;
this.sequence_down.IsEnabled = IsEnabled && true;
@@ -361,7 +357,7 @@ private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChang
else
sequence_removeFromLayerEditor();
}
-
+
}
}
-}
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/Controls/LayerEditor.xaml b/Project-Aurora/Project-Aurora/Controls/LayerEditor.xaml
index fb8c7c075..d60ecab43 100644
--- a/Project-Aurora/Project-Aurora/Controls/LayerEditor.xaml
+++ b/Project-Aurora/Project-Aurora/Controls/LayerEditor.xaml
@@ -12,7 +12,4 @@
-
-
diff --git a/Project-Aurora/Project-Aurora/Controls/LayerEditor.xaml.cs b/Project-Aurora/Project-Aurora/Controls/LayerEditor.xaml.cs
index 1752ea900..108624140 100644
--- a/Project-Aurora/Project-Aurora/Controls/LayerEditor.xaml.cs
+++ b/Project-Aurora/Project-Aurora/Controls/LayerEditor.xaml.cs
@@ -16,16 +16,16 @@ public partial class LayerEditor : UserControl
{
//static FreeFormObject activeLayer = new FreeFormObject();
- private static Canvas static_canvas = new Canvas();
+ private static Canvas static_canvas;
private static Style style = new Style();
//public static event EventHandler SequenceUpdated;
- public LayerEditor()
+ public LayerEditor(Canvas editorCanvas)
{
InitializeComponent();
- static_canvas = editor_canvas;
+ static_canvas = editorCanvas;
style = this.FindResource("DesignerItemStyle") as Style;
}
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Asus_Pugio.psd b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Asus_Pugio.psd
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Asus_Pugio.psd
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Asus_Pugio.psd
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Asus_Pugio_backlights.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Asus_Pugio_backlights.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Asus_Pugio_backlights.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Asus_Pugio_backlights.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Asus_Pugio_body.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Asus_Pugio_body.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Asus_Pugio_body.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Asus_Pugio_body.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Asus_Pugio_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Asus_Pugio_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Asus_Pugio_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Asus_Pugio_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Asus_Pugio_wheel.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Asus_Pugio_wheel.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Asus_Pugio_wheel.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Asus_Pugio_wheel.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Asus_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Asus_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Asus_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Asus_logo.png
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Bloody_Logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Bloody_Logo.png
new file mode 100644
index 000000000..b995ae12b
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Bloody_Logo.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Bloody_W60_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Bloody_W60_outline.png
new file mode 100644
index 000000000..a8755fa8d
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Bloody_W60_outline.png differ
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_Katar.psd b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_Katar.psd
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_Katar.psd
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_Katar.psd
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_Katar_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_Katar_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_Katar_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_Katar_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_Katar_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_Katar_outline.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_Katar_outline.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_Katar_outline.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_M65.psd b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_M65.psd
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_M65.psd
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_M65.psd
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_M65_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_M65_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_M65_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_M65_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_M65_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_M65_outline.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_M65_outline.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_M65_outline.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_M65_scrollwheel.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_M65_scrollwheel.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_M65_scrollwheel.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_M65_scrollwheel.png
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_iCue.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_iCue.png
new file mode 100644
index 000000000..c05575a18
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_iCue.png differ
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_strafe_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_strafe_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_strafe_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_strafe_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_strafe_mk2_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_strafe_mk2_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Corsair_strafe_mk2_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Corsair_strafe_mk2_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G502.pdn b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G502.pdn
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G502.pdn
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G502.pdn
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G502_dpi.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G502_dpi.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G502_dpi.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G502_dpi.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G502_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G502_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G502_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G502_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G502_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G502_outline.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G502_outline.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G502_outline.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G810.psd b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G810.psd
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G810.psd
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G810.psd
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G810_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G810_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G810_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G810_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G900.psd b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G900.psd
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G900.psd
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G900.psd
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G900_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G900_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G900_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G900_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G900_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G900_outline.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G900_outline.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G900_outline.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G910_badge.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G910_badge.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G910_badge.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G910_badge.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G910_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G910_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_G910_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_G910_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_g900_dpi.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_g900_dpi.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Logi_g900_dpi.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Logi_g900_dpi.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Omen_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Omen_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Omen_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Omen_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Omen_logo.psd b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Omen_logo.psd
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Omen_logo.psd
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Omen_logo.psd
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Omen_zone_0.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Omen_zone_0.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Omen_zone_0.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Omen_zone_0.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Omen_zone_1.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Omen_zone_1.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Omen_zone_1.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Omen_zone_1.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Omen_zone_2.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Omen_zone_2.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Omen_zone_2.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Omen_zone_2.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Omen_zone_3.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Omen_zone_3.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Omen_zone_3.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Omen_zone_3.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE.psd b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE.psd
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE.psd
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE.psd
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_L1.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_L1.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_L1.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_L1.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_L2.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_L2.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_L2.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_L2.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_L3.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_L3.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_L3.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_L3.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_L4.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_L4.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_L4.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_L4.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_L5.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_L5.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_L5.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_L5.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_L6.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_L6.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_L6.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_L6.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_L7.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_L7.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_L7.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_L7.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_Logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_Logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_Logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_Logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_R1.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_R1.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_R1.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_R1.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_R2.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_R2.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_R2.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_R2.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_R3.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_R3.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_R3.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_R3.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_R4.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_R4.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_R4.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_R4.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_R5.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_R5.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_R5.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_R5.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_R6.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_R6.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_R6.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_R6.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_R7.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_R7.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_R7.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_R7.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_Scroll_Wheel.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_Scroll_Wheel.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_Scroll_Wheel.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_Scroll_Wheel.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_outline.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_Mamba_TE_outline.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_Mamba_TE_outline.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_logo.psd b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_logo.psd
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Razer_logo.psd
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Razer_logo.psd
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Roccat_Kone_Pure_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Roccat_Kone_Pure_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Roccat_Kone_Pure_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Roccat_Kone_Pure_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Roccat_Kone_Pure_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Roccat_Kone_Pure_outline.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Roccat_Kone_Pure_outline.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Roccat_Kone_Pure_outline.png
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Roccat_Vulcan_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Roccat_Vulcan_logo.png
new file mode 100644
index 000000000..eae1e8b7a
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Roccat_Vulcan_logo.png differ
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Sabre.psd b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Sabre.psd
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Sabre.psd
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Sabre.psd
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Sabre_front_lights.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Sabre_front_lights.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Sabre_front_lights.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Sabre_front_lights.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Sabre_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Sabre_outline.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Sabre_outline.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Sabre_outline.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Sabre_scrollwheel.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/Sabre_scrollwheel.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/Sabre_scrollwheel.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/Sabre_scrollwheel.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SoundBlasterX_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SoundBlasterX_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SoundBlasterX_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/SoundBlasterX_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SteelSeries_Apex_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Apex_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SteelSeries_Apex_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Apex_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SteelSeries_Rival_300_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_300_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SteelSeries_Rival_300_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_300_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SteelSeries_Rival_300_logo.psd b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_300_logo.psd
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SteelSeries_Rival_300_logo.psd
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_300_logo.psd
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SteelSeries_Rival_300_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_300_outline.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SteelSeries_Rival_300_outline.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_300_outline.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SteelSeries_Rival_300_outline.psd b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_300_outline.psd
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SteelSeries_Rival_300_outline.psd
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_300_outline.psd
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SteelSeries_Rival_300_scrollwheel.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_300_scrollwheel.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SteelSeries_Rival_300_scrollwheel.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_300_scrollwheel.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SteelSeries_Rival_300_scrollwheel.psd b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_300_scrollwheel.psd
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/SteelSeries_Rival_300_scrollwheel.psd
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_300_scrollwheel.psd
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_L1.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_L1.png
new file mode 100644
index 000000000..ac4dfc79a
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_L1.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_L2.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_L2.png
new file mode 100644
index 000000000..8853ce875
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_L2.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_L3.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_L3.png
new file mode 100644
index 000000000..539900b88
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_L3.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_R1.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_R1.png
new file mode 100644
index 000000000..d26fb1841
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_R1.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_R2.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_R2.png
new file mode 100644
index 000000000..24a889721
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_R2.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_R3.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_R3.png
new file mode 100644
index 000000000..cd8a2edc4
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_R3.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_outline.png
new file mode 100644
index 000000000..57ac12af7
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_outline.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_wheel.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_wheel.png
new file mode 100644
index 000000000..3a9bde1fc
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/SteelSeries_Rival_650_wheel.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_Bottom Lights.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_Bottom Lights.png
new file mode 100644
index 000000000..58749186b
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_Bottom Lights.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_Left Stripe.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_Left Stripe.png
new file mode 100644
index 000000000..c41a1402a
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_Left Stripe.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_Mid Stripe.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_Mid Stripe.png
new file mode 100644
index 000000000..09378816d
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_Mid Stripe.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_Scroll_Led.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_Scroll_Led.png
new file mode 100644
index 000000000..3edbd4626
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_Scroll_Led.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_bl_1.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_bl_1.png
new file mode 100644
index 000000000..fc9e4b9a6
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_bl_1.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_bl_2.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_bl_2.png
new file mode 100644
index 000000000..17d3f2220
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_bl_2.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_bl_3.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_bl_3.png
new file mode 100644
index 000000000..42ffc17e6
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_bl_3.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_bl_4.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_bl_4.png
new file mode 100644
index 000000000..4273aa574
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_bl_4.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ls_1.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ls_1.png
new file mode 100644
index 000000000..1ef1c26b0
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ls_1.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ls_2.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ls_2.png
new file mode 100644
index 000000000..59bdc654c
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ls_2.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ls_3.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ls_3.png
new file mode 100644
index 000000000..bc0975a23
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ls_3.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ms_1.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ms_1.png
new file mode 100644
index 000000000..771e62905
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ms_1.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ms_2.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ms_2.png
new file mode 100644
index 000000000..ef1ce34a8
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ms_2.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ms_3.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ms_3.png
new file mode 100644
index 000000000..8a5edac04
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/bloody_w60_ms_3.png differ
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_outpost_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_outpost_outline.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_outpost_outline.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_outpost_outline.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_outpost_plus_photon_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_outpost_plus_photon_outline.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_outpost_plus_photon_outline.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_outpost_plus_photon_outline.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_photon_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_photon_outline.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_photon_outline.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_photon_outline.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_photon_scrollwheel.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_photon_scrollwheel.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_photon_scrollwheel.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_photon_scrollwheel.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_sequencer_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_sequencer_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_sequencer_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_sequencer_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_vector_essentials_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_vector_essentials_outline.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_vector_essentials_outline.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_vector_essentials_outline.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_vector_logo.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_vector_logo.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_vector_logo.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_vector_logo.png
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_vector_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_vector_outline.png
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/images/omen_vector_outline.png
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Images/omen_vector_outline.png
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/razer_naga_pro_12_button_side_plate.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/razer_naga_pro_12_button_side_plate.png
new file mode 100644
index 000000000..590baf160
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/razer_naga_pro_12_button_side_plate.png differ
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Images/razer_naga_pro_outline.png b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/razer_naga_pro_outline.png
new file mode 100644
index 000000000..828892827
Binary files /dev/null and b/Project-Aurora/Project-Aurora/DeviceLayouts/Images/razer_naga_pro_outline.png differ
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/asus_strix_flare_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/asus_strix_flare_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/asus_strix_flare_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/asus_strix_flare_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/cooler_master_sk650_bottom_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/cooler_master_sk650_bottom_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/cooler_master_sk650_bottom_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/cooler_master_sk650_bottom_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/cooler_master_sk650_left_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/cooler_master_sk650_left_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/cooler_master_sk650_left_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/cooler_master_sk650_left_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/cooler_master_sk650_right_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/cooler_master_sk650_right_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/cooler_master_sk650_right_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/cooler_master_sk650_right_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/cooler_master_sk650_top_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/cooler_master_sk650_top_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/cooler_master_sk650_top_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/cooler_master_sk650_top_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_k65_right_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_k65_right_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_k65_right_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_k65_right_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_k68_right_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_k68_right_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_k68_right_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_k68_right_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_k70_mk2_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_k70_mk2_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_k70_mk2_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_k70_mk2_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_k95_left_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_k95_left_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_k95_left_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_k95_left_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_k95_right_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_k95_right_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_k95_right_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_k95_right_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_strafe_left_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_strafe_left_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_strafe_left_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_strafe_left_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_strafe_mk2_left_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_strafe_mk2_left_features.json
similarity index 98%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_strafe_mk2_left_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_strafe_mk2_left_features.json
index 71ff6cf7a..86b4f55ab 100644
--- a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_strafe_mk2_left_features.json
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_strafe_mk2_left_features.json
@@ -15,7 +15,7 @@
"margin_left_bits": 0,
"margin_top_bits": -3,
"image": "Corsair_strafe_mk2_logo.png",
- "enabled": false,
+ "enabled": true,
"absolute_location": true
},
{
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_strafe_mk2_right_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_strafe_mk2_right_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_strafe_mk2_right_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_strafe_mk2_right_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_strafe_right_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_strafe_right_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_strafe_right_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/corsair_strafe_right_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/drevo_blademaster_left_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/drevo_blademaster_left_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/drevo_blademaster_left_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/drevo_blademaster_left_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/ducky_shine_7_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/ducky_shine_7_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/ducky_shine_7_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/ducky_shine_7_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/hyperx_alloy_elite_rgb_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/hyperx_alloy_elite_rgb_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/hyperx_alloy_elite_rgb_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/hyperx_alloy_elite_rgb_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/logitech_gpro_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/logitech_g810_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/logitech_gpro_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/logitech_g810_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/logitech_g815_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/logitech_g815_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/logitech_g815_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/logitech_g815_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/logitech_g910_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/logitech_g910_features.json
similarity index 95%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/logitech_g910_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/logitech_g910_features.json
index a41d1fadd..6cae013ca 100644
--- a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/logitech_g910_features.json
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/logitech_g910_features.json
@@ -1,157 +1,157 @@
-{
- "group_tag": "keyboard",
- "origin_region": 1,
- "grouped_keys": [
- {
- "visualName": "G6",
- "tag": 113,
- "margin_left": 62.0,
- "margin_top": -37.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 5,
- "margin_top_bits": -3,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "G7",
- "tag": 114,
- "margin_left": 99.0,
- "margin_top": -37.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 8,
- "margin_top_bits": -3,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "G8",
- "tag": 115,
- "margin_left": 136.0,
- "margin_top": -37.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 11,
- "margin_top_bits": -3,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "G9",
- "tag": 116,
- "margin_left": 173.0,
- "margin_top": -37.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 14,
- "margin_top_bits": -3,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "LOGO",
- "tag": 128,
- "margin_left": -45.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 9.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 0,
- "image": "Logi_G910_logo.png",
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "G1",
- "tag": 108,
- "margin_left": -45.0,
- "margin_top": 37.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 3,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "G2",
- "tag": 109,
- "margin_left": -45.0,
- "margin_top": 74.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 6,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "G3",
- "tag": 110,
- "margin_left": -45.0,
- "margin_top": 111.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 9,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "G4",
- "tag": 111,
- "margin_left": -45.0,
- "margin_top": 148.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 12,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "G5",
- "tag": 112,
- "margin_left": -45.0,
- "margin_top": 185.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 15,
- "enabled": true,
- "absolute_location": true
- }
- ]
+{
+ "group_tag": "keyboard",
+ "origin_region": 1,
+ "grouped_keys": [
+ {
+ "visualName": "G6",
+ "tag": 113,
+ "margin_left": 62.0,
+ "margin_top": -37.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": 5,
+ "margin_top_bits": -3,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "G7",
+ "tag": 114,
+ "margin_left": 99.0,
+ "margin_top": -37.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": 8,
+ "margin_top_bits": -3,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "G8",
+ "tag": 115,
+ "margin_left": 136.0,
+ "margin_top": -37.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": 11,
+ "margin_top_bits": -3,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "G9",
+ "tag": 116,
+ "margin_left": 173.0,
+ "margin_top": -37.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": 14,
+ "margin_top_bits": -3,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "LOGO",
+ "tag": 128,
+ "margin_left": -45.0,
+ "margin_top": 0.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 9.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 0,
+ "image": "Logi_G910_logo.png",
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "G1",
+ "tag": 108,
+ "margin_left": -45.0,
+ "margin_top": 37.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 3,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "G2",
+ "tag": 109,
+ "margin_left": -45.0,
+ "margin_top": 74.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 6,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "G3",
+ "tag": 110,
+ "margin_left": -45.0,
+ "margin_top": 111.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 9,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "G4",
+ "tag": 111,
+ "margin_left": -45.0,
+ "margin_top": 148.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 12,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "G5",
+ "tag": 112,
+ "margin_left": -45.0,
+ "margin_top": 185.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 15,
+ "enabled": true,
+ "absolute_location": true
+ }
+ ]
}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/logitech_g910_left_bottom_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/logitech_g910_left_bottom_features.json
similarity index 95%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/logitech_g910_left_bottom_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/logitech_g910_left_bottom_features.json
index 2d5ac5530..4b3b6c013 100644
--- a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/logitech_g910_left_bottom_features.json
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/logitech_g910_left_bottom_features.json
@@ -1,22 +1,22 @@
-{
- "group_tag": "keyboard",
- "origin_region": 3,
- "grouped_keys": [
- {
- "visualName": "BADGE",
- "tag": 129,
- "margin_left": 92.5,
- "margin_top": 0.0,
- "width": 79.0,
- "height": 10.0,
- "font_size": 9.0,
- "width_bits": 8,
- "height_bits": 1,
- "margin_left_bits": 8,
- "margin_top_bits": 0,
- "image": "Logi_G910_badge.png",
- "enabled": true,
- "absolute_location": true
- }
- ]
+{
+ "group_tag": "keyboard",
+ "origin_region": 3,
+ "grouped_keys": [
+ {
+ "visualName": "BADGE",
+ "tag": 129,
+ "margin_left": 92.5,
+ "margin_top": 0.0,
+ "width": 79.0,
+ "height": 10.0,
+ "font_size": 9.0,
+ "width_bits": 8,
+ "height_bits": 1,
+ "margin_left_bits": 8,
+ "margin_top_bits": 0,
+ "image": "Logi_G910_badge.png",
+ "enabled": true,
+ "absolute_location": true
+ }
+ ]
}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/logitech_g810_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/logitech_gpro_features.json
similarity index 95%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/logitech_g810_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/logitech_gpro_features.json
index a0436cbaf..50e607a25 100644
--- a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/logitech_g810_features.json
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/logitech_gpro_features.json
@@ -1,22 +1,22 @@
-{
- "group_tag": "keyboard",
- "origin_region": 1,
- "grouped_keys": [
- {
- "visualName": "LOGO",
- "tag": 128,
- "margin_left": 0.0,
- "margin_top": -37.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 9.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": -3,
- "image": "Logi_G810_logo.png",
- "enabled": true,
- "absolute_location": true
- },
- ]
+{
+ "group_tag": "keyboard",
+ "origin_region": 1,
+ "grouped_keys": [
+ {
+ "visualName": "LOGO",
+ "tag": 128,
+ "margin_left": 0.0,
+ "margin_top": -37.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 9.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": 0,
+ "margin_top_bits": -3,
+ "image": "Logi_G810_logo.png",
+ "enabled": true,
+ "absolute_location": true
+ },
+ ]
}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_mk730_bottom_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_mk730_bottom_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_mk730_bottom_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_mk730_bottom_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_mk730_left_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_mk730_left_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_mk730_left_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_mk730_left_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_mk730_right_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_mk730_right_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_mk730_right_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_mk730_right_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_mk750_bottom_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_mk750_bottom_features.json
old mode 100755
new mode 100644
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_mk750_bottom_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_mk750_bottom_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_mk750_left_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_mk750_left_features.json
old mode 100755
new mode 100644
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_mk750_left_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_mk750_left_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_mk750_right_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_mk750_right_features.json
old mode 100755
new mode 100644
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_mk750_right_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_mk750_right_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_pro_l_right_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_pro_l_right_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_pro_l_right_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_pro_l_right_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_pro_m_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_pro_m_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/masterkeys_pro_m_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/masterkeys_pro_m_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_four_zone_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_four_zone_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_four_zone_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_four_zone_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_outpost_plus_photon_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_outpost_plus_photon_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_outpost_plus_photon_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_outpost_plus_photon_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_photon_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_photon_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_photon_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_photon_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_sequencer_bottom_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_sequencer_bottom_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_sequencer_bottom_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_sequencer_bottom_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_sequencer_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_sequencer_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_sequencer_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_sequencer_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_sequencer_right_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_sequencer_right_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_sequencer_right_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_sequencer_right_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_vector_essentials_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_vector_essentials_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_vector_essentials_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_vector_essentials_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_vector_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_vector_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/omen_vector_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/omen_vector_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/razer_blackwidow_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/razer_blackwidow_features.json
similarity index 95%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/razer_blackwidow_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/razer_blackwidow_features.json
index 8709abd7a..c46bad3b3 100644
--- a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/razer_blackwidow_features.json
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/razer_blackwidow_features.json
@@ -1,81 +1,81 @@
-{
- "group_tag": "keyboard",
- "origin_region": 1,
- "grouped_keys": [
- {
- "visualName": "M1",
- "tag": 108,
- "margin_left": -38.0,
- "margin_top": 37.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 3,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "M2",
- "tag": 109,
- "margin_left": -38.0,
- "margin_top": 74.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 6,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "M3",
- "tag": 110,
- "margin_left": -38.0,
- "margin_top": 111.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 9,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "M4",
- "tag": 111,
- "margin_left": -38.0,
- "margin_top": 148.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 12,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "M5",
- "tag": 112,
- "margin_left": -38.0,
- "margin_top": 185.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 15,
- "enabled": true,
- "absolute_location": true
- }
- ]
+{
+ "group_tag": "keyboard",
+ "origin_region": 1,
+ "grouped_keys": [
+ {
+ "visualName": "M1",
+ "tag": 108,
+ "margin_left": -38.0,
+ "margin_top": 37.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 3,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "M2",
+ "tag": 109,
+ "margin_left": -38.0,
+ "margin_top": 74.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 6,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "M3",
+ "tag": 110,
+ "margin_left": -38.0,
+ "margin_top": 111.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 9,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "M4",
+ "tag": 111,
+ "margin_left": -38.0,
+ "margin_top": 148.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 12,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "M5",
+ "tag": 112,
+ "margin_left": -38.0,
+ "margin_top": 185.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 15,
+ "enabled": true,
+ "absolute_location": true
+ }
+ ]
}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/razer_blackwidow_left_bottom_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/razer_blackwidow_left_bottom_features.json
similarity index 95%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/razer_blackwidow_left_bottom_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/razer_blackwidow_left_bottom_features.json
index 581152de8..f156b475b 100644
--- a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/razer_blackwidow_left_bottom_features.json
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/razer_blackwidow_left_bottom_features.json
@@ -1,22 +1,22 @@
-{
- "group_tag": "keyboard",
- "origin_region": 3,
- "grouped_keys": [
- {
- "visualName": "LOGO",
- "tag": 128,
- "margin_left": 395.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 9.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 32,
- "margin_top_bits": 0,
- "image": "Razer_logo.png",
- "enabled": true,
- "absolute_location": true
- }
- ]
+{
+ "group_tag": "keyboard",
+ "origin_region": 3,
+ "grouped_keys": [
+ {
+ "visualName": "LOGO",
+ "tag": 128,
+ "margin_left": 395.0,
+ "margin_top": 0.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 9.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": 32,
+ "margin_top_bits": 0,
+ "image": "Razer_logo.png",
+ "enabled": true,
+ "absolute_location": true
+ }
+ ]
}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/roccat_ryos_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/roccat_ryos_features.json
similarity index 95%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/roccat_ryos_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/roccat_ryos_features.json
index 8709abd7a..c46bad3b3 100644
--- a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/roccat_ryos_features.json
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/roccat_ryos_features.json
@@ -1,81 +1,81 @@
-{
- "group_tag": "keyboard",
- "origin_region": 1,
- "grouped_keys": [
- {
- "visualName": "M1",
- "tag": 108,
- "margin_left": -38.0,
- "margin_top": 37.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 3,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "M2",
- "tag": 109,
- "margin_left": -38.0,
- "margin_top": 74.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 6,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "M3",
- "tag": 110,
- "margin_left": -38.0,
- "margin_top": 111.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 9,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "M4",
- "tag": 111,
- "margin_left": -38.0,
- "margin_top": 148.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 12,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "M5",
- "tag": 112,
- "margin_left": -38.0,
- "margin_top": 185.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": -4,
- "margin_top_bits": 15,
- "enabled": true,
- "absolute_location": true
- }
- ]
+{
+ "group_tag": "keyboard",
+ "origin_region": 1,
+ "grouped_keys": [
+ {
+ "visualName": "M1",
+ "tag": 108,
+ "margin_left": -38.0,
+ "margin_top": 37.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 3,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "M2",
+ "tag": 109,
+ "margin_left": -38.0,
+ "margin_top": 74.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 6,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "M3",
+ "tag": 110,
+ "margin_left": -38.0,
+ "margin_top": 111.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 9,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "M4",
+ "tag": 111,
+ "margin_left": -38.0,
+ "margin_top": 148.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 12,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "M5",
+ "tag": 112,
+ "margin_left": -38.0,
+ "margin_top": 185.0,
+ "width": 30.0,
+ "height": 30.0,
+ "font_size": 12.0,
+ "width_bits": 3,
+ "height_bits": 3,
+ "margin_left_bits": -4,
+ "margin_top_bits": 15,
+ "enabled": true,
+ "absolute_location": true
+ }
+ ]
}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/soundblasterx_vanguardk08_left_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/soundblasterx_vanguardk08_left_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/soundblasterx_vanguardk08_left_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/soundblasterx_vanguardk08_left_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/soundblasterx_vanguardk08_right_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/soundblasterx_vanguardk08_right_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/soundblasterx_vanguardk08_right_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/soundblasterx_vanguardk08_right_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/steelseries_apex_m750_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/steelseries_apex_m750_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/steelseries_apex_m750_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/steelseries_apex_m750_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/steelseries_apex_m750_tkl_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/steelseries_apex_m750_tkl_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/steelseries_apex_m750_tkl_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/steelseries_apex_m750_tkl_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/steelseries_apex_m800_left_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/steelseries_apex_m800_left_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/steelseries_apex_m800_left_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/steelseries_apex_m800_left_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/steelseries_apex_m800_right_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/steelseries_apex_m800_right_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/steelseries_apex_m800_right_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/steelseries_apex_m800_right_features.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/steelseries_qck_prism_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/steelseries_qck_prism_features.json
similarity index 86%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/steelseries_qck_prism_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/steelseries_qck_prism_features.json
index bab45fe22..3ddd82505 100644
--- a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/steelseries_qck_prism_features.json
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/steelseries_qck_prism_features.json
@@ -1,5 +1,5 @@
{
- "group_tag": "mouse",
+ "group_tag": "mousepad",
"origin_region": 4,
"grouped_keys": [
{
@@ -15,34 +15,6 @@
"enabled": true,
"absolute_location": true
},
- {
- "visualName": "Mouse Logo",
- "tag": 160,
- "margin_left": 90.0,
- "margin_top": -111.0,
- "width": 50.0,
- "height": 50.0,
- "width_bits": 2,
- "height_bits": 2,
- "margin_left_bits": 2,
- "margin_top_bits": -6,
- "enabled": true,
- "absolute_location": true
- },
- {
- "visualName": "Scroll Wheel",
- "tag": 161,
- "margin_left": 90.0,
- "margin_top": -171.0,
- "width": 50.0,
- "height": 50.0,
- "width_bits": 2,
- "height_bits": 2,
- "margin_left_bits": 2,
- "margin_top_bits": -6,
- "enabled": true,
- "absolute_location": true
- },
{
"visualName": "",
"tag": 201,
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/wooting_two_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/wooting_two_features.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/wooting_two_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Extra Features/wooting_two_features.json
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/abnt2_layout.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/abnt2_layout.json
new file mode 100644
index 000000000..381f80665
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/abnt2_layout.json
@@ -0,0 +1,1276 @@
+{
+ "keys": [
+ {
+ "Key": {
+ "tag": 1,
+ "visual_name": "ESC"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 2,
+ "visual_name": "F1"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 62,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 3,
+ "visual_name": "F2"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 99,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 4,
+ "visual_name": "F3"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 136,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 5,
+ "visual_name": "F4"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 173,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 6,
+ "visual_name": "F5"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 237,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 7,
+ "visual_name": "F6"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 274,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 8,
+ "visual_name": "F7"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 311,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 9,
+ "visual_name": "F8"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 348,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 10,
+ "visual_name": "F9"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 407,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 11,
+ "visual_name": "F10"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 444,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 12,
+ "visual_name": "F11"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 481,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 13,
+ "visual_name": "F12"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 518,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 14,
+ "visual_name": "PRINT"
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 562,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 15,
+ "visual_name": "SCRL\r\nLOCK"
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 599,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 16,
+ "visual_name": "PAUSE"
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 636,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 17,
+ "visual_name": "~"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 0,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 18,
+ "visual_name": "1"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 37,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 19,
+ "visual_name": "2"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 74,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 20,
+ "visual_name": "3"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 111,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 21,
+ "visual_name": "4"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 148,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 22,
+ "visual_name": "5"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 185,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 23,
+ "visual_name": "6"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 222,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 24,
+ "visual_name": "7"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 259,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 25,
+ "visual_name": "8"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 296,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 26,
+ "visual_name": "9"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 333,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 27,
+ "visual_name": "0"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 370,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 28,
+ "visual_name": "-"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 407,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 29,
+ "visual_name": "="
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 444,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 30,
+ "visual_name": "BACKSPACE"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 481,
+ "Y": 37,
+ "Width": 67,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 31,
+ "visual_name": "INSERT"
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 562,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 32,
+ "visual_name": "HOME"
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 599,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 33,
+ "visual_name": "PAGE\r\nUP"
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 636,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 34,
+ "visual_name": "NUM\r\nLOCK"
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 680,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 35,
+ "visual_name": "/"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 717,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 36,
+ "visual_name": "*"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 754,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 37,
+ "visual_name": "-"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 791,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 38,
+ "visual_name": "TAB"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 0,
+ "Y": 74,
+ "Width": 50,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 39,
+ "visual_name": "Q"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 57,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 40,
+ "visual_name": "W"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 94,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 41,
+ "visual_name": "E"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 131,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 42,
+ "visual_name": "R"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 168,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 43,
+ "visual_name": "T"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 205,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 44,
+ "visual_name": "Y"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 242,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 45,
+ "visual_name": "U"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 279,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 46,
+ "visual_name": "I"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 316,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 47,
+ "visual_name": "O"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 353,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 48,
+ "visual_name": "P"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 390,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 49,
+ "visual_name": "´"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 427,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 50,
+ "visual_name": "["
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 464,
+ "Y": 74,
+ "Width": 40,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 52,
+ "visual_name": "DEL"
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 562,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 53,
+ "visual_name": "END"
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 599,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 54,
+ "visual_name": "PAGE\r\nDOWN"
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 636,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 55,
+ "visual_name": "7"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 680,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 56,
+ "visual_name": "8"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 717,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 57,
+ "visual_name": "9"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 754,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 58,
+ "visual_name": "+"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 791,
+ "Y": 74,
+ "Width": 30,
+ "Height": 67
+ },
+ {
+ "Key": {
+ "tag": 59,
+ "visual_name": "CAPS\r\nLOCK"
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 0,
+ "Y": 111,
+ "Width": 60,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 60,
+ "visual_name": "A"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 67,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 61,
+ "visual_name": "S"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 104,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 62,
+ "visual_name": "D"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 141,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 63,
+ "visual_name": "F"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 178,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 64,
+ "visual_name": "G"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 215,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 65,
+ "visual_name": "H"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 252,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 66,
+ "visual_name": "J"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 289,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 67,
+ "visual_name": "K"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 326,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 68,
+ "visual_name": "L"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 363,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 69,
+ "visual_name": "Ç"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 400,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 70,
+ "visual_name": "~"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 437,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 71,
+ "visual_name": "]"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 474,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 72,
+ "visual_name": "ENTER"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 511,
+ "Y": 74,
+ "Width": 38,
+ "Height": 67
+ },
+ {
+ "Key": {
+ "tag": 73,
+ "visual_name": "4"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 680,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 74,
+ "visual_name": "5"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 717,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 75,
+ "visual_name": "6"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 754,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 76,
+ "visual_name": "SHIFT"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 0,
+ "Y": 148,
+ "Width": 48,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 77,
+ "visual_name": "\\"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 55,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 78,
+ "visual_name": "Z"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 92,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 79,
+ "visual_name": "X"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 129,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 80,
+ "visual_name": "C"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 166,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 81,
+ "visual_name": "V"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 203,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 82,
+ "visual_name": "B"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 240,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 83,
+ "visual_name": "N"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 277,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 84,
+ "visual_name": "M"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 314,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 85,
+ "visual_name": "<"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 351,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 86,
+ "visual_name": ">"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 388,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 87,
+ "visual_name": ";"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 425,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 159,
+ "visual_name": "/"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 462,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 88,
+ "visual_name": "SHIFT"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 499,
+ "Y": 148,
+ "Width": 50,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 89,
+ "visual_name": "↑"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 598,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 90,
+ "visual_name": "1"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 680,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 91,
+ "visual_name": "2"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 717,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 92,
+ "visual_name": "3"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 754,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 93,
+ "visual_name": "ENTER"
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 791,
+ "Y": 148,
+ "Width": 30,
+ "Height": 67
+ },
+ {
+ "Key": {
+ "tag": 94,
+ "visual_name": "CTRL"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 0,
+ "Y": 185,
+ "Width": 51,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 95,
+ "visual_name": "WIN"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 56,
+ "Y": 185,
+ "Width": 39,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 96,
+ "visual_name": "ALT"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 100,
+ "Y": 185,
+ "Width": 42,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 97,
+ "visual_name": "SPACE"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 149,
+ "Y": 185,
+ "Width": 208,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 98,
+ "visual_name": "ALT Gr"
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 362,
+ "Y": 185,
+ "Width": 41,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 99,
+ "visual_name": "WIN"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 408,
+ "Y": 185,
+ "Width": 41,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 100,
+ "visual_name": "APP"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 454,
+ "Y": 185,
+ "Width": 40,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 101,
+ "visual_name": "CTRL"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 499,
+ "Y": 185,
+ "Width": 50,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 102,
+ "visual_name": "←"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 561,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 103,
+ "visual_name": "↓"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 598,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 104,
+ "visual_name": "→"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 635,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 105,
+ "visual_name": "0"
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 680,
+ "Y": 185,
+ "Width": 67,
+ "Height": 30
+ },
+ {
+ "Key": {
+ "tag": 106,
+ "visual_name": "."
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 754,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/ansi_layout.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/ansi_layout.json
new file mode 100644
index 000000000..a7d63b135
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/ansi_layout.json
@@ -0,0 +1,1462 @@
+{
+ "layout_width":0,
+ "layout_height":0,
+ "keys":[
+ {
+ "Key":{
+ "visual_name":"ESC",
+ "tag":1,
+ "device_id":null
+ },
+ "X":0,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"F1",
+ "tag":2,
+ "device_id":null
+ },
+ "X":62,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"F2",
+ "tag":3,
+ "device_id":null
+ },
+ "X":99,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"F3",
+ "tag":4,
+ "device_id":null
+ },
+ "X":136,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"F4",
+ "tag":5,
+ "device_id":null
+ },
+ "X":173,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"F5",
+ "tag":6,
+ "device_id":null
+ },
+ "X":237,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"F6",
+ "tag":7,
+ "device_id":null
+ },
+ "X":274,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"F7",
+ "tag":8,
+ "device_id":null
+ },
+ "X":311,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"F8",
+ "tag":9,
+ "device_id":null
+ },
+ "X":348,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"F9",
+ "tag":10,
+ "device_id":null
+ },
+ "X":407,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"F10",
+ "tag":11,
+ "device_id":null
+ },
+ "X":444,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"F11",
+ "tag":12,
+ "device_id":null
+ },
+ "X":481,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"F12",
+ "tag":13,
+ "device_id":null
+ },
+ "X":518,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"PRINT",
+ "tag":14,
+ "device_id":null
+ },
+ "X":563,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":9.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"SCRL\r\nLOCK",
+ "tag":15,
+ "device_id":null
+ },
+ "X":600,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":9.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"PAUSE",
+ "tag":16,
+ "device_id":null
+ },
+ "X":637,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":9.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"~",
+ "tag":17,
+ "device_id":null
+ },
+ "X":0,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"1",
+ "tag":18,
+ "device_id":null
+ },
+ "X":37,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"2",
+ "tag":19,
+ "device_id":null
+ },
+ "X":74,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"3",
+ "tag":20,
+ "device_id":null
+ },
+ "X":111,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"4",
+ "tag":21,
+ "device_id":null
+ },
+ "X":148,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"5",
+ "tag":22,
+ "device_id":null
+ },
+ "X":185,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"6",
+ "tag":23,
+ "device_id":null
+ },
+ "X":222,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"7",
+ "tag":24,
+ "device_id":null
+ },
+ "X":259,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"8",
+ "tag":25,
+ "device_id":null
+ },
+ "X":296,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"9",
+ "tag":26,
+ "device_id":null
+ },
+ "X":333,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"0",
+ "tag":27,
+ "device_id":null
+ },
+ "X":370,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"-",
+ "tag":28,
+ "device_id":null
+ },
+ "X":407,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"=",
+ "tag":29,
+ "device_id":null
+ },
+ "X":444,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"BACKSPACE",
+ "tag":30,
+ "device_id":null
+ },
+ "X":481,
+ "Y":37,
+ "Width":67,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"INSERT",
+ "tag":31,
+ "device_id":null
+ },
+ "X":563,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":9.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"HOME",
+ "tag":32,
+ "device_id":null
+ },
+ "X":600,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":9.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"PAGE\r\nUP",
+ "tag":33,
+ "device_id":null
+ },
+ "X":637,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":9.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"NUM\r\nLOCK",
+ "tag":34,
+ "device_id":null
+ },
+ "X":682,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":9.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"/",
+ "tag":35,
+ "device_id":null
+ },
+ "X":719,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"*",
+ "tag":36,
+ "device_id":null
+ },
+ "X":756,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"-",
+ "tag":37,
+ "device_id":null
+ },
+ "X":793,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"TAB",
+ "tag":38,
+ "device_id":null
+ },
+ "X":0,
+ "Y":74,
+ "Width":50,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"Q",
+ "tag":39,
+ "device_id":null
+ },
+ "X":57,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"W",
+ "tag":40,
+ "device_id":null
+ },
+ "X":94,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"E",
+ "tag":41,
+ "device_id":null
+ },
+ "X":131,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"R",
+ "tag":42,
+ "device_id":null
+ },
+ "X":168,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"T",
+ "tag":43,
+ "device_id":null
+ },
+ "X":205,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"Y",
+ "tag":44,
+ "device_id":null
+ },
+ "X":242,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"U",
+ "tag":45,
+ "device_id":null
+ },
+ "X":279,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"I",
+ "tag":46,
+ "device_id":null
+ },
+ "X":316,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"O",
+ "tag":47,
+ "device_id":null
+ },
+ "X":353,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"P",
+ "tag":48,
+ "device_id":null
+ },
+ "X":390,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"{",
+ "tag":49,
+ "device_id":null
+ },
+ "X":427,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"}",
+ "tag":50,
+ "device_id":null
+ },
+ "X":464,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"\\",
+ "tag":51,
+ "device_id":null
+ },
+ "X":501,
+ "Y":74,
+ "Width":47,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"DEL",
+ "tag":52,
+ "device_id":null
+ },
+ "X":563,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":9.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"END",
+ "tag":53,
+ "device_id":null
+ },
+ "X":600,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":9.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"PAGE\r\nDOWN",
+ "tag":54,
+ "device_id":null
+ },
+ "X":637,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":9.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"7",
+ "tag":55,
+ "device_id":null
+ },
+ "X":682,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"8",
+ "tag":56,
+ "device_id":null
+ },
+ "X":719,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"9",
+ "tag":57,
+ "device_id":null
+ },
+ "X":756,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"+",
+ "tag":58,
+ "device_id":null
+ },
+ "X":793,
+ "Y":74,
+ "Width":30,
+ "Height":67,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"CAPS\r\nLOCK",
+ "tag":59,
+ "device_id":null
+ },
+ "X":0,
+ "Y":111,
+ "Width":60,
+ "Height":30,
+ "Image":"",
+ "FontSize":9.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"A",
+ "tag":60,
+ "device_id":null
+ },
+ "X":67,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"S",
+ "tag":61,
+ "device_id":null
+ },
+ "X":104,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"D",
+ "tag":62,
+ "device_id":null
+ },
+ "X":141,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"F",
+ "tag":63,
+ "device_id":null
+ },
+ "X":178,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"G",
+ "tag":64,
+ "device_id":null
+ },
+ "X":215,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"H",
+ "tag":65,
+ "device_id":null
+ },
+ "X":252,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"J",
+ "tag":66,
+ "device_id":null
+ },
+ "X":289,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"K",
+ "tag":67,
+ "device_id":null
+ },
+ "X":326,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"L",
+ "tag":68,
+ "device_id":null
+ },
+ "X":363,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":":",
+ "tag":69,
+ "device_id":null
+ },
+ "X":400,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"\"",
+ "tag":70,
+ "device_id":null
+ },
+ "X":437,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"ENTER",
+ "tag":72,
+ "device_id":null
+ },
+ "X":474,
+ "Y":111,
+ "Width":74,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"4",
+ "tag":73,
+ "device_id":null
+ },
+ "X":681,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"5",
+ "tag":74,
+ "device_id":null
+ },
+ "X":718,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"6",
+ "tag":75,
+ "device_id":null
+ },
+ "X":755,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"SHIFT",
+ "tag":76,
+ "device_id":null
+ },
+ "X":0,
+ "Y":148,
+ "Width":78,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"Z",
+ "tag":78,
+ "device_id":null
+ },
+ "X":85,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"X",
+ "tag":79,
+ "device_id":null
+ },
+ "X":122,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"C",
+ "tag":80,
+ "device_id":null
+ },
+ "X":159,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"V",
+ "tag":81,
+ "device_id":null
+ },
+ "X":196,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"B",
+ "tag":82,
+ "device_id":null
+ },
+ "X":233,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"N",
+ "tag":83,
+ "device_id":null
+ },
+ "X":270,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"M",
+ "tag":84,
+ "device_id":null
+ },
+ "X":307,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"<",
+ "tag":85,
+ "device_id":null
+ },
+ "X":344,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":">",
+ "tag":86,
+ "device_id":null
+ },
+ "X":381,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"?",
+ "tag":87,
+ "device_id":null
+ },
+ "X":418,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"SHIFT",
+ "tag":88,
+ "device_id":null
+ },
+ "X":455,
+ "Y":148,
+ "Width":93,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"↑",
+ "tag":89,
+ "device_id":null
+ },
+ "X":600,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"1",
+ "tag":90,
+ "device_id":null
+ },
+ "X":681,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"2",
+ "tag":91,
+ "device_id":null
+ },
+ "X":718,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"3",
+ "tag":92,
+ "device_id":null
+ },
+ "X":755,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"ENTER",
+ "tag":93,
+ "device_id":null
+ },
+ "X":792,
+ "Y":148,
+ "Width":30,
+ "Height":67,
+ "Image":"",
+ "FontSize":9.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"CTRL",
+ "tag":94,
+ "device_id":null
+ },
+ "X":0,
+ "Y":185,
+ "Width":51,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"WIN",
+ "tag":95,
+ "device_id":null
+ },
+ "X":56,
+ "Y":185,
+ "Width":39,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"ALT",
+ "tag":96,
+ "device_id":null
+ },
+ "X":100,
+ "Y":185,
+ "Width":42,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"SPACE",
+ "tag":97,
+ "device_id":null
+ },
+ "X":149,
+ "Y":185,
+ "Width":208,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"ALT",
+ "tag":98,
+ "device_id":null
+ },
+ "X":362,
+ "Y":185,
+ "Width":41,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"WIN",
+ "tag":99,
+ "device_id":null
+ },
+ "X":408,
+ "Y":185,
+ "Width":41,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"APP",
+ "tag":100,
+ "device_id":null
+ },
+ "X":454,
+ "Y":185,
+ "Width":41,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"CTRL",
+ "tag":101,
+ "device_id":null
+ },
+ "X":500,
+ "Y":185,
+ "Width":48,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"←",
+ "tag":102,
+ "device_id":null
+ },
+ "X":563,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"↓",
+ "tag":103,
+ "device_id":null
+ },
+ "X":600,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"→",
+ "tag":104,
+ "device_id":null
+ },
+ "X":637,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":"0",
+ "tag":105,
+ "device_id":null
+ },
+ "X":681,
+ "Y":185,
+ "Width":67,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ },
+ {
+ "Key":{
+ "visual_name":".",
+ "tag":106,
+ "device_id":null
+ },
+ "X":755,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "FontSize":12.0,
+ "Enabled":true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/iso_layout.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/iso_layout.json
new file mode 100644
index 000000000..8d00a4633
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/iso_layout.json
@@ -0,0 +1,1581 @@
+{
+ "layout_width":800,
+ "layout_height":400,
+ "keys":[
+ {
+ "Key":{
+ "visual_name":"ESC",
+ "tag":1,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":0,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F1",
+ "tag":2,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":62,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F2",
+ "tag":3,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":99,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F3",
+ "tag":4,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":136,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F4",
+ "tag":5,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":173,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F5",
+ "tag":6,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":237,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F6",
+ "tag":7,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":274,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F7",
+ "tag":8,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":311,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F8",
+ "tag":9,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":348,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F9",
+ "tag":10,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":407,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F10",
+ "tag":11,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":444,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F11",
+ "tag":12,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":481,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F12",
+ "tag":13,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":518,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"PRINT",
+ "tag":14,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":562,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"SCRL\r\nLOCK",
+ "tag":15,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":599,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"PAUSE",
+ "tag":16,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":636,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"`",
+ "tag":17,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":0,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"1",
+ "tag":18,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":37,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"2",
+ "tag":19,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":74,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"3",
+ "tag":20,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":111,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"4",
+ "tag":21,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":148,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"5",
+ "tag":22,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":185,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"6",
+ "tag":23,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":222,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"7",
+ "tag":24,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":259,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"8",
+ "tag":25,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":296,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"9",
+ "tag":26,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":333,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"0",
+ "tag":27,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":370,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"-",
+ "tag":28,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":407,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"=",
+ "tag":29,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":444,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"BACKSPACE",
+ "tag":30,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":481,
+ "Y":37,
+ "Width":67,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"INSERT",
+ "tag":31,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":562,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"HOME",
+ "tag":32,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":599,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"PAGE\r\nUP",
+ "tag":33,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":636,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"NUM\r\nLOCK",
+ "tag":34,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":680,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"/",
+ "tag":35,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":717,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"*",
+ "tag":36,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"-",
+ "tag":37,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":791,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"TAB",
+ "tag":38,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":0,
+ "Y":74,
+ "Width":50,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"Q",
+ "tag":39,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":57,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"W",
+ "tag":40,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":94,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"E",
+ "tag":41,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":131,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"R",
+ "tag":42,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":168,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"T",
+ "tag":43,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":205,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"Y",
+ "tag":44,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":242,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"U",
+ "tag":45,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":279,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"I",
+ "tag":46,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":316,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"O",
+ "tag":47,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":353,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"P",
+ "tag":48,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":390,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"{",
+ "tag":49,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":427,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"}",
+ "tag":50,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":464,
+ "Y":74,
+ "Width":40,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"DEL",
+ "tag":52,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":562,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"END",
+ "tag":53,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":599,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"PAGE\r\nDOWN",
+ "tag":54,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":636,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"7",
+ "tag":55,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":680,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"8",
+ "tag":56,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":717,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"9",
+ "tag":57,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"+",
+ "tag":58,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":791,
+ "Y":74,
+ "Width":30,
+ "Height":67,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"CAPS\r\nLOCK",
+ "tag":59,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":0,
+ "Y":111,
+ "Width":60,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"A",
+ "tag":60,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":67,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"S",
+ "tag":61,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":104,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"D",
+ "tag":62,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":141,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F",
+ "tag":63,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":178,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"G",
+ "tag":64,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":215,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"H",
+ "tag":65,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":252,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"J",
+ "tag":66,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":289,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"K",
+ "tag":67,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":326,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"L",
+ "tag":68,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":363,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":":",
+ "tag":69,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":400,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"'",
+ "tag":70,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":437,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"#",
+ "tag":71,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":474,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"ENTER",
+ "tag":72,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":511,
+ "Y":74,
+ "Width":38,
+ "Height":67,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"4",
+ "tag":73,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":680,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"5",
+ "tag":74,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":717,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"6",
+ "tag":75,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"SHIFT",
+ "tag":76,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":0,
+ "Y":148,
+ "Width":48,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"\\",
+ "tag":77,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":55,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"Z",
+ "tag":78,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":92,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"X",
+ "tag":79,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":129,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"C",
+ "tag":80,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":166,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"V",
+ "tag":81,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":203,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"B",
+ "tag":82,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":240,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"N",
+ "tag":83,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":277,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"M",
+ "tag":84,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":314,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"<",
+ "tag":85,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":351,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":">",
+ "tag":86,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":388,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"?",
+ "tag":87,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":425,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"SHIFT",
+ "tag":88,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":462,
+ "Y":148,
+ "Width":87,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"↑",
+ "tag":89,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":598,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"1",
+ "tag":90,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":680,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"2",
+ "tag":91,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":717,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"3",
+ "tag":92,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"ENTER",
+ "tag":93,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":791,
+ "Y":148,
+ "Width":30,
+ "Height":67,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"CTRL",
+ "tag":94,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":0,
+ "Y":185,
+ "Width":51,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"WIN",
+ "tag":95,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":56,
+ "Y":185,
+ "Width":39,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"ALT",
+ "tag":96,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":100,
+ "Y":185,
+ "Width":42,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"SPACE",
+ "tag":97,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":149,
+ "Y":185,
+ "Width":208,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"ALT Gr",
+ "tag":98,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":362,
+ "Y":185,
+ "Width":41,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"WIN",
+ "tag":99,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":408,
+ "Y":185,
+ "Width":41,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"APP",
+ "tag":100,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":454,
+ "Y":185,
+ "Width":40,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"CTRL",
+ "tag":101,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":499,
+ "Y":185,
+ "Width":50,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"←",
+ "tag":102,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":561,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"↓",
+ "tag":103,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":598,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"→",
+ "tag":104,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":635,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"0",
+ "tag":105,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":680,
+ "Y":185,
+ "Width":67,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":".",
+ "tag":106,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/isocafr_layout.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/isocafr_layout.json
new file mode 100644
index 000000000..efbc2a8aa
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/isocafr_layout.json
@@ -0,0 +1,1581 @@
+{
+ "layout_width":800,
+ "layout_height":400,
+ "keys":[
+ {
+ "Key":{
+ "visual_name":"ESC",
+ "tag":1,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":0,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F1",
+ "tag":2,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":62,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F2",
+ "tag":3,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":99,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F3",
+ "tag":4,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":136,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F4",
+ "tag":5,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":173,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F5",
+ "tag":6,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":237,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F6",
+ "tag":7,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":274,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F7",
+ "tag":8,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":311,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F8",
+ "tag":9,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":348,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F9",
+ "tag":10,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":407,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F10",
+ "tag":11,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":444,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F11",
+ "tag":12,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":481,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F12",
+ "tag":13,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":518,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"PRINT",
+ "tag":14,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":562,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"SCRL\r\nLOCK",
+ "tag":15,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":599,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"PAUSE",
+ "tag":16,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":636,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"`",
+ "tag":71,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":0,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"1",
+ "tag":18,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":37,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"2",
+ "tag":19,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":74,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"3",
+ "tag":20,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":111,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"4",
+ "tag":21,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":148,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"5",
+ "tag":22,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":185,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"6",
+ "tag":23,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":222,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"7",
+ "tag":24,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":259,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"8",
+ "tag":25,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":296,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"9",
+ "tag":26,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":333,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"0",
+ "tag":27,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":370,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"-",
+ "tag":28,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":407,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"=",
+ "tag":29,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":444,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"BACKSPACE",
+ "tag":30,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":481,
+ "Y":37,
+ "Width":67,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"INSERT",
+ "tag":31,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":562,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"HOME",
+ "tag":32,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":599,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"PAGE\r\nUP",
+ "tag":33,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":636,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"NUM\r\nLOCK",
+ "tag":34,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":680,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"/",
+ "tag":35,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":717,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"*",
+ "tag":36,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"-",
+ "tag":37,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":791,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"TAB",
+ "tag":38,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":0,
+ "Y":74,
+ "Width":50,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"Q",
+ "tag":39,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":57,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"W",
+ "tag":40,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":94,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"E",
+ "tag":41,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":131,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"R",
+ "tag":42,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":168,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"T",
+ "tag":43,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":205,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"Y",
+ "tag":44,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":242,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"U",
+ "tag":45,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":279,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"I",
+ "tag":46,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":316,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"O",
+ "tag":47,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":353,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"P",
+ "tag":48,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":390,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"{",
+ "tag":49,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":427,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"}",
+ "tag":50,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":464,
+ "Y":74,
+ "Width":40,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"DEL",
+ "tag":52,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":562,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"END",
+ "tag":53,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":599,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"PAGE\r\nDOWN",
+ "tag":54,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":636,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"7",
+ "tag":55,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":680,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"8",
+ "tag":56,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":717,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"9",
+ "tag":57,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"+",
+ "tag":58,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":791,
+ "Y":74,
+ "Width":30,
+ "Height":67,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"CAPS\r\nLOCK",
+ "tag":59,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":0,
+ "Y":111,
+ "Width":60,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"A",
+ "tag":60,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":67,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"S",
+ "tag":61,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":104,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"D",
+ "tag":62,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":141,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F",
+ "tag":63,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":178,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"G",
+ "tag":64,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":215,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"H",
+ "tag":65,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":252,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"J",
+ "tag":66,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":289,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"K",
+ "tag":67,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":326,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"L",
+ "tag":68,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":363,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":":",
+ "tag":69,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":400,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"'",
+ "tag":70,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":437,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"#",
+ "tag":17,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":474,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"ENTER",
+ "tag":72,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":511,
+ "Y":74,
+ "Width":38,
+ "Height":67,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"4",
+ "tag":73,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":680,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"5",
+ "tag":74,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":717,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"6",
+ "tag":75,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"SHIFT",
+ "tag":76,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":0,
+ "Y":148,
+ "Width":48,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"\\",
+ "tag":77,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":55,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"Z",
+ "tag":78,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":92,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"X",
+ "tag":79,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":129,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"C",
+ "tag":80,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":166,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"V",
+ "tag":81,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":203,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"B",
+ "tag":82,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":240,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"N",
+ "tag":83,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":277,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"M",
+ "tag":84,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":314,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"<",
+ "tag":85,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":351,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":">",
+ "tag":86,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":388,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"?",
+ "tag":87,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":425,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"SHIFT",
+ "tag":88,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":462,
+ "Y":148,
+ "Width":87,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"↑",
+ "tag":89,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":598,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"1",
+ "tag":90,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":680,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"2",
+ "tag":91,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":717,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"3",
+ "tag":92,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"ENTER",
+ "tag":93,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":791,
+ "Y":148,
+ "Width":30,
+ "Height":67,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"CTRL",
+ "tag":94,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":0,
+ "Y":185,
+ "Width":51,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"WIN",
+ "tag":95,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":56,
+ "Y":185,
+ "Width":39,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"ALT",
+ "tag":96,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":100,
+ "Y":185,
+ "Width":42,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"SPACE",
+ "tag":97,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":149,
+ "Y":185,
+ "Width":208,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"ALT Gr",
+ "tag":98,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":362,
+ "Y":185,
+ "Width":41,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"WIN",
+ "tag":99,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":408,
+ "Y":185,
+ "Width":41,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"APP",
+ "tag":100,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":454,
+ "Y":185,
+ "Width":40,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"CTRL",
+ "tag":101,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":499,
+ "Y":185,
+ "Width":50,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"←",
+ "tag":102,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":561,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"↓",
+ "tag":103,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":598,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"→",
+ "tag":104,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":635,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"0",
+ "tag":105,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":680,
+ "Y":185,
+ "Width":67,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":".",
+ "tag":106,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/jpn_layout.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/jpn_layout.json
new file mode 100644
index 000000000..3e0d7770d
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Plain Keyboard/jpn_layout.json
@@ -0,0 +1,1626 @@
+{
+ "layout_width":0,
+ "layout_height":0,
+ "keys":[
+ {
+ "Key":{
+ "visual_name":"ESC",
+ "tag":1,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":0,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F1",
+ "tag":2,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":62,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F2",
+ "tag":3,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":99,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F3",
+ "tag":4,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":136,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F4",
+ "tag":5,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":173,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F5",
+ "tag":6,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":237,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F6",
+ "tag":7,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":274,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F7",
+ "tag":8,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":311,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F8",
+ "tag":9,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":348,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F9",
+ "tag":10,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":407,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F10",
+ "tag":11,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":444,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F11",
+ "tag":12,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":481,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F12",
+ "tag":13,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":518,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"PRINT",
+ "tag":14,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":562,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"SCRL\r\nLOCK",
+ "tag":15,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":599,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"PAUSE",
+ "tag":16,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":636,
+ "Y":0,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"半角/\r\n全角",
+ "tag":17,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":0,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"1",
+ "tag":18,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":37,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"2",
+ "tag":19,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":74,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"3",
+ "tag":20,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":111,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"4",
+ "tag":21,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":148,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"5",
+ "tag":22,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":185,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"6",
+ "tag":23,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":222,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"7",
+ "tag":24,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":259,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"8",
+ "tag":25,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":296,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"9",
+ "tag":26,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":333,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"0",
+ "tag":27,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":370,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"-",
+ "tag":28,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":407,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"^",
+ "tag":29,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":444,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"¥",
+ "tag":156,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":481,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"BACK",
+ "tag":30,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":518,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"INSERT",
+ "tag":31,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":562,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"HOME",
+ "tag":32,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":599,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"PAGE\r\nUP",
+ "tag":33,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":636,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"NUM\r\nLOCK",
+ "tag":34,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":680,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"/",
+ "tag":35,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":717,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"*",
+ "tag":36,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"-",
+ "tag":37,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":791,
+ "Y":37,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"TAB",
+ "tag":38,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":0,
+ "Y":74,
+ "Width":50,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"Q",
+ "tag":39,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":57,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"W",
+ "tag":40,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":94,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"E",
+ "tag":41,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":131,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"R",
+ "tag":42,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":168,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"T",
+ "tag":43,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":205,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"Y",
+ "tag":44,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":242,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"U",
+ "tag":45,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":279,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"I",
+ "tag":46,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":316,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"O",
+ "tag":47,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":353,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"P",
+ "tag":48,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":390,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"@",
+ "tag":49,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":427,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"[",
+ "tag":50,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":464,
+ "Y":74,
+ "Width":40,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"DEL",
+ "tag":52,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":562,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"END",
+ "tag":53,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":599,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"PAGE\r\nDOWN",
+ "tag":54,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":636,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"7",
+ "tag":55,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":680,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"8",
+ "tag":56,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":717,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"9",
+ "tag":57,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":74,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"+",
+ "tag":58,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":791,
+ "Y":74,
+ "Width":30,
+ "Height":67,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"CAPS\r\nLOCK",
+ "tag":59,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":0,
+ "Y":111,
+ "Width":60,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"A",
+ "tag":60,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":67,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"S",
+ "tag":61,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":104,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"D",
+ "tag":62,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":141,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"F",
+ "tag":63,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":178,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"G",
+ "tag":64,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":215,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"H",
+ "tag":65,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":252,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"J",
+ "tag":66,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":289,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"K",
+ "tag":67,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":326,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"L",
+ "tag":68,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":363,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":";",
+ "tag":69,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":400,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":":",
+ "tag":70,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":437,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"]",
+ "tag":71,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":474,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"ENTER",
+ "tag":72,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":511,
+ "Y":74,
+ "Width":38,
+ "Height":67,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"4",
+ "tag":73,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":680,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"5",
+ "tag":74,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":717,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"6",
+ "tag":75,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":111,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"SHIFT",
+ "tag":76,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":0,
+ "Y":148,
+ "Width":85,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"Z",
+ "tag":78,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":92,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"X",
+ "tag":79,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":129,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"C",
+ "tag":80,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":166,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"V",
+ "tag":81,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":203,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"B",
+ "tag":82,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":240,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"N",
+ "tag":83,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":277,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"M",
+ "tag":84,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":314,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"<",
+ "tag":85,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":351,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":">",
+ "tag":86,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":388,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"/",
+ "tag":87,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":425,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"\\",
+ "tag":77,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":462,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"SHIFT",
+ "tag":88,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":499,
+ "Y":148,
+ "Width":50,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"↑",
+ "tag":89,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":598,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"1",
+ "tag":90,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":680,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"2",
+ "tag":91,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":717,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"3",
+ "tag":92,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":148,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"ENTER",
+ "tag":93,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":791,
+ "Y":148,
+ "Width":30,
+ "Height":67,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"CTRL",
+ "tag":94,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":0,
+ "Y":185,
+ "Width":51,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"WIN",
+ "tag":95,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":56,
+ "Y":185,
+ "Width":39,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"ALT",
+ "tag":96,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":100,
+ "Y":185,
+ "Width":42,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"無変換",
+ "tag":153,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":147,
+ "Y":185,
+ "Width":42,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"SPACE",
+ "tag":97,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":196,
+ "Y":185,
+ "Width":133,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"変換",
+ "tag":98,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":336,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"カタカナ/\r\nひらがな",
+ "tag":155,
+ "device_id":null
+ },
+ "FontSize":9.0,
+ "Enabled":true,
+ "X":373,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"ALT",
+ "tag":99,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":408,
+ "Y":185,
+ "Width":41,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"APP",
+ "tag":100,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":454,
+ "Y":185,
+ "Width":40,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"CTRL",
+ "tag":101,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":499,
+ "Y":185,
+ "Width":50,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"←",
+ "tag":102,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":561,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"↓",
+ "tag":103,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":598,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"→",
+ "tag":104,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":635,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":"0",
+ "tag":105,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":680,
+ "Y":185,
+ "Width":67,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ },
+ {
+ "Key":{
+ "visual_name":".",
+ "tag":106,
+ "device_id":null
+ },
+ "FontSize":12.0,
+ "Enabled":true,
+ "X":754,
+ "Y":185,
+ "Width":30,
+ "Height":30,
+ "Image":"",
+ "IsImage":false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Uniwill2ND_35X.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Uniwill2ND_35X.json
new file mode 100644
index 000000000..21b755c2d
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Uniwill2ND_35X.json
@@ -0,0 +1,508 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [
+ 14,
+ 15,
+ 16,
+ 99
+ ],
+ "key_modifications": {
+ "2": {
+ "VisualName": null,
+ "X": 37,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "3": {
+ "VisualName": null,
+ "X": 74,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "4": {
+ "VisualName": null,
+ "X": 111,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "5": {
+ "VisualName": null,
+ "X": 148,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "6": {
+ "VisualName": null,
+ "X": 185,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "7": {
+ "VisualName": null,
+ "X": 222,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "8": {
+ "VisualName": null,
+ "X": 259,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "9": {
+ "VisualName": null,
+ "X": 296,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "10": {
+ "VisualName": null,
+ "X": 333,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "11": {
+ "VisualName": null,
+ "X": 370,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "12": {
+ "VisualName": null,
+ "X": 407,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "13": {
+ "VisualName": null,
+ "X": 444,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "31": {
+ "VisualName": null,
+ "X": 481,
+ "Y": 0,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "32": {
+ "VisualName": "Home",
+ "X": 555,
+ "Y": 0,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "33": {
+ "VisualName": "PGUP",
+ "X": 629,
+ "Y": 0,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "34": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "35": {
+ "VisualName": null,
+ "X": 592,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "36": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "37": {
+ "VisualName": null,
+ "X": 666,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "51": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": 9.0,
+ "Enabled": null
+ },
+ "52": {
+ "VisualName": null,
+ "X": 518,
+ "Y": 0,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "53": {
+ "VisualName": null,
+ "X": 592,
+ "Y": 0,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "54": {
+ "VisualName": "PGDN",
+ "X": 666,
+ "Y": 0,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "55": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "56": {
+ "VisualName": null,
+ "X": 592,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "57": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "58": {
+ "VisualName": null,
+ "X": 666,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "73": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "74": {
+ "VisualName": null,
+ "X": 592,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "75": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "88": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": -37,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "89": {
+ "VisualName": null,
+ "X": 518,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "90": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "91": {
+ "VisualName": null,
+ "X": 592,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "92": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "93": {
+ "VisualName": null,
+ "X": 666,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "94": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": -10,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "95": {
+ "VisualName": null,
+ "X": 85,
+ "Y": null,
+ "Width": -9,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "96": {
+ "VisualName": null,
+ "X": 122,
+ "Y": null,
+ "Width": -12,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "97": {
+ "VisualName": null,
+ "X": 159,
+ "Y": null,
+ "Width": -30,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "98": {
+ "VisualName": null,
+ "X": 344,
+ "Y": null,
+ "Width": -11,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "100": {
+ "VisualName": "App",
+ "X": 381,
+ "Y": null,
+ "Width": -11,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "101": {
+ "VisualName": null,
+ "X": 418,
+ "Y": null,
+ "Width": 8,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "102": {
+ "VisualName": null,
+ "X": 481,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "103": {
+ "VisualName": null,
+ "X": 518,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "104": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "105": {
+ "VisualName": null,
+ "X": 592,
+ "Y": null,
+ "Width": -37,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "106": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ }
+ },
+ "key_to_add": {
+ "107": {
+ "Key": {
+ "visual_name": "FN",
+ "tag": 107,
+ "device_id": null
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 48,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Uniwill2P1_550.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Uniwill2P1_550.json
new file mode 100644
index 000000000..4afd44610
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Uniwill2P1_550.json
@@ -0,0 +1,365 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [
+ 15,
+ 16,
+ 34,
+ 35,
+ 36,
+ 37,
+ 55,
+ 56,
+ 57,
+ 58,
+ 73,
+ 74,
+ 75,
+ 90,
+ 91,
+ 92,
+ 93,
+ 99,
+ 105,
+ 106
+ ],
+ "key_modifications": {
+ "2": {
+ "VisualName": null,
+ "X": 37,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "3": {
+ "VisualName": null,
+ "X": 74,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "4": {
+ "VisualName": null,
+ "X": 111,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "5": {
+ "VisualName": null,
+ "X": 148,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "6": {
+ "VisualName": null,
+ "X": 185,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "7": {
+ "VisualName": null,
+ "X": 222,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "8": {
+ "VisualName": null,
+ "X": 259,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "9": {
+ "VisualName": null,
+ "X": 296,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "10": {
+ "VisualName": null,
+ "X": 333,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "11": {
+ "VisualName": null,
+ "X": 370,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "12": {
+ "VisualName": null,
+ "X": 407,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "13": {
+ "VisualName": null,
+ "X": 444,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "14": {
+ "VisualName": null,
+ "X": 518,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "31": {
+ "VisualName": null,
+ "X": 481,
+ "Y": 0,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "32": {
+ "VisualName": "Home",
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "33": {
+ "VisualName": "PGUP",
+ "X": 555,
+ "Y": 74,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "51": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": 9.0,
+ "Enabled": null
+ },
+ "52": {
+ "VisualName": null,
+ "X": 555,
+ "Y": 0,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "53": {
+ "VisualName": null,
+ "X": 555,
+ "Y": 148,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "54": {
+ "VisualName": "PGDN",
+ "X": 555,
+ "Y": 111,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "88": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": -37,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "89": {
+ "VisualName": null,
+ "X": 518,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "94": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": -10,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "95": {
+ "VisualName": null,
+ "X": 85,
+ "Y": null,
+ "Width": -9,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "96": {
+ "VisualName": null,
+ "X": 122,
+ "Y": null,
+ "Width": -12,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "97": {
+ "VisualName": null,
+ "X": 159,
+ "Y": null,
+ "Width": -30,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "98": {
+ "VisualName": null,
+ "X": 344,
+ "Y": null,
+ "Width": -11,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "100": {
+ "VisualName": "App",
+ "X": 381,
+ "Y": null,
+ "Width": -11,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "101": {
+ "VisualName": null,
+ "X": 418,
+ "Y": null,
+ "Width": 8,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "102": {
+ "VisualName": null,
+ "X": 481,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "103": {
+ "VisualName": null,
+ "X": 518,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "104": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ }
+ },
+ "key_to_add": {
+ "107": {
+ "Key": {
+ "visual_name": "FN",
+ "tag": 107,
+ "device_id": null
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 48,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ }
+ },
+ "jis_key_modifications": {}
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Uniwill2P2_650.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Uniwill2P2_650.json
new file mode 100644
index 000000000..c81b277ab
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/Uniwill2P2_650.json
@@ -0,0 +1,473 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [
+ 15,
+ 31,
+ 32,
+ 33,
+ 53,
+ 54,
+ 93,
+ 99
+ ],
+ "key_modifications": {
+ "2": {
+ "VisualName": null,
+ "X": 37,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "3": {
+ "VisualName": null,
+ "X": 74,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "4": {
+ "VisualName": null,
+ "X": 111,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "5": {
+ "VisualName": null,
+ "X": 148,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "6": {
+ "VisualName": null,
+ "X": 185,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "7": {
+ "VisualName": null,
+ "X": 222,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "8": {
+ "VisualName": null,
+ "X": 259,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "9": {
+ "VisualName": null,
+ "X": 296,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "10": {
+ "VisualName": null,
+ "X": 333,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "11": {
+ "VisualName": null,
+ "X": 370,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "12": {
+ "VisualName": null,
+ "X": 407,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "13": {
+ "VisualName": null,
+ "X": 444,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "14": {
+ "VisualName": null,
+ "X": 518,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "16": {
+ "VisualName": null,
+ "X": 481,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "34": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "35": {
+ "VisualName": null,
+ "X": 592,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "36": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "37": {
+ "VisualName": null,
+ "X": 592,
+ "Y": 0,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "51": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": 9.0,
+ "Enabled": null
+ },
+ "52": {
+ "VisualName": null,
+ "X": 555,
+ "Y": 0,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "55": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "56": {
+ "VisualName": null,
+ "X": 592,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "57": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "58": {
+ "VisualName": null,
+ "X": 629,
+ "Y": 0,
+ "Width": null,
+ "Height": -37,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "73": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "74": {
+ "VisualName": null,
+ "X": 592,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "75": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "88": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": -37,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "89": {
+ "VisualName": null,
+ "X": 518,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "90": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "91": {
+ "VisualName": null,
+ "X": 592,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "92": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "94": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": -10,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "95": {
+ "VisualName": null,
+ "X": 85,
+ "Y": null,
+ "Width": -9,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "96": {
+ "VisualName": null,
+ "X": 122,
+ "Y": null,
+ "Width": -12,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "97": {
+ "VisualName": null,
+ "X": 159,
+ "Y": null,
+ "Width": -30,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "98": {
+ "VisualName": null,
+ "X": 344,
+ "Y": null,
+ "Width": -11,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "100": {
+ "VisualName": "App",
+ "X": 381,
+ "Y": null,
+ "Width": -11,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "101": {
+ "VisualName": null,
+ "X": 418,
+ "Y": null,
+ "Width": 8,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "102": {
+ "VisualName": null,
+ "X": 481,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "103": {
+ "VisualName": null,
+ "X": 518,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "104": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "105": {
+ "VisualName": null,
+ "X": 592,
+ "Y": null,
+ "Width": -37,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "106": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ }
+ },
+ "key_to_add": {
+ "107": {
+ "Key": {
+ "visual_name": "FN",
+ "tag": 107,
+ "device_id": null
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 48,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ }
+},
+ "jis_key_modifications": {}
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/asus_strix_flare.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/asus_strix_flare.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/asus_strix_flare.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/asus_strix_flare.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/asus_strix_scope.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/asus_strix_scope.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/asus_strix_scope.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/asus_strix_scope.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/cooler_master_sk650.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/cooler_master_sk650.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/cooler_master_sk650.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/cooler_master_sk650.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/corsair_k65.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_k65.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/corsair_k65.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_k65.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/corsair_k68.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_k68.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/corsair_k68.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_k68.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/corsair_k70.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_k70.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/corsair_k70.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_k70.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/corsair_k70_mk2.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_k70_mk2.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/corsair_k70_mk2.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_k70_mk2.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/corsair_k95.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_k95.json
similarity index 52%
rename from Project-Aurora/Project-Aurora/kb_layouts/corsair_k95.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_k95.json
index a2459c37e..60eebda8e 100644
--- a/Project-Aurora/Project-Aurora/kb_layouts/corsair_k95.json
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_k95.json
@@ -2,7 +2,7 @@
"keys_to_remove": [],
"key_modifications": {},
"included_features": [
- "corsair_k95_left_features.json",
- "corsair_k95_right_features.json"
+ "corsair_k95_right_features.json",
+ "corsair_k95_left_features.json"
]
}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_k95_platinum.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_k95_platinum.json
new file mode 100644
index 000000000..25615a03d
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_k95_platinum.json
@@ -0,0 +1,487 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "139": {
+ "Key": {
+ "visual_name": "MUTE",
+ "tag": 139,
+ "device_id": null
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 717,
+ "Y": -37,
+ "Width": 30,
+ "Height": 24,
+ "Image": "",
+ "IsImage": false
+ },
+ "136": {
+ "Key": {
+ "visual_name": "STOP",
+ "tag": 136,
+ "device_id": null
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 680,
+ "Y": 0,
+ "Width": 30,
+ "Height": 24,
+ "Image": "",
+ "IsImage": false
+ },
+ "137": {
+ "Key": {
+ "visual_name": "PREV",
+ "tag": 137,
+ "device_id": null
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 717,
+ "Y": 0,
+ "Width": 30,
+ "Height": 24,
+ "Image": "",
+ "IsImage": false
+ },
+ "133": {
+ "Key": {
+ "visual_name": "PLAY",
+ "tag": 133,
+ "device_id": null
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 754,
+ "Y": 0,
+ "Width": 30,
+ "Height": 24,
+ "Image": "",
+ "IsImage": false
+ },
+ "138": {
+ "Key": {
+ "visual_name": "NEXT",
+ "tag": 138,
+ "device_id": null
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 791,
+ "Y": 0,
+ "Width": 30,
+ "Height": 24,
+ "Image": "",
+ "IsImage": false
+ },
+ "142": {
+ "Key": {
+ "visual_name": "",
+ "tag": 142,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": -47,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "143": {
+ "Key": {
+ "visual_name": "",
+ "tag": 143,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": -1,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "144": {
+ "Key": {
+ "visual_name": "",
+ "tag": 144,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 45,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "145": {
+ "Key": {
+ "visual_name": "",
+ "tag": 145,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 91,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "146": {
+ "Key": {
+ "visual_name": "",
+ "tag": 146,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 137,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "147": {
+ "Key": {
+ "visual_name": "",
+ "tag": 147,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 183,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "148": {
+ "Key": {
+ "visual_name": "",
+ "tag": 148,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 229,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "149": {
+ "Key": {
+ "visual_name": "",
+ "tag": 149,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 275,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "150": {
+ "Key": {
+ "visual_name": "",
+ "tag": 150,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 321,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "151": {
+ "Key": {
+ "visual_name": "",
+ "tag": 151,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 367,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "172": {
+ "Key": {
+ "visual_name": "",
+ "tag": 172,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 413,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "173": {
+ "Key": {
+ "visual_name": "",
+ "tag": 173,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 459,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "174": {
+ "Key": {
+ "visual_name": "",
+ "tag": 174,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 505,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "175": {
+ "Key": {
+ "visual_name": "",
+ "tag": 175,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 551,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "176": {
+ "Key": {
+ "visual_name": "",
+ "tag": 176,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 597,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "177": {
+ "Key": {
+ "visual_name": "",
+ "tag": 177,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 643,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "178": {
+ "Key": {
+ "visual_name": "",
+ "tag": 178,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 689,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "179": {
+ "Key": {
+ "visual_name": "",
+ "tag": 179,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 735,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "180": {
+ "Key": {
+ "visual_name": "",
+ "tag": 180,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 781,
+ "Y": -54,
+ "Width": 46,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "131": {
+ "Key": {
+ "visual_name": "LIGHTS",
+ "tag": 131,
+ "device_id": null
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 104,
+ "Y": -37,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ },
+ "132": {
+ "Key": {
+ "visual_name": "LOCK",
+ "tag": 132,
+ "device_id": null
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 141,
+ "Y": -37,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ },
+ "108": {
+ "Key": {
+ "visual_name": "G1",
+ "tag": 108,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": -43,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ },
+ "109": {
+ "Key": {
+ "visual_name": "G2",
+ "tag": 109,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": -43,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ },
+ "110": {
+ "Key": {
+ "visual_name": "G3",
+ "tag": 110,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": -43,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ },
+ "111": {
+ "Key": {
+ "visual_name": "G4",
+ "tag": 111,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": -43,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ },
+ "112": {
+ "Key": {
+ "visual_name": "G5",
+ "tag": 112,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": -43,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ },
+ "113": {
+ "Key": {
+ "visual_name": "G6",
+ "tag": 113,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": -43,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/corsair_sabre.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_sabre.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/corsair_sabre.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_sabre.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/corsair_strafe.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_strafe.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/corsair_strafe.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_strafe.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/corsair_strafe_mk2.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_strafe_mk2.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/corsair_strafe_mk2.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/corsair_strafe_mk2.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/drevo_blademaster.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/drevo_blademaster.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/drevo_blademaster.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/drevo_blademaster.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/ducky_one_2_rgb_tkl.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/ducky_one_2_rgb_tkl.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/ducky_one_2_rgb_tkl.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/ducky_one_2_rgb_tkl.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/ducky_shine_7.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/ducky_shine_7.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/ducky_shine_7.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/ducky_shine_7.json
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/generic_laptop.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/generic_laptop.json
new file mode 100644
index 000000000..4adb42d18
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/generic_laptop.json
@@ -0,0 +1,315 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [
+ 16,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 73,
+ 74,
+ 75,
+ 90,
+ 91,
+ 92,
+ 93,
+ 99,
+ 100,
+ 105,
+ 106
+ ],
+ "key_modifications": {
+ "2": {
+ "VisualName": null,
+ "X": 37,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "3": {
+ "VisualName": null,
+ "X": 74,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "4": {
+ "VisualName": null,
+ "X": 111,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "5": {
+ "VisualName": null,
+ "X": 148,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "6": {
+ "VisualName": null,
+ "X": 185,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "7": {
+ "VisualName": null,
+ "X": 222,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "8": {
+ "VisualName": null,
+ "X": 259,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "9": {
+ "VisualName": null,
+ "X": 296,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "10": {
+ "VisualName": null,
+ "X": 333,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "11": {
+ "VisualName": null,
+ "X": 370,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "12": {
+ "VisualName": null,
+ "X": 407,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "13": {
+ "VisualName": null,
+ "X": 444,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "14": {
+ "VisualName": null,
+ "X": 481,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "15": {
+ "VisualName": null,
+ "X": 518,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "51": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": 9.0,
+ "Enabled": null
+ },
+ "89": {
+ "VisualName": null,
+ "X": 486,
+ "Y": 185,
+ "Width": null,
+ "Height": -17,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "94": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": -10,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "95": {
+ "VisualName": null,
+ "X": 85,
+ "Y": null,
+ "Width": -9,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "96": {
+ "VisualName": null,
+ "X": 122,
+ "Y": null,
+ "Width": -12,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "97": {
+ "VisualName": null,
+ "X": 159,
+ "Y": null,
+ "Width": -30,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "98": {
+ "VisualName": null,
+ "X": 344,
+ "Y": null,
+ "Width": -11,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "101": {
+ "VisualName": null,
+ "X": 418,
+ "Y": null,
+ "Width": -18,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "102": {
+ "VisualName": null,
+ "X": 455,
+ "Y": null,
+ "Width": -6,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "103": {
+ "VisualName": null,
+ "X": 486,
+ "Y": 202,
+ "Width": null,
+ "Height": -17,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "104": {
+ "VisualName": null,
+ "X": 523,
+ "Y": null,
+ "Width": -6,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ }
+ },
+ "key_to_add": {
+ "107": {
+ "Key": {
+ "visual_name": "FN",
+ "tag": 107,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 381,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ },
+ "171": {
+ "Key": {
+ "visual_name": "FN",
+ "tag": 171,
+ "device_id": null
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 48,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/generic_laptop_numpad.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/generic_laptop_numpad.json
new file mode 100644
index 000000000..dbed1a2bc
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/generic_laptop_numpad.json
@@ -0,0 +1,468 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [
+ 16,
+ 31,
+ 32,
+ 33,
+ 52,
+ 53,
+ 54,
+ 99,
+ 100
+ ],
+ "key_modifications": {
+ "2": {
+ "VisualName": null,
+ "X": 37,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "3": {
+ "VisualName": null,
+ "X": 74,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "4": {
+ "VisualName": null,
+ "X": 111,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "5": {
+ "VisualName": null,
+ "X": 148,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "6": {
+ "VisualName": null,
+ "X": 185,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "7": {
+ "VisualName": null,
+ "X": 222,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "8": {
+ "VisualName": null,
+ "X": 259,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "9": {
+ "VisualName": null,
+ "X": 296,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "10": {
+ "VisualName": null,
+ "X": 333,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "11": {
+ "VisualName": null,
+ "X": 370,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "12": {
+ "VisualName": null,
+ "X": 407,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "13": {
+ "VisualName": null,
+ "X": 444,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "14": {
+ "VisualName": null,
+ "X": 481,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "15": {
+ "VisualName": null,
+ "X": 518,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "34": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "35": {
+ "VisualName": null,
+ "X": 592,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "36": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "37": {
+ "VisualName": null,
+ "X": 666,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "51": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": 9.0,
+ "Enabled": null
+ },
+ "55": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "56": {
+ "VisualName": null,
+ "X": 592,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "57": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "58": {
+ "VisualName": null,
+ "X": 666,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "73": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "74": {
+ "VisualName": null,
+ "X": 592,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "75": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "89": {
+ "VisualName": null,
+ "X": 486,
+ "Y": 185,
+ "Width": null,
+ "Height": -17,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "90": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "91": {
+ "VisualName": null,
+ "X": 592,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "92": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "93": {
+ "VisualName": null,
+ "X": 666,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "94": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": -10,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "95": {
+ "VisualName": null,
+ "X": 85,
+ "Y": null,
+ "Width": -9,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "96": {
+ "VisualName": null,
+ "X": 122,
+ "Y": null,
+ "Width": -12,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "97": {
+ "VisualName": null,
+ "X": 159,
+ "Y": null,
+ "Width": -30,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "98": {
+ "VisualName": null,
+ "X": 344,
+ "Y": null,
+ "Width": -11,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "101": {
+ "VisualName": null,
+ "X": 418,
+ "Y": null,
+ "Width": -18,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "102": {
+ "VisualName": null,
+ "X": 455,
+ "Y": null,
+ "Width": -6,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "103": {
+ "VisualName": null,
+ "X": 486,
+ "Y": 202,
+ "Width": null,
+ "Height": -17,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "104": {
+ "VisualName": null,
+ "X": 523,
+ "Y": null,
+ "Width": -6,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "105": {
+ "VisualName": null,
+ "X": 555,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "106": {
+ "VisualName": null,
+ "X": 629,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ }
+ },
+ "key_to_add": {
+ "171": {
+ "Key": {
+ "visual_name": "FN",
+ "tag": 171,
+ "device_id": null
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 48,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ },
+ "107": {
+ "Key": {
+ "visual_name": "FN",
+ "tag": 107,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 381,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/hyperx_alloy_elite_rgb.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/hyperx_alloy_elite_rgb.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/hyperx_alloy_elite_rgb.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/hyperx_alloy_elite_rgb.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Plain Keyboard/layout.dvorak.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/keychron_q1_knob_ansi.json
similarity index 73%
rename from Project-Aurora/Project-Aurora/kb_layouts/Plain Keyboard/layout.dvorak.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/keychron_q1_knob_ansi.json
index 481f596a4..bab051016 100644
--- a/Project-Aurora/Project-Aurora/kb_layouts/Plain Keyboard/layout.dvorak.json
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/keychron_q1_knob_ansi.json
@@ -1,41 +1,32 @@
-{
- "key_conversion": {
- 70: 39,
- 85: 40,
- 86: 41,
- 48: 42,
- 44: 43,
- 63: 44,
- 64: 45,
- 80: 46,
- 42: 47,
- 68: 48,
- 87: 49,
- 29: 50,
- 47: 61,
- 41: 62,
- 45: 63,
- 46: 64,
- 62: 65,
- 65: 66,
- 43: 67,
- 83: 68,
- 61: 69,
- 28: 70,
- 51: 71,
- 69: 78,
- 39: 79,
- 66: 80,
- 67: 81,
- 79: 82,
- 82: 83,
- 84: 84,
- 40: 85,
- 81: 86,
- 78: 87
- },
- "keys": [
- {
+{
+ "keys_to_remove": [
+ 14,
+ 15,
+ 16,
+ 31,
+ 34,
+ 35,
+ 36,
+ 37,
+ 53,
+ 55,
+ 56,
+ 57,
+ 58,
+ 73,
+ 74,
+ 75,
+ 90,
+ 91,
+ 92,
+ 93,
+ 99,
+ 100,
+ 105,
+ 106
+ ],
+ "key_modifications": {
+ "1": {
"visualName": "ESC",
"tag": 1,
"line_break": false,
@@ -50,22 +41,22 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "2": {
"visualName": "F1",
"tag": 2,
"line_break": false,
- "margin_left": 32.0,
+ "margin_left": 14.0,
"margin_top": 0.0,
"width": 30.0,
"height": 30.0,
"font_size": 12.0,
"width_bits": 3,
"height_bits": 3,
- "margin_left_bits": 2,
+ "margin_left_bits": 1,
"margin_top_bits": 0,
"enabled": true
},
- {
+ "3": {
"visualName": "F2",
"tag": 3,
"line_break": false,
@@ -80,7 +71,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "4": {
"visualName": "F3",
"tag": 4,
"line_break": false,
@@ -95,7 +86,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "5": {
"visualName": "F4",
"tag": 5,
"line_break": false,
@@ -110,22 +101,22 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "6": {
"visualName": "F5",
"tag": 6,
"line_break": false,
- "margin_left": 34.0,
+ "margin_left": 14.0,
"margin_top": 0.0,
"width": 30.0,
"height": 30.0,
"font_size": 12.0,
"width_bits": 3,
"height_bits": 3,
- "margin_left_bits": 2,
+ "margin_left_bits": 1,
"margin_top_bits": 0,
"enabled": true
},
- {
+ "7": {
"visualName": "F6",
"tag": 7,
"line_break": false,
@@ -140,7 +131,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "8": {
"visualName": "F7",
"tag": 8,
"line_break": false,
@@ -155,7 +146,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "9": {
"visualName": "F8",
"tag": 9,
"line_break": false,
@@ -170,22 +161,22 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "10": {
"visualName": "F9",
"tag": 10,
"line_break": false,
- "margin_left": 29.0,
+ "margin_left": 14.0,
"margin_top": 0.0,
"width": 30.0,
"height": 30.0,
"font_size": 12.0,
"width_bits": 3,
"height_bits": 3,
- "margin_left_bits": 2,
+ "margin_left_bits": 1,
"margin_top_bits": 0,
"enabled": true
},
- {
+ "11": {
"visualName": "F10",
"tag": 11,
"line_break": false,
@@ -200,7 +191,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "12": {
"visualName": "F11",
"tag": 12,
"line_break": false,
@@ -215,7 +206,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "13": {
"visualName": "F12",
"tag": 13,
"line_break": false,
@@ -230,52 +221,26 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "PRINT",
- "tag": 14,
- "line_break": false,
- "margin_left": 15.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 9.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 1,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "SCRL\r\nLOCK",
+ "52": {
"tag": 15,
- "line_break": false,
- "margin_left": 7.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 9.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
+ "margin_left": 7.0
},
- {
- "visualName": "PAUSE",
- "tag": 16,
+ "15": {
+ "visualName": "DEL",
+ "tag": 52,
"line_break": true,
- "margin_left": 7.0,
+ "margin_left": 14.0,
"margin_top": 0.0,
"width": 30.0,
"height": 30.0,
- "font_size": 9.0,
+ "font_size": 12.0,
"width_bits": 3,
"height_bits": 3,
- "margin_left_bits": 0,
+ "margin_left_bits": 1,
"margin_top_bits": 0,
"enabled": true
},
- {
+ "17": {
"visualName": "~",
"tag": 17,
"line_break": false,
@@ -290,7 +255,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "18": {
"visualName": "1",
"tag": 18,
"line_break": false,
@@ -305,7 +270,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "19": {
"visualName": "2",
"tag": 19,
"line_break": false,
@@ -320,7 +285,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "20": {
"visualName": "3",
"tag": 20,
"line_break": false,
@@ -335,7 +300,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "21": {
"visualName": "4",
"tag": 21,
"line_break": false,
@@ -350,7 +315,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "22": {
"visualName": "5",
"tag": 22,
"line_break": false,
@@ -365,7 +330,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "23": {
"visualName": "6",
"tag": 23,
"line_break": false,
@@ -380,7 +345,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "24": {
"visualName": "7",
"tag": 24,
"line_break": false,
@@ -395,7 +360,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "25": {
"visualName": "8",
"tag": 25,
"line_break": false,
@@ -410,7 +375,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "26": {
"visualName": "9",
"tag": 26,
"line_break": false,
@@ -425,7 +390,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "27": {
"visualName": "0",
"tag": 27,
"line_break": false,
@@ -440,7 +405,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "28": {
"visualName": "-",
"tag": 28,
"line_break": false,
@@ -455,7 +420,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "29": {
"visualName": "=",
"tag": 29,
"line_break": false,
@@ -470,71 +435,26 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "30": {
"visualName": "BACKSPACE",
"tag": 30,
"line_break": false,
"margin_left": 7.0,
"margin_top": 0.0,
- "width": 67.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 6,
- "height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "INSERT",
- "tag": 31,
- "line_break": false,
- "margin_left": 15.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 9.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 1,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "HOME",
- "tag": 32,
- "line_break": false,
- "margin_left": 7.0,
- "margin_top": 0.0,
- "width": 30.0,
+ "width": 60.0,
"height": 30.0,
"font_size": 9.0,
- "width_bits": 3,
+ "width_bits": 6,
"height_bits": 3,
"margin_left_bits": 0,
"margin_top_bits": 0,
"enabled": true
},
- {
+ "33": {
"visualName": "PAGE\r\nUP",
"tag": 33,
- "line_break": false,
- "margin_left": 7.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 9.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "NUM\r\nLOCK",
- "tag": 34,
- "line_break": false,
- "margin_left": 15.0,
+ "line_break": true,
+ "margin_left": 14.0,
"margin_top": 0.0,
"width": 30.0,
"height": 30.0,
@@ -545,58 +465,13 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "/",
- "tag": 35,
- "line_break": false,
- "margin_left": 7.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "*",
- "tag": 36,
- "line_break": false,
- "margin_left": 7.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "-",
- "tag": 37,
- "line_break": true,
- "margin_left": 7.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
+ "38": {
"visualName": "TAB",
"tag": 38,
"line_break": false,
"margin_left": 0.0,
"margin_top": 0.0,
- "width": 50.0,
+ "width": 45.0,
"height": 30.0,
"font_size": 12.0,
"width_bits": 4,
@@ -605,8 +480,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "'",
+ "39": {
+ "visualName": "Q",
"tag": 39,
"line_break": false,
"margin_left": 7.0,
@@ -620,8 +495,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": ",",
+ "40": {
+ "visualName": "W",
"tag": 40,
"line_break": false,
"margin_left": 7.0,
@@ -635,8 +510,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": ".",
+ "41": {
+ "visualName": "E",
"tag": 41,
"line_break": false,
"margin_left": 7.0,
@@ -650,8 +525,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "P",
+ "42": {
+ "visualName": "R",
"tag": 42,
"line_break": false,
"margin_left": 7.0,
@@ -665,8 +540,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "Y",
+ "43": {
+ "visualName": "T",
"tag": 43,
"line_break": false,
"margin_left": 7.0,
@@ -680,8 +555,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "F",
+ "44": {
+ "visualName": "Y",
"tag": 44,
"line_break": false,
"margin_left": 7.0,
@@ -695,8 +570,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "G",
+ "45": {
+ "visualName": "U",
"tag": 45,
"line_break": false,
"margin_left": 7.0,
@@ -710,8 +585,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "C",
+ "46": {
+ "visualName": "I",
"tag": 46,
"line_break": false,
"margin_left": 7.0,
@@ -725,8 +600,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "R",
+ "47": {
+ "visualName": "O",
"tag": 47,
"line_break": false,
"margin_left": 7.0,
@@ -740,8 +615,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "L",
+ "48": {
+ "visualName": "P",
"tag": 48,
"line_break": false,
"margin_left": 7.0,
@@ -755,8 +630,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "/",
+ "49": {
+ "visualName": "{",
"tag": 49,
"line_break": false,
"margin_left": 7.0,
@@ -770,8 +645,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "=",
+ "50": {
+ "visualName": "}",
"tag": 50,
"line_break": false,
"margin_left": 7.0,
@@ -785,133 +660,43 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "51": {
"visualName": "\\",
"tag": 51,
"line_break": false,
"margin_left": 7.0,
"margin_top": 0.0,
- "width": 47.0,
+ "width": 45.0,
"height": 30.0,
"font_size": 12.0,
- "width_bits": 5,
- "height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "DEL",
- "tag": 52,
- "line_break": false,
- "margin_left": 15.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 9.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 1,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "END",
- "tag": 53,
- "line_break": false,
- "margin_left": 7.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 9.0,
- "width_bits": 3,
+ "width_bits": 4,
"height_bits": 3,
"margin_left_bits": 0,
"margin_top_bits": 0,
"enabled": true
},
- {
+ "54": {
"visualName": "PAGE\r\nDOWN",
"tag": 54,
- "line_break": false,
- "margin_left": 7.0,
+ "line_break": true,
+ "margin_left": 14.0,
"margin_top": 0.0,
"width": 30.0,
"height": 30.0,
"font_size": 9.0,
"width_bits": 3,
"height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "7",
- "tag": 55,
- "line_break": false,
- "margin_left": 15.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
"margin_left_bits": 1,
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "8",
- "tag": 56,
- "line_break": false,
- "margin_left": 7.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "9",
- "tag": 57,
- "line_break": false,
- "margin_left": 7.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "+",
- "tag": 58,
- "line_break": true,
- "margin_left": 7.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 67.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 6,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
+ "59": {
"visualName": "CAPS\r\nLOCK",
"tag": 59,
"line_break": false,
"margin_left": 0.0,
"margin_top": 0.0,
- "width": 60.0,
+ "width": 52.5,
"height": 30.0,
"font_size": 9.0,
"width_bits": 5,
@@ -920,7 +705,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "60": {
"visualName": "A",
"tag": 60,
"line_break": false,
@@ -935,8 +720,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "O",
+ "61": {
+ "visualName": "S",
"tag": 61,
"line_break": false,
"margin_left": 7.0,
@@ -950,8 +735,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "E",
+ "62": {
+ "visualName": "D",
"tag": 62,
"line_break": false,
"margin_left": 7.0,
@@ -965,8 +750,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "U",
+ "63": {
+ "visualName": "F",
"tag": 63,
"line_break": false,
"margin_left": 7.0,
@@ -980,8 +765,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "I",
+ "64": {
+ "visualName": "G",
"tag": 64,
"line_break": false,
"margin_left": 7.0,
@@ -995,8 +780,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "D",
+ "65": {
+ "visualName": "H",
"tag": 65,
"line_break": false,
"margin_left": 7.0,
@@ -1010,8 +795,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "H",
+ "66": {
+ "visualName": "J",
"tag": 66,
"line_break": false,
"margin_left": 7.0,
@@ -1025,8 +810,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "T",
+ "67": {
+ "visualName": "K",
"tag": 67,
"line_break": false,
"margin_left": 7.0,
@@ -1040,8 +825,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "N",
+ "68": {
+ "visualName": "L",
"tag": 68,
"line_break": false,
"margin_left": 7.0,
@@ -1055,8 +840,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "S",
+ "69": {
+ "visualName": ":",
"tag": 69,
"line_break": false,
"margin_left": 7.0,
@@ -1070,8 +855,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "-",
+ "70": {
+ "visualName": "\"",
"tag": 70,
"line_break": false,
"margin_left": 7.0,
@@ -1085,7 +870,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "72": {
"visualName": "ENTER",
"tag": 72,
"line_break": false,
@@ -1100,68 +885,42 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "4",
+ "32": {
"tag": 73,
- "line_break": false,
- "margin_left": 133.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 11,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "5",
- "tag": 74,
- "line_break": false,
- "margin_left": 7.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
+ "margin_left": 7.0
},
- {
- "visualName": "6",
- "tag": 75,
+ "73": {
+ "visualName": "HOME",
+ "tag": 32,
"line_break": true,
- "margin_left": 7.0,
+ "margin_left": 14.0,
"margin_top": 0.0,
"width": 30.0,
"height": 30.0,
- "font_size": 12.0,
+ "font_size": 9.0,
"width_bits": 3,
"height_bits": 3,
- "margin_left_bits": 0,
+ "margin_left_bits": 1,
"margin_top_bits": 0,
"enabled": true
},
- {
+ "76": {
"visualName": "SHIFT",
"tag": 76,
"line_break": false,
"margin_left": 0.0,
"margin_top": 0.0,
- "width": 78.0,
+ "width": 67.5,
"height": 30.0,
"font_size": 12.0,
- "width_bits": 7,
+ "width_bits": 6,
"height_bits": 3,
"margin_left_bits": 0,
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": ";",
+ "78": {
+ "visualName": "Z",
"tag": 78,
"line_break": false,
"margin_left": 7.0,
@@ -1175,8 +934,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "Q",
+ "79": {
+ "visualName": "X",
"tag": 79,
"line_break": false,
"margin_left": 7.0,
@@ -1190,8 +949,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "J",
+ "80": {
+ "visualName": "C",
"tag": 80,
"line_break": false,
"margin_left": 7.0,
@@ -1205,8 +964,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "K",
+ "81": {
+ "visualName": "V",
"tag": 81,
"line_break": false,
"margin_left": 7.0,
@@ -1220,8 +979,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "X",
+ "82": {
+ "visualName": "B",
"tag": 82,
"line_break": false,
"margin_left": 7.0,
@@ -1235,8 +994,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "B",
+ "83": {
+ "visualName": "N",
"tag": 83,
"line_break": false,
"margin_left": 7.0,
@@ -1250,7 +1009,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "84": {
"visualName": "M",
"tag": 84,
"line_break": false,
@@ -1265,8 +1024,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "W",
+ "85": {
+ "visualName": "<",
"tag": 85,
"line_break": false,
"margin_left": 7.0,
@@ -1280,8 +1039,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "V",
+ "86": {
+ "visualName": ">",
"tag": 86,
"line_break": false,
"margin_left": 7.0,
@@ -1295,8 +1054,8 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "Z",
+ "87": {
+ "visualName": "?",
"tag": 87,
"line_break": false,
"margin_left": 7.0,
@@ -1310,55 +1069,25 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "88": {
"visualName": "SHIFT",
"tag": 88,
"line_break": false,
"margin_left": 7.0,
"margin_top": 0.0,
- "width": 93.0,
+ "width": 52.5,
"height": 30.0,
"font_size": 12.0,
- "width_bits": 8,
+ "width_bits": 5,
"height_bits": 3,
"margin_left_bits": 0,
"margin_top_bits": 0,
"enabled": true
},
- {
+ "89": {
"visualName": "↑",
"tag": 89,
- "line_break": false,
- "margin_left": 52.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 4,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "1",
- "tag": 90,
- "line_break": false,
- "margin_left": 51.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 4,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "2",
- "tag": 91,
- "line_break": false,
+ "line_break": true,
"margin_left": 7.0,
"margin_top": 0.0,
"width": 30.0,
@@ -1370,13 +1099,13 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "3",
- "tag": 92,
+ "101": {
+ "visualName": "CTRL",
+ "tag": 101,
"line_break": false,
"margin_left": 7.0,
"margin_top": 0.0,
- "width": 30.0,
+ "width": 37.5,
"height": 30.0,
"font_size": 12.0,
"width_bits": 3,
@@ -1385,146 +1114,101 @@
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "ENTER",
- "tag": 93,
- "line_break": true,
- "margin_left": 7.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 67.0,
- "font_size": 9.0,
- "width_bits": 3,
- "height_bits": 6,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "CTRL",
- "tag": 94,
+ "96": {
+ "visualName": "ALT",
+ "tag": 96,
"line_break": false,
- "margin_left": 0.0,
+ "margin_left": 7.0,
"margin_top": 0.0,
- "width": 51.0,
+ "width": 37.5,
"height": 30.0,
"font_size": 12.0,
- "width_bits": 4,
+ "width_bits": 3,
"height_bits": 3,
"margin_left_bits": 0,
"margin_top_bits": 0,
"enabled": true
},
- {
+ "95": {
"visualName": "WIN",
"tag": 95,
"line_break": false,
- "margin_left": 5.0,
- "margin_top": 0.0,
- "width": 39.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 4,
- "height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "ALT",
- "tag": 96,
- "line_break": false,
- "margin_left": 5.0,
+ "margin_left": 7.0,
"margin_top": 0.0,
- "width": 42.0,
+ "width": 37.5,
"height": 30.0,
"font_size": 12.0,
- "width_bits": 4,
+ "width_bits": 3,
"height_bits": 3,
"margin_left_bits": 0,
"margin_top_bits": 0,
"enabled": true
},
- {
+ "97": {
"visualName": "SPACE",
"tag": 97,
"line_break": false,
"margin_left": 7.0,
"margin_top": 0.0,
- "width": 208.0,
+ "width": 187.5,
"height": 30.0,
"font_size": 12.0,
- "width_bits": 17,
+ "width_bits": 18,
"height_bits": 3,
"margin_left_bits": 0,
"margin_top_bits": 0,
"enabled": true
},
- {
+ "98": {
"visualName": "ALT",
"tag": 98,
"line_break": false,
- "margin_left": 5.0,
- "margin_top": 0.0,
- "width": 41.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 4,
- "height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "WIN",
- "tag": 99,
- "line_break": false,
- "margin_left": 5.0,
+ "margin_left": 7.0,
"margin_top": 0.0,
- "width": 41.0,
+ "width": 30.0,
"height": 30.0,
"font_size": 12.0,
- "width_bits": 4,
+ "width_bits": 3,
"height_bits": 3,
"margin_left_bits": 0,
"margin_top_bits": 0,
"enabled": true
},
- {
- "visualName": "APP",
- "tag": 100,
+ "99": {
+ "visualName": "FN",
+ "tag": 107,
"line_break": false,
- "margin_left": 5.0,
+ "margin_left": 7.0,
"margin_top": 0.0,
- "width": 41.0,
+ "width": 30.0,
"height": 30.0,
"font_size": 12.0,
- "width_bits": 4,
+ "width_bits": 3,
"height_bits": 3,
"margin_left_bits": 0,
"margin_top_bits": 0,
"enabled": true
},
- {
+ "101": {
"visualName": "CTRL",
"tag": 101,
"line_break": false,
- "margin_left": 5.0,
+ "margin_left": 7.0,
"margin_top": 0.0,
- "width": 48.0,
+ "width": 30.0,
"height": 30.0,
"font_size": 12.0,
- "width_bits": 4,
+ "width_bits": 3,
"height_bits": 3,
"margin_left_bits": 0,
"margin_top_bits": 0,
"enabled": true
},
- {
+ "102": {
"visualName": "←",
"tag": 102,
"line_break": false,
- "margin_left": 15.0,
+ "margin_left": 14.0,
"margin_top": 0.0,
"width": 30.0,
"height": 30.0,
@@ -1535,7 +1219,7 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "103": {
"visualName": "↓",
"tag": 103,
"line_break": false,
@@ -1550,39 +1234,9 @@
"margin_top_bits": 0,
"enabled": true
},
- {
+ "104": {
"visualName": "→",
"tag": 104,
- "line_break": false,
- "margin_left": 7.0,
- "margin_top": 0.0,
- "width": 30.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 3,
- "height_bits": 3,
- "margin_left_bits": 0,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": "0",
- "tag": 105,
- "line_break": false,
- "margin_left": 14.0,
- "margin_top": 0.0,
- "width": 67.0,
- "height": 30.0,
- "font_size": 12.0,
- "width_bits": 6,
- "height_bits": 3,
- "margin_left_bits": 1,
- "margin_top_bits": 0,
- "enabled": true
- },
- {
- "visualName": ".",
- "tag": 106,
"line_break": true,
"margin_left": 7.0,
"margin_top": 0.0,
@@ -1595,5 +1249,5 @@
"margin_top_bits": 0,
"enabled": true
}
- ]
+ }
}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/logitech_g213.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g213.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/logitech_g213.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g213.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/logitech_g410.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g410.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/logitech_g410.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g410.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/logitech_g513.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g513.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/logitech_g513.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g513.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/logitech_g810.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g810.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/logitech_g810.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g810.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/logitech_g815.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g815.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/logitech_g815.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g815.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/logitech_g910.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g910.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/logitech_g910.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g910.json
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g915.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g915.json
new file mode 100644
index 000000000..070e2a133
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_g915.json
@@ -0,0 +1,7 @@
+{
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "included_features": [
+ "logitech_g915_features.json"
+ ]
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/logitech_gpro.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_gpro.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/logitech_gpro.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/logitech_gpro.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/masterkeys_mk730.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/masterkeys_mk730.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/masterkeys_mk730.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/masterkeys_mk730.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/masterkeys_mk750.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/masterkeys_mk750.json
old mode 100755
new mode 100644
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/masterkeys_mk750.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/masterkeys_mk750.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/masterkeys_pro_l.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/masterkeys_pro_l.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/masterkeys_pro_l.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/masterkeys_pro_l.json
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/masterkeys_pro_m.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/masterkeys_pro_m.json
new file mode 100644
index 000000000..8f1bc8568
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/masterkeys_pro_m.json
@@ -0,0 +1,207 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [
+ 14,
+ 15,
+ 16,
+ 31,
+ 32,
+ 33,
+ 52,
+ 53,
+ 54,
+ 89,
+ 102,
+ 103,
+ 104
+ ],
+ "key_modifications": {
+ "34": {
+ "VisualName": null,
+ "X": 563,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "35": {
+ "VisualName": null,
+ "X": 600,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "36": {
+ "VisualName": null,
+ "X": 637,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "37": {
+ "VisualName": null,
+ "X": 674,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "55": {
+ "VisualName": null,
+ "X": 563,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "56": {
+ "VisualName": null,
+ "X": 600,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "57": {
+ "VisualName": null,
+ "X": 637,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "58": {
+ "VisualName": null,
+ "X": 674,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "73": {
+ "VisualName": null,
+ "X": 563,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "74": {
+ "VisualName": null,
+ "X": 600,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "75": {
+ "VisualName": null,
+ "X": 637,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "90": {
+ "VisualName": null,
+ "X": 563,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "91": {
+ "VisualName": null,
+ "X": 600,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "92": {
+ "VisualName": null,
+ "X": 637,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "93": {
+ "VisualName": null,
+ "X": 674,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "105": {
+ "VisualName": null,
+ "X": 563,
+ "Y": null,
+ "Width": 30,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "106": {
+ "VisualName": null,
+ "X": 637,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ }
+ },
+ "key_to_add": {
+ "169": {
+ "Key": {
+ "visual_name": "00",
+ "tag": 169,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 600,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/masterkeys_pro_s.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/masterkeys_pro_s.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/masterkeys_pro_s.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/masterkeys_pro_s.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Uniwill2P1_550_US.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/msi_gp66_us.json
similarity index 68%
rename from Project-Aurora/Project-Aurora/kb_layouts/Uniwill2P1_550_US.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/msi_gp66_us.json
index ae6e72223..1e2f122a2 100644
--- a/Project-Aurora/Project-Aurora/kb_layouts/Uniwill2P1_550_US.json
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/msi_gp66_us.json
@@ -29,77 +29,106 @@
92,
93,
99,
+ 100,
105,
106
],
"key_modifications": {
+ "1": {
+ "tag": 1,
+ "height": 15
+ },
"2": {
"tag": 2,
- "margin_left": 7.0
+ "margin_left": 9.5,
+ "height": 15
},
"3": {
"tag": 3,
- "margin_left": 7.0
+ "margin_left": 9.5,
+ "height": 15
},
"4": {
"tag": 4,
- "margin_left": 7.0
+ "margin_left": 9.5,
+ "height": 15
},
"5": {
"tag": 5,
- "margin_left": 7.0
+ "margin_left": 9.5,
+ "height": 15
},
"6": {
"tag": 6,
- "margin_left": 7.0
+ "margin_left": 9.5,
+ "height": 15
},
"7": {
"tag": 7,
- "margin_left": 7.0
+ "margin_left": 9.5,
+ "height": 15
},
"8": {
"tag": 8,
- "margin_left": 7.0
+ "margin_left": 9.5,
+ "height": 15
},
"9": {
"tag": 9,
- "margin_left": 7.0
+ "margin_left": 9.5,
+ "height": 15
},
"10": {
"tag": 10,
- "margin_left": 7.0
+ "margin_left": 9.5,
+ "height": 15
},
"11": {
"tag": 11,
- "margin_left": 7.0
+ "margin_left": 9.5,
+ "height": 15
},
"12": {
"tag": 12,
- "margin_left": 7.0
+ "margin_left": 9.5,
+ "height": 15
},
"13": {
"tag": 13,
"line_break": true,
- "margin_left": 7.0
+ "margin_left": 7.0,
+ "height": 15
+ },
+
+ "17": {
+ "visualName": "`",
+ "tag": 17,
+ "width": 15
},
"30": {
"tag": 30,
"line_break": true,
- "margin_left": 7.0
+ "margin_left": 7.0,
+ "width": 80
},
+ "38": {
+ "width": 35
+ },
+ "49": {
+ "visualName": "["
+ },
"50": {
+ "visualName": "]",
"line_break": true,
"width": 30
},
- "51": {
- "margin_left": 7,
-
- "width": 30
+ "59": {
+ "width": 48.0
},
//key ~
@@ -115,23 +144,16 @@
"line_break": true,
"margin_left": 7.0,
"margin_top": 0,
- "width": 76.0,
+ "width": 85.0,
"height": 30.0,
"font_size": 12.0
},
- //"73": {
- // "margin_left": 7
- //},
- ////number 6
- //"75": {
- // "line_break": true
- //},
//left shift
"76": {
"tag": 76,
"margin_left": 0.0,
"margin_top": 0.0,
- "width": 77.0,
+ "width": 68.0,
"height": 30.0,
"font_size": 12.0
},
@@ -146,7 +168,7 @@
"88": {
"tag": 88,
"line_break": null,
- "width": 57
+ "width": 65
},
//"↑"
@@ -158,18 +180,14 @@
"90": {
"margin_left": 7.0
},
- ////Number enter
- //"93": {
- // "line_break": true
- //},
//LeftControl
"94": {
"tag": 94,
- "width": 41
+ "width": 68
},
"95": {
"tag": 95,
- "margin_left": 44,
+ "margin_left": 7,
"width": 30
},
"96": {
@@ -186,42 +204,24 @@
"margin_left": 7,
"width": 30
},
- "100": {
- "visualName": "App",
- "tag": 100,
- "margin_left": 7,
- "width": 30
- },
//Rith control
"101": {
"tag": 101,
- "margin_left": 7,
- "width": 58
+ "margin_left": 80,
+ "width": 30
},
"102": {
"tag": 102,
"margin_left": 7.0
-
},
"104": {
"tag": 104,
"line_break": true
}
- //"105": {
- // "margin_left": 7.0,
- // "width": 30
- //},
- //"106": {
- // "line_break": true
- //}
-
-
},
"included_features": [
- "keyboard21_numpad_left_bottom_features.json",
- "keyboard21us_numpad_right_features.json"
-
+ "msi_gp66_features.json"
]
}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/omen_four_zone.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/omen_four_zone.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/omen_four_zone.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/omen_four_zone.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/omen_sequencer.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/omen_sequencer.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/omen_sequencer.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/omen_sequencer.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/razer_blackwidow.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/razer_blackwidow.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/razer_blackwidow.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/razer_blackwidow.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/razer_blackwidow_te.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/razer_blackwidow_te.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/razer_blackwidow_te.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/razer_blackwidow_te.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/razer_blackwidow_x.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/razer_blackwidow_x.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/razer_blackwidow_x.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/razer_blackwidow_x.json
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/razer_blade.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/razer_blade.json
new file mode 100644
index 000000000..4adb42d18
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/razer_blade.json
@@ -0,0 +1,315 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [
+ 16,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 73,
+ 74,
+ 75,
+ 90,
+ 91,
+ 92,
+ 93,
+ 99,
+ 100,
+ 105,
+ 106
+ ],
+ "key_modifications": {
+ "2": {
+ "VisualName": null,
+ "X": 37,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "3": {
+ "VisualName": null,
+ "X": 74,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "4": {
+ "VisualName": null,
+ "X": 111,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "5": {
+ "VisualName": null,
+ "X": 148,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "6": {
+ "VisualName": null,
+ "X": 185,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "7": {
+ "VisualName": null,
+ "X": 222,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "8": {
+ "VisualName": null,
+ "X": 259,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "9": {
+ "VisualName": null,
+ "X": 296,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "10": {
+ "VisualName": null,
+ "X": 333,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "11": {
+ "VisualName": null,
+ "X": 370,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "12": {
+ "VisualName": null,
+ "X": 407,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "13": {
+ "VisualName": null,
+ "X": 444,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "14": {
+ "VisualName": null,
+ "X": 481,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "15": {
+ "VisualName": null,
+ "X": 518,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "51": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": null,
+ "Height": null,
+ "Image": null,
+ "FontSize": 9.0,
+ "Enabled": null
+ },
+ "89": {
+ "VisualName": null,
+ "X": 486,
+ "Y": 185,
+ "Width": null,
+ "Height": -17,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "94": {
+ "VisualName": null,
+ "X": null,
+ "Y": null,
+ "Width": -10,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "95": {
+ "VisualName": null,
+ "X": 85,
+ "Y": null,
+ "Width": -9,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "96": {
+ "VisualName": null,
+ "X": 122,
+ "Y": null,
+ "Width": -12,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "97": {
+ "VisualName": null,
+ "X": 159,
+ "Y": null,
+ "Width": -30,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "98": {
+ "VisualName": null,
+ "X": 344,
+ "Y": null,
+ "Width": -11,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "101": {
+ "VisualName": null,
+ "X": 418,
+ "Y": null,
+ "Width": -18,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "102": {
+ "VisualName": null,
+ "X": 455,
+ "Y": null,
+ "Width": -6,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "103": {
+ "VisualName": null,
+ "X": 486,
+ "Y": 202,
+ "Width": null,
+ "Height": -17,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ },
+ "104": {
+ "VisualName": null,
+ "X": 523,
+ "Y": null,
+ "Width": -6,
+ "Height": null,
+ "Image": null,
+ "FontSize": null,
+ "Enabled": null
+ }
+ },
+ "key_to_add": {
+ "107": {
+ "Key": {
+ "visual_name": "FN",
+ "tag": 107,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 381,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ },
+ "171": {
+ "Key": {
+ "visual_name": "FN",
+ "tag": 171,
+ "device_id": null
+ },
+ "FontSize": 9.0,
+ "Enabled": true,
+ "X": 48,
+ "Y": 185,
+ "Width": 30,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/roccat_ryos.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/roccat_ryos.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/roccat_ryos.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/roccat_ryos.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/masterkeys_pro_m.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/roccat_vulcan_tkl.json
old mode 100755
new mode 100644
similarity index 66%
rename from Project-Aurora/Project-Aurora/kb_layouts/masterkeys_pro_m.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/roccat_vulcan_tkl.json
index 575469c7f..f21b686a6
--- a/Project-Aurora/Project-Aurora/kb_layouts/masterkeys_pro_m.json
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/roccat_vulcan_tkl.json
@@ -1,47 +1,34 @@
{
"keys_to_remove": [
- 14,
15,
16,
- 31,
- 32,
- 33,
- 52,
- 53,
- 54,
- 89,
- 102,
- 103,
- 104
+ 34,
+ 35,
+ 36,
+ 37,
+ 55,
+ 56,
+ 57,
+ 58,
+ 73,
+ 74,
+ 75,
+ 90,
+ 91,
+ 92,
+ 93,
+ 105,
+ 106
],
- "key_conversion": {
- 14: 35,
- 15: 36,
- 16: 37,
-
-
- 31: 55,
- 32: 56,
- 33: 57,
-
- 52: 73,
- 53: 74,
- 54: 75,
-
- 89: 91,
- 102: 105,
- 103: 169,
- 104: 106
- },
"key_modifications": {
- "13": {
- "visualName": null,
- "tag": 13,
+ "14": {
+ "visualName": "MUTE",
+ "tag": 139,
"line_break": true,
- "margin_left": null,
- "margin_top": null,
- "width": null,
- "height": null,
+ "margin_left": 16,
+ "margin_top": 8,
+ "width": 26,
+ "height": 14,
"font_size": null,
"width_bits": null,
"height_bits": null,
@@ -49,9 +36,9 @@
"margin_top_bits": null,
"enabled": null
},
- "37": {
+ "33": {
"visualName": null,
- "tag": 37,
+ "tag": 33,
"line_break": true,
"margin_left": null,
"margin_top": null,
@@ -64,9 +51,9 @@
"margin_top_bits": null,
"enabled": null
},
- "58": {
+ "54": {
"visualName": null,
- "tag": 58,
+ "tag": 54,
"line_break": true,
"margin_left": null,
"margin_top": null,
@@ -79,24 +66,9 @@
"margin_top_bits": null,
"enabled": null
},
- "73": {
- "visualName": null,
- "tag": 73,
- "line_break": null,
- "margin_left": 15,
- "margin_top": null,
- "width": null,
- "height": null,
- "font_size": null,
- "width_bits": null,
- "height_bits": null,
- "margin_left_bits": 1,
- "margin_top_bits": null,
- "enabled": null
- },
- "75": {
+ "72": {
"visualName": null,
- "tag": 75,
+ "tag": 72,
"line_break": true,
"margin_left": null,
"margin_top": null,
@@ -109,24 +81,24 @@
"margin_top_bits": null,
"enabled": null
},
- "90": {
+ "89": {
"visualName": null,
- "tag": 90,
- "line_break": null,
- "margin_left": 15,
+ "tag": 89,
+ "line_break": true,
+ "margin_left": null,
"margin_top": null,
"width": null,
"height": null,
"font_size": null,
"width_bits": null,
"height_bits": null,
- "margin_left_bits": 1,
+ "margin_left_bits": null,
"margin_top_bits": null,
"enabled": null
},
- "93": {
+ "104": {
"visualName": null,
- "tag": 93,
+ "tag": 104,
"line_break": true,
"margin_left": null,
"margin_top": null,
@@ -139,13 +111,13 @@
"margin_top_bits": null,
"enabled": null
},
- "105": {
- "visualName": null,
- "tag": 105,
+ "99": {
+ "visualName": "FN",
+ "tag": 107,
"line_break": null,
"margin_left": null,
"margin_top": null,
- "width": 30.0,
+ "width": null,
"height": null,
"font_size": null,
"width_bits": null,
@@ -154,11 +126,11 @@
"margin_top_bits": null,
"enabled": null
},
- "106": {
- "visualName": null,
- "tag": 106,
+ "97": {
+ "visualName": "SPACE",
+ "tag": 97,
"line_break": null,
- "margin_left": 44.0,
+ "margin_left": null,
"margin_top": null,
"width": null,
"height": null,
@@ -167,10 +139,10 @@
"height_bits": null,
"margin_left_bits": null,
"margin_top_bits": null,
- "enabled": null
+ "enabled": true
}
},
"included_features": [
- "masterkeys_pro_m_features.json"
+ "roccat_vulcan_tkl_features.json"
]
}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/soundblasterx_vanguardk08.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/soundblasterx_vanguardk08.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/soundblasterx_vanguardk08.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/soundblasterx_vanguardk08.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/steelseries_apex_m750.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/steelseries_apex_m750.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/steelseries_apex_m750.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/steelseries_apex_m750.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/steelseries_apex_m750_tkl.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/steelseries_apex_m750_tkl.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/steelseries_apex_m750_tkl.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/steelseries_apex_m750_tkl.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/steelseries_apex_m800.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/steelseries_apex_m800.json
similarity index 89%
rename from Project-Aurora/Project-Aurora/kb_layouts/steelseries_apex_m800.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/steelseries_apex_m800.json
index 08c84f7f8..49557166e 100644
--- a/Project-Aurora/Project-Aurora/kb_layouts/steelseries_apex_m800.json
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/steelseries_apex_m800.json
@@ -33,7 +33,7 @@
}
},
"included_features": [
- "steelseries_apex_m800_left_features.json",
- "steelseries_apex_m800_right_features.json"
+ "steelseries_apex_m800_right_features.json",
+ "steelseries_apex_m800_left_features.json"
]
}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/wooting_one.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/wooting_one.json
old mode 100755
new mode 100644
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/wooting_one.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/wooting_one.json
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/wooting_two.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/wooting_two.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/wooting_two.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Keyboard/wooting_two.json
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Asus - Pugio.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Asus - Pugio.json
new file mode 100644
index 000000000..9526bbcac
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Asus - Pugio.json
@@ -0,0 +1,67 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "-1": {
+ "Key": {
+ "visual_name": "NONE",
+ "tag": -1,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 128,
+ "Height": 232,
+ "Image": "Asus_Pugio_body.png",
+ "IsImage": true
+ },
+ "161": {
+ "Key": {
+ "visual_name": "Scroll Wheel",
+ "tag": 161,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 56,
+ "Y": 22,
+ "Width": 14,
+ "Height": 41,
+ "Image": "Asus_Pugio_wheel.png",
+ "IsImage": true
+ },
+ "162": {
+ "Key": {
+ "visual_name": "Bottom Light",
+ "tag": 162,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": -1,
+ "Y": 130,
+ "Width": 128,
+ "Height": 103,
+ "Image": "Asus_Pugio_backlights.png",
+ "IsImage": true
+ },
+ "160": {
+ "Key": {
+ "visual_name": "Logo",
+ "tag": 160,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 41,
+ "Y": 187,
+ "Width": 46,
+ "Height": 24,
+ "Image": "Asus_Pugio_logo.png",
+ "IsImage": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Clevo - Touchpad.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Clevo - Touchpad.json
new file mode 100644
index 000000000..402cfebd1
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Clevo - Touchpad.json
@@ -0,0 +1,22 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "0": {
+ "Key": {
+ "visual_name": "TOUCHPAD",
+ "tag": 0,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 208,
+ "Height": 30,
+ "Image": "",
+ "IsImage": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Corsair - Katar.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Corsair - Katar.json
new file mode 100644
index 000000000..8c99e3f12
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Corsair - Katar.json
@@ -0,0 +1,37 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "-1": {
+ "Key": {
+ "visual_name": "NONE",
+ "tag": -1,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 153,
+ "Height": 232,
+ "Image": "Corsair_Katar_outline.png",
+ "IsImage": true
+ },
+ "160": {
+ "Key": {
+ "visual_name": "Logo",
+ "tag": 160,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 58,
+ "Y": 187,
+ "Width": 35,
+ "Height": 22,
+ "Image": "Corsair_Katar_logo.png",
+ "IsImage": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Corsair - M65.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Corsair - M65.json
new file mode 100644
index 000000000..ae34fa393
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Corsair - M65.json
@@ -0,0 +1,52 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "-1": {
+ "Key": {
+ "visual_name": "NONE",
+ "tag": -1,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 158,
+ "Height": 232,
+ "Image": "Corsair_M65_outline.png",
+ "IsImage": true
+ },
+ "160": {
+ "Key": {
+ "visual_name": "Logo",
+ "tag": 160,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 70,
+ "Y": 156,
+ "Width": 27,
+ "Height": 27,
+ "Image": "Corsair_M65_logo.png",
+ "IsImage": true
+ },
+ "161": {
+ "Key": {
+ "visual_name": "Scroll Wheel",
+ "tag": 161,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 74,
+ "Y": 10,
+ "Width": 21,
+ "Height": 60,
+ "Image": "Corsair_M65_scrollwheel.png",
+ "IsImage": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_sabre_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Corsair - Sabre.json
similarity index 100%
rename from Project-Aurora/Project-Aurora/kb_layouts/Extra Features/corsair_sabre_features.json
rename to Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Corsair - Sabre.json
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Generic Peripheral.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Generic Peripheral.json
new file mode 100644
index 000000000..63470335b
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Generic Peripheral.json
@@ -0,0 +1,37 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "-1": {
+ "Key": {
+ "visual_name": "NONE",
+ "tag": -1,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 90,
+ "Height": 90,
+ "Image": "",
+ "IsImage": false
+ },
+ "0": {
+ "Key": {
+ "visual_name": "Mouse/\r\nHeadset",
+ "tag": 0,
+ "device_id": null
+ },
+ "FontSize": 12.0,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 90,
+ "Height": 90,
+ "Image": "",
+ "IsImage": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Logitech - G502.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Logitech - G502.json
new file mode 100644
index 000000000..4a7fdc53d
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Logitech - G502.json
@@ -0,0 +1,37 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "-1": {
+ "Key": {
+ "visual_name": "NONE",
+ "tag": -1,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 143,
+ "Height": 232,
+ "Image": "Logi_G502_outline.png",
+ "IsImage": true
+ },
+ "160": {
+ "Key": {
+ "visual_name": "Logo",
+ "tag": 160,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 30,
+ "Y": 107,
+ "Width": 45,
+ "Height": 65,
+ "Image": "Logi_G502_logo.png",
+ "IsImage": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Logitech - G900.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Logitech - G900.json
new file mode 100644
index 000000000..a40cf792a
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Logitech - G900.json
@@ -0,0 +1,37 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "-1": {
+ "Key": {
+ "visual_name": "NONE",
+ "tag": -1,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 123,
+ "Height": 232,
+ "Image": "Logi_G900_outline.png",
+ "IsImage": true
+ },
+ "160": {
+ "Key": {
+ "visual_name": "Logo",
+ "tag": 160,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 50,
+ "Y": 163,
+ "Width": 22,
+ "Height": 24,
+ "Image": "Logi_G900_logo.png",
+ "IsImage": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Razer - Mamba TE.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Razer - Mamba TE.json
new file mode 100644
index 000000000..060b347b1
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Razer - Mamba TE.json
@@ -0,0 +1,229 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "-1": {
+ "Key": {
+ "tag": -1,
+ "visual_name": "NONE"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 130,
+ "Height": 232,
+ "Image": "Razer_Mamba_TE_outline.png"
+ },
+ "161": {
+ "Key": {
+ "tag": 161,
+ "visual_name": "Scroll Wheel"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 54,
+ "Y": 28,
+ "Width": 16,
+ "Height": 38,
+ "Image": "Razer_Mamba_TE_Scroll_Wheel.png"
+ },
+ "160": {
+ "Key": {
+ "tag": 160,
+ "visual_name": "Peripheral Logo"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 41,
+ "Y": 162,
+ "Width": 38,
+ "Height": 39,
+ "Image": "Razer_Mamba_TE_Logo.png"
+ },
+ "217": {
+ "Key": {
+ "tag": 217,
+ "visual_name": "Left Side 1"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 3,
+ "Y": 46,
+ "Width": 6,
+ "Height": 22,
+ "Image": "Razer_Mamba_TE_L1.png"
+ },
+ "229": {
+ "Key": {
+ "tag": 229,
+ "visual_name": "Right Side 1"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 117,
+ "Y": 48,
+ "Width": 6,
+ "Height": 20,
+ "Image": "Razer_Mamba_TE_R1.png"
+ },
+ "218": {
+ "Key": {
+ "tag": 218,
+ "visual_name": "Left Side 2"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 4,
+ "Y": 67,
+ "Width": 10,
+ "Height": 24,
+ "Image": "Razer_Mamba_TE_L2.png"
+ },
+ "230": {
+ "Key": {
+ "tag": 230,
+ "visual_name": "Right Side 2"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 113,
+ "Y": 67,
+ "Width": 7,
+ "Height": 24,
+ "Image": "Razer_Mamba_TE_R2.png"
+ },
+ "219": {
+ "Key": {
+ "tag": 219,
+ "visual_name": "Left Side 3"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 10,
+ "Y": 90,
+ "Width": 8,
+ "Height": 23,
+ "Image": "Razer_Mamba_TE_L3.png"
+ },
+ "231": {
+ "Key": {
+ "tag": 231,
+ "visual_name": "Right Side 3"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 112,
+ "Y": 90,
+ "Width": 6,
+ "Height": 23,
+ "Image": "Razer_Mamba_TE_R3.png"
+ },
+ "220": {
+ "Key": {
+ "tag": 220,
+ "visual_name": "Left Side 4"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 13,
+ "Y": 113,
+ "Width": 6,
+ "Height": 24,
+ "Image": "Razer_Mamba_TE_L4.png"
+ },
+ "232": {
+ "Key": {
+ "tag": 232,
+ "visual_name": "Right Side 4"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 112,
+ "Y": 113,
+ "Width": 6,
+ "Height": 24,
+ "Image": "Razer_Mamba_TE_R4.png"
+ },
+ "221": {
+ "Key": {
+ "tag": 221,
+ "visual_name": "Left Side 5"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 10,
+ "Y": 137,
+ "Width": 8,
+ "Height": 23,
+ "Image": "Razer_Mamba_TE_L5.png"
+ },
+ "233": {
+ "Key": {
+ "tag": 233,
+ "visual_name": "Right Side 5"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 113,
+ "Y": 137,
+ "Width": 7,
+ "Height": 23,
+ "Image": "Razer_Mamba_TE_R5.png"
+ },
+ "222": {
+ "Key": {
+ "tag": 222,
+ "visual_name": "Left Side 6"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 7,
+ "Y": 159,
+ "Width": 7,
+ "Height": 23,
+ "Image": "Razer_Mamba_TE_L6.png"
+ },
+ "234": {
+ "Key": {
+ "tag": 234,
+ "visual_name": "Right Side 6"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 114,
+ "Y": 159,
+ "Width": 6,
+ "Height": 23,
+ "Image": "Razer_Mamba_TE_R6.png"
+ },
+ "223": {
+ "Key": {
+ "tag": 223,
+ "visual_name": "Left Side 7"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 7,
+ "Y": 181,
+ "Width": 9,
+ "Height": 24,
+ "Image": "Razer_Mamba_TE_L7.png"
+ },
+ "235": {
+ "Key": {
+ "tag": 235,
+ "visual_name": "Right Side 7"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 108,
+ "Y": 180,
+ "Width": 10,
+ "Height": 23,
+ "Image": "Razer_Mamba_TE_R7.png"
+ }
+ },
+ "jis_key_modifications": {}
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/RazerICorsair Mousepad + Mouse.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/RazerICorsair Mousepad + Mouse.json
new file mode 100644
index 000000000..b3dc78318
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/RazerICorsair Mousepad + Mouse.json
@@ -0,0 +1,262 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "-1": {
+ "Key": {
+ "visual_name": "NONE",
+ "tag": -1,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 10,
+ "Y": 0,
+ "Width": 200,
+ "Height": 168,
+ "Image": "",
+ "IsImage": false
+ },
+ "160": {
+ "Key": {
+ "visual_name": "Mouse Logo",
+ "tag": 160,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 90,
+ "Y": 60,
+ "Width": 50,
+ "Height": 50,
+ "Image": "",
+ "IsImage": false
+ },
+ "201": {
+ "Key": {
+ "visual_name": "",
+ "tag": 201,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 10,
+ "Height": 33,
+ "Image": "",
+ "IsImage": false
+ },
+ "202": {
+ "Key": {
+ "visual_name": "",
+ "tag": 202,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 34,
+ "Width": 10,
+ "Height": 33,
+ "Image": "",
+ "IsImage": false
+ },
+ "203": {
+ "Key": {
+ "visual_name": "",
+ "tag": 203,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 68,
+ "Width": 10,
+ "Height": 33,
+ "Image": "",
+ "IsImage": false
+ },
+ "204": {
+ "Key": {
+ "visual_name": "",
+ "tag": 204,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 101,
+ "Width": 10,
+ "Height": 33,
+ "Image": "",
+ "IsImage": false
+ },
+ "205": {
+ "Key": {
+ "visual_name": "",
+ "tag": 205,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 135,
+ "Width": 10,
+ "Height": 33,
+ "Image": "",
+ "IsImage": false
+ },
+ "206": {
+ "Key": {
+ "visual_name": "",
+ "tag": 206,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 10,
+ "Y": 168,
+ "Width": 40,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "207": {
+ "Key": {
+ "visual_name": "",
+ "tag": 207,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 50,
+ "Y": 168,
+ "Width": 40,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "208": {
+ "Key": {
+ "visual_name": "",
+ "tag": 208,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 90,
+ "Y": 168,
+ "Width": 40,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "209": {
+ "Key": {
+ "visual_name": "",
+ "tag": 209,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 130,
+ "Y": 168,
+ "Width": 40,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "210": {
+ "Key": {
+ "visual_name": "",
+ "tag": 210,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 170,
+ "Y": 168,
+ "Width": 40,
+ "Height": 10,
+ "Image": "",
+ "IsImage": false
+ },
+ "211": {
+ "Key": {
+ "visual_name": "",
+ "tag": 211,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 210,
+ "Y": 135,
+ "Width": 10,
+ "Height": 33,
+ "Image": "",
+ "IsImage": false
+ },
+ "212": {
+ "Key": {
+ "visual_name": "",
+ "tag": 212,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 210,
+ "Y": 101,
+ "Width": 10,
+ "Height": 33,
+ "Image": "",
+ "IsImage": false
+ },
+ "213": {
+ "Key": {
+ "visual_name": "",
+ "tag": 213,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 210,
+ "Y": 68,
+ "Width": 10,
+ "Height": 33,
+ "Image": "",
+ "IsImage": false
+ },
+ "214": {
+ "Key": {
+ "visual_name": "",
+ "tag": 214,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 210,
+ "Y": 34,
+ "Width": 10,
+ "Height": 33,
+ "Image": "",
+ "IsImage": false
+ },
+ "215": {
+ "Key": {
+ "visual_name": "",
+ "tag": 215,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 210,
+ "Y": 0,
+ "Width": 10,
+ "Height": 33,
+ "Image": "",
+ "IsImage": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Roccat - Kone Pure.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Roccat - Kone Pure.json
new file mode 100644
index 000000000..a6269a41c
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Roccat - Kone Pure.json
@@ -0,0 +1,34 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "-1": {
+ "Key": {
+ "tag": -1,
+ "visual_name": "NONE"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 153,
+ "Height": 232,
+ "Image": "Roccat_Kone_Pure_outline.png"
+ },
+ "160": {
+ "Key": {
+ "tag": 160,
+ "visual_name": "Logo"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 54,
+ "Y": 166,
+ "Width": 66,
+ "Height": 59,
+ "Image": "Roccat_Kone_Pure_logo.png"
+ }
+ },
+ "jis_key_modifications": {}
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/SteelSeries - QcK Prism Mousepad + Mouse.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/SteelSeries - QcK Prism Mousepad + Mouse.json
new file mode 100644
index 000000000..fe3db83c4
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/SteelSeries - QcK Prism Mousepad + Mouse.json
@@ -0,0 +1,232 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "-1": {
+ "Key": {
+ "visual_name": "NONE",
+ "tag": -1,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 200,
+ "Height": 168,
+ "Image": "",
+ "IsImage": false
+ },
+ "160": {
+ "Key": {
+ "visual_name": "Mouse Logo",
+ "tag": 160,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 75,
+ "Y": 89,
+ "Width": 50,
+ "Height": 50,
+ "Image": "",
+ "IsImage": false
+ },
+ "161": {
+ "Key": {
+ "visual_name": "Scroll Wheel",
+ "tag": 161,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 75,
+ "Y": 29,
+ "Width": 50,
+ "Height": 50,
+ "Image": "",
+ "IsImage": false
+ },
+ "201": {
+ "Key": {
+ "visual_name": "",
+ "tag": 201,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 56,
+ "Width": 16,
+ "Height": 56,
+ "Image": "",
+ "IsImage": false
+ },
+ "202": {
+ "Key": {
+ "visual_name": "",
+ "tag": 202,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 112,
+ "Width": 16,
+ "Height": 56,
+ "Image": "",
+ "IsImage": false
+ },
+ "203": {
+ "Key": {
+ "visual_name": "",
+ "tag": 203,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 16,
+ "Y": 152,
+ "Width": 56,
+ "Height": 16,
+ "Image": "",
+ "IsImage": false
+ },
+ "204": {
+ "Key": {
+ "visual_name": "",
+ "tag": 204,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 72,
+ "Y": 152,
+ "Width": 56,
+ "Height": 16,
+ "Image": "",
+ "IsImage": false
+ },
+ "205": {
+ "Key": {
+ "visual_name": "",
+ "tag": 205,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 127,
+ "Y": 152,
+ "Width": 56,
+ "Height": 16,
+ "Image": "",
+ "IsImage": false
+ },
+ "206": {
+ "Key": {
+ "visual_name": "",
+ "tag": 206,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 185,
+ "Y": 112,
+ "Width": 16,
+ "Height": 56,
+ "Image": "",
+ "IsImage": false
+ },
+ "207": {
+ "Key": {
+ "visual_name": "",
+ "tag": 207,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 185,
+ "Y": 56,
+ "Width": 16,
+ "Height": 56,
+ "Image": "",
+ "IsImage": false
+ },
+ "208": {
+ "Key": {
+ "visual_name": "",
+ "tag": 208,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 185,
+ "Y": 0,
+ "Width": 16,
+ "Height": 56,
+ "Image": "",
+ "IsImage": false
+ },
+ "209": {
+ "Key": {
+ "visual_name": "",
+ "tag": 209,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 127,
+ "Y": 0,
+ "Width": 56,
+ "Height": 16,
+ "Image": "",
+ "IsImage": false
+ },
+ "210": {
+ "Key": {
+ "visual_name": "",
+ "tag": 210,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 72,
+ "Y": 0,
+ "Width": 56,
+ "Height": 16,
+ "Image": "",
+ "IsImage": false
+ },
+ "211": {
+ "Key": {
+ "visual_name": "",
+ "tag": 211,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 16,
+ "Y": 0,
+ "Width": 56,
+ "Height": 16,
+ "Image": "",
+ "IsImage": false
+ },
+ "212": {
+ "Key": {
+ "visual_name": "",
+ "tag": 212,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 16,
+ "Height": 56,
+ "Image": "",
+ "IsImage": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/SteelSeries - Rival 300 HP OMEN Edition.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/SteelSeries - Rival 300 HP OMEN Edition.json
new file mode 100644
index 000000000..f59266f61
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/SteelSeries - Rival 300 HP OMEN Edition.json
@@ -0,0 +1,52 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "-1": {
+ "Key": {
+ "visual_name": "NONE",
+ "tag": -1,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 128,
+ "Height": 232,
+ "Image": "SteelSeries_Rival_300_outline.png",
+ "IsImage": true
+ },
+ "160": {
+ "Key": {
+ "visual_name": "Logo",
+ "tag": 160,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 41,
+ "Y": 177,
+ "Width": 40,
+ "Height": 40,
+ "Image": "Omen_logo.png",
+ "IsImage": true
+ },
+ "161": {
+ "Key": {
+ "visual_name": "Scroll Wheel",
+ "tag": 161,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 53,
+ "Y": 43,
+ "Width": 16,
+ "Height": 31,
+ "Image": "SteelSeries_Rival_300_scrollwheel.png",
+ "IsImage": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/SteelSeries - Rival 300.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/SteelSeries - Rival 300.json
new file mode 100644
index 000000000..853945e2f
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/SteelSeries - Rival 300.json
@@ -0,0 +1,52 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "-1": {
+ "Key": {
+ "visual_name": "NONE",
+ "tag": -1,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 128,
+ "Height": 232,
+ "Image": "SteelSeries_Rival_300_outline.png",
+ "IsImage": true
+ },
+ "160": {
+ "Key": {
+ "visual_name": "Logo",
+ "tag": 160,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 41,
+ "Y": 177,
+ "Width": 40,
+ "Height": 40,
+ "Image": "SteelSeries_Rival_300_logo.png",
+ "IsImage": true
+ },
+ "161": {
+ "Key": {
+ "visual_name": "Scroll Wheel",
+ "tag": 161,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 53,
+ "Y": 43,
+ "Width": 16,
+ "Height": 31,
+ "Image": "SteelSeries_Rival_300_scrollwheel.png",
+ "IsImage": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/SteelSeries - Two-zone QcK Mousepad + Mouse.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/SteelSeries - Two-zone QcK Mousepad + Mouse.json
new file mode 100644
index 000000000..086463bb9
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/SteelSeries - Two-zone QcK Mousepad + Mouse.json
@@ -0,0 +1,82 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "-1": {
+ "Key": {
+ "visual_name": "NONE",
+ "tag": -1,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 200,
+ "Height": 168,
+ "Image": "",
+ "IsImage": false
+ },
+ "160": {
+ "Key": {
+ "visual_name": "Mouse Logo",
+ "tag": 160,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 75,
+ "Y": 89,
+ "Width": 50,
+ "Height": 50,
+ "Image": "",
+ "IsImage": false
+ },
+ "161": {
+ "Key": {
+ "visual_name": "Scroll Wheel",
+ "tag": 161,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 75,
+ "Y": 29,
+ "Width": 50,
+ "Height": 50,
+ "Image": "",
+ "IsImage": false
+ },
+ "201": {
+ "Key": {
+ "visual_name": "",
+ "tag": 201,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 16,
+ "Height": 168,
+ "Image": "",
+ "IsImage": false
+ },
+ "202": {
+ "Key": {
+ "visual_name": "",
+ "tag": 202,
+ "device_id": null
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 185,
+ "Y": 0,
+ "Width": 16,
+ "Height": 168,
+ "Image": "",
+ "IsImage": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Steelseries - Rival 650.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Steelseries - Rival 650.json
new file mode 100644
index 000000000..4e21ef589
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/Steelseries - Rival 650.json
@@ -0,0 +1,125 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "-1": {
+ "Key": {
+ "tag": -1,
+ "visual_name": "NONE"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 1,
+ "Y": 0,
+ "Width": 122,
+ "Height": 232,
+ "Image": "SteelSeries_Rival_650_outline.png"
+ },
+ "1": {
+ "Key": {
+ "tag": 1,
+ "visual_name": "NONE"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 52,
+ "Y": 36,
+ "Width": 14,
+ "Height": 36,
+ "Image": "SteelSeries_Rival_650_wheel.png"
+ },
+ "0": {
+ "Key": {
+ "tag": 0,
+ "visual_name": "Logo"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 30,
+ "Y": 170,
+ "Width": 45,
+ "Height": 45,
+ "Image": "SteelSeries_Rival_300_logo.png"
+ },
+ "2": {
+ "Key": {
+ "tag": 2,
+ "visual_name": "L1"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 31,
+ "Y": 103,
+ "Width": 12,
+ "Height": 37,
+ "Image": "SteelSeries_Rival_650_L1.png"
+ },
+ "3": {
+ "Key": {
+ "tag": 3,
+ "visual_name": "L2"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 20,
+ "Y": 138,
+ "Width": 17,
+ "Height": 14,
+ "Image": "SteelSeries_Rival_650_L2.png"
+ },
+ "4": {
+ "Key": {
+ "tag": 4,
+ "visual_name": "L3"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 8,
+ "Y": 151,
+ "Width": 13,
+ "Height": 14,
+ "Image": "SteelSeries_Rival_650_L3.png"
+ },
+ "5": {
+ "Key": {
+ "tag": 5,
+ "visual_name": "R1"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 76,
+ "Y": 103,
+ "Width": 13,
+ "Height": 37,
+ "Image": "SteelSeries_Rival_650_R1.png"
+ },
+ "6": {
+ "Key": {
+ "tag": 6,
+ "visual_name": "R2"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 85,
+ "Y": 139,
+ "Width": 17,
+ "Height": 14,
+ "Image": "SteelSeries_Rival_650_R2.png"
+ },
+ "7": {
+ "Key": {
+ "tag": 7,
+ "visual_name": "R3"
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 98,
+ "Y": 152,
+ "Width": 14,
+ "Height": 14,
+ "Image": "SteelSeries_Rival_650_R3.png"
+ }
+ },
+ "jis_key_modifications": {}
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/bloody_w60_features.json b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/bloody_w60_features.json
new file mode 100644
index 000000000..6e97f914b
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/Mouse/bloody_w60_features.json
@@ -0,0 +1,153 @@
+{
+ "group_tag": "mouse",
+ "origin_region": 4,
+ "grouped_keys": [
+ {
+ "tag": -1,
+ "margin_left": 0.0,
+ "margin_top": -232.0,
+ "width": 150.0,
+ "height": 210.0,
+ "margin_left_bits": 1,
+ "margin_top_bits": -19,
+ "width_bits": 13,
+ "height_bits": 19,
+ "image": "Bloody_W60_outline.png",
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "Scroll Wheel",
+ "tag": 161,
+ "margin_left": 79.0,
+ "margin_top": -204.0,
+ "width": 8.0,
+ "height": 20.0,
+ "image": "bloody_w60_Scroll_Led.png",
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "Peripheral Logo",
+ "tag": 160,
+ "margin_left": 61.0,
+ "margin_top": -85.0,
+ "width": 38.0,
+ "height": 39.0,
+ "image": "Bloody_Logo.png",
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "Left Side 1",
+ "tag": 217,
+ "margin_left": 19.0,
+ "margin_top": -146.0,
+ "width": 15.0,
+ "height": 40.0,
+ "image": "bloody_w60_ls_1.png",
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "Left Side 2",
+ "tag": 218,
+ "margin_left": 28.0,
+ "margin_top": -117.0,
+ "width": 10.0,
+ "height": 30.0,
+ "image": "bloody_w60_ls_2.png",
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "Left Side 3",
+ "tag": 219,
+ "margin_left": 37.0,
+ "margin_top": -114.0,
+ "width": 8.0,
+ "height": 23.0,
+ "margin_left_bits": 1,
+ "image": "bloody_w60_ls_3.png",
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "Mid 1",
+ "tag": 220,
+ "margin_left": 46.0,
+ "margin_top": -118.0,
+ "width": 40.0,
+ "height": 16.0,
+ "image": "bloody_w60_ms_1.png",
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "Mid 2",
+ "tag": 221,
+ "margin_left": 65.0,
+ "margin_top": -128.0,
+ "width": 50.0,
+ "height": 12.0,
+ "image": "bloody_w60_ms_2.png",
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "Mid 3",
+ "tag": 222,
+ "margin_left": 96.0,
+ "margin_top": -139.0,
+ "width": 40.0,
+ "height": 14.0,
+ "image": "bloody_w60_ms_3.png",
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "Bottom 1",
+ "tag": 223,
+ "margin_left": 7.0,
+ "margin_top": -80.0,
+ "width": 38.0,
+ "height": 50.0,
+ "image": "bloody_w60_bl_1.png",
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "Bottom 2",
+ "tag": 229,
+ "margin_left": 38.0,
+ "margin_top": -37.0,
+ "width": 36.0,
+ "height": 18.0,
+ "image": "bloody_w60_bl_2.png",
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "Bottom 3",
+ "tag": 230,
+ "margin_left": 70.0,
+ "margin_top": -38.0,
+ "width": 36.0,
+ "height": 19.0,
+ "image": "bloody_w60_bl_3.png",
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "Bottom 4",
+ "tag": 231,
+ "margin_left": 106.0,
+ "margin_top": -86.0,
+ "width": 22.0,
+ "height": 58.0,
+ "image": "bloody_w60_bl_4.png",
+ "enabled": true,
+ "absolute_location": true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/OtherDevices/Ram.json b/Project-Aurora/Project-Aurora/DeviceLayouts/OtherDevices/Ram.json
new file mode 100644
index 000000000..f8cfa8cf0
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/OtherDevices/Ram.json
@@ -0,0 +1,68 @@
+{
+ "IsNewFormat": true,
+ "keys_to_remove": [],
+ "key_modifications": {},
+ "key_to_add": {
+ "0": {
+ "Key": {
+ "tag": 0,
+ "visual_name": "."
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 0,
+ "Width": 30,
+ "Height": 30
+ },
+ "1": {
+ "Key": {
+ "tag": 1,
+ "visual_name": "."
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 37,
+ "Width": 30,
+ "Height": 30
+ },
+ "2": {
+ "Key": {
+ "tag": 2,
+ "visual_name": "."
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 74,
+ "Width": 30,
+ "Height": 30
+ },
+ "3": {
+ "Key": {
+ "tag": 3,
+ "visual_name": "."
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 111,
+ "Width": 30,
+ "Height": 30
+ },
+ "4": {
+ "Key": {
+ "tag": 4,
+ "visual_name": "."
+ },
+ "FontSize": null,
+ "Enabled": true,
+ "X": 0,
+ "Y": 148,
+ "Width": 30,
+ "Height": 30
+ }
+ },
+ "jis_key_modifications": {}
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/OtherDevices/bloody_mp-50rs.json b/Project-Aurora/Project-Aurora/DeviceLayouts/OtherDevices/bloody_mp-50rs.json
new file mode 100644
index 000000000..c14cd4813
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/OtherDevices/bloody_mp-50rs.json
@@ -0,0 +1,169 @@
+{
+ "group_tag": "mousepad",
+ "origin_region": 4,
+ "grouped_keys": [
+ {
+ "visualName": "1",
+ "tag": 201,
+ "margin_left": 126,
+ "margin_top": -48.0,
+ "width": 63.0,
+ "height": 16.0,
+ "width_bits": 6,
+
+ "height_bits": 6,
+ "margin_left_bits": 2,
+ "margin_top_bits": -6,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "2",
+ "tag": 202,
+ "margin_left": 190.0,
+ "margin_top": -88.0,
+ "width": 48.0,
+ "height": 56.0,
+
+ "width_bits": 6,
+ "height_bits": 6,
+ "margin_left_bits": 2,
+ "margin_top_bits": -6,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "3",
+ "tag": 203,
+ "margin_left": 222.0,
+ "margin_top": -144.0,
+
+ "width": 16.0,
+ "height": 56.0,
+ "width_bits": 6,
+ "height_bits": 6,
+ "margin_left_bits": 2,
+ "margin_top_bits": -6,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "tag": 204,
+ "visualName": "4",
+ "margin_left": 190.0,
+ "margin_top": -200.0,
+ "width": 48.0,
+ "height": 56.0,
+ "width_bits": 6,
+ "height_bits": 6,
+ "margin_left_bits": 2,
+
+ "margin_top_bits": -6,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "5",
+ "tag": 205,
+ "margin_left": 126,
+ "margin_top": -200.0,
+ "width": 63.0,
+ "height": 16.0,
+ "width_bits": 6,
+
+ "height_bits": 6,
+ "margin_left_bits": 2,
+ "margin_top_bits": -6,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "6",
+ "tag": 206,
+ "margin_left": 64,
+ "margin_top": -200.0,
+ "width": 63.0,
+ "height": 16.0,
+ "width_bits": 6,
+
+ "height_bits": 6,
+ "margin_left_bits": 2,
+ "margin_top_bits": -6,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "7",
+ "tag": 207,
+ "margin_left": 15.0,
+ "margin_top": -200.0,
+ "width": 48.0,
+ "height": 56.0,
+ "width_bits": 2,
+ "height_bits": 2,
+
+ "margin_left_bits": 2,
+ "margin_top_bits": -6,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "8",
+ "tag": 208,
+ "margin_left": 15.0,
+ "margin_top": -144.0,
+ "width": 16.0,
+ "height": 56.0,
+ "width_bits": 6,
+
+ "height_bits": 6,
+ "margin_left_bits": 2,
+ "margin_top_bits": -6,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "9",
+ "tag": 209,
+ "margin_left": 15.0,
+ "margin_top": -88.0,
+ "width": 48.0,
+ "height": 56.0,
+ "width_bits": 6,
+
+ "height_bits": 6,
+ "margin_left_bits": 2,
+ "margin_top_bits": -6,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "10",
+ "tag": 210,
+ "margin_left": 64,
+ "margin_top": -48.0,
+ "width": 63.0,
+ "height": 16.0,
+ "width_bits": 6,
+ "height_bits": 6,
+
+ "margin_left_bits": 2,
+ "margin_top_bits": -6,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "tag": -1,
+ "margin_left": 31.0,
+ "margin_top": -184.0,
+ "width": 190.0,
+ "height": 136.0,
+ "width_bits": 6,
+ "height_bits": 6,
+ "margin_left_bits": 2,
+ "margin_top_bits": -6,
+ "enabled": false,
+ "absolute_location": true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/DeviceLayouts/OtherDevices/monitor_leds.json b/Project-Aurora/Project-Aurora/DeviceLayouts/OtherDevices/monitor_leds.json
new file mode 100644
index 000000000..52ab71763
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/DeviceLayouts/OtherDevices/monitor_leds.json
@@ -0,0 +1,906 @@
+{
+ "group_tag": "keyboard",
+ "origin_region": 1,
+ "grouped_keys": [
+ {
+ "visualName": "",
+ "tag": 142,
+ "margin_left": 792.8399999999996,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 143,
+ "margin_left": 756.6799999999996,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 144,
+ "margin_left": 720.5199999999996,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 145,
+ "margin_left": 684.3599999999997,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 146,
+ "margin_left": 648.1999999999997,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 147,
+ "margin_left": 612.0399999999997,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 148,
+ "margin_left": 575.8799999999998,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 149,
+ "margin_left": 539.7199999999998,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 150,
+ "margin_left": 503.55999999999983,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 151,
+ "margin_left": 467.39999999999986,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 172,
+ "margin_left": 431.2399999999999,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 173,
+ "margin_left": 395.0799999999999,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 174,
+ "margin_left": 358.91999999999996,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 175,
+ "margin_left": 322.76,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 176,
+ "margin_left": 286.59999999999997,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 177,
+ "margin_left": 250.43999999999997,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 178,
+ "margin_left": 214.27999999999997,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 179,
+ "margin_left": 178.11999999999998,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 180,
+ "margin_left": 141.95999999999998,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 181,
+ "margin_left": 105.79999999999998,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 182,
+ "margin_left": 69.63999999999999,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 183,
+ "margin_left": 33.47999999999999,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 184,
+ "margin_left": -2.680000000000007,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 185,
+ "margin_left": -38.84,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 186,
+ "margin_left": -75,
+ "margin_top": 342.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 36,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 187,
+ "margin_left": -75,
+ "margin_top": 305,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 32,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 188,
+ "margin_left": -75,
+ "margin_top": 267.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 28,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 189,
+ "margin_left": -75,
+ "margin_top": 230,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 24,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 190,
+ "margin_left": -75,
+ "margin_top": 192.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 20,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 191,
+ "margin_left": -75,
+ "margin_top": 155,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 16,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 192,
+ "margin_left": -75,
+ "margin_top": 117.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 12,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 193,
+ "margin_left": -75,
+ "margin_top": 80,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 8,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 250,
+ "margin_left": -75,
+ "margin_top": 42.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 4,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 251,
+ "margin_left": -75,
+ "margin_top": 5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 252,
+ "margin_left": -75,
+ "margin_top": -32.5,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": -4,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 253,
+ "margin_left": -75,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": -4,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 254,
+ "margin_left": -38.84,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 0,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 255,
+ "margin_left": -2.680000000000007,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 4,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 256,
+ "margin_left": 33.47999999999999,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 8,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 257,
+ "margin_left": 69.63999999999999,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 12,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 258,
+ "margin_left": 105.79999999999998,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 16,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 259,
+ "margin_left": 141.95999999999998,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 20,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 260,
+ "margin_left": 178.11999999999998,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 24,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 261,
+ "margin_left": 214.27999999999997,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 28,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 262,
+ "margin_left": 250.43999999999997,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 32,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 263,
+ "margin_left": 286.59999999999997,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 36,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 264,
+ "margin_left": 322.76,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 40,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 265,
+ "margin_left": 358.91999999999996,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 44,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 266,
+ "margin_left": 395.0799999999999,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 48,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 267,
+ "margin_left": 431.2399999999999,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 52,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 268,
+ "margin_left": 467.39999999999986,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 56,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 269,
+ "margin_left": 503.55999999999983,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 60,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 270,
+ "margin_left": 539.7199999999998,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 64,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 271,
+ "margin_left": 575.8799999999998,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 68,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 272,
+ "margin_left": 612.0399999999997,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 72,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 273,
+ "margin_left": 648.1999999999997,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 76,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 274,
+ "margin_left": 684.3599999999997,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 80,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 275,
+ "margin_left": 720.5199999999996,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 84,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 276,
+ "margin_left": 756.6799999999996,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 88,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ },
+ {
+ "visualName": "",
+ "tag": 277,
+ "margin_left": 792.8399999999996,
+ "margin_top": -70,
+ "width": 36.16,
+ "height": 37.5,
+ "font_size": 24,
+ "width_bits": 10,
+ "height_bits": 10,
+ "margin_left_bits": 92,
+ "margin_top_bits": 0,
+ "enabled": true,
+ "absolute_location": true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/Devices/Asus/AsusDevice.cs b/Project-Aurora/Project-Aurora/Devices/Asus/AsusDevice.cs
index 212293d29..f465100e2 100644
--- a/Project-Aurora/Project-Aurora/Devices/Asus/AsusDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Asus/AsusDevice.cs
@@ -1,7 +1,9 @@
using System.Collections.Generic;
using System.ComponentModel;
+using System.Diagnostics;
using System.Drawing;
using Aurora.Settings;
+using Aurora.Utils;
using Microsoft.Win32;
namespace Aurora.Devices.Asus
@@ -12,6 +14,13 @@ public class AsusDevice : IDevice
private AsusHandler asusHandler = new AsusHandler();
private bool isActive = false;
+ private readonly Stopwatch watch = new Stopwatch();
+ private long lastUpdateTime;
+ private long updateTime;
+ public string DeviceUpdatePerformance => IsInitialized
+ ? lastUpdateTime + "(" + updateTime + ")" + " ms"
+ : "";
+
private VariableRegistry defaultRegistry = null;
///
public VariableRegistry RegisteredVariables
@@ -23,6 +32,7 @@ public VariableRegistry RegisteredVariables
defaultRegistry = new VariableRegistry();
defaultRegistry.Register($"{DeviceName}_enable_unsupported_version", false, "Enable Unsupported Asus SDK Version");
defaultRegistry.Register($"{DeviceName}_force_initialize", false, "Force initialization");
+ defaultRegistry.Register($"{DeviceName}_color_cal", new RealColor(Color.FromArgb(255, 255, 255, 255)), "Color Calibration");
return defaultRegistry;
}
}
@@ -44,9 +54,6 @@ private string GetDeviceStatus()
return "Initialized: " + asusHandler?.GetDevicePerformance();
}
- ///
- public string DeviceUpdatePerformance => "";
-
///
public bool Initialize()
{
@@ -56,6 +63,7 @@ public bool Initialize()
Global.Configuration.VarRegistry.GetVariable($"{DeviceName}_enable_unsupported_version"),
Global.Configuration.VarRegistry.GetVariable($"{DeviceName}_force_initialize"));
isActive = asusHandler.Start();
+
return isActive;
}
@@ -103,16 +111,17 @@ public bool IsPeripheralConnected()
}
///
- public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
- {
- asusHandler.UpdateColors(keyColors);
- return true;
- }
-
- ///
+ Stopwatch _tempStopWatch = new Stopwatch();
public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArgs e, bool forced = false)
{
- asusHandler.UpdateColors(colorComposition.keyColors);
+ _tempStopWatch.Restart();
+
+ asusHandler.UpdateColors(colorComposition.KeyColors);
+
+ lastUpdateTime = watch.ElapsedMilliseconds;
+ updateTime = _tempStopWatch.ElapsedMilliseconds;
+ watch.Restart();
+
return true;
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Asus/AsusHandler.cs b/Project-Aurora/Project-Aurora/Devices/Asus/AsusHandler.cs
index 40034e098..0382159dd 100644
--- a/Project-Aurora/Project-Aurora/Devices/Asus/AsusHandler.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Asus/AsusHandler.cs
@@ -98,7 +98,7 @@ public bool Start()
{
if (AuraSdk == null)
return false;
-
+ //return false;
lock (deviceLock)
{
try
@@ -188,6 +188,7 @@ public void Stop()
{
var device = devices[i];
device.Stop(false);
+ device.Dispose();
}
devices.Clear();
@@ -195,7 +196,7 @@ public void Stop()
}
}
- public void UpdateColors(Dictionary colors)
+ public void UpdateColors(Dictionary colors)
{
lock (deviceLock)
{
diff --git a/Project-Aurora/Project-Aurora/Devices/Asus/AsusSyncClaymoreDevice.cs b/Project-Aurora/Project-Aurora/Devices/Asus/AsusSyncClaymoreDevice.cs
index e08525e2f..7f705d3bf 100644
--- a/Project-Aurora/Project-Aurora/Devices/Asus/AsusSyncClaymoreDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Asus/AsusSyncClaymoreDevice.cs
@@ -13,7 +13,7 @@ public class AsusSyncClaymoreDevice : AuraSyncDevice
public AsusSyncClaymoreDevice(AsusHandler asusHandler, IAuraSyncDevice device, int frameRate = 30) : base(
asusHandler, device, frameRate) { }
- protected override void ApplyColors(Dictionary colors)
+ protected override void ApplyColors(Dictionary colors)
{
if (Global.Configuration.DevicesDisableKeyboard)
return;
@@ -22,8 +22,8 @@ protected override void ApplyColors(Dictionary colors)
{
var light = DeviceKeyToClaymore(i);
- if (colors.ContainsKey(light))
- SetRgbLight(Device.Lights[i], colors[light]);
+ if (colors.ContainsKey((int)light))
+ SetRgbLight(Device.Lights[i], colors[(int)light]);
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Asus/AsusSyncConfiguredDevice.cs b/Project-Aurora/Project-Aurora/Devices/Asus/AsusSyncConfiguredDevice.cs
index d92cbfc53..ac091a734 100644
--- a/Project-Aurora/Project-Aurora/Devices/Asus/AsusSyncConfiguredDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Asus/AsusSyncConfiguredDevice.cs
@@ -12,20 +12,20 @@ public class AsusSyncConfiguredDevice : AuraSyncDevice
private static readonly List allConfigDevices = new List();
///
- public AsusSyncConfiguredDevice(AsusHandler asusHandler, IAuraSyncDevice device, AsusConfig.AsusConfigDevice config, int frameRate = 30) : base(asusHandler, device, frameRate)
+ public AsusSyncConfiguredDevice(AsusHandler asusHandler, IAuraSyncDevice device, AsusConfig.AsusConfigDevice config, int frameRate = 60) : base(asusHandler, device, frameRate)
{
this.config = config;
allConfigDevices.Add(this);
}
///
- protected override void ApplyColors(Dictionary colors)
+ protected override void ApplyColors(Dictionary colors)
{
lock (configLock)
{
foreach (var keyPair in config.KeyMapper)
{
- if (colors.TryGetValue(keyPair.Value, out var color))
+ if (colors.TryGetValue((int)keyPair.Value, out var color))
SetRgbLight(keyPair.Key, color);
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Asus/AuraSyncDevice.cs b/Project-Aurora/Project-Aurora/Devices/Asus/AuraSyncDevice.cs
index 9261c184b..33d2ac2c6 100644
--- a/Project-Aurora/Project-Aurora/Devices/Asus/AuraSyncDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Asus/AuraSyncDevice.cs
@@ -6,6 +6,8 @@
using System.Threading;
using System.Threading.Tasks;
using AuraServiceLib;
+using Aurora.Settings;
+using Aurora.Utils;
namespace Aurora.Devices.Asus
{
@@ -19,10 +21,10 @@ public class AuraSyncDevice : IDisposable
private readonly IAuraSyncDevice device;
public IAuraSyncDevice Device => device;
private readonly AsusHandler asusHandler;
- private readonly ConcurrentQueue> colorQueue = new ConcurrentQueue>();
+ private readonly ConcurrentQueue> colorQueue = new ConcurrentQueue>();
private CancellationTokenSource tokenSource = new CancellationTokenSource();
- private readonly int frameRateMillis;
- private readonly DeviceKeys[] defaultKeys = { DeviceKeys.Peripheral, DeviceKeys.Peripheral_Logo, DeviceKeys.SPACE };
+ private readonly long frameRateMillis;
+ private readonly int[] defaultKeys = { (int)DeviceKeys.Peripheral, (int)DeviceKeys.Peripheral_Logo, (int)DeviceKeys.SPACE };
private readonly Stopwatch stopwatch = new Stopwatch();
@@ -30,14 +32,14 @@ public class AuraSyncDevice : IDisposable
private const int DiscountTries = 3;
private int disconnectCounter = 0;
- public AuraSyncDevice(AsusHandler asusHandler, IAuraSyncDevice device, int frameRate = 30)
+ public AuraSyncDevice(AsusHandler asusHandler, IAuraSyncDevice device, int frameRate = 60)
{
this.asusHandler = asusHandler;
this.device = device;
frameRateMillis = (int)((1f / frameRate) * 1000f);
}
- public void UpdateColors(Dictionary colors)
+ public void UpdateColors(Dictionary colors)
{
if (DeviceType == AsusHandler.AsusDeviceType.Mouse && Global.Configuration.DevicesDisableMouse)
return;
@@ -46,8 +48,7 @@ public void UpdateColors(Dictionary colors)
while (!colorQueue.IsEmpty)
colorQueue.TryDequeue(out _);
- // queue a clone of the colors
- colorQueue.Enqueue(new Dictionary(colors));
+ colorQueue.Enqueue(colors);
}
public void Start()
@@ -83,7 +84,7 @@ private async void Thread(CancellationToken token)
{
try
{
- await Task.Delay(frameRateMillis, token);
+ await Task.Delay((int)Math.Max(frameRateMillis - LastUpdateMillis, 5), token);
// wait for the next tick before drawing
var colors = GetLatestColors();
if (colors == null) continue;
@@ -114,7 +115,7 @@ private async void Thread(CancellationToken token)
}
catch (TaskCanceledException)
{
- asusHandler.DisconnectDevice(this);
+ //asusHandler.DisconnectDevice(this);
return;
}
catch (Exception exception)
@@ -132,7 +133,7 @@ private async void Thread(CancellationToken token)
/// Try to apply the aurora color collection to this device
///
/// The colors to apply
- protected virtual void ApplyColors(Dictionary colors)
+ protected virtual void ApplyColors(Dictionary colors)
{
// simple implementation is to assign all colors to DefaultKey
foreach (var defaultKey in defaultKeys)
@@ -146,12 +147,6 @@ protected virtual void ApplyColors(Dictionary colors)
}
}
- //0x00BBGGRR
- protected void SetRgbLight(IAuraRgbKey rgbLight, Color color)
- {
- rgbLight.Color = (uint)(color.R | color.G << 8 | color.B << 16);
- }
-
//0x00BBGGRR
protected void SetRgbLight(IAuraRgbLight rgbLight, Color color)
{
@@ -160,12 +155,19 @@ protected void SetRgbLight(IAuraRgbLight rgbLight, Color color)
protected void SetRgbLight(int index, Color color)
{
- SetRgbLight(device.Lights[index], color);
+ //calibrate for led and fans
+ var colorCal = Global.Configuration.VarRegistry.GetVariable($"Asus_color_cal");
+ var calibratedColor = Color.FromArgb(
+ color.A,
+ color.R * colorCal.GetDrawingColor().R / 255,
+ color.G * colorCal.GetDrawingColor().G / 255,
+ color.B * colorCal.GetDrawingColor().B / 255);
+ SetRgbLight(device.Lights[index], calibratedColor);
}
- private Dictionary GetLatestColors()
+ private Dictionary GetLatestColors()
{
- Dictionary colors = null;
+ Dictionary colors = null;
while (colorQueue.Count > 0)
colorQueue.TryDequeue(out colors);
diff --git a/Project-Aurora/Project-Aurora/Devices/Asus/AuraSyncKeyboardDevice.cs b/Project-Aurora/Project-Aurora/Devices/Asus/AuraSyncKeyboardDevice.cs
index b36c62a0c..291105101 100644
--- a/Project-Aurora/Project-Aurora/Devices/Asus/AuraSyncKeyboardDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Asus/AuraSyncKeyboardDevice.cs
@@ -26,7 +26,8 @@ public AuraSyncKeyboardDevice(AsusHandler asusHandler, IAuraSyncKeyboard device,
// BackSlash Key
deviceKeyToKey[DeviceKeys.BACKSLASH_UK] = keyboard.Lights[(int)(4 * keyboard.Width + 1)];
- if (Global.Configuration.KeyboardBrand == Settings.PreferredKeyboard.Asus_Strix_Scope)
+
+ if (Global.Configuration.KeyboardBrand == Settings.PreferredKeyboard.Asus_Strix_Scope) //"Asus_Strix_Scope")
{
// Left Windows Key
deviceKeyToKey[DeviceKeys.LEFT_WINDOWS] = keyboard.Lights[(int)(5 * keyboard.Width + 2)];
@@ -37,14 +38,14 @@ public AuraSyncKeyboardDevice(AsusHandler asusHandler, IAuraSyncKeyboard device,
}
///
- protected override void ApplyColors(Dictionary colors)
+ protected override void ApplyColors(Dictionary colors)
{
if (Global.Configuration.DevicesDisableKeyboard)
return;
foreach (var keyPair in colors)
{
- if (!deviceKeyToKey.TryGetValue(keyPair.Key, out var light))
+ if (!deviceKeyToKey.TryGetValue((DeviceKeys)keyPair.Key, out var light))
continue;
SetRgbLight(light, keyPair.Value);
diff --git a/Project-Aurora/Project-Aurora/Devices/AtmoOrb/AtmoOrbDevice.cs b/Project-Aurora/Project-Aurora/Devices/AtmoOrb/AtmoOrbDevice.cs
index b0424e3f1..bf15e38b0 100644
--- a/Project-Aurora/Project-Aurora/Devices/AtmoOrb/AtmoOrbDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/AtmoOrb/AtmoOrbDevice.cs
@@ -19,9 +19,9 @@ public class AtmoOrbDevice : IDevice
private IPEndPoint ipClientEndpoint;
private bool isConnected;
private bool isConnecting;
- private Stopwatch sw = new Stopwatch();
+ private Stopwatch sw = new();
- private System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
+ private Stopwatch watch = new();
private long lastUpdateTime = 0;
private VariableRegistry default_registry = null;
@@ -59,16 +59,6 @@ public bool IsConnected()
public bool IsInitialized => IsConnected();
- public bool IsKeyboardConnected()
- {
- throw new NotImplementedException();
- }
-
- public bool IsPeripheralConnected()
- {
- throw new NotImplementedException();
- }
-
public bool Reconnect()
{
if (socket != null)
@@ -159,16 +149,16 @@ public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArg
Global.Configuration.VarRegistry.GetVariable($"{devicename}_send_delay"))
{
Color averageColor;
- lock (colorComposition.bitmapLock)
+ lock (colorComposition.KeyBitmap)
{
//Fix conflict with debug bitmap
- lock (colorComposition.keyBitmap)
+ lock (colorComposition.KeyBitmap)
{
averageColor = Utils.BitmapUtils.GetRegionColor(
- (Bitmap)colorComposition.keyBitmap,
- new BitmapRectangle(0, 0, colorComposition.keyBitmap.Width,
- colorComposition.keyBitmap.Height)
+ colorComposition.KeyBitmap,
+ new Rectangle(0, 0, colorComposition.KeyBitmap.Width,
+ colorComposition.KeyBitmap.Height)
);
}
}
@@ -185,11 +175,6 @@ public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArg
return true;
}
- public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
- {
- throw new NotImplementedException();
- }
-
public void SendColorsToOrb(byte red, byte green, byte blue, DoWorkEventArgs e = null)
{
if (e?.Cancel ?? false) return;
diff --git a/Project-Aurora/Project-Aurora/Devices/AuroraDevice.cs b/Project-Aurora/Project-Aurora/Devices/AuroraDevice.cs
new file mode 100644
index 000000000..bf902357e
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/Devices/AuroraDevice.cs
@@ -0,0 +1,214 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Drawing;
+using System.Linq;
+using System.Runtime.ExceptionServices;
+using System.Security;
+using System.Text;
+using System.Threading.Tasks;
+using Aurora.Settings;
+using Newtonsoft.Json;
+
+namespace Aurora.Devices
+{
+ public enum AuroraDeviceType
+ {
+ Keyboard = 0,
+ Mouse = 1,
+ Unkown = 2,
+ Headset = 3,
+ OpenRGBKeyboard = 4,
+ OpenRGBMouse = 5,
+ OpenRGBUnkown = 6,
+ OpenRGBHeadset = 7,
+ }
+ public class UniqueDeviceId
+ {
+ public string ConnectorName = "";
+ public string DeviceName { get; set; } = "Generic SDK device";
+ public int Index = 0;
+ [JsonIgnore]
+ public int? ViewPort = null;
+ public UniqueDeviceId()
+ {
+ }
+ public UniqueDeviceId(AuroraDeviceConnector connector, AuroraDevice device)
+ {
+ ConnectorName = connector.GetConnectorName();
+ DeviceName = device.GetDeviceName();
+ }
+ public static bool operator ==(UniqueDeviceId obj1, UniqueDeviceId obj2)
+ {
+ return (!(obj1 is null) && !(obj2 is null)
+ && string.Equals(obj1.ConnectorName, obj2.ConnectorName)
+ && string.Equals(obj1.DeviceName, obj2.DeviceName)
+ && obj1.Index == obj2.Index);
+ }
+
+ public static bool operator !=(UniqueDeviceId obj1, UniqueDeviceId obj2)
+ {
+ return !(obj1 == obj2);
+ }
+ public override bool Equals(object obj)
+ {
+ return this == obj as UniqueDeviceId;
+ }
+
+ }
+ public abstract class AuroraDevice
+ {
+ private readonly Stopwatch Watch = new Stopwatch();
+ private long LastUpdateTime = 0;
+ private bool UpdateIsOngoing = false;
+ private bool DeviceIsConnected = false;
+ private AuroraDeviceConnector connector;
+
+ public UniqueDeviceId id = null;
+ private VariableRegistry variableRegistry;
+
+ public event EventHandler ConnectionHandler;
+ public event EventHandler UpdateFinished;
+ ///
+ /// Is called every frame (30fps). Update the device here
+ ///
+
+ //[HandleProcessCorruptedStateExceptions, SecurityCritical]
+ public async void UpdateDevice(DeviceColorComposition composition)
+ {
+ if (IsConnected())
+ {
+ if (Global.Configuration.DevicesDisabled.Contains(GetType()))
+ {
+ //Initialized when it's supposed to be disabled? SMACK IT!
+ Disconnect();
+ return;
+ }
+
+ if (!UpdateIsOngoing)
+ {
+ UpdateIsOngoing = true;
+ Watch.Restart();
+ try
+ {
+ if (!await Task.Run(() => UpdateDeviceImpl(composition)))
+ {
+ LogError(DeviceName + " device, error when updating device.");
+ }
+ }
+ catch (Exception exc)
+ {
+ LogError(DeviceName + " device, error when updating device. Exception: " + exc.Message);
+ }
+
+
+ Watch.Stop();
+ LastUpdateTime = Watch.ElapsedMilliseconds;
+
+ await Task.Run(() => connector?.DeviceLedUpdateFinished());
+ UpdateFinished.Invoke(this, new EventArgs());
+ UpdateIsOngoing = false;
+ }
+
+ }
+ }
+ protected abstract bool UpdateDeviceImpl(DeviceColorComposition composition);
+
+ public string GetDeviceUpdatePerformance()
+ {
+ return IsConnected() ? LastUpdateTime + " ms" : "";
+ }
+ public async void Connect()
+ {
+ /*if (GetDeviceType() == AuroraDeviceType.Keyboard && Global.Configuration.DevicesDisableKeyboard ||
+ GetDeviceType() == AuroraDeviceType.Mouse && Global.Configuration.DevicesDisableMouse ||
+ GetDeviceType() == AuroraDeviceType.Headset && Global.Configuration.DevicesDisableHeadset ||
+ GetDeviceType() == AuroraDeviceType.OpenRGBKeyboard && Global.Configuration.DevicesDisableOpenRGBKeyboard ||
+ GetDeviceType() == AuroraDeviceType.OpenRGBMouse && Global.Configuration.DevicesDisableOpenRGBMouse ||
+ GetDeviceType() == AuroraDeviceType.OpenRGBHeadset && Global.Configuration.DevicesDisableOpenRGBHeadset)
+ {
+ Disconnect();
+ }
+ else*/
+ {
+ try
+ {
+ if (await Task.Run(() => ConnectImpl()))
+ {
+ ConnectionHandler.Invoke(this, new EventArgs());
+ DeviceIsConnected = true;
+ }
+ }
+ catch (Exception exc)
+ {
+ Global.logger.Info("Device, " + GetDeviceName() + ", throwed exception:" + exc.ToString());
+ }
+ }
+ }
+ protected virtual bool ConnectImpl()
+ {
+ return true;
+ }
+
+ public void Disconnect()
+ {
+ if (IsConnected())
+ {
+ DisconnectImpl();
+ DeviceIsConnected = false;
+ ConnectionHandler.Invoke(this, new EventArgs());
+ }
+ }
+ protected virtual void DisconnectImpl()
+ {
+ }
+
+ public abstract List GetAllDeviceKey();
+
+ protected abstract string DeviceName { get; }
+ public string GetDeviceName() => DeviceName;
+
+ public virtual string GetDeviceDetails() => DeviceName + ": " + (IsConnected() ? "Connected" : "Not connected");
+
+ protected abstract AuroraDeviceType AuroraDeviceType { get; }
+ public AuroraDeviceType GetDeviceType() => AuroraDeviceType;
+
+ public VariableRegistry GetRegisteredVariables()
+ {
+ if (variableRegistry == null)
+ {
+ variableRegistry = new VariableRegistry();
+ RegisterVariables(variableRegistry);
+ }
+ return variableRegistry;
+ }
+ ///
+ /// Only called once when registering variables. Can be empty if not needed
+ ///
+ protected virtual void RegisterVariables(VariableRegistry local)
+ {
+ //purposefully empty, if varibles are needed, this should be overridden
+ }
+
+ public bool IsConnected() => DeviceIsConnected;
+
+ protected void LogInfo(string s) => Global.logger.Info(s);
+
+ protected void LogError(string s) => Global.logger.Error(s);
+
+ protected Color CorrectAlpha(Color clr) => Utils.ColorUtils.CorrectWithAlpha(clr);
+
+ protected VariableRegistry GlobalVarRegistry => Global.Configuration.VarRegistry;
+
+ public void SetConnector(AuroraDeviceConnector connector)
+ {
+ this.connector = connector;
+ }
+ }
+
+ public abstract class AuroraKeyboardDevice : AuroraDevice
+ {
+ protected override AuroraDeviceType AuroraDeviceType => AuroraDeviceType.Keyboard;
+
+ }
+}
diff --git a/Project-Aurora/Project-Aurora/Devices/AuroraDeviceConnector.cs b/Project-Aurora/Project-Aurora/Devices/AuroraDeviceConnector.cs
new file mode 100644
index 000000000..7b884b18b
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/Devices/AuroraDeviceConnector.cs
@@ -0,0 +1,242 @@
+using Aurora.Settings;
+using SharpDX.Direct3D11;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Aurora.Devices
+{
+ public class OldAuroraDeviceWrapper : IDevice
+ {
+ AuroraDeviceConnector Connector;
+ public string DeviceName => Connector.GetConnectorName();
+
+ public string DeviceDetails => string.Join(", ", Connector.Devices.Select(d => d.GetDeviceName()));
+
+ public string DeviceUpdatePerformance => string.Join(", ", Connector.Devices.Select(d => d.GetDeviceUpdatePerformance()));
+
+ public bool IsInitialized => Connector.IsInitialized();
+
+ public VariableRegistry RegisteredVariables => Connector.GetRegisteredVariables();
+
+ public OldAuroraDeviceWrapper(AuroraDeviceConnector connector)
+ {
+ Connector = connector;
+ }
+
+ public bool Initialize()
+ {
+ Connector.Initialize();
+ return true;
+ }
+
+ public void Reset()
+ {
+ Connector.Reset();
+ }
+
+ public void Shutdown()
+ {
+ Connector.Shutdown();
+ }
+
+ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ {
+ return true;
+ }
+
+ public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArgs e, bool forced = false)
+ {
+ return true;
+ }
+ }
+ public abstract class AuroraDeviceConnector
+ {
+ //private Dictionary Devices = new Dictionary();
+ private List devices = new List();
+ public IReadOnlyList Devices => devices.AsReadOnly();
+ private bool isInitialized;
+ public event EventHandler NewSuccessfulInitiation;
+ private int DisconnectedDeviceCount = 0;
+ private int UpdatedDeviceCount = 0;
+ private SemaphoreSlim SingleThread = new SemaphoreSlim(1, 1);
+
+ protected abstract string ConnectorName { get; }
+ public string GetConnectorName() => ConnectorName;
+ public virtual void Reset()
+ {
+ Shutdown();
+ Initialize();
+ }
+ private void RegisterDeviceId (AuroraDevice dev)
+ {
+ UniqueDeviceId id = new UniqueDeviceId(this, dev);
+ while (Devices.Where(d => d.id == id).Any())
+ {
+ id.Index++;
+ }
+ var usedIdConfig = Global.devicesLayout.DevicesConfig.Values.Where(c => c.Id == id);
+ if(!usedIdConfig.Any())
+ {
+ dev.id = id;
+ }
+ else
+ {
+ dev.id = usedIdConfig.First().Id;
+ }
+
+ }
+ protected void RegisterDevice(AuroraDevice device)
+ {
+ device.SetConnector(this);
+ RegisterDeviceId(device);
+ devices.Add(device);
+ Global.Configuration.VarRegistry.Combine(device.GetRegisteredVariables());
+ device.ConnectionHandler += ConnectionHandling;
+ device.UpdateFinished += DeviceUpdated;
+ device.Connect();
+ }
+ public virtual void DeviceLedUpdateFinished()
+ {
+
+ }
+ ///
+ /// Is called first. Initialize the device here
+ ///
+ public async void Initialize()
+ {
+ await SingleThread.WaitAsync();
+
+ if (!IsInitialized() && !Global.Configuration.DevicesDisabled.Contains(GetType()))
+ {
+ Global.logger.Info("Start initializing Connector: " + GetConnectorName());
+ try
+ {
+ /*if (!Global.Configuration.devices_not_first_time.Contains(GetType()))
+ {
+ RunFirstTime();
+ Global.Configuration.devices_not_first_time.Add(GetType());
+ }*/
+ if (await Task.Run(() => InitializeImpl()))
+ {
+ DisconnectedDeviceCount = 0;
+ if (Devices.Any())
+ {
+ isInitialized = true;
+ NewSuccessfulInitiation?.Invoke(this, new EventArgs());
+ }
+ }
+ }
+ catch (Exception exc)
+ {
+ Global.logger.Info("Connector, " + GetConnectorName() + ", throwed exception:" + exc.ToString());
+ }
+ Global.logger.Info("Connector, " + GetConnectorName() + ", was" + (IsInitialized() ? "" : " not") + " initialized");
+ }
+ SingleThread.Release();
+
+ }
+
+ protected abstract bool InitializeImpl();
+ protected virtual void RunFirstTime() { }
+
+ private void ConnectionHandling(object sender, EventArgs args)
+ {
+ AuroraDevice device = sender as AuroraDevice;
+ if (device.IsConnected())
+ {
+ DisconnectedDeviceCount--;
+ }
+ else
+ {
+ DisconnectedDeviceCount++;
+ }
+ if (DisconnectedDeviceCount == 0)
+ {
+ Shutdown();
+ }
+ }
+ private void DeviceUpdated(object sender, EventArgs args)
+ {
+ AuroraDevice device = sender as AuroraDevice;
+ UpdatedDeviceCount++;
+ if (UpdatedDeviceCount == Devices.Count)
+ {
+ UpdateDevices();
+ }
+ }
+ protected virtual void UpdateDevices()
+ {
+
+ }
+ ///
+ /// Is called last. Dispose of the devices here
+ ///
+ public async void Shutdown()
+ {
+ await SingleThread.WaitAsync();
+
+ try
+ {
+ if (IsInitialized())
+ {
+ foreach (var device in Devices)
+ {
+ device.Disconnect();
+ }
+ devices.Clear();
+ await Task.Run(() => ShutdownImpl());
+ isInitialized = false;
+ Global.logger.Info("Connector, " + GetConnectorName() + ", was shutdown");
+ }
+ }
+ catch (Exception exc)
+ {
+ Global.logger.Info("Connector, " + GetConnectorName() + ", throwed exception:" + exc.ToString());
+ }
+ SingleThread.Release();
+ }
+
+ protected abstract void ShutdownImpl();
+
+
+ public bool IsInitialized() => isInitialized;
+
+ public string GetConnectorDetails() => isInitialized ?
+ ConnectorName + ": " + ConnectorSubDetails :
+ ConnectorName + ": Not Initialized";
+ protected virtual string ConnectorSubDetails => "Initialized";
+
+ protected void LogInfo(string s) => Global.logger.Info(s);
+ protected void LogError(string s) => Global.logger.Error(s);
+
+ private VariableRegistry variableRegistry;
+ public virtual VariableRegistry GetRegisteredVariables()
+ {
+ if (variableRegistry == null)
+ {
+ variableRegistry = new VariableRegistry();
+ RegisterVariables(variableRegistry);
+ foreach (var dev in Devices)
+ {
+ variableRegistry.Combine(dev.GetRegisteredVariables());
+ }
+ }
+ return variableRegistry;
+ }
+ ///
+ /// Only called once when registering variables. Can be empty if not needed
+ ///
+ protected virtual void RegisterVariables(VariableRegistry local)
+ {
+ //purposefully empty, if varibles are needed, this should be overridden
+ }
+ protected VariableRegistry GlobalVarRegistry => Global.Configuration.VarRegistry;
+
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/Devices/Bloody/Bloody.cs b/Project-Aurora/Project-Aurora/Devices/Bloody/Bloody.cs
index f7431961a..d1c2bb356 100644
--- a/Project-Aurora/Project-Aurora/Devices/Bloody/Bloody.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Bloody/Bloody.cs
@@ -15,34 +15,80 @@ namespace Aurora.Devices.Bloody
public class BloodyDevice : DefaultDevice
{
public override string DeviceName => "Bloody";
+ protected override string DeviceInfo => IsInitialized ? GetDeviceNames() : base.DeviceInfo;
private BloodyKeyboard keyboard;
+ private List peripherals;
+
+ private event EventHandler> deviceUpdated;
public override bool Initialize()
{
keyboard = BloodyKeyboard.Initialize();
+ if(keyboard != null)
+ {
+ deviceUpdated += UpdateKeyboard;
+ }
+
+ peripherals = BloodyPeripheral.GetDevices();
+ deviceUpdated += UpdatePeripherals;
- return IsInitialized = (keyboard != null);
+ return IsInitialized = (keyboard != null) || (peripherals.Any());
}
public override void Shutdown()
{
- keyboard.Disconnect();
+ keyboard?.Disconnect();
+ deviceUpdated -= UpdateKeyboard;
+
+ peripherals.ForEach(p => p.Disconnect());
+ deviceUpdated -= UpdatePeripherals;
+
IsInitialized = false;
}
- public override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ protected override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false) {
+ deviceUpdated?.Invoke(this, keyColors);
+ return true;
+ }
+
+ private void UpdateKeyboard(object sender, Dictionary keyColors)
{
- if (!IsInitialized)
- return false;
+ foreach (var (key, clr) in keyColors)
+ {
+ if (BloodyKeyMap.KeyMap.TryGetValue((DeviceKeys)key, out var bloodyKey))
+ keyboard.SetKeyColor(bloodyKey, ColorUtils.CorrectWithAlpha(clr));
+ }
+
+ keyboard.Update();
+ }
- foreach (var key in keyColors)
+ private void UpdatePeripherals(object sender, Dictionary keyColors)
+ {
+ foreach(var dev in peripherals)
{
- if (BloodyKeyMap.KeyMap.TryGetValue(key.Key, out var bloodyKey))
- keyboard.SetKeyColor(bloodyKey, ColorUtils.CorrectWithAlpha(key.Value));
+ Dictionary keyMap = null;
+ switch (dev.PeripheralType)
+ {
+ case PeripheralType.MOUSE:
+ keyMap = BloodyKeyMap.MouseLightMap;
+ break;
+ case PeripheralType.MOUSEPAD:
+ keyMap = BloodyKeyMap.MousePadLightMap;
+ break;
+ }
+ foreach (KeyValuePair ledAndKey in keyMap)
+ {
+ keyColors.TryGetValue((int)ledAndKey.Value, out var color);
+ dev.SetKeyColor(ledAndKey.Key, ColorUtils.CorrectWithAlpha(color));
+ }
+ dev.Update();
}
+ }
- return keyboard.Update();
+ private string GetDeviceNames()
+ {
+ return (keyboard != null ? " Keyboard" : "") + String.Join(" ", peripherals);
}
}
}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/Devices/Bloody/BloodyKeyMap.cs b/Project-Aurora/Project-Aurora/Devices/Bloody/BloodyKeyMap.cs
index 41fe354de..cf71d69d5 100644
--- a/Project-Aurora/Project-Aurora/Devices/Bloody/BloodyKeyMap.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Bloody/BloodyKeyMap.cs
@@ -99,7 +99,43 @@ public static class BloodyKeyMap
[DeviceKeys.PAGE_DOWN] = Key.PAGE_DOWN,
[DeviceKeys.ARROW_RIGHT] = Key.ARROW_RIGHT,
[DeviceKeys.ADDITIONALLIGHT1] = Key.LEFT_BAR,
- [DeviceKeys.ADDITIONALLIGHT2] = Key.RIGHT_BAR
+ [DeviceKeys.ADDITIONALLIGHT2] = Key.RIGHT_BAR,
+ };
+ public static Dictionary MouseLightMap = new Dictionary()
+ {
+ [BloodyPeripheralLed.L2] = DeviceKeys.PERIPHERAL_LIGHT1,
+ [BloodyPeripheralLed.L3] = DeviceKeys.PERIPHERAL_LIGHT2,
+ [BloodyPeripheralLed.L4] = DeviceKeys.PERIPHERAL_LIGHT3,
+ [BloodyPeripheralLed.L5] = DeviceKeys.PERIPHERAL_LIGHT4,
+ [BloodyPeripheralLed.L6] = DeviceKeys.PERIPHERAL_LIGHT5,
+ [BloodyPeripheralLed.L7] = DeviceKeys.PERIPHERAL_LIGHT6,
+ [BloodyPeripheralLed.L10] = DeviceKeys.PERIPHERAL_LIGHT7,
+ [BloodyPeripheralLed.L9 ] = DeviceKeys.PERIPHERAL_LIGHT13,
+ [BloodyPeripheralLed.L8 ] = DeviceKeys.PERIPHERAL_LIGHT14,
+ [BloodyPeripheralLed.L14] = DeviceKeys.PERIPHERAL_LIGHT15,
+ [BloodyPeripheralLed.L13] = DeviceKeys.PERIPHERAL_LIGHT16,
+
+
+ [BloodyPeripheralLed.L11] = DeviceKeys.Peripheral_Logo,
+ [BloodyPeripheralLed.L15] = DeviceKeys.Peripheral_ScrollWheel,
+ };
+ public static Dictionary MousePadLightMap = new Dictionary()
+ {
+ [BloodyPeripheralLed.L1] = DeviceKeys.MOUSEPADLIGHT1,
+ [BloodyPeripheralLed.L2] = DeviceKeys.MOUSEPADLIGHT2,
+ [BloodyPeripheralLed.L3] = DeviceKeys.MOUSEPADLIGHT3,
+ [BloodyPeripheralLed.L4] = DeviceKeys.MOUSEPADLIGHT4,
+ [BloodyPeripheralLed.L5] = DeviceKeys.MOUSEPADLIGHT5,
+ [BloodyPeripheralLed.L6] = DeviceKeys.MOUSEPADLIGHT6,
+ [BloodyPeripheralLed.L7] = DeviceKeys.MOUSEPADLIGHT7,
+ [BloodyPeripheralLed.L8] = DeviceKeys.MOUSEPADLIGHT8,
+ [BloodyPeripheralLed.L9] = DeviceKeys.MOUSEPADLIGHT9,
+ [BloodyPeripheralLed.L10] = DeviceKeys.MOUSEPADLIGHT10,
+ [BloodyPeripheralLed.L11] = DeviceKeys.MOUSEPADLIGHT11,
+ [BloodyPeripheralLed.L12] = DeviceKeys.MOUSEPADLIGHT12,
+ [BloodyPeripheralLed.L13] = DeviceKeys.MOUSEPADLIGHT13,
+ [BloodyPeripheralLed.L14] = DeviceKeys.MOUSEPADLIGHT14,
+ [BloodyPeripheralLed.L15] = DeviceKeys.MOUSEPADLIGHT15,
};
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Bloody/BloodyMouseKey.cs b/Project-Aurora/Project-Aurora/Devices/Bloody/BloodyMouseKey.cs
new file mode 100644
index 000000000..e8a38880e
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/Devices/Bloody/BloodyMouseKey.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Aurora.Devices.Bloody
+{
+ public enum BloodyPeripheralLed
+ {
+ L1 = 0,
+ L2 = 1,
+ L3 = 2,
+ L4 = 3,
+ L5 = 4,
+ L6 = 5,
+ L7 = 6,
+ L8 = 7,
+ L9 = 8,
+ L10 = 9,
+ L11 = 10,
+ L12 = 11,
+ L13 = 12,
+ L14 = 13,
+ L15 = 14,
+ L16 = 15,
+ }
+}
diff --git a/Project-Aurora/Project-Aurora/Devices/Bloody/BloodyPeripheral.cs b/Project-Aurora/Project-Aurora/Devices/Bloody/BloodyPeripheral.cs
new file mode 100644
index 000000000..e235f9eac
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/Devices/Bloody/BloodyPeripheral.cs
@@ -0,0 +1,190 @@
+using HidSharp;
+using HidSharp.Reports.Encodings;
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Aurora.Devices.Bloody
+{
+ public sealed class BloodyPeripheral : IDisposable
+ {
+ private static readonly Dictionary DeviceIds = new()
+ {
+ [0x37EA] = PeripheralType.MOUSE,
+ [0xFA60] = PeripheralType.MOUSEPAD,
+ [0x356E] = PeripheralType.MOUSEPAD,
+ };
+ private static readonly byte[] ColorPacketHeader = { 0x07, 0x03, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00 };
+
+ public PeripheralType PeripheralType => _peripheralType;
+
+ private const int VendorId = 0x09DA;
+ private const uint LedUsagePage = 0x000C; //(ff52,0001,000C) //List of UsagePage+UsageID I found from Windows Device Manager(labed there as Uxxxx&&UPxxxx)
+ private const uint LedUsage = 0x0001; //(0244,/0080,0001)
+
+ private readonly PeripheralType _peripheralType;
+
+ private readonly byte[] _keyColors = new byte[16 * 3];
+
+ private readonly HidStream _ctrlStream;
+
+ private BloodyPeripheral(HidStream ctrlStream, PeripheralType peripheralType)
+ {
+ _ctrlStream = ctrlStream;
+ _peripheralType = peripheralType;
+ }
+
+ public override string ToString()
+ {
+ return _peripheralType.ToString();
+ }
+
+ public static List GetDevices()
+ {
+ List devices = new List();
+ foreach(int productId in DeviceIds.Keys)
+ {
+ var dev = Initialize(productId);
+ if (dev != null)
+ devices.Add(dev);
+ }
+ return devices;
+ }
+ public static BloodyPeripheral Initialize(int productId)
+ {
+ var devices = DeviceList.Local.GetHidDevices(vendorID: VendorId, productID: productId); //Find device with given VID PID
+
+ if (!devices.Any())
+ {
+ return null;
+ }
+ try
+ {
+ GetFromUsages(devices, LedUsagePage, LedUsage);
+ HidDevice ctrlDevice = devices.First(d => d.GetMaxFeatureReportLength() > 50);
+
+ HidStream ctrlStream = null;
+ if ((bool) ctrlDevice?.TryOpen(out ctrlStream))
+ {
+ PeripheralType type;
+ DeviceIds.TryGetValue(productId, out type);
+ BloodyPeripheral bp = new BloodyPeripheral(ctrlStream, type);
+ bp.SetDirect();
+ return bp;
+ }
+ ctrlStream?.Close();
+ }
+ catch
+ { }
+ return null;
+ }
+
+ private void SetDirect()
+ {
+ byte[] a = { 0x07, 0x03, 0x06, 0x01 };
+ byte[] b = { 0x07, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 };
+
+ var packet = new byte[64];
+ try
+ {
+ a.CopyTo(packet, 0);
+ _ctrlStream.SetFeature(packet);
+ b.CopyTo(packet, 0);
+ _ctrlStream.SetFeature(packet);
+ }
+ catch
+ {
+ Disconnect();
+ }
+ }
+
+ #region Set Colors
+ ///
+ /// All packets sent to the mouse which invole anything to do with rgb are 64 bytes long.
+ /// First Packet of rgb data transfer starts with 07030601 and next bytes are empty.
+ /// Next Packets contain actual rgb data and start with 0703060200000000
+ ///
+ public void SetColors(Dictionary keyColors)
+ {
+ foreach (var key in keyColors)
+ SetKeyColor(key.Key, key.Value);
+ }
+
+ public void SetColor(Color clr) //Set Color to every key on keyboard
+ {
+ foreach (BloodyPeripheralLed key in (BloodyPeripheralLed[])Enum.GetValues(typeof(BloodyPeripheralLed)))
+ SetKeyColor(key, clr);
+ }
+
+ public void SetKeyColor(BloodyPeripheralLed key, Color clr) //Puts data for each key into the byte array _keyColors
+ {
+ int offset = (int)key * 3;
+ _keyColors[offset + 0] = clr.R;
+ _keyColors[offset + 1] = clr.G;
+ _keyColors[offset + 2] = clr.B;
+ }
+ public bool Update() => WriteColorBuffer();
+ private bool WriteColorBuffer()
+ {
+ byte[] packet = new byte[64];
+ try
+ {
+ ColorPacketHeader.CopyTo(packet, 0); //Copies Color Header to packet
+ Array.Copy(_keyColors, 0, packet, 8, 16 * 3); //Copies rgb bytes to the packet
+ _ctrlStream.SetFeature(packet); //Sends packet as additional data in SetReport USBHID packet
+ return true;
+ }
+ catch (Exception e)
+ {
+ Disconnect();
+ return false;
+ }
+ }
+ #endregion
+ private static HidDevice GetFromUsages(IEnumerable devices, uint usagePage, uint usage)
+ {
+ foreach (var dev in devices) //For each dev in devices under Vid Pid get dev with right UsageID and UsagePage, if found return it.
+ {
+ try
+ {
+ var raw = dev.GetRawReportDescriptor();
+ var usages = EncodedItem.DecodeItems(raw, 0, raw.Length).Where(t => t.TagForGlobal == GlobalItemTag.UsagePage);
+ if (usages.Any(g => g.ItemType == ItemType.Global && g.DataValue == usagePage))
+ {
+ if (usages.Any(l => l.ItemType == ItemType.Local && l.DataValue == usage))
+ {
+ return dev;
+ }
+ }
+ }
+ catch
+ {
+ //failed to get the report descriptor, skip
+ }
+ }
+ return null;
+ }
+
+ public void Disconnect()
+ {
+ _ctrlStream?.Close();
+ }
+
+ #region IDisposable Support
+ ///
+ /// Disconnects the mouse when disposing
+ ///
+ public void Dispose() => Disconnect();
+ #endregion
+ }
+
+ public enum PeripheralType
+ {
+ MOUSE,
+ MOUSEPAD,
+ KEYBOARD,
+ }
+}
diff --git a/Project-Aurora/Project-Aurora/Devices/Clevo/ClevoDevice.cs b/Project-Aurora/Project-Aurora/Devices/Clevo/ClevoDevice.cs
index 96c629c8f..9baba65e8 100644
--- a/Project-Aurora/Project-Aurora/Devices/Clevo/ClevoDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Clevo/ClevoDevice.cs
@@ -1,48 +1,46 @@
-using Aurora.Utils;
-using Microsoft.Win32;
-using System;
+using System;
using System.Collections.Generic;
+using System.ComponentModel;
+using System.Diagnostics;
using System.Drawing;
-using System.Threading;
-using System.Threading.Tasks;
using Aurora.Settings;
-using System.ComponentModel;
+using Aurora.Utils;
+using Microsoft.Win32;
namespace Aurora.Devices.Clevo
{
class ClevoDevice : IDevice
{
// Generic Variables
- private string devicename = "Clevo Keyboard";
- private bool isInitialized = false;
+ private bool _isInitialized;
- private System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
- private long lastUpdateTime = 0;
+ private readonly Stopwatch _watch = new();
+ private long _lastUpdateTime;
// Settings
// TODO: Theese settings could be implemented with posibility of configuration from the Aurora GUI (Or external JSON, INI, Settings, etc)
- private bool useGlobalPeriphericColors = false;
- private bool useTouchpad = true;
- private bool updateLightsOnLogon = true;
+ private bool _useGlobalPeriphericColors = false;
+ private bool _useTouchpad = true;
+ private bool _updateLightsOnLogon = true;
// Clevo Controll Class
- private ClevoSetKBLED clevo = new ClevoSetKBLED();
+ private ClevoSetKBLED _clevo = new();
// Color Variables
- private Color ColorKBCenter = Color.Black;
- private Color ColorKBLeft = Color.Black;
- private Color ColorKBRight = Color.Black;
- private Color ColorTouchpad = Color.Black;
- private bool ColorUpdated;
- private Color LastColorKBCenter = Color.Black;
- private Color LastColorKBLeft = Color.Black;
- private Color LastColorKBRight = Color.Black;
- private Color LastColorTouchpad = Color.Black;
+ private Color _colorKbCenter = Color.Black;
+ private Color _colorKbLeft = Color.Black;
+ private Color _colorKbRight = Color.Black;
+ private Color _colorTouchpad = Color.Black;
+ private bool _colorUpdated;
+ private Color _lastColorKbCenter = Color.Black;
+ private Color _lastColorKbLeft = Color.Black;
+ private Color _lastColorKbRight = Color.Black;
+ private Color _lastColorTouchpad = Color.Black;
// Session Switch Handler
- private SessionSwitchEventHandler sseh;
+ private SessionSwitchEventHandler _sseh;
- public string DeviceName => devicename;
+ public string DeviceName => "Clevo Keyboard";
public string DeviceDetails => IsInitialized
? "Initialized"
@@ -50,249 +48,211 @@ class ClevoDevice : IDevice
public bool Initialize()
{
- if (!isInitialized)
+ if (_isInitialized) return _isInitialized;
+ try
{
- try
+ // Initialize Clevo WMI Interface Connection
+ if (!_clevo.Initialize())
{
- // Initialize Clevo WMI Interface Connection
- if (!clevo.Initialize())
- {
- throw new Exception("Could not connect to Clevo WMI Interface");
- }
-
- // Update Lights on Logon (Clevo sometimes resets the lights when you Hibernate, this would fix wrong colors)
- if (updateLightsOnLogon)
- {
- sseh = new SessionSwitchEventHandler(SystemEvents_SessionSwitch);
- SystemEvents.SessionSwitch += sseh;
- }
-
- // Mark Initialized = TRUE
- isInitialized = true;
- return true;
+ throw new Exception("Could not connect to Clevo WMI Interface");
}
- catch (Exception ex)
+
+ // Update Lights on Logon (Clevo sometimes resets the lights when you Hibernate, this would fix wrong colors)
+ if (_updateLightsOnLogon)
{
- Global.logger.Error("Clevo device, Exception! Message:" + ex);
+ _sseh = SystemEvents_SessionSwitch;
+ SystemEvents.SessionSwitch += _sseh;
}
- // Mark Initialized = FALSE
- isInitialized = false;
- return false;
+ // Mark Initialized = TRUE
+ _isInitialized = true;
+ return true;
+ }
+ catch (Exception ex)
+ {
+ Global.logger.Error("Clevo device, Exception! Message:" + ex);
}
- return isInitialized;
+ // Mark Initialized = FALSE
+ _isInitialized = false;
+ return false;
}
// Handle Logon Event
void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
- if (this.IsInitialized&& e.Reason.Equals(SessionSwitchReason.SessionUnlock))
+ if (IsInitialized&& e.Reason.Equals(SessionSwitchReason.SessionUnlock))
{ // Only Update when Logged In
- this.SendColorsToKeyboard(true);
+ SendColorsToKeyboard(true);
}
}
public void Shutdown()
{
- if (this.IsInitialized)
- {
- // Release Clevo Connection
- clevo.ResetKBLEDColors();
- clevo.Release();
-
- // Uninstantiate Session Switch
- if (sseh != null)
- {
- SystemEvents.SessionSwitch -= sseh;
- sseh = null;
- }
- }
+ if (!IsInitialized) return;
+ // Release Clevo Connection
+ _clevo.ResetKBLEDColors();
+ _clevo.Release();
+
+ // Uninstantiate Session Switch
+ if (_sseh == null) return;
+ SystemEvents.SessionSwitch -= _sseh;
+ _sseh = null;
}
public void Reset()
{
- if (this.IsInitialized)
- clevo.ResetKBLEDColors();
+ if (IsInitialized)
+ _clevo.ResetKBLEDColors();
}
- public bool Reconnect()
- {
- throw new NotImplementedException();
- }
-
- public bool IsInitialized => isInitialized;
-
- public bool IsConnected()
- {
- throw new NotImplementedException();
- }
-
- public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false) // Is this necessary?
- {
- throw new NotImplementedException();
- }
+ public bool IsInitialized => _isInitialized;
public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArgs e, bool forced = false)
{
if (e.Cancel) return false;
- watch.Restart();
- bool update_result = false;
+ _watch.Restart();
+ bool updateResult;
- Dictionary keyColors = colorComposition.keyColors;
+ Dictionary keyColors = colorComposition.KeyColors;
if (e.Cancel) return false;
try
{
- foreach (KeyValuePair pair in keyColors)
+ foreach (KeyValuePair pair in keyColors)
{
if (e.Cancel) return false;
- if (useGlobalPeriphericColors)
+ if (_useGlobalPeriphericColors)
{
- if (pair.Key == DeviceKeys.Peripheral) // This is not working anymore. Was working in MASTER
+ if (pair.Key == (int)DeviceKeys.Peripheral) // This is not working anymore. Was working in MASTER
{
- ColorKBLeft = pair.Value;
- ColorKBCenter = pair.Value;
- ColorKBRight = pair.Value;
- ColorTouchpad = pair.Value;
- ColorUpdated = true;
+ _colorKbLeft = pair.Value;
+ _colorKbCenter = pair.Value;
+ _colorKbRight = pair.Value;
+ _colorTouchpad = pair.Value;
+ _colorUpdated = true;
}
}
else
{
// TouchPad (It would be nice to have a Touchpad Peripheral)
- if (pair.Key == DeviceKeys.Peripheral)
+ if (pair.Key == (int)DeviceKeys.Peripheral)
{
- ColorTouchpad = pair.Value;
- ColorUpdated = true;
+ _colorTouchpad = pair.Value;
+ _colorUpdated = true;
}
}
}
if (e.Cancel) return false;
- if (!useGlobalPeriphericColors)
+ if (!_useGlobalPeriphericColors)
{
// Clevo 3 region keyboard
// Left Side (From ESC to Half Spacebar)
- BitmapRectangle keymap_esc = Effects.GetBitmappingFromDeviceKey(DeviceKeys.ESC);
- BitmapRectangle keymap_space = Effects.GetBitmappingFromDeviceKey(DeviceKeys.SPACE);
- PointF spacebar_center = keymap_space.Center; // Key Center
+ BitmapRectangle keymapEsc = Effects.GetBitmappingFromDeviceKey(DeviceKeys.ESC);
+ BitmapRectangle keymapSpace = Effects.GetBitmappingFromDeviceKey(DeviceKeys.SPACE);
+ PointF spacebarCenter = keymapSpace.Center; // Key Center
- int spacebar_x = (int)spacebar_center.X - keymap_esc.Left;
- int height = (int)spacebar_center.Y - keymap_esc.Top;
+ int spacebarX = (int)spacebarCenter.X - keymapEsc.Left;
+ int height = (int)spacebarCenter.Y - keymapEsc.Top;
- BitmapRectangle region_left =
- new BitmapRectangle(keymap_esc.Left, keymap_esc.Top, spacebar_x, height);
+ Rectangle regionLeft =
+ new Rectangle(keymapEsc.Left, keymapEsc.Top, spacebarX, height);
- Color RegionLeftColor;
+ Color regionLeftColor;
- lock (colorComposition.bitmapLock)
- RegionLeftColor = Utils.BitmapUtils.GetRegionColor(colorComposition.keyBitmap, region_left);
+ lock (colorComposition.KeyBitmap)
+ regionLeftColor = BitmapUtils.GetRegionColor(colorComposition.KeyBitmap, regionLeft);
- if (!ColorKBLeft.Equals(RegionLeftColor))
+ if (!_colorKbLeft.Equals(regionLeftColor))
{
- ColorKBLeft = RegionLeftColor;
- ColorUpdated = true;
+ _colorKbLeft = regionLeftColor;
+ _colorUpdated = true;
}
if (e.Cancel) return false;
// Center (Other Half of Spacebar to F11) - Clevo keyboards are very compact and the right side color bleeds over to the up/left/right/down keys)
- BitmapRectangle keymap_f11 = Effects.GetBitmappingFromDeviceKey(DeviceKeys.F11);
+ BitmapRectangle keymapF11 = Effects.GetBitmappingFromDeviceKey(DeviceKeys.F11);
- int f11_x_width = Convert.ToInt32(keymap_f11.Center.X - spacebar_x);
+ var f11XWidth = Convert.ToInt32(keymapF11.Center.X - spacebarX);
- BitmapRectangle region_center =
- new BitmapRectangle(spacebar_x, keymap_esc.Top, f11_x_width, height);
+ var regionCenter = new Rectangle(spacebarX, keymapEsc.Top, f11XWidth, height);
- Color RegionCenterColor;
- lock (colorComposition.bitmapLock)
- RegionCenterColor = Utils.BitmapUtils.GetRegionColor(colorComposition.keyBitmap, region_center);
+ Color regionCenterColor;
+ lock (colorComposition.KeyBitmap)
+ regionCenterColor = BitmapUtils.GetRegionColor(colorComposition.KeyBitmap, regionCenter);
- if (!ColorKBCenter.Equals(RegionCenterColor))
+ if (!_colorKbCenter.Equals(regionCenterColor))
{
- ColorKBCenter = RegionCenterColor;
- ColorUpdated = true;
+ _colorKbCenter = regionCenterColor;
+ _colorUpdated = true;
}
if (e.Cancel) return false;
// Right Side
- BitmapRectangle keymap_numenter = Effects.GetBitmappingFromDeviceKey(DeviceKeys.NUM_ENTER);
- BitmapRectangle region_right = new BitmapRectangle(Convert.ToInt32(keymap_f11.Center.X),
- keymap_esc.Top, Convert.ToInt32(keymap_numenter.Center.X - keymap_f11.Center.X), height);
+ BitmapRectangle keymapNumenter = Effects.GetBitmappingFromDeviceKey(DeviceKeys.NUM_ENTER);
+ Rectangle regionRight = new Rectangle(Convert.ToInt32(keymapF11.Center.X),
+ keymapEsc.Top, Convert.ToInt32(keymapNumenter.Center.X - keymapF11.Center.X), height);
- Color RegionRightColor;
- lock (colorComposition.bitmapLock)
- RegionRightColor = Utils.BitmapUtils.GetRegionColor(colorComposition.keyBitmap, region_right);
+ Color regionRightColor;
+ lock (colorComposition.KeyBitmap)
+ regionRightColor = BitmapUtils.GetRegionColor(colorComposition.KeyBitmap, regionRight);
- if (!ColorKBRight.Equals(RegionRightColor))
+ if (!_colorKbRight.Equals(regionRightColor))
{
- ColorKBRight = RegionRightColor;
- ColorUpdated = true;
+ _colorKbRight = regionRightColor;
+ _colorUpdated = true;
}
-
}
if (e.Cancel) return false;
SendColorsToKeyboard(forced);
- update_result = true;
+ updateResult = true;
}
catch (Exception exception)
{
Global.logger.Error("Clevo device, error when updating device. Error: " + exception);
- update_result = false;
+ updateResult = false;
}
- watch.Stop();
- lastUpdateTime = watch.ElapsedMilliseconds;
+ _watch.Stop();
+ _lastUpdateTime = _watch.ElapsedMilliseconds;
- return update_result;
+ return updateResult;
}
private void SendColorsToKeyboard(bool forced = false)
{
- if (forced || ColorUpdated)
+ if (!forced && !_colorUpdated) return;
+ if ((forced || !_lastColorKbLeft.Equals(_colorKbLeft)) && !Global.Configuration.DevicesDisableKeyboard)
{
- if ((forced || !LastColorKBLeft.Equals(ColorKBLeft)) && !Global.Configuration.DevicesDisableKeyboard)
- {
- // MYSTERY: // Why is it B,R,G instead of R,G,B? SetKBLED uses R,G,B but only B,R,G returns the correct colors. Is bitshifting different in C# than in C++?
- clevo.SetKBLED(ClevoSetKBLED.KBLEDAREA.ColorKBLeft, ColorKBLeft.B, ColorKBLeft.R, ColorKBLeft.G, (double)(ColorKBLeft.A / 0xff));
- LastColorKBLeft = ColorKBLeft;
- }
- if ((forced || !LastColorKBCenter.Equals(ColorKBCenter)) && !Global.Configuration.DevicesDisableKeyboard)
- {
- clevo.SetKBLED(ClevoSetKBLED.KBLEDAREA.ColorKBCenter, ColorKBCenter.B, ColorKBCenter.R, ColorKBCenter.G, (double)(ColorKBCenter.A / 0xff));
- LastColorKBCenter = ColorKBCenter;
- }
- if ((forced || !LastColorKBRight.Equals(ColorKBRight)) && !Global.Configuration.DevicesDisableKeyboard)
- {
- clevo.SetKBLED(ClevoSetKBLED.KBLEDAREA.ColorKBRight, ColorKBRight.B, ColorKBRight.R, ColorKBRight.G, (double)(ColorKBRight.A / 0xff));
- LastColorKBRight = ColorKBRight;
- }
- if ((forced || (useTouchpad && !LastColorTouchpad.Equals(ColorTouchpad))) && !Global.Configuration.DevicesDisableMouse)
- {
- clevo.SetKBLED(ClevoSetKBLED.KBLEDAREA.ColorTouchpad, ColorTouchpad.B, ColorTouchpad.R, ColorTouchpad.G, (double)(ColorTouchpad.A / 0xff));
- LastColorTouchpad = ColorTouchpad;
- }
- ColorUpdated = false;
+ // MYSTERY: // Why is it B,R,G instead of R,G,B? SetKBLED uses R,G,B but only B,R,G returns the correct colors. Is bitshifting different in C# than in C++?
+ _clevo.SetKBLED(ClevoSetKBLED.KBLEDAREA.ColorKBLeft, _colorKbLeft.B, _colorKbLeft.R, _colorKbLeft.G, _colorKbLeft.A / 0xff);
+ _lastColorKbLeft = _colorKbLeft;
}
+ if ((forced || !_lastColorKbCenter.Equals(_colorKbCenter)) && !Global.Configuration.DevicesDisableKeyboard)
+ {
+ _clevo.SetKBLED(ClevoSetKBLED.KBLEDAREA.ColorKBCenter, _colorKbCenter.B, _colorKbCenter.R, _colorKbCenter.G, _colorKbCenter.A / 0xff);
+ _lastColorKbCenter = _colorKbCenter;
+ }
+ if ((forced || !_lastColorKbRight.Equals(_colorKbRight)) && !Global.Configuration.DevicesDisableKeyboard)
+ {
+ _clevo.SetKBLED(ClevoSetKBLED.KBLEDAREA.ColorKBRight, _colorKbRight.B, _colorKbRight.R, _colorKbRight.G, _colorKbRight.A / 0xff);
+ _lastColorKbRight = _colorKbRight;
+ }
+ if ((forced || (_useTouchpad && !_lastColorTouchpad.Equals(_colorTouchpad))) && !Global.Configuration.DevicesDisableMouse)
+ {
+ _clevo.SetKBLED(ClevoSetKBLED.KBLEDAREA.ColorTouchpad, _colorTouchpad.B, _colorTouchpad.R, _colorTouchpad.G, _colorTouchpad.A / 0xff);
+ _lastColorTouchpad = _colorTouchpad;
+ }
+ _colorUpdated = false;
}
- // Device Status Methods
- public bool IsKeyboardConnected()
- {
- return isInitialized;
- }
-
- public bool IsPeripheralConnected()
- {
- return isInitialized;
- }
-
- public string DeviceUpdatePerformance => (isInitialized ? lastUpdateTime + " ms" : "");
+ public string DeviceUpdatePerformance => (_isInitialized ? _lastUpdateTime + " ms" : "");
- public VariableRegistry RegisteredVariables => new VariableRegistry();
+ public VariableRegistry RegisteredVariables => new();
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/CoolerMaster/CoolerMasterDevice.cs b/Project-Aurora/Project-Aurora/Devices/CoolerMaster/CoolerMasterDevice.cs
index 30b0564b1..65ac7842c 100755
--- a/Project-Aurora/Project-Aurora/Devices/CoolerMaster/CoolerMasterDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/CoolerMaster/CoolerMasterDevice.cs
@@ -54,7 +54,7 @@ public override void Shutdown()
IsInitialized = false;
}
- public override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ protected override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
foreach (var (dev, colors) in InitializedDevices)
{
@@ -75,11 +75,12 @@ public override bool UpdateDevice(Dictionary keyColors, DoWorkEventAr
foreach (var (dk, clr) in keyColors)
{
- DK key = dk;
+ DK key = (DeviceKeys)dk;
//HACK: the layouts for some reason switch backslash and enter
//around between ANSI and ISO needlessly. We swap them around here
- if (key == DK.ENTER && !Global.kbLayout.Loaded_Localization.IsANSI())
- key = DK.BACKSLASH;
+ //TODO fix it to work
+ /*if (key == DK.ENTER && !Global.kbLayout.Loaded_Localization.IsANSI())
+ key = DK.BACKSLASH;*/
if (dict.TryGetValue(key, out var position))
colors.KeyColor[position.row, position.column] = new Native.KEY_COLOR(ColorUtils.CorrectWithAlpha(clr));
diff --git a/Project-Aurora/Project-Aurora/Devices/Corsair/CorsairDevice.cs b/Project-Aurora/Project-Aurora/Devices/Corsair/CorsairDevice.cs
index 567319e5e..00e8cf731 100644
--- a/Project-Aurora/Project-Aurora/Devices/Corsair/CorsairDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Corsair/CorsairDevice.cs
@@ -1,8 +1,5 @@
using Aurora.Settings;
using Aurora.Utils;
-using CorsairRGB.NET;
-using CorsairRGB.NET.Enums;
-using CorsairRGB.NET.Structures;
using Mono.CSharp;
using System;
using System.Collections.Generic;
@@ -10,156 +7,174 @@
using System.Drawing;
using System.Linq;
using System.Text;
-using CUESDK = CorsairRGB.NET.CUE;
+using Corsair.CUE.SDK;
+using IronPython.Runtime;
+using SharpDX.Direct3D11;
+using System.Threading;
+using Aurora.Profiles.Discord.GSI.Nodes;
+using NLog.Fluent;
namespace Aurora.Devices.Corsair
{
- public class CorsairDevice : DefaultDevice
+ public class CorsairDeviceConnector : AuroraDeviceConnector
{
- public override string DeviceName => "Corsair";
-
- protected override string DeviceInfo => string.Join(", ", deviceInfos.Select(d => d.Model));
-
- private readonly List deviceInfos = new List();
-
- public override bool Initialize()
+ private SemaphoreSlim allDeviceUpdated;
+ protected override string ConnectorName => "Corsair";
+ private int deviceWaitCounter = 0;
+ protected override bool InitializeImpl()
{
- CUESDK.PerformProtocolHandshake();
- var error = CUESDK.GetLastError();
- if (error != CorsairError.Success)
+ CUESDK.CorsairPerformProtocolHandshake();
+
+ var error = CUESDK.CorsairGetLastError();
+ if (error != CorsairError.CE_Success)
{
LogError("Error: " + error);
- return IsInitialized = false;
+ return false;
}
+ allDeviceUpdated = new SemaphoreSlim(0, 1);
- for (int i = 0; i < CUESDK.GetDeviceCount(); i++)
- deviceInfos.Add(CUESDK.GetDeviceInfo(i));
+ for (int i = 0; i < CUESDK.CorsairGetDeviceCount(); i++)
+ {
+ RegisterDevice(CreateDevice(CUESDK.CorsairGetDeviceInfo(i), i));
+ }
- if (Global.Configuration.VarRegistry.GetVariable($"{DeviceName}_exclusive") && !CUESDK.RequestControl())
+ if (Global.Configuration.VarRegistry.GetVariable($"{ConnectorName}_exclusive") && !CUESDK.CorsairRequestControl(CorsairAccessMode.CAM_ExclusiveLightingControl))
{
- LogError("Error requesting cuesdk exclusive control:" + CUESDK.GetLastError());
+ LogError("Error requesting cuesdk exclusive control:" + CUESDK.CorsairGetLastError());
}
- CUESDK.SetLayerPriority(255);
+ CUESDK.CorsairSetLayerPriority(255);
- return IsInitialized = true;
+ return true;
+ }
+ private CorsairDevice CreateDevice(CorsairDeviceInfo info, int index)
+ {
+ switch (info.type)
+ {
+ case CorsairDeviceType.CDT_Keyboard:
+ return new CorsairKeyboard(info, index);
+ case CorsairDeviceType.CDT_Mouse:
+ case CorsairDeviceType.CDT_MouseMat:
+ return new CorsairDevice(info, index, AuroraDeviceType.Mouse);
+ case CorsairDeviceType.CDT_Headset:
+ case CorsairDeviceType.CDT_HeadsetStand:
+ return new CorsairDevice(info, index, AuroraDeviceType.Headset);
+ case CorsairDeviceType.CDT_CommanderPro:
+ case CorsairDeviceType.CDT_LightingNodePro:
+ case CorsairDeviceType.CDT_MemoryModule:
+ case CorsairDeviceType.CDT_Cooler:
+ case CorsairDeviceType.CDT_Motherboard:
+ case CorsairDeviceType.CDT_GraphicsCard:
+ default:
+ return new CorsairDevice(info, index);
+ }
}
- public override void Shutdown()
+ protected override void ShutdownImpl()
{
- CUESDK.SetLayerPriority(0);
- deviceInfos.Clear();
- CUESDK.ReleaseControl();
- IsInitialized = false;
+ CUESDK.CorsairSetLayerPriority(0);
+ CUESDK.CorsairReleaseControl(CorsairAccessMode.CAM_ExclusiveLightingControl);
+ allDeviceUpdated.Dispose();
}
- public override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ public override void DeviceLedUpdateFinished()
{
- if (deviceInfos.Count != CUESDK.GetDeviceCount())
+ if (Devices.Count != CUESDK.CorsairGetDeviceCount())
+ {
this.Reset();
+ return;
+ }
- for (int i = 0; i < deviceInfos.Count; i++)
+ deviceWaitCounter++;
+ if (deviceWaitCounter != Devices.Where(d => d.id.ViewPort != null).ToList().Count)
{
- var deviceInfo = deviceInfos[i];
- if (deviceInfo.Type == CorsairDeviceType.Keyboard && Global.Configuration.DevicesDisableKeyboard)
- continue;
+ allDeviceUpdated.Wait();
+ return;
+ }
+ CUESDK.CorsairSetLedsColorsFlushBuffer();
+ allDeviceUpdated.Release();
+ allDeviceUpdated = new SemaphoreSlim(0, 1);
+ deviceWaitCounter = 0;
+ }
+ protected override void RegisterVariables(VariableRegistry variableRegistry)
+ {
+ variableRegistry.Register($"{ConnectorName}_exclusive", false, "Request exclusive control");
+ }
+ }
- if ((deviceInfo.Type == CorsairDeviceType.Mouse || deviceInfo.Type == CorsairDeviceType.MouseMat)
- && Global.Configuration.DevicesDisableMouse)
- continue;
- if ((deviceInfo.Type == CorsairDeviceType.Headset || deviceInfo.Type == CorsairDeviceType.HeadsetStand)
- && Global.Configuration.DevicesDisableHeadset)
- continue;
+ public class CorsairDevice : AuroraDevice
+ {
+ protected override string DeviceName => deviceInfo.model;
- List colors = new List();
+ protected List colors = new List();
+ private AuroraDeviceType type;
+ protected override AuroraDeviceType AuroraDeviceType => type;
- if (LedMaps.MapsMap.TryGetValue(deviceInfo.Type, out var dict) && dict.Count != 0)
- {
- foreach (var led in keyColors)
- {
- if (dict.TryGetValue(led.Key, out var ledid))
- {
- colors.Add(new CorsairLedColor()
- {
- LedId = ledid,
- R = led.Value.R,
- G = led.Value.G,
- B = led.Value.B
- });
- }
- }
- }
- else
- {
- if (keyColors.TryGetValue(DeviceKeys.Peripheral_Logo, out var clr))
- {
- if(deviceInfo.Type == CorsairDeviceType.LightingNodePro || deviceInfo.Type == CorsairDeviceType.CommanderPro)
- {
- int totalLeds = 0;
- for (int j = 0; j < deviceInfo.Channels.ChannelsCount; j++)
- {
- totalLeds += deviceInfo.Channels.Channels[j].TotalLedsCount;
- foreach (var ledid in LedMaps.ChannelLeds[j])
- {
- if (colors.Count == totalLeds)
- continue;
-
- colors.Add(new CorsairLedColor()
- {
- LedId = ledid,
- R = clr.R,
- G = clr.G,
- B = clr.B
- });
- }
- }
- }
- else
- {
- CorsairLedId initial = GetInitialLedIdForDeviceType(deviceInfo.Type);
-
- if (initial == CorsairLedId.I_Invalid)
- continue;
-
- for(int j = 0; j < deviceInfo.LedsCount; j++)
- {
- colors.Add(new CorsairLedColor()
- {
- LedId = initial++,
- R = clr.R,
- G = clr.G,
- B = clr.B
- });
- }
- }
- }
- }
+ protected CorsairDeviceInfo deviceInfo;
+ protected int deviceIndex;
+ protected Dictionary KeyMapping = new Dictionary(new DeviceKey.EqualityComparer());
- if (colors.Count == 0)
- continue;
+ protected CorsairDevice() {}
+ public CorsairDevice(CorsairDeviceInfo deviceInfo, int index, AuroraDeviceType type = AuroraDeviceType.Unkown)
+ {
+ this.deviceInfo = deviceInfo;
+ deviceIndex = index;
+ this.type = type;
+ var ledPositions = CUESDK.CorsairGetLedPositionsByDeviceIndex(deviceIndex);
- CUESDK.SetDeviceColors(i, colors.ToArray());
+ int overIndex = 0;
+ foreach (var pos in ledPositions.pLedPosition)
+ {
+ KeyMapping[new DeviceKey(overIndex++, pos.ledId.ToString())] = pos.ledId;
+ colors.Add(new CorsairLedColor { ledId = pos.ledId });
}
-
- return CUESDK.Update();
}
-
- private CorsairLedId GetInitialLedIdForDeviceType(CorsairDeviceType type)
+ protected override bool UpdateDeviceImpl(DeviceColorComposition composition)
{
- return type switch
+ List colors = new List();
+ foreach (var (key, clr) in composition.KeyColors)
{
- CorsairDeviceType.Headset => CorsairLedId.H_LeftLogo,
- CorsairDeviceType.MemoryModule => CorsairLedId.DRAM_1,
- CorsairDeviceType.Cooler => CorsairLedId.LC_C1_1,
- CorsairDeviceType.Motherboard => CorsairLedId.MB_Zone1,
- CorsairDeviceType.GraphicsCard => CorsairLedId.GPU_Zone1,
- _ => CorsairLedId.I_Invalid
- };
+ if (KeyMapping.TryGetValue(key, out var ledid))
+ {
+ colors.Add(new CorsairLedColor()
+ {
+ ledId = ledid,
+ r = clr.R,
+ g = clr.G,
+ b = clr.B
+ });
+ }
+ }
+ CUESDK.CorsairSetLedsColorsBufferByDeviceIndex(deviceIndex, colors.Count, colors.ToArray());
+ return true;
}
- protected override void RegisterVariables(VariableRegistry variableRegistry)
+
+ public override List GetAllDeviceKey() => KeyMapping.Keys.ToList();
+ }
+ public class CorsairKeyboard : CorsairDevice
+ {
+ protected override AuroraDeviceType AuroraDeviceType => AuroraDeviceType.Keyboard;
+
+ public CorsairKeyboard(CorsairDeviceInfo deviceInfo, int index)
{
- variableRegistry.Register($"{DeviceName}_exclusive", false, "Request exclusive control");
+ this.deviceInfo = deviceInfo;
+ deviceIndex = index;
+ var ledPositions = CUESDK.CorsairGetLedPositionsByDeviceIndex(deviceIndex);
+ int overIndex = 0;
+ foreach (var pos in ledPositions.pLedPosition)
+ {
+ if (LedMaps.KeyboardLedMap.TryGetValue(pos.ledId, out var dk))
+ {
+ KeyMapping[new DeviceKey(dk)] = pos.ledId;
+ }
+ else
+ {
+ KeyMapping[new DeviceKey(500 + overIndex++, pos.ledId.ToString())] = pos.ledId;
+ }
+ colors.Add(new CorsairLedColor { ledId = pos.ledId });
+ }
+
}
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Corsair/LedMaps.cs b/Project-Aurora/Project-Aurora/Devices/Corsair/LedMaps.cs
index 5229f910f..948016601 100644
--- a/Project-Aurora/Project-Aurora/Devices/Corsair/LedMaps.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Corsair/LedMaps.cs
@@ -1,191 +1,229 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
using Aurora.Utils;
-using CorsairRGB.NET.Enums;
-using CorsairRGB.NET.Structures;
+using Corsair.CUE.SDK;
namespace Aurora.Devices.Corsair
{
internal static class LedMaps
{
- internal static readonly Dictionary KeyboardLedMap = new Dictionary()
+ internal static readonly Dictionary KeyboardLedMap = new()
{
- [DeviceKeys.ESC] = CorsairLedId.K_Escape,
- [DeviceKeys.F1] = CorsairLedId.K_F1,
- [DeviceKeys.F2] = CorsairLedId.K_F2,
- [DeviceKeys.F3] = CorsairLedId.K_F3,
- [DeviceKeys.F4] = CorsairLedId.K_F4,
- [DeviceKeys.F5] = CorsairLedId.K_F5,
- [DeviceKeys.F6] = CorsairLedId.K_F6,
- [DeviceKeys.F7] = CorsairLedId.K_F7,
- [DeviceKeys.F8] = CorsairLedId.K_F8,
- [DeviceKeys.F9] = CorsairLedId.K_F9,
- [DeviceKeys.F10] = CorsairLedId.K_F10,
- [DeviceKeys.F11] = CorsairLedId.K_F11,
- [DeviceKeys.TILDE] = CorsairLedId.K_GraveAccentAndTilde,
- [DeviceKeys.ONE] = CorsairLedId.K_1,
- [DeviceKeys.TWO] = CorsairLedId.K_2,
- [DeviceKeys.THREE] = CorsairLedId.K_3,
- [DeviceKeys.FOUR] = CorsairLedId.K_4,
- [DeviceKeys.FIVE] = CorsairLedId.K_5,
- [DeviceKeys.SIX] = CorsairLedId.K_6,
- [DeviceKeys.SEVEN] = CorsairLedId.K_7,
- [DeviceKeys.EIGHT] = CorsairLedId.K_8,
- [DeviceKeys.NINE] = CorsairLedId.K_9,
- [DeviceKeys.ZERO] = CorsairLedId.K_0,
- [DeviceKeys.MINUS] = CorsairLedId.K_MinusAndUnderscore,
- [DeviceKeys.TAB] = CorsairLedId.K_Tab,
- [DeviceKeys.Q] = CorsairLedId.K_Q,
- [DeviceKeys.W] = CorsairLedId.K_W,
- [DeviceKeys.E] = CorsairLedId.K_E,
- [DeviceKeys.R] = CorsairLedId.K_R,
- [DeviceKeys.T] = CorsairLedId.K_T,
- [DeviceKeys.Y] = CorsairLedId.K_Y,
- [DeviceKeys.U] = CorsairLedId.K_U,
- [DeviceKeys.I] = CorsairLedId.K_I,
- [DeviceKeys.O] = CorsairLedId.K_O,
- [DeviceKeys.P] = CorsairLedId.K_P,
- [DeviceKeys.OPEN_BRACKET] = CorsairLedId.K_BracketLeft,
- [DeviceKeys.CAPS_LOCK] = CorsairLedId.K_CapsLock,
- [DeviceKeys.A] = CorsairLedId.K_A,
- [DeviceKeys.S] = CorsairLedId.K_S,
- [DeviceKeys.D] = CorsairLedId.K_D,
- [DeviceKeys.F] = CorsairLedId.K_F,
- [DeviceKeys.G] = CorsairLedId.K_G,
- [DeviceKeys.H] = CorsairLedId.K_H,
- [DeviceKeys.J] = CorsairLedId.K_J,
- [DeviceKeys.K] = CorsairLedId.K_K,
- [DeviceKeys.L] = CorsairLedId.K_L,
- [DeviceKeys.SEMICOLON] = CorsairLedId.K_SemicolonAndColon,
- [DeviceKeys.APOSTROPHE] = CorsairLedId.K_ApostropheAndDoubleQuote,
- [DeviceKeys.LEFT_SHIFT] = CorsairLedId.K_LeftShift,
- [DeviceKeys.BACKSLASH_UK] = CorsairLedId.K_NonUsBackslash,
- [DeviceKeys.Z] = CorsairLedId.K_Z,
- [DeviceKeys.X] = CorsairLedId.K_X,
- [DeviceKeys.C] = CorsairLedId.K_C,
- [DeviceKeys.V] = CorsairLedId.K_V,
- [DeviceKeys.B] = CorsairLedId.K_B,
- [DeviceKeys.N] = CorsairLedId.K_N,
- [DeviceKeys.M] = CorsairLedId.K_M,
- [DeviceKeys.COMMA] = CorsairLedId.K_CommaAndLessThan,
- [DeviceKeys.PERIOD] = CorsairLedId.K_PeriodAndBiggerThan,
- [DeviceKeys.FORWARD_SLASH] = CorsairLedId.K_SlashAndQuestionMark,
- [DeviceKeys.LEFT_CONTROL] = CorsairLedId.K_LeftCtrl,
- [DeviceKeys.LEFT_WINDOWS] = CorsairLedId.K_LeftGui,
- [DeviceKeys.LEFT_ALT] = CorsairLedId.K_LeftAlt,
- //[DeviceKeys.Lang2] = CorsairLedId.K_Lang2,
- [DeviceKeys.SPACE] = CorsairLedId.K_Space,
- //[DeviceKeys.Lang1] = CorsairLedId.K_Lang1,
- //[DeviceKeys.International2] = CorsairLedId.K_International2,
- [DeviceKeys.RIGHT_ALT] = CorsairLedId.K_RightAlt,
- [DeviceKeys.RIGHT_WINDOWS] = CorsairLedId.K_RightGui,
- [DeviceKeys.APPLICATION_SELECT] = CorsairLedId.K_Application,
- //[DeviceKeys.LedProgramming] = CorsairLedId.K_LedProgramming,
- [DeviceKeys.BRIGHTNESS_SWITCH] = CorsairLedId.K_Brightness,
- [DeviceKeys.F12] = CorsairLedId.K_F12,
- [DeviceKeys.PRINT_SCREEN] = CorsairLedId.K_PrintScreen,
- [DeviceKeys.SCROLL_LOCK] = CorsairLedId.K_ScrollLock,
- [DeviceKeys.PAUSE_BREAK] = CorsairLedId.K_PauseBreak,
- [DeviceKeys.INSERT] = CorsairLedId.K_Insert,
- [DeviceKeys.HOME] = CorsairLedId.K_Home,
- [DeviceKeys.PAGE_UP] = CorsairLedId.K_PageUp,
- [DeviceKeys.CLOSE_BRACKET] = CorsairLedId.K_BracketRight,
- [DeviceKeys.BACKSLASH] = CorsairLedId.K_Backslash,
- [DeviceKeys.HASHTAG] = CorsairLedId.K_NonUsTilde,
- [DeviceKeys.ENTER] = CorsairLedId.K_Enter,
- //[DeviceKeys.International1] = CorsairLedId.K_International1,
- [DeviceKeys.EQUALS] = CorsairLedId.K_EqualsAndPlus,
- //[DeviceKeys.International3] = CorsairLedId.K_International3,
- [DeviceKeys.BACKSPACE] = CorsairLedId.K_Backspace,
- [DeviceKeys.DELETE] = CorsairLedId.K_Delete,
- [DeviceKeys.END] = CorsairLedId.K_End,
- [DeviceKeys.PAGE_DOWN] = CorsairLedId.K_PageDown,
- [DeviceKeys.RIGHT_SHIFT] = CorsairLedId.K_RightShift,
- [DeviceKeys.RIGHT_CONTROL] = CorsairLedId.K_RightCtrl,
- [DeviceKeys.ARROW_UP] = CorsairLedId.K_UpArrow,
- [DeviceKeys.ARROW_LEFT] = CorsairLedId.K_LeftArrow,
- [DeviceKeys.ARROW_DOWN] = CorsairLedId.K_DownArrow,
- [DeviceKeys.ARROW_RIGHT] = CorsairLedId.K_RightArrow,
- [DeviceKeys.LOCK_SWITCH] = CorsairLedId.K_WinLock,
- [DeviceKeys.VOLUME_MUTE] = CorsairLedId.K_Mute,
- [DeviceKeys.MEDIA_STOP] = CorsairLedId.K_Stop,
- [DeviceKeys.MEDIA_PREVIOUS] = CorsairLedId.K_ScanPreviousTrack,
- [DeviceKeys.MEDIA_PLAY_PAUSE] = CorsairLedId.K_PlayPause,
- [DeviceKeys.MEDIA_NEXT] = CorsairLedId.K_ScanNextTrack,
- [DeviceKeys.NUM_LOCK] = CorsairLedId.K_NumLock,
- [DeviceKeys.NUM_SLASH] = CorsairLedId.K_KeypadSlash,
- [DeviceKeys.NUM_ASTERISK] = CorsairLedId.K_KeypadAsterisk,
- [DeviceKeys.NUM_MINUS] = CorsairLedId.K_KeypadMinus,
- [DeviceKeys.NUM_PLUS] = CorsairLedId.K_KeypadPlus,
- [DeviceKeys.NUM_ENTER] = CorsairLedId.K_KeypadEnter,
- [DeviceKeys.NUM_SEVEN] = CorsairLedId.K_Keypad7,
- [DeviceKeys.NUM_EIGHT] = CorsairLedId.K_Keypad8,
- [DeviceKeys.NUM_NINE] = CorsairLedId.K_Keypad9,
- [DeviceKeys.NUM_ZEROZERO] = CorsairLedId.K_KeypadComma,
- [DeviceKeys.NUM_FOUR] = CorsairLedId.K_Keypad4,
- [DeviceKeys.NUM_FIVE] = CorsairLedId.K_Keypad5,
- [DeviceKeys.NUM_SIX] = CorsairLedId.K_Keypad6,
- [DeviceKeys.NUM_ONE] = CorsairLedId.K_Keypad1,
- [DeviceKeys.NUM_TWO] = CorsairLedId.K_Keypad2,
- [DeviceKeys.NUM_THREE] = CorsairLedId.K_Keypad3,
- [DeviceKeys.NUM_ZERO] = CorsairLedId.K_Keypad0,
- [DeviceKeys.NUM_PERIOD] = CorsairLedId.K_KeypadPeriodAndDelete,
- [DeviceKeys.G1] = CorsairLedId.K_G1,
- [DeviceKeys.G2] = CorsairLedId.K_G2,
- [DeviceKeys.G3] = CorsairLedId.K_G3,
- [DeviceKeys.G4] = CorsairLedId.K_G4,
- [DeviceKeys.G5] = CorsairLedId.K_G5,
- [DeviceKeys.G6] = CorsairLedId.K_G6,
- [DeviceKeys.G7] = CorsairLedId.K_G7,
- [DeviceKeys.G8] = CorsairLedId.K_G8,
- [DeviceKeys.G9] = CorsairLedId.K_G9,
- [DeviceKeys.G10] = CorsairLedId.K_G10,
- [DeviceKeys.VOLUME_UP] = CorsairLedId.K_VolumeUp,
- [DeviceKeys.VOLUME_DOWN] = CorsairLedId.K_VolumeDown,
- //[DeviceKeys.MR] = CorsairLedId.K_MR,
- //[DeviceKeys.M1] = CorsairLedId.K_M1,
- //[DeviceKeys.M2] = CorsairLedId.K_M2,
- //[DeviceKeys.M3] = CorsairLedId.K_M3,
- [DeviceKeys.G11] = CorsairLedId.K_G11,
- [DeviceKeys.G12] = CorsairLedId.K_G12,
- [DeviceKeys.G13] = CorsairLedId.K_G13,
- [DeviceKeys.G14] = CorsairLedId.K_G14,
- [DeviceKeys.G15] = CorsairLedId.K_G15,
- [DeviceKeys.G16] = CorsairLedId.K_G16,
- [DeviceKeys.G17] = CorsairLedId.K_G17,
- [DeviceKeys.G18] = CorsairLedId.K_G18,
- //[DeviceKeys.International5] = CorsairLedId.K_International5,
- //[DeviceKeys.International4] = CorsairLedId.K_International4,
- [DeviceKeys.FN_Key] = CorsairLedId.K_Fn,
- [DeviceKeys.LOCK_SWITCH] = CorsairLedId.K_WinLock,
- [DeviceKeys.BRIGHTNESS_SWITCH] = CorsairLedId.K_Brightness,
- [DeviceKeys.ADDITIONALLIGHT1] = CorsairLedId.KLP_Zone1,
- [DeviceKeys.ADDITIONALLIGHT2] = CorsairLedId.KLP_Zone2,
- [DeviceKeys.ADDITIONALLIGHT3] = CorsairLedId.KLP_Zone3,
- [DeviceKeys.ADDITIONALLIGHT4] = CorsairLedId.KLP_Zone4,
- [DeviceKeys.ADDITIONALLIGHT5] = CorsairLedId.KLP_Zone5,
- [DeviceKeys.ADDITIONALLIGHT6] = CorsairLedId.KLP_Zone6,
- [DeviceKeys.ADDITIONALLIGHT7] = CorsairLedId.KLP_Zone7,
- [DeviceKeys.ADDITIONALLIGHT8] = CorsairLedId.KLP_Zone8,
- [DeviceKeys.ADDITIONALLIGHT9] = CorsairLedId.KLP_Zone9,
- [DeviceKeys.ADDITIONALLIGHT10] = CorsairLedId.KLP_Zone10,
- [DeviceKeys.ADDITIONALLIGHT11] = CorsairLedId.KLP_Zone11,
- [DeviceKeys.ADDITIONALLIGHT12] = CorsairLedId.KLP_Zone12,
- [DeviceKeys.ADDITIONALLIGHT13] = CorsairLedId.KLP_Zone13,
- [DeviceKeys.ADDITIONALLIGHT14] = CorsairLedId.KLP_Zone14,
- [DeviceKeys.ADDITIONALLIGHT15] = CorsairLedId.KLP_Zone15,
- [DeviceKeys.ADDITIONALLIGHT16] = CorsairLedId.KLP_Zone16,
- [DeviceKeys.ADDITIONALLIGHT17] = CorsairLedId.KLP_Zone17,
- [DeviceKeys.ADDITIONALLIGHT18] = CorsairLedId.KLP_Zone18,
- [DeviceKeys.ADDITIONALLIGHT19] = CorsairLedId.KLP_Zone19
+ [CorsairLedId.CLK_Escape] = DeviceKeys.ESC,
+ [CorsairLedId.CLK_F1] = DeviceKeys.F1,
+ [CorsairLedId.CLK_F2] = DeviceKeys.F2,
+ [CorsairLedId.CLK_F3] = DeviceKeys.F3,
+ [CorsairLedId.CLK_F4] = DeviceKeys.F4,
+ [CorsairLedId.CLK_F5] = DeviceKeys.F5,
+ [CorsairLedId.CLK_F6] = DeviceKeys.F6,
+ [CorsairLedId.CLK_F7] = DeviceKeys.F7,
+ [CorsairLedId.CLK_F8] = DeviceKeys.F8,
+ [CorsairLedId.CLK_F9] = DeviceKeys.F9,
+ [CorsairLedId.CLK_F10] = DeviceKeys.F10,
+ [CorsairLedId.CLK_F11] = DeviceKeys.F11,
+ [CorsairLedId.CLK_GraveAccentAndTilde] = DeviceKeys.TILDE,
+ [CorsairLedId.CLK_1] = DeviceKeys.ONE,
+ [CorsairLedId.CLK_2] = DeviceKeys.TWO,
+ [CorsairLedId.CLK_3] = DeviceKeys.THREE,
+ [CorsairLedId.CLK_4] = DeviceKeys.FOUR,
+ [CorsairLedId.CLK_5] = DeviceKeys.FIVE,
+ [CorsairLedId.CLK_6] = DeviceKeys.SIX,
+ [CorsairLedId.CLK_7] = DeviceKeys.SEVEN,
+ [CorsairLedId.CLK_8] = DeviceKeys.EIGHT,
+ [CorsairLedId.CLK_9] = DeviceKeys.NINE,
+ [CorsairLedId.CLK_0] = DeviceKeys.ZERO,
+ [CorsairLedId.CLK_MinusAndUnderscore] = DeviceKeys.MINUS,
+ [CorsairLedId.CLK_Tab] = DeviceKeys.TAB,
+ [CorsairLedId.CLK_Q] = DeviceKeys.Q,
+ [CorsairLedId.CLK_W] = DeviceKeys.W,
+ [CorsairLedId.CLK_E] = DeviceKeys.E,
+ [CorsairLedId.CLK_R] = DeviceKeys.R,
+ [CorsairLedId.CLK_T] = DeviceKeys.T,
+ [CorsairLedId.CLK_Y] = DeviceKeys.Y,
+ [CorsairLedId.CLK_U] = DeviceKeys.U,
+ [CorsairLedId.CLK_I] = DeviceKeys.I,
+ [CorsairLedId.CLK_O] = DeviceKeys.O,
+ [CorsairLedId.CLK_P] = DeviceKeys.P,
+ [CorsairLedId.CLK_BracketLeft] = DeviceKeys.OPEN_BRACKET,
+ [CorsairLedId.CLK_CapsLock] = DeviceKeys.CAPS_LOCK,
+ [CorsairLedId.CLK_A] = DeviceKeys.A,
+ [CorsairLedId.CLK_S] = DeviceKeys.S,
+ [CorsairLedId.CLK_D] = DeviceKeys.D,
+ [CorsairLedId.CLK_F] = DeviceKeys.F,
+ [CorsairLedId.CLK_G] = DeviceKeys.G,
+ [CorsairLedId.CLK_H] = DeviceKeys.H,
+ [CorsairLedId.CLK_J] = DeviceKeys.J,
+ [CorsairLedId.CLK_K] = DeviceKeys.K,
+ [CorsairLedId.CLK_L] = DeviceKeys.L,
+ [CorsairLedId.CLK_SemicolonAndColon] = DeviceKeys.SEMICOLON,
+ [CorsairLedId.CLK_ApostropheAndDoubleQuote] = DeviceKeys.APOSTROPHE,
+ [CorsairLedId.CLK_LeftShift] = DeviceKeys.LEFT_SHIFT,
+ [CorsairLedId.CLK_NonUsBackslash] = DeviceKeys.BACKSLASH_UK,
+ [CorsairLedId.CLK_Z] = DeviceKeys.Z,
+ [CorsairLedId.CLK_X] = DeviceKeys.X,
+ [CorsairLedId.CLK_C] = DeviceKeys.C,
+ [CorsairLedId.CLK_V] = DeviceKeys.V,
+ [CorsairLedId.CLK_B] = DeviceKeys.B,
+ [CorsairLedId.CLK_N] = DeviceKeys.N,
+ [CorsairLedId.CLK_M] = DeviceKeys.M,
+ [CorsairLedId.CLK_CommaAndLessThan] = DeviceKeys.COMMA,
+ [CorsairLedId.CLK_PeriodAndBiggerThan] = DeviceKeys.PERIOD,
+ [CorsairLedId.CLK_SlashAndQuestionMark] = DeviceKeys.FORWARD_SLASH,
+ [CorsairLedId.CLK_LeftCtrl] = DeviceKeys.LEFT_CONTROL,
+ [CorsairLedId.CLK_LeftGui] = DeviceKeys.LEFT_WINDOWS,
+ [CorsairLedId.CLK_LeftAlt] = DeviceKeys.LEFT_ALT,
+ //[CorsairLedId.CLK_Lang2] = DeviceKeys.Lang2,
+ [CorsairLedId.CLK_Space] = DeviceKeys.SPACE,
+ //[CorsairLedId.CLK_Lang1] = DeviceKeys.Lang1,
+ // [CorsairLedId.CLK_International2] = DeviceKeys.International2,
+ [CorsairLedId.CLK_RightAlt] = DeviceKeys.RIGHT_ALT,
+ [CorsairLedId.CLK_RightGui] = DeviceKeys.RIGHT_WINDOWS,
+ [CorsairLedId.CLK_Application] = DeviceKeys.APPLICATION_SELECT,
+ //[CorsairLedId.CLK_LedProgramming] = DeviceKeys.LedProgramming,
+ [CorsairLedId.CLK_Brightness] = DeviceKeys.BRIGHTNESS_SWITCH,
+ [CorsairLedId.CLK_F12] = DeviceKeys.F12,
+ [CorsairLedId.CLK_PrintScreen] = DeviceKeys.PRINT_SCREEN,
+ [CorsairLedId.CLK_ScrollLock] = DeviceKeys.SCROLL_LOCK,
+ [CorsairLedId.CLK_PauseBreak] = DeviceKeys.PAUSE_BREAK,
+ [CorsairLedId.CLK_Insert] = DeviceKeys.INSERT,
+ [CorsairLedId.CLK_Home] = DeviceKeys.HOME,
+ [CorsairLedId.CLK_PageUp] = DeviceKeys.PAGE_UP,
+ [CorsairLedId.CLK_BracketRight] = DeviceKeys.CLOSE_BRACKET,
+ [CorsairLedId.CLK_Backslash] = DeviceKeys.BACKSLASH,
+ [CorsairLedId.CLK_NonUsTilde] = DeviceKeys.HASHTAG,
+ [CorsairLedId.CLK_Enter] = DeviceKeys.ENTER,
+ //[CorsairLedId.CLK_International1] = DeviceKeys.International1,
+ [CorsairLedId.CLK_EqualsAndPlus] = DeviceKeys.EQUALS,
+ //[CorsairLedId.CLK_International3] = DeviceKeys.International3,
+ [CorsairLedId.CLK_Backspace] = DeviceKeys.BACKSPACE,
+ [CorsairLedId.CLK_Delete] = DeviceKeys.DELETE,
+ [CorsairLedId.CLK_End] = DeviceKeys.END,
+ [CorsairLedId.CLK_PageDown] = DeviceKeys.PAGE_DOWN,
+ [CorsairLedId.CLK_RightShift] = DeviceKeys.RIGHT_SHIFT,
+ [CorsairLedId.CLK_RightCtrl] = DeviceKeys.RIGHT_CONTROL,
+ [CorsairLedId.CLK_UpArrow] = DeviceKeys.ARROW_UP,
+ [CorsairLedId.CLK_LeftArrow] = DeviceKeys.ARROW_LEFT,
+ [CorsairLedId.CLK_DownArrow] = DeviceKeys.ARROW_DOWN,
+ [CorsairLedId.CLK_RightArrow] = DeviceKeys.ARROW_RIGHT,
+ [CorsairLedId.CLK_WinLock] = DeviceKeys.LOCK_SWITCH,
+ [CorsairLedId.CLK_Mute] = DeviceKeys.VOLUME_MUTE,
+ [CorsairLedId.CLK_Stop] = DeviceKeys.MEDIA_STOP,
+ [CorsairLedId.CLK_ScanPreviousTrack] = DeviceKeys.MEDIA_PREVIOUS,
+ [CorsairLedId.CLK_PlayPause] = DeviceKeys.MEDIA_PLAY_PAUSE,
+ [CorsairLedId.CLK_ScanNextTrack] = DeviceKeys.MEDIA_NEXT,
+ [CorsairLedId.CLK_NumLock] = DeviceKeys.NUM_LOCK,
+ [CorsairLedId.CLK_KeypadSlash] = DeviceKeys.NUM_SLASH,
+ [CorsairLedId.CLK_KeypadAsterisk] = DeviceKeys.NUM_ASTERISK,
+ [CorsairLedId.CLK_KeypadMinus] = DeviceKeys.NUM_MINUS,
+ [CorsairLedId.CLK_KeypadPlus] = DeviceKeys.NUM_PLUS,
+ [CorsairLedId.CLK_KeypadEnter] = DeviceKeys.NUM_ENTER,
+ [CorsairLedId.CLK_Keypad7] = DeviceKeys.NUM_SEVEN,
+ [CorsairLedId.CLK_Keypad8] = DeviceKeys.NUM_EIGHT,
+ [CorsairLedId.CLK_Keypad9] = DeviceKeys.NUM_NINE,
+ [CorsairLedId.CLK_KeypadComma] = DeviceKeys.NUM_ZEROZERO,
+ [CorsairLedId.CLK_Keypad4] = DeviceKeys.NUM_FOUR,
+ [CorsairLedId.CLK_Keypad5] = DeviceKeys.NUM_FIVE,
+ [CorsairLedId.CLK_Keypad6] = DeviceKeys.NUM_SIX,
+ [CorsairLedId.CLK_Keypad1] = DeviceKeys.NUM_ONE,
+ [CorsairLedId.CLK_Keypad2] = DeviceKeys.NUM_TWO,
+ [CorsairLedId.CLK_Keypad3] = DeviceKeys.NUM_THREE,
+ [CorsairLedId.CLK_Keypad0] = DeviceKeys.NUM_ZERO,
+ [CorsairLedId.CLK_KeypadPeriodAndDelete] = DeviceKeys.NUM_PERIOD,
+ [CorsairLedId.CLK_G1] = DeviceKeys.G1,
+ [CorsairLedId.CLK_G2] = DeviceKeys.G2,
+ [CorsairLedId.CLK_G3] = DeviceKeys.G3,
+ [CorsairLedId.CLK_G4] = DeviceKeys.G4,
+ [CorsairLedId.CLK_G5] = DeviceKeys.G5,
+ [CorsairLedId.CLK_G6] = DeviceKeys.G6,
+ [CorsairLedId.CLK_G7] = DeviceKeys.G7,
+ [CorsairLedId.CLK_G8] = DeviceKeys.G8,
+ [CorsairLedId.CLK_G9] = DeviceKeys.G9,
+ [CorsairLedId.CLK_G10] = DeviceKeys.G10,
+ [CorsairLedId.CLK_VolumeUp] = DeviceKeys.VOLUME_UP,
+ [CorsairLedId.CLK_VolumeDown] = DeviceKeys.VOLUME_DOWN,
+ //[CorsairLedId.CLK_MR] = DeviceKeys.MR,
+ //[CorsairLedId.CLK_M1] = //DeviceKeys.M1,
+ //[CorsairLedId.CLK_M2] = //DeviceKeys.M2,
+ //[CorsairLedId.CLK_M3] = //DeviceKeys.M3,
+ [CorsairLedId.CLK_Logo] = DeviceKeys.LOGO,
+ [CorsairLedId.CLK_G11] = DeviceKeys.G11,
+ [CorsairLedId.CLK_G12] = DeviceKeys.G12,
+ [CorsairLedId.CLK_G13] = DeviceKeys.G13,
+ [CorsairLedId.CLK_G14] = DeviceKeys.G14,
+ [CorsairLedId.CLK_G15] = DeviceKeys.G15,
+ [CorsairLedId.CLK_G16] = DeviceKeys.G16,
+ [CorsairLedId.CLK_G17] = DeviceKeys.G17,
+ [CorsairLedId.CLK_G18] = DeviceKeys.G18,
+ //[CorsairLedId.CLK_International5] = //DeviceKeys.International5,
+ // [CorsairLedId.CLK_International4] = //DeviceKeys.International4,
+ [CorsairLedId.CLK_Fn] = DeviceKeys.FN_Key,
+ [CorsairLedId.CLK_WinLock] = DeviceKeys.LOCK_SWITCH,
+ [CorsairLedId.CLK_Brightness] = DeviceKeys.BRIGHTNESS_SWITCH,
+ [CorsairLedId.CLK_Logo] = DeviceKeys.LOGO,
+ [CorsairLedId.CLKLP_Zone1] = DeviceKeys.ADDITIONALLIGHT1,
+ [CorsairLedId.CLKLP_Zone2] = DeviceKeys.ADDITIONALLIGHT2,
+ [CorsairLedId.CLKLP_Zone3] = DeviceKeys.ADDITIONALLIGHT3,
+ [CorsairLedId.CLKLP_Zone4] = DeviceKeys.ADDITIONALLIGHT4,
+ [CorsairLedId.CLKLP_Zone5] = DeviceKeys.ADDITIONALLIGHT5,
+ [CorsairLedId.CLKLP_Zone6] = DeviceKeys.ADDITIONALLIGHT6,
+ [CorsairLedId.CLKLP_Zone7] = DeviceKeys.ADDITIONALLIGHT7,
+ [CorsairLedId.CLKLP_Zone8] = DeviceKeys.ADDITIONALLIGHT8,
+ [CorsairLedId.CLKLP_Zone9] = DeviceKeys.ADDITIONALLIGHT9,
+ [CorsairLedId.CLKLP_Zone10] = DeviceKeys.ADDITIONALLIGHT10,
+ [CorsairLedId.CLKLP_Zone11] = DeviceKeys.ADDITIONALLIGHT11,
+ [CorsairLedId.CLKLP_Zone12] = DeviceKeys.ADDITIONALLIGHT12,
+ [CorsairLedId.CLKLP_Zone13] = DeviceKeys.ADDITIONALLIGHT13,
+ [CorsairLedId.CLKLP_Zone14] = DeviceKeys.ADDITIONALLIGHT14,
+ [CorsairLedId.CLKLP_Zone15] = DeviceKeys.ADDITIONALLIGHT15,
+ [CorsairLedId.CLKLP_Zone16] = DeviceKeys.ADDITIONALLIGHT16,
+ [CorsairLedId.CLKLP_Zone17] = DeviceKeys.ADDITIONALLIGHT17,
+ [CorsairLedId.CLKLP_Zone18] = DeviceKeys.ADDITIONALLIGHT18,
+ [CorsairLedId.CLKLP_Zone19] = DeviceKeys.ADDITIONALLIGHT19,
+ [CorsairLedId.CLKLP_Zone20] = DeviceKeys.ADDITIONALLIGHT20,
+ [CorsairLedId.CLKLP_Zone21] = DeviceKeys.ADDITIONALLIGHT21,
+ [CorsairLedId.CLKLP_Zone22] = DeviceKeys.ADDITIONALLIGHT22,
+ [CorsairLedId.CLKLP_Zone23] = DeviceKeys.ADDITIONALLIGHT23,
+ [CorsairLedId.CLKLP_Zone24] = DeviceKeys.ADDITIONALLIGHT24,
+ [CorsairLedId.CLKLP_Zone25] = DeviceKeys.ADDITIONALLIGHT25,
+ [CorsairLedId.CLKLP_Zone26] = DeviceKeys.ADDITIONALLIGHT26,
+ [CorsairLedId.CLKLP_Zone27] = DeviceKeys.ADDITIONALLIGHT27,
+ [CorsairLedId.CLKLP_Zone28] = DeviceKeys.ADDITIONALLIGHT28,
+ [CorsairLedId.CLKLP_Zone29] = DeviceKeys.ADDITIONALLIGHT29,
+ [CorsairLedId.CLKLP_Zone30] = DeviceKeys.ADDITIONALLIGHT30,
+ [CorsairLedId.CLKLP_Zone31] = DeviceKeys.ADDITIONALLIGHT31,
+ [CorsairLedId.CLKLP_Zone32] = DeviceKeys.ADDITIONALLIGHT32,
+ [CorsairLedId.CLKLP_Zone33] = DeviceKeys.ADDITIONALLIGHT33,
+ [CorsairLedId.CLKLP_Zone34] = DeviceKeys.ADDITIONALLIGHT34,
+ [CorsairLedId.CLKLP_Zone35] = DeviceKeys.ADDITIONALLIGHT35,
+ [CorsairLedId.CLKLP_Zone36] = DeviceKeys.ADDITIONALLIGHT36,
+ [CorsairLedId.CLKLP_Zone37] = DeviceKeys.ADDITIONALLIGHT37,
+ [CorsairLedId.CLKLP_Zone38] = DeviceKeys.ADDITIONALLIGHT38,
+ [CorsairLedId.CLKLP_Zone39] = DeviceKeys.ADDITIONALLIGHT39,
+ [CorsairLedId.CLKLP_Zone40] = DeviceKeys.ADDITIONALLIGHT40,
+ [CorsairLedId.CLKLP_Zone41] = DeviceKeys.ADDITIONALLIGHT41,
+ [CorsairLedId.CLKLP_Zone42] = DeviceKeys.ADDITIONALLIGHT42,
+ [CorsairLedId.CLKLP_Zone43] = DeviceKeys.ADDITIONALLIGHT43,
+ [CorsairLedId.CLKLP_Zone44] = DeviceKeys.ADDITIONALLIGHT44,
+ [CorsairLedId.CLKLP_Zone45] = DeviceKeys.ADDITIONALLIGHT45,
+ [CorsairLedId.CLH_LeftLogo] = DeviceKeys.LOGOLEFT,
+ [CorsairLedId.CLI_Oem2] = DeviceKeys.LOGOMIDDLE,
+ [CorsairLedId.CLI_Oem3] = DeviceKeys.LOGORIGHT,
+ [CorsairLedId.CLI_Oem4] = DeviceKeys.WHEELCENTER,
+ [CorsairLedId.CLI_Oem5] = DeviceKeys.WHEEL1,
+ [CorsairLedId.CLI_Oem6] = DeviceKeys.WHEEL2,
+ [CorsairLedId.CLI_Oem7] = DeviceKeys.WHEEL3,
+ [CorsairLedId.CLI_Oem8] = DeviceKeys.WHEEL4,
+ [CorsairLedId.CLI_Oem9] = DeviceKeys.WHEEL5,
+ [CorsairLedId.CLI_Oem10] = DeviceKeys.WHEEL6,
+ [CorsairLedId.CLI_Oem11] = DeviceKeys.WHEEL7 ,
+ [CorsairLedId.CLI_Oem12] = DeviceKeys.WHEEL8,
+ [CorsairLedId.CLK_Profile] = DeviceKeys.PROFILESWITCH,
};
- internal static readonly Dictionary MouseMatLedMap = new Dictionary()
+ /*internal static readonly Dictionary MouseMatLedMap = new Dictionary()
{
- [DeviceKeys.MOUSEPADLIGHT1] = CorsairLedId.MM_Zone1,
+ [DeviceKeys.MOUSEPADLIGHT1] = CorsairLedId.CLMM_Zone1,
[DeviceKeys.MOUSEPADLIGHT2] = CorsairLedId.MM_Zone2,
[DeviceKeys.MOUSEPADLIGHT3] = CorsairLedId.MM_Zone3,
[DeviceKeys.MOUSEPADLIGHT4] = CorsairLedId.MM_Zone4,
@@ -223,14 +261,14 @@ internal static class LedMaps
[DeviceKeys.ADDITIONALLIGHT1] = CorsairLedId.M_4,//TODO
[DeviceKeys.ADDITIONALLIGHT2] = CorsairLedId.M_5,
[DeviceKeys.ADDITIONALLIGHT3] = CorsairLedId.M_6
- };
+ };*/
- internal static readonly Dictionary> MapsMap = new Dictionary>()
+ internal static readonly Dictionary> MapsMap = new Dictionary>()
{
- [CorsairDeviceType.Keyboard] = KeyboardLedMap,
- [CorsairDeviceType.Mouse] = MouseLedMap,
- [CorsairDeviceType.MouseMat] = MouseMatLedMap,
- [CorsairDeviceType.HeadsetStand] = HeadsetStandLedMap,
+ [CorsairDeviceType.CDT_Keyboard] = KeyboardLedMap,
+ /*[CorsairDeviceType.CDT_Mouse] = MouseLedMap,
+ [CorsairDeviceType.CDT_MouseMat] = MouseMatLedMap,
+ [CorsairDeviceType.CDT_HeadsetStand] = HeadsetStandLedMap,*/
};
internal static readonly List Channel1LedIds = EnumUtils.GetEnumValues()
@@ -252,6 +290,6 @@ internal static class LedMaps
Channel3LedIds
};
- public static string ToString(this CorsairLedColor corsairLedColor) => $"{corsairLedColor.LedId}, ({corsairLedColor.R},{corsairLedColor.G},{corsairLedColor.B})";
+ public static string ToString(this CorsairLedColor corsairLedColor) => $"{corsairLedColor.ledId}, ({corsairLedColor.r},{corsairLedColor.g},{corsairLedColor.b})";
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Creative/SoundBlasterXDevice.cs b/Project-Aurora/Project-Aurora/Devices/Creative/SoundBlasterXDevice.cs
index 80e2b2271..160fa891f 100644
--- a/Project-Aurora/Project-Aurora/Devices/Creative/SoundBlasterXDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Creative/SoundBlasterXDevice.cs
@@ -317,7 +317,7 @@ public bool IsConnected()
public bool IsInitialized => (sbKeyboard != null || sbMouse != null);
- public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
uint maxKbLength = 0;
Dictionary> kbIndices = null;
@@ -325,13 +325,13 @@ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArg
kbIndices = new Dictionary>();
LedColour[] mouseColors = null;
- foreach (KeyValuePair kv in keyColors)
+ foreach (KeyValuePair kv in keyColors)
{
if (e.Cancel) return false;
if (kbIndices != null)
{
- var kbLedIdx = GetKeyboardMappingLedIndex(kv.Key);
+ var kbLedIdx = GetKeyboardMappingLedIndex((DeviceKeys)kv.Key);
if (kbLedIdx != Keyboard_LEDIndex.NotApplicable)
{
if (!kbIndices.ContainsKey(kv.Value))
@@ -345,7 +345,7 @@ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArg
}
if (sbMouse != null)
{
- int moosIdx = GetMouseMappingIndex(kv.Key);
+ int moosIdx = GetMouseMappingIndex((DeviceKeys)kv.Key);
if (moosIdx >= 0 && moosIdx <= MouseMapping.Length)
{
if (mouseColors == null)
@@ -491,7 +491,7 @@ public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArg
{
watch.Restart();
- bool update_result = UpdateDevice(colorComposition.keyColors, e, forced);
+ bool update_result = UpdateDevice(colorComposition.KeyColors, e, forced);
watch.Stop();
lastUpdateTime = watch.ElapsedMilliseconds;
diff --git a/Project-Aurora/Project-Aurora/Devices/DefaultDevice.cs b/Project-Aurora/Project-Aurora/Devices/DefaultDevice.cs
index d2d2f730a..7b5d3b94d 100644
--- a/Project-Aurora/Project-Aurora/Devices/DefaultDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/DefaultDevice.cs
@@ -12,8 +12,9 @@ namespace Aurora.Devices
{
public abstract class DefaultDevice : IDevice
{
- private readonly Stopwatch watch = new Stopwatch();
+ private readonly Stopwatch watch = new();
private long lastUpdateTime;
+ private long updateTime;
public abstract string DeviceName { get; }
@@ -24,7 +25,7 @@ public abstract class DefaultDevice : IDevice
: "Not Initialized";
public string DeviceUpdatePerformance => IsInitialized
- ? lastUpdateTime + " ms"
+ ? lastUpdateTime + "(" + updateTime + ")" + " ms"
: "";
public virtual bool IsInitialized { get; protected set; }
@@ -38,18 +39,20 @@ public virtual void Reset()
Initialize();
}
- public abstract bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false);
+ protected abstract bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false);
+ private readonly Stopwatch _tempStopWatch = new();
public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArgs e, bool forced = false)
{
- watch.Restart();
-
- bool update_result = UpdateDevice(colorComposition.keyColors, e, forced);
+ _tempStopWatch.Restart();
+ var updateResult = UpdateDevice(colorComposition.KeyColors, e, forced);
- watch.Stop();
+ if (!updateResult) return updateResult;
lastUpdateTime = watch.ElapsedMilliseconds;
+ updateTime = _tempStopWatch.ElapsedMilliseconds;
+ watch.Restart();
- return update_result;
+ return updateResult;
}
#region Variables
diff --git a/Project-Aurora/Project-Aurora/Devices/DeviceKeys.cs b/Project-Aurora/Project-Aurora/Devices/DeviceKeys.cs
old mode 100644
new mode 100755
index 96b758d91..1023bd8e3
--- a/Project-Aurora/Project-Aurora/Devices/DeviceKeys.cs
+++ b/Project-Aurora/Project-Aurora/Devices/DeviceKeys.cs
@@ -1295,7 +1295,13 @@ public enum DeviceKeys
/// Calculator Key
///
[Description("Calculator")]
- CALC = 216,
+ CALC = 216,
+
+ ///
+ /// Power Key
+ ///
+ [Description("Power")]
+ POWER = 217,
///
/// Peripheral Light 1
@@ -1303,6 +1309,7 @@ public enum DeviceKeys
[Description("Peripheral Light 1")]
PERIPHERAL_LIGHT1 = 217,
+
///
/// Peripheral Light 2
///
@@ -1574,10 +1581,107 @@ public enum DeviceKeys
[Description("Additional Light 57")]
ADDITIONALLIGHT57 = 274,
+ ///
+ /// Additional Light 58
+ ///
+ [Description("Additional Light 58")]
+ ADDITIONALLIGHT58 = 275,
+
+ ///
+ /// Additional Light 59
+ ///
+ [Description("Additional Light 59")]
+ ADDITIONALLIGHT59 = 276,
+
+ ///
+ /// Additional Light 60
+ ///
+ [Description("Additional Light 60")]
+ ADDITIONALLIGHT60 = 277,
+
+ ///
+ /// Left Part of Logo
+ ///
+ [Description("Left Part of Logo")]
+ LOGOLEFT = 278,
+
+ ///
+ /// Middle Part of Logo
+ ///
+ [Description("Middle Part of Logo")]
+ LOGOMIDDLE = 279,
+
+ ///
+ /// Right Part of Logo
+ ///
+ [Description("Right Part of Logo")]
+ LOGORIGHT = 280,
+
+ ///
+ /// Wheel Center
+ ///
+ [Description("Wheel Center")]
+ WHEELCENTER = 281,
+
+ ///
+ /// Wheel 1
+ ///
+ [Description("Wheel 1")]
+ WHEEL1 = 282,
+
+ ///
+ /// Wheel 2
+ ///
+ [Description("Wheel 2")]
+ WHEEL2 = 283,
+
+ ///
+ /// Wheel 3
+ ///
+ [Description("Wheel 3")]
+ WHEEL3 = 284,
+
+ ///
+ /// Wheel4
+ ///
+ [Description("Wheel 4")]
+ WHEEL4 = 285,
+
+ ///
+ /// Wheel 5
+ ///
+ [Description("Wheel 5")]
+ WHEEL5 = 286,
+
+ ///
+ /// Wheel 6
+ ///
+ [Description("Wheel 6")]
+ WHEEL6 = 287,
+
+ ///
+ /// Wheel 7
+ ///
+ [Description("Wheel 7")]
+ WHEEL7 = 288,
+
+ ///
+ /// Wheel 8
+ ///
+ [Description("Wheel 8")]
+ WHEEL8 = 289,
+
+ ///
+ /// Profile Switch
+ ///
+ [Description("Profile Switch")]
+ PROFILESWITCH = 290,
+
///
/// None
///
[Description("None")]
NONE = -1,
};
+
}
diff --git a/Project-Aurora/Project-Aurora/Devices/DeviceManager.cs b/Project-Aurora/Project-Aurora/Devices/DeviceManager.cs
index 1d799df90..c31c0ef38 100644
--- a/Project-Aurora/Project-Aurora/Devices/DeviceManager.cs
+++ b/Project-Aurora/Project-Aurora/Devices/DeviceManager.cs
@@ -10,64 +10,53 @@
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
+using Amib.Threading;
namespace Aurora.Devices
{
public class DeviceContainer
{
- public IDevice Device { get; set; }
+ public IDevice Device { get; }
- public BackgroundWorker Worker = new BackgroundWorker();
- public Thread UpdateThread { get; set; } = null;
+ private readonly SmartThreadPool _worker = new(1000, 1);
- private Tuple currentComp = null;
- private bool newFrame = false;
+ private Tuple currentComp;
- public readonly object actionLock = new object();
+ public readonly object actionLock = new();
+ private readonly Action _updateAction;
public DeviceContainer(IDevice device)
{
- this.Device = device;
- Worker.DoWork += WorkerOnDoWork;
- Worker.RunWorkerCompleted += (sender, args) =>
+ Device = device;
+ var args = new DoWorkEventArgs(null);
+ _updateAction = () =>
{
- lock (Worker)
- {
- if (newFrame && !Worker.IsBusy)
- Worker.RunWorkerAsync();
- }
+ WorkerOnDoWork(this, args);
};
- //Worker.WorkerSupportsCancellation = true;
}
private void WorkerOnDoWork(object sender, DoWorkEventArgs doWorkEventArgs)
{
- newFrame = false;
lock(actionLock)
{
Device.UpdateDevice(currentComp.Item1, doWorkEventArgs,
currentComp.Item2);
}
}
-
public void UpdateDevice(DeviceColorComposition composition, bool forced = false)
{
- newFrame = true;
currentComp = new Tuple(composition, forced);
- lock (Worker)
+ if (_worker.WaitingCallbacks < 1)
{
- if (Worker.IsBusy)
- return;
- else
- Worker.RunWorkerAsync();
+ _worker.QueueWorkItem(_updateAction);
}
}
}
public class DeviceManager
{
- private const int RETRY_INTERVAL = 10000;
- private const int RETRY_ATTEMPTS = 5;
+ private const int RETRY_INTERVAL = 2000;
+ private const int RETRY_ATTEMPTS = 6;
private bool _InitializeOnceAllowed;
private bool suspended;
private bool resumed;
@@ -82,8 +71,9 @@ private set
}
}
- public List DeviceContainers { get; } = new List();
-
+ public List DeviceContainers { get; } = new();
+ public List DeviceConnectors { get; } = new List();
+ public IEnumerable IndividualDevices => DeviceConnectors.SelectMany(d => d.Devices);
public IEnumerable InitializedDeviceContainers => DeviceContainers.Where(d => d.Device.IsInitialized);
public event EventHandler RetryAttemptsChanged;
@@ -167,6 +157,7 @@ private void AddDevicesFromAssembly()
where typeof(IDevice).IsAssignableFrom(type)
&& !type.IsAbstract
&& type != typeof(ScriptedDevice.ScriptedDevice)
+ && type != typeof(OldAuroraDeviceWrapper)
let inst = (IDevice)Activator.CreateInstance(type)
orderby inst.DeviceName
select inst;
@@ -175,6 +166,12 @@ orderby inst.DeviceName
{
DeviceContainers.Add(new DeviceContainer(inst));
}
+ var CorsairConnector = new Corsair.CorsairDeviceConnector();
+ DeviceContainers.Add(new DeviceContainer(new OldAuroraDeviceWrapper(CorsairConnector)));
+ DeviceConnectors.Add(CorsairConnector);
+ var OpenRGBConnector = new OpenRGB.OpenRGBDeviceConnector();
+ DeviceContainers.Add(new DeviceContainer(new OldAuroraDeviceWrapper(OpenRGBConnector)));
+ DeviceConnectors.Add(OpenRGBConnector);
}
private void AddDevicesFromDlls(string dllFolder)
@@ -251,8 +248,7 @@ private void RetryAll()
{
if (dc.Device.IsInitialized || Global.Configuration.DevicesDisabled.Contains(dc.Device.GetType()))
continue;
-
- lock(dc.actionLock)
+ lock (dc.actionLock)
dc.Device.Initialize();
}
RetryAttempts--;
@@ -295,6 +291,7 @@ public void InitializeDevices()
Global.logger.Info(s);
}
+ DeviceConnectors.ForEach(dc => dc.Initialize());
if (devicesToRetry > 0)
Task.Run(RetryAll);
@@ -307,9 +304,12 @@ public void ShutdownDevices()
foreach (var dc in InitializedDeviceContainers)
{
lock (dc.actionLock)
+ {
dc.Device.Shutdown();
+ }
Global.logger.Info($"[Device][{dc.Device.DeviceName}] Shutdown");
}
+ DeviceConnectors.ForEach(dc => dc.Shutdown());
}
public void ResetDevices()
@@ -317,16 +317,49 @@ public void ResetDevices()
foreach (var dc in InitializedDeviceContainers)
{
lock (dc.actionLock)
+ {
dc.Device.Reset();
+ }
}
+ DeviceConnectors.ForEach(dc => dc.Reset());
}
- public void UpdateDevices(DeviceColorComposition composition, bool forced = false)
+ public void RegisterViewPort(ref UniqueDeviceId devicId, int viewPort)
+ {
+ foreach (var dc in IndividualDevices)
+ {
+ if (dc.id?.ViewPort == viewPort)
+ dc.id.ViewPort = null;
+ }
+ devicId.ViewPort = viewPort;
+ foreach (var dc in IndividualDevices)
+ {
+ if (dc.id == devicId)
+ dc.id = devicId;
+ }
+ }
+ public void UpdateDevices(Dictionary compositionList, bool forced = false)
{
foreach (var dc in InitializedDeviceContainers)
{
lock (dc.actionLock)
- dc.UpdateDevice(composition, forced);
+ {
+
+ foreach (var composition in compositionList)
+ {
+ if (!IndividualDevices.Where(dc => dc.id?.ViewPort == composition.Key).Any())
+ dc.UpdateDevice(composition.Value, forced);
+ }
+
+ }
+ }
+ foreach (var item in compositionList)
+ {
+ var dc = IndividualDevices.Where(d => d.IsConnected() && d.id.ViewPort == item.Key);
+ if (dc.Any())
+ {
+ dc.First().UpdateDevice(item.Value);
+ }
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Drevo/DrevoDevice.cs b/Project-Aurora/Project-Aurora/Devices/Drevo/DrevoDevice.cs
index f93dee4ae..14394340a 100644
--- a/Project-Aurora/Project-Aurora/Devices/Drevo/DrevoDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Drevo/DrevoDevice.cs
@@ -1,4 +1,5 @@
-using System;
+using Aurora.Utils;
+using System;
using DrevoRadi;
using System.Collections.Generic;
using System.ComponentModel;
@@ -54,10 +55,11 @@ public override void Shutdown()
}
}
- public override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ /// Updates the device with a specified color arrangement.
+ protected override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
- if (!IsInitialized)
- return false;
+ if (e.Cancel) return false;
+ if (!IsInitialized) return false;
try
{
@@ -68,15 +70,15 @@ public override bool UpdateDevice(Dictionary keyColors, DoWor
bitmap[3] = 0x7F;
int index = 0;
- foreach (var key in keyColors)
+ foreach (var (dk, clr) in keyColors)
{
- index = DrevoRadiSDK.ToDrevoBitmap((int)key.Key);
+ index = DrevoRadiSDK.ToDrevoBitmap(dk);
if (index != -1)
{
index = index * 3 + 4;
- bitmap[index] = key.Value.R;
- bitmap[index + 1] = key.Value.G;
- bitmap[index + 2] = key.Value.B;
+ bitmap[index] = clr.R;
+ bitmap[index + 1] = clr.G;
+ bitmap[index + 2] = clr.B;
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Dualshock4/Dualshock4Device.cs b/Project-Aurora/Project-Aurora/Devices/Dualshock4/Dualshock4Device.cs
index ea8738188..af764ae1e 100755
--- a/Project-Aurora/Project-Aurora/Devices/Dualshock4/Dualshock4Device.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Dualshock4/Dualshock4Device.cs
@@ -122,7 +122,6 @@ private void DeviceListChanged(object sender, HidSharp.DeviceListChangedEventArg
if (DS4Devices.getDS4Controllers().Count() != devices.Count)
Reset();
}
-
public override bool Initialize()
{
if (IsInitialized)
@@ -154,9 +153,10 @@ public override void Shutdown()
isDisconnecting = false;
}
- public override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+
+ protected override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
- if (keyColors.TryGetValue(key, out var clr))
+ if (keyColors.TryGetValue((int)key, out var clr))
{
foreach (var dev in devices)
{
diff --git a/Project-Aurora/Project-Aurora/Devices/Ducky/DuckyDevice.cs b/Project-Aurora/Project-Aurora/Devices/Ducky/DuckyDevice.cs
index be09db173..7f856da12 100644
--- a/Project-Aurora/Project-Aurora/Devices/Ducky/DuckyDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Ducky/DuckyDevice.cs
@@ -129,16 +129,16 @@ public bool IsPeripheralConnected()
return isInitialized;
}
- public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
- foreach (KeyValuePair kc in keyColors)
+ foreach (KeyValuePair kc in keyColors)
{
//This keyboard doesn't take alpha (transparency) values, so we do this:
processedColor = ColorUtils.CorrectWithAlpha(kc.Value);
//This if statement grabs the packet offset from the key that Aurora wants to set, using DuckyColourOffsetMap.
//It also checks whether the key exists in the Dictionary, and if not, doesn't try and set the key colour.
- if(!DuckyRGBMappings.DuckyColourOffsetMap.TryGetValue(kc.Key, out currentKeyOffset)){
+ if(!DuckyRGBMappings.DuckyColourOffsetMap.TryGetValue((DeviceKeys)kc.Key, out currentKeyOffset)){
continue;
}
@@ -221,7 +221,7 @@ public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArg
{
watch.Restart();
- bool update_result = UpdateDevice(colorComposition.keyColors, e, forced);
+ bool update_result = UpdateDevice(colorComposition.KeyColors, e, forced);
watch.Stop();
lastUpdateTime = watch.ElapsedMilliseconds;
diff --git a/Project-Aurora/Project-Aurora/Devices/IDevice.cs b/Project-Aurora/Project-Aurora/Devices/IDevice.cs
index 7ed543f64..a6775b57e 100644
--- a/Project-Aurora/Project-Aurora/Devices/IDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/IDevice.cs
@@ -1,8 +1,6 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
-using System.Threading;
-using System.Threading.Tasks;
using Aurora.Settings;
namespace Aurora.Devices
@@ -12,9 +10,8 @@ namespace Aurora.Devices
///
public class DeviceColorComposition
{
- public readonly object bitmapLock = new object();
- public Dictionary keyColors;
- public Bitmap keyBitmap;
+ public Dictionary KeyColors;
+ public Bitmap KeyBitmap;
}
///
@@ -67,14 +64,6 @@ public interface IDevice
///
void Reset();
- ///
- /// Updates the device with a specified color arrangement.
- ///
- /// A dictionary of DeviceKeys their corresponding Colors
- /// A boolean value indicating whether or not to forcefully update this device
- ///
- bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false);
-
///
/// Updates the device with a specified color composition.
///
diff --git a/Project-Aurora/Project-Aurora/Devices/LightFX/LightFX.cs b/Project-Aurora/Project-Aurora/Devices/LightFX/LightFX.cs
index ec75d4525..61ae4b2f2 100644
--- a/Project-Aurora/Project-Aurora/Devices/LightFX/LightFX.cs
+++ b/Project-Aurora/Project-Aurora/Devices/LightFX/LightFX.cs
@@ -320,19 +320,14 @@ public int AlienfxWaitForReady()
bool NumLock = (((ushort)LightFXSDK.GetKeyState(0x90)) & 0xffff) != 0;
- public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ private readonly List leftColor = new List();
+ private readonly List midleftColor = new List();
+ private readonly List midRightColor = new List();
+ private readonly List rightColor = new List();
+ private readonly List numpadColor = new List();
+ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
if (e.Cancel) return false;
- List leftColor = new List();
-
- List midleftColor = new List();
-
-
- List midRightColor = new List();
-
- List rightColor = new List();
-
- List numpadColor = new List();
try {
@@ -388,38 +383,38 @@ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArg
LightFXSDK.LFX_Reset();
}
- foreach (KeyValuePair key in keyColors) {
+ foreach (KeyValuePair key in keyColors) {
if (e.Cancel) return false;
if (isInitialized) {
//left
- if (Array.Exists(leftZoneKeys, s => s == key.Key) && (key.Value.R > 0 || key.Value.G > 0 || key.Value.B > 0)) {
+ if (Array.Exists(leftZoneKeys, s => s == (DeviceKeys)key.Key) && (key.Value.R > 0 || key.Value.G > 0 || key.Value.B > 0)) {
leftColor.Add(key.Value);
} //middle left
- if (Array.Exists(midLeftZoneKeys, s => s == key.Key) && (key.Value.R > 0 || key.Value.G > 0 || key.Value.B > 0)) {
+ if (Array.Exists(midLeftZoneKeys, s => s == (DeviceKeys)key.Key) && (key.Value.R > 0 || key.Value.G > 0 || key.Value.B > 0)) {
midleftColor.Add(key.Value);
}//middle right
- if (Array.Exists(midRightZoneKeys, s => s == key.Key) && (key.Value.R > 0 || key.Value.G > 0 || key.Value.B > 0)) {
+ if (Array.Exists(midRightZoneKeys, s => s == (DeviceKeys)key.Key) && (key.Value.R > 0 || key.Value.G > 0 || key.Value.B > 0)) {
midRightColor.Add(key.Value);
}//right */
- if (Array.Exists(rightZoneKeys, s => s == key.Key) && (key.Value.R > 0 || key.Value.G > 0 || key.Value.B > 0)) {
+ if (Array.Exists(rightZoneKeys, s => s == (DeviceKeys)key.Key) && (key.Value.R > 0 || key.Value.G > 0 || key.Value.B > 0)) {
rightColor.Add(key.Value);
}
- if (Array.Exists(numpadZone, s => s == key.Key) && (key.Value.R > 0 || key.Value.G > 0 || key.Value.B > 0)) {
+ if (Array.Exists(numpadZone, s => s == (DeviceKeys)key.Key) && (key.Value.R > 0 || key.Value.G > 0 || key.Value.B > 0)) {
numpadColor.Add(key.Value);
}
- if (key.Key == DeviceKeys.Peripheral_Logo) {
+ if ((DeviceKeys)key.Key == DeviceKeys.Peripheral_Logo) {
setColor(1, (int)BITMASK.AlienFrontLogo, key.Value.R, key.Value.G, key.Value.B);
if (!usingHID) {
@@ -435,7 +430,7 @@ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArg
if (NumLock) {
midRightColor.AddRange(rightColor);
rightColor.Clear();
- rightColor = numpadColor;
+ rightColor.AddRange(numpadColor);
}
if (leftColor.Any()) {
var mostUsed = leftColor.GroupBy(item => item)
@@ -544,7 +539,7 @@ public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArg
{
watch.Restart();
- bool update_result = UpdateDevice(colorComposition.keyColors, e, forced);
+ bool update_result = UpdateDevice(colorComposition.KeyColors, e, forced);
watch.Stop();
lastUpdateTime = watch.ElapsedMilliseconds;
diff --git a/Project-Aurora/Project-Aurora/Devices/Logitech/LedMap.cs b/Project-Aurora/Project-Aurora/Devices/Logitech/LedMap.cs
index 72345ad86..08f6cf3cb 100644
--- a/Project-Aurora/Project-Aurora/Devices/Logitech/LedMap.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Logitech/LedMap.cs
@@ -167,6 +167,14 @@ public static class LedMaps
[DeviceKeys.PERIPHERAL_DPI] = (DeviceType.Mouse, 0),
[DeviceKeys.Peripheral_Logo] = (DeviceType.Mouse, 1),
[DeviceKeys.Peripheral_ScrollWheel] = (DeviceType.Mouse, 2),
+ [DeviceKeys.MOUSEPADLIGHT1] = (DeviceType.Mousemat, 0),
+
+ [DeviceKeys.ADDITIONALLIGHT1] = (DeviceType.Speaker, 0), //Remapped to match my Devicekeys Configuration , Needs to added Speaker Lights soon
+ [DeviceKeys.ADDITIONALLIGHT2] = (DeviceType.Speaker, 1),
+ [DeviceKeys.ADDITIONALLIGHT3] = (DeviceType.Speaker, 2),
+ [DeviceKeys.ADDITIONALLIGHT4] = (DeviceType.Speaker, 3),
+ [DeviceKeys.ADDITIONALLIGHT5] = (DeviceType.Headset, 0), //Remapped to match my Devicekeys Configuration
+ [DeviceKeys.ADDITIONALLIGHT6] = (DeviceType.Headset, 1), //Remapped to match my Devicekeys Configuration
};
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Logitech/LogitechDevice.cs b/Project-Aurora/Project-Aurora/Devices/Logitech/LogitechDevice.cs
index 1e1310141..5d1027085 100755
--- a/Project-Aurora/Project-Aurora/Devices/Logitech/LogitechDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Logitech/LogitechDevice.cs
@@ -60,14 +60,14 @@ public override void Shutdown()
IsInitialized = false;
}
- public override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ protected override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
if (!IsInitialized)
return false;
//reset keys to peripheral_logo here so if we dont find any better color for them,
//at least the leds wont turn off :)
- if (keyColors.TryGetValue(genericKey, out var periph))
+ if (keyColors.TryGetValue((int)genericKey, out var periph))
{
speakers = periph;
mousepad = periph;
@@ -77,37 +77,37 @@ public override bool UpdateDevice(Dictionary keyColors, DoWor
headset[1] = periph;
}
- foreach (var key in keyColors)
+ foreach (var (key, clr) in keyColors)
{
#region keyboard
- if (LedMaps.BitmapMap.TryGetValue(key.Key, out var index))
+ if (LedMaps.BitmapMap.TryGetValue((DeviceKeys)key, out var index))
{
- logitechBitmap[index] = key.Value.B;
- logitechBitmap[index + 1] = key.Value.G;
- logitechBitmap[index + 2] = key.Value.R;
- logitechBitmap[index + 3] = key.Value.A;
+ logitechBitmap[index] = clr.B;
+ logitechBitmap[index + 1] = clr.G;
+ logitechBitmap[index + 2] = clr.R;
+ logitechBitmap[index + 3] = clr.A;
}
- if (!Global.Configuration.DevicesDisableKeyboard && LedMaps.KeyMap.TryGetValue(key.Key, out var logiKey))
- IsInitialized &= LogitechGSDK.LogiLedSetLightingForKeyWithKeyName(logiKey, key.Value);
+ if (!Global.Configuration.DevicesDisableKeyboard && LedMaps.KeyMap.TryGetValue((DeviceKeys)key, out var logiKey))
+ IsInitialized &= LogitechGSDK.LogiLedSetLightingForKeyWithKeyName(logiKey, clr);
#endregion
#region peripherals
- if (LedMaps.PeripheralMap.TryGetValue(key.Key, out var peripheral))
+ if (LedMaps.PeripheralMap.TryGetValue((DeviceKeys)key, out var peripheral))
{
switch (peripheral.type)
{
case DeviceType.Mouse:
- mouse[peripheral.zone] = key.Value;
+ mouse[peripheral.zone] = clr;
break;
case DeviceType.Mousemat:
- mousepad = key.Value;
+ mousepad = clr;
break;
case DeviceType.Headset:
- headset[peripheral.zone] = key.Value;
+ headset[peripheral.zone] = clr;
break;
case DeviceType.Speaker:
- speakers = key.Value;
+ speakers = clr;
break;
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Omen/IOmenDevice.cs b/Project-Aurora/Project-Aurora/Devices/Omen/IOmenDevice.cs
index 26dac999a..412414078 100644
--- a/Project-Aurora/Project-Aurora/Devices/Omen/IOmenDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Omen/IOmenDevice.cs
@@ -10,7 +10,7 @@ namespace Aurora.Devices.Omen
interface IOmenDevice
{
public void Shutdown();
- public void SetLights(Dictionary keyColors);
+ public void SetLights(Dictionary keyColors);
public string GetDeviceName();
};
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Omen/OmenChassis.cs b/Project-Aurora/Project-Aurora/Devices/Omen/OmenChassis.cs
index 169a6deca..0bf139ff7 100644
--- a/Project-Aurora/Project-Aurora/Devices/Omen/OmenChassis.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Omen/OmenChassis.cs
@@ -72,13 +72,13 @@ public string GetDeviceName()
return (hChassis != IntPtr.Zero ? "Chassis Connected" : string.Empty);
}
- public void SetLights(Dictionary keyColors)
+ public void SetLights(Dictionary keyColors)
{
if (hChassis != IntPtr.Zero)
{
- if (keyColors.ContainsKey(DeviceKeys.Peripheral_Logo))
+ if (keyColors.ContainsKey((int)DeviceKeys.Peripheral_Logo))
{
- SetLight(DeviceKeys.Peripheral_Logo, keyColors[DeviceKeys.Peripheral_Logo]);
+ SetLight(DeviceKeys.Peripheral_Logo, keyColors[(int)DeviceKeys.Peripheral_Logo]);
return;
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Omen/OmenDevices.cs b/Project-Aurora/Project-Aurora/Devices/Omen/OmenDevices.cs
index 02fb1f043..49be790b2 100644
--- a/Project-Aurora/Project-Aurora/Devices/Omen/OmenDevices.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Omen/OmenDevices.cs
@@ -55,8 +55,9 @@ public string DeviceDetails
public bool Initialize()
{
- Global.kbLayout.KeyboardLayoutUpdated -= DeviceChangedHandler;
- Global.kbLayout.KeyboardLayoutUpdated += DeviceChangedHandler;
+ //TODO fix this
+ /*Global.kbLayout.KeyboardLayoutUpdated -= DeviceChangedHandler;
+ Global.kbLayout.KeyboardLayoutUpdated += DeviceChangedHandler;*/
lock (this)
{
@@ -161,7 +162,7 @@ public void Shutdown()
}
}
- public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
try
{
@@ -184,7 +185,7 @@ public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArg
{
watch.Restart();
- bool update_result = UpdateDevice(colorComposition.keyColors, e, forced);
+ bool update_result = UpdateDevice(colorComposition.KeyColors, e, forced);
watch.Stop();
lastUpdateTime = watch.ElapsedMilliseconds;
diff --git a/Project-Aurora/Project-Aurora/Devices/Omen/OmenFourZoneLighting.cs b/Project-Aurora/Project-Aurora/Devices/Omen/OmenFourZoneLighting.cs
index 0a4808dc3..6225a3ba9 100644
--- a/Project-Aurora/Project-Aurora/Devices/Omen/OmenFourZoneLighting.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Omen/OmenFourZoneLighting.cs
@@ -15,7 +15,7 @@ namespace Aurora.Devices.Omen
{
class OmenFourZoneLighting : IOmenDevice
{
- public void SetLights(Dictionary keyColors)
+ public void SetLights(Dictionary keyColors)
{
Task.Run(() => {
if (Monitor.TryEnter(this))
@@ -23,16 +23,16 @@ public void SetLights(Dictionary keyColors)
try
{
if(FourZoneLighting.IsTurnOn()
- && keyColors.ContainsKey(DeviceKeys.ADDITIONALLIGHT1)
- && keyColors.ContainsKey(DeviceKeys.ADDITIONALLIGHT2)
- && keyColors.ContainsKey(DeviceKeys.ADDITIONALLIGHT3)
- && keyColors.ContainsKey(DeviceKeys.ADDITIONALLIGHT4))
+ && keyColors.ContainsKey((int)DeviceKeys.ADDITIONALLIGHT1)
+ && keyColors.ContainsKey((int)DeviceKeys.ADDITIONALLIGHT2)
+ && keyColors.ContainsKey((int)DeviceKeys.ADDITIONALLIGHT3)
+ && keyColors.ContainsKey((int)DeviceKeys.ADDITIONALLIGHT4))
{
FourZoneLighting.SetZoneColors(
- new Color[] { keyColors[DeviceKeys.ADDITIONALLIGHT1],
- keyColors[DeviceKeys.ADDITIONALLIGHT2],
- keyColors[DeviceKeys.ADDITIONALLIGHT3],
- keyColors[DeviceKeys.ADDITIONALLIGHT4] });
+ new Color[] { keyColors[(int)DeviceKeys.ADDITIONALLIGHT1],
+ keyColors[(int)DeviceKeys.ADDITIONALLIGHT2],
+ keyColors[(int)DeviceKeys.ADDITIONALLIGHT3],
+ keyColors[(int)DeviceKeys.ADDITIONALLIGHT4] });
}
}
finally
diff --git a/Project-Aurora/Project-Aurora/Devices/Omen/OmenKeyboard.cs b/Project-Aurora/Project-Aurora/Devices/Omen/OmenKeyboard.cs
index df4ce1774..a0a68aa34 100644
--- a/Project-Aurora/Project-Aurora/Devices/Omen/OmenKeyboard.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Omen/OmenKeyboard.cs
@@ -43,10 +43,10 @@ public struct StaticKeyEffect
public LightingColor lightingColor;
public int key;
- public StaticKeyEffect(KeyValuePair key)
+ public StaticKeyEffect(KeyValuePair key)
{
lightingColor = LightingColor.FromColor(key.Value);
- this.key = OmenKeys.GetKey(key.Key);
+ this.key = OmenKeys.GetKey((DeviceKeys)key.Key);
}
}
@@ -55,7 +55,7 @@ public string GetDeviceName()
return (hKB != IntPtr.Zero ? "Keyboard Connected" : string.Empty);
}
- public void SetLights(Dictionary keyColors)
+ public void SetLights(Dictionary keyColors)
{
if (hKB != IntPtr.Zero && keyColors.Count > 0)
{
@@ -71,7 +71,7 @@ public void SetLights(Dictionary keyColors)
try
{
List list = new List();
- foreach (KeyValuePair key in keyColors)
+ foreach (KeyValuePair key in keyColors)
{
list.Add(new StaticKeyEffect(key));
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Omen/OmenMouse.cs b/Project-Aurora/Project-Aurora/Devices/Omen/OmenMouse.cs
index 84767af94..782667678 100644
--- a/Project-Aurora/Project-Aurora/Devices/Omen/OmenMouse.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Omen/OmenMouse.cs
@@ -65,18 +65,18 @@ public enum MouseLightingZone
MOUSE_LIGHTING_ZONE_WHEEL = 2, /* Wheel zone */
}
- public void SetLights(Dictionary keyColors)
+ public void SetLights(Dictionary keyColors)
{
if (hMouse != IntPtr.Zero)
{
- foreach (KeyValuePair keyColor in keyColors)
+ foreach (var keyColor in keyColors)
{
- switch (keyColor.Key)
+ switch ((DeviceKeys)keyColor.Key)
{
case DeviceKeys.Peripheral_Logo:
case DeviceKeys.Peripheral_FrontLight:
case DeviceKeys.Peripheral_ScrollWheel:
- SetLight(keyColor.Key, keyColor.Value);
+ SetLight((DeviceKeys)keyColor.Key, keyColor.Value);
break;
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Omen/OmenMousePad.cs b/Project-Aurora/Project-Aurora/Devices/Omen/OmenMousePad.cs
index abad3c7a7..f2fbb29b5 100644
--- a/Project-Aurora/Project-Aurora/Devices/Omen/OmenMousePad.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Omen/OmenMousePad.cs
@@ -58,15 +58,15 @@ private int GetZone(DeviceKeys key)
return (key == DeviceKeys.MOUSEPADLIGHT15 ? (int)MousePadZone.MOUSE_PAD_ZONE_LOGO : (int)MousePadZone.MOUSE_PAD_ZONE_0 + ((int)key - (int)DeviceKeys.MOUSEPADLIGHT1));
}
- public void SetLights(Dictionary keyColors)
+ public void SetLights(Dictionary keyColors)
{
if (hMousePad != IntPtr.Zero)
{
- foreach (KeyValuePair keyColor in keyColors)
+ foreach (var keyColor in keyColors)
{
- if (keyColor.Key >= DeviceKeys.MOUSEPADLIGHT1 && keyColor.Key <= DeviceKeys.MOUSEPADLIGHT15)
+ if (keyColor.Key >= (int)DeviceKeys.MOUSEPADLIGHT1 && keyColor.Key <= (int)DeviceKeys.MOUSEPADLIGHT15)
{
- SetLight(keyColor.Key, keyColor.Value);
+ SetLight((DeviceKeys)keyColor.Key, keyColor.Value);
}
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Omen/OmenSpeaker.cs b/Project-Aurora/Project-Aurora/Devices/Omen/OmenSpeaker.cs
index 81d814cf3..c479a6cd1 100644
--- a/Project-Aurora/Project-Aurora/Devices/Omen/OmenSpeaker.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Omen/OmenSpeaker.cs
@@ -44,13 +44,13 @@ public void Shutdown()
}
}
- public void SetLights(Dictionary keyColors)
+ public void SetLights(Dictionary keyColors)
{
if (hSpeaker != IntPtr.Zero)
{
- if (keyColors.ContainsKey(DeviceKeys.Peripheral_Logo))
+ if (keyColors.ContainsKey((int)DeviceKeys.Peripheral_Logo))
{
- SetLight(DeviceKeys.Peripheral_Logo, keyColors[DeviceKeys.Peripheral_Logo]);
+ SetLight(DeviceKeys.Peripheral_Logo, keyColors[(int)DeviceKeys.Peripheral_Logo]);
return;
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/OpenRGB/OpenRGBDevice.cs b/Project-Aurora/Project-Aurora/Devices/OpenRGB/OpenRGBDevice.cs
index 2f7f5b258..39eabf150 100644
--- a/Project-Aurora/Project-Aurora/Devices/OpenRGB/OpenRGBDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/OpenRGB/OpenRGBDevice.cs
@@ -2,10 +2,7 @@
using OpenRGB.NET;
using System;
using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
using System.Linq;
-using System.Threading;
using DK = Aurora.Devices.DeviceKeys;
using OpenRGBColor = OpenRGB.NET.Models.Color;
using OpenRGBDevice = OpenRGB.NET.Models.Device;
@@ -14,180 +11,164 @@
namespace Aurora.Devices.OpenRGB
{
- public class OpenRGBAuroraDevice : DefaultDevice
+ public class OpenRGBDeviceConnector : AuroraDeviceConnector
{
- public override string DeviceName => "OpenRGB";
- protected override string DeviceInfo => string.Join(", ", _devices.Select(d => d.OrgbDevice.Name));
+
+ protected override string ConnectorName => "OpenRGB";
private OpenRGBClient _openRgb;
- private List _devices;
- public override bool Initialize()
+ protected override bool InitializeImpl()
{
- if (IsInitialized)
- return true;
-
try
{
- var ip = Global.Configuration.VarRegistry.GetVariable($"{DeviceName}_ip");
- var port = Global.Configuration.VarRegistry.GetVariable($"{DeviceName}_port");
- var usePeriphLogo = Global.Configuration.VarRegistry.GetVariable($"{DeviceName}_use_periph_logo");
- var ignoreDirectMode = Global.Configuration.VarRegistry.GetVariable($"{DeviceName}_ignore_direct");
-
- _openRgb = new OpenRGBClient(name: "Aurora", ip: ip, port: port);
+ _openRgb = new OpenRGBClient(name: "Aurora");
_openRgb.Connect();
- var devices = _openRgb.GetAllControllerData();
- _devices = new List();
+ OpenRGBDevice[] _devices = _openRgb.GetAllControllerData();
- for (int i = 0; i < devices.Length; i++)
+
+ for (var i = 0; i < _devices.Length; i++)
{
- if (devices[i].Modes.Any(m => m.Name == "Direct") || ignoreDirectMode)
- {
- var helper = new HelperOpenRGBDevice(i, devices[i]);
- helper.ProcessMappings(usePeriphLogo);
- _devices.Add(helper);
- }
+ OpenRGBAuroraDevice device = new OpenRGBAuroraDevice(_devices[i], i, _openRgb);
+ RegisterDevice(device);
}
}
catch (Exception e)
{
- LogError("error in OpenRGB device: " + e);
- IsInitialized = false;
+ LogError("There was an error in OpenRGB device: " + e);
return false;
}
- IsInitialized = true;
- return IsInitialized;
+ return true;
}
- public override void Shutdown()
+ protected override void ShutdownImpl()
{
- if (!IsInitialized)
- return;
-
- foreach (var d in _devices)
- {
- try
- {
- _openRgb.UpdateLeds(d.Index, d.OrgbDevice.Colors);
- }
- catch
- {
- //we tried.
- }
- }
-
_openRgb?.Dispose();
_openRgb = null;
- IsInitialized = false;
}
+ }
+ public class OpenRGBAuroraDevice : AuroraDevice
+ {
+ private OpenRGBDevice Device;
+ private OpenRGBColor[] DeviceColors;
+ private List KeyMapping = new();
+ private int DeviceIndex;
+ static object update_lock = new();
+ private OpenRGBClient _openRgb;
+ protected override string DeviceName => Device.Name;
+
+ protected override AuroraDeviceType AuroraDeviceType => AuroraDeviceTypeConverter(Device.Type);
- public override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ public int Id { get; set; }
+
+ public OpenRGBAuroraDevice(OpenRGBDevice device, int deviceIndex, OpenRGBClient openRgb)
{
- if (!IsInitialized)
- return false;
+ Device = device;
+ _openRgb = openRgb;
+ DeviceIndex = deviceIndex;
+ DeviceColors = new OpenRGBColor[Device.Leds.Length];
+ for (var ledIdx = 0; ledIdx < Device.Leds.Length; ledIdx++)
+ DeviceColors[ledIdx] = new OpenRGBColor();
- foreach (var device in _devices)
+ int overIndex = 0;
+
+ for (int j = 0; j < Device.Leds.Length; j++)
{
- for (int ledIndex = 0; ledIndex < device.Colors.Length; ledIndex++)
+ if (Device.Type == OpenRGBDeviceType.Keyboard)
{
- if (keyColors.TryGetValue(device.Mapping[ledIndex], out var keyColor))
+ if (OpenRGBKeyNames.KeyNames.TryGetValue(Device.Leds[j].Name, out var dk))
{
- device.Colors[ledIndex] = new OpenRGBColor(keyColor.R, keyColor.G, keyColor.B);
+ KeyMapping.Add(new DeviceKey(dk));
+ }
+ else
+ {
+ KeyMapping.Add(new DeviceKey(500 + overIndex++, Device.Leds[j].Name));
}
}
-
- try
- {
- _openRgb.UpdateLeds(device.Index, device.Colors);
- }
- catch (Exception exc)
+ else
{
- LogError($"Failed to update OpenRGB device {device.OrgbDevice.Name}: " + exc);
- Reset();
+ KeyMapping.Add(new DeviceKey(j, Device.Leds[j].Name));
}
}
-
- var sleep = Global.Configuration.VarRegistry.GetVariable($"{DeviceName}_sleep");
- if (sleep > 0)
- Thread.Sleep(sleep);
-
- return true;
}
- protected override void RegisterVariables(VariableRegistry variableRegistry)
+ protected override bool UpdateDeviceImpl(DeviceColorComposition composition)
{
- variableRegistry.Register($"{DeviceName}_sleep", 0, "Sleep for", 1000, 0);
- variableRegistry.Register($"{DeviceName}_ip", "127.0.0.1", "IP Address");
- variableRegistry.Register($"{DeviceName}_port", 6742, "Port", 1024, 65535);
- variableRegistry.Register($"{DeviceName}_ignore_direct", false, "Ignore Direct mode");
- variableRegistry.Register($"{DeviceName}_use_periph_logo", true, "Use peripheral logo for unknown leds");
- }
- }
-
- public class HelperOpenRGBDevice
- {
- public int Index { get; }
- public OpenRGBDevice OrgbDevice { get; }
- public OpenRGBColor[] Colors { get; }
- public DK[] Mapping { get; }
- public HelperOpenRGBDevice(int idx, OpenRGBDevice dev)
- {
- Index = idx;
- OrgbDevice = dev;
- Colors = Enumerable.Range(0, dev.Leds.Length).Select(_ => new OpenRGBColor()).ToArray();
- Mapping = new DK[dev.Leds.Length];
- }
+ //should probably store these bools somewhere when initing
+ //might also add this as a property in the library
+ if (!Device.Modes.Any(m => m.Name == "Direct"))
+ return true;
- internal void ProcessMappings(bool usePeriphLogo)
- {
- for (int ledIndex = 0; ledIndex < OrgbDevice.Leds.Length; ledIndex++)
+ for (int ledIdx = 0; ledIdx < Device.Leds.Length; ledIdx++)
{
- if (OpenRGBKeyNames.KeyNames.TryGetValue(OrgbDevice.Leds[ledIndex].Name, out var devKey))
+ if (composition.KeyColors.TryGetValue(KeyMapping[ledIdx].Tag, out var keyColor))
{
- Mapping[ledIndex] = devKey;
+ var deviceKey = DeviceColors[ledIdx];
+ deviceKey.R = keyColor.R;
+ deviceKey.G = keyColor.G;
+ deviceKey.B = keyColor.B;
}
- else
+ }
+
+ try
+ {
+ lock (update_lock)
{
- Mapping[ledIndex] = usePeriphLogo ? DK.Peripheral_Logo : DK.NONE;
+ _openRgb.UpdateLeds(DeviceIndex, DeviceColors);
}
}
+ catch (Exception exc)
+ {
+ LogError($"Failed to update OpenRGB device {DeviceName}: " + exc);
+ return false;
+ }
- if (usePeriphLogo)
- return;
+ /*var sleep = Global.Configuration.VarRegistry.GetVariable($"{DeviceName}_sleep");
+ if (sleep > 0)
+ Thread.Sleep(sleep);*/
- //if we have the option enabled,
- //we'll skip these as users may not want
- //linear zones to depend on additionalllight
+ return true;
+ }
- uint ledOffset = 0;
- for (int zoneIndex = 0; zoneIndex < OrgbDevice.Zones.Length; zoneIndex++)
+ protected override void RegisterVariables(VariableRegistry variableRegistry)
+ {
+ variableRegistry.Register($"{DeviceName}_sleep", 25, "Sleep for", 1000, 0);
+ }
+ private AuroraDeviceType AuroraDeviceTypeConverter(OpenRGBDeviceType type)
+ {
+ switch (type)
{
- if (OrgbDevice.Zones[zoneIndex].Type == OpenRGBZoneType.Linear)
- {
- for (int zoneLedIndex = 0; zoneLedIndex < OrgbDevice.Zones[zoneIndex].LedCount; zoneLedIndex++)
- {
- if (OrgbDevice.Type == OpenRGBDeviceType.Mousemat)
- {
- if (zoneLedIndex < 15)
- {
- Mapping[(int)(ledOffset + zoneLedIndex)] = OpenRGBKeyNames.MousepadLights[zoneLedIndex];
- }
- }
- else
- {
- //TODO - scale zones with more than 32 LEDs
- if (zoneLedIndex < 32)
- {
- Mapping[(int)(ledOffset + zoneLedIndex)] = OpenRGBKeyNames.AdditionalLights[zoneLedIndex];
- }
- }
- }
- }
- ledOffset += OrgbDevice.Zones[zoneIndex].LedCount;
+ case OpenRGBDeviceType.Motherboard:
+ break;
+ case OpenRGBDeviceType.Dram:
+ break;
+ case OpenRGBDeviceType.Gpu:
+ break;
+ case OpenRGBDeviceType.Cooler:
+ break;
+ case OpenRGBDeviceType.Ledstrip:
+ break;
+ case OpenRGBDeviceType.Keyboard:
+ return AuroraDeviceType.OpenRGBKeyboard;
+ case OpenRGBDeviceType.Mouse:
+ return AuroraDeviceType.OpenRGBMouse;
+ case OpenRGBDeviceType.Mousemat:
+ break;
+ case OpenRGBDeviceType.Headset:
+ return AuroraDeviceType.OpenRGBHeadset;
+ case OpenRGBDeviceType.HeadsetStand:
+ break;
+ case OpenRGBDeviceType.Unknown:
+ return AuroraDeviceType.OpenRGBUnkown;
+ default:
+ return AuroraDeviceType.OpenRGBUnkown;
}
+ return AuroraDeviceType.Unkown;
}
+
+ public override List GetAllDeviceKey() => KeyMapping;
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/OpenRGB/OpenRGBKeyNames.cs b/Project-Aurora/Project-Aurora/Devices/OpenRGB/OpenRGBKeyNames.cs
index ebc8d989e..8a5ec0302 100644
--- a/Project-Aurora/Project-Aurora/Devices/OpenRGB/OpenRGBKeyNames.cs
+++ b/Project-Aurora/Project-Aurora/Devices/OpenRGB/OpenRGBKeyNames.cs
@@ -65,6 +65,7 @@ public static class OpenRGBKeyNames
{ "Key: ," , DK.COMMA },
{ "Key: ." , DK.PERIOD },
{ "Key: /" , DK.FORWARD_SLASH },
+ { "Key: / (ABNT)" , DK.FORWARD_SLASH },
{ "Key: Caps Lock" , DK.CAPS_LOCK },
{ "Key: F1" , DK.F1 },
{ "Key: F2" , DK.F2 },
@@ -127,6 +128,8 @@ public static class OpenRGBKeyNames
{ "Key: Media Play" , DK.MEDIA_PLAY },
{ "Key: Media Play/Pause" , DK.MEDIA_PLAY_PAUSE },
{ "Key: Media Mute" , DK.VOLUME_MUTE },
+ { "Key: Media Volume Down", DK.VOLUME_DOWN },
+ { "Key: Media Volume Up" , DK.VOLUME_UP },
{ "Logo" , DK.LOGO },
{ "Key: Brightness" , DK.BRIGHTNESS_SWITCH },
{ "Key: M1" , DK.G1 },
@@ -138,11 +141,74 @@ public static class OpenRGBKeyNames
{ "Key: G1" , DK.G1 },
{ "Key: G2" , DK.G2 },
{ "Key: G3" , DK.G3 },
+ { "Key: G4" , DK.G4 },
+ { "Key: G5" , DK.G5 },
//{ "Logo" , DK.Peripheral_Logo },
{ "Mouse" , DK.Peripheral_Logo },
{ "Scroll Wheel" , DK.Peripheral_ScrollWheel },
{ "DPI" , DK.Peripheral_ScrollWheel },
{ "Front" , DK.Peripheral_FrontLight },
+ { "RGB Strip 1" , DK.ADDITIONALLIGHT1 },
+ { "RGB Strip 2" , DK.ADDITIONALLIGHT2 },
+ { "RGB Strip 3" , DK.ADDITIONALLIGHT3 },
+ { "RGB Strip 4" , DK.ADDITIONALLIGHT4 },
+ { "RGB Strip 5" , DK.ADDITIONALLIGHT5 },
+ { "RGB Strip 6" , DK.ADDITIONALLIGHT6 },
+ { "RGB Strip 7" , DK.ADDITIONALLIGHT7 },
+ { "RGB Strip 8" , DK.ADDITIONALLIGHT8 },
+ { "RGB Strip 9" , DK.ADDITIONALLIGHT9 },
+ { "RGB Strip 10" , DK.ADDITIONALLIGHT10 },
+ { "RGB Strip 11" , DK.ADDITIONALLIGHT11 },
+ { "RGB Strip 12" , DK.ADDITIONALLIGHT12 },
+ { "RGB Strip 13" , DK.ADDITIONALLIGHT13 },
+ { "RGB Strip 14" , DK.ADDITIONALLIGHT14 },
+ { "RGB Strip 15" , DK.ADDITIONALLIGHT15 },
+ { "RGB Strip 16" , DK.ADDITIONALLIGHT16 },
+ { "RGB Strip 17" , DK.ADDITIONALLIGHT17 },
+ { "RGB Strip 18" , DK.ADDITIONALLIGHT18 },
+ { "RGB Strip 19" , DK.ADDITIONALLIGHT19 },
+ { "RGB Strip 20" , DK.ADDITIONALLIGHT20 },
+ { "RGB Strip 21" , DK.ADDITIONALLIGHT21 },
+ { "RGB Strip 22" , DK.ADDITIONALLIGHT22 },
+ { "RGB Strip 23" , DK.ADDITIONALLIGHT23 },
+ { "RGB Strip 24" , DK.ADDITIONALLIGHT24 },
+ { "RGB Strip 25" , DK.ADDITIONALLIGHT25 },
+ { "RGB Strip 26" , DK.ADDITIONALLIGHT26 },
+ { "RGB Strip 27" , DK.ADDITIONALLIGHT27 },
+ { "RGB Strip 28" , DK.ADDITIONALLIGHT28 },
+ { "RGB Strip 29" , DK.ADDITIONALLIGHT29 },
+ { "RGB Strip 30" , DK.ADDITIONALLIGHT30 },
+ { "RGB Strip 31" , DK.ADDITIONALLIGHT31 },
+ { "RGB Strip 32" , DK.ADDITIONALLIGHT32 },
+ { "RGB Strip 33" , DK.ADDITIONALLIGHT33 },
+ { "RGB Strip 34" , DK.ADDITIONALLIGHT34 },
+ { "RGB Strip 35" , DK.ADDITIONALLIGHT35 },
+ { "RGB Strip 36" , DK.ADDITIONALLIGHT36 },
+ { "RGB Strip 37" , DK.ADDITIONALLIGHT37 },
+ { "RGB Strip 38" , DK.ADDITIONALLIGHT38 },
+ { "RGB Strip 39" , DK.ADDITIONALLIGHT39 },
+ { "RGB Strip 40" , DK.ADDITIONALLIGHT40 },
+ { "RGB Strip 41" , DK.ADDITIONALLIGHT41 },
+ { "RGB Strip 42" , DK.ADDITIONALLIGHT42 },
+ { "RGB Strip 43" , DK.ADDITIONALLIGHT43 },
+ { "RGB Strip 44" , DK.ADDITIONALLIGHT44 },
+ { "RGB Strip 45" , DK.ADDITIONALLIGHT45 },
+ { "RGB Strip 46" , DK.ADDITIONALLIGHT46 },
+ { "RGB Strip 47" , DK.ADDITIONALLIGHT47 },
+ { "RGB Strip 48" , DK.ADDITIONALLIGHT48 },
+ { "RGB Strip 49" , DK.ADDITIONALLIGHT49 },
+ { "RGB Strip 50" , DK.ADDITIONALLIGHT50 },
+ { "RGB Strip 51" , DK.ADDITIONALLIGHT51 },
+ { "RGB Strip 52" , DK.ADDITIONALLIGHT52 },
+ { "RGB Strip 53" , DK.ADDITIONALLIGHT53 },
+ { "RGB Strip 54" , DK.ADDITIONALLIGHT54 },
+ { "RGB Strip 55" , DK.ADDITIONALLIGHT55 },
+ { "RGB Strip 56" , DK.ADDITIONALLIGHT56 },
+ { "RGB Strip 57" , DK.ADDITIONALLIGHT57 },
+ { "RGB Strip 58" , DK.ADDITIONALLIGHT58 },
+ { "RGB Strip 59" , DK.ADDITIONALLIGHT59 },
+ { "RGB Strip 60" , DK.ADDITIONALLIGHT60 },
+ { "Key: Calculator" , DK.CALC },
};
public static readonly DK[] MousepadLights = new[]
@@ -198,6 +264,34 @@ public static class OpenRGBKeyNames
DK.ADDITIONALLIGHT30,
DK.ADDITIONALLIGHT31,
DK.ADDITIONALLIGHT32,
+ DK.ADDITIONALLIGHT33,
+ DK.ADDITIONALLIGHT34,
+ DK.ADDITIONALLIGHT35,
+ DK.ADDITIONALLIGHT36,
+ DK.ADDITIONALLIGHT37,
+ DK.ADDITIONALLIGHT38,
+ DK.ADDITIONALLIGHT39,
+ DK.ADDITIONALLIGHT40,
+ DK.ADDITIONALLIGHT41,
+ DK.ADDITIONALLIGHT42,
+ DK.ADDITIONALLIGHT43,
+ DK.ADDITIONALLIGHT44,
+ DK.ADDITIONALLIGHT45,
+ DK.ADDITIONALLIGHT46,
+ DK.ADDITIONALLIGHT47,
+ DK.ADDITIONALLIGHT48,
+ DK.ADDITIONALLIGHT49,
+ DK.ADDITIONALLIGHT50,
+ DK.ADDITIONALLIGHT51,
+ DK.ADDITIONALLIGHT52,
+ DK.ADDITIONALLIGHT53,
+ DK.ADDITIONALLIGHT54,
+ DK.ADDITIONALLIGHT55,
+ DK.ADDITIONALLIGHT56,
+ DK.ADDITIONALLIGHT57,
+ DK.ADDITIONALLIGHT58,
+ DK.ADDITIONALLIGHT59,
+ DK.ADDITIONALLIGHT60,
};
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Rampage/Rampage.cs b/Project-Aurora/Project-Aurora/Devices/Rampage/Rampage.cs
new file mode 100644
index 000000000..efc019853
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/Devices/Rampage/Rampage.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using Aurora.Utils;
+using System.Drawing;
+using System.Threading;
+using Aurora.Settings;
+
+namespace Aurora.Devices.Rampage
+{
+ public class Rampage : DefaultDevice
+ {
+ public override string DeviceName => "Rampage";
+ protected override string DeviceInfo => IsInitialized ? GetDeviceNames() : base.DeviceInfo;
+
+ private RampageMouse mouse;
+
+ public override bool Initialize()
+ {
+ mouse = RampageMouse.Initialize();
+
+ return IsInitialized = mouse != null;
+ }
+
+ public override void Shutdown()
+ {
+ mouse?.Disconnect();
+ mouse = null;
+ IsInitialized = false;
+ }
+
+ protected override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false) {
+ if (mouse!=null)
+ {
+ UpdateMouse(keyColors);
+
+ var sleep = Global.Configuration.VarRegistry.GetVariable($"{DeviceName}_sleep");
+ if (sleep > 0)
+ Thread.Sleep(sleep);
+ }
+ return true;
+ }
+
+ protected override void RegisterVariables(VariableRegistry variableRegistry)
+ {
+ variableRegistry.Register($"{DeviceName}_sleep", 30, "Sleep for", 1000, 0);
+ }
+
+ private void UpdateMouse(Dictionary keyColors)
+ {
+ keyColors.TryGetValue((int)DeviceKeys.Peripheral, out var peripheralColor);
+ mouse.SetColor(ColorUtils.CorrectWithAlpha(peripheralColor));
+ foreach (var keyValuePair in RampageKeyMap.MouseLightMap)
+ {
+ if (keyColors.TryGetValue((int)keyValuePair.Value, out var color))
+ {
+ var fromArgb = Color.FromArgb(
+ Math.Max(color.A - 128, 0),
+ Math.Max(color.R - 128, 0),
+ Math.Max(color.G - 128, 0),
+ Math.Max(color.B - 128, 0));
+ mouse.SetKeyColor(keyValuePair.Key, ColorUtils.CorrectWithAlpha(fromArgb));
+ }
+ }
+
+ mouse.Update();
+ }
+
+ private string GetDeviceNames()
+ {
+ return (mouse != null ? " Mouse" : "");
+ }
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/Devices/Rampage/RampageKey.cs b/Project-Aurora/Project-Aurora/Devices/Rampage/RampageKey.cs
new file mode 100644
index 000000000..b09f43acc
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/Devices/Rampage/RampageKey.cs
@@ -0,0 +1,13 @@
+namespace Aurora.Devices.Rampage
+{
+ public enum RampageKey
+ {
+ L1 = 0,
+ L2 = 1,
+ L3 = 2,
+ L4 = 3,
+ L5 = 4,
+ L6 = 5,
+ L7 = 6,
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/Devices/Rampage/RampageKeyMap.cs b/Project-Aurora/Project-Aurora/Devices/Rampage/RampageKeyMap.cs
new file mode 100644
index 000000000..f75b8b1cf
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/Devices/Rampage/RampageKeyMap.cs
@@ -0,0 +1,19 @@
+using System.Collections.Generic;
+using System.Collections.Immutable;
+
+namespace Aurora.Devices.Rampage
+{
+ public static class RampageKeyMap
+ {
+ public static readonly IImmutableDictionary MouseLightMap = new Dictionary
+ {
+ [RampageKey.L1] = DeviceKeys.PERIPHERAL_LIGHT1,
+ [RampageKey.L2] = DeviceKeys.PERIPHERAL_LIGHT2,
+ [RampageKey.L3] = DeviceKeys.PERIPHERAL_LIGHT3,
+ [RampageKey.L4] = DeviceKeys.PERIPHERAL_LIGHT4,
+ [RampageKey.L5] = DeviceKeys.PERIPHERAL_LIGHT5,
+ [RampageKey.L6] = DeviceKeys.PERIPHERAL_LIGHT6,
+ [RampageKey.L7] = DeviceKeys.Peripheral_Logo,
+ }.ToImmutableDictionary();
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/Devices/Rampage/RampageMouse.cs b/Project-Aurora/Project-Aurora/Devices/Rampage/RampageMouse.cs
new file mode 100644
index 000000000..cbce14fcd
--- /dev/null
+++ b/Project-Aurora/Project-Aurora/Devices/Rampage/RampageMouse.cs
@@ -0,0 +1,127 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using HidSharp;
+using HidSharp.Reports.Encodings;
+
+namespace Aurora.Devices.Rampage
+{
+ public class RampageMouse : IDisposable
+ {
+ private const int VendorId = 0x258A;
+ private const int ProductId = 0x1007;
+ private static readonly byte[] ColorPacketHeader = new byte[23] { 0x04, 0x00, 0x06, 0xb0, 0x01, 0x09, 0x13, 0x1d, 0x27, 0x37, 0x3b, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x62, 0x00 };
+ private static readonly byte[] ColorPacketFooter = new byte[15] { 0x01, 0x03, 0x02, 0x06, 0x05, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+ private readonly byte[] _keyColors = new byte[7*3];
+
+ private readonly HidStream _ctrlStream;
+
+ private RampageMouse(HidStream ctrlStream)
+ {
+ _ctrlStream = ctrlStream;
+ }
+
+
+ public static RampageMouse Initialize()
+ {
+ var devices = DeviceList.Local.GetHidDevices(VendorId, ProductId); //Find device with given VID PID
+
+ if (!devices.Any())
+ {
+ return null;
+ }
+ try
+ {
+ HidDevice ctrlDevice = devices.First(d => d.GetMaxFeatureReportLength() > 50);
+
+ HidStream ctrlStream = null;
+ if (ctrlDevice?.TryOpen(out ctrlStream) ?? false)
+ {
+ RampageMouse rm = new RampageMouse(ctrlStream);
+ return rm;
+ }
+ else
+ {
+ ctrlStream?.Close();
+ }
+ }
+ catch(Exception e)
+ {
+ return null;
+ }
+ return null;
+ }
+
+ #region Set Colors
+ ///
+ /// All packets sent to the mouse which invole anything to do with rgb are 64 bytes long.
+ /// First Packet of rgb data transfer starts with 07030601 and next bytes are empty.
+ /// Next Packets contain actual rgb data and start with 0703060200000000
+ ///
+ public void SetColors(Dictionary keyColors)
+ {
+ foreach (var key in keyColors)
+ SetKeyColor(key.Key, key.Value);
+ }
+
+ public void SetColor(Color clr) //Set Color to every key on keyboard
+ {
+ foreach (RampageKey key in (RampageKey[])Enum.GetValues(typeof(RampageKey)))
+ SetKeyColor(key, clr);
+ }
+
+ public void SetKeyColor(RampageKey key, Color clr) //Puts data for each key into the byte array _keyColors
+ {
+ int offset = (int)key*3;
+ _keyColors[offset + 0] = clr.R;
+ _keyColors[offset + 1] = clr.G;
+ _keyColors[offset + 2] = clr.B;
+ }
+ public bool Update() => WriteColorBuffer();
+ private bool WriteColorBuffer()
+ {
+ byte[] packet = new byte[64];
+
+ try
+ {
+ ColorPacketHeader.CopyTo(packet, 0); //Copies Color Header to packet
+ Array.Copy(_keyColors, 0, packet, ColorPacketHeader.Length, _keyColors.Length); //Copies rgb bytes to the packet
+ ColorPacketFooter.CopyTo(packet, ColorPacketHeader.Length + _keyColors.Length);
+ _ctrlStream.SetFeature(packet); //Sends packet as additional data in SetReport USBHID packet
+ //_ctrlStream.SetFeature(endp1); //Sends packet as additional data in SetReport USBHID packet
+ return true;
+ }
+ catch(Exception e)
+ {
+ Disconnect();
+ return false;
+ }
+ }
+ #endregion
+
+ public void Disconnect()
+ {
+ _ctrlStream?.Close();
+ }
+
+ #region IDisposable Support
+ ///
+ /// Disconnects the mouse when disposing
+ ///
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ ///
+ protected virtual void Dispose(bool b)
+ {
+ Disconnect();
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/Devices/Razer/RazerDevice.cs b/Project-Aurora/Project-Aurora/Devices/Razer/RazerDevice.cs
index 584ae4a3c..467addb60 100755
--- a/Project-Aurora/Project-Aurora/Devices/Razer/RazerDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Razer/RazerDevice.cs
@@ -1,26 +1,28 @@
-using Corale.Colore.Core;
-using Corale.Colore.Razer.Keyboard;
+using Aurora.Utils;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Aurora.Settings;
-using KeyboardCustom = Corale.Colore.Razer.Keyboard.Effects.Custom;
-using MousepadCustom = Corale.Colore.Razer.Mousepad.Effects.Custom;
-using MouseCustom = Corale.Colore.Razer.Mouse.Effects.CustomGrid;
-using KeypadCustom = Corale.Colore.Razer.Keypad.Effects.Custom;
-using ChromaLinkCustom = Corale.Colore.Razer.ChromaLink.Effects.Custom;
+using KeyboardCustom = Colore.Effects.Keyboard.CustomKeyboardEffect;
+using MousepadCustom = Colore.Effects.Mousepad.CustomMousepadEffect;
+using MouseCustom = Colore.Effects.Mouse.CustomMouseEffect;
+using KeypadCustom = Colore.Effects.Keypad.CustomKeypadEffect;
+using ChromaLinkCustom = Colore.Effects.ChromaLink.CustomChromaLinkEffect;
using System.ComponentModel;
using System.Linq;
-using Corale.Colore.Razer.Mouse;
+using Colore;
+using Colore.Data;
+using Colore.Api;
namespace Aurora.Devices.Razer
{
public class RazerDevice : DefaultDevice
{
+ IChroma Chroma;
public override string DeviceName => "Razer";
- private readonly List<(string Name, Guid Guid)> DeviceGuids = typeof(Corale.Colore.Razer.Devices)
+ private readonly List<(string Name, Guid Guid)> DeviceGuids = typeof(Colore.Data.Devices)
.GetFields()
.Select(f => (f.Name, (Guid)f.GetValue(null)))
.ToList();
@@ -40,15 +42,21 @@ public override bool Initialize()
{
try
{
- Chroma.Instance.Initialize();
+ Chroma = ColoreProvider.CreateNativeAsync().Result;
+ var v = Chroma.SdkVersion;
}
- catch (Exception e)
+ catch (ColoreException e)
{
LogError("Error initializing:" + e.Message);
return IsInitialized = false;
}
+ catch (AggregateException e)
+ {
+ LogError("SDK not available. Install Razer synapse " + e.Message);
+ return IsInitialized = false;
+ }
- if (!Chroma.Instance.Initialized)
+ if (!Chroma.Initialized)
{
LogError("Failed to Initialize Razer Chroma sdk");
return IsInitialized = false;
@@ -67,8 +75,7 @@ public override void Shutdown()
try
{
- Chroma.Instance.SetAll(Color.Black);
- Chroma.Instance.Uninitialize();
+ Chroma.UninitializeAsync();
IsInitialized = false;
}
catch (Exception e)
@@ -77,44 +84,44 @@ public override void Shutdown()
}
}
- public override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ protected override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
if (!IsInitialized)
return false;
- if (keyColors.TryGetValue(DeviceKeys.Peripheral_Logo, out var clr))
+ if (keyColors.TryGetValue((int)DeviceKeys.Peripheral_Logo, out var color))
{
- keyboard.Set(ToColore(clr));
- mousepad.Set(ToColore(clr));
- mouse.Set(ToColore(clr));
- headset = ToColore(clr);
- chromalink.Set(ToColore(clr));
- keypad.Set(ToColore(clr));
+ keyboard.Set(ToColore(color));
+ mousepad.Set(ToColore(color));
+ mouse.Set(ToColore(color));
+ headset = ToColore(color);
+ chromalink.Set(ToColore(color));
+ keypad.Set(ToColore(color));
}
- foreach (var key in keyColors)
+ foreach (var (key, clr) in keyColors)
{
- if (RazerMappings.keyboardDictionary.TryGetValue(key.Key, out var kbIndex))
- keyboard[kbIndex] = ToColore(key.Value);
+ if (RazerMappings.keyboardDictionary.TryGetValue((DeviceKeys)key, out var kbIndex))
+ keyboard[kbIndex] = ToColore(clr);
- if (RazerMappings.mousepadDictionary.TryGetValue(key.Key, out var mousepadIndex))
- mousepad[mousepadIndex] = ToColore(key.Value);
+ if (RazerMappings.mousepadDictionary.TryGetValue((DeviceKeys)key, out var mousepadIndex))
+ mousepad[mousepadIndex] = ToColore(clr);
- if (RazerMappings.mouseDictionary.TryGetValue(key.Key, out var mouseIndex))
- mouse[mouseIndex] = ToColore(key.Value);
+ if (RazerMappings.mouseDictionary.TryGetValue((DeviceKeys)key, out var mouseIndex))
+ mouse[mouseIndex] = ToColore(clr);
}
if (!Global.Configuration.DevicesDisableKeyboard)
- Chroma.Instance.Keyboard.SetCustom(keyboard);
+ Chroma.Keyboard.SetCustomAsync(keyboard);
if (!Global.Configuration.DevicesDisableMouse)
- Chroma.Instance.Mousepad.SetCustom(mousepad);
+ Chroma.Mousepad.SetCustomAsync(mousepad);
if (!Global.Configuration.DevicesDisableMouse)
- Chroma.Instance.Mouse.SetGrid(mouse);
+ Chroma.Mouse.SetGridAsync(mouse);
if (!Global.Configuration.DevicesDisableHeadset)
- Chroma.Instance.Headset.SetAll(headset);
+ Chroma.Headset.SetAllAsync(headset);
- Chroma.Instance.Keypad.SetCustom(keypad);
- Chroma.Instance.ChromaLink.SetCustom(chromalink);
+ Chroma.Keypad.SetCustomAsync(keypad);
+ Chroma.ChromaLink.SetCustomAsync(chromalink);
return true;
}
@@ -126,21 +133,21 @@ protected override void RegisterVariables(VariableRegistry variableRegistry)
private Color ToColore(System.Drawing.Color value) => new Color(value.R, value.G, value.B);
- private void DetectDevices()
+ private async void DetectDevices()
{
deviceNames.Clear();
- foreach (var device in DeviceGuids.Where(d => d.Name != "Razer Core Chroma"))//somehow this device is unsupported, can't query it
+ foreach (var device in DeviceGuids)
{
try
{
- var devInfo = Chroma.Instance.Query(device.Guid);
+ var devInfo = await Chroma.QueryAsync(device.Guid);
if (devInfo.Connected)
{
deviceNames.Add(device.Name);
}
}
- catch (Corale.Colore.Razer.NativeCallException e)
+ catch (ColoreException e)
{
LogError("Error querying device: " + e.Message);
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Razer/RazerMappings.cs b/Project-Aurora/Project-Aurora/Devices/Razer/RazerMappings.cs
index f7f9ac25e..7951ea900 100644
--- a/Project-Aurora/Project-Aurora/Devices/Razer/RazerMappings.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Razer/RazerMappings.cs
@@ -1,5 +1,5 @@
-using Corale.Colore.Razer.Keyboard;
-using Corale.Colore.Razer.Mouse;
+using Colore.Effects.Keyboard;
+using Colore.Effects.Mouse;
using System;
using System.Collections.Generic;
using System.Linq;
diff --git a/Project-Aurora/Project-Aurora/Devices/Roccat/RoccatDevice.cs b/Project-Aurora/Project-Aurora/Devices/Roccat/RoccatDevice.cs
index e4111b543..f74d8b5d0 100755
--- a/Project-Aurora/Project-Aurora/Devices/Roccat/RoccatDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Roccat/RoccatDevice.cs
@@ -286,7 +286,7 @@ public bool IsConnected()
byte[] stateStruct = new byte[110];
Roccat_Talk.TalkFX.Color[] colorStruct = new Roccat_Talk.TalkFX.Color[110];
- public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
if (RyosTalkFX == null || !RyosInitialized)
return false;
@@ -303,10 +303,10 @@ public bool UpdateDevice(Dictionary keyColors,
else if (Global.Configuration.KeyboardLocalization == PreferredKeyboardLocalization.jpn)
layout = DeviceLayout.JP;
- foreach (KeyValuePair key in keyColors)
+ foreach (KeyValuePair key in keyColors)
{
if (e.Cancel) return false;
- DeviceKeys dev_key = key.Key;
+ DeviceKeys dev_key = (DeviceKeys)key.Key;
//Solution to slightly different mapping rather than giving a whole different dictionary
if (layout == DeviceLayout.ANSI)
{
@@ -320,7 +320,7 @@ public bool UpdateDevice(Dictionary keyColors,
if (Global.Configuration.VarRegistry.GetVariable($"{devicename}_enable_generic") == true)
{
generic_deactivated_first_time = true;
- if (key.Key == DeviceKeys.Peripheral_Logo || key.Key == DeviceKeys.Peripheral)
+ if ((DeviceKeys)key.Key == DeviceKeys.Peripheral_Logo || (DeviceKeys)key.Key == DeviceKeys.Peripheral)
{
//Send to generic roccat device if color not equal or 1. time after generic got enabled
if (!previous_peripheral_Color.Equals(key.Value) || generic_activated_first_time == true)
@@ -374,7 +374,7 @@ public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArg
if (e.Cancel) return false;
- bool update_result = UpdateDevice(colorComposition.keyColors, e, forced);
+ bool update_result = UpdateDevice(colorComposition.KeyColors, e, forced);
watch.Stop();
lastUpdateTime = watch.ElapsedMilliseconds;
diff --git a/Project-Aurora/Project-Aurora/Devices/ScriptedDevice/ScriptedDevice.cs b/Project-Aurora/Project-Aurora/Devices/ScriptedDevice/ScriptedDevice.cs
index 5d322deae..fbcd562e6 100644
--- a/Project-Aurora/Project-Aurora/Devices/ScriptedDevice/ScriptedDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/ScriptedDevice/ScriptedDevice.cs
@@ -136,7 +136,7 @@ public void Shutdown()
}
}
- public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
if (isInitialized)
{
@@ -165,7 +165,7 @@ public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArg
{
watch.Restart();
- bool update_result = UpdateDevice(colorComposition.keyColors, e, forced);
+ bool update_result = UpdateDevice(colorComposition.KeyColors, e, forced);
watch.Stop();
lastUpdateTime = watch.ElapsedMilliseconds;
diff --git a/Project-Aurora/Project-Aurora/Devices/SteelSeries/SteelSeriesDevice.cs b/Project-Aurora/Project-Aurora/Devices/SteelSeries/SteelSeriesDevice.cs
index c68ff22cf..74a9086dd 100755
--- a/Project-Aurora/Project-Aurora/Devices/SteelSeries/SteelSeriesDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/SteelSeries/SteelSeriesDevice.cs
@@ -21,6 +21,7 @@ public enum SteelSeriesKeyCodes
G3 = 0xEB,
G4 = 0xEC,
G5 = 0xED,
+ MSI_FN = 0xF0,
};
class SteelSeriesDevice : IDevice
@@ -118,7 +119,7 @@ public bool IsConnected()
public bool IsInitialized => this.isInitialized;
- public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
if (e.Cancel) return false;
@@ -139,7 +140,7 @@ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArg
GameSensePayloadPeripheryColorEventJSON payload = new GameSensePayloadPeripheryColorEventJSON();
gameSenseSDK.setupEvent(payload);
- foreach (KeyValuePair key in keyColors)
+ foreach (KeyValuePair key in keyColors)
{
@@ -153,7 +154,7 @@ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArg
if (e.Cancel) return false;
- switch (key.Key)
+ switch ((DeviceKeys)key.Key)
{
case DeviceKeys.Peripheral:
SendColorToPeripheral(color, payload, forced);
@@ -161,7 +162,7 @@ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArg
case DeviceKeys.Peripheral_Logo:
case DeviceKeys.Peripheral_FrontLight:
case DeviceKeys.Peripheral_ScrollWheel:
- SendColorToPeripheralZone(key.Key, color, payload);
+ SendColorToPeripheralZone((DeviceKeys)key.Key, color, payload);
break;
case DeviceKeys.MOUSEPADLIGHT1:
case DeviceKeys.MOUSEPADLIGHT2:
@@ -179,7 +180,7 @@ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArg
colorsMousepad.Add(Tuple.Create(color.R, color.G, color.B));
break;
default:
- byte hid = GetHIDCode(key.Key);
+ byte hid = GetHIDCode((DeviceKeys)key.Key);
if (hid != (byte)USBHIDCodes.ERROR)
{
@@ -210,7 +211,7 @@ public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArg
{
watch.Restart();
- bool update_result = UpdateDevice(colorComposition.keyColors, e, forced);
+ bool update_result = UpdateDevice(colorComposition.KeyColors, e, forced);
watch.Stop();
lastUpdateTime = watch.ElapsedMilliseconds;
@@ -341,7 +342,10 @@ public static byte GetHIDCode(DeviceKeys key)
case (DeviceKeys.LOGO):
return (byte)SteelSeriesKeyCodes.LOGO;
case (DeviceKeys.FN_Key):
- return (byte)SteelSeriesKeyCodes.SS_KEY;
+ if (Global.Configuration.KeyboardBrand == Settings.PreferredKeyboard.MSI_GP66_US)
+ return (byte)SteelSeriesKeyCodes.MSI_FN;
+ else
+ return (byte)SteelSeriesKeyCodes.SS_KEY;
case (DeviceKeys.G0):
return (byte)SteelSeriesKeyCodes.G0;
case (DeviceKeys.G1):
@@ -389,9 +393,9 @@ public static byte GetHIDCode(DeviceKeys key)
case (DeviceKeys.JPN_HALFFULLWIDTH):
return (byte)USBHIDCodes.TILDE;
case (DeviceKeys.OEM5):
- if (Global.kbLayout.Loaded_Localization == Settings.PreferredKeyboardLocalization.jpn)
+ /*if (Global.kbLayout.Loaded_Localization == Settings.PreferredKeyboardLocalization.jpn)
return (byte)USBHIDCodes.ERROR;
- else
+ else*/
return (byte)USBHIDCodes.TILDE;
case (DeviceKeys.TILDE):
return (byte)USBHIDCodes.TILDE;
@@ -514,9 +518,9 @@ public static byte GetHIDCode(DeviceKeys key)
case (DeviceKeys.LEFT_SHIFT):
return (byte)USBHIDCodes.LEFT_SHIFT;
case (DeviceKeys.BACKSLASH_UK):
- if (Global.kbLayout.Loaded_Localization == Settings.PreferredKeyboardLocalization.jpn)
+ /*if (Global.kbLayout.Loaded_Localization == Settings.PreferredKeyboardLocalization.jpn)
return (byte)USBHIDCodes.ERROR;
- else
+ else*/
return (byte)USBHIDCodes.BACKSLASH_UK;
case (DeviceKeys.Z):
return (byte)USBHIDCodes.Z;
@@ -588,6 +592,8 @@ public static byte GetHIDCode(DeviceKeys key)
return (byte)USBHIDCodes.NUM_ZERO;
case (DeviceKeys.NUM_PERIOD):
return (byte)USBHIDCodes.NUM_PERIOD;
+ case (DeviceKeys.POWER):
+ return (byte)USBHIDCodes.POWER;
default:
return (byte)USBHIDCodes.ERROR;
diff --git a/Project-Aurora/Project-Aurora/Devices/SteelSeries/USBHIDCodes.cs b/Project-Aurora/Project-Aurora/Devices/SteelSeries/USBHIDCodes.cs
index 5ba2a2717..e07454c1a 100644
--- a/Project-Aurora/Project-Aurora/Devices/SteelSeries/USBHIDCodes.cs
+++ b/Project-Aurora/Project-Aurora/Devices/SteelSeries/USBHIDCodes.cs
@@ -114,9 +114,9 @@ public enum USBHIDCodes
BACKSLASH_UK = 0x64, // Keyboard Non-US \ and |
APPLICATION_SELECT = 0x65,
+ POWER = 0x66,
- // skip unused special keys from 0x66 to 0xA4
- //0x66 Keyboard Power
+ // skip unused special keys from 0x67 to 0xA4
//0x67 Keypad =
//0x68 Keyboard F13
//0x69 Keyboard F14
diff --git a/Project-Aurora/Project-Aurora/Devices/UnifiedHID/AsusPugio.cs b/Project-Aurora/Project-Aurora/Devices/UnifiedHID/AsusPugio.cs
deleted file mode 100644
index 3bf082dd2..000000000
--- a/Project-Aurora/Project-Aurora/Devices/UnifiedHID/AsusPugio.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-using HidLibrary;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Aurora.Devices.UnifiedHID
-{
- internal class AsusPugio : UnifiedBase
- {
- public AsusPugio()
- {
- PrettyName = "Asus Pugio";
- this.deviceKeyMap = new Dictionary>
- {
- { DeviceKeys.Peripheral_Logo, SetLogo },
- { DeviceKeys.Peripheral_ScrollWheel, SetScrollWheel },
- { DeviceKeys.Peripheral_FrontLight, SetBottomLed }
- };
- }
-
- public override bool Connect()
- {
- if (!Global.Configuration.VarRegistry.GetVariable($"UnifiedHID_{this.GetType().Name}_enable"))
- {
- return false;
- }
-
- return this.Connect(0x0b05, new[] { 0x1846, 0x1847 }, unchecked((short)0xFFFFFF01));
- }
-
- public bool SetScrollWheel(byte r, byte g, byte b)
- {
- HidReport report = device.CreateReport();
- report.ReportId = 0x00;
- for (int i = 0; i < 64; i++)
- {
- report.Data[i] = 0x00;
- }
- report.Data[0] = 0x51;
- report.Data[1] = 0x28;
- report.Data[2] = 0x01;
- report.Data[4] = 0x00;
- report.Data[5] = 0x04;
- report.Data[6] = r;
- report.Data[7] = g;
- report.Data[8] = b;
- return device.WriteReport(report);
- }
-
- public bool SetLogo(byte r, byte g, byte b)
- {
- SetBottomLed(r, g, b);
- HidReport report = device.CreateReport();
- report.ReportId = 0x00;
- for (int i = 0; i < 64; i++)
- {
- report.Data[i] = 0x00;
- }
- report.Data[0] = 0x51;
- report.Data[1] = 0x28;
- report.Data[2] = 0x00;
- report.Data[4] = 0x00;
- report.Data[5] = 0x04;
- report.Data[6] = r;
- report.Data[7] = g;
- report.Data[8] = b;
- return device.WriteReport(report);
- }
-
- public bool SetBottomLed(byte r, byte g, byte b)
- {
- HidReport report = device.CreateReport();
- report.ReportId = 0x00;
- for (int i = 0; i < 64; i++)
- {
- report.Data[i] = 0x00;
- }
- report.Data[0] = 0x51;
- report.Data[1] = 0x28;
- report.Data[2] = 0x02;
- report.Data[4] = 0x00;
- report.Data[5] = 0x04;
- report.Data[6] = r;
- report.Data[7] = g;
- report.Data[8] = b;
- return device.WriteReport(report);
- }
- }
-
-}
diff --git a/Project-Aurora/Project-Aurora/Devices/UnifiedHID/RivalMouses.cs b/Project-Aurora/Project-Aurora/Devices/UnifiedHID/RivalMouses.cs
deleted file mode 100644
index d0284c25e..000000000
--- a/Project-Aurora/Project-Aurora/Devices/UnifiedHID/RivalMouses.cs
+++ /dev/null
@@ -1,196 +0,0 @@
-using HidLibrary;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Aurora.Devices.UnifiedHID
-{
-
- internal class Rival100 : UnifiedBase
- {
- public Rival100()
- {
- PrettyName = "Rival 100";
- deviceKeyMap = new Dictionary>
- {
- { DeviceKeys.Peripheral_Logo, SetLogo }
- };
- }
-
- public override bool Connect()
- {
- if (!Global.Configuration.VarRegistry.GetVariable($"UnifiedHID_{this.GetType().Name}_enable"))
- {
- return false;
- }
-
- return this.Connect(0x1038, new[] { 0x1702 }, unchecked((short)0xFFFFFFC0));
- }
-
- public bool SetLogo(byte r, byte g, byte b)
- {
- HidReport report = device.CreateReport();
- report.ReportId = 0x02;
- report.Data[0] = 0x05;
- report.Data[1] = 0x00;
- report.Data[2] = r;
- report.Data[3] = g;
- report.Data[4] = b;
- return device.WriteReport(report);
- }
- }
-
- internal class Rival110 : UnifiedBase
- {
- public Rival110()
- {
- PrettyName = "Rival 110";
- deviceKeyMap = new Dictionary>
- {
- { DeviceKeys.Peripheral_Logo, SetLogo }
- };
- }
-
- public override bool Connect()
- {
- if (!Global.Configuration.VarRegistry.GetVariable($"UnifiedHID_{this.GetType().Name}_enable"))
- {
- return false;
- }
-
- return this.Connect(0x1038, new[] { 0x1729 }, unchecked((short)0xFFFFFFC0));
- }
-
- public bool SetLogo(byte r, byte g, byte b)
- {
- HidReport report = device.CreateReport();
- report.ReportId = 0x02;
- report.Data[0] = 0x05;
- report.Data[1] = 0x00;
- report.Data[2] = r;
- report.Data[3] = g;
- report.Data[4] = b;
- report.Data[5] = 0x00;
- report.Data[6] = 0x00;
- report.Data[7] = 0x00;
- report.Data[8] = 0x00;
-
- return device.WriteReport(report);
- }
- }
-
- internal class Rival300 : UnifiedBase
- {
- public Rival300()
- {
- PrettyName = "Rival 300";
- this.deviceKeyMap = new Dictionary>
- {
- { DeviceKeys.Peripheral_Logo, SetLogo },
- { DeviceKeys.Peripheral_ScrollWheel, SetScrollWheel }
- };
- }
-
- public override bool Connect()
- {
- if (!Global.Configuration.VarRegistry.GetVariable($"UnifiedHID_{this.GetType().Name}_enable"))
- {
- return false;
- }
-
- return this.Connect(0x1038, new[] { 0x1710, 0x171A, 0x1394, 0x1384, 0x1718, 0x1712 }, unchecked((short)0xFFFFFFC0));
- }
-
- public bool SetScrollWheel(byte r, byte g, byte b)
- {
- HidReport report = device.CreateReport();
- report.ReportId = 0x02;
- report.Data[0] = 0x08;
- report.Data[1] = 0x02;
- report.Data[2] = r;
- report.Data[3] = g;
- report.Data[4] = b;
- return device.WriteReport(report);
- }
-
- public bool SetLogo(byte r, byte g, byte b)
- {
- HidReport report = device.CreateReport();
- report.ReportId = 0x02;
- report.Data[0] = 0x08;
- report.Data[1] = 0x01;
- report.Data[2] = r;
- report.Data[3] = g;
- report.Data[4] = b;
- return device.WriteReport(report);
- }
- }
-
- internal class Rival500 : UnifiedBase
- {
- public Rival500()
- {
- PrettyName = "Rival 500";
- this.deviceKeyMap = new Dictionary>
- {
- { DeviceKeys.Peripheral_Logo, SetLogo },
- { DeviceKeys.Peripheral_ScrollWheel, SetScrollWheel }
- };
- }
-
- public override bool Connect()
- {
- if (!Global.Configuration.VarRegistry.GetVariable($"UnifiedHID_{this.GetType().Name}_enable"))
- {
- return false;
- }
-
- return this.Connect(0x1038, new[] { 0x170e }, unchecked((short)0xFFFFFFC0));
- }
-
- public bool SetScrollWheel(byte r, byte g, byte b)
- {
- HidReport report = device.CreateReport();
- report.ReportId = 0x03;
- report.Data[0] = 0x05;
- report.Data[1] = 0x00;
- report.Data[2] = 0x01;
- report.Data[3] = r;
- report.Data[4] = g;
- report.Data[5] = b;
- report.Data[6] = 0xFF;
- report.Data[7] = 0x32;
- report.Data[8] = 0xC8;
- report.Data[9] = 0xC8;
- report.Data[10] = 0x00;
- report.Data[11] = 0x01;
- report.Data[12] = 0x01;
- return device.WriteReport(report);
- }
-
- public bool SetLogo(byte r, byte g, byte b)
- {
- HidReport report = device.CreateReport();
- report.ReportId = 0x03;
- report.Data[0] = 0x05;
- report.Data[1] = 0x00;
- report.Data[2] = 0x00;
- report.Data[3] = r;
- report.Data[4] = g;
- report.Data[5] = b;
- report.Data[6] = 0xFF;
- report.Data[7] = 0x32;
- report.Data[8] = 0xC8;
- report.Data[9] = 0xC8;
- report.Data[10] = 0x00;
- report.Data[11] = 0x00;
- report.Data[12] = 0x01;
-
- return device.WriteReport(report);
- }
-
- }
-
-}
diff --git a/Project-Aurora/Project-Aurora/Devices/UnifiedHID/RoccatTyon.cs b/Project-Aurora/Project-Aurora/Devices/UnifiedHID/RoccatTyon.cs
deleted file mode 100644
index 1b29f7b7c..000000000
--- a/Project-Aurora/Project-Aurora/Devices/UnifiedHID/RoccatTyon.cs
+++ /dev/null
@@ -1,140 +0,0 @@
-using HidLibrary;
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Aurora.Devices.UnifiedHID
-{
-
- internal class RoccatTyon : UnifiedBase
- {
- private static HidDevice ctrl_device_leds;
- private static HidDevice ctrl_device;
-
- public RoccatTyon()
- {
- PrettyName = "Roccat Tyon";
- }
-
- private bool InitMouseColor()
- {
- return ctrl_device.WriteFeatureData(initPacket);
- }
-
- static bool WaitCtrlDevice()
- {
- for (int i = 1; i < 3; i++) // 3 Tries because the first one always fails.
- {
- if (ctrl_device.ReadFeatureData(out byte[] buffer, 0x04) && buffer.Length > 2)
- {
- if (buffer[1] == 0x01)
- return true;
- }
- else
- return false;
- }
- return false;
- }
-
- public override bool Connect()
- {
- if (!Global.Configuration.VarRegistry.GetVariable($"UnifiedHID_{this.GetType().Name}_enable"))
- {
- return false;
- }
- IEnumerable devices = HidDevices.Enumerate(0x1E7D, new int[] { 0x2E4A });
- try
- {
- if (devices.Count() > 0)
- {
- ctrl_device_leds = devices.First(dev => dev.Capabilities.UsagePage == 0x0001 && dev.Capabilities.Usage == 0x0002);
- ctrl_device = devices.First(dev => dev.Capabilities.FeatureReportByteLength > 50);
- ctrl_device.OpenDevice();
- ctrl_device_leds.OpenDevice();
- bool success = InitMouseColor() && WaitCtrlDevice();
- if (!success)
- {
- Global.logger.LogLine($"Roccat Tyon Could not connect\n", Logging_Level.Error);
- ctrl_device.CloseDevice();
- ctrl_device_leds.CloseDevice();
- }
- Global.logger.LogLine($"Roccat Tyon Connected\n", Logging_Level.Info);
- return (IsConnected = success);
- }
- }
- catch (Exception exc)
- {
- Global.logger.LogLine($"Error when attempting to open UnifiedHID device:\n{exc}", Logging_Level.Error);
- }
- return false;
- }
-
- // We need to override Disconnect() too cause we have two HID devices open for this mouse.
- public override bool Disconnect()
- {
- try
- {
- ctrl_device.CloseDevice();
- ctrl_device_leds.CloseDevice();
- return true;
- }
- catch (Exception exc)
- {
- Global.logger.LogLine($"Error when attempting to close UnifiedHID device:\n{exc}", Logging_Level.Error);
- }
- return false;
- }
-
- public override bool SetLEDColour(DeviceKeys key, byte red, byte green, byte blue)
- {
- try
- {
- if (!this.IsConnected)
- return false;
-
- byte[] hwmap =
- {
- red,
- green,
- blue,
- 0x00,
- 0x00,
- red,
- green,
- blue,
- 0x00,
- 0x80,
- 0x80
- };
-
- byte[] workbuf = new byte[30];
- Array.Copy(controlPacket, 0, workbuf, 0, controlPacket.Length);
- Array.Copy(hwmap, 0, workbuf, controlPacket.Length, hwmap.Length);
-
- return ctrl_device.WriteFeatureData(workbuf);
- }
- catch (Exception exc)
- {
- Global.logger.LogLine($"Error when attempting to close UnifiedHID device:\n{exc}", Logging_Level.Error);
- return false;
- }
- }
-
- // Packet with values set to white for mouse initialisation.
- static readonly byte[] initPacket = new byte[] {
- 0x06,0x1e,0x00,0x00,
- 0x06,0x06,0x06,0x10,0x20,0x40,0x80,0xa4,0x02,0x03,0x33,0x00,0x01,0x01,0x03,
- 0xff,0xff,0xff,0x00,0x00,0xff,0xff,0xff,0x00,0x01,0x08
- };
-
- // Packet with fixed values for affixing to mouse colors.
- static readonly byte[] controlPacket = new byte[] {
- 0x06,0x1e,0x00,0x00,
- 0x06,0x06,0x06,0x10,0x20,0x40,0x80,0xa4,0x02,0x03,0x33,0x00,0x01,0x01,0x03
- };
- }
-}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/Devices/UnifiedHID/UnifiedHID.cs b/Project-Aurora/Project-Aurora/Devices/UnifiedHID/UnifiedHID.cs
deleted file mode 100644
index fc7801411..000000000
--- a/Project-Aurora/Project-Aurora/Devices/UnifiedHID/UnifiedHID.cs
+++ /dev/null
@@ -1,310 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using Aurora.Settings;
-using System.Threading;
-using System.Threading.Tasks;
-using HidLibrary;
-using System.ComponentModel;
-using System.Reflection;
-
-namespace Aurora.Devices.UnifiedHID
-{
- class UnifiedHIDDevice : IDevice
- {
- private string devicename = "UnifiedHID";
- private bool isInitialized = false;
- private bool peripheral_updated = false;
- private readonly object action_lock = new object();
- private System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
- private long lastUpdateTime = 0;
- private VariableRegistry default_registry = null;
-
- List AllDevices = new List();
-
-
-
- public UnifiedHIDDevice()
- {
- //Copied GetLoadableTypes from https://haacked.com/archive/2012/07/23/get-all-types-in-an-assembly.aspx/
- IEnumerable GetLoadableTypes(Assembly assembly)
- {
- if (assembly == null) throw new ArgumentNullException(nameof(assembly));
- try
- {
- return assembly.GetTypes();
- }
- catch (ReflectionTypeLoadException e)
- {
- return e.Types.Where(t => t != null);
- }
- }
-
- try
- {
- AppDomain.CurrentDomain.GetAssemblies()
- .SelectMany(assembly => GetLoadableTypes(assembly))
- .Where(type => type.IsSubclassOf(typeof(UnifiedBase))).ToList()
- .ForEach(class_ => AllDevices.Add((ISSDevice)Activator.CreateInstance(class_)));
- }
- catch (Exception exc)
- {
- Global.logger.Error("UnifiedHID class could not be constructed: " + exc);
- }
- }
-
- List FoundDevices = new List();
-
- public bool Initialize()
- {
- lock (action_lock)
- {
- if (!isInitialized)
- {
- this.FoundDevices.Clear();
- try
- {
- foreach (ISSDevice dev in AllDevices)
- {
- if (dev.Connect())
- FoundDevices.Add(dev);
- }
- }
- catch (Exception e)
- {
- Global.logger.Error("UnifiedHID could not be initialized: " + e);
- isInitialized = false;
- }
- if (FoundDevices.Count > 0)
- isInitialized = true;
- }
-
- return isInitialized;
- }
- }
-
- public void Shutdown()
- {
- lock (action_lock)
- {
- try
- {
- if (isInitialized)
- {
- foreach (ISSDevice dev in FoundDevices)
- {
- dev.Disconnect();
- }
- this.FoundDevices.Clear();
- this.Reset();
-
- isInitialized = false;
- }
- }
- catch (Exception ex)
- {
- Global.logger.Error("There was an error shutting down UnifiedHID: " + ex);
- isInitialized = false;
- }
-
- }
- }
-
- public string DeviceDetails => IsInitialized
- ? "Initialized"
- : "Not Initialized";
-
- public string DeviceName => devicename;
-
- public void Reset()
- {
- if (this.IsInitialized&& (peripheral_updated))
- {
- peripheral_updated = false;
- }
- }
-
- public bool Reconnect()
- {
- Shutdown();
- return Initialize();
- }
-
- public bool IsConnected()
- {
- return this.isInitialized;
- }
-
- public bool IsInitialized => this.isInitialized;
-
- public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
- {
- if (e.Cancel) return false;
- try
- {
- List> colors = new List>();
-
- foreach (ISSDevice device in FoundDevices)
- {
- if (e.Cancel) return false;
-
- if (!device.IsKeyboard)
- {
- foreach (KeyValuePair key in keyColors)
- {
- Color color = (Color)key.Value;
- //Apply and strip Alpha
- color = Color.FromArgb(255, Utils.ColorUtils.MultiplyColorByScalar(color, color.A / 255.0D));
-
- if (e.Cancel) return false;
- else if (Global.Configuration.AllowPeripheralDevices && !Global.Configuration.DevicesDisableMouse)
- {
- if (key.Key == DeviceKeys.Peripheral_Logo || key.Key == DeviceKeys.Peripheral_ScrollWheel || key.Key == DeviceKeys.Peripheral_FrontLight)
- {
- device.SetLEDColour(key.Key, color.R, color.G, color.B);
- }
- peripheral_updated = true;
- }
- else
- {
- peripheral_updated = false;
- }
- }
- }
- else
- {
- if (!Global.Configuration.DevicesDisableKeyboard)
- {
- device.SetMultipleLEDColour(keyColors);
- peripheral_updated = true;
- }
- else
- {
- peripheral_updated = false;
- }
- }
- }
-
-
- return true;
- }
- catch (Exception ex)
- {
- Global.logger.Error("UnifiedHID, error when updating device: " + ex);
- return false;
- }
- }
-
- public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArgs e, bool forced = false)
- {
- watch.Restart();
-
- bool update_result = UpdateDevice(colorComposition.keyColors, e, forced);
-
- watch.Stop();
- lastUpdateTime = watch.ElapsedMilliseconds;
-
- return update_result;
- }
-
- public bool IsPeripheralConnected()
- {
- return isInitialized;
- }
-
- public bool IsKeyboardConnected()
- {
- return isInitialized;
- //return false;
- }
-
- public string DeviceUpdatePerformance => (isInitialized ? lastUpdateTime + " ms" : "");
-
- public VariableRegistry RegisteredVariables
- {
- get
- {
- if (default_registry == null)
- {
- default_registry = new VariableRegistry();
- foreach (ISSDevice device in AllDevices)
- {
- default_registry.Register($"UnifiedHID_{device.GetType().Name}_enable", false, $"Enable {(string.IsNullOrEmpty(device.PrettyName) ? device.GetType().Name : device.PrettyName)} in {devicename}");
- }
- }
- return default_registry;
- }
- }
- }
-
- interface ISSDevice
- {
- bool IsConnected { get; }
- bool IsKeyboard { get; }
- string PrettyName { get; }
- bool Connect();
- bool Disconnect();
- bool SetLEDColour(DeviceKeys key, byte red, byte green, byte blue);
- bool SetMultipleLEDColour(Dictionary keyColors);
- }
-
- abstract class UnifiedBase : ISSDevice
- {
- protected HidDevice device;
- protected Dictionary> deviceKeyMap;
- public bool IsConnected { get; protected set; } = false;
- public bool IsKeyboard { get; protected set; } = false;
- public string PrettyName { get; protected set; }
-
- protected bool Connect(int vendorID, int[] productIDs, short usagePage)
- {
- IEnumerable devices = HidDevices.Enumerate(vendorID, productIDs);
-
- if (devices.Count() > 0)
- {
- try
- {
- device = devices.First(dev => dev.Capabilities.UsagePage == usagePage);
- device.OpenDevice();
- return (IsConnected = true);
- }
- catch (Exception exc)
- {
- Global.logger.LogLine($"Error when attempting to open UnifiedHID device:\n{exc}", Logging_Level.Error);
- }
- }
- return false;
- }
-
- public abstract bool Connect();
-
- public virtual bool Disconnect()
- {
- try
- {
- device.CloseDevice();
- return true;
- }
- catch
- {
- return false;
- }
- }
-
- public virtual bool SetLEDColour(DeviceKeys key, byte red, byte green, byte blue)
- {
- if (this.deviceKeyMap.TryGetValue(key, out Func func))
- return func.Invoke(red, green, blue);
-
- return false;
- }
-
- public virtual bool SetMultipleLEDColour(Dictionary keyColors)
- {
- return false;
- }
-
- }
-
-}
\ No newline at end of file
diff --git a/Project-Aurora/Project-Aurora/Devices/Uniwill/UniwillDevice.cs b/Project-Aurora/Project-Aurora/Devices/Uniwill/UniwillDevice.cs
index e945dcc2d..063b95d09 100644
--- a/Project-Aurora/Project-Aurora/Devices/Uniwill/UniwillDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Uniwill/UniwillDevice.cs
@@ -196,7 +196,7 @@ public bool IsConnected()
bool bRefreshOnce = true; // This is used to refresh effect between Row-Type and Fw-Type change or layout light level change
- public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ public bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
if (e.Cancel) return false;
@@ -214,7 +214,7 @@ public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArg
{
watch.Restart();
- bool update_result = UpdateDevice(colorComposition.keyColors, e, forced);
+ bool update_result = UpdateDevice(colorComposition.KeyColors, e, forced);
watch.Stop();
lastUpdateTime = watch.ElapsedMilliseconds;
@@ -222,9 +222,9 @@ public bool UpdateDevice(DeviceColorComposition colorComposition, DoWorkEventArg
return update_result;
}
- private KeyValuePair AdjustBrightness(KeyValuePair kc)
+ private KeyValuePair AdjustBrightness(KeyValuePair kc)
{
- var newEntry = new KeyValuePair(kc.Key, Color.FromArgb(255, Utils.ColorUtils.MultiplyColorByScalar(kc.Value, (kc.Value.A / 255.0D) * brightness)));
+ var newEntry = new KeyValuePair(kc.Key, Color.FromArgb(255, Utils.ColorUtils.MultiplyColorByScalar(kc.Value, (kc.Value.A / 255.0D) * brightness)));
kc = newEntry;
return kc;
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Vulcan/Vulcan.cs b/Project-Aurora/Project-Aurora/Devices/Vulcan/Vulcan.cs
index d4d34b2c6..ed622ab55 100644
--- a/Project-Aurora/Project-Aurora/Devices/Vulcan/Vulcan.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Vulcan/Vulcan.cs
@@ -37,18 +37,18 @@ public override void Shutdown()
_keyboards.Clear();
}
- public override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ protected override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
if (!IsInitialized)
return false;
- foreach (var key in keyColors)
+ foreach (var (key, clr) in keyColors)
{
foreach (var keyboard in _keyboards)
{
- if (VulcanKeyMap.KeyMap.TryGetValue(key.Key, out var vulcanKey))
+ if (VulcanKeyMap.KeyMap.TryGetValue((DeviceKeys)key, out var vulcanKey))
{
- var color = ColorUtils.CorrectWithAlpha(key.Value);
+ var color = ColorUtils.CorrectWithAlpha(clr);
keyboard.SetKeyColor(vulcanKey,color.R, color.G, color.B );
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Vulcan/VulcanKeyMap.cs b/Project-Aurora/Project-Aurora/Devices/Vulcan/VulcanKeyMap.cs
index 59ff6b77a..7942986b2 100644
--- a/Project-Aurora/Project-Aurora/Devices/Vulcan/VulcanKeyMap.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Vulcan/VulcanKeyMap.cs
@@ -116,7 +116,8 @@ public static class VulcanKeyMap
{ DeviceKeys.NUM_PLUS, Key.NUM_PLUS },
{ DeviceKeys.NUM_ENTER, Key.NUM_ENTER },
{ DeviceKeys.BACKSLASH_UK, Key.ISO_BACKSLASH },
- { DeviceKeys.HASHTAG, Key.ISO_HASH }
+ { DeviceKeys.HASHTAG, Key.ISO_HASH },
+ { DeviceKeys.VOLUME_MUTE, Key.MUTE }
};
}
}
diff --git a/Project-Aurora/Project-Aurora/Devices/Wooting/WootingDevice.cs b/Project-Aurora/Project-Aurora/Devices/Wooting/WootingDevice.cs
index 40c7d7ef1..a33b631be 100755
--- a/Project-Aurora/Project-Aurora/Devices/Wooting/WootingDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/Wooting/WootingDevice.cs
@@ -58,7 +58,7 @@ public override void Shutdown()
IsInitialized = false;
}
- public override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
+ protected override bool UpdateDevice(Dictionary keyColors, DoWorkEventArgs e, bool forced = false)
{
if (!IsInitialized)
return false;
@@ -69,14 +69,14 @@ public override bool UpdateDevice(Dictionary keyColors, DoWor
try
{
- foreach (var key in keyColors)
+ foreach (var (key, clr) in keyColors)
{
- if (WootingKeyMap.KeyMap.TryGetValue(key.Key, out var wootKey))
+ if (WootingKeyMap.KeyMap.TryGetValue((DeviceKeys)key, out var wootKey))
{
- var clr = ColorUtils.CorrectWithAlpha(key.Value);
- RGBControl.SetKey(wootKey, (byte)(clr.R * rScalar),
- (byte)(clr.G * gScalar),
- (byte)(clr.B * bScalar));
+ var color = ColorUtils.CorrectWithAlpha(clr);
+ RGBControl.SetKey(wootKey, (byte)(color.R * rScalar),
+ (byte)(color.G * gScalar),
+ (byte)(color.B * bScalar));
}
}
RGBControl.UpdateKeyboard();
diff --git a/Project-Aurora/Project-Aurora/Devices/YeeLight/YeeLightDevice.cs b/Project-Aurora/Project-Aurora/Devices/YeeLight/YeeLightDevice.cs
index e7c5770ff..a4333ffce 100644
--- a/Project-Aurora/Project-Aurora/Devices/YeeLight/YeeLightDevice.cs
+++ b/Project-Aurora/Project-Aurora/Devices/YeeLight/YeeLightDevice.cs
@@ -14,6 +14,7 @@
using YeeLightAPI.YeeLightConstants;
using YeeLightAPI.YeeLightExceptions;
using YeeLightAPI;
+using static YeeLightAPI.YeeLightExceptions.Exceptions;
namespace Aurora.Devices.YeeLight
{
@@ -21,63 +22,67 @@ public class YeeLightDevice : DefaultDevice
{
public override string DeviceName => "YeeLight";
- private const int lightListenPort = 55443;
- private readonly Stopwatch updateDelayStopWatch = new Stopwatch();
- private List lights = new List();
+ private const int LightListenPort = 55443;
+ private readonly Stopwatch _updateDelayStopWatch = new();
+ private readonly List