diff --git a/ASUSWmi.cs b/ASUSWmi.cs index a6d06700..31cb2207 100644 --- a/ASUSWmi.cs +++ b/ASUSWmi.cs @@ -25,6 +25,9 @@ public class ASUSWmi public const uint DevsCPUFanCurve = 0x00110024; public const uint DevsGPUFanCurve = 0x00110025; + public const int PPT_Total = 0x001200A0; + public const int PPT_CPU = 0x001200B0; + public const int PerformanceBalanced = 0; public const int PerformanceTurbo = 1; public const int PerformanceSilent = 2; diff --git a/Fans.Designer.cs b/Fans.Designer.cs index 9f92e92b..1103083c 100644 --- a/Fans.Designer.cs +++ b/Fans.Designer.cs @@ -34,23 +34,37 @@ buttonApply = new Button(); buttonReset = new Button(); chartGPU = new System.Windows.Forms.DataVisualization.Charting.Chart(); + groupBox1 = new GroupBox(); + pictureFine = new PictureBox(); + labelInfo = new Label(); + labelCPU = new Label(); + labelTotal = new Label(); + label2 = new Label(); + label1 = new Label(); + trackCPU = new TrackBar(); + trackTotal = new TrackBar(); + buttonApplyPower = new Button(); ((System.ComponentModel.ISupportInitialize)chartCPU).BeginInit(); ((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit(); + groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureFine).BeginInit(); + ((System.ComponentModel.ISupportInitialize)trackCPU).BeginInit(); + ((System.ComponentModel.ISupportInitialize)trackTotal).BeginInit(); SuspendLayout(); // // chartCPU // chartArea1.Name = "ChartArea1"; chartCPU.ChartAreas.Add(chartArea1); - chartCPU.Location = new Point(16, 13); + chartCPU.Location = new Point(362, 30); chartCPU.Name = "chartCPU"; - chartCPU.Size = new Size(900, 480); + chartCPU.Size = new Size(772, 464); chartCPU.TabIndex = 0; chartCPU.Text = "chartCPU"; // // buttonApply // - buttonApply.Location = new Point(661, 1016); + buttonApply.Location = new Point(879, 1016); buttonApply.Name = "buttonApply"; buttonApply.Size = new Size(254, 46); buttonApply.TabIndex = 1; @@ -59,7 +73,7 @@ // // buttonReset // - buttonReset.Location = new Point(16, 1016); + buttonReset.Location = new Point(619, 1016); buttonReset.Name = "buttonReset"; buttonReset.Size = new Size(254, 46); buttonReset.TabIndex = 2; @@ -70,17 +84,132 @@ // chartArea2.Name = "ChartArea1"; chartGPU.ChartAreas.Add(chartArea2); - chartGPU.Location = new Point(16, 513); + chartGPU.Location = new Point(362, 511); chartGPU.Name = "chartGPU"; - chartGPU.Size = new Size(900, 480); + chartGPU.Size = new Size(772, 480); chartGPU.TabIndex = 3; chartGPU.Text = "chart1"; // + // groupBox1 + // + groupBox1.Controls.Add(pictureFine); + groupBox1.Controls.Add(labelInfo); + groupBox1.Controls.Add(labelCPU); + groupBox1.Controls.Add(labelTotal); + groupBox1.Controls.Add(label2); + groupBox1.Controls.Add(label1); + groupBox1.Controls.Add(trackCPU); + groupBox1.Controls.Add(trackTotal); + groupBox1.Location = new Point(12, 12); + groupBox1.Name = "groupBox1"; + groupBox1.Size = new Size(330, 979); + groupBox1.TabIndex = 4; + groupBox1.TabStop = false; + groupBox1.Text = "Power Limits (PPT)"; + // + // pictureFine + // + pictureFine.BackgroundImage = Properties.Resources.everything_is_fine_itsfine; + pictureFine.BackgroundImageLayout = ImageLayout.Zoom; + pictureFine.Location = new Point(12, 725); + pictureFine.Name = "pictureFine"; + pictureFine.Size = new Size(304, 240); + pictureFine.TabIndex = 12; + pictureFine.TabStop = false; + pictureFine.Visible = false; + // + // labelInfo + // + labelInfo.AutoSize = true; + labelInfo.Location = new Point(22, 644); + labelInfo.Name = "labelInfo"; + labelInfo.Size = new Size(65, 32); + labelInfo.TabIndex = 11; + labelInfo.Text = "label"; + // + // labelCPU + // + labelCPU.AutoSize = true; + labelCPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + labelCPU.Location = new Point(195, 99); + labelCPU.Name = "labelCPU"; + labelCPU.Size = new Size(61, 32); + labelCPU.TabIndex = 10; + labelCPU.Text = "CPU"; + labelCPU.TextAlign = ContentAlignment.MiddleCenter; + // + // labelTotal + // + labelTotal.AutoSize = true; + labelTotal.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + labelTotal.Location = new Point(37, 99); + labelTotal.Name = "labelTotal"; + labelTotal.Size = new Size(70, 32); + labelTotal.TabIndex = 9; + labelTotal.Text = "Total"; + labelTotal.TextAlign = ContentAlignment.MiddleCenter; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(198, 57); + label2.Name = "label2"; + label2.Size = new Size(58, 32); + label2.TabIndex = 8; + label2.Text = "CPU"; + label2.TextAlign = ContentAlignment.MiddleCenter; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(39, 57); + label1.Name = "label1"; + label1.Size = new Size(65, 32); + label1.TabIndex = 7; + label1.Text = "Total"; + label1.TextAlign = ContentAlignment.MiddleCenter; + // + // trackCPU + // + trackCPU.Location = new Point(203, 154); + trackCPU.Maximum = 85; + trackCPU.Minimum = 15; + trackCPU.Name = "trackCPU"; + trackCPU.Orientation = Orientation.Vertical; + trackCPU.Size = new Size(90, 470); + trackCPU.TabIndex = 6; + trackCPU.TickFrequency = 5; + trackCPU.Value = 80; + // + // trackTotal + // + trackTotal.Location = new Point(45, 154); + trackTotal.Maximum = 150; + trackTotal.Minimum = 15; + trackTotal.Name = "trackTotal"; + trackTotal.Orientation = Orientation.Vertical; + trackTotal.Size = new Size(90, 470); + trackTotal.TabIndex = 5; + trackTotal.TickFrequency = 5; + trackTotal.TickStyle = TickStyle.TopLeft; + trackTotal.Value = 125; + // + // buttonApplyPower + // + buttonApplyPower.Location = new Point(15, 1016); + buttonApplyPower.Name = "buttonApplyPower"; + buttonApplyPower.Size = new Size(327, 46); + buttonApplyPower.TabIndex = 11; + buttonApplyPower.Text = "Apply Power Limits"; + buttonApplyPower.UseVisualStyleBackColor = true; + // // Fans // AutoScaleDimensions = new SizeF(13F, 32F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(940, 1089); + ClientSize = new Size(1154, 1089); + Controls.Add(buttonApplyPower); + Controls.Add(groupBox1); Controls.Add(chartGPU); Controls.Add(buttonReset); Controls.Add(buttonApply); @@ -93,9 +222,14 @@ ShowIcon = false; ShowInTaskbar = false; StartPosition = FormStartPosition.CenterScreen; - Text = "Fans"; + Text = "Fans and Power"; ((System.ComponentModel.ISupportInitialize)chartCPU).EndInit(); ((System.ComponentModel.ISupportInitialize)chartGPU).EndInit(); + groupBox1.ResumeLayout(false); + groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureFine).EndInit(); + ((System.ComponentModel.ISupportInitialize)trackCPU).EndInit(); + ((System.ComponentModel.ISupportInitialize)trackTotal).EndInit(); ResumeLayout(false); } @@ -105,5 +239,15 @@ private Button buttonApply; private Button buttonReset; private System.Windows.Forms.DataVisualization.Charting.Chart chartGPU; + private GroupBox groupBox1; + private Label labelCPU; + private Label labelTotal; + private Label label2; + private Label label1; + private TrackBar trackCPU; + private TrackBar trackTotal; + private Button buttonApplyPower; + private Label labelInfo; + private PictureBox pictureFine; } } \ No newline at end of file diff --git a/Fans.cs b/Fans.cs index 718ef0c5..41cf45e9 100644 --- a/Fans.cs +++ b/Fans.cs @@ -11,6 +11,14 @@ namespace GHelper Series seriesCPU; Series seriesGPU; + const int MaxTotal = 150; + const int MinTotal = 15; + const int DefaultTotal = 125; + + const int MaxCPU = 90; + const int MinCPU = 15; + const int DefaultCPU = 80; + void SetChart(Chart chart, int device) { @@ -74,10 +82,85 @@ namespace GHelper buttonReset.Click += ButtonReset_Click; buttonApply.Click += ButtonApply_Click; + trackTotal.Maximum = MaxTotal; + trackTotal.Minimum = MinTotal; + + trackCPU.Maximum = MaxCPU; + trackCPU.Minimum = MinCPU; + + trackCPU.Scroll += TrackCPU_Scroll; + trackTotal.Scroll += TrackTotal_Scroll; + + buttonApplyPower.Click += ButtonApplyPower_Click; + + labelInfo.MaximumSize = new Size(300, 0); + labelInfo.Text = "Power Limits (PPT) is experimental feature.\n\nValues will be applied only after you click 'Apply' and reset after performance mode change.\n\nUse carefully and on your own risk!"; + + VisualisePower(true); + Shown += Fans_Shown; } + private void ButtonApplyPower_Click(object? sender, EventArgs e) + { + int limit_total = trackTotal.Value; + int limit_cpu = trackCPU.Value; + + Program.config.setConfig("limit_total", limit_total); + Program.config.setConfig("limit_cpu", limit_cpu); + + Program.wmi.DeviceSet(ASUSWmi.PPT_Total, limit_total); + Program.wmi.DeviceSet(ASUSWmi.PPT_CPU, limit_cpu); + + } + + public void VisualisePower(bool init = false) + { + + int limit_total; + int limit_cpu; + + if (init) + { + limit_total = Program.config.getConfig("limit_total"); + limit_cpu = Program.config.getConfig("limit_cpu"); + } + else + { + limit_total = trackTotal.Value; + limit_cpu = trackCPU.Value; + } + + if (limit_total < 0) limit_total = DefaultTotal; + if (limit_total > MaxTotal) limit_total = MaxTotal; + if (limit_total < MinTotal) limit_total = MinTotal; + + if (limit_cpu < 0) limit_cpu = DefaultCPU; + if (limit_cpu > MaxCPU) limit_cpu = MaxCPU; + if (limit_cpu < MinCPU) limit_cpu = MinCPU; + + if (limit_cpu > limit_total) limit_cpu = limit_total; + + trackTotal.Value = limit_total; + trackCPU.Value = limit_cpu; + + labelTotal.Text = trackTotal.Value.ToString() + "W"; + labelCPU.Text = trackCPU.Value.ToString() + "W"; + + pictureFine.Visible = (limit_cpu > 85 || limit_total > 145); + } + + private void TrackTotal_Scroll(object? sender, EventArgs e) + { + VisualisePower(); + } + + private void TrackCPU_Scroll(object? sender, EventArgs e) + { + VisualisePower(); + } + public void LoadFans() { diff --git a/GHelper.csproj b/GHelper.csproj index c8cc256d..4791ecfb 100644 --- a/GHelper.csproj +++ b/GHelper.csproj @@ -15,7 +15,7 @@ GHelper x64 False - 0.9.9.0 + 0.10.0 diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs index 3658fd96..43839093 100644 --- a/Properties/Resources.Designer.cs +++ b/Properties/Resources.Designer.cs @@ -70,6 +70,16 @@ namespace GHelper.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap everything_is_fine_itsfine { + get { + object obj = ResourceManager.GetObject("everything-is-fine-itsfine", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/Properties/Resources.resx b/Properties/Resources.resx index da1bf2d1..a22315f2 100644 --- a/Properties/Resources.resx +++ b/Properties/Resources.resx @@ -139,13 +139,16 @@ ..\Resources\icons8-video-card-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\icons8-fan-head-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\icons8-charging-battery-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\icons8-laptop-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\icons8-fan-head-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\everything-is-fine-itsfine.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/Resources/everything-is-fine-itsfine.gif b/Resources/everything-is-fine-itsfine.gif new file mode 100644 index 00000000..6f73fb4b Binary files /dev/null and b/Resources/everything-is-fine-itsfine.gif differ diff --git a/Settings.Designer.cs b/Settings.Designer.cs index f2d84ef6..92a2d599 100644 --- a/Settings.Designer.cs +++ b/Settings.Designer.cs @@ -512,7 +512,7 @@ buttonFans.Name = "buttonFans"; buttonFans.Size = new Size(210, 48); buttonFans.TabIndex = 28; - buttonFans.Text = "Fan Profile"; + buttonFans.Text = "Fans and Power"; buttonFans.UseVisualStyleBackColor = false; // // buttonKeyboard