10 #include "FsDrive.hpp"
12 #include "FsPartition.hpp"
13 #include "RtosInclude.hpp"
15 class FsFormatCallback {
17 virtual void formatStatusUpdate(uint32_t current, uint32_t total) {
28 static FsPartition** sPartitions;
29 static size_t sPartitionsCount;
45 static void init(FsPartition* partitions[],
size_t partitionsCount);
46 static FsDefs::RESULT format(FsDrive* drive, FsFormatCallback* listener);
49 static FsDefs::RESULT open(
const char* path,
class FsEntry* file);
50 static FsDefs::RESULT read(
void* buffer,
size_t len,
size_t* transfered,
class FsFile* file);
51 static FsDefs::RESULT write(
const void* buffer,
size_t len,
size_t* transfered,
class FsFile* file);
52 static FsDefs::RESULT seek(
class FsFile* file,
size_t position);
53 static FsDefs::RESULT flush(
class FsFile* file);
54 static FsDefs::RESULT del(
class FsEntry* file);
55 static FsDefs::RESULT getNextEntry(
class FsEntry* file, FsDir::ENTRY_INFO* info);
57 static FsDefs::RESULT internalOpen(
const char* path,
class FsEntry* file);
58 static FsDefs::RESULT internalInitPartition(FsPartition* partition, FsDefs::SECTOR* sector);
59 static FsDefs::RESULT internalRead(
void* buffer,
size_t len,
size_t* transfered,
class FsFile* file);
60 static FsDefs::RESULT internalWrite(
const void* buffer,
size_t len,
size_t* transfered,
class FsFile* file);
61 static FsDefs::RESULT internalSeek(
class FsFile* file,
size_t position);
62 static FsDefs::RESULT internalFlush(
class FsFile* file, FsDefs::SECTOR* sector);
63 static FsDefs::RESULT internalDel(
class FsEntry* file);
64 static FsDefs::RESULT internalFormat(FsDrive* drive, FsDefs::SECTOR* sector, FsFormatCallback* listener);
65 static FsDefs::RESULT internalGetNextEntry(
class FsEntry* file, FsDir::ENTRY_INFO* info);
67 static FsDefs::RESULT createShortFilenameEntry(
const char** name,
class FsEntry* file,
bool writeEntry);
68 static FsDefs::RESULT createLongFilenameEntry(
const char** name,
class FsEntry* file,
int len);
70 static FsDefs::RESULT checkShortFilename(
const char** name, FsDefs::DIRECTORY_ENTRY* entry);
71 static FsDefs::RESULT checkLongFilename(
const char** name,
class FsEntry* dirEntryInfo);
72 static FILENAME_TYPE getFilenameType(
const char* name,
int& len);
73 static bool isLongFilenameEntry(FsDefs::DIRECTORY_ENTRY* entry);
74 static CHAR_TYPE getCharType(
const char c);
75 static uint8_t calcSfnChecksum(
const char* name);
76 static void setWideCharFromAscii(uint8_t*p,
char value);
77 static char getAsciiFromWideChar(uint16_t value);
78 static void initEntryInfoFromShortEntry(FsDefs::SHORT_DIRECTORY_ENTRY* entry, FsDir::ENTRY_INFO* info);
79 static void getLongNameLenAndOrder(FsDefs::LONG_DIRECTORY_ENTRY* entry,
int* lastOnEntry,
int* order,
int* nameLen);
80 static uint32_t getCurrentTime();