void USBD_DataOutStage (void) { U32 cnt; cnt = USBD_ReadEP(0x00, USBD_EP0Data.pData); USBD_EP0Data.pData += cnt; USBD_EP0Data.Count -= cnt; }
// --------------------------------------------------------------------------- // Receive buffer when handling data endpoint OUT event (Rx <-- Host OUT) static ErrorCode_t USB_EP_Out_Handler(USBD_HANDLE_T hUsb, void* data, UINT32 event) { int epNum = (int)data; int core = USB_CORE(hUsb); USB_PACKET64* Packet64; USB_CONTROLLER_STATE *State = USB_STATE(core); BOOL full; UINT32 len; // Handle OUT events if (State->Queues[epNum] == NULL || State->IsTxQueue[epNum]) return RET_UNHANDLED; switch(event) { case USB_EVT_OUT_NAK: // If we are ready to receive data, send buffer pointer to USB stack USBD_ReadReqEP(hUsb, USB_ENDPOINT_OUT(epNum), ep_out_data[core], MAX_EP_SIZE); break; case USB_EVT_OUT: // Read data received via DMA len = USBD_ReadEP(hUsb, USB_ENDPOINT_OUT(epNum), ep_out_data[core]) & 0xFFFF; if (len > 0) { // The DMA transfer is complete. Process buffer. Packet64 = USB_RxEnqueue(State, epNum, full); if (Packet64 != NULL) { Packet64->Size = len; memcpy(Packet64->Buffer, ep_out_data[core], Packet64->Size); //Events_Set(SYSTEM_EVENT_FLAG_USB_IN); } //if (full) USBD_DisableEP(hUsb, USB_ENDPOINT_OUT(epNum)); } break; default: return RET_UNHANDLED; } return RET_OK; }
void USBD_StatusOutStage (void) { USBD_ReadEP(0x00, USBD_EP0Buf); }
void USBD_SetupStage (void) { USBD_ReadEP(0x00, (U8 *)&USBD_SetupPacket); }