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;
|
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;
|
transfer_len = (uint32_t)td_current->bufEnd - (uint32_t)td_current->currBufPtr + 1;
|
||||||
transferred = transfer_len;
|
transferred = transfer_len;
|
||||||
|
@ -142,6 +142,7 @@ void USBEndpoint::queueTransfer()
|
||||||
state = USB_TYPE_PROCESSING;
|
state = USB_TYPE_PROCESSING;
|
||||||
td_current->nextTD = (hcTd*)td_next;
|
td_current->nextTD = (hcTd*)td_next;
|
||||||
hced->tailTD = td_next;
|
hced->tailTD = td_next;
|
||||||
|
return USB_TYPE_PROCESSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
void USBEndpoint::unqueueTransfer(volatile HCTD * td)
|
void USBEndpoint::unqueueTransfer(volatile HCTD * td)
|
||||||
|
|
|
@ -67,7 +67,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* Queue a transfer on the endpoint
|
* Queue a transfer on the endpoint
|
||||||
*/
|
*/
|
||||||
void queueTransfer();
|
USB_TYPE queueTransfer();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unqueue a transfer from the endpoint
|
* Unqueue a transfer from the endpoint
|
||||||
|
|
|
@ -699,7 +699,8 @@ void USBHost::printList(ENDPOINT_TYPE type)
|
||||||
// add a transfer on the TD linked list
|
// add a transfer on the TD linked list
|
||||||
USB_TYPE USBHost::addTransfer(USBEndpoint * ed, uint8_t * buf, uint32_t len)
|
USB_TYPE USBHost::addTransfer(USBEndpoint * ed, uint8_t * buf, uint32_t len)
|
||||||
{
|
{
|
||||||
td_mutex.lock();
|
USB_TYPE ret=USB_TYPE_PROCESSING;
|
||||||
|
td_mutex.lock();
|
||||||
|
|
||||||
// allocate a TD which will be freed in TDcompletion
|
// allocate a TD which will be freed in TDcompletion
|
||||||
volatile HCTD * td = ed->getNextTD();
|
volatile HCTD * td = ed->getNextTD();
|
||||||
|
@ -734,7 +735,7 @@ USB_TYPE USBHost::addTransfer(USBEndpoint * ed, uint8_t * buf, uint32_t len)
|
||||||
|
|
||||||
td_mutex.unlock();
|
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");
|
printf("\r\n\r\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
addTransfer(ep, buf, len);
|
res = addTransfer(ep, buf, len);
|
||||||
|
|
||||||
if (blocking) {
|
if ((blocking)&& (res == USB_TYPE_PROCESSING)) {
|
||||||
|
|
||||||
ep->ep_queue.get();
|
ep->ep_queue.get();
|
||||||
res = ep->getState();
|
res = ep->getState();
|
||||||
|
@ -1049,7 +1050,7 @@ USB_TYPE USBHost::generalTransfer(USBDeviceConnected * dev, USBEndpoint * ep, ui
|
||||||
return USB_TYPE_OK;
|
return USB_TYPE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
return USB_TYPE_PROCESSING;
|
return res;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1090,9 +1091,9 @@ USB_TYPE USBHost::controlTransfer(USBDeviceConnected * dev, uint8_t requestType,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
control->setNextToken(TD_SETUP);
|
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();
|
res = control->getState();
|
||||||
|
|
||||||
USB_DBG_TRANSFER("CONTROL setup stage %s", control->getStateString());
|
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) {
|
if (length_transfer) {
|
||||||
token = (write) ? TD_OUT : TD_IN;
|
token = (write) ? TD_OUT : TD_IN;
|
||||||
control->setNextToken(token);
|
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();
|
res = control->getState();
|
||||||
|
|
||||||
#if DEBUG_TRANSFER
|
#if DEBUG_TRANSFER
|
||||||
|
@ -1131,9 +1132,9 @@ USB_TYPE USBHost::controlTransfer(USBDeviceConnected * dev, uint8_t requestType,
|
||||||
|
|
||||||
token = (write) ? TD_IN : TD_OUT;
|
token = (write) ? TD_IN : TD_OUT;
|
||||||
control->setNextToken(token);
|
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();
|
res = control->getState();
|
||||||
|
|
||||||
USB_DBG_TRANSFER("CONTROL ack stage %s", control->getStateString());
|
USB_DBG_TRANSFER("CONTROL ack stage %s", control->getStateString());
|
||||||
|
|
Loading…
Reference in New Issue