Fix Malyan ExtUI parse_lcd_byte
See https://community.platformio.org/t/marlin-compile-fail-board-board-h-no-such-file-or-directory/11843/43
This commit is contained in:
parent
76efba686b
commit
d5b791a26a
|
@ -71,7 +71,7 @@
|
|||
#define MAX_CURLY_COMMAND (32 + LONG_FILENAME_LENGTH) * 2
|
||||
|
||||
// Track incoming command bytes from the LCD
|
||||
int inbound_count;
|
||||
uint16_t inbound_count;
|
||||
|
||||
// For sending print completion messages
|
||||
bool last_printing_status = false;
|
||||
|
@ -361,29 +361,38 @@ void process_lcd_command(const char* command) {
|
|||
DEBUG_ECHOLNPAIR("UNKNOWN COMMAND FORMAT ", command);
|
||||
}
|
||||
|
||||
//
|
||||
// Parse LCD commands mixed with G-Code
|
||||
void parse_lcd_byte(byte b) {
|
||||
static bool parsing_lcd_cmd = false;
|
||||
//
|
||||
void parse_lcd_byte(const byte b) {
|
||||
static char inbound_buffer[MAX_CURLY_COMMAND];
|
||||
|
||||
if (!parsing_lcd_cmd) {
|
||||
if (b == '{' || b == '\n' || b == '\r') { // A line-ending or opening brace
|
||||
parsing_lcd_cmd = b == '{'; // Brace opens an LCD command
|
||||
if (inbound_count) { // Looks like a G-code is in the buffer
|
||||
static uint8_t parsing = 0; // Parsing state
|
||||
static bool prevcr = false; // Was the last c a CR?
|
||||
|
||||
const char c = b & 0x7F;
|
||||
|
||||
if (parsing) {
|
||||
const bool is_lcd = parsing == 1; // 1 for LCD
|
||||
if ( ( is_lcd && c == '}') // Closing brace on LCD command
|
||||
|| (!is_lcd && c == '\n') // LF on a G-code command
|
||||
) {
|
||||
inbound_buffer[inbound_count] = '\0'; // Reset before processing
|
||||
inbound_count = 0;
|
||||
parsing = 0; // Unflag and...
|
||||
inbound_count = 0; // Reset buffer index
|
||||
if (parsing == 1)
|
||||
process_lcd_command(inbound_buffer); // Handle the LCD command
|
||||
else
|
||||
queue.enqueue_one_now(inbound_buffer); // Handle the G-code command
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (b == '}') { // Closing brace on an LCD command
|
||||
parsing_lcd_cmd = false; // Unflag and...
|
||||
inbound_buffer[inbound_count] = '\0'; // reset before processing
|
||||
inbound_count = 0;
|
||||
process_lcd_command(inbound_buffer); // Handle the LCD command
|
||||
}
|
||||
else if (inbound_count < MAX_CURLY_COMMAND - 2)
|
||||
inbound_buffer[inbound_count++] = b; // Buffer only if space remains
|
||||
inbound_buffer[inbound_count++] = is_lcd ? c : b; // Buffer while space remains
|
||||
}
|
||||
else {
|
||||
if (c == '{') parsing = 1; // Brace opens an LCD command
|
||||
else if (prevcr && c == '\n') parsing = 2; // CRLF indicates G-code
|
||||
prevcr = (c == '\r'); // Remember if it was a CR
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -433,9 +442,8 @@ namespace ExtUI {
|
|||
update_usb_status(false);
|
||||
|
||||
// now drain commands...
|
||||
while (LCD_SERIAL.available()) {
|
||||
parse_lcd_byte((byte)LCD_SERIAL.read() & 0x7F);
|
||||
}
|
||||
while (LCD_SERIAL.available())
|
||||
parse_lcd_byte((byte)LCD_SERIAL.read());
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
// The way last printing status works is simple:
|
||||
|
|
Loading…
Reference in a new issue