24
24
25
25
#define MAX_LUN 1
26
26
27
+ #ifdef DEBUG_MSD
28
+ extern " C" int mylogadd (const char *fmt, ...) ;
29
+ #endif
30
+
27
31
static const uint8_t VENDOR_ID[8 ] = {' A' , ' R' , ' D' , ' U' , ' I' , ' N' , ' O' , ' ' };
28
32
static const uint8_t PRODUCT_ID[16 ] = {' M' ,' A' ,' S' ,' S' ,' ' ,' S' ,' T' ,' O' ,' R' ,' A' ,' G' ,' E' ,' ' ,' D' ,' E' ,' V' };
29
33
static const uint8_t PRODUCT_REV[4 ] = {' 0' ,' 0' ,' 0' ,' 1' };
@@ -33,8 +37,6 @@ static bool device_available = false;
33
37
34
38
extern " C" bool tud_msc_set_sense (uint8_t lun, uint8_t sense_key, uint8_t add_sense_code, uint8_t add_sense_qualifier);
35
39
36
-
37
-
38
40
#ifdef cplusplus
39
41
extern " C" {
40
42
#endif
@@ -69,7 +71,7 @@ void usb_msd_set_dev_ptr(USBMSD *ptr) {
69
71
// and return failed status in command status wrapper phase.
70
72
int32_t tud_msc_read10_cb (uint8_t lun, uint32_t lba, uint32_t offset, void * buffer, uint32_t bufsize) {
71
73
if (device_available) {
72
- int rv = dev_ptr->read (lba, offset, buffer, bufsize);
74
+ int rv = dev_ptr->read (lun, lba, offset, buffer, bufsize);
73
75
return rv;
74
76
}
75
77
else {
@@ -91,14 +93,9 @@ int32_t tud_msc_read10_cb (uint8_t lun, uint32_t lba, uint32_t offset, void* buf
91
93
// and return failed status in command status wrapper phase.
92
94
//
93
95
// TODO change buffer to const uint8_t*
94
-
95
-
96
-
97
-
98
-
99
96
int32_t tud_msc_write10_cb (uint8_t lun, uint32_t lba, uint32_t offset, uint8_t * buffer, uint32_t bufsize) {
100
97
if (device_available) {
101
- int rv = dev_ptr->write (lba, offset, buffer, bufsize);
98
+ int rv = dev_ptr->write (lun, lba, offset, buffer, bufsize);
102
99
return rv;
103
100
}
104
101
else {
@@ -122,7 +119,7 @@ void tud_msc_inquiry_cb(uint8_t lun, uint8_t vendor_id[8], uint8_t product_id[16
122
119
bool tud_msc_test_unit_ready_cb (uint8_t lun) {
123
120
/* -------------------------------------------------------------------------- */
124
121
if (device_available) {
125
- if (dev_ptr->available ()) {
122
+ if (dev_ptr->available (lun )) {
126
123
/* available no error */
127
124
tud_msc_set_sense (0 , 0 , 0 , 0 );
128
125
return true ;
@@ -139,8 +136,8 @@ bool tud_msc_test_unit_ready_cb(uint8_t lun) {
139
136
// Application update block count and block size
140
137
void tud_msc_capacity_cb (uint8_t lun, uint32_t * block_count, uint16_t * block_size) {
141
138
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 );
144
141
}
145
142
else {
146
143
*block_count = 0 ;
@@ -172,18 +169,19 @@ const uint8_t inquiry[] = { 0x00, 0x80, 0x00, 0x01,
172
169
const uint8_t sense6[] = { 0x03 , 0x00 , 0x00 , 0x00 };
173
170
174
171
int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16 ], void * buffer, uint16_t bufsize) {
175
-
176
172
int32_t resplen = 0 ;
173
+
174
+ #ifdef DEBUG_MSD
175
+ mylogadd (" SCSI cb %X" , scsi_cmd[0 ]);
176
+ #endif
177
177
178
178
switch (scsi_cmd[0 ]) {
179
179
case 0x12 : // INQUIRY
180
-
181
180
resplen = sizeof (inquiry);
182
181
memcpy (buffer, inquiry, (size_t ) resplen);
183
182
break ;
184
183
185
- case 0x1A : // MODE_SENSE6
186
-
184
+ case 0x1A : // MODE_SENSE6
187
185
resplen = sizeof (sense6);
188
186
memcpy (buffer, sense6, (size_t ) resplen);
189
187
break ;
@@ -192,11 +190,7 @@ int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, u
192
190
resplen = 0 ;
193
191
break ;
194
192
195
-
196
193
default :
197
-
198
-
199
- // mylogadd("CMD non gestito %i",scsi_cmd[0]);
200
194
// Set Sense = Invalid Command Operation
201
195
tud_msc_set_sense (lun, SCSI_SENSE_ILLEGAL_REQUEST, 0x20 , 0x00 );
202
196
@@ -216,7 +210,7 @@ int32_t tud_msc_scsi_cb(uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, u
216
210
// Invoked when received GET_MAX_LUN request, required for multiple LUNs implementation
217
211
uint8_t tud_msc_get_maxlun_cb (void ) {
218
212
if (device_available) {
219
- return MAX_LUN ;
213
+ return dev_ptr-> get_lun () ;
220
214
}
221
215
else {
222
216
return 0 ;
0 commit comments