From 45baa6360f2a14db0ce79b193b6b6cd7494bc3dd Mon Sep 17 00:00:00 2001 From: David Khachaturov Date: Fri, 3 Apr 2020 09:19:54 +0100 Subject: [PATCH] - Fixed USB high CPU usage (d'oh!) - Another attempt at fixing USB lag - Moved to WindowsInput for mouse movement - Linked "Capture" button to Print Screen --- .../.nuget/mouse-keyboard-hook-logo.png | Bin 0 -> 12301 bytes BetterJoyForCemu/BetterJoyForCemu.csproj | 8 +++- BetterJoyForCemu/Joycon.cs | 35 ++++++++++-------- BetterJoyForCemu/Program.cs | 7 +++- BetterJoyForCemu/packages.config | 1 + 5 files changed, 32 insertions(+), 19 deletions(-) create mode 100644 BetterJoyForCemu/.nuget/mouse-keyboard-hook-logo.png diff --git a/BetterJoyForCemu/.nuget/mouse-keyboard-hook-logo.png b/BetterJoyForCemu/.nuget/mouse-keyboard-hook-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a3c31cf111f8687bb469a6b431104cf5cb4b3bd4 GIT binary patch literal 12301 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 literal 0 HcmV?d00001 diff --git a/BetterJoyForCemu/BetterJoyForCemu.csproj b/BetterJoyForCemu/BetterJoyForCemu.csproj index 3e4b36a..318e76c 100644 --- a/BetterJoyForCemu/BetterJoyForCemu.csproj +++ b/BetterJoyForCemu/BetterJoyForCemu.csproj @@ -143,6 +143,9 @@ + + ..\packages\WindowsInput.6.1.1\lib\net461\WindowsInput.dll + @@ -170,10 +173,13 @@ - + + Designer + + diff --git a/BetterJoyForCemu/Joycon.cs b/BetterJoyForCemu/Joycon.cs index bf458c5..b02ad7c 100644 --- a/BetterJoyForCemu/Joycon.cs +++ b/BetterJoyForCemu/Joycon.cs @@ -13,6 +13,7 @@ using Nefarius.ViGEm.Client.Targets; using Nefarius.ViGEm.Client.Targets.Xbox360; using System.Runtime.InteropServices; using System.Windows.Forms; +using WindowsInput; namespace BetterJoyForCemu { // For mouse movement @@ -364,7 +365,7 @@ namespace BetterJoyForCemu { HIDapi.hid_write(handle, a, new UIntPtr(2)); a[0] = 0x80; a[1] = 0x4; // Prevent HID timeout - HIDapi.hid_write(handle, a, new UIntPtr(2)); + HIDapi.hid_write(handle, a, new UIntPtr(2)); // doesn't actually prevent timout... dump_calibration_data(); } @@ -383,6 +384,10 @@ namespace BetterJoyForCemu { HIDapi.hid_set_nonblocking(handle, 1); + // send ping to USB to not time out instantly + if (isUSB) + SendRumble(rumble_obj.GetData()); + return 0; } @@ -499,23 +504,24 @@ namespace BetterJoyForCemu { xin.SendReport(report); } + // Link capture button to print screen + if (buttons[(int)Button.CAPTURE]) + WindowsInput.Simulate.Events().Click(WindowsInput.Events.KeyCode.PrintScreen).Invoke(); + if (extraGyroFeature == "joy") { // TODO } else if (extraGyroFeature == "mouse" && (isPro || (other == null) || (other != null && (Boolean.Parse(ConfigurationManager.AppSettings["GyroMouseLeftHanded"]) ? isLeft : !isLeft)))) { - Win32.POINT p; - Win32.GetCursorPos(out p); - float dt = 0.015f; // 15ms // gyro data is in degrees/s int dx = (int)(GyroMouseSensitivity * (gyr_g.Z * dt) * (Math.Abs(gyr_g.Z) < 1 ? 0 : 1)); int dy = (int)-(GyroMouseSensitivity * (gyr_g.Y * dt) * (Math.Abs(gyr_g.Y) < 1 ? 0 : 1)); - Win32.SetCursorPos(p.x + dx, p.y + dy); + WindowsInput.Simulate.Events().MoveBy(dx, dy).Invoke(); // reset mouse position to centre of primary monitor - if (buttons[(int) Button.STICK] || buttons[(int) Button.STICK2]) - Win32.SetCursorPos(Screen.PrimaryScreen.Bounds.Width / 2, Screen.PrimaryScreen.Bounds.Height / 2); + if (buttons[(int)Button.STICK] || buttons[(int)Button.STICK2]) + WindowsInput.Simulate.Events().MoveTo(Screen.PrimaryScreen.Bounds.Width / 2, Screen.PrimaryScreen.Bounds.Height / 2).Invoke(); } if (ts_en == raw_buf[1] && !isSnes) { @@ -535,21 +541,18 @@ namespace BetterJoyForCemu { Stopwatch watch = new Stopwatch(); watch.Start(); while (!stop_polling & state > state_.NO_JOYCONS) { - if (!isSnes && (isUSB || rumble_obj.t > 0)) + if (!isSnes && (rumble_obj.t > 0)) SendRumble(rumble_obj.GetData()); - else if (watch.ElapsedMilliseconds >= 1000) { - // Send a no-op operation as heartbeat to keep connection alive. - // Do not send this too frequently, otherwise I/O would be too heavy and cause lag. - // Needed for both BLUETOOTH and USB to not time out. Never remove pls - //SendRumble(rumble_obj.GetData()); - // TODO: Investigate if this really is safe to remove now? - watch.Restart(); - } + int a = ReceiveRaw(); if (a > 0) { state = state_.IMU_DATA_OK; attempts = 0; + + // Needed for USB to not time out; I think USB requires a reply message after every packet sent + if (isUSB) + SendRumble(rumble_obj.GetData()); } else if (attempts > 240) { state = state_.DROPPED; form.AppendTextBox("Dropped.\r\n"); diff --git a/BetterJoyForCemu/Program.cs b/BetterJoyForCemu/Program.cs index 3558899..817f891 100644 --- a/BetterJoyForCemu/Program.cs +++ b/BetterJoyForCemu/Program.cs @@ -53,7 +53,7 @@ namespace BetterJoyForCemu { } public void Start() { - controllerCheck = new System.Timers.Timer(5000); // check for new controllers every 5 seconds + controllerCheck = new System.Timers.Timer(2000); // check for new controllers every 2 seconds controllerCheck.Elapsed += CheckForNewControllersTime; controllerCheck.Start(); } @@ -113,8 +113,11 @@ namespace BetterJoyForCemu { while (ptr != IntPtr.Zero) { enumerate = (hid_device_info)Marshal.PtrToStructure(ptr, typeof(hid_device_info)); - if (enumerate.serial_number == null) + if (enumerate.serial_number == null) { + ptr = enumerate.next; // can't believe it took me this long to figure out why USB connections used up so much CPU. + // it was getting stuck in an inf loop here! continue; + } if (form.nonOriginal) { enumerate.product_id = product_pro; diff --git a/BetterJoyForCemu/packages.config b/BetterJoyForCemu/packages.config index b62b781..fbb587f 100644 --- a/BetterJoyForCemu/packages.config +++ b/BetterJoyForCemu/packages.config @@ -5,4 +5,5 @@ + \ No newline at end of file