Skip to content

Commit

Permalink
Improve USB Media Host conditions (MarlinFirmware#20176)
Browse files Browse the repository at this point in the history
Co-authored-by: Scott Lahteine <[email protected]>
  • Loading branch information
2 people authored and chrisjenda committed Apr 5, 2021
1 parent a9f7dfa commit 6740f60
Show file tree
Hide file tree
Showing 11 changed files with 40 additions and 32 deletions.
4 changes: 4 additions & 0 deletions Marlin/src/HAL/LPC1768/inc/Conditionals_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,7 @@
*
*/
#pragma once

#if DISABLED(NO_SD_HOST_DRIVE)
#define HAS_SD_HOST_DRIVE 1
#endif
4 changes: 2 additions & 2 deletions Marlin/src/HAL/LPC1768/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ void HAL_init() {
delay(1000); // Give OS time to notice
USB_Connect(TRUE);

#if DISABLED(NO_SD_HOST_DRIVE)
#if HAS_SD_HOST_DRIVE
MSC_SD_Init(0); // Enable USB SD card access
#endif

Expand All @@ -140,7 +140,7 @@ void HAL_init() {

// HAL idle task
void HAL_idletask() {
#if HAS_SHARED_MEDIA
#if HAS_SD_HOST_DRIVE
// If Marlin is using the SD card we need to lock it to prevent access from
// a PC via USB.
// Other HALs use IS_SD_PRINTING() and IS_SD_FILE_OPEN() to check for access but
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/HAL/STM32/Sd2Card_sdio_stm32duino.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
#error "ERROR - Only STM32F103xE, STM32F103xG, STM32F4xx or STM32F7xx CPUs supported"
#endif

#ifdef USBD_USE_CDC_COMPOSITE
#if HAS_SD_HOST_DRIVE

// use USB drivers

Expand Down
4 changes: 4 additions & 0 deletions Marlin/src/HAL/STM32/inc/Conditionals_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,7 @@
*
*/
#pragma once

#if defined(USBD_USE_CDC_COMPOSITE) && DISABLED(NO_SD_HOST_DRIVE)
#define HAS_SD_HOST_DRIVE 1
#endif
24 changes: 11 additions & 13 deletions Marlin/src/HAL/STM32F1/HAL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@
// Public Variables
// ------------------------

#if (defined(SERIAL_USB) && !defined(USE_USB_COMPOSITE))
#if defined(SERIAL_USB) && !HAS_SD_HOST_DRIVE
USBSerial SerialUSB;
#endif

Expand Down Expand Up @@ -251,7 +251,7 @@ void HAL_init() {
#if PIN_EXISTS(LED)
OUT_WRITE(LED_PIN, LOW);
#endif
#ifdef USE_USB_COMPOSITE
#if HAS_SD_HOST_DRIVE
MSC_SD_init();
#endif
#if PIN_EXISTS(USB_CONNECT)
Expand All @@ -263,17 +263,15 @@ void HAL_init() {

// HAL idle task
void HAL_idletask() {
#ifdef USE_USB_COMPOSITE
#if HAS_SHARED_MEDIA
// If Marlin is using the SD card we need to lock it to prevent access from
// a PC via USB.
// Other HALs use IS_SD_PRINTING() and IS_SD_FILE_OPEN() to check for access but
// this will not reliably detect delete operations. To be safe we will lock
// the disk if Marlin has it mounted. Unfortunately there is currently no way
// to unmount the disk from the LCD menu.
// if (IS_SD_PRINTING() || IS_SD_FILE_OPEN())
/* copy from lpc1768 framework, should be fixed later for process HAS_SHARED_MEDIA*/
#endif
#if HAS_SD_HOST_DRIVE
// If Marlin is using the SD card we need to lock it to prevent access from
// a PC via USB.
// Other HALs use IS_SD_PRINTING() and IS_SD_FILE_OPEN() to check for access but
// this will not reliably detect delete operations. To be safe we will lock
// the disk if Marlin has it mounted. Unfortunately there is currently no way
// to unmount the disk from the LCD menu.
// if (IS_SD_PRINTING() || IS_SD_FILE_OPEN())
/* copy from lpc1768 framework, should be fixed later for process HAS_SD_HOST_DRIVE*/
// process USB mass storage device class loop
MarlinMSC.loop();
#endif
Expand Down
4 changes: 2 additions & 2 deletions Marlin/src/HAL/STM32F1/HAL.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@

#include "../../inc/MarlinConfigPre.h"

#ifdef USE_USB_COMPOSITE
#if HAS_SD_HOST_DRIVE
#include "msc_sd.h"
#endif

Expand All @@ -61,7 +61,7 @@
#endif

#ifdef SERIAL_USB
#ifndef USE_USB_COMPOSITE
#if !HAS_SD_HOST_DRIVE
#define UsbSerial Serial
#else
#define UsbSerial MarlinCompositeSerial
Expand Down
5 changes: 0 additions & 5 deletions Marlin/src/HAL/STM32F1/inc/Conditionals_LCD.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,3 @@
*
*/
#pragma once

#if ENABLED(USE_USB_COMPOSITE)
//#warning "SD_CHECK_AND_RETRY isn't needed with USE_USB_COMPOSITE."
#undef SD_CHECK_AND_RETRY
#endif
8 changes: 8 additions & 0 deletions Marlin/src/HAL/STM32F1/inc/Conditionals_adv.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,11 @@
*
*/
#pragma once

#ifdef USE_USB_COMPOSITE
//#warning "SD_CHECK_AND_RETRY isn't needed with USE_USB_COMPOSITE."
#undef SD_CHECK_AND_RETRY
#if DISABLED(NO_SD_HOST_DRIVE)
#define HAS_SD_HOST_DRIVE 1
#endif
#endif
4 changes: 2 additions & 2 deletions Marlin/src/HAL/STM32F1/msc_sd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#if defined(__STM32F1__) && defined(USE_USB_COMPOSITE)
#if defined(__STM32F1__) && HAS_SD_HOST_DRIVE

#include "msc_sd.h"
#include "SPI.h"
Expand Down Expand Up @@ -77,4 +77,4 @@ void MSC_SD_init() {
#endif
}

#endif // __STM32F1__ && USE_USB_COMPOSITE
#endif // __STM32F1__ && HAS_SD_HOST_DRIVE
9 changes: 5 additions & 4 deletions Marlin/src/HAL/STM32F1/onboard_sd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@
#include "SPI.h"
#include "fastio.h"

#if HAS_SHARED_MEDIA
#ifndef ONBOARD_SPI_DEVICE
#define ONBOARD_SPI_DEVICE SPI_DEVICE
#endif
#ifndef ONBOARD_SPI_DEVICE
#define ONBOARD_SPI_DEVICE SPI_DEVICE
#endif

#if HAS_SD_HOST_DRIVE
#define ONBOARD_SD_SPI SPI
#else
SPIClass OnboardSPI(ONBOARD_SPI_DEVICE);
Expand Down
4 changes: 1 addition & 3 deletions Marlin/src/inc/Conditionals_post.h
Original file line number Diff line number Diff line change
Expand Up @@ -359,14 +359,13 @@
*/
#if ENABLED(SDSUPPORT)

#if SD_CONNECTION_IS(ONBOARD) && DISABLED(NO_SD_HOST_DRIVE) && !defined(ARDUINO_GRAND_CENTRAL_M4)
#if HAS_SD_HOST_DRIVE && SD_CONNECTION_IS(ONBOARD)
//
// The external SD card is not used. Hardware SPI is used to access the card.
// When sharing the SD card with a PC we want the menu options to
// mount/unmount the card and refresh it. So we disable card detect.
//
#undef SD_DETECT_PIN
#define HAS_SHARED_MEDIA 1
#endif

#if PIN_EXISTS(SD_DETECT)
Expand All @@ -380,7 +379,6 @@
#define SD_DETECT_STATE LOW
#endif
#endif

#endif

#if ANY(HAS_GRAPHICAL_TFT, LCD_USE_DMA_FSMC, HAS_FSMC_GRAPHICAL_TFT, HAS_SPI_GRAPHICAL_TFT) || !PIN_EXISTS(SD_DETECT)
Expand Down

0 comments on commit 6740f60

Please sign in to comment.