diff --git a/src/emmc.c b/src/emmc.c index 4ee09fa..06714c0 100644 --- a/src/emmc.c +++ b/src/emmc.c @@ -14,8 +14,11 @@ #include "freertos/FreeRTOS.h" #include "freertos/queue.h" #include "freertos/task.h" +#include "freertos/semphr.h" #include "ws_log.h" +static SemaphoreHandle_t mutex; + static const char* TAG = "emmc"; esp_err_t ret; @@ -28,21 +31,24 @@ size_t current_block = 0; // utility functions for other files to import esp_err_t emmc_write(const void *source, size_t block, size_t size) { -// log_i("write block %d",block); + xSemaphoreTake(mutex, portMAX_DELAY); ret = sdmmc_write_sectors(&card, (const void *)source, (size_t)block, (size_t)size); - // ret = sdmmc_write_sectors(&card, (char *)source, (size_t)block, (size_t)size); + xSemaphoreGive(mutex); return(ret); } esp_err_t emmc_read(void *dst, size_t start_sector, size_t sector_count) { + xSemaphoreTake(mutex, portMAX_DELAY); ret = sdmmc_read_sectors(&card, (void *)dst, (size_t)start_sector, (size_t)sector_count); + xSemaphoreGive(mutex); return(ret); } void emmc_init(void) { + mutex = xSemaphoreCreateMutex(); sdmmc_host_t host = SDMMC_HOST_DEFAULT(); sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT(); host.flags = SDMMC_HOST_FLAG_4BIT; @@ -94,7 +100,7 @@ esp_err_t write_wav_to_emmc(char* source, size_t block, size_t size) { // the buffer is full, print it to the emmc and reset // log_i("%u",current_block); - ret = sdmmc_write_sectors(&card, file_buf, current_block, 1); + ret = emmc_write(file_buf, current_block, 1); if (ret != ESP_OK) { log_e( "Failed to write sector %d :: (%s)", current_block, esp_err_to_name(ret)); return ESP_FAIL; @@ -120,7 +126,7 @@ esp_err_t close_wav_to_emmc(void) { // write the last little bit // log_i("%u",current_block); - ret = sdmmc_write_sectors(&card, file_buf, current_block, 1); + ret = emmc_write(file_buf, current_block, 1); if (ret != ESP_OK) { log_e( "Failed to write sector %d :: (%s)", current_block, esp_err_to_name(ret)); return ESP_FAIL;