From af9d3eb50e6332fc9ee6f5f6ec53aae60d727c8d Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Sat, 10 Feb 2024 22:53:22 +0100 Subject: [PATCH 01/14] Skip airplane mode command for ancient devices https://github.com/seerge/g-helper/issues/2052 --- app/AppConfig.cs | 5 +++++ app/Input/InputDispatcher.cs | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/AppConfig.cs b/app/AppConfig.cs index bb148661..fe5d9de1 100644 --- a/app/AppConfig.cs +++ b/app/AppConfig.cs @@ -387,6 +387,11 @@ public static class AppConfig return (ContainsModel("G614JV") || ContainsModel("G614JZ") || ContainsModel("G512LI") || ContainsModel("G513R") || ContainsModel("G713PV") || ContainsModel("G513IE") || ContainsModel("G713RC") || ContainsModel("G513QM") || ContainsModel("G531G")) && !Is("per_key_rgb"); } + public static bool IsNoAirplaneMode() + { + return ContainsModel("FX506"); + } + public static bool IsNoDirectRGB() { return ContainsModel("GA503") || ContainsModel("G533Q"); diff --git a/app/Input/InputDispatcher.cs b/app/Input/InputDispatcher.cs index eac35530..e1bb2835 100644 --- a/app/Input/InputDispatcher.cs +++ b/app/Input/InputDispatcher.cs @@ -638,7 +638,7 @@ namespace GHelper.Input KeyProcess("m6"); return; case 136: // FN + F12 - Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Airplane, "Airplane"); + if (!AppConfig.IsNoAirplaneMode()) Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Airplane, "Airplane"); return; case 181: // FN + Numpad Enter KeyProcess("fne"); From 094fce0117b8d5acec78c701979fa8afe313982a Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Sun, 11 Feb 2024 11:46:37 +0100 Subject: [PATCH 02/14] Backlight brightness tweak for G14 2024 --- app/AppConfig.cs | 5 +++++ app/USB/Aura.cs | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/AppConfig.cs b/app/AppConfig.cs index fe5d9de1..eb1577d9 100644 --- a/app/AppConfig.cs +++ b/app/AppConfig.cs @@ -377,6 +377,11 @@ public static class AppConfig return ContainsModel("GA401") || ContainsModel("FX517Z") || ContainsModel("FX516P") || ContainsModel("X13") || IsARCNM() || ContainsModel("GA502IU"); } + public static bool IsInputBacklight() + { + return ContainsModel("GA503") || ContainsModel("GA403"); + } + public static bool IsStrix() { return ContainsModel("Strix") || ContainsModel("Scar") || ContainsModel("G703G"); diff --git a/app/USB/Aura.cs b/app/USB/Aura.cs index 6a63e040..ebc6e53f 100644 --- a/app/USB/Aura.cs +++ b/app/USB/Aura.cs @@ -298,7 +298,7 @@ namespace GHelper.USB if (AppConfig.IsAlly()) ApplyAura(); - if (AppConfig.ContainsModel("GA503")) + if (AppConfig.IsInputBacklight()) AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xBA, 0xC5, 0xC4, (byte)brightness }, log); }); From 2785bc626703ba4dbf96c73d892cee60146e7588 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Sun, 11 Feb 2024 14:03:11 +0100 Subject: [PATCH 03/14] Update README.md --- docs/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/README.md b/docs/README.md index 3ccbc3d0..39d5dfbe 100644 --- a/docs/README.md +++ b/docs/README.md @@ -107,6 +107,7 @@ Huge thanks to [@IceStormNG](https://github.com/IceStormNG) 👑 for contributio ### ⌨️ Keybindings - ``Fn + F5 / Fn + Shift + F5`` - Toggle Performance Modes forwards / backwards +- ``Shift + Fn + F7 / F8`` - Set Anime Matrix / Slash Lightning brightness Down / Up - ``Ctrl + Shift + F5 / Ctrl + Shift + Alt + F5`` - Toggle Performance Modes forwards / backwards - ``Ctrl + Shift + F12`` - Open G-Helper window - ``Ctrl + M1 / M2`` - Screen brightness Down / Up From 060e3b7f7df6268956ac9e90b6528d1090de5770 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Sun, 11 Feb 2024 16:09:51 +0100 Subject: [PATCH 04/14] Updates to RyzenControl to support Hawk Point CPUs --- app/Ryzen/RyzenControl.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/Ryzen/RyzenControl.cs b/app/Ryzen/RyzenControl.cs index 77330f5b..28c9b47d 100644 --- a/app/Ryzen/RyzenControl.cs +++ b/app/Ryzen/RyzenControl.cs @@ -7,7 +7,6 @@ using GHelper.Helpers; using System.Management; using System.Net; -using System.Reflection; namespace Ryzen { @@ -23,7 +22,6 @@ namespace Ryzen public static int MinTemp => AppConfig.Get("min_temp", 75); public const int MaxTemp = 98; - public static string[] FAM = { "RAVEN", "PICASSO", "DALI", "RENOIR/LUCIENNE", "MATISSE", "VANGOGH", "VERMEER", "CEZANNE/BARCELO", "REMBRANDT", "PHOENIX", "RAPHAEL/DRAGON RANGE" }; public static int FAMID { get; protected set; } public static string CPUModel = ""; @@ -42,6 +40,7 @@ namespace Ryzen //PHEONIX - 9 //RAPHAEL/DRAGON RANGE - 10 //MENDOCINO - 11 + //HAWKPOINT - 12 public static void Init() { @@ -108,7 +107,7 @@ namespace Ryzen FAMID = 8; //REMBRANDT } - if (CPUModel.Contains("Model " + Convert.ToString(116))) + if (CPUModel.Contains("Model " + Convert.ToString(116)) || CPUModel.Contains("Model " + Convert.ToString(120))) { FAMID = 9; //PHEONIX } @@ -123,6 +122,11 @@ namespace Ryzen FAMID = 11; //MENDOCINO } + if (CPUModel.Contains("Model " + Convert.ToString(117))) + { + FAMID = 12; //HAWKPOINT + } + Logger.WriteLine($"CPU: {FAMID} - {CPUName} - {CPUModel}"); SetAddresses(); @@ -224,7 +228,7 @@ namespace Ryzen Smu.PSMU_ADDR_RSP = 0x3B10A80; Smu.PSMU_ADDR_ARG = 0x3B10A88; } - else if (FAMID == 5 || FAMID == 8 || FAMID == 9 || FAMID == 11) + else if (FAMID == 5 || FAMID == 8 || FAMID == 9 || FAMID == 11 || FAMID == 12) { Smu.MP1_ADDR_MSG = 0x3B10528; Smu.MP1_ADDR_RSP = 0x3B10578; From 3f8083be50b2d32fcab703047c300141af6d5ce7 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Mon, 12 Feb 2024 18:24:11 +0100 Subject: [PATCH 05/14] Exception handling for case when USB device refuses to open https://github.com/seerge/g-helper/issues/2057 --- app/Input/KeyboardListener.cs | 2 +- app/USB/AsusHid.cs | 30 ++++++++++++++++++------------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/app/Input/KeyboardListener.cs b/app/Input/KeyboardListener.cs index 0b6ce49e..bbcd05e8 100644 --- a/app/Input/KeyboardListener.cs +++ b/app/Input/KeyboardListener.cs @@ -66,7 +66,7 @@ namespace GHelper.Input } catch (Exception ex) { - Logger.WriteLine(ex.ToString()); + Logger.WriteLine($"Listener exited: {ex.Message}"); } } diff --git a/app/USB/AsusHid.cs b/app/USB/AsusHid.cs index 7aac7f6c..19112311 100644 --- a/app/USB/AsusHid.cs +++ b/app/USB/AsusHid.cs @@ -90,18 +90,24 @@ public static class AsusHid if (devices is null) return; foreach (var device in devices) - using (var stream = device.Open()) - foreach (var data in dataList) - try - { - stream.Write(data); - Logger.WriteLine($"{log} {device.ProductID.ToString("X")}: {BitConverter.ToString(data)}"); - } - catch (Exception ex) - { - Logger.WriteLine($"Error writing {log} {device.ProductID.ToString("X")}: {ex.Message} {BitConverter.ToString(data)} "); - } - + try + { + using (var stream = device.Open()) + foreach (var data in dataList) + try + { + stream.Write(data); + Logger.WriteLine($"{log} {device.ProductID.ToString("X")}: {BitConverter.ToString(data)}"); + } + catch (Exception ex) + { + Logger.WriteLine($"Error writing {log} {device.ProductID.ToString("X")}: {ex.Message} {BitConverter.ToString(data)} "); + } + } + catch (Exception ex) + { + Logger.WriteLine($"Error opening {log} {device.ProductID.ToString("X")}: {ex.Message}"); + } } public static void WriteAura(byte[] data) From d2cb6965e0b44ac698c922ba7c710d48f0f13ee2 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Mon, 12 Feb 2024 18:25:51 +0100 Subject: [PATCH 06/14] Make app log longer --- app/Helpers/Logger.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Helpers/Logger.cs b/app/Helpers/Logger.cs index 647e8381..c7ae78d8 100644 --- a/app/Helpers/Logger.cs +++ b/app/Helpers/Logger.cs @@ -30,7 +30,7 @@ public static class Logger try { var file = File.ReadAllLines(logFile); - int skip = Math.Max(0, file.Count() - 1000); + int skip = Math.Max(0, file.Count() - 2000); File.WriteAllLines(logFile, file.Skip(skip).ToArray()); } catch { } From 85725fb7820089712d49ff0ff7fbd899c04f2ef5 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Mon, 12 Feb 2024 18:43:27 +0100 Subject: [PATCH 07/14] Slash lightning (#2058) * Slash Lightning * Slash lightning UI tweaks * Slash Lightning tweaks * Minor tweaks * Slash Interval settings * UI tweaks * Slash tweaks * More slash modes * Cleanup --- app/AnimeMatrix/AniMatrixControl.cs | 162 ++++++++++++------ app/AnimeMatrix/AnimeMatrixDevice.cs | 3 +- .../Platform/WindowsUsbProvider.cs | 8 +- app/AnimeMatrix/SlashDevice.cs | 138 +++++++++++++++ app/AppConfig.cs | 9 +- app/Matrix.cs | 4 +- app/Program.cs | 2 +- app/Settings.Designer.cs | 63 ++++--- app/Settings.cs | 38 +++- app/USB/Aura.cs | 7 +- 10 files changed, 342 insertions(+), 92 deletions(-) create mode 100644 app/AnimeMatrix/SlashDevice.cs diff --git a/app/AnimeMatrix/AniMatrixControl.cs b/app/AnimeMatrix/AniMatrixControl.cs index f433a8bc..b2b7033e 100644 --- a/app/AnimeMatrix/AniMatrixControl.cs +++ b/app/AnimeMatrix/AniMatrixControl.cs @@ -1,6 +1,5 @@ using NAudio.CoreAudioApi; using NAudio.Wave; -using Starlight.AnimeMatrix; using System.Diagnostics; using System.Drawing.Drawing2D; using System.Drawing.Imaging; @@ -15,14 +14,17 @@ namespace GHelper.AnimeMatrix SettingsForm settings; System.Timers.Timer matrixTimer = default!; - public AnimeMatrixDevice? device; + + public AnimeMatrixDevice? deviceMatrix; + public SlashDevice? deviceSlash; double[]? AudioValues; WasapiCapture? AudioDevice; string? AudioDeviceId; private MMDeviceEnumerator? AudioDeviceEnum; - public bool IsValid => device != null; + public bool IsValid => deviceMatrix != null || deviceSlash != null; + public bool IsSlash => deviceSlash != null; private long lastPresent; private List maxes = new List(); @@ -33,38 +35,82 @@ namespace GHelper.AnimeMatrix try { - device = new AnimeMatrixDevice(); - Task.Run(device.WakeUp); + if (AppConfig.IsSlash()) + deviceSlash = new SlashDevice(); + else + deviceMatrix = new AnimeMatrixDevice(); + matrixTimer = new System.Timers.Timer(100); matrixTimer.Elapsed += MatrixTimer_Elapsed; } - catch + catch (Exception ex) { - device = null; + Logger.WriteLine(ex.Message); } } + public void SetDevice(bool wakeUp = false) + { + if (deviceMatrix is not null) SetMatrix(wakeUp); + if (deviceSlash is not null) SetSlash(wakeUp); + } + + + public void SetSlash(bool wakeUp = false) + { + if (deviceSlash is null) return; + + int brightness = AppConfig.Get("matrix_brightness", 0); + int running = AppConfig.Get("matrix_running", 0); + int inteval = AppConfig.Get("matrix_interval", 0); + + bool auto = AppConfig.Is("matrix_auto"); + + Task.Run(() => + { + try + { + deviceSlash.SetProvider(); + } + catch (Exception ex) + { + Logger.WriteLine(ex.Message); + return; + } + + if (wakeUp) deviceSlash.WakeUp(); + + if (brightness == 0 || (auto && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online)) + { + deviceSlash.Init(); + deviceSlash.SetOptions(false, 0, 0); + } + else + { + deviceSlash.Init(); + deviceSlash.SetMode((SlashMode)running); + deviceSlash.SetOptions(true, brightness, inteval); + deviceSlash.Save(); + } + }); + } + + public void SetBatteryAuto() + { + if (deviceSlash is not null) deviceSlash.SetBatterySaver(AppConfig.Is("matrix_auto")); + if (deviceMatrix is not null) SetMatrix(); + } + public void SetMatrix(bool wakeUp = false) { - if (!IsValid) return; - - int brightness = AppConfig.Get("matrix_brightness"); - int running = AppConfig.Get("matrix_running"); + if (deviceMatrix is null) return; + int brightness = AppConfig.Get("matrix_brightness", 0); + int running = AppConfig.Get("matrix_running", 0); bool auto = AppConfig.Is("matrix_auto"); - if (brightness < 0) brightness = 0; - if (running < 0) running = 0; - - BuiltInAnimation animation = new BuiltInAnimation( - (BuiltInAnimation.Running)running, - BuiltInAnimation.Sleeping.Starfield, - BuiltInAnimation.Shutdown.SeeYa, - BuiltInAnimation.Startup.StaticEmergence - ); - StopMatrixTimer(); StopMatrixAudio(); @@ -72,7 +118,7 @@ namespace GHelper.AnimeMatrix { try { - device.SetProvider(); + deviceMatrix.SetProvider(); } catch (Exception ex) { @@ -80,18 +126,18 @@ namespace GHelper.AnimeMatrix return; } - if (wakeUp) device.WakeUp(); + if (wakeUp) deviceMatrix.WakeUp(); if (brightness == 0 || (auto && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online)) { - device.SetDisplayState(false); - device.SetDisplayState(false); // some devices are dumb + deviceMatrix.SetDisplayState(false); + deviceMatrix.SetDisplayState(false); // some devices are dumb Logger.WriteLine("Matrix Off"); } else { - device.SetDisplayState(true); - device.SetBrightness((BrightnessMode)brightness); + deviceMatrix.SetDisplayState(true); + deviceMatrix.SetBrightness((BrightnessMode)brightness); switch (running) { @@ -105,8 +151,7 @@ namespace GHelper.AnimeMatrix SetMatrixAudio(); break; default: - device.SetBuiltInAnimation(true, animation); - Logger.WriteLine("Matrix builtin " + animation.AsByte); + SetBuiltIn(running); break; } @@ -115,6 +160,19 @@ namespace GHelper.AnimeMatrix } + + private void SetBuiltIn(int running) + { + BuiltInAnimation animation = new BuiltInAnimation( + (BuiltInAnimation.Running)running, + BuiltInAnimation.Sleeping.Starfield, + BuiltInAnimation.Shutdown.SeeYa, + BuiltInAnimation.Startup.StaticEmergence + ); + deviceMatrix.SetBuiltInAnimation(true, animation); + Logger.WriteLine("Matrix builtin: " + animation.AsByte); + } + private void StartMatrixTimer(int interval = 100) { matrixTimer.Interval = interval; @@ -129,15 +187,16 @@ namespace GHelper.AnimeMatrix private void MatrixTimer_Elapsed(object? sender, ElapsedEventArgs e) { - //if (!IsValid) return; + + if (deviceMatrix is null) return; switch (AppConfig.Get("matrix_running")) { case 2: - device.PresentNextFrame(); + deviceMatrix.PresentNextFrame(); break; case 3: - device.PresentClock(); + deviceMatrix.PresentClock(); break; } @@ -146,7 +205,7 @@ namespace GHelper.AnimeMatrix public void SetMatrixClock() { - device.SetBuiltInAnimation(false); + deviceMatrix.SetBuiltInAnimation(false); StartMatrixTimer(1000); Logger.WriteLine("Matrix Clock"); } @@ -177,9 +236,9 @@ namespace GHelper.AnimeMatrix void SetMatrixAudio() { - if (!IsValid) return; + if (deviceMatrix is null) return; - device.SetBuiltInAnimation(false); + deviceMatrix.SetBuiltInAnimation(false); StopMatrixTimer(); StopMatrixAudio(); @@ -251,18 +310,20 @@ namespace GHelper.AnimeMatrix for (int x = 0; x < 2 - (y % 2); x++) { //color = (byte)(Math.Min(1,(h - y - 2)*2) * 255); - device.SetLedPlanar(x + dx, dy + y, (byte)(h * 255 / 30)); - device.SetLedPlanar(x + dx, dy - y, 255); + deviceMatrix.SetLedPlanar(x + dx, dy + y, (byte)(h * 255 / 30)); + deviceMatrix.SetLedPlanar(x + dx, dy - y, 255); } } void PresentAudio(double[] audio) { + if (deviceMatrix is null) return; + if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastPresent) < 70) return; lastPresent = DateTimeOffset.Now.ToUnixTimeMilliseconds(); - device.Clear(); + deviceMatrix.Clear(); int size = 20; double[] bars = new double[size]; @@ -280,7 +341,7 @@ namespace GHelper.AnimeMatrix for (int i = 0; i < size; i++) DrawBar(20 - i, bars[i] * 20 / maxAverage); - device.Present(); + deviceMatrix.Present(); } @@ -309,7 +370,7 @@ namespace GHelper.AnimeMatrix AppConfig.Set("matrix_running", 2); SetMatrixPicture(fileName); - settings.SetMatrixRunning(2); + settings.VisualiseMatrixRunning(2); } @@ -318,7 +379,8 @@ namespace GHelper.AnimeMatrix public void SetMatrixPicture(string fileName, bool visualise = true) { - if (!IsValid) return; + if (deviceMatrix is null) return; + StopMatrixTimer(); try @@ -338,7 +400,7 @@ namespace GHelper.AnimeMatrix } fs.Close(); - if (visualise) settings.VisualiseMatrix(fileName); + if (visualise) settings.VisualiseMatrixPicture(fileName); } } catch @@ -351,8 +413,8 @@ namespace GHelper.AnimeMatrix protected void ProcessPicture(Image image) { - device.SetBuiltInAnimation(false); - device.ClearFrames(); + deviceMatrix.SetBuiltInAnimation(false); + deviceMatrix.ClearFrames(); int matrixX = AppConfig.Get("matrix_x", 0); int matrixY = AppConfig.Get("matrix_y", 0); @@ -380,11 +442,11 @@ namespace GHelper.AnimeMatrix image.SelectActiveFrame(dimension, i); if (rotation == MatrixRotation.Planar) - device.GenerateFrame(image, matrixZoom, matrixX, matrixY, matrixQuality, matrixContrast); + deviceMatrix.GenerateFrame(image, matrixZoom, matrixX, matrixY, matrixQuality, matrixContrast); else - device.GenerateFrameDiagonal(image, matrixZoom, matrixX, matrixY, matrixQuality, matrixContrast); + deviceMatrix.GenerateFrameDiagonal(image, matrixZoom, matrixX, matrixY, matrixQuality, matrixContrast); - device.AddFrame(); + deviceMatrix.AddFrame(); } @@ -397,11 +459,11 @@ namespace GHelper.AnimeMatrix else { if (rotation == MatrixRotation.Planar) - device.GenerateFrame(image, matrixZoom, matrixX, matrixY, matrixQuality, matrixContrast); + deviceMatrix.GenerateFrame(image, matrixZoom, matrixX, matrixY, matrixQuality, matrixContrast); else - device.GenerateFrameDiagonal(image, matrixZoom, matrixX, matrixY, matrixQuality, matrixContrast); + deviceMatrix.GenerateFrameDiagonal(image, matrixZoom, matrixX, matrixY, matrixQuality, matrixContrast); - device.Present(); + deviceMatrix.Present(); } } diff --git a/app/AnimeMatrix/AnimeMatrixDevice.cs b/app/AnimeMatrix/AnimeMatrixDevice.cs index 5c35b4d2..5e5c5c47 100644 --- a/app/AnimeMatrix/AnimeMatrixDevice.cs +++ b/app/AnimeMatrix/AnimeMatrixDevice.cs @@ -5,7 +5,7 @@ using System.Drawing.Drawing2D; using System.Drawing.Text; using System.Text; -namespace Starlight.AnimeMatrix +namespace GHelper.AnimeMatrix { public class BuiltInAnimation { @@ -91,7 +91,6 @@ namespace Starlight.AnimeMatrix public int MaxRows = 61; public int MaxColumns = 34; public int LedStart = 0; - public int FullRows = 11; private int frameIndex = 0; diff --git a/app/AnimeMatrix/Communication/Platform/WindowsUsbProvider.cs b/app/AnimeMatrix/Communication/Platform/WindowsUsbProvider.cs index 2db6e1d8..a4d0e0b7 100644 --- a/app/AnimeMatrix/Communication/Platform/WindowsUsbProvider.cs +++ b/app/AnimeMatrix/Communication/Platform/WindowsUsbProvider.cs @@ -36,14 +36,12 @@ namespace GHelper.AnimeMatrix.Communication.Platform { HidDevice = DeviceList.Local .GetHidDevices(vendorId, productId) - .First(x => x.GetMaxFeatureReportLength() == maxFeatureReportLength); - - Logger.WriteLine("Matrix Device: " + HidDevice.DevicePath); - + .First(x => x.GetMaxFeatureReportLength() >= maxFeatureReportLength); + Logger.WriteLine("Matrix Device: " + HidDevice.DevicePath + " " + HidDevice.GetMaxFeatureReportLength()); } catch { - throw new IOException("AniMe Matrix control device was not found on your machine."); + throw new IOException("Matrix control device was not found on your machine."); } var config = new OpenConfiguration(); diff --git a/app/AnimeMatrix/SlashDevice.cs b/app/AnimeMatrix/SlashDevice.cs new file mode 100644 index 00000000..04d6eff5 --- /dev/null +++ b/app/AnimeMatrix/SlashDevice.cs @@ -0,0 +1,138 @@ +using GHelper.AnimeMatrix.Communication; +using System.Text; + +namespace GHelper.AnimeMatrix +{ + public enum SlashMode + { + Bounce, + Slash, + Loading, + BitStream, + Transmission, + Flow, + Flux, + Phantom, + Spectrum, + Hazard, + Interfacing, + Ramp, + GameOver, + Start, + Buzzer + } + + internal class SlashPacket : Packet + { + public SlashPacket(byte[] command) : base(0x5E, 128, command) + { + } + } + + public class SlashDevice : Device + { + + public static Dictionary Modes = new Dictionary + { + { SlashMode.Bounce, "Bounce"}, + { SlashMode.Slash, "Slash"}, + { SlashMode.Loading, "Loading"}, + + { SlashMode.BitStream, "Bit Stream"}, + { SlashMode.Transmission, "Transmission"}, + + { SlashMode.Flow, "Flow"}, + { SlashMode.Flux, "Flux"}, + { SlashMode.Phantom, "Phantom"}, + { SlashMode.Spectrum, "Spectrum"}, + + { SlashMode.Hazard, "Hazard"}, + { SlashMode.Interfacing, "Interfacing"}, + { SlashMode.Ramp, "Ramp"}, + + { SlashMode.GameOver, "Game Over"}, + { SlashMode.Start, "Start"}, + { SlashMode.Buzzer, "Buzzer"}, + }; + + private static Dictionary modeCodes = new Dictionary + { + { SlashMode.Bounce, 0x10}, + { SlashMode.Slash, 0x12}, + { SlashMode.Loading, 0x13}, + + { SlashMode.BitStream, 0x1D}, + { SlashMode.Transmission, 0x1A}, + + { SlashMode.Flow, 0x19}, + { SlashMode.Flux, 0x25}, + { SlashMode.Phantom, 0x24}, + { SlashMode.Spectrum, 0x26}, + + { SlashMode.Hazard, 0x32}, + { SlashMode.Interfacing, 0x33}, + { SlashMode.Ramp, 0x34}, + + { SlashMode.GameOver, 0x42}, + { SlashMode.Start, 0x43}, + { SlashMode.Buzzer, 0x44}, + }; + + public SlashDevice() : base(0x0B05, 0x193B, 128) + { + } + + public void WakeUp() + { + Set(Packet(Encoding.ASCII.GetBytes("ASUS Tech.Inc."))); + } + + public void Init() + { + Set(Packet(0xD7, 0x00, 0x00, 0x01, 0xAC)); + Set(Packet(0xD2, 0x02, 0x01, 0x08, 0xAB)); + } + + public void Save() + { + Set(Packet(0xD4, 0x00, 0x00, 0x01, 0xAB)); + } + + public void SetMode(SlashMode mode) + { + byte modeByte; + + try + { + modeByte = modeCodes[mode]; + } + catch (Exception) + { + modeByte = 0x00; + } + + Set(Packet(0xD2, 0x03, 0x00, 0x0C)); + Set(Packet(0xD3, 0x04, 0x00, 0x0C, 0x01, modeByte, 0x02, 0x19, 0x03, 0x13, 0x04, 0x11, 0x05, 0x12, 0x06, 0x13)); + } + + public void SetOptions(bool status, int brightness = 0, int interval = 0) + { + byte brightnessByte = (byte)(brightness * 85.333); + + Set(Packet(0xD3, 0x03, 0x01, 0x08, 0xAB, 0xFF, 0x01, status ? (byte)0x01 : (byte)0x00, 0x06, brightnessByte, 0xFF, (byte)interval)); + } + + public void SetBatterySaver(bool status) + { + Set(Packet(0xD8, 0x01, 0x00, 0x01, status ? (byte)0x80 : (byte)0x00)); + } + + public void Set(Packet packet) + { + _usbProvider?.Set(packet.Data); + Logger.WriteLine("Slash:" + BitConverter.ToString(packet.Data)); + } + + + } +} \ No newline at end of file diff --git a/app/AppConfig.cs b/app/AppConfig.cs index eb1577d9..fb9d65d1 100644 --- a/app/AppConfig.cs +++ b/app/AppConfig.cs @@ -101,6 +101,8 @@ public static class AppConfig } } + //if (_model.Contains("GA402RK")) _model = "ROG Zephyrus G14 GA403UI"; // Debug Purposes + return _model; } @@ -377,9 +379,14 @@ public static class AppConfig return ContainsModel("GA401") || ContainsModel("FX517Z") || ContainsModel("FX516P") || ContainsModel("X13") || IsARCNM() || ContainsModel("GA502IU"); } + public static bool IsSlash() + { + return ContainsModel("GA403") || ContainsModel("GU605"); + } + public static bool IsInputBacklight() { - return ContainsModel("GA503") || ContainsModel("GA403"); + return ContainsModel("GA503") || IsSlash(); } public static bool IsStrix() diff --git a/app/Matrix.cs b/app/Matrix.cs index c87d61cc..78c2a4a5 100644 --- a/app/Matrix.cs +++ b/app/Matrix.cs @@ -62,8 +62,8 @@ namespace GHelper comboRotation.SelectedValueChanged += ComboRotation_SelectedValueChanged; ; - uiScale = panelPicture.Width / matrixControl.device.MaxColumns / 3; - panelPicture.Height = (int)(matrixControl.device.MaxRows * uiScale); + uiScale = panelPicture.Width / matrixControl.deviceMatrix.MaxColumns / 3; + panelPicture.Height = (int)(matrixControl.deviceMatrix.MaxRows * uiScale); } diff --git a/app/Program.cs b/app/Program.cs index ecf1d2e7..7cd18809 100644 --- a/app/Program.cs +++ b/app/Program.cs @@ -229,7 +229,7 @@ namespace GHelper BatteryControl.AutoBattery(init); - settingsForm.matrixControl.SetMatrix(true); + settingsForm.matrixControl.SetDevice(true); if (AppConfig.IsAlly()) { diff --git a/app/Settings.Designer.cs b/app/Settings.Designer.cs index d0b30d58..73fd98a7 100644 --- a/app/Settings.Designer.cs +++ b/app/Settings.Designer.cs @@ -65,6 +65,7 @@ namespace GHelper panelGPU = new Panel(); labelTipGPU = new Label(); tableAMD = new TableLayoutPanel(); + buttonOverlay = new RButton(); buttonFPS = new RButton(); tableGPU = new TableLayoutPanel(); buttonStopGPU = new RButton(); @@ -118,7 +119,7 @@ namespace GHelper panelAllyTitle = new Panel(); pictureAlly = new PictureBox(); labelAlly = new Label(); - buttonOverlay = new RButton(); + comboInterval = new RComboBox(); panelMatrix.SuspendLayout(); tableLayoutMatrix.SuspendLayout(); panelMatrixTitle.SuspendLayout(); @@ -187,6 +188,7 @@ namespace GHelper tableLayoutMatrix.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F)); tableLayoutMatrix.Controls.Add(comboMatrix, 0, 0); tableLayoutMatrix.Controls.Add(comboMatrixRunning, 1, 0); + tableLayoutMatrix.Controls.Add(comboInterval, 2, 0); tableLayoutMatrix.Controls.Add(buttonMatrix, 2, 0); tableLayoutMatrix.Dock = DockStyle.Top; tableLayoutMatrix.Location = new Point(20, 60); @@ -194,7 +196,8 @@ namespace GHelper tableLayoutMatrix.Name = "tableLayoutMatrix"; tableLayoutMatrix.RowCount = 1; tableLayoutMatrix.RowStyles.Add(new RowStyle(SizeType.Percent, 100F)); - tableLayoutMatrix.Size = new Size(787, 64); + tableLayoutMatrix.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F)); + tableLayoutMatrix.Size = new Size(787, 84); tableLayoutMatrix.TabIndex = 43; // // comboMatrix @@ -707,6 +710,28 @@ namespace GHelper tableAMD.TabIndex = 24; tableAMD.Visible = false; // + // buttonOverlay + // + buttonOverlay.Activated = false; + buttonOverlay.BackColor = SystemColors.ControlLightLight; + buttonOverlay.BorderColor = Color.Transparent; + buttonOverlay.BorderRadius = 5; + buttonOverlay.Dock = DockStyle.Fill; + buttonOverlay.FlatAppearance.BorderSize = 0; + buttonOverlay.FlatStyle = FlatStyle.Flat; + buttonOverlay.ForeColor = SystemColors.ControlText; + buttonOverlay.Image = Properties.Resources.icons8_heartbeat_32; + buttonOverlay.ImageAlign = ContentAlignment.MiddleRight; + buttonOverlay.Location = new Point(266, 4); + buttonOverlay.Margin = new Padding(4); + buttonOverlay.Name = "buttonOverlay"; + buttonOverlay.Secondary = false; + buttonOverlay.Size = new Size(254, 72); + buttonOverlay.TabIndex = 12; + buttonOverlay.Text = "AMD Overlay"; + buttonOverlay.TextImageRelation = TextImageRelation.ImageBeforeText; + buttonOverlay.UseVisualStyleBackColor = false; + // // buttonFPS // buttonFPS.Activated = false; @@ -1586,27 +1611,20 @@ namespace GHelper labelAlly.TabIndex = 26; labelAlly.Text = "Ally Controller"; // - // buttonOverlay + // comboInterval // - buttonOverlay.Activated = false; - buttonOverlay.BackColor = SystemColors.ControlLightLight; - buttonOverlay.BorderColor = Color.Transparent; - buttonOverlay.BorderRadius = 5; - buttonOverlay.Dock = DockStyle.Fill; - buttonOverlay.FlatAppearance.BorderSize = 0; - buttonOverlay.FlatStyle = FlatStyle.Flat; - buttonOverlay.ForeColor = SystemColors.ControlText; - buttonOverlay.Image = Properties.Resources.icons8_heartbeat_32; - buttonOverlay.ImageAlign = ContentAlignment.MiddleRight; - buttonOverlay.Location = new Point(266, 4); - buttonOverlay.Margin = new Padding(4); - buttonOverlay.Name = "buttonOverlay"; - buttonOverlay.Secondary = false; - buttonOverlay.Size = new Size(254, 72); - buttonOverlay.TabIndex = 12; - buttonOverlay.Text = "AMD Overlay"; - buttonOverlay.TextImageRelation = TextImageRelation.ImageBeforeText; - buttonOverlay.UseVisualStyleBackColor = false; + comboInterval.BorderColor = Color.White; + comboInterval.ButtonColor = Color.FromArgb(255, 255, 255); + comboInterval.Dock = DockStyle.Top; + comboInterval.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point); + comboInterval.FormattingEnabled = true; + comboInterval.ItemHeight = 32; + comboInterval.Location = new Point(7, 75); + comboInterval.Margin = new Padding(7, 11, 7, 8); + comboInterval.Name = "comboInterval"; + comboInterval.Size = new Size(248, 40); + comboInterval.TabIndex = 19; + comboInterval.Visible = false; // // SettingsForm // @@ -1784,5 +1802,6 @@ namespace GHelper private RButton buttonFPS; private RButton buttonController; private RButton buttonOverlay; + private RComboBox comboInterval; } } diff --git a/app/Settings.cs b/app/Settings.cs index bbaec21c..b5f122c1 100644 --- a/app/Settings.cs +++ b/app/Settings.cs @@ -173,9 +173,11 @@ namespace GHelper comboMatrix.DropDownStyle = ComboBoxStyle.DropDownList; comboMatrixRunning.DropDownStyle = ComboBoxStyle.DropDownList; + comboInterval.DropDownStyle = ComboBoxStyle.DropDownList; comboMatrix.DropDownClosed += ComboMatrix_SelectedValueChanged; comboMatrixRunning.DropDownClosed += ComboMatrixRunning_SelectedValueChanged; + comboInterval.DropDownClosed += ComboInterval_DropDownClosed; buttonMatrix.Click += ButtonMatrix_Click; @@ -424,7 +426,7 @@ namespace GHelper } } - public void VisualiseMatrix(string image) + public void VisualiseMatrixPicture(string image) { if (matrixForm == null || matrixForm.Text == "") return; matrixForm.VisualiseMatrix(image); @@ -686,7 +688,7 @@ namespace GHelper private void CheckMatrix_CheckedChanged(object? sender, EventArgs e) { AppConfig.Set("matrix_auto", checkMatrix.Checked ? 1 : 0); - matrixControl.SetMatrix(); + matrixControl.SetBatteryAuto(); } @@ -712,7 +714,7 @@ namespace GHelper } - public void SetMatrixRunning(int mode) + public void VisualiseMatrixRunning(int mode) { Invoke(delegate { @@ -721,17 +723,23 @@ namespace GHelper }); } + private void ComboInterval_DropDownClosed(object? sender, EventArgs e) + { + AppConfig.Set("matrix_interval", comboInterval.SelectedIndex); + matrixControl.SetDevice(); + } + private void ComboMatrixRunning_SelectedValueChanged(object? sender, EventArgs e) { AppConfig.Set("matrix_running", comboMatrixRunning.SelectedIndex); - matrixControl.SetMatrix(); + matrixControl.SetDevice(); } private void ComboMatrix_SelectedValueChanged(object? sender, EventArgs e) { AppConfig.Set("matrix_brightness", comboMatrix.SelectedIndex); - matrixControl.SetMatrix(); + matrixControl.SetDevice(); } @@ -896,8 +904,26 @@ namespace GHelper return; } + if (matrixControl.IsSlash) + { + labelMatrix.Text = "Slash Lightning"; + comboMatrixRunning.Items.Clear(); + + foreach (var item in SlashDevice.Modes) + { + comboMatrixRunning.Items.Add(item.Value); + } + + comboInterval.Visible = true; + comboInterval.Items.Add($"Interval Off"); + for (int i = 1; i <= 5; i++) comboInterval.Items.Add($"Interval {i}s"); + + buttonMatrix.Visible = false; + } + comboMatrix.SelectedIndex = Math.Min(AppConfig.Get("matrix_brightness", 0), comboMatrix.Items.Count - 1); comboMatrixRunning.SelectedIndex = Math.Min(AppConfig.Get("matrix_running", 0), comboMatrixRunning.Items.Count - 1); + comboInterval.SelectedIndex = Math.Min(AppConfig.Get("matrix_interval", 0), comboInterval.Items.Count - 1); checkMatrix.Checked = AppConfig.Is("matrix_auto"); checkMatrix.CheckedChanged += CheckMatrix_CheckedChanged; @@ -909,7 +935,7 @@ namespace GHelper { comboMatrix.SelectedIndex = Math.Min(Math.Max(0, comboMatrix.SelectedIndex + delta), comboMatrix.Items.Count - 1); AppConfig.Set("matrix_brightness", comboMatrix.SelectedIndex); - matrixControl.SetMatrix(); + matrixControl.SetDevice(); Program.toast.RunToast(comboMatrix.GetItemText(comboMatrix.SelectedItem), delta > 0 ? ToastIcon.BacklightUp : ToastIcon.BacklightDown); } diff --git a/app/USB/Aura.cs b/app/USB/Aura.cs index ebc6e53f..02e347e8 100644 --- a/app/USB/Aura.cs +++ b/app/USB/Aura.cs @@ -294,12 +294,13 @@ namespace GHelper.USB if (delay) await Task.Delay(TimeSpan.FromSeconds(1)); if (isACPI) Program.acpi.TUFKeyboardBrightness(brightness); - AsusHid.Write(new byte[] { AsusHid.AURA_ID, 0xBA, 0xC5, 0xC4, (byte)brightness }, log); + if (AppConfig.IsInputBacklight()) + AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xBA, 0xC5, 0xC4, (byte)brightness }, log); + else + AsusHid.Write(new byte[] { AsusHid.AURA_ID, 0xBA, 0xC5, 0xC4, (byte)brightness }, log); if (AppConfig.IsAlly()) ApplyAura(); - if (AppConfig.IsInputBacklight()) - AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xBA, 0xC5, 0xC4, (byte)brightness }, log); }); From 8de06ce5ad86747af94338f0d34ec067615517f7 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Tue, 13 Feb 2024 09:26:24 +0100 Subject: [PATCH 08/14] Update README.md --- docs/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index 39d5dfbe..7062ee0b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -107,13 +107,12 @@ Huge thanks to [@IceStormNG](https://github.com/IceStormNG) 👑 for contributio ### ⌨️ Keybindings - ``Fn + F5 / Fn + Shift + F5`` - Toggle Performance Modes forwards / backwards -- ``Shift + Fn + F7 / F8`` - Set Anime Matrix / Slash Lightning brightness Down / Up - ``Ctrl + Shift + F5 / Ctrl + Shift + Alt + F5`` - Toggle Performance Modes forwards / backwards - ``Ctrl + Shift + F12`` - Open G-Helper window - ``Ctrl + M1 / M2`` - Screen brightness Down / Up - ``Shift + M1 / M2`` - Backlight brightness Down / Up - ``Fn + C`` - Fn-Lock -- ``Fn + Shift + F7 / F8`` - Matrix brightness Down / Up +- ``Fn + Shift + F7 / F8`` - Matrix / Slash Lightning brightness Down / Up - ``Fn + Shift + F7 / F8`` - Screenpad brightness Down / Up - ``Ctrl + Shift + F20`` - Mute Microphone - ``Ctrl + Shift + Alt + F14`` - Eco GPU Mode From 5f6afc0c6e043cea0dbb2812ae87752141599550 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Tue, 13 Feb 2024 14:26:33 +0100 Subject: [PATCH 09/14] Hotkeys fix https://github.com/seerge/g-helper/issues/2059 --- app/Input/KeyboardHook.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/app/Input/KeyboardHook.cs b/app/Input/KeyboardHook.cs index da3ac86e..d798c2bb 100644 --- a/app/Input/KeyboardHook.cs +++ b/app/Input/KeyboardHook.cs @@ -24,26 +24,30 @@ public sealed class KeyboardHook : IDisposable public static void KeyPress(Keys key) { keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero); + + Thread.Sleep(1); + + keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero); } public static void KeyKeyPress(Keys key, Keys key2) { keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero); keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero); + + Thread.Sleep(1); + keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero); keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero); } - public static void KeyKeyKeyPress(Keys key, Keys key2, Keys key3, int sleep = 0) + public static void KeyKeyKeyPress(Keys key, Keys key2, Keys key3, int sleep = 1) { keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero); keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero); keybd_event((byte)key3, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero); - if (sleep > 0) - { - Thread.Sleep(sleep); - } + Thread.Sleep(sleep); keybd_event((byte)key3, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero); keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero); From 697b5f0d2f0a19a526d5103a5277f41f5910e915 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Wed, 14 Feb 2024 09:41:50 +0100 Subject: [PATCH 10/14] Camera toggle for old Vivobooks https://github.com/seerge/g-helper/issues/2060 --- app/AsusACPI.cs | 5 +++-- app/GHelper.csproj | 2 +- app/Input/InputDispatcher.cs | 27 ++++++++++++++++++++++++++- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/app/AsusACPI.cs b/app/AsusACPI.cs index 36df33eb..90a27a71 100644 --- a/app/AsusACPI.cs +++ b/app/AsusACPI.cs @@ -46,7 +46,6 @@ public class AsusACPI public const int KB_DUO_PgUpDn = 0x4B; public const int KB_DUO_SecondDisplay = 0x6A; - public const int Touchpad_Toggle = 0x6B; public const int ChargerMode = 0x0012006C; @@ -106,7 +105,7 @@ public class AsusACPI public const int TUF_KB2 = 0x0010005a; public const int TUF_KB_STATE = 0x00100057; - public const int MICMUTE_LED = 0x00040017; + public const int MicMuteLed = 0x00040017; public const int TabletState = 0x00060077; public const int FnLock = 0x00100023; @@ -114,6 +113,8 @@ public class AsusACPI public const int ScreenPadToggle = 0x00050031; public const int ScreenPadBrightness = 0x00050032; + public const int CameraLed = 0x00060079; + public const int BootSound = 0x00130022; public const int Tablet_Notebook = 0; diff --git a/app/GHelper.csproj b/app/GHelper.csproj index a390d6e6..272440aa 100644 --- a/app/GHelper.csproj +++ b/app/GHelper.csproj @@ -15,7 +15,7 @@ AnyCPU False True - 0.153 + 0.154 diff --git a/app/Input/InputDispatcher.cs b/app/Input/InputDispatcher.cs index e1bb2835..8eafcb76 100644 --- a/app/Input/InputDispatcher.cs +++ b/app/Input/InputDispatcher.cs @@ -500,7 +500,7 @@ namespace GHelper.Input case "micmute": bool muteStatus = Audio.ToggleMute(); Program.toast.RunToast(muteStatus ? "Muted" : "Unmuted", muteStatus ? ToastIcon.MicrophoneMute : ToastIcon.Microphone); - if (AppConfig.IsVivobook()) Program.acpi.DeviceSet(AsusACPI.MICMUTE_LED, muteStatus ? 1 : 0, "MicmuteLed"); + if (AppConfig.IsVivobook()) Program.acpi.DeviceSet(AsusACPI.MicMuteLed, muteStatus ? 1 : 0, "MicmuteLed"); break; case "brightness_up": SetBrightness(+10); @@ -628,6 +628,9 @@ namespace GHelper.Input { switch (EventID) { + case 134: // FN + F12 ON OLD DEVICES + KeyProcess("m4"); + return; case 124: // M3 KeyProcess("m3"); return; @@ -706,6 +709,9 @@ namespace GHelper.Input else Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Brightness_Up, "Brightness"); break; + case 133: // Camera Toggle + ToggleCamera(); + break; case 107: // FN+F10 ToggleTouchpadEvent(); break; @@ -784,6 +790,25 @@ namespace GHelper.Input Program.toast.RunToast($"Screen Pad " + (toggle == 1 ? "On" : "Off"), toggle > 0 ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown); } + public static void ToggleCamera() + { + if (!ProcessHelper.IsUserAdministrator()) return; + + int toggle = AppConfig.Is("camera_toggle") ? 0 : 1; + Program.acpi.DeviceSet(AsusACPI.CameraLed, toggle, "Camera"); + + try + { + ProcessHelper.RunCMD("powershell", (toggle == 1 ? "Disable" : "Enable") + "-PnpDevice -InstanceId (Get-PnpDevice -FriendlyName *webcam*).InstanceId -Confirm:$false"); + } + catch (Exception ex) + { + Logger.WriteLine(ex.ToString()); + } + + AppConfig.Set("camera_toggle", toggle); + Program.toast.RunToast($"Camera " + (toggle == 1 ? "Off" : "On")); + } public static void SetScreenpad(int delta) { From e98cd2f5c1dce3915d3994bc836342117237a61e Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Wed, 14 Feb 2024 15:40:00 +0100 Subject: [PATCH 11/14] Camera toggle for Vivobooks https://github.com/seerge/g-helper/issues/2060 --- app/Input/InputDispatcher.cs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/app/Input/InputDispatcher.cs b/app/Input/InputDispatcher.cs index 8eafcb76..eebe9e4d 100644 --- a/app/Input/InputDispatcher.cs +++ b/app/Input/InputDispatcher.cs @@ -794,20 +794,31 @@ namespace GHelper.Input { if (!ProcessHelper.IsUserAdministrator()) return; - int toggle = AppConfig.Is("camera_toggle") ? 0 : 1; - Program.acpi.DeviceSet(AsusACPI.CameraLed, toggle, "Camera"); + string CameraRegistryKeyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\webcam"; + string CameraRegistryValueName = "Value"; try { - ProcessHelper.RunCMD("powershell", (toggle == 1 ? "Disable" : "Enable") + "-PnpDevice -InstanceId (Get-PnpDevice -FriendlyName *webcam*).InstanceId -Confirm:$false"); + var status = (string?)Registry.GetValue(CameraRegistryKeyPath, CameraRegistryValueName, ""); + + if (status == "Allow") status = "Deny"; + else if (status == "Deny") status = "Allow"; + else + { + Logger.WriteLine("Unknown camera status"); + return; + } + + Registry.SetValue(CameraRegistryKeyPath, CameraRegistryValueName, status, RegistryValueKind.String); + Program.acpi.DeviceSet(AsusACPI.CameraLed, (status == "Deny" ? 1 : 0), "Camera"); + Program.toast.RunToast($"Camera " + (status == "Deny" ? "Off" : "On")); + } catch (Exception ex) { Logger.WriteLine(ex.ToString()); } - AppConfig.Set("camera_toggle", toggle); - Program.toast.RunToast($"Camera " + (toggle == 1 ? "Off" : "On")); } public static void SetScreenpad(int delta) From 60c4e083471dde98d00daa719c436950da100e6a Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Thu, 15 Feb 2024 12:30:12 +0100 Subject: [PATCH 12/14] Debug button --- app/AsusACPI.cs | 24 +++++++++++++++++------- app/Extra.Designer.cs | 19 +++++++++++++++++++ app/Extra.cs | 13 +++++++++++++ 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/app/AsusACPI.cs b/app/AsusACPI.cs index 90a27a71..763bcd99 100644 --- a/app/AsusACPI.cs +++ b/app/AsusACPI.cs @@ -665,22 +665,32 @@ public class AsusACPI } } - public void ScanRange() + public string ScanRange() { int value; string appPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\GHelper"; string logFile = appPath + "\\scan.txt"; - for (uint i = 0x00000000; i <= 0x00160000; i++) + using (StreamWriter w = File.AppendText(logFile)) { - value = DeviceGet(i); - if (value >= 0) - using (StreamWriter w = File.AppendText(logFile)) + w.WriteLine($"Scan started {DateTime.Now}"); + for (uint i = 0x00000000; i <= 0x00160000; i += 0x10000) + { + for (uint j = 0x00; j <= 0xFF; j++) { - w.WriteLine(i.ToString("X8") + ": " + value.ToString("X4") + " (" + value + ")"); - w.Close(); + uint id = i + j; + value = DeviceGet(id); + if (value >= 0) + { + w.WriteLine(id.ToString("X8") + ": " + value.ToString("X4") + " (" + value + ")"); + } } + } + w.WriteLine($"---------------------"); + w.Close(); } + return logFile; + } public void TUFKeyboardBrightness(int brightness) diff --git a/app/Extra.Designer.cs b/app/Extra.Designer.cs index e44a646f..70a9d626 100644 --- a/app/Extra.Designer.cs +++ b/app/Extra.Designer.cs @@ -120,6 +120,7 @@ namespace GHelper comboAPU = new RComboBox(); pictureAPUMem = new PictureBox(); labelAPUMem = new Label(); + pictureScan = new PictureBox(); panelServices.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureService).BeginInit(); panelBindingsHeader.SuspendLayout(); @@ -144,6 +145,7 @@ namespace GHelper ((System.ComponentModel.ISupportInitialize)pictureHibernate).BeginInit(); panelAPU.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)pictureAPUMem).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureScan).BeginInit(); SuspendLayout(); // // panelServices @@ -1003,6 +1005,7 @@ namespace GHelper // panelSettingsHeader.AutoSize = true; panelSettingsHeader.BackColor = SystemColors.ControlLight; + panelSettingsHeader.Controls.Add(pictureScan); panelSettingsHeader.Controls.Add(pictureLog); panelSettingsHeader.Controls.Add(pictureSettings); panelSettingsHeader.Controls.Add(labelSettings); @@ -1263,6 +1266,20 @@ namespace GHelper labelAPUMem.TabIndex = 0; labelAPUMem.Text = "Memory Assigned to GPU"; // + // pictureScan + // + pictureScan.Anchor = AnchorStyles.Top | AnchorStyles.Right; + pictureScan.BackgroundImage = Resources.icons8_heartbeat_32; + pictureScan.BackgroundImageLayout = ImageLayout.Zoom; + pictureScan.Cursor = Cursors.Hand; + pictureScan.Location = new Point(891, 11); + pictureScan.Margin = new Padding(4, 3, 4, 3); + pictureScan.Name = "pictureScan"; + pictureScan.Size = new Size(32, 32); + pictureScan.TabIndex = 13; + pictureScan.TabStop = false; + pictureScan.Visible = false; + // // Extra // AutoScaleDimensions = new SizeF(192F, 192F); @@ -1326,6 +1343,7 @@ namespace GHelper panelAPU.ResumeLayout(false); panelAPU.PerformLayout(); ((System.ComponentModel.ISupportInitialize)pictureAPUMem).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureScan).EndInit(); ResumeLayout(false); PerformLayout(); } @@ -1420,5 +1438,6 @@ namespace GHelper private PictureBox pictureAPUMem; private Label labelAPUMem; private RComboBox comboAPU; + private PictureBox pictureScan; } } \ No newline at end of file diff --git a/app/Extra.cs b/app/Extra.cs index eb58f84a..a5fc9bf9 100644 --- a/app/Extra.cs +++ b/app/Extra.cs @@ -386,6 +386,7 @@ namespace GHelper buttonServices.Click += ButtonServices_Click; pictureLog.Click += PictureLog_Click; + pictureScan.Click += PictureScan_Click; checkGPUFix.Visible = Program.acpi.IsNVidiaGPU(); checkGPUFix.Checked = AppConfig.IsGPUFix(); @@ -398,6 +399,18 @@ namespace GHelper InitHibernate(); } + private void PictureScan_Click(object? sender, EventArgs e) + { + string logFile = Program.acpi.ScanRange(); + new Process + { + StartInfo = new ProcessStartInfo(logFile) + { + UseShellExecute = true + } + }.Start(); + } + private void ComboAPU_SelectedIndexChanged(object? sender, EventArgs e) { int mem = comboAPU.SelectedIndex; From ebfb9b38759f3d3428e5700456af8b27501269d2 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Thu, 15 Feb 2024 13:51:56 +0100 Subject: [PATCH 13/14] Aura brightness check --- app/USB/Aura.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/USB/Aura.cs b/app/USB/Aura.cs index 02e347e8..d5faf33f 100644 --- a/app/USB/Aura.cs +++ b/app/USB/Aura.cs @@ -73,6 +73,8 @@ namespace GHelper.USB private static AuraMode mode = AuraMode.AuraStatic; private static AuraSpeed speed = AuraSpeed.Normal; + private static int _brightness = 0; + public static Color Color1 = Color.White; public static Color Color2 = Color.Black; @@ -289,6 +291,8 @@ namespace GHelper.USB public static void ApplyBrightness(int brightness, string log = "Backlight", bool delay = false) { + _brightness = brightness; + Task.Run(async () => { if (delay) await Task.Delay(TimeSpan.FromSeconds(1)); @@ -494,6 +498,8 @@ namespace GHelper.USB public static void ApplyDirect(Color[] color, bool init = false) { + if (_brightness <= 0) return; + const byte keySet = 167; const byte ledCount = 178; const ushort mapSize = 3 * ledCount; @@ -574,6 +580,8 @@ namespace GHelper.USB public static void ApplyDirect(Color color, bool init = false) { + if (_brightness <= 0) return; + if (isACPI) { Program.acpi.TUFKeyboardRGB(0, color, 0, null); @@ -721,6 +729,8 @@ namespace GHelper.USB public static void ApplyAmbient(bool init = false) { + if (_brightness <= 0) return; + var bound = Screen.GetBounds(Point.Empty); bound.Y += bound.Height / 3; bound.Height -= (int)Math.Round(bound.Height * (0.33f + 0.022f)); // cut 1/3 of the top screen + windows panel From 42a598f177d44e1d3723e097701ec9dbc5ee7101 Mon Sep 17 00:00:00 2001 From: Serge <5920850+seerge@users.noreply.github.com> Date: Thu, 15 Feb 2024 14:22:11 +0100 Subject: [PATCH 14/14] Aura tweaks --- app/USB/Aura.cs | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/app/USB/Aura.cs b/app/USB/Aura.cs index d5faf33f..c1ae8971 100644 --- a/app/USB/Aura.cs +++ b/app/USB/Aura.cs @@ -73,7 +73,8 @@ namespace GHelper.USB private static AuraMode mode = AuraMode.AuraStatic; private static AuraSpeed speed = AuraSpeed.Normal; - private static int _brightness = 0; + private static bool backlight = false; + private static bool initDirect = false; public static Color Color1 = Color.White; public static Color Color2 = Color.Black; @@ -291,7 +292,7 @@ namespace GHelper.USB public static void ApplyBrightness(int brightness, string log = "Backlight", bool delay = false) { - _brightness = brightness; + if (brightness == 0) backlight = false; Task.Run(async () => { @@ -305,6 +306,13 @@ namespace GHelper.USB if (AppConfig.IsAlly()) ApplyAura(); + if (brightness > 0) + { + if (!backlight) initDirect = true; + backlight = true; + + } + }); @@ -498,7 +506,7 @@ namespace GHelper.USB public static void ApplyDirect(Color[] color, bool init = false) { - if (_brightness <= 0) return; + if (!backlight) return; const byte keySet = 167; const byte ledCount = 178; @@ -517,9 +525,9 @@ namespace GHelper.USB buffer[6] = 0; buffer[7] = 0x10; - if (init) + if (init || initDirect) { - Init(); + initDirect = false; AsusHid.WriteAura(new byte[] { AsusHid.AURA_ID, 0xBC }); } @@ -580,7 +588,7 @@ namespace GHelper.USB public static void ApplyDirect(Color color, bool init = false) { - if (_brightness <= 0) return; + if (!backlight) return; if (isACPI) { @@ -600,9 +608,9 @@ namespace GHelper.USB return; } - if (init) + if (init || initDirect) { - //Init(); + initDirect = false; AsusHid.WriteAura(new byte[] { AsusHid.AURA_ID, 0xbc, 1 }); } @@ -729,7 +737,7 @@ namespace GHelper.USB public static void ApplyAmbient(bool init = false) { - if (_brightness <= 0) return; + if (!backlight) return; var bound = Screen.GetBounds(Point.Empty); bound.Y += bound.Height / 3;