esp8266 disk storage

This commit is contained in:
Stephen Crane 2018-11-10 13:35:41 +00:00
parent 8836367767
commit bbfc553e29
2 changed files with 36 additions and 9 deletions

View File

@ -9,6 +9,8 @@
#include <SD.h>
#elif defined(USE_SPIFFS)
#include <SPIFFS.h>
#elif defined(ESP8266)
#include <FS.h>
#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();

View File

@ -7,17 +7,25 @@
#elif defined(USE_SPIFFS)
#include <SPIFFS.h>
#define DISK SPIFFS
#elif defined(ESP8266)
#include <FS.h>
#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();