Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HyperX Cloud III not detected #381

Open
Miepee opened this issue Nov 30, 2024 · 11 comments
Open

HyperX Cloud III not detected #381

Miepee opened this issue Nov 30, 2024 · 11 comments

Comments

@Miepee
Copy link

Miepee commented Nov 30, 2024

Description

As the title says, the device isn't detected by headsetcontrol. I plugged it in via USB if that matters.

Headset Name

HyperX Cloud III

On which OS does the problem happen?

Linux

Device information

Detailed Device Information
Device Found
 VendorID: 0x03f0
ProductID: 0x089d
 path: /dev/hidraw3
 serial_number: 000000000000
 Manufacturer: HP, Inc
 Product:      HyperX Cloud III
 Interface:    3
 Usage-Page: 0xc Usageid: 0x1

Device Found
 VendorID: 0x03f0
ProductID: 0x089d
 path: /dev/hidraw3
 serial_number: 000000000000
 Manufacturer: HP, Inc
 Product:      HyperX Cloud III
 Interface:    3
 Usage-Page: 0x1c0 Usageid: 0x1

Device Found
 VendorID: 0x03f0
ProductID: 0x089d
 path: /dev/hidraw3
 serial_number: 000000000000
 Manufacturer: HP, Inc
 Product:      HyperX Cloud III
 Interface:    3
 Usage-Page: 0x170f Usageid: 0x1

Device Found
 VendorID: 0x03f0
ProductID: 0x089d
 path: /dev/hidraw3
 serial_number: 000000000000
 Manufacturer: HP, Inc
 Product:      HyperX Cloud III
 Interface:    3
 Usage-Page: 0xffc0 Usageid: 0x1

@Miepee
Copy link
Author

Miepee commented Nov 30, 2024

I tried basic print debugging and for some reason, the headset is never searched for?
Its vendor id is 0x03f0 = 1008
Printing all the vendor ids that get searched for in find_device, I see 9610 four times and 1133 once.
patch in case i did something wrong:

    cur_dev   = devs;
    while (cur_dev) {
+       printf("Vendor ID: %d\n", cur_dev->vendor_id);
        found = get_device(device_found, cur_dev->vendor_id, cur_dev->product_id);

@nicola02nb
Copy link
Contributor

A good way to find your device ID is to run:

headsetcontrol --dev -- --list

Then find your device in the list reported.
Example for Steelseries Arctics Nova 7:

Device Found
  VendorID: 0x1038
 ProductID: 0x2202
  path: 
  serial_number:
  Manufacturer: SteelSeries
  Product:      Arctis Nova 7
  Interface:    3
  Usage-Page: 

Then probably you should add your ProductId to the supported PRODUCT_IDS[] at:

#define VENDOR_HYPERX_CLOUD 0x03f0
#define ID_CLOUD3_WIRE 0x089d
static struct device device_c3;
static const uint16_t PRODUCT_IDS[] = { ID_CLOUD3_WIRE };

@Miepee
Copy link
Author

Miepee commented Dec 3, 2024

A good way to find your device ID is to run:

See the output in the first message under "detailed device information".
You can see there that the vendor ID is 0x03f0 and the product ID is 0x089d - both values already exist in the snippet you linked!

Hence why I tried to do the print debugging (my second message) and found out that it doesn't even ever try to search for the vendor ID.

@nicola02nb
Copy link
Contributor

See the output in the first message under "detailed device information".

Oh, didn't see that, sorry...

@nicola02nb
Copy link
Contributor

I might have found the problem.
I should be there:

if (found == 0) {
break;
}

Because it stops checking the rest of the devices... probably you have an already compatible device connected, and when it finds it, it stop searching for other compatible devices(Like your hyperx cloud 3).

Unplugging the device foud before your hyperx cloud 3 should work.

@nicola02nb
Copy link
Contributor

It actually a problem of the entire software which was designed to support one device at a time...

@Miepee
Copy link
Author

Miepee commented Dec 4, 2024

Unplugging the device foud before your hyperx cloud 3 should work.

I swear I tried it earlier and it didn't work. But now with the other device disconnected and several days/reboots later, it does work.

I wonder if maybe something internally caches something, when i have both plugged in, then plug out the other supported one and run headsetcontrol again. Not sure
Either way, thanks for finding that!

@nicola02nb
Copy link
Contributor

nicola02nb commented Dec 4, 2024

Sond strange OS chaching usb devices lol.

Tho, no problem, you're welcome

@Sapd
Copy link
Owner

Sapd commented Dec 4, 2024

It actually a problem of the entire software which was designed to support one device at a time...

Yeah there is some work already in fixing that. For example the JSON/YAML output functionality already fully supports multiple devices. However main problem is still the question of specifying which to use for sending commands. With multiple devices a user would need to somehow specify which device, which I did not think about yet of how to do that in a user friendly way.

I wonder if maybe something internally caches something, when i have both plugged in

Should in theory not, as it simply uses the HID calls of the kernel to iterate (which in turn uses USB iteration). Maybe some weird kernel bug or edge case.

@Miepee
Copy link
Author

Miepee commented Dec 4, 2024

It wouldn't surprise me if I had done a kernel upgrade that day and forgot to reboot.

@nicola02nb
Copy link
Contributor

However main problem is still the question of specifying which to use for sending commands

I got an idea there #382

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants