From c793adbd8676522a5fa34c89feb7b38899f34b67 Mon Sep 17 00:00:00 2001 From: mikeller Date: Sun, 10 May 2020 04:10:20 +1200 Subject: [PATCH] Fixed problem with USB VCP when sending packets with a length of a multiple of 64 bytes. --- 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 0522cf2c3c..38c05b05e4 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 */