USBHOST : add return value to queue transfer modify add transfer to support return value.

pull/3755/head
Michel Jaouen 2016-12-05 15:44:10 +01:00 committed by Martin Kojtal
parent 269f58d75b
commit f174f2a920
3 changed files with 15 additions and 13 deletions

View File

@ -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)

View File

@ -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

View File

@ -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());