summaryrefslogtreecommitdiff
path: root/grapher/Models
diff options
context:
space:
mode:
authorJacobPalecki <[email protected]>2020-08-31 23:03:46 -0700
committerGitHub <[email protected]>2020-08-31 23:03:46 -0700
commit471fe599bab6ba0632ddd1dacd20c7fc42db0eee (patch)
tree90a82ee14dbb112621657efbd2523ed35f59d154 /grapher/Models
parentMerge pull request #16 from JacobPalecki/Misc (diff)
parentadd independent xy accel to driver (diff)
downloadrawaccel-471fe599bab6ba0632ddd1dacd20c7fc42db0eee.tar.xz
rawaccel-471fe599bab6ba0632ddd1dacd20c7fc42db0eee.zip
Merge pull request #17 from a1xd/indep
Indep
Diffstat (limited to 'grapher/Models')
-rw-r--r--grapher/Models/AccelGUI.cs72
-rw-r--r--grapher/Models/Calculations/AccelCalculator.cs11
-rw-r--r--grapher/Models/Options/AccelOptions.cs5
-rw-r--r--grapher/Models/Serialized/DriverSettings.cs87
-rw-r--r--grapher/Models/Serialized/ModifierArgs.cs75
-rw-r--r--grapher/Models/Serialized/RawAccelSettings.cs25
-rw-r--r--grapher/Models/Serialized/SettingsManager.cs115
7 files changed, 198 insertions, 192 deletions
diff --git a/grapher/Models/AccelGUI.cs b/grapher/Models/AccelGUI.cs
index e0dcc03..a15dba8 100644
--- a/grapher/Models/AccelGUI.cs
+++ b/grapher/Models/AccelGUI.cs
@@ -2,6 +2,7 @@
using grapher.Models.Mouse;
using grapher.Models.Serialized;
using System;
+using System.CodeDom;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
@@ -101,41 +102,64 @@ namespace grapher
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);
+ Settings.UpdateActiveSettings(new DriverSettings
+ {
+ rotation = Rotation.Field.Data,
+ sensitivity = new Vec2<double>
+ {
+ x = Sensitivity.Fields.X,
+ y = Sensitivity.Fields.Y
+ },
+ combineMagnitudes = true,
+ modes = new Vec2<AccelMode>
+ {
+ x = (AccelMode)AccelerationOptions.AccelerationIndex
+ },
+ args = new Vec2<AccelArgs>
+ {
+ x = new AccelArgs
+ {
+ offset = Offset.Field.Data,
+ weight = Weight.Fields.X,
+ gainCap = Cap.VelocityGainCap,
+ scaleCap = Cap.SensitivityCapX,
+ accel = Acceleration.Field.Data,
+ rate = Acceleration.Field.Data,
+ powerScale = Acceleration.Field.Data,
+ limit = LimitOrExponent.Field.Data,
+ exponent = LimitOrExponent.Field.Data,
+ powerExponent = LimitOrExponent.Field.Data,
+ midpoint = Midpoint.Field.Data
+ }
+ },
+ minimumTime = .4
+ });
UpdateGraph();
}
public void UpdateGraph()
{
- AccelCalculator.Calculate(AccelCharts.AccelData, Settings.ActiveAccel);
+ AccelCalculator.Calculate(
+ AccelCharts.AccelData,
+ Settings.ActiveAccel,
+ Settings.RawAccelSettings.AccelerationSettings);
AccelCharts.Bind();
UpdateActiveValueLabels();
}
public void UpdateActiveValueLabels()
{
- 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);
+ var settings = Settings.RawAccelSettings.AccelerationSettings;
+
+ Sensitivity.SetActiveValues(settings.sensitivity.x, settings.sensitivity.y);
+ Rotation.SetActiveValue(settings.rotation);
+ AccelerationOptions.SetActiveValue((int)settings.modes.x);
+ Offset.SetActiveValue(settings.args.x.offset);
+ Weight.SetActiveValues(settings.args.x.weight, settings.args.x.weight);
+ Acceleration.SetActiveValue(settings.args.x.accel); // rate, powerscale
+ LimitOrExponent.SetActiveValue(settings.args.x.limit); //exp, powerexp
+ Midpoint.SetActiveValue(settings.args.x.midpoint);
+ //Cap.SetActiveValues(Settings.ActiveAccel.GainCap, Settings.ActiveAccel.CapX, Settings.ActiveAccel.CapY, Settings.ActiveAccel.GainCapEnabled);
}
private void OnScaleMenuItemClick(object sender, EventArgs e)
diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs
index 63ed281..102de8d 100644
--- a/grapher/Models/Calculations/AccelCalculator.cs
+++ b/grapher/Models/Calculations/AccelCalculator.cs
@@ -1,4 +1,5 @@
-using System;
+using grapher.Models.Serialized;
+using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
@@ -46,15 +47,15 @@ namespace grapher.Models.Calculations
private int Increment { get; set; }
- public void Calculate(AccelData data, ManagedAccel accel)
+ public void Calculate(AccelData data, ManagedAccel accel, DriverSettings settings)
{
ScaleByMouseSettings();
data.Clear();
- Calculate(data.Combined, accel, accel.SensitivityX, MagnitudesCombined);
- Calculate(data.X, accel, accel.SensitivityX, MagnitudesX);
- Calculate(data.Y, accel, accel.SensitivityY, MagnitudesY);
+ Calculate(data.Combined, accel, settings.sensitivity.x, MagnitudesCombined);
+ Calculate(data.X, accel, settings.sensitivity.x, MagnitudesX);
+ Calculate(data.Y, accel, settings.sensitivity.y, MagnitudesY);
}
public static void Calculate(AccelChartData data, ManagedAccel accel, double starter, ICollection<MagnitudeData> magnitudeData)
diff --git a/grapher/Models/Options/AccelOptions.cs b/grapher/Models/Options/AccelOptions.cs
index cd7c4e5..6b98274 100644
--- a/grapher/Models/Options/AccelOptions.cs
+++ b/grapher/Models/Options/AccelOptions.cs
@@ -16,7 +16,6 @@ namespace grapher
public static readonly Dictionary<string, LayoutBase> AccelerationTypes = new List<LayoutBase>
{
- new DefaultLayout(),
new LinearLayout(),
new ClassicLayout(),
new NaturalLayout(),
@@ -37,7 +36,7 @@ namespace grapher
{
AccelDropdown = accelDropdown;
AccelDropdown.Items.Clear();
- AccelDropdown.Items.AddRange(AccelerationTypes.Keys.Skip(1).ToArray());
+ AccelDropdown.Items.AddRange(AccelerationTypes.Keys.ToArray());
AccelDropdown.SelectedIndexChanged += new System.EventHandler(OnIndexChanged);
if (options.Length > PossibleOptionsCount)
@@ -55,7 +54,7 @@ namespace grapher
WriteButton = writeButton;
ActiveValueLabel = activeValueLabel;
- Layout("Default");
+ Layout("Off");
}
public Button WriteButton { get; }
diff --git a/grapher/Models/Serialized/DriverSettings.cs b/grapher/Models/Serialized/DriverSettings.cs
new file mode 100644
index 0000000..91d7e9f
--- /dev/null
+++ b/grapher/Models/Serialized/DriverSettings.cs
@@ -0,0 +1,87 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace grapher.Models.Serialized
+{
+ public enum AccelMode
+ {
+ linear, classic, natural, logarithmic, sigmoid, naturalgain, sigmoidgain, power, noaccel
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct AccelArgs
+ {
+ public double offset;
+ public double accel;
+ public double limit;
+ public double exponent;
+ public double midpoint;
+ public double powerScale;
+ public double powerExponent;
+ public double weight;
+ public double rate;
+ public double scaleCap;
+ public double gainCap;
+ };
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct Vec2 <T>
+ {
+ public T x;
+ public T y;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ [Serializable]
+ public class DriverSettings
+ {
+ private static readonly IntPtr UnmanagedSettingsHandle =
+ Marshal.AllocHGlobal(Marshal.SizeOf<DriverSettings>());
+
+ public double rotation;
+ public bool combineMagnitudes;
+ public Vec2<AccelMode> modes;
+ public Vec2<AccelArgs> args;
+ public Vec2<double> sensitivity;
+ public double minimumTime;
+
+ public static DriverSettings GetActive()
+ {
+ DriverInterop.GetActiveSettings(UnmanagedSettingsHandle);
+ return Marshal.PtrToStructure<DriverSettings>(UnmanagedSettingsHandle);
+ }
+
+ public static void SetActive(DriverSettings settings)
+ {
+ Marshal.StructureToPtr(settings, UnmanagedSettingsHandle, false);
+ DriverInterop.SetActiveSettings(UnmanagedSettingsHandle);
+ }
+
+ public void SendToDriver()
+ {
+ SetActive(this);
+ }
+
+ public void SendToDriverAndUpdate(ManagedAccel accel)
+ {
+ SendToDriver();
+ accel.UpdateFromSettings(UnmanagedSettingsHandle);
+ }
+
+ public bool verify()
+ {
+ /*
+ if (args.accel < 0 || args.rate < 0)
+ bad_arg("accel can not be negative, use a negative weight to compensate");
+ if (args.rate > 1) bad_arg("rate can not be greater than 1");
+ if (args.exponent <= 1) bad_arg("exponent must be greater than 1");
+ if (args.limit <= 1) bad_arg("limit must be greater than 1");
+ if (args.power_scale <= 0) bad_arg("scale must be positive");
+ if (args.power_exp <= 0) bad_arg("exponent must be positive");
+ if (args.midpoint < 0) bad_arg("midpoint must not be negative");
+ if (args.time_min <= 0) bad_arg("min time must be positive");
+ */
+ return true;
+ }
+ }
+}
diff --git a/grapher/Models/Serialized/ModifierArgs.cs b/grapher/Models/Serialized/ModifierArgs.cs
deleted file mode 100644
index 206a3c9..0000000
--- a/grapher/Models/Serialized/ModifierArgs.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-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 21a7f0c..7aed917 100644
--- a/grapher/Models/Serialized/RawAccelSettings.cs
+++ b/grapher/Models/Serialized/RawAccelSettings.cs
@@ -24,17 +24,16 @@ namespace grapher.Models.Serialized
public RawAccelSettings() { }
public RawAccelSettings(
- ManagedAccel managedAccel,
+ DriverSettings accelSettings,
GUISettings guiSettings)
{
- AccelerationSettings = new modifier_args(managedAccel);
+ AccelerationSettings = accelSettings;
GUISettings = guiSettings;
}
-
public GUISettings GUISettings { get; set; }
- public modifier_args AccelerationSettings { get; set; }
+ public DriverSettings AccelerationSettings { get; set; }
public static RawAccelSettings Load()
{
@@ -42,23 +41,19 @@ namespace grapher.Models.Serialized
}
public static RawAccelSettings Load(string file)
- {
- if (!Exists(file))
+ {
+ try
{
- throw new Exception($"Settings file does not exist at {file}");
+ return JsonConvert.DeserializeObject<RawAccelSettings>(File.ReadAllText(file), SerializerSettings);
}
-
- RawAccelSettings deserializedSettings;
- try
+ catch (FileNotFoundException e)
{
- deserializedSettings = JsonConvert.DeserializeObject<RawAccelSettings>(File.ReadAllText(file), SerializerSettings);
+ throw new FileNotFoundException($"Settings file does not exist at {file}", e);
}
- catch(Exception e)
+ catch (JsonSerializationException e)
{
- throw new Exception($"Settings file at {file} does not contain valid Raw Accel Settings.", e);
+ throw new JsonSerializationException($"Settings file at {file} does not contain valid Raw Accel Settings.", e);
}
-
- return deserializedSettings;
}
public static bool Exists()
diff --git a/grapher/Models/Serialized/SettingsManager.cs b/grapher/Models/Serialized/SettingsManager.cs
index 848606d..fc58387 100644
--- a/grapher/Models/Serialized/SettingsManager.cs
+++ b/grapher/Models/Serialized/SettingsManager.cs
@@ -1,9 +1,5 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Runtime.InteropServices;
-using System.Text;
-using System.Threading.Tasks;
+using Newtonsoft.Json;
+using System;
using System.Windows.Forms;
namespace grapher.Models.Serialized
@@ -32,63 +28,38 @@ namespace grapher.Models.Serialized
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)
+ public void UpdateActiveSettings(DriverSettings settings)
{
- ActiveAccel.UpdateAccel(
- mode,
- degrees,
- sensitivityX,
- sensitivityY,
- weightX,
- weightY,
- capX,
- capY,
- offset,
- accel,
- limitOrExp,
- midpoint,
- gainCap);
+ try
+ {
+ settings.SendToDriverAndUpdate(ActiveAccel);
- RawAccelSettings.AccelerationSettings = new modifier_args(ActiveAccel);
- RawAccelSettings.GUISettings = new GUISettings
+ RawAccelSettings.AccelerationSettings = settings;
+ RawAccelSettings.GUISettings = new GUISettings
{
AutoWriteToDriverOnStartup = AutoWriteMenuItem.Checked,
DPI = (int)DpiField.Data,
PollRate = (int)PollRateField.Data
};
- RawAccelSettings.Save();
+ RawAccelSettings.Save();
+ }
+ catch (DriverWriteCDException)
+ {
+ Console.WriteLine("write on cooldown");
+ }
}
- public void UpdateActiveAccelFromFileSettings()
+ public void UpdateActiveAccelFromFileSettings(DriverSettings settings)
{
- 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);
+ try
+ {
+ settings.SendToDriverAndUpdate(ActiveAccel);
+ }
+ catch (DriverWriteCDException)
+ {
+ Console.WriteLine("write on cd during file init");
+ }
DpiField.SetToEntered(RawAccelSettings.GUISettings.DPI);
PollRateField.SetToEntered(RawAccelSettings.GUISettings.PollRate);
AutoWriteMenuItem.Checked = RawAccelSettings.GUISettings.AutoWriteToDriverOnStartup;
@@ -96,28 +67,32 @@ namespace grapher.Models.Serialized
public void Startup()
{
- ActiveAccel.ReadFromDriver();
-
- if(RawAccelSettings.Exists())
+ if (RawAccelSettings.Exists())
{
- RawAccelSettings = RawAccelSettings.Load();
- if (RawAccelSettings.GUISettings.AutoWriteToDriverOnStartup)
+ try
{
- UpdateActiveAccelFromFileSettings();
- }
- }
- else
- {
- RawAccelSettings = new RawAccelSettings(
- ActiveAccel,
- new GUISettings
+ RawAccelSettings = RawAccelSettings.Load();
+ if (RawAccelSettings.GUISettings.AutoWriteToDriverOnStartup)
{
- AutoWriteToDriverOnStartup = AutoWriteMenuItem.Checked,
- DPI = (int)DpiField.Data,
- PollRate = (int)PollRateField.Data
- });
- RawAccelSettings.Save();
+ UpdateActiveAccelFromFileSettings(RawAccelSettings.AccelerationSettings);
+ }
+ return;
+ }
+ catch (JsonSerializationException e)
+ {
+ Console.WriteLine($"bad settings: {e}");
+ }
}
+
+ RawAccelSettings = new RawAccelSettings(
+ DriverSettings.GetActive(),
+ new GUISettings
+ {
+ AutoWriteToDriverOnStartup = AutoWriteMenuItem.Checked,
+ DPI = (int)DpiField.Data,
+ PollRate = (int)PollRateField.Data
+ });
+ RawAccelSettings.Save();
}
}
}