|  | @@ -2133,14 +2133,14 @@ void prusa_statistics(int _message, uint8_t _fil_nr) {
 | 
	
		
			
				|  |  |  		farm_timer = 2;
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case 6:		// print done
 | 
	
		
			
				|  |  | -		SERIAL_ECHOLN("{[PRN:8]");
 | 
	
		
			
				|  |  | +		SERIAL_ECHO("{[PRN:8]");
 | 
	
		
			
				|  |  |  		prusa_stat_farm_number();
 | 
	
		
			
				|  |  |  		SERIAL_ECHOLN("}");
 | 
	
		
			
				|  |  |  		status_number = 8;
 | 
	
		
			
				|  |  |  		farm_timer = 2;
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case 7:		// print done - stopped
 | 
	
		
			
				|  |  | -		SERIAL_ECHOLN("{[PRN:9]");
 | 
	
		
			
				|  |  | +		SERIAL_ECHO("{[PRN:9]");
 | 
	
		
			
				|  |  |  		prusa_stat_farm_number();
 | 
	
		
			
				|  |  |  		SERIAL_ECHOLN("}");
 | 
	
		
			
				|  |  |  		status_number = 9;
 | 
	
	
		
			
				|  | @@ -2154,7 +2154,7 @@ void prusa_statistics(int _message, uint8_t _fil_nr) {
 | 
	
		
			
				|  |  |  		farm_timer = 2;
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case 20:		// echo farm no
 | 
	
		
			
				|  |  | -		SERIAL_ECHOLN("{");
 | 
	
		
			
				|  |  | +		SERIAL_ECHO("{");
 | 
	
		
			
				|  |  |  		prusa_stat_printerstatus(status_number);
 | 
	
		
			
				|  |  |  		prusa_stat_farm_number();
 | 
	
		
			
				|  |  |  		SERIAL_ECHOLN("}");
 | 
	
	
		
			
				|  | @@ -2168,19 +2168,19 @@ void prusa_statistics(int _message, uint8_t _fil_nr) {
 | 
	
		
			
				|  |  |  		SERIAL_ECHOLN("}");
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |      case 22: // waiting for filament change
 | 
	
		
			
				|  |  | -        SERIAL_ECHOLN("{[PRN:5]");
 | 
	
		
			
				|  |  | +        SERIAL_ECHO("{[PRN:5]");
 | 
	
		
			
				|  |  |  		prusa_stat_farm_number();
 | 
	
		
			
				|  |  |  		SERIAL_ECHOLN("}");
 | 
	
		
			
				|  |  |  		status_number = 5;
 | 
	
		
			
				|  |  |          break;
 | 
	
		
			
				|  |  |  	
 | 
	
		
			
				|  |  |  	case 90: // Error - Thermal Runaway
 | 
	
		
			
				|  |  | -		SERIAL_ECHOLN("{[ERR:1]");
 | 
	
		
			
				|  |  | +		SERIAL_ECHO("{[ERR:1]");
 | 
	
		
			
				|  |  |  		prusa_stat_farm_number();
 | 
	
		
			
				|  |  |  		SERIAL_ECHOLN("}");
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case 91: // Error - Thermal Runaway Preheat
 | 
	
		
			
				|  |  | -		SERIAL_ECHOLN("{[ERR:2]");
 | 
	
		
			
				|  |  | +		SERIAL_ECHO("{[ERR:2]");
 | 
	
		
			
				|  |  |  		prusa_stat_farm_number();
 | 
	
		
			
				|  |  |  		SERIAL_ECHOLN("}");
 | 
	
		
			
				|  |  |  		break;
 | 
	
	
		
			
				|  | @@ -2190,7 +2190,7 @@ void prusa_statistics(int _message, uint8_t _fil_nr) {
 | 
	
		
			
				|  |  |  		SERIAL_ECHOLN("}");
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case 93: // Error - Max temp
 | 
	
		
			
				|  |  | -		SERIAL_ECHOLN("{[ERR:4]");
 | 
	
		
			
				|  |  | +		SERIAL_ECHO("{[ERR:4]");
 | 
	
		
			
				|  |  |  		prusa_stat_farm_number();
 | 
	
		
			
				|  |  |  		SERIAL_ECHOLN("}");
 | 
	
		
			
				|  |  |  		break;
 | 
	
	
		
			
				|  | @@ -3773,12 +3773,20 @@ void lcd_confirm_print()
 | 
	
		
			
				|  |  |  				_ret = 1;
 | 
	
		
			
				|  |  |  				filament_type = lcd_choose_color();
 | 
	
		
			
				|  |  |  				prusa_statistics(4, filament_type);
 | 
	
		
			
				|  |  | +				no_response = true; //we need confirmation by recieving PRUSA thx
 | 
	
		
			
				|  |  | +				important_status = 4;
 | 
	
		
			
				|  |  | +				saved_filament_type = filament_type;
 | 
	
		
			
				|  |  | +				NcTime = millis();
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			if (cursor_pos == 2)
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  |  				_ret = 2;
 | 
	
		
			
				|  |  |  				filament_type = lcd_choose_color();
 | 
	
		
			
				|  |  |  				prusa_statistics(5, filament_type);
 | 
	
		
			
				|  |  | +				no_response = true; //we need confirmation by recieving PRUSA thx
 | 
	
		
			
				|  |  | +				important_status = 5;				
 | 
	
		
			
				|  |  | +				saved_filament_type = filament_type;
 | 
	
		
			
				|  |  | +				NcTime = millis();
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -3849,7 +3857,7 @@ static void lcd_main_menu()
 | 
	
		
			
				|  |  |      
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  |      }*/
 | 
	
		
			
				|  |  | -    
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  |    if ( ( IS_SD_PRINTING || is_usb_printing ) && (current_position[Z_AXIS] < Z_HEIGHT_HIDE_LIVE_ADJUST_MENU) && !homing_flag && !mesh_bed_leveling_flag)
 | 
	
		
			
				|  |  |    {
 | 
	
		
			
				|  |  |  	MENU_ITEM(submenu, MSG_BABYSTEP_Z, lcd_babystep_z);//8
 | 
	
	
		
			
				|  | @@ -4109,7 +4117,7 @@ void lcd_sdcard_stop()
 | 
	
		
			
				|  |  |  				lcd_return_to_status();
 | 
	
		
			
				|  |  |  				lcd_ignore_click(true);
 | 
	
		
			
				|  |  |  				lcd_commands_type = LCD_COMMAND_STOP_PRINT;
 | 
	
		
			
				|  |  | -            
 | 
	
		
			
				|  |  | +				if (farm_mode) prusa_statistics(7);
 | 
	
		
			
				|  |  |                  // Turn off the print fan
 | 
	
		
			
				|  |  |                  SET_OUTPUT(FAN_PIN);
 | 
	
		
			
				|  |  |                  WRITE(FAN_PIN, 0);
 | 
	
	
		
			
				|  | @@ -5202,12 +5210,56 @@ void lcd_update(uint8_t lcdDrawUpdateOverride)
 | 
	
		
			
				|  |  |  	  }
 | 
	
		
			
				|  |  |  	if (!SdFatUtil::test_stack_integrity()) stack_error();
 | 
	
		
			
				|  |  |  	lcd_ping(); //check that we have received ping command if we are in farm mode
 | 
	
		
			
				|  |  | +	lcd_send_status();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void lcd_printer_connected() {
 | 
	
		
			
				|  |  |  	printer_connected = true;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +static void lcd_send_status() {
 | 
	
		
			
				|  |  | +	if (farm_mode && no_response && ((millis() - NcTime) > (NC_TIME * 1000))) {
 | 
	
		
			
				|  |  | +		//send important status messages periodicaly
 | 
	
		
			
				|  |  | +		prusa_statistics(important_status, saved_filament_type);
 | 
	
		
			
				|  |  | +		NcTime = millis();
 | 
	
		
			
				|  |  | +		lcd_connect_printer();
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static void lcd_connect_printer() {
 | 
	
		
			
				|  |  | +	lcd_update_enable(false);
 | 
	
		
			
				|  |  | +	lcd_implementation_clear();
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	bool pressed = false;
 | 
	
		
			
				|  |  | +	int i = 0;
 | 
	
		
			
				|  |  | +	int t = 0;
 | 
	
		
			
				|  |  | +	lcd_set_custom_characters_progress();
 | 
	
		
			
				|  |  | +	lcd_implementation_print_at(0, 0, "Connect printer to"); 
 | 
	
		
			
				|  |  | +	lcd_implementation_print_at(0, 1, "monitoring or hold");
 | 
	
		
			
				|  |  | +	lcd_implementation_print_at(0, 2, "the knob to continue");
 | 
	
		
			
				|  |  | +	while (no_response) {
 | 
	
		
			
				|  |  | +		i++;
 | 
	
		
			
				|  |  | +		t++;		
 | 
	
		
			
				|  |  | +		delay_keep_alive(100);
 | 
	
		
			
				|  |  | +		process_commands();
 | 
	
		
			
				|  |  | +		if (t == 10) {
 | 
	
		
			
				|  |  | +			prusa_statistics(important_status, saved_filament_type);
 | 
	
		
			
				|  |  | +			t = 0;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		if (READ(BTN_ENC)) { //if button is not pressed
 | 
	
		
			
				|  |  | +			i = 0; 
 | 
	
		
			
				|  |  | +			lcd_implementation_print_at(0, 3, "                    ");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		if (i!=0) lcd_implementation_print_at((i * 20) / (NC_BUTTON_LONG_PRESS * 10), 3, "\x01");
 | 
	
		
			
				|  |  | +		if (i == NC_BUTTON_LONG_PRESS * 10) {
 | 
	
		
			
				|  |  | +			no_response = false;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	lcd_set_custom_characters_degree();
 | 
	
		
			
				|  |  | +	lcd_update_enable(true);
 | 
	
		
			
				|  |  | +	lcd_update(2);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  void lcd_ping() { //chceck if printer is connected to monitoring when in farm mode
 | 
	
		
			
				|  |  |  	if (farm_mode) {
 | 
	
		
			
				|  |  |  		bool empty = is_buffer_empty();
 |