diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 984de501..5d5301cb 100644 --- a/Firmware/Marlin_main.cpp +++ b/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;