From c89ff5648209fe6597f5d6ca5436e8ba44b6dba2 Mon Sep 17 00:00:00 2001 From: cathery Date: Wed, 6 Nov 2019 02:47:42 +0300 Subject: [PATCH] Fixed 1st gen Xbox One controller not connecting --- .../source/Controllers/XboxOneController.cpp | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/ControllerUSB/source/Controllers/XboxOneController.cpp b/ControllerUSB/source/Controllers/XboxOneController.cpp index febd717..c8b4ace 100644 --- a/ControllerUSB/source/Controllers/XboxOneController.cpp +++ b/ControllerUSB/source/Controllers/XboxOneController.cpp @@ -46,24 +46,31 @@ Status XboxOneController::OpenInterfaces() //TODO: check for numEndpoints before trying to open them! if (interface->GetDescriptor()->bNumEndpoints >= 2) { - IUSBEndpoint *inEndpoint = interface->GetEndpoint(IUSBEndpoint::USB_ENDPOINT_IN, 1); - if (inEndpoint) + for (uint8_t i = 0; i != 15; ++i) { - rc = inEndpoint->Open(); - if (S_FAILED(rc)) - return 5555; + IUSBEndpoint *inEndpoint = interface->GetEndpoint(IUSBEndpoint::USB_ENDPOINT_IN, i); + if (inEndpoint) + { + rc = inEndpoint->Open(); + if (S_FAILED(rc)) + return 5555; - m_inPipe = inEndpoint; + m_inPipe = inEndpoint; + break; + } } - - IUSBEndpoint *outEndpoint = interface->GetEndpoint(IUSBEndpoint::USB_ENDPOINT_OUT, 1); - if (outEndpoint) + for (uint8_t i = 0; i != 15; ++i) { - rc = outEndpoint->Open(); - if (S_FAILED(rc)) - return 6666; + IUSBEndpoint *outEndpoint = interface->GetEndpoint(IUSBEndpoint::USB_ENDPOINT_OUT, i); + if (outEndpoint) + { + rc = outEndpoint->Open(); + if (S_FAILED(rc)) + return 6666; - m_outPipe = outEndpoint; + m_outPipe = outEndpoint; + break; + } } } }