Merge pull request #414 from mjrgh/patch-1

Fix KL25Z connect problem with some USB 3.0 hosts
pull/428/head
Bogdan Marinescu 2014-08-05 20:07:32 +01:00
commit ddc5340e3a
1 changed files with 21 additions and 1 deletions

View File

@ -187,7 +187,27 @@ bool USBDevice::controlOut(void)
/* Check we should be transferring data OUT */
if (transfer.direction != HOST_TO_DEVICE)
{
return false;
#if defined(TARGET_KL25Z) | defined(TARGET_KL46Z) | defined(TARGET_K20D5M) | defined(TARGET_K64F)
/*
* We seem to have a pending device-to-host transfer. The host must have
* sent a new control request without waiting for us to finish processing
* the previous one. This appears to happen when we're connected to certain
* USB 3.0 host chip set. Do a zeor-length send to tell the host we're not
* ready for the new request - that'll make it resend - and then just
* pretend we were successful here so that the pending transfer can finish.
*/
uint8_t buf[1] = { 0 };
EP0write(buf, 0);
/* execute our pending ttransfer */
controlIn();
/* indicate success */
return true;
#else
/* for other platforms, count on the HAL to handle this case */
return false;
#endif
}
/* Read from endpoint */