|
|
@ -723,6 +723,15 @@ void loop() { |
|
|
|
lcd_update(); |
|
|
|
} |
|
|
|
|
|
|
|
void gcode_line_error(const char *err, bool doFlush=true) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
serialprintPGM(err); |
|
|
|
SERIAL_ERRORLN(gcode_LastN); |
|
|
|
//Serial.println(gcode_N);
|
|
|
|
if (doFlush) FlushSerialRequestResend(); |
|
|
|
serial_count = 0; |
|
|
|
} |
|
|
|
|
|
|
|
/**
|
|
|
|
* Add to the circular command queue the next command from: |
|
|
|
* - The command-injection queue (queued_commands_P) |
|
|
@ -768,12 +777,7 @@ void get_command() { |
|
|
|
strchr_pointer = strchr(command, 'N'); |
|
|
|
gcode_N = (strtol(strchr_pointer + 1, NULL, 10)); |
|
|
|
if (gcode_N != gcode_LastN + 1 && strstr_P(command, PSTR("M110")) == NULL) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERRORPGM(MSG_ERR_LINE_NO); |
|
|
|
SERIAL_ERRORLN(gcode_LastN); |
|
|
|
//Serial.println(gcode_N);
|
|
|
|
FlushSerialRequestResend(); |
|
|
|
serial_count = 0; |
|
|
|
gcode_line_error(PSTR(MSG_ERR_LINE_NO)); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
@ -784,33 +788,22 @@ void get_command() { |
|
|
|
strchr_pointer = strchr(command, '*'); |
|
|
|
|
|
|
|
if (strtol(strchr_pointer + 1, NULL, 10) != checksum) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERRORPGM(MSG_ERR_CHECKSUM_MISMATCH); |
|
|
|
SERIAL_ERRORLN(gcode_LastN); |
|
|
|
FlushSerialRequestResend(); |
|
|
|
serial_count = 0; |
|
|
|
gcode_line_error(PSTR(MSG_ERR_CHECKSUM_MISMATCH)); |
|
|
|
return; |
|
|
|
} |
|
|
|
//if no errors, continue parsing
|
|
|
|
// if no errors, continue parsing
|
|
|
|
} |
|
|
|
else { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERRORPGM(MSG_ERR_NO_CHECKSUM); |
|
|
|
SERIAL_ERRORLN(gcode_LastN); |
|
|
|
FlushSerialRequestResend(); |
|
|
|
serial_count = 0; |
|
|
|
gcode_line_error(PSTR(MSG_ERR_NO_CHECKSUM)); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
gcode_LastN = gcode_N; |
|
|
|
//if no errors, continue parsing
|
|
|
|
// if no errors, continue parsing
|
|
|
|
} |
|
|
|
else { // if we don't receive 'N' but still see '*'
|
|
|
|
if ((strchr(command, '*') != NULL)) { |
|
|
|
SERIAL_ERROR_START; |
|
|
|
SERIAL_ERRORPGM(MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM); |
|
|
|
SERIAL_ERRORLN(gcode_LastN); |
|
|
|
serial_count = 0; |
|
|
|
gcode_line_error(PSTR(MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM), false); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|