Browse Source

Add parser.is_command(letter, code)

vanilla_fb_2.0.x
Scott Lahteine 4 years ago
parent
commit
7f7c27be30
  1. 2
      Marlin/src/gcode/gcode.cpp
  2. 4
      Marlin/src/gcode/parser.cpp
  3. 5
      Marlin/src/gcode/parser.h
  4. 13
      Marlin/src/gcode/queue.cpp

2
Marlin/src/gcode/gcode.cpp

@ -250,7 +250,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
* Will still block Gcodes if M511 is disabled, in which case the printer should be unlocked via LCD Menu * Will still block Gcodes if M511 is disabled, in which case the printer should be unlocked via LCD Menu
*/ */
#if ENABLED(PASSWORD_FEATURE) #if ENABLED(PASSWORD_FEATURE)
if (password.is_locked && !(parser.command_letter == 'M' && parser.codenum == 511)) { if (password.is_locked && !parser.is_command('M', 511)) {
SERIAL_ECHO_MSG(STR_PRINTER_LOCKED); SERIAL_ECHO_MSG(STR_PRINTER_LOCKED);
return; return;
} }

4
Marlin/src/gcode/parser.cpp

@ -45,7 +45,7 @@ char *GCodeParser::command_ptr,
*GCodeParser::string_arg, *GCodeParser::string_arg,
*GCodeParser::value_ptr; *GCodeParser::value_ptr;
char GCodeParser::command_letter; char GCodeParser::command_letter;
int GCodeParser::codenum; uint16_t GCodeParser::codenum;
#if ENABLED(USE_GCODE_SUBCODES) #if ENABLED(USE_GCODE_SUBCODES)
uint8_t GCodeParser::subcode; uint8_t GCodeParser::subcode;
@ -270,7 +270,7 @@ void GCodeParser::parse(char *p) {
// Special handling for M32 [P] !/path/to/file.g# // Special handling for M32 [P] !/path/to/file.g#
// The path must be the last parameter // The path must be the last parameter
if (param == '!' && letter == 'M' && codenum == 32) { if (param == '!' && is_command('M', 32)) {
string_arg = p; // Name starts after '!' string_arg = p; // Name starts after '!'
char * const lb = strchr(p, '#'); // Already seen '#' as SD char (to pause buffering) char * const lb = strchr(p, '#'); // Already seen '#' as SD char (to pause buffering)
if (lb) *lb = '\0'; // Safe to mark the end of the filename if (lb) *lb = '\0'; // Safe to mark the end of the filename

5
Marlin/src/gcode/parser.h

@ -84,7 +84,7 @@ public:
static char *command_ptr, // The command, so it can be echoed static char *command_ptr, // The command, so it can be echoed
*string_arg, // string of command line *string_arg, // string of command line
command_letter; // G, M, or T command_letter; // G, M, or T
static int codenum; // 123 static uint16_t codenum; // 123
#if ENABLED(USE_GCODE_SUBCODES) #if ENABLED(USE_GCODE_SUBCODES)
static uint8_t subcode; // .1 static uint8_t subcode; // .1
#endif #endif
@ -244,6 +244,9 @@ public:
static bool chain(); static bool chain();
#endif #endif
// Test whether the parsed command matches the input
static inline bool is_command(const char ltr, const uint16_t num) { return command_letter == ltr && codenum == num; }
// The code value pointer was set // The code value pointer was set
FORCE_INLINE static bool has_value() { return !!value_ptr; } FORCE_INLINE static bool has_value() { return !!value_ptr; }

13
Marlin/src/gcode/queue.cpp

@ -416,11 +416,14 @@ inline void process_stream_char(const char c, uint8_t &sis, char (&buff)[MAX_CMD
* keep sensor readings going and watchdog alive. * keep sensor readings going and watchdog alive.
*/ */
inline bool process_line_done(uint8_t &sis, char (&buff)[MAX_CMD_SIZE], int &ind) { inline bool process_line_done(uint8_t &sis, char (&buff)[MAX_CMD_SIZE], int &ind) {
sis = PS_NORMAL; sis = PS_NORMAL; // "Normal" Serial Input State
buff[ind] = 0; buff[ind] = '\0'; // Of course, I'm a Terminator.
if (ind) { ind = 0; return false; } const bool is_empty = (ind == 0); // An empty line?
thermalManager.manage_heater(); if (is_empty)
return true; thermalManager.manage_heater(); // Keep sensors satisfied
else
ind = 0; // Start a new line
return is_empty; // Inform the caller
} }
/** /**

Loading…
Cancel
Save