18 RamIO(
int sectorCount,
int sectorSize = FF_MAX_SS) {
19 sector_size = sectorSize;
20 sector_count = sectorCount;
24 for (
int j = 0; j <= sector_count; j++) {
33 DSTATUS disk_initialize(BYTE pdrv)
override {
34 if (pdrv != 0)
return STA_NODISK;
36 if (sectors.size() == 0) {
37 for (
int j = 0; j <= sector_count; j++) {
38 uint8_t* ptr =
nullptr;
40 ptr = (uint8_t*)ps_malloc(sector_count * sector_size);
42 if (ptr ==
nullptr) ptr = (uint8_t*)malloc(sector_size);
43 memset(ptr, 0, sector_size);
44 sectors.push_back(ptr);
51 DSTATUS disk_status(BYTE pdrv)
override {
52 if (pdrv != 0)
return STA_NODISK;
56 DRESULT disk_read(BYTE pdrv, BYTE* buffer, LBA_t sectorNo, UINT sectorCount)
override {
57 if (pdrv != 0)
return RES_NOTRDY;
58 if (status == STA_NOINIT)
return RES_NOTRDY;
59 if (sectors.size() == 0 || sectorNo + sectorCount > sector_count) RES_ERROR;
60 for (
int j = sectorNo; j < sectorNo + sectorCount; j++) {
61 int idx = j - sectorNo;
62 uint8_t* source = sectors[j];
63 memcpy(buffer + (idx * sector_size), source , sector_size);
68 DRESULT disk_write(BYTE pdrv,
const BYTE* buffer, LBA_t sectorNo,
69 UINT sectorCount)
override {
70 if (pdrv != 0)
return RES_NOTRDY;
71 if (status == STA_NOINIT)
return RES_NOTRDY;
72 if (sectors.size() == 0 || sectorNo + sectorCount > sector_count) RES_ERROR;
73 for (
int j = sectorNo; j < sectorNo + sectorCount; j++) {
74 int idx = j - sectorNo;
75 uint8_t* target = sectors[j];
76 memcpy(target, buffer + (idx * sector_size), sector_size);
81 DRESULT disk_ioctl(BYTE pdrv, ioctl_cmd_t cmd,
void* buffer)
override {
83 if (pdrv)
return RES_PARERR;
89 case GET_SECTOR_COUNT: {
91 DWORD result = sector_count;
92 memcpy(buffer, &result, (
sizeof(result)));
96 case GET_BLOCK_SIZE: {
99 memcpy(buffer, &result, (
sizeof(result)));
107 memcpy(&range, buffer,
sizeof(range));
109 for (
int j = range[0]; j <= range[1]; j++) {
110 memset(sectors[j], 0, sector_size);
123 std::vector<uint8_t*> sectors;
124 DSTATUS status = STA_NOINIT;
125 int sector_size = 512;
126 size_t sector_count = 0;
127 uint8_t *work_buffer =
nullptr;
API for FatFS See http://elm-chan.org/fsw/ff/00index_e.html.
Definition: ff.h:34
FatFS interface definition.
Definition: IO.h:74
The data is stored in RAM. In a ESP32 when PSRAM has been activated we store it is PSRAM.
Definition: RamIO.h:15
FRESULT mount(FatFs &fs) override
mount the file system
Definition: RamIO.cpp:7