From a72f7aa9bfeba0e307450769fe0cef181caef294 Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Thu, 14 May 2020 02:10:58 +1200 Subject: [PATCH] Merge pull request #9790 from mikeller/fix_f7_usb_zero_lenght_packet --- src/main/vcp_hal/usbd_cdc_interface.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/vcp_hal/usbd_cdc_interface.c b/src/main/vcp_hal/usbd_cdc_interface.c index cfc4400a963..3aa99cc23cf 100644 --- a/src/main/vcp_hal/usbd_cdc_interface.c +++ b/src/main/vcp_hal/usbd_cdc_interface.c @@ -261,12 +261,19 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) if (hcdc->TxState == 0) { // endpoint has finished transmitting previous block if (lastBuffsize) { + bool needZeroLengthPacket = lastBuffsize % 64 == 0; + // move the ring buffer tail based on the previous succesful transmission UserTxBufPtrOut += lastBuffsize; if (UserTxBufPtrOut == APP_TX_DATA_SIZE) { UserTxBufPtrOut = 0; } lastBuffsize = 0; + + if (needZeroLengthPacket) { + USBD_CDC_SetTxBuffer(&USBD_Device, (uint8_t*)&UserTxBuffer[UserTxBufPtrOut], 0); + return; + } } if (UserTxBufPtrOut != UserTxBufPtrIn) { if (UserTxBufPtrOut > UserTxBufPtrIn) { /* Roll-back */