/ src / files / files_littlefs.h
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