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/...ive-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