Add CNC-like G-code options

This commit is contained in:
thesfreader
2018-10-05 09:35:55 +02:00
committed by Scott Lahteine
parent 33056046a3
commit e09c144674
4 changed files with 136 additions and 29 deletions

View File

@ -283,6 +283,9 @@ static int read_serial(const int index) {
inline void get_serial_commands() {
static char serial_line_buffer[NUM_SERIAL][MAX_CMD_SIZE];
static bool serial_comment_mode[NUM_SERIAL] = { false };
#if ENABLED(PARENTHESE_COMMENTS)
static bool serial_comment_paranthese_mode[NUM_SERIAL] = { false };
#endif
// If the command buffer is empty for too long,
// send "wait" to indicate Marlin is still waiting.
@ -311,6 +314,9 @@ inline void get_serial_commands() {
if (serial_char == '\n' || serial_char == '\r') {
serial_comment_mode[i] = false; // end of line == end of comment
#if ENABLED(PARENTHESE_COMMENTS)
serial_comment_paranthese_mode[i] = false; // end of line == end of comment
#endif
// Skip empty lines and comments
if (!serial_count[i]) { thermalManager.manage_heater(); continue; }
@ -404,12 +410,24 @@ inline void get_serial_commands() {
}
else if (serial_char == '\\') { // Handle escapes
// if we have one more character, copy it over
if ((c = read_serial(i)) >= 0 && !serial_comment_mode[i])
if ((c = read_serial(i)) >= 0 && !serial_comment_mode[i]
#if ENABLED(PARENTHESE_COMMENTS)
&& ! serial_comment_paranthese_mode[i]
#endif
)
serial_line_buffer[i][serial_count[i]++] = (char)c;
}
else { // it's not a newline, carriage return or escape char
if (serial_char == ';') serial_comment_mode[i] = true;
if (!serial_comment_mode[i]) serial_line_buffer[i][serial_count[i]++] = serial_char;
if (serial_char == ';') serial_comment_mode[i] = true;
#if ENABLED(PARENTHESE_COMMENTS)
else if (serial_char == '(') serial_comment_paranthese_mode[i] = true;
else if (serial_char == ')') serial_comment_paranthese_mode[i] = false;
#endif
else if (!serial_comment_mode[i]
#if ENABLED(PARENTHESE_COMMENTS)
&& ! serial_comment_paranthese_mode[i]
#endif
) serial_line_buffer[i][serial_count[i]++] = serial_char;
}
} // for NUM_SERIAL
} // queue has space, serial has data
@ -426,6 +444,9 @@ inline void get_serial_commands() {
static bool stop_buffering = false,
sd_comment_mode = false;
#if ENABLED(PARENTHESE_COMMENTS)
static bool sd_comment_parenthese_mode = false;
#endif
if (!IS_SD_PRINTING) return;
/**
@ -445,7 +466,11 @@ inline void get_serial_commands() {
card_eof = card.eof();
if (card_eof || n == -1
|| sd_char == '\n' || sd_char == '\r'
|| ((sd_char == '#' || sd_char == ':') && !sd_comment_mode)
|| ((sd_char == '#' || sd_char == ':') && !sd_comment_mode
#if ENABLED(PARENTHESE_COMMENTS)
&& ! sd_comment_parenthese_mode
#endif
)
) {
if (card_eof) {
@ -481,6 +506,9 @@ inline void get_serial_commands() {
if (sd_char == '#') stop_buffering = true;
sd_comment_mode = false; // for new command
#if ENABLED(PARENTHESE_COMMENTS)
sd_comment_parenthese_mode = false;
#endif
// Skip empty lines and comments
if (!sd_count) { thermalManager.manage_heater(); continue; }
@ -497,8 +525,17 @@ inline void get_serial_commands() {
*/
}
else {
if (sd_char == ';') sd_comment_mode = true;
if (!sd_comment_mode) command_queue[cmd_queue_index_w][sd_count++] = sd_char;
if (sd_char == ';') sd_comment_mode = true;
#if ENABLED(PARENTHESE_COMMENTS)
else if (sd_char == '(') sd_comment_parenthese_mode = true;
else if (sd_char == ')') sd_comment_parenthese_mode = false;
#endif
else if (!sd_comment_mode
#if ENABLED(PARENTHESE_COMMENTS)
&& ! sd_comment_parenthese_mode
#endif
)
command_queue[cmd_queue_index_w][sd_count++] = sd_char;
}
}
}