Compare commits

...

8 Commits

Author SHA1 Message Date
Serge
524b84fc38 Detect Battery Saver state 2023-09-18 13:45:12 +02:00
Serge
3bd59a4c4d Merge branch 'main' of https://github.com/seerge/g-helper 2023-09-18 12:04:48 +02:00
Serge
96f07606f5 Version bump 2023-09-18 12:04:43 +02:00
Serge
ea96af51b8 Update README.md 2023-09-18 10:00:08 +02:00
Serge
0669bcb2d1 Merge branch 'main' of https://github.com/seerge/g-helper 2023-09-17 11:49:08 +02:00
Serge
67a42c4a21 Touchpad toggle https://github.com/seerge/g-helper/issues/1313
Miniled status tweak https://github.com/seerge/g-helper/issues/1319
2023-09-17 11:49:05 +02:00
Serge
de98588235 Update README.md 2023-09-14 11:26:56 +02:00
Serge
dffb239ea7 MUX switch for Vivobooks / Zenbooks https://github.com/seerge/g-helper/issues/1301 2023-09-13 13:26:35 +02:00
12 changed files with 144 additions and 32 deletions

View File

@@ -65,6 +65,7 @@ public class AsusACPI
public const uint GPUXG = 0x00090019;
public const uint GPUMux = 0x00090016;
public const uint GPUMuxVivo = 0x00090026;
public const uint BatteryLimit = 0x00120057;
public const uint ScreenOverdrive = 0x00050019;

View File

@@ -59,7 +59,7 @@ namespace GHelper.Display
public void ToogleMiniled()
{
int miniled = (AppConfig.Get("miniled") == 1) ? 0 : 1;
int miniled = (Program.acpi.DeviceGet(AsusACPI.ScreenMiniled) == 1) ? 0 : 1;
AppConfig.Set("miniled", miniled);
SetScreen(-1, -1, miniled);
}
@@ -77,8 +77,12 @@ namespace GHelper.Display
int overdrive = Program.acpi.DeviceGet(AsusACPI.ScreenOverdrive);
int miniled = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled);
bool hdr = false;
if (miniled >= 0)
{
AppConfig.Set("miniled", miniled);
}
bool screenEnabled = (frequency >= 0);
@@ -94,7 +98,8 @@ namespace GHelper.Display
maxFrequency: maxFrequency,
overdrive: overdrive,
overdriveSetting: overdriveSetting,
miniled: miniled
miniled: miniled,
hdr: hdr
);
});

View File

@@ -1,8 +1,6 @@
using Microsoft.VisualBasic.Logging;
using System.Collections;
using System.Diagnostics.Metrics;
using System.Collections;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using static GHelper.Display.ScreenInterrogatory;
namespace GHelper.Display

View File

@@ -9,7 +9,7 @@ namespace GHelper.Fan
public const int XGM_FAN_MAX = 72;
public const int INADEQUATE_MAX = 90;
public const int INADEQUATE_MAX = 92;
const int FAN_COUNT = 3;

View File

@@ -692,7 +692,14 @@ namespace GHelper
comboBoost.SelectedIndex = Math.Min(boost, comboBoost.Items.Count - 1);
string powerMode = PowerNative.GetPowerMode();
comboPowerMode.SelectedValue = powerMode;
bool batterySaver = PowerNative.GetBatterySaverStatus();
comboPowerMode.Enabled = !batterySaver;
if (batterySaver)
comboPowerMode.SelectedIndex = 0;
else
comboPowerMode.SelectedValue = powerMode;
}

View File

@@ -15,7 +15,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<AssemblyVersion>0.123</AssemblyVersion>
<AssemblyVersion>0.124</AssemblyVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -24,9 +24,13 @@ namespace GHelper.Gpu
int eco = Program.acpi.DeviceGet(AsusACPI.GPUEco);
int mux = Program.acpi.DeviceGet(AsusACPI.GPUMux);
if (mux < 0) mux = Program.acpi.DeviceGet(AsusACPI.GPUMuxVivo);
Logger.WriteLine("Eco flag : " + eco);
Logger.WriteLine("Mux flag : " + mux);
settings.VisualiseGPUButtons(eco >= 0, mux >= 0);
if (mux == 0)
{
gpuMode = AsusACPI.GPUModeUltimate;
@@ -38,9 +42,6 @@ namespace GHelper.Gpu
else
gpuMode = AsusACPI.GPUModeStandard;
// Ultimate mode not supported
if (mux != 1) settings.HideUltimateMode();
// GPU mode not supported
if (eco < 0 && mux < 0)
{
@@ -73,12 +74,15 @@ namespace GHelper.Gpu
var restart = false;
var changed = false;
int status;
if (CurrentGPU == AsusACPI.GPUModeUltimate)
{
DialogResult dialogResult = MessageBox.Show(Properties.Strings.AlertUltimateOff, Properties.Strings.AlertUltimateTitle, MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
Program.acpi.DeviceSet(AsusACPI.GPUMux, 1, "GPUMux");
status = Program.acpi.DeviceSet(AsusACPI.GPUMux, 1, "GPUMux");
if (status != 1) Program.acpi.DeviceSet(AsusACPI.GPUMuxVivo, 1, "GPUMuxVivo");
restart = true;
changed = true;
}
@@ -93,7 +97,8 @@ namespace GHelper.Gpu
Program.acpi.SetGPUEco(0);
Thread.Sleep(100);
}
Program.acpi.DeviceSet(AsusACPI.GPUMux, 0, "GPUMux");
status = Program.acpi.DeviceSet(AsusACPI.GPUMux, 0, "GPUMux");
if (status != 1) Program.acpi.DeviceSet(AsusACPI.GPUMuxVivo, 0, "GPUMuxVivo");
restart = true;
changed = true;
}

View File

@@ -168,7 +168,7 @@ namespace GHelper.Input
static void SetBrightness(int delta)
{
int brightness = -1;
if (isTUF) brightness = ScreenBrightness.Get();
if (AppConfig.SwappedBrightness()) delta = -delta;
@@ -182,7 +182,7 @@ namespace GHelper.Input
Thread.Sleep(100);
if (brightness == ScreenBrightness.Get())
Program.toast.RunToast(ScreenBrightness.Adjust(delta) + "%", (delta < 0 ) ? ToastIcon.BrightnessDown : ToastIcon.BrightnessUp);
Program.toast.RunToast(ScreenBrightness.Adjust(delta) + "%", (delta < 0) ? ToastIcon.BrightnessDown : ToastIcon.BrightnessUp);
}
}
@@ -388,10 +388,17 @@ namespace GHelper.Input
modeControl.CyclePerformanceMode(Control.ModifierKeys == Keys.Shift);
break;
case "ghelper":
Program.settingsForm.BeginInvoke(delegate
try
{
Program.SettingsToggle();
});
Program.settingsForm.BeginInvoke(delegate
{
Program.SettingsToggle();
});
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
break;
case "fnlock":
ToggleFnLock();
@@ -433,6 +440,11 @@ namespace GHelper.Input
}
}
static void ToggleTouchpad()
{
KeyboardHook.KeyCtrlWinPress(Keys.F24);
}
public static void ToggleArrowLock()
{
int arLock = AppConfig.Is("arrow_lock") ? 0 : 1;
@@ -476,7 +488,7 @@ namespace GHelper.Input
// We'll special-case the translation of those.
if (AppConfig.IsAlly())
{
switch(EventID)
switch (EventID)
{
// This is both the M1 and M2 keys.
@@ -566,7 +578,7 @@ namespace GHelper.Input
Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Brightness_Up, "Brightness");
break;
case 107: // FN+F10
AsusUSB.TouchpadToggle();
ToggleTouchpad();
Thread.Sleep(200);
Program.toast.RunToast(GetTouchpadState() ? "On" : "Off", ToastIcon.Touchpad);
break;
@@ -643,7 +655,8 @@ namespace GHelper.Input
else if (brightness >= 100) brightness = 0;
else brightness = -10;
} else
}
else
{
brightness = Math.Max(Math.Min(100, brightness + delta), -10);
}
@@ -652,9 +665,9 @@ namespace GHelper.Input
if (brightness >= 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, 1, "ScreenpadOn");
Program.acpi.DeviceSet(AsusACPI.ScreenPadBrightness, Math.Max(brightness * 255 / 100, 0 ), "Screenpad");
Program.acpi.DeviceSet(AsusACPI.ScreenPadBrightness, Math.Max(brightness * 255 / 100, 0), "Screenpad");
if (brightness < 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, 0, "ScreenpadOff");
if (brightness < 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, 0, "ScreenpadOff");
string toast;

View File

@@ -17,7 +17,9 @@ public sealed class KeyboardHook : IDisposable
public const int KEYEVENTF_EXTENDEDKEY = 1;
public const int KEYEVENTF_KEYUP = 2;
private const byte VK_LWIN = 0x5B;
private const byte VK_LCONTROL = 0xA2;
public static void KeyPress(Keys key)
{
@@ -32,6 +34,16 @@ public sealed class KeyboardHook : IDisposable
keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
}
public static void KeyCtrlWinPress(Keys key)
{
keybd_event(VK_LCONTROL, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
keybd_event(VK_LCONTROL, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
}
/// <summary>
/// Represents the window that is used internally to get the messages.

View File

@@ -153,6 +153,13 @@ namespace GHelper.Mode
Guid guidScheme = new Guid(scheme);
uint status = PowerGetEffectiveOverlayScheme(out Guid activeScheme);
if (GetBatterySaverStatus())
{
Logger.WriteLine("Battery Saver detected");
return;
}
if (status != 0 || activeScheme != guidScheme)
{
status = PowerSetActiveOverlayScheme(guidScheme);
@@ -288,6 +295,48 @@ namespace GHelper.Mode
Logger.WriteLine("Setting Hibernate after " + seconds + ": " + (hrAC == 0 ? "OK" : hrAC));
}
[DllImport("Kernel32")]
private static extern bool GetSystemPowerStatus(SystemPowerStatus sps);
public enum ACLineStatus : byte
{
Offline = 0, Online = 1, Unknown = 255
}
public enum BatteryFlag : byte
{
High = 1,
Low = 2,
Critical = 4,
Charging = 8,
NoSystemBattery = 128,
Unknown = 255
}
// Fields must mirror their unmanaged counterparts, in order
[StructLayout(LayoutKind.Sequential)]
public class SystemPowerStatus
{
public ACLineStatus ACLineStatus;
public BatteryFlag BatteryFlag;
public Byte BatteryLifePercent;
public Byte SystemStatusFlag;
public Int32 BatteryLifeTime;
public Int32 BatteryFullLifeTime;
}
public static bool GetBatterySaverStatus()
{
SystemPowerStatus sps = new SystemPowerStatus();
try
{
GetSystemPowerStatus(sps);
return (sps.SystemStatusFlag > 0);
} catch (Exception ex)
{
return false;
}
}
}
}

View File

@@ -758,7 +758,7 @@ namespace GHelper
public void VisualiseScreen(bool screenEnabled, bool screenAuto, int frequency, int maxFrequency, int overdrive, bool overdriveSetting, int miniled)
public void VisualiseScreen(bool screenEnabled, bool screenAuto, int frequency, int maxFrequency, int overdrive, bool overdriveSetting, int miniled, bool hdr)
{
ButtonEnabled(button60Hz, screenEnabled);
@@ -800,6 +800,7 @@ namespace GHelper
if (miniled >= 0)
{
buttonMiniled.Activated = (miniled == 1);
buttonMiniled.Enabled = !hdr;
}
else
{
@@ -1025,13 +1026,26 @@ namespace GHelper
}
public void HideUltimateMode()
public void VisualiseGPUButtons(bool eco = true, bool ultimate = true)
{
tableGPU.Controls.Remove(buttonUltimate);
tablePerf.ColumnCount = 0;
tableGPU.ColumnCount = 0;
tableScreen.ColumnCount = 0;
menuUltimate.Visible = false;
if (!eco)
{
menuEco.Visible = buttonEco.Visible = false;
menuOptimized.Visible = buttonOptimized.Visible = false;
buttonStopGPU.Visible = true;
tableGPU.ColumnCount = 3;
tableScreen.ColumnCount = 3;
} else
{
buttonStopGPU.Visible = false;
}
if (!ultimate)
{
menuUltimate.Visible = buttonUltimate.Visible = false;
tableGPU.ColumnCount = 3;
tableScreen.ColumnCount = 3;
}
}
public void HideGPUModes(bool gpuExists)
@@ -1042,15 +1056,17 @@ namespace GHelper
buttonStandard.Visible = false;
buttonUltimate.Visible = false;
buttonOptimized.Visible = false;
buttonStopGPU.Visible = true;
tableGPU.ColumnCount = 0;
SetContextMenu();
panelGPU.Visible = gpuExists;
}
public void LockGPUModes(string text = null)
{
Invoke(delegate

View File

@@ -279,6 +279,12 @@ Disable app's OSD (for performance modes, keyboard backlight, etc.)
"disable_osd": 1,
```
### Disable "Tablet mode" on X13/X16
To disable automatic touchpad toggling when laptop enteres / leaves tablet mode
```
"disable_tablet": 1,
```
### Extra Keybindings
- ``Ctrl + Shift + F5`` - Toggle Performance Modes
- ``Ctrl + Shift + F12`` - Open G-Helper window