From db8e4b9c5eb596711b948fcb917fa13366a5dcc9 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Thu, 29 Feb 2024 10:00:42 +0100 Subject: [PATCH 1/2] New translations strings.resx (German) (#2139) --- app/Properties/Strings.de.resx | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/app/Properties/Strings.de.resx b/app/Properties/Strings.de.resx index 6c2ca1d4..a6e4b578 100644 --- a/app/Properties/Strings.de.resx +++ b/app/Properties/Strings.de.resx @@ -124,10 +124,10 @@ Verbindung zu ASUS ACPI fehlgeschlagen. G-Helper kann nicht ausgeführt werden. Bitte installiere ASUS System Control Interface. - Restart your device to apply changes + Gerät neu starten, um Änderungen anzuwenden - Restart now? + Jetzt neu starten? Die GPU wird gerade verwendet. Trotzdem deaktivieren? @@ -250,7 +250,7 @@ Im Betrieb - Timeout angeschlossen / bei Akku (0 - AN) + Timeout angeschlossen / bei Akku (0 = An) Backlight Timeout when on battery @@ -289,7 +289,7 @@ Hochfahren - Boot Sound + Boot-Sound Helligkeit @@ -310,7 +310,7 @@ Farbe - Contrast + Kontrast Controller @@ -328,7 +328,7 @@ Standard - Disable Controller + Controller deaktivieren Disable on lid close @@ -352,7 +352,7 @@ Eco - Enable GPU on shutdown (prevents issue with Eco mode) + Aktiviere GPU beim Herunterfahren (verhindert Problem im Eco-Modus) Die dGPU zu deaktivieren, indem Sie in den Eco-Modus wechseln während der Anzeigemodus nicht auf Optimus eingestellt ist, kann zu Problemen mit der Helligkeitseinstellung führen. @@ -366,7 +366,7 @@ Trotzdem fortfahren? Energieeinstellungen - Export Profile + Profil exportieren Extra @@ -441,10 +441,10 @@ Trotzdem fortfahren? Hoch - Image Rotation + Bilddrehung - Import Profile + Profil importieren Tastenbelegung @@ -534,7 +534,7 @@ Trotzdem fortfahren? Tastenreaktionsgeschwindigkeit - Import failed. Selected file is not a valid mouse profile or corrutpted. + Import fehlgeschlagen. Die ausgewählte Datei ist kein gültiges Mausprofil oder beschädigt. Lift Off Distance @@ -621,7 +621,7 @@ Trotzdem fortfahren? Schließen - Reset + Zurücksetzen Ein Prozess verhindert den Wechsel in den Eco-Modus. dGPU neu starten? Fortfahren auf eigene Gefahr. @@ -639,7 +639,7 @@ Trotzdem fortfahren? Beim Start ausführen - Scaling Quality + Skalierungsqualität Screenpad Helligkeit verringern @@ -720,7 +720,7 @@ Trotzdem fortfahren? Version - Vibration Strength + Vibrationsstärke Lautstärke verringern From 3cc4955dd7f64a7c49c5d2e545c7172ec5bc0ee0 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Fri, 1 Mar 2024 11:09:30 +0100 Subject: [PATCH 2/2] GPU Power limit slider for 2024 models (#2142) * GPU TGP setting for supported models * Version bump * GPU Power tweaks * GPU Power UI Tweaks * Cleanup --- app/AsusACPI.cs | 7 ++++ app/Display/ScreenNative.cs | 6 +++ app/Extra.cs | 8 ++-- app/Fans.Designer.cs | 73 ++++++++++++++++++++++++++++++++++--- app/Fans.cs | 71 +++++++++++++++++++++++++----------- app/GHelper.csproj | 2 +- app/Mode/ModeControl.cs | 14 ++++--- app/Updates.cs | 5 ++- 8 files changed, 147 insertions(+), 39 deletions(-) diff --git a/app/AsusACPI.cs b/app/AsusACPI.cs index e545062f..48118eb2 100644 --- a/app/AsusACPI.cs +++ b/app/AsusACPI.cs @@ -105,6 +105,9 @@ public class AsusACPI public const uint CORES_CPU = 0x001200D2; // Intel E-core and P-core configuration in a format 0x0[E]0[P] public const uint CORES_MAX = 0x001200D3; // Maximum Intel E-core and P-core availability + public const uint GPU_BASE = 0x00120099; // Base part GPU TGP + public const uint GPU_POWER = 0x00120098; // Additonal part of GPU TGP + public const int APU_MEM = 0x000600C1; public const int TUF_KB_BRIGHTNESS = 0x00050021; @@ -150,6 +153,9 @@ public class AsusACPI public const int MinGPUBoost = 5; public static int MaxGPUBoost = 25; + public static int MinGPUPower = 0; + public static int MaxGPUPower = 50; + public const int MinGPUTemp = 75; public const int MaxGPUTemp = 87; @@ -285,6 +291,7 @@ public class AsusACPI if (AppConfig.IsIntelHX()) { MaxTotal = 175; + MaxGPUPower = 70; } if (AppConfig.DynamicBoost5()) diff --git a/app/Display/ScreenNative.cs b/app/Display/ScreenNative.cs index 0b260fd3..e2346aaa 100644 --- a/app/Display/ScreenNative.cs +++ b/app/Display/ScreenNative.cs @@ -42,6 +42,12 @@ namespace GHelper.Display [DllImport("gdi32")] internal static extern bool GetDeviceGammaRamp(IntPtr dcHandle, ref GammaRamp ramp); + [DllImport("gdi32", CharSet = CharSet.Unicode)] + internal static extern bool SetICMProfileW(IntPtr dcHandle, string lpFileName); + + [DllImport("gdi32", CharSet = CharSet.Unicode)] + internal static extern bool SetICMMode(IntPtr dcHandle, int mode); + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct DEVMODE { diff --git a/app/Extra.cs b/app/Extra.cs index 7725d680..b59715e9 100644 --- a/app/Extra.cs +++ b/app/Extra.cs @@ -398,17 +398,19 @@ namespace GHelper InitServices(); InitHibernate(); - //InitACPITesting(); + InitACPITesting(); } private void InitACPITesting() { + if (!AppConfig.Is("debug")) return; + pictureScan.Visible = true; panelACPI.Visible = true; - textACPICommand.Text = "120075"; - textACPIParam.Text = "1"; + textACPICommand.Text = "120098"; + textACPIParam.Text = "25"; buttonACPISend.Click += ButtonACPISend_Click; pictureScan.Click += PictureScan_Click; diff --git a/app/Fans.Designer.cs b/app/Fans.Designer.cs index 8b653e1c..a1025051 100644 --- a/app/Fans.Designer.cs +++ b/app/Fans.Designer.cs @@ -119,6 +119,10 @@ namespace GHelper picturePowerMode = new PictureBox(); labelPowerModeTitle = new Label(); panelGPU = new Panel(); + panelGPUPower = new Panel(); + labelGPUPower = new Label(); + labelGPUPowerTitle = new Label(); + trackGPUPower = new TrackBar(); panelGPUTemp = new Panel(); labelGPUTemp = new Label(); labelGPUTempTitle = new Label(); @@ -190,6 +194,8 @@ namespace GHelper panelPowerModeTItle.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)picturePowerMode).BeginInit(); panelGPU.SuspendLayout(); + panelGPUPower.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)trackGPUPower).BeginInit(); panelGPUTemp.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)trackGPUTemp).BeginInit(); panelGPUBoost.SuspendLayout(); @@ -533,7 +539,7 @@ namespace GHelper panelAdvanced.Controls.Add(panelTitleTemp); panelAdvanced.Controls.Add(panelDownload); panelAdvanced.Dock = DockStyle.Top; - panelAdvanced.Location = new Point(10, 1644); + panelAdvanced.Location = new Point(10, 1768); panelAdvanced.Name = "panelAdvanced"; panelAdvanced.Size = new Size(520, 992); panelAdvanced.TabIndex = 14; @@ -864,7 +870,7 @@ namespace GHelper panelPower.Controls.Add(panelPowerMode); panelPower.Controls.Add(panelPowerModeTItle); panelPower.Dock = DockStyle.Top; - panelPower.Location = new Point(10, 764); + panelPower.Location = new Point(10, 888); panelPower.Margin = new Padding(4); panelPower.Name = "panelPower"; panelPower.Size = new Size(520, 880); @@ -1237,6 +1243,7 @@ namespace GHelper panelGPU.AutoSize = true; panelGPU.Controls.Add(panelGPUTemp); panelGPU.Controls.Add(panelGPUBoost); + panelGPU.Controls.Add(panelGPUPower); panelGPU.Controls.Add(panelGPUMemory); panelGPU.Controls.Add(panelGPUCore); panelGPU.Controls.Add(panelGPUClockLimit); @@ -1246,10 +1253,59 @@ namespace GHelper panelGPU.Margin = new Padding(4); panelGPU.Name = "panelGPU"; panelGPU.Padding = new Padding(0, 0, 0, 18); - panelGPU.Size = new Size(520, 698); + panelGPU.Size = new Size(520, 822); panelGPU.TabIndex = 44; panelGPU.Visible = false; // + // panelGPUPower + // + panelGPUPower.AutoSize = true; + panelGPUPower.AutoSizeMode = AutoSizeMode.GrowAndShrink; + panelGPUPower.Controls.Add(labelGPUPower); + panelGPUPower.Controls.Add(labelGPUPowerTitle); + panelGPUPower.Controls.Add(trackGPUPower); + panelGPUPower.Dock = DockStyle.Top; + panelGPUPower.Location = new Point(0, 432); + panelGPUPower.Margin = new Padding(4); + panelGPUPower.MaximumSize = new Size(0, 124); + panelGPUPower.Name = "panelGPUPower"; + panelGPUPower.Size = new Size(520, 124); + panelGPUPower.TabIndex = 49; + // + // labelGPUPower + // + labelGPUPower.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + labelGPUPower.Location = new Point(374, 14); + labelGPUPower.Margin = new Padding(4, 0, 4, 0); + labelGPUPower.Name = "labelGPUPower"; + labelGPUPower.Size = new Size(124, 32); + labelGPUPower.TabIndex = 44; + labelGPUPower.Text = "105W"; + labelGPUPower.TextAlign = ContentAlignment.TopRight; + // + // labelGPUPowerTitle + // + labelGPUPowerTitle.AutoSize = true; + labelGPUPowerTitle.Location = new Point(10, 14); + labelGPUPowerTitle.Margin = new Padding(4, 0, 4, 0); + labelGPUPowerTitle.Name = "labelGPUPowerTitle"; + labelGPUPowerTitle.Size = new Size(130, 32); + labelGPUPowerTitle.TabIndex = 43; + labelGPUPowerTitle.Text = "GPU Power"; + // + // trackGPUPower + // + trackGPUPower.Location = new Point(6, 48); + trackGPUPower.Margin = new Padding(4, 2, 4, 2); + trackGPUPower.Maximum = 25; + trackGPUPower.Minimum = 5; + trackGPUPower.Name = "trackGPUPower"; + trackGPUPower.Size = new Size(496, 90); + trackGPUPower.TabIndex = 42; + trackGPUPower.TickFrequency = 5; + trackGPUPower.TickStyle = TickStyle.TopLeft; + trackGPUPower.Value = 25; + // // panelGPUTemp // panelGPUTemp.AutoSize = true; @@ -1258,7 +1314,7 @@ namespace GHelper panelGPUTemp.Controls.Add(labelGPUTempTitle); panelGPUTemp.Controls.Add(trackGPUTemp); panelGPUTemp.Dock = DockStyle.Top; - panelGPUTemp.Location = new Point(0, 556); + panelGPUTemp.Location = new Point(0, 680); panelGPUTemp.Margin = new Padding(4); panelGPUTemp.MaximumSize = new Size(0, 124); panelGPUTemp.Name = "panelGPUTemp"; @@ -1307,7 +1363,7 @@ namespace GHelper panelGPUBoost.Controls.Add(labelGPUBoostTitle); panelGPUBoost.Controls.Add(trackGPUBoost); panelGPUBoost.Dock = DockStyle.Top; - panelGPUBoost.Location = new Point(0, 432); + panelGPUBoost.Location = new Point(0, 556); panelGPUBoost.Margin = new Padding(4); panelGPUBoost.MaximumSize = new Size(0, 124); panelGPUBoost.Name = "panelGPUBoost"; @@ -1700,6 +1756,9 @@ namespace GHelper ((System.ComponentModel.ISupportInitialize)picturePowerMode).EndInit(); panelGPU.ResumeLayout(false); panelGPU.PerformLayout(); + panelGPUPower.ResumeLayout(false); + panelGPUPower.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)trackGPUPower).EndInit(); panelGPUTemp.ResumeLayout(false); panelGPUTemp.PerformLayout(); ((System.ComponentModel.ISupportInitialize)trackGPUTemp).EndInit(); @@ -1833,5 +1892,9 @@ namespace GHelper private TrackBar trackSlow; private Panel panelDownload; private RButton buttonDownload; + private Panel panelGPUPower; + private Label labelGPUPower; + private Label labelGPUPowerTitle; + private TrackBar trackGPUPower; } } \ No newline at end of file diff --git a/app/Fans.cs b/app/Fans.cs index 796a02c7..793de7f0 100644 --- a/app/Fans.cs +++ b/app/Fans.cs @@ -31,6 +31,8 @@ namespace GHelper FanSensorControl fanSensorControl; + static int gpuPowerBase = 0; + public Fans() { @@ -144,17 +146,22 @@ namespace GHelper trackGPUTemp.Minimum = AsusACPI.MinGPUTemp; trackGPUTemp.Maximum = AsusACPI.MaxGPUTemp; + trackGPUPower.Minimum = AsusACPI.MinGPUPower; + trackGPUPower.Maximum = AsusACPI.MaxGPUPower; + trackGPUClockLimit.Scroll += trackGPUClockLimit_Scroll; trackGPUCore.Scroll += trackGPU_Scroll; trackGPUMemory.Scroll += trackGPU_Scroll; trackGPUBoost.Scroll += trackGPUPower_Scroll; trackGPUTemp.Scroll += trackGPUPower_Scroll; + trackGPUPower.Scroll += trackGPUPower_Scroll; trackGPUCore.MouseUp += TrackGPU_MouseUp; trackGPUMemory.MouseUp += TrackGPU_MouseUp; trackGPUBoost.MouseUp += TrackGPU_MouseUp; trackGPUTemp.MouseUp += TrackGPU_MouseUp; + trackGPUPower.MouseUp += TrackGPU_MouseUp; trackGPUClockLimit.MouseUp += TrackGPU_MouseUp; @@ -541,8 +548,12 @@ namespace GHelper { gpuVisible = buttonGPU.Visible = true; + gpuPowerBase = Program.acpi.DeviceGet(AsusACPI.GPU_BASE); + int gpuPowerVar = Program.acpi.DeviceGet(AsusACPI.GPU_POWER); + int gpu_boost = AppConfig.GetMode("gpu_boost"); int gpu_temp = AppConfig.GetMode("gpu_temp"); + int gpu_power = AppConfig.GetMode("gpu_power"); int core = AppConfig.GetMode("gpu_core"); int memory = AppConfig.GetMode("gpu_memory"); @@ -550,32 +561,35 @@ namespace GHelper if (gpu_boost < 0) gpu_boost = AsusACPI.MaxGPUBoost; if (gpu_temp < 0) gpu_temp = AsusACPI.MaxGPUTemp; + if (gpu_power < 0) gpu_power = (gpuPowerVar >= 0) ? gpuPowerVar : AsusACPI.MaxGPUPower; if (core == -1) core = 0; if (memory == -1) memory = 0; if (clock_limit == -1) clock_limit = NvidiaGpuControl.MaxClockLimit; - if (nvControl.GetClocks(out int current_core, out int current_memory)) + if (nvControl is not null) { - core = current_core; - memory = current_memory; + 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; + } + catch + { + + } } - int _clockLimit = nvControl.GetMaxGPUCLock(); - - if (_clockLimit == 0) clock_limit = NvidiaGpuControl.MaxClockLimit; - else if (_clockLimit > 0) clock_limit = _clockLimit; - - try - { - labelGPU.Text = nvControl.FullName; - } - catch - { - - } - - //} trackGPUClockLimit.Value = Math.Max(Math.Min(clock_limit, NvidiaGpuControl.MaxClockLimit), NvidiaGpuControl.MinClockLimit); trackGPUCore.Value = Math.Max(Math.Min(core, NvidiaGpuControl.MaxCoreOffset), NvidiaGpuControl.MinCoreOffset); @@ -584,9 +598,13 @@ namespace GHelper trackGPUBoost.Value = Math.Max(Math.Min(gpu_boost, AsusACPI.MaxGPUBoost), AsusACPI.MinGPUBoost); trackGPUTemp.Value = Math.Max(Math.Min(gpu_temp, AsusACPI.MaxGPUTemp), AsusACPI.MinGPUTemp); + trackGPUPower.Value = Math.Max(Math.Min(gpu_power, AsusACPI.MaxGPUPower), AsusACPI.MinGPUPower); + panelGPUBoost.Visible = (Program.acpi.DeviceGet(AsusACPI.PPT_GPUC0) >= 0); panelGPUTemp.Visible = (Program.acpi.DeviceGet(AsusACPI.PPT_GPUC2) >= 0); + panelGPUPower.Visible = gpuPowerBase > 0 && gpuPowerVar >= 0; + VisualiseGPUSettings(); } @@ -610,6 +628,9 @@ namespace GHelper labelGPUClockLimit.Text = "Default"; else labelGPUClockLimit.Text = $"{trackGPUClockLimit.Value} MHz"; + + labelGPUPower.Text = (gpuPowerBase + trackGPUPower.Value) + "W"; + } private void trackGPUClockLimit_Scroll(object? sender, EventArgs e) @@ -640,6 +661,7 @@ namespace GHelper { AppConfig.SetMode("gpu_boost", trackGPUBoost.Value); AppConfig.SetMode("gpu_temp", trackGPUTemp.Value); + AppConfig.SetMode("gpu_power", trackGPUPower.Value); VisualiseGPUSettings(); } @@ -1089,19 +1111,24 @@ namespace GHelper if (gpuVisible) { + int gpuPowerVar = Program.acpi.DeviceGet(AsusACPI.GPU_POWER); + 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); + trackGPUPower.Value = (gpuPowerVar >= 0) ? gpuPowerVar : AsusACPI.MaxGPUPower; AppConfig.SetMode("gpu_boost", trackGPUBoost.Value); AppConfig.SetMode("gpu_temp", trackGPUTemp.Value); - AppConfig.SetMode("gpu_core", trackGPUCore.Value); - AppConfig.SetMode("gpu_memory", trackGPUMemory.Value); + AppConfig.RemoveMode("gpu_power"); + + AppConfig.RemoveMode("gpu_clock_limit"); + AppConfig.RemoveMode("gpu_core"); + AppConfig.RemoveMode("gpu_memory"); VisualiseGPUSettings(); modeControl.SetGPUClocks(true); diff --git a/app/GHelper.csproj b/app/GHelper.csproj index 56011b39..b49204c7 100644 --- a/app/GHelper.csproj +++ b/app/GHelper.csproj @@ -15,7 +15,7 @@ AnyCPU False True - 0.155 + 0.156 diff --git a/app/Mode/ModeControl.cs b/app/Mode/ModeControl.cs index cb43f672..0d22adf9 100644 --- a/app/Mode/ModeControl.cs +++ b/app/Mode/ModeControl.cs @@ -346,18 +346,20 @@ namespace GHelper.Mode int gpu_boost = AppConfig.GetMode("gpu_boost"); int gpu_temp = AppConfig.GetMode("gpu_temp"); + int gpu_power = AppConfig.GetMode("gpu_power"); int boostResult = -1; - if (gpu_boost < AsusACPI.MinGPUBoost || gpu_boost > AsusACPI.MaxGPUBoost) return; - if (gpu_temp < AsusACPI.MinGPUTemp || gpu_temp > AsusACPI.MaxGPUTemp) return; + 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 (Program.acpi.DeviceGet(AsusACPI.PPT_GPUC0) >= 0) - boostResult = Program.acpi.DeviceSet(AsusACPI.PPT_GPUC0, gpu_boost, "PowerLimit C0"); + 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 (Program.acpi.DeviceGet(AsusACPI.PPT_GPUC2) >= 0) - Program.acpi.DeviceSet(AsusACPI.PPT_GPUC2, gpu_temp, "PowerLimit C2"); + if (gpu_temp >= AsusACPI.MinGPUTemp && gpu_temp <= AsusACPI.MaxGPUTemp && Program.acpi.DeviceGet(AsusACPI.PPT_GPUC2) >= 0) + Program.acpi.DeviceSet(AsusACPI.PPT_GPUC2, gpu_temp, "PowerLimit C2 (GPU TEMP)"); + // Fallback if (boostResult == 0) Program.acpi.DeviceSet(AsusACPI.PPT_GPUC0, gpu_boost, "PowerLimit C0"); diff --git a/app/Updates.cs b/app/Updates.cs index 428466e6..29af78f4 100644 --- a/app/Updates.cs +++ b/app/Updates.cs @@ -83,13 +83,12 @@ namespace GHelper InitializeComponent(); InitTheme(true); - LoadUpdates(true); - //buttonRefresh.Visible = false; buttonRefresh.Click += ButtonRefresh_Click; Shown += Updates_Shown; } + private void ButtonRefresh_Click(object? sender, EventArgs e) { LoadUpdates(); @@ -100,7 +99,9 @@ namespace GHelper Height = Program.settingsForm.Height; Top = Program.settingsForm.Top; Left = Program.settingsForm.Left - Width - 5; + LoadUpdates(true); } + private Dictionary GetDeviceVersions() { using (ManagementObjectSearcher objSearcher = new ManagementObjectSearcher("Select * from Win32_PnPSignedDriver"))