From e18bfce597e17b719d40621832bfb1ba7268f008 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Mon, 17 Oct 2022 20:17:28 +0200 Subject: [PATCH 1/3] Farm mode: cache filenames in the presort function --- Firmware/cardreader.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Firmware/cardreader.cpp b/Firmware/cardreader.cpp index c311f221b..e97aabf1e 100644 --- a/Firmware/cardreader.cpp +++ b/Firmware/cardreader.cpp @@ -803,7 +803,7 @@ void CardReader::presort() { // Throw away old sort index flush_presort(); - if (farm_mode || IS_SD_INSERTED == false) return; //sorting is not used in farm mode + if (IS_SD_INSERTED == false) return; //sorting is not used in farm mode uint8_t sdSort = eeprom_read_byte((uint8_t*)EEPROM_SD_SORT); KEEPALIVE_STATE(IN_HANDLER); @@ -814,7 +814,7 @@ void CardReader::presort() { // Never sort more than the max allowed // If you use folders to organize, 20 may be enough if (fileCnt > SDSORT_LIMIT) { - if (sdSort != SD_SORT_NONE) { + if ((sdSort != SD_SORT_NONE) && !farm_mode) { lcd_show_fullscreen_message_and_wait_P(_i("Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."));////MSG_FILE_CNT c=20 r=6 } fileCnt = SDSORT_LIMIT; @@ -833,7 +833,7 @@ void CardReader::presort() { sort_entries[i] = position >> 5; } - if ((fileCnt > 1) && (sdSort != SD_SORT_NONE)) { + if ((fileCnt > 1) && (sdSort != SD_SORT_NONE) && !farm_mode) { #ifdef SORTING_SPEEDTEST LongTimer sortingSpeedtestTimer; From 798f215f88cecf5f8b41b2532cc20547ec4c85fb Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Tue, 18 Oct 2022 17:24:35 +0200 Subject: [PATCH 2/3] Refactor SD menu settings --- Firmware/ultralcd.cpp | 46 +++++++++++++------------------------------ 1 file changed, 14 insertions(+), 32 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 38a1e3301..53bf4fc79 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -4355,37 +4355,6 @@ while (0) #define SETTINGS_MMU_MODE #endif //MMU_FORCE_STEALTH_MODE -#ifdef SDCARD_SORT_ALPHA -#define SETTINGS_SD \ -do\ -{\ - if (card.ToshibaFlashAir_isEnabled())\ - MENU_ITEM_TOGGLE_P(_T(MSG_SD_CARD), MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY, lcd_toshiba_flash_air_compatibility_toggle);\ - else\ - MENU_ITEM_TOGGLE_P(_T(MSG_SD_CARD), _T(MSG_NORMAL), lcd_toshiba_flash_air_compatibility_toggle);\ -\ - uint8_t sdSort;\ - sdSort = eeprom_read_byte((uint8_t*) EEPROM_SD_SORT);\ - switch (sdSort)\ - {\ - case SD_SORT_TIME: MENU_ITEM_TOGGLE_P(_T(MSG_SORT), _T(MSG_SORT_TIME), lcd_sort_type_set); break;\ - case SD_SORT_ALPHA: MENU_ITEM_TOGGLE_P(_T(MSG_SORT), _T(MSG_SORT_ALPHA), lcd_sort_type_set); break;\ - default: MENU_ITEM_TOGGLE_P(_T(MSG_SORT), _T(MSG_NONE), lcd_sort_type_set);\ - }\ -}\ -while (0) -#else // SDCARD_SORT_ALPHA -#define SETTINGS_SD \ -do\ -{\ - if (card.ToshibaFlashAir_isEnabled())\ - MENU_ITEM_TOGGLE_P(_T(MSG_SD_CARD), MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY, lcd_toshiba_flash_air_compatibility_toggle);\ - else\ - MENU_ITEM_TOGGLE_P(_T(MSG_SD_CARD), _T(MSG_NORMAL), lcd_toshiba_flash_air_compatibility_toggle);\ -}\ -while (0) -#endif // SDCARD_SORT_ALPHA - /* #define SETTINGS_MBL_MODE \ do\ @@ -4782,7 +4751,20 @@ static void lcd_settings_menu() MENU_ITEM_SUBMENU_P(_T(MSG_SELECT_LANGUAGE), lcd_language_menu); #endif //(LANG_MODE != 0) - SETTINGS_SD; + if (!farm_mode) { //SD related settings are not available in farm mode + if (card.ToshibaFlashAir_isEnabled()) + MENU_ITEM_TOGGLE_P(_T(MSG_SD_CARD), MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY, lcd_toshiba_flash_air_compatibility_toggle); + else + MENU_ITEM_TOGGLE_P(_T(MSG_SD_CARD), _T(MSG_NORMAL), lcd_toshiba_flash_air_compatibility_toggle); +#ifdef SDCARD_SORT_ALPHA + switch (eeprom_read_byte((uint8_t*) EEPROM_SD_SORT)) { + case SD_SORT_TIME: MENU_ITEM_TOGGLE_P(_T(MSG_SORT), _T(MSG_SORT_TIME), lcd_sort_type_set); break; + case SD_SORT_ALPHA: MENU_ITEM_TOGGLE_P(_T(MSG_SORT), _T(MSG_SORT_ALPHA), lcd_sort_type_set); break; + default: MENU_ITEM_TOGGLE_P(_T(MSG_SORT), _T(MSG_NONE), lcd_sort_type_set); + } + } +#endif //SDCARD_SORT_ALPHA + SETTINGS_SOUND; #ifdef LCD_BL_PIN From b485992c9ed45bfe7ab176be7301d1904c24afca Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Tue, 18 Oct 2022 17:29:31 +0200 Subject: [PATCH 3/3] If in farm mode, force the sorting direction to be reversed So in an ideal scenario, the newest file is first. This of course breaks as soon as a file is deleted/renamed/moved, but it should at least be fixed now compared to before where the direction could be influenced by a disabled setting --- Firmware/ultralcd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 53bf4fc79..fb926fe89 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6001,7 +6001,7 @@ void lcd_sdcard_menu() lcd_update_enabled = true; } _md->fileCnt = card.getnrfilenames(); - _md->sdSort = eeprom_read_byte((uint8_t*)EEPROM_SD_SORT); + _md->sdSort = farm_mode ? SD_SORT_NONE : eeprom_read_byte((uint8_t*)EEPROM_SD_SORT); _md->menuState = _standard; _md->row = -1; // assume that no SD file/dir is currently selected. Once they are rendered, it will be changed to the correct row for the _scrolling state. }