| 
					
				 | 
			
			
				@@ -2508,35 +2508,49 @@ void gcode_M701() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @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() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (farm_mode) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        selectedSerialPort = 0;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MSerial.write(";S");  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // S/N is:CZPX0917X003XC13518  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        int numbersRead = 0;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        while (numbersRead < 19) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            while (MSerial.available() > 0) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                uint8_t serial_char = MSerial.read();  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                selectedSerialPort = 1;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                MSerial.write(serial_char);  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                numbersRead++;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                selectedSerialPort = 0;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        selectedSerialPort = 1;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MSerial.write('\n');  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /*for (int b = 0; b < 3; b++) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            tone(BEEPER, 110);  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            delay(50);  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            noTone(BEEPER);  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            delay(50);  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }*/  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } else {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         MYSERIAL.println("Not in farm mode.");  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (farm_mode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        selectedSerialPort = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MSerial.write(";S"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int numbersRead = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Timer timeout; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        timeout.start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        while (numbersRead < 19) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            while (MSerial.available() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                uint8_t serial_char = MSerial.read(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                selectedSerialPort = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                MSerial.write(serial_char); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                numbersRead++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                selectedSerialPort = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (timeout.expired(100)) break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        selectedSerialPort = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MSerial.write('\n'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (int b = 0; b < 3; b++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            tone(BEEPER, 110); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            delay(50); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            noTone(BEEPER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            delay(50); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MYSERIAL.println("Not in farm mode."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void process_commands() 
			 |