mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
37 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2939aa4c43 | ||
|
|
4fd087b19b | ||
|
|
062301555c | ||
|
|
744b304d4b | ||
|
|
4863946ca3 | ||
|
|
6f0c92e55d | ||
|
|
b3711f005f | ||
|
|
03bff51850 | ||
|
|
cf84fa0616 | ||
|
|
42a598f177 | ||
|
|
ebfb9b3875 | ||
|
|
60c4e08347 | ||
|
|
e98cd2f5c1 | ||
|
|
697b5f0d2f | ||
|
|
b638382799 | ||
|
|
5f6afc0c6e | ||
|
|
8de06ce5ad | ||
|
|
85725fb782 | ||
|
|
d2cb6965e0 | ||
|
|
3f8083be50 | ||
|
|
1d30699fa2 | ||
|
|
060e3b7f7d | ||
|
|
2785bc6267 | ||
|
|
094fce0117 | ||
|
|
af9d3eb50e | ||
|
|
03f7d717b6 | ||
|
|
833b750227 | ||
|
|
b6dbc1ed25 | ||
|
|
103c65a43d | ||
|
|
d19ff265ab | ||
|
|
5d71a40987 | ||
|
|
9b33a43b49 | ||
|
|
df5bcbc376 | ||
|
|
71b74801ba | ||
|
|
6bab2fc9cb | ||
|
|
428b624ec6 | ||
|
|
af001b056a |
@@ -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 && AppConfig.ContainsModel("401")) 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,11 +36,12 @@ namespace GHelper.AnimeMatrix.Communication.Platform
|
||||
{
|
||||
HidDevice = DeviceList.Local
|
||||
.GetHidDevices(vendorId, productId)
|
||||
.First(x => x.GetMaxFeatureReportLength() == maxFeatureReportLength);
|
||||
.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,21 @@ 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 IsOLED()
|
||||
{
|
||||
return ContainsModel("OLED") || IsSlash() || ContainsModel("UX64") || ContainsModel("UX34") || ContainsModel("K360") || ContainsModel("X150");
|
||||
}
|
||||
|
||||
public static bool IsStrix()
|
||||
{
|
||||
return ContainsModel("Strix") || ContainsModel("Scar") || ContainsModel("G703G");
|
||||
@@ -387,6 +404,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");
|
||||
@@ -465,6 +487,21 @@ public static class AppConfig
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsSwappedFans()
|
||||
{
|
||||
if (!ContainsModel("GA503R")) return false;
|
||||
|
||||
try
|
||||
{
|
||||
var (bios, model) = GetBiosAndModel();
|
||||
return (Int32.Parse(bios) == 317);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsFanRequired()
|
||||
{
|
||||
return ContainsModel("GA402X") || ContainsModel("G513") || ContainsModel("G713R") || ContainsModel("G713P");
|
||||
|
||||
@@ -46,7 +46,6 @@ public class AsusACPI
|
||||
public const int KB_DUO_PgUpDn = 0x4B;
|
||||
public const int KB_DUO_SecondDisplay = 0x6A;
|
||||
|
||||
|
||||
public const int Touchpad_Toggle = 0x6B;
|
||||
|
||||
public const int ChargerMode = 0x0012006C;
|
||||
@@ -106,7 +105,7 @@ public class AsusACPI
|
||||
public const int TUF_KB2 = 0x0010005a;
|
||||
public const int TUF_KB_STATE = 0x00100057;
|
||||
|
||||
public const int MICMUTE_LED = 0x00040017;
|
||||
public const int MicMuteLed = 0x00040017;
|
||||
|
||||
public const int TabletState = 0x00060077;
|
||||
public const int FnLock = 0x00100023;
|
||||
@@ -114,6 +113,8 @@ public class AsusACPI
|
||||
public const int ScreenPadToggle = 0x00050031;
|
||||
public const int ScreenPadBrightness = 0x00050032;
|
||||
|
||||
public const int CameraLed = 0x00060079;
|
||||
|
||||
public const int BootSound = 0x00130022;
|
||||
|
||||
public const int Tablet_Notebook = 0;
|
||||
@@ -477,7 +478,11 @@ public class AsusACPI
|
||||
|
||||
if (fanScale != 100 && device == AsusFan.CPU) Logger.WriteLine("Custom fan scale: " + fanScale);
|
||||
|
||||
// it seems to be a bug, when some old model's bios can go nuts if fan is set to 100%
|
||||
if (AppConfig.IsSwappedFans())
|
||||
{
|
||||
device = (device == AsusFan.CPU) ? AsusFan.GPU : AsusFan.CPU;
|
||||
Logger.WriteLine("Swapped fan fix");
|
||||
}
|
||||
|
||||
for (int i = 8; i < curve.Length; i++) curve[i] = (byte)(Math.Max((byte)0, Math.Min((byte)100, curve[i])) * fanScale / 100);
|
||||
|
||||
@@ -509,16 +514,25 @@ public class AsusACPI
|
||||
default: fan_mode = 0; break;
|
||||
}
|
||||
|
||||
byte[] result;
|
||||
|
||||
switch (device)
|
||||
{
|
||||
case AsusFan.GPU:
|
||||
return DeviceGetBuffer(DevsGPUFanCurve, fan_mode);
|
||||
result = DeviceGetBuffer(DevsGPUFanCurve, fan_mode);
|
||||
break;
|
||||
case AsusFan.Mid:
|
||||
return DeviceGetBuffer(DevsMidFanCurve, fan_mode);
|
||||
result = DeviceGetBuffer(DevsMidFanCurve, fan_mode);
|
||||
break;
|
||||
default:
|
||||
return DeviceGetBuffer(DevsCPUFanCurve, fan_mode);
|
||||
result = DeviceGetBuffer(DevsCPUFanCurve, fan_mode);
|
||||
break;
|
||||
}
|
||||
|
||||
Logger.WriteLine($"GetFan {device} :" + BitConverter.ToString(result));
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static bool IsInvalidCurve(byte[] curve)
|
||||
@@ -660,22 +674,32 @@ public class AsusACPI
|
||||
}
|
||||
}
|
||||
|
||||
public void ScanRange()
|
||||
public string ScanRange()
|
||||
{
|
||||
int value;
|
||||
string appPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\GHelper";
|
||||
string logFile = appPath + "\\scan.txt";
|
||||
for (uint i = 0x00000000; i <= 0x00160000; i++)
|
||||
using (StreamWriter w = File.AppendText(logFile))
|
||||
{
|
||||
value = DeviceGet(i);
|
||||
if (value >= 0)
|
||||
using (StreamWriter w = File.AppendText(logFile))
|
||||
w.WriteLine($"Scan started {DateTime.Now}");
|
||||
for (uint i = 0x00000000; i <= 0x00160000; i += 0x10000)
|
||||
{
|
||||
for (uint j = 0x00; j <= 0xFF; j++)
|
||||
{
|
||||
w.WriteLine(i.ToString("X8") + ": " + value.ToString("X4") + " (" + value + ")");
|
||||
w.Close();
|
||||
uint id = i + j;
|
||||
value = DeviceGet(id);
|
||||
if (value >= 0)
|
||||
{
|
||||
w.WriteLine(id.ToString("X8") + ": " + value.ToString("X4") + " (" + value + ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
w.WriteLine($"---------------------");
|
||||
w.Close();
|
||||
}
|
||||
|
||||
return logFile;
|
||||
|
||||
}
|
||||
|
||||
public void TUFKeyboardBrightness(int brightness)
|
||||
|
||||
112
app/Display/DisplayGammaRamp.cs
Normal file
112
app/Display/DisplayGammaRamp.cs
Normal file
@@ -0,0 +1,112 @@
|
||||
namespace GHelper.Display
|
||||
{
|
||||
|
||||
public class DisplayGammaRamp
|
||||
{
|
||||
|
||||
public DisplayGammaRamp(ushort[] red, ushort[] green, ushort[] blue)
|
||||
{
|
||||
if (red?.Length != GammaRamp.DataPoints)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(red));
|
||||
}
|
||||
|
||||
if (green?.Length != GammaRamp.DataPoints)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(green));
|
||||
}
|
||||
|
||||
if (blue?.Length != GammaRamp.DataPoints)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(blue));
|
||||
}
|
||||
|
||||
Red = red;
|
||||
Green = green;
|
||||
Blue = blue;
|
||||
}
|
||||
|
||||
public DisplayGammaRamp(double brightness = 1, double contrast = 1, double gamma = 1)
|
||||
: this(
|
||||
CalculateLUT(brightness, contrast, gamma),
|
||||
CalculateLUT(brightness, contrast, gamma),
|
||||
CalculateLUT(brightness, contrast, gamma)
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
public DisplayGammaRamp(
|
||||
double redBrightness,
|
||||
double redContrast,
|
||||
double redGamma,
|
||||
double greenBrightness,
|
||||
double greenContrast,
|
||||
double greenGamma,
|
||||
double blueBrightness,
|
||||
double blueContrast,
|
||||
double blueGamma
|
||||
)
|
||||
: this(
|
||||
CalculateLUT(redBrightness, redContrast, redGamma),
|
||||
CalculateLUT(greenBrightness, greenContrast, greenGamma),
|
||||
CalculateLUT(blueBrightness, blueContrast, blueGamma)
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
internal DisplayGammaRamp(GammaRamp ramp) :
|
||||
this(ramp.Red, ramp.Green, ramp.Blue)
|
||||
{
|
||||
}
|
||||
public ushort[] Blue { get; }
|
||||
public ushort[] Green { get; }
|
||||
public ushort[] Red { get; }
|
||||
private static ushort[] CalculateLUT(double brightness, double contrast, double gamma)
|
||||
{
|
||||
brightness = 0.5 + brightness / 2;
|
||||
var result = new ushort[GammaRamp.DataPoints];
|
||||
for (var i = 0; i < result.Length; i++)
|
||||
{
|
||||
result[i] = (ushort)(brightness * ushort.MaxValue * i / (float)(result.Length - 1));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public bool IsOriginal()
|
||||
{
|
||||
int MaxRed = Red[Red.Length - 1];
|
||||
int MaxGreen = Green[Green.Length - 1];
|
||||
int MaxBlue = Blue[Blue.Length - 1];
|
||||
return (Math.Abs((MaxRed + MaxGreen + MaxBlue) / 3 - ushort.MaxValue) < 256);
|
||||
}
|
||||
|
||||
private static ushort[] Brightness(ushort[] data, double brightness)
|
||||
{
|
||||
var result = new ushort[GammaRamp.DataPoints];
|
||||
for (var i = 0; i < result.Length; i++)
|
||||
{
|
||||
if (brightness < 0.5)
|
||||
result[i] = (ushort)(0.5 * ushort.MaxValue * Math.Pow((float)i/(result.Length - 1), 2 - brightness*2));
|
||||
else
|
||||
result[i] = (ushort)(data[i] * brightness);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal GammaRamp AsBrightnessRamp(double brightness)
|
||||
{
|
||||
return new GammaRamp(
|
||||
Brightness(Red, brightness),
|
||||
Brightness(Green, brightness),
|
||||
Brightness(Blue, brightness)
|
||||
);
|
||||
}
|
||||
|
||||
internal GammaRamp AsRamp()
|
||||
{
|
||||
return new GammaRamp(Red, Green, Blue);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
56
app/Display/GammaRamp.cs
Normal file
56
app/Display/GammaRamp.cs
Normal file
@@ -0,0 +1,56 @@
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace GHelper.Display
|
||||
{
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct GammaRamp
|
||||
{
|
||||
public const int DataPoints = 256;
|
||||
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = DataPoints)]
|
||||
public readonly ushort[] Red;
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = DataPoints)]
|
||||
public readonly ushort[] Green;
|
||||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = DataPoints)]
|
||||
public readonly ushort[] Blue;
|
||||
|
||||
public GammaRamp(ushort[] red, ushort[] green, ushort[] blue)
|
||||
{
|
||||
if (red == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(red));
|
||||
}
|
||||
|
||||
if (green == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(green));
|
||||
}
|
||||
|
||||
if (blue == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(blue));
|
||||
}
|
||||
|
||||
if (red.Length != DataPoints)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(red));
|
||||
}
|
||||
|
||||
if (green.Length != DataPoints)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(green));
|
||||
}
|
||||
|
||||
if (blue.Length != DataPoints)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(blue));
|
||||
}
|
||||
|
||||
Red = red;
|
||||
Green = green;
|
||||
Blue = blue;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace GHelper.Display
|
||||
{
|
||||
@@ -7,6 +7,8 @@ namespace GHelper.Display
|
||||
|
||||
public const int MAX_REFRESH = 1000;
|
||||
|
||||
public static DisplayGammaRamp? gammaRamp;
|
||||
|
||||
public void AutoScreen(bool force = false)
|
||||
{
|
||||
if (force || AppConfig.Is("screen_auto"))
|
||||
@@ -22,6 +24,70 @@ namespace GHelper.Display
|
||||
}
|
||||
}
|
||||
|
||||
public void SaveGamma()
|
||||
{
|
||||
var screenName = ScreenNative.FindLaptopScreen();
|
||||
if (screenName is null) return;
|
||||
|
||||
try
|
||||
{
|
||||
var handle = ScreenNative.CreateDC(screenName, screenName, null, IntPtr.Zero);
|
||||
var gammaRamp = new GammaRamp();
|
||||
if (ScreenNative.GetDeviceGammaRamp(handle, ref gammaRamp))
|
||||
{
|
||||
var gamma = new DisplayGammaRamp(gammaRamp);
|
||||
Logger.WriteLine("Gamma R: " + string.Join("-", gamma.Red));
|
||||
Logger.WriteLine("Gamma G: " + string.Join("-", gamma.Green));
|
||||
Logger.WriteLine("Gamma B: " + string.Join("-", gamma.Blue));
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public void SetGamma(int brightness = 100)
|
||||
{
|
||||
var bright = Math.Round((float)brightness / 200 + 0.5, 2);
|
||||
|
||||
var screenName = ScreenNative.FindLaptopScreen();
|
||||
if (screenName is null) return;
|
||||
|
||||
try
|
||||
{
|
||||
var handle = ScreenNative.CreateDC(screenName, screenName, null, IntPtr.Zero);
|
||||
if (gammaRamp is null)
|
||||
{
|
||||
var gammaDump = new GammaRamp();
|
||||
if (ScreenNative.GetDeviceGammaRamp(handle, ref gammaDump))
|
||||
{
|
||||
gammaRamp = new DisplayGammaRamp(gammaDump);
|
||||
Logger.WriteLine("Gamma R: " + string.Join("-", gammaRamp.Red));
|
||||
Logger.WriteLine("Gamma G: " + string.Join("-", gammaRamp.Green));
|
||||
Logger.WriteLine("Gamma B: " + string.Join("-", gammaRamp.Blue));
|
||||
}
|
||||
}
|
||||
|
||||
if (gammaRamp is null || !gammaRamp.IsOriginal())
|
||||
{
|
||||
Logger.WriteLine("Default Gamma");
|
||||
gammaRamp = new DisplayGammaRamp();
|
||||
}
|
||||
|
||||
var ramp = gammaRamp.AsBrightnessRamp(bright);
|
||||
bool result = ScreenNative.SetDeviceGammaRamp(handle, ref ramp);
|
||||
|
||||
Logger.WriteLine("Brightness " + bright.ToString() + ": " + result);
|
||||
|
||||
} catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.ToString());
|
||||
}
|
||||
|
||||
//ScreenBrightness.Set(60 + (int)(40 * bright));
|
||||
}
|
||||
|
||||
public void SetScreen(int frequency = -1, int overdrive = -1, int miniled = -1)
|
||||
{
|
||||
var laptopScreen = ScreenNative.FindLaptopScreen(true);
|
||||
@@ -71,7 +137,8 @@ namespace GHelper.Display
|
||||
if (miniled1 >= 0)
|
||||
{
|
||||
miniled = (miniled1 == 1) ? 0 : 1;
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (miniled2)
|
||||
{
|
||||
|
||||
@@ -32,6 +32,16 @@ namespace GHelper.Display
|
||||
}
|
||||
internal class ScreenNative
|
||||
{
|
||||
|
||||
[DllImport("gdi32", CharSet = CharSet.Unicode)]
|
||||
internal static extern IntPtr CreateDC(string driver, string device, string port, IntPtr deviceMode);
|
||||
|
||||
[DllImport("gdi32")]
|
||||
internal static extern bool SetDeviceGammaRamp(IntPtr dcHandle, ref GammaRamp ramp);
|
||||
|
||||
[DllImport("gdi32")]
|
||||
internal static extern bool GetDeviceGammaRamp(IntPtr dcHandle, ref GammaRamp ramp);
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
||||
public struct DEVMODE
|
||||
{
|
||||
@@ -146,7 +156,7 @@ namespace GHelper.Display
|
||||
public const string defaultDevice = @"\\.\DISPLAY1";
|
||||
|
||||
|
||||
private static string? FindInternalName(bool log = false)
|
||||
public static string? FindInternalName(bool log = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
19
app/Extra.Designer.cs
generated
19
app/Extra.Designer.cs
generated
@@ -120,6 +120,7 @@ namespace GHelper
|
||||
comboAPU = new RComboBox();
|
||||
pictureAPUMem = new PictureBox();
|
||||
labelAPUMem = new Label();
|
||||
pictureScan = new PictureBox();
|
||||
panelServices.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureService).BeginInit();
|
||||
panelBindingsHeader.SuspendLayout();
|
||||
@@ -144,6 +145,7 @@ namespace GHelper
|
||||
((System.ComponentModel.ISupportInitialize)pictureHibernate).BeginInit();
|
||||
panelAPU.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureAPUMem).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)pictureScan).BeginInit();
|
||||
SuspendLayout();
|
||||
//
|
||||
// panelServices
|
||||
@@ -1003,6 +1005,7 @@ namespace GHelper
|
||||
//
|
||||
panelSettingsHeader.AutoSize = true;
|
||||
panelSettingsHeader.BackColor = SystemColors.ControlLight;
|
||||
panelSettingsHeader.Controls.Add(pictureScan);
|
||||
panelSettingsHeader.Controls.Add(pictureLog);
|
||||
panelSettingsHeader.Controls.Add(pictureSettings);
|
||||
panelSettingsHeader.Controls.Add(labelSettings);
|
||||
@@ -1263,6 +1266,20 @@ namespace GHelper
|
||||
labelAPUMem.TabIndex = 0;
|
||||
labelAPUMem.Text = "Memory Assigned to GPU";
|
||||
//
|
||||
// pictureScan
|
||||
//
|
||||
pictureScan.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
pictureScan.BackgroundImage = Resources.icons8_heartbeat_32;
|
||||
pictureScan.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
pictureScan.Cursor = Cursors.Hand;
|
||||
pictureScan.Location = new Point(891, 11);
|
||||
pictureScan.Margin = new Padding(4, 3, 4, 3);
|
||||
pictureScan.Name = "pictureScan";
|
||||
pictureScan.Size = new Size(32, 32);
|
||||
pictureScan.TabIndex = 13;
|
||||
pictureScan.TabStop = false;
|
||||
pictureScan.Visible = false;
|
||||
//
|
||||
// Extra
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(192F, 192F);
|
||||
@@ -1326,6 +1343,7 @@ namespace GHelper
|
||||
panelAPU.ResumeLayout(false);
|
||||
panelAPU.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureAPUMem).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)pictureScan).EndInit();
|
||||
ResumeLayout(false);
|
||||
PerformLayout();
|
||||
}
|
||||
@@ -1420,5 +1438,6 @@ namespace GHelper
|
||||
private PictureBox pictureAPUMem;
|
||||
private Label labelAPUMem;
|
||||
private RComboBox comboAPU;
|
||||
private PictureBox pictureScan;
|
||||
}
|
||||
}
|
||||
13
app/Extra.cs
13
app/Extra.cs
@@ -386,6 +386,7 @@ namespace GHelper
|
||||
buttonServices.Click += ButtonServices_Click;
|
||||
|
||||
pictureLog.Click += PictureLog_Click;
|
||||
pictureScan.Click += PictureScan_Click;
|
||||
|
||||
checkGPUFix.Visible = Program.acpi.IsNVidiaGPU();
|
||||
checkGPUFix.Checked = AppConfig.IsGPUFix();
|
||||
@@ -398,6 +399,18 @@ namespace GHelper
|
||||
InitHibernate();
|
||||
}
|
||||
|
||||
private void PictureScan_Click(object? sender, EventArgs e)
|
||||
{
|
||||
string logFile = Program.acpi.ScanRange();
|
||||
new Process
|
||||
{
|
||||
StartInfo = new ProcessStartInfo(logFile)
|
||||
{
|
||||
UseShellExecute = true
|
||||
}
|
||||
}.Start();
|
||||
}
|
||||
|
||||
private void ComboAPU_SelectedIndexChanged(object? sender, EventArgs e)
|
||||
{
|
||||
int mem = comboAPU.SelectedIndex;
|
||||
|
||||
@@ -953,7 +953,7 @@ namespace GHelper
|
||||
int chartCount = 2;
|
||||
|
||||
// Middle / system fan check
|
||||
if (!AsusACPI.IsEmptyCurve(Program.acpi.GetFanCurve(AsusFan.Mid)))
|
||||
if (!AsusACPI.IsEmptyCurve(Program.acpi.GetFanCurve(AsusFan.Mid)) || Program.acpi.GetFan(AsusFan.Mid) >= 0)
|
||||
{
|
||||
AppConfig.Set("mid_fan", 1);
|
||||
chartCount++;
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||
<AssemblyVersion>0.152</AssemblyVersion>
|
||||
<AssemblyVersion>0.154</AssemblyVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
||||
@@ -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 { }
|
||||
|
||||
@@ -500,7 +500,7 @@ namespace GHelper.Input
|
||||
case "micmute":
|
||||
bool muteStatus = Audio.ToggleMute();
|
||||
Program.toast.RunToast(muteStatus ? "Muted" : "Unmuted", muteStatus ? ToastIcon.MicrophoneMute : ToastIcon.Microphone);
|
||||
if (AppConfig.IsVivobook()) Program.acpi.DeviceSet(AsusACPI.MICMUTE_LED, muteStatus ? 1 : 0, "MicmuteLed");
|
||||
if (AppConfig.IsVivobook()) Program.acpi.DeviceSet(AsusACPI.MicMuteLed, muteStatus ? 1 : 0, "MicmuteLed");
|
||||
break;
|
||||
case "brightness_up":
|
||||
SetBrightness(+10);
|
||||
@@ -628,6 +628,9 @@ namespace GHelper.Input
|
||||
{
|
||||
switch (EventID)
|
||||
{
|
||||
case 134: // FN + F12 ON OLD DEVICES
|
||||
KeyProcess("m4");
|
||||
return;
|
||||
case 124: // M3
|
||||
KeyProcess("m3");
|
||||
return;
|
||||
@@ -638,7 +641,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");
|
||||
@@ -706,6 +709,9 @@ namespace GHelper.Input
|
||||
else
|
||||
Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Brightness_Up, "Brightness");
|
||||
break;
|
||||
case 133: // Camera Toggle
|
||||
ToggleCamera();
|
||||
break;
|
||||
case 107: // FN+F10
|
||||
ToggleTouchpadEvent();
|
||||
break;
|
||||
@@ -784,6 +790,36 @@ namespace GHelper.Input
|
||||
Program.toast.RunToast($"Screen Pad " + (toggle == 1 ? "On" : "Off"), toggle > 0 ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown);
|
||||
}
|
||||
|
||||
public static void ToggleCamera()
|
||||
{
|
||||
if (!ProcessHelper.IsUserAdministrator()) return;
|
||||
|
||||
string CameraRegistryKeyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\webcam";
|
||||
string CameraRegistryValueName = "Value";
|
||||
|
||||
try
|
||||
{
|
||||
var status = (string?)Registry.GetValue(CameraRegistryKeyPath, CameraRegistryValueName, "");
|
||||
|
||||
if (status == "Allow") status = "Deny";
|
||||
else if (status == "Deny") status = "Allow";
|
||||
else
|
||||
{
|
||||
Logger.WriteLine("Unknown camera status");
|
||||
return;
|
||||
}
|
||||
|
||||
Registry.SetValue(CameraRegistryKeyPath, CameraRegistryValueName, status, RegistryValueKind.String);
|
||||
Program.acpi.DeviceSet(AsusACPI.CameraLed, (status == "Deny" ? 1 : 0), "Camera");
|
||||
Program.toast.RunToast($"Camera " + (status == "Deny" ? "Off" : "On"));
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.ToString());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void SetScreenpad(int delta)
|
||||
{
|
||||
|
||||
@@ -24,26 +24,30 @@ public sealed class KeyboardHook : IDisposable
|
||||
public static void KeyPress(Keys key)
|
||||
{
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
|
||||
Thread.Sleep(1);
|
||||
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
}
|
||||
|
||||
public static void KeyKeyPress(Keys key, Keys key2)
|
||||
{
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
|
||||
Thread.Sleep(1);
|
||||
|
||||
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
}
|
||||
|
||||
public static void KeyKeyKeyPress(Keys key, Keys key2, Keys key3, int sleep = 0)
|
||||
public static void KeyKeyKeyPress(Keys key, Keys key2, Keys key3, int sleep = 1)
|
||||
{
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
keybd_event((byte)key3, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
|
||||
if (sleep > 0)
|
||||
{
|
||||
Thread.Sleep(sleep);
|
||||
}
|
||||
Thread.Sleep(sleep);
|
||||
|
||||
keybd_event((byte)key3, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
|
||||
@@ -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())
|
||||
{
|
||||
@@ -266,7 +266,7 @@ namespace GHelper
|
||||
{
|
||||
// If helper window is not on top, this just focuses on the app again
|
||||
// Pressing the ghelper button again will hide the app
|
||||
if (checkForFocus && !settingsForm.HasAnyFocus(trayClick))
|
||||
if (checkForFocus && !settingsForm.HasAnyFocus(trayClick) && !AppConfig.Is("topmost"))
|
||||
{
|
||||
settingsForm.ShowAll();
|
||||
}
|
||||
|
||||
10
app/Properties/Resources.Designer.cs
generated
10
app/Properties/Resources.Designer.cs
generated
@@ -210,6 +210,16 @@ namespace GHelper.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
internal static System.Drawing.Bitmap icons8_brightness_32 {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icons8-brightness-32", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||
/// </summary>
|
||||
|
||||
@@ -136,6 +136,9 @@
|
||||
<data name="icons8-bicycle-48 (1)" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-bicycle-48 (1).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="standard" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\standard.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="eco" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\eco.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
@@ -163,9 +166,15 @@
|
||||
<data name="icons8-automation-32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-automation-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-settings-32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-settings-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="brightness_up" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\brightness-up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="brightness_down" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\brightness-down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8_processor_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-processor-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
@@ -187,15 +196,9 @@
|
||||
<data name="icons8-laptop-32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-laptop-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ally" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ally.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8_remove_64" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-remove-64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8_share_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-share-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8_function" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-function-mac-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
@@ -229,14 +232,11 @@
|
||||
<data name="icons8-xbox-rt-32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-xbox-rt-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8_controller_96" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-controller-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-fan-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-fan-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-settings-32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-settings-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="icons8_controller_96" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-controller-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8_maus_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-maus-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
@@ -250,8 +250,11 @@
|
||||
<data name="dot_ultimate" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\dot-ultimate.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="brightness_down" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\brightness-down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="icons8-heartbeat-32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-heartbeat-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="ally" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\ally.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="backlight_up" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\backlight-up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
@@ -319,8 +322,8 @@
|
||||
<data name="icons8_software_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-software-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="standard" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\standard.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="icons8_share_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-share-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-soonvibes-32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-soonvibes-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
@@ -331,7 +334,7 @@
|
||||
<data name="icons8-charging-battery-32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-charging-battery-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icons8-heartbeat-32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-heartbeat-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
<data name="icons8-brightness-32" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\icons8-brightness-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -145,7 +145,7 @@
|
||||
<value>¿Reiniciar ahora?</value>
|
||||
</data>
|
||||
<data name="AllyController" xml:space="preserve">
|
||||
<value>Ally Controller</value>
|
||||
<value>Mando Ally</value>
|
||||
</data>
|
||||
<data name="AnimationSpeed" xml:space="preserve">
|
||||
<value>Velocidad</value>
|
||||
@@ -274,13 +274,13 @@
|
||||
<value>Cargar una vez al 100%</value>
|
||||
</data>
|
||||
<data name="Binding" xml:space="preserve">
|
||||
<value>Binding</value>
|
||||
<value>Emparejado</value>
|
||||
</data>
|
||||
<data name="BindingPrimary" xml:space="preserve">
|
||||
<value>Primary</value>
|
||||
<value>Primario</value>
|
||||
</data>
|
||||
<data name="BindingSecondary" xml:space="preserve">
|
||||
<value>Secondary</value>
|
||||
<value>Secundario</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>Actualizaciones de BIOS y Drivers</value>
|
||||
@@ -310,10 +310,10 @@
|
||||
<value>Color</value>
|
||||
</data>
|
||||
<data name="Contrast" xml:space="preserve">
|
||||
<value>Contrast</value>
|
||||
<value>Contraste</value>
|
||||
</data>
|
||||
<data name="Controller" xml:space="preserve">
|
||||
<value>Controller</value>
|
||||
<value>Mando</value>
|
||||
</data>
|
||||
<data name="CPUBoost" xml:space="preserve">
|
||||
<value>CPU Boost</value>
|
||||
@@ -328,7 +328,7 @@
|
||||
<value>Por defecto</value>
|
||||
</data>
|
||||
<data name="DisableController" xml:space="preserve">
|
||||
<value>Disable Controller</value>
|
||||
<value>Deshabilitar mando</value>
|
||||
</data>
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<value>Desactivar Overdrive</value>
|
||||
@@ -349,7 +349,7 @@
|
||||
<value>Eco</value>
|
||||
</data>
|
||||
<data name="EnableGPUOnShutdown" xml:space="preserve">
|
||||
<value>Enable GPU on shutdown (prevents issue with Eco mode)</value>
|
||||
<value>Habilitar GPU al apagar (evita problemas con el modo Eco)</value>
|
||||
</data>
|
||||
<data name="EnableOptimusText" xml:space="preserve">
|
||||
<value>Deshabilitar la dGPU cambiando a modo Eco mientras el Modo de Pantalla en el Panel de Control de NVIDIA no está configurado en Optimus puede causar problemas con el control del brillo hasta después del próximo reinicio.
|
||||
@@ -363,7 +363,7 @@
|
||||
<value>Ajustes de energía</value>
|
||||
</data>
|
||||
<data name="Export" xml:space="preserve">
|
||||
<value>Export Profile</value>
|
||||
<value>Exportar perfil</value>
|
||||
</data>
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<value>Adicional</value>
|
||||
@@ -438,10 +438,10 @@
|
||||
<value>Alto</value>
|
||||
</data>
|
||||
<data name="ImageRotation" xml:space="preserve">
|
||||
<value>Image Rotation</value>
|
||||
<value>Rotación de imagen</value>
|
||||
</data>
|
||||
<data name="Import" xml:space="preserve">
|
||||
<value>Import Profile</value>
|
||||
<value>Importar perfil</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>Atajos de teclado</value>
|
||||
@@ -477,10 +477,10 @@
|
||||
<value>Bajo</value>
|
||||
</data>
|
||||
<data name="LSDeadzones" xml:space="preserve">
|
||||
<value>Left Stick Deadzones</value>
|
||||
<value>Punto muerto stick izquierdo</value>
|
||||
</data>
|
||||
<data name="LTDeadzones" xml:space="preserve">
|
||||
<value>Left Trigger Deadzones</value>
|
||||
<value>Punto muerto gatillo izquierdo</value>
|
||||
</data>
|
||||
<data name="MatrixAudio" xml:space="preserve">
|
||||
<value>Visualizador de audio</value>
|
||||
@@ -531,7 +531,7 @@
|
||||
<value>Respuesta del botón</value>
|
||||
</data>
|
||||
<data name="MouseImportFailed" xml:space="preserve">
|
||||
<value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
|
||||
<value>Importación fallida. El archivo seleccionado no es un perfil válido o está corrupto.</value>
|
||||
</data>
|
||||
<data name="MouseLiftOffDistance" xml:space="preserve">
|
||||
<value>Distancia de despegue (LOD)</value>
|
||||
@@ -618,7 +618,7 @@
|
||||
<value>Quitar</value>
|
||||
</data>
|
||||
<data name="Reset" xml:space="preserve">
|
||||
<value>Reset</value>
|
||||
<value>Reiniciar</value>
|
||||
</data>
|
||||
<data name="RestartGPU" xml:space="preserve">
|
||||
<value>Algo está usando la dGPU e impide el modo Eco. ¿Reiniciar dGPU en el administrador de dispositivos? (Proceda bajo su propio riesgo)</value>
|
||||
@@ -627,16 +627,16 @@
|
||||
<value>RPM</value>
|
||||
</data>
|
||||
<data name="RSDeadzones" xml:space="preserve">
|
||||
<value>Right Stick Deadzones</value>
|
||||
<value>Punto muerto stick derecho</value>
|
||||
</data>
|
||||
<data name="RTDeadzones" xml:space="preserve">
|
||||
<value>Right Trigger Deadzones</value>
|
||||
<value>Punto muerto gatillo derecho</value>
|
||||
</data>
|
||||
<data name="RunOnStartup" xml:space="preserve">
|
||||
<value>Ejecutar al inicio</value>
|
||||
</data>
|
||||
<data name="ScalingQuality" xml:space="preserve">
|
||||
<value>Scaling Quality</value>
|
||||
<value>Calidad del escalado</value>
|
||||
</data>
|
||||
<data name="ScreenPadDown" xml:space="preserve">
|
||||
<value>Bajar brillo ScreenPad</value>
|
||||
@@ -717,7 +717,7 @@
|
||||
<value>Versión</value>
|
||||
</data>
|
||||
<data name="VibrationStrength" xml:space="preserve">
|
||||
<value>Vibration Strength</value>
|
||||
<value>Intensidad de vibración</value>
|
||||
</data>
|
||||
<data name="VolumeDown" xml:space="preserve">
|
||||
<value>Bajar volumen</value>
|
||||
|
||||
@@ -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>
|
||||
|
||||
BIN
app/Resources/icons8-brightness-32.png
Normal file
BIN
app/Resources/icons8-brightness-32.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 420 B |
@@ -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;
|
||||
|
||||
172
app/Settings.Designer.cs
generated
172
app/Settings.Designer.cs
generated
@@ -34,6 +34,7 @@ namespace GHelper
|
||||
tableLayoutMatrix = new TableLayoutPanel();
|
||||
comboMatrix = new RComboBox();
|
||||
comboMatrixRunning = new RComboBox();
|
||||
comboInterval = new RComboBox();
|
||||
buttonMatrix = new RButton();
|
||||
panelMatrixTitle = new Panel();
|
||||
pictureMatrix = new PictureBox();
|
||||
@@ -65,6 +66,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 +120,12 @@ namespace GHelper
|
||||
panelAllyTitle = new Panel();
|
||||
pictureAlly = new PictureBox();
|
||||
labelAlly = new Label();
|
||||
buttonOverlay = new RButton();
|
||||
panelGamma = new Panel();
|
||||
sliderGamma = new Slider();
|
||||
panelGammaTitle = new Panel();
|
||||
labelGamma = new Label();
|
||||
pictureGamma = new PictureBox();
|
||||
labelGammaTitle = new Label();
|
||||
panelMatrix.SuspendLayout();
|
||||
tableLayoutMatrix.SuspendLayout();
|
||||
panelMatrixTitle.SuspendLayout();
|
||||
@@ -157,6 +164,9 @@ namespace GHelper
|
||||
tableLayoutAlly.SuspendLayout();
|
||||
panelAllyTitle.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureAlly).BeginInit();
|
||||
panelGamma.SuspendLayout();
|
||||
panelGammaTitle.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureGamma).BeginInit();
|
||||
SuspendLayout();
|
||||
//
|
||||
// panelMatrix
|
||||
@@ -168,7 +178,7 @@ namespace GHelper
|
||||
panelMatrix.Controls.Add(panelMatrixTitle);
|
||||
panelMatrix.Controls.Add(checkMatrix);
|
||||
panelMatrix.Dock = DockStyle.Top;
|
||||
panelMatrix.Location = new Point(11, 827);
|
||||
panelMatrix.Location = new Point(11, 950);
|
||||
panelMatrix.Margin = new Padding(0);
|
||||
panelMatrix.Name = "panelMatrix";
|
||||
panelMatrix.Padding = new Padding(20, 20, 20, 10);
|
||||
@@ -187,6 +197,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 +205,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
|
||||
@@ -227,6 +239,21 @@ namespace GHelper
|
||||
comboMatrixRunning.Size = new Size(248, 40);
|
||||
comboMatrixRunning.TabIndex = 17;
|
||||
//
|
||||
// comboInterval
|
||||
//
|
||||
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;
|
||||
//
|
||||
// buttonMatrix
|
||||
//
|
||||
buttonMatrix.Activated = false;
|
||||
@@ -298,7 +325,7 @@ namespace GHelper
|
||||
panelBattery.Controls.Add(sliderBattery);
|
||||
panelBattery.Controls.Add(panelBatteryTitle);
|
||||
panelBattery.Dock = DockStyle.Top;
|
||||
panelBattery.Location = new Point(11, 1485);
|
||||
panelBattery.Location = new Point(11, 1608);
|
||||
panelBattery.Margin = new Padding(0);
|
||||
panelBattery.Name = "panelBattery";
|
||||
panelBattery.Padding = new Padding(20, 20, 20, 10);
|
||||
@@ -390,7 +417,7 @@ namespace GHelper
|
||||
panelFooter.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelFooter.Controls.Add(tableButtons);
|
||||
panelFooter.Dock = DockStyle.Top;
|
||||
panelFooter.Location = new Point(11, 1660);
|
||||
panelFooter.Location = new Point(11, 1783);
|
||||
panelFooter.Margin = new Padding(0);
|
||||
panelFooter.Name = "panelFooter";
|
||||
panelFooter.Padding = new Padding(20);
|
||||
@@ -707,6 +734,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;
|
||||
@@ -1115,7 +1164,7 @@ namespace GHelper
|
||||
panelKeyboard.Controls.Add(tableLayoutKeyboard);
|
||||
panelKeyboard.Controls.Add(panelKeyboardTitle);
|
||||
panelKeyboard.Dock = DockStyle.Top;
|
||||
panelKeyboard.Location = new Point(11, 1143);
|
||||
panelKeyboard.Location = new Point(11, 1266);
|
||||
panelKeyboard.Margin = new Padding(0);
|
||||
panelKeyboard.Name = "panelKeyboard";
|
||||
panelKeyboard.Padding = new Padding(20);
|
||||
@@ -1291,7 +1340,7 @@ namespace GHelper
|
||||
panelVersion.Controls.Add(labelCharge);
|
||||
panelVersion.Controls.Add(checkStartup);
|
||||
panelVersion.Dock = DockStyle.Top;
|
||||
panelVersion.Location = new Point(11, 1604);
|
||||
panelVersion.Location = new Point(11, 1727);
|
||||
panelVersion.Margin = new Padding(4);
|
||||
panelVersion.Name = "panelVersion";
|
||||
panelVersion.Size = new Size(827, 56);
|
||||
@@ -1316,7 +1365,7 @@ namespace GHelper
|
||||
panelPeripherals.Controls.Add(tableLayoutPeripherals);
|
||||
panelPeripherals.Controls.Add(panelPeripheralsTile);
|
||||
panelPeripherals.Dock = DockStyle.Top;
|
||||
panelPeripherals.Location = new Point(11, 1287);
|
||||
panelPeripherals.Location = new Point(11, 1410);
|
||||
panelPeripherals.Margin = new Padding(0);
|
||||
panelPeripherals.Name = "panelPeripherals";
|
||||
panelPeripherals.Padding = new Padding(20, 20, 20, 10);
|
||||
@@ -1458,7 +1507,7 @@ namespace GHelper
|
||||
panelAlly.Controls.Add(tableLayoutAlly);
|
||||
panelAlly.Controls.Add(panelAllyTitle);
|
||||
panelAlly.Dock = DockStyle.Top;
|
||||
panelAlly.Location = new Point(11, 1003);
|
||||
panelAlly.Location = new Point(11, 1126);
|
||||
panelAlly.Margin = new Padding(0);
|
||||
panelAlly.Name = "panelAlly";
|
||||
panelAlly.Padding = new Padding(20, 20, 20, 0);
|
||||
@@ -1586,27 +1635,79 @@ namespace GHelper
|
||||
labelAlly.TabIndex = 26;
|
||||
labelAlly.Text = "Ally Controller";
|
||||
//
|
||||
// buttonOverlay
|
||||
// panelGamma
|
||||
//
|
||||
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;
|
||||
panelGamma.AutoSize = true;
|
||||
panelGamma.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelGamma.Controls.Add(sliderGamma);
|
||||
panelGamma.Controls.Add(panelGammaTitle);
|
||||
panelGamma.Dock = DockStyle.Top;
|
||||
panelGamma.Location = new Point(11, 827);
|
||||
panelGamma.Margin = new Padding(0);
|
||||
panelGamma.Name = "panelGamma";
|
||||
panelGamma.Padding = new Padding(20, 20, 20, 10);
|
||||
panelGamma.Size = new Size(827, 123);
|
||||
panelGamma.TabIndex = 9;
|
||||
panelGamma.Visible = false;
|
||||
//
|
||||
// sliderGamma
|
||||
//
|
||||
sliderGamma.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
sliderGamma.Location = new Point(40, 69);
|
||||
sliderGamma.Margin = new Padding(4);
|
||||
sliderGamma.Max = 100;
|
||||
sliderGamma.Min = 0;
|
||||
sliderGamma.Name = "sliderGamma";
|
||||
sliderGamma.Size = new Size(752, 40);
|
||||
sliderGamma.Step = 10;
|
||||
sliderGamma.TabIndex = 20;
|
||||
sliderGamma.Text = "sliderGamma";
|
||||
sliderGamma.Value = 100;
|
||||
//
|
||||
// panelGammaTitle
|
||||
//
|
||||
panelGammaTitle.Controls.Add(labelGamma);
|
||||
panelGammaTitle.Controls.Add(pictureGamma);
|
||||
panelGammaTitle.Controls.Add(labelGammaTitle);
|
||||
panelGammaTitle.Dock = DockStyle.Top;
|
||||
panelGammaTitle.Location = new Point(20, 20);
|
||||
panelGammaTitle.Margin = new Padding(4);
|
||||
panelGammaTitle.Name = "panelGammaTitle";
|
||||
panelGammaTitle.Padding = new Padding(0, 0, 0, 4);
|
||||
panelGammaTitle.Size = new Size(787, 44);
|
||||
panelGammaTitle.TabIndex = 40;
|
||||
//
|
||||
// labelGamma
|
||||
//
|
||||
labelGamma.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelGamma.Location = new Point(675, 4);
|
||||
labelGamma.Margin = new Padding(8, 0, 8, 0);
|
||||
labelGamma.Name = "labelGamma";
|
||||
labelGamma.Size = new Size(107, 36);
|
||||
labelGamma.TabIndex = 39;
|
||||
labelGamma.Text = " ";
|
||||
labelGamma.TextAlign = ContentAlignment.TopRight;
|
||||
//
|
||||
// pictureGamma
|
||||
//
|
||||
pictureGamma.BackgroundImage = Properties.Resources.icons8_brightness_32;
|
||||
pictureGamma.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
pictureGamma.Location = new Point(4, 2);
|
||||
pictureGamma.Margin = new Padding(4);
|
||||
pictureGamma.Name = "pictureGamma";
|
||||
pictureGamma.Size = new Size(32, 32);
|
||||
pictureGamma.TabIndex = 38;
|
||||
pictureGamma.TabStop = false;
|
||||
//
|
||||
// labelGammaTitle
|
||||
//
|
||||
labelGammaTitle.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelGammaTitle.Location = new Point(43, 0);
|
||||
labelGammaTitle.Margin = new Padding(8, 0, 8, 0);
|
||||
labelGammaTitle.Name = "labelGammaTitle";
|
||||
labelGammaTitle.Size = new Size(307, 32);
|
||||
labelGammaTitle.TabIndex = 37;
|
||||
labelGammaTitle.Text = "Flicker-free Dimming";
|
||||
//
|
||||
// SettingsForm
|
||||
//
|
||||
@@ -1614,7 +1715,7 @@ namespace GHelper
|
||||
AutoScaleMode = AutoScaleMode.Dpi;
|
||||
AutoSize = true;
|
||||
AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
ClientSize = new Size(849, 1717);
|
||||
ClientSize = new Size(849, 2119);
|
||||
Controls.Add(panelFooter);
|
||||
Controls.Add(panelVersion);
|
||||
Controls.Add(panelBattery);
|
||||
@@ -1622,6 +1723,7 @@ namespace GHelper
|
||||
Controls.Add(panelKeyboard);
|
||||
Controls.Add(panelAlly);
|
||||
Controls.Add(panelMatrix);
|
||||
Controls.Add(panelGamma);
|
||||
Controls.Add(panelScreen);
|
||||
Controls.Add(panelGPU);
|
||||
Controls.Add(panelPerformance);
|
||||
@@ -1690,6 +1792,9 @@ namespace GHelper
|
||||
panelAllyTitle.ResumeLayout(false);
|
||||
panelAllyTitle.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureAlly).EndInit();
|
||||
panelGamma.ResumeLayout(false);
|
||||
panelGammaTitle.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)pictureGamma).EndInit();
|
||||
ResumeLayout(false);
|
||||
PerformLayout();
|
||||
}
|
||||
@@ -1784,5 +1889,12 @@ namespace GHelper
|
||||
private RButton buttonFPS;
|
||||
private RButton buttonController;
|
||||
private RButton buttonOverlay;
|
||||
private RComboBox comboInterval;
|
||||
private Panel panelGamma;
|
||||
private Slider sliderGamma;
|
||||
private Panel panelGammaTitle;
|
||||
private Label labelGamma;
|
||||
private PictureBox pictureGamma;
|
||||
private Label labelGammaTitle;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -251,9 +253,19 @@ namespace GHelper
|
||||
VisualiseFnLock();
|
||||
buttonFnLock.Click += ButtonFnLock_Click;
|
||||
|
||||
panelGamma.Visible = AppConfig.IsOLED();
|
||||
sliderGamma.ValueChanged += SliderGamma_ValueChanged;
|
||||
labelGamma.Text = "100%";
|
||||
|
||||
panelPerformance.Focus();
|
||||
}
|
||||
|
||||
private void SliderGamma_ValueChanged(object? sender, EventArgs e)
|
||||
{
|
||||
screenControl.SetGamma(sliderGamma.Value);
|
||||
labelGamma.Text = sliderGamma.Value + "%";
|
||||
}
|
||||
|
||||
private void ButtonOverlay_Click(object? sender, EventArgs e)
|
||||
{
|
||||
KeyboardHook.KeyKeyKeyPress(Keys.LControlKey, Keys.LShiftKey, Keys.O);
|
||||
@@ -424,7 +436,7 @@ namespace GHelper
|
||||
}
|
||||
}
|
||||
|
||||
public void VisualiseMatrix(string image)
|
||||
public void VisualiseMatrixPicture(string image)
|
||||
{
|
||||
if (matrixForm == null || matrixForm.Text == "") return;
|
||||
matrixForm.VisualiseMatrix(image);
|
||||
@@ -686,7 +698,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 +724,7 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
public void SetMatrixRunning(int mode)
|
||||
public void VisualiseMatrixRunning(int mode)
|
||||
{
|
||||
Invoke(delegate
|
||||
{
|
||||
@@ -721,17 +733,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 +914,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 +945,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);
|
||||
}
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ namespace GHelper.UI
|
||||
{
|
||||
var parms = base.CreateParams;
|
||||
parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN
|
||||
parms.ClassStyle &= ~0x00020000;
|
||||
return parms;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -73,6 +73,9 @@ namespace GHelper.USB
|
||||
private static AuraMode mode = AuraMode.AuraStatic;
|
||||
private static AuraSpeed speed = AuraSpeed.Normal;
|
||||
|
||||
private static bool backlight = false;
|
||||
private static bool initDirect = false;
|
||||
|
||||
public static Color Color1 = Color.White;
|
||||
public static Color Color2 = Color.Black;
|
||||
|
||||
@@ -289,17 +292,27 @@ namespace GHelper.USB
|
||||
|
||||
public static void ApplyBrightness(int brightness, string log = "Backlight", bool delay = false)
|
||||
{
|
||||
if (brightness == 0) backlight = false;
|
||||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
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);
|
||||
if (brightness > 0)
|
||||
{
|
||||
if (!backlight) initDirect = true;
|
||||
backlight = true;
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
@@ -493,6 +506,8 @@ namespace GHelper.USB
|
||||
|
||||
public static void ApplyDirect(Color[] color, bool init = false)
|
||||
{
|
||||
if (!backlight) return;
|
||||
|
||||
const byte keySet = 167;
|
||||
const byte ledCount = 178;
|
||||
const ushort mapSize = 3 * ledCount;
|
||||
@@ -510,9 +525,9 @@ namespace GHelper.USB
|
||||
buffer[6] = 0;
|
||||
buffer[7] = 0x10;
|
||||
|
||||
if (init)
|
||||
if (init || initDirect)
|
||||
{
|
||||
Init();
|
||||
initDirect = false;
|
||||
AsusHid.WriteAura(new byte[] { AsusHid.AURA_ID, 0xBC });
|
||||
}
|
||||
|
||||
@@ -573,6 +588,8 @@ namespace GHelper.USB
|
||||
public static void ApplyDirect(Color color, bool init = false)
|
||||
{
|
||||
|
||||
if (!backlight) return;
|
||||
|
||||
if (isACPI)
|
||||
{
|
||||
Program.acpi.TUFKeyboardRGB(0, color, 0, null);
|
||||
@@ -591,9 +608,9 @@ namespace GHelper.USB
|
||||
return;
|
||||
}
|
||||
|
||||
if (init)
|
||||
if (init || initDirect)
|
||||
{
|
||||
//Init();
|
||||
initDirect = false;
|
||||
AsusHid.WriteAura(new byte[] { AsusHid.AURA_ID, 0xbc, 1 });
|
||||
}
|
||||
|
||||
@@ -720,6 +737,8 @@ namespace GHelper.USB
|
||||
|
||||
public static void ApplyAmbient(bool init = false)
|
||||
{
|
||||
if (!backlight) return;
|
||||
|
||||
var bound = Screen.GetBounds(Point.Empty);
|
||||
bound.Y += bound.Height / 3;
|
||||
bound.Height -= (int)Math.Round(bound.Height * (0.33f + 0.022f)); // cut 1/3 of the top screen + windows panel
|
||||
|
||||
@@ -112,7 +112,7 @@ Huge thanks to [@IceStormNG](https://github.com/IceStormNG) 👑 for contributio
|
||||
- ``Ctrl + M1 / M2`` - Screen brightness Down / Up
|
||||
- ``Shift + M1 / M2`` - Backlight brightness Down / Up
|
||||
- ``Fn + C`` - Fn-Lock
|
||||
- ``Fn + Shift + F7 / F8`` - Matrix brightness Down / Up
|
||||
- ``Fn + Shift + F7 / F8`` - Matrix / Slash Lightning brightness Down / Up
|
||||
- ``Fn + Shift + F7 / F8`` - Screenpad brightness Down / Up
|
||||
- ``Ctrl + Shift + F20`` - Mute Microphone
|
||||
- ``Ctrl + Shift + Alt + F14`` - Eco GPU Mode
|
||||
|
||||
Reference in New Issue
Block a user