1
0
mirror of https://github.com/DarthAffe/RGB.NET.git synced 2025-12-13 01:58:30 +00:00

Merge pull request #187 from DarthAffe/SDK/Razer

Razer improvements & missing PIDs
This commit is contained in:
Robert Beekman 2021-03-26 21:22:10 +01:00 committed by GitHub
commit 82ca48d933
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 227 additions and 163 deletions

View File

@ -0,0 +1,43 @@
namespace RGB.NET.Devices.Razer
{
/// <summary>
/// Represents a type of Razer SDK endpoint
/// </summary>
public enum RazerEndpointType
{
/// <summary>
/// The keyboard endpoint
/// </summary>
Keyboard,
/// <summary>
/// The laptop keyboard endpoint, shares the <see cref="Keyboard"/> endpoint but has a different LED layout
/// </summary>
LaptopKeyboard,
/// <summary>
/// The mouse endpoint
/// </summary>
Mouse,
/// <summary>
/// The headset endpoint
/// </summary>
Headset,
/// <summary>
/// The mousepad endpoint
/// </summary>
Mousepad,
/// <summary>
/// The keypad endpoint
/// </summary>
Keypad,
/// <summary>
/// The Chroma Link endpoint
/// </summary>
ChromaLink,
}
}

View File

@ -1,5 +1,4 @@
using System; using RGB.NET.Core;
using RGB.NET.Core;
namespace RGB.NET.Devices.Razer namespace RGB.NET.Devices.Razer
{ {
@ -26,6 +25,11 @@ namespace RGB.NET.Devices.Razer
/// <inheritdoc /> /// <inheritdoc />
public object? LayoutMetadata { get; set; } public object? LayoutMetadata { get; set; }
/// <summary>
/// Gets the Razer SDK endpoint type the <see cref="IRGBDevice"/> is addressed through.
/// </summary>
public RazerEndpointType EndpointType { get; }
#endregion #endregion
#region Constructors #region Constructors
@ -34,10 +38,12 @@ namespace RGB.NET.Devices.Razer
/// Internal constructor of managed <see cref="RazerRGBDeviceInfo"/>. /// Internal constructor of managed <see cref="RazerRGBDeviceInfo"/>.
/// </summary> /// </summary>
/// <param name="deviceType">The type of the <see cref="IRGBDevice"/>.</param> /// <param name="deviceType">The type of the <see cref="IRGBDevice"/>.</param>
/// <param name="endpointType">The Razer SDK endpoint type the <see cref="IRGBDevice"/> is addressed through.</param>
/// <param name="model">The model of the <see cref="IRGBDevice"/>.</param> /// <param name="model">The model of the <see cref="IRGBDevice"/>.</param>
internal RazerRGBDeviceInfo(RGBDeviceType deviceType, string model) internal RazerRGBDeviceInfo(RGBDeviceType deviceType, RazerEndpointType endpointType, string model)
{ {
this.DeviceType = deviceType; this.DeviceType = deviceType;
this.EndpointType = endpointType;
this.Model = model; this.Model = model;
DeviceName = $"{Manufacturer} {Model}"; DeviceName = $"{Manufacturer} {Model}";

View File

@ -2,7 +2,9 @@
using System.Linq; using System.Linq;
using HidSharp; using HidSharp;
using RGB.NET.Core; 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 namespace RGB.NET.Devices.Razer.HID
{ {
@ -16,147 +18,149 @@ namespace RGB.NET.Devices.Razer.HID
= new() = new()
{ {
// Keyboards // Keyboards
("BlackWidow Ultimate 2012", RGBDeviceType.Keyboard, 0x010D), ("BlackWidow Ultimate 2012", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x010D),
("BlackWidow Classic (Alternate)", RGBDeviceType.Keyboard, 0x010E), ("BlackWidow Classic (Alternate)", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x010E),
("Anansi", RGBDeviceType.Keyboard, 0x010F), ("Anansi", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x010F),
("BlackWidow Ultimate 2013", RGBDeviceType.Keyboard, 0x011A), ("BlackWidow Ultimate 2013", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x011A),
("BlackWidow Stealth", RGBDeviceType.Keyboard, 0x011B), ("BlackWidow Stealth", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x011B),
("DeathStalker Expert", RGBDeviceType.Keyboard, 0x0202), ("DeathStalker Expert", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0202),
("BlackWidow Chroma", RGBDeviceType.Keyboard, 0x0203), ("BlackWidow Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0203),
("DeathStalker Chroma", RGBDeviceType.Keyboard, 0x0204), ("DeathStalker Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0204),
("Blade Stealth", RGBDeviceType.Keyboard, 0x0205), ("Blade Stealth", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0205),
("BlackWidow Tournament Edition Chroma", RGBDeviceType.Keyboard, 0x0209), ("BlackWidow Tournament Edition Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0209),
("Blade QHD", RGBDeviceType.Keyboard, 0x020F), ("Blade QHD", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x020F),
("Blade Pro (Late 2016)", RGBDeviceType.Keyboard, 0x0210), ("Blade Pro (Late 2016)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0210),
("BlackWidow Chroma (Overwatch)", RGBDeviceType.Keyboard, 0x0211), ("BlackWidow Chroma (Overwatch)", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0211),
("BlackWidow Ultimate 2016", RGBDeviceType.Keyboard, 0x0214), ("BlackWidow Ultimate 2016", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0214),
("BlackWidow X Chroma", RGBDeviceType.Keyboard, 0x0216), ("BlackWidow X Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0216),
("BlackWidow X Ultimate", RGBDeviceType.Keyboard, 0x0217), ("BlackWidow X Ultimate", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0217),
("BlackWidow X Tournament Edition Chroma", RGBDeviceType.Keyboard, 0x021A), ("BlackWidow X Tournament Edition Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x021A),
("Ornata Chroma", RGBDeviceType.Keyboard, 0x021E), ("Ornata Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x021E),
("Ornata", RGBDeviceType.Keyboard, 0x021F), ("Ornata", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x021F),
("Blade Stealth (Late 2016)", RGBDeviceType.Keyboard, 0x0220), ("Blade Stealth (Late 2016)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0220),
("BlackWidow Chroma V2", RGBDeviceType.Keyboard, 0x0221), ("BlackWidow Chroma V2", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0221),
("Blade (Late 2016)", RGBDeviceType.Keyboard, 0x0224), ("Blade (Late 2016)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0224),
("Blade Pro (2017)", RGBDeviceType.Keyboard, 0x0225), ("Blade Pro (2017)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0225),
("Huntsman Elite", RGBDeviceType.Keyboard, 0x0226), ("Huntsman Elite", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0226),
("Huntsman", RGBDeviceType.Keyboard, 0x0227), ("Huntsman", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0227),
("BlackWidow Elite", RGBDeviceType.Keyboard, 0x0228), ("BlackWidow Elite", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0228),
("Cynosa Chroma", RGBDeviceType.Keyboard, 0x022A), ("Cynosa Chroma", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x022A),
("Blade Stealth (Mid 2017)", RGBDeviceType.Keyboard, 0x022D), ("Blade Stealth (Mid 2017)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x022D),
("Blade Pro FullHD (2017)", RGBDeviceType.Keyboard, 0x022F), ("Blade Pro FullHD (2017)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x022F),
("Blade Stealth (Late 2017)", RGBDeviceType.Keyboard, 0x0232), ("Blade Stealth (Late 2017)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0232),
("Blade 15 (2018)", RGBDeviceType.Keyboard, 0x0233), ("Blade 15 (2018)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0233),
("Blade Pro 17 (2019)", RGBDeviceType.Keyboard, 0x0234), ("Blade Pro 17 (2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0234),
("BlackWidow Lite (2018)", RGBDeviceType.Keyboard, 0x0235), ("BlackWidow Lite (2018)", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0235),
("BlackWidow Essential", RGBDeviceType.Keyboard, 0x0237), ("BlackWidow Essential", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0237),
("Blade Stealth (2019)", RGBDeviceType.Keyboard, 0x0239), ("Blade Stealth (2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0239),
("Blade 15 (2019) Advanced", RGBDeviceType.Keyboard, 0x023A), ("Blade 15 (2019) Advanced", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x023A),
("Blade 15 (2018) Base Model", RGBDeviceType.Keyboard, 0x023B), ("Blade 15 (2018) Base Model", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x023B),
("Cynosa Lite", RGBDeviceType.Keyboard, 0x023F), ("Cynosa Lite", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x023F),
("Blade 15 (2018) Mercury", RGBDeviceType.Keyboard, 0x0240), ("Blade 15 (2018) Mercury", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0240),
("BlackWidow (2019)", RGBDeviceType.Keyboard, 0x0241), ("BlackWidow (2019)", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0241),
("Huntsman Tournament Edition", RGBDeviceType.Keyboard, 0x0243), ("Huntsman Tournament Edition", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x0243),
("Blade 15 (Mid 2019) Mercury", RGBDeviceType.Keyboard, 0x0245), ("Blade 15 (Mid 2019) Mercury", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0245),
("Blade 15 (Mid 2019) Base", RGBDeviceType.Keyboard, 0x0246), ("Blade 15 (Mid 2019) Base", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0246),
("Blade Stealth (Late 2019)", RGBDeviceType.Keyboard, 0x024A), ("Blade Stealth (Late 2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x024A),
("Blade Pro (Late 2019)", RGBDeviceType.Keyboard, 0x024C), ("Blade Pro (Late 2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x024C),
("Blade 15 Studio Edition (2019)", RGBDeviceType.Keyboard, 0x024D), ("Blade 15 Studio Edition (2019)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x024D),
("Blade Stealth (Early 2020)", RGBDeviceType.Keyboard, 0x0252), ("Blade Stealth (Early 2020)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0252),
("Blade 15 Advanced (2020)", RGBDeviceType.Keyboard, 0x0253), ("Blade 15 Advanced (2020)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0253),
("Blade 15 (Early 2020) Base", RGBDeviceType.Keyboard, 0x0255), ("Blade 15 (Early 2020) Base", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0255),
("Blade Stealth (Late 2020)", RGBDeviceType.Keyboard, 0x0259), ("Blade Stealth (Late 2020)", RGBDeviceType.Keyboard, RazerEndpointType.LaptopKeyboard, 0x0259),
("Ornata Chroma V2", RGBDeviceType.Keyboard, 0x025D), ("BlackWidow V3 Pro", RGBDeviceType.Keyboard, RazerEndpointType.Keyboard, 0x25A), // The keyboard, only present when connected with cable
("Cynosa V2", RGBDeviceType.Keyboard, 0x025E), ("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 // Mice
("Orochi 2011", RGBDeviceType.Mouse, 0x0013), ("Orochi 2011", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0013),
("DeathAdder 3.5G", RGBDeviceType.Mouse, 0x0016), ("DeathAdder 3.5G", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0016),
("Abyssus 1800", RGBDeviceType.Mouse, 0x0020), ("Abyssus 1800", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0020),
("Mamba 2012 (Wired)", RGBDeviceType.Mouse, 0x0024), ("Mamba 2012 (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0024),
("Mamba 2012 (Wireless)", RGBDeviceType.Mouse, 0x0025), ("Mamba 2012 (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0025),
("Naga 2012", RGBDeviceType.Mouse, 0x002E), ("Naga 2012", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x002E),
("Imperator 2012", RGBDeviceType.Mouse, 0x002F), ("Imperator 2012", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x002F),
("Ouroboros 2012", RGBDeviceType.Mouse, 0x0032), ("Ouroboros 2012", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0032),
("Taipan", RGBDeviceType.Mouse, 0x0034), ("Taipan", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0034),
("Naga Hex (Red)", RGBDeviceType.Mouse, 0x0036), ("Naga Hex (Red)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0036),
("DeathAdder 2013", RGBDeviceType.Mouse, 0x0037), ("DeathAdder 2013", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0037),
("DeathAdder 1800", RGBDeviceType.Mouse, 0x0038), ("DeathAdder 1800", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0038),
("Orochi 2013", RGBDeviceType.Mouse, 0x0039), ("Orochi 2013", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0039),
("Naga 2014", RGBDeviceType.Mouse, 0x0040), ("Naga 2014", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0040),
("Naga Hex", RGBDeviceType.Mouse, 0x0041), ("Naga Hex", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0041),
("Abyssus 2014", RGBDeviceType.Mouse, 0x0042), ("Abyssus 2014", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0042),
("DeathAdder Chroma", RGBDeviceType.Mouse, 0x0043), ("DeathAdder Chroma", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0043),
("Mamba (Wired)", RGBDeviceType.Mouse, 0x0044), ("Mamba (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0044),
("Mamba (Wireless)", RGBDeviceType.Mouse, 0x0045), ("Mamba (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0045),
("Mamba Tournament Edition", RGBDeviceType.Mouse, 0x0046), ("Mamba Tournament Edition", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0046),
("Orochi (Wired)", RGBDeviceType.Mouse, 0x0048), ("Orochi (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0048),
("Diamondback Chroma", RGBDeviceType.Mouse, 0x004C), ("Diamondback Chroma", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x004C),
("DeathAdder 2000", RGBDeviceType.Mouse, 0x004F), ("DeathAdder 2000", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x004F),
("Naga Hex V2", RGBDeviceType.Mouse, 0x0050), ("Naga Hex V2", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0050),
("Naga Chroma", RGBDeviceType.Mouse, 0x0053), ("Naga Chroma", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0053),
("DeathAdder 3500", RGBDeviceType.Mouse, 0x0054), ("DeathAdder 3500", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0054),
("Lancehead (Wired)", RGBDeviceType.Mouse, 0x0059), ("Lancehead (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0059),
("Lancehead (Wireless)", RGBDeviceType.Mouse, 0x005A), ("Lancehead (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x005A),
("Abyssus V2", RGBDeviceType.Mouse, 0x005B), ("Abyssus V2", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x005B),
("DeathAdder Elite", RGBDeviceType.Mouse, 0x005C), ("DeathAdder Elite", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x005C),
("Abyssus 2000", RGBDeviceType.Mouse, 0x005E), ("Abyssus 2000", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x005E),
("Lancehead Tournament Edition", RGBDeviceType.Mouse, 0x0060), ("Lancehead Tournament Edition", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0060),
("Atheris (Receiver)", RGBDeviceType.Mouse, 0x0062), ("Atheris (Receiver)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0062),
("Basilisk", RGBDeviceType.Mouse, 0x0064), ("Basilisk", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0064),
("Naga Trinity", RGBDeviceType.Mouse, 0x0067), ("Naga Trinity", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0067),
("Abyssus Elite (D.Va Edition)", RGBDeviceType.Mouse, 0x006A), ("Abyssus Elite (D.Va Edition)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006A),
("Abyssus Essential", RGBDeviceType.Mouse, 0x006B), ("Abyssus Essential", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006B),
("Mamba Elite (Wired)", RGBDeviceType.Mouse, 0x006C), ("Mamba Elite (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006C),
("DeathAdder Essential", RGBDeviceType.Mouse, 0x006E), ("DeathAdder Essential", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006E),
("Lancehead Wireless (Receiver)", RGBDeviceType.Mouse, 0x006F), ("Lancehead Wireless (Receiver)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x006F),
("Lancehead Wireless (Wired)", RGBDeviceType.Mouse, 0x0070), ("Lancehead Wireless (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0070),
("DeathAdder Essential (White Edition)", RGBDeviceType.Mouse, 0x0071), ("DeathAdder Essential (White Edition)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0071),
("Mamba Wireless (Receiver)", RGBDeviceType.Mouse, 0x0072), ("Mamba Wireless (Receiver)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0072),
("Mamba Wireless (Wired)", RGBDeviceType.Mouse, 0x0073), ("Mamba Wireless (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0073),
("Viper", RGBDeviceType.Mouse, 0x0078), ("Viper", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0078),
("Viper Ultimate (Wired)", RGBDeviceType.Mouse, 0x007A), ("Viper Ultimate (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x007A),
("Viper Ultimate (Wireless)", RGBDeviceType.Mouse, 0x007B), ("Viper Ultimate (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x007B),
("DeathAdder V2 Pro (Wired)", RGBDeviceType.Mouse, 0x007C), ("DeathAdder V2 Pro (Wired)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x007C),
("DeathAdder V2 Pro (Wireless)", RGBDeviceType.Mouse, 0x007D), ("DeathAdder V2 Pro (Wireless)", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x007D),
("Basilisk X HyperSpeed", RGBDeviceType.Mouse, 0x0083), ("Basilisk X HyperSpeed", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0083),
("Basilisk Ultimate", RGBDeviceType.Mouse, 0x0088), ("Basilisk Ultimate", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0088),
("DeathAdder V2", RGBDeviceType.Mouse, 0x0084), ("DeathAdder V2", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x0084),
("Viper Mini", RGBDeviceType.Mouse, 0x008A), ("Viper Mini", RGBDeviceType.Mouse, RazerEndpointType.Mouse, 0x008A),
// Mousepads // Mousepads
("Firefly Hyperflux", RGBDeviceType.Mousepad, 0x0068), ("Firefly Hyperflux", RGBDeviceType.Mousepad, RazerEndpointType.Mousepad, 0x0068),
("Firefly", RGBDeviceType.Mousepad, 0x0C00), ("Firefly", RGBDeviceType.Mousepad, RazerEndpointType.Mousepad, 0x0C00),
("Goliathus", RGBDeviceType.Mousepad, 0x0C01), ("Goliathus", RGBDeviceType.Mousepad, RazerEndpointType.ChromaLink, 0x0C01),
("Goliathus Extended", RGBDeviceType.Mousepad, 0x0C02), ("Goliathus Extended", RGBDeviceType.Mousepad, RazerEndpointType.ChromaLink, 0x0C02),
("Firefly v2", RGBDeviceType.Mousepad, 0x0C04), ("Firefly v2", RGBDeviceType.Mousepad, RazerEndpointType.Mousepad, 0x0C04),
// Headsets // Headsets
("Kraken 7.1", RGBDeviceType.Headset, 0x0501), ("Kraken 7.1", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0501),
("Kraken 7.1 Chroma", RGBDeviceType.Headset, 0x0504), ("Kraken 7.1 Chroma", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0504),
("Kraken 7.1", RGBDeviceType.Headset, 0x0506), ("Kraken 7.1", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0506),
("Kraken 7.1 V2", RGBDeviceType.Headset, 0x0510), ("Kraken 7.1 V2", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0510),
("Kraken Ultimate", RGBDeviceType.Headset, 0x0527), ("Kraken Ultimate", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0527),
("Kraken Kitty Edition", RGBDeviceType.Headset, 0x0F19), ("Kraken Kitty Edition", RGBDeviceType.Headset, RazerEndpointType.Headset, 0x0F19),
// Keypads // Keypads
("Nostromo", RGBDeviceType.Keypad, 0x0111), ("Nostromo", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0111),
("Orbweaver", RGBDeviceType.Keypad, 0x0113), ("Orbweaver", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0113),
("Tartarus", RGBDeviceType.Keypad, 0x0201), ("Tartarus", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0201),
("Orbweaver Chroma", RGBDeviceType.Keypad, 0x0207), ("Orbweaver Chroma", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0207),
("Tartarus Chroma", RGBDeviceType.Keypad, 0x0208), ("Tartarus Chroma", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0208),
("Tartarus V2", RGBDeviceType.Keypad, 0x022B), ("Tartarus V2", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x022B),
("Tartarus Pro", RGBDeviceType.Keypad, 0x0244), ("Tartarus Pro", RGBDeviceType.Keypad, RazerEndpointType.Keypad, 0x0244),
// Misc - unsupported through the effects API // Misc - guessing these are through ChromaLink
// ("Core", RGBDeviceType.GraphicsCard, 0x0215), ("Core", RGBDeviceType.GraphicsCard, RazerEndpointType.ChromaLink, 0x0215),
// ("Base Station Chroma", RGBDeviceType.HeadsetStand, 0x0F08), ("Base Station Chroma", RGBDeviceType.HeadsetStand, RazerEndpointType.ChromaLink, 0x0F08),
// ("Nommo Chroma", RGBDeviceType.Unknown, 0x0517), ("Nommo Chroma", RGBDeviceType.Speaker, RazerEndpointType.ChromaLink, 0x0517),
// ("Nommo Pro", RGBDeviceType.Unknown, 0x0518), ("Nommo Pro", RGBDeviceType.Speaker, RazerEndpointType.ChromaLink, 0x0518),
// ("Chroma Mug Holder", RGBDeviceType.Unknown, 0x0F07), ("Chroma Mug Holder", RGBDeviceType.Unknown, RazerEndpointType.ChromaLink, 0x0F07),
// ("Chroma Hardware Development Kit (HDK)", RGBDeviceType.Unknown, 0x0F09), ("Chroma Hardware Development Kit (HDK)", RGBDeviceType.Unknown, RazerEndpointType.ChromaLink, 0x0F09),
// ("Mouse Bungee V3 Chroma", RGBDeviceType.Unknown, 0x0F1D), ("Mouse Bungee V3 Chroma", RGBDeviceType.Unknown, RazerEndpointType.ChromaLink, 0x0F1D),
// ("Base Station V2 Chroma", RGBDeviceType.Unknown, 0x0F20) ("Base Station V2 Chroma", RGBDeviceType.Unknown, RazerEndpointType.ChromaLink, 0x0F20)
}; };
#endregion #endregion

View File

@ -37,6 +37,7 @@ namespace RGB.NET.Devices.Razer
private void InitializeLayout() 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 i = 0; i < _Defines.KEYBOARD_MAX_ROW; i++)
for (int j = 0; j < _Defines.KEYBOARD_MAX_COLUMN; j++) 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)); AddLed(LedId.Keyboard_Escape + ((i * _Defines.KEYBOARD_MAX_COLUMN) + j), new Point(j * 20, i * 20), new Size(19, 19));

View File

@ -24,9 +24,11 @@ namespace RGB.NET.Devices.Razer
/// Internal constructor of managed <see cref="T:RGB.NET.Devices.Razer.RazerKeyboardRGBDeviceInfo" />. /// Internal constructor of managed <see cref="T:RGB.NET.Devices.Razer.RazerKeyboardRGBDeviceInfo" />.
/// </summary> /// </summary>
/// <param name="model">The model of the <see cref="IRGBDevice"/>.</param> /// <param name="model">The model of the <see cref="IRGBDevice"/>.</param>
internal RazerKeyboardRGBDeviceInfo(string model) /// <param name="endpointType">The Razer SDK endpoint type the <see cref="IRGBDevice"/> is addressed through.</param>
: base(RGBDeviceType.Keyboard, model) internal RazerKeyboardRGBDeviceInfo(string model, RazerEndpointType endpointType)
{ } : base(RGBDeviceType.Keyboard, endpointType, model)
{
}
#endregion #endregion
} }

View File

@ -7,7 +7,7 @@
internal const int CHROMALINK_EFFECT_ID = 1; internal const int CHROMALINK_EFFECT_ID = 1;
internal const int KEYBOARD_EFFECT_ID = 9; internal const int KEYBOARD_EFFECT_ID = 9;
internal const int MOUSEPAD_EFFECT_ID = 6; 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 KEYPAD_EFFECT_ID = 2;
internal const int KEYBOARD_MAX_ROW = 8; internal const int KEYBOARD_MAX_ROW = 8;
@ -16,7 +16,7 @@
internal const int MOUSE_MAX_ROW = 9; internal const int MOUSE_MAX_ROW = 9;
internal const int MOUSE_MAX_COLUMN = 7; 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; internal const int HEADSET_MAX_LEDS = 5;

View File

@ -79,18 +79,18 @@ namespace RGB.NET.Devices.Razer
if (LoadEmulatorDevices) if (LoadEmulatorDevices)
{ {
if (loadFilter.HasFlag(RGBDeviceType.Keyboard) && devices.All(d => d.DeviceInfo.DeviceType != RGBDeviceType.Keyboard)) if (loadFilter.HasFlag(RGBDeviceType.Keyboard) && devices.All(d => d is not RazerKeyboardRGBDevice))
devices.Add(new RazerKeyboardRGBDevice(new RazerKeyboardRGBDeviceInfo("Emulator Keyboard"), GetUpdateTrigger())); devices.Add(new RazerKeyboardRGBDevice(new RazerKeyboardRGBDeviceInfo("Emulator Keyboard", RazerEndpointType.Keyboard), GetUpdateTrigger()));
if (loadFilter.HasFlag(RGBDeviceType.Mouse) && devices.All(d => d.DeviceInfo.DeviceType != RGBDeviceType.Mouse)) if (loadFilter.HasFlag(RGBDeviceType.Mouse) && devices.All(d => d is not RazerMouseRGBDevice))
devices.Add(new RazerMouseRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Mouse, "Emulator Mouse"), GetUpdateTrigger())); devices.Add(new RazerMouseRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Mouse, RazerEndpointType.Mouse, "Emulator Mouse"), GetUpdateTrigger()));
if (loadFilter.HasFlag(RGBDeviceType.Headset) && devices.All(d => d.DeviceInfo.DeviceType != RGBDeviceType.Headset)) if (loadFilter.HasFlag(RGBDeviceType.Headset) && devices.All(d => d is not RazerHeadsetRGBDevice))
devices.Add(new RazerHeadsetRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Headset, "Emulator Headset"), GetUpdateTrigger())); devices.Add(new RazerHeadsetRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Headset, RazerEndpointType.Headset, "Emulator Headset"), GetUpdateTrigger()));
if (loadFilter.HasFlag(RGBDeviceType.Mousepad) && devices.All(d => d.DeviceInfo.DeviceType != RGBDeviceType.Mousepad)) if (loadFilter.HasFlag(RGBDeviceType.Mousepad) && devices.All(d => d is not RazerMousepadRGBDevice))
devices.Add(new RazerMousepadRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Mousepad, "Emulator Mousepad"), GetUpdateTrigger())); devices.Add(new RazerMousepadRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Mousepad, RazerEndpointType.Mousepad, "Emulator Mousepad"), GetUpdateTrigger()));
if (loadFilter.HasFlag(RGBDeviceType.Keypad) && devices.All(d => d.DeviceInfo.DeviceType != RGBDeviceType.Keypad)) if (loadFilter.HasFlag(RGBDeviceType.Keypad) && devices.All(d => d is not RazerMousepadRGBDevice))
devices.Add(new RazerKeypadRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Keypad, "Emulator Keypad"), GetUpdateTrigger())); devices.Add(new RazerKeypadRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Keypad, RazerEndpointType.Keypad, "Emulator Keypad"), GetUpdateTrigger()));
if (loadFilter.HasFlag(RGBDeviceType.Unknown) && devices.All(d => d.DeviceInfo.DeviceType != RGBDeviceType.Unknown)) if (loadFilter.HasFlag(RGBDeviceType.Unknown) && devices.All(d => d is not RazerChromaLinkRGBDevice))
devices.Add(new RazerChromaLinkRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Unknown, "Emulator Chroma Link"), GetUpdateTrigger())); devices.Add(new RazerChromaLinkRGBDevice(new RazerRGBDeviceInfo(RGBDeviceType.Unknown, RazerEndpointType.ChromaLink, "Emulator Chroma Link"), GetUpdateTrigger()));
} }
return devices; return devices;
@ -98,21 +98,29 @@ namespace RGB.NET.Devices.Razer
protected override IEnumerable<IRGBDevice> LoadDevices() protected override IEnumerable<IRGBDevice> 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()), RazerEndpointType.Keyboard => new RazerKeyboardRGBDevice(new RazerKeyboardRGBDeviceInfo(model, endpointType), GetUpdateTrigger()),
RGBDeviceType.Mouse => new RazerMouseRGBDevice(new RazerRGBDeviceInfo(deviceType, model), GetUpdateTrigger()), RazerEndpointType.LaptopKeyboard => new RazerKeyboardRGBDevice(new RazerKeyboardRGBDeviceInfo(model, endpointType), GetUpdateTrigger()),
RGBDeviceType.Headset => new RazerHeadsetRGBDevice(new RazerRGBDeviceInfo(deviceType, model), GetUpdateTrigger()), RazerEndpointType.Mouse => new RazerMouseRGBDevice(new RazerRGBDeviceInfo(deviceType, endpointType, model), GetUpdateTrigger()),
RGBDeviceType.Mousepad => new RazerMousepadRGBDevice(new RazerRGBDeviceInfo(deviceType, model), GetUpdateTrigger()), RazerEndpointType.Headset => new RazerHeadsetRGBDevice(new RazerRGBDeviceInfo(deviceType, endpointType, model), GetUpdateTrigger()),
RGBDeviceType.Keypad => new RazerKeypadRGBDevice(new RazerRGBDeviceInfo(deviceType, model), GetUpdateTrigger()), RazerEndpointType.Mousepad => new RazerMousepadRGBDevice(new RazerRGBDeviceInfo(deviceType, endpointType, model), GetUpdateTrigger()),
RGBDeviceType.Unknown => new RazerChromaLinkRGBDevice(new RazerRGBDeviceInfo(deviceType, model), GetUpdateTrigger()), RazerEndpointType.Keypad => new RazerKeypadRGBDevice(new RazerRGBDeviceInfo(deviceType, endpointType, model), GetUpdateTrigger()),
_ => throw new RGBDeviceException($"Razer SDK does not support {deviceType} devices") 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 ThrowRazerError(RazerError errorCode) => throw new RazerException(errorCode);
private void TryUnInit() private void TryUnInit()