summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Palecki <[email protected]>2020-08-22 02:46:45 -0700
committerJacob Palecki <[email protected]>2020-08-22 02:46:45 -0700
commitb874058d82a60a39163e91a26f370ff308b8af32 (patch)
tree7e14357f1e1e2b2b9726c72ae7b679fd5b475af2
parentSerialization mostly working (diff)
downloadrawaccel-b874058d82a60a39163e91a26f370ff308b8af32.tar.xz
rawaccel-b874058d82a60a39163e91a26f370ff308b8af32.zip
Saving and loading fully works
-rw-r--r--grapher/Form1.Designer.cs36
-rw-r--r--grapher/Form1.cs28
-rw-r--r--grapher/Models/AccelGUI.cs71
-rw-r--r--grapher/Models/Serialized/GUISettings.cs40
-rw-r--r--grapher/Models/Serialized/ModifierArgs.cs75
-rw-r--r--grapher/Models/Serialized/RawAccelSettings.cs31
-rw-r--r--grapher/Models/Serialized/SettingsManager.cs123
-rw-r--r--grapher/grapher.csproj2
-rw-r--r--settings.json50
-rw-r--r--wrapper/wrapper.cpp5
-rw-r--r--wrapper/wrapper.hpp11
11 files changed, 332 insertions, 140 deletions
diff --git a/grapher/Form1.Designer.cs b/grapher/Form1.Designer.cs
index 7a5eb43..ac438a1 100644
--- a/grapher/Form1.Designer.cs
+++ b/grapher/Form1.Designer.cs
@@ -95,6 +95,8 @@ namespace grapher
this.capStyleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.sensitivityToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.velocityGainToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.startupToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.AutoWriteMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.AccelerationChartY = new System.Windows.Forms.DataVisualization.Charting.Chart();
this.VelocityChartY = new System.Windows.Forms.DataVisualization.Charting.Chart();
this.GainChartY = new System.Windows.Forms.DataVisualization.Charting.Chart();
@@ -112,8 +114,6 @@ namespace grapher
this.OffsetActiveLabel = new System.Windows.Forms.Label();
this.LimitExpActiveLabel = new System.Windows.Forms.Label();
this.MidpointActiveLabel = new System.Windows.Forms.Label();
- this.startupToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.AutoWriteMenuItem = new System.Windows.Forms.ToolStripMenuItem();
((System.ComponentModel.ISupportInitialize)(this.AccelerationChart)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.VelocityChart)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.GainChart)).BeginInit();
@@ -519,6 +519,23 @@ namespace grapher
this.velocityGainToolStripMenuItem.Size = new System.Drawing.Size(142, 22);
this.velocityGainToolStripMenuItem.Text = "Velocity Gain";
//
+ // startupToolStripMenuItem
+ //
+ this.startupToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.AutoWriteMenuItem});
+ this.startupToolStripMenuItem.Name = "startupToolStripMenuItem";
+ this.startupToolStripMenuItem.Size = new System.Drawing.Size(57, 20);
+ this.startupToolStripMenuItem.Text = "Startup";
+ //
+ // 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(229, 22);
+ this.AutoWriteMenuItem.Text = "Apply Settings File on Startup";
+ //
// AccelerationChartY
//
chartArea4.AxisX.Title = "Speed (counts/ms)";
@@ -720,21 +737,6 @@ namespace grapher
this.MidpointActiveLabel.TabIndex = 47;
this.MidpointActiveLabel.Text = "0";
//
- // startupToolStripMenuItem
- //
- this.startupToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.AutoWriteMenuItem});
- this.startupToolStripMenuItem.Name = "startupToolStripMenuItem";
- this.startupToolStripMenuItem.Size = new System.Drawing.Size(57, 20);
- this.startupToolStripMenuItem.Text = "Startup";
- //
- // AutoWriteMenuItem
- //
- this.AutoWriteMenuItem.CheckOnClick = true;
- this.AutoWriteMenuItem.Name = "AutoWriteMenuItem";
- this.AutoWriteMenuItem.Size = new System.Drawing.Size(229, 22);
- this.AutoWriteMenuItem.Text = "Apply Settings File on Startup";
- //
// RawAcceleration
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
diff --git a/grapher/Form1.cs b/grapher/Form1.cs
index ef06527..d6f7990 100644
--- a/grapher/Form1.cs
+++ b/grapher/Form1.cs
@@ -11,6 +11,7 @@ using System.Windows.Forms;
using System.Runtime.InteropServices;
using grapher.Models.Calculations;
using grapher.Models.Options;
+using grapher.Models.Serialized;
namespace grapher
{
@@ -91,6 +92,7 @@ namespace grapher
Marshal.FreeHGlobal(args_ptr);
+
var accelCharts = new AccelCharts(
this,
new ChartXY(AccelerationChart, AccelerationChartY),
@@ -198,15 +200,21 @@ namespace grapher
cap,
weight);
- AccelCalculator accelCalculator = new AccelCalculator(
+ var accelCalculator = new AccelCalculator(
new Field(DPITextBox.TextBox, this, AccelCalculator.DefaultDPI),
new Field(PollRateTextBox.TextBox, this, AccelCalculator.DefaultPollRate));
+ var settings = new SettingsManager(
+ managedAcceleration,
+ accelCalculator.DPI,
+ accelCalculator.PollRate,
+ AutoWriteMenuItem);
+
AccelGUI = new AccelGUI(
this,
accelCalculator,
accelCharts,
- managedAcceleration,
+ settings,
accelerationOptions,
sensitivity,
rotation,
@@ -249,21 +257,7 @@ namespace grapher
private void writeButton_Click(object sender, EventArgs e)
{
- AccelGUI.ManagedAcceleration.UpdateAccel(
- AccelGUI.AccelerationOptions.AccelerationIndex,
- AccelGUI.Rotation.Field.Data,
- AccelGUI.Sensitivity.Fields.X,
- AccelGUI.Sensitivity.Fields.Y,
- AccelGUI.Weight.Fields.X,
- AccelGUI.Weight.Fields.Y,
- AccelGUI.Cap.SensitivityCapX,
- AccelGUI.Cap.SensitivityCapY,
- AccelGUI.Offset.Field.Data,
- AccelGUI.Acceleration.Field.Data,
- AccelGUI.LimitOrExponent.Field.Data,
- AccelGUI.Midpoint.Field.Data,
- AccelGUI.Cap.VelocityGainCap);
- AccelGUI.UpdateGraph();
+ AccelGUI.UpdateActiveSettingsFromFields();
}
#endregion Methods
diff --git a/grapher/Models/AccelGUI.cs b/grapher/Models/AccelGUI.cs
index a0a76c8..e0dcc03 100644
--- a/grapher/Models/AccelGUI.cs
+++ b/grapher/Models/AccelGUI.cs
@@ -21,7 +21,7 @@ namespace grapher
RawAcceleration accelForm,
AccelCalculator accelCalculator,
AccelCharts accelCharts,
- ManagedAccel managedAccel,
+ SettingsManager settings,
AccelOptions accelOptions,
OptionXY sensitivity,
Option rotation,
@@ -39,7 +39,6 @@ namespace grapher
AccelForm = accelForm;
AccelCalculator = accelCalculator;
AccelCharts = accelCharts;
- ManagedAcceleration = managedAccel;
AccelerationOptions = accelOptions;
Sensitivity = sensitivity;
Rotation = rotation;
@@ -51,9 +50,8 @@ namespace grapher
Midpoint = midpoint;
WriteButton = writeButton;
ScaleMenuItem = scaleMenuItem;
-
- ManagedAcceleration.ReadFromDriver();
- SavedSettings = StartupLoad(AccelCalculator.DPI, AccelCalculator.PollRate, autoWriteMenuItem);
+ Settings = settings;
+ Settings.Startup();
UpdateGraph();
MouseWatcher = new MouseWatcher(AccelForm, mouseMoveLabel, AccelCharts);
@@ -67,13 +65,11 @@ namespace grapher
public RawAcceleration AccelForm { get; }
- public RawAccelSettings SavedSettings { get; }
-
public AccelCalculator AccelCalculator { get; }
public AccelCharts AccelCharts { get; }
- public ManagedAccel ManagedAcceleration { get; }
+ public SettingsManager Settings { get; }
public AccelOptions AccelerationOptions { get; }
@@ -103,44 +99,43 @@ namespace grapher
#region methods
+ public void UpdateActiveSettingsFromFields()
+ {
+ Settings.UpdateActiveSettings(
+ AccelerationOptions.AccelerationIndex,
+ Rotation.Field.Data,
+ Sensitivity.Fields.X,
+ Sensitivity.Fields.Y,
+ Weight.Fields.X,
+ Weight.Fields.Y,
+ Cap.SensitivityCapX,
+ Cap.SensitivityCapY,
+ Offset.Field.Data,
+ Acceleration.Field.Data,
+ LimitOrExponent.Field.Data,
+ Midpoint.Field.Data,
+ Cap.VelocityGainCap);
+ UpdateGraph();
+ }
+
public void UpdateGraph()
{
- AccelCalculator.Calculate(AccelCharts.AccelData, ManagedAcceleration);
+ AccelCalculator.Calculate(AccelCharts.AccelData, Settings.ActiveAccel);
AccelCharts.Bind();
UpdateActiveValueLabels();
- SavedSettings.Save();
}
public void UpdateActiveValueLabels()
{
- Sensitivity.SetActiveValues(ManagedAcceleration.SensitivityX, ManagedAcceleration.SensitivityY);
- Rotation.SetActiveValue(ManagedAcceleration.Rotation);
- AccelerationOptions.SetActiveValue(ManagedAcceleration.Type);
- Offset.SetActiveValue(ManagedAcceleration.Offset);
- Acceleration.SetActiveValue(ManagedAcceleration.Acceleration);
- Cap.SetActiveValues(ManagedAcceleration.GainCap, ManagedAcceleration.CapX, ManagedAcceleration.CapY, ManagedAcceleration.GainCapEnabled);
- Weight.SetActiveValues(ManagedAcceleration.WeightX, ManagedAcceleration.WeightY);
- LimitOrExponent.SetActiveValue(ManagedAcceleration.LimitExp);
- Midpoint.SetActiveValue(ManagedAcceleration.Midpoint);
- }
-
- private RawAccelSettings StartupLoad(Field dpiField, Field pollRateField, ToolStripMenuItem autoWriteMenuItem)
- {
- if (RawAccelSettings.Exists())
- {
- var settings = RawAccelSettings.Load();
- settings.GUISettings.BindToGUI(dpiField, pollRateField, autoWriteMenuItem);
- return settings;
- }
- else
- {
- return new RawAccelSettings(
- ManagedAcceleration,
- new GUISettings(
- AccelCalculator.DPI,
- AccelCalculator.PollRate,
- autoWriteMenuItem));
- }
+ Sensitivity.SetActiveValues(Settings.ActiveAccel.SensitivityX, Settings.ActiveAccel.SensitivityY);
+ Rotation.SetActiveValue(Settings.ActiveAccel.Rotation);
+ AccelerationOptions.SetActiveValue(Settings.ActiveAccel.Type);
+ Offset.SetActiveValue(Settings.ActiveAccel.Offset);
+ Acceleration.SetActiveValue(Settings.ActiveAccel.Acceleration);
+ Cap.SetActiveValues(Settings.ActiveAccel.GainCap, Settings.ActiveAccel.CapX, Settings.ActiveAccel.CapY, Settings.ActiveAccel.GainCapEnabled);
+ Weight.SetActiveValues(Settings.ActiveAccel.WeightX, Settings.ActiveAccel.WeightY);
+ LimitOrExponent.SetActiveValue(Settings.ActiveAccel.LimitExp);
+ Midpoint.SetActiveValue(Settings.ActiveAccel.Midpoint);
}
private void OnScaleMenuItemClick(object sender, EventArgs e)
diff --git a/grapher/Models/Serialized/GUISettings.cs b/grapher/Models/Serialized/GUISettings.cs
index 8c182ae..7c8e9a4 100644
--- a/grapher/Models/Serialized/GUISettings.cs
+++ b/grapher/Models/Serialized/GUISettings.cs
@@ -1,4 +1,5 @@
-using System;
+using Newtonsoft.Json;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -11,41 +12,22 @@ namespace grapher.Models.Serialized
[Serializable]
public class GUISettings
{
- public GUISettings(
- Field dpiField,
- Field pollRateField,
- ToolStripMenuItem autoWriteMenuItem)
+ public GUISettings() {}
+
+ public GUISettings(bool autoWrite, int dpi, int pollRate)
{
- BindToGUI(dpiField, pollRateField, autoWriteMenuItem);
+ AutoWriteToDriverOnStartup = autoWrite;
+ DPI = dpi;
+ PollRate = pollRate;
}
+ [JsonProperty(Order = 1)]
public bool AutoWriteToDriverOnStartup { get; set; }
+ [JsonProperty(Order = 2)]
public int DPI { get; set; }
+ [JsonProperty(Order = 3)]
public int PollRate { get; set; }
-
- [field: NonSerialized]
- private Field DpiField { get; set; }
-
- [field: NonSerialized]
- private Field PollRateField { get; set; }
-
- [field: NonSerialized]
- private ToolStripMenuItem AutoWriteMenuItem { get; set; }
-
- public void UpdateSettings()
- {
- DPI = (int)DpiField.Data;
- PollRate = (int)PollRateField.Data;
- AutoWriteToDriverOnStartup = AutoWriteMenuItem.Checked;
- }
-
- public void BindToGUI(Field dpiField, Field pollRateField, ToolStripMenuItem autoWriteMenuItem)
- {
- DpiField = dpiField;
- PollRateField = pollRateField;
- AutoWriteMenuItem = autoWriteMenuItem;
- }
}
}
diff --git a/grapher/Models/Serialized/ModifierArgs.cs b/grapher/Models/Serialized/ModifierArgs.cs
new file mode 100644
index 0000000..206a3c9
--- /dev/null
+++ b/grapher/Models/Serialized/ModifierArgs.cs
@@ -0,0 +1,75 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace grapher.Models.Serialized
+{
+ public enum accel_mode
+ {
+ linear=1, classic, natural, logarithmic, sigmoid, power, naturalgain, sigmoidgain, noaccel
+ }
+
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
+ [Serializable]
+ public struct vec2d
+ {
+ public double x;
+ public double y;
+ }
+
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
+ [Serializable]
+ public struct accel_args
+ {
+ public double offset;
+ public double accel;
+ public double limit;
+ public double exponent;
+ public double midpoint;
+ public double power_scale;
+ public double gain_cap;
+ public vec2d weight;
+ }
+
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
+ [Serializable]
+ public struct accel_fn_args
+ {
+ public accel_args acc_args;
+ public int accel_mode;
+ public double time_min;
+ public vec2d cap;
+ }
+
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
+ [Serializable]
+ public struct modifier_args
+ {
+ public double degrees;
+ public vec2d sens;
+ public accel_fn_args acc_fn_args;
+
+ public modifier_args(ManagedAccel managedAccel)
+ {
+ degrees = managedAccel.Rotation;
+ sens.x = managedAccel.SensitivityX;
+ sens.y = managedAccel.SensitivityY;
+ acc_fn_args.accel_mode = managedAccel.Type;
+ acc_fn_args.time_min = managedAccel.MinimumTime;
+ acc_fn_args.cap.x = managedAccel.CapX;
+ acc_fn_args.cap.y = managedAccel.CapY;
+ acc_fn_args.acc_args.accel = managedAccel.Acceleration;
+ acc_fn_args.acc_args.exponent = managedAccel.LimitExp;
+ acc_fn_args.acc_args.gain_cap = managedAccel.GainCap;
+ acc_fn_args.acc_args.limit = managedAccel.LimitExp;
+ acc_fn_args.acc_args.midpoint = managedAccel.Midpoint;
+ acc_fn_args.acc_args.offset = managedAccel.Offset;
+ acc_fn_args.acc_args.power_scale = managedAccel.PowerScale;
+ acc_fn_args.acc_args.weight.x = managedAccel.WeightX;
+ acc_fn_args.acc_args.weight.y = managedAccel.WeightY;
+ }
+ }
+}
diff --git a/grapher/Models/Serialized/RawAccelSettings.cs b/grapher/Models/Serialized/RawAccelSettings.cs
index d8896b6..21a7f0c 100644
--- a/grapher/Models/Serialized/RawAccelSettings.cs
+++ b/grapher/Models/Serialized/RawAccelSettings.cs
@@ -3,6 +3,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
@@ -12,20 +13,29 @@ namespace grapher.Models.Serialized
[Serializable]
public class RawAccelSettings
{
- public const string DefaultSettingsFile = @".\settings.json";
+ public const string DefaultSettingsFileName = @"settings.json";
+ public static readonly string ExecutingDirectory = AppDomain.CurrentDomain.BaseDirectory;
+ public static readonly string DefaultSettingsFile = Path.Combine(ExecutingDirectory, DefaultSettingsFileName);
+ public static readonly JsonSerializerSettings SerializerSettings = new JsonSerializerSettings
+ {
+ MissingMemberHandling = MissingMemberHandling.Error,
+ };
+
+ public RawAccelSettings() { }
public RawAccelSettings(
ManagedAccel managedAccel,
GUISettings guiSettings)
{
- ManagedAccel = managedAccel;
+ AccelerationSettings = new modifier_args(managedAccel);
GUISettings = guiSettings;
}
- public ManagedAccel ManagedAccel { get; set; }
public GUISettings GUISettings { get; set; }
+ public modifier_args AccelerationSettings { get; set; }
+
public static RawAccelSettings Load()
{
return Load(DefaultSettingsFile);
@@ -38,21 +48,14 @@ namespace grapher.Models.Serialized
throw new Exception($"Settings file does not exist at {file}");
}
- object deserializedObject;
+ RawAccelSettings deserializedSettings;
try
{
- deserializedObject = JsonConvert.DeserializeObject(File.ReadAllText(file));
+ deserializedSettings = JsonConvert.DeserializeObject<RawAccelSettings>(File.ReadAllText(file), SerializerSettings);
}
- catch
- {
- throw new Exception($"Settings file at {file} does not contain valid JSON.");
- }
-
- RawAccelSettings deserializedSettings = (RawAccelSettings)deserializedObject;
-
- if (deserializedSettings == null)
+ catch(Exception e)
{
- throw new Exception($"Settings file at {file} does not contain valid Raw Accel Settings.");
+ throw new Exception($"Settings file at {file} does not contain valid Raw Accel Settings.", e);
}
return deserializedSettings;
diff --git a/grapher/Models/Serialized/SettingsManager.cs b/grapher/Models/Serialized/SettingsManager.cs
new file mode 100644
index 0000000..848606d
--- /dev/null
+++ b/grapher/Models/Serialized/SettingsManager.cs
@@ -0,0 +1,123 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace grapher.Models.Serialized
+{
+ public class SettingsManager
+ {
+ public SettingsManager(
+ ManagedAccel activeAccel,
+ Field dpiField,
+ Field pollRateField,
+ ToolStripMenuItem autoWrite)
+ {
+ ActiveAccel = activeAccel;
+ DpiField = dpiField;
+ PollRateField = pollRateField;
+ AutoWriteMenuItem = autoWrite;
+ }
+
+ public ManagedAccel ActiveAccel { get; }
+
+ public RawAccelSettings RawAccelSettings { get; private set; }
+
+ private Field DpiField { get; set; }
+
+ private Field PollRateField { get; set; }
+
+ private ToolStripMenuItem AutoWriteMenuItem { get; set; }
+
+ public void UpdateActiveSettings(
+ int mode,
+ double degrees,
+ double sensitivityX,
+ double sensitivityY,
+ double weightX,
+ double weightY,
+ double capX,
+ double capY,
+ double offset,
+ double accel,
+ double limitOrExp,
+ double midpoint,
+ double gainCap)
+ {
+ ActiveAccel.UpdateAccel(
+ mode,
+ degrees,
+ sensitivityX,
+ sensitivityY,
+ weightX,
+ weightY,
+ capX,
+ capY,
+ offset,
+ accel,
+ limitOrExp,
+ midpoint,
+ gainCap);
+
+ RawAccelSettings.AccelerationSettings = new modifier_args(ActiveAccel);
+ RawAccelSettings.GUISettings = new GUISettings
+ {
+ AutoWriteToDriverOnStartup = AutoWriteMenuItem.Checked,
+ DPI = (int)DpiField.Data,
+ PollRate = (int)PollRateField.Data
+ };
+
+ RawAccelSettings.Save();
+ }
+
+ public void UpdateActiveAccelFromFileSettings()
+ {
+ ActiveAccel.UpdateAccel(
+ RawAccelSettings.AccelerationSettings.acc_fn_args.accel_mode,
+ RawAccelSettings.AccelerationSettings.degrees,
+ RawAccelSettings.AccelerationSettings.sens.x,
+ RawAccelSettings.AccelerationSettings.sens.y,
+ RawAccelSettings.AccelerationSettings.acc_fn_args.acc_args.weight.x,
+ RawAccelSettings.AccelerationSettings.acc_fn_args.acc_args.weight.y,
+ RawAccelSettings.AccelerationSettings.acc_fn_args.cap.x,
+ RawAccelSettings.AccelerationSettings.acc_fn_args.cap.y,
+ RawAccelSettings.AccelerationSettings.acc_fn_args.acc_args.offset,
+ RawAccelSettings.AccelerationSettings.acc_fn_args.acc_args.accel,
+ RawAccelSettings.AccelerationSettings.acc_fn_args.acc_args.exponent,
+ RawAccelSettings.AccelerationSettings.acc_fn_args.acc_args.midpoint,
+ RawAccelSettings.AccelerationSettings.acc_fn_args.acc_args.gain_cap);
+ DpiField.SetToEntered(RawAccelSettings.GUISettings.DPI);
+ PollRateField.SetToEntered(RawAccelSettings.GUISettings.PollRate);
+ AutoWriteMenuItem.Checked = RawAccelSettings.GUISettings.AutoWriteToDriverOnStartup;
+ }
+
+ public void Startup()
+ {
+ ActiveAccel.ReadFromDriver();
+
+ if(RawAccelSettings.Exists())
+ {
+ RawAccelSettings = RawAccelSettings.Load();
+ if (RawAccelSettings.GUISettings.AutoWriteToDriverOnStartup)
+ {
+ UpdateActiveAccelFromFileSettings();
+ }
+ }
+ else
+ {
+ RawAccelSettings = new RawAccelSettings(
+ ActiveAccel,
+ new GUISettings
+ {
+ AutoWriteToDriverOnStartup = AutoWriteMenuItem.Checked,
+ DPI = (int)DpiField.Data,
+ PollRate = (int)PollRateField.Data
+ });
+ RawAccelSettings.Save();
+ }
+ }
+ }
+}
diff --git a/grapher/grapher.csproj b/grapher/grapher.csproj
index 54b73c8..6e03ae0 100644
--- a/grapher/grapher.csproj
+++ b/grapher/grapher.csproj
@@ -85,7 +85,9 @@
<Compile Include="Models\Options\Option.cs" />
<Compile Include="Models\Options\OptionXY.cs" />
<Compile Include="Models\Serialized\GUISettings.cs" />
+ <Compile Include="Models\Serialized\ModifierArgs.cs" />
<Compile Include="Models\Serialized\RawAccelSettings.cs" />
+ <Compile Include="Models\Serialized\SettingsManager.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
diff --git a/settings.json b/settings.json
index d8bc27a..aaa582e 100644
--- a/settings.json
+++ b/settings.json
@@ -1,23 +1,35 @@
{
- "ManagedAccel": {
- "Midpoint": 0.0,
- "LimitExp": 2.8188211394527425,
- "Offset": 0.0,
- "WeightY": 0.162,
- "WeightX": 0.162,
- "GainCapEnabled": true,
- "GainCap": 49.127,
- "CapY": 9.0,
- "CapX": 9.0,
- "Acceleration": 0.023716,
- "Type": 2,
- "Rotation": 1.0,
- "SensitivityY": 0.1,
- "SensitivityX": 0.075
- },
"GUISettings": {
- "AutoWriteToDriverOnStartup": false,
- "DPI": 0,
- "PollRate": 0
+ "AutoWriteToDriverOnStartup": true,
+ "DPI": 1200,
+ "PollRate": 1000
+ },
+ "AccelerationSettings": {
+ "degrees": 0.0,
+ "sens": {
+ "x": 0.075,
+ "y": 0.1
+ },
+ "acc_fn_args": {
+ "acc_args": {
+ "offset": 0.0,
+ "accel": 0.023716,
+ "limit": 2.8188211394527423,
+ "exponent": 2.8188211394527423,
+ "midpoint": 0.0,
+ "power_scale": 1.0,
+ "gain_cap": 49.127,
+ "weight": {
+ "x": 0.162,
+ "y": 0.162
+ }
+ },
+ "accel_mode": 2,
+ "time_min": 0.4,
+ "cap": {
+ "x": 9.0,
+ "y": 9.0
+ }
+ }
}
} \ No newline at end of file
diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp
index 067a874..a3c3704 100644
--- a/wrapper/wrapper.cpp
+++ b/wrapper/wrapper.cpp
@@ -31,7 +31,7 @@ void ManagedAccel::UpdateAccel(
double midpoint,
double gain_cap)
{
- modifier_args args{};
+ modifier_args args = modifier_args{};
args.acc_fn_args.accel_mode = mode;
args.degrees = rotation;
args.sens.x = sensitivityX;
@@ -52,6 +52,7 @@ void ManagedAccel::UpdateAccel(
delete temp_modifier;
ReadFromDriver();
+
}
double ManagedAccel::SensitivityX::get() { return modifier_instance->sensitivity.x; }
@@ -68,6 +69,8 @@ double ManagedAccel::WeightY::get() { return modifier_instance->accel_fn.impl_ar
double ManagedAccel::Offset::get() { return modifier_instance->accel_fn.speed_offset; }
double ManagedAccel::LimitExp::get() { return modifier_instance->accel_fn.impl_args.limit; }
double ManagedAccel::Midpoint::get() { return modifier_instance->accel_fn.impl_args.midpoint; }
+double ManagedAccel::MinimumTime::get() { return modifier_instance->accel_fn.time_min; }
+double ManagedAccel::PowerScale::get() { return modifier_instance->accel_fn.impl_args.power_scale; }
void ManagedAccel::WriteToDriver()
{
diff --git a/wrapper/wrapper.hpp b/wrapper/wrapper.hpp
index e90b308..3643eb5 100644
--- a/wrapper/wrapper.hpp
+++ b/wrapper/wrapper.hpp
@@ -7,13 +7,10 @@
using namespace rawaccel;
using namespace System;
-[ Serializable ]
public ref class ManagedAccel
{
protected:
- [ NonSerialized ]
mouse_modifier* modifier_instance;
- [ NonSerialized ]
wrapper_io* driverWriter;
public:
ManagedAccel(mouse_modifier* accel)
@@ -28,6 +25,9 @@ public:
driverWriter = new wrapper_io();
}
+ // Empty constructor needed for serialization
+ ManagedAccel() {}
+
virtual ~ManagedAccel()
{
if (modifier_instance!= nullptr)
@@ -49,16 +49,17 @@ public:
property double Rotation { double get(); }
property int Type { int get(); }
property double Acceleration { double get(); }
+ property bool GainCapEnabled { bool get(); }
property double CapX { double get(); }
property double CapY { double get(); }
property double GainCap { double get(); }
- property bool GainCapEnabled { bool get(); }
property double WeightX { double get(); }
property double WeightY { double get(); }
property double Offset { double get(); }
property double LimitExp { double get(); }
property double Midpoint { double get(); }
-
+ property double MinimumTime { double get(); }
+ property double PowerScale { double get(); }
mouse_modifier* GetInstance()
{
return modifier_instance;