summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--stmhal/usbd_msc_storage.c54
-rw-r--r--stmhal/usbdev/class/cdc_msc_hid/inc/usbd_cdc_msc_hid.h2
-rw-r--r--stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc_scsi.c7
3 files changed, 19 insertions, 44 deletions
diff --git a/stmhal/usbd_msc_storage.c b/stmhal/usbd_msc_storage.c
index ab2d4459ab..c0e4468362 100644
--- a/stmhal/usbd_msc_storage.c
+++ b/stmhal/usbd_msc_storage.c
@@ -41,10 +41,10 @@
// These are needed to support removal of the medium, so that the USB drive
// can be unmounted, and won't be remounted automatically.
-static uint8_t flash_removed = 0;
+static uint8_t flash_started = 0;
#if MICROPY_HW_HAS_SDCARD
-static uint8_t sdcard_removed = 0;
+static uint8_t sdcard_started = 0;
#endif
/******************************************************************************/
@@ -73,6 +73,7 @@ static const int8_t FLASH_STORAGE_Inquirydata[] = { // 36 bytes
*/
int8_t FLASH_STORAGE_Init(uint8_t lun) {
storage_init();
+ flash_started = 1;
return 0;
}
@@ -95,10 +96,10 @@ int8_t FLASH_STORAGE_GetCapacity(uint8_t lun, uint32_t *block_num, uint16_t *blo
* @retval Status
*/
int8_t FLASH_STORAGE_IsReady(uint8_t lun) {
- if (flash_removed) {
- return -1;
+ if (flash_started) {
+ return 0;
}
- return 0;
+ return -1;
}
/**
@@ -111,8 +112,8 @@ int8_t FLASH_STORAGE_IsWriteProtected(uint8_t lun) {
}
// Remove the lun
-int8_t FLASH_STORAGE_StopUnit(uint8_t lun) {
- flash_removed = 1;
+int8_t FLASH_STORAGE_StartStopUnit(uint8_t lun, uint8_t started) {
+ flash_started = started;
return 0;
}
@@ -176,7 +177,7 @@ const USBD_StorageTypeDef USBD_FLASH_STORAGE_fops = {
FLASH_STORAGE_GetCapacity,
FLASH_STORAGE_IsReady,
FLASH_STORAGE_IsWriteProtected,
- FLASH_STORAGE_StopUnit,
+ FLASH_STORAGE_StartStopUnit,
FLASH_STORAGE_PreventAllowMediumRemoval,
FLASH_STORAGE_Read,
FLASH_STORAGE_Write,
@@ -228,7 +229,7 @@ int8_t SDCARD_STORAGE_Init(uint8_t lun) {
if (!sdcard_power_on()) {
return -1;
}
-
+ sdcard_started = 1;
return 0;
}
@@ -264,33 +265,10 @@ int8_t SDCARD_STORAGE_GetCapacity(uint8_t lun, uint32_t *block_num, uint16_t *bl
* @retval Status
*/
int8_t SDCARD_STORAGE_IsReady(uint8_t lun) {
- if (sdcard_removed) {
- return -1;
+ if (sdcard_started) {
+ return 0;
}
- /*
-#ifndef USE_STM3210C_EVAL
-
- static int8_t last_status = 0;
-
- if(last_status < 0)
- {
- SD_Init();
- last_status = 0;
- }
-
- if(SD_GetStatus() != 0)
- {
- last_status = -1;
- return (-1);
- }
-#else
- if( SD_Init() != 0)
- {
- return (-1);
- }
-#endif
-*/
- return 0;
+ return -1;
}
/**
@@ -303,8 +281,8 @@ int8_t SDCARD_STORAGE_IsWriteProtected(uint8_t lun) {
}
// Remove the lun
-int8_t SDCARD_STORAGE_StopUnit(uint8_t lun) {
- sdcard_removed = 1;
+int8_t SDCARD_STORAGE_StartStopUnit(uint8_t lun, uint8_t started) {
+ sdcard_started = started;
return 0;
}
@@ -356,7 +334,7 @@ const USBD_StorageTypeDef USBD_SDCARD_STORAGE_fops = {
SDCARD_STORAGE_GetCapacity,
SDCARD_STORAGE_IsReady,
SDCARD_STORAGE_IsWriteProtected,
- SDCARD_STORAGE_StopUnit,
+ SDCARD_STORAGE_StartStopUnit,
SDCARD_STORAGE_PreventAllowMediumRemoval,
SDCARD_STORAGE_Read,
SDCARD_STORAGE_Write,
diff --git a/stmhal/usbdev/class/cdc_msc_hid/inc/usbd_cdc_msc_hid.h b/stmhal/usbdev/class/cdc_msc_hid/inc/usbd_cdc_msc_hid.h
index 7eca900ee0..48d260bc25 100644
--- a/stmhal/usbdev/class/cdc_msc_hid/inc/usbd_cdc_msc_hid.h
+++ b/stmhal/usbdev/class/cdc_msc_hid/inc/usbd_cdc_msc_hid.h
@@ -58,7 +58,7 @@ typedef struct _USBD_STORAGE {
int8_t (* GetCapacity) (uint8_t lun, uint32_t *block_num, uint16_t *block_size);
int8_t (* IsReady) (uint8_t lun);
int8_t (* IsWriteProtected) (uint8_t lun);
- int8_t (* StopUnit)(uint8_t lun);
+ int8_t (* StartStopUnit)(uint8_t lun, uint8_t started);
int8_t (* PreventAllowMediumRemoval)(uint8_t lun, uint8_t param0);
int8_t (* Read) (uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len);
int8_t (* Write)(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len);
diff --git a/stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc_scsi.c b/stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc_scsi.c
index 894812c18f..366f1f00e9 100644
--- a/stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc_scsi.c
+++ b/stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc_scsi.c
@@ -450,13 +450,10 @@ static int8_t SCSI_StartStopUnit(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t
hmsc->bot_data_length = 0;
// On Mac OS X, when the device is ejected a SCSI_START_STOP_UNIT command is sent.
- // params[1]==0 means stop, param[1]==1 seems to be something else (happens after the
- // device is plugged in and mounted for some time, probably a keep alive).
+ // Bit 0 of params[4] is the START bit.
// If we get a stop, we must really stop the device so that the Mac does not
// automatically remount it.
- if (params[1] == 0) {
- ((USBD_StorageTypeDef *)pdev->pUserData)->StopUnit(lun);
- }
+ ((USBD_StorageTypeDef *)pdev->pUserData)->StartStopUnit(lun, params[4] & 1);
return 0;
}