From bbfc553e293396428faa2ae3e929f979c77294f8 Mon Sep 17 00:00:00 2001 From: Stephen Crane Date: Sat, 10 Nov 2018 13:35:41 +0000 Subject: [PATCH] esp8266 disk storage --- checkpoint.cpp | 14 ++++++++++---- sdtape.cpp | 31 ++++++++++++++++++++++++++----- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/checkpoint.cpp b/checkpoint.cpp index ca04022..9cf4689 100644 --- a/checkpoint.cpp +++ b/checkpoint.cpp @@ -9,6 +9,8 @@ #include #elif defined(USE_SPIFFS) #include +#elif defined(ESP8266) +#include #endif static char buf[32]; @@ -19,11 +21,13 @@ const char *checkpoint(sdtape &tape, const char *dir) { tape.stop(); snprintf(buf, sizeof(buf), "%s%s.%03d", dir, chkpt, cpid++); -#if defined(USE_SD) || defined(USE_SPIFFS) +#if defined(USE_SD) || defined(USE_SPIFFS) || defined(ESP8266) #if defined(USE_SD) File file = SD.open(buf, O_WRITE | O_CREAT | O_TRUNC); -#else +#elif defined(USE_SPIFFS) File file = SPIFFS.open(buf, FILE_WRITE); +#else + File file = SPIFFS.open(buf, "w"); #endif hardware_checkpoint(file); file.close(); @@ -36,11 +40,13 @@ void restore(sdtape &tape, const char *dir, const char *filename) { tape.stop(); snprintf(buf, sizeof(buf), "%s%s", dir, filename); -#if defined(USE_SD) || defined(USE_SPIFFS) +#if defined(USE_SD) || defined(USE_SPIFFS) || defined(ESP8266) #if defined(USE_SD) File file = SD.open(buf, O_READ); -#else +#elif defined(USE_SPIFFS) File file = SPIFFS.open(buf, FILE_READ); +#else + File file = SPIFFS.open(buf, "r"); #endif hardware_restore(file); file.close(); diff --git a/sdtape.cpp b/sdtape.cpp index 4fd9ea5..f129b59 100644 --- a/sdtape.cpp +++ b/sdtape.cpp @@ -7,17 +7,25 @@ #elif defined(USE_SPIFFS) #include #define DISK SPIFFS +#elif defined(ESP8266) +#include #endif #include "sdtape.h" #if defined(DISK) static File file, dir; +#elif defined(ESP8266) +static File file; +static Dir dir; #endif bool sdtape::start(const char *programs) { -#if defined(DISK) +#if defined(ESP8266) + SPIFFS.begin(); + dir = SPIFFS.openDir("/"); +#else if defined(DISK) dir = DISK.open(programs); if (!dir) return false; @@ -29,14 +37,14 @@ bool sdtape::start(const char *programs) void sdtape::stop() { -#if defined(DISK) +#if defined(DISK) || defined(ESP8266) file.close(); #endif } bool sdtape::more() { -#if defined(DISK) +#if defined(DISK) || defined(ESP8266) if (_pos >= _len) { _pos = 0; _len = file.read(_buf, sizeof(_buf)); @@ -49,9 +57,21 @@ bool sdtape::more() } const char *sdtape::advance() { -#if defined(DISK) +#if defined(DISK) || defined(ESP8266) bool rewound = false; file.close(); +#if defined(ESP8266) + static char buf[32]; + while (true) { + if (dir.next()) { + file = dir.openFile("r"); + break; + } + dir = SPIFFS.openDir("/"); + } + strncpy(buf, dir.fileName().c_str(), sizeof(buf)); + return buf; +#else while (true) { file = dir.openNextFile(); if (file) { @@ -66,13 +86,14 @@ const char *sdtape::advance() { return 0; } return file.name(); +#endif #else return 0; #endif } const char *sdtape::rewind() { -#if defined(DISK) +#if defined(DISK) && !defined(ESP8266) dir.rewindDirectory(); #endif return advance();