diff --git a/Marlin/MarlinSerial.cpp b/Marlin/MarlinSerial.cpp index 82812986b4..69fce40558 100644 --- a/Marlin/MarlinSerial.cpp +++ b/Marlin/MarlinSerial.cpp @@ -325,12 +325,11 @@ MarlinSerial customizedSerial; enum e_parser_state { state_RESET, + state_N, state_M, state_M1, state_M10, state_M11, - state_M2, - state_M3, state_M4, state_M41, state_IGNORE // to '\n' @@ -338,131 +337,68 @@ MarlinSerial customizedSerial; static e_parser_state state = state_RESET; + if (c == '\n') state = state_IGNORE; + switch (state) { case state_RESET: switch (c) { - case 'M': - state = state_M; - break; - case ';': - state = state_IGNORE; - break; - default: state = state_RESET; + case ' ': break; + case 'N': state = state_N; break; + case 'M': state = state_M; break; + default: state = state_IGNORE; } - break; + break; + + case state_N: + switch (c) { + case '0': case '1': case '2': + case '3': case '4': case '5': + case '6': case '7': case '8': + case '9': case '-': case ' ': break; + case 'M': state = state_M; break; + default: state = state_IGNORE; + } + break; case state_M: switch (c) { - case '1': - state = state_M1; - break; - case '2': - state = state_M2; - break; - case '3': - state = state_M3; - break; - case '4': - state = state_M4; - break; - case ';': - state = state_IGNORE; - break; - default: state = state_RESET; + case ' ': break; + case '1': state = state_M1; break; + case '4': state = state_M4; break; + default: state = state_IGNORE; } - break; + break; case state_M1: switch (c) { - case '0': - state = state_M10; - break; - case '1': - state = state_M11; - break; - case ';': - state = state_IGNORE; - break; - default: state = state_RESET; + case '0': state = state_M10; break; + case '1': state = state_M11; break; + default: state = state_IGNORE; } - break; - - case state_M2: - switch (c) { - case '3': // M23 - case '8': // M28 - case ';': - state = state_IGNORE; - break; - default: state = state_RESET; - } - break; - - case state_M3: - switch (c) { - case '0': // M30 - case '2': // M32 - case '3': // M33 - case ';': - state = state_IGNORE; - break; - default: state = state_RESET; - } - break; + break; case state_M10: - switch (c) { - case '8': // M108 - { state = state_RESET; wait_for_heatup = false; } - break; - case ';': - state = state_IGNORE; - break; - default: state = state_RESET; - } - break; + if (c == '8') wait_for_heatup = false; // M108 + state = state_IGNORE; + break; case state_M11: - switch (c) { - case '2': // M112 - state = state_RESET; kill(PSTR(MSG_KILLED)); - break; - case '7': // M117 - case ';': - state = state_IGNORE; - break; - default: state = state_RESET; - } - break; + if (c == '2') kill(PSTR(MSG_KILLED)); // M112 + state = state_IGNORE; + break; case state_M4: - switch (c) { - case '1': - state = state_M41; - break; - case ';': - state = state_IGNORE; - break; - default: state = state_RESET; - } - break; + state = (c == '1') ? state_M41 : state_IGNORE; + break; case state_M41: - switch (c) { - case '0': - state = state_RESET; - quickstop_stepper(); - break; - case ';': - state = state_IGNORE; - break; - default: state = state_RESET; - } - break; + if (c == '0') quickstop_stepper(); // M410 + state = state_IGNORE; + break; case state_IGNORE: if (c == '\n') state = state_RESET; - break; + break; default: state = state_RESET;