Fix printer resets in farm mode if command "PRUSA SN" is received and 32U2 processor is not responding.

This commit is contained in:
Marek Bel 2018-04-12 18:44:33 +02:00
parent 08740356b8
commit 388d6eea36

View file

@ -2508,35 +2508,49 @@ void gcode_M701()
} }
/** /**
* @brief Get serial number from 32U2 processor * @brief Get serial number from 32U2 processor
*
* Typical format of S/N is:CZPX0917X003XC13518
*
* Command operates only in farm mode, if not in farm mode, "Not in farm mode." is written to MYSERIAL.
*
* Send command ;S to serial port 0 to retrieve serial number stored in 32U2 processor,
* reply is transmitted to serial port 1 character by character.
* Operation takes typically 23 ms. If the retransmit is not finished until 100 ms,
* it is interrupted, so less, or no characters are retransmitted, only newline character is send
* in any case.
*/ */
static void gcode_PRUSA_SN() static void gcode_PRUSA_SN()
{ {
if (farm_mode) { if (farm_mode) {
selectedSerialPort = 0; selectedSerialPort = 0;
MSerial.write(";S"); MSerial.write(";S");
// S/N is:CZPX0917X003XC13518 int numbersRead = 0;
int numbersRead = 0; Timer timeout;
timeout.start();
while (numbersRead < 19) { while (numbersRead < 19) {
while (MSerial.available() > 0) { while (MSerial.available() > 0) {
uint8_t serial_char = MSerial.read(); uint8_t serial_char = MSerial.read();
selectedSerialPort = 1; selectedSerialPort = 1;
MSerial.write(serial_char); MSerial.write(serial_char);
numbersRead++; numbersRead++;
selectedSerialPort = 0; selectedSerialPort = 0;
} }
} if (timeout.expired(100)) break;
selectedSerialPort = 1; }
MSerial.write('\n'); selectedSerialPort = 1;
/*for (int b = 0; b < 3; b++) { MSerial.write('\n');
tone(BEEPER, 110); #if 0
delay(50); for (int b = 0; b < 3; b++) {
noTone(BEEPER); tone(BEEPER, 110);
delay(50); delay(50);
}*/ noTone(BEEPER);
} else { delay(50);
MYSERIAL.println("Not in farm mode."); }
} #endif
} else {
MYSERIAL.println("Not in farm mode.");
}
} }
void process_commands() void process_commands()