#pragma once #ifdef __cplusplus extern "C" { #endif #include #include #include /** * @brief Configuration structure for psram initialization * * User configurable parameters that are used while * initializing the PSRAM media. */ typedef struct { uint8_t* memory; /*!< pointer to memory in PSRAM */ size_t memory_size; /*!< requested size. note: allocated file system may be smaller due to sector size */ tusb_msc_callback_t callback_mount_changed; /*!< Pointer to the function callback that will be delivered AFTER mount/unmount operation is successfully finished */ tusb_msc_callback_t callback_premount_changed; /*!< Pointer to the function callback that will be delivered BEFORE mount/unmount operation is started */ const esp_vfs_fat_mount_config_t mount_config; /*!< FATFS mount config */ } tinyusb_msc_psram_config_t; /** * @brief Register storage type psram with tinyusb driver * * @param config pointer to the psram configuration * @return esp_err_t * - ESP_OK, if success; * - ESP_ERR_NO_MEM, if there was no memory to allocate storage components; */ esp_err_t tinyusb_msc_storage_init_psram(const tinyusb_msc_psram_config_t *config); /** * @brief Deregister storage with tinyusb driver and frees the memory * */ void tinyusb_msc_psram_deinit(void); /** * @brief Register a callback invoking on MSC event. If the callback had been * already registered, it will be overwritten * * @param event_type - type of registered event for a callback * @param callback - callback function * @return esp_err_t - ESP_OK or ESP_ERR_INVALID_ARG */ esp_err_t tinyusb_msc_register_callback(tinyusb_msc_event_type_t event_type, tusb_msc_callback_t callback); /** * @brief Unregister a callback invoking on MSC event. * * @param event_type - type of registered event for a callback * @return esp_err_t - ESP_OK or ESP_ERR_INVALID_ARG */ esp_err_t tinyusb_msc_unregister_callback(tinyusb_msc_event_type_t event_type); /** * @brief Mount the storage partition locally on the firmware application. * * Get the available drive number. Register spi flash partition. * Connect POSIX and C standard library IO function with FATFS. * Mounts the partition. * This API is used by the firmware application. If the storage partition is * mounted by this API, host (PC) can't access the storage via MSC. * When this function is called from the tinyusb callback functions, care must be taken * so as to make sure that user callbacks must be completed within a * specific time. Otherwise, MSC device may re-appear again on Host. * * @param base_path path prefix where FATFS should be registered * @return esp_err_t * - ESP_OK, if success; * - ESP_ERR_NOT_FOUND if the maximum count of volumes is already mounted * - ESP_ERR_NO_MEM if not enough memory or too many VFSes already registered; */ esp_err_t tinyusb_msc_psram_mount(const char *base_path); /** * @brief Unmount the storage partition from the firmware application. * * Unmount the partition. Unregister diskio driver. * Unregister the SPI flash partition. * Finally, Un-register FATFS from VFS. * After this function is called, storage device can be seen (recognized) by host (PC). * When this function is called from the tinyusb callback functions, care must be taken * so as to make sure that user callbacks must be completed within a specific time. * Otherwise, MSC device may not appear on Host. * * @return esp_err_t * - ESP_OK on success * - ESP_ERR_INVALID_STATE if FATFS is not registered in VFS */ esp_err_t tinyusb_msc_psram_unmount(void); /** * @brief Get number of sectors in storage media * * @return usable size, in bytes */ uint32_t tinyusb_msc_psram_get_sector_count(void); /** * @brief Get sector size of storage media * * @return sector count */ uint32_t tinyusb_msc_psram_get_sector_size(void); /** * @brief Get status if storage media is exposed over USB to Host * * @return bool * - true, if the storage media is exposed to Host * - false, if the stoarge media is mounted on application (not exposed to Host) */ bool tinyusb_msc_psram_in_use_by_usb_host(void); #ifdef __cplusplus } #endif