Merge pull request #19 from SimyriK/main

Add support for HyperX Cloud Flight S
This commit is contained in:
Lennard Kittner
2026-01-16 17:25:32 +01:00
committed by GitHub
5 changed files with 40 additions and 11 deletions

13
99-HyperHeadset.rules Normal file
View File

@@ -0,0 +1,13 @@
SUBSYSTEMS=="usb", ATTRS{idProduct}=="018b", ATTRS{idVendor}=="03f0", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idProduct}=="0696", ATTRS{idVendor}=="03f0", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idProduct}=="1718", ATTRS{idVendor}=="0951", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idProduct}=="0d93", ATTRS{idVendor}=="03f0", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idProduct}=="05b7", ATTRS{idVendor}=="03f0", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idProduct}=="16ea", ATTRS{idVendor}=="0951", MODE="0666"
KERNEL=="hidraw*", ATTRS{idProduct}=="0d93", ATTRS{idVendor}=="03f0", MODE="0666"
KERNEL=="hidraw*", ATTRS{idProduct}=="018b", ATTRS{idVendor}=="03f0", MODE="0666"
KERNEL=="hidraw*", ATTRS{idProduct}=="0696", ATTRS{idVendor}=="03f0", MODE="0666"
KERNEL=="hidraw*", ATTRS{idProduct}=="1718", ATTRS{idVendor}=="0951", MODE="0666"
KERNEL=="hidraw*", ATTRS{idProduct}=="05b7", ATTRS{idVendor}=="03f0", MODE="0666"
KERNEL=="hidraw*", ATTRS{idProduct}=="16ea", ATTRS{idVendor}=="0951", MODE="0666"

View File

@@ -6,15 +6,16 @@ A CLI and tray application for monitoring and managing HyperX headsets.
This project is not affiliated with, endorsed by, or associated with HyperX or its parent company in any way. All trademarks and brand names belong to their respective owners.
## Compatibility
The CLI application is compatible with both Linux and MacOS operating systems.
However, the tray application is only functional on Linux.
The CLI application is compatible with both Linux and MacOS operating systems.
However, the tray application is only functional on Linux.
Although it was only tested on Manjaro and Kubuntu with KDE, it should also work on other distribution and desktop environments.
**Supported Headsets**:
- HyperX Cloud II Wireless HP vendorID
- HyperX Cloud II Wireless HyperX vendorID
- HyperX Cloud III Wireless
- HyperX Cloud Stinger 2 Wireless
- HyperX Cloud Stinger 2 Wireless
- HyperX Cloud Flight S
It should be possible to add support for other HyperX headsets.
@@ -62,6 +63,7 @@ SUBSYSTEMS=="usb", ATTRS{idProduct}=="0696", ATTRS{idVendor}=="03f0", MODE="0666
SUBSYSTEMS=="usb", ATTRS{idProduct}=="1718", ATTRS{idVendor}=="0951", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idProduct}=="0d93", ATTRS{idVendor}=="03f0", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idProduct}=="05b7", ATTRS{idVendor}=="03f0", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idProduct}=="16ea", ATTRS{idVendor}=="0951", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idProduct}=="0c9d", ATTRS{idVendor}=="03f0", MODE="0666"
KERNEL=="hidraw*", ATTRS{idProduct}=="0d93", ATTRS{idVendor}=="03f0", MODE="0666"
@@ -69,6 +71,7 @@ KERNEL=="hidraw*", ATTRS{idProduct}=="018b", ATTRS{idVendor}=="03f0", MODE="0666
KERNEL=="hidraw*", ATTRS{idProduct}=="0696", ATTRS{idVendor}=="03f0", MODE="0666"
KERNEL=="hidraw*", ATTRS{idProduct}=="1718", ATTRS{idVendor}=="0951", MODE="0666"
KERNEL=="hidraw*", ATTRS{idProduct}=="05b7", ATTRS{idVendor}=="03f0", MODE="0666"
KERNEL=="hidraw*", ATTRS{idProduct}=="16ea", ATTRS{idVendor}=="0951", MODE="0666"
KERNEL=="hidraw*", ATTRS{idProduct}=="0c9d", ATTRS{idVendor}=="03f0", MODE="0666"
```
@@ -134,7 +137,7 @@ Options:
```
`hyper_headset` without any arguments will start the tray application with a 3s refresh interval.
Once it's open, hover over the headset icon in the system tray or right-click to view details such as the battery level.
Once it's open, hover over the headset icon in the system tray or right-click to view details such as the battery level.
You can also exit via the right-clock menu.
## Contributing / TODOs

10
hyper-headset.desktop Normal file
View File

@@ -0,0 +1,10 @@
[Desktop Entry]
Type=Application
Name=HyperHeadset
Comment=Monitor and manage HyperX headsets
Exec=/usr/local/bin/hyper_headset
Icon=audio-card
Terminal=false
Categories=AudioVideo;Audio;
StartupNotify=false
X-GNOME-Autostart-enabled=true

View File

@@ -6,8 +6,8 @@ use std::time::Duration;
const HYPERX: u16 = 0x0951;
pub const VENDOR_IDS: [u16; 1] = [HYPERX];
// Possible Cloud II Wireless product IDs
pub const PRODUCT_IDS: [u16; 3] = [0x1718, 0x018B, 0x0b92];
// Possible Cloud II Wireless product IDs (and Cloud Flight S)
pub const PRODUCT_IDS: [u16; 4] = [0x1718, 0x018B, 0x0b92, 0x16EA];
const BASE_PACKET: [u8; 62] = {
let mut tmp = [0u8; 62];
@@ -266,12 +266,15 @@ impl Device for CloudIIWireless {
}
fn prepare_write(&mut self) {
// Attempt to read input report before writing
// This may not work for all devices (e.g., Cloud Flight S),
// so we ignore the error
let mut input_report_buffer = [0u8; 64];
input_report_buffer[0] = 6;
self.state
let _ = self
.state
.hid_device
.get_input_report(&mut input_report_buffer)
.unwrap();
.get_input_report(&mut input_report_buffer);
}
fn allow_passive_refresh(&mut self) -> bool {

View File

@@ -16,7 +16,7 @@ use thistermination::TerminationFull;
// Possible vendor IDs [HyperX, HP]
const VENDOR_IDS: [u16; 2] = [0x0951, 0x03F0];
// All supported product IDs
const PRODUCT_IDS: [u16; 7] = [0x1718, 0x018B, 0x0D93, 0x0696, 0x0b92, 0x05B7, 0x0c9d];
const PRODUCT_IDS: [u16; 8] = [0x1718, 0x018B, 0x0D93, 0x0696, 0x0b92, 0x05B7, 0x16EA, 0x0c9d];
const RESPONSE_BUFFER_SIZE: usize = 256;
const RESPONSE_DELAY: Duration = Duration::from_millis(50);
@@ -518,7 +518,7 @@ pub trait Device {
}
responded = true;
}
if !self.get_device_state().connected.is_none_or(|c| c) {
if !matches!(self.get_device_state().connected, Some(true)) {
break;
}
}