From b74eca4f120ae0d17c4c583d6b865f507f48996a Mon Sep 17 00:00:00 2001 From: hathach Date: Fri, 26 Apr 2019 15:54:42 +0700 Subject: add msc multiple lun support - remove CFG_TUD_MSC_MAXLUN - add tud_msc_maxlun_cb() - add msc_dual_lun exmaple --- src/class/msc/msc_device.c | 6 ++++-- src/class/msc/msc_device.h | 9 +++------ 2 files changed, 7 insertions(+), 8 deletions(-) (limited to 'src') 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); -- cgit v1.3.1