1
0
mirror of https://github.com/DarthAffe/RGB.NET.git synced 2025-12-13 10:08:31 +00:00

ASUS - Keep local arrays of keys and lights in an attempt to fix crashes

This commit is contained in:
Robert 2021-07-26 09:12:29 +02:00
parent e332d79a47
commit 06f46811f4

View File

@ -12,6 +12,9 @@ namespace RGB.NET.Devices.Asus
{ {
#region Properties & Fields #region Properties & Fields
private readonly IAuraRgbLight[] _lights;
private readonly IAuraRgbKey[] _keys;
/// <summary> /// <summary>
/// The device to be updated. /// The device to be updated.
/// </summary> /// </summary>
@ -30,6 +33,19 @@ namespace RGB.NET.Devices.Asus
: base(updateTrigger) : base(updateTrigger)
{ {
this.Device = device; this.Device = device;
this._lights = new IAuraRgbLight[device.Lights.Count];
for (int i = 0; i < device.Lights.Count; i++)
_lights[i] = device.Lights[i];
if (Device is IAuraSyncKeyboard keyboard)
{
this._keys = new IAuraRgbKey[keyboard.Keys.Count];
for (int i = 0; i < keyboard.Keys.Count; i++)
_keys[i] = keyboard.Keys[i];
}
else
this._keys = new IAuraRgbKey[0];
} }
#endregion #endregion
@ -43,7 +59,7 @@ namespace RGB.NET.Devices.Asus
{ {
if ((Device.Type == (uint)AsusDeviceType.KEYBOARD_RGB) || (Device.Type == (uint)AsusDeviceType.NB_KB_RGB)) if ((Device.Type == (uint)AsusDeviceType.KEYBOARD_RGB) || (Device.Type == (uint)AsusDeviceType.NB_KB_RGB))
{ {
if (Device is not IAuraSyncKeyboard keyboard) if (Device is not IAuraSyncKeyboard)
return; return;
foreach ((object customData, Color value) in dataSet) foreach ((object customData, Color value) in dataSet)
@ -51,7 +67,7 @@ namespace RGB.NET.Devices.Asus
(AsusLedType ledType, int id) = (AsusKeyboardLedCustomData)customData; (AsusLedType ledType, int id) = (AsusKeyboardLedCustomData)customData;
if (ledType == AsusLedType.Key) if (ledType == AsusLedType.Key)
{ {
IAuraRgbLight light = keyboard.Key[(ushort)id]; IAuraRgbLight light = _keys[(ushort)id];
(_, byte r, byte g, byte b) = value.GetRGBBytes(); (_, byte r, byte g, byte b) = value.GetRGBBytes();
light.Red = r; light.Red = r;
light.Green = g; light.Green = g;
@ -59,7 +75,7 @@ namespace RGB.NET.Devices.Asus
} }
else else
{ {
IAuraRgbLight light = keyboard.Lights[id]; IAuraRgbLight light = _lights[id];
(_, byte r, byte g, byte b) = value.GetRGBBytes(); (_, byte r, byte g, byte b) = value.GetRGBBytes();
light.Red = r; light.Red = r;
light.Green = g; light.Green = g;
@ -72,7 +88,7 @@ namespace RGB.NET.Devices.Asus
foreach ((object key, Color value) in dataSet) foreach ((object key, Color value) in dataSet)
{ {
int index = (int)key; int index = (int)key;
IAuraRgbLight light = Device.Lights[index]; IAuraRgbLight light = _lights[index];
(_, byte r, byte g, byte b) = value.GetRGBBytes(); (_, byte r, byte g, byte b) = value.GetRGBBytes();
light.Red = r; light.Red = r;