diff --git a/app/Ally/AllyControl.cs b/app/Ally/AllyControl.cs index 8e54ddc9..601d4749 100644 --- a/app/Ally/AllyControl.cs +++ b/app/Ally/AllyControl.cs @@ -1,6 +1,7 @@ using GHelper.Gpu.AMD; using GHelper.Input; using GHelper.USB; +using System.Text; namespace GHelper.Ally { @@ -9,9 +10,23 @@ namespace GHelper.Ally { Auto = 0, Gamepad = 1, + WASD = 2, Mouse = 3, } + public enum BindingZone : byte + { + DPadUpDown = 1, + DPadLeftRight = 2, + StickClick = 3, + Bumper = 4, + AB = 5, + XY = 6, + ViewMenu = 7, + M1M2 = 8, + Trigger = 9 + } + public class AllyControl { System.Timers.Timer timer = default!; @@ -25,28 +40,62 @@ namespace GHelper.Ally static int fpsLimit = -1; - const int CodeM1 = 0x028f; - const int CodeM2 = 0x028e; + public const int CodeM1 = 0x028f; + public const int CodeM2 = 0x028e; + + private byte[] commitReset1of4 = new byte[64] + { + 0x5A, 0xD1, 0x0F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + }; + + private byte[] commitReset2of4 = new byte[64] + { + 0x5A, 0xD1, 0x06, 0x02, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + private byte[] commitReset3of4 = new byte[64] + { + 0x5A, 0xD1, 0x04, 0x04, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + private byte[] commitReset4of4 = new byte[64] + { + 0x5A, 0xD1, 0x05, 0x04, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; public static Dictionary BindingCodes = new Dictionary { + { -1, "--------" }, + { 0x0000, "[ Disabled ]" }, { 0x028f, "M1" }, { 0x028e, "M2" }, - { 0x0000, "-------" }, { 0x0101, "A" }, { 0x0102, "B" }, { 0x0103, "X" }, { 0x0104, "Y" }, - { 0x0105, "left bumper" }, - { 0x0106, "right bumper" }, - { 0x0107, "left stick click" }, - { 0x0108, "right stick click" }, - { 0x0109, "dpad up" }, - { 0x010A, "dpad down" }, - { 0x010B, "dpad left" }, - { 0x010C, "dpad right" }, - { 0x0111, "view button" }, - { 0x0112, "menu button" }, + { 0x0105, "Left Bumper" }, + { 0x0106, "Right Bumper" }, + { 0x0107, "Left Stick Click" }, + { 0x0108, "Right Stick Click" }, + { 0x0109, "DPad Up" }, + { 0x010A, "DPad Down" }, + { 0x010B, "DPad Left" }, + { 0x010C, "DPad Right" }, + { 0x0111, "View Button" }, + { 0x0112, "Menu Button" }, { 0x0113, "XBox/Steam" }, { 0x0276, "Esc" }, { 0x0250, "F1" }, @@ -242,6 +291,9 @@ namespace GHelper.Ally static private byte[] DecodeBinding(int binding) { + + if (binding < 0) return new byte[2]; + byte command = (byte)(binding & 0xFF); byte device = (byte)((binding >> 8) & 0xFF); @@ -266,21 +318,65 @@ namespace GHelper.Ally return code; } - static public void SetBindings() - { - int M1 = AppConfig.Get("bind_m1", CodeM1); - int M2 = AppConfig.Get("bind_m2", CodeM2); - byte[] bindings = new byte[50]; - byte[] init = new byte[] { AsusHid.INPUT_ID, 0xd1, 0x02, 0x08, 0x2c }; + static private void ApplyBindings(BindingZone zone) + { + int Key1, Key2; + switch (zone) + { + case BindingZone.DPadUpDown: + Key1 = AppConfig.Get("bind_dpu"); + Key2 = AppConfig.Get("bind_dpd"); + break; + case BindingZone.DPadLeftRight: + Key1 = AppConfig.Get("bind_dpl"); + Key2 = AppConfig.Get("bind_dpr"); + break; + case BindingZone.AB: + Key1 = AppConfig.Get("bind_a"); + Key2 = AppConfig.Get("bind_b"); + break; + case BindingZone.XY: + Key1 = AppConfig.Get("bind_x"); + Key2 = AppConfig.Get("bind_y"); + break; + default: + Key1 = AppConfig.Get("bind_m2"); + Key2 = AppConfig.Get("bind_m1"); + break; + } + + if (Key1 == -1 && Key2 == -1) return; + + byte[] bindings = new byte[64]; + byte[] init = new byte[] { AsusHid.INPUT_ID, 0xd1, 0x02, (byte)zone, 0x2c }; init.CopyTo(bindings, 0); - DecodeBinding(M2).CopyTo(bindings, 5); - if (M2 == CodeM2) DecodeBinding(M2).CopyTo(bindings, 16); - DecodeBinding(M1).CopyTo(bindings, 27); - if (M1 == CodeM1) DecodeBinding(M2).CopyTo(bindings, 16); + + DecodeBinding(Key1).CopyTo(bindings, 5); + DecodeBinding(Key1).CopyTo(bindings, 16); + + DecodeBinding(Key2).CopyTo(bindings, 27); + DecodeBinding(Key2).CopyTo(bindings, 38); + + //AsusHid.WriteInput(Encoding.ASCII.GetBytes("ZASUS Tech.Inc."), "Init"); + + AsusHid.WriteInput(bindings, $"Bind{zone}"); + AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xd1, 0x0a, 0x01 }); + + + + } + + static public void SetBindings() + { + ApplyBindings(BindingZone.DPadUpDown); + ApplyBindings(BindingZone.DPadLeftRight); + ApplyBindings(BindingZone.AB); + ApplyBindings(BindingZone.M1M2); + ApplyBindings(BindingZone.XY); + - AsusHid.WriteInput(bindings, "Bind"); } static public void SetDeadzones() @@ -309,6 +405,7 @@ namespace GHelper.Ally private void ApplyMode(ControllerMode applyMode, string log = "ControllerMode") { AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xd1, 1, 1, (byte)applyMode }, log); + AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xd1, 0x0a, 0x01 }); SetBindings(); } diff --git a/app/AppConfig.cs b/app/AppConfig.cs index 887d305d..f111d7a4 100644 --- a/app/AppConfig.cs +++ b/app/AppConfig.cs @@ -384,7 +384,7 @@ public static class AppConfig public static bool IsStrixLimitedRGB() { - return (ContainsModel("G614JV") || ContainsModel("G614JZ") || ContainsModel("G512LI") || ContainsModel("G513R") || ContainsModel("G713PV") || ContainsModel("G513IE") || ContainsModel("G713RC") || ContainsModel("G513QM")) && !Is("per_key_rgb"); + return (ContainsModel("G614JV") || ContainsModel("G614JZ") || ContainsModel("G512LI") || ContainsModel("G513R") || ContainsModel("G713PV") || ContainsModel("G513IE") || ContainsModel("G713RC") || ContainsModel("G513QM") || ContainsModel("G531G")) && !Is("per_key_rgb"); } public static bool IsNoDirectRGB() diff --git a/app/Handheld.Designer.cs b/app/Handheld.Designer.cs index 0a477669..ef6dd6ca 100644 --- a/app/Handheld.Designer.cs +++ b/app/Handheld.Designer.cs @@ -64,11 +64,8 @@ pictureSDeadzone = new PictureBox(); labelSDeadzone = new Label(); panelBindings = new Panel(); - labelM2 = new Label(); - comboM2 = new UI.RComboBox(); - labelM1 = new Label(); - comboM1 = new UI.RComboBox(); - panel1 = new Panel(); + tableBindings = new TableLayoutPanel(); + panelBindingsTitle = new Panel(); pictureBindings = new PictureBox(); labelBindings = new Label(); panelController.SuspendLayout(); @@ -93,7 +90,7 @@ panelSDeadzone.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureSDeadzone).BeginInit(); panelBindings.SuspendLayout(); - panel1.SuspendLayout(); + panelBindingsTitle.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureBindings).BeginInit(); SuspendLayout(); // @@ -126,7 +123,7 @@ buttonReset.BorderColor = Color.Transparent; buttonReset.BorderRadius = 2; buttonReset.FlatStyle = FlatStyle.Flat; - buttonReset.Location = new Point(20, 842); + buttonReset.Location = new Point(20, 840); buttonReset.Margin = new Padding(4, 2, 4, 2); buttonReset.Name = "buttonReset"; buttonReset.Secondary = true; @@ -365,7 +362,7 @@ // // pictureTDeadzone // - pictureTDeadzone.BackgroundImage = Properties.Resources.icons8_controller_32; + pictureTDeadzone.BackgroundImage = Properties.Resources.icons8_xbox_lt_32; pictureTDeadzone.BackgroundImageLayout = ImageLayout.Zoom; pictureTDeadzone.ErrorImage = null; pictureTDeadzone.InitialImage = null; @@ -532,7 +529,7 @@ // // pictureSDeadzone // - pictureSDeadzone.BackgroundImage = Properties.Resources.icons8_controller_32; + pictureSDeadzone.BackgroundImage = Properties.Resources.icons8_joystick_32; pictureSDeadzone.BackgroundImageLayout = ImageLayout.Zoom; pictureSDeadzone.ErrorImage = null; pictureSDeadzone.InitialImage = null; @@ -556,74 +553,42 @@ // // panelBindings // - panelBindings.Controls.Add(labelM2); - panelBindings.Controls.Add(comboM2); - panelBindings.Controls.Add(labelM1); - panelBindings.Controls.Add(comboM1); - panelBindings.Controls.Add(panel1); + panelBindings.Controls.Add(tableBindings); + panelBindings.Controls.Add(panelBindingsTitle); panelBindings.Dock = DockStyle.Left; panelBindings.Location = new Point(570, 10); - panelBindings.MinimumSize = new Size(500, 0); + panelBindings.MinimumSize = new Size(600, 0); panelBindings.Name = "panelBindings"; - panelBindings.Size = new Size(500, 912); + panelBindings.Size = new Size(600, 912); panelBindings.TabIndex = 46; // - // labelM2 + // tableBindings // - labelM2.AutoSize = true; - labelM2.Location = new Point(19, 146); - labelM2.Margin = new Padding(4, 0, 4, 0); - labelM2.Name = "labelM2"; - labelM2.Size = new Size(49, 32); - labelM2.TabIndex = 48; - labelM2.Text = "M2"; + tableBindings.AutoSize = true; + tableBindings.ColumnCount = 3; + tableBindings.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F)); + tableBindings.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F)); + tableBindings.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 40F)); + tableBindings.Location = new Point(0, 60); + tableBindings.Name = "tableBindings"; + tableBindings.Padding = new Padding(5); + tableBindings.RowCount = 1; + tableBindings.RowStyles.Add(new RowStyle(SizeType.Percent, 50F)); + tableBindings.Size = new Size(500, 10); + tableBindings.TabIndex = 49; // - // comboM2 + // panelBindingsTitle // - comboM2.BorderColor = Color.White; - comboM2.ButtonColor = Color.FromArgb(255, 255, 255); - comboM2.FormattingEnabled = true; - comboM2.Items.AddRange(new object[] { Properties.Strings.Default, Properties.Strings.VolumeMute, Properties.Strings.PlayPause, Properties.Strings.PrintScreen, Properties.Strings.ToggleAura, Properties.Strings.Custom }); - comboM2.Location = new Point(82, 144); - comboM2.Margin = new Padding(4, 3, 4, 3); - comboM2.Name = "comboM2"; - comboM2.Size = new Size(374, 40); - comboM2.TabIndex = 47; - // - // labelM1 - // - labelM1.AutoSize = true; - labelM1.Location = new Point(19, 87); - labelM1.Margin = new Padding(4, 0, 4, 0); - labelM1.Name = "labelM1"; - labelM1.Size = new Size(49, 32); - labelM1.TabIndex = 46; - labelM1.Text = "M1"; - // - // comboM1 - // - comboM1.BorderColor = Color.White; - comboM1.ButtonColor = Color.FromArgb(255, 255, 255); - comboM1.FormattingEnabled = true; - comboM1.Items.AddRange(new object[] { Properties.Strings.Default, Properties.Strings.VolumeMute, Properties.Strings.PlayPause, Properties.Strings.PrintScreen, Properties.Strings.ToggleAura, Properties.Strings.Custom }); - comboM1.Location = new Point(82, 85); - comboM1.Margin = new Padding(4, 3, 4, 3); - comboM1.Name = "comboM1"; - comboM1.Size = new Size(374, 40); - comboM1.TabIndex = 45; - // - // panel1 - // - panel1.AutoSize = true; - panel1.AutoSizeMode = AutoSizeMode.GrowAndShrink; - panel1.Controls.Add(pictureBindings); - panel1.Controls.Add(labelBindings); - panel1.Dock = DockStyle.Top; - panel1.Location = new Point(0, 0); - panel1.Margin = new Padding(4); - panel1.Name = "panel1"; - panel1.Size = new Size(500, 60); - panel1.TabIndex = 44; + panelBindingsTitle.AutoSize = true; + panelBindingsTitle.AutoSizeMode = AutoSizeMode.GrowAndShrink; + panelBindingsTitle.Controls.Add(pictureBindings); + panelBindingsTitle.Controls.Add(labelBindings); + panelBindingsTitle.Dock = DockStyle.Top; + panelBindingsTitle.Location = new Point(0, 0); + panelBindingsTitle.Margin = new Padding(4); + panelBindingsTitle.Name = "panelBindingsTitle"; + panelBindingsTitle.Size = new Size(500, 60); + panelBindingsTitle.TabIndex = 44; // // pictureBindings // @@ -654,7 +619,7 @@ AutoScaleDimensions = new SizeF(13F, 32F); AutoScaleMode = AutoScaleMode.Font; AutoSize = true; - ClientSize = new Size(1082, 932); + ClientSize = new Size(1277, 932); Controls.Add(panelBindings); Controls.Add(panelController); MaximizeBox = false; @@ -696,8 +661,8 @@ ((System.ComponentModel.ISupportInitialize)pictureSDeadzone).EndInit(); panelBindings.ResumeLayout(false); panelBindings.PerformLayout(); - panel1.ResumeLayout(false); - panel1.PerformLayout(); + panelBindingsTitle.ResumeLayout(false); + panelBindingsTitle.PerformLayout(); ((System.ComponentModel.ISupportInitialize)pictureBindings).EndInit(); ResumeLayout(false); PerformLayout(); @@ -741,12 +706,9 @@ private Label labelVibraHeader; private UI.RButton buttonReset; private Panel panelBindings; - private Panel panel1; + private Panel panelBindingsTitle; private PictureBox pictureBindings; private Label labelBindings; - private Label labelM2; - private UI.RComboBox comboM2; - private Label labelM1; - private UI.RComboBox comboM1; + private TableLayoutPanel tableBindings; } } \ No newline at end of file diff --git a/app/Handheld.cs b/app/Handheld.cs index ddf22101..9943c0d4 100644 --- a/app/Handheld.cs +++ b/app/Handheld.cs @@ -1,14 +1,15 @@ -using GHelper.UI; -using GHelper.Ally; +using GHelper.Ally; +using GHelper.UI; namespace GHelper { - public partial class Handheld : Form + public partial class Handheld : RForm { + public Handheld() { InitializeComponent(); - //InitTheme(true); + InitTheme(true); Shown += Handheld_Shown; @@ -40,28 +41,68 @@ namespace GHelper trackVibra.ValueChanged += Controller_Complete; - comboM1.DropDownStyle = ComboBoxStyle.DropDownList; - comboM1.DataSource = new BindingSource(AllyControl.BindingCodes, null); - comboM1.DisplayMember = "Value"; - comboM1.ValueMember = "Key"; + FillBinding("m1", "M1", AllyControl.CodeM1); + FillBinding("m2", "M2", AllyControl.CodeM2); - comboM2.DropDownStyle = ComboBoxStyle.DropDownList; - comboM2.DataSource = new BindingSource(AllyControl.BindingCodes, null); - comboM2.DisplayMember = "Value"; - comboM2.ValueMember = "Key"; + FillBinding("a", "A"); + FillBinding("b", "B"); + FillBinding("x", "X"); + FillBinding("y", "Y"); - comboM1.SelectedValue = AppConfig.Get("bind_m1", 0x028f); - comboM2.SelectedValue = AppConfig.Get("bind_m2", 0x028e); + FillBinding("dpu", "DPad Up"); + FillBinding("dpd", "DPad Down"); + FillBinding("dpl", "DPad Left"); + FillBinding("dpr", "DPad Right"); - comboM1.SelectedValueChanged += Binding_SelectedValueChanged; - comboM2.SelectedValueChanged += Binding_SelectedValueChanged; + } + + + + private void FillBinding(string name, string label, int defaultValue = -1) + { + tableBindings.RowStyles.Add(new RowStyle(SizeType.AutoSize)); + tableBindings.Controls.Add(new Label { Text = label + ":", Anchor = AnchorStyles.Left, Dock = DockStyle.Fill, Padding = new Padding(5, 5, 5, 5) }, 0, tableBindings.RowCount - 1); + + name = "bind_" + name; + + var combo = new RComboBox(); + + combo.BorderColor = Color.White; + combo.ButtonColor = Color.FromArgb(255, 255, 255); + combo.Dock = DockStyle.Fill; + combo.Name = name; + combo.Margin = new Padding(5, 5, 5, 5); + + combo.DropDownStyle = ComboBoxStyle.DropDownList; + combo.DisplayMember = "Value"; + combo.ValueMember = "Key"; + + int value = AppConfig.Get(name, defaultValue); + + foreach (var item in AllyControl.BindingCodes) + { + combo.Items.Add(new KeyValuePair(item.Key, item.Value)); + if (item.Key == value) combo.SelectedItem = item; + } + + combo.SelectedValueChanged += Binding_SelectedValueChanged; + + tableBindings.Controls.Add(combo, 1, tableBindings.RowCount - 1); + tableBindings.RowCount++; } private void Binding_SelectedValueChanged(object? sender, EventArgs e) { - AppConfig.Set("bind_m1", (int)comboM1.SelectedValue); - AppConfig.Set("bind_m2", (int)comboM2.SelectedValue); + + if (sender is null) return; + RComboBox combo = (RComboBox)sender; + + int value = ((KeyValuePair)combo.SelectedItem).Key; + + if (value >= 0) AppConfig.Set(combo.Name, value); + else AppConfig.Remove(combo.Name); + AllyControl.SetBindings(); } diff --git a/app/Properties/Resources.Designer.cs b/app/Properties/Resources.Designer.cs index 23999cab..a8811e09 100644 --- a/app/Properties/Resources.Designer.cs +++ b/app/Properties/Resources.Designer.cs @@ -320,6 +320,16 @@ namespace GHelper.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap icons8_joystick_32 { + get { + object obj = ResourceManager.GetObject("icons8-joystick-32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -640,6 +650,16 @@ namespace GHelper.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap icons8_xbox_lt_32 { + get { + object obj = ResourceManager.GetObject("icons8-xbox-lt-32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/app/Properties/Resources.resx b/app/Properties/Resources.resx index 76a2d0f8..2ed46cbb 100644 --- a/app/Properties/Resources.resx +++ b/app/Properties/Resources.resx @@ -118,196 +118,202 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Resources\brightness-up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-temperature-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\backlight-down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-mute-unmute-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-hibernate-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Font.otf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\Resources\icons8-quit-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-fiat-500-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-microphone-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-voltage-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-project-management-48 (1).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\dot-standard.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-charging-battery-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\lighting_dot_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-touchpad-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-automation-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-maus-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-help-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-settings-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-software-32-white.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-add-64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-game-controller-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-refresh-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-share-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\standard.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\lighting_dot_24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\icons8-charged-battery-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\lighting_dot_24.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-bicycle-48 (1).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\brightness-down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-batterie-voll-geladen-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-charging-battery-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\eco.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-video-card-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\lighting_dot_48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-rocket-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\dot-ultimate.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\icons8-edit-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\backlight-up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-video-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-save-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-log-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-controller-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-keyboard-32 (1).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-fan-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\icons8-microphone-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\icons8-maus-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\icons8-remove-64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\icons8-bicycle-48 (1).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\icons8-mauszeiger-50.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\eco.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\icons8-matrix-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\icons8-mute-unmute-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\icons8-keyboard-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\icons8-batterie-voll-geladen-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\icons8-fan-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\lighting_dot_48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\icons8-software-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\icons8-quit-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\icons8-gauge-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-soonvibes-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-leaf-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\ultimate.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-spa-flower-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\backlight.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-function-mac-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\dot-eco.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-processor-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-laptop-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-ladende-batterie-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\icons8-rocket-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\icons8-controller-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\icons8-next-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\icons8-automation-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\brightness-up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-processor-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-fiat-500-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-touchpad-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-game-controller-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-help-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-matrix-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-laptop-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-remove-64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-function-mac-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-joystick-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-keyboard-32 (1).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-spa-flower-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-video-card-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\backlight.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-refresh-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-hibernate-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ultimate.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-keyboard-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-fan-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-settings-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-maus-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-charging-battery-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\dot-ultimate.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\brightness-down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\backlight-up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\backlight-down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-rocket-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\dot-standard.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-rocket-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-project-management-48 (1).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-mauszeiger-50.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-save-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-ladende-batterie-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-video-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Font.otf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\dot-eco.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-gauge-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\standard.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-fan-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-voltage-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-software-32-white.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-log-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-temperature-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-leaf-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-add-64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-software-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-share-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-soonvibes-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\lighting_dot_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-charging-battery-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icons8-xbox-lt-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/app/Resources/icons8-joystick-32.png b/app/Resources/icons8-joystick-32.png new file mode 100644 index 00000000..748d0b04 Binary files /dev/null and b/app/Resources/icons8-joystick-32.png differ diff --git a/app/Resources/icons8-xbox-lt-32.png b/app/Resources/icons8-xbox-lt-32.png new file mode 100644 index 00000000..d1f68369 Binary files /dev/null and b/app/Resources/icons8-xbox-lt-32.png differ