Arduino FatFS
MultiIO.h
1 #pragma once
2 
3 #include "IO.h"
4 #include "fatfs.h"
5 
6 namespace fatfs {
7 
15 class MultiIO : public IO {
16  public:
17  MultiIO() = default;
18 
19  void add(IO& io) { io_vector.push_back(&io); }
20 
22  FRESULT mount(FatFs& fs) override {
23  FRESULT rc;
24  for (int j = 0; j < io_vector.size(); j++) {
25  rc = io_vector[j]->mount(fs);
26  if (rc!=FR_OK) break;
27  }
28  return rc;
29  }
30 
32  FRESULT un_mount(FatFs& fs) override {
33  FRESULT rc;
34  for (int j = 0; j < io_vector.size(); j++) {
35  rc = io_vector[j]->un_mount(fs);
36  if (rc!=FR_OK) break;
37  }
38  return rc;
39  }
40 
41  DSTATUS disk_initialize(BYTE pdrv) override {
42  if (pdrv >= io_vector.size()) return STA_NODISK;
43  return io_vector[pdrv]->disk_initialize(0);
44  };
45  DSTATUS disk_status(BYTE pdrv) override {
46  if (pdrv >= io_vector.size()) return STA_NODISK;
47  return io_vector[pdrv]->disk_status(0);
48  }
49  DRESULT disk_read(BYTE pdrv, BYTE* buff, LBA_t sector, UINT count) override {
50  if (pdrv >= io_vector.size()) return RES_NOTRDY;
51  return io_vector[pdrv]->disk_read(0, buff, sector, count);
52  }
53  DRESULT disk_write(BYTE pdrv, const BYTE* buff, LBA_t sector, UINT count) override {
54  if (pdrv >= io_vector.size()) return RES_NOTRDY;
55  return io_vector[pdrv]->disk_write(0, buff, sector, count);
56  }
57  DRESULT disk_ioctl(BYTE pdrv, ioctl_cmd_t cmd, void* buff) override {
58  if (pdrv >= io_vector.size()) return RES_NOTRDY;
59  return io_vector[pdrv]->disk_ioctl(0, cmd, buff);
60  }
61 
62  protected:
63  std::vector<IO*> io_vector;
64 };
65 
66 }
API for FatFS See http://elm-chan.org/fsw/ff/00index_e.html.
Definition: ff.h:34
FatFS interface definition.
Definition: IO.h:74
File system driver which supports multiple drives: Add the drivers by calling add() then call mount()...
Definition: MultiIO.h:15
FRESULT un_mount(FatFs &fs) override
unmount all drivers
Definition: MultiIO.h:32
FRESULT mount(FatFs &fs) override
mount all the added drivers
Definition: MultiIO.h:22