diff --git a/Marlin/src/gcode/queue.cpp b/Marlin/src/gcode/queue.cpp index 000747b489..397b5a3923 100644 --- a/Marlin/src/gcode/queue.cpp +++ b/Marlin/src/gcode/queue.cpp @@ -254,7 +254,7 @@ void GCodeQueue::ok_to_send() { SERIAL_ECHO(*p++); } SERIAL_ECHOPAIR_P(SP_P_STR, int(BLOCK_BUFFER_SIZE - planner.movesplanned() - 1)); - SERIAL_ECHOPAIR(" B", BUFSIZE - length); + SERIAL_ECHOPAIR(" B", int(BUFSIZE - length)); #endif SERIAL_EOL(); } @@ -364,9 +364,9 @@ inline void process_stream_char(const char c, uint8_t &sis, char (&buff)[MAX_CMD inline bool process_line_done(uint8_t &sis, char (&buff)[MAX_CMD_SIZE], int &ind) { sis = PS_NORMAL; buff[ind] = 0; - if (!ind) { thermalManager.manage_heater(); return true; } - ind = 0; - return false; + if (ind) { ind = 0; return false; } + thermalManager.manage_heater(); + return true; } /** @@ -415,11 +415,13 @@ void GCodeQueue::get_serial_commands() { if (serial_char == '\n' || serial_char == '\r') { - if (process_line_done(serial_input_state[i], serial_line_buffer[i], serial_count[i])) continue; + // Reset our state, continue if the line was empty + if (process_line_done(serial_input_state[i], serial_line_buffer[i], serial_count[i])) + continue; char* command = serial_line_buffer[i]; - while (*command == ' ') command++; // Skip leading spaces + while (*command == ' ') command++; // Skip leading spaces char *npos = (*command == 'N') ? command : nullptr; // Require the N parameter to start the line if (npos) { @@ -551,7 +553,9 @@ void GCodeQueue::get_serial_commands() { else if (n < 0) SERIAL_ERROR_MSG(MSG_SD_ERR_READ); - if (process_line_done(sd_input_state, command_buffer[index_w], sd_count)) continue; + // Terminate the buffer, reset the input state, continue for empty line + if (process_line_done(sd_input_state, command_buffer[index_w], sd_count)) + continue; _commit_command(false);