From 0c90b7d95c0f80fb675ae3799ecc19e56e6dd520 Mon Sep 17 00:00:00 2001 From: Armel FAUVEAU Date: Wed, 25 Feb 2026 04:49:38 +0100 Subject: [PATCH] Fix freeze when using K5Viewer and USB-C --- App/driver/vcp.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/App/driver/vcp.c b/App/driver/vcp.c index 2ef8ffe0..563c923c 100644 --- a/App/driver/vcp.c +++ b/App/driver/vcp.c @@ -80,14 +80,20 @@ bool VCP_ScreenshotPing(void) static ParseState_t state = STATE_IDLE; bool connected = false; - uint32_t write_ptr = VCP_RxBufPointer; + uint32_t write_ptr = VCP_RxBufPointer; // snapshot once — ISR may update concurrently - while (read_ptr != write_ptr) + // Cap bytes processed per call to VCP_RX_BUF_SIZE. + // Prevents unbounded loop if the ISR write pointer laps read_ptr + // (buffer overflow / corrupted state), which would freeze the firmware. + uint32_t processed = 0; + + while (read_ptr != write_ptr && processed < VCP_RX_BUF_SIZE) { uint8_t b = VCP_RxBuf[read_ptr]; read_ptr++; if (read_ptr >= VCP_RX_BUF_SIZE) read_ptr = 0; + processed++; switch (state) {