diff --git a/app/AppConfig.cs b/app/AppConfig.cs index 1b420609..0b8305a3 100644 --- a/app/AppConfig.cs +++ b/app/AppConfig.cs @@ -539,7 +539,7 @@ public static class AppConfig public static bool IsAMDLight() { - return ContainsModel("GA402X") || ContainsModel("GU605") || ContainsModel("GA403") || ContainsModel("FA507N") || ContainsModel("FA507X") || ContainsModel("FA707N") || ContainsModel("FA707X"); + return ContainsModel("GA402X") || ContainsModel("GA403") || ContainsModel("FA507N") || ContainsModel("FA507X") || ContainsModel("FA707N") || ContainsModel("FA707X"); } public static bool IsPowerRequired() diff --git a/app/Display/ScreenControl.cs b/app/Display/ScreenControl.cs index 11fdc9d1..2149a5ac 100644 --- a/app/Display/ScreenControl.cs +++ b/app/Display/ScreenControl.cs @@ -1,182 +1,15 @@ using GHelper.Helpers; -using GHelper.Mode; -using GHelper.USB; using System.Management; namespace GHelper.Display { - public enum SplendidGamut : int - { - Native = 50, - sRGB = 51, - DCIP3 = 53, - DisplayP3 = 54 - } - - public enum SplendidCommand: int - { - Init = 10, - DimmingAsus = 9, - DimmingVisual = 19, - GamutMode = 200, - - Default = 11, - Racing = 21, - Scenery = 22, - RTS = 23, - FPS = 24, - Cinema = 25, - Vivid = 13, - Eyecare = 17, - } - - public static class ScreenControl + public class ScreenControl { public const int MAX_REFRESH = 1000; - public static DisplayGammaRamp? gammaRamp; - private static int _brightness = 100; - private static bool _init = true; - private static string? _splendidPath = null; - - private static System.Timers.Timer brightnessTimer = new System.Timers.Timer(100); - - - static ScreenControl () { - brightnessTimer.Elapsed += BrightnessTimerTimer_Elapsed; - } - - - public static Dictionary GetGamutModes () - { - Dictionary _modes = new Dictionary(); - - if (!Directory.Exists("C:\\ProgramData\\ASUS\\GameVisual")) return _modes; - - try - { - DirectoryInfo d = new DirectoryInfo("C:\\ProgramData\\ASUS\\GameVisual"); - FileInfo[] icms = d.GetFiles("*.icm"); - if (icms.Length == 0) return _modes; - - _modes.Add(SplendidGamut.Native, "Gamut - Native"); - foreach (FileInfo icm in icms) - { - if (icm.Name.Contains("sRGB")) _modes.Add(SplendidGamut.sRGB, "Gamut - sRGB"); - if (icm.Name.Contains("DCIP3")) _modes.Add(SplendidGamut.DCIP3, "Gamut - DCIP3"); - if (icm.Name.Contains("DisplayP3")) _modes.Add(SplendidGamut.DisplayP3, "Gamut - DisplayP3"); - } - return _modes; - } - catch { - return _modes; - } - - } - - public static Dictionary GetVisualModes() - { - return new Dictionary - { - { SplendidCommand.Default, "Default"}, - { SplendidCommand.Racing, "Racing"}, - { SplendidCommand.Scenery, "Scenery"}, - { SplendidCommand.RTS, "RTS/RPG"}, - { SplendidCommand.FPS, "FPS"}, - { SplendidCommand.Cinema, "Cinema"}, - { SplendidCommand.Vivid, "Vivid" }, - { SplendidCommand.Eyecare, "Eyecare"} - }; - } - - public static void SetGamut(int mode = 50) - { - if (RunSplendid(SplendidCommand.GamutMode, 0, mode)) return; - - if (_init) - { - _init = false; - RunSplendid(SplendidCommand.Init); - RunSplendid(SplendidCommand.GamutMode, 0, mode); - } - } - - public static void SetVisual(SplendidCommand mode = SplendidCommand.Default, int whiteBalance = 50) - { - int balance = mode == SplendidCommand.Eyecare ? 2 : whiteBalance; - RunSplendid(mode, 0, balance); - - if (_init) - { - _init = false; - RunSplendid(SplendidCommand.Init); - RunSplendid(mode, 0, balance); - } - } - - private static string GetSplendidPath() - { - if (_splendidPath == null) - { - try - { - using (var searcher = new ManagementObjectSearcher(@"Select * from Win32_SystemDriver WHERE Name='ATKWMIACPIIO'")) - { - foreach (var driver in searcher.Get()) - { - string path = driver["PathName"].ToString(); - _splendidPath = Path.GetDirectoryName(path) + "\\AsusSplendid.exe"; - break; - } - } - } - catch (Exception ex) - { - Logger.WriteLine(ex.Message); - } - } - - return _splendidPath; - } - - private static bool RunSplendid(SplendidCommand command, int? param1 = null, int? param2 = null) - { - var splendid = GetSplendidPath(); - bool isGameVisual = Directory.Exists("C:\\ProgramData\\ASUS\\GameVisual"); - bool isSplenddid = File.Exists(splendid); - - if (isSplenddid) - { - if (command == SplendidCommand.DimmingVisual && !isGameVisual) command = SplendidCommand.DimmingAsus; - var result = ProcessHelper.RunCMD(splendid, (int)command + " " + param1 + " " + param2); - if (result.Contains("file not exist") || (result.Length == 0 && isGameVisual)) return false; - } - - return true; - } - - private static void BrightnessTimerTimer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e) - { - brightnessTimer.Stop(); - - - if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6))) return; - - if (_init) - { - _init = false; - RunSplendid(SplendidCommand.Init); - RunSplendid(SplendidCommand.Init, 4); - if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6))) return; - } - - // GammaRamp Fallback - SetGamma(_brightness); - } - - public static void AutoScreen(bool force = false) + public void AutoScreen(bool force = false) { if (force || AppConfig.Is("screen_auto")) { @@ -191,67 +24,8 @@ namespace GHelper.Display } } - public static int SetBrightness(int brightness = -1, int delta = 0) - { - if (!AppConfig.IsOLED()) return -1; - if (brightness < 0) brightness = AppConfig.Get("brightness", 100); - - _brightness = Math.Max(0, Math.Min(100, brightness + delta)); - AppConfig.Set("brightness", _brightness); - - brightnessTimer.Start(); - - Program.settingsForm.VisualiseBrightness(); - - return _brightness; - } - - - - public static void SetGamma(int brightness = 100) - { - var bright = Math.Round((float)brightness / 200 + 0.5, 2); - - var screenName = ScreenNative.FindLaptopScreen(); - if (screenName is null) return; - - try - { - var handle = ScreenNative.CreateDC(screenName, screenName, null, IntPtr.Zero); - if (gammaRamp is null) - { - var gammaDump = new GammaRamp(); - if (ScreenNative.GetDeviceGammaRamp(handle, ref gammaDump)) - { - gammaRamp = new DisplayGammaRamp(gammaDump); - //Logger.WriteLine("Gamma R: " + string.Join("-", gammaRamp.Red)); - //Logger.WriteLine("Gamma G: " + string.Join("-", gammaRamp.Green)); - //Logger.WriteLine("Gamma B: " + string.Join("-", gammaRamp.Blue)); - } - } - - if (gammaRamp is null || !gammaRamp.IsOriginal()) - { - Logger.WriteLine("Not default Gamma"); - gammaRamp = new DisplayGammaRamp(); - } - - var ramp = gammaRamp.AsBrightnessRamp(bright); - bool result = ScreenNative.SetDeviceGammaRamp(handle, ref ramp); - - Logger.WriteLine("Gamma " + bright.ToString() + ": " + result); - - } - catch (Exception ex) - { - Logger.WriteLine(ex.ToString()); - } - - //ScreenBrightness.Set(60 + (int)(40 * bright)); - } - - public static void SetScreen(int frequency = -1, int overdrive = -1, int miniled = -1) + public void SetScreen(int frequency = -1, int overdrive = -1, int miniled = -1) { var laptopScreen = ScreenNative.FindLaptopScreen(true); @@ -288,7 +62,7 @@ namespace GHelper.Display } - public static int ToogleMiniled() + public int ToogleMiniled() { int miniled1 = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled1); int miniled2 = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled2); @@ -316,7 +90,7 @@ namespace GHelper.Display return miniled; } - public static void InitScreen() + public void InitScreen() { var laptopScreen = ScreenNative.FindLaptopScreen(); diff --git a/app/Display/VisualControl.cs b/app/Display/VisualControl.cs new file mode 100644 index 00000000..804f8ef5 --- /dev/null +++ b/app/Display/VisualControl.cs @@ -0,0 +1,245 @@ +using GHelper.Helpers; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Management; +using System.Text; +using System.Threading.Tasks; + +namespace GHelper.Display +{ + public enum SplendidGamut : int + { + Native = 50, + sRGB = 51, + DCIP3 = 53, + DisplayP3 = 54 + } + + public enum SplendidCommand : int + { + Init = 10, + DimmingAsus = 9, + DimmingVisual = 19, + GamutMode = 200, + + Default = 11, + Racing = 21, + Scenery = 22, + RTS = 23, + FPS = 24, + Cinema = 25, + Vivid = 13, + Eyecare = 17, + } + public static class VisualControl + { + public static DisplayGammaRamp? gammaRamp; + + private static int _brightness = 100; + private static bool _init = true; + private static string? _splendidPath = null; + + private static System.Timers.Timer brightnessTimer = new System.Timers.Timer(100); + + + static VisualControl () + { + brightnessTimer.Elapsed += BrightnessTimerTimer_Elapsed; + } + + private static string GetGameVisualPath() + { + return "C:\\ProgramData\\ASUS\\GameVisual"; + } + + public static Dictionary GetGamutModes() + { + Dictionary _modes = new Dictionary(); + + if (!Directory.Exists(GetGameVisualPath())) return _modes; + + try + { + DirectoryInfo d = new DirectoryInfo(GetGameVisualPath()); + FileInfo[] icms = d.GetFiles("*.icm"); + if (icms.Length == 0) return _modes; + + _modes.Add(SplendidGamut.Native, "Gamut: Native"); + foreach (FileInfo icm in icms) + { + if (icm.Name.Contains("sRGB")) _modes.Add(SplendidGamut.sRGB, "Gamut: sRGB"); + if (icm.Name.Contains("DCIP3")) _modes.Add(SplendidGamut.DCIP3, "Gamut: DCIP3"); + if (icm.Name.Contains("DisplayP3")) _modes.Add(SplendidGamut.DisplayP3, "Gamut: DisplayP3"); + } + return _modes; + } + catch + { + return _modes; + } + + } + + public static Dictionary GetVisualModes() + { + return new Dictionary + { + { SplendidCommand.Default, "Default"}, + { SplendidCommand.Racing, "Racing"}, + { SplendidCommand.Scenery, "Scenery"}, + { SplendidCommand.RTS, "RTS/RPG"}, + { SplendidCommand.FPS, "FPS"}, + { SplendidCommand.Cinema, "Cinema"}, + { SplendidCommand.Vivid, "Vivid" }, + { SplendidCommand.Eyecare, "Eyecare"} + }; + } + + public static void SetGamut(int mode = 50) + { + if (RunSplendid(SplendidCommand.GamutMode, 0, mode)) return; + + if (_init) + { + _init = false; + RunSplendid(SplendidCommand.Init); + RunSplendid(SplendidCommand.GamutMode, 0, mode); + } + } + + public static void SetVisual(SplendidCommand mode = SplendidCommand.Default, int whiteBalance = 50) + { + int balance = mode == SplendidCommand.Eyecare ? 2 : whiteBalance; + if (RunSplendid(mode, 0, balance)) return; + + if (_init) + { + _init = false; + RunSplendid(SplendidCommand.Init); + RunSplendid(mode, 0, balance); + } + } + + private static string GetSplendidPath() + { + if (_splendidPath == null) + { + try + { + using (var searcher = new ManagementObjectSearcher(@"Select * from Win32_SystemDriver WHERE Name='ATKWMIACPIIO'")) + { + foreach (var driver in searcher.Get()) + { + string path = driver["PathName"].ToString(); + _splendidPath = Path.GetDirectoryName(path) + "\\AsusSplendid.exe"; + break; + } + } + } + catch (Exception ex) + { + Logger.WriteLine(ex.Message); + } + } + + return _splendidPath; + } + + private static bool RunSplendid(SplendidCommand command, int? param1 = null, int? param2 = null) + { + var splendid = GetSplendidPath(); + bool isGameVisual = Directory.Exists(GetGameVisualPath()); + bool isSplenddid = File.Exists(splendid); + + if (isSplenddid) + { + if (command == SplendidCommand.DimmingVisual && !isGameVisual) command = SplendidCommand.DimmingAsus; + var result = ProcessHelper.RunCMD(splendid, (int)command + " " + param1 + " " + param2); + if (result.Contains("file not exist") || (result.Length == 0 && isGameVisual)) return false; + } + + return true; + } + + private static void BrightnessTimerTimer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e) + { + brightnessTimer.Stop(); + + + if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6))) return; + + if (_init) + { + _init = false; + RunSplendid(SplendidCommand.Init); + RunSplendid(SplendidCommand.Init, 4); + if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6))) return; + } + + // GammaRamp Fallback + SetGamma(_brightness); + } + + public static int SetBrightness(int brightness = -1, int delta = 0) + { + if (!AppConfig.IsOLED()) return -1; + + if (brightness < 0) brightness = AppConfig.Get("brightness", 100); + + _brightness = Math.Max(0, Math.Min(100, brightness + delta)); + AppConfig.Set("brightness", _brightness); + + brightnessTimer.Start(); + + Program.settingsForm.VisualiseBrightness(); + + return _brightness; + } + + + + public static void SetGamma(int brightness = 100) + { + var bright = Math.Round((float)brightness / 200 + 0.5, 2); + + var screenName = ScreenNative.FindLaptopScreen(); + if (screenName is null) return; + + try + { + var handle = ScreenNative.CreateDC(screenName, screenName, null, IntPtr.Zero); + if (gammaRamp is null) + { + var gammaDump = new GammaRamp(); + if (ScreenNative.GetDeviceGammaRamp(handle, ref gammaDump)) + { + gammaRamp = new DisplayGammaRamp(gammaDump); + //Logger.WriteLine("Gamma R: " + string.Join("-", gammaRamp.Red)); + //Logger.WriteLine("Gamma G: " + string.Join("-", gammaRamp.Green)); + //Logger.WriteLine("Gamma B: " + string.Join("-", gammaRamp.Blue)); + } + } + + if (gammaRamp is null || !gammaRamp.IsOriginal()) + { + Logger.WriteLine("Not default Gamma"); + gammaRamp = new DisplayGammaRamp(); + } + + var ramp = gammaRamp.AsBrightnessRamp(bright); + bool result = ScreenNative.SetDeviceGammaRamp(handle, ref ramp); + + Logger.WriteLine("Gamma " + bright.ToString() + ": " + result); + + } + catch (Exception ex) + { + Logger.WriteLine(ex.ToString()); + } + + //ScreenBrightness.Set(60 + (int)(40 * bright)); + } + + } +} diff --git a/app/Extra.cs b/app/Extra.cs index d39cffa3..155774a7 100644 --- a/app/Extra.cs +++ b/app/Extra.cs @@ -12,6 +12,7 @@ namespace GHelper public partial class Extra : RForm { + ScreenControl screenControl = new ScreenControl(); ClamshellModeControl clamshellControl = new ClamshellModeControl(); const string EMPTY = "--------------"; @@ -683,7 +684,7 @@ namespace GHelper private void CheckNoOverdrive_CheckedChanged(object? sender, EventArgs e) { AppConfig.Set("no_overdrive", (checkNoOverdrive.Checked ? 1 : 0)); - ScreenControl.AutoScreen(true); + screenControl.AutoScreen(true); } diff --git a/app/Gpu/GPUModeControl.cs b/app/Gpu/GPUModeControl.cs index 790403c9..43101e0e 100644 --- a/app/Gpu/GPUModeControl.cs +++ b/app/Gpu/GPUModeControl.cs @@ -9,6 +9,7 @@ namespace GHelper.Gpu public class GPUModeControl { SettingsForm settings; + ScreenControl screenControl = new ScreenControl(); public static int gpuMode; public static bool? gpuExists = null; @@ -158,7 +159,7 @@ namespace GHelper.Gpu settings.Invoke(delegate { InitGPUMode(); - ScreenControl.AutoScreen(); + screenControl.AutoScreen(); }); if (eco == 0) diff --git a/app/Helpers/ClamshellModeControl.cs b/app/Helpers/ClamshellModeControl.cs index da8ada02..16b7492e 100644 --- a/app/Helpers/ClamshellModeControl.cs +++ b/app/Helpers/ClamshellModeControl.cs @@ -99,7 +99,7 @@ namespace GHelper.Helpers ToggleLidAction(); if (Program.settingsForm.Visible) - ScreenControl.InitScreen(); + Program.screenControl.InitScreen(); } diff --git a/app/Input/InputDispatcher.cs b/app/Input/InputDispatcher.cs index 2d999597..b3746d2c 100644 --- a/app/Input/InputDispatcher.cs +++ b/app/Input/InputDispatcher.cs @@ -19,7 +19,8 @@ namespace GHelper.Input public static Keys keyApp = Keys.F12; static ModeControl modeControl = Program.modeControl; - + static ScreenControl screenControl = new ScreenControl(); + static bool isTUF = AppConfig.IsTUF(); KeyboardListener listener; @@ -245,7 +246,7 @@ namespace GHelper.Input static void SetBrightnessDimming(int delta) { - int brightness = ScreenControl.SetBrightness(delta: delta); + int brightness = VisualControl.SetBrightness(delta: delta); if (brightness >= 0) Program.toast.RunToast(brightness + "%", (delta < 0) ? ToastIcon.BrightnessDown : ToastIcon.BrightnessUp); } @@ -478,7 +479,7 @@ namespace GHelper.Input break; case "miniled": if (ScreenCCD.GetHDRStatus()) return; - int miniled = ScreenControl.ToogleMiniled(); + int miniled = screenControl.ToogleMiniled(); Program.toast.RunToast(miniled == 1 ? "Multi-Zone" : "Single-Zone", miniled == 1 ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown); break; case "aura": diff --git a/app/Program.cs b/app/Program.cs index d60f0a26..a19421cb 100644 --- a/app/Program.cs +++ b/app/Program.cs @@ -32,6 +32,7 @@ namespace GHelper public static ModeControl modeControl = new ModeControl(); public static GPUModeControl gpuControl = new GPUModeControl(settingsForm); public static AllyControl allyControl = new AllyControl(settingsForm); + public static ScreenControl screenControl = new ScreenControl(); public static ClamshellModeControl clamshellControl = new ClamshellModeControl(); public static ToastForm toast = new ToastForm(); @@ -165,7 +166,7 @@ namespace GHelper if (e.Reason == SessionSwitchReason.SessionLogon || e.Reason == SessionSwitchReason.SessionUnlock) { Logger.WriteLine("Session:" + e.Reason.ToString()); - ScreenControl.AutoScreen(); + screenControl.AutoScreen(); } } @@ -223,7 +224,7 @@ namespace GHelper if (!switched) { gpuControl.InitGPUMode(); - ScreenControl.AutoScreen(); + screenControl.AutoScreen(); } BatteryControl.AutoBattery(init); diff --git a/app/Settings.cs b/app/Settings.cs index be1c523e..db12b283 100644 --- a/app/Settings.cs +++ b/app/Settings.cs @@ -24,6 +24,7 @@ namespace GHelper public GPUModeControl gpuControl; public AllyControl allyControl; + ScreenControl screenControl = new ScreenControl(); AutoUpdateControl updateControl; AsusMouseSettings? mouseSettings; @@ -275,7 +276,7 @@ namespace GHelper sliderGamma.ValueChanged += SliderGamma_ValueChanged; } - var gamuts = ScreenControl.GetGamutModes(); + var gamuts = VisualControl.GetGamutModes(); if (gamuts.Count < 1) return; if (!dimming) labelGammaTitle.Text = "Visual Mode"; @@ -285,7 +286,7 @@ namespace GHelper tableVisual.Visible = true; comboVisual.DropDownStyle = ComboBoxStyle.DropDownList; - comboVisual.DataSource = new BindingSource(ScreenControl.GetVisualModes(), null); + comboVisual.DataSource = new BindingSource(VisualControl.GetVisualModes(), null); comboVisual.DisplayMember = "Value"; comboVisual.ValueMember = "Key"; comboVisual.SelectedValue = (SplendidCommand)AppConfig.Get("visual", (int)SplendidCommand.Default); @@ -309,13 +310,13 @@ namespace GHelper private void ComboGamut_SelectedValueChanged(object? sender, EventArgs e) { AppConfig.Set("gamut", (int)comboGamut.SelectedValue); - ScreenControl.SetGamut((int)comboGamut.SelectedValue); + VisualControl.SetGamut((int)comboGamut.SelectedValue); } private void ComboVisual_SelectedValueChanged(object? sender, EventArgs e) { AppConfig.Set("visual", (int)comboVisual.SelectedValue); - ScreenControl.SetVisual((SplendidCommand)comboVisual.SelectedValue); + VisualControl.SetVisual((SplendidCommand)comboVisual.SelectedValue); } public void VisualiseBrightness() @@ -332,7 +333,7 @@ namespace GHelper private void SliderGamma_ValueChanged(object? sender, EventArgs e) { if (sliderGammaIgnore) return; - ScreenControl.SetBrightness(sliderGamma.Value); + VisualControl.SetBrightness(sliderGamma.Value); } private void ButtonOverlay_Click(object? sender, EventArgs e) @@ -474,7 +475,7 @@ namespace GHelper sensorTimer.Enabled = this.Visible; if (this.Visible) { - ScreenControl.InitScreen(); + screenControl.InitScreen(); VisualizeXGM(); Task.Run((Action)RefreshPeripheralsBattery); @@ -753,7 +754,7 @@ namespace GHelper private void ButtonScreenAuto_Click(object? sender, EventArgs e) { AppConfig.Set("screen_auto", 1); - ScreenControl.AutoScreen(); + screenControl.AutoScreen(); } @@ -1053,19 +1054,19 @@ namespace GHelper private void Button120Hz_Click(object? sender, EventArgs e) { AppConfig.Set("screen_auto", 0); - ScreenControl.SetScreen(ScreenControl.MAX_REFRESH, 1); + screenControl.SetScreen(ScreenControl.MAX_REFRESH, 1); } private void Button60Hz_Click(object? sender, EventArgs e) { AppConfig.Set("screen_auto", 0); - ScreenControl.SetScreen(60, 0); + screenControl.SetScreen(60, 0); } private void ButtonMiniled_Click(object? sender, EventArgs e) { - ScreenControl.ToogleMiniled(); + screenControl.ToogleMiniled(); }