Parcourir la source

add:清除uart的接收缓存

alienwalker il y a 2 ans
Parent
commit
5003752157

+ 16 - 0
application/src/luat_uart_air105.c

@@ -282,6 +282,22 @@ int luat_uart_read(int uartid, void *buffer, size_t length){
     return ret;
 }
 
+void luat_uart_clear_rx_cache(int uartid)
+{
+    int ret = 0;
+    if (!luat_uart_exist(uartid)){
+        return;
+    }
+    if (uartid >= LUAT_VUART_ID_0) uartid = MAX_DEVICE_COUNT;
+    serials[uartid].rx_mark = 0;
+    if (uartid >= MAX_DEVICE_COUNT)
+    	Core_VUartRxBufferClear(VIRTUAL_UART0);
+    else
+        Uart_RxBufferClear(uartid);
+//    LLOGD("uartid:%d buffer:%s ret:%d ",uartid,buffer, ret);
+    return;
+}
+
 int luat_uart_close(int uartid){
     if (!luat_uart_exist(uartid)){
         return 0;

+ 1 - 0
bsp/common/include/core_service.h

@@ -72,6 +72,7 @@ void Core_VUartDeInit(uint8_t UartID);
 void Core_VUartSetRxTimeout(uint8_t UartID, uint32_t TimeoutUS);
 void Core_VUartSetCb(uint8_t UartID, CBFuncEx_t CB);
 uint32_t Core_VUartRxBufferRead(uint8_t UartID, uint8_t *Data, uint32_t Len);
+void Core_VUartRxBufferClear(uint8_t UartID);
 int32_t Core_VUartBufferTx(uint8_t UartID, const uint8_t *Data, uint32_t Len);
 void Core_VUartBufferTxStop(uint8_t UartID);
 

+ 19 - 0
bsp/common/src/core_usb_app.c

@@ -1026,6 +1026,25 @@ READ_END:
 	return ReadLen;
 }
 
+void Core_VUartRxBufferClear(uint8_t UartID)
+{
+	Virtual_UartCtrlStruct *pVUart = &prvLuatOS_VirtualUart[UartID];
+	switch(UartID)
+	{
+	case VIRTUAL_UART0:
+		USB_StackEpIntOnOff(pVUart->USB_ID, pVUart->ToDeviceEpIndex, 1, 0);
+		break;
+	}
+	pVUart->RxBuf.Pos = 0;
+	switch(UartID)
+	{
+	case VIRTUAL_UART0:
+		USB_StackEpIntOnOff(pVUart->USB_ID, pVUart->ToDeviceEpIndex, 1, 1);
+		break;
+	}
+	return ;
+}
+
 int32_t Core_VUartBufferTx(uint8_t UartID, const uint8_t *Data, uint32_t Len)
 {
 	Virtual_UartCtrlStruct *pVUart = &prvLuatOS_VirtualUart[UartID];