update example

This commit is contained in:
hathach 2018-07-12 22:11:37 +07:00
parent a0849fee9f
commit 2d79023a5a
4 changed files with 34 additions and 95 deletions

View File

@ -87,6 +87,7 @@ void virtual_com_task(void)
uint32_t count = tud_cdc_read(buf, sizeof(buf)); uint32_t count = tud_cdc_read(buf, sizeof(buf));
tud_cdc_write(buf, count); tud_cdc_write(buf, count);
tud_cdc_flush();
} }
} }

View File

@ -46,22 +46,6 @@
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// MACRO CONSTANT TYPEDEF // MACRO CONSTANT TYPEDEF
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
static scsi_inquiry_data_t const mscd_inquiry_data =
{
.is_removable = 1,
.version = 2,
.response_data_format = 2,
.vendor_id = "tinyusb",
.product_id = "MSC Example",
.product_revision = "0.01"
};
static scsi_read_capacity10_data_t const mscd_read_capacity10_data =
{
.last_lba = ENDIAN_BE(DISK_BLOCK_NUM-1), // read capacity
.block_size = ENDIAN_BE(DISK_BLOCK_SIZE)
};
scsi_sense_fixed_data_t mscd_sense_data = scsi_sense_fixed_data_t mscd_sense_data =
{ {
.response_code = 0x70, .response_code = 0x70,
@ -69,14 +53,6 @@ scsi_sense_fixed_data_t mscd_sense_data =
.additional_sense_len = sizeof(scsi_sense_fixed_data_t) - 8 .additional_sense_len = sizeof(scsi_sense_fixed_data_t) - 8
}; };
static scsi_read_format_capacity_data_t const mscd_format_capacity_data =
{
.list_length = 8,
.block_num = ENDIAN_BE(DISK_BLOCK_NUM), // write capacity
.descriptor_type = 2, // TODO formatted media, refractor to const
.block_size_u16 = ENDIAN_BE16(DISK_BLOCK_SIZE)
};
static scsi_mode_parameters_t const msc_dev_mode_para = static scsi_mode_parameters_t const msc_dev_mode_para =
{ {
.mode_data_length = 3, .mode_data_length = 3,
@ -110,26 +86,11 @@ int32_t tud_msc_scsi_cb (uint8_t rhport, uint8_t lun, uint8_t const scsi_cmd[16]
switch (scsi_cmd[0]) switch (scsi_cmd[0])
{ {
case SCSI_CMD_INQUIRY:
ptr = &mscd_inquiry_data;
len = sizeof(scsi_inquiry_data_t);
break;
case SCSI_CMD_READ_CAPACITY_10:
ptr = &mscd_read_capacity10_data;
len = sizeof(scsi_read_capacity10_data_t);
break;
case SCSI_CMD_REQUEST_SENSE: case SCSI_CMD_REQUEST_SENSE:
ptr = &mscd_sense_data; ptr = &mscd_sense_data;
len = sizeof(scsi_sense_fixed_data_t); len = sizeof(scsi_sense_fixed_data_t);
break; break;
case SCSI_CMD_READ_FORMAT_CAPACITY:
ptr = &mscd_format_capacity_data;
len = sizeof(scsi_read_format_capacity_data_t);
break;
case SCSI_CMD_MODE_SENSE_6: case SCSI_CMD_MODE_SENSE_6:
ptr = &msc_dev_mode_para; ptr = &msc_dev_mode_para;
len = sizeof(msc_dev_mode_para); len = sizeof(msc_dev_mode_para);
@ -175,22 +136,5 @@ int32_t tud_msc_scsi_cb (uint8_t rhport, uint8_t lun, uint8_t const scsi_cmd[16]
return len; return len;
} }
//--------------------------------------------------------------------+
// APPLICATION CODE
//--------------------------------------------------------------------+
void msc_app_task(void* param)
{ // no need to implement the task yet
(void) param;
OSAL_TASK_BEGIN
OSAL_TASK_END
}
void msc_app_init (void)
{
}
#endif #endif

View File

@ -78,17 +78,20 @@
#define CFG_TUD_HID_GENERIC 0 // TODO need update #define CFG_TUD_HID_GENERIC 0 // TODO need update
/*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/
/* CLASS DRIVER /* CDC DEVICE
*------------------------------------------------------------------*/ *------------------------------------------------------------------*/
// FIFO size of CDC TX and RX // FIFO size of CDC TX and RX
#define CFG_TUD_CDC_RX_BUFSIZE 64 #define CFG_TUD_CDC_RX_BUFSIZE 64
#define CFG_TUD_CDC_TX_BUFSIZE 64 #define CFG_TUD_CDC_TX_BUFSIZE 64
// TX is sent automatically every Start of Frame event. // TX is sent automatically every Start of Frame event.
// If not enabled, application must call tud_cdc_flush() periodically // If not enabled, application must call tud_cdc_flush() periodically
#define CFG_TUD_CDC_FLUSH_ON_SOF 1 #define CFG_TUD_CDC_FLUSH_ON_SOF 0
/*------------------------------------------------------------------*/
/* MSC DEVICE
*------------------------------------------------------------------*/
// Number of supported Logical Unit Number (At least 1) // Number of supported Logical Unit Number (At least 1)
#define CFG_TUD_MSC_MAXLUN 1 #define CFG_TUD_MSC_MAXLUN 1
@ -96,6 +99,21 @@
// Buffer size of Device Mass storage // Buffer size of Device Mass storage
#define CFG_TUD_MSC_BUFSIZE 512 #define CFG_TUD_MSC_BUFSIZE 512
// Number of Blocks
#define CFG_TUD_MSC_BLOCK_NUM 16
// Block size
#define CFG_TUD_MSC_BLOCK_SZ 512
// Vendor name included in Inquiry response, max 8 bytes
#define CFG_TUD_MSC_VENDOR "tinyusb"
// Product name included in Inquiry response, max 16 bytes
#define CFG_TUD_MSC_PRODUCT "tusb msc"
// Product revision string included in Inquiry response, max 4 bytes
#define CFG_TUD_MSC_PRODUCT_REV "1.0"
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// USB RAM PLACEMENT // USB RAM PLACEMENT
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+

View File

@ -41,51 +41,27 @@
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// STRING DESCRIPTORS // STRING DESCRIPTORS
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
#define STRING_LEN_UNICODE(n) (2 + (2*(n))) // also includes 2 byte header
#define ENDIAN_BE16_FROM( high, low) ENDIAN_BE16(high << 8 | low)
// array of pointer to string descriptors // array of pointer to string descriptors
uint16_t const * const string_desc_arr [] = uint16_t const * const string_desc_arr [] =
{ {
[0] = (uint16_t []) { // supported language // 0: is supported language = English
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(1), TUSB_DESC_STRING ), TUD_DESC_STRCONV(0x0409),
0x0409 // English
},
[1] = (uint16_t []) { // manufacturer // 1: Manufacturer
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(11), TUSB_DESC_STRING), TUD_DESC_STRCONV('t', 'i', 'n', 'y', 'u', 's', 'b', '.', 'o', 'r', 'g'),
't', 'i', 'n', 'y', 'u', 's', 'b', '.', 'o', 'r', 'g' // len = 11
},
[2] = (uint16_t []) { // product // 2: Product
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(14), TUSB_DESC_STRING), TUD_DESC_STRCONV('t', 'i', 'n', 'y', 'u', 's', 'b', ' ', 'd', 'e', 'v', 'i', 'c', 'e'),
't', 'i', 'n', 'y', 'u', 's', 'b', ' ', 'd', 'e', 'v', 'i', 'c', 'e' // len = 14
},
[3] = (uint16_t []) { // serials // 3: Serials TODO use chip ID
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(4), TUSB_DESC_STRING), TUD_DESC_STRCONV('1', '2', '3', '4', '5', '6'),
'1', '2', '3', '4' // len = 4
},
[4] = (uint16_t []) { // CDC Interface // 4: CDC Interface
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(3), TUSB_DESC_STRING), TUD_DESC_STRCONV('t','u','s','b',' ','c','d','c'),
'c', 'd', 'c' // len = 3
},
[5] = (uint16_t []) { // Keyboard Interface // 5: MSC Interface
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(5), TUSB_DESC_STRING), TUD_DESC_STRCONV('t','u','s','b',' ','m','s','c'),
'm', 'o', 'u', 's', 'e' // len = 5
},
[6] = (uint16_t []) { // Keyboard Interface
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(8), TUSB_DESC_STRING),
'k', 'e', 'y', 'b', 'o', 'a', 'r', 'd' // len = 8
},
[7] = (uint16_t []) { // MSC Interface
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(3), TUSB_DESC_STRING),
'm', 's', 'c' // len = 3
}
}; };
// tud_desc_set is required by tinyusb stack // tud_desc_set is required by tinyusb stack