mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a8fd049090 | ||
|
|
9817769d62 | ||
|
|
39f919213f | ||
|
|
709f2b89ca | ||
|
|
950d082fc3 | ||
|
|
ceaa8c4110 | ||
|
|
fefbe94a8c | ||
|
|
c96a7749be | ||
|
|
bc9917b69a | ||
|
|
f5964b60c7 | ||
|
|
b3133ede7a | ||
|
|
c245a929f3 | ||
|
|
4c4e6c8291 | ||
|
|
887e769bc6 | ||
|
|
5858a9d45b | ||
|
|
69f6be8941 | ||
|
|
258bf3048a |
@@ -40,9 +40,16 @@ namespace GHelper.AnimeMatrix
|
||||
try
|
||||
{
|
||||
if (AppConfig.IsSlash())
|
||||
deviceSlash = new SlashDevice();
|
||||
{
|
||||
if (AppConfig.IsSlashAura())
|
||||
deviceSlash = new SlashDeviceAura();
|
||||
else
|
||||
deviceSlash = new SlashDevice();
|
||||
}
|
||||
else
|
||||
{
|
||||
deviceMatrix = new AnimeMatrixDevice();
|
||||
}
|
||||
|
||||
matrixTimer = new System.Timers.Timer(100);
|
||||
matrixTimer.Elapsed += MatrixTimer_Elapsed;
|
||||
@@ -103,7 +110,7 @@ namespace GHelper.AnimeMatrix
|
||||
|
||||
deviceSlash.SetEnabled(true);
|
||||
deviceSlash.Init();
|
||||
|
||||
|
||||
switch ((SlashMode)running)
|
||||
{
|
||||
case SlashMode.Static:
|
||||
@@ -111,7 +118,8 @@ namespace GHelper.AnimeMatrix
|
||||
if (custom is not null && custom.Length > 0)
|
||||
{
|
||||
deviceSlash.SetCustom(AppConfig.StringToBytes(custom));
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
deviceSlash.SetStatic(brightness);
|
||||
}
|
||||
@@ -137,7 +145,7 @@ namespace GHelper.AnimeMatrix
|
||||
public void SetLidMode(bool force = false)
|
||||
{
|
||||
bool matrixLid = AppConfig.Is("matrix_lid");
|
||||
|
||||
|
||||
if (deviceSlash is not null)
|
||||
{
|
||||
deviceSlash.SetLidMode(true);
|
||||
@@ -268,8 +276,8 @@ namespace GHelper.AnimeMatrix
|
||||
StartMatrixTimer(1000);
|
||||
Logger.WriteLine("Matrix Clock");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void SlashTimer_start(int interval = 60000)
|
||||
{
|
||||
// 100% to 0% in 1hr = 1% every 36 seconds
|
||||
@@ -279,18 +287,18 @@ namespace GHelper.AnimeMatrix
|
||||
|
||||
// create the timer if first call
|
||||
// this way, the timer only spawns if user tries to use battery pattern
|
||||
if(slashTimer == default(System.Timers.Timer))
|
||||
if (slashTimer == default(System.Timers.Timer))
|
||||
{
|
||||
slashTimer = new System.Timers.Timer(interval);
|
||||
slashTimer.Elapsed += SlashTimer_elapsed;
|
||||
slashTimer.AutoReset = true;
|
||||
}
|
||||
// only write if interval changed
|
||||
if(slashTimer.Interval != interval)
|
||||
if (slashTimer.Interval != interval)
|
||||
{
|
||||
slashTimer.Interval = interval;
|
||||
}
|
||||
|
||||
|
||||
slashTimer.Start();
|
||||
}
|
||||
|
||||
@@ -304,7 +312,7 @@ namespace GHelper.AnimeMatrix
|
||||
if (deviceSlash is null) return;
|
||||
|
||||
//kill timer if called but not in battery pattern mode
|
||||
if((SlashMode)AppConfig.Get("matrix_running", 0) != SlashMode.BatteryLevel)
|
||||
if ((SlashMode)AppConfig.Get("matrix_running", 0) != SlashMode.BatteryLevel)
|
||||
{
|
||||
slashTimer.Stop();
|
||||
slashTimer.Dispose();
|
||||
|
||||
@@ -404,12 +404,14 @@ namespace GHelper.AnimeMatrix
|
||||
|
||||
public void PresentClock()
|
||||
{
|
||||
string second = (DateTime.Now.Second % 2 == 0) ? ":" : " ";
|
||||
string time = DateTime.Now.ToString("HH" + second + "mm");
|
||||
string timeFormat = AppConfig.GetString("matrix_time", "HH:mm");
|
||||
string dateFormat = AppConfig.GetString("matrix_date", "yy.MM.dd");
|
||||
|
||||
if (DateTime.Now.Second % 2 != 0) timeFormat = timeFormat.Replace(":", " ");
|
||||
|
||||
Clear();
|
||||
Text(time, 15, 0, 25);
|
||||
Text(DateTime.Now.ToString("yy'. 'MM'. 'dd"), 11.5F, 0, 14);
|
||||
Text(DateTime.Now.ToString(timeFormat), 15, 2, 25);
|
||||
Text(DateTime.Now.ToString(dateFormat), 11.5F, 0, 14);
|
||||
Present();
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
using GHelper.AnimeMatrix.Communication;
|
||||
using System.Management;
|
||||
using System.Text;
|
||||
using System.Timers;
|
||||
|
||||
namespace GHelper.AnimeMatrix
|
||||
{
|
||||
@@ -26,16 +25,16 @@ namespace GHelper.AnimeMatrix
|
||||
BatteryLevel,
|
||||
}
|
||||
|
||||
internal class SlashPacket : Packet
|
||||
{
|
||||
public SlashPacket(byte[] command) : base(0x5E, 128, command)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class SlashDevice : Device
|
||||
{
|
||||
|
||||
internal class SlashPacket : Packet
|
||||
{
|
||||
public SlashPacket(byte[] command) : base(0x5E, 128, command)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public static Dictionary<SlashMode, string> Modes = new Dictionary<SlashMode, string>
|
||||
{
|
||||
{ SlashMode.Bounce, "Bounce"},
|
||||
@@ -85,7 +84,7 @@ namespace GHelper.AnimeMatrix
|
||||
{ SlashMode.Buzzer, 0x44},
|
||||
};
|
||||
|
||||
public SlashDevice() : base(0x0B05, 0x193B, 128)
|
||||
public SlashDevice(ushort productId = 0x193B) : base(0x0B05, productId, 128)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -135,23 +134,23 @@ namespace GHelper.AnimeMatrix
|
||||
}
|
||||
|
||||
public static double GetBatteryChargePercentage()
|
||||
{
|
||||
double batteryCharge = 0;
|
||||
try
|
||||
{
|
||||
double batteryCharge = 0;
|
||||
try
|
||||
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Battery");
|
||||
foreach (ManagementObject battery in searcher.Get())
|
||||
{
|
||||
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Battery");
|
||||
foreach (ManagementObject battery in searcher.Get())
|
||||
{
|
||||
batteryCharge = Convert.ToDouble(battery["EstimatedChargeRemaining"]);
|
||||
break; // Assuming only one battery
|
||||
}
|
||||
batteryCharge = Convert.ToDouble(battery["EstimatedChargeRemaining"]);
|
||||
break; // Assuming only one battery
|
||||
}
|
||||
catch (ManagementException e)
|
||||
{
|
||||
Console.WriteLine("An error occurred while querying for WMI data: " + e.Message);
|
||||
}
|
||||
return batteryCharge;
|
||||
}
|
||||
catch (ManagementException e)
|
||||
{
|
||||
Console.WriteLine("An error occurred while querying for WMI data: " + e.Message);
|
||||
}
|
||||
return batteryCharge;
|
||||
}
|
||||
|
||||
private byte[] GetBatteryPattern(int brightness, double percentage)
|
||||
{
|
||||
@@ -159,23 +158,23 @@ namespace GHelper.AnimeMatrix
|
||||
// set brightness to reflect battery's percentage within that range
|
||||
|
||||
int bracket = (int)Math.Floor(percentage / 14.2857);
|
||||
if(bracket >= 7) return Enumerable.Repeat((byte)(brightness * 85.333), 7).ToArray();
|
||||
|
||||
if (bracket >= 7) return Enumerable.Repeat((byte)(brightness * 85.333), 7).ToArray();
|
||||
|
||||
byte[] batteryPattern = Enumerable.Repeat((byte)(0x00), 7).ToArray();
|
||||
for (int i = 6; i > 6-bracket; i--)
|
||||
for (int i = 6; i > 6 - bracket; i--)
|
||||
{
|
||||
batteryPattern[i] = (byte)(brightness * 85.333);
|
||||
}
|
||||
|
||||
//set the "selected" bracket to the percentage of that bracket filled from 0 to 255 as a hex
|
||||
batteryPattern[6-bracket] = (byte)(((percentage % 14.2857) * brightness * 85.333) / 14.2857);
|
||||
batteryPattern[6 - bracket] = (byte)(((percentage % 14.2857) * brightness * 85.333) / 14.2857);
|
||||
|
||||
return batteryPattern;
|
||||
}
|
||||
|
||||
public void SetBatteryPattern(int brightness)
|
||||
{
|
||||
SetCustom(GetBatteryPattern(brightness, 100*(GetBatteryChargePercentage()/AppConfig.Get("charge_limit",100))));
|
||||
SetCustom(GetBatteryPattern(brightness, 100 * (GetBatteryChargePercentage() / AppConfig.Get("charge_limit", 100))));
|
||||
}
|
||||
|
||||
public void SetCustom(byte[] data)
|
||||
@@ -214,9 +213,22 @@ namespace GHelper.AnimeMatrix
|
||||
public void Set(Packet packet, string? log = null)
|
||||
{
|
||||
_usbProvider?.Set(packet.Data);
|
||||
if (log is not null) Logger.WriteLine($"{log}:" + BitConverter.ToString(packet.Data).Substring(0,48));
|
||||
if (log is not null) Logger.WriteLine($"{log}:" + BitConverter.ToString(packet.Data).Substring(0, 48));
|
||||
}
|
||||
}
|
||||
|
||||
public class SlashDeviceAura : SlashDevice
|
||||
{
|
||||
public SlashDeviceAura(): base(0x193B)
|
||||
{
|
||||
}
|
||||
|
||||
internal new class SlashPacket : Packet
|
||||
{
|
||||
public SlashPacket(byte[] command) : base(0x5D, 128, command)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -395,6 +395,11 @@ public static class AppConfig
|
||||
return ContainsModel("GA401I") && !ContainsModel("GA401IHR");
|
||||
}
|
||||
|
||||
public static bool MediaKeys()
|
||||
{
|
||||
return NoAura() || ContainsModel("G712L");
|
||||
}
|
||||
|
||||
public static bool IsSingleColor()
|
||||
{
|
||||
return ContainsModel("GA401") || ContainsModel("FX517Z") || ContainsModel("FX516P") || ContainsModel("X13") || IsARCNM() || ContainsModel("GA502IU");
|
||||
@@ -402,7 +407,12 @@ public static class AppConfig
|
||||
|
||||
public static bool IsSlash()
|
||||
{
|
||||
return ContainsModel("GA403") || ContainsModel("GU605");
|
||||
return ContainsModel("GA403") || ContainsModel("GU605") || ContainsModel("GA605");
|
||||
}
|
||||
|
||||
public static bool IsSlashAura()
|
||||
{
|
||||
return ContainsModel("GA605");
|
||||
}
|
||||
|
||||
public static bool IsInputBacklight()
|
||||
@@ -517,7 +527,7 @@ public static class AppConfig
|
||||
|
||||
public static bool DynamicBoost20()
|
||||
{
|
||||
return ContainsModel("GU605");
|
||||
return ContainsModel("GU605") || ContainsModel("GA605");
|
||||
}
|
||||
|
||||
public static bool IsAdvantageEdition()
|
||||
@@ -527,7 +537,7 @@ public static class AppConfig
|
||||
|
||||
public static bool NoAutoUltimate()
|
||||
{
|
||||
return ContainsModel("G614") || ContainsModel("GU604") || ContainsModel("FX507") || ContainsModel("G513") || ContainsModel("FA617") || ContainsModel("G834") || ContainsModel("GA403") || ContainsModel("GU605") || ContainsModel("GU603VV");
|
||||
return ContainsModel("G614") || ContainsModel("GU604") || ContainsModel("FX507") || ContainsModel("G513") || ContainsModel("FA617") || ContainsModel("G834") || ContainsModel("GA403") || ContainsModel("GU605") || ContainsModel("GA605") || ContainsModel("GU603VV");
|
||||
}
|
||||
|
||||
|
||||
@@ -647,14 +657,14 @@ public static class AppConfig
|
||||
|
||||
public static bool IsChargeLimit6080()
|
||||
{
|
||||
return ContainsModel("GA403U") || ContainsModel("GU605") || ContainsModel("GA503R") || (IsTUF() && !(ContainsModel("FX507Z") || ContainsModel("FA617")));
|
||||
return ContainsModel("GA403U") || ContainsModel("GU605") || ContainsModel("GA605") || ContainsModel("GA503R") || (IsTUF() && !(ContainsModel("FX507Z") || ContainsModel("FA617")));
|
||||
|
||||
}
|
||||
|
||||
// 2024 Models support Dynamic Lighting
|
||||
public static bool IsDynamicLighting()
|
||||
{
|
||||
return IsSlash() || ContainsModel("JIR") || ContainsModel("JZR") || ContainsModel("JVR") || ContainsModel("JYR") || ContainsModel("FA607P") || ContainsModel("FX607J") || ContainsModel("FA507U");
|
||||
return IsSlash() || IsIntelHX() || ContainsModel("FA607P") || ContainsModel("FX607J") || ContainsModel("FA507U");
|
||||
}
|
||||
|
||||
public static bool IsForceMiniled()
|
||||
|
||||
@@ -66,12 +66,13 @@ public class AsusACPI
|
||||
public const uint PerformanceMode = 0x00120075; // Performance modes
|
||||
public const uint VivoBookMode = 0x00110019; // Vivobook performance modes
|
||||
|
||||
public const uint GPUEco = 0x00090020;
|
||||
public const uint GPUEcoROG = 0x00090020;
|
||||
public const uint GPUEcoVivo = 0x00090120;
|
||||
|
||||
public const uint GPUXGConnected = 0x00090018;
|
||||
public const uint GPUXG = 0x00090019;
|
||||
|
||||
public const uint GPUMux = 0x00090016;
|
||||
public const uint GPUMuxROG = 0x00090016;
|
||||
public const uint GPUMuxVivo = 0x00090026;
|
||||
|
||||
public const uint BatteryLimit = 0x00120057;
|
||||
@@ -170,6 +171,8 @@ public class AsusACPI
|
||||
private bool? _allAMD = null;
|
||||
private bool? _overdrive = null;
|
||||
|
||||
public static uint GPUEco => (AppConfig.IsVivoZenbook() || AppConfig.IsProArt()) ? GPUEcoVivo : GPUEcoROG;
|
||||
public static uint GPUMux => AppConfig.IsVivoZenbook() ? GPUMuxVivo : GPUMuxROG;
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
|
||||
private static extern IntPtr CreateFile(
|
||||
@@ -445,14 +448,16 @@ public class AsusACPI
|
||||
|
||||
public int SetGPUEco(int eco)
|
||||
{
|
||||
int ecoFlag = DeviceGet(GPUEco);
|
||||
uint ecoEndpoint = GPUEco;
|
||||
|
||||
int ecoFlag = DeviceGet(ecoEndpoint);
|
||||
if (ecoFlag < 0) return -1;
|
||||
|
||||
if (ecoFlag == 1 && eco == 0)
|
||||
return DeviceSet(GPUEco, eco, "GPUEco");
|
||||
return DeviceSet(ecoEndpoint, eco, "GPUEco");
|
||||
|
||||
if (ecoFlag == 0 && eco == 1)
|
||||
return DeviceSet(GPUEco, eco, "GPUEco");
|
||||
return DeviceSet(ecoEndpoint, eco, "GPUEco");
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -36,7 +36,13 @@ namespace GHelper.AutoUpdate
|
||||
|
||||
public void LoadReleases()
|
||||
{
|
||||
Process.Start(new ProcessStartInfo(versionUrl) { UseShellExecute = true });
|
||||
try
|
||||
{
|
||||
Process.Start(new ProcessStartInfo(versionUrl) { UseShellExecute = true });
|
||||
} catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine("Failed to open releases page:" + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
async void CheckForUpdatesAsync()
|
||||
|
||||
@@ -153,6 +153,9 @@ namespace GHelper.Display
|
||||
int frequency = ScreenNative.GetRefreshRate(laptopScreen);
|
||||
int maxFrequency = ScreenNative.GetMaxRefreshRate(laptopScreen);
|
||||
|
||||
if (maxFrequency > 0) AppConfig.Set("max_frequency", maxFrequency);
|
||||
else maxFrequency = AppConfig.Get("max_frequency");
|
||||
|
||||
bool screenAuto = AppConfig.Is("screen_auto");
|
||||
bool overdriveSetting = Program.acpi.IsOverdriveSupported() && !AppConfig.IsNoOverdrive();
|
||||
|
||||
|
||||
@@ -203,7 +203,7 @@ namespace GHelper
|
||||
labelFNF4.Visible = comboFNF4.Visible = textFNF4.Visible = false;
|
||||
}
|
||||
|
||||
if (AppConfig.NoAura())
|
||||
if (AppConfig.MediaKeys())
|
||||
{
|
||||
labelFNF4.Visible = comboFNF4.Visible = textFNF4.Visible = false;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||
<AssemblyVersion>0.181</AssemblyVersion>
|
||||
<AssemblyVersion>0.182</AssemblyVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
||||
@@ -25,8 +25,6 @@ namespace GHelper.Gpu
|
||||
int eco = Program.acpi.DeviceGet(AsusACPI.GPUEco);
|
||||
int mux = Program.acpi.DeviceGet(AsusACPI.GPUMux);
|
||||
|
||||
if (mux < 0) mux = Program.acpi.DeviceGet(AsusACPI.GPUMuxVivo);
|
||||
|
||||
Logger.WriteLine("Eco flag : " + eco);
|
||||
Logger.WriteLine("Mux flag : " + mux);
|
||||
|
||||
@@ -83,7 +81,6 @@ namespace GHelper.Gpu
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
status = Program.acpi.DeviceSet(AsusACPI.GPUMux, 1, "GPUMux");
|
||||
if (status != 1) Program.acpi.DeviceSet(AsusACPI.GPUMuxVivo, 1, "GPUMuxVivo");
|
||||
restart = true;
|
||||
changed = true;
|
||||
}
|
||||
@@ -99,7 +96,6 @@ namespace GHelper.Gpu
|
||||
Thread.Sleep(100);
|
||||
}
|
||||
status = Program.acpi.DeviceSet(AsusACPI.GPUMux, 0, "GPUMux");
|
||||
if (status != 1) Program.acpi.DeviceSet(AsusACPI.GPUMuxVivo, 0, "GPUMuxVivo");
|
||||
restart = true;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
@@ -218,6 +218,9 @@ namespace GHelper.Input
|
||||
case 3:
|
||||
KeyboardHook.KeyKeyKeyPress((Keys)hexKeys[0], (Keys)hexKeys[1], (Keys)hexKeys[2]);
|
||||
break;
|
||||
case 4:
|
||||
KeyboardHook.KeyKeyKeyKeyPress((Keys)hexKeys[0], (Keys)hexKeys[1], (Keys)hexKeys[2], (Keys)hexKeys[3]);
|
||||
break;
|
||||
default:
|
||||
LaunchProcess(command);
|
||||
break;
|
||||
@@ -288,7 +291,7 @@ namespace GHelper.Input
|
||||
}
|
||||
}
|
||||
|
||||
if (AppConfig.NoAura())
|
||||
if (AppConfig.MediaKeys())
|
||||
{
|
||||
switch (e.Key)
|
||||
{
|
||||
|
||||
@@ -77,6 +77,21 @@ public sealed class KeyboardHook : IDisposable
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
}
|
||||
|
||||
public static void KeyKeyKeyKeyPress(Keys key, Keys key2, Keys key3, Keys key4, 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);
|
||||
keybd_event((byte)key4, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
|
||||
Thread.Sleep(sleep);
|
||||
|
||||
keybd_event((byte)key4, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
keybd_event((byte)key3, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents the window that is used internally to get the messages.
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user