diff options
| author | HiFiPhile <[email protected]> | 2024-05-08 14:48:47 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-05-08 14:48:47 +0200 |
| commit | d37d25d55778ade10e6183e3436a0b53dca5fe06 (patch) | |
| tree | 31465870a7a0f210af7ece022e8542855a0456a2 | |
| parent | c773c612fd4cd3ed9e69875a7553193dc730e363 (diff) | |
| parent | c8805c61f9b0e3c03d8d3592127b1239a45c9880 (diff) | |
Merge pull request #2532 from acscd/master
Added support for SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL
| -rw-r--r-- | src/class/msc/msc_device.c | 18 | ||||
| -rw-r--r-- | src/class/msc/msc_device.h | 3 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/class/msc/msc_device.c b/src/class/msc/msc_device.c index 588fcaaca..447560b4d 100644 --- a/src/class/msc/msc_device.c +++ b/src/class/msc/msc_device.c @@ -689,6 +689,24 @@ static int32_t proc_builtin_scsi(uint8_t lun, uint8_t const scsi_cmd[16], uint8_ } break; + case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL: + resplen = 0; + + if (tud_msc_prevent_allow_medium_removal_cb) + { + scsi_prevent_allow_medium_removal_t const * prevent_allow = (scsi_prevent_allow_medium_removal_t const *) scsi_cmd; + if ( !tud_msc_prevent_allow_medium_removal_cb(lun, prevent_allow->prohibit_removal, prevent_allow->control) ) + { + // Failed status response + resplen = - 1; + + // set default sense if not set by callback + if ( p_msc->sense_key == 0 ) set_sense_medium_not_present(lun); + } + } + break; + + case SCSI_CMD_READ_CAPACITY_10: { uint32_t block_count; diff --git a/src/class/msc/msc_device.h b/src/class/msc/msc_device.h index 4247a40bd..29acd280a 100644 --- a/src/class/msc/msc_device.h +++ b/src/class/msc/msc_device.h @@ -131,6 +131,9 @@ TU_ATTR_WEAK uint8_t tud_msc_get_maxlun_cb(void); // - Start = 1 : active mode, if load_eject = 1 : load disk storage TU_ATTR_WEAK bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject); +//Invoked when we receive the Prevent / Allow Medium Removal command +TU_ATTR_WEAK bool tud_msc_prevent_allow_medium_removal_cb(uint8_t lun, uint8_t prohibit_removal, uint8_t control); + // Invoked when received REQUEST_SENSE TU_ATTR_WEAK int32_t tud_msc_request_sense_cb(uint8_t lun, void* buffer, uint16_t bufsize); |
