Compare commits

...

7 Commits

Author SHA1 Message Date
Serge
8f0e4431e6 Label 2023-09-08 21:45:17 +02:00
Serge
bff2676b64 Calibrate in turbo mode 2023-09-08 19:47:12 +02:00
Serge
e9e5fe1cc9 Simplification 2023-09-08 19:37:09 +02:00
Serge
e6a78fc8f7 Fan Calibration 2023-09-08 19:32:37 +02:00
Serge
0e3efcf547 Calibration 2023-09-08 19:12:57 +02:00
Serge
4ae3fb4e3d Boot Sound 2023-09-07 17:29:35 +02:00
Serge
20e7dd96a1 Cleanup 2023-09-07 17:07:34 +02:00
11 changed files with 348 additions and 159 deletions

View File

@@ -1,4 +1,5 @@
using System.Management; using GHelper;
using System.Management;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
public enum AsusFan public enum AsusFan
@@ -104,6 +105,8 @@ public class AsusACPI
public const int ScreenPadToggle = 0x00050031; public const int ScreenPadToggle = 0x00050031;
public const int ScreenPadBrightness = 0x00050032; public const int ScreenPadBrightness = 0x00050032;
public const int BootSound = 0x00130022;
public const int Tablet_Notebook = 0; public const int Tablet_Notebook = 0;
public const int Tablet_Tablet = 1; public const int Tablet_Tablet = 1;
public const int Tablet_Tent = 2; public const int Tablet_Tent = 2;
@@ -344,6 +347,32 @@ public class AsusACPI
return -1; return -1;
} }
public int GetFan(AsusFan device)
{
int fan = -1;
switch (device)
{
case AsusFan.GPU:
fan = Program.acpi.DeviceGet(GPU_Fan);
break;
case AsusFan.Mid:
fan = Program.acpi.DeviceGet(Mid_Fan);
break;
default:
fan = Program.acpi.DeviceGet(CPU_Fan);
break;
}
if (fan < 0)
{
fan += 65536;
if (fan <= 0 || fan > 100) fan = -1;
}
return fan;
}
public int SetFanRange(AsusFan device, byte[] curve) public int SetFanRange(AsusFan device, byte[] curve)
{ {
byte min = (byte)(curve[8] * 255 / 100); byte min = (byte)(curve[8] * 255 / 100);
@@ -377,7 +406,7 @@ public class AsusACPI
// it seems to be a bug, when some old model's bios can go nuts if fan is set to 100% // it seems to be a bug, when some old model's bios can go nuts if fan is set to 100%
for (int i = 8; i < curve.Length; i++) curve[i] = (byte)(Math.Max((byte)0, Math.Min((byte)99, curve[i])) * fanScale / 100); for (int i = 8; i < curve.Length; i++) curve[i] = (byte)(Math.Max((byte)0, Math.Min((byte)100, curve[i])) * fanScale / 100);
switch (device) switch (device)
{ {

View File

@@ -644,6 +644,8 @@ namespace GHelper
byte[] ASUS_INIT = Encoding.ASCII.GetBytes("^ASUS Tech.Inc."); byte[] ASUS_INIT = Encoding.ASCII.GetBytes("^ASUS Tech.Inc.");
SetXGM(ASUS_INIT); SetXGM(ASUS_INIT);
/*
SetXGM(new byte[] { 0x5e, 0xd0, 0x02 }); SetXGM(new byte[] { 0x5e, 0xd0, 0x02 });
SetXGM(new byte[] { 0x5e, 0xd0, 0x03 }); SetXGM(new byte[] { 0x5e, 0xd0, 0x03 });
SetXGM(ASUS_INIT); SetXGM(ASUS_INIT);
@@ -652,6 +654,7 @@ namespace GHelper
SetXGM(new byte[] { 0x5e, 0xce, 0x03 }); SetXGM(new byte[] { 0x5e, 0xce, 0x03 });
SetXGM(new byte[] { 0x5e, 0xd0, 0x04 }); SetXGM(new byte[] { 0x5e, 0xd0, 0x04 });
SetXGM(new byte[] { 0x5e, 0xd0, 0x01 }); SetXGM(new byte[] { 0x5e, 0xd0, 0x01 });
*/
} }
public static void ApplyXGMLight(bool status) public static void ApplyXGMLight(bool status)

28
app/Extra.Designer.cs generated
View File

@@ -115,6 +115,7 @@ namespace GHelper
labelHibernateAfter = new Label(); labelHibernateAfter = new Label();
pictureHibernate = new PictureBox(); pictureHibernate = new PictureBox();
toolTip = new ToolTip(components); toolTip = new ToolTip(components);
checkBootSound = new CheckBox();
panelServices.SuspendLayout(); panelServices.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureService).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureService).BeginInit();
panelBindingsHeader.SuspendLayout(); panelBindingsHeader.SuspendLayout();
@@ -147,7 +148,7 @@ namespace GHelper
panelServices.Controls.Add(labelServices); panelServices.Controls.Add(labelServices);
panelServices.Controls.Add(buttonServices); panelServices.Controls.Add(buttonServices);
panelServices.Dock = DockStyle.Top; panelServices.Dock = DockStyle.Top;
panelServices.Location = new Point(15, 1279); panelServices.Location = new Point(15, 1321);
panelServices.Name = "panelServices"; panelServices.Name = "panelServices";
panelServices.Size = new Size(983, 75); panelServices.Size = new Size(983, 75);
panelServices.TabIndex = 5; panelServices.TabIndex = 5;
@@ -1065,6 +1066,7 @@ namespace GHelper
panelSettings.Controls.Add(checkAutoToggleClamshellMode); panelSettings.Controls.Add(checkAutoToggleClamshellMode);
panelSettings.Controls.Add(checkTopmost); panelSettings.Controls.Add(checkTopmost);
panelSettings.Controls.Add(checkNoOverdrive); panelSettings.Controls.Add(checkNoOverdrive);
panelSettings.Controls.Add(checkBootSound);
panelSettings.Controls.Add(checkUSBC); panelSettings.Controls.Add(checkUSBC);
panelSettings.Controls.Add(checkVariBright); panelSettings.Controls.Add(checkVariBright);
panelSettings.Controls.Add(checkGpuApps); panelSettings.Controls.Add(checkGpuApps);
@@ -1073,14 +1075,14 @@ namespace GHelper
panelSettings.Location = new Point(15, 921); panelSettings.Location = new Point(15, 921);
panelSettings.Name = "panelSettings"; panelSettings.Name = "panelSettings";
panelSettings.Padding = new Padding(20, 5, 11, 5); panelSettings.Padding = new Padding(20, 5, 11, 5);
panelSettings.Size = new Size(983, 304); panelSettings.Size = new Size(983, 346);
panelSettings.TabIndex = 3; panelSettings.TabIndex = 3;
// //
// checkAutoToggleClamshellMode // checkAutoToggleClamshellMode
// //
checkAutoToggleClamshellMode.AutoSize = true; checkAutoToggleClamshellMode.AutoSize = true;
checkAutoToggleClamshellMode.Dock = DockStyle.Top; checkAutoToggleClamshellMode.Dock = DockStyle.Top;
checkAutoToggleClamshellMode.Location = new Point(20, 257); checkAutoToggleClamshellMode.Location = new Point(20, 299);
checkAutoToggleClamshellMode.Name = "checkAutoToggleClamshellMode"; checkAutoToggleClamshellMode.Name = "checkAutoToggleClamshellMode";
checkAutoToggleClamshellMode.Padding = new Padding(3); checkAutoToggleClamshellMode.Padding = new Padding(3);
checkAutoToggleClamshellMode.Size = new Size(952, 42); checkAutoToggleClamshellMode.Size = new Size(952, 42);
@@ -1092,7 +1094,7 @@ namespace GHelper
// //
checkTopmost.AutoSize = true; checkTopmost.AutoSize = true;
checkTopmost.Dock = DockStyle.Top; checkTopmost.Dock = DockStyle.Top;
checkTopmost.Location = new Point(20, 215); checkTopmost.Location = new Point(20, 257);
checkTopmost.Margin = new Padding(4, 3, 4, 3); checkTopmost.Margin = new Padding(4, 3, 4, 3);
checkTopmost.Name = "checkTopmost"; checkTopmost.Name = "checkTopmost";
checkTopmost.Padding = new Padding(3); checkTopmost.Padding = new Padding(3);
@@ -1105,7 +1107,7 @@ namespace GHelper
// //
checkNoOverdrive.AutoSize = true; checkNoOverdrive.AutoSize = true;
checkNoOverdrive.Dock = DockStyle.Top; checkNoOverdrive.Dock = DockStyle.Top;
checkNoOverdrive.Location = new Point(20, 173); checkNoOverdrive.Location = new Point(20, 215);
checkNoOverdrive.Margin = new Padding(4, 3, 4, 3); checkNoOverdrive.Margin = new Padding(4, 3, 4, 3);
checkNoOverdrive.Name = "checkNoOverdrive"; checkNoOverdrive.Name = "checkNoOverdrive";
checkNoOverdrive.Padding = new Padding(3); checkNoOverdrive.Padding = new Padding(3);
@@ -1172,7 +1174,7 @@ namespace GHelper
panelPower.Controls.Add(labelHibernateAfter); panelPower.Controls.Add(labelHibernateAfter);
panelPower.Controls.Add(pictureHibernate); panelPower.Controls.Add(pictureHibernate);
panelPower.Dock = DockStyle.Top; panelPower.Dock = DockStyle.Top;
panelPower.Location = new Point(15, 1225); panelPower.Location = new Point(15, 1267);
panelPower.Name = "panelPower"; panelPower.Name = "panelPower";
panelPower.Size = new Size(983, 54); panelPower.Size = new Size(983, 54);
panelPower.TabIndex = 4; panelPower.TabIndex = 4;
@@ -1209,6 +1211,19 @@ namespace GHelper
pictureHibernate.TabIndex = 22; pictureHibernate.TabIndex = 22;
pictureHibernate.TabStop = false; pictureHibernate.TabStop = false;
// //
// checkBootSound
//
checkBootSound.AutoSize = true;
checkBootSound.Dock = DockStyle.Top;
checkBootSound.Location = new Point(20, 173);
checkBootSound.Margin = new Padding(4, 3, 4, 3);
checkBootSound.Name = "checkBootSound";
checkBootSound.Padding = new Padding(3);
checkBootSound.Size = new Size(952, 42);
checkBootSound.TabIndex = 10;
checkBootSound.Text = "Boot Sound";
checkBootSound.UseVisualStyleBackColor = true;
//
// Extra // Extra
// //
AutoScaleDimensions = new SizeF(192F, 192F); AutoScaleDimensions = new SizeF(192F, 192F);
@@ -1356,5 +1371,6 @@ namespace GHelper
private NumericUpDown numericHibernateAfter; private NumericUpDown numericHibernateAfter;
private CheckBox checkGPUFix; private CheckBox checkGPUFix;
private ToolTip toolTip; private ToolTip toolTip;
private CheckBox checkBootSound;
} }
} }

View File

@@ -108,6 +108,7 @@ namespace GHelper
checkSleep.Text = Properties.Strings.Sleep; checkSleep.Text = Properties.Strings.Sleep;
checkBoot.Text = Properties.Strings.Boot; checkBoot.Text = Properties.Strings.Boot;
checkShutdown.Text = Properties.Strings.Shutdown; checkShutdown.Text = Properties.Strings.Shutdown;
checkBootSound.Text = Properties.Strings.BootSound;
labelSpeed.Text = Properties.Strings.AnimationSpeed; labelSpeed.Text = Properties.Strings.AnimationSpeed;
//labelBrightness.Text = Properties.Strings.Brightness; //labelBrightness.Text = Properties.Strings.Brightness;
@@ -311,6 +312,9 @@ namespace GHelper
checkGpuApps.Checked = AppConfig.Is("kill_gpu_apps"); checkGpuApps.Checked = AppConfig.Is("kill_gpu_apps");
checkGpuApps.CheckedChanged += CheckGpuApps_CheckedChanged; checkGpuApps.CheckedChanged += CheckGpuApps_CheckedChanged;
checkBootSound.Checked = (Program.acpi.DeviceGet(AsusACPI.BootSound) == 1);
checkBootSound.CheckedChanged += CheckBootSound_CheckedChanged;
pictureHelp.Click += PictureHelp_Click; pictureHelp.Click += PictureHelp_Click;
buttonServices.Click += ButtonServices_Click; buttonServices.Click += ButtonServices_Click;
@@ -327,6 +331,11 @@ namespace GHelper
InitHibernate(); InitHibernate();
} }
private void CheckBootSound_CheckedChanged(object? sender, EventArgs e)
{
Program.acpi.DeviceSet(AsusACPI.BootSound, (checkBootSound.Checked ? 1 : 0), "BootSound");
}
private void CheckGPUFix_CheckedChanged(object? sender, EventArgs e) private void CheckGPUFix_CheckedChanged(object? sender, EventArgs e)
{ {
AppConfig.Set("gpu_fix", (checkGPUFix.Checked ? 1 : 0)); AppConfig.Set("gpu_fix", (checkGPUFix.Checked ? 1 : 0));

211
app/Fans.Designer.cs generated
View File

@@ -31,14 +31,14 @@ namespace GHelper
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
ChartArea chartArea9 = new ChartArea(); ChartArea chartArea1 = new ChartArea();
Title title9 = new Title(); Title title1 = new Title();
ChartArea chartArea10 = new ChartArea(); ChartArea chartArea2 = new ChartArea();
Title title10 = new Title(); Title title2 = new Title();
ChartArea chartArea11 = new ChartArea(); ChartArea chartArea3 = new ChartArea();
Title title11 = new Title(); Title title3 = new Title();
ChartArea chartArea12 = new ChartArea(); ChartArea chartArea4 = new ChartArea();
Title title12 = new Title(); Title title4 = new Title();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Fans)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Fans));
panelFans = new Panel(); panelFans = new Panel();
labelTip = new Label(); labelTip = new Label();
@@ -55,6 +55,7 @@ namespace GHelper
picturePerf = new PictureBox(); picturePerf = new PictureBox();
labelFans = new Label(); labelFans = new Label();
panelApplyFans = new Panel(); panelApplyFans = new Panel();
buttonCalibrate = new RButton();
labelFansResult = new Label(); labelFansResult = new Label();
checkApplyFans = new RCheckBox(); checkApplyFans = new RCheckBox();
buttonReset = new RButton(); buttonReset = new RButton();
@@ -128,6 +129,10 @@ namespace GHelper
labelGPUCore = new Label(); labelGPUCore = new Label();
trackGPUCore = new TrackBar(); trackGPUCore = new TrackBar();
labelGPUCoreTitle = new Label(); labelGPUCoreTitle = new Label();
panelGPUClockLimit = new Panel();
labelGPUClockLimit = new Label();
trackGPUClockLimit = new TrackBar();
labelGPUClockLimitTitle = new Label();
panelTitleGPU = new Panel(); panelTitleGPU = new Panel();
pictureGPU = new PictureBox(); pictureGPU = new PictureBox();
labelGPU = new Label(); labelGPU = new Label();
@@ -136,10 +141,6 @@ namespace GHelper
buttonAdvanced = new RButton(); buttonAdvanced = new RButton();
buttonGPU = new RButton(); buttonGPU = new RButton();
buttonCPU = new RButton(); buttonCPU = new RButton();
panelGPUClockLimit = new Panel();
labelGPUClockLimit = new Label();
trackGPUClockLimit = new TrackBar();
labelGPUClockLimitTitle = new Label();
panelFans.SuspendLayout(); panelFans.SuspendLayout();
tableFanCharts.SuspendLayout(); tableFanCharts.SuspendLayout();
((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit(); ((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit();
@@ -188,12 +189,12 @@ namespace GHelper
((System.ComponentModel.ISupportInitialize)trackGPUMemory).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackGPUMemory).BeginInit();
panelGPUCore.SuspendLayout(); panelGPUCore.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackGPUCore).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackGPUCore).BeginInit();
panelGPUClockLimit.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackGPUClockLimit).BeginInit();
panelTitleGPU.SuspendLayout(); panelTitleGPU.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureGPU).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureGPU).BeginInit();
panelNav.SuspendLayout(); panelNav.SuspendLayout();
tableNav.SuspendLayout(); tableNav.SuspendLayout();
panelGPUClockLimit.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackGPUClockLimit).BeginInit();
SuspendLayout(); SuspendLayout();
// //
// panelFans // panelFans
@@ -239,7 +240,7 @@ namespace GHelper
tableFanCharts.Location = new Point(0, 66); tableFanCharts.Location = new Point(0, 66);
tableFanCharts.Margin = new Padding(4); tableFanCharts.Margin = new Padding(4);
tableFanCharts.Name = "tableFanCharts"; tableFanCharts.Name = "tableFanCharts";
tableFanCharts.Padding = new Padding(10, 0, 10, 10); tableFanCharts.Padding = new Padding(10, 0, 10, 5);
tableFanCharts.RowCount = 2; tableFanCharts.RowCount = 2;
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 25F)); tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 25F));
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 25F)); tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 25F));
@@ -250,60 +251,60 @@ namespace GHelper
// //
// chartGPU // chartGPU
// //
chartArea9.Name = "ChartArea1"; chartArea1.Name = "ChartArea1";
chartGPU.ChartAreas.Add(chartArea9); chartGPU.ChartAreas.Add(chartArea1);
chartGPU.Dock = DockStyle.Fill; chartGPU.Dock = DockStyle.Fill;
chartGPU.Location = new Point(12, 491); chartGPU.Location = new Point(12, 493);
chartGPU.Margin = new Padding(2, 10, 2, 10); chartGPU.Margin = new Padding(2, 10, 2, 10);
chartGPU.Name = "chartGPU"; chartGPU.Name = "chartGPU";
chartGPU.Size = new Size(782, 461); chartGPU.Size = new Size(782, 463);
chartGPU.TabIndex = 17; chartGPU.TabIndex = 17;
chartGPU.Text = "chartGPU"; chartGPU.Text = "chartGPU";
title9.Name = "Title1"; title1.Name = "Title1";
chartGPU.Titles.Add(title9); chartGPU.Titles.Add(title1);
// //
// chartCPU // chartCPU
// //
chartArea10.Name = "ChartArea1"; chartArea2.Name = "ChartArea1";
chartCPU.ChartAreas.Add(chartArea10); chartCPU.ChartAreas.Add(chartArea2);
chartCPU.Dock = DockStyle.Fill; chartCPU.Dock = DockStyle.Fill;
chartCPU.Location = new Point(12, 10); chartCPU.Location = new Point(12, 10);
chartCPU.Margin = new Padding(2, 10, 2, 10); chartCPU.Margin = new Padding(2, 10, 2, 10);
chartCPU.Name = "chartCPU"; chartCPU.Name = "chartCPU";
chartCPU.Size = new Size(782, 461); chartCPU.Size = new Size(782, 463);
chartCPU.TabIndex = 14; chartCPU.TabIndex = 14;
chartCPU.Text = "chartCPU"; chartCPU.Text = "chartCPU";
title10.Name = "Title1"; title2.Name = "Title1";
chartCPU.Titles.Add(title10); chartCPU.Titles.Add(title2);
// //
// chartXGM // chartXGM
// //
chartArea11.Name = "ChartAreaXGM"; chartArea3.Name = "ChartAreaXGM";
chartXGM.ChartAreas.Add(chartArea11); chartXGM.ChartAreas.Add(chartArea3);
chartXGM.Dock = DockStyle.Fill; chartXGM.Dock = DockStyle.Fill;
chartXGM.Location = new Point(12, 1453); chartXGM.Location = new Point(12, 1459);
chartXGM.Margin = new Padding(2, 10, 2, 10); chartXGM.Margin = new Padding(2, 10, 2, 10);
chartXGM.Name = "chartXGM"; chartXGM.Name = "chartXGM";
chartXGM.Size = new Size(782, 464); chartXGM.Size = new Size(782, 463);
chartXGM.TabIndex = 14; chartXGM.TabIndex = 14;
chartXGM.Text = "chartXGM"; chartXGM.Text = "chartXGM";
title11.Name = "Title4"; title3.Name = "Title4";
chartXGM.Titles.Add(title11); chartXGM.Titles.Add(title3);
chartXGM.Visible = false; chartXGM.Visible = false;
// //
// chartMid // chartMid
// //
chartArea12.Name = "ChartArea3"; chartArea4.Name = "ChartArea3";
chartMid.ChartAreas.Add(chartArea12); chartMid.ChartAreas.Add(chartArea4);
chartMid.Dock = DockStyle.Fill; chartMid.Dock = DockStyle.Fill;
chartMid.Location = new Point(12, 972); chartMid.Location = new Point(12, 976);
chartMid.Margin = new Padding(2, 10, 2, 10); chartMid.Margin = new Padding(2, 10, 2, 10);
chartMid.Name = "chartMid"; chartMid.Name = "chartMid";
chartMid.Size = new Size(782, 461); chartMid.Size = new Size(782, 463);
chartMid.TabIndex = 14; chartMid.TabIndex = 14;
chartMid.Text = "chartMid"; chartMid.Text = "chartMid";
title12.Name = "Title3"; title4.Name = "Title3";
chartMid.Titles.Add(title12); chartMid.Titles.Add(title4);
chartMid.Visible = false; chartMid.Visible = false;
// //
// panelTitleFans // panelTitleFans
@@ -410,6 +411,7 @@ namespace GHelper
// //
// panelApplyFans // panelApplyFans
// //
panelApplyFans.Controls.Add(buttonCalibrate);
panelApplyFans.Controls.Add(labelFansResult); panelApplyFans.Controls.Add(labelFansResult);
panelApplyFans.Controls.Add(checkApplyFans); panelApplyFans.Controls.Add(checkApplyFans);
panelApplyFans.Controls.Add(buttonReset); panelApplyFans.Controls.Add(buttonReset);
@@ -420,16 +422,32 @@ namespace GHelper
panelApplyFans.Size = new Size(806, 116); panelApplyFans.Size = new Size(806, 116);
panelApplyFans.TabIndex = 43; panelApplyFans.TabIndex = 43;
// //
// buttonCalibrate
//
buttonCalibrate.Activated = false;
buttonCalibrate.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonCalibrate.BackColor = SystemColors.ControlLight;
buttonCalibrate.BorderColor = Color.Transparent;
buttonCalibrate.BorderRadius = 2;
buttonCalibrate.FlatStyle = FlatStyle.Flat;
buttonCalibrate.Location = new Point(239, 40);
buttonCalibrate.Margin = new Padding(4, 2, 4, 2);
buttonCalibrate.Name = "buttonCalibrate";
buttonCalibrate.Secondary = true;
buttonCalibrate.Size = new Size(141, 50);
buttonCalibrate.TabIndex = 43;
buttonCalibrate.Text = "Calibrate";
buttonCalibrate.UseVisualStyleBackColor = false;
//
// labelFansResult // labelFansResult
// //
labelFansResult.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; labelFansResult.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
labelFansResult.ForeColor = Color.Red; labelFansResult.ForeColor = Color.Red;
labelFansResult.Location = new Point(24, 4); labelFansResult.Location = new Point(18, 2);
labelFansResult.Margin = new Padding(4, 0, 4, 0); labelFansResult.Margin = new Padding(4, 0, 4, 0);
labelFansResult.Name = "labelFansResult"; labelFansResult.Name = "labelFansResult";
labelFansResult.Size = new Size(762, 32); labelFansResult.Size = new Size(771, 32);
labelFansResult.TabIndex = 42; labelFansResult.TabIndex = 42;
labelFansResult.TextAlign = ContentAlignment.TopRight;
labelFansResult.Visible = false; labelFansResult.Visible = false;
// //
// checkApplyFans // checkApplyFans
@@ -458,7 +476,7 @@ namespace GHelper
buttonReset.Margin = new Padding(4, 2, 4, 2); buttonReset.Margin = new Padding(4, 2, 4, 2);
buttonReset.Name = "buttonReset"; buttonReset.Name = "buttonReset";
buttonReset.Secondary = true; buttonReset.Secondary = true;
buttonReset.Size = new Size(274, 50); buttonReset.Size = new Size(216, 50);
buttonReset.TabIndex = 18; buttonReset.TabIndex = 18;
buttonReset.Text = Properties.Strings.FactoryDefaults; buttonReset.Text = Properties.Strings.FactoryDefaults;
buttonReset.UseVisualStyleBackColor = false; buttonReset.UseVisualStyleBackColor = false;
@@ -1337,6 +1355,56 @@ namespace GHelper
labelGPUCoreTitle.TabIndex = 17; labelGPUCoreTitle.TabIndex = 17;
labelGPUCoreTitle.Text = "Core Clock Offset"; labelGPUCoreTitle.Text = "Core Clock Offset";
// //
// panelGPUClockLimit
//
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;
//
// labelGPUClockLimit
//
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;
//
// trackGPUClockLimit
//
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";
//
// panelTitleGPU // panelTitleGPU
// //
panelTitleGPU.AutoSize = true; panelTitleGPU.AutoSize = true;
@@ -1459,56 +1527,6 @@ namespace GHelper
buttonCPU.TextImageRelation = TextImageRelation.ImageBeforeText; buttonCPU.TextImageRelation = TextImageRelation.ImageBeforeText;
buttonCPU.UseVisualStyleBackColor = false; buttonCPU.UseVisualStyleBackColor = false;
// //
// panelGPUClockLimit
//
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;
//
// labelGPUClockLimit
//
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;
//
// trackGPUClockLimit
//
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 // Fans
// //
AutoScaleDimensions = new SizeF(192F, 192F); AutoScaleDimensions = new SizeF(192F, 192F);
@@ -1597,14 +1615,14 @@ namespace GHelper
panelGPUCore.ResumeLayout(false); panelGPUCore.ResumeLayout(false);
panelGPUCore.PerformLayout(); panelGPUCore.PerformLayout();
((System.ComponentModel.ISupportInitialize)trackGPUCore).EndInit(); ((System.ComponentModel.ISupportInitialize)trackGPUCore).EndInit();
panelGPUClockLimit.ResumeLayout(false);
panelGPUClockLimit.PerformLayout();
((System.ComponentModel.ISupportInitialize)trackGPUClockLimit).EndInit();
panelTitleGPU.ResumeLayout(false); panelTitleGPU.ResumeLayout(false);
panelTitleGPU.PerformLayout(); panelTitleGPU.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureGPU).EndInit(); ((System.ComponentModel.ISupportInitialize)pictureGPU).EndInit();
panelNav.ResumeLayout(false); panelNav.ResumeLayout(false);
tableNav.ResumeLayout(false); tableNav.ResumeLayout(false);
panelGPUClockLimit.ResumeLayout(false);
panelGPUClockLimit.PerformLayout();
((System.ComponentModel.ISupportInitialize)trackGPUClockLimit).EndInit();
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
} }
@@ -1711,5 +1729,6 @@ namespace GHelper
private Label labelGPUClockLimit; private Label labelGPUClockLimit;
private TrackBar trackGPUClockLimit; private TrackBar trackGPUClockLimit;
private Label labelGPUClockLimitTitle; private Label labelGPUClockLimitTitle;
private RButton buttonCalibrate;
} }
} }

View File

@@ -18,8 +18,6 @@ namespace GHelper
Series seriesMid; Series seriesMid;
Series seriesXGM; Series seriesXGM;
static int MinRPM, MaxRPM;
static bool gpuVisible = true; static bool gpuVisible = true;
static bool fanRpm = true; static bool fanRpm = true;
@@ -28,6 +26,8 @@ namespace GHelper
NvidiaGpuControl? nvControl = null; NvidiaGpuControl? nvControl = null;
ModeControl modeControl = Program.modeControl; ModeControl modeControl = Program.modeControl;
public static System.Timers.Timer timer = default!;
public Fans() public Fans()
{ {
@@ -57,10 +57,10 @@ namespace GHelper
buttonApplyAdvanced.Text = Properties.Strings.Apply; buttonApplyAdvanced.Text = Properties.Strings.Apply;
checkApplyUV.Text = Properties.Strings.AutoApply; checkApplyUV.Text = Properties.Strings.AutoApply;
buttonCalibrate.Text = Properties.Strings.Calibrate;
InitTheme(true); InitTheme(true);
MinRPM = 18;
MaxRPM = HardwareControl.fanMax;
labelTip.Visible = false; labelTip.Visible = false;
labelTip.BackColor = Color.Transparent; labelTip.BackColor = Color.Transparent;
@@ -200,12 +200,97 @@ namespace GHelper
checkApplyUV.Click += CheckApplyUV_Click; checkApplyUV.Click += CheckApplyUV_Click;
timer = new System.Timers.Timer(1000);
timer.Elapsed += Timer_Elapsed;
buttonCalibrate.Click += ButtonCalibrate_Click;
ToggleNavigation(0); ToggleNavigation(0);
FormClosed += Fans_FormClosed; FormClosed += Fans_FormClosed;
} }
const int FAN_COUNT = 3;
static int[] fanMax;
static int sameCount = 0;
private void Timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
{
int fan;
bool same = true;
for (int i = 0; i < FAN_COUNT; i++)
{
fan = Program.acpi.GetFan((AsusFan)i);
if (fan > fanMax[i])
{
fanMax[i] = fan;
same = false;
}
}
if (same) sameCount++;
else sameCount = 0;
LabelFansResult("Max Speed - CPU: " + fanMax[(int)AsusFan.CPU] * 100 + ", GPU: " + fanMax[(int)AsusFan.GPU] * 100 + " (" + sameCount + "s)");
if (sameCount >= 15)
{
for (int i = 0; i < FAN_COUNT; i++)
{
if (fanMax[i] > 30 && fanMax[i] < 80) AppConfig.Set("fan_max_" + i, fanMax[i]);
}
sameCount = 0;
CalibrateNext();
}
}
private void CalibrateNext()
{
timer.Enabled = false;
modeControl.SetPerformanceMode();
string label = "Measured - CPU: " + AppConfig.Get("fan_max_" + (int)AsusFan.CPU) * 100;
if (AppConfig.Get("fan_max_" + (int)AsusFan.GPU) > 0)
label = label + ", GPU: " + AppConfig.Get("fan_max_" + (int)AsusFan.GPU) * 100;
if (AppConfig.Get("fan_max_" + (int)AsusFan.Mid) > 0)
label = label + ", Mid: " + AppConfig.Get("fan_max_" + (int)AsusFan.Mid) * 100;
LabelFansResult(label);
Invoke(delegate
{
buttonCalibrate.Enabled = true;
SetAxis(chartCPU, AsusFan.CPU);
SetAxis(chartGPU, AsusFan.GPU);
if (chartMid.Visible) SetAxis(chartMid, AsusFan.Mid);
});
}
private void ButtonCalibrate_Click(object? sender, EventArgs e)
{
fanMax = new int[] { 0, 0, 0 };
buttonCalibrate.Enabled = false;
timer.Enabled = true;
for (int i = 0; i < FAN_COUNT; i++)
{
AppConfig.Remove("fan_max_" + i);
}
Program.acpi.DeviceSet(AsusACPI.PerformanceMode, AsusACPI.PerformanceTurbo, "ModeCalibration");
for (int i = 0; i < FAN_COUNT; i++)
Program.acpi.SetFanCurve((AsusFan)i, new byte[] { 20, 30, 40, 50, 60, 70, 80, 90, 100, 100, 100, 100, 100, 100, 100, 100 });
}
private void ChartCPU_MouseClick(object? sender, MouseEventArgs e) private void ChartCPU_MouseClick(object? sender, MouseEventArgs e)
{ {
@@ -571,15 +656,17 @@ namespace GHelper
VisualiseGPUSettings(); VisualiseGPUSettings();
} }
static string ChartPercToRPM(int percentage, AsusFan device, string unit = "") static string ChartYLabel(int percentage, AsusFan device, string unit = "")
{ {
if (percentage == 0) return "OFF"; if (percentage == 0) return "OFF";
int Max = MaxRPM; int Min = HardwareControl.DEFAULT_FAN_MIN;
int Max = AppConfig.Get("fan_max_" + (int)device, HardwareControl.DEFAULT_FAN_MAX);
if (device == AsusFan.XGM) Max = 72; if (device == AsusFan.XGM) Max = 72;
if (fanRpm) if (fanRpm)
return (200 * Math.Round((float)(MinRPM * 100 + (Max - MinRPM) * percentage) / 200)).ToString() + unit; return (200 * Math.Round((float)(Min * 100 + (Max - Min) * percentage) / 200)).ToString() + unit;
else else
return percentage + "%"; return percentage + "%";
} }
@@ -589,12 +676,12 @@ namespace GHelper
chart.ChartAreas[0].AxisY.CustomLabels.Clear(); chart.ChartAreas[0].AxisY.CustomLabels.Clear();
for (int i = 0; i <= fansMax - 10; i += 10) for (int i = 0; i <= fansMax; i += 10)
{ {
chart.ChartAreas[0].AxisY.CustomLabels.Add(i - 2, i + 2, ChartPercToRPM(i, device)); chart.ChartAreas[0].AxisY.CustomLabels.Add(i - 2, i + 2, ChartYLabel(i, device));
} }
chart.ChartAreas[0].AxisY.CustomLabels.Add(fansMax - 2, fansMax + 2, Properties.Strings.RPM); //chart.ChartAreas[0].AxisY.CustomLabels.Add(fansMax -2, fansMax + 2, Properties.Strings.RPM);
chart.ChartAreas[0].AxisY.Interval = 10; chart.ChartAreas[0].AxisY.Interval = 10;
} }
@@ -602,20 +689,21 @@ namespace GHelper
{ {
string title = ""; string title = "";
string scale = ", RPM/°C";
switch (device) switch (device)
{ {
case AsusFan.CPU: case AsusFan.CPU:
title = Properties.Strings.FanProfileCPU; title = Properties.Strings.FanProfileCPU + scale;
break; break;
case AsusFan.GPU: case AsusFan.GPU:
title = Properties.Strings.FanProfileGPU; title = Properties.Strings.FanProfileGPU + scale;
break; break;
case AsusFan.Mid: case AsusFan.Mid:
title = Properties.Strings.FanProfileMid; title = Properties.Strings.FanProfileMid + scale;
break; break;
case AsusFan.XGM: case AsusFan.XGM:
title = "XG Mobile"; title = "XG Mobile" + scale;
break; break;
} }
@@ -724,8 +812,11 @@ namespace GHelper
public void LabelFansResult(string text) public void LabelFansResult(string text)
{ {
labelFansResult.Text = text; Invoke(delegate
labelFansResult.Visible = (text.Length > 0); {
labelFansResult.Text = text;
labelFansResult.Visible = (text.Length > 0);
});
} }
private void Fans_FormClosing(object? sender, FormClosingEventArgs e) private void Fans_FormClosing(object? sender, FormClosingEventArgs e)
@@ -994,7 +1085,6 @@ namespace GHelper
{ {
curPoint = null; curPoint = null;
curIndex = -1; curIndex = -1;
labelTip.Visible = false; labelTip.Visible = false;
SaveProfile(seriesCPU, AsusFan.CPU); SaveProfile(seriesCPU, AsusFan.CPU);
@@ -1017,7 +1107,9 @@ namespace GHelper
private void ChartCPU_MouseLeave(object? sender, EventArgs e) private void ChartCPU_MouseLeave(object? sender, EventArgs e)
{ {
Chart_Save(); curPoint = null;
curIndex = -1;
labelTip.Visible = false;
} }
private void ChartCPU_MouseMove(object? sender, MouseEventArgs e, AsusFan device) private void ChartCPU_MouseMove(object? sender, MouseEventArgs e, AsusFan device)
@@ -1081,7 +1173,7 @@ namespace GHelper
tip = true; tip = true;
} }
labelTip.Text = Math.Round(curPoint.XValue) + "C, " + ChartPercToRPM((int)curPoint.YValues[0], device, " " + Properties.Strings.RPM); labelTip.Text = Math.Round(curPoint.XValue) + "C, " + ChartYLabel((int)curPoint.YValues[0], device, " " + Properties.Strings.RPM);
labelTip.Top = e.Y + ((Control)sender).Top; labelTip.Top = e.Y + ((Control)sender).Top;
labelTip.Left = e.X - 50; labelTip.Left = e.X - 50;

View File

@@ -44,9 +44,7 @@ namespace GHelper.Gpu
// GPU mode not supported // GPU mode not supported
if (eco < 0 && mux < 0) if (eco < 0 && mux < 0)
{ {
if (gpuExists is null) if (gpuExists is null) gpuExists = Program.acpi.GetFan(AsusFan.GPU) >= 0;
gpuExists = HardwareControl.FormatFan(Program.acpi.DeviceGet(AsusACPI.GPU_Fan)) is not null;
settings.HideGPUModes((bool)gpuExists); settings.HideGPUModes((bool)gpuExists);
} }
} }

View File

@@ -10,8 +10,10 @@ using System.Management;
public static class HardwareControl public static class HardwareControl
{ {
const int DEFAULT_FAN_MAX = 58; public const int DEFAULT_FAN_MIN = 18;
const int INADEQUATE_MAX = 80; public const int DEFAULT_FAN_MAX = 58;
const int INADEQUATE_MAX = 72;
public static IGpuControl? GpuControl; public static IGpuControl? GpuControl;
@@ -35,20 +37,17 @@ public static class HardwareControl
static long lastUpdate; static long lastUpdate;
static int _fanMax = DEFAULT_FAN_MAX; static int[] _fanMax = new int[3] { DEFAULT_FAN_MAX, DEFAULT_FAN_MAX, DEFAULT_FAN_MAX };
static bool _fanRpm = false; static bool _fanRpm = false;
public static int fanMax public static int GetFanMax(AsusFan device)
{ {
get return _fanMax[(int)device];
{ }
return _fanMax;
} public static void SetFanMax(AsusFan device, int value)
set {
{ AppConfig.Set("fan_max_" + (int)device, value);
AppConfig.Set("fan_max", value);
_fanMax = value;
}
} }
public static bool fanRpm public static bool fanRpm
@@ -66,32 +65,32 @@ public static class HardwareControl
static HardwareControl() static HardwareControl()
{ {
_fanMax = AppConfig.Get("fan_max"); for (int i = 0; i < 3; i++)
if (_fanMax > INADEQUATE_MAX) _fanMax = -1; // skipping inadvequate settings {
_fanMax[i] = AppConfig.Get("fan_max_" + i);
if (_fanMax[i] > INADEQUATE_MAX) _fanMax[i] = -1; // skipping inadvequate settings
if (_fanMax[i] < 0 && AppConfig.ContainsModel("401")) _fanMax[i] = 72;
if (_fanMax[i] < 0 && AppConfig.ContainsModel("503")) _fanMax[i] = 68;
if (_fanMax[i] < 0) _fanMax[i] = DEFAULT_FAN_MAX;
}
if (_fanMax < 0 && AppConfig.ContainsModel("401")) _fanMax = 72;
if (_fanMax < 0 && AppConfig.ContainsModel("503")) _fanMax = 68;
if (_fanMax < 0) _fanMax = DEFAULT_FAN_MAX;
_fanRpm = AppConfig.IsNotFalse("fan_rpm"); _fanRpm = AppConfig.IsNotFalse("fan_rpm");
} }
public static string FormatFan(int fan) public static string FormatFan(AsusFan device, int value)
{ {
// fix for old models if (value < 0) return null;
if (fan < 0)
{
fan += 65536;
if (fan <= 0 || fan > 100) return null; //nothing reasonable
}
if (fan > fanMax && fan <= INADEQUATE_MAX) fanMax = fan; if (value > GetFanMax(device) && value <= INADEQUATE_MAX) SetFanMax(device, value);
if (fanRpm) if (fanRpm)
return GHelper.Properties.Strings.FanSpeed + ": " + (fan * 100).ToString() + "RPM"; return GHelper.Properties.Strings.FanSpeed + ": " + (value * 100).ToString() + "RPM";
else else
return GHelper.Properties.Strings.FanSpeed + ": " + Math.Min(Math.Round((float)fan / fanMax * 100), 100).ToString() + "%"; // relatively to 6000 rpm return GHelper.Properties.Strings.FanSpeed + ": " + Math.Min(Math.Round((float)value / GetFanMax(device) * 100), 100).ToString() + "%"; // relatively to 6000 rpm
} }
private static int GetGpuUse() private static int GetGpuUse()
@@ -246,9 +245,9 @@ public static class HardwareControl
gpuTemp = -1; gpuTemp = -1;
gpuUse = -1; gpuUse = -1;
cpuFan = FormatFan(Program.acpi.DeviceGet(AsusACPI.CPU_Fan)); cpuFan = FormatFan(AsusFan.CPU, Program.acpi.GetFan(AsusFan.CPU));
gpuFan = FormatFan(Program.acpi.DeviceGet(AsusACPI.GPU_Fan)); gpuFan = FormatFan(AsusFan.GPU, Program.acpi.GetFan(AsusFan.GPU));
midFan = FormatFan(Program.acpi.DeviceGet(AsusACPI.Mid_Fan)); midFan = FormatFan(AsusFan.Mid, Program.acpi.GetFan(AsusFan.Mid));
cpuTemp = GetCPUTemp(); cpuTemp = GetCPUTemp();

View File

@@ -483,6 +483,15 @@ namespace GHelper.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to Boot Sound.
/// </summary>
internal static string BootSound {
get {
return ResourceManager.GetString("BootSound", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Brightness. /// Looks up a localized string similar to Brightness.
/// </summary> /// </summary>
@@ -510,6 +519,15 @@ namespace GHelper.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to Calibrate.
/// </summary>
internal static string Calibrate {
get {
return ResourceManager.GetString("Calibrate", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Charging. /// Looks up a localized string similar to Charging.
/// </summary> /// </summary>

View File

@@ -258,6 +258,9 @@
<data name="Boot" xml:space="preserve"> <data name="Boot" xml:space="preserve">
<value>Boot</value> <value>Boot</value>
</data> </data>
<data name="BootSound" xml:space="preserve">
<value>Boot Sound</value>
</data>
<data name="Brightness" xml:space="preserve"> <data name="Brightness" xml:space="preserve">
<value>Brightness</value> <value>Brightness</value>
</data> </data>
@@ -267,6 +270,9 @@
<data name="BrightnessUp" xml:space="preserve"> <data name="BrightnessUp" xml:space="preserve">
<value>Brightness Up</value> <value>Brightness Up</value>
</data> </data>
<data name="Calibrate" xml:space="preserve">
<value>Calibrate</value>
</data>
<data name="Charging" xml:space="preserve"> <data name="Charging" xml:space="preserve">
<value>Charging</value> <value>Charging</value>
</data> </data>

View File

@@ -278,7 +278,7 @@ namespace GHelper
foreach (var localVersion in localVersions) foreach (var localVersion in localVersions)
{ {
newer = Math.Min(newer, new Version(driver.version).CompareTo(new Version(localVersion))); newer = Math.Min(newer, new Version(driver.version).CompareTo(new Version(localVersion)));
Logger.WriteLine(driver.title + " " + driver.version + " vs " + localVersion + " = " + newer); Logger.WriteLine(driver.title + " " + deviceID + " "+ driver.version + " vs " + localVersion + " = " + newer);
} }
} }