Tweaks to improve hotplug detection

Check status of first output report before adding
device to the list
This commit is contained in:
Travis Nickles 2018-03-25 23:36:46 -05:00
parent 981e7afc22
commit a1d0836091
3 changed files with 16 additions and 12 deletions

View File

@ -235,7 +235,7 @@ namespace DS4Windows
public static string appDataPpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\DS4Windows"; public static string appDataPpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\DS4Windows";
public static string oldappdatapath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\DS4Tool"; public static string oldappdatapath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\DS4Tool";
public static bool runHotPlug = false; public static bool runHotPlug = false;
public const int XINPUT_UNPLUG_SETTLE_TIME = 500; // Inhibit races that occur with the asynchronous teardown of ScpVBus -> X360 driver instance. public const int XINPUT_UNPLUG_SETTLE_TIME = 250; // Inhibit races that occur with the asynchronous teardown of ScpVBus -> X360 driver instance.
public static string[] tempprofilename = new string[5] { string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }; 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 bool[] tempprofileDistance = new bool[5] { false, false, false, false, false };
public static bool[] useDInputOnly = new bool[5] { true, true, true, true, true }; public static bool[] useDInputOnly = new bool[5] { true, true, true, true, true };

View File

@ -156,6 +156,7 @@ namespace DS4Windows
} }
private bool exitOutputThread = false; private bool exitOutputThread = false;
public bool ExitOutputThread => exitOutputThread;
private bool exitInputThread = false; private bool exitInputThread = false;
private object exitLocker = new object(); private object exitLocker = new object();
@ -449,6 +450,13 @@ namespace DS4Windows
sixAxis = new DS4SixAxis(); sixAxis = new DS4SixAxis();
Crc32Algorithm.InitializeTable(DefaultPolynomial); Crc32Algorithm.InitializeTable(DefaultPolynomial);
refreshCalibration(); refreshCalibration();
if (!hDevice.IsFileStreamOpen())
{
hDevice.OpenFileStream(inputReport.Length);
}
sendOutputReport(true); // initialize the output report
} }
private void timeoutTestThread() private void timeoutTestThread()
@ -513,14 +521,6 @@ namespace DS4Windows
{ {
if (ds4Input == null) if (ds4Input == null)
{ {
if (!hDevice.IsFileStreamOpen())
{
hDevice.OpenFileStream(inputReport.Length);
}
//Console.WriteLine(MacAddress.ToString() + " " + System.DateTime.UtcNow.ToString("o") + "> start");
sendOutputReport(true); // initialize the output report
ds4Output = new Thread(performDs4Output); ds4Output = new Thread(performDs4Output);
ds4Output.Priority = ThreadPriority.AboveNormal; ds4Output.Priority = ThreadPriority.AboveNormal;
ds4Output.Name = "DS4 Output thread: " + Mac; ds4Output.Name = "DS4 Output thread: " + Mac;
@ -1195,6 +1195,7 @@ namespace DS4Windows
if (quitOutputThread) if (quitOutputThread)
{ {
StopOutputUpdate(); StopOutputUpdate();
exitOutputThread = true;
} }
} }

View File

@ -143,6 +143,8 @@ namespace DS4Windows
{ {
DS4Device ds4Device = new DS4Device(hDevice); DS4Device ds4Device = new DS4Device(hDevice);
//ds4Device.Removal += On_Removal; //ds4Device.Removal += On_Removal;
if (!ds4Device.ExitOutputThread)
{
Devices.Add(hDevice.DevicePath, ds4Device); Devices.Add(hDevice.DevicePath, ds4Device);
DevicePaths.Add(hDevice.DevicePath); DevicePaths.Add(hDevice.DevicePath);
deviceSerials.Add(serial); deviceSerials.Add(serial);
@ -151,6 +153,7 @@ namespace DS4Windows
} }
} }
} }
}
// Returns DS4 controllers that were found and are running // Returns DS4 controllers that were found and are running
public static IEnumerable<DS4Device> getDS4Controllers() public static IEnumerable<DS4Device> getDS4Controllers()