saving/restoring filename and current position in bytes to eeprom, UVLO changed

This commit is contained in:
PavelSindler 2017-07-02 21:01:23 +02:00
parent 29499510f4
commit 17074e1d25
6 changed files with 84 additions and 10 deletions

View file

@ -49,6 +49,8 @@
#define EEPROM_CALIBRATION_STATUS_PINDA (EEPROM_BOWDEN_LENGTH - 1) //0 - not calibrated; 1 - calibrated
#define EEPROM_UVLO (EEPROM_CALIBRATION_STATUS_PINDA - 1) //1 - uvlo during print
#define EEPROM_UVLO_CURRENT_POSITION (EEPROM_UVLO-2*4) // 2 x float for current_position in X and Y axes
#define EEPROM_FILENAME (EEPROM_UVLO_CURRENT_POSITION - 8) //8chars to store filename without extension
#define EEPROM_FILE_POSITION (EEPROM_FILENAME - 4) //32 bit for uint32_t file position
// Currently running firmware, each digit stored as uint16_t.
// The flavor differentiates a dev, alpha, beta, release candidate or a release version.

View file

@ -356,4 +356,10 @@ void serialecho_temperatures();
void uvlo_();
void recover_print();
void setup_uvlo_interrupt();
extern void save_print_to_eeprom();
extern void restore_print_from_eeprom();
extern void position_menu();
#define UVLO !(PINE & (1<<4))

View file

@ -6748,22 +6748,49 @@ void serialecho_temperatures() {
void uvlo_() {
SERIAL_ECHOLNPGM("UVLO");
eeprom_update_byte((uint8_t*)EEPROM_UVLO, 1);
//SERIAL_ECHOLNPGM("UVLO");
save_print_to_eeprom();
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]);
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();
// Clean the input command queue.
cmdqueue_reset();
card.sdprinting = false;
card.closefile();
current_position[E_AXIS] -= DEFAULT_RETRACTION;
sei(); //enable stepper driver interrupt to move Z axis
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 40, active_extruder);
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;
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 40, active_extruder);
st_synchronize();
eeprom_update_byte((uint8_t*)EEPROM_UVLO, 1);
}
void recover_print() {
//char cmd1[30];
setTargetHotend0(210); //need to change to stored temperature
setTargetBed(55);
homeaxis(X_AXIS);
homeaxis(Y_AXIS);
/*float x_rec, y_rec;
x_rec = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0));
y_rec = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4));
strcpy(cmd1, "G1 X");
strcat(cmd1, ftostr32(x_rec));
strcat(cmd1, " Y");
strcat(cmd1, ftostr32(y_rec));
enquecommand(cmd1);
enquecommand_P(PSTR("G1 Z" STRINGIFY(-UVLO_Z_AXIS_SHIFT)));
enquecommand_P(PSTR("G1 E" STRINGIFY(DEFAULT_RETRACTION)));*/
current_position[X_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 0));
current_position[Y_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_CURRENT_POSITION + 4));
/*SERIAL_ECHOPGM("Current position [X_AXIS]:");
@ -6776,12 +6803,41 @@ void recover_print() {
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 40, active_extruder);
st_synchronize();
current_position[E_AXIS] += DEFAULT_RETRACTION; //unretract
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 40, active_extruder);
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 400, active_extruder);
st_synchronize();
restore_print_from_eeprom();
eeprom_update_byte((uint8_t*)EEPROM_UVLO, 0);
}
void restore_print_from_eeprom() {
char cmd[30];
char* c;
char filename[13];
char str[5] = ".gco";
for (int i = 0; i < 8; i++) {
filename[i] = eeprom_read_byte((uint8_t*)EEPROM_FILENAME + i);
}
filename[8] = '\0';
MYSERIAL.print(filename);
strcat(filename, str);
sprintf_P(cmd, PSTR("M23 %s"), filename);
for (c = &cmd[4]; *c; c++)
*c = tolower(*c);
enquecommand(cmd);
uint32_t position = eeprom_read_dword((uint32_t*)(EEPROM_FILE_POSITION));
SERIAL_ECHOPGM("Position read from eeprom:");
MYSERIAL.println(position);
card.setIndex(position);
enquecommand_P(PSTR("M24"));
sprintf_P(cmd, PSTR("M26 S%d"), position);
enquecommand(cmd);
}
void setup_uvlo_interrupt() {
DDRE &= ~(1 << 4); //input pin
PORTE &= ~(1 << 4); //no internal pull-up
@ -6800,3 +6856,7 @@ ISR(INT4_vect) {
uvlo_();
}
void save_print_to_eeprom() {
eeprom_update_dword((uint32_t*)(EEPROM_FILE_POSITION), card.get_sdpos());
}

View file

@ -47,6 +47,7 @@ public:
FORCE_INLINE void setIndex(long index) {sdpos = index;file.seekSet(index);};
FORCE_INLINE uint8_t percentDone(){if(!isFileOpen()) return 0; if(filesize) return sdpos/((filesize+99)/100); else return 0;};
FORCE_INLINE char* getWorkDirName(){workDir.getFilename(filename);return filename;};
FORCE_INLINE uint32_t get_sdpos() { if (!isFileOpen()) return 0; else return(sdpos); };
bool ToshibaFlashAir_isEnabled() const { return card.getFlashAirCompatible(); }
void ToshibaFlashAir_enable(bool enable) { card.setFlashAirCompatible(enable); }

View file

@ -399,9 +399,8 @@
#define BEEPER 84 // Beeper on AUX-4
#define LCD_PINS_RS 82
#define LCD_PINS_ENABLE 61
#define LCD_PINS_D4 59
#define LCD_PINS_ENABLE 18
#define LCD_PINS_D4 19
#define LCD_PINS_D5 70
#define LCD_PINS_D6 85
#define LCD_PINS_D7 71
@ -413,7 +412,7 @@
#define SDCARDDETECT 15
#define TACH_0 79
#define TACH_0 81
#define TACH_1 80
#endif //NEWPANEL
@ -504,12 +503,13 @@
#ifdef NEWPANEL
#define BEEPER 84 // Beeper on AUX-4
#define LCD_PINS_RS 82
//#define LCD_PINS_ENABLE 18
//#define LCD_PINS_D4 19
#define LCD_PINS_ENABLE 61
#define LCD_PINS_D4 59
#define LCD_PINS_D4 59
#define LCD_PINS_D5 70
#define LCD_PINS_D6 85
#define LCD_PINS_D7 71
@ -522,7 +522,7 @@
#define SDCARDDETECT 15
#define TACH_0 79
#define TACH_1 80
#define TACH_1 80
#endif //NEWPANEL
#endif //ULTRA_LCD

View file

@ -3688,6 +3688,8 @@ static void lcd_main_menu()
MENU_ITEM(back, MSG_WATCH, lcd_status_screen);
MENU_ITEM(function, PSTR("restore_print"), restore_print_from_eeprom);
/* if (farm_mode && !IS_SD_PRINTING )
{
@ -4818,6 +4820,9 @@ static void menu_action_sdfile(const char* filename, char* longFilename)
for (c = &cmd[4]; *c; c++)
*c = tolower(*c);
enquecommand(cmd);
for (int i = 0; i < 8; i++) {
eeprom_write_byte((uint8_t*)EEPROM_FILENAME + i, filename[i]);
}
enquecommand_P(PSTR("M24"));
lcd_return_to_status();
}