/************************************************************ Bulk EP OUT handle functions (clear rx fifo data, read them out and drop) *************************************************************/ void USB_Acm_Rx_ClrFifo(void) { kal_uint32 nCount; #ifdef USB_20_ENABLE kal_uint32 max_bulk_pkt_size; kal_uint8 data[USB_EP_BULK_MAXP_HS]; #else kal_uint8 data[USB_EP_BULK_MAXP]; #endif /* check if data received */ nCount = USB_EP_Rx_Pkt_Len(g_UsbACM.rxpipe->byEP); #ifdef USB_20_ENABLE if(USB_Is_High_Speed() == KAL_TRUE) max_bulk_pkt_size = USB_EP_BULK_MAXP_HS; else max_bulk_pkt_size = USB_EP_BULK_MAXP_FS; #ifdef __PRODUCTION_RELEASE__ if(nCount > max_bulk_pkt_size) { nCount = max_bulk_pkt_size; } #else EXT_ASSERT((nCount <= max_bulk_pkt_size), nCount, max_bulk_pkt_size, 0); #endif #else /* USB_20_ENABLE */ #ifdef __PRODUCTION_RELEASE__ if(nCount > USB_EP_BULK_MAXP) { nCount = USB_EP_BULK_MAXP; } #else EXT_ASSERT((nCount <= USB_EP_BULK_MAXP), nCount, USB_EP_BULK_MAXP, 0); #endif #endif /* USB_20_ENABLE */ if(nCount>0) { /* get the data from fifo */ USB_EPFIFORead(g_UsbACM.rxpipe->byEP, nCount, data); /* Clear RxPktRdy */ USB_EP_Bulk_Rx_Ready(g_UsbACM.rxpipe->byEP); } }
/* parse EP0 requested command */ static void USB_Endpoint0_Idle (void) { /* read ep0 data*/ USB_EPFIFORead(0, 8, &gUsbDevice.cmd); /* Check request type */ switch (gUsbDevice.cmd.bmRequestType & USB_CMD_TYPEMASK) { case USB_CMD_STDREQ: /* standard request */ USB_Stdcmd(&gUsbDevice.ep0info, &gUsbDevice.cmd); break; case USB_CMD_CLASSREQ: /* class specific request */ if((gUsbDevice.cmd.bmRequestType == USB_CMD_CLASSIFIN) || (gUsbDevice.cmd.bmRequestType == USB_CMD_CLASSIFOUT)) { if(gUsbDevice.if_info[(gUsbDevice.cmd.wIndex & 0xff)].if_class_specific_hdlr != NULL) { gUsbDevice.if_info[(gUsbDevice.cmd.wIndex & 0xff)].if_class_specific_hdlr(&gUsbDevice.ep0info, &gUsbDevice.cmd); } else { /* error occur, stall endpoint*/ USB_Update_EP0_State(USB_EP0_DRV_STATE_READ_END, KAL_TRUE, KAL_FALSE); } } else { /* error occur, stall endpoint*/ USB_Update_EP0_State(USB_EP0_DRV_STATE_READ_END, KAL_TRUE, KAL_FALSE); } break; case USB_CMD_VENDREQ: default: /* Stall the command if a reserved request is received */ USB_Update_EP0_State(USB_EP0_DRV_STATE_READ_END, KAL_TRUE, KAL_FALSE); break; } }