-
-
Notifications
You must be signed in to change notification settings - Fork 166
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
Device Request: Arctis Nova Pro Wireless #221
Comments
If you only see URB_INTERRUPT, it could be that Sidetone is controlled via the Audio Channels. In this case a implementation is not really possible. You can quickly check it, by calling alsamixer in the console in Linux and then see if one of the channels modify sidetone. |
Thanks @Sapd! Wouldn't something like this work? #define ENDPOINT_OUT 0x04
static int arctis_nova_pro_wireless_send_sidetone(hid_device* device_handle, uint8_t num)
{
int ret = -1;
// the range of the Arctis Nova Pro Wireless seems to be from 0x00 (also off) to 0x03
num = map(num, 0, 128, 0x00, 0x03);
const unsigned char data_request[64] = { 0x06, 0x39, num };
int len = 0;
ret = libusb_interrupt_transfer(device_handle, ENDPOINT_OUT, data_request, sizeof(data_request), &len, 0);
if (ret >= 0) {
ret = arctis_nova_pro_wireless_save_state(device_handle);
}
return ret;
} It uses
It seems to come with Also, I'm wondering why there's this here. int HID_API_EXPORT hid_read_timeout(hid_device *dev, unsigned char *data, size_t length, int milliseconds)
{
int bytes_read = -1;
#if 0
int transferred;
int res = libusb_interrupt_transfer(dev->device_handle, dev->input_endpoint, data, length, &transferred, 5000);
LOG("transferred: %d\n", transferred);
return transferred;
#endif As if Anyway, you probably know |
Okay, I feel dumb for not seeing that int HID_API_EXPORT hid_write(hid_device *dev, const unsigned char *data, size_t length)
{
// ...
if (dev->output_endpoint <= 0) {
/* No interrupt out endpoint. Use the Control Endpoint */
// ...
}
else {
/* Use the interrupt out endpoint */
int actual_length;
res = libusb_interrupt_transfer(dev->device_handle,
dev->output_endpoint,
(unsigned char*)data,
length,
&actual_length, 1000);
// ...
}
} So I can probably use |
Yes, it would work indeed and was also the way it was done in one of the earliest versions in HeadsetControl
The function seems to be fully threaded, and seems to use the
Yes, the default(?) backend is hidraw. Basically HID is a protocol on top of USB (and on top of Bluetooth). So it makes sense to usually directly call the HID functions of the respective OS. Unfortunately, the HID protocol does not provide for direct control of audio devices. So it is a hard to solve problem, esp. cross-platform. IF sidetone is only controlled via an audio channel. You can also post directly a Screenshot of how Wireshark parses the bytes to see if hid_write is possible (like bmRequestType etc.), as the bytes themselves are hard to intepret. |
@Sapd hmmm true... it would not be compatible for MacOS... (but this device already has a MacOS compatibility from SteelSeries, btw). It's possible that you've missed this message: #221 (comment) And the screenshot with sidetone |
Ah yes, I cannot currently take a detailed look at that, but you can definitly try sending it. You can btw. use the |
Would the new arctis nova 7 implementation fit this device? |
@fyx Arctis Nova 7 support is already present in master: it was added in #233 / #248 and works for me - or at least, battery status and sidetone control are working. In case you are on Windows: support is not yet in the latest released binaries, so you have to build from master. Or if you're in a trusting mood, you can download the build I just compiled - no promises about it staying available indefinitely though! |
I'm able to get the sidetone to change via the commandline, but when I try to add the device in C I get a timeout. Here's the commands in which I'm able to turn on and off the sidetone using the same values that you found (it also doesn't seem to work on interface 3): |
Can you show me the C code? When it works via the --dev commands, it must also work in code. |
In case it's helpful, I have the Arctis Nova Pro Wireless (PC/Xbox version) and the following detailed info:
I tried adding the product ID 0x12e5 to
Setting the sidetone using the commands in a previous comment does work, e.g. the following turns sidetone OFF:
Modifying the code so the sidetone function sends data in this format to interface 4 does allow me to modify sidetone from the command line. I'm not yet sure how I might be able to retrieve battery info. I don't know if I'll be able to take this further, but even if I don't perhaps this will be useful to others working on support for this headset. |
This issue is stale because it has been open 300 days with no activity. Remove stale label or comment or this will be closed in 60 days. |
Description
I just received mine. I'll try and see after work if I can follow the steps from your Wiki and find the proper values.
Headset Name
Arctis Nova Pro Wireless
Device information
Detailed Device Information
The text was updated successfully, but these errors were encountered: