Multi-Volume. Select Media for LVGL (#21344)
This commit is contained in:
		@@ -32,7 +32,7 @@ Ctrl_status sd_mmc_spi_test_unit_ready() {
 | 
			
		||||
Ctrl_status sd_mmc_spi_read_capacity(uint32_t *nb_sector) {
 | 
			
		||||
  if (!IS_SD_INSERTED() || IS_SD_PRINTING() || IS_SD_FILE_OPEN() || !card.isMounted())
 | 
			
		||||
    return CTRL_NO_PRESENT;
 | 
			
		||||
  *nb_sector = card.getSd2Card().cardSize() - 1;
 | 
			
		||||
  *nb_sector = card.diskIODriver()->cardSize() - 1;
 | 
			
		||||
  return CTRL_GOOD;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -74,24 +74,24 @@ Ctrl_status sd_mmc_spi_usb_read_10(uint32_t addr, uint16_t nb_sector) {
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  // Start reading
 | 
			
		||||
  if (!card.getSd2Card().readStart(addr))
 | 
			
		||||
  if (!card.diskIODriver()->readStart(addr))
 | 
			
		||||
    return CTRL_FAIL;
 | 
			
		||||
 | 
			
		||||
  // For each specified sector
 | 
			
		||||
  while (nb_sector--) {
 | 
			
		||||
 | 
			
		||||
    // Read a sector
 | 
			
		||||
    card.getSd2Card().readData(sector_buf);
 | 
			
		||||
    card.diskIODriver()->readData(sector_buf);
 | 
			
		||||
 | 
			
		||||
    // RAM -> USB
 | 
			
		||||
    if (!udi_msc_trans_block(true, sector_buf, SD_MMC_BLOCK_SIZE, nullptr)) {
 | 
			
		||||
      card.getSd2Card().readStop();
 | 
			
		||||
      card.diskIODriver()->readStop();
 | 
			
		||||
      return CTRL_FAIL;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Stop reading
 | 
			
		||||
  card.getSd2Card().readStop();
 | 
			
		||||
  card.diskIODriver()->readStop();
 | 
			
		||||
 | 
			
		||||
  // Done
 | 
			
		||||
  return CTRL_GOOD;
 | 
			
		||||
@@ -113,7 +113,7 @@ Ctrl_status sd_mmc_spi_usb_write_10(uint32_t addr, uint16_t nb_sector) {
 | 
			
		||||
  }
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  if (!card.getSd2Card().writeStart(addr, nb_sector))
 | 
			
		||||
  if (!card.diskIODriver()->writeStart(addr, nb_sector))
 | 
			
		||||
    return CTRL_FAIL;
 | 
			
		||||
 | 
			
		||||
  // For each specified sector
 | 
			
		||||
@@ -121,16 +121,16 @@ Ctrl_status sd_mmc_spi_usb_write_10(uint32_t addr, uint16_t nb_sector) {
 | 
			
		||||
 | 
			
		||||
    // USB -> RAM
 | 
			
		||||
    if (!udi_msc_trans_block(false, sector_buf, SD_MMC_BLOCK_SIZE, nullptr)) {
 | 
			
		||||
      card.getSd2Card().writeStop();
 | 
			
		||||
      card.diskIODriver()->writeStop();
 | 
			
		||||
      return CTRL_FAIL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Write a sector
 | 
			
		||||
    card.getSd2Card().writeData(sector_buf);
 | 
			
		||||
    card.diskIODriver()->writeData(sector_buf);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Stop writing
 | 
			
		||||
  card.getSd2Card().writeStop();
 | 
			
		||||
  card.diskIODriver()->writeStop();
 | 
			
		||||
 | 
			
		||||
  // Done
 | 
			
		||||
  return CTRL_GOOD;
 | 
			
		||||
 
 | 
			
		||||
@@ -30,54 +30,66 @@
 | 
			
		||||
 | 
			
		||||
class Sd2CardUSBMscHandler : public USBMscHandler {
 | 
			
		||||
public:
 | 
			
		||||
  DiskIODriver* diskIODriver() {
 | 
			
		||||
    #if ENABLED(MULTI_VOLUME)
 | 
			
		||||
      #if SHARED_VOLUME_IS(SD_ONBOARD)
 | 
			
		||||
        return &card.media_sd_spi;
 | 
			
		||||
      #elif SHARED_VOLUME_IS(USB_FLASH_DRIVE)
 | 
			
		||||
        return &card.media_usbFlashDrive;
 | 
			
		||||
      #endif
 | 
			
		||||
    #else
 | 
			
		||||
      return diskIODriver();
 | 
			
		||||
    #endif
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  bool GetCapacity(uint32_t *pBlockNum, uint16_t *pBlockSize) {
 | 
			
		||||
    *pBlockNum = card.getSd2Card().cardSize();
 | 
			
		||||
    *pBlockNum = diskIODriver()->cardSize();
 | 
			
		||||
    *pBlockSize = BLOCK_SIZE;
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  bool Write(uint8_t *pBuf, uint32_t blkAddr, uint16_t blkLen) {
 | 
			
		||||
    auto sd2card = card.getSd2Card();
 | 
			
		||||
    auto sd2card = diskIODriver();
 | 
			
		||||
    // single block
 | 
			
		||||
    if (blkLen == 1) {
 | 
			
		||||
      watchdog_refresh();
 | 
			
		||||
      sd2card.writeBlock(blkAddr, pBuf);
 | 
			
		||||
      sd2card->writeBlock(blkAddr, pBuf);
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // multi block optmization
 | 
			
		||||
    sd2card.writeStart(blkAddr, blkLen);
 | 
			
		||||
    sd2card->writeStart(blkAddr, blkLen);
 | 
			
		||||
    while (blkLen--) {
 | 
			
		||||
      watchdog_refresh();
 | 
			
		||||
      sd2card.writeData(pBuf);
 | 
			
		||||
      sd2card->writeData(pBuf);
 | 
			
		||||
      pBuf += BLOCK_SIZE;
 | 
			
		||||
    }
 | 
			
		||||
    sd2card.writeStop();
 | 
			
		||||
    sd2card->writeStop();
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  bool Read(uint8_t *pBuf, uint32_t blkAddr, uint16_t blkLen) {
 | 
			
		||||
    auto sd2card = card.getSd2Card();
 | 
			
		||||
    auto sd2card = diskIODriver();
 | 
			
		||||
    // single block
 | 
			
		||||
    if (blkLen == 1) {
 | 
			
		||||
      watchdog_refresh();
 | 
			
		||||
      sd2card.readBlock(blkAddr, pBuf);
 | 
			
		||||
      sd2card->readBlock(blkAddr, pBuf);
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // multi block optmization
 | 
			
		||||
    sd2card.readStart(blkAddr);
 | 
			
		||||
    sd2card->readStart(blkAddr);
 | 
			
		||||
    while (blkLen--) {
 | 
			
		||||
      watchdog_refresh();
 | 
			
		||||
      sd2card.readData(pBuf);
 | 
			
		||||
      sd2card->readData(pBuf);
 | 
			
		||||
      pBuf += BLOCK_SIZE;
 | 
			
		||||
    }
 | 
			
		||||
    sd2card.readStop();
 | 
			
		||||
    sd2card->readStop();
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  bool IsReady() {
 | 
			
		||||
    return card.isMounted();
 | 
			
		||||
    return diskIODriver()->isReady();
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -105,8 +117,8 @@ USBMscHandler *pSingleMscHandler = &usbMscHandler;
 | 
			
		||||
void MSC_SD_init() {
 | 
			
		||||
  USBDevice.end();
 | 
			
		||||
  delay(200);
 | 
			
		||||
  USBDevice.begin();
 | 
			
		||||
  USBDevice.registerMscHandlers(1, &pSingleMscHandler, Marlin_STORAGE_Inquirydata);
 | 
			
		||||
  USBDevice.begin();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // __STM32F1__ && HAS_SD_HOST_DRIVE
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user