mirror of
https://github.com/DarthAffe/RGB.NET.git
synced 2026-11-11 04:57:15 +00:00
Rewrote Corsair device handling to use mappings
This commit is contained in:
1 parent
2d0fd93b5f
commit
1e229324be
23 files changed
+284
-395
No files matched your search
@@ -1,4 +1,7 @@
|
||||
using RGB.NET.Core;
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using RGB.NET.Core;
|
||||
using RGB.NET.Devices.Corsair.Native;
|
||||
|
||||
namespace RGB.NET.Devices.Corsair
|
||||
{
|
||||
@@ -9,15 +12,57 @@ namespace RGB.NET.Devices.Corsair
|
||||
public abstract class CorsairRGBDevice<TDeviceInfo> : AbstractRGBDevice<TDeviceInfo>, ICorsairRGBDevice
|
||||
where TDeviceInfo : CorsairRGBDeviceInfo
|
||||
{
|
||||
#region Properties & Fields
|
||||
|
||||
protected LedMapping<CorsairLedId> Mapping { get; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="CorsairRGBDevice{TDeviceInfo}"/> class.
|
||||
/// </summary>
|
||||
/// <param name="info">The generic information provided by CUE for the device.</param>
|
||||
protected CorsairRGBDevice(TDeviceInfo info, CorsairDeviceUpdateQueue updateQueue)
|
||||
protected CorsairRGBDevice(TDeviceInfo info, LedMapping<CorsairLedId> mapping, CorsairDeviceUpdateQueue updateQueue)
|
||||
: base(info, updateQueue)
|
||||
{ }
|
||||
{
|
||||
this.Mapping = mapping;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
void ICorsairRGBDevice.Initialize() => InitializeLayout();
|
||||
|
||||
protected virtual void InitializeLayout()
|
||||
{
|
||||
_CorsairLedPositions? nativeLedPositions = (_CorsairLedPositions?)Marshal.PtrToStructure(_CUESDK.CorsairGetLedPositionsByDeviceIndex(DeviceInfo.CorsairDeviceIndex), typeof(_CorsairLedPositions));
|
||||
if (nativeLedPositions == null) return;
|
||||
|
||||
int structSize = Marshal.SizeOf(typeof(_CorsairLedPosition));
|
||||
IntPtr ptr = nativeLedPositions.pLedPosition;
|
||||
|
||||
for (int i = 0; i < nativeLedPositions.numberOfLed; i++)
|
||||
{
|
||||
_CorsairLedPosition? ledPosition = (_CorsairLedPosition?)Marshal.PtrToStructure(ptr, typeof(_CorsairLedPosition));
|
||||
if (ledPosition == null)
|
||||
{
|
||||
ptr = new IntPtr(ptr.ToInt64() + structSize);
|
||||
continue;
|
||||
}
|
||||
|
||||
LedId ledId = Mapping.TryGetValue(ledPosition.LedId, out LedId id) ? id : LedId.Invalid;
|
||||
Rectangle rectangle = ledPosition.ToRectangle();
|
||||
AddLed(ledId, rectangle.Location, rectangle.Size);
|
||||
|
||||
ptr = new IntPtr(ptr.ToInt64() + structSize);
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override object GetLedCustomData(LedId ledId) => Mapping.TryGetValue(ledId, out CorsairLedId corsairLedId) ? corsairLedId : CorsairLedId.Invalid;
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ namespace RGB.NET.Devices.Corsair
|
||||
/// <inheritdoc />
|
||||
public string Model { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public object? LayoutMetadata { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@@ -53,7 +54,6 @@ namespace RGB.NET.Devices.Corsair
|
||||
/// <param name="deviceIndex">The index of the <see cref="CorsairRGBDevice{TDeviceInfo}"/>.</param>
|
||||
/// <param name="deviceType">The type of the <see cref="IRGBDevice"/>.</param>
|
||||
/// <param name="nativeInfo">The native <see cref="_CorsairDeviceInfo" />-struct</param>
|
||||
/// <param name="modelCounter">A dictionary containing counters to create unique names for equal devices models.</param>
|
||||
internal CorsairRGBDeviceInfo(int deviceIndex, RGBDeviceType deviceType, _CorsairDeviceInfo nativeInfo)
|
||||
{
|
||||
this.CorsairDeviceIndex = deviceIndex;
|
||||
@@ -72,7 +72,6 @@ namespace RGB.NET.Devices.Corsair
|
||||
/// <param name="deviceType">The type of the <see cref="IRGBDevice"/>.</param>
|
||||
/// <param name="nativeInfo">The native <see cref="_CorsairDeviceInfo" />-struct</param>
|
||||
/// <param name="modelName">The name of the device-model (overwrites the one provided with the device info).</param>
|
||||
/// <param name="modelCounter">A dictionary containing counters to create unique names for equal devices models.</param>
|
||||
internal CorsairRGBDeviceInfo(int deviceIndex, RGBDeviceType deviceType, _CorsairDeviceInfo nativeInfo, string modelName)
|
||||
{
|
||||
this.CorsairDeviceIndex = deviceIndex;
|
||||
@@ -84,11 +83,6 @@ namespace RGB.NET.Devices.Corsair
|
||||
DeviceName = DeviceHelper.CreateDeviceName(Manufacturer, Model);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -6,5 +6,7 @@ namespace RGB.NET.Devices.Corsair
|
||||
/// Represents a corsair RGB-device.
|
||||
/// </summary>
|
||||
public interface ICorsairRGBDevice : IRGBDevice
|
||||
{ }
|
||||
{
|
||||
internal void Initialize();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,219 @@
|
||||
using RGB.NET.Core;
|
||||
|
||||
namespace RGB.NET.Devices.Corsair
|
||||
{
|
||||
public static class LedMappings
|
||||
{
|
||||
static LedMappings()
|
||||
{
|
||||
for (int i = 0; i <= (CorsairLedId.GPU50 - CorsairLedId.GPU1); i++)
|
||||
GraphicsCard.Add(LedId.GraphicsCard1 + i, (CorsairLedId.GPU1 + i));
|
||||
|
||||
for (int i = 0; i <= (CorsairLedId.HeadsetStandZone9 - CorsairLedId.HeadsetStandZone1); i++)
|
||||
HeadsetStand.Add(LedId.HeadsetStand1 + i, (CorsairLedId.HeadsetStandZone1 + i));
|
||||
|
||||
for (int i = 0; i <= (CorsairLedId.Mainboard100 - CorsairLedId.Mainboard1); i++)
|
||||
Mainboard.Add(LedId.Mainboard1 + i, (CorsairLedId.Mainboard1 + i));
|
||||
|
||||
for (int i = 0; i <= (CorsairLedId.DRAM12 - CorsairLedId.DRAM1); i++)
|
||||
Memory.Add(LedId.DRAM1 + i, (CorsairLedId.DRAM1 + i));
|
||||
|
||||
for (int i = 0; i <= (CorsairLedId.Zone15 - CorsairLedId.Zone1); i++)
|
||||
Mousepad.Add(LedId.Mousepad1 + i, (CorsairLedId.Zone1 + i));
|
||||
}
|
||||
|
||||
public static LedMapping<CorsairLedId> GraphicsCard = new();
|
||||
public static LedMapping<CorsairLedId> HeadsetStand = new();
|
||||
public static LedMapping<CorsairLedId> Mainboard = new();
|
||||
public static LedMapping<CorsairLedId> Memory = new();
|
||||
public static LedMapping<CorsairLedId> Mousepad = new();
|
||||
|
||||
public static LedMapping<CorsairLedId> Headset = new()
|
||||
{
|
||||
{ LedId.Headset1, CorsairLedId.LeftLogo },
|
||||
{ LedId.Headset2, CorsairLedId.RightLogo },
|
||||
};
|
||||
|
||||
public static LedMapping<CorsairLedId> Mouse = new()
|
||||
{
|
||||
{ LedId.Mouse1, CorsairLedId.B1 },
|
||||
{ LedId.Mouse2, CorsairLedId.B2 },
|
||||
{ LedId.Mouse3, CorsairLedId.B3 },
|
||||
{ LedId.Mouse4, CorsairLedId.B4 },
|
||||
{ LedId.Mouse5, CorsairLedId.B5 },
|
||||
{ LedId.Mouse6, CorsairLedId.B6 },
|
||||
};
|
||||
|
||||
public static LedMapping<CorsairLedId> Keyboard = new()
|
||||
{
|
||||
{ LedId.Invalid, CorsairLedId.Invalid },
|
||||
{ LedId.Logo, CorsairLedId.Logo },
|
||||
{ LedId.Keyboard_Escape, CorsairLedId.Escape },
|
||||
{ LedId.Keyboard_F1, CorsairLedId.F1 },
|
||||
{ LedId.Keyboard_F2, CorsairLedId.F2 },
|
||||
{ LedId.Keyboard_F3, CorsairLedId.F3 },
|
||||
{ LedId.Keyboard_F4, CorsairLedId.F4 },
|
||||
{ LedId.Keyboard_F5, CorsairLedId.F5 },
|
||||
{ LedId.Keyboard_F6, CorsairLedId.F6 },
|
||||
{ LedId.Keyboard_F7, CorsairLedId.F7 },
|
||||
{ LedId.Keyboard_F8, CorsairLedId.F8 },
|
||||
{ LedId.Keyboard_F9, CorsairLedId.F9 },
|
||||
{ LedId.Keyboard_F10, CorsairLedId.F10 },
|
||||
{ LedId.Keyboard_F11, CorsairLedId.F11 },
|
||||
{ LedId.Keyboard_GraveAccentAndTilde, CorsairLedId.GraveAccentAndTilde },
|
||||
{ LedId.Keyboard_1, CorsairLedId.D1 },
|
||||
{ LedId.Keyboard_2, CorsairLedId.D2 },
|
||||
{ LedId.Keyboard_3, CorsairLedId.D3 },
|
||||
{ LedId.Keyboard_4, CorsairLedId.D4 },
|
||||
{ LedId.Keyboard_5, CorsairLedId.D5 },
|
||||
{ LedId.Keyboard_6, CorsairLedId.D6 },
|
||||
{ LedId.Keyboard_7, CorsairLedId.D7 },
|
||||
{ LedId.Keyboard_8, CorsairLedId.D8 },
|
||||
{ LedId.Keyboard_9, CorsairLedId.D9 },
|
||||
{ LedId.Keyboard_0, CorsairLedId.D0 },
|
||||
{ LedId.Keyboard_MinusAndUnderscore, CorsairLedId.MinusAndUnderscore },
|
||||
{ LedId.Keyboard_Tab, CorsairLedId.Tab },
|
||||
{ LedId.Keyboard_Q, CorsairLedId.Q },
|
||||
{ LedId.Keyboard_W, CorsairLedId.W },
|
||||
{ LedId.Keyboard_E, CorsairLedId.E },
|
||||
{ LedId.Keyboard_R, CorsairLedId.R },
|
||||
{ LedId.Keyboard_T, CorsairLedId.T },
|
||||
{ LedId.Keyboard_Y, CorsairLedId.Y },
|
||||
{ LedId.Keyboard_U, CorsairLedId.U },
|
||||
{ LedId.Keyboard_I, CorsairLedId.I },
|
||||
{ LedId.Keyboard_O, CorsairLedId.O },
|
||||
{ LedId.Keyboard_P, CorsairLedId.P },
|
||||
{ LedId.Keyboard_BracketLeft, CorsairLedId.BracketLeft },
|
||||
{ LedId.Keyboard_CapsLock, CorsairLedId.CapsLock },
|
||||
{ LedId.Keyboard_A, CorsairLedId.A },
|
||||
{ LedId.Keyboard_S, CorsairLedId.S },
|
||||
{ LedId.Keyboard_D, CorsairLedId.D },
|
||||
{ LedId.Keyboard_F, CorsairLedId.F },
|
||||
{ LedId.Keyboard_G, CorsairLedId.G },
|
||||
{ LedId.Keyboard_H, CorsairLedId.H },
|
||||
{ LedId.Keyboard_J, CorsairLedId.J },
|
||||
{ LedId.Keyboard_K, CorsairLedId.K },
|
||||
{ LedId.Keyboard_L, CorsairLedId.L },
|
||||
{ LedId.Keyboard_SemicolonAndColon, CorsairLedId.SemicolonAndColon },
|
||||
{ LedId.Keyboard_ApostropheAndDoubleQuote, CorsairLedId.ApostropheAndDoubleQuote },
|
||||
{ LedId.Keyboard_LeftShift, CorsairLedId.LeftShift },
|
||||
{ LedId.Keyboard_NonUsBackslash, CorsairLedId.NonUsBackslash },
|
||||
{ LedId.Keyboard_Z, CorsairLedId.Z },
|
||||
{ LedId.Keyboard_X, CorsairLedId.X },
|
||||
{ LedId.Keyboard_C, CorsairLedId.C },
|
||||
{ LedId.Keyboard_V, CorsairLedId.V },
|
||||
{ LedId.Keyboard_B, CorsairLedId.B },
|
||||
{ LedId.Keyboard_N, CorsairLedId.N },
|
||||
{ LedId.Keyboard_M, CorsairLedId.M },
|
||||
{ LedId.Keyboard_CommaAndLessThan, CorsairLedId.CommaAndLessThan },
|
||||
{ LedId.Keyboard_PeriodAndBiggerThan, CorsairLedId.PeriodAndBiggerThan },
|
||||
{ LedId.Keyboard_SlashAndQuestionMark, CorsairLedId.SlashAndQuestionMark },
|
||||
{ LedId.Keyboard_LeftCtrl, CorsairLedId.LeftCtrl },
|
||||
{ LedId.Keyboard_LeftGui, CorsairLedId.LeftGui },
|
||||
{ LedId.Keyboard_LeftAlt, CorsairLedId.LeftAlt },
|
||||
{ LedId.Keyboard_Lang2, CorsairLedId.Lang2 },
|
||||
{ LedId.Keyboard_Space, CorsairLedId.Space },
|
||||
{ LedId.Keyboard_Lang1, CorsairLedId.Lang1 },
|
||||
{ LedId.Keyboard_International2, CorsairLedId.International2 },
|
||||
{ LedId.Keyboard_RightAlt, CorsairLedId.RightAlt },
|
||||
{ LedId.Keyboard_RightGui, CorsairLedId.RightGui },
|
||||
{ LedId.Keyboard_Application, CorsairLedId.Application },
|
||||
{ LedId.Keyboard_Brightness, CorsairLedId.Brightness },
|
||||
{ LedId.Keyboard_F12, CorsairLedId.F12 },
|
||||
{ LedId.Keyboard_PrintScreen, CorsairLedId.PrintScreen },
|
||||
{ LedId.Keyboard_ScrollLock, CorsairLedId.ScrollLock },
|
||||
{ LedId.Keyboard_PauseBreak, CorsairLedId.PauseBreak },
|
||||
{ LedId.Keyboard_Insert, CorsairLedId.Insert },
|
||||
{ LedId.Keyboard_Home, CorsairLedId.Home },
|
||||
{ LedId.Keyboard_PageUp, CorsairLedId.PageUp },
|
||||
{ LedId.Keyboard_BracketRight, CorsairLedId.BracketRight },
|
||||
{ LedId.Keyboard_Backslash, CorsairLedId.Backslash },
|
||||
{ LedId.Keyboard_NonUsTilde, CorsairLedId.NonUsTilde },
|
||||
{ LedId.Keyboard_Enter, CorsairLedId.Enter },
|
||||
{ LedId.Keyboard_International1, CorsairLedId.International1 },
|
||||
{ LedId.Keyboard_EqualsAndPlus, CorsairLedId.EqualsAndPlus },
|
||||
{ LedId.Keyboard_International3, CorsairLedId.International3 },
|
||||
{ LedId.Keyboard_Backspace, CorsairLedId.Backspace },
|
||||
{ LedId.Keyboard_Delete, CorsairLedId.Delete },
|
||||
{ LedId.Keyboard_End, CorsairLedId.End },
|
||||
{ LedId.Keyboard_PageDown, CorsairLedId.PageDown },
|
||||
{ LedId.Keyboard_RightShift, CorsairLedId.RightShift },
|
||||
{ LedId.Keyboard_RightCtrl, CorsairLedId.RightCtrl },
|
||||
{ LedId.Keyboard_ArrowUp, CorsairLedId.UpArrow },
|
||||
{ LedId.Keyboard_ArrowLeft, CorsairLedId.LeftArrow },
|
||||
{ LedId.Keyboard_ArrowDown, CorsairLedId.DownArrow },
|
||||
{ LedId.Keyboard_ArrowRight, CorsairLedId.RightArrow },
|
||||
{ LedId.Keyboard_WinLock, CorsairLedId.WinLock },
|
||||
{ LedId.Keyboard_MediaMute, CorsairLedId.Mute },
|
||||
{ LedId.Keyboard_MediaStop, CorsairLedId.Stop },
|
||||
{ LedId.Keyboard_MediaPreviousTrack, CorsairLedId.ScanPreviousTrack },
|
||||
{ LedId.Keyboard_MediaPlay, CorsairLedId.PlayPause },
|
||||
{ LedId.Keyboard_MediaNextTrack, CorsairLedId.ScanNextTrack },
|
||||
{ LedId.Keyboard_NumLock, CorsairLedId.NumLock },
|
||||
{ LedId.Keyboard_NumSlash, CorsairLedId.KeypadSlash },
|
||||
{ LedId.Keyboard_NumAsterisk, CorsairLedId.KeypadAsterisk },
|
||||
{ LedId.Keyboard_NumMinus, CorsairLedId.KeypadMinus },
|
||||
{ LedId.Keyboard_NumPlus, CorsairLedId.KeypadPlus },
|
||||
{ LedId.Keyboard_NumEnter, CorsairLedId.KeypadEnter },
|
||||
{ LedId.Keyboard_Num7, CorsairLedId.Keypad7 },
|
||||
{ LedId.Keyboard_Num8, CorsairLedId.Keypad8 },
|
||||
{ LedId.Keyboard_Num9, CorsairLedId.Keypad9 },
|
||||
{ LedId.Keyboard_NumComma, CorsairLedId.KeypadComma },
|
||||
{ LedId.Keyboard_Num4, CorsairLedId.Keypad4 },
|
||||
{ LedId.Keyboard_Num5, CorsairLedId.Keypad5 },
|
||||
{ LedId.Keyboard_Num6, CorsairLedId.Keypad6 },
|
||||
{ LedId.Keyboard_Num1, CorsairLedId.Keypad1 },
|
||||
{ LedId.Keyboard_Num2, CorsairLedId.Keypad2 },
|
||||
{ LedId.Keyboard_Num3, CorsairLedId.Keypad3 },
|
||||
{ LedId.Keyboard_Num0, CorsairLedId.Keypad0 },
|
||||
{ LedId.Keyboard_NumPeriodAndDelete, CorsairLedId.KeypadPeriodAndDelete },
|
||||
{ LedId.Keyboard_Programmable1, CorsairLedId.G1 },
|
||||
{ LedId.Keyboard_Programmable2, CorsairLedId.G2 },
|
||||
{ LedId.Keyboard_Programmable3, CorsairLedId.G3 },
|
||||
{ LedId.Keyboard_Programmable4, CorsairLedId.G4 },
|
||||
{ LedId.Keyboard_Programmable5, CorsairLedId.G5 },
|
||||
{ LedId.Keyboard_Programmable6, CorsairLedId.G6 },
|
||||
{ LedId.Keyboard_Programmable7, CorsairLedId.G7 },
|
||||
{ LedId.Keyboard_Programmable8, CorsairLedId.G8 },
|
||||
{ LedId.Keyboard_Programmable9, CorsairLedId.G9 },
|
||||
{ LedId.Keyboard_Programmable10, CorsairLedId.G10 },
|
||||
{ LedId.Keyboard_MediaVolumeUp, CorsairLedId.VolumeUp },
|
||||
{ LedId.Keyboard_MediaVolumeDown, CorsairLedId.VolumeDown },
|
||||
{ LedId.Keyboard_MacroRecording, CorsairLedId.MR },
|
||||
{ LedId.Keyboard_Macro1, CorsairLedId.M1 },
|
||||
{ LedId.Keyboard_Macro2, CorsairLedId.M2 },
|
||||
{ LedId.Keyboard_Macro3, CorsairLedId.M3 },
|
||||
{ LedId.Keyboard_Programmable11, CorsairLedId.G11 },
|
||||
{ LedId.Keyboard_Programmable12, CorsairLedId.G12 },
|
||||
{ LedId.Keyboard_Programmable13, CorsairLedId.G13 },
|
||||
{ LedId.Keyboard_Programmable14, CorsairLedId.G14 },
|
||||
{ LedId.Keyboard_Programmable15, CorsairLedId.G15 },
|
||||
{ LedId.Keyboard_Programmable16, CorsairLedId.G16 },
|
||||
{ LedId.Keyboard_Programmable17, CorsairLedId.G17 },
|
||||
{ LedId.Keyboard_Programmable18, CorsairLedId.G18 },
|
||||
{ LedId.Keyboard_International5, CorsairLedId.International5 },
|
||||
{ LedId.Keyboard_International4, CorsairLedId.International4 },
|
||||
{ LedId.Keyboard_Custom1, CorsairLedId.Lightbar1 },
|
||||
{ LedId.Keyboard_Custom2, CorsairLedId.Lightbar2 },
|
||||
{ LedId.Keyboard_Custom3, CorsairLedId.Lightbar3 },
|
||||
{ LedId.Keyboard_Custom4, CorsairLedId.Lightbar4 },
|
||||
{ LedId.Keyboard_Custom5, CorsairLedId.Lightbar5 },
|
||||
{ LedId.Keyboard_Custom6, CorsairLedId.Lightbar6 },
|
||||
{ LedId.Keyboard_Custom7, CorsairLedId.Lightbar7 },
|
||||
{ LedId.Keyboard_Custom8, CorsairLedId.Lightbar8 },
|
||||
{ LedId.Keyboard_Custom9, CorsairLedId.Lightbar9 },
|
||||
{ LedId.Keyboard_Custom10, CorsairLedId.Lightbar10 },
|
||||
{ LedId.Keyboard_Custom11, CorsairLedId.Lightbar11 },
|
||||
{ LedId.Keyboard_Custom12, CorsairLedId.Lightbar12 },
|
||||
{ LedId.Keyboard_Custom13, CorsairLedId.Lightbar13 },
|
||||
{ LedId.Keyboard_Custom14, CorsairLedId.Lightbar14 },
|
||||
{ LedId.Keyboard_Custom15, CorsairLedId.Lightbar15 },
|
||||
{ LedId.Keyboard_Custom16, CorsairLedId.Lightbar16 },
|
||||
{ LedId.Keyboard_Custom17, CorsairLedId.Lightbar17 },
|
||||
{ LedId.Keyboard_Custom18, CorsairLedId.Lightbar18 },
|
||||
{ LedId.Keyboard_Custom19, CorsairLedId.Lightbar19 },
|
||||
{ LedId.Keyboard_Custom20, CorsairLedId.LedProgramming },
|
||||
{ LedId.Keyboard_Custom21, CorsairLedId.Fn }
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user