mirror of https://github.com/ARMmbed/mbed-os.git
USBHOST : add return value to queue transfer modify add transfer to support return value.
parent
269f58d75b
commit
f174f2a920
|
@ -132,7 +132,7 @@ const char * USBEndpoint::getStateString() {
|
|||
return type_string[state].str;
|
||||
}
|
||||
|
||||
void USBEndpoint::queueTransfer()
|
||||
USB_TYPE USBEndpoint::queueTransfer()
|
||||
{
|
||||
transfer_len = (uint32_t)td_current->bufEnd - (uint32_t)td_current->currBufPtr + 1;
|
||||
transferred = transfer_len;
|
||||
|
@ -142,6 +142,7 @@ void USBEndpoint::queueTransfer()
|
|||
state = USB_TYPE_PROCESSING;
|
||||
td_current->nextTD = (hcTd*)td_next;
|
||||
hced->tailTD = td_next;
|
||||
return USB_TYPE_PROCESSING;
|
||||
}
|
||||
|
||||
void USBEndpoint::unqueueTransfer(volatile HCTD * td)
|
||||
|
|
|
@ -67,7 +67,7 @@ public:
|
|||
/**
|
||||
* Queue a transfer on the endpoint
|
||||
*/
|
||||
void queueTransfer();
|
||||
USB_TYPE queueTransfer();
|
||||
|
||||
/**
|
||||
* Unqueue a transfer from the endpoint
|
||||
|
|
|
@ -699,6 +699,7 @@ void USBHost::printList(ENDPOINT_TYPE type)
|
|||
// add a transfer on the TD linked list
|
||||
USB_TYPE USBHost::addTransfer(USBEndpoint * ed, uint8_t * buf, uint32_t len)
|
||||
{
|
||||
USB_TYPE ret=USB_TYPE_PROCESSING;
|
||||
td_mutex.lock();
|
||||
|
||||
// allocate a TD which will be freed in TDcompletion
|
||||
|
@ -734,7 +735,7 @@ USB_TYPE USBHost::addTransfer(USBEndpoint * ed, uint8_t * buf, uint32_t len)
|
|||
|
||||
td_mutex.unlock();
|
||||
|
||||
return USB_TYPE_PROCESSING;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1033,9 +1034,9 @@ USB_TYPE USBHost::generalTransfer(USBDeviceConnected * dev, USBEndpoint * ep, ui
|
|||
printf("\r\n\r\n");
|
||||
}
|
||||
#endif
|
||||
addTransfer(ep, buf, len);
|
||||
res = addTransfer(ep, buf, len);
|
||||
|
||||
if (blocking) {
|
||||
if ((blocking)&& (res == USB_TYPE_PROCESSING)) {
|
||||
|
||||
ep->ep_queue.get();
|
||||
res = ep->getState();
|
||||
|
@ -1049,7 +1050,7 @@ USB_TYPE USBHost::generalTransfer(USBDeviceConnected * dev, USBEndpoint * ep, ui
|
|||
return USB_TYPE_OK;
|
||||
}
|
||||
|
||||
return USB_TYPE_PROCESSING;
|
||||
return res;
|
||||
|
||||
}
|
||||
|
||||
|
@ -1090,9 +1091,9 @@ USB_TYPE USBHost::controlTransfer(USBDeviceConnected * dev, uint8_t requestType,
|
|||
#endif
|
||||
|
||||
control->setNextToken(TD_SETUP);
|
||||
addTransfer(control, (uint8_t*)setupPacket, 8);
|
||||
res = addTransfer(control, (uint8_t*)setupPacket, 8);
|
||||
|
||||
control->ep_queue.get();
|
||||
if (res == USB_TYPE_PROCESSING) control->ep_queue.get();
|
||||
res = control->getState();
|
||||
|
||||
USB_DBG_TRANSFER("CONTROL setup stage %s", control->getStateString());
|
||||
|
@ -1104,9 +1105,9 @@ USB_TYPE USBHost::controlTransfer(USBDeviceConnected * dev, uint8_t requestType,
|
|||
if (length_transfer) {
|
||||
token = (write) ? TD_OUT : TD_IN;
|
||||
control->setNextToken(token);
|
||||
addTransfer(control, (uint8_t *)buf, length_transfer);
|
||||
res = addTransfer(control, (uint8_t *)buf, length_transfer);
|
||||
|
||||
control->ep_queue.get();
|
||||
if (res == USB_TYPE_PROCESSING) control->ep_queue.get();
|
||||
res = control->getState();
|
||||
|
||||
#if DEBUG_TRANSFER
|
||||
|
@ -1131,9 +1132,9 @@ USB_TYPE USBHost::controlTransfer(USBDeviceConnected * dev, uint8_t requestType,
|
|||
|
||||
token = (write) ? TD_IN : TD_OUT;
|
||||
control->setNextToken(token);
|
||||
addTransfer(control, NULL, 0);
|
||||
res = addTransfer(control, NULL, 0);
|
||||
|
||||
control->ep_queue.get();
|
||||
if (res == USB_TYPE_PROCESSING) control->ep_queue.get();
|
||||
res = control->getState();
|
||||
|
||||
USB_DBG_TRANSFER("CONTROL ack stage %s", control->getStateString());
|
||||
|
|
Loading…
Reference in New Issue