From 32c4f6168c97a589a3ccc0902d020c46f4cb9655 Mon Sep 17 00:00:00 2001 From: Serge Samusya <5920850+seerge@users.noreply.github.com> Date: Fri, 1 Dec 2023 14:38:50 +0100 Subject: [PATCH] Rog Ally GPU Memory setting --- app/AsusACPI.cs | 16 ++++- app/Extra.Designer.cs | 99 +++++++++++++++++++++++++----- app/Extra.cs | 37 ++++++++++- app/Properties/Strings.Designer.cs | 27 ++++++++ app/Properties/Strings.resx | 9 +++ 5 files changed, 168 insertions(+), 20 deletions(-) diff --git a/app/AsusACPI.cs b/app/AsusACPI.cs index 50844515..a9bf8f60 100644 --- a/app/AsusACPI.cs +++ b/app/AsusACPI.cs @@ -1,4 +1,5 @@ -using GHelper; +using FftSharp; +using GHelper; using GHelper.USB; using System.Management; using System.Runtime.InteropServices; @@ -94,6 +95,9 @@ public class AsusACPI public const int PPT_APUC1 = 0x001200C1; // fPPT (fast boost limit) public const int PPT_GPUC2 = 0x001200C2; // NVIDIA GPU Temp Target (75.. 87 C) + public const int APU_MEM = 0x000600C1; + public const int APU_MEM_OFFSET = 258; + public const int TUF_KB_BRIGHTNESS = 0x00050021; public const int TUF_KB = 0x00100056; public const int TUF_KB2 = 0x0010005a; @@ -525,6 +529,16 @@ public class AsusACPI return DeviceGet(PPT_CPUB0) >= 0 && DeviceGet(PPT_GPUC0) < 0; } + public void SetAPUMem(int memory = 4) + { + if (memory < 0 || memory > 8) return; + Program.acpi.DeviceSet(APU_MEM, memory + APU_MEM_OFFSET, "APU Mem"); + } + + public int GetAPUMem() + { + return Program.acpi.DeviceGet(APU_MEM) - APU_MEM_OFFSET; + } public void ScanRange() { diff --git a/app/Extra.Designer.cs b/app/Extra.Designer.cs index 9a0f7ce0..ad3c315f 100644 --- a/app/Extra.Designer.cs +++ b/app/Extra.Designer.cs @@ -106,6 +106,7 @@ namespace GHelper checkAutoToggleClamshellMode = new CheckBox(); checkTopmost = new CheckBox(); checkNoOverdrive = new CheckBox(); + checkBootSound = new CheckBox(); checkUSBC = new CheckBox(); checkVariBright = new CheckBox(); checkGpuApps = new CheckBox(); @@ -115,7 +116,10 @@ namespace GHelper labelHibernateAfter = new Label(); pictureHibernate = new PictureBox(); toolTip = new ToolTip(components); - checkBootSound = new CheckBox(); + panelAPU = new Panel(); + comboAPU = new RComboBox(); + pictureAPUMem = new PictureBox(); + labelAPUMem = new Label(); panelServices.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureService).BeginInit(); panelBindingsHeader.SuspendLayout(); @@ -138,6 +142,8 @@ namespace GHelper panelPower.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)numericHibernateAfter).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureHibernate).BeginInit(); + panelAPU.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureAPUMem).BeginInit(); SuspendLayout(); // // panelServices @@ -148,7 +154,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, 1378); panelServices.Name = "panelServices"; panelServices.Size = new Size(983, 75); panelServices.TabIndex = 5; @@ -1072,7 +1078,7 @@ namespace GHelper panelSettings.Controls.Add(checkGpuApps); panelSettings.Controls.Add(checkGPUFix); panelSettings.Dock = DockStyle.Top; - panelSettings.Location = new Point(15, 921); + panelSettings.Location = new Point(15, 978); panelSettings.Name = "panelSettings"; panelSettings.Padding = new Padding(20, 5, 11, 5); panelSettings.Size = new Size(983, 346); @@ -1116,6 +1122,19 @@ namespace GHelper checkNoOverdrive.Text = Strings.DisableOverdrive; checkNoOverdrive.UseVisualStyleBackColor = true; // + // 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; + // // checkUSBC // checkUSBC.AutoSize = true; @@ -1174,7 +1193,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, 1324); panelPower.Name = "panelPower"; panelPower.Size = new Size(983, 54); panelPower.TabIndex = 4; @@ -1211,18 +1230,58 @@ namespace GHelper pictureHibernate.TabIndex = 22; pictureHibernate.TabStop = false; // - // checkBootSound + // panelAPU // - 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; + panelAPU.AutoSize = true; + panelAPU.Controls.Add(comboAPU); + panelAPU.Controls.Add(pictureAPUMem); + panelAPU.Controls.Add(labelAPUMem); + panelAPU.Dock = DockStyle.Top; + panelAPU.Location = new Point(15, 921); + panelAPU.Name = "panelAPU"; + panelAPU.Padding = new Padding(11, 5, 11, 0); + panelAPU.Size = new Size(983, 57); + panelAPU.TabIndex = 46; + panelAPU.Visible = false; + panelAPU.Paint += panelAPU_Paint; + // + // comboAPU + // + comboAPU.AccessibleName = "Keyboard Animation Speed"; + comboAPU.Anchor = AnchorStyles.Top | AnchorStyles.Right; + comboAPU.BorderColor = Color.White; + comboAPU.ButtonColor = SystemColors.ControlLight; + comboAPU.FlatStyle = FlatStyle.Flat; + comboAPU.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point); + comboAPU.FormattingEnabled = true; + comboAPU.ItemHeight = 32; + comboAPU.Items.AddRange(new object[] { "Auto", "1G", "2G", "3G", "4G", "5G", "6G", "7G", "8G" }); + comboAPU.Location = new Point(663, 8); + comboAPU.Margin = new Padding(4, 12, 4, 9); + comboAPU.Name = "comboAPU"; + comboAPU.Size = new Size(293, 40); + comboAPU.TabIndex = 12; + comboAPU.TabStop = false; + // + // pictureAPUMem + // + pictureAPUMem.BackgroundImage = Resources.icons8_video_48; + pictureAPUMem.BackgroundImageLayout = ImageLayout.Zoom; + pictureAPUMem.Location = new Point(20, 11); + pictureAPUMem.Name = "pictureAPUMem"; + pictureAPUMem.Size = new Size(32, 32); + pictureAPUMem.TabIndex = 1; + pictureAPUMem.TabStop = false; + // + // labelAPUMem + // + labelAPUMem.AutoSize = true; + labelAPUMem.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + labelAPUMem.Location = new Point(56, 11); + labelAPUMem.Name = "labelAPUMem"; + labelAPUMem.Size = new Size(309, 32); + labelAPUMem.TabIndex = 0; + labelAPUMem.Text = "Memory Assigned to GPU"; // // Extra // @@ -1230,10 +1289,11 @@ namespace GHelper AutoScaleMode = AutoScaleMode.Dpi; AutoSize = true; AutoSizeMode = AutoSizeMode.GrowAndShrink; - ClientSize = new Size(1013, 1467); + ClientSize = new Size(1013, 1515); Controls.Add(panelServices); Controls.Add(panelPower); Controls.Add(panelSettings); + Controls.Add(panelAPU); Controls.Add(panelSettingsHeader); Controls.Add(panelBacklight); Controls.Add(panelBacklightHeader); @@ -1282,6 +1342,9 @@ namespace GHelper panelPower.PerformLayout(); ((System.ComponentModel.ISupportInitialize)numericHibernateAfter).EndInit(); ((System.ComponentModel.ISupportInitialize)pictureHibernate).EndInit(); + panelAPU.ResumeLayout(false); + panelAPU.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureAPUMem).EndInit(); ResumeLayout(false); PerformLayout(); } @@ -1372,5 +1435,9 @@ namespace GHelper private CheckBox checkGPUFix; private ToolTip toolTip; private CheckBox checkBootSound; + private Panel panelAPU; + private PictureBox pictureAPUMem; + private Label labelAPUMem; + private RComboBox comboAPU; } } \ No newline at end of file diff --git a/app/Extra.cs b/app/Extra.cs index 889e3909..2aa56919 100644 --- a/app/Extra.cs +++ b/app/Extra.cs @@ -13,6 +13,7 @@ namespace GHelper { ScreenControl screenControl = new ScreenControl(); + ModeControl modeControl = new ModeControl(); ClamshellModeControl clamshellControl = new ClamshellModeControl(); const string EMPTY = "--------------"; @@ -138,6 +139,8 @@ namespace GHelper checkGpuApps.Text = Properties.Strings.KillGpuApps; labelHibernateAfter.Text = Properties.Strings.HibernateAfter; + labelAPUMem.Text = Properties.Strings.APUMemory; + Text = Properties.Strings.ExtraSettings; if (AppConfig.IsARCNM()) @@ -147,14 +150,14 @@ namespace GHelper labelM2.Visible = comboM2.Visible = textM2.Visible = false; labelM4.Visible = comboM4.Visible = textM4.Visible = false; labelFNF4.Visible = comboFNF4.Visible = textFNF4.Visible = false; - } - + } + if (AppConfig.NoMKeys()) { labelM1.Text = "FN+F2"; labelM2.Text = "FN+F3"; labelM3.Text = "FN+F4"; - labelM4.Visible = comboM4.Visible = textM4.Visible = AppConfig.IsDUO(); + labelM4.Visible = comboM4.Visible = textM4.Visible = AppConfig.IsDUO(); labelFNF4.Visible = comboFNF4.Visible = textFNF4.Visible = false; } @@ -174,6 +177,16 @@ namespace GHelper checkUSBC.Visible = false; } + int apuMem = Program.acpi.GetAPUMem(); + if (apuMem >= 0) + { + panelAPU.Visible = true; + comboAPU.DropDownStyle = ComboBoxStyle.DropDownList; + comboAPU.SelectedIndex = apuMem; + } + + comboAPU.SelectedIndexChanged += ComboAPU_SelectedIndexChanged; + // Change text and hide irrelevant options on the ROG Ally, // which is a bit of a special case piece of hardware. if (AppConfig.IsAlly()) @@ -348,6 +361,19 @@ namespace GHelper InitHibernate(); } + private void ComboAPU_SelectedIndexChanged(object? sender, EventArgs e) + { + int mem = comboAPU.SelectedIndex; + Program.acpi.SetAPUMem(mem); + + DialogResult dialogResult = MessageBox.Show(Properties.Strings.AlertAPUMemoryRestart, Properties.Strings.AlertAPUMemoryRestartTitle, MessageBoxButtons.YesNo); + if (dialogResult == DialogResult.Yes) + { + Process.Start("shutdown", "/r /t 1"); + } + + } + private void CheckBootSound_CheckedChanged(object? sender, EventArgs e) { Program.acpi.DeviceSet(AsusACPI.BootSound, (checkBootSound.Checked ? 1 : 0), "BootSound"); @@ -604,5 +630,10 @@ namespace GHelper } } + + private void panelAPU_Paint(object sender, PaintEventArgs e) + { + + } } } diff --git a/app/Properties/Strings.Designer.cs b/app/Properties/Strings.Designer.cs index 52582931..3b5fce55 100644 --- a/app/Properties/Strings.Designer.cs +++ b/app/Properties/Strings.Designer.cs @@ -78,6 +78,24 @@ namespace GHelper.Properties { } } + /// + /// Looks up a localized string similar to Restart your device to apply changes. + /// + internal static string AlertAPUMemoryRestart { + get { + return ResourceManager.GetString("AlertAPUMemoryRestart", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Restart now?. + /// + internal static string AlertAPUMemoryRestartTitle { + get { + return ResourceManager.GetString("AlertAPUMemoryRestartTitle", resourceCulture); + } + } + /// /// Looks up a localized string similar to Looks like GPU is in heavy use, disable it?. /// @@ -195,6 +213,15 @@ namespace GHelper.Properties { } } + /// + /// Looks up a localized string similar to Memory Assigned to GPU. + /// + internal static string APUMemory { + get { + return ResourceManager.GetString("APUMemory", resourceCulture); + } + } + /// /// Looks up a localized string similar to Asus Services Running. /// diff --git a/app/Properties/Strings.resx b/app/Properties/Strings.resx index 929abd3a..e0a762d2 100644 --- a/app/Properties/Strings.resx +++ b/app/Properties/Strings.resx @@ -123,6 +123,12 @@ Can't connect to ASUS ACPI. Application can't function without it. Try to install Asus System Control Interface + + Restart your device to apply changes + + + Restart now? + Looks like GPU is in heavy use, disable it? @@ -162,6 +168,9 @@ Auto adjust Windows Power Modes + + Memory Assigned to GPU + Asus Services Running