14#include "class/msc/msc.h"
15#include "class/msc/msc_device.h"
20static const char*
TAG =
"USB_MSC";
26 LOG_I(
TAG,
"MSC backend %s", backend ?
"attached" :
"detached");
32 uint8_t product_rev[4]) {
34 const char vid[] =
"CDCBadge";
35 const char pid[] =
"vFAT Storage";
36 const char rev[] =
"1.0";
37 std::memset(vendor_id,
' ', 8);
38 std::memset(product_id,
' ', 16);
39 std::memset(product_rev,
' ', 4);
40 std::memcpy(vendor_id, vid, std::strlen(vid) > 8 ? 8 : std::strlen(vid));
41 std::memcpy(product_id, pid, std::strlen(pid) > 16 ? 16 : std::strlen(pid));
42 std::memcpy(product_rev, rev, std::strlen(rev) > 4 ? 4 : std::strlen(rev));
57 const uint16_t bs =
s_backend->block_size();
59 *block_count = bs ?
static_cast<uint32_t
>(
s_backend->total_bytes() / bs) : 0;
73 if (!
s_backend->read(lba, offset, buffer, bufsize))
return -1;
74 return static_cast<int32_t
>(bufsize);
82 if (!
s_backend->write(lba, offset, buffer, bufsize))
return -1;
83 return static_cast<int32_t
>(bufsize);
89 (void)power_condition;
103 tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00);
CDC Log: logging over TinyUSB CDC and UART.
#define LOG_I(tag, fmt,...)
Block-device backend for the single USB Mass Storage LUN.
int32_t tud_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void *buffer, uint32_t bufsize)
int32_t tud_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t *buffer, uint32_t bufsize)
bool tud_msc_is_writable_cb(uint8_t lun)
void usb_msc_set_backend(const usb_msc_backend_t *backend)
Installs or removes the MSC block backend.
int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void *buffer, uint16_t bufsize)
static const usb_msc_backend_t * s_backend
bool tud_msc_test_unit_ready_cb(uint8_t lun)
bool tud_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bool load_eject)
void tud_msc_capacity_cb(uint8_t lun, uint32_t *block_count, uint16_t *block_size)
void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4])