diff --git a/Controllers/SteelSeriesController/SteelSeriesAerox3WirelessController/SteelSeriesAerox3WirelessController.cpp b/Controllers/SteelSeriesController/SteelSeriesAerox3WirelessController/SteelSeriesAerox3WirelessController.cpp deleted file mode 100644 index 3df4efa4..00000000 --- a/Controllers/SteelSeriesController/SteelSeriesAerox3WirelessController/SteelSeriesAerox3WirelessController.cpp +++ /dev/null @@ -1,152 +0,0 @@ -/*---------------------------------------------------------*\ -| SteelSeriesAerox3WirelessController.cpp | -| | -| Driver for SteelSeries Aerox 3 Wireless | -| | -| Ensar S (esensar) 09 Sep 2024 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-only | -\*---------------------------------------------------------*/ - -#include "SteelSeriesAerox3WirelessController.h" -#include "LogManager.h" -#include "SteelSeriesGeneric.h" - -SteelSeriesAerox3WirelessController::SteelSeriesAerox3WirelessController(hid_device* dev_handle, steelseries_type proto_type, const char* path) - : SteelSeriesMouseController(dev_handle, proto_type, path) -{ - SendInit(); -} - -SteelSeriesAerox3WirelessController::~SteelSeriesAerox3WirelessController() -{ - hid_close(dev); -} - -void SteelSeriesAerox3WirelessController::SendInit() -{ - /*-----------------------------------------------------------------*\ - | This sets sensitivity and allows software mode?? max 5 uint8 | - | buffer[2] = Count eg. 0 thru 5 | - | buffer[4] to [8] = dpi / 50 range = 0x04 - 0xC7 eg. 400 = 0x08 | - \*-----------------------------------------------------------------*/ - uint8_t buffer[STEELSERIES_AEROX3_PACKET_SIZE] = { 0x00, 0x2D }; - - hid_send_feature_report(dev, buffer, STEELSERIES_AEROX3_PACKET_SIZE); -} - -std::string SteelSeriesAerox3WirelessController::GetFirmwareVersion() -{ - uint8_t result = 0; - const uint8_t CMD = 0x90; - const uint8_t sz = 16; - char version[sz + 1]; - - uint8_t buffer[STEELSERIES_AEROX3_PACKET_SIZE] = { 0x00, CMD, 0x00 }; - - hid_send_feature_report(dev, buffer, STEELSERIES_AEROX3_PACKET_SIZE); - do - { - result = hid_read_timeout(dev, buffer, STEELSERIES_AEROX3_PACKET_SIZE, STEELSERIES_AEROX3_TIMEOUT); - LOG_DEBUG("[%s] Reading version buffer: Bytes Read %d Buffer %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", (proto == AEROX_3_WIRELESS) ? STEELSERIES_AEROX3_WIRELESS_NAME : STEELSERIES_AEROX3_WIRELESS_WIRED_NAME, result, - buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], buffer[5], buffer[6], buffer[7], buffer[8], buffer[9], buffer[10]); - } while(result > 0 && buffer[0] != CMD); - - if(buffer[0] == CMD) - { - /*-----------------------------------------------------------------*\ - | Read the version from the second character | - \*-----------------------------------------------------------------*/ - memcpy(version, &buffer[1], sz); - version[sz] = 0; - std::string tmp = std::string(version); - LOG_DEBUG("[%s] Version: %s as string %s", (proto == AEROX_3_WIRELESS) ? STEELSERIES_AEROX3_WIRELESS_NAME : STEELSERIES_AEROX3_WIRELESS_WIRED_NAME, version, tmp.c_str()); - - return tmp; - } - else - { - LOG_DEBUG("[%s] Unable to get version: giving up!", (proto == AEROX_3_WIRELESS) ? STEELSERIES_AEROX3_WIRELESS_NAME : STEELSERIES_AEROX3_WIRELESS_WIRED_NAME); - return ""; - } -} - -steelseries_mouse SteelSeriesAerox3WirelessController::GetMouse() -{ - return aerox_3_wireless; -} - -void SteelSeriesAerox3WirelessController::SetLightEffectAll(uint8_t effect) -{ - if(effect == 0x05) - { - uint8_t buffer[STEELSERIES_AEROX3_PACKET_SIZE] = { 0x00, 0x22, 0xFF }; - - WriteBuffer(buffer); - } -} - -void SteelSeriesAerox3WirelessController::SetColor - ( - unsigned char zone_id, - unsigned char red, - unsigned char green, - unsigned char blue, - unsigned char brightness - ) -{ - uint8_t buffer[STEELSERIES_AEROX3_PACKET_SIZE] = { 0x00, 0x21, 0x01 }; - - buffer[0x03] = zone_id; - uint8_t offset = 0x04; - - buffer[offset] = red; - buffer[offset + 1] = green; - buffer[offset + 2] = blue; - - WriteBuffer(buffer); - - // Supports only 10 steps of brightness - brightness = (uint8_t)(brightness / 10); - - if(brightness != current_brightness) - { - SetBrightness(brightness); - current_brightness = brightness; - } -} - -void SteelSeriesAerox3WirelessController::SetBrightness(uint8_t brightness) -{ - uint8_t buffer[STEELSERIES_AEROX3_PACKET_SIZE] = { 0x00, 0x23, brightness }; - - WriteBuffer(buffer); -} - -void SteelSeriesAerox3WirelessController::Save() -{ - /*---------------------------------------------------------------------------------*\ - | Save packet was not confirmed as working but packet is verified as correct. | - | https://github.com/flozz/rivalcfg/blob/master/rivalcfg/devices/aerox3.py#L141 | - \*---------------------------------------------------------------------------------*/ - uint8_t buffer2[STEELSERIES_AEROX3_PACKET_SIZE] = { 0x00, 0x11, 0x00 }; - - WriteBuffer(buffer2); -} - -void SteelSeriesAerox3WirelessController::WriteBuffer(uint8_t* buffer) -{ - if(proto == AEROX_3_WIRELESS) - { - buffer[1] |= STEELSERIES_AEROX3_WIRELESS_FLAG; - } - - hid_write(dev, buffer, STEELSERIES_AEROX3_PACKET_SIZE); - - if(proto == AEROX_3_WIRELESS) - { - // Readback required in wireless mode - hid_read_timeout(dev, buffer, STEELSERIES_AEROX3_PACKET_SIZE, STEELSERIES_AEROX3_TIMEOUT); - } -} diff --git a/Controllers/SteelSeriesController/SteelSeriesAerox3WirelessController/SteelSeriesAerox3WirelessController.h b/Controllers/SteelSeriesController/SteelSeriesAerox3WirelessController/SteelSeriesAerox3WirelessController.h deleted file mode 100644 index 3a681713..00000000 --- a/Controllers/SteelSeriesController/SteelSeriesAerox3WirelessController/SteelSeriesAerox3WirelessController.h +++ /dev/null @@ -1,61 +0,0 @@ -/*---------------------------------------------------------*\ -| SteelSeriesAerox3WirelessController.h | -| | -| Driver for SteelSeries Aerox 3 Wireless | -| | -| Ensar S (esensar) 09 Sep 2024 | -| | -| This file is part of the OpenRGB project | -| SPDX-License-Identifier: GPL-2.0-only | -\*---------------------------------------------------------*/ - -#pragma once - -#include -#include -#include -#include "RGBController.h" -#include "SteelSeriesGeneric.h" -#include "SteelSeriesMouseController.h" - -#define STEELSERIES_AEROX3_WIRELESS_NAME "SteelSeries Aerox 3 Wireless (2.4 GHz wireless mode)" -#define STEELSERIES_AEROX3_WIRELESS_WIRED_NAME "SteelSeries Aerox 3 Wireless (wired mode)" -#define STEELSERIES_AEROX3_PACKET_SIZE 64 -#define STEELSERIES_AEROX3_TIMEOUT 250 -#define STEELSERIES_AEROX3_WIRELESS_FLAG 0b01000000 - -static const steelseries_mouse aerox_3_wireless = -{ - { 0x04, 0x05 }, - { - {"Front", 0 }, - {"Middle", 1 }, - {"Rear", 2 }, - } -}; - -class SteelSeriesAerox3WirelessController: public SteelSeriesMouseController -{ -public: - SteelSeriesAerox3WirelessController(hid_device* dev_handle, steelseries_type proto_type, const char* path); - ~SteelSeriesAerox3WirelessController(); - - std::string GetFirmwareVersion() override; - steelseries_mouse GetMouse() override; - - void Save() override; - void SetLightEffectAll(uint8_t effect) override; - void SetColor - ( - unsigned char zone_id, - unsigned char red, - unsigned char green, - unsigned char blue, - unsigned char brightness - ) override; -private: - void SendInit(); - void WriteBuffer(uint8_t* buffer); - void SetBrightness(uint8_t brightness); - uint8_t current_brightness; -}; diff --git a/Controllers/SteelSeriesController/SteelSeriesAeroxWirelessController/SteelSeriesAeroxWirelessController.cpp b/Controllers/SteelSeriesController/SteelSeriesAeroxWirelessController/SteelSeriesAeroxWirelessController.cpp new file mode 100644 index 00000000..8e64ce79 --- /dev/null +++ b/Controllers/SteelSeriesController/SteelSeriesAeroxWirelessController/SteelSeriesAeroxWirelessController.cpp @@ -0,0 +1,210 @@ +/*---------------------------------------------------------*\ +| SteelSeriesAeroxWirelessController.cpp | +| | +| Driver for SteelSeries Aerox 3, 5 and 9 Wireless | +| | +| Ensar S (esensar) 09 Sep 2024 | +| | +| This file is part of the OpenRGB project | +| SPDX-License-Identifier: GPL-2.0-only | +\*---------------------------------------------------------*/ + +#include "SteelSeriesAeroxWirelessController.h" +#include "LogManager.h" +#include "SteelSeriesGeneric.h" + +SteelSeriesAeroxWirelessController::SteelSeriesAeroxWirelessController(hid_device* dev_handle, steelseries_type proto_type, const char* path) + : SteelSeriesMouseController(dev_handle, proto_type, path) +{ + switch(proto_type) + { + case AEROX_3_WIRELESS: + name = STEELSERIES_AEROX3_WIRELESS_NAME; + break; + case AEROX_3_WIRELESS_WIRED: + name = STEELSERIES_AEROX3_WIRELESS_WIRED_NAME; + break; + case AEROX_5_WIRELESS: + name = STEELSERIES_AEROX5_WIRELESS_NAME; + break; + case AEROX_5_WIRELESS_WIRED: + name = STEELSERIES_AEROX5_WIRELESS_WIRED_NAME; + break; + case AEROX_5_DESTINY_WIRELESS: + name = STEELSERIES_AEROX5_DESTINY_WIRELESS_NAME; + break; + case AEROX_5_DESTINY_WIRELESS_WIRED: + name = STEELSERIES_AEROX5_DESTINY_WIRELESS_WIRED_NAME; + break; + case AEROX_5_DIABLO_WIRELESS: + name = STEELSERIES_AEROX5_DIABLO_WIRELESS_NAME; + break; + case AEROX_5_DIABLO_WIRELESS_WIRED: + name = STEELSERIES_AEROX5_DIABLO_WIRELESS_WIRED_NAME; + break; + case AEROX_9_WIRELESS: + name = STEELSERIES_AEROX9_WIRELESS_NAME; + break; + case AEROX_9_WIRELESS_WIRED: + name = STEELSERIES_AEROX9_WIRELESS_WIRED_NAME; + break; + default: + name = STEELSERIES_AEROX3_WIRELESS_NAME; + break; + } + SendInit(); +} + +SteelSeriesAeroxWirelessController::~SteelSeriesAeroxWirelessController() +{ + hid_close(dev); +} + +void SteelSeriesAeroxWirelessController::SendInit() +{ + /*-----------------------------------------------------------------*\ + | This sets sensitivity and allows software mode?? max 5 uint8 | + | buffer[2] = Count eg. 0 thru 5 | + | buffer[4] to [8] = dpi / 50 range = 0x04 - 0xC7 eg. 400 = 0x08 | + \*-----------------------------------------------------------------*/ + uint8_t buffer[STEELSERIES_AEROX_WIRELESS_PACKET_SIZE] = { 0x00, 0x2D }; + + hid_send_feature_report(dev, buffer, STEELSERIES_AEROX_WIRELESS_PACKET_SIZE); +} + +bool SteelSeriesAeroxWirelessController::IsWireless() +{ + switch(proto) + { + case AEROX_3_WIRELESS: + case AEROX_5_WIRELESS: + case AEROX_5_DESTINY_WIRELESS: + case AEROX_5_DIABLO_WIRELESS: + case AEROX_9_WIRELESS: + return true; + break; + case AEROX_3_WIRELESS_WIRED: + case AEROX_5_WIRELESS_WIRED: + case AEROX_5_DESTINY_WIRELESS_WIRED: + case AEROX_5_DIABLO_WIRELESS_WIRED: + case AEROX_9_WIRELESS_WIRED: + default: + return false; + break; + } +} + +std::string SteelSeriesAeroxWirelessController::GetFirmwareVersion() +{ + uint8_t result = 0; + const uint8_t CMD = 0x90; + const uint8_t sz = 16; + char version[sz + 1]; + + uint8_t buffer[STEELSERIES_AEROX_WIRELESS_PACKET_SIZE] = { 0x00, CMD, 0x00 }; + + hid_send_feature_report(dev, buffer, STEELSERIES_AEROX_WIRELESS_PACKET_SIZE); + do + { + result = hid_read_timeout(dev, buffer, STEELSERIES_AEROX_WIRELESS_PACKET_SIZE, STEELSERIES_AEROX_WIRELESS_TIMEOUT); + LOG_DEBUG("[%s] Reading version buffer: Bytes Read %d Buffer %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", name, result, + buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], buffer[5], buffer[6], buffer[7], buffer[8], buffer[9], buffer[10]); + } while(result > 0 && buffer[0] != CMD); + + if(buffer[0] == CMD) + { + /*-----------------------------------------------------------------*\ + | Read the version from the second character | + \*-----------------------------------------------------------------*/ + memcpy(version, &buffer[1], sz); + version[sz] = 0; + std::string tmp = std::string(version); + LOG_DEBUG("[%s] Version: %s as string %s", name, version, tmp.c_str()); + + return tmp; + } + else + { + LOG_DEBUG("[%s] Unable to get version: giving up!", name); + return ""; + } +} + +steelseries_mouse SteelSeriesAeroxWirelessController::GetMouse() +{ + return aerox_3_wireless; +} + +void SteelSeriesAeroxWirelessController::SetLightEffectAll(uint8_t effect) +{ + if(effect == 0x05) + { + uint8_t buffer[STEELSERIES_AEROX_WIRELESS_PACKET_SIZE] = { 0x00, 0x22, 0xFF }; + + WriteBuffer(buffer); + } +} + +void SteelSeriesAeroxWirelessController::SetColor + ( + unsigned char zone_id, + unsigned char red, + unsigned char green, + unsigned char blue, + unsigned char brightness + ) +{ + uint8_t buffer[STEELSERIES_AEROX_WIRELESS_PACKET_SIZE] = { 0x00, 0x21, 0x01 }; + + buffer[0x03] = zone_id; + uint8_t offset = 0x04; + + buffer[offset] = red; + buffer[offset + 1] = green; + buffer[offset + 2] = blue; + + WriteBuffer(buffer); + + // Supports only 10 steps of brightness + brightness = (uint8_t)(brightness / 10); + + if(brightness != current_brightness) + { + SetBrightness(brightness); + current_brightness = brightness; + } +} + +void SteelSeriesAeroxWirelessController::SetBrightness(uint8_t brightness) +{ + uint8_t buffer[STEELSERIES_AEROX_WIRELESS_PACKET_SIZE] = { 0x00, 0x23, brightness }; + + WriteBuffer(buffer); +} + +void SteelSeriesAeroxWirelessController::Save() +{ + /*---------------------------------------------------------------------------------*\ + | Save packet was not confirmed as working but packet is verified as correct. | + | https://github.com/flozz/rivalcfg/blob/master/rivalcfg/devices/aerox3.py#L141 | + \*---------------------------------------------------------------------------------*/ + uint8_t buffer2[STEELSERIES_AEROX_WIRELESS_PACKET_SIZE] = { 0x00, 0x11, 0x00 }; + + WriteBuffer(buffer2); +} + +void SteelSeriesAeroxWirelessController::WriteBuffer(uint8_t* buffer) +{ + if(IsWireless()) + { + buffer[1] |= STEELSERIES_AEROX_WIRELESS_FLAG; + } + + hid_write(dev, buffer, STEELSERIES_AEROX_WIRELESS_PACKET_SIZE); + + if(IsWireless()) + { + // Readback required in wireless mode + hid_read_timeout(dev, buffer, STEELSERIES_AEROX_WIRELESS_PACKET_SIZE, STEELSERIES_AEROX_WIRELESS_TIMEOUT); + } +} diff --git a/Controllers/SteelSeriesController/SteelSeriesAeroxWirelessController/SteelSeriesAeroxWirelessController.h b/Controllers/SteelSeriesController/SteelSeriesAeroxWirelessController/SteelSeriesAeroxWirelessController.h new file mode 100644 index 00000000..e211667a --- /dev/null +++ b/Controllers/SteelSeriesController/SteelSeriesAeroxWirelessController/SteelSeriesAeroxWirelessController.h @@ -0,0 +1,71 @@ +/*---------------------------------------------------------*\ +| SteelSeriesAeroxWirelessController.h | +| | +| Driver for SteelSeries Aerox 3, 5 and 9 Wireless | +| | +| Ensar S (esensar) 09 Sep 2024 | +| | +| This file is part of the OpenRGB project | +| SPDX-License-Identifier: GPL-2.0-only | +\*---------------------------------------------------------*/ + +#pragma once + +#include +#include +#include +#include "RGBController.h" +#include "SteelSeriesGeneric.h" +#include "SteelSeriesMouseController.h" + +#define STEELSERIES_AEROX3_WIRELESS_NAME "SteelSeries Aerox 3 Wireless (2.4 GHz wireless mode)" +#define STEELSERIES_AEROX3_WIRELESS_WIRED_NAME "SteelSeries Aerox 3 Wireless (wired mode)" +#define STEELSERIES_AEROX5_WIRELESS_NAME "SteelSeries Aerox 5 Wireless (2.4 GHz wireless mode)" +#define STEELSERIES_AEROX5_WIRELESS_WIRED_NAME "SteelSeries Aerox 5 Wireless (wired mode)" +#define STEELSERIES_AEROX5_DESTINY_WIRELESS_NAME "SteelSeries Aerox 5 Wireless Destiny 2 Edition (2.4 GHz wireless mode)" +#define STEELSERIES_AEROX5_DESTINY_WIRELESS_WIRED_NAME "SteelSeries Aerox 5 Wireless Destiny 2 Edition (wired mode)" +#define STEELSERIES_AEROX5_DIABLO_WIRELESS_NAME "SteelSeries Aerox 5 Wireless Diablo IV Edition (2.4 GHz wireless mode)" +#define STEELSERIES_AEROX5_DIABLO_WIRELESS_WIRED_NAME "SteelSeries Aerox 5 Wireless Diablo IV Edition (wired mode)" +#define STEELSERIES_AEROX9_WIRELESS_NAME "SteelSeries Aerox 9 Wireless (2.4 GHz wireless mode)" +#define STEELSERIES_AEROX9_WIRELESS_WIRED_NAME "SteelSeries Aerox 9 Wireless (wired mode)" +#define STEELSERIES_AEROX_WIRELESS_PACKET_SIZE 64 +#define STEELSERIES_AEROX_WIRELESS_TIMEOUT 250 +#define STEELSERIES_AEROX_WIRELESS_FLAG 0b01000000 + +static const steelseries_mouse aerox_3_wireless = +{ + { 0x04, 0x05 }, + { + {"Front", 0 }, + {"Middle", 1 }, + {"Rear", 2 }, + } +}; + +class SteelSeriesAeroxWirelessController: public SteelSeriesMouseController +{ +public: + SteelSeriesAeroxWirelessController(hid_device* dev_handle, steelseries_type proto_type, const char* path); + ~SteelSeriesAeroxWirelessController(); + + std::string GetFirmwareVersion() override; + steelseries_mouse GetMouse() override; + + void Save() override; + void SetLightEffectAll(uint8_t effect) override; + void SetColor + ( + unsigned char zone_id, + unsigned char red, + unsigned char green, + unsigned char blue, + unsigned char brightness + ) override; +private: + bool IsWireless(); + void SendInit(); + void WriteBuffer(uint8_t* buffer); + void SetBrightness(uint8_t brightness); + uint8_t current_brightness; + const char* name; +}; diff --git a/Controllers/SteelSeriesController/SteelSeriesControllerDetect.cpp b/Controllers/SteelSeriesController/SteelSeriesControllerDetect.cpp index 0c6445d3..e2dbedff 100644 --- a/Controllers/SteelSeriesController/SteelSeriesControllerDetect.cpp +++ b/Controllers/SteelSeriesController/SteelSeriesControllerDetect.cpp @@ -11,7 +11,7 @@ #include "Detector.h" #include "RGBController.h" #include "SteelSeriesGeneric.h" -#include "SteelSeriesAerox3WirelessController.h" +#include "SteelSeriesAeroxWirelessController.h" #include "SteelSeriesAerox5Controller.h" #include "SteelSeriesAerox9Controller.h" #include "SteelSeriesArctis5Controller.h" @@ -43,38 +43,46 @@ /*-----------------------------------------------------*\ | Mouse product IDs | \*-----------------------------------------------------*/ -#define STEELSERIES_AEROX_3_PID 0x1836 -#define STEELSERIES_AEROX_3_WIRELESS_PID 0x1838 -#define STEELSERIES_AEROX_3_WIRELESS_WIRED_PID 0x183A -#define STEELSERIES_AEROX_5_PID 0x1850 -#define STEELSERIES_AEROX_9_PID 0x185A -#define STEELSERIES_RIVAL_100_PID 0x1702 -#define STEELSERIES_RIVAL_100_DOTA_PID 0x170C -#define STEELSERIES_RIVAL_105_PID 0x1814 -#define STEELSERIES_RIVAL_106_PID 0x1816 -#define STEELSERIES_RIVAL_110_PID 0x1729 -#define STEELSERIES_RIVAL_300_PID 0x1710 -#define ACER_PREDATOR_RIVAL_300_PID 0x1714 -#define STEELSERIES_RIVAL_300_CSGO_PID 0x1394 -#define STEELSERIES_RIVAL_300_CSGO_STM32_PID 0x1716 -#define STEELSERIES_RIVAL_300_CSGO_HYPERBEAST_PID 0x171A -#define STEELSERIES_RIVAL_300_DOTA_PID 0x1392 -#define STEELSERIES_RIVAL_300_HP_PID 0x1718 -#define STEELSERIES_RIVAL_300_BLACKOPS_PID 0x1710 -#define STEELSERIES_RIVAL_310_PID 0x1720 -#define STEELSERIES_RIVAL_310_CSGO_HOWL_PID 0x171E -#define STEELSERIES_RIVAL_310_PUBG_PID 0x1736 -#define STEELSERIES_RIVAL_600_PID 0x1724 -#define STEELSERIES_RIVAL_600_DOTA_2_PID 0x172E -#define STEELSERIES_RIVAL_650_PID 0x172B -#define STEELSERIES_RIVAL_650_WIRELESS_PID 0x1726 -#define STEELSERIES_RIVAL_700_PID 0x1700 -#define STEELSERIES_RIVAL_710_PID 0x1730 -#define STEELSERIES_RIVAL_3_OLD_PID 0x1824 -#define STEELSERIES_RIVAL_3_PID 0x184C -#define STEELSERIES_SENSEI_TEN_PID 0x1832 -#define STEELSERIES_SENSEI_TEN_CSGO_NEON_RIDER_PID 0x1834 -#define STEELSERIES_SENSEI_310_PID 0x1722 +#define STEELSERIES_AEROX_3_PID 0x1836 +#define STEELSERIES_AEROX_3_WIRELESS_PID 0x1838 +#define STEELSERIES_AEROX_3_WIRELESS_WIRED_PID 0x183A +#define STEELSERIES_AEROX_5_WIRELESS_PID 0x1852 +#define STEELSERIES_AEROX_5_WIRELESS_WIRED_PID 0x1854 +#define STEELSERIES_AEROX_5_DESTINY_WIRELESS_PID 0x185C +#define STEELSERIES_AEROX_5_DESTINY_WIRELESS_WIRED_PID 0x185E +#define STEELSERIES_AEROX_5_DIABLO_WIRELESS_PID 0x1860 +#define STEELSERIES_AEROX_5_DIABLO_WIRELESS_WIRED_PID 0x1862 +#define STEELSERIES_AEROX_9_WIRELESS_PID 0x1858 +#define STEELSERIES_AEROX_9_WIRELESS_WIRED_PID 0x185A +#define STEELSERIES_AEROX_5_PID 0x1850 +#define STEELSERIES_AEROX_9_PID 0x185A +#define STEELSERIES_RIVAL_100_PID 0x1702 +#define STEELSERIES_RIVAL_100_DOTA_PID 0x170C +#define STEELSERIES_RIVAL_105_PID 0x1814 +#define STEELSERIES_RIVAL_106_PID 0x1816 +#define STEELSERIES_RIVAL_110_PID 0x1729 +#define STEELSERIES_RIVAL_300_PID 0x1710 +#define ACER_PREDATOR_RIVAL_300_PID 0x1714 +#define STEELSERIES_RIVAL_300_CSGO_PID 0x1394 +#define STEELSERIES_RIVAL_300_CSGO_STM32_PID 0x1716 +#define STEELSERIES_RIVAL_300_CSGO_HYPERBEAST_PID 0x171A +#define STEELSERIES_RIVAL_300_DOTA_PID 0x1392 +#define STEELSERIES_RIVAL_300_HP_PID 0x1718 +#define STEELSERIES_RIVAL_300_BLACKOPS_PID 0x1710 +#define STEELSERIES_RIVAL_310_PID 0x1720 +#define STEELSERIES_RIVAL_310_CSGO_HOWL_PID 0x171E +#define STEELSERIES_RIVAL_310_PUBG_PID 0x1736 +#define STEELSERIES_RIVAL_600_PID 0x1724 +#define STEELSERIES_RIVAL_600_DOTA_2_PID 0x172E +#define STEELSERIES_RIVAL_650_PID 0x172B +#define STEELSERIES_RIVAL_650_WIRELESS_PID 0x1726 +#define STEELSERIES_RIVAL_700_PID 0x1700 +#define STEELSERIES_RIVAL_710_PID 0x1730 +#define STEELSERIES_RIVAL_3_OLD_PID 0x1824 +#define STEELSERIES_RIVAL_3_PID 0x184C +#define STEELSERIES_SENSEI_TEN_PID 0x1832 +#define STEELSERIES_SENSEI_TEN_CSGO_NEON_RIDER_PID 0x1834 +#define STEELSERIES_SENSEI_310_PID 0x1722 /*-----------------------------------------------------*\ | Headset product IDs | @@ -121,28 +129,26 @@ void DetectSteelSeriesAerox3(hid_device_info* info, const std::string& name) } } -void DetectSteelSeriesAerox3Wireless(hid_device_info* info, const std::string& name) +void DetectSteelSeriesAeroxWireless(hid_device_info* info, const std::string& name, steelseries_type proto_type) { hid_device* dev = hid_open_path(info->path); if(dev) { - SteelSeriesAerox3WirelessController* controller = new SteelSeriesAerox3WirelessController(dev, AEROX_3_WIRELESS, info->path); + SteelSeriesAeroxWirelessController* controller = new SteelSeriesAeroxWirelessController(dev, proto_type, info->path); RGBController_SteelSeriesRival3* rgb_controller = new RGBController_SteelSeriesRival3(controller); rgb_controller->name = name; ResourceManager::get()->RegisterRGBController(rgb_controller); } } +void DetectSteelSeriesAerox3Wireless(hid_device_info* info, const std::string& name) +{ + DetectSteelSeriesAeroxWireless(info, name, AEROX_3_WIRELESS); +} + void DetectSteelSeriesAerox3WirelessWired(hid_device_info* info, const std::string& name) { - hid_device* dev = hid_open_path(info->path); - if(dev) - { - SteelSeriesAerox3WirelessController* controller = new SteelSeriesAerox3WirelessController(dev, AEROX_3_WIRELESS_WIRED, info->path); - RGBController_SteelSeriesRival3* rgb_controller = new RGBController_SteelSeriesRival3(controller); - rgb_controller->name = name; - ResourceManager::get()->RegisterRGBController(rgb_controller); - } + DetectSteelSeriesAeroxWireless(info, name, AEROX_3_WIRELESS_WIRED); } void DetectSteelSeriesAerox5(hid_device_info* info, const std::string& name) @@ -157,6 +163,36 @@ void DetectSteelSeriesAerox5(hid_device_info* info, const std::string& name) } } +void DetectSteelSeriesAerox5Wireless(hid_device_info* info, const std::string& name) +{ + DetectSteelSeriesAeroxWireless(info, name, AEROX_5_WIRELESS); +} + +void DetectSteelSeriesAerox5WirelessWired(hid_device_info* info, const std::string& name) +{ + DetectSteelSeriesAeroxWireless(info, name, AEROX_5_WIRELESS_WIRED); +} + +void DetectSteelSeriesAerox5DestinyWireless(hid_device_info* info, const std::string& name) +{ + DetectSteelSeriesAeroxWireless(info, name, AEROX_5_DESTINY_WIRELESS); +} + +void DetectSteelSeriesAerox5DestinyWirelessWired(hid_device_info* info, const std::string& name) +{ + DetectSteelSeriesAeroxWireless(info, name, AEROX_5_DESTINY_WIRELESS_WIRED); +} + +void DetectSteelSeriesAerox5DiabloWireless(hid_device_info* info, const std::string& name) +{ + DetectSteelSeriesAeroxWireless(info, name, AEROX_5_DIABLO_WIRELESS); +} + +void DetectSteelSeriesAerox5DiabloWirelessWired(hid_device_info* info, const std::string& name) +{ + DetectSteelSeriesAeroxWireless(info, name, AEROX_5_DIABLO_WIRELESS_WIRED); +} + void DetectSteelSeriesAerox9(hid_device_info* info, const std::string& name) { hid_device* dev = hid_open_path(info->path); @@ -169,6 +205,16 @@ void DetectSteelSeriesAerox9(hid_device_info* info, const std::string& name) } } +void DetectSteelSeriesAerox9Wireless(hid_device_info* info, const std::string& name) +{ + DetectSteelSeriesAeroxWireless(info, name, AEROX_9_WIRELESS); +} + +void DetectSteelSeriesAerox9WirelessWired(hid_device_info* info, const std::string& name) +{ + DetectSteelSeriesAeroxWireless(info, name, AEROX_9_WIRELESS_WIRED); +} + void DetectSteelSeriesApex3Full(hid_device_info* info, const std::string& name) { hid_device* dev = hid_open_path(info->path); @@ -355,38 +401,46 @@ void DetectSteelSeriesArctis5(hid_device_info* info, const std::string& name) /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*\ | Mice | \*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ -REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 3 Wireless", DetectSteelSeriesAerox3Wireless, STEELSERIES_VID, STEELSERIES_AEROX_3_WIRELESS_PID, 3, 0xFFC0, 1 ); -REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 3 Wireless Wired", DetectSteelSeriesAerox3WirelessWired, STEELSERIES_VID, STEELSERIES_AEROX_3_WIRELESS_WIRED_PID, 3, 0xFFC0, 1 ); -REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 3 Wired", DetectSteelSeriesAerox3, STEELSERIES_VID, STEELSERIES_AEROX_3_PID, 3, 0xFFC0, 1 ); -REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 5 Wired", DetectSteelSeriesAerox5, STEELSERIES_VID, STEELSERIES_AEROX_5_PID, 3, 0xFFC0, 1 ); -REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 9 Wired", DetectSteelSeriesAerox9, STEELSERIES_VID, STEELSERIES_AEROX_9_PID, 3, 0xFFC0, 1 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 100", DetectSteelSeriesRival100, STEELSERIES_VID, STEELSERIES_RIVAL_100_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 100 DotA 2 Edition", DetectSteelSeriesRival100, STEELSERIES_VID, STEELSERIES_RIVAL_100_DOTA_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 105", DetectSteelSeriesRival100, STEELSERIES_VID, STEELSERIES_RIVAL_105_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 106", DetectSteelSeriesRival100, STEELSERIES_VID, STEELSERIES_RIVAL_106_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 110", DetectSteelSeriesRival100, STEELSERIES_VID, STEELSERIES_RIVAL_110_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 300", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_PID, 0 ); -REGISTER_HID_DETECTOR_I("Acer Predator Gaming Mouse (Rival 300)", DetectSteelSeriesRival300, STEELSERIES_VID, ACER_PREDATOR_RIVAL_300_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 CS:GO Fade Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_CSGO_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 CS:GO Fade Edition (stm32)", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_CSGO_STM32_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 CS:GO Hyperbeast Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_CSGO_HYPERBEAST_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 Dota 2 Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_DOTA_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 HP Omen Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_HP_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 Black Ops Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_BLACKOPS_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 310", DetectSteelSeriesSensei, STEELSERIES_VID, STEELSERIES_RIVAL_310_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 310 CS:GO Howl Edition", DetectSteelSeriesSensei, STEELSERIES_VID, STEELSERIES_RIVAL_310_CSGO_HOWL_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 310 PUBG Edition", DetectSteelSeriesSensei, STEELSERIES_VID, STEELSERIES_RIVAL_310_PUBG_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 600", DetectSteelSeriesRival600, STEELSERIES_VID, STEELSERIES_RIVAL_600_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 600 Dota 2 Edition", DetectSteelSeriesRival600, STEELSERIES_VID, STEELSERIES_RIVAL_600_DOTA_2_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 650", DetectSteelSeriesRival650, STEELSERIES_VID, STEELSERIES_RIVAL_650_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 650 Wireless", DetectSteelSeriesRival650, STEELSERIES_VID, STEELSERIES_RIVAL_650_WIRELESS_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 700", DetectSteelSeriesRival700, STEELSERIES_VID, STEELSERIES_RIVAL_700_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 710", DetectSteelSeriesRival700, STEELSERIES_VID, STEELSERIES_RIVAL_710_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 3 (Old Firmware)", DetectSteelSeriesRival3, STEELSERIES_VID, STEELSERIES_RIVAL_3_OLD_PID, 3 ); -REGISTER_HID_DETECTOR_I("SteelSeries Rival 3", DetectSteelSeriesRival3, STEELSERIES_VID, STEELSERIES_RIVAL_3_PID, 3 ); -REGISTER_HID_DETECTOR_I("SteelSeries Sensei TEN", DetectSteelSeriesSensei, STEELSERIES_VID, STEELSERIES_SENSEI_TEN_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Sensei TEN CS:GO Neon Rider Edition", DetectSteelSeriesSensei, STEELSERIES_VID, STEELSERIES_SENSEI_TEN_CSGO_NEON_RIDER_PID, 0 ); -REGISTER_HID_DETECTOR_I("SteelSeries Sensei 310", DetectSteelSeriesSensei, STEELSERIES_VID, STEELSERIES_SENSEI_310_PID, 0 ); +REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 3 Wireless", DetectSteelSeriesAerox3Wireless, STEELSERIES_VID, STEELSERIES_AEROX_3_WIRELESS_PID, 3, 0xFFC0, 1 ); +REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 3 Wireless Wired", DetectSteelSeriesAerox3WirelessWired, STEELSERIES_VID, STEELSERIES_AEROX_3_WIRELESS_WIRED_PID, 3, 0xFFC0, 1 ); +REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 3 Wired", DetectSteelSeriesAerox3, STEELSERIES_VID, STEELSERIES_AEROX_3_PID, 3, 0xFFC0, 1 ); +REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 5 Wireless", DetectSteelSeriesAerox5Wireless, STEELSERIES_VID, STEELSERIES_AEROX_5_WIRELESS_PID, 3, 0xFFC0, 1 ); +REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 5 Wireless Wired", DetectSteelSeriesAerox5WirelessWired, STEELSERIES_VID, STEELSERIES_AEROX_5_WIRELESS_WIRED_PID, 3, 0xFFC0, 1 ); +REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 5 Destiny 2 Edition Wireless", DetectSteelSeriesAerox5DestinyWireless, STEELSERIES_VID, STEELSERIES_AEROX_5_DESTINY_WIRELESS_PID, 3, 0xFFC0, 1 ); +REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 5 Destiny 2 Edition Wireless Wired", DetectSteelSeriesAerox5DestinyWirelessWired, STEELSERIES_VID, STEELSERIES_AEROX_5_DESTINY_WIRELESS_WIRED_PID, 3, 0xFFC0, 1 ); +REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 5 Diablo IV Edition Wireless", DetectSteelSeriesAerox5DiabloWireless, STEELSERIES_VID, STEELSERIES_AEROX_5_DIABLO_WIRELESS_PID, 3, 0xFFC0, 1 ); +REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 5 Diablo IV Edition Wireless Wired", DetectSteelSeriesAerox5DiabloWirelessWired, STEELSERIES_VID, STEELSERIES_AEROX_5_DIABLO_WIRELESS_WIRED_PID, 3, 0xFFC0, 1 ); +REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 5 Wired", DetectSteelSeriesAerox5, STEELSERIES_VID, STEELSERIES_AEROX_5_PID, 3, 0xFFC0, 1 ); +REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 9 Wireless", DetectSteelSeriesAerox9Wireless, STEELSERIES_VID, STEELSERIES_AEROX_9_WIRELESS_PID, 3, 0xFFC0, 1 ); +REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 9 Wireless Wired", DetectSteelSeriesAerox9WirelessWired, STEELSERIES_VID, STEELSERIES_AEROX_9_WIRELESS_WIRED_PID, 3, 0xFFC0, 1 ); +REGISTER_HID_DETECTOR_IPU("SteelSeries Aerox 9 Wired", DetectSteelSeriesAerox9, STEELSERIES_VID, STEELSERIES_AEROX_9_PID, 3, 0xFFC0, 1 ); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 100", DetectSteelSeriesRival100, STEELSERIES_VID, STEELSERIES_RIVAL_100_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 100 DotA 2 Edition", DetectSteelSeriesRival100, STEELSERIES_VID, STEELSERIES_RIVAL_100_DOTA_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 105", DetectSteelSeriesRival100, STEELSERIES_VID, STEELSERIES_RIVAL_105_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 106", DetectSteelSeriesRival100, STEELSERIES_VID, STEELSERIES_RIVAL_106_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 110", DetectSteelSeriesRival100, STEELSERIES_VID, STEELSERIES_RIVAL_110_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 300", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_PID, 0); +REGISTER_HID_DETECTOR_I("Acer Predator Gaming Mouse (Rival 300)", DetectSteelSeriesRival300, STEELSERIES_VID, ACER_PREDATOR_RIVAL_300_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 CS:GO Fade Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_CSGO_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 CS:GO Fade Edition (stm32)", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_CSGO_STM32_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 CS:GO Hyperbeast Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_CSGO_HYPERBEAST_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 Dota 2 Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_DOTA_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 HP Omen Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_HP_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 300 Black Ops Edition", DetectSteelSeriesRival300, STEELSERIES_VID, STEELSERIES_RIVAL_300_BLACKOPS_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 310", DetectSteelSeriesSensei, STEELSERIES_VID, STEELSERIES_RIVAL_310_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 310 CS:GO Howl Edition", DetectSteelSeriesSensei, STEELSERIES_VID, STEELSERIES_RIVAL_310_CSGO_HOWL_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 310 PUBG Edition", DetectSteelSeriesSensei, STEELSERIES_VID, STEELSERIES_RIVAL_310_PUBG_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 600", DetectSteelSeriesRival600, STEELSERIES_VID, STEELSERIES_RIVAL_600_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 600 Dota 2 Edition", DetectSteelSeriesRival600, STEELSERIES_VID, STEELSERIES_RIVAL_600_DOTA_2_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 650", DetectSteelSeriesRival650, STEELSERIES_VID, STEELSERIES_RIVAL_650_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 650 Wireless", DetectSteelSeriesRival650, STEELSERIES_VID, STEELSERIES_RIVAL_650_WIRELESS_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 700", DetectSteelSeriesRival700, STEELSERIES_VID, STEELSERIES_RIVAL_700_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 710", DetectSteelSeriesRival700, STEELSERIES_VID, STEELSERIES_RIVAL_710_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 3 (Old Firmware)", DetectSteelSeriesRival3, STEELSERIES_VID, STEELSERIES_RIVAL_3_OLD_PID, 3); +REGISTER_HID_DETECTOR_I("SteelSeries Rival 3", DetectSteelSeriesRival3, STEELSERIES_VID, STEELSERIES_RIVAL_3_PID, 3); +REGISTER_HID_DETECTOR_I("SteelSeries Sensei TEN", DetectSteelSeriesSensei, STEELSERIES_VID, STEELSERIES_SENSEI_TEN_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Sensei TEN CS:GO Neon Rider Edition", DetectSteelSeriesSensei, STEELSERIES_VID, STEELSERIES_SENSEI_TEN_CSGO_NEON_RIDER_PID, 0); +REGISTER_HID_DETECTOR_I("SteelSeries Sensei 310", DetectSteelSeriesSensei, STEELSERIES_VID, STEELSERIES_SENSEI_310_PID, 0); /*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------*\ | Headsets | diff --git a/Controllers/SteelSeriesController/SteelSeriesGeneric.h b/Controllers/SteelSeriesController/SteelSeriesGeneric.h index 94a81573..f7e38425 100644 --- a/Controllers/SteelSeriesController/SteelSeriesGeneric.h +++ b/Controllers/SteelSeriesController/SteelSeriesGeneric.h @@ -19,20 +19,28 @@ * for every possible device. */ typedef enum { - RIVAL_100 = 0x00, - RIVAL_300 = 0x01, - RIVAL_650 = 0x02, - SIBERIA_350 = 0x03, - APEX = 0x04, - APEX_M = 0x05, - APEX_OLD = 0x06, - SENSEI = 0x07, - RIVAL_600 = 0x08, - RIVAL_3 = 0x09, - APEX_TZONE = 0x0A, - RIVAL_700 = 0x0B, - AEROX_3 = 0x0C, - APEX_8ZONE = 0x0D, - AEROX_3_WIRELESS = 0x0E, - AEROX_3_WIRELESS_WIRED = 0x0F, + RIVAL_100 = 0x00, + RIVAL_300 = 0x01, + RIVAL_650 = 0x02, + SIBERIA_350 = 0x03, + APEX = 0x04, + APEX_M = 0x05, + APEX_OLD = 0x06, + SENSEI = 0x07, + RIVAL_600 = 0x08, + RIVAL_3 = 0x09, + APEX_TZONE = 0x0A, + RIVAL_700 = 0x0B, + AEROX_3 = 0x0C, + APEX_8ZONE = 0x0D, + AEROX_3_WIRELESS = 0x0E, + AEROX_3_WIRELESS_WIRED = 0x0F, + AEROX_5_WIRELESS = 0x10, + AEROX_5_WIRELESS_WIRED = 0x11, + AEROX_5_DESTINY_WIRELESS = 0x12, + AEROX_5_DESTINY_WIRELESS_WIRED = 0x13, + AEROX_5_DIABLO_WIRELESS = 0x14, + AEROX_5_DIABLO_WIRELESS_WIRED = 0x15, + AEROX_9_WIRELESS = 0x16, + AEROX_9_WIRELESS_WIRED = 0x17, } steelseries_type;