From 4c99c5ff5ccaffcc4b36941005ddcef2831d22ed Mon Sep 17 00:00:00 2001 From: Roland Dobai Date: Thu, 5 Nov 2020 15:35:26 +0100 Subject: [PATCH] Make the disk disappear on Windows after it was ejected Make the disk disappear on Windows after it was ejected. The device need to be re-inserted or reseted to re-appear again. This doesn't affect Linux where the device can be mounted and unmounted repeatedly. Closes https://github.com/hathach/tinyusb/issues/549 --- examples/device/cdc_msc/src/msc_disk.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/examples/device/cdc_msc/src/msc_disk.c b/examples/device/cdc_msc/src/msc_disk.c index 5aa7befc9..877154773 100644 --- a/examples/device/cdc_msc/src/msc_disk.c +++ b/examples/device/cdc_msc/src/msc_disk.c @@ -28,6 +28,8 @@ #if CFG_TUD_MSC +static bool ejected = false; + // Some MCU doesn't have enough 8KB SRAM to store the whole disk // We will use Flash as read-only disk with board that has // CFG_EXAMPLE_MSC_READONLY defined @@ -137,7 +139,13 @@ bool tud_msc_test_unit_ready_cb(uint8_t lun) { (void) lun; - return true; // RAM disk is always ready + // RAM disk is ready until is not ejected + if (ejected) { + tud_msc_set_sense(lun, SCSI_SENSE_NOT_READY, 0x3a, 0x00); + return false; + } + + return true; } // Invoked when received SCSI_CMD_READ_CAPACITY_10 and SCSI_CMD_READ_FORMAT_CAPACITY to determine the disk size @@ -166,6 +174,7 @@ bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, boo }else { // unload disk storage + ejected = true; } }