From a8e6020238c4c88a0d9a78e70ae22788af625bb9 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Mon, 16 Dec 2019 15:21:55 +0200 Subject: [PATCH 1/4] Fix VERBOSITY --- Firmware/Marlin_main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 4970091e..a08b3aa3 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -4840,7 +4840,7 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) #ifdef SUPPORT_VERBOSITY if (verbosity_level >= 1) { - clamped = world2machine_clamp(current_position[X_AXIS], current_position[Y_AXIS]); + bool clamped = world2machine_clamp(current_position[X_AXIS], current_position[Y_AXIS]); SERIAL_PROTOCOL(mesh_point); clamped ? SERIAL_PROTOCOLPGM(": xy clamped.\n") : SERIAL_PROTOCOLPGM(": no xy clamping\n"); } From 857f9d8d9e6f707b41888be0d221de5a80cae697 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Fri, 31 Jan 2020 14:47:44 +0100 Subject: [PATCH 2/4] Hard reset and readded change --- Firmware/language.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Firmware/language.h b/Firmware/language.h index 36c18dba..1e4137bf 100644 --- a/Firmware/language.h +++ b/Firmware/language.h @@ -6,7 +6,9 @@ #include "config.h" #include -//#include +#ifdef DEBUG_SEC_LANG + #include +#endif //DEBUG_SEC_LANG #define PROTOCOL_VERSION "1.0" From f1618bfbd687e40147d382fb5c0e83a2899d1f04 Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Thu, 6 Feb 2020 22:41:47 +0100 Subject: [PATCH 3/4] Initialize current_position correctly during startup Just after setting up the w2m matrix, call "clamp_to_software_endstops" on the current_position (initially [0,0,0]) to move it to the effective minimal position, which is usually [0,0,non-zero] due to MIN_Z and the negative probe offset. This is required to calculate correctly the first relative move: planning X+10 would unexpectedly calculate a Z shift otherwise. --- Firmware/Marlin_main.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 43e3081f..e33ad37c 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1310,10 +1310,17 @@ void setup() setup_photpin(); servo_init(); + // Reset the machine correction matrix. // It does not make sense to load the correction matrix until the machine is homed. world2machine_reset(); - + + // Initialize current_position accounting for software endstops to + // avoid unexpected initial shifts on the first move + clamp_to_software_endstops(current_position); + plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], + current_position[Z_AXIS], current_position[E_AXIS]); + #ifdef FILAMENT_SENSOR fsensor_init(); #endif //FILAMENT_SENSOR From f234ef2104cbf7808a8aa21bfa745165ce42e3d1 Mon Sep 17 00:00:00 2001 From: DRracer Date: Fri, 14 Feb 2020 09:09:15 +0100 Subject: [PATCH 4/4] Use combined creation/modification file time stamps for sorting --- Firmware/cardreader.cpp | 29 +++++++++++++++++++---------- Firmware/cardreader.h | 4 +++- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/Firmware/cardreader.cpp b/Firmware/cardreader.cpp index 545316d3..1c2cbf3c 100644 --- a/Firmware/cardreader.cpp +++ b/Firmware/cardreader.cpp @@ -136,8 +136,17 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m SERIAL_ECHOPGM("Access date: "); MYSERIAL.println(p.lastAccessDate); SERIAL_ECHOLNPGM("");*/ - modificationDate = p.lastWriteDate; - modificationTime = p.lastWriteTime; + crmodDate = p.lastWriteDate; + crmodTime = p.lastWriteTime; + // There are scenarios when simple modification time is not enough (on MS Windows) + // For example - extract an old g-code from an archive onto the SD card. + // In such case the creation time is current time (which is correct), but the modification time + // stays the same - i.e. old. + // Therefore let's pick the most recent timestamp from both creation and modification timestamps + if( crmodDate < p.creationDate || ( crmodDate == p.creationDate && crmodTime < p.creationTime ) ){ + crmodDate = p.creationDate; + crmodTime = p.creationTime; + } //writeDate = p.lastAccessDate; if (match != NULL) { if (strcasecmp(match, filename) == 0) return; @@ -773,8 +782,8 @@ void CardReader::presort() { // retaining only two filenames at a time. This is very // slow but is safest and uses minimal RAM. char name1[LONG_FILENAME_LENGTH + 1]; - uint16_t modification_time_bckp; - uint16_t modification_date_bckp; + uint16_t crmod_time_bckp; + uint16_t crmod_date_bckp; #endif position = 0; @@ -800,8 +809,8 @@ void CardReader::presort() { #else // Copy filenames into the static array strcpy(sortnames[i], LONGEST_FILENAME); - modification_time[i] = modificationTime; - modification_date[i] = modificationDate; + modification_time[i] = crmodTime; + modification_date[i] = crmodDate; #if SDSORT_CACHE_NAMES strcpy(sortshort[i], filename); #endif @@ -830,8 +839,8 @@ void CardReader::presort() { (modification_date[o1] < modification_date [o2])) #else #define _SORT_CMP_NODIR() (strcasecmp(name1, name2) > 0) //true if lowercase(name1) > lowercase(name2) - #define _SORT_CMP_TIME_NODIR() (((modification_date_bckp == modificationDate) && (modification_time_bckp > modificationTime)) || \ - (modification_date_bckp > modificationDate)) + #define _SORT_CMP_TIME_NODIR() (((crmod_date_bckp == crmodDate) && (crmod_time_bckp > crmodTime)) || \ + (crmod_date_bckp > crmodDate)) #endif @@ -882,8 +891,8 @@ void CardReader::presort() { counter++; getfilename_simple(positions[o1]); strcpy(name1, LONGEST_FILENAME); // save (or getfilename below will trounce it) - modification_date_bckp = modificationDate; - modification_time_bckp = modificationTime; + crmod_date_bckp = crmodDate; + crmod_time_bckp = crmodTime; #if HAS_FOLDER_SORTING bool dir1 = filenameIsDir; #endif diff --git a/Firmware/cardreader.h b/Firmware/cardreader.h index 9a7d0f69..12e83d96 100644 --- a/Firmware/cardreader.h +++ b/Firmware/cardreader.h @@ -75,7 +75,9 @@ public: bool sdprinting ; bool cardOK ; char filename[13]; - uint16_t modificationTime, modificationDate; + // There are scenarios when simple modification time is not enough (on MS Windows) + // Therefore these timestamps hold the most recent one of creation/modification date/times + uint16_t crmodTime, crmodDate; uint32_t cluster, position; char longFilename[LONG_FILENAME_LENGTH]; bool filenameIsDir;