Skip to content

Commit f7a4c01

Browse files
committed
more than one LUN are available
Former-commit-id: 3490e78
1 parent 5ea1d26 commit f7a4c01

File tree

1 file changed

+15
-21
lines changed

1 file changed

+15
-21
lines changed

libraries/UsbMsd/tu_msd.cpp

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424

2525
#define MAX_LUN 1
2626

27+
#ifdef DEBUG_MSD
28+
extern "C" int mylogadd(const char *fmt, ...) ;
29+
#endif
30+
2731
static const uint8_t VENDOR_ID[8] = {'A', 'R', 'D', 'U', 'I', 'N', 'O', ' '};
2832
static const uint8_t PRODUCT_ID[16] = {'M','A','S','S',' ','S','T','O','R','A','G','E',' ','D','E','V'};
2933
static const uint8_t PRODUCT_REV[4] = {'0','0','0','1'};
@@ -33,8 +37,6 @@ static bool device_available = false;
3337

3438
extern "C" bool tud_msc_set_sense(uint8_t lun, uint8_t sense_key, uint8_t add_sense_code, uint8_t add_sense_qualifier);
3539

36-
37-
3840
#ifdef cplusplus
3941
extern "C" {
4042
#endif
@@ -69,7 +71,7 @@ void usb_msd_set_dev_ptr(USBMSD *ptr) {
6971
// and return failed status in command status wrapper phase.
7072
int32_t tud_msc_read10_cb (uint8_t lun, uint32_t lba, uint32_t offset, void* buffer, uint32_t bufsize) {
7173
if(device_available) {
72-
int rv = dev_ptr->read(lba, offset, buffer, bufsize);
74+
int rv = dev_ptr->read(lun,lba, offset, buffer, bufsize);
7375
return rv;
7476
}
7577
else {
@@ -91,14 +93,9 @@ int32_t tud_msc_read10_cb (uint8_t lun, uint32_t lba, uint32_t offset, void* buf
9193
// and return failed status in command status wrapper phase.
9294
//
9395
// TODO change buffer to const uint8_t*
94-
95-
96-
97-
98-
9996
int32_t tud_msc_write10_cb (uint8_t lun, uint32_t lba, uint32_t offset, uint8_t* buffer, uint32_t bufsize) {
10097
if(device_available) {
101-
int rv = dev_ptr->write(lba, offset, buffer, bufsize);
98+
int rv = dev_ptr->write(lun,lba, offset, buffer, bufsize);
10299
return rv;
103100
}
104101
else {
@@ -122,7 +119,7 @@ void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16
122119
bool tud_msc_test_unit_ready_cb(uint8_t lun) {
123120
/* -------------------------------------------------------------------------- */
124121
if(device_available) {
125-
if(dev_ptr->available()) {
122+
if(dev_ptr->available(lun)) {
126123
/* available no error */
127124
tud_msc_set_sense(0, 0, 0, 0);
128125
return true;
@@ -139,8 +136,8 @@ bool tud_msc_test_unit_ready_cb(uint8_t lun) {
139136
// Application update block count and block size
140137
void tud_msc_capacity_cb(uint8_t lun, uint32_t* block_count, uint16_t* block_size) {
141138
if(device_available) {
142-
*block_count = dev_ptr->get_block_count();
143-
*block_size = dev_ptr->get_block_size();
139+
*block_count = dev_ptr->get_block_count(lun);
140+
*block_size = dev_ptr->get_block_size(lun);
144141
}
145142
else {
146143
*block_count = 0;
@@ -172,18 +169,19 @@ const uint8_t inquiry[] = { 0x00, 0x80, 0x00, 0x01,
172169
const uint8_t sense6[] = { 0x03, 0x00, 0x00, 0x00 };
173170

174171
int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, uint16_t bufsize) {
175-
176172
int32_t resplen = 0;
173+
174+
#ifdef DEBUG_MSD
175+
mylogadd("SCSI cb %X", scsi_cmd[0]);
176+
#endif
177177

178178
switch (scsi_cmd[0]) {
179179
case 0x12: //INQUIRY
180-
181180
resplen = sizeof(inquiry);
182181
memcpy(buffer, inquiry, (size_t) resplen);
183182
break;
184183

185-
case 0x1A: //MODE_SENSE6
186-
184+
case 0x1A: //MODE_SENSE6
187185
resplen = sizeof(sense6);
188186
memcpy(buffer, sense6, (size_t) resplen);
189187
break;
@@ -192,11 +190,7 @@ int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, u
192190
resplen = 0;
193191
break;
194192

195-
196193
default:
197-
198-
199-
//mylogadd("CMD non gestito %i",scsi_cmd[0]);
200194
// Set Sense = Invalid Command Operation
201195
tud_msc_set_sense(lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20, 0x00);
202196

@@ -216,7 +210,7 @@ int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, u
216210
// Invoked when received GET_MAX_LUN request, required for multiple LUNs implementation
217211
uint8_t tud_msc_get_maxlun_cb(void) {
218212
if(device_available) {
219-
return MAX_LUN;
213+
return dev_ptr->get_lun();
220214
}
221215
else {
222216
return 0;

0 commit comments

Comments
 (0)