roo_io
API Documentation for roo_io
Loading...
Searching...
No Matches
sdspi.cpp
Go to the documentation of this file.
2
3#if (defined ESP32 && defined ARDUINO)
4
5#include "FS.h"
6#include "SD.h"
7#include "ff.h"
8#include "sd_diskio.h"
9#include "vfs_api.h"
10
11namespace roo_io {
12
13ArduinoSdSpiFs::ArduinoSdSpiFs(uint8_t cs_pin, decltype(::SPI)& spi,
17 spi_(&spi),
18 pdrv_(0xFF) {}
19
20MountImpl::MountResult ArduinoSdSpiFs::mountImpl(
21 std::function<void()> unmount_fn) {
22 pdrv_ = sdcard_init(cs_pin_, spi_, frequency());
23 if (pdrv_ == 0xFF) {
24 return MountImpl::MountError(kGenericMountError);
25 }
26 if (!sdcard_mount(pdrv_, mountPoint(), maxOpenFiles(),
27 formatIfMountFailed())) {
28 sdcard_unmount(pdrv_);
29 sdcard_uninit(pdrv_);
30 pdrv_ = 0xFF;
31 return MountImpl::MountError(kGenericMountError);
32 }
33 return MountImpl::Mounted(std::unique_ptr<MountImpl>(
34 new PosixMountImpl(mountPoint(), readOnly(), unmount_fn)));
35}
36
37void ArduinoSdSpiFs::unmountImpl() {
38 if (pdrv_ != 0xFF) {
39 sdcard_unmount(pdrv_);
40
41 sdcard_uninit(pdrv_);
42 pdrv_ = 0xFF;
43 }
44}
45
46Filesystem::MediaPresence ArduinoSdSpiFs::checkMediaPresence() {
47 FATFS* fsinfo;
48 DWORD fre_clust;
49 if (f_getfree("0:", &fre_clust, &fsinfo) != 0) {
50 return Filesystem::kMediaAbsent;
51 }
52 return (fsinfo->csize == 0) ? Filesystem::kMediaAbsent
53 : Filesystem::kMediaPresent;
54}
55
56ArduinoSdSpiFs CreateArduinoSdSpiFs() { return ArduinoSdSpiFs(); }
57
58ArduinoSdSpiFs SD_SPI = CreateArduinoSdSpiFs();
59
60} // namespace roo_io
61
62#endif
Definition byte.h:6
roo::basic_string_view< CharT, Traits > basic_string_view
Definition string_view.h:8