summaryrefslogtreecommitdiff
path: root/grapher/Models/Serialized
diff options
context:
space:
mode:
authora1xd <[email protected]>2020-09-01 22:28:45 -0400
committera1xd <[email protected]>2020-09-01 22:28:45 -0400
commit7ff79f4e711c2d55daf667092cfce0289b1a7a9b (patch)
tree28ebe356b2954911c2bbb4f09ac5ddee12578b31 /grapher/Models/Serialized
parentMerge pull request #17 from a1xd/indep (diff)
downloadrawaccel-7ff79f4e711c2d55daf667092cfce0289b1a7a9b.tar.xz
rawaccel-7ff79f4e711c2d55daf667092cfce0289b1a7a9b.zip
add 1s write delay to driver
Diffstat (limited to 'grapher/Models/Serialized')
-rw-r--r--grapher/Models/Serialized/DriverSettings.cs29
-rw-r--r--grapher/Models/Serialized/SettingsManager.cs24
2 files changed, 28 insertions, 25 deletions
diff --git a/grapher/Models/Serialized/DriverSettings.cs b/grapher/Models/Serialized/DriverSettings.cs
index 91d7e9f..4595bf2 100644
--- a/grapher/Models/Serialized/DriverSettings.cs
+++ b/grapher/Models/Serialized/DriverSettings.cs
@@ -1,5 +1,6 @@
using System;
using System.Runtime.InteropServices;
+using System.Threading;
namespace grapher.Models.Serialized
{
@@ -37,6 +38,7 @@ namespace grapher.Models.Serialized
{
private static readonly IntPtr UnmanagedSettingsHandle =
Marshal.AllocHGlobal(Marshal.SizeOf<DriverSettings>());
+ private static object UnmanagedSettingsLock = new object();
public double rotation;
public bool combineMagnitudes;
@@ -51,21 +53,32 @@ namespace grapher.Models.Serialized
return Marshal.PtrToStructure<DriverSettings>(UnmanagedSettingsHandle);
}
- public static void SetActive(DriverSettings settings)
+ public static void SetActive(DriverSettings settings, Action<IntPtr> unmanagedActionBefore = null)
{
- Marshal.StructureToPtr(settings, UnmanagedSettingsHandle, false);
- DriverInterop.SetActiveSettings(UnmanagedSettingsHandle);
+ new Thread(() =>
+ {
+ lock (UnmanagedSettingsLock)
+ {
+ Marshal.StructureToPtr(settings, UnmanagedSettingsHandle, false);
+ unmanagedActionBefore?.Invoke(UnmanagedSettingsHandle);
+ DriverInterop.SetActiveSettings(UnmanagedSettingsHandle);
+ }
+ }).Start();
+
}
- public void SendToDriver()
+ public void SendToDriver(Action<IntPtr> unmanagedActionBefore = null)
{
- SetActive(this);
+ SetActive(this, unmanagedActionBefore);
}
- public void SendToDriverAndUpdate(ManagedAccel accel)
+ public void SendToDriverAndUpdate(ManagedAccel accel, Action betweenAccelAndWrite = null)
{
- SendToDriver();
- accel.UpdateFromSettings(UnmanagedSettingsHandle);
+ SendToDriver(settingsHandle =>
+ {
+ accel.UpdateFromSettings(settingsHandle);
+ betweenAccelAndWrite?.Invoke();
+ });
}
public bool verify()
diff --git a/grapher/Models/Serialized/SettingsManager.cs b/grapher/Models/Serialized/SettingsManager.cs
index fc58387..c300bde 100644
--- a/grapher/Models/Serialized/SettingsManager.cs
+++ b/grapher/Models/Serialized/SettingsManager.cs
@@ -28,12 +28,10 @@ namespace grapher.Models.Serialized
private ToolStripMenuItem AutoWriteMenuItem { get; set; }
- public void UpdateActiveSettings(DriverSettings settings)
+ public void UpdateActiveSettings(DriverSettings settings, Action afterAccelSettingsUpdate = null)
{
- try
+ settings.SendToDriverAndUpdate(ActiveAccel, () =>
{
- settings.SendToDriverAndUpdate(ActiveAccel);
-
RawAccelSettings.AccelerationSettings = settings;
RawAccelSettings.GUISettings = new GUISettings
{
@@ -43,23 +41,15 @@ namespace grapher.Models.Serialized
};
RawAccelSettings.Save();
- }
- catch (DriverWriteCDException)
- {
- Console.WriteLine("write on cooldown");
- }
+
+ afterAccelSettingsUpdate?.Invoke();
+ });
}
public void UpdateActiveAccelFromFileSettings(DriverSettings settings)
{
- try
- {
- settings.SendToDriverAndUpdate(ActiveAccel);
- }
- catch (DriverWriteCDException)
- {
- Console.WriteLine("write on cd during file init");
- }
+ settings.SendToDriverAndUpdate(ActiveAccel);
+
DpiField.SetToEntered(RawAccelSettings.GUISettings.DPI);
PollRateField.SetToEntered(RawAccelSettings.GUISettings.PollRate);
AutoWriteMenuItem.Checked = RawAccelSettings.GUISettings.AutoWriteToDriverOnStartup;