From 5a77113fb50ce5679bd9e41d63651fce8b306b95 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 27 Nov 2017 01:59:47 +0100 Subject: [PATCH 1/4] init --- Firmware/Configuration.h | 4 ++++ Firmware/Marlin_main.cpp | 2 +- Firmware/SdBaseFile.cpp | 1 + Firmware/ultralcd.cpp | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index e6a4981b..130b5875 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -77,6 +77,10 @@ #define EEPROM_FERROR_COUNT (EEPROM_UVLO_MESH_BED_LEVELING-16) // Power loss errors #define EEPROM_POWER_COUNT (EEPROM_UVLO_MESH_BED_LEVELING-17) +#define UVLO_DIR_LEVEL (EEPROM_POWER_COUNT-1) +#define UVLO_FIRST_LEVEL_FOLDER (EEPROM_FOLDER_LEVEL-8) +#define UVLO_SECOND_LEVEL_FOLDER (EEPROM_FIRST_LEVEL-8) +#define UVLO_THIRD_LEVEL_FOLDER (EEPROM_SECOND_LEVEL-8) //TMC2130 configuration #define EEPROM_TMC_AXIS_SIZE //axis configuration block size diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 0c6c3ba5..74fb22e1 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1091,7 +1091,7 @@ void setup() if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) == 1) { lcd_wizard(0); } - else if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) == 0) { //dont show calibration status messages if wizard is currently active + if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) == 0) { //dont show calibration status messages if wizard is currently active if (calibration_status() == CALIBRATION_STATUS_ASSEMBLED || calibration_status() == CALIBRATION_STATUS_UNKNOWN) { // Reset the babystepping values, so the printer will not move the Z axis up when the babystepping is enabled. diff --git a/Firmware/SdBaseFile.cpp b/Firmware/SdBaseFile.cpp index be04ab1a..e29b216f 100644 --- a/Firmware/SdBaseFile.cpp +++ b/Firmware/SdBaseFile.cpp @@ -284,6 +284,7 @@ bool SdBaseFile::getFilename(char* name) { name[0] = '/'; name[1] = '\0'; return true; + dir_level = 0; } // cache entry dir_t* p = cacheDirEntry(SdVolume::CACHE_FOR_READ); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index d491381c..69b5f3dc 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6136,6 +6136,7 @@ static void menu_action_sdfile(const char* filename, char* longFilename) } static void menu_action_sddirectory(const char* filename, char* longFilename) { + MYSERIAL.println(filename); card.chdir(filename); encoderPosition = 0; } From 42b533b5d8cb6ccfa264dd351c29daa9365dedbe Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 27 Nov 2017 06:20:51 +0100 Subject: [PATCH 2/4] first working version --- Firmware/Configuration.h | 6 ++---- Firmware/Marlin.h | 2 ++ Firmware/Marlin_main.cpp | 17 +++++++++++++++++ Firmware/SdBaseFile.cpp | 1 - Firmware/cardreader.cpp | 11 ++++++++++- Firmware/cardreader.h | 2 ++ Firmware/ultralcd.cpp | 21 +++++++++++++++++++++ 7 files changed, 54 insertions(+), 6 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 130b5875..1722d65f 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -77,10 +77,8 @@ #define EEPROM_FERROR_COUNT (EEPROM_UVLO_MESH_BED_LEVELING-16) // Power loss errors #define EEPROM_POWER_COUNT (EEPROM_UVLO_MESH_BED_LEVELING-17) -#define UVLO_DIR_LEVEL (EEPROM_POWER_COUNT-1) -#define UVLO_FIRST_LEVEL_FOLDER (EEPROM_FOLDER_LEVEL-8) -#define UVLO_SECOND_LEVEL_FOLDER (EEPROM_FIRST_LEVEL-8) -#define UVLO_THIRD_LEVEL_FOLDER (EEPROM_SECOND_LEVEL-8) +#define EEPROM_DIR_DEPTH (EEPROM_POWER_COUNT-1) +#define EEPROM_DIRS (EEPROM_DIR_DEPTH-80) //8 chars for each dir name, max 10 levels //TMC2130 configuration #define EEPROM_TMC_AXIS_SIZE //axis configuration block size diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 93cab1e6..c23a3156 100644 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -350,6 +350,8 @@ extern bool mesh_bed_run_from_menu; extern float distance_from_min[2]; +extern char dir_names[3][9]; + extern void calculate_volumetric_multipliers(); // Similar to the default Arduino delay function, diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 74fb22e1..9e8014d9 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -320,6 +320,7 @@ bool fan_state[2]; int fan_edge_counter[2]; int fan_speed[2]; +char dir_names[3][9]; bool volumetric_enabled = false; float filament_size[EXTRUDERS] = { DEFAULT_NOMINAL_FILAMENT_DIA @@ -7272,11 +7273,27 @@ void restore_print_from_eeprom() { char cmd[30]; char* c; char filename[13]; + uint8_t depth = 0; + char dir_name[9]; fan_speed_rec = eeprom_read_byte((uint8_t*)EEPROM_UVLO_FAN_SPEED); EEPROM_read_B(EEPROM_UVLO_FEEDRATE, &feedrate_rec); SERIAL_ECHOPGM("Feedrate:"); MYSERIAL.println(feedrate_rec); + + depth = eeprom_read_byte((uint8_t*)EEPROM_DIR_DEPTH); + + MYSERIAL.println(int(depth)); + for (int i = 0; i < depth; i++) { + for (int j = 0; j < 8; j++) { + dir_name[j] = eeprom_read_byte((uint8_t*)EEPROM_DIRS + j + 8 * i); + + } + dir_name[8] = '\0'; + MYSERIAL.println(dir_name); + card.chdir(dir_name); + } + for (int i = 0; i < 8; i++) { filename[i] = eeprom_read_byte((uint8_t*)EEPROM_FILENAME + i); diff --git a/Firmware/SdBaseFile.cpp b/Firmware/SdBaseFile.cpp index e29b216f..be04ab1a 100644 --- a/Firmware/SdBaseFile.cpp +++ b/Firmware/SdBaseFile.cpp @@ -284,7 +284,6 @@ bool SdBaseFile::getFilename(char* name) { name[0] = '/'; name[1] = '\0'; return true; - dir_level = 0; } // cache entry dir_t* p = cacheDirEntry(SdVolume::CACHE_FOR_READ); diff --git a/Firmware/cardreader.cpp b/Firmware/cardreader.cpp index 28102aa1..5426eb0f 100644 --- a/Firmware/cardreader.cpp +++ b/Firmware/cardreader.cpp @@ -233,6 +233,15 @@ void CardReader::openLogFile(char* name) openFile(name, false); } +void CardReader::getDirName(char* name, uint8_t level) +{ + workDirParents[level].getFilename(name); +} + +uint16_t CardReader::getWorkDirDepth() { + return workDirDepth; +} + void CardReader::getAbsFilename(char *t) { uint8_t cnt=0; @@ -635,7 +644,7 @@ void CardReader::updir() { --workDirDepth; workDir = workDirParents[0]; - int d; + int d; for (int d = 0; d < workDirDepth; d++) workDirParents[d] = workDirParents[d+1]; } diff --git a/Firmware/cardreader.h b/Firmware/cardreader.h index ec7f3e7c..11768621 100644 --- a/Firmware/cardreader.h +++ b/Firmware/cardreader.h @@ -33,6 +33,8 @@ public: uint16_t getnrfilenames(); void getAbsFilename(char *t); + void getDirName(char* name, uint8_t level); + uint16_t getWorkDirDepth(); void ls(); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 69b5f3dc..a23f95e4 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6131,12 +6131,33 @@ static void menu_action_sdfile(const char* filename, char* longFilename) for (int i = 0; i < 8; i++) { eeprom_write_byte((uint8_t*)EEPROM_FILENAME + i, filename[i]); } + + uint8_t depth = (uint8_t)card.getWorkDirDepth(); + + char dir_name[9]; + + for (uint8_t i = 0; i < depth; i++) { +// card.getDirName(dir_name, i + 1); + MYSERIAL.println(dir_name); + for (int j = 0; j < 8; j++) { + eeprom_write_byte((uint8_t*)EEPROM_DIRS + j + 8*i, dir_names[i][j]); + } + + } + //MYSERIAL.println(int(depth)); + eeprom_write_byte((uint8_t*)EEPROM_DIR_DEPTH, depth); + enquecommand_P(PSTR("M24")); lcd_return_to_status(); } static void menu_action_sddirectory(const char* filename, char* longFilename) { MYSERIAL.println(filename); + + uint8_t depth = (uint8_t)card.getWorkDirDepth(); + + strcpy(dir_names[depth], filename); + MYSERIAL.println(dir_names[depth]); card.chdir(filename); encoderPosition = 0; } From bd59e116609c14975f2dbbee1dffdeb413c669db Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 27 Nov 2017 06:22:32 +0100 Subject: [PATCH 3/4] removed serial print --- Firmware/ultralcd.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index a23f95e4..d350b5b5 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6152,8 +6152,6 @@ static void menu_action_sdfile(const char* filename, char* longFilename) } static void menu_action_sddirectory(const char* filename, char* longFilename) { - MYSERIAL.println(filename); - uint8_t depth = (uint8_t)card.getWorkDirDepth(); strcpy(dir_names[depth], filename); From d9f44eb16b35ad6dfd48f0582f19ab22d7ff0ae8 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 27 Nov 2017 06:36:41 +0100 Subject: [PATCH 4/4] unused code commented --- Firmware/ultralcd.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index d350b5b5..993743bb 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6134,13 +6134,15 @@ static void menu_action_sdfile(const char* filename, char* longFilename) uint8_t depth = (uint8_t)card.getWorkDirDepth(); - char dir_name[9]; + //char dir_name[9]; for (uint8_t i = 0; i < depth; i++) { -// card.getDirName(dir_name, i + 1); - MYSERIAL.println(dir_name); + //card.getDirName(dir_name, i + 1); + //dir_name[8] = '\0'; + //MYSERIAL.println(dir_name); for (int j = 0; j < 8; j++) { eeprom_write_byte((uint8_t*)EEPROM_DIRS + j + 8*i, dir_names[i][j]); + //eeprom_write_byte((uint8_t*)EEPROM_DIRS + j + 8 * i, dir_name[j]); } }