Skip to content

Commit b5517cb

Browse files
committed
Always clear RX buffer on CTRL-C
Some serial sources clear their RX buffers and others didn't. This cause CP to skip into the REPL based on characters typed before the CTRL-C. The serial file transfer code looks for "press any key" which is skipped in this case. Fixes circuitpython/web-editor#238
1 parent 30d57b1 commit b5517cb

File tree

5 files changed

+6
-1
lines changed

5 files changed

+6
-1
lines changed

ports/espressif/common-hal/_bleio/CharacteristicBuffer.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ void bleio_characteristic_buffer_extend(bleio_characteristic_buffer_obj_t *self,
2626
for (uint16_t i = 0; i < len; i++) {
2727
if (data[i] == mp_interrupt_char) {
2828
mp_sched_keyboard_interrupt();
29+
ringbuf_clear(&self->ringbuf);
2930
} else {
3031
ringbuf_put(&self->ringbuf, data[i]);
3132
}

ports/espressif/supervisor/usb_serial_jtag.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ static void _copy_out_of_fifo(void) {
4646
for (size_t i = 0; i < len; ++i) {
4747
if (rx_buf[i] == mp_interrupt_char) {
4848
mp_sched_keyboard_interrupt();
49+
ringbuf_clear(&ringbuf);
4950
} else {
5051
ringbuf_put(&ringbuf, rx_buf[i]);
5152
}

ports/nordic/common-hal/_bleio/CharacteristicBuffer.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ static void write_to_ringbuf(bleio_characteristic_buffer_obj_t *self, uint8_t *d
2929
for (uint16_t i = 0; i < len; i++) {
3030
if (data[i] == mp_interrupt_char) {
3131
mp_sched_keyboard_interrupt();
32+
ringbuf_clear(&self->ringbuf);
3233
} else {
3334
ringbuf_put(&self->ringbuf, data[i]);
3435
}

supervisor/shared/usb/host_keyboard.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,9 @@ static void send_bufn_core(const char *buf, size_t n) {
155155
for (; n--; buf++) {
156156
int code = *buf;
157157
if (code == mp_interrupt_char) {
158+
ringbuf_clear(&_incoming_ringbuf);
158159
mp_sched_keyboard_interrupt();
159-
return;
160+
continue;
160161
}
161162
if (ringbuf_num_empty(&_incoming_ringbuf) == 0) {
162163
// Drop on the floor

supervisor/shared/web_workflow/websocket.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ void websocket_background(void) {
227227
while (ringbuf_num_empty(&_incoming_ringbuf) > 0 &&
228228
_read_next_payload_byte(&c)) {
229229
if (c == mp_interrupt_char) {
230+
ringbuf_clear(&_incoming_ringbuf);
230231
mp_sched_keyboard_interrupt();
231232
continue;
232233
}

0 commit comments

Comments
 (0)