Fix dual filesystem commands

This commit is contained in:
Theo Arends 2021-01-15 16:17:25 +01:00
parent 89a9c049d6
commit 43fd9ee1f2

View File

@ -72,25 +72,28 @@ ufsfree free size in kB
#include "FS.h" #include "FS.h"
#endif // ESP32 #endif // ESP32
// global file system pointer // Global file system pointer
FS *ufsp; FS *ufsp;
// flash file system pointer on esp32 // Flash file system pointer
FS *ffsp; FS *ffsp;
// local pointer for file managment // Local pointer for file managment
FS *dfsp; FS *dfsp;
char ufs_path[48]; char ufs_path[48];
File ufs_upload_file; File ufs_upload_file;
uint8_t ufs_dir; uint8_t ufs_dir;
// 0 = none, 1 = SD, 2 = ffat, 3 = littlefs // 0 = None, 1 = SD, 2 = ffat, 3 = littlefs
uint8_t ufs_type; uint8_t ufs_type;
uint8_t ffs_type; uint8_t ffs_type;
bool download_busy; bool download_busy;
/*********************************************************************************************/ /*********************************************************************************************/
// init flash file system // Init flash file system
void UfsInitOnce(void) { void UfsInitOnce(void) {
ufs_type = 0; ufs_type = 0;
ffsp = 0; ffsp = 0;
@ -130,21 +133,13 @@ void UfsInitOnce(void) {
void UfsInit(void) { void UfsInit(void) {
UfsInitOnce(); UfsInitOnce();
if (ufs_type) { if (ufs_type) {
AddLog_P(LOG_LEVEL_INFO, PSTR("UFS: Type %d mounted with %d kB free"), ufs_type, UfsInfo(1, 0)); AddLog_P(LOG_LEVEL_INFO, PSTR("UFS: FlashFS mounted with %d kB free"), UfsInfo(1, 0));
} }
} }
#ifdef USE_SDCARD #ifdef USE_SDCARD
void UfsCheckSDCardInit(void) { void UfsCheckSDCardInit(void) {
#ifdef ESP8266
if (PinUsed(GPIO_SPI_CLK) && PinUsed(GPIO_SPI_MOSI) && PinUsed(GPIO_SPI_MISO)) {
#endif // ESP8266
#ifdef ESP32
if (TasmotaGlobal.spi_enabled) { if (TasmotaGlobal.spi_enabled) {
#endif // ESP32
int8_t cs = SDCARD_CS_PIN; int8_t cs = SDCARD_CS_PIN;
if (PinUsed(GPIO_SDCARD_CS)) { if (PinUsed(GPIO_SDCARD_CS)) {
cs = Pin(GPIO_SDCARD_CS); cs = Pin(GPIO_SDCARD_CS);
@ -172,10 +167,10 @@ void UfsCheckSDCardInit(void) {
// make sd card the global filesystem // make sd card the global filesystem
#ifdef ESP8266 #ifdef ESP8266
// on esp8266 sdcard info takes several seconds !!!, so we ommit it here // on esp8266 sdcard info takes several seconds !!!, so we ommit it here
AddLog_P(LOG_LEVEL_INFO, PSTR("UFS: SDCARD mounted")); AddLog_P(LOG_LEVEL_INFO, PSTR("UFS: SDCard mounted"));
#endif // ESP8266 #endif // ESP8266
#ifdef ESP32 #ifdef ESP32
AddLog_P(LOG_LEVEL_INFO, PSTR("UFS: SDCARD mounted with %d kB free"), UfsInfo(1, 0)); AddLog_P(LOG_LEVEL_INFO, PSTR("UFS: SDCard mounted with %d kB free"), UfsInfo(1, 0));
#endif // ESP32 #endif // ESP32
} }
} }
@ -279,7 +274,7 @@ uint8_t UfsReject(char *name) {
\*********************************************************************************************/ \*********************************************************************************************/
bool TfsFileExists(const char *fname){ bool TfsFileExists(const char *fname){
if (!ufs_type) { return false; } if (!ffs_type) { return false; }
bool yes = ffsp->exists(fname); bool yes = ffsp->exists(fname);
if (!yes) { if (!yes) {
@ -289,7 +284,7 @@ bool TfsFileExists(const char *fname){
} }
bool TfsSaveFile(const char *fname, const uint8_t *buf, uint32_t len) { bool TfsSaveFile(const char *fname, const uint8_t *buf, uint32_t len) {
if (!ufs_type) { return false; } if (!ffs_type) { return false; }
File file = ffsp->open(fname, "w"); File file = ffsp->open(fname, "w");
if (!file) { if (!file) {
@ -303,7 +298,7 @@ bool TfsSaveFile(const char *fname, const uint8_t *buf, uint32_t len) {
} }
bool TfsInitFile(const char *fname, uint32_t len, uint8_t init_value) { bool TfsInitFile(const char *fname, uint32_t len, uint8_t init_value) {
if (!ufs_type) { return false; } if (!ffs_type) { return false; }
File file = ffsp->open(fname, "w"); File file = ffsp->open(fname, "w");
if (!file) { if (!file) {
@ -319,7 +314,7 @@ bool TfsInitFile(const char *fname, uint32_t len, uint8_t init_value) {
} }
bool TfsLoadFile(const char *fname, uint8_t *buf, uint32_t len) { bool TfsLoadFile(const char *fname, uint8_t *buf, uint32_t len) {
if (!ufs_type) { return false; } if (!ffs_type) { return false; }
if (!TfsFileExists(fname)) { return false; } if (!TfsFileExists(fname)) { return false; }
File file = ffsp->open(fname, "r"); File file = ffsp->open(fname, "r");
@ -334,7 +329,7 @@ bool TfsLoadFile(const char *fname, uint8_t *buf, uint32_t len) {
} }
bool TfsDeleteFile(const char *fname) { bool TfsDeleteFile(const char *fname) {
if (!ufs_type) { return false; } if (!ffs_type) { return false; }
if (!ffsp->remove(fname)) { if (!ffsp->remove(fname)) {
AddLog_P(LOG_LEVEL_INFO, PSTR("TFS: Delete failed")); AddLog_P(LOG_LEVEL_INFO, PSTR("TFS: Delete failed"));
@ -354,24 +349,48 @@ void (* const kUFSCommand[])(void) PROGMEM = {
&UFSInfo, &UFSType, &UFSSize, &UFSFree, &UFSDelete}; &UFSInfo, &UFSType, &UFSSize, &UFSFree, &UFSDelete};
void UFSInfo(void) { void UFSInfo(void) {
Response_P(PSTR("{\"Ufs\":{\"Type\":%d,\"Size\":%d,\"Free\":%d}}"), ufs_type, UfsInfo(0, 0), UfsInfo(1, 0)); Response_P(PSTR("{\"Ufs\":{\"Type\":%d,\"Size\":%d,\"Free\":%d}"), ufs_type, UfsInfo(0, 0), UfsInfo(1, 0));
if (ffs_type && (ffs_type != ufs_type)) {
ResponseAppend_P(PSTR(",{\"Type\":%d,\"Size\":%d,\"Free\":%d}"), ffs_type, UfsInfo(0, 1), UfsInfo(1, 1));
}
ResponseJsonEnd();
} }
void UFSType(void) { void UFSType(void) {
if (ffs_type && (ffs_type != ufs_type)) {
Response_P(PSTR("{\"%s\":[%d,%d]}"), XdrvMailbox.command, ufs_type, ffs_type);
} else {
ResponseCmndNumber(ufs_type); ResponseCmndNumber(ufs_type);
} }
}
void UFSSize(void) { void UFSSize(void) {
if (ffs_type && (ffs_type != ufs_type)) {
Response_P(PSTR("{\"%s\":[%d,%d]}"), XdrvMailbox.command, UfsInfo(0, 0), UfsInfo(0, 1));
} else {
ResponseCmndNumber(UfsInfo(0, 0)); ResponseCmndNumber(UfsInfo(0, 0));
} }
}
void UFSFree(void) { void UFSFree(void) {
if (ffs_type && (ffs_type != ufs_type)) {
Response_P(PSTR("{\"%s\":[%d,%d]}"), XdrvMailbox.command, UfsInfo(1, 0), UfsInfo(1, 1));
} else {
ResponseCmndNumber(UfsInfo(1, 0)); ResponseCmndNumber(UfsInfo(1, 0));
} }
}
void UFSDelete(void) { void UFSDelete(void) {
// UfsDelete sdcard or flashfs file if only one of them available
// UfsDelete2 flashfs file if available
if (XdrvMailbox.data_len > 0) { if (XdrvMailbox.data_len > 0) {
if (!TfsDeleteFile(XdrvMailbox.data)) { bool result = false;
if (ffs_type && (ffs_type != ufs_type) && (2 == XdrvMailbox.index)) {
result = TfsDeleteFile(XdrvMailbox.data);
} else {
result = (ufs_type && ufsp->remove(XdrvMailbox.data));
}
if (!result) {
ResponseCmndChar(D_JSON_FAILED); ResponseCmndChar(D_JSON_FAILED);
} else { } else {
ResponseCmndDone(); ResponseCmndDone();