diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h
index 8a396dac1..7dedc8a4b 100755
--- a/Firmware/Marlin.h
+++ b/Firmware/Marlin.h
@@ -296,6 +296,7 @@ void setPwmFrequency(uint8_t pin, int val);
extern bool fans_check_enabled;
extern float homing_feedrate[];
extern bool axis_relative_modes[];
+extern float feedrate;
extern int feedmultiply;
extern int extrudemultiply; // Sets extrude multiply factor (in percent) for all extruders
extern int extruder_multiply[EXTRUDERS]; // sets extrude multiply factor (in percent) for each extruder individually
@@ -395,7 +396,7 @@ extern uint16_t gcode_in_progress;
extern LongTimer safetyTimer;
#define PRINT_PERCENT_DONE_INIT 0xff
-#define PRINTER_ACTIVE (IS_SD_PRINTING || is_usb_printing || isPrintPaused || (custom_message_type == CustomMsg::TempCal) || saved_printing || (lcd_commands_type == LcdCommands::Layer1Cal) || card.paused || mmu_print_saved)
+#define PRINTER_ACTIVE (IS_SD_PRINTING || is_usb_printing || isPrintPaused || (custom_message_type == CustomMsg::TempCal) || saved_printing || (lcd_commands_type == LcdCommands::Layer1Cal) || mmu_print_saved)
//! Beware - mcode_in_progress is set as soon as the command gets really processed,
//! which is not the same as posting the M600 command into the command queue
diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp
index b27dfed74..22229b477 100755
--- a/Firmware/Marlin_main.cpp
+++ b/Firmware/Marlin_main.cpp
@@ -309,6 +309,8 @@ bool no_response = false;
uint8_t important_status;
uint8_t saved_filament_type;
+#define SAVED_TARGET_UNSET (X_MIN_POS-1)
+float saved_target[NUM_AXIS] = {SAVED_TARGET_UNSET, 0, 0, 0};
// save/restore printing in case that mmu was not responding
bool mmu_print_saved = false;
@@ -329,7 +331,15 @@ float destination[NUM_AXIS] = { 0.0, 0.0, 0.0, 0.0};
// For tracing an arc
static float offset[3] = {0.0, 0.0, 0.0};
-static float feedrate = 1500.0, next_feedrate, saved_feedrate;
+
+// Current feedrate
+float feedrate = 1500.0;
+
+// Feedrate for the next move
+static float next_feedrate;
+
+// Original feedrate saved during homing moves
+static float saved_feedrate;
// Determines Absolute or Relative Coordinates.
// Also there is bool axis_relative_modes[] per axis flag.
@@ -373,8 +383,8 @@ bool saved_printing = false; //!< Print is paused and saved in RAM
static uint32_t saved_sdpos = 0; //!< SD card position, or line number in case of USB printing
uint8_t saved_printing_type = PRINTING_TYPE_SD;
static float saved_pos[4] = { 0, 0, 0, 0 };
-//! Feedrate hopefully derived from an active block of the planner at the time the print has been canceled, in mm/min.
-static float saved_feedrate2 = 0;
+static uint16_t saved_feedrate2 = 0; //!< Default feedrate (truncated from float)
+static int saved_feedmultiply2 = 0;
static uint8_t saved_active_extruder = 0;
static float saved_extruder_temperature = 0.0; //!< Active extruder temperature
static bool saved_extruder_under_pressure = false;
@@ -3673,17 +3683,15 @@ void process_commands()
Set of internal PRUSA commands
#### Usage
-
- P RUSA [ Ping | PRN | FAN | fn | thx | uvlo | fsensor_recover | MMURES | RESET | fv | M28 | SN | Fir | Rev | Lang | Lz | Beat | FR ]
+ P RUSA [ Ping | PRN | FAN | fn | thx | uvlo | MMURES | RESET | fv | M28 | SN | Fir | Rev | Lang | Lz | Beat | FR ]
- #### Parameters
+ #### Parameters
- `Ping`
- `PRN` - Prints revision of the printer
- `FAN` - Prints fan details
- `fn` - Prints farm no.
- `thx`
- `uvlo`
- - `fsensor_recover` - Filament sensor recover - restore print and continue
- `MMURES` - Reset MMU
- `RESET` - (Careful!)
- `fv` - ?
@@ -3732,12 +3740,6 @@ void process_commands()
eeprom_update_byte((uint8_t*)EEPROM_UVLO,0);
enquecommand_P(PSTR("M24"));
}
-#ifdef FILAMENT_SENSOR
- else if (code_seen("fsensor_recover")) // PRUSA fsensor_recover
- {
- fsensor_restore_print_and_continue();
- }
-#endif //FILAMENT_SENSOR
else if (code_seen("MMURES")) // PRUSA MMURES
{
mmu_reset();
@@ -4078,8 +4080,19 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
#endif
+ get_coordinates(); // For X Y Z E F
+
+ // When recovering from a previous print move, restore the originally
+ // calculated target position on the first USB/SD command. This accounts
+ // properly for relative moves
+ if ((saved_target[0] != SAVED_TARGET_UNSET) &&
+ ((CMDBUFFER_CURRENT_TYPE == CMDBUFFER_CURRENT_TYPE_SDCARD) ||
+ (CMDBUFFER_CURRENT_TYPE == CMDBUFFER_CURRENT_TYPE_USB_WITH_LINENR)))
+ {
+ memcpy(destination, saved_target, sizeof(destination));
+ saved_target[0] = SAVED_TARGET_UNSET;
+ }
- get_coordinates(); // For X Y Z E F
if (total_filament_used > ((current_position[E_AXIS] - destination[E_AXIS]) * 100)) { //protection against total_filament_used overflow
total_filament_used = total_filament_used + ((destination[E_AXIS] - current_position[E_AXIS]) * 100);
}
@@ -5556,16 +5569,26 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
card.openFile(strchr_pointer + 4,true);
break;
+<<<<<<< HEAD
/*!
### M24 - Start SD print M24: Start/resume SD print
*/ ----------------------------------
+=======
+ //! ### M24 - Start/resume SD print
+ // ----------------------------------
+>>>>>>> upstream/MK3
case 24:
- if (!card.paused)
- failstats_reset_print();
- card.startFileprint();
- starttime=_millis();
+ if (isPrintPaused)
+ lcd_resume_print();
+ else
+ {
+ failstats_reset_print();
+ card.startFileprint();
+ starttime=_millis();
+ }
break;
+<<<<<<< HEAD
/*!
### M25 - Pause SD print M25: Pause SD print
*/ ----------------------------------
@@ -5582,6 +5605,13 @@ if(eSoundMode!=e_SOUND_MODE_SILENT)
- `S` - Index in bytes
*/ ----------------------------------
+=======
+ //! ### M26 S\ - Set SD index
+ //! Set position in SD card file to index in bytes.
+ //! This command is expected to be called after M23 and before M24.
+ //! Otherwise effect of this command is undefined.
+ // ----------------------------------
+>>>>>>> upstream/MK3
case 26:
if(card.cardOK && code_seen('S')) {
long index = code_value_long();
@@ -7729,13 +7759,25 @@ Sigma_Exit:
break;
#endif //FILAMENTCHANGEENABLE
+<<<<<<< HEAD
/*!
### M601 - Pause print M601: Pause print
*/ -------------------------------
+=======
+ //! ### M25 - Pause SD print
+ //! ### M601 - Pause print
+ //! ### M125 - Pause print (TODO: not implemented)
+ // -------------------------------
+ case 25:
+>>>>>>> upstream/MK3
case 601:
{
- cmdqueue_pop_front(); //trick because we want skip this command (M601) after restore
- lcd_pause_print();
+ if (!isPrintPaused)
+ {
+ st_synchronize();
+ cmdqueue_pop_front(); //trick because we want skip this command (M601) after restore
+ lcd_pause_print();
+ }
}
break;
@@ -7743,15 +7785,23 @@ Sigma_Exit:
### M602 - Resume print M602: Resume print
*/ -------------------------------
case 602: {
- lcd_resume_print();
+ if (isPrintPaused)
+ lcd_resume_print();
}
break;
+<<<<<<< HEAD
/*!
### M603 - Stop print M603: Stop print
*/ -------------------------------
case 603: {
lcd_print_stop();
+=======
+ //! ### M603 - Stop print
+ // -------------------------------
+ case 603: {
+ Stop();
+>>>>>>> upstream/MK3
}
break;
@@ -9091,38 +9141,43 @@ void clamp_to_software_endstops(float target[3])
}
#ifdef MESH_BED_LEVELING
- void mesh_plan_buffer_line(const float &x, const float &y, const float &z, const float &e, const float &feed_rate, const uint8_t extruder) {
+void mesh_plan_buffer_line(const float &x, const float &y, const float &z, const float &e, const float &feed_rate, const uint8_t extruder) {
float dx = x - current_position[X_AXIS];
float dy = y - current_position[Y_AXIS];
- float dz = z - current_position[Z_AXIS];
int n_segments = 0;
-
+
if (mbl.active) {
float len = abs(dx) + abs(dy);
if (len > 0)
// Split to 3cm segments or shorter.
n_segments = int(ceil(len / 30.f));
}
-
+
if (n_segments > 1) {
+ // In a multi-segment move explicitly set the final target in the plan
+ // as the move will be recalculated in it's entirety
+ float gcode_target[NUM_AXIS];
+ gcode_target[X_AXIS] = x;
+ gcode_target[Y_AXIS] = y;
+ gcode_target[Z_AXIS] = z;
+ gcode_target[E_AXIS] = e;
+
+ float dz = z - current_position[Z_AXIS];
float de = e - current_position[E_AXIS];
+
for (int i = 1; i < n_segments; ++ i) {
float t = float(i) / float(n_segments);
- if (saved_printing || (mbl.active == false)) return;
- plan_buffer_line(
- current_position[X_AXIS] + t * dx,
+ plan_buffer_line(current_position[X_AXIS] + t * dx,
current_position[Y_AXIS] + t * dy,
current_position[Z_AXIS] + t * dz,
current_position[E_AXIS] + t * de,
- feed_rate, extruder);
+ feed_rate, extruder, gcode_target);
+ if (waiting_inside_plan_buffer_line_print_aborted)
+ return;
}
}
// The rest of the path.
plan_buffer_line(x, y, z, e, feed_rate, extruder);
- current_position[X_AXIS] = x;
- current_position[Y_AXIS] = y;
- current_position[Z_AXIS] = z;
- current_position[E_AXIS] = e;
}
#endif // MESH_BED_LEVELING
@@ -9142,10 +9197,10 @@ void prepare_move()
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate*feedmultiply*(1./(60.f*100.f)), active_extruder);
#endif
}
+ if (waiting_inside_plan_buffer_line_print_aborted)
+ return;
- for(int8_t i=0; i < NUM_AXIS; i++) {
- current_position[i] = destination[i];
- }
+ set_current_to_destination();
}
void prepare_arc_move(char isclockwise) {
@@ -9866,10 +9921,8 @@ void bed_check(float x_dimension, float y_dimension, int x_points_num, int y_poi
destination[X_AXIS] = ix * (x_dimension / (x_points_num - 1)) + shift_x;
destination[Y_AXIS] = iy * (y_dimension / (y_points_num - 1)) + shift_y;
- mesh_plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], XY_AXIS_FEEDRATE/6, active_extruder);
- for(int8_t i=0; i < NUM_AXIS; i++) {
- current_position[i] = destination[i];
- }
+ mesh_plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], XY_AXIS_FEEDRATE/6, active_extruder);
+ set_current_to_destination();
st_synchronize();
// printf_P(PSTR("X = %f; Y= %f \n"), current_position[X_AXIS], current_position[Y_AXIS]);
@@ -10355,8 +10408,18 @@ void uvlo_()
if (sd_position < 0) sd_position = 0;
}
- // Backup the feedrate in mm/min.
- int feedrate_bckp = blocks_queued() ? (block_buffer[block_buffer_tail].nominal_speed * 60.f) : feedrate;
+ // save the global state at planning time
+ uint16_t feedrate_bckp;
+ if (blocks_queued())
+ {
+ memcpy(saved_target, current_block->gcode_target, sizeof(saved_target));
+ feedrate_bckp = current_block->gcode_feedrate;
+ }
+ else
+ {
+ saved_target[0] = SAVED_TARGET_UNSET;
+ feedrate_bckp = feedrate;
+ }
// After this call, the planner queue is emptied and the current_position is set to a current logical coordinate.
// The logical coordinate will likely differ from the machine coordinate if the skew calibration and mesh bed leveling
@@ -10423,7 +10486,8 @@ void uvlo_()
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]);
// Store the current feed rate, temperatures, fan speed and extruder multipliers (flow rates)
- EEPROM_save_B(EEPROM_UVLO_FEEDRATE, &feedrate_bckp);
+ eeprom_update_word((uint16_t*)EEPROM_UVLO_FEEDRATE, feedrate_bckp);
+ EEPROM_save_B(EEPROM_UVLO_FEEDMULTIPLY, &feedmultiply);
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);
@@ -10435,6 +10499,11 @@ void uvlo_()
#endif
#endif
eeprom_update_word((uint16_t*)(EEPROM_EXTRUDEMULTIPLY), (uint16_t)extrudemultiply);
+ // Store the saved target
+ eeprom_update_float((float*)(EEPROM_UVLO_SAVED_TARGET+0*4), saved_target[X_AXIS]);
+ eeprom_update_float((float*)(EEPROM_UVLO_SAVED_TARGET+1*4), saved_target[Y_AXIS]);
+ eeprom_update_float((float*)(EEPROM_UVLO_SAVED_TARGET+2*4), saved_target[Z_AXIS]);
+ eeprom_update_float((float*)(EEPROM_UVLO_SAVED_TARGET+3*4), saved_target[E_AXIS]);
// Finaly store the "power outage" flag.
if(sd_print) eeprom_update_byte((uint8_t*)EEPROM_UVLO, 1);
@@ -10683,10 +10752,17 @@ void recover_machine_state_after_power_panic(bool bTiny)
#endif
#endif
extrudemultiply = (int)eeprom_read_word((uint16_t*)(EEPROM_EXTRUDEMULTIPLY));
+
+ // 9) Recover the saved target
+ saved_target[X_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_SAVED_TARGET+0*4));
+ saved_target[Y_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_SAVED_TARGET+1*4));
+ saved_target[Z_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_SAVED_TARGET+2*4));
+ saved_target[E_AXIS] = eeprom_read_float((float*)(EEPROM_UVLO_SAVED_TARGET+3*4));
}
void restore_print_from_eeprom() {
int feedrate_rec;
+ int feedmultiply_rec;
uint8_t fan_speed_rec;
char cmd[30];
char filename[13];
@@ -10694,9 +10770,12 @@ void restore_print_from_eeprom() {
char dir_name[9];
fan_speed_rec = eeprom_read_byte((uint8_t*)EEPROM_UVLO_FAN_SPEED);
- EEPROM_read_B(EEPROM_UVLO_FEEDRATE, &feedrate_rec);
+ feedrate_rec = eeprom_read_word((uint16_t*)EEPROM_UVLO_FEEDRATE);
+ EEPROM_read_B(EEPROM_UVLO_FEEDMULTIPLY, &feedmultiply_rec);
SERIAL_ECHOPGM("Feedrate:");
- MYSERIAL.println(feedrate_rec);
+ MYSERIAL.print(feedrate_rec);
+ SERIAL_ECHOPGM(", feedmultiply:");
+ MYSERIAL.println(feedmultiply_rec);
depth = eeprom_read_byte((uint8_t*)EEPROM_DIR_DEPTH);
@@ -10737,9 +10816,11 @@ void restore_print_from_eeprom() {
enquecommand(cmd);
// Unretract.
enquecommand_P(PSTR("G1 E" STRINGIFY(2*default_retraction)" F480"));
- // Set the feedrate saved at the power panic.
+ // Set the feedrates saved at the power panic.
sprintf_P(cmd, PSTR("G1 F%d"), feedrate_rec);
enquecommand(cmd);
+ sprintf_P(cmd, PSTR("M220 S%d"), feedmultiply_rec);
+ enquecommand(cmd);
if (eeprom_read_byte((uint8_t*)EEPROM_UVLO_E_ABS))
{
enquecommand_P(PSTR("M82")); //E axis abslute mode
@@ -10891,16 +10972,21 @@ void stop_and_save_print_to_ram(float z_move, float e_move)
}
#endif
-#if 0
- saved_feedrate2 = feedrate; //save feedrate
-#else
- // Try to deduce the feedrate from the first block of the planner.
- // Speed is in mm/min.
- saved_feedrate2 = blocks_queued() ? (block_buffer[block_buffer_tail].nominal_speed * 60.f) : feedrate;
-#endif
+ // save the global state at planning time
+ if (blocks_queued())
+ {
+ memcpy(saved_target, current_block->gcode_target, sizeof(saved_target));
+ saved_feedrate2 = current_block->gcode_feedrate;
+ }
+ else
+ {
+ saved_target[0] = SAVED_TARGET_UNSET;
+ saved_feedrate2 = feedrate;
+ }
planner_abort_hard(); //abort printing
memcpy(saved_pos, current_position, sizeof(saved_pos));
+ saved_feedmultiply2 = feedmultiply; //save feedmultiply
saved_active_extruder = active_extruder; //save active_extruder
saved_extruder_temperature = degTargetHotend(active_extruder);
@@ -10978,7 +11064,6 @@ void restore_print_from_ram_and_continue(float e_move)
wait_for_heater(_millis(), saved_active_extruder);
heating_status = 2;
}
- feedrate = saved_feedrate2; //restore feedrate
axis_relative_modes[E_AXIS] = saved_extruder_relative_mode;
float e = saved_pos[E_AXIS] - e_move;
plan_set_e_position(e);
@@ -11001,6 +11086,10 @@ void restore_print_from_ram_and_continue(float e_move)
fans_check_enabled = true;
#endif
+ // restore original feedrate/feedmultiply _after_ restoring the extruder position
+ feedrate = saved_feedrate2;
+ feedmultiply = saved_feedmultiply2;
+
memcpy(current_position, saved_pos, sizeof(saved_pos));
memcpy(destination, current_position, sizeof(destination));
if (saved_printing_type == PRINTING_TYPE_SD) { //was sd printing
@@ -11016,10 +11105,12 @@ void restore_print_from_ram_and_continue(float e_move)
else {
//not sd printing nor usb printing
}
+
SERIAL_PROTOCOLLNRPGM(MSG_OK); //dummy response because of octoprint is waiting for this
lcd_setstatuspgm(_T(WELCOME_MSG));
saved_printing_type = PRINTING_TYPE_NONE;
saved_printing = false;
+ waiting_inside_plan_buffer_line_print_aborted = true; //unroll the stack
}
void print_world_coordinates()
diff --git a/Firmware/cardreader.cpp b/Firmware/cardreader.cpp
index 3c01bf84b..047a2c761 100644
--- a/Firmware/cardreader.cpp
+++ b/Firmware/cardreader.cpp
@@ -25,7 +25,6 @@ CardReader::CardReader()
sdpos = 0;
sdprinting = false;
cardOK = false;
- paused = false;
saving = false;
logging = false;
autostart_atmillis=0;
@@ -242,24 +241,13 @@ void CardReader::startFileprint()
if(cardOK)
{
sdprinting = true;
- paused = false;
- Stopped = false;
+ Stopped = false;
#ifdef SDCARD_SORT_ALPHA
//flush_presort();
#endif
}
}
-void CardReader::pauseSDPrint()
-{
- if(sdprinting)
- {
- sdprinting = false;
- paused = true;
- }
-}
-
-
void CardReader::openLogFile(const char* name)
{
logging = true;
@@ -408,9 +396,7 @@ void CardReader::openFile(const char* name,bool read, bool replace_current/*=tru
SERIAL_ECHOLN(name);
}
sdprinting = false;
- paused = false;
-
-
+
SdFile myDir;
const char *fname=name;
diveSubfolder(fname,myDir);
@@ -492,24 +478,27 @@ uint32_t CardReader::getFileSize()
void CardReader::getStatus()
{
- if(sdprinting){
- SERIAL_PROTOCOL(longFilename);
- SERIAL_PROTOCOLPGM("\n");
- SERIAL_PROTOCOLRPGM(_N("SD printing byte "));////MSG_SD_PRINTING_BYTE
- SERIAL_PROTOCOL(sdpos);
- SERIAL_PROTOCOLPGM("/");
- SERIAL_PROTOCOLLN(filesize);
- uint16_t time = _millis()/60000 - starttime/60000;
- SERIAL_PROTOCOL(itostr2(time/60));
- SERIAL_PROTOCOL(':');
- SERIAL_PROTOCOL(itostr2(time%60));
- SERIAL_PROTOCOLPGM("\n");
- }
- else if (paused) {
- SERIAL_PROTOCOLLNPGM("SD print paused");
- }
- else if (saved_printing) {
- SERIAL_PROTOCOLLNPGM("Print saved");
+ if(sdprinting)
+ {
+ if (isPrintPaused) {
+ SERIAL_PROTOCOLLNPGM("SD print paused");
+ }
+ else if (saved_printing) {
+ SERIAL_PROTOCOLLNPGM("Print saved");
+ }
+ else {
+ SERIAL_PROTOCOL(longFilename);
+ SERIAL_PROTOCOLPGM("\n");
+ SERIAL_PROTOCOLRPGM(_N("SD printing byte "));////MSG_SD_PRINTING_BYTE
+ SERIAL_PROTOCOL(sdpos);
+ SERIAL_PROTOCOLPGM("/");
+ SERIAL_PROTOCOLLN(filesize);
+ uint16_t time = _millis()/60000 - starttime/60000;
+ SERIAL_PROTOCOL(itostr2(time/60));
+ SERIAL_PROTOCOL(':');
+ SERIAL_PROTOCOL(itostr2(time%60));
+ SERIAL_PROTOCOLPGM("\n");
+ }
}
else {
SERIAL_PROTOCOLLNPGM("Not SD printing");
diff --git a/Firmware/cardreader.h b/Firmware/cardreader.h
index b7df8ff41..9a7d0f697 100644
--- a/Firmware/cardreader.h
+++ b/Firmware/cardreader.h
@@ -25,7 +25,6 @@ public:
void closefile(bool store_location=false);
void release();
void startFileprint();
- void pauseSDPrint();
uint32_t getFileSize();
void getStatus();
void printingHasFinished();
@@ -75,7 +74,6 @@ public:
bool logging;
bool sdprinting ;
bool cardOK ;
- bool paused ;
char filename[13];
uint16_t modificationTime, modificationDate;
uint32_t cluster, position;
diff --git a/Firmware/cmdqueue.cpp b/Firmware/cmdqueue.cpp
index 74a8b90a5..e17db42a3 100755
--- a/Firmware/cmdqueue.cpp
+++ b/Firmware/cmdqueue.cpp
@@ -582,30 +582,8 @@ void get_command()
((serial_char == '#' || serial_char == ':') && comment_mode == false) ||
serial_count >= (MAX_CMD_SIZE - 1) || n==-1)
{
- if(card.eof()){
- SERIAL_PROTOCOLLNRPGM(_n("Done printing file"));////MSG_FILE_PRINTED
- stoptime=_millis();
- char time[30];
- unsigned long t=(stoptime-starttime-pause_time)/1000;
- pause_time = 0;
- int hours, minutes;
- minutes=(t/60)%60;
- hours=t/60/60;
- save_statistics(total_filament_used, t);
- sprintf_P(time, PSTR("%i hours %i minutes"),hours, minutes);
- SERIAL_ECHO_START;
- SERIAL_ECHOLN(time);
- lcd_setstatus(time);
- card.printingHasFinished();
- card.checkautostart(true);
+ if(card.eof()) break;
- if (farm_mode)
- {
- prusa_statistics(6);
- lcd_commands_type = LcdCommands::FarmModeConfirm;
- }
-
- }
if(serial_char=='#')
stop_buffering=true;
@@ -663,6 +641,37 @@ void get_command()
else if(!comment_mode) cmdbuffer[bufindw+CMDHDRSIZE+serial_count++] = serial_char;
}
}
+ if(card.eof())
+ {
+ // file was fully buffered, but commands might still need to be planned!
+ // do *not* clear sdprinting until all SD commands are consumed to ensure
+ // SD state can be resumed from a saved printing state. sdprinting is only
+ // cleared by printingHasFinished after peforming all remaining moves.
+ if(!cmdqueue_calc_sd_length())
+ {
+ SERIAL_PROTOCOLLNRPGM(_n("Done printing file"));////MSG_FILE_PRINTED
+ stoptime=_millis();
+ char time[30];
+ unsigned long t=(stoptime-starttime-pause_time)/1000;
+ pause_time = 0;
+ int hours, minutes;
+ minutes=(t/60)%60;
+ hours=t/60/60;
+ save_statistics(total_filament_used, t);
+ sprintf_P(time, PSTR("%i hours %i minutes"),hours, minutes);
+ SERIAL_ECHO_START;
+ SERIAL_ECHOLN(time);
+ lcd_setstatus(time);
+ card.printingHasFinished();
+ card.checkautostart(true);
+
+ if (farm_mode)
+ {
+ prusa_statistics(6);
+ lcd_commands_type = LcdCommands::FarmModeConfirm;
+ }
+ }
+ }
#endif //SDSUPPORT
}
diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h
index 0949e4110..12a31d3cc 100644
--- a/Firmware/eeprom.h
+++ b/Firmware/eeprom.h
@@ -74,7 +74,7 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
#define EEPROM_UVLO_CURRENT_POSITION_Z (EEPROM_FILE_POSITION - 4) //float for current position in Z
#define EEPROM_UVLO_TARGET_HOTEND (EEPROM_UVLO_CURRENT_POSITION_Z - 1)
#define EEPROM_UVLO_TARGET_BED (EEPROM_UVLO_TARGET_HOTEND - 1)
-#define EEPROM_UVLO_FEEDRATE (EEPROM_UVLO_TARGET_BED - 2)
+#define EEPROM_UVLO_FEEDRATE (EEPROM_UVLO_TARGET_BED - 2) //uint16_t
#define EEPROM_UVLO_FAN_SPEED (EEPROM_UVLO_FEEDRATE - 1)
#define EEPROM_FAN_CHECK_ENABLED (EEPROM_UVLO_FAN_SPEED - 1)
#define EEPROM_UVLO_MESH_BED_LEVELING (EEPROM_FAN_CHECK_ENABLED - 9*2)
@@ -204,9 +204,11 @@ static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE);
#define EEPROM_FSENSOR_PCB (EEPROM_SHEETS_BASE-1) // uint8
#define EEPROM_FSENSOR_ACTION_NA (EEPROM_FSENSOR_PCB-1) // uint8
+#define EEPROM_UVLO_SAVED_TARGET (EEPROM_FSENSOR_ACTION_NA - 4*4) // 4 x float for saved target for all axes
+#define EEPROM_UVLO_FEEDMULTIPLY (EEPROM_UVLO_SAVED_TARGET - 2) // uint16_t for feedmultiply
//This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items.
-#define EEPROM_LAST_ITEM EEPROM_SHEETS_BASE
+#define EEPROM_LAST_ITEM EEPROM_UVLO_FEEDMULTIPLY
// !!!!!
// !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!!
// !!!!!
diff --git a/Firmware/fsensor.cpp b/Firmware/fsensor.cpp
index c01274fb3..1c28d025f 100755
--- a/Firmware/fsensor.cpp
+++ b/Firmware/fsensor.cpp
@@ -57,15 +57,8 @@ bool fsensor_enabled = true;
bool fsensor_watch_runout = true;
//! not responding - is set if any communication error occurred during initialization or readout
bool fsensor_not_responding = false;
-//! printing saved
-bool fsensor_printing_saved = false;
//! enable/disable quality meassurement
bool fsensor_oq_meassure_enabled = false;
-//! as explained in the CHECK_FSENSOR macro: this flag is set to true when fsensor posts
-//! the M600 into the command queue, which elliminates the hazard of having posted multiple M600's
-//! before the first one gets read and started processing.
-//! Btw., the IR fsensor could do up to 6 posts before the command queue managed to start processing the first M600 ;)
-static bool fsensor_m600_enqueued = false;
//! number of errors, updated in ISR
uint8_t fsensor_err_cnt = 0;
@@ -137,12 +130,19 @@ void fsensor_stop_and_save_print(void)
void fsensor_restore_print_and_continue(void)
{
printf_P(PSTR("fsensor_restore_print_and_continue\n"));
- fsensor_watch_runout = true;
fsensor_err_cnt = 0;
- fsensor_m600_enqueued = false;
restore_print_from_ram_and_continue(0); //XYZ = orig, E - no change
}
+// fsensor_checkpoint_print cuts the current print job at the current position,
+// allowing new instructions to be inserted in the middle
+void fsensor_checkpoint_print(void)
+{
+ printf_P(PSTR("fsensor_checkpoint_print\n"));
+ stop_and_save_print_to_ram(0, 0);
+ restore_print_from_ram_and_continue(0);
+}
+
void fsensor_init(void)
{
#ifdef PAT9125
@@ -565,8 +565,6 @@ void fsensor_enque_M600(){
printf_P(PSTR("fsensor_update - M600\n"));
eeprom_update_byte((uint8_t*)EEPROM_FERROR_COUNT, eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT) + 1);
eeprom_update_word((uint16_t*)EEPROM_FERROR_COUNT_TOT, eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT) + 1);
- enquecommand_front_P(PSTR("PRUSA fsensor_recover"));
- fsensor_m600_enqueued = true;
enquecommand_front_P((PSTR("M600")));
}
@@ -578,7 +576,7 @@ void fsensor_enque_M600(){
void fsensor_update(void)
{
#ifdef PAT9125
- if (fsensor_enabled && fsensor_watch_runout && (fsensor_err_cnt > FSENSOR_ERR_MAX) && ( ! fsensor_m600_enqueued) )
+ if (fsensor_enabled && fsensor_watch_runout && (fsensor_err_cnt > FSENSOR_ERR_MAX))
{
bool autoload_enabled_tmp = fsensor_autoload_enabled;
fsensor_autoload_enabled = false;
@@ -611,22 +609,18 @@ void fsensor_update(void)
err |= (fsensor_oq_er_sum > 2);
err |= (fsensor_oq_yd_sum < (4 * FSENSOR_OQ_MIN_YD));
- if (!err)
- {
- printf_P(PSTR("fsensor_err_cnt = 0\n"));
- fsensor_restore_print_and_continue();
- }
- else
- {
- fsensor_enque_M600();
- fsensor_watch_runout = false;
- }
+ fsensor_restore_print_and_continue();
fsensor_autoload_enabled = autoload_enabled_tmp;
fsensor_oq_meassure_enabled = oq_meassure_enabled_tmp;
+
+ if (!err)
+ printf_P(PSTR("fsensor_err_cnt = 0\n"));
+ else
+ fsensor_enque_M600();
}
#else //PAT9125
- if (CHECK_FSENSOR && fsensor_enabled && ir_sensor_detected && ( ! fsensor_m600_enqueued) )
- {
+ if (CHECK_FSENSOR && fsensor_enabled && ir_sensor_detected)
+ {
if(digitalRead(IR_SENSOR_PIN))
{ // IR_SENSOR_PIN ~ H
#if IR_SENSOR_ANALOG
@@ -670,8 +664,8 @@ void fsensor_update(void)
else
{
#endif //IR_SENSOR_ANALOG
- fsensor_stop_and_save_print();
- fsensor_enque_M600();
+ fsensor_checkpoint_print();
+ fsensor_enque_M600();
#if IR_SENSOR_ANALOG
}
}
diff --git a/Firmware/fsensor.h b/Firmware/fsensor.h
index 48ad5fba0..aa4963afa 100755
--- a/Firmware/fsensor.h
+++ b/Firmware/fsensor.h
@@ -21,6 +21,8 @@ extern bool fsensor_oq_meassure_enabled;
extern void fsensor_stop_and_save_print(void);
//! restore print - restore position and heatup to original temperature
extern void fsensor_restore_print_and_continue(void);
+//! split the current gcode stream to insert new instructions
+extern void fsensor_checkpoint_print(void);
//! @}
//! initialize
diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp
index c9ca9cb65..f1515d988 100755
--- a/Firmware/mmu.cpp
+++ b/Firmware/mmu.cpp
@@ -382,8 +382,7 @@ void mmu_loop(void)
FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda);
//printf_P(PSTR("Eact: %d\n"), int(e_active()));
if (!mmu_finda && CHECK_FSENSOR && fsensor_enabled) {
- fsensor_stop_and_save_print();
- enquecommand_front_P(PSTR("PRUSA fsensor_recover")); //then recover
+ fsensor_checkpoint_print();
ad_markDepleted(mmu_extruder);
if (lcd_autoDepleteEnabled() && !ad_allDepleted())
{
diff --git a/Firmware/planner.cpp b/Firmware/planner.cpp
index 752d07258..0ccf54f83 100644
--- a/Firmware/planner.cpp
+++ b/Firmware/planner.cpp
@@ -659,15 +659,15 @@ float junction_deviation = 0.1;
// Add a new linear movement to the buffer. steps_x, _y and _z is the absolute position in
// mm. Microseconds specify how many microseconds the move should take to perform. To aid acceleration
// calculation the caller must also provide the physical length of the line in millimeters.
-void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder)
+void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder, const float* gcode_target)
{
// Calculate the buffer head after we push this byte
int next_buffer_head = next_block_index(block_buffer_head);
// If the buffer is full: good! That means we are well ahead of the robot.
// Rest here until there is room in the buffer.
+ waiting_inside_plan_buffer_line_print_aborted = false;
if (block_buffer_tail == next_buffer_head) {
- waiting_inside_plan_buffer_line_print_aborted = false;
do {
manage_heater();
// Vojtech: Don't disable motors inside the planner!
@@ -687,6 +687,29 @@ void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate
planner_update_queue_min_counter();
#endif /* PLANNER_DIAGNOSTICS */
+ // Prepare to set up new block
+ block_t *block = &block_buffer[block_buffer_head];
+
+ // Mark block as not busy (Not executed by the stepper interrupt, could be still tinkered with.)
+ block->busy = false;
+
+ // Set sdlen for calculating sd position
+ block->sdlen = 0;
+
+ // Save original destination of the move
+ if (gcode_target)
+ memcpy(block->gcode_target, gcode_target, sizeof(block_t::gcode_target));
+ else
+ {
+ block->gcode_target[X_AXIS] = x;
+ block->gcode_target[Y_AXIS] = y;
+ block->gcode_target[Z_AXIS] = z;
+ block->gcode_target[E_AXIS] = e;
+ }
+
+ // Save the global feedrate at scheduling time
+ block->gcode_feedrate = feedrate;
+
#ifdef ENABLE_AUTO_BED_LEVELING
apply_rotation_xyz(plan_bed_level_matrix, x, y, z);
#endif // ENABLE_AUTO_BED_LEVELING
@@ -786,15 +809,6 @@ void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate
}
#endif
- // Prepare to set up new block
- block_t *block = &block_buffer[block_buffer_head];
-
- // Set sdlen for calculating sd position
- block->sdlen = 0;
-
- // Mark block as not busy (Not executed by the stepper interrupt, could be still tinkered with.)
- block->busy = false;
-
// Number of steps for each axis
#ifndef COREXY
// default non-h-bot planning
diff --git a/Firmware/planner.h b/Firmware/planner.h
index 7904c45a5..0d0cb41ab 100644
--- a/Firmware/planner.h
+++ b/Firmware/planner.h
@@ -116,7 +116,10 @@ typedef struct {
unsigned long abs_adv_steps_multiplier8; // Factorised by 2^8 to avoid float
#endif
- uint16_t sdlen;
+ // Save/recovery state data
+ float gcode_target[NUM_AXIS]; // Target (abs mm) of the original Gcode instruction
+ uint16_t gcode_feedrate; // Default and/or move feedrate
+ uint16_t sdlen; // Length of the Gcode instruction
} block_t;
#ifdef LIN_ADVANCE
@@ -147,7 +150,7 @@ vector_3 plan_get_position();
/// The performance penalty is negligible, since these planned lines are usually maintenance moves with the extruder.
void plan_buffer_line_curposXYZE(float feed_rate, uint8_t extruder);
-void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder);
+void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder, const float* gcode_target = NULL);
//void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder);
#endif // ENABLE_AUTO_BED_LEVELING
@@ -238,6 +241,7 @@ FORCE_INLINE bool planner_queue_full() {
// wait for the steppers to stop,
// update planner's current position and the current_position of the front end.
extern void planner_abort_hard();
+extern bool waiting_inside_plan_buffer_line_print_aborted;
#ifdef PREVENT_DANGEROUS_EXTRUDE
void set_extrude_min_temp(float temp);
diff --git a/Firmware/tmc2130.cpp b/Firmware/tmc2130.cpp
index 6a79f51ac..dca50ac77 100755
--- a/Firmware/tmc2130.cpp
+++ b/Firmware/tmc2130.cpp
@@ -24,7 +24,7 @@ uint8_t tmc2130_current_h[4] = TMC2130_CURRENTS_H;
uint8_t tmc2130_current_r[4] = TMC2130_CURRENTS_R;
//running currents for homing
-uint8_t tmc2130_current_r_home[4] = {8, 10, 20, 18};
+uint8_t tmc2130_current_r_home[4] = TMC2130_CURRENTS_R_HOME;
//pwm_ampl
@@ -40,7 +40,7 @@ uint8_t tmc2130_mres[4] = {0, 0, 0, 0}; //will be filed at begin of init
uint8_t tmc2130_sg_thr[4] = {TMC2130_SG_THRS_X, TMC2130_SG_THRS_Y, TMC2130_SG_THRS_Z, TMC2130_SG_THRS_E};
-uint8_t tmc2130_sg_thr_home[4] = {3, 3, TMC2130_SG_THRS_Z, TMC2130_SG_THRS_E};
+uint8_t tmc2130_sg_thr_home[4] = TMC2130_SG_THRS_HOME;
uint8_t tmc2130_sg_homing_axes_mask = 0x00;
diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp
index 465fde2b4..cbfe017fd 100755
--- a/Firmware/ultralcd.cpp
+++ b/Firmware/ultralcd.cpp
@@ -4108,7 +4108,7 @@ void prusa_statistics(int _message, uint8_t _fil_nr) {
{
prusa_statistics_case0(15);
}
- else if (isPrintPaused || card.paused)
+ else if (isPrintPaused)
{
prusa_statistics_case0(14);
}
diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h
index 54f0c4699..685d77c6b 100644
--- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h
+++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h
@@ -260,11 +260,13 @@
#define TMC2130_SG_THRS_Y 3 // stallguard sensitivity for Y axis
#define TMC2130_SG_THRS_Z 4 // stallguard sensitivity for Z axis
#define TMC2130_SG_THRS_E 3 // stallguard sensitivity for E axis
+#define TMC2130_SG_THRS_HOME {3, 3, TMC2130_SG_THRS_Z, TMC2130_SG_THRS_E}
//new settings is possible for vsense = 1, running current value > 31 set vsense to zero and shift both currents by 1 bit right (Z axis only)
#define TMC2130_CURRENTS_H {16, 20, 35, 30} // default holding currents for all axes
#define TMC2130_CURRENTS_R {16, 20, 35, 30} // default running currents for all axes
-#define TMC2130_UNLOAD_CURRENT_R 12 // lowe current for M600 to protect filament sensor
+#define TMC2130_CURRENTS_R_HOME {8, 10, 20, 18} // homing running currents for all axes
+// #define TMC2130_UNLOAD_CURRENT_R 12 // lower current for M600 to protect filament sensor - Unused
#define TMC2130_STEALTH_Z
diff --git a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h
index 62dae6aca..5ee149e75 100644
--- a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h
+++ b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h
@@ -262,11 +262,13 @@
#define TMC2130_SG_THRS_Y 3 // stallguard sensitivity for Y axis
#define TMC2130_SG_THRS_Z 4 // stallguard sensitivity for Z axis
#define TMC2130_SG_THRS_E 3 // stallguard sensitivity for E axis
+#define TMC2130_SG_THRS_HOME {3, 3, TMC2130_SG_THRS_Z, TMC2130_SG_THRS_E}
//new settings is possible for vsense = 1, running current value > 31 set vsense to zero and shift both currents by 1 bit right (Z axis only)
#define TMC2130_CURRENTS_H {16, 20, 35, 30} // default holding currents for all axes
#define TMC2130_CURRENTS_R {16, 20, 35, 30} // default running currents for all axes
-#define TMC2130_UNLOAD_CURRENT_R 12 // lowe current for M600 to protect filament sensor
+#define TMC2130_CURRENTS_R_HOME {8, 10, 20, 18} // homing running currents for all axes
+// #define TMC2130_UNLOAD_CURRENT_R 12 // lower current for M600 to protect filament sensor - Unused
#define TMC2130_STEALTH_Z
diff --git a/PF-build.sh b/PF-build.sh
index fb3b51a10..7f538ea09 100755
--- a/PF-build.sh
+++ b/PF-build.sh
@@ -56,7 +56,7 @@
# Some may argue that this is only used by a script, BUT as soon someone accidentally or on purpose starts Arduino IDE
# it will use the default Arduino IDE folders and so can corrupt the build environment.
#
-# Version: 1.0.6-Build_9
+# Version: 1.0.6-Build_10
# Change log:
# 12 Jan 2019, 3d-gussner, Fixed "compiler.c.elf.flags=-w -Os -Wl,-u,vfprintf -lprintf_flt -lm -Wl,--gc-sections" in 'platform.txt'
# 16 Jan 2019, 3d-gussner, Build_2, Added development check to modify 'Configuration.h' to prevent unwanted LCD messages that Firmware is unknown
@@ -112,7 +112,9 @@
# Changed Hex-files folder to PF-build-hex as requested in PR
# 23 Jul 2019, 3d-gussner, Added Finding OS version routine so supporting new OS should get easier
# 26 Jul 2019, 3d-gussner, Change JSON repository to prusa3d after PR https://github.com/prusa3d/Arduino_Boards/pull/1 was merged
-
+# 23 Sep 2019, 3d-gussner, Prepare PF-build.sh for comming Prusa3d/Arduino_Boards version 1.0.2 Pull Request
+# 17 Oct 2019, 3d-gussner, Changed folder and check file names to have seperated build enviroments depening on Arduino IDE version and
+# board-versions.
#### Start check if OSTYPE is supported
OS_FOUND=$( command -v uname)
@@ -211,7 +213,8 @@ fi
#### Set build environment
ARDUINO_ENV="1.8.5"
BUILD_ENV="1.0.6"
-BOARD="PrusaResearchRambo"
+BOARD="rambo"
+BOARD_PACKAGE_NAME="PrusaResearchRambo"
BOARD_VERSION="1.0.1"
BOARD_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/package_prusa3d_index.json"
BOARD_FILENAME="prusa3drambo"
@@ -229,6 +232,7 @@ echo ""
echo "Ardunio IDE :" $ARDUINO_ENV
echo "Build env :" $BUILD_ENV
echo "Board :" $BOARD
+echo "Package name:" $BOARD_PACKAGE_NAME
echo "Specific Lib:" $LIB
echo ""
@@ -259,12 +263,12 @@ if [ $TARGET_OS == "windows" ]; then
wget https://downloads.arduino.cc/arduino-$ARDUINO_ENV-windows.zip || exit 7
echo "$(tput sgr 0)"
fi
- if [ ! -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor" ]; then
+ if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" && ! -e "../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
echo "$(tput setaf 6)Unzipping Windows 32/64-bit Arduino IDE portable...$(tput setaf 2)"
sleep 2
unzip arduino-$ARDUINO_ENV-windows.zip -d ../PF-build-env-$BUILD_ENV || exit 7
- mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor
- echo "# arduino-$ARDUINO_ENV-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$TARGET_OS-$Processor
+ mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor
+ echo "# arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
echo "$(tput sgr0)"
fi
fi
@@ -277,55 +281,55 @@ if [ $TARGET_OS == "linux" ]; then
wget --no-check-certificate https://downloads.arduino.cc/arduino-$ARDUINO_ENV-linux$Processor.tar.xz || exit 8
echo "$(tput sgr 0)"
fi
- if [[ ! -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor" && ! -e "../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$TARGET_OS-$Processor.txt" ]]; then
+ if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" && ! -e "../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
echo "$(tput setaf 6)Unzipping Linux $Processor Arduino IDE portable...$(tput setaf 2)"
sleep 2
tar -xvf arduino-$ARDUINO_ENV-linux$Processor.tar.xz -C ../PF-build-env-$BUILD_ENV/ || exit 8
- mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor
- echo "# arduino-$ARDUINO_ENV-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$TARGET_OS-$Processor.txt
+ mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor
+ echo "# arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
echo "$(tput sgr0)"
fi
fi
# Make Arduino IDE portable
-if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/ ]; then
- mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/
+if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/ ]; then
+ mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/
fi
-if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/ ]; then
- mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable
+if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/ ]; then
+ mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable
fi
-if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/output/ ]; then
- mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/output
+if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/output/ ]; then
+ mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/output
fi
-if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/ ]; then
- mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages
+if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/ ]; then
+ mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages
fi
-if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/sketchbook/ ]; then
- mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/sketchbook
+if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/sketchbook/ ]; then
+ mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/sketchbook
fi
-if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/sketchbook/libraries/ ]; then
- mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/sketchbook/libraries
+if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/sketchbook/libraries/ ]; then
+ mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/sketchbook/libraries
fi
-if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/staging/ ]; then
- mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/staging
+if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/staging/ ]; then
+ mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/staging
fi
# Change Arduino IDE preferences
-if [ ! -e ../PF-build-env-$BUILD_ENV/Preferences-$TARGET_OS-$Processor.txt ]; then
- echo "$(tput setaf 6)Setting $TARGET_OS-$Processor Arduino IDE preferences for portable GUI usage...$(tput setaf 2)"
+if [ ! -e ../PF-build-env-$BUILD_ENV/Preferences-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt ]; then
+ echo "$(tput setaf 6)Setting $ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor Arduino IDE preferences for portable GUI usage...$(tput setaf 2)"
sleep 2
echo "update.check"
- sed -i 's/update.check = true/update.check = false/g' ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
+ sed -i 's/update.check = true/update.check = false/g' ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
echo "board"
- sed -i 's/board = uno/board = rambo/g' ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
+ sed -i 's/board = uno/board = $BOARD/g' ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
echo "editor.linenumbers"
- sed -i 's/editor.linenumbers = false/editor.linenumbers = true/g' ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
+ sed -i 's/editor.linenumbers = false/editor.linenumbers = true/g' ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
echo "boardsmanager.additional.urls"
- echo "boardsmanager.additional.urls=$BOARD_URL" >>../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
- echo "build.verbose=true" >>../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
- echo "compiler.cache_core=false" >>../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
- echo "compiler.warning_level=all" >>../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
- echo "# Preferences-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/Preferences-$TARGET_OS-$Processor.txt
+ echo "boardsmanager.additional.urls=$BOARD_URL" >>../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
+ echo "build.verbose=true" >>../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
+ echo "compiler.cache_core=false" >>../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
+ echo "compiler.warning_level=all" >>../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
+ echo "# Preferences-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/Preferences-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
echo "$(tput sgr0)"
fi
@@ -336,25 +340,26 @@ if [ ! -f "$BOARD_FILENAME-$BOARD_VERSION.tar.bz2" ]; then
sleep 2
wget $BOARD_FILE_URL || exit 9
fi
-if [[ ! -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware/avr/$BOARD_VERSION" || ! -e "../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
- echo "$(tput setaf 6)Unzipping $BOARD Arduino IDE portable...$(tput setaf 2)"
+if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr/$BOARD_VERSION" || ! -e "../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
+ echo "$(tput setaf 6)Unzipping $BOARD_PACKAGE_NAME Arduino IDE portable...$(tput setaf 2)"
sleep 2
tar -xvf $BOARD_FILENAME-$BOARD_VERSION.tar.bz2 -C ../PF-build-env-$BUILD_ENV/ || exit 10
- if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD ]; then
- mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD
+ if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME ]; then
+ mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME
fi
- if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD ]; then
- mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD
+ if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME ]; then
+ mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME
fi
- if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware ]; then
- mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware
+ if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware ]; then
+ mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware
fi
- if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware/avr ]; then
- mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware/avr
+ if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr ]; then
+ mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr
fi
- mv ../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$BOARD_VERSION ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware/avr/$BOARD_VERSION
- echo "# $BOARD_FILENAME-$BOARD_VERSION" >> ../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$BOARD_VERSION-$TARGET_OS-$Processor.txt
+ mv ../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$BOARD_VERSION ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr/$BOARD_VERSION
+ echo "# $BOARD_FILENAME-$BOARD_VERSION" >> ../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
+
echo "$(tput sgr 0)"
fi
@@ -365,30 +370,30 @@ if [ ! -f "PF-build-env-$BUILD_ENV.zip" ]; then
wget $PF_BUILD_FILE_URL || exit 11
echo "$(tput sgr 0)"
fi
-if [ ! -e "../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$TARGET_OS-$Processor.txt" ]; then
+if [ ! -e "../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]; then
echo "$(tput setaf 6)Unzipping Prusa Firmware build environment...$(tput setaf 2)"
sleep 2
- unzip -o PF-build-env-$BUILD_ENV.zip -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor || exit 12
- echo "# PF-build-env-$TARGET_OS-$Processor-$BUILD_ENV" >> ../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$TARGET_OS-$Processor.txt
+ unzip -o PF-build-env-$BUILD_ENV.zip -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor || exit 12
+ echo "# PF-build-env-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor-$BUILD_ENV" >> ../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
echo "$(tput sgr0)"
fi
# Check if User updated Arduino IDE 1.8.5 boardsmanager and tools
-if [ -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/arduino/tools" ]; then
+if [ -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/arduino/tools" ]; then
echo "$(tput setaf 6)Arduino IDE boards / tools have been manually updated...$"
echo "Please don't update the 'Arduino AVR boards' as this will prevent running this script (tput setaf 2)"
sleep 2
fi
-if [ -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2" ]; then
+if [ -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2" ]; then
echo "$(tput setaf 6)PrusaReasearch compatible tools have been manually updated...$(tput setaf 2)"
sleep 2
echo "$(tput setaf 6)Copying Prusa Firmware build environment to manually updated boards / tools...$(tput setaf 2)"
sleep 2
- cp -f ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/hardware/tools/avr/avr/lib/ldscripts/avr6.xn ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2/avr/lib/ldscripts/avr6.xn
- echo "# PF-build-env-portable-$TARGET_OS-$Processor-$BUILD_ENV" >> ../PF-build-env-$BUILD_ENV/PF-build-env-portable-$BUILD_ENV-$TARGET_OS-$Processor.txt
+ cp -f ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/hardware/tools/avr/avr/lib/ldscripts/avr6.xn ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2/avr/lib/ldscripts/avr6.xn
+ echo "# PF-build-env-portable-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor-$BUILD_ENV" >> ../PF-build-env-$BUILD_ENV/PF-build-env-portable-$BUILD_ENV-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
echo "$(tput sgr0)"
fi
-if [ -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2" ]; then
+if [ -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2" ]; then
echo "$(tput setaf 1)Arduino IDE tools have been updated manually to a non supported version!!!"
echo "Delete ../PF-build-env-$BUILD_ENV and start the script again"
echo "Script will not continue until this have been fixed $(tput setaf 2)"
@@ -489,7 +494,7 @@ if [ ! -z "$3" ] ; then
fi
#Set BUILD_ENV_PATH
-cd ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor || exit 24
+cd ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor || exit 24
BUILD_ENV_PATH="$( pwd -P )"
cd ../..
@@ -634,8 +639,8 @@ do
echo "Start to build Prusa Firmware ..."
echo "Using variant $VARIANT$(tput setaf 3)"
sleep 2
- #$BUILD_ENV_PATH/arduino-builder -dump-prefs -debug-level 10 -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 14
- $BUILD_ENV_PATH/arduino-builder -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 14
+ #$BUILD_ENV_PATH/arduino-builder -dump-prefs -debug-level 10 -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD_PACKAGE_NAME:avr:$BOARD -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 14
+ $BUILD_ENV_PATH/arduino-builder -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD_PACKAGE_NAME:avr:$BOARD -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 14
echo "$(tput sgr 0)"
if [ $LANGUAGES == "ALL" ]; then
diff --git a/Tests/PrusaStatistics_test.cpp b/Tests/PrusaStatistics_test.cpp
index 3c15899ab..261a4dc6d 100644
--- a/Tests/PrusaStatistics_test.cpp
+++ b/Tests/PrusaStatistics_test.cpp
@@ -198,7 +198,7 @@ void prusa_statistics(int _message, uint8_t _fil_nr) {
SERIAL_ECHOLN("}");
status_number = 15;
}
- else if (isPrintPaused || card.paused)
+ else if (isPrintPaused)
{
SERIAL_ECHO("{");
prusa_stat_printerstatus(14);
@@ -490,7 +490,7 @@ void prusa_statistics(int _message, uint8_t _fil_nr) {
{
prusa_statistics_case0(15);
}
- else if (isPrintPaused || card.paused)
+ else if (isPrintPaused)
{
prusa_statistics_case0(14);
}
@@ -753,7 +753,6 @@ TEST_CASE("Prusa_statistics test", "[prusa_stats]")
SERIALS_RESET();
isPrintPaused = 0;
- card.paused = 0;
IS_SD_PRINTING = 1;
old_code::prusa_statistics(test_codes[i],0);
new_code::prusa_statistics(test_codes[i],0);