From 6f40dadfcbaf5041c5ff5699b7e71acb07ba881d Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Sun, 23 Jul 2023 09:59:11 +0200 Subject: [PATCH 1/5] New translations Strings.resx (Chinese Simplified) --- app/Properties/Strings.zh-CN.resx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Properties/Strings.zh-CN.resx b/app/Properties/Strings.zh-CN.resx index 8ba17090..41e6cb80 100644 --- a/app/Properties/Strings.zh-CN.resx +++ b/app/Properties/Strings.zh-CN.resx @@ -199,7 +199,7 @@ 唤醒时 - 插电/电池时背光时间 (0表示长亮) + 插电/电池时熄灭时间(0表示长亮) 平衡模式 From 20b99810cb983d166dbf426c514b63fea4f8ae72 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Sun, 23 Jul 2023 13:33:05 +0200 Subject: [PATCH 2/5] Standard mode fix --- app/Display/ScreenNative.cs | 2 +- app/Extra.cs | 2 +- app/Gpu/GPUModeControl.cs | 13 ++++++++++++- app/Program.cs | 22 +++++++++++++++++++++- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/app/Display/ScreenNative.cs b/app/Display/ScreenNative.cs index 2d090574..99fd2b2f 100644 --- a/app/Display/ScreenNative.cs +++ b/app/Display/ScreenNative.cs @@ -238,7 +238,7 @@ namespace GHelper.Display //Fallback scenario if (iRet != 0) { - Thread.Sleep(1000); + Thread.Sleep(500); iRet = ChangeDisplaySettingsEx(laptopScreen, ref dm, IntPtr.Zero, DisplaySettingsFlags.CDS_UPDATEREGISTRY, IntPtr.Zero); Logger.WriteLine("Screen = " + frequency.ToString() + "Hz : " + (iRet == 0 ? "OK" : iRet)); } diff --git a/app/Extra.cs b/app/Extra.cs index b1583802..b9903429 100644 --- a/app/Extra.cs +++ b/app/Extra.cs @@ -227,7 +227,7 @@ namespace GHelper } } - checkAutoToggleClamshellMode.Visible = clamshellControl.IsExternalDisplayConnected(); + //checkAutoToggleClamshellMode.Visible = clamshellControl.IsExternalDisplayConnected(); checkAutoToggleClamshellMode.Checked = AppConfig.Is("toggle_clamshell_mode"); checkAutoToggleClamshellMode.CheckedChanged += checkAutoToggleClamshellMode_CheckedChanged; diff --git a/app/Gpu/GPUModeControl.cs b/app/Gpu/GPUModeControl.cs index ffe1a0cd..2331fc7f 100644 --- a/app/Gpu/GPUModeControl.cs +++ b/app/Gpu/GPUModeControl.cs @@ -177,7 +177,7 @@ namespace GHelper.Gpu { bool GpuAuto = AppConfig.Is("gpu_auto"); - bool ForceGPU = AppConfig.ContainsModel("503"); + bool ForceGPU = AppConfig.ContainsModel("503") || AppConfig.Is("gpu_fix"); int GpuMode = AppConfig.Get("gpu_mode"); @@ -321,5 +321,16 @@ namespace GHelper.Gpu } } + // Manually forcing standard mode on shutdown/hibernate for some exotic cases + // https://github.com/seerge/g-helper/pull/855 + public void StandardModeFix() + { + if (!AppConfig.Is("gpu_fix")) return; // No config entry + if (Program.acpi.DeviceGet(AsusACPI.GPUMux) == 0) return; // Ultimate mode + + Logger.WriteLine("Forcing Standard Mode on shutdown / hibernation"); + Program.acpi.SetGPUEco(0); + } + } } diff --git a/app/Program.cs b/app/Program.cs index 595a7bfa..ed8f8bae 100644 --- a/app/Program.cs +++ b/app/Program.cs @@ -100,6 +100,10 @@ namespace GHelper // Subscribing for system power change events SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged; + + SystemEvents.SessionSwitch += SystemEvents_SessionSwitch; + SystemEvents.SessionEnding += SystemEvents_SessionEnding; + clamshellControl.RegisterDisplayEvents(); clamshellControl.ToggleLidAction(); @@ -117,7 +121,19 @@ namespace GHelper } + private static void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) + { + gpuControl.StandardModeFix(); + } + private static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e) + { + if (e.Reason == SessionSwitchReason.SessionLogon || e.Reason == SessionSwitchReason.SessionUnlock) + { + Logger.WriteLine("Session:" + e.Reason.ToString()); + screenControl.AutoScreen(); + } + } static void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) { @@ -178,8 +194,12 @@ namespace GHelper private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e) { + Logger.WriteLine("Power Mode:" + e.Mode.ToString()); + + + if (e.Mode == PowerModes.Suspend) gpuControl.StandardModeFix(); + if (SystemInformation.PowerStatus.PowerLineStatus == isPlugged) return; - Logger.WriteLine("Power Mode Changed"); SetAutoModes(true); } From c2262c0f89dd857dbc9734714913d61cdb8dfa33 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Sun, 23 Jul 2023 14:36:22 +0200 Subject: [PATCH 3/5] Moved Aura commands to parallel thread --- app/AsusUSB.cs | 173 ++++++++++++++++++++++++++----------------------- 1 file changed, 91 insertions(+), 82 deletions(-) diff --git a/app/AsusUSB.cs b/app/AsusUSB.cs index 54f9277e..69a5dda5 100644 --- a/app/AsusUSB.cs +++ b/app/AsusUSB.cs @@ -256,13 +256,13 @@ namespace GHelper public static void ApplyBrightness(int brightness, string log = "Backlight") { - if (AppConfig.ContainsModel("TUF")) - Program.acpi.TUFKeyboardBrightness(brightness); - Task.Run(async () => { + if (AppConfig.ContainsModel("TUF")) + Program.acpi.TUFKeyboardBrightness(brightness); + byte[] msg = { AURA_HID_ID, 0xba, 0xc5, 0xc4, (byte)brightness }; byte[] msgBackup = { INPUT_HID_ID, 0xba, 0xc5, 0xc4, (byte)brightness }; @@ -311,55 +311,60 @@ namespace GHelper public static void ApplyAuraPower() { - List flags = new(); - - // Keyboard - if (AppConfig.IsNotFalse("keyboard_awake")) flags.Add(AuraDev19b6.AwakeKeyb); - if (AppConfig.IsNotFalse("keyboard_boot")) flags.Add(AuraDev19b6.BootKeyb); - if (AppConfig.IsNotFalse("keyboard_sleep")) flags.Add(AuraDev19b6.SleepKeyb); - if (AppConfig.IsNotFalse("keyboard_shutdown")) flags.Add(AuraDev19b6.ShutdownKeyb); - - // Lightbar - if (AppConfig.IsNotFalse("keyboard_awake_bar")) flags.Add(AuraDev19b6.AwakeBar); - if (AppConfig.IsNotFalse("keyboard_boot_bar")) flags.Add(AuraDev19b6.BootBar); - if (AppConfig.IsNotFalse("keyboard_sleep_bar")) flags.Add(AuraDev19b6.SleepBar); - if (AppConfig.IsNotFalse("keyboard_shutdown_bar")) flags.Add(AuraDev19b6.ShutdownBar); - - // Lid - if (AppConfig.IsNotFalse("keyboard_awake_lid")) flags.Add(AuraDev19b6.AwakeLid); - if (AppConfig.IsNotFalse("keyboard_boot_lid")) flags.Add(AuraDev19b6.BootLid); - if (AppConfig.IsNotFalse("keyboard_sleep_lid")) flags.Add(AuraDev19b6.SleepLid); - if (AppConfig.IsNotFalse("keyboard_shutdown_lid")) flags.Add(AuraDev19b6.ShutdownLid); - - // Logo - if (AppConfig.IsNotFalse("keyboard_awake_logo")) flags.Add(AuraDev19b6.AwakeLogo); - if (AppConfig.IsNotFalse("keyboard_boot_logo")) flags.Add(AuraDev19b6.BootLogo); - if (AppConfig.IsNotFalse("keyboard_sleep_logo")) flags.Add(AuraDev19b6.SleepLogo); - if (AppConfig.IsNotFalse("keyboard_shutdown_logo")) flags.Add(AuraDev19b6.ShutdownLogo); - - - byte[] msg = AuraDev19b6Extensions.ToBytes(flags.ToArray()); - - - var devices = GetHidDevices(deviceIds); - - foreach (HidDevice device in devices) + Task.Run(async () => { - device.OpenDevice(); - if (device.ReadFeatureData(out byte[] data, AURA_HID_ID)) - { - device.WriteFeatureData(msg); - Logger.WriteLine("USB-KB " + device.Attributes.ProductHexId + ":" + BitConverter.ToString(msg)); - } - device.CloseDevice(); - } - if (AppConfig.ContainsModel("TUF")) - Program.acpi.TUFKeyboardPower( - flags.Contains(AuraDev19b6.AwakeKeyb), - flags.Contains(AuraDev19b6.BootKeyb), - flags.Contains(AuraDev19b6.SleepKeyb), - flags.Contains(AuraDev19b6.ShutdownKeyb)); + List flags = new(); + + // Keyboard + if (AppConfig.IsNotFalse("keyboard_awake")) flags.Add(AuraDev19b6.AwakeKeyb); + if (AppConfig.IsNotFalse("keyboard_boot")) flags.Add(AuraDev19b6.BootKeyb); + if (AppConfig.IsNotFalse("keyboard_sleep")) flags.Add(AuraDev19b6.SleepKeyb); + if (AppConfig.IsNotFalse("keyboard_shutdown")) flags.Add(AuraDev19b6.ShutdownKeyb); + + // Lightbar + if (AppConfig.IsNotFalse("keyboard_awake_bar")) flags.Add(AuraDev19b6.AwakeBar); + if (AppConfig.IsNotFalse("keyboard_boot_bar")) flags.Add(AuraDev19b6.BootBar); + if (AppConfig.IsNotFalse("keyboard_sleep_bar")) flags.Add(AuraDev19b6.SleepBar); + if (AppConfig.IsNotFalse("keyboard_shutdown_bar")) flags.Add(AuraDev19b6.ShutdownBar); + + // Lid + if (AppConfig.IsNotFalse("keyboard_awake_lid")) flags.Add(AuraDev19b6.AwakeLid); + if (AppConfig.IsNotFalse("keyboard_boot_lid")) flags.Add(AuraDev19b6.BootLid); + if (AppConfig.IsNotFalse("keyboard_sleep_lid")) flags.Add(AuraDev19b6.SleepLid); + if (AppConfig.IsNotFalse("keyboard_shutdown_lid")) flags.Add(AuraDev19b6.ShutdownLid); + + // Logo + if (AppConfig.IsNotFalse("keyboard_awake_logo")) flags.Add(AuraDev19b6.AwakeLogo); + if (AppConfig.IsNotFalse("keyboard_boot_logo")) flags.Add(AuraDev19b6.BootLogo); + if (AppConfig.IsNotFalse("keyboard_sleep_logo")) flags.Add(AuraDev19b6.SleepLogo); + if (AppConfig.IsNotFalse("keyboard_shutdown_logo")) flags.Add(AuraDev19b6.ShutdownLogo); + + + byte[] msg = AuraDev19b6Extensions.ToBytes(flags.ToArray()); + + + var devices = GetHidDevices(deviceIds); + + foreach (HidDevice device in devices) + { + device.OpenDevice(); + if (device.ReadFeatureData(out byte[] data, AURA_HID_ID)) + { + device.WriteFeatureData(msg); + Logger.WriteLine("USB-KB " + device.Attributes.ProductHexId + ":" + BitConverter.ToString(msg)); + } + device.CloseDevice(); + } + + if (AppConfig.ContainsModel("TUF")) + Program.acpi.TUFKeyboardPower( + flags.Contains(AuraDev19b6.AwakeKeyb), + flags.Contains(AuraDev19b6.BootKeyb), + flags.Contains(AuraDev19b6.SleepKeyb), + flags.Contains(AuraDev19b6.ShutdownKeyb)); + + }); } @@ -367,44 +372,48 @@ namespace GHelper public static void ApplyAura() { - Mode = AppConfig.Get("aura_mode"); - Speed = AppConfig.Get("aura_speed"); - SetColor(AppConfig.Get("aura_color")); - SetColor2(AppConfig.Get("aura_color2")); - - int _speed; - - switch (Speed) + Task.Run(async () => { - case 1: - _speed = 0xeb; - break; - case 2: - _speed = 0xf5; - break; - default: - _speed = 0xe1; - break; - } - byte[] msg = AuraMessage(Mode, Color1, Color2, _speed); - var devices = GetHidDevices(deviceIds); + Mode = AppConfig.Get("aura_mode"); + Speed = AppConfig.Get("aura_speed"); + SetColor(AppConfig.Get("aura_color")); + SetColor2(AppConfig.Get("aura_color2")); - foreach (HidDevice device in devices) - { - device.OpenDevice(); - if (device.ReadFeatureData(out byte[] data, AURA_HID_ID)) + int _speed; + + switch (Speed) { - device.WriteFeatureData(msg); - device.WriteFeatureData(MESSAGE_SET); - device.WriteFeatureData(MESSAGE_APPLY); - Logger.WriteLine("USB-KB " + device.Capabilities.FeatureReportByteLength + "|" + device.Capabilities.InputReportByteLength + device.Description + device.DevicePath + ":" + BitConverter.ToString(msg)); + case 1: + _speed = 0xeb; + break; + case 2: + _speed = 0xf5; + break; + default: + _speed = 0xe1; + break; } - device.CloseDevice(); - } - if (AppConfig.ContainsModel("TUF")) - Program.acpi.TUFKeyboardRGB(Mode, Color1, _speed); + byte[] msg = AuraMessage(Mode, Color1, Color2, _speed); + var devices = GetHidDevices(deviceIds); + + foreach (HidDevice device in devices) + { + device.OpenDevice(); + if (device.ReadFeatureData(out byte[] data, AURA_HID_ID)) + { + device.WriteFeatureData(msg); + device.WriteFeatureData(MESSAGE_SET); + device.WriteFeatureData(MESSAGE_APPLY); + Logger.WriteLine("USB-KB " + device.Capabilities.FeatureReportByteLength + "|" + device.Capabilities.InputReportByteLength + device.Description + device.DevicePath + ":" + BitConverter.ToString(msg)); + } + device.CloseDevice(); + } + + if (AppConfig.ContainsModel("TUF")) + Program.acpi.TUFKeyboardRGB(Mode, Color1, _speed); + }); } From bd1a11a15afb9e6751ff207783185c31f295ff95 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Sun, 23 Jul 2023 14:46:02 +0200 Subject: [PATCH 4/5] Update README.md --- docs/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/README.md b/docs/README.md index b30dff1e..b1c47339 100644 --- a/docs/README.md +++ b/docs/README.md @@ -223,6 +223,12 @@ Full list of keycodes https://learn.microsoft.com/en-us/windows/win32/inputdev/v ![Screenshot 2023-07-17 192155](https://github.com/seerge/g-helper/assets/5920850/e450e124-1589-4787-bce8-7c37ffe72fbd) +### Force Standard mode on shutdown / hibernation +In some rare cases G14 2023 seem to have issues with enabling / disabling dGPU - i.e. Eco mode. Till we wait for a fix from asus on BIOS level, one of the proposed solutions is to always shutdown laptop in Standard mode (then everything seem to work fine). To enable "forced" Standard mode on shutdown add following line to ``%AppData%\GHelper\config.json`` +``` +"gpu_fix" : 1, +``` + ### Disable OSD You can disable app's OSD (for performance modes, keyboard backlight, etc) by adding following line to ``%AppData%\GHelper\config.json`` ``` From 27473878475fa2ba9fa84960aacd437abef12a8e Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Sun, 23 Jul 2023 17:17:52 +0200 Subject: [PATCH 5/5] Fix Aura UI --- app/AsusUSB.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/AsusUSB.cs b/app/AsusUSB.cs index 69a5dda5..ab8d29b9 100644 --- a/app/AsusUSB.cs +++ b/app/AsusUSB.cs @@ -372,13 +372,14 @@ namespace GHelper public static void ApplyAura() { + Mode = AppConfig.Get("aura_mode"); + Speed = AppConfig.Get("aura_speed"); + SetColor(AppConfig.Get("aura_color")); + SetColor2(AppConfig.Get("aura_color2")); + Task.Run(async () => { - Mode = AppConfig.Get("aura_mode"); - Speed = AppConfig.Get("aura_speed"); - SetColor(AppConfig.Get("aura_color")); - SetColor2(AppConfig.Get("aura_color2")); int _speed;