Compare commits

...

102 Commits
v0.190 ... 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
Serge
011fdeeb36 Version bump 2024-10-22 17:10:53 +02:00
Serge
3df0aa04de Ctrl+Shift+Alt+F7/F8 to control screenpad brightness https://github.com/seerge/g-helper/issues/3281 2024-10-22 12:08:47 +02:00
Serge
9f364a331c Assigned FN+F to toggle modes on Zenbook DUO https://github.com/seerge/g-helper/issues/3281 2024-10-22 11:44:42 +02:00
Serge
08af10afef Merge branch 'main' of https://github.com/seerge/g-helper 2024-10-22 10:50:09 +02:00
Serge
4ea59d2669 Added UX840 to the list of DUO models https://github.com/seerge/g-helper/issues/3281 2024-10-22 10:50:07 +02:00
Serge
5eb0c1d095 Increased startup delay to 2 seconds https://github.com/seerge/g-helper/issues/3275 2024-10-21 13:38:06 +02:00
Serge
a8c32470b3 Option to override maximum refresh rate #3261 2024-10-15 10:41:48 +02:00
Serge
45709eb7d6 Option to override minimum refresh rate https://github.com/seerge/g-helper/issues/3261 2024-10-14 21:38:04 +02:00
Serge
ecbd926d81 Added Vivobook S16 M5606 to OLED list #3265 2024-10-14 18:48:44 +02:00
Serge
1cca7a5881 Restart input listener if connection was dropped https://github.com/seerge/g-helper/issues/3249 2024-10-13 17:59:23 +02:00
Serge
0d3332faf3 Version bump 2024-10-12 15:42:46 +02:00
Serge
aa74730e12 Toggle between % and Wh for battery charge https://github.com/seerge/g-helper/issues/3246 2024-10-11 18:06:15 +02:00
Serge
9b5e2acf90 Show remaining battery charge in Wh https://github.com/seerge/g-helper/issues/3246 2024-10-11 15:14:36 +02:00
Serge
3fafe63c42 Visual Mode handling 2024-10-11 11:56:39 +02:00
Serge
6c0252156c Option to disable Visual Mode 2024-10-11 11:15:03 +02:00
Serge
3a750c08b5 Added G834JZR to mini-led init list https://github.com/seerge/g-helper/issues/2802 2024-10-11 10:50:56 +02:00
Serge
e28f51cce6 Version bump 2024-10-05 11:35:19 +02:00
dantmnf
b0c48b9e63 IsOLED: Add Zenbook S 14 (Intel), Zenbook S 16 (AMD) (#3203) 2024-10-05 11:32:34 +02:00
Serge
ec17d8cb80 Limits 2024-10-04 18:18:54 +02:00
Serge
42ac2d627c Hide unsupported power limtis https://github.com/seerge/g-helper/discussions/3215 2024-10-04 12:11:09 +02:00
Serge
3c241cafba New translations strings.resx (Lithuanian) (#3197) 2024-10-01 19:24:10 +02:00
Serge
873fcc0591 Skip unsupported Lighting modes #3195 2024-09-30 20:58:24 +02:00
Serge
73d5a0bb90 Cleanup 2024-09-30 18:41:51 +02:00
Serge
ff5ac7de7e Re-apply Ally controller status on every wake up / reboot #3192 2024-09-30 18:41:21 +02:00
Serge
917fe112b8 Skip unsupported Lighting modes https://github.com/seerge/g-helper/issues/3195 2024-09-30 18:24:14 +02:00
Serge
4855733274 Re-apply Ally controller status on every wake up / reboot https://github.com/seerge/g-helper/issues/3192 2024-09-30 14:30:03 +02:00
Serge
740a34fa9c Merge branch 'main' of https://github.com/seerge/g-helper 2024-09-30 12:29:36 +02:00
Serge
534dc3d344 Init OOBE mode https://github.com/seerge/g-helper/pull/3169 2024-09-30 12:29:33 +02:00
Serge
a52a87bcfd New translations strings.resx (Chinese Traditional) (#3180) 2024-09-30 12:26:03 +02:00
Serge
cdeb4951dc Re-apply Ally controller status on every wake up / reboot https://github.com/seerge/g-helper/issues/3192 2024-09-30 12:13:22 +02:00
Serge
77d89505b3 Update GHelper.csproj 2024-09-29 11:49:00 +02:00
Serge
4be790dce0 Update tweaks 2024-09-28 17:39:05 +02:00
Serge
c9698a1613 Strix impact DPI correction https://github.com/seerge/g-helper/issues/3146 2024-09-28 17:30:21 +02:00
Serge
819506e7ee UI Tweaks 2024-09-28 09:31:39 +02:00
Serge
489616d255 Option to disable "gpu_mode_force_set" for GA503 https://github.com/seerge/g-helper/issues/3175 2024-09-26 13:22:21 +02:00
Serge
1103ab70f6 Extra delay when setting Ultimate from Eco https://github.com/seerge/g-helper/issues/3170 2024-09-25 19:48:38 +02:00
Serge
dbf0cbc3ac Dependencies update 2024-09-25 17:48:45 +02:00
Serge
a45d693937 Version bump 2024-09-25 08:15:49 +02:00
Serge
0db49af310 Config writing tweaks 2024-09-24 12:24:20 +02:00
Serge
28daaf9a4c Config writing tweaks 2024-09-24 11:56:18 +02:00
Serge
38d02ee7f9 Minimum possible number of E-Cores https://github.com/seerge/g-helper/issues/3160 2024-09-23 21:06:09 +02:00
Serge
c6d1b29a49 Touchscreen toggle toast tweaks https://github.com/seerge/g-helper/issues/3143 2024-09-23 15:24:28 +02:00
Serge
79cd773632 Version bump 2024-09-22 11:27:50 +02:00
Serge
897de4ed27 Option for Slash sleep animation on lid-close https://github.com/seerge/g-helper/discussions/3145 2024-09-22 10:59:55 +02:00
Serge
afa6dbb542 Flicker free dimming hotkey fix https://github.com/seerge/g-helper/issues/3152 2024-09-22 10:18:28 +02:00
Serge
80fbee2609 Cleanup 2024-09-21 17:53:10 +02:00
Serge
e1c83da19b Option to disable automated mode switching on power source change https://github.com/seerge/g-helper/issues/3139 2024-09-21 17:51:09 +02:00
Serge
59b5888632 Visual Mode tweaks 2024-09-21 12:54:32 +02:00
Serge
cd74c62908 Merge branch 'main' of https://github.com/seerge/g-helper 2024-09-21 12:38:28 +02:00
Serge
000fbe466f Slash Lighting lid close tweak https://github.com/seerge/g-helper/discussions/3145 2024-09-21 12:38:25 +02:00
Serge
ab08bd8ab4 Update README.md 2024-09-20 09:53:30 +02:00
Serge
9f157d323e Battery charge limiter UI fix https://github.com/seerge/g-helper/issues/3138 2024-09-19 23:16:37 +02:00
Serge
9c236ca17b Version bump 2024-09-19 13:25:33 +02:00
Serge
ba8effcaad MicMute Toggle for external hotkey https://github.com/seerge/g-helper/issues/3127 2024-09-18 10:02:21 +02:00
Serge
28f8cc95fd Improved GPU max power reading https://github.com/seerge/g-helper/discussions/3124 2024-09-18 09:50:33 +02:00
Serge
07f1edb02f Visual Mode tweaks 2024-09-18 09:45:01 +02:00
Serge
6758d9224d Set FN+V to change Visual Modes by default 2024-09-17 18:05:18 +02:00
Serge
5e51511df0 Brightness controls tweaks 2024-09-16 23:29:24 +02:00
Serge
e71d283474 Option to save flicker-free dimming per AC/DC state https://github.com/seerge/g-helper/issues/3112 2024-09-16 19:10:36 +02:00
Serge
d0f0bd9155 Added brightness adjustment step 2024-09-16 17:21:22 +02:00
41 changed files with 894 additions and 654 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

@@ -616,9 +616,9 @@ namespace GHelper.Ally
}
public static void ApplyXBoxStatus()
public static void DisableXBoxController(bool disabled)
{
AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xD1, 0x0B, 0x01, AppConfig.Is("controller_disabled") ? (byte)0x02 : (byte)0x01 }, "Status");
AsusHid.WriteInput([AsusHid.INPUT_ID, 0xD1, 0x0B, 0x01, disabled ? (byte)0x02 : (byte)0x01], $"ControllerDisabled: {disabled}");
}
public static void ApplyMode(ControllerMode applyMode = ControllerMode.Auto, bool init = false)
@@ -648,10 +648,10 @@ namespace GHelper.Ally
if (init)
{
WakeUp();
InputDispatcher.SetBacklightAuto(true);
InputDispatcher.SetBacklightAuto();
}
AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xD1, 0x01, 0x01, (byte)_applyMode }, "Controller");
AsusHid.WriteInput([AsusHid.INPUT_ID, 0xD1, 0x01, 0x01, (byte)_applyMode], "Controller");
//AsusHid.WriteInput(CommandSave, null);
BindZone(BindingZone.M1M2);
@@ -668,6 +668,13 @@ namespace GHelper.Ally
SetDeadzones();
if (init && AppConfig.Is("controller_disabled"))
{
Thread.Sleep(500);
DisableXBoxController(false);
DisableXBoxController(true);
}
});
}

View File

@@ -36,7 +36,8 @@ namespace GHelper.AnimeMatrix
public AniMatrixControl(SettingsForm settingsForm)
{
settings = settingsForm;
if (!AppConfig.IsSlash() && !AppConfig.IsAnimeMatrix()) return;
try
{
if (AppConfig.IsSlash())
@@ -111,8 +112,6 @@ namespace GHelper.AnimeMatrix
deviceSlash.SetEnabled(true);
deviceSlash.Init();
deviceSlash.SetLidMode(false);
switch ((SlashMode)running)
{
case SlashMode.Static:
@@ -150,6 +149,11 @@ namespace GHelper.AnimeMatrix
{
bool matrixLid = AppConfig.Is("matrix_lid");
if (deviceSlash is not null)
{
deviceSlash.SetLidMode(!matrixLid && AppConfig.Is("slash_sleep"));
}
if (matrixLid || force)
{
Logger.WriteLine($"Matrix LidClosed: {lidClose}");
@@ -210,7 +214,7 @@ namespace GHelper.AnimeMatrix
switch (running)
{
case 2:
SetMatrixPicture(AppConfig.GetString("matrix_picture"));
SetMatrixPicture(AppConfig.GetString("matrix_picture"), false);
break;
case 3:
SetMatrixClock();

View File

@@ -410,7 +410,7 @@ namespace GHelper.AnimeMatrix
if (DateTime.Now.Second % 2 != 0) timeFormat = timeFormat.Replace(":", " ");
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);
Present();

View File

@@ -209,7 +209,7 @@ namespace GHelper.AnimeMatrix
public void SetLidMode(bool status)
{
Set(CreatePacket([0xD8, 0x00, 0x00, 0x02, 0xA5, status ? (byte)0x80 : (byte)0x00]), $"DisableLidClose {status}");
Set(CreatePacket([0xD8, 0x00, 0x00, 0x02, 0xA5, status ? (byte)0x80 : (byte)0x00]), $"SlashLidCloseAnimation {status}");
}
public void SetSleepActive(bool status)

View File

@@ -12,7 +12,7 @@ public static class AppConfig
private static string? _bios;
private static Dictionary<string, object> config = new Dictionary<string, object>();
private static System.Timers.Timer timer = new System.Timers.Timer(1000);
private static System.Timers.Timer timer = new System.Timers.Timer(2000);
static AppConfig()
{
@@ -92,7 +92,9 @@ public static class AppConfig
Thread.Sleep(500);
if (File.ReadAllText(backup).Contains("}"))
var backupText = File.ReadAllText(backup);
if (backupText.Contains("{") && backupText.Contains("}"))
{
File.Copy(backup, configFile, true);
}
@@ -219,6 +221,7 @@ public static class AppConfig
private static void Write()
{
timer.Stop();
timer.Start();
}
@@ -302,27 +305,32 @@ public static class AppConfig
switch (mode)
{
case 1:
if (device == AsusFan.GPU)
curve = StringToBytes("14-3F-44-48-4C-50-54-62-16-1F-26-2D-39-47-55-5F");
else
curve = StringToBytes("14-3F-44-48-4C-50-54-62-11-1A-22-29-34-43-51-5A");
break;
case 2:
if (device == AsusFan.GPU)
curve = StringToBytes("3C-41-42-46-47-4B-4C-62-08-11-11-1D-1D-26-26-2D");
else
curve = StringToBytes("3C-41-42-46-47-4B-4C-62-03-0C-0C-16-16-22-22-29");
break;
case AsusACPI.PerformanceTurbo:
switch (device)
{
case AsusFan.GPU:
return StringToBytes("14-3F-44-48-4C-50-54-62-16-1F-26-2D-39-47-55-5F");
default:
return StringToBytes("14-3F-44-48-4C-50-54-62-11-1A-22-29-34-43-51-5A");
}
case AsusACPI.PerformanceSilent:
switch (device)
{
case AsusFan.GPU:
return StringToBytes("3C-41-42-46-47-4B-4C-62-08-11-11-1D-1D-26-26-2D");
default:
return StringToBytes("3C-41-42-46-47-4B-4C-62-03-0C-0C-16-16-22-22-29");
}
default:
if (device == AsusFan.GPU)
curve = StringToBytes("3A-3D-40-44-48-4D-51-62-0C-16-1D-1F-26-2D-34-4A");
else
curve = StringToBytes("3A-3D-40-44-48-4D-51-62-08-11-16-1A-22-29-30-45");
break;
switch (device)
{
case AsusFan.GPU:
return StringToBytes("3A-3D-40-44-48-4D-51-62-0C-16-1D-1F-26-2D-34-4A");
default:
return StringToBytes("3A-3D-40-44-48-4D-51-62-08-11-16-1A-22-29-30-45");
}
}
return curve;
}
public static string GetModeString(string name)
@@ -405,7 +413,7 @@ public static class AppConfig
public static bool IsDUO()
{
return ContainsModel("Duo") || ContainsModel("GX550") || ContainsModel("GX650");
return ContainsModel("Duo") || ContainsModel("GX550") || ContainsModel("GX650") || ContainsModel("UX840");
}
// G14 2020 has no aura, but media keys instead
@@ -424,6 +432,11 @@ public static class AppConfig
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()
{
return ContainsModel("GA403") || ContainsModel("GU605") || ContainsModel("GA605");
@@ -446,7 +459,7 @@ public static class AppConfig
public static bool IsOLED()
{
return ContainsModel("OLED") || IsSlash() || ContainsModel("M7600") || ContainsModel("UX64") || ContainsModel("UX34") || ContainsModel("UX53") || ContainsModel("K360") || ContainsModel("X150") || ContainsModel("M350") || ContainsModel("K650") || ContainsModel("UM53") || ContainsModel("K660") || ContainsModel("UX84") || ContainsModel("M650") || ContainsModel("M550") || ContainsModel("K340") || ContainsModel("K350") || ContainsModel("M140") || ContainsModel("UM340") || ContainsModel("S540") || ContainsModel("M7400") || ContainsModel("N650") || ContainsModel("HN7306") || ContainsModel("H7606");
return ContainsModel("OLED") || IsSlash() || ContainsModel("M7600") || ContainsModel("UX64") || ContainsModel("UX34") || ContainsModel("UX53") || ContainsModel("K360") || ContainsModel("X150") || ContainsModel("M350") || ContainsModel("K650") || ContainsModel("UM53") || ContainsModel("K660") || ContainsModel("UX84") || ContainsModel("M650") || ContainsModel("M550") || ContainsModel("K340") || ContainsModel("K350") || ContainsModel("M140") || ContainsModel("UM340") || ContainsModel("S540") || ContainsModel("M7400") || ContainsModel("N650") || ContainsModel("HN7306") || ContainsModel("H7606") || ContainsModel("UX5406") || ContainsModel("M5606");
}
public static bool IsNoOverdrive()
@@ -496,7 +509,7 @@ public static class AppConfig
public static bool NoWMI()
{
return ContainsModel("GL704G") || ContainsModel("GM501G");
return ContainsModel("GL704G") || ContainsModel("GM501G") || ContainsModel("GX501G");
}
public static bool IsNoDirectRGB()
@@ -632,7 +645,7 @@ public static class AppConfig
public static bool IsForceSetGPUMode()
{
return Is("gpu_mode_force_set") || ContainsModel("503");
return Is("gpu_mode_force_set") || (ContainsModel("503") && IsNotFalse("gpu_mode_force_set"));
}
public static bool IsNoGPUModes()
@@ -640,6 +653,11 @@ public static class AppConfig
return ContainsModel("GV301RA") || ContainsModel("GV302XA") || IsAlly();
}
public static bool NoGpu()
{
return Is("no_gpu") || ContainsModel("UX540");
}
public static bool IsHardwareTouchpadToggle()
{
return ContainsModel("FA507");
@@ -683,12 +701,22 @@ public static class AppConfig
// 2024 Models support Dynamic Lighting
public static bool IsDynamicLighting()
{
return IsSlash() || IsIntelHX() || ContainsModel("FA607P") || ContainsModel("FX607J") || ContainsModel("FA507U");
return IsSlash() || IsIntelHX() || IsTUF();
}
public static bool IsForceMiniled()
{
return ContainsModel("G834JYR") || Is("force_miniled");
return ContainsModel("G834JYR") || ContainsModel("G834JZR") || Is("force_miniled");
}
public static bool SaveDimming()
{
return Is("save_dimming");
}
public static bool IsAutoStatusLed()
{
return Is("auto_status_led");
}
}

View File

@@ -114,7 +114,7 @@ public class AsusACPI
public const int APU_MEM = 0x000600C1;
public const int TUF_KB_BRIGHTNESS = 0x00050021;
public const int VIVO_KB_BRIGHTNESS = 0x0005002F;
public const int KBD_BACKLIGHT_OOBE = 0x0005002F;
public const int TUF_KB = 0x00100056;
public const int TUF_KB2 = 0x0010005a;
@@ -129,6 +129,7 @@ public class AsusACPI
public const int ScreenPadToggle = 0x00050031;
public const int ScreenPadBrightness = 0x00050032;
public const int CameraShutter = 0x00060078;
public const int CameraLed = 0x00060079;
public const int StatusLed = 0x000600C2;
@@ -788,7 +789,6 @@ public class AsusACPI
{
int param = 0x80 | (brightness & 0x7F);
DeviceSet(TUF_KB_BRIGHTNESS, param, "TUF Brightness");
if (AppConfig.IsVivoZenPro()) DeviceSet(VIVO_KB_BRIGHTNESS, param, "VIVO Brightness");
}
@@ -831,6 +831,7 @@ public class AsusACPI
state = state | 0x01 << 8;
DeviceSet(TUF_KB_STATE, state, "TUF_KB");
if (AppConfig.IsVivoZenPro() && DeviceGet(KBD_BACKLIGHT_OOBE) >= 0) DeviceSet(KBD_BACKLIGHT_OOBE, 1, "VIVO OOBE");
}
public void SubscribeToEvents(Action<object, EventArrivedEventArgs> EventHandler)

View File

@@ -326,7 +326,8 @@ namespace GHelper
return;
}
LightingMode lm = supportedLightingModes[comboBoxLightingMode.SelectedIndex];
var index = comboBoxLightingMode.SelectedIndex;
LightingMode lm = supportedLightingModes[index < supportedLightingModes.Count ? index : 0 ];
LightingSetting? ls = mouse.LightingSettingForZone(visibleZone);
if (ls.LightingMode == lm)

View File

@@ -145,7 +145,7 @@ namespace GHelper.AutoUpdate
Logger.WriteLine(ex.Message);
}
Environment.Exit(0);
Application.Exit();
}
}

View File

@@ -2,31 +2,46 @@
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()
{
if (AppConfig.Is("charge_full")) SetBatteryChargeLimit();
if (chargeFull) SetBatteryChargeLimit();
else SetBatteryLimitFull();
}
public static void SetBatteryLimitFull()
{
AppConfig.Set("charge_full", 1);
chargeFull = true;
Program.acpi.DeviceSet(AsusACPI.BatteryLimit, 100, "BatteryLimit");
Program.settingsForm.VisualiseBatteryFull();
}
public static void UnSetBatteryLimitFull()
{
AppConfig.Set("charge_full", 0);
chargeFull = false;
Logger.WriteLine("Battery fully charged");
Program.settingsForm.Invoke(Program.settingsForm.VisualiseBatteryFull);
}
public static void AutoBattery(bool init = false)
{
if (AppConfig.Is("charge_full") && !init) SetBatteryLimitFull();
if (chargeFull && !init) SetBatteryLimitFull();
else SetBatteryChargeLimit();
}
@@ -39,14 +54,14 @@ namespace GHelper.Battery
if (AppConfig.IsChargeLimit6080())
{
if (limit > 85) limit = 100;
else if (limit >= 80) limit = 80;
else if (limit < 60) limit = 60;
else limit = 80;
}
Program.acpi.DeviceSet(AsusACPI.BatteryLimit, limit, "BatteryLimit");
AppConfig.Set("charge_limit", limit);
AppConfig.Set("charge_full", 0);
chargeFull = false;
Program.settingsForm.VisualiseBattery(limit);
}

View File

@@ -6,7 +6,14 @@ namespace GHelper.Display
{
public const int MAX_REFRESH = 1000;
public static int MIN_RATE = AppConfig.Get("min_rate", 60);
public static int MAX_RATE = AppConfig.Get("max_rate");
public static int GetMaxRate(string? laptopScreen)
{
if (MAX_RATE > 0) return MAX_RATE;
else return ScreenNative.GetMaxRefreshRate(laptopScreen);
}
public void AutoScreen(bool force = false)
{
@@ -15,7 +22,7 @@ namespace GHelper.Display
if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online)
SetScreen(MAX_REFRESH, 1);
else
SetScreen(60, 0);
SetScreen(MIN_RATE, 0);
}
else
{
@@ -29,7 +36,7 @@ namespace GHelper.Display
var refreshRate = ScreenNative.GetRefreshRate(laptopScreen);
if (refreshRate < 0) return;
ScreenNative.SetRefreshRate(laptopScreen, refreshRate > 60 ? 60 : ScreenNative.GetMaxRefreshRate(laptopScreen));
ScreenNative.SetRefreshRate(laptopScreen, refreshRate > MIN_RATE ? MIN_RATE : GetMaxRate(laptopScreen));
InitScreen();
}
@@ -43,7 +50,7 @@ namespace GHelper.Display
if (frequency >= MAX_REFRESH)
{
frequency = ScreenNative.GetMaxRefreshRate(laptopScreen);
frequency = GetMaxRate(laptopScreen);
}
if (frequency > 0 && frequency != refreshRate)
@@ -151,7 +158,7 @@ namespace GHelper.Display
{
var laptopScreen = ScreenNative.FindLaptopScreen();
int frequency = ScreenNative.GetRefreshRate(laptopScreen);
int maxFrequency = ScreenNative.GetMaxRefreshRate(laptopScreen);
int maxFrequency = GetMaxRate(laptopScreen);
if (maxFrequency > 0) AppConfig.Set("max_frequency", maxFrequency);
else maxFrequency = AppConfig.Get("max_frequency");

View File

@@ -1,4 +1,5 @@
using GHelper.Helpers;
using Microsoft.Win32;
using System.Management;
namespace GHelper.Display
@@ -37,6 +38,7 @@ namespace GHelper.Display
Cinema = 25,
Vivid = 13,
Eyecare = 17,
Disabled = 18,
}
public static class VisualControl
{
@@ -44,6 +46,7 @@ namespace GHelper.Display
private static int _brightness = 100;
private static bool _init = true;
private static bool _download = true;
private static string? _splendidPath = null;
private static System.Timers.Timer brightnessTimer = new System.Timers.Timer(200);
@@ -98,7 +101,7 @@ namespace GHelper.Display
foreach (FileInfo icm in icms)
{
//Logger.WriteLine(icm.FullName);
if (icm.Name.Contains("sRGB"))
{
try
@@ -106,7 +109,7 @@ namespace GHelper.Display
_modes.Add(isVivo ? SplendidGamut.VivoSRGB : SplendidGamut.sRGB, "Gamut: sRGB");
Logger.WriteLine(icm.FullName + " sRGB");
}
catch
catch
{
}
}
@@ -174,7 +177,8 @@ namespace GHelper.Display
{ SplendidCommand.FPS, "FPS"},
{ SplendidCommand.Cinema, "Cinema"},
{ SplendidCommand.Vivid, "Vivid" },
{ SplendidCommand.Eyecare, "Eyecare"}
{ SplendidCommand.Eyecare, "Eyecare"},
{ SplendidCommand.Disabled, "Disabled"}
};
}
@@ -204,6 +208,20 @@ namespace GHelper.Display
};
}
const string GameVisualKey = @"HKEY_CURRENT_USER\Software\ASUS\ARMOURY CRATE Service\GameVisual";
const string GameVisualValue = "ActiveGVStatus";
public static bool IsEnabled()
{
var status = (int?)Registry.GetValue(GameVisualKey, GameVisualValue, 1);
return status > 0;
}
public static void SetRegStatus(int status = 1)
{
Registry.SetValue(GameVisualKey, GameVisualValue, status, RegistryValueKind.DWord);
}
public static void SetGamut(int mode = -1)
{
if (skipGamut) return;
@@ -211,9 +229,19 @@ namespace GHelper.Display
AppConfig.Set("gamut", mode);
if (RunSplendid(SplendidCommand.GamutMode, 0, mode)) return;
if (_init)
var result = RunSplendid(SplendidCommand.GamutMode, 0, mode);
if (result == 0) return;
if (result == -1)
{
Logger.WriteLine("Gamut setting refused, reverting.");
RunSplendid(SplendidCommand.GamutMode, 0, (int)GetDefaultGamut());
if (ProcessHelper.IsUserAdministrator() && _download)
{
_download = false;
ColorProfileHelper.InstallProfile();
}
}
if (result == 1 && _init)
{
_init = false;
RunSplendid(SplendidCommand.Init);
@@ -224,7 +252,7 @@ namespace GHelper.Display
public static void SetVisual(SplendidCommand mode = SplendidCommand.Default, int whiteBalance = DefaultColorTemp, bool init = false)
{
if (mode == SplendidCommand.None) return;
if ((mode == SplendidCommand.Default || mode == SplendidCommand.VivoNormal) && init) return; // Skip default setting on init
if ((mode == SplendidCommand.Disabled || mode == SplendidCommand.Default || mode == SplendidCommand.VivoNormal) && init) return; // Skip default setting on init
if (!forceVisual && ScreenCCD.GetHDRStatus(true)) return;
if (!forceVisual && ScreenNative.GetRefreshRate(ScreenNative.FindLaptopScreen(true)) < 0) return;
@@ -234,12 +262,16 @@ namespace GHelper.Display
if (whiteBalance != DefaultColorTemp && !init) ProcessHelper.RunAsAdmin();
int? balance;
int? balance = null;
int command = 0;
switch (mode)
{
case SplendidCommand.Disabled:
command = 2;
break;
case SplendidCommand.Eyecare:
balance = 2;
balance = 4;
break;
case SplendidCommand.VivoNormal:
case SplendidCommand.VivoVivid:
@@ -253,9 +285,19 @@ namespace GHelper.Display
break;
}
if (RunSplendid(mode, 0, balance)) return;
if (_init)
int result = RunSplendid(mode, command, balance);
if (result == 0) return;
if (result == -1)
{
Logger.WriteLine("Visual mode setting refused, reverting.");
RunSplendid(SplendidCommand.Default, 0, DefaultColorTemp);
if (ProcessHelper.IsUserAdministrator() && _download)
{
_download = false;
ColorProfileHelper.InstallProfile();
}
}
if (result == 1 && _init)
{
_init = false;
RunSplendid(SplendidCommand.Init);
@@ -288,7 +330,7 @@ namespace GHelper.Display
return _splendidPath;
}
private static bool RunSplendid(SplendidCommand command, int? param1 = null, int? param2 = null)
private static int RunSplendid(SplendidCommand command, int? param1 = null, int? param2 = null)
{
var splendid = GetSplendidPath();
bool isVivo = AppConfig.IsVivoZenPro();
@@ -298,10 +340,16 @@ namespace GHelper.Display
{
if (command == SplendidCommand.DimmingVisual && isVivo) command = SplendidCommand.DimmingVivo;
var result = ProcessHelper.RunCMD(splendid, (int)command + " " + param1 + " " + param2);
if (result.Contains("file not exist") || (result.Length == 0 && !isVivo)) return false;
if (result.Contains("file not exist") || (result.Length == 0 && !isVivo)) return 1;
if (result.Contains("return code: -1")) return -1;
if (result.Contains("Visual is disabled"))
{
SetRegStatus(1);
return 1;
}
}
return true;
return 0;
}
private static void BrightnessTimerTimer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
@@ -309,28 +357,46 @@ namespace GHelper.Display
brightnessTimer.Stop();
if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6))) return;
if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6)) == 0) return;
if (_init)
{
_init = false;
RunSplendid(SplendidCommand.Init);
RunSplendid(SplendidCommand.Init, 4);
if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6))) return;
if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6)) == 0) return;
}
// GammaRamp Fallback
SetGamma(_brightness);
}
public static void InitBrightness()
{
if (!AppConfig.IsOLED()) return;
if (!AppConfig.SaveDimming()) return;
int brightness = GetBrightness();
if (brightness >= 0) SetBrightness(brightness);
}
private static bool IsOnBattery()
{
return AppConfig.SaveDimming() && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online;
}
public static int GetBrightness()
{
return AppConfig.Get(IsOnBattery() ? "brightness_battery" : "brightness", 100);
}
public static int SetBrightness(int brightness = -1, int delta = 0)
{
if (!AppConfig.IsOLED()) return -1;
if (brightness < 0) brightness = AppConfig.Get("brightness", 100);
if (brightness < 0) brightness = GetBrightness();
_brightness = Math.Max(0, Math.Min(100, brightness + delta));
AppConfig.Set("brightness", _brightness);
AppConfig.Set(IsOnBattery() ? "brightness_battery" : "brightness", _brightness);
brightnessTimer.Start();

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},
{"visual", Properties.Strings.VisualMode},
{"touchscreen", Properties.Strings.ToggleTouchscreen },
{"micmute", Properties.Strings.MuteMic},
{"ghelper", Properties.Strings.OpenGHelper},
{"custom", Properties.Strings.Custom}
};
@@ -62,6 +63,7 @@ namespace GHelper
break;
case "m3":
customActions[""] = Properties.Strings.MuteMic;
customActions.Remove("micmute");
break;
case "m4":
customActions[""] = Properties.Strings.OpenGHelper;
@@ -76,7 +78,8 @@ namespace GHelper
customActions.Remove("fnlock");
break;
case "fnv":
customActions[""] = EMPTY;
customActions[""] = Properties.Strings.VisualMode;
customActions.Remove("visual");
break;
case "fne":
customActions[""] = "Calculator";
@@ -420,7 +423,7 @@ namespace GHelper
var statusLed = Program.acpi.DeviceGet(AsusACPI.StatusLed);
checkStatusLed.Visible = statusLed >= 0;
checkStatusLed.Checked = (statusLed > 0);
checkStatusLed.CheckedChanged += CheckLEDStatus_CheckedChanged; ;
checkStatusLed.CheckedChanged += CheckLEDStatus_CheckedChanged;
checkBWIcon.Checked = AppConfig.IsBWIcon();
@@ -457,7 +460,7 @@ namespace GHelper
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)
@@ -504,7 +507,10 @@ namespace GHelper
return;
}
eCoresMax = Math.Max(8, eCoresMax);
if (eCoresMax == 0) eCoresMax = 8;
if (pCoresMax == 0) pCoresMax = 6;
eCoresMax = Math.Max(4, eCoresMax);
pCoresMax = Math.Max(6, pCoresMax);
panelCores.Visible = true;

View File

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

View File

@@ -15,7 +15,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<AssemblyVersion>0.190</AssemblyVersion>
<AssemblyVersion>0.199</AssemblyVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@@ -63,8 +63,8 @@
<PackageReference Include="NAudio" Version="2.1.0" />
<PackageReference Include="NvAPIWrapper.Net" Version="0.8.1.101" />
<PackageReference Include="System.Management" Version="8.0.0" />
<PackageReference Include="TaskScheduler" Version="2.10.1" />
<PackageReference Include="WinForms.DataVisualization" Version="1.8.0" />
<PackageReference Include="TaskScheduler" Version="2.11.0" />
<PackageReference Include="WinForms.DataVisualization" Version="1.9.2" />
</ItemGroup>
<ItemGroup>

View File

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

View File

@@ -22,6 +22,12 @@ namespace GHelper.Gpu
public void InitGPUMode()
{
if (AppConfig.NoGpu())
{
settings.HideGPUModes(false);
return;
}
int eco = Program.acpi.DeviceGet(AsusACPI.GPUEco);
int mux = Program.acpi.DeviceGet(AsusACPI.GPUMux);
@@ -92,13 +98,16 @@ namespace GHelper.Gpu
{
if (AppConfig.NoAutoUltimate())
{
int standardStatus = Program.acpi.SetGPUEco(0);
if (standardStatus == 0)
Program.acpi.SetGPUEco(0);
Thread.Sleep(500);
int eco = Program.acpi.DeviceGet(AsusACPI.GPUEco);
Logger.WriteLine("Eco flag : " + eco);
if (eco == 1)
{
settings.VisualiseGPUMode();
return;
}
Thread.Sleep(100);
}
status = Program.acpi.DeviceSet(AsusACPI.GPUMux, 0, "GPUMux");
restart = true;

View File

@@ -41,7 +41,7 @@ public static class NvidiaSmi
public static int GetMaxGPUPower()
{
string output = RunNvidiaSmiCommand("--query-gpu=power.max_limit --format csv,noheader,nounits");
output = output.Trim().Trim('\n', '\r');
output = output.Trim().Trim('\n', '\r').Replace(".00","").Replace(",00", "");
if (float.TryParse(output, out float floatValue))
{

View File

@@ -94,7 +94,7 @@ namespace GHelper
private void CheckController_CheckedChanged(object? sender, EventArgs e)
{
AppConfig.Set("controller_disabled", checkController.Checked ? 1 : 0);
AllyControl.ApplyXBoxStatus();
AllyControl.DisableXBoxController(checkController.Checked);
}
private void ComboBinding(RComboBox combo)

View File

@@ -24,7 +24,7 @@ public static class HardwareControl
public static decimal? fullCapacity;
public static decimal? chargeCapacity;
public static string? batteryCharge;
public static string? cpuFan;
public static string? gpuFan;
@@ -34,6 +34,20 @@ public static class HardwareControl
static long lastUpdate;
static bool _chargeWatt = AppConfig.Is("charge_watt");
public static bool chargeWatt
{
get
{
return _chargeWatt;
}
set
{
AppConfig.Set("charge_watt", value ? 1 : 0);
_chargeWatt = value;
}
}
private static int GetGpuUse()
{
try
@@ -226,11 +240,17 @@ public static class HardwareControl
if (fullCapacity > 0 && chargeCapacity > 0)
{
batteryCapacity = Math.Min(100, ((decimal)chargeCapacity / (decimal)fullCapacity) * 100);
if (batteryCapacity > 99) BatteryControl.UnSetBatteryLimitFull();
batteryCapacity = Math.Min(100, (decimal)chargeCapacity / (decimal)fullCapacity * 100);
if (batteryCapacity > 99 && BatteryControl.chargeFull) BatteryControl.UnSetBatteryLimitFull();
if (chargeWatt)
{
batteryCharge = Math.Round((decimal)chargeCapacity / 1000, 1).ToString() + "Wh";
}
else
{
batteryCharge = Math.Round(batteryCapacity, 1) + "%";
}
}
}
public static bool IsUsedGPU(int threshold = 10)
@@ -265,6 +285,7 @@ public static class HardwareControl
public static void RecreateGpuControl()
{
if (AppConfig.NoGpu()) return;
try
{
GpuControl?.Dispose();

View File

@@ -106,7 +106,7 @@ public class Startup
{
td.RegistrationInfo.Description = "G-Helper Auto Start";
td.Triggers.Add(new LogonTrigger { UserId = WindowsIdentity.GetCurrent().Name, Delay = TimeSpan.FromSeconds(1) });
td.Triggers.Add(new LogonTrigger { UserId = WindowsIdentity.GetCurrent().Name, Delay = TimeSpan.FromSeconds(2) });
td.Actions.Add(strExeFilePath);
if (ProcessHelper.IsUserAdministrator())

View File

@@ -2,21 +2,31 @@
public static class TouchscreenHelper
{
public static bool? ToggleTouchscreen()
public static bool? GetStatus()
{
try
{
ProcessHelper.RunAsAdmin();
return ProcessHelper.RunCMD("powershell", "(Get-PnpDevice -FriendlyName '*touch*screen*').Status").Contains("OK");
}
catch (Exception ex)
{
Logger.WriteLine($"Can't get touchscreen status: {ex.Message}");
return null;
}
}
var status = !ProcessHelper.RunCMD("powershell", "(Get-PnpDevice -FriendlyName '*touch*screen*').Status").Contains("OK");
public static void ToggleTouchscreen(bool status)
{
try
{
ProcessHelper.RunAsAdmin();
ProcessHelper.RunCMD("powershell", (status ? "Enable-PnpDevice" : "Disable-PnpDevice") + " -InstanceId (Get-PnpDevice -FriendlyName '*touch*screen*').InstanceId -Confirm:$false");
return status;
}
catch (Exception ex)
{
Logger.WriteLine($"Can't toggle touchscreen: {ex.Message}");
return null;
}
}

View File

@@ -14,9 +14,16 @@ namespace GHelper.Input
{
System.Timers.Timer timer = new System.Timers.Timer(1000);
public static bool backlightActivity = true;
public static bool lidClose = false;
public static Keys keyProfile = Keys.F5;
public static Keys keyApp = Keys.F12;
public static Keys keyProfile = (Keys)AppConfig.Get("keybind_profile", (int)Keys.F5);
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 ScreenControl screenControl = new ScreenControl();
@@ -79,9 +86,14 @@ namespace GHelper.Input
Program.acpi.DeviceInit();
if (!OptimizationService.IsRunning())
{
Program.acpi.DeviceGet(AsusACPI.CameraShutter);
listener = new KeyboardListener(HandleEvent);
}
else
{
Logger.WriteLine("Optimization service is running");
}
InitBacklightTimer();
@@ -101,10 +113,6 @@ namespace GHelper.Input
{
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 actionM2 = AppConfig.GetString("m2");
@@ -118,18 +126,22 @@ namespace GHelper.Input
if (!AppConfig.Is("skip_hotkeys"))
{
if (AppConfig.IsDUO())
{
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F7);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F8);
}
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F13);
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.F16);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F17);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F18);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F19);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F20);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile0);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile1);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile2);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile3);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile4);
hook.RegisterHotKey(ModifierKeys.Control, Keys.VolumeDown);
hook.RegisterHotKey(ModifierKeys.Control, Keys.VolumeUp);
@@ -228,24 +240,31 @@ namespace GHelper.Input
}
static void SetBrightness(int delta)
static void SetBrightness(bool up, bool hotkey = false)
{
int brightness = -1;
if (isTUF) brightness = ScreenBrightness.Get();
if (AppConfig.SwappedBrightness()) delta = -delta;
if (AppConfig.SwappedBrightness() && !hotkey) up = !up;
Program.acpi.DeviceSet(AsusACPI.UniversalControl, delta > 0 ? AsusACPI.Brightness_Up : AsusACPI.Brightness_Down, "Brightness");
int step = AppConfig.Get("brightness_step", 10);
if (step != 10)
{
Program.toast.RunToast(ScreenBrightness.Adjust(up ? step : -step) + "%", up ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown);
return;
}
Program.acpi.DeviceSet(AsusACPI.UniversalControl, up ? AsusACPI.Brightness_Up : AsusACPI.Brightness_Down, "Brightness");
if (isTUF)
{
if (AppConfig.SwappedBrightness()) return;
if (delta < 0 && brightness <= 0) return;
if (delta > 0 && brightness >= 100) return;
if (!up && brightness <= 0) return;
if (up && brightness >= 100) return;
Thread.Sleep(100);
if (brightness == ScreenBrightness.Get())
Program.toast.RunToast(ScreenBrightness.Adjust(delta) + "%", (delta < 0) ? ToastIcon.BrightnessDown : ToastIcon.BrightnessUp);
Program.toast.RunToast(ScreenBrightness.Adjust(up ? step : -step) + "%", up ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown);
}
}
@@ -275,7 +294,7 @@ namespace GHelper.Input
KeyboardHook.KeyPress(Keys.VolumeUp);
return;
case Keys.F4:
KeyProcess("m3");
ToggleMic();
return;
}
}
@@ -294,10 +313,10 @@ namespace GHelper.Input
HandleEvent(199); // Backlight cycle
return;
case Keys.F5:
SetBrightness(-10);
SetBrightness(false);
return;
case Keys.F6:
SetBrightness(+10);
SetBrightness(true);
return;
case Keys.F7:
KeyboardHook.KeyKeyPress(Keys.LWin, Keys.P);
@@ -306,7 +325,7 @@ namespace GHelper.Input
HandleEvent(126); // Emojis
return;
case Keys.F9:
KeyProcess("m3"); // MicMute
ToggleMic(); // MicMute
return;
case Keys.F10:
HandleEvent(133); // Camera Toggle
@@ -365,10 +384,10 @@ namespace GHelper.Input
KeyboardHook.KeyPress(Keys.Snapshot);
break;
case Keys.F7:
SetBrightness(-10);
SetBrightness(false);
break;
case Keys.F8:
SetBrightness(+10);
SetBrightness(true);
break;
case Keys.F9:
KeyboardHook.KeyKeyPress(Keys.LWin, Keys.P);
@@ -407,20 +426,26 @@ namespace GHelper.Input
{
if (e.Key == keyProfile) modeControl.CyclePerformanceMode();
if (e.Key == keyApp) Program.SettingsToggle();
if (e.Key == Keys.F20) KeyProcess("m3");
if (e.Key == Keys.F20) ToggleMic();
}
if (e.Modifier == (ModifierKeys.Control | ModifierKeys.Shift | ModifierKeys.Alt))
{
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)
{
case Keys.F1:
SetBrightness(-10);
SetBrightness(false);
break;
case Keys.F2:
SetBrightness(10);
SetBrightness(true);
break;
case Keys.F3:
Program.settingsForm.gpuControl.ToggleXGM(true);
@@ -428,30 +453,23 @@ namespace GHelper.Input
case Keys.F4:
Program.settingsForm.BeginInvoke(Program.settingsForm.allyControl.ToggleModeHotkey);
break;
case Keys.F7:
SetScreenpad(-10);
break;
case Keys.F8:
SetScreenpad(10);
break;
case Keys.F13:
ToggleScreenRate();
break;
case Keys.F14:
Program.toast.RunToast(Properties.Strings.EcoMode);
Program.settingsForm.gpuControl.SetGPUMode(AsusACPI.GPUModeEco);
break;
case Keys.F15:
Program.toast.RunToast(Properties.Strings.StandardMode);
Program.settingsForm.gpuControl.SetGPUMode(AsusACPI.GPUModeStandard);
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;
}
}
@@ -462,11 +480,11 @@ namespace GHelper.Input
{
case Keys.VolumeDown:
// Screen brightness down on CTRL+VolDown
SetBrightness(-10);
SetBrightness(false);
break;
case Keys.VolumeUp:
// Screen brightness up on CTRL+VolUp
SetBrightness(+10);
SetBrightness(true);
break;
}
}
@@ -504,6 +522,8 @@ namespace GHelper.Input
action = "micmute";
if (name == "fnc")
action = "fnlock";
if (name == "fnv")
action = "visual";
if (name == "fne")
action = "calculator";
}
@@ -558,15 +578,13 @@ namespace GHelper.Input
ToggleFnLock();
break;
case "micmute":
bool muteStatus = Audio.ToggleMute();
Program.toast.RunToast(muteStatus ? Properties.Strings.Muted : Properties.Strings.Unmuted, muteStatus ? ToastIcon.MicrophoneMute : ToastIcon.Microphone);
if (AppConfig.IsVivoZenbook()) Program.acpi.DeviceSet(AsusACPI.MicMuteLed, muteStatus ? 1 : 0, "MicmuteLed");
ToggleMic();
break;
case "brightness_up":
SetBrightness(+10);
SetBrightness(true);
break;
case "brightness_down":
SetBrightness(-10);
SetBrightness(false);
break;
case "screenpad_up":
SetScreenpad(10);
@@ -584,15 +602,27 @@ namespace GHelper.Input
Program.settingsForm.BeginInvoke(Program.settingsForm.allyControl.ToggleModeHotkey);
break;
case "touchscreen":
var touchscreenStatus = TouchscreenHelper.ToggleTouchscreen();
if (touchscreenStatus is not null)
Program.toast.RunToast(Properties.Strings.Touchscreen + " " + ((bool)touchscreenStatus ? Properties.Strings.On : Properties.Strings.Off), ToastIcon.Touchpad);
var status = !TouchscreenHelper.GetStatus();
Logger.WriteLine("Touchscreen status: " + status);
if (status is not null)
{
Program.toast.RunToast(Properties.Strings.Touchscreen + " " + ((bool)status ? Properties.Strings.On : Properties.Strings.Off), ToastIcon.Touchpad);
TouchscreenHelper.ToggleTouchscreen((bool)status);
}
break;
default:
break;
}
}
static void ToggleMic()
{
bool muteStatus = Audio.ToggleMute();
Program.toast.RunToast(muteStatus ? Properties.Strings.Muted : Properties.Strings.Unmuted, muteStatus ? ToastIcon.MicrophoneMute : ToastIcon.Microphone);
if (AppConfig.IsVivoZenbook()) Program.acpi.DeviceSet(AsusACPI.MicMuteLed, muteStatus ? 1 : 0, "MicmuteLed");
}
static bool GetTouchpadState()
{
using (var key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad\Status", false))
@@ -639,7 +669,7 @@ namespace GHelper.Input
bool fnLock = !AppConfig.Is("fn_lock");
AppConfig.Set("fn_lock", fnLock ? 1 : 0);
if (AppConfig.IsHardwareFnLock())
if (AppConfig.IsHardwareFnLock())
HardwareFnLock(fnLock);
else
Program.settingsForm.BeginInvoke(Program.inputDispatcher.RegisterKeys);
@@ -716,6 +746,8 @@ namespace GHelper.Input
KeyProcess("fne");
return;
case 174: // FN+F5
case 153: // FN+F5 OLD MODELS
case 157: // Zenbook DUO FN+F
modeControl.CyclePerformanceMode(Control.ModifierKeys == Keys.Shift);
return;
case 179: // FN+F4
@@ -777,7 +809,7 @@ namespace GHelper.Input
}
else
{
Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Brightness_Down, "Brightness");
SetBrightness(false, true);
}
break;
case 32: // FN+F8
@@ -792,7 +824,7 @@ namespace GHelper.Input
}
else
{
Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Brightness_Up, "Brightness");
SetBrightness(true, true);
}
break;
case 133: // Camera Toggle
@@ -846,10 +878,22 @@ namespace GHelper.Input
return Math.Max(Math.Min(3, backlight), 0);
}
public static void SetBacklightAuto(bool init = false)
public static void AutoKeyboard()
{
if (init) Aura.Init();
Aura.ApplyBrightness(GetBacklight(), "Auto", init);
if (AppConfig.HasTabletMode()) TabletMode();
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)
@@ -905,33 +949,55 @@ namespace GHelper.Input
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";
string CameraRegistryValueName = "Value";
try
if (cameraShutter == 0)
{
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";
else if (status == "Deny") status = "Allow";
else
string CameraRegistryKeyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\webcam";
string CameraRegistryValueName = "Value";
try
{
Logger.WriteLine("Unknown camera status");
return;
var status = (string?)Registry.GetValue(CameraRegistryKeyPath, CameraRegistryValueName, "");
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;
@@ -949,7 +1015,7 @@ namespace GHelper.Input
if (b < 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, 0, "ScreenpadOff");
};
if(delay <= 0 || instant) //instant action
if (delay <= 0 || instant) //instant action
{
action(brightness);
}
@@ -993,6 +1059,28 @@ namespace GHelper.Input
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 = "")
{
if (string.IsNullOrEmpty(command)) return;

View File

@@ -10,6 +10,8 @@ namespace GHelper.Input
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
Action<int> _handler;
static int retry = 0;
public KeyboardListener(Action<int> KeyHandler)
{
_handler = KeyHandler;
@@ -54,6 +56,7 @@ namespace GHelper.Input
input.ReadTimeout = int.MaxValue;
var data = input.Read();
if (cancellationTokenSource.Token.IsCancellationRequested) break;
if (data.Length > 1 && data[0] == AsusHid.INPUT_ID && data[1] > 0 && data[1] != 236)
{
Logger.WriteLine($"Key: {data[1]}");
@@ -67,6 +70,12 @@ namespace GHelper.Input
catch (Exception ex)
{
Logger.WriteLine($"Listener exited: {ex.Message}");
if (retry++ < 2)
{
Thread.Sleep(300);
Logger.WriteLine($"Restarting listener {retry}");
Listen();
}
}
}

View File

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

View File

@@ -110,30 +110,24 @@ namespace GHelper.Mode
if (notify) Toast();
// Power plan from config or defaulting to balanced
if (AppConfig.GetModeString("scheme") is not null)
PowerNative.SetPowerPlan(AppConfig.GetModeString("scheme"));
else
PowerNative.SetBalancedPowerPlan();
if (!AppConfig.Is("skip_powermode"))
{
// Power plan from config or defaulting to balanced
if (AppConfig.GetModeString("scheme") is not null)
PowerNative.SetPowerPlan(AppConfig.GetModeString("scheme"));
else
PowerNative.SetBalancedPowerPlan();
// Windows power mode
if (AppConfig.GetModeString("powermode") is not null)
PowerNative.SetPowerMode(AppConfig.GetModeString("powermode"));
else
PowerNative.SetPowerMode(Modes.GetBase(mode));
// Windows power mode
if (AppConfig.GetModeString("powermode") is not null)
PowerNative.SetPowerMode(AppConfig.GetModeString("powermode"));
else
PowerNative.SetPowerMode(Modes.GetBase(mode));
}
// CPU Boost setting override
if (AppConfig.GetMode("auto_boost") != -1)
PowerNative.SetCPUBoost(AppConfig.GetMode("auto_boost"));
//BatteryControl.SetBatteryChargeLimit();
/*
if (NativeMethods.PowerGetEffectiveOverlayScheme(out Guid activeScheme) == 0)
{
Debug.WriteLine("Effective :" + activeScheme);
}
*/
PowerNative.SetCPUBoost(AppConfig.GetMode("auto_boost"));
settings.FansInit();
}
@@ -162,7 +156,8 @@ namespace GHelper.Mode
modeToggleTimer.Start();
Modes.SetCurrent(Modes.GetNext(back));
Toast();
} else
}
else
{
SetPerformanceMode(Modes.GetNext(back), true);
}
@@ -270,9 +265,6 @@ namespace GHelper.Mode
var stapmResult = SendCommand.set_stapm_limit((uint)limit_total * 1000);
if (init) Logger.WriteLine($"STAPM: {limit_total} {stapmResult}");
var stapmResult2 = SendCommand.set_stapm2_limit((uint)limit_total * 1000);
if (init) Logger.WriteLine($"STAPM2: {limit_total} {stapmResult2}");
var slowResult = SendCommand.set_slow_limit((uint)limit_slow * 1000);
if (init) Logger.WriteLine($"SLOW: {limit_slow} {slowResult}");
@@ -388,7 +380,7 @@ namespace GHelper.Mode
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)");
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)");
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"))
{
Logger.WriteLine($"Changing power plan from {activeSchemeGuid.ToString()} to Balanced");
SetPowerPlan(balanced);
}
}

View File

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

View File

@@ -86,7 +86,7 @@
public override int DPIIncrements()
{
return 100;
return 50;
}

View File

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

View File

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

View File

@@ -250,13 +250,13 @@
<value>Pabudęs</value>
</data>
<data name="BacklightLow" xml:space="preserve">
<value>Low</value>
<value>Žem.</value>
</data>
<data name="BacklightMax" xml:space="preserve">
<value>Max</value>
<value>Maks.</value>
</data>
<data name="BacklightMid" xml:space="preserve">
<value>Mid</value>
<value>Vid.</value>
</data>
<data name="BacklightOff" xml:space="preserve">
<value>Išjungta</value>
@@ -265,10 +265,10 @@
<value>Laiko riba su lizdu / akumuliatoriumi (0 ĮJUNGTA)</value>
</data>
<data name="BacklightTimeoutBattery" xml:space="preserve">
<value>Backlight Timeout when on battery</value>
<value>Foninio apšvietimo laikas akumuliatoriaus režimu</value>
</data>
<data name="BacklightTimeoutPlugged" xml:space="preserve">
<value>Backlight Timeout when plugged</value>
<value>Foninio apšvietimo laikas įkraunant</value>
</data>
<data name="Balanced" xml:space="preserve">
<value>Balansuotas</value>
@@ -519,7 +519,7 @@ Vis tiek norite tęsti?</value>
<value>Kairiojo jungiklio nejautrumo zonos</value>
</data>
<data name="LTDeadzones" xml:space="preserve">
<value>Left Trigger Deadzones</value>
<value>Kairiojo jungiklio nejautrumo zonos</value>
</data>
<data name="MatrixAudio" xml:space="preserve">
<value>Garso vizualizatorius</value>
@@ -585,13 +585,13 @@ Vis tiek norite tęsti?</value>
<value>Sinchronizuoti su pele</value>
</data>
<data name="Multizone" xml:space="preserve">
<value>Multi Zone</value>
<value>Kelios zonos</value>
</data>
<data name="MultizoneStrong" xml:space="preserve">
<value>Multi Zone Strong</value>
<value>Kelių zonų stiprumas</value>
</data>
<data name="Muted" xml:space="preserve">
<value>Muted</value>
<value>Išjungta</value>
</data>
<data name="MuteMic" xml:space="preserve">
<value>Mikrofono nutildymas</value>
@@ -615,7 +615,7 @@ Vis tiek norite tęsti?</value>
<value>Įjungta</value>
</data>
<data name="OneZone" xml:space="preserve">
<value>One Zone</value>
<value>Viena zona</value>
</data>
<data name="OpenGHelper" xml:space="preserve">
<value>Atidaryti G-Helper langą</value>
@@ -675,16 +675,16 @@ Vis tiek norite tęsti?</value>
<value>RPM</value>
</data>
<data name="RSDeadzones" xml:space="preserve">
<value>Right Stick Deadzones</value>
<value>Dešiniojo jungiklio nejautrumo zonos</value>
</data>
<data name="RTDeadzones" xml:space="preserve">
<value>Right Trigger Deadzones</value>
<value>Dešiniojo jungiklio nejautrumo zonos</value>
</data>
<data name="RunOnStartup" xml:space="preserve">
<value>Paleisti įjungus sistemą</value>
</data>
<data name="ScalingQuality" xml:space="preserve">
<value>Scaling Quality</value>
<value>Mastelio kokybė</value>
</data>
<data name="ScreenPadDown" xml:space="preserve">
<value>Ekrano skydelio ryškumo mažinimas</value>
@@ -741,10 +741,10 @@ Vis tiek norite tęsti?</value>
<value>Perjungti ekraną</value>
</data>
<data name="ToggleTouchscreen" xml:space="preserve">
<value>Toggle Touchscreen</value>
<value>Valdyti jutiklinį ekraną</value>
</data>
<data name="Touchscreen" xml:space="preserve">
<value>Touchscreen</value>
<value>Jutiklinis ekranas</value>
</data>
<data name="Turbo" xml:space="preserve">
<value>Turbo</value>
@@ -765,7 +765,7 @@ Vis tiek norite tęsti?</value>
<value>Įtampos mažinimas yra eksperimentinė ir pavojinga funkcija. Jei pritaikytos reikšmės yra per mažos jūsų aparatinei įrangai, ji gali tapti nestabili, išsijungti arba pažeisti duomenų vientisumą. Jei norite pabandyti, iš pirmo pradėkite nuo mažų reikšmių, spustelėkite „Taikyti“ ir išbandykite, kas jums tinka.</value>
</data>
<data name="Unmuted" xml:space="preserve">
<value>Unmuted</value>
<value>Įjungta</value>
</data>
<data name="Updates" xml:space="preserve">
<value>Naujinimai</value>
@@ -798,24 +798,24 @@ Vis tiek norite tęsti?</value>
<value>Visada rodyti programėlės langą viršuje</value>
</data>
<data name="Zoom" xml:space="preserve">
<value>Zoom</value>
<value>Mastelis</value>
</data>
<data name="Donate" xml:space="preserve">
<value>Donate</value>
<value>Paremti</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
<value>Legenda</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Can't check local version</value>
<value>Nepavyko patikrinti vietinės versijos</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Update Available</value>
<value>Išleista nauja versija</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Updated</value>
<value>Atnaujinta</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -157,7 +157,7 @@
<value>程式正在執行</value>
</data>
<data name="AppAlreadyRunningText" xml:space="preserve">
<value>G-Helper正在執行。 請檢查右下系統匣。</value>
<value>G-Helper 正在執行。 請檢查右下系統匣。</value>
</data>
<data name="Apply" xml:space="preserve">
<value>套用</value>
@@ -169,10 +169,10 @@
<value>套用功率限制</value>
</data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>自動調整Windows電源模式</value>
<value>自動調整 Windows 電源模式</value>
</data>
<data name="APUMemory" xml:space="preserve">
<value>分配給GPU的記憶體</value>
<value>分配給 GPU 的記憶體</value>
</data>
<data name="AsusServicesRunning" xml:space="preserve">
<value>執行中的華碩服務</value>
@@ -295,7 +295,7 @@
<value>次要</value>
</data>
<data name="BiosAndDriverUpdates" xml:space="preserve">
<value>BIOS與驅動程式更新</value>
<value>BIOS 與驅動程式更新</value>
</data>
<data name="Boot" xml:space="preserve">
<value>開機時</value>

View File

@@ -40,7 +40,8 @@ namespace Ryzen
//PHEONIX - 9
//RAPHAEL/DRAGON RANGE - 10
//MENDOCINO - 11
//HAWKPOINT/STRIXPOINT - 12
//HAWKPOINT - 12
//STRIXPOINT - 13
public static void Init()
{
@@ -129,7 +130,7 @@ namespace Ryzen
if (CPUModel.Contains("Family " + Convert.ToString(26)) && CPUModel.Contains("Model " + Convert.ToString(36)))
{
FAMID = 12; //STRIXPOINT
FAMID = 13; //STRIXPOINT
}
Logger.WriteLine($"CPU: {FAMID} - {CPUName} - {CPUModel}");
@@ -243,6 +244,16 @@ namespace Ryzen
Smu.PSMU_ADDR_RSP = 0x3B10a80;
Smu.PSMU_ADDR_ARG = 0x3B10a88;
}
else if (FAMID == 13)
{
Smu.MP1_ADDR_MSG = 0x3B10928;
Smu.MP1_ADDR_RSP = 0x3B10978;
Smu.MP1_ADDR_ARG = 0x3B10998;
Smu.PSMU_ADDR_MSG = 0x3B10a20;
Smu.PSMU_ADDR_RSP = 0x3B10a80;
Smu.PSMU_ADDR_ARG = 0x3B10a88;
}
else if (FAMID == 4 || FAMID == 6)
{
Smu.MP1_ADDR_MSG = 0x3B10530;

View File

@@ -21,7 +21,8 @@ namespace Ryzen
//PHEONIX - 9
//RAPHAEL/DRAGON RANGE - 10
//MENDOCINO - 11
//HAWKPOINT/STRIXPOINT - 12
//HAWKPOINT - 12
//STRIXPOINT - 13
public static Smu RyzenAccess = new Smu(false);
public static int FAMID = RyzenControl.FAMID;
@@ -49,7 +50,8 @@ namespace Ryzen
case 9:
case 11:
case 12:
RyzenAccess.SendMp1(0x14, ref Args);
case 13:
result = RyzenAccess.SendMp1(0x14, ref Args);
result = RyzenAccess.SendPsmu(0x31, ref Args);
break;
default:
@@ -61,32 +63,6 @@ namespace Ryzen
}
//STAMP2 Limit
public static Smu.Status? set_stapm2_limit(uint value)
{
RyzenAccess.Initialize();
uint[] Args = new uint[6];
Args[0] = value;
Smu.Status? result = null;
switch (FAMID)
{
case 3:
case 5:
case 7:
case 8:
case 9:
case 11:
case 12:
result = RyzenAccess.SendPsmu(0x31, ref Args);
break;
default:
break;
}
RyzenAccess.Deinitialize();
return result;
}
//Fast Limit
public static Smu.Status? set_fast_limit(uint value)
{
@@ -109,7 +85,9 @@ namespace Ryzen
case 9:
case 11:
case 12:
case 13:
result = RyzenAccess.SendMp1(0x15, ref Args);
result = RyzenAccess.SendPsmu(0x32, ref Args);
break;
default:
break;
@@ -140,7 +118,10 @@ namespace Ryzen
case 9:
case 11:
case 12:
case 13:
result = RyzenAccess.SendMp1(0x16, ref Args);
result = RyzenAccess.SendPsmu(0x33, ref Args);
result = RyzenAccess.SendPsmu(0x34, ref Args);
break;
default:
break;
@@ -176,11 +157,12 @@ namespace Ryzen
case 9:
case 11:
case 12:
case 13:
result = RyzenAccess.SendMp1(0x19, ref Args);
break;
case 4:
case 6:
RyzenAccess.SendMp1(0x23, ref Args);
result = RyzenAccess.SendMp1(0x23, ref Args);
result = RyzenAccess.SendPsmu(0x56, ref Args);
break;
case 10:
@@ -194,37 +176,6 @@ namespace Ryzen
return result;
}
//Skin Temp limit
public static Smu.Status? set_apu_skin_temp_limit(uint value)
{
RyzenAccess.Initialize();
uint[] Args = new uint[6];
Args[0] = value;
Smu.Status? result = null;
switch (FAMID)
{
case 5:
case 8:
case 9:
case 11:
case 12:
result = RyzenAccess.SendMp1(0x33, ref Args);
break;
case 3:
case 7:
result = RyzenAccess.SendMp1(0x38, ref Args);
break;
default:
break;
}
RyzenAccess.Deinitialize();
return result;
}
//Set All Core Curve Optimiser
public static Smu.Status? set_coall(int value)
{
@@ -241,12 +192,12 @@ namespace Ryzen
{
case 3:
case 7:
RyzenAccess.SendMp1(0x55, ref Args);
result = RyzenAccess.SendMp1(0x55, ref Args);
result = RyzenAccess.SendPsmu(0xB1, ref Args);
break;
case 4:
case 6:
RyzenAccess.SendMp1(0x36, ref Args);
result = RyzenAccess.SendMp1(0x36, ref Args);
result = RyzenAccess.SendPsmu(0xB, ref Args);
break;
case 5:
@@ -254,6 +205,7 @@ namespace Ryzen
case 9:
case 11:
case 12:
case 13:
result = RyzenAccess.SendPsmu(0x5D, ref Args);
break;
case 10:
@@ -285,7 +237,7 @@ namespace Ryzen
{
case 3:
case 7:
RyzenAccess.SendMp1(0x64, ref Args);
result = RyzenAccess.SendMp1(0x64, ref Args);
result = RyzenAccess.SendPsmu(0x57, ref Args);
break;
case 5:
@@ -293,6 +245,7 @@ namespace Ryzen
case 9:
case 11:
case 12:
case 13:
result = RyzenAccess.SendPsmu(0xb7, ref Args);
break;
default:

View File

@@ -235,6 +235,7 @@ namespace GHelper
labelCharge.MouseEnter += PanelBattery_MouseEnter;
labelCharge.MouseLeave += PanelBattery_MouseLeave;
labelBattery.Click += LabelBattery_Click;
buttonPeripheral1.Click += ButtonPeripheral_Click;
buttonPeripheral2.Click += ButtonPeripheral_Click;
@@ -271,8 +272,9 @@ namespace GHelper
labelCharge.Click += LabelCharge_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.Badge = true;
@@ -284,11 +286,17 @@ namespace GHelper
InitVisual();
}
private void LabelBattery_Click(object? sender, EventArgs e)
{
HardwareControl.chargeWatt = !HardwareControl.chargeWatt;
RefreshSensors(true);
}
private void ButtonDonate_Click(object? sender, EventArgs e)
{
AppConfig.Set("donate_click", 1);
AppConfig.Set("donate_click", AppConfig.Get("start_count"));
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)
@@ -453,7 +461,7 @@ namespace GHelper
Invoke(delegate
{
sliderGammaIgnore = true;
sliderGamma.Value = AppConfig.Get("brightness", 100);
sliderGamma.Value = VisualControl.GetBrightness();
labelGamma.Text = sliderGamma.Value + "%";
sliderGammaIgnore = false;
});
@@ -667,14 +675,14 @@ namespace GHelper
{
case 0:
Logger.WriteLine("Lid Closed");
InputDispatcher.lidClose = AniMatrixControl.lidClose = true;
Aura.ApplyBrightness(0, "Lid");
AniMatrixControl.lidClose = true;
matrixControl.SetLidMode();
break;
case 1:
Logger.WriteLine("Lid Open");
InputDispatcher.lidClose = AniMatrixControl.lidClose = false;
Aura.ApplyBrightness(InputDispatcher.GetBacklight(), "Lid");
AniMatrixControl.lidClose = false;
matrixControl.SetLidMode();
break;
}
@@ -843,7 +851,7 @@ namespace GHelper
private void Button60Hz_MouseHover(object? sender, EventArgs e)
{
labelTipScreen.Text = Properties.Strings.MinRefreshTooltip;
labelTipScreen.Text = Properties.Strings.MinRefreshTooltip.Replace("60", ScreenControl.MIN_RATE.ToString());
}
private void ButtonScreen_MouseLeave(object? sender, EventArgs e)
@@ -853,7 +861,7 @@ namespace GHelper
private void ButtonScreenAuto_MouseHover(object? sender, EventArgs e)
{
labelTipScreen.Text = Properties.Strings.AutoRefreshTooltip;
labelTipScreen.Text = Properties.Strings.AutoRefreshTooltip.Replace("60", ScreenControl.MIN_RATE.ToString());
}
private void ButtonUltimate_MouseHover(object? sender, EventArgs e)
@@ -1208,7 +1216,7 @@ namespace GHelper
private void Button60Hz_Click(object? sender, EventArgs e)
{
AppConfig.Set("screen_auto", 0);
screenControl.SetScreen(60, 0);
screenControl.SetScreen(ScreenControl.MIN_RATE, 0);
}
@@ -1239,16 +1247,18 @@ namespace GHelper
{
buttonScreenAuto.Activated = true;
}
else if (frequency == 60)
else if (frequency == ScreenControl.MIN_RATE)
{
button60Hz.Activated = true;
}
else if (frequency > 60)
else if (frequency > ScreenControl.MIN_RATE)
{
button120Hz.Activated = true;
}
if (maxFrequency > 60)
button60Hz.Text = ScreenControl.MIN_RATE + "Hz";
if (maxFrequency > ScreenControl.MIN_RATE)
{
button120Hz.Text = maxFrequency.ToString() + "Hz" + (overdriveSetting ? " + OD" : "");
panelScreen.Visible = true;
@@ -1420,7 +1430,9 @@ namespace GHelper
cpuTemp = ": " + Math.Round((decimal)HardwareControl.cpuTemp).ToString() + "°C";
if (HardwareControl.batteryCapacity > 0)
charge = Properties.Strings.BatteryCharge + ": " + Math.Round(HardwareControl.batteryCapacity, 1) + "% ";
{
charge = Properties.Strings.BatteryCharge + ": " + HardwareControl.batteryCharge;
}
if (HardwareControl.batteryRate < 0)
battery = Properties.Strings.Discharging + ": " + Math.Round(-(decimal)HardwareControl.batteryRate, 1).ToString() + "W";
@@ -1530,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)
{
@@ -1775,7 +1769,7 @@ namespace GHelper
public void VisualiseBatteryFull()
{
if (AppConfig.Is("charge_full"))
if (BatteryControl.chargeFull)
{
buttonBatteryFull.BackColor = colorStandard;
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");
}
public static void ApplyPowerOff()
{
AsusHid.Write(AuraPowerMessage(new AuraPower()));
}
public static void ApplyPower()
{

View File

@@ -52,6 +52,10 @@ namespace GHelper.USB
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()
{

View File

@@ -226,13 +226,10 @@ namespace GHelper
public void _VisualiseNewCount(int updatesCount, TableLayoutPanel table)
{
Invoke(delegate
{
labelUpdates.Text = $"{Properties.Strings.NewUpdates}: {updatesCount}";
labelUpdates.ForeColor = colorTurbo;
labelUpdates.Font = new Font(labelUpdates.Font, FontStyle.Bold);
panelBios.AccessibleName = labelUpdates.Text;
});
labelUpdates.Text = $"{Properties.Strings.NewUpdates}: {updatesCount}";
labelUpdates.ForeColor = colorTurbo;
labelUpdates.Font = new Font(labelUpdates.Font, FontStyle.Bold);
panelBios.AccessibleName = labelUpdates.Text;
}
static string CleanupDeviceId(string input)

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 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 / 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**
<table>