|
|
|
@ -1,8 +1,12 @@ |
|
|
|
|
#include "storage.h" |
|
|
|
|
|
|
|
|
|
#include "esp_check.h" |
|
|
|
|
#include "diskio_impl.h" |
|
|
|
|
#include "diskio_sdmmc.h" |
|
|
|
|
#include "driver/sdspi_host.h" |
|
|
|
|
#include "esp_check.h" |
|
|
|
|
#include "esp_err.h" |
|
|
|
|
#include "esp_vfs_fat.h" |
|
|
|
|
#include "ff.h" |
|
|
|
|
#include "gpio-expander.h" |
|
|
|
|
#include "hal/gpio_types.h" |
|
|
|
|
#include "hal/spi_types.h" |
|
|
|
@ -47,10 +51,26 @@ esp_err_t SdStorage::Acquire(void) { |
|
|
|
|
// Will return ESP_ERR_INVALID_RESPONSE if there is no card
|
|
|
|
|
// TODO: use our own error code
|
|
|
|
|
ret = sdmmc_card_init(&host_, &card_); |
|
|
|
|
|
|
|
|
|
// We're done chatting for now.
|
|
|
|
|
if (ret != ESP_OK) { |
|
|
|
|
gpio_->set_sd_cs(true); |
|
|
|
|
gpio_->Write(); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ESP_ERROR_CHECK( |
|
|
|
|
esp_vfs_fat_register(STORAGE_PATH, "", MAX_OPEN_FILES, &fs_)); |
|
|
|
|
ff_diskio_register_sdmmc(fs_->pdrv, &card_); |
|
|
|
|
|
|
|
|
|
// Mount right now, not on first operation.
|
|
|
|
|
FRESULT fret = f_mount(fs_, "", 1); |
|
|
|
|
if (fret != FR_OK) { |
|
|
|
|
// TODO: Proper error handling
|
|
|
|
|
return ESP_ERR_INVALID_MAC; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// We're done chatting for now.
|
|
|
|
|
//gpio_->set_sd_cs(true);
|
|
|
|
|
//gpio_->Write();
|
|
|
|
|
|
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
@ -59,6 +79,13 @@ esp_err_t SdStorage::Release(void) { |
|
|
|
|
gpio_->set_sd_cs(false); |
|
|
|
|
gpio_->Write(); |
|
|
|
|
|
|
|
|
|
// Unmount and unregister the filesystem
|
|
|
|
|
f_unmount(""); |
|
|
|
|
ff_diskio_register(fs_->pdrv, NULL); |
|
|
|
|
esp_vfs_fat_unregister_path(STORAGE_PATH); |
|
|
|
|
fs_ = nullptr; |
|
|
|
|
|
|
|
|
|
// Uninstall the SPI driver
|
|
|
|
|
sdspi_host_remove_device(this->handle_); |
|
|
|
|
sdspi_host_deinit(); |
|
|
|
|
|
|
|
|
|