// Non Blocking receive // Return number of bytes read uint32_t USBDeviceClass::recv(uint32_t ep, void *_data, uint32_t len) { if (!_usbConfiguration) return -1; if (available(ep) < len) len = available(ep); armRecv(ep); usbd.epBank0DisableTransferComplete(ep); memcpy(_data, udd_ep_out_cache_buffer[ep], len); // release empty buffer if (len && !available(ep)) { // The RAM Buffer is empty: we can receive data usbd.epBank0ResetReady(ep); // Clear Transfer complete 0 flag usbd.epBank0AckTransferComplete(ep); } return len; }
// Non Blocking receive // Return number of bytes read uint32_t USBDeviceClass::recv(uint32_t ep, void *_data, uint32_t len) { if (!_usbConfiguration) return -1; if (available(ep) < len) len = available(ep); #ifdef PIN_LED_RXL digitalWrite(PIN_LED_RXL, LOW); rxLEDPulse = TX_RX_LED_PULSE_MS; #endif armRecv(ep); usbd.epBank0DisableTransferComplete(ep); memcpy(_data, udd_ep_out_cache_buffer[ep], len); // release empty buffer if (len && !available(ep)) { // The RAM Buffer is empty: we can receive data usbd.epBank0ResetReady(ep); // Clear Transfer complete 0 flag usbd.epBank0AckTransferComplete(ep); } return len; }