diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 63fea0e3f..0a6e47916 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -8781,22 +8781,35 @@ 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); + uint8_t blocksPrinted = 0; 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 + lcd_set_cursor(0, 2); + while (!card.eof() && !result) { + 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;