Components/IFS/src/include/IFS/SPIFFS/FileSystem.h
Go to the documentation of this file.
1 
42 #pragma once
43 
44 #include "../FileSystem.h"
45 #include "FileMeta.h"
46 #include <spiffs.h>
47 extern "C" {
48 #include <spiffs_nucleus.h>
49 }
50 
51 /*
52  * Maxmimum number of open files
53  */
54 #define FFS_MAX_FILEDESC 8
55 
56 namespace IFS
57 {
58 namespace SPIFFS
59 {
60 /*
61  * Wraps SPIFFS
62  */
63 class FileSystem : public IFileSystem
64 {
65 public:
66  FileSystem(Storage::Partition partition) : partition(partition)
67  {
68  }
69 
70  ~FileSystem();
71 
72  int mount() override;
73  int getinfo(Info& info) override;
74  String getErrorString(int err) override;
75  int opendir(const char* path, DirHandle& dir) override;
76  int readdir(DirHandle dir, Stat& stat) override;
77  int rewinddir(DirHandle dir) override;
78  int closedir(DirHandle dir) override;
79  int mkdir(const char* path) override;
80  int stat(const char* path, Stat* stat) override;
81  int fstat(FileHandle file, Stat* stat) override;
82  int setacl(FileHandle file, const ACL& acl) override;
83  int setattr(const char* path, FileAttributes attr) override;
84  int settime(FileHandle file, time_t mtime) override;
85  int setcompression(FileHandle file, const Compression& compression) override;
86  FileHandle open(const char* path, OpenFlags flags) override;
87  FileHandle fopen(const Stat& stat, OpenFlags flags) override;
88  int close(FileHandle file) override;
89  int read(FileHandle file, void* data, size_t size) override;
90  int write(FileHandle file, const void* data, size_t size) override;
91  int lseek(FileHandle file, int offset, SeekOrigin origin) override;
92  int eof(FileHandle file) override;
93  int32_t tell(FileHandle file) override;
94  int ftruncate(FileHandle file, size_t new_size) override;
95  int flush(FileHandle file) override;
96  int rename(const char* oldpath, const char* newpath) override;
97  int remove(const char* path) override;
98  int fremove(FileHandle file) override;
99  int format() override;
100  int check() override;
101 
107  int getFilePath(FileID fileid, NameBuffer& buffer);
108 
109 private:
110  spiffs* handle()
111  {
112  return &fs;
113  }
114 
115  int tryMount(spiffs_config& cfg);
116 
117  SpiffsMetaBuffer* initMetaBuffer(FileHandle file);
118  SpiffsMetaBuffer* getMetaBuffer(FileHandle file);
119  int flushMeta(FileHandle file);
120 
121  void touch(FileHandle file)
122  {
123  settime(file, fsGetTimeUTC());
124  }
125 
126  static constexpr size_t CACHE_PAGES{8};
127  static constexpr size_t LOG_PAGE_SIZE{256};
128  static constexpr size_t MIN_BLOCKSIZE{256};
129  static constexpr size_t CACHE_PAGE_SIZE{sizeof(spiffs_cache_page) + LOG_PAGE_SIZE};
130  static constexpr size_t CACHE_SIZE{sizeof(spiffs_cache) + CACHE_PAGES * CACHE_PAGE_SIZE};
131 
132  Storage::Partition partition;
134  spiffs fs;
135  uint16_t workBuffer[LOG_PAGE_SIZE];
136  spiffs_fd fileDescriptors[FFS_MAX_FILEDESC];
137  uint8_t cache[CACHE_SIZE];
138 };
139 
140 } // namespace SPIFFS
141 } // namespace IFS
Basic information about filing system.
Definition: IFileSystem.h:123
struct FileDir * DirHandle
Definition: IFileSystem.h:65
Definition: spiffs.h:200
int read(FileHandle file, void *data, size_t size) override
read content from a file and advance cursor
int setcompression(FileHandle file, const Compression &compression) override
Set file compression information.
Installable File System base class.
Definition: IFileSystem.h:100
int readdir(DirHandle dir, Stat &stat) override
read a directory entry
int rename(const char *oldpath, const char *newpath) override
rename a file
String getErrorString(int err) override
get the text for a returned error code
The String class.
Definition: WString.h:136
int mkdir(const char *path) override
Create a directory.
Definition: spiffs.h:231
FileHandle fopen(const Stat &stat, OpenFlags flags) override
open a file from it&#39;s stat structure
int32_t tell(FileHandle file) override
get current file position
int getinfo(Info &info) override
get filing system information
SeekOrigin
Stream/file seek origins.
Definition: SeekOrigin.h:18
int write(FileHandle file, const void *data, size_t size) override
write content to a file at current position and advance cursor
int16_t FileHandle
File handle.
Definition: Stat.h:39
Definition: DirectoryTemplate.h:36
int opendir(const char *path, DirHandle &dir) override
open a directory for reading
int setacl(FileHandle file, const ACL &acl) override
Set access control information for file.
int mount() override
Mount file system, performing any required initialisation.
Definition: FileMeta.h:73
int fremove(FileHandle file) override
remove (delete) a file by handle
int fstat(FileHandle file, Stat *stat) override
get file information
int rewinddir(DirHandle dir) override
Reset directory read position to start.
int getFilePath(FileID fileid, NameBuffer &buffer)
get the full path of a file from its ID
int format() override
format the filing system
int close(FileHandle file) override
close an open file
int setattr(const char *path, FileAttributes attr) override
Set file attributes.
File Status structure.
Definition: Stat.h:51
int eof(FileHandle file) override
determine if current file position is at end of file
time_t fsGetTimeUTC()
Get current timestamp in UTC.
uint32_t FileID
File identifier.
Definition: Stat.h:46
FileHandle open(const char *path, OpenFlags flags) override
open a file by name/path
int check() override
Perform a file system consistency check.
int closedir(DirHandle dir) override
close a directory object
Represents a flash partition.
Definition: Partition.h:77
int lseek(FileHandle file, int offset, SeekOrigin origin) override
change file read/write position
FileSystem(Storage::Partition partition)
Definition: Components/IFS/src/include/IFS/SPIFFS/FileSystem.h:66
Definition: Access.h:34
#define FFS_MAX_FILEDESC
Definition: Components/IFS/src/include/IFS/SPIFFS/FileSystem.h:54
Definition: spiffs_nucleus.h:441
int settime(FileHandle file, time_t mtime) override
Set modificatino tiem for file.
int ftruncate(FileHandle file, size_t new_size) override
Truncate (reduce) the size of an open file.
Definition: Components/IFS/src/include/IFS/SPIFFS/FileSystem.h:63
defines a &#39;safe&#39; name buffer
Definition: NameBuffer.h:44
int stat(const char *path, Stat *stat) override
get file information
A compression descriptor.
Definition: Compression.h:38
int flush(FileHandle file) override
flush any buffered data to physical media