From 1e460578b8774de5708c6dd9c589abbcdf4d297c Mon Sep 17 00:00:00 2001 From: Daniel Castilho Date: Thu, 4 May 2023 09:43:06 -0300 Subject: [PATCH] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit cfbd8a2e3665585cecb749de6428c749f833273f Author: thinkyhead Date: Thu May 4 00:20:30 2023 +0000 [cron] Bump distribution date (2023-05-04) commit 7642bfbf8b997308e691034aa294a061c5fc5426 Author: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Wed May 3 14:19:32 2023 -0700 🐛 Fix TFT Touch Calibration overrides (#25579) …and other misc. display-related updates Co-authored-by: Scott Lahteine commit dbed3f1c418e1f6edc4d74f5e29659245f6841b0 Author: thinkyhead Date: Wed May 3 00:20:18 2023 +0000 [cron] Bump distribution date (2023-05-03) commit e1f6435d4410478930ef5fb7d99a311332f3cee8 Author: Scott Lahteine Date: Tue May 2 17:59:27 2023 -0500 ✨ Creality STM32F401RE board (e.g., Ender-5 S1) (#25773) commit 21ea9bf50fbde8b5494d92ac28bc6cfb197a7718 Author: plampix Date: Tue May 2 23:50:07 2023 +0200 🐛 Fix minimal M115, Cap:PROGRESS:0 (#25769) Co-authored-by: Scott Lahteine commit 137ea434227094f675467a9b34c4220e86aa807c Author: ellensp <530024+ellensp@users.noreply.github.com> Date: Wed May 3 09:15:10 2023 +1200 ✨ Creality Ender-2 (Melzi) (#25754) commit 9aa69cbc85c9559e2671127d6d6e4298001a6bd5 Author: plampix Date: Tue May 2 07:01:44 2023 +0200 Fix G12 Nozzle Clean (#25766) Followup to #25666 commit 61f0dd227177419ade6b2454afaec422f41fcc03 Author: Scott Lahteine Date: Mon May 1 20:23:41 2023 -0500 🩹 Fix _CAN_HOME for new endstop flags commit 207535af9d4c4fd5e3cf61bc8f38c082892d1bf1 Author: Scott Lahteine Date: Mon May 1 20:33:58 2023 -0500 🔨 Fix Multi-Language Menu criteria commit 4812ed5053983212c9ec8a6229a150a1af7822f1 Author: Scott Lahteine Date: Mon May 1 18:45:42 2023 -0500 🎨 Misc. code cleanup commit f89fa4cec79c3f034b8bfc868523a1df19520970 Author: thinkyhead Date: Tue May 2 00:24:02 2023 +0000 [cron] Bump distribution date (2023-05-02) commit b042567f76b92d177e355dd2fc55b1b043fdff36 Author: Scott Lahteine Date: Mon May 1 18:15:31 2023 -0500 🩹 Fix TFT sanity error commit 4bed8a89dbf0726700cfef44a38961d2bb6c6716 Author: Scott Mikutsky Date: Mon May 1 02:10:46 2023 -0400 🐛 Fix STM32 USB disconnect behavior (#25762) commit 006a9e514b68bc10ae069f0715bf5d7a44e5b6a7 Author: Scott Lahteine Date: Sun Apr 30 23:10:44 2023 -0500 🩹 NOZZLE_CLEAN_PATTERN_* Followup Followup to #25666 commit 55cbe15b811975156a4d2b2a1a9ecffd872ee951 Author: Scott Lahteine Date: Sun Apr 30 19:14:53 2023 -0500 🔧 Remove config.ini obsolete options commit 35dd6a3f77f17f7a0216c242916d4fc08521e2b3 Author: thinkyhead Date: Mon May 1 00:22:20 2023 +0000 [cron] Bump distribution date (2023-05-01) commit 9773160639e1670b81ff64325d3c17d591b32575 Author: Scott Lahteine Date: Sun Apr 30 18:24:05 2023 -0500 🔧 Character display has boot screen commit f246e0d0e417f8178a22bcad545bc2938c95b394 Author: Scott Lahteine Date: Sun Apr 30 18:12:13 2023 -0500 🔧 Fix X2/Y2 axis pins check commit 4937a64bccdb449569c30ebc234f2f0cc102be9e Author: Scott Lahteine Date: Sun Apr 30 18:12:21 2023 -0500 🧑‍💻 Use NUM_AXIS_ARRAY commit b88ab391bb7199e5774610efd41f1f82a14ba8d2 Author: ellensp <530024+ellensp@users.noreply.github.com> Date: Mon May 1 09:52:29 2023 +1200 🐛 Fix Ender-2 Stock LCD on MELZI_CREALITY (#25759) commit 3b50b6aeb1dec836d6bf26f0c8af2b5bb1b7de48 Author: Davide Rombolà Date: Sun Apr 30 23:36:47 2023 +0200 🔧 Allow BLTOUCH_HS_EXTRA_CLEARANCE == 0 (#25760) commit ec6bc15d1b52f480e88ad4a21c87f175d1388226 Author: Scott Lahteine Date: Sat Apr 29 20:10:33 2023 -0500 🐛 Fix FT Motion reversed Z commit 5aef2c0afa7807dce16eb4cc49eaaa6bd3a9e714 Author: thinkyhead Date: Sun Apr 30 00:22:44 2023 +0000 [cron] Bump distribution date (2023-04-30) commit 4c033c3e47b80a9d2497b47a7d3f1ef5034ff4d0 Author: Scott Lahteine Date: Sat Apr 29 12:34:56 2023 -0500 🧑‍💻 Tweak homing debug commit f9db5ab965f39c594029301d20358cc7150f233a Author: thinkyhead Date: Sat Apr 29 00:20:26 2023 +0000 [cron] Bump distribution date (2023-04-29) commit c5a2e41647a12ef16b280975ab713e080e831e46 Author: James Pearson Date: Fri Apr 28 23:30:15 2023 +0100 🐛 Probe behavior corrections (#25631) Co-authored-by: Scott Lahteine Co-authored-by: David Fries <2767875+dfries@users.noreply.github.com> commit 7d95928cbb3de6c677bf76110097c0aa21965740 Author: Scott Lahteine Date: Fri Apr 28 13:38:59 2023 -0500 🐛 Fix auto pullup/down settings Followup to #25748 commit a872232b15d63c73c5c5ce281e3d1dcadb47b608 Author: Scott Lahteine Date: Fri Apr 28 11:03:38 2023 -0500 🔧 Move MMU section commit 6323de309fc6b54f67121c147240c060ecc6c143 Author: Scott Lahteine Date: Fri Apr 28 11:03:20 2023 -0500 🔨 Fix LPC faux pins Followup to #25332 commit 0e2c5b45ece8ebe591e27cebe9570f9049a55f83 Author: thinkyhead Date: Fri Apr 28 00:21:29 2023 +0000 [cron] Bump distribution date (2023-04-28) commit 959f7308e760d85cdbfe90ea3581f42811823389 Author: TheSnowfield <17957399+TheSnowfield@users.noreply.github.com> Date: Thu Apr 27 20:37:11 2023 +0800 ✨ AUTO_REPORT_REAL_POSITION option for M154 (#25738) commit 9a7d9e6995f4f66c4b48147ec7876d49d4b3ae77 Author: Martin Turski Date: Thu Apr 27 14:05:24 2023 +0200 🧑‍💻 Optimize PlatformIO source filtering (#25332) Co-authored-by: Scott Lahteine commit 774861b15ddd850b34404e3daf931bf12f990919 Author: Scott Lahteine Date: Wed Apr 26 20:04:01 2023 -0500 🔧 Endstops followup commit 04a25ab49686a71f448e3605a192917d03f86a95 Author: thinkyhead Date: Thu Apr 27 00:22:32 2023 +0000 [cron] Bump distribution date (2023-04-27) commit 467ab74523087a852ab50939d86a0ca0b78f17ad Author: Scott Lahteine Date: Wed Apr 26 14:56:23 2023 -0500 🧑‍💻 Simplify endstops config (#25748) commit 358a54ecdc4e13d46d3859485255ef0856e3f2ba Author: Scott Lahteine Date: Wed Apr 26 14:39:56 2023 -0500 🔨 Servo Timer 1 with STM32F103RC_fysetc (#25741) commit 79b455575b79fb329afd2ddb9d5c2634de954e15 Author: Giuliano Zaro <3684609+GMagician@users.noreply.github.com> Date: Wed Apr 26 21:38:39 2023 +0200 🔧 Thermistor 100 : SoC sensor (#25745) Followup to #25642 commit d364babbc0cdb73337d86e2c4fd9170b46b7361a Author: Scott Lahteine Date: Wed Apr 26 14:29:21 2023 -0500 🧑‍💻 Change HAL_PATH macro for easier HAL relocation (#25743) commit 1771d7ab64e2cb5bb339370a373ea0e6dbed82e1 Author: Scott Lahteine Date: Wed Apr 26 13:51:33 2023 -0500 ✅ Skip change alerts in CI test commit 68f74784a3a41c643984ee62a507b25903430591 Author: Scott Lahteine Date: Wed Apr 26 13:50:45 2023 -0500 🎨 Misc. fixes, cleanup commit 08edb6282f7c85f785bd838be9ef59ef247e61a2 Author: Scott Lahteine Date: Wed Apr 26 02:57:53 2023 -0500 🔧 Extra axis endstop defaults commit a4cc9b60fd27c3b4ac81c322107fa4a041cb51b5 Author: thinkyhead Date: Wed Apr 26 00:21:12 2023 +0000 [cron] Bump distribution date (2023-04-26) commit f5a905a64121e4ff43894d295ce6990e55aa1149 Author: Giuliano Zaro <3684609+GMagician@users.noreply.github.com> Date: Tue Apr 25 04:51:44 2023 +0200 ✨ TEMP_SENSOR_SOC (#25642) Co-authored-by: Scott Lahteine commit d1738e946abda285f9841ca4329d43b86f7e297f Author: Scott Lahteine Date: Mon Apr 24 21:40:08 2023 -0500 🔧 Fix LCD_SERIAL_PORT config commit 650e6fc42691a634c0a2f303734a6023e80eeecc Author: Anson Liu Date: Mon Apr 24 22:07:12 2023 -0400 🔨 Prevent SlowSoftWire + Wire name conflict (#25707) commit c034819cf8b81626cc0af719cdcc776ffdb6269f Author: thinkyhead Date: Tue Apr 25 00:20:57 2023 +0000 [cron] Bump distribution date (2023-04-25) commit 077a620e21fcb1cd355129a56f12125d067f2e0f Author: Scott Lahteine Date: Mon Apr 24 05:24:10 2023 -0500 📝 Developer note in boards.h commit 2954bf26979e43c6b36ca2739af4e887b651f3f8 Author: Scott Lahteine Date: Mon Apr 24 00:24:40 2023 -0500 🌐 Replace '=' with '{' for substitution commit 743903b96fd64ef8cbe23d84eed7de1e29b1abed Author: Nick Date: Mon Apr 24 01:50:39 2023 +0100 🩹 Fix Anycubic PlayTune (#25735) Followup to #25690 Co-authored-by: Scott Lahteine commit 02a14d31b2bbe6f723dc8da75f1f124a99deedba Author: thinkyhead Date: Mon Apr 24 00:21:28 2023 +0000 [cron] Bump distribution date (2023-04-24) commit df4f80622eb262fe39cc898e0237257b2870aa7f Author: plampix Date: Mon Apr 24 01:12:47 2023 +0200 ✨ NOZZLE_CLEAN_PATTERN_* (#25666) Co-authored-by: Scott Lahteine commit 9902097d916e42977e7a4992e2e5773d5e5e9731 Author: ellensp <530024+ellensp@users.noreply.github.com> Date: Mon Apr 24 11:11:02 2023 +1200 🔨 Gather GD32, suppress redundant #error (#25665) Co-authored-by: Scott Lahteine commit 10ed5ab01c43a09429e1eb885196308fca71f492 Author: Scott Lahteine Date: Sun Apr 23 03:17:55 2023 -0500 🚸 Improve PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED (#25681) commit 166935641a335664213cf21ff7ffe08c10eaf5be Author: Scott Lahteine Date: Sun Apr 23 03:00:56 2023 -0500 🔧 Split followup commit aaf55a21ad9fa0f72e166b4b3f74fda427ccf91f Author: Scott Lahteine Date: Sun Apr 23 02:07:42 2023 -0500 🩹 Fix UBL safe measure move with extra axes Followup to 7e79fc5b commit 69f8da468247986225b33e9a373856650746b5d7 Author: Scott Lahteine Date: Sun Apr 23 01:58:01 2023 -0500 🔧 Split Changes.h from SanityCheck.h (#25732) commit f0f7ec88823318c7d778e42b4dc7604120943032 Author: Scott Lahteine Date: Sun Apr 23 00:47:44 2023 -0500 🧑‍💻 Stepper::set_directions() => apply_directions() commit 921591d2b899000e3181a098a069392ac0ac4b42 Author: Scott Lahteine Date: Sat Apr 22 23:15:31 2023 -0500 🧑‍💻 SDIO_SUPPORT => ONBOARD_SDIO commit 5664c02d077e028f84a24efd96c2eebe97ce8763 Author: Scott Lahteine Date: Sat Apr 22 22:43:09 2023 -0500 🧑‍💻 Generalize SDSUPPORT as HAS_MEDIA In preparation for single- and multi-volume refactoring. commit ce85b98db471685404d6e4975dcff645b09d771b Author: Jason Smith Date: Sat Apr 22 20:27:01 2023 -0700 🩹 Relocate Fan conditionals, sanity-checks (#25731) Co-authored-by: Scott Lahteine commit 95cfc98fe406bda0d0dc8d08d31e0f4416fb109a Author: thinkyhead Date: Sun Apr 23 00:22:56 2023 +0000 [cron] Bump distribution date (2023-04-23) commit 5d8d38a911f96dadd56471f6dacaa6bda64b66fb Author: ellensp <530024+ellensp@users.noreply.github.com> Date: Sun Apr 23 08:59:51 2023 +1200 🩹 Status / Host Prompt followup (#25720) Followup to #25679 Co-authored-by: Scott Lahteine commit 31173394b871a9a3e26ab58eae51c62c7d780ba2 Author: thinkyhead Date: Sat Apr 22 12:06:22 2023 +0000 [cron] Bump distribution date (2023-04-22) commit c8ed7950f40f9f454fc769b02d53f1086b17576c Author: ellensp <530024+ellensp@users.noreply.github.com> Date: Sat Apr 22 21:09:17 2023 +1200 🔧 Permit extrude without hotend (#25709) Co-authored-by: Scott Lahteine commit 89ccede139963091768985eeb4ca5a6e3111647c Author: Alexey D. Filimonov Date: Sat Apr 22 12:06:19 2023 +0300 🎨 Clean up TFT Color UI display items (#25712) Co-authored-by: Scott Lahteine commit fba1f838551d13339df3a0f6f82c46b92631c730 Author: ellensp <530024+ellensp@users.noreply.github.com> Date: Sat Apr 22 21:02:51 2023 +1200 🩹 Fix Anycubic PlayTune (#25728) Followup to #25690 commit 726de7e82136c1a718b0c62425231eb0662592b6 Author: Nomis-97 <72187111+Nomis-97@users.noreply.github.com> Date: Sat Apr 22 10:16:19 2023 +0200 🐛 Fix MKS Gen-L MOSFETs (#25717) commit 4233e4864f0c621612ce35a9b6ca882312e3aa4d Author: Scott Lahteine Date: Sat Apr 22 01:56:10 2023 -0500 🚸 MarlinUI Endstop Test Screen, and more (#25667) commit 98277f2c1cb1f8ec66938689f6728ea9f52143c8 Author: thinkyhead Date: Fri Apr 21 00:20:12 2023 +0000 [cron] Bump distribution date (2023-04-21) commit ded9ffa1e7cc154518fe94b5c7da4f4332eb8a27 Author: Scott Lahteine Date: Thu Apr 20 17:35:20 2023 -0500 🧑‍💻 Apply INVERT_DIR to SET_STEP_DIR commit 335ba32a0e71991402d3686162afc429130db4ec Author: Scott Lahteine Date: Thu Apr 20 17:21:59 2023 -0500 🩹 Fix Core Kinematics BABYSTEP_XY --- .editorconfig | 12 +- .github/workflows/test-builds.yml | 125 +- Makefile | 2 +- Marlin/Configuration.h | 237 ++-- Marlin/Configuration_adv.h | 74 +- Marlin/Version.h | 2 +- Marlin/config.ini | 4 - Marlin/src/HAL/AVR/HAL.cpp | 6 +- Marlin/src/HAL/AVR/endstop_interrupts.h | 26 +- Marlin/src/HAL/DUE/HAL.cpp | 2 +- Marlin/src/HAL/DUE/MinSerial.cpp | 22 +- Marlin/src/HAL/DUE/endstop_interrupts.h | 56 +- Marlin/src/HAL/DUE/inc/SanityCheck.h | 2 +- Marlin/src/HAL/DUE/usb/conf_usb.h | 4 +- Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp | 4 +- Marlin/src/HAL/DUE/usb/udi_cdc_desc.c | 4 +- Marlin/src/HAL/DUE/usb/udi_composite_desc.c | 4 +- Marlin/src/HAL/DUE/usb/udi_msc.c | 4 +- Marlin/src/HAL/DUE/usb/usb_task.c | 12 +- Marlin/src/HAL/ESP32/HAL_SPI.cpp | 2 +- Marlin/src/HAL/ESP32/endstop_interrupts.h | 56 +- Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp | 2 +- Marlin/src/HAL/HAL.h | 2 +- Marlin/src/HAL/LINUX/spi_pins.h | 2 +- Marlin/src/HAL/LPC1768/HAL.h | 4 +- Marlin/src/HAL/LPC1768/MinSerial.cpp | 22 +- Marlin/src/HAL/LPC1768/endstop_interrupts.h | 50 +- Marlin/src/HAL/LPC1768/inc/SanityCheck.h | 2 +- Marlin/src/HAL/LPC1768/spi_pins.h | 2 +- Marlin/src/HAL/LPC1768/tft/tft_spi.cpp | 3 + Marlin/src/HAL/LPC1768/tft/xpt2046.cpp | 5 +- Marlin/src/HAL/NATIVE_SIM/spi_pins.h | 2 +- Marlin/src/HAL/SAMD21/HAL.cpp | 2 +- Marlin/src/HAL/SAMD21/endstop_interrupts.h | 130 +- Marlin/src/HAL/SAMD21/inc/SanityCheck.h | 4 +- Marlin/src/HAL/SAMD51/HAL.cpp | 2 +- Marlin/src/HAL/SAMD51/endstop_interrupts.h | 106 +- Marlin/src/HAL/SAMD51/inc/SanityCheck.h | 4 +- Marlin/src/HAL/STM32/HAL.cpp | 2 +- Marlin/src/HAL/STM32/HAL.h | 5 +- Marlin/src/HAL/STM32/MinSerial.cpp | 22 +- Marlin/src/HAL/STM32/endstop_interrupts.h | 56 +- Marlin/src/HAL/STM32/inc/Conditionals_adv.h | 2 +- Marlin/src/HAL/STM32/inc/SanityCheck.h | 6 +- Marlin/src/HAL/STM32/sdio.cpp | 4 +- Marlin/src/HAL/STM32/temp_soc.h | 346 +++++ Marlin/src/HAL/STM32/tft/tft_spi.cpp | 1 - Marlin/src/HAL/STM32/usb_host.cpp | 2 +- Marlin/src/HAL/STM32F1/HAL.cpp | 3 + Marlin/src/HAL/STM32F1/HAL.h | 4 +- Marlin/src/HAL/STM32F1/endstop_interrupts.h | 56 +- .../src/HAL/STM32F1/inc/Conditionals_post.h | 6 +- Marlin/src/HAL/STM32F1/inc/SanityCheck.h | 2 +- Marlin/src/HAL/STM32F1/tft/tft_spi.cpp | 15 +- .../src/HAL/TEENSY31_32/endstop_interrupts.h | 56 +- .../src/HAL/TEENSY35_36/endstop_interrupts.h | 56 +- Marlin/src/HAL/TEENSY35_36/inc/SanityCheck.h | 2 +- .../src/HAL/TEENSY40_41/endstop_interrupts.h | 50 +- Marlin/src/HAL/platforms.h | 26 +- Marlin/src/HAL/shared/eeprom_if_i2c.cpp | 21 +- Marlin/src/HAL/shared/fauxpins.h | 367 +++++ Marlin/src/MarlinCore.cpp | 14 +- Marlin/src/core/boards.h | 19 +- Marlin/src/core/language.h | 1 + Marlin/src/core/macros.h | 45 - Marlin/src/core/multi_language.h | 3 + Marlin/src/core/types.h | 2 + Marlin/src/feature/bedlevel/bdl/bdl.cpp | 4 +- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 23 +- Marlin/src/feature/binary_stream.h | 2 +- Marlin/src/feature/controllerfan.cpp | 8 +- Marlin/src/feature/e_parser.cpp | 2 +- Marlin/src/feature/e_parser.h | 10 +- Marlin/src/feature/host_actions.cpp | 2 +- Marlin/src/feature/leds/pca9632.cpp | 2 +- Marlin/src/feature/leds/pca9632.h | 2 +- Marlin/src/feature/leds/printer_event_leds.h | 4 +- Marlin/src/feature/pause.cpp | 8 +- Marlin/src/feature/power_monitor.h | 2 +- Marlin/src/feature/runout.h | 14 +- Marlin/src/gcode/bedlevel/G35.cpp | 2 +- Marlin/src/gcode/calibrate/G28.cpp | 41 +- Marlin/src/gcode/calibrate/G33.cpp | 2 +- Marlin/src/gcode/calibrate/G34_M422.cpp | 27 +- Marlin/src/gcode/calibrate/G425.cpp | 36 +- Marlin/src/gcode/calibrate/M425.cpp | 7 +- Marlin/src/gcode/calibrate/M48.cpp | 2 +- Marlin/src/gcode/calibrate/M666.cpp | 2 +- Marlin/src/gcode/control/M993_M994.cpp | 4 +- Marlin/src/gcode/feature/clean/G12.cpp | 14 +- Marlin/src/gcode/feature/pause/M125.cpp | 2 +- Marlin/src/gcode/gcode.cpp | 18 +- Marlin/src/gcode/gcode.h | 19 +- Marlin/src/gcode/gcode_d.cpp | 4 +- Marlin/src/gcode/host/M115.cpp | 45 +- Marlin/src/gcode/host/M360.cpp | 2 +- Marlin/src/gcode/{control => motion}/M400.cpp | 0 Marlin/src/gcode/ota/M936.cpp | 72 + Marlin/src/gcode/probe/G30.cpp | 2 +- Marlin/src/gcode/queue.cpp | 16 +- Marlin/src/gcode/queue.h | 6 +- Marlin/src/gcode/sd/M1001.cpp | 4 +- Marlin/src/gcode/sd/M20.cpp | 4 +- Marlin/src/gcode/sd/M21_M22.cpp | 4 +- Marlin/src/gcode/sd/M23.cpp | 4 +- Marlin/src/gcode/sd/M24_M25.cpp | 8 +- Marlin/src/gcode/sd/M26.cpp | 4 +- Marlin/src/gcode/sd/M27.cpp | 4 +- Marlin/src/gcode/sd/M28_M29.cpp | 4 +- Marlin/src/gcode/sd/M30.cpp | 4 +- Marlin/src/gcode/sd/M524.cpp | 4 +- Marlin/src/gcode/sd/M928.cpp | 4 +- Marlin/src/gcode/temp/M104_M109.cpp | 4 +- Marlin/src/gcode/temp/M155.cpp | 4 +- Marlin/src/inc/Changes.h | 681 +++++++++ Marlin/src/inc/Conditionals_LCD.h | 161 +-- Marlin/src/inc/Conditionals_adv.h | 226 ++- Marlin/src/inc/Conditionals_post.h | 836 +++++------ Marlin/src/inc/MarlinConfig.h | 13 +- Marlin/src/inc/MarlinConfigPre.h | 4 +- Marlin/src/inc/SanityCheck.h | 1252 +++++------------ Marlin/src/inc/Version.h | 2 +- Marlin/src/inc/Warnings.cpp | 785 +++++------ Marlin/src/lcd/HD44780/marlinui_HD44780.cpp | 51 +- Marlin/src/lcd/HD44780/marlinui_HD44780.h | 1 - Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp | 52 +- Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.h | 1 - Marlin/src/lcd/dogm/lcdprint_u8g.cpp | 1 - Marlin/src/lcd/dogm/marlinui_DOGM.cpp | 39 +- Marlin/src/lcd/dogm/marlinui_DOGM.h | 6 +- Marlin/src/lcd/dogm/status_screen_DOGM.cpp | 10 +- .../lcd/dogm/status_screen_lite_ST7920.cpp | 3 +- .../dogm/u8g_dev_tft_upscale_from_128x64.cpp | 2 +- Marlin/src/lcd/dogm/u8g_fontutf8.cpp | 2 +- Marlin/src/lcd/dogm/u8g_fontutf8.h | 2 +- Marlin/src/lcd/e3v2/creality/dwin.cpp | 2 +- Marlin/src/lcd/e3v2/jyersui/dwin.cpp | 40 +- Marlin/src/lcd/e3v2/marlinui/dwin_string.cpp | 8 +- Marlin/src/lcd/e3v2/marlinui/dwin_string.h | 2 +- Marlin/src/lcd/e3v2/marlinui/ui_common.cpp | 45 +- .../lcd/e3v2/marlinui/ui_status_480x272.cpp | 4 +- Marlin/src/lcd/e3v2/proui/dwin.cpp | 2 +- Marlin/src/lcd/e3v2/proui/endstop_diag.cpp | 34 +- Marlin/src/lcd/extui/anycubic/Tunes.cpp | 4 +- Marlin/src/lcd/extui/anycubic/Tunes.h | 4 +- .../lcd/extui/anycubic_chiron/chiron_tft.cpp | 10 +- .../anycubic_i3mega/anycubic_i3mega_lcd.cpp | 40 +- .../extui/anycubic_vyper/FileNavigator.cpp | 4 +- .../src/lcd/extui/anycubic_vyper/dgus_tft.cpp | 10 +- .../src/lcd/extui/dgus/DGUSScreenHandler.cpp | 6 +- .../lcd/extui/dgus/DGUSScreenHandlerBase.h | 4 +- Marlin/src/lcd/extui/dgus/dgus_extui.cpp | 6 +- .../lcd/extui/dgus/fysetc/DGUSDisplayDef.cpp | 4 +- .../extui/dgus/fysetc/DGUSScreenHandler.cpp | 4 +- .../lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp | 4 +- .../extui/dgus/hiprecy/DGUSScreenHandler.cpp | 4 +- .../src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp | 4 +- .../lcd/extui/dgus/mks/DGUSScreenHandler.cpp | 6 +- .../lcd/extui/dgus/mks/DGUSScreenHandler.h | 2 +- .../lcd/extui/dgus/origin/DGUSDisplayDef.cpp | 4 +- .../extui/dgus/origin/DGUSScreenHandler.cpp | 4 +- .../lcd/extui/dgus_reloaded/DGUSRxHandler.cpp | 6 +- .../lcd/extui/dgus_reloaded/DGUSRxHandler.h | 2 +- .../extui/dgus_reloaded/DGUSScreenHandler.cpp | 6 +- .../extui/dgus_reloaded/DGUSScreenHandler.h | 4 +- .../extui/dgus_reloaded/DGUSSetupHandler.cpp | 2 +- .../extui/dgus_reloaded/DGUSSetupHandler.h | 2 +- .../lcd/extui/dgus_reloaded/DGUSTxHandler.cpp | 4 +- .../lcd/extui/dgus_reloaded/DGUSTxHandler.h | 2 +- .../definition/DGUS_ScreenAddrList.cpp | 4 +- .../definition/DGUS_ScreenSetup.cpp | 2 +- .../dgus_reloaded/definition/DGUS_VPList.cpp | 4 +- .../dgus_reloaded/dgus_reloaded_extui.cpp | 6 +- .../archim2-flash/flash_storage.cpp | 4 +- .../archim2-flash/media_file_reader.cpp | 2 +- .../archim2-flash/media_file_reader.h | 4 +- .../bioprinter/printing_dialog_box.cpp | 2 +- .../ftdi_eve_touch_ui/ftdi_eve_extui.cpp | 4 +- .../ftdi_eve_touch_ui/generic/boot_screen.cpp | 2 +- .../generic/developer_menu.cpp | 4 +- .../generic/endstop_state_screen.cpp | 2 +- .../generic/media_player_screen.cpp | 2 +- .../extui/ftdi_eve_touch_ui/generic/screens.h | 4 +- .../generic/status_screen.cpp | 2 +- .../extui/ftdi_eve_touch_ui/pin_mappings.h | 2 +- .../lcd/extui/ia_creality/creality_extui.cpp | 4 +- .../lcd/extui/ia_creality/ia_creality_extui.h | 3 +- Marlin/src/lcd/extui/malyan/malyan.cpp | 8 +- Marlin/src/lcd/extui/malyan/malyan_extui.cpp | 2 +- Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp | 4 +- .../src/lcd/extui/mks_ui/draw_operation.cpp | 2 +- .../src/lcd/extui/mks_ui/draw_print_file.cpp | 68 +- Marlin/src/lcd/extui/mks_ui/draw_printing.cpp | 6 +- Marlin/src/lcd/extui/mks_ui/draw_ui.cpp | 10 +- Marlin/src/lcd/extui/mks_ui/draw_ui.h | 32 +- Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp | 92 +- Marlin/src/lcd/extui/mks_ui/mks_hardware.h | 2 +- Marlin/src/lcd/extui/mks_ui/pic_manager.cpp | 9 +- .../lcd/extui/mks_ui/printer_operation.cpp | 2 +- .../extui/mks_ui/tft_lvgl_configuration.cpp | 11 +- .../lcd/extui/mks_ui/tft_lvgl_configuration.h | 2 - Marlin/src/lcd/extui/mks_ui/wifi_module.cpp | 23 +- Marlin/src/lcd/extui/ui_api.cpp | 26 +- Marlin/src/lcd/language/language_cz.h | 4 +- Marlin/src/lcd/language/language_de.h | 6 +- Marlin/src/lcd/language/language_en.h | 13 +- Marlin/src/lcd/language/language_es.h | 4 +- Marlin/src/lcd/language/language_fr.h | 4 +- Marlin/src/lcd/language/language_fr_na.h | 4 +- Marlin/src/lcd/language/language_gl.h | 6 +- Marlin/src/lcd/language/language_hu.h | 12 +- Marlin/src/lcd/language/language_it.h | 8 +- Marlin/src/lcd/language/language_pl.h | 8 +- Marlin/src/lcd/language/language_pt_br.h | 2 +- Marlin/src/lcd/language/language_ro.h | 4 +- Marlin/src/lcd/language/language_ru.h | 6 +- Marlin/src/lcd/language/language_sk.h | 8 +- Marlin/src/lcd/language/language_sv.h | 6 +- Marlin/src/lcd/language/language_tr.h | 8 +- Marlin/src/lcd/language/language_uk.h | 6 +- Marlin/src/lcd/language/language_zh_CN.h | 44 +- Marlin/src/lcd/language/language_zh_TW.h | 50 +- Marlin/src/lcd/lcdprint.cpp | 6 +- Marlin/src/lcd/lcdprint.h | 4 +- Marlin/src/lcd/marlinui.cpp | 39 +- Marlin/src/lcd/marlinui.h | 18 +- Marlin/src/lcd/menu/menu.cpp | 7 - Marlin/src/lcd/menu/menu.h | 9 +- Marlin/src/lcd/menu/menu_configuration.cpp | 95 +- Marlin/src/lcd/menu/menu_info.cpp | 96 +- Marlin/src/lcd/menu/menu_item.h | 32 +- Marlin/src/lcd/menu/menu_language.cpp | 4 +- Marlin/src/lcd/menu/menu_main.cpp | 12 +- Marlin/src/lcd/menu/menu_media.cpp | 4 +- Marlin/src/lcd/menu/menu_probe_offset.cpp | 2 +- Marlin/src/lcd/menu/menu_tramming_wizard.cpp | 2 +- Marlin/src/lcd/tft/tft_string.cpp | 8 +- Marlin/src/lcd/tft/tft_string.h | 2 +- Marlin/src/lcd/tft/touch.cpp | 7 +- Marlin/src/lcd/tft/touch.h | 4 +- Marlin/src/lcd/tft/ui_1024x600.cpp | 18 +- Marlin/src/lcd/tft/ui_320x240.cpp | 18 +- Marlin/src/lcd/tft/ui_480x320.cpp | 18 +- Marlin/src/lcd/tft/ui_common.cpp | 25 +- Marlin/src/lcd/tft/ui_common.h | 41 +- Marlin/src/lcd/tft_io/ili9488.h | 10 - Marlin/src/lcd/tft_io/tft_io.h | 8 +- Marlin/src/lcd/tft_io/tft_orientation.h | 16 - Marlin/src/lcd/tft_io/touch_calibration.h | 4 +- Marlin/src/lcd/touch/touch_buttons.cpp | 6 +- Marlin/src/lcd/{fontutils.cpp => utf8.cpp} | 12 +- Marlin/src/lcd/{fontutils.h => utf8.h} | 4 +- Marlin/src/libs/MAX31865.h | 2 +- Marlin/src/libs/W25Qxx.h | 2 +- Marlin/src/libs/buzzer.h | 13 +- Marlin/src/libs/nozzle.cpp | 278 ++-- Marlin/src/libs/nozzle.h | 8 +- Marlin/src/module/endstops.cpp | 160 +-- Marlin/src/module/endstops.h | 110 +- Marlin/src/module/motion.cpp | 96 +- Marlin/src/module/motion.h | 4 +- Marlin/src/module/probe.cpp | 94 +- Marlin/src/module/probe.h | 24 +- Marlin/src/module/stepper.cpp | 60 +- Marlin/src/module/stepper.h | 4 +- Marlin/src/module/stepper/trinamic.cpp | 2 +- Marlin/src/module/temperature.cpp | 62 +- Marlin/src/module/temperature.h | 25 + Marlin/src/module/thermistor/thermistor_1.h | 4 + Marlin/src/module/thermistor/thermistor_14.h | 85 ++ Marlin/src/module/thermistor/thermistors.h | 7 + Marlin/src/module/tool_change.cpp | 2 +- Marlin/src/pins/esp32/env_validate.h | 5 +- Marlin/src/pins/esp32/pins_E4D.h | 4 +- Marlin/src/pins/esp32/pins_FYSETC_E4.h | 4 +- Marlin/src/pins/esp32/pins_MKS_TINYBEE.h | 2 +- Marlin/src/pins/esp32/pins_MRR_ESPA.h | 4 +- Marlin/src/pins/esp32/pins_PANDA_M4.h | 4 + Marlin/src/pins/esp32/pins_PANDA_ZHU.h | 6 + Marlin/src/pins/esp32/pins_PANDA_common.h | 10 +- Marlin/src/pins/gd32f1/env_validate.h | 11 +- Marlin/src/pins/gd32f1/pins_SOVOL_V131.h | 74 + Marlin/src/pins/gd32f1/pins_TRIGORILLA_V006.h | 6 +- Marlin/src/pins/linux/pins_RAMPS_LINUX.h | 4 +- Marlin/src/pins/lpc1768/env_validate.h | 5 +- Marlin/src/pins/lpc1768/pins_BIQU_B300_V1.0.h | 4 +- Marlin/src/pins/lpc1768/pins_BIQU_BQ111_A4.h | 6 +- Marlin/src/pins/lpc1769/env_validate.h | 5 +- .../src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h | 5 +- .../src/pins/lpc1769/pins_COHESION3D_MINI.h | 2 +- Marlin/src/pins/mega/env_validate.h | 5 +- Marlin/src/pins/mega/pins_CHEAPTRONICv2.h | 2 +- Marlin/src/pins/mega/pins_GT2560_V3.h | 4 + Marlin/src/pins/mega/pins_PICA.h | 6 +- Marlin/src/pins/mega/pins_WEEDO_62A.h | 2 +- Marlin/src/pins/pins.h | 57 +- Marlin/src/pins/pinsDebug.h | 2 +- Marlin/src/pins/pins_postprocess.h | 1011 +++---------- Marlin/src/pins/rambo/env_validate.h | 5 +- Marlin/src/pins/rambo/pins_EINSY_RAMBO.h | 5 +- Marlin/src/pins/ramps/env_validate.h | 5 +- Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h | 2 +- .../src/pins/ramps/pins_FORMBOT_TREX2PLUS.h | 2 +- Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h | 2 +- Marlin/src/pins/ramps/pins_MKS_GEN_L.h | 8 +- Marlin/src/pins/ramps/pins_PANOWIN_CUTLASS.h | 7 - Marlin/src/pins/ramps/pins_RAMPS_OLD.h | 2 +- Marlin/src/pins/ramps/pins_RIGIDBOARD.h | 2 +- Marlin/src/pins/ramps/pins_RUMBA.h | 5 +- Marlin/src/pins/ramps/pins_TENLOG_D3_HERO.h | 2 +- Marlin/src/pins/ramps/pins_TRIGORILLA_14.h | 4 +- Marlin/src/pins/ramps/pins_TT_OSCAR.h | 2 +- Marlin/src/pins/sam/env_validate.h | 5 +- Marlin/src/pins/sam/pins_DUE3DOM.h | 2 +- Marlin/src/pins/sam/pins_DUE3DOM_MINI.h | 7 +- Marlin/src/pins/sam/pins_RADDS.h | 2 +- Marlin/src/pins/sam/pins_RAMPS_DUO.h | 2 +- Marlin/src/pins/sam/pins_RAMPS_FD_V1.h | 2 +- Marlin/src/pins/sam/pins_RAMPS_SMART.h | 2 +- Marlin/src/pins/sam/pins_RURAMPS4D_11.h | 2 +- Marlin/src/pins/sam/pins_RURAMPS4D_13.h | 2 +- Marlin/src/pins/sanguino/env_validate.h | 5 +- .../src/pins/sanguino/pins_MELZI_CREALITY.h | 75 +- .../pins/sanguino/pins_MELZI_CREALITY_E2.h | 96 ++ Marlin/src/pins/sanguino/pins_ZMIB_V2.h | 2 +- Marlin/src/pins/stm32f1/env_validate.h | 5 +- Marlin/src/pins/stm32f1/pins_CHITU3D_common.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h | 5 + .../pins/stm32f1/pins_CREALITY_V24S1_301.h | 1 + Marlin/src/pins/stm32f1/pins_CREALITY_V25S1.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V4.h | 4 +- Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V425.h | 4 - Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V521.h | 7 +- .../src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h | 18 +- Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h | 2 +- Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h | 2 +- .../pins/stm32f1/pins_MINGDA_MPX_ARM_MINI.h | 2 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN.h | 4 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h | 2 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h | 2 +- .../src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h | 2 +- .../pins/stm32f1/pins_MKS_ROBIN_NANO_common.h | 2 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_PRO.h | 2 +- Marlin/src/pins/stm32f1/pins_SOVOL_V131.h | 236 ---- Marlin/src/pins/stm32f1/pins_TRIGORILLA_PRO.h | 2 +- Marlin/src/pins/stm32f1/pins_ZM3E4_V1_0.h | 1 + Marlin/src/pins/stm32f1/pins_ZM3E4_V2_0.h | 1 + Marlin/src/pins/stm32f4/env_validate.h | 5 +- Marlin/src/pins/stm32f4/pins_ANET_ET4.h | 6 +- Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h | 4 +- .../src/pins/stm32f4/pins_BLACK_STM32F407VE.h | 4 +- .../src/pins/stm32f4/pins_BTT_BTT002_V1_0.h | 5 +- Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h | 8 +- Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h | 20 +- .../pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h | 25 +- .../stm32f4/pins_BTT_SKR_MINI_E3_V3_0_1.h | 2 +- .../pins/stm32f4/pins_BTT_SKR_V2_0_common.h | 2 +- Marlin/src/pins/stm32f4/pins_CREALITY_F401.h | 241 ++++ Marlin/src/pins/stm32f4/pins_FLYF407ZG.h | 4 +- Marlin/src/pins/stm32f4/pins_LERDGE_K.h | 4 +- Marlin/src/pins/stm32f4/pins_LERDGE_S.h | 4 +- Marlin/src/pins/stm32f4/pins_LERDGE_X.h | 4 +- .../pins/stm32f4/pins_MKS_MONSTER8_common.h | 2 +- Marlin/src/pins/stm32f4/pins_MKS_SKIPR_V1_0.h | 27 +- .../src/pins/stm32f4/pins_TH3D_EZBOARD_V2.h | 2 +- Marlin/src/pins/stm32f4/pins_TRONXY_V10.h | 2 +- Marlin/src/pins/stm32f4/pins_VAKE403D.h | 4 +- Marlin/src/pins/stm32g0/env_validate.h | 5 +- .../pins/stm32g0/pins_BTT_MANTA_M8P_common.h | 18 +- Marlin/src/pins/stm32h7/env_validate.h | 5 +- .../pins/stm32h7/pins_BTT_OCTOPUS_MAX_EZ.h | 23 +- .../pins/stm32h7/pins_BTT_SKR_V3_0_common.h | 2 +- Marlin/src/pins/teensy2/env_validate.h | 5 +- Marlin/src/sd/SdBaseFile.cpp | 4 +- Marlin/src/sd/SdFatUtil.cpp | 4 +- Marlin/src/sd/SdFile.cpp | 4 +- Marlin/src/sd/SdVolume.cpp | 4 +- Marlin/src/sd/cardreader.cpp | 6 +- Marlin/src/sd/cardreader.h | 6 +- .../sd/usb_flashdrive/Sd2Card_FlashDrive.cpp | 4 +- .../boards/marlin_CREALITY_STM32F401RE.json | 65 + .../share/PlatformIO/ldscripts/creality.ld | 2 +- .../PlatformIO/scripts/common-dependencies.h | 15 +- .../PlatformIO/scripts/common-dependencies.py | 93 +- buildroot/share/PlatformIO/scripts/schema.py | 2 +- .../PeripheralPins.c | 252 ++++ .../MARLIN_CREALITY_STM32F401RE/PinNamesVar.h | 33 + .../hal_conf_custom.h | 495 +++++++ .../MARLIN_CREALITY_STM32F401RE/ldscript.ld | 186 +++ .../MARLIN_CREALITY_STM32F401RE/variant.cpp | 238 ++++ .../MARLIN_CREALITY_STM32F401RE/variant.h | 151 ++ .../variants/MARLIN_F103Rx/PeripheralPins.c | 0 .../variants/MARLIN_F103Rx/PinNamesVar.h | 2 +- .../variants/MARLIN_F407ZE/PeripheralPins.c | 3 +- buildroot/tests/DUE | 2 +- buildroot/tests/FYSETC_F6 | 4 +- buildroot/tests/LPC1769 | 4 +- buildroot/tests/STM32F103RC_btt_USB | 4 +- buildroot/tests/STM32F103RC_fysetc | 16 + buildroot/tests/STM32F103RC_fysetc_maple | 4 +- buildroot/tests/STM32F103RE_creality | 15 +- buildroot/tests/mega1280 | 2 +- buildroot/tests/rambo | 13 +- buildroot/tests/teensy31 | 1 - buildroot/tests/teensy35 | 4 +- buildroot/tests/teensy41 | 4 +- ini/features.ini | 40 +- ini/lpc176x.ini | 5 +- ini/samd51.ini | 2 +- ini/stm32-common.ini | 10 +- ini/stm32f0.ini | 2 +- ini/stm32f1-maple.ini | 4 +- ini/stm32f1.ini | 3 +- ini/stm32f4.ini | 36 +- platformio.ini | 285 +--- 417 files changed, 7756 insertions(+), 5736 deletions(-) create mode 100644 Marlin/src/HAL/STM32/temp_soc.h create mode 100644 Marlin/src/HAL/shared/fauxpins.h rename Marlin/src/gcode/{control => motion}/M400.cpp (100%) create mode 100644 Marlin/src/gcode/ota/M936.cpp create mode 100644 Marlin/src/inc/Changes.h rename Marlin/src/lcd/{fontutils.cpp => utf8.cpp} (97%) rename Marlin/src/lcd/{fontutils.h => utf8.h} (97%) create mode 100644 Marlin/src/module/thermistor/thermistor_14.h create mode 100644 Marlin/src/pins/gd32f1/pins_SOVOL_V131.h create mode 100644 Marlin/src/pins/sanguino/pins_MELZI_CREALITY_E2.h delete mode 100644 Marlin/src/pins/stm32f1/pins_SOVOL_V131.h create mode 100644 Marlin/src/pins/stm32f4/pins_CREALITY_F401.h create mode 100644 buildroot/share/PlatformIO/boards/marlin_CREALITY_STM32F401RE.json create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/PeripheralPins.c create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/PinNamesVar.h create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/hal_conf_custom.h create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/ldscript.ld create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/variant.cpp create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/variant.h mode change 100755 => 100644 buildroot/share/PlatformIO/variants/MARLIN_F103Rx/PeripheralPins.c create mode 100755 buildroot/tests/STM32F103RC_fysetc diff --git a/.editorconfig b/.editorconfig index 57a5b2fb5ea4..84f2d090b194 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,16 +4,20 @@ root = true [{*.patch,syntax_test_*}] trim_trailing_whitespace = false -[{*.c,*.cpp,*.h,*.ino}] -charset = utf-8 - -[{*.c,*.cpp,*.h,*.ino,Makefile}] +[{*.c,*.cpp,*.h,*.ino,*.py,Makefile}] trim_trailing_whitespace = true insert_final_newline = true end_of_line = lf + +[{*.c,*.cpp,*.h,*.ino}] +charset = utf-8 indent_style = space indent_size = 2 +[{Makefile}] +indent_style = tab +indent_size = 2 + [{*.py}] indent_style = space indent_size = 4 diff --git a/.github/workflows/test-builds.yml b/.github/workflows/test-builds.yml index 173631e5e500..fcda1111cbe6 100644 --- a/.github/workflows/test-builds.yml +++ b/.github/workflows/test-builds.yml @@ -33,91 +33,108 @@ jobs: strategy: matrix: test-platform: - # Base Environments - - DUE - - DUE_archim - - esp32 + # Native - linux_native + + # AVR - mega2560 - at90usb1286_dfu - - teensy31 - - teensy35 - - teensy41 - - SAMD21_minitronics20 - - SAMD51_grandcentral_m4 - - PANDA_PI_V29 - - # Extended AVR Environments + # AVR Extended - FYSETC_F6 - mega1280 + - melzi_optiboot - rambo - sanguino1284p - sanguino644p - - melzi_optiboot - # STM32F1 (Maple) Environments + # SAM3X8E + - DUE + - DUE_archim - #- STM32F103RC_btt_maple - - STM32F103RC_btt_USB_maple - - STM32F103RC_fysetc_maple - - STM32F103RC_meeb_maple - - jgaurora_a5s_a1_maple - - STM32F103VE_longer_maple - #- mks_robin_maple - - mks_robin_lite_maple - - mks_robin_pro_maple - #- mks_robin_nano_v1v2_maple - #- STM32F103RE_creality_maple - - STM32F103VE_ZM3E4V2_USB_maple + # SAMD21 + - SAMD51_grandcentral_m4 + - SAMD21_minitronics20 - # STM32 (ST) Environments + # ESP32 + - esp32 + - mks_tinybee + # Teensy 2 + #- at90usb1286_cdc + + # Teensy MK20DX256 + - teensy31 + + # Teensy MK64FX512, MK66FX1M0 + - teensy35 + + # Teensy IMXRT1062DVx6A + - teensy41 + + # STM32F0 + - malyan_M300 + - STM32F070CB_malyan + - STM32F070RB_malyan + + # STM32F1 + - chitu_f103 + - mks_robin + - mks_robin_nano_v1v2 + - PANDA_PI_V29 - STM32F103RC_btt - #- STM32F103RC_btt_USB + - STM32F103RC_fysetc - STM32F103RE_btt - STM32F103RE_btt_USB - STM32F103RE_creality - - STM32F401RC_creality - STM32F103VE_longer - - STM32F407VE_black + #- mks_robin_mini + #- mks_robin_nano_v1_3_f4_usbmod + #- mks_robin_nano_v1v2_usbmod + #- STM32F103CB_malyan + #- STM32F103RC_btt_USB + #- STM32F103RE + + # STM32F4 + - ARMED - BIGTREE_BTT002 - - BIGTREE_SKR_PRO - BIGTREE_GTR_V1_0 - - mks_robin - - ARMED - - FYSETC_S6 - - STM32F070CB_malyan - - STM32F070RB_malyan - - malyan_M300 + - BIGTREE_SKR_PRO - FLYF407ZG - - rumba32 - - LERDGEX + - FYSETC_S6 - LERDGEK - - mks_robin_nano_v1v2 - #- mks_robin_nano_v1v2_usbmod - #- mks_robin_nano_v1_3_f4_usbmod + - LERDGEX + - Opulo_Lumen_REV3 + - rumba32 + - STM32F401RC_creality + - STM32F407VE_black + + # STM32F7 - NUCLEO_F767ZI - REMRAM_V1 - - BTT_SKR_SE_BX - - chitu_f103 - - Opulo_Lumen_REV3 - # ESP32 environments - - mks_tinybee + # STM32H7 + - BTT_SKR_SE_BX - # Put lengthy tests last + # STM32F1 (Maple) + - jgaurora_a5s_a1_maple + - mks_robin_lite_maple + - mks_robin_pro_maple + - STM32F103RC_btt_USB_maple + - STM32F103RC_fysetc_maple + - STM32F103RC_meeb_maple + - STM32F103VE_longer_maple + - STM32F103VE_ZM3E4V2_USB_maple + #- mks_robin_maple + #- mks_robin_nano_v1v2_maple + #- STM32F103RC_btt_maple + #- STM32F103RE_creality_maple + # LPC176x - Lengthy tests - LPC1768 - LPC1769 - # Non-working environment tests - #- at90usb1286_cdc - #- STM32F103CB_malyan - #- STM32F103RE - #- mks_robin_mini - steps: - name: Check out the PR diff --git a/Makefile b/Makefile index 2a18c0b4e829..cfe0b7722623 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ help: tests-single-ci: export GIT_RESET_HARD=true - $(MAKE) tests-single-local TEST_TARGET=$(TEST_TARGET) + $(MAKE) tests-single-local TEST_TARGET=$(TEST_TARGET) PLATFORMIO_BUILD_FLAGS=-DGITHUB_ACTION .PHONY: tests-single-ci tests-single-local: diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 192678c784ed..f2b69f2898ee 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -222,24 +222,6 @@ //#define SINGLENOZZLE_STANDBY_FAN #endif -// @section multi-material - -/** - * Multi-Material Unit - * Set to one of these predefined models: - * - * PRUSA_MMU1 : Průša MMU1 (The "multiplexer" version) - * PRUSA_MMU2 : Průša MMU2 - * PRUSA_MMU2S : Průša MMU2S (Requires MK3S extruder with motion sensor, EXTRUDERS = 5) - * EXTENDABLE_EMU_MMU2 : MMU with configurable number of filaments (ERCF, SMuFF or similar with Průša MMU2 compatible firmware) - * EXTENDABLE_EMU_MMU2S : MMUS with configurable number of filaments (ERCF, SMuFF or similar with Průša MMU2 compatible firmware) - * - * Requires NOZZLE_PARK_FEATURE to park print head in case MMU unit fails. - * See additional options in Configuration_adv.h. - * :["PRUSA_MMU1", "PRUSA_MMU2", "PRUSA_MMU2S", "EXTENDABLE_EMU_MMU2", "EXTENDABLE_EMU_MMU2S"] - */ -//#define MMU_MODEL PRUSA_MMU2 - // A dual extruder that uses a single stepper motor //#define SWITCHING_EXTRUDER #if ENABLED(SWITCHING_EXTRUDER) @@ -382,6 +364,24 @@ //#define HOTEND_OFFSET_Y { 0.0, 5.00 } // (mm) relative Y-offset for each nozzle //#define HOTEND_OFFSET_Z { 0.0, 0.00 } // (mm) relative Z-offset for each nozzle +// @section multi-material + +/** + * Multi-Material Unit + * Set to one of these predefined models: + * + * PRUSA_MMU1 : Průša MMU1 (The "multiplexer" version) + * PRUSA_MMU2 : Průša MMU2 + * PRUSA_MMU2S : Průša MMU2S (Requires MK3S extruder with motion sensor, EXTRUDERS = 5) + * EXTENDABLE_EMU_MMU2 : MMU with configurable number of filaments (ERCF, SMuFF or similar with Průša MMU2 compatible firmware) + * EXTENDABLE_EMU_MMU2S : MMUS with configurable number of filaments (ERCF, SMuFF or similar with Průša MMU2 compatible firmware) + * + * Requires NOZZLE_PARK_FEATURE to park print head in case MMU unit fails. + * See additional options in Configuration_adv.h. + * :["PRUSA_MMU1", "PRUSA_MMU2", "PRUSA_MMU2S", "EXTENDABLE_EMU_MMU2", "EXTENDABLE_EMU_MMU2S"] + */ +//#define MMU_MODEL PRUSA_MMU2 + // @section psu control /** @@ -432,78 +432,68 @@ // @section temperature /** - * --NORMAL IS 4.7kΩ PULLUP!-- 1kΩ pullup can be used on hotend sensor, using correct resistor and table - * - * Temperature sensors available: - * - * SPI RTD/Thermocouple Boards - IMPORTANT: Read the NOTE below! - * ------- - * -5 : MAX31865 with Pt100/Pt1000, 2, 3, or 4-wire (only for sensors 0-1) - * NOTE: You must uncomment/set the MAX31865_*_OHMS_n defines below. - * -3 : MAX31855 with Thermocouple, -200°C to +700°C (only for sensors 0-1) - * -2 : MAX6675 with Thermocouple, 0°C to +700°C (only for sensors 0-1) - * - * NOTE: Ensure TEMP_n_CS_PIN is set in your pins file for each TEMP_SENSOR_n using an SPI Thermocouple. By default, - * Hardware SPI on the default serial bus is used. If you have also set TEMP_n_SCK_PIN and TEMP_n_MISO_PIN, - * Software SPI will be used on those ports instead. You can force Hardware SPI on the default bus in the - * Configuration_adv.h file. At this time, separate Hardware SPI buses for sensors are not supported. + * Temperature Sensors: * - * Analog Themocouple Boards - * ------- - * -4 : AD8495 with Thermocouple - * -1 : AD595 with Thermocouple + * NORMAL IS 4.7kΩ PULLUP! Hotend sensors can use 1kΩ pullup with correct resistor and table. * + * ================================================================ * Analog Thermistors - 4.7kΩ pullup - Normal - * ------- - * 1 : 100kΩ EPCOS - Best choice for EPCOS thermistors - * 331 : 100kΩ Same as #1, but 3.3V scaled for MEGA - * 332 : 100kΩ Same as #1, but 3.3V scaled for DUE - * 2 : 200kΩ ATC Semitec 204GT-2 - * 202 : 200kΩ Copymaster 3D - * 3 : ???Ω Mendel-parts thermistor - * 4 : 10kΩ Generic Thermistor !! DO NOT use for a hotend - it gives bad resolution at high temp. !! - * 5 : 100kΩ ATC Semitec 104GT-2/104NT-4-R025H42G - Used in ParCan, J-Head, and E3D, SliceEngineering 300°C - * 501 : 100kΩ Zonestar - Tronxy X3A - * 502 : 100kΩ Zonestar - used by hot bed in Zonestar Průša P802M - * 503 : 100kΩ Zonestar (Z8XM2) Heated Bed thermistor - * 504 : 100kΩ Zonestar P802QR2 (Part# QWG-104F-B3950) Hotend Thermistor - * 505 : 100kΩ Zonestar P802QR2 (Part# QWG-104F-3950) Bed Thermistor - * 512 : 100kΩ RPW-Ultra hotend - * 6 : 100kΩ EPCOS - Not as accurate as table #1 (created using a fluke thermocouple) - * 7 : 100kΩ Honeywell 135-104LAG-J01 - * 71 : 100kΩ Honeywell 135-104LAF-J01 - * 8 : 100kΩ Vishay 0603 SMD NTCS0603E3104FXT - * 9 : 100kΩ GE Sensing AL03006-58.2K-97-G1 - * 10 : 100kΩ RS PRO 198-961 - * 11 : 100kΩ Keenovo AC silicone mats, most Wanhao i3 machines - beta 3950, 1% - * 12 : 100kΩ Vishay 0603 SMD NTCS0603E3104FXT (#8) - calibrated for Makibox hot bed - * 13 : 100kΩ Hisens up to 300°C - for "Simple ONE" & "All In ONE" hotend - beta 3950, 1% - * 15 : 100kΩ Calibrated for JGAurora A5 hotend - * 18 : 200kΩ ATC Semitec 204GT-2 Dagoma.Fr - MKS_Base_DKU001327 - * 22 : 100kΩ GTM32 Pro vB - hotend - 4.7kΩ pullup to 3.3V and 220Ω to analog input - * 23 : 100kΩ GTM32 Pro vB - bed - 4.7kΩ pullup to 3.3v and 220Ω to analog input - * 30 : 100kΩ Kis3d Silicone heating mat 200W/300W with 6mm precision cast plate (EN AW 5083) NTC100K - beta 3950 - * 60 : 100kΩ Maker's Tool Works Kapton Bed Thermistor - beta 3950 - * 61 : 100kΩ Formbot/Vivedino 350°C Thermistor - beta 3950 - * 66 : 4.7MΩ Dyze Design / Trianglelab T-D500 500°C High Temperature Thermistor - * 67 : 500kΩ SliceEngineering 450°C Thermistor - * 68 : PT100 amplifier board from Dyze Design - * 70 : 100kΩ bq Hephestos 2 - * 75 : 100kΩ Generic Silicon Heat Pad with NTC100K MGB18-104F39050L32 - * 2000 : 100kΩ Ultimachine Rambo TDK NTCG104LH104KT1 NTC100K motherboard Thermistor - * - * Analog Thermistors - 1kΩ pullup - Atypical, and requires changing out the 4.7kΩ pullup for 1kΩ. - * ------- (but gives greater accuracy and more stable PID) - * 51 : 100kΩ EPCOS (1kΩ pullup) - * 52 : 200kΩ ATC Semitec 204GT-2 (1kΩ pullup) - * 55 : 100kΩ ATC Semitec 104GT-2 - Used in ParCan & J-Head (1kΩ pullup) - * + * ================================================================ + * 1 : 100kΩ EPCOS - Best choice for EPCOS thermistors + * 331 : 100kΩ Same as #1, but 3.3V scaled for MEGA + * 332 : 100kΩ Same as #1, but 3.3V scaled for DUE + * 2 : 200kΩ ATC Semitec 204GT-2 + * 202 : 200kΩ Copymaster 3D + * 3 : ???Ω Mendel-parts thermistor + * 4 : 10kΩ Generic Thermistor !! DO NOT use for a hotend - it gives bad resolution at high temp. !! + * 5 : 100kΩ ATC Semitec 104GT-2/104NT-4-R025H42G - Used in ParCan, J-Head, and E3D, SliceEngineering 300°C + * 501 : 100kΩ Zonestar - Tronxy X3A + * 502 : 100kΩ Zonestar - used by hot bed in Zonestar Průša P802M + * 503 : 100kΩ Zonestar (Z8XM2) Heated Bed thermistor + * 504 : 100kΩ Zonestar P802QR2 (Part# QWG-104F-B3950) Hotend Thermistor + * 505 : 100kΩ Zonestar P802QR2 (Part# QWG-104F-3950) Bed Thermistor + * 512 : 100kΩ RPW-Ultra hotend + * 6 : 100kΩ EPCOS - Not as accurate as table #1 (created using a fluke thermocouple) + * 7 : 100kΩ Honeywell 135-104LAG-J01 + * 71 : 100kΩ Honeywell 135-104LAF-J01 + * 8 : 100kΩ Vishay 0603 SMD NTCS0603E3104FXT + * 9 : 100kΩ GE Sensing AL03006-58.2K-97-G1 + * 10 : 100kΩ RS PRO 198-961 + * 11 : 100kΩ Keenovo AC silicone mats, most Wanhao i3 machines - beta 3950, 1% + * 12 : 100kΩ Vishay 0603 SMD NTCS0603E3104FXT (#8) - calibrated for Makibox hot bed + * 13 : 100kΩ Hisens up to 300°C - for "Simple ONE" & "All In ONE" hotend - beta 3950, 1% + * 14 : 100kΩ (R25), 4092K (beta25), 4.7kΩ pull-up, bed thermistor as used in Ender-5 S1 + * 15 : 100kΩ Calibrated for JGAurora A5 hotend + * 18 : 200kΩ ATC Semitec 204GT-2 Dagoma.Fr - MKS_Base_DKU001327 + * 22 : 100kΩ GTM32 Pro vB - hotend - 4.7kΩ pullup to 3.3V and 220Ω to analog input + * 23 : 100kΩ GTM32 Pro vB - bed - 4.7kΩ pullup to 3.3v and 220Ω to analog input + * 30 : 100kΩ Kis3d Silicone heating mat 200W/300W with 6mm precision cast plate (EN AW 5083) NTC100K - beta 3950 + * 60 : 100kΩ Maker's Tool Works Kapton Bed Thermistor - beta 3950 + * 61 : 100kΩ Formbot/Vivedino 350°C Thermistor - beta 3950 + * 66 : 4.7MΩ Dyze Design / Trianglelab T-D500 500°C High Temperature Thermistor + * 67 : 500kΩ SliceEngineering 450°C Thermistor + * 68 : PT100 Smplifier board from Dyze Design + * 70 : 100kΩ bq Hephestos 2 + * 75 : 100kΩ Generic Silicon Heat Pad with NTC100K MGB18-104F39050L32 + * 2000 : 100kΩ Ultimachine Rambo TDK NTCG104LH104KT1 NTC100K motherboard Thermistor + * + * ================================================================ + * Analog Thermistors - 1kΩ pullup + * Atypical, and requires changing out the 4.7kΩ pullup for 1kΩ. + * (but gives greater accuracy and more stable PID) + * ================================================================ + * 51 : 100kΩ EPCOS (1kΩ pullup) + * 52 : 200kΩ ATC Semitec 204GT-2 (1kΩ pullup) + * 55 : 100kΩ ATC Semitec 104GT-2 - Used in ParCan & J-Head (1kΩ pullup) + * + * ================================================================ * Analog Thermistors - 10kΩ pullup - Atypical - * ------- - * 99 : 100kΩ Found on some Wanhao i3 machines with a 10kΩ pull-up resistor + * ================================================================ + * 99 : 100kΩ Found on some Wanhao i3 machines with a 10kΩ pull-up resistor * + * ================================================================ * Analog RTDs (Pt100/Pt1000) - * ------- + * ================================================================ * 110 : Pt100 with 1kΩ pullup (atypical) * 147 : Pt100 with 4.7kΩ pullup * 1010 : Pt1000 with 1kΩ pullup (atypical) @@ -515,15 +505,39 @@ * NOTE: ADC pins are not 5V tolerant. Not recommended because it's possible to damage the CPU by going over 500°C. * 201 : Pt100 with circuit in Overlord, similar to Ultimainboard V2.x * + * ================================================================ + * SPI RTD/Thermocouple Boards + * ================================================================ + * -5 : MAX31865 with Pt100/Pt1000, 2, 3, or 4-wire (only for sensors 0-1) + * NOTE: You must uncomment/set the MAX31865_*_OHMS_n defines below. + * -3 : MAX31855 with Thermocouple, -200°C to +700°C (only for sensors 0-1) + * -2 : MAX6675 with Thermocouple, 0°C to +700°C (only for sensors 0-1) + * + * NOTE: Ensure TEMP_n_CS_PIN is set in your pins file for each TEMP_SENSOR_n using an SPI Thermocouple. By default, + * Hardware SPI on the default serial bus is used. If you have also set TEMP_n_SCK_PIN and TEMP_n_MISO_PIN, + * Software SPI will be used on those ports instead. You can force Hardware SPI on the default bus in the + * Configuration_adv.h file. At this time, separate Hardware SPI buses for sensors are not supported. + * + * ================================================================ + * Analog Thermocouple Boards + * ================================================================ + * -4 : AD8495 with Thermocouple + * -1 : AD595 with Thermocouple + * + * ================================================================ + * SoC internal sensor + * ================================================================ + * 100 : SoC internal sensor + * + * ================================================================ * Custom/Dummy/Other Thermal Sensors - * ------ + * ================================================================ * 0 : not used * 1000 : Custom - Specify parameters in Configuration_adv.h * * !!! Use these for Testing or Development purposes. NEVER for production machine. !!! * 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below. * 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below. - * */ #define TEMP_SENSOR_0 504 #define TEMP_SENSOR_1 0 @@ -538,6 +552,7 @@ #define TEMP_SENSOR_CHAMBER 0 #define TEMP_SENSOR_COOLER 0 #define TEMP_SENSOR_BOARD 0 +#define TEMP_SENSOR_SOC 0 #define TEMP_SENSOR_REDUNDANT 0 // Dummy thermistor constant temperature readings, for use with 998 and 999 @@ -1078,28 +1093,6 @@ // @section endstops -// Specify here all the endstop connectors that are connected to any endstop or probe. -// Almost all printers will be using one per axis. Probes will use one or more of the -// extra connectors. Leave undefined any used for non-endstop and non-probe purposes. -#define USE_XMIN_PLUG -#define USE_YMIN_PLUG -#define USE_ZMIN_PLUG -//#define USE_IMIN_PLUG -//#define USE_JMIN_PLUG -//#define USE_KMIN_PLUG -//#define USE_UMIN_PLUG -//#define USE_VMIN_PLUG -//#define USE_WMIN_PLUG -//#define USE_XMAX_PLUG -//#define USE_YMAX_PLUG -//#define USE_ZMAX_PLUG -//#define USE_IMAX_PLUG -//#define USE_JMAX_PLUG -//#define USE_KMAX_PLUG -//#define USE_UMAX_PLUG -//#define USE_VMAX_PLUG -//#define USE_WMAX_PLUG - // Enable pullup for all endstops to prevent a floating state #define ENDSTOPPULLUPS #if DISABLED(ENDSTOPPULLUPS) @@ -1738,7 +1731,7 @@ #define Z_CLEARANCE_FOR_HOMING 4 // (mm) Minimal Z height before homing (G28) for Z clearance above the bed, clamps, ... // Be sure to have this much clearance over your Z_MAX_POS to prevent grinding. -#define Z_AFTER_HOMING 10 // (mm) Height to move to after homing Z +#define Z_AFTER_HOMING 10 // (mm) Height to move to after homing (if Z was homed) // Direction of endstops when homing; 1=MAX, -1=MIN // :[-1,1] @@ -2414,23 +2407,29 @@ //#define NOZZLE_CLEAN_FEATURE #if ENABLED(NOZZLE_CLEAN_FEATURE) - // Default number of pattern repetitions - #define NOZZLE_CLEAN_STROKES 12 + #define NOZZLE_CLEAN_PATTERN_LINE // Provide 'G12 P0' - a simple linear cleaning pattern + #define NOZZLE_CLEAN_PATTERN_ZIGZAG // Provide 'G12 P1' - a zigzag cleaning pattern + #define NOZZLE_CLEAN_PATTERN_CIRCLE // Provide 'G12 P2' - a circular cleaning pattern - // Default number of triangles - #define NOZZLE_CLEAN_TRIANGLES 3 + // Default pattern to use when 'P' is not provided to G12. One of the enabled options above. + #define NOZZLE_CLEAN_DEFAULT_PATTERN 0 + + #define NOZZLE_CLEAN_STROKES 12 // Default number of pattern repetitions + + #if ENABLED(NOZZLE_CLEAN_PATTERN_ZIGZAG) + #define NOZZLE_CLEAN_TRIANGLES 3 // Default number of triangles + #endif // Specify positions for each tool as { { X, Y, Z }, { X, Y, Z } } // Dual hotend system may use { { -20, (Y_BED_SIZE / 2), (Z_MIN_POS + 1) }, { 420, (Y_BED_SIZE / 2), (Z_MIN_POS + 1) }} #define NOZZLE_CLEAN_START_POINT { { 30, 30, (Z_MIN_POS + 1) } } #define NOZZLE_CLEAN_END_POINT { { 100, 60, (Z_MIN_POS + 1) } } - // Circular pattern radius - #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5 - // Circular pattern circle fragments number - #define NOZZLE_CLEAN_CIRCLE_FN 10 - // Middle point of circle - #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT + #if ENABLED(NOZZLE_CLEAN_PATTERN_CIRCLE) + #define NOZZLE_CLEAN_CIRCLE_RADIUS 6.5 // (mm) Circular pattern radius + #define NOZZLE_CLEAN_CIRCLE_FN 10 // Circular pattern circle number of segments + #define NOZZLE_CLEAN_CIRCLE_MIDDLE NOZZLE_CLEAN_START_POINT // Middle point of circle + #endif // Move the nozzle to the initial position after cleaning #define NOZZLE_CLEAN_GOBACK diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 90160f3fcfc5..2f92f43eb37c 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -276,9 +276,15 @@ #define THERMAL_PROTECTION_BOARD // Halt the printer if the board sensor leaves the temp range below. #define BOARD_MINTEMP 8 // (°C) #define BOARD_MAXTEMP 70 // (°C) - #ifndef TEMP_BOARD_PIN - //#define TEMP_BOARD_PIN -1 // Board temp sensor pin, if not set in pins file. - #endif + //#define TEMP_BOARD_PIN -1 // Board temp sensor pin override. +#endif + +// +// SoC Sensor options +// +#if TEMP_SENSOR_SOC + #define THERMAL_PROTECTION_SOC // Halt the printer if the SoC sensor leaves the temp range below. + #define SOC_MAXTEMP 85 // (°C) #endif /** @@ -579,6 +585,9 @@ // Use TEMP_SENSOR_BOARD as a trigger for enabling the controller fan //#define CONTROLLER_FAN_MIN_BOARD_TEMP 40 // (°C) Turn on the fan if the board reaches this temperature + // Use TEMP_SENSOR_SOC as a trigger for enabling the controller fan + //#define CONTROLLER_FAN_MIN_SOC_TEMP 40 // (°C) Turn on the fan if the SoC reaches this temperature + //#define CONTROLLER_FAN_EDITABLE // Enable M710 configurable settings #if ENABLED(CONTROLLER_FAN_EDITABLE) #define CONTROLLER_FAN_MENU // Enable the Controller Fan submenu @@ -840,13 +849,13 @@ * Get the offset by homing X and measuring the error. * Also set with 'M666 X' and stored to EEPROM with 'M500'. * - * - Use X2_USE_ENDSTOP to set the endstop plug by name. (_XMIN_, _XMAX_, _YMIN_, _YMAX_, _ZMIN_, _ZMAX_) + * - Define the extra endstop pins here to override defaults. No auto-assignment. */ #if HAS_X2_STEPPER && DISABLED(DUAL_X_CARRIAGE) //#define INVERT_X2_VS_X_DIR // X2 direction signal is the opposite of X //#define X_DUAL_ENDSTOPS // X2 has its own endstop #if ENABLED(X_DUAL_ENDSTOPS) - #define X2_USE_ENDSTOP _XMAX_ // X2 endstop board plug. Don't forget to enable USE_*_PLUG. + //#define X2_STOP_PIN X_MAX_PIN // X2 endstop pin override #define X2_ENDSTOP_ADJUSTMENT 0 // X2 offset relative to X endstop #endif #endif @@ -855,7 +864,7 @@ //#define INVERT_Y2_VS_Y_DIR // Y2 direction signal is the opposite of Y //#define Y_DUAL_ENDSTOPS // Y2 has its own endstop #if ENABLED(Y_DUAL_ENDSTOPS) - #define Y2_USE_ENDSTOP _YMAX_ // Y2 endstop board plug. Don't forget to enable USE_*_PLUG. + //#define Y2_STOP_PIN Y_MAX_PIN // Y2 endstop pin override #define Y2_ENDSTOP_ADJUSTMENT 0 // Y2 offset relative to Y endstop #endif #endif @@ -868,20 +877,20 @@ //#define Z_MULTI_ENDSTOPS // Other Z axes have their own endstops #if ENABLED(Z_MULTI_ENDSTOPS) - #define Z2_USE_ENDSTOP _XMAX_ // Z2 endstop board plug. Don't forget to enable USE_*_PLUG. + //#define Z2_STOP_PIN X_MAX_PIN // Z2 endstop pin override #define Z2_ENDSTOP_ADJUSTMENT 0 // Z2 offset relative to Z endstop #endif #ifdef Z3_DRIVER_TYPE //#define INVERT_Z3_VS_Z_DIR // Z3 direction signal is the opposite of Z #if ENABLED(Z_MULTI_ENDSTOPS) - #define Z3_USE_ENDSTOP _YMAX_ // Z3 endstop board plug. Don't forget to enable USE_*_PLUG. + //#define Z3_STOP_PIN Y_MAX_PIN // Z3 endstop pin override #define Z3_ENDSTOP_ADJUSTMENT 0 // Z3 offset relative to Z endstop #endif #endif #ifdef Z4_DRIVER_TYPE //#define INVERT_Z4_VS_Z_DIR // Z4 direction signal is the opposite of Z #if ENABLED(Z_MULTI_ENDSTOPS) - #define Z4_USE_ENDSTOP _ZMAX_ // Z4 endstop board plug. Don't forget to enable USE_*_PLUG. + //#define Z4_STOP_PIN Z_MAX_PIN // Z4 endstop pin override #define Z4_ENDSTOP_ADJUSTMENT 0 // Z4 offset relative to Z endstop #endif #endif @@ -915,7 +924,7 @@ //#define QUICK_HOME // If G28 contains XY do a diagonal move first //#define HOME_Y_BEFORE_X // If G28 contains XY home Y before X -//#define HOME_Z_FIRST // Home Z first. Requires a Z-MIN endstop (not a probe). +//#define HOME_Z_FIRST // Home Z first. Requires a real endstop (not a probe). //#define CODEPENDENT_XY_HOMING // If X/Y can't home without homing Y/X first // @section bltouch @@ -1512,6 +1521,9 @@ // Insert a menu for preheating at the top level to allow for quick access //#define PREHEAT_SHORTCUT_MENU_ITEM + // Add Configuration > Debug Menu > Endstop Test for endstop/probe/runout testing + //#define LCD_ENDSTOP_TEST + #endif // HAS_MARLINUI_MENU #if HAS_DISPLAY @@ -1525,23 +1537,24 @@ * We encourage you to take advantage of this new feature and we also * respectfully request that you retain the unmodified Marlin boot screen. */ - #if ANY(HAS_MARLINUI_U8GLIB, TOUCH_UI_FTDI_EVE, IS_DWIN_MARLINUI) - #define SHOW_BOOTSCREEN // Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION ** - #if ENABLED(SHOW_BOOTSCREEN) - #define BOOTSCREEN_TIMEOUT 4000 // (ms) Total Duration to display the boot screen(s) - #if EITHER(HAS_MARLINUI_U8GLIB, TFT_COLOR_UI) - #define BOOT_MARLIN_LOGO_SMALL // Show a smaller Marlin logo on the Boot Screen (saving lots of flash) - #endif - //#define SHOW_CUSTOM_BOOTSCREEN // Show the bitmap in Marlin/_Bootscreen.h on startup. + #define SHOW_BOOTSCREEN // Show the Marlin bootscreen on startup. ** ENABLE FOR PRODUCTION ** + #if ENABLED(SHOW_BOOTSCREEN) + #define BOOTSCREEN_TIMEOUT 4000 // (ms) Total Duration to display the boot screen(s) + #if EITHER(HAS_MARLINUI_U8GLIB, TFT_COLOR_UI) + #define BOOT_MARLIN_LOGO_SMALL // Show a smaller Marlin logo on the Boot Screen (saving lots of flash) #endif #if HAS_MARLINUI_U8GLIB - #if ENABLED(SHOW_BOOTSCREEN) - //#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~3260 (or ~940) bytes of flash. - #endif - //#define CUSTOM_STATUS_SCREEN_IMAGE // Show the bitmap in Marlin/_Statusscreen.h on the status screen. + //#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~3260 (or ~940) bytes of flash. + #endif + #if EITHER(HAS_MARLINUI_U8GLIB, TOUCH_UI_FTDI_EVE) + //#define SHOW_CUSTOM_BOOTSCREEN // Show the bitmap in Marlin/_Bootscreen.h on startup. #endif #endif + #if HAS_MARLINUI_U8GLIB + //#define CUSTOM_STATUS_SCREEN_IMAGE // Show the bitmap in Marlin/_Statusscreen.h on the status screen. + #endif + //#define SOUND_MENU_ITEM // Add a mute option to the LCD menu #define SOUND_ON_DEFAULT // Buzzer/speaker default enabled state @@ -1598,13 +1611,13 @@ #define SET_REMAINING_TIME // Add 'R' parameter to set remaining time //#define SET_INTERACTION_TIME // Add 'C' parameter to set time until next filament change or other user interaction #define M73_REPORT // Report M73 values to host - #if BOTH(M73_REPORT, SDSUPPORT) + #if BOTH(M73_REPORT, HAS_MEDIA) #define M73_REPORT_SD_ONLY // Report only when printing from SD #endif #endif // LCD Print Progress options. Multiple times may be displayed in turn. -#if HAS_DISPLAY && EITHER(SDSUPPORT, SET_PROGRESS_MANUALLY) +#if HAS_DISPLAY && EITHER(HAS_MEDIA, SET_PROGRESS_MANUALLY) #define SHOW_PROGRESS_PERCENT // Show print progress percentage (doesn't affect progress bar) #define SHOW_ELAPSED_TIME // Display elapsed printing time (prefix 'E') //#define SHOW_REMAINING_TIME // Display estimated time to completion (prefix 'R') @@ -1625,7 +1638,7 @@ #endif #endif -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA /** * SD Card SPI Speed * May be required to resolve "volume init" errors. @@ -1865,7 +1878,7 @@ #define DEFAULT_SHARED_VOLUME SV_USB_FLASH_DRIVE #endif -#endif // SDSUPPORT +#endif // HAS_MEDIA /** * By default an onboard SD card reader may be shared as a USB mass- @@ -2489,9 +2502,9 @@ // The number of linear moves that can be in the planner at once. // The value of BLOCK_BUFFER_SIZE must be a power of 2 (e.g., 8, 16, 32) -#if BOTH(SDSUPPORT, DIRECT_STEPPING) +#if BOTH(HAS_MEDIA, DIRECT_STEPPING) #define BLOCK_BUFFER_SIZE 8 -#elif ENABLED(SDSUPPORT) +#elif HAS_MEDIA #define BLOCK_BUFFER_SIZE 16 #else #define BLOCK_BUFFER_SIZE 16 @@ -2524,7 +2537,7 @@ //#define SERIAL_XON_XOFF #endif -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA // Enable this option to collect and display the maximum // RX queue usage after transferring a file to SD. //#define SERIAL_STATS_MAX_RX_QUEUED @@ -3721,6 +3734,9 @@ * Auto-report position with M154 S */ //#define AUTO_REPORT_POSITION +#if ENABLED(AUTO_REPORT_POSITION) + //#define AUTO_REPORT_REAL_POSITION // Auto-report the real position +#endif /** * Include capabilities in M115 output diff --git a/Marlin/Version.h b/Marlin/Version.h index 722c40ac4129..f530343972e0 100644 --- a/Marlin/Version.h +++ b/Marlin/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -#define STRING_DISTRIBUTION_DATE "2023-04-21" +//#define STRING_DISTRIBUTION_DATE "2023-05-04" /** * Defines a generic printer name to be output to the LCD after booting Marlin. diff --git a/Marlin/config.ini b/Marlin/config.ini index fbe7778b71ef..a17aeaa90673 100644 --- a/Marlin/config.ini +++ b/Marlin/config.ini @@ -70,10 +70,6 @@ x_home_dir = -1 y_home_dir = -1 z_home_dir = -1 -use_xmin_plug = on -use_ymin_plug = on -use_zmin_plug = on - x_min_endstop_hit_state = HIGH y_min_endstop_hit_state = HIGH z_min_endstop_hit_state = HIGH diff --git a/Marlin/src/HAL/AVR/HAL.cpp b/Marlin/src/HAL/AVR/HAL.cpp index 5382eb36a2bd..b3dcfbdf596c 100644 --- a/Marlin/src/HAL/AVR/HAL.cpp +++ b/Marlin/src/HAL/AVR/HAL.cpp @@ -145,12 +145,12 @@ void MarlinHAL::reboot() { // Free Memory Accessor // ------------------------ -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../../sd/SdFatUtil.h" int freeMemory() { return SdFatUtil::FreeRam(); } -#else // !SDSUPPORT +#else // !HAS_MEDIA extern "C" { extern char __bss_end; @@ -167,6 +167,6 @@ void MarlinHAL::reboot() { } } -#endif // !SDSUPPORT +#endif // !HAS_MEDIA #endif // __AVR__ diff --git a/Marlin/src/HAL/AVR/endstop_interrupts.h b/Marlin/src/HAL/AVR/endstop_interrupts.h index 5511aa406fec..a67b4493f0bc 100644 --- a/Marlin/src/HAL/AVR/endstop_interrupts.h +++ b/Marlin/src/HAL/AVR/endstop_interrupts.h @@ -160,7 +160,7 @@ void setup_endstop_interrupts() { pciSetup(Z_MAX_PIN); #endif #endif - #if HAS_Z_MIN + #if HAS_Z_MIN_PIN #if (digitalPinToInterrupt(Z_MIN_PIN) != NOT_AN_INTERRUPT) _ATTACH(Z_MIN_PIN); #else @@ -172,14 +172,14 @@ void setup_endstop_interrupts() { #if (digitalPinToInterrupt(I_MAX_PIN) != NOT_AN_INTERRUPT) _ATTACH(I_MAX_PIN); #else - static_assert(digitalPinHasPCICR(I_MAX_PIN), "I_MAX_PIN is not interrupt-capable"); + static_assert(digitalPinHasPCICR(I_MAX_PIN), "I_MAX_PIN is not interrupt-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."); pciSetup(I_MAX_PIN); #endif #elif HAS_I_MIN #if (digitalPinToInterrupt(I_MIN_PIN) != NOT_AN_INTERRUPT) _ATTACH(I_MIN_PIN); #else - static_assert(digitalPinHasPCICR(I_MIN_PIN), "I_MIN_PIN is not interrupt-capable"); + static_assert(digitalPinHasPCICR(I_MIN_PIN), "I_MIN_PIN is not interrupt-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."); pciSetup(I_MIN_PIN); #endif #endif @@ -187,14 +187,14 @@ void setup_endstop_interrupts() { #if (digitalPinToInterrupt(J_MAX_PIN) != NOT_AN_INTERRUPT) _ATTACH(J_MAX_PIN); #else - static_assert(digitalPinHasPCICR(J_MAX_PIN), "J_MAX_PIN is not interrupt-capable"); + static_assert(digitalPinHasPCICR(J_MAX_PIN), "J_MAX_PIN is not interrupt-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."); pciSetup(J_MAX_PIN); #endif #elif HAS_J_MIN #if (digitalPinToInterrupt(J_MIN_PIN) != NOT_AN_INTERRUPT) _ATTACH(J_MIN_PIN); #else - static_assert(digitalPinHasPCICR(J_MIN_PIN), "J_MIN_PIN is not interrupt-capable"); + static_assert(digitalPinHasPCICR(J_MIN_PIN), "J_MIN_PIN is not interrupt-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."); pciSetup(J_MIN_PIN); #endif #endif @@ -202,14 +202,14 @@ void setup_endstop_interrupts() { #if (digitalPinToInterrupt(K_MAX_PIN) != NOT_AN_INTERRUPT) _ATTACH(K_MAX_PIN); #else - static_assert(digitalPinHasPCICR(K_MAX_PIN), "K_MAX_PIN is not interrupt-capable"); + static_assert(digitalPinHasPCICR(K_MAX_PIN), "K_MAX_PIN is not interrupt-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."); pciSetup(K_MAX_PIN); #endif #elif HAS_K_MIN #if (digitalPinToInterrupt(K_MIN_PIN) != NOT_AN_INTERRUPT) _ATTACH(K_MIN_PIN); #else - static_assert(digitalPinHasPCICR(K_MIN_PIN), "K_MIN_PIN is not interrupt-capable"); + static_assert(digitalPinHasPCICR(K_MIN_PIN), "K_MIN_PIN is not interrupt-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."); pciSetup(K_MIN_PIN); #endif #endif @@ -217,14 +217,14 @@ void setup_endstop_interrupts() { #if (digitalPinToInterrupt(U_MAX_PIN) != NOT_AN_INTERRUPT) _ATTACH(U_MAX_PIN); #else - static_assert(digitalPinHasPCICR(U_MAX_PIN), "U_MAX_PIN is not interrupt-capable"); + static_assert(digitalPinHasPCICR(U_MAX_PIN), "U_MAX_PIN is not interrupt-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."); pciSetup(U_MAX_PIN); #endif #elif HAS_U_MIN #if (digitalPinToInterrupt(U_MIN_PIN) != NOT_AN_INTERRUPT) _ATTACH(U_MIN_PIN); #else - static_assert(digitalPinHasPCICR(U_MIN_PIN), "U_MIN_PIN is not interrupt-capable"); + static_assert(digitalPinHasPCICR(U_MIN_PIN), "U_MIN_PIN is not interrupt-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."); pciSetup(U_MIN_PIN); #endif #endif @@ -232,14 +232,14 @@ void setup_endstop_interrupts() { #if (digitalPinToInterrupt(V_MAX_PIN) != NOT_AN_INTERRUPT) _ATTACH(V_MAX_PIN); #else - static_assert(digitalPinHasPCICR(V_MAX_PIN), "V_MAX_PIN is not interrupt-capable"); + static_assert(digitalPinHasPCICR(V_MAX_PIN), "V_MAX_PIN is not interrupt-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."); pciSetup(V_MAX_PIN); #endif #elif HAS_V_MIN #if (digitalPinToInterrupt(V_MIN_PIN) != NOT_AN_INTERRUPT) _ATTACH(V_MIN_PIN); #else - static_assert(digitalPinHasPCICR(V_MIN_PIN), "V_MIN_PIN is not interrupt-capable"); + static_assert(digitalPinHasPCICR(V_MIN_PIN), "V_MIN_PIN is not interrupt-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."); pciSetup(V_MIN_PIN); #endif #endif @@ -247,14 +247,14 @@ void setup_endstop_interrupts() { #if (digitalPinToInterrupt(W_MAX_PIN) != NOT_AN_INTERRUPT) _ATTACH(W_MAX_PIN); #else - static_assert(digitalPinHasPCICR(W_MAX_PIN), "W_MAX_PIN is not interrupt-capable"); + static_assert(digitalPinHasPCICR(W_MAX_PIN), "W_MAX_PIN is not interrupt-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."); pciSetup(W_MAX_PIN); #endif #elif HAS_W_MIN #if (digitalPinToInterrupt(W_MIN_PIN) != NOT_AN_INTERRUPT) _ATTACH(W_MIN_PIN); #else - static_assert(digitalPinHasPCICR(W_MIN_PIN), "W_MIN_PIN is not interrupt-capable"); + static_assert(digitalPinHasPCICR(W_MIN_PIN), "W_MIN_PIN is not interrupt-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."); pciSetup(W_MIN_PIN); #endif #endif diff --git a/Marlin/src/HAL/DUE/HAL.cpp b/Marlin/src/HAL/DUE/HAL.cpp index 4353f1649732..1b57bdb2fad4 100644 --- a/Marlin/src/HAL/DUE/HAL.cpp +++ b/Marlin/src/HAL/DUE/HAL.cpp @@ -45,7 +45,7 @@ uint16_t MarlinHAL::adc_result; #endif void MarlinHAL::init() { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA OUT_WRITE(SDSS, HIGH); // Try to set SDSS inactive before any other SPI users start up #endif usb_task_init(); // Initialize the USB stack diff --git a/Marlin/src/HAL/DUE/MinSerial.cpp b/Marlin/src/HAL/DUE/MinSerial.cpp index e5b3dbfe6f36..505a712aa9a1 100644 --- a/Marlin/src/HAL/DUE/MinSerial.cpp +++ b/Marlin/src/HAL/DUE/MinSerial.cpp @@ -73,18 +73,18 @@ void install_min_serial() { } #if DISABLED(DYNAMIC_VECTORTABLE) -extern "C" { - __attribute__((naked)) void JumpHandler_ASM() { - __asm__ __volatile__ ( - "b CommonHandler_ASM\n" - ); + extern "C" { + __attribute__((naked)) void JumpHandler_ASM() { + __asm__ __volatile__ ( + "b CommonHandler_ASM\n" + ); + } + void __attribute__((naked, alias("JumpHandler_ASM"))) HardFault_Handler(); + void __attribute__((naked, alias("JumpHandler_ASM"))) BusFault_Handler(); + void __attribute__((naked, alias("JumpHandler_ASM"))) UsageFault_Handler(); + void __attribute__((naked, alias("JumpHandler_ASM"))) MemManage_Handler(); + void __attribute__((naked, alias("JumpHandler_ASM"))) NMI_Handler(); } - void __attribute__((naked, alias("JumpHandler_ASM"))) HardFault_Handler(); - void __attribute__((naked, alias("JumpHandler_ASM"))) BusFault_Handler(); - void __attribute__((naked, alias("JumpHandler_ASM"))) UsageFault_Handler(); - void __attribute__((naked, alias("JumpHandler_ASM"))) MemManage_Handler(); - void __attribute__((naked, alias("JumpHandler_ASM"))) NMI_Handler(); -} #endif #endif // POSTMORTEM_DEBUGGING diff --git a/Marlin/src/HAL/DUE/endstop_interrupts.h b/Marlin/src/HAL/DUE/endstop_interrupts.h index c1bbcb121bdc..9ce4fcdb2fce 100644 --- a/Marlin/src/HAL/DUE/endstop_interrupts.h +++ b/Marlin/src/HAL/DUE/endstop_interrupts.h @@ -47,33 +47,33 @@ void endstop_ISR() { endstops.update(); } void setup_endstop_interrupts() { #define _ATTACH(P) attachInterrupt(digitalPinToInterrupt(P), endstop_ISR, CHANGE) - TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN)); - TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN)); - TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN)); - TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN)); - TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN)); - TERN_(HAS_Z_MIN, _ATTACH(Z_MIN_PIN)); - TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN)); - TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN)); - TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN)); - TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN)); - TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN)); - TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN)); - TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN)); - TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN)); - TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN)); - TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN)); + TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN)); + TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN)); + TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN)); + TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN)); + TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN)); + TERN_(HAS_Z_MIN_PIN, _ATTACH(Z_MIN_PIN)); + TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN)); + TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN)); + TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN)); + TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN)); + TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN)); + TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN)); + TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN)); + TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN)); + TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN)); + TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN)); TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN)); - TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN)); - TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN)); - TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN)); - TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN)); - TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN)); - TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN)); - TERN_(HAS_U_MAX, _ATTACH(U_MAX_PIN)); - TERN_(HAS_U_MIN, _ATTACH(U_MIN_PIN)); - TERN_(HAS_V_MAX, _ATTACH(V_MAX_PIN)); - TERN_(HAS_V_MIN, _ATTACH(V_MIN_PIN)); - TERN_(HAS_W_MAX, _ATTACH(W_MAX_PIN)); - TERN_(HAS_W_MIN, _ATTACH(W_MIN_PIN)); + TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN)); + TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN)); + TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN)); + TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN)); + TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN)); + TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN)); + TERN_(HAS_U_MAX, _ATTACH(U_MAX_PIN)); + TERN_(HAS_U_MIN, _ATTACH(U_MIN_PIN)); + TERN_(HAS_V_MAX, _ATTACH(V_MAX_PIN)); + TERN_(HAS_V_MIN, _ATTACH(V_MIN_PIN)); + TERN_(HAS_W_MAX, _ATTACH(W_MAX_PIN)); + TERN_(HAS_W_MIN, _ATTACH(W_MIN_PIN)); } diff --git a/Marlin/src/HAL/DUE/inc/SanityCheck.h b/Marlin/src/HAL/DUE/inc/SanityCheck.h index 6bbf04a0acbb..a8f5de8298d1 100644 --- a/Marlin/src/HAL/DUE/inc/SanityCheck.h +++ b/Marlin/src/HAL/DUE/inc/SanityCheck.h @@ -70,7 +70,7 @@ */ #define _IS_HW_SPI(P) (defined(TMC_SPI_##P) && (TMC_SPI_##P == SD_MOSI_PIN || TMC_SPI_##P == SD_MISO_PIN || TMC_SPI_##P == SD_SCK_PIN)) -#if ENABLED(SDSUPPORT) && HAS_DRIVER(TMC2130) +#if HAS_MEDIA && HAS_DRIVER(TMC2130) #if ENABLED(TMC_USE_SW_SPI) #if DISABLED(DUE_SOFTWARE_SPI) && (_IS_HW_SPI(MOSI) || _IS_HW_SPI(MISO) || _IS_HW_SPI(SCK)) #error "DUE hardware SPI is required but is incompatible with TMC2130 software SPI. Either disable TMC_USE_SW_SPI or use separate pins for the two SPIs." diff --git a/Marlin/src/HAL/DUE/usb/conf_usb.h b/Marlin/src/HAL/DUE/usb/conf_usb.h index 4de9e347e213..f66194c6e6f9 100644 --- a/Marlin/src/HAL/DUE/usb/conf_usb.h +++ b/Marlin/src/HAL/DUE/usb/conf_usb.h @@ -101,7 +101,7 @@ #define USB_DEVICE_SPECIFIC_REQUEST() usb_task_other_requests() //@} -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA /** * USB Device low level configuration * When only one interface is used, these configurations are defined by the class module. @@ -185,7 +185,7 @@ //! Enable id string of interface to add an extra USB string #define UDI_CDC_IAD_STRING_ID 4 -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA /** * USB CDC low level configuration * In standalone these configurations are defined by the CDC module. diff --git a/Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp b/Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp index 34cc256b30ff..65a926ff362b 100644 --- a/Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp +++ b/Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp @@ -6,7 +6,7 @@ #include "../../../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../../../sd/cardreader.h" extern "C" { @@ -138,5 +138,5 @@ Ctrl_status sd_mmc_spi_usb_write_10(uint32_t addr, uint16_t nb_sector) { #endif // ACCESS_USB == true -#endif // SDSUPPORT +#endif // HAS_MEDIA #endif // ARDUINO_ARCH_SAM diff --git a/Marlin/src/HAL/DUE/usb/udi_cdc_desc.c b/Marlin/src/HAL/DUE/usb/udi_cdc_desc.c index 97c334e2a854..4c79e8df1309 100644 --- a/Marlin/src/HAL/DUE/usb/udi_cdc_desc.c +++ b/Marlin/src/HAL/DUE/usb/udi_cdc_desc.c @@ -51,7 +51,7 @@ #include "udc_desc.h" #include "udi_cdc.h" -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA /** * \defgroup udi_cdc_group_single_desc USB device descriptors for a single interface @@ -256,6 +256,6 @@ UDC_DESC_STORAGE udc_config_t udc_config = { //@} //@} -#endif // SDSUPPORT +#endif // HAS_MEDIA #endif // ARDUINO_ARCH_SAM diff --git a/Marlin/src/HAL/DUE/usb/udi_composite_desc.c b/Marlin/src/HAL/DUE/usb/udi_composite_desc.c index da74fbe60dfe..b10d043b9f12 100644 --- a/Marlin/src/HAL/DUE/usb/udi_composite_desc.c +++ b/Marlin/src/HAL/DUE/usb/udi_composite_desc.c @@ -50,7 +50,7 @@ #include "udd.h" #include "udc_desc.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA /** * \defgroup udi_group_desc Descriptors for a USB Device @@ -189,4 +189,4 @@ UDC_DESC_STORAGE udc_config_t udc_config = { #endif // ARDUINO_ARCH_SAM -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/HAL/DUE/usb/udi_msc.c b/Marlin/src/HAL/DUE/usb/udi_msc.c index dd3404877210..a75b5936b338 100644 --- a/Marlin/src/HAL/DUE/usb/udi_msc.c +++ b/Marlin/src/HAL/DUE/usb/udi_msc.c @@ -57,7 +57,7 @@ #include "ctrl_access.h" #include -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #ifndef UDI_MSC_NOTIFY_TRANS_EXT # define UDI_MSC_NOTIFY_TRANS_EXT() @@ -1127,6 +1127,6 @@ bool udi_msc_trans_block(bool b_read, uint8_t * block, iram_size_t block_size, //@} -#endif // SDSUPPORT +#endif // HAS_MEDIA #endif // ARDUINO_ARCH_SAM diff --git a/Marlin/src/HAL/DUE/usb/usb_task.c b/Marlin/src/HAL/DUE/usb/usb_task.c index 86ab27217abc..6f027f83a135 100644 --- a/Marlin/src/HAL/DUE/usb/usb_task.c +++ b/Marlin/src/HAL/DUE/usb/usb_task.c @@ -51,14 +51,14 @@ #include "conf_usb.h" #include "udc.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA static volatile bool main_b_msc_enable = false; #endif static volatile bool main_b_cdc_enable = false; static volatile bool main_b_dtr_active = false; void usb_task_idle(void) { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA // Attend SD card access from the USB MSD -- Prioritize access to improve speed int delay = 2; while (main_b_msc_enable && --delay > 0) { @@ -70,7 +70,7 @@ void usb_task_idle(void) { #endif } -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA bool usb_task_msc_enable(void) { return ((main_b_msc_enable = true)); } void usb_task_msc_disable(void) { main_b_msc_enable = false; } bool usb_task_msc_isenabled(void) { return main_b_msc_enable; } @@ -206,13 +206,13 @@ static USB_MicrosoftExtendedPropertiesDescriptor microsoft_extended_properties_d bool usb_task_extra_string(void) { static uint8_t udi_msft_magic[] = "MSFT100\xEE"; static uint8_t udi_cdc_name[] = "CDC interface"; - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA static uint8_t udi_msc_name[] = "MSC interface"; #endif struct extra_strings_desc_t { usb_str_desc_t header; - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA le16_t string[Max(Max(sizeof(udi_cdc_name) - 1, sizeof(udi_msc_name) - 1), sizeof(udi_msft_magic) - 1)]; #else le16_t string[Max(sizeof(udi_cdc_name) - 1, sizeof(udi_msft_magic) - 1)]; @@ -231,7 +231,7 @@ bool usb_task_extra_string(void) { str_lgt = sizeof(udi_cdc_name) - 1; str = udi_cdc_name; break; - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA case UDI_MSC_STRING_ID: str_lgt = sizeof(udi_msc_name) - 1; str = udi_msc_name; diff --git a/Marlin/src/HAL/ESP32/HAL_SPI.cpp b/Marlin/src/HAL/ESP32/HAL_SPI.cpp index 868ab1b6712d..6dc540864eec 100644 --- a/Marlin/src/HAL/ESP32/HAL_SPI.cpp +++ b/Marlin/src/HAL/ESP32/HAL_SPI.cpp @@ -53,7 +53,7 @@ static SPISettings spiConfig; // ------------------------ void spiBegin() { - #if ENABLED(SDSUPPORT) && PIN_EXISTS(SD_SS) + #if HAS_MEDIA && PIN_EXISTS(SD_SS) OUT_WRITE(SD_SS_PIN, HIGH); #endif } diff --git a/Marlin/src/HAL/ESP32/endstop_interrupts.h b/Marlin/src/HAL/ESP32/endstop_interrupts.h index 05368646101e..f48cda4511f3 100644 --- a/Marlin/src/HAL/ESP32/endstop_interrupts.h +++ b/Marlin/src/HAL/ESP32/endstop_interrupts.h @@ -42,33 +42,33 @@ void ICACHE_RAM_ATTR endstop_ISR() { endstops.update(); } void setup_endstop_interrupts() { #define _ATTACH(P) attachInterrupt(digitalPinToInterrupt(P), endstop_ISR, CHANGE) - TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN)); - TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN)); - TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN)); - TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN)); - TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN)); - TERN_(HAS_Z_MIN, _ATTACH(Z_MIN_PIN)); - TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN)); - TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN)); - TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN)); - TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN)); - TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN)); - TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN)); - TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN)); - TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN)); - TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN)); - TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN)); + TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN)); + TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN)); + TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN)); + TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN)); + TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN)); + TERN_(HAS_Z_MIN_PIN, _ATTACH(Z_MIN_PIN)); + TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN)); + TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN)); + TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN)); + TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN)); + TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN)); + TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN)); + TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN)); + TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN)); + TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN)); + TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN)); TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN)); - TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN)); - TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN)); - TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN)); - TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN)); - TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN)); - TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN)); - TERN_(HAS_U_MAX, _ATTACH(U_MAX_PIN)); - TERN_(HAS_U_MIN, _ATTACH(U_MIN_PIN)); - TERN_(HAS_V_MAX, _ATTACH(V_MAX_PIN)); - TERN_(HAS_V_MIN, _ATTACH(V_MIN_PIN)); - TERN_(HAS_W_MAX, _ATTACH(W_MAX_PIN)); - TERN_(HAS_W_MIN, _ATTACH(W_MIN_PIN)); + TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN)); + TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN)); + TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN)); + TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN)); + TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN)); + TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN)); + TERN_(HAS_U_MAX, _ATTACH(U_MAX_PIN)); + TERN_(HAS_U_MIN, _ATTACH(U_MIN_PIN)); + TERN_(HAS_V_MAX, _ATTACH(V_MAX_PIN)); + TERN_(HAS_V_MIN, _ATTACH(V_MIN_PIN)); + TERN_(HAS_W_MAX, _ATTACH(W_MAX_PIN)); + TERN_(HAS_W_MIN, _ATTACH(W_MIN_PIN)); } diff --git a/Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp b/Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp index bd7ecdc9f217..955c751e4869 100644 --- a/Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp +++ b/Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp @@ -32,7 +32,7 @@ #include "HAL.h" #include "SPI.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../../sd/cardreader.h" #if ENABLED(ESP3D_WIFISUPPORT) #include "sd_ESP32.h" diff --git a/Marlin/src/HAL/HAL.h b/Marlin/src/HAL/HAL.h index 518657801905..f3e16cfdf12c 100644 --- a/Marlin/src/HAL/HAL.h +++ b/Marlin/src/HAL/HAL.h @@ -27,7 +27,7 @@ #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) #endif -#include HAL_PATH(.,HAL.h) +#include HAL_PATH(..,HAL.h) extern MarlinHAL hal; #define HAL_ADC_RANGE _BV(HAL_ADC_RESOLUTION) diff --git a/Marlin/src/HAL/LINUX/spi_pins.h b/Marlin/src/HAL/LINUX/spi_pins.h index 9ecbb0498787..f09d1decb8eb 100644 --- a/Marlin/src/HAL/LINUX/spi_pins.h +++ b/Marlin/src/HAL/LINUX/spi_pins.h @@ -24,7 +24,7 @@ #include "../../core/macros.h" #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_MARLINUI_U8GLIB, SDSUPPORT) && (LCD_PINS_D4 == SD_SCK_PIN || LCD_PINS_EN == SD_MOSI_PIN || DOGLCD_SCK == SD_SCK_PIN || DOGLCD_MOSI == SD_MOSI_PIN) +#if BOTH(HAS_MARLINUI_U8GLIB, HAS_MEDIA) && (LCD_PINS_D4 == SD_SCK_PIN || LCD_PINS_EN == SD_MOSI_PIN || DOGLCD_SCK == SD_SCK_PIN || DOGLCD_MOSI == SD_MOSI_PIN) #define SOFTWARE_SPI // If the SD card and LCD adapter share the same SPI pins, then software SPI is currently // needed due to the speed and mode required for communicating with each device being different. // This requirement can be removed if the SPI access to these devices is updated to use diff --git a/Marlin/src/HAL/LPC1768/HAL.h b/Marlin/src/HAL/LPC1768/HAL.h index 15d61d30d1f6..6d5824f7a151 100644 --- a/Marlin/src/HAL/LPC1768/HAL.h +++ b/Marlin/src/HAL/LPC1768/HAL.h @@ -165,7 +165,9 @@ int16_t PARSED_PIN_INDEX(const char code, const int16_t dval); // Defines // ------------------------ -#define PLATFORM_M997_SUPPORT +#ifndef PLATFORM_M997_SUPPORT + #define PLATFORM_M997_SUPPORT +#endif void flashFirmware(const int16_t); #define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment diff --git a/Marlin/src/HAL/LPC1768/MinSerial.cpp b/Marlin/src/HAL/LPC1768/MinSerial.cpp index 7a1c038c0b0b..368bcb5259cd 100644 --- a/Marlin/src/HAL/LPC1768/MinSerial.cpp +++ b/Marlin/src/HAL/LPC1768/MinSerial.cpp @@ -33,18 +33,18 @@ static void TX(char c) { _DBC(c); } void install_min_serial() { HAL_min_serial_out = &TX; } #if DISABLED(DYNAMIC_VECTORTABLE) -extern "C" { - __attribute__((naked)) void JumpHandler_ASM() { - __asm__ __volatile__ ( - "b CommonHandler_ASM\n" - ); + extern "C" { + __attribute__((naked)) void JumpHandler_ASM() { + __asm__ __volatile__ ( + "b CommonHandler_ASM\n" + ); + } + void __attribute__((naked, alias("JumpHandler_ASM"))) HardFault_Handler(); + void __attribute__((naked, alias("JumpHandler_ASM"))) BusFault_Handler(); + void __attribute__((naked, alias("JumpHandler_ASM"))) UsageFault_Handler(); + void __attribute__((naked, alias("JumpHandler_ASM"))) MemManage_Handler(); + void __attribute__((naked, alias("JumpHandler_ASM"))) NMI_Handler(); } - void __attribute__((naked, alias("JumpHandler_ASM"))) HardFault_Handler(); - void __attribute__((naked, alias("JumpHandler_ASM"))) BusFault_Handler(); - void __attribute__((naked, alias("JumpHandler_ASM"))) UsageFault_Handler(); - void __attribute__((naked, alias("JumpHandler_ASM"))) MemManage_Handler(); - void __attribute__((naked, alias("JumpHandler_ASM"))) NMI_Handler(); -} #endif #endif // POSTMORTEM_DEBUGGING diff --git a/Marlin/src/HAL/LPC1768/endstop_interrupts.h b/Marlin/src/HAL/LPC1768/endstop_interrupts.h index e4ac17f60815..2253b92627d9 100644 --- a/Marlin/src/HAL/LPC1768/endstop_interrupts.h +++ b/Marlin/src/HAL/LPC1768/endstop_interrupts.h @@ -74,12 +74,36 @@ void setup_endstop_interrupts() { #endif _ATTACH(Z_MAX_PIN); #endif - #if HAS_Z_MIN + #if HAS_Z_MIN_PIN #if !LPC1768_PIN_INTERRUPT_M(Z_MIN_PIN) #error "Z_MIN_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z_MIN_PIN); #endif + #if HAS_X2_MAX + #if !LPC1768_PIN_INTERRUPT_M(X2_MAX_PIN) + #error "X2_MAX_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." + #endif + _ATTACH(X2_MAX_PIN); + #endif + #if HAS_X2_MIN + #if !LPC1768_PIN_INTERRUPT_M(X2_MIN_PIN) + #error "X2_MIN_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." + #endif + _ATTACH(X2_MIN_PIN); + #endif + #if HAS_Y2_MAX + #if !LPC1768_PIN_INTERRUPT_M(Y2_MAX_PIN) + #error "Y2_MAX_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." + #endif + _ATTACH(Y2_MAX_PIN); + #endif + #if HAS_Y2_MIN + #if !LPC1768_PIN_INTERRUPT_M(Y2_MIN_PIN) + #error "Y2_MIN_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." + #endif + _ATTACH(Y2_MIN_PIN); + #endif #if HAS_Z2_MAX #if !LPC1768_PIN_INTERRUPT_M(Z2_MAX_PIN) #error "Z2_MAX_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." @@ -124,67 +148,67 @@ void setup_endstop_interrupts() { #endif #if HAS_I_MAX #if !LPC1768_PIN_INTERRUPT_M(I_MAX_PIN) - #error "I_MAX_PIN is not INTERRUPT-capable." + #error "I_MAX_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(I_MAX_PIN); #elif HAS_I_MIN #if !LPC1768_PIN_INTERRUPT_M(I_MIN_PIN) - #error "I_MIN_PIN is not INTERRUPT-capable." + #error "I_MIN_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(I_MIN_PIN); #endif #if HAS_J_MAX #if !LPC1768_PIN_INTERRUPT_M(J_MAX_PIN) - #error "J_MAX_PIN is not INTERRUPT-capable." + #error "J_MAX_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(J_MAX_PIN); #elif HAS_J_MIN #if !LPC1768_PIN_INTERRUPT_M(J_MIN_PIN) - #error "J_MIN_PIN is not INTERRUPT-capable." + #error "J_MIN_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(J_MIN_PIN); #endif #if HAS_K_MAX #if !LPC1768_PIN_INTERRUPT_M(K_MAX_PIN) - #error "K_MAX_PIN is not INTERRUPT-capable." + #error "K_MAX_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(K_MAX_PIN); #elif HAS_K_MIN #if !LPC1768_PIN_INTERRUPT_M(K_MIN_PIN) - #error "K_MIN_PIN is not INTERRUPT-capable." + #error "K_MIN_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(K_MIN_PIN); #endif #if HAS_U_MAX #if !LPC1768_PIN_INTERRUPT_M(U_MAX_PIN) - #error "U_MAX_PIN is not INTERRUPT-capable." + #error "U_MAX_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(U_MAX_PIN); #elif HAS_U_MIN #if !LPC1768_PIN_INTERRUPT_M(U_MIN_PIN) - #error "U_MIN_PIN is not INTERRUPT-capable." + #error "U_MIN_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(U_MIN_PIN); #endif #if HAS_V_MAX #if !LPC1768_PIN_INTERRUPT_M(V_MAX_PIN) - #error "V_MAX_PIN is not INTERRUPT-capable." + #error "V_MAX_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(V_MAX_PIN); #elif HAS_V_MIN #if !LPC1768_PIN_INTERRUPT_M(V_MIN_PIN) - #error "V_MIN_PIN is not INTERRUPT-capable." + #error "V_MIN_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(V_MIN_PIN); #endif #if HAS_W_MAX #if !LPC1768_PIN_INTERRUPT_M(W_MAX_PIN) - #error "W_MAX_PIN is not INTERRUPT-capable." + #error "W_MAX_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(W_MAX_PIN); #elif HAS_W_MIN #if !LPC1768_PIN_INTERRUPT_M(W_MIN_PIN) - #error "W_MIN_PIN is not INTERRUPT-capable." + #error "W_MIN_PIN is not INTERRUPT-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(W_MIN_PIN); #endif diff --git a/Marlin/src/HAL/LPC1768/inc/SanityCheck.h b/Marlin/src/HAL/LPC1768/inc/SanityCheck.h index 9f78f2a70d19..f49bc34c9253 100644 --- a/Marlin/src/HAL/LPC1768/inc/SanityCheck.h +++ b/Marlin/src/HAL/LPC1768/inc/SanityCheck.h @@ -201,7 +201,7 @@ static_assert(DISABLED(BAUD_RATE_GCODE), "BAUD_RATE_GCODE is not yet supported o #if USEDI2CDEV_M == 0 // P0_27 [D57] (AUX-1) .......... P0_28 [D58] (AUX-1) #define PIN_IS_SDA0(P) (P##_PIN == P0_27) #define IS_SCL0(P) (P == P0_28) - #if ENABLED(SDSUPPORT) && PIN_IS_SDA0(SD_DETECT) + #if HAS_MEDIA && PIN_IS_SDA0(SD_DETECT) #error "SDA0 overlaps with SD_DETECT_PIN!" #elif PIN_IS_SDA0(E0_AUTO_FAN) #error "SDA0 overlaps with E0_AUTO_FAN_PIN!" diff --git a/Marlin/src/HAL/LPC1768/spi_pins.h b/Marlin/src/HAL/LPC1768/spi_pins.h index e716d00fb094..33a5b369adab 100644 --- a/Marlin/src/HAL/LPC1768/spi_pins.h +++ b/Marlin/src/HAL/LPC1768/spi_pins.h @@ -23,7 +23,7 @@ #include "../../core/macros.h" -#if BOTH(SDSUPPORT, HAS_MARLINUI_U8GLIB) && (LCD_PINS_D4 == SD_SCK_PIN || LCD_PINS_EN == SD_MOSI_PIN || DOGLCD_SCK == SD_SCK_PIN || DOGLCD_MOSI == SD_MOSI_PIN) +#if BOTH(HAS_MEDIA, HAS_MARLINUI_U8GLIB) && (LCD_PINS_D4 == SD_SCK_PIN || LCD_PINS_EN == SD_MOSI_PIN || DOGLCD_SCK == SD_SCK_PIN || DOGLCD_MOSI == SD_MOSI_PIN) #define SOFTWARE_SPI // If the SD card and LCD adapter share the same SPI pins, then software SPI is currently // needed due to the speed and mode required for communicating with each device being different. // This requirement can be removed if the SPI access to these devices is updated to use diff --git a/Marlin/src/HAL/LPC1768/tft/tft_spi.cpp b/Marlin/src/HAL/LPC1768/tft/tft_spi.cpp index abf1cf5e439d..10555762b1a0 100644 --- a/Marlin/src/HAL/LPC1768/tft/tft_spi.cpp +++ b/Marlin/src/HAL/LPC1768/tft/tft_spi.cpp @@ -20,6 +20,8 @@ * */ +#ifdef TARGET_LPC1768 + #include "../../../inc/MarlinConfig.h" #if HAS_SPI_TFT @@ -143,3 +145,4 @@ void TFT_SPI::TransmitDMA(uint32_t MemoryIncrease, uint16_t *Data, uint16_t Coun } #endif // HAS_SPI_TFT +#endif // TARGET_LPC1768 diff --git a/Marlin/src/HAL/LPC1768/tft/xpt2046.cpp b/Marlin/src/HAL/LPC1768/tft/xpt2046.cpp index 68a2176f5ed6..910511612b9b 100644 --- a/Marlin/src/HAL/LPC1768/tft/xpt2046.cpp +++ b/Marlin/src/HAL/LPC1768/tft/xpt2046.cpp @@ -20,6 +20,8 @@ * */ +#ifdef TARGET_LPC1768 + #include "../../../inc/MarlinConfig.h" #if HAS_TFT_XPT2046 || HAS_RES_TOUCH_BUTTONS @@ -130,4 +132,5 @@ uint16_t XPT2046::SoftwareIO(uint16_t data) { return result; } -#endif // HAS_TFT_XPT2046 +#endif // HAS_TFT_XPT2046 || HAS_RES_TOUCH_BUTTONS +#endif // TARGET_LPC1768 diff --git a/Marlin/src/HAL/NATIVE_SIM/spi_pins.h b/Marlin/src/HAL/NATIVE_SIM/spi_pins.h index eb20a21c56dd..02fb3592382c 100644 --- a/Marlin/src/HAL/NATIVE_SIM/spi_pins.h +++ b/Marlin/src/HAL/NATIVE_SIM/spi_pins.h @@ -24,7 +24,7 @@ #include "../../core/macros.h" #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_MARLINUI_U8GLIB, SDSUPPORT) && (LCD_PINS_D4 == SD_SCK_PIN || LCD_PINS_EN == SD_MOSI_PIN || DOGLCD_SCK == SD_SCK_PIN || DOGLCD_MOSI == SD_MOSI_PIN) +#if BOTH(HAS_MARLINUI_U8GLIB, HAS_MEDIA) && (LCD_PINS_D4 == SD_SCK_PIN || LCD_PINS_EN == SD_MOSI_PIN || DOGLCD_SCK == SD_SCK_PIN || DOGLCD_MOSI == SD_MOSI_PIN) #define SOFTWARE_SPI // If the SD card and LCD adapter share the same SPI pins, then software SPI is currently // needed due to the speed and mode required for communicating with each device being different. // This requirement can be removed if the SPI access to these devices is updated to use diff --git a/Marlin/src/HAL/SAMD21/HAL.cpp b/Marlin/src/HAL/SAMD21/HAL.cpp index 14c439eeb911..1bc0406ab3f0 100644 --- a/Marlin/src/HAL/SAMD21/HAL.cpp +++ b/Marlin/src/HAL/SAMD21/HAL.cpp @@ -105,7 +105,7 @@ void MarlinHAL::dma_init() {} // HAL initialization task void MarlinHAL::init() { TERN_(DMA_IS_REQUIRED, dma_init()); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA #if HAS_SD_DETECT && SD_CONNECTION_IS(ONBOARD) SET_INPUT_PULLUP(SD_DETECT_PIN); #endif diff --git a/Marlin/src/HAL/SAMD21/endstop_interrupts.h b/Marlin/src/HAL/SAMD21/endstop_interrupts.h index d8711aa01870..a277e04097f4 100644 --- a/Marlin/src/HAL/SAMD21/endstop_interrupts.h +++ b/Marlin/src/HAL/SAMD21/endstop_interrupts.h @@ -54,30 +54,34 @@ #include "../../module/endstops.h" #define MATCH_EILINE(P1,P2) (P1 != P2 && PIN_TO_EILINE(P1) == PIN_TO_EILINE(P2)) -#define MATCH_X_MAX_EILINE(P) TERN0(HAS_X_MAX, DEFER4(MATCH_EILINE)(P, X_MAX_PIN)) -#define MATCH_X_MIN_EILINE(P) TERN0(HAS_X_MIN, DEFER4(MATCH_EILINE)(P, X_MIN_PIN)) -#define MATCH_Y_MAX_EILINE(P) TERN0(HAS_Y_MAX, DEFER4(MATCH_EILINE)(P, Y_MAX_PIN)) -#define MATCH_Y_MIN_EILINE(P) TERN0(HAS_Y_MIN, DEFER4(MATCH_EILINE)(P, Y_MIN_PIN)) -#define MATCH_Z_MAX_EILINE(P) TERN0(HAS_Z_MAX, DEFER4(MATCH_EILINE)(P, Z_MAX_PIN)) -#define MATCH_Z_MIN_EILINE(P) TERN0(HAS_Z_MIN, DEFER4(MATCH_EILINE)(P, Z_MIN_PIN)) -#define MATCH_I_MAX_EILINE(P) TERN0(HAS_I_MAX, DEFER4(MATCH_EILINE)(P, I_MAX_PIN)) -#define MATCH_I_MIN_EILINE(P) TERN0(HAS_I_MIN, DEFER4(MATCH_EILINE)(P, I_MIN_PIN)) -#define MATCH_J_MAX_EILINE(P) TERN0(HAS_J_MAX, DEFER4(MATCH_EILINE)(P, J_MAX_PIN)) -#define MATCH_J_MIN_EILINE(P) TERN0(HAS_J_MIN, DEFER4(MATCH_EILINE)(P, J_MIN_PIN)) -#define MATCH_K_MAX_EILINE(P) TERN0(HAS_K_MAX, DEFER4(MATCH_EILINE)(P, K_MAX_PIN)) -#define MATCH_K_MIN_EILINE(P) TERN0(HAS_K_MIN, DEFER4(MATCH_EILINE)(P, K_MIN_PIN)) -#define MATCH_U_MAX_EILINE(P) TERN0(HAS_U_MAX, DEFER4(MATCH_EILINE)(P, U_MAX_PIN)) -#define MATCH_U_MIN_EILINE(P) TERN0(HAS_U_MIN, DEFER4(MATCH_EILINE)(P, U_MIN_PIN)) -#define MATCH_V_MAX_EILINE(P) TERN0(HAS_V_MAX, DEFER4(MATCH_EILINE)(P, V_MAX_PIN)) -#define MATCH_V_MIN_EILINE(P) TERN0(HAS_V_MIN, DEFER4(MATCH_EILINE)(P, V_MIN_PIN)) -#define MATCH_W_MAX_EILINE(P) TERN0(HAS_W_MAX, DEFER4(MATCH_EILINE)(P, W_MAX_PIN)) -#define MATCH_W_MIN_EILINE(P) TERN0(HAS_W_MIN, DEFER4(MATCH_EILINE)(P, W_MIN_PIN)) -#define MATCH_Z2_MAX_EILINE(P) TERN0(HAS_Z2_MAX, DEFER4(MATCH_EILINE)(P, Z2_MAX_PIN)) -#define MATCH_Z2_MIN_EILINE(P) TERN0(HAS_Z2_MIN, DEFER4(MATCH_EILINE)(P, Z2_MIN_PIN)) -#define MATCH_Z3_MAX_EILINE(P) TERN0(HAS_Z3_MAX, DEFER4(MATCH_EILINE)(P, Z3_MAX_PIN)) -#define MATCH_Z3_MIN_EILINE(P) TERN0(HAS_Z3_MIN, DEFER4(MATCH_EILINE)(P, Z3_MIN_PIN)) -#define MATCH_Z4_MAX_EILINE(P) TERN0(HAS_Z4_MAX, DEFER4(MATCH_EILINE)(P, Z4_MAX_PIN)) -#define MATCH_Z4_MIN_EILINE(P) TERN0(HAS_Z4_MIN, DEFER4(MATCH_EILINE)(P, Z4_MIN_PIN)) +#define MATCH_X_MAX_EILINE(P) TERN0(HAS_X_MAX, DEFER4(MATCH_EILINE)(P, X_MAX_PIN)) +#define MATCH_X_MIN_EILINE(P) TERN0(HAS_X_MIN, DEFER4(MATCH_EILINE)(P, X_MIN_PIN)) +#define MATCH_Y_MAX_EILINE(P) TERN0(HAS_Y_MAX, DEFER4(MATCH_EILINE)(P, Y_MAX_PIN)) +#define MATCH_Y_MIN_EILINE(P) TERN0(HAS_Y_MIN, DEFER4(MATCH_EILINE)(P, Y_MIN_PIN)) +#define MATCH_Z_MAX_EILINE(P) TERN0(HAS_Z_MAX, DEFER4(MATCH_EILINE)(P, Z_MAX_PIN)) +#define MATCH_Z_MIN_EILINE(P) TERN0(HAS_Z_MIN_PIN, DEFER4(MATCH_EILINE)(P, Z_MIN_PIN)) +#define MATCH_I_MAX_EILINE(P) TERN0(HAS_I_MAX, DEFER4(MATCH_EILINE)(P, I_MAX_PIN)) +#define MATCH_I_MIN_EILINE(P) TERN0(HAS_I_MIN, DEFER4(MATCH_EILINE)(P, I_MIN_PIN)) +#define MATCH_J_MAX_EILINE(P) TERN0(HAS_J_MAX, DEFER4(MATCH_EILINE)(P, J_MAX_PIN)) +#define MATCH_J_MIN_EILINE(P) TERN0(HAS_J_MIN, DEFER4(MATCH_EILINE)(P, J_MIN_PIN)) +#define MATCH_K_MAX_EILINE(P) TERN0(HAS_K_MAX, DEFER4(MATCH_EILINE)(P, K_MAX_PIN)) +#define MATCH_K_MIN_EILINE(P) TERN0(HAS_K_MIN, DEFER4(MATCH_EILINE)(P, K_MIN_PIN)) +#define MATCH_U_MAX_EILINE(P) TERN0(HAS_U_MAX, DEFER4(MATCH_EILINE)(P, U_MAX_PIN)) +#define MATCH_U_MIN_EILINE(P) TERN0(HAS_U_MIN, DEFER4(MATCH_EILINE)(P, U_MIN_PIN)) +#define MATCH_V_MAX_EILINE(P) TERN0(HAS_V_MAX, DEFER4(MATCH_EILINE)(P, V_MAX_PIN)) +#define MATCH_V_MIN_EILINE(P) TERN0(HAS_V_MIN, DEFER4(MATCH_EILINE)(P, V_MIN_PIN)) +#define MATCH_W_MAX_EILINE(P) TERN0(HAS_W_MAX, DEFER4(MATCH_EILINE)(P, W_MAX_PIN)) +#define MATCH_W_MIN_EILINE(P) TERN0(HAS_W_MIN, DEFER4(MATCH_EILINE)(P, W_MIN_PIN)) +#define MATCH_X2_MAX_EILINE(P) TERN0(HAS_X2_MAX, DEFER4(MATCH_EILINE)(P, X2_MAX_PIN)) +#define MATCH_X2_MIN_EILINE(P) TERN0(HAS_X2_MIN, DEFER4(MATCH_EILINE)(P, X2_MIN_PIN)) +#define MATCH_Y2_MAX_EILINE(P) TERN0(HAS_Y2_MAX, DEFER4(MATCH_EILINE)(P, Y2_MAX_PIN)) +#define MATCH_Y2_MIN_EILINE(P) TERN0(HAS_Y2_MIN, DEFER4(MATCH_EILINE)(P, Y2_MIN_PIN)) +#define MATCH_Z2_MAX_EILINE(P) TERN0(HAS_Z2_MAX, DEFER4(MATCH_EILINE)(P, Z2_MAX_PIN)) +#define MATCH_Z2_MIN_EILINE(P) TERN0(HAS_Z2_MIN, DEFER4(MATCH_EILINE)(P, Z2_MIN_PIN)) +#define MATCH_Z3_MAX_EILINE(P) TERN0(HAS_Z3_MAX, DEFER4(MATCH_EILINE)(P, Z3_MAX_PIN)) +#define MATCH_Z3_MIN_EILINE(P) TERN0(HAS_Z3_MIN, DEFER4(MATCH_EILINE)(P, Z3_MIN_PIN)) +#define MATCH_Z4_MAX_EILINE(P) TERN0(HAS_Z4_MAX, DEFER4(MATCH_EILINE)(P, Z4_MAX_PIN)) +#define MATCH_Z4_MIN_EILINE(P) TERN0(HAS_Z4_MIN, DEFER4(MATCH_EILINE)(P, Z4_MIN_PIN)) #define MATCH_Z_MIN_PROBE_EILINE(P) TERN0(HAS_Z_MIN_PROBE_PIN, DEFER4(MATCH_EILINE)(P, Z_MIN_PROBE_PIN)) #define AVAILABLE_EILINE(P) ( PIN_TO_EILINE(P) != -1 \ @@ -90,6 +94,8 @@ && !MATCH_U_MAX_EILINE(P) && !MATCH_U_MIN_EILINE(P) \ && !MATCH_V_MAX_EILINE(P) && !MATCH_V_MIN_EILINE(P) \ && !MATCH_W_MAX_EILINE(P) && !MATCH_W_MIN_EILINE(P) \ + && !MATCH_X2_MAX_EILINE(P) && !MATCH_X2_MIN_EILINE(P) \ + && !MATCH_Y2_MAX_EILINE(P) && !MATCH_Y2_MIN_EILINE(P) \ && !MATCH_Z2_MAX_EILINE(P) && !MATCH_Z2_MIN_EILINE(P) \ && !MATCH_Z3_MAX_EILINE(P) && !MATCH_Z3_MIN_EILINE(P) \ && !MATCH_Z4_MAX_EILINE(P) && !MATCH_Z4_MIN_EILINE(P) \ @@ -102,151 +108,175 @@ void setup_endstop_interrupts() { #define _ATTACH(P) attachInterrupt(P, endstop_ISR, CHANGE) #if HAS_X_MAX #if !AVAILABLE_EILINE(X_MAX_PIN) - #error "X_MAX_PIN has no EXTINT line available." + #error "X_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(X_MAX_PIN); #endif #if HAS_X_MIN #if !AVAILABLE_EILINE(X_MIN_PIN) - #error "X_MIN_PIN has no EXTINT line available." + #error "X_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(X_MIN_PIN); #endif #if HAS_Y_MAX #if !AVAILABLE_EILINE(Y_MAX_PIN) - #error "Y_MAX_PIN has no EXTINT line available." + #error "Y_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Y_MAX_PIN); #endif #if HAS_Y_MIN #if !AVAILABLE_EILINE(Y_MIN_PIN) - #error "Y_MIN_PIN has no EXTINT line available." + #error "Y_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Y_MIN_PIN); #endif #if HAS_Z_MAX #if !AVAILABLE_EILINE(Z_MAX_PIN) - #error "Z_MAX_PIN has no EXTINT line available." + #error "Z_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z_MAX_PIN); #endif - #if HAS_Z_MIN + #if HAS_Z_MIN_PIN #if !AVAILABLE_EILINE(Z_MIN_PIN) - #error "Z_MIN_PIN has no EXTINT line available." + #error "Z_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z_MIN_PIN); #endif + #if HAS_X2_MAX + #if !AVAILABLE_EILINE(X2_MAX_PIN) + #error "X2_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." + #endif + _ATTACH(X2_MAX_PIN); + #endif + #if HAS_X2_MIN + #if !AVAILABLE_EILINE(X2_MIN_PIN) + #error "X2_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." + #endif + _ATTACH(X2_MIN_PIN); + #endif + #if HAS_Y2_MAX + #if !AVAILABLE_EILINE(Y2_MAX_PIN) + #error "Y2_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." + #endif + _ATTACH(Y2_MAX_PIN); + #endif + #if HAS_Y2_MIN + #if !AVAILABLE_EILINE(Y2_MIN_PIN) + #error "Y2_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." + #endif + _ATTACH(Y2_MIN_PIN); + #endif #if HAS_Z2_MAX #if !AVAILABLE_EILINE(Z2_MAX_PIN) - #error "Z2_MAX_PIN has no EXTINT line available." + #error "Z2_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z2_MAX_PIN); #endif #if HAS_Z2_MIN #if !AVAILABLE_EILINE(Z2_MIN_PIN) - #error "Z2_MIN_PIN has no EXTINT line available." + #error "Z2_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z2_MIN_PIN); #endif #if HAS_Z3_MAX #if !AVAILABLE_EILINE(Z3_MAX_PIN) - #error "Z3_MAX_PIN has no EXTINT line available." + #error "Z3_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z3_MAX_PIN); #endif #if HAS_Z3_MIN #if !AVAILABLE_EILINE(Z3_MIN_PIN) - #error "Z3_MIN_PIN has no EXTINT line available." + #error "Z3_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z3_MIN_PIN); #endif #if HAS_Z4_MAX #if !AVAILABLE_EILINE(Z4_MAX_PIN) - #error "Z4_MAX_PIN has no EXTINT line available." + #error "Z4_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z4_MAX_PIN); #endif #if HAS_Z4_MIN #if !AVAILABLE_EILINE(Z4_MIN_PIN) - #error "Z4_MIN_PIN has no EXTINT line available." + #error "Z4_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z4_MIN_PIN); #endif #if HAS_Z_MIN_PROBE_PIN #if !AVAILABLE_EILINE(Z_MIN_PROBE_PIN) - #error "Z_MIN_PROBE_PIN has no EXTINT line available." + #error "Z_MIN_PROBE_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z_MIN_PROBE_PIN); #endif #if HAS_I_MAX #if !AVAILABLE_EILINE(I_MAX_PIN) - #error "I_MAX_PIN has no EXTINT line available." + #error "I_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(I_MAX_PIN, endstop_ISR, CHANGE); #endif #if HAS_I_MIN #if !AVAILABLE_EILINE(I_MIN_PIN) - #error "I_MIN_PIN has no EXTINT line available." + #error "I_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(I_MIN_PIN, endstop_ISR, CHANGE); #endif #if HAS_J_MAX #if !AVAILABLE_EILINE(J_MAX_PIN) - #error "J_MAX_PIN has no EXTINT line available." + #error "J_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(J_MAX_PIN, endstop_ISR, CHANGE); #endif #if HAS_J_MIN #if !AVAILABLE_EILINE(J_MIN_PIN) - #error "J_MIN_PIN has no EXTINT line available." + #error "J_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(J_MIN_PIN, endstop_ISR, CHANGE); #endif #if HAS_K_MAX #if !AVAILABLE_EILINE(K_MAX_PIN) - #error "K_MAX_PIN has no EXTINT line available." + #error "K_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(K_MAX_PIN, endstop_ISR, CHANGE); #endif #if HAS_K_MIN #if !AVAILABLE_EILINE(K_MIN_PIN) - #error "K_MIN_PIN has no EXTINT line available." + #error "K_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(K_MIN_PIN, endstop_ISR, CHANGE); #endif #if HAS_U_MAX #if !AVAILABLE_EILINE(U_MAX_PIN) - #error "U_MAX_PIN has no EXTINT line available." + #error "U_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(U_MAX_PIN, endstop_ISR, CHANGE); #endif #if HAS_U_MIN #if !AVAILABLE_EILINE(U_MIN_PIN) - #error "U_MIN_PIN has no EXTINT line available." + #error "U_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(U_MIN_PIN, endstop_ISR, CHANGE); #endif #if HAS_V_MAX #if !AVAILABLE_EILINE(V_MAX_PIN) - #error "V_MAX_PIN has no EXTINT line available." + #error "V_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(V_MAX_PIN, endstop_ISR, CHANGE); #endif #if HAS_V_MIN #if !AVAILABLE_EILINE(V_MIN_PIN) - #error "V_MIN_PIN has no EXTINT line available." + #error "V_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(V_MIN_PIN, endstop_ISR, CHANGE); #endif #if HAS_W_MAX #if !AVAILABLE_EILINE(W_MAX_PIN) - #error "W_MAX_PIN has no EXTINT line available." + #error "W_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(W_MAX_PIN, endstop_ISR, CHANGE); #endif #if HAS_W_MIN #if !AVAILABLE_EILINE(W_MIN_PIN) - #error "W_MIN_PIN has no EXTINT line available." + #error "W_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(W_MIN_PIN, endstop_ISR, CHANGE); #endif diff --git a/Marlin/src/HAL/SAMD21/inc/SanityCheck.h b/Marlin/src/HAL/SAMD21/inc/SanityCheck.h index 8bf052e3bb15..83fafc968924 100644 --- a/Marlin/src/HAL/SAMD21/inc/SanityCheck.h +++ b/Marlin/src/HAL/SAMD21/inc/SanityCheck.h @@ -41,8 +41,8 @@ #error "EMERGENCY_PARSER is not yet implemented for SAMD21. Disable EMERGENCY_PARSER to continue." #endif -#if ENABLED(SDIO_SUPPORT) - #error "SDIO_SUPPORT is not supported on SAMD21." +#if ENABLED(ONBOARD_SDIO) + #error "ONBOARD_SDIO is not supported on SAMD21." #endif #if ENABLED(FAST_PWM_FAN) diff --git a/Marlin/src/HAL/SAMD51/HAL.cpp b/Marlin/src/HAL/SAMD51/HAL.cpp index 8c102b643da8..bc7a9b6d913a 100644 --- a/Marlin/src/HAL/SAMD51/HAL.cpp +++ b/Marlin/src/HAL/SAMD51/HAL.cpp @@ -602,7 +602,7 @@ void MarlinHAL::dma_init() { // HAL initialization task void MarlinHAL::init() { TERN_(DMA_IS_REQUIRED, dma_init()); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA #if HAS_SD_DETECT && SD_CONNECTION_IS(ONBOARD) SET_INPUT_PULLUP(SD_DETECT_PIN); #endif diff --git a/Marlin/src/HAL/SAMD51/endstop_interrupts.h b/Marlin/src/HAL/SAMD51/endstop_interrupts.h index e0e811c3a018..b5fead26f40c 100644 --- a/Marlin/src/HAL/SAMD51/endstop_interrupts.h +++ b/Marlin/src/HAL/SAMD51/endstop_interrupts.h @@ -53,30 +53,34 @@ #include "../../module/endstops.h" #define MATCH_EILINE(P1,P2) (P1 != P2 && PIN_TO_EILINE(P1) == PIN_TO_EILINE(P2)) -#define MATCH_X_MAX_EILINE(P) TERN0(HAS_X_MAX, DEFER4(MATCH_EILINE)(P, X_MAX_PIN)) -#define MATCH_X_MIN_EILINE(P) TERN0(HAS_X_MIN, DEFER4(MATCH_EILINE)(P, X_MIN_PIN)) -#define MATCH_Y_MAX_EILINE(P) TERN0(HAS_Y_MAX, DEFER4(MATCH_EILINE)(P, Y_MAX_PIN)) -#define MATCH_Y_MIN_EILINE(P) TERN0(HAS_Y_MIN, DEFER4(MATCH_EILINE)(P, Y_MIN_PIN)) -#define MATCH_Z_MAX_EILINE(P) TERN0(HAS_Z_MAX, DEFER4(MATCH_EILINE)(P, Z_MAX_PIN)) -#define MATCH_Z_MIN_EILINE(P) TERN0(HAS_Z_MIN, DEFER4(MATCH_EILINE)(P, Z_MIN_PIN)) -#define MATCH_I_MAX_EILINE(P) TERN0(HAS_I_MAX, DEFER4(MATCH_EILINE)(P, I_MAX_PIN)) -#define MATCH_I_MIN_EILINE(P) TERN0(HAS_I_MIN, DEFER4(MATCH_EILINE)(P, I_MIN_PIN)) -#define MATCH_J_MAX_EILINE(P) TERN0(HAS_J_MAX, DEFER4(MATCH_EILINE)(P, J_MAX_PIN)) -#define MATCH_J_MIN_EILINE(P) TERN0(HAS_J_MIN, DEFER4(MATCH_EILINE)(P, J_MIN_PIN)) -#define MATCH_K_MAX_EILINE(P) TERN0(HAS_K_MAX, DEFER4(MATCH_EILINE)(P, K_MAX_PIN)) -#define MATCH_K_MIN_EILINE(P) TERN0(HAS_K_MIN, DEFER4(MATCH_EILINE)(P, K_MIN_PIN)) -#define MATCH_U_MAX_EILINE(P) TERN0(HAS_U_MAX, DEFER4(MATCH_EILINE)(P, U_MAX_PIN)) -#define MATCH_U_MIN_EILINE(P) TERN0(HAS_U_MIN, DEFER4(MATCH_EILINE)(P, U_MIN_PIN)) -#define MATCH_V_MAX_EILINE(P) TERN0(HAS_V_MAX, DEFER4(MATCH_EILINE)(P, V_MAX_PIN)) -#define MATCH_V_MIN_EILINE(P) TERN0(HAS_V_MIN, DEFER4(MATCH_EILINE)(P, V_MIN_PIN)) -#define MATCH_W_MAX_EILINE(P) TERN0(HAS_W_MAX, DEFER4(MATCH_EILINE)(P, W_MAX_PIN)) -#define MATCH_W_MIN_EILINE(P) TERN0(HAS_W_MIN, DEFER4(MATCH_EILINE)(P, W_MIN_PIN)) -#define MATCH_Z2_MAX_EILINE(P) TERN0(HAS_Z2_MAX, DEFER4(MATCH_EILINE)(P, Z2_MAX_PIN)) -#define MATCH_Z2_MIN_EILINE(P) TERN0(HAS_Z2_MIN, DEFER4(MATCH_EILINE)(P, Z2_MIN_PIN)) -#define MATCH_Z3_MAX_EILINE(P) TERN0(HAS_Z3_MAX, DEFER4(MATCH_EILINE)(P, Z3_MAX_PIN)) -#define MATCH_Z3_MIN_EILINE(P) TERN0(HAS_Z3_MIN, DEFER4(MATCH_EILINE)(P, Z3_MIN_PIN)) -#define MATCH_Z4_MAX_EILINE(P) TERN0(HAS_Z4_MAX, DEFER4(MATCH_EILINE)(P, Z4_MAX_PIN)) -#define MATCH_Z4_MIN_EILINE(P) TERN0(HAS_Z4_MIN, DEFER4(MATCH_EILINE)(P, Z4_MIN_PIN)) +#define MATCH_X_MAX_EILINE(P) TERN0(HAS_X_MAX, DEFER4(MATCH_EILINE)(P, X_MAX_PIN)) +#define MATCH_X_MIN_EILINE(P) TERN0(HAS_X_MIN, DEFER4(MATCH_EILINE)(P, X_MIN_PIN)) +#define MATCH_Y_MAX_EILINE(P) TERN0(HAS_Y_MAX, DEFER4(MATCH_EILINE)(P, Y_MAX_PIN)) +#define MATCH_Y_MIN_EILINE(P) TERN0(HAS_Y_MIN, DEFER4(MATCH_EILINE)(P, Y_MIN_PIN)) +#define MATCH_Z_MAX_EILINE(P) TERN0(HAS_Z_MAX, DEFER4(MATCH_EILINE)(P, Z_MAX_PIN)) +#define MATCH_Z_MIN_EILINE(P) TERN0(HAS_Z_MIN_PIN, DEFER4(MATCH_EILINE)(P, Z_MIN_PIN)) +#define MATCH_I_MAX_EILINE(P) TERN0(HAS_I_MAX, DEFER4(MATCH_EILINE)(P, I_MAX_PIN)) +#define MATCH_I_MIN_EILINE(P) TERN0(HAS_I_MIN, DEFER4(MATCH_EILINE)(P, I_MIN_PIN)) +#define MATCH_J_MAX_EILINE(P) TERN0(HAS_J_MAX, DEFER4(MATCH_EILINE)(P, J_MAX_PIN)) +#define MATCH_J_MIN_EILINE(P) TERN0(HAS_J_MIN, DEFER4(MATCH_EILINE)(P, J_MIN_PIN)) +#define MATCH_K_MAX_EILINE(P) TERN0(HAS_K_MAX, DEFER4(MATCH_EILINE)(P, K_MAX_PIN)) +#define MATCH_K_MIN_EILINE(P) TERN0(HAS_K_MIN, DEFER4(MATCH_EILINE)(P, K_MIN_PIN)) +#define MATCH_U_MAX_EILINE(P) TERN0(HAS_U_MAX, DEFER4(MATCH_EILINE)(P, U_MAX_PIN)) +#define MATCH_U_MIN_EILINE(P) TERN0(HAS_U_MIN, DEFER4(MATCH_EILINE)(P, U_MIN_PIN)) +#define MATCH_V_MAX_EILINE(P) TERN0(HAS_V_MAX, DEFER4(MATCH_EILINE)(P, V_MAX_PIN)) +#define MATCH_V_MIN_EILINE(P) TERN0(HAS_V_MIN, DEFER4(MATCH_EILINE)(P, V_MIN_PIN)) +#define MATCH_W_MAX_EILINE(P) TERN0(HAS_W_MAX, DEFER4(MATCH_EILINE)(P, W_MAX_PIN)) +#define MATCH_W_MIN_EILINE(P) TERN0(HAS_W_MIN, DEFER4(MATCH_EILINE)(P, W_MIN_PIN)) +#define MATCH_X2_MAX_EILINE(P) TERN0(HAS_X2_MAX, DEFER4(MATCH_EILINE)(P, X2_MAX_PIN)) +#define MATCH_X2_MIN_EILINE(P) TERN0(HAS_X2_MIN, DEFER4(MATCH_EILINE)(P, X2_MIN_PIN)) +#define MATCH_Y2_MAX_EILINE(P) TERN0(HAS_Y2_MAX, DEFER4(MATCH_EILINE)(P, Y2_MAX_PIN)) +#define MATCH_Y2_MIN_EILINE(P) TERN0(HAS_Y2_MIN, DEFER4(MATCH_EILINE)(P, Y2_MIN_PIN)) +#define MATCH_Z2_MAX_EILINE(P) TERN0(HAS_Z2_MAX, DEFER4(MATCH_EILINE)(P, Z2_MAX_PIN)) +#define MATCH_Z2_MIN_EILINE(P) TERN0(HAS_Z2_MIN, DEFER4(MATCH_EILINE)(P, Z2_MIN_PIN)) +#define MATCH_Z3_MAX_EILINE(P) TERN0(HAS_Z3_MAX, DEFER4(MATCH_EILINE)(P, Z3_MAX_PIN)) +#define MATCH_Z3_MIN_EILINE(P) TERN0(HAS_Z3_MIN, DEFER4(MATCH_EILINE)(P, Z3_MIN_PIN)) +#define MATCH_Z4_MAX_EILINE(P) TERN0(HAS_Z4_MAX, DEFER4(MATCH_EILINE)(P, Z4_MAX_PIN)) +#define MATCH_Z4_MIN_EILINE(P) TERN0(HAS_Z4_MIN, DEFER4(MATCH_EILINE)(P, Z4_MIN_PIN)) #define MATCH_Z_MIN_PROBE_EILINE(P) TERN0(HAS_Z_MIN_PROBE_PIN, DEFER4(MATCH_EILINE)(P, Z_MIN_PROBE_PIN)) #define AVAILABLE_EILINE(P) ( PIN_TO_EILINE(P) != -1 \ @@ -89,6 +93,8 @@ && !MATCH_U_MAX_EILINE(P) && !MATCH_U_MIN_EILINE(P) \ && !MATCH_V_MAX_EILINE(P) && !MATCH_V_MIN_EILINE(P) \ && !MATCH_W_MAX_EILINE(P) && !MATCH_W_MIN_EILINE(P) \ + && !MATCH_X2_MAX_EILINE(P) && !MATCH_X2_MIN_EILINE(P) \ + && !MATCH_Y2_MAX_EILINE(P) && !MATCH_Y2_MIN_EILINE(P) \ && !MATCH_Z2_MAX_EILINE(P) && !MATCH_Z2_MIN_EILINE(P) \ && !MATCH_Z3_MAX_EILINE(P) && !MATCH_Z3_MIN_EILINE(P) \ && !MATCH_Z4_MAX_EILINE(P) && !MATCH_Z4_MIN_EILINE(P) \ @@ -101,151 +107,151 @@ void setup_endstop_interrupts() { #define _ATTACH(P) attachInterrupt(P, endstop_ISR, CHANGE) #if HAS_X_MAX #if !AVAILABLE_EILINE(X_MAX_PIN) - #error "X_MAX_PIN has no EXTINT line available." + #error "X_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(X_MAX_PIN); #endif #if HAS_X_MIN #if !AVAILABLE_EILINE(X_MIN_PIN) - #error "X_MIN_PIN has no EXTINT line available." + #error "X_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(X_MIN_PIN); #endif #if HAS_Y_MAX #if !AVAILABLE_EILINE(Y_MAX_PIN) - #error "Y_MAX_PIN has no EXTINT line available." + #error "Y_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Y_MAX_PIN); #endif #if HAS_Y_MIN #if !AVAILABLE_EILINE(Y_MIN_PIN) - #error "Y_MIN_PIN has no EXTINT line available." + #error "Y_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Y_MIN_PIN); #endif #if HAS_Z_MAX #if !AVAILABLE_EILINE(Z_MAX_PIN) - #error "Z_MAX_PIN has no EXTINT line available." + #error "Z_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z_MAX_PIN); #endif - #if HAS_Z_MIN + #if HAS_Z_MIN_PIN #if !AVAILABLE_EILINE(Z_MIN_PIN) - #error "Z_MIN_PIN has no EXTINT line available." + #error "Z_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z_MIN_PIN); #endif #if HAS_Z2_MAX #if !AVAILABLE_EILINE(Z2_MAX_PIN) - #error "Z2_MAX_PIN has no EXTINT line available." + #error "Z2_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z2_MAX_PIN); #endif #if HAS_Z2_MIN #if !AVAILABLE_EILINE(Z2_MIN_PIN) - #error "Z2_MIN_PIN has no EXTINT line available." + #error "Z2_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z2_MIN_PIN); #endif #if HAS_Z3_MAX #if !AVAILABLE_EILINE(Z3_MAX_PIN) - #error "Z3_MAX_PIN has no EXTINT line available." + #error "Z3_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z3_MAX_PIN); #endif #if HAS_Z3_MIN #if !AVAILABLE_EILINE(Z3_MIN_PIN) - #error "Z3_MIN_PIN has no EXTINT line available." + #error "Z3_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z3_MIN_PIN); #endif #if HAS_Z4_MAX #if !AVAILABLE_EILINE(Z4_MAX_PIN) - #error "Z4_MAX_PIN has no EXTINT line available." + #error "Z4_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z4_MAX_PIN); #endif #if HAS_Z4_MIN #if !AVAILABLE_EILINE(Z4_MIN_PIN) - #error "Z4_MIN_PIN has no EXTINT line available." + #error "Z4_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z4_MIN_PIN); #endif #if HAS_Z_MIN_PROBE_PIN #if !AVAILABLE_EILINE(Z_MIN_PROBE_PIN) - #error "Z_MIN_PROBE_PIN has no EXTINT line available." + #error "Z_MIN_PROBE_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif _ATTACH(Z_MIN_PROBE_PIN); #endif #if HAS_I_MAX #if !AVAILABLE_EILINE(I_MAX_PIN) - #error "I_MAX_PIN has no EXTINT line available." + #error "I_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(I_MAX_PIN, endstop_ISR, CHANGE); #endif #if HAS_I_MIN #if !AVAILABLE_EILINE(I_MIN_PIN) - #error "I_MIN_PIN has no EXTINT line available." + #error "I_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(I_MIN_PIN, endstop_ISR, CHANGE); #endif #if HAS_J_MAX #if !AVAILABLE_EILINE(J_MAX_PIN) - #error "J_MAX_PIN has no EXTINT line available." + #error "J_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(J_MAX_PIN, endstop_ISR, CHANGE); #endif #if HAS_J_MIN #if !AVAILABLE_EILINE(J_MIN_PIN) - #error "J_MIN_PIN has no EXTINT line available." + #error "J_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(J_MIN_PIN, endstop_ISR, CHANGE); #endif #if HAS_K_MAX #if !AVAILABLE_EILINE(K_MAX_PIN) - #error "K_MAX_PIN has no EXTINT line available." + #error "K_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(K_MAX_PIN, endstop_ISR, CHANGE); #endif #if HAS_K_MIN #if !AVAILABLE_EILINE(K_MIN_PIN) - #error "K_MIN_PIN has no EXTINT line available." + #error "K_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(K_MIN_PIN, endstop_ISR, CHANGE); #endif #if HAS_U_MAX #if !AVAILABLE_EILINE(U_MAX_PIN) - #error "U_MAX_PIN has no EXTINT line available." + #error "U_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(U_MAX_PIN, endstop_ISR, CHANGE); #endif #if HAS_U_MIN #if !AVAILABLE_EILINE(U_MIN_PIN) - #error "U_MIN_PIN has no EXTINT line available." + #error "U_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(U_MIN_PIN, endstop_ISR, CHANGE); #endif #if HAS_V_MAX #if !AVAILABLE_EILINE(V_MAX_PIN) - #error "V_MAX_PIN has no EXTINT line available." + #error "V_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(V_MAX_PIN, endstop_ISR, CHANGE); #endif #if HAS_V_MIN #if !AVAILABLE_EILINE(V_MIN_PIN) - #error "V_MIN_PIN has no EXTINT line available." + #error "V_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(V_MIN_PIN, endstop_ISR, CHANGE); #endif #if HAS_W_MAX #if !AVAILABLE_EILINE(W_MAX_PIN) - #error "W_MAX_PIN has no EXTINT line available." + #error "W_MAX_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(W_MAX_PIN, endstop_ISR, CHANGE); #endif #if HAS_W_MIN #if !AVAILABLE_EILINE(W_MIN_PIN) - #error "W_MIN_PIN has no EXTINT line available." + #error "W_MIN_PIN has no EXTINT line available. Disable ENDSTOP_INTERRUPTS_FEATURE to continue." #endif attachInterrupt(W_MIN_PIN, endstop_ISR, CHANGE); #endif diff --git a/Marlin/src/HAL/SAMD51/inc/SanityCheck.h b/Marlin/src/HAL/SAMD51/inc/SanityCheck.h index f9ff090f75ae..4719ac6eb8c2 100644 --- a/Marlin/src/HAL/SAMD51/inc/SanityCheck.h +++ b/Marlin/src/HAL/SAMD51/inc/SanityCheck.h @@ -54,8 +54,8 @@ #error "EMERGENCY_PARSER is not yet implemented for SAMD51. Disable EMERGENCY_PARSER to continue." #endif -#if ENABLED(SDIO_SUPPORT) - #error "SDIO_SUPPORT is not supported on SAMD51." +#if ENABLED(ONBOARD_SDIO) + #error "ONBOARD_SDIO is not supported on SAMD51." #endif #if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_FREQUENCY diff --git a/Marlin/src/HAL/STM32/HAL.cpp b/Marlin/src/HAL/STM32/HAL.cpp index aff52f597f4d..ce49f27a8ed2 100644 --- a/Marlin/src/HAL/STM32/HAL.cpp +++ b/Marlin/src/HAL/STM32/HAL.cpp @@ -70,7 +70,7 @@ void MarlinHAL::init() { constexpr int cpuFreq = F_CPU; UNUSED(cpuFreq); - #if ENABLED(SDSUPPORT) && DISABLED(SDIO_SUPPORT) && (defined(SDSS) && SDSS != -1) + #if HAS_MEDIA && DISABLED(ONBOARD_SDIO) && (defined(SDSS) && SDSS != -1) OUT_WRITE(SDSS, HIGH); // Try to set SDSS inactive before any other SPI users start up #endif diff --git a/Marlin/src/HAL/STM32/HAL.h b/Marlin/src/HAL/STM32/HAL.h index 61569c793738..54359c5b0987 100644 --- a/Marlin/src/HAL/STM32/HAL.h +++ b/Marlin/src/HAL/STM32/HAL.h @@ -28,6 +28,7 @@ #include "../shared/Marduino.h" #include "../shared/math_32bit.h" #include "../shared/HAL_SPI.h" +#include "temp_soc.h" #include "fastio.h" #include "Servo.h" #include "MarlinSerial.h" @@ -174,7 +175,9 @@ typedef libServo hal_servo_t; #define JTAGSWD_RESET() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_RESET); // Reset: FULL SWD+JTAG #endif -#define PLATFORM_M997_SUPPORT +#ifndef PLATFORM_M997_SUPPORT + #define PLATFORM_M997_SUPPORT +#endif void flashFirmware(const int16_t); // Maple Compatibility diff --git a/Marlin/src/HAL/STM32/MinSerial.cpp b/Marlin/src/HAL/STM32/MinSerial.cpp index b0fcff20c172..c2260f4f26e0 100644 --- a/Marlin/src/HAL/STM32/MinSerial.cpp +++ b/Marlin/src/HAL/STM32/MinSerial.cpp @@ -135,18 +135,18 @@ void install_min_serial() { } #if NONE(DYNAMIC_VECTORTABLE, STM32F0xx, STM32G0xx) // Cortex M0 can't jump to a symbol that's too far from the current function, so we work around this in exception_arm.cpp -extern "C" { - __attribute__((naked)) void JumpHandler_ASM() { - __asm__ __volatile__ ( - "b CommonHandler_ASM\n" - ); + extern "C" { + __attribute__((naked)) void JumpHandler_ASM() { + __asm__ __volatile__ ( + "b CommonHandler_ASM\n" + ); + } + void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) HardFault_Handler(); + void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) BusFault_Handler(); + void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) UsageFault_Handler(); + void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) MemManage_Handler(); + void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) NMI_Handler(); } - void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) HardFault_Handler(); - void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) BusFault_Handler(); - void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) UsageFault_Handler(); - void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) MemManage_Handler(); - void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) NMI_Handler(); -} #endif #endif // POSTMORTEM_DEBUGGING diff --git a/Marlin/src/HAL/STM32/endstop_interrupts.h b/Marlin/src/HAL/STM32/endstop_interrupts.h index d2f20ba1c711..ce160d940551 100644 --- a/Marlin/src/HAL/STM32/endstop_interrupts.h +++ b/Marlin/src/HAL/STM32/endstop_interrupts.h @@ -29,33 +29,33 @@ void endstop_ISR() { endstops.update(); } void setup_endstop_interrupts() { #define _ATTACH(P) attachInterrupt(P, endstop_ISR, CHANGE) - TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN)); - TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN)); - TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN)); - TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN)); - TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN)); - TERN_(HAS_Z_MIN, _ATTACH(Z_MIN_PIN)); - TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN)); - TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN)); - TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN)); - TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN)); - TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN)); - TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN)); - TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN)); - TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN)); - TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN)); - TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN)); + TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN)); + TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN)); + TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN)); + TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN)); + TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN)); + TERN_(HAS_Z_MIN_PIN, _ATTACH(Z_MIN_PIN)); + TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN)); + TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN)); + TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN)); + TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN)); + TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN)); + TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN)); + TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN)); + TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN)); + TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN)); + TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN)); TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN)); - TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN)); - TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN)); - TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN)); - TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN)); - TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN)); - TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN)); - TERN_(HAS_U_MAX, _ATTACH(U_MAX_PIN)); - TERN_(HAS_U_MIN, _ATTACH(U_MIN_PIN)); - TERN_(HAS_V_MAX, _ATTACH(V_MAX_PIN)); - TERN_(HAS_V_MIN, _ATTACH(V_MIN_PIN)); - TERN_(HAS_W_MAX, _ATTACH(W_MAX_PIN)); - TERN_(HAS_W_MIN, _ATTACH(W_MIN_PIN)); + TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN)); + TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN)); + TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN)); + TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN)); + TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN)); + TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN)); + TERN_(HAS_U_MAX, _ATTACH(U_MAX_PIN)); + TERN_(HAS_U_MIN, _ATTACH(U_MIN_PIN)); + TERN_(HAS_V_MAX, _ATTACH(V_MAX_PIN)); + TERN_(HAS_V_MIN, _ATTACH(V_MIN_PIN)); + TERN_(HAS_W_MAX, _ATTACH(W_MAX_PIN)); + TERN_(HAS_W_MIN, _ATTACH(W_MIN_PIN)); } diff --git a/Marlin/src/HAL/STM32/inc/Conditionals_adv.h b/Marlin/src/HAL/STM32/inc/Conditionals_adv.h index 451c94f25d1f..ee8c49e4e055 100644 --- a/Marlin/src/HAL/STM32/inc/Conditionals_adv.h +++ b/Marlin/src/HAL/STM32/inc/Conditionals_adv.h @@ -21,7 +21,7 @@ */ #pragma once -#if BOTH(SDSUPPORT, USBD_USE_CDC_MSC) && DISABLED(NO_SD_HOST_DRIVE) +#if BOTH(HAS_MEDIA, USBD_USE_CDC_MSC) && DISABLED(NO_SD_HOST_DRIVE) #define HAS_SD_HOST_DRIVE 1 #endif diff --git a/Marlin/src/HAL/STM32/inc/SanityCheck.h b/Marlin/src/HAL/STM32/inc/SanityCheck.h index eaad8db4d33d..80d0314dbbd4 100644 --- a/Marlin/src/HAL/STM32/inc/SanityCheck.h +++ b/Marlin/src/HAL/STM32/inc/SanityCheck.h @@ -29,7 +29,7 @@ //#endif -#if ENABLED(SDCARD_EEPROM_EMULATION) && DISABLED(SDSUPPORT) +#if ENABLED(SDCARD_EEPROM_EMULATION) && !HAS_MEDIA #undef SDCARD_EEPROM_EMULATION // Avoid additional error noise #if USE_FALLBACK_EEPROM #warning "EEPROM type not specified. Fallback is SDCARD_EEPROM_EMULATION." @@ -51,6 +51,10 @@ #error "TFT_COLOR_UI, TFT_LVGL_UI and TFT_CLASSIC_UI are currently only supported on STM32H7, STM32F4 and STM32F1 hardware." #endif +#if TEMP_SENSOR_SOC && defined(ATEMP) && TEMP_SOC_PIN != ATEMP + #error "TEMP_SENSOR_SOC requires 'TEMP_SOC_PIN ATEMP' on STM32." +#endif + /** * Check for common serial pin conflicts */ diff --git a/Marlin/src/HAL/STM32/sdio.cpp b/Marlin/src/HAL/STM32/sdio.cpp index 72518ef1cc87..de388b8e146a 100644 --- a/Marlin/src/HAL/STM32/sdio.cpp +++ b/Marlin/src/HAL/STM32/sdio.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfig.h" -#if ENABLED(SDIO_SUPPORT) +#if ENABLED(ONBOARD_SDIO) #include "sdio.h" @@ -453,5 +453,5 @@ uint32_t SDIO_GetCardSize() { return (uint32_t)(hsd.SdCard.BlockNbr) * (hsd.SdCard.BlockSize); } -#endif // SDIO_SUPPORT +#endif // ONBOARD_SDIO #endif // HAL_STM32 diff --git a/Marlin/src/HAL/STM32/temp_soc.h b/Marlin/src/HAL/STM32/temp_soc.h new file mode 100644 index 000000000000..05262eab8bdf --- /dev/null +++ b/Marlin/src/HAL/STM32/temp_soc.h @@ -0,0 +1,346 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2023 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +#ifdef STM32F0xx + /* + STM32F030x4 STM32F030x6 STM32F030x8 STM32F030xC https://www.st.com/resource/en/datasheet/stm32f030f4.pdf + --> TS_CAL2 not defined in datasheet + STM32F031x4 STM32F031x6 https://www.st.com/resource/en/datasheet/stm32f031c4.pdf + STM32F038x6 https://www.st.com/resource/en/datasheet/stm32f038c6.pdf + STM32F042x4 STM32F042x6 https://www.st.com/resource/en/datasheet/stm32f042c4.pdf + STM32F048C6 STM32F048G6 STM32F048T6 https://www.st.com/resource/en/datasheet/stm32f048c6.pdf + STM32F051x4 STM32F051x6 STM32F051x8 https://www.st.com/resource/en/datasheet/dm00039193.pdf + STM32F058C8 STM32F058R8 STM32F058T8 https://www.st.com/resource/en/datasheet/stm32f058c8.pdf + STM32F070CB STM32F070RB STM32F070C6 STM32F070F6 https://www.st.com/resource/en/datasheet/stm32f070c6.pdf + --> TS_CAL2 not defined in datasheet + STM32F071x8 STM32F071xB https://www.st.com/resource/en/datasheet/stm32f071cb.pdf + STM32F072x8 STM32F072xB https://www.st.com/resource/en/datasheet/stm32f072c8.pdf + STM32F078CB STM32F078RB STM32F078VB https://www.st.com/resource/en/datasheet/stm32f078cb.pdf + STM32F091xB STM32F091xC https://www.st.com/resource/en/datasheet/stm32f091cc.pdf + STM32F098CC STM32F098RC STM32F098VC https://www.st.com/resource/en/datasheet/stm32f098cc.pdf + */ + #define TS_CAL1_TEMP 30 // Calibration temperature of TS_CAL1 (see specific SoC datasheet) + #define TS_CAL1_REGOFFSET 0x1FFFF7B8 // Memory address of TS_CAL1 for STM32F030x4/x6/x8/xC (see specific SoC datasheet) + #define TS_CAL2_TEMP 110 // Calibration temperature of TS_CAL2 (see specific SoC datasheet) + #define TS_CAL2_REGOFFSET 0x1FFFF7C2 // Memory address of TS_CAL2 for STM32F030x4/x6/x8/xC (see specific SoC datasheet) + +#elif defined(STM32F1xx) + /* + STM32F100xC STM32F100xD STM32F100xE https://www.st.com/resource/en/datasheet/stm32f100rc.pdf + --> V=1.41 + STM32F100x4 STM32F100x6 STM32F100x8 STM32F100xB https://www.st.com/resource/en/datasheet/stm32f100cb.pdf + --> V=1.41 + STM32F101x8 STM32F101xB https://www.st.com/resource/en/datasheet/stm32f101r8.pdf + STM32F101xC STM32F101xD STM32F101xE https://www.st.com/resource/en/datasheet/stm32f101rc.pdf + STM32F101x4 STM32F101x6 https://www.st.com/resource/en/datasheet/stm32f101c4.pdf + STM32F101xF STM32F101xG https://www.st.com/resource/en/datasheet/stm32f101vf.pdf + STM32F102x8 STM32F102xB https://www.st.com/resource/en/datasheet/stm32f102c8.pdf + --> V=1.42 / Slope=4.35 + STM32F102x4 STM32F102x6 https://www.st.com/resource/en/datasheet/stm32f102c4.pdf + --> V=1.42 / Slope=4.35 + STM32F103x8 STM32F103xB https://www.st.com/resource/en/datasheet/stm32f103c8.pdf + STM32F103xC STM32F103xD STM32F103xE https://www.st.com/resource/en/datasheet/stm32f103rc.pdf + STM32F103x4 STM32F103x6 https://www.st.com/resource/en/datasheet/stm32f103c4.pdf + STM32F103xF STM32F103xG https://www.st.com/resource/en/datasheet/stm32f103rg.pdf + STM32F105xx STM32F107xx https://www.st.com/resource/en/datasheet/stm32f105r8.pdf + */ + #define TS_TYPICAL_V 1.43 + #define TS_TYPICAL_TEMP 25 + #define TS_TYPICAL_SLOPE 4.3 + +#elif defined(STM32F2xx) + /* + STM32F205xx STM32F207xx https://www.st.com/resource/en/datasheet/stm32f205rb.pdf + STM32F215xx STM32F217xx https://www.st.com/resource/en/datasheet/stm32f215re.pdf + */ + #define TS_TYPICAL_V 0.76 + #define TS_TYPICAL_TEMP 25 + #define TS_TYPICAL_SLOPE 2.5 + +#elif defined(STM32F3xx) + /* + STM32F301x6 STM32F301x8 https://www.st.com/resource/en/datasheet/stm32f301c6.pdf + STM32F302xD STM32F302xE https://www.st.com/resource/en/datasheet/stm32f302re.pdf + STM32F302x6 STM32F302x8 https://www.st.com/resource/en/datasheet/stm32f302r6.pdf + STM32F302xB STM32F302xC https://www.st.com/resource/en/datasheet/stm32f302cb.pdf + STM32F303xD STM32F303xE https://www.st.com/resource/en/datasheet/stm32f303re.pdf + STM32F303xB STM32F303xC https://www.st.com/resource/en/datasheet/stm32f303cb.pdf + STM32F303x6/x8 https://www.st.com/resource/en/datasheet/stm32f303c6.pdf + STM32F334x4 STM32F334x6 STM32F334x8 https://www.st.com/resource/en/datasheet/stm32f334k4.pdf + STM32F373xx https://www.st.com/resource/en/datasheet/stm32f373cc.pdf + STM32F358xC https://www.st.com/resource/en/datasheet/stm32f358cc.pdf + STM32F378xx https://www.st.com/resource/en/datasheet/stm32f378cc.pdf + STM32F318C8 STM32F318K8 https://www.st.com/resource/en/datasheet/stm32f318c8.pdf + STM32F328C8 https://www.st.com/resource/en/datasheet/stm32f328c8.pdf + STM32F398VE https://www.st.com/resource/en/datasheet/stm32f398ve.pdf + */ + #define TS_CAL1_TEMP 30 + #define TS_CAL1_REGOFFSET 0x1FFFF7B8 + #define TS_CAL2_TEMP 110 + #define TS_CAL2_REGOFFSET 0x1FFFF7C2 + +#elif defined(STM32F4xx) + /* + STM32F401xD STM32F401xE https://www.st.com/resource/en/datasheet/stm32f401re.pdf + STM32F411xC STM32F411xE https://www.st.com/resource/en/datasheet/stm32f411ce.pdf + STM32F446xC/E https://www.st.com/resource/en/datasheet/stm32f446mc.pdf + STM32F479xx https://www.st.com/resource/en/datasheet/stm32f479ai.pdf + STM32F412xE STM32F412xG https://www.st.com/resource/en/datasheet/stm32f412ce.pdf + STM32F410x8 STM32F410xB https://www.st.com/resource/en/datasheet/stm32f410cb.pdf + STM32F469xx https://www.st.com/resource/en/datasheet/stm32f469ae.pdf + STM32F423xH https://www.st.com/resource/en/datasheet/stm32f423ch.pdf + STM32F413xG STM32F413xH https://www.st.com/resource/en/datasheet/stm32f413cg.pdf + STM32F415xx STM32F417xx https://www.st.com/resource/en/datasheet/stm32f415rg.pdf + STM32F405xx STM32F407xx https://www.st.com/resource/en/datasheet/stm32f405rg.pdf + STM32F427xx STM32F429xx https://www.st.com/resource/en/datasheet/stm32f427vg.pdf + STM32F437xx STM32F439xx https://www.st.com/resource/en/datasheet/stm32f437vg.pdf + STM32F401xB STM32F401xC https://www.st.com/resource/en/datasheet/stm32f401cb.pdf + */ + #define TS_CAL1_TEMP 30 + #define TS_CAL1_REGOFFSET 0x1FFF7A2C + #define TS_CAL2_TEMP 110 + #define TS_CAL2_REGOFFSET 0x1FFF7A2E + +#elif defined(STM32F7xx) + /* + STM32F756xx https://www.st.com/resource/en/datasheet/stm32f756bg.pdf + STM32F745xx STM32F746xx https://www.st.com/resource/en/datasheet/stm32f745ie.pdf + STM32F777xx STM32F778Ax STM32F779xx https://www.st.com/resource/en/datasheet/stm32f777bi.pdf + STM32F765xx STM32F767xx STM32F768Ax STM32F769xx https://www.st.com/resource/en/datasheet/stm32f765bi.pdf + STM32F722xx STM32F723xx https://www.st.com/resource/en/datasheet/stm32f722ic.pdf + --> TS_CAL1/2 = 0x1FF07A2C / 0x1FF07A2E + STM32F732xx STM32F733xx https://www.st.com/resource/en/datasheet/stm32f732ie.pdf + --> TS_CAL1/2 = 0x1FF07A2C / 0x1FF07A2E + STM32F750x8 https://www.st.com/resource/en/datasheet/stm32f750n8.pdf + STM32F730x8 https://www.st.com/resource/en/datasheet/stm32f730i8.pdf + --> TS_CAL1/2 = 0x1FF07A2C / 0x1FF07A2E + */ + #define TS_CAL1_TEMP 30 + #define TS_CAL1_REGOFFSET 0x1FF0F44C + #define TS_CAL2_TEMP 110 + #define TS_CAL2_REGOFFSET 0x1FF0F44E + +#elif defined(STM32G0xx) + /* + STM32G030x6/x8 https://www.st.com/resource/en/datasheet/stm32g030c6.pdf + --> TS_CAL2 not defined in datasheet + STM32G050x6/x8 https://www.st.com/resource/en/datasheet/stm32g050c6.pdf + STM32G0B0KE/CE/RE/VE https://www.st.com/resource/en/datasheet/stm32g0b0ce.pdf + --> TS_CAL2 not defined in datasheet + STM32G081xB https://www.st.com/resource/en/datasheet/stm32g081cb.pdf + STM32G071x8/xB https://www.st.com/resource/en/datasheet/stm32g071c8.pdf + STM32G031x4/x6/x8 https://www.st.com/resource/en/datasheet/stm32g031c6.pdf + STM32G041x6/x8 https://www.st.com/resource/en/datasheet/stm32g041c8.pdf + STM32G051x6/x8 https://www.st.com/resource/en/datasheet/stm32g051c6.pdf + STM32G061x6/x8 https://www.st.com/resource/en/datasheet/stm32g061c6.pdf + STM32G0B1xB/xC/xE https://www.st.com/resource/en/datasheet/stm32g0b1cc.pdf + STM32G0C1xC/xE https://www.st.com/resource/en/datasheet/stm32g0c1cc.pdf + */ + #define TS_CAL1_TEMP 30 + #define TS_CAL1_REGOFFSET 0x1FFF75A8 + #define TS_CAL2_TEMP 130 + #define TS_CAL2_REGOFFSET 0x1FFF75CA + +#elif defined(STM32G4xx) + /* + STM32G431x6 STM32G431x8 STM32G431xB https://www.st.com/resource/en/datasheet/stm32g431c6.pdf + STM32G441xB https://www.st.com/resource/en/datasheet/stm32g441cb.pdf + STM32G491xC STM32G491xE https://www.st.com/resource/en/datasheet/stm32g491cc.pdf + STM32G4A1xE https://www.st.com/resource/en/datasheet/stm32g4a1ce.pdf + STM32G473xB STM32G473xC STM32G473xE https://www.st.com/resource/en/datasheet/stm32g473cb.pdf + STM32G483xE https://www.st.com/resource/en/datasheet/stm32g483ce.pdf + --> TS_CAL1/TS_CAL2 not defined in datasheet + STM32G474xB STM32G474xC STM32G474xE https://www.st.com/resource/en/datasheet/stm32g474cb.pdf + STM32G484xE https://www.st.com/resource/en/datasheet/stm32g484ce.pdf + */ + #define TS_CAL1_TEMP 30 + #define TS_CAL1_REGOFFSET 0x1FFF75A8 + #define TS_CAL2_TEMP 130 + #define TS_CAL2_REGOFFSET 0x1FFF75CA + +#elif defined(STM32H7xx) + /* + STM32H7A3xI/G + --> TS_CAL1/2 = 0x08FFF814 / 0x08FFF818 + STM32H7B0xB + --> TS_CAL1/2 = 0x08FFF814 / 0x08FFF818 + STM32H7B3xI + --> TS_CAL1/2 = 0x08FFF814 / 0x08FFF818 + STM32H725xE/G + STM32H735xG + STM32H723VE STM32H723VG STM32H723ZE STM32H723ZG + STM32H730AB STM32H730IB STM32H730VB STM32H730ZB + STM32H733VG STM32H733ZG + STM32H742xI/G STM32H743xI/G + --> CAL2_TEMP = 110 + STM32H745xI/G + STM32H747xI/G + STM32H753xI + STM32H755xI + STM32H757xI + STM32H750VB STM32H750ZB STM32H750IB STM32H750XB + --> CAL2_TEMP = 110 + */ + #define TS_CAL1_TEMP 30 + #define TS_CAL1_REGOFFSET 0x1FF1E820 + #define TS_CAL2_TEMP 130 + #define TS_CAL2_REGOFFSET 0x1FF1E840 + +#elif defined(STM32L0xx) + /* + STM32L010RB + --> TS_CAL1/TS_CAL2 not defined in datasheet + STM32L010F4 STM32L010K4 + --> TS_CAL1/TS_CAL2 not defined in datasheet + STM32L010C6 + --> TS_CAL1/TS_CAL2 not defined in datasheet + STM32L010K8 STM32L010R8 + --> TS_CAL1/TS_CAL2 not defined in datasheet + STM32L011x3 STM32L011x4 + --> TS_CAL1 not defined in datasheet + STM32L021D4 STM32L021F4 STM32L021G4 STM32L021K4 + --> TS_CAL1 not defined in datasheet + STM32L031x4 STM32L031x6 + STM32L041x6 + STM32L051x6 STM32L051x8 + STM32L071x8 STM32L071xB STM32L071xZ + STM32L081CB STM32L081CZ STM32L081KZ + STM32L052x6 STM32L052x8 + STM32L062K8 STM32L062T8 STM32L062C8 + STM32L072x8 STM32L072xB STM32L072xZ + STM32L082KB STM32L082KZ STM32L082CZ + STM32L053C6 STM32L053C8 STM32L053R6 STM32L053R8 + STM32L063C8 STM32L063R8 + STM32L073x8 STM32L073xB STM32L073xZ + STM32L083x8 STM32L083xB STM32L083xZ + */ + #define TS_CAL1_TEMP 30 + #define TS_CAL1_REGOFFSET 0x1FF8007A + #define TS_CAL2_TEMP 130 + #define TS_CAL2_REGOFFSET 0x1FF8007E + +#elif defined(STM32L1xx) + /* + STM32L100x6/8/B-A + --> TS_CAL1/TS_CAL2 not defined in datasheet + STM32L100RC + --> TS_CAL1/TS_CAL2 not defined in datasheet + STM32L100C6 STM32L100R8/RB + --> TS_CAL1/TS_CAL2 not defined in datasheet + STM32L151x6/8/B-A STM32L152x6/8/B-A + --> TS_CAL1/2 = 0x08FFF814 / 0x08FFF818 + STM32L151xD STM32L152xD + STM32L151VD-X STM32L152VD-X + STM32L15xCC STM32L15xRC STM32L15xUC STM32L15xVC + STM32L15xQC STM32L15xRC-A STM32L15xVC-A STM32L15xZC + STM32L162xE + STM32L162VD STM32L162ZD STM32L162QD STM32L162RD + STM32L162VC STM32L162RC + STM32L162VD-X + STM32L162QC STM32L162VC-A STM32L162ZC STM32L162RC-A + */ + #define TS_CAL1_TEMP 30 + #define TS_CAL1_REGOFFSET 0x1FF800FA + #define TS_CAL2_TEMP 110 + #define TS_CAL2_REGOFFSET 0x1FF800FE + +#elif defined(STM32L4xx) + /* + STM32L431xx + STM32L451xx + STM32L471xx + --> CAL2_TEMP = 110 + STM32L412xx + STM32L422xx + STM32L432KB STM32L432KC + STM32L442KC + STM32L452xx + STM32L462CE STM32L462RE STM32L462VE + STM32L433xx + STM32L443CC STM32L443RC STM32L443VC + STM32L475xx + --> CAL2_TEMP = 110 + STM32L476xx + --> CAL2_TEMP = 110 + STM32L486xx : + --> CAL2_TEMP = 110 + STM32L496xx + STM32L4A6xG + */ + #define TS_CAL1_TEMP 30 + #define TS_CAL1_REGOFFSET 0x1FFF75A8 + #define TS_CAL2_TEMP 130 + #define TS_CAL2_REGOFFSET 0x1FFF75CA + +#elif defined(STM32MP1xx) + /* + STM32MP131A STM32MP131D + STM32MP131C STM32MP131F + STM32MP133A STM32MP133D + STM32MP133C STM32MP133F + STM32MP135A STM32MP135D + STM32MP135C STM32MP135F + STM32MP151A/D + STM32MP151C/F + STM32MP153A/D + STM32MP153C/F + STM32MP157A/D + STM32MP157C/F + */ + // BSEC -> RCC + //#define TS_CAL1_TEMP 30 + //#define TS_CAL1_REGOFFSET 0x5C00 525C[15:0] + //#define TS_CAL2_TEMP 130 + //#define TS_CAL2_REGOFFSET 0x5C00 525C[31:16] + +#elif defined(STM32WBxx) + /* + STM32WB10CC + STM32WB50CG STM32WB30CE + STM32WB15CC + STM32WB55xx STM32WB35xx + */ + #define TS_CAL1_TEMP 30 + #define TS_CAL1_REGOFFSET 0x1FFF75A8 + #define TS_CAL2_TEMP 130 + #define TS_CAL2_REGOFFSET 0x1FFF75CA +#endif + +// TODO implement voltage scaling (calibrated Vrefint) and ADC resolution scaling (when applicable) + +/** + * When provided in datasheet, the use of calibrated values (TS_CAL1, TS_CAL2) should always be preferred over typical values. + * Typical values may result in important variation from the actual temperature. + * + * If calibrated values are not provided in datasheet, it is encouraged to calibrate your specific chip yourself. + */ +#if defined(TS_CAL1_TEMP) && defined(TS_CAL1_REGOFFSET) && defined(TS_CAL2_TEMP) && defined(TS_CAL2_REGOFFSET) + + #define READMEMORY(ADDR) (*((uint16_t const *)(ADDR))) + #define TEMP_SOC_SENSOR(RAW) (float((TS_CAL2_TEMP) - (TS_CAL1_TEMP)) / (READMEMORY(TS_CAL2_REGOFFSET) - READMEMORY(TS_CAL1_REGOFFSET)) * ((RAW) / float(OVERSAMPLENR) - READMEMORY(TS_CAL1_REGOFFSET)) + (TS_CAL1_TEMP)) + +#elif defined(TS_TYPICAL_V) && defined(TS_TYPICAL_SLOPE) && defined(TS_TYPICAL_TEMP) + + #define TEMP_SOC_SENSOR(RAW) ((TS_TYPICAL_V - (RAW) / float(OVERSAMPLENR) / float(HAL_ADC_RANGE) * float(ADC_VREF)) / (TS_TYPICAL_SLOPE/1000) + TS_TYPICAL_TEMP) + +#endif diff --git a/Marlin/src/HAL/STM32/tft/tft_spi.cpp b/Marlin/src/HAL/STM32/tft/tft_spi.cpp index 6ee4dc3364ee..dbb93c786b4e 100644 --- a/Marlin/src/HAL/STM32/tft/tft_spi.cpp +++ b/Marlin/src/HAL/STM32/tft/tft_spi.cpp @@ -245,7 +245,6 @@ void TFT_SPI::TransmitDMA(uint32_t MemoryIncrease, uint16_t *Data, uint16_t Coun TERN_(TFT_SHARED_IO, while (isBusy())); } - void TFT_SPI::Transmit(uint32_t MemoryIncrease, uint16_t *Data, uint16_t Count) { DMAtx.Init.MemInc = MemoryIncrease; HAL_DMA_Init(&DMAtx); diff --git a/Marlin/src/HAL/STM32/usb_host.cpp b/Marlin/src/HAL/STM32/usb_host.cpp index d77f0b28e964..f3784670049c 100644 --- a/Marlin/src/HAL/STM32/usb_host.cpp +++ b/Marlin/src/HAL/STM32/usb_host.cpp @@ -44,7 +44,7 @@ static void USBH_UserProcess(USBH_HandleTypeDef *phost, uint8_t id) { break; case HOST_USER_DISCONNECTION: //SERIAL_ECHOLNPGM("APPLICATION_DISCONNECT"); - //usb.setUsbTaskState(USB_STATE_RUNNING); + usb.setUsbTaskState(USB_STATE_INIT); break; case HOST_USER_CLASS_ACTIVE: //SERIAL_ECHOLNPGM("APPLICATION_READY"); diff --git a/Marlin/src/HAL/STM32F1/HAL.cpp b/Marlin/src/HAL/STM32F1/HAL.cpp index 4d3140001e82..a0cdda3b4fd7 100644 --- a/Marlin/src/HAL/STM32F1/HAL.cpp +++ b/Marlin/src/HAL/STM32F1/HAL.cpp @@ -307,6 +307,7 @@ enum ADCIndex : uint8_t { OPTITEM(HAS_TEMP_ADC_PROBE, TEMP_PROBE) OPTITEM(HAS_TEMP_COOLER, TEMP_COOLER) OPTITEM(HAS_TEMP_BOARD, TEMP_BOARD) + OPTITEM(HAS_TEMP_SOC, TEMP_SOC) OPTITEM(FILAMENT_WIDTH_SENSOR, FILWIDTH) OPTITEM(HAS_ADC_BUTTONS, ADC_KEY) OPTITEM(HAS_JOY_ADC_X, JOY_X) @@ -335,6 +336,7 @@ void MarlinHAL::adc_init() { OPTITEM(HAS_TEMP_ADC_PROBE, TEMP_PROBE_PIN) OPTITEM(HAS_TEMP_COOLER, TEMP_COOLER_PIN) OPTITEM(HAS_TEMP_BOARD, TEMP_BOARD_PIN) + OPTITEM(HAS_TEMP_SOC, TEMP_SOC_PIN) OPTITEM(FILAMENT_WIDTH_SENSOR, FILWIDTH_PIN) OPTITEM(HAS_ADC_BUTTONS, ADC_KEYPAD_PIN) OPTITEM(HAS_JOY_ADC_X, JOY_X_PIN) @@ -373,6 +375,7 @@ void MarlinHAL::adc_start(const pin_t pin) { _TCASE(HAS_TEMP_ADC_PROBE, TEMP_PROBE_PIN, TEMP_PROBE) _TCASE(HAS_TEMP_COOLER, TEMP_COOLER_PIN, TEMP_COOLER) _TCASE(HAS_TEMP_BOARD, TEMP_BOARD_PIN, TEMP_BOARD) + _TCASE(HAS_TEMP_SOC, TEMP_SOC_PIN, TEMP_SOC) _TCASE(HAS_JOY_ADC_X, JOY_X_PIN, JOY_X) _TCASE(HAS_JOY_ADC_Y, JOY_Y_PIN, JOY_Y) _TCASE(HAS_JOY_ADC_Z, JOY_Z_PIN, JOY_Z) diff --git a/Marlin/src/HAL/STM32F1/HAL.h b/Marlin/src/HAL/STM32F1/HAL.h index b14b5f7e7926..954281a4be3e 100644 --- a/Marlin/src/HAL/STM32F1/HAL.h +++ b/Marlin/src/HAL/STM32F1/HAL.h @@ -205,7 +205,9 @@ void analogWrite(const pin_t pin, int pwm_val8); // PWM only! mul by 257 in mapl #define JTAG_DISABLE() afio_cfg_debug_ports(AFIO_DEBUG_SW_ONLY) #define JTAGSWD_DISABLE() afio_cfg_debug_ports(AFIO_DEBUG_NONE) -#define PLATFORM_M997_SUPPORT +#ifndef PLATFORM_M997_SUPPORT + #define PLATFORM_M997_SUPPORT +#endif void flashFirmware(const int16_t); #define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment diff --git a/Marlin/src/HAL/STM32F1/endstop_interrupts.h b/Marlin/src/HAL/STM32F1/endstop_interrupts.h index a1ef8a8c3a36..b4df5d71f1b3 100644 --- a/Marlin/src/HAL/STM32F1/endstop_interrupts.h +++ b/Marlin/src/HAL/STM32F1/endstop_interrupts.h @@ -54,33 +54,33 @@ void endstop_ISR() { endstops.update(); } void setup_endstop_interrupts() { #define _ATTACH(P) attachInterrupt(P, endstop_ISR, CHANGE) - TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN)); - TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN)); - TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN)); - TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN)); - TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN)); - TERN_(HAS_Z_MIN, _ATTACH(Z_MIN_PIN)); - TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN)); - TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN)); - TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN)); - TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN)); - TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN)); - TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN)); - TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN)); - TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN)); - TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN)); - TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN)); + TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN)); + TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN)); + TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN)); + TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN)); + TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN)); + TERN_(HAS_Z_MIN_PIN, _ATTACH(Z_MIN_PIN)); + TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN)); + TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN)); + TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN)); + TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN)); + TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN)); + TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN)); + TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN)); + TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN)); + TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN)); + TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN)); TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN)); - TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN)); - TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN)); - TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN)); - TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN)); - TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN)); - TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN)); - TERN_(HAS_U_MAX, _ATTACH(U_MAX_PIN)); - TERN_(HAS_U_MIN, _ATTACH(U_MIN_PIN)); - TERN_(HAS_V_MAX, _ATTACH(V_MAX_PIN)); - TERN_(HAS_V_MIN, _ATTACH(V_MIN_PIN)); - TERN_(HAS_W_MAX, _ATTACH(W_MAX_PIN)); - TERN_(HAS_W_MIN, _ATTACH(W_MIN_PIN)); + TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN)); + TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN)); + TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN)); + TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN)); + TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN)); + TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN)); + TERN_(HAS_U_MAX, _ATTACH(U_MAX_PIN)); + TERN_(HAS_U_MIN, _ATTACH(U_MIN_PIN)); + TERN_(HAS_V_MAX, _ATTACH(V_MAX_PIN)); + TERN_(HAS_V_MIN, _ATTACH(V_MIN_PIN)); + TERN_(HAS_W_MAX, _ATTACH(W_MAX_PIN)); + TERN_(HAS_W_MIN, _ATTACH(W_MIN_PIN)); } diff --git a/Marlin/src/HAL/STM32F1/inc/Conditionals_post.h b/Marlin/src/HAL/STM32F1/inc/Conditionals_post.h index 656fbe1ce259..5a4bde16a5e6 100644 --- a/Marlin/src/HAL/STM32F1/inc/Conditionals_post.h +++ b/Marlin/src/HAL/STM32F1/inc/Conditionals_post.h @@ -28,7 +28,7 @@ #define USE_SHARED_EEPROM 1 #endif -// Allow SDSUPPORT to be disabled -#if DISABLED(SDSUPPORT) - #undef SDIO_SUPPORT +// Allow for no media drives +#if !HAS_MEDIA + #undef ONBOARD_SDIO #endif diff --git a/Marlin/src/HAL/STM32F1/inc/SanityCheck.h b/Marlin/src/HAL/STM32F1/inc/SanityCheck.h index fe8f6e0ec24b..1da42dcc8fd0 100644 --- a/Marlin/src/HAL/STM32F1/inc/SanityCheck.h +++ b/Marlin/src/HAL/STM32F1/inc/SanityCheck.h @@ -25,7 +25,7 @@ * Test STM32F1-specific configuration values for errors at compile-time. */ -#if ENABLED(SDCARD_EEPROM_EMULATION) && DISABLED(SDSUPPORT) +#if ENABLED(SDCARD_EEPROM_EMULATION) && !HAS_MEDIA #undef SDCARD_EEPROM_EMULATION // Avoid additional error noise #if USE_FALLBACK_EEPROM #warning "EEPROM type not specified. Fallback is SDCARD_EEPROM_EMULATION." diff --git a/Marlin/src/HAL/STM32F1/tft/tft_spi.cpp b/Marlin/src/HAL/STM32F1/tft/tft_spi.cpp index eed52f4e8a38..5264aabef662 100644 --- a/Marlin/src/HAL/STM32F1/tft/tft_spi.cpp +++ b/Marlin/src/HAL/STM32F1/tft/tft_spi.cpp @@ -94,25 +94,24 @@ uint32_t TFT_SPI::GetID() { } uint32_t TFT_SPI::ReadID(uint16_t Reg) { - #if !PIN_EXISTS(TFT_MISO) - return 0; - #else - uint8_t d = 0; - uint32_t data = 0; + uint32_t data = 0; + + #if PIN_EXISTS(TFT_MISO) SPIx.setClockDivider(SPI_CLOCK_DIV16); DataTransferBegin(DATASIZE_8BIT); WriteReg(Reg); LOOP_L_N(i, 4) { - SPIx.read((uint8_t*)&d, 1); + uint8_t d; + SPIx.read(&d, 1); data = (data << 8) | d; } DataTransferEnd(); SPIx.setClockDivider(SPI_CLOCK_MAX); - - return data >> 7; #endif + + return data >> 7; } bool TFT_SPI::isBusy() { diff --git a/Marlin/src/HAL/TEENSY31_32/endstop_interrupts.h b/Marlin/src/HAL/TEENSY31_32/endstop_interrupts.h index c1bbcb121bdc..9ce4fcdb2fce 100644 --- a/Marlin/src/HAL/TEENSY31_32/endstop_interrupts.h +++ b/Marlin/src/HAL/TEENSY31_32/endstop_interrupts.h @@ -47,33 +47,33 @@ void endstop_ISR() { endstops.update(); } void setup_endstop_interrupts() { #define _ATTACH(P) attachInterrupt(digitalPinToInterrupt(P), endstop_ISR, CHANGE) - TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN)); - TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN)); - TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN)); - TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN)); - TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN)); - TERN_(HAS_Z_MIN, _ATTACH(Z_MIN_PIN)); - TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN)); - TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN)); - TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN)); - TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN)); - TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN)); - TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN)); - TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN)); - TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN)); - TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN)); - TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN)); + TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN)); + TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN)); + TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN)); + TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN)); + TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN)); + TERN_(HAS_Z_MIN_PIN, _ATTACH(Z_MIN_PIN)); + TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN)); + TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN)); + TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN)); + TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN)); + TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN)); + TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN)); + TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN)); + TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN)); + TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN)); + TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN)); TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN)); - TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN)); - TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN)); - TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN)); - TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN)); - TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN)); - TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN)); - TERN_(HAS_U_MAX, _ATTACH(U_MAX_PIN)); - TERN_(HAS_U_MIN, _ATTACH(U_MIN_PIN)); - TERN_(HAS_V_MAX, _ATTACH(V_MAX_PIN)); - TERN_(HAS_V_MIN, _ATTACH(V_MIN_PIN)); - TERN_(HAS_W_MAX, _ATTACH(W_MAX_PIN)); - TERN_(HAS_W_MIN, _ATTACH(W_MIN_PIN)); + TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN)); + TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN)); + TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN)); + TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN)); + TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN)); + TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN)); + TERN_(HAS_U_MAX, _ATTACH(U_MAX_PIN)); + TERN_(HAS_U_MIN, _ATTACH(U_MIN_PIN)); + TERN_(HAS_V_MAX, _ATTACH(V_MAX_PIN)); + TERN_(HAS_V_MIN, _ATTACH(V_MIN_PIN)); + TERN_(HAS_W_MAX, _ATTACH(W_MAX_PIN)); + TERN_(HAS_W_MIN, _ATTACH(W_MIN_PIN)); } diff --git a/Marlin/src/HAL/TEENSY35_36/endstop_interrupts.h b/Marlin/src/HAL/TEENSY35_36/endstop_interrupts.h index 48d3bbbfa17d..c9ef2787698d 100644 --- a/Marlin/src/HAL/TEENSY35_36/endstop_interrupts.h +++ b/Marlin/src/HAL/TEENSY35_36/endstop_interrupts.h @@ -46,33 +46,33 @@ void endstop_ISR() { endstops.update(); } */ void setup_endstop_interrupts() { #define _ATTACH(P) attachInterrupt(digitalPinToInterrupt(P), endstop_ISR, CHANGE) - TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN)); - TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN)); - TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN)); - TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN)); - TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN)); - TERN_(HAS_Z_MIN, _ATTACH(Z_MIN_PIN)); - TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN)); - TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN)); - TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN)); - TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN)); - TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN)); - TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN)); - TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN)); - TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN)); - TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN)); - TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN)); + TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN)); + TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN)); + TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN)); + TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN)); + TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN)); + TERN_(HAS_Z_MIN_PIN, _ATTACH(Z_MIN_PIN)); + TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN)); + TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN)); + TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN)); + TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN)); + TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN)); + TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN)); + TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN)); + TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN)); + TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN)); + TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN)); TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN)); - TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN)); - TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN)); - TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN)); - TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN)); - TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN)); - TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN)); - TERN_(HAS_U_MAX, _ATTACH(U_MAX_PIN)); - TERN_(HAS_U_MIN, _ATTACH(U_MIN_PIN)); - TERN_(HAS_V_MAX, _ATTACH(V_MAX_PIN)); - TERN_(HAS_V_MIN, _ATTACH(V_MIN_PIN)); - TERN_(HAS_W_MAX, _ATTACH(W_MAX_PIN)); - TERN_(HAS_W_MIN, _ATTACH(W_MIN_PIN)); + TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN)); + TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN)); + TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN)); + TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN)); + TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN)); + TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN)); + TERN_(HAS_U_MAX, _ATTACH(U_MAX_PIN)); + TERN_(HAS_U_MIN, _ATTACH(U_MIN_PIN)); + TERN_(HAS_V_MAX, _ATTACH(V_MAX_PIN)); + TERN_(HAS_V_MIN, _ATTACH(V_MIN_PIN)); + TERN_(HAS_W_MAX, _ATTACH(W_MAX_PIN)); + TERN_(HAS_W_MIN, _ATTACH(W_MIN_PIN)); } diff --git a/Marlin/src/HAL/TEENSY35_36/inc/SanityCheck.h b/Marlin/src/HAL/TEENSY35_36/inc/SanityCheck.h index ff6d77241183..843905a8510a 100644 --- a/Marlin/src/HAL/TEENSY35_36/inc/SanityCheck.h +++ b/Marlin/src/HAL/TEENSY35_36/inc/SanityCheck.h @@ -26,7 +26,7 @@ */ #if HAS_SPI_TFT || HAS_FSMC_TFT - #error "Sorry! TFT displays are not available for Teensy 3.5/3.6. + #error "Sorry! TFT displays are not available for Teensy 3.5/3.6." #endif #if ENABLED(EMERGENCY_PARSER) diff --git a/Marlin/src/HAL/TEENSY40_41/endstop_interrupts.h b/Marlin/src/HAL/TEENSY40_41/endstop_interrupts.h index 4c3ddec9f1f1..1e4ce4cef336 100644 --- a/Marlin/src/HAL/TEENSY40_41/endstop_interrupts.h +++ b/Marlin/src/HAL/TEENSY40_41/endstop_interrupts.h @@ -46,27 +46,33 @@ void endstop_ISR() { endstops.update(); } */ void setup_endstop_interrupts() { #define _ATTACH(P) attachInterrupt(digitalPinToInterrupt(P), endstop_ISR, CHANGE) - TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN)); - TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN)); - TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN)); - TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN)); - TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN)); - TERN_(HAS_Z_MIN, _ATTACH(Z_MIN_PIN)); - TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN)); - TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN)); - TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN)); - TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN)); - TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN)); - TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN)); - TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN)); - TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN)); - TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN)); - TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN)); + TERN_(HAS_X_MAX, _ATTACH(X_MAX_PIN)); + TERN_(HAS_X_MIN, _ATTACH(X_MIN_PIN)); + TERN_(HAS_Y_MAX, _ATTACH(Y_MAX_PIN)); + TERN_(HAS_Y_MIN, _ATTACH(Y_MIN_PIN)); + TERN_(HAS_Z_MAX, _ATTACH(Z_MAX_PIN)); + TERN_(HAS_Z_MIN_PIN, _ATTACH(Z_MIN_PIN)); + TERN_(HAS_X2_MAX, _ATTACH(X2_MAX_PIN)); + TERN_(HAS_X2_MIN, _ATTACH(X2_MIN_PIN)); + TERN_(HAS_Y2_MAX, _ATTACH(Y2_MAX_PIN)); + TERN_(HAS_Y2_MIN, _ATTACH(Y2_MIN_PIN)); + TERN_(HAS_Z2_MAX, _ATTACH(Z2_MAX_PIN)); + TERN_(HAS_Z2_MIN, _ATTACH(Z2_MIN_PIN)); + TERN_(HAS_Z3_MAX, _ATTACH(Z3_MAX_PIN)); + TERN_(HAS_Z3_MIN, _ATTACH(Z3_MIN_PIN)); + TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN)); + TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN)); TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN)); - TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN)); - TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN)); - TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN)); - TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN)); - TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN)); - TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN)); + TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN)); + TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN)); + TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN)); + TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN)); + TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN)); + TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN)); + TERN_(HAS_U_MAX, _ATTACH(U_MAX_PIN)); + TERN_(HAS_U_MIN, _ATTACH(U_MIN_PIN)); + TERN_(HAS_V_MAX, _ATTACH(V_MAX_PIN)); + TERN_(HAS_V_MIN, _ATTACH(V_MIN_PIN)); + TERN_(HAS_W_MAX, _ATTACH(W_MAX_PIN)); + TERN_(HAS_W_MIN, _ATTACH(W_MIN_PIN)); } diff --git a/Marlin/src/HAL/platforms.h b/Marlin/src/HAL/platforms.h index 488980ce0931..84ba7087b0ea 100644 --- a/Marlin/src/HAL/platforms.h +++ b/Marlin/src/HAL/platforms.h @@ -24,34 +24,34 @@ #define XSTR(V...) #V #ifdef __AVR__ - #define HAL_PATH(PATH, NAME) XSTR(PATH/AVR/NAME) + #define HAL_PATH(PATH, NAME) XSTR(PATH/HAL/AVR/NAME) #elif defined(ARDUINO_ARCH_SAM) - #define HAL_PATH(PATH, NAME) XSTR(PATH/DUE/NAME) + #define HAL_PATH(PATH, NAME) XSTR(PATH/HAL/DUE/NAME) #elif defined(__MK20DX256__) - #define HAL_PATH(PATH, NAME) XSTR(PATH/TEENSY31_32/NAME) + #define HAL_PATH(PATH, NAME) XSTR(PATH/HAL/TEENSY31_32/NAME) #elif defined(__MK64FX512__) || defined(__MK66FX1M0__) - #define HAL_PATH(PATH, NAME) XSTR(PATH/TEENSY35_36/NAME) + #define HAL_PATH(PATH, NAME) XSTR(PATH/HAL/TEENSY35_36/NAME) #elif defined(__IMXRT1062__) - #define HAL_PATH(PATH, NAME) XSTR(PATH/TEENSY40_41/NAME) + #define HAL_PATH(PATH, NAME) XSTR(PATH/HAL/TEENSY40_41/NAME) #elif defined(TARGET_LPC1768) - #define HAL_PATH(PATH, NAME) XSTR(PATH/LPC1768/NAME) + #define HAL_PATH(PATH, NAME) XSTR(PATH/HAL/LPC1768/NAME) #elif defined(__STM32F1__) || defined(TARGET_STM32F1) - #define HAL_PATH(PATH, NAME) XSTR(PATH/STM32F1/NAME) + #define HAL_PATH(PATH, NAME) XSTR(PATH/HAL/STM32F1/NAME) #elif defined(ARDUINO_ARCH_STM32) #ifndef HAL_STM32 #define HAL_STM32 #endif - #define HAL_PATH(PATH, NAME) XSTR(PATH/STM32/NAME) + #define HAL_PATH(PATH, NAME) XSTR(PATH/HAL/STM32/NAME) #elif defined(ARDUINO_ARCH_ESP32) - #define HAL_PATH(PATH, NAME) XSTR(PATH/ESP32/NAME) + #define HAL_PATH(PATH, NAME) XSTR(PATH/HAL/ESP32/NAME) #elif defined(__PLAT_LINUX__) - #define HAL_PATH(PATH, NAME) XSTR(PATH/LINUX/NAME) + #define HAL_PATH(PATH, NAME) XSTR(PATH/HAL/LINUX/NAME) #elif defined(__PLAT_NATIVE_SIM__) - #define HAL_PATH(PATH, NAME) XSTR(PATH/NATIVE_SIM/NAME) + #define HAL_PATH(PATH, NAME) XSTR(PATH/HAL/NATIVE_SIM/NAME) #elif defined(__SAMD51__) - #define HAL_PATH(PATH, NAME) XSTR(PATH/SAMD51/NAME) + #define HAL_PATH(PATH, NAME) XSTR(PATH/HAL/SAMD51/NAME) #elif defined(__SAMD21__) - #define HAL_PATH(PATH, NAME) XSTR(PATH/SAMD21/NAME) + #define HAL_PATH(PATH, NAME) XSTR(PATH/HAL/SAMD21/NAME) #else #error "Unsupported Platform!" #endif diff --git a/Marlin/src/HAL/shared/eeprom_if_i2c.cpp b/Marlin/src/HAL/shared/eeprom_if_i2c.cpp index 6b559e234b4c..bba9c626a4da 100644 --- a/Marlin/src/HAL/shared/eeprom_if_i2c.cpp +++ b/Marlin/src/HAL/shared/eeprom_if_i2c.cpp @@ -33,13 +33,14 @@ #if ENABLED(SOFT_I2C_EEPROM) #include - SlowSoftWire Wire = SlowSoftWire(I2C_SDA_PIN, I2C_SCL_PIN, true); + SlowSoftWire eWire = SlowSoftWire(I2C_SDA_PIN, I2C_SCL_PIN, true); #else #include + #define eWire Wire #endif void eeprom_init() { - Wire.begin( + eWire.begin( #if PINS_EXIST(I2C_SCL, I2C_SDA) && DISABLED(SOFT_I2C_EEPROM) uint8_t(I2C_SDA_PIN), uint8_t(I2C_SCL_PIN) #endif @@ -75,16 +76,16 @@ static uint8_t _eeprom_calc_device_address(uint8_t * const pos) { static void _eeprom_begin(uint8_t * const pos) { const unsigned eeprom_address = (unsigned)pos; - Wire.beginTransmission(_eeprom_calc_device_address(pos)); + eWire.beginTransmission(_eeprom_calc_device_address(pos)); if (!SMALL_EEPROM) - Wire.write(uint8_t((eeprom_address >> 8) & 0xFF)); // Address High, if needed - Wire.write(uint8_t(eeprom_address & 0xFF)); // Address Low + eWire.write(uint8_t((eeprom_address >> 8) & 0xFF)); // Address High, if needed + eWire.write(uint8_t(eeprom_address & 0xFF)); // Address Low } void eeprom_write_byte(uint8_t *pos, uint8_t value) { _eeprom_begin(pos); - Wire.write(value); - Wire.endTransmission(); + eWire.write(value); + eWire.endTransmission(); // wait for write cycle to complete // this could be done more efficiently with "acknowledge polling" @@ -93,9 +94,9 @@ void eeprom_write_byte(uint8_t *pos, uint8_t value) { uint8_t eeprom_read_byte(uint8_t *pos) { _eeprom_begin(pos); - Wire.endTransmission(); - Wire.requestFrom(_eeprom_calc_device_address(pos), (byte)1); - return Wire.available() ? Wire.read() : 0xFF; + eWire.endTransmission(); + eWire.requestFrom(_eeprom_calc_device_address(pos), (byte)1); + return eWire.available() ? eWire.read() : 0xFF; } #endif // USE_SHARED_EEPROM diff --git a/Marlin/src/HAL/shared/fauxpins.h b/Marlin/src/HAL/shared/fauxpins.h new file mode 100644 index 000000000000..924bfba02ae0 --- /dev/null +++ b/Marlin/src/HAL/shared/fauxpins.h @@ -0,0 +1,367 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2023 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +// +// Faux pins for Dependency Check +// + +// +// STM32 Pin Names +// +#define PA0 0x10 +#define PA1 0x11 +#define PA2 0x12 +#define PA3 0x13 +#define PA4 0x14 +#define PA5 0x15 +#define PA6 0x16 +#define PA7 0x17 +#define PA8 0x18 +#define PA9 0x19 +#define PA10 0x1A +#define PA11 0x1B +#define PA12 0x1C +#define PA13 0x1D +#define PA14 0x1E +#define PA15 0x1F + +#define PB0 0x20 +#define PB1 0x21 +#define PB2 0x22 +#define PB3 0x23 +#define PB4 0x24 +#define PB5 0x25 +#define PB6 0x26 +#define PB7 0x27 +#define PB8 0x28 +#define PB9 0x29 +#define PB10 0x2A +#define PB11 0x2B +#define PB12 0x2C +#define PB13 0x2D +#define PB14 0x2E +#define PB15 0x2F + +#define PC0 0x30 +#define PC1 0x31 +#define PC2 0x32 +#define PC3 0x33 +#define PC4 0x34 +#define PC5 0x35 +#define PC6 0x36 +#define PC7 0x37 +#define PC8 0x38 +#define PC9 0x39 +#define PC10 0x3A +#define PC11 0x3B +#define PC12 0x3C +#define PC13 0x3D +#define PC14 0x3E +#define PC15 0x3F + +#define PD0 0x40 +#define PD1 0x41 +#define PD2 0x42 +#define PD3 0x43 +#define PD4 0x44 +#define PD5 0x45 +#define PD6 0x46 +#define PD7 0x47 +#define PD8 0x48 +#define PD9 0x49 +#define PD10 0x4A +#define PD11 0x4B +#define PD12 0x4C +#define PD13 0x4D +#define PD14 0x4E +#define PD15 0x4F + +#define PE0 0x50 +#define PE1 0x51 +#define PE2 0x52 +#define PE3 0x53 +#define PE4 0x54 +#define PE5 0x55 +#define PE6 0x56 +#define PE7 0x57 +#define PE8 0x58 +#define PE9 0x59 +#define PE10 0x5A +#define PE11 0x5B +#define PE12 0x5C +#define PE13 0x5D +#define PE14 0x5E +#define PE15 0x5F + +#define PF0 0x60 +#define PF1 0x61 +#define PF2 0x62 +#define PF3 0x63 +#define PF4 0x64 +#define PF5 0x65 +#define PF6 0x66 +#define PF7 0x67 +#define PF8 0x68 +#define PF9 0x69 +#define PF10 0x6A +#define PF11 0x6B +#define PF12 0x6C +#define PF13 0x6D +#define PF14 0x6E +#define PF15 0x6F + +#define PG0 0x70 +#define PG1 0x71 +#define PG2 0x72 +#define PG3 0x73 +#define PG4 0x74 +#define PG5 0x75 +#define PG6 0x76 +#define PG7 0x77 +#define PG8 0x78 +#define PG9 0x79 +#define PG10 0x7A +#define PG11 0x7B +#define PG12 0x7C +#define PG13 0x7D +#define PG14 0x7E +#define PG15 0x7F + +#define PH0 0x80 +#define PH1 0x81 +#define PH2 0x82 +#define PH3 0x83 +#define PH4 0x84 +#define PH5 0x85 +#define PH6 0x86 +#define PH7 0x87 +#define PH8 0x88 +#define PH9 0x89 +#define PH10 0x8A +#define PH11 0x8B +#define PH12 0x8C +#define PH13 0x8D +#define PH14 0x8E +#define PH15 0x8F + +#define PI0 0x90 +#define PI1 0x91 +#define PI2 0x92 +#define PI3 0x93 +#define PI4 0x94 +#define PI5 0x95 +#define PI6 0x96 +#define PI7 0x97 +#define PI8 0x98 +#define PI9 0x99 +#define PI10 0x9A +#define PI11 0x9B +#define PI12 0x9C +#define PI13 0x9D +#define PI14 0x9E +#define PI15 0x9F + +#define PJ0 0xA0 +#define PJ1 0xA1 +#define PJ2 0xA2 +#define PJ3 0xA3 +#define PJ4 0xA4 +#define PJ5 0xA5 +#define PJ6 0xA6 +#define PJ7 0xA7 +#define PJ8 0xA8 +#define PJ9 0xA9 +#define PJ10 0xAA +#define PJ11 0xAB +#define PJ12 0xAC +#define PJ13 0xAD +#define PJ14 0xAE +#define PJ15 0xAF + +// +// LPC Pin Names +// +#define P0_00 100 +#define P0_01 101 +#define P0_02 102 +#define P0_03 103 +#define P0_04 104 +#define P0_05 105 +#define P0_06 106 +#define P0_07 107 +#define P0_08 108 +#define P0_09 109 +#define P0_10 110 +#define P0_11 111 +#define P0_12 112 +#define P0_13 113 +#define P0_14 114 +#define P0_15 115 +#define P0_16 116 +#define P0_17 117 +#define P0_18 118 +#define P0_19 119 +#define P0_20 120 +#define P0_21 121 +#define P0_22 122 +#define P0_23 123 +#define P0_24 124 +#define P0_25 125 +#define P0_26 126 +#define P0_27 127 +#define P0_28 128 +#define P0_29 129 +#define P0_30 130 +#define P0_31 131 + +#define P1_00 200 +#define P1_01 201 +#define P1_02 202 +#define P1_03 203 +#define P1_04 204 +#define P1_05 205 +#define P1_06 206 +#define P1_07 207 +#define P1_08 208 +#define P1_09 209 +#define P1_10 210 +#define P1_11 211 +#define P1_12 212 +#define P1_13 213 +#define P1_14 214 +#define P1_15 215 +#define P1_16 216 +#define P1_17 217 +#define P1_18 218 +#define P1_19 219 +#define P1_20 220 +#define P1_21 221 +#define P1_22 222 +#define P1_23 223 +#define P1_24 224 +#define P1_25 225 +#define P1_26 226 +#define P1_27 227 +#define P1_28 228 +#define P1_29 229 +#define P1_30 230 +#define P1_31 231 + +#define P2_00 300 +#define P2_01 301 +#define P2_02 302 +#define P2_03 303 +#define P2_04 304 +#define P2_05 305 +#define P2_06 306 +#define P2_07 307 +#define P2_08 308 +#define P2_09 309 +#define P2_10 310 +#define P2_11 311 +#define P2_12 312 +#define P2_13 313 +#define P2_14 314 +#define P2_15 315 +#define P2_16 316 +#define P2_17 317 +#define P2_18 318 +#define P2_19 319 +#define P2_20 320 +#define P2_21 321 +#define P2_22 322 +#define P2_23 323 +#define P2_24 324 +#define P2_25 325 +#define P2_26 326 +#define P2_27 327 +#define P2_28 328 +#define P2_29 329 +#define P2_30 330 +#define P2_31 331 + +#define P3_00 400 +#define P3_01 401 +#define P3_02 402 +#define P3_03 403 +#define P3_04 404 +#define P3_05 405 +#define P3_06 406 +#define P3_07 407 +#define P3_08 408 +#define P3_09 409 +#define P3_10 410 +#define P3_11 411 +#define P3_12 412 +#define P3_13 413 +#define P3_14 414 +#define P3_15 415 +#define P3_16 416 +#define P3_17 417 +#define P3_18 418 +#define P3_19 419 +#define P3_20 420 +#define P3_21 421 +#define P3_22 422 +#define P3_23 423 +#define P3_24 424 +#define P3_25 425 +#define P3_26 426 +#define P3_27 427 +#define P3_28 428 +#define P3_29 429 +#define P3_30 430 +#define P3_31 431 + +#define P4_00 500 +#define P4_01 501 +#define P4_02 502 +#define P4_03 503 +#define P4_04 504 +#define P4_05 505 +#define P4_06 506 +#define P4_07 507 +#define P4_08 508 +#define P4_09 509 +#define P4_10 510 +#define P4_11 511 +#define P4_12 512 +#define P4_13 513 +#define P4_14 514 +#define P4_15 515 +#define P4_16 516 +#define P4_17 517 +#define P4_18 518 +#define P4_19 519 +#define P4_20 520 +#define P4_21 521 +#define P4_22 522 +#define P4_23 523 +#define P4_24 524 +#define P4_25 525 +#define P4_26 526 +#define P4_27 527 +#define P4_28 528 +#define P4_29 529 +#define P4_30 530 +#define P4_31 531 diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 8c0f7a29e87a..e478a35445b6 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -160,7 +160,7 @@ #include "feature/spindle_laser.h" #endif -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA CardReader card; #endif @@ -363,7 +363,7 @@ void startOrResumeJob() { print_job_timer.start(); } -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA inline void abortSDPrinting() { IF_DISABLED(NO_SD_AUTOSTART, card.autofile_cancel()); @@ -397,7 +397,7 @@ void startOrResumeJob() { } } -#endif // SDSUPPORT +#endif // HAS_MEDIA /** * Minimal management of Marlin's core activities: @@ -834,7 +834,7 @@ void idle(const bool no_stepper_sleep/*=false*/) { #endif // Handle SD Card insert / remove - TERN_(SDSUPPORT, card.manage_media()); + TERN_(HAS_MEDIA, card.manage_media()); // Handle USB Flash Drive insert / remove TERN_(USB_FLASH_DRIVE_SUPPORT, card.diskIODriver()->idle()); @@ -1340,7 +1340,7 @@ void setup() { #endif #endif - #if BOTH(SDSUPPORT, SDCARD_EEPROM_EMULATION) + #if BOTH(HAS_MEDIA, SDCARD_EEPROM_EMULATION) SETUP_RUN(card.mount()); // Mount media with settings before first_load #endif @@ -1624,7 +1624,7 @@ void setup() { #endif #if HAS_TFT_LVGL_UI - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (!card.isMounted()) SETUP_RUN(card.mount()); // Mount SD to load graphics and fonts #endif SETUP_RUN(tft_lvgl_init()); @@ -1688,7 +1688,7 @@ void loop() { do { idle(); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (card.flag.abort_sd_printing) abortSDPrinting(); if (marlin_state == MF_SD_COMPLETE) finishSDPrinting(); #endif diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 2f2ac1664e10..5a05d2c7147f 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -21,6 +21,11 @@ */ #pragma once +/** + * Whenever changes are made to this file, please update Marlin/Makefile + * and _data/boards.yml in the MarlinDocumentation repo. + */ + #include "macros.h" #define BOARD_UNKNOWN -1 @@ -186,12 +191,13 @@ #define BOARD_MELZI_V2 1503 // Melzi V2 #define BOARD_MELZI_MAKR3D 1504 // Melzi with ATmega1284 (MaKr3d version) #define BOARD_MELZI_CREALITY 1505 // Melzi Creality3D (for CR-10 etc) -#define BOARD_MELZI_MALYAN 1506 // Melzi Malyan M150 -#define BOARD_MELZI_TRONXY 1507 // Tronxy X5S -#define BOARD_STB_11 1508 // STB V1.1 -#define BOARD_AZTEEG_X1 1509 // Azteeg X1 -#define BOARD_ANET_10 1510 // Anet 1.0 (Melzi clone) -#define BOARD_ZMIB_V2 1511 // ZoneStar ZMIB V2 +#define BOARD_MELZI_CREALITY_ENDER2 1506 // Melzi Creality3D (for Ender-2) +#define BOARD_MELZI_MALYAN 1507 // Melzi Malyan M150 +#define BOARD_MELZI_TRONXY 1508 // Tronxy X5S +#define BOARD_STB_11 1509 // STB V1.1 +#define BOARD_AZTEEG_X1 1510 // Azteeg X1 +#define BOARD_ANET_10 1511 // Anet 1.0 (Melzi clone) +#define BOARD_ZMIB_V2 1512 // ZoneStar ZMIB V2 // // Other ATmega644P, ATmega644, ATmega1284P @@ -443,6 +449,7 @@ #define BOARD_FYSETC_SPIDER_KING407 5243 // FYSETC Spider King407 (STM32F407ZG) #define BOARD_MKS_SKIPR_V1 5244 // MKS SKIPR v1.0 all-in-one board (STM32F407VE) #define BOARD_TRONXY_V10 5245 // TRONXY V10 (STM32F446ZE) +#define BOARD_CREALITY_F401RE 5246 // Creality CR4NS200141C13 (STM32F401RE) as found in the Ender-5 S1 // // ARM Cortex-M7 diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h index bf309293ac6c..0c5bc0af9bd4 100644 --- a/Marlin/src/core/language.h +++ b/Marlin/src/core/language.h @@ -242,6 +242,7 @@ #define STR_HEATER_CHAMBER "chamber" #define STR_COOLER "cooler" #define STR_MOTHERBOARD "motherboard" +#define STR_SOC "soc" #define STR_PROBE "probe" #define STR_REDUNDANT "redundant " #define STR_LASER_TEMP "laser temperature" diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h index fec390b64bf7..7e20f838032a 100644 --- a/Marlin/src/core/macros.h +++ b/Marlin/src/core/macros.h @@ -33,51 +33,6 @@ #define _AXIS(A) (A##_AXIS) -#define _XSTOP_ 0x01 -#define _YSTOP_ 0x02 -#define _ZSTOP_ 0x03 -#define _ISTOP_ 0x04 -#define _JSTOP_ 0x05 -#define _KSTOP_ 0x06 -#define _USTOP_ 0x07 -#define _VSTOP_ 0x08 -#define _WSTOP_ 0x09 -#define _XMIN_ 0x11 -#define _YMIN_ 0x12 -#define _ZMIN_ 0x13 -#define _IMIN_ 0x14 -#define _JMIN_ 0x15 -#define _KMIN_ 0x16 -#define _UMIN_ 0x17 -#define _VMIN_ 0x18 -#define _WMIN_ 0x19 -#define _XMAX_ 0x21 -#define _YMAX_ 0x22 -#define _ZMAX_ 0x23 -#define _IMAX_ 0x24 -#define _JMAX_ 0x25 -#define _KMAX_ 0x26 -#define _UMAX_ 0x27 -#define _VMAX_ 0x28 -#define _WMAX_ 0x29 -#define _XDIAG_ 0x31 -#define _YDIAG_ 0x32 -#define _ZDIAG_ 0x33 -#define _IDIAG_ 0x34 -#define _JDIAG_ 0x35 -#define _KDIAG_ 0x36 -#define _UDIAG_ 0x37 -#define _VDIAG_ 0x38 -#define _WDIAG_ 0x39 -#define _E0DIAG_ 0xE0 -#define _E1DIAG_ 0xE1 -#define _E2DIAG_ 0xE2 -#define _E3DIAG_ 0xE3 -#define _E4DIAG_ 0xE4 -#define _E5DIAG_ 0xE5 -#define _E6DIAG_ 0xE6 -#define _E7DIAG_ 0xE7 - #define _FORCE_INLINE_ __attribute__((__always_inline__)) __inline__ #define FORCE_INLINE __attribute__((always_inline)) inline #define NO_INLINE __attribute__((noinline)) diff --git a/Marlin/src/core/multi_language.h b/Marlin/src/core/multi_language.h index 05a713e435de..2c0eb7aa7297 100644 --- a/Marlin/src/core/multi_language.h +++ b/Marlin/src/core/multi_language.h @@ -64,6 +64,9 @@ typedef const char Language_Str[]; #if NUM_LANGUAGES > 1 #define HAS_MULTI_LANGUAGE 1 + #if HAS_MARLINUI_MENU + #define HAS_MENU_MULTI_LANGUAGE 1 + #endif #define GET_TEXT(MSG) ( \ ui.language == 4 ? GET_LANG(LCD_LANGUAGE_5)::MSG : \ ui.language == 3 ? GET_LANG(LCD_LANGUAGE_4)::MSG : \ diff --git a/Marlin/src/core/types.h b/Marlin/src/core/types.h index 15d572af6022..af6834c666b3 100644 --- a/Marlin/src/core/types.h +++ b/Marlin/src/core/types.h @@ -67,6 +67,8 @@ template struct IF { typedef L type; }; #define SECONDARY_AXIS_GANG(V...) GANG_N(SECONDARY_AXES, V) #define SECONDARY_AXIS_CODE(V...) CODE_N(SECONDARY_AXES, V) +#define SECONDARY_AXIS_LIST(V...) LIST_N(SECONDARY_AXES, V) +#define SECONDARY_AXIS_ARGS(T) SECONDARY_AXIS_LIST(T i, T j, T k, T u, T v, T w) #if HAS_ROTATIONAL_AXES #define ROTATIONAL_AXIS_GANG(V...) GANG_N(ROTATIONAL_AXES, V) diff --git a/Marlin/src/feature/bedlevel/bdl/bdl.cpp b/Marlin/src/feature/bedlevel/bdl/bdl.cpp index e729022f213c..5ce5e894ca44 100644 --- a/Marlin/src/feature/bedlevel/bdl/bdl.cpp +++ b/Marlin/src/feature/bedlevel/bdl/bdl.cpp @@ -110,7 +110,7 @@ void BDS_Leveling::process() { } else { babystep.set_mm(Z_AXIS, 0); //if (old_cur_z <= cur_z) Z_DIR_WRITE(INVERT_DIR(Z, HIGH)); - stepper.set_directions(); + stepper.apply_directions(); } #endif old_cur_z = cur_z; @@ -119,7 +119,7 @@ void BDS_Leveling::process() { //endstops.update(); } else - stepper.set_directions(); + stepper.apply_directions(); #if ENABLED(DEBUG_OUT_BD) SERIAL_ECHOLNPGM("BD:", tmp & 0x3FF, ", Z:", cur_z, "|", current_position.z); diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index 5bc5e6ec6136..2fbd3bfbebea 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -112,7 +112,7 @@ * If omitted, the nozzle will raise by Z_CLEARANCE_BETWEEN_PROBES. * * H # Offset With P4, 'H' specifies the Offset above the mesh height to place the nozzle. - * If omitted, Z_CLEARANCE_BETWEEN_PROBES will be used. + * If omitted, Z_TWEEN_SAFE_CLEARANCE will be used. * * I # Invalidate Invalidate the specified number of Mesh Points near the given 'X' 'Y'. If X or Y are omitted, * the nozzle location is used. If no 'I' value is given, only the point nearest to the location @@ -790,10 +790,7 @@ void unified_bed_leveling::shift_mesh_height() { if (best.pos.x >= 0) { // mesh point found and is reachable by probe TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(best.pos, ExtUI::G29_POINT_START)); - const float measured_z = probe.probe_at_point( - best.meshpos(), - stow_probe ? PROBE_PT_STOW : PROBE_PT_RAISE, param.V_verbosity - ); + const float measured_z = probe.probe_at_point(best.meshpos(), stow_probe ? PROBE_PT_STOW : PROBE_PT_RAISE, param.V_verbosity); z_values[best.pos.x][best.pos.y] = measured_z; #if ENABLED(EXTENSIBLE_UI) ExtUI::onMeshUpdate(best.pos, ExtUI::G29_POINT_FINISH); @@ -883,7 +880,7 @@ void set_message_with_feedback(FSTR_P const fstr) { save_ubl_active_state_and_disable(); // Disable bed level correction for probing do_blocking_move_to( - NUM_AXIS_LIST( + xyz_pos_t({ 0.5f * ((MESH_MAX_X) - (MESH_MIN_X)), 0.5f * ((MESH_MAX_Y) - (MESH_MIN_Y)), MANUAL_PROBE_START_Z @@ -905,7 +902,7 @@ void set_message_with_feedback(FSTR_P const fstr) { #ifdef SAFE_BED_LEVELING_START_W , SAFE_BED_LEVELING_START_W #endif - ) + }) //, _MIN(planner.settings.max_feedrate_mm_s[X_AXIS], planner.settings.max_feedrate_mm_s[Y_AXIS]) * 0.5f ); planner.synchronize(); @@ -1034,9 +1031,9 @@ void set_message_with_feedback(FSTR_P const fstr) { save_ubl_active_state_and_disable(); LCD_MESSAGE(MSG_UBL_FINE_TUNE_MESH); - ui.capture(); // Take over control of the LCD encoder + ui.capture(); // Take over control of the LCD encoder - do_blocking_move_to_xy_z(pos, Z_CLEARANCE_BETWEEN_PROBES); // Move to the given XY with probe clearance + do_blocking_move_to_xy_z(pos, Z_TWEEN_SAFE_CLEARANCE); // Move to the given XY with probe clearance MeshFlags done_flags{0}; const xy_int8_t &lpos = location.pos; @@ -1053,7 +1050,7 @@ void set_message_with_feedback(FSTR_P const fstr) { done_flags.mark(lpos); // Mark this location as 'adjusted' so a new // location is used on the next loop - const xyz_pos_t raw = { get_mesh_x(lpos.x), get_mesh_y(lpos.y), Z_CLEARANCE_BETWEEN_PROBES }; + const xyz_pos_t raw = { get_mesh_x(lpos.x), get_mesh_y(lpos.y), Z_TWEEN_SAFE_CLEARANCE }; if (!position_is_reachable(raw)) break; // SHOULD NOT OCCUR (find_closest_mesh_point_of_type only returns reachable) @@ -1063,7 +1060,7 @@ void set_message_with_feedback(FSTR_P const fstr) { KEEPALIVE_STATE(PAUSED_FOR_USER); - if (do_ubl_mesh_map) display_map(param.T_map_type); // Display the current point + if (do_ubl_mesh_map) display_map(param.T_map_type); // Display the current point #if IS_TFTGLCD_PANEL ui.ubl_plot(lpos.x, lpos.y); // update plot screen @@ -1093,7 +1090,7 @@ void set_message_with_feedback(FSTR_P const fstr) { // Button held down? Abort editing if (_click_and_hold([]{ ui.return_to_status(); - do_z_clearance(Z_CLEARANCE_BETWEEN_PROBES); + do_z_clearance(Z_TWEEN_SAFE_CLEARANCE); set_message_with_feedback(GET_TEXT_F(MSG_EDITING_STOPPED)); })) break; @@ -1113,7 +1110,7 @@ void set_message_with_feedback(FSTR_P const fstr) { if (do_ubl_mesh_map) display_map(param.T_map_type); restore_ubl_active_state_and_leave(); - do_blocking_move_to_xy_z(pos, Z_CLEARANCE_BETWEEN_PROBES); + do_blocking_move_to_xy_z(pos, Z_TWEEN_SAFE_CLEARANCE); LCD_MESSAGE(MSG_UBL_DONE_EDITING_MESH); SERIAL_ECHOLNPGM("Done Editing Mesh"); diff --git a/Marlin/src/feature/binary_stream.h b/Marlin/src/feature/binary_stream.h index 417e39c74507..a9cd12b85e9a 100644 --- a/Marlin/src/feature/binary_stream.h +++ b/Marlin/src/feature/binary_stream.h @@ -281,7 +281,7 @@ class BinaryStream { uint8_t data = 0; millis_t transfer_window = millis() + RX_TIMESLICE; - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA PORT_REDIRECT(SERIAL_PORTMASK(card.transfer_port_index)); #endif diff --git a/Marlin/src/feature/controllerfan.cpp b/Marlin/src/feature/controllerfan.cpp index 6e5278ce7451..4b3d9f550165 100644 --- a/Marlin/src/feature/controllerfan.cpp +++ b/Marlin/src/feature/controllerfan.cpp @@ -61,10 +61,16 @@ void ControllerFan::update() { // - At least one stepper driver is enabled // - The heated bed is enabled // - TEMP_SENSOR_BOARD is reporting >= CONTROLLER_FAN_MIN_BOARD_TEMP + // - TEMP_SENSOR_SOC is reporting >= CONTROLLER_FAN_MIN_SOC_TEMP const ena_mask_t axis_mask = TERN(CONTROLLER_FAN_USE_Z_ONLY, _BV(Z_AXIS), (ena_mask_t)~TERN0(CONTROLLER_FAN_IGNORE_Z, _BV(Z_AXIS))); if ( (stepper.axis_enabled.bits & axis_mask) || TERN0(HAS_HEATED_BED, thermalManager.temp_bed.soft_pwm_amount > 0) - || TERN0(HAS_CONTROLLER_FAN_MIN_BOARD_TEMP, thermalManager.wholeDegBoard() >= CONTROLLER_FAN_MIN_BOARD_TEMP) + #ifdef CONTROLLER_FAN_MIN_BOARD_TEMP + || thermalManager.wholeDegBoard() >= CONTROLLER_FAN_MIN_BOARD_TEMP + #endif + #ifdef CONTROLLER_FAN_MIN_SOC_TEMP + || thermalManager.wholeDegSoc() >= CONTROLLER_FAN_MIN_SOC_TEMP + #endif ) lastMotorOn = ms; //... set time to NOW so the fan will turn on // Fan Settings. Set fan > 0: diff --git a/Marlin/src/feature/e_parser.cpp b/Marlin/src/feature/e_parser.cpp index cfe0956aa789..b50a12d1af18 100644 --- a/Marlin/src/feature/e_parser.cpp +++ b/Marlin/src/feature/e_parser.cpp @@ -33,7 +33,7 @@ // Static data members bool EmergencyParser::killed_by_M112, // = false EmergencyParser::quickstop_by_M410, - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA EmergencyParser::sd_abort_by_M524, #endif EmergencyParser::enabled; diff --git a/Marlin/src/feature/e_parser.h b/Marlin/src/feature/e_parser.h index 3a15a7ffa0f9..df4456d8d3ca 100644 --- a/Marlin/src/feature/e_parser.h +++ b/Marlin/src/feature/e_parser.h @@ -58,7 +58,7 @@ class EmergencyParser { EP_M10, EP_M108, EP_M11, EP_M112, EP_M4, EP_M41, EP_M410, - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA EP_M5, EP_M52, EP_M524, #endif #if ENABLED(HOST_PROMPT_SUPPORT) @@ -79,7 +79,7 @@ class EmergencyParser { static bool killed_by_M112; static bool quickstop_by_M410; - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA static bool sd_abort_by_M524; #endif @@ -152,7 +152,7 @@ class EmergencyParser { case ' ': break; case '1': state = EP_M1; break; case '4': state = EP_M4; break; - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA case '5': state = EP_M5; break; #endif #if ENABLED(HOST_PROMPT_SUPPORT) @@ -175,7 +175,7 @@ class EmergencyParser { case EP_M4: state = (c == '1') ? EP_M41 : EP_IGNORE; break; case EP_M41: state = (c == '0') ? EP_M410 : EP_IGNORE; break; - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA case EP_M5: state = (c == '2') ? EP_M52 : EP_IGNORE; break; case EP_M52: state = (c == '4') ? EP_M524 : EP_IGNORE; break; #endif @@ -215,7 +215,7 @@ class EmergencyParser { case EP_M108: wait_for_user = wait_for_heatup = false; break; case EP_M112: killed_by_M112 = true; break; case EP_M410: quickstop_by_M410 = true; break; - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA case EP_M524: sd_abort_by_M524 = true; break; #endif #if ENABLED(HOST_PROMPT_SUPPORT) diff --git a/Marlin/src/feature/host_actions.cpp b/Marlin/src/feature/host_actions.cpp index 773b6ebc61a4..a1c1bad5bb44 100644 --- a/Marlin/src/feature/host_actions.cpp +++ b/Marlin/src/feature/host_actions.cpp @@ -209,7 +209,7 @@ void HostUI::action(FSTR_P const fstr, const bool eol) { TERN_(HAS_RESUME_CONTINUE, wait_for_user = false); break; case PROMPT_PAUSE_RESUME: - #if BOTH(ADVANCED_PAUSE_FEATURE, SDSUPPORT) + #if BOTH(ADVANCED_PAUSE_FEATURE, HAS_MEDIA) extern const char M24_STR[]; queue.inject_P(M24_STR); #endif diff --git a/Marlin/src/feature/leds/pca9632.cpp b/Marlin/src/feature/leds/pca9632.cpp index abea98800451..07c379a8154a 100644 --- a/Marlin/src/feature/leds/pca9632.cpp +++ b/Marlin/src/feature/leds/pca9632.cpp @@ -148,7 +148,7 @@ void PCA9632_set_led_color(const LEDColor &color) { #if ENABLED(PCA9632_BUZZER) - void PCA9632_buzz(const long, const uint16_t) { + void PCA9632_buzz(const long, const uint16_t=0) { uint8_t data[] = PCA9632_BUZZER_DATA; Wire.beginTransmission(I2C_ADDRESS(PCA9632_ADDRESS)); Wire.write(data, sizeof(data)); diff --git a/Marlin/src/feature/leds/pca9632.h b/Marlin/src/feature/leds/pca9632.h index fb59a8c18479..adef0200afb9 100644 --- a/Marlin/src/feature/leds/pca9632.h +++ b/Marlin/src/feature/leds/pca9632.h @@ -33,5 +33,5 @@ void PCA9632_set_led_color(const LEDColor &color); #if ENABLED(PCA9632_BUZZER) #include - void PCA9632_buzz(const long, const uint16_t); + void PCA9632_buzz(const long, const uint16_t=0); #endif diff --git a/Marlin/src/feature/leds/printer_event_leds.h b/Marlin/src/feature/leds/printer_event_leds.h index 2a4342e8f55c..3a037eba96e5 100644 --- a/Marlin/src/feature/leds/printer_event_leds.h +++ b/Marlin/src/feature/leds/printer_event_leds.h @@ -59,7 +59,7 @@ class PrinterEventLEDs { static void onPidTuningDone(LEDColor c) { leds.set_color(c); } #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA static void onPrintCompleted() { leds.set_green(); @@ -80,7 +80,7 @@ class PrinterEventLEDs { #endif } - #endif // SDSUPPORT + #endif // HAS_MEDIA }; extern PrinterEventLEDs printerEventLEDs; diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index 35d1fd79f9d6..504a9f61c78a 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -91,7 +91,7 @@ static xyze_pos_t resume_position; fil_change_settings_t fc_settings[EXTRUDERS]; -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../sd/cardreader.h" #endif @@ -420,7 +420,7 @@ bool pause_print(const_float_t retract, const xyz_pos_t &park_point, const bool ++did_pause_print; // Pause the print job and timer - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA const bool was_sd_printing = IS_SD_PRINTING(); if (was_sd_printing) { card.pauseSDPrint(); @@ -445,7 +445,7 @@ bool pause_print(const_float_t retract, const xyz_pos_t &park_point, const bool // Wait for buffered blocks to complete planner.synchronize(); - #if ENABLED(ADVANCED_PAUSE_FANS_PAUSE) && HAS_FAN + #if BOTH(ADVANCED_PAUSE_FANS_PAUSE, HAS_FAN) thermalManager.set_fans_paused(true); #endif @@ -701,7 +701,7 @@ void resume_print(const_float_t slow_load_length/*=0*/, const_float_t fast_load_ // Resume the print job timer if it was running if (print_job_timer.isPaused()) print_job_timer.start(); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (did_pause_print) { --did_pause_print; card.startOrResumeFilePrinting(); diff --git a/Marlin/src/feature/power_monitor.h b/Marlin/src/feature/power_monitor.h index fa0690905333..89e92fb773fe 100644 --- a/Marlin/src/feature/power_monitor.h +++ b/Marlin/src/feature/power_monitor.h @@ -119,7 +119,7 @@ class PowerMonitor { volts.reset(); #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA display_item_ms = 0; display_item = 0; #endif diff --git a/Marlin/src/feature/runout.h b/Marlin/src/feature/runout.h index e839db3f5edf..fb4d0c269479 100644 --- a/Marlin/src/feature/runout.h +++ b/Marlin/src/feature/runout.h @@ -191,13 +191,13 @@ class FilamentSensorBase { public: static void setup() { #define _INIT_RUNOUT_PIN(P,S,U,D) do{ if (ENABLED(U)) SET_INPUT_PULLUP(P); else if (ENABLED(D)) SET_INPUT_PULLDOWN(P); else SET_INPUT(P); }while(0); - #define INIT_RUNOUT_PIN(N) _INIT_RUNOUT_PIN(FIL_RUNOUT##N##_PIN, FIL_RUNOUT##N##_STATE, FIL_RUNOUT##N##_PULLUP, FIL_RUNOUT##N##_PULLDOWN) - REPEAT_1(NUM_RUNOUT_SENSORS, INIT_RUNOUT_PIN); + #define INIT_RUNOUT_PIN(N) _INIT_RUNOUT_PIN(FIL_RUNOUT##N##_PIN, FIL_RUNOUT##N##_STATE, FIL_RUNOUT##N##_PULLUP, FIL_RUNOUT##N##_PULLDOWN); + REPEAT_1(NUM_RUNOUT_SENSORS, INIT_RUNOUT_PIN) #undef INIT_RUNOUT_PIN #if ENABLED(FILAMENT_SWITCH_AND_MOTION) - #define INIT_MOTION_PIN(N) _INIT_RUNOUT_PIN(FIL_MOTION##N##_PIN, FIL_MOTION##N##_STATE, FIL_MOTION##N##_PULLUP, FIL_MOTION##N##_PULLDOWN) - REPEAT_1(NUM_MOTION_SENSORS, INIT_MOTION_PIN); + #define INIT_MOTION_PIN(N) _INIT_RUNOUT_PIN(FIL_MOTION##N##_PIN, FIL_MOTION##N##_STATE, FIL_MOTION##N##_PULLUP, FIL_MOTION##N##_PULLDOWN); + REPEAT_1(NUM_MOTION_SENSORS, INIT_MOTION_PIN) #undef INIT_MOTION_PIN #endif #undef _INIT_RUNOUT_PIN @@ -212,9 +212,9 @@ class FilamentSensorBase { // Return a bitmask of runout flag states (1 bits always indicates runout) static uint8_t poll_runout_states() { - #define _OR_RUNOUT(N) | (FIL_RUNOUT##N##_STATE ? 0 : _BV(N - 1)) - return poll_runout_pins() ^ uint8_t(0 REPEAT_1(NUM_RUNOUT_SENSORS, _OR_RUNOUT)); - #undef _OR_RUNOUT + #define _INVERT_BIT(N) | (FIL_RUNOUT##N##_STATE ? 0 : _BV(N - 1)) + return poll_runout_pins() ^ uint8_t(0 REPEAT_1(NUM_RUNOUT_SENSORS, _INVERT_BIT)); + #undef _INVERT_BIT } #if ENABLED(FILAMENT_SWITCH_AND_MOTION) diff --git a/Marlin/src/gcode/bedlevel/G35.cpp b/Marlin/src/gcode/bedlevel/G35.cpp index 27c57cf62ebc..f5f395ee2e25 100644 --- a/Marlin/src/gcode/bedlevel/G35.cpp +++ b/Marlin/src/gcode/bedlevel/G35.cpp @@ -98,7 +98,7 @@ void GcodeSuite::G35() { // Probe all positions LOOP_L_N(i, G35_PROBE_COUNT) { - const float z_probed_height = probe.probe_at_point(tramming_points[i], PROBE_PT_RAISE, 0, true); + const float z_probed_height = probe.probe_at_point(tramming_points[i], PROBE_PT_RAISE); if (isnan(z_probed_height)) { SERIAL_ECHOPGM("G35 failed at point ", i + 1, " ("); SERIAL_ECHOPGM_P((char *)pgm_read_ptr(&tramming_point_name[i])); diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 782761ee14b1..ed2cda29326e 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -356,6 +356,8 @@ void GcodeSuite::G28() { endstops.enable(true); // Enable endstops for next homing move + bool finalRaiseZ = false; + #if ENABLED(DELTA) constexpr bool doZ = true; // for NANODLP_Z_SYNC if your DLP is on a DELTA @@ -407,8 +409,9 @@ void GcodeSuite::G28() { UNUSED(needZ); UNUSED(homeZZ); - // Z may home first, e.g., when homing away from the bed - TERN_(HOME_Z_FIRST, if (doZ) homeaxis(Z_AXIS)); + // Z may home first, e.g., when homing away from the bed. + // This is also permitted when homing with a Z endstop. + if (TERN0(HOME_Z_FIRST, doZ)) homeaxis(Z_AXIS); // 'R' to specify a specific raise. 'R0' indicates no raise, e.g., for recovery.resume // When 'R0' is used, there should already be adequate clearance, e.g., from homing Z to max. @@ -517,7 +520,10 @@ void GcodeSuite::G28() { #else homeaxis(Z_AXIS); #endif - do_move_after_z_homing(); + + #if EITHER(Z_HOME_TO_MIN, ALLOW_Z_AFTER_HOMING) + finalRaiseZ = true; + #endif } #endif @@ -575,18 +581,6 @@ void GcodeSuite::G28() { // Clear endstop state for polled stallGuard endstops TERN_(SPI_ENDSTOPS, endstops.clear_endstop_state()); - // Move to a height where we can use the full xy-area - TERN_(DELTA_HOME_TO_SAFE_ZONE, do_blocking_move_to_z(delta_clip_start_height)); - - TERN_(CAN_SET_LEVELING_AFTER_G28, if (leveling_restore_state) set_bed_leveling_enabled()); - - restore_feedrate_and_scaling(); - - // Restore the active tool after homing - #if HAS_MULTI_HOTEND && (DISABLED(DELTA) || ENABLED(DELTA_HOME_TO_SAFE_ZONE)) - tool_change(old_tool_index, TERN(PARKING_EXTRUDER, !pe_final_change_must_unpark, DISABLED(DUAL_X_CARRIAGE))); // Do move if one of these - #endif - #if HAS_HOMING_CURRENT if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Restore driver current..."); #if HAS_CURRENT_HOME(X) @@ -627,6 +621,23 @@ void GcodeSuite::G28() { #endif #endif // HAS_HOMING_CURRENT + // Move to a height where we can use the full xy-area + TERN_(DELTA_HOME_TO_SAFE_ZONE, do_blocking_move_to_z(delta_clip_start_height)); + + // Move to the configured Z only if Z was homed to MIN, because machines that + // home to MAX historically expect 'G28 Z' to be safe to use at the end of a + // print, and do_move_after_z_homing is not very nuanced. + if (finalRaiseZ) do_move_after_z_homing(); + + TERN_(CAN_SET_LEVELING_AFTER_G28, if (leveling_restore_state) set_bed_leveling_enabled()); + + // Restore the active tool after homing + #if HAS_MULTI_HOTEND && (DISABLED(DELTA) || ENABLED(DELTA_HOME_TO_SAFE_ZONE)) + tool_change(old_tool_index, TERN(PARKING_EXTRUDER, !pe_final_change_must_unpark, DISABLED(DUAL_X_CARRIAGE))); // Do move if one of these + #endif + + restore_feedrate_and_scaling(); + ui.refresh(); TERN_(HAS_DWIN_E3V2_BASIC, DWIN_HomingDone()); diff --git a/Marlin/src/gcode/calibrate/G33.cpp b/Marlin/src/gcode/calibrate/G33.cpp index 61320c057667..08734073d665 100644 --- a/Marlin/src/gcode/calibrate/G33.cpp +++ b/Marlin/src/gcode/calibrate/G33.cpp @@ -170,7 +170,7 @@ static float std_dev_points(float z_pt[NPP + 1], const bool _0p_cal, const bool */ static float calibration_probe(const xy_pos_t &xy, const bool stow, const bool probe_at_offset) { #if HAS_BED_PROBE - return probe.probe_at_point(xy, stow ? PROBE_PT_STOW : PROBE_PT_RAISE, 0, probe_at_offset, false); + return probe.probe_at_point(xy, stow ? PROBE_PT_STOW : PROBE_PT_RAISE, 0, probe_at_offset, false, Z_PROBE_LOW_POINT, Z_TWEEN_SAFE_CLEARANCE, true); #else UNUSED(stow); return lcd_probe_pt(xy); diff --git a/Marlin/src/gcode/calibrate/G34_M422.cpp b/Marlin/src/gcode/calibrate/G34_M422.cpp index db6ef874d94b..3e7ed08b6c1e 100644 --- a/Marlin/src/gcode/calibrate/G34_M422.cpp +++ b/Marlin/src/gcode/calibrate/G34_M422.cpp @@ -153,7 +153,8 @@ void GcodeSuite::G34() { const xy_pos_t diff = z_stepper_align.xy[i] - z_stepper_align.xy[j]; return HYPOT2(diff.x, diff.y); }; - float z_probe = (Z_PROBE_SAFE_CLEARANCE) + (G34_MAX_GRADE) * 0.01f * SQRT(_MAX(0, magnitude2(0, 1) + const float zoffs = (probe.offset.z < 0) ? -probe.offset.z : 0.0f; + float z_probe = (Z_TWEEN_SAFE_CLEARANCE + zoffs) + (G34_MAX_GRADE) * 0.01f * SQRT(_MAX(0, magnitude2(0, 1) #if TRIPLE_Z , magnitude2(2, 1), magnitude2(2, 0) #if QUAD_Z @@ -165,12 +166,6 @@ void GcodeSuite::G34() { // Home before the alignment procedure home_if_needed(); - // Move the Z coordinate realm towards the positive - dirty trick - current_position.z += z_probe * 0.5f; - sync_plan_position(); - // Now, the Z origin lies below the build plate. That allows to probe deeper, before run_z_probe throws an error. - // This hack is un-done at the end of G34 - either by re-homing, or by using the probed heights of the last iteration. - #if !HAS_Z_STEPPER_ALIGN_STEPPER_XY float last_z_align_move[NUM_Z_STEPPERS] = ARRAY_N_1(NUM_Z_STEPPERS, 10000.0f); #else @@ -213,20 +208,16 @@ void GcodeSuite::G34() { // iteration odd/even --> downward / upward stepper sequence const uint8_t iprobe = (iteration & 1) ? NUM_Z_STEPPERS - 1 - i : i; - // Safe clearance even on an incline - if ((iteration == 0 || i > 0) && z_probe > current_position.z) do_blocking_move_to_z(z_probe); - xy_pos_t &ppos = z_stepper_align.xy[iprobe]; - if (DEBUGGING(LEVELING)) - DEBUG_ECHOLNPGM_P(PSTR("Probing X"), ppos.x, SP_Y_STR, ppos.y); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM_P(PSTR("Probing X"), ppos.x, SP_Y_STR, ppos.y); // Probe a Z height for each stepper. // Probing sanity check is disabled, as it would trigger even in normal cases because // current_position.z has been manually altered in the "dirty trick" above. - const float z_probed_height = probe.probe_at_point(DIFF_TERN(HAS_HOME_OFFSET, ppos, xy_pos_t(home_offset)), raise_after, 0, true, false); + const float z_probed_height = probe.probe_at_point(DIFF_TERN(HAS_HOME_OFFSET, ppos, xy_pos_t(home_offset)), raise_after, 0, true, false, (Z_PROBE_LOW_POINT) - z_probe * 0.5f, z_probe * 0.5f); if (isnan(z_probed_height)) { - SERIAL_ECHOLNPGM("Probing failed"); + SERIAL_ECHOLNPGM(STR_ERR_PROBING_FAILED); LCD_MESSAGE(MSG_LCD_PROBING_FAILED); err_break = true; break; @@ -234,7 +225,7 @@ void GcodeSuite::G34() { // Add height to each value, to provide a more useful target height for // the next iteration of probing. This allows adjustments to be made away from the bed. - z_measured[iprobe] = z_probed_height + (Z_CLEARANCE_BETWEEN_PROBES); + z_measured[iprobe] = z_probed_height + (Z_TWEEN_SAFE_CLEARANCE + zoffs); //do we need to add the clearance to this? if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> Z", iprobe + 1, " measured position is ", z_measured[iprobe]); @@ -248,7 +239,7 @@ void GcodeSuite::G34() { // Adapt the next probe clearance height based on the new measurements. // Safe_height = lowest distance to bed (= highest measurement) plus highest measured misalignment. z_maxdiff = z_measured_max - z_measured_min; - z_probe = (Z_PROBE_SAFE_CLEARANCE) + z_measured_max + z_maxdiff; + z_probe = (Z_TWEEN_SAFE_CLEARANCE + zoffs) + z_measured_max + z_maxdiff; //Not sure we need z_maxdiff, but leaving it in for safety. #if HAS_Z_STEPPER_ALIGN_STEPPER_XY // Replace the initial values in z_measured with calculated heights at @@ -428,15 +419,13 @@ void GcodeSuite::G34() { IF_DISABLED(TOUCH_MI_PROBE, probe.stow()); #if ENABLED(HOME_AFTER_G34) - // After this operation the z position needs correction - set_axis_never_homed(Z_AXIS); // Home Z after the alignment procedure process_subcommands_now(F("G28Z")); #else // Use the probed height from the last iteration to determine the Z height. // z_measured_min is used, because all steppers are aligned to z_measured_min. // Ideally, this would be equal to the 'z_probe * 0.5f' which was added earlier. - current_position.z -= z_measured_min - float(Z_CLEARANCE_BETWEEN_PROBES); + current_position.z -= z_measured_min - (Z_TWEEN_SAFE_CLEARANCE + zoffs); //we shouldn't want to subtract the clearance from here right? (Depends if we added it further up) sync_plan_position(); #endif diff --git a/Marlin/src/gcode/calibrate/G425.cpp b/Marlin/src/gcode/calibrate/G425.cpp index a22608f5b42b..e3f8913125ff 100644 --- a/Marlin/src/gcode/calibrate/G425.cpp +++ b/Marlin/src/gcode/calibrate/G425.cpp @@ -271,10 +271,10 @@ inline void probe_side(measurements_t &m, const float uncertainty, const side_t #if AXIS_CAN_CALIBRATE(X) _ACASE(X, RIGHT, LEFT); #endif - #if HAS_Y_AXIS && AXIS_CAN_CALIBRATE(Y) + #if AXIS_CAN_CALIBRATE(Y) _ACASE(Y, BACK, FRONT); #endif - #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z) + #if AXIS_CAN_CALIBRATE(Z) case TOP: { const float measurement = measure(Z_AXIS, -1, true, &m.backlash[TOP], uncertainty); m.obj_center.z = measurement - dimensions.z / 2; @@ -282,22 +282,22 @@ inline void probe_side(measurements_t &m, const float uncertainty, const side_t return; } #endif - #if HAS_I_AXIS && AXIS_CAN_CALIBRATE(I) + #if AXIS_CAN_CALIBRATE(I) _PCASE(I); #endif - #if HAS_J_AXIS && AXIS_CAN_CALIBRATE(J) + #if AXIS_CAN_CALIBRATE(J) _PCASE(J); #endif - #if HAS_K_AXIS && AXIS_CAN_CALIBRATE(K) + #if AXIS_CAN_CALIBRATE(K) _PCASE(K); #endif - #if HAS_U_AXIS && AXIS_CAN_CALIBRATE(U) + #if AXIS_CAN_CALIBRATE(U) _PCASE(U); #endif - #if HAS_V_AXIS && AXIS_CAN_CALIBRATE(V) + #if AXIS_CAN_CALIBRATE(V) _PCASE(V); #endif - #if HAS_W_AXIS && AXIS_CAN_CALIBRATE(W) + #if AXIS_CAN_CALIBRATE(W) _PCASE(W); #endif default: return; @@ -395,7 +395,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { #if ENABLED(CALIBRATION_REPORTING) inline void report_measured_faces(const measurements_t &m) { SERIAL_ECHOLNPGM("Sides:"); - #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z) + #if AXIS_CAN_CALIBRATE(Z) SERIAL_ECHOLNPGM(" Top: ", m.obj_side[TOP]); #endif #if ENABLED(CALIBRATION_MEASURE_LEFT) @@ -503,7 +503,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { SERIAL_ECHOLNPGM(" Right: ", m.backlash[RIGHT]); #endif #endif - #if HAS_Y_AXIS && AXIS_CAN_CALIBRATE(Y) + #if AXIS_CAN_CALIBRATE(Y) #if ENABLED(CALIBRATION_MEASURE_FRONT) SERIAL_ECHOLNPGM(" Front: ", m.backlash[FRONT]); #endif @@ -511,10 +511,10 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { SERIAL_ECHOLNPGM(" Back: ", m.backlash[BACK]); #endif #endif - #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z) + #if AXIS_CAN_CALIBRATE(Z) SERIAL_ECHOLNPGM(" Top: ", m.backlash[TOP]); #endif - #if HAS_I_AXIS && AXIS_CAN_CALIBRATE(I) + #if AXIS_CAN_CALIBRATE(I) #if ENABLED(CALIBRATION_MEASURE_IMIN) SERIAL_ECHOLNPGM(" " STR_I_MIN ": ", m.backlash[IMINIMUM]); #endif @@ -522,7 +522,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { SERIAL_ECHOLNPGM(" " STR_I_MAX ": ", m.backlash[IMAXIMUM]); #endif #endif - #if HAS_J_AXIS && AXIS_CAN_CALIBRATE(J) + #if AXIS_CAN_CALIBRATE(J) #if ENABLED(CALIBRATION_MEASURE_JMIN) SERIAL_ECHOLNPGM(" " STR_J_MIN ": ", m.backlash[JMINIMUM]); #endif @@ -530,7 +530,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { SERIAL_ECHOLNPGM(" " STR_J_MAX ": ", m.backlash[JMAXIMUM]); #endif #endif - #if HAS_K_AXIS && AXIS_CAN_CALIBRATE(K) + #if AXIS_CAN_CALIBRATE(K) #if ENABLED(CALIBRATION_MEASURE_KMIN) SERIAL_ECHOLNPGM(" " STR_K_MIN ": ", m.backlash[KMINIMUM]); #endif @@ -538,7 +538,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { SERIAL_ECHOLNPGM(" " STR_K_MAX ": ", m.backlash[KMAXIMUM]); #endif #endif - #if HAS_U_AXIS && AXIS_CAN_CALIBRATE(U) + #if AXIS_CAN_CALIBRATE(U) #if ENABLED(CALIBRATION_MEASURE_UMIN) SERIAL_ECHOLNPGM(" " STR_U_MIN ": ", m.backlash[UMINIMUM]); #endif @@ -546,7 +546,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { SERIAL_ECHOLNPGM(" " STR_U_MAX ": ", m.backlash[UMAXIMUM]); #endif #endif - #if HAS_V_AXIS && AXIS_CAN_CALIBRATE(V) + #if AXIS_CAN_CALIBRATE(V) #if ENABLED(CALIBRATION_MEASURE_VMIN) SERIAL_ECHOLNPGM(" " STR_V_MIN ": ", m.backlash[VMINIMUM]); #endif @@ -554,7 +554,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { SERIAL_ECHOLNPGM(" " STR_V_MAX ": ", m.backlash[VMAXIMUM]); #endif #endif - #if HAS_W_AXIS && AXIS_CAN_CALIBRATE(W) + #if AXIS_CAN_CALIBRATE(W) #if ENABLED(CALIBRATION_MEASURE_WMIN) SERIAL_ECHOLNPGM(" " STR_W_MIN ": ", m.backlash[WMINIMUM]); #endif @@ -575,7 +575,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { #if HAS_Y_CENTER && AXIS_CAN_CALIBRATE(Y) SERIAL_ECHOLNPGM_P(SP_Y_STR, m.pos_error.y); #endif - #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z) + #if AXIS_CAN_CALIBRATE(Z) SERIAL_ECHOLNPGM_P(SP_Z_STR, m.pos_error.z); #endif #if HAS_I_CENTER && AXIS_CAN_CALIBRATE(I) diff --git a/Marlin/src/gcode/calibrate/M425.cpp b/Marlin/src/gcode/calibrate/M425.cpp index a6c6ff9dae3e..0432b4c96275 100644 --- a/Marlin/src/gcode/calibrate/M425.cpp +++ b/Marlin/src/gcode/calibrate/M425.cpp @@ -46,12 +46,13 @@ void GcodeSuite::M425() { bool noArgs = true; - auto axis_can_calibrate = [](const uint8_t a) { - #define _CAN_CASE(N) case N##_AXIS: return AXIS_CAN_CALIBRATE(N); + auto axis_can_calibrate = [](const uint8_t a) -> bool { + #define _CAN_CASE(N) case N##_AXIS: return bool(AXIS_CAN_CALIBRATE(N)); switch (a) { - default: return false; MAIN_AXIS_MAP(_CAN_CASE) + default: break; } + return false; }; LOOP_NUM_AXES(a) { diff --git a/Marlin/src/gcode/calibrate/M48.cpp b/Marlin/src/gcode/calibrate/M48.cpp index 5e0c21b42e46..701e9386979a 100644 --- a/Marlin/src/gcode/calibrate/M48.cpp +++ b/Marlin/src/gcode/calibrate/M48.cpp @@ -223,7 +223,7 @@ void GcodeSuite::M48() { } // n_legs // Probe a single point - const float pz = probe.probe_at_point(test_position, raise_after, 0); + const float pz = probe.probe_at_point(test_position, raise_after); // Break the loop if the probe fails probing_good = !isnan(pz); diff --git a/Marlin/src/gcode/calibrate/M666.cpp b/Marlin/src/gcode/calibrate/M666.cpp index 90fad1811c8c..546aa7fcb54a 100644 --- a/Marlin/src/gcode/calibrate/M666.cpp +++ b/Marlin/src/gcode/calibrate/M666.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if ENABLED(DELTA) || HAS_EXTRA_ENDSTOPS +#if EITHER(DELTA, HAS_EXTRA_ENDSTOPS) #include "../gcode.h" diff --git a/Marlin/src/gcode/control/M993_M994.cpp b/Marlin/src/gcode/control/M993_M994.cpp index 598a73fab756..bc634ae13c0d 100644 --- a/Marlin/src/gcode/control/M993_M994.cpp +++ b/Marlin/src/gcode/control/M993_M994.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if ALL(SPI_FLASH, SDSUPPORT, MARLIN_DEV_MODE) +#if SPI_FLASH_BACKUP #include "../gcode.h" #include "../../sd/cardreader.h" @@ -85,4 +85,4 @@ void GcodeSuite::M994() { card.closefile(); } -#endif // SPI_FLASH && SDSUPPORT && MARLIN_DEV_MODE +#endif // SPI_FLASH_BACKUP diff --git a/Marlin/src/gcode/feature/clean/G12.cpp b/Marlin/src/gcode/feature/clean/G12.cpp index 0113170f1d9c..a5e312f8fdfe 100644 --- a/Marlin/src/gcode/feature/clean/G12.cpp +++ b/Marlin/src/gcode/feature/clean/G12.cpp @@ -57,10 +57,16 @@ void GcodeSuite::G12() { } #endif - const uint8_t pattern = parser.ushortval('P', 0), - strokes = parser.ushortval('S', NOZZLE_CLEAN_STROKES), - objects = parser.ushortval('T', NOZZLE_CLEAN_TRIANGLES); - const float radius = parser.linearval('R', NOZZLE_CLEAN_CIRCLE_RADIUS); + const uint8_t pattern = ( + #if COUNT_ENABLED(NOZZLE_CLEAN_PATTERN_LINE, NOZZLE_CLEAN_PATTERN_ZIGZAG, NOZZLE_CLEAN_PATTERN_CIRCLE) > 1 + parser.ushortval('P', NOZZLE_CLEAN_DEFAULT_PATTERN) + #else + NOZZLE_CLEAN_DEFAULT_PATTERN + #endif + ); + const uint8_t strokes = parser.ushortval('S', NOZZLE_CLEAN_STROKES), + objects = TERN0(NOZZLE_CLEAN_PATTERN_ZIGZAG, parser.ushortval('T', NOZZLE_CLEAN_TRIANGLES)); + const float radius = TERN0(NOZZLE_CLEAN_PATTERN_CIRCLE, parser.linearval('R', NOZZLE_CLEAN_CIRCLE_RADIUS)); const bool seenxyz = parser.seen("XYZ"); const uint8_t cleans = (!seenxyz || parser.boolval('X') ? _BV(X_AXIS) : 0) diff --git a/Marlin/src/gcode/feature/pause/M125.cpp b/Marlin/src/gcode/feature/pause/M125.cpp index 9b18eda4fbae..d6e6cb93150a 100644 --- a/Marlin/src/gcode/feature/pause/M125.cpp +++ b/Marlin/src/gcode/feature/pause/M125.cpp @@ -88,7 +88,7 @@ void GcodeSuite::M125() { park_point += hotend_offset[active_extruder]; #endif - const bool sd_printing = TERN0(SDSUPPORT, IS_SD_PRINTING()); + const bool sd_printing = TERN0(HAS_MEDIA, IS_SD_PRINTING()); ui.pause_show_message(PAUSE_MESSAGE_PARKING, PAUSE_MODE_PAUSE_PRINT); diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 0711d39204f2..9c24791c820e 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -519,7 +519,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { case 17: M17(); break; // M17: Enable all stepper motors - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA case 20: M20(); break; // M20: List SD card case 21: M21(); break; // M21: Init SD card case 22: M22(); break; // M22: Release SD card @@ -545,7 +545,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { #endif case 928: M928(); break; // M928: Start SD write - #endif // SDSUPPORT + #endif // HAS_MEDIA case 31: M31(); break; // M31: Report time since the start of SD print or last M109 @@ -581,7 +581,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { case 102: M102(); break; // M102: Configure Bed Distance Sensor #endif - #if HAS_EXTRUDERS + #if HAS_HOTEND case 104: M104(); break; // M104: Set hot end temperature case 109: M109(); break; // M109: Wait for hotend temperature to reach target #endif @@ -919,7 +919,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { #endif #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA case 524: M524(); break; // M524: Abort the current SD print job #endif @@ -954,7 +954,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { case 665: M665(); break; // M665: Set Kinematics parameters #endif - #if ENABLED(DELTA) || HAS_EXTRA_ENDSTOPS + #if EITHER(DELTA, HAS_EXTRA_ENDSTOPS) case 666: M666(); break; // M666: Set delta or multiple endstop adjustment #endif @@ -1061,7 +1061,11 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { case 422: M422(); break; // M422: Set Z Stepper automatic alignment position using probe #endif - #if ALL(SPI_FLASH, SDSUPPORT, MARLIN_DEV_MODE) + #if ENABLED(OTA_FIRMWARE_UPDATE) + case 936: M936(); break; // M936: OTA update firmware. + #endif + + #if SPI_FLASH_BACKUP case 993: M993(); break; // M993: Backup SPI Flash to SD case 994: M994(); break; // M994: Load a Backup from SD to SPI Flash #endif @@ -1081,7 +1085,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { case 1000: M1000(); break; // M1000: [INTERNAL] Resume from power-loss #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA case 1001: M1001(); break; // M1001: [INTERNAL] Handle SD completion #endif diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 8493d7f2911d..75a60b4dd7c3 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -300,6 +300,7 @@ * M913 - Set HYBRID_THRESHOLD speed. (Requires HYBRID_THRESHOLD) * M914 - Set StallGuard sensitivity. (Requires SENSORLESS_HOMING or SENSORLESS_PROBING) * M919 - Get or Set motor Chopper Times (time_off, hysteresis_end, hysteresis_start) using axis codes XYZE, etc. If no parameters are given, report. (Requires at least one _DRIVER_TYPE defined as TMC2130/2160/5130/5160/2208/2209/2660) + * M936 - OTA update firmware. (Requires OTA_FIRMWARE_UPDATE) * M951 - Set Magnetic Parking Extruder parameters. (Requires MAGNETIC_PARKING_EXTRUDER) * M3426 - Read MCP3426 ADC over I2C. (Requires HAS_MCP3426_ADC) * M7219 - Control Max7219 Matrix LEDs. (Requires MAX7219_GCODE) @@ -642,7 +643,7 @@ class GcodeSuite { static void M18_M84(); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA static void M20(); static void M21(); static void M22(); @@ -658,7 +659,7 @@ class GcodeSuite { static void M31(); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA #if HAS_MEDIA_SUBCALLS static void M32(); #endif @@ -716,7 +717,7 @@ class GcodeSuite { static void M102_report(const bool forReplay=true); #endif - #if HAS_EXTRUDERS + #if HAS_HOTEND static void M104_M109(const bool isM109); FORCE_INLINE static void M104() { M104_M109(false); } FORCE_INLINE static void M109() { M104_M109(true); } @@ -1062,7 +1063,7 @@ class GcodeSuite { #endif #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA static void M524(); #endif @@ -1195,10 +1196,14 @@ class GcodeSuite { static void M910(); #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA static void M928(); #endif + #if ENABLED(OTA_FIRMWARE_UPDATE) + static void M936(); + #endif + #if ENABLED(MAGNETIC_PARKING_EXTRUDER) static void M951(); #endif @@ -1207,7 +1212,7 @@ class GcodeSuite { static void M995(); #endif - #if BOTH(SPI_FLASH, SDSUPPORT) + #if SPI_FLASH_BACKUP static void M993(); static void M994(); #endif @@ -1229,7 +1234,7 @@ class GcodeSuite { static void M423_report(const bool forReplay=true); #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA static void M1001(); #endif diff --git a/Marlin/src/gcode/gcode_d.cpp b/Marlin/src/gcode/gcode_d.cpp index be431eed0d78..28edf9dcdb1e 100644 --- a/Marlin/src/gcode/gcode_d.cpp +++ b/Marlin/src/gcode/gcode_d.cpp @@ -199,7 +199,7 @@ void GcodeSuite::D(const int16_t dcode) { SERIAL_ECHOLNPGM("FAILURE: Watchdog did not trigger board reset."); } break; - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA case 101: { // D101 Test SD Write card.openFileWrite("test.gco"); @@ -250,7 +250,7 @@ void GcodeSuite::D(const int16_t dcode) { card.closefile(); } break; - #endif // SDSUPPORT + #endif // HAS_MEDIA #if ENABLED(POSTMORTEM_DEBUGGING) diff --git a/Marlin/src/gcode/host/M115.cpp b/Marlin/src/gcode/host/M115.cpp index d28d53eeddba..239407816b93 100644 --- a/Marlin/src/gcode/host/M115.cpp +++ b/Marlin/src/gcode/host/M115.cpp @@ -39,22 +39,15 @@ //#define MINIMAL_CAP_LINES // Don't even mention the disabled capabilities #if ENABLED(EXTENDED_CAPABILITIES_REPORT) - #if ENABLED(MINIMAL_CAP_LINES) - #define cap_line(S,C) if (C) _cap_line(S) - static void _cap_line(FSTR_P const name) { - SERIAL_ECHOPGM("Cap:"); - SERIAL_ECHOF(name); - SERIAL_ECHOLNPGM(":1"); - } - #else - #define cap_line(V...) _cap_line(V) - static void _cap_line(FSTR_P const name, bool ena=false) { - SERIAL_ECHOPGM("Cap:"); - SERIAL_ECHOF(name); + inline void cap_line(FSTR_P const name, const bool ena=true) { + #if ENABLED(MINIMAL_CAP_LINES) + if (ena) SERIAL_ECHOLNPGM("Cap:", name, ":1"); + #else + SERIAL_ECHOPGM("Cap:", name); SERIAL_CHAR(':', '0' + ena); SERIAL_EOL(); - } - #endif + #endif + } #endif /** @@ -100,10 +93,10 @@ void GcodeSuite::M115() { serial_index_t port = queue.ring_buffer.command_port(); // PAREN_COMMENTS - TERN_(PAREN_COMMENTS, cap_line(F("PAREN_COMMENTS"), true)); + TERN_(PAREN_COMMENTS, cap_line(F("PAREN_COMMENTS"))); // QUOTED_STRINGS - TERN_(GCODE_QUOTED_STRINGS, cap_line(F("QUOTED_STRINGS"), true)); + TERN_(GCODE_QUOTED_STRINGS, cap_line(F("QUOTED_STRINGS"))); // SERIAL_XON_XOFF cap_line(F("SERIAL_XON_XOFF"), ENABLED(SERIAL_XON_XOFF)); @@ -124,10 +117,10 @@ void GcodeSuite::M115() { cap_line(F("AUTOREPORT_TEMP"), ENABLED(AUTO_REPORT_TEMPERATURES)); // PROGRESS (M530 S L, M531 , M532 X L) - cap_line(F("PROGRESS")); + cap_line(F("PROGRESS"), false); // Print Job timer M75, M76, M77 - cap_line(F("PRINT_JOB"), true); + cap_line(F("PRINT_JOB")); // AUTOLEVEL (G29) cap_line(F("AUTOLEVEL"), ENABLED(HAS_AUTOLEVEL)); @@ -153,9 +146,9 @@ void GcodeSuite::M115() { // SPINDLE AND LASER CONTROL (M3, M4, M5) #if ENABLED(SPINDLE_FEATURE) - cap_line(F("SPINDLE"), true); + cap_line(F("SPINDLE")); #elif ENABLED(LASER_FEATURE) - cap_line(F("LASER"), true); + cap_line(F("LASER")); #endif // EMERGENCY_PARSER (M108, M112, M410, M876) @@ -168,10 +161,10 @@ void GcodeSuite::M115() { cap_line(F("PROMPT_SUPPORT"), ENABLED(HOST_PROMPT_SUPPORT)); // SDCARD (M20, M23, M24, etc.) - cap_line(F("SDCARD"), ENABLED(SDSUPPORT)); + cap_line(F("SDCARD"), ENABLED(HAS_MEDIA)); // MULTI_VOLUME (M21 S/M21 U) - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA cap_line(F("MULTI_VOLUME"), ENABLED(MULTI_VOLUME)); #endif @@ -179,7 +172,7 @@ void GcodeSuite::M115() { cap_line(F("REPEAT"), ENABLED(GCODE_REPEAT_MARKERS)); // SD_WRITE (M928, M28, M29) - cap_line(F("SD_WRITE"), ENABLED(SDSUPPORT) && DISABLED(SDCARD_READONLY)); + cap_line(F("SD_WRITE"), ENABLED(HAS_MEDIA) && DISABLED(SDCARD_READONLY)); // AUTOREPORT_SD_STATUS (M27 extension) cap_line(F("AUTOREPORT_SD_STATUS"), ENABLED(AUTO_REPORT_SD_STATUS)); @@ -223,9 +216,9 @@ void GcodeSuite::M115() { // Machine Geometry #if ENABLED(M115_GEOMETRY_REPORT) constexpr xyz_pos_t bmin{0}, - bmax = ARRAY_N(NUM_AXES, X_BED_SIZE, Y_BED_SIZE, Z_MAX_POS, I_MAX_POS, J_MAX_POS, K_MAX_POS, U_MAX_POS, V_MAX_POS, W_MAX_POS), - dmin = ARRAY_N(NUM_AXES, X_MIN_POS, Y_MIN_POS, Z_MIN_POS, I_MIN_POS, J_MIN_POS, K_MIN_POS, U_MIN_POS, V_MIN_POS, W_MIN_POS), - dmax = ARRAY_N(NUM_AXES, X_MAX_POS, Y_MAX_POS, Z_MAX_POS, I_MAX_POS, J_MAX_POS, K_MAX_POS, U_MAX_POS, V_MAX_POS, W_MAX_POS); + bmax = NUM_AXIS_ARRAY(X_BED_SIZE, Y_BED_SIZE, Z_MAX_POS, I_MAX_POS, J_MAX_POS, K_MAX_POS, U_MAX_POS, V_MAX_POS, W_MAX_POS), + dmin = NUM_AXIS_ARRAY(X_MIN_POS, Y_MIN_POS, Z_MIN_POS, I_MIN_POS, J_MIN_POS, K_MIN_POS, U_MIN_POS, V_MIN_POS, W_MIN_POS), + dmax = NUM_AXIS_ARRAY(X_MAX_POS, Y_MAX_POS, Z_MAX_POS, I_MAX_POS, J_MAX_POS, K_MAX_POS, U_MAX_POS, V_MAX_POS, W_MAX_POS); xyz_pos_t cmin = bmin, cmax = bmax; apply_motion_limits(cmin); apply_motion_limits(cmax); diff --git a/Marlin/src/gcode/host/M360.cpp b/Marlin/src/gcode/host/M360.cpp index d8e166dad8e0..9649e99e17de 100644 --- a/Marlin/src/gcode/host/M360.cpp +++ b/Marlin/src/gcode/host/M360.cpp @@ -70,7 +70,7 @@ void GcodeSuite::M360() { config_line(F("InputBuffer"), MAX_CMD_SIZE); config_line(F("PrintlineCache"), BUFSIZE); config_line(F("MixingExtruder"), ENABLED(MIXING_EXTRUDER)); - config_line(F("SDCard"), ENABLED(SDSUPPORT)); + config_line(F("SDCard"), ENABLED(HAS_MEDIA)); config_line(F("Fan"), ENABLED(HAS_FAN)); config_line(F("LCD"), ENABLED(HAS_DISPLAY)); config_line(F("SoftwarePowerSwitch"), 1); diff --git a/Marlin/src/gcode/control/M400.cpp b/Marlin/src/gcode/motion/M400.cpp similarity index 100% rename from Marlin/src/gcode/control/M400.cpp rename to Marlin/src/gcode/motion/M400.cpp diff --git a/Marlin/src/gcode/ota/M936.cpp b/Marlin/src/gcode/ota/M936.cpp new file mode 100644 index 000000000000..6324b3db437f --- /dev/null +++ b/Marlin/src/gcode/ota/M936.cpp @@ -0,0 +1,72 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2023 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#include "../../inc/MarlinConfig.h" + +#if ENABLED(OTA_FIRMWARE_UPDATE) + +#include "../gcode.h" +#include "../../libs/BL24CXX.h" + +#if ENABLED(CREALITY_RTS) + #include "../../lcd/rts/lcd_rts.h" +#endif + +#define OTA_FLAG_EEPROM 90 + +//#define DEBUG_OUT 1 +#include "../../core/debug_out.h" + +/** + * M936: Set one of the OTA update flags. + * V2 = Upgrade the motherboard firmware + * V3 = Upgrade the RTS controller firmware + */ +void GcodeSuite::M936() { + static uint8_t ota_update_flag = 0x00; + const int16_t ota = parser.intval('V', -1); + switch (ota) { + case 2: + // Set the OTA board firmware upgrade flag ahead of reboot. + ota_update_flag = 0x01; + DEBUG_ECHOLNPGM("Motherboard upgrade flag set"); + TERN_(CREALITY_RTS, RTS_Error(Error_205)); + break; + + #if ENABLED(CREALITY_RTS) + case 3: + // Set the OTA screen firmware upgrade flag ahead of reboot. + ota_update_flag = 0x02; + DEBUG_ECHOLNPGM("DWIN upgrade flag set"); + TERN_(CREALITY_RTS, RTS_Error(Error_206)); + break; + #endif + } + + switch (ota) { + case 2: TERN_(CREALITY_RTS, case 3:) + BL24CXX::write(OTA_FLAG_EEPROM, &ota_update_flag, sizeof(ota_update_flag)); + safe_delay(100); + hal.reboot(); + } +} + +#endif // OTA_FIRMWARE_UPDATE diff --git a/Marlin/src/gcode/probe/G30.cpp b/Marlin/src/gcode/probe/G30.cpp index 468189bf5acc..8e64ba7cca04 100644 --- a/Marlin/src/gcode/probe/G30.cpp +++ b/Marlin/src/gcode/probe/G30.cpp @@ -77,7 +77,7 @@ void GcodeSuite::G30() { const ProbePtRaise raise_after = parser.boolval('E', true) ? PROBE_PT_STOW : PROBE_PT_NONE; TERN_(HAS_PTC, ptc.set_enabled(!parser.seen('C') || parser.value_bool())); - const float measured_z = probe.probe_at_point(probepos, raise_after, 1); + const float measured_z = probe.probe_at_point(probepos, raise_after); TERN_(HAS_PTC, ptc.set_enabled(true)); if (!isnan(measured_z)) { SERIAL_ECHOLNPGM("Bed X: ", probepos.asLogical().x, " Y: ", probepos.asLogical().y, " Z: ", measured_z); diff --git a/Marlin/src/gcode/queue.cpp b/Marlin/src/gcode/queue.cpp index edf0ddfdbf64..b64aa951129e 100644 --- a/Marlin/src/gcode/queue.cpp +++ b/Marlin/src/gcode/queue.cpp @@ -99,7 +99,7 @@ PGM_P GCodeQueue::injected_commands_P; // = nullptr */ char GCodeQueue::injected_commands[64]; // = { 0 } -void GCodeQueue::RingBuffer::commit_command(bool skip_ok +void GCodeQueue::RingBuffer::commit_command(const bool skip_ok OPTARG(HAS_MULTI_SERIAL, serial_index_t serial_ind/*=-1*/) ) { commands[index_w].skip_ok = skip_ok; @@ -113,7 +113,7 @@ void GCodeQueue::RingBuffer::commit_command(bool skip_ok * Return true if the command was successfully added. * Return false for a full buffer, or if the 'command' is a comment. */ -bool GCodeQueue::RingBuffer::enqueue(const char *cmd, bool skip_ok/*=true*/ +bool GCodeQueue::RingBuffer::enqueue(const char *cmd, const bool skip_ok/*=true*/ OPTARG(HAS_MULTI_SERIAL, serial_index_t serial_ind/*=-1*/) ) { if (*cmd == ';' || length >= BUFSIZE) return false; @@ -512,7 +512,7 @@ void GCodeQueue::get_serial_commands() { serial.last_N = gcode_N; } - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA // Pronterface "M29" and "M29 " has no line number else if (card.flag.saving && !is_M29(command)) { gcode_line_error(F(STR_ERR_NO_CHECKSUM), p); @@ -562,7 +562,7 @@ void GCodeQueue::get_serial_commands() { } // queue has space, serial has data } -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA /** * Get lines from the SD Card until the command buffer is full @@ -615,7 +615,7 @@ void GCodeQueue::get_serial_commands() { } } -#endif // SDSUPPORT +#endif // HAS_MEDIA /** * Add to the circular command queue the next command from: @@ -628,7 +628,7 @@ void GCodeQueue::get_available_commands() { get_serial_commands(); - TERN_(SDSUPPORT, get_sdcard_commands()); + TERN_(HAS_MEDIA, get_sdcard_commands()); } /** @@ -667,7 +667,7 @@ void GCodeQueue::advance() { } #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (card.flag.saving) { char * const cmd = ring_buffer.peek_next_command_string(); @@ -703,7 +703,7 @@ void GCodeQueue::advance() { gcode.process_next_command(); - #endif // SDSUPPORT + #endif // HAS_MEDIA // The queue may be reset by a command handler or by code invoked by idle() within a handler ring_buffer.advance_pos(ring_buffer.index_r, -1); diff --git a/Marlin/src/gcode/queue.h b/Marlin/src/gcode/queue.h index 19fb359e15aa..25b9f5cf9b21 100644 --- a/Marlin/src/gcode/queue.h +++ b/Marlin/src/gcode/queue.h @@ -79,11 +79,11 @@ class GCodeQueue { void advance_pos(uint8_t &p, const int inc) { if (++p >= BUFSIZE) p = 0; length += inc; } - void commit_command(bool skip_ok + void commit_command(const bool skip_ok OPTARG(HAS_MULTI_SERIAL, serial_index_t serial_ind = serial_index_t()) ); - bool enqueue(const char *cmd, bool skip_ok = true + bool enqueue(const char *cmd, const bool skip_ok=true OPTARG(HAS_MULTI_SERIAL, serial_index_t serial_ind = serial_index_t()) ); @@ -256,7 +256,7 @@ class GCodeQueue { static void get_serial_commands(); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA static void get_sdcard_commands(); #endif diff --git a/Marlin/src/gcode/sd/M1001.cpp b/Marlin/src/gcode/sd/M1001.cpp index 1d1d1a4b7f80..3c8f38a1448a 100644 --- a/Marlin/src/gcode/sd/M1001.cpp +++ b/Marlin/src/gcode/sd/M1001.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../gcode.h" #include "../../module/planner.h" @@ -114,4 +114,4 @@ void GcodeSuite::M1001() { TERN_(SD_REPRINT_LAST_SELECTED_FILE, ui.reselect_last_file()); } -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/gcode/sd/M20.cpp b/Marlin/src/gcode/sd/M20.cpp index 2a7e0d08df71..9dca2bb3e036 100644 --- a/Marlin/src/gcode/sd/M20.cpp +++ b/Marlin/src/gcode/sd/M20.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../gcode.h" #include "../../sd/cardreader.h" @@ -51,4 +51,4 @@ void GcodeSuite::M20() { SERIAL_ECHO_MSG(STR_NO_MEDIA); } -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/gcode/sd/M21_M22.cpp b/Marlin/src/gcode/sd/M21_M22.cpp index aec0de27ca5c..3347168151e7 100644 --- a/Marlin/src/gcode/sd/M21_M22.cpp +++ b/Marlin/src/gcode/sd/M21_M22.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../gcode.h" #include "../../sd/cardreader.h" @@ -52,4 +52,4 @@ void GcodeSuite::M22() { if (!IS_SD_PRINTING()) card.release(); } -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/gcode/sd/M23.cpp b/Marlin/src/gcode/sd/M23.cpp index 8722e9b6de95..7727d4958f10 100644 --- a/Marlin/src/gcode/sd/M23.cpp +++ b/Marlin/src/gcode/sd/M23.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../gcode.h" #include "../../sd/cardreader.h" @@ -41,4 +41,4 @@ void GcodeSuite::M23() { TERN_(SET_PROGRESS_PERCENT, ui.set_progress(0)); } -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/gcode/sd/M24_M25.cpp b/Marlin/src/gcode/sd/M24_M25.cpp index 847af65b1208..45c596ae9922 100644 --- a/Marlin/src/gcode/sd/M24_M25.cpp +++ b/Marlin/src/gcode/sd/M24_M25.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../gcode.h" #include "../../sd/cardreader.h" @@ -101,9 +101,7 @@ void GcodeSuite::M25() { #else // Set initial pause flag to prevent more commands from landing in the queue while we try to pause - #if ENABLED(SDSUPPORT) - if (IS_SD_PRINTING()) card.pauseSDPrint(); - #endif + if (IS_SD_PRINTING()) card.pauseSDPrint(); #if ENABLED(POWER_LOSS_RECOVERY) && DISABLED(DGUS_LCD_UI_MKS) if (recovery.enabled) recovery.save(true); @@ -125,4 +123,4 @@ void GcodeSuite::M25() { #endif } -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/gcode/sd/M26.cpp b/Marlin/src/gcode/sd/M26.cpp index e0557bfa14fa..9ddc436e8ccd 100644 --- a/Marlin/src/gcode/sd/M26.cpp +++ b/Marlin/src/gcode/sd/M26.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../gcode.h" #include "../../sd/cardreader.h" @@ -35,4 +35,4 @@ void GcodeSuite::M26() { card.setIndex(parser.value_long()); } -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/gcode/sd/M27.cpp b/Marlin/src/gcode/sd/M27.cpp index 88238190e259..590efbf79d3f 100644 --- a/Marlin/src/gcode/sd/M27.cpp +++ b/Marlin/src/gcode/sd/M27.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../gcode.h" #include "../../sd/cardreader.h" @@ -49,4 +49,4 @@ void GcodeSuite::M27() { card.report_status(); } -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/gcode/sd/M28_M29.cpp b/Marlin/src/gcode/sd/M28_M29.cpp index 373938d99b4b..ac1ba0878870 100644 --- a/Marlin/src/gcode/sd/M28_M29.cpp +++ b/Marlin/src/gcode/sd/M28_M29.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../gcode.h" #include "../../sd/cardreader.h" @@ -69,4 +69,4 @@ void GcodeSuite::M29() { card.flag.saving = false; } -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/gcode/sd/M30.cpp b/Marlin/src/gcode/sd/M30.cpp index b95a895f1e92..da8e51bb8be5 100644 --- a/Marlin/src/gcode/sd/M30.cpp +++ b/Marlin/src/gcode/sd/M30.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../gcode.h" #include "../../sd/cardreader.h" @@ -37,4 +37,4 @@ void GcodeSuite::M30() { } } -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/gcode/sd/M524.cpp b/Marlin/src/gcode/sd/M524.cpp index f2b9274223c2..a3c03e90bab6 100644 --- a/Marlin/src/gcode/sd/M524.cpp +++ b/Marlin/src/gcode/sd/M524.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../gcode.h" #include "../../sd/cardreader.h" @@ -51,4 +51,4 @@ void GcodeSuite::M524() { } -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/gcode/sd/M928.cpp b/Marlin/src/gcode/sd/M928.cpp index 03a7877a90d0..0d86b330c785 100644 --- a/Marlin/src/gcode/sd/M928.cpp +++ b/Marlin/src/gcode/sd/M928.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../gcode.h" #include "../../sd/cardreader.h" @@ -36,4 +36,4 @@ void GcodeSuite::M928() { } -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/gcode/temp/M104_M109.cpp b/Marlin/src/gcode/temp/M104_M109.cpp index 331ceeb61db1..db150d55181d 100644 --- a/Marlin/src/gcode/temp/M104_M109.cpp +++ b/Marlin/src/gcode/temp/M104_M109.cpp @@ -28,7 +28,7 @@ #include "../../inc/MarlinConfigPre.h" -#if HAS_EXTRUDERS +#if HAS_HOTEND #include "../gcode.h" #include "../../module/temperature.h" @@ -135,4 +135,4 @@ void GcodeSuite::M104_M109(const bool isM109) { (void)thermalManager.wait_for_hotend(target_extruder, no_wait_for_cooling); } -#endif // EXTRUDERS +#endif // HAS_HOTEND diff --git a/Marlin/src/gcode/temp/M155.cpp b/Marlin/src/gcode/temp/M155.cpp index 48c23986aeb5..f1744c8a1eeb 100644 --- a/Marlin/src/gcode/temp/M155.cpp +++ b/Marlin/src/gcode/temp/M155.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if BOTH(AUTO_REPORT_TEMPERATURES, HAS_TEMP_SENSOR) +#if ENABLED(AUTO_REPORT_TEMPERATURES) #include "../gcode.h" #include "../../module/temperature.h" @@ -37,4 +37,4 @@ void GcodeSuite::M155() { } -#endif // AUTO_REPORT_TEMPERATURES && HAS_TEMP_SENSOR +#endif // AUTO_REPORT_TEMPERATURES diff --git a/Marlin/src/inc/Changes.h b/Marlin/src/inc/Changes.h new file mode 100644 index 000000000000..8a4a9c2b48fa --- /dev/null +++ b/Marlin/src/inc/Changes.h @@ -0,0 +1,681 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2023 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +/** + * Changes.h + * + * Alert about Configuration changes at compile-time. + */ + +/** + * Warnings for old configurations + */ +#ifdef GITHUB_ACTION + // Skip change alerts during CI Test +#elif WATCH_TEMP_PERIOD > 500 + #error "WATCH_TEMP_PERIOD now uses seconds instead of milliseconds." +#elif DISABLED(THERMAL_PROTECTION_HOTENDS) && (defined(WATCH_TEMP_PERIOD) || defined(THERMAL_PROTECTION_PERIOD)) + #error "Thermal Runaway Protection for hotends is now enabled with THERMAL_PROTECTION_HOTENDS." +#elif DISABLED(THERMAL_PROTECTION_BED) && defined(THERMAL_PROTECTION_BED_PERIOD) + #error "Thermal Runaway Protection for the bed is now enabled with THERMAL_PROTECTION_BED." +#elif defined(NO_FAN_SLOWING_IN_PID_TUNING) + #error "NO_FAN_SLOWING_IN_PID_TUNING is now TEMP_TUNING_MAINTAIN_FAN." +#elif (CORE_IS_XZ || CORE_IS_YZ) && ENABLED(Z_LATE_ENABLE) + #error "Z_LATE_ENABLE can't be used with COREXZ, COREZX, COREYZ, or COREZY." +#elif defined(X_HOME_RETRACT_MM) + #error "[XYZ]_HOME_RETRACT_MM settings have been renamed [XYZ]_HOME_BUMP_MM." +#elif defined(SDCARDDETECTINVERTED) + #error "SDCARDDETECTINVERTED is now SD_DETECT_STATE (HIGH)." +#elif defined(SD_DETECT_INVERTED) + #error "SD_DETECT_INVERTED is now SD_DETECT_STATE (HIGH)." +#elif defined(BTENABLED) + #error "BTENABLED is now BLUETOOTH." +#elif defined(CUSTOM_MENDEL_NAME) + #error "CUSTOM_MENDEL_NAME is now CUSTOM_MACHINE_NAME." +#elif defined(HAS_AUTOMATIC_VERSIONING) + #error "HAS_AUTOMATIC_VERSIONING is now CUSTOM_VERSION_FILE." +#elif defined(USE_AUTOMATIC_VERSIONING) + #error "USE_AUTOMATIC_VERSIONING is now CUSTOM_VERSION_FILE." +#elif defined(SDSLOW) + #error "SDSLOW deprecated. Set SD_SPI_SPEED to SPI_HALF_SPEED instead." +#elif defined(SDEXTRASLOW) + #error "SDEXTRASLOW deprecated. Set SD_SPI_SPEED to SPI_QUARTER_SPEED instead." +#elif defined(FILAMENT_SENSOR) + #error "FILAMENT_SENSOR is now FILAMENT_WIDTH_SENSOR." +#elif defined(ENDSTOPPULLUP_FIL_RUNOUT) + #error "ENDSTOPPULLUP_FIL_RUNOUT is now FIL_RUNOUT_PULLUP." +#elif defined(DISABLE_MAX_ENDSTOPS) || defined(DISABLE_MIN_ENDSTOPS) + #error "DISABLE_MAX_ENDSTOPS and DISABLE_MIN_ENDSTOPS deprecated. Endstops are automatically determined." +#elif defined(LANGUAGE_INCLUDE) + #error "LANGUAGE_INCLUDE has been replaced by LCD_LANGUAGE." +#elif defined(EXTRUDER_OFFSET_X) || defined(EXTRUDER_OFFSET_Y) + #error "EXTRUDER_OFFSET_[XY] is deprecated. Use HOTEND_OFFSET_[XY] instead." +#elif defined(PID_PARAMS_PER_EXTRUDER) + #error "PID_PARAMS_PER_EXTRUDER is deprecated. Use PID_PARAMS_PER_HOTEND instead." +#elif defined(EXTRUDER_WATTS) || defined(BED_WATTS) + #error "EXTRUDER_WATTS and BED_WATTS are deprecated and should be removed." +#elif defined(SERVO_ENDSTOP_ANGLES) + #error "SERVO_ENDSTOP_ANGLES is deprecated. Use Z_SERVO_ANGLES instead." +#elif defined(X_ENDSTOP_SERVO_NR) || defined(Y_ENDSTOP_SERVO_NR) + #error "X_ENDSTOP_SERVO_NR and Y_ENDSTOP_SERVO_NR are deprecated and should be removed." +#elif defined(Z_ENDSTOP_SERVO_NR) + #error "Z_ENDSTOP_SERVO_NR is now Z_PROBE_SERVO_NR." +#elif defined(DEFAULT_XYJERK) + #error "DEFAULT_XYJERK is deprecated. Use DEFAULT_XJERK and DEFAULT_YJERK instead." +#elif defined(XY_TRAVEL_SPEED) + #error "XY_TRAVEL_SPEED is now XY_PROBE_FEEDRATE." +#elif defined(XY_PROBE_SPEED) + #error "XY_PROBE_SPEED is now XY_PROBE_FEEDRATE." +#elif defined(Z_PROBE_SPEED_FAST) + #error "Z_PROBE_SPEED_FAST is now Z_PROBE_FEEDRATE_FAST." +#elif defined(Z_PROBE_SPEED_SLOW) + #error "Z_PROBE_SPEED_SLOW is now Z_PROBE_FEEDRATE_SLOW." +#elif defined(PROBE_SERVO_DEACTIVATION_DELAY) + #error "PROBE_SERVO_DEACTIVATION_DELAY is deprecated. Use DEACTIVATE_SERVOS_AFTER_MOVE instead." +#elif defined(SERVO_DEACTIVATION_DELAY) + #error "SERVO_DEACTIVATION_DELAY is now SERVO_DELAY." +#elif ENABLED(FILAMENTCHANGEENABLE) + #error "FILAMENTCHANGEENABLE is now ADVANCED_PAUSE_FEATURE." +#elif ENABLED(FILAMENT_CHANGE_FEATURE) + #error "FILAMENT_CHANGE_FEATURE is now ADVANCED_PAUSE_FEATURE." +#elif defined(FILAMENT_CHANGE_X_POS) || defined(FILAMENT_CHANGE_Y_POS) + #error "FILAMENT_CHANGE_[XY]_POS is now set with NOZZLE_PARK_POINT." +#elif defined(FILAMENT_CHANGE_Z_ADD) + #error "FILAMENT_CHANGE_Z_ADD is now set with NOZZLE_PARK_POINT." +#elif defined(FILAMENT_CHANGE_XY_FEEDRATE) + #error "FILAMENT_CHANGE_XY_FEEDRATE is now NOZZLE_PARK_XY_FEEDRATE." +#elif defined(FILAMENT_CHANGE_Z_FEEDRATE) + #error "FILAMENT_CHANGE_Z_FEEDRATE is now NOZZLE_PARK_Z_FEEDRATE." +#elif defined(PAUSE_PARK_X_POS) || defined(PAUSE_PARK_Y_POS) + #error "PAUSE_PARK_[XY]_POS is now set with NOZZLE_PARK_POINT." +#elif defined(PAUSE_PARK_Z_ADD) + #error "PAUSE_PARK_Z_ADD is now set with NOZZLE_PARK_POINT." +#elif defined(PAUSE_PARK_XY_FEEDRATE) + #error "PAUSE_PARK_XY_FEEDRATE is now NOZZLE_PARK_XY_FEEDRATE." +#elif defined(PAUSE_PARK_Z_FEEDRATE) + #error "PAUSE_PARK_Z_FEEDRATE is now NOZZLE_PARK_Z_FEEDRATE." +#elif defined(FILAMENT_CHANGE_RETRACT_FEEDRATE) + #error "FILAMENT_CHANGE_RETRACT_FEEDRATE is now PAUSE_PARK_RETRACT_FEEDRATE." +#elif defined(FILAMENT_CHANGE_RETRACT_LENGTH) + #error "FILAMENT_CHANGE_RETRACT_LENGTH is now PAUSE_PARK_RETRACT_LENGTH." +#elif defined(FILAMENT_CHANGE_EXTRUDE_FEEDRATE) + #error "FILAMENT_CHANGE_EXTRUDE_FEEDRATE is now ADVANCED_PAUSE_PURGE_FEEDRATE." +#elif defined(ADVANCED_PAUSE_EXTRUDE_FEEDRATE) + #error "ADVANCED_PAUSE_EXTRUDE_FEEDRATE is now ADVANCED_PAUSE_PURGE_FEEDRATE." +#elif defined(FILAMENT_CHANGE_EXTRUDE_LENGTH) + #error "FILAMENT_CHANGE_EXTRUDE_LENGTH is now ADVANCED_PAUSE_PURGE_LENGTH." +#elif defined(ADVANCED_PAUSE_EXTRUDE_LENGTH) + #error "ADVANCED_PAUSE_EXTRUDE_LENGTH is now ADVANCED_PAUSE_PURGE_LENGTH." +#elif defined(FILAMENT_CHANGE_NOZZLE_TIMEOUT) + #error "FILAMENT_CHANGE_NOZZLE_TIMEOUT is now PAUSE_PARK_NOZZLE_TIMEOUT." +#elif defined(FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS) + #error "FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS is now FILAMENT_CHANGE_ALERT_BEEPS." +#elif defined(FILAMENT_CHANGE_NO_STEPPER_TIMEOUT) + #error "FILAMENT_CHANGE_NO_STEPPER_TIMEOUT is now PAUSE_PARK_NO_STEPPER_TIMEOUT." +#elif defined(PLA_PREHEAT_HOTEND_TEMP) + #error "PLA_PREHEAT_HOTEND_TEMP is now PREHEAT_1_TEMP_HOTEND." +#elif defined(PLA_PREHEAT_HPB_TEMP) + #error "PLA_PREHEAT_HPB_TEMP is now PREHEAT_1_TEMP_BED." +#elif defined(PLA_PREHEAT_FAN_SPEED) + #error "PLA_PREHEAT_FAN_SPEED is now PREHEAT_1_FAN_SPEED." +#elif defined(ABS_PREHEAT_HOTEND_TEMP) + #error "ABS_PREHEAT_HOTEND_TEMP is now PREHEAT_2_TEMP_HOTEND." +#elif defined(ABS_PREHEAT_HPB_TEMP) + #error "ABS_PREHEAT_HPB_TEMP is now PREHEAT_2_TEMP_BED." +#elif defined(ABS_PREHEAT_FAN_SPEED) + #error "ABS_PREHEAT_FAN_SPEED is now PREHEAT_2_FAN_SPEED." +#elif defined(ENDSTOPS_ONLY_FOR_HOMING) + #error "ENDSTOPS_ONLY_FOR_HOMING is deprecated. Use (disable) ENDSTOPS_ALWAYS_ON_DEFAULT instead." +#elif defined(HOMING_FEEDRATE) + #error "HOMING_FEEDRATE is now set using the HOMING_FEEDRATE_MM_M array instead." +#elif (defined(HOMING_FEEDRATE_XY) || defined(HOMING_FEEDRATE_Z)) && !defined(HOMING_FEEDRATE_MM_M) + #error "HOMING_FEEDRATE_XY and HOMING_FEEDRATE_Z are now set using the HOMING_FEEDRATE_MM_M array instead." +#elif defined(MANUAL_HOME_POSITIONS) + #error "MANUAL_HOME_POSITIONS is deprecated. Set MANUAL_[XYZ]_HOME_POS as-needed instead." +#elif defined(PID_ADD_EXTRUSION_RATE) + #error "PID_ADD_EXTRUSION_RATE is now PID_EXTRUSION_SCALING and is DISABLED by default." +#elif defined(Z_RAISE_BEFORE_HOMING) + #error "Z_RAISE_BEFORE_HOMING is now Z_CLEARANCE_FOR_HOMING." +#elif defined(MIN_Z_HEIGHT_FOR_HOMING) + #error "MIN_Z_HEIGHT_FOR_HOMING is now Z_CLEARANCE_FOR_HOMING." +#elif defined(Z_HOMING_HEIGHT) + #error "Z_HOMING_HEIGHT is now Z_CLEARANCE_FOR_HOMING." +#elif defined(Z_RAISE_BEFORE_PROBING) || defined(Z_RAISE_AFTER_PROBING) + #error "Z_RAISE_(BEFORE|AFTER)_PROBING are deprecated. Use Z_CLEARANCE_DEPLOY_PROBE and Z_AFTER_PROBING instead." +#elif defined(Z_RAISE_PROBE_DEPLOY_STOW) || defined(Z_RAISE_BETWEEN_PROBINGS) + #error "Z_RAISE_PROBE_DEPLOY_STOW and Z_RAISE_BETWEEN_PROBINGS are now Z_CLEARANCE_DEPLOY_PROBE and Z_CLEARANCE_BETWEEN_PROBES." +#elif defined(Z_PROBE_DEPLOY_HEIGHT) || defined(Z_PROBE_TRAVEL_HEIGHT) + #error "Z_PROBE_DEPLOY_HEIGHT and Z_PROBE_TRAVEL_HEIGHT are now Z_CLEARANCE_DEPLOY_PROBE and Z_CLEARANCE_BETWEEN_PROBES." +#elif defined(MANUAL_BED_LEVELING) + #error "MANUAL_BED_LEVELING is now LCD_BED_LEVELING." +#elif defined(MESH_HOME_SEARCH_Z) + #error "MESH_HOME_SEARCH_Z is now LCD_PROBE_Z_RANGE." +#elif defined(MANUAL_PROBE_Z_RANGE) + #error "MANUAL_PROBE_Z_RANGE is now LCD_PROBE_Z_RANGE." +#elif !defined(MIN_STEPS_PER_SEGMENT) + #error "Please replace 'const int dropsegments' with '#define MIN_STEPS_PER_SEGMENT' (and increase by 1)." +#elif MIN_STEPS_PER_SEGMENT <= 0 + #error "MIN_STEPS_PER_SEGMENT must be at least 1." +#elif defined(PREVENT_DANGEROUS_EXTRUDE) + #error "PREVENT_DANGEROUS_EXTRUDE is now PREVENT_COLD_EXTRUSION." +#elif defined(SCARA) + #error "SCARA is now MORGAN_SCARA." +#elif defined(ENABLE_AUTO_BED_LEVELING) + #error "ENABLE_AUTO_BED_LEVELING is deprecated. Specify AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_BILINEAR, or AUTO_BED_LEVELING_3POINT." +#elif defined(AUTO_BED_LEVELING_FEATURE) + #error "AUTO_BED_LEVELING_FEATURE is deprecated. Specify AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_BILINEAR, or AUTO_BED_LEVELING_3POINT." +#elif defined(ABL_GRID_POINTS) + #error "ABL_GRID_POINTS is now GRID_MAX_POINTS_X and GRID_MAX_POINTS_Y." +#elif defined(ABL_GRID_POINTS_X) || defined(ABL_GRID_POINTS_Y) + #error "ABL_GRID_POINTS_[XY] is now GRID_MAX_POINTS_[XY]." +#elif defined(ABL_GRID_MAX_POINTS_X) || defined(ABL_GRID_MAX_POINTS_Y) + #error "ABL_GRID_MAX_POINTS_[XY] is now GRID_MAX_POINTS_[XY]." +#elif defined(MESH_NUM_X_POINTS) || defined(MESH_NUM_Y_POINTS) + #error "MESH_NUM_[XY]_POINTS is now GRID_MAX_POINTS_[XY]." +#elif defined(UBL_MESH_NUM_X_POINTS) || defined(UBL_MESH_NUM_Y_POINTS) + #error "UBL_MESH_NUM_[XY]_POINTS is now GRID_MAX_POINTS_[XY]." +#elif defined(UBL_G26_MESH_VALIDATION) + #error "UBL_G26_MESH_VALIDATION is now G26_MESH_VALIDATION." +#elif defined(UBL_MESH_EDIT_ENABLED) + #error "UBL_MESH_EDIT_ENABLED is now G26_MESH_VALIDATION." +#elif defined(UBL_MESH_EDITING) + #error "UBL_MESH_EDITING is now G26_MESH_VALIDATION." +#elif defined(BLTOUCH_HEATERS_OFF) + #error "BLTOUCH_HEATERS_OFF is now PROBING_HEATERS_OFF." +#elif defined(BLTOUCH_V3) + #error "BLTOUCH_V3 is obsolete." +#elif defined(BLTOUCH_FORCE_OPEN_DRAIN_MODE) + #error "BLTOUCH_FORCE_OPEN_DRAIN_MODE is obsolete." +#elif defined(BEEPER) + #error "BEEPER is now BEEPER_PIN." +#elif defined(SDCARDDETECT) + #error "SDCARDDETECT is now SD_DETECT_PIN." +#elif defined(STAT_LED_RED) || defined(STAT_LED_BLUE) + #error "STAT_LED_RED/STAT_LED_BLUE are now STAT_LED_RED_PIN/STAT_LED_BLUE_PIN." +#elif defined(LCD_PIN_BL) + #error "LCD_PIN_BL is now LCD_BACKLIGHT_PIN." +#elif defined(LCD_PIN_RESET) + #error "LCD_PIN_RESET is now LCD_RESET_PIN." +#elif defined(EXTRUDER_0_AUTO_FAN_PIN) || defined(EXTRUDER_1_AUTO_FAN_PIN) || defined(EXTRUDER_2_AUTO_FAN_PIN) || defined(EXTRUDER_3_AUTO_FAN_PIN) + #error "EXTRUDER_[0123]_AUTO_FAN_PIN is now E[0123]_AUTO_FAN_PIN." +#elif defined(min_software_endstops) || defined(max_software_endstops) + #error "(min|max)_software_endstops are now (MIN|MAX)_SOFTWARE_ENDSTOPS." +#elif ENABLED(Z_PROBE_SLED) && defined(SLED_PIN) + #error "Replace SLED_PIN with SOL1_PIN (applies to both Z_PROBE_SLED and SOLENOID_PROBE)." +#elif defined(CONTROLLERFAN_PIN) + #error "CONTROLLERFAN_PIN is now CONTROLLER_FAN_PIN, enabled with USE_CONTROLLER_FAN." +#elif defined(CONTROLLERFAN_SPEED) + #error "CONTROLLERFAN_SPEED is now CONTROLLERFAN_SPEED_ACTIVE." +#elif defined(CONTROLLERFAN_SECS) + #error "CONTROLLERFAN_SECS is now CONTROLLERFAN_IDLE_TIME." +#elif defined(MIN_RETRACT) + #error "MIN_RETRACT is now MIN_AUTORETRACT and MAX_AUTORETRACT." +#elif defined(ADVANCE) + #error "ADVANCE is now LIN_ADVANCE." +#elif defined(LIN_ADVANCE_E_D_RATIO) + #error "LIN_ADVANCE (1.5) no longer uses LIN_ADVANCE_E_D_RATIO." +#elif defined(NEOPIXEL_RGBW_LED) + #error "NEOPIXEL_RGBW_LED is now NEOPIXEL_LED." +#elif ENABLED(DELTA) && defined(DELTA_PROBEABLE_RADIUS) + #error "Remove DELTA_PROBEABLE_RADIUS and use PROBING_MARGIN to inset the probe area instead." +#elif ENABLED(DELTA) && defined(DELTA_CALIBRATION_RADIUS) + #error "Remove DELTA_CALIBRATION_RADIUS and use PROBING_MARGIN to inset the probe area instead." +#elif defined(UBL_MESH_INSET) + #error "UBL_MESH_INSET is now just MESH_INSET." +#elif defined(UBL_MESH_MIN_X) || defined(UBL_MESH_MIN_Y) || defined(UBL_MESH_MAX_X) || defined(UBL_MESH_MAX_Y) + #error "UBL_MESH_(MIN|MAX)_[XY] is now just MESH_(MIN|MAX)_[XY]." +#elif defined(ABL_PROBE_PT_1_X) || defined(ABL_PROBE_PT_1_Y) || defined(ABL_PROBE_PT_2_X) || defined(ABL_PROBE_PT_2_Y) || defined(ABL_PROBE_PT_3_X) || defined(ABL_PROBE_PT_3_Y) + #error "ABL_PROBE_PT_[123]_[XY] is no longer required. Please remove it." +#elif defined(UBL_PROBE_PT_1_X) || defined(UBL_PROBE_PT_1_Y) || defined(UBL_PROBE_PT_2_X) || defined(UBL_PROBE_PT_2_Y) || defined(UBL_PROBE_PT_3_X) || defined(UBL_PROBE_PT_3_Y) + #error "UBL_PROBE_PT_[123]_[XY] is no longer required. Please remove it." +#elif defined(MIN_PROBE_EDGE) + #error "MIN_PROBE_EDGE is now called PROBING_MARGIN." +#elif defined(MIN_PROBE_EDGE_LEFT) + #error "MIN_PROBE_EDGE_LEFT is now called PROBING_MARGIN_LEFT." +#elif defined(MIN_PROBE_EDGE_RIGHT) + #error "MIN_PROBE_EDGE_RIGHT is now called PROBING_MARGIN_RIGHT." +#elif defined(MIN_PROBE_EDGE_FRONT) + #error "MIN_PROBE_EDGE_FRONT is now called PROBING_MARGIN_FRONT." +#elif defined(MIN_PROBE_EDGE_BACK) + #error "MIN_PROBE_EDGE_BACK is now called PROBING_MARGIN_BACK." +#elif defined(LEFT_PROBE_BED_POSITION) + #error "LEFT_PROBE_BED_POSITION is obsolete. Set a margin with PROBING_MARGIN or PROBING_MARGIN_LEFT instead." +#elif defined(RIGHT_PROBE_BED_POSITION) + #error "RIGHT_PROBE_BED_POSITION is obsolete. Set a margin with PROBING_MARGIN or PROBING_MARGIN_RIGHT instead." +#elif defined(FRONT_PROBE_BED_POSITION) + #error "FRONT_PROBE_BED_POSITION is obsolete. Set a margin with PROBING_MARGIN or PROBING_MARGIN_FRONT instead." +#elif defined(BACK_PROBE_BED_POSITION) + #error "BACK_PROBE_BED_POSITION is obsolete. Set a margin with PROBING_MARGIN or PROBING_MARGIN_BACK instead." +#elif defined(ENABLE_MESH_EDIT_GFX_OVERLAY) + #error "ENABLE_MESH_EDIT_GFX_OVERLAY is now MESH_EDIT_GFX_OVERLAY." +#elif defined(BABYSTEP_ZPROBE_GFX_REVERSE) + #error "BABYSTEP_ZPROBE_GFX_REVERSE is now set by OVERLAY_GFX_REVERSE." +#elif defined(UBL_GRANULAR_SEGMENTATION_FOR_CARTESIAN) + #error "UBL_GRANULAR_SEGMENTATION_FOR_CARTESIAN is now SEGMENT_LEVELED_MOVES." +#elif HAS_PID_HEATING && (defined(K1) || !defined(PID_K1)) + #error "K1 is now PID_K1." +#elif defined(PROBE_DOUBLE_TOUCH) + #error "PROBE_DOUBLE_TOUCH is now MULTIPLE_PROBING." +#elif defined(ANET_KEYPAD_LCD) + #error "ANET_KEYPAD_LCD is now ZONESTAR_LCD." +#elif defined(LCD_I2C_SAINSMART_YWROBOT) + #error "LCD_I2C_SAINSMART_YWROBOT is now LCD_SAINSMART_I2C_(1602|2004)." +#elif defined(MEASURED_LOWER_LIMIT) || defined(MEASURED_UPPER_LIMIT) + #error "MEASURED_(UPPER|LOWER)_LIMIT is now FILWIDTH_ERROR_MARGIN." +#elif defined(HAVE_TMCDRIVER) + #error "HAVE_TMCDRIVER is now [AXIS]_DRIVER_TYPE TMC26X." +#elif defined(STEALTHCHOP) + #error "STEALTHCHOP is now STEALTHCHOP_(XY|Z|E)." +#elif defined(HAVE_TMC26X) + #error "HAVE_TMC26X is now [AXIS]_DRIVER_TYPE TMC26X." +#elif defined(HAVE_TMC2130) + #error "HAVE_TMC2130 is now [AXIS]_DRIVER_TYPE TMC2130." +#elif defined(HAVE_TMC2208) + #error "HAVE_TMC2208 is now [AXIS]_DRIVER_TYPE TMC2208." +#elif defined(HAVE_L6470DRIVER) + #error "HAVE_L6470DRIVER is obsolete. L64xx stepper drivers are no longer supported in Marlin." +#elif defined(X_IS_TMC) || defined(X2_IS_TMC) || defined(Y_IS_TMC) || defined(Y2_IS_TMC) || defined(Z_IS_TMC) || defined(Z2_IS_TMC) || defined(Z3_IS_TMC) \ + || defined(E0_IS_TMC) || defined(E1_IS_TMC) || defined(E2_IS_TMC) || defined(E3_IS_TMC) || defined(E4_IS_TMC) || defined(E5_IS_TMC) || defined(E6_IS_TMC) || defined(E7_IS_TMC) + #error "[AXIS]_IS_TMC is now [AXIS]_DRIVER_TYPE TMC26X." +#elif defined(X_IS_TMC26X) || defined(X2_IS_TMC26X) || defined(Y_IS_TMC26X) || defined(Y2_IS_TMC26X) || defined(Z_IS_TMC26X) || defined(Z2_IS_TMC26X) || defined(Z3_IS_TMC26X) \ + || defined(E0_IS_TMC26X) || defined(E1_IS_TMC26X) || defined(E2_IS_TMC26X) || defined(E3_IS_TMC26X) || defined(E4_IS_TMC26X) || defined(E5_IS_TMC26X) || defined(E6_IS_TMC26X) || defined(E7_IS_TMC26X) + #error "[AXIS]_IS_TMC26X is now [AXIS]_DRIVER_TYPE TMC26X." +#elif defined(X_IS_TMC2130) || defined(X2_IS_TMC2130) || defined(Y_IS_TMC2130) || defined(Y2_IS_TMC2130) || defined(Z_IS_TMC2130) || defined(Z2_IS_TMC2130) || defined(Z3_IS_TMC2130) \ + || defined(E0_IS_TMC2130) || defined(E1_IS_TMC2130) || defined(E2_IS_TMC2130) || defined(E3_IS_TMC2130) || defined(E4_IS_TMC2130) || defined(E5_IS_TMC2130) || defined(E6_IS_TMC2130) || defined(E7_IS_TMC2130) + #error "[AXIS]_IS_TMC2130 is now [AXIS]_DRIVER_TYPE TMC2130." +#elif defined(X_IS_TMC2208) || defined(X2_IS_TMC2208) || defined(Y_IS_TMC2208) || defined(Y2_IS_TMC2208) || defined(Z_IS_TMC2208) || defined(Z2_IS_TMC2208) || defined(Z3_IS_TMC2208) \ + || defined(E0_IS_TMC2208) || defined(E1_IS_TMC2208) || defined(E2_IS_TMC2208) || defined(E3_IS_TMC2208) || defined(E4_IS_TMC2208) || defined(E5_IS_TMC2208) || defined(E6_IS_TMC2208) || defined(E7_IS_TMC2208) + #error "[AXIS]_IS_TMC2208 is now [AXIS]_DRIVER_TYPE TMC2208." +#elif defined(AUTOMATIC_CURRENT_CONTROL) + #error "AUTOMATIC_CURRENT_CONTROL is now MONITOR_DRIVER_STATUS." +#elif defined(FILAMENT_CHANGE_LOAD_LENGTH) + #error "FILAMENT_CHANGE_LOAD_LENGTH is now FILAMENT_CHANGE_FAST_LOAD_LENGTH." +#elif defined(LEVEL_CORNERS_INSET) + #error "LEVEL_CORNERS_INSET is now BED_TRAMMING_INSET_LFRB." +#elif defined(BEZIER_JERK_CONTROL) + #error "BEZIER_JERK_CONTROL is now S_CURVE_ACCELERATION." +#elif HAS_JUNCTION_DEVIATION && defined(JUNCTION_DEVIATION_FACTOR) + #error "JUNCTION_DEVIATION_FACTOR is now JUNCTION_DEVIATION_MM." +#elif defined(JUNCTION_ACCELERATION_FACTOR) + #error "JUNCTION_ACCELERATION_FACTOR is obsolete. Delete it from Configuration_adv.h." +#elif defined(JUNCTION_ACCELERATION) + #error "JUNCTION_ACCELERATION is obsolete. Delete it from Configuration_adv.h." +#elif defined(MAX7219_DEBUG_STEPPER_HEAD) + #error "MAX7219_DEBUG_STEPPER_HEAD is now MAX7219_DEBUG_PLANNER_HEAD." +#elif defined(MAX7219_DEBUG_STEPPER_TAIL) + #error "MAX7219_DEBUG_STEPPER_TAIL is now MAX7219_DEBUG_PLANNER_TAIL." +#elif defined(MAX7219_DEBUG_STEPPER_QUEUE) + #error "MAX7219_DEBUG_STEPPER_QUEUE is now MAX7219_DEBUG_PLANNER_QUEUE." +#elif defined(ENDSTOP_NOISE_FILTER) + #error "ENDSTOP_NOISE_FILTER is now ENDSTOP_NOISE_THRESHOLD [2-7]." +#elif defined(RETRACT_ZLIFT) + #error "RETRACT_ZLIFT is now RETRACT_ZRAISE." +#elif defined(TOOLCHANGE_FS_INIT_BEFORE_SWAP) + #error "TOOLCHANGE_FS_INIT_BEFORE_SWAP is now TOOLCHANGE_FS_SLOW_FIRST_PRIME." +#elif defined(TOOLCHANGE_PARK_ZLIFT) || defined(TOOLCHANGE_UNPARK_ZLIFT) + #error "TOOLCHANGE_PARK_ZLIFT and TOOLCHANGE_UNPARK_ZLIFT are now TOOLCHANGE_ZRAISE." +#elif defined(SINGLENOZZLE_TOOLCHANGE_ZRAISE) + #error "SINGLENOZZLE_TOOLCHANGE_ZRAISE is now TOOLCHANGE_ZRAISE." +#elif defined(SINGLENOZZLE_SWAP_LENGTH) + #error "SINGLENOZZLE_SWAP_LENGTH is now TOOLCHANGE_FIL_SWAP_LENGTH." +#elif defined(SINGLENOZZLE_SWAP_RETRACT_SPEED) + #error "SINGLENOZZLE_SWAP_RETRACT_SPEED is now TOOLCHANGE_FIL_SWAP_RETRACT_SPEED." +#elif defined(SINGLENOZZLE_SWAP_PRIME_SPEED) + #error "SINGLENOZZLE_SWAP_PRIME_SPEED is now TOOLCHANGE_FIL_SWAP_PRIME_SPEED." +#elif defined(SINGLENOZZLE_SWAP_PARK) + #error "SINGLENOZZLE_SWAP_PARK is now TOOLCHANGE_PARK." +#elif defined(SINGLENOZZLE_TOOLCHANGE_XY) + #error "SINGLENOZZLE_TOOLCHANGE_XY is now TOOLCHANGE_PARK_XY." +#elif defined(SINGLENOZZLE_PARK_XY_FEEDRATE) + #error "SINGLENOZZLE_PARK_XY_FEEDRATE is now TOOLCHANGE_PARK_XY_FEEDRATE." +#elif defined(PARKING_EXTRUDER_SECURITY_RAISE) + #error "PARKING_EXTRUDER_SECURITY_RAISE is now TOOLCHANGE_ZRAISE." +#elif defined(SWITCHING_TOOLHEAD_SECURITY_RAISE) + #error "SWITCHING_TOOLHEAD_SECURITY_RAISE is now TOOLCHANGE_ZRAISE." +#elif defined(G0_FEEDRATE) && G0_FEEDRATE == 0 + #error "G0_FEEDRATE is now used to set the G0 feedrate." +#elif defined(MBL_Z_STEP) + #error "MBL_Z_STEP is now MESH_EDIT_Z_STEP." +#elif defined(CHDK) + #error "CHDK is now CHDK_PIN." +#elif ANY_PIN( \ + MAX6675_SS, MAX6675_SS2, MAX6675_SS3, MAX6675_CS, MAX6675_CS2, MAX6675_CS3,\ + MAX31855_SS, MAX31855_SS2, MAX31855_SS3, MAX31855_CS, MAX31855_CS2, MAX31855_CS3, \ + MAX31865_SS, MAX31865_SS2, MAX31865_SS3, MAX31865_CS, MAX31865_CS2, MAX31865_CS3) + #warning "MAX*_SS_PIN, MAX*_SS2_PIN, MAX*_SS3_PIN, MAX*_CS_PIN, MAX*_CS2_PIN, and MAX*_CS3_PIN, are obsolete. Please use TEMP_0_CS_PIN/TEMP_1_CS_PIN/TEMP_2_CS_PIN instead." +#elif ANY_PIN(MAX6675_SCK, MAX31855_SCK, MAX31865_SCK) + #warning "MAX*_SCK_PIN is obsolete. Please use TEMP_0_SCK_PIN/TEMP_1_SCK_PIN/TEMP_2_SCK_PIN instead." +#elif ANY_PIN(MAX6675_MISO, MAX6675_DO, MAX31855_MISO, MAX31855_DO, MAX31865_MISO, MAX31865_DO) + #warning "MAX*_MISO_PIN and MAX*_DO_PIN are obsolete. Please use TEMP_0_MISO_PIN/TEMP_1_MISO_PIN/TEMP_2_MISO_PIN instead." +#elif PIN_EXISTS(MAX31865_MOSI) + #warning "MAX31865_MOSI_PIN is obsolete. Please use TEMP_0_MOSI_PIN/TEMP_1_MOSI_PIN/TEMP_2_MOSI_PIN instead." +#elif ANY_PIN(THERMO_CS1_PIN, THERMO_CS2_PIN, THERMO_CS3_PIN, THERMO_DO_PIN, THERMO_SCK_PIN) + #error "THERMO_*_PIN is now TEMP_n_CS_PIN, TEMP_n_SCK_PIN, TEMP_n_MOSI_PIN, TEMP_n_MISO_PIN." +#elif defined(MAX31865_SENSOR_OHMS) + #error "MAX31865_SENSOR_OHMS is now MAX31865_SENSOR_OHMS_0." +#elif defined(MAX31865_CALIBRATION_OHMS) + #error "MAX31865_CALIBRATION_OHMS is now MAX31865_CALIBRATION_OHMS_0." +#elif defined(SPINDLE_LASER_ENABLE) + #error "SPINDLE_LASER_ENABLE is now SPINDLE_FEATURE or LASER_FEATURE." +#elif defined(SPINDLE_LASER_ENABLE_PIN) + #error "SPINDLE_LASER_ENABLE_PIN is now SPINDLE_LASER_ENA_PIN." +#elif defined(SPINDLE_DIR_CHANGE) + #error "SPINDLE_DIR_CHANGE is now SPINDLE_CHANGE_DIR." +#elif defined(SPINDLE_STOP_ON_DIR_CHANGE) + #error "SPINDLE_STOP_ON_DIR_CHANGE is now SPINDLE_CHANGE_DIR_STOP." +#elif defined(SPINDLE_LASER_ACTIVE_HIGH) + #error "SPINDLE_LASER_ACTIVE_HIGH is now SPINDLE_LASER_ACTIVE_STATE." +#elif defined(SPINDLE_LASER_ENABLE_INVERT) + #error "SPINDLE_LASER_ENABLE_INVERT is now SPINDLE_LASER_ACTIVE_STATE." +#elif defined(LASER_POWER_INLINE) + #error "LASER_POWER_INLINE is not required, inline mode is enabled with 'M3 I' and disabled with 'M5 I'." +#elif defined(LASER_POWER_INLINE_TRAPEZOID) + #error "LASER_POWER_INLINE_TRAPEZOID is now LASER_POWER_TRAP." +#elif defined(LASER_POWER_INLINE_TRAPEZOID_CONT) + #error "LASER_POWER_INLINE_TRAPEZOID_CONT is replaced with LASER_POWER_TRAP." +#elif defined(LASER_POWER_INLINE_TRAPEZOID_PER) + #error "LASER_POWER_INLINE_TRAPEZOID_CONT_PER replaced with LASER_POWER_TRAP." +#elif defined(LASER_POWER_INLINE_CONTINUOUS) + #error "LASER_POWER_INLINE_CONTINUOUS is not required, inline mode is enabled with 'M3 I' and disabled with 'M5 I'." +#elif defined(CUTTER_POWER_DISPLAY) + #error "CUTTER_POWER_DISPLAY is now CUTTER_POWER_UNIT." +#elif defined(CHAMBER_HEATER_PIN) + #error "CHAMBER_HEATER_PIN is now HEATER_CHAMBER_PIN." +#elif defined(TMC_Z_CALIBRATION) + #error "TMC_Z_CALIBRATION has been deprecated in favor of MECHANICAL_GANTRY_CALIBRATION." +#elif defined(Z_MIN_PROBE_ENDSTOP) + #error "Z_MIN_PROBE_ENDSTOP is no longer required. Please remove it." +#elif defined(DUAL_NOZZLE_DUPLICATION_MODE) + #error "DUAL_NOZZLE_DUPLICATION_MODE is now MULTI_NOZZLE_DUPLICATION." +#elif defined(MENU_ITEM_CASE_LIGHT) + #error "MENU_ITEM_CASE_LIGHT is now CASE_LIGHT_MENU." +#elif defined(CASE_LIGHT_NEOPIXEL_COLOR) + #error "CASE_LIGHT_NEOPIXEL_COLOR is now CASE_LIGHT_DEFAULT_COLOR." +#elif defined(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED) + #error "ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED is now SD_ABORT_ON_ENDSTOP_HIT." +#elif defined(LPC_SD_LCD) || defined(LPC_SD_ONBOARD) || defined(LPC_SD_CUSTOM_CABLE) + #error "LPC_SD_(LCD|ONBOARD|CUSTOM_CABLE) are now SDCARD_CONNECTION." +#elif defined(USB_SD_DISABLED) + #error "USB_SD_DISABLED is now NO_SD_HOST_DRIVE." +#elif defined(USB_SD_ONBOARD) + #error "USB_SD_ONBOARD is obsolete. Disable NO_SD_HOST_DRIVE instead." +#elif defined(PSU_ACTIVE_HIGH) + #error "PSU_ACTIVE_HIGH is now PSU_ACTIVE_STATE." +#elif POWER_SUPPLY == 1 + #error "Replace POWER_SUPPLY 1 by enabling PSU_CONTROL and setting PSU_ACTIVE_STATE to 'LOW'." +#elif POWER_SUPPLY == 2 + #error "Replace POWER_SUPPLY 2 by enabling PSU_CONTROL and setting PSU_ACTIVE_STATE to 'HIGH'." +#elif defined(POWER_SUPPLY) + #error "POWER_SUPPLY is now obsolete. Please remove it." +#elif defined(MKS_ROBIN_TFT) + #error "MKS_ROBIN_TFT is now FSMC_GRAPHICAL_TFT." +#elif defined(SDPOWER) + #error "SDPOWER is now SDPOWER_PIN." +#elif defined(STRING_SPLASH_LINE1) || defined(STRING_SPLASH_LINE2) + #error "STRING_SPLASH_LINE[12] are now obsolete. Please remove them." +#elif defined(Z_PROBE_ALLEN_KEY_DEPLOY_1_X) || defined(Z_PROBE_ALLEN_KEY_STOW_1_X) + #error "Z_PROBE_ALLEN_KEY_(DEPLOY|STOW) coordinates are now a single setting." +#elif defined(X_PROBE_OFFSET_FROM_EXTRUDER) || defined(Y_PROBE_OFFSET_FROM_EXTRUDER) || defined(Z_PROBE_OFFSET_FROM_EXTRUDER) + #error "[XYZ]_PROBE_OFFSET_FROM_EXTRUDER is now NOZZLE_TO_PROBE_OFFSET." +#elif defined(MIN_PROBE_X) || defined(MIN_PROBE_Y) || defined(MAX_PROBE_X) || defined(MAX_PROBE_Y) + #error "(MIN|MAX)_PROBE_[XY] are now calculated at runtime. Please remove them." +#elif defined(Z_STEPPER_ALIGN_X) || defined(Z_STEPPER_ALIGN_X) + #error "Z_STEPPER_ALIGN_X and Z_STEPPER_ALIGN_Y are now combined as Z_STEPPER_ALIGN_XY." +#elif defined(JUNCTION_DEVIATION) + #error "JUNCTION_DEVIATION is no longer required. (See CLASSIC_JERK). Please remove it." +#elif defined(BABYSTEP_MULTIPLICATOR) + #error "BABYSTEP_MULTIPLICATOR is now BABYSTEP_MULTIPLICATOR_[XY|Z]." +#elif defined(LULZBOT_TOUCH_UI) + #error "LULZBOT_TOUCH_UI is now TOUCH_UI_FTDI_EVE." +#elif defined(PS_DEFAULT_OFF) + #error "PS_DEFAULT_OFF is now PSU_DEFAULT_OFF." +#elif defined(FILAMENT_UNLOAD_RETRACT_LENGTH) + #error "FILAMENT_UNLOAD_RETRACT_LENGTH is now FILAMENT_UNLOAD_PURGE_RETRACT." +#elif defined(FILAMENT_UNLOAD_DELAY) + #error "FILAMENT_UNLOAD_DELAY is now FILAMENT_UNLOAD_PURGE_DELAY." +#elif defined(HOME_USING_SPREADCYCLE) + #error "HOME_USING_SPREADCYCLE is now obsolete. Please remove it." +#elif defined(DGUS_LCD) + #error "DGUS_LCD is now DGUS_LCD_UI ORIGIN|FYSETC|HIPRECY)." +#elif defined(DGUS_SERIAL_PORT) + #error "DGUS_SERIAL_PORT is now LCD_SERIAL_PORT." +#elif defined(DGUS_BAUDRATE) + #error "DGUS_BAUDRATE is now LCD_BAUDRATE." +#elif defined(DGUS_STATS_RX_BUFFER_OVERRUNS) + #error "DGUS_STATS_RX_BUFFER_OVERRUNS is now STATS_RX_BUFFER_OVERRUNS." +#elif defined(ANYCUBIC_LCD_SERIAL_PORT) + #error "ANYCUBIC_LCD_SERIAL_PORT is now LCD_SERIAL_PORT." +#elif defined(INTERNAL_SERIAL_PORT) + #error "INTERNAL_SERIAL_PORT is now MMU2_SERIAL_PORT." +#elif defined(X_DUAL_ENDSTOPS_ADJUSTMENT) || defined(Y_DUAL_ENDSTOPS_ADJUSTMENT) || defined(Z_DUAL_ENDSTOPS_ADJUSTMENT) + #error "[XYZ]_DUAL_ENDSTOPS_ADJUSTMENT is now [XYZ]2_ENDSTOP_ADJUSTMENT." +#elif defined(Z_TRIPLE_ENDSTOPS_ADJUSTMENT2) || defined(Z_TRIPLE_ENDSTOPS_ADJUSTMENT3) + #error "Z_TRIPLE_ENDSTOPS_ADJUSTMENT[23] is now Z[23]_ENDSTOP_ADJUSTMENT." +#elif defined(Z_QUAD_ENDSTOPS_ADJUSTMENT2) || defined(Z_QUAD_ENDSTOPS_ADJUSTMENT3) || defined(Z_QUAD_ENDSTOPS_ADJUSTMENT4) + #error "Z_QUAD_ENDSTOPS_ADJUSTMENT[234] is now Z[234]_ENDSTOP_ADJUSTMENT." +#elif defined(Z_DUAL_STEPPER_DRIVERS) + #error "Z_DUAL_STEPPER_DRIVERS is no longer needed and should be removed." +#elif defined(Z_TRIPLE_STEPPER_DRIVERS) + #error "Z_TRIPLE_STEPPER_DRIVERS is no longer needed and should be removed." +#elif defined(Z_QUAD_STEPPER_DRIVERS) + #error "Z_QUAD_STEPPER_DRIVERS is no longer needed and should be removed." +#elif defined(Z_DUAL_ENDSTOPS) || defined(Z_TRIPLE_ENDSTOPS) || defined(Z_QUAD_ENDSTOPS) + #error "Z_(DUAL|TRIPLE|QUAD)_ENDSTOPS is now Z_MULTI_ENDSTOPS." +#elif defined(DUGS_UI_MOVE_DIS_OPTION) + #error "DUGS_UI_MOVE_DIS_OPTION is spelled DGUS_UI_MOVE_DIS_OPTION." +#elif defined(ORIG_E0_AUTO_FAN_PIN) || defined(ORIG_E1_AUTO_FAN_PIN) || defined(ORIG_E2_AUTO_FAN_PIN) || defined(ORIG_E3_AUTO_FAN_PIN) || defined(ORIG_E4_AUTO_FAN_PIN) || defined(ORIG_E5_AUTO_FAN_PIN) || defined(ORIG_E6_AUTO_FAN_PIN) || defined(ORIG_E7_AUTO_FAN_PIN) + #error "ORIG_Ex_AUTO_FAN_PIN is now just Ex_AUTO_FAN_PIN." +#elif defined(ORIG_CHAMBER_AUTO_FAN_PIN) + #error "ORIG_CHAMBER_AUTO_FAN_PIN is now just CHAMBER_AUTO_FAN_PIN." +#elif defined(HOMING_BACKOFF_MM) + #error "HOMING_BACKOFF_MM is now HOMING_BACKOFF_POST_MM." +#elif defined(X_HOME_BUMP_MM) || defined(Y_HOME_BUMP_MM) || defined(Z_HOME_BUMP_MM) + #error "[XYZ]_HOME_BUMP_MM is now HOMING_BUMP_MM." +#elif defined(DIGIPOT_I2C) + #error "DIGIPOT_I2C is now DIGIPOT_MCP4451 (or DIGIPOT_MCP4018)." +#elif defined(TOUCH_BUTTONS) + #error "TOUCH_BUTTONS is now TOUCH_SCREEN." +#elif defined(LCD_FULL_PIXEL_HEIGHT) || defined(LCD_FULL_PIXEL_WIDTH) + #error "LCD_FULL_PIXEL_(WIDTH|HEIGHT) is deprecated and should be removed." +#elif defined(FSMC_UPSCALE) + #error "FSMC_UPSCALE is now GRAPHICAL_TFT_UPSCALE." +#elif defined(ANYCUBIC_TFT_MODEL) + #error "ANYCUBIC_TFT_MODEL is now ANYCUBIC_LCD_I3MEGA." +#elif defined(EVENT_GCODE_SD_STOP) + #error "EVENT_GCODE_SD_STOP is now EVENT_GCODE_SD_ABORT." +#elif defined(GRAPHICAL_TFT_ROTATE_180) + #error "GRAPHICAL_TFT_ROTATE_180 is now TFT_ROTATION set to TFT_ROTATE_180." +#elif defined(PROBE_OFFSET_START) + #error "PROBE_OFFSET_START is now PROBE_OFFSET_WIZARD_START_Z." +#elif defined(POWER_LOSS_PULL) + #error "POWER_LOSS_PULL is now specifically POWER_LOSS_PULL(UP|DOWN)." +#elif defined(SHORT_MANUAL_Z_MOVE) + #error "SHORT_MANUAL_Z_MOVE is now FINE_MANUAL_MOVE, applying to Z on most printers." +#elif defined(FIL_RUNOUT_INVERTING) + #if FIL_RUNOUT_INVERTING + #error "FIL_RUNOUT_INVERTING true is now FIL_RUNOUT_STATE HIGH." + #else + #error "FIL_RUNOUT_INVERTING false is now FIL_RUNOUT_STATE LOW." + #endif +#elif defined(ASSISTED_TRAMMING_MENU_ITEM) + #error "ASSISTED_TRAMMING_MENU_ITEM is deprecated and should be removed." +#elif defined(UNKNOWN_Z_NO_RAISE) + #error "UNKNOWN_Z_NO_RAISE is replaced by setting Z_IDLE_HEIGHT to Z_MAX_POS." +#elif defined(Z_AFTER_DEACTIVATE) + #error "Z_AFTER_DEACTIVATE is replaced by Z_IDLE_HEIGHT." +#elif defined(MEATPACK) + #error "MEATPACK is now enabled with MEATPACK_ON_SERIAL_PORT_1, MEATPACK_ON_SERIAL_PORT_2, etc." +#elif defined(CUSTOM_USER_MENUS) + #error "CUSTOM_USER_MENUS has been replaced by CUSTOM_MENU_MAIN and CUSTOM_MENU_CONFIG." +#elif defined(MKS_LCD12864) + #error "MKS_LCD12864 is now MKS_LCD12864A or MKS_LCD12864B." +#elif defined(DOGM_SD_PERCENT) + #error "DOGM_SD_PERCENT is now SHOW_PROGRESS_PERCENT." +#elif defined(NEOPIXEL_BKGD_LED_INDEX) + #error "NEOPIXEL_BKGD_LED_INDEX is now NEOPIXEL_BKGD_INDEX_FIRST." +#elif defined(TEMP_SENSOR_1_AS_REDUNDANT) + #error "TEMP_SENSOR_1_AS_REDUNDANT is now TEMP_SENSOR_REDUNDANT, with associated TEMP_SENSOR_REDUNDANT_* config." +#elif defined(MAX_REDUNDANT_TEMP_SENSOR_DIFF) + #error "MAX_REDUNDANT_TEMP_SENSOR_DIFF is now TEMP_SENSOR_REDUNDANT_MAX_DIFF" +#elif defined(LCD_ALEPHOBJECTS_CLCD_UI) + #error "LCD_ALEPHOBJECTS_CLCD_UI is now LCD_LULZBOT_CLCD_UI." +#elif defined(MIN_ARC_SEGMENTS) + #error "MIN_ARC_SEGMENTS is now MIN_CIRCLE_SEGMENTS." +#elif defined(ARC_SEGMENTS_PER_R) + #error "ARC_SUPPORT no longer uses ARC_SEGMENTS_PER_R." +#elif ENABLED(ARC_SUPPORT) && (!defined(MIN_ARC_SEGMENT_MM) || !defined(MAX_ARC_SEGMENT_MM)) + #error "ARC_SUPPORT now requires MIN_ARC_SEGMENT_MM and MAX_ARC_SEGMENT_MM." +#elif defined(LASER_POWER_INLINE) + #error "LASER_POWER_INLINE is obsolete." +#elif defined(SPINDLE_LASER_PWM) + #error "SPINDLE_LASER_PWM (true) is now set with SPINDLE_LASER_USE_PWM (enabled)." +#elif ANY(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) + #error "The IS_RAMPS_* conditionals (for heater/fan/bed pins) are now called FET_ORDER_*." +#elif defined(PROBE_TEMP_COMPENSATION) + #error "PROBE_TEMP_COMPENSATION is now set using the PTC_PROBE, PTC_BED, PTC_HOTEND options." +#elif defined(BTC_PROBE_TEMP) + #error "BTC_PROBE_TEMP is now PTC_PROBE_TEMP." +#elif defined(LCD_SCREEN_ROT_90) + #error "LCD_SCREEN_ROT_90 is now LCD_SCREEN_ROTATE with a value of 90." +#elif defined(LCD_SCREEN_ROT_180) + #error "LCD_SCREEN_ROT_180 is now LCD_SCREEN_ROTATE with a value of 180." +#elif defined(LCD_SCREEN_ROT_270) + #error "LCD_SCREEN_ROT_270 is now LCD_SCREEN_ROTATE with a value of 270." +#elif defined(DEFAULT_LCD_BRIGHTNESS) + #error "DEFAULT_LCD_BRIGHTNESS is now LCD_BRIGHTNESS_DEFAULT." +#elif defined(NOZZLE_PARK_X_ONLY) + #error "NOZZLE_PARK_X_ONLY is now NOZZLE_PARK_MOVE 1." +#elif defined(NOZZLE_PARK_Y_ONLY) + #error "NOZZLE_PARK_Y_ONLY is now NOZZLE_PARK_MOVE 2." +#elif defined(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #error "Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS is now just Z_STEPPER_ALIGN_STEPPER_XY." +#elif defined(DWIN_CREALITY_LCD_ENHANCED) + #error "DWIN_CREALITY_LCD_ENHANCED is now DWIN_LCD_PROUI." +#elif defined(LINEAR_AXES) + #error "LINEAR_AXES is now NUM_AXES (to account for rotational axes)." +#elif defined(X_DUAL_STEPPER_DRIVERS) + #error "X_DUAL_STEPPER_DRIVERS is no longer needed and should be removed." +#elif defined(Y_DUAL_STEPPER_DRIVERS) + #error "Y_DUAL_STEPPER_DRIVERS is no longer needed and should be removed." +#elif defined(NUM_Z_STEPPER_DRIVERS) + #error "NUM_Z_STEPPER_DRIVERS is no longer needed and should be removed." +#elif defined(LEVEL_BED_CORNERS) + #error "LEVEL_BED_CORNERS is now LCD_BED_TRAMMING." +#elif defined(LEVEL_CORNERS_INSET_LFRB) || defined(LEVEL_CORNERS_HEIGHT) || defined(LEVEL_CORNERS_Z_HOP) || defined(LEVEL_CORNERS_USE_PROBE) || defined(LEVEL_CORNERS_PROBE_TOLERANCE) || defined(LEVEL_CORNERS_VERIFY_RAISED) || defined(LEVEL_CORNERS_AUDIO_FEEDBACK) + #error "LEVEL_CORNERS_* settings have been renamed BED_TRAMMING_*." +#elif defined(LEVEL_CENTER_TOO) + #error "LEVEL_CENTER_TOO is now BED_TRAMMING_INCLUDE_CENTER." +#elif defined(TOUCH_IDLE_SLEEP) + #error "TOUCH_IDLE_SLEEP (seconds) is now TOUCH_IDLE_SLEEP_MINS (minutes)." +#elif defined(LCD_BACKLIGHT_TIMEOUT) + #error "LCD_BACKLIGHT_TIMEOUT (seconds) is now LCD_BACKLIGHT_TIMEOUT_MINS (minutes)." +#elif defined(LCD_SET_PROGRESS_MANUALLY) + #error "LCD_SET_PROGRESS_MANUALLY is now SET_PROGRESS_MANUALLY." +#elif defined(USE_M73_REMAINING_TIME) + #error "USE_M73_REMAINING_TIME is now SET_REMAINING_TIME." +#elif defined(SHOW_SD_PERCENT) + #error "SHOW_SD_PERCENT is now SHOW_PROGRESS_PERCENT." +#elif defined(LIN_ADVANCE_K) + #error "LIN_ADVANCE_K is now ADVANCE_K." +#elif defined(EXTRA_LIN_ADVANCE_K) + #error "EXTRA_LIN_ADVANCE_K is now ADVANCE_K_EXTRA." +#elif defined(POLAR_SEGMENTS_PER_SECOND) || defined(DELTA_SEGMENTS_PER_SECOND) || defined(SCARA_SEGMENTS_PER_SECOND) || defined(TPARA_SEGMENTS_PER_SECOND) + #error "(POLAR|DELTA|SCARA|TPARA)_SEGMENTS_PER_SECOND is now DEFAULT_SEGMENTS_PER_SECOND." +#elif defined(TMC_SW_MOSI) || defined(TMC_SW_MISO) || defined(TMC_SW_SCK) + #error "TMC_SW_(MOSI|MISO|SCK) is now TMC_SPI_(MOSI|MISO|SCK)." +#elif ANY(DGUS_LCD_UI_ORIGIN, DGUS_LCD_UI_FYSETC, DGUS_LCD_UI_HIPRECY, DGUS_LCD_UI_MKS, DGUS_LCD_UI_RELOADED) && !defined(DGUS_LCD_UI) + #error "DGUS_LCD_UI_[TYPE] is now set using DGUS_LCD_UI TYPE." +#elif defined(DELTA_PRINTABLE_RADIUS) + #error "DELTA_PRINTABLE_RADIUS is now PRINTABLE_RADIUS." +#elif defined(SCARA_PRINTABLE_RADIUS) + #error "SCARA_PRINTABLE_RADIUS is now PRINTABLE_RADIUS." +#elif defined(SCARA_FEEDRATE_SCALING) + #error "SCARA_FEEDRATE_SCALING is now FEEDRATE_SCALING." +#elif defined(MILLISECONDS_PREHEAT_TIME) + #error "MILLISECONDS_PREHEAT_TIME is now PREHEAT_TIME_HOTEND_MS." +#elif defined(EXPERIMENTAL_SCURVE) + #error "EXPERIMENTAL_SCURVE is no longer needed and should be removed." +#elif defined(BABYSTEP_ZPROBE_GFX_OVERLAY) + #error "BABYSTEP_ZPROBE_GFX_OVERLAY is now BABYSTEP_GFX_OVERLAY." +#elif defined(DISABLE_INACTIVE_EXTRUDER) + #error "DISABLE_INACTIVE_EXTRUDER is now DISABLE_OTHER_EXTRUDERS." +#elif defined(INVERT_X_STEP_PIN) || defined(INVERT_Y_STEP_PIN) || defined(INVERT_Z_STEP_PIN) || defined(INVERT_I_STEP_PIN) || defined(INVERT_J_STEP_PIN) || defined(INVERT_K_STEP_PIN) || defined(INVERT_U_STEP_PIN) || defined(INVERT_V_STEP_PIN) || defined(INVERT_W_STEP_PIN) || defined(INVERT_E_STEP_PIN) + #error "INVERT_*_STEP_PIN true is now STEP_STATE_* LOW, and INVERT_*_STEP_PIN false is now STEP_STATE_* HIGH." +#elif defined(PROBE_PT_1_X) || defined(PROBE_PT_1_Y) || defined(PROBE_PT_2_X) || defined(PROBE_PT_2_Y) || defined(PROBE_PT_3_X) || defined(PROBE_PT_3_Y) + #error "PROBE_PT_[123]_[XY] is now defined using PROBE_PT_[123] with an array { x, y }." +#elif defined(SQUARE_WAVE_STEPPING) + #error "SQUARE_WAVE_STEPPING is now EDGE_STEPPING." +#elif defined(FAN_PIN) + #error "FAN_PIN is now FAN0_PIN." +#elif defined(X_MIN_ENDSTOP_INVERTING) || defined(Y_MIN_ENDSTOP_INVERTING) || defined(Z_MIN_ENDSTOP_INVERTING) \ + || defined(I_MIN_ENDSTOP_INVERTING) || defined(J_MIN_ENDSTOP_INVERTING) || defined(K_MIN_ENDSTOP_INVERTING) \ + || defined(U_MIN_ENDSTOP_INVERTING) || defined(V_MIN_ENDSTOP_INVERTING) || defined(W_MIN_ENDSTOP_INVERTING) \ + || defined(X_MAX_ENDSTOP_INVERTING) || defined(Y_MAX_ENDSTOP_INVERTING) || defined(Z_MAX_ENDSTOP_INVERTING) \ + || defined(I_MAX_ENDSTOP_INVERTING) || defined(J_MAX_ENDSTOP_INVERTING) || defined(K_MAX_ENDSTOP_INVERTING) \ + || defined(U_MAX_ENDSTOP_INVERTING) || defined(V_MAX_ENDSTOP_INVERTING) || defined(W_MAX_ENDSTOP_INVERTING) \ + || defined(Z_MIN_PROBE_ENDSTOP_INVERTING) + #error "*_ENDSTOP_INVERTING false/true is now set with *_ENDSTOP_HIT_STATE HIGH/LOW." +#elif defined(DISABLE_INACTIVE_X) || defined(DISABLE_INACTIVE_Y) || defined(DISABLE_INACTIVE_Z) \ + || defined(DISABLE_INACTIVE_I) || defined(DISABLE_INACTIVE_J) || defined(DISABLE_INACTIVE_K) \ + || defined(DISABLE_INACTIVE_U) || defined(DISABLE_INACTIVE_V) || defined(DISABLE_INACTIVE_W) || defined(DISABLE_INACTIVE_E) + #error "DISABLE_INACTIVE_[XYZIJKUVWE] is now DISABLE_IDLE_[XYZIJKUVWE]." +#elif defined(DEFAULT_STEPPER_DEACTIVE_TIME) + #error "DEFAULT_STEPPER_DEACTIVE_TIME is now DEFAULT_STEPPER_TIMEOUT_SEC." +#elif defined(TFT_SHARED_SPI) + #error "TFT_SHARED_SPI is now TFT_SHARED_IO." +#elif defined(LCD_PINS_ENABLE) + #error "LCD_PINS_ENABLE is now LCD_PINS_EN." +#elif ANY(USE_XMIN_PLUG, USE_XMAX_PLUG, USE_YMIN_PLUG, USE_YMAX_PLUG, USE_ZMIN_PLUG, USE_ZMAX_PLUG, \ + USE_IMIN_PLUG, USE_IMAX_PLUG, USE_JMIN_PLUG, USE_JMAX_PLUG, USE_KMIN_PLUG, USE_KMAX_PLUG, \ + USE_UMIN_PLUG, USE_UMAX_PLUG, USE_VMIN_PLUG, USE_VMAX_PLUG, USE_WMIN_PLUG, USE_WMAX_PLUG) + #error "USE_*_PLUG settings are no longer needed and should be removed." +#elif defined(X2_USE_ENDSTOP) + #error "X2_USE_ENDSTOP is obsolete. Instead set X2_STOP_PIN directly. (e.g., 'X2_USE_ENDSTOP _XMAX_' becomes 'X2_STOP_PIN X_MAX_PIN')" +#elif defined(Y2_USE_ENDSTOP) + #error "Y2_USE_ENDSTOP is obsolete. Instead set Y2_STOP_PIN directly. (e.g., 'Y2_USE_ENDSTOP _YMAX_' becomes 'Y2_STOP_PIN Y_MAX_PIN')" +#elif defined(Z2_USE_ENDSTOP) + #error "Z2_USE_ENDSTOP is obsolete. Instead set Z2_STOP_PIN directly. (e.g., 'Z2_USE_ENDSTOP _ZMAX_' becomes 'Z2_STOP_PIN Z_MAX_PIN')" +#elif defined(Z3_USE_ENDSTOP) + #error "Z3_USE_ENDSTOP is obsolete. Instead set Z2_STOP_PIN directly. (e.g., 'Z3_USE_ENDSTOP _ZMAX_' becomes 'Z3_STOP_PIN Z_MAX_PIN')" +#elif defined(Z4_USE_ENDSTOP) + #error "Z4_USE_ENDSTOP is obsolete. Instead set Z4_STOP_PIN directly. (e.g., 'Z4_USE_ENDSTOP _ZMAX_' becomes 'Z4_STOP_PIN Z_MAX_PIN')" +#endif + +// L64xx stepper drivers have been removed +#define _L6470 0x6470 +#define _L6474 0x6474 +#define _L6480 0x6480 +#define _POWERSTEP01 0xF00D +#if HAS_DRIVER(L6470) + #error "L6470 stepper drivers are no longer supported in Marlin." +#elif HAS_DRIVER(L6474) + #error "L6474 stepper drivers are no longer supported in Marlin." +#elif HAS_DRIVER(L6480) + #error "L6480 stepper drivers are no longer supported in Marlin." +#elif HAS_DRIVER(POWERSTEP01) + #error "POWERSTEP01 stepper drivers are no longer supported in Marlin." +#endif +#undef _L6470 +#undef _L6474 +#undef _L6480 +#undef _POWERSTEP01 diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index 5cc1d07b095f..44072ef4a2a9 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -26,6 +26,10 @@ * Conditionals that need to be set before Configuration_adv.h or pins.h */ +#if ENABLED(SDSUPPORT) + #define HAS_MEDIA 1 +#endif + // MKS_LCD12864A/B is a variant of MKS_MINI_12864 #if EITHER(MKS_LCD12864A, MKS_LCD12864B) #define MKS_MINI_12864 @@ -217,7 +221,7 @@ #define IS_TFTGLCD_PANEL 1 #define IS_ULTIPANEL 1 // Note that IS_ULTIPANEL leads to HAS_WIRED_LCD - #if ENABLED(SDSUPPORT) && DISABLED(LCD_PROGRESS_BAR) + #if HAS_MEDIA && DISABLED(LCD_PROGRESS_BAR) #define LCD_PROGRESS_BAR #endif #if ENABLED(TFTGLCD_PANEL_I2C) @@ -324,24 +328,22 @@ #define IS_ULTIPANEL 1 #endif -// TFT Legacy Compatibility +// TFT Legacy options masquerade as TFT_GENERIC #if ANY(FSMC_GRAPHICAL_TFT, SPI_GRAPHICAL_TFT, TFT_320x240, TFT_480x320, TFT_320x240_SPI, TFT_480x320_SPI, TFT_LVGL_UI_FSMC, TFT_LVGL_UI_SPI) #define IS_LEGACY_TFT 1 #define TFT_GENERIC -#endif - -#if ANY(FSMC_GRAPHICAL_TFT, TFT_320x240, TFT_480x320, TFT_LVGL_UI_FSMC) - #define TFT_INTERFACE_FSMC -#elif ANY(SPI_GRAPHICAL_TFT, TFT_320x240_SPI, TFT_480x320_SPI, TFT_LVGL_UI_SPI) - #define TFT_INTERFACE_SPI -#endif - -#if EITHER(FSMC_GRAPHICAL_TFT, SPI_GRAPHICAL_TFT) - #define TFT_CLASSIC_UI -#elif ANY(TFT_320x240, TFT_480x320, TFT_320x240_SPI, TFT_480x320_SPI) - #define TFT_COLOR_UI -#elif EITHER(TFT_LVGL_UI_FSMC, TFT_LVGL_UI_SPI) - #define TFT_LVGL_UI + #if ANY(FSMC_GRAPHICAL_TFT, TFT_320x240, TFT_480x320, TFT_LVGL_UI_FSMC) + #define TFT_INTERFACE_FSMC + #elif ANY(SPI_GRAPHICAL_TFT, TFT_320x240_SPI, TFT_480x320_SPI, TFT_LVGL_UI_SPI) + #define TFT_INTERFACE_SPI + #endif + #if EITHER(FSMC_GRAPHICAL_TFT, SPI_GRAPHICAL_TFT) + #define TFT_CLASSIC_UI + #elif ANY(TFT_320x240, TFT_480x320, TFT_320x240_SPI, TFT_480x320_SPI) + #define TFT_COLOR_UI + #elif EITHER(TFT_LVGL_UI_FSMC, TFT_LVGL_UI_SPI) + #define TFT_LVGL_UI + #endif #endif // FSMC/SPI TFT Panels (LVGL) @@ -484,13 +486,8 @@ #endif #endif -// Serial Controllers require LCD_SERIAL_PORT -#if ANY(HAS_DGUS_LCD, MALYAN_LCD, ANYCUBIC_LCD_I3MEGA, ANYCUBIC_LCD_CHIRON, NEXTION_TFT) - #define LCD_NEEDS_SERIAL_PORT 1 -#endif - // Extensible UI serial touch screens. (See src/lcd/extui) -#if EITHER(LCD_NEEDS_SERIAL_PORT, TOUCH_UI_FTDI_EVE) +#if ANY(HAS_DGUS_LCD, MALYAN_LCD, ANYCUBIC_LCD_I3MEGA, ANYCUBIC_LCD_CHIRON, NEXTION_TFT, TOUCH_UI_FTDI_EVE) #define IS_EXTUI 1 #define EXTENSIBLE_UI #endif @@ -502,18 +499,22 @@ #if EITHER(HAS_DWIN_E3V2_BASIC, DWIN_CREALITY_LCD_JYERSUI) #define HAS_DWIN_E3V2 1 #endif -#if ENABLED(DWIN_LCD_PROUI) - #define DO_LIST_BIN_FILES 1 -#endif // E3V2 extras #if HAS_DWIN_E3V2 || IS_DWIN_MARLINUI #define SERIAL_CATCHALL 0 #define HAS_LCD_BRIGHTNESS 1 #define LCD_BRIGHTNESS_MAX 250 - #if ENABLED(DWIN_LCD_PROUI) - #define LCD_BRIGHTNESS_DEFAULT 127 - #endif +#endif + +#if ENABLED(DWIN_LCD_PROUI) + #define DO_LIST_BIN_FILES 1 + #define LCD_BRIGHTNESS_DEFAULT 127 +#endif + +// Serial Controllers require LCD_SERIAL_PORT +#if ANY(IS_DWIN_MARLINUI, HAS_DWIN_E3V2, HAS_DGUS_LCD, MALYAN_LCD, ANYCUBIC_LCD_I3MEGA, ANYCUBIC_LCD_CHIRON, NEXTION_TFT) + #define LCD_IS_SERIAL_HOST 1 #endif #if HAS_WIRED_LCD @@ -537,6 +538,10 @@ #define HAS_LCDPRINT 1 #endif +#if HAS_DISPLAY || HAS_LCDPRINT + #define HAS_UTF8_UTILS 1 +#endif + #if HAS_DISPLAY || HAS_DWIN_E3V2 #define HAS_STATUS_MESSAGE 1 #endif @@ -624,8 +629,6 @@ #undef MIXING_EXTRUDER #undef HOTEND_IDLE_TIMEOUT #undef DISABLE_E - #undef THERMAL_PROTECTION_HOTENDS - #undef PREVENT_COLD_EXTRUSION #undef PREVENT_LENGTHY_EXTRUDE #undef FILAMENT_RUNOUT_SENSOR #undef FILAMENT_RUNOUT_DISTANCE_MM @@ -657,9 +660,6 @@ #else #define E_STEPPERS 1 #endif - #if !HAS_SWITCHING_NOZZLE - #define HOTENDS E_STEPPERS - #endif #elif ENABLED(MIXING_EXTRUDER) // Multiple feeds are mixed proportionally @@ -691,16 +691,7 @@ #define SINGLENOZZLE #endif -#if EITHER(SINGLENOZZLE, MIXING_EXTRUDER) // One hotend, one thermistor, no XY offset - #undef HOTENDS - #define HOTENDS 1 - #undef HOTEND_OFFSET_X - #undef HOTEND_OFFSET_Y -#endif - -#ifndef HOTENDS - #define HOTENDS EXTRUDERS -#endif +// Default E steppers / manual motion is one per extruder #ifndef E_STEPPERS #define E_STEPPERS EXTRUDERS #endif @@ -708,6 +699,45 @@ #define E_MANUAL EXTRUDERS #endif +// Number of hotends... +#if EITHER(SINGLENOZZLE, MIXING_EXTRUDER) // Only one for singlenozzle or mixing extruder + #define HOTENDS 1 +#elif HAS_SWITCHING_EXTRUDER && !HAS_SWITCHING_NOZZLE // One for each pair of abstract "extruders" + #define HOTENDS E_STEPPERS +#elif TEMP_SENSOR_0 + #define HOTENDS EXTRUDERS // One per extruder if at least one heater exists +#else + #define HOTENDS 0 // A machine with no hotends at all can still extrude +#endif + +// More than one hotend... +#if HOTENDS > 1 + #define HAS_MULTI_HOTEND 1 + #define HAS_HOTEND_OFFSET 1 + #ifndef HOTEND_OFFSET_X + #define HOTEND_OFFSET_X { 0 } // X offsets for each extruder + #endif + #ifndef HOTEND_OFFSET_Y + #define HOTEND_OFFSET_Y { 0 } // Y offsets for each extruder + #endif + #ifndef HOTEND_OFFSET_Z + #define HOTEND_OFFSET_Z { 0 } // Z offsets for each extruder + #endif +#else + #undef HOTEND_OFFSET_X + #undef HOTEND_OFFSET_Y + #undef HOTEND_OFFSET_Z +#endif + +// At least one hotend... +#if HOTENDS + #define HAS_HOTEND 1 + #ifndef HOTEND_OVERSHOOT + #define HOTEND_OVERSHOOT 15 + #endif +#endif + +// Clean up E-stepper-based settings... #if E_STEPPERS <= 7 #undef INVERT_E7_DIR #undef E7_DRIVER_TYPE @@ -1037,19 +1067,6 @@ #define E_INDEX_N(E) 0 #endif -#if HOTENDS - #define HAS_HOTEND 1 - #ifndef HOTEND_OVERSHOOT - #define HOTEND_OVERSHOOT 15 - #endif - #if HOTENDS > 1 - #define HAS_MULTI_HOTEND 1 - #define HAS_HOTEND_OFFSET 1 - #endif -#else - #undef PID_PARAMS_PER_HOTEND -#endif - // Helper macros for extruder and hotend arrays #define _EXTRUDER_LOOP(E) for (int8_t E = 0; E < EXTRUDERS; E++) #define EXTRUDER_LOOP() _EXTRUDER_LOOP(e) @@ -1061,21 +1078,6 @@ #define ARRAY_BY_HOTENDS(V...) ARRAY_N(HOTENDS, V) #define ARRAY_BY_HOTENDS1(v1) ARRAY_N_1(HOTENDS, v1) -/** - * Default hotend offsets, if not defined - */ -#if HAS_HOTEND_OFFSET - #ifndef HOTEND_OFFSET_X - #define HOTEND_OFFSET_X { 0 } // X offsets for each extruder - #endif - #ifndef HOTEND_OFFSET_Y - #define HOTEND_OFFSET_Y { 0 } // Y offsets for each extruder - #endif - #ifndef HOTEND_OFFSET_Z - #define HOTEND_OFFSET_Z { 0 } // Z offsets for each extruder - #endif -#endif - /** * Disable unused SINGLENOZZLE sub-options */ @@ -1667,7 +1669,7 @@ #endif #if ANY(HAS_SPI_TFT, HAS_FSMC_TFT, HAS_LTDC_TFT) - #include "../lcd/tft_io/tft_orientation.h" + #include "../lcd/tft_io/tft_orientation.h" // for TFT_COLOR_UI_PORTRAIT #endif #if ENABLED(TFT_RES_320x240) @@ -1771,17 +1773,6 @@ #endif #endif -// XPT2046_** Compatibility -#if !(defined(TOUCH_CALIBRATION_X) || defined(TOUCH_CALIBRATION_Y) || defined(TOUCH_OFFSET_X) || defined(TOUCH_OFFSET_Y) || defined(TOUCH_ORIENTATION)) - #if defined(XPT2046_X_CALIBRATION) && defined(XPT2046_Y_CALIBRATION) && defined(XPT2046_X_OFFSET) && defined(XPT2046_Y_OFFSET) - #define TOUCH_CALIBRATION_X XPT2046_X_CALIBRATION - #define TOUCH_CALIBRATION_Y XPT2046_Y_CALIBRATION - #define TOUCH_OFFSET_X XPT2046_X_OFFSET - #define TOUCH_OFFSET_Y XPT2046_Y_OFFSET - #define TOUCH_ORIENTATION TOUCH_LANDSCAPE - #endif -#endif - #if X_HOME_DIR || (HAS_Y_AXIS && Y_HOME_DIR) || (HAS_Z_AXIS && Z_HOME_DIR) \ || (HAS_I_AXIS && I_HOME_DIR) || (HAS_J_AXIS && J_HOME_DIR) || (HAS_K_AXIS && K_HOME_DIR) \ || (HAS_U_AXIS && U_HOME_DIR) || (HAS_V_AXIS && V_HOME_DIR) || (HAS_W_AXIS && W_HOME_DIR) @@ -1797,3 +1788,7 @@ #if defined(NEOPIXEL_BKGD_INDEX_FIRST) && !defined(NEOPIXEL_BKGD_INDEX_LAST) #define NEOPIXEL_BKGD_INDEX_LAST NEOPIXEL_BKGD_INDEX_FIRST #endif + +#if ALL(SPI_FLASH, HAS_MEDIA, MARLIN_DEV_MODE) + #define SPI_FLASH_BACKUP 1 +#endif diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index 3a3daa84acf4..1772430dc493 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -184,7 +184,6 @@ #if !HAS_EXTRUDERS #define NO_VOLUMETRICS #undef ADVANCED_PAUSE_FEATURE - #undef AUTOTEMP #undef DISABLE_IDLE_E #undef EXTRUDER_RUNOUT_PREVENT #undef FILAMENT_LOAD_UNLOAD_GCODES @@ -193,11 +192,8 @@ #undef LIN_ADVANCE #undef MANUAL_E_MOVES_RELATIVE #undef PID_EXTRUSION_SCALING - #undef PIDTEMP #undef SHOW_TEMP_ADC_VALUES #undef STEALTHCHOP_E - #undef THERMAL_PROTECTION_PERIOD - #undef WATCH_TEMP_PERIOD #endif #if ENABLED(DISABLE_X) && !defined(DISABLE_IDLE_X) @@ -237,22 +233,47 @@ #endif #undef _OR_HAS_DI -#if HOTENDS <= 7 +// Remove hotend-dependent settings +#if HOTENDS < 8 #undef E7_AUTO_FAN_PIN - #if HOTENDS <= 6 + #undef HEATER_7_MAXTEMP + #undef HEATER_7_MINTEMP + #if HOTENDS < 7 #undef E6_AUTO_FAN_PIN - #if HOTENDS <= 5 + #undef HEATER_6_MAXTEMP + #undef HEATER_6_MINTEMP + #if HOTENDS < 6 #undef E5_AUTO_FAN_PIN - #if HOTENDS <= 4 + #undef HEATER_5_MAXTEMP + #undef HEATER_5_MINTEMP + #if HOTENDS < 5 #undef E4_AUTO_FAN_PIN - #if HOTENDS <= 3 + #undef HEATER_4_MAXTEMP + #undef HEATER_4_MINTEMP + #if HOTENDS < 4 #undef E3_AUTO_FAN_PIN - #if HOTENDS <= 2 + #undef HEATER_3_MAXTEMP + #undef HEATER_3_MINTEMP + #if HOTENDS < 3 #undef E2_AUTO_FAN_PIN - #if HOTENDS <= 1 + #undef HEATER_2_MAXTEMP + #undef HEATER_2_MINTEMP + #if HOTENDS < 2 #undef E1_AUTO_FAN_PIN - #if HOTENDS == 0 + #undef HEATER_1_MAXTEMP + #undef HEATER_1_MINTEMP + #if HOTENDS < 1 + #undef AUTOTEMP #undef E0_AUTO_FAN_PIN + #undef HEATER_0_MAXTEMP + #undef HEATER_0_MINTEMP + #undef PID_PARAMS_PER_HOTEND + #undef PIDTEMP + #undef MPCTEMP + #undef PREVENT_COLD_EXTRUSION + #undef THERMAL_PROTECTION_HOTENDS + #undef THERMAL_PROTECTION_PERIOD + #undef WATCH_TEMP_PERIOD #endif #endif #endif @@ -267,7 +288,8 @@ */ // Temperature sensor IDs -#define HID_REDUNDANT -6 +#define HID_REDUNDANT -7 +#define HID_SOC -6 #define HID_BOARD -5 #define HID_COOLER -4 #define HID_PROBE -3 @@ -285,9 +307,8 @@ #define _SENSOR_IS(I,N) || (TEMP_SENSOR(N) == I) #define _E_SENSOR_IS(I,N) _SENSOR_IS(N,I) #define ANY_E_SENSOR_IS(N) (0 REPEAT2(HOTENDS, _E_SENSOR_IS, N)) -#define ANY_THERMISTOR_IS(N) ( ANY_E_SENSOR_IS(N) \ - _SENSOR_IS(N,BED) _SENSOR_IS(N,PROBE) _SENSOR_IS(N,CHAMBER) \ - _SENSOR_IS(N,COOLER) _SENSOR_IS(N,BOARD) _SENSOR_IS(N,REDUNDANT) ) +#define ANY_THERMISTOR_IS(N) ( ANY_E_SENSOR_IS(N) _SENSOR_IS(N,REDUNDANT) \ + _SENSOR_IS(N,BED) _SENSOR_IS(N,PROBE) _SENSOR_IS(N,CHAMBER) _SENSOR_IS(N,COOLER) _SENSOR_IS(N,BOARD) ) #if ANY_THERMISTOR_IS(1000) #define HAS_USER_THERMISTORS 1 @@ -325,15 +346,13 @@ #define TEMP_SENSOR_0_IS_AD8495 1 #elif TEMP_SENSOR_0 == -1 #define TEMP_SENSOR_0_IS_AD595 1 -#elif TEMP_SENSOR_0 == 1000 - #define TEMP_SENSOR_0_IS_CUSTOM 1 #elif TEMP_SENSOR_0 == 998 || TEMP_SENSOR_0 == 999 #define TEMP_SENSOR_0_IS_DUMMY 1 #elif TEMP_SENSOR_0 > 0 #define TEMP_SENSOR_0_IS_THERMISTOR 1 -#else - #undef HEATER_0_MINTEMP - #undef HEATER_0_MAXTEMP + #if TEMP_SENSOR_0 == 1000 + #define TEMP_SENSOR_0_IS_CUSTOM 1 + #endif #endif #if TEMP_SENSOR_IS_MAX_TC(1) @@ -370,15 +389,13 @@ #define TEMP_SENSOR_1_IS_AD8495 1 #elif TEMP_SENSOR_1 == -1 #define TEMP_SENSOR_1_IS_AD595 1 -#elif TEMP_SENSOR_1 == 1000 - #define TEMP_SENSOR_1_IS_CUSTOM 1 #elif TEMP_SENSOR_1 == 998 || TEMP_SENSOR_1 == 999 #define TEMP_SENSOR_1_IS_DUMMY 1 #elif TEMP_SENSOR_1 > 0 #define TEMP_SENSOR_1_IS_THERMISTOR 1 -#else - #undef HEATER_1_MINTEMP - #undef HEATER_1_MAXTEMP + #if TEMP_SENSOR_1 == 1000 + #define TEMP_SENSOR_1_IS_CUSTOM 1 + #endif #endif #if TEMP_SENSOR_IS_MAX_TC(2) @@ -415,70 +432,58 @@ #define TEMP_SENSOR_2_IS_AD8495 1 #elif TEMP_SENSOR_2 == -1 #define TEMP_SENSOR_2_IS_AD595 1 -#elif TEMP_SENSOR_2 == 1000 - #define TEMP_SENSOR_2_IS_CUSTOM 1 #elif TEMP_SENSOR_2 == 998 || TEMP_SENSOR_2 == 999 #define TEMP_SENSOR_2_IS_DUMMY 1 #elif TEMP_SENSOR_2 > 0 #define TEMP_SENSOR_2_IS_THERMISTOR 1 -#else - #undef HEATER_2_MINTEMP - #undef HEATER_2_MAXTEMP + #if TEMP_SENSOR_2 == 1000 + #define TEMP_SENSOR_2_IS_CUSTOM 1 + #endif #endif -#if TEMP_SENSOR_3 == 1000 - #define TEMP_SENSOR_3_IS_CUSTOM 1 -#elif TEMP_SENSOR_3 == 998 || TEMP_SENSOR_3 == 999 +#if TEMP_SENSOR_3 == 998 || TEMP_SENSOR_3 == 999 #define TEMP_SENSOR_3_IS_DUMMY 1 #elif TEMP_SENSOR_3 > 0 #define TEMP_SENSOR_3_IS_THERMISTOR 1 -#elif !TEMP_SENSOR_3 - #undef HEATER_3_MINTEMP - #undef HEATER_3_MAXTEMP + #if TEMP_SENSOR_3 == 1000 + #define TEMP_SENSOR_3_IS_CUSTOM 1 + #endif #endif -#if TEMP_SENSOR_4 == 1000 - #define TEMP_SENSOR_4_IS_CUSTOM 1 -#elif TEMP_SENSOR_4 == 998 || TEMP_SENSOR_4 == 999 +#if TEMP_SENSOR_4 == 998 || TEMP_SENSOR_4 == 999 #define TEMP_SENSOR_4_IS_DUMMY 1 #elif TEMP_SENSOR_4 > 0 #define TEMP_SENSOR_4_IS_THERMISTOR 1 -#elif !TEMP_SENSOR_4 - #undef HEATER_4_MINTEMP - #undef HEATER_4_MAXTEMP + #if TEMP_SENSOR_4 == 1000 + #define TEMP_SENSOR_4_IS_CUSTOM 1 + #endif #endif -#if TEMP_SENSOR_5 == 1000 - #define TEMP_SENSOR_5_IS_CUSTOM 1 -#elif TEMP_SENSOR_5 == 998 || TEMP_SENSOR_5 == 999 +#if TEMP_SENSOR_5 == 998 || TEMP_SENSOR_5 == 999 #define TEMP_SENSOR_5_IS_DUMMY 1 #elif TEMP_SENSOR_5 > 0 #define TEMP_SENSOR_5_IS_THERMISTOR 1 -#elif !TEMP_SENSOR_5 - #undef HEATER_5_MINTEMP - #undef HEATER_5_MAXTEMP + #if TEMP_SENSOR_5 == 1000 + #define TEMP_SENSOR_5_IS_CUSTOM 1 + #endif #endif -#if TEMP_SENSOR_6 == 1000 - #define TEMP_SENSOR_6_IS_CUSTOM 1 -#elif TEMP_SENSOR_6 == 998 || TEMP_SENSOR_6 == 999 +#if TEMP_SENSOR_6 == 998 || TEMP_SENSOR_6 == 999 #define TEMP_SENSOR_6_IS_DUMMY 1 #elif TEMP_SENSOR_6 > 0 #define TEMP_SENSOR_6_IS_THERMISTOR 1 -#elif !TEMP_SENSOR_6 - #undef HEATER_6_MINTEMP - #undef HEATER_6_MAXTEMP + #if TEMP_SENSOR_6 == 1000 + #define TEMP_SENSOR_6_IS_CUSTOM 1 + #endif #endif -#if TEMP_SENSOR_7 == 1000 - #define TEMP_SENSOR_7_IS_CUSTOM 1 -#elif TEMP_SENSOR_7 == 998 || TEMP_SENSOR_7 == 999 +#if TEMP_SENSOR_7 == 998 || TEMP_SENSOR_7 == 999 #define TEMP_SENSOR_7_IS_DUMMY 1 #elif TEMP_SENSOR_7 > 0 #define TEMP_SENSOR_7_IS_THERMISTOR 1 -#elif !TEMP_SENSOR_7 - #undef HEATER_7_MINTEMP - #undef HEATER_7_MAXTEMP + #if TEMP_SENSOR_7 == 1000 + #define TEMP_SENSOR_7_IS_CUSTOM 1 + #endif #endif #if TEMP_SENSOR_IS_MAX_TC(REDUNDANT) @@ -542,12 +547,12 @@ #define TEMP_SENSOR_REDUNDANT_IS_AD8495 1 #elif TEMP_SENSOR_REDUNDANT == -1 #define TEMP_SENSOR_REDUNDANT_IS_AD595 1 +#elif TEMP_SENSOR_REDUNDANT == 998 || TEMP_SENSOR_REDUNDANT == 999 + #error "Dummy sensors are not supported for TEMP_SENSOR_REDUNDANT." #elif TEMP_SENSOR_REDUNDANT > 0 #define TEMP_SENSOR_REDUNDANT_IS_THERMISTOR 1 #if TEMP_SENSOR_REDUNDANT == 1000 #define TEMP_SENSOR_REDUNDANT_IS_CUSTOM 1 - #elif TEMP_SENSOR_REDUNDANT == 998 || TEMP_SENSOR_REDUNDANT == 999 - #error "Dummy sensors are not supported for TEMP_SENSOR_REDUNDANT." #endif #endif @@ -572,16 +577,13 @@ #error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_3." #elif TEMP_SENSOR_3 == -1 #define TEMP_SENSOR_3_IS_AD595 1 +#elif TEMP_SENSOR_3 == 998 || TEMP_SENSOR_3 == 999 + #define TEMP_SENSOR_3_IS_DUMMY 1 #elif TEMP_SENSOR_3 > 0 #define TEMP_SENSOR_3_IS_THERMISTOR 1 #if TEMP_SENSOR_3 == 1000 #define TEMP_SENSOR_3_IS_CUSTOM 1 - #elif TEMP_SENSOR_3 == 998 || TEMP_SENSOR_3 == 999 - #define TEMP_SENSOR_3_IS_DUMMY 1 #endif -#else - #undef HEATER_3_MINTEMP - #undef HEATER_3_MAXTEMP #endif #if TEMP_SENSOR_4 == -4 @@ -592,16 +594,13 @@ #error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_4." #elif TEMP_SENSOR_4 == -1 #define TEMP_SENSOR_4_IS_AD595 1 +#elif TEMP_SENSOR_4 == 998 || TEMP_SENSOR_4 == 999 + #define TEMP_SENSOR_4_IS_DUMMY 1 #elif TEMP_SENSOR_4 > 0 #define TEMP_SENSOR_4_IS_THERMISTOR 1 #if TEMP_SENSOR_4 == 1000 #define TEMP_SENSOR_4_IS_CUSTOM 1 - #elif TEMP_SENSOR_4 == 998 || TEMP_SENSOR_4 == 999 - #define TEMP_SENSOR_4_IS_DUMMY 1 #endif -#else - #undef HEATER_4_MINTEMP - #undef HEATER_4_MAXTEMP #endif #if TEMP_SENSOR_5 == -4 @@ -612,16 +611,13 @@ #error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_5." #elif TEMP_SENSOR_5 == -1 #define TEMP_SENSOR_5_IS_AD595 1 +#elif TEMP_SENSOR_5 == 998 || TEMP_SENSOR_5 == 999 + #define TEMP_SENSOR_5_IS_DUMMY 1 #elif TEMP_SENSOR_5 > 0 #define TEMP_SENSOR_5_IS_THERMISTOR 1 #if TEMP_SENSOR_5 == 1000 #define TEMP_SENSOR_5_IS_CUSTOM 1 - #elif TEMP_SENSOR_5 == 998 || TEMP_SENSOR_5 == 999 - #define TEMP_SENSOR_5_IS_DUMMY 1 #endif -#else - #undef HEATER_5_MINTEMP - #undef HEATER_5_MAXTEMP #endif #if TEMP_SENSOR_6 == -4 @@ -632,16 +628,13 @@ #error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_6." #elif TEMP_SENSOR_6 == -1 #define TEMP_SENSOR_6_IS_AD595 1 +#elif TEMP_SENSOR_6 == 998 || TEMP_SENSOR_6 == 999 + #define TEMP_SENSOR_6_IS_DUMMY 1 #elif TEMP_SENSOR_6 > 0 #define TEMP_SENSOR_6_IS_THERMISTOR 1 #if TEMP_SENSOR_6 == 1000 #define TEMP_SENSOR_6_IS_CUSTOM 1 - #elif TEMP_SENSOR_6 == 998 || TEMP_SENSOR_6 == 999 - #define TEMP_SENSOR_6_IS_DUMMY 1 #endif -#else - #undef HEATER_6_MINTEMP - #undef HEATER_6_MAXTEMP #endif #if TEMP_SENSOR_7 == -4 @@ -652,16 +645,13 @@ #error "MAX7775 Thermocouples (-2) not supported for TEMP_SENSOR_7." #elif TEMP_SENSOR_7 == -1 #define TEMP_SENSOR_7_IS_AD595 1 +#elif TEMP_SENSOR_7 == 998 || TEMP_SENSOR_7 == 999 + #define TEMP_SENSOR_7_IS_DUMMY 1 #elif TEMP_SENSOR_7 > 0 #define TEMP_SENSOR_7_IS_THERMISTOR 1 #if TEMP_SENSOR_7 == 1000 #define TEMP_SENSOR_7_IS_CUSTOM 1 - #elif TEMP_SENSOR_7 == 998 || TEMP_SENSOR_7 == 999 - #define TEMP_SENSOR_7_IS_DUMMY 1 #endif -#else - #undef HEATER_7_MINTEMP - #undef HEATER_7_MAXTEMP #endif #if TEMP_SENSOR_BED == -4 @@ -672,12 +662,12 @@ #error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_BED." #elif TEMP_SENSOR_BED == -1 #define TEMP_SENSOR_BED_IS_AD595 1 +#elif TEMP_SENSOR_BED == 998 || TEMP_SENSOR_BED == 999 + #define TEMP_SENSOR_BED_IS_DUMMY 1 #elif TEMP_SENSOR_BED > 0 #define TEMP_SENSOR_BED_IS_THERMISTOR 1 #if TEMP_SENSOR_BED == 1000 #define TEMP_SENSOR_BED_IS_CUSTOM 1 - #elif TEMP_SENSOR_BED == 998 || TEMP_SENSOR_BED == 999 - #define TEMP_SENSOR_BED_IS_DUMMY 1 #endif #else #undef THERMAL_PROTECTION_BED @@ -694,12 +684,12 @@ #error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_CHAMBER." #elif TEMP_SENSOR_CHAMBER == -1 #define TEMP_SENSOR_CHAMBER_IS_AD595 1 +#elif TEMP_SENSOR_CHAMBER == 998 || TEMP_SENSOR_CHAMBER == 999 + #define TEMP_SENSOR_CHAMBER_IS_DUMMY 1 #elif TEMP_SENSOR_CHAMBER > 0 #define TEMP_SENSOR_CHAMBER_IS_THERMISTOR 1 #if TEMP_SENSOR_CHAMBER == 1000 #define TEMP_SENSOR_CHAMBER_IS_CUSTOM 1 - #elif TEMP_SENSOR_CHAMBER == 998 || TEMP_SENSOR_CHAMBER == 999 - #define TEMP_SENSOR_CHAMBER_IS_DUMMY 1 #endif #else #undef THERMAL_PROTECTION_CHAMBER @@ -715,12 +705,12 @@ #error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_COOLER." #elif TEMP_SENSOR_COOLER == -1 #define TEMP_SENSOR_COOLER_IS_AD595 1 +#elif TEMP_SENSOR_COOLER == 998 || TEMP_SENSOR_COOLER == 999 + #define TEMP_SENSOR_COOLER_IS_DUMMY 1 #elif TEMP_SENSOR_COOLER > 0 #define TEMP_SENSOR_COOLER_IS_THERMISTOR 1 #if TEMP_SENSOR_COOLER == 1000 #define TEMP_SENSOR_COOLER_IS_CUSTOM 1 - #elif TEMP_SENSOR_COOLER == 998 || TEMP_SENSOR_COOLER == 999 - #define TEMP_SENSOR_COOLER_IS_DUMMY 1 #endif #else #undef THERMAL_PROTECTION_COOLER @@ -736,12 +726,12 @@ #error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_PROBE." #elif TEMP_SENSOR_PROBE == -1 #define TEMP_SENSOR_PROBE_IS_AD595 1 +#elif TEMP_SENSOR_PROBE == 998 || TEMP_SENSOR_PROBE == 999 + #define TEMP_SENSOR_PROBE_IS_DUMMY 1 #elif TEMP_SENSOR_PROBE > 0 #define TEMP_SENSOR_PROBE_IS_THERMISTOR 1 #if TEMP_SENSOR_PROBE == 1000 #define TEMP_SENSOR_PROBE_IS_CUSTOM 1 - #elif TEMP_SENSOR_PROBE == 998 || TEMP_SENSOR_PROBE == 999 - #define TEMP_SENSOR_PROBE_IS_DUMMY 1 #endif #endif @@ -753,12 +743,12 @@ #error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_BOARD." #elif TEMP_SENSOR_BOARD == -1 #define TEMP_SENSOR_BOARD_IS_AD595 1 +#elif TEMP_SENSOR_BOARD == 998 || TEMP_SENSOR_BOARD == 999 + #define TEMP_SENSOR_BOARD_IS_DUMMY 1 #elif TEMP_SENSOR_BOARD > 0 #define TEMP_SENSOR_BOARD_IS_THERMISTOR 1 #if TEMP_SENSOR_BOARD == 1000 #define TEMP_SENSOR_BOARD_IS_CUSTOM 1 - #elif TEMP_SENSOR_BOARD == 998 || TEMP_SENSOR_BOARD == 999 - #define TEMP_SENSOR_BOARD_IS_DUMMY 1 #endif #endif @@ -804,7 +794,7 @@ #undef MENU_ADDAUTOSTART #endif -#if EITHER(SDSUPPORT, SET_PROGRESS_MANUALLY) +#if EITHER(HAS_MEDIA, SET_PROGRESS_MANUALLY) #define HAS_PRINT_PROGRESS 1 #endif @@ -822,7 +812,7 @@ #define HAS_STATUS_MESSAGE_TIMEOUT 1 #endif -#if ENABLED(SDSUPPORT) && SD_PROCEDURE_DEPTH +#if HAS_MEDIA && SD_PROCEDURE_DEPTH #define HAS_MEDIA_SUBCALLS 1 #endif @@ -860,7 +850,7 @@ #else #undef LED_POWEROFF_TIMEOUT #endif -#if ALL(HAS_RESUME_CONTINUE, PRINTER_EVENT_LEDS, SDSUPPORT) +#if ALL(HAS_RESUME_CONTINUE, PRINTER_EVENT_LEDS, HAS_MEDIA) #define HAS_LEDS_OFF_FLAG 1 #endif #if DISPLAY_SLEEP_MINUTES || TOUCH_IDLE_SLEEP_MINS @@ -1158,7 +1148,7 @@ // SD Card connection methods // Defined here so pins and sanity checks can use them // -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #define _SDCARD_LCD 1 #define _SDCARD_ONBOARD 2 #define _SDCARD_CUSTOM_CABLE 3 @@ -1213,17 +1203,16 @@ #endif /** - * LCD_SERIAL_PORT must be defined ahead of HAL.h + * LCD_SERIAL_PORT must be defined ahead of HAL.h and + * currently HAL.h must be included ahead of pins.h. */ -#ifndef LCD_SERIAL_PORT - #if HAS_DWIN_E3V2 || IS_DWIN_MARLINUI || HAS_DGUS_LCD - #if MB(BTT_SKR_MINI_E3_V1_0, BTT_SKR_MINI_E3_V1_2, BTT_SKR_MINI_E3_V2_0, BTT_SKR_MINI_E3_V3_0, BTT_SKR_E3_TURBO, BTT_OCTOPUS_V1_1) - #define LCD_SERIAL_PORT 1 - #elif MB(CREALITY_V24S1_301, CREALITY_V24S1_301F4, CREALITY_V423, MKS_ROBIN) - #define LCD_SERIAL_PORT 2 // Creality Ender3S1, MKS Robin - #else - #define LCD_SERIAL_PORT 3 // Other boards - #endif +#if LCD_IS_SERIAL_HOST && !defined(LCD_SERIAL_PORT) + #if MB(BTT_SKR_MINI_E3_V1_0, BTT_SKR_MINI_E3_V1_2, BTT_SKR_MINI_E3_V2_0, BTT_SKR_MINI_E3_V3_0, BTT_SKR_E3_TURBO, BTT_OCTOPUS_V1_1) + #define LCD_SERIAL_PORT 1 + #elif MB(CREALITY_V24S1_301, CREALITY_V24S1_301F4, CREALITY_V423, MKS_ROBIN, PANOWIN_CUTLASS, KODAMA_BARDO) + #define LCD_SERIAL_PORT 2 + #else + #define LCD_SERIAL_PORT 3 #endif #ifdef LCD_SERIAL_PORT #define AUTO_ASSIGNED_LCD_SERIAL 1 @@ -1238,22 +1227,11 @@ #endif // AVR are (usually) too limited in resources to store the configuration into the binary -#if ENABLED(CONFIGURATION_EMBEDDING) && !defined(FORCE_CONFIG_EMBED) && (defined(__AVR__) || DISABLED(SDSUPPORT) || EITHER(SDCARD_READONLY, DISABLE_M503)) +#if ENABLED(CONFIGURATION_EMBEDDING) && !defined(FORCE_CONFIG_EMBED) && (defined(__AVR__) || !HAS_MEDIA || EITHER(SDCARD_READONLY, DISABLE_M503)) #undef CONFIGURATION_EMBEDDING #define CANNOT_EMBED_CONFIGURATION defined(__AVR__) #endif -// Fan Kickstart -#if FAN_KICKSTART_TIME && !defined(FAN_KICKSTART_POWER) - #define FAN_KICKSTART_POWER 180 -#endif - -#if FAN_MIN_PWM == 0 && FAN_MAX_PWM == 255 - #define CALC_FAN_SPEED(f) (f ?: FAN_OFF_PWM) -#else - #define CALC_FAN_SPEED(f) (f ? map(f, 1, 255, FAN_MIN_PWM, FAN_MAX_PWM) : FAN_OFF_PWM) -#endif - // Input shaping #if EITHER(INPUT_SHAPING_X, INPUT_SHAPING_Y) #define HAS_ZV_SHAPING 1 diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 96b7313f29d2..7319905ee636 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -65,6 +65,10 @@ #undef IIC_BL24CXX_EEPROM #endif +#if DISABLED(IIC_BL24CXX_EEPROM) + #undef OTA_FIRMWARE_UPDATE +#endif + #ifdef TEENSYDUINO #undef max #define max(a,b) ((a)>(b)?(a):(b)) @@ -255,12 +259,14 @@ // Calibration codes only for non-core axes #if EITHER(BACKLASH_GCODE, CALIBRATION_GCODE) #if ANY(IS_CORE, MARKFORGED_XY, MARKFORGED_YX) - #define CAN_CALIBRATE(A,B) (_AXIS(A) == B) + #define CAN_CALIBRATE(A,B) TERN0(HAS_##A##_AXIS, (_AXIS(A) == B)) #else - #define CAN_CALIBRATE(A,B) true + #define CAN_CALIBRATE(A,B) ENABLED(HAS_##A##_AXIS) #endif + #define AXIS_CAN_CALIBRATE(A) CAN_CALIBRATE(A,NORMAL_AXIS) +#else + #define AXIS_CAN_CALIBRATE(A) false #endif -#define AXIS_CAN_CALIBRATE(A) CAN_CALIBRATE(A,NORMAL_AXIS) /** * No adjustable bed on non-cartesians @@ -508,7 +514,7 @@ * Override the SD_DETECT_STATE set in Configuration_adv.h * and enable sharing of onboard SD host drives (all platforms but AGCM4) */ -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #if HAS_SD_HOST_DRIVE && SD_CONNECTION_IS(ONBOARD) // @@ -543,7 +549,7 @@ #endif #if DISABLED(USB_FLASH_DRIVE_SUPPORT) || BOTH(MULTI_VOLUME, VOLUME_SD_ONBOARD) - #if ENABLED(SDIO_SUPPORT) + #if ENABLED(ONBOARD_SDIO) #define NEED_SD2CARD_SDIO 1 #else #define NEED_SD2CARD_SPI 1 @@ -554,7 +560,7 @@ #define REINIT_NOISY_LCD 1 // Have the LCD re-init on SD insertion #endif -#endif +#endif // HAS_MEDIA /** * Power Supply @@ -681,213 +687,33 @@ */ #if HAS_MAX_TC - // Translate old _SS, _CS, _SCK, _DO, _DI, _MISO, and _MOSI PIN defines. - #if TEMP_SENSOR_IS_MAX_TC(0) || (TEMP_SENSOR_IS_MAX_TC(REDUNDANT) && REDUNDANT_TEMP_MATCH(SOURCE, E1)) - - #if !PIN_EXISTS(TEMP_0_CS) // SS, CS - #if PIN_EXISTS(MAX6675_SS) - #define TEMP_0_CS_PIN MAX6675_SS_PIN - #elif PIN_EXISTS(MAX6675_CS) - #define TEMP_0_CS_PIN MAX6675_CS_PIN - #elif PIN_EXISTS(MAX31855_SS) - #define TEMP_0_CS_PIN MAX31855_SS_PIN - #elif PIN_EXISTS(MAX31855_CS) - #define TEMP_0_CS_PIN MAX31855_CS_PIN - #elif PIN_EXISTS(MAX31865_SS) - #define TEMP_0_CS_PIN MAX31865_SS_PIN - #elif PIN_EXISTS(MAX31865_CS) - #define TEMP_0_CS_PIN MAX31865_CS_PIN - #endif - #endif - - #if TEMP_SENSOR_0_IS_MAX6675 - #if !PIN_EXISTS(TEMP_0_MISO) // DO - #if PIN_EXISTS(MAX6675_MISO) - #define TEMP_0_MISO_PIN MAX6675_MISO_PIN - #elif PIN_EXISTS(MAX6675_DO) - #define TEMP_0_MISO_PIN MAX6675_DO_PIN - #endif - #endif - #if !PIN_EXISTS(TEMP_0_SCK) && PIN_EXISTS(MAX6675_SCK) - #define TEMP_0_SCK_PIN MAX6675_SCK_PIN - #endif - - #elif TEMP_SENSOR_0_IS_MAX31855 - #if !PIN_EXISTS(TEMP_0_MISO) // DO - #if PIN_EXISTS(MAX31855_MISO) - #define TEMP_0_MISO_PIN MAX31855_MISO_PIN - #elif PIN_EXISTS(MAX31855_DO) - #define TEMP_0_MISO_PIN MAX31855_DO_PIN - #endif - #endif - #if !PIN_EXISTS(TEMP_0_SCK) && PIN_EXISTS(MAX31855_SCK) - #define TEMP_0_SCK_PIN MAX31855_SCK_PIN - #endif - - #elif TEMP_SENSOR_0_IS_MAX31865 - #if !PIN_EXISTS(TEMP_0_MISO) // DO - #if PIN_EXISTS(MAX31865_MISO) - #define TEMP_0_MISO_PIN MAX31865_MISO_PIN - #elif PIN_EXISTS(MAX31865_DO) - #define TEMP_0_MISO_PIN MAX31865_DO_PIN - #endif - #endif - #if !PIN_EXISTS(TEMP_0_SCK) && PIN_EXISTS(MAX31865_SCK) - #define TEMP_0_SCK_PIN MAX31865_SCK_PIN - #endif - #if !PIN_EXISTS(TEMP_0_MOSI) && PIN_EXISTS(MAX31865_MOSI) // MOSI for '65 only - #define TEMP_0_MOSI_PIN MAX31865_MOSI_PIN - #endif - #endif - - // Software SPI - enable if MISO/SCK are defined. - #if PIN_EXISTS(TEMP_0_MISO) && PIN_EXISTS(TEMP_0_SCK) && DISABLED(TEMP_SENSOR_0_FORCE_HW_SPI) - #if TEMP_SENSOR_0_IS_MAX31865 && !PIN_EXISTS(TEMP_0_MOSI) - #error "TEMP_SENSOR_0 MAX31865 requires TEMP_0_MOSI_PIN defined for Software SPI. To use Hardware SPI instead, undefine MISO/SCK or enable TEMP_SENSOR_0_FORCE_HW_SPI." - #else - #define TEMP_SENSOR_0_HAS_SPI_PINS 1 - #endif - #endif - - #endif // TEMP_SENSOR_IS_MAX_TC(0) - - #if TEMP_SENSOR_IS_MAX_TC(1) || (TEMP_SENSOR_IS_MAX_TC(REDUNDANT) && REDUNDANT_TEMP_MATCH(SOURCE, E1)) - - #if !PIN_EXISTS(TEMP_1_CS) // SS2, CS2 - #if PIN_EXISTS(MAX6675_SS2) - #define TEMP_1_CS_PIN MAX6675_SS2_PIN - #elif PIN_EXISTS(MAX6675_CS) - #define TEMP_1_CS_PIN MAX6675_CS2_PIN - #elif PIN_EXISTS(MAX31855_SS2) - #define TEMP_1_CS_PIN MAX31855_SS2_PIN - #elif PIN_EXISTS(MAX31855_CS2) - #define TEMP_1_CS_PIN MAX31855_CS2_PIN - #elif PIN_EXISTS(MAX31865_SS2) - #define TEMP_1_CS_PIN MAX31865_SS2_PIN - #elif PIN_EXISTS(MAX31865_CS2) - #define TEMP_1_CS_PIN MAX31865_CS2_PIN - #endif - #endif - - #if TEMP_SENSOR_1_IS_MAX6675 - #if !PIN_EXISTS(TEMP_1_MISO) // DO - #if PIN_EXISTS(MAX6675_MISO) - #define TEMP_1_MISO_PIN MAX6675_MISO_PIN - #elif PIN_EXISTS(MAX6675_DO) - #define TEMP_1_MISO_PIN MAX6675_DO_PIN - #endif - #endif - #if !PIN_EXISTS(TEMP_1_SCK) && PIN_EXISTS(MAX6675_SCK) - #define TEMP_1_SCK_PIN MAX6675_SCK_PIN - #endif - - #elif TEMP_SENSOR_1_IS_MAX31855 - #if !PIN_EXISTS(TEMP_1_MISO) // DO - #if PIN_EXISTS(MAX31855_MISO) - #define TEMP_1_MISO_PIN MAX31855_MISO_PIN - #elif PIN_EXISTS(MAX31855_DO) - #define TEMP_1_MISO_PIN MAX31855_DO_PIN - #endif - #endif - #if !PIN_EXISTS(TEMP_1_SCK) && PIN_EXISTS(MAX31855_SCK) - #define TEMP_1_SCK_PIN MAX31855_SCK_PIN - #endif - - #elif TEMP_SENSOR_1_IS_MAX31865 - #if !PIN_EXISTS(TEMP_1_MISO) // DO - #if PIN_EXISTS(MAX31865_MISO) - #define TEMP_1_MISO_PIN MAX31865_MISO_PIN - #elif PIN_EXISTS(MAX31865_DO) - #define TEMP_1_MISO_PIN MAX31865_DO_PIN - #endif - #endif - #if !PIN_EXISTS(TEMP_1_SCK) && PIN_EXISTS(MAX31865_SCK) - #define TEMP_1_SCK_PIN MAX31865_SCK_PIN - #endif - #if !PIN_EXISTS(TEMP_1_MOSI) && PIN_EXISTS(MAX31865_MOSI) // MOSI for '65 only - #define TEMP_1_MOSI_PIN MAX31865_MOSI_PIN - #endif - #endif - - // Software SPI - enable if MISO/SCK are defined. - #if PIN_EXISTS(TEMP_1_MISO) && PIN_EXISTS(TEMP_1_SCK) && DISABLED(TEMP_SENSOR_1_FORCE_HW_SPI) - #if TEMP_SENSOR_1_IS_MAX31865 && !PIN_EXISTS(TEMP_1_MOSI) - #error "TEMP_SENSOR_1 MAX31865 requires TEMP_1_MOSI_PIN defined for Software SPI. To use Hardware SPI instead, undefine MISO/SCK or enable TEMP_SENSOR_1_FORCE_HW_SPI." - #else - #define TEMP_SENSOR_1_HAS_SPI_PINS 1 - #endif - #endif - - #endif // TEMP_SENSOR_IS_MAX_TC(1) - - #if TEMP_SENSOR_IS_MAX_TC(2) || (TEMP_SENSOR_IS_MAX_TC(REDUNDANT) && REDUNDANT_TEMP_MATCH(SOURCE, E2)) - - #if !PIN_EXISTS(TEMP_2_CS) // SS3, CS3 - #if PIN_EXISTS(MAX6675_SS3) - #define TEMP_2_CS_PIN MAX6675_SS3_PIN - #elif PIN_EXISTS(MAX6675_CS) - #define TEMP_2_CS_PIN MAX6675_CS3_PIN - #elif PIN_EXISTS(MAX31855_SS3) - #define TEMP_2_CS_PIN MAX31855_SS3_PIN - #elif PIN_EXISTS(MAX31855_CS3) - #define TEMP_2_CS_PIN MAX31855_CS3_PIN - #elif PIN_EXISTS(MAX31865_SS3) - #define TEMP_2_CS_PIN MAX31865_SS3_PIN - #elif PIN_EXISTS(MAX31865_CS3) - #define TEMP_2_CS_PIN MAX31865_CS3_PIN - #endif + // Software SPI - enable if MISO/SCK are defined. + #if (TEMP_SENSOR_IS_MAX_TC(0) || (TEMP_SENSOR_IS_MAX_TC(REDUNDANT) && REDUNDANT_TEMP_MATCH(SOURCE, E1))) \ + && PIN_EXISTS(TEMP_0_MISO) && PIN_EXISTS(TEMP_0_SCK) && DISABLED(TEMP_SENSOR_0_FORCE_HW_SPI) + #if TEMP_SENSOR_0_IS_MAX31865 && !PIN_EXISTS(TEMP_0_MOSI) + #error "TEMP_SENSOR_0 MAX31865 requires TEMP_0_MOSI_PIN defined for Software SPI. To use Hardware SPI instead, undefine MISO/SCK or enable TEMP_SENSOR_0_FORCE_HW_SPI." + #else + #define TEMP_SENSOR_0_HAS_SPI_PINS 1 #endif + #endif - #if TEMP_SENSOR_2_IS_MAX6675 - #if !PIN_EXISTS(TEMP_2_MISO) // DO - #if PIN_EXISTS(MAX6675_MISO) - #define TEMP_2_MISO_PIN MAX6675_MISO_PIN - #elif PIN_EXISTS(MAX6675_DO) - #define TEMP_2_MISO_PIN MAX6675_DO_PIN - #endif - #endif - #if !PIN_EXISTS(TEMP_2_SCK) && PIN_EXISTS(MAX6675_SCK) - #define TEMP_2_SCK_PIN MAX6675_SCK_PIN - #endif - - #elif TEMP_SENSOR_2_IS_MAX31855 - #if !PIN_EXISTS(TEMP_2_MISO) // DO - #if PIN_EXISTS(MAX31855_MISO) - #define TEMP_2_MISO_PIN MAX31855_MISO_PIN - #elif PIN_EXISTS(MAX31855_DO) - #define TEMP_2_MISO_PIN MAX31855_DO_PIN - #endif - #endif - #if !PIN_EXISTS(TEMP_2_SCK) && PIN_EXISTS(MAX31855_SCK) - #define TEMP_2_SCK_PIN MAX31855_SCK_PIN - #endif - - #elif TEMP_SENSOR_2_IS_MAX31865 - #if !PIN_EXISTS(TEMP_2_MISO) // DO - #if PIN_EXISTS(MAX31865_MISO) - #define TEMP_2_MISO_PIN MAX31865_MISO_PIN - #elif PIN_EXISTS(MAX31865_DO) - #define TEMP_2_MISO_PIN MAX31865_DO_PIN - #endif - #endif - #if !PIN_EXISTS(TEMP_2_SCK) && PIN_EXISTS(MAX31865_SCK) - #define TEMP_2_SCK_PIN MAX31865_SCK_PIN - #endif - #if !PIN_EXISTS(TEMP_2_MOSI) && PIN_EXISTS(MAX31865_MOSI) // MOSI for '65 only - #define TEMP_2_MOSI_PIN MAX31865_MOSI_PIN - #endif + #if (TEMP_SENSOR_IS_MAX_TC(1) || (TEMP_SENSOR_IS_MAX_TC(REDUNDANT) && REDUNDANT_TEMP_MATCH(SOURCE, E1))) \ + && PIN_EXISTS(TEMP_1_MISO) && PIN_EXISTS(TEMP_1_SCK) && DISABLED(TEMP_SENSOR_1_FORCE_HW_SPI) + #if TEMP_SENSOR_1_IS_MAX31865 && !PIN_EXISTS(TEMP_1_MOSI) + #error "TEMP_SENSOR_1 MAX31865 requires TEMP_1_MOSI_PIN defined for Software SPI. To use Hardware SPI instead, undefine MISO/SCK or enable TEMP_SENSOR_1_FORCE_HW_SPI." + #else + #define TEMP_SENSOR_1_HAS_SPI_PINS 1 #endif + #endif - // Software SPI - enable if MISO/SCK are defined. - #if PIN_EXISTS(TEMP_2_MISO) && PIN_EXISTS(TEMP_2_SCK) && DISABLED(TEMP_SENSOR_2_FORCE_HW_SPI) - #if TEMP_SENSOR_2_IS_MAX31865 && !PIN_EXISTS(TEMP_2_MOSI) - #error "TEMP_SENSOR_2 MAX31865 requires TEMP_2_MOSI_PIN defined for Software SPI. To use Hardware SPI instead, undefine MISO/SCK or enable TEMP_SENSOR_2_FORCE_HW_SPI." - #else - #define TEMP_SENSOR_2_HAS_SPI_PINS 1 - #endif + #if (TEMP_SENSOR_IS_MAX_TC(2) || (TEMP_SENSOR_IS_MAX_TC(REDUNDANT) && REDUNDANT_TEMP_MATCH(SOURCE, E2))) \ + && PIN_EXISTS(TEMP_2_MISO) && PIN_EXISTS(TEMP_2_SCK) && DISABLED(TEMP_SENSOR_2_FORCE_HW_SPI) + #if TEMP_SENSOR_2_IS_MAX31865 && !PIN_EXISTS(TEMP_2_MOSI) + #error "TEMP_SENSOR_2 MAX31865 requires TEMP_2_MOSI_PIN defined for Software SPI. To use Hardware SPI instead, undefine MISO/SCK or enable TEMP_SENSOR_2_FORCE_HW_SPI." + #else + #define TEMP_SENSOR_2_HAS_SPI_PINS 1 #endif - - #endif // TEMP_SENSOR_IS_MAX_TC(2) + #endif // // User-defined thermocouple libraries @@ -915,17 +741,17 @@ #if ENABLED(X_DUAL_ENDSTOPS) #if X_HOME_TO_MAX #ifndef X2_MAX_ENDSTOP_HIT_STATE - #if X2_USE_ENDSTOP == _XMIN_ + #if X2_STOP_PIN == X_MIN_PIN #define X2_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif X2_USE_ENDSTOP == _XMAX_ + #elif X2_STOP_PIN == X_MAX_PIN #define X2_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif X2_USE_ENDSTOP == _YMIN_ + #elif X2_STOP_PIN == Y_MIN_PIN #define X2_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif X2_USE_ENDSTOP == _YMAX_ + #elif X2_STOP_PIN == Y_MAX_PIN #define X2_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif X2_USE_ENDSTOP == _ZMIN_ + #elif X2_STOP_PIN == Z_MIN_PIN #define X2_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif X2_USE_ENDSTOP == _ZMAX_ + #elif X2_STOP_PIN == Z_MAX_PIN #define X2_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE #endif #endif @@ -937,17 +763,17 @@ #endif #else #ifndef X2_MIN_ENDSTOP_HIT_STATE - #if X2_USE_ENDSTOP == _XMIN_ + #if X2_STOP_PIN == X_MIN_PIN #define X2_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif X2_USE_ENDSTOP == _XMAX_ + #elif X2_STOP_PIN == X_MAX_PIN #define X2_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif X2_USE_ENDSTOP == _YMIN_ + #elif X2_STOP_PIN == Y_MIN_PIN #define X2_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif X2_USE_ENDSTOP == _YMAX_ + #elif X2_STOP_PIN == Y_MAX_PIN #define X2_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif X2_USE_ENDSTOP == _ZMIN_ + #elif X2_STOP_PIN == Z_MIN_PIN #define X2_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif X2_USE_ENDSTOP == _ZMAX_ + #elif X2_STOP_PIN == Z_MAX_PIN #define X2_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE #endif #endif @@ -972,17 +798,17 @@ #if ENABLED(Y_DUAL_ENDSTOPS) #if Y_HOME_TO_MAX #ifndef Y2_MAX_ENDSTOP_HIT_STATE - #if Y2_USE_ENDSTOP == _XMIN_ + #if Y2_STOP_PIN == X_MIN_PIN #define Y2_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Y2_USE_ENDSTOP == _XMAX_ + #elif Y2_STOP_PIN == X_MAX_PIN #define Y2_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Y2_USE_ENDSTOP == _YMIN_ + #elif Y2_STOP_PIN == Y_MIN_PIN #define Y2_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Y2_USE_ENDSTOP == _YMAX_ + #elif Y2_STOP_PIN == Y_MAX_PIN #define Y2_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Y2_USE_ENDSTOP == _ZMIN_ + #elif Y2_STOP_PIN == Z_MIN_PIN #define Y2_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Y2_USE_ENDSTOP == _ZMAX_ + #elif Y2_STOP_PIN == Z_MAX_PIN #define Y2_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE #endif #endif @@ -994,17 +820,17 @@ #endif #else #ifndef Y2_MIN_ENDSTOP_HIT_STATE - #if Y2_USE_ENDSTOP == _XMIN_ + #if Y2_STOP_PIN == X_MIN_PIN #define Y2_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Y2_USE_ENDSTOP == _XMAX_ + #elif Y2_STOP_PIN == X_MAX_PIN #define Y2_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Y2_USE_ENDSTOP == _YMIN_ + #elif Y2_STOP_PIN == Y_MIN_PIN #define Y2_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Y2_USE_ENDSTOP == _YMAX_ + #elif Y2_STOP_PIN == Y_MAX_PIN #define Y2_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Y2_USE_ENDSTOP == _ZMIN_ + #elif Y2_STOP_PIN == Z_MIN_PIN #define Y2_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Y2_USE_ENDSTOP == _ZMAX_ + #elif Y2_STOP_PIN == Z_MAX_PIN #define Y2_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE #endif #endif @@ -1030,17 +856,17 @@ #if Z_HOME_TO_MAX #ifndef Z2_MAX_ENDSTOP_HIT_STATE - #if Z2_USE_ENDSTOP == _XMIN_ + #if Z2_STOP_PIN == X_MIN_PIN #define Z2_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Z2_USE_ENDSTOP == _XMAX_ + #elif Z2_STOP_PIN == X_MAX_PIN #define Z2_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Z2_USE_ENDSTOP == _YMIN_ + #elif Z2_STOP_PIN == Y_MIN_PIN #define Z2_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Z2_USE_ENDSTOP == _YMAX_ + #elif Z2_STOP_PIN == Y_MAX_PIN #define Z2_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Z2_USE_ENDSTOP == _ZMIN_ + #elif Z2_STOP_PIN == Z_MIN_PIN #define Z2_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Z2_USE_ENDSTOP == _ZMAX_ + #elif Z2_STOP_PIN == Z_MAX_PIN #define Z2_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE #endif #endif @@ -1052,17 +878,17 @@ #endif #else #ifndef Z2_MIN_ENDSTOP_HIT_STATE - #if Z2_USE_ENDSTOP == _XMIN_ + #if Z2_STOP_PIN == X_MIN_PIN #define Z2_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Z2_USE_ENDSTOP == _XMAX_ + #elif Z2_STOP_PIN == X_MAX_PIN #define Z2_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Z2_USE_ENDSTOP == _YMIN_ + #elif Z2_STOP_PIN == Y_MIN_PIN #define Z2_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Z2_USE_ENDSTOP == _YMAX_ + #elif Z2_STOP_PIN == Y_MAX_PIN #define Z2_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Z2_USE_ENDSTOP == _ZMIN_ + #elif Z2_STOP_PIN == Z_MIN_PIN #define Z2_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Z2_USE_ENDSTOP == _ZMAX_ + #elif Z2_STOP_PIN == Z_MAX_PIN #define Z2_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE #endif #endif @@ -1083,17 +909,17 @@ #if NUM_Z_STEPPERS >= 3 #if Z_HOME_TO_MAX #ifndef Z3_MAX_ENDSTOP_HIT_STATE - #if Z3_USE_ENDSTOP == _XMIN_ + #if Z3_STOP_PIN == X_MIN_PIN #define Z3_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Z3_USE_ENDSTOP == _XMAX_ + #elif Z3_STOP_PIN == X_MAX_PIN #define Z3_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Z3_USE_ENDSTOP == _YMIN_ + #elif Z3_STOP_PIN == Y_MIN_PIN #define Z3_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Z3_USE_ENDSTOP == _YMAX_ + #elif Z3_STOP_PIN == Y_MAX_PIN #define Z3_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Z3_USE_ENDSTOP == _ZMIN_ + #elif Z3_STOP_PIN == Z_MIN_PIN #define Z3_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Z3_USE_ENDSTOP == _ZMAX_ + #elif Z3_STOP_PIN == Z_MAX_PIN #define Z3_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE #endif #endif @@ -1105,17 +931,17 @@ #endif #else #ifndef Z3_MIN_ENDSTOP_HIT_STATE - #if Z3_USE_ENDSTOP == _XMIN_ + #if Z3_STOP_PIN == X_MIN_PIN #define Z3_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Z3_USE_ENDSTOP == _XMAX_ + #elif Z3_STOP_PIN == X_MAX_PIN #define Z3_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Z3_USE_ENDSTOP == _YMIN_ + #elif Z3_STOP_PIN == Y_MIN_PIN #define Z3_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Z3_USE_ENDSTOP == _YMAX_ + #elif Z3_STOP_PIN == Y_MAX_PIN #define Z3_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Z3_USE_ENDSTOP == _ZMIN_ + #elif Z3_STOP_PIN == Z_MIN_PIN #define Z3_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Z3_USE_ENDSTOP == _ZMAX_ + #elif Z3_STOP_PIN == Z_MAX_PIN #define Z3_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE #endif #endif @@ -1137,17 +963,17 @@ #if NUM_Z_STEPPERS >= 4 #if Z_HOME_TO_MAX #ifndef Z4_MAX_ENDSTOP_HIT_STATE - #if Z4_USE_ENDSTOP == _XMIN_ + #if Z4_STOP_PIN == X_MIN_PIN #define Z4_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Z4_USE_ENDSTOP == _XMAX_ + #elif Z4_STOP_PIN == X_MAX_PIN #define Z4_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Z4_USE_ENDSTOP == _YMIN_ + #elif Z4_STOP_PIN == Y_MIN_PIN #define Z4_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Z4_USE_ENDSTOP == _YMAX_ + #elif Z4_STOP_PIN == Y_MAX_PIN #define Z4_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Z4_USE_ENDSTOP == _ZMIN_ + #elif Z4_STOP_PIN == Z_MIN_PIN #define Z4_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Z4_USE_ENDSTOP == _ZMAX_ + #elif Z4_STOP_PIN == Z_MAX_PIN #define Z4_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE #endif #endif @@ -1159,17 +985,17 @@ #endif #else #ifndef Z4_MIN_ENDSTOP_HIT_STATE - #if Z4_USE_ENDSTOP == _XMIN_ + #if Z4_STOP_PIN == X_MIN_PIN #define Z4_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Z4_USE_ENDSTOP == _XMAX_ + #elif Z4_STOP_PIN == X_MAX_PIN #define Z4_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Z4_USE_ENDSTOP == _YMIN_ + #elif Z4_STOP_PIN == Y_MIN_PIN #define Z4_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Z4_USE_ENDSTOP == _YMAX_ + #elif Z4_STOP_PIN == Y_MAX_PIN #define Z4_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Z4_USE_ENDSTOP == _ZMIN_ + #elif Z4_STOP_PIN == Z_MIN_PIN #define Z4_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Z4_USE_ENDSTOP == _ZMAX_ + #elif Z4_STOP_PIN == Z_MAX_PIN #define Z4_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE #endif #endif @@ -1190,90 +1016,6 @@ #endif // Z_MULTI_ENDSTOPS -/** - * Set ENDSTOPPULLUPS for active endstop switches - */ -#if ENABLED(ENDSTOPPULLUPS) - #if ENABLED(USE_XMAX_PLUG) - #define ENDSTOPPULLUP_XMAX - #endif - #if ENABLED(USE_YMAX_PLUG) - #define ENDSTOPPULLUP_YMAX - #endif - #if ENABLED(USE_ZMAX_PLUG) - #define ENDSTOPPULLUP_ZMAX - #endif - #if ENABLED(USE_IMAX_PLUG) - #define ENDSTOPPULLUP_IMAX - #endif - #if ENABLED(USE_JMAX_PLUG) - #define ENDSTOPPULLUP_JMAX - #endif - #if ENABLED(USE_KMAX_PLUG) - #define ENDSTOPPULLUP_KMAX - #endif - #if ENABLED(USE_UMAX_PLUG) - #define ENDSTOPPULLUP_UMAX - #endif - #if ENABLED(USE_VMAX_PLUG) - #define ENDSTOPPULLUP_VMAX - #endif - #if ENABLED(USE_WMAX_PLUG) - #define ENDSTOPPULLUP_WMAX - #endif - #if ENABLED(USE_XMIN_PLUG) - #define ENDSTOPPULLUP_XMIN - #endif - #if ENABLED(USE_YMIN_PLUG) - #define ENDSTOPPULLUP_YMIN - #endif - #if ENABLED(USE_ZMIN_PLUG) - #define ENDSTOPPULLUP_ZMIN - #endif - #if ENABLED(USE_IMIN_PLUG) - #define ENDSTOPPULLUP_IMIN - #endif - #if ENABLED(USE_JMIN_PLUG) - #define ENDSTOPPULLUP_JMIN - #endif - #if ENABLED(USE_KMIN_PLUG) - #define ENDSTOPPULLUP_KMIN - #endif - #if ENABLED(USE_UMIN_PLUG) - #define ENDSTOPPULLUP_UMIN - #endif - #if ENABLED(USE_VMIN_PLUG) - #define ENDSTOPPULLUP_VMIN - #endif - #if ENABLED(USE_WMIN_PLUG) - #define ENDSTOPPULLUP_WMIN - #endif -#endif - -/** - * Set ENDSTOPPULLDOWNS for active endstop switches - */ -#if ENABLED(ENDSTOPPULLDOWNS) - #if ENABLED(USE_XMAX_PLUG) - #define ENDSTOPPULLDOWN_XMAX - #endif - #if ENABLED(USE_YMAX_PLUG) - #define ENDSTOPPULLDOWN_YMAX - #endif - #if ENABLED(USE_ZMAX_PLUG) - #define ENDSTOPPULLDOWN_ZMAX - #endif - #if ENABLED(USE_XMIN_PLUG) - #define ENDSTOPPULLDOWN_XMIN - #endif - #if ENABLED(USE_YMIN_PLUG) - #define ENDSTOPPULLDOWN_YMIN - #endif - #if ENABLED(USE_ZMIN_PLUG) - #define ENDSTOPPULLDOWN_ZMIN - #endif -#endif - /** * Shorthand for pin tests, used wherever needed */ @@ -2202,98 +1944,145 @@ // Endstops and bed probe // -// Is an endstop plug used for extra Z endstops or the probe? -#define IS_PROBE_PIN(A,M) (USES_Z_MIN_PROBE_PIN && Z_MIN_PROBE_PIN == A##_##M##_PIN) -#define IS_X2_ENDSTOP(A,M) (ENABLED(X_DUAL_ENDSTOPS) && X2_USE_ENDSTOP == _##A##M##_) -#define IS_Y2_ENDSTOP(A,M) (ENABLED(Y_DUAL_ENDSTOPS) && Y2_USE_ENDSTOP == _##A##M##_) -#define IS_Z2_ENDSTOP(A,M) (ENABLED(Z_MULTI_ENDSTOPS) && Z2_USE_ENDSTOP == _##A##M##_) -#define IS_Z3_ENDSTOP(A,M) (ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPERS >= 3 && Z3_USE_ENDSTOP == _##A##M##_) -#define IS_Z4_ENDSTOP(A,M) (ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPERS >= 4 && Z4_USE_ENDSTOP == _##A##M##_) +#define _HAS_STOP(A,N,M,C) ((A##_HOME_TO_##M || (C+0)) && PIN_EXISTS(A##N##_##M)) -#define _HAS_STOP(A,M) (HAS_##A##_AXIS && PIN_EXISTS(A##_##M) && !IS_PROBE_PIN(A,M) && !IS_X2_ENDSTOP(A,M) && !IS_Y2_ENDSTOP(A,M) && !IS_Z2_ENDSTOP(A,M) && !IS_Z3_ENDSTOP(A,M) && !IS_Z4_ENDSTOP(A,M)) -#if _HAS_STOP(X,MIN) +#if _HAS_STOP(X,,MIN,) #define HAS_X_MIN 1 #endif -#if _HAS_STOP(X,MAX) +#if _HAS_STOP(X,,MAX,ENABLED(DUAL_X_CARRIAGE)) #define HAS_X_MAX 1 #endif -#if _HAS_STOP(Y,MIN) - #define HAS_Y_MIN 1 +#if HAS_X_MIN || HAS_X_MAX + #define HAS_X_ENDSTOP 1 #endif -#if _HAS_STOP(Y,MAX) + +#if _HAS_STOP(Y,,MIN,) + #define HAS_Y_MIN 1 +#elif _HAS_STOP(Y,,MAX,) #define HAS_Y_MAX 1 #endif -#if _HAS_STOP(Z,MIN) +#if HAS_Y_MIN || HAS_Y_MAX + #define HAS_Y_ENDSTOP 1 +#endif + +#if _HAS_STOP(Z,,MIN,EITHER(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN, HAS_DELTA_SENSORLESS_PROBING)) #define HAS_Z_MIN 1 + #if !HAS_DELTA_SENSORLESS_PROBING + #define HAS_Z_MIN_PIN 1 + #endif #endif -#if _HAS_STOP(Z,MAX) +#if _HAS_STOP(Z,,MAX,) #define HAS_Z_MAX 1 #endif -#if _HAS_STOP(I,MIN) - #define HAS_I_MIN 1 +#if HAS_Z_MIN || HAS_Z_MAX + #define HAS_Z_ENDSTOP 1 #endif -#if _HAS_STOP(I,MAX) + +#if _HAS_STOP(I,,MIN,) + #define HAS_I_MIN 1 +#elif _HAS_STOP(I,,MAX,) #define HAS_I_MAX 1 #endif -#if _HAS_STOP(J,MIN) - #define HAS_J_MIN 1 +#if HAS_I_MIN || HAS_I_MAX + #define HAS_I_ENDSTOP 1 #endif -#if _HAS_STOP(J,MAX) + +#if _HAS_STOP(J,,MIN,) + #define HAS_J_MIN 1 +#elif _HAS_STOP(J,,MAX,) #define HAS_J_MAX 1 #endif -#if _HAS_STOP(K,MIN) - #define HAS_K_MIN 1 +#if HAS_J_MIN || HAS_J_MAX + #define HAS_J_ENDSTOP 1 #endif -#if _HAS_STOP(K,MAX) + +#if _HAS_STOP(K,,MIN,) + #define HAS_K_MIN 1 +#elif _HAS_STOP(K,,MAX,) #define HAS_K_MAX 1 #endif -#if _HAS_STOP(U,MIN) - #define HAS_U_MIN 1 +#if HAS_K_MIN || HAS_K_MAX + #define HAS_K_ENDSTOP 1 #endif -#if _HAS_STOP(U,MAX) + +#if _HAS_STOP(U,,MIN,) + #define HAS_U_MIN 1 +#elif _HAS_STOP(U,,MAX,) #define HAS_U_MAX 1 #endif -#if _HAS_STOP(V,MIN) - #define HAS_V_MIN 1 +#if HAS_U_MIN || HAS_U_MAX + #define HAS_U_ENDSTOP 1 #endif -#if _HAS_STOP(V,MAX) + +#if _HAS_STOP(V,,MIN,) + #define HAS_V_MIN 1 +#elif _HAS_STOP(V,,MAX,) #define HAS_V_MAX 1 #endif -#if _HAS_STOP(W,MIN) - #define HAS_W_MIN 1 +#if HAS_V_MIN || HAS_V_MAX + #define HAS_V_ENDSTOP 1 #endif -#if _HAS_STOP(W,MAX) + +#if _HAS_STOP(W,,MIN,) + #define HAS_W_MIN 1 +#elif _HAS_STOP(W,,MAX,) #define HAS_W_MAX 1 #endif -#if PIN_EXISTS(X2_MIN) - #define HAS_X2_MIN 1 -#endif -#if PIN_EXISTS(X2_MAX) - #define HAS_X2_MAX 1 +#if HAS_W_MIN || HAS_W_MAX + #define HAS_W_ENDSTOP 1 #endif -#if PIN_EXISTS(Y2_MIN) - #define HAS_Y2_MIN 1 -#endif -#if PIN_EXISTS(Y2_MAX) - #define HAS_Y2_MAX 1 -#endif -#if PIN_EXISTS(Z2_MIN) - #define HAS_Z2_MIN 1 -#endif -#if PIN_EXISTS(Z2_MAX) - #define HAS_Z2_MAX 1 -#endif -#if PIN_EXISTS(Z3_MIN) - #define HAS_Z3_MIN 1 -#endif -#if PIN_EXISTS(Z3_MAX) - #define HAS_Z3_MAX 1 + +#if EITHER(DUAL_X_CARRIAGE, X_DUAL_ENDSTOPS) + #if _HAS_STOP(X,2,MIN,) + #define HAS_X2_MIN 1 + #elif _HAS_STOP(X,2,MAX,) + #define HAS_X2_MAX 1 + #endif + #if HAS_X2_MIN || HAS_X2_MAX + #define HAS_X2_ENDSTOP 1 + #endif #endif -#if PIN_EXISTS(Z4_MIN) - #define HAS_Z4_MIN 1 + +#if ENABLED(Y_DUAL_ENDSTOPS) + #if _HAS_STOP(Y,2,MIN,) + #define HAS_Y2_MIN 1 + #elif _HAS_STOP(Y,2,MAX,) + #define HAS_Y2_MAX 1 + #endif + #if HAS_Y2_MIN || HAS_Y2_MAX + #define HAS_Y2_ENDSTOP 1 + #endif #endif -#if PIN_EXISTS(Z4_MAX) - #define HAS_Z4_MAX 1 + +#if ENABLED(Z_MULTI_ENDSTOPS) + #if _HAS_STOP(Z,2,MIN,) + #define HAS_Z2_MIN 1 + #elif _HAS_STOP(Z,2,MAX,) + #define HAS_Z2_MAX 1 + #endif + #if HAS_Z2_MIN || HAS_Z2_MAX + #define HAS_Z2_ENDSTOP 1 + #endif + #if NUM_Z_STEPPERS >= 3 + #if _HAS_STOP(Z,3,MIN,) + #define HAS_Z3_MIN 1 + #elif _HAS_STOP(Z,3,MAX,) + #define HAS_Z3_MAX 1 + #endif + #if HAS_Z3_MIN || HAS_Z3_MAX + #define HAS_Z3_ENDSTOP 1 + #endif + #endif + #if NUM_Z_STEPPERS >= 4 + #if _HAS_STOP(Z,4,MIN,) + #define HAS_Z4_MIN 1 + #elif _HAS_STOP(Z,4,MAX,) + #define HAS_Z4_MAX 1 + #endif + #if HAS_Z4_MIN || HAS_Z4_MAX + #define HAS_Z4_ENDSTOP 1 + #endif + #endif #endif #if HAS_BED_PROBE && PIN_EXISTS(Z_MIN_PROBE) @@ -2301,12 +2090,112 @@ #endif #undef _HAS_STOP -#undef IS_PROBE_PIN -#undef IS_X2_ENDSTOP -#undef IS_Y2_ENDSTOP -#undef IS_Z2_ENDSTOP -#undef IS_Z3_ENDSTOP -#undef IS_Z4_ENDSTOP + +/** + * Set ENDSTOPPULLUPS for active endstop switches + */ +#if ENABLED(ENDSTOPPULLUPS) + #if HAS_X_MIN + #define ENDSTOPPULLUP_XMIN + #endif + #if HAS_X_MAX + #define ENDSTOPPULLUP_XMAX + #endif + #if HAS_Y_MIN + #define ENDSTOPPULLUP_YMIN + #elif HAS_Y_MAX + #define ENDSTOPPULLUP_YMAX + #endif + #if HAS_Z_MIN_PIN + #define ENDSTOPPULLUP_ZMIN + #endif + #if HAS_Z_MAX + #define ENDSTOPPULLUP_ZMAX + #endif + #if HAS_I_MIN + #define ENDSTOPPULLUP_IMIN + #elif HAS_I_MAX + #define ENDSTOPPULLUP_IMAX + #endif + #if HAS_J_MIN + #define ENDSTOPPULLUP_JMIN + #elif HAS_J_MAX + #define ENDSTOPPULLUP_JMAX + #endif + #if HAS_K_MIN + #define ENDSTOPPULLUP_KMIN + #elif HAS_K_MAX + #define ENDSTOPPULLUP_KMAX + #endif + #if HAS_U_MIN + #define ENDSTOPPULLUP_UMIN + #elif HAS_U_MAX + #define ENDSTOPPULLUP_UMAX + #endif + #if HAS_V_MIN + #define ENDSTOPPULLUP_VMIN + #elif HAS_V_MAX + #define ENDSTOPPULLUP_VMAX + #endif + #if HAS_W_MIN + #define ENDSTOPPULLUP_WMIN + #elif HAS_W_MAX + #define ENDSTOPPULLUP_WMAX + #endif +#endif + +/** + * Set ENDSTOPPULLDOWNS for active endstop switches + */ +#if ENABLED(ENDSTOPPULLDOWNS) + #if HAS_X_MIN + #define ENDSTOPPULLDOWN_XMIN + #endif + #if HAS_X_MAX + #define ENDSTOPPULLDOWN_XMAX + #endif + #if HAS_Y_MIN + #define ENDSTOPPULLDOWN_YMIN + #elif HAS_Y_MAX + #define ENDSTOPPULLDOWN_YMAX + #endif + #if HAS_Z_MIN_PIN + #define ENDSTOPPULLDOWN_ZMIN + #endif + #if HAS_Z_MAX + #define ENDSTOPPULLDOWN_ZMAX + #endif + #if HAS_I_MIN + #define ENDSTOPPULLDOWN_IMIN + #elif HAS_I_MAX + #define ENDSTOPPULLDOWN_IMAX + #endif + #if HAS_J_MIN + #define ENDSTOPPULLDOWN_JMIN + #elif HAS_J_MAX + #define ENDSTOPPULLDOWN_JMAX + #endif + #if HAS_K_MIN + #define ENDSTOPPULLDOWN_KMIN + #elif HAS_K_MAX + #define ENDSTOPPULLDOWN_KMAX + #endif + #if HAS_U_MIN + #define ENDSTOPPULLDOWN_UMIN + #elif HAS_U_MAX + #define ENDSTOPPULLDOWN_UMAX + #endif + #if HAS_V_MIN + #define ENDSTOPPULLDOWN_VMIN + #elif HAS_V_MAX + #define ENDSTOPPULLDOWN_VMAX + #endif + #if HAS_W_MIN + #define ENDSTOPPULLDOWN_WMIN + #elif HAS_W_MAX + #define ENDSTOPPULLDOWN_WMAX + #endif +#endif // // ADC Temp Sensors (Thermistor or Thermocouple with amplifier ADC interface) @@ -2351,6 +2240,9 @@ #if HAS_ADC_TEST(BOARD) #define HAS_TEMP_ADC_BOARD 1 #endif +#if HAS_ADC_TEST(SOC) + #define HAS_TEMP_ADC_SOC 1 +#endif #if HAS_ADC_TEST(REDUNDANT) #define HAS_TEMP_ADC_REDUNDANT 1 #endif @@ -2374,6 +2266,9 @@ #if HAS_TEMP(BOARD) #define HAS_TEMP_BOARD 1 #endif +#if HAS_TEMP(SOC) + #define HAS_TEMP_SOC 1 +#endif #if HAS_TEMP(REDUNDANT) #define HAS_TEMP_REDUNDANT 1 #endif @@ -2447,7 +2342,7 @@ #define BED_OR_CHAMBER 1 #endif -#if HAS_TEMP_HOTEND || BED_OR_CHAMBER || HAS_TEMP_PROBE || HAS_TEMP_COOLER || HAS_TEMP_BOARD +#if HAS_TEMP_HOTEND || BED_OR_CHAMBER || HAS_TEMP_PROBE || HAS_TEMP_COOLER || HAS_TEMP_BOARD || HAS_TEMP_SOC #define HAS_TEMP_SENSOR 1 #endif @@ -2598,6 +2493,24 @@ #undef AUTO_POWER_COOLER_FAN #endif +/** + * Controller Fan Settings + */ +#if PIN_EXISTS(CONTROLLER_FAN) + #define HAS_CONTROLLER_FAN 1 +#endif + +#if HAS_CONTROLLER_FAN + #if ENABLED(CONTROLLER_FAN_USE_BOARD_TEMP) + #define HAS_CONTROLLER_FAN_BOARD_TEMP_TRIGGER 1 + #ifndef CONTROLLER_FAN_TRIGGER_TEMP + #define CONTROLLER_FAN_TRIGGER_TEMP 30 + #endif + #else + #undef CONTROLLER_FAN_TRIGGER_TEMP + #endif +#endif + // Print Cooling fans (limit) #ifdef NUM_M106_FANS #define MAX_FANS NUM_M106_FANS @@ -2607,11 +2520,12 @@ #define _IS_E_AUTO(N,F) (PIN_EXISTS(E##N##_AUTO_FAN) && E##N##_AUTO_FAN_PIN == FAN##F##_PIN) #define _HAS_FAN(F) (F < MAX_FANS && PIN_EXISTS(FAN##F) \ - && CONTROLLER_FAN_PIN != FAN##F##_PIN \ + && !(HAS_CONTROLLER_FAN && CONTROLLER_FAN_PIN == FAN##F##_PIN) \ && !_IS_E_AUTO(0,F) && !_IS_E_AUTO(1,F) \ && !_IS_E_AUTO(2,F) && !_IS_E_AUTO(3,F) \ && !_IS_E_AUTO(4,F) && !_IS_E_AUTO(5,F) \ && !_IS_E_AUTO(6,F) && !_IS_E_AUTO(7,F)) + #if _HAS_FAN(0) #define HAS_FAN0 1 #endif @@ -2674,60 +2588,39 @@ #define HAS_FAN 1 #endif -/** - * Part Cooling fan multipliexer - */ #if PIN_EXISTS(FANMUX0) - #define HAS_FANMUX 1 + #define HAS_FANMUX 1 // Part Cooling fan multipliexer #endif /** * MIN/MAX fan PWM scaling */ -#ifndef FAN_OFF_PWM - #define FAN_OFF_PWM 0 -#endif -#ifndef FAN_MIN_PWM - #if FAN_OFF_PWM > 0 - #define FAN_MIN_PWM (FAN_OFF_PWM + 1) - #else - #define FAN_MIN_PWM 0 - #endif -#endif -#ifndef FAN_MAX_PWM - #define FAN_MAX_PWM 255 -#endif -#if FAN_MIN_PWM < 0 || FAN_MIN_PWM > 255 - #error "FAN_MIN_PWM must be a value from 0 to 255." -#elif FAN_MAX_PWM < 0 || FAN_MAX_PWM > 255 - #error "FAN_MAX_PWM must be a value from 0 to 255." -#elif FAN_MIN_PWM > FAN_MAX_PWM - #error "FAN_MIN_PWM must be less than or equal to FAN_MAX_PWM." -#elif FAN_OFF_PWM > FAN_MIN_PWM - #error "FAN_OFF_PWM must be less than or equal to FAN_MIN_PWM." -#endif - -/** - * Controller Fan Settings - */ -#if PIN_EXISTS(CONTROLLER_FAN) - #define HAS_CONTROLLER_FAN 1 - #if CONTROLLER_FAN_MIN_BOARD_TEMP - #define HAS_CONTROLLER_FAN_MIN_BOARD_TEMP 1 +#if EITHER(HAS_FAN, USE_CONTROLLER_FAN) + #ifndef FAN_OFF_PWM + #define FAN_OFF_PWM 0 #endif -#endif - -#if HAS_CONTROLLER_FAN - #if ENABLED(CONTROLLER_FAN_USE_BOARD_TEMP) - #define HAS_CONTROLLER_FAN_BOARD_TEMP_TRIGGER 1 - #ifndef CONTROLLER_FAN_TRIGGER_TEMP - #define CONTROLLER_FAN_TRIGGER_TEMP 30 + #ifndef FAN_MIN_PWM + #if FAN_OFF_PWM > 0 + #define FAN_MIN_PWM (FAN_OFF_PWM + 1) + #else + #define FAN_MIN_PWM 0 #endif + #endif + #ifndef FAN_MAX_PWM + #define FAN_MAX_PWM 255 + #endif + #if FAN_MIN_PWM == 0 && FAN_MAX_PWM == 255 + #define CALC_FAN_SPEED(f) (f ?: FAN_OFF_PWM) #else - #undef CONTROLLER_FAN_TRIGGER_TEMP + #define CALC_FAN_SPEED(f) (f ? map(f, 1, 255, FAN_MIN_PWM, FAN_MAX_PWM) : FAN_OFF_PWM) #endif #endif +// Fan Kickstart +#if FAN_KICKSTART_TIME && !defined(FAN_KICKSTART_POWER) + #define FAN_KICKSTART_POWER 180 +#endif + // Servos #if PIN_EXISTS(SERVO0) && NUM_SERVOS > 0 #define HAS_SERVO_0 1 @@ -3260,6 +3153,25 @@ #endif #endif +// Touch Calibration +#if ANY(HAS_SPI_TFT, HAS_FSMC_TFT, HAS_LTDC_TFT) + #ifndef TOUCH_CALIBRATION_X + #define TOUCH_CALIBRATION_X 0 + #endif + #ifndef TOUCH_CALIBRATION_Y + #define TOUCH_CALIBRATION_Y 0 + #endif + #ifndef TOUCH_OFFSET_X + #define TOUCH_OFFSET_X 0 + #endif + #ifndef TOUCH_OFFSET_Y + #define TOUCH_OFFSET_Y 0 + #endif + #ifndef TOUCH_ORIENTATION + #define TOUCH_ORIENTATION TOUCH_LANDSCAPE + #endif +#endif + // Number of VFAT entries used. Each entry has 13 UTF-16 characters #if ANY(SCROLL_LONG_FILENAMES, HAS_DWIN_E3V2, TFT_COLOR_UI) #define VFAT_ENTRIES_LIMIT 5 @@ -3306,7 +3218,7 @@ #endif // Fallback SPI Speed for SD -#if ENABLED(SDSUPPORT) && !defined(SD_SPI_SPEED) +#if HAS_MEDIA && !defined(SD_SPI_SPEED) #define SD_SPI_SPEED SPI_FULL_SPEED #endif diff --git a/Marlin/src/inc/MarlinConfig.h b/Marlin/src/inc/MarlinConfig.h index 8fdb4b9baeae..dda1480e02a9 100644 --- a/Marlin/src/inc/MarlinConfig.h +++ b/Marlin/src/inc/MarlinConfig.h @@ -27,27 +27,30 @@ #include "MarlinConfigPre.h" -#ifndef __MARLIN_DEPS__ +#ifdef __MARLIN_DEPS__ + #include "../HAL/shared/fauxpins.h" +#else #include "../HAL/HAL.h" #endif #include "../pins/pins.h" #ifndef __MARLIN_DEPS__ - #include HAL_PATH(../HAL, timers.h) - #include HAL_PATH(../HAL, spi_pins.h) + #include HAL_PATH(.., timers.h) + #include HAL_PATH(.., spi_pins.h) #endif #include "Conditionals_post.h" #ifndef __MARLIN_DEPS__ - #include HAL_PATH(../HAL, inc/Conditionals_post.h) + #include HAL_PATH(.., inc/Conditionals_post.h) #include "../core/types.h" // Ahead of sanity-checks + #include "Changes.h" #include "SanityCheck.h" - #include HAL_PATH(../HAL, inc/SanityCheck.h) + #include HAL_PATH(.., inc/SanityCheck.h) // Include all core headers #include "../core/language.h" diff --git a/Marlin/src/inc/MarlinConfigPre.h b/Marlin/src/inc/MarlinConfigPre.h index c090b7e37bc4..c2191ab1b74f 100644 --- a/Marlin/src/inc/MarlinConfigPre.h +++ b/Marlin/src/inc/MarlinConfigPre.h @@ -49,7 +49,7 @@ #include "Conditionals_LCD.h" #ifndef __MARLIN_DEPS__ - #include HAL_PATH(../HAL, inc/Conditionals_LCD.h) + #include HAL_PATH(.., inc/Conditionals_LCD.h) #endif #include "../core/drivers.h" @@ -58,5 +58,5 @@ #include "Conditionals_adv.h" #ifndef __MARLIN_DEPS__ - #include HAL_PATH(../HAL, inc/Conditionals_adv.h) + #include HAL_PATH(.., inc/Conditionals_adv.h) #endif diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index f5d0c785ebed..74633b9ec434 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -89,643 +89,28 @@ */ #ifndef MOTHERBOARD #error "MOTHERBOARD is required. You must '#define MOTHERBOARD BOARD_MYNAME' (not just '#define BOARD_MYNAME')." -#elif !defined(X_BED_SIZE) || !defined(Y_BED_SIZE) - #error "X_BED_SIZE and Y_BED_SIZE are now required!" -#elif WATCH_TEMP_PERIOD > 500 - #error "WATCH_TEMP_PERIOD now uses seconds instead of milliseconds." -#elif DISABLED(THERMAL_PROTECTION_HOTENDS) && (defined(WATCH_TEMP_PERIOD) || defined(THERMAL_PROTECTION_PERIOD)) - #error "Thermal Runaway Protection for hotends is now enabled with THERMAL_PROTECTION_HOTENDS." -#elif DISABLED(THERMAL_PROTECTION_BED) && defined(THERMAL_PROTECTION_BED_PERIOD) - #error "Thermal Runaway Protection for the bed is now enabled with THERMAL_PROTECTION_BED." -#elif defined(NO_FAN_SLOWING_IN_PID_TUNING) - #error "NO_FAN_SLOWING_IN_PID_TUNING is now TEMP_TUNING_MAINTAIN_FAN." -#elif (CORE_IS_XZ || CORE_IS_YZ) && ENABLED(Z_LATE_ENABLE) - #error "Z_LATE_ENABLE can't be used with COREXZ, COREZX, COREYZ, or COREZY." -#elif defined(X_HOME_RETRACT_MM) - #error "[XYZ]_HOME_RETRACT_MM settings have been renamed [XYZ]_HOME_BUMP_MM." -#elif defined(SDCARDDETECTINVERTED) - #error "SDCARDDETECTINVERTED is now SD_DETECT_STATE (HIGH)." -#elif defined(SD_DETECT_INVERTED) - #error "SD_DETECT_INVERTED is now SD_DETECT_STATE (HIGH)." -#elif defined(BTENABLED) - #error "BTENABLED is now BLUETOOTH." -#elif defined(CUSTOM_MENDEL_NAME) - #error "CUSTOM_MENDEL_NAME is now CUSTOM_MACHINE_NAME." -#elif defined(HAS_AUTOMATIC_VERSIONING) - #error "HAS_AUTOMATIC_VERSIONING is now CUSTOM_VERSION_FILE." -#elif defined(USE_AUTOMATIC_VERSIONING) - #error "USE_AUTOMATIC_VERSIONING is now CUSTOM_VERSION_FILE." -#elif defined(SDSLOW) - #error "SDSLOW deprecated. Set SD_SPI_SPEED to SPI_HALF_SPEED instead." -#elif defined(SDEXTRASLOW) - #error "SDEXTRASLOW deprecated. Set SD_SPI_SPEED to SPI_QUARTER_SPEED instead." -#elif defined(FILAMENT_SENSOR) - #error "FILAMENT_SENSOR is now FILAMENT_WIDTH_SENSOR." -#elif defined(ENDSTOPPULLUP_FIL_RUNOUT) - #error "ENDSTOPPULLUP_FIL_RUNOUT is now FIL_RUNOUT_PULLUP." -#elif defined(DISABLE_MAX_ENDSTOPS) || defined(DISABLE_MIN_ENDSTOPS) - #error "DISABLE_MAX_ENDSTOPS and DISABLE_MIN_ENDSTOPS deprecated. Use individual USE_*_PLUG options instead." -#elif defined(LANGUAGE_INCLUDE) - #error "LANGUAGE_INCLUDE has been replaced by LCD_LANGUAGE." -#elif defined(EXTRUDER_OFFSET_X) || defined(EXTRUDER_OFFSET_Y) - #error "EXTRUDER_OFFSET_[XY] is deprecated. Use HOTEND_OFFSET_[XY] instead." -#elif defined(PID_PARAMS_PER_EXTRUDER) - #error "PID_PARAMS_PER_EXTRUDER is deprecated. Use PID_PARAMS_PER_HOTEND instead." -#elif defined(EXTRUDER_WATTS) || defined(BED_WATTS) - #error "EXTRUDER_WATTS and BED_WATTS are deprecated and should be removed." -#elif defined(SERVO_ENDSTOP_ANGLES) - #error "SERVO_ENDSTOP_ANGLES is deprecated. Use Z_SERVO_ANGLES instead." -#elif defined(X_ENDSTOP_SERVO_NR) || defined(Y_ENDSTOP_SERVO_NR) - #error "X_ENDSTOP_SERVO_NR and Y_ENDSTOP_SERVO_NR are deprecated and should be removed." -#elif defined(Z_ENDSTOP_SERVO_NR) - #error "Z_ENDSTOP_SERVO_NR is now Z_PROBE_SERVO_NR." -#elif defined(DEFAULT_XYJERK) - #error "DEFAULT_XYJERK is deprecated. Use DEFAULT_XJERK and DEFAULT_YJERK instead." -#elif defined(XY_TRAVEL_SPEED) - #error "XY_TRAVEL_SPEED is now XY_PROBE_FEEDRATE." -#elif defined(XY_PROBE_SPEED) - #error "XY_PROBE_SPEED is now XY_PROBE_FEEDRATE." -#elif defined(Z_PROBE_SPEED_FAST) - #error "Z_PROBE_SPEED_FAST is now Z_PROBE_FEEDRATE_FAST." -#elif defined(Z_PROBE_SPEED_SLOW) - #error "Z_PROBE_SPEED_SLOW is now Z_PROBE_FEEDRATE_SLOW." -#elif defined(PROBE_SERVO_DEACTIVATION_DELAY) - #error "PROBE_SERVO_DEACTIVATION_DELAY is deprecated. Use DEACTIVATE_SERVOS_AFTER_MOVE instead." -#elif defined(SERVO_DEACTIVATION_DELAY) - #error "SERVO_DEACTIVATION_DELAY is now SERVO_DELAY." -#elif ENABLED(FILAMENTCHANGEENABLE) - #error "FILAMENTCHANGEENABLE is now ADVANCED_PAUSE_FEATURE." -#elif ENABLED(FILAMENT_CHANGE_FEATURE) - #error "FILAMENT_CHANGE_FEATURE is now ADVANCED_PAUSE_FEATURE." -#elif defined(FILAMENT_CHANGE_X_POS) || defined(FILAMENT_CHANGE_Y_POS) - #error "FILAMENT_CHANGE_[XY]_POS is now set with NOZZLE_PARK_POINT." -#elif defined(FILAMENT_CHANGE_Z_ADD) - #error "FILAMENT_CHANGE_Z_ADD is now set with NOZZLE_PARK_POINT." -#elif defined(FILAMENT_CHANGE_XY_FEEDRATE) - #error "FILAMENT_CHANGE_XY_FEEDRATE is now NOZZLE_PARK_XY_FEEDRATE." -#elif defined(FILAMENT_CHANGE_Z_FEEDRATE) - #error "FILAMENT_CHANGE_Z_FEEDRATE is now NOZZLE_PARK_Z_FEEDRATE." -#elif defined(PAUSE_PARK_X_POS) || defined(PAUSE_PARK_Y_POS) - #error "PAUSE_PARK_[XY]_POS is now set with NOZZLE_PARK_POINT." -#elif defined(PAUSE_PARK_Z_ADD) - #error "PAUSE_PARK_Z_ADD is now set with NOZZLE_PARK_POINT." -#elif defined(PAUSE_PARK_XY_FEEDRATE) - #error "PAUSE_PARK_XY_FEEDRATE is now NOZZLE_PARK_XY_FEEDRATE." -#elif defined(PAUSE_PARK_Z_FEEDRATE) - #error "PAUSE_PARK_Z_FEEDRATE is now NOZZLE_PARK_Z_FEEDRATE." -#elif defined(FILAMENT_CHANGE_RETRACT_FEEDRATE) - #error "FILAMENT_CHANGE_RETRACT_FEEDRATE is now PAUSE_PARK_RETRACT_FEEDRATE." -#elif defined(FILAMENT_CHANGE_RETRACT_LENGTH) - #error "FILAMENT_CHANGE_RETRACT_LENGTH is now PAUSE_PARK_RETRACT_LENGTH." -#elif defined(FILAMENT_CHANGE_EXTRUDE_FEEDRATE) - #error "FILAMENT_CHANGE_EXTRUDE_FEEDRATE is now ADVANCED_PAUSE_PURGE_FEEDRATE." -#elif defined(ADVANCED_PAUSE_EXTRUDE_FEEDRATE) - #error "ADVANCED_PAUSE_EXTRUDE_FEEDRATE is now ADVANCED_PAUSE_PURGE_FEEDRATE." -#elif defined(FILAMENT_CHANGE_EXTRUDE_LENGTH) - #error "FILAMENT_CHANGE_EXTRUDE_LENGTH is now ADVANCED_PAUSE_PURGE_LENGTH." -#elif defined(ADVANCED_PAUSE_EXTRUDE_LENGTH) - #error "ADVANCED_PAUSE_EXTRUDE_LENGTH is now ADVANCED_PAUSE_PURGE_LENGTH." -#elif defined(FILAMENT_CHANGE_NOZZLE_TIMEOUT) - #error "FILAMENT_CHANGE_NOZZLE_TIMEOUT is now PAUSE_PARK_NOZZLE_TIMEOUT." -#elif defined(FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS) - #error "FILAMENT_CHANGE_NUMBER_OF_ALERT_BEEPS is now FILAMENT_CHANGE_ALERT_BEEPS." -#elif defined(FILAMENT_CHANGE_NO_STEPPER_TIMEOUT) - #error "FILAMENT_CHANGE_NO_STEPPER_TIMEOUT is now PAUSE_PARK_NO_STEPPER_TIMEOUT." -#elif defined(PLA_PREHEAT_HOTEND_TEMP) - #error "PLA_PREHEAT_HOTEND_TEMP is now PREHEAT_1_TEMP_HOTEND." -#elif defined(PLA_PREHEAT_HPB_TEMP) - #error "PLA_PREHEAT_HPB_TEMP is now PREHEAT_1_TEMP_BED." -#elif defined(PLA_PREHEAT_FAN_SPEED) - #error "PLA_PREHEAT_FAN_SPEED is now PREHEAT_1_FAN_SPEED." -#elif defined(ABS_PREHEAT_HOTEND_TEMP) - #error "ABS_PREHEAT_HOTEND_TEMP is now PREHEAT_2_TEMP_HOTEND." -#elif defined(ABS_PREHEAT_HPB_TEMP) - #error "ABS_PREHEAT_HPB_TEMP is now PREHEAT_2_TEMP_BED." -#elif defined(ABS_PREHEAT_FAN_SPEED) - #error "ABS_PREHEAT_FAN_SPEED is now PREHEAT_2_FAN_SPEED." -#elif defined(ENDSTOPS_ONLY_FOR_HOMING) - #error "ENDSTOPS_ONLY_FOR_HOMING is deprecated. Use (disable) ENDSTOPS_ALWAYS_ON_DEFAULT instead." -#elif defined(HOMING_FEEDRATE) - #error "HOMING_FEEDRATE is now set using the HOMING_FEEDRATE_MM_M array instead." -#elif (defined(HOMING_FEEDRATE_XY) || defined(HOMING_FEEDRATE_Z)) && !defined(HOMING_FEEDRATE_MM_M) - #error "HOMING_FEEDRATE_XY and HOMING_FEEDRATE_Z are now set using the HOMING_FEEDRATE_MM_M array instead." -#elif defined(MANUAL_HOME_POSITIONS) - #error "MANUAL_HOME_POSITIONS is deprecated. Set MANUAL_[XYZ]_HOME_POS as-needed instead." -#elif defined(PID_ADD_EXTRUSION_RATE) - #error "PID_ADD_EXTRUSION_RATE is now PID_EXTRUSION_SCALING and is DISABLED by default." -#elif defined(Z_RAISE_BEFORE_HOMING) - #error "Z_RAISE_BEFORE_HOMING is now Z_CLEARANCE_FOR_HOMING." -#elif defined(MIN_Z_HEIGHT_FOR_HOMING) - #error "MIN_Z_HEIGHT_FOR_HOMING is now Z_CLEARANCE_FOR_HOMING." -#elif defined(Z_HOMING_HEIGHT) - #error "Z_HOMING_HEIGHT is now Z_CLEARANCE_FOR_HOMING." -#elif defined(Z_RAISE_BEFORE_PROBING) || defined(Z_RAISE_AFTER_PROBING) - #error "Z_RAISE_(BEFORE|AFTER)_PROBING are deprecated. Use Z_CLEARANCE_DEPLOY_PROBE and Z_AFTER_PROBING instead." -#elif defined(Z_RAISE_PROBE_DEPLOY_STOW) || defined(Z_RAISE_BETWEEN_PROBINGS) - #error "Z_RAISE_PROBE_DEPLOY_STOW and Z_RAISE_BETWEEN_PROBINGS are now Z_CLEARANCE_DEPLOY_PROBE and Z_CLEARANCE_BETWEEN_PROBES." -#elif defined(Z_PROBE_DEPLOY_HEIGHT) || defined(Z_PROBE_TRAVEL_HEIGHT) - #error "Z_PROBE_DEPLOY_HEIGHT and Z_PROBE_TRAVEL_HEIGHT are now Z_CLEARANCE_DEPLOY_PROBE and Z_CLEARANCE_BETWEEN_PROBES." -#elif defined(MANUAL_BED_LEVELING) - #error "MANUAL_BED_LEVELING is now LCD_BED_LEVELING." -#elif defined(MESH_HOME_SEARCH_Z) - #error "MESH_HOME_SEARCH_Z is now LCD_PROBE_Z_RANGE." -#elif defined(MANUAL_PROBE_Z_RANGE) - #error "MANUAL_PROBE_Z_RANGE is now LCD_PROBE_Z_RANGE." -#elif !defined(MIN_STEPS_PER_SEGMENT) - #error "Please replace 'const int dropsegments' with '#define MIN_STEPS_PER_SEGMENT' (and increase by 1)." -#elif MIN_STEPS_PER_SEGMENT <= 0 - #error "MIN_STEPS_PER_SEGMENT must be at least 1." -#elif defined(PREVENT_DANGEROUS_EXTRUDE) - #error "PREVENT_DANGEROUS_EXTRUDE is now PREVENT_COLD_EXTRUSION." -#elif defined(SCARA) - #error "SCARA is now MORGAN_SCARA." -#elif defined(ENABLE_AUTO_BED_LEVELING) - #error "ENABLE_AUTO_BED_LEVELING is deprecated. Specify AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_BILINEAR, or AUTO_BED_LEVELING_3POINT." -#elif defined(AUTO_BED_LEVELING_FEATURE) - #error "AUTO_BED_LEVELING_FEATURE is deprecated. Specify AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_BILINEAR, or AUTO_BED_LEVELING_3POINT." -#elif defined(ABL_GRID_POINTS) - #error "ABL_GRID_POINTS is now GRID_MAX_POINTS_X and GRID_MAX_POINTS_Y." -#elif defined(ABL_GRID_POINTS_X) || defined(ABL_GRID_POINTS_Y) - #error "ABL_GRID_POINTS_[XY] is now GRID_MAX_POINTS_[XY]." -#elif defined(ABL_GRID_MAX_POINTS_X) || defined(ABL_GRID_MAX_POINTS_Y) - #error "ABL_GRID_MAX_POINTS_[XY] is now GRID_MAX_POINTS_[XY]." -#elif defined(MESH_NUM_X_POINTS) || defined(MESH_NUM_Y_POINTS) - #error "MESH_NUM_[XY]_POINTS is now GRID_MAX_POINTS_[XY]." -#elif defined(UBL_MESH_NUM_X_POINTS) || defined(UBL_MESH_NUM_Y_POINTS) - #error "UBL_MESH_NUM_[XY]_POINTS is now GRID_MAX_POINTS_[XY]." -#elif defined(UBL_G26_MESH_VALIDATION) - #error "UBL_G26_MESH_VALIDATION is now G26_MESH_VALIDATION." -#elif defined(UBL_MESH_EDIT_ENABLED) - #error "UBL_MESH_EDIT_ENABLED is now G26_MESH_VALIDATION." -#elif defined(UBL_MESH_EDITING) - #error "UBL_MESH_EDITING is now G26_MESH_VALIDATION." -#elif defined(BLTOUCH_HEATERS_OFF) - #error "BLTOUCH_HEATERS_OFF is now PROBING_HEATERS_OFF." -#elif defined(BLTOUCH_V3) - #error "BLTOUCH_V3 is obsolete." -#elif defined(BLTOUCH_FORCE_OPEN_DRAIN_MODE) - #error "BLTOUCH_FORCE_OPEN_DRAIN_MODE is obsolete." -#elif defined(BEEPER) - #error "BEEPER is now BEEPER_PIN." -#elif defined(SDCARDDETECT) - #error "SDCARDDETECT is now SD_DETECT_PIN." -#elif defined(STAT_LED_RED) || defined(STAT_LED_BLUE) - #error "STAT_LED_RED/STAT_LED_BLUE are now STAT_LED_RED_PIN/STAT_LED_BLUE_PIN." -#elif defined(LCD_PIN_BL) - #error "LCD_PIN_BL is now LCD_BACKLIGHT_PIN." -#elif defined(LCD_PIN_RESET) - #error "LCD_PIN_RESET is now LCD_RESET_PIN." -#elif defined(EXTRUDER_0_AUTO_FAN_PIN) || defined(EXTRUDER_1_AUTO_FAN_PIN) || defined(EXTRUDER_2_AUTO_FAN_PIN) || defined(EXTRUDER_3_AUTO_FAN_PIN) - #error "EXTRUDER_[0123]_AUTO_FAN_PIN is now E[0123]_AUTO_FAN_PIN." -#elif defined(PID_FAN_SCALING) && !HAS_FAN - #error "PID_FAN_SCALING needs at least one fan enabled." -#elif defined(min_software_endstops) || defined(max_software_endstops) - #error "(min|max)_software_endstops are now (MIN|MAX)_SOFTWARE_ENDSTOPS." -#elif ENABLED(Z_PROBE_SLED) && defined(SLED_PIN) - #error "Replace SLED_PIN with SOL1_PIN (applies to both Z_PROBE_SLED and SOLENOID_PROBE)." -#elif defined(CONTROLLERFAN_PIN) - #error "CONTROLLERFAN_PIN is now CONTROLLER_FAN_PIN, enabled with USE_CONTROLLER_FAN." -#elif defined(CONTROLLERFAN_SPEED) - #error "CONTROLLERFAN_SPEED is now CONTROLLERFAN_SPEED_ACTIVE." -#elif defined(CONTROLLERFAN_SECS) - #error "CONTROLLERFAN_SECS is now CONTROLLERFAN_IDLE_TIME." -#elif defined(MIN_RETRACT) - #error "MIN_RETRACT is now MIN_AUTORETRACT and MAX_AUTORETRACT." -#elif defined(ADVANCE) - #error "ADVANCE is now LIN_ADVANCE." -#elif defined(LIN_ADVANCE_E_D_RATIO) - #error "LIN_ADVANCE (1.5) no longer uses LIN_ADVANCE_E_D_RATIO." -#elif defined(NEOPIXEL_RGBW_LED) - #error "NEOPIXEL_RGBW_LED is now NEOPIXEL_LED." -#elif ENABLED(DELTA) && defined(DELTA_PROBEABLE_RADIUS) - #error "Remove DELTA_PROBEABLE_RADIUS and use PROBING_MARGIN to inset the probe area instead." -#elif ENABLED(DELTA) && defined(DELTA_CALIBRATION_RADIUS) - #error "Remove DELTA_CALIBRATION_RADIUS and use PROBING_MARGIN to inset the probe area instead." -#elif defined(UBL_MESH_INSET) - #error "UBL_MESH_INSET is now just MESH_INSET." -#elif defined(UBL_MESH_MIN_X) || defined(UBL_MESH_MIN_Y) || defined(UBL_MESH_MAX_X) || defined(UBL_MESH_MAX_Y) - #error "UBL_MESH_(MIN|MAX)_[XY] is now just MESH_(MIN|MAX)_[XY]." -#elif defined(ABL_PROBE_PT_1_X) || defined(ABL_PROBE_PT_1_Y) || defined(ABL_PROBE_PT_2_X) || defined(ABL_PROBE_PT_2_Y) || defined(ABL_PROBE_PT_3_X) || defined(ABL_PROBE_PT_3_Y) - #error "ABL_PROBE_PT_[123]_[XY] is no longer required. Please remove it." -#elif defined(UBL_PROBE_PT_1_X) || defined(UBL_PROBE_PT_1_Y) || defined(UBL_PROBE_PT_2_X) || defined(UBL_PROBE_PT_2_Y) || defined(UBL_PROBE_PT_3_X) || defined(UBL_PROBE_PT_3_Y) - #error "UBL_PROBE_PT_[123]_[XY] is no longer required. Please remove it." -#elif defined(MIN_PROBE_EDGE) - #error "MIN_PROBE_EDGE is now called PROBING_MARGIN." -#elif defined(MIN_PROBE_EDGE_LEFT) - #error "MIN_PROBE_EDGE_LEFT is now called PROBING_MARGIN_LEFT." -#elif defined(MIN_PROBE_EDGE_RIGHT) - #error "MIN_PROBE_EDGE_RIGHT is now called PROBING_MARGIN_RIGHT." -#elif defined(MIN_PROBE_EDGE_FRONT) - #error "MIN_PROBE_EDGE_FRONT is now called PROBING_MARGIN_FRONT." -#elif defined(MIN_PROBE_EDGE_BACK) - #error "MIN_PROBE_EDGE_BACK is now called PROBING_MARGIN_BACK." -#elif defined(LEFT_PROBE_BED_POSITION) - #error "LEFT_PROBE_BED_POSITION is obsolete. Set a margin with PROBING_MARGIN or PROBING_MARGIN_LEFT instead." -#elif defined(RIGHT_PROBE_BED_POSITION) - #error "RIGHT_PROBE_BED_POSITION is obsolete. Set a margin with PROBING_MARGIN or PROBING_MARGIN_RIGHT instead." -#elif defined(FRONT_PROBE_BED_POSITION) - #error "FRONT_PROBE_BED_POSITION is obsolete. Set a margin with PROBING_MARGIN or PROBING_MARGIN_FRONT instead." -#elif defined(BACK_PROBE_BED_POSITION) - #error "BACK_PROBE_BED_POSITION is obsolete. Set a margin with PROBING_MARGIN or PROBING_MARGIN_BACK instead." -#elif defined(ENABLE_MESH_EDIT_GFX_OVERLAY) - #error "ENABLE_MESH_EDIT_GFX_OVERLAY is now MESH_EDIT_GFX_OVERLAY." -#elif defined(BABYSTEP_ZPROBE_GFX_REVERSE) - #error "BABYSTEP_ZPROBE_GFX_REVERSE is now set by OVERLAY_GFX_REVERSE." -#elif defined(UBL_GRANULAR_SEGMENTATION_FOR_CARTESIAN) - #error "UBL_GRANULAR_SEGMENTATION_FOR_CARTESIAN is now SEGMENT_LEVELED_MOVES." -#elif HAS_PID_HEATING && (defined(K1) || !defined(PID_K1)) - #error "K1 is now PID_K1." -#elif defined(PROBE_DOUBLE_TOUCH) - #error "PROBE_DOUBLE_TOUCH is now MULTIPLE_PROBING." -#elif defined(ANET_KEYPAD_LCD) - #error "ANET_KEYPAD_LCD is now ZONESTAR_LCD." -#elif defined(LCD_I2C_SAINSMART_YWROBOT) - #error "LCD_I2C_SAINSMART_YWROBOT is now LCD_SAINSMART_I2C_(1602|2004)." -#elif defined(MEASURED_LOWER_LIMIT) || defined(MEASURED_UPPER_LIMIT) - #error "MEASURED_(UPPER|LOWER)_LIMIT is now FILWIDTH_ERROR_MARGIN." -#elif defined(HAVE_TMCDRIVER) - #error "HAVE_TMCDRIVER is now [AXIS]_DRIVER_TYPE TMC26X." -#elif defined(STEALTHCHOP) - #error "STEALTHCHOP is now STEALTHCHOP_(XY|Z|E)." -#elif defined(HAVE_TMC26X) - #error "HAVE_TMC26X is now [AXIS]_DRIVER_TYPE TMC26X." -#elif defined(HAVE_TMC2130) - #error "HAVE_TMC2130 is now [AXIS]_DRIVER_TYPE TMC2130." -#elif defined(HAVE_TMC2208) - #error "HAVE_TMC2208 is now [AXIS]_DRIVER_TYPE TMC2208." -#elif defined(HAVE_L6470DRIVER) - #error "HAVE_L6470DRIVER is obsolete. L64xx stepper drivers are no longer supported in Marlin." -#elif defined(X_IS_TMC) || defined(X2_IS_TMC) || defined(Y_IS_TMC) || defined(Y2_IS_TMC) || defined(Z_IS_TMC) || defined(Z2_IS_TMC) || defined(Z3_IS_TMC) \ - || defined(E0_IS_TMC) || defined(E1_IS_TMC) || defined(E2_IS_TMC) || defined(E3_IS_TMC) || defined(E4_IS_TMC) || defined(E5_IS_TMC) || defined(E6_IS_TMC) || defined(E7_IS_TMC) - #error "[AXIS]_IS_TMC is now [AXIS]_DRIVER_TYPE TMC26X." -#elif defined(X_IS_TMC26X) || defined(X2_IS_TMC26X) || defined(Y_IS_TMC26X) || defined(Y2_IS_TMC26X) || defined(Z_IS_TMC26X) || defined(Z2_IS_TMC26X) || defined(Z3_IS_TMC26X) \ - || defined(E0_IS_TMC26X) || defined(E1_IS_TMC26X) || defined(E2_IS_TMC26X) || defined(E3_IS_TMC26X) || defined(E4_IS_TMC26X) || defined(E5_IS_TMC26X) || defined(E6_IS_TMC26X) || defined(E7_IS_TMC26X) - #error "[AXIS]_IS_TMC26X is now [AXIS]_DRIVER_TYPE TMC26X." -#elif defined(X_IS_TMC2130) || defined(X2_IS_TMC2130) || defined(Y_IS_TMC2130) || defined(Y2_IS_TMC2130) || defined(Z_IS_TMC2130) || defined(Z2_IS_TMC2130) || defined(Z3_IS_TMC2130) \ - || defined(E0_IS_TMC2130) || defined(E1_IS_TMC2130) || defined(E2_IS_TMC2130) || defined(E3_IS_TMC2130) || defined(E4_IS_TMC2130) || defined(E5_IS_TMC2130) || defined(E6_IS_TMC2130) || defined(E7_IS_TMC2130) - #error "[AXIS]_IS_TMC2130 is now [AXIS]_DRIVER_TYPE TMC2130." -#elif defined(X_IS_TMC2208) || defined(X2_IS_TMC2208) || defined(Y_IS_TMC2208) || defined(Y2_IS_TMC2208) || defined(Z_IS_TMC2208) || defined(Z2_IS_TMC2208) || defined(Z3_IS_TMC2208) \ - || defined(E0_IS_TMC2208) || defined(E1_IS_TMC2208) || defined(E2_IS_TMC2208) || defined(E3_IS_TMC2208) || defined(E4_IS_TMC2208) || defined(E5_IS_TMC2208) || defined(E6_IS_TMC2208) || defined(E7_IS_TMC2208) - #error "[AXIS]_IS_TMC2208 is now [AXIS]_DRIVER_TYPE TMC2208." -#elif defined(AUTOMATIC_CURRENT_CONTROL) - #error "AUTOMATIC_CURRENT_CONTROL is now MONITOR_DRIVER_STATUS." -#elif defined(FILAMENT_CHANGE_LOAD_LENGTH) - #error "FILAMENT_CHANGE_LOAD_LENGTH is now FILAMENT_CHANGE_FAST_LOAD_LENGTH." -#elif defined(LEVEL_CORNERS_INSET) - #error "LEVEL_CORNERS_INSET is now BED_TRAMMING_INSET_LFRB." -#elif defined(BEZIER_JERK_CONTROL) - #error "BEZIER_JERK_CONTROL is now S_CURVE_ACCELERATION." -#elif HAS_JUNCTION_DEVIATION && defined(JUNCTION_DEVIATION_FACTOR) - #error "JUNCTION_DEVIATION_FACTOR is now JUNCTION_DEVIATION_MM." -#elif defined(JUNCTION_ACCELERATION_FACTOR) - #error "JUNCTION_ACCELERATION_FACTOR is obsolete. Delete it from Configuration_adv.h." -#elif defined(JUNCTION_ACCELERATION) - #error "JUNCTION_ACCELERATION is obsolete. Delete it from Configuration_adv.h." -#elif defined(MAX7219_DEBUG_STEPPER_HEAD) - #error "MAX7219_DEBUG_STEPPER_HEAD is now MAX7219_DEBUG_PLANNER_HEAD." -#elif defined(MAX7219_DEBUG_STEPPER_TAIL) - #error "MAX7219_DEBUG_STEPPER_TAIL is now MAX7219_DEBUG_PLANNER_TAIL." -#elif defined(MAX7219_DEBUG_STEPPER_QUEUE) - #error "MAX7219_DEBUG_STEPPER_QUEUE is now MAX7219_DEBUG_PLANNER_QUEUE." -#elif defined(ENDSTOP_NOISE_FILTER) - #error "ENDSTOP_NOISE_FILTER is now ENDSTOP_NOISE_THRESHOLD [2-7]." -#elif defined(RETRACT_ZLIFT) - #error "RETRACT_ZLIFT is now RETRACT_ZRAISE." -#elif defined(TOOLCHANGE_FS_INIT_BEFORE_SWAP) - #error "TOOLCHANGE_FS_INIT_BEFORE_SWAP is now TOOLCHANGE_FS_SLOW_FIRST_PRIME." -#elif defined(TOOLCHANGE_PARK_ZLIFT) || defined(TOOLCHANGE_UNPARK_ZLIFT) - #error "TOOLCHANGE_PARK_ZLIFT and TOOLCHANGE_UNPARK_ZLIFT are now TOOLCHANGE_ZRAISE." -#elif defined(SINGLENOZZLE_TOOLCHANGE_ZRAISE) - #error "SINGLENOZZLE_TOOLCHANGE_ZRAISE is now TOOLCHANGE_ZRAISE." -#elif defined(SINGLENOZZLE_SWAP_LENGTH) - #error "SINGLENOZZLE_SWAP_LENGTH is now TOOLCHANGE_FIL_SWAP_LENGTH." -#elif defined(SINGLENOZZLE_SWAP_RETRACT_SPEED) - #error "SINGLENOZZLE_SWAP_RETRACT_SPEED is now TOOLCHANGE_FIL_SWAP_RETRACT_SPEED." -#elif defined(SINGLENOZZLE_SWAP_PRIME_SPEED) - #error "SINGLENOZZLE_SWAP_PRIME_SPEED is now TOOLCHANGE_FIL_SWAP_PRIME_SPEED." -#elif defined(SINGLENOZZLE_SWAP_PARK) - #error "SINGLENOZZLE_SWAP_PARK is now TOOLCHANGE_PARK." -#elif defined(SINGLENOZZLE_TOOLCHANGE_XY) - #error "SINGLENOZZLE_TOOLCHANGE_XY is now TOOLCHANGE_PARK_XY." -#elif defined(SINGLENOZZLE_PARK_XY_FEEDRATE) - #error "SINGLENOZZLE_PARK_XY_FEEDRATE is now TOOLCHANGE_PARK_XY_FEEDRATE." -#elif defined(PARKING_EXTRUDER_SECURITY_RAISE) - #error "PARKING_EXTRUDER_SECURITY_RAISE is now TOOLCHANGE_ZRAISE." -#elif defined(SWITCHING_TOOLHEAD_SECURITY_RAISE) - #error "SWITCHING_TOOLHEAD_SECURITY_RAISE is now TOOLCHANGE_ZRAISE." -#elif defined(G0_FEEDRATE) && G0_FEEDRATE == 0 - #error "G0_FEEDRATE is now used to set the G0 feedrate." -#elif defined(MBL_Z_STEP) - #error "MBL_Z_STEP is now MESH_EDIT_Z_STEP." -#elif defined(CHDK) - #error "CHDK is now CHDK_PIN." -#elif ANY_PIN( \ - MAX6675_SS, MAX6675_SS2, MAX6675_SS3, MAX6675_CS, MAX6675_CS2, MAX6675_CS3,\ - MAX31855_SS, MAX31855_SS2, MAX31855_SS3, MAX31855_CS, MAX31855_CS2, MAX31855_CS3, \ - MAX31865_SS, MAX31865_SS2, MAX31865_SS3, MAX31865_CS, MAX31865_CS2, MAX31865_CS3) - #warning "MAX*_SS_PIN, MAX*_SS2_PIN, MAX*_SS3_PIN, MAX*_CS_PIN, MAX*_CS2_PIN, and MAX*_CS3_PIN, are deprecated and will be removed in a future version. Please use TEMP_0_CS_PIN/TEMP_1_CS_PIN/TEMP_2_CS_PIN instead." -#elif ANY_PIN(MAX6675_SCK, MAX31855_SCK, MAX31865_SCK) - #warning "MAX*_SCK_PIN is deprecated and will be removed in a future version. Please use TEMP_0_SCK_PIN/TEMP_1_SCK_PIN/TEMP_2_SCK_PIN instead." -#elif ANY_PIN(MAX6675_MISO, MAX6675_DO, MAX31855_MISO, MAX31855_DO, MAX31865_MISO, MAX31865_DO) - #warning "MAX*_MISO_PIN and MAX*_DO_PIN are deprecated and will be removed in a future version. Please use TEMP_0_MISO_PIN/TEMP_1_MISO_PIN/TEMP_2_MISO_PIN instead." -#elif PIN_EXISTS(MAX31865_MOSI) - #warning "MAX31865_MOSI_PIN is deprecated and will be removed in a future version. Please use TEMP_0_MOSI_PIN/TEMP_1_MOSI_PIN/TEMP_2_MOSI_PIN instead." -#elif ANY_PIN(THERMO_CS1_PIN, THERMO_CS2_PIN, THERMO_CS3_PIN, THERMO_DO_PIN, THERMO_SCK_PIN) - #error "THERMO_*_PIN is now TEMP_n_CS_PIN, TEMP_n_SCK_PIN, TEMP_n_MOSI_PIN, TEMP_n_MISO_PIN." -#elif defined(MAX31865_SENSOR_OHMS) - #error "MAX31865_SENSOR_OHMS is now MAX31865_SENSOR_OHMS_0." -#elif defined(MAX31865_CALIBRATION_OHMS) - #error "MAX31865_CALIBRATION_OHMS is now MAX31865_CALIBRATION_OHMS_0." -#elif defined(SPINDLE_LASER_ENABLE) - #error "SPINDLE_LASER_ENABLE is now SPINDLE_FEATURE or LASER_FEATURE." -#elif defined(SPINDLE_LASER_ENABLE_PIN) - #error "SPINDLE_LASER_ENABLE_PIN is now SPINDLE_LASER_ENA_PIN." -#elif defined(SPINDLE_DIR_CHANGE) - #error "SPINDLE_DIR_CHANGE is now SPINDLE_CHANGE_DIR." -#elif defined(SPINDLE_STOP_ON_DIR_CHANGE) - #error "SPINDLE_STOP_ON_DIR_CHANGE is now SPINDLE_CHANGE_DIR_STOP." -#elif defined(SPINDLE_LASER_ACTIVE_HIGH) - #error "SPINDLE_LASER_ACTIVE_HIGH is now SPINDLE_LASER_ACTIVE_STATE." -#elif defined(SPINDLE_LASER_ENABLE_INVERT) - #error "SPINDLE_LASER_ENABLE_INVERT is now SPINDLE_LASER_ACTIVE_STATE." -#elif defined(LASER_POWER_INLINE) - #error "LASER_POWER_INLINE is not required, inline mode is enabled with 'M3 I' and disabled with 'M5 I'." -#elif defined(LASER_POWER_INLINE_TRAPEZOID) - #error "LASER_POWER_INLINE_TRAPEZOID is now LASER_POWER_TRAP." -#elif defined(LASER_POWER_INLINE_TRAPEZOID_CONT) - #error "LASER_POWER_INLINE_TRAPEZOID_CONT is replaced with LASER_POWER_TRAP." -#elif defined(LASER_POWER_INLINE_TRAPEZOID_PER) - #error "LASER_POWER_INLINE_TRAPEZOID_CONT_PER replaced with LASER_POWER_TRAP." -#elif defined(LASER_POWER_INLINE_CONTINUOUS) - #error "LASER_POWER_INLINE_CONTINUOUS is not required, inline mode is enabled with 'M3 I' and disabled with 'M5 I'." -#elif defined(CUTTER_POWER_DISPLAY) - #error "CUTTER_POWER_DISPLAY is now CUTTER_POWER_UNIT." -#elif defined(CHAMBER_HEATER_PIN) - #error "CHAMBER_HEATER_PIN is now HEATER_CHAMBER_PIN." -#elif defined(TMC_Z_CALIBRATION) - #error "TMC_Z_CALIBRATION has been deprecated in favor of MECHANICAL_GANTRY_CALIBRATION." -#elif defined(Z_MIN_PROBE_ENDSTOP) - #error "Z_MIN_PROBE_ENDSTOP is no longer required. Please remove it." -#elif defined(DUAL_NOZZLE_DUPLICATION_MODE) - #error "DUAL_NOZZLE_DUPLICATION_MODE is now MULTI_NOZZLE_DUPLICATION." -#elif defined(MENU_ITEM_CASE_LIGHT) - #error "MENU_ITEM_CASE_LIGHT is now CASE_LIGHT_MENU." -#elif defined(CASE_LIGHT_NEOPIXEL_COLOR) - #error "CASE_LIGHT_NEOPIXEL_COLOR is now CASE_LIGHT_DEFAULT_COLOR." -#elif defined(ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED) - #error "ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED is now SD_ABORT_ON_ENDSTOP_HIT." -#elif defined(LPC_SD_LCD) || defined(LPC_SD_ONBOARD) || defined(LPC_SD_CUSTOM_CABLE) - #error "LPC_SD_(LCD|ONBOARD|CUSTOM_CABLE) are now SDCARD_CONNECTION." -#elif defined(USB_SD_DISABLED) - #error "USB_SD_DISABLED is now NO_SD_HOST_DRIVE." -#elif defined(USB_SD_ONBOARD) - #error "USB_SD_ONBOARD is obsolete. Disable NO_SD_HOST_DRIVE instead." -#elif defined(PSU_ACTIVE_HIGH) - #error "PSU_ACTIVE_HIGH is now PSU_ACTIVE_STATE." -#elif POWER_SUPPLY == 1 - #error "Replace POWER_SUPPLY 1 by enabling PSU_CONTROL and setting PSU_ACTIVE_STATE to 'LOW'." -#elif POWER_SUPPLY == 2 - #error "Replace POWER_SUPPLY 2 by enabling PSU_CONTROL and setting PSU_ACTIVE_STATE to 'HIGH'." -#elif defined(POWER_SUPPLY) - #error "POWER_SUPPLY is now obsolete. Please remove it." -#elif defined(MKS_ROBIN_TFT) - #error "MKS_ROBIN_TFT is now FSMC_GRAPHICAL_TFT." -#elif defined(SDPOWER) - #error "SDPOWER is now SDPOWER_PIN." -#elif defined(STRING_SPLASH_LINE1) || defined(STRING_SPLASH_LINE2) - #error "STRING_SPLASH_LINE[12] are now obsolete. Please remove them." -#elif defined(Z_PROBE_ALLEN_KEY_DEPLOY_1_X) || defined(Z_PROBE_ALLEN_KEY_STOW_1_X) - #error "Z_PROBE_ALLEN_KEY_(DEPLOY|STOW) coordinates are now a single setting." -#elif defined(X_PROBE_OFFSET_FROM_EXTRUDER) || defined(Y_PROBE_OFFSET_FROM_EXTRUDER) || defined(Z_PROBE_OFFSET_FROM_EXTRUDER) - #error "[XYZ]_PROBE_OFFSET_FROM_EXTRUDER is now NOZZLE_TO_PROBE_OFFSET." -#elif defined(MIN_PROBE_X) || defined(MIN_PROBE_Y) || defined(MAX_PROBE_X) || defined(MAX_PROBE_Y) - #error "(MIN|MAX)_PROBE_[XY] are now calculated at runtime. Please remove them." -#elif defined(Z_STEPPER_ALIGN_X) || defined(Z_STEPPER_ALIGN_X) - #error "Z_STEPPER_ALIGN_X and Z_STEPPER_ALIGN_Y are now combined as Z_STEPPER_ALIGN_XY." -#elif defined(JUNCTION_DEVIATION) - #error "JUNCTION_DEVIATION is no longer required. (See CLASSIC_JERK). Please remove it." -#elif defined(BABYSTEP_MULTIPLICATOR) - #error "BABYSTEP_MULTIPLICATOR is now BABYSTEP_MULTIPLICATOR_[XY|Z]." -#elif defined(LULZBOT_TOUCH_UI) - #error "LULZBOT_TOUCH_UI is now TOUCH_UI_FTDI_EVE." -#elif defined(PS_DEFAULT_OFF) - #error "PS_DEFAULT_OFF is now PSU_DEFAULT_OFF." -#elif defined(FILAMENT_UNLOAD_RETRACT_LENGTH) - #error "FILAMENT_UNLOAD_RETRACT_LENGTH is now FILAMENT_UNLOAD_PURGE_RETRACT." -#elif defined(FILAMENT_UNLOAD_DELAY) - #error "FILAMENT_UNLOAD_DELAY is now FILAMENT_UNLOAD_PURGE_DELAY." -#elif defined(HOME_USING_SPREADCYCLE) - #error "HOME_USING_SPREADCYCLE is now obsolete. Please remove it." -#elif defined(DGUS_LCD) - #error "DGUS_LCD is now DGUS_LCD_UI ORIGIN|FYSETC|HIPRECY)." -#elif defined(DGUS_SERIAL_PORT) - #error "DGUS_SERIAL_PORT is now LCD_SERIAL_PORT." -#elif defined(DGUS_BAUDRATE) - #error "DGUS_BAUDRATE is now LCD_BAUDRATE." -#elif defined(DGUS_STATS_RX_BUFFER_OVERRUNS) - #error "DGUS_STATS_RX_BUFFER_OVERRUNS is now STATS_RX_BUFFER_OVERRUNS." -#elif defined(ANYCUBIC_LCD_SERIAL_PORT) - #error "ANYCUBIC_LCD_SERIAL_PORT is now LCD_SERIAL_PORT." -#elif defined(INTERNAL_SERIAL_PORT) - #error "INTERNAL_SERIAL_PORT is now MMU2_SERIAL_PORT." -#elif defined(X_DUAL_ENDSTOPS_ADJUSTMENT) || defined(Y_DUAL_ENDSTOPS_ADJUSTMENT) || defined(Z_DUAL_ENDSTOPS_ADJUSTMENT) - #error "[XYZ]_DUAL_ENDSTOPS_ADJUSTMENT is now [XYZ]2_ENDSTOP_ADJUSTMENT." -#elif defined(Z_TRIPLE_ENDSTOPS_ADJUSTMENT2) || defined(Z_TRIPLE_ENDSTOPS_ADJUSTMENT3) - #error "Z_TRIPLE_ENDSTOPS_ADJUSTMENT[23] is now Z[23]_ENDSTOP_ADJUSTMENT." -#elif defined(Z_QUAD_ENDSTOPS_ADJUSTMENT2) || defined(Z_QUAD_ENDSTOPS_ADJUSTMENT3) || defined(Z_QUAD_ENDSTOPS_ADJUSTMENT4) - #error "Z_QUAD_ENDSTOPS_ADJUSTMENT[234] is now Z[234]_ENDSTOP_ADJUSTMENT." -#elif defined(Z_DUAL_STEPPER_DRIVERS) - #error "Z_DUAL_STEPPER_DRIVERS is no longer needed and should be removed." -#elif defined(Z_TRIPLE_STEPPER_DRIVERS) - #error "Z_TRIPLE_STEPPER_DRIVERS is no longer needed and should be removed." -#elif defined(Z_QUAD_STEPPER_DRIVERS) - #error "Z_QUAD_STEPPER_DRIVERS is no longer needed and should be removed." -#elif defined(Z_DUAL_ENDSTOPS) || defined(Z_TRIPLE_ENDSTOPS) || defined(Z_QUAD_ENDSTOPS) - #error "Z_(DUAL|TRIPLE|QUAD)_ENDSTOPS is now Z_MULTI_ENDSTOPS." -#elif defined(DUGS_UI_MOVE_DIS_OPTION) - #error "DUGS_UI_MOVE_DIS_OPTION is spelled DGUS_UI_MOVE_DIS_OPTION." -#elif defined(ORIG_E0_AUTO_FAN_PIN) || defined(ORIG_E1_AUTO_FAN_PIN) || defined(ORIG_E2_AUTO_FAN_PIN) || defined(ORIG_E3_AUTO_FAN_PIN) || defined(ORIG_E4_AUTO_FAN_PIN) || defined(ORIG_E5_AUTO_FAN_PIN) || defined(ORIG_E6_AUTO_FAN_PIN) || defined(ORIG_E7_AUTO_FAN_PIN) - #error "ORIG_Ex_AUTO_FAN_PIN is now just Ex_AUTO_FAN_PIN." -#elif defined(ORIG_CHAMBER_AUTO_FAN_PIN) - #error "ORIG_CHAMBER_AUTO_FAN_PIN is now just CHAMBER_AUTO_FAN_PIN." -#elif defined(HOMING_BACKOFF_MM) - #error "HOMING_BACKOFF_MM is now HOMING_BACKOFF_POST_MM." -#elif defined(X_HOME_BUMP_MM) || defined(Y_HOME_BUMP_MM) || defined(Z_HOME_BUMP_MM) - #error "[XYZ]_HOME_BUMP_MM is now HOMING_BUMP_MM." -#elif defined(DIGIPOT_I2C) - #error "DIGIPOT_I2C is now DIGIPOT_MCP4451 (or DIGIPOT_MCP4018)." -#elif defined(TOUCH_BUTTONS) - #error "TOUCH_BUTTONS is now TOUCH_SCREEN." -#elif defined(LCD_FULL_PIXEL_HEIGHT) || defined(LCD_FULL_PIXEL_WIDTH) - #error "LCD_FULL_PIXEL_(WIDTH|HEIGHT) is deprecated and should be removed." -#elif defined(FSMC_UPSCALE) - #error "FSMC_UPSCALE is now GRAPHICAL_TFT_UPSCALE." -#elif defined(ANYCUBIC_TFT_MODEL) - #error "ANYCUBIC_TFT_MODEL is now ANYCUBIC_LCD_I3MEGA." -#elif defined(EVENT_GCODE_SD_STOP) - #error "EVENT_GCODE_SD_STOP is now EVENT_GCODE_SD_ABORT." -#elif defined(GRAPHICAL_TFT_ROTATE_180) - #error "GRAPHICAL_TFT_ROTATE_180 is now TFT_ROTATION set to TFT_ROTATE_180." -#elif defined(PROBE_OFFSET_START) - #error "PROBE_OFFSET_START is now PROBE_OFFSET_WIZARD_START_Z." -#elif defined(POWER_LOSS_PULL) - #error "POWER_LOSS_PULL is now specifically POWER_LOSS_PULL(UP|DOWN)." -#elif defined(SHORT_MANUAL_Z_MOVE) - #error "SHORT_MANUAL_Z_MOVE is now FINE_MANUAL_MOVE, applying to Z on most printers." -#elif defined(FIL_RUNOUT_INVERTING) - #if FIL_RUNOUT_INVERTING - #error "FIL_RUNOUT_INVERTING true is now FIL_RUNOUT_STATE HIGH." - #else - #error "FIL_RUNOUT_INVERTING false is now FIL_RUNOUT_STATE LOW." - #endif -#elif defined(ASSISTED_TRAMMING_MENU_ITEM) - #error "ASSISTED_TRAMMING_MENU_ITEM is deprecated and should be removed." -#elif defined(UNKNOWN_Z_NO_RAISE) - #error "UNKNOWN_Z_NO_RAISE is replaced by setting Z_IDLE_HEIGHT to Z_MAX_POS." -#elif defined(Z_AFTER_DEACTIVATE) - #error "Z_AFTER_DEACTIVATE is replaced by Z_IDLE_HEIGHT." -#elif defined(MEATPACK) - #error "MEATPACK is now enabled with MEATPACK_ON_SERIAL_PORT_1, MEATPACK_ON_SERIAL_PORT_2, etc." -#elif defined(CUSTOM_USER_MENUS) - #error "CUSTOM_USER_MENUS has been replaced by CUSTOM_MENU_MAIN and CUSTOM_MENU_CONFIG." -#elif defined(MKS_LCD12864) - #error "MKS_LCD12864 is now MKS_LCD12864A or MKS_LCD12864B." -#elif defined(DOGM_SD_PERCENT) - #error "DOGM_SD_PERCENT is now SHOW_PROGRESS_PERCENT." -#elif defined(NEOPIXEL_BKGD_LED_INDEX) - #error "NEOPIXEL_BKGD_LED_INDEX is now NEOPIXEL_BKGD_INDEX_FIRST." -#elif defined(TEMP_SENSOR_1_AS_REDUNDANT) - #error "TEMP_SENSOR_1_AS_REDUNDANT is now TEMP_SENSOR_REDUNDANT, with associated TEMP_SENSOR_REDUNDANT_* config." -#elif defined(MAX_REDUNDANT_TEMP_SENSOR_DIFF) - #error "MAX_REDUNDANT_TEMP_SENSOR_DIFF is now TEMP_SENSOR_REDUNDANT_MAX_DIFF" -#elif defined(LCD_ALEPHOBJECTS_CLCD_UI) - #error "LCD_ALEPHOBJECTS_CLCD_UI is now LCD_LULZBOT_CLCD_UI." -#elif defined(MIN_ARC_SEGMENTS) - #error "MIN_ARC_SEGMENTS is now MIN_CIRCLE_SEGMENTS." -#elif defined(ARC_SEGMENTS_PER_R) - #error "ARC_SUPPORT no longer uses ARC_SEGMENTS_PER_R." -#elif ENABLED(ARC_SUPPORT) && (!defined(MIN_ARC_SEGMENT_MM) || !defined(MAX_ARC_SEGMENT_MM)) - #error "ARC_SUPPORT now requires MIN_ARC_SEGMENT_MM and MAX_ARC_SEGMENT_MM." -#elif defined(LASER_POWER_INLINE) - #error "LASER_POWER_INLINE is obsolete." -#elif defined(SPINDLE_LASER_PWM) - #error "SPINDLE_LASER_PWM (true) is now set with SPINDLE_LASER_USE_PWM (enabled)." -#elif ANY(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) - #error "The IS_RAMPS_* conditionals (for heater/fan/bed pins) are now called FET_ORDER_*." -#elif defined(PROBE_TEMP_COMPENSATION) - #error "PROBE_TEMP_COMPENSATION is now set using the PTC_PROBE, PTC_BED, PTC_HOTEND options." -#elif defined(BTC_PROBE_TEMP) - #error "BTC_PROBE_TEMP is now PTC_PROBE_TEMP." -#elif defined(LCD_SCREEN_ROT_90) - #error "LCD_SCREEN_ROT_90 is now LCD_SCREEN_ROTATE with a value of 90." -#elif defined(LCD_SCREEN_ROT_180) - #error "LCD_SCREEN_ROT_180 is now LCD_SCREEN_ROTATE with a value of 180." -#elif defined(LCD_SCREEN_ROT_270) - #error "LCD_SCREEN_ROT_270 is now LCD_SCREEN_ROTATE with a value of 270." -#elif defined(DEFAULT_LCD_BRIGHTNESS) - #error "DEFAULT_LCD_BRIGHTNESS is now LCD_BRIGHTNESS_DEFAULT." -#elif defined(NOZZLE_PARK_X_ONLY) - #error "NOZZLE_PARK_X_ONLY is now NOZZLE_PARK_MOVE 1." -#elif defined(NOZZLE_PARK_Y_ONLY) - #error "NOZZLE_PARK_Y_ONLY is now NOZZLE_PARK_MOVE 2." -#elif defined(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) - #error "Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS is now just Z_STEPPER_ALIGN_STEPPER_XY." -#elif defined(DWIN_CREALITY_LCD_ENHANCED) - #error "DWIN_CREALITY_LCD_ENHANCED is now DWIN_LCD_PROUI." -#elif defined(LINEAR_AXES) - #error "LINEAR_AXES is now NUM_AXES (to account for rotational axes)." -#elif defined(X_DUAL_STEPPER_DRIVERS) - #error "X_DUAL_STEPPER_DRIVERS is no longer needed and should be removed." -#elif defined(Y_DUAL_STEPPER_DRIVERS) - #error "Y_DUAL_STEPPER_DRIVERS is no longer needed and should be removed." -#elif defined(NUM_Z_STEPPER_DRIVERS) - #error "NUM_Z_STEPPER_DRIVERS is no longer needed and should be removed." -#elif defined(LEVEL_BED_CORNERS) - #error "LEVEL_BED_CORNERS is now LCD_BED_TRAMMING." -#elif defined(LEVEL_CORNERS_INSET_LFRB) || defined(LEVEL_CORNERS_HEIGHT) || defined(LEVEL_CORNERS_Z_HOP) || defined(LEVEL_CORNERS_USE_PROBE) || defined(LEVEL_CORNERS_PROBE_TOLERANCE) || defined(LEVEL_CORNERS_VERIFY_RAISED) || defined(LEVEL_CORNERS_AUDIO_FEEDBACK) - #error "LEVEL_CORNERS_* settings have been renamed BED_TRAMMING_*." -#elif defined(LEVEL_CENTER_TOO) - #error "LEVEL_CENTER_TOO is now BED_TRAMMING_INCLUDE_CENTER." -#elif defined(TOUCH_IDLE_SLEEP) - #error "TOUCH_IDLE_SLEEP (seconds) is now TOUCH_IDLE_SLEEP_MINS (minutes)." -#elif defined(LCD_BACKLIGHT_TIMEOUT) - #error "LCD_BACKLIGHT_TIMEOUT (seconds) is now LCD_BACKLIGHT_TIMEOUT_MINS (minutes)." -#elif defined(LCD_SET_PROGRESS_MANUALLY) - #error "LCD_SET_PROGRESS_MANUALLY is now SET_PROGRESS_MANUALLY." -#elif defined(USE_M73_REMAINING_TIME) - #error "USE_M73_REMAINING_TIME is now SET_REMAINING_TIME." -#elif defined(SHOW_SD_PERCENT) - #error "SHOW_SD_PERCENT is now SHOW_PROGRESS_PERCENT." -#elif defined(LIN_ADVANCE_K) - #error "LIN_ADVANCE_K is now ADVANCE_K." -#elif defined(EXTRA_LIN_ADVANCE_K) - #error "EXTRA_LIN_ADVANCE_K is now ADVANCE_K_EXTRA." -#elif defined(POLAR_SEGMENTS_PER_SECOND) || defined(DELTA_SEGMENTS_PER_SECOND) || defined(SCARA_SEGMENTS_PER_SECOND) || defined(TPARA_SEGMENTS_PER_SECOND) - #error "(POLAR|DELTA|SCARA|TPARA)_SEGMENTS_PER_SECOND is now DEFAULT_SEGMENTS_PER_SECOND." -#elif defined(TMC_SW_MOSI) || defined(TMC_SW_MISO) || defined(TMC_SW_SCK) - #error "TMC_SW_(MOSI|MISO|SCK) is now TMC_SPI_(MOSI|MISO|SCK)." -#elif ANY(DGUS_LCD_UI_ORIGIN, DGUS_LCD_UI_FYSETC, DGUS_LCD_UI_HIPRECY, DGUS_LCD_UI_MKS, DGUS_LCD_UI_RELOADED) && !defined(DGUS_LCD_UI) - #error "DGUS_LCD_UI_[TYPE] is now set using DGUS_LCD_UI TYPE." -#elif defined(DELTA_PRINTABLE_RADIUS) - #error "DELTA_PRINTABLE_RADIUS is now PRINTABLE_RADIUS." -#elif defined(SCARA_PRINTABLE_RADIUS) - #error "SCARA_PRINTABLE_RADIUS is now PRINTABLE_RADIUS." -#elif defined(SCARA_FEEDRATE_SCALING) - #error "SCARA_FEEDRATE_SCALING is now FEEDRATE_SCALING." -#elif defined(MILLISECONDS_PREHEAT_TIME) - #error "MILLISECONDS_PREHEAT_TIME is now PREHEAT_TIME_HOTEND_MS." -#elif defined(EXPERIMENTAL_SCURVE) - #error "EXPERIMENTAL_SCURVE is no longer needed and should be removed." -#elif defined(BABYSTEP_ZPROBE_GFX_OVERLAY) - #error "BABYSTEP_ZPROBE_GFX_OVERLAY is now BABYSTEP_GFX_OVERLAY." -#elif defined(DISABLE_INACTIVE_EXTRUDER) - #error "DISABLE_INACTIVE_EXTRUDER is now DISABLE_OTHER_EXTRUDERS." -#elif defined(INVERT_X_STEP_PIN) || defined(INVERT_Y_STEP_PIN) || defined(INVERT_Z_STEP_PIN) || defined(INVERT_I_STEP_PIN) || defined(INVERT_J_STEP_PIN) || defined(INVERT_K_STEP_PIN) || defined(INVERT_U_STEP_PIN) || defined(INVERT_V_STEP_PIN) || defined(INVERT_W_STEP_PIN) || defined(INVERT_E_STEP_PIN) - #error "INVERT_*_STEP_PIN true is now STEP_STATE_* LOW, and INVERT_*_STEP_PIN false is now STEP_STATE_* HIGH." -#elif defined(PROBE_PT_1_X) || defined(PROBE_PT_1_Y) || defined(PROBE_PT_2_X) || defined(PROBE_PT_2_Y) || defined(PROBE_PT_3_X) || defined(PROBE_PT_3_Y) - #error "PROBE_PT_[123]_[XY] is now defined using PROBE_PT_[123] with an array { x, y }." -#elif defined(SQUARE_WAVE_STEPPING) - #error "SQUARE_WAVE_STEPPING is now EDGE_STEPPING." -#elif defined(FAN_PIN) - #error "FAN_PIN is now FAN0_PIN." -#elif defined(X_MIN_ENDSTOP_INVERTING) || defined(Y_MIN_ENDSTOP_INVERTING) || defined(Z_MIN_ENDSTOP_INVERTING) \ - || defined(I_MIN_ENDSTOP_INVERTING) || defined(J_MIN_ENDSTOP_INVERTING) || defined(K_MIN_ENDSTOP_INVERTING) \ - || defined(U_MIN_ENDSTOP_INVERTING) || defined(V_MIN_ENDSTOP_INVERTING) || defined(W_MIN_ENDSTOP_INVERTING) \ - || defined(X_MAX_ENDSTOP_INVERTING) || defined(Y_MAX_ENDSTOP_INVERTING) || defined(Z_MAX_ENDSTOP_INVERTING) \ - || defined(I_MAX_ENDSTOP_INVERTING) || defined(J_MAX_ENDSTOP_INVERTING) || defined(K_MAX_ENDSTOP_INVERTING) \ - || defined(U_MAX_ENDSTOP_INVERTING) || defined(V_MAX_ENDSTOP_INVERTING) || defined(W_MAX_ENDSTOP_INVERTING) \ - || defined(Z_MIN_PROBE_ENDSTOP_INVERTING) - #error "*_ENDSTOP_INVERTING false/true is now set with *_ENDSTOP_HIT_STATE HIGH/LOW." -#elif defined(DISABLE_INACTIVE_X) || defined(DISABLE_INACTIVE_Y) || defined(DISABLE_INACTIVE_Z) \ - || defined(DISABLE_INACTIVE_I) || defined(DISABLE_INACTIVE_J) || defined(DISABLE_INACTIVE_K) \ - || defined(DISABLE_INACTIVE_U) || defined(DISABLE_INACTIVE_V) || defined(DISABLE_INACTIVE_W) || defined(DISABLE_INACTIVE_E) - #error "DISABLE_INACTIVE_[XYZIJKUVWE] is now DISABLE_IDLE_[XYZIJKUVWE]." -#elif defined(DEFAULT_STEPPER_DEACTIVE_TIME) - #error "DEFAULT_STEPPER_DEACTIVE_TIME is now DEFAULT_STEPPER_TIMEOUT_SEC." -#elif defined(TFT_SHARED_SPI) - #error "TFT_SHARED_SPI is now TFT_SHARED_IO." -#elif defined(LCD_PINS_ENABLE) - #error "LCD_PINS_ENABLE is now LCD_PINS_EN." -#endif - -// L64xx stepper drivers have been removed -#define _L6470 0x6470 -#define _L6474 0x6474 -#define _L6480 0x6480 -#define _POWERSTEP01 0xF00D -#if HAS_DRIVER(L6470) - #error "L6470 stepper drivers are no longer supported in Marlin." -#elif HAS_DRIVER(L6474) - #error "L6474 stepper drivers are no longer supported in Marlin." -#elif HAS_DRIVER(L6480) - #error "L6480 stepper drivers are no longer supported in Marlin." -#elif HAS_DRIVER(POWERSTEP01) - #error "POWERSTEP01 stepper drivers are no longer supported in Marlin." -#endif -#undef _L6470 -#undef _L6474 -#undef _L6480 -#undef _POWERSTEP01 +#endif + +/** + * Required Version defines + */ +#ifndef SHORT_BUILD_VERSION + #error "SHORT_BUILD_VERSION must be specified." +#elif !defined(DETAILED_BUILD_VERSION) + #error "BUILD_VERSION must be specified." +#elif !defined(STRING_DISTRIBUTION_DATE) + #error "STRING_DISTRIBUTION_DATE must be specified." +#elif !defined(PROTOCOL_VERSION) + #error "PROTOCOL_VERSION must be specified." +#elif !defined(MACHINE_NAME) + #error "MACHINE_NAME must be specified." +#elif !defined(SOURCE_CODE_URL) + #error "SOURCE_CODE_URL must be specified." +#elif !defined(DEFAULT_MACHINE_UUID) + #error "DEFAULT_MACHINE_UUID must be specified." +#elif !defined(WEBSITE_URL) + #error "WEBSITE_URL must be specified." +#endif // Check AXIS_RELATIVE_MODES constexpr float arm[] = AXIS_RELATIVE_MODES; @@ -823,27 +208,6 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L #endif #endif // HAS_PTC -/** - * Marlin release, version and default string - */ -#ifndef SHORT_BUILD_VERSION - #error "SHORT_BUILD_VERSION must be specified." -#elif !defined(DETAILED_BUILD_VERSION) - #error "BUILD_VERSION must be specified." -#elif !defined(STRING_DISTRIBUTION_DATE) - #error "STRING_DISTRIBUTION_DATE must be specified." -#elif !defined(PROTOCOL_VERSION) - #error "PROTOCOL_VERSION must be specified." -#elif !defined(MACHINE_NAME) - #error "MACHINE_NAME must be specified." -#elif !defined(SOURCE_CODE_URL) - #error "SOURCE_CODE_URL must be specified." -#elif !defined(DEFAULT_MACHINE_UUID) - #error "DEFAULT_MACHINE_UUID must be specified." -#elif !defined(WEBSITE_URL) - #error "WEBSITE_URL must be specified." -#endif - /** * Serial */ @@ -875,15 +239,13 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L /** * Multiple Stepper Drivers Per Axis */ -#define GOOD_AXIS_PINS(A) (HAS_##A##_ENABLE && HAS_##A##_STEP && HAS_##A##_DIR) -#if HAS_X2_STEPPER && !GOOD_AXIS_PINS(X) +#define GOOD_AXIS_PINS(A) PINS_EXIST(A##_ENABLE, A##_STEP, A##_DIR) +#if HAS_X2_STEPPER && !GOOD_AXIS_PINS(X2) #error "If X2_DRIVER_TYPE is defined, then X2 ENABLE/STEP/DIR pins are also needed." #endif - -#if HAS_DUAL_Y_STEPPERS && !GOOD_AXIS_PINS(Y) +#if HAS_DUAL_Y_STEPPERS && !GOOD_AXIS_PINS(Y2) #error "If Y2_DRIVER_TYPE is defined, then Y2 ENABLE/STEP/DIR pins are also needed." #endif - #if HAS_Z_AXIS #if NUM_Z_STEPPERS >= 2 && !GOOD_AXIS_PINS(Z2) #error "If Z2_DRIVER_TYPE is defined, then Z2 ENABLE/STEP/DIR pins are also needed." @@ -895,11 +257,17 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L #endif /** - * Validate that the bed size fits + * Validate bed size */ -static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS) are too narrow to contain X_BED_SIZE."); -#if HAS_Y_AXIS - static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS) are too narrow to contain Y_BED_SIZE."); +#if !defined(X_BED_SIZE) || !defined(Y_BED_SIZE) + #error "X_BED_SIZE and Y_BED_SIZE are now required!" +#else + #if HAS_X_AXIS + static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS) are too narrow to contain X_BED_SIZE."); + #endif + #if HAS_Y_AXIS + static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS) are too narrow to contain Y_BED_SIZE."); + #endif #endif /** @@ -978,7 +346,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS * Progress Bar */ #if ENABLED(LCD_PROGRESS_BAR) - #if NONE(SDSUPPORT, SET_PROGRESS_MANUALLY) + #if NONE(HAS_MEDIA, SET_PROGRESS_MANUALLY) #error "LCD_PROGRESS_BAR requires SDSUPPORT or SET_PROGRESS_MANUALLY." #elif NONE(HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL) #error "LCD_PROGRESS_BAR only applies to HD44780 character LCD and TFTGLCD_PANEL_(SPI|I2C)." @@ -1028,7 +396,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS /** * SD Card Settings */ -#if ALL(SDSUPPORT, HAS_SD_DETECT, SD_CONNECTION_TYPICAL, ELB_FULL_GRAPHIC_CONTROLLER, HAS_MARLINUI_MENU) && SD_DETECT_STATE == LOW +#if ALL(HAS_MEDIA, HAS_SD_DETECT, SD_CONNECTION_TYPICAL, ELB_FULL_GRAPHIC_CONTROLLER, HAS_MARLINUI_MENU) && SD_DETECT_STATE == LOW #error "SD_DETECT_STATE must be set HIGH for SD on the ELB_FULL_GRAPHIC_CONTROLLER." #endif #undef SD_CONNECTION_TYPICAL @@ -1176,8 +544,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #error "ADVANCED_PAUSE_FEATURE requires FILAMENT_UNLOAD_PURGE_FEEDRATE." #elif ENABLED(EXTRUDER_RUNOUT_PREVENT) #error "EXTRUDER_RUNOUT_PREVENT is incompatible with ADVANCED_PAUSE_FEATURE." - #elif ENABLED(PARK_HEAD_ON_PAUSE) && NONE(SDSUPPORT, IS_NEWPANEL, EMERGENCY_PARSER) - #error "PARK_HEAD_ON_PAUSE requires SDSUPPORT, EMERGENCY_PARSER, or an LCD controller." + #elif ENABLED(PARK_HEAD_ON_PAUSE) && NONE(HAS_MEDIA, IS_NEWPANEL, EMERGENCY_PARSER) + #error "PARK_HEAD_ON_PAUSE requires HAS_MEDIA, EMERGENCY_PARSER, or an LCD controller." #elif ENABLED(HOME_BEFORE_FILAMENT_CHANGE) && DISABLED(PAUSE_PARK_NO_STEPPER_TIMEOUT) #error "HOME_BEFORE_FILAMENT_CHANGE requires PAUSE_PARK_NO_STEPPER_TIMEOUT." #elif ENABLED(PREVENT_LENGTHY_EXTRUDE) && FILAMENT_CHANGE_UNLOAD_LENGTH > EXTRUDE_MAXLENGTH @@ -1560,14 +928,19 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS /** * Part-Cooling Fan Multiplexer requirements */ -#if PIN_EXISTS(FANMUX1) - #if !HAS_FANMUX - #error "FANMUX0_PIN must be set before FANMUX1_PIN can be set." - #endif -#elif PIN_EXISTS(FANMUX2) +#if HAS_FANMUX && !HAS_FAN0 + #error "FAN0_PIN must be defined to use Fan Multiplexing." +#elif PIN_EXISTS(FANMUX1) && !PIN_EXISTS(FANMUX0) + #error "FANMUX0_PIN must be set before FANMUX1_PIN can be set." +#elif PIN_EXISTS(FANMUX2) && !PINS_EXIST(FANMUX0, FANMUX1) #error "FANMUX0_PIN and FANMUX1_PIN must be set before FANMUX2_PIN can be set." #endif +// PID Fan Scaling requires a fan +#if defined(PID_FAN_SCALING) && !HAS_FAN + #error "PID_FAN_SCALING needs at least one fan enabled." +#endif + /** * Limited user-controlled fans */ @@ -1608,7 +981,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #endif #if ENABLED(MPC_INCLUDE_FAN) - #if FAN_COUNT < 1 + #if !HAS_FAN #error "MPC_INCLUDE_FAN requires at least one fan." #endif #if FAN_COUNT < HOTENDS @@ -1627,8 +1000,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #error "To use BED_LIMIT_SWITCHING you must disable PIDTEMPBED." #endif -// Fan Kickstart -#if FAN_KICKSTART_TIME && defined(FAN_KICKSTART_POWER) && !WITHIN(FAN_KICKSTART_POWER, 64, 255) +// Fan Kickstart power +#if FAN_KICKSTART_TIME && !WITHIN(FAN_KICKSTART_POWER, 64, 255) #error "FAN_KICKSTART_POWER must be an integer from 64 to 255." #endif @@ -1904,7 +1277,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS static_assert(!(strcmp(hs, "1") && strcmp(hs, "true") && strcmp(hs, "0") && strcmp(hs, "false")), \ "BLTOUCH_HS_MODE must now be defined as true or false, indicating the default state."); #ifdef BLTOUCH_HS_EXTRA_CLEARANCE - static_assert(BLTOUCH_HS_EXTRA_CLEARANCE > 0, "BLTOUCH_HS_MODE requires a positive BLTOUCH_HS_EXTRA_CLEARANCE."); + static_assert(BLTOUCH_HS_EXTRA_CLEARANCE >= 0, "BLTOUCH_HS_MODE requires BLTOUCH_HS_EXTRA_CLEARANCE >= 0."); #endif #endif @@ -2004,9 +1377,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #error "SENSORLESS_PROBING requires a TMC2130/2160/2209/5130/5160 driver on Z and Z_STALL_SENSITIVITY." #endif #elif ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) - #if DISABLED(USE_ZMIN_PLUG) - #error "Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN requires USE_ZMIN_PLUG to be enabled." - #elif !HAS_Z_MIN + #if !HAS_Z_MIN_PIN #error "Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN requires the Z_MIN_PIN to be defined." #elif Z_MIN_PROBE_ENDSTOP_HIT_STATE != Z_MIN_ENDSTOP_HIT_STATE #error "Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN requires Z_MIN_ENDSTOP_HIT_STATE to match Z_MIN_PROBE_ENDSTOP_HIT_STATE." @@ -2397,7 +1768,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #elif !GOOD_AXIS_PINS(X2) #error "DUAL_X_CARRIAGE requires X2 stepper pins to be defined." #elif !HAS_X_MAX - #error "DUAL_X_CARRIAGE requires USE_XMAX_PLUG and an X Max Endstop." + #error "DUAL_X_CARRIAGE requires an X_MAX_PIN in addition to the X_MIN_PIN." #elif !defined(X2_HOME_POS) || !defined(X2_MIN_POS) || !defined(X2_MAX_POS) #error "DUAL_X_CARRIAGE requires X2_HOME_POS, X2_MIN_POS, and X2_MAX_POS." #elif X_HOME_TO_MAX || X2_HOME_TO_MIN @@ -2454,6 +1825,21 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #endif #endif +/** + * Make sure FAN_*_PWM values are sensible + */ +#if EITHER(HAS_FAN, USE_CONTROLLER_FAN) + #if !WITHIN(FAN_MIN_PWM, 0, 255) + #error "FAN_MIN_PWM must be a value from 0 to 255." + #elif !WITHIN(FAN_MAX_PWM, 0, 255) + #error "FAN_MAX_PWM must be a value from 0 to 255." + #elif FAN_MIN_PWM > FAN_MAX_PWM + #error "FAN_MIN_PWM must be less than or equal to FAN_MAX_PWM." + #elif FAN_OFF_PWM > FAN_MIN_PWM + #error "FAN_OFF_PWM must be less than or equal to FAN_MIN_PWM." + #endif +#endif + #ifdef REDUNDANT_PART_COOLING_FAN #if FAN_COUNT < 2 #error "REDUNDANT_PART_COOLING_FAN requires a board with at least two PWM fans." @@ -2586,6 +1972,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be PROBE. TEMP_SENSOR_PROBE is in use." #elif REDUNDANT_TEMP_MATCH(SOURCE, BOARD) && HAS_TEMP_BOARD #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be BOARD. TEMP_SENSOR_BOARD is in use." + #elif REDUNDANT_TEMP_MATCH(SOURCE, SOC) + #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be SOC." #elif REDUNDANT_TEMP_MATCH(SOURCE, CHAMBER) && HAS_TEMP_CHAMBER #error "TEMP_SENSOR_REDUNDANT_SOURCE can't be CHAMBER. TEMP_SENSOR_CHAMBER is in use." #elif REDUNDANT_TEMP_MATCH(SOURCE, BED) && HAS_TEMP_BED @@ -2614,6 +2002,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #error "TEMP_SENSOR_REDUNDANT_TARGET can't be CHAMBER without TEMP_CHAMBER_PIN defined." #elif REDUNDANT_TEMP_MATCH(TARGET, BOARD) && !PIN_EXISTS(TEMP_BOARD) #error "TEMP_SENSOR_REDUNDANT_TARGET can't be BOARD without TEMP_BOARD_PIN defined." + #elif REDUNDANT_TEMP_MATCH(TARGET, SOC) + #error "TEMP_SENSOR_REDUNDANT_TARGET can't be SOC." #elif REDUNDANT_TEMP_MATCH(TARGET, PROBE) && !PIN_EXISTS(TEMP_PROBE) #error "TEMP_SENSOR_REDUNDANT_TARGET can't be PROBE without TEMP_PROBE_PIN defined." #elif REDUNDANT_TEMP_MATCH(TARGET, COOLER) && !PIN_EXISTS(TEMP_COOLER) @@ -2628,84 +2018,101 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #endif /** - * Test Sensor & Heater pin combos. * Pins and Sensor IDs must be set for each heater */ -#if HAS_EXTRUDERS && !ANY_PIN(TEMP_0, TEMP_0_CS) - #error "TEMP_0_PIN or TEMP_0_CS_PIN not defined for this board." -#elif HAS_EXTRUDERS && !HAS_HEATER_0 - #error "HEATER_0_PIN not defined for this board." -#elif TEMP_SENSOR_IS_MAX_TC(0) && !PIN_EXISTS(TEMP_0_CS) - #error "TEMP_SENSOR_0 MAX thermocouple requires TEMP_0_CS_PIN." -#elif HAS_HOTEND && !HAS_TEMP_HOTEND && !TEMP_SENSOR_0_IS_DUMMY - #error "TEMP_0_PIN (required for TEMP_SENSOR_0) not defined for this board." -#elif EITHER(HAS_MULTI_HOTEND, HEATERS_PARALLEL) && !HAS_HEATER_1 - #error "HEATER_1_PIN is not defined. TEMP_SENSOR_1 might not be set, or the board (not EEB / EEF?) doesn't define a pin." -#endif - -#if HAS_MULTI_HOTEND - #if TEMP_SENSOR_IS_MAX_TC(1) && !PIN_EXISTS(TEMP_1_CS) - #error "TEMP_SENSOR_1 MAX thermocouple requires TEMP_1_CS_PIN." - #elif TEMP_SENSOR_1 == 0 - #error "TEMP_SENSOR_1 is required with 2 or more HOTENDS." - #elif !ANY_PIN(TEMP_1, TEMP_1_CS) && !TEMP_SENSOR_1_IS_DUMMY - #error "TEMP_1_PIN or TEMP_1_CS_PIN not defined for this board." - #endif - #if HOTENDS > 2 - #if TEMP_SENSOR_2 == 0 - #error "TEMP_SENSOR_2 is required with 3 or more HOTENDS." - #elif !HAS_HEATER_2 - #error "HEATER_2_PIN not defined for this board." - #elif !ANY_PIN(TEMP_2, TEMP_2_CS) && !TEMP_SENSOR_2_IS_DUMMY - #error "TEMP_2_PIN or TEMP_2_CS_PIN not defined for this board." - #endif - #if HOTENDS > 3 - #if TEMP_SENSOR_3 == 0 - #error "TEMP_SENSOR_3 is required with 4 or more HOTENDS." - #elif !HAS_HEATER_3 - #error "HEATER_3_PIN not defined for this board." - #elif !PIN_EXISTS(TEMP_3) && !TEMP_SENSOR_3_IS_DUMMY - #error "TEMP_3_PIN not defined for this board." +#if HAS_HOTEND + #if !HAS_HEATER_0 + #error "HEATER_0_PIN not defined for this board." + #elif TEMP_SENSOR_IS_MAX_TC(0) && !PIN_EXISTS(TEMP_0_CS) + #error "TEMP_SENSOR_0 MAX thermocouple requires TEMP_0_CS_PIN." + #elif TEMP_SENSOR_0 == 100 + #error "TEMP_SENSOR_0 can't use Soc temperature sensor." + #elif TEMP_SENSOR_0 == 0 + #error "TEMP_SENSOR_0 is required with 1 or more HOTENDS." + #elif !ANY_PIN(TEMP_0, TEMP_0_CS) && !TEMP_SENSOR_0_IS_DUMMY + #error "TEMP_0_PIN or TEMP_0_CS_PIN not defined for this board." + #endif + #if EITHER(HAS_MULTI_HOTEND, HEATERS_PARALLEL) && !HAS_HEATER_1 + #error "HEATER_1_PIN is not defined. TEMP_SENSOR_1 might not be set, or the board (not EEB / EEF?) doesn't define a pin." + #endif + #if HAS_MULTI_HOTEND + #if TEMP_SENSOR_IS_MAX_TC(1) && !PIN_EXISTS(TEMP_1_CS) + #error "TEMP_SENSOR_1 MAX thermocouple requires TEMP_1_CS_PIN." + #elif TEMP_SENSOR_1 == 100 + #error "TEMP_SENSOR_1 can't use Soc temperature sensor." + #elif TEMP_SENSOR_1 == 0 + #error "TEMP_SENSOR_1 is required with 2 or more HOTENDS." + #elif !ANY_PIN(TEMP_1, TEMP_1_CS) && !TEMP_SENSOR_1_IS_DUMMY + #error "TEMP_1_PIN or TEMP_1_CS_PIN not defined for this board." + #endif + #if HOTENDS > 2 + #if TEMP_SENSOR_2 == 100 + #error "TEMP_SENSOR_2 can't use Soc temperature sensor." + #elif TEMP_SENSOR_2 == 0 + #error "TEMP_SENSOR_2 is required with 3 or more HOTENDS." + #elif !HAS_HEATER_2 + #error "HEATER_2_PIN not defined for this board." + #elif !ANY_PIN(TEMP_2, TEMP_2_CS) && !TEMP_SENSOR_2_IS_DUMMY + #error "TEMP_2_PIN or TEMP_2_CS_PIN not defined for this board." #endif - #if HOTENDS > 4 - #if TEMP_SENSOR_4 == 0 - #error "TEMP_SENSOR_4 is required with 5 or more HOTENDS." - #elif !HAS_HEATER_4 - #error "HEATER_4_PIN not defined for this board." - #elif !PIN_EXISTS(TEMP_4) && !TEMP_SENSOR_4_IS_DUMMY - #error "TEMP_4_PIN not defined for this board." + #if HOTENDS > 3 + #if TEMP_SENSOR_3 == 100 + #error "TEMP_SENSOR_3 can't use Soc temperature sensor." + #elif TEMP_SENSOR_3 == 0 + #error "TEMP_SENSOR_3 is required with 4 or more HOTENDS." + #elif !HAS_HEATER_3 + #error "HEATER_3_PIN not defined for this board." + #elif !PIN_EXISTS(TEMP_3) && !TEMP_SENSOR_3_IS_DUMMY + #error "TEMP_3_PIN not defined for this board." #endif - #if HOTENDS > 5 - #if TEMP_SENSOR_5 == 0 - #error "TEMP_SENSOR_5 is required with 6 HOTENDS." - #elif !HAS_HEATER_5 - #error "HEATER_5_PIN not defined for this board." - #elif !PIN_EXISTS(TEMP_5) && !TEMP_SENSOR_5_IS_DUMMY - #error "TEMP_5_PIN not defined for this board." + #if HOTENDS > 4 + #if TEMP_SENSOR_4 == 100 + #error "TEMP_SENSOR_4 can't use Soc temperature sensor." + #elif TEMP_SENSOR_4 == 0 + #error "TEMP_SENSOR_4 is required with 5 or more HOTENDS." + #elif !HAS_HEATER_4 + #error "HEATER_4_PIN not defined for this board." + #elif !PIN_EXISTS(TEMP_4) && !TEMP_SENSOR_4_IS_DUMMY + #error "TEMP_4_PIN not defined for this board." #endif - #if HOTENDS > 6 - #if TEMP_SENSOR_6 == 0 - #error "TEMP_SENSOR_6 is required with 6 HOTENDS." - #elif !HAS_HEATER_6 - #error "HEATER_6_PIN not defined for this board." - #elif !PIN_EXISTS(TEMP_6) && !TEMP_SENSOR_6_IS_DUMMY - #error "TEMP_6_PIN not defined for this board." + #if HOTENDS > 5 + #if TEMP_SENSOR_5 == 100 + #error "TEMP_SENSOR_5 can't use Soc temperature sensor." + #elif TEMP_SENSOR_5 == 0 + #error "TEMP_SENSOR_5 is required with 6 HOTENDS." + #elif !HAS_HEATER_5 + #error "HEATER_5_PIN not defined for this board." + #elif !PIN_EXISTS(TEMP_5) && !TEMP_SENSOR_5_IS_DUMMY + #error "TEMP_5_PIN not defined for this board." #endif - #if HOTENDS > 7 - #if TEMP_SENSOR_7 == 0 - #error "TEMP_SENSOR_7 is required with 7 HOTENDS." - #elif !HAS_HEATER_7 - #error "HEATER_7_PIN not defined for this board." - #elif !PIN_EXISTS(TEMP_7) && !TEMP_SENSOR_7_IS_DUMMY - #error "TEMP_7_PIN not defined for this board." + #if HOTENDS > 6 + #if TEMP_SENSOR_6 == 100 + #error "TEMP_SENSOR_6 can't use Soc temperature sensor." + #elif TEMP_SENSOR_6 == 0 + #error "TEMP_SENSOR_6 is required with 6 HOTENDS." + #elif !HAS_HEATER_6 + #error "HEATER_6_PIN not defined for this board." + #elif !PIN_EXISTS(TEMP_6) && !TEMP_SENSOR_6_IS_DUMMY + #error "TEMP_6_PIN not defined for this board." #endif - #endif // HOTENDS > 7 - #endif // HOTENDS > 6 - #endif // HOTENDS > 5 - #endif // HOTENDS > 4 - #endif // HOTENDS > 3 - #endif // HOTENDS > 2 -#endif // HAS_MULTI_HOTEND + #if HOTENDS > 7 + #if TEMP_SENSOR_7 == 100 + #error "TEMP_SENSOR_7 can't use Soc temperature sensor." + #elif TEMP_SENSOR_7 == 0 + #error "TEMP_SENSOR_7 is required with 7 HOTENDS." + #elif !HAS_HEATER_7 + #error "HEATER_7_PIN not defined for this board." + #elif !PIN_EXISTS(TEMP_7) && !TEMP_SENSOR_7_IS_DUMMY + #error "TEMP_7_PIN not defined for this board." + #endif + #endif // HOTENDS > 7 + #endif // HOTENDS > 6 + #endif // HOTENDS > 5 + #endif // HOTENDS > 4 + #endif // HOTENDS > 3 + #endif // HOTENDS > 2 + #endif // HAS_MULTI_HOTEND +#endif // HAS_HOTEND #if DO_TOOLCHANGE_FOR_PROBING && PROBING_TOOL >= EXTRUDERS #error "PROBING_TOOL must be a valid tool index." @@ -2714,12 +2121,22 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS /** * Pins must be set for temp sensors, with some other feature requirements. */ -#if TEMP_SENSOR_CHAMBER && !PIN_EXISTS(TEMP_CHAMBER) - #error "TEMP_SENSOR_CHAMBER requires TEMP_CHAMBER_PIN." +#if TEMP_SENSOR_BED == 100 + #error "TEMP_SENSOR_BED can't use Soc temperature sensor." +#endif + +#if TEMP_SENSOR_CHAMBER + #if TEMP_SENSOR_CHAMBER == 100 + #error "TEMP_SENSOR_CHAMBER can't use Soc temperature sensor." + #elif !PIN_EXISTS(TEMP_CHAMBER) + #error "TEMP_SENSOR_CHAMBER requires TEMP_CHAMBER_PIN." + #endif #endif #if TEMP_SENSOR_COOLER - #if !PIN_EXISTS(TEMP_COOLER) + #if TEMP_SENSOR_COOLER == 100 + #error "TEMP_SENSOR_COOLER can't use Soc temperature sensor." + #elif !PIN_EXISTS(TEMP_COOLER) #error "TEMP_SENSOR_COOLER requires TEMP_COOLER_PIN." #elif DISABLED(LASER_FEATURE) #error "TEMP_SENSOR_COOLER requires LASER_FEATURE." @@ -2727,7 +2144,9 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #endif #if TEMP_SENSOR_PROBE - #if !PIN_EXISTS(TEMP_PROBE) + #if TEMP_SENSOR_PROBE == 100 + #error "TEMP_SENSOR_PROBE can't use Soc temperature sensor." + #elif !PIN_EXISTS(TEMP_PROBE) #error "TEMP_SENSOR_PROBE requires TEMP_PROBE_PIN." #elif DISABLED(FIX_MOUNTED_PROBE) #error "TEMP_SENSOR_PROBE shouldn't be set without FIX_MOUNTED_PROBE." @@ -2735,7 +2154,9 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #endif #if TEMP_SENSOR_BOARD - #if !PIN_EXISTS(TEMP_BOARD) + #if TEMP_SENSOR_BOARD == 100 + #error "TEMP_SENSOR_BOARD can't use Soc temperature sensor." + #elif !PIN_EXISTS(TEMP_BOARD) #error "TEMP_SENSOR_BOARD requires TEMP_BOARD_PIN." #elif ENABLED(THERMAL_PROTECTION_BOARD) && (!defined(BOARD_MINTEMP) || !defined(BOARD_MAXTEMP)) #error "THERMAL_PROTECTION_BOARD requires BOARD_MINTEMP and BOARD_MAXTEMP." @@ -2744,8 +2165,16 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #error "CONTROLLER_FAN_MIN_BOARD_TEMP requires TEMP_SENSOR_BOARD." #endif -#if TEMP_SENSOR_BOARD && !PIN_EXISTS(TEMP_BOARD) - #error "TEMP_SENSOR_BOARD requires TEMP_BOARD_PIN." +#if TEMP_SENSOR_SOC + #if TEMP_SENSOR_SOC != 100 + #error "TEMP_SENSOR_SOC requires TEMP_SENSOR_SOC 100." + #elif !PIN_EXISTS(TEMP_SOC) + #error "TEMP_SENSOR_SOC requires TEMP_SOC_PIN." + #elif ENABLED(THERMAL_PROTECTION_SOC) && !defined(SOC_MAXTEMP) + #error "THERMAL_PROTECTION_SOC requires SOC_MAXTEMP." + #endif +#elif CONTROLLER_FAN_MIN_SOC_TEMP + #error "CONTROLLER_FAN_MIN_SOC_TEMP requires TEMP_SENSOR_SOC." #endif #if ENABLED(LASER_COOLANT_FLOW_METER) && !(PIN_EXISTS(FLOWMETER) && ENABLED(LASER_FEATURE)) @@ -2836,8 +2265,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #error "E0_STEP_PIN or E0_DIR_PIN not defined for this board." #elif ( !(defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__)) && (!PINS_EXIST(E0_STEP, E0_DIR) || !HAS_E0_ENABLE)) #error "E0_STEP_PIN, E0_DIR_PIN, or E0_ENABLE_PIN not defined for this board." - #elif EXTRUDERS && TEMP_SENSOR_0 == 0 - #error "TEMP_SENSOR_0 is required if there are any extruders." + #elif HOTENDS && TEMP_SENSOR_0 == 0 + #error "TEMP_SENSOR_0 is required if there are any hotends." #endif #endif @@ -2869,90 +2298,49 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS /** * Endstop Tests */ - -#define _PLUG_UNUSED_TEST(A,P) (DISABLED(USE_##P##MIN_PLUG, USE_##P##MAX_PLUG) \ - && !(ENABLED(A##_DUAL_ENDSTOPS) && WITHIN(A##2_USE_ENDSTOP, _##P##MAX_, _##P##MIN_)) \ - && !(ENABLED(A##_MULTI_ENDSTOPS) && WITHIN(A##2_USE_ENDSTOP, _##P##MAX_, _##P##MIN_)) ) -#define _AXIS_PLUG_UNUSED_TEST(A) (HAS_##A##_A NUM_AXIS_GANG(&& _PLUG_UNUSED_TEST(A,X), && _PLUG_UNUSED_TEST(A,Y), && _PLUG_UNUSED_TEST(A,Z), \ - && _PLUG_UNUSED_TEST(A,I), && _PLUG_UNUSED_TEST(A,J), && _PLUG_UNUSED_TEST(A,K), \ - && _PLUG_UNUSED_TEST(A,U), && _PLUG_UNUSED_TEST(A,V), && _PLUG_UNUSED_TEST(A,W) ) ) - -// A machine with endstops must have a minimum of 3 #if HAS_ENDSTOPS - #if _AXIS_PLUG_UNUSED_TEST(X) - #error "You must enable USE_XMIN_PLUG or USE_XMAX_PLUG." - #endif - #if _AXIS_PLUG_UNUSED_TEST(Y) - #error "You must enable USE_YMIN_PLUG or USE_YMAX_PLUG." - #endif - #if _AXIS_PLUG_UNUSED_TEST(Z) - #error "You must enable USE_ZMIN_PLUG or USE_ZMAX_PLUG." - #endif - #if _AXIS_PLUG_UNUSED_TEST(I) - #error "You must enable USE_IMIN_PLUG or USE_IMAX_PLUG." - #endif - #if _AXIS_PLUG_UNUSED_TEST(J) - #error "You must enable USE_JMIN_PLUG or USE_JMAX_PLUG." - #endif - #if _AXIS_PLUG_UNUSED_TEST(K) - #error "You must enable USE_KMIN_PLUG or USE_KMAX_PLUG." - #endif - #if _AXIS_PLUG_UNUSED_TEST(U) - #error "You must enable USE_UMIN_PLUG or USE_UMAX_PLUG." - #endif - #if _AXIS_PLUG_UNUSED_TEST(V) - #error "You must enable USE_VMIN_PLUG or USE_VMAX_PLUG." - #endif - #if _AXIS_PLUG_UNUSED_TEST(W) - #error "You must enable USE_WMIN_PLUG or USE_WMAX_PLUG." - #endif - // Delta and Cartesian use 3 homing endstops #if NONE(IS_SCARA, SPI_ENDSTOPS) - #if X_HOME_TO_MIN && DISABLED(USE_XMIN_PLUG) - #error "Enable USE_XMIN_PLUG when homing X to MIN." - #elif X_HOME_TO_MAX && DISABLED(USE_XMAX_PLUG) - #error "Enable USE_XMAX_PLUG when homing X to MAX." - #elif Y_HOME_TO_MIN && DISABLED(USE_YMIN_PLUG) - #error "Enable USE_YMIN_PLUG when homing Y to MIN." - #elif Y_HOME_TO_MAX && DISABLED(USE_YMAX_PLUG) - #error "Enable USE_YMAX_PLUG when homing Y to MAX." - #elif I_HOME_TO_MIN && DISABLED(USE_IMIN_PLUG) - #error "Enable USE_IMIN_PLUG when homing I to MIN." - #elif I_HOME_TO_MAX && DISABLED(USE_IMAX_PLUG) - #error "Enable USE_IMAX_PLUG when homing I to MAX." - #elif J_HOME_TO_MIN && DISABLED(USE_JMIN_PLUG) - #error "Enable USE_JMIN_PLUG when homing J to MIN." - #elif J_HOME_TO_MAX && DISABLED(USE_JMAX_PLUG) - #error "Enable USE_JMAX_PLUG when homing J to MAX." - #elif K_HOME_TO_MIN && DISABLED(USE_KMIN_PLUG) - #error "Enable USE_KMIN_PLUG when homing K to MIN." - #elif K_HOME_TO_MAX && DISABLED(USE_KMAX_PLUG) - #error "Enable USE_KMAX_PLUG when homing K to MAX." - #elif U_HOME_TO_MIN && DISABLED(USE_UMIN_PLUG) - #error "Enable USE_UMIN_PLUG when homing U to MIN." - #elif U_HOME_TO_MAX && DISABLED(USE_UMAX_PLUG) - #error "Enable USE_UMAX_PLUG when homing U to MAX." - #elif V_HOME_TO_MIN && DISABLED(USE_VMIN_PLUG) - #error "Enable USE_VMIN_PLUG when homing V to MIN." - #elif V_HOME_TO_MAX && DISABLED(USE_VMAX_PLUG) - #error "Enable USE_VMAX_PLUG when homing V to MAX." - #elif W_HOME_TO_MIN && DISABLED(USE_WMIN_PLUG) - #error "Enable USE_WMIN_PLUG when homing W to MIN." - #elif W_HOME_TO_MAX && DISABLED(USE_WMAX_PLUG) - #error "Enable USE_WMAX_PLUG when homing W to MAX." - #endif - #endif - - // Z homing direction and plug usage flags - #if Z_HOME_TO_MIN && NONE(USE_ZMIN_PLUG, HOMING_Z_WITH_PROBE) - #error "Enable USE_ZMIN_PLUG when homing Z to MIN." - #elif Z_HOME_TO_MAX && ENABLED(USE_PROBE_FOR_Z_HOMING) + #if X_HOME_TO_MIN && !PIN_EXISTS(X_MIN) + #error "X_MIN_PIN (or X_STOP_PIN) is required for X axis homing." + #elif X_HOME_TO_MAX && !PIN_EXISTS(X_MAX) + #error "X_MAX_PIN (or X_STOP_PIN) is required for X axis homing." + #elif Y_HOME_TO_MIN && !PIN_EXISTS(Y_MIN) + #error "Y_MIN_PIN (or Y_STOP_PIN) is required for Y axis homing." + #elif Y_HOME_TO_MAX && !PIN_EXISTS(Y_MAX) + #error "Y_MAX_PIN (or Y_STOP_PIN) is required for Y axis homing." + #elif I_HOME_TO_MIN && !PIN_EXISTS(I_MIN) + #error "I_MIN_PIN (or I_STOP_PIN) is required for I axis homing." + #elif I_HOME_TO_MAX && !PIN_EXISTS(I_MAX) + #error "I_MAX_PIN (or I_STOP_PIN) is required for I axis homing." + #elif J_HOME_TO_MIN && !PIN_EXISTS(J_MIN) + #error "J_MIN_PIN (or J_STOP_PIN) is required for J axis homing." + #elif J_HOME_TO_MAX && !PIN_EXISTS(J_MAX) + #error "J_MAX_PIN (or J_STOP_PIN) is required for J axis homing." + #elif K_HOME_TO_MIN && !PIN_EXISTS(K_MIN) + #error "K_MIN_PIN (or K_STOP_PIN) is required for K axis homing." + #elif K_HOME_TO_MAX && !PIN_EXISTS(K_MAX) + #error "K_MAX_PIN (or K_STOP_PIN) is required for K axis homing." + #elif U_HOME_TO_MIN && !PIN_EXISTS(U_MIN) + #error "U_MIN_PIN (or U_STOP_PIN) is required for U axis homing." + #elif U_HOME_TO_MAX && !PIN_EXISTS(U_MAX) + #error "U_MAX_PIN (or U_STOP_PIN) is required for U axis homing." + #elif V_HOME_TO_MIN && !PIN_EXISTS(V_MIN) + #error "V_MIN_PIN (or V_STOP_PIN) is required for V axis homing." + #elif V_HOME_TO_MAX && !PIN_EXISTS(V_MAX) + #error "V_MAX_PIN (or V_STOP_PIN) is required for V axis homing." + #elif W_HOME_TO_MIN && !PIN_EXISTS(W_MIN) + #error "W_MIN_PIN (or W_STOP_PIN) is required for W axis homing." + #elif W_HOME_TO_MAX && !PIN_EXISTS(W_MAX) + #error "W_MAX_PIN (or W_STOP_PIN) is required for W axis homing." + #endif + #endif + + // Z homing requirements + #if Z_HOME_TO_MAX && ENABLED(USE_PROBE_FOR_Z_HOMING) #error "Z_HOME_DIR must be -1 when homing Z with the probe." #elif BOTH(HOMING_Z_WITH_PROBE, Z_MULTI_ENDSTOPS) #error "Z_MULTI_ENDSTOPS is incompatible with USE_PROBE_FOR_Z_HOMING." - #elif Z_HOME_TO_MAX && DISABLED(USE_ZMAX_PLUG) - #error "Enable USE_ZMAX_PLUG when homing Z to MAX." #endif #endif @@ -2960,30 +2348,34 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #error "HOME_Z_FIRST can't be used when homing Z with a probe." #endif +#if Z_HOME_TO_MAX && defined(Z_AFTER_HOMING) && DISABLED(ALLOW_Z_AFTER_HOMING) + #error "Z_AFTER_HOMING shouldn't be used with Z max homing to keep 'G28 Z' safe for end-of-print usage. Define ALLOW_Z_AFTER_HOMING to allow this at your own risk." +#endif + // Dual/multiple endstops requirements #if ENABLED(X_DUAL_ENDSTOPS) #if ENABLED(DELTA) #error "X_DUAL_ENDSTOPS is not compatible with DELTA." - #elif !X2_USE_ENDSTOP - #error "X2_USE_ENDSTOP must be set with X_DUAL_ENDSTOPS." + #elif !HAS_X2_ENDSTOP + #error "X2 Endstop Pin must be defined for X_DUAL_ENDSTOPS." #endif #endif #if ENABLED(Y_DUAL_ENDSTOPS) #if ENABLED(DELTA) #error "Y_DUAL_ENDSTOPS is not compatible with DELTA." - #elif !Y2_USE_ENDSTOP - #error "Y2_USE_ENDSTOP must be set with Y_DUAL_ENDSTOPS." + #elif !HAS_Y2_ENDSTOP + #error "Y2 Endstop Pin must be defined for Y_DUAL_ENDSTOPS." #endif #endif #if ENABLED(Z_MULTI_ENDSTOPS) #if ENABLED(DELTA) #error "Z_MULTI_ENDSTOPS is not compatible with DELTA." - #elif !Z2_USE_ENDSTOP - #error "Z2_USE_ENDSTOP must be set with Z_MULTI_ENDSTOPS." - #elif !Z3_USE_ENDSTOP && NUM_Z_STEPPERS >= 3 - #error "Z3_USE_ENDSTOP must be set with Z_MULTI_ENDSTOPS and Z3_DRIVER_TYPE." - #elif !Z4_USE_ENDSTOP && NUM_Z_STEPPERS >= 4 - #error "Z4_USE_ENDSTOP must be set with Z_MULTI_ENDSTOPS and Z4_DRIVER_TYPE." + #elif !HAS_Z2_ENDSTOP + #error "Z2 Endstop Pin must be defined for Z_MULTI_ENDSTOPS." + #elif NUM_Z_STEPPERS >= 3 && !HAS_Z3_ENDSTOP + #error "Z3 Endstop Pin must be defined for Z_MULTI_ENDSTOPS and Z3_DRIVER_TYPE." + #elif NUM_Z_STEPPERS >= 4 && !HAS_Z4_ENDSTOP + #error "Z4 Endstop Pin must be defined for Z_MULTI_ENDSTOPS and Z4_DRIVER_TYPE." #endif #endif @@ -3250,7 +2642,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #if ENABLED(TFT_LVGL_UI) #if DISABLED(TFT_RES_480x320) #error "TFT_LVGL_UI requires TFT_RES_480x320." - #elif DISABLED(SDSUPPORT) + #elif !HAS_MEDIA #error "TFT_LVGL_UI requires SDSUPPORT." #endif #endif @@ -3266,7 +2658,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #if ENABLED(ANYCUBIC_LCD_CHIRON) #ifndef BEEPER_PIN #error "ANYCUBIC_LCD_CHIRON requires BEEPER_PIN" - #elif DISABLED(SDSUPPORT) + #elif !HAS_MEDIA #error "ANYCUBIC_LCD_CHIRON requires SDSUPPORT" #elif TEMP_SENSOR_BED == 0 #error "ANYCUBIC_LCD_CHIRON requires heatbed (TEMP_SENSOR_BED)" @@ -3289,7 +2681,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS * Ender-3 V2 controller has some limitations */ #if ENABLED(DWIN_CREALITY_LCD) - #if DISABLED(SDSUPPORT) + #if !HAS_MEDIA #error "DWIN_CREALITY_LCD requires SDSUPPORT to be enabled." #elif EITHER(PID_EDIT_MENU, PID_AUTOTUNE_MENU) #error "DWIN_CREALITY_LCD does not support PID_EDIT_MENU or PID_AUTOTUNE_MENU." @@ -3301,7 +2693,7 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #error "DWIN_CREALITY_LCD does not support LCD_BED_LEVELING with PROBE_MANUALLY." #endif #elif ENABLED(DWIN_LCD_PROUI) - #if DISABLED(SDSUPPORT) + #if !HAS_MEDIA #error "DWIN_LCD_PROUI requires SDSUPPORT to be enabled." #elif EITHER(PID_EDIT_MENU, PID_AUTOTUNE_MENU) #error "DWIN_LCD_PROUI does not support PID_EDIT_MENU or PID_AUTOTUNE_MENU." @@ -3618,41 +3010,41 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #if NONE(SPI_ENDSTOPS, ONBOARD_ENDSTOPPULLUPS, ENDSTOPPULLUPS) #if X_SENSORLESS && X_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_XMIN) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_XMIN (or ENDSTOPPULLUPS) for X_MIN homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_XMIN (or ENDSTOPPULLUPS) for X MIN homing." #elif X_SENSORLESS && X_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_XMAX) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_XMAX (or ENDSTOPPULLUPS) for X_MAX homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_XMAX (or ENDSTOPPULLUPS) for X MAX homing." #elif Y_SENSORLESS && Y_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_YMIN) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_YMIN (or ENDSTOPPULLUPS) for Y_MIN homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_YMIN (or ENDSTOPPULLUPS) for Y MIN homing." #elif Y_SENSORLESS && Y_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_YMAX) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_YMAX (or ENDSTOPPULLUPS) for Y_MAX homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_YMAX (or ENDSTOPPULLUPS) for Y MAX homing." #elif Z_SENSORLESS && Z_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_ZMIN) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMIN (or ENDSTOPPULLUPS) for Z_MIN homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMIN (or ENDSTOPPULLUPS) for Z MIN homing." #elif Z_SENSORLESS && Z_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_ZMAX) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMAX (or ENDSTOPPULLUPS) for Z_MAX homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMAX (or ENDSTOPPULLUPS) for Z MAX homing." #elif I_SENSORLESS && I_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_IMIN) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_IMIN (or ENDSTOPPULLUPS) for I_MIN homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_IMIN (or ENDSTOPPULLUPS) for I MIN homing." #elif I_SENSORLESS && I_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_IMAX) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_IMAX (or ENDSTOPPULLUPS) for I_MAX homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_IMAX (or ENDSTOPPULLUPS) for I MAX homing." #elif J_SENSORLESS && J_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_JMIN) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_JMIN (or ENDSTOPPULLUPS) for J_MIN homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_JMIN (or ENDSTOPPULLUPS) for J MIN homing." #elif J_SENSORLESS && J_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_JMAX) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_JMAX (or ENDSTOPPULLUPS) for J_MAX homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_JMAX (or ENDSTOPPULLUPS) for J MAX homing." #elif K_SENSORLESS && K_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_KMIN) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_KMIN (or ENDSTOPPULLUPS) for K_MIN homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_KMIN (or ENDSTOPPULLUPS) for K MIN homing." #elif K_SENSORLESS && K_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_KMAX) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_KMAX (or ENDSTOPPULLUPS) for K_MAX homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_KMAX (or ENDSTOPPULLUPS) for K MAX homing." #elif U_SENSORLESS && U_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_UMIN) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_UMIN (or ENDSTOPPULLUPS) for U_MIN homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_UMIN (or ENDSTOPPULLUPS) for U MIN homing." #elif U_SENSORLESS && U_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_UMAX) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_UMAX (or ENDSTOPPULLUPS) for U_MAX homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_UMAX (or ENDSTOPPULLUPS) for U MAX homing." #elif V_SENSORLESS && V_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_VMIN) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_VMIN (or ENDSTOPPULLUPS) for V_MIN homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_VMIN (or ENDSTOPPULLUPS) for V MIN homing." #elif V_SENSORLESS && V_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_VMAX) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_VMAX (or ENDSTOPPULLUPS) for V_MAX homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_VMAX (or ENDSTOPPULLUPS) for V MAX homing." #elif W_SENSORLESS && W_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_WMIN) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_WMIN (or ENDSTOPPULLUPS) for W_MIN homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_WMIN (or ENDSTOPPULLUPS) for W MIN homing." #elif W_SENSORLESS && W_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_WMAX) - #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_WMAX (or ENDSTOPPULLUPS) for W_MAX homing." + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_WMAX (or ENDSTOPPULLUPS) for W MAX homing." #endif #endif @@ -3668,15 +3060,15 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #define _HIT_STATE AXIS_DRIVER_TYPE(X,TMC2209) #if X_HOME_TO_MIN && X_MIN_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires X_MIN_ENDSTOP_HIT_STATE HIGH for X_MIN homing with TMC2209." + #error "SENSORLESS_HOMING requires X_MIN_ENDSTOP_HIT_STATE HIGH for X MIN homing with TMC2209." #else - #error "SENSORLESS_HOMING requires X_MIN_ENDSTOP_HIT_STATE LOW for X_MIN homing." + #error "SENSORLESS_HOMING requires X_MIN_ENDSTOP_HIT_STATE LOW for X MIN homing." #endif #elif X_HOME_TO_MAX && X_MAX_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires X_MAX_ENDSTOP_HIT_STATE HIGH for X_MAX homing with TMC2209." + #error "SENSORLESS_HOMING requires X_MAX_ENDSTOP_HIT_STATE HIGH for X MAX homing with TMC2209." #else - #error "SENSORLESS_HOMING requires X_MAX_ENDSTOP_HIT_STATE LOW for X_MAX homing." + #error "SENSORLESS_HOMING requires X_MAX_ENDSTOP_HIT_STATE LOW for X MAX homing." #endif #endif #undef _HIT_STATE @@ -3686,15 +3078,15 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #define _HIT_STATE AXIS_DRIVER_TYPE(Y,TMC2209) #if Y_HOME_TO_MIN && Y_MIN_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires Y_MIN_ENDSTOP_HIT_STATE HIGH for Y_MIN homing with TMC2209." + #error "SENSORLESS_HOMING requires Y_MIN_ENDSTOP_HIT_STATE HIGH for Y MIN homing with TMC2209." #else - #error "SENSORLESS_HOMING requires Y_MIN_ENDSTOP_HIT_STATE LOW for Y_MIN homing." + #error "SENSORLESS_HOMING requires Y_MIN_ENDSTOP_HIT_STATE LOW for Y MIN homing." #endif #elif Y_HOME_TO_MAX && Y_MAX_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires Y_MAY_ENDSTOP_HIT_STATE HIGH for Y_MAX homing with TMC2209." + #error "SENSORLESS_HOMING requires Y_MAX_ENDSTOP_HIT_STATE HIGH for Y MAX homing with TMC2209." #else - #error "SENSORLESS_HOMING requires Y_MAY_ENDSTOP_HIT_STATE LOW for Y_MAX homing." + #error "SENSORLESS_HOMING requires Y_MAX_ENDSTOP_HIT_STATE LOW for Y MAX homing." #endif #endif #undef _HIT_STATE @@ -3704,15 +3096,15 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #define _HIT_STATE AXIS_DRIVER_TYPE(Z,TMC2209) #if Z_HOME_TO_MIN && Z_MIN_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires Z_MIN_ENDSTOP_HIT_STATE HIGH for Z_MIN homing with TMC2209." + #error "SENSORLESS_HOMING requires Z_MIN_ENDSTOP_HIT_STATE HIGH for Z MIN homing with TMC2209." #else - #error "SENSORLESS_HOMING requires Z_MIN_ENDSTOP_HIT_STATE LOW for Z_MIN homing." + #error "SENSORLESS_HOMING requires Z_MIN_ENDSTOP_HIT_STATE LOW for Z MIN homing." #endif #elif Z_HOME_TO_MAX && Z_MAX_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires Z_MAZ_ENDSTOP_HIT_STATE HIGH for Z_MAX homing with TMC2209." + #error "SENSORLESS_HOMING requires Z_MAX_ENDSTOP_HIT_STATE HIGH for Z MAX homing with TMC2209." #else - #error "SENSORLESS_HOMING requires Z_MAZ_ENDSTOP_HIT_STATE LOW for Z_MAX homing." + #error "SENSORLESS_HOMING requires Z_MAX_ENDSTOP_HIT_STATE LOW for Z MAX homing." #endif #endif #undef _HIT_STATE @@ -3722,15 +3114,15 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #define _HIT_STATE AXIS_DRIVER_TYPE(I,TMC2209) #if I_HOME_TO_MIN && I_MIN_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires I_MIN_ENDSTOP_HIT_STATE HIGH for I_MIN homing with TMC2209." + #error "SENSORLESS_HOMING requires I_MIN_ENDSTOP_HIT_STATE HIGH for I MIN homing with TMC2209." #else - #error "SENSORLESS_HOMING requires I_MIN_ENDSTOP_HIT_STATE LOW for I_MIN homing." + #error "SENSORLESS_HOMING requires I_MIN_ENDSTOP_HIT_STATE LOW for I MIN homing." #endif #elif I_HOME_TO_MAX && I_MAX_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires I_MAI_ENDSTOP_HIT_STATE HIGH for I_MAX homing with TMC2209." + #error "SENSORLESS_HOMING requires I_MAX_ENDSTOP_HIT_STATE HIGH for I MAX homing with TMC2209." #else - #error "SENSORLESS_HOMING requires I_MAI_ENDSTOP_HIT_STATE LOW for I_MAX homing." + #error "SENSORLESS_HOMING requires I_MAX_ENDSTOP_HIT_STATE LOW for I MAX homing." #endif #endif #undef _HIT_STATE @@ -3740,15 +3132,15 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #define _HIT_STATE AXIS_DRIVER_TYPE(J,TMC2209) #if J_HOME_TO_MIN && J_MIN_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires J_MIN_ENDSTOP_HIT_STATE HIGH for J_MIN homing with TMC2209." + #error "SENSORLESS_HOMING requires J_MIN_ENDSTOP_HIT_STATE HIGH for J MIN homing with TMC2209." #else - #error "SENSORLESS_HOMING requires J_MIN_ENDSTOP_HIT_STATE LOW for J_MIN homing." + #error "SENSORLESS_HOMING requires J_MIN_ENDSTOP_HIT_STATE LOW for J MIN homing." #endif #elif J_HOME_TO_MAX && J_MAX_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires J_MAJ_ENDSTOP_HIT_STATE HIGH for J_MAX homing with TMC2209." + #error "SENSORLESS_HOMING requires J_MAX_ENDSTOP_HIT_STATE HIGH for J MAX homing with TMC2209." #else - #error "SENSORLESS_HOMING requires J_MAJ_ENDSTOP_HIT_STATE LOW for J_MAX homing." + #error "SENSORLESS_HOMING requires J_MAX_ENDSTOP_HIT_STATE LOW for J MAX homing." #endif #endif #undef _HIT_STATE @@ -3758,15 +3150,15 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #define _HIT_STATE AXIS_DRIVER_TYPE(K,TMC2209) #if K_HOME_TO_MIN && K_MIN_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires K_MIN_ENDSTOP_HIT_STATE HIGH for K_MIN homing with TMC2209." + #error "SENSORLESS_HOMING requires K_MIN_ENDSTOP_HIT_STATE HIGH for K MIN homing with TMC2209." #else - #error "SENSORLESS_HOMING requires K_MIN_ENDSTOP_HIT_STATE LOW for K_MIN homing." + #error "SENSORLESS_HOMING requires K_MIN_ENDSTOP_HIT_STATE LOW for K MIN homing." #endif #elif K_HOME_TO_MAX && K_MAX_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires K_MAK_ENDSTOP_HIT_STATE HIGH for K_MAX homing with TMC2209." + #error "SENSORLESS_HOMING requires K_MAX_ENDSTOP_HIT_STATE HIGH for K MAX homing with TMC2209." #else - #error "SENSORLESS_HOMING requires K_MAK_ENDSTOP_HIT_STATE LOW for K_MAX homing." + #error "SENSORLESS_HOMING requires K_MAX_ENDSTOP_HIT_STATE LOW for K MAX homing." #endif #endif #undef _HIT_STATE @@ -3776,15 +3168,15 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #define _HIT_STATE AXIS_DRIVER_TYPE(U,TMC2209) #if U_HOME_TO_MIN && U_MIN_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires U_MIN_ENDSTOP_HIT_STATE HIGH for U_MIN homing with TMC2209." + #error "SENSORLESS_HOMING requires U_MIN_ENDSTOP_HIT_STATE HIGH for U MIN homing with TMC2209." #else - #error "SENSORLESS_HOMING requires U_MIN_ENDSTOP_HIT_STATE LOW for U_MIN homing." + #error "SENSORLESS_HOMING requires U_MIN_ENDSTOP_HIT_STATE LOW for U MIN homing." #endif #elif U_HOME_TO_MAX && U_MAX_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires U_MAU_ENDSTOP_HIT_STATE HIGH for U_MAX homing with TMC2209." + #error "SENSORLESS_HOMING requires U_MAX_ENDSTOP_HIT_STATE HIGH for U MAX homing with TMC2209." #else - #error "SENSORLESS_HOMING requires U_MAU_ENDSTOP_HIT_STATE LOW for U_MAX homing." + #error "SENSORLESS_HOMING requires U_MAX_ENDSTOP_HIT_STATE LOW for U MAX homing." #endif #endif #undef _HIT_STATE @@ -3794,15 +3186,15 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #define _HIT_STATE AXIS_DRIVER_TYPE(V,TMC2209) #if V_HOME_TO_MIN && V_MIN_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires V_MIN_ENDSTOP_HIT_STATE HIGH for V_MIN homing with TMC2209." + #error "SENSORLESS_HOMING requires V_MIN_ENDSTOP_HIT_STATE HIGH for V MIN homing with TMC2209." #else - #error "SENSORLESS_HOMING requires V_MIN_ENDSTOP_HIT_STATE LOW for V_MIN homing." + #error "SENSORLESS_HOMING requires V_MIN_ENDSTOP_HIT_STATE LOW for V MIN homing." #endif #elif V_HOME_TO_MAX && V_MAX_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires V_MAV_ENDSTOP_HIT_STATE HIGH for V_MAX homing with TMC2209." + #error "SENSORLESS_HOMING requires V_MAX_ENDSTOP_HIT_STATE HIGH for V MAX homing with TMC2209." #else - #error "SENSORLESS_HOMING requires V_MAV_ENDSTOP_HIT_STATE LOW for V_MAX homing." + #error "SENSORLESS_HOMING requires V_MAX_ENDSTOP_HIT_STATE LOW for V MAX homing." #endif #endif #undef _HIT_STATE @@ -3812,15 +3204,15 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #define _HIT_STATE AXIS_DRIVER_TYPE(W,TMC2209) #if W_HOME_TO_MIN && W_MIN_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires W_MIN_ENDSTOP_HIT_STATE HIGH for W_MIN homing with TMC2209." + #error "SENSORLESS_HOMING requires W_MIN_ENDSTOP_HIT_STATE HIGH for W MIN homing with TMC2209." #else - #error "SENSORLESS_HOMING requires W_MIN_ENDSTOP_HIT_STATE LOW for W_MIN homing." + #error "SENSORLESS_HOMING requires W_MIN_ENDSTOP_HIT_STATE LOW for W MIN homing." #endif #elif W_HOME_TO_MAX && W_MAX_ENDSTOP_HIT_STATE != _HIT_STATE #if _HIT_STATE - #error "SENSORLESS_HOMING requires W_MAW_ENDSTOP_HIT_STATE HIGH for W_MAX homing with TMC2209." + #error "SENSORLESS_HOMING requires W_MAX_ENDSTOP_HIT_STATE HIGH for W MAX homing with TMC2209." #else - #error "SENSORLESS_HOMING requires W_MAW_ENDSTOP_HIT_STATE LOW for W_MAX homing." + #error "SENSORLESS_HOMING requires W_MAX_ENDSTOP_HIT_STATE LOW for W MAX homing." #endif #endif #undef _HIT_STATE @@ -3877,10 +3269,12 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS * TMC SPI Chaining */ #define IN_CHAIN(A) A##_CHAIN_POS > 0 -#if IN_CHAIN(X ) || IN_CHAIN(Y ) || IN_CHAIN(Z ) || IN_CHAIN(X2) || IN_CHAIN(Y2) || IN_CHAIN(Z2) || IN_CHAIN(Z3) || IN_CHAIN(Z4) \ +#if IN_CHAIN(X) || IN_CHAIN(Y) || IN_CHAIN(Z) || IN_CHAIN(I) || IN_CHAIN(J) || IN_CHAIN(K) || IN_CHAIN(U) || IN_CHAIN(V) || IN_CHAIN(W) \ + || IN_CHAIN(X2) || IN_CHAIN(Y2) || IN_CHAIN(Z2) || IN_CHAIN(Z3) || IN_CHAIN(Z4) \ || IN_CHAIN(E0) || IN_CHAIN(E1) || IN_CHAIN(E2) || IN_CHAIN(E3) || IN_CHAIN(E4) || IN_CHAIN(E5) || IN_CHAIN(E6) || IN_CHAIN(E7) #define BAD_CHAIN(A) (IN_CHAIN(A) && !PIN_EXISTS(A##_CS)) - #if BAD_CHAIN(X ) || BAD_CHAIN(Y ) || BAD_CHAIN(Z ) || BAD_CHAIN(X2) || BAD_CHAIN(Y2) || BAD_CHAIN(Z2) || BAD_CHAIN(Z3) || BAD_CHAIN(Z4) \ + #if BAD_CHAIN(X) || BAD_CHAIN(Y) || BAD_CHAIN(Z) || BAD_CHAIN(I) || BAD_CHAIN(J) || BAD_CHAIN(K) || BAD_CHAIN(U) || BAD_CHAIN(V) || BAD_CHAIN(W) \ + || BAD_CHAIN(X2) || BAD_CHAIN(Y2) || BAD_CHAIN(Z2) || BAD_CHAIN(Z3) || BAD_CHAIN(Z4) \ || BAD_CHAIN(E0) || BAD_CHAIN(E1) || BAD_CHAIN(E2) || BAD_CHAIN(E3) || BAD_CHAIN(E4) || BAD_CHAIN(E5) || BAD_CHAIN(E6) || BAD_CHAIN(E7) #error "All chained TMC drivers need a CS pin." #else @@ -3928,9 +3322,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS #define CS_COMPARE E7_CS_PIN #endif #define BAD_CS_PIN(A) (IN_CHAIN(A) && A##_CS_PIN != CS_COMPARE) - #if BAD_CS_PIN(X ) || BAD_CS_PIN(Y ) || BAD_CS_PIN(Z ) || BAD_CS_PIN(X2) || BAD_CS_PIN(Y2) || BAD_CS_PIN(Z2) || BAD_CS_PIN(Z3) || BAD_CS_PIN(Z4) \ - || BAD_CS_PIN(I) || BAD_CS_PIN(J) || BAD_CS_PIN(K) \ - || BAD_CS_PIN(U) || BAD_CS_PIN(V) || BAD_CS_PIN(W) \ + #if BAD_CS_PIN(X) || BAD_CS_PIN(Y) || BAD_CS_PIN(Z) || BAD_CS_PIN(I) || BAD_CS_PIN(J) || BAD_CS_PIN(K) || BAD_CS_PIN(U) || BAD_CS_PIN(V) || BAD_CS_PIN(W) \ + || BAD_CS_PIN(X2) || BAD_CS_PIN(Y2) || BAD_CS_PIN(Z2) || BAD_CS_PIN(Z3) || BAD_CS_PIN(Z4) \ || BAD_CS_PIN(E0) || BAD_CS_PIN(E1) || BAD_CS_PIN(E2) || BAD_CS_PIN(E3) || BAD_CS_PIN(E4) || BAD_CS_PIN(E5) || BAD_CS_PIN(E6) || BAD_CS_PIN(E7) #error "All chained TMC drivers must use the same CS pin." #endif @@ -4309,10 +3702,14 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #endif -#if ENABLED(COOLANT_MIST) && !PIN_EXISTS(COOLANT_MIST) - #error "COOLANT_MIST requires COOLANT_MIST_PIN to be defined." -#elif ENABLED(COOLANT_FLOOD) && !PIN_EXISTS(COOLANT_FLOOD) - #error "COOLANT_FLOOD requires COOLANT_FLOOD_PIN to be defined." +#if ENABLED(COOLANT_CONTROL) + #if NONE(COOLANT_MIST, COOLANT_FLOOD) + #error "COOLANT_CONTROL requires either COOLANT_MIST or COOLANT_FLOOD." + #elif ENABLED(COOLANT_MIST) && !PIN_EXISTS(COOLANT_MIST) + #error "COOLANT_MIST requires COOLANT_MIST_PIN to be defined." + #elif ENABLED(COOLANT_FLOOD) && !PIN_EXISTS(COOLANT_FLOOD) + #error "COOLANT_FLOOD requires COOLANT_FLOOD_PIN to be defined." + #endif #endif #if HAS_ADC_BUTTONS && defined(ADC_BUTTON_DEBOUNCE_DELAY) && ADC_BUTTON_DEBOUNCE_DELAY < 16 @@ -4323,7 +3720,7 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); * Check to make sure MONITOR_DRIVER_STATUS isn't enabled * on boards where TMC drivers share the SPI bus with SD. */ -#if HAS_TMC_SPI && ALL(MONITOR_DRIVER_STATUS, SDSUPPORT, USES_SHARED_SPI) +#if HAS_TMC_SPI && ALL(MONITOR_DRIVER_STATUS, HAS_MEDIA, USES_SHARED_SPI) #error "MONITOR_DRIVER_STATUS and SDSUPPORT cannot be used together on boards with shared SPI." #endif @@ -4425,6 +3822,21 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #undef _CLEAN_ASSERT #endif +/** + * Sanity check nozzle cleaning pattern settings + */ +#if ENABLED(NOZZLE_CLEAN_FEATURE) + #if NONE(NOZZLE_CLEAN_PATTERN_LINE, NOZZLE_CLEAN_PATTERN_ZIGZAG, NOZZLE_CLEAN_PATTERN_CIRCLE) + #error "NOZZLE_CLEAN_FEATURE requires at least one of NOZZLE_CLEAN_PATTERN_LINE, NOZZLE_CLEAN_PATTERN_ZIGZAG, and/or NOZZLE_CLEAN_PATTERN_CIRCLE." + #elif NOZZLE_CLEAN_DEFAULT_PATTERN == 0 && DISABLED(NOZZLE_CLEAN_PATTERN_LINE) + #error "NOZZLE_CLEAN_DEFAULT_PATTERN 0 (LINE) is not available. Enable NOZZLE_CLEAN_PATTERN_LINE or set a different NOZZLE_CLEAN_DEFAULT_PATTERN." + #elif NOZZLE_CLEAN_DEFAULT_PATTERN == 1 && DISABLED(NOZZLE_CLEAN_PATTERN_ZIGZAG) + #error "NOZZLE_CLEAN_DEFAULT_PATTERN 1 (ZIGZAG) is not available. Enable NOZZLE_CLEAN_PATTERN_ZIGZAG or set a different NOZZLE_CLEAN_DEFAULT_PATTERN." + #elif NOZZLE_CLEAN_DEFAULT_PATTERN == 2 && DISABLED(NOZZLE_CLEAN_PATTERN_CIRCLE) + #error "NOZZLE_CLEAN_DEFAULT_PATTERN 2 (CIRCLE) is not available. Enable NOZZLE_CLEAN_PATTERN_CIRCLE or set a different NOZZLE_CLEAN_DEFAULT_PATTERN." + #endif +#endif + /** * Sanity check for MIXING_EXTRUDER & DISTINCT_E_FACTORS these are not compatible */ diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index ed0440a7db89..c8ed9bc956d3 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -42,7 +42,7 @@ * version was tagged. */ #ifndef STRING_DISTRIBUTION_DATE - #define STRING_DISTRIBUTION_DATE "2023-04-20" + #define STRING_DISTRIBUTION_DATE "2023-05-04" #endif /** diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index 82aadf7d77b1..ca72ddc3dca6 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -95,46 +95,40 @@ #warning "Note: Auto-assigned X2_CS_PIN to an unused En_CS_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #if AUTO_ASSIGNED_X2_DIAG - #if X2_USE_ENDSTOP == _XMIN_ - #warning "Note: Auto-assigned X2_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _XMAX_ - #warning "Note: Auto-assigned X2_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _XSTOP_ - #warning "Note: Auto-assigned X2_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _YMIN_ - #warning "Note: Auto-assigned X2_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _YMAX_ - #warning "Note: Auto-assigned X2_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _YSTOP_ - #warning "Note: Auto-assigned X2_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _ZMIN_ - #warning "Note: Auto-assigned X2_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _ZMAX_ - #warning "Note: Auto-assigned X2_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _ZSTOP_ - #warning "Note: Auto-assigned X2_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _XDIAG_ - #warning "Note: Auto-assigned X2_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _YDIAG_ - #warning "Note: Auto-assigned X2_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _ZDIAG_ - #warning "Note: Auto-assigned X2_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _E0DIAG_ - #warning "Note: Auto-assigned X2_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _E1DIAG_ - #warning "Note: Auto-assigned X2_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _E2DIAG_ - #warning "Note: Auto-assigned X2_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _E3DIAG_ - #warning "Note: Auto-assigned X2_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _E4DIAG_ - #warning "Note: Auto-assigned X2_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _E5DIAG_ - #warning "Note: Auto-assigned X2_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _E6DIAG_ - #warning "Note: Auto-assigned X2_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif X2_USE_ENDSTOP == _E7DIAG_ - #warning "Note: Auto-assigned X2_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #if X2_STOP_PIN == X_MIN_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == X_MAX_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == X_STOP_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == Y_MIN_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == Y_MAX_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == Y_STOP_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == Z_MIN_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == Z_MAX_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == Z_STOP_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == E0_DIAG_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == E1_DIAG_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == E2_DIAG_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == E3_DIAG_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == E4_DIAG_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == E5_DIAG_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == E6_DIAG_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_STOP_PIN == E7_DIAG_PIN + #warning "Note: Auto-assigned X2 sensorless endstop to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #endif #if AUTO_ASSIGNED_Y2_STEPPER @@ -153,46 +147,40 @@ #warning "Note: Auto-assigned Y2_CS_PIN to an unused En_CS_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #if AUTO_ASSIGNED_Y2_DIAG - #if Y2_USE_ENDSTOP == _XMIN_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _XMAX_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _XSTOP_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _YMIN_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _YMAX_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _YSTOP_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _ZMIN_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _ZMAX_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _ZSTOP_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _XDIAG_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _YDIAG_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _ZDIAG_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _E0DIAG_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _E1DIAG_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _E2DIAG_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _E3DIAG_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _E4DIAG_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _E5DIAG_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _E6DIAG_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Y2_USE_ENDSTOP == _E7DIAG_ - #warning "Note: Auto-assigned Y2_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #if Y2_USE_ENDSTOP == X_MIN_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_STOP_PIN == X_MAX_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_STOP_PIN == X_STOP_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == Y_MIN_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_STOP_PIN == Y_MAX_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_STOP_PIN == Y_STOP_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == Z_MIN_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_STOP_PIN == Z_MAX_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_STOP_PIN == Z_STOP_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_STOP_PIN == E0_DIAG_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_STOP_PIN == E1_DIAG_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_STOP_PIN == E2_DIAG_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_STOP_PIN == E3_DIAG_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_STOP_PIN == E4_DIAG_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_STOP_PIN == E5_DIAG_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_STOP_PIN == E6_DIAG_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_STOP_PIN == E7_DIAG_PIN + #warning "Note: Auto-assigned Y2 sensorless endstop to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #endif #if AUTO_ASSIGNED_Z2_STEPPER @@ -211,46 +199,40 @@ #warning "Note: Auto-assigned Z2_CS_PIN to an unused En_CS_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #if AUTO_ASSIGNED_Z2_DIAG - #if Z2_USE_ENDSTOP == _XMIN_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _XMAX_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _XSTOP_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _YMIN_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _YMAX_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _YSTOP_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _ZMIN_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _ZMAX_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _ZSTOP_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _XDIAG_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _YDIAG_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _ZDIAG_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _E0DIAG_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _E1DIAG_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _E2DIAG_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _E3DIAG_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _E4DIAG_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _E5DIAG_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _E6DIAG_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z2_USE_ENDSTOP == _E7DIAG_ - #warning "Note: Auto-assigned Z2_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #if Z2_USE_ENDSTOP == X_MIN_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_STOP_PIN == X_MAX_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_STOP_PIN == X_STOP_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == Y_MIN_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_STOP_PIN == Y_MAX_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_STOP_PIN == Y_STOP_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == Z_MIN_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_STOP_PIN == Z_MAX_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_STOP_PIN == Z_STOP_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_STOP_PIN == E0_DIAG_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_STOP_PIN == E1_DIAG_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_STOP_PIN == E2_DIAG_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_STOP_PIN == E3_DIAG_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_STOP_PIN == E4_DIAG_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_STOP_PIN == E5_DIAG_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_STOP_PIN == E6_DIAG_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_STOP_PIN == E7_DIAG_PIN + #warning "Note: Auto-assigned Z2 sensorless endstop to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #endif #if AUTO_ASSIGNED_Z3_STEPPER @@ -269,46 +251,40 @@ #warning "Note: Auto-assigned Z3_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #if AUTO_ASSIGNED_Z3_DIAG - #if Z3_USE_ENDSTOP == _XMIN_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _XMAX_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _XSTOP_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _YMIN_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _YMAX_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _YSTOP_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _ZMIN_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _ZMAX_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _ZSTOP_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _XDIAG_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _YDIAG_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _ZDIAG_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _E0DIAG_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _E1DIAG_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _E2DIAG_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _E3DIAG_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _E4DIAG_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _E5DIAG_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _E6DIAG_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z3_USE_ENDSTOP == _E7DIAG_ - #warning "Note: Auto-assigned Z3_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #if Z3_USE_ENDSTOP == X_MIN_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_STOP_PIN == X_MAX_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_STOP_PIN == X_STOP_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == Y_MIN_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_STOP_PIN == Y_MAX_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_STOP_PIN == Y_STOP_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == Z_MIN_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_STOP_PIN == Z_MAX_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_STOP_PIN == Z_STOP_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_STOP_PIN == E0_DIAG_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_STOP_PIN == E1_DIAG_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_STOP_PIN == E2_DIAG_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_STOP_PIN == E3_DIAG_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_STOP_PIN == E4_DIAG_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_STOP_PIN == E5_DIAG_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_STOP_PIN == E6_DIAG_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_STOP_PIN == E7_DIAG_PIN + #warning "Note: Auto-assigned Z3 sensorless endstop to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #endif #if AUTO_ASSIGNED_Z4_STEPPER @@ -327,46 +303,40 @@ #warning "Note: Auto-assigned Z4_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #if AUTO_ASSIGNED_Z4_DIAG - #if Z4_USE_ENDSTOP == _XMIN_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _XMAX_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _XSTOP_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _YMIN_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _YMAX_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _YSTOP_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _ZMIN_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _ZMAX_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _ZSTOP_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _XDIAG_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _YDIAG_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _ZDIAG_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _E0DIAG_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _E1DIAG_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _E2DIAG_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _E3DIAG_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _E4DIAG_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _E5DIAG_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _E6DIAG_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif Z4_USE_ENDSTOP == _E7DIAG_ - #warning "Note: Auto-assigned Z4_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #if Z4_USE_ENDSTOP == X_MIN_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_STOP_PIN == X_MAX_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_STOP_PIN == X_STOP_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == Y_MIN_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_STOP_PIN == Y_MAX_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_STOP_PIN == Y_STOP_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == Z_MIN_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_STOP_PIN == Z_MAX_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_STOP_PIN == Z_STOP_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_STOP_PIN == E0_DIAG_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_STOP_PIN == E1_DIAG_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_STOP_PIN == E2_DIAG_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_STOP_PIN == E3_DIAG_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_STOP_PIN == E4_DIAG_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_STOP_PIN == E5_DIAG_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_STOP_PIN == E6_DIAG_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_STOP_PIN == E7_DIAG_PIN + #warning "Note: Auto-assigned Z4 sensorless endstop to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #endif #if AUTO_ASSIGNED_I_STEPPER @@ -385,46 +355,40 @@ #warning "Note: Auto-assigned I_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #if AUTO_ASSIGNED_I_DIAG - #if I_USE_ENDSTOP == _XMIN_ - #warning "Note: Auto-assigned I_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _XMAX_ - #warning "Note: Auto-assigned I_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _XSTOP_ - #warning "Note: Auto-assigned I_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _YMIN_ - #warning "Note: Auto-assigned I_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _YMAX_ - #warning "Note: Auto-assigned I_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _YSTOP_ - #warning "Note: Auto-assigned I_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _ZMIN_ - #warning "Note: Auto-assigned I_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _ZMAX_ - #warning "Note: Auto-assigned I_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _ZSTOP_ - #warning "Note: Auto-assigned I_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _XDIAG_ - #warning "Note: Auto-assigned I_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _YDIAG_ - #warning "Note: Auto-assigned I_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _ZDIAG_ - #warning "Note: Auto-assigned I_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _E0DIAG_ - #warning "Note: Auto-assigned I_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _E1DIAG_ - #warning "Note: Auto-assigned I_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _E2DIAG_ - #warning "Note: Auto-assigned I_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _E3DIAG_ - #warning "Note: Auto-assigned I_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _E4DIAG_ - #warning "Note: Auto-assigned I_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _E5DIAG_ - #warning "Note: Auto-assigned I_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _E6DIAG_ - #warning "Note: Auto-assigned I_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif I_USE_ENDSTOP == _E7DIAG_ - #warning "Note: Auto-assigned I_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #if I_STOP_PIN == X_MIN_PIN + #warning "Note: Auto-assigned I sensorless endstop to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == X_MAX_PIN + #warning "Note: Auto-assigned I sensorless endstop to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == X_STOP_PIN + #warning "Note: Auto-assigned I sensorless endstop to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == Y_MIN_PIN + #warning "Note: Auto-assigned I sensorless endstop to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == Y_MAX_PIN + #warning "Note: Auto-assigned I sensorless endstop to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == Y_STOP_PIN + #warning "Note: Auto-assigned I sensorless endstop to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == Z_MIN_PIN + #warning "Note: Auto-assigned I sensorless endstop to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == Z_MAX_PIN + #warning "Note: Auto-assigned I sensorless endstop to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == Z_STOP_PIN + #warning "Note: Auto-assigned I sensorless endstop to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == E0_DIAG_PIN + #warning "Note: Auto-assigned I sensorless endstop to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == E1_DIAG_PIN + #warning "Note: Auto-assigned I sensorless endstop to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == E2_DIAG_PIN + #warning "Note: Auto-assigned I sensorless endstop to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == E3_DIAG_PIN + #warning "Note: Auto-assigned I sensorless endstop to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == E4_DIAG_PIN + #warning "Note: Auto-assigned I sensorless endstop to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == E5_DIAG_PIN + #warning "Note: Auto-assigned I sensorless endstop to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == E6_DIAG_PIN + #warning "Note: Auto-assigned I sensorless endstop to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_STOP_PIN == E7_DIAG_PIN + #warning "Note: Auto-assigned I sensorless endstop to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #endif #if AUTO_ASSIGNED_J_STEPPER @@ -443,46 +407,40 @@ #warning "Note: Auto-assigned J_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #if AUTO_ASSIGNED_J_DIAG - #if J_USE_ENDSTOP == _XMIN_ - #warning "Note: Auto-assigned J_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _XMAX_ - #warning "Note: Auto-assigned J_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _XSTOP_ - #warning "Note: Auto-assigned J_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _YMIN_ - #warning "Note: Auto-assigned J_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _YMAX_ - #warning "Note: Auto-assigned J_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _YSTOP_ - #warning "Note: Auto-assigned J_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _ZMIN_ - #warning "Note: Auto-assigned J_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _ZMAX_ - #warning "Note: Auto-assigned J_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _ZSTOP_ - #warning "Note: Auto-assigned J_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _XDIAG_ - #warning "Note: Auto-assigned J_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _YDIAG_ - #warning "Note: Auto-assigned J_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _ZDIAG_ - #warning "Note: Auto-assigned J_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _E0DIAG_ - #warning "Note: Auto-assigned J_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _E1DIAG_ - #warning "Note: Auto-assigned J_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _E2DIAG_ - #warning "Note: Auto-assigned J_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _E3DIAG_ - #warning "Note: Auto-assigned J_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _E4DIAG_ - #warning "Note: Auto-assigned J_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _E5DIAG_ - #warning "Note: Auto-assigned J_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _E6DIAG_ - #warning "Note: Auto-assigned J_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif J_USE_ENDSTOP == _E7DIAG_ - #warning "Note: Auto-assigned J_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #if J_STOP_PIN == X_MIN_PIN + #warning "Note: Auto-assigned J sensorless endstop to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == X_MAX_PIN + #warning "Note: Auto-assigned J sensorless endstop to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == X_STOP_PIN + #warning "Note: Auto-assigned J sensorless endstop to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == Y_MIN_PIN + #warning "Note: Auto-assigned J sensorless endstop to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == Y_MAX_PIN + #warning "Note: Auto-assigned J sensorless endstop to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == Y_STOP_PIN + #warning "Note: Auto-assigned J sensorless endstop to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == Z_MIN_PIN + #warning "Note: Auto-assigned J sensorless endstop to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == Z_MAX_PIN + #warning "Note: Auto-assigned J sensorless endstop to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == Z_STOP_PIN + #warning "Note: Auto-assigned J sensorless endstop to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == E0_DIAG_PIN + #warning "Note: Auto-assigned J sensorless endstop to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == E1_DIAG_PIN + #warning "Note: Auto-assigned J sensorless endstop to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == E2_DIAG_PIN + #warning "Note: Auto-assigned J sensorless endstop to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == E3_DIAG_PIN + #warning "Note: Auto-assigned J sensorless endstop to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == E4_DIAG_PIN + #warning "Note: Auto-assigned J sensorless endstop to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == E5_DIAG_PIN + #warning "Note: Auto-assigned J sensorless endstop to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == E6_DIAG_PIN + #warning "Note: Auto-assigned J sensorless endstop to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_STOP_PIN == E7_DIAG_PIN + #warning "Note: Auto-assigned J sensorless endstop to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #endif #if AUTO_ASSIGNED_K_STEPPER @@ -501,46 +459,40 @@ #warning "Note: Auto-assigned K_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #if AUTO_ASSIGNED_K_DIAG - #if K_USE_ENDSTOP == _XMIN_ - #warning "Note: Auto-assigned K_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _XMAX_ - #warning "Note: Auto-assigned K_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _XSTOP_ - #warning "Note: Auto-assigned K_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _YMIN_ - #warning "Note: Auto-assigned K_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _YMAX_ - #warning "Note: Auto-assigned K_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _YSTOP_ - #warning "Note: Auto-assigned K_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _ZMIN_ - #warning "Note: Auto-assigned K_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _ZMAX_ - #warning "Note: Auto-assigned K_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _ZSTOP_ - #warning "Note: Auto-assigned K_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _XDIAG_ - #warning "Note: Auto-assigned K_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _YDIAG_ - #warning "Note: Auto-assigned K_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _ZDIAG_ - #warning "Note: Auto-assigned K_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _E0DIAG_ - #warning "Note: Auto-assigned K_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _E1DIAG_ - #warning "Note: Auto-assigned K_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _E2DIAG_ - #warning "Note: Auto-assigned K_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _E3DIAG_ - #warning "Note: Auto-assigned K_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _E4DIAG_ - #warning "Note: Auto-assigned K_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _E5DIAG_ - #warning "Note: Auto-assigned K_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _E6DIAG_ - #warning "Note: Auto-assigned K_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _E7DIAG_ - #warning "Note: Auto-assigned K_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #if K_STOP_PIN == X_MIN_PIN + #warning "Note: Auto-assigned K sensorless endstop to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == X_MAX_PIN + #warning "Note: Auto-assigned K sensorless endstop to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == X_STOP_PIN + #warning "Note: Auto-assigned K sensorless endstop to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == Y_MIN_PIN + #warning "Note: Auto-assigned K sensorless endstop to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == Y_MAX_PIN + #warning "Note: Auto-assigned K sensorless endstop to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == Y_STOP_PIN + #warning "Note: Auto-assigned K sensorless endstop to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == Z_MIN_PIN + #warning "Note: Auto-assigned K sensorless endstop to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == Z_MAX_PIN + #warning "Note: Auto-assigned K sensorless endstop to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == Z_STOP_PIN + #warning "Note: Auto-assigned K sensorless endstop to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == E0_DIAG_PIN + #warning "Note: Auto-assigned K sensorless endstop to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == E1_DIAG_PIN + #warning "Note: Auto-assigned K sensorless endstop to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == E2_DIAG_PIN + #warning "Note: Auto-assigned K sensorless endstop to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == E3_DIAG_PIN + #warning "Note: Auto-assigned K sensorless endstop to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == E4_DIAG_PIN + #warning "Note: Auto-assigned K sensorless endstop to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == E5_DIAG_PIN + #warning "Note: Auto-assigned K sensorless endstop to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == E6_DIAG_PIN + #warning "Note: Auto-assigned K sensorless endstop to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == E7_DIAG_PIN + #warning "Note: Auto-assigned K sensorless endstop to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #endif @@ -560,40 +512,34 @@ #warning "Note: Auto-assigned U_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #if AUTO_ASSIGNED_U_DIAG - #if U_USE_ENDSTOP == _XMIN_ - #warning "Note: Auto-assigned U_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _XMAX_ - #warning "Note: Auto-assigned U_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif K_USE_ENDSTOP == _YMIN_ - #warning "Note: Auto-assigned U_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _YMAX_ - #warning "Note: Auto-assigned U_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _ZMIN_ - #warning "Note: Auto-assigned U_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _ZMAX_ - #warning "Note: Auto-assigned U_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _XDIAG_ - #warning "Note: Auto-assigned U_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _YDIAG_ - #warning "Note: Auto-assigned U_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _ZDIAG_ - #warning "Note: Auto-assigned U_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _E0DIAG_ - #warning "Note: Auto-assigned U_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _E1DIAG_ - #warning "Note: Auto-assigned U_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _E2DIAG_ - #warning "Note: Auto-assigned U_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _E3DIAG_ - #warning "Note: Auto-assigned U_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _E4DIAG_ - #warning "Note: Auto-assigned U_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _E5DIAG_ - #warning "Note: Auto-assigned U_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _E6DIAG_ - #warning "Note: Auto-assigned U_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif U_USE_ENDSTOP == _E7DIAG_ - #warning "Note: Auto-assigned U_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #if U_STOP_PIN == X_MIN_PIN + #warning "Note: Auto-assigned U sensorless endstop to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif U_STOP_PIN == X_MAX_PIN + #warning "Note: Auto-assigned U sensorless endstop to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_STOP_PIN == Y_MIN_PIN + #warning "Note: Auto-assigned U sensorless endstop to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif U_STOP_PIN == Y_MAX_PIN + #warning "Note: Auto-assigned U sensorless endstop to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif U_STOP_PIN == Z_MIN_PIN + #warning "Note: Auto-assigned U sensorless endstop to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif U_STOP_PIN == Z_MAX_PIN + #warning "Note: Auto-assigned U sensorless endstop to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif U_STOP_PIN == E0_DIAG_PIN + #warning "Note: Auto-assigned U sensorless endstop to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif U_STOP_PIN == E1_DIAG_PIN + #warning "Note: Auto-assigned U sensorless endstop to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif U_STOP_PIN == E2_DIAG_PIN + #warning "Note: Auto-assigned U sensorless endstop to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif U_STOP_PIN == E3_DIAG_PIN + #warning "Note: Auto-assigned U sensorless endstop to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif U_STOP_PIN == E4_DIAG_PIN + #warning "Note: Auto-assigned U sensorless endstop to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif U_STOP_PIN == E5_DIAG_PIN + #warning "Note: Auto-assigned U sensorless endstop to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif U_STOP_PIN == E6_DIAG_PIN + #warning "Note: Auto-assigned U sensorless endstop to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif U_STOP_PIN == E7_DIAG_PIN + #warning "Note: Auto-assigned U sensorless endstop to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #endif #if AUTO_ASSIGNED_V_STEPPER @@ -612,40 +558,34 @@ #warning "Note: Auto-assigned V_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #if AUTO_ASSIGNED_V_DIAG - #if V_USE_ENDSTOP == _XMIN_ - #warning "Note: Auto-assigned V_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _XMAX_ - #warning "Note: Auto-assigned V_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _YMIN_ - #warning "Note: Auto-assigned V_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _YMAX_ - #warning "Note: Auto-assigned V_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _ZMIN_ - #warning "Note: Auto-assigned V_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _ZMAX_ - #warning "Note: Auto-assigned V_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _XDIAG_ - #warning "Note: Auto-assigned V_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _YDIAG_ - #warning "Note: Auto-assigned V_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _ZDIAG_ - #warning "Note: Auto-assigned V_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _E0DIAG_ - #warning "Note: Auto-assigned V_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _E1DIAG_ - #warning "Note: Auto-assigned V_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _E2DIAG_ - #warning "Note: Auto-assigned V_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _E3DIAG_ - #warning "Note: Auto-assigned V_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _E4DIAG_ - #warning "Note: Auto-assigned V_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _E5DIAG_ - #warning "Note: Auto-assigned V_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _E6DIAG_ - #warning "Note: Auto-assigned V_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif V_USE_ENDSTOP == _E7DIAG_ - #warning "Note: Auto-assigned V_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #if V_STOP_PIN == X_MIN_PIN + #warning "Note: Auto-assigned V sensorless endstop to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif V_STOP_PIN == X_MAX_PIN + #warning "Note: Auto-assigned V sensorless endstop to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif V_STOP_PIN == Y_MIN_PIN + #warning "Note: Auto-assigned V sensorless endstop to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif V_STOP_PIN == Y_MAX_PIN + #warning "Note: Auto-assigned V sensorless endstop to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif V_STOP_PIN == Z_MIN_PIN + #warning "Note: Auto-assigned V sensorless endstop to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif V_STOP_PIN == Z_MAX_PIN + #warning "Note: Auto-assigned V sensorless endstop to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif V_STOP_PIN == E0_DIAG_PIN + #warning "Note: Auto-assigned V sensorless endstop to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif V_STOP_PIN == E1_DIAG_PIN + #warning "Note: Auto-assigned V sensorless endstop to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif V_STOP_PIN == E2_DIAG_PIN + #warning "Note: Auto-assigned V sensorless endstop to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif V_STOP_PIN == E3_DIAG_PIN + #warning "Note: Auto-assigned V sensorless endstop to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif V_STOP_PIN == E4_DIAG_PIN + #warning "Note: Auto-assigned V sensorless endstop to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif V_STOP_PIN == E5_DIAG_PIN + #warning "Note: Auto-assigned V sensorless endstop to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif V_STOP_PIN == E6_DIAG_PIN + #warning "Note: Auto-assigned V sensorless endstop to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif V_STOP_PIN == E7_DIAG_PIN + #warning "Note: Auto-assigned V sensorless endstop to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #endif #if AUTO_ASSIGNED_W_STEPPER @@ -664,40 +604,34 @@ #warning "Note: Auto-assigned W_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #if AUTO_ASSIGNED_W_DIAG - #if W_USE_ENDSTOP == _XMIN_ - #warning "Note: Auto-assigned W_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _XMAX_ - #warning "Note: Auto-assigned W_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _YMIN_ - #warning "Note: Auto-assigned W_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _YMAX_ - #warning "Note: Auto-assigned W_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _ZMIN_ - #warning "Note: Auto-assigned W_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _ZMAX_ - #warning "Note: Auto-assigned W_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _XDIAG_ - #warning "Note: Auto-assigned W_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _YDIAG_ - #warning "Note: Auto-assigned W_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _ZDIAG_ - #warning "Note: Auto-assigned W_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _E0DIAG_ - #warning "Note: Auto-assigned W_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _E1DIAG_ - #warning "Note: Auto-assigned W_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _E2DIAG_ - #warning "Note: Auto-assigned W_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _E3DIAG_ - #warning "Note: Auto-assigned W_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _E4DIAG_ - #warning "Note: Auto-assigned W_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _E5DIAG_ - #warning "Note: Auto-assigned W_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _E6DIAG_ - #warning "Note: Auto-assigned W_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" - #elif W_USE_ENDSTOP == _E7DIAG_ - #warning "Note: Auto-assigned W_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #if W_STOP_PIN == X_MIN_PIN + #warning "Note: Auto-assigned W sensorless endstop to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif W_STOP_PIN == X_MAX_PIN + #warning "Note: Auto-assigned W sensorless endstop to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif W_STOP_PIN == Y_MIN_PIN + #warning "Note: Auto-assigned W sensorless endstop to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif W_STOP_PIN == Y_MAX_PIN + #warning "Note: Auto-assigned W sensorless endstop to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif W_STOP_PIN == Z_MIN_PIN + #warning "Note: Auto-assigned W sensorless endstop to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif W_STOP_PIN == Z_MAX_PIN + #warning "Note: Auto-assigned W sensorless endstop to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif W_STOP_PIN == E0_DIAG_PIN + #warning "Note: Auto-assigned W sensorless endstop to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif W_STOP_PIN == E1_DIAG_PIN + #warning "Note: Auto-assigned W sensorless endstop to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif W_STOP_PIN == E2_DIAG_PIN + #warning "Note: Auto-assigned W sensorless endstop to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif W_STOP_PIN == E3_DIAG_PIN + #warning "Note: Auto-assigned W sensorless endstop to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif W_STOP_PIN == E4_DIAG_PIN + #warning "Note: Auto-assigned W sensorless endstop to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif W_STOP_PIN == E5_DIAG_PIN + #warning "Note: Auto-assigned W sensorless endstop to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif W_STOP_PIN == E6_DIAG_PIN + #warning "Note: Auto-assigned W sensorless endstop to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif W_STOP_PIN == E7_DIAG_PIN + #warning "Note: Auto-assigned W sensorless endstop to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" #endif #endif @@ -815,3 +749,10 @@ #if SDSORT_CACHE_LPC1768_WARNING #warning "SDCARD_SORT_ALPHA sub-options overridden for LPC1768 with DOGM LCD SCK overlap." #endif + +/** + * Ender-5 S1 bootloader + */ +#ifdef STM32F4_UPDATE_FOLDER + #warning "Place the firmware bin file in a folder named 'STM32F4_UPDATE' on the SD card. Install with 'M936 V2'." +#endif diff --git a/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp b/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp index e4c0317d1239..36831767f3e5 100644 --- a/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp +++ b/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp @@ -41,7 +41,7 @@ #include "../../module/planner.h" #include "../../module/motion.h" -#if DISABLED(LCD_PROGRESS_BAR) && BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) +#if DISABLED(LCD_PROGRESS_BAR) && BOTH(FILAMENT_LCD_DISPLAY, HAS_MEDIA) #include "../../feature/filwidth.h" #include "../../gcode/parser.h" #endif @@ -125,7 +125,7 @@ static void createChar_P(const char c, const byte * const ptr) { #if ENABLED(LCD_USE_I2C_BUZZER) - void MarlinUI::buzz(const long duration, const uint16_t freq) { + void MarlinUI::buzz(const long duration, const uint16_t freq/*=0*/) { if (sound_on) lcd.buzz(duration, freq); } @@ -289,7 +289,7 @@ void MarlinUI::set_custom_characters(const HD44780CharSet screen_charset/*=CHARS #endif // LCD_PROGRESS_BAR - #if BOTH(SDSUPPORT, HAS_MARLINUI_MENU) + #if BOTH(HAS_MEDIA, HAS_MARLINUI_MENU) // CHARSET_MENU const static PROGMEM byte refresh[8] = { @@ -313,7 +313,7 @@ void MarlinUI::set_custom_characters(const HD44780CharSet screen_charset/*=CHARS B00000 }; - #endif // SDSUPPORT + #endif // HAS_MEDIA #if ENABLED(SHOW_BOOTSCREEN) // Set boot screen corner characters @@ -339,7 +339,7 @@ void MarlinUI::set_custom_characters(const HD44780CharSet screen_charset/*=CHARS #endif { createChar_P(LCD_STR_UPLEVEL[0], uplevel); - #if BOTH(SDSUPPORT, HAS_MARLINUI_MENU) + #if BOTH(HAS_MEDIA, HAS_MARLINUI_MENU) // SD Card sub-menu special characters createChar_P(LCD_STR_REFRESH[0], refresh); createChar_P(LCD_STR_FOLDER[0], folder); @@ -697,7 +697,7 @@ void MarlinUI::draw_status_message(const bool blink) { if (progress > 2) return draw_progress_bar(progress); } - #elif BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) + #elif BOTH(FILAMENT_LCD_DISPLAY, HAS_MEDIA) // Alternate Status message and Filament display if (ELAPSED(millis(), next_filament_display)) { @@ -709,7 +709,7 @@ void MarlinUI::draw_status_message(const bool blink) { return; } - #endif // FILAMENT_LCD_DISPLAY && SDSUPPORT + #endif // FILAMENT_LCD_DISPLAY && HAS_MEDIA #if ENABLED(STATUS_MESSAGE_SCROLLING) static bool last_blink = false; @@ -1137,17 +1137,38 @@ void MarlinUI::draw_status_screen() { #endif // ADVANCED_PAUSE_FEATURE // Draw a static item with no left-right margin required. Centered by default. - void MenuItem_static::draw(const uint8_t row, FSTR_P const fstr, const uint8_t style/*=SS_DEFAULT*/, const char * const vstr/*=nullptr*/) { - int8_t n = LCD_WIDTH; + void MenuItem_static::draw(const uint8_t row, FSTR_P const fstr, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) { lcd_moveto(0, row); + + int8_t n = LCD_WIDTH; + const bool center = bool(style & SS_CENTER), full = bool(style & SS_FULL); const int8_t plen = fstr ? utf8_strlen(fstr) : 0, vlen = vstr ? utf8_strlen(vstr) : 0; - if (style & SS_CENTER) { - int8_t pad = (LCD_WIDTH - plen - vlen) / 2; - while (--pad >= 0) { lcd_put_u8str(F(" ")); n--; } + int8_t pad = (center || full) ? n - plen - vlen : 0; + + // SS_CENTER: Pad with half of the unused space first + if (center) for (int8_t lpad = pad / 2; lpad > 0; --lpad) { lcd_put_u8str(F(" ")); n--; } + + // Draw as much of the label as fits + if (plen) { + const int8_t expl = n; + n = lcd_put_u8str(fstr, itemIndex, itemStringC, itemStringF, n); + pad -= (expl - n - plen); // Reduce the padding } - if (plen) n = lcd_put_u8str(fstr, itemIndex, itemStringC, itemStringF, n); - if (vlen) n -= lcd_put_u8str_max(vstr, n); + + if (vlen && n > 0) { + // SS_FULL: Pad with enough space to justify the value + if (full && !center) { + // Move the leading colon from the value to the label + if (*vstr == ':') { n -= lcd_put_u8str(F(":")); vstr++; } + // Move spaces to the padding + while (*vstr == ' ') { vstr++; pad++; } + // Pad in-between + for (; pad > 0; --pad) { lcd_put_u8str(F(" ")); n--; } + } + n -= lcd_put_u8str_max(vstr, n); + } + for (; n > 0; --n) lcd_put_u8str(F(" ")); } @@ -1197,7 +1218,7 @@ void MarlinUI::draw_status_screen() { } } - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA void MenuItem_sdbase::draw(const bool sel, const uint8_t row, FSTR_P const, CardReader &theCard, const bool isDir) { lcd_put_lchar(0, row, sel ? LCD_STR_ARROW_RIGHT[0] : ' '); diff --git a/Marlin/src/lcd/HD44780/marlinui_HD44780.h b/Marlin/src/lcd/HD44780/marlinui_HD44780.h index 62c0c7620220..719514fb11df 100644 --- a/Marlin/src/lcd/HD44780/marlinui_HD44780.h +++ b/Marlin/src/lcd/HD44780/marlinui_HD44780.h @@ -103,5 +103,4 @@ #endif -#include "../fontutils.h" #include "../lcdprint.h" diff --git a/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp b/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp index e4f9e4eafc08..6090b13732ae 100644 --- a/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp +++ b/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp @@ -52,7 +52,7 @@ #include "../../module/planner.h" #include "../../module/motion.h" -#if DISABLED(LCD_PROGRESS_BAR) && BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) +#if DISABLED(LCD_PROGRESS_BAR) && BOTH(FILAMENT_LCD_DISPLAY, HAS_MEDIA) #include "../../feature/filwidth.h" #include "../../gcode/parser.h" #endif @@ -299,7 +299,7 @@ uint8_t MarlinUI::read_slow_buttons() { } // Duration in ms, freq in Hz -void MarlinUI::buzz(const long duration, const uint16_t freq) { +void MarlinUI::buzz(const long duration, const uint16_t freq/*=0*/) { if (!PanelDetected) return; if (!sound_on) return; #if ENABLED(TFTGLCD_PANEL_SPI) @@ -672,7 +672,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const void MarlinUI::draw_status_message(const bool blink) { if (!PanelDetected) return; lcd_moveto(0, 3); - #if BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) + #if BOTH(FILAMENT_LCD_DISPLAY, HAS_MEDIA) // Alternate Status message and Filament display if (ELAPSED(millis(), next_filament_display)) { @@ -689,7 +689,7 @@ void MarlinUI::draw_status_message(const bool blink) { return; } - #endif // FILAMENT_LCD_DISPLAY && SDSUPPORT + #endif // FILAMENT_LCD_DISPLAY && HAS_MEDIA // Get the UTF8 character count of the string uint8_t slen = utf8_strlen(status_message); @@ -962,17 +962,41 @@ void MarlinUI::draw_status_screen() { #endif // Draw a static item with no left-right margin required. Centered by default. - void MenuItem_static::draw(const uint8_t row, FSTR_P const fstr, const uint8_t style/*=SS_DEFAULT*/, const char * const valstr/*=nullptr*/) { + void MenuItem_static::draw(const uint8_t row, FSTR_P const fstr, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) { if (!PanelDetected) return; - uint8_t n = LCD_WIDTH; lcd_moveto(0, row); - if ((style & SS_CENTER) && !valstr) { - int8_t pad = (LCD_WIDTH - utf8_strlen(fstr)) / 2; - while (--pad >= 0) { lcd.write(' '); n--; } + + uint8_t n = LCD_WIDTH; + const bool center = bool(style & SS_CENTER), full = bool(style & SS_FULL); + const int8_t plen = fstr ? utf8_strlen(fstr) : 0, + vlen = vstr ? utf8_strlen(vstr) : 0; + int8_t pad = (center || full) ? n - plen - vlen : 0; + + // SS_CENTER: Pad with half of the unused space first + if (center) for (int8_t lpad = pad / 2; lpad > 0; --lpad) { lcd.write(' '); n--; } + + // Draw as much of the label as fits + if (plen) { + const int8_t expl = n; + n = lcd_put_u8str(fstr, itemIndex, itemStringC, itemStringF, n); + pad -= (expl - n - plen); // Reduce the padding } - n = lcd_put_u8str(fstr, itemIndex, itemStringC, itemStringF, n); - if (valstr) n -= lcd_put_u8str_max(valstr, n); - for (; n; --n) lcd.write(' '); + + if (vlen && n > 0) { + // SS_FULL: Pad with enough space to justify the value + if (full && !center) { + // Move the leading colon from the value to the label + if (*vstr == ':') { lcd.write(':'); vstr++; n--; } + // Move spaces to the padding + while (*vstr == ' ') { vstr++; pad++; } + // Pad in-between + for (; pad > 0; --pad) { lcd.write(' '); n--; } + } + n -= lcd_put_u8str_max(vstr, n); + } + + for (; n > 0; --n) lcd.write(' '); + lcd.print_line(); } @@ -1037,7 +1061,7 @@ void MarlinUI::draw_status_screen() { lcd.print_line(); } - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA void MenuItem_sdbase::draw(const bool sel, const uint8_t row, FSTR_P const, CardReader &theCard, const bool isDir) { if (!PanelDetected) return; @@ -1050,7 +1074,7 @@ void MarlinUI::draw_status_screen() { lcd.print_line(); } - #endif // SDSUPPORT + #endif // HAS_MEDIA #if ENABLED(LCD_HAS_STATUS_INDICATORS) diff --git a/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.h b/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.h index c399b907e460..3e447fa19617 100644 --- a/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.h +++ b/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.h @@ -57,7 +57,6 @@ class TFTGLCD { extern TFTGLCD lcd; -#include "../fontutils.h" #include "../lcdprint.h" // Use panel encoder - free old encoder pins diff --git a/Marlin/src/lcd/dogm/lcdprint_u8g.cpp b/Marlin/src/lcd/dogm/lcdprint_u8g.cpp index 74a49b095021..ea0db357b64a 100644 --- a/Marlin/src/lcd/dogm/lcdprint_u8g.cpp +++ b/Marlin/src/lcd/dogm/lcdprint_u8g.cpp @@ -16,7 +16,6 @@ #include "../marlinui.h" #include "../../MarlinCore.h" -#include "../fontutils.h" #include "u8g_fontutf8.h" #include "../lcdprint.h" diff --git a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp index aa32fd403f45..2552df3b88f4 100644 --- a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp +++ b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp @@ -47,7 +47,6 @@ #endif #include "../lcdprint.h" -#include "../fontutils.h" #include "../../libs/numtostr.h" #include "../marlinui.h" @@ -56,7 +55,7 @@ #include "../../module/printcounter.h" #include "../../MarlinCore.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../../libs/duration_t.h" #endif @@ -411,20 +410,38 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop } // Draw a static line of text in the same idiom as a menu item - void MenuItem_static::draw(const uint8_t row, FSTR_P const ftpl, const uint8_t style/*=SS_DEFAULT*/, const char * const vstr/*=nullptr*/) { + void MenuItem_static::draw(const uint8_t row, FSTR_P const ftpl, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) { if (mark_as_selected(row, style & SS_INVERT)) { pixel_len_t n = LCD_PIXEL_WIDTH; // pixel width of string allowed - const int plen = ftpl ? calculateWidth(ftpl) : 0, + const bool center = bool(style & SS_CENTER), full = bool(style & SS_FULL); + const int pwide = ftpl ? calculateWidth(ftpl) : 0, vlen = vstr ? utf8_strlen(vstr) : 0; - if (style & SS_CENTER) { - int pad = (LCD_PIXEL_WIDTH - plen - vlen * MENU_FONT_WIDTH) / MENU_FONT_WIDTH / 2; - while (--pad >= 0) n -= lcd_put_u8str(F(" ")); + int pad = (center || full) ? ((LCD_PIXEL_WIDTH) - pwide - vlen * (MENU_FONT_WIDTH)) / (MENU_FONT_WIDTH) : 0; + + // SS_CENTER: Pad with half of the unused space first + if (center) for (int lpad = pad / 2; lpad > 0; --lpad) n -= lcd_put_u8str(F(" ")); + + // Draw as much of the label as fits + if (pwide) { + const pixel_len_t expw = n; + n = lcd_put_u8str(ftpl, itemIndex, itemStringC, itemStringF, n / (MENU_FONT_WIDTH)) * (MENU_FONT_WIDTH); + pad -= (expw - n - pwide) / (MENU_FONT_WIDTH); // Reduce the padding } - if (plen) n = lcd_put_u8str(ftpl, itemIndex, itemStringC, itemStringF, n / (MENU_FONT_WIDTH)) * (MENU_FONT_WIDTH); - if (vlen) n -= lcd_put_u8str_max(vstr, n); + if (vlen) { + // SS_FULL: Pad with enough space to justify the value + if (full && !center && n > MENU_FONT_WIDTH) { + // Move the leading colon from the value to the label + if (*vstr == ':') { n -= lcd_put_u8str(F(":")); vstr++; } + // Move spaces to the padding + while (*vstr == ' ') { vstr++; pad++; } + // Pad in-between + for (; pad > 0; --pad) n -= lcd_put_u8str(F(" ")); + } + n -= lcd_put_u8str_max(vstr, n); + } while (n > MENU_FONT_WIDTH) n -= lcd_put_u8str(F(" ")); } } @@ -527,7 +544,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop if (yes) draw_boxed_string(LCD_WIDTH - (utf8_strlen(yes) * (USE_WIDE_GLYPH ? 2 : 1) + 1), LCD_HEIGHT - 1, yes, yesno); } - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA void MenuItem_sdbase::draw(const bool sel, const uint8_t row, FSTR_P const, CardReader &theCard, const bool isDir) { if (mark_as_selected(row, sel)) { @@ -539,7 +556,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop } } - #endif // SDSUPPORT + #endif // HAS_MEDIA #if ENABLED(AUTO_BED_LEVELING_UBL) diff --git a/Marlin/src/lcd/dogm/marlinui_DOGM.h b/Marlin/src/lcd/dogm/marlinui_DOGM.h index 2b9eb64a57cc..afdda5ac5bf5 100644 --- a/Marlin/src/lcd/dogm/marlinui_DOGM.h +++ b/Marlin/src/lcd/dogm/marlinui_DOGM.h @@ -36,10 +36,10 @@ // RepRapWorld Graphical LCD - #if DISABLED(SDSUPPORT) && (LCD_PINS_D4 == SD_SCK_PIN) && (LCD_PINS_EN == SD_MOSI_PIN) + #if !HAS_MEDIA && (LCD_PINS_D4 == SD_SCK_PIN) && (LCD_PINS_EN == SD_MOSI_PIN) #define U8G_CLASS U8GLIB_ST7920_128X64_4X_HAL #define U8G_PARAM LCD_PINS_RS - #elif ENABLED(SDSUPPORT) && __SAMD21__ + #elif HAS_MEDIA && __SAMD21__ #define U8G_CLASS U8GLIB_ST7920_128X64_4X #define U8G_PARAM LCD_PINS_RS #else @@ -52,7 +52,7 @@ // RepRap Discount Full Graphics Smart Controller // and other variant LCDs using ST7920 - #if DISABLED(SDSUPPORT) && (LCD_PINS_D4 == SD_SCK_PIN) && (LCD_PINS_EN == SD_MOSI_PIN) + #if !HAS_MEDIA && (LCD_PINS_D4 == SD_SCK_PIN) && (LCD_PINS_EN == SD_MOSI_PIN) #define U8G_CLASS U8GLIB_ST7920_128X64_4X_HAL // 2 stripes, HW SPI (Shared with SD card. Non-standard LCD adapter on AVR.) #define U8G_PARAM LCD_PINS_RS #else diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp index 22e71251ff13..cb3515a694cb 100644 --- a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp +++ b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp @@ -67,7 +67,7 @@ #include "../../feature/power_monitor.h" #endif -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../../sd/cardreader.h" #endif @@ -742,7 +742,7 @@ void MarlinUI::draw_status_screen() { #endif } - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA // // SD Card Symbol // @@ -756,7 +756,7 @@ void MarlinUI::draw_status_screen() { // Corner pixel u8g.drawPixel(50, 43); // 43 (or 42) } - #endif // SDSUPPORT + #endif // HAS_MEDIA #if HAS_PRINT_PROGRESS // Progress bar frame @@ -871,7 +871,7 @@ void MarlinUI::draw_status_screen() { // // Filament sensor display if SD is disabled // - #if ENABLED(FILAMENT_LCD_DISPLAY) && DISABLED(SDSUPPORT) + #if ENABLED(FILAMENT_LCD_DISPLAY) && !HAS_MEDIA lcd_put_u8str(56, EXTRAS_2_BASELINE, wstring); lcd_put_u8str(102, EXTRAS_2_BASELINE, mstring); lcd_put_u8str(F("%")); @@ -887,7 +887,7 @@ void MarlinUI::draw_status_screen() { if (PAGE_CONTAINS(STATUS_BASELINE - INFO_FONT_ASCENT, STATUS_BASELINE + INFO_FONT_DESCENT)) { lcd_moveto(0, STATUS_BASELINE); - #if BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) + #if BOTH(FILAMENT_LCD_DISPLAY, HAS_MEDIA) // Alternate Status message and Filament display if (ELAPSED(millis(), next_filament_display)) { lcd_put_u8str(F(LCD_STR_FILAM_DIA)); diff --git a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp index 96f2eeae960a..bc961dbf15d4 100644 --- a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp +++ b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp @@ -73,7 +73,6 @@ #if ENABLED(LIGHTWEIGHT_UI) #include "../marlinui.h" -#include "../fontutils.h" #include "../lcdprint.h" #include "../../libs/duration_t.h" #include "../../module/motion.h" @@ -81,7 +80,7 @@ #include "../../module/temperature.h" #include "../../libs/numtostr.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../../sd/cardreader.h" #endif diff --git a/Marlin/src/lcd/dogm/u8g_dev_tft_upscale_from_128x64.cpp b/Marlin/src/lcd/dogm/u8g_dev_tft_upscale_from_128x64.cpp index efc010ca8960..e51767f96a90 100644 --- a/Marlin/src/lcd/dogm/u8g_dev_tft_upscale_from_128x64.cpp +++ b/Marlin/src/lcd/dogm/u8g_dev_tft_upscale_from_128x64.cpp @@ -556,4 +556,4 @@ U8G_PB_DEV(u8g_dev_tft_320x240_upscale_from_128x64, WIDTH, HEIGHT, PAGE_HEIGHT, #endif // TOUCH_SCREEN_CALIBRATION -#endif // HAS_MARLINUI_U8GLIB && (FSMC_CS_PIN || HAS_SPI_GRAPHICAL_TFT) +#endif // HAS_MARLINUI_U8GLIB && (FSMC_CS_PIN || HAS_SPI_GRAPHICAL_TFT || HAS_LTDC_GRAPHICAL_TFT) diff --git a/Marlin/src/lcd/dogm/u8g_fontutf8.cpp b/Marlin/src/lcd/dogm/u8g_fontutf8.cpp index e9d15350963a..79fabfd80547 100644 --- a/Marlin/src/lcd/dogm/u8g_fontutf8.cpp +++ b/Marlin/src/lcd/dogm/u8g_fontutf8.cpp @@ -12,7 +12,7 @@ #if HAS_MARLINUI_U8GLIB #include -#include "../fontutils.h" +#include "../utf8.h" #include "u8g_fontutf8.h" typedef void font_t; diff --git a/Marlin/src/lcd/dogm/u8g_fontutf8.h b/Marlin/src/lcd/dogm/u8g_fontutf8.h index 660eb28ffeb3..281894509d6f 100644 --- a/Marlin/src/lcd/dogm/u8g_fontutf8.h +++ b/Marlin/src/lcd/dogm/u8g_fontutf8.h @@ -9,7 +9,7 @@ #pragma once #include -#include "../fontutils.h" +#include "../utf8.h" // the macro to indicate a UTF-8 string // You should to save the C/C++ source in UTF-8 encoding! diff --git a/Marlin/src/lcd/e3v2/creality/dwin.cpp b/Marlin/src/lcd/e3v2/creality/dwin.cpp index 66baff1611f7..73621851df40 100644 --- a/Marlin/src/lcd/e3v2/creality/dwin.cpp +++ b/Marlin/src/lcd/e3v2/creality/dwin.cpp @@ -45,7 +45,7 @@ #define JUST_BABYSTEP 1 #endif -#include "../../fontutils.h" +#include "../../utf8.h" #include "../../marlinui.h" #include "../../../sd/cardreader.h" diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp index a24adec8e9fd..c4098bdb49cc 100644 --- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp @@ -1409,6 +1409,13 @@ void CrealityDWINClass::Menu_Item_Handler(const uint8_t menu, const uint8_t item static float mlev_z_pos = 0; static bool use_probe = false; + #if HAS_BED_PROBE + constexpr float probe_x_min = _MAX(0 + corner_pos, X_MIN_POS + probe.offset.x, X_MIN_POS + PROBING_MARGIN) - probe.offset.x, + probe_x_max = _MIN((X_BED_SIZE + X_MIN_POS) - corner_pos, X_MAX_POS + probe.offset.x, X_MAX_POS - PROBING_MARGIN) - probe.offset.x, + probe_y_min = _MAX(0 + corner_pos, Y_MIN_POS + probe.offset.y, Y_MIN_POS + PROBING_MARGIN) - probe.offset.y, + probe_y_max = _MIN((Y_BED_SIZE + Y_MIN_POS) - corner_pos, Y_MAX_POS + probe.offset.y, Y_MAX_POS - PROBING_MARGIN) - probe.offset.y; + #endif + switch (item) { case MLEVEL_BACK: if (draw) @@ -1425,19 +1432,22 @@ void CrealityDWINClass::Menu_Item_Handler(const uint8_t menu, const uint8_t item Draw_Checkbox(row, use_probe); } else { - use_probe = !use_probe; + use_probe ^= true; Draw_Checkbox(row, use_probe); if (use_probe) { Popup_Handler(Level); + constexpr struct { xy_pos_t p, ProbePtRaise r } points[] = { + { { probe_x_min, probe_y_min }, PROBE_PT_RAISE }, + { { probe_x_min, probe_y_max }, PROBE_PT_RAISE }, + { { probe_x_max, probe_y_max }, PROBE_PT_RAISE }, + { { probe_x_max, probe_y_min }, PROBE_PT_STOW } + }; corner_avg = 0; - #define PROBE_X_MIN _MAX(0 + corner_pos, X_MIN_POS + probe.offset.x, X_MIN_POS + PROBING_MARGIN) - probe.offset.x - #define PROBE_X_MAX _MIN((X_BED_SIZE + X_MIN_POS) - corner_pos, X_MAX_POS + probe.offset.x, X_MAX_POS - PROBING_MARGIN) - probe.offset.x - #define PROBE_Y_MIN _MAX(0 + corner_pos, Y_MIN_POS + probe.offset.y, Y_MIN_POS + PROBING_MARGIN) - probe.offset.y - #define PROBE_Y_MAX _MIN((Y_BED_SIZE + Y_MIN_POS) - corner_pos, Y_MAX_POS + probe.offset.y, Y_MAX_POS - PROBING_MARGIN) - probe.offset.y - corner_avg += probe.probe_at_point(PROBE_X_MIN, PROBE_Y_MIN, PROBE_PT_RAISE, 0, false); - corner_avg += probe.probe_at_point(PROBE_X_MIN, PROBE_Y_MAX, PROBE_PT_RAISE, 0, false); - corner_avg += probe.probe_at_point(PROBE_X_MAX, PROBE_Y_MAX, PROBE_PT_RAISE, 0, false); - corner_avg += probe.probe_at_point(PROBE_X_MAX, PROBE_Y_MIN, PROBE_PT_STOW, 0, false); + for (uint8_t i = 0; i < COUNT(points); i++) { + const float mz = probe.probe_at_point(points[i].p, points[i].r, 0, false); + if (isnan(mz)) { corner_avg = 0; break; } + corner_avg += mz; + } corner_avg /= 4; Redraw_Menu(); } @@ -1451,7 +1461,7 @@ void CrealityDWINClass::Menu_Item_Handler(const uint8_t menu, const uint8_t item Popup_Handler(MoveWait); if (use_probe) { #if HAS_BED_PROBE - sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s"), dtostrf(PROBE_X_MIN, 1, 3, str_1), dtostrf(PROBE_Y_MIN, 1, 3, str_2)); + sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s"), dtostrf(probe_x_min, 1, 3, str_1), dtostrf(probe_y_min, 1, 3, str_2)); gcode.process_subcommands_now(cmd); planner.synchronize(); Popup_Handler(ManualProbing); @@ -1472,7 +1482,7 @@ void CrealityDWINClass::Menu_Item_Handler(const uint8_t menu, const uint8_t item Popup_Handler(MoveWait); if (use_probe) { #if HAS_BED_PROBE - sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s"), dtostrf(PROBE_X_MIN, 1, 3, str_1), dtostrf(PROBE_Y_MAX, 1, 3, str_2)); + sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s"), dtostrf(probe_x_min, 1, 3, str_1), dtostrf(probe_y_max, 1, 3, str_2)); gcode.process_subcommands_now(cmd); planner.synchronize(); Popup_Handler(ManualProbing); @@ -1493,7 +1503,7 @@ void CrealityDWINClass::Menu_Item_Handler(const uint8_t menu, const uint8_t item Popup_Handler(MoveWait); if (use_probe) { #if HAS_BED_PROBE - sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s"), dtostrf(PROBE_X_MAX, 1, 3, str_1), dtostrf(PROBE_Y_MAX, 1, 3, str_2)); + sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s"), dtostrf(probe_x_max, 1, 3, str_1), dtostrf(probe_y_max, 1, 3, str_2)); gcode.process_subcommands_now(cmd); planner.synchronize(); Popup_Handler(ManualProbing); @@ -1514,7 +1524,7 @@ void CrealityDWINClass::Menu_Item_Handler(const uint8_t menu, const uint8_t item Popup_Handler(MoveWait); if (use_probe) { #if HAS_BED_PROBE - sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s"), dtostrf(PROBE_X_MAX, 1, 3, str_1), dtostrf(PROBE_Y_MIN, 1, 3, str_2)); + sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s"), dtostrf(probe_x_max, 1, 3, str_1), dtostrf(probe_y_min, 1, 3, str_2)); gcode.process_subcommands_now(cmd); planner.synchronize(); Popup_Handler(ManualProbing); @@ -4389,7 +4399,7 @@ void CrealityDWINClass::Print_Screen_Control() { #endif TERN_(HAS_FAN, thermalManager.fan_speed[0] = pausefan); planner.synchronize(); - TERN_(SDSUPPORT, queue.inject(F("M24"))); + TERN_(HAS_MEDIA, queue.inject(F("M24"))); #endif } else { @@ -4427,7 +4437,7 @@ void CrealityDWINClass::Popup_Control() { #endif #if ENABLED(PARK_HEAD_ON_PAUSE) Popup_Handler(Home, true); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (IS_SD_PRINTING()) card.pauseSDPrint(); #endif planner.synchronize(); diff --git a/Marlin/src/lcd/e3v2/marlinui/dwin_string.cpp b/Marlin/src/lcd/e3v2/marlinui/dwin_string.cpp index 38a8eafe2366..10a478f75650 100644 --- a/Marlin/src/lcd/e3v2/marlinui/dwin_string.cpp +++ b/Marlin/src/lcd/e3v2/marlinui/dwin_string.cpp @@ -25,7 +25,7 @@ #if IS_DWIN_MARLINUI #include "dwin_string.h" -//#include "../../fontutils.h" +//#include "../../utf8.h" char DWIN_String::data[]; uint16_t DWIN_String::span; @@ -44,7 +44,7 @@ uint8_t read_byte(const uint8_t *byte) { return *byte; } * Add a string, applying substitutions for the following characters: * * $ displays the clipped string given by fstr or cstr - * = displays '0'....'10' for indexes 0 - 10 + * { displays '0'....'10' for indexes 0 - 10 * ~ displays '1'....'11' for indexes 0 - 10 * * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL) * @ displays an axis name such as XYZUVW, or E for an extruder @@ -57,9 +57,9 @@ void DWIN_String::add(const char *tpl, const int8_t index, const char *cstr/*=nu if (wc > 255) wc |= 0x0080; const uint8_t ch = uint8_t(wc & 0x00FF); - if (ch == '=' || ch == '~' || ch == '*') { + if (ch == '{' || ch == '~' || ch == '*') { if (index >= 0) { - int8_t inum = index + ((ch == '=') ? 0 : LCD_FIRST_TOOL); + int8_t inum = index + ((ch == '{') ? 0 : LCD_FIRST_TOOL); if (ch == '*') add_character('E'); if (inum >= 10) { add_character('0' + (inum / 10)); inum %= 10; } add_character('0' + inum); diff --git a/Marlin/src/lcd/e3v2/marlinui/dwin_string.h b/Marlin/src/lcd/e3v2/marlinui/dwin_string.h index 686b1aa2b17a..4224b264589b 100644 --- a/Marlin/src/lcd/e3v2/marlinui/dwin_string.h +++ b/Marlin/src/lcd/e3v2/marlinui/dwin_string.h @@ -23,7 +23,7 @@ // TODO: Make AVR-compatible with separate ROM / RAM string methods -#include "../../fontutils.h" +#include "../../utf8.h" #include "../../marlinui.h" #include diff --git a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp index 778bed633590..58a84ac34e51 100644 --- a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp +++ b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp @@ -28,9 +28,8 @@ #include "dwin_lcd.h" #include "dwin_string.h" -//#include "../../lcdprint.h" #include "lcdprint_dwin.h" -#include "../../fontutils.h" +#include "../../utf8.h" #include "../../../libs/numtostr.h" #include "../../marlinui.h" @@ -39,7 +38,7 @@ #include "../../../module/temperature.h" #include "../../../module/printcounter.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../../../libs/duration_t.h" #endif @@ -311,7 +310,7 @@ void MarlinUI::draw_status_message(const bool blink) { // Draw a static line of text in the same idiom as a menu item - void MenuItem_static::draw(const uint8_t row, FSTR_P const ftpl, const uint8_t style/*=SS_DEFAULT*/, const char * const vstr/*=nullptr*/) { + void MenuItem_static::draw(const uint8_t row, FSTR_P const ftpl, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) { // Call mark_as_selected to draw a bigger selection box // and draw the text without a background if (mark_as_selected(row, (bool)(style & SS_INVERT), true)) { @@ -320,20 +319,38 @@ void MarlinUI::draw_status_message(const bool blink) { dwin_font.fg = Color_White; dwin_string.set(); + + const bool center = bool(style & SS_CENTER), full = bool(style & SS_FULL); const int8_t plen = ftpl ? utf8_strlen(ftpl) : 0, vlen = vstr ? utf8_strlen(vstr) : 0; - if (style & SS_CENTER) { - int8_t pad = (LCD_WIDTH - 1 - plen - vlen) / 2; - while (--pad) dwin_string.add(' '); + int8_t pad = (center || full) ? (LCD_WIDTH) - 1 - plen - vlen : 0; + + // SS_CENTER: Pad with half of the unused space first + if (center) for (int8_t lpad = pad / 2; lpad > 0; --lpad) dwin_string.add(' '); + + // Append the templated label string + if (plen) { + dwin_string.add(ftpl, itemIndex, itemStringC, itemStringF); + pad -= dwin_string.length - plen; } - if (plen) dwin_string.add(ftpl, itemIndex, itemStringC, itemStringF); - if (vlen) dwin_string.add(vstr); - if (style & SS_CENTER) { - int8_t pad = (LCD_WIDTH - 1 - plen - vlen) / 2; - while (--pad) dwin_string.add(' '); + // SS_FULL: Pad with enough space to justify the value + if (vlen) { + if (full && !center) { + // Move the leading colon from the value to the label + if (*vstr == ':') { dwin_string.add(':'); vstr++; } + // Move spaces to the padding + while (*vstr == ' ') { vstr++; pad++; } + // Pad in-between + for (; pad > 0; --pad) dwin_string.add(' '); + } + // Append the value + dwin_string.add(vstr); } + // SS_CENTER: Pad the rest of the string + if (center) for (int8_t rpad = pad - (pad / 2); rpad > 0; --rpad) dwin_string.add(' '); + lcd_moveto(1, row); lcd_put_dwin_string(); } @@ -449,7 +466,7 @@ void MarlinUI::draw_status_message(const bool blink) { if (yes) draw_boxed_string(true, yes, yesno); } - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA void MenuItem_sdbase::draw(const bool sel, const uint8_t row, FSTR_P const, CardReader &theCard, const bool isDir) { if (mark_as_selected(row, sel)) { @@ -469,7 +486,7 @@ void MarlinUI::draw_status_message(const bool blink) { } } - #endif // SDSUPPORT + #endif // HAS_MEDIA #if ENABLED(AUTO_BED_LEVELING_UBL) diff --git a/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp b/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp index 5ec94b853f10..70c7c2d8f0ba 100644 --- a/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp +++ b/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp @@ -29,7 +29,7 @@ #include "dwin_string.h" #include "lcdprint_dwin.h" -#include "../../fontutils.h" +#include "../../utf8.h" #include "../../../libs/numtostr.h" #include "../../marlinui.h" @@ -39,7 +39,7 @@ #include "../../../module/printcounter.h" #include "../../../module/planner.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../../../libs/duration_t.h" #endif diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index af157921d511..a372ae5b4d7e 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -31,7 +31,7 @@ #if ENABLED(DWIN_LCD_PROUI) -#include "../../fontutils.h" +#include "../../utf8.h" #include "../../marlinui.h" #include "../../../sd/cardreader.h" diff --git a/Marlin/src/lcd/e3v2/proui/endstop_diag.cpp b/Marlin/src/lcd/e3v2/proui/endstop_diag.cpp index c3edba53dff5..055f26c05830 100644 --- a/Marlin/src/lcd/e3v2/proui/endstop_diag.cpp +++ b/Marlin/src/lcd/e3v2/proui/endstop_diag.cpp @@ -66,42 +66,26 @@ void draw_es_state(const bool is_hit) { } void ESDiagClass::Draw() { - Title.ShowCaption(F("End-stops Diagnostic")); + Title.ShowCaption(GET_TEXT_F(MSG_ENDSTOP_TEST)); DWINUI::ClearMainArea(); Draw_Popup_Bkgd(); DWINUI::Draw_Button(BTN_Continue, 86, 250); DWINUI::cursor.y = 80; #define ES_LABEL(S) draw_es_label(F(STR_##S)) - #if HAS_X_MIN - ES_LABEL(X_MIN); - #endif - #if HAS_Y_MIN - ES_LABEL(Y_MIN); - #endif - #if HAS_Z_MIN - ES_LABEL(Z_MIN); - #endif - #if HAS_FILAMENT_SENSOR - draw_es_label(F(STR_FILAMENT)); - #endif + TERN_(HAS_X_MIN, ES_LABEL(X_MIN)); TERN_(HAS_X_MAX, ES_LABEL(X_MAX)); + TERN_(HAS_Y_MIN, ES_LABEL(Y_MIN)); TERN_(HAS_Y_MAX, ES_LABEL(Y_MAX)); + TERN_(HAS_Z_MIN_PIN, ES_LABEL(Z_MIN)); TERN_(HAS_Z_MAX, ES_LABEL(Z_MAX)); + TERN_(HAS_FILAMENT_SENSOR, draw_es_label(F(STR_FILAMENT))); Update(); } void ESDiagClass::Update() { DWINUI::cursor.y = 80; #define ES_REPORT(S) draw_es_state(READ(S##_PIN) == S##_ENDSTOP_HIT_STATE) - #if HAS_X_MIN - ES_REPORT(X_MIN); - #endif - #if HAS_Y_MIN - ES_REPORT(Y_MIN); - #endif - #if HAS_Z_MIN - ES_REPORT(Z_MIN); - #endif - #if HAS_FILAMENT_SENSOR - draw_es_state(READ(FIL_RUNOUT1_PIN) != FIL_RUNOUT1_STATE); - #endif + TERN_(HAS_X_MIN, ES_REPORT(X_MIN)); TERN_(HAS_X_MAX, ES_REPORT(X_MAX)); + TERN_(HAS_Y_MIN, ES_REPORT(Y_MIN)); TERN_(HAS_Y_MAX, ES_REPORT(Y_MAX)); + TERN_(HAS_Z_MIN_PIN, ES_REPORT(Z_MIN)); TERN_(HAS_Z_MAX, ES_REPORT(Z_MAX)); + TERN_(HAS_FILAMENT_SENSOR, draw_es_state(READ(FIL_RUNOUT1_PIN) != FIL_RUNOUT1_STATE)); DWIN_UpdateLCD(); } diff --git a/Marlin/src/lcd/extui/anycubic/Tunes.cpp b/Marlin/src/lcd/extui/anycubic/Tunes.cpp index 118f049bc1f6..d1fb888d17a2 100644 --- a/Marlin/src/lcd/extui/anycubic/Tunes.cpp +++ b/Marlin/src/lcd/extui/anycubic/Tunes.cpp @@ -39,12 +39,12 @@ namespace Anycubic { - void PlayTune(const uint16_t *tune, const uint8_t speed=1) { + void PlayTune(const uint16_t *tune, const uint8_t speed/*=1*/) { const uint16_t wholenotelen = tune[0] / speed; for (uint8_t pos = 1; pos < MAX_TUNE_LENGTH; pos += 2) { const uint16_t freq = tune[pos]; if (freq == n_END) break; - BUZZ(freq, wholenotelen / tune[pos + 1]); + BUZZ(wholenotelen / tune[pos + 1], freq); } } diff --git a/Marlin/src/lcd/extui/anycubic/Tunes.h b/Marlin/src/lcd/extui/anycubic/Tunes.h index a05107738d24..8b99f1f863e9 100644 --- a/Marlin/src/lcd/extui/anycubic/Tunes.h +++ b/Marlin/src/lcd/extui/anycubic/Tunes.h @@ -61,7 +61,7 @@ n_END=10000 // end of tune marker namespace Anycubic { - void PlayTune(const uint8_t beeperPin, const uint16_t *tune, const uint8_t speed); + void PlayTune(const uint16_t *tune, const uint8_t speed=1); // Only uncomment the tunes you are using to save memory // This will help you write tunes! @@ -100,7 +100,7 @@ namespace Anycubic { n_END }; - const uint16_t Heater_Timedout[] = { + const uint16_t HeaterTimeout[] = { 1000, n_C6,l_T1, n_END diff --git a/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp b/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp index 45fb73c02f44..f3bc64a02498 100644 --- a/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp +++ b/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp @@ -104,7 +104,7 @@ void ChironTFT::Startup() { injectCommands(AC_cmnd_enable_leveling); // Startup tunes are defined in Tunes.h - PlayTune(TERN(AC_DEFAULT_STARTUP_TUNE, Anycubic_PowerOn, GB_PowerOn), 1); + PlayTune(TERN(AC_DEFAULT_STARTUP_TUNE, Anycubic_PowerOn, GB_PowerOn)); #if ACDEBUGLEVEL SERIAL_ECHOLNPGM("AC Debug Level ", ACDEBUGLEVEL); @@ -192,7 +192,7 @@ void ChironTFT::FilamentRunout() { // 1 Signal filament out last_error = AC_error_filament_runout; SendtoTFTLN(isPrintingFromMedia() ? AC_msg_filament_out_alert : AC_msg_filament_out_block); - PlayTune(FilamentOut, 1); + PlayTune(FilamentOut); } void ChironTFT::ConfirmationRequest(const char * const msg) { @@ -215,7 +215,7 @@ void ChironTFT::ConfirmationRequest(const char * const msg) { if (strcmp_P(msg, MARLIN_msg_heater_timeout) == 0) { pause_state = AC_paused_heater_timed_out; SendtoTFTLN(AC_msg_paused); // enable continue button - PlayTune(BEEPER_PIN,Heater_Timedout,1); + PlayTune(HeaterTimeout); } // Reheat finished, send acknowledgement else if (strcmp_P(msg, MARLIN_msg_reheat_done) == 0) { @@ -253,7 +253,7 @@ void ChironTFT::StatusChange(const char * const msg) { } // If probing fails don't save the mesh raise the probe above the bad point if (strcmp_P(msg, MARLIN_msg_probing_failed) == 0) { - PlayTune(BeepBeepBeeep, 1); + PlayTune(BeepBeepBeeep); injectCommands(F("G1 Z50 F500")); SendtoTFTLN(AC_msg_probing_complete); printer_state = AC_printer_idle; @@ -307,7 +307,7 @@ void ChironTFT::StatusChange(const char * const msg) { void ChironTFT::PowerLossRecovery() { printer_state = AC_printer_resuming_from_power_outage; // Play tune to notify user we can recover. last_error = AC_error_powerloss; - PlayTune(SOS, 1); + PlayTune(SOS); SERIAL_ECHOLNF(AC_msg_powerloss_recovery); } diff --git a/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.cpp b/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.cpp index 1bc52bfcaf6d..36b24861fe3b 100644 --- a/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.cpp +++ b/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.cpp @@ -94,7 +94,7 @@ void AnycubicTFTClass::OnSetup() { delay_ms(10); // Init the state of the key pins running on the TFT - #if BOTH(SDSUPPORT, HAS_SD_DETECT) + #if BOTH(HAS_MEDIA, HAS_SD_DETECT) SET_INPUT_PULLUP(SD_DETECT_PIN); #endif #if ENABLED(FILAMENT_RUNOUT_SENSOR) @@ -176,7 +176,7 @@ void AnycubicTFTClass::OnUserConfirmRequired(const char * const msg) { SERIAL_ECHOLNPGM("TFT Serial Debug: OnUserConfirmRequired triggered... ", msg); #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA /** * Need to handle the process of following states * "Nozzle Parked" @@ -380,7 +380,7 @@ void AnycubicTFTClass::HandleSpecialMenu() { } void AnycubicTFTClass::RenderCurrentFileList() { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA uint16_t selectedNumber = 0; SelectedDirectory[0] = 0; SelectedFile[0] = 0; @@ -404,7 +404,7 @@ void AnycubicTFTClass::RenderCurrentFileList() { RenderCurrentFolder(selectedNumber); } SENDLINE_PGM("END"); // Filelist stop - #endif // SDSUPPORT + #endif // HAS_MEDIA } void AnycubicTFTClass::RenderSpecialMenu(uint16_t selectedNumber) { @@ -516,7 +516,7 @@ void AnycubicTFTClass::RenderCurrentFolder(uint16_t selectedNumber) { } void AnycubicTFTClass::OnPrintTimerStarted() { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (mediaPrintingState == AMPRINTSTATE_PRINTING) SENDLINE_DBG_PGM("J04", "TFT Serial Debug: Starting SD Print... J04"); // J04 Starting Print @@ -524,7 +524,7 @@ void AnycubicTFTClass::OnPrintTimerStarted() { } void AnycubicTFTClass::OnPrintTimerPaused() { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (isPrintingFromMedia()) { mediaPrintingState = AMPRINTSTATE_PAUSED; mediaPauseState = AMPAUSESTATE_PARKING; @@ -533,7 +533,7 @@ void AnycubicTFTClass::OnPrintTimerPaused() { } void AnycubicTFTClass::OnPrintTimerStopped() { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (mediaPrintingState == AMPRINTSTATE_PRINTING) { mediaPrintingState = AMPRINTSTATE_NOT_PRINTING; mediaPauseState = AMPAUSESTATE_NOT_PAUSED; @@ -608,7 +608,7 @@ void AnycubicTFTClass::GetCommandFromTFT() { } break; case 6: // A6 GET SD CARD PRINTING STATUS - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (isPrintingFromMedia()) { SEND_PGM("A6V "); if (isMediaInserted()) @@ -637,28 +637,28 @@ void AnycubicTFTClass::GetCommandFromTFT() { break; case 8: // A8 GET SD LIST - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA SelectedFile[0] = 0; RenderCurrentFileList(); #endif break; case 9: // A9 pause sd print - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (isPrintingFromMedia()) PausePrint(); #endif break; case 10: // A10 resume sd print - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (isPrintingFromMediaPaused()) ResumePrint(); #endif break; case 11: // A11 STOP SD PRINT - TERN_(SDSUPPORT, StopPrint()); + TERN_(HAS_MEDIA, StopPrint()); break; case 12: // A12 kill @@ -666,7 +666,7 @@ void AnycubicTFTClass::GetCommandFromTFT() { break; case 13: // A13 SELECTION FILE - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (isMediaInserted()) { starpos = (strchr(TFTstrchr_pointer + 4, '*')); if (TFTstrchr_pointer[4] == '/') { @@ -695,7 +695,7 @@ void AnycubicTFTClass::GetCommandFromTFT() { break; case 14: // A14 START PRINTING - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (!isPrinting() && strlen(SelectedFile) > 0) StartPrint(); #endif @@ -868,7 +868,7 @@ void AnycubicTFTClass::GetCommandFromTFT() { break; case 26: // A26 refresh SD - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (isMediaInserted()) { if (strlen(SelectedDirectory) > 0) { FileList currentFileList; @@ -924,7 +924,7 @@ void AnycubicTFTClass::GetCommandFromTFT() { } void AnycubicTFTClass::DoSDCardStateCheck() { - #if BOTH(SDSUPPORT, HAS_SD_DETECT) + #if BOTH(HAS_MEDIA, HAS_SD_DETECT) bool isInserted = isMediaInserted(); if (isInserted) SENDLINE_DBG_PGM("J00", "TFT Serial Debug: SD card state changed... isInserted"); @@ -954,7 +954,7 @@ void AnycubicTFTClass::DoFilamentRunoutCheck() { } void AnycubicTFTClass::StartPrint() { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (!isPrinting() && strlen(SelectedFile) > 0) { #if ENABLED(ANYCUBIC_LCD_DEBUG) SERIAL_ECHOPGM("TFT Serial Debug: About to print file ... "); @@ -970,7 +970,7 @@ void AnycubicTFTClass::StartPrint() { } void AnycubicTFTClass::PausePrint() { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (isPrintingFromMedia() && mediaPrintingState != AMPRINTSTATE_STOP_REQUESTED && mediaPauseState == AMPAUSESTATE_NOT_PAUSED) { mediaPrintingState = AMPRINTSTATE_PAUSE_REQUESTED; mediaPauseState = AMPAUSESTATE_NOT_PAUSED; // need the userconfirm method to update pause state @@ -984,7 +984,7 @@ void AnycubicTFTClass::PausePrint() { } void AnycubicTFTClass::ResumePrint() { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA #if ENABLED(FILAMENT_RUNOUT_SENSOR) if (READ(FIL_RUNOUT1_PIN)) { #if ENABLED(ANYCUBIC_LCD_DEBUG) @@ -1020,7 +1020,7 @@ void AnycubicTFTClass::ResumePrint() { } void AnycubicTFTClass::StopPrint() { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA mediaPrintingState = AMPRINTSTATE_STOP_REQUESTED; mediaPauseState = AMPAUSESTATE_NOT_PAUSED; SENDLINE_DBG_PGM("J16", "TFT Serial Debug: SD print stop called... J16"); diff --git a/Marlin/src/lcd/extui/anycubic_vyper/FileNavigator.cpp b/Marlin/src/lcd/extui/anycubic_vyper/FileNavigator.cpp index 38603f567915..03eba4c5b355 100644 --- a/Marlin/src/lcd/extui/anycubic_vyper/FileNavigator.cpp +++ b/Marlin/src/lcd/extui/anycubic_vyper/FileNavigator.cpp @@ -40,8 +40,8 @@ using namespace ExtUI; namespace Anycubic { - FileList FileNavigator::filelist; // Instance of the Marlin file API - char FileNavigator::currentfoldername[MAX_PATH_LEN]; // Current folder path + FileList FileNavigator::filelist; // Instance of the Marlin file API + char FileNavigator::currentfoldername[MAX_PATH_LEN + 1]; // Current folder path uint16_t FileNavigator::lastindex; uint8_t FileNavigator::folderdepth; uint16_t FileNavigator::currentindex; // override the panel request diff --git a/Marlin/src/lcd/extui/anycubic_vyper/dgus_tft.cpp b/Marlin/src/lcd/extui/anycubic_vyper/dgus_tft.cpp index e2bc343d67fa..387557f2afec 100644 --- a/Marlin/src/lcd/extui/anycubic_vyper/dgus_tft.cpp +++ b/Marlin/src/lcd/extui/anycubic_vyper/dgus_tft.cpp @@ -463,7 +463,7 @@ namespace Anycubic { pop_up_index = 15; // show filament lack. if (READ(FIL_RUNOUT_PIN) == FIL_RUNOUT_STATE) { - PlayTune(FilamentOut, 1); + PlayTune(FilamentOut); feedrate_back = getFeedrate_percent(); @@ -505,7 +505,7 @@ namespace Anycubic { if (strcmp_P(msg, MARLIN_msg_heater_timeout) == 0) { pause_state = AC_paused_heater_timed_out; SendtoTFTLN(AC_msg_paused); // enable continue button - PlayTune(Heater_Timedout, 1); + PlayTune(HeaterTimeout); } // Reheat finished, send acknowledgement else if (strcmp_P(msg, MARLIN_msg_reheat_done) == 0) { @@ -576,7 +576,7 @@ namespace Anycubic { // If probing fails don't save the mesh raise the probe above the bad point if (strcmp_P(msg, MARLIN_msg_probing_failed) == 0) { - PlayTune(BeepBeepBeeep, 1); + PlayTune(BeepBeepBeeep); injectCommands(F("G1 Z50 F500")); ChangePageOfTFT(PAGE_CHS_ABNORMAL_LEVELING_SENSOR); SendtoTFTLN(AC_msg_probing_complete); @@ -1070,7 +1070,7 @@ namespace Anycubic { #else SendTxtToTFT(recovery.info.sd_filename, TXT_OUTAGE_RECOVERY_FILE); #endif - PlayTune(SOS, 1); + PlayTune(SOS); } #else constexpr bool is_outage = false; @@ -1081,7 +1081,7 @@ namespace Anycubic { } else if (control_value == 0x010000) { // startup first gif // Startup tunes are defined in Tunes.h - PlayTune(Anycubic_PowerOn, 1); // takes 3500 ms + PlayTune(Anycubic_PowerOn); // takes 3500 ms } } diff --git a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp index b2363c4ee9ab..e8abc259a21d 100644 --- a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp @@ -52,7 +52,7 @@ bool DGUSScreenHandler::ScreenComplete; void (*DGUSScreenHandler::confirm_action_cb)() = nullptr; -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA int16_t DGUSScreenHandler::top_file = 0, DGUSScreenHandler::file_to_print = 0; ExtUI::FileList filelist; @@ -260,7 +260,7 @@ void DGUSScreenHandler::DGUSLCD_SendHeaterStatusToDisplay(DGUS_VP_Variable &var) #endif -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA void DGUSScreenHandler::ScreenChangeHookIfSD(DGUS_VP_Variable &var, void *val_ptr) { // default action executed when there is a SD card, but not printing @@ -329,7 +329,7 @@ void DGUSScreenHandler::DGUSLCD_SendHeaterStatusToDisplay(DGUS_VP_Variable &var) GotoScreen(DGUSLCD_SCREEN_POPUP); } -#endif // SDSUPPORT +#endif // HAS_MEDIA void DGUSScreenHandler::ScreenConfirmedOK(DGUS_VP_Variable &var, void *val_ptr) { DGUS_VP_Variable ramcopy; diff --git a/Marlin/src/lcd/extui/dgus/DGUSScreenHandlerBase.h b/Marlin/src/lcd/extui/dgus/DGUSScreenHandlerBase.h index 7ff9ac673fd1..9ebca87be1d9 100644 --- a/Marlin/src/lcd/extui/dgus/DGUSScreenHandlerBase.h +++ b/Marlin/src/lcd/extui/dgus/DGUSScreenHandlerBase.h @@ -114,7 +114,7 @@ class DGUSScreenHandler { static void HandleFilamentLoadUnload(DGUS_VP_Variable &var); #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA // Callback for VP "Display wants to change screen when there is a SD card" static void ScreenChangeHookIfSD(DGUS_VP_Variable &var, void *val_ptr); // Scroll buttons on the file listing screen. @@ -233,7 +233,7 @@ class DGUSScreenHandler { static uint16_t ConfirmVP; //< context for confirm screen (VP that will be emulated-sent on "OK"). - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA static int16_t top_file; //< file on top of file chooser static int16_t file_to_print; //< touched file to be confirmed #endif diff --git a/Marlin/src/lcd/extui/dgus/dgus_extui.cpp b/Marlin/src/lcd/extui/dgus/dgus_extui.cpp index 2fe4e03016b5..1d86d8bd558f 100644 --- a/Marlin/src/lcd/extui/dgus/dgus_extui.cpp +++ b/Marlin/src/lcd/extui/dgus/dgus_extui.cpp @@ -48,9 +48,9 @@ namespace ExtUI { while (!ScreenHandler.loop()); // Wait while anything is left to be sent } - void onMediaInserted() { TERN_(SDSUPPORT, ScreenHandler.SDCardInserted()); } - void onMediaError() { TERN_(SDSUPPORT, ScreenHandler.SDCardError()); } - void onMediaRemoved() { TERN_(SDSUPPORT, ScreenHandler.SDCardRemoved()); } + void onMediaInserted() { TERN_(HAS_MEDIA, ScreenHandler.SDCardInserted()); } + void onMediaError() { TERN_(HAS_MEDIA, ScreenHandler.SDCardError()); } + void onMediaRemoved() { TERN_(HAS_MEDIA, ScreenHandler.SDCardRemoved()); } void onPlayTone(const uint16_t frequency, const uint16_t duration) {} void onPrintTimerStarted() {} diff --git a/Marlin/src/lcd/extui/dgus/fysetc/DGUSDisplayDef.cpp b/Marlin/src/lcd/extui/dgus/fysetc/DGUSDisplayDef.cpp index 3e731de438cb..6b670368b656 100644 --- a/Marlin/src/lcd/extui/dgus/fysetc/DGUSDisplayDef.cpp +++ b/Marlin/src/lcd/extui/dgus/fysetc/DGUSDisplayDef.cpp @@ -320,7 +320,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { // Helper to detect touch events VPHELPER(VP_SCREENCHANGE, nullptr, ScreenHandler.ScreenChangeHook, nullptr), VPHELPER(VP_SCREENCHANGE_ASK, nullptr, ScreenHandler.ScreenChangeHookIfIdle, nullptr), - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA VPHELPER(VP_SCREENCHANGE_WHENSD, nullptr, ScreenHandler.ScreenChangeHookIfSD, nullptr), #endif VPHELPER(VP_CONFIRMED, nullptr, ScreenHandler.ScreenConfirmedOK, nullptr), @@ -442,7 +442,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { #endif // SDCard File listing. - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA VPHELPER(VP_SD_ScrollEvent, nullptr, ScreenHandler.DGUSLCD_SD_ScrollFilelist, nullptr), VPHELPER(VP_SD_FileSelected, nullptr, ScreenHandler.DGUSLCD_SD_FileSelected, nullptr), VPHELPER(VP_SD_FileSelectConfirm, nullptr, ScreenHandler.DGUSLCD_SD_StartPrint, nullptr), diff --git a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp index 58f0ed831921..0c76454d747e 100644 --- a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp @@ -40,7 +40,7 @@ #include "../../../../feature/powerloss.h" #endif -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA extern ExtUI::FileList filelist; @@ -124,7 +124,7 @@ ) GotoScreen(DGUSLCD_SCREEN_MAIN); } -#endif // SDSUPPORT +#endif // HAS_MEDIA void DGUSScreenHandler::ScreenChangeHook(DGUS_VP_Variable &var, void *val_ptr) { uint8_t *tmp = (uint8_t*)val_ptr; diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp index a348a1f9a11c..c278179e3f27 100644 --- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp +++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp @@ -317,7 +317,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { // Helper to detect touch events VPHELPER(VP_SCREENCHANGE, nullptr, ScreenHandler.ScreenChangeHook, nullptr), VPHELPER(VP_SCREENCHANGE_ASK, nullptr, ScreenHandler.ScreenChangeHookIfIdle, nullptr), - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA VPHELPER(VP_SCREENCHANGE_WHENSD, nullptr, ScreenHandler.ScreenChangeHookIfSD, nullptr), #endif VPHELPER(VP_CONFIRMED, nullptr, ScreenHandler.ScreenConfirmedOK, nullptr), @@ -435,7 +435,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { #endif // SDCard File listing. - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA VPHELPER(VP_SD_ScrollEvent, nullptr, ScreenHandler.DGUSLCD_SD_ScrollFilelist, nullptr), VPHELPER(VP_SD_FileSelected, nullptr, ScreenHandler.DGUSLCD_SD_FileSelected, nullptr), VPHELPER(VP_SD_FileSelectConfirm, nullptr, ScreenHandler.DGUSLCD_SD_StartPrint, nullptr), diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp index ebe3e3ba8abc..83658cc8c021 100644 --- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp @@ -40,7 +40,7 @@ #include "../../../../feature/powerloss.h" #endif -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA extern ExtUI::FileList filelist; @@ -124,7 +124,7 @@ ) GotoScreen(DGUSLCD_SCREEN_MAIN); } -#endif // SDSUPPORT +#endif // HAS_MEDIA void DGUSScreenHandler::ScreenChangeHook(DGUS_VP_Variable &var, void *val_ptr) { uint8_t *tmp = (uint8_t*)val_ptr; diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp b/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp index 40f6a349d586..8dee8e26d705 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp @@ -502,7 +502,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { // Helper to detect touch events VPHELPER(VP_SCREENCHANGE, nullptr, ScreenHandler.ScreenChangeHook, nullptr), VPHELPER(VP_SCREENCHANGE_ASK, nullptr, ScreenHandler.ScreenChangeHookIfIdle, nullptr), - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA VPHELPER(VP_SCREENCHANGE_WHENSD, nullptr, ScreenHandler.ScreenChangeHookIfSD, nullptr), #endif VPHELPER(VP_CONFIRMED, nullptr, ScreenHandler.ScreenConfirmedOK, nullptr), @@ -751,7 +751,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { // SDCard File listing - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA VPHELPER(VP_SD_FileSelected, nullptr, ScreenHandler.DGUSLCD_SD_FileSelected, nullptr), VPHELPER(VP_SD_ScrollEvent, nullptr, ScreenHandler.DGUSLCD_SD_ScrollFilelist, nullptr), VPHELPER(VP_SD_FileSelectConfirm, nullptr, ScreenHandler.DGUSLCD_SD_StartPrint, nullptr), diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp index bdd5f4f018d4..8cddcb074eea 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp @@ -47,7 +47,7 @@ #include "../../../../feature/powerloss.h" #endif -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA extern ExtUI::FileList filelist; #endif @@ -140,7 +140,7 @@ void DGUSScreenHandlerMKS::DGUSLCD_SendTMCStepValue(DGUS_VP_Variable &var) { #endif } -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA void DGUSScreenHandler::DGUSLCD_SD_FileSelected(DGUS_VP_Variable &var, void *val_ptr) { uint16_t touched_nr = (int16_t)BE16_P(val_ptr) + top_file; @@ -262,7 +262,7 @@ void DGUSScreenHandlerMKS::DGUSLCD_SendTMCStepValue(DGUS_VP_Variable &var) { const uint16_t value = BE16_P(val_ptr); if (value == 0x0F) GotoScreen(DGUSLCD_SCREEN_MAIN); } -#endif // SDSUPPORT +#endif // HAS_MEDIA void DGUSScreenHandler::ScreenChangeHook(DGUS_VP_Variable &var, void *val_ptr) { uint8_t *tmp = (uint8_t*)val_ptr; diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h index 823ed4297cd0..69ded29ffbc7 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h @@ -83,7 +83,7 @@ class DGUSScreenHandlerMKS : public DGUSScreenHandler { static void GetManualFilamentSpeed(DGUS_VP_Variable &var, void *val_ptr); #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA // Marlin informed us about SD print completion. static void SDPrintingFinished(); #else diff --git a/Marlin/src/lcd/extui/dgus/origin/DGUSDisplayDef.cpp b/Marlin/src/lcd/extui/dgus/origin/DGUSDisplayDef.cpp index 004b453e6e2b..c5711320ec18 100644 --- a/Marlin/src/lcd/extui/dgus/origin/DGUSDisplayDef.cpp +++ b/Marlin/src/lcd/extui/dgus/origin/DGUSDisplayDef.cpp @@ -128,7 +128,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { // Helper to detect touch events VPHELPER(VP_SCREENCHANGE, nullptr, ScreenHandler.ScreenChangeHook, nullptr), VPHELPER(VP_SCREENCHANGE_ASK, nullptr, ScreenHandler.ScreenChangeHookIfIdle, nullptr), - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA VPHELPER(VP_SCREENCHANGE_WHENSD, nullptr, ScreenHandler.ScreenChangeHookIfSD, nullptr), #endif VPHELPER(VP_CONFIRMED, nullptr, ScreenHandler.ScreenConfirmedOK, nullptr), @@ -243,7 +243,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { #endif // SDCard File listing. - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA VPHELPER(VP_SD_ScrollEvent, nullptr, ScreenHandler.DGUSLCD_SD_ScrollFilelist, nullptr), VPHELPER(VP_SD_FileSelected, nullptr, ScreenHandler.DGUSLCD_SD_FileSelected, nullptr), VPHELPER(VP_SD_FileSelectConfirm, nullptr, ScreenHandler.DGUSLCD_SD_StartPrint, nullptr), diff --git a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp index edf9a5ca8246..6921cdc73767 100644 --- a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp @@ -40,7 +40,7 @@ #include "../../../../feature/powerloss.h" #endif -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA extern ExtUI::FileList filelist; @@ -124,7 +124,7 @@ ) GotoScreen(DGUSLCD_SCREEN_MAIN); } -#endif // SDSUPPORT +#endif // HAS_MEDIA void DGUSScreenHandler::ScreenChangeHook(DGUS_VP_Variable &var, void *val_ptr) { uint8_t *tmp = (uint8_t*)val_ptr; diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp index 7a0318a5554a..40f3bbf1d513 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp @@ -46,7 +46,7 @@ void DGUSRxHandler::ScreenChange(DGUS_VP &vp, void *data_ptr) { const DGUS_Screen screen = (DGUS_Screen)((uint8_t*)data_ptr)[1]; if (vp.addr == DGUS_Addr::SCREENCHANGE_SD) { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA IF_DISABLED(HAS_SD_DETECT, card.mount()); if (!ExtUI::isMediaInserted()) { @@ -76,7 +76,7 @@ void DGUSRxHandler::ScreenChange(DGUS_VP &vp, void *data_ptr) { dgus_screen_handler.TriggerScreenChange(screen); } -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA void DGUSRxHandler::Scroll(DGUS_VP &vp, void *data_ptr) { UNUSED(vp); @@ -154,7 +154,7 @@ void DGUSRxHandler::ScreenChange(DGUS_VP &vp, void *data_ptr) { ExtUI::printFile(dgus_screen_handler.filelist.shortFilename()); dgus_screen_handler.TriggerScreenChange(DGUS_Screen::PRINT_STATUS); } -#endif // SDSUPPORT +#endif // HAS_MEDIA void DGUSRxHandler::PrintAbort(DGUS_VP &vp, void *data_ptr) { UNUSED(vp); diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.h index 4cad11fc0b0b..d6d5855b9d8b 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.h @@ -28,7 +28,7 @@ namespace DGUSRxHandler { void ScreenChange(DGUS_VP &, void *); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA void Scroll(DGUS_VP &, void *); void SelectFile(DGUS_VP &, void *); void PrintFile(DGUS_VP &, void *); diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp index e1d8778567c4..e8c23b3226a2 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp @@ -34,7 +34,7 @@ uint8_t DGUSScreenHandler::debug_count = 0; -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA ExtUI::FileList DGUSScreenHandler::filelist; uint16_t DGUSScreenHandler::filelist_offset = 0; int16_t DGUSScreenHandler::filelist_selected = -1; @@ -281,7 +281,7 @@ void DGUSScreenHandler::FilamentRunout(const ExtUI::extruder_t extruder) { dgus_display.PlaySound(3); } -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA void DGUSScreenHandler::SDCardInserted() { if (current_screen == DGUS_Screen::HOME) @@ -299,7 +299,7 @@ void DGUSScreenHandler::FilamentRunout(const ExtUI::extruder_t extruder) { TriggerScreenChange(DGUS_Screen::HOME); } -#endif // SDSUPPORT +#endif // HAS_MEDIA #if ENABLED(POWER_LOSS_RECOVERY) diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h index 295df311df46..0f71ebdc3d46 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h @@ -52,7 +52,7 @@ class DGUSScreenHandler { static void PrintTimerStopped(); static void FilamentRunout(const ExtUI::extruder_t extruder); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA /// Marlin informed us that a new SD has been inserted. static void SDCardInserted(); /// Marlin informed us that the SD Card has been removed(). @@ -89,7 +89,7 @@ class DGUSScreenHandler { static uint8_t debug_count; - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA static ExtUI::FileList filelist; static uint16_t filelist_offset; static int16_t filelist_selected; diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp index c95d7d045351..3b1a38502db6 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp @@ -31,7 +31,7 @@ #include "../../../gcode/queue.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA bool DGUSSetupHandler::Print() { dgus_screen_handler.filelist.refresh(); diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.h index 9e3866467fc0..10063446b770 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.h @@ -23,7 +23,7 @@ namespace DGUSSetupHandler { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA bool Print(); #endif bool PrintStatus(); diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp index b27988a89f59..c7d650c03ec8 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp @@ -36,7 +36,7 @@ #include "../../../feature/pause.h" #endif -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA void DGUSTxHandler::SetFileControlState(int16_t file, bool state) { DGUS_Control control; @@ -177,7 +177,7 @@ dgus_display.WriteString((uint16_t)vp.addr, dgus_screen_handler.filelist.filename(), vp.size); } -#endif // SDSUPPORT +#endif // HAS_MEDIA void DGUSTxHandler::PositionZ(DGUS_VP &vp) { const float position = ExtUI::isAxisPositionKnown(ExtUI::Z) ? planner.get_axis_position_mm(Z_AXIS) : 0; diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h index 161d73f813a4..6e4f1db5dc7e 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h @@ -28,7 +28,7 @@ namespace DGUSTxHandler { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA void SetFileControlState(int16_t, bool); void FileType(DGUS_VP &); void FileName(DGUS_VP &); diff --git a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenAddrList.cpp b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenAddrList.cpp index 706038f0edf9..4c99ff6a0089 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenAddrList.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenAddrList.cpp @@ -36,7 +36,7 @@ constexpr DGUS_Addr LIST_HOME[] PROGMEM = { (DGUS_Addr)0 }; -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA constexpr DGUS_Addr LIST_PRINT[] PROGMEM = { DGUS_Addr::SD_Type, DGUS_Addr::SD_FileName0, @@ -210,7 +210,7 @@ constexpr DGUS_Addr LIST_WAIT[] PROGMEM = { const struct DGUS_ScreenAddrList screen_addr_list_map[] PROGMEM = { MAP_HELPER(DGUS_Screen::HOME, LIST_HOME), - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA MAP_HELPER(DGUS_Screen::PRINT, LIST_PRINT), #endif MAP_HELPER(DGUS_Screen::PRINT_STATUS, LIST_PRINT_STATUS), diff --git a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenSetup.cpp b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenSetup.cpp index a9f13b5ee54c..e3ba393af25b 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenSetup.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenSetup.cpp @@ -35,7 +35,7 @@ .setup_fn = SETUP } const struct DGUS_ScreenSetup screen_setup_list[] PROGMEM = { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA SETUP_HELPER(DGUS_Screen::PRINT, &DGUSSetupHandler::Print), #endif SETUP_HELPER(DGUS_Screen::PRINT_STATUS, &DGUSSetupHandler::PrintStatus), diff --git a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp index 3f00dbb0372b..cd5408e190a3 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp @@ -80,7 +80,7 @@ const struct DGUS_VP vp_list[] PROGMEM = { VP_HELPER_RX(DGUS_Addr::SCREENCHANGE_Idle, &DGUSRxHandler::ScreenChange), VP_HELPER_RX(DGUS_Addr::SCREENCHANGE_Printing, &DGUSRxHandler::ScreenChange), - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA VP_HELPER_RX(DGUS_Addr::SD_SelectFile, &DGUSRxHandler::SelectFile), VP_HELPER_RX(DGUS_Addr::SD_Scroll, &DGUSRxHandler::Scroll), VP_HELPER_RX_NODATA(DGUS_Addr::SD_Print, &DGUSRxHandler::PrintFile), @@ -150,7 +150,7 @@ const struct DGUS_VP vp_list[] PROGMEM = { // WRITE-ONLY VARIABLES - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA VP_HELPER_TX(DGUS_Addr::SD_Type, &DGUSTxHandler::FileType), VP_HELPER_TX_SIZE(DGUS_Addr::SD_FileName0, DGUS_FILENAME_LEN, diff --git a/Marlin/src/lcd/extui/dgus_reloaded/dgus_reloaded_extui.cpp b/Marlin/src/lcd/extui/dgus_reloaded/dgus_reloaded_extui.cpp index fb8ef8cc8458..75ef5f5d6627 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/dgus_reloaded_extui.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/dgus_reloaded_extui.cpp @@ -50,9 +50,9 @@ namespace ExtUI { dgus_screen_handler.PrinterKilled(error, component); } - void onMediaInserted() { TERN_(SDSUPPORT, dgus_screen_handler.SDCardInserted()); } - void onMediaError() { TERN_(SDSUPPORT, dgus_screen_handler.SDCardError()); } - void onMediaRemoved() { TERN_(SDSUPPORT, dgus_screen_handler.SDCardRemoved()); } + void onMediaInserted() { TERN_(HAS_MEDIA, dgus_screen_handler.SDCardInserted()); } + void onMediaError() { TERN_(HAS_MEDIA, dgus_screen_handler.SDCardError()); } + void onMediaRemoved() { TERN_(HAS_MEDIA, dgus_screen_handler.SDCardRemoved()); } void onPlayTone(const uint16_t frequency, const uint16_t duration) { dgus_screen_handler.PlayTone(frequency, duration); diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/flash_storage.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/flash_storage.cpp index a23ad6e37e76..c3a4118f208b 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/flash_storage.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/flash_storage.cpp @@ -416,7 +416,7 @@ bool UIFlashStorage::is_present = false; * files must be written sequentially following by a chip erase and it is not possible to * overwrite files. */ UIFlashStorage::error_t UIFlashStorage::write_media_file(FSTR_P filename, uint8_t slot) { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA uint32_t addr; uint8_t buff[write_page_size]; @@ -500,7 +500,7 @@ bool UIFlashStorage::is_present = false; } #else return VERIFY_ERROR; - #endif // SDSUPPORT + #endif // HAS_MEDIA } bool UIFlashStorage::BootMediaReader::isAvailable(uint32_t slot) { diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/media_file_reader.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/media_file_reader.cpp index b4165a742a5f..99e875712ac7 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/media_file_reader.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/media_file_reader.cpp @@ -25,7 +25,7 @@ #if ENABLED(TOUCH_UI_FTDI_EVE) #include "media_file_reader.h" - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA bool MediaFileReader::open(const char *filename) { root = CardReader::getroot(); return file.open(&root, filename, O_READ); diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/media_file_reader.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/media_file_reader.h index 9a20c2a038d7..78b1652c50db 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/media_file_reader.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/media_file_reader.h @@ -24,14 +24,14 @@ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "../../../../sd/SdFile.h" #include "../../../../sd/cardreader.h" #endif class MediaFileReader { private: - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA MediaFile root, file; #endif diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/printing_dialog_box.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/printing_dialog_box.cpp index 4af38dcb9df7..9b67f0e3c83a 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/printing_dialog_box.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/printing_dialog_box.cpp @@ -75,7 +75,7 @@ void BioPrintingDialogBox::draw_interaction_buttons(draw_mode_t what) { .font(font_medium) .colors(isPrinting() ? action_btn : normal_btn) .tag(2).button(BTN_POS(1,9), BTN_SIZE(1,1), F("Menu")) - .enabled(isPrinting() ? TERN0(SDSUPPORT, isPrintingFromMedia()) : 1) + .enabled(isPrinting() ? TERN0(HAS_MEDIA, isPrintingFromMedia()) : 1) .tag(3) .colors(isPrinting() ? normal_btn : action_btn) .button(BTN_POS(2,9), BTN_SIZE(1,1), isPrinting() ? F("Cancel") : F("Back")); diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp index b82b4a07bd7f..86f470ee1915 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp @@ -45,14 +45,14 @@ namespace ExtUI { } void onMediaInserted() { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA sound.play(media_inserted, PLAY_ASYNCHRONOUS); StatusScreen::onMediaInserted(); #endif } void onMediaRemoved() { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (isPrintingFromMedia()) { stopPrint(); InterfaceSoundsScreen::playEventSound(InterfaceSoundsScreen::PRINTING_FAILED); diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/boot_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/boot_screen.cpp index c0940bed5ce4..b01e45948c7a 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/boot_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/boot_screen.cpp @@ -30,7 +30,7 @@ #if ENABLED(SHOW_CUSTOM_BOOTSCREEN) #if ENABLED(TOUCH_UI_PORTRAIT) - #include "../theme/bootscreen_logo_portrait.h" + #include "../theme/_bootscreen_portrait.h" #else #include "../theme/_bootscreen_landscape.h" #endif diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/developer_menu.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/developer_menu.cpp index 2ec8a3bbd19f..4a6073372387 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/developer_menu.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/developer_menu.cpp @@ -44,7 +44,7 @@ void DeveloperMenu::onRedraw(draw_mode_t what) { constexpr bool has_flash = false; #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA constexpr bool has_media = true; #else constexpr bool has_media = false; @@ -98,7 +98,7 @@ bool DeveloperMenu::onTouchEnd(uint8_t tag) { break; case 4: GOTO_SCREEN(TouchRegistersScreen); break; case 5: sound.play(js_bach_joy, PLAY_ASYNCHRONOUS); break; - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA case 6: if (!MediaPlayerScreen::playCardMedia()) AlertDialogBox::showError(F("Cannot open STARTUP.AVI")); diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/endstop_state_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/endstop_state_screen.cpp index b52904fe8f49..46d4998591ae 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/endstop_state_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/endstop_state_screen.cpp @@ -79,7 +79,7 @@ void EndstopStatesScreen::onRedraw(draw_mode_t) { #else PIN_DISABLED(3, 3, PSTR(STR_Y_MIN), Y_MIN) #endif - #if HAS_Z_MIN + #if HAS_Z_MIN_PIN PIN_ENABLED (5, 3, PSTR(STR_Z_MIN), Z_MIN, Z_MIN_ENDSTOP_HIT_STATE) #else PIN_DISABLED(5, 3, PSTR(STR_Z_MIN), Z_MIN) diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/media_player_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/media_player_screen.cpp index 061c8555df54..fbfce19a7593 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/media_player_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/media_player_screen.cpp @@ -57,7 +57,7 @@ void MediaPlayerScreen::onRedraw(draw_mode_t) { } bool MediaPlayerScreen::playCardMedia() { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA char fname[15]; strcpy_P(fname, PSTR("STARTUP.AVI")); diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/screens.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/screens.h index b88e51757690..e2df29cb833d 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/screens.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/screens.h @@ -83,7 +83,7 @@ enum { #if ENABLED(FILAMENT_RUNOUT_SENSOR) FILAMENT_RUNOUT_SCREEN_CACHE, #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA FILES_SCREEN_CACHE, #endif #if ENABLED(CUSTOM_MENU_MAIN) @@ -204,7 +204,7 @@ enum { #include "linear_advance_screen.h" #endif -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "files_screen.h" #endif diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp index f1c65357e017..738d8ee64f2e 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp @@ -417,7 +417,7 @@ bool StatusScreen::onTouchEnd(uint8_t tag) { using namespace ExtUI; switch (tag) { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA case 3: GOTO_SCREEN(FilesScreen); break; #endif case 4: diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/pin_mappings.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/pin_mappings.h index 167ea9d7cf17..396349384159 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/pin_mappings.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/pin_mappings.h @@ -137,7 +137,7 @@ #define CLCD_SPI_CS BTN_EN1 #define CLCD_MOD_RESET BTN_EN2 - #if MB(EINSY_RAMBO, EINSY_RETRO) && DISABLED(SDSUPPORT) + #if MB(EINSY_RAMBO, EINSY_RETRO) && !HAS_MEDIA #define CLCD_SPI_EXTRA_CS SDSS #endif diff --git a/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp b/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp index 1f40f2a037d2..3ba8322f0085 100644 --- a/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp +++ b/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp @@ -1066,7 +1066,7 @@ namespace ExtUI { TPShowStatus = false; ZERO(ChangeMaterialbuf); ChangeMaterialbuf[1] = ChangeMaterialbuf[0] = 10; - RTS_SndData(10 * ChangeMaterialbuf[0], FilamentUnit1); // It's ChangeMaterialbuf for show,instead of current_position[E_AXIS] in them. + RTS_SndData(10 * ChangeMaterialbuf[0], FilamentUnit1); // It's ChangeMaterialbuf for show, instead of current_position.e in them. RTS_SndData(10 * ChangeMaterialbuf[1], FilamentUnit2); RTS_SndData(getActualTemp_celsius(H0), NozzleTemp); RTS_SndData(getTargetTemp_celsius(H0), NozzlePreheat); @@ -1381,7 +1381,7 @@ namespace ExtUI { case 0xF0: // not to cancel heating break; } - RTS_SndData(10 * ChangeMaterialbuf[0], FilamentUnit1); // It's ChangeMaterialbuf for show,instead of current_position[E_AXIS] in them. + RTS_SndData(10 * ChangeMaterialbuf[0], FilamentUnit1); // It's ChangeMaterialbuf for show, instead of current_position.e in them. RTS_SndData(10 * ChangeMaterialbuf[1], FilamentUnit2); } else if (recdat.addr == FilamentUnit1) { diff --git a/Marlin/src/lcd/extui/ia_creality/ia_creality_extui.h b/Marlin/src/lcd/extui/ia_creality/ia_creality_extui.h index 0d932556638c..ba5df4fe77cd 100644 --- a/Marlin/src/lcd/extui/ia_creality/ia_creality_extui.h +++ b/Marlin/src/lcd/extui/ia_creality/ia_creality_extui.h @@ -31,9 +31,10 @@ * * ***************************************/ -#include "string.h" #include "../ui_api.h" +#include + /*********************************/ #define FHONE (0x5A) #define FHTWO (0xA5) diff --git a/Marlin/src/lcd/extui/malyan/malyan.cpp b/Marlin/src/lcd/extui/malyan/malyan.cpp index 66c52878cc98..1c051f4504cd 100644 --- a/Marlin/src/lcd/extui/malyan/malyan.cpp +++ b/Marlin/src/lcd/extui/malyan/malyan.cpp @@ -167,7 +167,7 @@ void process_lcd_eb_command(const char *command) { char message_buffer[MAX_CURLY_COMMAND]; uint8_t done_pct = print_job_timer.isRunning() ? (iteration * 10) : 100; iteration = (iteration + 1) % 10; // Provide progress animation - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (ExtUI::isPrintingFromMedia() || ExtUI::isPrintingFromMediaPaused()) done_pct = card.percentDone(); #endif @@ -180,7 +180,7 @@ void process_lcd_eb_command(const char *command) { #else 0, 0, #endif - TERN(SDSUPPORT, done_pct, 0), + TERN(HAS_MEDIA, done_pct, 0), elapsed_buffer ); write_to_lcd(message_buffer); @@ -257,7 +257,7 @@ void process_lcd_p_command(const char *command) { break; case 'H': queue.enqueue_now_P(G28_STR); break; // Home all axes default: { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA // Print file 000 - a three digit number indicating which // file to print in the SD card. If it's a directory, // then switch to the directory. @@ -316,7 +316,7 @@ void process_lcd_s_command(const char *command) { } break; case 'L': { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (!card.isMounted()) card.mount(); // A more efficient way to do this would be to diff --git a/Marlin/src/lcd/extui/malyan/malyan_extui.cpp b/Marlin/src/lcd/extui/malyan/malyan_extui.cpp index 8bffa442b68c..042062b7c9b7 100644 --- a/Marlin/src/lcd/extui/malyan/malyan_extui.cpp +++ b/Marlin/src/lcd/extui/malyan/malyan_extui.cpp @@ -78,7 +78,7 @@ namespace ExtUI { while (LCD_SERIAL.available()) parse_lcd_byte((byte)LCD_SERIAL.read()); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA // The way last printing status works is simple: // The UI needs to see at least one TQ which is not 100% // and then when the print is complete, one which is. diff --git a/Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp b/Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp index a214e7d1e0e7..f0609f4ebbf7 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp @@ -85,7 +85,7 @@ static void btn_ok_event_cb(lv_obj_t *btn, lv_event_t event) { lv_clear_dialog(); lv_draw_printing(); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (!gcode_preview_over) { char *cur_name; cur_name = strrchr(list_file.file_name[sel_id], '/'); @@ -121,7 +121,7 @@ static void btn_ok_event_cb(lv_obj_t *btn, lv_event_t event) { lv_clear_dialog(); lv_draw_ready_print(); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA uiCfg.print_state = IDLE; card.abortFilePrintSoon(); #endif diff --git a/Marlin/src/lcd/extui/mks_ui/draw_operation.cpp b/Marlin/src/lcd/extui/mks_ui/draw_operation.cpp index ffe714fca964..bf39a52fe965 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_operation.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_operation.cpp @@ -70,7 +70,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { uiCfg.extruderIndexBak = active_extruder; #endif if (uiCfg.print_state == WORKING) { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA card.pauseSDPrint(); stop_print_time(); uiCfg.print_state = PAUSING; diff --git a/Marlin/src/lcd/extui/mks_ui/draw_print_file.cpp b/Marlin/src/lcd/extui/mks_ui/draw_print_file.cpp index 6b41981fb857..da79cb617495 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_print_file.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_print_file.cpp @@ -55,7 +55,7 @@ extern char public_buf_m[100]; uint8_t sel_id = 0; -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA static uint8_t search_file() { int valid_name_cnt = 0; @@ -100,10 +100,10 @@ uint8_t sel_id = 0; return valid_name_cnt; } -#endif // SDSUPPORT +#endif // HAS_MEDIA bool have_pre_pic(char *path) { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA char *ps1, *ps2, *cur_name = strrchr(path, '/'); card.openFileRead(cur_name); card.read(public_buf, 512); @@ -120,8 +120,6 @@ bool have_pre_pic(char *path) { static void event_handler(lv_obj_t *obj, lv_event_t event) { if (event != LV_EVENT_RELEASED) return; uint8_t i, file_count = 0; - //switch (obj->mks_obj_id) - //{ if (obj->mks_obj_id == ID_P_UP) { if (dir_offset[curDirLever].curPage > 0) { // 2015.05.19 @@ -130,9 +128,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { if (dir_offset[curDirLever].cur_page_first_offset >= FILE_NUM) list_file.Sd_file_offset = dir_offset[curDirLever].cur_page_first_offset - FILE_NUM; - #if ENABLED(SDSUPPORT) - file_count = search_file(); - #endif + TERN_(HAS_MEDIA, file_count = search_file()); if (file_count != 0) { dir_offset[curDirLever].curPage--; lv_clear_print_file(); @@ -144,9 +140,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { if (dir_offset[curDirLever].cur_page_last_offset > 0) { list_file.Sd_file_cnt = 0; list_file.Sd_file_offset = dir_offset[curDirLever].cur_page_last_offset + 1; - #if ENABLED(SDSUPPORT) - file_count = search_file(); - #endif + TERN_(HAS_MEDIA, file_count = search_file()); if (file_count != 0) { dir_offset[curDirLever].curPage++; lv_clear_print_file(); @@ -161,17 +155,13 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { int8_t *ch = (int8_t *)strrchr(list_file.curDirPath, '/'); if (ch) { *ch = 0; - #if ENABLED(SDSUPPORT) - card.cdup(); - #endif + TERN_(HAS_MEDIA, card.cdup()); dir_offset[curDirLever].curPage = 0; dir_offset[curDirLever].cur_page_first_offset = 0; dir_offset[curDirLever].cur_page_last_offset = 0; curDirLever--; list_file.Sd_file_offset = dir_offset[curDirLever].cur_page_first_offset; - #if ENABLED(SDSUPPORT) - file_count = search_file(); - #endif + TERN_(HAS_MEDIA, file_count = search_file()); lv_clear_print_file(); disp_gcode_icon(file_count); } @@ -189,9 +179,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { strcpy(list_file.curDirPath, list_file.file_name[i]); curDirLever++; list_file.Sd_file_offset = dir_offset[curDirLever].cur_page_first_offset; - #if ENABLED(SDSUPPORT) - file_count = search_file(); - #endif + TERN_(HAS_MEDIA, file_count = search_file()); lv_clear_print_file(); disp_gcode_icon(file_count); } @@ -222,7 +210,7 @@ void lv_draw_print_file() { ZERO(list_file.curDirPath); list_file.Sd_file_offset = dir_offset[curDirLever].cur_page_first_offset; - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA card.mount(); file_count = search_file(); #endif @@ -359,7 +347,7 @@ void disp_gcode_icon(uint8_t file_num) { } uint32_t lv_open_gcode_file(char *path) { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA uint32_t *ps4; uintptr_t pre_sread_cnt = UINTPTR_MAX; char *cur_name; @@ -375,7 +363,7 @@ uint32_t lv_open_gcode_file(char *path) { card.setIndex(pre_sread_cnt); } return pre_sread_cnt; - #endif // SDSUPPORT + #endif // HAS_MEDIA } int ascii2dec_test(char *ascii) { @@ -395,9 +383,8 @@ int ascii2dec_test(char *ascii) { } void lv_gcode_file_read(uint8_t *data_buf) { - #if ENABLED(SDSUPPORT) - uint16_t i = 0, j = 0, k = 0; - uint16_t row_1 = 0; + #if HAS_MEDIA + uint16_t i = 0, j = 0, k = 0, row_1 = 0; bool ignore_start = true; char temp_test[200]; volatile uint16_t *p_index; @@ -435,29 +422,18 @@ void lv_gcode_file_read(uint8_t *data_buf) { break; } } - #if HAS_TFT_LVGL_UI_SPI - for (i = 0; i < 200;) { - p_index = (uint16_t *)(&public_buf[i]); - - //Color = (*p_index >> 8); - //*p_index = Color | ((*p_index & 0xFF) << 8); - i += 2; - if (*p_index == 0x0000) *p_index = LV_COLOR_BACKGROUND.full; - } - #else // !HAS_TFT_LVGL_UI_SPI - for (i = 0; i < 200;) { - p_index = (uint16_t *)(&public_buf[i]); - //Color = (*p_index >> 8); - //*p_index = Color | ((*p_index & 0xFF) << 8); - i += 2; - if (*p_index == 0x0000) *p_index = LV_COLOR_BACKGROUND.full; // 0x18C3; - } - #endif // !HAS_TFT_LVGL_UI_SPI + for (i = 0; i < 200;) { + p_index = (uint16_t *)(&public_buf[i]); + //Color = (*p_index >> 8); + //*p_index = Color | ((*p_index & 0xFF) << 8); + i += 2; + if (*p_index == 0x0000) *p_index = LV_COLOR_BACKGROUND.full; + } memcpy(data_buf, public_buf, 200); - #endif // SDSUPPORT + #endif // HAS_MEDIA } -void lv_close_gcode_file() {TERN_(SDSUPPORT, card.closefile());} +void lv_close_gcode_file() {TERN_(HAS_MEDIA, card.closefile());} void lv_gcode_file_seek(uint32_t pos) { card.setIndex(pos); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_printing.cpp b/Marlin/src/lcd/extui/mks_ui/draw_printing.cpp index 5dc3861f6525..345c5dd732c0 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_printing.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_printing.cpp @@ -80,7 +80,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { switch (obj->mks_obj_id) { case ID_PAUSE: if (uiCfg.print_state == WORKING) { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA card.pauseSDPrint(); stop_print_time(); uiCfg.print_state = PAUSING; @@ -274,13 +274,13 @@ void setProBarRate() { volatile long long rate_tmp_r; if (!gCfgItems.from_flash_pic) { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA rate_tmp_r = (long long)card.getIndex() * 100; #endif rate = rate_tmp_r / gCfgItems.curFilesize; } else { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA rate_tmp_r = (long long)card.getIndex(); #endif rate = (rate_tmp_r - (PREVIEW_SIZE + To_pre_view)) * 100 / (gCfgItems.curFilesize - (PREVIEW_SIZE + To_pre_view)); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp index b510e3c0c6f3..102109a1363e 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp @@ -563,7 +563,7 @@ char *creat_title_text() { uintptr_t gPicturePreviewStart = 0; void preview_gcode_prehandle(char *path) { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA uintptr_t pre_read_cnt = 0; uint32_t *p1; char *cur_name; @@ -593,7 +593,7 @@ char *creat_title_text() { } void gcode_preview(char *path, int xpos_pixel, int ypos_pixel) { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA volatile uint32_t i, j; volatile uint16_t *p_index; char *cur_name; @@ -672,7 +672,7 @@ char *creat_title_text() { } return; } - #endif // SDSUPPORT + #endif // HAS_MEDIA } void draw_default_preview(int xpos_pixel, int ypos_pixel, uint8_t sel) { @@ -1345,7 +1345,7 @@ void lv_screen_menu_item_onoff_update(lv_obj_t *btn, const bool curValue) { lv_label_set_text((lv_obj_t*)btn->child_ll.head, curValue ? machine_menu.enable : machine_menu.disable); } -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA void sd_detection() { static bool last_sd_status; @@ -1377,7 +1377,7 @@ void LV_TASK_HANDLER() { if (TERN1(USE_SPI_DMA_TC, !get_lcd_dma_lock())) lv_task_handler(); - #if BOTH(MKS_TEST, SDSUPPORT) + #if BOTH(MKS_TEST, HAS_MEDIA) if (mks_test_flag == 0x1E) mks_hardware_test(); #endif diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.h b/Marlin/src/lcd/extui/mks_ui/draw_ui.h index 9bc583d3ad32..da43f2a49098 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ui.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.h @@ -133,16 +133,16 @@ #define FILE_PRE_PIC_Y_OFFSET 0 #define PREVIEW_LITTLE_PIC_SIZE 40910 // 400*100+9*101+1 - #define PREVIEW_SIZE 202720 // (PREVIEW_LITTLE_PIC_SIZE+800*200+201*9+1) + #define PREVIEW_SIZE 202720 // (PREVIEW_LITTLE_PIC_SIZE+800*200+201*9+1) // machine parameter ui - #define PARA_UI_POS_X 10 - #define PARA_UI_POS_Y 50 + #define PARA_UI_POS_X 10 + #define PARA_UI_POS_Y 50 #define PARA_UI_SIZE_X 450 - #define PARA_UI_SIZE_Y 40 + #define PARA_UI_SIZE_Y 40 - #define PARA_UI_ARROW_V 12 + #define PARA_UI_ARROW_V 12 #define PARA_UI_BACK_POS_X 400 #define PARA_UI_BACK_POS_Y 270 @@ -152,31 +152,31 @@ #define PARA_UI_VALUE_SIZE_X 370 #define PARA_UI_VALUE_POS_X 400 - #define PARA_UI_VALUE_V 5 + #define PARA_UI_VALUE_V 5 #define PARA_UI_STATE_POS_X 380 - #define PARA_UI_STATE_V 2 + #define PARA_UI_STATE_V 2 #define PARA_UI_VALUE_SIZE_X_2 200 #define PARA_UI_VALUE_POS_X_2 320 - #define PARA_UI_VALUE_V_2 5 + #define PARA_UI_VALUE_V_2 5 - #define PARA_UI_VALUE_BTN_X_SIZE 70 - #define PARA_UI_VALUE_BTN_Y_SIZE 28 + #define PARA_UI_VALUE_BTN_X_SIZE 70 + #define PARA_UI_VALUE_BTN_Y_SIZE 28 - #define PARA_UI_BACK_BTN_X_SIZE 70 - #define PARA_UI_BACK_BTN_Y_SIZE 40 + #define PARA_UI_BACK_BTN_X_SIZE 70 + #define PARA_UI_BACK_BTN_Y_SIZE 40 - #define QRCODE_X 20 - #define QRCODE_Y 40 + #define QRCODE_X 20 + #define QRCODE_Y 40 #define QRCODE_WIDTH 160 -#else // ifdef TFT35 +#else // !TFT35 #define TFT_WIDTH 320 #define TFT_HEIGHT 240 -#endif // ifdef TFT35 +#endif #ifdef __cplusplus extern "C" { diff --git a/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp b/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp index d1679d402f09..20f069aa49da 100644 --- a/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp +++ b/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp @@ -45,32 +45,32 @@ #if PIN_EXISTS(MT_DET_2) bool mt_det2_sta; #endif - #if X_HOME_DIR + #if HAS_X_ENDSTOP bool endstopx1_sta; #else constexpr static bool endstopx1_sta = true; #endif - #if HAS_X2_MIN || HAS_X2_MAX + #if HAS_X2_ENDSTOP bool endstopx2_sta; #else constexpr static bool endstopx2_sta = true; #endif - #if HAS_Y_AXIS && Y_HOME_DIR + #if HAS_Y_ENDSTOP bool endstopy1_sta; #else constexpr static bool endstopy1_sta = true; #endif - #if HAS_Y2_MIN || HAS_Y2_MAX + #if HAS_Y2_ENDSTOP bool endstopy2_sta; #else constexpr static bool endstopy2_sta = true; #endif - #if HAS_Z_AXIS && Z_HOME_DIR + #if HAS_Z_ENDSTOP bool endstopz1_sta; #else constexpr static bool endstopz1_sta = true; #endif - #if HAS_Z2_MIN || HAS_Z2_MAX + #if HAS_Z2_ENDSTOP bool endstopz2_sta; #else constexpr static bool endstopz2_sta = true; @@ -87,36 +87,12 @@ #if PIN_EXISTS(MT_DET_2) mt_det2_sta = (READ(MT_DET_2_PIN) == LOW); #endif - #if HAS_X_MIN - endstopx1_sta = ESTATE(X_MIN); - #elif HAS_X_MAX - endstopx1_sta = ESTATE(X_MAX); - #endif - #if HAS_X2_MIN - endstopx2_sta = ESTATE(X2_MIN); - #elif HAS_X2_MAX - endstopx2_sta = ESTATE(X2_MAX); - #endif - #if HAS_Y_MIN - endstopy1_sta = ESTATE(Y_MIN); - #elif HAS_Y_MAX - endstopy1_sta = ESTATE(Y_MAX); - #endif - #if HAS_Y2_MIN - endstopy2_sta = ESTATE(Y2_MIN); - #elif HAS_Y2_MAX - endstopy2_sta = ESTATE(Y2_MAX); - #endif - #if HAS_Z_MIN - endstopz1_sta = ESTATE(Z_MIN); - #elif HAS_Z_MAX - endstopz1_sta = ESTATE(Z_MAX); - #endif - #if HAS_Z2_MIN - endstopz2_sta = ESTATE(Z2_MIN); - #elif HAS_Z2_MAX - endstopz2_sta = ESTATE(Z2_MAX); - #endif + TERN_(HAS_X_ENDSTOP, endstopx1_sta = ESTATE(TERN(HAS_X_MIN, X_MIN, X_MAX))); + TERN_(HAS_X2_ENDSTOP, endstopx2_sta = ESTATE(TERN(HAS_X2_MIN, X2_MIN, X2_MAX))); + TERN_(HAS_Y_ENDSTOP, endstopy1_sta = ESTATE(TERN(HAS_Y_MIN, Y_MIN, Y_MAX))); + TERN_(HAS_Y2_ENDSTOP, endstopy2_sta = ESTATE(TERN(HAS_Y2_MIN, Y2_MIN, Y2_MAX))); + TERN_(HAS_Z_ENDSTOP, endstopz1_sta = ESTATE(TERN(HAS_Z_MIN_PIN, Z_MIN, Z_MAX))); + TERN_(HAS_Z2_ENDSTOP, endstopz2_sta = ESTATE(TERN(HAS_Z2_MIN, Z2_MIN, Z2_MAX))); } void test_gpio_readlevel_H() { @@ -128,36 +104,12 @@ #if PIN_EXISTS(MT_DET_2) mt_det2_sta = (READ(MT_DET_2_PIN) == HIGH); #endif - #if HAS_X_MIN - endstopx1_sta = !ESTATE(X_MIN); - #elif HAS_X_MAX - endstopx1_sta = !ESTATE(X_MAX); - #endif - #if HAS_X2_MIN - endstopx2_sta = !ESTATE(X2_MIN); - #elif HAS_X2_MAX - endstopx2_sta = !ESTATE(X2_MAX); - #endif - #if HAS_Y_MIN - endstopy1_sta = !ESTATE(Y_MIN); - #elif HAS_Y_MAX - endstopy1_sta = !ESTATE(Y_MAX); - #endif - #if HAS_Y2_MIN - endstopy2_sta = !ESTATE(Y2_MIN); - #elif HAS_Y2_MAX - endstopy2_sta = !ESTATE(Y2_MAX); - #endif - #if HAS_Z_MIN - endstopz1_sta = !ESTATE(Z_MIN); - #elif HAS_Z_MAX - endstopz1_sta = !ESTATE(Z_MAX); - #endif - #if HAS_Z2_MIN - endstopz2_sta = !ESTATE(Z2_MIN); - #elif HAS_Z2_MAX - endstopz2_sta = !ESTATE(Z2_MAX); - #endif + TERN_(HAS_X_ENDSTOP, endstopx1_sta = !ESTATE(TERN(HAS_X_MIN, X_MIN, X_MAX))); + TERN_(HAS_X2_ENDSTOP, endstopx2_sta = !ESTATE(TERN(HAS_X2_MIN, X2_MIN, X2_MAX))); + TERN_(HAS_Y_ENDSTOP, endstopy1_sta = !ESTATE(TERN(HAS_Y_MIN, Y_MIN, Y_MAX))); + TERN_(HAS_Y2_ENDSTOP, endstopy2_sta = !ESTATE(TERN(HAS_Y2_MIN, Y2_MIN, Y2_MAX))); + TERN_(HAS_Z_ENDSTOP, endstopz1_sta = !ESTATE(TERN(HAS_Z_MIN_PIN, Z_MIN, Z_MAX))); + TERN_(HAS_Z2_ENDSTOP, endstopz2_sta = !ESTATE(TERN(HAS_Z2_MIN, Z2_MIN, Z2_MAX))); } #include "../../../libs/buzzer.h" @@ -178,7 +130,9 @@ SET_INPUT_PULLUP(MKS_TEST_PS_ON_PIN); SET_INPUT_PULLUP(SERVO0_PIN); - OUT_WRITE(X_ENABLE_PIN, LOW); + #if HAS_X_AXIS + OUT_WRITE(X_ENABLE_PIN, LOW); + #endif #if HAS_Y_AXIS OUT_WRITE(Y_ENABLE_PIN, LOW); #endif @@ -205,7 +159,7 @@ void mks_test_beeper() { buzzer.click(100); } - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA void mks_gpio_test() { init_test_gpio(); @@ -723,7 +677,7 @@ void disp_assets_update_progress(FSTR_P const fmsg) { #endif } -#if BOTH(MKS_TEST, SDSUPPORT) +#if BOTH(MKS_TEST, HAS_MEDIA) uint8_t mks_test_flag = 0; const char *MKSTestPath = "MKS_TEST"; void mks_test_get() { diff --git a/Marlin/src/lcd/extui/mks_ui/mks_hardware.h b/Marlin/src/lcd/extui/mks_ui/mks_hardware.h index c0cdacd963f4..6a2574e3b0ce 100644 --- a/Marlin/src/lcd/extui/mks_ui/mks_hardware.h +++ b/Marlin/src/lcd/extui/mks_ui/mks_hardware.h @@ -26,7 +26,7 @@ #include // Functions for MKS_TEST -#if BOTH(MKS_TEST, SDSUPPORT) +#if BOTH(MKS_TEST, HAS_MEDIA) void mks_hardware_test(); void mks_test_get(); void mks_gpio_test(); diff --git a/Marlin/src/lcd/extui/mks_ui/pic_manager.cpp b/Marlin/src/lcd/extui/mks_ui/pic_manager.cpp index d642d81f6baa..6e39c9a36e8f 100644 --- a/Marlin/src/lcd/extui/mks_ui/pic_manager.cpp +++ b/Marlin/src/lcd/extui/mks_ui/pic_manager.cpp @@ -24,7 +24,6 @@ #if HAS_TFT_LVGL_UI -#include "string.h" #include "draw_ui.h" #include "pic_manager.h" #include "draw_ready_print.h" @@ -34,9 +33,11 @@ #include "../../../sd/cardreader.h" #include "../../../MarlinCore.h" +#include + extern uint16_t DeviceCode; -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA extern char *createFilename(char * const buffer, const dir_t &p); #endif @@ -374,7 +375,7 @@ uint32_t Pic_Info_Write(uint8_t *P_name, uint32_t P_size) { return Pic_SaveAddr; } -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA static void dosName2LongName(const char dosName[11], char *longName) { uint8_t j = 0; @@ -547,7 +548,7 @@ uint32_t Pic_Info_Write(uint8_t *P_name, uint32_t P_size) { void spi_flash_read_test() { W25QXX.SPI_FLASH_BufferRead(public_buf, UNIGBK_FLASH_ADDR, BMP_WRITE_BUF_LEN); } #endif -#endif // SDSUPPORT +#endif // HAS_MEDIA void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff) { uint8_t i, j; diff --git a/Marlin/src/lcd/extui/mks_ui/printer_operation.cpp b/Marlin/src/lcd/extui/mks_ui/printer_operation.cpp index 8f5b89cf347c..26979af2703f 100644 --- a/Marlin/src/lcd/extui/mks_ui/printer_operation.cpp +++ b/Marlin/src/lcd/extui/mks_ui/printer_operation.cpp @@ -45,7 +45,7 @@ extern bool flash_preview_begin, default_preview_flg, gcode_preview_over; void printer_state_polling() { char str_1[16]; if (uiCfg.print_state == PAUSING) { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (!planner.has_blocks_queued() && card.getIndex() > MIN_FILE_PRINTED) uiCfg.waitEndMoves++; diff --git a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp index 08db5ae7ad56..94c3517e3a92 100644 --- a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp +++ b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp @@ -36,10 +36,11 @@ #include #include "../../../MarlinCore.h" +#include "../../marlinui.h" + #include "../../../inc/MarlinConfig.h" -#include HAL_PATH(../../../HAL, tft/xpt2046.h) -#include "../../marlinui.h" +#include HAL_PATH(../../.., tft/xpt2046.h) XPT2046 touch; #if ENABLED(POWER_LOSS_RECOVERY) @@ -78,7 +79,7 @@ XPT2046 touch; static lv_disp_buf_t disp_buf; lv_group_t* g; -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA void UpdateAssets(); #endif uint16_t DeviceCode = 0x9488; @@ -153,7 +154,7 @@ void tft_lvgl_init() { hal.watchdog_refresh(); // LVGL init takes time - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA UpdateAssets(); hal.watchdog_refresh(); // LVGL init takes time TERN_(MKS_TEST, mks_test_get()); @@ -246,7 +247,7 @@ void tft_lvgl_init() { if (ready) lv_draw_ready_print(); - #if BOTH(MKS_TEST, SDSUPPORT) + #if BOTH(MKS_TEST, HAS_MEDIA) if (mks_test_flag == 0x1E) mks_gpio_test(); #endif } diff --git a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.h b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.h index 0368140b2858..a71bdc9db766 100644 --- a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.h +++ b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.h @@ -32,8 +32,6 @@ #include -//#define TFT_ROTATION TFT_ROTATE_180 - extern uint8_t bmp_public_buf[14 * 1024]; extern uint8_t public_buf[513]; diff --git a/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp b/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp index d6d2ce3945dc..bf399f70aad4 100644 --- a/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp +++ b/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp @@ -135,7 +135,7 @@ void wifi_reset() { void mount_file_sys(const uint8_t disk_type) { switch (disk_type) { - case FILE_SYS_SD: TERN_(SDSUPPORT, card.mount()); break; + case FILE_SYS_SD: TERN_(HAS_MEDIA, card.mount()); break; case FILE_SYS_USB: break; } } @@ -718,7 +718,7 @@ void get_file_list(const char * const path, const bool with_longnames) { if (!path) return; if (gCfgItems.fileSysType == FILE_SYS_SD) { - TERN_(SDSUPPORT, card.mount()); + TERN_(HAS_MEDIA, card.mount()); } else if (gCfgItems.fileSysType == FILE_SYS_USB) { // udisk @@ -993,7 +993,7 @@ static void wifi_gcode_exec(uint8_t * const cmd_line) { uiCfg.print_state = WORKING; lv_draw_printing(); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (!gcode_preview_over) { char *cur_name = strrchr(list_file.file_name[sel_id], '/'); @@ -1058,7 +1058,7 @@ static void wifi_gcode_exec(uint8_t * const cmd_line) { clear_cur_ui(); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA card.pauseSDPrint(); uiCfg.print_state = PAUSING; #endif @@ -1077,7 +1077,7 @@ static void wifi_gcode_exec(uint8_t * const cmd_line) { stop_print_time(); clear_cur_ui(); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA uiCfg.print_state = IDLE; card.abortFilePrintSoon(); #endif @@ -1118,7 +1118,7 @@ static void wifi_gcode_exec(uint8_t * const cmd_line) { } mount_file_sys(gCfgItems.fileSysType); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA char *cur_name = strrchr(list_file.file_name[sel_id], '/'); card.openFileWrite(cur_name); if (card.isFileOpen()) { @@ -1529,7 +1529,7 @@ static void file_first_msg_handle(const uint8_t * const msg, const uint16_t msgL ZERO(saveFilePath); if (gCfgItems.fileSysType == FILE_SYS_SD) { - TERN_(SDSUPPORT, card.mount()); + TERN_(HAS_MEDIA, card.mount()); } else if (gCfgItems.fileSysType == FILE_SYS_USB) { // nothing @@ -1541,11 +1541,11 @@ static void file_first_msg_handle(const uint8_t * const msg, const uint16_t msgL wifiTransError.start_tick = 0; wifiTransError.now_tick = 0; - TERN_(SDSUPPORT, card.closefile()); + TERN_(HAS_MEDIA, card.closefile()); wifi_delay(1000); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA char dosName[FILENAME_LENGTH]; @@ -1574,7 +1574,7 @@ static void file_first_msg_handle(const uint8_t * const msg, const uint16_t msgL return; } - #endif // SDSUPPORT + #endif // HAS_MEDIA wifi_link_state = WIFI_TRANS_FILE; @@ -1774,7 +1774,7 @@ void stopEspTransfer() { if (wifi_link_state == WIFI_TRANS_FILE) wifi_link_state = WIFI_CONNECTED; - TERN_(SDSUPPORT, card.closefile()); + TERN_(HAS_MEDIA, card.closefile()); if (upload_result != 3) { wifiTransError.flag = 1; @@ -1804,6 +1804,7 @@ void stopEspTransfer() { W25QXX.init(SPI_QUARTER_SPEED); + // ?? Workaround for SPI / Servo issues ?? TERN_(HAS_TFT_LVGL_UI_SPI, SPI_TFT.spi_init(SPI_FULL_SPEED)); TERN_(HAS_SERVOS, servo_init()); TERN_(HAS_Z_SERVO_PROBE, probe.servo_probe_init()); diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index 2b1f05d2bcd5..a742a82a5b96 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -1082,14 +1082,14 @@ namespace ExtUI { #endif void printFile(const char *filename) { - TERN(SDSUPPORT, card.openAndPrintFile(filename), UNUSED(filename)); + TERN(HAS_MEDIA, card.openAndPrintFile(filename), UNUSED(filename)); } bool isPrintingFromMediaPaused() { - return TERN0(SDSUPPORT, IS_SD_PAUSED()); + return TERN0(HAS_MEDIA, IS_SD_PAUSED()); } - bool isPrintingFromMedia() { return TERN0(SDSUPPORT, IS_SD_PRINTING() || IS_SD_PAUSED()); } + bool isPrintingFromMedia() { return TERN0(HAS_MEDIA, IS_SD_PRINTING() || IS_SD_PAUSED()); } bool isPrinting() { return commandsInQueue() || isPrintingFromMedia() || printJobOngoing() || printingIsPaused(); @@ -1099,7 +1099,7 @@ namespace ExtUI { return isPrinting() && (isPrintingFromMediaPaused() || print_job_timer.isPaused()); } - bool isMediaInserted() { return TERN0(SDSUPPORT, IS_SD_INSERTED()); } + bool isMediaInserted() { return TERN0(HAS_MEDIA, IS_SD_INSERTED()); } void pausePrint() { ui.pause_print(); } void resumePrint() { ui.resume_print(); } @@ -1138,7 +1138,7 @@ namespace ExtUI { void FileList::refresh() { } bool FileList::seek(const uint16_t pos, const bool skip_range_check) { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (!skip_range_check && (pos + 1) > count()) return false; card.selectFileByIndexSorted(pos); return card.filename[0] != '\0'; @@ -1150,35 +1150,35 @@ namespace ExtUI { } const char* FileList::filename() { - return TERN(SDSUPPORT, card.longest_filename(), ""); + return TERN(HAS_MEDIA, card.longest_filename(), ""); } const char* FileList::shortFilename() { - return TERN(SDSUPPORT, card.filename, ""); + return TERN(HAS_MEDIA, card.filename, ""); } const char* FileList::longFilename() { - return TERN(SDSUPPORT, card.longFilename, ""); + return TERN(HAS_MEDIA, card.longFilename, ""); } bool FileList::isDir() { - return TERN0(SDSUPPORT, card.flag.filenameIsDir); + return TERN0(HAS_MEDIA, card.flag.filenameIsDir); } uint16_t FileList::count() { - return TERN0(SDSUPPORT, card.get_num_items()); + return TERN0(HAS_MEDIA, card.get_num_items()); } bool FileList::isAtRootDir() { - return TERN1(SDSUPPORT, card.flag.workDirIsRoot); + return TERN1(HAS_MEDIA, card.flag.workDirIsRoot); } void FileList::upDir() { - TERN_(SDSUPPORT, card.cdup()); + TERN_(HAS_MEDIA, card.cdup()); } void FileList::changeDir(const char * const dirname) { - TERN(SDSUPPORT, card.cd(dirname), UNUSED(dirname)); + TERN(HAS_MEDIA, card.cd(dirname), UNUSED(dirname)); } } // namespace ExtUI diff --git a/Marlin/src/lcd/language/language_cz.h b/Marlin/src/lcd/language/language_cz.h index d06c5554fde3..1f697f8d5a25 100644 --- a/Marlin/src/lcd/language/language_cz.h +++ b/Marlin/src/lcd/language/language_cz.h @@ -334,7 +334,7 @@ namespace Language_cz { LSTR MSG_STOP_PRINT = _UxGT("Zastavit tisk"); LSTR MSG_PRINTING_OBJECT = _UxGT("Tisk objektu"); LSTR MSG_CANCEL_OBJECT = _UxGT("Zrušit objekt"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Zrušit objekt ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Zrušit objekt {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Obnova výpadku"); LSTR MSG_MEDIA_MENU = _UxGT("Tisknout z SD"); LSTR MSG_NO_MEDIA = _UxGT("Žádná SD karta"); @@ -512,7 +512,7 @@ namespace Language_cz { LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Vytáhněte, klikněte"); LSTR MSG_MIX = _UxGT("Mix"); - LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponenta ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponenta {"); LSTR MSG_MIXER = _UxGT("Mixér"); LSTR MSG_GRADIENT = _UxGT("Přechod"); LSTR MSG_FULL_GRADIENT = _UxGT("Celý přechod"); diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h index 4313a80490ca..534d49ade9e9 100644 --- a/Marlin/src/lcd/language/language_de.h +++ b/Marlin/src/lcd/language/language_de.h @@ -277,7 +277,7 @@ namespace Language_de { LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violett"); LSTR MSG_SET_LEDS_WHITE = _UxGT("Weiß"); LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Standard"); - LSTR MSG_LED_CHANNEL_N = _UxGT("Kanal ="); + LSTR MSG_LED_CHANNEL_N = _UxGT("Kanal {"); LSTR MSG_LEDS2 = _UxGT("Lichter #2"); LSTR MSG_NEO2_PRESETS = _UxGT("Licht #2 Voreinst."); LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Helligkeit"); @@ -461,7 +461,7 @@ namespace Language_de { LSTR MSG_END_LOOPS = _UxGT("Wiederholung beenden"); LSTR MSG_PRINTING_OBJECT = _UxGT("Objekt drucken"); LSTR MSG_CANCEL_OBJECT = _UxGT("Objekt abbrechen"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Objekt abbrechen ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Objekt abbrechen {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Wiederh. n. Stroma."); LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Druckauftrag fortset."); LSTR MSG_MEDIA_MENU = _UxGT("Druck vom Medium"); @@ -692,7 +692,7 @@ namespace Language_de { LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Entfernen, klicken"); LSTR MSG_MIX = _UxGT("Mix"); - LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponente ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponente {"); LSTR MSG_MIXER = _UxGT("Mixer"); LSTR MSG_GRADIENT = _UxGT("Gradient"); // equal Farbverlauf LSTR MSG_FULL_GRADIENT = _UxGT("Volle Gradient"); diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 244d61a712ca..0cfd2f8beaec 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -30,7 +30,7 @@ * Substitutions are applied for the following characters when used in menu items titles: * * $ displays an inserted string - * = displays '0'....'10' for indexes 0 - 10 + * { displays '0'....'10' for indexes 0 - 10 * ~ displays '1'....'11' for indexes 0 - 10 * * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL) * @ displays an axis name such as XYZUVW, or E for an extruder @@ -76,6 +76,8 @@ namespace Language_en { LSTR MSG_DISABLE_STEPPERS = _UxGT("Disable Steppers"); LSTR MSG_DEBUG_MENU = _UxGT("Debug Menu"); LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Progress Bar Test"); + LSTR MSG_ENDSTOP_TEST = _UxGT("Endstop Test"); + LSTR MSG_Z_PROBE = _UxGT("Z Probe"); LSTR MSG_HOMING = _UxGT("Homing"); LSTR MSG_AUTO_HOME = _UxGT("Auto Home"); LSTR MSG_AUTO_HOME_A = _UxGT("Home @"); @@ -296,7 +298,7 @@ namespace Language_en { LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violet"); LSTR MSG_SET_LEDS_WHITE = _UxGT("White"); LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Default"); - LSTR MSG_LED_CHANNEL_N = _UxGT("Channel ="); + LSTR MSG_LED_CHANNEL_N = _UxGT("Channel {"); LSTR MSG_LEDS2 = _UxGT("Lights #2"); LSTR MSG_NEO2_PRESETS = _UxGT("Light #2 Presets"); LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Brightness"); @@ -430,6 +432,7 @@ namespace Language_en { LSTR MSG_TEMPERATURE = _UxGT("Temperature"); LSTR MSG_MOTION = _UxGT("Motion"); LSTR MSG_FILAMENT = _UxGT("Filament"); + LSTR MSG_FILAMENT_EN = _UxGT("Filament *"); LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE; LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit in mm") SUPERSCRIPT_THREE; LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *"); @@ -502,7 +505,7 @@ namespace Language_en { LSTR MSG_HOST_START_PRINT = _UxGT("Start Host Print"); LSTR MSG_PRINTING_OBJECT = _UxGT("Printing Object"); LSTR MSG_CANCEL_OBJECT = _UxGT("Cancel Object"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancel Object ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancel Object {"); LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Continue Print Job"); LSTR MSG_MEDIA_MENU = _UxGT("Print from ") MEDIA_TYPE_EN; LSTR MSG_TURN_OFF = _UxGT("Turn off the printer"); @@ -511,7 +514,7 @@ namespace Language_en { LSTR MSG_HOST_START_PRINT = _UxGT("Host Start"); LSTR MSG_PRINTING_OBJECT = _UxGT("Print Obj"); LSTR MSG_CANCEL_OBJECT = _UxGT("Cancel Obj"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancel Obj ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancel Obj {"); LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Continue Job"); LSTR MSG_MEDIA_MENU = MEDIA_TYPE_EN _UxGT(" Print"); LSTR MSG_TURN_OFF = _UxGT("Turn off now"); @@ -754,7 +757,7 @@ namespace Language_en { LSTR MSG_MMU2_REMOVE_AND_CLICK = _UxGT("Remove and click..."); LSTR MSG_MIX = _UxGT("Mix"); - LSTR MSG_MIX_COMPONENT_N = _UxGT("Component ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Component {"); LSTR MSG_MIXER = _UxGT("Mixer"); LSTR MSG_GRADIENT = _UxGT("Gradient"); LSTR MSG_FULL_GRADIENT = _UxGT("Full Gradient"); diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h index 371df360ee82..f3d6fc577d51 100644 --- a/Marlin/src/lcd/language/language_es.h +++ b/Marlin/src/lcd/language/language_es.h @@ -338,7 +338,7 @@ namespace Language_es { LSTR MSG_STOP_PRINT = _UxGT("Detener impresión"); LSTR MSG_PRINTING_OBJECT = _UxGT("Imprimiendo Objeto"); LSTR MSG_CANCEL_OBJECT = _UxGT("Cancelar Objeto"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Objeto ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Objeto {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Rec. Fallo electrico"); LSTR MSG_MEDIA_MENU = _UxGT("Imprim. desde SD/FD"); LSTR MSG_NO_MEDIA = _UxGT("SD/FD no presente"); @@ -510,7 +510,7 @@ namespace Language_es { LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Retirar, y pulsar"); LSTR MSG_MIX = _UxGT("Mezcla"); - LSTR MSG_MIX_COMPONENT_N = _UxGT("Componente ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Componente {"); LSTR MSG_MIXER = _UxGT("Miezclador"); LSTR MSG_GRADIENT = _UxGT("Degradado"); LSTR MSG_FULL_GRADIENT = _UxGT("Degradado Total"); diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h index f7eec7f5cea6..01422f5c76e7 100644 --- a/Marlin/src/lcd/language/language_fr.h +++ b/Marlin/src/lcd/language/language_fr.h @@ -353,7 +353,7 @@ namespace Language_fr { LSTR MSG_STOP_PRINT = _UxGT("Arrêter impr."); LSTR MSG_PRINTING_OBJECT = _UxGT("Impression objet"); LSTR MSG_CANCEL_OBJECT = _UxGT("Annuler objet"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Annuler objet ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Annuler objet {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Récup. coup."); LSTR MSG_MEDIA_MENU = _UxGT("Impression SD"); LSTR MSG_NO_MEDIA = _UxGT("Pas de média"); @@ -540,7 +540,7 @@ namespace Language_fr { LSTR MSG_MMU2_RESETTING = _UxGT("Réinit. MMU..."); LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Retrait, click"); - LSTR MSG_MIX_COMPONENT_N = _UxGT("Composante ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Composante {"); LSTR MSG_MIXER = _UxGT("Mixeur"); LSTR MSG_GRADIENT = _UxGT("Dégradé"); LSTR MSG_FULL_GRADIENT = _UxGT("Dégradé complet"); diff --git a/Marlin/src/lcd/language/language_fr_na.h b/Marlin/src/lcd/language/language_fr_na.h index 9300b299eba3..12fa0295eaa0 100644 --- a/Marlin/src/lcd/language/language_fr_na.h +++ b/Marlin/src/lcd/language/language_fr_na.h @@ -353,7 +353,7 @@ namespace Language_fr_na { LSTR MSG_STOP_PRINT = _UxGT("Arreter impr."); LSTR MSG_PRINTING_OBJECT = _UxGT("Impression objet"); LSTR MSG_CANCEL_OBJECT = _UxGT("Annuler objet"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Annuler objet ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Annuler objet {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Recup. coup."); LSTR MSG_MEDIA_MENU = _UxGT("Impression SD"); LSTR MSG_NO_MEDIA = _UxGT("Pas de media"); @@ -543,7 +543,7 @@ namespace Language_fr_na { LSTR MSG_MMU2_RESETTING = _UxGT("Reinit. MMU..."); LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Retrait, click"); - LSTR MSG_MIX_COMPONENT_N = _UxGT("Composante ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Composante {"); LSTR MSG_MIXER = _UxGT("Mixeur"); LSTR MSG_GRADIENT = _UxGT("Degrade"); LSTR MSG_FULL_GRADIENT = _UxGT("Degrade complet"); diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h index da8a7047c776..83855dd56d8a 100644 --- a/Marlin/src/lcd/language/language_gl.h +++ b/Marlin/src/lcd/language/language_gl.h @@ -22,7 +22,7 @@ #pragma once /** - * Galician language (ISO "gl") + * Galician language * * LCD Menu Messages * See also https://marlinfw.org/docs/development/lcd_language.html @@ -342,7 +342,7 @@ namespace Language_gl { LSTR MSG_STOP_PRINT = _UxGT("Deter impresión"); LSTR MSG_PRINTING_OBJECT = _UxGT("Imprimindo Obxecto"); LSTR MSG_CANCEL_OBJECT = _UxGT("Cancelar Obxecto"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Obxecto ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Obxecto {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Recuperar Impresión"); LSTR MSG_MEDIA_MENU = _UxGT("Tarxeta SD"); LSTR MSG_NO_MEDIA = _UxGT("Sen tarxeta SD"); @@ -525,7 +525,7 @@ namespace Language_gl { LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Expulsar, premer"); LSTR MSG_MIX = _UxGT("Mestura"); - LSTR MSG_MIX_COMPONENT_N = _UxGT("Compoñente ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Compoñente {"); LSTR MSG_MIXER = _UxGT("Mesturadora"); LSTR MSG_GRADIENT = _UxGT("Degradado"); LSTR MSG_FULL_GRADIENT = _UxGT("Degradado Total"); diff --git a/Marlin/src/lcd/language/language_hu.h b/Marlin/src/lcd/language/language_hu.h index 471f2ee8cb5b..99062ca5c342 100644 --- a/Marlin/src/lcd/language/language_hu.h +++ b/Marlin/src/lcd/language/language_hu.h @@ -240,7 +240,7 @@ namespace Language_hu { LSTR MSG_SET_LEDS_VIOLET = _UxGT("Viola"); LSTR MSG_SET_LEDS_WHITE = _UxGT("Fehér"); LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Alapérték"); - LSTR MSG_LED_CHANNEL_N = _UxGT("Csatorna ="); + LSTR MSG_LED_CHANNEL_N = _UxGT("Csatorna {"); LSTR MSG_LEDS2 = _UxGT("LED-ek #2"); LSTR MSG_NEO2_PRESETS = _UxGT("Fény #2 megadott"); LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Fényerö"); @@ -284,10 +284,10 @@ namespace Language_hu { LSTR MSG_FLOWMETER_SAFETY = _UxGT("Áramlásbiztonság"); LSTR MSG_LASER = _UxGT("Lézer"); LSTR MSG_FAN_SPEED = _UxGT("Hütés sebesség"); - LSTR MSG_FAN_SPEED_N = _UxGT("Hütés sebesség ="); - LSTR MSG_STORED_FAN_N = _UxGT("Tárolt hütés ="); + LSTR MSG_FAN_SPEED_N = _UxGT("Hütés sebesség {"); + LSTR MSG_STORED_FAN_N = _UxGT("Tárolt hütés {"); LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra hütés sebesség"); - LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra hütés sebesség ="); + LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra hütés sebesség {"); LSTR MSG_CONTROLLER_FAN = _UxGT("Hütésvezérlés"); LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Alapjárat"); LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Automatikus mód"); @@ -396,7 +396,7 @@ namespace Language_hu { LSTR MSG_END_LOOPS = _UxGT("Hurok ismétlés vége"); LSTR MSG_PRINTING_OBJECT = _UxGT("Objektum nyomtatása"); LSTR MSG_CANCEL_OBJECT = _UxGT("Objektum törlése"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Objektum törlése ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Objektum törlése {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Kiesés helyreáll."); LSTR MSG_MEDIA_MENU = _UxGT("Nyomtatás tárolóról"); LSTR MSG_NO_MEDIA = _UxGT("Nincs tároló"); @@ -587,7 +587,7 @@ namespace Language_hu { LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Kidob, kattint"); LSTR MSG_MIX = _UxGT("Kever"); - LSTR MSG_MIX_COMPONENT_N = _UxGT("Összetevö ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Összetevö {"); LSTR MSG_MIXER = _UxGT("Keverö"); LSTR MSG_GRADIENT = _UxGT("Színátm."); LSTR MSG_FULL_GRADIENT = _UxGT("Teljes színátm."); diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index 4bc7c0303a3e..bd0d2f22576a 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -30,7 +30,7 @@ * Substitutions are applied for the following characters when used in menu items titles: * * $ displays an inserted string - * = displays '0'....'10' for indexes 0 - 10 + * { displays '0'....'10' for indexes 0 - 10 * ~ displays '1'....'11' for indexes 0 - 10 * * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL) * @ displays an axis name such as XYZUVW, or E for an extruder @@ -293,7 +293,7 @@ namespace Language_it { LSTR MSG_SET_LEDS_VIOLET = _UxGT("Viola"); LSTR MSG_SET_LEDS_WHITE = _UxGT("Bianco"); LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Predefinito"); - LSTR MSG_LED_CHANNEL_N = _UxGT("Canale ="); + LSTR MSG_LED_CHANNEL_N = _UxGT("Canale {"); LSTR MSG_LEDS2 = _UxGT("Luci #2"); LSTR MSG_NEO2_PRESETS = _UxGT("Presets luce #2"); LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Luminosità"); @@ -498,7 +498,7 @@ namespace Language_it { LSTR MSG_END_LOOPS = _UxGT("Fine cicli di rip."); LSTR MSG_PRINTING_OBJECT = _UxGT("Stampa Oggetto"); LSTR MSG_CANCEL_OBJECT = _UxGT("Cancella Oggetto"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Canc. Oggetto ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Canc. Oggetto {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Ripresa da PowerLoss"); LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Cont.proc.stampa"); LSTR MSG_MEDIA_MENU = _UxGT("Stampa da media"); @@ -734,7 +734,7 @@ namespace Language_it { LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Rimuovi, click"); LSTR MSG_MIX = _UxGT("Miscela"); - LSTR MSG_MIX_COMPONENT_N = _UxGT("Componente ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Componente {"); LSTR MSG_MIXER = _UxGT("Miscelatore"); LSTR MSG_GRADIENT = _UxGT("Gradiente"); LSTR MSG_FULL_GRADIENT = _UxGT("Gradiente pieno"); diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h index 5bf488494185..855a1e3bd167 100644 --- a/Marlin/src/lcd/language/language_pl.h +++ b/Marlin/src/lcd/language/language_pl.h @@ -30,7 +30,7 @@ * Substitutions are applied for the following characters when used in menu items titles: * * $ displays an inserted string - * = displays '0'....'10' for indexes 0 - 10 + * { displays '0'....'10' for indexes 0 - 10 * ~ displays '1'....'11' for indexes 0 - 10 * * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL) * @ displays an axis name such as XYZUVW, or E for an extruder @@ -221,7 +221,7 @@ namespace Language_pl { LSTR MSG_SET_LEDS_VIOLET = _UxGT("Fioletowy"); LSTR MSG_SET_LEDS_WHITE = _UxGT("Biały"); LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Domyślny"); - LSTR MSG_LED_CHANNEL_N = _UxGT("Kanał ="); + LSTR MSG_LED_CHANNEL_N = _UxGT("Kanał {"); LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Jasność"); LSTR MSG_CUSTOM_LEDS = _UxGT("Własne światła"); LSTR MSG_INTENSITY_R = _UxGT("Czerwony"); @@ -330,7 +330,7 @@ namespace Language_pl { LSTR MSG_STOP_PRINT = _UxGT("Stop"); LSTR MSG_PRINTING_OBJECT = _UxGT("Drukowanie obiektu"); LSTR MSG_CANCEL_OBJECT = _UxGT("Anunuj obiekt"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Anunuj obiekt ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Anunuj obiekt {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Odzyskiwanie po awarii"); LSTR MSG_MEDIA_MENU = _UxGT("Karta SD"); LSTR MSG_NO_MEDIA = _UxGT("Brak karty"); @@ -474,7 +474,7 @@ namespace Language_pl { LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Usuń, kliknij"); LSTR MSG_MIX = _UxGT("Miks"); - LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponent ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponent {"); LSTR MSG_MIXER = _UxGT("Mikser"); LSTR MSG_FULL_GRADIENT = _UxGT("Pełny gradient"); LSTR MSG_TOGGLE_MIX = _UxGT("Przełacz miks"); diff --git a/Marlin/src/lcd/language/language_pt_br.h b/Marlin/src/lcd/language/language_pt_br.h index c17ca124ed7b..4ace61e11691 100644 --- a/Marlin/src/lcd/language/language_pt_br.h +++ b/Marlin/src/lcd/language/language_pt_br.h @@ -293,7 +293,7 @@ namespace Language_pt_br { LSTR MSG_STOP_PRINT = _UxGT("Parar impressão"); LSTR MSG_PRINTING_OBJECT = _UxGT("Imprimindo objeto"); LSTR MSG_CANCEL_OBJECT = _UxGT("Cancelar Objeto"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Objeto ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Objeto {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Recuperar Impressão"); LSTR MSG_MEDIA_MENU = _UxGT("Imprimir do SD"); LSTR MSG_NO_MEDIA = _UxGT("Sem cartão SD"); diff --git a/Marlin/src/lcd/language/language_ro.h b/Marlin/src/lcd/language/language_ro.h index bdb9f226a9f2..327ba7ad814a 100644 --- a/Marlin/src/lcd/language/language_ro.h +++ b/Marlin/src/lcd/language/language_ro.h @@ -348,7 +348,7 @@ namespace Language_ro { LSTR MSG_STOP_PRINT = _UxGT("Stop Print"); LSTR MSG_PRINTING_OBJECT = _UxGT("Printing Object"); LSTR MSG_CANCEL_OBJECT = _UxGT("Cancel Object"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancel Object ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancel Object {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Outage Recovery"); LSTR MSG_MEDIA_MENU = _UxGT("Print from Media"); LSTR MSG_NO_MEDIA = _UxGT("No Media"); @@ -532,7 +532,7 @@ namespace Language_ro { LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Remove, click"); LSTR MSG_MIX = _UxGT("Mix"); - LSTR MSG_MIX_COMPONENT_N = _UxGT("Component ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Component {"); LSTR MSG_MIXER = _UxGT("Mixer"); LSTR MSG_GRADIENT = _UxGT("Gradient"); LSTR MSG_FULL_GRADIENT = _UxGT("Full Gradient"); diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h index 6dd773f77b3c..b5815be1bd2e 100644 --- a/Marlin/src/lcd/language/language_ru.h +++ b/Marlin/src/lcd/language/language_ru.h @@ -310,7 +310,7 @@ namespace Language_ru { LSTR MSG_SET_LEDS_VIOLET = _UxGT("Фиолетовый"); LSTR MSG_SET_LEDS_WHITE = _UxGT("Белый"); LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Свет по умолчанию"); - LSTR MSG_LED_CHANNEL_N = _UxGT("Канал ="); + LSTR MSG_LED_CHANNEL_N = _UxGT("Канал {"); LSTR MSG_LEDS2 = _UxGT("Свет #2"); #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_NEO2_PRESETS = _UxGT("Свет #2 предустановки"); @@ -485,7 +485,7 @@ namespace Language_ru { LSTR MSG_STOP_PRINT = _UxGT("Остановить печать"); LSTR MSG_PRINTING_OBJECT = _UxGT("Печать объекта"); LSTR MSG_CANCEL_OBJECT = _UxGT("Завершить объект"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Завершить объект ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Завершить объект {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Восстановение сбоя"); LSTR MSG_MEDIA_MENU = _UxGT("Печать с SD карты"); LSTR MSG_NO_MEDIA = _UxGT("Нет SD карты"); @@ -734,7 +734,7 @@ namespace Language_ru { #else LSTR MSG_MIX = _UxGT("Смешив."); #endif - LSTR MSG_MIX_COMPONENT_N = _UxGT("Компонент ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Компонент {"); LSTR MSG_MIXER = _UxGT("Смеситель"); LSTR MSG_GRADIENT = _UxGT("Градиент"); LSTR MSG_FULL_GRADIENT = _UxGT("Полный градиент"); diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h index c78029048b67..907b865bd9e6 100644 --- a/Marlin/src/lcd/language/language_sk.h +++ b/Marlin/src/lcd/language/language_sk.h @@ -34,7 +34,7 @@ * Substitutions are applied for the following characters when used in menu items titles: * * $ displays an inserted string - * = displays '0'....'10' for indexes 0 - 10 + * { displays '0'....'10' for indexes 0 - 10 * ~ displays '1'....'11' for indexes 0 - 10 * * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL) * @ displays an axis name such as XYZUVW, or E for an extruder @@ -294,7 +294,7 @@ namespace Language_sk { LSTR MSG_SET_LEDS_VIOLET = _UxGT("Fialová"); LSTR MSG_SET_LEDS_WHITE = _UxGT("Biela"); LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Obnoviť nastavenie"); - LSTR MSG_LED_CHANNEL_N = _UxGT("Kanál ="); + LSTR MSG_LED_CHANNEL_N = _UxGT("Kanál {"); LSTR MSG_LEDS2 = _UxGT("Svetlo #2"); LSTR MSG_NEO2_PRESETS = _UxGT("Predvolby svetla #2"); LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Jas"); @@ -500,7 +500,7 @@ namespace Language_sk { LSTR MSG_HOST_START_PRINT = _UxGT("Spustiť z hosta"); LSTR MSG_PRINTING_OBJECT = _UxGT("Tlačím objekt"); LSTR MSG_CANCEL_OBJECT = _UxGT("Zrušiť objekt"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Zrušiť objekt ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Zrušiť objekt {"); LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Pokračovať v úlohe"); LSTR MSG_MEDIA_MENU = _UxGT("Vytlačiť z karty"); LSTR MSG_TURN_OFF = _UxGT("Vypnite tlačiareň"); @@ -509,7 +509,7 @@ namespace Language_sk { LSTR MSG_HOST_START_PRINT = _UxGT("Spustiť z hosta"); LSTR MSG_PRINTING_OBJECT = _UxGT("Tlačím obj."); LSTR MSG_CANCEL_OBJECT = _UxGT("Zrušiť obj."); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Zrušiť obj. ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Zrušiť obj. {"); LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Pokrač. v úlohe"); LSTR MSG_MEDIA_MENU = _UxGT("Tlač z karty"); LSTR MSG_TURN_OFF = _UxGT("Vypnit. teraz"); diff --git a/Marlin/src/lcd/language/language_sv.h b/Marlin/src/lcd/language/language_sv.h index 13ae8fcd29ca..570bc3df8dab 100644 --- a/Marlin/src/lcd/language/language_sv.h +++ b/Marlin/src/lcd/language/language_sv.h @@ -233,7 +233,7 @@ namespace Language_sv { LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violet"); LSTR MSG_SET_LEDS_WHITE = _UxGT("Vitt"); LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Standard"); - LSTR MSG_LED_CHANNEL_N = _UxGT("Kanal ="); + LSTR MSG_LED_CHANNEL_N = _UxGT("Kanal {"); LSTR MSG_LEDS2 = _UxGT("Ljus #2"); LSTR MSG_NEO2_PRESETS = _UxGT("Ljus #2 Förinställd"); LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Ljusstyrka"); @@ -381,7 +381,7 @@ namespace Language_sv { LSTR MSG_END_LOOPS = _UxGT("Slut Upprepningsloop"); LSTR MSG_PRINTING_OBJECT = _UxGT("Skriver Objekt"); LSTR MSG_CANCEL_OBJECT = _UxGT("Avbryt Objekt"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Avbryt Objekt ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Avbryt Objekt {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Ström Avbrott"); LSTR MSG_MEDIA_MENU = _UxGT("Skriv fråm Media"); LSTR MSG_NO_MEDIA = _UxGT("Inget Media"); @@ -569,7 +569,7 @@ namespace Language_sv { LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Ta bort, Klicka"); LSTR MSG_MIX = _UxGT("Mixa"); - LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponent ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponent {"); LSTR MSG_MIXER = _UxGT("Mixer"); LSTR MSG_GRADIENT = _UxGT("Gradient"); LSTR MSG_FULL_GRADIENT = _UxGT("Full Gradient"); diff --git a/Marlin/src/lcd/language/language_tr.h b/Marlin/src/lcd/language/language_tr.h index 414d545927e4..105413723032 100644 --- a/Marlin/src/lcd/language/language_tr.h +++ b/Marlin/src/lcd/language/language_tr.h @@ -280,7 +280,7 @@ namespace Language_tr { LSTR MSG_SET_LEDS_VIOLET = _UxGT("Menekşe"); LSTR MSG_SET_LEDS_WHITE = _UxGT("Beyaz"); LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Varsayılan"); - LSTR MSG_LED_CHANNEL_N = _UxGT("Kanal ="); + LSTR MSG_LED_CHANNEL_N = _UxGT("Kanal {"); LSTR MSG_LEDS2 = _UxGT("Işıklar #2"); LSTR MSG_NEO2_PRESETS = _UxGT("Işık #2 Ön Ayarları"); LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Parlaklık"); @@ -479,7 +479,7 @@ namespace Language_tr { LSTR MSG_HOST_START_PRINT = _UxGT("Host Baskıyı başlat"); LSTR MSG_PRINTING_OBJECT = _UxGT("Yazdırma Nesnesi"); LSTR MSG_CANCEL_OBJECT = _UxGT("Nesneyi İptal Et"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Nesneyi İptal Et ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Nesneyi İptal Et {"); LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Yazdırmaya Devam Et"); LSTR MSG_MEDIA_MENU = _UxGT("SD Karttan Yazdır"); LSTR MSG_TURN_OFF = _UxGT("Yazıcıyı kapat"); @@ -488,7 +488,7 @@ namespace Language_tr { LSTR MSG_HOST_START_PRINT = _UxGT("Host Başlatma"); LSTR MSG_PRINTING_OBJECT = _UxGT("Nesneyi Yazdır"); LSTR MSG_CANCEL_OBJECT = _UxGT("Nesneyi İptal Et"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Nesneyi İptal Et ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Nesneyi İptal Et {"); LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("İşe Devam Et"); LSTR MSG_MEDIA_MENU = MEDIA_TYPE_EN _UxGT(" Yazdır"); LSTR MSG_TURN_OFF = _UxGT("Şimdi kapat"); @@ -720,7 +720,7 @@ namespace Language_tr { LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Kaldır, tıkla"); LSTR MSG_MIX = _UxGT("Karışım"); - LSTR MSG_MIX_COMPONENT_N = _UxGT("Bileşen ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Bileşen {"); LSTR MSG_MIXER = _UxGT("Karıştırıcı"); LSTR MSG_GRADIENT = _UxGT("Gradyan"); LSTR MSG_FULL_GRADIENT = _UxGT("Tam Gradyan"); diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h index 7bdd896a33d7..4ee32fe4bc6a 100644 --- a/Marlin/src/lcd/language/language_uk.h +++ b/Marlin/src/lcd/language/language_uk.h @@ -313,7 +313,7 @@ namespace Language_uk { LSTR MSG_SET_LEDS_VIOLET = _UxGT("Фіолетовий"); LSTR MSG_SET_LEDS_WHITE = _UxGT("Білий"); LSTR MSG_SET_LEDS_DEFAULT = _UxGT("За умовчанням"); - LSTR MSG_LED_CHANNEL_N = _UxGT("Канал ="); + LSTR MSG_LED_CHANNEL_N = _UxGT("Канал {"); LSTR MSG_LEDS2 = _UxGT("Світло #2"); #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_NEO2_PRESETS = _UxGT("Передустановка світла #2"); @@ -507,7 +507,7 @@ namespace Language_uk { LSTR MSG_END_LOOPS = _UxGT("End Repeat Loops"); // needs translation LSTR MSG_PRINTING_OBJECT = _UxGT("Друк об'єкта"); LSTR MSG_CANCEL_OBJECT = _UxGT("Завершити об'єкт"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("Завершити об'єкт ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("Завершити об'єкт {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Віднов. після збою"); LSTR MSG_MEDIA_MENU = _UxGT("Друкувати з SD"); LSTR MSG_NO_MEDIA = _UxGT("SD-картки немає"); @@ -780,7 +780,7 @@ namespace Language_uk { #else LSTR MSG_MIX = _UxGT("Змішув."); #endif - LSTR MSG_MIX_COMPONENT_N = _UxGT("Компонент ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("Компонент {"); LSTR MSG_MIXER = _UxGT("Змішувач"); LSTR MSG_GRADIENT = _UxGT("Градієнт"); LSTR MSG_FULL_GRADIENT = _UxGT("Повний градієнт"); diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h index 3e8ab9870f3c..27f2a597c6df 100644 --- a/Marlin/src/lcd/language/language_zh_CN.h +++ b/Marlin/src/lcd/language/language_zh_CN.h @@ -198,27 +198,27 @@ namespace Language_zh_CN { LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. 细调所有的"); LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. 保存热床网格"); - LSTR MSG_LED_CONTROL = _UxGT("LED控制"); // "LED Control") - LSTR MSG_LEDS = _UxGT("灯"); // "Lights") - LSTR MSG_LED_PRESETS = _UxGT("灯预置"); // "Light Presets") - LSTR MSG_SET_LEDS_RED = _UxGT("红"); // "Red") - LSTR MSG_SET_LEDS_ORANGE = _UxGT("橙"); // "Orange") - LSTR MSG_SET_LEDS_YELLOW = _UxGT("黄"); // "Yellow") - LSTR MSG_SET_LEDS_GREEN = _UxGT("绿"); // "Green") - LSTR MSG_SET_LEDS_BLUE = _UxGT("蓝"); // "Blue") - LSTR MSG_SET_LEDS_INDIGO = _UxGT("青"); // "Indigo") - LSTR MSG_SET_LEDS_VIOLET = _UxGT("紫"); // "Violet") - LSTR MSG_SET_LEDS_WHITE = _UxGT("白"); // "White") - LSTR MSG_SET_LEDS_DEFAULT = _UxGT("缺省"); // "Default") - LSTR MSG_CUSTOM_LEDS = _UxGT("定制灯"); // "Custom Lights") - LSTR MSG_INTENSITY_R = _UxGT("红饱和度"); // "Red Intensity") - LSTR MSG_INTENSITY_G = _UxGT("绿饱和度"); // "Green Intensity") - LSTR MSG_INTENSITY_B = _UxGT("蓝饱和度"); // "Blue Intensity") - LSTR MSG_INTENSITY_W = _UxGT("白饱和度"); // "White Intensity") - LSTR MSG_LED_BRIGHTNESS = _UxGT("亮度"); // "Brightness") + LSTR MSG_LED_CONTROL = _UxGT("LED控制"); // "LED Control" + LSTR MSG_LEDS = _UxGT("灯"); // "Lights" + LSTR MSG_LED_PRESETS = _UxGT("灯预置"); // "Light Presets" + LSTR MSG_SET_LEDS_RED = _UxGT("红"); // "Red" + LSTR MSG_SET_LEDS_ORANGE = _UxGT("橙"); // "Orange" + LSTR MSG_SET_LEDS_YELLOW = _UxGT("黄"); // "Yellow" + LSTR MSG_SET_LEDS_GREEN = _UxGT("绿"); // "Green" + LSTR MSG_SET_LEDS_BLUE = _UxGT("蓝"); // "Blue" + LSTR MSG_SET_LEDS_INDIGO = _UxGT("青"); // "Indigo" + LSTR MSG_SET_LEDS_VIOLET = _UxGT("紫"); // "Violet" + LSTR MSG_SET_LEDS_WHITE = _UxGT("白"); // "White" + LSTR MSG_SET_LEDS_DEFAULT = _UxGT("缺省"); // "Default" + LSTR MSG_CUSTOM_LEDS = _UxGT("定制灯"); // "Custom Lights" + LSTR MSG_INTENSITY_R = _UxGT("红饱和度"); // "Red Intensity" + LSTR MSG_INTENSITY_G = _UxGT("绿饱和度"); // "Green Intensity" + LSTR MSG_INTENSITY_B = _UxGT("蓝饱和度"); // "Blue Intensity" + LSTR MSG_INTENSITY_W = _UxGT("白饱和度"); // "White Intensity" + LSTR MSG_LED_BRIGHTNESS = _UxGT("亮度"); // "Brightness" - LSTR MSG_MOVING = _UxGT("移动..."); // "Moving...") - LSTR MSG_FREE_XY = _UxGT("释放 XY"); // "Free XY") + LSTR MSG_MOVING = _UxGT("移动..."); // "Moving..." + LSTR MSG_FREE_XY = _UxGT("释放 XY"); // "Free XY" LSTR MSG_MOVE_X = _UxGT("移动X"); // "Move X" LSTR MSG_MOVE_Y = _UxGT("移动Y"); // "Move Y" LSTR MSG_MOVE_Z = _UxGT("移动Z"); // "Move Z" @@ -348,7 +348,7 @@ namespace Language_zh_CN { LSTR MSG_STOP_PRINT = _UxGT("停止打印"); // "Stop print" LSTR MSG_PRINTING_OBJECT = _UxGT("打印物体"); LSTR MSG_CANCEL_OBJECT = _UxGT("取消物体"); - LSTR MSG_CANCEL_OBJECT_N = _UxGT("取消物体 ="); + LSTR MSG_CANCEL_OBJECT_N = _UxGT("取消物体 {"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("中断恢复"); LSTR MSG_MEDIA_MENU = _UxGT("从存储卡上打印"); // "Print from SD" LSTR MSG_NO_MEDIA = _UxGT("无存储卡"); // "No SD card" @@ -532,7 +532,7 @@ namespace Language_zh_CN { LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("移出, 按下"); LSTR MSG_MIX = _UxGT("混合"); - LSTR MSG_MIX_COMPONENT_N = _UxGT("器件 ="); + LSTR MSG_MIX_COMPONENT_N = _UxGT("器件 {"); LSTR MSG_MIXER = _UxGT("混合器"); LSTR MSG_GRADIENT = _UxGT("梯度"); LSTR MSG_FULL_GRADIENT = _UxGT("全梯度"); diff --git a/Marlin/src/lcd/language/language_zh_TW.h b/Marlin/src/lcd/language/language_zh_TW.h index 5f9f0e3904af..570dc292c587 100644 --- a/Marlin/src/lcd/language/language_zh_TW.h +++ b/Marlin/src/lcd/language/language_zh_TW.h @@ -129,7 +129,7 @@ namespace Language_zh_TW { LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("啟動UBL"); // "Activate UBL" LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("關閉UBL"); // "Deactivate UBL" LSTR MSG_UBL_SET_TEMP_BED = _UxGT("置設熱床溫度"); // "Bed Temp" - LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("置設熱床溫度"); // "Bed Temp") + LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("置設熱床溫度"); // "Bed Temp" LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("置設噴嘴溫度"); // "Hotend Temp" LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("熱端溫度"); // "Hotend Temp" LSTR MSG_UBL_MESH_EDIT = _UxGT("網格編輯"); // "Mesh Edit" @@ -194,27 +194,27 @@ namespace Language_zh_TW { LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. 細調所有的"); LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. 保存熱床網格"); - LSTR MSG_LED_CONTROL = _UxGT("燈管控制"); // "LED Control") - LSTR MSG_LEDS = _UxGT("燈"); // "Lights") - LSTR MSG_LED_PRESETS = _UxGT("燈預置"); // "Light Presets") - LSTR MSG_SET_LEDS_RED = _UxGT("红"); // "Red") - LSTR MSG_SET_LEDS_ORANGE = _UxGT("橙"); // "Orange") - LSTR MSG_SET_LEDS_YELLOW = _UxGT("黃"); // "Yellow") - LSTR MSG_SET_LEDS_GREEN = _UxGT("綠"); // "Green") - LSTR MSG_SET_LEDS_BLUE = _UxGT("藍"); // "Blue") - LSTR MSG_SET_LEDS_INDIGO = _UxGT("青"); // "Indigo") - LSTR MSG_SET_LEDS_VIOLET = _UxGT("紫"); // "Violet") - LSTR MSG_SET_LEDS_WHITE = _UxGT("白"); // "White") - LSTR MSG_SET_LEDS_DEFAULT = _UxGT("復歸"); // "Default") - LSTR MSG_CUSTOM_LEDS = _UxGT("定制燈"); // "Custom Lights") - LSTR MSG_INTENSITY_R = _UxGT("紅飽和度"); // "Red Intensity") - LSTR MSG_INTENSITY_G = _UxGT("綠飽和度"); // "Green Intensity") - LSTR MSG_INTENSITY_B = _UxGT("藍飽和度"); // "Blue Intensity") - LSTR MSG_INTENSITY_W = _UxGT("白飽和度"); // "White Intensity") - LSTR MSG_LED_BRIGHTNESS = _UxGT("亮度"); // "Brightness") + LSTR MSG_LED_CONTROL = _UxGT("燈管控制"); // "LED Control" + LSTR MSG_LEDS = _UxGT("燈"); // "Lights" + LSTR MSG_LED_PRESETS = _UxGT("燈預置"); // "Light Presets" + LSTR MSG_SET_LEDS_RED = _UxGT("红"); // "Red" + LSTR MSG_SET_LEDS_ORANGE = _UxGT("橙"); // "Orange" + LSTR MSG_SET_LEDS_YELLOW = _UxGT("黃"); // "Yellow" + LSTR MSG_SET_LEDS_GREEN = _UxGT("綠"); // "Green" + LSTR MSG_SET_LEDS_BLUE = _UxGT("藍"); // "Blue" + LSTR MSG_SET_LEDS_INDIGO = _UxGT("青"); // "Indigo" + LSTR MSG_SET_LEDS_VIOLET = _UxGT("紫"); // "Violet" + LSTR MSG_SET_LEDS_WHITE = _UxGT("白"); // "White" + LSTR MSG_SET_LEDS_DEFAULT = _UxGT("復歸"); // "Default" + LSTR MSG_CUSTOM_LEDS = _UxGT("定制燈"); // "Custom Lights" + LSTR MSG_INTENSITY_R = _UxGT("紅飽和度"); // "Red Intensity" + LSTR MSG_INTENSITY_G = _UxGT("綠飽和度"); // "Green Intensity" + LSTR MSG_INTENSITY_B = _UxGT("藍飽和度"); // "Blue Intensity" + LSTR MSG_INTENSITY_W = _UxGT("白飽和度"); // "White Intensity" + LSTR MSG_LED_BRIGHTNESS = _UxGT("亮度"); // "Brightness" - LSTR MSG_MOVING = _UxGT("移動 ..."); // "Moving...") - LSTR MSG_FREE_XY = _UxGT("釋放 XY"); // "Free XY") + LSTR MSG_MOVING = _UxGT("移動 ..."); // "Moving..." + LSTR MSG_FREE_XY = _UxGT("釋放 XY"); // "Free XY" LSTR MSG_MOVE_X = _UxGT("移動X"); // "Move X" LSTR MSG_MOVE_Y = _UxGT("移動Y"); // "Move Y" LSTR MSG_MOVE_Z = _UxGT("移動Z"); // "Move Z" @@ -235,10 +235,10 @@ namespace Language_zh_TW { LSTR MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" 熱床"); // "Bed" LSTR MSG_CHAMBER = _UxGT("Enclosure"); LSTR MSG_FAN_SPEED = _UxGT("風扇速率"); // "Fan speed" - LSTR MSG_FAN_SPEED_N = _UxGT("風扇速率 ="); - LSTR MSG_STORED_FAN_N = _UxGT("Stored Fan ="); + LSTR MSG_FAN_SPEED_N = _UxGT("風扇速率 {"); + LSTR MSG_STORED_FAN_N = _UxGT("Stored Fan {"); LSTR MSG_EXTRA_FAN_SPEED = _UxGT("額外風扇速率"); // "Extra fan speed" - LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("額外風扇速率 ="); + LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("額外風扇速率 {"); LSTR MSG_FLOW = _UxGT("擠出速率"); LSTR MSG_FLOW_N = _UxGT("擠出速率 ~"); // "Flow" LSTR MSG_CONTROL = _UxGT("控制"); // "Control" @@ -322,7 +322,7 @@ namespace Language_zh_TW { LSTR MSG_STOP_PRINT = _UxGT("停止列印"); // "Stop print" LSTR MSG_PRINTING_OBJECT = _UxGT("列印物件"); // "Printing Object" LSTR MSG_CANCEL_OBJECT = _UxGT("中止物件"); // "Cancel Object" - LSTR MSG_CANCEL_OBJECT_N = _UxGT("中止物件 ="); // "Cancel Object =" + LSTR MSG_CANCEL_OBJECT_N = _UxGT("中止物件 {"); // "Cancel Object {" LSTR MSG_OUTAGE_RECOVERY = _UxGT("中斷恢復"); // "Outage Recovery" LSTR MSG_MEDIA_MENU = _UxGT("從記憶卡上列印"); // "Print from SD" LSTR MSG_NO_MEDIA = _UxGT("無記憶卡"); // "No SD card" diff --git a/Marlin/src/lcd/lcdprint.cpp b/Marlin/src/lcd/lcdprint.cpp index 650824e553bc..162f01a12cbd 100644 --- a/Marlin/src/lcd/lcdprint.cpp +++ b/Marlin/src/lcd/lcdprint.cpp @@ -37,7 +37,7 @@ * Print a string with optional substitutions: * * $ displays the clipped string given by fstr or cstr - * = displays '0'....'10' for indexes 0 - 10 + * { displays '0'....'10' for indexes 0 - 10 * ~ displays '1'....'11' for indexes 0 - 10 * * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL) * @ displays an axis name such as XYZUVW, or E for an extruder @@ -50,11 +50,11 @@ lcd_uint_t lcd_put_u8str_P(PGM_P const ptpl, const int8_t ind, const char *cstr/ lchar_t wc; p = get_utf8_value_cb(p, read_byte_rom, wc); if (!wc) break; - if (wc == '=' || wc == '~' || wc == '*') { + if (wc == '{' || wc == '~' || wc == '*') { if (ind >= 0) { if (wc == '*') { lcd_put_u8str(F("E")); n--; } if (n) { - int8_t inum = ind + ((wc == '=') ? 0 : LCD_FIRST_TOOL); + int8_t inum = ind + ((wc == '{') ? 0 : LCD_FIRST_TOOL); if (inum >= 10) { lcd_put_lchar('0' + (inum / 10)); n--; inum %= 10; diff --git a/Marlin/src/lcd/lcdprint.h b/Marlin/src/lcd/lcdprint.h index bcf85cb69396..9ba514791894 100644 --- a/Marlin/src/lcd/lcdprint.h +++ b/Marlin/src/lcd/lcdprint.h @@ -30,7 +30,7 @@ */ #pragma once -#include "fontutils.h" +#include "utf8.h" #include "../inc/MarlinConfig.h" @@ -209,7 +209,7 @@ inline int lcd_put_u8str(const lcd_uint_t col, const lcd_uint_t row, FSTR_P cons * @brief Draw a string with optional substitution * @details Print a string with optional substitutions: * $ displays the clipped string given by fstr or cstr - * = displays '0'....'10' for indexes 0 - 10 + * { displays '0'....'10' for indexes 0 - 10 * ~ displays '1'....'11' for indexes 0 - 10 * * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL) * @ displays an axis name such as XYZUVW, or E for an extruder diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 22b3fa27d71b..ec929753ae42 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -42,7 +42,7 @@ MarlinUI ui; #if HAS_DISPLAY #include "../gcode/queue.h" - #include "fontutils.h" + #include "utf8.h" #endif #if ENABLED(DWIN_CREALITY_LCD) @@ -127,7 +127,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; #endif #if ENABLED(PCA9632_BUZZER) - void MarlinUI::buzz(const long duration, const uint16_t freq) { + void MarlinUI::buzz(const long duration, const uint16_t freq/*=0*/) { if (sound_on) PCA9632_buzz(duration, freq); } #endif @@ -174,7 +174,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; #endif #if HAS_U8GLIB_I2C_OLED && PINS_EXIST(I2C_SCL, I2C_SDA) && DISABLED(SOFT_I2C_EEPROM) - #include "Wire.h" + #include #endif // Encoder Handling @@ -339,7 +339,7 @@ void MarlinUI::init() { uint8_t MarlinUI::lcd_status_update_delay = 1; // First update one loop delayed - #if BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) + #if BOTH(FILAMENT_LCD_DISPLAY, HAS_MEDIA) millis_t MarlinUI::next_filament_display; // = 0 #endif @@ -353,7 +353,7 @@ void MarlinUI::init() { bool MarlinUI::did_first_redraw; #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA #if MARLINUI_SCROLL_NAME uint8_t MarlinUI::filename_scroll_pos, MarlinUI::filename_scroll_max; @@ -670,7 +670,7 @@ void MarlinUI::init() { #if HAS_MARLINUI_MENU if (use_click()) { - #if BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) + #if BOTH(FILAMENT_LCD_DISPLAY, HAS_MEDIA) pause_filament_display(); #endif goto_screen(menu_main); @@ -1424,6 +1424,13 @@ void MarlinUI::init() { #endif // HAS_ENCODER_ACTION + #if HAS_SOUND + void MarlinUI::completion_feedback(const bool good/*=true*/) { + TERN_(HAS_TOUCH_SLEEP, wakeup_screen()); // Wake up on rotary encoder click... + if (good) OKAY_BUZZ(); else ERR_BUZZ(); + } + #endif + #endif // HAS_WIRED_LCD #if HAS_STATUS_MESSAGE @@ -1483,7 +1490,7 @@ void MarlinUI::init() { FSTR_P msg; if (printingIsPaused()) msg = GET_TEXT_F(MSG_PRINT_PAUSED); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA else if (IS_SD_PRINTING()) return set_status(card.longest_filename(), true); #endif @@ -1580,7 +1587,7 @@ void MarlinUI::init() { #if HAS_WIRED_LCD - #if BASIC_PROGRESS_BAR || BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) + #if BASIC_PROGRESS_BAR || BOTH(FILAMENT_LCD_DISPLAY, HAS_MEDIA) const millis_t ms = millis(); #endif @@ -1591,7 +1598,7 @@ void MarlinUI::init() { #endif #endif - #if BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) + #if BOTH(FILAMENT_LCD_DISPLAY, HAS_MEDIA) pause_filament_display(ms); // Show status message for 5s #endif @@ -1644,12 +1651,12 @@ void MarlinUI::init() { #if HAS_DISPLAY - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA extern bool wait_for_user, wait_for_heatup; #endif void MarlinUI::abort_print() { - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA wait_for_heatup = wait_for_user = false; card.abortFilePrintSoon(); #endif @@ -1692,7 +1699,7 @@ void MarlinUI::init() { #if ENABLED(PARK_HEAD_ON_PAUSE) pause_show_message(PAUSE_MESSAGE_PARKING, PAUSE_MODE_PAUSE_PRINT); // Show message immediately to let user know about pause in progress queue.inject(F("M25 P\nM24")); - #elif ENABLED(SDSUPPORT) + #elif HAS_MEDIA queue.inject(F("M25")); #elif defined(ACTION_ON_PAUSE) hostui.pause(); @@ -1702,7 +1709,7 @@ void MarlinUI::init() { void MarlinUI::resume_print() { reset_status(); TERN_(PARK_HEAD_ON_PAUSE, wait_for_heatup = wait_for_user = false); - TERN_(SDSUPPORT, if (IS_SD_PAUSED()) queue.inject_P(M24_STR)); + TERN_(HAS_MEDIA, if (IS_SD_PAUSED()) queue.inject_P(M24_STR)); #ifdef ACTION_ON_RESUME hostui.resume(); #endif @@ -1747,7 +1754,7 @@ void MarlinUI::init() { MarlinUI::progress_t MarlinUI::_get_progress() { return ( TERN0(SET_PROGRESS_PERCENT, (progress_override & PROGRESS_MASK)) - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA ?: TERN(HAS_PRINT_PROGRESS_PERMYRIAD, card.permyriadDone(), card.percentDone()) #endif ); @@ -1777,7 +1784,7 @@ void MarlinUI::init() { #endif // HAS_PRINT_PROGRESS -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #if ENABLED(EXTENSIBLE_UI) #include "extui/ui_api.h" @@ -1830,7 +1837,7 @@ void MarlinUI::init() { #endif } -#endif // SDSUPPORT +#endif // HAS_MEDIA #if HAS_MARLINUI_MENU void MarlinUI::reset_settings() { diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index 32d747da4301..9c5e192fb270 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -228,7 +228,7 @@ class MarlinUI { #endif #if USE_MARLINUI_BUZZER - static void buzz(const long duration, const uint16_t freq); + static void buzz(const long duration, const uint16_t freq=0); #endif static void chirp() { @@ -248,7 +248,7 @@ class MarlinUI { } #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA #define MEDIA_MENU_GATEWAY TERN(PASSWORD_ON_SD_PRINT_MENU, password.media_gatekeeper, menu_media) static void media_changed(const uint8_t old_stat, const uint8_t stat); #endif @@ -467,7 +467,7 @@ class MarlinUI { FORCE_INLINE static void refresh_contrast() { set_contrast(contrast); } #endif - #if BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) + #if BOTH(FILAMENT_LCD_DISPLAY, HAS_MEDIA) static millis_t next_filament_display; static void pause_filament_display(const millis_t ms=millis()) { next_filament_display = ms + 5000UL; } #endif @@ -494,11 +494,6 @@ class MarlinUI { static void status_screen(); - #else - - static void quick_feedback(const bool=true) {} - static void completion_feedback(const bool=true) {} - #endif #if HAS_MARLINUI_U8GLIB @@ -529,7 +524,12 @@ class MarlinUI { #endif - #if ENABLED(SDSUPPORT) + #if !HAS_WIRED_LCD + static void quick_feedback(const bool=true) {} + static void completion_feedback(const bool=true) {} + #endif + + #if HAS_MEDIA #if BOTH(SCROLL_LONG_FILENAMES, HAS_MARLINUI_MENU) #define MARLINUI_SCROLL_NAME 1 #endif diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp index 85b773bebc94..5c4dc12d2651 100644 --- a/Marlin/src/lcd/menu/menu.cpp +++ b/Marlin/src/lcd/menu/menu.cpp @@ -271,13 +271,6 @@ void scroll_screen(const uint8_t limit, const bool is_menu) { encoderTopLine = encoderLine; } -#if HAS_SOUND - void MarlinUI::completion_feedback(const bool good/*=true*/) { - TERN_(HAS_TOUCH_SLEEP, wakeup_screen()); // Wake up on rotary encoder click... - if (good) OKAY_BUZZ(); else ERR_BUZZ(); - } -#endif - #if HAS_LINE_TO_Z void line_to_z(const_float_t z) { diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h index 9b9c67886880..9d824e2a4cb1 100644 --- a/Marlin/src/lcd/menu/menu.h +++ b/Marlin/src/lcd/menu/menu.h @@ -35,7 +35,8 @@ typedef void (*selectFunc_t)(); #define SS_LEFT 0x00 #define SS_CENTER 0x01 -#define SS_INVERT 0x02 +#define SS_FULL 0x02 +#define SS_INVERT 0x04 #define SS_DEFAULT SS_CENTER #if ENABLED(BABYSTEP_ZPROBE_OFFSET) && Z_PROBE_OFFSET_RANGE_MIN >= -9 && Z_PROBE_OFFSET_RANGE_MAX <= 9 @@ -75,7 +76,7 @@ class MenuItemBase { // STATIC_ITEM(LABEL,...) class MenuItem_static : public MenuItemBase { public: - static void draw(const uint8_t row, FSTR_P const fstr, const uint8_t style=SS_DEFAULT, const char * const vstr=nullptr); + static void draw(const uint8_t row, FSTR_P const fstr, const uint8_t style=SS_DEFAULT, const char *vstr=nullptr); }; // BACK_ITEM(LABEL) @@ -190,7 +191,7 @@ class MenuEditItemBase : public MenuItemBase { static void draw_edit_screen(const char * const value) { draw_edit_screen(editLabel, value); } }; -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA class CardReader; class MenuItem_sdbase { public: @@ -206,7 +207,7 @@ class MenuEditItemBase : public MenuItemBase { void menu_main(); void menu_move(); -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA void menu_media(); #endif diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 3ff4b2e56257..0611bda84b32 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -32,6 +32,10 @@ #include "../../MarlinCore.h" +#if ENABLED(LCD_ENDSTOP_TEST) + #include "../../module/endstops.h" +#endif + #if HAS_FILAMENT_SENSOR #include "../../feature/runout.h" #endif @@ -55,9 +59,13 @@ #include "../../libs/buzzer.h" #endif -#include "../../core/debug_out.h" +#if EITHER(LCD_PROGRESS_BAR_TEST, LCD_ENDSTOP_TEST) + #include "../lcdprint.h" + #define HAS_DEBUG_MENU 1 +#endif -#define HAS_DEBUG_MENU ENABLED(LCD_PROGRESS_BAR_TEST) +//#define DEBUG_OUT 1 +#include "../../core/debug_out.h" void menu_advanced_settings(); #if EITHER(DELTA_CALIBRATION_MENU, DELTA_AUTO_CALIBRATION) @@ -66,8 +74,6 @@ void menu_advanced_settings(); #if ENABLED(LCD_PROGRESS_BAR_TEST) - #include "../lcdprint.h" - static void progress_bar_test() { static int8_t bar_percent = 0; if (ui.use_click()) { @@ -90,6 +96,81 @@ void menu_advanced_settings(); #endif // LCD_PROGRESS_BAR_TEST +#if ENABLED(LCD_ENDSTOP_TEST) + + #define __STOP_ITEM(F,S) PSTRING_ITEM_F_P(F, TEST(stops, S) ? PSTR(STR_ENDSTOP_HIT) : PSTR(STR_ENDSTOP_OPEN), SS_FULL) + #define _STOP_ITEM(L,S) __STOP_ITEM(F(L), S) + #define STOP_ITEM(A,I) _STOP_ITEM(STRINGIFY(A) STRINGIFY(I) " " TERN(A##_HOME_TO_MAX, "Max", "Min"), A##I##_ENDSTOP) + #define FIL_ITEM(N) PSTRING_ITEM_N_P(N-1, MSG_FILAMENT_EN, (READ(FIL_RUNOUT##N##_PIN) != FIL_RUNOUT##N##_STATE) ? PSTR("PRESENT") : PSTR("out"), SS_FULL); + + static void endstop_test() { + if (ui.use_click()) { + ui.goto_previous_screen(); + //endstops.enable_globally(false); + return; + } + TemporaryGlobalEndstopsState temp(true); + ui.defer_status_screen(true); + const Endstops::endstop_mask_t stops = endstops.state(); + + START_SCREEN(); + STATIC_ITEM_F(GET_TEXT_F(MSG_ENDSTOP_TEST), SS_DEFAULT|SS_INVERT); + + #if HAS_X_ENDSTOP + STOP_ITEM(X,); + #if ENABLED(X_DUAL_ENDSTOPS) + STOP_ITEM(X,2); + #endif + #endif + #if HAS_Y_ENDSTOP + STOP_ITEM(Y,); + #if ENABLED(Y_DUAL_ENDSTOPS) + STOP_ITEM(Y,2); + #endif + #endif + #if HAS_Z_ENDSTOP + STOP_ITEM(Z,); + #if ENABLED(Z_MULTI_ENDSTOPS) + STOP_ITEM(Z,2); + #if NUM_Z_STEPPERS >= 3 + STOP_ITEM(Z,3); + #if NUM_Z_STEPPERS >= 4 + STOP_ITEM(Z,4); + #endif + #endif + #endif + #endif + #if HAS_I_ENDSTOP + STOP_ITEM(I,); + #endif + #if HAS_J_ENDSTOP + STOP_ITEM(J,); + #endif + #if HAS_K_ENDSTOP + STOP_ITEM(K,); + #endif + #if HAS_U_ENDSTOP + STOP_ITEM(U,); + #endif + #if HAS_V_ENDSTOP + STOP_ITEM(V,); + #endif + #if HAS_W_ENDSTOP + STOP_ITEM(W,); + #endif + #if HAS_BED_PROBE && !HAS_DELTA_SENSORLESS_PROBING + __STOP_ITEM(GET_TEXT_F(MSG_Z_PROBE), Z_MIN_PROBE); + #endif + #if ENABLED(FILAMENT_RUNOUT_SENSOR) + REPEAT_1(NUM_RUNOUT_SENSORS, FIL_ITEM) + #endif + + END_SCREEN(); + ui.refresh(LCDVIEW_CALL_REDRAW_NEXT); + } + +#endif // LCD_ENDSTOP_TEST + #if HAS_DEBUG_MENU void menu_debug() { @@ -101,6 +182,10 @@ void menu_advanced_settings(); SUBMENU(MSG_PROGRESS_BAR_TEST, _progress_bar_test); #endif + #if ENABLED(LCD_ENDSTOP_TEST) + SUBMENU(MSG_ENDSTOP_TEST, endstop_test); + #endif + END_MENU(); } @@ -161,7 +246,7 @@ void menu_advanced_settings(); } #endif -#endif +#endif // HAS_MULTI_EXTRUDER #if HAS_HOTEND_OFFSET #include "../../module/motion.h" diff --git a/Marlin/src/lcd/menu/menu_info.cpp b/Marlin/src/lcd/menu/menu_info.cpp index abca4a7d1598..e2dd6c647527 100644 --- a/Marlin/src/lcd/menu/menu_info.cpp +++ b/Marlin/src/lcd/menu/menu_info.cpp @@ -51,40 +51,40 @@ char buffer[21]; - START_SCREEN(); // 12345678901234567890 - VALUE_ITEM(MSG_INFO_PRINT_COUNT, i16tostr3left(stats.totalPrints), SS_LEFT); // Print Count: 999 - VALUE_ITEM(MSG_INFO_COMPLETED_PRINTS, i16tostr3left(stats.finishedPrints), SS_LEFT); // Completed : 666 + START_SCREEN(); // 12345678901234567890 + VALUE_ITEM(MSG_INFO_PRINT_COUNT, i16tostr3left(stats.totalPrints), SS_FULL); // Print Count: 999 + VALUE_ITEM(MSG_INFO_COMPLETED_PRINTS, i16tostr3left(stats.finishedPrints), SS_FULL); // Completed : 666 - STATIC_ITEM(MSG_INFO_PRINT_TIME, SS_LEFT); // Total print Time: - STATIC_ITEM_F(F("> "), SS_LEFT, duration_t(stats.printTime).toString(buffer)); // > 99y 364d 23h 59m 59s + STATIC_ITEM(MSG_INFO_PRINT_TIME, SS_FULL); // Total print Time: + STATIC_ITEM_F(nullptr, SS_FULL, duration_t(stats.printTime).toString(buffer)); // > 99y 364d 23h 59m 59s - STATIC_ITEM(MSG_INFO_PRINT_LONGEST, SS_LEFT); // Longest job time: - STATIC_ITEM_F(F("> "), SS_LEFT, duration_t(stats.longestPrint).toString(buffer)); // > 99y 364d 23h 59m 59s + STATIC_ITEM(MSG_INFO_PRINT_LONGEST, SS_FULL); // Longest job time: + STATIC_ITEM_F(nullptr, SS_FULL, duration_t(stats.longestPrint).toString(buffer)); // > 99y 364d 23h 59m 59s - STATIC_ITEM(MSG_INFO_PRINT_FILAMENT, SS_LEFT); // Extruded total: + STATIC_ITEM(MSG_INFO_PRINT_FILAMENT, SS_FULL); // Extruded total: sprintf_P(buffer, PSTR("%ld.%im") , long(stats.filamentUsed / 1000) , int16_t(stats.filamentUsed / 100) % 10 ); - STATIC_ITEM_F(F("> "), SS_LEFT, buffer); // > 125m + STATIC_ITEM_F(nullptr, SS_FULL, buffer); // > 125m #if SERVICE_INTERVAL_1 > 0 || SERVICE_INTERVAL_2 > 0 || SERVICE_INTERVAL_3 > 0 strcpy_P(buffer, GET_TEXT(MSG_SERVICE_IN)); #endif #if SERVICE_INTERVAL_1 > 0 - STATIC_ITEM_F(F(SERVICE_NAME_1 " "), SS_LEFT, buffer); // Service X in: - STATIC_ITEM_F(F("> "), SS_LEFT, duration_t(stats.nextService1).toString(buffer)); // > 7d 12h 11m 10s + STATIC_ITEM_F(F(SERVICE_NAME_1 " "), SS_FULL, buffer); // Service X in: + STATIC_ITEM_F(nullptr, SS_FULL, duration_t(stats.nextService1).toString(buffer)); // > 7d 12h 11m 10s #endif #if SERVICE_INTERVAL_2 > 0 - STATIC_ITEM_F(F(SERVICE_NAME_2 " "), SS_LEFT, buffer); - STATIC_ITEM_F(F("> "), SS_LEFT, duration_t(stats.nextService2).toString(buffer)); + STATIC_ITEM_F(F(SERVICE_NAME_2 " "), SS_FULL, buffer); + STATIC_ITEM_F(nullptr, SS_FULL, duration_t(stats.nextService2).toString(buffer)); #endif #if SERVICE_INTERVAL_3 > 0 - STATIC_ITEM_F(F(SERVICE_NAME_3 " "), SS_LEFT, buffer); - STATIC_ITEM_F(F("> "), SS_LEFT, duration_t(stats.nextService3).toString(buffer)); + STATIC_ITEM_F(F(SERVICE_NAME_3 " "), SS_FULL, buffer); + STATIC_ITEM_F(nullptr, SS_FULL, duration_t(stats.nextService3).toString(buffer)); #endif END_SCREEN(); @@ -104,9 +104,9 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_0 #include "../thermistornames.h" STATIC_ITEM_F(F(STR_E0 ": " THERMISTOR_NAME), SS_INVERT); - PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_0_MINTEMP), SS_LEFT); - PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_0_MAXTEMP), SS_LEFT); - STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); + PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_0_MINTEMP), SS_FULL); + PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_0_MAXTEMP), SS_FULL); + STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_FULL); #endif #if TEMP_SENSOR_1 != 0 @@ -114,9 +114,9 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_1 #include "../thermistornames.h" STATIC_ITEM_F(F(STR_E1 ": " THERMISTOR_NAME), SS_INVERT); - PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_1_MINTEMP), SS_LEFT); - PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_1_MAXTEMP), SS_LEFT); - STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); + PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_1_MINTEMP), SS_FULL); + PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_1_MAXTEMP), SS_FULL); + STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_FULL); #endif #if TEMP_SENSOR_2 != 0 @@ -124,9 +124,9 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_2 #include "../thermistornames.h" STATIC_ITEM_F(F(STR_E2 ": " THERMISTOR_NAME), SS_INVERT); - PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_2_MINTEMP), SS_LEFT); - PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_2_MAXTEMP), SS_LEFT); - STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); + PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_2_MINTEMP), SS_FULL); + PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_2_MAXTEMP), SS_FULL); + STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_FULL); #endif #if TEMP_SENSOR_3 != 0 @@ -134,9 +134,9 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_3 #include "../thermistornames.h" STATIC_ITEM_F(F(STR_E3 ": " THERMISTOR_NAME), SS_INVERT); - PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_3_MINTEMP), SS_LEFT); - PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_3_MAXTEMP), SS_LEFT); - STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); + PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_3_MINTEMP), SS_FULL); + PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_3_MAXTEMP), SS_FULL); + STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_FULL); #endif #if TEMP_SENSOR_4 != 0 @@ -144,9 +144,9 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_4 #include "../thermistornames.h" STATIC_ITEM_F(F(STR_E4 ": " THERMISTOR_NAME), SS_INVERT); - PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_4_MINTEMP), SS_LEFT); - PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_4_MAXTEMP), SS_LEFT); - STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); + PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_4_MINTEMP), SS_FULL); + PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_4_MAXTEMP), SS_FULL); + STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_FULL); #endif #if TEMP_SENSOR_5 != 0 @@ -154,9 +154,9 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_5 #include "../thermistornames.h" STATIC_ITEM_F(F(STR_E5 ": " THERMISTOR_NAME), SS_INVERT); - PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_5_MINTEMP), SS_LEFT); - PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_5_MAXTEMP), SS_LEFT); - STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); + PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_5_MINTEMP), SS_FULL); + PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_5_MAXTEMP), SS_FULL); + STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_FULL); #endif #if TEMP_SENSOR_6 != 0 @@ -164,9 +164,9 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_6 #include "../thermistornames.h" STATIC_ITEM_F(F(STR_E6 ": " THERMISTOR_NAME), SS_INVERT); - PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_6_MINTEMP), SS_LEFT); - PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_6_MAXTEMP), SS_LEFT); - STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); + PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_6_MINTEMP), SS_FULL); + PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_6_MAXTEMP), SS_FULL); + STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_FULL); #endif #if TEMP_SENSOR_7 != 0 @@ -174,9 +174,9 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_7 #include "../thermistornames.h" STATIC_ITEM_F(F(STR_E7 ": " THERMISTOR_NAME), SS_INVERT); - PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_7_MINTEMP), SS_LEFT); - PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_7_MAXTEMP), SS_LEFT); - STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); + PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_7_MINTEMP), SS_FULL); + PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_7_MAXTEMP), SS_FULL); + STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_FULL); #endif #if HAS_HEATED_BED @@ -184,9 +184,9 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_BED #include "../thermistornames.h" STATIC_ITEM_F(F("BED: " THERMISTOR_NAME), SS_INVERT); - PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(BED_MINTEMP), SS_LEFT); - PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(BED_MAXTEMP), SS_LEFT); - STATIC_ITEM(TERN(WATCH_BED, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); + PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(BED_MINTEMP), SS_FULL); + PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(BED_MAXTEMP), SS_FULL); + STATIC_ITEM(TERN(WATCH_BED, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_FULL); #endif #if HAS_HEATED_CHAMBER @@ -194,9 +194,9 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_CHAMBER #include "../thermistornames.h" STATIC_ITEM_F(F("CHAM: " THERMISTOR_NAME), SS_INVERT); - PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(CHAMBER_MINTEMP), SS_LEFT); - PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(CHAMBER_MAXTEMP), SS_LEFT); - STATIC_ITEM(TERN(WATCH_CHAMBER, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); + PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(CHAMBER_MINTEMP), SS_FULL); + PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(CHAMBER_MAXTEMP), SS_FULL); + STATIC_ITEM(TERN(WATCH_CHAMBER, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_FULL); #endif #if HAS_COOLER @@ -204,9 +204,9 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_COOLER #include "../thermistornames.h" STATIC_ITEM_F(F("COOL: " THERMISTOR_NAME), SS_INVERT); - PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(COOLER_MINTEMP), SS_LEFT); - PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(COOLER_MAXTEMP), SS_LEFT); - STATIC_ITEM(TERN(WATCH_COOLER, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); + PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(COOLER_MINTEMP), SS_FULL); + PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(COOLER_MAXTEMP), SS_FULL); + STATIC_ITEM(TERN(WATCH_COOLER, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_FULL); #endif END_SCREEN(); diff --git a/Marlin/src/lcd/menu/menu_item.h b/Marlin/src/lcd/menu/menu_item.h index 31868520024e..805caa1d90d8 100644 --- a/Marlin/src/lcd/menu/menu_item.h +++ b/Marlin/src/lcd/menu/menu_item.h @@ -368,19 +368,29 @@ class MenuItem_bool : public MenuEditItemBase { NEXT_ITEM(); \ }while(0) -// PSTRING_ITEM is like STATIC_ITEM but it takes -// two PSTRs with the style as the last parameter. - -#define PSTRING_ITEM_F(FLABEL, PVAL, STYL) do{ \ - constexpr int m = 20; \ - char msg[m+1]; \ - msg[0] = ':'; msg[1] = ' '; \ - strncpy_P(msg+2, PSTR(PVAL), m-2); \ - if (msg[m-1] & 0x80) msg[m-1] = '\0'; \ - STATIC_ITEM_F(FLABEL, STYL, msg); \ +// PSTRING_ITEM is like STATIC_ITEM +// but also takes a PSTR and style. + +#define PSTRING_ITEM_F_P(FLABEL, PVAL, STYL) do{ \ + constexpr int m = 20; \ + char msg[m+1]; \ + if (_menuLineNr == _thisItemNr) { \ + msg[0] = ':'; msg[1] = ' '; \ + strncpy_P(msg+2, PVAL, m-2); \ + if (msg[m-1] & 0x80) msg[m-1] = '\0'; \ + } \ + STATIC_ITEM_F(FLABEL, STYL, msg); \ }while(0) -#define PSTRING_ITEM(LABEL, V...) PSTRING_ITEM_F(GET_TEXT_F(LABEL), ##V) +#define PSTRING_ITEM_N_F_P(N, V...) do{ \ + if (_menuLineNr == _thisItemNr) \ + MenuItemBase::init(N); \ + PSTRING_ITEM_F_P(V); \ +}while(0) + +#define PSTRING_ITEM_N_P(N, LABEL, V...) PSTRING_ITEM_N_F_P(N, GET_TEXT_F(LABEL), ##V) +#define PSTRING_ITEM_P(LABEL, V...) PSTRING_ITEM_F_P(GET_TEXT_F(LABEL), ##V) +#define PSTRING_ITEM(LABEL, S, V...) PSTRING_ITEM_P(LABEL, PSTR(S), ##V) #define STATIC_ITEM(LABEL, V...) STATIC_ITEM_F(GET_TEXT_F(LABEL), ##V) #define STATIC_ITEM_N(N, LABEL, V...) STATIC_ITEM_N_F(N, GET_TEXT_F(LABEL), ##V) diff --git a/Marlin/src/lcd/menu/menu_language.cpp b/Marlin/src/lcd/menu/menu_language.cpp index 9361d595f76c..c92b86095013 100644 --- a/Marlin/src/lcd/menu/menu_language.cpp +++ b/Marlin/src/lcd/menu/menu_language.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfig.h" -#if HAS_MULTI_LANGUAGE +#if HAS_MENU_MULTI_LANGUAGE #include "menu_item.h" #include "../../MarlinCore.h" @@ -56,4 +56,4 @@ void menu_language() { END_MENU(); } -#endif // HAS_MULTI_LANGUAGE +#endif // HAS_MENU_MULTI_LANGUAGE diff --git a/Marlin/src/lcd/menu/menu_main.cpp b/Marlin/src/lcd/menu/menu_main.cpp index 3b1cd737452b..a202f624f7fc 100644 --- a/Marlin/src/lcd/menu/menu_main.cpp +++ b/Marlin/src/lcd/menu/menu_main.cpp @@ -43,10 +43,10 @@ #include "game/game.h" #endif -#if EITHER(SDSUPPORT, HOST_PROMPT_SUPPORT) || defined(ACTION_ON_CANCEL) +#if EITHER(HAS_MEDIA, HOST_PROMPT_SUPPORT) || defined(ACTION_ON_CANCEL) #define MACHINE_CAN_STOP 1 #endif -#if ANY(SDSUPPORT, HOST_PROMPT_SUPPORT, PARK_HEAD_ON_PAUSE) || defined(ACTION_ON_PAUSE) +#if ANY(HAS_MEDIA, HOST_PROMPT_SUPPORT, PARK_HEAD_ON_PAUSE) || defined(ACTION_ON_PAUSE) #define MACHINE_CAN_PAUSE 1 #endif @@ -234,7 +234,7 @@ void menu_configuration(); void menu_main() { const bool busy = printingIsActive() - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA , card_detected = card.isMounted() , card_open = card_detected && card.isFileOpen() #endif @@ -243,7 +243,7 @@ void menu_main() { START_MENU(); BACK_ITEM(MSG_INFO_SCREEN); - #if ENABLED(SDSUPPORT) && !defined(MEDIA_MENU_AT_TOP) && !HAS_ENCODER_WHEEL + #if HAS_MEDIA && !defined(MEDIA_MENU_AT_TOP) && !HAS_ENCODER_WHEEL #define MEDIA_MENU_AT_TOP #endif @@ -273,7 +273,7 @@ void menu_main() { #endif } else { - #if BOTH(SDSUPPORT, MEDIA_MENU_AT_TOP) + #if BOTH(HAS_MEDIA, MEDIA_MENU_AT_TOP) // BEGIN MEDIA MENU #if ENABLED(MENU_ADDAUTOSTART) ACTION_ITEM(MSG_RUN_AUTO_FILES, card.autofile_begin); // Run Auto Files @@ -388,7 +388,7 @@ void menu_main() { GCODES_ITEM(MSG_SWITCH_PS_ON, F("M80")); #endif - #if ENABLED(SDSUPPORT) && DISABLED(MEDIA_MENU_AT_TOP) + #if HAS_MEDIA && DISABLED(MEDIA_MENU_AT_TOP) // BEGIN MEDIA MENU #if ENABLED(MENU_ADDAUTOSTART) ACTION_ITEM(MSG_RUN_AUTO_FILES, card.autofile_begin); // Run Auto Files diff --git a/Marlin/src/lcd/menu/menu_media.cpp b/Marlin/src/lcd/menu/menu_media.cpp index 79cca1d97a45..e32f41a9a6e1 100644 --- a/Marlin/src/lcd/menu/menu_media.cpp +++ b/Marlin/src/lcd/menu/menu_media.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_MARLINUI_MENU, SDSUPPORT) +#if BOTH(HAS_MARLINUI_MENU, HAS_MEDIA) #include "menu_item.h" #include "../../sd/cardreader.h" @@ -161,4 +161,4 @@ void menu_media() { TERN(MULTI_VOLUME, menu_media_select, menu_media_filelist)(); } -#endif // HAS_MARLINUI_MENU && SDSUPPORT +#endif // HAS_MARLINUI_MENU && HAS_MEDIA diff --git a/Marlin/src/lcd/menu/menu_probe_offset.cpp b/Marlin/src/lcd/menu/menu_probe_offset.cpp index 62704cdedea6..0dd118ed2230 100644 --- a/Marlin/src/lcd/menu/menu_probe_offset.cpp +++ b/Marlin/src/lcd/menu/menu_probe_offset.cpp @@ -102,7 +102,7 @@ void prepare_for_probe_offset_wizard() { // Probe for Z reference ui.wait_for_move = true; - z_offset_ref = probe.probe_at_point(wizard_pos, PROBE_PT_RAISE, 0, true); + z_offset_ref = probe.probe_at_point(wizard_pos, PROBE_PT_RAISE); ui.wait_for_move = false; // Stow the probe, as the last call to probe.probe_at_point(...) left diff --git a/Marlin/src/lcd/menu/menu_tramming_wizard.cpp b/Marlin/src/lcd/menu/menu_tramming_wizard.cpp index 4ce2cd646018..8fb251c23862 100644 --- a/Marlin/src/lcd/menu/menu_tramming_wizard.cpp +++ b/Marlin/src/lcd/menu/menu_tramming_wizard.cpp @@ -53,7 +53,7 @@ static int8_t reference_index; // = 0 #endif static bool probe_single_point() { - const float z_probed_height = probe.probe_at_point(tramming_points[tram_index], PROBE_PT_RAISE, 0, true); + const float z_probed_height = probe.probe_at_point(tramming_points[tram_index], PROBE_PT_RAISE); z_measured[tram_index] = z_probed_height; if (reference_index < 0) reference_index = tram_index; move_to_tramming_wait_pos(); diff --git a/Marlin/src/lcd/tft/tft_string.cpp b/Marlin/src/lcd/tft/tft_string.cpp index 1b65f226d902..19ea5b2079e9 100644 --- a/Marlin/src/lcd/tft/tft_string.cpp +++ b/Marlin/src/lcd/tft/tft_string.cpp @@ -25,7 +25,7 @@ #if HAS_GRAPHICAL_TFT #include "tft_string.h" -#include "../fontutils.h" +#include "../utf8.h" #include "../marlinui.h" //#define DEBUG_TFT_FONT @@ -179,7 +179,7 @@ void TFT_String::set() { * Add a string, applying substitutions for the following characters: * * $ displays the string given by fstr or cstr - * = displays '0'....'10' for indexes 0 - 10 + * { displays '0'....'10' for indexes 0 - 10 * ~ displays '1'....'11' for indexes 0 - 10 * * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL) * @ displays an axis name such as XYZUVW, or E for an extruder @@ -191,9 +191,9 @@ void TFT_String::add(const char *tpl, const int8_t index, const char *cstr/*=nul tpl = get_utf8_value_cb(tpl, read_byte_ram, wc); const uint16_t ch = uint16_t(wc); - if (ch == '=' || ch == '~' || ch == '*') { + if (ch == '{' || ch == '~' || ch == '*') { if (index >= 0) { - int8_t inum = index + ((ch == '=') ? 0 : LCD_FIRST_TOOL); + int8_t inum = index + ((ch == '{') ? 0 : LCD_FIRST_TOOL); if (ch == '*') add_character('E'); if (inum >= 10) { add_character('0' + (inum / 10)); inum %= 10; } add_character('0' + inum); diff --git a/Marlin/src/lcd/tft/tft_string.h b/Marlin/src/lcd/tft/tft_string.h index 85966670477b..3df6afe49bc0 100644 --- a/Marlin/src/lcd/tft/tft_string.h +++ b/Marlin/src/lcd/tft/tft_string.h @@ -23,7 +23,7 @@ #include -#include "../fontutils.h" +#include "../utf8.h" #define NO_GLYPH 0xFF diff --git a/Marlin/src/lcd/tft/touch.cpp b/Marlin/src/lcd/tft/touch.cpp index 9482c85a4706..17784ff52757 100644 --- a/Marlin/src/lcd/tft/touch.cpp +++ b/Marlin/src/lcd/tft/touch.cpp @@ -266,19 +266,18 @@ void Touch::hold(touch_control_t *control, millis_t delay) { bool Touch::get_point(int16_t *x, int16_t *y) { #if ENABLED(TFT_TOUCH_DEVICE_XPT2046) #if ENABLED(TOUCH_SCREEN_CALIBRATION) - bool is_touched = (touch_calibration.calibration.orientation == TOUCH_PORTRAIT ? io.getRawPoint(y, x) : io.getRawPoint(x, y)); - + const bool is_touched = (touch_calibration.calibration.orientation == TOUCH_PORTRAIT ? io.getRawPoint(y, x) : io.getRawPoint(x, y)); if (is_touched && touch_calibration.calibration.orientation != TOUCH_ORIENTATION_NONE) { *x = int16_t((int32_t(*x) * touch_calibration.calibration.x) >> 16) + touch_calibration.calibration.offset_x; *y = int16_t((int32_t(*y) * touch_calibration.calibration.y) >> 16) + touch_calibration.calibration.offset_y; } #else - bool is_touched = (TOUCH_ORIENTATION == TOUCH_PORTRAIT ? io.getRawPoint(y, x) : io.getRawPoint(x, y)); + const bool is_touched = (TOUCH_ORIENTATION == TOUCH_PORTRAIT ? io.getRawPoint(y, x) : io.getRawPoint(x, y)); *x = uint16_t((uint32_t(*x) * TOUCH_CALIBRATION_X) >> 16) + TOUCH_OFFSET_X; *y = uint16_t((uint32_t(*y) * TOUCH_CALIBRATION_Y) >> 16) + TOUCH_OFFSET_Y; #endif #elif ENABLED(TFT_TOUCH_DEVICE_GT911) - bool is_touched = (TOUCH_ORIENTATION == TOUCH_PORTRAIT ? io.getPoint(y, x) : io.getPoint(x, y)); + const bool is_touched = (TOUCH_ORIENTATION == TOUCH_PORTRAIT ? io.getPoint(y, x) : io.getPoint(x, y)); #endif #if HAS_TOUCH_SLEEP if (is_touched) diff --git a/Marlin/src/lcd/tft/touch.h b/Marlin/src/lcd/tft/touch.h index bebd9d01e36a..91e863573b92 100644 --- a/Marlin/src/lcd/tft/touch.h +++ b/Marlin/src/lcd/tft/touch.h @@ -31,10 +31,10 @@ #endif #if ENABLED(TFT_TOUCH_DEVICE_GT911) - #include HAL_PATH(../../HAL, tft/gt911.h) + #include HAL_PATH(../.., tft/gt911.h) #define TOUCH_DRIVER_CLASS GT911 #elif ENABLED(TFT_TOUCH_DEVICE_XPT2046) - #include HAL_PATH(../../HAL, tft/xpt2046.h) + #include HAL_PATH(../.., tft/xpt2046.h) #define TOUCH_DRIVER_CLASS XPT2046 #else #error "Unknown Touch Screen Type." diff --git a/Marlin/src/lcd/tft/ui_1024x600.cpp b/Marlin/src/lcd/tft/ui_1024x600.cpp index 6b628bc4cf42..cf5911cdc1c4 100644 --- a/Marlin/src/lcd/tft/ui_1024x600.cpp +++ b/Marlin/src/lcd/tft/ui_1024x600.cpp @@ -36,7 +36,7 @@ #include "../../module/planner.h" #include "../../module/motion.h" -#if DISABLED(LCD_PROGRESS_BAR) && BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) +#if DISABLED(LCD_PROGRESS_BAR) && BOTH(FILAMENT_LCD_DISPLAY, HAS_MEDIA) #include "../../feature/filwidth.h" #include "../../gcode/parser.h" #endif @@ -228,25 +228,25 @@ void MarlinUI::draw_status_screen() { for (i = 0 ; i < ITEMS_COUNT; i++) { x = (TFT_WIDTH / ITEMS_COUNT - 80) / 2 + (TFT_WIDTH * i / ITEMS_COUNT); switch (i) { - #ifdef ITEM_E0 + #if HAS_EXTRUDERS case ITEM_E0: draw_heater_status(x, y, H_E0); break; #endif - #ifdef ITEM_E1 + #if HAS_MULTI_HOTEND case ITEM_E1: draw_heater_status(x, y, H_E1); break; #endif - #ifdef ITEM_E2 + #if HOTENDS > 2 case ITEM_E2: draw_heater_status(x, y, H_E2); break; #endif - #ifdef ITEM_BED + #if HAS_HEATED_BED case ITEM_BED: draw_heater_status(x, y, H_BED); break; #endif - #ifdef ITEM_CHAMBER + #if HAS_TEMP_CHAMBER case ITEM_CHAMBER: draw_heater_status(x, y, H_CHAMBER); break; #endif - #ifdef ITEM_COOLER + #if HAS_TEMP_COOLER case ITEM_COOLER: draw_heater_status(x, y, H_COOLER); break; #endif - #ifdef ITEM_FAN + #if HAS_FAN case ITEM_FAN: draw_fan_status(x, y, blink); break; #endif } @@ -326,7 +326,7 @@ void MarlinUI::draw_status_screen() { #if ENABLED(TOUCH_SCREEN) add_control(900, y, menu_main, imgSettings); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA const bool cm = card.isMounted(), pa = printingIsActive(); if (cm && pa) add_control(12, y, STOP, imgCancel, true, COLOR_CONTROL_CANCEL); diff --git a/Marlin/src/lcd/tft/ui_320x240.cpp b/Marlin/src/lcd/tft/ui_320x240.cpp index 11e473023904..bac7586a25eb 100644 --- a/Marlin/src/lcd/tft/ui_320x240.cpp +++ b/Marlin/src/lcd/tft/ui_320x240.cpp @@ -36,7 +36,7 @@ #include "../../module/planner.h" #include "../../module/motion.h" -#if DISABLED(LCD_PROGRESS_BAR) && BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) +#if DISABLED(LCD_PROGRESS_BAR) && BOTH(FILAMENT_LCD_DISPLAY, HAS_MEDIA) #include "../../feature/filwidth.h" #include "../../gcode/parser.h" #endif @@ -230,25 +230,25 @@ void MarlinUI::draw_status_screen() { for (i = 0 ; i < ITEMS_COUNT; i++) { x = (TFT_WIDTH / ITEMS_COUNT - 64) / 2 + (TFT_WIDTH * i / ITEMS_COUNT); switch (i) { - #ifdef ITEM_E0 + #if HAS_EXTRUDERS case ITEM_E0: draw_heater_status(x, y, H_E0); break; #endif - #ifdef ITEM_E1 + #if HAS_MULTI_HOTEND case ITEM_E1: draw_heater_status(x, y, H_E1); break; #endif - #ifdef ITEM_E2 + #if HOTENDS > 2 case ITEM_E2: draw_heater_status(x, y, H_E2); break; #endif - #ifdef ITEM_BED + #if HAS_HEATED_BED case ITEM_BED: draw_heater_status(x, y, H_BED); break; #endif - #ifdef ITEM_CHAMBER + #if HAS_TEMP_CHAMBER case ITEM_CHAMBER: draw_heater_status(x, y, H_CHAMBER); break; #endif - #ifdef ITEM_COOLER + #if HAS_TEMP_COOLER case ITEM_COOLER: draw_heater_status(x, y, H_COOLER); break; #endif - #ifdef ITEM_FAN + #if HAS_FAN case ITEM_FAN: draw_fan_status(x, y, blink); break; #endif } @@ -448,7 +448,7 @@ void MarlinUI::draw_status_screen() { #endif , menu_main, imgSettings ); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA const bool cm = card.isMounted(), pa = printingIsActive(); if (cm && pa) add_control(0, TERN(TFT_COLOR_UI_PORTRAIT, 210, 130), STOP, imgCancel, true, COLOR_CONTROL_CANCEL); diff --git a/Marlin/src/lcd/tft/ui_480x320.cpp b/Marlin/src/lcd/tft/ui_480x320.cpp index 54762da671a7..efb58754c79e 100644 --- a/Marlin/src/lcd/tft/ui_480x320.cpp +++ b/Marlin/src/lcd/tft/ui_480x320.cpp @@ -36,7 +36,7 @@ #include "../../module/planner.h" #include "../../module/motion.h" -#if DISABLED(LCD_PROGRESS_BAR) && BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) +#if DISABLED(LCD_PROGRESS_BAR) && BOTH(FILAMENT_LCD_DISPLAY, HAS_MEDIA) #include "../../feature/filwidth.h" #include "../../gcode/parser.h" #endif @@ -228,25 +228,25 @@ void MarlinUI::draw_status_screen() { for (i = 0 ; i < ITEMS_COUNT; i++) { x = (TFT_WIDTH / ITEMS_COUNT - 80) / 2 + (TFT_WIDTH * i / ITEMS_COUNT); switch (i) { - #ifdef ITEM_E0 + #if HAS_EXTRUDERS case ITEM_E0: draw_heater_status(x, y, H_E0); break; #endif - #ifdef ITEM_E1 + #if HAS_MULTI_HOTEND case ITEM_E1: draw_heater_status(x, y, H_E1); break; #endif - #ifdef ITEM_E2 + #if HOTENDS > 2 case ITEM_E2: draw_heater_status(x, y, H_E2); break; #endif - #ifdef ITEM_BED + #if HAS_HEATED_BED case ITEM_BED: draw_heater_status(x, y, H_BED); break; #endif - #ifdef ITEM_CHAMBER + #if HAS_TEMP_CHAMBER case ITEM_CHAMBER: draw_heater_status(x, y, H_CHAMBER); break; #endif - #ifdef ITEM_COOLER + #if HAS_TEMP_COOLER case ITEM_COOLER: draw_heater_status(x, y, H_COOLER); break; #endif - #ifdef ITEM_FAN + #if HAS_FAN case ITEM_FAN: draw_fan_status(x, y, blink); break; #endif } @@ -320,7 +320,7 @@ void MarlinUI::draw_status_screen() { #if ENABLED(TOUCH_SCREEN) add_control(404, y, menu_main, imgSettings); - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA const bool cm = card.isMounted(), pa = printingIsActive(); if (cm && pa) add_control(12, y, STOP, imgCancel, true, COLOR_CONTROL_CANCEL); diff --git a/Marlin/src/lcd/tft/ui_common.cpp b/Marlin/src/lcd/tft/ui_common.cpp index 6fbde791548d..962daadb19c5 100644 --- a/Marlin/src/lcd/tft/ui_common.cpp +++ b/Marlin/src/lcd/tft/ui_common.cpp @@ -164,14 +164,31 @@ void MenuEditItemBase::draw(const bool sel, const uint8_t row, FSTR_P const fstr } // Draw a static item with no left-right margin required. Centered by default. -void MenuItem_static::draw(const uint8_t row, FSTR_P const fstr, const uint8_t style/*=SS_DEFAULT*/, const char * const vstr/*=nullptr*/) { +void MenuItem_static::draw(const uint8_t row, FSTR_P const fstr, const uint8_t style/*=SS_DEFAULT*/, const char *vstr/*=nullptr*/) { menu_item(row); + tft_string.set(fstr, itemIndex, itemStringC, itemStringF); - if (vstr) tft_string.add(vstr); - tft.add_text(tft_string.center(TFT_WIDTH), MENU_TEXT_Y_OFFSET, COLOR_YELLOW, tft_string); + + const bool center = bool(style & SS_CENTER), full = bool(style & SS_FULL); + if (!full || !vstr) { + if (vstr) tft_string.add(vstr); + tft.add_text(center ? tft_string.center(TFT_WIDTH) : 0, MENU_TEXT_Y_OFFSET, COLOR_YELLOW, tft_string); + return; + } + + // Move the leading colon from the value to the label + if (*vstr == ':') { tft_string.add(':'); vstr++; } + + // Left-justified label + tft.add_text(0, MENU_TEXT_Y_OFFSET, COLOR_YELLOW, tft_string); + + // Right-justified value, after spaces + while (*vstr == ' ') vstr++; + tft_string.set(vstr); + tft.add_text(TFT_WIDTH - 1 - tft_string.width(), MENU_TEXT_Y_OFFSET, COLOR_YELLOW, tft_string); } -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA void MenuItem_sdbase::draw(const bool sel, const uint8_t row, FSTR_P const, CardReader &theCard, const bool isDir) { menu_item(row, sel); diff --git a/Marlin/src/lcd/tft/ui_common.h b/Marlin/src/lcd/tft/ui_common.h index 7329c31a52a5..2a81ee2114b3 100644 --- a/Marlin/src/lcd/tft/ui_common.h +++ b/Marlin/src/lcd/tft/ui_common.h @@ -57,32 +57,15 @@ void menu_item(const uint8_t row, bool sel = false); #define ABSOLUTE_ZERO -273.15 -#if HAS_TEMP_CHAMBER && HAS_MULTI_HOTEND - #define ITEM_E0 0 - #define ITEM_E1 1 - #define ITEM_BED 2 - #define ITEM_CHAMBER 3 - #define ITEM_FAN 4 - #define ITEMS_COUNT 5 -#elif HAS_TEMP_CHAMBER - #define ITEM_E0 0 - #define ITEM_BED 1 - #define ITEM_CHAMBER 2 - #define ITEM_FAN 3 - #define ITEMS_COUNT 4 -#elif HAS_TEMP_COOLER - #define ITEM_COOLER 0 - #define ITEM_FAN 1 - #define ITEMS_COUNT 2 -#elif HAS_MULTI_HOTEND - #define ITEM_E0 0 - #define ITEM_E1 1 - #define ITEM_BED 2 - #define ITEM_FAN 3 - #define ITEMS_COUNT 4 -#else - #define ITEM_E0 0 - #define ITEM_BED 1 - #define ITEM_FAN 2 - #define ITEMS_COUNT 3 -#endif +enum { + OPTITEM(HAS_EXTRUDERS, ITEM_E0) + OPTITEM(HAS_MULTI_HOTEND, ITEM_E1) + #if HOTENDS > 2 + ITEM_E2, + #endif + OPTITEM(HAS_HEATED_BED, ITEM_BED) + OPTITEM(HAS_TEMP_CHAMBER, ITEM_CHAMBER) + OPTITEM(HAS_TEMP_COOLER, ITEM_COOLER) + OPTITEM(HAS_FAN, ITEM_FAN) + ITEMS_COUNT +}; diff --git a/Marlin/src/lcd/tft_io/ili9488.h b/Marlin/src/lcd/tft_io/ili9488.h index fc2add662dbb..f28d411bbd4e 100644 --- a/Marlin/src/lcd/tft_io/ili9488.h +++ b/Marlin/src/lcd/tft_io/ili9488.h @@ -146,16 +146,6 @@ #define ILI9488_ADJCTL6 0xFC // Adjust Control 6 #define ILI9488_ADJCTL7 0xFF // Adjust Control 7 -#if 0 - // https://forum.mikroe.com/viewtopic.php?t=74586 - #if ANY(MKS_ROBIN_TFT35, TFT_TRONXY_X5SA, ANYCUBIC_TFT35) // ILI9488 - #define TFT_DRIVER ILI9488 - #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY | TFT_INVERT_X | TFT_INVERT_Y) - #define TFT_RES_480x320 - #define TFT_INTERFACE_FSMC - #endif -#endif - static const uint16_t ili9488_init[] = { DATASIZE_8BIT, ESC_REG(ILI9488_SWRESET), ESC_DELAY(120), diff --git a/Marlin/src/lcd/tft_io/tft_io.h b/Marlin/src/lcd/tft_io/tft_io.h index 7dd973ef704e..673bb07d5f9a 100644 --- a/Marlin/src/lcd/tft_io/tft_io.h +++ b/Marlin/src/lcd/tft_io/tft_io.h @@ -24,11 +24,11 @@ #include "../../inc/MarlinConfig.h" #if HAS_SPI_TFT - #include HAL_PATH(../../HAL, tft/tft_spi.h) + #include HAL_PATH(../.., tft/tft_spi.h) #elif HAS_FSMC_TFT - #include HAL_PATH(../../HAL, tft/tft_fsmc.h) + #include HAL_PATH(../.., tft/tft_fsmc.h) #elif HAS_LTDC_TFT - #include HAL_PATH(../../HAL, tft/tft_ltdc.h) + #include HAL_PATH(../.., tft/tft_ltdc.h) #else #error "TFT IO only supports SPI, FSMC or LTDC interface." #endif @@ -37,8 +37,6 @@ #error "DMA_MAX_SIZE is not configured for this platform." #endif -#include "tft_orientation.h" - #ifndef TFT_DRIVER #define TFT_DRIVER AUTO #endif diff --git a/Marlin/src/lcd/tft_io/tft_orientation.h b/Marlin/src/lcd/tft_io/tft_orientation.h index c2c86435b2c0..99c6a13c6446 100644 --- a/Marlin/src/lcd/tft_io/tft_orientation.h +++ b/Marlin/src/lcd/tft_io/tft_orientation.h @@ -66,19 +66,3 @@ #define TOUCH_ORIENTATION_NONE 0 #define TOUCH_LANDSCAPE 1 #define TOUCH_PORTRAIT 2 - -#ifndef TOUCH_CALIBRATION_X - #define TOUCH_CALIBRATION_X 0 -#endif -#ifndef TOUCH_CALIBRATION_Y - #define TOUCH_CALIBRATION_Y 0 -#endif -#ifndef TOUCH_OFFSET_X - #define TOUCH_OFFSET_X 0 -#endif -#ifndef TOUCH_OFFSET_Y - #define TOUCH_OFFSET_Y 0 -#endif -#ifndef TOUCH_ORIENTATION - #define TOUCH_ORIENTATION TOUCH_LANDSCAPE -#endif diff --git a/Marlin/src/lcd/tft_io/touch_calibration.h b/Marlin/src/lcd/tft_io/touch_calibration.h index 030b4977db51..e9d3110c56d6 100644 --- a/Marlin/src/lcd/tft_io/touch_calibration.h +++ b/Marlin/src/lcd/tft_io/touch_calibration.h @@ -21,13 +21,11 @@ */ #pragma once -#include "../../inc/MarlinConfigPre.h" -#include "tft_io.h" +#include "../../inc/MarlinConfig.h" #ifndef TOUCH_SCREEN_CALIBRATION_PRECISION #define TOUCH_SCREEN_CALIBRATION_PRECISION 80 #endif - #ifndef TOUCH_SCREEN_HOLD_TO_CALIBRATE_MS #define TOUCH_SCREEN_HOLD_TO_CALIBRATE_MS 2500 #endif diff --git a/Marlin/src/lcd/touch/touch_buttons.cpp b/Marlin/src/lcd/touch/touch_buttons.cpp index 08554de0d3ca..2e996f30ce5f 100644 --- a/Marlin/src/lcd/touch/touch_buttons.cpp +++ b/Marlin/src/lcd/touch/touch_buttons.cpp @@ -28,10 +28,10 @@ #include "../scaled_tft.h" #if ENABLED(TFT_TOUCH_DEVICE_GT911) - #include HAL_PATH(../../HAL, tft/gt911.h) + #include HAL_PATH(../.., tft/gt911.h) GT911 touchIO; #elif ENABLED(TFT_TOUCH_DEVICE_XPT2046) - #include HAL_PATH(../../HAL, tft/xpt2046.h) + #include HAL_PATH(../.., tft/xpt2046.h) XPT2046 touchIO; #else #error "Unknown Touch Screen Type." @@ -65,7 +65,7 @@ void TouchButtons::init() { } uint8_t TouchButtons::read_buttons() { - #ifdef HAS_WIRED_LCD + #if HAS_WIRED_LCD int16_t x, y; #if ENABLED(TFT_TOUCH_DEVICE_XPT2046) diff --git a/Marlin/src/lcd/fontutils.cpp b/Marlin/src/lcd/utf8.cpp similarity index 97% rename from Marlin/src/lcd/fontutils.cpp rename to Marlin/src/lcd/utf8.cpp index 46329fd4be62..075f8b0c7c93 100644 --- a/Marlin/src/lcd/fontutils.cpp +++ b/Marlin/src/lcd/utf8.cpp @@ -21,14 +21,18 @@ */ /** - * @file fontutils.cpp - * @brief help functions for font and char + * @file utf8.cpp + * @brief Helper functions for UTF-8 strings * @author Yunhui Fu (yhfudev@gmail.com) * @version 1.0 * @date 2016-08-19 * @copyright GPL/BSD */ +#include "../inc/MarlinConfigPre.h" + +#if HAS_UTF8_UTILS + #include "../inc/MarlinConfig.h" #if HAS_WIRED_LCD @@ -36,7 +40,7 @@ #include "../MarlinCore.h" #endif -#include "fontutils.h" +#include "utf8.h" uint8_t read_byte_ram(const uint8_t *str) { return *str; } uint8_t read_byte_rom(const uint8_t *str) { return pgm_read_byte(str); } @@ -203,3 +207,5 @@ uint8_t utf8_byte_pos_by_char_num(const char *pstart, const uint8_t charnum) { uint8_t utf8_byte_pos_by_char_num_P(PGM_P pstart, const uint8_t charnum) { return utf8_byte_pos_by_char_num_cb(pstart, read_byte_rom, charnum); } + +#endif // HAS_UTF8_UTILS diff --git a/Marlin/src/lcd/fontutils.h b/Marlin/src/lcd/utf8.h similarity index 97% rename from Marlin/src/lcd/fontutils.h rename to Marlin/src/lcd/utf8.h index 69edf1a0c839..603181857174 100644 --- a/Marlin/src/lcd/fontutils.h +++ b/Marlin/src/lcd/utf8.h @@ -21,8 +21,8 @@ */ /** - * @file fontutils.h - * @brief help functions for font and char + * @file utf8.h + * @brief Helper functions for UTF-8 strings * @author Yunhui Fu (yhfudev@gmail.com) * @version 1.0 * @date 2016-08-19 diff --git a/Marlin/src/libs/MAX31865.h b/Marlin/src/libs/MAX31865.h index 95bde756cee7..3e9b0c139ff6 100644 --- a/Marlin/src/libs/MAX31865.h +++ b/Marlin/src/libs/MAX31865.h @@ -45,7 +45,7 @@ #include "../inc/MarlinConfig.h" #include "../HAL/shared/Delay.h" -#include HAL_PATH(../HAL, MarlinSPI.h) +#include HAL_PATH(.., MarlinSPI.h) #define MAX31865_CONFIG_REG 0x00 #define MAX31865_CONFIG_BIAS 0x80 diff --git a/Marlin/src/libs/W25Qxx.h b/Marlin/src/libs/W25Qxx.h index 778463477d82..55490b025256 100644 --- a/Marlin/src/libs/W25Qxx.h +++ b/Marlin/src/libs/W25Qxx.h @@ -23,7 +23,7 @@ #include -#include HAL_PATH(../HAL, MarlinSPI.h) +#include HAL_PATH(.., MarlinSPI.h) #define W25X_WriteEnable 0x06 #define W25X_WriteDisable 0x04 diff --git a/Marlin/src/libs/buzzer.h b/Marlin/src/libs/buzzer.h index aa4d48ae5dd1..f6d5b49d7397 100644 --- a/Marlin/src/libs/buzzer.h +++ b/Marlin/src/libs/buzzer.h @@ -117,21 +117,20 @@ extern Buzzer buzzer; // Buzz directly via the BEEPER pin tone queue - #define BUZZ(d,f) buzzer.tone(d, f) + #define BUZZ(V...) buzzer.tone(V) #elif USE_MARLINUI_BUZZER // Use MarlinUI for a buzzer on the LCD - #include "../lcd/marlinui.h" - #define BUZZ(d,f) ui.buzz(d,f) + #define BUZZ(V...) ui.buzz(V) #else // No buzz capability - #define BUZZ(d,f) NOOP + #define BUZZ(...) NOOP #endif -#define ERR_BUZZ() BUZZ(400, 40); -#define OKAY_BUZZ() do{ BUZZ(100, 659); BUZZ(10, 0); BUZZ(100, 698); }while(0) -#define DONE_BUZZ(OK) do{ if (OK) OKAY_BUZZ(); else ERR_BUZZ(); }while(0) +#define ERR_BUZZ() BUZZ(400, 40) +#define OKAY_BUZZ() do{ BUZZ(100, 659); BUZZ(10); BUZZ(100, 698); }while(0) +#define DONE_BUZZ(ok) do{ if (ok) OKAY_BUZZ(); else ERR_BUZZ(); }while(0) diff --git a/Marlin/src/libs/nozzle.cpp b/Marlin/src/libs/nozzle.cpp index 74f61c33d018..e675c53cb106 100644 --- a/Marlin/src/libs/nozzle.cpp +++ b/Marlin/src/libs/nozzle.cpp @@ -37,119 +37,125 @@ Nozzle nozzle; #if ENABLED(NOZZLE_CLEAN_FEATURE) - /** - * @brief Stroke clean pattern - * @details Wipes the nozzle back and forth in a linear movement - * - * @param start xyz_pos_t defining the starting point - * @param end xyz_pos_t defining the ending point - * @param strokes number of strokes to execute - */ - void Nozzle::stroke(const xyz_pos_t &start, const xyz_pos_t &end, const uint8_t &strokes) { - #if ENABLED(NOZZLE_CLEAN_GOBACK) - const xyz_pos_t oldpos = current_position; - #endif - - // Move to the starting point - #if ENABLED(NOZZLE_CLEAN_NO_Z) - #if ENABLED(NOZZLE_CLEAN_NO_Y) - do_blocking_move_to_x(start.x); - #else - do_blocking_move_to_xy(start); + #if ENABLED(NOZZLE_CLEAN_PATTERN_LINE) + /** + * @brief Stroke clean pattern + * @details Wipes the nozzle back and forth in a linear movement + * + * @param start xyz_pos_t defining the starting point + * @param end xyz_pos_t defining the ending point + * @param strokes number of strokes to execute + */ + void Nozzle::stroke(const xyz_pos_t &start, const xyz_pos_t &end, const uint8_t strokes) { + #if ENABLED(NOZZLE_CLEAN_GOBACK) + const xyz_pos_t oldpos = current_position; #endif - #else - do_blocking_move_to(start); - #endif - // Start the stroke pattern - LOOP_L_N(i, strokes >> 1) { - #if ENABLED(NOZZLE_CLEAN_NO_Y) - do_blocking_move_to_x(end.x); - do_blocking_move_to_x(start.x); + // Move to the starting point + #if ENABLED(NOZZLE_CLEAN_NO_Z) + #if ENABLED(NOZZLE_CLEAN_NO_Y) + do_blocking_move_to_x(start.x); + #else + do_blocking_move_to_xy(start); + #endif #else - do_blocking_move_to_xy(end); - do_blocking_move_to_xy(start); + do_blocking_move_to(start); #endif - } - - TERN_(NOZZLE_CLEAN_GOBACK, do_blocking_move_to(oldpos)); - } - - /** - * @brief Zig-zag clean pattern - * @details Apply a zig-zag cleaning pattern - * - * @param start xyz_pos_t defining the starting point - * @param end xyz_pos_t defining the ending point - * @param strokes number of strokes to execute - * @param objects number of triangles to do - */ - void Nozzle::zigzag(const xyz_pos_t &start, const xyz_pos_t &end, const uint8_t &strokes, const uint8_t &objects) { - const xy_pos_t diff = end - start; - if (!diff.x || !diff.y) return; - - #if ENABLED(NOZZLE_CLEAN_GOBACK) - const xyz_pos_t back = current_position; - #endif - #if ENABLED(NOZZLE_CLEAN_NO_Z) - do_blocking_move_to_xy(start); - #else - do_blocking_move_to(start); - #endif - - const uint8_t zigs = objects << 1; - const bool horiz = ABS(diff.x) >= ABS(diff.y); // Do a horizontal wipe? - const float P = (horiz ? diff.x : diff.y) / zigs; // Period of each zig / zag - const xyz_pos_t *side; - LOOP_L_N(j, strokes) { - for (int8_t i = 0; i < zigs; i++) { - side = (i & 1) ? &end : &start; - if (horiz) - do_blocking_move_to_xy(start.x + i * P, side->y); - else - do_blocking_move_to_xy(side->x, start.y + i * P); - } - for (int8_t i = zigs; i >= 0; i--) { - side = (i & 1) ? &end : &start; - if (horiz) - do_blocking_move_to_xy(start.x + i * P, side->y); - else - do_blocking_move_to_xy(side->x, start.y + i * P); + // Start the stroke pattern + LOOP_L_N(i, strokes >> 1) { + #if ENABLED(NOZZLE_CLEAN_NO_Y) + do_blocking_move_to_x(end.x); + do_blocking_move_to_x(start.x); + #else + do_blocking_move_to_xy(end); + do_blocking_move_to_xy(start); + #endif } + + TERN_(NOZZLE_CLEAN_GOBACK, do_blocking_move_to(oldpos)); } + #endif + + #if ENABLED(NOZZLE_CLEAN_PATTERN_ZIGZAG) + /** + * @brief Zig-zag clean pattern + * @details Apply a zig-zag cleaning pattern + * + * @param start xyz_pos_t defining the starting point + * @param end xyz_pos_t defining the ending point + * @param strokes number of strokes to execute + * @param objects number of triangles to do + */ + void Nozzle::zigzag(const xyz_pos_t &start, const xyz_pos_t &end, const uint8_t strokes, const uint8_t objects) { + const xy_pos_t diff = end - start; + if (!diff.x || !diff.y) return; + + #if ENABLED(NOZZLE_CLEAN_GOBACK) + const xyz_pos_t back = current_position; + #endif - TERN_(NOZZLE_CLEAN_GOBACK, do_blocking_move_to(back)); - } + #if ENABLED(NOZZLE_CLEAN_NO_Z) + do_blocking_move_to_xy(start); + #else + do_blocking_move_to(start); + #endif - /** - * @brief Circular clean pattern - * @details Apply a circular cleaning pattern - * - * @param start xyz_pos_t defining the middle of circle - * @param strokes number of strokes to execute - * @param radius radius of circle - */ - void Nozzle::circle(const xyz_pos_t &start, const xyz_pos_t &middle, const uint8_t &strokes, const_float_t radius) { - if (strokes == 0) return; + const uint8_t zigs = objects << 1; + const bool horiz = ABS(diff.x) >= ABS(diff.y); // Do a horizontal wipe? + const float P = (horiz ? diff.x : diff.y) / zigs; // Period of each zig / zag + const xyz_pos_t *side; + LOOP_L_N(j, strokes) { + for (int8_t i = 0; i < zigs; i++) { + side = (i & 1) ? &end : &start; + if (horiz) + do_blocking_move_to_xy(start.x + i * P, side->y); + else + do_blocking_move_to_xy(side->x, start.y + i * P); + } + for (int8_t i = zigs; i >= 0; i--) { + side = (i & 1) ? &end : &start; + if (horiz) + do_blocking_move_to_xy(start.x + i * P, side->y); + else + do_blocking_move_to_xy(side->x, start.y + i * P); + } + } - #if ENABLED(NOZZLE_CLEAN_GOBACK) - const xyz_pos_t back = current_position; - #endif - TERN(NOZZLE_CLEAN_NO_Z, do_blocking_move_to_xy, do_blocking_move_to)(start); + TERN_(NOZZLE_CLEAN_GOBACK, do_blocking_move_to(back)); + } + #endif + + #if ENABLED(NOZZLE_CLEAN_PATTERN_CIRCLE) + /** + * @brief Circular clean pattern + * @details Apply a circular cleaning pattern + * + * @param start xyz_pos_t defining the middle of circle + * @param strokes number of strokes to execute + * @param radius radius of circle + */ + void Nozzle::circle(const xyz_pos_t &start, const xyz_pos_t &middle, const uint8_t strokes, const_float_t radius) { + if (strokes == 0) return; + + #if ENABLED(NOZZLE_CLEAN_GOBACK) + const xyz_pos_t back = current_position; + #endif + TERN(NOZZLE_CLEAN_NO_Z, do_blocking_move_to_xy, do_blocking_move_to)(start); - LOOP_L_N(s, strokes) - LOOP_L_N(i, NOZZLE_CLEAN_CIRCLE_FN) - do_blocking_move_to_xy( - middle.x + sin((RADIANS(360) / NOZZLE_CLEAN_CIRCLE_FN) * i) * radius, - middle.y + cos((RADIANS(360) / NOZZLE_CLEAN_CIRCLE_FN) * i) * radius - ); + LOOP_L_N(s, strokes) + LOOP_L_N(i, NOZZLE_CLEAN_CIRCLE_FN) + do_blocking_move_to_xy( + middle.x + sin((RADIANS(360) / NOZZLE_CLEAN_CIRCLE_FN) * i) * radius, + middle.y + cos((RADIANS(360) / NOZZLE_CLEAN_CIRCLE_FN) * i) * radius + ); - // Let's be safe - do_blocking_move_to_xy(start); + // Let's be safe + do_blocking_move_to_xy(start); - TERN_(NOZZLE_CLEAN_GOBACK, do_blocking_move_to(back)); - } + TERN_(NOZZLE_CLEAN_GOBACK, do_blocking_move_to(back)); + } + #endif /** * @brief Clean the nozzle @@ -158,11 +164,26 @@ Nozzle nozzle; * @param pattern one of the available patterns * @param argument depends on the cleaning pattern */ - void Nozzle::clean(const uint8_t &pattern, const uint8_t &strokes, const_float_t radius, const uint8_t &objects, const uint8_t cleans) { - xyz_pos_t start[HOTENDS] = NOZZLE_CLEAN_START_POINT, end[HOTENDS] = NOZZLE_CLEAN_END_POINT, middle[HOTENDS] = NOZZLE_CLEAN_CIRCLE_MIDDLE; + void Nozzle::clean(const uint8_t pattern, const uint8_t strokes, const_float_t radius, const uint8_t objects, const uint8_t cleans) { + xyz_pos_t start[HOTENDS] = NOZZLE_CLEAN_START_POINT, end[HOTENDS] = NOZZLE_CLEAN_END_POINT; + #if ENABLED(NOZZLE_CLEAN_PATTERN_CIRCLE) + xyz_pos_t middle[HOTENDS] = NOZZLE_CLEAN_CIRCLE_MIDDLE; + #endif const uint8_t arrPos = EITHER(SINGLENOZZLE, MIXING_EXTRUDER) ? 0 : active_extruder; + switch (pattern) { + #if DISABLED(NOZZLE_CLEAN_PATTERN_LINE) + case 0: SERIAL_ECHOLNPGM("Pattern ", F("LINE"), " not enabled."); return; + #endif + #if DISABLED(NOZZLE_CLEAN_PATTERN_ZIGZAG) + case 1: SERIAL_ECHOLNPGM("Pattern ", F("ZIGZAG"), " not enabled."); return; + #endif + #if DISABLED(NOZZLE_CLEAN_PATTERN_CIRCLE) + case 2: SERIAL_ECHOLNPGM("Pattern ", F("CIRCULAR"), " not enabled."); return; + #endif + } + #if NOZZLE_CLEAN_MIN_TEMP > 20 if (thermalManager.degTargetHotend(arrPos) < NOZZLE_CLEAN_MIN_TEMP) { #if ENABLED(NOZZLE_CLEAN_HEATUP) @@ -179,45 +200,46 @@ Nozzle nozzle; #if HAS_SOFTWARE_ENDSTOPS #define LIMIT_AXIS(A) do{ \ - LIMIT( start[arrPos].A, soft_endstop.min.A, soft_endstop.max.A); \ - LIMIT(middle[arrPos].A, soft_endstop.min.A, soft_endstop.max.A); \ - LIMIT( end[arrPos].A, soft_endstop.min.A, soft_endstop.max.A); \ + LIMIT( start[arrPos].A, soft_endstop.min.A, soft_endstop.max.A); \ + LIMIT( end[arrPos].A, soft_endstop.min.A, soft_endstop.max.A); \ + TERN_(NOZZLE_CLEAN_PATTERN_CIRCLE, LIMIT(middle[arrPos].A, soft_endstop.min.A, soft_endstop.max.A)); \ }while(0) if (soft_endstop.enabled()) { - - LIMIT_AXIS(x); - LIMIT_AXIS(y); - LIMIT_AXIS(z); - const bool radiusOutOfRange = (middle[arrPos].x + radius > soft_endstop.max.x) - || (middle[arrPos].x - radius < soft_endstop.min.x) - || (middle[arrPos].y + radius > soft_endstop.max.y) - || (middle[arrPos].y - radius < soft_endstop.min.y); - if (radiusOutOfRange && pattern == 2) { - SERIAL_ECHOLNPGM("Warning: Radius Out of Range"); - return; - } - + LIMIT_AXIS(x); LIMIT_AXIS(y); LIMIT_AXIS(z); + #if ENABLED(NOZZLE_CLEAN_PATTERN_CIRCLE) + if (pattern == 2 && !(WITHIN(middle[arrPos].x, soft_endstop.min.x + radius, soft_endstop.max.x - radius) + && WITHIN(middle[arrPos].y, soft_endstop.min.y + radius, soft_endstop.max.y - radius)) + ) { + SERIAL_ECHOLNPGM("Warning: Radius Out of Range"); return; + } + #endif } #endif - if (pattern == 2) { - if (!(cleans & (_BV(X_AXIS) | _BV(Y_AXIS)))) { - SERIAL_ECHOLNPGM("Warning: Clean Circle requires XY"); - return; + #if ENABLED(NOZZLE_CLEAN_PATTERN_CIRCLE) + if (pattern == 2 && !(cleans & (_BV(X_AXIS) | _BV(Y_AXIS)))) { + SERIAL_ECHOLNPGM("Warning: Clean Circle requires XY"); return; } - } - else { + #endif + + if (TERN1(NOZZLE_CLEAN_PATTERN_CIRCLE, pattern != 2)) { if (!TEST(cleans, X_AXIS)) start[arrPos].x = end[arrPos].x = current_position.x; if (!TEST(cleans, Y_AXIS)) start[arrPos].y = end[arrPos].y = current_position.y; } if (!TEST(cleans, Z_AXIS)) start[arrPos].z = end[arrPos].z = current_position.z; - switch (pattern) { - case 1: zigzag(start[arrPos], end[arrPos], strokes, objects); break; - case 2: circle(start[arrPos], middle[arrPos], strokes, radius); break; - default: stroke(start[arrPos], end[arrPos], strokes); + switch (pattern) { // no default clause as pattern is already validated + #if ENABLED(NOZZLE_CLEAN_PATTERN_LINE) + case 0: stroke(start[arrPos], end[arrPos], strokes); break; + #endif + #if ENABLED(NOZZLE_CLEAN_PATTERN_ZIGZAG) + case 1: zigzag(start[arrPos], end[arrPos], strokes, objects); break; + #endif + #if ENABLED(NOZZLE_CLEAN_PATTERN_CIRCLE) + case 2: circle(start[arrPos], middle[arrPos], strokes, radius); break; + #endif } } diff --git a/Marlin/src/libs/nozzle.h b/Marlin/src/libs/nozzle.h index 69790f5a6786..fb47c867f2a5 100644 --- a/Marlin/src/libs/nozzle.h +++ b/Marlin/src/libs/nozzle.h @@ -41,7 +41,7 @@ class Nozzle { * @param end xyz_pos_t defining the ending point * @param strokes number of strokes to execute */ - static void stroke(const xyz_pos_t &start, const xyz_pos_t &end, const uint8_t &strokes) __Os; + static void stroke(const xyz_pos_t &start, const xyz_pos_t &end, const uint8_t strokes) __Os; /** * @brief Zig-zag clean pattern @@ -52,7 +52,7 @@ class Nozzle { * @param strokes number of strokes to execute * @param objects number of objects to create */ - static void zigzag(const xyz_pos_t &start, const xyz_pos_t &end, const uint8_t &strokes, const uint8_t &objects) __Os; + static void zigzag(const xyz_pos_t &start, const xyz_pos_t &end, const uint8_t strokes, const uint8_t objects) __Os; /** * @brief Circular clean pattern @@ -62,7 +62,7 @@ class Nozzle { * @param strokes number of strokes to execute * @param radius radius of circle */ - static void circle(const xyz_pos_t &start, const xyz_pos_t &middle, const uint8_t &strokes, const_float_t radius) __Os; + static void circle(const xyz_pos_t &start, const xyz_pos_t &middle, const uint8_t strokes, const_float_t radius) __Os; #endif // NOZZLE_CLEAN_FEATURE @@ -77,7 +77,7 @@ class Nozzle { * @param pattern one of the available patterns * @param argument depends on the cleaning pattern */ - static void clean(const uint8_t &pattern, const uint8_t &strokes, const_float_t radius, const uint8_t &objects, const uint8_t cleans) __Os; + static void clean(const uint8_t pattern, const uint8_t strokes, const_float_t radius, const uint8_t objects, const uint8_t cleans) __Os; #endif // NOZZLE_CLEAN_FEATURE diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index 02af062eca68..ca231f1cb2be 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -35,10 +35,10 @@ #include "../core/debug_out.h" #if ENABLED(ENDSTOP_INTERRUPTS_FEATURE) - #include HAL_PATH(../HAL, endstop_interrupts.h) + #include HAL_PATH(.., endstop_interrupts.h) #endif -#if BOTH(SD_ABORT_ON_ENDSTOP_HIT, SDSUPPORT) +#if BOTH(SD_ABORT_ON_ENDSTOP_HIT, HAS_MEDIA) #include "printcounter.h" // for print_job_timer #endif @@ -134,7 +134,7 @@ void Endstops::init() { #if HAS_Y2_MAX _INIT_ENDSTOP(MAX,Y,2); #endif - #if HAS_Z_MIN + #if HAS_Z_MIN_PIN _INIT_ENDSTOP(MIN,Z,); #endif #if HAS_Z_MAX @@ -352,7 +352,7 @@ void Endstops::event_handler() { ) ); - #if BOTH(SD_ABORT_ON_ENDSTOP_HIT, SDSUPPORT) + #if BOTH(SD_ABORT_ON_ENDSTOP_HIT, HAS_MEDIA) if (planner.abort_on_endstop_hit) { card.abortFilePrintNow(); quickstop_stepper(); @@ -514,12 +514,12 @@ void Endstops::update() { #endif // Macros to update / copy the live_state - #define UPDATE_ENDSTOP_BIT(AXIS, MINMAX) SET_BIT_TO(live_state, _ENDSTOP(AXIS, MINMAX), (READ_ENDSTOP(_ENDSTOP_PIN(AXIS, MINMAX)) == _ENDSTOP_HIT_STATE(AXIS, MINMAX))) + #define UPDATE_LIVE_STATE(AXIS, MINMAX) SET_BIT_TO(live_state, _ENDSTOP(AXIS, MINMAX), (READ_ENDSTOP(_ENDSTOP_PIN(AXIS, MINMAX)) == _ENDSTOP_HIT_STATE(AXIS, MINMAX))) #define COPY_LIVE_STATE(SRC_BIT, DST_BIT) SET_BIT_TO(live_state, DST_BIT, TEST(live_state, SRC_BIT)) #if ENABLED(G38_PROBE_TARGET) // For G38 moves check the probe's pin for ALL movement - if (G38_move) UPDATE_ENDSTOP_BIT(Z, TERN(USES_Z_MIN_PROBE_PIN, MIN_PROBE, MIN)); + if (G38_move) UPDATE_LIVE_STATE(Z, TERN(USES_Z_MIN_PROBE_PIN, MIN_PROBE, MIN)); #endif // With Dual X, endstops are only checked in the homing direction for the active extruder @@ -554,10 +554,10 @@ void Endstops::update() { * Check and update endstops */ #if HAS_X_MIN && !X_SPI_SENSORLESS - UPDATE_ENDSTOP_BIT(X, MIN); + UPDATE_LIVE_STATE(X, MIN); #if ENABLED(X_DUAL_ENDSTOPS) #if HAS_X2_MIN - UPDATE_ENDSTOP_BIT(X2, MIN); + UPDATE_LIVE_STATE(X2, MIN); #else COPY_LIVE_STATE(X_MIN, X2_MIN); #endif @@ -565,10 +565,10 @@ void Endstops::update() { #endif #if HAS_X_MAX && !X_SPI_SENSORLESS - UPDATE_ENDSTOP_BIT(X, MAX); + UPDATE_LIVE_STATE(X, MAX); #if ENABLED(X_DUAL_ENDSTOPS) #if HAS_X2_MAX - UPDATE_ENDSTOP_BIT(X2, MAX); + UPDATE_LIVE_STATE(X2, MAX); #else COPY_LIVE_STATE(X_MAX, X2_MAX); #endif @@ -576,10 +576,10 @@ void Endstops::update() { #endif #if HAS_Y_MIN && !Y_SPI_SENSORLESS - UPDATE_ENDSTOP_BIT(Y, MIN); + UPDATE_LIVE_STATE(Y, MIN); #if ENABLED(Y_DUAL_ENDSTOPS) #if HAS_Y2_MIN - UPDATE_ENDSTOP_BIT(Y2, MIN); + UPDATE_LIVE_STATE(Y2, MIN); #else COPY_LIVE_STATE(Y_MIN, Y2_MIN); #endif @@ -587,10 +587,10 @@ void Endstops::update() { #endif #if HAS_Y_MAX && !Y_SPI_SENSORLESS - UPDATE_ENDSTOP_BIT(Y, MAX); + UPDATE_LIVE_STATE(Y, MAX); #if ENABLED(Y_DUAL_ENDSTOPS) #if HAS_Y2_MAX - UPDATE_ENDSTOP_BIT(Y2, MAX); + UPDATE_LIVE_STATE(Y2, MAX); #else COPY_LIVE_STATE(Y_MAX, Y2_MAX); #endif @@ -598,23 +598,25 @@ void Endstops::update() { #endif #if HAS_Z_MIN && NONE(Z_SPI_SENSORLESS, Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) - UPDATE_ENDSTOP_BIT(Z, MIN); + #if HAS_Z_MIN_PIN + UPDATE_LIVE_STATE(Z, MIN); + #endif #if ENABLED(Z_MULTI_ENDSTOPS) #if HAS_Z2_MIN - UPDATE_ENDSTOP_BIT(Z2, MIN); + UPDATE_LIVE_STATE(Z2, MIN); #else COPY_LIVE_STATE(Z_MIN, Z2_MIN); #endif #if NUM_Z_STEPPERS >= 3 #if HAS_Z3_MIN - UPDATE_ENDSTOP_BIT(Z3, MIN); + UPDATE_LIVE_STATE(Z3, MIN); #else COPY_LIVE_STATE(Z_MIN, Z3_MIN); #endif #endif #if NUM_Z_STEPPERS >= 4 #if HAS_Z4_MIN - UPDATE_ENDSTOP_BIT(Z4, MIN); + UPDATE_LIVE_STATE(Z4, MIN); #else COPY_LIVE_STATE(Z_MIN, Z4_MIN); #endif @@ -625,189 +627,129 @@ void Endstops::update() { #if HAS_BED_PROBE // When closing the gap check the enabled probe if (probe_switch_activated()) - UPDATE_ENDSTOP_BIT(Z, TERN(USES_Z_MIN_PROBE_PIN, MIN_PROBE, MIN)); + UPDATE_LIVE_STATE(Z, TERN(USES_Z_MIN_PROBE_PIN, MIN_PROBE, MIN)); #endif #if HAS_Z_MAX && !Z_SPI_SENSORLESS // Check both Z dual endstops #if ENABLED(Z_MULTI_ENDSTOPS) - UPDATE_ENDSTOP_BIT(Z, MAX); + UPDATE_LIVE_STATE(Z, MAX); #if HAS_Z2_MAX - UPDATE_ENDSTOP_BIT(Z2, MAX); + UPDATE_LIVE_STATE(Z2, MAX); #else COPY_LIVE_STATE(Z_MAX, Z2_MAX); #endif #if NUM_Z_STEPPERS >= 3 #if HAS_Z3_MAX - UPDATE_ENDSTOP_BIT(Z3, MAX); + UPDATE_LIVE_STATE(Z3, MAX); #else COPY_LIVE_STATE(Z_MAX, Z3_MAX); #endif #endif #if NUM_Z_STEPPERS >= 4 #if HAS_Z4_MAX - UPDATE_ENDSTOP_BIT(Z4, MAX); + UPDATE_LIVE_STATE(Z4, MAX); #else COPY_LIVE_STATE(Z_MAX, Z4_MAX); #endif #endif #elif TERN1(USES_Z_MIN_PROBE_PIN, Z_MAX_PIN != Z_MIN_PROBE_PIN) // If this pin isn't the bed probe it's the Z endstop - UPDATE_ENDSTOP_BIT(Z, MAX); + UPDATE_LIVE_STATE(Z, MAX); #endif #endif #if HAS_I_MIN && !I_SPI_SENSORLESS #if ENABLED(I_DUAL_ENDSTOPS) - UPDATE_ENDSTOP_BIT(I, MIN); - #if HAS_I2_MIN - UPDATE_ENDSTOP_BIT(I2, MAX); - #else - COPY_LIVE_STATE(I_MIN, I2_MIN); - #endif + UPDATE_LIVE_STATE(I, MIN); #else - UPDATE_ENDSTOP_BIT(I, MIN); + UPDATE_LIVE_STATE(I, MIN); #endif #endif #if HAS_I_MAX && !I_SPI_SENSORLESS #if ENABLED(I_DUAL_ENDSTOPS) - UPDATE_ENDSTOP_BIT(I, MAX); - #if HAS_I2_MAX - UPDATE_ENDSTOP_BIT(I2, MAX); - #else - COPY_LIVE_STATE(I_MAX, I2_MAX); - #endif + UPDATE_LIVE_STATE(I, MAX); #else - UPDATE_ENDSTOP_BIT(I, MAX); + UPDATE_LIVE_STATE(I, MAX); #endif #endif #if HAS_J_MIN && !J_SPI_SENSORLESS #if ENABLED(J_DUAL_ENDSTOPS) - UPDATE_ENDSTOP_BIT(J, MIN); - #if HAS_J2_MIN - UPDATE_ENDSTOP_BIT(J2, MIN); - #else - COPY_LIVE_STATE(J_MIN, J2_MIN); - #endif + UPDATE_LIVE_STATE(J, MIN); #else - UPDATE_ENDSTOP_BIT(J, MIN); + UPDATE_LIVE_STATE(J, MIN); #endif #endif #if HAS_J_MAX && !J_SPI_SENSORLESS #if ENABLED(J_DUAL_ENDSTOPS) - UPDATE_ENDSTOP_BIT(J, MAX); - #if HAS_J2_MAX - UPDATE_ENDSTOP_BIT(J2, MAX); - #else - COPY_LIVE_STATE(J_MAX, J2_MAX); - #endif + UPDATE_LIVE_STATE(J, MAX); #else - UPDATE_ENDSTOP_BIT(J, MAX); + UPDATE_LIVE_STATE(J, MAX); #endif #endif #if HAS_K_MIN && !K_SPI_SENSORLESS #if ENABLED(K_DUAL_ENDSTOPS) - UPDATE_ENDSTOP_BIT(K, MIN); - #if HAS_K2_MIN - UPDATE_ENDSTOP_BIT(K2, MIN); - #else - COPY_LIVE_STATE(K_MIN, K2_MIN); - #endif + UPDATE_LIVE_STATE(K, MIN); #else - UPDATE_ENDSTOP_BIT(K, MIN); + UPDATE_LIVE_STATE(K, MIN); #endif #endif #if HAS_K_MAX && !K_SPI_SENSORLESS #if ENABLED(K_DUAL_ENDSTOPS) - UPDATE_ENDSTOP_BIT(K, MAX); - #if HAS_K2_MAX - UPDATE_ENDSTOP_BIT(K2, MAX); - #else - COPY_LIVE_STATE(K_MAX, K2_MAX); - #endif + UPDATE_LIVE_STATE(K, MAX); #else - UPDATE_ENDSTOP_BIT(K, MAX); + UPDATE_LIVE_STATE(K, MAX); #endif #endif #if HAS_U_MIN && !U_SPI_SENSORLESS #if ENABLED(U_DUAL_ENDSTOPS) - UPDATE_ENDSTOP_BIT(U, MIN); - #if HAS_U2_MIN - UPDATE_ENDSTOP_BIT(U2, MIN); - #else - COPY_LIVE_STATE(U_MIN, U2_MIN); - #endif + UPDATE_LIVE_STATE(U, MIN); #else - UPDATE_ENDSTOP_BIT(U, MIN); + UPDATE_LIVE_STATE(U, MIN); #endif #endif #if HAS_U_MAX && !U_SPI_SENSORLESS #if ENABLED(U_DUAL_ENDSTOPS) - UPDATE_ENDSTOP_BIT(U, MAX); - #if HAS_U2_MAX - UPDATE_ENDSTOP_BIT(U2, MAX); - #else - COPY_LIVE_STATE(U_MAX, U2_MAX); - #endif + UPDATE_LIVE_STATE(U, MAX); #else - UPDATE_ENDSTOP_BIT(U, MAX); + UPDATE_LIVE_STATE(U, MAX); #endif #endif #if HAS_V_MIN && !V_SPI_SENSORLESS #if ENABLED(V_DUAL_ENDSTOPS) - UPDATE_ENDSTOP_BIT(V, MIN); - #if HAS_V2_MIN - UPDATE_ENDSTOP_BIT(V2, MIN); - #else - COPY_LIVE_STATE(V_MIN, V2_MIN); - #endif + UPDATE_LIVE_STATE(V, MIN); #else - UPDATE_ENDSTOP_BIT(V, MIN); + UPDATE_LIVE_STATE(V, MIN); #endif #endif #if HAS_V_MAX && !V_SPI_SENSORLESS #if ENABLED(O_DUAL_ENDSTOPS) - UPDATE_ENDSTOP_BIT(V, MAX); - #if HAS_V2_MAX - UPDATE_ENDSTOP_BIT(V2, MAX); - #else - COPY_LIVE_STATE(V_MAX, V2_MAX); - #endif + UPDATE_LIVE_STATE(V, MAX); #else - UPDATE_ENDSTOP_BIT(V, MAX); + UPDATE_LIVE_STATE(V, MAX); #endif #endif #if HAS_W_MIN && !W_SPI_SENSORLESS #if ENABLED(W_DUAL_ENDSTOPS) - UPDATE_ENDSTOP_BIT(W, MIN); - #if HAS_W2_MIN - UPDATE_ENDSTOP_BIT(W2, MIN); - #else - COPY_LIVE_STATE(W_MIN, W2_MIN); - #endif + UPDATE_LIVE_STATE(W, MIN); #else - UPDATE_ENDSTOP_BIT(W, MIN); + UPDATE_LIVE_STATE(W, MIN); #endif #endif #if HAS_W_MAX && !W_SPI_SENSORLESS #if ENABLED(W_DUAL_ENDSTOPS) - UPDATE_ENDSTOP_BIT(W, MAX); - #if HAS_W2_MAX - UPDATE_ENDSTOP_BIT(W2, MAX); - #else - COPY_LIVE_STATE(W_MAX, W2_MAX); - #endif + UPDATE_LIVE_STATE(W, MAX); #else - UPDATE_ENDSTOP_BIT(W, MAX); + UPDATE_LIVE_STATE(W, MAX); #endif #endif @@ -1239,7 +1181,7 @@ void Endstops::update() { #if HAS_Y_MAX ES_GET_STATE(Y_MAX); #endif - #if HAS_Z_MIN + #if HAS_Z_MIN_PIN ES_GET_STATE(Z_MIN); #endif #if HAS_Z_MAX diff --git a/Marlin/src/module/endstops.h b/Marlin/src/module/endstops.h index e0c0de39a176..28917697c431 100644 --- a/Marlin/src/module/endstops.h +++ b/Marlin/src/module/endstops.h @@ -28,89 +28,113 @@ #include "../inc/MarlinConfig.h" #include -#define __ES_ITEM(N) N, -#define _ES_ITEM(K,N) TERN_(K,DEFER4(__ES_ITEM)(N)) +#define _ES_ITEM(N) N, +#define ES_ITEM(K,N) TERN_(K,DEFER4(_ES_ITEM)(N)) +/** + * Basic Endstop Flag Bits: + * - Each axis with an endstop gets a flag for its homing direction. + * (The use of "MIN" or "MAX" makes it easier to pair with similarly-named endstop pins.) + * - Bed probes with a single pin get a Z_MIN_PROBE flag. This includes Sensorless Z Probe. + * + * Extended Flag Bits: + * - Multi-stepper axes may have multi-endstops such as X2_MIN, Y2_MAX, etc. + * - DELTA gets X_MAX, Y_MAX, and Z_MAX corresponding to its "A", "B", "C" towers. + * - For DUAL_X_CARRIAGE the X axis has both X_MIN and X_MAX flags. + * - The Z axis may have both MIN and MAX when homing to MAX and the probe is Z_MIN. + * - DELTA Sensorless Probe uses X/Y/Z_MAX but sets the Z_MIN flag. + * + * Endstop Flag Bit Aliases: + * - Each *_MIN or *_MAX flag is aliased to *_ENDSTOP. + * - Z_MIN_PROBE is an alias to Z_MIN when the Z_MIN_PIN is being used as the probe pin. + * - When homing with the probe Z_ENDSTOP is a Z_MIN_PROBE alias, otherwise a Z_MIN/MAX alias. + */ enum EndstopEnum : char { - // Common XYZ (ABC) endstops. Defined according to USE_[XYZ](MIN|MAX)_PLUG settings. - _ES_ITEM(HAS_X_MIN, X_MIN) - _ES_ITEM(HAS_X_MAX, X_MAX) - _ES_ITEM(HAS_Y_MIN, Y_MIN) - _ES_ITEM(HAS_Y_MAX, Y_MAX) - _ES_ITEM(HAS_Z_MIN, Z_MIN) - _ES_ITEM(HAS_Z_MAX, Z_MAX) - _ES_ITEM(HAS_I_MIN, I_MIN) - _ES_ITEM(HAS_I_MAX, I_MAX) - _ES_ITEM(HAS_J_MIN, J_MIN) - _ES_ITEM(HAS_J_MAX, J_MAX) - _ES_ITEM(HAS_K_MIN, K_MIN) - _ES_ITEM(HAS_K_MAX, K_MAX) - _ES_ITEM(HAS_U_MIN, U_MIN) - _ES_ITEM(HAS_U_MAX, U_MAX) - _ES_ITEM(HAS_V_MIN, V_MIN) - _ES_ITEM(HAS_V_MAX, V_MAX) - _ES_ITEM(HAS_W_MIN, W_MIN) - _ES_ITEM(HAS_W_MAX, W_MAX) + // Common XYZ (ABC) endstops. + ES_ITEM(HAS_X_MIN, X_MIN) ES_ITEM(HAS_X_MAX, X_MAX) + ES_ITEM(HAS_Y_MIN, Y_MIN) ES_ITEM(HAS_Y_MAX, Y_MAX) + ES_ITEM(HAS_Z_MIN, Z_MIN) ES_ITEM(HAS_Z_MAX, Z_MAX) + ES_ITEM(HAS_I_MIN, I_MIN) ES_ITEM(HAS_I_MAX, I_MAX) + ES_ITEM(HAS_J_MIN, J_MIN) ES_ITEM(HAS_J_MAX, J_MAX) + ES_ITEM(HAS_K_MIN, K_MIN) ES_ITEM(HAS_K_MAX, K_MAX) + ES_ITEM(HAS_U_MIN, U_MIN) ES_ITEM(HAS_U_MAX, U_MAX) + ES_ITEM(HAS_V_MIN, V_MIN) ES_ITEM(HAS_V_MAX, V_MAX) + ES_ITEM(HAS_W_MIN, W_MIN) ES_ITEM(HAS_W_MAX, W_MAX) // Extra Endstops for XYZ #if ENABLED(X_DUAL_ENDSTOPS) - _ES_ITEM(HAS_X_MIN, X2_MIN) - _ES_ITEM(HAS_X_MAX, X2_MAX) + ES_ITEM(HAS_X_MIN, X2_MIN) ES_ITEM(HAS_X_MAX, X2_MAX) #endif #if ENABLED(Y_DUAL_ENDSTOPS) - _ES_ITEM(HAS_Y_MIN, Y2_MIN) - _ES_ITEM(HAS_Y_MAX, Y2_MAX) + ES_ITEM(HAS_Y_MIN, Y2_MIN) ES_ITEM(HAS_Y_MAX, Y2_MAX) #endif #if ENABLED(Z_MULTI_ENDSTOPS) - _ES_ITEM(HAS_Z_MIN, Z2_MIN) - _ES_ITEM(HAS_Z_MAX, Z2_MAX) + ES_ITEM(HAS_Z_MIN, Z2_MIN) ES_ITEM(HAS_Z_MAX, Z2_MAX) #if NUM_Z_STEPPERS >= 3 - _ES_ITEM(HAS_Z_MIN, Z3_MIN) - _ES_ITEM(HAS_Z_MAX, Z3_MAX) - #endif - #if NUM_Z_STEPPERS >= 4 - _ES_ITEM(HAS_Z_MIN, Z4_MIN) - _ES_ITEM(HAS_Z_MAX, Z4_MAX) + ES_ITEM(HAS_Z_MIN, Z3_MIN) ES_ITEM(HAS_Z_MAX, Z3_MAX) + #if NUM_Z_STEPPERS >= 4 + ES_ITEM(HAS_Z_MIN, Z4_MIN) ES_ITEM(HAS_Z_MAX, Z4_MAX) + #endif #endif #endif // Bed Probe state is distinct or shared with Z_MIN (i.e., when the probe is the only Z endstop) #if !HAS_DELTA_SENSORLESS_PROBING - _ES_ITEM(HAS_BED_PROBE, Z_MIN_PROBE IF_DISABLED(USES_Z_MIN_PROBE_PIN, = Z_MIN)) + ES_ITEM(HAS_BED_PROBE, Z_MIN_PROBE IF_DISABLED(USES_Z_MIN_PROBE_PIN, = Z_MIN)) #endif // The total number of states NUM_ENDSTOP_STATES - // Endstops can be either MIN or MAX but not both - #if HAS_X_MIN || HAS_X_MAX + // Endstop aliased to MIN or MAX + #if HAS_X_ENDSTOP , X_ENDSTOP = TERN(X_HOME_TO_MAX, X_MAX, X_MIN) #if ENABLED(X_DUAL_ENDSTOPS) , X2_ENDSTOP = TERN(X_HOME_TO_MAX, X2_MAX, X2_MIN) #endif #endif - #if HAS_Y_MIN || HAS_Y_MAX + #if HAS_Y_ENDSTOP , Y_ENDSTOP = TERN(Y_HOME_TO_MAX, Y_MAX, Y_MIN) #if ENABLED(Y_DUAL_ENDSTOPS) , Y2_ENDSTOP = TERN(Y_HOME_TO_MAX, Y2_MAX, Y2_MIN) #endif #endif - #if HAS_Z_MIN || HAS_Z_MAX || HOMING_Z_WITH_PROBE - , Z_ENDSTOP = TERN(HOMING_Z_WITH_PROBE, Z_MIN_PROBE, TERN(Z_HOME_TO_MAX, Z_MAX, Z_MIN)) + #if HOMING_Z_WITH_PROBE + , Z_ENDSTOP = Z_MIN_PROBE + #elif HAS_Z_ENDSTOP + , Z_ENDSTOP = TERN(Z_HOME_TO_MAX, Z_MAX, Z_MIN) + #if ENABLED(Z_MULTI_ENDSTOPS) + , Z2_ENDSTOP = TERN(Z_HOME_TO_MAX, Z2_MAX, Z2_MIN) + #if NUM_Z_STEPPERS >= 3 + , Z3_ENDSTOP = TERN(Z_HOME_TO_MAX, Z3_MAX, Z3_MIN) + #if NUM_Z_STEPPERS >= 4 + , Z4_ENDSTOP = TERN(Z_HOME_TO_MAX, Z4_MAX, Z4_MIN) + #endif + #endif + #endif #endif - #if HAS_I_MIN || HAS_I_MAX + #if HAS_I_ENDSTOP , I_ENDSTOP = TERN(I_HOME_TO_MAX, I_MAX, I_MIN) #endif - #if HAS_J_MIN || HAS_J_MAX + #if HAS_J_ENDSTOP , J_ENDSTOP = TERN(J_HOME_TO_MAX, J_MAX, J_MIN) #endif - #if HAS_K_MIN || HAS_K_MAX + #if HAS_K_ENDSTOP , K_ENDSTOP = TERN(K_HOME_TO_MAX, K_MAX, K_MIN) #endif + #if HAS_U_ENDSTOP + , U_ENDSTOP = TERN(U_HOME_TO_MAX, U_MAX, U_MIN) + #endif + #if HAS_V_ENDSTOP + , V_ENDSTOP = TERN(V_HOME_TO_MAX, V_MAX, V_MIN) + #endif + #if HAS_W_ENDSTOP + , W_ENDSTOP = TERN(W_HOME_TO_MAX, W_MAX, W_MIN) + #endif }; -#undef __ES_ITEM #undef _ES_ITEM +#undef ES_ITEM class Endstops { public: diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 6917bbc42a56..9c59195a8cb7 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -540,6 +540,21 @@ void _internal_move_to_destination(const_feedRate_t fr_mm_s/*=0.0f*/ prepare_line_to_destination(); } +#if SECONDARY_AXES + + void secondary_axis_moves(SECONDARY_AXIS_ARGS(const_float_t), const_feedRate_t fr_mm_s) { + auto move_one = [&](const AxisEnum a, const_float_t p) { + const feedRate_t fr = fr_mm_s ?: homing_feedrate(a); + current_position[a] = p; line_to_current_position(fr); + }; + SECONDARY_AXIS_CODE( + move_one(I_AXIS, i), move_one(J_AXIS, j), move_one(K_AXIS, k), + move_one(U_AXIS, u), move_one(V_AXIS, v), move_one(W_AXIS, w) + ); + } + +#endif + /** * Plan a move to (X, Y, Z, [I, [J, [K...]]]) and set the current_position * Plan a move to (X, Y, Z, [I, [J, [K...]]]) with separation of Z from other components. @@ -558,14 +573,6 @@ void do_blocking_move_to(NUM_AXIS_ARGS(const_float_t), const_feedRate_t fr_mm_s/ #if HAS_Z_AXIS const feedRate_t z_feedrate = fr_mm_s ?: homing_feedrate(Z_AXIS); #endif - SECONDARY_AXIS_CODE( - const feedRate_t i_feedrate = fr_mm_s ?: homing_feedrate(I_AXIS), - const feedRate_t j_feedrate = fr_mm_s ?: homing_feedrate(J_AXIS), - const feedRate_t k_feedrate = fr_mm_s ?: homing_feedrate(K_AXIS), - const feedRate_t u_feedrate = fr_mm_s ?: homing_feedrate(U_AXIS), - const feedRate_t v_feedrate = fr_mm_s ?: homing_feedrate(V_AXIS), - const feedRate_t w_feedrate = fr_mm_s ?: homing_feedrate(W_AXIS) - ); #if IS_KINEMATIC && DISABLED(POLARGRAPH) // kinematic machines are expected to home to a point 1.5x their range? never reachable. @@ -608,6 +615,10 @@ void do_blocking_move_to(NUM_AXIS_ARGS(const_float_t), const_feedRate_t fr_mm_s/ if (DEBUGGING(LEVELING)) DEBUG_POS("z lower move", current_position); } + #if SECONDARY_AXES + secondary_axis_moves(SECONDARY_AXIS_LIST(i, j, k, u, v, w), fr_mm_s); + #endif + #elif IS_SCARA // If Z needs to raise, do it before moving XY @@ -615,6 +626,10 @@ void do_blocking_move_to(NUM_AXIS_ARGS(const_float_t), const_feedRate_t fr_mm_s/ destination.set(x, y); prepare_internal_fast_move_to_destination(xy_feedrate); + #if SECONDARY_AXES + secondary_axis_moves(SECONDARY_AXIS_LIST(i, j, k, u, v, w), fr_mm_s); + #endif + // If Z needs to lower, do it after moving XY if (destination.z > z) { destination.z = z; prepare_internal_fast_move_to_destination(z_feedrate); } @@ -626,23 +641,8 @@ void do_blocking_move_to(NUM_AXIS_ARGS(const_float_t), const_feedRate_t fr_mm_s/ current_position.set(x OPTARG(HAS_Y_AXIS, y)); line_to_current_position(xy_feedrate); - #if HAS_I_AXIS - current_position.i = i; line_to_current_position(i_feedrate); - #endif - #if HAS_J_AXIS - current_position.j = j; line_to_current_position(j_feedrate); - #endif - #if HAS_K_AXIS - current_position.k = k; line_to_current_position(k_feedrate); - #endif - #if HAS_U_AXIS - current_position.u = u; line_to_current_position(u_feedrate); - #endif - #if HAS_V_AXIS - current_position.v = v; line_to_current_position(v_feedrate); - #endif - #if HAS_W_AXIS - current_position.w = w; line_to_current_position(w_feedrate); + #if SECONDARY_AXES + secondary_axis_moves(SECONDARY_AXIS_LIST(i, j, k, u, v, w), fr_mm_s); #endif #if HAS_Z_AXIS @@ -1419,13 +1419,13 @@ float get_move_distance(const xyze_pos_t &diff OPTARG(HAS_ROTATIONAL_AXES, bool void idex_set_mirrored_mode(const bool mirr) { idex_mirrored_mode = mirr; - stepper.set_directions(); + stepper.apply_directions(); } void set_duplication_enabled(const bool dupe, const int8_t tool_index/*=-1*/) { extruder_duplication_enabled = dupe; if (tool_index >= 0) active_extruder = tool_index; - stepper.set_directions(); + stepper.apply_directions(); } void idex_set_parked(const bool park/*=true*/) { @@ -1471,7 +1471,7 @@ float get_move_distance(const xyze_pos_t &diff OPTARG(HAS_ROTATIONAL_AXES, bool line_to_current_position(fr_zfast); } } - stepper.set_directions(); + stepper.apply_directions(); idex_set_parked(false); if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("idex_set_parked(false)"); @@ -2078,12 +2078,7 @@ void prepare_line_to_destination() { // Only Z homing (with probe) is permitted if (axis != Z_AXIS) { BUZZ(100, 880); return; } #else - #define _CAN_HOME(A) (axis == _AXIS(A) && ( \ - ENABLED(A##_SPI_SENSORLESS) \ - || TERN0(HAS_Z_AXIS, TERN0(HOMING_Z_WITH_PROBE, _AXIS(A) == Z_AXIS)) \ - || TERN0(A##_HOME_TO_MIN, A##_MIN_PIN > -1) \ - || TERN0(A##_HOME_TO_MAX, A##_MAX_PIN > -1) \ - )) + #define _CAN_HOME(A) (axis == _AXIS(A) && (EITHER(A##_SPI_SENSORLESS, HAS_##A##_ENDSTOP) || TERN0(HOMING_Z_WITH_PROBE, _AXIS(A) == Z_AXIS))) #define _ANDCANT(N) && !_CAN_HOME(N) if (true MAIN_AXIS_MAP(_ANDCANT)) return; #endif @@ -2171,32 +2166,9 @@ void prepare_line_to_destination() { // Check for a broken endstop EndstopEnum es; switch (axis) { - default: - case X_AXIS: es = X_ENDSTOP; break; - #if HAS_Y_AXIS - case Y_AXIS: es = Y_ENDSTOP; break; - #endif - #if HAS_Z_AXIS - case Z_AXIS: es = Z_ENDSTOP; break; - #endif - #if HAS_I_AXIS - case I_AXIS: es = I_ENDSTOP; break; - #endif - #if HAS_J_AXIS - case J_AXIS: es = J_ENDSTOP; break; - #endif - #if HAS_K_AXIS - case K_AXIS: es = K_ENDSTOP; break; - #endif - #if HAS_U_AXIS - case U_AXIS: es = U_ENDSTOP; break; - #endif - #if HAS_V_AXIS - case V_AXIS: es = V_ENDSTOP; break; - #endif - #if HAS_W_AXIS - case W_AXIS: es = W_ENDSTOP; break; - #endif + #define _ESCASE(A) case A##_AXIS: es = A##_ENDSTOP; break; + MAIN_AXIS_MAP(_ESCASE) + default: break; } if (TEST(endstops.state(), es)) { SERIAL_ECHO_MSG("Bad ", AS_CHAR(AXIS_CHAR(axis)), " Endstop?"); @@ -2467,9 +2439,9 @@ void set_axis_is_at_home(const AxisEnum axis) { if (axis == Z_AXIS) { #if HOMING_Z_WITH_PROBE current_position.z -= probe.offset.z; - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("*** Z HOMED WITH PROBE (Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) ***\n> probe.offset.z = ", probe.offset.z); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("*** Z homed with PROBE" TERN_(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN, " (Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)") " ***\n> (M851 Z", probe.offset.z, ")"); #else - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("*** Z HOMED TO ENDSTOP ***"); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("*** Z homed to ENDSTOP ***"); #endif } #endif diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 4cd4641e3dbc..e899815c0f88 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -259,7 +259,9 @@ void report_current_position_projected(); #if ENABLED(AUTO_REPORT_POSITION) #include "../libs/autoreport.h" - struct PositionReport { static void report() { report_current_position_projected(); } }; + struct PositionReport { static void report() { + TERN(AUTO_REPORT_REAL_POSITION, report_real_position(), report_current_position_projected()); + } }; extern AutoReporter position_auto_reporter; #endif diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 75295c5f5a4d..96606f30a87a 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -352,25 +352,35 @@ xyz_pos_t Probe::offset; // Initialized by settings.load() FORCE_INLINE void probe_specific_action(const bool deploy) { DEBUG_SECTION(log_psa, "Probe::probe_specific_action", DEBUGGING(LEVELING)); #if ENABLED(PAUSE_BEFORE_DEPLOY_STOW) - do { - #if ENABLED(PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED) - if (deploy != PROBE_TRIGGERED()) break; - #endif - - OKAY_BUZZ(); - FSTR_P const ds_str = deploy ? GET_TEXT_F(MSG_MANUAL_DEPLOY) : GET_TEXT_F(MSG_MANUAL_STOW); - ui.return_to_status(); // To display the new status message - ui.set_status(ds_str, 99); - SERIAL_ECHOLNF(deploy ? GET_EN_TEXT_F(MSG_MANUAL_DEPLOY) : GET_EN_TEXT_F(MSG_MANUAL_STOW)); + // Start preheating before waiting for user confirmation that the probe is ready. + TERN_(PREHEAT_BEFORE_PROBING, if (deploy) probe.preheat_for_probing(0, PROBING_BED_TEMP, true)); + + FSTR_P const ds_str = deploy ? GET_TEXT_F(MSG_MANUAL_DEPLOY) : GET_TEXT_F(MSG_MANUAL_STOW); + ui.return_to_status(); // To display the new status message + ui.set_status(ds_str, 99); + SERIAL_ECHOLNF(deploy ? GET_EN_TEXT_F(MSG_MANUAL_DEPLOY) : GET_EN_TEXT_F(MSG_MANUAL_STOW)); + + OKAY_BUZZ(); + + #if ENABLED(PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED) + // Wait for the probe to be attached or detached before asking for explicit user confirmation + // Allow the user to interrupt + { + KEEPALIVE_STATE(PAUSED_FOR_USER); + TERN_(HAS_RESUME_CONTINUE, wait_for_user = true); + while (deploy == PROBE_TRIGGERED() && TERN1(HAS_RESUME_CONTINUE, wait_for_user)) idle_no_sleep(); + TERN_(HAS_RESUME_CONTINUE, wait_for_user = false); + OKAY_BUZZ(); + } + #endif - TERN_(HOST_PROMPT_SUPPORT, hostui.continue_prompt(ds_str)); - TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(ds_str)); - TERN_(DWIN_LCD_PROUI, DWIN_Popup_Confirm(ICON_BLTouch, ds_str, FPSTR(CONTINUE_STR))); - TERN_(HAS_RESUME_CONTINUE, wait_for_user_response()); - ui.reset_status(); + TERN_(HOST_PROMPT_SUPPORT, hostui.continue_prompt(ds_str)); + TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(ds_str)); + TERN_(DWIN_LCD_PROUI, DWIN_Popup_Confirm(ICON_BLTouch, ds_str, FPSTR(CONTINUE_STR))); + TERN_(HAS_RESUME_CONTINUE, wait_for_user_response()); - } while (ENABLED(PAUSE_PROBE_DEPLOY_WHEN_TRIGGERED)); + ui.reset_status(); #endif // PAUSE_BEFORE_DEPLOY_STOW @@ -435,7 +445,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) { * - If a preheat input is higher than the current target, raise the target temperature. * - If a preheat input is higher than the current temperature, wait for stabilization. */ - void Probe::preheat_for_probing(const celsius_t hotend_temp, const celsius_t bed_temp) { + void Probe::preheat_for_probing(const celsius_t hotend_temp, const celsius_t bed_temp, const bool early/*=false*/) { #if HAS_HOTEND && (PROBING_NOZZLE_TEMP || LEVELING_NOZZLE_TEMP) #define WAIT_FOR_NOZZLE_HEAT #endif @@ -443,7 +453,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) { #define WAIT_FOR_BED_HEAT #endif - LCD_MESSAGE(MSG_PREHEATING); + if (!early) LCD_MESSAGE(MSG_PREHEATING); DEBUG_ECHOPGM("Preheating "); @@ -453,14 +463,12 @@ FORCE_INLINE void probe_specific_action(const bool deploy) { DEBUG_ECHOPGM("hotend (", hotendPreheat, ")"); thermalManager.setTargetHotend(hotendPreheat, 0); } - #elif ENABLED(WAIT_FOR_BED_HEAT) - constexpr celsius_t hotendPreheat = 0; #endif #if ENABLED(WAIT_FOR_BED_HEAT) const celsius_t bedPreheat = bed_temp > thermalManager.degTargetBed() ? bed_temp : 0; if (bedPreheat) { - if (hotendPreheat) DEBUG_ECHOPGM(" and "); + if (TERN0(WAIT_FOR_NOZZLE_HEAT, hotendPreheat)) DEBUG_ECHOPGM(" and "); DEBUG_ECHOPGM("bed (", bedPreheat, ")"); thermalManager.setTargetBed(bedPreheat); } @@ -468,8 +476,10 @@ FORCE_INLINE void probe_specific_action(const bool deploy) { DEBUG_EOL(); - TERN_(WAIT_FOR_NOZZLE_HEAT, if (hotend_temp > thermalManager.wholeDegHotend(0) + (TEMP_WINDOW)) thermalManager.wait_for_hotend(0)); - TERN_(WAIT_FOR_BED_HEAT, if (bed_temp > thermalManager.wholeDegBed() + (TEMP_BED_WINDOW)) thermalManager.wait_for_bed_heating()); + if (!early) { + TERN_(WAIT_FOR_NOZZLE_HEAT, if (hotend_temp > thermalManager.wholeDegHotend(0) + (TEMP_WINDOW)) thermalManager.wait_for_hotend(0)); + TERN_(WAIT_FOR_BED_HEAT, if (bed_temp > thermalManager.wholeDegBed() + (TEMP_BED_WINDOW)) thermalManager.wait_for_bed_heating()); + } } #endif @@ -512,7 +522,7 @@ bool Probe::set_deployed(const bool deploy, const bool no_return/*=false*/) { #endif if (z_raise_wanted) { - const float zdest = DIFF_TERN(HAS_HOTEND_OFFSET, _MAX(Z_CLEARANCE_BETWEEN_PROBES, Z_CLEARANCE_DEPLOY_PROBE), hotend_offset[active_extruder].z); + const float zdest = DIFF_TERN(HAS_HOTEND_OFFSET, Z_CLEARANCE_DEPLOY_PROBE, hotend_offset[active_extruder].z); if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Raise Z to ", zdest); do_z_clearance(zdest); } @@ -551,6 +561,7 @@ bool Probe::set_deployed(const bool deploy, const bool no_return/*=false*/) { #endif // If preheating is required before any probing... + // TODO: Consider skipping this for things like M401, G34, etc. TERN_(PREHEAT_BEFORE_PROBING, if (deploy) preheat_for_probing(PROBING_NOZZLE_TEMP, PROBING_BED_TEMP)); if (!no_return) do_blocking_move_to(old_xy); // Return to the original location unless handled externally @@ -705,10 +716,12 @@ bool Probe::probe_down_to_z(const_float_t z, const_feedRate_t fr_mm_s) { * @param sanity_check Flag to compare the probe result with the expected result * based on the probe Z offset. If the result is too far away * (more than 2mm too early) then consider it an error. + * @param z_min_point Override the minimum probing height (-2mm), to allow deeper probing. + * @param z_clearance Z clearance to apply on probe failure. * * @return The Z position of the bed at the current XY or NAN on error. */ -float Probe::run_z_probe(const bool sanity_check/*=true*/) { +float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_point/*=Z_PROBE_LOW_POINT*/, const_float_t z_clearance/*=Z_TWEEN_SAFE_CLEARANCE*/) { DEBUG_SECTION(log_probe, "Probe::run_z_probe", DEBUGGING(LEVELING)); const float zoffs = SUM_TERN(HAS_HOTEND_OFFSET, -offset.z, hotend_offset[active_extruder].z); @@ -739,9 +752,8 @@ float Probe::run_z_probe(const bool sanity_check/*=true*/) { }; // Stop the probe before it goes too low to prevent damage. - // For known Z probe below the expected trigger point, otherwise -10mm. - const float z_probe_low_point = axis_is_trusted(Z_AXIS) ? zoffs + Z_PROBE_LOW_POINT : -10.0f; - + // For known Z probe below the expected trigger point, otherwise -10mm lower. + const float z_probe_low_point = zoffs + z_min_point -float((!axis_is_trusted(Z_AXIS)) * 10); if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Probe Low Point: ", z_probe_low_point); // Double-probing does a fast probe followed by a slow probe @@ -757,7 +769,7 @@ float Probe::run_z_probe(const bool sanity_check/*=true*/) { if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("1st Probe Z:", z1); // Raise to give the probe clearance - do_z_clearance(Z_CLEARANCE_MULTI_PROBE); + do_z_clearance(z1 + (Z_CLEARANCE_MULTI_PROBE), false); #elif Z_PROBE_FEEDRATE_FAST != Z_PROBE_FEEDRATE_SLOW @@ -767,7 +779,7 @@ float Probe::run_z_probe(const bool sanity_check/*=true*/) { if (current_position.z > z) { // Probe down fast. If the probe never triggered, raise for probe clearance if (!probe_down_to_z(z, z_probe_fast_mm_s)) - do_z_clearance(Z_PROBE_SAFE_CLEARANCE); + do_z_clearance(z_clearance); } #endif @@ -900,7 +912,11 @@ float Probe::run_z_probe(const bool sanity_check/*=true*/) { * with the previously active tool. * */ -float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRaise raise_after/*=PROBE_PT_NONE*/, const uint8_t verbose_level/*=0*/, const bool probe_relative/*=true*/, const bool sanity_check/*=true*/) { +float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRaise raise_after/*=PROBE_PT_NONE*/, + const uint8_t verbose_level/*=0*/, const bool probe_relative/*=true*/, const bool sanity_check/*=true*/, + const_float_t z_min_point/*=Z_PROBE_LOW_POINT*/, const_float_t z_clearance/*=Z_TWEEN_SAFE_CLEARANCE*/, + const bool raise_after_is_relative/*=false*/ +) { DEBUG_SECTION(log_probe, "Probe::probe_at_point", DEBUGGING(LEVELING)); if (DEBUGGING(LEVELING)) { @@ -919,7 +935,7 @@ float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRai #endif // Use a safe Z height for the XY move - const float safe_z = _MAX(current_position.z, Z_PROBE_SAFE_CLEARANCE); + const float safe_z = _MAX(current_position.z, z_clearance); // On delta keep Z below clip height or do_blocking_move_to will abort xyz_pos_t npos = NUM_AXIS_ARRAY( @@ -948,7 +964,7 @@ float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRai #else // !BD_SENSOR - float measured_z = deploy() ? NAN : run_z_probe(sanity_check) + offset.z; + float measured_z = deploy() ? NAN : run_z_probe(sanity_check, z_min_point, z_clearance) + offset.z; // Deploy succeeded and a successful measurement was done. // Raise and/or stow the probe depending on 'raise_after' and settings. @@ -956,7 +972,10 @@ float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRai switch (raise_after) { default: break; case PROBE_PT_RAISE: - do_z_clearance(Z_PROBE_SAFE_CLEARANCE); + if (raise_after_is_relative) + do_z_clearance(current_position.z + z_clearance, false); + else + do_z_clearance(z_clearance); break; case PROBE_PT_STOW: case PROBE_PT_LAST_STOW: if (stow()) measured_z = NAN; // Error on stow? @@ -1020,15 +1039,16 @@ float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRai void Probe::refresh_largest_sensorless_adj() { DEBUG_SECTION(rso, "Probe::refresh_largest_sensorless_adj", true); largest_sensorless_adj = -3; // A reference away from any real probe height - if (TEST(endstops.state(), X_MAX)) { + const Endstops::endstop_mask_t state = endstops.state(); + if (TEST(state, X_MAX)) { NOLESS(largest_sensorless_adj, offset_sensorless_adj.a); DEBUG_ECHOLNPGM("Endstop_X: ", largest_sensorless_adj, " TowerX"); } - if (TEST(endstops.state(), Y_MAX)) { + if (TEST(state, Y_MAX)) { NOLESS(largest_sensorless_adj, offset_sensorless_adj.b); DEBUG_ECHOLNPGM("Endstop_Y: ", largest_sensorless_adj, " TowerY"); } - if (TEST(endstops.state(), Z_MAX)) { + if (TEST(state, Z_MAX)) { NOLESS(largest_sensorless_adj, offset_sensorless_adj.c); DEBUG_ECHOLNPGM("Endstop_Z: ", largest_sensorless_adj, " TowerZ"); } diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index 4c6f23390544..715f3f3a7380 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -29,6 +29,10 @@ #include "motion.h" +#if ENABLED(BLTOUCH) + #include "../feature/bltouch.h" +#endif + #define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE) #include "../core/debug_out.h" @@ -48,7 +52,7 @@ #endif // In BLTOUCH HS mode, the probe travels in a deployed state. -#define Z_PROBE_SAFE_CLEARANCE SUM_TERN(BLTOUCH, Z_CLEARANCE_BETWEEN_PROBES, bltouch.z_extra_clearance()) +#define Z_TWEEN_SAFE_CLEARANCE SUM_TERN(BLTOUCH, Z_CLEARANCE_BETWEEN_PROBES, bltouch.z_extra_clearance()) #if ENABLED(PREHEAT_BEFORE_LEVELING) #ifndef LEVELING_NOZZLE_TEMP @@ -76,7 +80,7 @@ class Probe { static xyz_pos_t offset; #if EITHER(PREHEAT_BEFORE_PROBING, PREHEAT_BEFORE_LEVELING) - static void preheat_for_probing(const celsius_t hotend_temp, const celsius_t bed_temp); + static void preheat_for_probing(const celsius_t hotend_temp, const celsius_t bed_temp, const bool early=false); #endif static void probe_error_stop(); @@ -159,9 +163,17 @@ class Probe { #endif // !IS_KINEMATIC - static float probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRaise raise_after=PROBE_PT_NONE, const uint8_t verbose_level=0, const bool probe_relative=true, const bool sanity_check=true); - static float probe_at_point(const xy_pos_t &pos, const ProbePtRaise raise_after=PROBE_PT_NONE, const uint8_t verbose_level=0, const bool probe_relative=true, const bool sanity_check=true) { - return probe_at_point(pos.x, pos.y, raise_after, verbose_level, probe_relative, sanity_check); + static float probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRaise raise_after=PROBE_PT_NONE, + const uint8_t verbose_level=0, const bool probe_relative=true, const bool sanity_check=true, + const_float_t z_min_point=Z_PROBE_LOW_POINT, const_float_t z_clearance=Z_TWEEN_SAFE_CLEARANCE, + const bool raise_after_is_relative=false); + + static float probe_at_point(const xy_pos_t &pos, const ProbePtRaise raise_after=PROBE_PT_NONE, + const uint8_t verbose_level=0, const bool probe_relative=true, const bool sanity_check=true, + const_float_t z_min_point=Z_PROBE_LOW_POINT, float z_clearance=Z_TWEEN_SAFE_CLEARANCE, + const bool raise_after_is_relative=false + ) { + return probe_at_point(pos.x, pos.y, raise_after, verbose_level, probe_relative, sanity_check, z_min_point, z_clearance, raise_after_is_relative); } #else // !HAS_BED_PROBE @@ -330,7 +342,7 @@ class Probe { private: static bool probe_down_to_z(const_float_t z, const_feedRate_t fr_mm_s); - static float run_z_probe(const bool sanity_check=true); + static float run_z_probe(const bool sanity_check=true, const_float_t z_min_point=Z_PROBE_LOW_POINT, const_float_t z_clearance=Z_TWEEN_SAFE_CLEARANCE); }; extern Probe probe; diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 9728a908963e..790b118c6de6 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -591,14 +591,14 @@ void Stepper::disable_all_steppers() { TERN_(EXTENSIBLE_UI, ExtUI::onSteppersDisabled()); } -#define SET_STEP_DIR(A) \ - if (motor_direction(_AXIS(A))) { \ - A##_APPLY_DIR(INVERT_##A##_DIR, false); \ - count_direction[_AXIS(A)] = -1; \ - } \ - else { \ - A##_APPLY_DIR(!INVERT_##A##_DIR, false); \ - count_direction[_AXIS(A)] = 1; \ +#define SET_STEP_DIR(A) \ + if (motor_direction(_AXIS(A))) { \ + A##_APPLY_DIR(INVERT_DIR(A, LOW), false); \ + count_direction[_AXIS(A)] = -1; \ + } \ + else { \ + A##_APPLY_DIR(INVERT_DIR(A, HIGH), false); \ + count_direction[_AXIS(A)] = 1; \ } /** @@ -608,7 +608,7 @@ void Stepper::disable_all_steppers() { * COREXZ: X_AXIS=A_AXIS and Z_AXIS=C_AXIS * COREYZ: Y_AXIS=B_AXIS and Z_AXIS=C_AXIS */ -void Stepper::set_directions() { +void Stepper::apply_directions() { DIR_WAIT_BEFORE(); @@ -3466,7 +3466,7 @@ void Stepper::report_positions() { #if HAS_Z_AXIS // Z is handled differently to update the stepper // counts (needed by Marlin for bed level probing). - const bool z_dir = !TEST(command, FT_BIT_DIR_Z), + const bool z_dir = TEST(command, FT_BIT_DIR_Z), z_step = TEST(command, FT_BIT_STEP_Z); #endif @@ -3627,7 +3627,7 @@ void Stepper::report_positions() { #if DISABLED(DELTA) - #define BABYSTEP_AXIS(AXIS, INV, DIR) do{ \ + #define BABYSTEP_AXIS(AXIS, DIR, INV) do{ \ const uint8_t old_dir = _READ_DIR(AXIS); \ _ENABLE_AXIS(AXIS); \ DIR_WAIT_BEFORE(); \ @@ -3646,12 +3646,12 @@ void Stepper::report_positions() { #if IS_CORE - #define BABYSTEP_CORE(A, B, INV, DIR, ALT) do{ \ + #define BABYSTEP_CORE(A, B, DIR, INV, ALT) do{ \ const xy_byte_t old_dir = { _READ_DIR(A), _READ_DIR(B) }; \ _ENABLE_AXIS(A); _ENABLE_AXIS(B); \ DIR_WAIT_BEFORE(); \ - _APPLY_DIR(A, INVERT_DIR(A, (DIR)^(INV)); \ - _APPLY_DIR(B, INVERT_DIR(B, (DIR)^(INV)^(ALT)); \ + _APPLY_DIR(A, INVERT_DIR(A, (DIR)^(INV))); \ + _APPLY_DIR(B, INVERT_DIR(B, (DIR)^(INV)^(ALT))); \ DIR_WAIT_AFTER(); \ _SAVE_START(); \ _APPLY_STEP(A, _STEP_STATE(A), true); \ @@ -3678,21 +3678,21 @@ void Stepper::report_positions() { case X_AXIS: #if CORE_IS_XY - BABYSTEP_CORE(X, Y, 0, direction, 0); + BABYSTEP_CORE(X, Y, direction, 0, 0); #elif CORE_IS_XZ - BABYSTEP_CORE(X, Z, 0, direction, 0); + BABYSTEP_CORE(X, Z, direction, 0, 0); #else - BABYSTEP_AXIS(X, 0, direction); + BABYSTEP_AXIS(X, direction, 0); #endif break; case Y_AXIS: #if CORE_IS_XY - BABYSTEP_CORE(X, Y, 1, !direction, (CORESIGN(1)>0)); + BABYSTEP_CORE(X, Y, !direction, 1, (CORESIGN(1)>0)); #elif CORE_IS_YZ - BABYSTEP_CORE(Y, Z, 0, direction, (CORESIGN(1)<0)); + BABYSTEP_CORE(Y, Z, direction, 0, (CORESIGN(1)<0)); #else - BABYSTEP_AXIS(Y, 0, direction); + BABYSTEP_AXIS(Y, direction, 0); #endif break; @@ -3701,11 +3701,11 @@ void Stepper::report_positions() { case Z_AXIS: { #if CORE_IS_XZ - BABYSTEP_CORE(X, Z, BABYSTEP_INVERT_Z, direction, (CORESIGN(1)<0)); + BABYSTEP_CORE(X, Z, direction, BABYSTEP_INVERT_Z, (CORESIGN(1)<0)); #elif CORE_IS_YZ - BABYSTEP_CORE(Y, Z, BABYSTEP_INVERT_Z, direction, (CORESIGN(1)<0)); + BABYSTEP_CORE(Y, Z, direction, BABYSTEP_INVERT_Z, (CORESIGN(1)<0)); #elif DISABLED(DELTA) - BABYSTEP_AXIS(Z, BABYSTEP_INVERT_Z, direction); + BABYSTEP_AXIS(Z, direction, BABYSTEP_INVERT_Z); #else // DELTA @@ -3781,22 +3781,22 @@ void Stepper::report_positions() { } break; #if HAS_I_AXIS - case I_AXIS: BABYSTEP_AXIS(I, 0, direction); break; + case I_AXIS: BABYSTEP_AXIS(I, direction, 0); break; #endif #if HAS_J_AXIS - case J_AXIS: BABYSTEP_AXIS(J, 0, direction); break; + case J_AXIS: BABYSTEP_AXIS(J, direction, 0); break; #endif #if HAS_K_AXIS - case K_AXIS: BABYSTEP_AXIS(K, 0, direction); break; + case K_AXIS: BABYSTEP_AXIS(K, direction, 0); break; #endif #if HAS_U_AXIS - case U_AXIS: BABYSTEP_AXIS(U, 0, direction); break; + case U_AXIS: BABYSTEP_AXIS(U, direction, 0); break; #endif #if HAS_V_AXIS - case V_AXIS: BABYSTEP_AXIS(V, 0, direction); break; + case V_AXIS: BABYSTEP_AXIS(V, direction, 0); break; #endif #if HAS_W_AXIS - case W_AXIS: BABYSTEP_AXIS(W, 0, direction); break; + case W_AXIS: BABYSTEP_AXIS(W, direction, 0); break; #endif default: break; @@ -3985,7 +3985,7 @@ void Stepper::report_positions() { #else // PRINTRBOARD_G2 - #include HAL_PATH(../HAL, fastio/G2_PWM.h) + #include HAL_PATH(.., fastio/G2_PWM.h) #endif diff --git a/Marlin/src/module/stepper.h b/Marlin/src/module/stepper.h index 4c54a5dbf955..63285398cd92 100644 --- a/Marlin/src/module/stepper.h +++ b/Marlin/src/module/stepper.h @@ -814,12 +814,12 @@ class Stepper { static void disable_all_steppers(); // Update direction states for all steppers - static void set_directions(); + static void apply_directions(); // Set direction bits and update all stepper DIR states static void set_directions(const axis_bits_t bits) { last_direction_bits = bits; - set_directions(); + apply_directions(); } #if ENABLED(FT_MOTION) diff --git a/Marlin/src/module/stepper/trinamic.cpp b/Marlin/src/module/stepper/trinamic.cpp index 02ae9cb1e4c4..893ce3f8db18 100644 --- a/Marlin/src/module/stepper/trinamic.cpp +++ b/Marlin/src/module/stepper/trinamic.cpp @@ -1010,7 +1010,7 @@ void reset_trinamic_drivers() { TMC_ADV() #endif - stepper.set_directions(); + stepper.apply_directions(); } // TMC Slave Address Conflict Detection diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index ce46d3d43dac..b4b1ba6372fd 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -564,6 +564,11 @@ PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED); #endif #endif +#if HAS_TEMP_SOC + soc_info_t Temperature::temp_soc; // = { 0 } + raw_adc_t Temperature::maxtemp_raw_SOC = TEMP_SENSOR_SOC_RAW_HI_TEMP; +#endif + #if BOTH(HAS_MARLINUI_MENU, PREVENT_COLD_EXTRUSION) && E_MANUAL > 0 bool Temperature::allow_cold_extrude_override = false; #else @@ -1356,6 +1361,7 @@ void Temperature::_temp_error(const heater_id_t heater_id, FSTR_P const serial_m OPTCODE(HAS_TEMP_COOLER, case H_COOLER: SERIAL_ECHOPGM(STR_COOLER); break) OPTCODE(HAS_TEMP_PROBE, case H_PROBE: SERIAL_ECHOPGM(STR_PROBE); break) OPTCODE(HAS_TEMP_BOARD, case H_BOARD: SERIAL_ECHOPGM(STR_MOTHERBOARD); break) + OPTCODE(HAS_TEMP_SOC, case H_SOC: SERIAL_ECHOPGM(STR_SOC); break) OPTCODE(HAS_TEMP_CHAMBER, case H_CHAMBER: SERIAL_ECHOPGM(STR_HEATER_CHAMBER); break) OPTCODE(HAS_TEMP_BED, case H_BED: SERIAL_ECHOPGM(STR_HEATER_BED); break) default: @@ -1929,7 +1935,7 @@ void Temperature::task() { quickstop_stepper(); } - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA if (emergency_parser.sd_abort_by_M524) { // abort SD print immediately emergency_parser.sd_abort_by_M524 = false; card.flag.abort_sd_printing = true; @@ -2368,6 +2374,20 @@ void Temperature::task() { } #endif // HAS_TEMP_BOARD +#if HAS_TEMP_SOC + // For SoC temperature measurement. + celsius_float_t Temperature::analog_to_celsius_soc(const raw_adc_t raw) { + return ( + #ifdef TEMP_SOC_SENSOR + TEMP_SOC_SENSOR(raw) + #else + 0 + #error "TEMP_SENSOR_SOC requires the TEMP_SOC_SENSOR(RAW) macro to be defined for your board." + #endif + ); + } +#endif + #if HAS_TEMP_REDUNDANT // For redundant temperature measurement. celsius_float_t Temperature::analog_to_celsius_redundant(const raw_adc_t raw) { @@ -2430,6 +2450,7 @@ void Temperature::updateTemperaturesFromRawValues() { TERN_(HAS_TEMP_COOLER, temp_cooler.celsius = analog_to_celsius_cooler(temp_cooler.getraw())); TERN_(HAS_TEMP_PROBE, temp_probe.celsius = analog_to_celsius_probe(temp_probe.getraw())); TERN_(HAS_TEMP_BOARD, temp_board.celsius = analog_to_celsius_board(temp_board.getraw())); + TERN_(HAS_TEMP_SOC, temp_soc.celsius = analog_to_celsius_soc(temp_soc.getraw())); TERN_(HAS_TEMP_REDUNDANT, temp_redundant.celsius = analog_to_celsius_redundant(temp_redundant.getraw())); TERN_(FILAMENT_WIDTH_SENSOR, filwidth.update_measured_mm()); @@ -2507,6 +2528,10 @@ void Temperature::updateTemperaturesFromRawValues() { if (TP_CMP(BOARD, temp_board.getraw(), maxtemp_raw_BOARD)) maxtemp_error(H_BOARD); if (TP_CMP(BOARD, mintemp_raw_BOARD, temp_board.getraw())) mintemp_error(H_BOARD); #endif + + #if BOTH(HAS_TEMP_SOC, THERMAL_PROTECTION_SOC) + if (TP_CMP(SOC, temp_soc.getraw(), maxtemp_raw_SOC)) maxtemp_error(H_SOC); + #endif #undef TP_CMP } // Temperature::updateTemperaturesFromRawValues @@ -2722,6 +2747,7 @@ void Temperature::init() { TERN_(HAS_TEMP_ADC_PROBE, hal.adc_enable(TEMP_PROBE_PIN)); TERN_(HAS_TEMP_ADC_COOLER, hal.adc_enable(TEMP_COOLER_PIN)); TERN_(HAS_TEMP_ADC_BOARD, hal.adc_enable(TEMP_BOARD_PIN)); + TERN_(HAS_TEMP_ADC_SOC, hal.adc_enable(TEMP_SOC_PIN)); TERN_(HAS_TEMP_ADC_REDUNDANT, hal.adc_enable(TEMP_REDUNDANT_PIN)); TERN_(FILAMENT_WIDTH_SENSOR, hal.adc_enable(FILWIDTH_PIN)); TERN_(HAS_ADC_BUTTONS, hal.adc_enable(ADC_KEYPAD_PIN)); @@ -2785,7 +2811,7 @@ void Temperature::init() { temp_range[NR].raw_max -= TEMPDIR(NR) * (OVERSAMPLENR); \ }while(0) - #define _MINMAX_TEST(N,M) (HOTENDS > N && TEMP_SENSOR(N) > 0 && TEMP_SENSOR(N) != 998 && TEMP_SENSOR(N) != 999 && defined(HEATER_##N##_##M##TEMP)) + #define _MINMAX_TEST(N,M) (HOTENDS > N && TEMP_SENSOR_##NR##_IS_THERMISTOR && defined(HEATER_##N##_##M##TEMP)) #if _MINMAX_TEST(0, MIN) _TEMP_MIN_E(0); @@ -2858,6 +2884,10 @@ void Temperature::init() { while (analog_to_celsius_board(maxtemp_raw_BOARD) > BOARD_MAXTEMP) maxtemp_raw_BOARD -= TEMPDIR(BOARD) * (OVERSAMPLENR); #endif + #if BOTH(HAS_TEMP_SOC, THERMAL_PROTECTION_SOC) + while (analog_to_celsius_soc(maxtemp_raw_SOC) > SOC_MAXTEMP) maxtemp_raw_SOC -= OVERSAMPLENR; + #endif + #if HAS_TEMP_REDUNDANT temp_redundant.target = &( #if REDUNDANT_TEMP_MATCH(TARGET, COOLER) && HAS_TEMP_COOLER @@ -3340,6 +3370,7 @@ void Temperature::update_raw_temperatures() { TERN_(HAS_TEMP_ADC_PROBE, temp_probe.update()); TERN_(HAS_TEMP_ADC_COOLER, temp_cooler.update()); TERN_(HAS_TEMP_ADC_BOARD, temp_board.update()); + TERN_(HAS_TEMP_ADC_SOC, temp_soc.update()); TERN_(HAS_JOY_ADC_X, joystick.x.update()); TERN_(HAS_JOY_ADC_Y, joystick.y.update()); @@ -3370,6 +3401,7 @@ void Temperature::readings_ready() { TERN_(HAS_TEMP_PROBE, temp_probe.reset()); TERN_(HAS_TEMP_COOLER, temp_cooler.reset()); TERN_(HAS_TEMP_BOARD, temp_board.reset()); + TERN_(HAS_TEMP_SOC, temp_soc.reset()); TERN_(HAS_TEMP_REDUNDANT, temp_redundant.reset()); TERN_(HAS_JOY_ADC_X, joystick.x.reset()); @@ -3828,6 +3860,11 @@ void Temperature::isr() { case MeasureTemp_BOARD: ACCUMULATE_ADC(temp_board); break; #endif + #if HAS_TEMP_ADC_SOC + case PrepareTemp_SOC: hal.adc_start(TEMP_SOC_PIN); break; + case MeasureTemp_SOC: ACCUMULATE_ADC(temp_soc); break; + #endif + #if HAS_TEMP_ADC_REDUNDANT case PrepareTemp_REDUNDANT: hal.adc_start(TEMP_REDUNDANT_PIN); break; case MeasureTemp_REDUNDANT: ACCUMULATE_ADC(temp_redundant); break; @@ -3967,8 +4004,10 @@ void Temperature::isr() { * Print a single heater state in the form: * Bed: " B:nnn.nn /nnn.nn" * Chamber: " C:nnn.nn /nnn.nn" - * Probe: " P:nnn.nn /nnn.nn" + * Probe: " P:nnn.nn" * Cooler: " L:nnn.nn /nnn.nn" + * Board: " M:nnn.nn" + * SoC: " S:nnn.nn" * Redundant: " R:nnn.nn /nnn.nn" * Extruder: " T0:nnn.nn /nnn.nn" * With ADC: " T0:nnn.nn /nnn.nn (nnn.nn)" @@ -3977,6 +4016,7 @@ void Temperature::isr() { OPTARG(SHOW_TEMP_ADC_VALUES, const float r) ) { char k; + bool show_t = true; switch (e) { default: #if HAS_TEMP_HOTEND @@ -3989,13 +4029,16 @@ void Temperature::isr() { case H_CHAMBER: k = 'C'; break; #endif #if HAS_TEMP_PROBE - case H_PROBE: k = 'P'; break; + case H_PROBE: k = 'P'; show_t = false; break; #endif #if HAS_TEMP_COOLER case H_COOLER: k = 'L'; break; #endif #if HAS_TEMP_BOARD - case H_BOARD: k = 'M'; break; + case H_BOARD: k = 'M'; show_t = false; break; + #endif + #if HAS_TEMP_SOC + case H_SOC: k = 'S'; show_t = false; break; #endif #if HAS_TEMP_REDUNDANT case H_REDUNDANT: k = 'R'; break; @@ -4010,10 +4053,8 @@ void Temperature::isr() { #else #define SFP 2 #endif - SERIAL_CHAR(':'); - SERIAL_PRINT(c, SFP); - SERIAL_ECHOPGM(" /"); - SERIAL_PRINT(t, SFP); + SERIAL_CHAR(':'); SERIAL_PRINT(c, SFP); + if (show_t) { SERIAL_ECHOPGM(" /"); SERIAL_PRINT(t, SFP); } #if ENABLED(SHOW_TEMP_ADC_VALUES) // Temperature MAX SPI boards do not have an OVERSAMPLENR defined SERIAL_ECHOPGM(" (", TERN(HAS_MAXTC_LIBRARIES, k == 'T', false) ? r : r * RECIPROCAL(OVERSAMPLENR)); @@ -4043,6 +4084,9 @@ void Temperature::isr() { #if HAS_TEMP_BOARD print_heater_state(H_BOARD, degBoard(), 0 OPTARG(SHOW_TEMP_ADC_VALUES, rawBoardTemp())); #endif + #if HAS_TEMP_SOC + print_heater_state(H_SOC, degSoc(), 0 OPTARG(SHOW_TEMP_ADC_VALUES, rawSocTemp())); + #endif #if HAS_TEMP_REDUNDANT if (include_r) print_heater_state(H_REDUNDANT, degRedundant(), degRedundantTarget() OPTARG(SHOW_TEMP_ADC_VALUES, rawRedundantTemp())); #endif diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index 4bf76e5d4839..2fdd1f02c8dd 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -54,6 +54,7 @@ typedef enum : int_fast8_t { H_COOLER = HID_COOLER, H_PROBE = HID_PROBE, H_BOARD = HID_BOARD, + H_SOC = HID_SOC, H_CHAMBER = HID_CHAMBER, H_BED = HID_BED, H_E0 = HID_E0, H_E1, H_E2, H_E3, H_E4, H_E5, H_E6, H_E7, @@ -83,6 +84,9 @@ enum ADCSensorState : char { #if HAS_TEMP_ADC_BOARD PrepareTemp_BOARD, MeasureTemp_BOARD, #endif + #if HAS_TEMP_ADC_SOC + PrepareTemp_SOC, MeasureTemp_SOC, + #endif #if HAS_TEMP_ADC_REDUNDANT PrepareTemp_REDUNDANT, MeasureTemp_REDUNDANT, #endif @@ -480,6 +484,9 @@ struct PIDHeaterInfo : public HeaterInfo { #if HAS_TEMP_BOARD typedef temp_info_t board_info_t; #endif +#if HAS_TEMP_SOC + typedef temp_info_t soc_info_t; +#endif // Heater watch handling template @@ -607,6 +614,9 @@ class Temperature { #if HAS_TEMP_BOARD static board_info_t temp_board; #endif + #if HAS_TEMP_SOC + static soc_info_t temp_soc; + #endif #if HAS_TEMP_REDUNDANT static redundant_info_t temp_redundant; #endif @@ -754,6 +764,10 @@ class Temperature { static raw_adc_t mintemp_raw_BOARD, maxtemp_raw_BOARD; #endif + #if BOTH(HAS_TEMP_SOC, THERMAL_PROTECTION_SOC) + static raw_adc_t maxtemp_raw_SOC; + #endif + #if MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED > 1 static uint8_t consecutive_low_temperature_error[HOTENDS]; #endif @@ -846,6 +860,9 @@ class Temperature { #if HAS_TEMP_BOARD static celsius_float_t analog_to_celsius_board(const raw_adc_t raw); #endif + #if HAS_TEMP_SOC + static celsius_float_t analog_to_celsius_soc(const raw_adc_t raw); + #endif #if HAS_TEMP_REDUNDANT static celsius_float_t analog_to_celsius_redundant(const raw_adc_t raw); #endif @@ -1119,6 +1136,14 @@ class Temperature { static celsius_t wholeDegBoard() { return static_cast(temp_board.celsius + 0.5f); } #endif + #if HAS_TEMP_SOC + #if ENABLED(SHOW_TEMP_ADC_VALUES) + static raw_adc_t rawSocTemp() { return temp_soc.getraw(); } + #endif + static celsius_float_t degSoc() { return temp_soc.celsius; } + static celsius_t wholeDegSoc() { return static_cast(temp_soc.celsius + 0.5f); } + #endif + #if HAS_TEMP_REDUNDANT #if ENABLED(SHOW_TEMP_ADC_VALUES) static raw_adc_t rawRedundantTemp() { return temp_redundant.getraw(); } diff --git a/Marlin/src/module/thermistor/thermistor_1.h b/Marlin/src/module/thermistor/thermistor_1.h index 2ebf8da550a0..e581f1b5cd4b 100644 --- a/Marlin/src/module/thermistor/thermistor_1.h +++ b/Marlin/src/module/thermistor/thermistor_1.h @@ -23,6 +23,10 @@ // R25 = 100 kOhm, beta25 = 4092 K, 4.7 kOhm pull-up, bed thermistor constexpr temp_entry_t temptable_1[] PROGMEM = { + { OV( 18), 320 }, + { OV( 19), 315 }, + { OV( 20), 310 }, + { OV( 22), 305 }, { OV( 23), 300 }, { OV( 25), 295 }, { OV( 27), 290 }, diff --git a/Marlin/src/module/thermistor/thermistor_14.h b/Marlin/src/module/thermistor/thermistor_14.h new file mode 100644 index 000000000000..f0bc6f606ee8 --- /dev/null +++ b/Marlin/src/module/thermistor/thermistor_14.h @@ -0,0 +1,85 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2023 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +// R25 = 100 kOhm, beta25 = 4092 K, 4.7 kOhm pull-up, bed thermistor +const temp_entry_t temptable_14[] PROGMEM = { + { OV( 23), 275 }, + { OV( 25), 270 }, + { OV( 27), 265 }, + { OV( 28), 260 }, + { OV( 31), 255 }, + { OV( 33), 250 }, + { OV( 35), 245 }, + { OV( 38), 240 }, + { OV( 41), 235 }, + { OV( 44), 230 }, + { OV( 47), 225 }, + { OV( 52), 220 }, + { OV( 56), 215 }, + { OV( 62), 210 }, + { OV( 68), 205 }, + { OV( 74), 200 }, + { OV( 81), 195 }, + { OV( 90), 190 }, + { OV( 99), 185 }, + { OV( 108), 180 }, + { OV( 121), 175 }, + { OV( 133), 170 }, + { OV( 147), 165 }, + { OV( 162), 160 }, + { OV( 180), 155 }, + { OV( 199), 150 }, + { OV( 219), 145 }, + { OV( 243), 140 }, + { OV( 268), 135 }, + { OV( 296), 130 }, + { OV( 326), 125 }, + { OV( 358), 120 }, + { OV( 398), 115 }, + { OV( 435), 110 }, + { OV( 476), 105 }, + { OV( 519), 100 }, + { OV( 566), 95 }, + { OV( 610), 90 }, + { OV( 658), 85 }, + { OV( 703), 80 }, + { OV( 742), 75 }, + { OV( 773), 70 }, + { OV( 807), 65 }, + { OV( 841), 60 }, + { OV( 871), 55 }, + { OV( 895), 50 }, + { OV( 918), 45 }, + { OV( 937), 40 }, + { OV( 954), 35 }, + { OV( 968), 30 }, + { OV( 978), 25 }, + { OV( 985), 20 }, + { OV( 993), 15 }, + { OV( 999), 10 }, + { OV(1004), 5 }, + { OV(1008), 0 }, + { OV(1012), -5 }, + { OV(1016), -10 }, + { OV(1020), -15 } +}; diff --git a/Marlin/src/module/thermistor/thermistors.h b/Marlin/src/module/thermistor/thermistors.h index c596d746f7fd..5d4a8a7c92bc 100644 --- a/Marlin/src/module/thermistor/thermistors.h +++ b/Marlin/src/module/thermistor/thermistors.h @@ -109,6 +109,9 @@ typedef struct { raw_adc_t value; celsius_t celsius; } temp_entry_t; #if ANY_THERMISTOR_IS(13) // beta25 = 4100 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "Hisens" #include "thermistor_13.h" #endif +#if ANY_THERMISTOR_IS(14) // beta25 = 4092 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "EPCOS" for hot bed + #include "thermistor_14.h" +#endif #if ANY_THERMISTOR_IS(15) // JGAurora A5 thermistor calibration #include "thermistor_15.h" #endif @@ -532,6 +535,10 @@ static_assert(255 > TEMPTABLE_0_LEN || 255 > TEMPTABLE_1_LEN || 255 > TEMPTABLE_ #define TEMP_SENSOR_BOARD_RAW_LO_TEMP MAX_RAW_THERMISTOR_VALUE #endif #endif +#ifndef TEMP_SENSOR_SOC_RAW_HI_TEMP + #define TEMP_SENSOR_SOC_RAW_LO_TEMP 0 + #define TEMP_SENSOR_SOC_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE +#endif #ifndef TEMP_SENSOR_REDUNDANT_RAW_HI_TEMP #if TT_REVRAW(REDUNDANT) #define TEMP_SENSOR_REDUNDANT_RAW_HI_TEMP MAX_RAW_THERMISTOR_VALUE diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp index a91f6f742d25..cce3669355e1 100644 --- a/Marlin/src/module/tool_change.cpp +++ b/Marlin/src/module/tool_change.cpp @@ -880,7 +880,7 @@ void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0. } // Ensure X axis DIR pertains to the correct carriage - stepper.set_directions(); + stepper.apply_directions(); DEBUG_ECHOLNPGM("Active extruder parked: ", active_extruder_parked ? "yes" : "no"); DEBUG_POS("New extruder (parked)", current_position); diff --git a/Marlin/src/pins/esp32/env_validate.h b/Marlin/src/pins/esp32/env_validate.h index ce14c33414ad..0bfd0ebd92be 100644 --- a/Marlin/src/pins/esp32/env_validate.h +++ b/Marlin/src/pins/esp32/env_validate.h @@ -19,8 +19,11 @@ * along with this program. If not, see . * */ -#pragma once +#ifndef ENV_VALIDATE_H +#define ENV_VALIDATE_H #if NOT_TARGET(ARDUINO_ARCH_ESP32) #error "Oops! Select an ESP32 board in 'Tools > Board.'" #endif + +#endif diff --git a/Marlin/src/pins/esp32/pins_E4D.h b/Marlin/src/pins/esp32/pins_E4D.h index 15b697a85b2c..06e46e3c4c08 100644 --- a/Marlin/src/pins/esp32/pins_E4D.h +++ b/Marlin/src/pins/esp32/pins_E4D.h @@ -30,9 +30,7 @@ #include "env_validate.h" -#if EXTRUDERS > 1 || E_STEPPERS > 1 - #error "E4d@box only supports 1 E stepper." -#elif HAS_MULTI_HOTEND +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "E4d@box only supports 1 hotend / E stepper." #endif diff --git a/Marlin/src/pins/esp32/pins_FYSETC_E4.h b/Marlin/src/pins/esp32/pins_FYSETC_E4.h index 7dc59979c8f1..4bcffb545ee0 100644 --- a/Marlin/src/pins/esp32/pins_FYSETC_E4.h +++ b/Marlin/src/pins/esp32/pins_FYSETC_E4.h @@ -30,9 +30,7 @@ #include "env_validate.h" -#if EXTRUDERS > 1 || E_STEPPERS > 1 - #error "FYSETC E4 only supports 1 E stepper." -#elif HAS_MULTI_HOTEND +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "FYSETC E4 only supports 1 hotend / E stepper." #endif diff --git a/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h b/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h index 493269cf2c20..cfb682df5424 100644 --- a/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h +++ b/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h @@ -179,7 +179,7 @@ #if SD_CONNECTION_IS(ONBOARD) #define FORCE_SOFT_SPI #endif - #if BOTH(MKS_MINI_12864_V3, SDSUPPORT) + #if BOTH(MKS_MINI_12864_V3, HAS_MEDIA) #define PAUSE_LCD_FOR_BUSY_SD #endif #else diff --git a/Marlin/src/pins/esp32/pins_MRR_ESPA.h b/Marlin/src/pins/esp32/pins_MRR_ESPA.h index e9e3db575896..ba5f6cbe35fa 100644 --- a/Marlin/src/pins/esp32/pins_MRR_ESPA.h +++ b/Marlin/src/pins/esp32/pins_MRR_ESPA.h @@ -30,9 +30,7 @@ #include "env_validate.h" -#if EXTRUDERS > 1 || E_STEPPERS > 1 - #error "MRR ESPA only supports 1 E stepper." -#elif HAS_MULTI_HOTEND +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "MRR ESPA only supports 1 hotend / E stepper." #endif diff --git a/Marlin/src/pins/esp32/pins_PANDA_M4.h b/Marlin/src/pins/esp32/pins_PANDA_M4.h index 5e2e72af05df..c619be43a5f8 100644 --- a/Marlin/src/pins/esp32/pins_PANDA_M4.h +++ b/Marlin/src/pins/esp32/pins_PANDA_M4.h @@ -27,6 +27,10 @@ #define BOARD_INFO_NAME "Panda_M4" +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 + #error "PANDA M4 only supports 1 hotend / E stepper." +#endif + #include "pins_PANDA_common.h" // diff --git a/Marlin/src/pins/esp32/pins_PANDA_ZHU.h b/Marlin/src/pins/esp32/pins_PANDA_ZHU.h index 47500578976e..f2a5f440f674 100644 --- a/Marlin/src/pins/esp32/pins_PANDA_ZHU.h +++ b/Marlin/src/pins/esp32/pins_PANDA_ZHU.h @@ -27,6 +27,12 @@ #define BOARD_INFO_NAME "Panda_ZHU" +#if E_STEPPERS > 5 + #error "PANDA ZHU supports up to 5 E steppers." +#if HAS_MULTI_HOTEND + #error "PANDA ZHU only supports 1 hotend." +#endif + #include "pins_PANDA_common.h" // diff --git a/Marlin/src/pins/esp32/pins_PANDA_common.h b/Marlin/src/pins/esp32/pins_PANDA_common.h index c66bdf0bd1a2..b24babd96b53 100644 --- a/Marlin/src/pins/esp32/pins_PANDA_common.h +++ b/Marlin/src/pins/esp32/pins_PANDA_common.h @@ -63,10 +63,10 @@ #define TEMP_BED_PIN 36 // Analog Input #if ENABLED(MAX31856_PANDAPI) - #define MAX31856_CLK_PIN 29 - #define MAX31856_MISO_PIN 24 - #define MAX31856_MOSI_PIN 28 - #define MAX31856_CS_PIN 27 + #define TEMP_0_CLK_PIN 29 + #define TEMP_0_MISO_PIN 24 + #define TEMP_0_MOSI_PIN 28 + #define TEMP_0_CS_PIN 27 #endif // @@ -107,7 +107,7 @@ // // SD Card // -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #define SD_MOSI_PIN EXP2_06_PIN #define SD_MISO_PIN EXP2_01_PIN #define SD_SCK_PIN EXP2_02_PIN diff --git a/Marlin/src/pins/gd32f1/env_validate.h b/Marlin/src/pins/gd32f1/env_validate.h index 4b07cce4e5c4..f6882e70d633 100644 --- a/Marlin/src/pins/gd32f1/env_validate.h +++ b/Marlin/src/pins/gd32f1/env_validate.h @@ -19,14 +19,11 @@ * along with this program. If not, see . * */ -#pragma once +#ifndef ENV_VALIDATE_H +#define ENV_VALIDATE_H #if NOT_TARGET(__STM32F1__, STM32F1) - #if DISABLED(ALLOW_STM32F4) - #error "Oops! Select an STM32F1 board in 'Tools > Board.'" - #elif NOT_TARGET(STM32F4) - #error "Oops! Select an STM32F4 board in 'Tools > Board.'" - #endif + #error "Oops! Select an STM32F1 board in 'Tools > Board.'" #endif -#undef ALLOW_STM32F4 +#endif diff --git a/Marlin/src/pins/gd32f1/pins_SOVOL_V131.h b/Marlin/src/pins/gd32f1/pins_SOVOL_V131.h new file mode 100644 index 000000000000..44e527542362 --- /dev/null +++ b/Marlin/src/pins/gd32f1/pins_SOVOL_V131.h @@ -0,0 +1,74 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2023 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +/** + * Sovol 1.3.1 (GD32F103RET6) board pin assignments + */ + +#include "env_validate.h" + +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 + #error "SOVOL V131 only supports 1 hotend / E-stepper." + #define E_ERROR 1 +#endif + +#ifndef BOARD_INFO_NAME + #define BOARD_INFO_NAME "Sovol V131" +#endif +#ifndef DEFAULT_MACHINE_NAME + #define DEFAULT_MACHINE_NAME "Sovol SV06" +#endif + +#include "../stm32f1/pins_CREALITY_V4.h" + +#if HAS_TMC_UART + + /** + * TMC2208/TMC2209 stepper drivers + * + * Hardware serial communication ports. + * If undefined software serial is used according to the pins below + */ + + #define X_SERIAL_TX_PIN PC1 + #define X_SERIAL_RX_PIN PC1 + + #define Y_SERIAL_TX_PIN PC0 + #define Y_SERIAL_RX_PIN PC0 + + #define Z_SERIAL_TX_PIN PA15 + #define Z_SERIAL_RX_PIN PA15 + + #define E0_SERIAL_TX_PIN PC14 + #define E0_SERIAL_RX_PIN PC14 + + // Reduce baud rate to improve software serial reliability + #define TMC_BAUD_RATE 19200 + +#endif // HAS_TMC_UART + +// +// SD Card +// +#define ONBOARD_SPI_DEVICE 1 +#define ONBOARD_SD_CS_PIN PA4 // SDSS diff --git a/Marlin/src/pins/gd32f1/pins_TRIGORILLA_V006.h b/Marlin/src/pins/gd32f1/pins_TRIGORILLA_V006.h index f09f63322080..ee4376c50a9a 100644 --- a/Marlin/src/pins/gd32f1/pins_TRIGORILLA_V006.h +++ b/Marlin/src/pins/gd32f1/pins_TRIGORILLA_V006.h @@ -115,10 +115,10 @@ // #define SD_DETECT_PIN PC7 -#ifndef SDIO_SUPPORT - #define SDIO_SUPPORT +#ifndef ONBOARD_SDIO + #define ONBOARD_SDIO #endif -#if ENABLED(SDIO_SUPPORT) +#if ENABLED(ONBOARD_SDIO) // // SPI // diff --git a/Marlin/src/pins/linux/pins_RAMPS_LINUX.h b/Marlin/src/pins/linux/pins_RAMPS_LINUX.h index d7f53568e6dd..e322af8fec22 100644 --- a/Marlin/src/pins/linux/pins_RAMPS_LINUX.h +++ b/Marlin/src/pins/linux/pins_RAMPS_LINUX.h @@ -136,7 +136,7 @@ #define TEMP_BED_PIN 2 // Analog Input // SPI for MAX Thermocouple -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN 66 // Don't use 53 if using Display/SD card #else #define TEMP_0_CS_PIN 66 // Don't use 49 (SD_DETECT_PIN) @@ -408,7 +408,7 @@ #ifndef TFT_DRIVER #define TFT_DRIVER ST7796 #endif - #ifndef TOUCH_SCREEN_CALIBRATION + #if DISABLED(TOUCH_SCREEN_CALIBRATION) #if ENABLED(TFT_RES_320x240) #ifndef TOUCH_CALIBRATION_X #define TOUCH_CALIBRATION_X 20525 diff --git a/Marlin/src/pins/lpc1768/env_validate.h b/Marlin/src/pins/lpc1768/env_validate.h index adb3ea938dc2..8a6a1cebd368 100644 --- a/Marlin/src/pins/lpc1768/env_validate.h +++ b/Marlin/src/pins/lpc1768/env_validate.h @@ -19,7 +19,8 @@ * along with this program. If not, see . * */ -#pragma once +#ifndef ENV_VALIDATE_H +#define ENV_VALIDATE_H #if ENABLED(REQUIRE_LPC1769) && NOT_TARGET(MCU_LPC1769) #error "Oops! Make sure you have the LPC1769 environment selected in your IDE." @@ -28,3 +29,5 @@ #endif #undef REQUIRE_LPC1769 + +#endif diff --git a/Marlin/src/pins/lpc1768/pins_BIQU_B300_V1.0.h b/Marlin/src/pins/lpc1768/pins_BIQU_B300_V1.0.h index 7cbad6a7f959..423c89b8c949 100644 --- a/Marlin/src/pins/lpc1768/pins_BIQU_B300_V1.0.h +++ b/Marlin/src/pins/lpc1768/pins_BIQU_B300_V1.0.h @@ -134,7 +134,7 @@ #error "REPRAP_DISCOUNT_SMART_CONTROLLER displays aren't supported by the BIQU B300 v1.0" #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA #error "SDSUPPORT is not supported by the BIQU B300 v1.0 when an LCD controller is used" #endif @@ -146,7 +146,7 @@ * Software SPI is used to interface with a stand-alone SD card reader connected to EXP1. * Hardware SPI can't be used because P0_17 (MISO) is not brought out on this board. */ -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #define SD_SCK_PIN P0_15 // EXP1-5 #define SD_MISO_PIN P0_16 // EXP1-4 #define SD_MOSI_PIN P0_18 // EXP1-3 diff --git a/Marlin/src/pins/lpc1768/pins_BIQU_BQ111_A4.h b/Marlin/src/pins/lpc1768/pins_BIQU_BQ111_A4.h index 914a944027c1..278ba12dd508 100644 --- a/Marlin/src/pins/lpc1768/pins_BIQU_BQ111_A4.h +++ b/Marlin/src/pins/lpc1768/pins_BIQU_BQ111_A4.h @@ -111,7 +111,7 @@ #error "REPRAP_DISCOUNT_SMART_CONTROLLER displays aren't supported by the BIQU BQ111-A4" #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA #error "SDSUPPORT is not supported by the BIQU BQ111-A4 when an LCD controller is used" #endif @@ -123,7 +123,7 @@ * Software SPI is used to interface with a stand-alone SD card reader connected to EXP1. * Hardware SPI can't be used because P0_17 (MISO) is not brought out on this board. */ -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #define SD_SCK_PIN P0_15 // EXP1-5 #define SD_MISO_PIN P0_16 // EXP1-4 @@ -131,7 +131,7 @@ #define SD_SS_PIN P1_30 // EXP1-2 #define SDSS SD_SS_PIN -#endif // SDSUPPORT +#endif // HAS_MEDIA /** * PWMS diff --git a/Marlin/src/pins/lpc1769/env_validate.h b/Marlin/src/pins/lpc1769/env_validate.h index 2e2b63d5203f..0f62412453a4 100644 --- a/Marlin/src/pins/lpc1769/env_validate.h +++ b/Marlin/src/pins/lpc1769/env_validate.h @@ -19,8 +19,11 @@ * along with this program. If not, see . * */ -#pragma once +#ifndef ENV_VALIDATE_H +#define ENV_VALIDATE_H #if NOT_TARGET(MCU_LPC1769) #error "Oops! Make sure you have the LPC1769 environment selected in your IDE." #endif + +#endif diff --git a/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h b/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h index 3793f65bfa41..8c32202d4ddd 100644 --- a/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h +++ b/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h @@ -171,7 +171,10 @@ #define TEMP_0_PIN P0_24 #define TEMP_1_PIN P0_23 #define TEMP_BED_PIN P0_25 -#define TEMP_BOARD_PIN P1_30 // Onboard thermistor, NTC100K + +#ifndef TEMP_BOARD_PIN + #define TEMP_BOARD_PIN P1_30 // Onboard thermistor, NTC100K +#endif // // Heaters / Fans diff --git a/Marlin/src/pins/lpc1769/pins_COHESION3D_MINI.h b/Marlin/src/pins/lpc1769/pins_COHESION3D_MINI.h index 6747a7c2bf1f..70781cb0b588 100644 --- a/Marlin/src/pins/lpc1769/pins_COHESION3D_MINI.h +++ b/Marlin/src/pins/lpc1769/pins_COHESION3D_MINI.h @@ -154,7 +154,7 @@ #define KILL_PIN P2_11 // EXP2-10 - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA #error "SDSUPPORT is not currently supported by the Cohesion3D boards" #endif diff --git a/Marlin/src/pins/mega/env_validate.h b/Marlin/src/pins/mega/env_validate.h index 97c52d4e5e05..7b6462ab7a97 100644 --- a/Marlin/src/pins/mega/env_validate.h +++ b/Marlin/src/pins/mega/env_validate.h @@ -19,7 +19,8 @@ * along with this program. If not, see . * */ -#pragma once +#ifndef ENV_VALIDATE_H +#define ENV_VALIDATE_H #if NOT_TARGET(__AVR_ATmega2560__) #if DISABLED(ALLOW_MEGA1280) @@ -30,3 +31,5 @@ #endif #undef ALLOW_MEGA1280 + +#endif diff --git a/Marlin/src/pins/mega/pins_CHEAPTRONICv2.h b/Marlin/src/pins/mega/pins_CHEAPTRONICv2.h index 4c8dd5c42a67..62215a8224e0 100644 --- a/Marlin/src/pins/mega/pins_CHEAPTRONICv2.h +++ b/Marlin/src/pins/mega/pins_CHEAPTRONICv2.h @@ -128,7 +128,7 @@ // #define BEEPER_PIN 44 -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #define SDSS 53 #define SD_DETECT_PIN 49 #endif diff --git a/Marlin/src/pins/mega/pins_GT2560_V3.h b/Marlin/src/pins/mega/pins_GT2560_V3.h index b04962bbb357..61f30fc7d4f4 100644 --- a/Marlin/src/pins/mega/pins_GT2560_V3.h +++ b/Marlin/src/pins/mega/pins_GT2560_V3.h @@ -33,6 +33,10 @@ #define ALLOW_MEGA1280 #include "env_validate.h" +#if HOTENDS > 3 || E_STEPPERS > 3 + #error "GT2560 supports up to 3 hotends / E steppers." +#endif + #ifndef BOARD_INFO_NAME #define BOARD_INFO_NAME "GT2560 3.x" #endif diff --git a/Marlin/src/pins/mega/pins_PICA.h b/Marlin/src/pins/mega/pins_PICA.h index d9f4a858da8d..5e9d607a7864 100644 --- a/Marlin/src/pins/mega/pins_PICA.h +++ b/Marlin/src/pins/mega/pins_PICA.h @@ -35,6 +35,10 @@ #include "env_validate.h" +#if HOTENDS > 2 || E_STEPPERS > 2 + #error "PICA supports up to 2 hotends / E steppers." +#endif + #ifndef BOARD_INFO_NAME #define BOARD_INFO_NAME "PICA" #endif @@ -123,7 +127,7 @@ #define SSR_PIN 6 // SPI for MAX Thermocouple -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN 66 // Don't use 53 if using Display/SD card #else #define TEMP_0_CS_PIN 66 // Don't use 49 (SD_DETECT_PIN) diff --git a/Marlin/src/pins/mega/pins_WEEDO_62A.h b/Marlin/src/pins/mega/pins_WEEDO_62A.h index 7b417c19a113..d13de7ed3077 100644 --- a/Marlin/src/pins/mega/pins_WEEDO_62A.h +++ b/Marlin/src/pins/mega/pins_WEEDO_62A.h @@ -85,7 +85,7 @@ // // SD Support // -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #define SDSS 53 #define SD_DETECT_PIN 49 #endif diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index d3b3bbbd219d..fe7bc9ed17b6 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -65,6 +65,57 @@ #define HAS_FREE_AUX2_PINS 1 #endif +// +// Check for additional used endstop pins +// +#ifndef X_MIN_PIN + #define X_MIN_PIN 1001 +#endif +#ifndef Y_MIN_PIN + #define Y_MIN_PIN 1002 +#endif +#ifndef Z_MIN_PIN + #define Z_MIN_PIN 1003 +#endif +#ifndef X_MAX_PIN + #define X_MAX_PIN 1004 +#endif +#ifndef Y_MAX_PIN + #define Y_MAX_PIN 1005 +#endif +#ifndef Z_MAX_PIN + #define Z_MAX_PIN 1006 +#endif +#define _ENDSTOP_IS_ANY(P) (HAS_EXTRA_ENDSTOPS && (X2_STOP_PIN == P || Y2_STOP_PIN == P || Z2_STOP_PIN == P || Z3_STOP_PIN == P || Z4_STOP_PIN == P)) +#if ENABLED(DUAL_X_CARRIAGE) || _ENDSTOP_IS_ANY(X_MIN_PIN) || _ENDSTOP_IS_ANY(X_MAX_PIN) + #define NEEDS_X_MINMAX 1 +#endif +#if _ENDSTOP_IS_ANY(Y_MIN_PIN) || _ENDSTOP_IS_ANY(Y_MAX_PIN) + #define NEEDS_Y_MINMAX 1 +#endif +#if _ENDSTOP_IS_ANY(Z_MIN_PIN) || _ENDSTOP_IS_ANY(Z_MAX_PIN) || BOTH(Z_HOME_TO_MAX, Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) + #define NEEDS_Z_MINMAX 1 +#endif +#undef _ENDSTOP_IS_ANY +#if X_MIN_PIN > 1000 + #undef X_MIN_PIN +#endif +#if Y_MIN_PIN > 1000 + #undef Y_MIN_PIN +#endif +#if Z_MIN_PIN > 1000 + #undef Z_MIN_PIN +#endif +#if X_MAX_PIN > 1000 + #undef X_MAX_PIN +#endif +#if Y_MAX_PIN > 1000 + #undef Y_MAX_PIN +#endif +#if Z_MAX_PIN > 1000 + #undef Z_MAX_PIN +#endif + // Test the target within the included pins file #ifdef __MARLIN_DEPS__ #define NOT_TARGET(V...) 0 @@ -321,6 +372,8 @@ #include "sanguino/pins_MELZI_MAKR3D.h" // ATmega644P, ATmega1284P env:sanguino1284p_optimized env:sanguino1284p env:sanguino644p #elif MB(MELZI_CREALITY) #include "sanguino/pins_MELZI_CREALITY.h" // ATmega1284P env:melzi_optiboot_optimized env:melzi_optiboot env:melzi_optimized env:melzi +#elif MB(MELZI_CREALITY_ENDER2) + #include "sanguino/pins_MELZI_CREALITY_E2.h" // ATmega1284P env:melzi_optiboot_optimized env:melzi_optiboot env:melzi_optimized env:melzi #elif MB(MELZI_MALYAN) #include "sanguino/pins_MELZI_MALYAN.h" // ATmega644P, ATmega1284P env:sanguino1284p_optimized env:sanguino1284p env:sanguino644p #elif MB(MELZI_TRONXY) @@ -632,7 +685,7 @@ #elif MB(PANDA_PI_V29) #include "stm32f1/pins_PANDA_PI_V29.h" // STM32F103RCT6 env:PANDA_PI_V29 #elif MB(SOVOL_V131) - #include "stm32f1/pins_SOVOL_V131.h" // GD32F1 env:GD32F103RET6_sovol_maple + #include "gd32f1/pins_SOVOL_V131.h" // GD32F1 env:GD32F103RET6_sovol_maple #elif MB(TRIGORILLA_V006) #include "gd32f1/pins_TRIGORILLA_V006.h" // GD32F103 env:trigorilla_v006 @@ -735,6 +788,8 @@ #include "stm32f4/pins_MKS_SKIPR_V1_0.h" // STM32F4 env:mks_skipr_v1 env:mks_skipr_v1_nobootloader #elif MB(TRONXY_V10) #include "stm32f4/pins_TRONXY_V10.h" // STM32F4 env:STM32F446_tronxy +#elif MB(CREALITY_F401RE) + #include "stm32f4/pins_CREALITY_F401.h" // STM32F4 env:STM32F401RE_creality // // ARM Cortex M7 diff --git a/Marlin/src/pins/pinsDebug.h b/Marlin/src/pins/pinsDebug.h index 5b19ff1b2d0d..25b883eee67c 100644 --- a/Marlin/src/pins/pinsDebug.h +++ b/Marlin/src/pins/pinsDebug.h @@ -168,7 +168,7 @@ const PinInfo pin_array[] PROGMEM = { }; -#include HAL_PATH(../HAL, pinsDebug.h) // get the correct support file for this CPU +#include HAL_PATH(.., pinsDebug.h) // get the correct support file for this CPU #ifndef M43_NEVER_TOUCH #define M43_NEVER_TOUCH(Q) false diff --git a/Marlin/src/pins/pins_postprocess.h b/Marlin/src/pins/pins_postprocess.h index 708eb7f8e6cf..daf6c03aa321 100644 --- a/Marlin/src/pins/pins_postprocess.h +++ b/Marlin/src/pins/pins_postprocess.h @@ -456,6 +456,11 @@ #define TEMP_BED_PIN -1 #endif +// Use ATEMP if TEMP_SOC_PIN is not defined +#if !defined(TEMP_SOC_PIN) && defined(ATEMP) + #define TEMP_SOC_PIN ATEMP +#endif + #ifndef SD_DETECT_PIN #define SD_DETECT_PIN -1 #endif @@ -494,47 +499,37 @@ // // Assign endstop pins for boards with only 3 connectors // -#ifdef X_STOP_PIN - #if X_HOME_TO_MIN - #define X_MIN_PIN X_STOP_PIN - #ifndef X_MAX_PIN - #define X_MAX_PIN -1 +#if HAS_X_AXIS + #ifdef X_STOP_PIN + #if X_HOME_TO_MIN + #define X_MIN_PIN X_STOP_PIN + #else + #define X_MAX_PIN X_STOP_PIN #endif + #elif X_HOME_TO_MIN + #define X_STOP_PIN X_MIN_PIN #else - #define X_MAX_PIN X_STOP_PIN - #ifndef X_MIN_PIN - #define X_MIN_PIN -1 - #endif + #define X_STOP_PIN X_MAX_PIN + #endif + #if !defined(X2_STOP_PIN) && ENABLED(X_DUAL_ENDSTOPS) && PIN_EXISTS(X_STOP) + #define X2_STOP_PIN X_STOP_PIN #endif -#elif X_HOME_TO_MIN - #define X_STOP_PIN X_MIN_PIN -#else - #define X_STOP_PIN X_MAX_PIN -#endif -#if !defined(X2_USE_ENDSTOP) && ENABLED(X_DUAL_ENDSTOPS) && PIN_EXISTS(X_STOP) - #define X2_USE_ENDSTOP _XSTOP_ #endif #if HAS_Y_AXIS #ifdef Y_STOP_PIN #if Y_HOME_TO_MIN #define Y_MIN_PIN Y_STOP_PIN - #ifndef Y_MAX_PIN - #define Y_MAX_PIN -1 - #endif #else #define Y_MAX_PIN Y_STOP_PIN - #ifndef Y_MIN_PIN - #define Y_MIN_PIN -1 - #endif #endif #elif Y_HOME_TO_MIN #define Y_STOP_PIN Y_MIN_PIN #else #define Y_STOP_PIN Y_MAX_PIN #endif - #if !defined(Y2_USE_ENDSTOP) && ENABLED(Y_DUAL_ENDSTOPS) && PIN_EXISTS(Y_STOP) - #define Y2_USE_ENDSTOP _YSTOP_ + #if !defined(Y2_STOP_PIN) && ENABLED(Y_DUAL_ENDSTOPS) && PIN_EXISTS(Y_STOP) + #define Y2_STOP_PIN Y_STOP_PIN #endif #endif @@ -542,14 +537,8 @@ #ifdef Z_STOP_PIN #if Z_HOME_TO_MIN #define Z_MIN_PIN Z_STOP_PIN - #ifndef Z_MAX_PIN - #define Z_MAX_PIN -1 - #endif #else #define Z_MAX_PIN Z_STOP_PIN - #ifndef Z_MIN_PIN - #define Z_MIN_PIN -1 - #endif #endif #elif Z_HOME_TO_MIN #define Z_STOP_PIN Z_MIN_PIN @@ -557,14 +546,14 @@ #define Z_STOP_PIN Z_MAX_PIN #endif #if ENABLED(Z_MULTI_ENDSTOPS) && PIN_EXISTS(Z_STOP) - #ifndef Z2_USE_ENDSTOP - #define Z2_USE_ENDSTOP _ZSTOP_ + #ifndef Z2_STOP_PIN + #define Z2_STOP_PIN Z_STOP_PIN #endif - #if NUM_Z_STEPPERS >= 3 && !defined(Z3_USE_ENDSTOP) - #define Z3_USE_ENDSTOP _ZSTOP_ + #if NUM_Z_STEPPERS >= 3 && !defined(Z3_STOP_PIN) + #define Z3_STOP_PIN Z_STOP_PIN #endif - #if NUM_Z_STEPPERS >= 4 && !defined(Z4_USE_ENDSTOP) - #define Z4_USE_ENDSTOP _ZSTOP_ + #if NUM_Z_STEPPERS >= 4 && !defined(Z4_STOP_PIN) + #define Z4_STOP_PIN Z_STOP_PIN #endif #endif #endif @@ -573,138 +562,84 @@ #ifdef I_STOP_PIN #if I_HOME_TO_MIN #define I_MIN_PIN I_STOP_PIN - #ifndef I_MAX_PIN - #define I_MAX_PIN -1 - #endif #else #define I_MAX_PIN I_STOP_PIN - #ifndef I_MIN_PIN - #define I_MIN_PIN -1 - #endif #endif #elif I_HOME_TO_MIN #define I_STOP_PIN I_MIN_PIN #else #define I_STOP_PIN I_MAX_PIN #endif -#else - #undef I_MIN_PIN - #undef I_MAX_PIN #endif #if HAS_J_AXIS #ifdef J_STOP_PIN #if J_HOME_TO_MIN #define J_MIN_PIN J_STOP_PIN - #ifndef J_MAX_PIN - #define J_MAX_PIN -1 - #endif #else #define J_MAX_PIN J_STOP_PIN - #ifndef J_MIN_PIN - #define J_MIN_PIN -1 - #endif #endif #elif J_HOME_TO_MIN #define J_STOP_PIN J_MIN_PIN #else #define J_STOP_PIN J_MAX_PIN #endif -#else - #undef J_MIN_PIN - #undef J_MAX_PIN #endif #if HAS_K_AXIS #ifdef K_STOP_PIN #if K_HOME_TO_MIN #define K_MIN_PIN K_STOP_PIN - #ifndef K_MAX_PIN - #define K_MAX_PIN -1 - #endif #else #define K_MAX_PIN K_STOP_PIN - #ifndef K_MIN_PIN - #define K_MIN_PIN -1 - #endif #endif #elif K_HOME_TO_MIN #define K_STOP_PIN K_MIN_PIN #else #define K_STOP_PIN K_MAX_PIN #endif -#else - #undef K_MIN_PIN - #undef K_MAX_PIN #endif #if HAS_U_AXIS #ifdef U_STOP_PIN #if U_HOME_TO_MIN #define U_MIN_PIN U_STOP_PIN - #ifndef U_MAX_PIN - #define U_MAX_PIN -1 - #endif #else #define U_MAX_PIN U_STOP_PIN - #ifndef U_MIN_PIN - #define U_MIN_PIN -1 - #endif #endif #elif U_HOME_TO_MIN #define U_STOP_PIN U_MIN_PIN #else #define U_STOP_PIN U_MAX_PIN #endif -#else - #undef U_MIN_PIN - #undef U_MAX_PIN #endif #if HAS_V_AXIS #ifdef V_STOP_PIN #if V_HOME_TO_MIN #define V_MIN_PIN V_STOP_PIN - #ifndef V_MAX_PIN - #define V_MAX_PIN -1 - #endif #else #define V_MAX_PIN V_STOP_PIN - #ifndef V_MIN_PIN - #define V_MIN_PIN -1 - #endif #endif #elif V_HOME_TO_MIN #define V_STOP_PIN V_MIN_PIN #else #define V_STOP_PIN V_MAX_PIN #endif -#else - #undef V_MIN_PIN - #undef V_MAX_PIN #endif #if HAS_W_AXIS #ifdef W_STOP_PIN #if W_HOME_TO_MIN #define W_MIN_PIN W_STOP_PIN - #ifndef W_MAX_PIN - #define W_MAX_PIN -1 - #endif #else #define W_MAX_PIN W_STOP_PIN - #ifndef W_MIN_PIN - #define W_MIN_PIN -1 - #endif #endif #elif W_HOME_TO_MIN #define W_STOP_PIN W_MIN_PIN #else #define W_STOP_PIN W_MAX_PIN #endif -#else - #undef W_MIN_PIN - #undef W_MAX_PIN #endif // Filament Sensor first pin alias @@ -737,6 +672,10 @@ #endif #endif +// Utility macros to define extra axis pins in terms of E pins +#define __EPIN(p,q) E##p##_##q##_PIN +#define _EPIN(p,q) __EPIN(p,q) + /** * Auto-Assignment for Dual X, Dual Y, Multi-Z Steppers * @@ -745,12 +684,16 @@ * overridden in Configuration.h or Configuration_adv.h. */ -#define __PEXI(p,q) PIN_EXISTS(E##p##_##q) -#define _PEXI(p,q) __PEXI(p,q) -#define __EPIN(p,q) E##p##_##q##_PIN -#define _EPIN(p,q) __EPIN(p,q) +#define _E_DIAG_EXISTS(p) PIN_EXISTS(E##p##_DIAG) +#define E_DIAG_EXISTS(p) _E_DIAG_EXISTS(p) + +/** + * For endstop auto-assignment some pins files pre-assign MIN/MAX endstops + * to DIAG pins so those should be preferred over just using En_DIAG_PIN. + * DIAG_REMAPPED(X2, X_MIN) ... PIN_EXISTS(X_MIN) && E(X2_E_INDEX)_DIAG_PIN == X_MIN_PIN + */ #define DIAG_REMAPPED(p,q) (PIN_EXISTS(q) && _EPIN(p##_E_INDEX, DIAG) == q##_PIN) -#define _En_DIAG_(p) _E##p##_DIAG_ +#define _En_DIAG_PIN(p) E##p##_DIAG_PIN // The E0/E1 steppers are always used for Dual E #if ENABLED(E_DUAL_STEPPER_DRIVERS) @@ -762,7 +705,8 @@ #define X2_E_INDEX E_STEPPERS #endif -#if HAS_X2_STEPPER && !defined(X2_DIAG_PIN) && !defined(X2_STEP_PIN) && !PIN_EXISTS(X2_CS_PIN) +// X2 auto-assignment will use up an E stepper, but not if it's chained +#if HAS_X2_STEPPER && !defined(X2_STEP_PIN) && !PIN_EXISTS(X2_CS_PIN) #define Y2_E_INDEX INCREMENT(X2_E_INDEX) #else #define Y2_E_INDEX X2_E_INDEX @@ -816,25 +760,23 @@ // // Auto-assign pins for stallGuard sensorless homing // - #if !defined(X2_DIAG_PIN) && !defined(X2_USE_ENDSTOP) && defined(X2_STALL_SENSITIVITY) && ENABLED(X_DUAL_ENDSTOPS) && _PEXI(X2_E_INDEX, DIAG) - #define X2_DIAG_PIN _EPIN(X2_E_INDEX, DIAG) + #if !defined(X2_STOP_PIN) && defined(X2_STALL_SENSITIVITY) && ENABLED(X_DUAL_ENDSTOPS) && E_DIAG_EXISTS(X2_E_INDEX) #if DIAG_REMAPPED(X2, X_MIN) // If already remapped in the pins file... - #define X2_USE_ENDSTOP _XMIN_ + #define X2_STOP_PIN X_MIN_PIN #elif DIAG_REMAPPED(X2, Y_MIN) - #define X2_USE_ENDSTOP _YMIN_ + #define X2_STOP_PIN Y_MIN_PIN #elif DIAG_REMAPPED(X2, Z_MIN) - #define X2_USE_ENDSTOP _ZMIN_ + #define X2_STOP_PIN Z_MIN_PIN #elif DIAG_REMAPPED(X2, X_MAX) - #define X2_USE_ENDSTOP _XMAX_ + #define X2_STOP_PIN X_MAX_PIN #elif DIAG_REMAPPED(X2, Y_MAX) - #define X2_USE_ENDSTOP _YMAX_ + #define X2_STOP_PIN Y_MAX_PIN #elif DIAG_REMAPPED(X2, Z_MAX) - #define X2_USE_ENDSTOP _ZMAX_ + #define X2_STOP_PIN Z_MAX_PIN #else // Otherwise pick the next free En_DIAG_PIN directly - #define X2_USE_ENDSTOP _En_DIAG_(X2_E_INDEX) + #define X2_STOP_PIN _En_DIAG_PIN(X2_E_INDEX) #endif #define AUTO_ASSIGNED_X2_DIAG 1 - #undef X2_DIAG_PIN // Defined in Conditionals_post.h based on X2_USE_ENDSTOP #endif #endif @@ -851,7 +793,8 @@ #define X2_MS3_PIN -1 #endif -#if HAS_DUAL_Y_STEPPERS && !defined(Y2_DIAG_PIN) && !defined(Y2_STEP_PIN) && !PIN_EXISTS(Y2_CS_PIN) +// Y2 auto-assignment will use up an E stepper, but not if it's chained +#if HAS_DUAL_Y_STEPPERS && !defined(Y2_STEP_PIN) && !PIN_EXISTS(Y2_CS_PIN) #define Z2_E_INDEX INCREMENT(Y2_E_INDEX) #else #define Z2_E_INDEX Y2_E_INDEX @@ -902,25 +845,23 @@ #endif #endif // Auto-assign pins for stallGuard sensorless homing - #if !defined(Y2_DIAG_PIN) && !defined(Y2_USE_ENDSTOP) && defined(Y2_STALL_SENSITIVITY) && ENABLED(Y_DUAL_ENDSTOPS) && _PEXI(Y2_E_INDEX, DIAG) - #define Y2_DIAG_PIN _EPIN(Y2_E_INDEX, DIAG) + #if !defined(Y2_STOP_PIN) && defined(Y2_STALL_SENSITIVITY) && ENABLED(Y_DUAL_ENDSTOPS) && E_DIAG_EXISTS(Y2_E_INDEX) #if DIAG_REMAPPED(Y2, X_MIN) - #define Y2_USE_ENDSTOP _XMIN_ + #define Y2_STOP_PIN X_MIN_PIN #elif DIAG_REMAPPED(Y2, Y_MIN) - #define Y2_USE_ENDSTOP _YMIN_ + #define Y2_STOP_PIN Y_MIN_PIN #elif DIAG_REMAPPED(Y2, Z_MIN) - #define Y2_USE_ENDSTOP _ZMIN_ + #define Y2_STOP_PIN Z_MIN_PIN #elif DIAG_REMAPPED(Y2, X_MAX) - #define Y2_USE_ENDSTOP _XMAX_ + #define Y2_STOP_PIN X_MAX_PIN #elif DIAG_REMAPPED(Y2, Y_MAX) - #define Y2_USE_ENDSTOP _YMAX_ + #define Y2_STOP_PIN Y_MAX_PIN #elif DIAG_REMAPPED(Y2, Z_MAX) - #define Y2_USE_ENDSTOP _ZMAX_ + #define Y2_STOP_PIN Z_MAX_PIN #else - #define Y2_USE_ENDSTOP _En_DIAG_(Y2_E_INDEX) + #define Y2_STOP_PIN _En_DIAG_PIN(Y2_E_INDEX) #endif #define AUTO_ASSIGNED_Y2_DIAG 1 - #undef Y2_DIAG_PIN // Defined in Conditionals_post.h based on Y2_USE_ENDSTOP #endif #endif @@ -937,7 +878,8 @@ #define Y2_MS3_PIN -1 #endif -#if NUM_Z_STEPPERS >= 2 && !defined(Z2_DIAG_PIN) && !defined(Z2_STEP_PIN) && !PIN_EXISTS(Z2_CS_PIN) +// Z2 auto-assignment will use up an E stepper, but not if it's chained +#if NUM_Z_STEPPERS >= 2 && !defined(Z2_STEP_PIN) && !PIN_EXISTS(Z2_CS_PIN) #define Z3_E_INDEX INCREMENT(Z2_E_INDEX) #else #define Z3_E_INDEX Z2_E_INDEX @@ -988,25 +930,23 @@ #endif #endif // Auto-assign pins for stallGuard sensorless homing - #if !defined(Z2_DIAG_PIN) && !defined(Z2_USE_ENDSTOP) && defined(Z2_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && _PEXI(Z2_E_INDEX, DIAG) - #define Z2_DIAG_PIN _EPIN(Z2_E_INDEX, DIAG) + #if !defined(Z2_STOP_PIN) && defined(Z2_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && E_DIAG_EXISTS(Z2_E_INDEX) #if DIAG_REMAPPED(Z2, X_MIN) - #define Z2_USE_ENDSTOP _XMIN_ + #define Z2_STOP_PIN X_MIN_PIN #elif DIAG_REMAPPED(Z2, Y_MIN) - #define Z2_USE_ENDSTOP _YMIN_ + #define Z2_STOP_PIN Y_MIN_PIN #elif DIAG_REMAPPED(Z2, Z_MIN) - #define Z2_USE_ENDSTOP _ZMIN_ + #define Z2_STOP_PIN Z_MIN_PIN #elif DIAG_REMAPPED(Z2, X_MAX) - #define Z2_USE_ENDSTOP _XMAX_ + #define Z2_STOP_PIN X_MAX_PIN #elif DIAG_REMAPPED(Z2, Y_MAX) - #define Z2_USE_ENDSTOP _YMAX_ + #define Z2_STOP_PIN Y_MAX_PIN #elif DIAG_REMAPPED(Z2, Z_MAX) - #define Z2_USE_ENDSTOP _ZMAX_ + #define Z2_STOP_PIN Z_MAX_PIN #else - #define Z2_USE_ENDSTOP _En_DIAG_(Z2_E_INDEX) + #define Z2_STOP_PIN _En_DIAG_PIN(Z2_E_INDEX) #endif #define AUTO_ASSIGNED_Z2_DIAG 1 - #undef Z2_DIAG_PIN // Defined in Conditionals_post.h based on Z2_USE_ENDSTOP #endif #endif @@ -1023,7 +963,8 @@ #define Z2_MS3_PIN -1 #endif -#if NUM_Z_STEPPERS >= 3 && !defined(Z3_DIAG_PIN) && !defined(Z3_STEP_PIN) && !PIN_EXISTS(Z3_CS_PIN) +// Z3 auto-assignment will use up an E stepper, but not if it's chained +#if NUM_Z_STEPPERS >= 3 && !defined(Z3_STEP_PIN) && !PIN_EXISTS(Z3_CS_PIN) #define Z4_E_INDEX INCREMENT(Z3_E_INDEX) #else #define Z4_E_INDEX Z3_E_INDEX @@ -1074,25 +1015,23 @@ #endif #endif // Auto-assign pins for stallGuard sensorless homing - #if !defined(Z3_DIAG_PIN) && !defined(Z3_USE_ENDSTOP) && defined(Z3_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && _PEXI(Z3_E_INDEX, DIAG) - #define Z3_DIAG_PIN _EPIN(Z3_E_INDEX, DIAG) + #if !defined(Z3_STOP_PIN) && defined(Z3_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && E_DIAG_EXISTS(Z3_E_INDEX) #if DIAG_REMAPPED(Z3, X_MIN) - #define Z3_USE_ENDSTOP _XMIN_ + #define Z3_STOP_PIN X_MIN_PIN #elif DIAG_REMAPPED(Z3, Y_MIN) - #define Z3_USE_ENDSTOP _YMIN_ + #define Z3_STOP_PIN Y_MIN_PIN #elif DIAG_REMAPPED(Z3, Z_MIN) - #define Z3_USE_ENDSTOP _ZMIN_ + #define Z3_STOP_PIN Z_MIN_PIN #elif DIAG_REMAPPED(Z3, X_MAX) - #define Z3_USE_ENDSTOP _XMAX_ + #define Z3_STOP_PIN X_MAX_PIN #elif DIAG_REMAPPED(Z3, Y_MAX) - #define Z3_USE_ENDSTOP _YMAX_ + #define Z3_STOP_PIN Y_MAX_PIN #elif DIAG_REMAPPED(Z3, Z_MAX) - #define Z3_USE_ENDSTOP _ZMAX_ + #define Z3_STOP_PIN Z_MAX_PIN #else - #define Z3_USE_ENDSTOP _En_DIAG_(Z3_E_INDEX) + #define Z3_STOP_PIN _En_DIAG_PIN(Z3_E_INDEX) #endif #define AUTO_ASSIGNED_Z3_DIAG 1 - #undef Z3_DIAG_PIN // Defined in Conditionals_post.h based on Z3_USE_ENDSTOP #endif #endif @@ -1109,7 +1048,8 @@ #define Z3_MS3_PIN -1 #endif -#if NUM_Z_STEPPERS >= 4 && !defined(Z4_DIAG_PIN) && !defined(Z4_STEP_PIN) && !PIN_EXISTS(Z4_CS_PIN) +// Z4 auto-assignment will use up an E stepper, but not if it's chained +#if NUM_Z_STEPPERS >= 4 && !defined(Z4_STEP_PIN) && !PIN_EXISTS(Z4_CS_PIN) #define I_E_INDEX INCREMENT(Z4_E_INDEX) #else #define I_E_INDEX Z4_E_INDEX @@ -1160,25 +1100,23 @@ #endif #endif // Auto-assign pins for stallGuard sensorless homing - #if !defined(Z4_DIAG_PIN) && !defined(Z4_USE_ENDSTOP) && defined(Z4_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && _PEXI(Z4_E_INDEX, DIAG) - #define Z4_DIAG_PIN _EPIN(Z4_E_INDEX, DIAG) + #if !defined(Z4_STOP_PIN) && defined(Z4_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && E_DIAG_EXISTS(Z4_E_INDEX) #if DIAG_REMAPPED(Z4, X_MIN) - #define Z4_USE_ENDSTOP _XMIN_ + #define Z4_STOP_PIN X_MIN_PIN #elif DIAG_REMAPPED(Z4, Y_MIN) - #define Z4_USE_ENDSTOP _YMIN_ + #define Z4_STOP_PIN Y_MIN_PIN #elif DIAG_REMAPPED(Z4, Z_MIN) - #define Z4_USE_ENDSTOP _ZMIN_ + #define Z4_STOP_PIN Z_MIN_PIN #elif DIAG_REMAPPED(Z4, X_MAX) - #define Z4_USE_ENDSTOP _XMAX_ + #define Z4_STOP_PIN X_MAX_PIN #elif DIAG_REMAPPED(Z4, Y_MAX) - #define Z4_USE_ENDSTOP _YMAX_ + #define Z4_STOP_PIN Y_MAX_PIN #elif DIAG_REMAPPED(Z4, Z_MAX) - #define Z4_USE_ENDSTOP _ZMAX_ + #define Z4_STOP_PIN Z_MAX_PIN #else - #define Z4_USE_ENDSTOP _En_DIAG_(Z4_E_INDEX) + #define Z4_STOP_PIN _En_DIAG_PIN(Z4_E_INDEX) #endif #define AUTO_ASSIGNED_Z4_DIAG 1 - #undef Z4_DIAG_PIN // Defined in Conditionals_post.h based on Z4_USE_ENDSTOP #endif #endif @@ -1195,7 +1133,8 @@ #define Z4_MS3_PIN -1 #endif -#if HAS_I_AXIS && !defined(I_DIAG_PIN) && !defined(I_STEP_PIN) && !PIN_EXISTS(I_CS_PIN) +// I auto-assignment will use up an E stepper, but not if it's chained +#if HAS_I_AXIS && !defined(I_STEP_PIN) && !PIN_EXISTS(I_CS_PIN) #define J_E_INDEX INCREMENT(I_E_INDEX) #else #define J_E_INDEX I_E_INDEX @@ -1246,25 +1185,23 @@ #endif #endif // Auto-assign pins for stallGuard sensorless homing - #if !defined(I_DIAG_PIN) && !defined(I_USE_ENDSTOP) && defined(I_STALL_SENSITIVITY) && _PEXI(I_E_INDEX, DIAG) - #define I_DIAG_PIN _EPIN(I_E_INDEX, DIAG) + #if !defined(I_STOP_PIN) && defined(I_STALL_SENSITIVITY) && E_DIAG_EXISTS(I_E_INDEX) #if DIAG_REMAPPED(I, X_MIN) - #define I_USE_ENDSTOP _XMIN_ + #define I_STOP_PIN X_MIN_PIN #elif DIAG_REMAPPED(I, Y_MIN) - #define I_USE_ENDSTOP _YMIN_ + #define I_STOP_PIN Y_MIN_PIN #elif DIAG_REMAPPED(I, Z_MIN) - #define I_USE_ENDSTOP _ZMIN_ + #define I_STOP_PIN Z_MIN_PIN #elif DIAG_REMAPPED(I, X_MAX) - #define I_USE_ENDSTOP _XMAX_ + #define I_STOP_PIN X_MAX_PIN #elif DIAG_REMAPPED(I, Y_MAX) - #define I_USE_ENDSTOP _YMAX_ + #define I_STOP_PIN Y_MAX_PIN #elif DIAG_REMAPPED(I, Z_MAX) - #define I_USE_ENDSTOP _ZMAX_ + #define I_STOP_PIN Z_MAX_PIN #else - #define I_USE_ENDSTOP _En_DIAG_(I_E_INDEX) + #define I_STOP_PIN _En_DIAG_PIN(I_E_INDEX) #endif #define AUTO_ASSIGNED_I_DIAG 1 - #undef I_DIAG_PIN // Defined in Conditionals_post.h based on I_USE_ENDSTOP #endif #endif @@ -1281,7 +1218,8 @@ #define I_MS3_PIN -1 #endif -#if HAS_J_AXIS && !defined(J_DIAG_PIN) && !defined(J_STEP_PIN) && !PIN_EXISTS(J_CS_PIN) +// J auto-assignment will use up an E stepper, but not if it's chained +#if HAS_J_AXIS && !defined(J_STEP_PIN) && !PIN_EXISTS(J_CS_PIN) #define K_E_INDEX INCREMENT(J_E_INDEX) #else #define K_E_INDEX J_E_INDEX @@ -1332,25 +1270,23 @@ #endif #endif // Auto-assign pins for stallGuard sensorless homing - #if !defined(J_DIAG_PIN) && !defined(J_USE_ENDSTOP) && defined(J_STALL_SENSITIVITY) && _PEXI(J_E_INDEX, DIAG) - #define J_DIAG_PIN _EPIN(J_E_INDEX, DIAG) + #if !defined(J_STOP_PIN) && defined(J_STALL_SENSITIVITY) && E_DIAG_EXISTS(J_E_INDEX) #if DIAG_REMAPPED(J, X_MIN) - #define J_USE_ENDSTOP _XMIN_ + #define J_STOP_PIN X_MIN_PIN #elif DIAG_REMAPPED(J, Y_MIN) - #define J_USE_ENDSTOP _YMIN_ + #define J_STOP_PIN Y_MIN_PIN #elif DIAG_REMAPPED(J, Z_MIN) - #define J_USE_ENDSTOP _ZMIN_ + #define J_STOP_PIN Z_MIN_PIN #elif DIAG_REMAPPED(J, X_MAX) - #define J_USE_ENDSTOP _XMAX_ + #define J_STOP_PIN X_MAX_PIN #elif DIAG_REMAPPED(J, Y_MAX) - #define J_USE_ENDSTOP _YMAX_ + #define J_STOP_PIN Y_MAX_PIN #elif DIAG_REMAPPED(I, Z_MAX) - #define J_USE_ENDSTOP _ZMAX_ + #define J_STOP_PIN Z_MAX_PIN #else - #define J_USE_ENDSTOP _En_DIAG_(J_E_INDEX) + #define J_STOP_PIN _En_DIAG_PIN(J_E_INDEX) #endif #define AUTO_ASSIGNED_J_DIAG 1 - #undef J_DIAG_PIN // Defined in Conditionals_post.h based on J_USE_ENDSTOP #endif #endif @@ -1367,7 +1303,8 @@ #define J_MS3_PIN -1 #endif -#if HAS_K_AXIS && !defined(K_DIAG_PIN) && !defined(K_STEP_PIN) && !PIN_EXISTS(K_CS_PIN) +// K auto-assignment will use up an E stepper, but not if it's chained +#if HAS_K_AXIS && !defined(K_STEP_PIN) && !PIN_EXISTS(K_CS_PIN) #define U_E_INDEX INCREMENT(K_E_INDEX) #else #define U_E_INDEX K_E_INDEX @@ -1418,25 +1355,23 @@ #endif #endif // Auto-assign pins for stallGuard sensorless homing - #if !defined(K_DIAG_PIN) && !defined(K_USE_ENDSTOP) && defined(K_STALL_SENSITIVITY) && _PEXI(K_E_INDEX, DIAG) - #define K_DIAG_PIN _EPIN(K_E_INDEX, DIAG) + #if !defined(K_STOP_PIN) && defined(K_STALL_SENSITIVITY) && E_DIAG_EXISTS(K_E_INDEX) #if DIAG_REMAPPED(K, X_MIN) - #define K_USE_ENDSTOP _XMIN_ + #define K_STOP_PIN X_MIN_PIN #elif DIAG_REMAPPED(K, Y_MIN) - #define K_USE_ENDSTOP _YMIN_ + #define K_STOP_PIN Y_MIN_PIN #elif DIAG_REMAPPED(K, Z_MIN) - #define K_USE_ENDSTOP _ZMIN_ + #define K_STOP_PIN Z_MIN_PIN #elif DIAG_REMAPPED(K, X_MAX) - #define K_USE_ENDSTOP _XMAX_ + #define K_STOP_PIN X_MAX_PIN #elif DIAG_REMAPPED(K, Y_MAX) - #define K_USE_ENDSTOP _YMAX_ + #define K_STOP_PIN Y_MAX_PIN #elif DIAG_REMAPPED(K, Z_MAX) - #define K_USE_ENDSTOP _ZMAX_ + #define K_STOP_PIN Z_MAX_PIN #else - #define K_USE_ENDSTOP _En_DIAG_(K_E_INDEX) + #define K_STOP_PIN _En_DIAG_PIN(K_E_INDEX) #endif #define AUTO_ASSIGNED_K_DIAG 1 - #undef K_DIAG_PIN // Defined in Conditionals_post.h based on K_USE_ENDSTOP #endif #endif @@ -1453,7 +1388,8 @@ #define K_MS3_PIN -1 #endif -#if HAS_U_AXIS && !defined(U_DIAG_PIN) && !defined(U_STEP_PIN) && !PIN_EXISTS(U_CS_PIN) +// U auto-assignment will use up an E stepper, but not if it's chained +#if HAS_U_AXIS && !defined(U_STEP_PIN) && !PIN_EXISTS(U_CS_PIN) #define V_E_INDEX INCREMENT(U_E_INDEX) #else #define V_E_INDEX U_E_INDEX @@ -1504,25 +1440,23 @@ #endif #endif // Auto-assign pins for stallGuard sensorless homing - #if !defined(U_DIAG_PIN) && !defined(U_USE_ENDSTOP) && defined(U_STALL_SENSITIVITY) && _PEXI(U_E_INDEX, DIAG) - #define U_DIAG_PIN _EPIN(U_E_INDEX, DIAG) + #if !defined(U_STOP_PIN) && defined(U_STALL_SENSITIVITY) && E_DIAG_EXISTS(U_E_INDEX) #if DIAG_REMAPPED(U, X_MIN) - #define U_USE_ENDSTOP _XMIN_ + #define U_STOP_PIN X_MIN_PIN #elif DIAG_REMAPPED(U, Y_MIN) - #define U_USE_ENDSTOP _YMIN_ + #define U_STOP_PIN Y_MIN_PIN #elif DIAG_REMAPPED(U, Z_MIN) - #define U_USE_ENDSTOP _ZMIN_ + #define U_STOP_PIN Z_MIN_PIN #elif DIAG_REMAPPED(U, X_MAX) - #define U_USE_ENDSTOP _XMAX_ + #define U_STOP_PIN X_MAX_PIN #elif DIAG_REMAPPED(U, Y_MAX) - #define U_USE_ENDSTOP _YMAX_ + #define U_STOP_PIN Y_MAX_PIN #elif DIAG_REMAPPED(U, Z_MAX) - #define U_USE_ENDSTOP _ZMAX_ + #define U_STOP_PIN Z_MAX_PIN #else - #define U_USE_ENDSTOP _En_DIAG_(U_E_INDEX) + #define U_STOP_PIN _En_DIAG_PIN(U_E_INDEX) #endif #define AUTO_ASSIGNED_U_DIAG 1 - #undef U_DIAG_PIN // Defined in Conditionals_post.h based on U_USE_ENDSTOP #endif #endif @@ -1539,7 +1473,8 @@ #define U_MS3_PIN -1 #endif -#if HAS_V_AXIS && !defined(V_DIAG_PIN) && !defined(V_STEP_PIN) && !PIN_EXISTS(V_CS_PIN) +// V auto-assignment will use up an E stepper, but not if it's chained +#if HAS_V_AXIS && !defined(V_STEP_PIN) && !PIN_EXISTS(V_CS_PIN) #define W_E_INDEX INCREMENT(V_E_INDEX) #else #define W_E_INDEX V_E_INDEX @@ -1590,25 +1525,23 @@ #endif #endif // Auto-assign pins for stallGuard sensorless homing - #if !defined(V_DIAG_PIN) && !defined(V_USE_ENDSTOP) && defined(V_STALL_SENSITIVITY) && _PEXI(V_E_INDEX, DIAG) - #define V_DIAG_PIN _EPIN(V_E_INDEX, DIAG) + #if !defined(V_STOP_PIN) && defined(V_STALL_SENSITIVITY) && E_DIAG_EXISTS(V_E_INDEX) #if DIAG_REMAPPED(V, X_MIN) - #define V_USE_ENDSTOP _XMIN_ + #define V_STOP_PIN X_MIN_PIN #elif DIAG_REMAPPED(V, Y_MIN) - #define V_USE_ENDSTOP _YMIN_ + #define V_STOP_PIN Y_MIN_PIN #elif DIAG_REMAPPED(V, Z_MIN) - #define V_USE_ENDSTOP _ZMIN_ + #define V_STOP_PIN Z_MIN_PIN #elif DIAG_REMAPPED(V, X_MAX) - #define V_USE_ENDSTOP _XMAX_ + #define V_STOP_PIN X_MAX_PIN #elif DIAG_REMAPPED(V, Y_MAX) - #define V_USE_ENDSTOP _YMAX_ + #define V_STOP_PIN Y_MAX_PIN #elif DIAG_REMAPPED(V, Z_MAX) - #define V_USE_ENDSTOP _ZMAX_ + #define V_STOP_PIN Z_MAX_PIN #else - #define V_USE_ENDSTOP _En_DIAG_(V_E_INDEX) + #define V_STOP_PIN _En_DIAG_PIN(V_E_INDEX) #endif #define AUTO_ASSIGNED_V_DIAG 1 - #undef V_DIAG_PIN // Defined in Conditionals_post.h based on O_USE_ENDSTOP #endif #endif @@ -1670,25 +1603,23 @@ #endif #endif // Auto-assign pins for stallGuard sensorless homing - #if !defined(W_DIAG_PIN) && !defined(W_USE_ENDSTOP) && defined(W_STALL_SENSITIVITY) && _PEXI(W_E_INDEX, DIAG) - #define W_DIAG_PIN _EPIN(W_E_INDEX, DIAG) + #if !defined(W_STOP_PIN) && defined(W_STALL_SENSITIVITY) && E_DIAG_EXISTS(W_E_INDEX) #if DIAG_REMAPPED(W, X_MIN) - #define W_USE_ENDSTOP _XMIN_ + #define W_STOP_PIN X_MIN_PIN #elif DIAG_REMAPPED(W, Y_MIN) - #define W_USE_ENDSTOP _YMIN_ + #define W_STOP_PIN Y_MIN_PIN #elif DIAG_REMAPPED(W, Z_MIN) - #define W_USE_ENDSTOP _ZMIN_ + #define W_STOP_PIN Z_MIN_PIN #elif DIAG_REMAPPED(W, X_MAX) - #define W_USE_ENDSTOP _XMAX_ + #define W_STOP_PIN X_MAX_PIN #elif DIAG_REMAPPED(W, Y_MAX) - #define W_USE_ENDSTOP _YMAX_ + #define W_STOP_PIN Y_MAX_PIN #elif DIAG_REMAPPED(W, Z_MAX) - #define W_USE_ENDSTOP _ZMAX_ + #define W_STOP_PIN Z_MAX_PIN #else - #define W_USE_ENDSTOP _En_DIAG_(W_E_INDEX) + #define W_STOP_PIN _En_DIAG_PIN(W_E_INDEX) #endif #define AUTO_ASSIGNED_W_DIAG 1 - #undef W_DIAG_PIN // Defined in Conditionals_post.h based on Q_USE_ENDSTOP #endif #endif @@ -1705,260 +1636,14 @@ #define W_MS3_PIN -1 #endif -// -// Disable unused endstop / probe pins -// -#define _STOP_IN_USE(N) (X2_USE_ENDSTOP == N || Y2_USE_ENDSTOP == N || Z2_USE_ENDSTOP == N || Z3_USE_ENDSTOP == N || Z4_USE_ENDSTOP == N) -#if !defined(USE_XMAX_PLUG) && _STOP_IN_USE(_XMAX_) - #define USE_XMAX_PLUG -#endif -#if !defined(USE_YMAX_PLUG) && _STOP_IN_USE(_YMAX_) - #define USE_YMAX_PLUG -#endif -#if !defined(USE_ZMAX_PLUG) && _STOP_IN_USE(_ZMAX_) - #define USE_ZMAX_PLUG -#endif -#if !defined(USE_XMIN_PLUG) && _STOP_IN_USE(_XMIN_) - #define USE_XMIN_PLUG -#endif -#if !defined(USE_YMIN_PLUG) && _STOP_IN_USE(_YMIN_) - #define USE_YMIN_PLUG -#endif -#if !defined(USE_ZMIN_PLUG) && _STOP_IN_USE(_ZMIN_) - #define USE_ZMIN_PLUG -#endif -#undef _STOP_IN_USE -#if !USES_Z_MIN_PROBE_PIN - #undef Z_MIN_PROBE_PIN - #define Z_MIN_PROBE_PIN -1 -#endif -#if DISABLED(USE_XMIN_PLUG) - #undef X_MIN_PIN - #define X_MIN_PIN -1 -#endif -#if DISABLED(USE_XMAX_PLUG) - #undef X_MAX_PIN - #define X_MAX_PIN -1 -#endif -#if NONE(USE_XMIN_PLUG, USE_XMAX_PLUG) - #undef X_STOP_PIN -#endif -#if DISABLED(USE_YMIN_PLUG) - #undef Y_MIN_PIN - #define Y_MIN_PIN -1 -#endif -#if DISABLED(USE_YMAX_PLUG) - #undef Y_MAX_PIN - #define Y_MAX_PIN -1 -#endif -#if NONE(USE_YMIN_PLUG, USE_YMAX_PLUG) - #undef Y_STOP_PIN -#endif -#if DISABLED(USE_ZMIN_PLUG) - #undef Z_MIN_PIN - #define Z_MIN_PIN -1 -#endif -#if DISABLED(USE_ZMAX_PLUG) - #undef Z_MAX_PIN - #define Z_MAX_PIN -1 -#endif -#if NONE(USE_ZMIN_PLUG, USE_ZMAX_PLUG) - #undef Z_STOP_PIN -#endif -#if DISABLED(USE_IMIN_PLUG) - #undef I_MIN_PIN - #define I_MIN_PIN -1 -#endif -#if DISABLED(USE_IMAX_PLUG) - #undef I_MAX_PIN - #define I_MAX_PIN -1 -#endif -#if NONE(USE_IMIN_PLUG, USE_IMAX_PLUG) - #undef I_STOP_PIN -#endif -#if DISABLED(USE_JMIN_PLUG) - #undef J_MIN_PIN - #define J_MIN_PIN -1 -#endif -#if DISABLED(USE_JMAX_PLUG) - #undef J_MAX_PIN - #define J_MAX_PIN -1 -#endif -#if NONE(USE_JMIN_PLUG, USE_JMAX_PLUG) - #undef J_STOP_PIN -#endif -#if DISABLED(USE_KMIN_PLUG) - #undef K_MIN_PIN - #define K_MIN_PIN -1 -#endif -#if DISABLED(USE_KMAX_PLUG) - #undef K_MAX_PIN - #define K_MAX_PIN -1 -#endif -#if NONE(USE_KMIN_PLUG, USE_KMAX_PLUG) - #undef K_STOP_PIN -#endif -#if DISABLED(USE_UMIN_PLUG) - #undef U_MIN_PIN - #define U_MIN_PIN -1 -#endif -#if DISABLED(USE_UMAX_PLUG) - #undef U_MAX_PIN - #define U_MAX_PIN -1 -#endif -#if NONE(USE_UMIN_PLUG, USE_UMAX_PLUG) - #undef U_STOP_PIN -#endif -#if DISABLED(USE_VMIN_PLUG) - #undef V_MIN_PIN - #define V_MIN_PIN -1 -#endif -#if DISABLED(USE_VMAX_PLUG) - #undef V_MAX_PIN - #define V_MAX_PIN -1 -#endif -#if NONE(USE_VMIN_PLUG, USE_VMAX_PLUG) - #undef V_STOP_PIN -#endif -#if DISABLED(USE_WMIN_PLUG) - #undef W_MIN_PIN - #define W_MIN_PIN -1 -#endif -#if DISABLED(USE_WMAX_PLUG) - #undef W_MAX_PIN - #define W_MAX_PIN -1 -#endif -#if NONE(USE_WMIN_PLUG, USE_WMAX_PLUG) - #undef W_STOP_PIN -#endif - -#if DISABLED(X_DUAL_ENDSTOPS) || X_HOME_TO_MAX - #undef X2_MIN_PIN -#endif -#if DISABLED(X_DUAL_ENDSTOPS) || X_HOME_TO_MIN - #undef X2_MAX_PIN -#endif -#if DISABLED(Y_DUAL_ENDSTOPS) || Y_HOME_TO_MAX - #undef Y2_MIN_PIN -#endif -#if DISABLED(Y_DUAL_ENDSTOPS) || Y_HOME_TO_MIN - #undef Y2_MAX_PIN -#endif -#if DISABLED(Z_MULTI_ENDSTOPS) || Z_HOME_TO_MAX - #undef Z2_MIN_PIN -#endif -#if DISABLED(Z_MULTI_ENDSTOPS) || Z_HOME_TO_MIN - #undef Z2_MAX_PIN -#endif -#if DISABLED(Z_MULTI_ENDSTOPS) || NUM_Z_STEPPERS < 3 || Z_HOME_TO_MAX - #undef Z3_MIN_PIN -#endif -#if DISABLED(Z_MULTI_ENDSTOPS) || NUM_Z_STEPPERS < 3 || Z_HOME_TO_MIN - #undef Z3_MAX_PIN -#endif -#if DISABLED(Z_MULTI_ENDSTOPS) || NUM_Z_STEPPERS < 4 || Z_HOME_TO_MAX - #undef Z4_MIN_PIN -#endif -#if DISABLED(Z_MULTI_ENDSTOPS) || NUM_Z_STEPPERS < 4 || Z_HOME_TO_MIN - #undef Z4_MAX_PIN -#endif - /** * X_DUAL_ENDSTOPS endstop reassignment */ #if ENABLED(X_DUAL_ENDSTOPS) - #if X_HOME_TO_MAX - #ifndef X2_MAX_PIN - #if PIN_EXISTS(X2_STOP) - #define X2_MAX_PIN X2_STOP_PIN - #elif X2_USE_ENDSTOP == _XMIN_ - #define X2_MAX_PIN X_MIN_PIN - #elif X2_USE_ENDSTOP == _XMAX_ - #define X2_MAX_PIN X_MAX_PIN - #elif X2_USE_ENDSTOP == _XSTOP_ - #define X2_MAX_PIN X_STOP_PIN - #elif X2_USE_ENDSTOP == _YMIN_ - #define X2_MAX_PIN Y_MIN_PIN - #elif X2_USE_ENDSTOP == _YMAX_ - #define X2_MAX_PIN Y_MAX_PIN - #elif X2_USE_ENDSTOP == _YSTOP_ - #define X2_MAX_PIN Y_STOP_PIN - #elif X2_USE_ENDSTOP == _ZMIN_ - #define X2_MAX_PIN Z_MIN_PIN - #elif X2_USE_ENDSTOP == _ZMAX_ - #define X2_MAX_PIN Z_MAX_PIN - #elif X2_USE_ENDSTOP == _ZSTOP_ - #define X2_MAX_PIN Z_STOP_PIN - #elif X2_USE_ENDSTOP == _XDIAG_ - #define X2_MAX_PIN X_DIAG_PIN - #elif X2_USE_ENDSTOP == _YDIAG_ - #define X2_MAX_PIN Y_DIAG_PIN - #elif X2_USE_ENDSTOP == _ZDIAG_ - #define X2_MAX_PIN Z_DIAG_PIN - #elif X2_USE_ENDSTOP == _E0DIAG_ - #define X2_MAX_PIN E0_DIAG_PIN - #elif X2_USE_ENDSTOP == _E1DIAG_ - #define X2_MAX_PIN E1_DIAG_PIN - #elif X2_USE_ENDSTOP == _E2DIAG_ - #define X2_MAX_PIN E2_DIAG_PIN - #elif X2_USE_ENDSTOP == _E3DIAG_ - #define X2_MAX_PIN E3_DIAG_PIN - #elif X2_USE_ENDSTOP == _E4DIAG_ - #define X2_MAX_PIN E4_DIAG_PIN - #elif X2_USE_ENDSTOP == _E5DIAG_ - #define X2_MAX_PIN E5_DIAG_PIN - #elif X2_USE_ENDSTOP == _E6DIAG_ - #define X2_MAX_PIN E6_DIAG_PIN - #elif X2_USE_ENDSTOP == _E7DIAG_ - #define X2_MAX_PIN E7_DIAG_PIN - #endif - #endif - #else - #ifndef X2_MIN_PIN - #if PIN_EXISTS(X2_STOP) - #define X2_MIN_PIN X2_STOP_PIN - #elif X2_USE_ENDSTOP == _XMIN_ - #define X2_MIN_PIN X_MIN_PIN - #elif X2_USE_ENDSTOP == _XMAX_ - #define X2_MIN_PIN X_MAX_PIN - #elif X2_USE_ENDSTOP == _XSTOP_ - #define X2_MIN_PIN X_STOP_PIN - #elif X2_USE_ENDSTOP == _YMIN_ - #define X2_MIN_PIN Y_MIN_PIN - #elif X2_USE_ENDSTOP == _YMAX_ - #define X2_MIN_PIN Y_MAX_PIN - #elif X2_USE_ENDSTOP == _YSTOP_ - #define X2_MIN_PIN Y_STOP_PIN - #elif X2_USE_ENDSTOP == _ZMIN_ - #define X2_MIN_PIN Z_MIN_PIN - #elif X2_USE_ENDSTOP == _ZMAX_ - #define X2_MIN_PIN Z_MAX_PIN - #elif X2_USE_ENDSTOP == _ZSTOP_ - #define X2_MIN_PIN Z_STOP_PIN - #elif X2_USE_ENDSTOP == _XDIAG_ - #define X2_MIN_PIN X_DIAG_PIN - #elif X2_USE_ENDSTOP == _YDIAG_ - #define X2_MIN_PIN Y_DIAG_PIN - #elif X2_USE_ENDSTOP == _ZDIAG_ - #define X2_MIN_PIN Z_DIAG_PIN - #elif X2_USE_ENDSTOP == _E0DIAG_ - #define X2_MIN_PIN E0_DIAG_PIN - #elif X2_USE_ENDSTOP == _E1DIAG_ - #define X2_MIN_PIN E1_DIAG_PIN - #elif X2_USE_ENDSTOP == _E2DIAG_ - #define X2_MIN_PIN E2_DIAG_PIN - #elif X2_USE_ENDSTOP == _E3DIAG_ - #define X2_MIN_PIN E3_DIAG_PIN - #elif X2_USE_ENDSTOP == _E4DIAG_ - #define X2_MIN_PIN E4_DIAG_PIN - #elif X2_USE_ENDSTOP == _E5DIAG_ - #define X2_MIN_PIN E5_DIAG_PIN - #elif X2_USE_ENDSTOP == _E6DIAG_ - #define X2_MIN_PIN E6_DIAG_PIN - #elif X2_USE_ENDSTOP == _E7DIAG_ - #define X2_MIN_PIN E7_DIAG_PIN - #endif - #endif + #if X_HOME_TO_MAX && !defined(X2_MAX_PIN) && PIN_EXISTS(X2_STOP) + #define X2_MAX_PIN X2_STOP_PIN + #elif X_HOME_TO_MIN && !defined(X2_MIN_PIN) && PIN_EXISTS(X2_STOP) + #define X2_MIN_PIN X2_STOP_PIN #endif #endif @@ -1966,98 +1651,10 @@ * Y_DUAL_ENDSTOPS endstop reassignment */ #if ENABLED(Y_DUAL_ENDSTOPS) - #if Y_HOME_TO_MAX - #ifndef Y2_MAX_PIN - #if PIN_EXISTS(Y2_STOP) - #define Y2_MAX_PIN Y2_STOP_PIN - #elif Y2_USE_ENDSTOP == _XMIN_ - #define Y2_MAX_PIN X_MIN_PIN - #elif Y2_USE_ENDSTOP == _XMAX_ - #define Y2_MAX_PIN X_MAX_PIN - #elif Y2_USE_ENDSTOP == _XSTOP_ - #define Y2_MAX_PIN X_STOP_PIN - #elif Y2_USE_ENDSTOP == _YMIN_ - #define Y2_MAX_PIN Y_MIN_PIN - #elif Y2_USE_ENDSTOP == _YMAX_ - #define Y2_MAX_PIN Y_MAX_PIN - #elif Y2_USE_ENDSTOP == _YSTOP_ - #define Y2_MAX_PIN Y_STOP_PIN - #elif Y2_USE_ENDSTOP == _ZMIN_ - #define Y2_MAX_PIN Z_MIN_PIN - #elif Y2_USE_ENDSTOP == _ZMAX_ - #define Y2_MAX_PIN Z_MAX_PIN - #elif Y2_USE_ENDSTOP == _ZSTOP_ - #define Y2_MAX_PIN Z_STOP_PIN - #elif Y2_USE_ENDSTOP == _XDIAG_ - #define Y2_MAX_PIN X_DIAG_PIN - #elif Y2_USE_ENDSTOP == _YDIAG_ - #define Y2_MAX_PIN Y_DIAG_PIN - #elif Y2_USE_ENDSTOP == _ZDIAG_ - #define Y2_MAX_PIN Z_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E0DIAG_ - #define Y2_MAX_PIN E0_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E1DIAG_ - #define Y2_MAX_PIN E1_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E2DIAG_ - #define Y2_MAX_PIN E2_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E3DIAG_ - #define Y2_MAX_PIN E3_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E4DIAG_ - #define Y2_MAX_PIN E4_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E5DIAG_ - #define Y2_MAX_PIN E5_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E6DIAG_ - #define Y2_MAX_PIN E6_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E7DIAG_ - #define Y2_MAX_PIN E7_DIAG_PIN - #endif - #endif - #else - #ifndef Y2_MIN_PIN - #if PIN_EXISTS(Y2_STOP) - #define Y2_MIN_PIN Y2_STOP_PIN - #elif Y2_USE_ENDSTOP == _XMIN_ - #define Y2_MIN_PIN X_MIN_PIN - #elif Y2_USE_ENDSTOP == _XMAX_ - #define Y2_MIN_PIN X_MAX_PIN - #elif Y2_USE_ENDSTOP == _XSTOP_ - #define Y2_MIN_PIN X_STOP_PIN - #elif Y2_USE_ENDSTOP == _YMIN_ - #define Y2_MIN_PIN Y_MIN_PIN - #elif Y2_USE_ENDSTOP == _YMAX_ - #define Y2_MIN_PIN Y_MAX_PIN - #elif Y2_USE_ENDSTOP == _YSTOP_ - #define Y2_MIN_PIN Y_STOP_PIN - #elif Y2_USE_ENDSTOP == _ZMIN_ - #define Y2_MIN_PIN Z_MIN_PIN - #elif Y2_USE_ENDSTOP == _ZMAX_ - #define Y2_MIN_PIN Z_MAX_PIN - #elif Y2_USE_ENDSTOP == _ZSTOP_ - #define Y2_MIN_PIN Z_STOP_PIN - #elif Y2_USE_ENDSTOP == _XDIAG_ - #define Y2_MIN_PIN X_DIAG_PIN - #elif Y2_USE_ENDSTOP == _YDIAG_ - #define Y2_MIN_PIN Y_DIAG_PIN - #elif Y2_USE_ENDSTOP == _ZDIAG_ - #define Y2_MIN_PIN Z_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E0DIAG_ - #define Y2_MIN_PIN E0_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E1DIAG_ - #define Y2_MIN_PIN E1_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E2DIAG_ - #define Y2_MIN_PIN E2_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E3DIAG_ - #define Y2_MIN_PIN E3_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E4DIAG_ - #define Y2_MIN_PIN E4_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E5DIAG_ - #define Y2_MIN_PIN E5_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E6DIAG_ - #define Y2_MIN_PIN E6_DIAG_PIN - #elif Y2_USE_ENDSTOP == _E7DIAG_ - #define Y2_MIN_PIN E7_DIAG_PIN - #endif - #endif + #if Y_HOME_TO_MAX && !defined(Y2_MAX_PIN) && PIN_EXISTS(Y2_STOP) + #define Y2_MAX_PIN Y2_STOP_PIN + #elif Y_HOME_TO_MIN && !defined(Y2_MIN_PIN) && PIN_EXISTS(Y2_STOP) + #define Y2_MIN_PIN Y2_STOP_PIN #endif #endif @@ -2065,294 +1662,26 @@ * Z_MULTI_ENDSTOPS endstop reassignment */ #if ENABLED(Z_MULTI_ENDSTOPS) - - #if Z_HOME_TO_MAX - #ifndef Z2_MAX_PIN - #if PIN_EXISTS(Z2_STOP) - #define Z2_MAX_PIN Z2_STOP_PIN - #elif Z2_USE_ENDSTOP == _XMIN_ - #define Z2_MAX_PIN X_MIN_PIN - #elif Z2_USE_ENDSTOP == _XMAX_ - #define Z2_MAX_PIN X_MAX_PIN - #elif Z2_USE_ENDSTOP == _XSTOP_ - #define Z2_MAX_PIN X_STOP_PIN - #elif Z2_USE_ENDSTOP == _YMIN_ - #define Z2_MAX_PIN Y_MIN_PIN - #elif Z2_USE_ENDSTOP == _YMAX_ - #define Z2_MAX_PIN Y_MAX_PIN - #elif Z2_USE_ENDSTOP == _YSTOP_ - #define Z2_MAX_PIN Y_STOP_PIN - #elif Z2_USE_ENDSTOP == _ZMIN_ - #define Z2_MAX_PIN Z_MIN_PIN - #elif Z2_USE_ENDSTOP == _ZMAX_ - #define Z2_MAX_PIN Z_MAX_PIN - #elif Z2_USE_ENDSTOP == _ZSTOP_ - #define Z2_MAX_PIN Z_STOP_PIN - #elif Z2_USE_ENDSTOP == _XDIAG_ - #define Z2_MAX_PIN X_DIAG_PIN - #elif Z2_USE_ENDSTOP == _YDIAG_ - #define Z2_MAX_PIN Y_DIAG_PIN - #elif Z2_USE_ENDSTOP == _ZDIAG_ - #define Z2_MAX_PIN Z_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E0DIAG_ - #define Z2_MAX_PIN E0_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E1DIAG_ - #define Z2_MAX_PIN E1_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E2DIAG_ - #define Z2_MAX_PIN E2_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E3DIAG_ - #define Z2_MAX_PIN E3_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E4DIAG_ - #define Z2_MAX_PIN E4_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E5DIAG_ - #define Z2_MAX_PIN E5_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E6DIAG_ - #define Z2_MAX_PIN E6_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E7DIAG_ - #define Z2_MAX_PIN E7_DIAG_PIN - #endif - #endif - #else - #ifndef Z2_MIN_PIN - #if PIN_EXISTS(Z2_STOP) - #define Z2_MIN_PIN Z2_STOP_PIN - #elif Z2_USE_ENDSTOP == _XMIN_ - #define Z2_MIN_PIN X_MIN_PIN - #elif Z2_USE_ENDSTOP == _XMAX_ - #define Z2_MIN_PIN X_MAX_PIN - #elif Z2_USE_ENDSTOP == _XSTOP_ - #define Z2_MIN_PIN X_STOP_PIN - #elif Z2_USE_ENDSTOP == _YMIN_ - #define Z2_MIN_PIN Y_MIN_PIN - #elif Z2_USE_ENDSTOP == _YMAX_ - #define Z2_MIN_PIN Y_MAX_PIN - #elif Z2_USE_ENDSTOP == _YSTOP_ - #define Z2_MIN_PIN Y_STOP_PIN - #elif Z2_USE_ENDSTOP == _ZMIN_ - #define Z2_MIN_PIN Z_MIN_PIN - #elif Z2_USE_ENDSTOP == _ZMAX_ - #define Z2_MIN_PIN Z_MAX_PIN - #elif Z2_USE_ENDSTOP == _ZSTOP_ - #define Z2_MIN_PIN Z_STOP_PIN - #elif Z2_USE_ENDSTOP == _XDIAG_ - #define Z2_MIN_PIN X_DIAG_PIN - #elif Z2_USE_ENDSTOP == _YDIAG_ - #define Z2_MIN_PIN Y_DIAG_PIN - #elif Z2_USE_ENDSTOP == _ZDIAG_ - #define Z2_MIN_PIN Z_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E0DIAG_ - #define Z2_MIN_PIN E0_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E1DIAG_ - #define Z2_MIN_PIN E1_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E2DIAG_ - #define Z2_MIN_PIN E2_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E3DIAG_ - #define Z2_MIN_PIN E3_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E4DIAG_ - #define Z2_MIN_PIN E4_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E5DIAG_ - #define Z2_MIN_PIN E5_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E6DIAG_ - #define Z2_MIN_PIN E6_DIAG_PIN - #elif Z2_USE_ENDSTOP == _E7DIAG_ - #define Z2_MIN_PIN E7_DIAG_PIN - #endif - #endif + #if Z_HOME_TO_MAX && !defined(Z2_MAX_PIN) && PIN_EXISTS(Z2_STOP) + #define Z2_MAX_PIN Z2_STOP_PIN + #elif Z_HOME_TO_MIN && !defined(Z2_MIN_PIN) && PIN_EXISTS(Z2_STOP) + #define Z2_MIN_PIN Z2_STOP_PIN #endif - #if NUM_Z_STEPPERS >= 3 - #if Z_HOME_TO_MAX - #ifndef Z3_MAX_PIN - #if PIN_EXISTS(Z3_STOP) - #define Z3_MAX_PIN Z3_STOP_PIN - #elif Z3_USE_ENDSTOP == _XMIN_ - #define Z3_MAX_PIN X_MIN_PIN - #elif Z3_USE_ENDSTOP == _XMAX_ - #define Z3_MAX_PIN X_MAX_PIN - #elif Z3_USE_ENDSTOP == _XSTOP_ - #define Z3_MAX_PIN X_STOP_PIN - #elif Z3_USE_ENDSTOP == _YMIN_ - #define Z3_MAX_PIN Y_MIN_PIN - #elif Z3_USE_ENDSTOP == _YMAX_ - #define Z3_MAX_PIN Y_MAX_PIN - #elif Z3_USE_ENDSTOP == _YSTOP_ - #define Z3_MAX_PIN Y_STOP_PIN - #elif Z3_USE_ENDSTOP == _ZMIN_ - #define Z3_MAX_PIN Z_MIN_PIN - #elif Z3_USE_ENDSTOP == _ZMAX_ - #define Z3_MAX_PIN Z_MAX_PIN - #elif Z3_USE_ENDSTOP == _ZSTOP_ - #define Z3_MAX_PIN Z_STOP_PIN - #elif Z3_USE_ENDSTOP == _XDIAG_ - #define Z3_MAX_PIN X_DIAG_PIN - #elif Z3_USE_ENDSTOP == _YDIAG_ - #define Z3_MAX_PIN Y_DIAG_PIN - #elif Z3_USE_ENDSTOP == _ZDIAG_ - #define Z3_MAX_PIN Z_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E0DIAG_ - #define Z3_MAX_PIN E0_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E1DIAG_ - #define Z3_MAX_PIN E1_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E2DIAG_ - #define Z3_MAX_PIN E2_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E3DIAG_ - #define Z3_MAX_PIN E3_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E4DIAG_ - #define Z3_MAX_PIN E4_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E5DIAG_ - #define Z3_MAX_PIN E5_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E6DIAG_ - #define Z3_MAX_PIN E6_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E7DIAG_ - #define Z3_MAX_PIN E7_DIAG_PIN - #endif - #endif - #else - #ifndef Z3_MIN_PIN - #if PIN_EXISTS(Z3_STOP) - #define Z3_MIN_PIN Z3_STOP_PIN - #elif Z3_USE_ENDSTOP == _XMIN_ - #define Z3_MIN_PIN X_MIN_PIN - #elif Z3_USE_ENDSTOP == _XMAX_ - #define Z3_MIN_PIN X_MAX_PIN - #elif Z3_USE_ENDSTOP == _XSTOP_ - #define Z3_MIN_PIN X_STOP_PIN - #elif Z3_USE_ENDSTOP == _YMIN_ - #define Z3_MIN_PIN Y_MIN_PIN - #elif Z3_USE_ENDSTOP == _YMAX_ - #define Z3_MIN_PIN Y_MAX_PIN - #elif Z3_USE_ENDSTOP == _YSTOP_ - #define Z3_MIN_PIN Y_STOP_PIN - #elif Z3_USE_ENDSTOP == _ZMIN_ - #define Z3_MIN_PIN Z_MIN_PIN - #elif Z3_USE_ENDSTOP == _ZMAX_ - #define Z3_MIN_PIN Z_MAX_PIN - #elif Z3_USE_ENDSTOP == _ZSTOP_ - #define Z3_MIN_PIN Z_STOP_PIN - #elif Z3_USE_ENDSTOP == _XDIAG_ - #define Z3_MIN_PIN X_DIAG_PIN - #elif Z3_USE_ENDSTOP == _YDIAG_ - #define Z3_MIN_PIN Y_DIAG_PIN - #elif Z3_USE_ENDSTOP == _ZDIAG_ - #define Z3_MIN_PIN Z_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E0DIAG_ - #define Z3_MIN_PIN E0_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E1DIAG_ - #define Z3_MIN_PIN E1_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E2DIAG_ - #define Z3_MIN_PIN E2_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E3DIAG_ - #define Z3_MIN_PIN E3_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E4DIAG_ - #define Z3_MIN_PIN E4_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E5DIAG_ - #define Z3_MIN_PIN E5_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E6DIAG_ - #define Z3_MIN_PIN E6_DIAG_PIN - #elif Z3_USE_ENDSTOP == _E7DIAG_ - #define Z3_MIN_PIN E7_DIAG_PIN - #endif - #endif + #if Z_HOME_TO_MAX && !defined(Z3_MAX_PIN) && PIN_EXISTS(Z3_STOP) + #define Z3_MAX_PIN Z3_STOP_PIN + #elif Z_HOME_TO_MIN && !defined(Z3_MIN_PIN) && PIN_EXISTS(Z3_STOP) + #define Z3_MIN_PIN Z3_STOP_PIN #endif #endif - #if NUM_Z_STEPPERS >= 4 - #if Z_HOME_TO_MAX - #ifndef Z4_MAX_PIN - #if PIN_EXISTS(Z4_STOP) - #define Z4_MAX_PIN Z4_STOP_PIN - #elif Z4_USE_ENDSTOP == _XMIN_ - #define Z4_MAX_PIN X_MIN_PIN - #elif Z4_USE_ENDSTOP == _XMAX_ - #define Z4_MAX_PIN X_MAX_PIN - #elif Z4_USE_ENDSTOP == _XSTOP_ - #define Z4_MAX_PIN X_STOP_PIN - #elif Z4_USE_ENDSTOP == _YMIN_ - #define Z4_MAX_PIN Y_MIN_PIN - #elif Z4_USE_ENDSTOP == _YMAX_ - #define Z4_MAX_PIN Y_MAX_PIN - #elif Z4_USE_ENDSTOP == _YSTOP_ - #define Z4_MAX_PIN Y_STOP_PIN - #elif Z4_USE_ENDSTOP == _ZMIN_ - #define Z4_MAX_PIN Z_MIN_PIN - #elif Z4_USE_ENDSTOP == _ZMAX_ - #define Z4_MAX_PIN Z_MAX_PIN - #elif Z4_USE_ENDSTOP == _ZSTOP_ - #define Z4_MAX_PIN Z_STOP_PIN - #elif Z4_USE_ENDSTOP == _XDIAG_ - #define Z4_MAX_PIN X_DIAG_PIN - #elif Z4_USE_ENDSTOP == _YDIAG_ - #define Z4_MAX_PIN Y_DIAG_PIN - #elif Z4_USE_ENDSTOP == _ZDIAG_ - #define Z4_MAX_PIN Z_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E0DIAG_ - #define Z4_MAX_PIN E0_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E1DIAG_ - #define Z4_MAX_PIN E1_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E2DIAG_ - #define Z4_MAX_PIN E2_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E3DIAG_ - #define Z4_MAX_PIN E3_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E4DIAG_ - #define Z4_MAX_PIN E4_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E5DIAG_ - #define Z4_MAX_PIN E5_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E6DIAG_ - #define Z4_MAX_PIN E6_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E7DIAG_ - #define Z4_MAX_PIN E7_DIAG_PIN - #endif - #endif - #else - #ifndef Z4_MIN_PIN - #if PIN_EXISTS(Z4_STOP) - #define Z4_MIN_PIN Z4_STOP_PIN - #elif Z4_USE_ENDSTOP == _XMIN_ - #define Z4_MIN_PIN X_MIN_PIN - #elif Z4_USE_ENDSTOP == _XMAX_ - #define Z4_MIN_PIN X_MAX_PIN - #elif Z4_USE_ENDSTOP == _XSTOP_ - #define Z4_MIN_PIN X_STOP_PIN - #elif Z4_USE_ENDSTOP == _YMIN_ - #define Z4_MIN_PIN Y_MIN_PIN - #elif Z4_USE_ENDSTOP == _YMAX_ - #define Z4_MIN_PIN Y_MAX_PIN - #elif Z4_USE_ENDSTOP == _YSTOP_ - #define Z4_MIN_PIN Y_STOP_PIN - #elif Z4_USE_ENDSTOP == _ZMIN_ - #define Z4_MIN_PIN Z_MIN_PIN - #elif Z4_USE_ENDSTOP == _ZMAX_ - #define Z4_MIN_PIN Z_MAX_PIN - #elif Z4_USE_ENDSTOP == _ZSTOP_ - #define Z4_MIN_PIN Z_STOP_PIN - #elif Z4_USE_ENDSTOP == _XDIAG_ - #define Z4_MIN_PIN X_DIAG_PIN - #elif Z4_USE_ENDSTOP == _YDIAG_ - #define Z4_MIN_PIN Y_DIAG_PIN - #elif Z4_USE_ENDSTOP == _ZDIAG_ - #define Z4_MIN_PIN Z_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E0DIAG_ - #define Z4_MIN_PIN E0_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E1DIAG_ - #define Z4_MIN_PIN E1_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E2DIAG_ - #define Z4_MIN_PIN E2_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E3DIAG_ - #define Z4_MIN_PIN E3_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E4DIAG_ - #define Z4_MIN_PIN E4_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E5DIAG_ - #define Z4_MIN_PIN E5_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E6DIAG_ - #define Z4_MIN_PIN E6_DIAG_PIN - #elif Z4_USE_ENDSTOP == _E7DIAG_ - #define Z4_MIN_PIN E7_DIAG_PIN - #endif - #endif - #endif - #endif - -#endif // Z_MULTI_ENDSTOPS + #if Z_HOME_TO_MAX && !defined(Z4_MAX_PIN) && PIN_EXISTS(Z4_STOP) + #define Z4_MAX_PIN Z4_STOP_PIN + #elif Z_HOME_TO_MIN && !defined(Z4_MIN_PIN) && PIN_EXISTS(Z4_STOP) + #define Z4_MIN_PIN Z4_STOP_PIN + #endif + #endif +#endif // // Default DOGLCD SPI delays @@ -2378,3 +1707,5 @@ #undef HAS_FREE_AUX2_PINS #undef DIAG_REMAPPED +#undef _E_DIAG_EXISTS +#undef E_DIAG_EXISTS diff --git a/Marlin/src/pins/rambo/env_validate.h b/Marlin/src/pins/rambo/env_validate.h index 84cf8392cdfc..ce2818f596d3 100644 --- a/Marlin/src/pins/rambo/env_validate.h +++ b/Marlin/src/pins/rambo/env_validate.h @@ -19,8 +19,11 @@ * along with this program. If not, see . * */ -#pragma once +#ifndef ENV_VALIDATE_H +#define ENV_VALIDATE_H #if NOT_TARGET(__AVR_ATmega2560__) #error "Oops! Select 'Arduino Mega 2560 or Rambo' in 'Tools > Board.'" #endif + +#endif diff --git a/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h b/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h index ced9c722f4af..531739ca16b8 100644 --- a/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h +++ b/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h @@ -118,10 +118,13 @@ // #define TEMP_0_PIN 0 // Analog Input, Header J2 #define TEMP_1_PIN 1 // Analog Input, Header J3 -#define TEMP_BOARD_PIN 91 // Onboard thermistor, 100k TDK NTCG104LH104JT1 #define TEMP_BED_PIN 2 // Analog Input, Header J6 #define TEMP_PROBE_PIN 3 // Analog Input, Header J15 +#ifndef TEMP_BOARD_PIN + #define TEMP_BOARD_PIN 91 // Onboard thermistor, 100k TDK NTCG104LH104JT1 +#endif + // // Heaters / Fans // diff --git a/Marlin/src/pins/ramps/env_validate.h b/Marlin/src/pins/ramps/env_validate.h index 6006a78f013c..86d7bce16c16 100644 --- a/Marlin/src/pins/ramps/env_validate.h +++ b/Marlin/src/pins/ramps/env_validate.h @@ -19,7 +19,8 @@ * along with this program. If not, see . * */ -#pragma once +#ifndef ENV_VALIDATE_H +#define ENV_VALIDATE_H #if ENABLED(ALLOW_SAM3X8E) #if NOT_TARGET(__SAM3X8E__, __AVR_ATmega2560__) @@ -33,3 +34,5 @@ #undef ALLOW_SAM3X8E #undef REQUIRE_MEGA2560 + +#endif diff --git a/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h b/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h index b77c325029df..f6ee06846dfd 100644 --- a/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h +++ b/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h @@ -116,7 +116,7 @@ #define TEMP_BED_PIN 14 // Analog Input // SPI for MAX Thermocouple -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN 66 // Don't use 53 if using Display/SD card #else #define TEMP_0_CS_PIN 66 // Don't use 49 (SD_DETECT_PIN) diff --git a/Marlin/src/pins/ramps/pins_FORMBOT_TREX2PLUS.h b/Marlin/src/pins/ramps/pins_FORMBOT_TREX2PLUS.h index 2d92306f8909..179bad04a560 100644 --- a/Marlin/src/pins/ramps/pins_FORMBOT_TREX2PLUS.h +++ b/Marlin/src/pins/ramps/pins_FORMBOT_TREX2PLUS.h @@ -113,7 +113,7 @@ #define TEMP_BED_PIN 3 // Analog Input // SPI for MAX Thermocouple -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN 66 // Don't use 53 if using Display/SD card #else #define TEMP_0_CS_PIN 66 // Don't use 49 (SD_DETECT_PIN) diff --git a/Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h b/Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h index d84a8529152f..fd799e0d49d0 100644 --- a/Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h +++ b/Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h @@ -119,7 +119,7 @@ #define TEMP_BED_PIN 14 // Analog Input // SPI for MAX Thermocouple -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN 66 // Don't use 53 if using Display/SD card #else #define TEMP_0_CS_PIN 66 // Don't use 49 (SD_DETECT_PIN) diff --git a/Marlin/src/pins/ramps/pins_MKS_GEN_L.h b/Marlin/src/pins/ramps/pins_MKS_GEN_L.h index 5d1136e4ef1a..73e7aa577d50 100644 --- a/Marlin/src/pins/ramps/pins_MKS_GEN_L.h +++ b/Marlin/src/pins/ramps/pins_MKS_GEN_L.h @@ -38,10 +38,10 @@ // Heaters / Fans // -#define MOSFET_A_PIN 9 // HE0 -#define MOSFET_B_PIN 8 // HE1 -#define MOSFET_C_PIN 10 // HBED -#define FAN0_PIN 7 +#define MOSFET_A_PIN 10 // HE0 +#define MOSFET_B_PIN 7 // HE1 or FAN Hotend Cooling +#define MOSFET_C_PIN 8 // HBED +#define FAN0_PIN 9 // FAN Part Cooling // // CS Pins wired to avoid conflict with the LCD diff --git a/Marlin/src/pins/ramps/pins_PANOWIN_CUTLASS.h b/Marlin/src/pins/ramps/pins_PANOWIN_CUTLASS.h index cc651cc8ef1f..11451e95a42a 100755 --- a/Marlin/src/pins/ramps/pins_PANOWIN_CUTLASS.h +++ b/Marlin/src/pins/ramps/pins_PANOWIN_CUTLASS.h @@ -102,13 +102,6 @@ #define SPINDLE_LASER_ENA_PIN 74 // J7 #endif -// -// Serial LCD -// -#if LCD_NEEDS_SERIAL_PORT && !defined(LCD_SERIAL_PORT) - #define LCD_SERIAL_PORT 2 // D16 H1 (TX2), D17 H0 (RX2) -#endif - // // SD Card // diff --git a/Marlin/src/pins/ramps/pins_RAMPS_OLD.h b/Marlin/src/pins/ramps/pins_RAMPS_OLD.h index 663c6e47921b..19b048ec81a9 100644 --- a/Marlin/src/pins/ramps/pins_RAMPS_OLD.h +++ b/Marlin/src/pins/ramps/pins_RAMPS_OLD.h @@ -76,7 +76,7 @@ #define TEMP_BED_PIN 1 // Analog Input // SPI for MAX Thermocouple -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN 66 // Don't use 53 if using Display/SD card #else #define TEMP_0_CS_PIN 66 // Don't use 49 (SD_DETECT_PIN) diff --git a/Marlin/src/pins/ramps/pins_RIGIDBOARD.h b/Marlin/src/pins/ramps/pins_RIGIDBOARD.h index 8eab6c7d9b4f..afd31eeead66 100644 --- a/Marlin/src/pins/ramps/pins_RIGIDBOARD.h +++ b/Marlin/src/pins/ramps/pins_RIGIDBOARD.h @@ -72,7 +72,7 @@ // SPI for MAX Thermocouple #undef TEMP_0_CS_PIN -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN 53 // Don't use pin 53 if there is even the remote possibility of using Display/SD card #else #define TEMP_0_CS_PIN 49 // Don't use pin 49 as this is tied to the switch inside the SD card socket to detect if there is an SD card present diff --git a/Marlin/src/pins/ramps/pins_RUMBA.h b/Marlin/src/pins/ramps/pins_RUMBA.h index 258b9ccca6e9..20c804367adb 100644 --- a/Marlin/src/pins/ramps/pins_RUMBA.h +++ b/Marlin/src/pins/ramps/pins_RUMBA.h @@ -53,9 +53,6 @@ #ifndef X_MIN_PIN #define X_MIN_PIN 37 #endif -#ifndef X_MIN_PIN - #define X_MIN_PIN 37 -#endif #ifndef X_MAX_PIN #define X_MAX_PIN 36 #endif @@ -241,7 +238,7 @@ // #define BEEPER_PIN 44 -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #define SDSS 53 #define SD_DETECT_PIN 49 #endif diff --git a/Marlin/src/pins/ramps/pins_TENLOG_D3_HERO.h b/Marlin/src/pins/ramps/pins_TENLOG_D3_HERO.h index dd9cafc306c3..f68b9ef8a6f7 100644 --- a/Marlin/src/pins/ramps/pins_TENLOG_D3_HERO.h +++ b/Marlin/src/pins/ramps/pins_TENLOG_D3_HERO.h @@ -125,7 +125,7 @@ #define TEMP_BED_PIN 14 // Analog Input // SPI for MAX Thermocouple -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN -1 // Don't use 53 if using Display/SD card #else #define TEMP_0_CS_PIN -1 // Don't use 49 (SD_DETECT_PIN) diff --git a/Marlin/src/pins/ramps/pins_TRIGORILLA_14.h b/Marlin/src/pins/ramps/pins_TRIGORILLA_14.h index 4399014c48d2..c2af8f196856 100644 --- a/Marlin/src/pins/ramps/pins_TRIGORILLA_14.h +++ b/Marlin/src/pins/ramps/pins_TRIGORILLA_14.h @@ -118,7 +118,9 @@ // Chiron uses AUX header for Y and Z endstops #define Y_STOP_PIN 42 // AUX (1) #define Z_STOP_PIN 43 // AUX (2) - #define Z2_MIN_PIN 18 // Z- + #ifndef Z2_STOP_PIN + #define Z2_STOP_PIN 18 // Z- + #endif #ifndef Z_MIN_PROBE_PIN #define Z_MIN_PROBE_PIN 2 // X+ diff --git a/Marlin/src/pins/ramps/pins_TT_OSCAR.h b/Marlin/src/pins/ramps/pins_TT_OSCAR.h index 56ebf2c66301..7078b11b6b62 100644 --- a/Marlin/src/pins/ramps/pins_TT_OSCAR.h +++ b/Marlin/src/pins/ramps/pins_TT_OSCAR.h @@ -178,7 +178,7 @@ #endif // SPI for MAX Thermocouple -//#if DISABLED(SDSUPPORT) +//#if !HAS_MEDIA // #define TEMP_0_CS_PIN 66 // Don't use 53 if using Display/SD card //#else // #define TEMP_0_CS_PIN 66 // Don't use 49 (SD_DETECT_PIN) diff --git a/Marlin/src/pins/sam/env_validate.h b/Marlin/src/pins/sam/env_validate.h index 09bcd1364921..c6f4d76894be 100644 --- a/Marlin/src/pins/sam/env_validate.h +++ b/Marlin/src/pins/sam/env_validate.h @@ -19,7 +19,8 @@ * along with this program. If not, see . * */ -#pragma once +#ifndef ENV_VALIDATE_H +#define ENV_VALIDATE_H #if BOTH(ALLOW_MEGA1280, ALLOW_MEGA2560) && NOT_TARGET(__SAM3X8E__, __AVR_ATmega1280__, __AVR_ATmega2560__) #error "Oops! Select 'Arduino Due or Mega' in 'Tools > Board.'" @@ -31,3 +32,5 @@ #undef ALLOW_MEGA1280 #undef ALLOW_MEGA2560 + +#endif diff --git a/Marlin/src/pins/sam/pins_DUE3DOM.h b/Marlin/src/pins/sam/pins_DUE3DOM.h index c8a168228d63..bd6cb7a6cd79 100644 --- a/Marlin/src/pins/sam/pins_DUE3DOM.h +++ b/Marlin/src/pins/sam/pins_DUE3DOM.h @@ -83,7 +83,7 @@ #define TEMP_BED_PIN 1 // Analog Input (BED thermistor) // SPI for MAX Thermocouple -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN -1 #else #define TEMP_0_CS_PIN -1 diff --git a/Marlin/src/pins/sam/pins_DUE3DOM_MINI.h b/Marlin/src/pins/sam/pins_DUE3DOM_MINI.h index 66d4f713f85c..8ad5e2229cfd 100644 --- a/Marlin/src/pins/sam/pins_DUE3DOM_MINI.h +++ b/Marlin/src/pins/sam/pins_DUE3DOM_MINI.h @@ -69,10 +69,13 @@ #define TEMP_0_PIN 0 // Analog Input (HOTEND0 thermistor) #define TEMP_1_PIN 2 // Analog Input (unused) #define TEMP_BED_PIN 1 // Analog Input (BED thermistor) -#define TEMP_BOARD_PIN 5 // Analog Input (OnBoard thermistor beta 3950) + +#ifndef TEMP_BOARD_PIN + #define TEMP_BOARD_PIN 5 // Analog Input (OnBoard thermistor beta 3950) +#endif // SPI for MAX Thermocouple -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN 53 #else #define TEMP_0_CS_PIN 53 diff --git a/Marlin/src/pins/sam/pins_RADDS.h b/Marlin/src/pins/sam/pins_RADDS.h index 7ebb24fde974..93011679595f 100644 --- a/Marlin/src/pins/sam/pins_RADDS.h +++ b/Marlin/src/pins/sam/pins_RADDS.h @@ -180,7 +180,7 @@ #define TEMP_BED_PIN 4 // Analog Input // SPI for MAX Thermocouple -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN 53 #else #define TEMP_0_CS_PIN 49 diff --git a/Marlin/src/pins/sam/pins_RAMPS_DUO.h b/Marlin/src/pins/sam/pins_RAMPS_DUO.h index 04a4b69ae159..92de79bd7f23 100644 --- a/Marlin/src/pins/sam/pins_RAMPS_DUO.h +++ b/Marlin/src/pins/sam/pins_RAMPS_DUO.h @@ -57,7 +57,7 @@ // SPI for MAX Thermocouple #undef TEMP_0_CS_PIN -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN 69 // Don't use 53 if using Display/SD card #else #define TEMP_0_CS_PIN 69 // Don't use 49 (SD_DETECT_PIN) diff --git a/Marlin/src/pins/sam/pins_RAMPS_FD_V1.h b/Marlin/src/pins/sam/pins_RAMPS_FD_V1.h index e1b0d7edc853..c84d84105c3b 100644 --- a/Marlin/src/pins/sam/pins_RAMPS_FD_V1.h +++ b/Marlin/src/pins/sam/pins_RAMPS_FD_V1.h @@ -110,7 +110,7 @@ #define TEMP_BED_PIN 0 // Analog Input // SPI for MAX Thermocouple -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN 53 #else #define TEMP_0_CS_PIN 49 diff --git a/Marlin/src/pins/sam/pins_RAMPS_SMART.h b/Marlin/src/pins/sam/pins_RAMPS_SMART.h index b02ddef16628..2a0733c601f8 100644 --- a/Marlin/src/pins/sam/pins_RAMPS_SMART.h +++ b/Marlin/src/pins/sam/pins_RAMPS_SMART.h @@ -82,7 +82,7 @@ #define TEMP_BED_PIN 11 // Analog Input // SPI for MAX Thermocouple -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN 67 // Don't use 53 if using Display/SD card #else #define TEMP_0_CS_PIN 67 // Don't use 49 (SD_DETECT_PIN) diff --git a/Marlin/src/pins/sam/pins_RURAMPS4D_11.h b/Marlin/src/pins/sam/pins_RURAMPS4D_11.h index 8b078371e9ec..516063d158a9 100644 --- a/Marlin/src/pins/sam/pins_RURAMPS4D_11.h +++ b/Marlin/src/pins/sam/pins_RURAMPS4D_11.h @@ -145,7 +145,7 @@ // SPI for MAX Thermocouple /* -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN EXP1_08_PIN #else #define TEMP_0_CS_PIN 49 diff --git a/Marlin/src/pins/sam/pins_RURAMPS4D_13.h b/Marlin/src/pins/sam/pins_RURAMPS4D_13.h index 8f107ff4e5d1..9e9aeb9fec17 100644 --- a/Marlin/src/pins/sam/pins_RURAMPS4D_13.h +++ b/Marlin/src/pins/sam/pins_RURAMPS4D_13.h @@ -135,7 +135,7 @@ // SPI for MAX Thermocouple /* -#if DISABLED(SDSUPPORT) +#if !HAS_MEDIA #define TEMP_0_CS_PIN 53 #else #define TEMP_0_CS_PIN 49 diff --git a/Marlin/src/pins/sanguino/env_validate.h b/Marlin/src/pins/sanguino/env_validate.h index d229b6f102e4..bd7947f469a5 100644 --- a/Marlin/src/pins/sanguino/env_validate.h +++ b/Marlin/src/pins/sanguino/env_validate.h @@ -19,7 +19,8 @@ * along with this program. If not, see . * */ -#pragma once +#ifndef ENV_VALIDATE_H +#define ENV_VALIDATE_H #if ENABLED(ALLOW_MEGA644) #if NOT_TARGET(__AVR_ATmega644__, __AVR_ATmega644P__, __AVR_ATmega1284P__) @@ -40,3 +41,5 @@ #undef ALLOW_MEGA644 #undef ALLOW_MEGA644P #undef REQUIRE_MEGA644P + +#endif diff --git a/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h b/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h index 398343cb972c..e391cd1020a6 100644 --- a/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h +++ b/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h @@ -45,54 +45,72 @@ #define BOARD_ST7920_DELAY_3 125 #endif +/** + * EXP1 EXP1 as ENDER2 STOCKDISPLAY EXP1 as CR10 STOCKDISPLAY + * ------ ------ ------ + * D27 | 1 2 | D16 SCK | 1 2 | BTN_E BEEPER_PIN | 1 2 | BTN_ENC + * D11 | 3 4 | RESET BTN_EN1 | 3 4 | RESET BTN_EN1 | 3 4 | RESET + * D10 5 6 | D30 BTN_EN2 5 6 | LCD_A0 BTN_EN2 5 6 | LCD_D4 (ST9720 CLK) + * D28 | 7 8 | D17 LCD_CS | 7 8 | MOSI (ST9720 CS) LCD_RS | 7 8 | LCD_EN (ST9720 DAT) + * GND | 9 10 | 5V GND | 9 10 | 5V GND | 9 10 | 5V + * ------ ------ ------ + */ +#define EXP1_01_PIN 27 +#define EXP1_02_PIN 16 +#define EXP1_03_PIN 11 +#define EXP1_04_PIN -1 // RESET +#define EXP1_05_PIN 10 +#define EXP1_06_PIN 30 +#define EXP1_07_PIN 28 +#define EXP1_08_PIN 17 + // // LCD / Controller // #if ANY(MKS_MINI_12864, CR10_STOCKDISPLAY, ENDER2_STOCKDISPLAY) - #if EITHER(CR10_STOCKDISPLAY, ENDER2_STOCKDISPLAY) - #define LCD_PINS_RS 28 // ST9720 CS - #define LCD_PINS_EN 17 // ST9720 DAT - #define LCD_PINS_D4 30 // ST9720 CLK - #endif - #if EITHER(MKS_MINI_12864, ENDER2_STOCKDISPLAY) - #define DOGLCD_CS 28 - #define DOGLCD_A0 30 + #if ENABLED(MKS_MINI_12864) + #ifndef NO_CONTROLLER_CUSTOM_WIRING_WARNING + #error "CAUTION! MKS_MINI_12864 on MELZI_CREALITY requires wiring modifications. (Define NO_CONTROLLER_CUSTOM_WIRING_WARNING to suppress this warning.)" + #endif + #define DOGLCD_CS EXP1_07_PIN + #define DOGLCD_A0 EXP1_06_PIN + #elif ENABLED(CR10_STOCKDISPLAY) + #define LCD_PINS_RS EXP1_07_PIN // ST9720 CS + #define LCD_PINS_EN EXP1_08_PIN // ST9720 DAT + #define LCD_PINS_D4 EXP1_06_PIN // ST9720 CLK + #define BEEPER_PIN EXP1_01_PIN + #elif ENABLED(ENDER2_STOCKDISPLAY) + #define DOGLCD_CS EXP1_07_PIN + #define DOGLCD_A0 EXP1_06_PIN + #define DOGLCD_SCK EXP1_01_PIN + #define DOGLCD_MOSI EXP1_08_PIN + #define FORCE_SOFT_SPI #endif - + #define BTN_ENC EXP1_02_PIN + #define BTN_EN1 EXP1_03_PIN + #define BTN_EN2 EXP1_05_PIN #define LCD_SDSS 31 // Controller's SD card - - #define BTN_ENC 16 - #define BTN_EN1 11 - #define BTN_EN2 10 - #define BEEPER_PIN 27 - #define LCD_PINS_DEFINED - #endif #include "pins_MELZI.h" // ... SANGUINOLOLU_12 ... SANGUINOLOLU_11 #if ENABLED(BLTOUCH) #ifndef SERVO0_PIN - #define SERVO0_PIN 27 + #define SERVO0_PIN EXP1_01_PIN #endif #if SERVO0_PIN == BEEPER_PIN #undef BEEPER_PIN #endif #elif HAS_FILAMENT_SENSOR #ifndef FIL_RUNOUT_PIN - #define FIL_RUNOUT_PIN 27 + #define FIL_RUNOUT_PIN EXP1_01_PIN #endif #if FIL_RUNOUT_PIN == BEEPER_PIN #undef BEEPER_PIN #endif #endif -#if ENABLED(MINIPANEL) - #undef DOGLCD_CS - #define DOGLCD_CS LCD_PINS_RS -#endif - /** PIN: 0 Port: B0 E0_DIR_PIN protected PIN: 1 Port: B1 E0_STEP_PIN protected @@ -139,14 +157,3 @@ PIN: 30 Port: A1 LCD_PINS_D4 Output = 1 PIN: 31 Port: A0 SDSS Output = 1 */ - -/** - * EXP1 Connector EXP1 as CR10 STOCKDISPLAY - * ------ ------ - * PA4 | 1 2 | PC0 BEEPER_PIN | 1 2 | BTN_ENC - * PD3 | 3 4 | RESET BTN_EN1 | 3 4 | RESET - * PD2 5 6 | PA1 BTN_EN2 5 6 | LCD_D4 (ST9720 CLK) - * PA3 | 7 8 | PC1 (ST9720 CS) LCD_RS | 7 8 | LCD_EN (ST9720 DAT) - * GND | 9 10 | 5V GND | 9 10 | 5V - * ------ ------ - */ diff --git a/Marlin/src/pins/sanguino/pins_MELZI_CREALITY_E2.h b/Marlin/src/pins/sanguino/pins_MELZI_CREALITY_E2.h new file mode 100644 index 000000000000..0d021e1bf694 --- /dev/null +++ b/Marlin/src/pins/sanguino/pins_MELZI_CREALITY_E2.h @@ -0,0 +1,96 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2023 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +#define BOARD_INFO_NAME "Melzi Ender 2 (Creality)" + +/** + * Connectors. + * FAN1 LASER K-FAN B-MOT(A6) E-TEMP(A7) CHECK AVR ISP + * --------- --------- --------- --------- --------- --------- ---------- + * J11 (Power Switch) |12V GND| |12V D4| |12V D4| |GND D25| |GND D24| |D29 GND| |MISO 5V| + * ------ --------- --------- --------- --------- --------- --------- |SCK MOSI| + * |V-IN|(Regulator) BED HOT-END FAN2 OFF X-STOP Y-STOP Z-STOP |RST GND| + * |GND | --------- --------- --------- --------- --------- --------- --------- ---------- + * |12V | |12V D12| |12V D13| |12V GND| |D27 D17| |GND D18| |GND D19| |GND D20| + * ------ --------- --------- --------- --------- --------- --------- --------- + * + * EXP1 EXP1 as ENDER2 STOCKDISPLAY EXP1 as CR10 STOCKDISPLAY + * ------ ------ ------ + * (AVR_SCK) D7 | 1 2 | D16 SCK | 1 2 | BTN_E BEEPER_PIN | 1 2 | BTN_ENC + * D11 | 3 4 | RESET BTN_EN1 | 3 4 | RESET BTN_EN1 | 3 4 | RESET + * D10 5 6 | D30 BTN_EN2 5 6 | LCD_A0 BTN_EN2 5 6 | LCD_D4 (ST9720 CLK) + * D28 | 7 8 | D5 (AVR_MOSI) LCD_CS | 7 8 | MOSI (ST9720 CS) LCD_RS | 7 8 | LCD_EN (ST9720 DAT) + * GND | 9 10 | 5V GND | 9 10 | 5V GND | 9 10 | 5V + * ------ ------ ------ + */ + +#define EXP1_01_PIN 7 +#define EXP1_02_PIN 16 +#define EXP1_03_PIN 11 +#define EXP1_04_PIN -1 // hardware reset line +#define EXP1_05_PIN 10 +#define EXP1_06_PIN 30 +#define EXP1_07_PIN 28 +#define EXP1_08_PIN 5 + +// +// LCD / Controller +// +#if EITHER(CR10_STOCKDISPLAY, ENDER2_STOCKDISPLAY) + #if ENABLED(CR10_STOCKDISPLAY) + #if ENABLED(SDSUPPORT) + #error "Cannot have SDSUPPORT with CR10_STOCKDISPLAY on this motherboard." // Hardware SDCARD SCK and MOSI pins are reallocated. + #endif + #define LCD_PINS_RS EXP1_07_PIN // ST9720 CS + #define LCD_PINS_EN EXP1_08_PIN // ST9720 DAT + #define LCD_PINS_D4 EXP1_06_PIN // ST9720 CLK + #define BEEPER_PIN EXP1_01_PIN + #elif ENABLED(ENDER2_STOCKDISPLAY) + #define DOGLCD_CS EXP1_07_PIN + #define DOGLCD_A0 EXP1_06_PIN + #endif + #define BTN_ENC EXP1_02_PIN + #define BTN_EN1 EXP1_03_PIN + #define BTN_EN2 EXP1_05_PIN + #define LCD_PINS_DEFINED +#endif + +#define LCD_SDSS 31 // Controller's SD card + +#include "pins_MELZI.h" // ... SANGUINOLOLU_12 ... SANGUINOLOLU_11 + +#if ENABLED(BLTOUCH) + #ifndef SERVO0_PIN + #define SERVO0_PIN 27 + #endif + #if SERVO0_PIN == BEEPER_PIN + #undef BEEPER_PIN + #endif +#elif HAS_FILAMENT_SENSOR + #ifndef FIL_RUNOUT_PIN + #define FIL_RUNOUT_PIN 27 + #endif + #if FIL_RUNOUT_PIN == BEEPER_PIN + #undef BEEPER_PIN + #endif +#endif diff --git a/Marlin/src/pins/sanguino/pins_ZMIB_V2.h b/Marlin/src/pins/sanguino/pins_ZMIB_V2.h index dce01177becc..1e449579cf40 100644 --- a/Marlin/src/pins/sanguino/pins_ZMIB_V2.h +++ b/Marlin/src/pins/sanguino/pins_ZMIB_V2.h @@ -159,7 +159,7 @@ // // SD card // -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #define SDSS 4 #endif #define SD_DETECT_PIN -1 diff --git a/Marlin/src/pins/stm32f1/env_validate.h b/Marlin/src/pins/stm32f1/env_validate.h index 2d325428ac8c..47399a062d6c 100644 --- a/Marlin/src/pins/stm32f1/env_validate.h +++ b/Marlin/src/pins/stm32f1/env_validate.h @@ -19,7 +19,8 @@ * along with this program. If not, see . * */ -#pragma once +#ifndef ENV_VALIDATE_H +#define ENV_VALIDATE_H #if NOT_TARGET(__STM32F1__, STM32F1) #if DISABLED(ALLOW_STM32F4) @@ -30,3 +31,5 @@ #endif #undef ALLOW_STM32F4 + +#endif diff --git a/Marlin/src/pins/stm32f1/pins_CHITU3D_common.h b/Marlin/src/pins/stm32f1/pins_CHITU3D_common.h index c85c107bd9b1..22f78350cf65 100644 --- a/Marlin/src/pins/stm32f1/pins_CHITU3D_common.h +++ b/Marlin/src/pins/stm32f1/pins_CHITU3D_common.h @@ -169,7 +169,7 @@ // // SD Card // -#define SDIO_SUPPORT +#define ONBOARD_SDIO #define SD_DETECT_PIN -1 // PF0, but it isn't connected #define SDIO_CLOCK 4500000 #define SDIO_READ_RETRIES 16 diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h index f7a73de28471..058dcdf94f23 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h @@ -25,6 +25,11 @@ * Creality v2.4.S1 (STM32F103RE / STM32F103RC) v101 as found in the Ender-7 */ +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 + #error "Creality 2.4.S1 V101 only supports 1 hotend / E stepper." + #define E_ERROR 1 +#endif + #define BOARD_INFO_NAME "Creality v2.4.S1 V101" #define DEFAULT_MACHINE_NAME "Creality3D" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h index 4276db5e9f22..f2450ffcb4e7 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h @@ -30,6 +30,7 @@ #if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "Creality v24S1 only supports 1 hotend / E stepper." + #define E_ERROR 1 #endif #if BOTH(BLTOUCH, Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V25S1.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V25S1.h index 9e422e62b0a3..f78bad624d28 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V25S1.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V25S1.h @@ -127,7 +127,7 @@ #define SDCARD_CONNECTION ONBOARD #define ON_BOARD_SPI_DEVICE 1 #define ONBOARD_SD_CS_PIN PC12 // SDSS -#define SDIO_SUPPORT +#define ONBOARD_SDIO #define NO_SD_HOST_DRIVE // This board's SD is only seen by the printer // diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h index c028deaa99d2..6cb4d48d58c1 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h @@ -27,7 +27,7 @@ #include "env_validate.h" -#if HAS_MULTI_HOTEND || E_STEPPERS > 1 +#if !E_ERROR && (HAS_MULTI_HOTEND || E_STEPPERS > 1) #error "Creality v4 only supports 1 hotend / E stepper." #endif @@ -159,7 +159,7 @@ // #define SD_DETECT_PIN PC7 #define SDCARD_CONNECTION ONBOARD -#define SDIO_SUPPORT +#define ONBOARD_SDIO #define NO_SD_HOST_DRIVE // This board's SD is only seen by the printer #if ANY(RET6_12864_LCD, HAS_DWIN_E3V2, IS_DWIN_MARLINUI) diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h index 12a5e5ea5106..7a7ec355084f 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h @@ -140,7 +140,7 @@ #define SDCARD_CONNECTION ONBOARD #define ONBOARD_SPI_DEVICE 1 #define ONBOARD_SD_CS_PIN PA4 // SDSS -#define SDIO_SUPPORT +#define ONBOARD_SDIO #define NO_SD_HOST_DRIVE // This board's SD is only seen by the printer #if ANY(RET6_12864_LCD, HAS_DWIN_E3V2, IS_DWIN_MARLINUI) diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V425.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V425.h index 2d9b9f38f54f..a225fe11be5a 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V425.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V425.h @@ -27,10 +27,6 @@ #include "env_validate.h" -#if HAS_MULTI_HOTEND || E_STEPPERS > 1 - #error "Creality v4.2.5 only supports 1 hotend / E stepper." -#endif - #define BOARD_INFO_NAME "Creality V4.2.5" #define DEFAULT_MACHINE_NAME "CR200B" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h index a9ff02d1f4e2..d592b4808a38 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h @@ -105,7 +105,7 @@ #define SD_DETECT_PIN PC7 #define NO_SD_HOST_DRIVE // SD is only seen by the printer -#define SDIO_SUPPORT // Extra added by Creality +#define ONBOARD_SDIO // Extra added by Creality #define SDIO_CLOCK 6000000 // In original source code overridden by Creality in sdio.h // diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V521.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V521.h index c3b66b034a2a..81cb1e1f790e 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V521.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V521.h @@ -144,7 +144,7 @@ #define SDCARD_CONNECTION ONBOARD #define ONBOARD_SPI_DEVICE 1 #define ONBOARD_SD_CS_PIN PC11 // SDSS -#define SDIO_SUPPORT +#define ONBOARD_SDIO #define NO_SD_HOST_DRIVE // This board's SD is only seen by the printer #if ANY(RET6_12864_LCD, HAS_DWIN_E3V2, IS_DWIN_MARLINUI) @@ -219,8 +219,3 @@ #endif #endif - -// DGUS LCDs -#if HAS_DGUS_LCD - #define LCD_SERIAL_PORT 3 -#endif diff --git a/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h b/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h index de85484eae7b..7a1f1e6cce32 100644 --- a/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h +++ b/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h @@ -148,18 +148,22 @@ #define E0_SLAVE_ADDRESS 0 #endif #endif + // // Temperature Sensors // -#define TEMP_BED_PIN PC2 //TB -#define TEMP_0_PIN PC1 //TH1 -//#define TEMP_1_PIN PC3 //TH2 -#define TEMP_BOARD_PIN PC3 -#ifndef TEMP_SENSOR_BOARD - #define TEMP_SENSOR_BOARD 13 -#endif +#define TEMP_BED_PIN PC2 // TB +#define TEMP_0_PIN PC1 // TH1 +//#define TEMP_1_PIN PC3 // TH2 #define FIL_RUNOUT_PIN PA10 // MT_DET +#ifndef TEMP_BOARD_PIN + #define TEMP_BOARD_PIN PC3 +#endif +#if TEMP_BOARD_PIN == PC3 && TEMP_SENSOR_BOARD != 13 + #warning "The built-in TEMP_SENSOR_BOARD is 13 for ERYONE Ery32 mini." +#endif + // // LCD Pins // diff --git a/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h b/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h index 4978f84abeaf..a02b270337b9 100644 --- a/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h +++ b/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h @@ -256,7 +256,7 @@ #define SD_SS_PIN -1 #define SD_DETECT_PIN PD12 // SD_CD (if -1 no detection) #else - #define SDIO_SUPPORT + #define ONBOARD_SDIO #define SDIO_CLOCK 4500000 // 4.5 MHz #define SDIO_READ_RETRIES 16 #define ONBOARD_SPI_DEVICE 1 // SPI1 diff --git a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h index b1498d13b9be..168317d8b57b 100644 --- a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h +++ b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h @@ -158,7 +158,7 @@ #define LCD_BRIGHTNESS_DEFAULT TFT_BACKLIGHT_PWM #endif -#if ENABLED(SDIO_SUPPORT) +#if ENABLED(ONBOARD_SDIO) #define SD_SS_PIN -1 // else SDSS set to PA4 in M43 (spi_pins.h) #endif diff --git a/Marlin/src/pins/stm32f1/pins_MINGDA_MPX_ARM_MINI.h b/Marlin/src/pins/stm32f1/pins_MINGDA_MPX_ARM_MINI.h index cc26942002cc..a7fc323ba0da 100644 --- a/Marlin/src/pins/stm32f1/pins_MINGDA_MPX_ARM_MINI.h +++ b/Marlin/src/pins/stm32f1/pins_MINGDA_MPX_ARM_MINI.h @@ -120,7 +120,7 @@ #define SDCARD_CONNECTION ONBOARD #endif -#define SDIO_SUPPORT +#define ONBOARD_SDIO #define SDIO_CLOCK 4500000 // 4.5 MHz #define SDIO_READ_RETRIES 16 diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN.h index 5f290d153d3f..e53ffa008bc7 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN.h @@ -197,10 +197,10 @@ // SPI1(PA7) & SPI3(PB5) not available #define SPI_DEVICE 2 -#define SDIO_SUPPORT +#define ONBOARD_SDIO #define SDIO_CLOCK 4500000 #define SDIO_READ_RETRIES 16 -#if ENABLED(SDIO_SUPPORT) +#if ENABLED(ONBOARD_SDIO) #define SD_SCK_PIN PB13 // SPI2 #define SD_MISO_PIN PB14 // SPI2 #define SD_MOSI_PIN PB15 // SPI2 diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h index 052bed202b03..3ec2c2cfd948 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h @@ -239,7 +239,7 @@ #endif #if SD_CONNECTION_IS(ONBOARD) - #define SDIO_SUPPORT + #define ONBOARD_SDIO #define SDIO_CLOCK 4500000 // 4.5 MHz #define SD_DETECT_PIN PD12 #define ONBOARD_SD_CS_PIN PC11 diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h index 46c2fa806534..3a50465a9abf 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h @@ -133,7 +133,7 @@ #define SDCARD_CONNECTION ONBOARD #endif -#define SDIO_SUPPORT +#define ONBOARD_SDIO #define SDIO_CLOCK 4500000 // 4.5 MHz #define SD_DETECT_PIN PD12 #define ONBOARD_SPI_DEVICE 1 // SPI1 diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h index d37d4a10de47..6f641f20dd12 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h @@ -239,7 +239,7 @@ #endif #if SD_CONNECTION_IS(ONBOARD) - #define SDIO_SUPPORT + #define ONBOARD_SDIO #define SDIO_CLOCK 4500000 // 4.5 MHz #define SD_DETECT_PIN PD12 #define ONBOARD_SD_CS_PIN PC11 diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h index 28dd19938b94..a329b8a4bbdd 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h @@ -163,7 +163,7 @@ #define SDCARD_CONNECTION ONBOARD #endif -#define SDIO_SUPPORT +#define ONBOARD_SDIO #define SDIO_CLOCK 4500000 // 4.5 MHz #define SD_DETECT_PIN PD12 #define ONBOARD_SD_CS_PIN PC11 diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_PRO.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_PRO.h index 2a212f1b4ad9..922caa556ea1 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_PRO.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_PRO.h @@ -210,7 +210,7 @@ #define SD_MOSI_PIN PB15 #define SD_SS_PIN PG6 #elif SD_CONNECTION_IS(ONBOARD) - #define SDIO_SUPPORT + #define ONBOARD_SDIO #define SD_DETECT_PIN PD12 #define ONBOARD_SD_CS_PIN PC11 #elif SD_CONNECTION_IS(CUSTOM_CABLE) diff --git a/Marlin/src/pins/stm32f1/pins_SOVOL_V131.h b/Marlin/src/pins/stm32f1/pins_SOVOL_V131.h deleted file mode 100644 index 97ba7f7fec83..000000000000 --- a/Marlin/src/pins/stm32f1/pins_SOVOL_V131.h +++ /dev/null @@ -1,236 +0,0 @@ -/** - * Marlin 3D Printer Firmware - * Copyright (c) 2023 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] - * - * Based on Sprinter and grbl. - * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -#pragma once - -/** - * Sovol 1.3.1 (GD32F103RET6) board pin assignments - */ - -#include "env_validate.h" - -#if HOTENDS > 1 || E_STEPPERS > 1 - #error "SOVOL V131 only supports 1 hotend / E-stepper." -#endif - -#ifndef BOARD_INFO_NAME - #define BOARD_INFO_NAME "Sovol V131" -#endif -#ifndef DEFAULT_MACHINE_NAME - #define DEFAULT_MACHINE_NAME "Sovol SV06" -#endif - -//#define BOARD_NO_NATIVE_USB - -// -// Release PB4 (Y_ENABLE_PIN) from JTAG NRST role -// -#ifndef DISABLE_DEBUG - #define DISABLE_DEBUG -#endif - -// -// EEPROM -// -#if NO_EEPROM_SELECTED - #define IIC_BL24CXX_EEPROM // EEPROM on I2C-0 - //#define SDCARD_EEPROM_EMULATION - #undef NO_EEPROM_SELECTED -#endif - -#if ENABLED(IIC_BL24CXX_EEPROM) - #define IIC_EEPROM_SDA PA11 - #define IIC_EEPROM_SCL PA12 - #define MARLIN_EEPROM_SIZE 0x800 // 2K (24C16) -#elif ENABLED(SDCARD_EEPROM_EMULATION) - #define MARLIN_EEPROM_SIZE 0x800 // 2K -#endif - -// -// Servos -// -#ifndef SERVO0_PIN - #ifndef HAS_PIN_27_BOARD - #define SERVO0_PIN PB0 // BLTouch OUT - #else - #define SERVO0_PIN PC6 - #endif -#endif - -// -// Limit Switches -// -#ifndef X_STOP_PIN - #define X_STOP_PIN PA5 -#endif -#ifndef Y_STOP_PIN - #define Y_STOP_PIN PA6 -#endif -#ifndef Z_STOP_PIN - #define Z_STOP_PIN PA7 -#endif - -#ifndef Z_MIN_PROBE_PIN - #define Z_MIN_PROBE_PIN PB1 // BLTouch IN -#endif - -// -// Filament Runout Sensor -// -#ifndef FIL_RUNOUT_PIN - #define FIL_RUNOUT_PIN PA4 // "Pulled-high" -#endif - -// -// Steppers -// -#ifndef X_STEP_PIN - #define X_STEP_PIN PC2 -#endif -#ifndef X_DIR_PIN - #define X_DIR_PIN PB9 -#endif -#define X_ENABLE_PIN PC3 // Shared - -#ifndef Y_STEP_PIN - #define Y_STEP_PIN PB8 -#endif -#ifndef Y_DIR_PIN - #define Y_DIR_PIN PB7 -#endif -#define Y_ENABLE_PIN X_ENABLE_PIN - -#ifndef Z_STEP_PIN - #define Z_STEP_PIN PB6 -#endif -#ifndef Z_DIR_PIN - #define Z_DIR_PIN PB5 -#endif -#define Z_ENABLE_PIN X_ENABLE_PIN - -#ifndef E0_STEP_PIN - #define E0_STEP_PIN PB4 -#endif -#ifndef E0_DIR_PIN - #define E0_DIR_PIN PB3 -#endif -#define E0_ENABLE_PIN X_ENABLE_PIN - -#if HAS_TMC_UART - - /** - * TMC2208/TMC2209 stepper drivers - * - * Hardware serial communication ports. - * If undefined software serial is used according to the pins below - */ - - #define X_SERIAL_TX_PIN PC1 - #define X_SERIAL_RX_PIN PC1 - - #define Y_SERIAL_TX_PIN PC0 - #define Y_SERIAL_RX_PIN PC0 - - #define Z_SERIAL_TX_PIN PA15 - #define Z_SERIAL_RX_PIN PA15 - - #define E0_SERIAL_TX_PIN PC14 - #define E0_SERIAL_RX_PIN PC14 - - // Reduce baud rate to improve software serial reliability - #define TMC_BAUD_RATE 19200 - -#endif // HAS_TMC_UART - -// -// Temperature Sensors -// -#define TEMP_0_PIN PC5 // TH1 -#define TEMP_BED_PIN PC4 // TB1 - -// -// Heaters / Fans -// -#ifndef HEATER_0_PIN - #define HEATER_0_PIN PA1 // HEATER1 -#endif -#ifndef HEATER_BED_PIN - #define HEATER_BED_PIN PA2 // HOT BED -#endif -#ifndef FAN0_PIN - #define FAN0_PIN PA0 // FAN -#endif -#define FAN_SOFT_PWM_REQUIRED - -// -// SD Card -// -#define SD_DETECT_PIN PC7 -#define SDCARD_CONNECTION ONBOARD -#define ONBOARD_SPI_DEVICE 1 -#define ONBOARD_SD_CS_PIN PA4 // SDSS -#define SDIO_SUPPORT -#define NO_SD_HOST_DRIVE // This board's SD is only seen by the printer - -#if ANY(RET6_12864_LCD, HAS_DWIN_E3V2, IS_DWIN_MARLINUI) - /** - * RET6 12864 LCD - * ------ - * PC6 | 1 2 | PB2 - * PB10 | 3 4 | PB11 - * PB14 5 6 | PB13 - * PB12 | 7 8 | PB15 - * GND | 9 10 | 5V - * ------ - */ - #define EXP3_01_PIN PC6 - #define EXP3_02_PIN PB2 - #define EXP3_03_PIN PB10 - #define EXP3_04_PIN PB11 - #define EXP3_05_PIN PB14 - #define EXP3_06_PIN PB13 - #define EXP3_07_PIN PB12 - #define EXP3_08_PIN PB15 -#endif - -#if ENABLED(CR10_STOCKDISPLAY) - - #if ENABLED(RET6_12864_LCD) - - #define LCD_PINS_RS EXP3_07_PIN - #define LCD_PINS_EN EXP3_08_PIN - #define LCD_PINS_D4 EXP3_06_PIN - - #define BTN_ENC EXP3_02_PIN - #define BTN_EN1 EXP3_03_PIN - #define BTN_EN2 EXP3_05_PIN - - #ifndef HAS_PIN_27_BOARD - #define BEEPER_PIN EXP3_01_PIN - #endif - - #else - - #error "Only the RET6_12864_LCD variant of CR10_STOCKDISPLAY is supported." - - #endif - -#endif diff --git a/Marlin/src/pins/stm32f1/pins_TRIGORILLA_PRO.h b/Marlin/src/pins/stm32f1/pins_TRIGORILLA_PRO.h index d2f3645d94ef..ff2bf5fd8e86 100644 --- a/Marlin/src/pins/stm32f1/pins_TRIGORILLA_PRO.h +++ b/Marlin/src/pins/stm32f1/pins_TRIGORILLA_PRO.h @@ -186,7 +186,7 @@ // SPI1(PA7) & SPI3(PB5) not available #define SPI_DEVICE 2 -#if ENABLED(SDIO_SUPPORT) +#if ENABLED(ONBOARD_SDIO) #define SD_SCK_PIN PB13 // SPI2 ok #define SD_MISO_PIN PB14 // SPI2 ok #define SD_MOSI_PIN PB15 // SPI2 ok diff --git a/Marlin/src/pins/stm32f1/pins_ZM3E4_V1_0.h b/Marlin/src/pins/stm32f1/pins_ZM3E4_V1_0.h index 8997a5f1db39..06f697e27020 100644 --- a/Marlin/src/pins/stm32f1/pins_ZM3E4_V1_0.h +++ b/Marlin/src/pins/stm32f1/pins_ZM3E4_V1_0.h @@ -190,6 +190,7 @@ #define Z2_DIR_PIN PD0 #endif +// TODO: Use different pin names for auto-remapping #ifdef OPTION_Z2_ENDSTOP #define Z2_MIN_PIN PD1 #define Z2_MAX_PIN PB12 diff --git a/Marlin/src/pins/stm32f1/pins_ZM3E4_V2_0.h b/Marlin/src/pins/stm32f1/pins_ZM3E4_V2_0.h index b60cca831ba7..24c7404360f0 100644 --- a/Marlin/src/pins/stm32f1/pins_ZM3E4_V2_0.h +++ b/Marlin/src/pins/stm32f1/pins_ZM3E4_V2_0.h @@ -156,6 +156,7 @@ #define Y_MAX_PIN PB14 #define Z_MAX_PIN PB13 +// TODO: Use different pin names for auto-remapping #ifdef OPTION_Z2_ENDSTOP #define Z2_MIN_PIN PD1 #define Z2_MAX_PIN PB12 diff --git a/Marlin/src/pins/stm32f4/env_validate.h b/Marlin/src/pins/stm32f4/env_validate.h index c01401f06c9a..91adbfc86929 100644 --- a/Marlin/src/pins/stm32f4/env_validate.h +++ b/Marlin/src/pins/stm32f4/env_validate.h @@ -19,10 +19,13 @@ * along with this program. If not, see . * */ -#pragma once +#ifndef ENV_VALIDATE_H +#define ENV_VALIDATE_H #if NOT_TARGET(STM32F4) && (DISABLED(ALLOW_STM32DUINO) || NOT_TARGET(STM32F4xx)) #error "Oops! Select an STM32F4 board in 'Tools > Board.'" #endif #undef ALLOW_STM32DUINO + +#endif diff --git a/Marlin/src/pins/stm32f4/pins_ANET_ET4.h b/Marlin/src/pins/stm32f4/pins_ANET_ET4.h index 347ef8451dcf..edfee05166c3 100644 --- a/Marlin/src/pins/stm32f4/pins_ANET_ET4.h +++ b/Marlin/src/pins/stm32f4/pins_ANET_ET4.h @@ -195,15 +195,15 @@ // // SD Card // -//#define SDIO_SUPPORT +//#define ONBOARD_SDIO #ifndef SDCARD_CONNECTION #define SDCARD_CONNECTION CUSTOM_CABLE #endif -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA - #if DISABLED(SDIO_SUPPORT) + #if DISABLED(ONBOARD_SDIO) #define SOFTWARE_SPI #define SDSS PC11 #define SD_SS_PIN SDSS diff --git a/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h b/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h index 869b1e859d4f..8510e8148259 100644 --- a/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h +++ b/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h @@ -23,7 +23,7 @@ #include "env_validate.h" -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "Artillery Ruby only supports 1 hotend / E stepper." #endif @@ -173,7 +173,7 @@ // #define BEEPER_PIN PC13 - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA #define SDSS PA15 #define SD_DETECT_PIN PD2 #endif diff --git a/Marlin/src/pins/stm32f4/pins_BLACK_STM32F407VE.h b/Marlin/src/pins/stm32f4/pins_BLACK_STM32F407VE.h index a4af3f8fe389..025a1fc9f1a8 100644 --- a/Marlin/src/pins/stm32f4/pins_BLACK_STM32F407VE.h +++ b/Marlin/src/pins/stm32f4/pins_BLACK_STM32F407VE.h @@ -145,8 +145,8 @@ #endif #if SD_CONNECTION_IS(ONBOARD) - #define SDIO_SUPPORT // Use SDIO for onboard SD - #if DISABLED(SDIO_SUPPORT) + #define ONBOARD_SDIO // Use SDIO for onboard SD + #if DISABLED(ONBOARD_SDIO) #define SOFTWARE_SPI // Use soft SPI for onboard SD #define SDSS PC11 #define SD_SCK_PIN PC12 diff --git a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h index 73af02d3ab6c..f40e6c2d694d 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h @@ -160,10 +160,13 @@ // #define TEMP_0_PIN PA2 // T0 <-> E0 #define TEMP_1_PIN PA0 // T1 <-> E1 -#define TEMP_BOARD_PIN PC2 // Onboard thermistor, NTC100K #define TEMP_BED_PIN PA1 // T2 <-> Bed #define TEMP_PROBE_PIN PC3 // Shares J4 connector with PD1 +#ifndef TEMP_BOARD_PIN + #define TEMP_BOARD_PIN PC2 // Onboard thermistor, NTC100K +#endif + // // Heaters / Fans // diff --git a/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h b/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h index 0130d602409d..0ed0177da8fe 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h @@ -51,11 +51,7 @@ #define Z_STOP_PIN PC2 // Z-STOP #if ENABLED(BTT_E3_RRF_IDEX_BOARD) - #if X2_USE_ENDSTOP == _XMAX_ - #define X_MAX_PIN FPC2_PIN // X2-STOP - #elif X2_USE_ENDSTOP == _XMIN_ - #define X_MIN_PIN FPC2_PIN // X2-STOP - #endif + #define X2_STOP_PIN FPC2_PIN // X2-STOP #endif // @@ -383,7 +379,7 @@ #endif #if SD_CONNECTION_IS(ONBOARD) - #define SDIO_SUPPORT // Use SDIO for onboard SD + #define ONBOARD_SDIO // Use SDIO for onboard SD //#define SDIO_CLOCK 48000000 #define SD_DETECT_PIN PC4 #elif SD_CONNECTION_IS(CUSTOM_CABLE) diff --git a/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h index b81859dd61cc..6021810f403d 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h @@ -106,11 +106,21 @@ // Pins on the extender // #if ENABLED(M5_EXTENDER) - #define X2_STOP_PIN PI4 // M5 M1_STOP - #define Y2_STOP_PIN PF12 // M5 M5_STOP - #define Z2_STOP_PIN PF4 // M5 M2_STOP - #define Z3_STOP_PIN PI7 // M5 M4_STOP - #define Z4_STOP_PIN PF6 // M5 M3_STOP + #ifndef X2_STOP_PIN + #define X2_STOP_PIN PI4 // M5 M1_STOP + #endif + #ifndef Y2_STOP_PIN + #define Y2_STOP_PIN PF12 // M5 M5_STOP + #endif + #ifndef Z2_STOP_PIN + #define Z2_STOP_PIN PF4 // M5 M2_STOP + #endif + #ifndef Z3_STOP_PIN + #define Z3_STOP_PIN PI7 // M5 M4_STOP + #endif + #ifndef Z4_STOP_PIN + #define Z4_STOP_PIN PF6 // M5 M3_STOP + #endif #endif #ifndef Z_MIN_PROBE_PIN diff --git a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h index 711050b74756..bf08aca0fe45 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h @@ -68,23 +68,6 @@ #define Z_MIN_PROBE_PIN PB7 #endif -// -// Check for additional used endstop pins -// -#if HAS_EXTRA_ENDSTOPS - #define _ENDSTOP_IS_ANY(ES) X2_USE_ENDSTOP == ES || Y2_USE_ENDSTOP == ES || Z2_USE_ENDSTOP == ES || Z3_USE_ENDSTOP == ES || Z4_USE_ENDSTOP == ES - #if _ENDSTOP_IS_ANY(_XMIN_) || _ENDSTOP_IS_ANY(_XMAX_) - #define NEEDS_X_MINMAX - #endif - #if _ENDSTOP_IS_ANY(_YMIN_) || _ENDSTOP_IS_ANY(_YMAX_) - #define NEEDS_Y_MINMAX - #endif - #if _ENDSTOP_IS_ANY(_ZMIN_) || _ENDSTOP_IS_ANY(_ZMAX_) - #define NEEDS_Z_MINMAX - #endif - #undef _ENDSTOP_IS_ANY -#endif - // // Limit Switches // @@ -95,7 +78,7 @@ #else #define X_MIN_PIN E0_DIAG_PIN // E0DET #endif -#elif EITHER(DUAL_X_CARRIAGE, NEEDS_X_MINMAX) +#elif NEEDS_X_MINMAX #ifndef X_MIN_PIN #define X_MIN_PIN X_DIAG_PIN // X-STOP #endif @@ -113,7 +96,7 @@ #else #define Y_MIN_PIN E1_DIAG_PIN // E1DET #endif -#elif ENABLED(NEEDS_Y_MINMAX) +#elif NEEDS_Y_MINMAX #ifndef Y_MIN_PIN #define Y_MIN_PIN Y_DIAG_PIN // Y-STOP #endif @@ -131,7 +114,7 @@ #else #define Z_MIN_PIN E2_DIAG_PIN // PWRDET #endif -#elif ENABLED(NEEDS_Z_MINMAX) +#elif NEEDS_Z_MINMAX #ifndef Z_MIN_PIN #define Z_MIN_PIN Z_DIAG_PIN // Z-STOP #endif @@ -351,7 +334,7 @@ // Must use soft SPI because Marlin's default hardware SPI is tied to LCD's EXP2 // #if SD_CONNECTION_IS(ONBOARD) - #define SDIO_SUPPORT // Use SDIO for onboard SD + #define ONBOARD_SDIO // Use SDIO for onboard SD #ifndef SD_DETECT_STATE #define SD_DETECT_STATE HIGH #elif SD_DETECT_STATE == LOW diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_MINI_E3_V3_0_1.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_MINI_E3_V3_0_1.h index ffddeff67c0f..6f2de83b5142 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_MINI_E3_V3_0_1.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_MINI_E3_V3_0_1.h @@ -25,7 +25,7 @@ #include "env_validate.h" -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "BTT SKR Mini E3 V3.0.1 supports up to 1 hotend / E stepper." #endif diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h index 73c2cf9ff807..183927a5a62a 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h @@ -372,7 +372,7 @@ #define SD_MOSI_PIN EXP2_06_PIN #define SD_DETECT_PIN EXP2_07_PIN #elif SD_CONNECTION_IS(ONBOARD) - #define SDIO_SUPPORT // Use SDIO for onboard SD + #define ONBOARD_SDIO // Use SDIO for onboard SD #elif SD_CONNECTION_IS(CUSTOM_CABLE) #error "No custom SD drive cable defined for this board." #endif diff --git a/Marlin/src/pins/stm32f4/pins_CREALITY_F401.h b/Marlin/src/pins/stm32f4/pins_CREALITY_F401.h new file mode 100644 index 000000000000..7f9eba990137 --- /dev/null +++ b/Marlin/src/pins/stm32f4/pins_CREALITY_F401.h @@ -0,0 +1,241 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2023 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +#include "env_validate.h" + +#define BOARD_INFO_NAME "STM32F401RET6" +#define DEFAULT_MACHINE_NAME "Ender-5 S1" + +#define IIC_BL24CXX_EEPROM // EEPROM on I2C-0 used only for display settings +#if ENABLED(IIC_BL24CXX_EEPROM) + #define IIC_EEPROM_SDA PA11 + #define IIC_EEPROM_SCL PA12 + #define MARLIN_EEPROM_SIZE 0x800 // 2Kb (24C16) +#else + #define SDCARD_EEPROM_EMULATION // SD EEPROM until all EEPROM is BL24CXX + #define MARLIN_EEPROM_SIZE 0x800 // 2Kb +#endif + +// SPI +//#define SPI_EEPROM // EEPROM on SPI-0 +//#define SPI_CHAN_EEPROM1 ? +//#define SPI_EEPROM1_CS ? + +// 2K EEPROM +//#define SPI_EEPROM2_CS ? + +// 32Mb FLASH +//#define SPI_FLASH_CS ? + +// +// Servos +// +#define SERVO0_PIN PC13 // BLTouch OUT + +// +// Limit Switches +// +#define X_STOP_PIN PA5 +#define Y_STOP_PIN PA6 + +#if ENABLED(BLTOUCH) + #define Z_MAX_PIN PA15 // ROCK_20220730 + #define Z_MIN_PIN PC14 + //#define Z_STOP_PIN_NADD PA15 // Added z-axis limit switch +#elif ENABLED(PROBE_ACTIVATION_SWITCH) + #define Z_MIN_PIN PA15 + #define PROBE_TARE_PIN PC14 + #define PROBE_ACTIVATION_SWITCH_PIN PB2 +#else + #define Z_MIN_PIN PA15 +#endif + +// +// Filament runout +// +#if ENABLED(FILAMENT_RUNOUT_SENSOR) + #define FIL_RUNOUT_PIN PC15 +#endif + +// +// Steppers Motor drive chip power control +// +#define X_ENABLE_PIN PC3 +#define X_STEP_PIN PC2 +#define X_DIR_PIN PB9 + +#define Y_ENABLE_PIN PC3 +#define Y_STEP_PIN PB8 +#define Y_DIR_PIN PB7 + +#define Z_ENABLE_PIN PC3 +#define Z_STEP_PIN PB6 +#define Z_DIR_PIN PB5 + +#define E0_ENABLE_PIN PC3 +#define E0_STEP_PIN PB4 +#define E0_DIR_PIN PB3 + +// +// Temperature Sensors +// +#ifndef TEMP_0_PIN + #define TEMP_0_PIN PC5 // E1_THERMISTOR PA0 -> PT100 +#endif +#define TEMP_BED_PIN PC4 // BED_THERMISTOR_1 + +// +// Heaters / Fans +// +#define HEATER_0_PIN PA1 // E1_HEAT_PWM +#define HEATER_BED_PIN PA7 // BED_HEAT_1 FET + +#define FAN0_PIN PA0 // Part cooling fan FET +//#define FAN1_PIN PE11 // Extruder fan FET +//#define FAN2_PIN PE1 // Controller fan FET + +#ifndef E0_AUTO_FAN_PIN + #define E0_AUTO_FAN_PIN PA1 // FAN1_PIN +#endif + +// +// SD Card +// +#define SD_DETECT_PIN PC7 +#define SDCARD_CONNECTION ONBOARD +#define ONBOARD_SPI_DEVICE 1 +#define ONBOARD_SD_CS_PIN PC12 // SDSS +#define SDIO_SUPPORT +#define NO_SD_HOST_DRIVE // This board's SD is only seen by the printer + +// SPI 2 +#if ENABLED(RET6_12864_LCD) + + #define LCD_PINS_RS PB12 + #define LCD_PINS_ENABLE PB15 + #define LCD_PINS_D4 PB13 + #define BTN_EN2 PB14 +#endif + +//#define LED_CONTROL_PIN PA7 + +// +// WiFI Reset +// +#ifdef MENU_RESET_WIFI + #define RESET_WIFI_PIN PB12 +#endif + +// +// Backpower +// +#ifndef BACKPOWER_CTRL_PIN + #define BACKPOWER_CTRL_PIN PA4 // Pull down on the electricity, When the ADC detects that the 24V power supply is below 20V, Save the continued call data first, PA4 = 1 +#endif + +#ifndef CHECK_24V_PIN + #define POWER_DETECTION_PIN PB0 // Detect ADC input pin of 24V power supply +#endif + +/** + * Logical pin vs. port/pin cross reference + * + * PA0 54 // E1_THERMISTOR PA9 0 // TX + * PA1 55 // E2_THERMISTOR PA10 1 // RX + * PA2 56 // E3_THERMISTOR PD3 2 // CTS + * PA3 53 // BED_THERMISTOR_3 PD4 3 // RTS + * PA4 16 // SPI_CS PD5 4 // TX + * PA5 17 // SPI_SCK PD6 5 // RX + * PA6 18 // SPI_MISO PB5 6 // WIFI_WAKEUP + * PA7 19 // SPI_MOSI PE11 7 // WIFI_RESET + * PA8 43 // V_STOP PE12 8 // WIFI_BOOT + * PA9 0 // TX PE1 9 // STATUS_LED + * PA10 1 // RX PB12 10 // SPI_CS + * PA11 30 // OTG_DM PB15 11 // SPI_MOSI + * PA12 31 // OTG_DP PB14 12 // SPI_MISO + * PA13 20 // JTAG_TMS/SWDIO PB13 13 // SPI_SCK + * PA14 21 // JTAG_TCK/SWCLK PB7 14 // SDA + * PA15 25 // SD_CARD_DETECT PB6 15 // SCL + * PB0 49 // E2_HEAT_PWM PA4 16 // SPI_CS + * PB1 50 // E3_HEAT_PWM PA5 17 // SPI_SCK + * PB3 22 // JTAG_TDO/SWO PA6 18 // SPI_MISO + * PB4 37 // USER4 PA7 19 // SPI_MOSI + * PB5 6 // WIFI_WAKEUP PA13 20 // JTAG_TMS/SWDIO + * PB6 15 // SCL PA14 21 // JTAG_TCK/SWCLK + * PB7 14 // SDA PB3 22 // JTAG_TDO/SWO + * PB8 77 // E3_PWM PC8 23 // SDIO_D0 + * PB9 35 // USER1 PC9 24 // SDIO_D1 + * PB10 64 // Y_PWM PA15 25 // SD_CARD_DETECT + * PB12 10 // SPI_CS PC10 26 // SDIO_D2 + * PB13 13 // SPI_SCK PC11 27 // SDIO_D3 + * PB14 12 // SPI_MISO PC12 28 // SDIO_CK + * PB15 11 // SPI_MOSI PD2 29 // SDIO_CMD + * PC0 68 // Z_DIR PA11 30 // OTG_DM + * PC1 33 // IR_ON PA12 31 // OTG_DP + * PC2 51 // BED_THERMISTOR_1 PD1 32 // IR_OUT + * PC3 52 // BED_THERMISTOR_2 PC1 33 // IR_ON + * PC4 57 // E1_FAN PD7 34 // USER3 + * PC5 58 // E2_FAN PB9 35 // USER1 + * PC6 67 // Z_PWM PE0 36 // USER2 + * PC7 48 // E1_HEAT_PWM PB4 37 // USER4 + * PC8 23 // SDIO_D0 PE7 38 // USER_BUTTON + * PC9 24 // SDIO_D1 PD8 39 // X_STOP + * PC10 26 // SDIO_D2 PD9 40 // Y_STOP + * PC11 27 // SDIO_D3 PD10 41 // Z_STOP + * PC12 28 // SDIO_CK PD11 42 // U_STOP + * PC13 70 // E1_DIR PA8 43 // V_STOP + * PC14 69 // E1_RESET PD0 44 // W_STOP + * PC15 66 // Z_RESET PD13 45 // BED_HEAT_2 + * PD0 44 // W_STOP PD14 46 // BED_HEAT_1 + * PD1 32 // IR_OUT PD15 47 // BED_HEAT_3 + * PD2 29 // SDIO_CMD PC7 48 // E1_HEAT_PWM + * PD3 2 // CTS PB0 49 // E2_HEAT_PWM + * PD4 3 // RTS PB1 50 // E3_HEAT_PWM + * PD5 4 // TX PC2 51 // BED_THERMISTOR_1 + * PD6 5 // RX PC3 52 // BED_THERMISTOR_2 + * PD7 34 // USER3 PA3 53 // BED_THERMISTOR_3 + * PD8 39 // X_STOP PA0 54 // E1_THERMISTOR + * PD9 40 // Y_STOP PA1 55 // E2_THERMISTOR + * PD10 41 // Z_STOP PA2 56 // E3_THERMISTOR + * PD11 42 // U_STOP PC4 57 // E1_FAN + * PD12 71 // E1_PWM PC5 58 // E2_FAN + * PD13 45 // BED_HEAT_2 PE8 59 // E3_FAN + * PD14 46 // BED_HEAT_1 PE13 60 // X_RESET + * PD15 47 // BED_HEAT_3 PE14 61 // X_PWM + * PE0 36 // USER2 PE15 62 // X_DIR + * PE1 9 // STATUS_LED PE10 63 // Y_RESET + * PE2 76 // E3_DIR PB10 64 // Y_PWM + * PE3 75 // E3_RESET PE9 65 // Y_DIR + * PE4 72 // E2_RESET PC15 66 // Z_RESET + * PE5 73 // E2_PWM PC6 67 // Z_PWM + * PE6 74 // E2_DIR PC0 68 // Z_DIR + * PE7 38 // USER_BUTTON PC14 69 // E1_RESET + * PE8 59 // E3_FAN PC13 70 // E1_DIR + * PE9 65 // Y_DIR PD12 71 // E1_PWM + * PE10 63 // Y_RESET PE4 72 // E2_RESET + * PE11 7 // WIFI_RESET PE5 73 // E2_PWM + * PE12 8 // WIFI_BOOT PE6 74 // E2_DIR + * PE13 60 // X_RESET PE3 75 // E3_RESET + * PE14 61 // X_PWM PE2 76 // E3_DIR + * PE15 62 // X_DIR PB8 77 // E3_PWM + */ diff --git a/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h b/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h index b9996aa1f2d2..725d326ec2fe 100644 --- a/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h +++ b/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h @@ -214,9 +214,9 @@ #if SD_CONNECTION_IS(ONBOARD) - #define SDIO_SUPPORT // Use SDIO for onboard SD + #define ONBOARD_SDIO // Use SDIO for onboard SD - #if DISABLED(SDIO_SUPPORT) + #if DISABLED(ONBOARD_SDIO) #define SOFTWARE_SPI // Use soft SPI for onboard SD #define SDSS PC11 #define SD_SCK_PIN PC12 diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_K.h b/Marlin/src/pins/stm32f4/pins_LERDGE_K.h index 547161367906..04264ea2e7c8 100644 --- a/Marlin/src/pins/stm32f4/pins_LERDGE_K.h +++ b/Marlin/src/pins/stm32f4/pins_LERDGE_K.h @@ -217,10 +217,10 @@ // // SD support // -#define SDIO_SUPPORT +#define ONBOARD_SDIO #define SDIO_CLOCK 4800000 #define SD_DETECT_PIN PA8 -#if DISABLED(SDIO_SUPPORT) +#if DISABLED(ONBOARD_SDIO) #define SOFTWARE_SPI #define SD_SCK_PIN PC12 #define SD_MISO_PIN PC8 diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_S.h b/Marlin/src/pins/stm32f4/pins_LERDGE_S.h index 180235019ad2..c7c9e3db3b13 100644 --- a/Marlin/src/pins/stm32f4/pins_LERDGE_S.h +++ b/Marlin/src/pins/stm32f4/pins_LERDGE_S.h @@ -160,10 +160,10 @@ // // SD support // -#define SDIO_SUPPORT +#define ONBOARD_SDIO #define SDIO_CLOCK 4800000 #define SD_DETECT_PIN PG15 -#if DISABLED(SDIO_SUPPORT) +#if DISABLED(ONBOARD_SDIO) #define SOFTWARE_SPI #define SD_SCK_PIN PC12 #define SD_MISO_PIN PC8 diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_X.h b/Marlin/src/pins/stm32f4/pins_LERDGE_X.h index 20985f263cd0..22e7f6e2e2b4 100644 --- a/Marlin/src/pins/stm32f4/pins_LERDGE_X.h +++ b/Marlin/src/pins/stm32f4/pins_LERDGE_X.h @@ -118,10 +118,10 @@ // // SD support (On board) // -#define SDIO_SUPPORT +#define ONBOARD_SDIO #define SD_DETECT_PIN PA8 #define SDIO_CLOCK 4800000 -#if DISABLED(SDIO_SUPPORT) +#if DISABLED(ONBOARD_SDIO) #define SOFTWARE_SPI #define SD_SCK_PIN PC12 #define SD_MISO_PIN PC8 diff --git a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8_common.h b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8_common.h index 367cace4247a..33dedf7e8e62 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8_common.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8_common.h @@ -238,7 +238,7 @@ #define EXP2_07_PIN PB11 #define EXP2_08_PIN -1 // RESET -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #ifndef SDCARD_CONNECTION #define SDCARD_CONNECTION ONBOARD #endif diff --git a/Marlin/src/pins/stm32f4/pins_MKS_SKIPR_V1_0.h b/Marlin/src/pins/stm32f4/pins_MKS_SKIPR_V1_0.h index b281a8e2a328..d26e541d4c87 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_SKIPR_V1_0.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_SKIPR_V1_0.h @@ -53,29 +53,12 @@ #define E1_DIAG_PIN PC5 // NEOPIXEL #define E2_DIAG_PIN PB14 // Z+ -// -// Check for additional used endstop pins -// -#if HAS_EXTRA_ENDSTOPS - #define _ENDSTOP_IS_ANY(ES) X2_USE_ENDSTOP == ES || Y2_USE_ENDSTOP == ES || Z2_USE_ENDSTOP == ES || Z3_USE_ENDSTOP == ES || Z4_USE_ENDSTOP == ES - #if _ENDSTOP_IS_ANY(_XMIN_) || _ENDSTOP_IS_ANY(_XMAX_) - #define NEEDS_X_MINMAX - #endif - #if _ENDSTOP_IS_ANY(_YMIN_) || _ENDSTOP_IS_ANY(_YMAX_) - #define NEEDS_Y_MINMAX - #endif - #if _ENDSTOP_IS_ANY(_ZMIN_) || _ENDSTOP_IS_ANY(_ZMAX_) - #define NEEDS_Z_MINMAX - #endif - #undef _ENDSTOP_IS_ANY -#endif - // // Limit Switches // #ifdef X_STALL_SENSITIVITY #define X_STOP_PIN X_DIAG_PIN // X- -#elif EITHER(DUAL_X_CARRIAGE, NEEDS_X_MINMAX) +#elif NEEDS_X_MINMAX #ifndef X_MIN_PIN #define X_MIN_PIN X_DIAG_PIN // X- #endif @@ -88,7 +71,7 @@ #ifdef Y_STALL_SENSITIVITY #define Y_STOP_PIN Y_DIAG_PIN // Y- -#elif ENABLED(NEEDS_Y_MINMAX) +#elif NEEDS_Y_MINMAX #ifndef Y_MIN_PIN #define Y_MIN_PIN Y_DIAG_PIN // Y- #endif @@ -101,7 +84,7 @@ #ifdef Z_STALL_SENSITIVITY #define Z_STOP_PIN Z_DIAG_PIN // Z- -#elif ENABLED(NEEDS_Z_MINMAX) +#elif NEEDS_Z_MINMAX #ifndef Z_MIN_PIN #define Z_MIN_PIN Z_DIAG_PIN // Z- #endif @@ -113,7 +96,7 @@ #endif #if DISABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) || ENABLED(USE_PROBE_FOR_Z_HOMING) - #ifndef Z_MIN_PROBE + #ifndef Z_MIN_PROBE_PIN #define Z_MIN_PROBE_PIN E2_DIAG_PIN // defaults to 'Z+' connector #endif #endif @@ -262,7 +245,7 @@ // SD Support // Onboard SD card use hardware SPI3 (defined in variant), LCD SD card use hardware SPI1 // -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #ifndef SDCARD_CONNECTION #define SDCARD_CONNECTION LCD #endif diff --git a/Marlin/src/pins/stm32f4/pins_TH3D_EZBOARD_V2.h b/Marlin/src/pins/stm32f4/pins_TH3D_EZBOARD_V2.h index 448c54f1b3e4..b74db89f3a0c 100644 --- a/Marlin/src/pins/stm32f4/pins_TH3D_EZBOARD_V2.h +++ b/Marlin/src/pins/stm32f4/pins_TH3D_EZBOARD_V2.h @@ -24,7 +24,7 @@ #define ALLOW_STM32DUINO #include "env_validate.h" -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "TH3D EZBoard only supports 1 hotend / E stepper." #endif diff --git a/Marlin/src/pins/stm32f4/pins_TRONXY_V10.h b/Marlin/src/pins/stm32f4/pins_TRONXY_V10.h index 8d2584fe10b9..1677b45697bc 100644 --- a/Marlin/src/pins/stm32f4/pins_TRONXY_V10.h +++ b/Marlin/src/pins/stm32f4/pins_TRONXY_V10.h @@ -251,7 +251,7 @@ // // SD Card // -#define SDIO_SUPPORT +#define ONBOARD_SDIO #define SD_DETECT_PIN -1 // PF0, but not connected #define SDIO_CLOCK 4500000 #define SDIO_READ_RETRIES 16 diff --git a/Marlin/src/pins/stm32f4/pins_VAKE403D.h b/Marlin/src/pins/stm32f4/pins_VAKE403D.h index a17d31f063cf..e4150f3bd27c 100644 --- a/Marlin/src/pins/stm32f4/pins_VAKE403D.h +++ b/Marlin/src/pins/stm32f4/pins_VAKE403D.h @@ -160,7 +160,7 @@ #define KILL_PIN PD5 #define POWER_LOSS_PIN PA4 // ?? Power loss / nAC_FAULT -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #define SD_DETECT_PIN EXP2_07_PIN #define SD_SS_PIN PB15 // USD_CS -> CS for onboard SD #endif @@ -198,7 +198,7 @@ // #if HAS_WIRED_LCD - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA #define SDSS PB6 // CS for SD card in LCD #endif diff --git a/Marlin/src/pins/stm32g0/env_validate.h b/Marlin/src/pins/stm32g0/env_validate.h index a7be76bd8bb1..03887eb7a491 100644 --- a/Marlin/src/pins/stm32g0/env_validate.h +++ b/Marlin/src/pins/stm32g0/env_validate.h @@ -19,8 +19,11 @@ * along with this program. If not, see . * */ -#pragma once +#ifndef ENV_VALIDATE_H +#define ENV_VALIDATE_H #if NOT_TARGET(STM32G0xx) || NOT_TARGET(STM32G0B1xx) #error "Oops! Select an STM32G0 board in 'Tools > Board.'" #endif + +#endif diff --git a/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M8P_common.h b/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M8P_common.h index bd9a1cf0b58b..792f473d9234 100644 --- a/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M8P_common.h +++ b/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M8P_common.h @@ -75,20 +75,6 @@ //#define Z_MIN_PROBE_PIN PF6 // IND-PROBE (with adjustable voltage & pullup set via jumpers) #endif -// -// Check for additional used endstop pins -// -#if HAS_EXTRA_ENDSTOPS - #define _ENDSTOP_IS_ANY(ES) X2_USE_ENDSTOP == ES || Y2_USE_ENDSTOP == ES || Z2_USE_ENDSTOP == ES || Z3_USE_ENDSTOP == ES || Z4_USE_ENDSTOP == ES - #if _ENDSTOP_IS_ANY(_XMIN_) || _ENDSTOP_IS_ANY(_XMAX_) - #define NEEDS_X_MINMAX - #endif - #if _ENDSTOP_IS_ANY(_YMIN_) || _ENDSTOP_IS_ANY(_YMAX_) - #define NEEDS_Y_MINMAX - #endif - #undef _ENDSTOP_IS_ANY -#endif - // // Limit Switches // @@ -99,7 +85,7 @@ #else #define X_MIN_PIN E0_DIAG_PIN // MIN5 #endif -#elif EITHER(DUAL_X_CARRIAGE, NEEDS_X_MINMAX) +#elif NEEDS_X_MINMAX #ifndef X_MIN_PIN #define X_MIN_PIN X_DIAG_PIN // MIN1 #endif @@ -117,7 +103,7 @@ #else #define Y_MIN_PIN E1_DIAG_PIN // MIN6 #endif -#elif ENABLED(NEEDS_Y_MINMAX) +#elif NEEDS_Y_MINMAX #ifndef Y_MIN_PIN #define Y_MIN_PIN Y_DIAG_PIN // MIN2 #endif diff --git a/Marlin/src/pins/stm32h7/env_validate.h b/Marlin/src/pins/stm32h7/env_validate.h index 0c515e5df6be..7feaf2095909 100644 --- a/Marlin/src/pins/stm32h7/env_validate.h +++ b/Marlin/src/pins/stm32h7/env_validate.h @@ -19,8 +19,11 @@ * along with this program. If not, see . * */ -#pragma once +#ifndef ENV_VALIDATE_H +#define ENV_VALIDATE_H #if NOT_TARGET(STM32H7) #error "Oops! Select an STM32H7 board in 'Tools > Board.'" #endif + +#endif diff --git a/Marlin/src/pins/stm32h7/pins_BTT_OCTOPUS_MAX_EZ.h b/Marlin/src/pins/stm32h7/pins_BTT_OCTOPUS_MAX_EZ.h index e8e984fcb7e3..119c6b39299d 100644 --- a/Marlin/src/pins/stm32h7/pins_BTT_OCTOPUS_MAX_EZ.h +++ b/Marlin/src/pins/stm32h7/pins_BTT_OCTOPUS_MAX_EZ.h @@ -68,23 +68,6 @@ #define Z_MIN_PROBE_PIN PB15 #endif -// -// Check for additional used endstop pins -// -#if HAS_EXTRA_ENDSTOPS - #define _ENDSTOP_IS_ANY(ES) X2_USE_ENDSTOP == ES || Y2_USE_ENDSTOP == ES || Z2_USE_ENDSTOP == ES || Z3_USE_ENDSTOP == ES || Z4_USE_ENDSTOP == ES - #if _ENDSTOP_IS_ANY(_XMIN_) || _ENDSTOP_IS_ANY(_XMAX_) - #define NEEDS_X_MINMAX - #endif - #if _ENDSTOP_IS_ANY(_YMIN_) || _ENDSTOP_IS_ANY(_YMAX_) - #define NEEDS_Y_MINMAX - #endif - #if _ENDSTOP_IS_ANY(_ZMIN_) || _ENDSTOP_IS_ANY(_ZMAX_) - #define NEEDS_Z_MINMAX - #endif - #undef _ENDSTOP_IS_ANY -#endif - // // Limit Switches // @@ -95,7 +78,7 @@ #else #define X_MIN_PIN E0_DIAG_PIN // E0DET #endif -#elif EITHER(DUAL_X_CARRIAGE, NEEDS_X_MINMAX) +#elif NEEDS_X_MINMAX #ifndef X_MIN_PIN #define X_MIN_PIN X_DIAG_PIN // X-STOP #endif @@ -113,7 +96,7 @@ #else #define Y_MIN_PIN E1_DIAG_PIN // E1DET #endif -#elif ENABLED(NEEDS_Y_MINMAX) +#elif NEEDS_Y_MINMAX #ifndef Y_MIN_PIN #define Y_MIN_PIN Y_DIAG_PIN // Y-STOP #endif @@ -131,7 +114,7 @@ #else #define Z_MIN_PIN E2_DIAG_PIN // PWRDET #endif -#elif ENABLED(NEEDS_Z_MINMAX) +#elif NEEDS_Z_MINMAX #ifndef Z_MIN_PIN #define Z_MIN_PIN Z_DIAG_PIN // Z-STOP #endif diff --git a/Marlin/src/pins/stm32h7/pins_BTT_SKR_V3_0_common.h b/Marlin/src/pins/stm32h7/pins_BTT_SKR_V3_0_common.h index be56d0d2b7ab..09b305f700dd 100644 --- a/Marlin/src/pins/stm32h7/pins_BTT_SKR_V3_0_common.h +++ b/Marlin/src/pins/stm32h7/pins_BTT_SKR_V3_0_common.h @@ -360,7 +360,7 @@ #define SD_MOSI_PIN EXP2_06_PIN #define SD_DETECT_PIN EXP2_07_PIN #elif SD_CONNECTION_IS(ONBOARD) - #define SDIO_SUPPORT + #define ONBOARD_SDIO #define SDIO_CLOCK 24000000 // 24MHz #elif SD_CONNECTION_IS(CUSTOM_CABLE) #error "No custom SD drive cable defined for this board." diff --git a/Marlin/src/pins/teensy2/env_validate.h b/Marlin/src/pins/teensy2/env_validate.h index 5f0ea4f3b672..8fd6fba31932 100644 --- a/Marlin/src/pins/teensy2/env_validate.h +++ b/Marlin/src/pins/teensy2/env_validate.h @@ -19,10 +19,13 @@ * along with this program. If not, see . * */ -#pragma once +#ifndef ENV_VALIDATE_H +#define ENV_VALIDATE_H #if NOT_TARGET(__AVR_AT90USB1286__) && (DISABLED(ALLOW_AT90USB1286P) || NOT_TARGET(__AVR_AT90USB1286P__)) #error "Oops! Select 'Teensy++ 2.0' or 'Printrboard' in 'Tools > Board.'" #endif #undef ALLOW_AT90USB1286P + +#endif diff --git a/Marlin/src/sd/SdBaseFile.cpp b/Marlin/src/sd/SdBaseFile.cpp index 5ee0db2b9e86..cf403d4b3aae 100644 --- a/Marlin/src/sd/SdBaseFile.cpp +++ b/Marlin/src/sd/SdBaseFile.cpp @@ -35,7 +35,7 @@ #include "../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "SdBaseFile.h" @@ -2269,4 +2269,4 @@ int16_t SdBaseFile::write(const void *buf, const uint16_t nbyte) { return -1; } -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/sd/SdFatUtil.cpp b/Marlin/src/sd/SdFatUtil.cpp index e6f7a9a01305..a68bd73ebea0 100644 --- a/Marlin/src/sd/SdFatUtil.cpp +++ b/Marlin/src/sd/SdFatUtil.cpp @@ -31,7 +31,7 @@ #include "../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "SdFatUtil.h" #include @@ -59,4 +59,4 @@ #endif -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/sd/SdFile.cpp b/Marlin/src/sd/SdFile.cpp index a1dd79372747..c6a3577e1d0c 100644 --- a/Marlin/src/sd/SdFile.cpp +++ b/Marlin/src/sd/SdFile.cpp @@ -31,7 +31,7 @@ #include "../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "SdFile.h" @@ -95,4 +95,4 @@ void SdFile::writeln_P(PGM_P const str) { write_P(PSTR("\r\n")); } -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/sd/SdVolume.cpp b/Marlin/src/sd/SdVolume.cpp index 8c06c745371b..1b8cdbdcae31 100644 --- a/Marlin/src/sd/SdVolume.cpp +++ b/Marlin/src/sd/SdVolume.cpp @@ -31,7 +31,7 @@ #include "../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA #include "SdVolume.h" @@ -402,4 +402,4 @@ bool SdVolume::init(DiskIODriver * const dev, const uint8_t part) { return true; } -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 3a377d694d27..4e864e567273 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -22,7 +22,7 @@ #include "../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA //#define DEBUG_CARDREADER @@ -172,7 +172,7 @@ CardReader::CardReader() { workDirDepth = 0; ZERO(workDirParents); - #if BOTH(SDSUPPORT, HAS_SD_DETECT) + #if BOTH(HAS_MEDIA, HAS_SD_DETECT) SET_INPUT_PULLUP(SD_DETECT_PIN); #endif @@ -1368,4 +1368,4 @@ void CardReader::fileHasFinished() { #endif // POWER_LOSS_RECOVERY -#endif // SDSUPPORT +#endif // HAS_MEDIA diff --git a/Marlin/src/sd/cardreader.h b/Marlin/src/sd/cardreader.h index d5eca9c915c1..3b7b7debcf6c 100644 --- a/Marlin/src/sd/cardreader.h +++ b/Marlin/src/sd/cardreader.h @@ -23,7 +23,7 @@ #include "../inc/MarlinConfig.h" -#if ENABLED(SDSUPPORT) +#if HAS_MEDIA extern const char M23_STR[], M24_STR[]; @@ -364,7 +364,7 @@ class CardReader { extern CardReader card; -#else // !SDSUPPORT +#else // !HAS_MEDIA #define IS_SD_PRINTING() false #define IS_SD_FETCHING() false @@ -373,4 +373,4 @@ extern CardReader card; #define LONG_FILENAME_LENGTH 0 -#endif // !SDSUPPORT +#endif // !HAS_MEDIA diff --git a/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp b/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp index b5968b7021fe..76d69c789ec8 100644 --- a/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp +++ b/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp @@ -84,10 +84,10 @@ #elif ENABLED(USE_OTG_USB_HOST) #if HAS_SD_HOST_DRIVE - #include HAL_PATH(../../HAL, msc_sd.h) + #include HAL_PATH(../.., msc_sd.h) #endif - #include HAL_PATH(../../HAL, usb_host.h) + #include HAL_PATH(../.., usb_host.h) #define UHS_START usb.start() #define rREVISION 0 diff --git a/buildroot/share/PlatformIO/boards/marlin_CREALITY_STM32F401RE.json b/buildroot/share/PlatformIO/boards/marlin_CREALITY_STM32F401RE.json new file mode 100644 index 000000000000..31739c3a386a --- /dev/null +++ b/buildroot/share/PlatformIO/boards/marlin_CREALITY_STM32F401RE.json @@ -0,0 +1,65 @@ +{ + "build": { + "core": "stm32", + "cpu": "cortex-m4", + "extra_flags": "-DSTM32F401xx", + "f_cpu": "84000000L", + "hwids": [ + [ + "0x1EAF", + "0x0003" + ], + [ + "0x0483", + "0x3748" + ] + ], + "ldscript": "ldscript.ld", + "mcu": "stm32f401ret6", + "variant": "MARLIN_CREALITY_STM32F401RE" + }, + "debug": { + "jlink_device": "STM32F401RE", + "openocd_target": "stm32f4x", + "svd_path": "STM32F40x.svd", + "tools": { + "stlink": { + "server": { + "arguments": [ + "-f", + "scripts/interface/stlink.cfg", + "-c", + "transport select hla_swd", + "-f", + "scripts/target/stm32f4x.cfg", + "-c", + "reset_config none" + ], + "executable": "bin/openocd", + "package": "tool-openocd" + } + } + } + }, + "frameworks": [ + "arduino", + "stm32cube" + ], + "name": "STM32F401RE (64k RAM. 512k Flash)", + "upload": { + "disable_flushing": false, + "maximum_ram_size": 65536, + "maximum_size": 514288, + "protocol": "stlink", + "protocols": [ + "stlink", + "dfu", + "jlink" + ], + "require_upload_port": true, + "use_1200bps_touch": false, + "wait_for_upload_port": false + }, + "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f401re.html", + "vendor": "Generic" +} diff --git a/buildroot/share/PlatformIO/ldscripts/creality.ld b/buildroot/share/PlatformIO/ldscripts/creality.ld index 785345543c0c..8b330c9457b2 100644 --- a/buildroot/share/PlatformIO/ldscripts/creality.ld +++ b/buildroot/share/PlatformIO/ldscripts/creality.ld @@ -1,7 +1,7 @@ MEMORY { ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - 40 - rom (rx) : ORIGIN = 0x08007000, LENGTH = 512K - 28K + rom (rx) : ORIGIN = 0x08007000, LENGTH = 512K - 64K } /* Provide memory region aliases for common.inc */ diff --git a/buildroot/share/PlatformIO/scripts/common-dependencies.h b/buildroot/share/PlatformIO/scripts/common-dependencies.h index 344669c49bdf..4438b4efe189 100644 --- a/buildroot/share/PlatformIO/scripts/common-dependencies.h +++ b/buildroot/share/PlatformIO/scripts/common-dependencies.h @@ -68,7 +68,7 @@ #if ENABLED(ADVANCED_PAUSE_FEATURE) #define HAS_MENU_FILAMENT #endif - #if ENABLED(SDSUPPORT) + #if HAS_MEDIA #define HAS_MENU_MEDIA #endif #if ENABLED(MIXING_EXTRUDER) @@ -105,3 +105,16 @@ #define HAS_MENU_UBL #endif #endif + +#if HAS_GRAPHICAL_TFT + #define NOTOSANS 1 + #define UNIFONT 2 + #define HELVETICA 3 + #if TFT_FONT == NOTOSANS + #define TFT_FONT_NOTOSANS + #elif TFT_FONT == UNIFONT + #define TFT_FONT_UNIFONT + #elif TFT_FONT == HELVETICA + #define TFT_FONT_HELVETICA + #endif +#endif diff --git a/buildroot/share/PlatformIO/scripts/common-dependencies.py b/buildroot/share/PlatformIO/scripts/common-dependencies.py index 6b5a9aea5792..58d9cfcb4d74 100644 --- a/buildroot/share/PlatformIO/scripts/common-dependencies.py +++ b/buildroot/share/PlatformIO/scripts/common-dependencies.py @@ -5,7 +5,9 @@ import pioutil if pioutil.is_pio_build(): - import subprocess,os,re + import subprocess,os,re,fnmatch,glob + srcfilepattern = re.compile(r".*[.](cpp|c)$") + marlinbasedir = os.path.join(os.getcwd(), "Marlin/") Import("env") from platformio.package.meta import PackageSpec @@ -128,6 +130,7 @@ def force_ignore_unused_libs(): def apply_features_config(): load_features() blab("========== Apply enabled features...") + build_filters = ' '.join(env.GetProjectOption('src_filter')) for feature in FEATURE_CONFIG: if not env.MarlinHas(feature): continue @@ -174,23 +177,87 @@ def apply_features_config(): if 'src_filter' in feat: blab("========== Adding build_src_filter for %s... " % feature, 2) - src_filter = ' '.join(env.GetProjectOption('src_filter')) - # first we need to remove the references to the same folder - my_srcs = re.findall(r'[+-](<.*?>)', feat['src_filter']) - cur_srcs = re.findall(r'[+-](<.*?>)', src_filter) - for d in my_srcs: - if d in cur_srcs: - src_filter = re.sub(r'[+-]' + d, '', src_filter) - - src_filter = feat['src_filter'] + ' ' + src_filter - set_env_field('build_src_filter', [src_filter]) - env.Replace(SRC_FILTER=src_filter) + build_filters = build_filters + ' ' + feat['src_filter'] + # Just append the filter in the order that the build environment specifies. + # Important here is the order of entries in the "features.ini" file. if 'lib_ignore' in feat: blab("========== Adding lib_ignore for %s... " % feature, 2) lib_ignore = env.GetProjectOption('lib_ignore') + [feat['lib_ignore']] set_env_field('lib_ignore', lib_ignore) + src_filter = "" + if True: + # Build the actual equivalent build_src_filter list based on the inclusions by the features. + # PlatformIO doesn't do it this way, but maybe in the future.... + cur_srcs = set() + # Remove the references to the same folder + my_srcs = re.findall(r'([+-]<.*?>)', build_filters) + for d in my_srcs: + # Assume normalized relative paths + plain = d[2:-1] + if d[0] == '+': + def addentry(fullpath, info=None): + relp = os.path.relpath(fullpath, marlinbasedir) + if srcfilepattern.match(relp): + if info: + blab("Added src file %s (%s)" % (relp, str(info))) + else: + blab("Added src file %s " % relp) + cur_srcs.add(relp) + # Special rule: If a direct folder is specified add all files within. + fullplain = os.path.join(marlinbasedir, plain) + if os.path.isdir(fullplain): + blab("Directory content addition for %s " % plain) + gpattern = os.path.join(fullplain, "**") + for fname in glob.glob(gpattern, recursive=True): + addentry(fname, "dca") + else: + # Add all the things from the pattern by GLOB. + def srepl(matchi): + g0 = matchi.group(0) + return r"**" + g0[1:] + gpattern = re.sub(r'[*]($|[^*])', srepl, plain) + gpattern = os.path.join(marlinbasedir, gpattern) + + for fname in glob.glob(gpattern, recursive=True): + addentry(fname) + else: + # Special rule: If a direct folder is specified then remove all files within. + def onremove(relp, info=None): + if info: + blab("Removed src file %s (%s)" % (relp, str(info))) + else: + blab("Removed src file %s " % relp) + fullplain = os.path.join(marlinbasedir, plain) + if os.path.isdir(fullplain): + blab("Directory content removal for %s " % plain) + def filt(x): + common = os.path.commonpath([plain, x]) + if not common == os.path.normpath(plain): return True + onremove(x, "dcr") + return False + cur_srcs = set(filter(filt, cur_srcs)) + else: + # Remove matching source entries. + def filt(x): + if not fnmatch.fnmatch(x, plain): return True + onremove(x) + return False + cur_srcs = set(filter(filt, cur_srcs)) + # Transform the resulting set into a string. + for x in cur_srcs: + if len(src_filter) > 0: src_filter += ' ' + src_filter += "+<" + x + ">" + + #blab("Final src_filter: " + src_filter) + else: + src_filter = build_filters + + # Update in PlatformIO + set_env_field('build_src_filter', [src_filter]) + env.Replace(SRC_FILTER=src_filter) + # # Use the compiler to get a list of all enabled features # @@ -226,6 +293,8 @@ def MarlinHas(env, feature): elif val in env['MARLIN_FEATURES']: some_on = env.MarlinHas(val) + #blab("%s is %s" % (feature, str(some_on))) + return some_on validate_pio() diff --git a/buildroot/share/PlatformIO/scripts/schema.py b/buildroot/share/PlatformIO/scripts/schema.py index 103aa1f072dc..afac7b5d2788 100755 --- a/buildroot/share/PlatformIO/scripts/schema.py +++ b/buildroot/share/PlatformIO/scripts/schema.py @@ -190,7 +190,7 @@ def use_comment(c, opt, sec, bufref): elif state == Parse.BLOCK_COMMENT: # Look for temperature sensors - if cline == "Temperature sensors available:": + if re.match(r'temperature sensors.*:', cline, re.IGNORECASE): state, cline = Parse.GET_SENSORS, "Temperature Sensors" options_json, section = use_comment(cline, options_json, section, comment_buff) diff --git a/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/PeripheralPins.c b/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/PeripheralPins.c new file mode 100644 index 000000000000..418ef5aa7abc --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/PeripheralPins.c @@ -0,0 +1,252 @@ +/* + ******************************************************************************* + * Copyright (c) 2019, STMicroelectronics + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************* + * Automatically generated from STM32F401R[(B-C)|(D-E)]Tx.xml + */ +#include "Arduino.h" +#include "PeripheralPins.h" + +/* ===== + * Note: Commented lines are alternative possibilities which are not used per default. + * If you change them, you will have to know what you do + * ===== + */ + +//*** ADC *** + +#ifdef HAL_ADC_MODULE_ENABLED +WEAK const PinMap PinMap_ADC[] = { + {PA_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC1_IN0 + {PA_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1 + {PA_2, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2 + {PA_3, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3 + {PA_4, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4 + {PA_5, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_IN5 + {PA_6, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_IN6 + {PA_7, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_IN7 + {PB_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8 + {PB_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9 + {PC_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10 + {PC_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11 + {PC_2, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12 + {PC_3, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13 + {PC_4, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_IN14 + {PC_5, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_IN15 + {NC, NP, 0} +}; +#endif + +//*** No DAC *** + +//*** I2C *** + +#ifdef HAL_I2C_MODULE_ENABLED +WEAK const PinMap PinMap_I2C_SDA[] = { + {PB_3, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C2)}, + {PB_4, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C3)}, + {PB_7, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + {PB_9, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + {PC_9, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, + {NC, NP, 0} +}; + +WEAK const PinMap PinMap_I2C_SCL[] = { + {PA_8, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, + {PB_6, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + {PB_8, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + {PB_10, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, + {NC, NP, 0} +}; +#endif + +//*** PWM *** + +#ifdef HAL_TIM_MODULE_ENABLED +WEAK const PinMap PinMap_PWM[] = { + //{PA_0, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 + {PA_0, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 + //{PA_1, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 + {PA_1, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 + //{PA_2, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 + {PA_2, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3 + //{PA_2, TIM9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1 + //{PA_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 + {PA_3, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4 + //{PA_3, TIM9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2 + {PA_5, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 + {PA_6, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 + //{PA_7, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N + {PA_7, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 + {PA_8, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 + {PA_9, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2 + {PA_10, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3 + {PA_11, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4 + {PA_15, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 + //{PB_0, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N + {PB_0, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 + //{PB_1, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N + {PB_1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 + {PB_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 + {PB_4, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 + {PB_5, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 + {PB_6, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1 + {PB_7, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2 + {PB_8, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3 + //{PB_8, TIM10, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1 + {PB_9, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4 + //{PB_9, TIM11, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1 + {PB_10, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 + {PB_13, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N + {PB_14, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N + {PB_15, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N + {PC_6, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 + {PC_7, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 + {PC_8, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 + {PC_9, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 + {NC, NP, 0} +}; +#endif + +//*** SERIAL *** + +#ifdef HAL_UART_MODULE_ENABLED +WEAK const PinMap PinMap_UART_TX[] = { + {PA_2, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PA_9, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PA_11, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {PB_6, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PC_6, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {NC, NP, 0} +}; + +WEAK const PinMap PinMap_UART_RX[] = { + {PA_3, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PA_10, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PA_12, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {PB_7, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PC_7, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {NC, NP, 0} +}; + +WEAK const PinMap PinMap_UART_RTS[] = { + {PA_1, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PA_12, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {NC, NP, 0} +}; + +WEAK const PinMap PinMap_UART_CTS[] = { + {PA_0, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PA_11, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {NC, NP, 0} +}; +#endif + +//*** SPI *** + +#ifdef HAL_SPI_MODULE_ENABLED +WEAK const PinMap PinMap_SPI_MOSI[] = { + {PA_7, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + //{PB_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PB_5, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_15, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_3, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_12, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NP, 0} +}; + +WEAK const PinMap PinMap_SPI_MISO[] = { + {PA_6, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + //{PB_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PB_4, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_14, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_2, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_11, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NP, 0} +}; + +WEAK const PinMap PinMap_SPI_SCLK[] = { + {PA_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + //{PB_3, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PB_3, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_10, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PB_13, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_10, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NP, 0} +}; + +WEAK const PinMap PinMap_SPI_SSEL[] = { + {PA_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + //{PA_4, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + //{PA_15, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PA_15, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_9, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PB_12, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {NC, NP, 0} +}; +#endif + +//*** No CAN *** + +//*** No ETHERNET *** + +//*** No QUADSPI *** + +//*** USB *** + +#ifdef HAL_PCD_MODULE_ENABLED +WEAK const PinMap PinMap_USB_OTG_FS[] = { +#ifndef ARDUINO_CoreBoard_F401RC + {PA_8, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_SOF + {PA_9, USB_OTG_FS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_OTG_FS_VBUS + {PA_10, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_ID +#endif + {PA_11, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DM + {PA_12, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DP + {NC, NP, 0} +}; +#endif + +//*** No USB_OTG_HS *** + +//*** SD *** + +#ifdef HAL_SD_MODULE_ENABLED +WEAK const PinMap PinMap_SD[] = { + {PB_8, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D4 + {PB_9, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D5 + {PC_6, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D6 + {PC_7, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D7 + {PC_8, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D0 + {PC_9, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D1 + {PC_10, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D2 + {PC_11, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D3 + {PC_12, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_SDIO)}, // SDIO_CK + {PD_2, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_SDIO)}, // SDIO_CMD + {NC, NP, 0} +}; +#endif diff --git a/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/PinNamesVar.h b/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/PinNamesVar.h new file mode 100644 index 000000000000..f5db451e6f19 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/PinNamesVar.h @@ -0,0 +1,33 @@ +/* SYS_WKUP */ +#ifdef PWR_WAKEUP_PIN1 + SYS_WKUP1 = PA_0, +#endif +#ifdef PWR_WAKEUP_PIN2 + SYS_WKUP2 = NC, +#endif +#ifdef PWR_WAKEUP_PIN3 + SYS_WKUP3 = NC, +#endif +#ifdef PWR_WAKEUP_PIN4 + SYS_WKUP4 = NC, +#endif +#ifdef PWR_WAKEUP_PIN5 + SYS_WKUP5 = NC, +#endif +#ifdef PWR_WAKEUP_PIN6 + SYS_WKUP6 = NC, +#endif +#ifdef PWR_WAKEUP_PIN7 + SYS_WKUP7 = NC, +#endif +#ifdef PWR_WAKEUP_PIN8 + SYS_WKUP8 = NC, +#endif +/* USB */ +#ifdef USBCON + USB_OTG_FS_SOF = PA_8, + USB_OTG_FS_VBUS = PA_9, + USB_OTG_FS_ID = PA_10, + USB_OTG_FS_DM = PA_11, + USB_OTG_FS_DP = PA_12, +#endif diff --git a/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/hal_conf_custom.h b/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/hal_conf_custom.h new file mode 100644 index 000000000000..1dd047bb9005 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/hal_conf_custom.h @@ -0,0 +1,495 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2017 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_HAL_CONF_CUSTOM +#define __STM32F4xx_HAL_CONF_CUSTOM + +#ifdef __cplusplus +extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ + /** + * @brief This is the list of modules to be used in the HAL driver + */ +#define HAL_MODULE_ENABLED +#define HAL_ADC_MODULE_ENABLED +#define HAL_CRC_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_GPIO_MODULE_ENABLED +#define HAL_I2C_MODULE_ENABLED +#define HAL_IWDG_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_RTC_MODULE_ENABLED +#define HAL_SPI_MODULE_ENABLED +#define HAL_TIM_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED +//#define HAL_PCD_MODULE_ENABLED // Automatically added if any type of USB is enabled, as in Arduino IDE. (STM32 v3.10700.191028) + +//#define HAL_CAN_MODULE_ENABLED +//#define HAL_CAN_LEGACY_MODULE_ENABLED +//#define HAL_CEC_MODULE_ENABLED +//#define HAL_CRYP_MODULE_ENABLED +//#define HAL_DAC_MODULE_ENABLED +//#define HAL_DCMI_MODULE_ENABLED +//#define HAL_DMA2D_MODULE_ENABLED +//#define HAL_ETH_MODULE_ENABLED +//#define HAL_NAND_MODULE_ENABLED +//#define HAL_NOR_MODULE_ENABLED +//#define HAL_PCCARD_MODULE_ENABLED +//#define HAL_SRAM_MODULE_ENABLED +//#define HAL_SDRAM_MODULE_ENABLED +//#define HAL_HASH_MODULE_ENABLED +//#define HAL_EXTI_MODULE_ENABLED +//#define HAL_SMBUS_MODULE_ENABLED +//#define HAL_I2S_MODULE_ENABLED +//#define HAL_LTDC_MODULE_ENABLED +//#define HAL_DSI_MODULE_ENABLED +//#define HAL_QSPI_MODULE_ENABLED +//#define HAL_RNG_MODULE_ENABLED +//#define HAL_SAI_MODULE_ENABLED +#define HAL_SD_MODULE_ENABLED +//#define HAL_UART_MODULE_ENABLED +//#define HAL_USART_MODULE_ENABLED +//#define HAL_IRDA_MODULE_ENABLED +//#define HAL_SMARTCARD_MODULE_ENABLED +//#define HAL_WWDG_MODULE_ENABLED +//#define HAL_HCD_MODULE_ENABLED +//#define HAL_FMPI2C_MODULE_ENABLED +//#define HAL_SPDIFRX_MODULE_ENABLED +//#define HAL_DFSDM_MODULE_ENABLED +//#define HAL_LPTIM_MODULE_ENABLED +//#define HAL_MMC_MODULE_ENABLED + +/* ########################## HSE/HSI Values adaptation ##################### */ +/** + * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSE is used as system clock source, directly or through the PLL). + */ +#ifndef HSE_VALUE +#define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#ifndef HSE_STARTUP_TIMEOUT +#define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @brief Internal High Speed oscillator (HSI) value. + * This value is used by the RCC HAL module to compute the system frequency + * (when HSI is used as system clock source, directly or through the PLL). + */ +#ifndef HSI_VALUE +#define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz */ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#ifndef LSI_VALUE +#define LSI_VALUE 32000U /*!< LSI Typical Value in Hz */ +#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz +The real value may vary depending on the variations +in voltage and temperature. */ +/** + * @brief External Low Speed oscillator (LSE) value. + */ +#ifndef LSE_VALUE +#define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ +#endif /* LSE_VALUE */ + +#ifndef LSE_STARTUP_TIMEOUT +#define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/** + * @brief External clock source for I2S peripheral + * This value is used by the I2S HAL module to compute the I2S clock source + * frequency, this source is inserted directly through I2S_CKIN pad. + */ +#ifndef EXTERNAL_CLOCK_VALUE +#define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External oscillator in Hz*/ +#endif /* EXTERNAL_CLOCK_VALUE */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, + === you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** + * @brief This is the HAL system configuration section + */ +#if !defined (VDD_VALUE) +#define VDD_VALUE 3300U /*!< Value of VDD in mv */ +#endif +#if !defined (TICK_INT_PRIORITY) +#define TICK_INT_PRIORITY 0x00U /*!< tick interrupt priority */ +#endif +#if !defined (USE_RTOS) +#define USE_RTOS 0U +#endif +#if !defined (PREFETCH_ENABLE) +#define PREFETCH_ENABLE 1U +#endif +#if !defined (INSTRUCTION_CACHE_ENABLE) +#define INSTRUCTION_CACHE_ENABLE 1U +#endif +#if !defined (DATA_CACHE_ENABLE) +#define DATA_CACHE_ENABLE 1U +#endif + +#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ +#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ +#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ +#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ +#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ +#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ +#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ +#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ +#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ +#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ +#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ +#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ +#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ +#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */ +#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ +#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ +#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ +#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ +#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ +#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ +#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ +#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ +#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ +#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ +#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ +#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ +#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ +#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ +#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ +#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ +#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ +#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ +#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ +#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ +#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ +#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ +#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ +#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## Ethernet peripheral configuration ##################### */ + +/* Section 1 : Ethernet peripheral configuration */ + +/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ +#define MAC_ADDR0 2U +#define MAC_ADDR1 0U +#define MAC_ADDR2 0U +#define MAC_ADDR3 0U +#define MAC_ADDR4 0U +#define MAC_ADDR5 0U + +/* Definition of the Ethernet driver buffers size and count */ +#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ +#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ +#define ETH_RXBUFNB ((uint32_t)4U) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ +#define ETH_TXBUFNB ((uint32_t)4U) /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ + +/* Section 2: PHY configuration section */ + +/* DP83848_PHY_ADDRESS Address*/ +#define DP83848_PHY_ADDRESS 0x01U +/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ +#define PHY_RESET_DELAY 0x000000FFU +/* PHY Configuration delay */ +#define PHY_CONFIG_DELAY 0x00000FFFU + +#define PHY_READ_TO 0x0000FFFFU +#define PHY_WRITE_TO 0x0000FFFFU + +/* Section 3: Common PHY Registers */ + +#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ + +#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ +#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ +#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ +#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ +#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ +#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ +#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ +#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ +#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ +#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ + +#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ +#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ +#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ + +/* Section 4: Extended PHY Registers */ +#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ + +/* ################## SPI peripheral configuration ########################## */ + +/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver + * Activated: CRC code is present inside driver + * Deactivated: CRC code cleaned from driver + */ +#ifndef USE_SPI_CRC +#define USE_SPI_CRC 0U +#endif + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED +#include "stm32f4xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED +#include "stm32f4xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED +#include "stm32f4xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED +#include "stm32f4xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED +#include "stm32f4xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED +#include "stm32f4xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED +#include "stm32f4xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CAN_LEGACY_MODULE_ENABLED +#include "stm32f4xx_hal_can_legacy.h" +#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED +#include "stm32f4xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED +#include "stm32f4xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED +#include "stm32f4xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED +#include "stm32f4xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED +#include "stm32f4xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED +#include "stm32f4xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED +#include "stm32f4xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED +#include "stm32f4xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED +#include "stm32f4xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED +#include "stm32f4xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_PCCARD_MODULE_ENABLED +#include "stm32f4xx_hal_pccard.h" +#endif /* HAL_PCCARD_MODULE_ENABLED */ + +#ifdef HAL_SDRAM_MODULE_ENABLED +#include "stm32f4xx_hal_sdram.h" +#endif /* HAL_SDRAM_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED +#include "stm32f4xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED +#include "stm32f4xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED +#include "stm32f4xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED +#include "stm32f4xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED +#include "stm32f4xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED +#include "stm32f4xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED +#include "stm32f4xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED +#include "stm32f4xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED +#include "stm32f4xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED +#include "stm32f4xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED +#include "stm32f4xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED +#include "stm32f4xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED +#include "stm32f4xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED +#include "stm32f4xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED +#include "stm32f4xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED +#include "stm32f4xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED +#include "stm32f4xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED +#include "stm32f4xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED +#include "stm32f4xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED +#include "stm32f4xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED +#include "stm32f4xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED +#include "stm32f4xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED +#include "stm32f4xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_FMPI2C_MODULE_ENABLED +#include "stm32f4xx_hal_fmpi2c.h" +#endif /* HAL_FMPI2C_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED +#include "stm32f4xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED +#include "stm32f4xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED +#include "stm32f4xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED +#include "stm32f4xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ +#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ +void assert_failed(uint8_t *file, uint32_t line); +#else +#define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F4xx_HAL_CONF_CUSTOM_H */ + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/ldscript.ld b/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/ldscript.ld new file mode 100644 index 000000000000..881b72167ef1 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/ldscript.ld @@ -0,0 +1,186 @@ +/* +***************************************************************************** +** +** File : ldscript.ld +** +** Abstract : Linker script for STM32F401RETx Device with +** 512KByte FLASH, 96KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Target : STMicroelectronics STM32 +** +** +** Distribution: The file is distributed as is, without any warranty +** of any kind. +** +***************************************************************************** +** @attention +** +**

© COPYRIGHT(c) 2014 Ac6

+** +** Redistribution and use in source and binary forms, with or without modification, +** are permitted provided that the following conditions are met: +** 1. Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** 3. Neither the name of Ac6 nor the names of its contributors +** may be used to endorse or promote products derived from this software +** without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ + +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x200; /* required amount of heap */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +FLASH (rx) : ORIGIN = 0x8000000 + LD_FLASH_OFFSET, LENGTH = LD_MAX_SIZE - LD_FLASH_OFFSET +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* The program code and other data goes into FLASH */ + .text ALIGN(4): + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} \ No newline at end of file diff --git a/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/variant.cpp b/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/variant.cpp new file mode 100644 index 000000000000..d603ad6ef1ab --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/variant.cpp @@ -0,0 +1,238 @@ +/* + Copyright (c) 2011 Arduino. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "pins_arduino.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// Digital PinName array +const PinName digitalPin[] = { + PA_0, // Digital pin 0 + PA_1, // Digital pin 1 + PA_2, // Digital pin 2 + PA_3, // Digital pin 3 + PA_4, // Digital pin 4 + PA_5, // Digital pin 5 + PA_6, // Digital pin 6 + PA_7, // Digital pin 7 + PA_8, // Digital pin 8 + PA_9, // Digital pin 9 + PA_10, // Digital pin 10 + PA_11, // Digital pin 11 + PA_12, // Digital pin 12 + PA_13, // Digital pin 13 + PA_14, // Digital pin 14 + PA_15, // Digital pin 15 + + PB_0, // Digital pin 16 + PB_1, // Digital pin 17 + PB_2, // Digital pin 18 + PB_3, // Digital pin 19 + PB_4, // Digital pin 20 + PB_5, // Digital pin 21 + PB_6, // Digital pin 22 + PB_7, // Digital pin 23 + PB_8, // Digital pin 24 + PB_9, // Digital pin 25 + PB_10, // Digital pin 26 + PB_12, // Digital pin 27 + PB_13, // Digital pin 28 + PB_14, // Digital pin 29 + PB_15, // Digital pin 30 + + PC_0, // Digital pin 31 + PC_1, // Digital pin 32 + PC_2, // Digital pin 33 + PC_3, // Digital pin 34 + PC_4, // Digital pin 35 + PC_5, // Digital pin 36 + PC_6, // Digital pin 37 + PC_7, // Digital pin 38 + PC_8, // Digital pin 39 + PC_9, // Digital pin 40 + PC_10, // Digital pin 41 + PC_11, // Digital pin 42 + PC_12, // Digital pin 43 + PC_13, // Digital pin 44 + PC_14, // Digital pin 45 + PC_15, // Digital pin 46 + + PD_2, // Digital pin 47 + + PH_0, // Digital pin 48, used by the external oscillator + PH_1 // Digital pin 49, used by the external oscillator +}; + +// Analog (Ax) pin number array +const uint32_t analogInputPin[] = { + 0, // A0, PA0 + 1, // A1, PA1 + 2, // A2, PA2 + 3, // A3, PA3 + 4, // A4, PA4 + 5, // A5, PA5 + 6, // A6, PA6 + 7, // A7, PA7 + 16, // A8, PB0 + 17, // A9, PB1 + 31, // A10, PC0 + 32, // A11, PC1 + 33, // A12, PC2 + 34, // A13, PC3 + 35, // A14, PC4 + 36 // A15, PC5 +}; + +#ifdef __cplusplus +} +#endif + +// ---------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ + +/******************************************************************************/ +/* PLL (clocked by HSE) used as System clock source */ +/******************************************************************************/ +static uint8_t SetSysClock_PLL_HSE(uint8_t bypass) +{ + RCC_OscInitTypeDef RCC_OscInitStruct; + RCC_ClkInitTypeDef RCC_ClkInitStruct; + + /* The voltage scaling allows optimizing the power consumption when the device is + clocked below the maximum system frequency, to update the voltage scaling value + regarding system frequency refer to product datasheet. */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2); + + // Enable HSE oscillator and activate PLL with HSE as source + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + if (bypass == 0) { + RCC_OscInitStruct.HSEState = RCC_HSE_ON; // External 8 MHz xtal on OSC_IN/OSC_OUT + } else { + RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS; // External 8 MHz clock on OSC_IN + } + + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = HSE_VALUE / 1000000L; // Expects an 8 MHz external clock by default. Redefine HSE_VALUE if not + RCC_OscInitStruct.PLL.PLLN = 336; // VCO output clock = 336 MHz (1 MHz * 336) + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; // PLLCLK = 84 MHz (336 MHz / 4) + RCC_OscInitStruct.PLL.PLLQ = 7; // USB clock = 48 MHz (336 MHz / 7) --> OK for USB + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { + return 0; // FAIL + } + + // Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 84 MHz + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // 84 MHz + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // 42 MHz + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // 84 MHz + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { + return 0; // FAIL + } + + /* Output clock on MCO1 pin(PA8) for debugging purpose */ + /* + if (bypass == 0) + HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_2); // 4 MHz + else + HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1); // 8 MHz + */ + + return 1; // OK +} + +/******************************************************************************/ +/* PLL (clocked by HSI) used as System clock source */ +/******************************************************************************/ +uint8_t SetSysClock_PLL_HSI(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct; + RCC_ClkInitTypeDef RCC_ClkInitStruct; + + /* The voltage scaling allows optimizing the power consumption when the device is + clocked below the maximum system frequency, to update the voltage scaling value + regarding system frequency refer to product datasheet. */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2); + + // Enable HSI oscillator and activate PLL with HSI as source + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.HSEState = RCC_HSE_OFF; + RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; + RCC_OscInitStruct.PLL.PLLM = 16; // VCO input clock = 1 MHz (16 MHz / 16) + RCC_OscInitStruct.PLL.PLLN = 336; // VCO output clock = 336 MHz (1 MHz * 336) + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; // PLLCLK = 84 MHz (336 MHz / 4) + RCC_OscInitStruct.PLL.PLLQ = 7; // USB clock = 48 MHz (336 MHz / 7) --> freq is ok but not precise enough + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { + return 0; // FAIL + } + + /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ + RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 84 MHz + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // 84 MHz + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // 42 MHz + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // 84 MHz + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { + return 0; // FAIL + } + + /* Output clock on MCO1 pin(PA8) for debugging purpose */ + //HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1); // 16 MHz + + return 1; // OK +} + +WEAK void SystemClock_Config(void) +{ + /* 1- If fail try to start with HSE and external xtal */ + if (SetSysClock_PLL_HSE(0) == 0) { + /* 2- Try to start with HSE and external clock */ + if (SetSysClock_PLL_HSE(1) == 0) { + /* 3- If fail start with HSI clock */ + if (SetSysClock_PLL_HSI() == 0) { + Error_Handler(); + } + } + } + /* Output clock on MCO2 pin(PC9) for debugging purpose */ + //HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_4); +} + +#ifdef __cplusplus +} +#endif diff --git a/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/variant.h new file mode 100644 index 000000000000..591571bf2c89 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RE/variant.h @@ -0,0 +1,151 @@ +/* + Copyright (c) 2011 Arduino. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _VARIANT_ARDUINO_STM32_ +#define _VARIANT_ARDUINO_STM32_ + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + + +// | DIGITAL | ANALOG | USART | TWI | SPI | SPECIAL | +// |---------|--------|-----------|----------|------------------------|-----------| +#define PA0 0 // | 0 | A0 | | | | | +#define PA1 1 // | 1 | A1 | | | | | +#define PA2 2 // | 2 | A2 | USART2_TX | | | | +#define PA3 3 // | 3 | A3 | USART2_RX | | | | +#define PA4 4 // | 4 | A4 | | | SPI1_SS, (SPI3_SS) | | +#define PA5 5 // | 5 | A5 | | | SPI1_SCK | | +#define PA6 6 // | 6 | A6 | | | SPI1_MISO | | +#define PA7 7 // | 7 | A7 | | | SPI1_MOSI | | +#define PA8 8 // | 8 | | | TWI3_SCL | | | +#define PA9 9 // | 9 | | USART1_TX | | | | +#define PA10 10 // | 10 | | USART1_RX | | | | +#define PA11 11 // | 11 | | USART6_TX | | | | +#define PA12 12 // | 12 | | USART6_RX | | | | +#define PA13 13 // | 13 | | | | | SWD_SWDIO | +#define PA14 14 // | 14 | | | | | SWD_SWCLK | +#define PA15 15 // | 15 | | | | SPI3_SS, (SPI1_SS) | | +// |---------|--------|-----------|----------|------------------------|-----------| +#define PB0 16 // | 16 | A8 | | | | | +#define PB1 17 // | 17 | A9 | | | | | +#define PB2 18 // | 18 | | | | | BOOT1 | +#define PB3 19 // | 19 | | | TWI2_SDA | SPI3_SCK, (SPI1_SCK) | | +#define PB4 20 // | 20 | | | TWI3_SDA | SPI3_MISO, (SPI1_MISO) | | +#define PB5 21 // | 21 | | | | SPI3_MOSI, (SPI1_MOSI) | | +#define PB6 22 // | 22 | | USART1_TX | TWI1_SCL | | | +#define PB7 23 // | 23 | | USART1_RX | TWI1_SDA | | | +#define PB8 24 // | 24 | | | TWI1_SCL | | | +#define PB9 25 // | 25 | | | TWI1_SDA | SPI2_SS | | +#define PB10 26 // | 26 | | | TWI2_SCL | SPI2_SCK | | +#define PB12 27 // | 27 | | | | SPI2_SS | | +#define PB13 28 // | 28 | | | | SPI2_SCK | | +#define PB14 29 // | 29 | | | | SPI2_MISO | | +#define PB15 30 // | 30 | | | | SPI2_MOSI | | +// |---------|--------|-----------|----------|------------------------|-----------| +#define PC0 31 // | 31 | A10 | | | | | +#define PC1 32 // | 32 | A11 | | | | | +#define PC2 33 // | 33 | A12 | | | SPI2_MISO | | +#define PC3 34 // | 34 | A13 | | | SPI2_MOSI | | +#define PC4 35 // | 35 | A14 | | | | | +#define PC5 36 // | 36 | A15 | | | | | +#define PC6 37 // | 37 | | USART6_TX | | | | +#define PC7 38 // | 38 | | USART6_RX | | | | +#define PC8 39 // | 39 | | | | | | +#define PC9 40 // | 40 | | | TWI3_SDA | | | +#define PC10 41 // | 41 | | | | SPI3_SCK | | +#define PC11 42 // | 42 | | | | SPI3_MISO | | +#define PC12 43 // | 43 | | | | SPI3_MOSI | | +#define PC13 44 // | 44 | | | | | | +#define PC14 45 // | 45 | | | | | OSC32_IN | +#define PC15 46 // | 46 | | | | | OSC32_OUT | +// |---------|--------|-----------|----------|------------------------|-----------| +#define PD2 47 // | 47 | | | | | | +// |---------|--------|-----------|----------|------------------------|-----------| +#define PH0 48 // | 48 | | | | | OSC_IN | +#define PH1 49 // | 49 | | | | | OSC_OUT | +// |---------|--------|-----------|----------|------------------------|-----------| + +// This must be a literal +#define NUM_DIGITAL_PINS 50 +#define NUM_ANALOG_INPUTS 16 + +// SPI definitions +#define PIN_SPI_SS PA4 +#define PIN_SPI_SS1 PA4 +#define PIN_SPI_MOSI PA7 +#define PIN_SPI_MISO PA6 +#define PIN_SPI_SCK PA5 + + +// Timer Definitions +#define TIMER_TONE TIM2 +#define TIMER_SERVO TIM11 +#define TIMER_SERIAL TIM5 + +// UART Definitions +//#define ENABLE_HWSERIAL1 done automatically by the #define SERIAL_UART_INSTANCE below +#define ENABLE_HWSERIAL2 + + +// Define here Serial instance number to map on Serial generic name (if not already used by SerialUSB) +#define SERIAL_UART_INSTANCE 1 //1 for Serial = Serial1 (USART1) + +// Default pin used for 'Serial' instance +// Mandatory for Firmata +#define PIN_SERIAL_RX PA10 +#define PIN_SERIAL_TX PA9 + +// Used when user instanciate a hardware Serial using its peripheral name. +// Example: HardwareSerial mySerial(USART3); +// will use PIN_SERIAL3_RX and PIN_SERIAL3_TX if defined. +#define PIN_SERIAL1_RX PA10 +#define PIN_SERIAL1_TX PA9 +#define PIN_SERIAL2_RX PA3 +#define PIN_SERIAL2_TX PA2 + +#ifdef __cplusplus +} // extern "C" +#endif +/*---------------------------------------------------------------------------- + * Arduino objects - C++ only + *----------------------------------------------------------------------------*/ + +#ifdef __cplusplus + // These serial port names are intended to allow libraries and architecture-neutral + // sketches to automatically default to the correct port name for a particular type + // of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, + // the first hardware serial port whose RX/TX pins are not dedicated to another use. + // + // SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor + // + // SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial + // + // SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library + // + // SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. + // + // SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX + // pins are NOT connected to anything by default. + #define SERIAL_PORT_MONITOR Serial + #define SERIAL_PORT_HARDWARE Serial1 + #define SERIAL_PORT_HARDWARE_OPEN Serial2 +#endif + +#endif /* _VARIANT_ARDUINO_STM32_ */ diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F103Rx/PeripheralPins.c b/buildroot/share/PlatformIO/variants/MARLIN_F103Rx/PeripheralPins.c old mode 100755 new mode 100644 diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F103Rx/PinNamesVar.h b/buildroot/share/PlatformIO/variants/MARLIN_F103Rx/PinNamesVar.h index d9e759f5d0cd..d9076b4dfb59 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_F103Rx/PinNamesVar.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_F103Rx/PinNamesVar.h @@ -27,4 +27,4 @@ #ifdef USBCON USB_DM = PA_11, USB_DP = PA_12, -#endif \ No newline at end of file +#endif diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F407ZE/PeripheralPins.c b/buildroot/share/PlatformIO/variants/MARLIN_F407ZE/PeripheralPins.c index d0905853a9a9..de796f4ef535 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_F407ZE/PeripheralPins.c +++ b/buildroot/share/PlatformIO/variants/MARLIN_F407ZE/PeripheralPins.c @@ -413,7 +413,7 @@ const PinMap PinMap_USB_OTG_HS[] = { */ {NC, NP, 0} }; - +#endif #ifdef HAL_SD_MODULE_ENABLED WEAK const PinMap PinMap_SD[] = { @@ -430,4 +430,3 @@ WEAK const PinMap PinMap_SD[] = { {NC, NP, 0} }; #endif -#endif diff --git a/buildroot/tests/DUE b/buildroot/tests/DUE index 4ed234ab3a0e..c43d30c76ed3 100755 --- a/buildroot/tests/DUE +++ b/buildroot/tests/DUE @@ -37,7 +37,7 @@ exec_test $1 $2 "RAMPS4DUE_EFB with ABL (Bilinear), ExtUI, S-Curve, many options # restore_configs opt_set MOTHERBOARD BOARD_RADDS Z_DRIVER_TYPE A4988 Z2_DRIVER_TYPE A4988 Z3_DRIVER_TYPE A4988 -opt_enable USE_XMAX_PLUG USE_YMAX_PLUG ENDSTOPPULLUPS BLTOUCH AUTO_BED_LEVELING_BILINEAR \ +opt_enable ENDSTOPPULLUPS BLTOUCH AUTO_BED_LEVELING_BILINEAR \ Z_STEPPER_AUTO_ALIGN Z_STEPPER_ALIGN_STEPPER_XY Z_SAFE_HOMING pins_set ramps/RAMPS X_MAX_PIN -1 pins_set ramps/RAMPS Y_MAX_PIN -1 diff --git a/buildroot/tests/FYSETC_F6 b/buildroot/tests/FYSETC_F6 index 0c5f25a15517..dbfb76717189 100755 --- a/buildroot/tests/FYSETC_F6 +++ b/buildroot/tests/FYSETC_F6 @@ -43,7 +43,7 @@ opt_set MOTHERBOARD BOARD_FYSETC_F6_13 \ opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER \ MARLIN_BRICKOUT MARLIN_INVADERS MARLIN_SNAKE \ MONITOR_DRIVER_STATUS STEALTHCHOP_XY STEALTHCHOP_Z STEALTHCHOP_E HYBRID_THRESHOLD \ - USE_ZMIN_PLUG SENSORLESS_HOMING TMC_DEBUG M114_DETAIL + SENSORLESS_HOMING TMC_DEBUG M114_DETAIL exec_test $1 $2 "RAMPS | Mixed TMC | Sensorless | RRDFGSC | Games" "$3" # @@ -62,7 +62,7 @@ opt_set MOTHERBOARD BOARD_FYSETC_F6_13 \ X_MAX_ENDSTOP_HIT_STATE HIGH \ X_DRIVER_TYPE TMC2209 Y_DRIVER_TYPE TMC2130 Z_DRIVER_TYPE TMC2130_STANDALONE E0_DRIVER_TYPE TMC2660 \ X_HARDWARE_SERIAL Serial2 -opt_enable USE_ZMIN_PLUG FIX_MOUNTED_PROBE AUTO_BED_LEVELING_BILINEAR PAUSE_BEFORE_DEPLOY_STOW \ +opt_enable FIX_MOUNTED_PROBE AUTO_BED_LEVELING_BILINEAR PAUSE_BEFORE_DEPLOY_STOW \ FYSETC_242_OLED_12864 EEPROM_SETTINGS EEPROM_CHITCHAT M114_DETAIL Z_SAFE_HOMING \ STEALTHCHOP_XY STEALTHCHOP_Z STEALTHCHOP_E HYBRID_THRESHOLD SENSORLESS_HOMING EDGE_STEPPING exec_test $1 $2 "FYSETC_F6 | SCARA | Mixed TMC | EEPROM" "$3" diff --git a/buildroot/tests/LPC1769 b/buildroot/tests/LPC1769 index cf2838bdd5d6..733201e0090d 100755 --- a/buildroot/tests/LPC1769 +++ b/buildroot/tests/LPC1769 @@ -29,7 +29,7 @@ exec_test $1 $2 "Smoothieboard with TFTGLCD_PANEL_SPI and many features" "$3" #restore_configs #opt_set MOTHERBOARD BOARD_AZTEEG_X5_MINI_WIFI -#opt_enable COREYX USE_XMAX_PLUG DAC_MOTOR_CURRENT_DEFAULT \ +#opt_enable COREYX DAC_MOTOR_CURRENT_DEFAULT \ # REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT BABYSTEPPING \ # AUTO_BED_LEVELING_UBL RESTORE_LEVELING_AFTER_G28 EEPROM_SETTINGS \ # FILAMENT_LCD_DISPLAY FILAMENT_WIDTH_SENSOR FAN_SOFT_PWM \ @@ -56,7 +56,7 @@ opt_set MOTHERBOARD BOARD_COHESION3D_REMIX \ opt_enable AUTO_BED_LEVELING_BILINEAR EEPROM_SETTINGS EEPROM_CHITCHAT MECHANICAL_GANTRY_CALIBRATION \ TMC_USE_SW_SPI MONITOR_DRIVER_STATUS STEALTHCHOP_XY STEALTHCHOP_Z HYBRID_THRESHOLD \ SENSORLESS_PROBING Z_SAFE_HOMING X_STALL_SENSITIVITY Y_STALL_SENSITIVITY Z_STALL_SENSITIVITY TMC_DEBUG \ - AXIS4_ROTATES I_MIN_POS I_MAX_POS I_HOME_DIR I_ENABLE_ON USE_IMIN_PLUG INVERT_I_DIR \ + AXIS4_ROTATES I_MIN_POS I_MAX_POS I_HOME_DIR I_ENABLE_ON INVERT_I_DIR \ EXPERIMENTAL_I2CBUS opt_disable PSU_CONTROL Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN exec_test $1 $2 "Cohesion3D Remix DELTA + ABL Bilinear + EEPROM + SENSORLESS_PROBING + I Axis" "$3" diff --git a/buildroot/tests/STM32F103RC_btt_USB b/buildroot/tests/STM32F103RC_btt_USB index 8381de0ea6e4..3981466c4652 100755 --- a/buildroot/tests/STM32F103RC_btt_USB +++ b/buildroot/tests/STM32F103RC_btt_USB @@ -10,8 +10,8 @@ set -e # Build with the default configurations # restore_configs -opt_set MOTHERBOARD BOARD_BTT_SKR_MINI_V1_1 SERIAL_PORT 1 SERIAL_PORT_2 -1 -exec_test $1 $2 "BigTreeTech SKR Mini v1.1 - Basic Configuration" "$3" +opt_set MOTHERBOARD BOARD_BTT_SKR_MINI_V1_1 SERIAL_PORT 1 SERIAL_PORT_2 -1 TEMP_SENSOR_SOC 1 +exec_test $1 $2 "BigTreeTech SKR Mini v1.1 - SOC Temperature" "$3" # clean up restore_configs diff --git a/buildroot/tests/STM32F103RC_fysetc b/buildroot/tests/STM32F103RC_fysetc new file mode 100755 index 000000000000..93b0fedf3d82 --- /dev/null +++ b/buildroot/tests/STM32F103RC_fysetc @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +# +# Build tests for STM32F103RC_fysetc +# + +# exit on first failure +set -e + +# +# Build with the default configurations +# +use_example_configs "Creality/Ender-3/FYSETC Cheetah 1.2/BLTouch" +exec_test $1 $2 "Ender-3 with Cheetah 1.2 | BLTouch" "$3" + +# clean up +restore_configs diff --git a/buildroot/tests/STM32F103RC_fysetc_maple b/buildroot/tests/STM32F103RC_fysetc_maple index 0e78c731888c..09dba7ef61fc 100755 --- a/buildroot/tests/STM32F103RC_fysetc_maple +++ b/buildroot/tests/STM32F103RC_fysetc_maple @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Build tests for STM32F103RC FYSETC +# Build tests for STM32F103RC_fysetc_maple # # exit on first failure @@ -10,7 +10,7 @@ set -e # Build with the default configurations # use_example_configs "Creality/Ender-3/FYSETC Cheetah 1.2/base" -exec_test $1 $2 "Cheetah 1.2 Configuration" "$3" +exec_test $1 $2 "Maple build of Cheetah 1.2 Configuration" "$3" # clean up restore_configs diff --git a/buildroot/tests/STM32F103RE_creality b/buildroot/tests/STM32F103RE_creality index d407dc430153..834580fac8e3 100755 --- a/buildroot/tests/STM32F103RE_creality +++ b/buildroot/tests/STM32F103RE_creality @@ -11,12 +11,17 @@ set -e # use_example_configs "Creality/Ender-3 V2/CrealityV422/CrealityUI" opt_enable MARLIN_DEV_MODE BUFFER_MONITORING BLTOUCH AUTO_BED_LEVELING_BILINEAR Z_SAFE_HOMING -exec_test $1 $2 "Ender-3 v2 with CrealityUI" "$3" +exec_test $1 $2 "Ender-3 v2 - CrealityUI" "$3" use_example_configs "Creality/Ender-3 V2/CrealityV422/CrealityUI" opt_disable DWIN_CREALITY_LCD opt_enable DWIN_CREALITY_LCD_JYERSUI AUTO_BED_LEVELING_BILINEAR PROBE_MANUALLY -exec_test $1 $2 "Ender-3 v2 with JyersUI" "$3" +exec_test $1 $2 "Ender-3 v2 - JyersUI (ABL Bilinear/Manual)" "$3" + +use_example_configs "Creality/Ender-3 V2/CrealityV422/CrealityUI" +opt_disable DWIN_CREALITY_LCD PIDTEMP +opt_enable DWIN_MARLINUI_LANDSCAPE LCD_ENDSTOP_TEST AUTO_BED_LEVELING_UBL BLTOUCH Z_SAFE_HOMING MPCTEMP MPC_AUTOTUNE +exec_test $1 $2 "Ender-3 v2 - MarlinUI (UBL+BLTOUCH, MPCTEMP, LCD_ENDSTOP_TEST)" "$3" use_example_configs "Creality/Ender-3 S1/STM32F1" opt_disable DWIN_CREALITY_LCD Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN AUTO_BED_LEVELING_BILINEAR CANCEL_OBJECTS FWRETRACT @@ -25,11 +30,7 @@ opt_enable DWIN_LCD_PROUI INDIVIDUAL_AXIS_HOMING_SUBMENU SET_PROGRESS_MANUALLY S BLTOUCH Z_SAFE_HOMING AUTO_BED_LEVELING_UBL MESH_EDIT_MENU \ LIMITED_MAX_FR_EDITING LIMITED_MAX_ACCEL_EDITING LIMITED_JERK_EDITING BAUD_RATE_GCODE opt_set PREHEAT_3_LABEL '"CUSTOM"' PREHEAT_3_TEMP_HOTEND 240 PREHEAT_3_TEMP_BED 60 PREHEAT_3_FAN_SPEED 128 -exec_test $1 $2 "Ender-3 S1 with ProUI (PIDTEMP)" "$3" - -opt_disable PIDTEMP -opt_enable MPCTEMP MPC_AUTOTUNE -exec_test $1 $2 "Ender-3 S1 with ProUI (MPCTEMP)" "$3" +exec_test $1 $2 "Ender-3 S1 - ProUI (PIDTEMP)" "$3" restore_configs opt_set MOTHERBOARD BOARD_CREALITY_V452 SERIAL_PORT 1 diff --git a/buildroot/tests/mega1280 b/buildroot/tests/mega1280 index d948623f4872..53016e840645 100755 --- a/buildroot/tests/mega1280 +++ b/buildroot/tests/mega1280 @@ -40,7 +40,7 @@ restore_configs opt_set MOTHERBOARD BOARD_ZRIB_V52 \ LCD_LANGUAGE pt REPRAPWORLD_KEYPAD_MOVE_STEP 10.0 \ EXTRUDERS 2 TEMP_SENSOR_1 1 X2_DRIVER_TYPE A4988 -opt_enable USE_XMAX_PLUG DUAL_X_CARRIAGE REPRAPWORLD_KEYPAD +opt_enable DUAL_X_CARRIAGE REPRAPWORLD_KEYPAD exec_test $1 $2 "ZRIB_V52 | DUAL_X_CARRIAGE" "$3" # diff --git a/buildroot/tests/rambo b/buildroot/tests/rambo index ca6aae471f09..475b2daf87bf 100755 --- a/buildroot/tests/rambo +++ b/buildroot/tests/rambo @@ -17,7 +17,7 @@ opt_set MOTHERBOARD BOARD_RAMBO \ GRID_MAX_POINTS_X 16 AUTO_POWER_E_TEMP 80 \ FANMUX0_PIN 53 FIL_MOTION1_PIN 45 opt_disable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN USE_WATCHDOG -opt_enable USE_ZMAX_PLUG REPRAP_DISCOUNT_SMART_CONTROLLER LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TEST \ +opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TEST \ FIX_MOUNTED_PROBE CODEPENDENT_XY_HOMING PIDTEMPBED PTC_PROBE PTC_BED \ PREHEAT_BEFORE_PROBING PROBING_HEATERS_OFF PROBING_FANS_OFF PROBING_STEPPERS_OFF WAIT_FOR_BED_HEATER \ EEPROM_SETTINGS SDSUPPORT SD_REPRINT_LAST_SELECTED_FILE BINARY_FILE_TRANSFER \ @@ -53,8 +53,7 @@ opt_set MOTHERBOARD BOARD_RAMBO \ AXIS_RELATIVE_MODES '{ false, false, false }' \ BED_TRAMMING_LEVELING_ORDER '{ LF, RF }' \ X2_DRIVER_TYPE A4988 Y2_DRIVER_TYPE A4988 -opt_enable USE_XMAX_PLUG USE_YMAX_PLUG USE_ZMAX_PLUG \ - REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER REVERSE_ENCODER_DIRECTION SDSUPPORT EEPROM_SETTINGS \ +opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER REVERSE_ENCODER_DIRECTION SDSUPPORT EEPROM_SETTINGS \ S_CURVE_ACCELERATION X_DUAL_ENDSTOPS Y_DUAL_ENDSTOPS \ ADAPTIVE_STEP_SMOOTHING CNC_COORDINATE_SYSTEMS GCODE_MOTION_MODES \ LCD_BED_TRAMMING BED_TRAMMING_INCLUDE_CENTER @@ -98,8 +97,8 @@ opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CO NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE \ ADVANCED_PAUSE_FEATURE PARK_HEAD_ON_PAUSE ADVANCED_PAUSE_CONTINUOUS_PURGE FILAMENT_LOAD_UNLOAD_GCODES \ PRINTCOUNTER SERVICE_NAME_1 SERVICE_INTERVAL_1 M114_DETAIL -opt_add M100_FREE_MEMORY_DUMPER -opt_add M100_FREE_MEMORY_CORRUPTOR +opt_disable NOZZLE_CLEAN_PATTERN_CIRCLE +opt_add M100_FREE_MEMORY_DUMPER M100_FREE_MEMORY_CORRUPTOR exec_test $1 $2 "MINIRAMBO | RRDGFSC | ABL Linear Manual | M100 | PWM_MOTOR_CURRENT | M600..." "$3" # @@ -115,8 +114,8 @@ opt_set MOTHERBOARD BOARD_RAMBO \ CONTROLLER_FAN_PIN X_MAX_PIN FILWIDTH_PIN 5 \ FAN_MIN_PWM 50 FAN_KICKSTART_TIME 100 \ XY_FREQUENCY_LIMIT 15 -opt_enable COREYX USE_XMAX_PLUG MIXING_EXTRUDER GRADIENT_MIX \ - BABYSTEPPING BABYSTEP_DISPLAY_TOTAL FILAMENT_LCD_DISPLAY \ +opt_enable COREYX MIXING_EXTRUDER GRADIENT_MIX \ + BABYSTEPPING BABYSTEP_XY BABYSTEP_DISPLAY_TOTAL FILAMENT_LCD_DISPLAY \ REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER MENU_ADDAUTOSTART SDSUPPORT SDCARD_SORT_ALPHA \ ENDSTOP_NOISE_THRESHOLD FAN_SOFT_PWM \ FIX_MOUNTED_PROBE PROBING_ESTEPPERS_OFF PROBE_OFFSET_WIZARD \ diff --git a/buildroot/tests/teensy31 b/buildroot/tests/teensy31 index 7465a67fdde1..5f5b84e0c4d1 100755 --- a/buildroot/tests/teensy31 +++ b/buildroot/tests/teensy31 @@ -15,7 +15,6 @@ exec_test $1 $2 "Teensy3.1 with default config" "$3" # restore_configs opt_set MOTHERBOARD BOARD_TEENSY31_32 X_HOME_DIR 0 Y_HOME_DIR 0 Z_HOME_DIR 0 -opt_disable USE_XMIN_PLUG USE_YMIN_PLUG USE_ZMIN_PLUG exec_test $1 $2 "Teensy3.1 with Zero Endstops" "$3" # diff --git a/buildroot/tests/teensy35 b/buildroot/tests/teensy35 index fd6ae86387f7..38da97c25b11 100755 --- a/buildroot/tests/teensy35 +++ b/buildroot/tests/teensy35 @@ -87,7 +87,7 @@ opt_set MOTHERBOARD BOARD_TEENSY35_36 \ X_DRIVER_TYPE TMC5160 Y_DRIVER_TYPE TMC5160 \ X_MIN_ENDSTOP_HIT_STATE LOW Y_MIN_ENDSTOP_HIT_STATE LOW \ X_CS_PIN 46 Y_CS_PIN 47 -opt_enable COREXY USE_ZMIN_PLUG MONITOR_DRIVER_STATUS SENSORLESS_HOMING +opt_enable COREXY MONITOR_DRIVER_STATUS SENSORLESS_HOMING exec_test $1 $2 "Teensy 3.5/3.6 COREXY" "$3" # @@ -103,7 +103,7 @@ exec_test $1 $2 "Teensy 3.5/3.6 COREXZ | BACKLASH" "$3" # restore_configs opt_set MOTHERBOARD BOARD_TEENSY35_36 Z_DRIVER_TYPE A4988 Z2_DRIVER_TYPE A4988 Z2_MIN_PIN 2 -opt_enable Z_MULTI_ENDSTOPS USE_XMAX_PLUG +opt_enable Z_MULTI_ENDSTOPS pins_set ramps/RAMPS X_MAX_PIN -1 exec_test $1 $2 "Dual Z with Dual Z endstops" "$3" diff --git a/buildroot/tests/teensy41 b/buildroot/tests/teensy41 index 11b5e340258e..e6a769c28273 100755 --- a/buildroot/tests/teensy41 +++ b/buildroot/tests/teensy41 @@ -90,7 +90,7 @@ opt_set MOTHERBOARD BOARD_TEENSY41 \ X_DRIVER_TYPE TMC5160 Y_DRIVER_TYPE TMC5160 \ X_MIN_ENDSTOP_HIT_STATE LOW Y_MIN_ENDSTOP_HIT_STATE LOW \ X_CS_PIN 46 Y_CS_PIN 47 -opt_enable COREXY USE_ZMIN_PLUG MONITOR_DRIVER_STATUS SENSORLESS_HOMING +opt_enable COREXY MONITOR_DRIVER_STATUS SENSORLESS_HOMING exec_test $1 $2 "Teensy 4.0/4.1 COREXY" "$3" # @@ -106,7 +106,7 @@ exec_test $1 $2 "Teensy 4.0/4.1 COREXZ" "$3" # restore_configs opt_set MOTHERBOARD BOARD_TEENSY41 Z_DRIVER_TYPE A4988 Z2_DRIVER_TYPE A4988 Z2_MIN_PIN 2 -opt_enable Z_MULTI_ENDSTOPS USE_XMAX_PLUG +opt_enable Z_MULTI_ENDSTOPS pins_set ramps/RAMPS X_MAX_PIN -1 exec_test $1 $2 "Dual Z with Dual Z endstops" "$3" diff --git a/ini/features.ini b/ini/features.ini index 3c5eb1adecba..c8a3cf2908a2 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -9,6 +9,8 @@ # # ################################# +# The order of the features matters for source-filter resolution inside of common-dependencies.py. + [features] YHCB2004 = red-scorp/LiquidCrystal_AIP31068@^1.0.4, red-scorp/SoftSPIB@^1.1.1 HAS_TFT_LVGL_UI = lvgl=https://github.com/makerbase-mks/LVGL-6.1.1-MKS/archive/master.zip @@ -23,6 +25,7 @@ HAS_TRINAMIC_CONFIG = TMCStepper@~0.7.3 HAS_T(RINAMIC_CONFIG|MC_SPI) = src_filter=+ HAS_STEALTHCHOP = src_filter=+ SR_LCD_3W_NL = SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip +HAS_MOTOR_CURRENT_(I2C|DAC|SPI|PWM) = src_filter=+ HAS_MOTOR_CURRENT_I2C = SlowSoftI2CMaster src_filter=+ HAS_TMC26X = TMC26XStepper=https://github.com/MarlinFirmware/TMC26XStepper/archive/master.zip @@ -39,9 +42,12 @@ HAS_LCDPRINT = src_filter=+ HAS_MARLINUI_HD44780 = src_filter=+ HAS_MARLINUI_U8GLIB = marlinfirmware/U8glib-HAL@~0.5.2 src_filter=+ -HAS_(FSMC|SPI|LTDC)_TFT = src_filter=+ + + +HAS_(FSMC|SPI|LTDC)_TFT = src_filter=+ +HAS_LTDC_TFT = src_filter=+ HAS_FSMC_TFT = src_filter=+ + -HAS_SPI_TFT = src_filter=+ + +HAS_SPI_TFT = src_filter=+ + + +HAS_TFT_XPT2046 = src_filter=+ + + +TFT_TOUCH_DEVICE_GT911 = src_filter=+ I2C_EEPROM = src_filter=+ SOFT_I2C_EEPROM = SlowSoftI2CMaster, SlowSoftWire=https://github.com/felias-fogg/SlowSoftWire/archive/master.zip SPI_EEPROM = src_filter=+ @@ -50,10 +56,13 @@ DWIN_CREALITY_LCD = src_filter=+ DWIN_LCD_PROUI = src_filter=+ DWIN_CREALITY_LCD_JYERSUI = src_filter=+ IS_DWIN_MARLINUI = src_filter=+ -HAS_GRAPHICAL_TFT = src_filter=+ +HAS_GRAPHICAL_TFT = src_filter=+ - +TFT_FONT_HELVETICA = src_filter=+ +TFT_FONT_NOTOSANS = src_filter=+ +TFT_FONT_UNIFONT = src_filter=+ IS_TFTGLCD_PANEL = src_filter=+ HAS_TOUCH_BUTTONS = src_filter=+ -HAS_MARLINUI_MENU = src_filter=+ +HAS_MARLINUI_MENU = src_filter=+ - HAS_GAMES = src_filter=+ MARLIN_BRICKOUT = src_filter=+ MARLIN_INVADERS = src_filter=+ @@ -67,7 +76,7 @@ HAS_MENU_DELTA_CALIBRATE = src_filter=+ LCD_INFO_MENU = src_filter=+ HAS_MENU_JOB_RECOVERY = src_filter=+ -HAS_MULTI_LANGUAGE = src_filter=+ + +HAS_MENU_MULTI_LANGUAGE = src_filter=+ HAS_MENU_LED = src_filter=+ HAS_MENU_MEDIA = src_filter=+ HAS_MENU_MIXER = src_filter=+ @@ -80,6 +89,7 @@ HAS_MENU_TMC = src_filter=+ HAS_MENU_TOUCH_SCREEN = src_filter=+ HAS_MENU_TRAMMING_WIZARD = src_filter=+ HAS_MENU_UBL = src_filter=+ +EXTENSIBLE_UI = src_filter=+ ANYCUBIC_LCD_(CHIRON|VYPER) = src_filter=+ ANYCUBIC_LCD_CHIRON = src_filter=+ ANYCUBIC_LCD_VYPER = src_filter=+ @@ -171,7 +181,6 @@ HAS_EXTRA_ENDSTOPS = src_filter=+ DIRECT_PIN_CONTROL = src_filter=+ + PINS_DEBUGGING = src_filter=+ -NO_VOLUMETRICS = src_filter=- HAS_MULTI_EXTRUDER = src_filter=+ HAS_HOTEND_OFFSET = src_filter=+ EDITABLE_SERVO_ANGLES = src_filter=+ @@ -179,6 +188,7 @@ PIDTEMP = src_filter=+ PREVENT_COLD_EXTRUSION = src_filter=+ PIDTEMPBED = src_filter=+ HAS_USER_THERMISTORS = src_filter=+ +PIDTEMPCHAMBER = src_filter=+ SD_ABORT_ON_ENDSTOP_HIT = src_filter=+ BAUD_RATE_GCODE = src_filter=+ HAS_SMART_EFF_MOD = src_filter=+ @@ -187,13 +197,16 @@ AIR_EVACUATION = src_filter=+ SERVO_DETACH_GCODE = src_filter=+ HAS_DUPLICATION_MODE = src_filter=+ -FT_MOTION = src_filter=+ + +SPI_FLASH_BACKUP = src_filter=+ +PLATFORM_M997_SUPPORT = src_filter=+ +FT_MOTION = src_filter=+ + LIN_ADVANCE = src_filter=+ PHOTO_GCODE = src_filter=+ CONTROLLER_FAN_EDITABLE = src_filter=+ HAS_ZV_SHAPING = src_filter=+ GCODE_MACROS = src_filter=+ GRADIENT_MIX = src_filter=+ +OTA_FIRMWARE_UPDATE = src_filter=+ HAS_SAVED_POSITIONS = src_filter=+ + PARK_HEAD_ON_PAUSE = src_filter=+ FILAMENT_LOAD_UNLOAD_GCODES = src_filter=+ @@ -213,6 +226,7 @@ HAS_LCD_CONTRAST = src_filter=+ HAS_GCODE_M255 = src_filter=+ HAS_LCD_BRIGHTNESS = src_filter=+ HAS_SOUND = src_filter=+ +HAS_MULTI_LANGUAGE = src_filter=+ TOUCH_SCREEN_CALIBRATION = src_filter=+ ARC_SUPPORT = src_filter=+ GCODE_MOTION_MODES = src_filter=+ @@ -220,13 +234,18 @@ BABYSTEPPING = src_filter=+ Z_PROBE_SLED = src_filter=+ G38_PROBE_TARGET = src_filter=+ MAGNETIC_PARKING_EXTRUDER = src_filter=+ -SDSUPPORT = src_filter=+ + + + + + + +HAS_MEDIA = src_filter=+ + + + + + + HAS_MEDIA_SUBCALLS = src_filter=+ GCODE_REPEAT_MARKERS = src_filter=+ + -HAS_EXTRUDERS = src_filter=+ + + -HAS_TEMP_PROBE = src_filter=+ +HAS_EXTRUDERS = src_filter=+ + +HAS_HOTEND = src_filter=+ +HAS_FAN = src_filter=+ +HAS_HEATED_BED = src_filter=+ +HAS_HEATED_CHAMBER = src_filter=+ HAS_COOLER = src_filter=+ AUTO_REPORT_TEMPERATURES = src_filter=+ +HAS_TEMP_PROBE = src_filter=+ +HAS_PID_HEATING = src_filter=+ MPCTEMP = src_filter=+ INCH_MODE_SUPPORT = src_filter=+ TEMPERATURE_UNITS_SUPPORT = src_filter=+ @@ -248,3 +267,4 @@ HAS_MICROSTEPS = src_filter=+ + +build_src_filter = ${common.default_src_filter} + - + lib_deps = ${common.lib_deps} Servo custom_marlin.USES_LIQUIDCRYSTAL = arduino-libraries/LiquidCrystal@~1.0.7 custom_marlin.NEOPIXEL_LED = Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/1.5.0.zip -build_flags = ${common.build_flags} -DU8G_HAL_LINKS -IMarlin/src/HAL/LPC1768/include -IMarlin/src/HAL/LPC1768/u8g +build_flags = ${common.build_flags} -DU8G_HAL_LINKS -DPLATFORM_M997_SUPPORT + -IMarlin/src/HAL/LPC1768/include -IMarlin/src/HAL/LPC1768/u8g # debug options for backtrace #-funwind-tables #-mpoke-function-name diff --git a/ini/samd51.ini b/ini/samd51.ini index d7d9b3a4211c..70bda9ca52d0 100644 --- a/ini/samd51.ini +++ b/ini/samd51.ini @@ -22,5 +22,5 @@ lib_deps = ${common.lib_deps} SoftwareSerialM extra_scripts = ${common.extra_scripts} pre:buildroot/share/PlatformIO/scripts/SAMD51_grandcentral_m4.py -custom_marlin.SDSUPPORT = SdFat - Adafruit Fork, Adafruit SPIFlash +custom_marlin.HAS_MEDIA = SdFat - Adafruit Fork, Adafruit SPIFlash debug_tool = jlink diff --git a/ini/stm32-common.ini b/ini/stm32-common.ini index c8f28cd0e314..464d8f475744 100644 --- a/ini/stm32-common.ini +++ b/ini/stm32-common.ini @@ -12,13 +12,11 @@ [common_stm32] platform = ststm32@~12.1 board_build.core = stm32 -build_flags = ${common.build_flags} - -std=gnu++14 -DHAL_STM32 - -DUSBCON -DUSBD_USE_CDC - -DTIM_IRQ_PRIO=13 - -DADC_RESOLUTION=12 +build_flags = ${common.build_flags} -std=gnu++14 + -DHAL_STM32 -DPLATFORM_M997_SUPPORT + -DUSBCON -DUSBD_USE_CDC -DTIM_IRQ_PRIO=13 -DADC_RESOLUTION=12 build_unflags = -std=gnu++11 -build_src_filter = ${common.default_src_filter} + + +build_src_filter = ${common.default_src_filter} + - + extra_scripts = ${common.extra_scripts} pre:buildroot/share/PlatformIO/scripts/stm32_serialbuffer.py diff --git a/ini/stm32f0.ini b/ini/stm32f0.ini index d62ac3acf54f..d23ee2a6038e 100644 --- a/ini/stm32f0.ini +++ b/ini/stm32f0.ini @@ -48,4 +48,4 @@ board = malyanm300_f070cb build_flags = ${common_stm32.build_flags} -DHAL_PCD_MODULE_ENABLED -DDISABLE_GENERIC_SERIALUSB -DHAL_UART_MODULE_ENABLED -build_src_filter = ${common.default_src_filter} + +build_src_filter = ${common.default_src_filter} + - diff --git a/ini/stm32f1-maple.ini b/ini/stm32f1-maple.ini index d361a0d40a98..3560c1fd2a87 100644 --- a/ini/stm32f1-maple.ini +++ b/ini/stm32f1-maple.ini @@ -26,9 +26,9 @@ platform = ststm32@~12.1 board_build.core = maple build_flags = !python Marlin/src/HAL/STM32F1/build_flags.py - ${common.build_flags} -DARDUINO_ARCH_STM32 -DMAPLE_STM32F1 + ${common.build_flags} -DARDUINO_ARCH_STM32 -DMAPLE_STM32F1 -DPLATFORM_M997_SUPPORT build_unflags = -std=gnu11 -std=gnu++11 -build_src_filter = ${common.default_src_filter} + +build_src_filter = ${common.default_src_filter} + - lib_ignore = SPI, FreeRTOS701, FreeRTOS821 lib_deps = ${common.lib_deps} SoftwareSerialM diff --git a/ini/stm32f1.ini b/ini/stm32f1.ini index 212519fb2784..9e7fa1f4321a 100644 --- a/ini/stm32f1.ini +++ b/ini/stm32f1.ini @@ -253,7 +253,7 @@ board = malyanm200_f103cb build_flags = ${common_stm32.build_flags} -DHAL_PCD_MODULE_ENABLED -DDISABLE_GENERIC_SERIALUSB -DHAL_UART_MODULE_ENABLED -build_src_filter = ${common.default_src_filter} + +build_src_filter = ${common.default_src_filter} + - # # FLYmaker FLY Mini (STM32F103RCT6) @@ -371,6 +371,7 @@ extra_scripts = ${stm32_variant.extra_scripts} extends = common_STM32F103RC_variant extra_scripts = ${common_STM32F103RC_variant.extra_scripts} buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py +build_flags = ${common_STM32F103RC_variant.build_flags} -DTIMER_SERVO=TIM1 lib_ldf_mode = chain debug_tool = stlink upload_protocol = serial diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index 7060f95db7a5..f30b5e539d24 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -680,14 +680,38 @@ extra_scripts = ${stm32_variant.extra_scripts} monitor_speed = 115200 [env:STM32F401RC_creality_jlink] -extends = env:STM32F401RC_creality -debug_tool = jlink -upload_protocol = jlink +extends = env:STM32F401RC_creality +debug_tool = jlink +upload_protocol = jlink [env:STM32F401RC_creality_stlink] -extends = env:STM32F401RC_creality -debug_tool = stlink -upload_protocol = stlink +extends = env:STM32F401RC_creality +debug_tool = stlink +upload_protocol = stlink + +# +# Ender-5 S1 STM32F401RE_creality (CR4NS200141C13 with STM32F401RET6) +# +[env:STM32F401RE_creality] +extends = stm32_variant +board = marlin_CREALITY_STM32F401RE +board_build.offset = 0x10000 +board_upload.offset_address = 0x08010000 +build_flags = ${stm32_variant.build_flags} -DSTM32F401xE -DSTM32F4 -DSTM32F4_UPDATE_FOLDER +build_unflags = ${stm32_variant.build_unflags} -DUSBCON -DUSBD_USE_CDC +extra_scripts = ${stm32_variant.extra_scripts} + pre:buildroot/share/PlatformIO/scripts/random-bin.py +monitor_speed = 115200 + +[env:STM32F401RE_creality_jlink] +extends = env:STM32F401RE_creality +debug_tool = jlink +upload_protocol = jlink + +[env:STM32F401RE_creality_stlink] +extends = env:STM32F401RC_creality +debug_tool = stlink +upload_protocol = stlink # # BigTree SKR mini E3 V3.0.1 (STM32F401RCT6 ARM Cortex-M4) diff --git a/platformio.ini b/platformio.ini index 28e71bf33bb6..53b0c78a87a6 100644 --- a/platformio.ini +++ b/platformio.ini @@ -36,218 +36,79 @@ extra_scripts = pre:buildroot/share/PlatformIO/scripts/preflight-checks.py post:buildroot/share/PlatformIO/scripts/common-dependencies-post.py lib_deps = -default_src_filter = + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +default_src_filter = + - - + ; LCDs and Controllers + - - - - - + - - - - + - + ; Marlin HAL + - + + + - + - + - + - + ; Features and G-Codes + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + ; Library Code + - + - - + - + - + - + - + ; Modules + - + - + ; Media Support + - + ; + ; Minimal Requirements + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # # Default values apply to all 'env:' prefixed environments