Migrated Aura & XGM communication to HidSharp library to speed things up (#1594)

* Cleanup

* Touchpad toggle fix for FA507 https://github.com/seerge/g-helper/issues/1589

* Cleanup
This commit is contained in:
Serge
2023-11-12 22:28:37 +01:00
committed by GitHub
parent dd52f8039c
commit 5c4500315c
15 changed files with 716 additions and 735 deletions

View File

@@ -1,6 +1,7 @@
using GHelper.Display;
using GHelper.Helpers;
using GHelper.Mode;
using GHelper.USB;
using Microsoft.Win32;
using System.Diagnostics;
using System.Management;
@@ -59,7 +60,7 @@ namespace GHelper.Input
if (backlightActivity && iddle.TotalSeconds > kb_timeout)
{
backlightActivity = false;
AsusUSB.ApplyBrightness(0, "Timeout");
Aura.ApplyBrightness(0, "Timeout");
}
if (!backlightActivity && iddle.TotalSeconds < kb_timeout)
@@ -302,10 +303,10 @@ namespace GHelper.Input
KeyboardHook.KeyKeyPress(Keys.LWin, Keys.P);
break;
case Keys.F10:
HandleOptimizationEvent(107);
ToggleTouchpadEvent(true);
break;
case Keys.F11:
HandleOptimizationEvent(108);
SleepEvent();
break;
case Keys.F12:
KeyboardHook.KeyKeyPress(Keys.LWin, Keys.A);
@@ -476,9 +477,21 @@ namespace GHelper.Input
}
}
static void ToggleTouchpadEvent(bool hotkey = false)
{
if (hotkey || !AppConfig.IsHardwareTouchpadToggle()) ToggleTouchpad();
Thread.Sleep(200);
Program.toast.RunToast(GetTouchpadState() ? "On" : "Off", ToastIcon.Touchpad);
}
static void ToggleTouchpad()
{
KeyboardHook.KeyKeyKeyPress(Keys.LWin, Keys.LControlKey, Keys.F24);
KeyboardHook.KeyKeyKeyPress(Keys.LWin, Keys.LControlKey, Keys.F24, 50);
}
static void SleepEvent()
{
Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.KB_Sleep, "Sleep");
}
public static void ToggleArrowLock()
@@ -619,12 +632,10 @@ namespace GHelper.Input
Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Brightness_Up, "Brightness");
break;
case 107: // FN+F10
ToggleTouchpad();
Thread.Sleep(200);
Program.toast.RunToast(GetTouchpadState() ? "On" : "Off", ToastIcon.Touchpad);
ToggleTouchpadEvent();
break;
case 108: // FN+F11
Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.KB_Sleep, "Sleep");
SleepEvent();
break;
case 106: // Screenpad button on DUO
if (Control.ModifierKeys == Keys.Shift)
@@ -654,8 +665,8 @@ namespace GHelper.Input
public static void SetBacklightAuto(bool init = false)
{
if (init) AsusUSB.Init();
AsusUSB.ApplyBrightness(GetBacklight(), "Auto", init);
if (init) Aura.Init();
Aura.ApplyBrightness(GetBacklight(), "Auto", init);
}
public static void SetBacklight(int delta, bool force = false)
@@ -678,7 +689,7 @@ namespace GHelper.Input
if (force || !OptimizationService.IsRunning())
{
AsusUSB.ApplyBrightness(backlight, "HotKey");
Aura.ApplyBrightness(backlight, "HotKey");
}
if (!OptimizationService.IsOSDRunning())

View File

@@ -34,15 +34,17 @@ public sealed class KeyboardHook : IDisposable
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
}
public static void KeyKeyKeyPress(Keys key, Keys key2, Keys key3)
public static void KeyKeyKeyPress(Keys key, Keys key2, Keys key3, int sleep = 0)
{
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
keybd_event((byte)key3, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
keybd_event((byte)key3, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
if (sleep > 0) Thread.Sleep(sleep);
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
if (sleep > 0) Thread.Sleep(sleep);
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
}
/// <summary>

View File

@@ -1,4 +1,5 @@
using HidLibrary;
using HidSharp;
using GHelper.USB;
namespace GHelper.Input
{
@@ -9,14 +10,14 @@ namespace GHelper.Input
public KeyboardListener(Action<int> KeyHandler)
{
HidDevice? input = AsusUSB.GetDevice();
HidStream? input = AsusHid.FindHidStream(AsusHid.INPUT_ID);
// Fallback
if (input == null)
{
AsusUSB.Init();
Aura.Init();
Thread.Sleep(1000);
input = AsusUSB.GetDevice();
input = input = AsusHid.FindHidStream(AsusHid.INPUT_ID);
}
if (input == null)
@@ -25,7 +26,9 @@ namespace GHelper.Input
return;
}
Logger.WriteLine($"Input: {input.DevicePath}");
input.ReadTimeout = int.MaxValue;
Logger.WriteLine($"Input: {input.Device.DevicePath}");
var task = Task.Run(() =>
{
@@ -35,14 +38,15 @@ namespace GHelper.Input
{
// Emergency break
if (input == null || !input.IsConnected)
if (input == null || !input.CanRead)
{
Logger.WriteLine("Listener terminated");
break;
}
var data = input.Read().Data;
if (data.Length > 1 && data[0] == AsusUSB.INPUT_HID_ID && data[1] > 0 && data[1] != 236)
var data = input.Read();
if (data.Length > 1 && data[0] == AsusHid.INPUT_ID && data[1] > 0 && data[1] != 236)
{
Logger.WriteLine($"Key: {data[1]}");
KeyHandler(data[1]);