mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
26 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1efda38ccf | ||
|
|
88eb4916b6 | ||
|
|
741d9cf1e2 | ||
|
|
45e3d5e75f | ||
|
|
443f6726c7 | ||
|
|
f22f6eb960 | ||
|
|
a83b42c263 | ||
|
|
b97bd9af65 | ||
|
|
a70956eaf8 | ||
|
|
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
|
try
|
||||||
{
|
{
|
||||||
if (AppConfig.IsSlash())
|
if (AppConfig.IsSlash())
|
||||||
deviceSlash = new SlashDevice();
|
{
|
||||||
|
if (AppConfig.IsSlashAura())
|
||||||
|
deviceSlash = new SlashDeviceAura();
|
||||||
|
else
|
||||||
|
deviceSlash = new SlashDevice();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
deviceMatrix = new AnimeMatrixDevice();
|
deviceMatrix = new AnimeMatrixDevice();
|
||||||
|
}
|
||||||
|
|
||||||
matrixTimer = new System.Timers.Timer(100);
|
matrixTimer = new System.Timers.Timer(100);
|
||||||
matrixTimer.Elapsed += MatrixTimer_Elapsed;
|
matrixTimer.Elapsed += MatrixTimer_Elapsed;
|
||||||
@@ -103,7 +110,7 @@ namespace GHelper.AnimeMatrix
|
|||||||
|
|
||||||
deviceSlash.SetEnabled(true);
|
deviceSlash.SetEnabled(true);
|
||||||
deviceSlash.Init();
|
deviceSlash.Init();
|
||||||
|
|
||||||
switch ((SlashMode)running)
|
switch ((SlashMode)running)
|
||||||
{
|
{
|
||||||
case SlashMode.Static:
|
case SlashMode.Static:
|
||||||
@@ -111,7 +118,8 @@ namespace GHelper.AnimeMatrix
|
|||||||
if (custom is not null && custom.Length > 0)
|
if (custom is not null && custom.Length > 0)
|
||||||
{
|
{
|
||||||
deviceSlash.SetCustom(AppConfig.StringToBytes(custom));
|
deviceSlash.SetCustom(AppConfig.StringToBytes(custom));
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
deviceSlash.SetStatic(brightness);
|
deviceSlash.SetStatic(brightness);
|
||||||
}
|
}
|
||||||
@@ -137,7 +145,7 @@ namespace GHelper.AnimeMatrix
|
|||||||
public void SetLidMode(bool force = false)
|
public void SetLidMode(bool force = false)
|
||||||
{
|
{
|
||||||
bool matrixLid = AppConfig.Is("matrix_lid");
|
bool matrixLid = AppConfig.Is("matrix_lid");
|
||||||
|
|
||||||
if (deviceSlash is not null)
|
if (deviceSlash is not null)
|
||||||
{
|
{
|
||||||
deviceSlash.SetLidMode(true);
|
deviceSlash.SetLidMode(true);
|
||||||
@@ -268,8 +276,8 @@ namespace GHelper.AnimeMatrix
|
|||||||
StartMatrixTimer(1000);
|
StartMatrixTimer(1000);
|
||||||
Logger.WriteLine("Matrix Clock");
|
Logger.WriteLine("Matrix Clock");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void SlashTimer_start(int interval = 60000)
|
private void SlashTimer_start(int interval = 60000)
|
||||||
{
|
{
|
||||||
// 100% to 0% in 1hr = 1% every 36 seconds
|
// 100% to 0% in 1hr = 1% every 36 seconds
|
||||||
@@ -279,18 +287,18 @@ namespace GHelper.AnimeMatrix
|
|||||||
|
|
||||||
// create the timer if first call
|
// create the timer if first call
|
||||||
// this way, the timer only spawns if user tries to use battery pattern
|
// 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 = new System.Timers.Timer(interval);
|
||||||
slashTimer.Elapsed += SlashTimer_elapsed;
|
slashTimer.Elapsed += SlashTimer_elapsed;
|
||||||
slashTimer.AutoReset = true;
|
slashTimer.AutoReset = true;
|
||||||
}
|
}
|
||||||
// only write if interval changed
|
// only write if interval changed
|
||||||
if(slashTimer.Interval != interval)
|
if (slashTimer.Interval != interval)
|
||||||
{
|
{
|
||||||
slashTimer.Interval = interval;
|
slashTimer.Interval = interval;
|
||||||
}
|
}
|
||||||
|
|
||||||
slashTimer.Start();
|
slashTimer.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,7 +312,7 @@ namespace GHelper.AnimeMatrix
|
|||||||
if (deviceSlash is null) return;
|
if (deviceSlash is null) return;
|
||||||
|
|
||||||
//kill timer if called but not in battery pattern mode
|
//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.Stop();
|
||||||
slashTimer.Dispose();
|
slashTimer.Dispose();
|
||||||
|
|||||||
@@ -404,12 +404,14 @@ namespace GHelper.AnimeMatrix
|
|||||||
|
|
||||||
public void PresentClock()
|
public void PresentClock()
|
||||||
{
|
{
|
||||||
string second = (DateTime.Now.Second % 2 == 0) ? ":" : " ";
|
string timeFormat = AppConfig.GetString("matrix_time", "HH:mm");
|
||||||
string time = DateTime.Now.ToString("HH" + second + "mm");
|
string dateFormat = AppConfig.GetString("matrix_date", "yy.MM.dd");
|
||||||
|
|
||||||
|
if (DateTime.Now.Second % 2 != 0) timeFormat = timeFormat.Replace(":", " ");
|
||||||
|
|
||||||
Clear();
|
Clear();
|
||||||
Text(time, 15, 0, 25);
|
Text(DateTime.Now.ToString(timeFormat), 15, 2, 25);
|
||||||
Text(DateTime.Now.ToString("yy'. 'MM'. 'dd"), 11.5F, 0, 14);
|
Text(DateTime.Now.ToString(dateFormat), 11.5F, 0, 14);
|
||||||
Present();
|
Present();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
using GHelper.AnimeMatrix.Communication;
|
using GHelper.AnimeMatrix.Communication;
|
||||||
using System.Management;
|
using System.Management;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Timers;
|
|
||||||
|
|
||||||
namespace GHelper.AnimeMatrix
|
namespace GHelper.AnimeMatrix
|
||||||
{
|
{
|
||||||
@@ -26,16 +25,24 @@ namespace GHelper.AnimeMatrix
|
|||||||
BatteryLevel,
|
BatteryLevel,
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class SlashPacket : Packet
|
public class SlashPacket : Packet
|
||||||
{
|
{
|
||||||
public SlashPacket(byte[] command) : base(0x5E, 128, command)
|
public SlashPacket(byte[] command, byte reportID = 0x5E) : base(reportID, 128, command)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class SlashDevice : Device
|
public class SlashDevice : Device
|
||||||
{
|
{
|
||||||
|
|
||||||
|
protected virtual byte reportID => 0x5E;
|
||||||
|
|
||||||
|
protected virtual SlashPacket CreatePacket(byte[] command)
|
||||||
|
{
|
||||||
|
return new SlashPacket(command, reportID);
|
||||||
|
}
|
||||||
|
|
||||||
public static Dictionary<SlashMode, string> Modes = new Dictionary<SlashMode, string>
|
public static Dictionary<SlashMode, string> Modes = new Dictionary<SlashMode, string>
|
||||||
{
|
{
|
||||||
{ SlashMode.Bounce, "Bounce"},
|
{ SlashMode.Bounce, "Bounce"},
|
||||||
@@ -85,31 +92,31 @@ namespace GHelper.AnimeMatrix
|
|||||||
{ SlashMode.Buzzer, 0x44},
|
{ SlashMode.Buzzer, 0x44},
|
||||||
};
|
};
|
||||||
|
|
||||||
public SlashDevice() : base(0x0B05, 0x193B, 128)
|
public SlashDevice(ushort productId = 0x193B) : base(0x0B05, productId, 128)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void WakeUp()
|
public void WakeUp()
|
||||||
{
|
{
|
||||||
Set(Packet<SlashPacket>(Encoding.ASCII.GetBytes("ASUS Tech.Inc.")), "SlashWakeUp");
|
Set(CreatePacket(Encoding.ASCII.GetBytes("ASUS Tech.Inc.")), "SlashWakeUp");
|
||||||
Set(Packet<SlashPacket>(0xC2), "SlashWakeUp");
|
Set(CreatePacket([0xC2]), "SlashWakeUp");
|
||||||
Set(Packet<SlashPacket>(0xD1, 0x01, 0x00, 0x01), "SlashWakeUp");
|
Set(CreatePacket([0xD1, 0x01, 0x00, 0x01 ]), "SlashWakeUp");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Init()
|
public void Init()
|
||||||
{
|
{
|
||||||
Set(Packet<SlashPacket>(0xD7, 0x00, 0x00, 0x01, 0xAC), "SlashInit");
|
Set(CreatePacket([0xD7, 0x00, 0x00, 0x01, 0xAC]), "SlashInit");
|
||||||
Set(Packet<SlashPacket>(0xD2, 0x02, 0x01, 0x08, 0xAB), "SlashInit");
|
Set(CreatePacket([0xD2, 0x02, 0x01, 0x08, 0xAB]), "SlashInit");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetEnabled(bool status = true)
|
public void SetEnabled(bool status = true)
|
||||||
{
|
{
|
||||||
Set(Packet<SlashPacket>(0xD8, 0x02, 0x00, 0x01, status ? (byte)0x00 : (byte)0x80), $"SlashEnable {status}");
|
Set(CreatePacket([0xD8, 0x02, 0x00, 0x01, status ? (byte)0x00 : (byte)0x80]), $"SlashEnable {status}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Save()
|
public void Save()
|
||||||
{
|
{
|
||||||
Set(Packet<SlashPacket>(0xD4, 0x00, 0x00, 0x01, 0xAB), "SlashSave");
|
Set(CreatePacket([0xD4, 0x00, 0x00, 0x01, 0xAB]), "SlashSave");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetMode(SlashMode mode)
|
public void SetMode(SlashMode mode)
|
||||||
@@ -125,8 +132,8 @@ namespace GHelper.AnimeMatrix
|
|||||||
modeByte = 0x00;
|
modeByte = 0x00;
|
||||||
}
|
}
|
||||||
|
|
||||||
Set(Packet<SlashPacket>(0xD2, 0x03, 0x00, 0x0C), "SlashMode");
|
Set(CreatePacket([0xD2, 0x03, 0x00, 0x0C]), "SlashMode");
|
||||||
Set(Packet<SlashPacket>(0xD3, 0x04, 0x00, 0x0C, 0x01, modeByte, 0x02, 0x19, 0x03, 0x13, 0x04, 0x11, 0x05, 0x12, 0x06, 0x13), "SlashMode");
|
Set(CreatePacket([0xD3, 0x04, 0x00, 0x0C, 0x01, modeByte, 0x02, 0x19, 0x03, 0x13, 0x04, 0x11, 0x05, 0x12, 0x06, 0x13]), "SlashMode");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetStatic(int brightness = 0)
|
public void SetStatic(int brightness = 0)
|
||||||
@@ -135,23 +142,23 @@ namespace GHelper.AnimeMatrix
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static double GetBatteryChargePercentage()
|
public static double GetBatteryChargePercentage()
|
||||||
|
{
|
||||||
|
double batteryCharge = 0;
|
||||||
|
try
|
||||||
{
|
{
|
||||||
double batteryCharge = 0;
|
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Battery");
|
||||||
try
|
foreach (ManagementObject battery in searcher.Get())
|
||||||
{
|
{
|
||||||
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Battery");
|
batteryCharge = Convert.ToDouble(battery["EstimatedChargeRemaining"]);
|
||||||
foreach (ManagementObject battery in searcher.Get())
|
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)
|
private byte[] GetBatteryPattern(int brightness, double percentage)
|
||||||
{
|
{
|
||||||
@@ -159,64 +166,77 @@ namespace GHelper.AnimeMatrix
|
|||||||
// set brightness to reflect battery's percentage within that range
|
// set brightness to reflect battery's percentage within that range
|
||||||
|
|
||||||
int bracket = (int)Math.Floor(percentage / 14.2857);
|
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();
|
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);
|
batteryPattern[i] = (byte)(brightness * 85.333);
|
||||||
}
|
}
|
||||||
|
|
||||||
//set the "selected" bracket to the percentage of that bracket filled from 0 to 255 as a hex
|
//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;
|
return batteryPattern;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetBatteryPattern(int brightness)
|
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)
|
public void SetCustom(byte[] data)
|
||||||
{
|
{
|
||||||
Set(Packet<SlashPacket>(0xD2, 0x02, 0x01, 0x08, 0xAC), "Static");
|
Set(CreatePacket([0xD2, 0x02, 0x01, 0x08, 0xAC]), "Static");
|
||||||
Set(Packet<SlashPacket>(0xD3, 0x03, 0x01, 0x08, 0xAC, 0xFF, 0xFF, 0x01, 0x05, 0xFF, 0xFF), "StaticSettings");
|
Set(CreatePacket([0xD3, 0x03, 0x01, 0x08, 0xAC, 0xFF, 0xFF, 0x01, 0x05, 0xFF, 0xFF]), "StaticSettings");
|
||||||
Set(Packet<SlashPacket>(0xD4, 0x00, 0x00, 0x01, 0xAC), "StaticSave");
|
Set(CreatePacket([0xD4, 0x00, 0x00, 0x01, 0xAC]), "StaticSave");
|
||||||
|
|
||||||
byte[] payload = new byte[] { 0xD3, 0x00, 0x00, 0x07 };
|
byte[] payload = new byte[] { 0xD3, 0x00, 0x00, 0x07 };
|
||||||
Set(Packet<SlashPacket>(payload.Concat(data.Take(7)).ToArray()), "Static Data");
|
Set(CreatePacket(payload.Concat(data.Take(7)).ToArray()), "Static Data");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetOptions(bool status, int brightness = 0, int interval = 0)
|
public void SetOptions(bool status, int brightness = 0, int interval = 0)
|
||||||
{
|
{
|
||||||
byte brightnessByte = (byte)(brightness * 85.333);
|
byte brightnessByte = (byte)(brightness * 85.333);
|
||||||
|
|
||||||
Set(Packet<SlashPacket>(0xD3, 0x03, 0x01, 0x08, 0xAB, 0xFF, 0x01, status ? (byte)0x01 : (byte)0x00, 0x06, brightnessByte, 0xFF, (byte)interval), "SlashOptions");
|
Set(CreatePacket([0xD3, 0x03, 0x01, 0x08, 0xAB, 0xFF, 0x01, status ? (byte)0x01 : (byte)0x00, 0x06, brightnessByte, 0xFF, (byte)interval]), "SlashOptions");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetBatterySaver(bool status)
|
public void SetBatterySaver(bool status)
|
||||||
{
|
{
|
||||||
Set(Packet<SlashPacket>(0xD8, 0x01, 0x00, 0x01, status ? (byte)0x80 : (byte)0x00), $"SlashBatterySaver {status}");
|
Set(CreatePacket([0xD8, 0x01, 0x00, 0x01, status ? (byte)0x80 : (byte)0x00]), $"SlashBatterySaver {status}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetLidMode(bool status)
|
public void SetLidMode(bool status)
|
||||||
{
|
{
|
||||||
Set(Packet<SlashPacket>(0xD8, 0x00, 0x00, 0x02, 0xA5, status ? (byte)0x80 : (byte)0x00), $"DisableLidClose {status}");
|
Set(CreatePacket([0xD8, 0x00, 0x00, 0x02, 0xA5, status ? (byte)0x80 : (byte)0x00]), $"DisableLidClose {status}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetSleepActive(bool status)
|
public void SetSleepActive(bool status)
|
||||||
{
|
{
|
||||||
Set(Packet<SlashPacket>(0xD2, 0x02, 0x01, 0x08, 0xA1), "SleepInit");
|
Set(CreatePacket([0xD2, 0x02, 0x01, 0x08, 0xA1]), "SleepInit");
|
||||||
Set(Packet<SlashPacket>(0xD3, 0x03, 0x01, 0x08, 0xA1, 0x00, 0xFF, status ? (byte)0x01 : (byte)0x00, 0x02, 0xFF, 0xFF), $"Sleep {status}");
|
Set(CreatePacket([0xD3, 0x03, 0x01, 0x08, 0xA1, 0x00, 0xFF, status ? (byte)0x01 : (byte)0x00, 0x02, 0xFF, 0xFF]), $"Sleep {status}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Set(Packet packet, string? log = null)
|
public void Set(Packet packet, string? log = null)
|
||||||
{
|
{
|
||||||
_usbProvider?.Set(packet.Data);
|
_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
|
||||||
|
{
|
||||||
|
protected override byte reportID => 0x5D;
|
||||||
|
|
||||||
|
public SlashDeviceAura() : base(0x19B6)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override SlashPacket CreatePacket(byte[] command)
|
||||||
|
{
|
||||||
|
return new SlashPacket(command, reportID);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -395,14 +395,24 @@ public static class AppConfig
|
|||||||
return ContainsModel("GA401I") && !ContainsModel("GA401IHR");
|
return ContainsModel("GA401I") && !ContainsModel("GA401IHR");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool MediaKeys()
|
||||||
|
{
|
||||||
|
return NoAura() || ContainsModel("G712L");
|
||||||
|
}
|
||||||
|
|
||||||
public static bool IsSingleColor()
|
public static bool IsSingleColor()
|
||||||
{
|
{
|
||||||
return ContainsModel("GA401") || ContainsModel("FX517Z") || ContainsModel("FX516P") || ContainsModel("X13") || IsARCNM() || ContainsModel("GA502IU");
|
return ContainsModel("GA401") || ContainsModel("FX517Z") || ContainsModel("FX516P") || ContainsModel("X13") || IsARCNM() || ContainsModel("GA502IU") || ContainsModel("FA617N") || ContainsModel("FA617X");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsSlash()
|
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()
|
public static bool IsInputBacklight()
|
||||||
@@ -517,7 +527,7 @@ public static class AppConfig
|
|||||||
|
|
||||||
public static bool DynamicBoost20()
|
public static bool DynamicBoost20()
|
||||||
{
|
{
|
||||||
return ContainsModel("GU605");
|
return ContainsModel("GU605") || ContainsModel("GA605");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsAdvantageEdition()
|
public static bool IsAdvantageEdition()
|
||||||
@@ -527,7 +537,7 @@ public static class AppConfig
|
|||||||
|
|
||||||
public static bool NoAutoUltimate()
|
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()
|
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
|
// 2024 Models support Dynamic Lighting
|
||||||
public static bool IsDynamicLighting()
|
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()
|
public static bool IsForceMiniled()
|
||||||
|
|||||||
@@ -66,12 +66,13 @@ public class AsusACPI
|
|||||||
public const uint PerformanceMode = 0x00120075; // Performance modes
|
public const uint PerformanceMode = 0x00120075; // Performance modes
|
||||||
public const uint VivoBookMode = 0x00110019; // Vivobook 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 GPUXGConnected = 0x00090018;
|
||||||
public const uint GPUXG = 0x00090019;
|
public const uint GPUXG = 0x00090019;
|
||||||
|
|
||||||
public const uint GPUMux = 0x00090016;
|
public const uint GPUMuxROG = 0x00090016;
|
||||||
public const uint GPUMuxVivo = 0x00090026;
|
public const uint GPUMuxVivo = 0x00090026;
|
||||||
|
|
||||||
public const uint BatteryLimit = 0x00120057;
|
public const uint BatteryLimit = 0x00120057;
|
||||||
@@ -170,6 +171,8 @@ public class AsusACPI
|
|||||||
private bool? _allAMD = null;
|
private bool? _allAMD = null;
|
||||||
private bool? _overdrive = 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)]
|
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
|
||||||
private static extern IntPtr CreateFile(
|
private static extern IntPtr CreateFile(
|
||||||
@@ -445,14 +448,16 @@ public class AsusACPI
|
|||||||
|
|
||||||
public int SetGPUEco(int eco)
|
public int SetGPUEco(int eco)
|
||||||
{
|
{
|
||||||
int ecoFlag = DeviceGet(GPUEco);
|
uint ecoEndpoint = GPUEco;
|
||||||
|
|
||||||
|
int ecoFlag = DeviceGet(ecoEndpoint);
|
||||||
if (ecoFlag < 0) return -1;
|
if (ecoFlag < 0) return -1;
|
||||||
|
|
||||||
if (ecoFlag == 1 && eco == 0)
|
if (ecoFlag == 1 && eco == 0)
|
||||||
return DeviceSet(GPUEco, eco, "GPUEco");
|
return DeviceSet(ecoEndpoint, eco, "GPUEco");
|
||||||
|
|
||||||
if (ecoFlag == 0 && eco == 1)
|
if (ecoFlag == 0 && eco == 1)
|
||||||
return DeviceSet(GPUEco, eco, "GPUEco");
|
return DeviceSet(ecoEndpoint, eco, "GPUEco");
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -639,7 +644,7 @@ public class AsusACPI
|
|||||||
|
|
||||||
public bool IsAllAmdPPT()
|
public bool IsAllAmdPPT()
|
||||||
{
|
{
|
||||||
if (_allAMD is null) _allAMD = DeviceGet(PPT_CPUB0) >= 0 && DeviceGet(PPT_GPUC0) < 0;
|
if (_allAMD is null) _allAMD = DeviceGet(PPT_CPUB0) >= 0 && DeviceGet(PPT_GPUC0) < 0 && !AppConfig.IsAlly();
|
||||||
return (bool)_allAMD;
|
return (bool)_allAMD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,13 @@ namespace GHelper.AutoUpdate
|
|||||||
|
|
||||||
public void LoadReleases()
|
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()
|
async void CheckForUpdatesAsync()
|
||||||
|
|||||||
@@ -153,6 +153,9 @@ namespace GHelper.Display
|
|||||||
int frequency = ScreenNative.GetRefreshRate(laptopScreen);
|
int frequency = ScreenNative.GetRefreshRate(laptopScreen);
|
||||||
int maxFrequency = ScreenNative.GetMaxRefreshRate(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 screenAuto = AppConfig.Is("screen_auto");
|
||||||
bool overdriveSetting = Program.acpi.IsOverdriveSupported() && !AppConfig.IsNoOverdrive();
|
bool overdriveSetting = Program.acpi.IsOverdriveSupported() && !AppConfig.IsNoOverdrive();
|
||||||
|
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ namespace GHelper
|
|||||||
labelFNF4.Visible = comboFNF4.Visible = textFNF4.Visible = false;
|
labelFNF4.Visible = comboFNF4.Visible = textFNF4.Visible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AppConfig.NoAura())
|
if (AppConfig.MediaKeys())
|
||||||
{
|
{
|
||||||
labelFNF4.Visible = comboFNF4.Visible = textFNF4.Visible = false;
|
labelFNF4.Visible = comboFNF4.Visible = textFNF4.Visible = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||||
<AssemblyVersion>0.181</AssemblyVersion>
|
<AssemblyVersion>0.183</AssemblyVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
|||||||
@@ -25,8 +25,6 @@ namespace GHelper.Gpu
|
|||||||
int eco = Program.acpi.DeviceGet(AsusACPI.GPUEco);
|
int eco = Program.acpi.DeviceGet(AsusACPI.GPUEco);
|
||||||
int mux = Program.acpi.DeviceGet(AsusACPI.GPUMux);
|
int mux = Program.acpi.DeviceGet(AsusACPI.GPUMux);
|
||||||
|
|
||||||
if (mux < 0) mux = Program.acpi.DeviceGet(AsusACPI.GPUMuxVivo);
|
|
||||||
|
|
||||||
Logger.WriteLine("Eco flag : " + eco);
|
Logger.WriteLine("Eco flag : " + eco);
|
||||||
Logger.WriteLine("Mux flag : " + mux);
|
Logger.WriteLine("Mux flag : " + mux);
|
||||||
|
|
||||||
@@ -83,7 +81,6 @@ namespace GHelper.Gpu
|
|||||||
if (dialogResult == DialogResult.Yes)
|
if (dialogResult == DialogResult.Yes)
|
||||||
{
|
{
|
||||||
status = Program.acpi.DeviceSet(AsusACPI.GPUMux, 1, "GPUMux");
|
status = Program.acpi.DeviceSet(AsusACPI.GPUMux, 1, "GPUMux");
|
||||||
if (status != 1) Program.acpi.DeviceSet(AsusACPI.GPUMuxVivo, 1, "GPUMuxVivo");
|
|
||||||
restart = true;
|
restart = true;
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
@@ -99,7 +96,6 @@ namespace GHelper.Gpu
|
|||||||
Thread.Sleep(100);
|
Thread.Sleep(100);
|
||||||
}
|
}
|
||||||
status = Program.acpi.DeviceSet(AsusACPI.GPUMux, 0, "GPUMux");
|
status = Program.acpi.DeviceSet(AsusACPI.GPUMux, 0, "GPUMux");
|
||||||
if (status != 1) Program.acpi.DeviceSet(AsusACPI.GPUMuxVivo, 0, "GPUMuxVivo");
|
|
||||||
restart = true;
|
restart = true;
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -218,6 +218,9 @@ namespace GHelper.Input
|
|||||||
case 3:
|
case 3:
|
||||||
KeyboardHook.KeyKeyKeyPress((Keys)hexKeys[0], (Keys)hexKeys[1], (Keys)hexKeys[2]);
|
KeyboardHook.KeyKeyKeyPress((Keys)hexKeys[0], (Keys)hexKeys[1], (Keys)hexKeys[2]);
|
||||||
break;
|
break;
|
||||||
|
case 4:
|
||||||
|
KeyboardHook.KeyKeyKeyKeyPress((Keys)hexKeys[0], (Keys)hexKeys[1], (Keys)hexKeys[2], (Keys)hexKeys[3]);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
LaunchProcess(command);
|
LaunchProcess(command);
|
||||||
break;
|
break;
|
||||||
@@ -288,7 +291,7 @@ namespace GHelper.Input
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AppConfig.NoAura())
|
if (AppConfig.MediaKeys())
|
||||||
{
|
{
|
||||||
switch (e.Key)
|
switch (e.Key)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -77,6 +77,21 @@ public sealed class KeyboardHook : IDisposable
|
|||||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
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>
|
/// <summary>
|
||||||
/// Represents the window that is used internally to get the messages.
|
/// Represents the window that is used internally to get the messages.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ public static class AsusHid
|
|||||||
public const byte INPUT_ID = 0x5a;
|
public const byte INPUT_ID = 0x5a;
|
||||||
public const byte AURA_ID = 0x5d;
|
public const byte AURA_ID = 0x5d;
|
||||||
|
|
||||||
static int[] deviceIds = { 0x1a30, 0x1854, 0x1869, 0x1866, 0x19b6, 0x1822, 0x1837, 0x1854, 0x184a, 0x183d, 0x8502, 0x1807, 0x17e0, 0x18c6, 0x1abe };
|
static int[] deviceIds = { 0x1a30, 0x1854, 0x1869, 0x1866, 0x19b6, 0x1822, 0x1837, 0x1854, 0x184a, 0x183d, 0x8502, 0x1807, 0x17e0, 0x18c6, 0x1abe, 0x1b4c };
|
||||||
|
|
||||||
static HidStream? auraStream;
|
static HidStream? auraStream;
|
||||||
|
|
||||||
|
|||||||
@@ -254,7 +254,7 @@ namespace GHelper.USB
|
|||||||
msg[6] = mono ? (byte)0 : color.B; // B
|
msg[6] = mono ? (byte)0 : color.B; // B
|
||||||
msg[7] = (byte)speed; // aura.speed as u8;
|
msg[7] = (byte)speed; // aura.speed as u8;
|
||||||
msg[8] = 0x00; // aura.direction as u8;
|
msg[8] = 0x00; // aura.direction as u8;
|
||||||
msg[9] = (color.R == 0 && color.G == 0 && color.B == 0) ? (byte)0xFF : (byte)0x00; // random color flag
|
msg[9] = (color.R == 0 && color.G == 0 && color.B == 0) ? (byte)0xFF : (mode == AuraMode.AuraBreathe ? (byte)0x01 : (byte)0x00); // random color flag
|
||||||
msg[10] = color2.R; // R
|
msg[10] = color2.R; // R
|
||||||
msg[11] = mono ? (byte)0 : color2.G; // G
|
msg[11] = mono ? (byte)0 : color2.G; // G
|
||||||
msg[12] = mono ? (byte)0 : color2.B; // B
|
msg[12] = mono ? (byte)0 : color2.B; // B
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
Small and lightweight Armoury Crate alternative for Asus laptops offering almost same functionality without extra load and unnecessary services.
|
Small and lightweight Armoury Crate alternative for Asus laptops offering almost same functionality without extra load and unnecessary services.
|
||||||
|
|
||||||
Works with all popular models, such as ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, Flow Z13, TUF Series, Strix / Scar Series, ProArt, Vivobook, Zenbook, ROG Ally and many more!
|
Works with all popular models, such as ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, Flow Z13, TUF Series, Strix or Scar Series, ProArt, Vivobook, Zenbook, ROG Ally and many more!
|
||||||
|
|
||||||
# [:floppy_disk:Download](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
|
# [:floppy_disk:Download](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
|
||||||
**⭐ If you like the app - please spread the word about it online**
|
**⭐ If you like the app - please spread the word about it online**
|
||||||
|
|||||||
Reference in New Issue
Block a user