Ors1mer / QuadcastRGB

Set RGB lights on HyperX QuadCast S and Duocast
https://ors1mer.xyz/quadcastrgb.html
GNU General Public License v2.0
54 stars 4 forks source link

New product ID #4

Closed brandiseeley closed 1 year ago

brandiseeley commented 1 year ago

Hi,

I just bought a HyperX in Mexico. It has an unsupported vendor/pid pair. Output from lsusb contains:

Bus 001 Device 073: ID 0951:16df Kingston Technology HyperX QuadCast

I made local changes to devio.c and devio.h to allow the device to be found. That worked. But I couldn't get the color to change. Some output:

brandi@brandithinkpad:~/Downloads/QuadcastRGB$ killall quadcastrgb
quadcastrgb: no process found
brandi@brandithinkpad:~/Downloads/QuadcastRGB$ sudo quadcastrgb blink --verbose
Arguments parsed successfully.
Assembling data packets.
Opening the microphone descriptor.
Vendor 951
Product 16df
Sending packets.
brandi@brandithinkpad:~/Downloads/QuadcastRGB$ sudo quadcastrgb blink --verbose
Arguments parsed successfully.
Assembling data packets.
Opening the microphone descriptor.
Vendor 951
Product 16df
Sending packets.
Started with pid 117329
brandi@brandithinkpad:~/Downloads/QuadcastRGB$ killall quadcastrgb
quadcastrgb: no process found

Any ideas? Let me know if I can help.

Ors1mer commented 1 year ago

Check the microphone model

Do you have Quadcast or Quadcast S ? Your lsusb output reports that it is a regular Quadcast, which doesn't have RGB functionality; it is always red.

If you are sure that it is Quadcast S, then read further.

Check the other VID:PID

It seems that quadcastrgb fails to send packets to the device. It might be because a wrong one is used. Quadcast S is actually detected as two separate devices, one for audio and the other for rgb. My lsusb output looks like this:

$ lsusb | grep "QuadCast S"
Bus 001 Device 007: ID 0951:171f Kingston Technology HyperX QuadCast S
Bus 001 Device 006: ID 0951:171d Kingston Technology HyperX QuadCast S

Where 0951:171f is the right ID to use. The verbose output for the right device should look similar to this:

output ``` $ lsusb -vd 0951:171f Bus 001 Device 007: ID 0951:171f Kingston Technology HyperX QuadCast S Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x0951 Kingston Technology idProduct 0x171f bcdDevice 61.03 iManufacturer 1 Kingston iProduct 2 HyperX QuadCast S iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 0x003b bNumInterfaces 2 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 500mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.11 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 31 Report Descriptor: (length is 31) Item(Global): Usage Page, data= [ 0x90 0xff ] 65424 (null) Item(Local ): Usage, data= [ 0x00 0xff ] 65280 (null) Item(Main ): Collection, data= [ 0x01 ] 1 Application Item(Global): Logical Minimum, data= [ 0x00 ] 0 Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255 Item(Global): Report Size, data= [ 0x08 ] 8 Item(Global): Report Count, data= [ 0x40 ] 64 Item(Local ): Usage, data= [ 0x02 ] 2 (null) Item(Main ): Input, data= [ 0x02 ] 2 Data Variable Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Local ): Usage, data= [ 0x03 ] 3 (null) Item(Main ): Output, data= [ 0x02 ] 2 Data Variable Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Local ): Usage, data= [ 0x00 0xff ] 65280 (null) Item(Main ): Feature, data= [ 0x02 ] 2 Data Variable Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Main ): End Collection, data=none Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.11 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 48 Report Descriptor: (length is 48) Item(Global): Usage Page, data= [ 0x0c ] 12 Consumer Item(Local ): Usage, data= [ 0x01 ] 1 Consumer Control Item(Main ): Collection, data= [ 0x01 ] 1 Application Item(Global): Report ID, data= [ 0x03 ] 3 Item(Local ): Usage Minimum, data= [ 0x00 ] 0 Unassigned Item(Local ): Usage Maximum, data= [ 0xff 0x1f ] 8191 (null) Item(Global): Logical Minimum, data= [ 0x00 ] 0 Item(Global): Logical Maximum, data= [ 0xff 0x1f ] 8191 Item(Global): Report Size, data= [ 0x10 ] 16 Item(Global): Report Count, data= [ 0x01 ] 1 Item(Main ): Input, data= [ 0x00 ] 0 Data Array Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Main ): End Collection, data=none Item(Global): Usage Page, data= [ 0xff 0xff ] 65535 (null) Item(Local ): Usage, data= [ 0x01 ] 1 (null) Item(Main ): Collection, data= [ 0x01 ] 1 Application Item(Global): Report ID, data= [ 0x05 ] 5 Item(Local ): Usage, data= [ 0x01 ] 1 (null) Item(Global): Logical Minimum, data= [ 0x00 ] 0 Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255 Item(Global): Report Size, data= [ 0x08 ] 8 Item(Global): Report Count, data= [ 0x07 ] 7 Item(Main ): Input, data= [ 0x02 ] 2 Data Variable Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Main ): End Collection, data=none Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10 Device Status: 0x0000 (Bus Powered) ```
brandiseeley commented 1 year ago

Ah, that explains it. I have a Quadcast, not a Quadcast S.

Thank you for looking into this.

On Fri, Mar 17, 2023, 7:50 AM ors1mer @.***> wrote:

Check the microphone model

Do you have Quadcast or Quadcast S ? Your lsusb output reports that it is a regular Quadcast, which doesn't have RGB functionality; it is always red.

If you are sure that it is Quadcast S, then read further. Check the other VID:PID

It seems that quadcastrgb fails to send packets to the device. It might be because a wrong one is used. Quadcast S is actually detected as two separate devices, one for audio and the other for rgb. My lsusb output looks like this:

$ lsusb | grep "QuadCast S" Bus 001 Device 007: ID 0951:171f Kingston Technology HyperX QuadCast S Bus 001 Device 006: ID 0951:171d Kingston Technology HyperX QuadCast S

Where 0951:171f is the right ID to use. The verbose output for the right device should look similar to this: output

$ lsusb -vd 0951:171f Bus 001 Device 007: ID 0951:171f Kingston Technology HyperX QuadCast S Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x0951 Kingston Technology idProduct 0x171f bcdDevice 61.03 iManufacturer 1 Kingston iProduct 2 HyperX QuadCast S iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 0x003b bNumInterfaces 2 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 500mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.11 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 31 Report Descriptor: (length is 31) Item(Global): Usage Page, data= [ 0x90 0xff ] 65424 (null) Item(Local ): Usage, data= [ 0x00 0xff ] 65280 (null) Item(Main ): Collection, data= [ 0x01 ] 1 Application Item(Global): Logical Minimum, data= [ 0x00 ] 0 Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255 Item(Global): Report Size, data= [ 0x08 ] 8 Item(Global): Report Count, data= [ 0x40 ] 64 Item(Local ): Usage, data= [ 0x02 ] 2 (null) Item(Main ): Input, data= [ 0x02 ] 2 Data Variable Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Local ): Usage, data= [ 0x03 ] 3 (null) Item(Main ): Output, data= [ 0x02 ] 2 Data Variable Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Local ): Usage, data= [ 0x00 0xff ] 65280 (null) Item(Main ): Feature, data= [ 0x02 ] 2 Data Variable Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Main ): End Collection, data=none Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x01 EP 1 OUT bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.11 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 48 Report Descriptor: (length is 48) Item(Global): Usage Page, data= [ 0x0c ] 12 Consumer Item(Local ): Usage, data= [ 0x01 ] 1 Consumer Control Item(Main ): Collection, data= [ 0x01 ] 1 Application Item(Global): Report ID, data= [ 0x03 ] 3 Item(Local ): Usage Minimum, data= [ 0x00 ] 0 Unassigned Item(Local ): Usage Maximum, data= [ 0xff 0x1f ] 8191 (null) Item(Global): Logical Minimum, data= [ 0x00 ] 0 Item(Global): Logical Maximum, data= [ 0xff 0x1f ] 8191 Item(Global): Report Size, data= [ 0x10 ] 16 Item(Global): Report Count, data= [ 0x01 ] 1 Item(Main ): Input, data= [ 0x00 ] 0 Data Array Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Main ): End Collection, data=none Item(Global): Usage Page, data= [ 0xff 0xff ] 65535 (null) Item(Local ): Usage, data= [ 0x01 ] 1 (null) Item(Main ): Collection, data= [ 0x01 ] 1 Application Item(Global): Report ID, data= [ 0x05 ] 5 Item(Local ): Usage, data= [ 0x01 ] 1 (null) Item(Global): Logical Minimum, data= [ 0x00 ] 0 Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255 Item(Global): Report Size, data= [ 0x08 ] 8 Item(Global): Report Count, data= [ 0x07 ] 7 Item(Main ): Input, data= [ 0x02 ] 2 Data Variable Absolute No_Wrap Linear Preferred_State No_Null_Position Non_Volatile Bitfield Item(Main ): End Collection, data=none Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10 Device Status: 0x0000 (Bus Powered)

— Reply to this email directly, view it on GitHub https://github.com/Ors1mer/QuadcastRGB/issues/4#issuecomment-1473875322, or unsubscribe https://github.com/notifications/unsubscribe-auth/AQ73KLBFWF4NWPZRY55NWJLW4RT3XANCNFSM6AAAAAAV4KPXB4 . You are receiving this because you authored the thread.Message ID: @.***>

Ors1mer commented 1 year ago

Glad it's clear now. Come back if you get Quadcast S! :)