Moved comment and block delete handling into protocol.c from gcode.c. Fixes bug when comment and block delete are not isolated. Blank lines ignored.
Comments, block delete characters, and blank lines are no longer passed to the gcode parser and should free up some memory by ignoring these characters. Gcode parser now expects clean gcode only. There was a bug if there were block deletes or comments not in the first character (i.e. spindle on/off for proofing geode without turning it on, or a NXX followed by a comment). This should fix it by bypassing the problem. Left a commented line for easily turning on and off block deletes for a later feature, if desired.
This commit is contained in:
parent
ed5e5d1181
commit
badb638df9
7
gcode.c
7
gcode.c
@ -117,7 +117,8 @@ static double theta(double x, double y)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Executes one line of 0-terminated G-Code. The line is assumed to contain only uppercase
|
// Executes one line of 0-terminated G-Code. The line is assumed to contain only uppercase
|
||||||
// characters and signed floating point values (no whitespace).
|
// characters and signed floating point values (no whitespace). Comments and block delete
|
||||||
|
// characters have been removed.
|
||||||
uint8_t gc_execute_line(char *line) {
|
uint8_t gc_execute_line(char *line) {
|
||||||
uint8_t char_counter = 0;
|
uint8_t char_counter = 0;
|
||||||
char letter;
|
char letter;
|
||||||
@ -139,10 +140,6 @@ uint8_t gc_execute_line(char *line) {
|
|||||||
|
|
||||||
gc.status_code = STATUS_OK;
|
gc.status_code = STATUS_OK;
|
||||||
|
|
||||||
// Disregard comments and block delete
|
|
||||||
if (line[0] == '(') { return(gc.status_code); }
|
|
||||||
if (line[0] == '/') { char_counter++; } // ignore block delete
|
|
||||||
|
|
||||||
// Pass 1: Commands
|
// Pass 1: Commands
|
||||||
while(next_statement(&letter, &value, line, &char_counter)) {
|
while(next_statement(&letter, &value, line, &char_counter)) {
|
||||||
int_value = trunc(value);
|
int_value = trunc(value);
|
||||||
|
46
protocol.c
46
protocol.c
@ -72,20 +72,44 @@ uint8_t protocol_execute_line(char *line) {
|
|||||||
void protocol_process()
|
void protocol_process()
|
||||||
{
|
{
|
||||||
char c;
|
char c;
|
||||||
|
uint8_t iscomment = false;
|
||||||
while((c = serial_read()) != SERIAL_NO_DATA)
|
while((c = serial_read()) != SERIAL_NO_DATA)
|
||||||
{
|
{
|
||||||
if((char_counter > 0) && ((c == '\n') || (c == '\r'))) { // Line is complete. Then execute!
|
if ((c == '\n') || (c == '\r')) { // End of block reached
|
||||||
line[char_counter] = 0; // treminate string
|
if (char_counter > 0) {// Line is complete. Then execute!
|
||||||
status_message(protocol_execute_line(line));
|
line[char_counter] = 0; // terminate string
|
||||||
char_counter = 0; // reset line buffer index
|
status_message(protocol_execute_line(line));
|
||||||
} else if (c <= ' ') {
|
} else {
|
||||||
// Throw away whitepace and control characters
|
// Empty or comment line. Skip block.
|
||||||
} else if (char_counter >= LINE_BUFFER_SIZE-1) {
|
status_message(STATUS_OK); // Send status message for syncing purposes.
|
||||||
// Throw away any characters beyond the end of the line buffer
|
}
|
||||||
} else if (c >= 'a' && c <= 'z') { // Upcase lowercase
|
char_counter = 0; // Reset line buffer index
|
||||||
line[char_counter++] = c-'a'+'A';
|
iscomment = false; // Reset comment flag
|
||||||
} else {
|
} else {
|
||||||
line[char_counter++] = c;
|
if (iscomment) {
|
||||||
|
// Throw away all comment characters
|
||||||
|
if (c == ')') {
|
||||||
|
// End of comment. Resume line.
|
||||||
|
iscomment = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (c <= ' ') {
|
||||||
|
// Throw away whitepace and control characters
|
||||||
|
} else if (c == '/') {
|
||||||
|
// Disable block delete and throw away character
|
||||||
|
// To enable block delete, uncomment following line. Will ignore until EOL.
|
||||||
|
// iscomment = true;
|
||||||
|
} else if (c == '(') {
|
||||||
|
// Enable comments flag and ignore all characters until ')' or EOL.
|
||||||
|
iscomment = true;
|
||||||
|
} else if (char_counter >= LINE_BUFFER_SIZE-1) {
|
||||||
|
// Throw away any characters beyond the end of the line buffer
|
||||||
|
} else if (c >= 'a' && c <= 'z') { // Upcase lowercase
|
||||||
|
line[char_counter++] = c-'a'+'A';
|
||||||
|
} else {
|
||||||
|
line[char_counter++] = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user