Compare commits

...

42 Commits
v0.197 ... main

Author SHA1 Message Date
Serge
d7202b12bf Update README.md 2024-11-11 19:20:02 +01:00
Serge
7e7c90d4fb Miniled init on wake up 2024-11-11 16:59:46 +01:00
Serge
50503e126e InitStatus led on wake up https://github.com/seerge/g-helper/discussions/3354 2024-11-11 16:08:07 +01:00
Serge
2f2d64135a Status LED automation https://github.com/seerge/g-helper/discussions/3354 2024-11-11 15:23:45 +01:00
Serge
dea88f87df UI Cleanup 2024-11-11 15:15:11 +01:00
yinyue200
819207c4f1 Synchronize the indicator light status of CameraShutter at startup. (#3365) 2024-11-11 15:07:18 +01:00
Serge
63d3393b7b Cleanup 2024-11-11 11:38:36 +01:00
Serge
960ebf3bbb Version bump 2024-11-11 11:33:21 +01:00
Serge
dba6b1a24f Cleanup 2024-11-11 11:32:13 +01:00
Serge
5968788105 Support link 2024-11-11 10:54:38 +01:00
Serge
819f750591 Skip GPU check for devices w/o GPU #3360 2024-11-11 10:44:24 +01:00
Serge
be3e15cd6e Skip AMD check for devices w/o GPU https://github.com/seerge/g-helper/pull/3360/ 2024-11-11 10:41:53 +01:00
Serge
871f80f654 Skip GPU check for UX540 https://github.com/seerge/g-helper/pull/3360 2024-11-11 10:36:57 +01:00
Serge
c2c5d2a0c5 Skip AnimeMatrix or Slash device check if devices doesn't have it 2024-11-10 23:16:13 +01:00
Serge
86e08bc3f5 AnimeMatrix config option 2024-11-10 23:11:40 +01:00
Serge
c63c64967f New translations strings.resx (German) (#3329) 2024-11-10 23:03:11 +01:00
yinyue200
468ed27390 Fix the CameraShutter-related logic on UX5406 (#3359) 2024-11-10 23:01:32 +01:00
Serge
c6ea0b0e3e CameraShutter cleanup 2024-11-10 19:42:39 +01:00
yinyue200
000162b989 Add support for CameraShutter (#3358) 2024-11-10 19:35:43 +01:00
Serge
df5bdfde33 Micmute binding for any key https://github.com/seerge/g-helper/issues/3352 2024-11-09 10:55:27 +01:00
Serge
815d033a56 Log original power plan https://github.com/seerge/g-helper/issues/3349 2024-11-08 16:12:54 +01:00
Serge
857d858987 Show Dynamic Lighting warning for all TUF devices 2024-11-08 16:10:48 +01:00
Serge
9d130ca540 Prevent double hotkey processing in some situations https://github.com/seerge/g-helper/issues/3348 2024-11-07 11:00:22 +01:00
Serge
0a503d286a Merge branch 'main' of https://github.com/seerge/g-helper 2024-11-06 13:00:00 +01:00
Serge
f72e3a69dd Cleanup 2024-11-06 12:59:58 +01:00
Serge
35867a434c Update README.md 2024-11-06 09:57:21 +01:00
Serge
5570513eeb Merge branch 'main' of https://github.com/seerge/g-helper 2024-11-03 11:02:21 +01:00
Serge
ceb1c9a250 Skip auto-backlight when lid is closed https://github.com/seerge/g-helper/issues/3335 2024-11-03 11:02:18 +01:00
Serge
e942d3fd49 Added website link 2024-10-31 11:10:09 +01:00
Serge
482fe00014 Version bump 2024-10-30 08:37:35 +01:00
Serge
54fdf9231c Custom mode hotkeys https://github.com/seerge/g-helper/issues/3323 2024-10-29 19:46:16 +01:00
Serge
b9be9a9c97 Added FN+F5 keycode for ancient devices https://github.com/seerge/g-helper/discussions/3322 2024-10-29 18:36:48 +01:00
Serge
501d0a1666 Matrix clock position tweak #3304 2024-10-29 18:34:56 +01:00
Serge
a7e50f89ca Cleanup 2024-10-28 16:21:58 +01:00
Serge
083e918086 Fix possible exception in battery fully charged https://github.com/seerge/g-helper/issues/3317 2024-10-28 16:19:05 +01:00
Serge
e6a547dbfd Animematrix clock position tweak https://github.com/seerge/g-helper/issues/3304 2024-10-28 15:23:47 +01:00
Serge
1321b2eb31 Init Screenpad brightness on start https://github.com/seerge/g-helper/issues/3301 2024-10-26 15:10:26 +02:00
Serge
5e96e3e9bc Option to skip PowerMode setting https://github.com/seerge/g-helper/issues/3287 2024-10-25 22:24:21 +02:00
Serge
5e4bd13aa9 Added GX501G to NoWMI list https://github.com/seerge/g-helper/discussions/3300 2024-10-25 22:19:11 +02:00
Serge
f320da9245 GPU mode toast notifications https://github.com/seerge/g-helper/issues/3286 2024-10-23 13:32:30 +02:00
Serge
a024c05bc1 Backlight tweaks 2024-10-23 13:29:12 +02:00
Serge
15501c7845 Animatrix picture editor tweaks https://github.com/seerge/g-helper/issues/3280 2024-10-22 17:49:37 +02:00
26 changed files with 534 additions and 441 deletions

2
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,2 @@
# These are supported funding model platforms
custom: https://g-helper.com/support

View File

@@ -648,7 +648,7 @@ namespace GHelper.Ally
if (init) if (init)
{ {
WakeUp(); WakeUp();
InputDispatcher.SetBacklightAuto(true); InputDispatcher.SetBacklightAuto();
} }
AsusHid.WriteInput([AsusHid.INPUT_ID, 0xD1, 0x01, 0x01, (byte)_applyMode], "Controller"); AsusHid.WriteInput([AsusHid.INPUT_ID, 0xD1, 0x01, 0x01, (byte)_applyMode], "Controller");

View File

@@ -36,7 +36,8 @@ namespace GHelper.AnimeMatrix
public AniMatrixControl(SettingsForm settingsForm) public AniMatrixControl(SettingsForm settingsForm)
{ {
settings = settingsForm; settings = settingsForm;
if (!AppConfig.IsSlash() && !AppConfig.IsAnimeMatrix()) return;
try try
{ {
if (AppConfig.IsSlash()) if (AppConfig.IsSlash())
@@ -213,7 +214,7 @@ namespace GHelper.AnimeMatrix
switch (running) switch (running)
{ {
case 2: case 2:
SetMatrixPicture(AppConfig.GetString("matrix_picture")); SetMatrixPicture(AppConfig.GetString("matrix_picture"), false);
break; break;
case 3: case 3:
SetMatrixClock(); SetMatrixClock();

View File

@@ -410,7 +410,7 @@ namespace GHelper.AnimeMatrix
if (DateTime.Now.Second % 2 != 0) timeFormat = timeFormat.Replace(":", " "); if (DateTime.Now.Second % 2 != 0) timeFormat = timeFormat.Replace(":", " ");
Clear(); Clear();
Text(DateTime.Now.ToString(timeFormat), 15, 2, 25); Text(DateTime.Now.ToString(timeFormat), 15, 7 - FullRows / 2, 25);
Text(DateTime.Now.ToString(dateFormat), 11.5F, 0, 14); Text(DateTime.Now.ToString(dateFormat), 11.5F, 0, 14);
Present(); Present();

View File

@@ -432,6 +432,11 @@ public static class AppConfig
return ContainsModel("GA401") || ContainsModel("FX517Z") || ContainsModel("FX516P") || ContainsModel("X13") || IsARCNM() || ContainsModel("FA617N") || ContainsModel("FA617X") || NoAura(); return ContainsModel("GA401") || ContainsModel("FX517Z") || ContainsModel("FX516P") || ContainsModel("X13") || IsARCNM() || ContainsModel("FA617N") || ContainsModel("FA617X") || NoAura();
} }
public static bool IsAnimeMatrix()
{
return ContainsModel("GA401") || ContainsModel("GA402") || ContainsModel("GU604V");
}
public static bool IsSlash() public static bool IsSlash()
{ {
return ContainsModel("GA403") || ContainsModel("GU605") || ContainsModel("GA605"); return ContainsModel("GA403") || ContainsModel("GU605") || ContainsModel("GA605");
@@ -504,7 +509,7 @@ public static class AppConfig
public static bool NoWMI() public static bool NoWMI()
{ {
return ContainsModel("GL704G") || ContainsModel("GM501G"); return ContainsModel("GL704G") || ContainsModel("GM501G") || ContainsModel("GX501G");
} }
public static bool IsNoDirectRGB() public static bool IsNoDirectRGB()
@@ -648,6 +653,11 @@ public static class AppConfig
return ContainsModel("GV301RA") || ContainsModel("GV302XA") || IsAlly(); return ContainsModel("GV301RA") || ContainsModel("GV302XA") || IsAlly();
} }
public static bool NoGpu()
{
return Is("no_gpu") || ContainsModel("UX540");
}
public static bool IsHardwareTouchpadToggle() public static bool IsHardwareTouchpadToggle()
{ {
return ContainsModel("FA507"); return ContainsModel("FA507");
@@ -691,17 +701,22 @@ public static class AppConfig
// 2024 Models support Dynamic Lighting // 2024 Models support Dynamic Lighting
public static bool IsDynamicLighting() public static bool IsDynamicLighting()
{ {
return IsSlash() || IsIntelHX() || ContainsModel("FA607P") || ContainsModel("FX607J") || ContainsModel("FA507U"); return IsSlash() || IsIntelHX() || IsTUF();
} }
public static bool IsForceMiniled() public static bool IsForceMiniled()
{ {
return ContainsModel("G834JYR") || ContainsModel("G834JZR") || Is("force_miniled"); return ContainsModel("G834JYR") || ContainsModel("G834JZR") || Is("force_miniled");
} }
public static bool SaveDimming() public static bool SaveDimming()
{ {
return Is("save_dimming"); return Is("save_dimming");
} }
public static bool IsAutoStatusLed()
{
return Is("auto_status_led");
}
} }

View File

@@ -129,6 +129,7 @@ public class AsusACPI
public const int ScreenPadToggle = 0x00050031; public const int ScreenPadToggle = 0x00050031;
public const int ScreenPadBrightness = 0x00050032; public const int ScreenPadBrightness = 0x00050032;
public const int CameraShutter = 0x00060078;
public const int CameraLed = 0x00060079; public const int CameraLed = 0x00060079;
public const int StatusLed = 0x000600C2; public const int StatusLed = 0x000600C2;

View File

@@ -2,31 +2,46 @@
namespace GHelper.Battery namespace GHelper.Battery
{ {
internal class BatteryControl public static class BatteryControl
{ {
static bool _chargeFull = AppConfig.Is("charge_full");
public static bool chargeFull
{
get
{
return _chargeFull;
}
set
{
AppConfig.Set("charge_full", value ? 1 : 0);
_chargeFull = value;
}
}
public static void ToggleBatteryLimitFull() public static void ToggleBatteryLimitFull()
{ {
if (AppConfig.Is("charge_full")) SetBatteryChargeLimit(); if (chargeFull) SetBatteryChargeLimit();
else SetBatteryLimitFull(); else SetBatteryLimitFull();
} }
public static void SetBatteryLimitFull() public static void SetBatteryLimitFull()
{ {
AppConfig.Set("charge_full", 1); chargeFull = true;
Program.acpi.DeviceSet(AsusACPI.BatteryLimit, 100, "BatteryLimit"); Program.acpi.DeviceSet(AsusACPI.BatteryLimit, 100, "BatteryLimit");
Program.settingsForm.VisualiseBatteryFull(); Program.settingsForm.VisualiseBatteryFull();
} }
public static void UnSetBatteryLimitFull() public static void UnSetBatteryLimitFull()
{ {
AppConfig.Set("charge_full", 0); chargeFull = false;
Logger.WriteLine("Battery fully charged");
Program.settingsForm.Invoke(Program.settingsForm.VisualiseBatteryFull); Program.settingsForm.Invoke(Program.settingsForm.VisualiseBatteryFull);
} }
public static void AutoBattery(bool init = false) public static void AutoBattery(bool init = false)
{ {
if (AppConfig.Is("charge_full") && !init) SetBatteryLimitFull(); if (chargeFull && !init) SetBatteryLimitFull();
else SetBatteryChargeLimit(); else SetBatteryChargeLimit();
} }
@@ -46,7 +61,7 @@ namespace GHelper.Battery
Program.acpi.DeviceSet(AsusACPI.BatteryLimit, limit, "BatteryLimit"); Program.acpi.DeviceSet(AsusACPI.BatteryLimit, limit, "BatteryLimit");
AppConfig.Set("charge_limit", limit); AppConfig.Set("charge_limit", limit);
AppConfig.Set("charge_full", 0); chargeFull = false;
Program.settingsForm.VisualiseBattery(limit); Program.settingsForm.VisualiseBattery(limit);
} }

615
app/Extra.Designer.cs generated

File diff suppressed because it is too large Load Diff

View File

@@ -37,6 +37,7 @@ namespace GHelper
{"brightness_up", Properties.Strings.BrightnessUp}, {"brightness_up", Properties.Strings.BrightnessUp},
{"visual", Properties.Strings.VisualMode}, {"visual", Properties.Strings.VisualMode},
{"touchscreen", Properties.Strings.ToggleTouchscreen }, {"touchscreen", Properties.Strings.ToggleTouchscreen },
{"micmute", Properties.Strings.MuteMic},
{"ghelper", Properties.Strings.OpenGHelper}, {"ghelper", Properties.Strings.OpenGHelper},
{"custom", Properties.Strings.Custom} {"custom", Properties.Strings.Custom}
}; };
@@ -62,6 +63,7 @@ namespace GHelper
break; break;
case "m3": case "m3":
customActions[""] = Properties.Strings.MuteMic; customActions[""] = Properties.Strings.MuteMic;
customActions.Remove("micmute");
break; break;
case "m4": case "m4":
customActions[""] = Properties.Strings.OpenGHelper; customActions[""] = Properties.Strings.OpenGHelper;
@@ -421,7 +423,7 @@ namespace GHelper
var statusLed = Program.acpi.DeviceGet(AsusACPI.StatusLed); var statusLed = Program.acpi.DeviceGet(AsusACPI.StatusLed);
checkStatusLed.Visible = statusLed >= 0; checkStatusLed.Visible = statusLed >= 0;
checkStatusLed.Checked = (statusLed > 0); checkStatusLed.Checked = (statusLed > 0);
checkStatusLed.CheckedChanged += CheckLEDStatus_CheckedChanged; ; checkStatusLed.CheckedChanged += CheckLEDStatus_CheckedChanged;
checkBWIcon.Checked = AppConfig.IsBWIcon(); checkBWIcon.Checked = AppConfig.IsBWIcon();
@@ -458,7 +460,7 @@ namespace GHelper
private void CheckLEDStatus_CheckedChanged(object? sender, EventArgs e) private void CheckLEDStatus_CheckedChanged(object? sender, EventArgs e)
{ {
Program.acpi.DeviceSet(AsusACPI.StatusLed, (checkStatusLed.Checked ? 7 : 0), "StatusLED"); InputDispatcher.SetStatusLED(checkStatusLed.Checked);
} }
private void CheckBWIcon_CheckedChanged(object? sender, EventArgs e) private void CheckBWIcon_CheckedChanged(object? sender, EventArgs e)

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
@@ -48,7 +48,7 @@
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter

View File

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

View File

@@ -62,8 +62,7 @@ public class AmdGpuControl : IGpuControl
public AmdGpuControl() public AmdGpuControl()
{ {
if (!Adl2.Load()) if (AppConfig.NoGpu() || !Adl2.Load()) return;
return;
try try
{ {

View File

@@ -22,6 +22,12 @@ namespace GHelper.Gpu
public void InitGPUMode() public void InitGPUMode()
{ {
if (AppConfig.NoGpu())
{
settings.HideGPUModes(false);
return;
}
int eco = Program.acpi.DeviceGet(AsusACPI.GPUEco); int eco = Program.acpi.DeviceGet(AsusACPI.GPUEco);
int mux = Program.acpi.DeviceGet(AsusACPI.GPUMux); int mux = Program.acpi.DeviceGet(AsusACPI.GPUMux);

View File

@@ -241,7 +241,7 @@ public static class HardwareControl
if (fullCapacity > 0 && chargeCapacity > 0) if (fullCapacity > 0 && chargeCapacity > 0)
{ {
batteryCapacity = Math.Min(100, (decimal)chargeCapacity / (decimal)fullCapacity * 100); batteryCapacity = Math.Min(100, (decimal)chargeCapacity / (decimal)fullCapacity * 100);
if (batteryCapacity > 99) BatteryControl.UnSetBatteryLimitFull(); if (batteryCapacity > 99 && BatteryControl.chargeFull) BatteryControl.UnSetBatteryLimitFull();
if (chargeWatt) if (chargeWatt)
{ {
batteryCharge = Math.Round((decimal)chargeCapacity / 1000, 1).ToString() + "Wh"; batteryCharge = Math.Round((decimal)chargeCapacity / 1000, 1).ToString() + "Wh";
@@ -251,8 +251,6 @@ public static class HardwareControl
batteryCharge = Math.Round(batteryCapacity, 1) + "%"; batteryCharge = Math.Round(batteryCapacity, 1) + "%";
} }
} }
} }
public static bool IsUsedGPU(int threshold = 10) public static bool IsUsedGPU(int threshold = 10)
@@ -287,6 +285,7 @@ public static class HardwareControl
public static void RecreateGpuControl() public static void RecreateGpuControl()
{ {
if (AppConfig.NoGpu()) return;
try try
{ {
GpuControl?.Dispose(); GpuControl?.Dispose();

View File

@@ -14,9 +14,16 @@ namespace GHelper.Input
{ {
System.Timers.Timer timer = new System.Timers.Timer(1000); System.Timers.Timer timer = new System.Timers.Timer(1000);
public static bool backlightActivity = true; public static bool backlightActivity = true;
public static bool lidClose = false;
public static Keys keyProfile = Keys.F5; public static Keys keyProfile = (Keys)AppConfig.Get("keybind_profile", (int)Keys.F5);
public static Keys keyApp = Keys.F12; public static Keys keyApp = (Keys)AppConfig.Get("keybind_app", (int)Keys.F12);
public static Keys keyProfile0 = (Keys)AppConfig.Get("keybind_profile_0", (int)Keys.F17);
public static Keys keyProfile1 = (Keys)AppConfig.Get("keybind_profile_1", (int)Keys.F18);
public static Keys keyProfile2 = (Keys)AppConfig.Get("keybind_profile_2", (int)Keys.F16);
public static Keys keyProfile3 = (Keys)AppConfig.Get("keybind_profile_3", (int)Keys.F19);
public static Keys keyProfile4 = (Keys)AppConfig.Get("keybind_profile_4", (int)Keys.F20);
static ModeControl modeControl = Program.modeControl; static ModeControl modeControl = Program.modeControl;
static ScreenControl screenControl = new ScreenControl(); static ScreenControl screenControl = new ScreenControl();
@@ -79,9 +86,14 @@ namespace GHelper.Input
Program.acpi.DeviceInit(); Program.acpi.DeviceInit();
if (!OptimizationService.IsRunning()) if (!OptimizationService.IsRunning())
{
Program.acpi.DeviceGet(AsusACPI.CameraShutter);
listener = new KeyboardListener(HandleEvent); listener = new KeyboardListener(HandleEvent);
}
else else
{
Logger.WriteLine("Optimization service is running"); Logger.WriteLine("Optimization service is running");
}
InitBacklightTimer(); InitBacklightTimer();
@@ -101,10 +113,6 @@ namespace GHelper.Input
{ {
hook.UnregisterAll(); hook.UnregisterAll();
// CTRL + SHIFT + F5 to cycle profiles
if (AppConfig.Get("keybind_profile") != -1) keyProfile = (Keys)AppConfig.Get("keybind_profile");
if (AppConfig.Get("keybind_app") != -1) keyApp = (Keys)AppConfig.Get("keybind_app");
string actionM1 = AppConfig.GetString("m1"); string actionM1 = AppConfig.GetString("m1");
string actionM2 = AppConfig.GetString("m2"); string actionM2 = AppConfig.GetString("m2");
@@ -118,7 +126,6 @@ namespace GHelper.Input
if (!AppConfig.Is("skip_hotkeys")) if (!AppConfig.Is("skip_hotkeys"))
{ {
if (AppConfig.IsDUO()) if (AppConfig.IsDUO())
{ {
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F7); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F7);
@@ -130,11 +137,11 @@ namespace GHelper.Input
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F14); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F14);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F15); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F15);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F16); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile0);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F17); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile1);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F18); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile2);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F19); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile3);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F20); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile4);
hook.RegisterHotKey(ModifierKeys.Control, Keys.VolumeDown); hook.RegisterHotKey(ModifierKeys.Control, Keys.VolumeDown);
hook.RegisterHotKey(ModifierKeys.Control, Keys.VolumeUp); hook.RegisterHotKey(ModifierKeys.Control, Keys.VolumeUp);
@@ -426,6 +433,12 @@ namespace GHelper.Input
{ {
if (e.Key == keyProfile) modeControl.CyclePerformanceMode(true); if (e.Key == keyProfile) modeControl.CyclePerformanceMode(true);
if (e.Key == keyProfile0) modeControl.SetPerformanceMode(0, true);
if (e.Key == keyProfile1) modeControl.SetPerformanceMode(1, true);
if (e.Key == keyProfile2) modeControl.SetPerformanceMode(2, true);
if (e.Key == keyProfile3) modeControl.SetPerformanceMode(3, true);
if (e.Key == keyProfile4) modeControl.SetPerformanceMode(4, true);
switch (e.Key) switch (e.Key)
{ {
case Keys.F1: case Keys.F1:
@@ -450,26 +463,13 @@ namespace GHelper.Input
ToggleScreenRate(); ToggleScreenRate();
break; break;
case Keys.F14: case Keys.F14:
Program.toast.RunToast(Properties.Strings.EcoMode);
Program.settingsForm.gpuControl.SetGPUMode(AsusACPI.GPUModeEco); Program.settingsForm.gpuControl.SetGPUMode(AsusACPI.GPUModeEco);
break; break;
case Keys.F15: case Keys.F15:
Program.toast.RunToast(Properties.Strings.StandardMode);
Program.settingsForm.gpuControl.SetGPUMode(AsusACPI.GPUModeStandard); Program.settingsForm.gpuControl.SetGPUMode(AsusACPI.GPUModeStandard);
break; break;
case Keys.F16:
modeControl.SetPerformanceMode(2, true);
break;
case Keys.F17:
modeControl.SetPerformanceMode(0, true);
break;
case Keys.F18:
modeControl.SetPerformanceMode(1, true);
break;
case Keys.F19:
modeControl.SetPerformanceMode(3, true);
break;
case Keys.F20:
modeControl.SetPerformanceMode(4, true);
break;
} }
} }
@@ -669,7 +669,7 @@ namespace GHelper.Input
bool fnLock = !AppConfig.Is("fn_lock"); bool fnLock = !AppConfig.Is("fn_lock");
AppConfig.Set("fn_lock", fnLock ? 1 : 0); AppConfig.Set("fn_lock", fnLock ? 1 : 0);
if (AppConfig.IsHardwareFnLock()) if (AppConfig.IsHardwareFnLock())
HardwareFnLock(fnLock); HardwareFnLock(fnLock);
else else
Program.settingsForm.BeginInvoke(Program.inputDispatcher.RegisterKeys); Program.settingsForm.BeginInvoke(Program.inputDispatcher.RegisterKeys);
@@ -746,6 +746,7 @@ namespace GHelper.Input
KeyProcess("fne"); KeyProcess("fne");
return; return;
case 174: // FN+F5 case 174: // FN+F5
case 153: // FN+F5 OLD MODELS
case 157: // Zenbook DUO FN+F case 157: // Zenbook DUO FN+F
modeControl.CyclePerformanceMode(Control.ModifierKeys == Keys.Shift); modeControl.CyclePerformanceMode(Control.ModifierKeys == Keys.Shift);
return; return;
@@ -877,10 +878,22 @@ namespace GHelper.Input
return Math.Max(Math.Min(3, backlight), 0); return Math.Max(Math.Min(3, backlight), 0);
} }
public static void SetBacklightAuto(bool init = false) public static void AutoKeyboard()
{ {
if (init) Aura.Init(); if (AppConfig.HasTabletMode()) TabletMode();
Aura.ApplyBrightness(GetBacklight(), "Auto", init); if (lidClose || AppConfig.Is("skip_aura")) return;
Aura.Init();
Aura.ApplyPower();
Aura.ApplyAura();
SetBacklightAuto();
}
public static void SetBacklightAuto()
{
if (lidClose) return;
Aura.ApplyBrightness(GetBacklight(), "Auto");
} }
public static void SetBacklight(int delta, bool force = false) public static void SetBacklight(int delta, bool force = false)
@@ -936,33 +949,55 @@ namespace GHelper.Input
public static void ToggleCamera() public static void ToggleCamera()
{ {
if (!ProcessHelper.IsUserAdministrator()) return; int cameraShutter = Program.acpi.DeviceGet(AsusACPI.CameraShutter);
string CameraRegistryKeyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\webcam"; if (cameraShutter == 0)
string CameraRegistryValueName = "Value";
try
{ {
var status = (string?)Registry.GetValue(CameraRegistryKeyPath, CameraRegistryValueName, ""); Program.acpi.DeviceSet(AsusACPI.CameraShutter, 1, "CameraShutterOn");
Program.toast.RunToast($"Camera Off");
}
else if (cameraShutter == 1)
{
Program.acpi.DeviceSet(AsusACPI.CameraShutter, 0, "CameraShutterOff");
Program.toast.RunToast($"Camera On");
}
else if (cameraShutter == 262144)
{
Program.toast.RunToast($"Camera Off");
}
else if (cameraShutter == 262145)
{
Program.toast.RunToast($"Camera On");
}
else
{
if (!ProcessHelper.IsUserAdministrator()) return;
if (status == "Allow") status = "Deny"; string CameraRegistryKeyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\webcam";
else if (status == "Deny") status = "Allow"; string CameraRegistryValueName = "Value";
else
try
{ {
Logger.WriteLine("Unknown camera status"); var status = (string?)Registry.GetValue(CameraRegistryKeyPath, CameraRegistryValueName, "");
return;
if (status == "Allow") status = "Deny";
else if (status == "Deny") status = "Allow";
else
{
Logger.WriteLine("Unknown camera status");
return;
}
Registry.SetValue(CameraRegistryKeyPath, CameraRegistryValueName, status, RegistryValueKind.String);
Program.acpi.DeviceSet(AsusACPI.CameraLed, (status == "Deny" ? 1 : 0), "Camera");
Program.toast.RunToast($"Camera " + (status == "Deny" ? "Off" : "On"));
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
} }
Registry.SetValue(CameraRegistryKeyPath, CameraRegistryValueName, status, RegistryValueKind.String);
Program.acpi.DeviceSet(AsusACPI.CameraLed, (status == "Deny" ? 1 : 0), "Camera");
Program.toast.RunToast($"Camera " + (status == "Deny" ? "Off" : "On"));
} }
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
}
} }
private static System.Threading.Timer screenpadActionTimer; private static System.Threading.Timer screenpadActionTimer;
@@ -980,7 +1015,7 @@ namespace GHelper.Input
if (b < 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, 0, "ScreenpadOff"); if (b < 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, 0, "ScreenpadOff");
}; };
if(delay <= 0 || instant) //instant action if (delay <= 0 || instant) //instant action
{ {
action(brightness); action(brightness);
} }
@@ -1024,6 +1059,28 @@ namespace GHelper.Input
Program.toast.RunToast($"Screen Pad {toast}", delta > 0 ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown); Program.toast.RunToast($"Screen Pad {toast}", delta > 0 ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown);
} }
public static void InitScreenpad()
{
if (!AppConfig.IsDUO()) return;
int brightness = AppConfig.Get("screenpad");
if (brightness >= 0) ApplyScreenpadAction(brightness);
}
public static void SetStatusLED(bool status)
{
Program.acpi.DeviceSet(AsusACPI.StatusLed, status ? 7 : 0, "StatusLED");
}
public static void InitStatusLed()
{
if (AppConfig.IsAutoStatusLed()) SetStatusLED(true);
}
public static void ShutdownStatusLed()
{
if (AppConfig.IsAutoStatusLed()) SetStatusLED(false);
}
static void LaunchProcess(string command = "") static void LaunchProcess(string command = "")
{ {
if (string.IsNullOrEmpty(command)) return; if (string.IsNullOrEmpty(command)) return;

View File

@@ -56,6 +56,7 @@ namespace GHelper.Input
input.ReadTimeout = int.MaxValue; input.ReadTimeout = int.MaxValue;
var data = input.Read(); var data = input.Read();
if (cancellationTokenSource.Token.IsCancellationRequested) break;
if (data.Length > 1 && data[0] == AsusHid.INPUT_ID && data[1] > 0 && data[1] != 236) if (data.Length > 1 && data[0] == AsusHid.INPUT_ID && data[1] > 0 && data[1] != 236)
{ {
Logger.WriteLine($"Key: {data[1]}"); Logger.WriteLine($"Key: {data[1]}");

View File

@@ -81,7 +81,7 @@ namespace GHelper
{ {
AppConfig.Set("matrix_contrast", trackContrast.Value); AppConfig.Set("matrix_contrast", trackContrast.Value);
AppConfig.Set("matrix_gamma", trackGamma.Value); AppConfig.Set("matrix_gamma", trackGamma.Value);
SetMatrixPicture(); SetMatrixPicture(false);
} }

View File

@@ -110,30 +110,24 @@ namespace GHelper.Mode
if (notify) Toast(); if (notify) Toast();
// Power plan from config or defaulting to balanced if (!AppConfig.Is("skip_powermode"))
if (AppConfig.GetModeString("scheme") is not null) {
PowerNative.SetPowerPlan(AppConfig.GetModeString("scheme")); // Power plan from config or defaulting to balanced
else if (AppConfig.GetModeString("scheme") is not null)
PowerNative.SetBalancedPowerPlan(); PowerNative.SetPowerPlan(AppConfig.GetModeString("scheme"));
else
PowerNative.SetBalancedPowerPlan();
// Windows power mode // Windows power mode
if (AppConfig.GetModeString("powermode") is not null) if (AppConfig.GetModeString("powermode") is not null)
PowerNative.SetPowerMode(AppConfig.GetModeString("powermode")); PowerNative.SetPowerMode(AppConfig.GetModeString("powermode"));
else else
PowerNative.SetPowerMode(Modes.GetBase(mode)); PowerNative.SetPowerMode(Modes.GetBase(mode));
}
// CPU Boost setting override // CPU Boost setting override
if (AppConfig.GetMode("auto_boost") != -1) if (AppConfig.GetMode("auto_boost") != -1)
PowerNative.SetCPUBoost(AppConfig.GetMode("auto_boost")); PowerNative.SetCPUBoost(AppConfig.GetMode("auto_boost"));
//BatteryControl.SetBatteryChargeLimit();
/*
if (NativeMethods.PowerGetEffectiveOverlayScheme(out Guid activeScheme) == 0)
{
Debug.WriteLine("Effective :" + activeScheme);
}
*/
settings.FansInit(); settings.FansInit();
} }
@@ -162,7 +156,8 @@ namespace GHelper.Mode
modeToggleTimer.Start(); modeToggleTimer.Start();
Modes.SetCurrent(Modes.GetNext(back)); Modes.SetCurrent(Modes.GetNext(back));
Toast(); Toast();
} else }
else
{ {
SetPerformanceMode(Modes.GetNext(back), true); SetPerformanceMode(Modes.GetNext(back), true);
} }
@@ -385,7 +380,7 @@ namespace GHelper.Mode
if (gpu_power >= AsusACPI.MinGPUPower && gpu_power <= AsusACPI.MaxGPUPower && Program.acpi.DeviceGet(AsusACPI.GPU_POWER) >= 0) if (gpu_power >= AsusACPI.MinGPUPower && gpu_power <= AsusACPI.MaxGPUPower && Program.acpi.DeviceGet(AsusACPI.GPU_POWER) >= 0)
Program.acpi.DeviceSet(AsusACPI.GPU_POWER, gpu_power, "PowerLimit TGP (GPU VAR)"); Program.acpi.DeviceSet(AsusACPI.GPU_POWER, gpu_power, "PowerLimit TGP (GPU VAR)");
if (gpu_boost >= AsusACPI.MinGPUBoost && gpu_boost <= AsusACPI.MaxGPUBoost && Program.acpi.DeviceGet(AsusACPI.PPT_GPUC0) >= 0) if (gpu_boost >= AsusACPI.MinGPUBoost && gpu_boost <= AsusACPI.MaxGPUBoost && Program.acpi.DeviceGet(AsusACPI.PPT_GPUC0) >= 0)
boostResult = Program.acpi.DeviceSet(AsusACPI.PPT_GPUC0, gpu_boost, "PowerLimit C0 (GPU BOOST)"); boostResult = Program.acpi.DeviceSet(AsusACPI.PPT_GPUC0, gpu_boost, "PowerLimit C0 (GPU BOOST)");
if (gpu_temp >= AsusACPI.MinGPUTemp && gpu_temp <= AsusACPI.MaxGPUTemp && Program.acpi.DeviceGet(AsusACPI.PPT_GPUC2) >= 0) if (gpu_temp >= AsusACPI.MinGPUTemp && gpu_temp <= AsusACPI.MaxGPUTemp && Program.acpi.DeviceGet(AsusACPI.PPT_GPUC2) >= 0)

View File

@@ -175,6 +175,7 @@ namespace GHelper.Mode
if (activeSchemeGuid.ToString() != balanced && !AppConfig.Is("skip_power_plan")) if (activeSchemeGuid.ToString() != balanced && !AppConfig.Is("skip_power_plan"))
{ {
Logger.WriteLine($"Changing power plan from {activeSchemeGuid.ToString()} to Balanced");
SetPowerPlan(balanced); SetPowerPlan(balanced);
} }
} }

View File

@@ -481,9 +481,8 @@ namespace GHelper.Peripherals.Mouse
{ {
try try
{ {
HidSharp.DeviceList.Local.GetHidDevices(VendorID(), ProductID()) return HidSharp.DeviceList.Local.GetHidDevices(VendorID(), ProductID())
.First(x => x.DevicePath.Contains(path)); .FirstOrDefault(x => x.DevicePath.Contains(path)) != null;
return true;
} }
catch catch
{ {

View File

@@ -6,6 +6,7 @@ using GHelper.Helpers;
using GHelper.Input; using GHelper.Input;
using GHelper.Mode; using GHelper.Mode;
using GHelper.Peripherals; using GHelper.Peripherals;
using GHelper.USB;
using Microsoft.Win32; using Microsoft.Win32;
using Ryzen; using Ryzen;
using System.Diagnostics; using System.Diagnostics;
@@ -172,6 +173,7 @@ namespace GHelper
{ {
gpuControl.StandardModeFix(); gpuControl.StandardModeFix();
BatteryControl.AutoBattery(); BatteryControl.AutoBattery();
InputDispatcher.ShutdownStatusLed();
} }
private static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e) private static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
@@ -231,7 +233,10 @@ namespace GHelper
Logger.WriteLine("AutoSetting for " + isPlugged.ToString()); Logger.WriteLine("AutoSetting for " + isPlugged.ToString());
BatteryControl.AutoBattery(init); BatteryControl.AutoBattery(init);
if (init) screenControl.InitMiniled(); if (init)
{
InputDispatcher.InitScreenpad();
}
inputDispatcher.Init(); inputDispatcher.Init();
@@ -253,9 +258,12 @@ namespace GHelper
} }
else else
{ {
settingsForm.AutoKeyboard(); InputDispatcher.AutoKeyboard();
} }
screenControl.InitMiniled();
InputDispatcher.InitStatusLed();
XGM.InitLight();
VisualControl.InitBrightness(); VisualControl.InitBrightness();
return true; return true;
@@ -268,6 +276,7 @@ namespace GHelper
{ {
Logger.WriteLine("Power Mode Changed:" + e.Mode.ToString()); Logger.WriteLine("Power Mode Changed:" + e.Mode.ToString());
gpuControl.StandardModeFix(); gpuControl.StandardModeFix();
InputDispatcher.ShutdownStatusLed();
} }
int delay = AppConfig.Get("charger_delay"); int delay = AppConfig.Get("charger_delay");

View File

@@ -151,7 +151,7 @@
<value>Animationsgeschwindigkeit</value> <value>Animationsgeschwindigkeit</value>
</data> </data>
<data name="AnimeMatrix" xml:space="preserve"> <data name="AnimeMatrix" xml:space="preserve">
<value>AniMeMatrix</value> <value>AniMe Matrix</value>
</data> </data>
<data name="AppAlreadyRunning" xml:space="preserve"> <data name="AppAlreadyRunning" xml:space="preserve">
<value>Die Anwendung läuft bereits</value> <value>Die Anwendung läuft bereits</value>

View File

@@ -272,8 +272,9 @@ namespace GHelper
labelCharge.Click += LabelCharge_Click; labelCharge.Click += LabelCharge_Click;
buttonDonate.Click += ButtonDonate_Click; buttonDonate.Click += ButtonDonate_Click;
if (AppConfig.Get("start_count") > 10 && !AppConfig.Is("donate_click")) int click = AppConfig.Get("donate_click");
if (AppConfig.Get("start_count") >= ((click < 10) ? 10 : click + 50))
{ {
buttonDonate.BorderColor = colorTurbo; buttonDonate.BorderColor = colorTurbo;
buttonDonate.Badge = true; buttonDonate.Badge = true;
@@ -293,9 +294,9 @@ namespace GHelper
private void ButtonDonate_Click(object? sender, EventArgs e) private void ButtonDonate_Click(object? sender, EventArgs e)
{ {
AppConfig.Set("donate_click", 1); AppConfig.Set("donate_click", AppConfig.Get("start_count"));
buttonDonate.Badge = false; buttonDonate.Badge = false;
Process.Start(new ProcessStartInfo("https://github.com/seerge/g-helper/wiki/Support-Project") { UseShellExecute = true }); Process.Start(new ProcessStartInfo("https://g-helper.com/support") { UseShellExecute = true });
} }
private void LabelDynamicLighting_Click(object? sender, EventArgs e) private void LabelDynamicLighting_Click(object? sender, EventArgs e)
@@ -674,14 +675,14 @@ namespace GHelper
{ {
case 0: case 0:
Logger.WriteLine("Lid Closed"); Logger.WriteLine("Lid Closed");
InputDispatcher.lidClose = AniMatrixControl.lidClose = true;
Aura.ApplyBrightness(0, "Lid"); Aura.ApplyBrightness(0, "Lid");
AniMatrixControl.lidClose = true;
matrixControl.SetLidMode(); matrixControl.SetLidMode();
break; break;
case 1: case 1:
Logger.WriteLine("Lid Open"); Logger.WriteLine("Lid Open");
InputDispatcher.lidClose = AniMatrixControl.lidClose = false;
Aura.ApplyBrightness(InputDispatcher.GetBacklight(), "Lid"); Aura.ApplyBrightness(InputDispatcher.GetBacklight(), "Lid");
AniMatrixControl.lidClose = false;
matrixControl.SetLidMode(); matrixControl.SetLidMode();
break; break;
} }
@@ -1541,24 +1542,6 @@ namespace GHelper
} }
public void AutoKeyboard()
{
InputDispatcher.SetBacklightAuto(true);
if (!AppConfig.Is("skip_aura"))
{
Aura.ApplyPower();
Aura.ApplyAura();
}
if (Program.acpi.IsXGConnected())
XGM.Light(AppConfig.Is("xmg_light"));
if (AppConfig.HasTabletMode()) InputDispatcher.TabletMode();
}
public void VisualizeXGM(int GPUMode = -1) public void VisualizeXGM(int GPUMode = -1)
{ {
@@ -1786,7 +1769,7 @@ namespace GHelper
public void VisualiseBatteryFull() public void VisualiseBatteryFull()
{ {
if (AppConfig.Is("charge_full")) if (BatteryControl.chargeFull)
{ {
buttonBatteryFull.BackColor = colorStandard; buttonBatteryFull.BackColor = colorStandard;
buttonBatteryFull.ForeColor = SystemColors.ControlLightLight; buttonBatteryFull.ForeColor = SystemColors.ControlLightLight;

View File

@@ -361,6 +361,11 @@ namespace GHelper.USB
AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xD1, 0x09, 0x01, power }, "Aura"); AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xD1, 0x09, 0x01, power }, "Aura");
} }
public static void ApplyPowerOff()
{
AsusHid.Write(AuraPowerMessage(new AuraPower()));
}
public static void ApplyPower() public static void ApplyPower()
{ {

View File

@@ -52,6 +52,10 @@ namespace GHelper.USB
Write(new byte[] { 0x5e, 0xc5, status ? (byte)0x50 : (byte)0 }); Write(new byte[] { 0x5e, 0xc5, status ? (byte)0x50 : (byte)0 });
} }
public static void InitLight()
{
if (Program.acpi.IsXGConnected()) Light(AppConfig.Is("xmg_light"));
}
public static void Reset() public static void Reset()
{ {

View File

@@ -3,11 +3,9 @@
[![GitHub release](https://img.shields.io/github/release/seerge/g-helper)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub release](https://img.shields.io/github/release/seerge/g-helper)](https://GitHub.com/seerge/g-helper/releases/)
[![Github all releases](https://img.shields.io/github/downloads/seerge/g-helper/total)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub stars](https://img.shields.io/github/stars/seerge/g-helper.svg?style=social)](https://GitHub.com/seerge/g-helper/stargazers/) <sup>[中文版点这里](https://github.com/seerge/g-helper/blob/main/docs/README.zh-CN.md)</sup> <sup>[日本語はこちら](https://github.com/seerge/g-helper/blob/main/docs/README.ja-JP.md)</sup> [![Github all releases](https://img.shields.io/github/downloads/seerge/g-helper/total)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub stars](https://img.shields.io/github/stars/seerge/g-helper.svg?style=social)](https://GitHub.com/seerge/g-helper/stargazers/) <sup>[中文版点这里](https://github.com/seerge/g-helper/blob/main/docs/README.zh-CN.md)</sup> <sup>[日本語はこちら](https://github.com/seerge/g-helper/blob/main/docs/README.ja-JP.md)</sup>
Small and lightweight Armoury Crate alternative for Asus laptops offering almost same functionality without extra load and unnecessary services. Small and lightweight Armoury Crate alternative for Asus laptops offering almost same functionality with a much smaller footprint. Works with all popular models, such as ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, Flow Z13, DUO, TUF Series, Strix or Scar Series, ProArt, Vivobook, Zenbook, ROG Ally or Ally X and many more!
Works with all popular models, such as ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, Flow Z13, DUO, TUF Series, Strix or Scar Series, ProArt, Vivobook, Zenbook, ROG Ally or Ally X and many more! # [:floppy_disk: Download](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
# [:floppy_disk:Download](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
**⭐ If you like the app - please spread the word about it online** **⭐ If you like the app - please spread the word about it online**
<table> <table>