diff options
| -rw-r--r-- | common/accel-base.hpp | 1 | ||||
| -rw-r--r-- | common/rawaccel-settings.h | 4 | ||||
| -rw-r--r-- | common/rawaccel.hpp | 23 | ||||
| -rw-r--r-- | grapher/Form1.Designer.cs | 20 | ||||
| -rw-r--r-- | grapher/Form1.cs | 1 | ||||
| -rw-r--r-- | grapher/Models/AccelGUI.cs | 99 | ||||
| -rw-r--r-- | grapher/Models/AccelGUIFactory.cs | 2 | ||||
| -rw-r--r-- | grapher/Models/Options/ActiveValueLabelXY.cs | 3 | ||||
| -rw-r--r-- | grapher/Models/Serialized/GUISettings.cs | 10 | ||||
| -rw-r--r-- | grapher/Models/Serialized/RawAccelSettings.cs | 17 | ||||
| -rw-r--r-- | grapher/Models/Serialized/SettingsManager.cs | 25 | ||||
| -rw-r--r-- | signed/driver/rawaccel.sys | bin | 52552 -> 52560 bytes | |||
| -rw-r--r-- | wrapper/wrapper.cpp | 2 |
13 files changed, 127 insertions, 80 deletions
diff --git a/common/accel-base.hpp b/common/accel-base.hpp index ac7ac4d..b15d695 100644 --- a/common/accel-base.hpp +++ b/common/accel-base.hpp @@ -14,6 +14,7 @@ namespace rawaccel { double weight = 1; double scale_cap = 0; double gain_cap = 0; + double speed_cap = 0; }; template <typename Func> diff --git a/common/rawaccel-settings.h b/common/rawaccel-settings.h index aeb89e8..e9e158c 100644 --- a/common/rawaccel-settings.h +++ b/common/rawaccel-settings.h @@ -4,10 +4,12 @@ #include "accel-base.hpp" namespace rawaccel { + using milliseconds = double; + inline constexpr int MAX_POLL_RATE_KHZ = 8; + inline constexpr milliseconds DEFAULT_TIME_MIN = 1.0 / MAX_POLL_RATE_KHZ * 0.8; inline constexpr milliseconds WRITE_DELAY = 1000; - inline constexpr milliseconds DEFAULT_TIME_MIN = 0.4; enum class accel_mode { linear, classic, natural, naturalgain, power, motivity, noaccel diff --git a/common/rawaccel.hpp b/common/rawaccel.hpp index ecd3850..b160a42 100644 --- a/common/rawaccel.hpp +++ b/common/rawaccel.hpp @@ -195,16 +195,31 @@ namespace rawaccel { accel_variant accel; velocity_gain_cap gain_cap; accel_scale_clamp clamp; + double output_speed_cap = 0; accelerator(const accel_args& args, accel_mode mode, si_pair* lut = nullptr) : accel(args, mode, lut), gain_cap(args.gain_cap, accel), clamp(args.scale_cap) - {} + { + output_speed_cap = maxsd(args.speed_cap, 0); + } + + inline double apply(double speed) const { + double scale; - inline double apply(double speed) const { if (gain_cap.should_apply(speed)) { - return clamp(gain_cap.apply(speed)); + scale = gain_cap.apply(speed); + } + else { + scale = accel.apply(speed); } - else return clamp(accel.apply(speed)); + + scale = clamp(scale); + + if (output_speed_cap > 0 && (scale * speed) > output_speed_cap) { + scale = output_speed_cap / speed; + } + + return scale; } accelerator() = default; diff --git a/grapher/Form1.Designer.cs b/grapher/Form1.Designer.cs index a6ae754..6fd9478 100644 --- a/grapher/Form1.Designer.cs +++ b/grapher/Form1.Designer.cs @@ -168,6 +168,7 @@ namespace grapher this.GainChart = new System.Windows.Forms.DataVisualization.Charting.Chart(); this.VelocityChart = new System.Windows.Forms.DataVisualization.Charting.Chart(); this.AccelerationChart = new System.Windows.Forms.DataVisualization.Charting.Chart(); + this.AutoWriteMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.optionsPanel.SuspendLayout(); this.menuStrip1.SuspendLayout(); this.chartsPanel.SuspendLayout(); @@ -954,7 +955,8 @@ namespace grapher this.advancedToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.capStyleToolStripMenuItem, this.offsetStyleToolStripMenuItem, - this.toolStripMenuItem1}); + this.toolStripMenuItem1, + this.AutoWriteMenuItem}); this.advancedToolStripMenuItem.Name = "advancedToolStripMenuItem"; this.advancedToolStripMenuItem.Size = new System.Drawing.Size(72, 20); this.advancedToolStripMenuItem.Text = "Advanced"; @@ -965,7 +967,7 @@ namespace grapher this.gainCapToolStripMenuItem, this.legacyCapToolStripMenuItem}); this.capStyleToolStripMenuItem.Name = "capStyleToolStripMenuItem"; - this.capStyleToolStripMenuItem.Size = new System.Drawing.Size(163, 22); + this.capStyleToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.capStyleToolStripMenuItem.Text = "Cap Style"; // // gainCapToolStripMenuItem @@ -988,7 +990,7 @@ namespace grapher this.gainOffsetToolStripMenuItem, this.legacyOffsetToolStripMenuItem}); this.offsetStyleToolStripMenuItem.Name = "offsetStyleToolStripMenuItem"; - this.offsetStyleToolStripMenuItem.Size = new System.Drawing.Size(163, 22); + this.offsetStyleToolStripMenuItem.Size = new System.Drawing.Size(210, 22); this.offsetStyleToolStripMenuItem.Text = "Offset Style"; // // gainOffsetToolStripMenuItem @@ -1009,7 +1011,7 @@ namespace grapher this.wholeVectorToolStripMenuItem, this.byVectorComponentToolStripMenuItem}); this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(163, 22); + this.toolStripMenuItem1.Size = new System.Drawing.Size(210, 22); this.toolStripMenuItem1.Text = "Application Style"; // // wholeVectorToolStripMenuItem @@ -1279,6 +1281,15 @@ namespace grapher title6.Text = "Sensitivity"; this.AccelerationChart.Titles.Add(title6); // + // AutoWriteMenuItem + // + this.AutoWriteMenuItem.Checked = true; + this.AutoWriteMenuItem.CheckOnClick = true; + this.AutoWriteMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; + this.AutoWriteMenuItem.Name = "AutoWriteMenuItem"; + this.AutoWriteMenuItem.Size = new System.Drawing.Size(210, 22); + this.AutoWriteMenuItem.Text = "Apply Settings On Startup"; + // // RawAcceleration // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -1406,6 +1417,7 @@ namespace grapher private System.Windows.Forms.DataVisualization.Charting.Chart GainChart; private System.Windows.Forms.DataVisualization.Charting.Chart VelocityChart; private System.Windows.Forms.DataVisualization.Charting.Chart AccelerationChart; + private System.Windows.Forms.ToolStripMenuItem AutoWriteMenuItem; } } diff --git a/grapher/Form1.cs b/grapher/Form1.cs index 446618b..d62ed6d 100644 --- a/grapher/Form1.cs +++ b/grapher/Form1.cs @@ -59,6 +59,7 @@ namespace grapher legacyCapToolStripMenuItem, gainOffsetToolStripMenuItem, legacyOffsetToolStripMenuItem, + AutoWriteMenuItem, ScaleMenuItem, DPITextBox, PollRateTextBox, diff --git a/grapher/Models/AccelGUI.cs b/grapher/Models/AccelGUI.cs index dd1e37d..c08313b 100644 --- a/grapher/Models/AccelGUI.cs +++ b/grapher/Models/AccelGUI.cs @@ -33,13 +33,8 @@ namespace grapher ToggleButton = (CheckBox)toggleButton; ScaleMenuItem = scaleMenuItem; Settings = settings; - Settings.Startup(); - RefreshOnRead(Settings.RawAccelSettings.AccelerationSettings); - AccelForm.DoResize(); - DefaultButtonFont = WriteButton.Font; SmallButtonFont = new Font(WriteButton.Font.Name, WriteButton.Font.Size * Constants.SmallButtonSizeFactor); - MouseWatcher = mouseWatcher; ScaleMenuItem.Click += new System.EventHandler(OnScaleMenuItemClick); @@ -50,9 +45,30 @@ namespace grapher ButtonTimerInterval = Convert.ToInt32(DriverInterop.WriteDelayMs); ButtonTimer = new Timer(); ButtonTimer.Tick += new System.EventHandler(OnButtonTimerTick); - SetupButtons(); ChartRefresh = SetupChartTimer(); + + bool settingsActive = Settings.Startup(); + SettingsNotDefault = !Settings.RawAccelSettings.IsDefaultEquivalent(); + + if (settingsActive) + { + LastToggleChecked = SettingsNotDefault; + ToggleButton.Enabled = LastToggleChecked; + RefreshOnRead(Settings.RawAccelSettings.AccelerationSettings); + } + else + { + DriverSettings active = DriverInterop.GetActiveSettings(); + bool activeNotDefault = !RawAccelSettings.IsDefaultEquivalent(active); + + LastToggleChecked = activeNotDefault; + ToggleButton.Enabled = SettingsNotDefault || activeNotDefault; + RefreshOnRead(active); + } + + SetupButtons(); + AccelForm.DoResize(); } #endregion Constructors @@ -109,6 +125,10 @@ namespace grapher { var driverSettings = Settings.RawAccelSettings.AccelerationSettings; + var newArgs = ApplyOptions.GetArgs(); + newArgs.x.speedCap = driverSettings.args.x.speedCap; + newArgs.y.speedCap = driverSettings.args.y.speedCap; + var settings = new DriverSettings { rotation = ApplyOptions.Rotation.Field.Data, @@ -119,15 +139,16 @@ namespace grapher }, combineMagnitudes = ApplyOptions.IsWhole, modes = ApplyOptions.GetModes(), - args = ApplyOptions.GetArgs(), + args = newArgs, minimumTime = driverSettings.minimumTime }; - WriteButtonDelay(); + ButtonDelay(WriteButton); SettingsErrors errors = Settings.TryUpdateActiveSettings(settings); if (errors.Empty()) { - RefreshToggleStateFromNewSettings(); + SettingsNotDefault = !Settings.RawAccelSettings.IsDefaultEquivalent(); + LastToggleChecked = SettingsNotDefault; RefreshOnRead(Settings.RawAccelSettings.AccelerationSettings); } else @@ -176,34 +197,23 @@ namespace grapher ToggleButton.Size = WriteButton.Size; ToggleButton.Top = WriteButton.Top; - RefreshToggleStateFromNewSettings(); - SetToggleButtonDefault(); - SetWriteButtonDefault(); + SetButtonDefaults(); } - private void RefreshToggleStateFromNewSettings() + private void SetButtonDefaults() { - SettingsNotDefault = !Settings.RawAccelSettings.IsDefaultEquivalent(); - LastToggleChecked = SettingsNotDefault; - } + ToggleButton.Checked = LastToggleChecked; + + ToggleButton.Font = DefaultButtonFont; + ToggleButton.Text = ToggleButton.Checked ? "Enabled" : "Disabled"; + ToggleButton.Update(); - private void SetWriteButtonDefault() - { WriteButton.Font = DefaultButtonFont; WriteButton.Text = Constants.WriteButtonDefaultText; WriteButton.Enabled = ToggleButton.Checked || !ToggleButton.Enabled; WriteButton.Update(); } - private void SetToggleButtonDefault() - { - ToggleButton.Checked = LastToggleChecked; - ToggleButton.Enabled = SettingsNotDefault; - ToggleButton.Font = DefaultButtonFont; - ToggleButton.Text = ToggleButton.Checked ? "Enabled" : "Disabled"; - ToggleButton.Update(); - } - private void OnScaleMenuItemClick(object sender, EventArgs e) { UpdateGraph(Settings.RawAccelSettings.AccelerationSettings); @@ -220,7 +230,8 @@ namespace grapher Settings.RawAccelSettings.AccelerationSettings : DriverInterop.DefaultSettings; - ToggleButtonDelay(); + LastToggleChecked = ToggleButton.Checked; + ButtonDelay(ToggleButton); SettingsManager.SendToDriver(settings); Settings.ActiveAccel.UpdateFromSettings(settings); @@ -230,8 +241,8 @@ namespace grapher private void OnButtonTimerTick(object sender, EventArgs e) { ButtonTimer.Stop(); - SetToggleButtonDefault(); - SetWriteButtonDefault(); + ToggleButton.Enabled = SettingsNotDefault; + SetButtonDefaults(); } private void StartButtonTimer() @@ -240,33 +251,17 @@ namespace grapher ButtonTimer.Start(); } - private void WriteButtonDelay() + private void ButtonDelay(ButtonBase btn) { - WriteButton.Font = SmallButtonFont; - WriteButton.Text = $"{Constants.ButtonDelayText} : {ButtonTimerInterval} ms"; + ToggleButton.Checked = false; + + ToggleButton.Enabled = false; WriteButton.Enabled = false; - WriteButton.Update(); - if (ToggleButton.Enabled) - { - LastToggleChecked = ToggleButton.Checked; - ToggleButton.Checked = false; - ToggleButton.Enabled = false; - ToggleButton.Update(); - } - StartButtonTimer(); - } + btn.Font = SmallButtonFont; + btn.Text = $"{Constants.ButtonDelayText} : {ButtonTimerInterval} ms"; - private void ToggleButtonDelay() - { - LastToggleChecked = ToggleButton.Checked; - ToggleButton.Checked = false; - ToggleButton.Enabled = false; - ToggleButton.Font = SmallButtonFont; - ToggleButton.Text = $"{Constants.ButtonDelayText} : {ButtonTimerInterval} ms"; ToggleButton.Update(); - - WriteButton.Enabled = false; WriteButton.Update(); StartButtonTimer(); diff --git a/grapher/Models/AccelGUIFactory.cs b/grapher/Models/AccelGUIFactory.cs index 51bbc2b..3dc2a74 100644 --- a/grapher/Models/AccelGUIFactory.cs +++ b/grapher/Models/AccelGUIFactory.cs @@ -32,6 +32,7 @@ namespace grapher.Models ToolStripMenuItem legacyCapToolStripMenuItem, ToolStripMenuItem gainOffsetToolStripMenuItem, ToolStripMenuItem legacyOffsetToolStripMenuItem, + ToolStripMenuItem autoWriteMenuItem, ToolStripMenuItem scaleMenuItem, ToolStripTextBox dpiTextBox, ToolStripTextBox pollRateTextBox, @@ -326,6 +327,7 @@ namespace grapher.Models activeAccel, accelCalculator.DPI, accelCalculator.PollRate, + autoWriteMenuItem, showLastMouseMoveMenuItem, showVelocityGainToolStripMenuItem); diff --git a/grapher/Models/Options/ActiveValueLabelXY.cs b/grapher/Models/Options/ActiveValueLabelXY.cs index 1367a6a..381779c 100644 --- a/grapher/Models/Options/ActiveValueLabelXY.cs +++ b/grapher/Models/Options/ActiveValueLabelXY.cs @@ -143,7 +143,8 @@ namespace grapher.Models.Options private void Align (int width) { FullWidth = width; - ShortenedWidth = FullWidth / 2; + // ShortenedWidth = FullWidth / 2; + ShortenedWidth = FullWidth; SetYLeft(); Y.Width = ShortenedWidth; diff --git a/grapher/Models/Serialized/GUISettings.cs b/grapher/Models/Serialized/GUISettings.cs index c8f87ae..bb35055 100644 --- a/grapher/Models/Serialized/GUISettings.cs +++ b/grapher/Models/Serialized/GUISettings.cs @@ -4,6 +4,7 @@ using System; namespace grapher.Models.Serialized { [Serializable] + [JsonObject(ItemRequired = Required.Always)] public class GUISettings { #region Constructors @@ -27,6 +28,9 @@ namespace grapher.Models.Serialized [JsonProperty(Order = 4)] public bool ShowVelocityAndGain { get; set; } + [JsonProperty(Order = 5)] + public bool AutoWriteToDriverOnStartup { get; set; } + #endregion Properties #region Methods @@ -48,7 +52,8 @@ namespace grapher.Models.Serialized return DPI == other.DPI && PollRate == other.PollRate && ShowLastMouseMove == other.ShowLastMouseMove && - ShowVelocityAndGain == other.ShowVelocityAndGain; + ShowVelocityAndGain == other.ShowVelocityAndGain && + AutoWriteToDriverOnStartup == other.AutoWriteToDriverOnStartup; } public override int GetHashCode() @@ -56,7 +61,8 @@ namespace grapher.Models.Serialized return DPI.GetHashCode() ^ PollRate.GetHashCode() ^ ShowLastMouseMove.GetHashCode() ^ - ShowVelocityAndGain.GetHashCode(); + ShowVelocityAndGain.GetHashCode() ^ + AutoWriteToDriverOnStartup.GetHashCode(); } #endregion Methods diff --git a/grapher/Models/Serialized/RawAccelSettings.cs b/grapher/Models/Serialized/RawAccelSettings.cs index 818bfb6..af87a65 100644 --- a/grapher/Models/Serialized/RawAccelSettings.cs +++ b/grapher/Models/Serialized/RawAccelSettings.cs @@ -117,13 +117,18 @@ namespace grapher.Models.Serialized public bool IsDefaultEquivalent() { - bool wholeOrNoY = AccelerationSettings.combineMagnitudes || - AccelerationSettings.modes.y == AccelMode.noaccel; + return IsDefaultEquivalent(AccelerationSettings); + } + + public static bool IsDefaultEquivalent(DriverSettings accelSettings) + { + bool wholeOrNoY = accelSettings.combineMagnitudes || + accelSettings.modes.y == AccelMode.noaccel; - return AccelerationSettings.sensitivity.x == 1 && - AccelerationSettings.sensitivity.y == 1 && - AccelerationSettings.rotation == 0 && - AccelerationSettings.modes.x == AccelMode.noaccel && + return accelSettings.sensitivity.x == 1 && + accelSettings.sensitivity.y == 1 && + accelSettings.rotation == 0 && + accelSettings.modes.x == AccelMode.noaccel && wholeOrNoY; } diff --git a/grapher/Models/Serialized/SettingsManager.cs b/grapher/Models/Serialized/SettingsManager.cs index 8712c87..f13ba81 100644 --- a/grapher/Models/Serialized/SettingsManager.cs +++ b/grapher/Models/Serialized/SettingsManager.cs @@ -14,12 +14,14 @@ namespace grapher.Models.Serialized ManagedAccel activeAccel, Field dpiField, Field pollRateField, + ToolStripMenuItem autoWrite, ToolStripMenuItem showLastMouseMove, ToolStripMenuItem showVelocityAndGain) { ActiveAccel = activeAccel; DpiField = dpiField; PollRateField = pollRateField; + AutoWriteMenuItem = autoWrite; ShowLastMouseMoveMenuItem = showLastMouseMove; ShowVelocityAndGainMoveMenuItem = showVelocityAndGain; } @@ -36,6 +38,8 @@ namespace grapher.Models.Serialized private Field PollRateField { get; set; } + private ToolStripMenuItem AutoWriteMenuItem { get; set; } + private ToolStripMenuItem ShowLastMouseMoveMenuItem { get; set; } private ToolStripMenuItem ShowVelocityAndGainMoveMenuItem { get; set; } @@ -92,12 +96,7 @@ namespace grapher.Models.Serialized PollRateField.SetToEntered(RawAccelSettings.GUISettings.PollRate); ShowLastMouseMoveMenuItem.Checked = RawAccelSettings.GUISettings.ShowLastMouseMove; ShowVelocityAndGainMoveMenuItem.Checked = RawAccelSettings.GUISettings.ShowVelocityAndGain; - } - - public void UpdateActiveAccelFromFileSettings(DriverSettings settings) - { - TryUpdateAccel(settings); - UpdateFieldsFromGUISettings(); + AutoWriteMenuItem.Checked = RawAccelSettings.GUISettings.AutoWriteToDriverOnStartup; } public SettingsErrors TryUpdateAccel(DriverSettings settings) @@ -126,11 +125,13 @@ namespace grapher.Models.Serialized DPI = (int)DpiField.Data, PollRate = (int)PollRateField.Data, ShowLastMouseMove = ShowLastMouseMoveMenuItem.Checked, - ShowVelocityAndGain = ShowVelocityAndGainMoveMenuItem.Checked + ShowVelocityAndGain = ShowVelocityAndGainMoveMenuItem.Checked, + AutoWriteToDriverOnStartup = AutoWriteMenuItem.Checked }; } - public void Startup() + // Returns true when file settings are active + public bool Startup() { if (RawAccelSettings.Exists()) { @@ -138,8 +139,11 @@ namespace grapher.Models.Serialized { RawAccelSettings = RawAccelSettings.Load(() => MakeGUISettingsFromFields()); UpdateFieldsFromGUISettings(); - UpdateActiveAccelFromFileSettings(RawAccelSettings.AccelerationSettings); - return; + if (RawAccelSettings.GUISettings.AutoWriteToDriverOnStartup) + { + TryUpdateAccel(RawAccelSettings.AccelerationSettings); + } + return RawAccelSettings.GUISettings.AutoWriteToDriverOnStartup; } catch (JsonException e) { @@ -151,6 +155,7 @@ namespace grapher.Models.Serialized DriverInterop.GetActiveSettings(), MakeGUISettingsFromFields()); RawAccelSettings.Save(); + return true; } #endregion Methods diff --git a/signed/driver/rawaccel.sys b/signed/driver/rawaccel.sys Binary files differindex 94872fe..a390fc4 100644 --- a/signed/driver/rawaccel.sys +++ b/signed/driver/rawaccel.sys diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index a921801..ee88112 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -33,6 +33,8 @@ public value struct AccelArgs [JsonProperty("legacyCap")] double scaleCap; double gainCap; + [JsonProperty(Required = Required::Default)] + double speedCap; }; generic <typename T> |