fix(tinyusb): Update console exit mechanism in tusb_msc example

This commit is contained in:
Guillaume Souchere
2025-04-01 12:42:58 +02:00
parent 30f8b59ed0
commit 8f0e9f038b

View File

@@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
* *
* SPDX-License-Identifier: Unlicense OR CC0-1.0 * SPDX-License-Identifier: Unlicense OR CC0-1.0
*/ */
@@ -43,6 +43,8 @@
static const char *TAG = "example_main"; static const char *TAG = "example_main";
static esp_console_repl_t *repl = NULL; static esp_console_repl_t *repl = NULL;
static SemaphoreHandle_t _wait_console_smp = NULL;
/* TinyUSB descriptors /* TinyUSB descriptors
********************************************************************* */ ********************************************************************* */
#define EPNUM_MSC 1 #define EPNUM_MSC 1
@@ -260,21 +262,24 @@ static int console_size(int argc, char **argv)
return 0; return 0;
} }
// exit from application // Show storage status
static int console_status(int argc, char **argv) static int console_status(int argc, char **argv)
{ {
printf("storage exposed over USB: %s\n", tinyusb_msc_storage_in_use_by_usb_host() ? "Yes" : "No"); printf("storage exposed over USB: %s\n", tinyusb_msc_storage_in_use_by_usb_host() ? "Yes" : "No");
return 0; return 0;
} }
// exit from application // Exit from application
static int console_exit(int argc, char **argv) static int console_exit(int argc, char **argv)
{ {
tinyusb_msc_unregister_callback(TINYUSB_MSC_EVENT_MOUNT_CHANGED); tinyusb_msc_unregister_callback(TINYUSB_MSC_EVENT_MOUNT_CHANGED);
tinyusb_msc_storage_deinit(); tinyusb_msc_storage_deinit();
tinyusb_driver_uninstall(); tinyusb_driver_uninstall();
xSemaphoreGive(_wait_console_smp);
printf("Application Exit\n"); printf("Application Exit\n");
esp_console_stop_repl(repl);
return 0; return 0;
} }
@@ -402,6 +407,12 @@ void app_main(void)
{ {
ESP_LOGI(TAG, "Initializing storage..."); ESP_LOGI(TAG, "Initializing storage...");
_wait_console_smp = xSemaphoreCreateBinary();
if (_wait_console_smp == NULL) {
ESP_LOGE(TAG, "Failed to create semaphore");
return;
}
#ifdef CONFIG_EXAMPLE_STORAGE_MEDIA_SPIFLASH #ifdef CONFIG_EXAMPLE_STORAGE_MEDIA_SPIFLASH
static wl_handle_t wl_handle = WL_INVALID_HANDLE; static wl_handle_t wl_handle = WL_INVALID_HANDLE;
ESP_ERROR_CHECK(storage_init_spiflash(&wl_handle)); ESP_ERROR_CHECK(storage_init_spiflash(&wl_handle));
@@ -472,4 +483,8 @@ void app_main(void)
} }
ESP_ERROR_CHECK(esp_console_start_repl(repl)); ESP_ERROR_CHECK(esp_console_start_repl(repl));
xSemaphoreTake(_wait_console_smp, portMAX_DELAY);
ESP_ERROR_CHECK(esp_console_stop_repl(repl));
vSemaphoreDelete(_wait_console_smp);
} }