From ecd36237e7897a4423276e2ffcc866adcd41dce0 Mon Sep 17 00:00:00 2001 From: Travis Nickles Date: Wed, 22 Mar 2017 21:45:20 -0700 Subject: [PATCH] Fixed issue with sleep being invoked too often Supposedly the code was needed to help reset the color of the lightbar. It doesn't seem like it is really needed though. Keep an eye on this. --- DS4Windows/DS4Control/DS4LightBar.cs | 10 +++++--- DS4Windows/DS4Control/ScpUtil.cs | 38 +++++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/DS4Windows/DS4Control/DS4LightBar.cs b/DS4Windows/DS4Control/DS4LightBar.cs index 98483a3..981837b 100644 --- a/DS4Windows/DS4Control/DS4LightBar.cs +++ b/DS4Windows/DS4Control/DS4LightBar.cs @@ -155,7 +155,8 @@ namespace DS4Windows else color = new DS4Color(0, 0, 0); } - bool distanceprofile = (ProfilePath[deviceNum].ToLower().Contains("distance") || tempprofilename[deviceNum].ToLower().Contains("distance")); + bool distanceprofile = DistanceProfiles[deviceNum] || tempprofileDistance[deviceNum]; + //distanceprofile = (ProfilePath[deviceNum].ToLower().Contains("distance") || tempprofilename[deviceNum].ToLower().Contains("distance")); if (distanceprofile && !defualtLight) { //Thing I did for Distance float rumble = device.LeftHeavySlowRumble / 2.55f; @@ -202,8 +203,11 @@ namespace DS4Windows } if (device.LightBarOnDuration != haptics.LightBarFlashDurationOn && device.LightBarOnDuration != 1 && haptics.LightBarFlashDurationOn == 0) haptics.LightBarFlashDurationOff = haptics.LightBarFlashDurationOn = 1; - if (device.LightBarOnDuration == 1) //helps better reset the color - System.Threading.Thread.Sleep(5); + + // Comment out code for now. This condition gets hit too often and bogs down the GUI + //if (device.LightBarOnDuration == 1) //helps better reset the color + // System.Threading.Thread.Sleep(5); + device.pushHapticState(haptics); } diff --git a/DS4Windows/DS4Control/ScpUtil.cs b/DS4Windows/DS4Control/ScpUtil.cs index b585ded..1b54c39 100644 --- a/DS4Windows/DS4Control/ScpUtil.cs +++ b/DS4Windows/DS4Control/ScpUtil.cs @@ -143,6 +143,7 @@ namespace DS4Windows static string exepath = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName; public static string appdatapath; public static string[] tempprofilename = new string[5] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; + public static bool[] tempprofileDistance = new bool[5] { false, false, false, false, false }; public static void SaveWhere(string path) { @@ -319,6 +320,7 @@ namespace DS4Windows public static bool[] MouseAccel => m_Config.mouseAccel; public static string[] LaunchProgram => m_Config.launchProgram; public static string[] ProfilePath => m_Config.profilePath; + public static bool[] DistanceProfiles => m_Config.distanceProfiles; public static List[] ProfileActions => m_Config.profileActions; public static void UpdateDS4CSetting (int deviceNum, string buttonName, bool shift, object action, string exts, DS4KeyType kt, int trigger = 0) @@ -410,12 +412,14 @@ namespace DS4Windows { m_Config.LoadProfile(device, launchprogram, control); tempprofilename[device] = string.Empty; + tempprofileDistance[device] = false; } public static void LoadTempProfile(int device, string name, bool launchprogram, ControlService control) { m_Config.LoadProfile(device, launchprogram, control, appdatapath + @"\Profiles\" + name + ".xml"); tempprofilename[device] = name; + tempprofileDistance[device] = name.ToLower().Contains("distance"); } public static bool Save() @@ -512,6 +516,8 @@ namespace DS4Windows public Boolean[] ledAsBattery = { false, false, false, false, false }; public Byte[] flashType = { 0, 0, 0, 0, 0 }; public String[] profilePath = { String.Empty, String.Empty, String.Empty, String.Empty, String.Empty }; + // Cache properties instead of performing a string comparison every frame + public bool[] distanceProfiles = { false, false, false, false, false }; public Byte[] rumble = { 100, 100, 100, 100, 100 }; public Byte[] touchSensitivity = { 100, 100, 100, 100, 100 }; public Byte[] l2Deadzone = { 0, 0, 0, 0, 0 }, r2Deadzone = { 0, 0, 0, 0, 0 }; @@ -1784,13 +1790,37 @@ namespace DS4Windows catch { missingSetting = true; } try { Item = m_Xdoc.SelectSingleNode("/Profile/formHeight"); Int32.TryParse(Item.InnerText, out formHeight); } catch { missingSetting = true; } - try { Item = m_Xdoc.SelectSingleNode("/Profile/Controller1"); profilePath[0] = Item.InnerText; } + try { + Item = m_Xdoc.SelectSingleNode("/Profile/Controller1"); profilePath[0] = Item.InnerText; + if (profilePath[0].ToLower().Contains("distance")) + { + distanceProfiles[0] = true; + } + } catch { missingSetting = true; } - try { Item = m_Xdoc.SelectSingleNode("/Profile/Controller2"); profilePath[1] = Item.InnerText; } + try { + Item = m_Xdoc.SelectSingleNode("/Profile/Controller2"); profilePath[1] = Item.InnerText; + if (profilePath[1].ToLower().Contains("distance")) + { + distanceProfiles[1] = true; + } + } catch { missingSetting = true; } - try { Item = m_Xdoc.SelectSingleNode("/Profile/Controller3"); profilePath[2] = Item.InnerText; } + try { + Item = m_Xdoc.SelectSingleNode("/Profile/Controller3"); profilePath[2] = Item.InnerText; + if (profilePath[2].ToLower().Contains("distance")) + { + distanceProfiles[2] = true; + } + } catch { missingSetting = true; } - try { Item = m_Xdoc.SelectSingleNode("/Profile/Controller4"); profilePath[3] = Item.InnerText; } + try { + Item = m_Xdoc.SelectSingleNode("/Profile/Controller4"); profilePath[3] = Item.InnerText; + if (profilePath[3].ToLower().Contains("distance")) + { + distanceProfiles[3] = true; + } + } catch { missingSetting = true; } try { Item = m_Xdoc.SelectSingleNode("/Profile/LastChecked"); DateTime.TryParse(Item.InnerText, out lastChecked); } catch { missingSetting = true; }