summaryrefslogtreecommitdiff
path: root/demos
diff options
context:
space:
mode:
authorhathach <[email protected]>2013-11-01 22:00:39 +0700
committerhathach <[email protected]>2013-11-01 22:00:39 +0700
commitd02ef073376d3f57cbaf9e494ffd27ee113f1cf6 (patch)
tree158914164dc735b1d1374400c6d273da7969655e /demos
parentf2ae5b541faba4b0ea28b010cbf9eda53ff59d70 (diff)
added support for
- sense data scsi_sense_fixed_data_t - read format capacity scsi_read_format_capacity_data_t change msc device callback to support actual response fix dcd_pipe_clear_stall also reset toggle
Diffstat (limited to 'demos')
-rw-r--r--demos/device/device_os_none/mscd_app.c43
1 files changed, 38 insertions, 5 deletions
diff --git a/demos/device/device_os_none/mscd_app.c b/demos/device/device_os_none/mscd_app.c
index 64681f20d..cf42d0582 100644
--- a/demos/device/device_os_none/mscd_app.c
+++ b/demos/device/device_os_none/mscd_app.c
@@ -46,6 +46,12 @@
//--------------------------------------------------------------------+
// MACRO CONSTANT TYPEDEF
//--------------------------------------------------------------------+
+enum
+{
+ DISK_CAPACITY = 16 * 1024 * 1024,
+ DISK_BLOCK_SIZE = 512
+};
+
static scsi_inquiry_data_t mscd_inquiry_data TUSB_CFG_ATTR_USBRAM =
{
.is_removable = 1,
@@ -54,12 +60,27 @@ static scsi_inquiry_data_t mscd_inquiry_data TUSB_CFG_ATTR_USBRAM =
.vendor_id = "tinyusb",
.product_id = "MSC Example",
.product_revision = "0.01"
-} ;
+};
static scsi_read_capacity10_data_t mscd_read_capacity10_data TUSB_CFG_ATTR_USBRAM =
{
- .last_lba = (16*1024*1024)/512,
- .block_size = 512
+ .last_lba = DISK_CAPACITY / DISK_BLOCK_SIZE, // read capacity
+ .block_size = DISK_BLOCK_SIZE
+};
+
+static scsi_sense_fixed_data_t mscd_sense_data TUSB_CFG_ATTR_USBRAM =
+{
+ .response_code = 0x70,
+ .sense_key = 0, // no errors
+ .additional_sense_len = sizeof(scsi_sense_fixed_data_t) - 8
+};
+
+static scsi_read_format_capacity_data_t mscd_format_capacity_data TUSB_CFG_ATTR_USBRAM =
+{
+ .list_length = 8,
+ .block_num = DISK_CAPACITY / DISK_BLOCK_SIZE, // write capacity
+ .descriptor_type = 2, // TODO formatted media, refractor to const
+ .block_size = DISK_BLOCK_SIZE
};
//--------------------------------------------------------------------+
@@ -69,16 +90,28 @@ static scsi_read_capacity10_data_t mscd_read_capacity10_data TUSB_CFG_ATTR_USBRA
//--------------------------------------------------------------------+
// tinyusb callback (ISR context)
//--------------------------------------------------------------------+
-msc_csw_status_t tusbd_msc_scsi_received_isr(uint8_t coreid, uint8_t lun, uint8_t scsi_cmd[16], void ** pp_buffer, uint16_t expected_length)
+msc_csw_status_t tusbd_msc_scsi_received_isr (uint8_t coreid, uint8_t lun, uint8_t scsi_cmd[16], void ** pp_buffer, uint16_t* p_length)
{
- switch(scsi_cmd[0])
+ switch (scsi_cmd[0])
{
case SCSI_CMD_INQUIRY:
(*pp_buffer) = &mscd_inquiry_data;
+ (*p_length) = sizeof(scsi_inquiry_data_t);
break;
case SCSI_CMD_READ_CAPACITY_10:
(*pp_buffer) = &mscd_read_capacity10_data;
+ (*p_length) = sizeof(scsi_read_capacity10_data_t);
+ break;
+
+ case SCSI_CMD_REQUEST_SENSE:
+ (*pp_buffer) = &mscd_sense_data;
+ (*p_length) = sizeof(scsi_sense_fixed_data_t);
+ break;
+
+ case SCSI_CMD_READ_FORMAT_CAPACITY:
+ (*pp_buffer) = &mscd_format_capacity_data;
+ (*p_length) = sizeof(scsi_read_format_capacity_data_t);
break;
default: return MSC_CSW_STATUS_FAILED;