Skip to content

Commit 8c2e639

Browse files
committed
add single LUN API for MSC
1 parent 5a755b4 commit 8c2e639

File tree

4 files changed

+42
-22
lines changed

4 files changed

+42
-22
lines changed

examples/msc_ramdisk/msc_ramdisk.ino

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,16 @@ Adafruit_USBD_MSC usb_msc;
3535
void setup()
3636
{
3737
// Set disk vendor id, product id and revision with string up to 8, 16, 4 characters respectively
38-
usb_msc.setID(0, "Adafruit", "Mass Storage", "1.0");
38+
usb_msc.setID("Adafruit", "Mass Storage", "1.0");
3939

4040
// Set disk size
41-
usb_msc.setCapacity(0, DISK_BLOCK_NUM, DISK_BLOCK_SIZE);
41+
usb_msc.setCapacity(DISK_BLOCK_NUM, DISK_BLOCK_SIZE);
4242

4343
// Set callback
44-
usb_msc.setReadWriteCallback(0, msc_read_cb, msc_write_cb, msc_flush_cb);
44+
usb_msc.setReadWriteCallback(msc_read_cb, msc_write_cb, msc_flush_cb);
4545

4646
// Set Lun ready (RAM disk is always ready)
47-
usb_msc.setUnitReady(0, true);
47+
usb_msc.setUnitReady(true);
4848

4949
usb_msc.begin();
5050

examples/msc_sdcard/msc_sdcard.ino

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ SdVolume volume;
4040
void setup()
4141
{
4242
// Set disk vendor id, product id and revision with string up to 8, 16, 4 characters respectively
43-
usb_msc.setID(0, "Adafruit", "SD Card", "1.0");
43+
usb_msc.setID("Adafruit", "SD Card", "1.0");
4444

4545
// Set read write callback
46-
usb_msc.setReadWriteCallback(0, msc_read_cb, msc_write_cb, msc_flush_cb);
46+
usb_msc.setReadWriteCallback(msc_read_cb, msc_write_cb, msc_flush_cb);
4747

4848
// Still initialize MSC but tell usb stack that MSC is not ready to read/write
4949
// If we don't initialize, board will be enumerated as CDC only
50-
usb_msc.setUnitReady(0, false);
50+
usb_msc.setUnitReady(false);
5151
usb_msc.begin();
5252

5353
Serial.begin(115200);
@@ -78,10 +78,10 @@ void setup()
7878
Serial.println((block_count/2) / 1024);
7979

8080
// Set disk size, SD block size is always 512
81-
usb_msc.setCapacity(0, block_count, 512);
81+
usb_msc.setCapacity(block_count, 512);
8282

8383
// MSC is ready for read/write
84-
usb_msc.setUnitReady(0, true);
84+
usb_msc.setUnitReady(true);
8585
}
8686

8787
void loop()

src/Adafruit_USBD_MSC.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,6 @@ void Adafruit_USBD_MSC::setCapacity(uint8_t lun, uint32_t block_count, uint16_t
6969
_lun[lun].block_size = block_size;
7070
}
7171

72-
void Adafruit_USBD_MSC::getCapacity(uint8_t lun, uint32_t* block_count, uint16_t* block_size)
73-
{
74-
*block_count = _lun[lun].block_count;
75-
*block_size = _lun[lun].block_size;
76-
}
77-
7872
void Adafruit_USBD_MSC::setUnitReady(uint8_t lun, bool ready)
7973
{
8074
_lun[lun].unit_ready = ready;
@@ -145,7 +139,9 @@ bool tud_msc_test_unit_ready_cb(uint8_t lun)
145139
void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size)
146140
{
147141
if (!_msc_dev) return;
148-
_msc_dev->getCapacity(lun, block_count, block_size);
142+
143+
*block_count = _msc_dev->_lun[lun].block_count;
144+
*block_size = _msc_dev->_lun[lun].block_size;
149145
}
150146

151147
// Callback invoked when received an SCSI command not in built-in list below

src/Adafruit_USBD_MSC.h

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,39 @@ class Adafruit_USBD_MSC : Adafruit_USBD_Interface
4242
void setMaxLun(uint8_t maxlun);
4343
uint8_t getMaxLun(void);
4444

45+
//------------- Multiple LUN API -------------//
4546
void setID(uint8_t lun, const char* vendor_id, const char* product_id, const char* product_rev);
46-
4747
void setCapacity(uint8_t lun, uint32_t block_count, uint16_t block_size);
48-
void getCapacity(uint8_t lun, uint32_t* block_count, uint16_t* block_size);
49-
5048
void setUnitReady(uint8_t lun, bool ready);
51-
5249
void setReadWriteCallback(uint8_t lun, read_callback_t rd_cb, write_callback_t wr_cb, flush_callback_t fl_cb);
5350
void setReadyCallback(uint8_t lun, ready_callback_t cb);
5451

52+
//------------- Single LUN API -------------//
53+
void setID(const char* vendor_id, const char* product_id, const char* product_rev)
54+
{
55+
setID(0, vendor_id, product_rev, product_rev);
56+
}
57+
58+
void setCapacity(uint32_t block_count, uint16_t block_size)
59+
{
60+
setCapacity(0, block_count, block_size);
61+
}
62+
63+
void setUnitReady(bool ready)
64+
{
65+
setUnitReady(0, ready);
66+
}
67+
68+
void setReadWriteCallback(read_callback_t rd_cb, write_callback_t wr_cb, flush_callback_t fl_cb)
69+
{
70+
setReadWriteCallback(0, rd_cb, wr_cb, fl_cb);
71+
}
72+
73+
void setReadyCallback(ready_callback_t cb)
74+
{
75+
setReadyCallback(0, cb);
76+
}
77+
5578
// from Adafruit_USBD_Interface
5679
virtual uint16_t getDescriptor(uint8_t* buf, uint16_t bufsize);
5780

@@ -76,11 +99,12 @@ class Adafruit_USBD_MSC : Adafruit_USBD_Interface
7699
uint8_t _maxlun;
77100

78101
// Make all tinyusb callback friend to access private data
102+
friend void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]);
103+
friend bool tud_msc_test_unit_ready_cb(uint8_t lun);
104+
friend void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size);
79105
friend int32_t tud_msc_read10_cb (uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize);
80106
friend int32_t tud_msc_write10_cb (uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize);
81107
friend void tud_msc_write10_complete_cb (uint8_t lun);
82-
friend void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16], uint8_t product_rev[4]);
83-
friend bool tud_msc_test_unit_ready_cb(uint8_t lun);
84108
};
85109

86110
#endif /* ADAFRUIT_USBD_MSC_H_ */

0 commit comments

Comments
 (0)