From 2f176d6fb8b71e33b7dc50a86e4f8dfa8c2b27d8 Mon Sep 17 00:00:00 2001 From: jeffstaley Date: Mon, 4 Feb 2019 04:03:49 -0800 Subject: [PATCH] Flush RX buffer on G-code line errors to prevent hang (#13018) --- Marlin/src/gcode/queue.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/Marlin/src/gcode/queue.cpp b/Marlin/src/gcode/queue.cpp index b11304d12..473e17070 100644 --- a/Marlin/src/gcode/queue.cpp +++ b/Marlin/src/gcode/queue.cpp @@ -251,15 +251,7 @@ void flush_and_request_resend() { ok_to_send(); } -void gcode_line_error(PGM_P err, uint8_t port) { - SERIAL_ERROR_START_P(port); - serialprintPGM_P(port, err); - SERIAL_ECHOLN_P(port, gcode_LastN); - flush_and_request_resend(); - serial_count[port] = 0; -} - -static bool serial_data_available() { +inline bool serial_data_available() { return false || MYSERIAL0.available() #if NUM_SERIAL > 1 @@ -268,7 +260,7 @@ static bool serial_data_available() { ; } -static int read_serial(const uint8_t index) { +inline int read_serial(const uint8_t index) { switch (index) { case 0: return MYSERIAL0.read(); #if NUM_SERIAL > 1 @@ -278,6 +270,15 @@ static int read_serial(const uint8_t index) { } } +void gcode_line_error(PGM_P err, uint8_t port) { + SERIAL_ERROR_START_P(port); + serialprintPGM_P(port, err); + SERIAL_ECHOLN_P(port, gcode_LastN); + while (read_serial(port) != -1); // clear out the RX buffer + flush_and_request_resend(); + serial_count[port] = 0; +} + #if ENABLED(FAST_FILE_TRANSFER) #if ENABLED(SDSUPPORT) @@ -286,7 +287,7 @@ static int read_serial(const uint8_t index) { #define CARD_ECHOLN_P(V) SERIAL_ECHOLN_P(card.transfer_port, V) #endif - static bool serial_data_available(const uint8_t index) { + inline bool serial_data_available(const uint8_t index) { switch (index) { case 0: return MYSERIAL0.available(); #if NUM_SERIAL > 1