Compare commits

..

39 Commits

Author SHA1 Message Date
Serge
0069234563 Version bump 2023-08-18 01:23:02 +02:00
Serge
d92a1880ee Merge branch 'main' of https://github.com/seerge/g-helper 2023-08-17 20:28:51 +02:00
Serge
dd72e2b573 Screen detection fix 2023-08-17 20:28:48 +02:00
Serge
10714d1002 Update README.md 2023-08-17 19:58:22 +02:00
Serge
daad1bca53 Merge pull request #1109 from IceStormNG/asus-mouse-support
Support for ROG Keris Wireless Aimpoint (P709_Wireless)
2023-08-17 14:29:17 +02:00
IceStormNG
c82ec8a005 Adds ROG Keris Wireless Aimpoint (P709_Wireless) 2023-08-17 14:25:31 +02:00
IceStormNG
9fbea0a3d3 Fixes crash when DPI was not read yet. 2023-08-17 14:23:55 +02:00
Serge
ed06247206 Merge branch 'main' of https://github.com/seerge/g-helper 2023-08-17 10:52:10 +02:00
Serge
1e7bd816f2 Config overrides https://github.com/seerge/g-helper/issues/1105 2023-08-17 10:52:09 +02:00
Serge
592c4aa07a Update README.md 2023-08-16 14:57:06 +02:00
Serge
59f3aa9af4 Merge pull request #1096 from IceStormNG/main
AniMeMatrix fix for GU604
2023-08-15 23:52:43 +02:00
IceStormNG
8df825e250 AniMeMatrix fix for GU604 2023-08-15 23:27:14 +02:00
Serge
a985cc5bbb Darktheme fix https://github.com/seerge/g-helper/issues/1092
ACPI modes support for Vivobook https://github.com/seerge/g-helper/issues/1089
2023-08-15 13:59:07 +02:00
Serge
bd7985e817 Merge pull request #1093 from seerge/l10n_main
New Crowdin updates
2023-08-15 13:57:22 +02:00
Serge
8706f9f03c New translations Strings.resx (Ukrainian) 2023-08-15 12:53:23 +02:00
Serge
5c6a587745 App dark/light theme detection https://github.com/seerge/g-helper/issues/1092 2023-08-15 12:00:08 +02:00
Serge
de4905f84f Power mode saving https://github.com/seerge/g-helper/issues/1091 2023-08-15 11:21:20 +02:00
Serge
121a9224e9 Power mode saving 2023-08-15 11:19:10 +02:00
Serge
af9626e385 Version bump 2023-08-14 17:32:15 +02:00
Serge
6b3db926fc GPU Aura Mode 2023-08-14 17:19:22 +02:00
Serge
8f8be7a13e Single Color Modes 2023-08-14 16:55:25 +02:00
Serge
12450dbba4 Merge pull request #1084 from seerge/gpu_clock_limit
Gpu clock limit
2023-08-14 16:51:45 +02:00
Serge
4f6de3c6a3 GPU Mode Backlight 2023-08-14 16:48:16 +02:00
Serge
d89420e0f1 Merge pull request #1074 from seerge/l10n_main
New Crowdin updates
2023-08-14 12:06:32 +02:00
Serge
ddc13e0dec New translations Strings.resx (Korean) 2023-08-14 10:07:50 +02:00
Serge
61a3d782e8 New translations Strings.resx (Korean) 2023-08-14 08:37:33 +02:00
Serge
b1c8aa97c8 New translations Strings.resx (Korean) 2023-08-14 07:06:19 +02:00
Serge
3a50ee1784 New translations Strings.resx (Korean) 2023-08-14 05:31:39 +02:00
Serge
a69ce3592f New translations Strings.resx (Polish) 2023-08-13 18:48:23 +02:00
Serge
b49ae96dfe New translations Strings.resx (Polish) 2023-08-13 17:48:00 +02:00
Serge
4c989c9d75 Clock Limit tweaks 2023-08-13 15:48:54 +02:00
Serge
2282e56aad GPU Clock Limiting 2023-08-13 12:53:28 +02:00
Serge
982f2e8e32 Merge pull request #1069 from seerge/l10n_main
New Crowdin updates
2023-08-13 12:14:23 +02:00
Serge
e90f19e3e2 New translations Strings.resx (Chinese Simplified) 2023-08-13 05:08:45 +02:00
Serge
6d6a9c68f2 Merge pull request #1063 from seerge/l10n_main
New Crowdin updates
2023-08-12 17:49:57 +02:00
Serge
8138e44cdd New translations Strings.resx (Chinese Traditional) 2023-08-12 17:16:01 +02:00
Serge
ef788798b7 Version Bump 2023-08-12 16:27:51 +02:00
Serge
07d81e6072 Merge pull request #1062 from seerge/power_modes
Power Mode control
2023-08-12 16:23:24 +02:00
Serge
708e3aa40f Update README.md 2023-08-12 16:22:48 +02:00
26 changed files with 772 additions and 415 deletions

View File

@@ -90,8 +90,6 @@ namespace Starlight.AnimeMatrix
//public int FullEvenRows = -1;
public int dx = 0;
//Shifts the whole frame to the left or right to align with the diagonal cut
public int frameShiftX = 0;
public int MaxColumns = 34;
private int frameIndex = 0;
@@ -124,7 +122,6 @@ namespace Starlight.AnimeMatrix
MaxColumns = 39;
MaxRows = 92;
LedCount = 1711;
frameShiftX = -5;
UpdatePageLength = 630;
}
@@ -189,6 +186,10 @@ namespace Starlight.AnimeMatrix
return (y + 1) / 2 - 3;
}
case AnimeType.GU604:
if (y < 9 && y % 2 == 0)
{
return 1;
}
return (int)Math.Ceiling(Math.Max(0, y - 9) / 2F);
default:
@@ -226,6 +227,29 @@ namespace Starlight.AnimeMatrix
default:
return 36 - y / 2;
}
case AnimeType.GU604:
switch (y)
{
case 0:
case 2:
case 4:
case 6:
case 8:
return 38;
case 1:
case 3:
case 5:
case 7:
case 9:
return 39;
default:
return Width(y) - FirstX(y);
}
default:
return Width(y) - FirstX(y);
}
@@ -246,7 +270,7 @@ namespace Starlight.AnimeMatrix
if (!IsRowInRange(y)) return;
if (x >= FirstX(y) && x < Width(y))
SetLedLinear(RowToLinearAddress(y) - FirstX(y) + x + dx + frameShiftX, value);
SetLedLinear(RowToLinearAddress(y) - FirstX(y) + x + dx, value);
}
public void WakeUp()

View File

@@ -79,7 +79,6 @@ public static class AppConfig
public static bool ContainsModel(string contains)
{
GetModel();
return (_model is not null && _model.ToLower().Contains(contains.ToLower()));
}
@@ -348,12 +347,13 @@ public static class AppConfig
return
Is("manual_mode") ||
ContainsModel("GU604") ||
ContainsModel("G733");
ContainsModel("G733") ||
ContainsModel("FX507Z");
}
public static bool IsFanRequired()
{
return ContainsModel("GA402X") || ContainsModel("G513");
return ContainsModel("GA402X") || ContainsModel("G513") || ContainsModel("G713R");
}
public static bool IsPowerRequired()
@@ -363,7 +363,7 @@ public static class AppConfig
public static bool IsGPUFixNeeded()
{
return ContainsModel("GA402X") || ContainsModel("GV302");
return ContainsModel("GA402X") || ContainsModel("GV302") || ContainsModel("FX506") || ContainsModel("GU603V");
}
public static bool IsGPUFix()

View File

@@ -55,7 +55,8 @@ public class AsusACPI
public const uint GPU_Fan = 0x00110014;
public const uint Mid_Fan = 0x00110031;
public const uint PerformanceMode = 0x00120075; // Thermal Control
public const uint PerformanceMode = 0x00120075; // Performance modes
public const uint VivoBookMode = 0x00110019; // Vivobook performance modes
public const uint GPUEco = 0x00090020;
public const uint GPUXGConnected = 0x00090018;

View File

@@ -797,6 +797,10 @@ namespace GHelper
private void VisualizeCurrentDPIProfile()
{
AsusMouseDPI dpi = mouse.DpiSettings[mouse.DpiProfile - 1];
if (dpi is null)
{
return;
}
sliderDPI.Value = (int)dpi.DPI;
pictureDPIColor.BackColor = dpi.Color;
}

View File

@@ -1,5 +1,9 @@
using GHelper.Helpers;
using GHelper.Gpu;
using GHelper.Helpers;
using HidLibrary;
using NAudio.Gui;
using System.Diagnostics;
using System.Drawing;
using System.Text;
namespace GHelper
@@ -37,6 +41,7 @@ namespace GHelper
public static class AsusUSB
{
public const int HEATMAP = 20;
public const int GPUMODE = 21;
public const int ASUS_ID = 0x0b05;
@@ -153,33 +158,40 @@ namespace GHelper
};
}
static Dictionary<int, string> _modesSingleColor = new Dictionary<int, string>
{
{ 0, Properties.Strings.AuraStatic },
{ 1, Properties.Strings.AuraBreathe },
{ 10, Properties.Strings.AuraStrobe },
};
static Dictionary<int, string> _modes = new Dictionary<int, string>
{
{ 0, Properties.Strings.AuraStatic },
{ 1, Properties.Strings.AuraBreathe },
{ 2, Properties.Strings.AuraColorCycle },
{ 3, Properties.Strings.AuraRainbow },
{ 10, Properties.Strings.AuraStrobe },
{ HEATMAP, "Heatmap"}
};
{
{ 0, Properties.Strings.AuraStatic },
{ 1, Properties.Strings.AuraBreathe },
{ 2, Properties.Strings.AuraColorCycle },
{ 3, Properties.Strings.AuraRainbow },
{ 10, Properties.Strings.AuraStrobe },
{ HEATMAP, "Heatmap"},
{ GPUMODE, "GPU Mode" }
};
static Dictionary<int, string> _modesStrix = new Dictionary<int, string>
{
{ 0, Properties.Strings.AuraStatic },
{ 1, Properties.Strings.AuraBreathe },
{ 2, Properties.Strings.AuraColorCycle },
{ 3, Properties.Strings.AuraRainbow },
{ 4, "Star" },
{ 5, "Rain" },
{ 6, "Highlight" },
{ 7, "Laser" },
{ 8, "Ripple" },
{ 10, Properties.Strings.AuraStrobe},
{ 11, "Comet" },
{ 12, "Flash" },
{ HEATMAP, "Heatmap"}
};
{
{ 0, Properties.Strings.AuraStatic },
{ 1, Properties.Strings.AuraBreathe },
{ 2, Properties.Strings.AuraColorCycle },
{ 3, Properties.Strings.AuraRainbow },
{ 4, "Star" },
{ 5, "Rain" },
{ 6, "Highlight" },
{ 7, "Laser" },
{ 8, "Ripple" },
{ 10, Properties.Strings.AuraStrobe},
{ 11, "Comet" },
{ 12, "Flash" },
{ HEATMAP, "Heatmap"}
};
public static Dictionary<int, string> GetModes()
@@ -191,9 +203,7 @@ namespace GHelper
if (isSingleColor)
{
_modes.Remove(2);
_modes.Remove(3);
_modes.Remove(HEATMAP);
return _modesSingleColor;
}
if (AppConfig.IsAdvantageEdition())
@@ -380,63 +390,58 @@ namespace GHelper
public static void ApplyAuraPower()
{
Task.Run(async () =>
AuraPower flags = new();
// Keyboard
flags.AwakeKeyb = AppConfig.IsNotFalse("keyboard_awake");
flags.BootKeyb = AppConfig.IsNotFalse("keyboard_boot");
flags.SleepKeyb = AppConfig.IsNotFalse("keyboard_sleep");
flags.ShutdownKeyb = AppConfig.IsNotFalse("keyboard_shutdown");
// Logo
flags.AwakeLogo = AppConfig.IsNotFalse("keyboard_awake_logo");
flags.BootLogo = AppConfig.IsNotFalse("keyboard_boot_logo");
flags.SleepLogo = AppConfig.IsNotFalse("keyboard_sleep_logo");
flags.ShutdownLogo = AppConfig.IsNotFalse("keyboard_shutdown_logo");
// Lightbar
flags.AwakeBar = AppConfig.IsNotFalse("keyboard_awake_bar");
flags.BootBar = AppConfig.IsNotFalse("keyboard_boot_bar");
flags.SleepBar = AppConfig.IsNotFalse("keyboard_sleep_bar");
flags.ShutdownBar = AppConfig.IsNotFalse("keyboard_shutdown_bar");
// Lid
flags.AwakeLid = AppConfig.IsNotFalse("keyboard_awake_lid");
flags.BootLid = AppConfig.IsNotFalse("keyboard_boot_lid");
flags.SleepLid = AppConfig.IsNotFalse("keyboard_sleep_lid");
flags.ShutdownLid = AppConfig.IsNotFalse("keyboard_shutdown_lid");
// Rear Bar
flags.AwakeRear = AppConfig.IsNotFalse("keyboard_awake_lid");
flags.BootRear = AppConfig.IsNotFalse("keyboard_boot_lid");
flags.SleepRear = AppConfig.IsNotFalse("keyboard_sleep_lid");
flags.ShutdownRear = AppConfig.IsNotFalse("keyboard_shutdown_lid");
var devices = GetHidDevices(deviceIds);
byte[] msg = AuraPowerMessage(flags);
foreach (HidDevice device in devices)
{
AuraPower flags = new();
// Keyboard
flags.AwakeKeyb = AppConfig.IsNotFalse("keyboard_awake");
flags.BootKeyb = AppConfig.IsNotFalse("keyboard_boot");
flags.SleepKeyb = AppConfig.IsNotFalse("keyboard_sleep");
flags.ShutdownKeyb = AppConfig.IsNotFalse("keyboard_shutdown");
// Logo
flags.AwakeLogo = AppConfig.IsNotFalse("keyboard_awake_logo");
flags.BootLogo = AppConfig.IsNotFalse("keyboard_boot_logo");
flags.SleepLogo = AppConfig.IsNotFalse("keyboard_sleep_logo");
flags.ShutdownLogo = AppConfig.IsNotFalse("keyboard_shutdown_logo");
// Lightbar
flags.AwakeBar = AppConfig.IsNotFalse("keyboard_awake_bar");
flags.BootBar = AppConfig.IsNotFalse("keyboard_boot_bar");
flags.SleepBar = AppConfig.IsNotFalse("keyboard_sleep_bar");
flags.ShutdownBar = AppConfig.IsNotFalse("keyboard_shutdown_bar");
// Lid
flags.AwakeLid = AppConfig.IsNotFalse("keyboard_awake_lid");
flags.BootLid = AppConfig.IsNotFalse("keyboard_boot_lid");
flags.SleepLid = AppConfig.IsNotFalse("keyboard_sleep_lid");
flags.ShutdownLid = AppConfig.IsNotFalse("keyboard_shutdown_lid");
// Rear Bar
flags.AwakeRear = AppConfig.IsNotFalse("keyboard_awake_lid");
flags.BootRear = AppConfig.IsNotFalse("keyboard_boot_lid");
flags.SleepRear = AppConfig.IsNotFalse("keyboard_sleep_lid");
flags.ShutdownRear = AppConfig.IsNotFalse("keyboard_shutdown_lid");
var devices = GetHidDevices(deviceIds);
byte[] msg = AuraPowerMessage(flags);
foreach (HidDevice device in devices)
device.OpenDevice();
if (device.ReadFeatureData(out byte[] data, AURA_HID_ID))
{
device.OpenDevice();
if (device.ReadFeatureData(out byte[] data, AURA_HID_ID))
{
device.WriteFeatureData(msg);
Logger.WriteLine("USB-KB " + device.Attributes.ProductHexId + ":" + BitConverter.ToString(msg));
}
device.CloseDevice();
device.WriteFeatureData(msg);
Logger.WriteLine("USB-KB " + device.Attributes.ProductHexId + ":" + BitConverter.ToString(msg));
}
device.CloseDevice();
}
if (isTuf)
Program.acpi.TUFKeyboardPower(
flags.AwakeKeyb,
flags.BootKeyb,
flags.SleepKeyb,
flags.ShutdownKeyb);
});
if (isTuf)
Program.acpi.TUFKeyboardPower(
flags.AwakeKeyb,
flags.BootKeyb,
flags.SleepKeyb,
flags.ShutdownKeyb);
}
@@ -524,6 +529,7 @@ namespace GHelper
else
{
Debug.WriteLine(color.ToString());
auraDevice.Write(AuraMessage(0, color, color, 0));
auraDevice.Write(MESSAGE_SET);
}
@@ -531,6 +537,27 @@ namespace GHelper
}
public static void ApplyGPUColor()
{
if (AppConfig.Get("aura_mode") != GPUMODE) return;
Logger.WriteLine(GPUModeControl.gpuMode.ToString());
switch (GPUModeControl.gpuMode)
{
case AsusACPI.GPUModeUltimate:
ApplyColor(Color.Red, true);
break;
case AsusACPI.GPUModeEco:
ApplyColor(Color.Green, true);
break;
default:
ApplyColor(Color.Yellow, true);
break;
}
}
public static void ApplyAura()
{
@@ -539,56 +566,54 @@ namespace GHelper
SetColor(AppConfig.Get("aura_color"));
SetColor2(AppConfig.Get("aura_color2"));
timer.Enabled = false;
if (Mode == HEATMAP)
{
SetHeatmap(true);
timer.Enabled = true;
return;
}
else
}
if (Mode == GPUMODE)
{
timer.Enabled = false;
ApplyGPUColor();
return;
}
Task.Run(async () =>
int _speed;
switch (Speed)
{
case 1:
_speed = 0xeb;
break;
case 2:
_speed = 0xf5;
break;
default:
_speed = 0xe1;
break;
}
byte[] msg;
var devices = GetHidDevices(deviceIds);
int _speed;
switch (Speed)
foreach (HidDevice device in devices)
{
device.OpenDevice();
if (device.ReadFeatureData(out byte[] data, AURA_HID_ID))
{
case 1:
_speed = 0xeb;
break;
case 2:
_speed = 0xf5;
break;
default:
_speed = 0xe1;
break;
msg = AuraMessage(Mode, Color1, Color2, _speed, isSingleColor);
device.WriteFeatureData(msg);
device.WriteFeatureData(MESSAGE_APPLY);
device.WriteFeatureData(MESSAGE_SET);
Logger.WriteLine("USB-KB " + device.Attributes.Version + device.Description + device.DevicePath + ":" + BitConverter.ToString(msg));
}
device.CloseDevice();
}
byte[] msg;
var devices = GetHidDevices(deviceIds);
foreach (HidDevice device in devices)
{
device.OpenDevice();
if (device.ReadFeatureData(out byte[] data, AURA_HID_ID))
{
msg = AuraMessage(Mode, Color1, Color2, _speed, isSingleColor);
device.WriteFeatureData(msg);
device.WriteFeatureData(MESSAGE_APPLY);
device.WriteFeatureData(MESSAGE_SET);
Logger.WriteLine("USB-KB " + device.Attributes.Version + device.Description + device.DevicePath + ":" + BitConverter.ToString(msg));
}
device.CloseDevice();
}
if (isTuf)
Program.acpi.TUFKeyboardRGB(Mode, Color1, _speed);
});
if (isTuf)
Program.acpi.TUFKeyboardRGB(Mode, Color1, _speed);
}

View File

@@ -1,8 +1,35 @@
using System.Runtime.InteropServices;
using System.Collections;
using System.Runtime.InteropServices;
using static GHelper.Display.ScreenInterrogatory;
namespace GHelper.Display
{
class DeviceComparer : IComparer
{
public int Compare(object x, object y)
{
uint displayX = ((DISPLAYCONFIG_TARGET_DEVICE_NAME)x).connectorInstance;
uint displayY = ((DISPLAYCONFIG_TARGET_DEVICE_NAME)y).connectorInstance;
if (displayX > displayY)
return 1;
if (displayX < displayY)
return -1;
else
return 0;
}
}
class ScreenComparer : IComparer
{
public int Compare(object x, object y)
{
int displayX = Int32.Parse(((Screen)x).DeviceName.Replace(@"\\.\DISPLAY", ""));
int displayY = Int32.Parse(((Screen)y).DeviceName.Replace(@"\\.\DISPLAY", ""));
return (new CaseInsensitiveComparer()).Compare(displayX, displayY);
}
}
internal class ScreenNative
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
@@ -118,38 +145,19 @@ namespace GHelper.Display
public const int ENUM_CURRENT_SETTINGS = -1;
public const string defaultDevice = @"\\.\DISPLAY1";
static bool? _ultimate = null;
static bool isUltimate
{
get
{
if (_ultimate is null) _ultimate = (Program.acpi.DeviceGet(AsusACPI.GPUMux) == 0);
return (bool)_ultimate;
}
}
public static string? FindLaptopScreen(bool log = false)
{
string? laptopScreen = null;
var screens = Screen.AllScreens;
/*
if (!isUltimate)
{
foreach (var screen in screens )
{
if (log) Logger.WriteLine(screen.DeviceName);
if (screen.DeviceName == defaultDevice) return defaultDevice;
}
}
*/
try
{
var devices = GetAllDevices().ToArray();
int count = 0, displayNum = -1;
Array.Sort(devices, new DeviceComparer());
Array.Sort(screens, new ScreenComparer());
int count = 0;
string internalName = AppConfig.GetString("internal_display");
@@ -159,21 +167,23 @@ namespace GHelper.Display
device.outputTechnology == DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED ||
device.monitorFriendlyDeviceName == internalName)
{
displayNum = count;
AppConfig.Set("internal_display", device.monitorFriendlyDeviceName);
if (count < screens.Length)
{
laptopScreen = screens[count].DeviceName;
}
else
{
laptopScreen = defaultDevice;
}
}
if (log) Logger.WriteLine(device.monitorFriendlyDeviceName + ":" + device.outputTechnology.ToString() + ": " + ((count < screens.Length) ? screens[count].DeviceName : ""));
if (log) Logger.WriteLine(device.monitorFriendlyDeviceName + ":" + device.outputTechnology.ToString() + device.connectorInstance.ToString() + ": " + ((count < screens.Length) ? screens[count].DeviceName : ""));
count++;
}
count = 0;
foreach (var screen in screens)
{
if (count == displayNum) laptopScreen = screen.DeviceName;
count++;
}
if (displayNum > 0 && count == 0) laptopScreen = defaultDevice;
}
catch (Exception ex)
{

View File

@@ -183,7 +183,6 @@ namespace GHelper
SetKeyCombo(comboFNF4, textFNF4, "paddle");
}
else
{
SetKeyCombo(comboM1, textM1, "m1");
@@ -197,6 +196,10 @@ namespace GHelper
SetKeyCombo(comboFNE, textFNE, "fne");
}
if (AppConfig.IsStrix())
{
labelM4.Text = "M5/ROG";
}
InitTheme();
@@ -331,16 +334,10 @@ namespace GHelper
{
try
{
Task.Run(() =>
{
int hibernate = PowerNative.GetHibernateAfter();
if (hibernate < 0 || hibernate > numericHibernateAfter.Maximum) hibernate = 0;
BeginInvoke(delegate
{
numericHibernateAfter.Value = hibernate;
numericHibernateAfter.ValueChanged += NumericHibernateAfter_ValueChanged;
});
});
int hibernate = PowerNative.GetHibernateAfter();
if (hibernate < 0 || hibernate > numericHibernateAfter.Maximum) hibernate = 0;
numericHibernateAfter.Value = hibernate;
numericHibernateAfter.ValueChanged += NumericHibernateAfter_ValueChanged;
}
catch (Exception ex)

210
app/Fans.Designer.cs generated
View File

@@ -103,11 +103,14 @@ namespace GHelper
pictureBoxCPU = new PictureBox();
labelPowerLimits = new Label();
panelBoost = new Panel();
panelPowerMode = new Panel();
comboPowerMode = new RComboBox();
panelBoostTitle = new Panel();
pictureBoost = new PictureBox();
labelBoost = new Label();
panelPowerMode = new Panel();
comboPowerMode = new RComboBox();
panelPowerModeTItle = new Panel();
picturePowerMode = new PictureBox();
labelPowerModeTitle = new Label();
panelGPU = new Panel();
panelGPUTemp = new Panel();
labelGPUTemp = new Label();
@@ -133,9 +136,10 @@ namespace GHelper
buttonAdvanced = new RButton();
buttonGPU = new RButton();
buttonCPU = new RButton();
panelPowerModeTItle = new Panel();
picturePowerMode = new PictureBox();
labelPowerModeTitle = new Label();
panelGPUClockLimit = new Panel();
labelGPUClockLimit = new Label();
trackGPUClockLimit = new TrackBar();
labelGPUClockLimitTitle = new Label();
panelFans.SuspendLayout();
tableFanCharts.SuspendLayout();
((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit();
@@ -170,9 +174,11 @@ namespace GHelper
panelTitleCPU.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBoxCPU).BeginInit();
panelBoost.SuspendLayout();
panelPowerMode.SuspendLayout();
panelBoostTitle.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBoost).BeginInit();
panelPowerMode.SuspendLayout();
panelPowerModeTItle.SuspendLayout();
((System.ComponentModel.ISupportInitialize)picturePowerMode).BeginInit();
panelGPU.SuspendLayout();
panelGPUTemp.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackGPUTemp).BeginInit();
@@ -186,8 +192,8 @@ namespace GHelper
((System.ComponentModel.ISupportInitialize)pictureGPU).BeginInit();
panelNav.SuspendLayout();
tableNav.SuspendLayout();
panelPowerModeTItle.SuspendLayout();
((System.ComponentModel.ISupportInitialize)picturePowerMode).BeginInit();
panelGPUClockLimit.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackGPUClockLimit).BeginInit();
SuspendLayout();
//
// panelFans
@@ -499,7 +505,7 @@ namespace GHelper
panelAdvanced.Controls.Add(panelTemperature);
panelAdvanced.Controls.Add(panelTitleTemp);
panelAdvanced.Dock = DockStyle.Top;
panelAdvanced.Location = new Point(10, 1396);
panelAdvanced.Location = new Point(10, 1520);
panelAdvanced.Name = "panelAdvanced";
panelAdvanced.Size = new Size(520, 888);
panelAdvanced.TabIndex = 14;
@@ -797,7 +803,7 @@ namespace GHelper
panelPower.Controls.Add(panelPowerMode);
panelPower.Controls.Add(panelPowerModeTItle);
panelPower.Dock = DockStyle.Top;
panelPower.Location = new Point(10, 640);
panelPower.Location = new Point(10, 764);
panelPower.Margin = new Padding(4);
panelPower.Name = "panelPower";
panelPower.Size = new Size(520, 756);
@@ -1020,30 +1026,6 @@ namespace GHelper
panelBoost.Size = new Size(520, 64);
panelBoost.TabIndex = 13;
//
// panelPowerMode
//
panelPowerMode.Controls.Add(comboPowerMode);
panelPowerMode.Dock = DockStyle.Top;
panelPowerMode.Location = new Point(0, 60);
panelPowerMode.Margin = new Padding(4);
panelPowerMode.Name = "panelPowerMode";
panelPowerMode.Size = new Size(520, 64);
panelPowerMode.TabIndex = 49;
//
// comboPowerMode
//
comboPowerMode.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
comboPowerMode.BorderColor = Color.White;
comboPowerMode.ButtonColor = Color.FromArgb(255, 255, 255);
comboPowerMode.DropDownStyle = ComboBoxStyle.DropDownList;
comboPowerMode.FormattingEnabled = true;
comboPowerMode.Items.AddRange(new object[] { "Disabled", "Enabled", "Aggressive", "Efficient Enabled", "Efficient Aggressive", "Aggressive at Guaranteed", "Efficient at Guaranteed" });
comboPowerMode.Location = new Point(13, 12);
comboPowerMode.Margin = new Padding(4);
comboPowerMode.Name = "comboPowerMode";
comboPowerMode.Size = new Size(329, 40);
comboPowerMode.TabIndex = 42;
//
// panelBoostTitle
//
panelBoostTitle.AutoSize = true;
@@ -1080,6 +1062,66 @@ namespace GHelper
labelBoost.TabIndex = 39;
labelBoost.Text = "CPU Boost";
//
// panelPowerMode
//
panelPowerMode.Controls.Add(comboPowerMode);
panelPowerMode.Dock = DockStyle.Top;
panelPowerMode.Location = new Point(0, 60);
panelPowerMode.Margin = new Padding(4);
panelPowerMode.Name = "panelPowerMode";
panelPowerMode.Size = new Size(520, 64);
panelPowerMode.TabIndex = 49;
//
// comboPowerMode
//
comboPowerMode.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
comboPowerMode.BorderColor = Color.White;
comboPowerMode.ButtonColor = Color.FromArgb(255, 255, 255);
comboPowerMode.DropDownStyle = ComboBoxStyle.DropDownList;
comboPowerMode.FormattingEnabled = true;
comboPowerMode.Items.AddRange(new object[] { "Disabled", "Enabled", "Aggressive", "Efficient Enabled", "Efficient Aggressive", "Aggressive at Guaranteed", "Efficient at Guaranteed" });
comboPowerMode.Location = new Point(13, 12);
comboPowerMode.Margin = new Padding(4);
comboPowerMode.Name = "comboPowerMode";
comboPowerMode.Size = new Size(329, 40);
comboPowerMode.TabIndex = 42;
//
// panelPowerModeTItle
//
panelPowerModeTItle.AutoSize = true;
panelPowerModeTItle.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelPowerModeTItle.Controls.Add(picturePowerMode);
panelPowerModeTItle.Controls.Add(labelPowerModeTitle);
panelPowerModeTItle.Dock = DockStyle.Top;
panelPowerModeTItle.Location = new Point(0, 0);
panelPowerModeTItle.Margin = new Padding(4);
panelPowerModeTItle.Name = "panelPowerModeTItle";
panelPowerModeTItle.Size = new Size(520, 60);
panelPowerModeTItle.TabIndex = 50;
//
// picturePowerMode
//
picturePowerMode.BackgroundImage = Properties.Resources.icons8_gauge_32;
picturePowerMode.BackgroundImageLayout = ImageLayout.Zoom;
picturePowerMode.InitialImage = null;
picturePowerMode.Location = new Point(10, 18);
picturePowerMode.Margin = new Padding(4, 2, 4, 10);
picturePowerMode.Name = "picturePowerMode";
picturePowerMode.Size = new Size(32, 32);
picturePowerMode.TabIndex = 40;
picturePowerMode.TabStop = false;
//
// labelPowerModeTitle
//
labelPowerModeTitle.AutoSize = true;
labelPowerModeTitle.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelPowerModeTitle.Location = new Point(46, 18);
labelPowerModeTitle.Margin = new Padding(4, 0, 4, 0);
labelPowerModeTitle.Name = "labelPowerModeTitle";
labelPowerModeTitle.Size = new Size(271, 32);
labelPowerModeTitle.TabIndex = 39;
labelPowerModeTitle.Text = "Windows Power Mode";
//
// panelGPU
//
panelGPU.AutoSize = true;
@@ -1087,13 +1129,14 @@ namespace GHelper
panelGPU.Controls.Add(panelGPUBoost);
panelGPU.Controls.Add(panelGPUMemory);
panelGPU.Controls.Add(panelGPUCore);
panelGPU.Controls.Add(panelGPUClockLimit);
panelGPU.Controls.Add(panelTitleGPU);
panelGPU.Dock = DockStyle.Top;
panelGPU.Location = new Point(10, 66);
panelGPU.Margin = new Padding(4);
panelGPU.Name = "panelGPU";
panelGPU.Padding = new Padding(0, 0, 0, 18);
panelGPU.Size = new Size(520, 574);
panelGPU.Size = new Size(520, 698);
panelGPU.TabIndex = 44;
panelGPU.Visible = false;
//
@@ -1105,7 +1148,7 @@ namespace GHelper
panelGPUTemp.Controls.Add(labelGPUTempTitle);
panelGPUTemp.Controls.Add(trackGPUTemp);
panelGPUTemp.Dock = DockStyle.Top;
panelGPUTemp.Location = new Point(0, 432);
panelGPUTemp.Location = new Point(0, 556);
panelGPUTemp.Margin = new Padding(4);
panelGPUTemp.MaximumSize = new Size(0, 124);
panelGPUTemp.Name = "panelGPUTemp";
@@ -1154,7 +1197,7 @@ namespace GHelper
panelGPUBoost.Controls.Add(labelGPUBoostTitle);
panelGPUBoost.Controls.Add(trackGPUBoost);
panelGPUBoost.Dock = DockStyle.Top;
panelGPUBoost.Location = new Point(0, 308);
panelGPUBoost.Location = new Point(0, 432);
panelGPUBoost.Margin = new Padding(4);
panelGPUBoost.MaximumSize = new Size(0, 124);
panelGPUBoost.Name = "panelGPUBoost";
@@ -1203,7 +1246,7 @@ namespace GHelper
panelGPUMemory.Controls.Add(labelGPUMemoryTitle);
panelGPUMemory.Controls.Add(trackGPUMemory);
panelGPUMemory.Dock = DockStyle.Top;
panelGPUMemory.Location = new Point(0, 184);
panelGPUMemory.Location = new Point(0, 308);
panelGPUMemory.Margin = new Padding(4);
panelGPUMemory.MaximumSize = new Size(0, 124);
panelGPUMemory.Name = "panelGPUMemory";
@@ -1252,7 +1295,7 @@ namespace GHelper
panelGPUCore.Controls.Add(trackGPUCore);
panelGPUCore.Controls.Add(labelGPUCoreTitle);
panelGPUCore.Dock = DockStyle.Top;
panelGPUCore.Location = new Point(0, 60);
panelGPUCore.Location = new Point(0, 184);
panelGPUCore.Margin = new Padding(4);
panelGPUCore.MaximumSize = new Size(0, 124);
panelGPUCore.Name = "panelGPUCore";
@@ -1416,41 +1459,55 @@ namespace GHelper
buttonCPU.TextImageRelation = TextImageRelation.ImageBeforeText;
buttonCPU.UseVisualStyleBackColor = false;
//
// panelPowerModeTItle
// panelGPUClockLimit
//
panelPowerModeTItle.AutoSize = true;
panelPowerModeTItle.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelPowerModeTItle.Controls.Add(picturePowerMode);
panelPowerModeTItle.Controls.Add(labelPowerModeTitle);
panelPowerModeTItle.Dock = DockStyle.Top;
panelPowerModeTItle.Location = new Point(0, 0);
panelPowerModeTItle.Margin = new Padding(4);
panelPowerModeTItle.Name = "panelPowerModeTItle";
panelPowerModeTItle.Size = new Size(520, 60);
panelPowerModeTItle.TabIndex = 50;
panelGPUClockLimit.AutoSize = true;
panelGPUClockLimit.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelGPUClockLimit.Controls.Add(labelGPUClockLimit);
panelGPUClockLimit.Controls.Add(trackGPUClockLimit);
panelGPUClockLimit.Controls.Add(labelGPUClockLimitTitle);
panelGPUClockLimit.Dock = DockStyle.Top;
panelGPUClockLimit.Location = new Point(0, 60);
panelGPUClockLimit.Margin = new Padding(4);
panelGPUClockLimit.MaximumSize = new Size(0, 124);
panelGPUClockLimit.Name = "panelGPUClockLimit";
panelGPUClockLimit.Size = new Size(520, 124);
panelGPUClockLimit.TabIndex = 48;
//
// picturePowerMode
// labelGPUClockLimit
//
picturePowerMode.BackgroundImage = Properties.Resources.icons8_gauge_32;
picturePowerMode.BackgroundImageLayout = ImageLayout.Zoom;
picturePowerMode.InitialImage = null;
picturePowerMode.Location = new Point(10, 18);
picturePowerMode.Margin = new Padding(4, 2, 4, 10);
picturePowerMode.Name = "picturePowerMode";
picturePowerMode.Size = new Size(32, 32);
picturePowerMode.TabIndex = 40;
picturePowerMode.TabStop = false;
labelGPUClockLimit.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelGPUClockLimit.Location = new Point(326, 16);
labelGPUClockLimit.Margin = new Padding(4, 0, 4, 0);
labelGPUClockLimit.Name = "labelGPUClockLimit";
labelGPUClockLimit.Size = new Size(176, 32);
labelGPUClockLimit.TabIndex = 29;
labelGPUClockLimit.Text = "1500 MHz";
labelGPUClockLimit.TextAlign = ContentAlignment.TopRight;
//
// labelPowerModeTitle
// trackGPUClockLimit
//
labelPowerModeTitle.AutoSize = true;
labelPowerModeTitle.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelPowerModeTitle.Location = new Point(46, 18);
labelPowerModeTitle.Margin = new Padding(4, 0, 4, 0);
labelPowerModeTitle.Name = "labelPowerModeTitle";
labelPowerModeTitle.Size = new Size(271, 32);
labelPowerModeTitle.TabIndex = 39;
labelPowerModeTitle.Text = "Windows Power Mode";
trackGPUClockLimit.LargeChange = 100;
trackGPUClockLimit.Location = new Point(6, 48);
trackGPUClockLimit.Margin = new Padding(4, 2, 4, 2);
trackGPUClockLimit.Maximum = 3000;
trackGPUClockLimit.Name = "trackGPUClockLimit";
trackGPUClockLimit.RightToLeft = RightToLeft.No;
trackGPUClockLimit.Size = new Size(496, 90);
trackGPUClockLimit.SmallChange = 10;
trackGPUClockLimit.TabIndex = 18;
trackGPUClockLimit.TickFrequency = 50;
trackGPUClockLimit.TickStyle = TickStyle.TopLeft;
//
// labelGPUClockLimitTitle
//
labelGPUClockLimitTitle.AutoSize = true;
labelGPUClockLimitTitle.Location = new Point(10, 16);
labelGPUClockLimitTitle.Margin = new Padding(4, 0, 4, 0);
labelGPUClockLimitTitle.Name = "labelGPUClockLimitTitle";
labelGPUClockLimitTitle.Size = new Size(188, 32);
labelGPUClockLimitTitle.TabIndex = 17;
labelGPUClockLimitTitle.Text = "Core Clock Limit";
//
// Fans
//
@@ -1519,10 +1576,13 @@ namespace GHelper
panelTitleCPU.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureBoxCPU).EndInit();
panelBoost.ResumeLayout(false);
panelPowerMode.ResumeLayout(false);
panelBoostTitle.ResumeLayout(false);
panelBoostTitle.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureBoost).EndInit();
panelPowerMode.ResumeLayout(false);
panelPowerModeTItle.ResumeLayout(false);
panelPowerModeTItle.PerformLayout();
((System.ComponentModel.ISupportInitialize)picturePowerMode).EndInit();
panelGPU.ResumeLayout(false);
panelGPU.PerformLayout();
panelGPUTemp.ResumeLayout(false);
@@ -1542,9 +1602,9 @@ namespace GHelper
((System.ComponentModel.ISupportInitialize)pictureGPU).EndInit();
panelNav.ResumeLayout(false);
tableNav.ResumeLayout(false);
panelPowerModeTItle.ResumeLayout(false);
panelPowerModeTItle.PerformLayout();
((System.ComponentModel.ISupportInitialize)picturePowerMode).EndInit();
panelGPUClockLimit.ResumeLayout(false);
panelGPUClockLimit.PerformLayout();
((System.ComponentModel.ISupportInitialize)trackGPUClockLimit).EndInit();
ResumeLayout(false);
PerformLayout();
}
@@ -1647,5 +1707,9 @@ namespace GHelper
private Panel panelPowerModeTItle;
private PictureBox picturePowerMode;
private Label labelPowerModeTitle;
private Panel panelGPUClockLimit;
private Label labelGPUClockLimit;
private TrackBar trackGPUClockLimit;
private Label labelGPUClockLimitTitle;
}
}

View File

@@ -109,6 +109,9 @@ namespace GHelper
checkApplyFans.Click += CheckApplyFans_Click;
checkApplyPower.Click += CheckApplyPower_Click;
trackGPUClockLimit.Minimum = NvidiaGpuControl.MinClockLimit;
trackGPUClockLimit.Maximum = NvidiaGpuControl.MaxClockLimit;
trackGPUCore.Minimum = NvidiaGpuControl.MinCoreOffset;
trackGPUCore.Maximum = NvidiaGpuControl.MaxCoreOffset;
@@ -121,6 +124,7 @@ namespace GHelper
trackGPUTemp.Minimum = AsusACPI.MinGPUTemp;
trackGPUTemp.Maximum = AsusACPI.MaxGPUTemp;
trackGPUClockLimit.Scroll += trackGPUClockLimit_Scroll;
trackGPUCore.Scroll += trackGPU_Scroll;
trackGPUMemory.Scroll += trackGPU_Scroll;
@@ -131,6 +135,7 @@ namespace GHelper
trackGPUMemory.MouseUp += TrackGPU_MouseUp;
trackGPUBoost.MouseUp += TrackGPU_MouseUp;
trackGPUTemp.MouseUp += TrackGPU_MouseUp;
trackGPUClockLimit.MouseUp += TrackGPU_MouseUp;
//labelInfo.MaximumSize = new Size(280, 0);
labelFansResult.Visible = false;
@@ -435,24 +440,29 @@ namespace GHelper
int gpu_boost = AppConfig.GetMode("gpu_boost");
int gpu_temp = AppConfig.GetMode("gpu_temp");
int core = AppConfig.GetMode("gpu_core");
int memory = AppConfig.GetMode("gpu_memory");
int clock_limit = AppConfig.GetMode("gpu_clock_limit");
if (gpu_boost < 0) gpu_boost = AsusACPI.MaxGPUBoost;
if (gpu_temp < 0) gpu_temp = AsusACPI.MaxGPUTemp;
if (core == -1) core = 0;
if (memory == -1) memory = 0;
if (clock_limit == -1) clock_limit = NvidiaGpuControl.MaxClockLimit;
//if (readClocks)
//{
int status = nvControl.GetClocks(out int current_core, out int current_memory);
if (status != -1)
if (nvControl.GetClocks(out int current_core, out int current_memory))
{
core = current_core;
memory = current_memory;
}
int _clockLimit = nvControl.GetMaxGPUCLock();
if (_clockLimit == 0) clock_limit = NvidiaGpuControl.MaxClockLimit;
else if (_clockLimit > 0) clock_limit = _clockLimit;
try
{
labelGPU.Text = nvControl.FullName;
@@ -463,6 +473,7 @@ namespace GHelper
}
//}
trackGPUClockLimit.Value = Math.Max(Math.Min(clock_limit, NvidiaGpuControl.MaxClockLimit), NvidiaGpuControl.MinClockLimit);
trackGPUCore.Value = Math.Max(Math.Min(core, NvidiaGpuControl.MaxCoreOffset), NvidiaGpuControl.MinCoreOffset);
trackGPUMemory.Value = Math.Max(Math.Min(memory, NvidiaGpuControl.MaxMemoryOffset), NvidiaGpuControl.MinMemoryOffset);
@@ -488,8 +499,24 @@ namespace GHelper
{
labelGPUCore.Text = $"{trackGPUCore.Value} MHz";
labelGPUMemory.Text = $"{trackGPUMemory.Value} MHz";
labelGPUBoost.Text = $"{trackGPUBoost.Value}W";
labelGPUTemp.Text = $"{trackGPUTemp.Value}°C";
if (trackGPUClockLimit.Value >= NvidiaGpuControl.MaxClockLimit)
labelGPUClockLimit.Text = "Default";
else
labelGPUClockLimit.Text = $"{trackGPUClockLimit.Value} MHz";
}
private void trackGPUClockLimit_Scroll(object? sender, EventArgs e)
{
int maxClock = (int)Math.Round((float)trackGPUClockLimit.Value / 50) * 50;
trackGPUClockLimit.Value = maxClock;
AppConfig.SetMode("gpu_clock_limit", maxClock);
VisualiseGPUSettings();
}
private void trackGPU_Scroll(object? sender, EventArgs e)
@@ -501,6 +528,7 @@ namespace GHelper
AppConfig.SetMode("gpu_core", trackGPUCore.Value);
AppConfig.SetMode("gpu_memory", trackGPUMemory.Value);
VisualiseGPUSettings();
}
@@ -615,9 +643,11 @@ namespace GHelper
{
string powerMode = (string)comboPowerMode.SelectedValue;
PowerNative.SetPowerMode(powerMode);
if (PowerNative.GetDefaultPowerMode(Modes.GetCurrentBase()) != powerMode)
AppConfig.SetMode("powermode", powerMode);
else
AppConfig.RemoveMode("powermode");
}
private void ComboBoost_Changed(object? sender, EventArgs e)
@@ -897,13 +927,17 @@ namespace GHelper
if (gpuVisible)
{
trackGPUClockLimit.Value = NvidiaGpuControl.MaxClockLimit;
trackGPUCore.Value = 0;
trackGPUMemory.Value = 0;
trackGPUBoost.Value = AsusACPI.MaxGPUBoost;
trackGPUTemp.Value = AsusACPI.MaxGPUTemp;
AppConfig.SetMode("gpu_clock_limit", trackGPUClockLimit.Value);
AppConfig.SetMode("gpu_boost", trackGPUBoost.Value);
AppConfig.SetMode("gpu_temp", trackGPUTemp.Value);
AppConfig.SetMode("gpu_core", trackGPUCore.Value);
AppConfig.SetMode("gpu_memory", trackGPUMemory.Value);

View File

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

View File

@@ -10,6 +10,8 @@ namespace GHelper.Gpu
SettingsForm settings;
ScreenControl screenControl = new ScreenControl();
public static int gpuMode;
public GPUModeControl(SettingsForm settingsForm)
{
settings = settingsForm;
@@ -23,18 +25,16 @@ namespace GHelper.Gpu
Logger.WriteLine("Eco flag : " + eco);
Logger.WriteLine("Mux flag : " + mux);
int GpuMode;
if (mux == 0)
{
GpuMode = AsusACPI.GPUModeUltimate;
gpuMode = AsusACPI.GPUModeUltimate;
}
else
{
if (eco == 1)
GpuMode = AsusACPI.GPUModeEco;
gpuMode = AsusACPI.GPUModeEco;
else
GpuMode = AsusACPI.GPUModeStandard;
gpuMode = AsusACPI.GPUModeStandard;
// Ultimate mode not supported
if (mux != 1) settings.HideUltimateMode();
@@ -42,10 +42,13 @@ namespace GHelper.Gpu
if (eco < 0 && mux < 0) settings.HideGPUModes();
}
AppConfig.Set("gpu_mode", GpuMode);
AppConfig.Set("gpu_mode", gpuMode);
InitXGM();
settings.VisualiseGPUMode(GpuMode);
settings.VisualiseGPUMode(gpuMode);
AsusUSB.ApplyGPUColor();
}

View File

@@ -18,6 +18,9 @@ public class NvidiaGpuControl : IGpuControl
public const int MinCoreOffset = -250;
public const int MinMemoryOffset = -250;
public const int MinClockLimit = 1000;
public const int MaxClockLimit = 3000;
private static PhysicalGPU? _internalGpu;
public NvidiaGpuControl()
@@ -76,7 +79,7 @@ public class NvidiaGpuControl : IGpuControl
}
public int GetClocks(out int core, out int memory)
public bool GetClocks(out int core, out int memory)
{
PhysicalGPU internalGpu = _internalGpu!;
@@ -95,28 +98,24 @@ public class NvidiaGpuControl : IGpuControl
Logger.WriteLine("GPU VOLT:" + delta.IsEditable + " - " + delta.ValueDeltaInMicroVolt.DeltaValue);
}
return 0;
return true;
}
catch (Exception ex)
{
Logger.WriteLine("GET GPU CLOCKS:" + ex.Message);
core = memory = 0;
return -1;
return false;
}
}
public bool RestartGPU()
private bool RunPowershellCommand(string script)
{
try
{
string script = @"$device = Get-PnpDevice | Where-Object { $_.FriendlyName -imatch 'NVIDIA' -and $_.Class -eq 'Display' }; Disable-PnpDevice $device.InstanceId -Confirm:$false; Start-Sleep -Seconds 5; Enable-PnpDevice $device.InstanceId -Confirm:$false";
Logger.WriteLine(script);
ProcessHelper.RunCMD("powershell", script);
//Thread.Sleep(2000);
return true;
}
catch (Exception ex)
@@ -124,27 +123,71 @@ public class NvidiaGpuControl : IGpuControl
Logger.WriteLine(ex.ToString());
return false;
}
}
public int SetClocksFromConfig()
public int GetMaxGPUCLock()
{
int core = AppConfig.Get("gpu_core", 0);
int memory = AppConfig.Get("gpu_memory", 0);
int status = SetClocks(core, memory);
return status;
PhysicalGPU internalGpu = _internalGpu!;
try
{
PrivateClockBoostLockV2 data = GPUApi.GetClockBoostLock(internalGpu.Handle);
int limit = (int)data.ClockBoostLocks[0].VoltageInMicroV / 1000;
Logger.WriteLine("GET CLOCK LIMIT: " + limit);
return limit;
}
catch (Exception ex)
{
Logger.WriteLine("GET CLOCK LIMIT: " + ex.Message);
return -1;
}
}
public int SetClocks(int core, int memory, int voltage = 0)
public int SetMaxGPUClock(int clock)
{
if (clock < MinClockLimit || clock >= MaxClockLimit) clock = 0;
int _clockLimit = GetMaxGPUCLock();
if (_clockLimit != clock)
{
if (clock > 0) RunPowershellCommand($"nvidia-smi -lgc 0,{clock}");
else RunPowershellCommand($"nvidia-smi -rgc");
return 1;
}
else
{
return 0;
}
}
public bool RestartGPU()
{
return RunPowershellCommand(@"$device = Get-PnpDevice | Where-Object { $_.FriendlyName -imatch 'NVIDIA' -and $_.Class -eq 'Display' }; Disable-PnpDevice $device.InstanceId -Confirm:$false; Start-Sleep -Seconds 5; Enable-PnpDevice $device.InstanceId -Confirm:$false");
}
public int SetClocks(int core, int memory)
{
if (core < MinCoreOffset || core > MaxCoreOffset) return 0;
if (memory < MinMemoryOffset || memory > MaxMemoryOffset) return 0;
if (GetClocks(out int currentCore, out int currentMemory))
{
if (Math.Abs(core - currentCore) < 5 && Math.Abs(memory - currentMemory) < 5) return 0;
}
PhysicalGPU internalGpu = _internalGpu!;
var coreClock = new PerformanceStates20ClockEntryV1(PublicClockDomain.Graphics, new PerformanceStates20ParameterDelta(core * 1000));
var memoryClock = new PerformanceStates20ClockEntryV1(PublicClockDomain.Memory, new PerformanceStates20ParameterDelta(memory * 1000));
var voltageEntry = new PerformanceStates20BaseVoltageEntryV1(PerformanceVoltageDomain.Core, new PerformanceStates20ParameterDelta(voltage));
//var voltageEntry = new PerformanceStates20BaseVoltageEntryV1(PerformanceVoltageDomain.Core, new PerformanceStates20ParameterDelta(voltage));
PerformanceStates20ClockEntryV1[] clocks = { coreClock, memoryClock };
PerformanceStates20BaseVoltageEntryV1[] voltages = { };
@@ -164,8 +207,6 @@ public class NvidiaGpuControl : IGpuControl
return -1;
}
return 1;
}

View File

@@ -132,7 +132,12 @@ namespace GHelper.Helpers
cmd.StartInfo.FileName = name;
cmd.StartInfo.Arguments = args;
cmd.Start();
Logger.WriteLine(cmd.StandardOutput.ReadToEnd());
string result = cmd.StandardOutput.ReadToEnd().Replace(Environment.NewLine, " ").Trim(' ');
Logger.WriteLine(args);
Logger.WriteLine(result);
cmd.WaitForExit();
}

View File

@@ -70,7 +70,13 @@ namespace GHelper.Mode
Modes.SetCurrent(mode);
Program.acpi.DeviceSet(AsusACPI.PerformanceMode, AppConfig.IsManualModeRequired() ? AsusACPI.PerformanceManual : Modes.GetBase(mode), "Mode");
int status = Program.acpi.DeviceSet(AsusACPI.PerformanceMode, AppConfig.IsManualModeRequired() ? AsusACPI.PerformanceManual : Modes.GetBase(mode), "Mode");
// Vivobook fallback
if (status != 1)
{
Program.acpi.DeviceSet(AsusACPI.VivoBookMode, Modes.GetBase(mode), "VivoMode");
}
if (AppConfig.Is("xgm_fan") && Program.acpi.IsXGConnected()) AsusUSB.ResetXGM();
@@ -291,10 +297,11 @@ namespace GHelper.Mode
Task.Run(() =>
{
int gpu_core = AppConfig.GetMode("gpu_core");
int gpu_memory = AppConfig.GetMode("gpu_memory");
int core = AppConfig.GetMode("gpu_core");
int memory = AppConfig.GetMode("gpu_memory");
int clock_limit = AppConfig.GetMode("gpu_clock_limit");
if (gpu_core == -1 && gpu_memory == -1) return;
if (core == -1 && memory == -1) return;
//if ((gpu_core > -5 && gpu_core < 5) && (gpu_memory > -5 && gpu_memory < 5)) launchAsAdmin = false;
@@ -305,20 +312,16 @@ namespace GHelper.Mode
using NvidiaGpuControl nvControl = (NvidiaGpuControl)HardwareControl.GpuControl;
try
{
int getStatus = nvControl.GetClocks(out int current_core, out int current_memory);
if (getStatus != -1)
{
if (Math.Abs(gpu_core - current_core) < 5 && Math.Abs(gpu_memory - current_memory) < 5) return;
}
int setStatus = nvControl.SetClocks(gpu_core, gpu_memory);
if (launchAsAdmin && setStatus == -1) ProcessHelper.RunAsAdmin("gpu");
int statusLimit = nvControl.SetMaxGPUClock(clock_limit);
int statusClocks = nvControl.SetClocks(core, memory);
if ((statusLimit != 0 || statusClocks != 0) && launchAsAdmin) ProcessHelper.RunAsAdmin("gpu");
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
}
settings.GPUInit();
});
}

View File

@@ -0,0 +1,106 @@
namespace GHelper.Peripherals.Mouse.Models
{
//P709_Wireless
public class KerisWirelssAimpoint : AsusMouse
{
public KerisWirelssAimpoint() : base(0x0B05, 0x1A68, "mi_00", true)
{
}
protected KerisWirelssAimpoint(ushort vendorId, bool wireless) : base(0x0B05, vendorId, "mi_00", wireless)
{
}
public override int DPIProfileCount()
{
return 4;
}
public override string GetDisplayName()
{
return "ROG Keris Wireless Aimpoint (Wireless)";
}
public override PollingRate[] SupportedPollingrates()
{
return new PollingRate[] {
PollingRate.PR125Hz,
PollingRate.PR250Hz,
PollingRate.PR500Hz,
PollingRate.PR1000Hz
};
}
public override int ProfileCount()
{
return 5;
}
public override int MaxDPI()
{
return 36_000;
}
public override bool HasXYDPI()
{
return true;
}
public override bool HasDebounceSetting()
{
return true;
}
public override bool HasLiftOffSetting()
{
return true;
}
public override bool HasRGB()
{
return true;
}
public override LightingZone[] SupportedLightingZones()
{
return new LightingZone[] { LightingZone.Logo };
}
public override bool HasAutoPowerOff()
{
return true;
}
public override bool HasAngleSnapping()
{
return true;
}
public override bool HasAngleTuning()
{
return true;
}
public override bool HasLowBatteryWarning()
{
return true;
}
public override bool HasDPIColors()
{
return true;
}
}
public class KerisWirelssAimpointWired : KerisWirelssAimpoint
{
public KerisWirelssAimpointWired() : base(0x1A66, false)
{
}
public override string GetDisplayName()
{
return "ROG Keris Wireless Aimpoint (Wired)";
}
}
}

View File

@@ -197,6 +197,8 @@ namespace GHelper.Peripherals
DetectMouse(new GladiusIII());
DetectMouse(new GladiusIIIWired());
DetectMouse(new TUFM3());
DetectMouse(new KerisWirelssAimpoint());
DetectMouse(new KerisWirelssAimpointWired());
}
public static void DetectMouse(AsusMouse am)

View File

@@ -163,64 +163,64 @@
<value>실행중인 Asus 서비스</value>
</data>
<data name="AuraBatteryState" xml:space="preserve">
<value>Battery State</value>
<value>배터리 상태</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>Breathe</value>
<value>숨쉬기</value>
</data>
<data name="AuraClockwise" xml:space="preserve">
<value>Clockwise</value>
<value>시계 방향</value>
</data>
<data name="AuraColorCycle" xml:space="preserve">
<value>Color Cycle</value>
<value>색 순환</value>
</data>
<data name="AuraComet" xml:space="preserve">
<value>Comet</value>
<value>혜성</value>
</data>
<data name="AuraCounterClockwise" xml:space="preserve">
<value>Counterclockwise</value>
<value>반시계 방향</value>
</data>
<data name="AuraFast" xml:space="preserve">
<value>빠르게</value>
</data>
<data name="AuraLightingMode" xml:space="preserve">
<value>Lighting Mode</value>
<value>조명 모드</value>
</data>
<data name="AuraNormal" xml:space="preserve">
<value>보통</value>
</data>
<data name="AuraRainbow" xml:space="preserve">
<value>Rainbow</value>
<value>무지개</value>
</data>
<data name="AuraRandomColor" xml:space="preserve">
<value>Random</value>
<value>랜덤</value>
</data>
<data name="AuraReact" xml:space="preserve">
<value>React</value>
<value>반응</value>
</data>
<data name="AuraSlow" xml:space="preserve">
<value>느리게</value>
</data>
<data name="AuraStatic" xml:space="preserve">
<value>Static</value>
<value>정적</value>
</data>
<data name="AuraStrobe" xml:space="preserve">
<value>Strobe</value>
<value>섬광</value>
</data>
<data name="AuraZoneAll" xml:space="preserve">
<value>All</value>
<value>전체</value>
</data>
<data name="AuraZoneDock" xml:space="preserve">
<value>Dock</value>
<value></value>
</data>
<data name="AuraZoneLogo" xml:space="preserve">
<value>Logo</value>
<value>로고</value>
</data>
<data name="AuraZoneScroll" xml:space="preserve">
<value>Scrollwheel</value>
<value>스크롤 휠</value>
</data>
<data name="AuraZoneUnderglow" xml:space="preserve">
<value>Underglow</value>
<value>하단 조명</value>
</data>
<data name="AutoApply" xml:space="preserve">
<value>자동 적용</value>
@@ -232,28 +232,28 @@
<value>배터리 사용 중에만 60Hz 설정</value>
</data>
<data name="Awake" xml:space="preserve">
<value>Awake</value>
<value>절전 모드 해제</value>
</data>
<data name="BacklightTimeout" xml:space="preserve">
<value>전원 연결 / 배터리 사용 중 자동 꺼짐 시간 (0 - 항상 켜짐)</value>
<value>전원 / 배터리 사용 중 자동 꺼짐 시간 (0 - 항상 켜짐)</value>
</data>
<data name="Balanced" xml:space="preserve">
<value>균형</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Charge</value>
<value>잔량</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>배터리 충전 제한</value>
</data>
<data name="BatteryHealth" xml:space="preserve">
<value>Battery Health</value>
<value>배터리 수명</value>
</data>
<data name="BiosAndDriverUpdates" xml:space="preserve">
<value>바이오스/드라이버 업데이트</value>
</data>
<data name="Boot" xml:space="preserve">
<value>Boot</value>
<value>부팅</value>
</data>
<data name="Brightness" xml:space="preserve">
<value>밝기</value>
@@ -265,7 +265,7 @@
<value>밝기 증가</value>
</data>
<data name="Charging" xml:space="preserve">
<value>Charging</value>
<value>충전 중</value>
</data>
<data name="Color" xml:space="preserve">
<value>색상</value>
@@ -286,7 +286,7 @@
<value>방전 중</value>
</data>
<data name="DownloadUpdate" xml:space="preserve">
<value>Download</value>
<value>다운로드</value>
</data>
<data name="DriverAndSoftware" xml:space="preserve">
<value>드라이버와 소프트웨어</value>
@@ -336,7 +336,7 @@
<value>팬 속도/전력</value>
</data>
<data name="FanSpeed" xml:space="preserve">
<value>Fan</value>
<value></value>
</data>
<data name="FansPower" xml:space="preserve">
<value>팬 + 전력</value>
@@ -375,10 +375,10 @@
<value>목표 온도</value>
</data>
<data name="HibernateAfter" xml:space="preserve">
<value>Minutes till Hibernation in sleep on battery (0 - OFF)</value>
<value>최대 절전 모드 전환 시간 (0 - 꺼짐)</value>
</data>
<data name="High" xml:space="preserve">
<value>High</value>
<value>높게</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>키 설정</value>
@@ -405,13 +405,13 @@
<value>라이트바</value>
</data>
<data name="Lighting" xml:space="preserve">
<value>Lighting</value>
<value>조명</value>
</data>
<data name="Logo" xml:space="preserve">
<value>로고</value>
</data>
<data name="Low" xml:space="preserve">
<value>Low</value>
<value>낮게</value>
</data>
<data name="MatrixAudio" xml:space="preserve">
<value>오디오 비주얼라이저</value>
@@ -447,31 +447,31 @@
<value>60Hz 주사율 설정</value>
</data>
<data name="Minute" xml:space="preserve">
<value>Minute</value>
<value>분 후</value>
</data>
<data name="Minutes" xml:space="preserve">
<value>Minutes</value>
<value>분 후</value>
</data>
<data name="MouseAngleSnapping" xml:space="preserve">
<value>Angle Snapping</value>
<value>직선 보정</value>
</data>
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Auto Power Off After</value>
<value>자동 전원 꺼짐</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
<value>버튼 응답</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
<value>들어올림 거리</value>
</data>
<data name="MouseLowBatteryWarning" xml:space="preserve">
<value>Low Battery Warning at</value>
<value>배터리 부족 경고 알림</value>
</data>
<data name="MousePerformance" xml:space="preserve">
<value>Performance</value>
<value>성능</value>
</data>
<data name="MouseSynchronize" xml:space="preserve">
<value>Synchronize with mouse</value>
<value>마우스와 동기화</value>
</data>
<data name="Multizone" xml:space="preserve">
<value>멀티존</value>
@@ -480,7 +480,7 @@
<value>마이크 음소거</value>
</data>
<data name="Never" xml:space="preserve">
<value>Never</value>
<value>사용 안함</value>
</data>
<data name="NewUpdates" xml:space="preserve">
<value>새 업데이트</value>
@@ -489,7 +489,7 @@
<value>새 업데이트 없음</value>
</data>
<data name="NotConnected" xml:space="preserve">
<value>Not Connected</value>
<value>연결되지 않음</value>
</data>
<data name="OpenGHelper" xml:space="preserve">
<value>G-Helper 열기</value>
@@ -513,7 +513,7 @@
<value>성능 모드</value>
</data>
<data name="Peripherals" xml:space="preserve">
<value>Peripherals</value>
<value>주변 장치</value>
</data>
<data name="PictureGif" xml:space="preserve">
<value>사진 / Gif</value>
@@ -522,7 +522,7 @@
<value>재생 / 정지</value>
</data>
<data name="PollingRate" xml:space="preserve">
<value>Polling Rate</value>
<value>폴링레이트</value>
</data>
<data name="PowerLimits" xml:space="preserve">
<value>전력 제한</value>
@@ -534,13 +534,13 @@
<value>PrintScreen</value>
</data>
<data name="Profile" xml:space="preserve">
<value>Profile</value>
<value>프로필</value>
</data>
<data name="Quit" xml:space="preserve">
<value>종료</value>
</data>
<data name="RestartGPU" xml:space="preserve">
<value>Something is using dGPU and preventing Eco mode. Let G-Helper try to restart dGPU in device manager? (Please proceed at your own risk)</value>
<value>dGPU가 사용중이기 때문에 Eco 모드로 전환할 수 없습니다. 장치 관리자에서 dGPU를 재시작하시겠습니까?</value>
</data>
<data name="RPM" xml:space="preserve">
<value>RPM</value>
@@ -555,13 +555,13 @@
<value>Screenpad 밝기 증가</value>
</data>
<data name="Shutdown" xml:space="preserve">
<value>꺼짐</value>
<value>시스템 종료</value>
</data>
<data name="Silent" xml:space="preserve">
<value>조용</value>
</data>
<data name="Sleep" xml:space="preserve">
<value>Sleep</value>
<value>절전 모드</value>
</data>
<data name="StandardGPUTooltip" xml:space="preserve">
<value>Standard 모드에서 dGPU 켜기</value>
@@ -588,19 +588,19 @@
<value>서비스 중지 중</value>
</data>
<data name="ToggleAura" xml:space="preserve">
<value>Aura 토글 키</value>
<value>Aura 전환 키</value>
</data>
<data name="ToggleClamshellMode" xml:space="preserve">
<value>Auto Toggle Clamshell Mode</value>
<value>클램쉘 모드 자동 전환</value>
</data>
<data name="ToggleFnLock" xml:space="preserve">
<value>Fn-Lock 토글 키</value>
<value>Fn-Lock 전환 키</value>
</data>
<data name="ToggleMiniled" xml:space="preserve">
<value>Miniled 토글 키 (지원하는 기기만)</value>
<value>Miniled 전환 키 (지원하는 기기만)</value>
</data>
<data name="ToggleScreen" xml:space="preserve">
<value>화면 토글 키</value>
<value>화면 전환 키</value>
</data>
<data name="Turbo" xml:space="preserve">
<value>터보</value>
@@ -618,7 +618,7 @@
<value>Ultimate</value>
</data>
<data name="UndervoltingRisky" xml:space="preserve">
<value>언더볼팅은 실험적이며 위험한 기능입니다. 적용 값이 너무 낮은 경우 시스템이 불안정해지고, 종료되거나 데이터 손상을 유발할 수 있습니다. 은 값부터 적용하여 잘 작동하는지 확인해 보십시오.</value>
<value>언더볼팅은 실험적이며 위험한 기능입니다. 적용 값이 너무 낮은 경우 시스템이 불안정해지고, 강제 종료되거나 데이터 손상을 유발할 수 있습니다. 은 값부터 적용하여 잘 작동하는지 확인해 보십시오.</value>
</data>
<data name="Updates" xml:space="preserve">
<value>업데이트</value>

View File

@@ -286,7 +286,7 @@
<value>Zużycie mocy</value>
</data>
<data name="DownloadUpdate" xml:space="preserve">
<value>Download</value>
<value>Pobierz</value>
</data>
<data name="DriverAndSoftware" xml:space="preserve">
<value>Sterowniki i oprogramowanie</value>
@@ -375,7 +375,7 @@ Nadal chcesz kontynuować?</value>
<value>Temperatura docelowa</value>
</data>
<data name="HibernateAfter" xml:space="preserve">
<value>Minutes till Hibernation in sleep on battery (0 - OFF)</value>
<value>Czas przejścia w hibernację na baterii (0 - wcale)</value>
</data>
<data name="High" xml:space="preserve">
<value>Wysoka</value>
@@ -540,13 +540,13 @@ Nadal chcesz kontynuować?</value>
<value>Zamknij</value>
</data>
<data name="RestartGPU" xml:space="preserve">
<value>Something is using dGPU and preventing Eco mode. Let G-Helper try to restart dGPU in device manager? (Please proceed at your own risk)</value>
<value>Coś korzysta z dGPU, uniemożliwiając włączenie trybu Eco. Czy G-Helper ma zresetować dGPU w Menadżerze Urządzeń? (Korzystasz na własne ryzyko)</value>
</data>
<data name="RPM" xml:space="preserve">
<value>RPM</value>
</data>
<data name="RunOnStartup" xml:space="preserve">
<value>Uruchom przy starcie systemu</value>
<value>Uruchom przy starcie</value>
</data>
<data name="ScreenPadDown" xml:space="preserve">
<value>Zmniejsz jasność ScreenPad</value>

View File

@@ -133,7 +133,7 @@
<value>Ультимативний режим потребує перезавантаження</value>
</data>
<data name="AlertUltimateTitle" xml:space="preserve">
<value>Перезавантажитися зараз?</value>
<value>Перезавантажити зараз?</value>
</data>
<data name="AnimationSpeed" xml:space="preserve">
<value>Швидкість Анімації</value>
@@ -286,7 +286,7 @@
<value>Розрядка</value>
</data>
<data name="DownloadUpdate" xml:space="preserve">
<value>Download</value>
<value>Завантажити</value>
</data>
<data name="DriverAndSoftware" xml:space="preserve">
<value>Драйвери та програми</value>
@@ -375,7 +375,7 @@
<value>Temperature Target</value>
</data>
<data name="HibernateAfter" xml:space="preserve">
<value>Minutes till Hibernation in sleep on battery (0 - OFF)</value>
<value>Хвилин до режиму глибокого сну з акумулятором (0 - Вимкнено)</value>
</data>
<data name="High" xml:space="preserve">
<value>Висока</value>
@@ -540,7 +540,7 @@
<value>Вихід</value>
</data>
<data name="RestartGPU" xml:space="preserve">
<value>Something is using dGPU and preventing Eco mode. Let G-Helper try to restart dGPU in device manager? (Please proceed at your own risk)</value>
<value>Щось використовує dGPU та запобігає Еко-режиму. Дозвольте G-Helper спробувати перезапустити dGPU у менеджері пристрою? (Будь ласка, продовжуйте на власний ризик)</value>
</data>
<data name="RPM" xml:space="preserve">
<value>Оберти</value>

View File

@@ -151,7 +151,7 @@
<value>应用</value>
</data>
<data name="ApplyFanCurve" xml:space="preserve">
<value>应用自定义扇曲线</value>
<value>应用自定义扇曲线</value>
</data>
<data name="ApplyPowerLimits" xml:space="preserve">
<value>应用功率限制</value>
@@ -286,7 +286,7 @@
<value>正在放电</value>
</data>
<data name="DownloadUpdate" xml:space="preserve">
<value>Download</value>
<value>下载</value>
</data>
<data name="DriverAndSoftware" xml:space="preserve">
<value>驱动程序和软件</value>
@@ -540,7 +540,7 @@
<value>退出</value>
</data>
<data name="RestartGPU" xml:space="preserve">
<value>Something is using dGPU and preventing Eco mode. Let G-Helper try to restart dGPU in device manager? (Please proceed at your own risk)</value>
<value>有程序正在使用独显并阻止进入集显模式。要让 G-Helper 在设备管理器中重新启动独显吗?(请自行承担风险)</value>
</data>
<data name="RPM" xml:space="preserve">
<value>转/分钟</value>

View File

@@ -286,7 +286,7 @@
<value>正在釋放電力</value>
</data>
<data name="DownloadUpdate" xml:space="preserve">
<value>Download</value>
<value>下載</value>
</data>
<data name="DriverAndSoftware" xml:space="preserve">
<value>驅動程式與軟體</value>
@@ -540,7 +540,7 @@
<value>退出</value>
</data>
<data name="RestartGPU" xml:space="preserve">
<value>Something is using dGPU and preventing Eco mode. Let G-Helper try to restart dGPU in device manager? (Please proceed at your own risk)</value>
<value>有其他程式正在使用獨顯導致無法切換至節能模式. 是否讓G-Helper重新啟動獨顯? * 請自行評估風險</value>
</data>
<data name="RPM" xml:space="preserve">
<value>每分鐘轉數</value>

View File

@@ -11,13 +11,13 @@ namespace Ryzen
internal class RyzenControl
{
public const int MinCPUUV = -30;
public static int MinCPUUV => AppConfig.Get("min_uv", -30);
public const int MaxCPUUV = 0;
public const int MinIGPUUV = -20;
public const int MaxIGPUUV = 0;
public const int MinTemp = 75;
public static int MinTemp => AppConfig.Get("min_temp", 75);
public const int MaxTemp = 98;
public static string[] FAM = { "RAVEN", "PICASSO", "DALI", "RENOIR/LUCIENNE", "MATISSE", "VANGOGH", "VERMEER", "CEZANNE/BARCELO", "REMBRANDT", "PHOENIX", "RAPHAEL/DRAGON RANGE" };

View File

@@ -376,7 +376,7 @@ namespace GHelper
//contextMenuStrip.ShowCheckMargin = true;
contextMenuStrip.RenderMode = ToolStripRenderMode.System;
if (CheckSystemDarkModeStatus())
if (darkTheme)
{
contextMenuStrip.BackColor = this.BackColor;
contextMenuStrip.ForeColor = this.ForeColor;
@@ -551,8 +551,7 @@ namespace GHelper
if (colorDlg.ShowDialog() == DialogResult.OK)
{
AppConfig.Set("aura_color2", colorDlg.Color.ToArgb());
AsusUSB.ApplyAura();
VisualiseAura();
SetAura();
}
}
@@ -582,6 +581,14 @@ namespace GHelper
});
}
public void GPUInit()
{
Invoke(delegate
{
if (fans != null && fans.Text != "") fans.InitGPU();
});
}
public void FansToggle(int index = 0)
{
if (fans == null || fans.Text == "")
@@ -617,8 +624,7 @@ namespace GHelper
if (colorDlg.ShowDialog() == DialogResult.OK)
{
AppConfig.Set("aura_color", colorDlg.Color.ToArgb());
AsusUSB.ApplyAura();
VisualiseAura();
SetAura();
}
}
@@ -651,11 +657,23 @@ namespace GHelper
}
public void SetAura()
{
Task.Run(() =>
{
AsusUSB.ApplyAura();
VisualiseAura();
});
}
public void VisualiseAura()
{
pictureColor.BackColor = AsusUSB.Color1;
pictureColor2.BackColor = AsusUSB.Color2;
pictureColor2.Visible = AsusUSB.HasSecondColor();
Invoke(delegate
{
pictureColor.BackColor = AsusUSB.Color1;
pictureColor2.BackColor = AsusUSB.Color2;
pictureColor2.Visible = AsusUSB.HasSecondColor();
});
}
public void InitMatrix()
@@ -687,8 +705,7 @@ namespace GHelper
private void ComboKeyboard_SelectedValueChanged(object? sender, EventArgs e)
{
AppConfig.Set("aura_mode", (int)comboKeyboard.SelectedValue);
AsusUSB.ApplyAura();
VisualiseAura();
SetAura();
}

View File

@@ -71,7 +71,7 @@ namespace GHelper.UI
public bool InitTheme(bool setDPI = false)
{
bool newDarkTheme = CheckSystemDarkModeStatus();
bool newDarkTheme = IsDarkTheme();
bool changed = darkTheme != newDarkTheme;
darkTheme = newDarkTheme;

View File

@@ -7,7 +7,7 @@ using System.Text.Json;
namespace GHelper
{
struct DriverDownload
public struct DriverDownload
{
public string categoryName;
public string title;
@@ -140,7 +140,63 @@ namespace GHelper
}
}
public async void DriversAsync(string url, int type, TableLayoutPanel table)
public void VisualiseDriver(DriverDownload driver, TableLayoutPanel table)
{
Invoke(delegate
{
string versionText = driver.version.Replace("latest version at the ", "");
Label versionLabel = new Label { Text = versionText, Anchor = AnchorStyles.Left, AutoSize = true };
versionLabel.Cursor = Cursors.Hand;
versionLabel.Font = new Font(versionLabel.Font, FontStyle.Underline);
versionLabel.ForeColor = colorEco;
versionLabel.Padding = new Padding(5, 5, 5, 5);
versionLabel.Click += delegate
{
Process.Start(new ProcessStartInfo(driver.downloadUrl) { UseShellExecute = true });
};
table.RowStyles.Add(new RowStyle(SizeType.AutoSize));
table.Controls.Add(new Label { Text = driver.categoryName, Anchor = AnchorStyles.Left, Dock = DockStyle.Fill, Padding = new Padding(5, 5, 5, 5) }, 0, table.RowCount);
table.Controls.Add(new Label { Text = driver.title, Anchor = AnchorStyles.Left, Dock = DockStyle.Fill, Padding = new Padding(5, 5, 5, 5) }, 1, table.RowCount);
table.Controls.Add(versionLabel, 2, table.RowCount);
table.RowCount++;
});
}
public void ShowTable(TableLayoutPanel table)
{
Invoke(delegate
{
table.Visible = true;
ResumeLayout(false);
PerformLayout();
});
}
public void VisualiseNewDriver(int position, TableLayoutPanel table)
{
var label = table.GetControlFromPosition(2, position) as Label;
if (label != null)
{
Invoke(delegate
{
label.Font = new Font(label.Font, FontStyle.Underline | FontStyle.Bold);
label.ForeColor = colorTurbo;
});
}
}
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);
});
}
public async void DriversAsync(string url, int type, TableLayoutPanel table)
{
try
@@ -185,39 +241,14 @@ namespace GHelper
driver.hardwares = file.GetProperty("HardwareInfoList");
drivers.Add(driver);
Invoke(delegate
{
string versionText = driver.version.Replace("latest version at the ", "");
Label versionLabel = new Label { Text = versionText, Anchor = AnchorStyles.Left, AutoSize = true };
versionLabel.Cursor = Cursors.Hand;
versionLabel.Font = new Font(versionLabel.Font, FontStyle.Underline);
versionLabel.ForeColor = colorEco;
versionLabel.Padding = new Padding(5, 5, 5, 5);
versionLabel.Click += delegate
{
Process.Start(new ProcessStartInfo(driver.downloadUrl) { UseShellExecute = true });
};
table.RowStyles.Add(new RowStyle(SizeType.AutoSize));
table.Controls.Add(new Label { Text = driver.categoryName, Anchor = AnchorStyles.Left, Dock = DockStyle.Fill, Padding = new Padding(5, 5, 5, 5) }, 0, table.RowCount);
table.Controls.Add(new Label { Text = driver.title, Anchor = AnchorStyles.Left, Dock = DockStyle.Fill, Padding = new Padding(5, 5, 5, 5) }, 1, table.RowCount);
table.Controls.Add(versionLabel, 2, table.RowCount);
table.RowCount++;
});
VisualiseDriver(driver, table);
}
oldTitle = title;
}
}
Invoke(delegate
{
table.Visible = true;
ResumeLayout(false);
PerformLayout();
});
ShowTable(table);
Dictionary<string, string> devices = new();
@@ -246,20 +277,9 @@ namespace GHelper
if (newer > 0)
{
var label = table.GetControlFromPosition(2, count) as Label;
if (label != null)
{
Invoke(delegate
{
updatesCount++;
label.Font = new Font(label.Font, FontStyle.Underline | FontStyle.Bold);
label.ForeColor = colorTurbo;
labelUpdates.Text = $"{Properties.Strings.NewUpdates}: {updatesCount}";
labelUpdates.ForeColor = colorTurbo;
labelUpdates.Font = new Font(label.Font, FontStyle.Bold);
});
}
updatesCount++;
VisualiseNewDriver(count, table);
VisualiseNewCount(updatesCount, table);
}
count++;

View File

@@ -56,7 +56,7 @@ _To keep auto switching and hotkeys working the app needs to stay running in the
All Modes are **baked in BIOS** along with default fan curves and power limits and they are the **same** as in the Armoury Crate.
Each BIOS mode is paired with matching Windows Power Mode. If you don't want app to set Power Modes uncheck ``Extra``->``Auto adjust Windows Power Modes``
Each BIOS mode is paired with matching Windows Power Mode. You can adjust this setting under ``Fans + Power``
1. **Silent** in BIOS + **Best power efficiency** power mode
2. **Balanced** (Performance in AC) in BIOS + **Balanced** power mode
@@ -78,7 +78,8 @@ Each BIOS mode is paired with matching Windows Power Mode. If you don't want app
Stop ``ArmouryCrateControlInterface`` service under windows Services app or you can stop all asus services from ``Extra`` -> ``Stop services``
#### Battery charge limiter is not working
It could be that Asus services are overwriting this limit after. You may want to stop them by clicking "Stop" in the Asus Services section (under Extra).
It could be that Asus services are overwriting this limit after. You may want to stop them by clicking "Stop" in the Asus Services section (under Extra).
Please note: For some devices not every charge limit % may be working. Try to set standard **80%** to be sure.
#### I don't see GPU modes section
Some older models (for example G14 2020) don't support disabling GPU on hardware level, therefore GPU section makes no sense for them and will be hidden
@@ -227,16 +228,16 @@ By default the app will use your windows language setting. But you can set langu
### Custom windows power plans with each mode
You can manually assign a custom power plan (or power mode) GUID to each mode. It can be either "real" power plan that can be switched or "overlay" power plan like the ones g-helper sets by default.
You can manually assign a custom power plan GUID to each mode.
Format is following : ``"scheme_<mode>" : "GUID" ``
Where ``mode = 0 (balanced), 1 (turbo), 2 (silent)``
Default behavior is :
Example (for default windows "balanced" power plan):
```
"scheme_0": "00000000-0000-0000-0000-000000000000",
"scheme_1": "ded574b5-45a0-4f42-8737-46345c09c238",
"scheme_2": "961cc777-2547-4f9d-8174-7d86181b8a7a",
"scheme_0": "381b4222-f694-41f0-9685-ff5bb260df2e",
"scheme_1": "381b4222-f694-41f0-9685-ff5bb260df2e",
"scheme_2": "381b4222-f694-41f0-9685-ff5bb260df2e",
```
### Disable OSD