files_littlefs.h
1 #pragma once 2 3 #include "files_file_system.h" 4 5 #include "lfs.h" 6 7 namespace files 8 { 9 using FlashFile = lfs_file_t; 10 using FlashFileInfo = lfs_info; 11 using FlashDirectory = lfs_dir; 12 13 class Littlefs : public FileSystem<FlashFile, FlashDirectory, FlashFileInfo> 14 { 15 public: 16 Littlefs() = default; 17 virtual ~Littlefs() = default; 18 Littlefs(const Littlefs&) = delete; 19 Littlefs& operator=(const Littlefs&) = delete; 20 21 // disk operation interface 22 virtual bool Mount() override; 23 virtual bool Unmount() override; 24 25 // file interface 26 virtual bool FileOpen(FlashFile& file, const char* filePath, uint16_t flags) override; 27 virtual bool FileRead(FlashFile& file, void* buffer, size_t amountToRead, size_t* amountRead) override; 28 virtual bool FileWrite(FlashFile& file, const void* buffer, size_t bufferLength, size_t* amountWritten) override; 29 virtual bool FileSeek(FlashFile& file, size_t offset) override; 30 virtual bool FileClose(FlashFile& file) override; 31 32 // directory interface 33 virtual bool DirectoryOpen(FlashDirectory& dir, const char* directoryPath) override; 34 virtual bool DirectoryRead(FlashDirectory& dir, FlashFileInfo& info) override; 35 virtual bool DirectoryClose(FlashDirectory& dir) override; 36 virtual bool DirectoryCreate(FlashDirectory& dir, const char* directoryPath); 37 38 // file information interface 39 virtual bool FileStat(FlashFileInfo& fileInfo, const char* path) override; 40 41 // drive information interface 42 virtual inline const char* GetDriveLabel() override { return GetFlashName(); } 43 virtual inline uint32_t GetDriveSerial() override { return 0; } 44 private: 45 lfs_t littlefs; 46 const char* GetFlashName(); 47 }; 48 } // namespace files