summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/legacy/usb/usbdevice/class/cdc_vcom.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/components/legacy/usb/usbdevice/class/cdc_vcom.c b/components/legacy/usb/usbdevice/class/cdc_vcom.c
index 44f013f005..7d4463ea89 100644
--- a/components/legacy/usb/usbdevice/class/cdc_vcom.c
+++ b/components/legacy/usb/usbdevice/class/cdc_vcom.c
@@ -338,6 +338,9 @@ static rt_err_t _ep_out_handler(ufunction_t func, rt_size_t size)
{
rt_base_t level;
struct vcom *data;
+#ifdef RT_USING_SERIAL_V2
+ struct rt_serial_rx_fifo *rx_fifo;
+#endif
RT_ASSERT(func != RT_NULL);
@@ -351,7 +354,15 @@ static rt_err_t _ep_out_handler(ufunction_t func, rt_size_t size)
/* receive data from USB VCOM */
level = rt_hw_interrupt_disable();
+#ifdef RT_USING_SERIAL_V2
+ rx_fifo = (struct rt_serial_rx_fifo *)data->serial.serial_rx;
+ if (rx_fifo != RT_NULL)
+ {
+ rt_ringbuffer_put(&rx_fifo->rb, data->ep_out->buffer, size);
+ }
+#else
rt_ringbuffer_put(&data->rx_ringbuffer, data->ep_out->buffer, size);
+#endif
rt_hw_interrupt_enable(level);
/* notify receive data */
@@ -514,10 +525,6 @@ static rt_err_t _function_enable(ufunction_t func)
data->ep_out->buffer = rt_malloc(CDC_RX_BUFSIZE);
RT_ASSERT(data->ep_out->buffer != RT_NULL);
-#ifdef RT_USING_SERIAL_V2
- data->serial.serial_rx = &data->rx_ringbuffer;
-#endif
-
data->ep_out->request.buffer = data->ep_out->buffer;
data->ep_out->request.size = EP_MAXPACKET(data->ep_out);
@@ -719,18 +726,30 @@ static int _vcom_getc(struct rt_serial_device *serial)
rt_base_t level;
struct ufunction *func;
struct vcom *data;
+#ifdef RT_USING_SERIAL_V2
+ struct rt_serial_rx_fifo *rx_fifo;
+#endif
func = (struct ufunction*)serial->parent.user_data;
data = (struct vcom*)func->user_data;
+ RT_UNUSED(data);
result = -1;
level = rt_hw_interrupt_disable();
+#ifdef RT_USING_SERIAL_V2
+ rx_fifo = (struct rt_serial_rx_fifo *)serial->serial_rx;
+ if(rx_fifo != RT_NULL && rt_ringbuffer_getchar(&rx_fifo->rb, &ch) != 0)
+ {
+ result = ch;
+ }
+#else
if(rt_ringbuffer_getchar(&data->rx_ringbuffer, &ch) != 0)
{
result = ch;
}
+#endif
rt_hw_interrupt_enable(level);