files_fat32.h
1 #pragma once 2 3 #include <cstdint> 4 #include <cstddef> 5 6 #include "ff.h" 7 8 #include "files_file_system.h" 9 #include "usb/usb_listener.h" 10 11 namespace files 12 { 13 using Fat32File = FIL; 14 using Fat32FileInfo = FILINFO; 15 using Fat32Directory = DIR; 16 17 class Fat32 : public FileSystem<Fat32File, Fat32Directory, Fat32FileInfo>, 18 public usb::Listener 19 { 20 public: 21 Fat32(); 22 virtual ~Fat32() = default; 23 Fat32(const Fat32&) = delete; 24 Fat32& operator=(const Fat32&) = delete; 25 26 virtual bool Mount() override; 27 virtual bool Unmount() override; 28 29 virtual bool FileOpen(Fat32File& file, const char* filePath, uint16_t mode) override; 30 virtual bool FileRead(Fat32File& file, void* buffer, size_t amountToRead, size_t* amountRead) override; 31 virtual bool FileWrite(Fat32File& file, const void* buffer, size_t bufferLength, size_t* amountWritten) override; 32 virtual bool FileSeek(Fat32File& file, size_t offset) override; 33 virtual bool FileClose(Fat32File& file) override; 34 35 virtual bool DirectoryOpen(Fat32Directory& dir, const char* directoryPath) override; 36 virtual bool DirectoryRead(Fat32Directory& dir, Fat32FileInfo& info) override; 37 virtual bool DirectoryClose(Fat32Directory& dir) override; 38 39 virtual bool FileStat(Fat32FileInfo& fileInfo, const char* path) override; 40 41 virtual inline const char* GetDriveLabel() override { return driveLabel; } 42 virtual inline uint32_t GetDriveSerial() override { return driveSerial; } 43 44 virtual void UsbWillEnable(app_usbd_event_type_t event) override; 45 virtual void UsbDidDisable(app_usbd_event_type_t event) override; 46 47 inline bool IsInitialized() { return initialized; } 48 49 private: 50 FATFS fileSystem; 51 uint8_t diskIndex = -1; 52 bool registered = false; 53 bool initialized = false; 54 bool autoRemountAfterUsbDisconnect = true; 55 uint32_t driveSerial = 0; 56 char driveLabel[16] = { 0 }; 57 bool RegisterBlockDevice(); 58 bool Initialize(); 59 bool Uninitialize(); 60 }; 61 } // namespace files