HeadsetControl icon indicating copy to clipboard operation
HeadsetControl copied to clipboard

Corsair virtuoso

Open IceCupe123 opened this issue 4 years ago • 35 comments

cant get the corsair virtuoso to work added it like the other corsair headsets

IceCupe123 avatar Mar 07 '20 11:03 IceCupe123

I downloaded the iCUE software on my Macbook but it seems broken. Also some complaints from other users on the Corsair forums the past month about this. If anybody has a Windows PC, that would be helpful..

nkconnor avatar Mar 30 '20 18:03 nkconnor

I need more information, like what OS you have, what you have tried (with sudo/without etc.), and what is the error message.

However it could be, that the virtuso has a different protocol. That would mean that it's protocol also has to be analyzed, like with the other devies.

Sapd avatar Mar 30 '20 22:03 Sapd

@Sapd I'm running Ubuntu 18.04. I added the Virutoso device to corsair_void.c following the Wiki instructions. Using sudo, I can get most of the commands to return:

Found Corsair Void (Pro)!

Success!

The battery level command hangs indefinitely. No commands have any observable effect on the headset, so I figured probably different protocol.

Curiously, the device ID changed between when I looked at it yesterday and today. Possibly this is due to a firmware update from messing around with the iCUE mac software. The iCUE software barely works, so I'm not sure how to move forward with this in absence of a PC.

nkconnor avatar Mar 31 '20 13:03 nkconnor

@Sapd I managed to get iCUE working when connected directly to the headset over USB. However, I'm having trouble making sense of the USB traffic and finding the pattern we need.

Using wireshark,

There's two URB CONTROL packets of length 40(submit) and 34(complete) that get sent out to the device everytime sidetone changes. But nothing changes between the packets except for the IO ID.

There's a lot of passive background traffic with byte lengths 32, 88, 288, and 96, but I can't really tell if these are related to the sidetone or not.

The 96 packet has 64 bytes of 'leftover capture data' which matches the message size I think you are sending with hid_send_feature_report. But it says URB_INTERRUPT (completed) and matches a request with length 32.

I'm not sure how to go any further here. Any tips for me?

nkconnor avatar Apr 08 '20 02:04 nkconnor

@nkconnor When I tried it in the past with Wireshark I had the issue of not seeing the packet payload. You have probably the same problem. Try it with usblyzer https://github.com/Sapd/HeadsetControl/wiki/Development

I think would have to look again into getting capturing working with wireshark and writing a wiki entry some time. There are probably scripts for capturing HID devices.

Sapd avatar Apr 13 '20 22:04 Sapd

I think usblyzer only supports Windows

nkconnor avatar Apr 15 '20 11:04 nkconnor

Right, I forgot about that.

Okay, I just tried it again in Wireshark and it was no problem at all (probably because I have much more experience now than when I first wrote the software). However I did it in a windows VM, as I didn't want to disable SIP for Wireshark on my Mac.

corsair-sidetone-04-00 corsair-sidetone-04-f4

When you look in the data, you can clearly see some change.

If you don't see any value change, make sure the sidetone actually changes (so don't keep your headset just on the table). Because I noticed the same problem, and then also noticed that the headset simply bugged.

For filtering I used these arguments usb.bInterfaceClass == HID && usb.endpoint_address.direction != IN && usb.src == host && usb.setup.wLength == 64 Note that I added a length, as I noticed that a lot of keep-alive (or some other noise) packages were sent with a different length.

You can also see, that the data in the image is highly similar to the implementation in corsair_void.c: unsigned char data[64] = { 0xFF, 0x0B, 0, 0xFF, 0x04, 0x0E, 0xFF, 0x05, 0x01, 0x04, 0x00, num, 0, 0, 0, 0 }; (Just the 6-th byte, counting from 0, is in my capture a 0x01 instead of 0xFF is different. Probably software update or some feature activated?)

Sapd avatar Apr 15 '20 12:04 Sapd

Thanks for getting this far in here. Very strange, I get really good info from Wireshark when I turn sidetone or other features on/off, but really can't see anything meaningful when adjusting the value/slider.

Possibly SIP or something else I'm doing is interfering..

nkconnor avatar Apr 19 '20 16:04 nkconnor

Thanks for getting this far in here. Very strange, I get really good info from Wireshark when I turn sidetone or other features on/off, but really can't see anything meaningful when adjusting the value/slider.

Possibly SIP or something else I'm doing is interfering..

Did you see a SET_REPORT packet with length 100 (decimal; 64 in hex)? Also try the mute button. I noticed when trying to mute/unmute, it will send the sidetone packet first, too (for some reason with sidetone set when mute activated, and unset/set 0 if unmuted).

Sapd avatar Apr 19 '20 16:04 Sapd

I think maybe found the issue. All recorded traffic has usb.dst == "host".. there is no recorded traffic with usb.src == "host" (like your filter shows)

nkconnor avatar Apr 19 '20 17:04 nkconnor

The Wireshark wiki says, that you have to deactivate SIP if you have Catalina. Probably it's this. Otherwise I guess you'll have to use Virtualbox or some other VM solution for capturing.

Sapd avatar Apr 19 '20 17:04 Sapd

I have this headset and a working test Win VM. How can I be of assistance?

themoosman avatar May 07 '20 13:05 themoosman

@themoosman You can find a tutorial here https://github.com/Sapd/HeadsetControl/wiki/Development

Sapd avatar May 07 '20 19:05 Sapd

I have a Virtuoso too, this is what I was able to get Side-tone full up: Screenshot_20200508_183221

Side-tone all the way down:

Screenshot_20200508_183414

wLength = 2

joseant79 avatar May 09 '20 00:05 joseant79

Try to select only the HID-devices on the left side.

Usually it should be a report. So check those packets, too.

Sapd avatar May 09 '20 10:05 Sapd

Alsamixer is able to control the sidetone correctly on the Virtuoso, the same way as the iCue software does, now the only thing that I am interested is in check the remaining battery

joseant79 avatar May 11 '20 19:05 joseant79

BTW, I tried selecting only the HID devices and still showing nothing, don't know if I am doing something wrong

joseant79 avatar May 11 '20 19:05 joseant79

@joseant79 : what does your alsamixer output look like?

nfaggian avatar Jul 06 '20 09:07 nfaggian

Forgot to subscribe here. Also curious how you are able to get this to work in alsamixer @joseant79

nkconnor avatar Jul 06 '20 13:07 nkconnor

Screenshot from 2020-07-06 10-02-59

It works for me, too! I had to make sure the multi-channel input selection was made and then adjust the first 'Headset' in alsa. There's a patch to rename that to 'Sidetone' pending I think.

nkconnor avatar Jul 06 '20 15:07 nkconnor

Hi, i just came here to tell that i have my virtuoso se working on ubuntu 20.04 out of the box. Issues i noticed:

  • low volume (in comparisement to windows 10), firefox (youtube) however is extremely loud in comparisement
  • ~~very annoying sidetone (still trying to configure to disable this)~~ Press the physical microphone button longer (betwen 6 and 10 seconds)
  • The slightest thing triggers the microphone to enable again.

I use this is combination with the realtek ALC 892 onboard sound on a Gigabyte GA-H170-HD3 motherboard

vuurvoske avatar Jul 07 '20 08:07 vuurvoske

@vuurvoske you probably have multiple volume channels causing the volume discrepancy. Check Ubuntu sound settings

nkconnor avatar Jul 07 '20 12:07 nkconnor

Screenshot_20200708_172659

It was working well out of the box, just cranked the sidetone up and then press the mic button for 5 seconds and voila!

joseant79 avatar Jul 08 '20 23:07 joseant79

Anyone had any luck with these headphones and turning off the LED's in linux?

nfaggian avatar Aug 21 '20 08:08 nfaggian

Ok looking at the wireshark data it seems like the data is quite weird having the first 2 and last 2 bytes swapped as well as having a truncated 0x1 as the 5th byte when the value is 100%. So it starts at 0x10400 and goes down to 0xd600 represented at 0x0004 and 0x00d6 respectively.

However as others have shown the sidetone does work in alasmixer and as such the alsa implementation code is mirrored on github here so it might be easier to reconsturct the alsa code that deconstruct the iCUE USB stream

iommu avatar Sep 19 '20 23:09 iommu

Any way to get the battery level in Ubuntu ?

hmajid2301 avatar Dec 31 '20 20:12 hmajid2301

@Sapd I'm running Ubuntu 18.04. I added the Virutoso device to corsair_void.c following the Wiki instructions. Using sudo, I can get most of the commands to return:

Found Corsair Void (Pro)!

Success!

The battery level command hangs indefinitely. No commands have any observable effect on the headset, so I figured probably different protocol.

Curiously, the device ID changed between when I looked at it yesterday and today. Possibly this is due to a firmware update from messing around with the iCUE mac software. The iCUE software barely works, so I'm not sure how to move forward with this in absence of a PC.

In my case the command headsetcontrol -b return Battery: Unavailable when I change the volume form the headset.

AR2000AR avatar Apr 30 '21 11:04 AR2000AR

Does this help? https://github.com/ckb-next/ckb-next/issues/785

RichardsonWTR avatar Feb 09 '22 15:02 RichardsonWTR

Does this help? ckb-next/ckb-next#785

The report itself not. Someone needs to take a look at it with WireShark https://github.com/Sapd/HeadsetControl/wiki/Development#adding-a-new-headset for turning off LED or getting the Battery level. (Sidetone can not be supported as outlined some posts above, as it is controlled by an audio/volume channel).

Sapd avatar Feb 09 '22 15:02 Sapd

So the Corsair Virtuoso support is not yet done on this application? I'd have to edit the source code to get it working?

For some reason pipewire did not show the 'sidetone' slider here. What should I do for it to show?

Patola avatar Sep 19 '22 23:09 Patola