diff --git a/esp3d/src/modules/display/advanced_ILI9341_320X240.h b/esp3d/src/modules/display/advanced_ILI9341_320X240.h index 9cc1d518..442fa297 100644 --- a/esp3d/src/modules/display/advanced_ILI9341_320X240.h +++ b/esp3d/src/modules/display/advanced_ILI9341_320X240.h @@ -20,8 +20,7 @@ //Screen size #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 -#define SCREEN_BG TFT_BLACK +#define SNAP_SIZE (SCREEN_WIDTH * SCREEN_HEIGHT * 4) -#define CALIBRATION_BG TFT_BLACK -#define CALIBRATION_FG TFT_GREEN +#define CALIBRATION_BG TFT_WHITE #define CALIBRATION_CORNER TFT_RED diff --git a/esp3d/src/modules/display/advanced_ILI9488_480X320.h b/esp3d/src/modules/display/advanced_ILI9488_480X320.h index 597b40a9..25d4d5c9 100644 --- a/esp3d/src/modules/display/advanced_ILI9488_480X320.h +++ b/esp3d/src/modules/display/advanced_ILI9488_480X320.h @@ -20,6 +20,7 @@ //Screen size #define SCREEN_WIDTH 480 #define SCREEN_HEIGHT 320 +#define SNAP_SIZE (SCREEN_WIDTH * SCREEN_HEIGHT * 4) #define CALIBRATION_BG TFT_WHITE #define CALIBRATION_CORNER TFT_RED diff --git a/esp3d/src/modules/display/advanceddisplay.cpp b/esp3d/src/modules/display/advanceddisplay.cpp index ffc03057..debaee2d 100644 --- a/esp3d/src/modules/display/advanceddisplay.cpp +++ b/esp3d/src/modules/display/advanceddisplay.cpp @@ -89,6 +89,9 @@ Display esp3d_display; static lv_disp_buf_t esp_lv_disp_buf; static lv_color_t lv_buf1[LV_HOR_RES_MAX * 10]; static lv_color_t lv_buf2[LV_HOR_RES_MAX * 10]; +#if defined(DISPLAY_SNAPSHOT_FEATURE) +static uint8_t error_snapshot = 0; +#endif //DISPLAY_SNAPSHOT_FEATURE Ticker esp_lv_tick; /* timer for interrupt handler */ #define LVGL_TICK_PERIOD 10 #define ESP_FLASH_LETTER_DRIVE 'F' @@ -111,7 +114,13 @@ void esp_lv_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *c #if defined(DISPLAY_SNAPSHOT_FEATURE) if(bSnapshot) { uint32_t data = lv_color_to32(*color_p); - fsSnapFile.write((const uint8_t *)(&data), sizeof(uint32_t)); + //to handle any write issue + if (fsSnapFile.write((const uint8_t *)(&data), sizeof(uint32_t)) != sizeof(uint32_t)){ + //if error we stop to dump + bSnapshot = false; + //raise error + error_snapshot = 1; + } } #endif //DISPLAY_SNAPSHOT_FEATURE color_p++; @@ -636,6 +645,11 @@ bool Display::snapshot(char * filename) { bool res = false; #if defined(DISPLAY_SNAPSHOT_FEATURE) + //sanity check to avoid to corrupt FS with capacity overload + error_snapshot = 0; + if (ESP_FileSystem::freeBytes() < SNAP_SIZE) { + return false; + } if(filename) { fsSnapFile = ESP_FileSystem::open(filename, ESP_FILE_WRITE); } else { @@ -650,7 +664,10 @@ bool Display::snapshot(char * filename) lv_refr_now(lv_disp_get_default()); /* Will call our disp_drv.disp_flush function */ bSnapshot = false; fsSnapFile.close(); - return true; + //if any snapshot error + if (error_snapshot == 0) { + res = true; + } #endif //DISPLAY_SNAPSHOT_FEATURE return res; }