Parcourir la source

Merge pull request #46 from XPila/MK3

Power Panic - new method of sd_position calculation.
XPila il y a 7 ans
Parent
commit
641c21a97b
1 fichiers modifiés avec 15 ajouts et 2 suppressions
  1. 15 2
      Firmware/Marlin_main.cpp

+ 15 - 2
Firmware/Marlin_main.cpp

@@ -6781,7 +6781,10 @@ void uvlo_() {
         disable_z();
 		eeprom_update_byte((uint8_t*)EEPROM_UVLO, 1);
         delay(10);
-    
+
+		SERIAL_ECHOLNPGM("UVLO - end");
+		cli();
+		while(1);
 }
 
 void setup_uvlo_interrupt() {
@@ -6802,6 +6805,8 @@ ISR(INT4_vect) {
 	if (IS_SD_PRINTING) uvlo_();
 }
 
+#define POWERPANIC_NEW_SD_POS
+extern uint32_t sdpos_atomic;
 
 void save_print_to_eeprom() {
 	//eeprom_update_word((uint16_t*)(EPROM_UVLO_CMD_QUEUE), bufindw - bufindr );
@@ -6812,7 +6817,15 @@ void save_print_to_eeprom() {
 	//bufindr -> position in circular buffer where to read
 	//bufflen -> number of lines in buffer -> for each line one special character??
 	//number_of_blocks() returns number of linear movements buffered in planner
+#ifdef POWERPANIC_NEW_SD_POS
+	long sd_position = sdpos_atomic; //atomic sd position of last command added in queue
+	uint16_t sdlen_planner = planner_calc_sd_length(); //length of sd commands in planner
+	sd_position -= sdlen_planner;
+	uint16_t sdlen_cmdqueue = cmdqueue_calc_sd_length(); //length of sd commands in cmdqueue
+	sd_position -= sdlen_cmdqueue;
+#else //POWERPANIC_NEW_SD_POS
 	long sd_position = card.get_sdpos() - ((bufindw > bufindr) ? (bufindw - bufindr) : sizeof(cmdbuffer) - bufindr + bufindw) - TYP_GCODE_LENGTH* number_of_blocks();
+#endif //POWERPANIC_NEW_SD_POS
 	if (sd_position < 0) sd_position = 0;
 	/*SERIAL_ECHOPGM("sd position before correction:");
 	MYSERIAL.println(card.get_sdpos());
@@ -6924,7 +6937,7 @@ void restore_print_from_eeprom() {
 ////////////////////////////////////////////////////////////////////////////////
 // new save/restore printing
 
-extern uint32_t sdpos_atomic;
+//extern uint32_t sdpos_atomic;
 
 bool saved_printing = false;
 uint32_t saved_sdpos = 0;