Browse Source

merging with upstream

PavelSindler 7 years ago
parent
commit
b87dc69042
1 changed files with 20 additions and 17 deletions
  1. 20 17
      Firmware/Marlin_main.cpp

+ 20 - 17
Firmware/Marlin_main.cpp

@@ -6770,24 +6770,23 @@ void serialecho_temperatures() {
 void uvlo_() {
 		SERIAL_ECHOLNPGM("UVLO");
 		save_print_to_eeprom();
-		float current_position_bckp[2];
-		int feedrate_bckp = feedrate;
-		current_position_bckp[X_AXIS] = st_get_position_mm(X_AXIS);
-		current_position_bckp[Y_AXIS] = st_get_position_mm(Y_AXIS);
+    // feedrate in mm/min
+		int feedrate_bckp = blocks_queued() ? (block_buffer[block_buffer_tail].nominal_speed * 60.f) : feedrate;
 
-		eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0), current_position_bckp[X_AXIS]);
-		eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4), current_position_bckp[Y_AXIS]);
+    disable_x();
+    disable_y();
+    planner_abort_hard();
+
+		eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0), current_position[X_AXIS]);
+		eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4), current_position[Y_AXIS]);
 		eeprom_update_float((float*)(EEPROM_UVLO_CURRENT_POSITION_Z), current_position[Z_AXIS]);
 		EEPROM_save_B(EEPROM_UVLO_FEEDRATE, &feedrate_bckp);
 		eeprom_update_byte((uint8_t*)EEPROM_UVLO_TARGET_HOTEND, target_temperature[active_extruder]);
 		eeprom_update_byte((uint8_t*)EEPROM_UVLO_TARGET_BED, target_temperature_bed);
 		eeprom_update_byte((uint8_t*)EEPROM_UVLO_FAN_SPEED, fanSpeed);
-		disable_x();
-		disable_y();
-		planner_abort_hard();
 		// Because the planner_abort_hard() initialized current_position[Z] from the stepper,
 		// Z baystep is no more applied. Reset it.
-		babystep_reset();
+		//babystep_reset();
 		// Clean the input command queue.
 		cmdqueue_reset();
 		card.sdprinting = false;
@@ -6798,11 +6797,13 @@ void uvlo_() {
 		plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400, active_extruder);
 		st_synchronize();
 		current_position[Z_AXIS] += UVLO_Z_AXIS_SHIFT;
+    eeprom_update_byte((uint8_t*)EEPROM_UVLO, 1);
 		plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 40, active_extruder);
-		st_synchronize();
-        disable_z();
-		eeprom_update_byte((uint8_t*)EEPROM_UVLO, 1);
-        delay(10);
+    // Move the print head to the side of the print until all the power stored in the power supply capacitors is depleted.
+    current_position[X_AXIS] = (current_position[X_AXIS] < 0.5f * (X_MIN_POS + X_MAX_POS)) ? X_MIN_POS : X_MAX_POS;
+    plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 500, active_extruder);
+    st_synchronize();
+//    disable_z();
 
 		SERIAL_ECHOLNPGM("UVLO - end");
 		cli();
@@ -6876,7 +6877,9 @@ void recover_print() {
 	current_position[Z_AXIS] = z_pos;
 	plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
 
-
+  if (current_position[Z_AXIS] < 25)
+    // Lift the print head, so one may remove the excess priming material.
+    enquecommand_P(PSTR("G1 Z25 F800"));
 	enquecommand_P(PSTR("G28 X"));
 	enquecommand_P(PSTR("G28 Y"));
 	sprintf_P(cmd, PSTR("M109 S%d"), target_temperature[active_extruder]);
@@ -6931,10 +6934,10 @@ void restore_print_from_eeprom() {
 	SERIAL_ECHOPGM("Position read from eeprom:");
 	MYSERIAL.println(position);
 
-	enquecommand_P(PSTR("M24")); //M24 - Start SD print
 	sprintf_P(cmd, PSTR("M26 S%lu"), position);
-
 	enquecommand(cmd);	
+  enquecommand_P(PSTR("M24")); //M24 - Start SD print
+
 	enquecommand_P(PSTR("M83")); //E axis relative mode
 	strcpy(cmd, "G1 X");
 	strcat(cmd, ftostr32(x_rec));