diff --git a/RGB.NET.Devices.Razer/Enum/RazerEndpointType.cs b/RGB.NET.Devices.Razer/Enum/RazerEndpointType.cs
new file mode 100644
index 0000000..3ec134b
--- /dev/null
+++ b/RGB.NET.Devices.Razer/Enum/RazerEndpointType.cs
@@ -0,0 +1,43 @@
+namespace RGB.NET.Devices.Razer
+{
+ ///
+ /// Represents a type of Razer SDK endpoint
+ ///
+ public enum RazerEndpointType
+ {
+ ///
+ /// The keyboard endpoint
+ ///
+ Keyboard,
+
+ ///
+ /// The laptop keyboard endpoint, shares the endpoint but has a different LED layout
+ ///
+ LaptopKeyboard,
+
+ ///
+ /// The mouse endpoint
+ ///
+ Mouse,
+
+ ///
+ /// The headset endpoint
+ ///
+ Headset,
+
+ ///
+ /// The mousepad endpoint
+ ///
+ Mousepad,
+
+ ///
+ /// The keypad endpoint
+ ///
+ Keypad,
+
+ ///
+ /// The Chroma Link endpoint
+ ///
+ ChromaLink,
+ }
+}
diff --git a/RGB.NET.Devices.Razer/Generic/RazerRGBDeviceInfo.cs b/RGB.NET.Devices.Razer/Generic/RazerRGBDeviceInfo.cs
index 1487bad..555b8eb 100644
--- a/RGB.NET.Devices.Razer/Generic/RazerRGBDeviceInfo.cs
+++ b/RGB.NET.Devices.Razer/Generic/RazerRGBDeviceInfo.cs
@@ -1,5 +1,4 @@
-using System;
-using RGB.NET.Core;
+using RGB.NET.Core;
namespace RGB.NET.Devices.Razer
{
@@ -26,6 +25,11 @@ namespace RGB.NET.Devices.Razer
///
public object? LayoutMetadata { get; set; }
+ ///
+ /// Gets the Razer SDK endpoint type the is addressed through.
+ ///
+ public RazerEndpointType EndpointType { get; }
+
#endregion
#region Constructors
@@ -34,10 +38,12 @@ namespace RGB.NET.Devices.Razer
/// Internal constructor of managed .
///
/// The type of the .
+ /// The Razer SDK endpoint type the is addressed through.
/// The model of the .
- internal RazerRGBDeviceInfo(RGBDeviceType deviceType, string model)
+ internal RazerRGBDeviceInfo(RGBDeviceType deviceType, RazerEndpointType endpointType, string model)
{
this.DeviceType = deviceType;
+ this.EndpointType = endpointType;
this.Model = model;
DeviceName = $"{Manufacturer} {Model}";
diff --git a/RGB.NET.Devices.Razer/HID/DeviceChecker.cs b/RGB.NET.Devices.Razer/HID/DeviceChecker.cs
index d644204..ea9aa1b 100644
--- a/RGB.NET.Devices.Razer/HID/DeviceChecker.cs
+++ b/RGB.NET.Devices.Razer/HID/DeviceChecker.cs
@@ -2,7 +2,9 @@
using System.Linq;
using HidSharp;
using RGB.NET.Core;
-using DeviceDataList = System.Collections.Generic.List<(string model, RGB.NET.Core.RGBDeviceType deviceType, int id)>;
+using DeviceDataList =
+ System.Collections.Generic.List<(string model, RGB.NET.Core.RGBDeviceType deviceType, RGB.NET.Devices.Razer.RazerEndpointType
+ razerDeviceType, int id)>;
namespace RGB.NET.Devices.Razer.HID
{
@@ -16,147 +18,149 @@ namespace RGB.NET.Devices.Razer.HID
= new()
{
// Keyboards
- ("BlackWidow Ultimate 2012", RGBDeviceType.Keyboard, 0x010D),
- ("BlackWidow Classic (Alternate)", RGBDeviceType.Keyboard, 0x010E),
- ("Anansi", RGBDeviceType.Keyboard, 0x010F),
- ("BlackWidow Ultimate 2013", RGBDeviceType.Keyboard, 0x011A),
- ("BlackWidow Stealth", RGBDeviceType.Keyboard, 0x011B),
- ("DeathStalker Expert", RGBDeviceType.Keyboard, 0x0202),
- ("BlackWidow Chroma", RGBDeviceType.Keyboard, 0x0203),
- ("DeathStalker Chroma", RGBDeviceType.Keyboard, 0x0204),
- ("Blade Stealth", RGBDeviceType.Keyboard, 0x0205),
- ("BlackWidow Tournament Edition Chroma", RGBDeviceType.Keyboard, 0x0209),
- ("Blade QHD", RGBDeviceType.Keyboard, 0x020F),
- ("Blade Pro (Late 2016)", RGBDeviceType.Keyboard, 0x0210),
- ("BlackWidow Chroma (Overwatch)", RGBDeviceType.Keyboard, 0x0211),
- ("BlackWidow Ultimate 2016", RGBDeviceType.Keyboard, 0x0214),
- ("BlackWidow X Chroma", RGBDeviceType.Keyboard, 0x0216),
- ("BlackWidow X Ultimate", RGBDeviceType.Keyboard, 0x0217),
- ("BlackWidow X Tournament Edition Chroma", RGBDeviceType.Keyboard, 0x021A),
- ("Ornata Chroma", RGBDeviceType.Keyboard, 0x021E),
- ("Ornata", RGBDeviceType.Keyboard, 0x021F),
- ("Blade Stealth (Late 2016)", RGBDeviceType.Keyboard, 0x0220),
- ("BlackWidow Chroma V2", RGBDeviceType.Keyboard, 0x0221),
- ("Blade (Late 2016)", RGBDeviceType.Keyboard, 0x0224),
- ("Blade Pro (2017)", RGBDeviceType.Keyboard, 0x0225),
- ("Huntsman Elite", RGBDeviceType.Keyboard, 0x0226),
- ("Huntsman", RGBDeviceType.Keyboard, 0x0227),
- ("BlackWidow Elite", RGBDeviceType.Keyboard, 0x0228),
- ("Cynosa Chroma", RGBDeviceType.Keyboard, 0x022A),
- ("Blade Stealth (Mid 2017)", RGBDeviceType.Keyboard, 0x022D),
- ("Blade Pro FullHD (2017)", RGBDeviceType.Keyboard, 0x022F),
- ("Blade Stealth (Late 2017)", RGBDeviceType.Keyboard, 0x0232),
- ("Blade 15 (2018)", RGBDeviceType.Keyboard, 0x0233),
- ("Blade Pro 17 (2019)", RGBDeviceType.Keyboard, 0x0234),
- ("BlackWidow Lite (2018)", RGBDeviceType.Keyboard, 0x0235),
- ("BlackWidow Essential", RGBDeviceType.Keyboard, 0x0237),
- ("Blade Stealth (2019)", RGBDeviceType.Keyboard, 0x0239),
- ("Blade 15 (2019) Advanced", RGBDeviceType.Keyboard, 0x023A),
- ("Blade 15 (2018) Base Model", RGBDeviceType.Keyboard, 0x023B),
- ("Cynosa Lite", RGBDeviceType.Keyboard, 0x023F),
- ("Blade 15 (2018) Mercury", RGBDeviceType.Keyboard, 0x0240),
- ("BlackWidow (2019)", RGBDeviceType.Keyboard, 0x0241),
- ("Huntsman Tournament Edition", RGBDeviceType.Keyboard, 0x0243),
- ("Blade 15 (Mid 2019) Mercury", RGBDeviceType.Keyboard, 0x0245),
- ("Blade 15 (Mid 2019) Base", RGBDeviceType.Keyboard, 0x0246),
- ("Blade Stealth (Late 2019)", RGBDeviceType.Keyboard, 0x024A),
- ("Blade Pro (Late 2019)", RGBDeviceType.Keyboard, 0x024C),
- ("Blade 15 Studio Edition (2019)", RGBDeviceType.Keyboard, 0x024D),
- ("Blade Stealth (Early 2020)", RGBDeviceType.Keyboard, 0x0252),
- ("Blade 15 Advanced (2020)", RGBDeviceType.Keyboard, 0x0253),
- ("Blade 15 (Early 2020) Base", RGBDeviceType.Keyboard, 0x0255),
- ("Blade Stealth (Late 2020)", RGBDeviceType.Keyboard, 0x0259),
- ("Ornata Chroma V2", RGBDeviceType.Keyboard, 0x025D),
- ("Cynosa V2", RGBDeviceType.Keyboard, 0x025E),
+ ("BlackWidow Ultimate 2012", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x010D),
+ ("BlackWidow Classic (Alternate)", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x010E),
+ ("Anansi", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x010F),
+ ("BlackWidow Ultimate 2013", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x011A),
+ ("BlackWidow Stealth", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x011B),
+ ("DeathStalker Expert", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0202),
+ ("BlackWidow Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0203),
+ ("DeathStalker Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0204),
+ ("Blade Stealth", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0205),
+ ("BlackWidow Tournament Edition Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0209),
+ ("Blade QHD", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x020F),
+ ("Blade Pro (Late 2016)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0210),
+ ("BlackWidow Chroma (Overwatch)", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0211),
+ ("BlackWidow Ultimate 2016", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0214),
+ ("BlackWidow X Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0216),
+ ("BlackWidow X Ultimate", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0217),
+ ("BlackWidow X Tournament Edition Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x021A),
+ ("Ornata Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x021E),
+ ("Ornata", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x021F),
+ ("Blade Stealth (Late 2016)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0220),
+ ("BlackWidow Chroma V2", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0221),
+ ("Blade (Late 2016)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0224),
+ ("Blade Pro (2017)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0225),
+ ("Huntsman Elite", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0226),
+ ("Huntsman", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0227),
+ ("BlackWidow Elite", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0228),
+ ("Cynosa Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x022A),
+ ("Blade Stealth (Mid 2017)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x022D),
+ ("Blade Pro FullHD (2017)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x022F),
+ ("Blade Stealth (Late 2017)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0232),
+ ("Blade 15 (2018)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0233),
+ ("Blade Pro 17 (2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0234),
+ ("BlackWidow Lite (2018)", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0235),
+ ("BlackWidow Essential", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0237),
+ ("Blade Stealth (2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0239),
+ ("Blade 15 (2019) Advanced", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x023A),
+ ("Blade 15 (2018) Base Model", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x023B),
+ ("Cynosa Lite", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x023F),
+ ("Blade 15 (2018) Mercury", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0240),
+ ("BlackWidow (2019)", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0241),
+ ("Huntsman Tournament Edition", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0243),
+ ("Blade 15 (Mid 2019) Mercury", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0245),
+ ("Blade 15 (Mid 2019) Base", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0246),
+ ("Blade Stealth (Late 2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x024A),
+ ("Blade Pro (Late 2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x024C),
+ ("Blade 15 Studio Edition (2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x024D),
+ ("Blade Stealth (Early 2020)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0252),
+ ("Blade 15 Advanced (2020)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0253),
+ ("Blade 15 (Early 2020) Base", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0255),
+ ("Blade Stealth (Late 2020)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0259),
+ ("BlackWidow V3 Pro", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x25A), // The keyboard, only present when connected with cable
+ ("BlackWidow V3 Pro", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x25C), // The dongle, may not be present when connected with cable
+ ("Ornata Chroma V2", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x025D),
+ ("Cynosa V2", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x025E),
// Mice
- ("Orochi 2011", RGBDeviceType.Mouse, 0x0013),
- ("DeathAdder 3.5G", RGBDeviceType.Mouse, 0x0016),
- ("Abyssus 1800", RGBDeviceType.Mouse, 0x0020),
- ("Mamba 2012 (Wired)", RGBDeviceType.Mouse, 0x0024),
- ("Mamba 2012 (Wireless)", RGBDeviceType.Mouse, 0x0025),
- ("Naga 2012", RGBDeviceType.Mouse, 0x002E),
- ("Imperator 2012", RGBDeviceType.Mouse, 0x002F),
- ("Ouroboros 2012", RGBDeviceType.Mouse, 0x0032),
- ("Taipan", RGBDeviceType.Mouse, 0x0034),
- ("Naga Hex (Red)", RGBDeviceType.Mouse, 0x0036),
- ("DeathAdder 2013", RGBDeviceType.Mouse, 0x0037),
- ("DeathAdder 1800", RGBDeviceType.Mouse, 0x0038),
- ("Orochi 2013", RGBDeviceType.Mouse, 0x0039),
- ("Naga 2014", RGBDeviceType.Mouse, 0x0040),
- ("Naga Hex", RGBDeviceType.Mouse, 0x0041),
- ("Abyssus 2014", RGBDeviceType.Mouse, 0x0042),
- ("DeathAdder Chroma", RGBDeviceType.Mouse, 0x0043),
- ("Mamba (Wired)", RGBDeviceType.Mouse, 0x0044),
- ("Mamba (Wireless)", RGBDeviceType.Mouse, 0x0045),
- ("Mamba Tournament Edition", RGBDeviceType.Mouse, 0x0046),
- ("Orochi (Wired)", RGBDeviceType.Mouse, 0x0048),
- ("Diamondback Chroma", RGBDeviceType.Mouse, 0x004C),
- ("DeathAdder 2000", RGBDeviceType.Mouse, 0x004F),
- ("Naga Hex V2", RGBDeviceType.Mouse, 0x0050),
- ("Naga Chroma", RGBDeviceType.Mouse, 0x0053),
- ("DeathAdder 3500", RGBDeviceType.Mouse, 0x0054),
- ("Lancehead (Wired)", RGBDeviceType.Mouse, 0x0059),
- ("Lancehead (Wireless)", RGBDeviceType.Mouse, 0x005A),
- ("Abyssus V2", RGBDeviceType.Mouse, 0x005B),
- ("DeathAdder Elite", RGBDeviceType.Mouse, 0x005C),
- ("Abyssus 2000", RGBDeviceType.Mouse, 0x005E),
- ("Lancehead Tournament Edition", RGBDeviceType.Mouse, 0x0060),
- ("Atheris (Receiver)", RGBDeviceType.Mouse, 0x0062),
- ("Basilisk", RGBDeviceType.Mouse, 0x0064),
- ("Naga Trinity", RGBDeviceType.Mouse, 0x0067),
- ("Abyssus Elite (D.Va Edition)", RGBDeviceType.Mouse, 0x006A),
- ("Abyssus Essential", RGBDeviceType.Mouse, 0x006B),
- ("Mamba Elite (Wired)", RGBDeviceType.Mouse, 0x006C),
- ("DeathAdder Essential", RGBDeviceType.Mouse, 0x006E),
- ("Lancehead Wireless (Receiver)", RGBDeviceType.Mouse, 0x006F),
- ("Lancehead Wireless (Wired)", RGBDeviceType.Mouse, 0x0070),
- ("DeathAdder Essential (White Edition)", RGBDeviceType.Mouse, 0x0071),
- ("Mamba Wireless (Receiver)", RGBDeviceType.Mouse, 0x0072),
- ("Mamba Wireless (Wired)", RGBDeviceType.Mouse, 0x0073),
- ("Viper", RGBDeviceType.Mouse, 0x0078),
- ("Viper Ultimate (Wired)", RGBDeviceType.Mouse, 0x007A),
- ("Viper Ultimate (Wireless)", RGBDeviceType.Mouse, 0x007B),
- ("DeathAdder V2 Pro (Wired)", RGBDeviceType.Mouse, 0x007C),
- ("DeathAdder V2 Pro (Wireless)", RGBDeviceType.Mouse, 0x007D),
- ("Basilisk X HyperSpeed", RGBDeviceType.Mouse, 0x0083),
- ("Basilisk Ultimate", RGBDeviceType.Mouse, 0x0088),
- ("DeathAdder V2", RGBDeviceType.Mouse, 0x0084),
- ("Viper Mini", RGBDeviceType.Mouse, 0x008A),
+ ("Orochi 2011", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0013),
+ ("DeathAdder 3.5G", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0016),
+ ("Abyssus 1800", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0020),
+ ("Mamba 2012 (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0024),
+ ("Mamba 2012 (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0025),
+ ("Naga 2012", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x002E),
+ ("Imperator 2012", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x002F),
+ ("Ouroboros 2012", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0032),
+ ("Taipan", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0034),
+ ("Naga Hex (Red)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0036),
+ ("DeathAdder 2013", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0037),
+ ("DeathAdder 1800", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0038),
+ ("Orochi 2013", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0039),
+ ("Naga 2014", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0040),
+ ("Naga Hex", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0041),
+ ("Abyssus 2014", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0042),
+ ("DeathAdder Chroma", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0043),
+ ("Mamba (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0044),
+ ("Mamba (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0045),
+ ("Mamba Tournament Edition", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0046),
+ ("Orochi (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0048),
+ ("Diamondback Chroma", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x004C),
+ ("DeathAdder 2000", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x004F),
+ ("Naga Hex V2", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0050),
+ ("Naga Chroma", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0053),
+ ("DeathAdder 3500", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0054),
+ ("Lancehead (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0059),
+ ("Lancehead (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x005A),
+ ("Abyssus V2", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x005B),
+ ("DeathAdder Elite", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x005C),
+ ("Abyssus 2000", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x005E),
+ ("Lancehead Tournament Edition", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0060),
+ ("Atheris (Receiver)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0062),
+ ("Basilisk", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0064),
+ ("Naga Trinity", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0067),
+ ("Abyssus Elite (D.Va Edition)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006A),
+ ("Abyssus Essential", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006B),
+ ("Mamba Elite (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006C),
+ ("DeathAdder Essential", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006E),
+ ("Lancehead Wireless (Receiver)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006F),
+ ("Lancehead Wireless (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0070),
+ ("DeathAdder Essential (White Edition)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0071),
+ ("Mamba Wireless (Receiver)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0072),
+ ("Mamba Wireless (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0073),
+ ("Viper", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0078),
+ ("Viper Ultimate (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x007A),
+ ("Viper Ultimate (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x007B),
+ ("DeathAdder V2 Pro (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x007C),
+ ("DeathAdder V2 Pro (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x007D),
+ ("Basilisk X HyperSpeed", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0083),
+ ("Basilisk Ultimate", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0088),
+ ("DeathAdder V2", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0084),
+ ("Viper Mini", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x008A),
// Mousepads
- ("Firefly Hyperflux", RGBDeviceType.Mousepad, 0x0068),
- ("Firefly", RGBDeviceType.Mousepad, 0x0C00),
- ("Goliathus", RGBDeviceType.Mousepad, 0x0C01),
- ("Goliathus Extended", RGBDeviceType.Mousepad, 0x0C02),
- ("Firefly v2", RGBDeviceType.Mousepad, 0x0C04),
+ ("Firefly Hyperflux", RGBDeviceType.Mousepad, RazerEndpointType.Mousepad, 0x0068),
+ ("Firefly", RGBDeviceType.Mousepad, RazerEndpointType.Mousepad, 0x0C00),
+ ("Goliathus", RGBDeviceType.Mousepad, RazerEndpointType.ChromaLink, 0x0C01),
+ ("Goliathus Extended", RGBDeviceType.Mousepad, RazerEndpointType.ChromaLink, 0x0C02),
+ ("Firefly v2", RGBDeviceType.Mousepad, RazerEndpointType.Mousepad, 0x0C04),
// Headsets
- ("Kraken 7.1", RGBDeviceType.Headset, 0x0501),
- ("Kraken 7.1 Chroma", RGBDeviceType.Headset, 0x0504),
- ("Kraken 7.1", RGBDeviceType.Headset, 0x0506),
- ("Kraken 7.1 V2", RGBDeviceType.Headset, 0x0510),
- ("Kraken Ultimate", RGBDeviceType.Headset, 0x0527),
- ("Kraken Kitty Edition", RGBDeviceType.Headset, 0x0F19),
+ ("Kraken 7.1", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0501),
+ ("Kraken 7.1 Chroma", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0504),
+ ("Kraken 7.1", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0506),
+ ("Kraken 7.1 V2", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0510),
+ ("Kraken Ultimate", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0527),
+ ("Kraken Kitty Edition", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0F19),
// Keypads
- ("Nostromo", RGBDeviceType.Keypad, 0x0111),
- ("Orbweaver", RGBDeviceType.Keypad, 0x0113),
- ("Tartarus", RGBDeviceType.Keypad, 0x0201),
- ("Orbweaver Chroma", RGBDeviceType.Keypad, 0x0207),
- ("Tartarus Chroma", RGBDeviceType.Keypad, 0x0208),
- ("Tartarus V2", RGBDeviceType.Keypad, 0x022B),
- ("Tartarus Pro", RGBDeviceType.Keypad, 0x0244),
+ ("Nostromo", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0111),
+ ("Orbweaver", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0113),
+ ("Tartarus", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0201),
+ ("Orbweaver Chroma", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0207),
+ ("Tartarus Chroma", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0208),
+ ("Tartarus V2", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x022B),
+ ("Tartarus Pro", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0244),
- // Misc - unsupported through the effects API
- // ("Core", RGBDeviceType.GraphicsCard, 0x0215),
- // ("Base Station Chroma", RGBDeviceType.HeadsetStand, 0x0F08),
- // ("Nommo Chroma", RGBDeviceType.Unknown, 0x0517),
- // ("Nommo Pro", RGBDeviceType.Unknown, 0x0518),
- // ("Chroma Mug Holder", RGBDeviceType.Unknown, 0x0F07),
- // ("Chroma Hardware Development Kit (HDK)", RGBDeviceType.Unknown, 0x0F09),
- // ("Mouse Bungee V3 Chroma", RGBDeviceType.Unknown, 0x0F1D),
- // ("Base Station V2 Chroma", RGBDeviceType.Unknown, 0x0F20)
+ // Misc - guessing these are through ChromaLink
+ ("Core", RGBDeviceType.GraphicsCard, RazerEndpointType.ChromaLink, 0x0215),
+ ("Base Station Chroma", RGBDeviceType.HeadsetStand, RazerEndpointType.ChromaLink, 0x0F08),
+ ("Nommo Chroma", RGBDeviceType.Speaker, RazerEndpointType.ChromaLink, 0x0517),
+ ("Nommo Pro", RGBDeviceType.Speaker, RazerEndpointType.ChromaLink, 0x0518),
+ ("Chroma Mug Holder", RGBDeviceType.Unknown, RazerEndpointType.ChromaLink, 0x0F07),
+ ("Chroma Hardware Development Kit (HDK)", RGBDeviceType.Unknown, RazerEndpointType.ChromaLink, 0x0F09),
+ ("Mouse Bungee V3 Chroma", RGBDeviceType.Unknown, RazerEndpointType.ChromaLink, 0x0F1D),
+ ("Base Station V2 Chroma", RGBDeviceType.Unknown, RazerEndpointType.ChromaLink, 0x0F20)
};
#endregion
@@ -175,7 +179,7 @@ namespace RGB.NET.Devices.Razer.HID
HashSet ids = new(DeviceList.Local.GetHidDevices(VENDOR_ID).Select(x => x.ProductID).Distinct());
DeviceDataList connectedDevices = DEVICES.Where(d => ids.Contains(d.id) && loadFilter.HasFlag(d.deviceType)).ToList();
-
+
ConnectedDevices.AddRange(connectedDevices);
}
diff --git a/RGB.NET.Devices.Razer/Keyboard/RazerKeyboardRGBDevice.cs b/RGB.NET.Devices.Razer/Keyboard/RazerKeyboardRGBDevice.cs
index 0ba0e3e..d9af5c6 100644
--- a/RGB.NET.Devices.Razer/Keyboard/RazerKeyboardRGBDevice.cs
+++ b/RGB.NET.Devices.Razer/Keyboard/RazerKeyboardRGBDevice.cs
@@ -37,6 +37,7 @@ namespace RGB.NET.Devices.Razer
private void InitializeLayout()
{
+ // TODO Look at DeviceInfo.EndpointType and act accordingly for both Keyboard and LaptopKeyboard
for (int i = 0; i < _Defines.KEYBOARD_MAX_ROW; i++)
for (int j = 0; j < _Defines.KEYBOARD_MAX_COLUMN; j++)
AddLed(LedId.Keyboard_Escape + ((i * _Defines.KEYBOARD_MAX_COLUMN) + j), new Point(j * 20, i * 20), new Size(19, 19));
diff --git a/RGB.NET.Devices.Razer/Keyboard/RazerKeyboardRGBDeviceInfo.cs b/RGB.NET.Devices.Razer/Keyboard/RazerKeyboardRGBDeviceInfo.cs
index e9c750d..e922191 100644
--- a/RGB.NET.Devices.Razer/Keyboard/RazerKeyboardRGBDeviceInfo.cs
+++ b/RGB.NET.Devices.Razer/Keyboard/RazerKeyboardRGBDeviceInfo.cs
@@ -24,9 +24,11 @@ namespace RGB.NET.Devices.Razer
/// Internal constructor of managed .
///
/// The model of the .
- internal RazerKeyboardRGBDeviceInfo(string model)
- : base(RGBDeviceType.Keyboard, model)
- { }
+ /// The Razer SDK endpoint type the is addressed through.
+ internal RazerKeyboardRGBDeviceInfo(string model, RazerEndpointType endpointType)
+ : base(RGBDeviceType.Keyboard, endpointType, model)
+ {
+ }
#endregion
}
diff --git a/RGB.NET.Devices.Razer/Native/_Defines.cs b/RGB.NET.Devices.Razer/Native/_Defines.cs
index cd9f7ff..9db44a2 100644
--- a/RGB.NET.Devices.Razer/Native/_Defines.cs
+++ b/RGB.NET.Devices.Razer/Native/_Defines.cs
@@ -7,7 +7,7 @@
internal const int CHROMALINK_EFFECT_ID = 1;
internal const int KEYBOARD_EFFECT_ID = 9;
internal const int MOUSEPAD_EFFECT_ID = 6;
- internal const int MOUSE_EFFECT_ID = 3;
+ internal const int MOUSE_EFFECT_ID = 8;
internal const int KEYPAD_EFFECT_ID = 2;
internal const int KEYBOARD_MAX_ROW = 8;
@@ -16,7 +16,7 @@
internal const int MOUSE_MAX_ROW = 9;
internal const int MOUSE_MAX_COLUMN = 7;
- internal const int MOUSE_MAX_LEDS = KEYBOARD_MAX_ROW * KEYBOARD_MAX_COLUMN;
+ internal const int MOUSE_MAX_LEDS = MOUSE_MAX_ROW * MOUSE_MAX_COLUMN;
internal const int HEADSET_MAX_LEDS = 5;
diff --git a/RGB.NET.Devices.Razer/RazerDeviceProvider.cs b/RGB.NET.Devices.Razer/RazerDeviceProvider.cs
index 3a7838b..7cd5cf2 100644
--- a/RGB.NET.Devices.Razer/RazerDeviceProvider.cs
+++ b/RGB.NET.Devices.Razer/RazerDeviceProvider.cs
@@ -79,18 +79,18 @@ namespace RGB.NET.Devices.Razer
if (LoadEmulatorDevices)
{
- if (loadFilter.HasFlag(RGBDeviceType.Keyboard) && devices.All(d => d.DeviceInfo.DeviceType != RGBDeviceType.Keyboard))
- devices.Add(new RazerKeyboardRGBDevice(new RazerKeyboardRGBDeviceInfo("Emulator Keyboard"), GetUpdateTrigger()));
- if (loadFilter.HasFlag(RGBDeviceType.Mouse) && devices.All(d => d.DeviceInfo.DeviceType != RGBDeviceType.Mouse))
- devices.Add(new RazerMouseRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Mouse, "Emulator Mouse"), GetUpdateTrigger()));
- if (loadFilter.HasFlag(RGBDeviceType.Headset) && devices.All(d => d.DeviceInfo.DeviceType != RGBDeviceType.Headset))
- devices.Add(new RazerHeadsetRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Headset, "Emulator Headset"), GetUpdateTrigger()));
- if (loadFilter.HasFlag(RGBDeviceType.Mousepad) && devices.All(d => d.DeviceInfo.DeviceType != RGBDeviceType.Mousepad))
- devices.Add(new RazerMousepadRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Mousepad, "Emulator Mousepad"), GetUpdateTrigger()));
- if (loadFilter.HasFlag(RGBDeviceType.Keypad) && devices.All(d => d.DeviceInfo.DeviceType != RGBDeviceType.Keypad))
- devices.Add(new RazerKeypadRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Keypad, "Emulator Keypad"), GetUpdateTrigger()));
- if (loadFilter.HasFlag(RGBDeviceType.Unknown) && devices.All(d => d.DeviceInfo.DeviceType != RGBDeviceType.Unknown))
- devices.Add(new RazerChromaLinkRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Unknown, "Emulator Chroma Link"), GetUpdateTrigger()));
+ if (loadFilter.HasFlag(RGBDeviceType.Keyboard) && devices.All(d => d is not RazerKeyboardRGBDevice))
+ devices.Add(new RazerKeyboardRGBDevice(new RazerKeyboardRGBDeviceInfo("Emulator Keyboard", RazerEndpointType.Keyboard), GetUpdateTrigger()));
+ if (loadFilter.HasFlag(RGBDeviceType.Mouse) && devices.All(d => d is not RazerMouseRGBDevice))
+ devices.Add(new RazerMouseRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Mouse, RazerEndpointType.Mouse, "Emulator Mouse"), GetUpdateTrigger()));
+ if (loadFilter.HasFlag(RGBDeviceType.Headset) && devices.All(d => d is not RazerHeadsetRGBDevice))
+ devices.Add(new RazerHeadsetRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Headset, RazerEndpointType.Headset, "Emulator Headset"), GetUpdateTrigger()));
+ if (loadFilter.HasFlag(RGBDeviceType.Mousepad) && devices.All(d => d is not RazerMousepadRGBDevice))
+ devices.Add(new RazerMousepadRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Mousepad, RazerEndpointType.Mousepad, "Emulator Mousepad"), GetUpdateTrigger()));
+ if (loadFilter.HasFlag(RGBDeviceType.Keypad) && devices.All(d => d is not RazerMousepadRGBDevice))
+ devices.Add(new RazerKeypadRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Keypad, RazerEndpointType.Keypad, "Emulator Keypad"), GetUpdateTrigger()));
+ if (loadFilter.HasFlag(RGBDeviceType.Unknown) && devices.All(d => d is not RazerChromaLinkRGBDevice))
+ devices.Add(new RazerChromaLinkRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Unknown, RazerEndpointType.ChromaLink, "Emulator Chroma Link"), GetUpdateTrigger()));
}
return devices;
@@ -98,21 +98,29 @@ namespace RGB.NET.Devices.Razer
protected override IEnumerable LoadDevices()
{
- foreach ((var model, RGBDeviceType deviceType, int _) in DeviceChecker.ConnectedDevices)
+ // Only take the first device of each endpoint type, the Razer SDK doesn't allow separate control over multiple devices using the same endpoint
+ foreach ((var model, RGBDeviceType deviceType, RazerEndpointType endpointType, int _) in DeviceChecker.ConnectedDevices.GroupBy(GetEndpointDeviceType).Select(t => t.First()))
{
- yield return deviceType switch
+ yield return endpointType switch
{
- RGBDeviceType.Keyboard => new RazerKeyboardRGBDevice(new RazerKeyboardRGBDeviceInfo(model), GetUpdateTrigger()),
- RGBDeviceType.Mouse => new RazerMouseRGBDevice(new RazerRGBDeviceInfo(deviceType, model), GetUpdateTrigger()),
- RGBDeviceType.Headset => new RazerHeadsetRGBDevice(new RazerRGBDeviceInfo(deviceType, model), GetUpdateTrigger()),
- RGBDeviceType.Mousepad => new RazerMousepadRGBDevice(new RazerRGBDeviceInfo(deviceType, model), GetUpdateTrigger()),
- RGBDeviceType.Keypad => new RazerKeypadRGBDevice(new RazerRGBDeviceInfo(deviceType, model), GetUpdateTrigger()),
- RGBDeviceType.Unknown => new RazerChromaLinkRGBDevice(new RazerRGBDeviceInfo(deviceType, model), GetUpdateTrigger()),
- _ => throw new RGBDeviceException($"Razer SDK does not support {deviceType} devices")
+ RazerEndpointType.Keyboard => new RazerKeyboardRGBDevice(new RazerKeyboardRGBDeviceInfo(model, endpointType), GetUpdateTrigger()),
+ RazerEndpointType.LaptopKeyboard => new RazerKeyboardRGBDevice(new RazerKeyboardRGBDeviceInfo(model, endpointType), GetUpdateTrigger()),
+ RazerEndpointType.Mouse => new RazerMouseRGBDevice(new RazerRGBDeviceInfo(deviceType, endpointType, model), GetUpdateTrigger()),
+ RazerEndpointType.Headset => new RazerHeadsetRGBDevice(new RazerRGBDeviceInfo(deviceType, endpointType, model), GetUpdateTrigger()),
+ RazerEndpointType.Mousepad => new RazerMousepadRGBDevice(new RazerRGBDeviceInfo(deviceType, endpointType, model), GetUpdateTrigger()),
+ RazerEndpointType.Keypad => new RazerKeypadRGBDevice(new RazerRGBDeviceInfo(deviceType, endpointType, model), GetUpdateTrigger()),
+ RazerEndpointType.ChromaLink => new RazerChromaLinkRGBDevice(new RazerRGBDeviceInfo(deviceType, endpointType, model), GetUpdateTrigger()),
+ _ => throw new RGBDeviceException($"Razer SDK does not support endpoint '{endpointType}'")
};
}
}
+ private RazerEndpointType GetEndpointDeviceType((string model, RGBDeviceType deviceType, RazerEndpointType razerDeviceType, int id) device)
+ {
+ // Treat laptop keyboards as regular keyboards
+ return device.razerDeviceType == RazerEndpointType.LaptopKeyboard ? RazerEndpointType.Keyboard : device.razerDeviceType;
+ }
+
private void ThrowRazerError(RazerError errorCode) => throw new RazerException(errorCode);
private void TryUnInit()