Example #1
0
/************************************************************
	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);
	}
}
Example #2
0
/* 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;
	}
}