diff options
| author | hathach <[email protected]> | 2019-04-26 15:54:42 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2019-04-26 15:54:42 +0700 |
| commit | b74eca4f120ae0d17c4c583d6b865f507f48996a (patch) | |
| tree | 4c58e8b5d19cd453c6d851dda42895f8d0ed652e /src | |
| parent | 99f4c061976349221f62b51a8897528288f6a2cc (diff) | |
add msc multiple lun support
- remove CFG_TUD_MSC_MAXLUN
- add tud_msc_maxlun_cb()
- add msc_dual_lun exmaple
Diffstat (limited to 'src')
| -rw-r--r-- | src/class/msc/msc_device.c | 6 | ||||
| -rw-r--r-- | src/class/msc/msc_device.h | 9 |
2 files changed, 7 insertions, 8 deletions
diff --git a/src/class/msc/msc_device.c b/src/class/msc/msc_device.c index a6b65557c..e2cf92324 100644 --- a/src/class/msc/msc_device.c +++ b/src/class/msc/msc_device.c @@ -163,8 +163,10 @@ bool mscd_control_request(uint8_t rhport, tusb_control_request_t const * p_reque case MSC_REQ_GET_MAX_LUN:
{
- // returned MAX LUN is minus 1 by specs
- uint8_t maxlun = CFG_TUD_MSC_MAXLUN-1;
+ // MAX LUN is minus 1 by specs
+ uint8_t maxlun = 0;
+ if (tud_msc_maxlun_cb) maxlun = tud_msc_maxlun_cb() -1;
+
usbd_control_xfer(rhport, p_request, &maxlun, 1);
}
break;
diff --git a/src/class/msc/msc_device.h b/src/class/msc/msc_device.h index 3ed223509..6e3aef8bb 100644 --- a/src/class/msc/msc_device.h +++ b/src/class/msc/msc_device.h @@ -40,12 +40,6 @@ //--------------------------------------------------------------------+
TU_VERIFY_STATIC(CFG_TUD_MSC_BUFSIZE < UINT16_MAX, "Size is not correct");
-#ifndef CFG_TUD_MSC_MAXLUN
- #define CFG_TUD_MSC_MAXLUN 1
-#elif CFG_TUD_MSC_MAXLUN == 0 || CFG_TUD_MSC_MAXLUN > 16
- #error MSC Device: Incorrect setting of MAX LUN
-#endif
-
#ifndef CFG_TUD_MSC_BUFSIZE
#error CFG_TUD_MSC_BUFSIZE must be defined, value of a block size should work well, the more the better
#endif
@@ -134,6 +128,9 @@ int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_cmd[16], void* buffer, /*------------- Optional callbacks -------------*/
+// Invoked to determine max LUN
+ATTR_WEAK uint8_t tud_msc_maxlun_cb(void);
+
// Invoked when Read10 command is complete
ATTR_WEAK void tud_msc_read10_complete_cb(uint8_t lun);
|
