From 3075e22e1e2d5a26eee8ba297352df96b4c530fd Mon Sep 17 00:00:00 2001
From: Serge <5920850+seerge@users.noreply.github.com>
Date: Sat, 12 Aug 2023 16:04:39 +0200
Subject: [PATCH] Power Mode control
---
app/AppConfig.cs | 5 ++
app/Extra.Designer.cs | 24 ++-----
app/Extra.cs | 8 ---
app/Fans.Designer.cs | 145 +++++++++++++++++++++++++++++++---------
app/Fans.cs | 27 +++++++-
app/Fans.resx | 2 +-
app/Mode/ModeControl.cs | 26 ++++---
app/Mode/Modes.cs | 3 +-
app/Mode/PowerNative.cs | 100 +++++++++++++++------------
app/Program.cs | 8 ++-
10 files changed, 229 insertions(+), 119 deletions(-)
diff --git a/app/AppConfig.cs b/app/AppConfig.cs
index 829902eb..8708160a 100644
--- a/app/AppConfig.cs
+++ b/app/AppConfig.cs
@@ -154,6 +154,11 @@ public static class AppConfig
Write();
}
+ public static void RemoveMode(string name)
+ {
+ Remove(name + "_" + Modes.GetCurrent());
+ }
+
public static string GgetParamName(AsusFan device, string paramName = "fan_profile")
{
int mode = Modes.GetCurrent();
diff --git a/app/Extra.Designer.cs b/app/Extra.Designer.cs
index fb773189..8f72da7b 100644
--- a/app/Extra.Designer.cs
+++ b/app/Extra.Designer.cs
@@ -103,7 +103,6 @@ namespace GHelper
labelSettings = new Label();
panelSettings = new Panel();
checkAutoToggleClamshellMode = new CheckBox();
- checkAutoApplyWindowsPowerMode = new CheckBox();
checkTopmost = new CheckBox();
checkNoOverdrive = new CheckBox();
checkUSBC = new CheckBox();
@@ -146,7 +145,7 @@ namespace GHelper
panelServices.Controls.Add(labelServices);
panelServices.Controls.Add(buttonServices);
panelServices.Dock = DockStyle.Top;
- panelServices.Location = new Point(15, 1321);
+ panelServices.Location = new Point(15, 1279);
panelServices.Name = "panelServices";
panelServices.Size = new Size(983, 75);
panelServices.TabIndex = 5;
@@ -1062,7 +1061,6 @@ namespace GHelper
panelSettings.AutoSize = true;
panelSettings.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelSettings.Controls.Add(checkAutoToggleClamshellMode);
- panelSettings.Controls.Add(checkAutoApplyWindowsPowerMode);
panelSettings.Controls.Add(checkTopmost);
panelSettings.Controls.Add(checkNoOverdrive);
panelSettings.Controls.Add(checkUSBC);
@@ -1073,14 +1071,14 @@ namespace GHelper
panelSettings.Location = new Point(15, 921);
panelSettings.Name = "panelSettings";
panelSettings.Padding = new Padding(20, 5, 11, 5);
- panelSettings.Size = new Size(983, 346);
+ panelSettings.Size = new Size(983, 304);
panelSettings.TabIndex = 3;
//
// checkAutoToggleClamshellMode
//
checkAutoToggleClamshellMode.AutoSize = true;
checkAutoToggleClamshellMode.Dock = DockStyle.Top;
- checkAutoToggleClamshellMode.Location = new Point(20, 299);
+ checkAutoToggleClamshellMode.Location = new Point(20, 257);
checkAutoToggleClamshellMode.Name = "checkAutoToggleClamshellMode";
checkAutoToggleClamshellMode.Padding = new Padding(3);
checkAutoToggleClamshellMode.Size = new Size(952, 42);
@@ -1088,19 +1086,6 @@ namespace GHelper
checkAutoToggleClamshellMode.Text = "Auto Toggle Clamshell Mode";
checkAutoToggleClamshellMode.UseVisualStyleBackColor = true;
//
- // checkAutoApplyWindowsPowerMode
- //
- checkAutoApplyWindowsPowerMode.AutoSize = true;
- checkAutoApplyWindowsPowerMode.Dock = DockStyle.Top;
- checkAutoApplyWindowsPowerMode.Location = new Point(20, 257);
- checkAutoApplyWindowsPowerMode.Margin = new Padding(4, 3, 4, 3);
- checkAutoApplyWindowsPowerMode.Name = "checkAutoApplyWindowsPowerMode";
- checkAutoApplyWindowsPowerMode.Padding = new Padding(3);
- checkAutoApplyWindowsPowerMode.Size = new Size(952, 42);
- checkAutoApplyWindowsPowerMode.TabIndex = 7;
- checkAutoApplyWindowsPowerMode.Text = "Auto Adjust Windows Power Mode";
- checkAutoApplyWindowsPowerMode.UseVisualStyleBackColor = true;
- //
// checkTopmost
//
checkTopmost.AutoSize = true;
@@ -1185,7 +1170,7 @@ namespace GHelper
panelPower.Controls.Add(labelHibernateAfter);
panelPower.Controls.Add(pictureHibernate);
panelPower.Dock = DockStyle.Top;
- panelPower.Location = new Point(15, 1267);
+ panelPower.Location = new Point(15, 1225);
panelPower.Name = "panelPower";
panelPower.Size = new Size(983, 54);
panelPower.TabIndex = 4;
@@ -1348,7 +1333,6 @@ namespace GHelper
private PictureBox pictureSettings;
private Label labelSettings;
private Panel panelSettings;
- private CheckBox checkAutoApplyWindowsPowerMode;
private CheckBox checkTopmost;
private CheckBox checkNoOverdrive;
private CheckBox checkUSBC;
diff --git a/app/Extra.cs b/app/Extra.cs
index 5502e9fa..a402e806 100644
--- a/app/Extra.cs
+++ b/app/Extra.cs
@@ -118,7 +118,6 @@ namespace GHelper
checkNoOverdrive.Text = Properties.Strings.DisableOverdrive;
checkTopmost.Text = Properties.Strings.WindowTop;
checkUSBC.Text = Properties.Strings.OptimizedUSBC;
- checkAutoApplyWindowsPowerMode.Text = Properties.Strings.ApplyWindowsPowerPlan;
checkAutoToggleClamshellMode.Text = Properties.Strings.ToggleClamshellMode;
labelBacklightKeyboard.Text = Properties.Strings.Keyboard;
@@ -293,9 +292,6 @@ namespace GHelper
checkUSBC.Checked = AppConfig.Is("optimized_usbc");
checkUSBC.CheckedChanged += CheckUSBC_CheckedChanged;
- checkAutoApplyWindowsPowerMode.Checked = (AppConfig.Get("auto_apply_power_plan") != 0);
- checkAutoApplyWindowsPowerMode.CheckedChanged += checkAutoApplyWindowsPowerMode_CheckedChanged;
-
sliderBrightness.Value = InputDispatcher.GetBacklight();
sliderBrightness.ValueChanged += SliderBrightness_ValueChanged;
@@ -563,10 +559,6 @@ namespace GHelper
Left = Program.settingsForm.Left - Width - 5;
}
- private void checkAutoApplyWindowsPowerMode_CheckedChanged(object? sender, EventArgs e)
- {
- AppConfig.Set("auto_apply_power_plan", checkAutoApplyWindowsPowerMode.Checked ? 1 : 0);
- }
private void checkAutoToggleClamshellMode_CheckedChanged(object? sender, EventArgs e)
{
diff --git a/app/Fans.Designer.cs b/app/Fans.Designer.cs
index 81ca0239..bc353194 100644
--- a/app/Fans.Designer.cs
+++ b/app/Fans.Designer.cs
@@ -31,14 +31,14 @@ namespace GHelper
///
private void InitializeComponent()
{
- ChartArea chartArea1 = new ChartArea();
- Title title1 = new Title();
- ChartArea chartArea2 = new ChartArea();
- Title title2 = new Title();
- ChartArea chartArea3 = new ChartArea();
- Title title3 = new Title();
- ChartArea chartArea4 = new ChartArea();
- Title title4 = new Title();
+ ChartArea chartArea9 = new ChartArea();
+ Title title9 = new Title();
+ ChartArea chartArea10 = new ChartArea();
+ Title title10 = new Title();
+ ChartArea chartArea11 = new ChartArea();
+ Title title11 = new Title();
+ ChartArea chartArea12 = new ChartArea();
+ Title title12 = new Title();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Fans));
panelFans = new Panel();
labelTip = new Label();
@@ -103,6 +103,8 @@ 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();
@@ -131,6 +133,9 @@ namespace GHelper
buttonAdvanced = new RButton();
buttonGPU = new RButton();
buttonCPU = new RButton();
+ panelPowerModeTItle = new Panel();
+ picturePowerMode = new PictureBox();
+ labelPowerModeTitle = new Label();
panelFans.SuspendLayout();
tableFanCharts.SuspendLayout();
((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit();
@@ -165,6 +170,7 @@ namespace GHelper
panelTitleCPU.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBoxCPU).BeginInit();
panelBoost.SuspendLayout();
+ panelPowerMode.SuspendLayout();
panelBoostTitle.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBoost).BeginInit();
panelGPU.SuspendLayout();
@@ -180,6 +186,8 @@ namespace GHelper
((System.ComponentModel.ISupportInitialize)pictureGPU).BeginInit();
panelNav.SuspendLayout();
tableNav.SuspendLayout();
+ panelPowerModeTItle.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)picturePowerMode).BeginInit();
SuspendLayout();
//
// panelFans
@@ -236,8 +244,8 @@ namespace GHelper
//
// chartGPU
//
- chartArea1.Name = "ChartArea1";
- chartGPU.ChartAreas.Add(chartArea1);
+ chartArea9.Name = "ChartArea1";
+ chartGPU.ChartAreas.Add(chartArea9);
chartGPU.Dock = DockStyle.Fill;
chartGPU.Location = new Point(12, 491);
chartGPU.Margin = new Padding(2, 10, 2, 10);
@@ -245,13 +253,13 @@ namespace GHelper
chartGPU.Size = new Size(782, 461);
chartGPU.TabIndex = 17;
chartGPU.Text = "chartGPU";
- title1.Name = "Title1";
- chartGPU.Titles.Add(title1);
+ title9.Name = "Title1";
+ chartGPU.Titles.Add(title9);
//
// chartCPU
//
- chartArea2.Name = "ChartArea1";
- chartCPU.ChartAreas.Add(chartArea2);
+ chartArea10.Name = "ChartArea1";
+ chartCPU.ChartAreas.Add(chartArea10);
chartCPU.Dock = DockStyle.Fill;
chartCPU.Location = new Point(12, 10);
chartCPU.Margin = new Padding(2, 10, 2, 10);
@@ -259,13 +267,13 @@ namespace GHelper
chartCPU.Size = new Size(782, 461);
chartCPU.TabIndex = 14;
chartCPU.Text = "chartCPU";
- title2.Name = "Title1";
- chartCPU.Titles.Add(title2);
+ title10.Name = "Title1";
+ chartCPU.Titles.Add(title10);
//
// chartXGM
//
- chartArea3.Name = "ChartAreaXGM";
- chartXGM.ChartAreas.Add(chartArea3);
+ chartArea11.Name = "ChartAreaXGM";
+ chartXGM.ChartAreas.Add(chartArea11);
chartXGM.Dock = DockStyle.Fill;
chartXGM.Location = new Point(12, 1453);
chartXGM.Margin = new Padding(2, 10, 2, 10);
@@ -273,14 +281,14 @@ namespace GHelper
chartXGM.Size = new Size(782, 464);
chartXGM.TabIndex = 14;
chartXGM.Text = "chartXGM";
- title3.Name = "Title4";
- chartXGM.Titles.Add(title3);
+ title11.Name = "Title4";
+ chartXGM.Titles.Add(title11);
chartXGM.Visible = false;
//
// chartMid
//
- chartArea4.Name = "ChartArea3";
- chartMid.ChartAreas.Add(chartArea4);
+ chartArea12.Name = "ChartArea3";
+ chartMid.ChartAreas.Add(chartArea12);
chartMid.Dock = DockStyle.Fill;
chartMid.Location = new Point(12, 972);
chartMid.Margin = new Padding(2, 10, 2, 10);
@@ -288,8 +296,8 @@ namespace GHelper
chartMid.Size = new Size(782, 461);
chartMid.TabIndex = 14;
chartMid.Text = "chartMid";
- title4.Name = "Title3";
- chartMid.Titles.Add(title4);
+ title12.Name = "Title3";
+ chartMid.Titles.Add(title12);
chartMid.Visible = false;
//
// panelTitleFans
@@ -491,7 +499,7 @@ namespace GHelper
panelAdvanced.Controls.Add(panelTemperature);
panelAdvanced.Controls.Add(panelTitleTemp);
panelAdvanced.Dock = DockStyle.Top;
- panelAdvanced.Location = new Point(10, 1272);
+ panelAdvanced.Location = new Point(10, 1396);
panelAdvanced.Name = "panelAdvanced";
panelAdvanced.Size = new Size(520, 888);
panelAdvanced.TabIndex = 14;
@@ -786,11 +794,13 @@ namespace GHelper
panelPower.Controls.Add(panelTitleCPU);
panelPower.Controls.Add(panelBoost);
panelPower.Controls.Add(panelBoostTitle);
+ panelPower.Controls.Add(panelPowerMode);
+ panelPower.Controls.Add(panelPowerModeTItle);
panelPower.Dock = DockStyle.Top;
panelPower.Location = new Point(10, 640);
panelPower.Margin = new Padding(4);
panelPower.Name = "panelPower";
- panelPower.Size = new Size(520, 632);
+ panelPower.Size = new Size(520, 756);
panelPower.TabIndex = 43;
//
// panelApplyPower
@@ -798,7 +808,7 @@ namespace GHelper
panelApplyPower.AutoSize = true;
panelApplyPower.Controls.Add(checkApplyPower);
panelApplyPower.Dock = DockStyle.Top;
- panelApplyPower.Location = new Point(0, 556);
+ panelApplyPower.Location = new Point(0, 680);
panelApplyPower.Name = "panelApplyPower";
panelApplyPower.Padding = new Padding(15);
panelApplyPower.Size = new Size(520, 76);
@@ -825,7 +835,7 @@ namespace GHelper
panelB0.Controls.Add(labelLeftB0);
panelB0.Controls.Add(trackB0);
panelB0.Dock = DockStyle.Top;
- panelB0.Location = new Point(0, 432);
+ panelB0.Location = new Point(0, 556);
panelB0.Margin = new Padding(4);
panelB0.MaximumSize = new Size(0, 124);
panelB0.Name = "panelB0";
@@ -874,7 +884,7 @@ namespace GHelper
panelC1.Controls.Add(labelLeftC1);
panelC1.Controls.Add(trackC1);
panelC1.Dock = DockStyle.Top;
- panelC1.Location = new Point(0, 308);
+ panelC1.Location = new Point(0, 432);
panelC1.Margin = new Padding(4);
panelC1.MaximumSize = new Size(0, 124);
panelC1.Name = "panelC1";
@@ -923,7 +933,7 @@ namespace GHelper
panelA0.Controls.Add(labelLeftA0);
panelA0.Controls.Add(trackA0);
panelA0.Dock = DockStyle.Top;
- panelA0.Location = new Point(0, 184);
+ panelA0.Location = new Point(0, 308);
panelA0.Margin = new Padding(4);
panelA0.MaximumSize = new Size(0, 124);
panelA0.Name = "panelA0";
@@ -971,7 +981,7 @@ namespace GHelper
panelTitleCPU.Controls.Add(pictureBoxCPU);
panelTitleCPU.Controls.Add(labelPowerLimits);
panelTitleCPU.Dock = DockStyle.Top;
- panelTitleCPU.Location = new Point(0, 124);
+ panelTitleCPU.Location = new Point(0, 248);
panelTitleCPU.Margin = new Padding(4);
panelTitleCPU.Name = "panelTitleCPU";
panelTitleCPU.Size = new Size(520, 60);
@@ -1004,12 +1014,36 @@ namespace GHelper
//
panelBoost.Controls.Add(comboBoost);
panelBoost.Dock = DockStyle.Top;
- panelBoost.Location = new Point(0, 60);
+ panelBoost.Location = new Point(0, 184);
panelBoost.Margin = new Padding(4);
panelBoost.Name = "panelBoost";
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;
@@ -1017,7 +1051,7 @@ namespace GHelper
panelBoostTitle.Controls.Add(pictureBoost);
panelBoostTitle.Controls.Add(labelBoost);
panelBoostTitle.Dock = DockStyle.Top;
- panelBoostTitle.Location = new Point(0, 0);
+ panelBoostTitle.Location = new Point(0, 124);
panelBoostTitle.Margin = new Padding(4);
panelBoostTitle.Name = "panelBoostTitle";
panelBoostTitle.Size = new Size(520, 60);
@@ -1382,6 +1416,42 @@ namespace GHelper
buttonCPU.TextImageRelation = TextImageRelation.ImageBeforeText;
buttonCPU.UseVisualStyleBackColor = false;
//
+ // 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";
+ //
// Fans
//
AutoScaleDimensions = new SizeF(192F, 192F);
@@ -1449,6 +1519,7 @@ 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();
@@ -1471,6 +1542,9 @@ namespace GHelper
((System.ComponentModel.ISupportInitialize)pictureGPU).EndInit();
panelNav.ResumeLayout(false);
tableNav.ResumeLayout(false);
+ panelPowerModeTItle.ResumeLayout(false);
+ panelPowerModeTItle.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)picturePowerMode).EndInit();
ResumeLayout(false);
PerformLayout();
}
@@ -1568,5 +1642,10 @@ namespace GHelper
private TrackBar trackTemp;
private Panel panelAdvancedAlways;
private RCheckBox checkApplyUV;
+ private Panel panelPowerMode;
+ private RComboBox comboPowerMode;
+ private Panel panelPowerModeTItle;
+ private PictureBox picturePowerMode;
+ private Label labelPowerModeTitle;
}
}
\ No newline at end of file
diff --git a/app/Fans.cs b/app/Fans.cs
index 16798313..dce21773 100644
--- a/app/Fans.cs
+++ b/app/Fans.cs
@@ -145,11 +145,17 @@ namespace GHelper
trackTemp.Minimum = RyzenControl.MinTemp;
trackTemp.Maximum = RyzenControl.MaxTemp;
+ comboPowerMode.DropDownStyle = ComboBoxStyle.DropDownList;
+ comboPowerMode.DataSource = new BindingSource(PowerNative.powerModes, null);
+ comboPowerMode.DisplayMember = "Value";
+ comboPowerMode.ValueMember = "Key";
FillModes();
InitAll();
comboBoost.SelectedValueChanged += ComboBoost_Changed;
+ comboPowerMode.SelectedValueChanged += ComboPowerMode_Changed;
+
comboModes.SelectionChangeCommitted += ComboModes_SelectedValueChanged;
comboModes.TextChanged += ComboModes_TextChanged;
@@ -201,7 +207,7 @@ namespace GHelper
InitMode();
InitFans();
InitPower();
- InitBoost();
+ InitPowerPlan();
InitUV();
InitGPU();
}
@@ -512,7 +518,7 @@ namespace GHelper
if (percentage == 0) return "OFF";
int Max = MaxRPM;
- if (device == AsusFan.XGM ) Max = 72;
+ if (device == AsusFan.XGM) Max = 72;
return (200 * Math.Round((float)(MinRPM * 100 + (Max - MinRPM) * percentage) / 200)).ToString() + unit;
}
@@ -594,11 +600,24 @@ namespace GHelper
}
- public void InitBoost()
+ public void InitPowerPlan()
{
int boost = PowerNative.GetCPUBoost();
if (boost >= 0)
comboBoost.SelectedIndex = Math.Min(boost, comboBoost.Items.Count - 1);
+
+ string powerMode = PowerNative.GetPowerMode();
+ comboPowerMode.SelectedValue = powerMode;
+
+ }
+
+ private void ComboPowerMode_Changed(object? sender, EventArgs e)
+ {
+ string powerMode = (string)comboPowerMode.SelectedValue;
+ PowerNative.SetPowerMode(powerMode);
+
+ if (PowerNative.GetDefaultPowerMode(Modes.GetCurrentBase()) != powerMode)
+ AppConfig.SetMode("powermode", powerMode);
}
private void ComboBoost_Changed(object? sender, EventArgs e)
@@ -871,6 +890,8 @@ namespace GHelper
modeControl.ResetPerformanceMode();
+ InitPowerPlan();
+
if (Program.acpi.IsXGConnected()) AsusUSB.ResetXGM();
diff --git a/app/Fans.resx b/app/Fans.resx
index 2a7cab8d..3c643279 100644
--- a/app/Fans.resx
+++ b/app/Fans.resx
@@ -18,7 +18,7 @@
System.Resources.ResXResourceReader, System.Windows.Forms, ...
System.Resources.ResXResourceWriter, System.Windows.Forms, ...
this is my long stringthis is a comment
- Blue
+ Blue
[base64 mime encoded serialized .NET Framework object]
diff --git a/app/Mode/ModeControl.cs b/app/Mode/ModeControl.cs
index 2a14d251..cbda8f0b 100644
--- a/app/Mode/ModeControl.cs
+++ b/app/Mode/ModeControl.cs
@@ -46,7 +46,12 @@ namespace GHelper.Mode
public void ResetPerformanceMode()
{
ResetRyzen();
+
Program.acpi.DeviceSet(AsusACPI.PerformanceMode, Modes.GetCurrentBase(), "Mode");
+
+ // Default power mode
+ AppConfig.RemoveMode("powermode");
+ PowerNative.SetPowerMode(Modes.GetCurrentBase());
}
public void SetPerformanceMode(int mode = -1, bool notify = false)
@@ -76,18 +81,21 @@ namespace GHelper.Mode
AutoFans();
AutoPower(1000);
- if (AppConfig.Get("auto_apply_power_plan") != 0)
- {
- if (AppConfig.GetModeString("scheme") is not null)
- PowerNative.SetPowerScheme(AppConfig.GetModeString("scheme"));
- else
- PowerNative.SetPowerScheme(Modes.GetBase(mode));
- }
+ // 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));
+
+ // CPU Boost setting override
if (AppConfig.GetMode("auto_boost") != -1)
- {
PowerNative.SetCPUBoost(AppConfig.GetMode("auto_boost"));
- }
//BatteryControl.SetBatteryChargeLimit();
diff --git a/app/Mode/Modes.cs b/app/Mode/Modes.cs
index 9543c460..90e6be59 100644
--- a/app/Mode/Modes.cs
+++ b/app/Mode/Modes.cs
@@ -51,7 +51,8 @@
"gpu_memory",
"auto_boost",
"auto_apply",
- "auto_apply_power"
+ "auto_apply_power",
+ "powermode"
};
foreach (string clean in cleanup)
diff --git a/app/Mode/PowerNative.cs b/app/Mode/PowerNative.cs
index f9174535..d484cee6 100644
--- a/app/Mode/PowerNative.cs
+++ b/app/Mode/PowerNative.cs
@@ -72,11 +72,23 @@ namespace GHelper.Mode
[DllImportAttribute("powrprof.dll", EntryPoint = "PowerSetActiveOverlayScheme")]
public static extern uint PowerSetActiveOverlayScheme(Guid OverlaySchemeGuid);
+ const string POWER_SILENT = "961cc777-2547-4f9d-8174-7d86181b8a7a";
+ const string POWER_BALANCED = "00000000-0000-0000-0000-000000000000";
+ const string POWER_TURBO = "ded574b5-45a0-4f42-8737-46345c09c238";
+ const string POWER_BETTERPERFORMANCE = "ded574b5-45a0-4f42-8737-46345c09c238";
+
+ static List overlays = new() {
+ POWER_BALANCED,
+ POWER_TURBO,
+ POWER_SILENT,
+ POWER_BETTERPERFORMANCE
+ };
+
public static Dictionary powerModes = new Dictionary
{
- { "961cc777-2547-4f9d-8174-7d86181b8a7a", "Best Power Efficiency" },
- { "00000000-0000-0000-0000-000000000000", "Balanced" },
- { "ded574b5-45a0-4f42-8737-46345c09c238", "Best Performance" },
+ { POWER_SILENT, "Best Power Efficiency" },
+ { POWER_BALANCED, "Balanced" },
+ { POWER_TURBO, "Best Performance" },
};
static Guid GetActiveScheme()
{
@@ -127,61 +139,67 @@ namespace GHelper.Mode
Logger.WriteLine("Boost " + boost);
}
- public static void SetPowerScheme(string scheme)
+ public static string GetPowerMode()
{
- List overlays = new() {
- "00000000-0000-0000-0000-000000000000",
- "ded574b5-45a0-4f42-8737-46345c09c238",
- "961cc777-2547-4f9d-8174-7d86181b8a7a",
- "3af9B8d9-7c97-431d-ad78-34a8bfea439f"
- };
+ PowerGetEffectiveOverlayScheme(out Guid activeScheme);
+ return activeScheme.ToString();
+ }
+
+ public static void SetPowerMode(string scheme)
+ {
+
+ if (!overlays.Contains(scheme)) return;
Guid guidScheme = new Guid(scheme);
- if (overlays.Contains(scheme))
+ uint status = PowerGetEffectiveOverlayScheme(out Guid activeScheme);
+ if (status != 0 || activeScheme != guidScheme)
{
-
- Guid activeSchemeGuid = GetActiveScheme();
- Guid balanced = new Guid("381b4222-f694-41f0-9685-ff5bb260df2e");
-
- if (activeSchemeGuid != balanced && !AppConfig.Is("skip_power_plan"))
- {
- PowerSetActiveScheme(IntPtr.Zero, balanced);
- Logger.WriteLine("Balanced Plan: " + balanced);
- }
-
- uint status = PowerGetEffectiveOverlayScheme(out Guid activeScheme);
- if (status != 0 || activeScheme != guidScheme)
- {
- PowerSetActiveOverlayScheme(guidScheme);
- Logger.WriteLine("Power Mode: " + scheme);
- }
+ status = PowerSetActiveOverlayScheme(guidScheme);
+ Logger.WriteLine("Power Mode " + scheme + ":" + (status == 0 ? "OK" : status));
}
- else
- {
- PowerSetActiveScheme(IntPtr.Zero, guidScheme);
- Logger.WriteLine("Power Plan: " + scheme);
- }
-
}
- public static void SetPowerScheme(int mode)
+ public static void SetBalancedPowerPlan()
+ {
+ Guid activeSchemeGuid = GetActiveScheme();
+ string balanced = "381b4222-f694-41f0-9685-ff5bb260df2e";
+
+ if (activeSchemeGuid.ToString() != balanced && !AppConfig.Is("skip_power_plan"))
+ {
+ SetPowerPlan(balanced);
+ }
+ }
+
+ public static void SetPowerPlan(string scheme)
+ {
+ // Skipping power modes
+ if (overlays.Contains(scheme)) return;
+
+ Guid guidScheme = new Guid(scheme);
+ uint status = PowerSetActiveScheme(IntPtr.Zero, guidScheme);
+ Logger.WriteLine("Power Plan " + scheme + ":" + (status == 0 ? "OK" : status));
+ }
+
+ public static string GetDefaultPowerMode(int mode)
{
switch (mode)
{
- case 0: // balanced
- SetPowerScheme("00000000-0000-0000-0000-000000000000");
- break;
case 1: // turbo
- SetPowerScheme("ded574b5-45a0-4f42-8737-46345c09c238");
- break;
+ return POWER_TURBO;
case 2: //silent
- SetPowerScheme("961cc777-2547-4f9d-8174-7d86181b8a7a");
- break;
+ return POWER_SILENT;
+ default: // balanced
+ return POWER_BALANCED;
}
}
+ public static void SetPowerMode(int mode)
+ {
+ SetPowerMode(GetDefaultPowerMode(mode));
+ }
+
public static int GetLidAction(bool ac)
{
Guid activeSchemeGuid = GetActiveScheme();
diff --git a/app/Program.cs b/app/Program.cs
index a100adfa..95e73ffe 100644
--- a/app/Program.cs
+++ b/app/Program.cs
@@ -199,10 +199,12 @@ namespace GHelper
private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
- Logger.WriteLine("Power Mode:" + e.Mode.ToString());
-
- if (e.Mode == PowerModes.Suspend) gpuControl.StandardModeFix();
+ if (e.Mode == PowerModes.Suspend)
+ {
+ Logger.WriteLine("Power Mode:" + e.Mode.ToString());
+ gpuControl.StandardModeFix();
+ }
if (SystemInformation.PowerStatus.PowerLineStatus == isPlugged) return;
SetAutoModes(true);