diff --git a/README.md b/README.md index f5bf269d..891bc327 100644 --- a/README.md +++ b/README.md @@ -181,6 +181,7 @@ sudo udevadm control --reload-rules && sudo udevadm trigger | SteelSeries Arctis Nova 3P Wireless | All | x | x | | | x | | | | x | x | x | | x | | | | | | | SteelSeries Arctis GameBuds | All | | x | | | | | | | | | | | | | | | | | | HyperX Cloud Alpha Wireless | All | x | x | | | x | | x | | | | | | | | | | | | +| HyperX Cloud Alpha 2 Wireless | All | x | x | | | | x | | | x | | | | | | | | | x | | HyperX Cloud Flight Wireless | All | | x | | | | | | | | | | | | | | | | | | HyperX Cloud II Wireless | All | | x | | | x | | | | | | | | | | | | | | | HyperX Cloud II Wireless (Kingston) | All | x | x | | | x | | | | | | | | | | | | | | diff --git a/lib/device_registry.cpp b/lib/device_registry.cpp index 73124607..9e6c4017 100644 --- a/lib/device_registry.cpp +++ b/lib/device_registry.cpp @@ -38,6 +38,7 @@ #include "devices/hyperx_cloud_2_wireless.hpp" #include "devices/hyperx_cloud_2_wireless_kingston.hpp" #include "devices/hyperx_cloud_3.hpp" +#include "devices/hyperx_cloud_alpha_2_wireless.hpp" #include "devices/hyperx_cloud_alpha_wireless.hpp" #include "devices/hyperx_cloud_flight.hpp" @@ -143,6 +144,7 @@ void DeviceRegistry::initialize() // HyperX devices registerDevice(std::make_unique()); + registerDevice(std::make_unique()); registerDevice(std::make_unique()); registerDevice(std::make_unique()); registerDevice(std::make_unique()); diff --git a/lib/devices/hyperx_cloud_alpha_2_wireless.hpp b/lib/devices/hyperx_cloud_alpha_2_wireless.hpp new file mode 100644 index 00000000..f177edc1 --- /dev/null +++ b/lib/devices/hyperx_cloud_alpha_2_wireless.hpp @@ -0,0 +1,310 @@ +#pragma once + +#include "../result_types.hpp" +#include "device_utils.hpp" +#include "hid_device.hpp" +#include +#include +#include +#include +#include + +using namespace std::string_view_literals; + +namespace headsetcontrol { + +/** + * @brief HyperX Cloud Alpha 2 Wireless Gaming Headset + * + * Features: + * - Battery status (percentage, charging, voltage) + * - Sidetone (mic monitoring) on/off and level + * - Chat-mix (game/chat balance) status + * - Equalizer preset (the three presets stored on the base station) + * + * The base station enumerates as two USB devices: 0x0abe (audio) and 0x08be (control MCU). + * Commands go to the control MCU's vendor interface (interface 2, usage page 0xff13 / usage 0xff00) + * as 64-byte reports laid out as [command][sub-command][payload...]. Replies use command + 1: + * 52 01 -> 53 01 + * 50 02 -> 51 02 ... + * 60 02 -> 61 02 <2 bytes>