#
# Marlin Firmware
# PlatformIO Configuration File
#

#################################
#
# STM32F4 Architecture
#
# Naming Example: STM32F401RGT6
#
#   F : Foundation (sometimes High Performance F2/F4)
#   4 : Cortex M4 core
#  01 : Line/Features
#   R : 64 or 66 pins  (V:100, Z:144, I:176)
#   G : 1024KB Flash-memory  (C:256KB, D:384KB, E:512KB)
#   T : LQFP package
#   6 : -40...85°C   (7: ...105°C)
#
#################################

#
# ARMED (STM32)
#
[env:ARMED]
platform      = ${common_stm32.platform}
extends       = common_stm32
board         = armed_v1
build_flags   = ${common_stm32.build_flags}
  -O2 -ffreestanding -fsigned-char -fno-move-loop-invariants -fno-strict-aliasing

#
# STM32F401VE
# 'STEVAL-3DP001V1' STM32F401VE board - https://www.st.com/en/evaluation-tools/steval-3dp001v1.html
#
[env:STM32F401VE_STEVAL]
platform          = ${common_stm32.platform}
extends           = common_stm32
board             = marlin_STEVAL_STM32F401VE
build_flags       = ${common_stm32.build_flags}
  -DARDUINO_STEVAL -DSTM32F401xE
  -DDISABLE_GENERIC_SERIALUSB -DUSBD_USE_CDC_COMPOSITE -DUSE_USB_FS
extra_scripts     = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py

#
# STM32F401RC
#
[env:FYSETC_CHEETAH_V20]
platform          = ${common_stm32.platform}
extends           = common_stm32
board             = marlin_FYSETC_CHEETAH_V20
build_flags       = ${common_stm32.build_flags} -DSTM32F401xC -DVECT_TAB_OFFSET=0xC000
extra_scripts     = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py

#
# FLYF407ZG
#
[env:FLYF407ZG]
platform            = ${common_stm32.platform}
extends             = common_stm32
board               = marlin_STM32F407ZGT6
board_build.variant = MARLIN_FLY_F407ZG
upload_protocol     = dfu
build_flags         = ${common_stm32.build_flags}
  -DVECT_TAB_OFFSET=0x8000
extra_scripts       = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py

#
# FYSETC S6 (STM32F446RET6 ARM Cortex-M4)
#
[env:FYSETC_S6]
platform          = ${common_stm32.platform}
extends           = common_stm32
platform_packages = tool-stm32duino
board             = marlin_fysetc_s6
build_flags       = ${common_stm32.build_flags} -DVECT_TAB_OFFSET=0x10000 -DHAL_PCD_MODULE_ENABLED
extra_scripts     = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
debug_tool        = stlink
upload_protocol   = dfu
upload_command    = dfu-util -a 0 -s 0x08010000:leave -D "$SOURCE"

#
# FYSETC S6 new bootloader
#
[env:FYSETC_S6_8000]
platform                    = ${common_stm32.platform}
extends                     = env:FYSETC_S6
board                       = marlin_fysetc_s6_8000
board_build.offset          = 0x8000
board_upload.offset_address = 0x08008000
build_flags                 = ${common_stm32.build_flags} -DHAL_PCD_MODULE_ENABLED
extra_scripts               = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
  buildroot/share/PlatformIO/scripts/stm32_bootloader.py
upload_command              = dfu-util -a 0 -s 0x08008000:leave -D "$SOURCE"

#
# STM32F407VET6 with RAMPS-like shield
# 'Black' STM32F407VET6 board - https://wiki.stm32duino.com/index.php?title=STM32F407
# Shield - https://github.com/jmz52/Hardware
#
[env:STM32F407VE_black]
platform          = ${common_stm32.platform}
extends           = common_stm32
board             = marlin_blackSTM32F407VET6
build_flags       = ${common_stm32.build_flags}
  -DARDUINO_BLACK_F407VE
  -DUSBD_USE_CDC_COMPOSITE -DUSE_USB_FS
extra_scripts     = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py

#
# Anet ET4-MB_V1.x/ET4P-MB_V1.x (STM32F407VGT6 ARM Cortex-M4)
# For use with with davidtgbe's OpenBLT bootloader https://github.com/davidtgbe/openblt/releases
# Comment out board_build.offset = 0x10000 if you don't plan to use OpenBLT/flashing directly to 0x08000000.
#
[env:Anet_ET4_OpenBLT]
platform             = ${common_stm32.platform}
extends              = common_stm32
build_flags          = ${common_stm32.build_flags} -DHAL_SD_MODULE_ENABLED -DHAL_SRAM_MODULE_ENABLED
board                = marlin_STM32F407VGT6_CCM
board_build.core     = stm32
board_build.variant  = MARLIN_F4x7Vx
board_build.ldscript = ldscript.ld
board_build.encrypt  = firmware.srec
# Just openblt.py (not stm32_bootloader.py) generates the file
board_build.offset   = 0x10000
board_upload.offset_address = 0x08010000
build_unflags        = ${common_stm32.build_unflags} -DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483
debug_tool           = jlink
upload_protocol      = jlink
extra_scripts        = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
  buildroot/share/PlatformIO/scripts/stm32_bootloader.py
  buildroot/share/PlatformIO/scripts/openblt.py

#
# BigTreeTech SKR Pro (STM32F407ZGT6 ARM Cortex-M4)
#
[env:BIGTREE_SKR_PRO]
platform          = ${common_stm32.platform}
extends           = common_stm32
board             = marlin_BigTree_SKR_Pro
build_flags       = ${common_stm32.build_flags}
  -DSTM32F407_5ZX -DVECT_TAB_OFFSET=0x8000
extra_scripts     = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
#upload_protocol   = stlink
#upload_command    = "$PROJECT_PACKAGES_DIR/tool-stm32duino/stlink/ST-LINK_CLI.exe" -c SWD -P "$BUILD_DIR/firmware.bin" 0x8008000 -Rst -Run
debug_tool        = stlink
debug_init_break  =

#
# USB Flash Drive mix-ins for STM32
#
[stm_flash_drive]
platform_packages = framework-arduinoststm32@https://github.com/rhapsodyv/Arduino_Core_STM32/archive/usb-host-msc-cdc-msc-3.zip
build_flags       = ${common_stm32.build_flags}
  -DHAL_PCD_MODULE_ENABLED -DHAL_HCD_MODULE_ENABLED
  -DUSBHOST -DUSBH_IRQ_PRIO=3 -DUSBH_IRQ_SUBPRIO=4

#
# BigTreeTech SKR Pro (STM32F407ZGT6 ARM Cortex-M4) with USB Flash Drive Support
#
[env:BIGTREE_SKR_PRO_usb_flash_drive]
extends           = env:BIGTREE_SKR_PRO
platform_packages = ${stm_flash_drive.platform_packages}
build_unflags     = -DUSBCON -DUSBD_USE_CDC
build_flags       = ${stm_flash_drive.build_flags}
  -DSTM32F407_5ZX -DVECT_TAB_OFFSET=0x8000

#
# BigTreeTech E3 RRF (STM32F407VGT6 ARM Cortex-M4)
#
[env:BIGTREE_E3_RRF]
platform            = ${common_stm32.platform}
extends             = common_stm32
board               = marlin_STM32F407VGT6_CCM
board_build.variant = MARLIN_BIGTREE_E3_RRF
build_flags         = ${common_stm32.build_flags}
  -DSTM32F407_5VX -DVECT_TAB_OFFSET=0x8000
  -DSERIAL_RX_BUFFER_SIZE=255 -DSERIAL_TX_BUFFER_SIZE=255
extra_scripts       = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py

#
# Bigtreetech GTR V1.0 (STM32F407IGT6 ARM Cortex-M4)
#
[env:BIGTREE_GTR_V1_0]
platform          = ${common_stm32.platform}
extends           = common_stm32
board             = marlin_BigTree_GTR_v1
extra_scripts     = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
build_flags       = ${common_stm32.build_flags}
  -DSTM32F407IX -DVECT_TAB_OFFSET=0x8000

#
# Bigtreetech GTR V1.0 (STM32F407IGT6 ARM Cortex-M4) with USB Flash Drive Support
#
[env:BIGTREE_GTR_V1_0_usb_flash_drive]
extends           = env:BIGTREE_GTR_V1_0
platform_packages = ${stm_flash_drive.platform_packages}
build_unflags     = -DUSBCON -DUSBD_USE_CDC
build_flags       = ${stm_flash_drive.build_flags}
  -DSTM32F407IX -DVECT_TAB_OFFSET=0x8000

#
# BigTreeTech BTT002 V1.0 (STM32F407VGT6 ARM Cortex-M4)
#
[env:BIGTREE_BTT002]
platform          = ${common_stm32.platform}
extends           = common_stm32
board             = marlin_BigTree_BTT002
build_flags       = ${common_stm32.build_flags}
  -DSTM32F407_5VX -DVECT_TAB_OFFSET=0x8000
  -DHAVE_HWSERIAL2
  -DHAVE_HWSERIAL3
  -DPIN_SERIAL2_RX=PD_6
  -DPIN_SERIAL2_TX=PD_5
extra_scripts     = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py

#
# BigTreeTech SKR V2.0 (STM32F407VGT6 ARM Cortex-M4) with USB Flash Drive Support
#
[env:BIGTREE_SKR_2]
platform             = ${common_stm32.platform}
platform_packages    = ${stm_flash_drive.platform_packages}
extends              = common_stm32
board                = marlin_STM32F407VGT6_CCM
board_build.core     = stm32
board_build.variant  = MARLIN_F4x7Vx
board_build.ldscript = ldscript.ld
board_build.offset   = 0x8000
board_upload.offset_address = 0x08008000
extra_scripts     = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
  buildroot/share/PlatformIO/scripts/stm32_bootloader.py
build_flags       = ${stm_flash_drive.build_flags}
  -DUSE_USBHOST_HS -DUSE_USB_HS_IN_FS -DUSBD_IRQ_PRIO=5 -DUSBD_IRQ_SUBPRIO=6
  -DHSE_VALUE=8000000U -DHAL_SD_MODULE_ENABLED

#
# BigTreeTech Octopus V1.0/1.1 (STM32F446ZET6 ARM Cortex-M4)
#
[env:BIGTREE_OCTOPUS_V1]
platform          = ${common_stm32.platform}
extends           = common_stm32
board             = marlin_BigTree_Octopus_v1
extra_scripts     = ${common.extra_scripts}
    pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
build_flags       = ${common_stm32.build_flags}
  -DSTM32F446_5VX -DVECT_TAB_OFFSET=0x8000 -DUSE_USB_HS_IN_FS

#
# BigTreeTech Octopus V1.0/1.1 (STM32F446ZET6 ARM Cortex-M4) with USB Flash Drive Support
#
[env:BIGTREE_OCTOPUS_V1_USB]
extends           = env:BIGTREE_OCTOPUS_V1
platform_packages = ${stm_flash_drive.platform_packages}
#build_unflags     = -DUSBCON -DUSBD_USE_CDC
build_flags       = ${stm_flash_drive.build_flags}
  -DSTM32F446_5VX -DVECT_TAB_OFFSET=0x8000
  -DUSBCON -DUSE_USBHOST_HS -DUSBD_IRQ_PRIO=5 -DUSBD_IRQ_SUBPRIO=6 -DUSE_USB_HS_IN_FS -DUSBD_USE_CDC_MSC

#
# Lerdge base
#
[lerdge_common]
platform            = ${common_stm32.platform}
extends             = common_stm32
board               = marlin_STM32F407ZGT6
board_build.variant = MARLIN_LERDGE
board_build.offset  = 0x10000
board_build.encrypt = firmware.bin
extra_scripts       = ${common.extra_scripts}
                      pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
                      buildroot/share/PlatformIO/scripts/stm32_bootloader.py
                      buildroot/share/PlatformIO/scripts/lerdge.py
build_flags         = ${common_stm32.build_flags}
  -DSTM32F4 -DSTM32F4xx -DTARGET_STM32F4
  -DDISABLE_GENERIC_SERIALUSB -DARDUINO_ARCH_STM32 -DARDUINO_LERDGE
  -DHAL_SRAM_MODULE_ENABLED
build_unflags       = ${common_stm32.build_unflags} -DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483

#
# Lerdge X
#
[env:LERDGEX]
platform            = ${lerdge_common.platform}
extends             = lerdge_common
board_build.encrypt = Lerdge_X_firmware_force.bin

#
# Lerdge X with USB Flash Drive Support
#
[env:LERDGEX_usb_flash_drive]
platform          = ${env:LERDGEX.platform}
extends           = env:LERDGEX
platform_packages = ${stm_flash_drive.platform_packages}
build_flags       = ${stm_flash_drive.build_flags} ${lerdge_common.build_flags}

#
# Lerdge S
#
[env:LERDGES]
platform            = ${lerdge_common.platform}
extends             = lerdge_common
board_build.encrypt = Lerdge_firmware_force.bin

#
# Lerdge S with USB Flash Drive Support
#
[env:LERDGES_usb_flash_drive]
platform          = ${env:LERDGES.platform}
extends           = env:LERDGES
platform_packages = ${stm_flash_drive.platform_packages}
build_flags       = ${stm_flash_drive.build_flags} ${lerdge_common.build_flags}

#
# Lerdge K
#
[env:LERDGEK]
platform            = ${lerdge_common.platform}
extends             = lerdge_common
board_build.encrypt = Lerdge_K_firmware_force.bin
build_flags         = ${lerdge_common.build_flags} -DLERDGEK

#
# Lerdge K with USB Flash Drive Support
#
[env:LERDGEK_usb_flash_drive]
platform          = ${env:LERDGEK.platform}
extends           = env:LERDGEK
platform_packages = ${stm_flash_drive.platform_packages}
build_flags       = ${stm_flash_drive.build_flags} ${lerdge_common.build_flags}

#
# RUMBA32
#
[env:rumba32]
platform             = ${common_stm32.platform}
extends              = common_stm32
build_flags          = ${common_stm32.build_flags}
  -Os
  -DHAL_PCD_MODULE_ENABLED
  -DDISABLE_GENERIC_SERIALUSB
  -DHAL_UART_MODULE_ENABLED
  -DTIMER_SERIAL=TIM9
board                = rumba32_f446ve
upload_protocol      = dfu
monitor_speed        = 500000
board_build.core     = stm32
board_build.variant  = MARLIN_F446VE
board_build.ldscript = ldscript.ld
board_build.offset   = 0x0000
extra_scripts        = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
  buildroot/share/PlatformIO/scripts/stm32_bootloader.py

#
# MKS Robin Pro V2
#
[env:mks_robin_pro2]
platform             = ${common_stm32.platform}
platform_packages    = ${stm_flash_drive.platform_packages}
extends              = common_stm32
build_flags          = ${stm_flash_drive.build_flags}
board                = genericSTM32F407VET6
board_build.core     = stm32
board_build.variant  = MARLIN_F4x7Vx
board_build.ldscript = ldscript.ld
board_build.offset   = 0x0000
board_upload.offset_address = 0x08000000
build_unflags        = ${common_stm32.build_unflags} -DUSBCON -DUSBD_USE_CDC
debug_tool           = jlink
upload_protocol      = jlink
extra_scripts        = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
  buildroot/share/PlatformIO/scripts/stm32_bootloader.py

#
# This SPI is used by Robin Nano V3
#
[stm32f4_I2C1]
build_flags = -DPIN_WIRE_SCL=PB6 -DPIN_WIRE_SDA=PB7

#
# MKS Robin Nano V3
#
[env:mks_robin_nano_v3]
platform             = ${common_stm32.platform}
extends              = common_stm32
build_flags          = ${common_stm32.build_flags} ${stm32f4_I2C1.build_flags} -DHAL_PCD_MODULE_ENABLED -DUSBCON -DUSBD_USE_CDC
board                = marlin_STM32F407VGT6_CCM
board_build.core     = stm32
board_build.variant  = MARLIN_F4x7Vx
board_build.ldscript = ldscript.ld
board_build.rename   = Robin_nano_v3.bin
board_build.offset   = 0xC000
board_upload.offset_address = 0x0800C000
build_unflags        = ${common_stm32.build_unflags}
debug_tool           = jlink
upload_protocol      = jlink
extra_scripts        = ${common.extra_scripts}
  pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
  buildroot/share/PlatformIO/scripts/stm32_bootloader.py

#
# MKS Robin Nano V3 with USB Flash Drive Support
# Currently, using a STM32duino fork, until USB Host get merged
#
[env:mks_robin_nano_v3_usb_flash_drive]
extends           = env:mks_robin_nano_v3
platform_packages = ${stm_flash_drive.platform_packages}
build_flags       = ${stm_flash_drive.build_flags} ${stm32f4_I2C1.build_flags}
  -DUSBCON
  -DUSE_USBHOST_HS
  -DUSBD_IRQ_PRIO=5
  -DUSBD_IRQ_SUBPRIO=6
  -DUSE_USB_HS_IN_FS
  -DUSBD_USE_CDC

#
# MKS Robin Nano V3 with USB Flash Drive Support and Shared Media
# Currently, using a STM32duino fork, until USB Host and USB Device MSC get merged
#
[env:mks_robin_nano_v3_usb_flash_drive_msc]
platform          = ${common_stm32.platform}
extends           = env:mks_robin_nano_v3
platform_packages = framework-arduinoststm32@https://github.com/rhapsodyv/Arduino_Core_STM32/archive/usb-host-msc-cdc-msc-3.zip
build_unflags     = ${common_stm32.build_unflags} -DUSBD_USE_CDC
build_flags       = ${stm_flash_drive.build_flags} ${stm32f4_I2C1.build_flags}
  -DUSBCON
  -DUSE_USBHOST_HS
  -DUSBD_IRQ_PRIO=5
  -DUSBD_IRQ_SUBPRIO=6
  -DUSE_USB_HS_IN_FS
  -DUSBD_USE_CDC_MSC