Skip to content

Commit

Permalink
Asus HID fixes seerge#1616
Browse files Browse the repository at this point in the history
  • Loading branch information
seerge committed Nov 19, 2023
1 parent e4bcc8f commit ccf2ae9
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 41 deletions.
74 changes: 39 additions & 35 deletions app/USB/AsusHid.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,66 +12,70 @@ public static class AsusHid

static int[] deviceIds = { 0x1a30, 0x1854, 0x1869, 0x1866, 0x19b6, 0x1822, 0x1837, 0x1854, 0x184a, 0x183d, 0x8502, 0x1807, 0x17e0, 0x18c6, 0x1abe };

static HidStream auraStream;
static HidStream? auraStream;

public static HidStream FindHidStream(byte reportId, int minFeatureLength = 1)
public static IEnumerable<HidDevice>? FindDevices(byte reportId, int minFeatureLength = 1)
{
HidDeviceLoader loader = new HidDeviceLoader();
IEnumerable<HidDevice> deviceList;

try
{
var deviceList = loader.GetDevices(ASUS_ID).Where(device => deviceIds.Contains(device.ProductID) && device.CanOpen);
foreach (var device in deviceList)
{
var config = new OpenConfiguration();
config.SetOption(OpenOption.Interruptible, false);
config.SetOption(OpenOption.Exclusive, false);
config.SetOption(OpenOption.Priority, 10);
HidStream hidStream = device.Open();

if (device.GetMaxFeatureReportLength() >= minFeatureLength)
{
var reportDescriptor = device.GetReportDescriptor();
if (reportDescriptor.TryGetReport(ReportType.Feature, reportId, out _))
{
return hidStream;
}
}

hidStream.Close();
hidStream.Dispose();
}
deviceList = loader.GetDevices(ASUS_ID).Where(
device => deviceIds.Contains(device.ProductID) &&
device.CanOpen &&
device.GetMaxFeatureReportLength() >= minFeatureLength);
}
catch (Exception ex)
{
Debug.WriteLine($"Error accessing HID device: {ex.Message}");
Debug.WriteLine($"Error enumerating HID devices: {ex.Message}");
yield break;
}

return null;
foreach (var device in deviceList)
if (device.GetReportDescriptor().TryGetReport(ReportType.Feature, reportId, out _))
yield return device;
}

static void WriteData(HidStream stream, byte[] data, string log = "USB")
public static HidStream? FindHidStream(byte reportId, int minFeatureLength = 1)
{
try
{
stream.Write(data);
Logger.WriteLine($"{log} " + stream.Device.ProductID + ": " + BitConverter.ToString(data));
return FindDevices(reportId, minFeatureLength)?.FirstOrDefault()?.Open();
}
catch (Exception ex)
{
Debug.WriteLine($"Error writing {log} to HID device: {ex.Message} {BitConverter.ToString(data)}");
Debug.WriteLine($"Error accessing HID device: {ex.Message}");
}

return null;
}

public static void Write(byte[] data, byte reportId = AURA_ID, string log = "USB")
{
using (var stream = FindHidStream(reportId))
WriteData(stream, data, log);
Write(new List<byte[]> { data }, reportId, log);
}
public static void Write(List<byte[]> dataList, byte reportId = AURA_ID)

public static void Write(List<byte[]> dataList, byte reportId = AURA_ID, string log = "USB")
{
using (var stream = FindHidStream(reportId))
foreach (var data in dataList)
WriteData(stream, data);
var devices = FindDevices(reportId);
if (devices is null) return;

try
{
foreach (var device in devices)
using (var stream = device.Open())
foreach (var data in dataList)
{
stream.Write(data);
Logger.WriteLine($"{log} " + device.ProductID.ToString("X") + ": " + BitConverter.ToString(data));
}
}
catch (Exception ex)
{
Debug.WriteLine($"Error writing {log} to HID device: {ex.Message}");
}

}

public static void WriteAura(byte[] data)
Expand Down
11 changes: 5 additions & 6 deletions app/USB/Aura.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,12 +128,11 @@ static Aura()
isSingleColor = AppConfig.IsSingleColor(); // Mono Color

if (AppConfig.ContainsModel("GA402X") || AppConfig.ContainsModel("GA402N"))
using (var stream = AsusHid.FindHidStream(AsusHid.AURA_ID))
{
if (stream is null) return;
if (stream.Device.ReleaseNumberBcd == 22 || stream.Device.ReleaseNumberBcd == 23) isSingleColor = true;
stream.Close();
}
{
var device = AsusHid.FindDevices(AsusHid.AURA_ID).FirstOrDefault();
if (device is null) return;
if (device.ReleaseNumberBcd == 22 || device.ReleaseNumberBcd == 23) isSingleColor = true;
}
}

public static Dictionary<AuraSpeed, string> GetSpeeds()
Expand Down

0 comments on commit ccf2ae9

Please sign in to comment.