summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland Dobai <[email protected]>2020-11-05 15:35:26 +0100
committerRoland Dobai <[email protected]>2020-11-05 15:35:26 +0100
commit4c99c5ff5ccaffcc4b36941005ddcef2831d22ed (patch)
treed7826cb13bcfe73cdc39261243e30a00d6cd39f0
parent2274740e48a73e1888657ed6d505db19a6c252e1 (diff)
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
-rw-r--r--examples/device/cdc_msc/src/msc_disk.c11
1 files changed, 10 insertions, 1 deletions
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;
}
}