From f8843b25b04723c8799ea64f07f7c2d266e1a7f7 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Wed, 1 Apr 2020 22:09:49 +0300 Subject: [PATCH 1/7] :sparkles: Progress bar for check_file() --- Firmware/ultralcd.cpp | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index daf9f017..6b140910 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -8760,20 +8760,33 @@ static void lcd_selftest_screen_step(int _row, int _col, int _state, const char static bool check_file(const char* filename) { if (farm_mode) return true; - bool result = false; - uint32_t filesize; card.openFile((char*)filename, true); - filesize = card.getFileSize(); + bool result = false; + const uint32_t filesize = card.getFileSize(); + uint32_t startPos = 0; + const uint16_t bytesToCheck = min(END_FILE_SECTION, filesize); if (filesize > END_FILE_SECTION) { - card.setIndex(filesize - END_FILE_SECTION); - + startPos = filesize - END_FILE_SECTION; + card.setIndex(startPos); } - - while (!card.eof() && !result) { + + lcd_clear(); + lcd_puts_at_P(0, 1, _i("Checking file"));////c=20 r=1 + printf_P(PSTR("startPos=%lu\n"), startPos); + while (!card.eof() && !result) { + lcd_set_cursor(0, 2); + for (int column = 0; column < 20; column++) { + const int8_t percent = ((card.get_sdpos() - startPos) * 100) / bytesToCheck; + if (column < (percent / 5)) + { + lcd_set_cursor(column, 2); + lcd_print('\xFF'); //simple progress bar + } + } + card.sdprinting = true; get_command(); result = check_commands(); - } card.printingHasFinished(); strncpy_P(lcd_status_message, _T(WELCOME_MSG), LCD_WIDTH); From cd4e16ef9fc216d88dc3a3ad65709fc65baae724 Mon Sep 17 00:00:00 2001 From: "D.R.racer" Date: Fri, 6 Nov 2020 08:25:56 +0100 Subject: [PATCH 2/7] XYZ calibration tune PFW-1159 --- Firmware/xyzcal.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Firmware/xyzcal.cpp b/Firmware/xyzcal.cpp index 060bb13a..7085c409 100644 --- a/Firmware/xyzcal.cpp +++ b/Firmware/xyzcal.cpp @@ -494,7 +494,11 @@ int8_t xyzcal_find_point_center2(uint16_t delay_us) xyzcal_lineXYZ_to(_X, _Y, z0 + 400, 500, -1); xyzcal_lineXYZ_to(_X, _Y, z0 - 400, 500, 1); - z0 = _Z - 20; + if (has_temperature_compensation()) + z0 = _Z - 20; // normal PINDA + else + z0 = _Z + 10; // alternate PINDA + xyzcal_lineXYZ_to(_X, _Y, z0, 500, 0); // xyzcal_lineXYZ_to(x0, y0, z0 - 100, 500, 1); From 5184910ef9f108330e4868d30980b35c6951c380 Mon Sep 17 00:00:00 2001 From: "D.R.racer" Date: Mon, 9 Nov 2020 06:33:41 +0100 Subject: [PATCH 3/7] Try harder finding the calibration center with alternative PINDAs it looks like their properties vary a lot and searching for the calibration center requires trying different Z levels. --- Firmware/xyzcal.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/Firmware/xyzcal.cpp b/Firmware/xyzcal.cpp index 7085c409..22dfa181 100644 --- a/Firmware/xyzcal.cpp +++ b/Firmware/xyzcal.cpp @@ -478,7 +478,7 @@ int16_t xyzcal_find_pattern_12x12_in_32x32(uint8_t* pixels, uint16_t* pattern, u #define MAX_DIAMETR 600 #define XYZCAL_FIND_CENTER_DIAGONAL - +int8_t xyzcal_find_point_center2A(int16_t x0, int16_t y0, int16_t z0, uint16_t delay_us); int8_t xyzcal_find_point_center2(uint16_t delay_us) { printf_P(PSTR("xyzcal_find_point_center2\n")); @@ -494,11 +494,25 @@ int8_t xyzcal_find_point_center2(uint16_t delay_us) xyzcal_lineXYZ_to(_X, _Y, z0 + 400, 500, -1); xyzcal_lineXYZ_to(_X, _Y, z0 - 400, 500, 1); - if (has_temperature_compensation()) + if (has_temperature_compensation()){ z0 = _Z - 20; // normal PINDA - else - z0 = _Z + 10; // alternate PINDA + return xyzcal_find_point_center2A(x0, y0, z0, delay_us); + } else { + // try searching harder, each PINDA is different + for(z0 = _Z - 20; z0 < _Z + 60; z0 += 20 ){ // alternate PINDA + int8_t rv = xyzcal_find_point_center2A(x0, y0, z0, delay_us); + printf_P(PSTR(" z0=%d"), z0); + if( rv != 0 ){ + printf_P(PSTR("ok\n")); + return rv; + } else { + printf_P(PSTR("fail\n")); + } + } + } +} +int8_t xyzcal_find_point_center2A(int16_t x0, int16_t y0, int16_t z0, uint16_t delay_us){ xyzcal_lineXYZ_to(_X, _Y, z0, 500, 0); // xyzcal_lineXYZ_to(x0, y0, z0 - 100, 500, 1); From 4747c8c9f5660a525f86e0626983ed5e0a5abfa7 Mon Sep 17 00:00:00 2001 From: "D.R.racer" Date: Mon, 9 Nov 2020 12:29:19 +0100 Subject: [PATCH 4/7] Increase top Z-offset limit based on some test results --- Firmware/xyzcal.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/xyzcal.cpp b/Firmware/xyzcal.cpp index 22dfa181..767024db 100644 --- a/Firmware/xyzcal.cpp +++ b/Firmware/xyzcal.cpp @@ -499,7 +499,7 @@ int8_t xyzcal_find_point_center2(uint16_t delay_us) return xyzcal_find_point_center2A(x0, y0, z0, delay_us); } else { // try searching harder, each PINDA is different - for(z0 = _Z - 20; z0 < _Z + 60; z0 += 20 ){ // alternate PINDA + for(z0 = _Z - 20; z0 <= _Z + 140; z0 += 20 ){ // alternate PINDA int8_t rv = xyzcal_find_point_center2A(x0, y0, z0, delay_us); printf_P(PSTR(" z0=%d"), z0); if( rv != 0 ){ From 396ee0fde25898a3b949a3df117b20eb332dd9d7 Mon Sep 17 00:00:00 2001 From: "D.R.racer" Date: Tue, 10 Nov 2020 10:06:10 +0100 Subject: [PATCH 5/7] Version changed (3.9.2 build 3524) --- Firmware/Configuration.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index a9bf23e9..45874e31 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -16,8 +16,8 @@ extern uint16_t nPrinterType; extern PGM_P sPrinterName; // Firmware version -#define FW_VERSION "3.9.1" -#define FW_COMMIT_NR 3518 +#define FW_VERSION "3.9.2" +#define FW_COMMIT_NR 3524 // FW_VERSION_UNKNOWN means this is an unofficial build. // The firmware should only be checked into github with this symbol. #define FW_DEV_VERSION FW_VERSION_UNKNOWN From 43ace00a243cc221b8bfcdc4b61c2e5f16a784d4 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Thu, 12 Nov 2020 18:43:48 +0200 Subject: [PATCH 6/7] Fill the progress bar at the end and code optimizations --- Firmware/ultralcd.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 15d0d68c..0a2236f4 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -8786,6 +8786,7 @@ static bool check_file(const char* filename) { const uint32_t filesize = card.getFileSize(); uint32_t startPos = 0; const uint16_t bytesToCheck = min(END_FILE_SECTION, filesize); + uint8_t blocksPrinted = 0; if (filesize > END_FILE_SECTION) { startPos = filesize - END_FILE_SECTION; card.setIndex(startPos); @@ -8793,23 +8794,23 @@ static bool check_file(const char* filename) { lcd_clear(); lcd_puts_at_P(0, 1, _i("Checking file"));////c=20 r=1 + lcd_set_cursor(0, 2); printf_P(PSTR("startPos=%lu\n"), startPos); while (!card.eof() && !result) { - lcd_set_cursor(0, 2); - for (int column = 0; column < 20; column++) { - const int8_t percent = ((card.get_sdpos() - startPos) * 100) / bytesToCheck; - if (column < (percent / 5)) - { - lcd_set_cursor(column, 2); - lcd_print('\xFF'); //simple progress bar - } - } + for (; blocksPrinted < (((card.get_sdpos() - startPos) * LCD_WIDTH) / bytesToCheck); blocksPrinted++) + lcd_print('\xFF'); //simple progress bar card.sdprinting = true; get_command(); result = check_commands(); } + + for (; blocksPrinted < LCD_WIDTH; blocksPrinted++) + lcd_print('\xFF'); //simple progress bar + _delay(100); //for the user to see the end of the progress bar. + card.printingHasFinished(); + strncpy_P(lcd_status_message, _T(WELCOME_MSG), LCD_WIDTH); lcd_finishstatus(); return result; From 807eddafb046bf15e68019244cff927980775ab5 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Fri, 13 Nov 2020 12:12:18 +0200 Subject: [PATCH 7/7] Remove debugging code --- Firmware/ultralcd.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 0a2236f4..0a6e4791 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -8795,7 +8795,6 @@ static bool check_file(const char* filename) { lcd_clear(); lcd_puts_at_P(0, 1, _i("Checking file"));////c=20 r=1 lcd_set_cursor(0, 2); - printf_P(PSTR("startPos=%lu\n"), startPos); while (!card.eof() && !result) { for (; blocksPrinted < (((card.get_sdpos() - startPos) * LCD_WIDTH) / bytesToCheck); blocksPrinted++) lcd_print('\xFF'); //simple progress bar