mirror of
https://github.com/cemu-project/DS4Windows.git
synced 2024-11-23 01:39:17 +01:00
Test hotplug changes. Change mouse remainder cutoff
This commit is contained in:
parent
7bf43f93f5
commit
2cf33e1bba
@ -131,6 +131,7 @@ namespace DS4Windows
|
|||||||
|
|
||||||
WarnExclusiveModeFailure(device);
|
WarnExclusiveModeFailure(device);
|
||||||
DS4Controllers[i] = device;
|
DS4Controllers[i] = device;
|
||||||
|
device.setUiContext(SynchronizationContext.Current);
|
||||||
device.Removal += this.On_DS4Removal;
|
device.Removal += this.On_DS4Removal;
|
||||||
device.Removal += DS4Devices.On_Removal;
|
device.Removal += DS4Devices.On_Removal;
|
||||||
device.SyncChange += DS4Devices.UpdateSerial;
|
device.SyncChange += DS4Devices.UpdateSerial;
|
||||||
@ -270,29 +271,10 @@ namespace DS4Windows
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool HotPlug()
|
public bool HotPlug(SynchronizationContext uiContext)
|
||||||
{
|
{
|
||||||
if (running)
|
if (running)
|
||||||
{
|
{
|
||||||
// Do first run check for Quick Charge checks. Needed so old device will
|
|
||||||
// be removed before performing another controller scan
|
|
||||||
/*if (getQuickCharge())
|
|
||||||
{
|
|
||||||
for (int i = 0, devlen = DS4Controllers.Length; i < devlen; i++)
|
|
||||||
{
|
|
||||||
DS4Device device = DS4Controllers[i];
|
|
||||||
if (device != null)
|
|
||||||
{
|
|
||||||
if (device.getConnectionType() == ConnectionType.BT && device.isCharging())
|
|
||||||
{
|
|
||||||
device.StopUpdate();
|
|
||||||
device.DisconnectBT(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
DS4Devices.findControllers();
|
DS4Devices.findControllers();
|
||||||
IEnumerable<DS4Device> devices = DS4Devices.getDS4Controllers();
|
IEnumerable<DS4Device> devices = DS4Devices.getDS4Controllers();
|
||||||
//foreach (DS4Device device in devices)
|
//foreach (DS4Device device in devices)
|
||||||
@ -325,6 +307,7 @@ namespace DS4Windows
|
|||||||
LogDebug(Properties.Resources.FoundController + device.getMacAddress() + " (" + device.getConnectionType() + ")");
|
LogDebug(Properties.Resources.FoundController + device.getMacAddress() + " (" + device.getConnectionType() + ")");
|
||||||
WarnExclusiveModeFailure(device);
|
WarnExclusiveModeFailure(device);
|
||||||
DS4Controllers[Index] = device;
|
DS4Controllers[Index] = device;
|
||||||
|
device.setUiContext(uiContext);
|
||||||
device.Removal += this.On_DS4Removal;
|
device.Removal += this.On_DS4Removal;
|
||||||
device.Removal += DS4Devices.On_Removal;
|
device.Removal += DS4Devices.On_Removal;
|
||||||
device.SyncChange += DS4Devices.UpdateSerial;
|
device.SyncChange += DS4Devices.UpdateSerial;
|
||||||
|
@ -2537,7 +2537,9 @@ namespace DS4Windows
|
|||||||
horizontalRemainder = 0.0;
|
horizontalRemainder = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
double mouseXTemp = rawMouseX - (Math.IEEERemainder(rawMouseX * 1000.0, 1.0) / 1000.0);
|
//double mouseXTemp = rawMouseX - (Math.IEEERemainder(rawMouseX * 1000.0, 1.0) / 1000.0);
|
||||||
|
double mouseXTemp = rawMouseX - (remainderCutoff(rawMouseX * 1000.0, 1.0) / 1000.0);
|
||||||
|
//double mouseXTemp = rawMouseX - (rawMouseX * 1000.0 - (1.0 * (int)(rawMouseX * 1000.0 / 1.0)));
|
||||||
mouseX = (int)mouseXTemp;
|
mouseX = (int)mouseXTemp;
|
||||||
horizontalRemainder = mouseXTemp - mouseX;
|
horizontalRemainder = mouseXTemp - mouseX;
|
||||||
//mouseX = (int)rawMouseX;
|
//mouseX = (int)rawMouseX;
|
||||||
@ -2552,13 +2554,19 @@ namespace DS4Windows
|
|||||||
verticalRemainder = 0.0;
|
verticalRemainder = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
double mouseYTemp = rawMouseY - (Math.IEEERemainder(rawMouseY * 1000.0, 1.0) / 1000.0);
|
//double mouseYTemp = rawMouseY - (Math.IEEERemainder(rawMouseY * 1000.0, 1.0) / 1000.0);
|
||||||
|
double mouseYTemp = rawMouseY - (remainderCutoff(rawMouseY * 1000.0, 1.0) / 1000.0);
|
||||||
mouseY = (int)mouseYTemp;
|
mouseY = (int)mouseYTemp;
|
||||||
verticalRemainder = mouseYTemp - mouseY;
|
verticalRemainder = mouseYTemp - mouseY;
|
||||||
//mouseY = (int)rawMouseY;
|
//mouseY = (int)rawMouseY;
|
||||||
//verticalRemainder = rawMouseY - mouseY;
|
//verticalRemainder = rawMouseY - mouseY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static double remainderCutoff(double dividend, double divisor)
|
||||||
|
{
|
||||||
|
return dividend - (divisor * (int)(dividend / divisor));
|
||||||
|
}
|
||||||
|
|
||||||
public static bool compare(byte b1, byte b2)
|
public static bool compare(byte b1, byte b2)
|
||||||
{
|
{
|
||||||
bool result = true;
|
bool result = true;
|
||||||
|
@ -1005,7 +1005,9 @@ namespace DS4Windows
|
|||||||
lbLastMessage.Text = string.Empty;
|
lbLastMessage.Text = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool inHotPlug = false;
|
private bool inHotPlug = false;
|
||||||
|
private int hotplugCounter = 0;
|
||||||
|
private object hotplugCounterLock = new object();
|
||||||
protected override void WndProc(ref Message m)
|
protected override void WndProc(ref Message m)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -1015,7 +1017,15 @@ namespace DS4Windows
|
|||||||
if (runHotPlug)
|
if (runHotPlug)
|
||||||
{
|
{
|
||||||
Int32 Type = m.WParam.ToInt32();
|
Int32 Type = m.WParam.ToInt32();
|
||||||
InnerHotplug2();
|
lock (hotplugCounterLock)
|
||||||
|
{
|
||||||
|
hotplugCounter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!inHotPlug)
|
||||||
|
{
|
||||||
|
InnerHotplug2();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1031,17 +1041,35 @@ namespace DS4Windows
|
|||||||
|
|
||||||
protected async void InnerHotplug2()
|
protected async void InnerHotplug2()
|
||||||
{
|
{
|
||||||
await System.Threading.Tasks.Task.Delay(50);
|
//await System.Threading.Tasks.Task.Delay(50);
|
||||||
|
|
||||||
if (inHotPlug)
|
/*if (inHotPlug)
|
||||||
{
|
{
|
||||||
await System.Threading.Tasks.Task.Run(() => { while (inHotPlug) { System.Threading.Thread.Sleep(50); } });
|
await System.Threading.Tasks.Task.Run(() => { while (inHotPlug) { System.Threading.Thread.Sleep(50); } });
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
lock (this)
|
//lock (this)
|
||||||
{
|
{
|
||||||
inHotPlug = true;
|
inHotPlug = true;
|
||||||
Program.rootHub.HotPlug();
|
System.Threading.SynchronizationContext uiContext = System.Threading.SynchronizationContext.Current;
|
||||||
|
int tempCount = 0;
|
||||||
|
lock (hotplugCounterLock)
|
||||||
|
{
|
||||||
|
tempCount = hotplugCounter;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (tempCount > 0)
|
||||||
|
{
|
||||||
|
await System.Threading.Tasks.Task.Run(() => { Program.rootHub.HotPlug(uiContext); });
|
||||||
|
lock (hotplugCounterLock)
|
||||||
|
{
|
||||||
|
hotplugCounter--;
|
||||||
|
tempCount = hotplugCounter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Program.rootHub.HotPlug();
|
||||||
inHotPlug = false;
|
inHotPlug = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -164,6 +164,7 @@ namespace DS4Windows
|
|||||||
public event EventHandler<EventArgs> Removal = null;
|
public event EventHandler<EventArgs> Removal = null;
|
||||||
public event EventHandler<EventArgs> SyncChange = null;
|
public event EventHandler<EventArgs> SyncChange = null;
|
||||||
public event EventHandler<EventArgs> SerialChange = null;
|
public event EventHandler<EventArgs> SerialChange = null;
|
||||||
|
public event EventHandler<EventArgs> PublishRemoval = null;
|
||||||
|
|
||||||
public HidDevice HidDevice => hDevice;
|
public HidDevice HidDevice => hDevice;
|
||||||
public bool IsExclusive => HidDevice.IsExclusive;
|
public bool IsExclusive => HidDevice.IsExclusive;
|
||||||
@ -388,6 +389,10 @@ namespace DS4Windows
|
|||||||
{
|
{
|
||||||
return uiContext;
|
return uiContext;
|
||||||
}
|
}
|
||||||
|
public void setUiContext(SynchronizationContext uiContext)
|
||||||
|
{
|
||||||
|
this.uiContext = uiContext;
|
||||||
|
}
|
||||||
|
|
||||||
private Queue<Action> eventQueue = new Queue<Action>();
|
private Queue<Action> eventQueue = new Queue<Action>();
|
||||||
private object eventQueueLock = new object();
|
private object eventQueueLock = new object();
|
||||||
@ -432,7 +437,6 @@ namespace DS4Windows
|
|||||||
|
|
||||||
touchpad = new DS4Touchpad();
|
touchpad = new DS4Touchpad();
|
||||||
sixAxis = new DS4SixAxis();
|
sixAxis = new DS4SixAxis();
|
||||||
uiContext = SynchronizationContext.Current;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void timeoutTestThread()
|
private void timeoutTestThread()
|
||||||
@ -699,6 +703,9 @@ namespace DS4Windows
|
|||||||
Removal?.Invoke(this, EventArgs.Empty);
|
Removal?.Invoke(this, EventArgs.Empty);
|
||||||
}), null);
|
}), null);
|
||||||
|
|
||||||
|
//System.Threading.Tasks.Task.Factory.StartNew(() => { Removal?.Invoke(this, EventArgs.Empty); });
|
||||||
|
//Removal?.Invoke(this, EventArgs.Empty);
|
||||||
|
|
||||||
timeoutExecuted = true;
|
timeoutExecuted = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -730,6 +737,9 @@ namespace DS4Windows
|
|||||||
Removal?.Invoke(this, EventArgs.Empty);
|
Removal?.Invoke(this, EventArgs.Empty);
|
||||||
}), null);
|
}), null);
|
||||||
|
|
||||||
|
//System.Threading.Tasks.Task.Factory.StartNew(() => { Removal?.Invoke(this, EventArgs.Empty); });
|
||||||
|
//Removal?.Invoke(this, EventArgs.Empty);
|
||||||
|
|
||||||
timeoutExecuted = true;
|
timeoutExecuted = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1089,6 +1099,8 @@ namespace DS4Windows
|
|||||||
{
|
{
|
||||||
Removal?.Invoke(this, EventArgs.Empty);
|
Removal?.Invoke(this, EventArgs.Empty);
|
||||||
}), null);
|
}), null);
|
||||||
|
|
||||||
|
//System.Threading.Tasks.Task.Factory.StartNew(() => { Removal?.Invoke(this, EventArgs.Empty); });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1120,6 +1132,9 @@ namespace DS4Windows
|
|||||||
{
|
{
|
||||||
Removal?.Invoke(this, EventArgs.Empty);
|
Removal?.Invoke(this, EventArgs.Empty);
|
||||||
}), null);
|
}), null);
|
||||||
|
|
||||||
|
//System.Threading.Tasks.Task.Factory.StartNew(() => { Removal?.Invoke(this, EventArgs.Empty); });
|
||||||
|
//Removal?.Invoke(this, EventArgs.Empty);
|
||||||
}
|
}
|
||||||
else if (result && !remove)
|
else if (result && !remove)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user