diff --git a/app/AsusUSB.cs b/app/AsusUSB.cs index 54f9277e..ab8d29b9 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)); + + }); } @@ -372,39 +377,44 @@ namespace GHelper 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); - 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); + }); } 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 584fa61b..98cd85e7 100644 --- a/app/Program.cs +++ b/app/Program.cs @@ -101,6 +101,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(); @@ -121,7 +125,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) { @@ -182,8 +198,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); } 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表示长亮) 平衡模式 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`` ```