From f3d63f09a9bac6c4fc2186f447b4731bf40af6d0 Mon Sep 17 00:00:00 2001 From: Diogo Trindade Date: Tue, 9 Aug 2022 12:52:23 +0100 Subject: [PATCH] Dispose of each keyboard properly --- RGB.NET.Devices.Wooting/Generic/WootingRGBDeviceInfo.cs | 5 ++++- .../Keyboard/WootingKeyboardRGBDevice.cs | 8 ++++++++ .../Keyboard/WootingKeyboardRGBDeviceInfo.cs | 4 ++-- RGB.NET.Devices.Wooting/Native/_WootingSDK.cs | 1 - RGB.NET.Devices.Wooting/WootingDeviceProvider.cs | 2 +- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/RGB.NET.Devices.Wooting/Generic/WootingRGBDeviceInfo.cs b/RGB.NET.Devices.Wooting/Generic/WootingRGBDeviceInfo.cs index cea13eb..ec4500d 100644 --- a/RGB.NET.Devices.Wooting/Generic/WootingRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Wooting/Generic/WootingRGBDeviceInfo.cs @@ -37,6 +37,8 @@ public class WootingRGBDeviceInfo : IRGBDeviceInfo /// public WootingLayoutType WootingLayoutType { get; } + public byte WootingDeviceIndex { get; } + #endregion #region Constructors @@ -46,11 +48,12 @@ public class WootingRGBDeviceInfo : IRGBDeviceInfo /// /// The type of the . /// The of the . - internal WootingRGBDeviceInfo(RGBDeviceType deviceType, _WootingDeviceInfo deviceInfo) + internal WootingRGBDeviceInfo(RGBDeviceType deviceType, _WootingDeviceInfo deviceInfo, byte deviceIndex) { this.DeviceType = deviceType; this.WootingDeviceType = deviceInfo.DeviceType; this.WootingLayoutType = deviceInfo.LayoutType; + this.WootingDeviceIndex = deviceIndex; Model = deviceInfo.Model; DeviceName = DeviceHelper.CreateDeviceName(Manufacturer, Model); diff --git a/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDevice.cs b/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDevice.cs index 6e082a4..451c6b2 100644 --- a/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDevice.cs +++ b/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDevice.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using RGB.NET.Core; using RGB.NET.Devices.Wooting.Generic; +using RGB.NET.Devices.Wooting.Native; namespace RGB.NET.Devices.Wooting.Keyboard; @@ -48,5 +49,12 @@ public class WootingKeyboardRGBDevice : WootingRGBDevice protected override void UpdateLeds(IEnumerable ledsToUpdate) => UpdateQueue.SetData(GetUpdateData(ledsToUpdate)); + public override void Dispose() + { + _WootingSDK.SelectDevice(DeviceInfo.WootingDeviceIndex); + _WootingSDK.Reset(); + + base.Dispose(); + } #endregion } \ No newline at end of file diff --git a/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDeviceInfo.cs b/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDeviceInfo.cs index 3e3400e..dfcc8eb 100644 --- a/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Wooting/Keyboard/WootingKeyboardRGBDeviceInfo.cs @@ -24,8 +24,8 @@ public class WootingKeyboardRGBDeviceInfo : WootingRGBDeviceInfo, IKeyboardDevic /// Internal constructor of managed . /// /// The native . - internal WootingKeyboardRGBDeviceInfo(_WootingDeviceInfo deviceInfo) - : base(RGBDeviceType.Keyboard, deviceInfo) + internal WootingKeyboardRGBDeviceInfo(_WootingDeviceInfo deviceInfo, byte deviceIndex) + : base(RGBDeviceType.Keyboard, deviceInfo, deviceIndex) { Layout = WootingLayoutType switch { diff --git a/RGB.NET.Devices.Wooting/Native/_WootingSDK.cs b/RGB.NET.Devices.Wooting/Native/_WootingSDK.cs index 885a255..29ce08f 100644 --- a/RGB.NET.Devices.Wooting/Native/_WootingSDK.cs +++ b/RGB.NET.Devices.Wooting/Native/_WootingSDK.cs @@ -58,7 +58,6 @@ internal static class _WootingSDK { if (_handle == IntPtr.Zero) return; - Reset(); Close(); _getDeviceInfoPointer = null; diff --git a/RGB.NET.Devices.Wooting/WootingDeviceProvider.cs b/RGB.NET.Devices.Wooting/WootingDeviceProvider.cs index c588401..c4f1ce7 100644 --- a/RGB.NET.Devices.Wooting/WootingDeviceProvider.cs +++ b/RGB.NET.Devices.Wooting/WootingDeviceProvider.cs @@ -74,7 +74,7 @@ public class WootingDeviceProvider : AbstractRGBDeviceProvider _WootingSDK.SelectDevice(i); _WootingDeviceInfo nativeDeviceInfo = (_WootingDeviceInfo)Marshal.PtrToStructure(_WootingSDK.GetDeviceInfo(), typeof(_WootingDeviceInfo))!; - yield return new WootingKeyboardRGBDevice(new WootingKeyboardRGBDeviceInfo(nativeDeviceInfo), updateQueue); + yield return new WootingKeyboardRGBDevice(new WootingKeyboardRGBDeviceInfo(nativeDeviceInfo, i), updateQueue); } } }