mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Merge branch 'main' into gpu_tgp
This commit is contained in:
4
.github/SECURITY.md
vendored
4
.github/SECURITY.md
vendored
@@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
| Version | Supported |
|
| Version | Supported |
|
||||||
| ------- | ------------------ |
|
| ------- | ------------------ |
|
||||||
| 0.89+ | :white_check_mark: |
|
| 0.151+ | :white_check_mark: |
|
||||||
| < 0.89 | :x: |
|
| < 0.151 | :x: |
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
|||||||
@@ -67,9 +67,17 @@ public static class AppConfig
|
|||||||
{
|
{
|
||||||
File.WriteAllText(backup, jsonString);
|
File.WriteAllText(backup, jsonString);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
Logger.WriteLine(ex.ToString());
|
Thread.Sleep(100);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File.WriteAllText(backup, jsonString);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.WriteLine(ex.Message);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
247
app/Peripherals/Mouse/Models/StrixImpact.cs
Normal file
247
app/Peripherals/Mouse/Models/StrixImpact.cs
Normal file
@@ -0,0 +1,247 @@
|
|||||||
|
namespace GHelper.Peripherals.Mouse.Models
|
||||||
|
{
|
||||||
|
//P303
|
||||||
|
public class StrixImpact : AsusMouse
|
||||||
|
{
|
||||||
|
public StrixImpact() : base(0x0B05, 0x1847, "mi_02", false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public StrixImpact(ushort productId, string path) : base(0x0B05, productId, path, false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int DPIProfileCount()
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string GetDisplayName()
|
||||||
|
{
|
||||||
|
return "Strix Impact";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public override PollingRate[] SupportedPollingrates()
|
||||||
|
{
|
||||||
|
return new PollingRate[] {
|
||||||
|
PollingRate.PR125Hz,
|
||||||
|
PollingRate.PR250Hz,
|
||||||
|
PollingRate.PR500Hz,
|
||||||
|
PollingRate.PR1000Hz
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int ProfileCount()
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
public override int MaxDPI()
|
||||||
|
{
|
||||||
|
return 5_000;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool HasRGB()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool HasAutoPowerOff()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool HasDebounceSetting()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool HasLowBatteryWarning()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool HasBattery()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool HasDPIColors()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool IsLightingModeSupported(LightingMode lightingMode)
|
||||||
|
{
|
||||||
|
return lightingMode == LightingMode.Static
|
||||||
|
|| lightingMode == LightingMode.Breathing
|
||||||
|
|| lightingMode == LightingMode.ColorCycle
|
||||||
|
|| lightingMode == LightingMode.React;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override LightingZone[] SupportedLightingZones()
|
||||||
|
{
|
||||||
|
return new LightingZone[] { LightingZone.Logo };
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int DPIIncrements()
|
||||||
|
{
|
||||||
|
return 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public override int MinDPI()
|
||||||
|
{
|
||||||
|
return 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CanChangeDPIProfile()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int MaxBrightness()
|
||||||
|
{
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override byte[] GetUpdateLightingModePacket(LightingSetting lightingSetting, LightingZone zone)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* 51 28 00 00 [00] [04] [35 04 FF] 00 00 00 00 00 00 00
|
||||||
|
*/
|
||||||
|
|
||||||
|
return new byte[] { reportId, 0x51, 0x28, 0x00, 0x00,
|
||||||
|
IndexForLightingMode(lightingSetting.LightingMode),
|
||||||
|
(byte)lightingSetting.Brightness,
|
||||||
|
lightingSetting.RGBColor.R, lightingSetting.RGBColor.G, lightingSetting.RGBColor.B
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override byte[] GetReadLightingModePacket(LightingZone zone)
|
||||||
|
{
|
||||||
|
return new byte[] { 0x00, 0x12, 0x03, 0x00 };
|
||||||
|
}
|
||||||
|
|
||||||
|
protected LightingSetting? ParseLightingSetting(byte[] packet, LightingZone zone)
|
||||||
|
{
|
||||||
|
if (packet[1] != 0x12 || packet[2] != 0x03)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
int offset = 5 + (((int)zone) * 5);
|
||||||
|
|
||||||
|
LightingSetting setting = new LightingSetting();
|
||||||
|
|
||||||
|
setting.LightingMode = LightingModeForIndex(packet[offset + 0]);
|
||||||
|
setting.Brightness = packet[offset + 1];
|
||||||
|
|
||||||
|
setting.RGBColor = Color.FromArgb(packet[offset + 2], packet[offset + 3], packet[offset + 4]);
|
||||||
|
|
||||||
|
|
||||||
|
return setting;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void ReadLightingSetting()
|
||||||
|
{
|
||||||
|
if (!HasRGB())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Mouse sends all lighting zones in one response Direction, Random col, Speed
|
||||||
|
//00 12 03 00 00 [00 04 ff 00 80] [00 04 00 ff ff] [00 04 ff ff ff] 00 [00] [00] [00] 00 00
|
||||||
|
//00 12 03 00 00 [03 04 00 00 00] [03 04 00 00 00] [03 04 00 00 00] 00 [00] [00] [07] 00 00
|
||||||
|
byte[]? response = WriteForResponse(GetReadLightingModePacket(LightingZone.All));
|
||||||
|
if (response is null) return;
|
||||||
|
|
||||||
|
LightingZone[] lz = SupportedLightingZones();
|
||||||
|
for (int i = 0; i < lz.Length; ++i)
|
||||||
|
{
|
||||||
|
LightingSetting? ls = ParseLightingSetting(response, lz[i]);
|
||||||
|
if (ls is null)
|
||||||
|
{
|
||||||
|
Logger.WriteLine(GetDisplayName() + ": Failed to read RGB Setting for Zone " + lz[i].ToString());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ls.AnimationDirection = SupportsAnimationDirection(ls.LightingMode)
|
||||||
|
? (AnimationDirection)response[21]
|
||||||
|
: AnimationDirection.Clockwise;
|
||||||
|
|
||||||
|
ls.RandomColor = SupportsRandomColor(ls.LightingMode) && response[22] == 0x01;
|
||||||
|
|
||||||
|
ls.AnimationSpeed = SupportsAnimationSpeed(ls.LightingMode)
|
||||||
|
? (AnimationSpeed)response[23]
|
||||||
|
: AnimationSpeed.Medium;
|
||||||
|
|
||||||
|
if (ls.AnimationSpeed != AnimationSpeed.Fast
|
||||||
|
&& ls.AnimationSpeed != AnimationSpeed.Medium
|
||||||
|
&& ls.AnimationSpeed != AnimationSpeed.Slow)
|
||||||
|
{
|
||||||
|
ls.AnimationSpeed = AnimationSpeed.Medium;
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.WriteLine(GetDisplayName() + ": Read RGB Setting for Zone " + lz[i].ToString() + ": " + ls.ToString());
|
||||||
|
LightingSetting[i] = ls;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
protected override PollingRate ParsePollingRate(byte[] packet)
|
||||||
|
{
|
||||||
|
if (packet[1] == 0x12 && packet[2] == 0x04 && packet[3] == 0x00)
|
||||||
|
{
|
||||||
|
return (PollingRate)packet[9];
|
||||||
|
}
|
||||||
|
|
||||||
|
return PollingRate.PR125Hz;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override byte[] GetUpdatePollingRatePacket(PollingRate pollingRate)
|
||||||
|
{
|
||||||
|
return new byte[] { reportId, 0x51, 0x31, 0x02, 0x00, (byte)pollingRate };
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool ParseAngleSnapping(byte[] packet)
|
||||||
|
{
|
||||||
|
if (packet[1] == 0x12 && packet[2] == 0x04 && packet[3] == 0x00)
|
||||||
|
{
|
||||||
|
return packet[13] == 0x01;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override byte[] GetUpdateAngleSnappingPacket(bool angleSnapping)
|
||||||
|
{
|
||||||
|
return new byte[] { reportId, 0x51, 0x31, 0x04, 0x00, (byte)(angleSnapping ? 0x01 : 0x00) };
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override DebounceTime ParseDebounce(byte[] packet)
|
||||||
|
{
|
||||||
|
if (packet[1] != 0x12 || packet[2] != 0x04 || packet[3] != 0x00)
|
||||||
|
{
|
||||||
|
return DebounceTime.MS12;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packet[11] < 0x02)
|
||||||
|
{
|
||||||
|
return DebounceTime.MS12;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (packet[11] > 0x07)
|
||||||
|
{
|
||||||
|
return DebounceTime.MS32;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (DebounceTime)packet[11];
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override byte[] GetUpdateDebouncePacket(DebounceTime debounce)
|
||||||
|
{
|
||||||
|
return new byte[] { reportId, 0x51, 0x31, 0x03, 0x00, ((byte)debounce) };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -215,6 +215,7 @@ namespace GHelper.Peripherals
|
|||||||
DetectMouse(new SpathaX());
|
DetectMouse(new SpathaX());
|
||||||
DetectMouse(new StrixCarry());
|
DetectMouse(new StrixCarry());
|
||||||
DetectMouse(new StrixImpactIII());
|
DetectMouse(new StrixImpactIII());
|
||||||
|
DetectMouse(new StrixImpact());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DetectMouse(AsusMouse am)
|
public static void DetectMouse(AsusMouse am)
|
||||||
|
|||||||
@@ -331,7 +331,7 @@
|
|||||||
<value>Deshabilitar mando</value>
|
<value>Deshabilitar mando</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DisableOnLidClose" xml:space="preserve">
|
<data name="DisableOnLidClose" xml:space="preserve">
|
||||||
<value>Disable on lid close</value>
|
<value>Desactivar al cerrar la tapa</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="DisableOverdrive" xml:space="preserve">
|
<data name="DisableOverdrive" xml:space="preserve">
|
||||||
<value>Desactivar Overdrive</value>
|
<value>Desactivar Overdrive</value>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# G-Helper - Lightweight control tool for Asus laptops
|
# G-Helper - Lightweight control tool for Asus laptops
|
||||||
[](https://u24.gov.ua/)
|
[](https://u24.gov.ua/)
|
||||||
[](https://GitHub.com/seerge/g-helper/releases/)
|
[](https://GitHub.com/seerge/g-helper/releases/)
|
||||||
[](https://GitHub.com/seerge/g-helper/releases/) [](https://GitHub.com/seerge/g-helper/stargazers/)
|
[](https://GitHub.com/seerge/g-helper/releases/) [](https://GitHub.com/seerge/g-helper/stargazers/)
|
||||||
|
|
||||||
Small and lightweight Armoury Crate alternative for Asus laptops offering almost same functionality without extra bloat and unnecessary services.
|
Small and lightweight Armoury Crate alternative for Asus laptops offering almost same functionality without extra bloat 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, 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 / Scar Series, ProArt, VivoBook, Ally and many more!
|
||||||
|
|||||||
Reference in New Issue
Block a user