diff options
author | Jan200101 <sentrycraft123@gmail.com> | 2024-08-06 14:00:02 +0200 |
---|---|---|
committer | Jan200101 <sentrycraft123@gmail.com> | 2024-08-06 14:00:02 +0200 |
commit | ffb8e89885c66d8d7dee104773c29e322265daa0 (patch) | |
tree | e13c29067d76fe0101e0217576e2d9b046ead217 /src/xinput.c | |
parent | f9b2f241871ea7db22579cf16335e47d33e183ba (diff) | |
download | Wirecutter-ffb8e89885c66d8d7dee104773c29e322265daa0.tar.gz Wirecutter-ffb8e89885c66d8d7dee104773c29e322265daa0.zip |
add logic for dynamically handling device id
Diffstat (limited to 'src/xinput.c')
-rw-r--r-- | src/xinput.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/xinput.c b/src/xinput.c index 07eb01a..18efacd 100644 --- a/src/xinput.c +++ b/src/xinput.c @@ -6,6 +6,7 @@ #define XINPUT_GAMEPAD_DPAD (XINPUT_GAMEPAD_DPAD_UP | XINPUT_GAMEPAD_DPAD_DOWN | XINPUT_GAMEPAD_DPAD_LEFT | XINPUT_GAMEPAD_DPAD_RIGHT) #define XINPUT_GAMEPAD_THUMB (XINPUT_GAMEPAD_LEFT_THUMB | XINPUT_GAMEPAD_RIGHT_THUMB) +tusb_desc_device_t dev_desc; //Since https://github.com/hathach/tinyusb/pull/2222, we can add in custom vendor drivers easily usbh_class_driver_t const* usbh_app_driver_get_cb(uint8_t* driver_count){ @@ -25,8 +26,6 @@ void tuh_xinput_report_received_cb(uint8_t dev_addr, uint8_t instance, xinputh_i gamepad.y = p->sThumbLY; gamepad.z = p->sThumbRX; gamepad.rz = p->sThumbRY; - //gamepad.rx = ((float)p->bLeftTrigger * 256) - 32767; - //gamepad.ry = ((float)p->bRightTrigger * 256) - 32767; gamepad.gas = p->bRightTrigger; gamepad.brake = p->bLeftTrigger; @@ -73,6 +72,18 @@ void tuh_xinput_report_received_cb(uint8_t dev_addr, uint8_t instance, xinputh_i tuh_xinput_receive_report(dev_addr, instance); } +void handle_device_descriptor(tuh_xfer_t* xfer) +{ + if (XFER_RESULT_SUCCESS != xfer->result) + { + TU_LOG1("Failed to get usb descriptor\n"); + return; + } + + change_device_id(dev_desc.idVendor, dev_desc.idProduct); + TU_LOG1("Updated device id to %d:%d\n", dev_desc.idVendor, dev_desc.idProduct); +} + void tuh_xinput_mount_cb(uint8_t dev_addr, uint8_t instance, const xinputh_interface_t *xinput_itf) { TU_LOG1("Controller attached\n"); @@ -83,6 +94,7 @@ void tuh_xinput_mount_cb(uint8_t dev_addr, uint8_t instance, const xinputh_inter tuh_xinput_receive_report(dev_addr, instance); return; } + tuh_descriptor_get_device(dev_addr, &dev_desc, sizeof(dev_desc), handle_device_descriptor, 0); tuh_xinput_set_led(dev_addr, instance, 0, true); tuh_xinput_set_led(dev_addr, instance, 1, true); tuh_xinput_set_rumble(dev_addr, instance, 0, 0, true); |