Revision:
0:8f0d870509fe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usb/usb_endp.c.bak	Mon Sep 04 12:04:13 2017 +0000
@@ -0,0 +1,89 @@
+/******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
+ * File Name          : usb_endp.c
+ * Author             : MCD Application Team
+ * Version            : V3.3.0
+ * Date               : 21-March-2011
+ * Description        : Endpoint routines
+ ********************************************************************************
+ * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+ * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
+ * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
+ * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
+ * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ *******************************************************************************/
+
+#include "usb_lib.h"
+#include "usb_desc.h"
+#include "usb_mem.h"
+#include "hw_config.h"
+#include "usb_istr.h"
+#include "usb_pwr.h"
+#include "serial.h"
+uint8_t USB_Rx_Buffer[VIRTUAL_COM_PORT_DATA_SIZE];
+
+extern uint8_t serial_tx_buffer[];
+extern uint8_t serial_tx_buffer_head;
+extern volatile uint8_t serial_tx_buffer_tail;
+
+void EP3_OUT_Callback(void)
+{
+	uint16_t USB_Rx_Cnt;
+
+	/* Get the received data buffer and update the counter */
+	USB_Rx_Cnt = USB_SIL_Read(EP3_OUT, USB_Rx_Buffer);
+
+	/* USB data will be immediately processed, this allow next USB traffic being
+	NAKed till the end of the USART Xfer */
+
+	OnUsbDataRx(USB_Rx_Buffer, USB_Rx_Cnt);
+
+	/* Enable the receive of data on EP3 */
+	SetEPRxValid(ENDP3);
+}
+
+void EP1_IN_Callback (void)
+{
+	if (serial_tx_buffer_head != serial_tx_buffer_tail)
+    {
+	    uint16_t USB_Tx_length;
+
+        if (serial_tx_buffer_head > serial_tx_buffer_tail)
+		    USB_Tx_length = serial_tx_buffer_head - serial_tx_buffer_tail;
+        else
+        {
+		    USB_Tx_length = TX_BUFFER_SIZE - serial_tx_buffer_tail;
+        }
+
+        if (USB_Tx_length != 0)
+        {
+            if (USB_Tx_length > 64)
+    	        USB_Tx_length = 64;
+
+            UserToPMABufferCopy(serial_tx_buffer + serial_tx_buffer_tail, ENDP1_TXADDR, USB_Tx_length);
+            serial_tx_buffer_tail += USB_Tx_length;
+            if (serial_tx_buffer_tail == TX_BUFFER_SIZE)
+                serial_tx_buffer_tail = 0;
+
+	        SetEPTxCount(ENDP1, USB_Tx_length);
+	        SetEPTxValid(ENDP1);
+        }
+	}
+}
+
+
+/*	\brief Start Of Frame (SOF) callback
+ */
+void SOF_Callback(void)
+{
+	if(bDeviceState == CONFIGURED)
+	{
+		/* Check the data to be sent through IN pipe */
+		if (_GetEPTxStatus(ENDP1) == EP_TX_NAK)
+        {
+			EP1_IN_Callback();
+		}
+	}
+}
+/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
+