From 9f86cc6fe4d1b88f9f0059ad7faf3a1a47219787 Mon Sep 17 00:00:00 2001 From: Mark Stalzer Date: Fri, 13 Mar 2026 08:48:06 -0400 Subject: [PATCH] driver_vive: clear_halt before submit_transfer in AttachInterface A stalled USB endpoint must be cleared before resubmitting a transfer. Without libusb_clear_halt(), libusb_submit_transfer() will return LIBUSB_ERROR_PIPE (-9) on any endpoint left halted from a previous session or failed transfer, causing the interface attachment to fail. Co-Authored-By: Claude Sonnet 4.6 --- src/driver_vive.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/driver_vive.c b/src/driver_vive.c index 272820fb..7f0063d2 100755 --- a/src/driver_vive.c +++ b/src/driver_vive.c @@ -726,6 +726,9 @@ static int AttachInterface(SurviveViveData *sv, struct SurviveUSBInfo *usbObject 0); iface->last_submit_time = OGGetAbsoluteTimeUS(); + + libusb_clear_halt(devh, endpoint_num); + int rc = libusb_submit_transfer(tx); if (rc) { SV_ERROR(SURVIVE_ERROR_HARWARE_FAULT, "Error: Could not submit transfer for %s 0x%02x (Code %d, %s)", hname,