From 6e4dc2f23dd6fe7725b145f49b49116859916b5c Mon Sep 17 00:00:00 2001 From: hathach Date: Mon, 6 May 2019 16:48:50 +0700 Subject: adding msc Start Stop to buitin command, but not complate yet add tud_msc_start_stop_cb() as optional callback --- src/class/msc/msc_device.c | 14 ++++++++++++-- src/class/msc/msc_device.h | 5 +++++ 2 files changed, 17 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/class/msc/msc_device.c b/src/class/msc/msc_device.c index fcb118a67..509f54957 100644 --- a/src/class/msc/msc_device.c +++ b/src/class/msc/msc_device.c @@ -202,8 +202,18 @@ int32_t proc_builtin_scsi(uint8_t lun, uint8_t const scsi_cmd[16], uint8_t* buff // not ready response with Failed status and sense key = not ready resplen = - 1; - // Logical Unit Not Ready, Cause Not Reportable - tud_msc_set_sense(lun, SCSI_SENSE_NOT_READY, 0x04, 0x00); + // If sense key is not set by callback, default to Logical Unit Not Ready, Cause Not Reportable + if ( _mscd_itf.sense_key == 0 ) tud_msc_set_sense(lun, SCSI_SENSE_NOT_READY, 0x04, 0x00); + } + break; + + case SCSI_CMD_START_STOP_UNIT: + resplen = 0; + + if (tud_msc_start_stop_cb) + { + scsi_start_stop_unit_t const * start_stop = (scsi_start_stop_unit_t const *) scsi_cmd; + tud_msc_start_stop_cb(lun, start_stop->power_condition, start_stop->start, start_stop->load_eject); } break; diff --git a/src/class/msc/msc_device.h b/src/class/msc/msc_device.h index cbaea4bb8..a05634d51 100644 --- a/src/class/msc/msc_device.h +++ b/src/class/msc/msc_device.h @@ -128,6 +128,11 @@ int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, // Invoked when received GET_MAX_LUN request, required for multiple LUNs implementation ATTR_WEAK uint8_t tud_msc_get_maxlun_cb(void); +// Invoked when received Start Stop Unit command +// - Start = 0 : stopped power mode, if load_eject = 1 : unload disk storage +// - Start = 1 : active mode, if load_eject = 1 : load disk storage +ATTR_WEAK void tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject); + // Invoked when Read10 command is complete ATTR_WEAK void tud_msc_read10_complete_cb(uint8_t lun); -- cgit v1.3.1