mirror of
https://github.com/cathery/sys-con.git
synced 2024-10-04 13:29:43 +00:00
more thorough interface check in controller init
This commit is contained in:
parent
4c78a716d6
commit
b4ee502e04
@ -43,54 +43,56 @@ Status Dualshock3Controller::OpenInterfaces()
|
|||||||
rc = interface->Open();
|
rc = interface->Open();
|
||||||
if (S_FAILED(rc))
|
if (S_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
if (interface->GetDescriptor()->bNumEndpoints >= 2)
|
|
||||||
|
if (interface->GetDescriptor()->bNumEndpoints < 2)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
//Send an initial control packet
|
||||||
|
uint8_t initBytes[] = {0x42, 0x0C, 0x00, 0x00};
|
||||||
|
rc = SendCommand(interface.get(), Ds3FeatureStartDevice, initBytes, sizeof(initBytes));
|
||||||
|
if (S_FAILED(rc))
|
||||||
|
return 60;
|
||||||
|
|
||||||
|
m_interface = interface.get();
|
||||||
|
|
||||||
|
if (!m_inPipe)
|
||||||
{
|
{
|
||||||
//Send an initial control packet
|
for (int i = 0; i != 15; ++i)
|
||||||
uint8_t initBytes[] = {0x42, 0x0C, 0x00, 0x00};
|
|
||||||
rc = SendCommand(interface.get(), Ds3FeatureStartDevice, initBytes, sizeof(initBytes));
|
|
||||||
if (S_FAILED(rc))
|
|
||||||
return 60;
|
|
||||||
|
|
||||||
m_interface = interface.get();
|
|
||||||
|
|
||||||
if (!m_inPipe)
|
|
||||||
{
|
{
|
||||||
for (int i = 0; i != 15; ++i)
|
IUSBEndpoint *inEndpoint = interface->GetEndpoint(IUSBEndpoint::USB_ENDPOINT_IN, i);
|
||||||
|
if (inEndpoint)
|
||||||
{
|
{
|
||||||
IUSBEndpoint *inEndpoint = interface->GetEndpoint(IUSBEndpoint::USB_ENDPOINT_IN, i);
|
rc = inEndpoint->Open();
|
||||||
if (inEndpoint)
|
if (S_FAILED(rc))
|
||||||
{
|
return 61;
|
||||||
rc = inEndpoint->Open();
|
|
||||||
if (S_FAILED(rc))
|
|
||||||
return 61;
|
|
||||||
|
|
||||||
m_inPipe = inEndpoint;
|
m_inPipe = inEndpoint;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!m_outPipe)
|
if (!m_outPipe)
|
||||||
|
{
|
||||||
|
for (int i = 0; i != 15; ++i)
|
||||||
{
|
{
|
||||||
for (int i = 0; i != 15; ++i)
|
IUSBEndpoint *outEndpoint = interface->GetEndpoint(IUSBEndpoint::USB_ENDPOINT_OUT, i);
|
||||||
|
if (outEndpoint)
|
||||||
{
|
{
|
||||||
IUSBEndpoint *outEndpoint = interface->GetEndpoint(IUSBEndpoint::USB_ENDPOINT_OUT, i);
|
rc = outEndpoint->Open();
|
||||||
if (outEndpoint)
|
if (S_FAILED(rc))
|
||||||
{
|
return 62;
|
||||||
rc = outEndpoint->Open();
|
|
||||||
if (S_FAILED(rc))
|
|
||||||
return 62;
|
|
||||||
|
|
||||||
m_outPipe = outEndpoint;
|
m_outPipe = outEndpoint;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_inPipe || !m_outPipe)
|
|
||||||
return 69;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!m_inPipe || !m_outPipe)
|
||||||
|
return 69;
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
void Dualshock3Controller::CloseInterfaces()
|
void Dualshock3Controller::CloseInterfaces()
|
||||||
|
@ -47,6 +47,9 @@ Status Xbox360Controller::OpenInterfaces()
|
|||||||
if (interface->GetDescriptor()->bInterfaceProtocol != 1)
|
if (interface->GetDescriptor()->bInterfaceProtocol != 1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (interface->GetDescriptor()->bNumEndpoints < 2)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (!m_inPipe)
|
if (!m_inPipe)
|
||||||
{
|
{
|
||||||
for (int i = 0; i != 15; ++i)
|
for (int i = 0; i != 15; ++i)
|
||||||
|
@ -91,8 +91,14 @@ Status XboxOneController::OpenInterfaces()
|
|||||||
rc = interface->Open();
|
rc = interface->Open();
|
||||||
if (S_FAILED(rc))
|
if (S_FAILED(rc))
|
||||||
return rc;
|
return rc;
|
||||||
//TODO: check for numEndpoints before trying to open them!
|
|
||||||
if (interface->GetDescriptor()->bNumEndpoints >= 2)
|
if (interface->GetDescriptor()->bInterfaceProtocol != 208)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (interface->GetDescriptor()->bNumEndpoints < 2)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!m_inPipe)
|
||||||
{
|
{
|
||||||
for (uint8_t i = 0; i != 15; ++i)
|
for (uint8_t i = 0; i != 15; ++i)
|
||||||
{
|
{
|
||||||
@ -107,6 +113,10 @@ Status XboxOneController::OpenInterfaces()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!m_outPipe)
|
||||||
|
{
|
||||||
for (uint8_t i = 0; i != 15; ++i)
|
for (uint8_t i = 0; i != 15; ++i)
|
||||||
{
|
{
|
||||||
IUSBEndpoint *outEndpoint = interface->GetEndpoint(IUSBEndpoint::USB_ENDPOINT_OUT, i);
|
IUSBEndpoint *outEndpoint = interface->GetEndpoint(IUSBEndpoint::USB_ENDPOINT_OUT, i);
|
||||||
|
Loading…
Reference in New Issue
Block a user