Fixes commands not being acknowledged in the same order they are received

in

G0 to G3 were previously acknowledged in the get_command method, causing
them to be possibly acknowledged before commands coming after them that
were acknowledged in process_commands.

This patch fixes this, moving the acknowledgement of G0 to G3 to the
process_commands method as well. These commands are therefore no
longer acknowledged when the enter the cmd_buffer but instead only
acknowledged when the enter the plan_buffer.

Guaranteeing that commands are acknowledged in the same order in which
they were received by the firmware allows host software to be able to
track the life cycle of commands and such a better management of the
firmware's serial buffers as well as better internal command processing
and response parsing without having to depend on throwing an epic
amount of regular expressions against each line received back from the
firmware.

Fixes ErikZalm/Marlin#1147
This commit is contained in:
Gina Häußge 2014-12-19 14:20:36 +01:00
parent 4d61287807
commit acc0e75279

View file

@ -721,14 +721,7 @@ void get_command()
case 1: case 1:
case 2: case 2:
case 3: case 3:
if(Stopped == false) { // If printer is stopped by an error the G[0-3] codes are ignored. if (Stopped == true) {
#ifdef SDSUPPORT
if(card.saving)
break;
#endif //SDSUPPORT
SERIAL_PROTOCOLLNPGM(MSG_OK);
}
else {
SERIAL_ERRORLNPGM(MSG_ERR_STOPPED); SERIAL_ERRORLNPGM(MSG_ERR_STOPPED);
LCD_MESSAGEPGM(MSG_STOPPED); LCD_MESSAGEPGM(MSG_STOPPED);
} }
@ -1357,7 +1350,6 @@ void process_commands()
#endif //FWRETRACT #endif //FWRETRACT
prepare_move(); prepare_move();
//ClearToSend(); //ClearToSend();
return;
} }
break; break;
#ifndef SCARA //disable arc support #ifndef SCARA //disable arc support
@ -1365,14 +1357,12 @@ void process_commands()
if(Stopped == false) { if(Stopped == false) {
get_arc_coordinates(); get_arc_coordinates();
prepare_arc_move(true); prepare_arc_move(true);
return;
} }
break; break;
case 3: // G3 - CCW ARC case 3: // G3 - CCW ARC
if(Stopped == false) { if(Stopped == false) {
get_arc_coordinates(); get_arc_coordinates();
prepare_arc_move(false); prepare_arc_move(false);
return;
} }
break; break;
#endif #endif