mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
85725fb782 | ||
|
|
d2cb6965e0 | ||
|
|
3f8083be50 | ||
|
|
1d30699fa2 | ||
|
|
060e3b7f7d | ||
|
|
2785bc6267 | ||
|
|
094fce0117 | ||
|
|
af9d3eb50e | ||
|
|
03f7d717b6 | ||
|
|
833b750227 | ||
|
|
b6dbc1ed25 |
@@ -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<double> maxes = new List<double>();
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ using System.Drawing.Drawing2D;
|
||||
using System.Drawing.Text;
|
||||
using System.Text;
|
||||
|
||||
namespace Starlight.AnimeMatrix
|
||||
namespace GHelper.AnimeMatrix
|
||||
{
|
||||
public class BuiltInAnimation
|
||||
{
|
||||
@@ -71,7 +71,6 @@ namespace Starlight.AnimeMatrix
|
||||
}
|
||||
|
||||
|
||||
|
||||
public enum BrightnessMode : byte
|
||||
{
|
||||
Off = 0,
|
||||
@@ -81,7 +80,6 @@ namespace Starlight.AnimeMatrix
|
||||
}
|
||||
|
||||
|
||||
|
||||
public class AnimeMatrixDevice : Device
|
||||
{
|
||||
int UpdatePageLength = 490;
|
||||
@@ -93,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;
|
||||
@@ -139,6 +136,56 @@ namespace Starlight.AnimeMatrix
|
||||
|
||||
}
|
||||
|
||||
public void WakeUp()
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(Encoding.ASCII.GetBytes("ASUS Tech.Inc.")));
|
||||
}
|
||||
|
||||
public void SetBrightness(BrightnessMode mode)
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x04, (byte)mode));
|
||||
}
|
||||
|
||||
public void SetDisplayState(bool enable)
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(0xC3, 0x01, enable ? (byte)0x00 : (byte)0x80));
|
||||
}
|
||||
|
||||
public void SetBuiltInAnimation(bool enable)
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(0xC4, 0x01, enable ? (byte)0x00 : (byte)0x80));
|
||||
}
|
||||
|
||||
public void SetBuiltInAnimation(bool enable, BuiltInAnimation animation)
|
||||
{
|
||||
SetBuiltInAnimation(enable);
|
||||
Set(Packet<AnimeMatrixPacket>(0xC5, animation.AsByte));
|
||||
}
|
||||
|
||||
public void Present()
|
||||
{
|
||||
|
||||
int page = 0;
|
||||
int start, end;
|
||||
|
||||
while (page * UpdatePageLength < LedCount)
|
||||
{
|
||||
start = page * UpdatePageLength;
|
||||
end = Math.Min(LedCount, (page + 1) * UpdatePageLength);
|
||||
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
||||
.AppendData(BitConverter.GetBytes((ushort)(start + 1)))
|
||||
.AppendData(BitConverter.GetBytes((ushort)(end - start)))
|
||||
.AppendData(_displayBuffer[start..end])
|
||||
);
|
||||
|
||||
page++;
|
||||
}
|
||||
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x03));
|
||||
}
|
||||
|
||||
|
||||
private void LoadMFont()
|
||||
{
|
||||
byte[] fontData = GHelper.Properties.Resources.MFont;
|
||||
@@ -151,10 +198,6 @@ namespace Starlight.AnimeMatrix
|
||||
System.Runtime.InteropServices.Marshal.FreeCoTaskMem(fontPtr);
|
||||
}
|
||||
|
||||
public byte[] GetBuffer()
|
||||
{
|
||||
return _displayBuffer;
|
||||
}
|
||||
|
||||
public void PresentNextFrame()
|
||||
{
|
||||
@@ -175,12 +218,6 @@ namespace Starlight.AnimeMatrix
|
||||
frames.Add(_displayBuffer.ToArray());
|
||||
}
|
||||
|
||||
public void SendRaw(params byte[] data)
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(data));
|
||||
}
|
||||
|
||||
|
||||
public int Width()
|
||||
{
|
||||
switch (_model)
|
||||
@@ -294,99 +331,19 @@ namespace Starlight.AnimeMatrix
|
||||
}
|
||||
|
||||
|
||||
public void WakeUp()
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(Encoding.ASCII.GetBytes("ASUS Tech.Inc.")));
|
||||
}
|
||||
|
||||
public void SetLedLinear(int address, byte value)
|
||||
{
|
||||
if (!IsAddressableLed(address)) return;
|
||||
_displayBuffer[address] = value;
|
||||
}
|
||||
|
||||
public void SetLedLinearImmediate(int address, byte value)
|
||||
{
|
||||
if (!IsAddressableLed(address)) return;
|
||||
_displayBuffer[address] = value;
|
||||
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
||||
.AppendData(BitConverter.GetBytes((ushort)(address + 1)))
|
||||
.AppendData(BitConverter.GetBytes((ushort)0x0001))
|
||||
.AppendData(value)
|
||||
);
|
||||
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x03));
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void Clear(bool present = false)
|
||||
{
|
||||
for (var i = 0; i < _displayBuffer.Length; i++)
|
||||
_displayBuffer[i] = 0;
|
||||
|
||||
if (present)
|
||||
Present();
|
||||
for (var i = 0; i < _displayBuffer.Length; i++) _displayBuffer[i] = 0;
|
||||
if (present) Present();
|
||||
}
|
||||
|
||||
public void Present()
|
||||
{
|
||||
|
||||
int page = 0;
|
||||
int start, end;
|
||||
|
||||
while (page * UpdatePageLength < LedCount)
|
||||
{
|
||||
start = page * UpdatePageLength;
|
||||
end = Math.Min(LedCount, (page + 1) * UpdatePageLength);
|
||||
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
||||
.AppendData(BitConverter.GetBytes((ushort)(start + 1)))
|
||||
.AppendData(BitConverter.GetBytes((ushort)(end - start)))
|
||||
.AppendData(_displayBuffer[start..end])
|
||||
);
|
||||
|
||||
page++;
|
||||
}
|
||||
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x03));
|
||||
}
|
||||
|
||||
public void SetDisplayState(bool enable)
|
||||
{
|
||||
if (enable)
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(0xC3, 0x01)
|
||||
.AppendData(0x00));
|
||||
}
|
||||
else
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(0xC3, 0x01)
|
||||
.AppendData(0x80));
|
||||
}
|
||||
}
|
||||
|
||||
public void SetBrightness(BrightnessMode mode)
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x04)
|
||||
.AppendData((byte)mode)
|
||||
);
|
||||
}
|
||||
|
||||
public void SetBuiltInAnimation(bool enable)
|
||||
{
|
||||
var enabled = enable ? (byte)0x00 : (byte)0x80;
|
||||
Set(Packet<AnimeMatrixPacket>(0xC4, 0x01, enabled));
|
||||
}
|
||||
|
||||
public void SetBuiltInAnimation(bool enable, BuiltInAnimation animation)
|
||||
{
|
||||
SetBuiltInAnimation(enable);
|
||||
Set(Packet<AnimeMatrixPacket>(0xC5, animation.AsByte));
|
||||
}
|
||||
|
||||
|
||||
private void SetBitmapDiagonal(Bitmap bmp, int deltaX = 0, int deltaY = 0, int contrast = 100)
|
||||
{
|
||||
for (int y = 0; y < bmp.Height; y++)
|
||||
|
||||
@@ -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();
|
||||
|
||||
138
app/AnimeMatrix/SlashDevice.cs
Normal file
138
app/AnimeMatrix/SlashDevice.cs
Normal file
@@ -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<SlashMode, string> Modes = new Dictionary<SlashMode, string>
|
||||
{
|
||||
{ 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<SlashMode, byte> modeCodes = new Dictionary<SlashMode, byte>
|
||||
{
|
||||
{ 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<SlashPacket>(Encoding.ASCII.GetBytes("ASUS Tech.Inc.")));
|
||||
}
|
||||
|
||||
public void Init()
|
||||
{
|
||||
Set(Packet<SlashPacket>(0xD7, 0x00, 0x00, 0x01, 0xAC));
|
||||
Set(Packet<SlashPacket>(0xD2, 0x02, 0x01, 0x08, 0xAB));
|
||||
}
|
||||
|
||||
public void Save()
|
||||
{
|
||||
Set(Packet<SlashPacket>(0xD4, 0x00, 0x00, 0x01, 0xAB));
|
||||
}
|
||||
|
||||
public void SetMode(SlashMode mode)
|
||||
{
|
||||
byte modeByte;
|
||||
|
||||
try
|
||||
{
|
||||
modeByte = modeCodes[mode];
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
modeByte = 0x00;
|
||||
}
|
||||
|
||||
Set(Packet<SlashPacket>(0xD2, 0x03, 0x00, 0x0C));
|
||||
Set(Packet<SlashPacket>(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<SlashPacket>(0xD3, 0x03, 0x01, 0x08, 0xAB, 0xFF, 0x01, status ? (byte)0x01 : (byte)0x00, 0x06, brightnessByte, 0xFF, (byte)interval));
|
||||
}
|
||||
|
||||
public void SetBatterySaver(bool status)
|
||||
{
|
||||
Set(Packet<SlashPacket>(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));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -101,6 +101,8 @@ public static class AppConfig
|
||||
}
|
||||
}
|
||||
|
||||
//if (_model.Contains("GA402RK")) _model = "ROG Zephyrus G14 GA403UI"; // Debug Purposes
|
||||
|
||||
return _model;
|
||||
}
|
||||
|
||||
@@ -377,6 +379,16 @@ 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") || IsSlash();
|
||||
}
|
||||
|
||||
public static bool IsStrix()
|
||||
{
|
||||
return ContainsModel("Strix") || ContainsModel("Scar") || ContainsModel("G703G");
|
||||
@@ -387,6 +399,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");
|
||||
|
||||
@@ -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 { }
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -66,7 +66,7 @@ namespace GHelper.Input
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.ToString());
|
||||
Logger.WriteLine($"Listener exited: {ex.Message}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -229,7 +229,7 @@ namespace GHelper
|
||||
|
||||
BatteryControl.AutoBattery(init);
|
||||
|
||||
settingsForm.matrixControl.SetMatrix(true);
|
||||
settingsForm.matrixControl.SetDevice(true);
|
||||
|
||||
if (AppConfig.IsAlly())
|
||||
{
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
<value>Rapide</value>
|
||||
</data>
|
||||
<data name="AuraLightingMode" xml:space="preserve">
|
||||
<value>Mode d’Éclairage</value>
|
||||
<value>Effets d'éclairage</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>Normal</value>
|
||||
@@ -235,7 +235,7 @@
|
||||
<value>Molette</value>
|
||||
</data>
|
||||
<data name="AuraZoneUnderglow" xml:space="preserve">
|
||||
<value>Underglow</value>
|
||||
<value>Led ROG</value>
|
||||
</data>
|
||||
<data name="AutoApply" xml:space="preserve">
|
||||
<value>Appliquer automatiquement</value>
|
||||
@@ -363,7 +363,7 @@ Voulez-vous continuer ?</value>
|
||||
<value>Paramètres d'énergie</value>
|
||||
</data>
|
||||
<data name="Export" xml:space="preserve">
|
||||
<value>Exporter un profil</value>
|
||||
<value>Exporter profil</value>
|
||||
</data>
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<value>+ d'options</value>
|
||||
@@ -441,7 +441,7 @@ Voulez-vous continuer ?</value>
|
||||
<value>Rotation de l'image</value>
|
||||
</data>
|
||||
<data name="Import" xml:space="preserve">
|
||||
<value>Importer un profil</value>
|
||||
<value>Importer profil</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>Raccourcis clavier</value>
|
||||
@@ -522,7 +522,7 @@ Voulez-vous continuer ?</value>
|
||||
<value>Minutes</value>
|
||||
</data>
|
||||
<data name="MouseAngleSnapping" xml:space="preserve">
|
||||
<value>Angle Snapping</value>
|
||||
<value>Correction d'angle</value>
|
||||
</data>
|
||||
<data name="MouseAutoPowerOff" xml:space="preserve">
|
||||
<value>Arrêt automatique après</value>
|
||||
@@ -534,7 +534,7 @@ Voulez-vous continuer ?</value>
|
||||
<value>Échec de l'importation. Le fichier sélectionné n'est pas un profil de souris valide ou corrompu.</value>
|
||||
</data>
|
||||
<data name="MouseLiftOffDistance" xml:space="preserve">
|
||||
<value>Lift Off Distance</value>
|
||||
<value>Hauteur de détection</value>
|
||||
</data>
|
||||
<data name="MouseLowBatteryWarning" xml:space="preserve">
|
||||
<value>Avertissement de batterie faible à</value>
|
||||
|
||||
@@ -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;
|
||||
|
||||
63
app/Settings.Designer.cs
generated
63
app/Settings.Designer.cs
generated
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.ContainsModel("GA503"))
|
||||
AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xBA, 0xC5, 0xC4, (byte)brightness }, log);
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user