From f0cbec6ea18b8560f44dbe9ccafadd0de07e92b6 Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Sun, 30 Jul 2023 18:52:02 +0200
Subject: [PATCH 01/15] New translations Strings.resx (Lithuanian)
---
app/Properties/Strings.lt.resx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/Properties/Strings.lt.resx b/app/Properties/Strings.lt.resx
index 3570d0f9..2cd1c921 100644
--- a/app/Properties/Strings.lt.resx
+++ b/app/Properties/Strings.lt.resx
@@ -220,7 +220,7 @@
Ratukas
- Underglow
+ Apatinis apšvietimas
Taikyti automatiškai
From 643e29e25add7b1a177da38d2cca03feef584353 Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Sun, 30 Jul 2023 22:02:10 +0200
Subject: [PATCH 02/15] New translations Strings.resx (Spanish)
---
app/Properties/Strings.es.resx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/Properties/Strings.es.resx b/app/Properties/Strings.es.resx
index 20230f51..437eb5a1 100644
--- a/app/Properties/Strings.es.resx
+++ b/app/Properties/Strings.es.resx
@@ -184,7 +184,7 @@
Rápido
- Lighting Mode
+ Modo de iluminación
Normal
@@ -208,7 +208,7 @@
Estroboscópico
- All
+ Todo
Dock
@@ -217,7 +217,7 @@
Logo
- Scrollwheel
+ Rueda de desplazamiento
Underglow
From 6507dee307a7bc44ac0b1256fe0cde4eb5014713 Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Mon, 31 Jul 2023 07:59:33 +0200
Subject: [PATCH 03/15] New translations Strings.resx (Chinese Simplified)
---
app/Properties/Strings.zh-CN.resx | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/Properties/Strings.zh-CN.resx b/app/Properties/Strings.zh-CN.resx
index debd09ea..e7fda3df 100644
--- a/app/Properties/Strings.zh-CN.resx
+++ b/app/Properties/Strings.zh-CN.resx
@@ -184,7 +184,7 @@
快速
- Lighting Mode
+ 灯效模式
正常
@@ -208,7 +208,7 @@
闪烁
- All
+ 全部
Dock
@@ -217,7 +217,7 @@
Logo
- Scrollwheel
+ 滚轮
Underglow
@@ -336,7 +336,7 @@
风扇
- 风扇 + 电源
+ 风扇 + 功率
打开FnLock (无需按下FN使用FN+(F1-F12)热键)
From b5451cfc2193dfe11f4312f085bf0348fef8b437 Mon Sep 17 00:00:00 2001
From: IceStormNG
Date: Mon, 31 Jul 2023 12:40:40 +0200
Subject: [PATCH 04/15] Added Rog Strix Impact II Wireless mouse support. Hint:
Has the same DPI switching Problem as the Keris.
---
app/Peripherals/Mouse/AsusMouse.cs | 2 +-
.../Mouse/Models/StrixImpactIIWireless.cs | 221 ++++++++++++++++++
app/Peripherals/PeripheralsProvider.cs | 2 +
3 files changed, 224 insertions(+), 1 deletion(-)
create mode 100644 app/Peripherals/Mouse/Models/StrixImpactIIWireless.cs
diff --git a/app/Peripherals/Mouse/AsusMouse.cs b/app/Peripherals/Mouse/AsusMouse.cs
index abc0819b..d678f2d0 100644
--- a/app/Peripherals/Mouse/AsusMouse.cs
+++ b/app/Peripherals/Mouse/AsusMouse.cs
@@ -1208,7 +1208,7 @@ namespace GHelper.Peripherals.Mouse
return setting;
}
- public void ReadLightingSetting()
+ public virtual void ReadLightingSetting()
{
if (!HasRGB())
{
diff --git a/app/Peripherals/Mouse/Models/StrixImpactIIWireless.cs b/app/Peripherals/Mouse/Models/StrixImpactIIWireless.cs
new file mode 100644
index 00000000..5a19c873
--- /dev/null
+++ b/app/Peripherals/Mouse/Models/StrixImpactIIWireless.cs
@@ -0,0 +1,221 @@
+namespace GHelper.Peripherals.Mouse.Models
+{
+ //P513
+ public class StrixImpactIIWireless : AsusMouse
+ {
+ public StrixImpactIIWireless() : base(0x0B05, 0x1949, "mi_00", true)
+ {
+ }
+
+ protected StrixImpactIIWireless(ushort vendorId, bool wireless) : base(0x0B05, vendorId, "mi_00", wireless)
+ {
+ }
+
+ public override int DPIProfileCount()
+ {
+ return 4;
+ }
+
+ public override string GetDisplayName()
+ {
+ return "ROG Strix Impact II (Wireless)";
+ }
+
+
+ public override PollingRate[] SupportedPollingrates()
+ {
+ return new PollingRate[] {
+ PollingRate.PR125Hz,
+ PollingRate.PR250Hz,
+ PollingRate.PR500Hz,
+ PollingRate.PR1000Hz
+ };
+ }
+
+ public override int ProfileCount()
+ {
+ return 3;
+ }
+ public override int MaxDPI()
+ {
+ return 16_000;
+ }
+
+ public override bool HasLiftOffSetting()
+ {
+ return true;
+ }
+
+ public override bool HasRGB()
+ {
+ return true;
+ }
+
+ public override bool HasAutoPowerOff()
+ {
+ return true;
+ }
+
+ public override bool HasAngleSnapping()
+ {
+ return true;
+ }
+
+ public override bool HasAngleTuning()
+ {
+ return false;
+ }
+
+ public override bool HasLowBatteryWarning()
+ {
+ return true;
+ }
+
+ public override bool HasDPIColors()
+ {
+ return false;
+ }
+
+ public override bool IsLightingModeSupported(LightingMode lightingMode)
+ {
+ return lightingMode == LightingMode.Static
+ || lightingMode == LightingMode.Breathing
+ || lightingMode == LightingMode.ColorCycle
+ || lightingMode == LightingMode.React
+ || lightingMode == LightingMode.BatteryState
+ || lightingMode == LightingMode.Off;
+ }
+
+ public override LightingZone[] SupportedLightingZones()
+ {
+ return new LightingZone[] { LightingZone.Logo, LightingZone.Scrollwheel };
+ }
+
+ //Has 25% increments
+ protected override int ParseBattery(byte[] packet)
+ {
+ if (packet[1] == 0x12 && packet[2] == 0x07)
+ {
+ return packet[5] * 25;
+ }
+
+ return -1;
+ }
+
+
+ public override int DPIIncrements()
+ {
+ return 100;
+ }
+
+ public override bool CanChangeDPIProfile()
+ {
+ return false;
+ }
+
+ protected override byte[] GetUpdateEnergySettingsPacket(int lowBatteryWarning, PowerOffSetting powerOff)
+ {
+ return base.GetUpdateEnergySettingsPacket(lowBatteryWarning / 25, powerOff);
+ }
+
+ protected override int ParseLowBatteryWarning(byte[] packet)
+ {
+ int lowBat = base.ParseLowBatteryWarning(packet);
+
+ return lowBat * 25;
+ }
+
+ protected override LiftOffDistance ParseLiftOffDistance(byte[] packet)
+ {
+ if (packet[1] != 0x12 || packet[2] != 0x06)
+ {
+ return LiftOffDistance.Low;
+ }
+
+ return (LiftOffDistance)packet[5];
+ }
+
+ protected override byte[] GetUpdateLiftOffDistancePacket(LiftOffDistance liftOffDistance)
+ {
+ return new byte[] { 0x00, 0x51, 0x35, 0x00, 0x00, ((byte)liftOffDistance) };
+ }
+
+ public override int MaxBrightness()
+ {
+ return 4;
+ }
+
+ protected override byte IndexForLightingMode(LightingMode lightingMode)
+ {
+ if (lightingMode == LightingMode.Off)
+ {
+ return 0xFF;
+ }
+ return ((byte)lightingMode);
+ }
+
+ protected override byte[] GetReadLightingModePacket(LightingZone zone)
+ {
+ return new byte[] { 0x00, 0x12, 0x03, 0x00 };
+ }
+
+ protected LightingSetting? ParseLightingSetting(byte[] packet, LightingZone zone)
+ {
+ if (packet[1] != 0x12 || packet[2] != 0x03)
+ {
+ return null;
+ }
+
+ int offset = 5 + (((int)zone) * 5);
+
+ LightingSetting setting = new LightingSetting();
+
+ setting.LightingMode = LightingModeForIndex(packet[offset + 0]);
+ setting.Brightness = packet[offset + 1];
+
+ setting.RGBColor = Color.FromArgb(packet[offset + 2], packet[offset + 3], packet[offset + 4]);
+
+
+ return setting;
+ }
+
+ public override void ReadLightingSetting()
+ {
+ if (!HasRGB())
+ {
+ return;
+ }
+ //Mouse sends all lighting zones in one response
+ //00 12 03 00 00 [00 04 ff 00 80] [00 04 00 ff ff] [00 04 ff ff ff] 00 00 00 00 00 00 00 00 00 00 00 00 00 0
+ //No idea what the 3rd zone is as the mouse only has 2
+ byte[]? response = WriteForResponse(GetReadLightingModePacket(LightingZone.All));
+ if (response is null) return;
+
+ LightingZone[] lz = SupportedLightingZones();
+ for (int i = 0; i < lz.Length; ++i)
+ {
+ LightingSetting? ls = ParseLightingSetting(response, lz[i]);
+ if (ls is null)
+ {
+ Logger.WriteLine(GetDisplayName() + ": Failed to read RGB Setting for Zone " + lz[i].ToString());
+ continue;
+ }
+
+ Logger.WriteLine(GetDisplayName() + ": Read RGB Setting for Zone " + lz[i].ToString() + ": " + ls.ToString());
+ LightingSetting[i] = ls;
+ }
+ }
+ }
+
+ public class StrixImpactIIWirelessWired : StrixImpactIIWireless
+ {
+ public StrixImpactIIWirelessWired() : base(0x1947, false)
+ {
+ }
+
+ public override string GetDisplayName()
+ {
+ return "ROG Strix Impact II (Wired)";
+ }
+ }
+}
diff --git a/app/Peripherals/PeripheralsProvider.cs b/app/Peripherals/PeripheralsProvider.cs
index 31cd0635..5929a9ad 100644
--- a/app/Peripherals/PeripheralsProvider.cs
+++ b/app/Peripherals/PeripheralsProvider.cs
@@ -190,6 +190,8 @@ namespace GHelper.Peripherals
DetectMouse(new ROGKerisWireless());
DetectMouse(new ROGKerisWirelessWired());
DetectMouse(new TUFM4Wirelss());
+ DetectMouse(new StrixImpactIIWireless());
+ DetectMouse(new StrixImpactIIWirelessWired());
}
public static void DetectMouse(AsusMouse am)
From 4f2fdc55eee6fe16f9a91b464bbe6bb2f19570bc Mon Sep 17 00:00:00 2001
From: IceStormNG
Date: Mon, 31 Jul 2023 13:05:31 +0200
Subject: [PATCH 05/15] Adds Button debounce (button response time) setting for
supported mice.
---
app/AsusMouseSettings.Designer.cs | 195 ++++++++++++++----
app/AsusMouseSettings.cs | 38 +++-
app/Peripherals/Mouse/AsusMouse.cs | 100 +++++++++
app/Peripherals/Mouse/Models/ChakramX.cs | 5 +
.../Mouse/Models/GladiusIIIAimpoint.cs | 5 +
.../Mouse/Models/ROGKerisWireless.cs | 4 +
.../Mouse/Models/StrixImpactIIWireless.cs | 5 +
app/Peripherals/Mouse/Models/TUFM4Wireless.cs | 5 +
app/Properties/Strings.Designer.cs | 9 +
app/Properties/Strings.resx | 3 +
10 files changed, 321 insertions(+), 48 deletions(-)
diff --git a/app/AsusMouseSettings.Designer.cs b/app/AsusMouseSettings.Designer.cs
index 2768bab6..d26fe3b4 100644
--- a/app/AsusMouseSettings.Designer.cs
+++ b/app/AsusMouseSettings.Designer.cs
@@ -33,13 +33,20 @@
labelProfile = new Label();
panelPerformance = new Panel();
panelPerformanceOther = new Panel();
- comboBoxLiftOffDistance = new UI.RComboBox();
+ panelLiftOffDistance = new Panel();
labelLiftOffDistance = new Label();
- labelAngleAdjustmentValue = new Label();
+ comboBoxLiftOffDistance = new UI.RComboBox();
+ panelDebounce = new Panel();
+ labelButtonDebounce = new Label();
+ sliderButtonDebounce = new UI.Slider();
+ labelButtonDebounceValue = new Label();
+ panelAngleSnapping = new Panel();
sliderAngleAdjustment = new UI.Slider();
checkBoxAngleSnapping = new CheckBox();
- comboBoxPollingRate = new UI.RComboBox();
+ labelAngleAdjustmentValue = new Label();
+ panelPollingRate = new Panel();
labelPollingRate = new Label();
+ comboBoxPollingRate = new UI.RComboBox();
panelDPISettings = new Panel();
sliderDPI = new UI.Slider();
tableLayoutPanel1 = new TableLayoutPanel();
@@ -101,6 +108,10 @@
panelProfiles.SuspendLayout();
panelPerformance.SuspendLayout();
panelPerformanceOther.SuspendLayout();
+ panelLiftOffDistance.SuspendLayout();
+ panelDebounce.SuspendLayout();
+ panelAngleSnapping.SuspendLayout();
+ panelPollingRate.SuspendLayout();
panelDPISettings.SuspendLayout();
tableLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)numericUpDownCurrentDPI).BeginInit();
@@ -171,27 +182,46 @@
panelPerformance.Location = new Point(11, 68);
panelPerformance.Name = "panelPerformance";
panelPerformance.Padding = new Padding(0, 11, 0, 25);
- panelPerformance.Size = new Size(654, 408);
+ panelPerformance.Size = new Size(654, 461);
panelPerformance.TabIndex = 1;
//
// panelPerformanceOther
//
panelPerformanceOther.AutoSize = true;
panelPerformanceOther.AutoSizeMode = AutoSizeMode.GrowAndShrink;
- panelPerformanceOther.Controls.Add(comboBoxLiftOffDistance);
- panelPerformanceOther.Controls.Add(labelLiftOffDistance);
- panelPerformanceOther.Controls.Add(labelAngleAdjustmentValue);
- panelPerformanceOther.Controls.Add(sliderAngleAdjustment);
- panelPerformanceOther.Controls.Add(checkBoxAngleSnapping);
- panelPerformanceOther.Controls.Add(comboBoxPollingRate);
- panelPerformanceOther.Controls.Add(labelPollingRate);
+ panelPerformanceOther.Controls.Add(panelLiftOffDistance);
+ panelPerformanceOther.Controls.Add(panelDebounce);
+ panelPerformanceOther.Controls.Add(panelAngleSnapping);
+ panelPerformanceOther.Controls.Add(panelPollingRate);
panelPerformanceOther.Dock = DockStyle.Top;
panelPerformanceOther.Location = new Point(0, 240);
panelPerformanceOther.Name = "panelPerformanceOther";
panelPerformanceOther.Padding = new Padding(0, 11, 0, 11);
- panelPerformanceOther.Size = new Size(654, 143);
+ panelPerformanceOther.Size = new Size(654, 196);
panelPerformanceOther.TabIndex = 49;
//
+ // panelLiftOffDistance
+ //
+ panelLiftOffDistance.AutoSize = true;
+ panelLiftOffDistance.AutoSizeMode = AutoSizeMode.GrowAndShrink;
+ panelLiftOffDistance.Controls.Add(labelLiftOffDistance);
+ panelLiftOffDistance.Controls.Add(comboBoxLiftOffDistance);
+ panelLiftOffDistance.Dock = DockStyle.Top;
+ panelLiftOffDistance.Location = new Point(0, 142);
+ panelLiftOffDistance.Name = "panelLiftOffDistance";
+ panelLiftOffDistance.Padding = new Padding(5);
+ panelLiftOffDistance.Size = new Size(654, 43);
+ panelLiftOffDistance.TabIndex = 56;
+ //
+ // labelLiftOffDistance
+ //
+ labelLiftOffDistance.Location = new Point(5, 5);
+ labelLiftOffDistance.Margin = new Padding(6, 0, 6, 0);
+ labelLiftOffDistance.Name = "labelLiftOffDistance";
+ labelLiftOffDistance.Size = new Size(348, 33);
+ labelLiftOffDistance.TabIndex = 48;
+ labelLiftOffDistance.Text = "Lift Off Distance";
+ //
// comboBoxLiftOffDistance
//
comboBoxLiftOffDistance.BorderColor = Color.White;
@@ -199,35 +229,77 @@
comboBoxLiftOffDistance.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxLiftOffDistance.FlatStyle = FlatStyle.Flat;
comboBoxLiftOffDistance.FormattingEnabled = true;
- comboBoxLiftOffDistance.Location = new Point(368, 99);
+ comboBoxLiftOffDistance.Location = new Point(367, 5);
comboBoxLiftOffDistance.Margin = new Padding(16, 0, 16, 0);
comboBoxLiftOffDistance.Name = "comboBoxLiftOffDistance";
comboBoxLiftOffDistance.Size = new Size(281, 33);
comboBoxLiftOffDistance.TabIndex = 49;
//
- // labelLiftOffDistance
+ // panelDebounce
//
- labelLiftOffDistance.Location = new Point(6, 99);
- labelLiftOffDistance.Margin = new Padding(6, 0, 6, 0);
- labelLiftOffDistance.Name = "labelLiftOffDistance";
- labelLiftOffDistance.Size = new Size(348, 33);
- labelLiftOffDistance.TabIndex = 48;
- labelLiftOffDistance.Text = "Lift Off Distance";
+ panelDebounce.AutoSize = true;
+ panelDebounce.AutoSizeMode = AutoSizeMode.GrowAndShrink;
+ panelDebounce.Controls.Add(labelButtonDebounce);
+ panelDebounce.Controls.Add(sliderButtonDebounce);
+ panelDebounce.Controls.Add(labelButtonDebounceValue);
+ panelDebounce.Dock = DockStyle.Top;
+ panelDebounce.Location = new Point(0, 95);
+ panelDebounce.Name = "panelDebounce";
+ panelDebounce.Padding = new Padding(5);
+ panelDebounce.Size = new Size(654, 47);
+ panelDebounce.TabIndex = 55;
//
- // labelAngleAdjustmentValue
+ // labelButtonDebounce
//
- labelAngleAdjustmentValue.Location = new Point(598, 61);
- labelAngleAdjustmentValue.Margin = new Padding(6, 0, 6, 0);
- labelAngleAdjustmentValue.Name = "labelAngleAdjustmentValue";
- labelAngleAdjustmentValue.Size = new Size(48, 30);
- labelAngleAdjustmentValue.TabIndex = 47;
- labelAngleAdjustmentValue.Text = "0°";
- labelAngleAdjustmentValue.TextAlign = ContentAlignment.MiddleRight;
+ labelButtonDebounce.Location = new Point(6, 7);
+ labelButtonDebounce.Margin = new Padding(6, 0, 6, 0);
+ labelButtonDebounce.Name = "labelButtonDebounce";
+ labelButtonDebounce.Size = new Size(348, 33);
+ labelButtonDebounce.TabIndex = 52;
+ labelButtonDebounce.Text = "Button Response";
+ //
+ // sliderButtonDebounce
+ //
+ sliderButtonDebounce.AccessibleName = "DPI Slider";
+ sliderButtonDebounce.Location = new Point(368, 9);
+ sliderButtonDebounce.Max = 7;
+ sliderButtonDebounce.Min = 2;
+ sliderButtonDebounce.Name = "sliderButtonDebounce";
+ sliderButtonDebounce.Size = new Size(213, 30);
+ sliderButtonDebounce.Step = 1;
+ sliderButtonDebounce.TabIndex = 50;
+ sliderButtonDebounce.TabStop = false;
+ sliderButtonDebounce.Text = "sliderBattery";
+ sliderButtonDebounce.Value = 2;
+ //
+ // labelButtonDebounceValue
+ //
+ labelButtonDebounceValue.Location = new Point(590, 9);
+ labelButtonDebounceValue.Margin = new Padding(6, 0, 6, 0);
+ labelButtonDebounceValue.Name = "labelButtonDebounceValue";
+ labelButtonDebounceValue.Size = new Size(60, 30);
+ labelButtonDebounceValue.TabIndex = 51;
+ labelButtonDebounceValue.Text = "12ms";
+ labelButtonDebounceValue.TextAlign = ContentAlignment.MiddleRight;
+ //
+ // panelAngleSnapping
+ //
+ panelAngleSnapping.AutoSize = true;
+ panelAngleSnapping.AutoSizeMode = AutoSizeMode.GrowAndShrink;
+ panelAngleSnapping.Controls.Add(sliderAngleAdjustment);
+ panelAngleSnapping.Controls.Add(checkBoxAngleSnapping);
+ panelAngleSnapping.Controls.Add(labelAngleAdjustmentValue);
+ panelAngleSnapping.Dock = DockStyle.Top;
+ panelAngleSnapping.Location = new Point(0, 51);
+ panelAngleSnapping.Name = "panelAngleSnapping";
+ panelAngleSnapping.Padding = new Padding(5);
+ panelAngleSnapping.Size = new Size(654, 44);
+ panelAngleSnapping.TabIndex = 54;
//
// sliderAngleAdjustment
//
sliderAngleAdjustment.AccessibleName = "DPI Slider";
- sliderAngleAdjustment.Location = new Point(397, 61);
+ sliderAngleAdjustment.Location = new Point(396, 6);
sliderAngleAdjustment.Max = 20;
sliderAngleAdjustment.Min = -20;
sliderAngleAdjustment.Name = "sliderAngleAdjustment";
@@ -241,7 +313,7 @@
// checkBoxAngleSnapping
//
checkBoxAngleSnapping.CheckAlign = ContentAlignment.MiddleRight;
- checkBoxAngleSnapping.Location = new Point(6, 61);
+ checkBoxAngleSnapping.Location = new Point(5, 6);
checkBoxAngleSnapping.Margin = new Padding(6, 0, 6, 0);
checkBoxAngleSnapping.Name = "checkBoxAngleSnapping";
checkBoxAngleSnapping.Size = new Size(384, 30);
@@ -250,6 +322,38 @@
checkBoxAngleSnapping.TextAlign = ContentAlignment.TopLeft;
checkBoxAngleSnapping.UseVisualStyleBackColor = true;
//
+ // labelAngleAdjustmentValue
+ //
+ labelAngleAdjustmentValue.Location = new Point(597, 6);
+ labelAngleAdjustmentValue.Margin = new Padding(6, 0, 6, 0);
+ labelAngleAdjustmentValue.Name = "labelAngleAdjustmentValue";
+ labelAngleAdjustmentValue.Size = new Size(48, 30);
+ labelAngleAdjustmentValue.TabIndex = 47;
+ labelAngleAdjustmentValue.Text = "0°";
+ labelAngleAdjustmentValue.TextAlign = ContentAlignment.MiddleRight;
+ //
+ // panelPollingRate
+ //
+ panelPollingRate.AutoSize = true;
+ panelPollingRate.AutoSizeMode = AutoSizeMode.GrowAndShrink;
+ panelPollingRate.Controls.Add(labelPollingRate);
+ panelPollingRate.Controls.Add(comboBoxPollingRate);
+ panelPollingRate.Dock = DockStyle.Top;
+ panelPollingRate.Location = new Point(0, 11);
+ panelPollingRate.Name = "panelPollingRate";
+ panelPollingRate.Padding = new Padding(5);
+ panelPollingRate.Size = new Size(654, 40);
+ panelPollingRate.TabIndex = 53;
+ //
+ // labelPollingRate
+ //
+ labelPollingRate.Location = new Point(6, 5);
+ labelPollingRate.Margin = new Padding(6, 0, 6, 0);
+ labelPollingRate.Name = "labelPollingRate";
+ labelPollingRate.Size = new Size(348, 30);
+ labelPollingRate.TabIndex = 45;
+ labelPollingRate.Text = "Polling Rate";
+ //
// comboBoxPollingRate
//
comboBoxPollingRate.BorderColor = Color.White;
@@ -257,21 +361,12 @@
comboBoxPollingRate.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxPollingRate.FlatStyle = FlatStyle.Flat;
comboBoxPollingRate.FormattingEnabled = true;
- comboBoxPollingRate.Location = new Point(368, 8);
+ comboBoxPollingRate.Location = new Point(368, 2);
comboBoxPollingRate.Margin = new Padding(16, 0, 16, 0);
comboBoxPollingRate.Name = "comboBoxPollingRate";
comboBoxPollingRate.Size = new Size(281, 33);
comboBoxPollingRate.TabIndex = 44;
//
- // labelPollingRate
- //
- labelPollingRate.Location = new Point(6, 9);
- labelPollingRate.Margin = new Padding(6, 0, 6, 0);
- labelPollingRate.Name = "labelPollingRate";
- labelPollingRate.Size = new Size(348, 30);
- labelPollingRate.TabIndex = 45;
- labelPollingRate.Text = "Polling Rate";
- //
// panelDPISettings
//
panelDPISettings.AutoSize = true;
@@ -561,7 +656,7 @@
panelLighting.Controls.Add(panelLightingContent);
panelLighting.Controls.Add(panelLightingHeader);
panelLighting.Dock = DockStyle.Top;
- panelLighting.Location = new Point(11, 476);
+ panelLighting.Location = new Point(11, 529);
panelLighting.Name = "panelLighting";
panelLighting.Padding = new Padding(0, 0, 0, 25);
panelLighting.Size = new Size(654, 329);
@@ -890,7 +985,7 @@
panelEnergy.Controls.Add(labelAutoPowerOff);
panelEnergy.Controls.Add(panelEnergyHeader);
panelEnergy.Dock = DockStyle.Top;
- panelEnergy.Location = new Point(11, 805);
+ panelEnergy.Location = new Point(11, 858);
panelEnergy.Name = "panelEnergy";
panelEnergy.Padding = new Padding(0, 0, 0, 25);
panelEnergy.Size = new Size(654, 143);
@@ -1071,7 +1166,7 @@
panelBottomButtons.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelBottomButtons.Controls.Add(buttonSync);
panelBottomButtons.Dock = DockStyle.Top;
- panelBottomButtons.Location = new Point(11, 948);
+ panelBottomButtons.Location = new Point(11, 1001);
panelBottomButtons.Name = "panelBottomButtons";
panelBottomButtons.Size = new Size(654, 67);
panelBottomButtons.TabIndex = 47;
@@ -1144,7 +1239,7 @@
AutoScroll = true;
AutoSize = true;
AutoSizeMode = AutoSizeMode.GrowAndShrink;
- ClientSize = new Size(676, 1072);
+ ClientSize = new Size(676, 1183);
Controls.Add(panelBottomButtons);
Controls.Add(panelEnergy);
Controls.Add(panelLighting);
@@ -1164,6 +1259,11 @@
panelPerformance.ResumeLayout(false);
panelPerformance.PerformLayout();
panelPerformanceOther.ResumeLayout(false);
+ panelPerformanceOther.PerformLayout();
+ panelLiftOffDistance.ResumeLayout(false);
+ panelDebounce.ResumeLayout(false);
+ panelAngleSnapping.ResumeLayout(false);
+ panelPollingRate.ResumeLayout(false);
panelDPISettings.ResumeLayout(false);
panelDPISettings.PerformLayout();
tableLayoutPanel1.ResumeLayout(false);
@@ -1272,5 +1372,12 @@
private TableLayoutPanel tableLayoutPanel2;
private UI.RButton rButton1;
private UI.RButton rButton2;
+ private Label labelButtonDebounce;
+ private Label labelButtonDebounceValue;
+ private UI.Slider sliderButtonDebounce;
+ private Panel panelPollingRate;
+ private Panel panelAngleSnapping;
+ private Panel panelLiftOffDistance;
+ private Panel panelDebounce;
}
}
\ No newline at end of file
diff --git a/app/AsusMouseSettings.cs b/app/AsusMouseSettings.cs
index b6a448ed..48a2b899 100644
--- a/app/AsusMouseSettings.cs
+++ b/app/AsusMouseSettings.cs
@@ -45,6 +45,7 @@ namespace GHelper
labelLiftOffDistance.Text = Properties.Strings.MouseLiftOffDistance;
labelChargingState.Text = "(" + Properties.Strings.Charging + ")";
labelProfile.Text = Properties.Strings.Profile;
+ labelButtonDebounce.Text = Properties.Strings.MouseButtonResponse;
buttonLightingZoneLogo.Text = Properties.Strings.AuraZoneLogo;
buttonLightingZoneScroll.Text = Properties.Strings.AuraZoneScroll;
@@ -76,6 +77,8 @@ namespace GHelper
sliderAngleAdjustment.ValueChanged += SliderAngleAdjustment_ValueChanged;
sliderAngleAdjustment.MouseUp += SliderAngleAdjustment_MouseUp;
comboBoxLiftOffDistance.DropDownClosed += ComboBoxLiftOffDistance_DropDownClosed;
+ sliderButtonDebounce.ValueChanged += SliderButtonDebounce_ValueChanged;
+ sliderButtonDebounce.MouseUp += SliderButtonDebounce_MouseUp;
buttonLightingColor.Click += ButtonLightingColor_Click;
comboBoxLightingMode.DropDownClosed += ComboBoxLightingMode_DropDownClosed;
@@ -100,6 +103,20 @@ namespace GHelper
RefreshMouseData();
}
+ private void SliderButtonDebounce_MouseUp(object? sender, MouseEventArgs e)
+ {
+ DebounceTime dbt = (DebounceTime)sliderButtonDebounce.Value;
+ mouse.SetDebounce(dbt);
+ }
+
+ private void SliderButtonDebounce_ValueChanged(object? sender, EventArgs e)
+ {
+ DebounceTime dbt = (DebounceTime)sliderButtonDebounce.Value;
+ int time = mouse.DebounceTimeInMS(dbt);
+
+ labelButtonDebounceValue.Text = time + "ms";
+ }
+
private void SwitchLightingZone(LightingZone zone)
{
if (!mouse.HasRGB())
@@ -444,6 +461,11 @@ namespace GHelper
numericUpDownCurrentDPI.Maximum = mouse.MaxDPI();
numericUpDownCurrentDPI.Increment = mouse.DPIIncrements();
+ if (!mouse.HasDebounceSetting())
+ {
+ panelDebounce.Visible = false;
+ }
+
if (!mouse.HasDPIColors())
{
@@ -470,8 +492,7 @@ namespace GHelper
}
else
{
- comboBoxPollingRate.Visible = false;
- labelPollingRate.Visible = false;
+ panelPollingRate.Visible = false;
}
if (!mouse.HasAngleSnapping())
@@ -485,6 +506,11 @@ namespace GHelper
sliderAngleAdjustment.Visible = false;
}
+ if (!mouse.HasAngleTuning() && !mouse.HasAngleSnapping())
+ {
+ panelAngleSnapping.Visible = false;
+ }
+
if (mouse.HasLiftOffSetting())
{
comboBoxLiftOffDistance.Items.AddRange(new string[] {
@@ -494,8 +520,7 @@ namespace GHelper
}
else
{
- comboBoxLiftOffDistance.Visible = false;
- labelLiftOffDistance.Visible = false;
+ panelLiftOffDistance.Visible = false;
}
if (mouse.DPIProfileCount() < 4)
@@ -649,6 +674,11 @@ namespace GHelper
{
comboBoxLiftOffDistance.SelectedIndex = (int)mouse.LiftOffDistance;
}
+
+ if (mouse.HasDebounceSetting())
+ {
+ sliderButtonDebounce.Value = (int)mouse.Debounce;
+ }
}
private void VisualizeBatteryState()
diff --git a/app/Peripherals/Mouse/AsusMouse.cs b/app/Peripherals/Mouse/AsusMouse.cs
index d678f2d0..0ffb00b4 100644
--- a/app/Peripherals/Mouse/AsusMouse.cs
+++ b/app/Peripherals/Mouse/AsusMouse.cs
@@ -15,6 +15,17 @@ namespace GHelper.Peripherals.Mouse
Never = 0xFF
}
+ public enum DebounceTime
+ {
+ Disabled = 0x00, //?? not sure because mice with this setting have no "disabled". But the mouse accepts and stores 0x00 just fine
+ MS12 = 0x02,
+ MS16 = 0x03,
+ MS20 = 0x04,
+ MS24 = 0x05,
+ MS28 = 0x06,
+ MS32 = 0x07
+ }
+
public enum PollingRate
{
PR125Hz = 0,
@@ -168,6 +179,8 @@ namespace GHelper.Peripherals.Mouse
public PollingRate PollingRate { get; protected set; }
public bool AngleSnapping { get; protected set; }
public short AngleAdjustmentDegrees { get; protected set; }
+ public DebounceTime Debounce { get; protected set; }
+
public AsusMouse(ushort vendorId, ushort productId, string path, bool wireless) : base(vendorId, productId)
{
@@ -372,6 +385,7 @@ namespace GHelper.Peripherals.Mouse
ReadDPI();
ReadPollingRate();
ReadLiftOffDistance();
+ ReadDebounce();
ReadLightingSetting();
}
@@ -809,6 +823,7 @@ namespace GHelper.Peripherals.Mouse
{
if (!CanChangeDPIProfile())
{
+ this.DpiProfile = profile;
return;
}
@@ -1013,6 +1028,91 @@ namespace GHelper.Peripherals.Mouse
this.LiftOffDistance = liftOffDistance;
}
+ // ------------------------------------------------------------------------------
+ // Debounce
+ // ------------------------------------------------------------------------------
+
+ public virtual bool HasDebounceSetting()
+ {
+ return false;
+ }
+
+ public virtual int DebounceTimeInMS(DebounceTime dbt)
+ {
+ switch (dbt)
+ {
+ case DebounceTime.MS12: return 12;
+ case DebounceTime.MS16: return 16;
+ case DebounceTime.MS20: return 20;
+ case DebounceTime.MS24: return 24;
+ case DebounceTime.MS28: return 28;
+ case DebounceTime.MS32: return 32;
+
+
+ default: return 0;
+ }
+ }
+
+ protected virtual byte[] GetReadDebouncePacket()
+ {
+ return new byte[] { 0x00, 0x12, 0x04, 0x00 };
+ }
+
+
+ protected virtual byte[] GetUpdateDebouncePacket(DebounceTime debounce)
+ {
+ return new byte[] { 0x00, 0x51, 0x31, 0x05, 0x00, ((byte)debounce) };
+ }
+
+ protected virtual DebounceTime ParseDebounce(byte[] packet)
+ {
+ if (packet[1] != 0x12 || packet[2] != 0x04 || packet[3] != 0x00)
+ {
+ return DebounceTime.MS12;
+ }
+
+ if (packet[15] < 0x02)
+ {
+ return DebounceTime.MS12;
+ }
+
+ if (packet[15] > 0x07)
+ {
+ return DebounceTime.MS32;
+ }
+
+ return (DebounceTime)packet[15];
+ }
+
+ public void ReadDebounce()
+ {
+ if (!HasDebounceSetting())
+ {
+ return;
+ }
+ byte[]? response = WriteForResponse(GetReadDebouncePacket());
+ if (response is null) return;
+
+ Debounce = ParseDebounce(response);
+
+
+ Logger.WriteLine(GetDisplayName() + ": Read Debouce Setting: " + Debounce);
+ }
+
+ public void SetDebounce(DebounceTime debounce)
+ {
+ if (!HasDebounceSetting())
+ {
+ return;
+ }
+
+ WriteForResponse(GetUpdateDebouncePacket(debounce));
+ FlushSettings();
+
+ Logger.WriteLine(GetDisplayName() + ": Set Debouce to " + debounce);
+ this.Debounce = debounce;
+ }
+
// ------------------------------------------------------------------------------
// RGB
// ------------------------------------------------------------------------------
diff --git a/app/Peripherals/Mouse/Models/ChakramX.cs b/app/Peripherals/Mouse/Models/ChakramX.cs
index b77e903a..0a9ae2a8 100644
--- a/app/Peripherals/Mouse/Models/ChakramX.cs
+++ b/app/Peripherals/Mouse/Models/ChakramX.cs
@@ -50,6 +50,11 @@ namespace GHelper.Peripherals.Mouse.Models
return true;
}
+ public override bool HasDebounceSetting()
+ {
+ return true;
+ }
+
public override bool HasLiftOffSetting()
{
return true;
diff --git a/app/Peripherals/Mouse/Models/GladiusIIIAimpoint.cs b/app/Peripherals/Mouse/Models/GladiusIIIAimpoint.cs
index 28af4409..f1b8a731 100644
--- a/app/Peripherals/Mouse/Models/GladiusIIIAimpoint.cs
+++ b/app/Peripherals/Mouse/Models/GladiusIIIAimpoint.cs
@@ -45,6 +45,11 @@
return true;
}
+ public override bool HasDebounceSetting()
+ {
+ return true;
+ }
+
public override bool HasLiftOffSetting()
{
return true;
diff --git a/app/Peripherals/Mouse/Models/ROGKerisWireless.cs b/app/Peripherals/Mouse/Models/ROGKerisWireless.cs
index b75c0d63..6591f19e 100644
--- a/app/Peripherals/Mouse/Models/ROGKerisWireless.cs
+++ b/app/Peripherals/Mouse/Models/ROGKerisWireless.cs
@@ -102,6 +102,10 @@
{
return 100;
}
+ public override bool HasDebounceSetting()
+ {
+ return true;
+ }
public override bool CanChangeDPIProfile()
{
diff --git a/app/Peripherals/Mouse/Models/StrixImpactIIWireless.cs b/app/Peripherals/Mouse/Models/StrixImpactIIWireless.cs
index 5a19c873..a7880888 100644
--- a/app/Peripherals/Mouse/Models/StrixImpactIIWireless.cs
+++ b/app/Peripherals/Mouse/Models/StrixImpactIIWireless.cs
@@ -145,6 +145,11 @@
return 4;
}
+ public override bool HasDebounceSetting()
+ {
+ return true;
+ }
+
protected override byte IndexForLightingMode(LightingMode lightingMode)
{
if (lightingMode == LightingMode.Off)
diff --git a/app/Peripherals/Mouse/Models/TUFM4Wireless.cs b/app/Peripherals/Mouse/Models/TUFM4Wireless.cs
index e7141ad6..c47d1a6d 100644
--- a/app/Peripherals/Mouse/Models/TUFM4Wireless.cs
+++ b/app/Peripherals/Mouse/Models/TUFM4Wireless.cs
@@ -42,6 +42,11 @@
return false;
}
+ public override bool HasDebounceSetting()
+ {
+ return true;
+ }
+
public override bool HasAutoPowerOff()
{
return true;
diff --git a/app/Properties/Strings.Designer.cs b/app/Properties/Strings.Designer.cs
index 0314380e..802c84bf 100644
--- a/app/Properties/Strings.Designer.cs
+++ b/app/Properties/Strings.Designer.cs
@@ -1061,6 +1061,15 @@ namespace GHelper.Properties {
}
}
+ ///
+ /// Looks up a localized string similar to Button Response.
+ ///
+ internal static string MouseButtonResponse {
+ get {
+ return ResourceManager.GetString("MouseButtonResponse", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Lift Off Distance.
///
diff --git a/app/Properties/Strings.resx b/app/Properties/Strings.resx
index bcbd0ddf..5973ed37 100644
--- a/app/Properties/Strings.resx
+++ b/app/Properties/Strings.resx
@@ -452,6 +452,9 @@ Do you still want to continue?
Auto Power Off After
+
+ Button Response
+
Lift Off Distance
From 22799caedcbbb03786032884ebeac01034995327 Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Mon, 31 Jul 2023 16:08:40 +0200
Subject: [PATCH 06/15] New translations Strings.resx (Romanian)
---
app/Properties/Strings.ro.resx | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/Properties/Strings.ro.resx b/app/Properties/Strings.ro.resx
index a80fc749..715dadf2 100644
--- a/app/Properties/Strings.ro.resx
+++ b/app/Properties/Strings.ro.resx
@@ -452,6 +452,9 @@
Auto Power Off After
+
+ Button Response
+
Lift Off Distance
From 4f80d1ced69fac5563bed4919df2e1e61a905ba3 Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Mon, 31 Jul 2023 16:08:41 +0200
Subject: [PATCH 07/15] New translations Strings.resx (French)
---
app/Properties/Strings.fr.resx | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/Properties/Strings.fr.resx b/app/Properties/Strings.fr.resx
index 7f3d6740..db434aca 100644
--- a/app/Properties/Strings.fr.resx
+++ b/app/Properties/Strings.fr.resx
@@ -452,6 +452,9 @@ Voulez-vous continuer ?
Arrêt automatique après
+
+ Button Response
+
Lift Off Distance
From 40469826983de4bf853e81bdc84901ceb6d2ec96 Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Mon, 31 Jul 2023 16:08:43 +0200
Subject: [PATCH 08/15] New translations Strings.resx (German)
---
app/Properties/Strings.de.resx | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/Properties/Strings.de.resx b/app/Properties/Strings.de.resx
index 32d4839a..e0788c99 100644
--- a/app/Properties/Strings.de.resx
+++ b/app/Properties/Strings.de.resx
@@ -452,6 +452,9 @@ Trotzdem fortfahren?
Automatisch abschalten nach
+
+ Button Response
+
Lift Off Distance
From 5bb3b67979e4ac5074a9cc0b689807c1c4829ab4 Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Mon, 31 Jul 2023 16:08:46 +0200
Subject: [PATCH 09/15] New translations Strings.resx (Korean)
---
app/Properties/Strings.ko.resx | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/Properties/Strings.ko.resx b/app/Properties/Strings.ko.resx
index 9d71af2d..81edb083 100644
--- a/app/Properties/Strings.ko.resx
+++ b/app/Properties/Strings.ko.resx
@@ -452,6 +452,9 @@
Auto Power Off After
+
+ Button Response
+
Lift Off Distance
From e1b6e3057dc99be90c85f666ec14d6fe5198bc69 Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Mon, 31 Jul 2023 16:08:47 +0200
Subject: [PATCH 10/15] New translations Strings.resx (Lithuanian)
---
app/Properties/Strings.lt.resx | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/Properties/Strings.lt.resx b/app/Properties/Strings.lt.resx
index 2cd1c921..cf3a84cb 100644
--- a/app/Properties/Strings.lt.resx
+++ b/app/Properties/Strings.lt.resx
@@ -452,6 +452,9 @@ Vis tiek norite tęsti?
Automatiškai išjungti po
+
+ Button Response
+
Pakilimo atstumas
From fa9d73e6298b2e8d0ad3408d2dac49b1f8590911 Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Mon, 31 Jul 2023 16:08:48 +0200
Subject: [PATCH 11/15] New translations Strings.resx (Portuguese)
---
app/Properties/Strings.pt.resx | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/Properties/Strings.pt.resx b/app/Properties/Strings.pt.resx
index 618f1bb5..91ee2f93 100644
--- a/app/Properties/Strings.pt.resx
+++ b/app/Properties/Strings.pt.resx
@@ -452,6 +452,9 @@ Do you still want to continue?
Auto Power Off After
+
+ Button Response
+
Lift Off Distance
From da34a5af569d210b1f1fb7f76d08da1f16ef6503 Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Mon, 31 Jul 2023 16:08:49 +0200
Subject: [PATCH 12/15] New translations Strings.resx (Turkish)
---
app/Properties/Strings.tr.resx | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/Properties/Strings.tr.resx b/app/Properties/Strings.tr.resx
index 414dc393..41af912f 100644
--- a/app/Properties/Strings.tr.resx
+++ b/app/Properties/Strings.tr.resx
@@ -452,6 +452,9 @@ Do you still want to continue?
Auto Power Off After
+
+ Button Response
+
Lift Off Distance
From f7b2a5b893f148a3ed87eb3b2d8202804ad0f516 Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Mon, 31 Jul 2023 16:08:51 +0200
Subject: [PATCH 13/15] New translations Strings.resx (Chinese Simplified)
---
app/Properties/Strings.zh-CN.resx | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/Properties/Strings.zh-CN.resx b/app/Properties/Strings.zh-CN.resx
index e7fda3df..f0702d04 100644
--- a/app/Properties/Strings.zh-CN.resx
+++ b/app/Properties/Strings.zh-CN.resx
@@ -452,6 +452,9 @@
自动关闭时间
+
+ Button Response
+
静默高度
From f24f2dcec35b580f793a0e24e5b72057f476306b Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Mon, 31 Jul 2023 16:08:52 +0200
Subject: [PATCH 14/15] New translations Strings.resx (Vietnamese)
---
app/Properties/Strings.vi.resx | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/Properties/Strings.vi.resx b/app/Properties/Strings.vi.resx
index 0cfbffd0..a387da29 100644
--- a/app/Properties/Strings.vi.resx
+++ b/app/Properties/Strings.vi.resx
@@ -452,6 +452,9 @@ Do you still want to continue?
Auto Power Off After
+
+ Button Response
+
Lift Off Distance
From 08c28ed0d09dcf1d720e51f93c06d615c694444a Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Mon, 31 Jul 2023 17:15:58 +0200
Subject: [PATCH 15/15] New translations Strings.resx (Chinese Traditional)
---
app/Properties/Strings.zh-TW.resx | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/app/Properties/Strings.zh-TW.resx b/app/Properties/Strings.zh-TW.resx
index b8f84fa9..f35115f0 100644
--- a/app/Properties/Strings.zh-TW.resx
+++ b/app/Properties/Strings.zh-TW.resx
@@ -184,7 +184,7 @@
快速
- Lighting Mode
+ 燈效模式
正常
@@ -208,7 +208,7 @@
閃爍
- All
+ 全部
Dock
@@ -217,7 +217,7 @@
Logo
- Scrollwheel
+ 滾輪
Underglow
@@ -452,6 +452,9 @@
自動關閉電源
+
+ Button Response
+
響應高度(LOD)