void USBD_DataInStage (void) { U32 cnt; if (USBD_EP0Data.Count > usbd_max_packet0) { cnt = usbd_max_packet0; } else { cnt = USBD_EP0Data.Count; } if (!cnt) USBD_ZLP = 0; cnt = USBD_WriteEP(0x80, USBD_EP0Data.pData, cnt); USBD_EP0Data.pData += cnt; USBD_EP0Data.Count -= cnt; }
// --------------------------------------------------------------------------- // Transmit buffer when handling data endpoint IN event (Tx -> Host IN) static ErrorCode_t USB_EP_In_Handler(USBD_HANDLE_T hUsb, void* data, UINT32 event) { // Exit if not an IN event if (event != USB_EVT_IN) return RET_UNHANDLED; int epNum = (int)data; int core = USB_CORE(hUsb); // Exit if buffer empty if (ep_in_count[core] == 0) return RET_UNHANDLED; // Send buffer USBD_WriteEP(hUsb, USB_ENDPOINT_IN(epNum), ep_in_data[core], ep_in_count[core]); ep_in_count[core] = 0; return RET_OK; }
void USBD_StatusInStage (void) { USBD_WriteEP(0x80, NULL, 0); }