|
|
|
|
|
|
|
|
/* Experimental File & Dir base classes. VERY experimental! |
|
|
|
|
|
|
|
|
|
|
|
These are intended to someday allow libraries using files, |
|
|
|
|
|
such as a JPEG decoder, to accept a File object from SD, |
|
|
|
|
|
Bridge, USB Host, ESP SPIFFS, and others. Perhaps only a |
|
|
|
|
|
distant dream at this point, but maybe someday.... |
|
|
|
|
|
|
|
|
/* Experimental File & FS base classes. |
|
|
*/ |
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef FS_H |
|
|
#ifndef FS_H |
|
|
#define FS_H |
|
|
#define FS_H |
|
|
#ifdef __cplusplus |
|
|
#ifdef __cplusplus |
|
|
|
|
|
|
|
|
#include "Stream.h" |
|
|
|
|
|
#include "WString.h" |
|
|
|
|
|
|
|
|
#include <Arduino.h> |
|
|
|
|
|
|
|
|
|
|
|
#define FILE_READ 0 |
|
|
|
|
|
#define FILE_WRITE 1 |
|
|
|
|
|
|
|
|
|
|
|
enum SeekMode { |
|
|
|
|
|
SeekSet = 0, |
|
|
|
|
|
SeekCur = 1, |
|
|
|
|
|
SeekEnd = 2 |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
class File; |
|
|
|
|
|
|
|
|
class File : public Stream { |
|
|
class File : public Stream { |
|
|
public: |
|
|
public: |
|
|
constexpr File() {} |
|
|
|
|
|
enum SeekMode { |
|
|
|
|
|
SeekSet = 0, |
|
|
|
|
|
SeekCur = 1, |
|
|
|
|
|
SeekEnd = 2 |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
constexpr File() : f(nullptr) { } |
|
|
|
|
|
constexpr File(const File &file) : f(file.f) { } |
|
|
|
|
|
virtual ~File(); |
|
|
virtual size_t read(void *buf, size_t nbyte); |
|
|
virtual size_t read(void *buf, size_t nbyte); |
|
|
virtual size_t write(const void *buf, size_t size); |
|
|
virtual size_t write(const void *buf, size_t size); |
|
|
virtual int available(); |
|
|
virtual int available(); |
|
|
|
|
|
|
|
|
virtual uint32_t size() const; |
|
|
virtual uint32_t size() const; |
|
|
virtual void close(); |
|
|
virtual void close(); |
|
|
virtual operator bool() const; |
|
|
virtual operator bool() const; |
|
|
//virtual const char* name() const; // why does ESP have this in File? |
|
|
|
|
|
|
|
|
virtual const char* name(); |
|
|
|
|
|
virtual bool isDirectory(); |
|
|
|
|
|
virtual File openNextFile(uint8_t mode=0); |
|
|
|
|
|
virtual void rewindDirectory(void); |
|
|
|
|
|
|
|
|
bool seek(uint32_t pos) { |
|
|
|
|
|
|
|
|
virtual bool seek(uint32_t pos) { |
|
|
return seek(pos, SeekSet); |
|
|
return seek(pos, SeekSet); |
|
|
} |
|
|
} |
|
|
size_t write(uint8_t b) { |
|
|
|
|
|
|
|
|
virtual size_t write(uint8_t b) { |
|
|
return write(&b, 1); |
|
|
return write(&b, 1); |
|
|
} |
|
|
} |
|
|
size_t write(const char *str) { |
|
|
|
|
|
|
|
|
virtual size_t write(const char *str) { |
|
|
return write(str, strlen(str)); |
|
|
return write(str, strlen(str)); |
|
|
} |
|
|
} |
|
|
size_t readBytes(char *buffer, size_t length) { |
|
|
|
|
|
|
|
|
virtual size_t readBytes(char *buffer, size_t length) { |
|
|
return read(buffer, length); |
|
|
return read(buffer, length); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// needed for compatiblity with Arduino's SD & Bridge libs |
|
|
|
|
|
virtual const char* name(); |
|
|
|
|
|
virtual bool isDirectory(); |
|
|
|
|
|
virtual File openNextFile(uint8_t mode=0); |
|
|
|
|
|
virtual void rewindDirectory(void); |
|
|
|
|
|
|
|
|
virtual void whoami(); // testing only |
|
|
|
|
|
//protected: |
|
|
|
|
|
File *f; // points to actual implementing class, or nullptr |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
class Dir { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FS |
|
|
|
|
|
{ |
|
|
public: |
|
|
public: |
|
|
constexpr Dir() {} |
|
|
|
|
|
virtual const char *name(); // from SD's File (and ESP's File) |
|
|
|
|
|
virtual uint32_t fileSize(); |
|
|
|
|
|
virtual bool isDirectory(); // from SD, not in ESP |
|
|
|
|
|
virtual File openFile(const char *mode); |
|
|
|
|
|
virtual bool next(); |
|
|
|
|
|
String fileName() { |
|
|
|
|
|
return String(name()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
FS() {} |
|
|
|
|
|
File open(const char *filename, uint8_t mode = FILE_READ); |
|
|
|
|
|
bool exists(const char *filepath); |
|
|
|
|
|
bool mkdir(const char *filepath); |
|
|
|
|
|
bool remove(const char *filepath); |
|
|
|
|
|
bool rmdir(const char *filepath); |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif // __cplusplus |
|
|
#endif // __cplusplus |
|
|
#endif // FS_H |
|
|
#endif // FS_H |