From 779727e3214e46c2188ba0c6f9181fb86394c84e Mon Sep 17 00:00:00 2001 From: Daniel Fekete Date: Mon, 26 Jun 2017 18:12:12 +0200 Subject: [PATCH] usb: serial: use buffered when sending data --- STM32/cores/arduino/stm32/SerialUSB.cpp | 71 ++++++++++++++++--------- STM32/cores/arduino/stm32/SerialUSB.h | 3 ++ 2 files changed, 48 insertions(+), 26 deletions(-) diff --git a/STM32/cores/arduino/stm32/SerialUSB.cpp b/STM32/cores/arduino/stm32/SerialUSB.cpp index 53b4166..7bde448 100644 --- a/STM32/cores/arduino/stm32/SerialUSB.cpp +++ b/STM32/cores/arduino/stm32/SerialUSB.cpp @@ -97,41 +97,56 @@ void SerialUSBClass::flush(void){ size_t SerialUSBClass::write(const uint8_t *buffer, size_t size){ unsigned long timeout=millis()+5; - if(hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED) - { - while(millis() tx_buffer.iTail) { + transmitting = tx_buffer.iHead - tx_buffer.iTail; + } else { + transmitting = sizeof(tx_buffer.buffer) - tx_buffer.iTail; + } + CDC_Transmit_FS(&tx_buffer.buffer[tx_buffer.iTail], transmitting); + + return size; + } + return 0; - -/* uint8_t i; - - if(hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED){ - - //HAL_NVIC_DisableIRQ(USB_LP_CAN1_RX0_IRQn); - for(i=0;i<200;i++) - if(CDC_Transmit_FS((uint8_t*)buffer, size) == USBD_OK){ - return size; - //break; - } - - - //HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn); - } - return 0; */ } size_t SerialUSBClass::write(uint8_t c) { return write(&c, 1); } +void SerialUSBClass::CDC_TxHandler() { + tx_buffer.iTail += transmitting; + tx_buffer.iTail = tx_buffer.iTail % sizeof(tx_buffer.buffer); + + if (tx_buffer.iHead != tx_buffer.iTail) { + if (tx_buffer.iHead > tx_buffer.iTail) { + transmitting = tx_buffer.iHead - tx_buffer.iTail; + } else { + transmitting = sizeof(tx_buffer.buffer) - tx_buffer.iTail; + } + CDC_Transmit_FS(tx_buffer.buffer + tx_buffer.iTail, transmitting); + } else { + transmitting = 0; + } +} + void SerialUSBClass::CDC_RxHandler (uint8_t* Buf, uint16_t Len){ for(uint16_t i=0;i