Chris Veigl
Member
I made a special joystick for a boy with a disability using TeensLC and it works nicely on the PC,
however when i attach it to the XBOX adaptive controller
https://www.xbox.com/de-DE/xbox-one/accessories/controllers/xbox-adaptive-controller
the joystick does not work at all. (i tested other devices including gamepads and also USB composite devices - they all worked).
I cloned the device-/configuration- and HID-descriptors of working devices (by modifying the teensyduino source code accordingly)
but that did not solve the issue.
i tracked the problem down into the send-routine of the joystick implementation:
int usb_flipjoystick_send(void)
{
uint32_t wait_count=0;
usb_packet_t *tx_packet;
while (1) {
if (!usb_configuration) {
return -2;
}
if (usb_tx_packet_count(FLIPJOYSTICK_ENDPOINT) < TX_PACKET_LIMIT) {
tx_packet = usb_malloc();
if (tx_packet) break;
}
if (++wait_count > TX_TIMEOUT || transmit_previous_timeout) {
transmit_previous_timeout = 1;
return -1;
}
yield();
}
transmit_previous_timeout = 0;
memcpy(tx_packet->buf, usb_flipjoystick_data, 3);
tx_packet->len = 3;
usb_tx(FLIPJOYSTICK_ENDPOINT, tx_packet);
return 0;
}
this always runs into the timeout - it seems that usb_tx() does not succeed in sending the packets !
i tried the same with teensy 3.1 and also teensy 2++ (using an AVR MCU) - same problem:
works on PC, does not work on the XBOX adaptive controller !
BTW: the HID joystick implementation in Arduino for the Leonardo/Pro Micro devices works fine...
any ideas what could be wrong or what we could try to solve the issue ?
thanks,
chris
however when i attach it to the XBOX adaptive controller
https://www.xbox.com/de-DE/xbox-one/accessories/controllers/xbox-adaptive-controller
the joystick does not work at all. (i tested other devices including gamepads and also USB composite devices - they all worked).
I cloned the device-/configuration- and HID-descriptors of working devices (by modifying the teensyduino source code accordingly)
but that did not solve the issue.
i tracked the problem down into the send-routine of the joystick implementation:
int usb_flipjoystick_send(void)
{
uint32_t wait_count=0;
usb_packet_t *tx_packet;
while (1) {
if (!usb_configuration) {
return -2;
}
if (usb_tx_packet_count(FLIPJOYSTICK_ENDPOINT) < TX_PACKET_LIMIT) {
tx_packet = usb_malloc();
if (tx_packet) break;
}
if (++wait_count > TX_TIMEOUT || transmit_previous_timeout) {
transmit_previous_timeout = 1;
return -1;
}
yield();
}
transmit_previous_timeout = 0;
memcpy(tx_packet->buf, usb_flipjoystick_data, 3);
tx_packet->len = 3;
usb_tx(FLIPJOYSTICK_ENDPOINT, tx_packet);
return 0;
}
this always runs into the timeout - it seems that usb_tx() does not succeed in sending the packets !
i tried the same with teensy 3.1 and also teensy 2++ (using an AVR MCU) - same problem:
works on PC, does not work on the XBOX adaptive controller !
BTW: the HID joystick implementation in Arduino for the Leonardo/Pro Micro devices works fine...
any ideas what could be wrong or what we could try to solve the issue ?
thanks,
chris