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()