[FL-2219] VCP: fix Tx data freeze on sending 64 bytes packets #992

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
Nikolay Minaylov 2022-02-14 13:29:30 +03:00 committed by GitHub
parent 939998a8c8
commit be500993a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 4 deletions

View File

@ -77,6 +77,7 @@ static int32_t vcp_worker(void* context) {
bool enabled = true;
bool tx_idle = false;
size_t missed_rx = 0;
uint8_t last_tx_pkt_len = 0;
furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb, NULL);
@ -184,9 +185,17 @@ static int32_t vcp_worker(void* context) {
if(len > 0) { // Some data left in Tx buffer. Sending it now
tx_idle = false;
furi_hal_cdc_send(VCP_IF_NUM, vcp->data_buffer, len);
} else { // There is nothing to send. Set flag to start next transfer instantly
last_tx_pkt_len = len;
} else { // There is nothing to send.
if(last_tx_pkt_len == 64) {
// Send extra zero-length packet if last packet len is 64 to indicate transfer end
furi_hal_cdc_send(VCP_IF_NUM, NULL, 0);
} else {
// Set flag to start next transfer instantly
tx_idle = true;
}
last_tx_pkt_len = 0;
}
}
}
return 0;

View File

@ -77,6 +77,7 @@ static int32_t vcp_worker(void* context) {
bool enabled = true;
bool tx_idle = false;
size_t missed_rx = 0;
uint8_t last_tx_pkt_len = 0;
furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb, NULL);
@ -184,9 +185,17 @@ static int32_t vcp_worker(void* context) {
if(len > 0) { // Some data left in Tx buffer. Sending it now
tx_idle = false;
furi_hal_cdc_send(VCP_IF_NUM, vcp->data_buffer, len);
} else { // There is nothing to send. Set flag to start next transfer instantly
last_tx_pkt_len = len;
} else { // There is nothing to send.
if(last_tx_pkt_len == 64) {
// Send extra zero-length packet if last packet len is 64 to indicate transfer end
furi_hal_cdc_send(VCP_IF_NUM, NULL, 0);
} else {
// Set flag to start next transfer instantly
tx_idle = true;
}
last_tx_pkt_len = 0;
}
}
}
return 0;