diff options
| author | a1xd <[email protected]> | 2020-09-01 22:28:45 -0400 |
|---|---|---|
| committer | a1xd <[email protected]> | 2020-09-01 22:28:45 -0400 |
| commit | 7ff79f4e711c2d55daf667092cfce0289b1a7a9b (patch) | |
| tree | 28ebe356b2954911c2bbb4f09ac5ddee12578b31 /grapher/Models/Serialized | |
| parent | Merge pull request #17 from a1xd/indep (diff) | |
| download | rawaccel-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.cs | 29 | ||||
| -rw-r--r-- | grapher/Models/Serialized/SettingsManager.cs | 24 |
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; |