From 2bc711ce58cfc5594b19593935d1c62f8261fa24 Mon Sep 17 00:00:00 2001
From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com>
Date: Tue, 7 Feb 2023 22:39:09 -0800
Subject: [PATCH 01/97] =?UTF-8?q?=E2=9C=A8=20BigTreeTech=20Manta=20M4P,=20?=
=?UTF-8?q?M5P,=20M8P=20V1.0=20/=201.1,=20E3=20EZ=20(#25001)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/core/boards.h | 302 +++++------
Marlin/src/pins/pins.h | 10 +
Marlin/src/pins/stm32g0/env_validate.h | 26 +
Marlin/src/pins/stm32g0/pins_BTT_EBB42_V1_1.h | 2 +
.../pins/stm32g0/pins_BTT_MANTA_E3_EZ_V1_0.h | 340 +++++++++++++
.../pins/stm32g0/pins_BTT_MANTA_M4P_V1_0.h | 313 ++++++++++++
.../pins/stm32g0/pins_BTT_MANTA_M5P_V1_0.h | 341 +++++++++++++
.../pins/stm32g0/pins_BTT_MANTA_M8P_V1_0.h | 79 +++
.../pins/stm32g0/pins_BTT_MANTA_M8P_V1_1.h | 78 +++
.../pins/stm32g0/pins_BTT_MANTA_M8P_common.h | 397 +++++++++++++++
.../pins/stm32g0/pins_BTT_SKR_MINI_E3_V3_0.h | 2 +
.../PlatformIO/boards/marlin_STM32G0B1VE.json | 47 ++
.../variants/MARLIN_G0B1RE/PeripheralPins.c | 2 +
.../variant_MARLIN_STM32G0B1RE.cpp | 9 +-
.../variant_MARLIN_STM32G0B1RE.h | 12 +
.../variants/MARLIN_G0B1VE/PeripheralPins.c | 480 ++++++++++++++++++
.../variants/MARLIN_G0B1VE/PinNamesVar.h | 91 ++++
.../variants/MARLIN_G0B1VE/ldscript.ld | 177 +++++++
.../variant_MARLIN_STM32G0B1VE.cpp | 213 ++++++++
.../variant_MARLIN_STM32G0B1VE.h | 258 ++++++++++
ini/stm32g0.ini | 33 +-
21 files changed, 3057 insertions(+), 155 deletions(-)
create mode 100644 Marlin/src/pins/stm32g0/env_validate.h
create mode 100644 Marlin/src/pins/stm32g0/pins_BTT_MANTA_E3_EZ_V1_0.h
create mode 100644 Marlin/src/pins/stm32g0/pins_BTT_MANTA_M4P_V1_0.h
create mode 100644 Marlin/src/pins/stm32g0/pins_BTT_MANTA_M5P_V1_0.h
create mode 100644 Marlin/src/pins/stm32g0/pins_BTT_MANTA_M8P_V1_0.h
create mode 100644 Marlin/src/pins/stm32g0/pins_BTT_MANTA_M8P_V1_1.h
create mode 100644 Marlin/src/pins/stm32g0/pins_BTT_MANTA_M8P_common.h
create mode 100644 buildroot/share/PlatformIO/boards/marlin_STM32G0B1VE.json
create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/PeripheralPins.c
create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/PinNamesVar.h
create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/ldscript.ld
create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/variant_MARLIN_STM32G0B1VE.cpp
create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/variant_MARLIN_STM32G0B1VE.h
diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h
index fe904846e3..bdf86392c9 100644
--- a/Marlin/src/core/boards.h
+++ b/Marlin/src/core/boards.h
@@ -221,7 +221,7 @@
#define BOARD_5DPRINT 1707 // 5DPrint D8 Driver Board
//
-// LPC1768 ARM Cortex M3
+// LPC1768 ARM Cortex-M3
//
#define BOARD_RAMPS_14_RE_ARM_EFB 2000 // Re-ARM with RAMPS 1.4 (Power outputs: Hotend, Fan, Bed)
@@ -242,7 +242,7 @@
#define BOARD_EMOTRONIC 2015 // eMotion-Tech eMotronic
//
-// LPC1769 ARM Cortex M3
+// LPC1769 ARM Cortex-M3
//
#define BOARD_MKS_SGEN 2500 // MKS-SGen
@@ -259,7 +259,7 @@
#define BOARD_FLY_CDY 2511 // FLYmaker FLY CDY
//
-// SAM3X8E ARM Cortex M3
+// SAM3X8E ARM Cortex-M3
//
#define BOARD_DUE3DOM 3000 // DUE3DOM for Arduino DUE
@@ -292,185 +292,195 @@
#define BOARD_KRATOS32 3027 // K.3D Kratos32 (Arduino Due Shield)
//
-// SAM3X8C ARM Cortex M3
+// SAM3X8C ARM Cortex-M3
//
#define BOARD_PRINTRBOARD_G2 3100 // Printrboard G2
#define BOARD_ADSK 3101 // Arduino DUE Shield Kit (ADSK)
+//
+// STM32 ARM Cortex-M0+
+//
+
+#define BOARD_BTT_EBB42_V1_1 4000 // BigTreeTech EBB42 V1.1 (STM32G0B1CB)
+#define BOARD_BTT_SKR_MINI_E3_V3_0 4001 // BigTreeTech SKR Mini E3 V3.0 (STM32G0B1RE)
+#define BOARD_BTT_MANTA_E3_EZ_V1_0 4002 // BigTreeTech Manta E3 EZ V1.0 (STM32G0B1RE)
+#define BOARD_BTT_MANTA_M4P_V1_0 4003 // BigTreeTech Manta M4P V1.0 (STM32G0B1RE)
+#define BOARD_BTT_MANTA_M5P_V1_0 4004 // BigTreeTech Manta M5P V1.0 (STM32G0B1RE)
+#define BOARD_BTT_MANTA_M8P_V1_0 4005 // BigTreeTech Manta M8P V1.0 (STM32G0B1VE)
+#define BOARD_BTT_MANTA_M8P_V1_1 4006 // BigTreeTech Manta M8P V1.1 (STM32G0B1VE)
+
//
// STM32 ARM Cortex-M3
//
-#define BOARD_MALYAN_M200_V2 4000 // STM32F070CB controller
-#define BOARD_MALYAN_M300 4001 // STM32F070-based delta
-#define BOARD_STM32F103RE 4002 // STM32F103RE Libmaple-based STM32F1 controller
-#define BOARD_MALYAN_M200 4003 // STM32C8 Libmaple-based STM32F1 controller
-#define BOARD_STM3R_MINI 4004 // STM32F103RE Libmaple-based STM32F1 controller
-#define BOARD_GTM32_PRO_VB 4005 // STM32F103VE controller
-#define BOARD_GTM32_MINI 4006 // STM32F103VE controller
-#define BOARD_GTM32_MINI_A30 4007 // STM32F103VE controller
-#define BOARD_GTM32_REV_B 4008 // STM32F103VE controller
-#define BOARD_MORPHEUS 4009 // STM32F103C8 / STM32F103CB Libmaple-based STM32F1 controller
-#define BOARD_CHITU3D 4010 // Chitu3D (STM32F103RE)
-#define BOARD_MKS_ROBIN 4011 // MKS Robin (STM32F103ZE)
-#define BOARD_MKS_ROBIN_MINI 4012 // MKS Robin Mini (STM32F103VE)
-#define BOARD_MKS_ROBIN_NANO 4013 // MKS Robin Nano (STM32F103VE)
-#define BOARD_MKS_ROBIN_NANO_V2 4014 // MKS Robin Nano V2 (STM32F103VE)
-#define BOARD_MKS_ROBIN_LITE 4015 // MKS Robin Lite/Lite2 (STM32F103RC)
-#define BOARD_MKS_ROBIN_LITE3 4016 // MKS Robin Lite3 (STM32F103RC)
-#define BOARD_MKS_ROBIN_PRO 4017 // MKS Robin Pro (STM32F103ZE)
-#define BOARD_MKS_ROBIN_E3 4018 // MKS Robin E3 (STM32F103RC)
-#define BOARD_MKS_ROBIN_E3_V1_1 4019 // MKS Robin E3 V1.1 (STM32F103RC)
-#define BOARD_MKS_ROBIN_E3D 4020 // MKS Robin E3D (STM32F103RC)
-#define BOARD_MKS_ROBIN_E3D_V1_1 4021 // MKS Robin E3D V1.1 (STM32F103RC)
-#define BOARD_MKS_ROBIN_E3P 4022 // MKS Robin E3p (STM32F103VE)
-#define BOARD_BTT_EBB42_V1_1 4023 // BigTreeTech EBB42 V1.1 (STM32G0B1CB)
-#define BOARD_BTT_SKR_MINI_V1_1 4024 // BigTreeTech SKR Mini v1.1 (STM32F103RC)
-#define BOARD_BTT_SKR_MINI_E3_V1_0 4025 // BigTreeTech SKR Mini E3 (STM32F103RC)
-#define BOARD_BTT_SKR_MINI_E3_V1_2 4026 // BigTreeTech SKR Mini E3 V1.2 (STM32F103RC)
-#define BOARD_BTT_SKR_MINI_E3_V2_0 4027 // BigTreeTech SKR Mini E3 V2.0 (STM32F103RC / STM32F103RE)
-#define BOARD_BTT_SKR_MINI_E3_V3_0 4028 // BigTreeTech SKR Mini E3 V3.0 (STM32G0B1RE)
-#define BOARD_BTT_SKR_MINI_E3_V3_0_1 4029 // BigTreeTech SKR Mini E3 V3.0.1 (STM32F401RC)
-#define BOARD_BTT_SKR_MINI_MZ_V1_0 4030 // BigTreeTech SKR Mini MZ V1.0 (STM32F103RC)
-#define BOARD_BTT_SKR_E3_DIP 4031 // BigTreeTech SKR E3 DIP V1.0 (STM32F103RC / STM32F103RE)
-#define BOARD_BTT_SKR_CR6 4032 // BigTreeTech SKR CR6 v1.0 (STM32F103RE)
-#define BOARD_JGAURORA_A5S_A1 4033 // JGAurora A5S A1 (STM32F103ZE)
-#define BOARD_FYSETC_AIO_II 4034 // FYSETC AIO_II (STM32F103RC)
-#define BOARD_FYSETC_CHEETAH 4035 // FYSETC Cheetah (STM32F103RC)
-#define BOARD_FYSETC_CHEETAH_V12 4036 // FYSETC Cheetah V1.2 (STM32F103RC)
-#define BOARD_LONGER3D_LK 4037 // Longer3D LK1/2 - Alfawise U20/U20+/U30 (STM32F103VE)
-#define BOARD_CCROBOT_MEEB_3DP 4038 // ccrobot-online.com MEEB_3DP (STM32F103RC)
-#define BOARD_CHITU3D_V5 4039 // Chitu3D TronXY X5SA V5 Board (STM32F103ZE)
-#define BOARD_CHITU3D_V6 4040 // Chitu3D TronXY X5SA V6 Board (STM32F103ZE)
-#define BOARD_CHITU3D_V9 4041 // Chitu3D TronXY X5SA V9 Board (STM32F103ZE)
-#define BOARD_CREALITY_V4 4042 // Creality v4.x (STM32F103RC / STM32F103RE)
-#define BOARD_CREALITY_V422 4043 // Creality v4.2.2 (STM32F103RC / STM32F103RE)
-#define BOARD_CREALITY_V423 4044 // Creality v4.2.3 (STM32F103RC / STM32F103RE)
-#define BOARD_CREALITY_V425 4045 // Creality v4.2.5 (STM32F103RC / STM32F103RE)
-#define BOARD_CREALITY_V427 4046 // Creality v4.2.7 (STM32F103RC / STM32F103RE)
-#define BOARD_CREALITY_V4210 4047 // Creality v4.2.10 (STM32F103RC / STM32F103RE) as found in the CR-30
-#define BOARD_CREALITY_V431 4048 // Creality v4.3.1 (STM32F103RC / STM32F103RE)
-#define BOARD_CREALITY_V431_A 4049 // Creality v4.3.1a (STM32F103RC / STM32F103RE)
-#define BOARD_CREALITY_V431_B 4050 // Creality v4.3.1b (STM32F103RC / STM32F103RE)
-#define BOARD_CREALITY_V431_C 4051 // Creality v4.3.1c (STM32F103RC / STM32F103RE)
-#define BOARD_CREALITY_V431_D 4052 // Creality v4.3.1d (STM32F103RC / STM32F103RE)
-#define BOARD_CREALITY_V452 4053 // Creality v4.5.2 (STM32F103RC / STM32F103RE)
-#define BOARD_CREALITY_V453 4054 // Creality v4.5.3 (STM32F103RC / STM32F103RE)
-#define BOARD_CREALITY_V521 4055 // Creality v5.2.1 (STM32F103VE) as found in the SV04
-#define BOARD_CREALITY_V24S1 4056 // Creality v2.4.S1 (STM32F103RC / STM32F103RE) v101 as found in the Ender-7
-#define BOARD_CREALITY_V24S1_301 4057 // Creality v2.4.S1_301 (STM32F103RC / STM32F103RE) v301 as found in the Ender-3 S1
-#define BOARD_CREALITY_V25S1 4058 // Creality v2.5.S1 (STM32F103RE) as found in the CR-10 Smart Pro
-#define BOARD_TRIGORILLA_PRO 4059 // Trigorilla Pro (STM32F103ZE)
-#define BOARD_FLY_MINI 4060 // FLYmaker FLY MINI (STM32F103RC)
-#define BOARD_FLSUN_HISPEED 4061 // FLSUN HiSpeedV1 (STM32F103VE)
-#define BOARD_BEAST 4062 // STM32F103RE Libmaple-based controller
-#define BOARD_MINGDA_MPX_ARM_MINI 4063 // STM32F103ZE Mingda MD-16
-#define BOARD_GTM32_PRO_VD 4064 // STM32F103VE controller
-#define BOARD_ZONESTAR_ZM3E2 4065 // Zonestar ZM3E2 (STM32F103RC)
-#define BOARD_ZONESTAR_ZM3E4 4066 // Zonestar ZM3E4 V1 (STM32F103VC)
-#define BOARD_ZONESTAR_ZM3E4V2 4067 // Zonestar ZM3E4 V2 (STM32F103VC)
-#define BOARD_ERYONE_ERY32_MINI 4068 // Eryone Ery32 mini (STM32F103VE)
-#define BOARD_PANDA_PI_V29 4069 // Panda Pi V2.9 - Standalone (STM32F103RC)
+#define BOARD_MALYAN_M200_V2 5000 // STM32F070CB controller
+#define BOARD_MALYAN_M300 5001 // STM32F070-based delta
+#define BOARD_STM32F103RE 5002 // STM32F103RE Libmaple-based STM32F1 controller
+#define BOARD_MALYAN_M200 5003 // STM32C8 Libmaple-based STM32F1 controller
+#define BOARD_STM3R_MINI 5004 // STM32F103RE Libmaple-based STM32F1 controller
+#define BOARD_GTM32_PRO_VB 5005 // STM32F103VE controller
+#define BOARD_GTM32_MINI 5006 // STM32F103VE controller
+#define BOARD_GTM32_MINI_A30 5007 // STM32F103VE controller
+#define BOARD_GTM32_REV_B 5008 // STM32F103VE controller
+#define BOARD_MORPHEUS 5009 // STM32F103C8 / STM32F103CB Libmaple-based STM32F1 controller
+#define BOARD_CHITU3D 5010 // Chitu3D (STM32F103RE)
+#define BOARD_MKS_ROBIN 5011 // MKS Robin (STM32F103ZE)
+#define BOARD_MKS_ROBIN_MINI 5012 // MKS Robin Mini (STM32F103VE)
+#define BOARD_MKS_ROBIN_NANO 5013 // MKS Robin Nano (STM32F103VE)
+#define BOARD_MKS_ROBIN_NANO_V2 5014 // MKS Robin Nano V2 (STM32F103VE)
+#define BOARD_MKS_ROBIN_LITE 5015 // MKS Robin Lite/Lite2 (STM32F103RC)
+#define BOARD_MKS_ROBIN_LITE3 5016 // MKS Robin Lite3 (STM32F103RC)
+#define BOARD_MKS_ROBIN_PRO 5017 // MKS Robin Pro (STM32F103ZE)
+#define BOARD_MKS_ROBIN_E3 5018 // MKS Robin E3 (STM32F103RC)
+#define BOARD_MKS_ROBIN_E3_V1_1 5019 // MKS Robin E3 V1.1 (STM32F103RC)
+#define BOARD_MKS_ROBIN_E3D 5020 // MKS Robin E3D (STM32F103RC)
+#define BOARD_MKS_ROBIN_E3D_V1_1 5021 // MKS Robin E3D V1.1 (STM32F103RC)
+#define BOARD_MKS_ROBIN_E3P 5022 // MKS Robin E3P (STM32F103VE)
+#define BOARD_BTT_SKR_MINI_V1_1 5023 // BigTreeTech SKR Mini v1.1 (STM32F103RC)
+#define BOARD_BTT_SKR_MINI_E3_V1_0 5024 // BigTreeTech SKR Mini E3 (STM32F103RC)
+#define BOARD_BTT_SKR_MINI_E3_V1_2 5025 // BigTreeTech SKR Mini E3 V1.2 (STM32F103RC)
+#define BOARD_BTT_SKR_MINI_E3_V2_0 5026 // BigTreeTech SKR Mini E3 V2.0 (STM32F103RC / STM32F103RE)
+#define BOARD_BTT_SKR_MINI_MZ_V1_0 5027 // BigTreeTech SKR Mini MZ V1.0 (STM32F103RC)
+#define BOARD_BTT_SKR_E3_DIP 5028 // BigTreeTech SKR E3 DIP V1.0 (STM32F103RC / STM32F103RE)
+#define BOARD_BTT_SKR_CR6 5029 // BigTreeTech SKR CR6 v1.0 (STM32F103RE)
+#define BOARD_JGAURORA_A5S_A1 5030 // JGAurora A5S A1 (STM32F103ZE)
+#define BOARD_FYSETC_AIO_II 5031 // FYSETC AIO_II (STM32F103RC)
+#define BOARD_FYSETC_CHEETAH 5032 // FYSETC Cheetah (STM32F103RC)
+#define BOARD_FYSETC_CHEETAH_V12 5033 // FYSETC Cheetah V1.2 (STM32F103RC)
+#define BOARD_LONGER3D_LK 5034 // Longer3D LK1/2 - Alfawise U20/U20+/U30 (STM32F103VE)
+#define BOARD_CCROBOT_MEEB_3DP 5035 // ccrobot-online.com MEEB_3DP (STM32F103RC)
+#define BOARD_CHITU3D_V5 5036 // Chitu3D TronXY X5SA V5 Board (STM32F103ZE)
+#define BOARD_CHITU3D_V6 5037 // Chitu3D TronXY X5SA V6 Board (STM32F103ZE)
+#define BOARD_CHITU3D_V9 5038 // Chitu3D TronXY X5SA V9 Board (STM32F103ZE)
+#define BOARD_CREALITY_V4 5039 // Creality v4.x (STM32F103RC / STM32F103RE)
+#define BOARD_CREALITY_V422 5040 // Creality v4.2.2 (STM32F103RC / STM32F103RE)
+#define BOARD_CREALITY_V423 5041 // Creality v4.2.3 (STM32F103RC / STM32F103RE)
+#define BOARD_CREALITY_V425 5042 // Creality v4.2.5 (STM32F103RC / STM32F103RE)
+#define BOARD_CREALITY_V427 5043 // Creality v4.2.7 (STM32F103RC / STM32F103RE)
+#define BOARD_CREALITY_V4210 5044 // Creality v4.2.10 (STM32F103RC / STM32F103RE) as found in the CR-30
+#define BOARD_CREALITY_V431 5045 // Creality v4.3.1 (STM32F103RC / STM32F103RE)
+#define BOARD_CREALITY_V431_A 5046 // Creality v4.3.1a (STM32F103RC / STM32F103RE)
+#define BOARD_CREALITY_V431_B 5047 // Creality v4.3.1b (STM32F103RC / STM32F103RE)
+#define BOARD_CREALITY_V431_C 5048 // Creality v4.3.1c (STM32F103RC / STM32F103RE)
+#define BOARD_CREALITY_V431_D 5049 // Creality v4.3.1d (STM32F103RC / STM32F103RE)
+#define BOARD_CREALITY_V452 5050 // Creality v4.5.2 (STM32F103RC / STM32F103RE)
+#define BOARD_CREALITY_V453 5051 // Creality v4.5.3 (STM32F103RC / STM32F103RE)
+#define BOARD_CREALITY_V521 5052 // Creality v5.2.1 (STM32F103VE) as found in the SV04
+#define BOARD_CREALITY_V24S1 5053 // Creality v2.4.S1 (STM32F103RC / STM32F103RE) v101 as found in the Ender-7
+#define BOARD_CREALITY_V24S1_301 5054 // Creality v2.4.S1_301 (STM32F103RC / STM32F103RE) v301 as found in the Ender-3 S1
+#define BOARD_CREALITY_V25S1 5055 // Creality v2.5.S1 (STM32F103RE) as found in the CR-10 Smart Pro
+#define BOARD_TRIGORILLA_PRO 5056 // Trigorilla Pro (STM32F103ZE)
+#define BOARD_FLY_MINI 5057 // FLYmaker FLY MINI (STM32F103RC)
+#define BOARD_FLSUN_HISPEED 5058 // FLSUN HiSpeedV1 (STM32F103VE)
+#define BOARD_BEAST 5059 // STM32F103RE Libmaple-based controller
+#define BOARD_MINGDA_MPX_ARM_MINI 5060 // STM32F103ZE Mingda MD-16
+#define BOARD_GTM32_PRO_VD 5061 // STM32F103VE controller
+#define BOARD_ZONESTAR_ZM3E2 5062 // Zonestar ZM3E2 (STM32F103RC)
+#define BOARD_ZONESTAR_ZM3E4 5063 // Zonestar ZM3E4 V1 (STM32F103VC)
+#define BOARD_ZONESTAR_ZM3E4V2 5064 // Zonestar ZM3E4 V2 (STM32F103VC)
+#define BOARD_ERYONE_ERY32_MINI 5065 // Eryone Ery32 mini (STM32F103VE)
+#define BOARD_PANDA_PI_V29 5066 // Panda Pi V2.9 - Standalone (STM32F103RC)
//
// ARM Cortex-M4F
//
-#define BOARD_TEENSY31_32 4100 // Teensy3.1 and Teensy3.2
-#define BOARD_TEENSY35_36 4101 // Teensy3.5 and Teensy3.6
+#define BOARD_TEENSY31_32 5100 // Teensy3.1 and Teensy3.2
+#define BOARD_TEENSY35_36 5101 // Teensy3.5 and Teensy3.6
//
// STM32 ARM Cortex-M4F
//
-#define BOARD_ARMED 4200 // Arm'ed STM32F4-based controller
-#define BOARD_RUMBA32_V1_0 4201 // RUMBA32 STM32F446VE based controller from Aus3D
-#define BOARD_RUMBA32_V1_1 4202 // RUMBA32 STM32F446VE based controller from Aus3D
-#define BOARD_RUMBA32_MKS 4203 // RUMBA32 STM32F446VE based controller from Makerbase
-#define BOARD_RUMBA32_BTT 4204 // RUMBA32 STM32F446VE based controller from BIGTREETECH
-#define BOARD_BLACK_STM32F407VE 4205 // BLACK_STM32F407VE
-#define BOARD_BLACK_STM32F407ZE 4206 // BLACK_STM32F407ZE
-#define BOARD_BTT_SKR_PRO_V1_1 4207 // BigTreeTech SKR Pro v1.1 (STM32F407ZG)
-#define BOARD_BTT_SKR_PRO_V1_2 4208 // BigTreeTech SKR Pro v1.2 (STM32F407ZG)
-#define BOARD_BTT_BTT002_V1_0 4209 // BigTreeTech BTT002 v1.0 (STM32F407VG)
-#define BOARD_BTT_E3_RRF 4210 // BigTreeTech E3 RRF (STM32F407VG)
-#define BOARD_BTT_SKR_V2_0_REV_A 4211 // BigTreeTech SKR v2.0 Rev A (STM32F407VG)
-#define BOARD_BTT_SKR_V2_0_REV_B 4212 // BigTreeTech SKR v2.0 Rev B (STM32F407VG/STM32F429VG)
-#define BOARD_BTT_GTR_V1_0 4213 // BigTreeTech GTR v1.0 (STM32F407IGT)
-#define BOARD_BTT_OCTOPUS_V1_0 4214 // BigTreeTech Octopus v1.0 (STM32F446ZE)
-#define BOARD_BTT_OCTOPUS_V1_1 4215 // BigTreeTech Octopus v1.1 (STM32F446ZE)
-#define BOARD_BTT_OCTOPUS_PRO_V1_0 4216 // BigTreeTech Octopus Pro v1.0 (STM32F446ZE / STM32F429ZG)
-#define BOARD_LERDGE_K 4217 // Lerdge K (STM32F407ZG)
-#define BOARD_LERDGE_S 4218 // Lerdge S (STM32F407VE)
-#define BOARD_LERDGE_X 4219 // Lerdge X (STM32F407VE)
-#define BOARD_VAKE403D 4220 // VAkE 403D (STM32F446VE)
-#define BOARD_FYSETC_S6 4221 // FYSETC S6 (STM32F446VE)
-#define BOARD_FYSETC_S6_V2_0 4222 // FYSETC S6 v2.0 (STM32F446VE)
-#define BOARD_FYSETC_SPIDER 4223 // FYSETC Spider (STM32F446VE)
-#define BOARD_FLYF407ZG 4224 // FLYmaker FLYF407ZG (STM32F407ZG)
-#define BOARD_MKS_ROBIN2 4225 // MKS_ROBIN2 (STM32F407ZE)
-#define BOARD_MKS_ROBIN_PRO_V2 4226 // MKS Robin Pro V2 (STM32F407VE)
-#define BOARD_MKS_ROBIN_NANO_V3 4227 // MKS Robin Nano V3 (STM32F407VG)
-#define BOARD_MKS_ROBIN_NANO_V3_1 4228 // MKS Robin Nano V3.1 (STM32F407VE)
-#define BOARD_MKS_MONSTER8_V1 4229 // MKS Monster8 V1 (STM32F407VE)
-#define BOARD_MKS_MONSTER8_V2 4230 // MKS Monster8 V2 (STM32F407VE)
-#define BOARD_ANET_ET4 4231 // ANET ET4 V1.x (STM32F407VG)
-#define BOARD_ANET_ET4P 4232 // ANET ET4P V1.x (STM32F407VG)
-#define BOARD_FYSETC_CHEETAH_V20 4233 // FYSETC Cheetah V2.0 (STM32F401RC)
-#define BOARD_TH3D_EZBOARD_V2 4234 // TH3D EZBoard v2.0 (STM32F405RG)
-#define BOARD_OPULO_LUMEN_REV3 4235 // Opulo Lumen PnP Controller REV3 (STM32F407VE / STM32F407VG)
-#define BOARD_MKS_ROBIN_NANO_V1_3_F4 4236 // MKS Robin Nano V1.3 and MKS Robin Nano-S V1.3 (STM32F407VE)
-#define BOARD_MKS_EAGLE 4237 // MKS Eagle (STM32F407VE)
-#define BOARD_ARTILLERY_RUBY 4238 // Artillery Ruby (STM32F401RC)
-#define BOARD_FYSETC_SPIDER_V2_2 4239 // FYSETC Spider V2.2 (STM32F446VE)
-#define BOARD_CREALITY_V24S1_301F4 4240 // Creality v2.4.S1_301F4 (STM32F401RC) as found in the Ender-3 S1 F4
-#define BOARD_OPULO_LUMEN_REV4 4241 // Opulo Lumen PnP Controller REV4 (STM32F407VE / STM32F407VG)
-#define BOARD_FYSETC_SPIDER_KING407 4242 // FYSETC Spider King407 (STM32F407ZG)
-#define BOARD_MKS_SKIPR_V1 4243 // MKS SKIPR v1.0 all-in-one board (STM32F407VE)
-#define BOARD_TRONXY_V10 4244 // TRONXY V10 (STM32F446ZE)
+#define BOARD_ARMED 5200 // Arm'ed STM32F4-based controller
+#define BOARD_RUMBA32_V1_0 5201 // RUMBA32 STM32F446VE based controller from Aus3D
+#define BOARD_RUMBA32_V1_1 5202 // RUMBA32 STM32F446VE based controller from Aus3D
+#define BOARD_RUMBA32_MKS 5203 // RUMBA32 STM32F446VE based controller from Makerbase
+#define BOARD_RUMBA32_BTT 5204 // RUMBA32 STM32F446VE based controller from BIGTREETECH
+#define BOARD_BLACK_STM32F407VE 5205 // BLACK_STM32F407VE
+#define BOARD_BLACK_STM32F407ZE 5206 // BLACK_STM32F407ZE
+#define BOARD_BTT_SKR_MINI_E3_V3_0_1 5207 // BigTreeTech SKR Mini E3 V3.0.1 (STM32F401RC)
+#define BOARD_BTT_SKR_PRO_V1_1 5208 // BigTreeTech SKR Pro v1.1 (STM32F407ZG)
+#define BOARD_BTT_SKR_PRO_V1_2 5209 // BigTreeTech SKR Pro v1.2 (STM32F407ZG)
+#define BOARD_BTT_BTT002_V1_0 5210 // BigTreeTech BTT002 v1.0 (STM32F407VG)
+#define BOARD_BTT_E3_RRF 5211 // BigTreeTech E3 RRF (STM32F407VG)
+#define BOARD_BTT_SKR_V2_0_REV_A 5212 // BigTreeTech SKR v2.0 Rev A (STM32F407VG)
+#define BOARD_BTT_SKR_V2_0_REV_B 5213 // BigTreeTech SKR v2.0 Rev B (STM32F407VG/STM32F429VG)
+#define BOARD_BTT_GTR_V1_0 5214 // BigTreeTech GTR v1.0 (STM32F407IGT)
+#define BOARD_BTT_OCTOPUS_V1_0 5215 // BigTreeTech Octopus v1.0 (STM32F446ZE)
+#define BOARD_BTT_OCTOPUS_V1_1 5216 // BigTreeTech Octopus v1.1 (STM32F446ZE)
+#define BOARD_BTT_OCTOPUS_PRO_V1_0 5217 // BigTreeTech Octopus Pro v1.0 (STM32F446ZE / STM32F429ZG)
+#define BOARD_LERDGE_K 5218 // Lerdge K (STM32F407ZG)
+#define BOARD_LERDGE_S 5219 // Lerdge S (STM32F407VE)
+#define BOARD_LERDGE_X 5220 // Lerdge X (STM32F407VE)
+#define BOARD_VAKE403D 5221 // VAkE 403D (STM32F446VE)
+#define BOARD_FYSETC_S6 5222 // FYSETC S6 (STM32F446VE)
+#define BOARD_FYSETC_S6_V2_0 5223 // FYSETC S6 v2.0 (STM32F446VE)
+#define BOARD_FYSETC_SPIDER 5224 // FYSETC Spider (STM32F446VE)
+#define BOARD_FLYF407ZG 5225 // FLYmaker FLYF407ZG (STM32F407ZG)
+#define BOARD_MKS_ROBIN2 5226 // MKS_ROBIN2 (STM32F407ZE)
+#define BOARD_MKS_ROBIN_PRO_V2 5227 // MKS Robin Pro V2 (STM32F407VE)
+#define BOARD_MKS_ROBIN_NANO_V3 5228 // MKS Robin Nano V3 (STM32F407VG)
+#define BOARD_MKS_ROBIN_NANO_V3_1 5229 // MKS Robin Nano V3.1 (STM32F407VE)
+#define BOARD_MKS_MONSTER8_V1 5230 // MKS Monster8 V1 (STM32F407VE)
+#define BOARD_MKS_MONSTER8_V2 5231 // MKS Monster8 V2 (STM32F407VE)
+#define BOARD_ANET_ET4 5232 // ANET ET4 V1.x (STM32F407VG)
+#define BOARD_ANET_ET4P 5233 // ANET ET4P V1.x (STM32F407VG)
+#define BOARD_FYSETC_CHEETAH_V20 5234 // FYSETC Cheetah V2.0 (STM32F401RC)
+#define BOARD_TH3D_EZBOARD_V2 5235 // TH3D EZBoard v2.0 (STM32F405RG)
+#define BOARD_OPULO_LUMEN_REV3 5236 // Opulo Lumen PnP Controller REV3 (STM32F407VE / STM32F407VG)
+#define BOARD_MKS_ROBIN_NANO_V1_3_F4 5237 // MKS Robin Nano V1.3 and MKS Robin Nano-S V1.3 (STM32F407VE)
+#define BOARD_MKS_EAGLE 5238 // MKS Eagle (STM32F407VE)
+#define BOARD_ARTILLERY_RUBY 5239 // Artillery Ruby (STM32F401RC)
+#define BOARD_FYSETC_SPIDER_V2_2 5240 // FYSETC Spider V2.2 (STM32F446VE)
+#define BOARD_CREALITY_V24S1_301F4 5241 // Creality v2.4.S1_301F4 (STM32F401RC) as found in the Ender-3 S1 F4
+#define BOARD_OPULO_LUMEN_REV4 5242 // Opulo Lumen PnP Controller REV4 (STM32F407VE / STM32F407VG)
+#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)
//
-// ARM Cortex M7
+// ARM Cortex-M7
//
-#define BOARD_REMRAM_V1 5000 // RemRam v1
-#define BOARD_TEENSY41 5001 // Teensy 4.1
-#define BOARD_T41U5XBB 5002 // T41U5XBB Teensy 4.1 breakout board
-#define BOARD_NUCLEO_F767ZI 5003 // ST NUCLEO-F767ZI Dev Board
-#define BOARD_BTT_SKR_SE_BX_V2 5004 // BigTreeTech SKR SE BX V2.0 (STM32H743II)
-#define BOARD_BTT_SKR_SE_BX_V3 5005 // BigTreeTech SKR SE BX V3.0 (STM32H743II)
-#define BOARD_BTT_SKR_V3_0 5006 // BigTreeTech SKR V3.0 (STM32H743VG)
-#define BOARD_BTT_SKR_V3_0_EZ 5007 // BigTreeTech SKR V3.0 EZ (STM32H743VG)
+#define BOARD_REMRAM_V1 6000 // RemRam v1
+#define BOARD_TEENSY41 6001 // Teensy 4.1
+#define BOARD_T41U5XBB 6002 // T41U5XBB Teensy 4.1 breakout board
+#define BOARD_NUCLEO_F767ZI 6003 // ST NUCLEO-F767ZI Dev Board
+#define BOARD_BTT_SKR_SE_BX_V2 6004 // BigTreeTech SKR SE BX V2.0 (STM32H743II)
+#define BOARD_BTT_SKR_SE_BX_V3 6005 // BigTreeTech SKR SE BX V3.0 (STM32H743II)
+#define BOARD_BTT_SKR_V3_0 6006 // BigTreeTech SKR V3.0 (STM32H743VG)
+#define BOARD_BTT_SKR_V3_0_EZ 6007 // BigTreeTech SKR V3.0 EZ (STM32H743VG)
//
// Espressif ESP32 WiFi
//
-#define BOARD_ESPRESSIF_ESP32 6000 // Generic ESP32
-#define BOARD_MRR_ESPA 6001 // MRR ESPA based on ESP32 (native pins only)
-#define BOARD_MRR_ESPE 6002 // MRR ESPE based on ESP32 (with I2S stepper stream)
-#define BOARD_E4D_BOX 6003 // E4d@BOX
-#define BOARD_RESP32_CUSTOM 6004 // Rutilea ESP32 custom board
-#define BOARD_FYSETC_E4 6005 // FYSETC E4
-#define BOARD_PANDA_ZHU 6006 // Panda_ZHU
-#define BOARD_PANDA_M4 6007 // Panda_M4
-#define BOARD_MKS_TINYBEE 6008 // MKS TinyBee based on ESP32 (with I2S stepper stream)
-#define BOARD_ENWI_ESPNP 6009 // enwi ESPNP based on ESP32 (with I2S stepper stream)
+#define BOARD_ESPRESSIF_ESP32 7000 // Generic ESP32
+#define BOARD_MRR_ESPA 7001 // MRR ESPA based on ESP32 (native pins only)
+#define BOARD_MRR_ESPE 7002 // MRR ESPE based on ESP32 (with I2S stepper stream)
+#define BOARD_E4D_BOX 7003 // E4d@BOX
+#define BOARD_RESP32_CUSTOM 7004 // Rutilea ESP32 custom board
+#define BOARD_FYSETC_E4 7005 // FYSETC E4
+#define BOARD_PANDA_ZHU 7006 // Panda_ZHU
+#define BOARD_PANDA_M4 7007 // Panda_M4
+#define BOARD_MKS_TINYBEE 7008 // MKS TinyBee based on ESP32 (with I2S stepper stream)
+#define BOARD_ENWI_ESPNP 7009 // enwi ESPNP based on ESP32 (with I2S stepper stream)
//
-// SAMD51 ARM Cortex M4
+// SAMD51 ARM Cortex-M4
//
-#define BOARD_AGCM4_RAMPS_144 6100 // RAMPS 1.4.4
-#define BOARD_BRICOLEMON_V1_0 6101 // Bricolemon
-#define BOARD_BRICOLEMON_LITE_V1_0 6102 // Bricolemon Lite
+#define BOARD_AGCM4_RAMPS_144 7100 // RAMPS 1.4.4
+#define BOARD_BRICOLEMON_V1_0 7101 // Bricolemon
+#define BOARD_BRICOLEMON_LITE_V1_0 7102 // Bricolemon Lite
//
-// SAMD21 ARM Cortex M4
+// SAMD21 ARM Cortex-M4
//
-#define BOARD_MINITRONICS20 6103 // Minitronics v2.0
+#define BOARD_MINITRONICS20 7103 // Minitronics v2.0
//
// Custom board
diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h
index e0ec241faf..18bb7dba58 100644
--- a/Marlin/src/pins/pins.h
+++ b/Marlin/src/pins/pins.h
@@ -545,6 +545,16 @@
#include "stm32f1/pins_BTT_SKR_MINI_E3_V2_0.h" // STM32F1 env:STM32F103RC_btt env:STM32F103RC_btt_USB env:STM32F103RE_btt env:STM32F103RE_btt_USB env:STM32F103RC_btt_maple env:STM32F103RC_btt_USB_maple env:STM32F103RE_btt_maple env:STM32F103RE_btt_USB_maple
#elif MB(BTT_SKR_MINI_E3_V3_0)
#include "stm32g0/pins_BTT_SKR_MINI_E3_V3_0.h" // STM32G0 env:STM32G0B1RE_btt env:STM32G0B1RE_btt_xfer
+#elif MB(BTT_MANTA_M4P_V1_0)
+ #include "stm32g0/pins_BTT_MANTA_M4P_V1_0.h" // STM32G0 env:STM32G0B1RE_btt env:STM32G0B1RE_btt_xfer
+#elif MB(BTT_MANTA_M5P_V1_0)
+ #include "stm32g0/pins_BTT_MANTA_M5P_V1_0.h" // STM32G0 env:STM32G0B1RE_btt env:STM32G0B1RE_btt_xfer
+#elif MB(BTT_MANTA_E3_EZ_V1_0)
+ #include "stm32g0/pins_BTT_MANTA_E3_EZ_V1_0.h" // STM32G0 env:STM32G0B1RE_btt env:STM32G0B1RE_btt_xfer
+#elif MB(BTT_MANTA_M8P_V1_0)
+ #include "stm32g0/pins_BTT_MANTA_M8P_V1_0.h" // STM32G0 env:STM32G0B1VE_btt env:STM32G0B1VE_btt_xfer
+#elif MB(BTT_MANTA_M8P_V1_1)
+ #include "stm32g0/pins_BTT_MANTA_M8P_V1_1.h" // STM32G0 env:STM32G0B1VE_btt env:STM32G0B1VE_btt_xfer
#elif MB(BTT_SKR_MINI_E3_V3_0_1)
#include "stm32f4/pins_BTT_SKR_MINI_E3_V3_0_1.h"// STM32F4 env:STM32F401RC_btt
#elif MB(BTT_SKR_MINI_MZ_V1_0)
diff --git a/Marlin/src/pins/stm32g0/env_validate.h b/Marlin/src/pins/stm32g0/env_validate.h
new file mode 100644
index 0000000000..a7be76bd8b
--- /dev/null
+++ b/Marlin/src/pins/stm32g0/env_validate.h
@@ -0,0 +1,26 @@
+/**
+ * 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
+
+#if NOT_TARGET(STM32G0xx) || NOT_TARGET(STM32G0B1xx)
+ #error "Oops! Select an STM32G0 board in 'Tools > Board.'"
+#endif
diff --git a/Marlin/src/pins/stm32g0/pins_BTT_EBB42_V1_1.h b/Marlin/src/pins/stm32g0/pins_BTT_EBB42_V1_1.h
index fc2be5401e..cdd85a6d75 100644
--- a/Marlin/src/pins/stm32g0/pins_BTT_EBB42_V1_1.h
+++ b/Marlin/src/pins/stm32g0/pins_BTT_EBB42_V1_1.h
@@ -21,6 +21,8 @@
*/
#pragma once
+#include "env_validate.h"
+
/** CAUTION **
* This board definition is to facilitate support for a Filament Extrusion
* devices, used to convert waste plastic into 3D printable filament.
diff --git a/Marlin/src/pins/stm32g0/pins_BTT_MANTA_E3_EZ_V1_0.h b/Marlin/src/pins/stm32g0/pins_BTT_MANTA_E3_EZ_V1_0.h
new file mode 100644
index 0000000000..54c2c4c77b
--- /dev/null
+++ b/Marlin/src/pins/stm32g0/pins_BTT_MANTA_E3_EZ_V1_0.h
@@ -0,0 +1,340 @@
+/**
+ * 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"
+
+#ifndef BOARD_INFO_NAME
+ #define BOARD_INFO_NAME "BTT Manta E3 EZ V1.0"
+#endif
+
+#define USES_DIAG_JUMPERS
+
+// Ignore temp readings during development.
+//#define BOGUS_TEMPERATURE_GRACE_PERIOD 2000
+
+//
+// EEPROM
+//
+#if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION)
+ #undef NO_EEPROM_SELECTED
+ #ifndef FLASH_EEPROM_EMULATION
+ #define FLASH_EEPROM_EMULATION
+ #endif
+ #define EEPROM_PAGE_SIZE (0x800UL) // 2K
+ #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL)
+ #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE
+#endif
+
+//
+// Servos
+//
+#define SERVO0_PIN PA7 // BLTouch
+
+//
+// Probe enable
+//
+#if ENABLED(PROBE_ENABLE_DISABLE)
+ #ifndef PROBE_ENABLE_PIN
+ #define PROBE_ENABLE_PIN SERVO0_PIN
+ #endif
+#endif
+
+//
+// Trinamic StallGuard pins
+//
+#define X_DIAG_PIN PC4 // X-STOP
+#define Y_DIAG_PIN PB0 // Y-STOP
+#define Z_DIAG_PIN PC6 // Z-STOP
+#define E0_DIAG_PIN PC5 // E0-DET
+#define E1_DIAG_PIN PB1 // E1-DET
+
+//
+// Limit Switches
+//
+#define X_STOP_PIN X_DIAG_PIN // X-STOP
+#define Y_STOP_PIN Y_DIAG_PIN // Y-STOP
+#define Z_STOP_PIN Z_DIAG_PIN // Z-STOP
+
+//
+// Z Probe (when not Z_STOP_PIN)
+//
+#define Z_MIN_PROBE_PIN PA6 // BLTouch
+
+//
+// Filament Runout Sensor
+//
+#ifndef FIL_RUNOUT_PIN
+ #define FIL_RUNOUT_PIN E0_DIAG_PIN // E0-DET
+#endif
+#ifndef FIL_RUNOUT2_PIN
+ #define FIL_RUNOUT2_PIN E1_DIAG_PIN // E1-DET
+#endif
+
+//
+// Power Supply Control
+//
+#ifndef PS_ON_PIN
+ #define PS_ON_PIN PA9 // PS-ON
+#endif
+
+//
+// Power Loss Detection
+//
+#ifndef POWER_LOSS_PIN
+ #define POWER_LOSS_PIN PB9 // PWRDET
+#endif
+
+//
+// Steppers
+//
+#define X_STEP_PIN PA14
+#define X_DIR_PIN PA10
+#define X_ENABLE_PIN PA13
+#ifndef X_CS_PIN
+ #define X_CS_PIN PB8
+#endif
+
+#define Y_STEP_PIN PC8
+#define Y_DIR_PIN PA15
+#define Y_ENABLE_PIN PC14
+#ifndef Y_CS_PIN
+ #define Y_CS_PIN PC9
+#endif
+
+#define Z_STEP_PIN PD2
+#define Z_DIR_PIN PD4
+#define Z_ENABLE_PIN PD3
+#ifndef Z_CS_PIN
+ #define Z_CS_PIN PD0
+#endif
+
+#define E0_STEP_PIN PD5
+#define E0_DIR_PIN PD6
+#define E0_ENABLE_PIN PB3
+#ifndef E0_CS_PIN
+ #define E0_CS_PIN PD1
+#endif
+
+#define E1_STEP_PIN PB7
+#define E1_DIR_PIN PB6
+#define E1_ENABLE_PIN PB4
+#ifndef E1_CS_PIN
+ #define E1_CS_PIN PB5
+#endif
+
+//
+// Software SPI pins for TMC2130 stepper drivers
+//
+#if ENABLED(TMC_USE_SW_SPI)
+ #ifndef TMC_SW_MOSI
+ #define TMC_SW_MOSI PC12 // Shared with SPI header, Pin 5 (SPI3)
+ #endif
+ #ifndef TMC_SW_MISO
+ #define TMC_SW_MISO PC11 // Shared with SPI header, Pin 6 (SPI3)
+ #endif
+ #ifndef TMC_SW_SCK
+ #define TMC_SW_SCK PC10 // Shared with SPI header, Pin 4 (SPI3)
+ #endif
+#endif
+
+#if HAS_TMC_UART
+ #define X_SERIAL_TX_PIN PB8 // X_CS_PIN
+ #define X_SERIAL_RX_PIN X_SERIAL_TX_PIN
+
+ #define Y_SERIAL_TX_PIN PC9 // Y_CS_PIN
+ #define Y_SERIAL_RX_PIN Y_SERIAL_TX_PIN
+
+ #define Z_SERIAL_TX_PIN PD0 // Z_CS_PIN
+ #define Z_SERIAL_RX_PIN Z_SERIAL_TX_PIN
+
+ #define E0_SERIAL_TX_PIN PD1 // E0_CS_PIN
+ #define E0_SERIAL_RX_PIN E0_SERIAL_TX_PIN
+
+ #define E1_SERIAL_TX_PIN PB5 // E1_CS_PIN
+ #define E1_SERIAL_RX_PIN E1_SERIAL_TX_PIN
+
+ // Reduce baud rate to improve software serial reliability
+ #define TMC_BAUD_RATE 19200
+#endif
+
+//
+// Temperature Sensors
+//
+#define TEMP_0_PIN PA4 // Analog Input "TH0"
+#define TEMP_1_PIN PA5 // Analog Input "TH1"
+#define TEMP_BED_PIN PA3 // Analog Input "TB"
+
+//
+// Heaters / Fans
+//
+#define HEATER_0_PIN PB11 // "HE0"
+#define HEATER_1_PIN PB10 // "HE1"
+#define HEATER_BED_PIN PB2 // "HB"
+
+#define FAN_PIN PA8 // "FAN0"
+#define FAN1_PIN PB15 // "FAN1"
+#define FAN2_PIN PB14 // "FAN2"
+
+//
+// Auto fans
+//
+#if HOTENDS == 2
+ #ifndef E0_AUTO_FAN_PIN
+ #define E0_AUTO_FAN_PIN FAN1_PIN
+ #endif
+ #ifndef E1_AUTO_FAN_PIN
+ #define E1_AUTO_FAN_PIN FAN2_PIN
+ #endif
+#else
+ #ifndef E0_AUTO_FAN_PIN
+ #define E0_AUTO_FAN_PIN FAN1_PIN
+ #endif
+ #ifndef CONTROLLER_FAN_PIN
+ #define CONTROLLER_FAN_PIN FAN2_PIN
+ #endif
+#endif
+
+/**
+ * Manta E3 EZ V1.0
+ * ------
+ * (BEEPER) PC1 | 1 2 | PC2 (BTN_ENC)
+ * (BTN_EN1) PC3 | 3 4 | RESET
+ * (BTN_EN2) PC0 5 6 | PA0 (LCD_D4)
+ * (LCD_RS) PA2 | 7 8 | PA1 (LCD_EN)
+ * GND | 9 10 | 5V
+ * ------
+ * EXP1
+ */
+#define EXP1_01_PIN PC1
+#define EXP1_02_PIN PC2
+#define EXP1_03_PIN PC3
+#define EXP1_04_PIN -1
+#define EXP1_05_PIN PC0
+#define EXP1_06_PIN PA0
+#define EXP1_07_PIN PA2
+#define EXP1_08_PIN PA1
+#define EXP1_09_PIN -1
+#define EXP1_10_PIN -1
+
+#if HAS_DWIN_E3V2 || IS_DWIN_MARLINUI
+ #ifndef NO_CONTROLLER_CUSTOM_WIRING_WARNING
+ #error "CAUTION! Ender-3 V2 display requires a custom cable with TX = PA0, RX = PC2. See 'pins_BTT_MANTA_E3_EZ_V1_0.h' for details. (Define NO_CONTROLLER_CUSTOM_WIRING_WARNING to suppress this warning.)"
+ #endif
+
+ /**
+ * Ender-3 V2 display Manta E3 EZ V1.0 Ender-3 V2 display --> Manta E3 EZ V1.0
+ * ------ ------ RX 3 --> 5 P0_15
+ * -- | 1 2 | -- (BEEPER) PC1 | 1 2 | PC2 (BTN_ENC) TX 4 --> 9 P0_16
+ * (MANTA TX1) RX | 3 4 | TX (MANTA RX1) (BTN_EN1) PC3 | 3 4 | RESET BEEPER 6 --> 10 P2_08
+ * (BTN_ENC) ENT 5 6 | BEEPER (BTN_EN2) PC0 5 6 | PA0 (LCD_D4)
+ * (BTN_E2) B | 7 8 | A (BTN_E1) (LCD_RS) PA2 | 7 8 | PA1 (LCD_EN)
+ * GND | 9 10 | 5V GND | 9 10 | 5V
+ * ------ ------
+ */
+
+ #define BEEPER_PIN EXP1_01_PIN
+ #define BTN_EN1 EXP1_08_PIN
+ #define BTN_EN2 EXP1_07_PIN
+ #define BTN_ENC EXP1_05_PIN
+
+#elif HAS_WIRED_LCD
+
+ #if ENABLED(CR10_STOCKDISPLAY)
+
+ #define BEEPER_PIN EXP1_01_PIN
+
+ #define BTN_EN1 EXP1_03_PIN
+ #define BTN_EN2 EXP1_05_PIN
+ #define BTN_ENC EXP1_02_PIN
+
+ #define LCD_PINS_RS EXP1_07_PIN
+ #define LCD_PINS_ENABLE EXP1_08_PIN
+ #define LCD_PINS_D4 EXP1_06_PIN
+
+ #elif ENABLED(ZONESTAR_LCD) // ANET A8 LCD Controller - Must convert to 3.3V - CONNECTING TO 5V WILL DAMAGE THE BOARD!
+
+ #ifndef NO_CONTROLLER_CUSTOM_WIRING_WARNING
+ #error "CAUTION! ZONESTAR_LCD requires wiring modifications. See 'pins_BTT_MANTA_E3_EZ_V1_0.h' for details. (Define NO_CONTROLLER_CUSTOM_WIRING_WARNING to suppress this warning.)"
+ #endif
+
+ #define LCD_PINS_RS EXP1_06_PIN
+ #define LCD_PINS_ENABLE EXP1_02_PIN
+ #define LCD_PINS_D4 EXP1_07_PIN
+ #define LCD_PINS_D5 EXP1_05_PIN
+ #define LCD_PINS_D6 EXP1_03_PIN
+ #define LCD_PINS_D7 EXP1_01_PIN
+ #define ADC_KEYPAD_PIN PA7 // Repurpose default SERVO0_PIN for ADC - CONNECTING TO 5V WILL DAMAGE THE BOARD!
+
+ #elif EITHER(MKS_MINI_12864, ENDER2_STOCKDISPLAY)
+
+ #define BTN_EN1 EXP1_03_PIN
+ #define BTN_EN2 EXP1_05_PIN
+ #define BTN_ENC EXP1_02_PIN
+
+ #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
+ #define LCD_BACKLIGHT_PIN -1
+
+ #else
+
+ #error "Only ZONESTAR_LCD, MKS_MINI_12864, ENDER2_STOCKDISPLAY, and CR10_STOCKDISPLAY are currently supported on the BTT_MANTA_E3_EZ_V1_0."
+
+ #endif
+
+#endif // HAS_WIRED_LCD
+
+//
+// SD Support
+//
+
+#ifndef SDCARD_CONNECTION
+ #define SDCARD_CONNECTION ONBOARD
+#endif
+
+#define SD_DETECT_PIN -1
+
+#if SD_CONNECTION_IS(LCD) && (BOTH(TOUCH_UI_FTDI_EVE, LCD_FYSETC_TFT81050) || IS_TFTGLCD_PANEL)
+ #define SD_SS_PIN EXP1_05_PIN
+#elif SD_CONNECTION_IS(CUSTOM_CABLE)
+ #error "SD CUSTOM_CABLE is not compatible with Manta E3 EZ."
+#endif
+
+#define ONBOARD_SPI_DEVICE 3 // SPI3 -> used only by HAL/STM32F1...
+#define ONBOARD_SD_CS_PIN PC13 // Chip select for "System" SD card
+
+#define ENABLE_SPI3
+#define SDSS ONBOARD_SD_CS_PIN
+#define SD_SS_PIN ONBOARD_SD_CS_PIN
+#define SD_SCK_PIN PC10
+#define SD_MISO_PIN PC11
+#define SD_MOSI_PIN PC12
+
+//
+// NeoPixel LED
+//
+#ifndef NEOPIXEL_PIN
+ #define NEOPIXEL_PIN PC7 // RGB
+#endif
diff --git a/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M4P_V1_0.h b/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M4P_V1_0.h
new file mode 100644
index 0000000000..876475f883
--- /dev/null
+++ b/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M4P_V1_0.h
@@ -0,0 +1,313 @@
+/**
+ * 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_CUSTOM_BUILD_FLAGS -DTONE_CHANNEL=4 -DTONE_TIMER=4 -DTIMER_TONE=4
+
+#ifndef BOARD_INFO_NAME
+ #define BOARD_INFO_NAME "BTT Manta M4P V1.0"
+#endif
+
+#define USES_DIAG_JUMPERS
+
+// Ignore temp readings during development.
+//#define BOGUS_TEMPERATURE_GRACE_PERIOD 2000
+
+//
+// EEPROM
+//
+#if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION)
+ #undef NO_EEPROM_SELECTED
+ #ifndef FLASH_EEPROM_EMULATION
+ #define FLASH_EEPROM_EMULATION
+ #endif
+ #define EEPROM_PAGE_SIZE (0x800UL) // 2K
+ #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL)
+ #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE
+#endif
+
+//
+// Servos
+//
+#define SERVO0_PIN PA1 // SERVOS
+
+//
+// Probe enable
+//
+#if ENABLED(PROBE_ENABLE_DISABLE)
+ #ifndef PROBE_ENABLE_PIN
+ #define PROBE_ENABLE_PIN SERVO0_PIN
+ #endif
+#endif
+
+//
+// Limit Switches
+//
+#define X_STOP_PIN PC0 // X-STOP
+#define Y_STOP_PIN PC1 // Y-STOP
+#define Z_STOP_PIN PC2 // Z-STOP
+
+//
+// Z Probe must be this pin
+//
+#define Z_MIN_PROBE_PIN PC14 // PROBE
+
+//
+// Filament Runout Sensor
+//
+#ifndef FIL_RUNOUT_PIN
+ #define FIL_RUNOUT_PIN PC15 // E0-STOP
+#endif
+
+//
+// Steppers
+//
+#define X_STEP_PIN PC6
+#define X_DIR_PIN PA14
+#define X_ENABLE_PIN PC7
+#ifndef X_CS_PIN
+ #define X_CS_PIN PB12
+#endif
+
+#define Y_STEP_PIN PB10
+#define Y_DIR_PIN PB2
+#define Y_ENABLE_PIN PB11
+#ifndef Y_CS_PIN
+ #define Y_CS_PIN PC10
+#endif
+
+#define Z_STEP_PIN PB0
+#define Z_DIR_PIN PC5
+#define Z_ENABLE_PIN PB1
+#ifndef Z_CS_PIN
+ #define Z_CS_PIN PC9
+#endif
+
+#define E0_STEP_PIN PB3
+#define E0_DIR_PIN PB4
+#define E0_ENABLE_PIN PD5
+#ifndef E0_CS_PIN
+ #define E0_CS_PIN PA13
+#endif
+
+//
+// Software SPI pins for TMC2130 stepper drivers
+//
+#if ENABLED(TMC_USE_SW_SPI)
+ #ifndef TMC_SW_MOSI
+ #define TMC_SW_MOSI PB15
+ #endif
+ #ifndef TMC_SW_MISO
+ #define TMC_SW_MISO PB14
+ #endif
+ #ifndef TMC_SW_SCK
+ #define TMC_SW_SCK PB13
+ #endif
+#endif
+
+#if HAS_TMC_UART
+ #define X_SERIAL_TX_PIN PB12
+ #define X_SERIAL_RX_PIN X_SERIAL_TX_PIN
+
+ #define Y_SERIAL_TX_PIN PC10
+ #define Y_SERIAL_RX_PIN Y_SERIAL_TX_PIN
+
+ #define Z_SERIAL_TX_PIN PC9
+ #define Z_SERIAL_RX_PIN Z_SERIAL_TX_PIN
+
+ #define E0_SERIAL_TX_PIN PA13
+ #define E0_SERIAL_RX_PIN E0_SERIAL_TX_PIN
+
+ // Reduce baud rate to improve software serial reliability
+ #define TMC_BAUD_RATE 19200
+#endif
+
+//
+// Temperature Sensors
+//
+#define TEMP_0_PIN PA0 // Analog Input "TH0"
+#define TEMP_BED_PIN PC4 // Analog Input "TB0"
+
+//
+// Heaters / Fans
+//
+#define HEATER_0_PIN PC8 // "HE"
+#define HEATER_BED_PIN PD8 // "HB"
+
+#define FAN_PIN PD2 // "FAN0"
+#define FAN1_PIN PD3 // "FAN1"
+#define FAN2_PIN PD4 // "FAN2"
+
+/**
+ * ------ ------
+ * (BEEPER) PD6 | 1 2 | PB8 (BTN_ENC) (MISO) PB14 | 1 2 | PB13 (SCK)
+ * (LCD_EN) PB9 | 3 4 | PC3 (LCD_RS) (BTN_EN1) PC11 | 3 4 | PA8 (SD_SS)
+ * (LCD_D4) PA15 | 5 6 PA10 (LCD_D5) (BTN_EN2) PC12 | 5 6 PB15 (MOSI)
+ * (LCD_D6) PA9 | 7 8 | PB5 (LCD_D7) (SD_DETECT) PC13 | 7 8 | RESET
+ * GND | 9 10 | 5V GND | 9 10 | --
+ * ------ ------
+ * EXP1 EXP2
+ */
+#define EXP1_01_PIN PD6
+#define EXP1_02_PIN PB8
+#define EXP1_03_PIN PB9
+#define EXP1_04_PIN PC3
+#define EXP1_05_PIN PA15
+#define EXP1_06_PIN PA10
+#define EXP1_07_PIN PA9
+#define EXP1_08_PIN PB5
+
+#define EXP2_01_PIN PB14
+#define EXP2_02_PIN PB13
+#define EXP2_03_PIN PC11
+#define EXP2_04_PIN PA8
+#define EXP2_05_PIN PC12
+#define EXP2_06_PIN PB15
+#define EXP2_07_PIN PC13
+#define EXP2_08_PIN -1
+
+//
+// Onboard SD card
+// Must use soft SPI because Marlin's default hardware SPI is tied to LCD's EXP2
+//
+#if SD_CONNECTION_IS(LCD)
+ #define SDSS EXP2_04_PIN
+ #define SD_SS_PIN SDSS
+ #define SD_SCK_PIN EXP2_02_PIN
+ #define SD_MISO_PIN EXP2_01_PIN
+ #define SD_MOSI_PIN EXP2_06_PIN
+ #define SD_DETECT_PIN EXP2_07_PIN
+#elif SD_CONNECTION_IS(ONBOARD)
+ #define SD_SCK_PIN PA5
+ #define SD_MISO_PIN PA6
+ #define SD_MOSI_PIN PA7
+ #define ONBOARD_SD_CS_PIN PA4 // Chip select for "System" SD card
+ #define SD_SS_PIN ONBOARD_SD_CS_PIN
+#elif SD_CONNECTION_IS(CUSTOM_CABLE)
+ #error "No custom SD drive cable defined for this board."
+#endif
+
+//
+// LCDs and Controllers
+//
+#if IS_TFTGLCD_PANEL
+
+ #if ENABLED(TFTGLCD_PANEL_SPI)
+ #define TFTGLCD_CS EXP2_03_PIN
+ #endif
+
+#elif HAS_WIRED_LCD
+
+ #define BEEPER_PIN EXP1_01_PIN
+ #define BTN_ENC EXP1_02_PIN
+
+ #if ENABLED(CR10_STOCKDISPLAY)
+
+ #define LCD_PINS_RS EXP1_07_PIN
+
+ #define BTN_EN1 EXP1_03_PIN
+ #define BTN_EN2 EXP1_05_PIN
+
+ #define LCD_PINS_ENABLE EXP1_08_PIN
+ #define LCD_PINS_D4 EXP1_06_PIN
+
+ #elif ENABLED(MKS_MINI_12864)
+
+ #define DOGLCD_A0 EXP1_07_PIN
+ #define DOGLCD_CS EXP1_06_PIN
+ #define BTN_EN1 EXP2_03_PIN
+ #define BTN_EN2 EXP2_05_PIN
+
+ #else
+
+ #define LCD_PINS_RS EXP1_04_PIN
+
+ #define BTN_EN1 EXP2_03_PIN
+ #define BTN_EN2 EXP2_05_PIN
+
+ #define LCD_PINS_ENABLE EXP1_03_PIN
+ #define LCD_PINS_D4 EXP1_05_PIN
+
+ #if ENABLED(FYSETC_MINI_12864)
+ #define DOGLCD_CS EXP1_03_PIN
+ #define DOGLCD_A0 EXP1_04_PIN
+ //#define LCD_BACKLIGHT_PIN -1
+
+ #define FORCE_SOFT_SPI // Use this if default of hardware SPI causes display problems
+ // results in LCD soft SPI mode 3, SD soft SPI mode 0
+
+ #define LCD_RESET_PIN EXP1_05_PIN // Must be high or open for LCD to operate normally.
+ #if EITHER(FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0)
+ #ifndef RGB_LED_R_PIN
+ #define RGB_LED_R_PIN EXP1_06_PIN
+ #endif
+ #ifndef RGB_LED_G_PIN
+ #define RGB_LED_G_PIN EXP1_07_PIN
+ #endif
+ #ifndef RGB_LED_B_PIN
+ #define RGB_LED_B_PIN EXP1_08_PIN
+ #endif
+ #elif ENABLED(FYSETC_MINI_12864_2_1)
+ #define NEOPIXEL_PIN EXP1_06_PIN
+ #endif
+ #endif // !FYSETC_MINI_12864
+
+ #if IS_ULTIPANEL
+ #define LCD_PINS_D5 EXP1_06_PIN
+ #define LCD_PINS_D6 EXP1_07_PIN
+ #define LCD_PINS_D7 EXP1_08_PIN
+
+ #if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
+ #define BTN_ENC_EN LCD_PINS_D7 // Detect the presence of the encoder
+ #endif
+
+ #endif
+
+ #endif
+
+#endif // HAS_WIRED_LCD
+
+// Alter timing for graphical display
+#if IS_U8GLIB_ST7920
+ #ifndef BOARD_ST7920_DELAY_1
+ #define BOARD_ST7920_DELAY_1 120
+ #endif
+ #ifndef BOARD_ST7920_DELAY_2
+ #define BOARD_ST7920_DELAY_2 80
+ #endif
+ #ifndef BOARD_ST7920_DELAY_3
+ #define BOARD_ST7920_DELAY_3 580
+ #endif
+#endif
+
+//
+// NeoPixel LED
+//
+#ifndef NEOPIXEL_PIN
+ #define NEOPIXEL_PIN PD0
+#endif
+
+#ifndef NEOPIXEL2_PIN
+ #define NEOPIXEL2_PIN PD1
+#endif
diff --git a/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M5P_V1_0.h b/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M5P_V1_0.h
new file mode 100644
index 0000000000..f4ce5a16d3
--- /dev/null
+++ b/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M5P_V1_0.h
@@ -0,0 +1,341 @@
+/**
+ * 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"
+
+#ifndef BOARD_INFO_NAME
+ #define BOARD_INFO_NAME "BTT Manta M5P V1.0"
+#endif
+
+#define USES_DIAG_JUMPERS
+
+// Ignore temp readings during development.
+//#define BOGUS_TEMPERATURE_GRACE_PERIOD 2000
+
+//
+// EEPROM
+//
+#if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION)
+ #undef NO_EEPROM_SELECTED
+ #ifndef FLASH_EEPROM_EMULATION
+ #define FLASH_EEPROM_EMULATION
+ #endif
+ #define EEPROM_PAGE_SIZE (0x800UL) // 2K
+ #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL)
+ #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE
+#endif
+
+//
+// Servos
+//
+#define SERVO0_PIN PC15 // PROBE
+
+//
+// Probe enable
+//
+#if ENABLED(PROBE_ENABLE_DISABLE)
+ #ifndef PROBE_ENABLE_PIN
+ #define PROBE_ENABLE_PIN SERVO0_PIN
+ #endif
+#endif
+
+//
+// Trinamic StallGuard pins
+//
+#define X_DIAG_PIN PD3 // MIN1
+#define Y_DIAG_PIN PD2 // MIN2
+#define Z_DIAG_PIN PC3 // MIN3
+#define E0_DIAG_PIN PC2 // MIN4
+#define E1_DIAG_PIN -1
+
+//
+// Limit Switches
+//
+#define X_STOP_PIN X_DIAG_PIN // MIN1
+#define Y_STOP_PIN Y_DIAG_PIN // MIN1
+#define Z_STOP_PIN Z_DIAG_PIN // MIN3
+
+//
+// Z Probe (when not Z_STOP_PIN)
+//
+#ifndef Z_MIN_PROBE_PIN
+ #define Z_MIN_PROBE_PIN PC13 // PROBE
+ //#define Z_MIN_PROBE_PIN PC15 // IND-DET (with adjustable pullup set via jumper)
+#endif
+
+//
+// Filament Runout Sensor
+//
+#ifndef FIL_RUNOUT_PIN
+ #define FIL_RUNOUT_PIN E0_DIAG_PIN // MIN4
+#endif
+
+//
+// Steppers
+//
+#define X_STEP_PIN PC8
+#define X_DIR_PIN PC9
+#define X_ENABLE_PIN PA15
+#ifndef X_CS_PIN
+ #define X_CS_PIN PD9
+#endif
+
+#define Y_STEP_PIN PA10
+#define Y_DIR_PIN PA14
+#define Y_ENABLE_PIN PA13
+#ifndef Y_CS_PIN
+ #define Y_CS_PIN PD8
+#endif
+
+#define Z_STEP_PIN PC6
+#define Z_DIR_PIN PC7
+#define Z_ENABLE_PIN PA9
+#ifndef Z_CS_PIN
+ #define Z_CS_PIN PB10
+#endif
+
+#define E0_STEP_PIN PB12
+#define E0_DIR_PIN PB11
+#define E0_ENABLE_PIN PA8
+#ifndef E0_CS_PIN
+ #define E0_CS_PIN PB2
+#endif
+
+#define E1_STEP_PIN PB0
+#define E1_DIR_PIN PB1
+#define E1_ENABLE_PIN PC4
+#ifndef E1_CS_PIN
+ #define E1_CS_PIN PA6
+#endif
+
+//
+// Software SPI pins for TMC2130 stepper drivers
+//
+#if ENABLED(TMC_USE_SW_SPI)
+ #ifndef TMC_SW_MOSI
+ #define TMC_SW_MOSI PB15 // Shared with SPI header, Pin 5 (SPI2)
+ #endif
+ #ifndef TMC_SW_MISO
+ #define TMC_SW_MISO PB14 // Shared with SPI header, Pin 6 (SPI2)
+ #endif
+ #ifndef TMC_SW_SCK
+ #define TMC_SW_SCK PB13 // Shared with SPI header, Pin 4 (SPI2)
+ #endif
+#endif
+
+#if HAS_TMC_UART
+ #define X_SERIAL_TX_PIN PD9 // X_CS_PIN
+ #define X_SERIAL_RX_PIN X_SERIAL_TX_PIN
+
+ #define Y_SERIAL_TX_PIN PD8 // Y_CS_PIN
+ #define Y_SERIAL_RX_PIN Y_SERIAL_TX_PIN
+
+ #define Z_SERIAL_TX_PIN PB10 // Z_CS_PIN
+ #define Z_SERIAL_RX_PIN Z_SERIAL_TX_PIN
+
+ #define E0_SERIAL_TX_PIN PB2 // E0_CS_PIN
+ #define E0_SERIAL_RX_PIN E0_SERIAL_TX_PIN
+
+ #define E1_SERIAL_TX_PIN PA6 // E1_CS_PIN
+ #define E1_SERIAL_RX_PIN E1_SERIAL_TX_PIN
+
+ // Reduce baud rate to improve software serial reliability
+ #define TMC_BAUD_RATE 19200
+#endif
+
+//
+// Temperature Sensors
+//
+#define TEMP_0_PIN PA1 // Analog Input "TH0"
+#define TEMP_1_PIN PA2 // Analog Input "TH1"
+#define TEMP_BED_PIN PA0 // Analog Input "TB"
+
+//
+// Heaters / Fans
+//
+#define HEATER_0_PIN PC5 // "HE0"
+#define HEATER_1_PIN PA7 // "HE1"
+#define HEATER_BED_PIN PA5 // "HB"
+
+#define FAN_PIN PA4 // "FAN0"
+#define FAN1_PIN PA3 // "FAN1"
+
+//
+// Auto fans
+//
+#ifndef E0_AUTO_FAN_PIN
+ #define E0_AUTO_FAN_PIN FAN1_PIN
+#endif
+
+/**
+ * ------ ------
+ * (BEEPER) PD5 | 1 2 | PD4 (BTN_ENC) (MISO) PB14 | 1 2 | PB13 (SCK)
+ * (LCD_EN) PB3 | 3 4 | PD6 (LCD_RS) (BTN_EN1) PB8 | 3 4 | PB9 (SD_SS)
+ * (LCD_D4) PB5 | 5 6 PB4 (LCD_D5) (BTN_EN2) PC10 | 5 6 PB15 (MOSI)
+ * (LCD_D6) PB7 | 7 8 | PB6 (LCD_D7) (SD_DETECT) PC12 | 7 8 | PF2
+ * GND | 9 10 | 5V GND | 9 10 | --
+ * ------ ------
+ * EXP1 EXP2
+ */
+#define EXP1_01_PIN PD5
+#define EXP1_02_PIN PD4
+#define EXP1_03_PIN PB3
+#define EXP1_04_PIN PD6
+#define EXP1_05_PIN PB5
+#define EXP1_06_PIN PB4
+#define EXP1_07_PIN PB7
+#define EXP1_08_PIN PB6
+
+#define EXP2_01_PIN PB14
+#define EXP2_02_PIN PB13
+#define EXP2_03_PIN PB8
+#define EXP2_04_PIN PB9
+#define EXP2_05_PIN PC10
+#define EXP2_06_PIN PB15
+#define EXP2_07_PIN PC12
+#define EXP2_08_PIN -1
+
+//
+// Onboard SD card
+// Must use soft SPI because Marlin's default hardware SPI is tied to LCD's EXP2
+//
+#if SD_CONNECTION_IS(LCD)
+ #define SDSS EXP2_04_PIN
+ #define SD_SS_PIN SDSS
+ #define SD_SCK_PIN EXP2_02_PIN
+ #define SD_MISO_PIN EXP2_01_PIN
+ #define SD_MOSI_PIN EXP2_06_PIN
+ #define SD_DETECT_PIN EXP2_07_PIN
+#elif SD_CONNECTION_IS(ONBOARD)
+ #define SD_SCK_PIN PB13
+ #define SD_MISO_PIN PB14
+ #define SD_MOSI_PIN PB15
+ #define ONBOARD_SD_CS_PIN PC1 // Chip select for "System" SD card
+ #define SD_SS_PIN ONBOARD_SD_CS_PIN
+#elif SD_CONNECTION_IS(CUSTOM_CABLE)
+ #error "No custom SD drive cable defined for this board."
+#endif
+
+//
+// LCDs and Controllers
+//
+#if IS_TFTGLCD_PANEL
+
+ #if ENABLED(TFTGLCD_PANEL_SPI)
+ #define TFTGLCD_CS EXP2_03_PIN
+ #endif
+
+#elif HAS_WIRED_LCD
+
+ #define BEEPER_PIN EXP1_01_PIN
+ #define BTN_ENC EXP1_02_PIN
+
+ #if ENABLED(CR10_STOCKDISPLAY)
+
+ #define LCD_PINS_RS EXP1_07_PIN
+
+ #define BTN_EN1 EXP1_03_PIN
+ #define BTN_EN2 EXP1_05_PIN
+
+ #define LCD_PINS_ENABLE EXP1_08_PIN
+ #define LCD_PINS_D4 EXP1_06_PIN
+
+ #elif ENABLED(MKS_MINI_12864)
+
+ #define DOGLCD_A0 EXP1_07_PIN
+ #define DOGLCD_CS EXP1_06_PIN
+ #define BTN_EN1 EXP2_03_PIN
+ #define BTN_EN2 EXP2_05_PIN
+
+ #else
+
+ #define LCD_PINS_RS EXP1_04_PIN
+
+ #define BTN_EN1 EXP2_03_PIN
+ #define BTN_EN2 EXP2_05_PIN
+
+ #define LCD_PINS_ENABLE EXP1_03_PIN
+ #define LCD_PINS_D4 EXP1_05_PIN
+
+ #if ENABLED(FYSETC_MINI_12864)
+ #define DOGLCD_CS EXP1_03_PIN
+ #define DOGLCD_A0 EXP1_04_PIN
+ //#define LCD_BACKLIGHT_PIN -1
+
+ #define FORCE_SOFT_SPI // Use this if default of hardware SPI causes display problems
+ // results in LCD soft SPI mode 3, SD soft SPI mode 0
+
+ #define LCD_RESET_PIN EXP1_05_PIN // Must be high or open for LCD to operate normally.
+ #if EITHER(FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0)
+ #ifndef RGB_LED_R_PIN
+ #define RGB_LED_R_PIN EXP1_06_PIN
+ #endif
+ #ifndef RGB_LED_G_PIN
+ #define RGB_LED_G_PIN EXP1_07_PIN
+ #endif
+ #ifndef RGB_LED_B_PIN
+ #define RGB_LED_B_PIN EXP1_08_PIN
+ #endif
+ #elif ENABLED(FYSETC_MINI_12864_2_1)
+ #define NEOPIXEL_PIN EXP1_06_PIN
+ #endif
+ #endif // !FYSETC_MINI_12864
+
+ #if IS_ULTIPANEL
+ #define LCD_PINS_D5 EXP1_06_PIN
+ #define LCD_PINS_D6 EXP1_07_PIN
+ #define LCD_PINS_D7 EXP1_08_PIN
+
+ #if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
+ #define BTN_ENC_EN LCD_PINS_D7 // Detect the presence of the encoder
+ #endif
+
+ #endif
+
+ #endif
+
+#endif // HAS_WIRED_LCD
+
+// Alter timing for graphical display
+#if IS_U8GLIB_ST7920
+ #ifndef BOARD_ST7920_DELAY_1
+ #define BOARD_ST7920_DELAY_1 120
+ #endif
+ #ifndef BOARD_ST7920_DELAY_2
+ #define BOARD_ST7920_DELAY_2 80
+ #endif
+ #ifndef BOARD_ST7920_DELAY_3
+ #define BOARD_ST7920_DELAY_3 580
+ #endif
+#endif
+
+//
+// NeoPixel LED
+//
+#ifndef NEOPIXEL_PIN
+ #define NEOPIXEL_PIN PC11 // RGB1
+#endif
+
+#ifndef NEOPIXEL2_PIN
+ #define NEOPIXEL2_PIN PC14 // RGB2
+#endif
diff --git a/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M8P_V1_0.h b/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M8P_V1_0.h
new file mode 100644
index 0000000000..4f8d30b6b7
--- /dev/null
+++ b/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M8P_V1_0.h
@@ -0,0 +1,79 @@
+/**
+ * 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 common Manta M8P pins
+#include "pins_BTT_MANTA_M8P_common.h"
+
+#ifndef BOARD_INFO_NAME
+ #define BOARD_INFO_NAME "BTT Manta M8P V1.0"
+#endif
+
+//
+// Steppers
+//
+
+#define E1_STEP_PIN PA10 // M6
+#define E1_DIR_PIN PD15
+#define E1_ENABLE_PIN PA15
+#ifndef E1_CS_PIN
+ #define E1_CS_PIN PF8
+#endif
+
+#define E2_STEP_PIN PD12 // M7
+#define E2_DIR_PIN PD11
+#define E2_ENABLE_PIN PD14
+#ifndef E2_CS_PIN
+ #define E2_CS_PIN PD13
+#endif
+
+#define E3_STEP_PIN PD10 // M8
+#define E3_DIR_PIN PD8
+#define E3_ENABLE_PIN PD9
+#ifndef E3_CS_PIN
+ #define E3_CS_PIN PC7
+#endif
+
+#if HAS_TMC_UART
+ #define E1_SERIAL_TX_PIN PF8
+ #define E1_SERIAL_RX_PIN E1_SERIAL_TX_PIN
+
+ #define E2_SERIAL_TX_PIN PD13
+ #define E2_SERIAL_RX_PIN E2_SERIAL_TX_PIN
+
+ #define E3_SERIAL_TX_PIN PC7
+ #define E3_SERIAL_RX_PIN E3_SERIAL_TX_PIN
+
+ // Reduce baud rate to improve software serial reliability
+ #define TMC_BAUD_RATE 19200
+#endif
+
+//
+// NeoPixel LED
+//
+#ifndef NEOPIXEL_PIN
+ #define NEOPIXEL_PIN PC6
+#endif
+
+#ifndef NEOPIXEL2_PIN
+ #define NEOPIXEL2_PIN PA9
+#endif
diff --git a/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M8P_V1_1.h b/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M8P_V1_1.h
new file mode 100644
index 0000000000..a21bb59e69
--- /dev/null
+++ b/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M8P_V1_1.h
@@ -0,0 +1,78 @@
+/**
+ * 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 common Manta M8P pins
+#include "pins_BTT_MANTA_M8P_common.h"
+
+#ifndef BOARD_INFO_NAME
+ #define BOARD_INFO_NAME "BTT Manta M8P V1.1"
+#endif
+
+//
+// Steppers
+//
+#define E1_STEP_PIN PA10 // M6
+#define E1_DIR_PIN PA14
+#define E1_ENABLE_PIN PA15
+#ifndef E1_CS_PIN
+ #define E1_CS_PIN PF8
+#endif
+
+#define E2_STEP_PIN PD11 // M7
+#define E2_DIR_PIN PD9
+#define E2_ENABLE_PIN PD15
+#ifndef E2_CS_PIN
+ #define E2_CS_PIN PD14
+#endif
+
+#define E3_STEP_PIN PD8 // M8
+#define E3_DIR_PIN PC6
+#define E3_ENABLE_PIN PC7
+#ifndef E3_CS_PIN
+ #define E3_CS_PIN PD10
+#endif
+
+#if HAS_TMC_UART
+ #define E1_SERIAL_TX_PIN PF8
+ #define E1_SERIAL_RX_PIN E1_SERIAL_TX_PIN
+
+ #define E2_SERIAL_TX_PIN PD14
+ #define E2_SERIAL_RX_PIN E2_SERIAL_TX_PIN
+
+ #define E3_SERIAL_TX_PIN PD10
+ #define E3_SERIAL_RX_PIN E3_SERIAL_TX_PIN
+
+ // Reduce baud rate to improve software serial reliability
+ #define TMC_BAUD_RATE 19200
+#endif
+
+//
+// NeoPixel LED
+//
+#ifndef NEOPIXEL_PIN
+ #define NEOPIXEL_PIN PA9
+#endif
+
+#ifndef NEOPIXEL2_PIN
+ #define NEOPIXEL2_PIN PB15
+#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
new file mode 100644
index 0000000000..0d4a74b6f9
--- /dev/null
+++ b/Marlin/src/pins/stm32g0/pins_BTT_MANTA_M8P_common.h
@@ -0,0 +1,397 @@
+/**
+ * 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_CUSTOM_BUILD_FLAGS -DTONE_CHANNEL=4 -DTONE_TIMER=4 -DTIMER_TONE=4
+
+#define USES_DIAG_JUMPERS
+
+// Ignore temp readings during development.
+//#define BOGUS_TEMPERATURE_GRACE_PERIOD 2000
+
+//
+// EEPROM
+//
+#if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION)
+ #undef NO_EEPROM_SELECTED
+ #ifndef FLASH_EEPROM_EMULATION
+ #define FLASH_EEPROM_EMULATION
+ #endif
+ #define EEPROM_PAGE_SIZE (0x800UL) // 2K
+ #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL)
+ #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE
+#endif
+
+//
+// Servos
+//
+#define SERVO0_PIN PB1 // PROBE
+
+//
+// Probe enable
+//
+#if ENABLED(PROBE_ENABLE_DISABLE)
+ #ifndef PROBE_ENABLE_PIN
+ #define PROBE_ENABLE_PIN SERVO0_PIN
+ #endif
+#endif
+
+//
+// Trinamic Stallguard pins
+//
+#define X_DIAG_PIN PF3 // MIN1
+#define Y_DIAG_PIN PF4 // MIN2
+#define Z_DIAG_PIN PF5 // MIN3
+#define Z2_DIAG_PIN PC0 // MIN4
+#define E0_DIAG_PIN PC1 // MIN5
+#define E1_DIAG_PIN PC2 // MIN6
+
+//
+// Z Probe (when not Z_MIN_PIN)
+//
+#ifndef Z_MIN_PROBE_PIN
+ #define Z_MIN_PROBE_PIN PB2 // PROBE
+ //#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 1
+ #endif
+ #if _ENDSTOP_IS_ANY(_YMIN_) || _ENDSTOP_IS_ANY(_YMAX_)
+ #define NEEDS_Y_MINMAX 1
+ #endif
+ #undef _ENDSTOP_IS_ANY
+#endif
+
+//
+// Limit Switches
+//
+#ifdef X_STALL_SENSITIVITY
+ #define X_STOP_PIN X_DIAG_PIN
+ #if X_HOME_TO_MIN
+ #define X_MAX_PIN E0_DIAG_PIN // MIN5
+ #else
+ #define X_MIN_PIN E0_DIAG_PIN // MIN5
+ #endif
+#elif EITHER(DUAL_X_CARRIAGE, NEEDS_X_MINMAX)
+ #ifndef X_MIN_PIN
+ #define X_MIN_PIN X_DIAG_PIN // MIN1
+ #endif
+ #ifndef X_MAX_PIN
+ #define X_MAX_PIN E0_DIAG_PIN // MIN5
+ #endif
+#else
+ #define X_STOP_PIN X_DIAG_PIN // MIN1
+#endif
+
+#ifdef Y_STALL_SENSITIVITY
+ #define Y_STOP_PIN Y_DIAG_PIN
+ #if Y_HOME_TO_MIN
+ #define Y_MAX_PIN E1_DIAG_PIN // MIN6
+ #else
+ #define Y_MIN_PIN E1_DIAG_PIN // MIN6
+ #endif
+#elif NEEDS_Y_MINMAX
+ #ifndef Y_MIN_PIN
+ #define Y_MIN_PIN Y_DIAG_PIN // MIN2
+ #endif
+ #ifndef Y_MAX_PIN
+ #define Y_MAX_PIN E1_DIAG_PIN // MIN6
+ #endif
+#else
+ #define Y_STOP_PIN Y_DIAG_PIN // MIN2
+#endif
+
+#define Z_STOP_PIN Z_DIAG_PIN // MIN3
+
+#undef NEEDS_X_MINMAX
+#undef NEEDS_Y_MINMAX
+
+//
+// Filament Runout Sensors
+//
+#define FIL_RUNOUT_PIN PC1 // MIN5
+#define FIL_RUNOUT2_PIN PC2 // MIN6
+
+#ifndef PS_ON_PIN
+ #define PS_ON_PIN PC3 // PS-ON
+#endif
+
+//
+// Steppers
+//
+#define X_STEP_PIN PE2 // M1
+#define X_DIR_PIN PB4
+#define X_ENABLE_PIN PC11
+#ifndef X_CS_PIN
+ #define X_CS_PIN PC10
+#endif
+
+#define Y_STEP_PIN PF12 // M2
+#define Y_DIR_PIN PF11
+#define Y_ENABLE_PIN PB3
+#ifndef Y_CS_PIN
+ #define Y_CS_PIN PF13
+#endif
+
+#define Z_STEP_PIN PD7 // M3
+#define Z_DIR_PIN PD6
+#define Z_ENABLE_PIN PF10
+#ifndef Z_CS_PIN
+ #define Z_CS_PIN PF9
+#endif
+
+#define Z2_STEP_PIN PD3 // M4
+#define Z2_DIR_PIN PD2
+#define Z2_ENABLE_PIN PD5
+#ifndef Z2_CS_PIN
+ #define Z2_CS_PIN PD4
+#endif
+
+#define E0_STEP_PIN PC9 // M5
+#define E0_DIR_PIN PC8
+#define E0_ENABLE_PIN PD1
+#ifndef E0_CS_PIN
+ #define E0_CS_PIN PD0
+#endif
+
+//
+// Software SPI pins for TMC2130 stepper drivers
+//
+#if ENABLED(TMC_USE_SW_SPI)
+ #ifndef TMC_SW_MOSI
+ #define TMC_SW_MOSI PA7
+ #endif
+ #ifndef TMC_SW_MISO
+ #define TMC_SW_MISO PA6
+ #endif
+ #ifndef TMC_SW_SCK
+ #define TMC_SW_SCK PA5
+ #endif
+#endif
+
+#if HAS_TMC_UART
+ #define X_SERIAL_TX_PIN PC10
+ #define X_SERIAL_RX_PIN X_SERIAL_TX_PIN
+
+ #define Y_SERIAL_TX_PIN PF13
+ #define Y_SERIAL_RX_PIN Y_SERIAL_TX_PIN
+
+ #define Z_SERIAL_TX_PIN PF9
+ #define Z_SERIAL_RX_PIN Z_SERIAL_TX_PIN
+
+ #define Z2_SERIAL_TX_PIN PD4
+ #define Z2_SERIAL_RX_PIN Z2_SERIAL_TX_PIN
+
+ #define E0_SERIAL_TX_PIN PD0
+ #define E0_SERIAL_RX_PIN E0_SERIAL_TX_PIN
+
+ // Reduce baud rate to improve software serial reliability
+ #define TMC_BAUD_RATE 19200
+#endif
+
+//
+// Temperature Sensors
+//
+#define TEMP_BED_PIN PA0 // TB
+#define TEMP_0_PIN PA1 // TH0
+#define TEMP_1_PIN PA2 // TH1
+#define TEMP_2_PIN PA3 // TH2
+#define TEMP_3_PIN PA4 // TH3
+
+//
+// Heaters / Fans
+//
+#define HEATER_BED_PIN PB7 // BED-OUT
+#define HEATER_0_PIN PE3 // HE0
+#define HEATER_1_PIN PB5 // HE1
+#define HEATER_2_PIN PB6 // HE2
+#define HEATER_3_PIN PE1 // HE3
+
+#define FAN_PIN PE6 // FAN0
+#define FAN1_PIN PE0 // FAN1
+#define FAN2_PIN PC12 // FAN2
+#define FAN3_PIN PE5 // FAN3
+#define FAN4_PIN PE4 // FAN4
+#define FAN5_PIN PB8 // FAN5
+#define FAN6_PIN PB9 // FAN6
+
+//
+// SD Support
+//
+#ifndef SDCARD_CONNECTION
+ #if HAS_WIRED_LCD
+ #define SDCARD_CONNECTION LCD
+ #else
+ #define SDCARD_CONNECTION ONBOARD
+ #endif
+#endif
+
+/**
+ * ------ ------
+ * (BEEPER) PE9 | 1 2 | PE10 (BTN_ENC) (MISO) PB14 | 1 2 | PB13 (SCK)
+ * (LCD_EN) PE11 | 3 4 | PE12 (LCD_RS) (BTN_EN1) PF7 | 3 4 | PB12 (SD_SS)
+ * (LCD_D4) PE13 | 5 6 PE14 (LCD_D5) (BTN_EN2) PE7 | 5 6 PB11 (MOSI)
+ * (LCD_D6) PE15 | 7 8 | PB10 (LCD_D7) (SD_DETECT) PE8 | 7 8 | RESET
+ * GND | 9 10 | 5V GND | 9 10 | --
+ * ------ ------
+ * EXP1 EXP2
+ */
+#define EXP1_01_PIN PE9
+#define EXP1_02_PIN PE10
+#define EXP1_03_PIN PE11
+#define EXP1_04_PIN PE12
+#define EXP1_05_PIN PE13
+#define EXP1_06_PIN PE14
+#define EXP1_07_PIN PE15
+#define EXP1_08_PIN PB10
+
+#define EXP2_01_PIN PB14
+#define EXP2_02_PIN PB13
+#define EXP2_03_PIN PF7
+#define EXP2_04_PIN PB12
+#define EXP2_05_PIN PE7
+#define EXP2_06_PIN PB11
+#define EXP2_07_PIN PE8
+#define EXP2_08_PIN -1
+
+//
+// Onboard SD card
+// Must use soft SPI because Marlin's default hardware SPI is tied to LCD's EXP2
+//
+#if SD_CONNECTION_IS(LCD)
+ #define SDSS EXP2_04_PIN
+ #define SD_SS_PIN SDSS
+ #define SD_SCK_PIN EXP2_02_PIN
+ #define SD_MISO_PIN EXP2_01_PIN
+ #define SD_MOSI_PIN EXP2_06_PIN
+ #define SD_DETECT_PIN EXP2_07_PIN
+#elif SD_CONNECTION_IS(ONBOARD)
+ #define SD_DETECT_PIN PE8
+ #define SD_SCK_PIN PB13
+ #define SD_MISO_PIN PB14
+ #define SD_MOSI_PIN PB11
+ #define ONBOARD_SD_CS_PIN PB14 // Chip select for "System" SD card
+ #define SD_SS_PIN ONBOARD_SD_CS_PIN
+#elif SD_CONNECTION_IS(CUSTOM_CABLE)
+ #error "No custom SD drive cable defined for this board."
+#endif
+
+//
+// LCDs and Controllers
+//
+#if IS_TFTGLCD_PANEL
+
+ #if ENABLED(TFTGLCD_PANEL_SPI)
+ #define TFTGLCD_CS EXP2_03_PIN
+ #endif
+
+#elif HAS_WIRED_LCD
+
+ #define BEEPER_PIN EXP1_01_PIN
+ #define BTN_ENC EXP1_02_PIN
+
+ #if ENABLED(CR10_STOCKDISPLAY)
+
+ #define LCD_PINS_RS EXP1_07_PIN
+
+ #define BTN_EN1 EXP1_03_PIN
+ #define BTN_EN2 EXP1_05_PIN
+
+ #define LCD_PINS_ENABLE EXP1_08_PIN
+ #define LCD_PINS_D4 EXP1_06_PIN
+
+ #elif ENABLED(MKS_MINI_12864)
+
+ #define DOGLCD_A0 EXP1_07_PIN
+ #define DOGLCD_CS EXP1_06_PIN
+ #define BTN_EN1 EXP2_03_PIN
+ #define BTN_EN2 EXP2_05_PIN
+
+ #else
+
+ #define LCD_PINS_RS EXP1_04_PIN
+
+ #define BTN_EN1 EXP2_03_PIN
+ #define BTN_EN2 EXP2_05_PIN
+
+ #define LCD_PINS_ENABLE EXP1_03_PIN
+ #define LCD_PINS_D4 EXP1_05_PIN
+
+ #if ENABLED(FYSETC_MINI_12864)
+ #define DOGLCD_CS EXP1_03_PIN
+ #define DOGLCD_A0 EXP1_04_PIN
+ //#define LCD_BACKLIGHT_PIN -1
+
+ #define FORCE_SOFT_SPI // Use this if default of hardware SPI causes display problems
+ // results in LCD soft SPI mode 3, SD soft SPI mode 0
+
+ #define LCD_RESET_PIN EXP1_05_PIN // Must be high or open for LCD to operate normally.
+ #if EITHER(FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0)
+ #ifndef RGB_LED_R_PIN
+ #define RGB_LED_R_PIN EXP1_06_PIN
+ #endif
+ #ifndef RGB_LED_G_PIN
+ #define RGB_LED_G_PIN EXP1_07_PIN
+ #endif
+ #ifndef RGB_LED_B_PIN
+ #define RGB_LED_B_PIN EXP1_08_PIN
+ #endif
+ #elif ENABLED(FYSETC_MINI_12864_2_1)
+ #define NEOPIXEL_PIN EXP1_06_PIN
+ #endif
+ #endif // !FYSETC_MINI_12864
+
+ #if IS_ULTIPANEL
+ #define LCD_PINS_D5 EXP1_06_PIN
+ #define LCD_PINS_D6 EXP1_07_PIN
+ #define LCD_PINS_D7 EXP1_08_PIN
+
+ #if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
+ #define BTN_ENC_EN LCD_PINS_D7 // Detect the presence of the encoder
+ #endif
+
+ #endif
+
+ #endif
+
+#endif // HAS_WIRED_LCD
+
+// Alter timing for graphical display
+#if IS_U8GLIB_ST7920
+ #ifndef BOARD_ST7920_DELAY_1
+ #define BOARD_ST7920_DELAY_1 120
+ #endif
+ #ifndef BOARD_ST7920_DELAY_2
+ #define BOARD_ST7920_DELAY_2 80
+ #endif
+ #ifndef BOARD_ST7920_DELAY_3
+ #define BOARD_ST7920_DELAY_3 580
+ #endif
+#endif
diff --git a/Marlin/src/pins/stm32g0/pins_BTT_SKR_MINI_E3_V3_0.h b/Marlin/src/pins/stm32g0/pins_BTT_SKR_MINI_E3_V3_0.h
index f931d9924a..f71b7b40eb 100644
--- a/Marlin/src/pins/stm32g0/pins_BTT_SKR_MINI_E3_V3_0.h
+++ b/Marlin/src/pins/stm32g0/pins_BTT_SKR_MINI_E3_V3_0.h
@@ -21,6 +21,8 @@
*/
#pragma once
+#include "env_validate.h"
+
//#define BOARD_CUSTOM_BUILD_FLAGS -DTONE_CHANNEL=4 -DTONE_TIMER=4 -DTIMER_TONE=4
#ifndef BOARD_INFO_NAME
diff --git a/buildroot/share/PlatformIO/boards/marlin_STM32G0B1VE.json b/buildroot/share/PlatformIO/boards/marlin_STM32G0B1VE.json
new file mode 100644
index 0000000000..a3ac6ea679
--- /dev/null
+++ b/buildroot/share/PlatformIO/boards/marlin_STM32G0B1VE.json
@@ -0,0 +1,47 @@
+{
+ "build": {
+ "core": "stm32",
+ "cpu": "cortex-m0plus",
+ "extra_flags": "-DSTM32G0xx -DSTM32G0B1xx",
+ "f_cpu": "64000000L",
+ "framework_extra_flags": {
+ "arduino": "-D__CORTEX_SC=0"
+ },
+ "mcu": "stm32g0b1vet6",
+ "product_line": "STM32G0B1xx",
+ "variant": "MARLIN_G0B1VE"
+ },
+ "debug": {
+ "default_tools": [
+ "stlink"
+ ],
+ "jlink_device": "STM32G0B1VE",
+ "onboard_tools": [
+ "stlink"
+ ],
+ "openocd_target": "stm32g0x",
+ "svd_path": "STM32G0B1.svd"
+ },
+ "frameworks": [
+ "arduino",
+ "cmsis",
+ "libopencm3",
+ "stm32cube",
+ "zephyr"
+ ],
+ "name": "STM32G0B1VE",
+ "upload": {
+ "maximum_ram_size": 147456,
+ "maximum_size": 524288,
+ "protocol": "stlink",
+ "protocols": [
+ "stlink",
+ "jlink",
+ "cmsis-dap",
+ "blackmagic",
+ "mbed"
+ ]
+ },
+ "url": "https://www.st.com/content/st_com/en/products/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus/stm32-mainstream-mcus/stm32g0-series/stm32g0x1.html",
+ "vendor": "ST"
+}
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/PeripheralPins.c b/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/PeripheralPins.c
index eb95de1495..3187367a2d 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/PeripheralPins.c
+++ b/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/PeripheralPins.c
@@ -218,6 +218,7 @@ WEAK const PinMap PinMap_UART_TX[] = {
{PC_12, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART5)},
{PD_3, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART5)},
{PD_5, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART2)},
+ {PD_8, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
{PF_2, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART2)},
{NC, NP, 0}
};
@@ -252,6 +253,7 @@ WEAK const PinMap PinMap_UART_RX[] = {
{PC_11_ALT1, USART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART4)},
{PD_2, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART5)},
{PD_6, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART2)},
+ {PD_9, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
{NC, NP, 0}
};
#endif
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.cpp b/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.cpp
index d18509f35f..fa4ebfa713 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.cpp
+++ b/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.cpp
@@ -130,14 +130,7 @@ WEAK void SystemClock_Config(void)
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
// Reset clock registers (in case bootloader has changed them)
- RCC->CR |= RCC_CR_HSION;
- while (!(RCC->CR & RCC_CR_HSIRDY))
- ;
- RCC->CFGR = 0x00000000;
- RCC->CR = RCC_CR_HSION;
- while (RCC->CR & RCC_CR_PLLRDY)
- ;
- RCC->PLLCFGR = 0x00001000;
+ SystemInit();
/** Configure the main internal regulator output voltage
*/
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h b/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h
index 6a26baff45..23cecd371a 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h
@@ -158,6 +158,9 @@
#endif
// UART Definitions
+//#define ENABLE_HWSERIAL1 done automatically by the #define SERIAL_UART_INSTANCE below
+#define ENABLE_HWSERIAL3
+
#ifndef SERIAL_UART_INSTANCE
#define SERIAL_UART_INSTANCE 2
#endif
@@ -171,6 +174,15 @@
#define PIN_SERIAL_TX PA2
#endif
+// Optional PIN_SERIALn_RX and PIN_SERIALn_TX where 'n' is the U(S)ART number
+// Used when user instantiate 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 PA3
+#define PIN_SERIAL1_TX PA2
+#define PIN_SERIAL3_RX PD9
+#define PIN_SERIAL3_TX PD8
+
/*----------------------------------------------------------------------------
* Arduino objects - C++ only
*----------------------------------------------------------------------------*/
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/PeripheralPins.c b/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/PeripheralPins.c
new file mode 100644
index 0000000000..a6b1e44237
--- /dev/null
+++ b/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/PeripheralPins.c
@@ -0,0 +1,480 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2020-2021, 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
+ *
+ *******************************************************************************
+ */
+/*
+ * Automatically generated from STM32G0B1V(B-C-E)Ix.xml, STM32G0B1V(B-C-E)Tx.xml
+ * STM32G0B1V(C-E)Ix.xml, STM32G0B1V(C-E)Tx.xml
+ * STM32G0C1V(C-E)Ix.xml, STM32G0C1V(C-E)Tx.xml
+ * CubeMX DB release 6.0.30
+ */
+#if !defined(CUSTOM_PERIPHERAL_PINS)
+#include "Arduino.h"
+#include "PeripheralPins.h"
+
+/* =====
+ * Notes:
+ * - The pins mentioned Px_y_ALTz are alternative possibilities which use other
+ * HW peripheral instances. You can use them the same way as any other "normal"
+ * pin (i.e. analogWrite(PA7_ALT1, 128);).
+ *
+ * - 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
+ {PB_2, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10
+ {PB_10, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11
+ {PB_11, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_IN15
+ {PB_12, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)}, // ADC1_IN16
+ {PC_4, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)}, // ADC1_IN17
+ {PC_5, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)}, // ADC1_IN18
+ {NC, NP, 0}
+};
+#endif
+
+//*** DAC ***
+
+#ifdef HAL_DAC_MODULE_ENABLED
+WEAK const PinMap PinMap_DAC[] = {
+ {PA_4, DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC1_OUT1
+ {PA_5, DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC1_OUT2
+ {NC, NP, 0}
+};
+#endif
+
+//*** I2C ***
+
+#ifdef HAL_I2C_MODULE_ENABLED
+WEAK const PinMap PinMap_I2C_SDA[] = {
+ {PA_6, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF8_I2C2)},
+ {PA_6_ALT1, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C3)},
+ {PA_10, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C1)},
+ {PA_10_ALT1, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF8_I2C2)},
+ {PA_10_R, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C1)},
+ {PA_10_R_ALT1, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF8_I2C2)},
+ {PA_12, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C2)},
+ {PB_4, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF8_I2C2)},
+ {PB_4_ALT1, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C3)},
+ {PB_7, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C1)},
+ {PB_9, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C1)},
+ {PB_11, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C2)},
+ {PB_14, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C2)},
+ {PC_1, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C3)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_I2C_MODULE_ENABLED
+WEAK const PinMap PinMap_I2C_SCL[] = {
+ {PA_7, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF8_I2C2)},
+ {PA_7_ALT1, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C3)},
+ {PA_9, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C1)},
+ {PA_9_ALT1, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF8_I2C2)},
+ {PA_9_R, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C1)},
+ {PA_9_R_ALT1, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF8_I2C2)},
+ {PA_11, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C2)},
+ {PB_3, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF8_I2C2)},
+ {PB_3_ALT1, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C3)},
+ {PB_6, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C1)},
+ {PB_8, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C1)},
+ {PB_10, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C2)},
+ {PB_13, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C2)},
+ {PC_0, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF6_I2C3)},
+ {NC, NP, 0}
+};
+#endif
+
+//*** TIM ***
+
+#ifdef HAL_TIM_MODULE_ENABLED
+WEAK const PinMap PinMap_TIM[] = {
+ {PA_0, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 1, 0)}, // TIM2_CH1
+ {PA_1, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 2, 0)}, // TIM2_CH2
+ {PA_1_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM15, 1, 1)}, // TIM15_CH1N
+ {PA_2, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 3, 0)}, // TIM2_CH3
+ {PA_2_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM15, 1, 0)}, // TIM15_CH1
+ {PA_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 4, 0)}, // TIM2_CH4
+ {PA_3_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM15, 2, 0)}, // TIM15_CH2
+ {PA_4, TIM14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM14, 1, 0)}, // TIM14_CH1
+ {PA_5, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 1, 0)}, // TIM2_CH1
+ {PA_6, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 1, 0)}, // TIM3_CH1
+ {PA_6_ALT1, TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM16, 1, 0)}, // TIM16_CH1
+ {PA_7, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 1, 1)}, // TIM1_CH1N
+ {PA_7_ALT1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 2, 0)}, // TIM3_CH2
+ {PA_7_ALT2, TIM14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM14, 1, 0)}, // TIM14_CH1
+ {PA_7_ALT3, TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM17, 1, 0)}, // TIM17_CH1
+ {PA_8, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 1, 0)}, // TIM1_CH1
+ {PA_9, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 2, 0)}, // TIM1_CH2
+ {PA_9_R, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 2, 0)}, // TIM1_CH2
+ {PA_10, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 3, 0)}, // TIM1_CH3
+ {PA_10_R, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 3, 0)}, // TIM1_CH3
+ {PA_11, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 4, 0)}, // TIM1_CH4
+ {PA_15, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 1, 0)}, // TIM2_CH1
+ {PB_0, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 2, 1)}, // TIM1_CH2N
+ {PB_0_ALT1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 3, 0)}, // TIM3_CH3
+ {PB_1, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 3, 1)}, // TIM1_CH3N
+ {PB_1_ALT1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 4, 0)}, // TIM3_CH4
+ {PB_1_ALT2, TIM14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_TIM14, 1, 0)}, // TIM14_CH1
+ {PB_3, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2
+ {PB_3_ALT1, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 2, 0)}, // TIM2_CH2
+ {PB_4, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 1, 0)}, // TIM3_CH1
+ {PB_5, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 2, 0)}, // TIM3_CH2
+ {PB_6, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3
+ {PB_6_ALT1, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM4, 1, 0)}, // TIM4_CH1
+ {PB_6_ALT2, TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM16, 1, 1)}, // TIM16_CH1N
+ {PB_7, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM4, 2, 0)}, // TIM4_CH2
+ {PB_7_ALT1, TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM17, 1, 1)}, // TIM17_CH1N
+ {PB_8, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM4, 3, 0)}, // TIM4_CH3
+ {PB_8_ALT1, TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM16, 1, 0)}, // TIM16_CH1
+ {PB_9, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM4, 4, 0)}, // TIM4_CH4
+ {PB_9_ALT1, TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM17, 1, 0)}, // TIM17_CH1
+ {PB_10, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 3, 0)}, // TIM2_CH3
+ {PB_11, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 4, 0)}, // TIM2_CH4
+ {PB_13, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 1, 1)}, // TIM1_CH1N
+ {PB_13_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM15, 1, 1)}, // TIM15_CH1N
+ {PB_14, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 2, 1)}, // TIM1_CH2N
+ {PB_14_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM15, 1, 0)}, // TIM15_CH1
+ {PB_15, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 3, 1)}, // TIM1_CH3N
+ {PB_15_ALT1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_TIM15, 1, 1)}, // TIM15_CH1N
+ {PB_15_ALT2, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_TIM15, 2, 0)}, // TIM15_CH2
+ {PC_1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM15, 1, 0)}, // TIM15_CH1
+ {PC_2, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM15, 2, 0)}, // TIM15_CH2
+ {PC_4, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 1, 0)}, // TIM2_CH1
+ {PC_5, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 2, 0)}, // TIM2_CH2
+ {PC_6, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 3, 0)}, // TIM2_CH3
+ {PC_6_ALT1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 1, 0)}, // TIM3_CH1
+ {PC_7, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM2, 4, 0)}, // TIM2_CH4
+ {PC_7_ALT1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 2, 0)}, // TIM3_CH2
+ {PC_8, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 1, 0)}, // TIM1_CH1
+ {PC_8_ALT1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 3, 0)}, // TIM3_CH3
+ {PC_9, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 2, 0)}, // TIM1_CH2
+ {PC_9_ALT1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 4, 0)}, // TIM3_CH4
+ {PC_10, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 3, 0)}, // TIM1_CH3
+ {PC_11, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 4, 0)}, // TIM1_CH4
+ {PC_12, TIM14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM14, 1, 0)}, // TIM14_CH1
+ {PD_0, TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM16, 1, 0)}, // TIM16_CH1
+ {PD_1, TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM17, 1, 0)}, // TIM17_CH1
+ {PD_2, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 1, 1)}, // TIM1_CH1N
+ {PD_3, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 2, 1)}, // TIM1_CH2N
+ {PD_4, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM1, 3, 1)}, // TIM1_CH3N
+ {PD_12, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1
+ {PD_13, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2
+ {PD_14, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3
+ {PD_15, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
+ {PE_0, TIM16, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_TIM16, 1, 0)}, // TIM16_CH1
+ {PE_1, TIM17, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_TIM17, 1, 0)}, // TIM17_CH1
+ {PE_3, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 1, 0)}, // TIM3_CH1
+ {PE_4, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 2, 0)}, // TIM3_CH2
+ {PE_5, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 3, 0)}, // TIM3_CH3
+ {PE_6, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM3, 4, 0)}, // TIM3_CH4
+ {PE_8, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
+ {PE_9, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1
+ {PE_10, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
+ {PE_11, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2
+ {PE_12, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
+ {PE_13, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3
+ {PE_14, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4
+ {PF_0, TIM14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM14, 1, 0)}, // TIM14_CH1
+ {PF_1, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM15, 1, 1)}, // TIM15_CH1N
+ {PF_12, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_TIM15, 1, 0)}, // TIM15_CH1
+ {PF_13, TIM15, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_TIM15, 2, 0)}, // TIM15_CH2
+ {NC, NP, 0}
+};
+#endif
+
+//*** UART ***
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_TX[] = {
+ {PA_0, USART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART4)},
+ {PA_2, LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_LPUART1)},
+ {PA_2_ALT1, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART2)},
+ {PA_4, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART6)},
+ {PA_5, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
+ {PA_9, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART1)},
+ {PA_9_R, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART1)},
+ {PA_14, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_LPUART2)},
+ {PA_14_ALT1, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART2)},
+ {PB_0, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART5)},
+ {PB_2, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
+ {PB_3, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART5)},
+ {PB_6, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_LPUART2)},
+ {PB_6_ALT1, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART1)},
+ {PB_8, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
+ {PB_8_ALT1, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
+ {PB_10, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
+ {PB_11, LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART1)},
+ {PC_0, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART2)},
+ {PC_0_ALT1, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART6)},
+ {PC_1, LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART1)},
+ {PC_4, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART1)},
+ {PC_4_ALT1, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART3)},
+ {PC_6, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART2)},
+ {PC_10, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART3)},
+ {PC_10_ALT1, USART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART4)},
+ {PC_12, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART5)},
+ {PD_3, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART5)},
+ {PD_5, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART2)},
+ {PD_8, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART3)},
+ {PE_8, USART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART4)},
+ {PE_10, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART5)},
+ {PF_2, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART2)},
+ {PF_4, LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART1)},
+ {PF_9, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART6)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_RX[] = {
+ {PA_1, USART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART4)},
+ {PA_3, LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_LPUART1)},
+ {PA_3_ALT1, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART2)},
+ {PA_5, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART6)},
+ {PA_10, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART1)},
+ {PA_10_R, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART1)},
+ {PA_13, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_LPUART2)},
+ {PA_15, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART2)},
+ {PB_0, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
+ {PB_1, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART5)},
+ {PB_4, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART5)},
+ {PB_7, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_LPUART2)},
+ {PB_7_ALT1, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART1)},
+ {PB_9, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
+ {PB_9_ALT1, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
+ {PB_10, LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART1)},
+ {PB_11, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
+ {PC_0, LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART1)},
+ {PC_1, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART2)},
+ {PC_1_ALT1, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART6)},
+ {PC_5, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART1)},
+ {PC_5_ALT1, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART3)},
+ {PC_7, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART2)},
+ {PC_11, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART3)},
+ {PC_11_ALT1, USART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART4)},
+ {PD_2, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART5)},
+ {PD_6, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART2)},
+ {PD_9, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART3)},
+ {PE_9, USART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART4)},
+ {PE_11, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART5)},
+ {PF_3, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART2)},
+ {PF_5, LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART1)},
+ {PF_10, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART6)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_RTS[] = {
+ {PA_1, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART2)},
+ {PA_7, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART6)},
+ {PA_12, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART1)},
+ {PA_15, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_USART3)},
+ {PA_15_ALT1, USART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART4)},
+ {PB_1, LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_LPUART1)},
+ {PB_1_ALT1, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_LPUART2)},
+ {PB_1_ALT2, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
+ {PB_3, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART1)},
+ {PB_5, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART5)},
+ {PB_12, LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART1)},
+ {PB_14, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
+ {PB_14_ALT1, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
+ {PC_9, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART2)},
+ {PD_2, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART3)},
+ {PD_4, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART2)},
+ {PD_4_ALT1, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART5)},
+ {PD_12, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART3)},
+ {PD_15, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART2)},
+ {PE_7, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART5)},
+ {PF_2, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART2)},
+ {PF_3, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART6)},
+ {PF_6, LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART1)},
+ {PF_11, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART6)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_UART_MODULE_ENABLED
+WEAK const PinMap PinMap_UART_CTS[] = {
+ {PA_0, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART2)},
+ {PA_6, LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_LPUART1)},
+ {PA_6_ALT1, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
+ {PA_6_ALT2, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART6)},
+ {PA_11, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_USART1)},
+ {PB_0, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_LPUART2)},
+ {PB_4, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART1)},
+ {PB_6, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART5)},
+ {PB_7, USART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART4)},
+ {PB_13, LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART1)},
+ {PB_13_ALT1, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_USART3)},
+ {PB_15, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
+ {PC_8, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART2)},
+ {PD_3, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART2)},
+ {PD_5, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART5)},
+ {PD_11, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_USART3)},
+ {PD_14, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART2)},
+ {PF_7, LPUART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART1)},
+ {PF_7_ALT1, USART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART5)},
+ {PF_12, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_USART6)},
+ {NC, NP, 0}
+};
+#endif
+
+//*** SPI ***
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_MOSI[] = {
+ {PA_2, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {PA_4, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI2)},
+ {PA_7, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {PA_10, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI2)},
+ {PA_10_R, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI2)},
+ {PA_12, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {PB_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {PB_5_ALT1, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_SPI3)},
+ {PB_7, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI2)},
+ {PB_11, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI2)},
+ {PB_15, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI2)},
+ {PC_3, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI2)},
+ {PC_12, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_SPI3)},
+ {PD_4, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI2)},
+ {PD_6, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI1)},
+ {PE_15, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_MISO[] = {
+ {PA_3, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI2)},
+ {PA_6, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {PA_9, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_SPI2)},
+ {PA_9_R, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_SPI2)},
+ {PA_11, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {PB_2, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI2)},
+ {PB_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {PB_4_ALT1, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_SPI3)},
+ {PB_6, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_SPI2)},
+ {PB_14, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI2)},
+ {PC_2, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI2)},
+ {PC_11, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_SPI3)},
+ {PD_3, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI2)},
+ {PD_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI1)},
+ {PE_14, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_SCLK[] = {
+ {PA_0, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI2)},
+ {PA_1, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {PA_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {PB_3, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {PB_3_ALT1, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_SPI3)},
+ {PB_8, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI2)},
+ {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_AF0_SPI2)},
+ {PC_10, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF4_SPI3)},
+ {PD_1, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI2)},
+ {PD_8, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI1)},
+ {PE_13, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_SPI_MODULE_ENABLED
+WEAK const PinMap PinMap_SPI_SSEL[] = {
+ {PA_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {PA_4_ALT1, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_SPI3)},
+ {PA_8, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI2)},
+ {PA_15, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {PA_15_ALT1, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_SPI3)},
+ {PB_0, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {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_AF0_SPI2)},
+ {PD_0, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI2)},
+ {PD_9, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_SPI1)},
+ {PE_12, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF0_SPI1)},
+ {NC, NP, 0}
+};
+#endif
+
+//*** FDCAN ***
+
+#ifdef HAL_FDCAN_MODULE_ENABLED
+WEAK const PinMap PinMap_CAN_RD[] = {
+ {PA_11, FDCAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN1)},
+ {PB_0, FDCAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN2)},
+ {PB_5, FDCAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN2)},
+ {PB_8, FDCAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN1)},
+ {PB_12, FDCAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN2)},
+ {PC_2, FDCAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN2)},
+ {PC_4, FDCAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN1)},
+ {PD_0, FDCAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN1)},
+ {PD_12, FDCAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN1)},
+ {PD_14, FDCAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN2)},
+ {NC, NP, 0}
+};
+#endif
+
+#ifdef HAL_FDCAN_MODULE_ENABLED
+WEAK const PinMap PinMap_CAN_TD[] = {
+ {PA_12, FDCAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN1)},
+ {PB_1, FDCAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN2)},
+ {PB_6, FDCAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN2)},
+ {PB_9, FDCAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN1)},
+ {PB_13, FDCAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN2)},
+ {PC_3, FDCAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN2)},
+ {PC_5, FDCAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN1)},
+ {PD_1, FDCAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN1)},
+ {PD_13, FDCAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN1)},
+ {PD_15, FDCAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF3_FDCAN2)},
+ {NC, NP, 0}
+};
+#endif
+
+//*** No ETHERNET ***
+
+//*** No QUADSPI ***
+
+//*** USB ***
+
+#if defined(HAL_PCD_MODULE_ENABLED) || defined(HAL_HCD_MODULE_ENABLED)
+WEAK const PinMap PinMap_USB_DRD_FS[] = {
+ {PA_4, USB_DRD_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_USB)}, // USB_NOE
+ {PA_11, USB_DRD_FS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_DM
+ {PA_12, USB_DRD_FS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_DP
+ {PA_13, USB_DRD_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_USB)}, // USB_NOE
+ {PA_15, USB_DRD_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_USB)}, // USB_NOE
+ {PC_9, USB_DRD_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_USB)}, // USB_NOE
+ {NC, NP, 0}
+};
+#endif
+
+//*** No SD ***
+
+#endif /* !CUSTOM_PERIPHERAL_PINS */
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/PinNamesVar.h b/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/PinNamesVar.h
new file mode 100644
index 0000000000..7d35869fe7
--- /dev/null
+++ b/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/PinNamesVar.h
@@ -0,0 +1,91 @@
+/* Remap pin name */
+PA_9_R = PA_9 | PREMAP,
+PA_10_R = PA_10 | PREMAP,
+
+/* Alternate pin name */
+PA_1_ALT1 = PA_1 | ALT1,
+PA_2_ALT1 = PA_2 | ALT1,
+PA_3_ALT1 = PA_3 | ALT1,
+PA_4_ALT1 = PA_4 | ALT1,
+PA_6_ALT1 = PA_6 | ALT1,
+PA_6_ALT2 = PA_6 | ALT2,
+PA_7_ALT1 = PA_7 | ALT1,
+PA_7_ALT2 = PA_7 | ALT2,
+PA_7_ALT3 = PA_7 | ALT3,
+PA_9_ALT1 = PA_9 | ALT1,
+PA_9_R_ALT1 = PA_9_R | ALT1,
+PA_10_ALT1 = PA_10 | ALT1,
+PA_10_R_ALT1 = PA_10_R | ALT1,
+PA_14_ALT1 = PA_14 | ALT1,
+PA_15_ALT1 = PA_15 | ALT1,
+PB_0_ALT1 = PB_0 | ALT1,
+PB_1_ALT1 = PB_1 | ALT1,
+PB_1_ALT2 = PB_1 | ALT2,
+PB_3_ALT1 = PB_3 | ALT1,
+PB_4_ALT1 = PB_4 | ALT1,
+PB_5_ALT1 = PB_5 | ALT1,
+PB_6_ALT1 = PB_6 | ALT1,
+PB_6_ALT2 = PB_6 | ALT2,
+PB_7_ALT1 = PB_7 | ALT1,
+PB_8_ALT1 = PB_8 | ALT1,
+PB_9_ALT1 = PB_9 | ALT1,
+PB_13_ALT1 = PB_13 | ALT1,
+PB_14_ALT1 = PB_14 | ALT1,
+PB_15_ALT1 = PB_15 | ALT1,
+PB_15_ALT2 = PB_15 | ALT2,
+PC_0_ALT1 = PC_0 | ALT1,
+PC_1_ALT1 = PC_1 | ALT1,
+PC_4_ALT1 = PC_4 | ALT1,
+PC_5_ALT1 = PC_5 | ALT1,
+PC_6_ALT1 = PC_6 | ALT1,
+PC_7_ALT1 = PC_7 | ALT1,
+PC_8_ALT1 = PC_8 | ALT1,
+PC_9_ALT1 = PC_9 | ALT1,
+PC_10_ALT1 = PC_10 | ALT1,
+PC_11_ALT1 = PC_11 | ALT1,
+PD_4_ALT1 = PD_4 | ALT1,
+PF_7_ALT1 = PF_7 | ALT1,
+
+/* SYS_WKUP */
+#ifdef PWR_WAKEUP_PIN1
+ SYS_WKUP1 = PA_0,
+#endif
+#ifdef PWR_WAKEUP_PIN2
+ SYS_WKUP2 = PC_13,
+#endif
+#ifdef PWR_WAKEUP_PIN3
+ SYS_WKUP3 = PE_6,
+#endif
+#ifdef PWR_WAKEUP_PIN4
+ SYS_WKUP4 = PA_2,
+#endif
+#ifdef PWR_WAKEUP_PIN5
+ SYS_WKUP5 = PC_5,
+#endif
+#ifdef PWR_WAKEUP_PIN6
+ SYS_WKUP6 = PB_5,
+#endif
+#ifdef PWR_WAKEUP_PIN7
+ SYS_WKUP7 = NC,
+#endif
+#ifdef PWR_WAKEUP_PIN8
+ SYS_WKUP8 = NC,
+#endif
+
+/* USB */
+#ifdef USBCON
+ USB_DM = PA_11,
+ USB_DP = PA_12,
+ #ifdef USB_NOE_PA_4
+ USB_NOE = PA_4,
+ #endif
+ #ifdef USB_NOE_PA_13
+ USB_NOE = PA_13,
+ #endif
+ #ifdef USB_NOE_PA_15
+ USB_NOE = PA_15,
+ #endif
+ #ifdef USB_NOE_PC_9
+ USB_NOE = PC_9,
+ #endif
+#endif
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/ldscript.ld b/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/ldscript.ld
new file mode 100644
index 0000000000..db07355fb7
--- /dev/null
+++ b/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/ldscript.ld
@@ -0,0 +1,177 @@
+/**
+ ******************************************************************************
+ * @file LinkerScript.ld
+ * @author Auto-generated by STM32CubeIDE
+ * @brief Linker script for STM32G0B1VETx Device from STM32G0 series
+ * 512Kbytes FLASH
+ * 144Kbytes RAM
+ *
+ * Set heap size, stack size and stack location according
+ * to application requirements.
+ *
+ * Set memory bank area and size if external memory is used
+ ******************************************************************************
+ * @attention
+ *
+ *
© Copyright (c) 2020 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
+ *
+ ******************************************************************************
+ */
+
+/* Entry Point */
+ENTRY(Reset_Handler)
+
+/* Highest address of the user mode stack */
+_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */
+
+_Min_Heap_Size = 0x200; /* required amount of heap */
+_Min_Stack_Size = 0x400; /* required amount of stack */
+
+/* Memories definition */
+MEMORY
+{
+ RAM (xrw) : ORIGIN = 0x20000000, LENGTH = LD_MAX_DATA_SIZE
+ FLASH (rx) : ORIGIN = 0x8000000 + LD_FLASH_OFFSET, LENGTH = LD_MAX_SIZE - LD_FLASH_OFFSET
+}
+
+/* Sections */
+SECTIONS
+{
+ /* The startup code into "FLASH" Rom type memory */
+ .isr_vector :
+ {
+ . = ALIGN(4);
+ KEEP(*(.isr_vector)) /* Startup code */
+ . = ALIGN(4);
+ } >FLASH
+
+ /* The program code and other data into "FLASH" Rom type memory */
+ .text :
+ {
+ . = 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 into "FLASH" Rom type memory */
+ .rodata :
+ {
+ . = ALIGN(4);
+ *(.rodata) /* .rodata sections (constants, strings, etc.) */
+ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
+ . = ALIGN(4);
+ } >FLASH
+
+ .ARM.extab : {
+ . = ALIGN(4);
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ . = ALIGN(4);
+ } >FLASH
+
+ .ARM : {
+ . = ALIGN(4);
+ __exidx_start = .;
+ *(.ARM.exidx*)
+ __exidx_end = .;
+ . = ALIGN(4);
+ } >FLASH
+
+ .preinit_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP (*(.preinit_array*))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+ . = ALIGN(4);
+ } >FLASH
+
+ .init_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array*))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ . = ALIGN(4);
+ } >FLASH
+
+ .fini_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array*))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ . = ALIGN(4);
+ } >FLASH
+
+ /* Used by the startup to initialize data */
+ _sidata = LOADADDR(.data);
+
+ /* Initialized data sections into "RAM" Ram type memory */
+ .data :
+ {
+ . = ALIGN(4);
+ _sdata = .; /* create a global symbol at data start */
+ *(.data) /* .data sections */
+ *(.data*) /* .data* sections */
+ *(.RamFunc) /* .RamFunc sections */
+ *(.RamFunc*) /* .RamFunc* sections */
+
+ . = ALIGN(4);
+ _edata = .; /* define a global symbol at data end */
+
+ } >RAM AT> FLASH
+
+ /* Uninitialized data section into "RAM" Ram type memory */
+ . = ALIGN(4);
+ .bss :
+ {
+ /* This is used by the startup in order to initialize the .bss section */
+ _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" Ram type memory left */
+ ._user_heap_stack :
+ {
+ . = ALIGN(8);
+ PROVIDE ( end = . );
+ PROVIDE ( _end = . );
+ . = . + _Min_Heap_Size;
+ . = . + _Min_Stack_Size;
+ . = ALIGN(8);
+ } >RAM
+
+ /* Remove information from the compiler libraries */
+ /DISCARD/ :
+ {
+ libc.a ( * )
+ libm.a ( * )
+ libgcc.a ( * )
+ }
+
+ .ARM.attributes 0 : { *(.ARM.attributes) }
+}
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/variant_MARLIN_STM32G0B1VE.cpp b/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/variant_MARLIN_STM32G0B1VE.cpp
new file mode 100644
index 0000000000..8bf88aed49
--- /dev/null
+++ b/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/variant_MARLIN_STM32G0B1VE.cpp
@@ -0,0 +1,213 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2020-2021, 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
+ *
+ *******************************************************************************
+ */
+
+#if defined(STM32G0B1xx)
+#include "pins_arduino.h"
+
+// Digital PinName array
+const PinName digitalPin[] = {
+ PA_0, // D0/A0
+ PA_1, // D1/A1
+ PA_2, // D2/A2
+ PA_3, // D3/A3
+ PA_4, // D4/A4
+ PA_5, // D5/A5
+ PA_6, // D6/A6
+ PA_7, // D7/A7
+ PA_8, // D8
+ PA_9, // D9
+ PA_10, // D10
+ PA_11, // D11
+ PA_12, // D12
+ PA_13, // D13
+ PA_14, // D14
+ PA_15, // D15
+ PB_0, // D16/A8
+ PB_1, // D17/A9
+ PB_2, // D18/A10
+ PB_3, // D19
+ PB_4, // D20
+ PB_5, // D21
+ PB_6, // D22
+ PB_7, // D23
+ PB_8, // D24
+ PB_9, // D25
+ PB_10, // D26/A11
+ PB_11, // D27/A12
+ PB_12, // D28/A13
+ PB_13, // D29
+ PB_14, // D30
+ PB_15, // D31
+ PC_0, // D32
+ PC_1, // D33
+ PC_2, // D34
+ PC_3, // D35
+ PC_4, // D36/A14
+ PC_5, // D37/A15
+ PC_6, // D38
+ PC_7, // D39
+ PC_8, // D40
+ PC_9, // D41
+ PC_10, // D42
+ PC_11, // D43
+ PC_12, // D44
+ PC_13, // D45
+ PC_14, // D46
+ PC_15, // D47
+ PD_0, // D48
+ PD_1, // D49
+ PD_2, // D50
+ PD_3, // D51
+ PD_4, // D52
+ PD_5, // D53
+ PD_6, // D54
+ PD_7, // D55
+ PD_8, // D56
+ PD_9, // D57
+ PD_10, // D58
+ PD_11, // D59
+ PD_12, // D60
+ PD_13, // D61
+ PD_14, // D62
+ PD_15, // D63
+ PE_0, // D64
+ PE_1, // D65
+ PE_2, // D66
+ PE_3, // D67
+ PE_4, // D68
+ PE_5, // D69
+ PE_6, // D70
+ PE_7, // D71
+ PE_8, // D72
+ PE_9, // D73
+ PE_10, // D74
+ PE_11, // D75
+ PE_12, // D76
+ PE_13, // D77
+ PE_14, // D78
+ PE_15, // D79
+ PF_0, // D80
+ PF_1, // D81
+ PF_2, // D82
+ PF_3, // D83
+ PF_4, // D84
+ PF_5, // D85
+ PF_6, // D86
+ PF_7, // D87
+ PF_8, // D88
+ PF_9, // D89
+ PF_10, // D90
+ PF_11, // D91
+ PF_12, // D92
+ PF_13, // D93
+ PA_9_R, // D94
+ PA_10_R // D95
+};
+
+// 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
+ 18, // A10, PB2
+ 26, // A11, PB10
+ 27, // A12, PB11
+ 28, // A13, PB12
+ 36, // A14, PC4
+ 37 // A15, PC5
+};
+
+// ----------------------------------------------------------------------------
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief System Clock Configuration
+ * The system Clock is configured as follows :
+ * System Clock source = PLL (HSE)
+ * SYSCLK(Hz) = 64000000
+ * HCLK(Hz) = 64000000
+ * AHB Prescaler = 1
+ * APB1 Prescaler = 1
+ * PLL_M = 1
+ * PLL_N = 24
+ * PLL_R = 3
+ * PLL_P = 2
+ * PLL_Q = 4
+ * USB(Hz) = 48000000 (PLLQ)
+ * @param None
+ * @retval None
+ */
+WEAK void SystemClock_Config(void)
+{
+ RCC_OscInitTypeDef RCC_OscInitStruct = {0};
+ RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
+ RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
+
+ // Reset clock registers (in case bootloader has changed them)
+ SystemInit();
+
+ /** Configure the main internal regulator output voltage
+ */
+ HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);
+ /** Initializes the RCC Oscillators according to the specified parameters
+ * in the RCC_OscInitTypeDef structure.
+ */
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
+ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
+ RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV1;
+ RCC_OscInitStruct.PLL.PLLN = 24;
+ RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
+ RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV4;
+ RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV3;
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /** Initializes the CPU, AHB and APB buses clocks
+ */
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
+ |RCC_CLOCKTYPE_PCLK1;
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
+
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /** Initializes the peripherals clocks
+ */
+ PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB;
+ PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL;
+ if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
+ {
+ Error_Handler();
+ }
+}
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* STM32G0B1xx */
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/variant_MARLIN_STM32G0B1VE.h b/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/variant_MARLIN_STM32G0B1VE.h
new file mode 100644
index 0000000000..e6f2251db0
--- /dev/null
+++ b/buildroot/share/PlatformIO/variants/MARLIN_G0B1VE/variant_MARLIN_STM32G0B1VE.h
@@ -0,0 +1,258 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2020-2021, 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
+ *
+ *******************************************************************************
+ */
+#pragma once
+
+/*----------------------------------------------------------------------------
+ * STM32 pins number
+ *----------------------------------------------------------------------------*/
+#define PA0 PIN_A0
+#define PA1 PIN_A1
+#define PA2 PIN_A2
+#define PA3 PIN_A3
+#define PA4 PIN_A4
+#define PA5 PIN_A5
+#define PA6 PIN_A6
+#define PA7 PIN_A7
+#define PA8 8
+#define PA9 9
+#define PA10 10
+#define PA11 11
+#define PA12 12
+#define PA13 13
+#define PA14 14
+#define PA15 15
+#define PB0 PIN_A8
+#define PB1 PIN_A9
+#define PB2 PIN_A10
+#define PB3 19
+#define PB4 20
+#define PB5 21
+#define PB6 22
+#define PB7 23
+#define PB8 24
+#define PB9 25
+#define PB10 PIN_A11
+#define PB11 PIN_A12
+#define PB12 PIN_A13
+#define PB13 29
+#define PB14 30
+#define PB15 31
+#define PC0 32
+#define PC1 33
+#define PC2 34
+#define PC3 35
+#define PC4 PIN_A14
+#define PC5 PIN_A15
+#define PC6 38
+#define PC7 39
+#define PC8 40
+#define PC9 41
+#define PC10 42
+#define PC11 43
+#define PC12 44
+#define PC13 45
+#define PC14 46
+#define PC15 47
+#define PD0 48
+#define PD1 49
+#define PD2 50
+#define PD3 51
+#define PD4 52
+#define PD5 53
+#define PD6 54
+#define PD7 55
+#define PD8 56
+#define PD9 57
+#define PD10 58
+#define PD11 59
+#define PD12 60
+#define PD13 61
+#define PD14 62
+#define PD15 63
+#define PE0 64
+#define PE1 65
+#define PE2 66
+#define PE3 67
+#define PE4 68
+#define PE5 69
+#define PE6 70
+#define PE7 71
+#define PE8 72
+#define PE9 73
+#define PE10 74
+#define PE11 75
+#define PE12 76
+#define PE13 77
+#define PE14 78
+#define PE15 79
+#define PF0 80
+#define PF1 81
+#define PF2 82
+#define PF3 83
+#define PF4 84
+#define PF5 85
+#define PF6 86
+#define PF7 87
+#define PF8 88
+#define PF9 89
+#define PF10 90
+#define PF11 91
+#define PF12 92
+#define PF13 93
+#define PA9_R 94
+#define PA10_R 95
+
+// Alternate pins number
+#define PA1_ALT1 (PA1 | ALT1)
+#define PA2_ALT1 (PA2 | ALT1)
+#define PA3_ALT1 (PA3 | ALT1)
+#define PA4_ALT1 (PA4 | ALT1)
+#define PA6_ALT1 (PA6 | ALT1)
+#define PA6_ALT2 (PA6 | ALT2)
+#define PA7_ALT1 (PA7 | ALT1)
+#define PA7_ALT2 (PA7 | ALT2)
+#define PA7_ALT3 (PA7 | ALT3)
+#define PA9_ALT1 (PA9 | ALT1)
+#define PA9_R_ALT1 (PA9_R | ALT1)
+#define PA10_ALT1 (PA10 | ALT1)
+#define PA10_R_ALT1 (PA10_R | ALT1)
+#define PA14_ALT1 (PA14 | ALT1)
+#define PA15_ALT1 (PA15 | ALT1)
+#define PB0_ALT1 (PB0 | ALT1)
+#define PB1_ALT1 (PB1 | ALT1)
+#define PB1_ALT2 (PB1 | ALT2)
+#define PB3_ALT1 (PB3 | ALT1)
+#define PB4_ALT1 (PB4 | ALT1)
+#define PB5_ALT1 (PB5 | ALT1)
+#define PB6_ALT1 (PB6 | ALT1)
+#define PB6_ALT2 (PB6 | ALT2)
+#define PB7_ALT1 (PB7 | ALT1)
+#define PB8_ALT1 (PB8 | ALT1)
+#define PB9_ALT1 (PB9 | ALT1)
+#define PB13_ALT1 (PB13 | ALT1)
+#define PB14_ALT1 (PB14 | ALT1)
+#define PB15_ALT1 (PB15 | ALT1)
+#define PB15_ALT2 (PB15 | ALT2)
+#define PC0_ALT1 (PC0 | ALT1)
+#define PC1_ALT1 (PC1 | ALT1)
+#define PC4_ALT1 (PC4 | ALT1)
+#define PC5_ALT1 (PC5 | ALT1)
+#define PC6_ALT1 (PC6 | ALT1)
+#define PC7_ALT1 (PC7 | ALT1)
+#define PC8_ALT1 (PC8 | ALT1)
+#define PC9_ALT1 (PC9 | ALT1)
+#define PC10_ALT1 (PC10 | ALT1)
+#define PC11_ALT1 (PC11 | ALT1)
+#define PD4_ALT1 (PD4 | ALT1)
+#define PF7_ALT1 (PF7 | ALT1)
+
+#define NUM_DIGITAL_PINS 96
+#define NUM_REMAP_PINS 2
+#define NUM_ANALOG_INPUTS 16
+
+// On-board LED pin number
+#ifndef LED_BUILTIN
+ #define LED_BUILTIN PNUM_NOT_DEFINED
+#endif
+
+// On-board user button
+#ifndef USER_BTN
+ #define USER_BTN PNUM_NOT_DEFINED
+#endif
+
+// SPI definitions
+#ifndef PIN_SPI_SS
+ #define PIN_SPI_SS PA4
+#endif
+#ifndef PIN_SPI_SS1
+ #define PIN_SPI_SS1 PA15
+#endif
+#ifndef PIN_SPI_SS2
+ #define PIN_SPI_SS2 PB0
+#endif
+#ifndef PIN_SPI_SS3
+ #define PIN_SPI_SS3 PD9
+#endif
+#ifndef PIN_SPI_MOSI
+ #define PIN_SPI_MOSI PA2
+#endif
+#ifndef PIN_SPI_MISO
+ #define PIN_SPI_MISO PA6
+#endif
+#ifndef PIN_SPI_SCK
+ #define PIN_SPI_SCK PA1
+#endif
+
+// I2C definitions
+#ifndef PIN_WIRE_SDA
+ #define PIN_WIRE_SDA PA6
+#endif
+#ifndef PIN_WIRE_SCL
+ #define PIN_WIRE_SCL PA7
+#endif
+
+// Timer Definitions
+// Use TIM6/TIM7 when possible as servo and tone don't need GPIO output pin
+#ifndef TIMER_TONE
+ #define TIMER_TONE TIM6
+#endif
+#ifndef TIMER_SERVO
+ #define TIMER_SERVO TIM7
+#endif
+
+// UART Definitions
+#ifndef SERIAL_UART_INSTANCE
+ #define SERIAL_UART_INSTANCE 4
+#endif
+
+// Default pin used for generic 'Serial' instance
+// Mandatory for Firmata
+#ifndef PIN_SERIAL_RX
+ #define PIN_SERIAL_RX PA1
+#endif
+#ifndef PIN_SERIAL_TX
+ #define PIN_SERIAL_TX PA0
+#endif
+
+// Extra HAL modules
+#if !defined(HAL_DAC_MODULE_DISABLED)
+ #define HAL_DAC_MODULE_ENABLED
+#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.
+ #ifndef SERIAL_PORT_MONITOR
+ #define SERIAL_PORT_MONITOR Serial
+ #endif
+ #ifndef SERIAL_PORT_HARDWARE
+ #define SERIAL_PORT_HARDWARE Serial
+ #endif
+#endif
diff --git a/ini/stm32g0.ini b/ini/stm32g0.ini
index 568d9c8e9f..c8554741bc 100644
--- a/ini/stm32g0.ini
+++ b/ini/stm32g0.ini
@@ -41,7 +41,7 @@ upload_protocol = stlink
debug_tool = stlink
#
-# BigTreeTech SKR mini E3 V3.0 (STM32G0B1RET6 ARM Cortex-M0+)
+# BigTreeTech SKR Mini E3 V3.0 / Manta E3 EZ V1.0 / Manta M4P V1.0 / Manta M5P V1.0 (STM32G0B1RET6 ARM Cortex-M0+)
#
[env:STM32G0B1RE_btt]
extends = stm32_variant
@@ -59,6 +59,7 @@ upload_protocol = stlink
debug_tool = stlink
#
+# BigTreeTech SKR Mini E3 V3.0 / Manta E3 EZ V1.0 / Manta M4P V1.0 / Manta M5P V1.0 (STM32G0B1RET6 ARM Cortex-M0+)
# Custom upload to SD via Marlin with Binary Protocol
#
[env:STM32G0B1RE_btt_xfer]
@@ -67,3 +68,33 @@ build_flags = ${env:STM32G0B1RE_btt.build_flags} -DXFER_BUILD
extra_scripts = ${env:STM32G0B1RE_btt.extra_scripts}
pre:buildroot/share/scripts/upload.py
upload_protocol = custom
+
+#
+# BigTreeTech Manta M8P V1.x (STM32G0B1VET6 ARM Cortex-M0+)
+#
+[env:STM32G0B1VE_btt]
+extends = stm32_variant
+platform = ststm32@~14.1.0
+platform_packages = framework-arduinoststm32@https://github.com/stm32duino/Arduino_Core_STM32/archive/main.zip
+board = marlin_STM32G0B1VE
+board_build.offset = 0x2000
+board_upload.offset_address = 0x08002000
+build_flags = ${stm32_variant.build_flags}
+ -DPIN_SERIAL4_RX=PE_9 -DPIN_SERIAL4_TX=PE_8
+ -DPIN_SERIAL5_RX=PE_11 -DPIN_SERIAL5_TX=PE_10
+ -DSERIAL_RX_BUFFER_SIZE=1024 -DSERIAL_TX_BUFFER_SIZE=1024
+ -DTIMER_SERVO=TIM3 -DTIMER_TONE=TIM4
+ -DSTEP_TIMER_IRQ_PRIO=0
+upload_protocol = stlink
+debug_tool = stlink
+
+#
+# BigTreeTech Manta M8P V1.x (STM32G0B1VET6 ARM Cortex-M0+)
+# Custom upload to SD via Marlin with Binary Protocol
+#
+[env:STM32G0B1VE_btt_xfer]
+extends = env:STM32G0B1VE_btt
+build_flags = ${env:STM32G0B1VE_btt.build_flags} -DXFER_BUILD
+extra_scripts = ${env:STM32G0B1VE_btt.extra_scripts}
+ pre:buildroot/share/scripts/upload.py
+upload_protocol = custom
From 7659f522d6927e8c4beb86fae1b01891b705fa38 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Wed, 8 Feb 2023 12:36:53 +0000
Subject: [PATCH 02/97] [cron] Bump distribution date (2023-02-08)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index be1a6956bf..209bc401af 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-02-04"
+//#define STRING_DISTRIBUTION_DATE "2023-02-08"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 518bbdd1d4..83e546be60 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-02-04"
+ #define STRING_DISTRIBUTION_DATE "2023-02-08"
#endif
/**
From 88dea487c2557cbea9999c0d80edc937eff27be3 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Wed, 8 Feb 2023 19:37:10 -0600
Subject: [PATCH 03/97] =?UTF-8?q?=F0=9F=94=A7=20Add=20a=20test=20for=20ext?=
=?UTF-8?q?ra=20axes?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
buildroot/tests/LPC1769 | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/buildroot/tests/LPC1769 b/buildroot/tests/LPC1769
index ec5c824450..b3348c6d65 100755
--- a/buildroot/tests/LPC1769
+++ b/buildroot/tests/LPC1769
@@ -20,7 +20,7 @@ opt_set MOTHERBOARD BOARD_SMOOTHIEBOARD \
NOZZLE_CLEAN_END_POINT "{ { 10, 20, 3 }, { 10, 20, 3 } }"
opt_enable TFTGLCD_PANEL_SPI SDSUPPORT ADAPTIVE_FAN_SLOWING TEMP_TUNING_MAINTAIN_FAN \
MAX31865_SENSOR_OHMS_0 MAX31865_CALIBRATION_OHMS_0 \
- FIX_MOUNTED_PROBE AUTO_BED_LEVELING_BILINEAR G29_RETRY_AND_RECOVER Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
+ MAG_MOUNTED_PROBE AUTO_BED_LEVELING_BILINEAR G29_RETRY_AND_RECOVER Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET BED_TRAMMING_USE_PROBE BED_TRAMMING_VERIFY_RAISED \
PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE SLOW_PWM_HEATERS PIDTEMPBED EEPROM_SETTINGS INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT \
Z_SAFE_HOMING ADVANCED_PAUSE_FEATURE PARK_HEAD_ON_PAUSE \
@@ -43,13 +43,23 @@ exec_test $1 $2 "Smoothieboard with TFTGLCD_PANEL_SPI and many features" "$3"
restore_configs
use_example_configs delta/generic
opt_set MOTHERBOARD BOARD_COHESION3D_REMIX \
- X_DRIVER_TYPE TMC2130 Y_DRIVER_TYPE TMC2130 Z_DRIVER_TYPE TMC2130
+ X_DRIVER_TYPE TMC2130 Y_DRIVER_TYPE TMC2130 Z_DRIVER_TYPE TMC2130 I_DRIVER_TYPE TB6560 \
+ DEFAULT_AXIS_STEPS_PER_UNIT '{ 80, 80, 400, 500, 80 }' \
+ DEFAULT_MAX_FEEDRATE '{ 300, 300, 5, 25, 300 }' \
+ DEFAULT_MAX_ACCELERATION '{ 3000, 3000, 100, 10000, 3000 }' \
+ MANUAL_FEEDRATE '{ 50*60, 50*60, 4*60, 2*60, 50*60 }' \
+ AXIS_RELATIVE_MODES '{ false, false, false, false, false }' \
+ HOMING_FEEDRATE_MM_M '{ (50*60), (50*60), (4*60), (50*60) }' \
+ HOMING_BUMP_MM '{ 0, 0, 0, 0 }' HOMING_BUMP_DIVISOR '{ 1, 1, 1, 1 }' \
+ NOZZLE_TO_PROBE_OFFSET '{ 0, 0, 0, 0 }' \
+ I_MIN_PIN P1_25
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 \
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" "$3"
+exec_test $1 $2 "Cohesion3D Remix DELTA + ABL Bilinear + EEPROM + SENSORLESS_PROBING + I Axis" "$3"
# clean up
restore_configs
From 842489a5dc2d4e0c7f80c4bde031355383848360 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Wed, 8 Feb 2023 19:36:22 -0600
Subject: [PATCH 04/97] =?UTF-8?q?=F0=9F=90=9B=20Don't=20skip=20G2/G3=20E-o?=
=?UTF-8?q?nly=20moves?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/gcode/gcode.h | 3 +
Marlin/src/gcode/motion/G0_G1.cpp | 132 ++++++++++++--------------
Marlin/src/gcode/motion/G2_G3.cpp | 150 +++++++++++++++---------------
3 files changed, 138 insertions(+), 147 deletions(-)
diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h
index 9d5621f0c3..9bb45d9a43 100644
--- a/Marlin/src/gcode/gcode.h
+++ b/Marlin/src/gcode/gcode.h
@@ -476,6 +476,9 @@ public:
private:
friend class MarlinSettings;
+ #if ENABLED(ARC_SUPPORT)
+ friend void plan_arc(const xyze_pos_t&, const ab_float_t&, const bool, const uint8_t);
+ #endif
#if ENABLED(MARLIN_DEV_MODE)
static void D(const int16_t dcode);
diff --git a/Marlin/src/gcode/motion/G0_G1.cpp b/Marlin/src/gcode/motion/G0_G1.cpp
index b10f1ac920..88551f5eb6 100644
--- a/Marlin/src/gcode/motion/G0_G1.cpp
+++ b/Marlin/src/gcode/motion/G0_G1.cpp
@@ -45,91 +45,75 @@ extern xyze_pos_t destination;
* G0, G1: Coordinated movement of X Y Z E axes
*/
void GcodeSuite::G0_G1(TERN_(HAS_FAST_MOVES, const bool fast_move/*=false*/)) {
+ if (!MOTION_CONDITIONS) return;
- if (IsRunning()
- #if ENABLED(NO_MOTION_BEFORE_HOMING)
- && !homing_needed_error(
- NUM_AXIS_GANG(
- (parser.seen_test('X') ? _BV(X_AXIS) : 0),
- | (parser.seen_test('Y') ? _BV(Y_AXIS) : 0),
- | (parser.seen_test('Z') ? _BV(Z_AXIS) : 0),
- | (parser.seen_test(AXIS4_NAME) ? _BV(I_AXIS) : 0),
- | (parser.seen_test(AXIS5_NAME) ? _BV(J_AXIS) : 0),
- | (parser.seen_test(AXIS6_NAME) ? _BV(K_AXIS) : 0),
- | (parser.seen_test(AXIS7_NAME) ? _BV(U_AXIS) : 0),
- | (parser.seen_test(AXIS8_NAME) ? _BV(V_AXIS) : 0),
- | (parser.seen_test(AXIS9_NAME) ? _BV(W_AXIS) : 0))
- )
- #endif
- ) {
- TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_RUNNING));
+ TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_RUNNING));
- #ifdef G0_FEEDRATE
- feedRate_t old_feedrate;
- #if ENABLED(VARIABLE_G0_FEEDRATE)
- if (fast_move) {
- old_feedrate = feedrate_mm_s; // Back up the (old) motion mode feedrate
- feedrate_mm_s = fast_move_feedrate; // Get G0 feedrate from last usage
- }
- #endif
- #endif
-
- get_destination_from_command(); // Get X Y [Z[I[J[K]]]] [E] F (and set cutter power)
-
- #ifdef G0_FEEDRATE
+ #ifdef G0_FEEDRATE
+ feedRate_t old_feedrate;
+ #if ENABLED(VARIABLE_G0_FEEDRATE)
if (fast_move) {
- #if ENABLED(VARIABLE_G0_FEEDRATE)
- fast_move_feedrate = feedrate_mm_s; // Save feedrate for the next G0
- #else
- old_feedrate = feedrate_mm_s; // Back up the (new) motion mode feedrate
- feedrate_mm_s = MMM_TO_MMS(G0_FEEDRATE); // Get the fixed G0 feedrate
- #endif
+ old_feedrate = feedrate_mm_s; // Back up the (old) motion mode feedrate
+ feedrate_mm_s = fast_move_feedrate; // Get G0 feedrate from last usage
}
#endif
+ #endif
- #if BOTH(FWRETRACT, FWRETRACT_AUTORETRACT)
+ get_destination_from_command(); // Get X Y [Z[I[J[K]]]] [E] F (and set cutter power)
- if (MIN_AUTORETRACT <= MAX_AUTORETRACT) {
- // When M209 Autoretract is enabled, convert E-only moves to firmware retract/recover moves
- if (fwretract.autoretract_enabled && parser.seen_test('E')
- && !parser.seen(STR_AXES_MAIN)
- ) {
- const float echange = destination.e - current_position.e;
- // Is this a retract or recover move?
- if (WITHIN(ABS(echange), MIN_AUTORETRACT, MAX_AUTORETRACT) && fwretract.retracted[active_extruder] == (echange > 0.0)) {
- current_position.e = destination.e; // Hide a G1-based retract/recover from calculations
- sync_plan_position_e(); // AND from the planner
- return fwretract.retract(echange < 0.0); // Firmware-based retract/recover (double-retract ignored)
- }
+ #ifdef G0_FEEDRATE
+ if (fast_move) {
+ #if ENABLED(VARIABLE_G0_FEEDRATE)
+ fast_move_feedrate = feedrate_mm_s; // Save feedrate for the next G0
+ #else
+ old_feedrate = feedrate_mm_s; // Back up the (new) motion mode feedrate
+ feedrate_mm_s = MMM_TO_MMS(G0_FEEDRATE); // Get the fixed G0 feedrate
+ #endif
+ }
+ #endif
+
+ #if BOTH(FWRETRACT, FWRETRACT_AUTORETRACT)
+
+ if (MIN_AUTORETRACT <= MAX_AUTORETRACT) {
+ // When M209 Autoretract is enabled, convert E-only moves to firmware retract/recover moves
+ if (fwretract.autoretract_enabled && parser.seen_test('E')
+ && !parser.seen(STR_AXES_MAIN)
+ ) {
+ const float echange = destination.e - current_position.e;
+ // Is this a retract or recover move?
+ if (WITHIN(ABS(echange), MIN_AUTORETRACT, MAX_AUTORETRACT) && fwretract.retracted[active_extruder] == (echange > 0.0)) {
+ current_position.e = destination.e; // Hide a G1-based retract/recover from calculations
+ sync_plan_position_e(); // AND from the planner
+ return fwretract.retract(echange < 0.0); // Firmware-based retract/recover (double-retract ignored)
}
}
+ }
- #endif // FWRETRACT
+ #endif // FWRETRACT
- #if EITHER(IS_SCARA, POLAR)
- fast_move ? prepare_fast_move_to_destination() : prepare_line_to_destination();
+ #if EITHER(IS_SCARA, POLAR)
+ fast_move ? prepare_fast_move_to_destination() : prepare_line_to_destination();
+ #else
+ prepare_line_to_destination();
+ #endif
+
+ #ifdef G0_FEEDRATE
+ // Restore the motion mode feedrate
+ if (fast_move) feedrate_mm_s = old_feedrate;
+ #endif
+
+ #if ENABLED(NANODLP_Z_SYNC)
+ #if ENABLED(NANODLP_ALL_AXIS)
+ #define _MOVE_SYNC parser.seenval('X') || parser.seenval('Y') || parser.seenval('Z') // For any move wait and output sync message
#else
- prepare_line_to_destination();
+ #define _MOVE_SYNC parser.seenval('Z') // Only for Z move
#endif
-
- #ifdef G0_FEEDRATE
- // Restore the motion mode feedrate
- if (fast_move) feedrate_mm_s = old_feedrate;
- #endif
-
- #if ENABLED(NANODLP_Z_SYNC)
- #if ENABLED(NANODLP_ALL_AXIS)
- #define _MOVE_SYNC parser.seenval('X') || parser.seenval('Y') || parser.seenval('Z') // For any move wait and output sync message
- #else
- #define _MOVE_SYNC parser.seenval('Z') // Only for Z move
- #endif
- if (_MOVE_SYNC) {
- planner.synchronize();
- SERIAL_ECHOLNPGM(STR_Z_MOVE_COMP);
- }
- TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_IDLE));
- #else
- TERN_(FULL_REPORT_TO_HOST_FEATURE, report_current_grblstate_moving());
- #endif
- }
+ if (_MOVE_SYNC) {
+ planner.synchronize();
+ SERIAL_ECHOLNPGM(STR_Z_MOVE_COMP);
+ }
+ TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_IDLE));
+ #else
+ TERN_(FULL_REPORT_TO_HOST_FEATURE, report_current_grblstate_moving());
+ #endif
}
diff --git a/Marlin/src/gcode/motion/G2_G3.cpp b/Marlin/src/gcode/motion/G2_G3.cpp
index 2634117cd9..1cae82f71c 100644
--- a/Marlin/src/gcode/motion/G2_G3.cpp
+++ b/Marlin/src/gcode/motion/G2_G3.cpp
@@ -142,8 +142,8 @@ void plan_arc(
part_per_circle = RADIANS(360) / total_angular; // Each circle's part of the total
ARC_LIJKUVWE_CODE(
- const float per_circle_L = travel_L * part_per_circle, // L movement per circle
- const float per_circle_I = travel_I * part_per_circle,
+ const float per_circle_L = travel_L * part_per_circle, // X, Y, or Z movement per circle
+ const float per_circle_I = travel_I * part_per_circle, // The rest are also non-arc
const float per_circle_J = travel_J * part_per_circle,
const float per_circle_K = travel_K * part_per_circle,
const float per_circle_U = travel_U * part_per_circle,
@@ -154,9 +154,9 @@ void plan_arc(
xyze_pos_t temp_position = current_position;
for (uint16_t n = circles; n--;) {
- ARC_LIJKUVWE_CODE( // Destination Linear Axes
- temp_position[axis_l] += per_circle_L,
- temp_position.i += per_circle_I,
+ ARC_LIJKUVWE_CODE( // Destination Linear Axes
+ temp_position[axis_l] += per_circle_L, // Linear X, Y, or Z
+ temp_position.i += per_circle_I, // The rest are also non-circular
temp_position.j += per_circle_J,
temp_position.k += per_circle_K,
temp_position.u += per_circle_U,
@@ -167,8 +167,8 @@ void plan_arc(
plan_arc(temp_position, offset, clockwise, 0); // Plan a single whole circle
}
ARC_LIJKUVWE_CODE(
- travel_L = cart[axis_l] - current_position[axis_l],
- travel_I = cart.i - current_position.i,
+ travel_L = cart[axis_l] - current_position[axis_l], // Linear X, Y, or Z
+ travel_I = cart.i - current_position.i, // The rest are also non-arc
travel_J = cart.j - current_position.j,
travel_K = cart.k - current_position.k,
travel_U = cart.u - current_position.u,
@@ -183,16 +183,21 @@ void plan_arc(
// Return if the move is near zero
if (flat_mm < 0.0001f
- GANG_N(SUB2(NUM_AXES),
- && travel_L < 0.0001f,
- && travel_I < 0.0001f,
- && travel_J < 0.0001f,
- && travel_K < 0.0001f,
- && travel_U < 0.0001f,
- && travel_V < 0.0001f,
- && travel_W < 0.0001f
+ GANG_N(SUB2(NUM_AXES), // Two axes for the arc
+ && NEAR_ZERO(travel_L), // Linear X, Y, or Z
+ && NEAR_ZERO(travel_I),
+ && NEAR_ZERO(travel_J),
+ && NEAR_ZERO(travel_K),
+ && NEAR_ZERO(travel_U),
+ && NEAR_ZERO(travel_V),
+ && NEAR_ZERO(travel_W)
)
- ) return;
+ ) {
+ #if HAS_EXTRUDERS
+ if (!NEAR_ZERO(travel_E)) gcode.G0_G1(); // Handle retract/recover as G1
+ return;
+ #endif
+ }
// Feedrate for the move, scaled by the feedrate multiplier
const feedRate_t scaled_fr_mm_s = MMS_SCALED(feedrate_mm_s);
@@ -426,71 +431,70 @@ void plan_arc(
* G3 X20 Y12 R14 ; CCW circle with r=14 ending at X20 Y12
*/
void GcodeSuite::G2_G3(const bool clockwise) {
- if (MOTION_CONDITIONS) {
+ if (!MOTION_CONDITIONS) return;
- TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_RUNNING));
+ TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_RUNNING));
- #if ENABLED(SF_ARC_FIX)
- const bool relative_mode_backup = relative_mode;
- relative_mode = true;
- #endif
+ #if ENABLED(SF_ARC_FIX)
+ const bool relative_mode_backup = relative_mode;
+ relative_mode = true;
+ #endif
- get_destination_from_command(); // Get X Y [Z[I[J[K...]]]] [E] F (and set cutter power)
+ get_destination_from_command(); // Get X Y [Z[I[J[K...]]]] [E] F (and set cutter power)
- TERN_(SF_ARC_FIX, relative_mode = relative_mode_backup);
+ TERN_(SF_ARC_FIX, relative_mode = relative_mode_backup);
- ab_float_t arc_offset = { 0, 0 };
- if (parser.seenval('R')) {
- const float r = parser.value_linear_units();
- if (r) {
- const xy_pos_t p1 = current_position, p2 = destination;
- if (p1 != p2) {
- const xy_pos_t d2 = (p2 - p1) * 0.5f; // XY vector to midpoint of move from current
- const float e = clockwise ^ (r < 0) ? -1 : 1, // clockwise -1/1, counterclockwise 1/-1
- len = d2.magnitude(), // Distance to mid-point of move from current
- h2 = (r - len) * (r + len), // factored to reduce rounding error
- h = (h2 >= 0) ? SQRT(h2) : 0.0f; // Distance to the arc pivot-point from midpoint
- const xy_pos_t s = { -d2.y, d2.x }; // Perpendicular bisector. (Divide by len for unit vector.)
- arc_offset = d2 + s / len * e * h; // The calculated offset (mid-point if |r| <= len)
- }
+ ab_float_t arc_offset = { 0, 0 };
+ if (parser.seenval('R')) {
+ const float r = parser.value_linear_units();
+ if (r) {
+ const xy_pos_t p1 = current_position, p2 = destination;
+ if (p1 != p2) {
+ const xy_pos_t d2 = (p2 - p1) * 0.5f; // XY vector to midpoint of move from current
+ const float e = clockwise ^ (r < 0) ? -1 : 1, // clockwise -1/1, counterclockwise 1/-1
+ len = d2.magnitude(), // Distance to mid-point of move from current
+ h2 = (r - len) * (r + len), // factored to reduce rounding error
+ h = (h2 >= 0) ? SQRT(h2) : 0.0f; // Distance to the arc pivot-point from midpoint
+ const xy_pos_t s = { -d2.y, d2.x }; // Perpendicular bisector. (Divide by len for unit vector.)
+ arc_offset = d2 + s / len * e * h; // The calculated offset (mid-point if |r| <= len)
}
}
- else {
- #if ENABLED(CNC_WORKSPACE_PLANES)
- char achar, bchar;
- switch (workspace_plane) {
- default:
- case GcodeSuite::PLANE_XY: achar = 'I'; bchar = 'J'; break;
- case GcodeSuite::PLANE_YZ: achar = 'J'; bchar = 'K'; break;
- case GcodeSuite::PLANE_ZX: achar = 'K'; bchar = 'I'; break;
- }
- #else
- constexpr char achar = 'I', bchar = 'J';
- #endif
- if (parser.seenval(achar)) arc_offset.a = parser.value_linear_units();
- if (parser.seenval(bchar)) arc_offset.b = parser.value_linear_units();
- }
-
- if (arc_offset) {
-
- #if ENABLED(ARC_P_CIRCLES)
- // P indicates number of circles to do
- const int8_t circles_to_do = parser.byteval('P');
- if (!WITHIN(circles_to_do, 0, 100))
- SERIAL_ERROR_MSG(STR_ERR_ARC_ARGS);
- #else
- constexpr uint8_t circles_to_do = 0;
- #endif
-
- // Send the arc to the planner
- plan_arc(destination, arc_offset, clockwise, circles_to_do);
- reset_stepper_timeout();
- }
- else
- SERIAL_ERROR_MSG(STR_ERR_ARC_ARGS);
-
- TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_IDLE));
}
+ else {
+ #if ENABLED(CNC_WORKSPACE_PLANES)
+ char achar, bchar;
+ switch (workspace_plane) {
+ default:
+ case GcodeSuite::PLANE_XY: achar = 'I'; bchar = 'J'; break;
+ case GcodeSuite::PLANE_YZ: achar = 'J'; bchar = 'K'; break;
+ case GcodeSuite::PLANE_ZX: achar = 'K'; bchar = 'I'; break;
+ }
+ #else
+ constexpr char achar = 'I', bchar = 'J';
+ #endif
+ if (parser.seenval(achar)) arc_offset.a = parser.value_linear_units();
+ if (parser.seenval(bchar)) arc_offset.b = parser.value_linear_units();
+ }
+
+ if (arc_offset) {
+
+ #if ENABLED(ARC_P_CIRCLES)
+ // P indicates number of circles to do
+ const int8_t circles_to_do = parser.byteval('P');
+ if (!WITHIN(circles_to_do, 0, 100))
+ SERIAL_ERROR_MSG(STR_ERR_ARC_ARGS);
+ #else
+ constexpr uint8_t circles_to_do = 0;
+ #endif
+
+ // Send the arc to the planner
+ plan_arc(destination, arc_offset, clockwise, circles_to_do);
+ reset_stepper_timeout();
+ }
+ else
+ SERIAL_ERROR_MSG(STR_ERR_ARC_ARGS);
+
+ TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_IDLE));
}
#endif // ARC_SUPPORT
From 88de52210ff878838005a5f1213cdb1aa7355ae9 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Wed, 8 Feb 2023 19:39:21 -0600
Subject: [PATCH 05/97] =?UTF-8?q?=F0=9F=A9=B9=20Use=20'M205=20D'=20when=20?=
=?UTF-8?q?'B'=20is=20an=20axis?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/gcode/config/M200-M205.cpp | 45 +++++++++++++++++----------
1 file changed, 29 insertions(+), 16 deletions(-)
diff --git a/Marlin/src/gcode/config/M200-M205.cpp b/Marlin/src/gcode/config/M200-M205.cpp
index 87c1f2ce30..cda3177d93 100644
--- a/Marlin/src/gcode/config/M200-M205.cpp
+++ b/Marlin/src/gcode/config/M200-M205.cpp
@@ -221,9 +221,9 @@ void GcodeSuite::M203_report(const bool forReplay/*=true*/) {
/**
* M204: Set Accelerations in units/sec^2 (M204 P1200 R3000 T3000)
*
- * P = Printing moves
- * R = Retract only (no X, Y, Z) moves
- * T = Travel (non printing) moves
+ * P Printing moves
+ * R Retract only (no X, Y, Z) moves
+ * T Travel (non printing) moves
*/
void GcodeSuite::M204() {
if (!parser.seen("PRST"))
@@ -247,24 +247,37 @@ void GcodeSuite::M204_report(const bool forReplay/*=true*/) {
);
}
+#if AXIS_COLLISION('B')
+ #define M205_MIN_SEG_TIME_PARAM 'D'
+ #define M205_MIN_SEG_TIME_STR "D"
+ #warning "Use 'M205 D' for Minimum Segment Time."
+#else
+ #define M205_MIN_SEG_TIME_PARAM 'B'
+ #define M205_MIN_SEG_TIME_STR "B"
+#endif
+
/**
* M205: Set Advanced Settings
*
- * B = Min Segment Time (µs)
- * S = Min Feed Rate (units/s)
- * T = Min Travel Feed Rate (units/s)
- * X = Max X Jerk (units/sec^2)
- * Y = Max Y Jerk (units/sec^2)
- * Z = Max Z Jerk (units/sec^2)
- * E = Max E Jerk (units/sec^2)
- * J = Junction Deviation (mm) (If not using CLASSIC_JERK)
+ * B<µs> : Min Segment Time
+ * S : Min Feed Rate
+ * T : Min Travel Feed Rate
+ *
+ * With CLASSIC_JERK:
+ * X : Max X Jerk
+ * Y : Max Y Jerk
+ * Z : Max Z Jerk
+ * ... : etc
+ * E : Max E Jerk
+ *
+ * Without CLASSIC_JERK:
+ * J(mm) : Junction Deviation
*/
void GcodeSuite::M205() {
- if (!parser.seen("BST" TERN_(HAS_JUNCTION_DEVIATION, "J") TERN_(HAS_CLASSIC_JERK, "XYZE")))
- return M205_report();
+ if (!parser.seen_any()) return M205_report();
//planner.synchronize();
- if (parser.seenval('B')) planner.settings.min_segment_time_us = parser.value_ulong();
+ if (parser.seenval(M205_MIN_SEG_TIME_PARAM)) planner.settings.min_segment_time_us = parser.value_ulong();
if (parser.seenval('S')) planner.settings.min_feedrate_mm_s = parser.value_linear_units();
if (parser.seenval('T')) planner.settings.min_travel_feedrate_mm_s = parser.value_linear_units();
#if HAS_JUNCTION_DEVIATION
@@ -304,7 +317,7 @@ void GcodeSuite::M205() {
void GcodeSuite::M205_report(const bool forReplay/*=true*/) {
report_heading_etc(forReplay, F(
- "Advanced (B S T"
+ "Advanced (" M205_MIN_SEG_TIME_STR " S T"
TERN_(HAS_JUNCTION_DEVIATION, " J")
#if HAS_CLASSIC_JERK
NUM_AXIS_GANG(
@@ -317,7 +330,7 @@ void GcodeSuite::M205_report(const bool forReplay/*=true*/) {
")"
));
SERIAL_ECHOLNPGM_P(
- PSTR(" M205 B"), LINEAR_UNIT(planner.settings.min_segment_time_us)
+ PSTR(" M205 " M205_MIN_SEG_TIME_STR), LINEAR_UNIT(planner.settings.min_segment_time_us)
, PSTR(" S"), LINEAR_UNIT(planner.settings.min_feedrate_mm_s)
, SP_T_STR, LINEAR_UNIT(planner.settings.min_travel_feedrate_mm_s)
#if HAS_JUNCTION_DEVIATION
From 23e2cb0c53abc0727b0105beb777fefbb645280b Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Wed, 8 Feb 2023 20:19:12 -0600
Subject: [PATCH 06/97] =?UTF-8?q?=F0=9F=A9=B9=20Misc.=20extra=20axis=20upd?=
=?UTF-8?q?ates?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/inc/Conditionals_post.h | 12 +++---
Marlin/src/inc/SanityCheck.h | 60 ++++++++++++++++++------------
2 files changed, 42 insertions(+), 30 deletions(-)
diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h
index cf6c560b5c..5c149cee89 100644
--- a/Marlin/src/inc/Conditionals_post.h
+++ b/Marlin/src/inc/Conditionals_post.h
@@ -190,22 +190,22 @@
#define XY_CENTER { X_CENTER, Y_CENTER }
#endif
#if HAS_I_AXIS
- #define I_CENTER TERN(BED_CENTER_AT_0_0, 0, _I_HALF_BED)
+ #define I_CENTER _I_HALF_BED
#endif
#if HAS_J_AXIS
- #define J_CENTER TERN(BED_CENTER_AT_0_0, 0, _J_HALF_BED)
+ #define J_CENTER _J_HALF_BED
#endif
#if HAS_K_AXIS
- #define K_CENTER TERN(BED_CENTER_AT_0_0, 0, _K_HALF_BED)
+ #define K_CENTER _K_HALF_BED
#endif
#if HAS_U_AXIS
- #define U_CENTER TERN(BED_CENTER_AT_0_0, 0, _U_HALF_BED)
+ #define U_CENTER _U_HALF_BED
#endif
#if HAS_V_AXIS
- #define V_CENTER TERN(BED_CENTER_AT_0_0, 0, _V_HALF_BED)
+ #define V_CENTER _V_HALF_BED
#endif
#if HAS_W_AXIS
- #define W_CENTER TERN(BED_CENTER_AT_0_0, 0, _W_HALF_BED)
+ #define W_CENTER _W_HALF_BED
#endif
// Get the linear boundaries of the bed
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index dc8c8a22cc..ec1c1a6475 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -1580,18 +1580,18 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#endif
/**
- * Features that require a min/max/specific NUM_AXES
+ * Features that require a min/max/specific steppers / axes to be enabled.
*/
#if HAS_LEVELING && !HAS_Z_AXIS
#error "Leveling in Marlin requires three or more axes, with Z as the vertical axis."
#elif ENABLED(CNC_WORKSPACE_PLANES) && !HAS_Z_AXIS
- #error "CNC_WORKSPACE_PLANES currently requires NUM_AXES >= 3"
+ #error "CNC_WORKSPACE_PLANES currently requires a Z axis"
#elif ENABLED(DIRECT_STEPPING) && NUM_AXES > XYZ
- #error "DIRECT_STEPPING currently requires NUM_AXES 3"
-#elif ENABLED(FOAMCUTTER_XYUV) && NUM_AXES < 5
- #error "FOAMCUTTER_XYUV requires NUM_AXES >= 5."
+ #error "DIRECT_STEPPING does not currently support more than 3 axes (i.e., XYZ)."
+#elif ENABLED(FOAMCUTTER_XYUV) && !(HAS_I_AXIS && HAS_J_AXIS)
+ #error "FOAMCUTTER_XYUV requires I and J steppers to be enabled."
#elif ENABLED(LINEAR_ADVANCE) && HAS_I_AXIS
- #error "LINEAR_ADVANCE currently requires NUM_AXES <= 3."
+ #error "LINEAR_ADVANCE does not currently support the inclusion of an I axis."
#endif
/**
@@ -1599,11 +1599,13 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
*/
#if HAS_I_AXIS
#if !defined(I_MIN_POS) || !defined(I_MAX_POS)
- #error "I_MIN_POS and I_MAX_POS are required with NUM_AXES >= 4."
+ #error "I_MIN_POS and I_MAX_POS are required for the I axis."
#elif !defined(I_HOME_DIR)
- #error "I_HOME_DIR is required with NUM_AXES >= 4."
+ #error "I_HOME_DIR is required for the I axis."
#elif HAS_I_ENABLE && !defined(I_ENABLE_ON)
- #error "I_ENABLE_ON is required for your I driver with NUM_AXES >= 4."
+ #error "I_ENABLE_ON is required for the I stepper."
+ #elif !defined(INVERT_I_DIR)
+ #error "INVERT_I_DIR is required for the I stepper."
#endif
#endif
#if HAS_J_AXIS
@@ -1612,11 +1614,13 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#elif ENABLED(AXIS5_ROTATES) && DISABLED(AXIS4_ROTATES)
#error "AXIS5_ROTATES requires AXIS4_ROTATES."
#elif !defined(J_MIN_POS) || !defined(J_MAX_POS)
- #error "J_MIN_POS and J_MAX_POS are required with NUM_AXES >= 5."
+ #error "J_MIN_POS and J_MAX_POS are required for the J axis."
#elif !defined(J_HOME_DIR)
- #error "J_HOME_DIR is required with NUM_AXES >= 5."
+ #error "J_HOME_DIR is required for the J axis."
#elif HAS_J_ENABLE && !defined(J_ENABLE_ON)
- #error "J_ENABLE_ON is required for your J driver with NUM_AXES >= 5."
+ #error "J_ENABLE_ON is required for the J stepper."
+ #elif !defined(INVERT_J_DIR)
+ #error "INVERT_J_DIR is required for the J stepper."
#endif
#endif
#if HAS_K_AXIS
@@ -1625,11 +1629,13 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#elif ENABLED(AXIS6_ROTATES) && DISABLED(AXIS5_ROTATES)
#error "AXIS6_ROTATES requires AXIS5_ROTATES."
#elif !defined(K_MIN_POS) || !defined(K_MAX_POS)
- #error "K_MIN_POS and K_MAX_POS are required with NUM_AXES >= 6."
+ #error "K_MIN_POS and K_MAX_POS are required for the K axis."
#elif !defined(K_HOME_DIR)
- #error "K_HOME_DIR is required with NUM_AXES >= 6."
+ #error "K_HOME_DIR is required for the K axis."
#elif HAS_K_ENABLE && !defined(K_ENABLE_ON)
- #error "K_ENABLE_ON is required for your K driver with NUM_AXES >= 6."
+ #error "K_ENABLE_ON is required for the K stepper."
+ #elif !defined(INVERT_K_DIR)
+ #error "INVERT_K_DIR is required for the K stepper."
#endif
#endif
#if HAS_U_AXIS
@@ -1638,11 +1644,13 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#elif ENABLED(AXIS7_ROTATES) && DISABLED(AXIS6_ROTATES)
#error "AXIS7_ROTATES requires AXIS6_ROTATES."
#elif !defined(U_MIN_POS) || !defined(U_MAX_POS)
- #error "U_MIN_POS and U_MAX_POS are required with NUM_AXES >= 7."
+ #error "U_MIN_POS and U_MAX_POS are required for the U axis."
#elif !defined(U_HOME_DIR)
- #error "U_HOME_DIR is required with NUM_AXES >= 7."
+ #error "U_HOME_DIR is required for the U axis."
#elif HAS_U_ENABLE && !defined(U_ENABLE_ON)
- #error "U_ENABLE_ON is required for your U driver with NUM_AXES >= 7."
+ #error "U_ENABLE_ON is required for the U stepper."
+ #elif !defined(INVERT_U_DIR)
+ #error "INVERT_U_DIR is required for the U stepper."
#endif
#endif
#if HAS_V_AXIS
@@ -1651,11 +1659,13 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#elif ENABLED(AXIS8_ROTATES) && DISABLED(AXIS7_ROTATES)
#error "AXIS8_ROTATES requires AXIS7_ROTATES."
#elif !defined(V_MIN_POS) || !defined(V_MAX_POS)
- #error "V_MIN_POS and V_MAX_POS are required with NUM_AXES >= 8."
+ #error "V_MIN_POS and V_MAX_POS are required for the V axis."
#elif !defined(V_HOME_DIR)
- #error "V_HOME_DIR is required with NUM_AXES >= 8."
+ #error "V_HOME_DIR is required for the V axis."
#elif HAS_V_ENABLE && !defined(V_ENABLE_ON)
- #error "V_ENABLE_ON is required for your V driver with NUM_AXES >= 8."
+ #error "V_ENABLE_ON is required for the V stepper."
+ #elif !defined(INVERT_V_DIR)
+ #error "INVERT_V_DIR is required for the V stepper."
#endif
#endif
#if HAS_W_AXIS
@@ -1664,11 +1674,13 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#elif ENABLED(AXIS9_ROTATES) && DISABLED(AXIS8_ROTATES)
#error "AXIS9_ROTATES requires AXIS8_ROTATES."
#elif !defined(W_MIN_POS) || !defined(W_MAX_POS)
- #error "W_MIN_POS and W_MAX_POS are required with NUM_AXES >= 9."
+ #error "W_MIN_POS and W_MAX_POS are required for the W axis."
#elif !defined(W_HOME_DIR)
- #error "W_HOME_DIR is required with NUM_AXES >= 9."
+ #error "W_HOME_DIR is required for the W axis."
#elif HAS_W_ENABLE && !defined(W_ENABLE_ON)
- #error "W_ENABLE_ON is required for your W driver with NUM_AXES >= 9."
+ #error "W_ENABLE_ON is required for the W stepper."
+ #elif !defined(INVERT_W_DIR)
+ #error "INVERT_W_DIR is required for the W stepper."
#endif
#endif
From 7e79fc5b8e04e0614d8ae09f908a73728f3e596e Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Wed, 8 Feb 2023 20:26:59 -0600
Subject: [PATCH 07/97] =?UTF-8?q?=F0=9F=A9=B9=20Safe=20Bed=20Leveling=20up?=
=?UTF-8?q?dates?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 34 +++++++++++++++++----
Marlin/src/gcode/bedlevel/abl/G29.cpp | 6 ++--
Marlin/src/gcode/bedlevel/mbl/G29.cpp | 6 ++--
Marlin/src/inc/Conditionals_adv.h | 6 ++++
Marlin/src/inc/SanityCheck.h | 21 +++++++++++++
5 files changed, 59 insertions(+), 14 deletions(-)
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
index d6cb0b762f..f5c370aa68 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
+++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
@@ -318,9 +318,7 @@ void unified_bed_leveling::G29() {
TERN_(HAS_MULTI_HOTEND, if (active_extruder != 0) tool_change(0, true));
// Position bed horizontally and Z probe vertically.
- #if defined(SAFE_BED_LEVELING_START_X) || defined(SAFE_BED_LEVELING_START_Y) || defined(SAFE_BED_LEVELING_START_Z) \
- || defined(SAFE_BED_LEVELING_START_I) || defined(SAFE_BED_LEVELING_START_J) || defined(SAFE_BED_LEVELING_START_K) \
- || defined(SAFE_BED_LEVELING_START_U) || defined(SAFE_BED_LEVELING_START_V) || defined(SAFE_BED_LEVELING_START_W)
+ #if HAS_SAFE_BED_LEVELING
xyze_pos_t safe_position = current_position;
#ifdef SAFE_BED_LEVELING_START_X
safe_position.x = SAFE_BED_LEVELING_START_X;
@@ -351,7 +349,7 @@ void unified_bed_leveling::G29() {
#endif
do_blocking_move_to(safe_position);
- #endif
+ #endif // HAS_SAFE_BED_LEVELING
}
// Invalidate one or more nearby mesh points, possibly all.
@@ -887,8 +885,32 @@ void set_message_with_feedback(FSTR_P const fstr) {
ui.capture();
save_ubl_active_state_and_disable(); // Disable bed level correction for probing
- do_blocking_move_to(0.5f * (MESH_MAX_X - (MESH_MIN_X)), 0.5f * (MESH_MAX_Y - (MESH_MIN_Y)), MANUAL_PROBE_START_Z);
- //, _MIN(planner.settings.max_feedrate_mm_s[X_AXIS], planner.settings.max_feedrate_mm_s[Y_AXIS]) * 0.5f);
+ do_blocking_move_to(
+ NUM_AXIS_LIST(
+ 0.5f * ((MESH_MAX_X) - (MESH_MIN_X)),
+ 0.5f * ((MESH_MAX_Y) - (MESH_MIN_Y)),
+ MANUAL_PROBE_START_Z
+ #ifdef SAFE_BED_LEVELING_START_I
+ , SAFE_BED_LEVELING_START_I
+ #endif
+ #ifdef SAFE_BED_LEVELING_START_J
+ , SAFE_BED_LEVELING_START_J
+ #endif
+ #ifdef SAFE_BED_LEVELING_START_K
+ , SAFE_BED_LEVELING_START_K
+ #endif
+ #ifdef SAFE_BED_LEVELING_START_U
+ , SAFE_BED_LEVELING_START_U
+ #endif
+ #ifdef SAFE_BED_LEVELING_START_V
+ , SAFE_BED_LEVELING_START_V
+ #endif
+ #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();
SERIAL_ECHOPGM("Place shim under nozzle");
diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp
index 0fef5ad683..4769bd79c0 100644
--- a/Marlin/src/gcode/bedlevel/abl/G29.cpp
+++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp
@@ -453,9 +453,7 @@ G29_TYPE GcodeSuite::G29() {
}
// Position bed horizontally and Z probe vertically.
- #if defined(SAFE_BED_LEVELING_START_X) || defined(SAFE_BED_LEVELING_START_Y) || defined(SAFE_BED_LEVELING_START_Z) \
- || defined(SAFE_BED_LEVELING_START_I) || defined(SAFE_BED_LEVELING_START_J) || defined(SAFE_BED_LEVELING_START_K) \
- || defined(SAFE_BED_LEVELING_START_U) || defined(SAFE_BED_LEVELING_START_V) || defined(SAFE_BED_LEVELING_START_W)
+ #if HAS_SAFE_BED_LEVELING
xyze_pos_t safe_position = current_position;
#ifdef SAFE_BED_LEVELING_START_X
safe_position.x = SAFE_BED_LEVELING_START_X;
@@ -486,7 +484,7 @@ G29_TYPE GcodeSuite::G29() {
#endif
do_blocking_move_to(safe_position);
- #endif
+ #endif // HAS_SAFE_BED_LEVELING
// Disable auto bed leveling during G29.
// Be formal so G29 can be done successively without G28.
diff --git a/Marlin/src/gcode/bedlevel/mbl/G29.cpp b/Marlin/src/gcode/bedlevel/mbl/G29.cpp
index e98f3d5ee3..e3e96a7960 100644
--- a/Marlin/src/gcode/bedlevel/mbl/G29.cpp
+++ b/Marlin/src/gcode/bedlevel/mbl/G29.cpp
@@ -108,9 +108,7 @@ void GcodeSuite::G29() {
TERN_(DWIN_LCD_PROUI, DWIN_LevelingStart());
// Position bed horizontally and Z probe vertically.
- #if defined(SAFE_BED_LEVELING_START_X) || defined(SAFE_BED_LEVELING_START_Y) || defined(SAFE_BED_LEVELING_START_Z) \
- || defined(SAFE_BED_LEVELING_START_I) || defined(SAFE_BED_LEVELING_START_J) || defined(SAFE_BED_LEVELING_START_K) \
- || defined(SAFE_BED_LEVELING_START_U) || defined(SAFE_BED_LEVELING_START_V) || defined(SAFE_BED_LEVELING_START_W)
+ #if HAS_SAFE_BED_LEVELING
xyze_pos_t safe_position = current_position;
#ifdef SAFE_BED_LEVELING_START_X
safe_position.x = SAFE_BED_LEVELING_START_X;
@@ -141,7 +139,7 @@ void GcodeSuite::G29() {
#endif
do_blocking_move_to(safe_position);
- #endif
+ #endif // HAS_SAFE_BED_LEVELING
return;
}
diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h
index bfd8caf3dd..ad89824347 100644
--- a/Marlin/src/inc/Conditionals_adv.h
+++ b/Marlin/src/inc/Conditionals_adv.h
@@ -1038,6 +1038,12 @@
#endif
#endif
+#if defined(SAFE_BED_LEVELING_START_X) || defined(SAFE_BED_LEVELING_START_Y) || defined(SAFE_BED_LEVELING_START_Z) \
+ || defined(SAFE_BED_LEVELING_START_I) || defined(SAFE_BED_LEVELING_START_J) || defined(SAFE_BED_LEVELING_START_K) \
+ || defined(SAFE_BED_LEVELING_START_U) || defined(SAFE_BED_LEVELING_START_V) || defined(SAFE_BED_LEVELING_START_W)
+ #define HAS_SAFE_BED_LEVELING 1
+#endif
+
//
// SD Card connection methods
// Defined here so pins and sanity checks can use them
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index ec1c1a6475..85bdba8a8e 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -2197,6 +2197,27 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
static_assert(WITHIN(Z_SAFE_HOMING_Y_POINT, Y_MIN_POS, Y_MAX_POS), "Z_SAFE_HOMING_Y_POINT can't be reached by the nozzle.");
#endif
+// Check Safe Bed Leveling settings
+#if HAS_SAFE_BED_LEVELING
+ #if defined(SAFE_BED_LEVELING_START_Y) && !defined(SAFE_BED_LEVELING_START_X)
+ #error "If SAFE_BED_LEVELING_START_Y is defined, SAFE_BED_LEVELING_START_X must also be defined."
+ #elif defined(SAFE_BED_LEVELING_START_Z) && !defined(SAFE_BED_LEVELING_START_Y)
+ #error "If SAFE_BED_LEVELING_START_Z is defined, SAFE_BED_LEVELING_START_Y must also be defined."
+ #elif defined(SAFE_BED_LEVELING_START_I) && !defined(SAFE_BED_LEVELING_START_Z)
+ #error "If SAFE_BED_LEVELING_START_I is defined, SAFE_BED_LEVELING_START_Z must also be defined."
+ #elif defined(SAFE_BED_LEVELING_START_J) && !defined(SAFE_BED_LEVELING_START_I)
+ #error "If SAFE_BED_LEVELING_START_J is defined, SAFE_BED_LEVELING_START_I must also be defined."
+ #elif defined(SAFE_BED_LEVELING_START_K) && !defined(SAFE_BED_LEVELING_START_J)
+ #error "If SAFE_BED_LEVELING_START_K is defined, SAFE_BED_LEVELING_START_J must also be defined."
+ #elif defined(SAFE_BED_LEVELING_START_U) && !defined(SAFE_BED_LEVELING_START_K)
+ #error "If SAFE_BED_LEVELING_START_U is defined, SAFE_BED_LEVELING_START_K must also be defined."
+ #elif defined(SAFE_BED_LEVELING_START_V) && !defined(SAFE_BED_LEVELING_START_U)
+ #error "If SAFE_BED_LEVELING_START_V is defined, SAFE_BED_LEVELING_START_U must also be defined."
+ #elif defined(SAFE_BED_LEVELING_START_W) && !defined(SAFE_BED_LEVELING_START_V)
+ #error "If SAFE_BED_LEVELING_START_W is defined, SAFE_BED_LEVELING_START_V must also be defined."
+ #endif
+#endif
+
/**
* Make sure DISABLE_[XYZ] compatible with selected homing options
*/
From f595878b5b12ba87c88e43160b3434e76c782998 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Wed, 8 Feb 2023 20:28:56 -0600
Subject: [PATCH 08/97] =?UTF-8?q?=F0=9F=A9=B9=20Various=20simple=20fixes?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../feature/bedlevel/mbl/mesh_bed_leveling.h | 4 ++--
Marlin/src/feature/bedlevel/ubl/ubl.h | 4 ++--
Marlin/src/gcode/calibrate/G34.cpp | 2 +-
Marlin/src/gcode/control/M350_M351.cpp | 3 ---
Marlin/src/gcode/feature/camera/M240.cpp | 10 ++++++----
Marlin/src/gcode/probe/G38.cpp | 8 +-------
Marlin/src/lcd/extui/ui_api.cpp | 8 +++++---
Marlin/src/lcd/language/language_fr.h | 4 ++--
Marlin/src/lcd/language/language_ru.h | 14 +++++++-------
Marlin/src/lcd/language/language_uk.h | 14 +++++++-------
Marlin/src/lcd/marlinui.cpp | 2 +-
Marlin/src/module/motion.cpp | 17 +++++------------
Marlin/src/module/motion.h | 4 ++--
Marlin/src/module/planner.cpp | 2 +-
Marlin/src/module/probe.cpp | 19 ++++++++++---------
.../share/PlatformIO/scripts/configuration.py | 2 +-
16 files changed, 53 insertions(+), 64 deletions(-)
diff --git a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h
index aa97cb57ba..0193b4f43e 100644
--- a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h
+++ b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h
@@ -32,8 +32,8 @@ enum MeshLevelingState : char {
MeshReset // G29 S5
};
-#define MESH_X_DIST (float(MESH_MAX_X - (MESH_MIN_X)) / (GRID_MAX_CELLS_X))
-#define MESH_Y_DIST (float(MESH_MAX_Y - (MESH_MIN_Y)) / (GRID_MAX_CELLS_Y))
+#define MESH_X_DIST (float((MESH_MAX_X) - (MESH_MIN_X)) / (GRID_MAX_CELLS_X))
+#define MESH_Y_DIST (float((MESH_MAX_Y) - (MESH_MIN_Y)) / (GRID_MAX_CELLS_Y))
class mesh_bed_leveling {
public:
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.h b/Marlin/src/feature/bedlevel/ubl/ubl.h
index a7103d6e18..ae69e3cd92 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl.h
+++ b/Marlin/src/feature/bedlevel/ubl/ubl.h
@@ -38,8 +38,8 @@ enum MeshPointType : char { INVALID, REAL, SET_IN_BITMAP, CLOSEST };
struct mesh_index_pair;
-#define MESH_X_DIST (float(MESH_MAX_X - (MESH_MIN_X)) / (GRID_MAX_CELLS_X))
-#define MESH_Y_DIST (float(MESH_MAX_Y - (MESH_MIN_Y)) / (GRID_MAX_CELLS_Y))
+#define MESH_X_DIST (float((MESH_MAX_X) - (MESH_MIN_X)) / (GRID_MAX_CELLS_X))
+#define MESH_Y_DIST (float((MESH_MAX_Y) - (MESH_MIN_Y)) / (GRID_MAX_CELLS_Y))
#if ENABLED(OPTIMIZED_MESH_STORAGE)
typedef int16_t mesh_store_t[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y];
diff --git a/Marlin/src/gcode/calibrate/G34.cpp b/Marlin/src/gcode/calibrate/G34.cpp
index 1be3952ffe..7ae1e7765c 100644
--- a/Marlin/src/gcode/calibrate/G34.cpp
+++ b/Marlin/src/gcode/calibrate/G34.cpp
@@ -58,7 +58,7 @@ void GcodeSuite::G34() {
// Move XY to safe position
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Parking XY");
const xy_pos_t safe_pos = GANTRY_CALIBRATION_SAFE_POSITION;
- do_blocking_move_to(safe_pos, MMM_TO_MMS(GANTRY_CALIBRATION_XY_PARK_FEEDRATE));
+ do_blocking_move_to_xy(safe_pos, MMM_TO_MMS(GANTRY_CALIBRATION_XY_PARK_FEEDRATE));
#endif
const float move_distance = parser.intval('Z', GANTRY_CALIBRATION_EXTRA_HEIGHT),
diff --git a/Marlin/src/gcode/control/M350_M351.cpp b/Marlin/src/gcode/control/M350_M351.cpp
index ac6b5a329b..425abad529 100644
--- a/Marlin/src/gcode/control/M350_M351.cpp
+++ b/Marlin/src/gcode/control/M350_M351.cpp
@@ -29,9 +29,6 @@
#if NUM_AXES == XYZ && EXTRUDERS >= 1
#define HAS_M350_B_PARAM 1 // "5th axis" (after E0) for an original XYZEB setup.
- #if AXIS_COLLISION('B')
- #error "M350 parameter 'B' collision with axis name."
- #endif
#endif
/**
diff --git a/Marlin/src/gcode/feature/camera/M240.cpp b/Marlin/src/gcode/feature/camera/M240.cpp
index 19051ffd42..cf2e47ef6d 100644
--- a/Marlin/src/gcode/feature/camera/M240.cpp
+++ b/Marlin/src/gcode/feature/camera/M240.cpp
@@ -128,11 +128,13 @@ void GcodeSuite::M240() {
if (homing_needed_error()) return;
- const xyz_pos_t old_pos = {
+ const xyz_pos_t old_pos = NUM_AXIS_ARRAY(
current_position.x + parser.linearval('A'),
current_position.y + parser.linearval('B'),
- current_position.z
- };
+ current_position.z,
+ current_position.i, current_position.j, current_position.k,
+ current_position.u, current_position.v, current_position.w
+ );
#ifdef PHOTO_RETRACT_MM
const float rval = parser.linearval('R', _PHOTO_RETRACT_MM);
@@ -140,7 +142,7 @@ void GcodeSuite::M240() {
e_move_m240(-rval, sval);
#endif
- feedRate_t fr_mm_s = MMM_TO_MMS(parser.linearval('F'));
+ feedRate_t fr_mm_s = parser.feedrateval('F');
if (fr_mm_s) NOLESS(fr_mm_s, 10.0f);
constexpr xyz_pos_t photo_position = PHOTO_POSITION;
diff --git a/Marlin/src/gcode/probe/G38.cpp b/Marlin/src/gcode/probe/G38.cpp
index 1b2da756b1..5b138fdaf6 100644
--- a/Marlin/src/gcode/probe/G38.cpp
+++ b/Marlin/src/gcode/probe/G38.cpp
@@ -110,13 +110,7 @@ void GcodeSuite::G38(const int8_t subcode) {
remember_feedrate_scaling_off();
- const bool error_on_fail =
- #if ENABLED(G38_PROBE_AWAY)
- !TEST(subcode, 0)
- #else
- (subcode == 2)
- #endif
- ;
+ const bool error_on_fail = TERN(G38_PROBE_AWAY, !TEST(subcode, 0), subcode == 2);
// If any axis has enough movement, do the move
LOOP_NUM_AXES(i)
diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp
index da04c9bc8b..1075816c43 100644
--- a/Marlin/src/lcd/extui/ui_api.cpp
+++ b/Marlin/src/lcd/extui/ui_api.cpp
@@ -843,11 +843,13 @@ namespace ExtUI {
#endif // BABYSTEPPING
float getZOffset_mm() {
- return (0.0f
+ return (
#if HAS_BED_PROBE
- + probe.offset.z
+ probe.offset.z
#elif ENABLED(BABYSTEP_DISPLAY_TOTAL)
- + planner.mm_per_step[Z_AXIS] * babystep.axis_total[BS_AXIS_IND(Z_AXIS)]
+ planner.mm_per_step[Z_AXIS] * babystep.axis_total[BS_AXIS_IND(Z_AXIS)]
+ #else
+ 0.0f
#endif
);
}
diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h
index d9d43427c2..fdb556abe8 100644
--- a/Marlin/src/lcd/language/language_fr.h
+++ b/Marlin/src/lcd/language/language_fr.h
@@ -367,7 +367,7 @@ namespace Language_fr {
LSTR MSG_STOPPED = _UxGT("STOPPÉ");
LSTR MSG_CONTROL_RETRACT = _UxGT("Rétractation mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Ech. rétr. mm");
- LSTR MSG_CONTROL_RETRACTF = _UxGT("Vit. rétract°");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Vit. rétract") LCD_STR_DEGREE;
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Saut Z mm");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Rét.reprise mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Ech.reprise mm");
@@ -378,7 +378,7 @@ namespace Language_fr {
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Augmenter Z");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Vitesse primaire");
LSTR MSG_SINGLENOZZLE_WIPE_RETRACT = _UxGT("Purge Retract");
- LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Vitesse rétract°");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Vitesse rétract") LCD_STR_DEGREE;
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Garer Extrudeur");
LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Vitesse reprise");
LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Vit. ventil.");
diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h
index b8a08afc22..b9cb0c5ebf 100644
--- a/Marlin/src/lcd/language/language_ru.h
+++ b/Marlin/src/lcd/language/language_ru.h
@@ -218,10 +218,10 @@ namespace Language_ru {
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Построить свою сетку");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Правка сетки завершена");
#else
- LSTR MSG_UBL_SET_TEMP_BED = LCD_STR_THERMOMETER _UxGT(" стола, ") LCD_STR_DEGREE "C";
- LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" стола,") LCD_STR_DEGREE "C";
- LSTR MSG_UBL_SET_TEMP_HOTEND = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE "C";
- LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" сопла,") LCD_STR_DEGREE "C";
+ LSTR MSG_UBL_SET_TEMP_BED = LCD_STR_THERMOMETER _UxGT(" стола, ") LCD_STR_DEGREE _UxGT("C");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" стола,") LCD_STR_DEGREE _UxGT("C");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE _UxGT("C");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" сопла,") LCD_STR_DEGREE _UxGT("C");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Построить свою");
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Правка завершена");
#endif
@@ -343,12 +343,12 @@ namespace Language_ru {
LSTR MSG_MOVE_100MM = _UxGT("Движение 100mm");
LSTR MSG_SPEED = _UxGT("Скорость");
LSTR MSG_BED_Z = _UxGT("Z стола");
- LSTR MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE "C";
+ LSTR MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE _UxGT("C");
LSTR MSG_NOZZLE_N = _UxGT("Сопло ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Сопло запарковано");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Сопло ожидает");
- LSTR MSG_BED = _UxGT("Стол, ") LCD_STR_DEGREE "C";
- LSTR MSG_CHAMBER = _UxGT("Камера,") LCD_STR_DEGREE "C";
+ LSTR MSG_BED = _UxGT("Стол, ") LCD_STR_DEGREE _UxGT("C");
+ LSTR MSG_CHAMBER = _UxGT("Камера,") LCD_STR_DEGREE _UxGT("C");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_COOLER = _UxGT("Охлаждение лазера");
LSTR MSG_COOLER_TOGGLE = _UxGT("Переключ. охлажд.");
diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h
index 16f3c95278..f4e7741f93 100644
--- a/Marlin/src/lcd/language/language_uk.h
+++ b/Marlin/src/lcd/language/language_uk.h
@@ -213,10 +213,10 @@ namespace Language_uk {
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Рух до наступної");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Активувати UBL");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Деактивувати UBL");
- LSTR MSG_UBL_SET_TEMP_BED = LCD_STR_THERMOMETER _UxGT(" столу, ") LCD_STR_DEGREE "C";
- LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" столу,") LCD_STR_DEGREE "C";
- LSTR MSG_UBL_SET_TEMP_HOTEND = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE "C";
- LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" сопла,") LCD_STR_DEGREE "C";
+ LSTR MSG_UBL_SET_TEMP_BED = LCD_STR_THERMOMETER _UxGT(" столу, ") LCD_STR_DEGREE _UxGT("C");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" столу,") LCD_STR_DEGREE _UxGT("C");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE _UxGT("C");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" сопла,") LCD_STR_DEGREE _UxGT("C");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Редагувати свою сітку");
LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Точне редагування сітки");
@@ -344,12 +344,12 @@ namespace Language_uk {
LSTR MSG_MOVE_100MM = _UxGT("Рух 100mm");
LSTR MSG_SPEED = _UxGT("Швидкість");
LSTR MSG_BED_Z = _UxGT("Z Столу");
- LSTR MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE "C";
+ LSTR MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE _UxGT("C");
LSTR MSG_NOZZLE_N = _UxGT("Сопло ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Сопло запарковане");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Сопло очікує");
- LSTR MSG_BED = _UxGT("Стіл, ") LCD_STR_DEGREE "C";
- LSTR MSG_CHAMBER = _UxGT("Камера,") LCD_STR_DEGREE "C";
+ LSTR MSG_BED = _UxGT("Стіл, ") LCD_STR_DEGREE _UxGT("C");
+ LSTR MSG_CHAMBER = _UxGT("Камера,") LCD_STR_DEGREE _UxGT("C");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_COOLER = _UxGT("Охолодження лазеру");
LSTR MSG_COOLER_TOGGLE = _UxGT("Перемк. охолодж.");
diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp
index 91982b5480..5d264198a3 100644
--- a/Marlin/src/lcd/marlinui.cpp
+++ b/Marlin/src/lcd/marlinui.cpp
@@ -833,7 +833,7 @@ void MarlinUI::init() {
// Apply a linear offset to a single axis
if (axis == ALL_AXES_ENUM)
destination = all_axes_destination;
- else if (axis <= XYZE) {
+ else if (axis <= LOGICAL_AXES) {
destination = current_position;
destination[axis] += offset;
}
diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp
index 7c90ae7159..b32368ca92 100644
--- a/Marlin/src/module/motion.cpp
+++ b/Marlin/src/module/motion.cpp
@@ -555,7 +555,7 @@ void _internal_move_to_destination(const_feedRate_t fr_mm_s/*=0.0f*/
* - Delta may lower Z first to get into the free motion zone.
* - Before returning, wait for the planner buffer to empty.
*/
-void do_blocking_move_to(NUM_AXIS_ARGS(const float), const_feedRate_t fr_mm_s/*=0.0f*/) {
+void do_blocking_move_to(NUM_AXIS_ARGS(const_float_t), const_feedRate_t fr_mm_s/*=0.0f*/) {
DEBUG_SECTION(log_move, "do_blocking_move_to", DEBUGGING(LEVELING));
if (DEBUGGING(LEVELING)) DEBUG_XYZ("> ", NUM_AXIS_ARGS());
@@ -2281,25 +2281,18 @@ void prepare_line_to_destination() {
#endif
// Put away the Z probe
- #if HOMING_Z_WITH_PROBE
- if (axis == Z_AXIS && probe.stow()) return;
- #endif
+ if (TERN0(HOMING_Z_WITH_PROBE, axis == Z_AXIS && probe.stow())) return;
#if DISABLED(DELTA) && defined(HOMING_BACKOFF_POST_MM)
const xyz_float_t endstop_backoff = HOMING_BACKOFF_POST_MM;
if (endstop_backoff[axis]) {
current_position[axis] -= ABS(endstop_backoff[axis]) * axis_home_dir;
- line_to_current_position(
- #if HOMING_Z_WITH_PROBE
- (axis == Z_AXIS) ? z_probe_fast_mm_s :
- #endif
- homing_feedrate(axis)
- );
+ line_to_current_position(TERN_(HOMING_Z_WITH_PROBE, (axis == Z_AXIS) ? z_probe_fast_mm_s :) homing_feedrate(axis));
#if ENABLED(SENSORLESS_HOMING)
planner.synchronize();
if (false
- #if ANY(IS_CORE, MARKFORGED_XY, MARKFORGED_YX)
+ #ifdef NORMAL_AXIS
|| axis != NORMAL_AXIS
#endif
) safe_delay(200); // Short delay to allow belts to spring back
@@ -2406,7 +2399,7 @@ void set_axis_is_at_home(const AxisEnum axis) {
* Change the home offset for an axis.
* Also refreshes the workspace offset.
*/
- void set_home_offset(const AxisEnum axis, const float v) {
+ void set_home_offset(const AxisEnum axis, const_float_t v) {
home_offset[axis] = v;
update_workspace_offset(axis);
}
diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h
index 8950cf6f22..f0e4094f0f 100644
--- a/Marlin/src/module/motion.h
+++ b/Marlin/src/module/motion.h
@@ -346,7 +346,7 @@ inline void prepare_internal_move_to_destination(const_feedRate_t fr_mm_s=0.0f)
/**
* Blocking movement and shorthand functions
*/
-void do_blocking_move_to(NUM_AXIS_ARGS(const float), const_feedRate_t fr_mm_s=0.0f);
+void do_blocking_move_to(NUM_AXIS_ARGS(const_float_t), const_feedRate_t fr_mm_s=0.0f);
void do_blocking_move_to(const xy_pos_t &raw, const_feedRate_t fr_mm_s=0.0f);
void do_blocking_move_to(const xyz_pos_t &raw, const_feedRate_t fr_mm_s=0.0f);
void do_blocking_move_to(const xyze_pos_t &raw, const_feedRate_t fr_mm_s=0.0f);
@@ -618,7 +618,7 @@ void home_if_needed(const bool keeplev=false);
#endif
#if HAS_M206_COMMAND
- void set_home_offset(const AxisEnum axis, const float v);
+ void set_home_offset(const AxisEnum axis, const_float_t v);
#endif
#if USE_SENSORLESS
diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp
index aceaf8a253..46aff32481 100644
--- a/Marlin/src/module/planner.cpp
+++ b/Marlin/src/module/planner.cpp
@@ -2192,7 +2192,7 @@ bool Planner::_populate_block(
#endif
);
- #if SECONDARY_LINEAR_AXES >= 1 && NONE(FOAMCUTTER_XYUV, ARTICULATED_ROBOT_ARM)
+ #if SECONDARY_LINEAR_AXES && NONE(FOAMCUTTER_XYUV, ARTICULATED_ROBOT_ARM)
if (UNEAR_ZERO(distance_sqr)) {
// Move does not involve any primary linear axes (xyz) but might involve secondary linear axes
distance_sqr = (0.0f
diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp
index fa92ae1fb5..f0a3c8584b 100644
--- a/Marlin/src/module/probe.cpp
+++ b/Marlin/src/module/probe.cpp
@@ -152,7 +152,7 @@ xyz_pos_t Probe::offset; // Initialized by settings.load()
#elif ENABLED(TOUCH_MI_PROBE)
// Move to the magnet to unlock the probe
- inline void run_deploy_moves_script() {
+ inline void run_deploy_moves() {
#ifndef TOUCH_MI_DEPLOY_XPOS
#define TOUCH_MI_DEPLOY_XPOS X_MIN_POS
#elif TOUCH_MI_DEPLOY_XPOS > X_MAX_BED
@@ -183,16 +183,17 @@ xyz_pos_t Probe::offset; // Initialized by settings.load()
}
// Move down to the bed to stow the probe
- inline void run_stow_moves_script() {
- const xyz_pos_t oldpos = current_position;
+ // TODO: Handle cases where it would be a bad idea to move down.
+ inline void run_stow_moves() {
+ const float oldz = current_position.z;
endstops.enable_z_probe(false);
do_blocking_move_to_z(TOUCH_MI_RETRACT_Z, homing_feedrate(Z_AXIS));
- do_blocking_move_to(oldpos, homing_feedrate(Z_AXIS));
+ do_blocking_move_to_z(oldz, homing_feedrate(Z_AXIS));
}
#elif ENABLED(Z_PROBE_ALLEN_KEY)
- inline void run_deploy_moves_script() {
+ inline void run_deploy_moves() {
#ifdef Z_PROBE_ALLEN_KEY_DEPLOY_1
#ifndef Z_PROBE_ALLEN_KEY_DEPLOY_1_FEEDRATE
#define Z_PROBE_ALLEN_KEY_DEPLOY_1_FEEDRATE 0.0
@@ -230,7 +231,7 @@ xyz_pos_t Probe::offset; // Initialized by settings.load()
#endif
}
- inline void run_stow_moves_script() {
+ inline void run_stow_moves() {
#ifdef Z_PROBE_ALLEN_KEY_STOW_1
#ifndef Z_PROBE_ALLEN_KEY_STOW_1_FEEDRATE
#define Z_PROBE_ALLEN_KEY_STOW_1_FEEDRATE 0.0
@@ -272,7 +273,7 @@ xyz_pos_t Probe::offset; // Initialized by settings.load()
typedef struct { float fr_mm_min; xyz_pos_t where; } mag_probe_move_t;
- inline void run_deploy_moves_script() {
+ inline void run_deploy_moves() {
#ifdef MAG_MOUNTED_DEPLOY_1
constexpr mag_probe_move_t deploy_1 = MAG_MOUNTED_DEPLOY_1;
do_blocking_move_to(deploy_1.where, MMM_TO_MMS(deploy_1.fr_mm_min));
@@ -295,7 +296,7 @@ xyz_pos_t Probe::offset; // Initialized by settings.load()
#endif
}
- inline void run_stow_moves_script() {
+ inline void run_stow_moves() {
#ifdef MAG_MOUNTED_STOW_1
constexpr mag_probe_move_t stow_1 = MAG_MOUNTED_STOW_1;
do_blocking_move_to(stow_1.where, MMM_TO_MMS(stow_1.fr_mm_min));
@@ -406,7 +407,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
#elif ANY(TOUCH_MI_PROBE, Z_PROBE_ALLEN_KEY, MAG_MOUNTED_PROBE)
- deploy ? run_deploy_moves_script() : run_stow_moves_script();
+ deploy ? run_deploy_moves() : run_stow_moves();
#elif ENABLED(RACK_AND_PINION_PROBE)
diff --git a/buildroot/share/PlatformIO/scripts/configuration.py b/buildroot/share/PlatformIO/scripts/configuration.py
index 42fc91038e..7a07f02d46 100644
--- a/buildroot/share/PlatformIO/scripts/configuration.py
+++ b/buildroot/share/PlatformIO/scripts/configuration.py
@@ -90,7 +90,7 @@ def fetch_example(url):
if '@' in url: url, brch = map(str.strip, url.split('@'))
url = f"https://raw.githubusercontent.com/MarlinFirmware/Configurations/{brch}/config/{url}"
url = url.replace("%", "%25").replace(" ", "%20")
-
+
# Find a suitable fetch command
if shutil.which("curl") is not None:
fetch = "curl -L -s -S -f -o"
From a6b677f0ac5f8a29bb5226eb0e43756969629319 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Wed, 8 Feb 2023 20:29:37 -0600
Subject: [PATCH 09/97] =?UTF-8?q?=F0=9F=A9=B9=20Extra=20axes=20for=20Tool?=
=?UTF-8?q?=20Change?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/module/tool_change.cpp | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp
index 74e99ac093..16b562e482 100644
--- a/Marlin/src/module/tool_change.cpp
+++ b/Marlin/src/module/tool_change.cpp
@@ -1350,6 +1350,14 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
#else
do_blocking_move_to_xy(destination, planner.settings.max_feedrate_mm_s[X_AXIS]);
do_blocking_move_to_z(destination.z, planner.settings.max_feedrate_mm_s[Z_AXIS]);
+ SECONDARY_AXIS_CODE(
+ do_blocking_move_to_i(destination.i, planner.settings.max_feedrate_mm_s[I_AXIS]),
+ do_blocking_move_to_j(destination.j, planner.settings.max_feedrate_mm_s[J_AXIS]),
+ do_blocking_move_to_k(destination.k, planner.settings.max_feedrate_mm_s[K_AXIS]),
+ do_blocking_move_to_u(destination.u, planner.settings.max_feedrate_mm_s[U_AXIS]),
+ do_blocking_move_to_v(destination.v, planner.settings.max_feedrate_mm_s[V_AXIS]),
+ do_blocking_move_to_w(destination.w, planner.settings.max_feedrate_mm_s[W_AXIS])
+ );
#endif
#endif
From 339773dcb5e8912e3bad2d916ff8c8ebb617694a Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Wed, 8 Feb 2023 20:31:02 -0600
Subject: [PATCH 10/97] =?UTF-8?q?=F0=9F=A9=B9=20Extra=20axis=20min=20home?=
=?UTF-8?q?=20with=20Delta=20Sensorless=20Probe?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/module/endstops.cpp | 12 +++---------
1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp
index f4fbda747b..cabb0fbf19 100644
--- a/Marlin/src/module/endstops.cpp
+++ b/Marlin/src/module/endstops.cpp
@@ -691,15 +691,9 @@ void __O2 Endstops::report_states() {
} // Endstops::report_states
-#if HAS_DELTA_SENSORLESS_PROBING
- #define __ENDSTOP(AXIS, ...) AXIS ##_MAX
- #define _ENDSTOP_PIN(AXIS, ...) AXIS ##_MAX_PIN
- #define _ENDSTOP_INVERTING(AXIS, ...) AXIS ##_MAX_ENDSTOP_INVERTING
-#else
- #define __ENDSTOP(AXIS, MINMAX) AXIS ##_## MINMAX
- #define _ENDSTOP_PIN(AXIS, MINMAX) AXIS ##_## MINMAX ##_PIN
- #define _ENDSTOP_INVERTING(AXIS, MINMAX) AXIS ##_## MINMAX ##_ENDSTOP_INVERTING
-#endif
+#define __ENDSTOP(AXIS, MINMAX) AXIS ##_## MINMAX
+#define _ENDSTOP_PIN(AXIS, MINMAX) AXIS ##_## MINMAX ##_PIN
+#define _ENDSTOP_INVERTING(AXIS, MINMAX) AXIS ##_## MINMAX ##_ENDSTOP_INVERTING
#define _ENDSTOP(AXIS, MINMAX) __ENDSTOP(AXIS, MINMAX)
/**
From 3cd9599155aa46e4abcdfab8971e0afc27514a2b Mon Sep 17 00:00:00 2001
From: Alexander Gavrilenko
Date: Thu, 9 Feb 2023 06:12:26 +0300
Subject: [PATCH 11/97] =?UTF-8?q?=F0=9F=90=9B=20Fix=208-bit=20FSMC=20AA=20?=
=?UTF-8?q?font=20colors=20(#25285)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/lcd/tft/canvas.cpp | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/Marlin/src/lcd/tft/canvas.cpp b/Marlin/src/lcd/tft/canvas.cpp
index 64cb29ade6..3fb500e8e2 100644
--- a/Marlin/src/lcd/tft/canvas.cpp
+++ b/Marlin/src/lcd/tft/canvas.cpp
@@ -74,6 +74,12 @@ void CANVAS::AddText(uint16_t x, uint16_t y, uint16_t color, uint16_t *string, u
uint16_t colors[16];
uint16_t stringWidth = 0;
+ if (GetFontType() == FONT_MARLIN_GLYPHS_2BPP) {
+ for (uint8_t i = 0; i < 3; i++) {
+ colors[i] = gradient(ENDIAN_COLOR(color), ENDIAN_COLOR(background_color), ((i+1) << 8) / 3);
+ colors[i] = ENDIAN_COLOR(colors[i]);
+ }
+ }
for (uint16_t i = 0 ; *(string + i) ; i++) {
glyph_t *glyph = Glyph(string + i);
if (stringWidth + glyph->BBXWidth > maxWidth) break;
@@ -82,8 +88,6 @@ void CANVAS::AddText(uint16_t x, uint16_t y, uint16_t color, uint16_t *string, u
AddImage(x + stringWidth + glyph->BBXOffsetX, y + GetFontAscent() - glyph->BBXHeight - glyph->BBXOffsetY, glyph->BBXWidth, glyph->BBXHeight, GREYSCALE1, ((uint8_t *)glyph) + sizeof(glyph_t), &color);
break;
case FONT_MARLIN_GLYPHS_2BPP:
- for (uint8_t i = 0; i < 3; i++)
- colors[i] = gradient(color, background_color, ((i+1) << 8) / 3);
AddImage(x + stringWidth + glyph->BBXOffsetX, y + GetFontAscent() - glyph->BBXHeight - glyph->BBXOffsetY, glyph->BBXWidth, glyph->BBXHeight, GREYSCALE2, ((uint8_t *)glyph) + sizeof(glyph_t), colors);
break;
}
From 8a9de407a1105a1b21274bfd018d9aabd6ab9df5 Mon Sep 17 00:00:00 2001
From: EvilGremlin <22657714+EvilGremlin@users.noreply.github.com>
Date: Thu, 9 Feb 2023 06:46:02 +0300
Subject: [PATCH 12/97] =?UTF-8?q?=F0=9F=94=A8=20Adjust=20INI=20comments=20?=
=?UTF-8?q?(#25183)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ini/renamed.ini | 33 +++++++++++----------------------
ini/stm32f1-maple.ini | 2 +-
ini/stm32f1.ini | 15 ++++++++++++++-
ini/stm32g0.ini | 3 +++
4 files changed, 29 insertions(+), 24 deletions(-)
diff --git a/ini/renamed.ini b/ini/renamed.ini
index fa154f3a0f..cd890b593c 100644
--- a/ini/renamed.ini
+++ b/ini/renamed.ini
@@ -21,46 +21,35 @@ board = genericSTM32F103RE
# List of environment names that are no longer used
#
-[env:STM32F103RET6_creality_maple]
-# Renamed to STM32F103RE_creality_maple
+[env:STM32F103RET6_creality_maple] ;=> STM32F103RE_creality_maple
extends = renamed
-[env:STM32F103RET6_creality]
-# Renamed to STM32F103RE_creality
+[env:STM32F103RET6_creality] ;=> STM32F103RE_creality
extends = renamed
-[env:STM32F103RET6_creality_xfer]
-# Renamed to STM32F103RE_creality_xfer
+[env:STM32F103RET6_creality_xfer] ;=> STM32F103RE_creality_xfer
extends = renamed
-[env:STM32F103RC_btt_512K]
-# Renamed to STM32F103RE_btt
+[env:STM32F103RC_btt_512K] ;=> STM32F103RE_btt
extends = renamed
-[env:STM32F103RC_btt_512K_USB]
-# Renamed to STM32F103RE_btt_USB
+[env:STM32F103RC_btt_512K_USB] ;=> STM32F103RE_btt_USB
extends = renamed
-[env:STM32F103RC_btt_512K_maple]
-# Renamed to STM32F103RE_btt_maple
+[env:STM32F103RC_btt_512K_maple] ;=> STM32F103RE_btt_maple
extends = renamed
-[env:STM32F103RC_btt_512K_USB_maple]
-# Renamed to STM32F103RE_btt_USB_maple
+[env:STM32F103RC_btt_512K_USB_maple] ;=> STM32F103RE_btt_USB_maple
extends = renamed
-[env:STM32F103RC_meeb]
-# Renamed to STM32F103RC_meeb_maple
+[env:STM32F103RC_meeb] ;=> STM32F103RC_meeb_maple
extends = renamed
-[env:STM32F103VE_GTM32]
-# Renamed to STM32F103VE_GTM32_maple
+[env:STM32F103VE_GTM32] ;=> STM32F103VE_GTM32_maple
extends = renamed
-[env:mks_robin_nano35]
-# Renamed to mks_robin_nano_v1v2
+[env:mks_robin_nano35] ;=> mks_robin_nano_v1v2
extends = renamed
-[env:mks_robin_nano35_maple]
-# Renamed to mks_robin_nano_v1v2_maple
+[env:mks_robin_nano35_maple] ;=> mks_robin_nano_v1v2_maple
extends = renamed
diff --git a/ini/stm32f1-maple.ini b/ini/stm32f1-maple.ini
index 2e3cd0a37a..dc75774754 100644
--- a/ini/stm32f1-maple.ini
+++ b/ini/stm32f1-maple.ini
@@ -137,7 +137,7 @@ debug_tool = jlink
upload_protocol = jlink
#
-# Creality (STM32F103RET6)
+# Creality 512K (STM32F103RE) for new 64KiB bootloader (CR-10 Smart Pro printer)
#
[env:STM32F103RE_creality_smartPro_maple]
extends = env:STM32F103RE_creality_maple
diff --git a/ini/stm32f1.ini b/ini/stm32f1.ini
index d8db3628c3..1adc83a8f9 100644
--- a/ini/stm32f1.ini
+++ b/ini/stm32f1.ini
@@ -135,7 +135,11 @@ debug_tool = jlink
upload_protocol = jlink
#
-# Custom upload to SD via Marlin with Binary Protocol
+# Creality (STM32F103Rx)
+# With custom upload to SD via Marlin with binary protocol.
+# Requires Marlin with BINARY_FILE_TRANSFER already installed on the target board.
+# If CUSTOM_FIRMWARE_UPLOAD is also installed, Marlin will reboot the board to install the firmware.
+# Currently CUSTOM_FIRMWARE_UPLOAD must also be enabled to use 'xfer' build envs.
#
[STM32F103Rx_creality_xfer]
extends = STM32F103Rx_creality
@@ -151,10 +155,16 @@ upload_protocol = custom
extends = STM32F103Rx_creality
board = genericSTM32F103RE
+#
+# Creality 512K (STM32F103RE) with custom binary upload to SD (see above).
+#
[env:STM32F103RE_creality_xfer]
extends = STM32F103Rx_creality_xfer
board = genericSTM32F103RE
+#
+# Creality 512K (STM32F103RE) for new 64KiB bootloader (CR-10 Smart Pro printer)
+#
[env:STM32F103RE_creality_smartPro]
extends = STM32F103Rx_creality
board_build.offset = 0x10000
@@ -167,6 +177,9 @@ board_upload.offset_address = 0x08010000
extends = STM32F103Rx_creality
board = genericSTM32F103RC
+#
+# Creality 256K (STM32F103RC) with custom binary upload to SD (see above).
+#
[env:STM32F103RC_creality_xfer]
extends = STM32F103Rx_creality_xfer
board = genericSTM32F103RC
diff --git a/ini/stm32g0.ini b/ini/stm32g0.ini
index c8554741bc..5891395642 100644
--- a/ini/stm32g0.ini
+++ b/ini/stm32g0.ini
@@ -61,6 +61,9 @@ debug_tool = stlink
#
# BigTreeTech SKR Mini E3 V3.0 / Manta E3 EZ V1.0 / Manta M4P V1.0 / Manta M5P V1.0 (STM32G0B1RET6 ARM Cortex-M0+)
# Custom upload to SD via Marlin with Binary Protocol
+# Requires Marlin with BINARY_FILE_TRANSFER already installed on the target board.
+# If CUSTOM_FIRMWARE_UPLOAD is also installed, Marlin will reboot the board to install the firmware.
+# Currently CUSTOM_FIRMWARE_UPLOAD must also be enabled to use 'xfer' build envs.
#
[env:STM32G0B1RE_btt_xfer]
extends = env:STM32G0B1RE_btt
From ef3f484d3ca620272f849b913851541b54b51c09 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Thu, 9 Feb 2023 06:33:20 +0000
Subject: [PATCH 13/97] [cron] Bump distribution date (2023-02-09)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 209bc401af..532ab7cd9c 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-02-08"
+//#define STRING_DISTRIBUTION_DATE "2023-02-09"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 83e546be60..82c353feff 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-02-08"
+ #define STRING_DISTRIBUTION_DATE "2023-02-09"
#endif
/**
From 58d6b5db0a91ec5b8f949df138a9912c059cfdcd Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Sat, 11 Feb 2023 21:29:32 -0600
Subject: [PATCH 14/97] =?UTF-8?q?=F0=9F=94=A8=20Suppress=20native=20build?=
=?UTF-8?q?=20warnings?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ini/native.ini | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ini/native.ini b/ini/native.ini
index 7ed705a782..6a0cce38e8 100644
--- a/ini/native.ini
+++ b/ini/native.ini
@@ -37,7 +37,7 @@ build_src_filter = ${common.default_src_filter} +
platform = native
framework =
build_flags = ${common.build_flags} -std=gnu++17 -D__PLAT_NATIVE_SIM__ -DU8G_HAL_LINKS -I/usr/include/SDL2 -IMarlin -IMarlin/src/HAL/NATIVE_SIM/u8g
-build_src_flags = -Wall -Wno-expansion-to-defined -Wcast-align
+build_src_flags = -Wall -Wno-expansion-to-defined -Wno-deprecated-declarations -Wcast-align
release_flags = -g0 -O3 -flto
debug_build_flags = -fstack-protector-strong -g -g3 -ggdb
lib_compat_mode = off
From db01960a0e8a7d37173914c601a9bf413f911a86 Mon Sep 17 00:00:00 2001
From: Trivalik <3148279+trivalik@users.noreply.github.com>
Date: Sun, 12 Feb 2023 05:14:53 +0100
Subject: [PATCH 15/97] =?UTF-8?q?=F0=9F=9A=B8=20Negative=20temperature=20d?=
=?UTF-8?q?isplay=20option=20(#25036)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Scott Lahteine
---
Marlin/Configuration_adv.h | 3 +++
Marlin/src/lcd/HD44780/marlinui_HD44780.cpp | 14 +++++++++--
Marlin/src/lcd/dogm/status_screen_DOGM.cpp | 26 +++++++++++++++------
3 files changed, 34 insertions(+), 9 deletions(-)
diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index 31cbd678bf..a9e6d4928f 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -1455,6 +1455,9 @@
// Show the E position (filament used) during printing
//#define LCD_SHOW_E_TOTAL
+ // Display a negative temperature instead of "err"
+ //#define SHOW_TEMPERATURE_BELOW_ZERO
+
/**
* LED Control Menu
* Add LED Control to the LCD menu
diff --git a/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp b/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp
index 9445198a22..9093fa3eab 100644
--- a/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp
+++ b/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp
@@ -537,7 +537,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
*/
FORCE_INLINE void _draw_heater_status(const heater_id_t heater_id, const char prefix, const bool blink) {
#if HAS_HEATED_BED
- const bool isBed = TERN(HAS_HEATED_CHAMBER, heater_id == H_BED, heater_id < 0);
+ const bool isBed = heater_id == H_BED;
const celsius_t t1 = (isBed ? thermalManager.wholeDegBed() : thermalManager.wholeDegHotend(heater_id)),
t2 = (isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater_id));
#else
@@ -546,7 +546,17 @@ FORCE_INLINE void _draw_heater_status(const heater_id_t heater_id, const char pr
if (prefix >= 0) lcd_put_lchar(prefix);
- lcd_put_u8str(t1 < 0 ? "err" : i16tostr3rj(t1));
+ if (t1 >= 0)
+ lcd_put_u8str(ui16tostr3rj(t1));
+ else {
+ #if ENABLED(SHOW_TEMPERATURE_BELOW_ZERO)
+ char * const str = i16tostr3rj(t1);
+ lcd_put_u8str(&str[1]);
+ #else
+ lcd_put_u8str(F("err"));
+ #endif
+ }
+
lcd_put_u8str(F("/"));
#if !HEATER_IDLE_HANDLER
diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
index 8bdba42342..721dcb63ff 100644
--- a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
+++ b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
@@ -192,14 +192,26 @@
#define PROGRESS_BAR_WIDTH (LCD_PIXEL_WIDTH - PROGRESS_BAR_X)
FORCE_INLINE void _draw_centered_temp(const celsius_t temp, const uint8_t tx, const uint8_t ty) {
- if (temp < 0)
- lcd_put_u8str(tx - 3 * (INFO_FONT_WIDTH) / 2 + 1, ty, F("err"));
- else {
- const char *str = i16tostr3rj(temp);
- const uint8_t len = str[0] != ' ' ? 3 : str[1] != ' ' ? 2 : 1;
- lcd_put_u8str(tx - len * (INFO_FONT_WIDTH) / 2 + 1, ty, &str[3-len]);
- lcd_put_lchar(LCD_STR_DEGREE[0]);
+ const char *str;
+ uint8_t len;
+ if (temp >= 0) {
+ str = i16tostr3left(temp);
+ len = strlen(str);
+ lcd_moveto(tx + 1 - len * (INFO_FONT_WIDTH) / 2, ty);
}
+ else {
+ #if ENABLED(SHOW_TEMPERATURE_BELOW_ZERO)
+ str = i16tostr3left((-temp) % 100);
+ len = strlen(str) + 1;
+ lcd_moveto(tx + 1 - len * (INFO_FONT_WIDTH) / 2, ty);
+ lcd_put_lchar('-');
+ #else
+ lcd_put_u8str(tx + 1 - 3 * (INFO_FONT_WIDTH) / 2, ty, F("err"));
+ return;
+ #endif
+ }
+ lcd_put_u8str(str);
+ lcd_put_lchar(LCD_STR_DEGREE[0]);
}
#if DO_DRAW_FLOWMETER
From 0ddce13ebee0e8262c902c5d782b324451a8b544 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Sun, 12 Feb 2023 06:05:48 +0000
Subject: [PATCH 16/97] [cron] Bump distribution date (2023-02-12)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 532ab7cd9c..963999d392 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-02-09"
+//#define STRING_DISTRIBUTION_DATE "2023-02-12"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 82c353feff..1899d61a03 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-02-09"
+ #define STRING_DISTRIBUTION_DATE "2023-02-12"
#endif
/**
From c421a2f5dd8e32e48afadee304301befaf40fd49 Mon Sep 17 00:00:00 2001
From: Giuliano Zaro <3684609+GMagician@users.noreply.github.com>
Date: Sun, 12 Feb 2023 07:35:19 +0100
Subject: [PATCH 17/97] =?UTF-8?q?=E2=9C=A8=20M306=20E=20for=20MPC=20extrud?=
=?UTF-8?q?er=20index=20(#25326)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-Authored-By: Scott Lahteine
---
Marlin/src/gcode/temp/M306.cpp | 17 ++++++++----
Marlin/src/lcd/e3v2/proui/dwin.cpp | 2 +-
Marlin/src/module/temperature.cpp | 44 +++++++++++++++++-------------
Marlin/src/module/temperature.h | 2 +-
4 files changed, 39 insertions(+), 26 deletions(-)
diff --git a/Marlin/src/gcode/temp/M306.cpp b/Marlin/src/gcode/temp/M306.cpp
index 582eb13f81..928f375c38 100644
--- a/Marlin/src/gcode/temp/M306.cpp
+++ b/Marlin/src/gcode/temp/M306.cpp
@@ -31,11 +31,13 @@
/**
* M306: MPC settings and autotune
*
- * T Autotune the active extruder.
+ * E Extruder index. (Default: Active Extruder)
*
+ * T Autotune the specified or active extruder.
+ *
+ * Set MPC values manually for the specified or active extruder:
* A Ambient heat transfer coefficient (no fan).
* C Block heat capacity.
- * E Extruder number to set. (Default: E0)
* F Ambient heat transfer coefficient (fan on full).
* H Filament heat capacity per mm.
* P Heater power.
@@ -43,16 +45,21 @@
*/
void GcodeSuite::M306() {
+ const uint8_t e = TERN(HAS_MULTI_EXTRUDER, parser.intval('E', active_extruder), 0);
+ if (e >= (EXTRUDERS)) {
+ SERIAL_ECHOLNPGM("?(E)xtruder index out of range (0-", (EXTRUDERS) - 1, ").");
+ return;
+ }
+
if (parser.seen_test('T')) {
LCD_MESSAGE(MSG_MPC_AUTOTUNE);
- thermalManager.MPC_autotune();
+ thermalManager.MPC_autotune(e);
ui.reset_status();
return;
}
if (parser.seen("ACFPRH")) {
- const heater_id_t hid = (heater_id_t)parser.intval('E', 0);
- MPC_t &mpc = thermalManager.temp_hotend[hid].mpc;
+ MPC_t &mpc = thermalManager.temp_hotend[e].mpc;
if (parser.seenval('P')) mpc.heater_power = parser.value_float();
if (parser.seenval('C')) mpc.block_heat_capacity = parser.value_float();
if (parser.seenval('R')) mpc.sensor_responsiveness = parser.value_float();
diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp
index c45aae6044..ae10f0e84e 100644
--- a/Marlin/src/lcd/e3v2/proui/dwin.cpp
+++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp
@@ -3542,7 +3542,7 @@ void Draw_Steps_Menu() {
#if ENABLED(MPCTEMP)
- void HotendMPC() { thermalManager.MPC_autotune(); }
+ void HotendMPC() { thermalManager.MPC_autotune(active_extruder); }
void SetHeaterPower() { SetPFloatOnClick(1, 200, 1); }
void SetBlkHeatCapacity() { SetPFloatOnClick(0, 40, 2); }
void SetSensorRespons() { SetPFloatOnClick(0, 1, 4); }
diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp
index 4b0ee355d4..f3a1dc7afe 100644
--- a/Marlin/src/module/temperature.cpp
+++ b/Marlin/src/module/temperature.cpp
@@ -884,19 +884,23 @@ volatile bool Temperature::raw_temps_ready = false;
#if ENABLED(MPCTEMP)
- void Temperature::MPC_autotune() {
- auto housekeeping = [] (millis_t &ms, celsius_float_t ¤t_temp, millis_t &next_report_ms) {
+ #if EITHER(MPC_FAN_0_ALL_HOTENDS, MPC_FAN_0_ACTIVE_HOTEND)
+ #define SINGLEFAN 1
+ #endif
+
+ void Temperature::MPC_autotune(const uint8_t e) {
+ auto housekeeping = [] (millis_t &ms, const uint8_t e, celsius_float_t ¤t_temp, millis_t &next_report_ms) {
ms = millis();
if (updateTemperaturesIfReady()) { // temp sample ready
- current_temp = degHotend(active_extruder);
+ current_temp = degHotend(e);
TERN_(HAS_FAN_LOGIC, manage_extruder_fans(ms));
}
if (ELAPSED(ms, next_report_ms)) {
next_report_ms += 1000UL;
- print_heater_states(active_extruder);
+ print_heater_states(e);
SERIAL_EOL();
}
@@ -914,15 +918,17 @@ volatile bool Temperature::raw_temps_ready = false;
};
struct OnExit {
+ uint8_t e;
+ OnExit(const uint8_t _e) { this->e = _e; }
~OnExit() {
wait_for_heatup = false;
ui.reset_status();
- temp_hotend[active_extruder].target = 0.0f;
- temp_hotend[active_extruder].soft_pwm_amount = 0;
+ temp_hotend[e].target = 0.0f;
+ temp_hotend[e].soft_pwm_amount = 0;
#if HAS_FAN
- set_fan_speed(EITHER(MPC_FAN_0_ALL_HOTENDS, MPC_FAN_0_ACTIVE_HOTEND) ? 0 : active_extruder, 0);
+ set_fan_speed(TERN(SINGLEFAN, 0, e), 0);
planner.sync_fan_speeds(fan_speed);
#endif
@@ -930,11 +936,11 @@ volatile bool Temperature::raw_temps_ready = false;
TERN_(TEMP_TUNING_MAINTAIN_FAN, adaptive_fan_slowing = true);
}
- } on_exit;
+ } on_exit(e);
SERIAL_ECHOPGM(STR_MPC_AUTOTUNE);
- SERIAL_ECHOLNPGM(STR_MPC_AUTOTUNE_START, active_extruder);
- MPCHeaterInfo &hotend = temp_hotend[active_extruder];
+ SERIAL_ECHOLNPGM(STR_MPC_AUTOTUNE_START, e);
+ MPCHeaterInfo &hotend = temp_hotend[e];
MPC_t &mpc = hotend.mpc;
TERN_(TEMP_TUNING_MAINTAIN_FAN, adaptive_fan_slowing = false);
@@ -944,7 +950,7 @@ volatile bool Temperature::raw_temps_ready = false;
disable_all_heaters();
#if HAS_FAN
zero_fan_speeds();
- set_fan_speed(EITHER(MPC_FAN_0_ALL_HOTENDS, MPC_FAN_0_ACTIVE_HOTEND) ? 0 : active_extruder, 255);
+ set_fan_speed(TERN(SINGLEFAN, 0, e), 255);
planner.sync_fan_speeds(fan_speed);
#endif
do_blocking_move_to(xyz_pos_t(MPC_TUNING_POS));
@@ -958,12 +964,12 @@ volatile bool Temperature::raw_temps_ready = false;
#endif
millis_t ms = millis(), next_report_ms = ms, next_test_ms = ms + 10000UL;
- celsius_float_t current_temp = degHotend(active_extruder),
+ celsius_float_t current_temp = degHotend(e),
ambient_temp = current_temp;
wait_for_heatup = true;
for (;;) { // Can be interrupted with M108
- if (housekeeping(ms, current_temp, next_report_ms)) return;
+ if (housekeeping(ms, e, current_temp, next_report_ms)) return;
if (ELAPSED(ms, next_test_ms)) {
if (current_temp >= ambient_temp) {
@@ -977,7 +983,7 @@ volatile bool Temperature::raw_temps_ready = false;
wait_for_heatup = false;
#if HAS_FAN
- set_fan_speed(EITHER(MPC_FAN_0_ALL_HOTENDS, MPC_FAN_0_ACTIVE_HOTEND) ? 0 : active_extruder, 0);
+ set_fan_speed(TERN(SINGLEFAN, 0, e), 0);
planner.sync_fan_speeds(fan_speed);
#endif
@@ -995,7 +1001,7 @@ volatile bool Temperature::raw_temps_ready = false;
wait_for_heatup = true;
for (;;) { // Can be interrupted with M108
- if (housekeeping(ms, current_temp, next_report_ms)) return;
+ if (housekeeping(ms, e, current_temp, next_report_ms)) return;
if (ELAPSED(ms, next_test_ms)) {
// Record samples between 100C and 200C
@@ -1054,16 +1060,16 @@ volatile bool Temperature::raw_temps_ready = false;
wait_for_heatup = true;
for (;;) { // Can be interrupted with M108
- if (housekeeping(ms, current_temp, next_report_ms)) return;
+ if (housekeeping(ms, e, current_temp, next_report_ms)) return;
if (ELAPSED(ms, next_test_ms)) {
- hotend.soft_pwm_amount = (int)get_pid_output_hotend(active_extruder) >> 1;
+ hotend.soft_pwm_amount = (int)get_pid_output_hotend(e) >> 1;
if (ELAPSED(ms, settle_end_ms) && !ELAPSED(ms, test_end_ms) && TERN1(HAS_FAN, !fan0_done))
total_energy_fan0 += mpc.heater_power * hotend.soft_pwm_amount / 127 * MPC_dT + (last_temp - current_temp) * mpc.block_heat_capacity;
#if HAS_FAN
else if (ELAPSED(ms, test_end_ms) && !fan0_done) {
- set_fan_speed(EITHER(MPC_FAN_0_ALL_HOTENDS, MPC_FAN_0_ACTIVE_HOTEND) ? 0 : active_extruder, 255);
+ set_fan_speed(TERN(SINGLEFAN, 0, e), 255);
planner.sync_fan_speeds(fan_speed);
settle_end_ms = ms + settle_time;
test_end_ms = settle_end_ms + test_duration;
@@ -1451,7 +1457,7 @@ void Temperature::mintemp_error(const heater_id_t heater_id) {
float ambient_xfer_coeff = mpc.ambient_xfer_coeff_fan0;
#if ENABLED(MPC_INCLUDE_FAN)
- const uint8_t fan_index = EITHER(MPC_FAN_0_ACTIVE_HOTEND, MPC_FAN_0_ALL_HOTENDS) ? 0 : ee;
+ const uint8_t fan_index = TERN(SINGLEFAN, 0, ee);
const float fan_fraction = TERN_(MPC_FAN_0_ACTIVE_HOTEND, !this_hotend ? 0.0f : ) fan_speed[fan_index] * RECIPROCAL(255);
ambient_xfer_coeff += fan_fraction * mpc.fan255_adjustment;
#endif
diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h
index afbf656a7a..136ed982dd 100644
--- a/Marlin/src/module/temperature.h
+++ b/Marlin/src/module/temperature.h
@@ -1195,7 +1195,7 @@ class Temperature {
#endif
#if ENABLED(MPCTEMP)
- void MPC_autotune();
+ void MPC_autotune(const uint8_t e);
#endif
#if ENABLED(PROBING_HEATERS_OFF)
From 4c136c3dad1284d7c1ece2238c8413f8f97f8392 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Mon, 13 Feb 2023 00:44:22 +0000
Subject: [PATCH 18/97] [cron] Bump distribution date (2023-02-13)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 963999d392..61c4caa879 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-02-12"
+//#define STRING_DISTRIBUTION_DATE "2023-02-13"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 1899d61a03..7541c0760a 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-02-12"
+ #define STRING_DISTRIBUTION_DATE "2023-02-13"
#endif
/**
From fb480dffe4aefc82ed7c2d9643de7411dfe3e728 Mon Sep 17 00:00:00 2001
From: Radek <46979052+radek8@users.noreply.github.com>
Date: Wed, 15 Feb 2023 04:57:39 +0100
Subject: [PATCH 19/97] =?UTF-8?q?=F0=9F=93=9D=20Fix=20BTT=5FMINI=5F12864?=
=?UTF-8?q?=5FV1=20comment=20(#25366)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_common.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_common.h b/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_common.h
index 9448d4f0c5..5770f4a5ba 100644
--- a/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_common.h
+++ b/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_common.h
@@ -315,8 +315,8 @@
* EXP1-2 ----------- EXP1-9 ENC
* EXP1-1 ----------- EXP1-7 LCD_A0
*
- * TFT-2 ----------- EXP2-5 SCK
- * TFT-3 ----------- EXP2-9 MOSI
+ * TFT-2 ----------- EXP2-5 MOSI
+ * TFT-3 ----------- EXP2-9 SCK
*
* for backlight configuration see steps 2 (V2.1) and 3 in https://wiki.fysetc.com/Mini12864_Panel/
*/
From 028b11f2caccef5363a6695798632fdce58348f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Davide=20Rombol=C3=A0?=
Date: Wed, 15 Feb 2023 05:10:18 +0100
Subject: [PATCH 20/97] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20DGUS=5FLCD=5FUI=20in?=
=?UTF-8?q?put=20(#25374)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/lcd/extui/ia_creality/creality_extui.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp b/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
index d9e3cb5877..6742c2c010 100644
--- a/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
+++ b/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
@@ -689,7 +689,7 @@ namespace ExtUI {
case RunoutToggle:
case PowerLossToggle:
case FanKeyIcon:
- case LedToggle: break;
+ case LedToggle:
case e2Preheat: Checkkey = ManualSetTemp; break;
case ProbeOffset_Z: Checkkey = Zoffset_Value; break;
case VolumeDisplay: Checkkey = VolumeDisplay; break;
From aa8afe90b023b0ef1c4bc766566e81b894f66885 Mon Sep 17 00:00:00 2001
From: Frederik Kemner
Date: Wed, 15 Feb 2023 05:25:47 +0100
Subject: [PATCH 21/97] =?UTF-8?q?=F0=9F=9A=B8=20SPI=20endstops=20for=20X/Y?=
=?UTF-8?q?=20Dual=20and=20Core=20(#25371)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/module/endstops.cpp | 69 +++++++++++++---------------------
Marlin/src/module/endstops.h | 6 +++
2 files changed, 33 insertions(+), 42 deletions(-)
diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp
index cabb0fbf19..ef5f5d06e1 100644
--- a/Marlin/src/module/endstops.cpp
+++ b/Marlin/src/module/endstops.cpp
@@ -1330,75 +1330,54 @@ void Endstops::update() {
bool hit = false;
#if X_SPI_SENSORLESS
if (tmc_spi_homing.x && (stepperX.test_stall_status()
- #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) && Y_SPI_SENSORLESS
+ #if Y_SPI_SENSORLESS && ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX)
|| stepperY.test_stall_status()
- #elif CORE_IS_XZ && Z_SPI_SENSORLESS
+ #elif Z_SPI_SENSORLESS && CORE_IS_XZ
|| stepperZ.test_stall_status()
#endif
- )) {
- SBI(live_state, X_ENDSTOP);
- hit = true;
- }
+ )) { SBI(live_state, X_ENDSTOP); hit = true; }
+ #if ENABLED(X_DUAL_ENDSTOPS)
+ if (tmc_spi_homing.x && stepperX2.test_stall_status()) { SBI(live_state, X2_ENDSTOP); hit = true; }
+ #endif
#endif
#if Y_SPI_SENSORLESS
if (tmc_spi_homing.y && (stepperY.test_stall_status()
- #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) && X_SPI_SENSORLESS
+ #if X_SPI_SENSORLESS && ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX)
|| stepperX.test_stall_status()
- #elif CORE_IS_YZ && Z_SPI_SENSORLESS
+ #elif Z_SPI_SENSORLESS && CORE_IS_YZ
|| stepperZ.test_stall_status()
#endif
- )) {
- SBI(live_state, Y_ENDSTOP);
- hit = true;
- }
+ )) { SBI(live_state, Y_ENDSTOP); hit = true; }
+ #if ENABLED(Y_DUAL_ENDSTOPS)
+ if (tmc_spi_homing.y && stepperY2.test_stall_status()) { SBI(live_state, Y2_ENDSTOP); hit = true; }
+ #endif
#endif
#if Z_SPI_SENSORLESS
if (tmc_spi_homing.z && (stepperZ.test_stall_status()
- #if CORE_IS_XZ && X_SPI_SENSORLESS
+ #if X_SPI_SENSORLESS && CORE_IS_XZ
|| stepperX.test_stall_status()
- #elif CORE_IS_YZ && Y_SPI_SENSORLESS
+ #elif Y_SPI_SENSORLESS && CORE_IS_YZ
|| stepperY.test_stall_status()
#endif
- )) {
- SBI(live_state, Z_ENDSTOP);
- hit = true;
- }
+ )) { SBI(live_state, Z_ENDSTOP); hit = true; }
#endif
#if I_SPI_SENSORLESS
- if (tmc_spi_homing.i && stepperI.test_stall_status()) {
- SBI(live_state, I_ENDSTOP);
- hit = true;
- }
+ if (tmc_spi_homing.i && stepperI.test_stall_status()) { SBI(live_state, I_ENDSTOP); hit = true; }
#endif
#if J_SPI_SENSORLESS
- if (tmc_spi_homing.j && stepperJ.test_stall_status()) {
- SBI(live_state, J_ENDSTOP);
- hit = true;
- }
+ if (tmc_spi_homing.j && stepperJ.test_stall_status()) { SBI(live_state, J_ENDSTOP); hit = true; }
#endif
#if K_SPI_SENSORLESS
- if (tmc_spi_homing.k && stepperK.test_stall_status()) {
- SBI(live_state, K_ENDSTOP);
- hit = true;
- }
+ if (tmc_spi_homing.k && stepperK.test_stall_status()) { SBI(live_state, K_ENDSTOP); hit = true; }
#endif
#if U_SPI_SENSORLESS
- if (tmc_spi_homing.u && stepperU.test_stall_status()) {
- SBI(live_state, U_ENDSTOP);
- hit = true;
- }
+ if (tmc_spi_homing.u && stepperU.test_stall_status()) { SBI(live_state, U_ENDSTOP); hit = true; }
#endif
#if V_SPI_SENSORLESS
- if (tmc_spi_homing.v && stepperV.test_stall_status()) {
- SBI(live_state, V_ENDSTOP);
- hit = true;
- }
+ if (tmc_spi_homing.v && stepperV.test_stall_status()) { SBI(live_state, V_ENDSTOP); hit = true; }
#endif
#if W_SPI_SENSORLESS
- if (tmc_spi_homing.w && stepperW.test_stall_status()) {
- SBI(live_state, W_ENDSTOP);
- hit = true;
- }
+ if (tmc_spi_homing.w && stepperW.test_stall_status()) { SBI(live_state, W_ENDSTOP); hit = true; }
#endif
if (TERN0(ENDSTOP_INTERRUPTS_FEATURE, hit)) update();
@@ -1408,7 +1387,13 @@ void Endstops::update() {
void Endstops::clear_endstop_state() {
TERN_(X_SPI_SENSORLESS, CBI(live_state, X_ENDSTOP));
+ #if BOTH(X_SPI_SENSORLESS, X_DUAL_ENDSTOPS)
+ CBI(live_state, X2_ENDSTOP);
+ #endif
TERN_(Y_SPI_SENSORLESS, CBI(live_state, Y_ENDSTOP));
+ #if BOTH(Y_SPI_SENSORLESS, Y_DUAL_ENDSTOPS)
+ CBI(live_state, Y2_ENDSTOP);
+ #endif
TERN_(Z_SPI_SENSORLESS, CBI(live_state, Z_ENDSTOP));
TERN_(I_SPI_SENSORLESS, CBI(live_state, I_ENDSTOP));
TERN_(J_SPI_SENSORLESS, CBI(live_state, J_ENDSTOP));
diff --git a/Marlin/src/module/endstops.h b/Marlin/src/module/endstops.h
index bffa7fdc39..4d64455b21 100644
--- a/Marlin/src/module/endstops.h
+++ b/Marlin/src/module/endstops.h
@@ -85,9 +85,15 @@ enum EndstopEnum : char {
// Endstops can be either MIN or MAX but not both
#if HAS_X_MIN || HAS_X_MAX
, 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
, 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(Z_HOME_TO_MAX, Z_MAX, TERN(HOMING_Z_WITH_PROBE, Z_MIN_PROBE, Z_MIN))
From 2b86daa30bb4705f8369ca27dd5fe723c90ef634 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Tue, 14 Feb 2023 22:29:47 -0600
Subject: [PATCH 22/97] =?UTF-8?q?=F0=9F=8E=A8=20Tweak=20VALIDATE=5FMESH=5F?=
=?UTF-8?q?TILT?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 16 +++++-----------
1 file changed, 5 insertions(+), 11 deletions(-)
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
index f5c370aa68..354597b601 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
+++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
@@ -1489,7 +1489,7 @@ void unified_bed_leveling::smart_fill_mesh() {
float measured_z;
bool abort_flag = false;
- #ifdef VALIDATE_MESH_TILT
+ #if ENABLED(VALIDATE_MESH_TILT)
float z1, z2, z3; // Needed for algorithm validation below
#endif
@@ -1505,9 +1505,7 @@ void unified_bed_leveling::smart_fill_mesh() {
abort_flag = true;
else {
measured_z -= get_z_correction(points[0]);
- #ifdef VALIDATE_MESH_TILT
- z1 = measured_z;
- #endif
+ TERN_(VALIDATE_MESH_TILT, z1 = measured_z);
if (param.V_verbosity > 3) {
serial_spaces(16);
SERIAL_ECHOLNPGM("Corrected_Z=", measured_z);
@@ -1520,9 +1518,7 @@ void unified_bed_leveling::smart_fill_mesh() {
TERN_(HAS_STATUS_MESSAGE, ui.status_printf(0, F(S_FMT " 2/3"), GET_TEXT(MSG_LCD_TILTING_MESH)));
measured_z = probe.probe_at_point(points[1], PROBE_PT_RAISE, param.V_verbosity);
- #ifdef VALIDATE_MESH_TILT
- z2 = measured_z;
- #endif
+ TERN_(VALIDATE_MESH_TILT, z2 = measured_z);
if (isnan(measured_z))
abort_flag = true;
else {
@@ -1540,9 +1536,7 @@ void unified_bed_leveling::smart_fill_mesh() {
TERN_(HAS_STATUS_MESSAGE, ui.status_printf(0, F(S_FMT " 3/3"), GET_TEXT(MSG_LCD_TILTING_MESH)));
measured_z = probe.probe_at_point(points[2], PROBE_PT_LAST_STOW, param.V_verbosity);
- #ifdef VALIDATE_MESH_TILT
- z3 = measured_z;
- #endif
+ TERN_(VALIDATE_MESH_TILT, z3 = measured_z);
if (isnan(measured_z))
abort_flag = true;
else {
@@ -1689,7 +1683,7 @@ void unified_bed_leveling::smart_fill_mesh() {
* The Z error between the probed point locations and the get_z_correction()
* numbers for those locations should be 0.
*/
- #ifdef VALIDATE_MESH_TILT
+ #if ENABLED(VALIDATE_MESH_TILT)
auto d_from = []{ DEBUG_ECHOPGM("D from "); };
auto normed = [&](const xy_pos_t &pos, const_float_t zadd) {
return normal.x * pos.x + normal.y * pos.y + zadd;
From aacb81ea60c07d840036b59249af69c518398289 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Wed, 15 Feb 2023 06:13:44 +0000
Subject: [PATCH 23/97] [cron] Bump distribution date (2023-02-15)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 61c4caa879..2cd99e23f7 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-02-13"
+//#define STRING_DISTRIBUTION_DATE "2023-02-15"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 7541c0760a..efbde9bc0b 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-02-13"
+ #define STRING_DISTRIBUTION_DATE "2023-02-15"
#endif
/**
From fc20533583e6a1f9bd2840208a72fbbf362e4bb4 Mon Sep 17 00:00:00 2001
From: apulver
Date: Wed, 15 Feb 2023 01:38:54 -0500
Subject: [PATCH 24/97] =?UTF-8?q?=E2=9C=A8=20AVOID=5FOBSTACLES=20for=20UBL?=
=?UTF-8?q?=20(#25256)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/Configuration.h | 19 +++++++++++
Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 14 ++++++--
Marlin/src/module/probe.h | 38 ++++++++++++++++++---
buildroot/tests/mega2560 | 2 +-
4 files changed, 64 insertions(+), 9 deletions(-)
diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index c66ca4e9e8..6363b79360 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -2053,6 +2053,25 @@
//#define UBL_MESH_WIZARD // Run several commands in a row to get a complete mesh
+ /**
+ * Probing not allowed within the position of an obstacle.
+ */
+ //#define AVOID_OBSTACLES
+ #if ENABLED(AVOID_OBSTACLES)
+ #define CLIP_W 23 // Bed clip width, should be padded a few mm over its physical size
+ #define CLIP_H 14 // Bed clip height, should be padded a few mm over its physical size
+
+ // Obstacle Rectangles defined as { X1, Y1, X2, Y2 }
+ #define OBSTACLE1 { (X_BED_SIZE) / 4 - (CLIP_W) / 2, 0, (X_BED_SIZE) / 4 + (CLIP_W) / 2, CLIP_H }
+ #define OBSTACLE2 { (X_BED_SIZE) * 3 / 4 - (CLIP_W) / 2, 0, (X_BED_SIZE) * 3 / 4 + (CLIP_W) / 2, CLIP_H }
+ #define OBSTACLE3 { (X_BED_SIZE) / 4 - (CLIP_W) / 2, (Y_BED_SIZE) - (CLIP_H), (X_BED_SIZE) / 4 + (CLIP_W) / 2, Y_BED_SIZE }
+ #define OBSTACLE4 { (X_BED_SIZE) * 3 / 4 - (CLIP_W) / 2, (Y_BED_SIZE) - (CLIP_H), (X_BED_SIZE) * 3 / 4 + (CLIP_W) / 2, Y_BED_SIZE }
+
+ // The probed grid must be inset for G29 J. This is okay, since it is
+ // only used to compute a linear transformation for the mesh itself.
+ #define G29J_MESH_TILT_MARGIN ((CLIP_H) + 1)
+ #endif
+
#elif ENABLED(MESH_BED_LEVELING)
//===========================================================================
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
index 354597b601..02efb3e065 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
+++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
@@ -1478,9 +1478,17 @@ void unified_bed_leveling::smart_fill_mesh() {
#include "../../../libs/vector_3.h"
void unified_bed_leveling::tilt_mesh_based_on_probed_grid(const bool do_3_pt_leveling) {
- const float x_min = probe.min_x(), x_max = probe.max_x(),
- y_min = probe.min_y(), y_max = probe.max_y(),
- dx = (x_max - x_min) / (param.J_grid_size - 1),
+
+ #ifdef G29J_MESH_TILT_MARGIN
+ const float x_min = _MAX(probe.min_x() + (G29J_MESH_TILT_MARGIN), X_MIN_POS),
+ x_max = _MIN(probe.max_x() - (G29J_MESH_TILT_MARGIN), X_MAX_POS),
+ y_min = _MAX(probe.min_y() + (G29J_MESH_TILT_MARGIN), Y_MIN_POS),
+ y_max = _MIN(probe.max_y() - (G29J_MESH_TILT_MARGIN), Y_MAX_POS);
+ #else
+ const float x_min = probe.min_x(), x_max = probe.max_x(),
+ y_min = probe.min_y(), y_max = probe.max_y();
+ #endif
+ const float dx = (x_max - x_min) / (param.J_grid_size - 1),
dy = (y_max - y_min) / (param.J_grid_size - 1);
xy_float_t points[3];
diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h
index 961ba41144..a179eb21d8 100644
--- a/Marlin/src/module/probe.h
+++ b/Marlin/src/module/probe.h
@@ -76,9 +76,7 @@ class Probe {
public:
#if ENABLED(SENSORLESS_PROBING)
- typedef struct {
- bool x:1, y:1, z:1;
- } sense_bool_t;
+ typedef struct { bool x:1, y:1, z:1; } sense_bool_t;
static sense_bool_t test_sensitivity;
#endif
@@ -118,6 +116,32 @@ public:
#else
+ static bool obstacle_check(const_float_t rx, const_float_t ry) {
+ #if ENABLED(AVOID_OBSTACLES)
+ #ifdef OBSTACLE1
+ constexpr float obst1[] = OBSTACLE1;
+ static_assert(COUNT(obst1) == 4, "OBSTACLE1 must define a rectangle in the form { X1, Y1, X2, Y2 }.");
+ if (WITHIN(rx, obst1[0], obst1[2]) && WITHIN(ry, obst1[1], obst1[3])) return false;
+ #endif
+ #ifdef OBSTACLE2
+ constexpr float obst2[] = OBSTACLE2;
+ static_assert(COUNT(obst2) == 4, "OBSTACLE2 must define a rectangle in the form { X1, Y1, X2, Y2 }.");
+ if (WITHIN(rx, obst2[0], obst2[2]) && WITHIN(ry, obst2[1], obst2[3])) return false;
+ #endif
+ #ifdef OBSTACLE3
+ constexpr float obst3[] = OBSTACLE3;
+ static_assert(COUNT(obst3) == 4, "OBSTACLE3 must define a rectangle in the form { X1, Y1, X2, Y2 }.");
+ if (WITHIN(rx, obst3[0], obst3[2]) && WITHIN(ry, obst3[1], obst3[3])) return false;
+ #endif
+ #ifdef OBSTACLE4
+ constexpr float obst4[] = OBSTACLE4;
+ static_assert(COUNT(obst4) == 4, "OBSTACLE4 must define a rectangle in the form { X1, Y1, X2, Y2 }.");
+ if (WITHIN(rx, obst4[0], obst4[2]) && WITHIN(ry, obst4[1], obst4[3])) return false;
+ #endif
+ #endif
+ return true;
+ }
+
/**
* Return whether the given position is within the bed, and whether the nozzle
* can reach the position required to put the probe at the given position.
@@ -129,12 +153,16 @@ public:
if (probe_relative) {
return position_is_reachable(rx - offset_xy.x, ry - offset_xy.y)
&& COORDINATE_OKAY(rx, min_x() - fslop, max_x() + fslop)
- && COORDINATE_OKAY(ry, min_y() - fslop, max_y() + fslop);
+ && COORDINATE_OKAY(ry, min_y() - fslop, max_y() + fslop)
+ && obstacle_check(rx, ry)
+ && obstacle_check(rx - offset_xy.x, ry - offset_xy.y);
}
else {
return position_is_reachable(rx, ry)
&& COORDINATE_OKAY(rx + offset_xy.x, min_x() - fslop, max_x() + fslop)
- && COORDINATE_OKAY(ry + offset_xy.y, min_y() - fslop, max_y() + fslop);
+ && COORDINATE_OKAY(ry + offset_xy.y, min_y() - fslop, max_y() + fslop)
+ && obstacle_check(rx, ry)
+ && obstacle_check(rx + offset_xy.x, ry + offset_xy.y);
}
}
diff --git a/buildroot/tests/mega2560 b/buildroot/tests/mega2560
index de305082ec..7cac8b13b0 100755
--- a/buildroot/tests/mega2560
+++ b/buildroot/tests/mega2560
@@ -26,7 +26,7 @@ ci_src_filter -y
use_example_configs AnimationExample
opt_set MOTHERBOARD BOARD_AZTEEG_X3_PRO LCD_LANGUAGE fr SAVED_POSITIONS 4 DEFAULT_EJERK 10 \
EXTRUDERS 5 TEMP_SENSOR_1 1 TEMP_SENSOR_2 5 TEMP_SENSOR_3 20 TEMP_SENSOR_4 1000 TEMP_SENSOR_BED 1
-opt_enable AUTO_BED_LEVELING_UBL RESTORE_LEVELING_AFTER_G28 DEBUG_LEVELING_FEATURE G26_MESH_VALIDATION ENABLE_LEVELING_FADE_HEIGHT SKEW_CORRECTION \
+opt_enable AUTO_BED_LEVELING_UBL AVOID_OBSTACLES RESTORE_LEVELING_AFTER_G28 DEBUG_LEVELING_FEATURE G26_MESH_VALIDATION ENABLE_LEVELING_FADE_HEIGHT SKEW_CORRECTION \
REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER LIGHTWEIGHT_UI STATUS_MESSAGE_SCROLLING SHOW_CUSTOM_BOOTSCREEN BOOT_MARLIN_LOGO_SMALL \
SDSUPPORT SDCARD_SORT_ALPHA USB_FLASH_DRIVE_SUPPORT AUTO_REPORT_SD_STATUS SCROLL_LONG_FILENAMES MEDIA_MENU_AT_TOP \
EEPROM_SETTINGS EEPROM_CHITCHAT GCODE_MACROS CUSTOM_MENU_MAIN FREEZE_FEATURE CANCEL_OBJECTS SOUND_MENU_ITEM \
From 196f403dd6be59e1bcfd24f31895a1ebc551caac Mon Sep 17 00:00:00 2001
From: alexgrach
Date: Wed, 15 Feb 2023 09:40:26 +0300
Subject: [PATCH 25/97] =?UTF-8?q?=F0=9F=9A=B8=20Stop=20button=20for=20Touc?=
=?UTF-8?q?h=20UI=20(#25379)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/lcd/tft/touch.cpp | 7 +++++++
Marlin/src/lcd/tft/touch.h | 1 +
Marlin/src/lcd/tft/ui_1024x600.cpp | 5 ++++-
Marlin/src/lcd/tft/ui_320x240.cpp | 11 +++++++----
Marlin/src/lcd/tft/ui_480x320.cpp | 5 ++++-
5 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/Marlin/src/lcd/tft/touch.cpp b/Marlin/src/lcd/tft/touch.cpp
index 6c81ebefcd..77082db0d7 100644
--- a/Marlin/src/lcd/tft/touch.cpp
+++ b/Marlin/src/lcd/tft/touch.cpp
@@ -233,6 +233,13 @@ void Touch::touch(touch_control_t *control) {
MenuItem_int3::action(GET_TEXT_F(MSG_FLOW_N), &planner.flow_percentage[MenuItemBase::itemIndex], 10, 999, []{ planner.refresh_e_factor(MenuItemBase::itemIndex); });
#endif
break;
+ case STOP:
+ ui.goto_screen([]{
+ MenuItem_confirm::select_screen(GET_TEXT_F(MSG_BUTTON_STOP),
+ GET_TEXT_F(MSG_BACK), ui.abort_print, ui.goto_previous_screen,
+ GET_TEXT_F(MSG_STOP_PRINT), FSTR_P(nullptr), FPSTR("?"));
+ });
+ break;
#if ENABLED(AUTO_BED_LEVELING_UBL)
case UBL: hold(control, UBL_REPEAT_DELAY); ui.encoderPosition += control->data; break;
diff --git a/Marlin/src/lcd/tft/touch.h b/Marlin/src/lcd/tft/touch.h
index fd5d9fd737..bebd9d01e3 100644
--- a/Marlin/src/lcd/tft/touch.h
+++ b/Marlin/src/lcd/tft/touch.h
@@ -65,6 +65,7 @@ enum TouchControlType : uint16_t {
FLOWRATE,
UBL,
MOVE_AXIS,
+ STOP,
BUTTON,
};
diff --git a/Marlin/src/lcd/tft/ui_1024x600.cpp b/Marlin/src/lcd/tft/ui_1024x600.cpp
index 771f12d898..6b628bc4cf 100644
--- a/Marlin/src/lcd/tft/ui_1024x600.cpp
+++ b/Marlin/src/lcd/tft/ui_1024x600.cpp
@@ -328,7 +328,10 @@ void MarlinUI::draw_status_screen() {
add_control(900, y, menu_main, imgSettings);
#if ENABLED(SDSUPPORT)
const bool cm = card.isMounted(), pa = printingIsActive();
- add_control(12, y, menu_media, imgSD, cm && !pa, COLOR_CONTROL_ENABLED, cm && pa ? COLOR_BUSY : COLOR_CONTROL_DISABLED);
+ if (cm && pa)
+ add_control(12, y, STOP, imgCancel, true, COLOR_CONTROL_CANCEL);
+ else
+ add_control(12, y, menu_media, imgSD, cm && !pa, COLOR_CONTROL_ENABLED, COLOR_CONTROL_DISABLED);
#endif
#endif
diff --git a/Marlin/src/lcd/tft/ui_320x240.cpp b/Marlin/src/lcd/tft/ui_320x240.cpp
index 76cce4dad1..e8bec7e1a7 100644
--- a/Marlin/src/lcd/tft/ui_320x240.cpp
+++ b/Marlin/src/lcd/tft/ui_320x240.cpp
@@ -450,9 +450,12 @@ void MarlinUI::draw_status_screen() {
);
#if ENABLED(SDSUPPORT)
const bool cm = card.isMounted(), pa = printingIsActive();
- add_control(0, TERN(TFT_COLOR_UI_PORTRAIT, 210, 130), menu_media, imgSD, cm && !pa, COLOR_CONTROL_ENABLED, cm && pa ? COLOR_BUSY : COLOR_CONTROL_DISABLED);
+ if (cm && pa)
+ add_control(0, TERN(TFT_COLOR_UI_PORTRAIT, 210, 130), STOP, imgCancel, true, COLOR_CONTROL_CANCEL);
+ else
+ add_control(0, TERN(TFT_COLOR_UI_PORTRAIT, 210, 130), menu_media, imgSD, cm && !pa, COLOR_CONTROL_ENABLED, COLOR_CONTROL_DISABLED);
#endif
- } // (sublime)
+ }
#endif // TOUCH_SCREEN
}
@@ -549,8 +552,8 @@ void MenuItem_confirm::draw_select_screen(FSTR_P const yes, FSTR_P const no, con
tft.add_text(tft_string.center(TFT_WIDTH), MENU_TEXT_Y_OFFSET, COLOR_MENU_TEXT, tft_string);
}
#if ENABLED(TOUCH_SCREEN)
- if (no) add_control(TERN(TFT_COLOR_UI_PORTRAIT, 32, 48), TFT_HEIGHT - 64, CANCEL, imgCancel, true, yesno ? HALF(COLOR_CONTROL_CANCEL) : COLOR_CONTROL_CANCEL);
- if (yes) add_control(TERN(TFT_COLOR_UI_PORTRAIT, 172, 208), TFT_HEIGHT - 64, CONFIRM, imgConfirm, true, yesno ? COLOR_CONTROL_CONFIRM : HALF(COLOR_CONTROL_CONFIRM));
+ if (no) add_control(TERN(TFT_COLOR_UI_PORTRAIT, 16, 48), TFT_HEIGHT - 64, CANCEL, imgCancel, true, yesno ? HALF(COLOR_CONTROL_CANCEL) : COLOR_CONTROL_CANCEL);
+ if (yes) add_control(TERN(TFT_COLOR_UI_PORTRAIT, 160, 208), TFT_HEIGHT - 64, CONFIRM, imgConfirm, true, yesno ? COLOR_CONTROL_CONFIRM : HALF(COLOR_CONTROL_CONFIRM));
#endif
}
diff --git a/Marlin/src/lcd/tft/ui_480x320.cpp b/Marlin/src/lcd/tft/ui_480x320.cpp
index c4395460d5..54762da671 100644
--- a/Marlin/src/lcd/tft/ui_480x320.cpp
+++ b/Marlin/src/lcd/tft/ui_480x320.cpp
@@ -322,7 +322,10 @@ void MarlinUI::draw_status_screen() {
add_control(404, y, menu_main, imgSettings);
#if ENABLED(SDSUPPORT)
const bool cm = card.isMounted(), pa = printingIsActive();
- add_control(12, y, menu_media, imgSD, cm && !pa, COLOR_CONTROL_ENABLED, cm && pa ? COLOR_BUSY : COLOR_CONTROL_DISABLED);
+ if (cm && pa)
+ add_control(12, y, STOP, imgCancel, true, COLOR_CONTROL_CANCEL);
+ else
+ add_control(12, y, menu_media, imgSD, cm && !pa, COLOR_CONTROL_ENABLED, COLOR_CONTROL_DISABLED);
#endif
#endif
From d925305b9eaead8aa90f4cfa7970576239704986 Mon Sep 17 00:00:00 2001
From: ellensp <530024+ellensp@users.noreply.github.com>
Date: Thu, 16 Feb 2023 12:58:51 +1300
Subject: [PATCH 26/97] =?UTF-8?q?=F0=9F=90=9B=20Fix=20FastPWM=20calculatio?=
=?UTF-8?q?ns=20(#25343)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Scott Lahteine
---
Marlin/src/HAL/AVR/fast_pwm.cpp | 27 ++++++++++++++++++-----
Marlin/src/HAL/ESP32/HAL.cpp | 34 ++++++++++++++---------------
Marlin/src/HAL/STM32F1/fast_pwm.cpp | 4 ++--
3 files changed, 40 insertions(+), 25 deletions(-)
diff --git a/Marlin/src/HAL/AVR/fast_pwm.cpp b/Marlin/src/HAL/AVR/fast_pwm.cpp
index d361aaab38..0b2b8fd0b3 100644
--- a/Marlin/src/HAL/AVR/fast_pwm.cpp
+++ b/Marlin/src/HAL/AVR/fast_pwm.cpp
@@ -23,6 +23,10 @@
#include "../../inc/MarlinConfig.h"
+//#define DEBUG_AVR_FAST_PWM
+#define DEBUG_OUT ENABLED(DEBUG_AVR_FAST_PWM)
+#include "../../core/debug_out.h"
+
struct Timer {
volatile uint8_t* TCCRnQ[3]; // max 3 TCCR registers per timer
volatile uint16_t* OCRnQ[3]; // max 3 OCR registers per timer
@@ -108,12 +112,15 @@ const Timer get_pwm_timer(const pin_t pin) {
}
void MarlinHAL::set_pwm_frequency(const pin_t pin, const uint16_t f_desired) {
+ DEBUG_ECHOLNPGM("set_pwm_frequency(pin=", pin, ", freq=", f_desired, ")");
const Timer timer = get_pwm_timer(pin);
if (timer.isProtected || !timer.isPWM) return; // Don't proceed if protected timer or not recognized
const bool is_timer2 = timer.n == 2;
const uint16_t maxtop = is_timer2 ? 0xFF : 0xFFFF;
+ DEBUG_ECHOLNPGM("maxtop=", maxtop);
+
uint16_t res = 0xFF; // resolution (TOP value)
uint8_t j = CS_NONE; // prescaler index
uint8_t wgm = WGM_PWM_PC_8; // waveform generation mode
@@ -121,23 +128,29 @@ void MarlinHAL::set_pwm_frequency(const pin_t pin, const uint16_t f_desired) {
// Calculating the prescaler and resolution to use to achieve closest frequency
if (f_desired != 0) {
constexpr uint16_t prescaler[] = { 1, 8, (32), 64, (128), 256, 1024 }; // (*) are Timer 2 only
- uint16_t f = (F_CPU) / (2 * 1024 * maxtop) + 1; // Start with the lowest non-zero frequency achievable (1 or 31)
+ uint16_t f = (F_CPU) / (uint32_t(maxtop) << 11) + 1; // Start with the lowest non-zero frequency achievable (for 16MHz, 1 or 31)
+ DEBUG_ECHOLNPGM("f=", f);
+ DEBUG_ECHOLNPGM("(prescaler loop)");
LOOP_L_N(i, COUNT(prescaler)) { // Loop through all prescaler values
- const uint16_t p = prescaler[i];
+ const uint32_t p = prescaler[i]; // Extend to 32 bits for calculations
+ DEBUG_ECHOLNPGM("prescaler[", i, "]=", p);
uint16_t res_fast_temp, res_pc_temp;
if (is_timer2) {
#if ENABLED(USE_OCR2A_AS_TOP) // No resolution calculation for TIMER2 unless enabled USE_OCR2A_AS_TOP
const uint16_t rft = (F_CPU) / (p * f_desired);
res_fast_temp = rft - 1;
res_pc_temp = rft / 2;
+ DEBUG_ECHOLNPGM("(Timer2) res_fast_temp=", res_fast_temp, " res_pc_temp=", res_pc_temp);
#else
res_fast_temp = res_pc_temp = maxtop;
+ DEBUG_ECHOLNPGM("(Timer2) res_fast_temp=", maxtop, " res_pc_temp=", maxtop);
#endif
}
else {
if (p == 32 || p == 128) continue; // Skip TIMER2 specific prescalers when not TIMER2
const uint16_t rft = (F_CPU) / (p * f_desired);
+ DEBUG_ECHOLNPGM("(Not Timer 2) F_CPU=" STRINGIFY(F_CPU), " prescaler=", p, " f_desired=", f_desired);
res_fast_temp = rft - 1;
res_pc_temp = rft / 2;
}
@@ -147,23 +160,27 @@ void MarlinHAL::set_pwm_frequency(const pin_t pin, const uint16_t f_desired) {
// Calculate frequencies of test prescaler and resolution values
const uint16_t f_fast_temp = (F_CPU) / (p * (1 + res_fast_temp)),
- f_pc_temp = (F_CPU) / (2 * p * res_pc_temp);
- const int f_diff = _MAX(f, f_desired) - _MIN(f, f_desired),
+ f_pc_temp = (F_CPU) / ((p * res_pc_temp) << 1),
+ f_diff = _MAX(f, f_desired) - _MIN(f, f_desired),
f_fast_diff = _MAX(f_fast_temp, f_desired) - _MIN(f_fast_temp, f_desired),
f_pc_diff = _MAX(f_pc_temp, f_desired) - _MIN(f_pc_temp, f_desired);
+ DEBUG_ECHOLNPGM("f_fast_temp=", f_fast_temp, " f_pc_temp=", f_pc_temp, " f_diff=", f_diff, " f_fast_diff=", f_fast_diff, " f_pc_diff=", f_pc_diff);
+
if (f_fast_diff < f_diff && f_fast_diff <= f_pc_diff) { // FAST values are closest to desired f
// Set the Wave Generation Mode to FAST PWM
wgm = is_timer2 ? uint8_t(TERN(USE_OCR2A_AS_TOP, WGM2_FAST_PWM_OCR2A, WGM2_FAST_PWM)) : uint8_t(WGM_FAST_PWM_ICRn);
// Remember this combination
f = f_fast_temp; res = res_fast_temp; j = i + 1;
+ DEBUG_ECHOLNPGM("(FAST) updated f=", f);
}
else if (f_pc_diff < f_diff) { // PHASE CORRECT values are closes to desired f
// Set the Wave Generation Mode to PWM PHASE CORRECT
wgm = is_timer2 ? uint8_t(TERN(USE_OCR2A_AS_TOP, WGM2_PWM_PC_OCR2A, WGM2_PWM_PC)) : uint8_t(WGM_PWM_PC_ICRn);
f = f_pc_temp; res = res_pc_temp; j = i + 1;
+ DEBUG_ECHOLNPGM("(PHASE) updated f=", f);
}
- }
+ } // prescaler loop
}
_SET_WGMnQ(timer, wgm);
diff --git a/Marlin/src/HAL/ESP32/HAL.cpp b/Marlin/src/HAL/ESP32/HAL.cpp
index 29f3be3c02..46dd4e761b 100644
--- a/Marlin/src/HAL/ESP32/HAL.cpp
+++ b/Marlin/src/HAL/ESP32/HAL.cpp
@@ -342,16 +342,16 @@ void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v
}
else
pindata.pwm_duty_ticks = duty; // PWM duty count = # of 4µs ticks per full PWM cycle
+
+ return;
}
- else
#endif
- {
- const int8_t cid = get_pwm_channel(pin, PWM_FREQUENCY, PWM_RESOLUTION);
- if (cid >= 0) {
- const uint32_t duty = map(invert ? v_size - v : v, 0, v_size, 0, _BV(PWM_RESOLUTION)-1);
- ledcWrite(cid, duty);
- }
- }
+
+ const int8_t cid = get_pwm_channel(pin, PWM_FREQUENCY, PWM_RESOLUTION);
+ if (cid >= 0) {
+ const uint32_t duty = map(invert ? v_size - v : v, 0, v_size, 0, _BV(PWM_RESOLUTION)-1);
+ ledcWrite(cid, duty);
+ }
}
int8_t MarlinHAL::set_pwm_frequency(const pin_t pin, const uint32_t f_desired) {
@@ -360,17 +360,15 @@ int8_t MarlinHAL::set_pwm_frequency(const pin_t pin, const uint32_t f_desired) {
pwm_pin_data[pin & 0x7F].pwm_cycle_ticks = 1000000UL / f_desired / 4; // # of 4µs ticks per full PWM cycle
return 0;
}
- else
#endif
- {
- const int8_t cid = channel_for_pin(pin);
- if (cid >= 0) {
- if (f_desired == ledcReadFreq(cid)) return cid; // no freq change
- ledcDetachPin(chan_pin[cid]);
- chan_pin[cid] = 0; // remove old freq channel
- }
- return get_pwm_channel(pin, f_desired, PWM_RESOLUTION); // try for new one
- }
+
+ const int8_t cid = channel_for_pin(pin);
+ if (cid >= 0) {
+ if (f_desired == ledcReadFreq(cid)) return cid; // no freq change
+ ledcDetachPin(chan_pin[cid]);
+ chan_pin[cid] = 0; // remove old freq channel
+ }
+ return get_pwm_channel(pin, f_desired, PWM_RESOLUTION); // try for new one
}
// use hardware PWM if avail, if not then ISR
diff --git a/Marlin/src/HAL/STM32F1/fast_pwm.cpp b/Marlin/src/HAL/STM32F1/fast_pwm.cpp
index 297804a3ac..c3f96f0f92 100644
--- a/Marlin/src/HAL/STM32F1/fast_pwm.cpp
+++ b/Marlin/src/HAL/STM32F1/fast_pwm.cpp
@@ -39,7 +39,7 @@ inline uint8_t timer_and_index_for_pin(const pin_t pin, timer_dev **timer_ptr) {
void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) {
const uint16_t duty = invert ? v_size - v : v;
if (PWM_PIN(pin)) {
- timer_dev *timer; UNUSED(timer);
+ timer_dev *timer;
if (timer_freq[timer_and_index_for_pin(pin, &timer)] == 0)
set_pwm_frequency(pin, PWM_FREQUENCY);
const uint8_t channel = PIN_MAP[pin].timer_channel;
@@ -55,7 +55,7 @@ void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v
void MarlinHAL::set_pwm_frequency(const pin_t pin, const uint16_t f_desired) {
if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer
- timer_dev *timer; UNUSED(timer);
+ timer_dev *timer;
timer_freq[timer_and_index_for_pin(pin, &timer)] = f_desired;
// Protect used timers
From 90066e71608994ed7ed2e2351cbe5831dcab748b Mon Sep 17 00:00:00 2001
From: Trevin Small
Date: Wed, 15 Feb 2023 19:00:10 -0500
Subject: [PATCH 27/97] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Fix=20README=20typo?=
=?UTF-8?q?=20(#25388)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index c3d92d6b3a..05afe9ec27 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@ Marlin is optimized to build with the **PlatformIO IDE** extension for **Visual
Marlin includes an abstraction layer to provide a common API for all the platforms it targets. This allows Marlin code to address the details of motion and user interface tasks at the lowest and highest levels with no system overhead, tying all events directly to the hardware clock.
-Every new HAL opens up a world of hardware. At this time we need HALs for RP2040 and the Duet3D family of boards. A HAL that wraps an RTOS is an interesting concept we would can explore. Did you know that Marlin includes a Simulator that can run on Windows, macOS, and Linux? Join the Discord to help move these sub-projects forward!
+Every new HAL opens up a world of hardware. At this time we need HALs for RP2040 and the Duet3D family of boards. A HAL that wraps an RTOS is an interesting concept that could be explored. Did you know that Marlin includes a Simulator that can run on Windows, macOS, and Linux? Join the Discord to help move these sub-projects forward!
## 8-Bit AVR Boards
From 38e633023603559032f2daa80b1ee99d9bd4df72 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Thu, 16 Feb 2023 00:27:36 +0000
Subject: [PATCH 28/97] [cron] Bump distribution date (2023-02-16)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 2cd99e23f7..07fa3e8730 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-02-15"
+//#define STRING_DISTRIBUTION_DATE "2023-02-16"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index efbde9bc0b..e09a7d50fc 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-02-15"
+ #define STRING_DISTRIBUTION_DATE "2023-02-16"
#endif
/**
From aa9df38b053c2ba7f7fadb9700637d1ae9cc0948 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Fri, 17 Feb 2023 22:12:11 -0600
Subject: [PATCH 29/97] =?UTF-8?q?=F0=9F=9A=B8=20Interruptible=20PLR=20(#25?=
=?UTF-8?q?395)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/feature/powerloss.cpp | 87 ++++++++++++++++++--------------
1 file changed, 49 insertions(+), 38 deletions(-)
diff --git a/Marlin/src/feature/powerloss.cpp b/Marlin/src/feature/powerloss.cpp
index 2825f4d4f2..1037f823f6 100644
--- a/Marlin/src/feature/powerloss.cpp
+++ b/Marlin/src/feature/powerloss.cpp
@@ -78,6 +78,14 @@ PrintJobRecovery recovery;
#define POWER_LOSS_RETRACT_LEN 0
#endif
+// Allow power-loss recovery to be aborted
+#define PLR_CAN_ABORT
+#if ENABLED(PLR_CAN_ABORT)
+ #define PROCESS_SUBCOMMANDS_NOW(cmd) do { if (card.flag.abort_sd_printing) return; gcode.process_subcommands_now(cmd); }while(0)
+#else
+ #define PROCESS_SUBCOMMANDS_NOW(cmd) gcode.process_subcommands_now(cmd)
+#endif
+
/**
* Clear the recovery info
*/
@@ -352,12 +360,23 @@ void PrintJobRecovery::resume() {
// Apply the dry-run flag if enabled
if (info.flag.dryrun) marlin_debug_flags |= MARLIN_DEBUG_DRYRUN;
+ #if ENABLED(DEBUG_POWER_LOSS_RECOVERY)
+ struct OnExit {
+ uint8_t old_flags;
+ OnExit() {
+ old_flags = marlin_debug_flags;
+ marlin_debug_flags |= MARLIN_DEBUG_ECHO;
+ }
+ ~OnExit() { marlin_debug_flags = old_flags; }
+ } on_exit;
+ #endif
+
// Restore cold extrusion permission
TERN_(PREVENT_COLD_EXTRUSION, thermalManager.allow_cold_extrude = info.flag.allow_cold_extrusion);
#if HAS_LEVELING
// Make sure leveling is off before any G92 and G28
- gcode.process_subcommands_now(F("M420 S0 Z0"));
+ PROCESS_SUBCOMMANDS_NOW(F("M420S0"));
#endif
#if HAS_HEATED_BED
@@ -365,7 +384,7 @@ void PrintJobRecovery::resume() {
if (bt) {
// Restore the bed temperature
sprintf_P(cmd, PSTR("M190S%i"), bt);
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
}
#endif
@@ -376,10 +395,10 @@ void PrintJobRecovery::resume() {
if (et) {
#if HAS_MULTI_HOTEND
sprintf_P(cmd, PSTR("T%iS"), e);
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
#endif
sprintf_P(cmd, PSTR("M109S%i"), et);
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
}
}
#endif
@@ -393,7 +412,7 @@ void PrintJobRecovery::resume() {
// establish the current position as best we can.
//
- gcode.process_subcommands_now(F("G92.9E0")); // Reset E to 0
+ PROCESS_SUBCOMMANDS_NOW(F("G92.9E0")); // Reset E to 0
#if Z_HOME_TO_MAX
@@ -404,7 +423,7 @@ void PrintJobRecovery::resume() {
"G28R0\n" // Home all axes (no raise)
"G1Z%sF1200" // Move Z down to (raised) height
), dtostrf(z_now, 1, 3, str_1));
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
#elif DISABLED(BELTPRINTER)
@@ -417,18 +436,18 @@ void PrintJobRecovery::resume() {
#if !HOMING_Z_DOWN
// Set Z to the real position
sprintf_P(cmd, PSTR("G92.9Z%s"), dtostrf(z_now, 1, 3, str_1));
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
#endif
// Does Z need to be raised now? It should be raised before homing XY.
if (z_raised > z_now) {
z_now = z_raised;
sprintf_P(cmd, PSTR("G1Z%sF600"), dtostrf(z_now, 1, 3, str_1));
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
}
// Home XY with no Z raise
- gcode.process_subcommands_now(F("G28R0XY")); // No raise during G28
+ PROCESS_SUBCOMMANDS_NOW(F("G28R0XY")); // No raise during G28
#endif
@@ -436,7 +455,7 @@ void PrintJobRecovery::resume() {
// Move to a safe XY position and home Z while avoiding the print.
const xy_pos_t p = xy_pos_t(POWER_LOSS_ZHOME_POS) TERN_(HOMING_Z_WITH_PROBE, - probe.offset_xy);
sprintf_P(cmd, PSTR("G1X%sY%sF1000\nG28HZ"), dtostrf(p.x, 1, 3, str_1), dtostrf(p.y, 1, 3, str_2));
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
#endif
// Mark all axes as having been homed (no effect on current_position)
@@ -447,12 +466,12 @@ void PrintJobRecovery::resume() {
// Leveling may already be enabled due to the ENABLE_LEVELING_AFTER_G28 option.
// TODO: Add a G28 parameter to leave leveling disabled.
sprintf_P(cmd, PSTR("M420S%cZ%s"), '0' + (char)info.flag.leveling, dtostrf(info.fade, 1, 1, str_1));
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
#if !HOMING_Z_DOWN
// The physical Z was adjusted at power-off so undo the M420S1 correction to Z with G92.9.
sprintf_P(cmd, PSTR("G92.9Z%s"), dtostrf(z_now, 1, 1, str_1));
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
#endif
#endif
@@ -460,7 +479,7 @@ void PrintJobRecovery::resume() {
// Z was homed down to the bed, so move up to the raised height.
z_now = z_raised;
sprintf_P(cmd, PSTR("G1Z%sF600"), dtostrf(z_now, 1, 3, str_1));
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
#endif
// Recover volumetric extrusion state
@@ -468,16 +487,16 @@ void PrintJobRecovery::resume() {
#if HAS_MULTI_EXTRUDER
EXTRUDER_LOOP() {
sprintf_P(cmd, PSTR("M200T%iD%s"), e, dtostrf(info.filament_size[e], 1, 3, str_1));
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
}
if (!info.flag.volumetric_enabled) {
sprintf_P(cmd, PSTR("M200T%iD0"), info.active_extruder);
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
}
#else
if (info.flag.volumetric_enabled) {
sprintf_P(cmd, PSTR("M200D%s"), dtostrf(info.filament_size[0], 1, 3, str_1));
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
}
#endif
#endif
@@ -489,10 +508,10 @@ void PrintJobRecovery::resume() {
if (et) {
#if HAS_MULTI_HOTEND
sprintf_P(cmd, PSTR("T%iS"), e);
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
#endif
sprintf_P(cmd, PSTR("M109S%i"), et);
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
}
}
#endif
@@ -500,7 +519,7 @@ void PrintJobRecovery::resume() {
// Restore the previously active tool (with no_move)
#if HAS_MULTI_EXTRUDER || HAS_MULTI_HOTEND
sprintf_P(cmd, PSTR("T%i S"), info.active_extruder);
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
#endif
// Restore print cooling fan speeds
@@ -509,7 +528,7 @@ void PrintJobRecovery::resume() {
const int f = info.fan_speed[i];
if (f) {
sprintf_P(cmd, PSTR("M106P%iS%i"), i, f);
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
}
}
#endif
@@ -531,17 +550,17 @@ void PrintJobRecovery::resume() {
// Un-retract if there was a retract at outage
#if ENABLED(BACKUP_POWER_SUPPLY) && POWER_LOSS_RETRACT_LEN > 0
- gcode.process_subcommands_now(F("G1F3000E" STRINGIFY(POWER_LOSS_RETRACT_LEN)));
+ PROCESS_SUBCOMMANDS_NOW(F("G1F3000E" STRINGIFY(POWER_LOSS_RETRACT_LEN)));
#endif
// Additional purge on resume if configured
#if POWER_LOSS_PURGE_LEN
sprintf_P(cmd, PSTR("G1F3000E%d"), (POWER_LOSS_PURGE_LEN) + (POWER_LOSS_RETRACT_LEN));
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
#endif
#if ENABLED(NOZZLE_CLEAN_FEATURE)
- gcode.process_subcommands_now(F("G12"));
+ PROCESS_SUBCOMMANDS_NOW(F("G12"));
#endif
// Move back over to the saved XY
@@ -549,19 +568,19 @@ void PrintJobRecovery::resume() {
dtostrf(info.current_position.x, 1, 3, str_1),
dtostrf(info.current_position.y, 1, 3, str_2)
);
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
// Move back down to the saved Z for printing
sprintf_P(cmd, PSTR("G1Z%sF600"), dtostrf(z_print, 1, 3, str_1));
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
// Restore the feedrate
sprintf_P(cmd, PSTR("G1F%d"), info.feedrate);
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
// Restore E position with G92.9
sprintf_P(cmd, PSTR("G92.9E%s"), dtostrf(info.current_position.e, 1, 3, str_1));
- gcode.process_subcommands_now(cmd);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
TERN_(GCODE_REPEAT_MARKERS, repeat = info.stored_repeat);
TERN_(HAS_HOME_OFFSET, home_offset = info.home_offset);
@@ -573,22 +592,14 @@ void PrintJobRecovery::resume() {
// Relative axis modes
gcode.axis_relative = info.axis_relative;
- #if ENABLED(DEBUG_POWER_LOSS_RECOVERY)
- const uint8_t old_flags = marlin_debug_flags;
- marlin_debug_flags |= MARLIN_DEBUG_ECHO;
- #endif
-
// Continue to apply PLR when a file is resumed!
enable(true);
// Resume the SD file from the last position
- char *fn = info.sd_filename;
- sprintf_P(cmd, M23_STR, fn);
- gcode.process_subcommands_now(cmd);
+ sprintf_P(cmd, M23_STR, &info.sd_filename[0]);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
sprintf_P(cmd, PSTR("M24S%ldT%ld"), resume_sdpos, info.print_job_elapsed);
- gcode.process_subcommands_now(cmd);
-
- TERN_(DEBUG_POWER_LOSS_RECOVERY, marlin_debug_flags = old_flags);
+ PROCESS_SUBCOMMANDS_NOW(cmd);
}
#if ENABLED(DEBUG_POWER_LOSS_RECOVERY)
From c68a4c085d2e9051819e7dd1889f3d7f06ad10a1 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Sat, 18 Feb 2023 06:05:56 +0000
Subject: [PATCH 30/97] [cron] Bump distribution date (2023-02-18)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 07fa3e8730..745788f05a 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-02-16"
+//#define STRING_DISTRIBUTION_DATE "2023-02-18"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index e09a7d50fc..c0e9542b44 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-02-16"
+ #define STRING_DISTRIBUTION_DATE "2023-02-18"
#endif
/**
From 96bc084f3d791bc93265f217181986863e8e5fc7 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Sat, 18 Feb 2023 02:15:16 -0600
Subject: [PATCH 31/97] =?UTF-8?q?=F0=9F=8E=A8=20Misc.=20LCD=20cleanup=20(#?=
=?UTF-8?q?25400)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/Configuration_adv.h | 2 +-
Marlin/src/feature/bedlevel/abl/bbl.cpp | 2 +-
Marlin/src/feature/bedlevel/abl/bbl.h | 2 +-
Marlin/src/inc/SanityCheck.h | 10 +-
Marlin/src/lcd/dogm/marlinui_DOGM.cpp | 4 +-
Marlin/src/lcd/e3v2/marlinui/ui_common.cpp | 4 +-
Marlin/src/lcd/e3v2/proui/dwin.cpp | 16 -
Marlin/src/lcd/e3v2/proui/gcode_preview.cpp | 2 +-
.../extui/anycubic_chiron/FileNavigator.cpp | 16 +-
.../anycubic_i3mega/anycubic_i3mega_lcd.cpp | 6 +-
Marlin/src/lcd/extui/dgus/DGUSDisplay.cpp | 9 -
.../src/lcd/extui/dgus/DGUSScreenHandler.cpp | 51 --
.../lcd/extui/dgus/DGUSScreenHandlerBase.h | 4 +-
.../lcd/extui/dgus/fysetc/DGUSDisplayDef.h | 6 +-
.../extui/dgus/fysetc/DGUSScreenHandler.cpp | 63 +--
.../lcd/extui/dgus/hiprecy/DGUSDisplayDef.h | 4 +-
.../extui/dgus/hiprecy/DGUSScreenHandler.cpp | 65 +--
.../src/lcd/extui/dgus/mks/DGUSDisplayDef.h | 10 +-
.../lcd/extui/dgus/mks/DGUSScreenHandler.cpp | 162 ++----
.../lcd/extui/dgus/origin/DGUSDisplayDef.h | 4 +-
.../extui/dgus/origin/DGUSScreenHandler.cpp | 65 +--
.../lcd/extui/dgus_reloaded/DGUSDisplay.cpp | 27 -
.../extui/dgus_reloaded/DGUSScreenHandler.cpp | 9 +-
.../lcd/extui/dgus_reloaded/DGUSTxHandler.cpp | 18 +-
.../lcd/extui/dgus_reloaded/DGUSTxHandler.h | 22 +-
.../extui/dgus_reloaded/config/DGUS_Addr.h | 252 +++++-----
.../dgus_reloaded/config/DGUS_Constants.h | 4 +-
.../dgus_reloaded/definition/DGUS_VPList.cpp | 2 +-
.../lcd/extui/ia_creality/FileNavigator.cpp | 4 -
.../lcd/extui/ia_creality/creality_extui.cpp | 471 +++++++-----------
.../lcd/extui/ia_creality/creality_extui.h | 74 +--
Marlin/src/lcd/extui/mks_ui/draw_wifi_tips.h | 2 +-
.../extui/mks_ui/tft_lvgl_configuration.cpp | 2 +-
.../src/lcd/extui/mks_ui/wifiSerial_STM32.cpp | 6 +-
Marlin/src/lcd/extui/mks_ui/wifi_module.cpp | 2 +-
Marlin/src/lcd/extui/mks_ui/wifi_upload.cpp | 10 +-
Marlin/src/lcd/language/language_an.h | 2 +-
Marlin/src/lcd/language/language_bg.h | 2 +-
Marlin/src/lcd/language/language_ca.h | 2 +-
Marlin/src/lcd/language/language_cz.h | 2 +-
Marlin/src/lcd/language/language_da.h | 2 +-
Marlin/src/lcd/language/language_de.h | 2 +-
Marlin/src/lcd/language/language_el.h | 2 +-
Marlin/src/lcd/language/language_el_gr.h | 2 +-
Marlin/src/lcd/language/language_en.h | 2 +-
Marlin/src/lcd/language/language_es.h | 2 +-
Marlin/src/lcd/language/language_eu.h | 2 +-
Marlin/src/lcd/language/language_fr.h | 2 +-
Marlin/src/lcd/language/language_gl.h | 2 +-
Marlin/src/lcd/language/language_hr.h | 2 +-
Marlin/src/lcd/language/language_hu.h | 2 +-
Marlin/src/lcd/language/language_it.h | 2 +-
Marlin/src/lcd/language/language_jp_kana.h | 2 +-
Marlin/src/lcd/language/language_nl.h | 2 +-
Marlin/src/lcd/language/language_pl.h | 2 +-
Marlin/src/lcd/language/language_pt.h | 2 +-
Marlin/src/lcd/language/language_pt_br.h | 2 +-
Marlin/src/lcd/language/language_ro.h | 2 +-
Marlin/src/lcd/language/language_ru.h | 2 +-
Marlin/src/lcd/language/language_sk.h | 2 +-
Marlin/src/lcd/language/language_sv.h | 2 +-
Marlin/src/lcd/language/language_tr.h | 2 +-
Marlin/src/lcd/language/language_uk.h | 2 +-
Marlin/src/lcd/language/language_vi.h | 2 +-
Marlin/src/lcd/language/language_zh_CN.h | 2 +-
Marlin/src/lcd/language/language_zh_TW.h | 2 +-
Marlin/src/lcd/marlinui.cpp | 2 +-
Marlin/src/lcd/marlinui.h | 2 +-
Marlin/src/lcd/menu/menu.cpp | 2 +-
Marlin/src/lcd/menu/menu_bed_leveling.cpp | 2 +-
Marlin/src/lcd/menu/menu_tune.cpp | 2 +-
buildroot/tests/FYSETC_F6 | 2 +-
buildroot/tests/LPC1768 | 2 +-
buildroot/tests/SAMD21_minitronics20 | 2 +-
buildroot/tests/SAMD51_grandcentral_m4 | 2 +-
buildroot/tests/teensy35 | 2 +-
76 files changed, 541 insertions(+), 951 deletions(-)
diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index a9e6d4928f..7e224ae61c 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -2092,7 +2092,7 @@
//#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
//#define BABYSTEP_HOTEND_Z_OFFSET // For multiple hotends, babystep relative Z offsets
- //#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor
+ //#define BABYSTEP_GFX_OVERLAY // Enable graphical overlay on Z-offset editor
#endif
#endif
diff --git a/Marlin/src/feature/bedlevel/abl/bbl.cpp b/Marlin/src/feature/bedlevel/abl/bbl.cpp
index be0e862cc1..d0044303c7 100644
--- a/Marlin/src/feature/bedlevel/abl/bbl.cpp
+++ b/Marlin/src/feature/bedlevel/abl/bbl.cpp
@@ -153,7 +153,7 @@ void LevelingBilinear::extrapolate_unprobed_bed_level() {
}
}
-void LevelingBilinear::print_leveling_grid(const bed_mesh_t* _z_values /*= NULL*/) {
+void LevelingBilinear::print_leveling_grid(const bed_mesh_t* _z_values/*=nullptr*/) {
// print internal grid(s) or just the one passed as a parameter
SERIAL_ECHOLNPGM("Bilinear Leveling Grid:");
print_2d_array(GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y, 3, _z_values ? *_z_values[0] : z_values[0]);
diff --git a/Marlin/src/feature/bedlevel/abl/bbl.h b/Marlin/src/feature/bedlevel/abl/bbl.h
index c2be4fee82..60dde9060f 100644
--- a/Marlin/src/feature/bedlevel/abl/bbl.h
+++ b/Marlin/src/feature/bedlevel/abl/bbl.h
@@ -53,7 +53,7 @@ public:
static void reset();
static void set_grid(const xy_pos_t& _grid_spacing, const xy_pos_t& _grid_start);
static void extrapolate_unprobed_bed_level();
- static void print_leveling_grid(const bed_mesh_t* _z_values = NULL);
+ static void print_leveling_grid(const bed_mesh_t *_z_values=nullptr);
static void refresh_bed_level();
static bool has_mesh() { return !!grid_spacing.x; }
static bool mesh_is_valid() { return has_mesh(); }
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index 85bdba8a8e..12d281b704 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -670,6 +670,8 @@
#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."
#endif
// L64xx stepper drivers have been removed
@@ -1042,10 +1044,10 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#error "MESH_BED_LEVELING and BABYSTEP_ZPROBE_OFFSET is not a valid combination"
#elif ENABLED(BABYSTEP_ZPROBE_OFFSET) && !HAS_BED_PROBE
#error "BABYSTEP_ZPROBE_OFFSET requires a probe."
- #elif ENABLED(BABYSTEP_ZPROBE_GFX_OVERLAY) && NONE(HAS_MARLINUI_U8GLIB, IS_DWIN_MARLINUI)
- #error "BABYSTEP_ZPROBE_GFX_OVERLAY requires a Graphical LCD."
- #elif ENABLED(BABYSTEP_ZPROBE_GFX_OVERLAY) && DISABLED(BABYSTEP_ZPROBE_OFFSET)
- #error "BABYSTEP_ZPROBE_GFX_OVERLAY requires a BABYSTEP_ZPROBE_OFFSET."
+ #elif ENABLED(BABYSTEP_GFX_OVERLAY) && NONE(HAS_MARLINUI_U8GLIB, IS_DWIN_MARLINUI)
+ #error "BABYSTEP_GFX_OVERLAY requires a Graphical LCD."
+ #elif ENABLED(BABYSTEP_GFX_OVERLAY) && DISABLED(BABYSTEP_ZPROBE_OFFSET)
+ #error "BABYSTEP_GFX_OVERLAY requires a BABYSTEP_ZPROBE_OFFSET."
#elif ENABLED(BABYSTEP_HOTEND_Z_OFFSET) && !HAS_HOTEND_OFFSET
#error "BABYSTEP_HOTEND_Z_OFFSET requires 2 or more HOTENDS."
#elif BOTH(BABYSTEP_ALWAYS_AVAILABLE, MOVE_Z_WHEN_IDLE)
diff --git a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp
index 1a86058b94..aa32fd403f 100644
--- a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp
+++ b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp
@@ -628,7 +628,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
#endif // AUTO_BED_LEVELING_UBL
- #if EITHER(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
+ #if EITHER(BABYSTEP_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
//
// Draw knob rotation => Z motion key for:
@@ -746,7 +746,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
}
}
- #endif // BABYSTEP_ZPROBE_GFX_OVERLAY || MESH_EDIT_GFX_OVERLAY
+ #endif // BABYSTEP_GFX_OVERLAY || MESH_EDIT_GFX_OVERLAY
#endif // HAS_MARLINUI_MENU
diff --git a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp
index 560b30be0a..12d16887d1 100644
--- a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp
+++ b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp
@@ -565,7 +565,7 @@ void MarlinUI::draw_status_message(const bool blink) {
#endif // AUTO_BED_LEVELING_UBL
- #if EITHER(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
+ #if EITHER(BABYSTEP_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
void MarlinUI::zoffset_overlay(const int8_t dir) {
const int rot_up = TERN(OVERLAY_GFX_REVERSE, ICON_RotateCCW, ICON_RotateCW),
@@ -587,7 +587,7 @@ void MarlinUI::draw_status_message(const bool blink) {
DWIN_ICON_Show(ICON, rot_up, LCD_PIXEL_WIDTH - 10 - 48, arrow_y);
}
- #endif // BABYSTEP_ZPROBE_GFX_OVERLAY || MESH_EDIT_GFX_OVERLAY
+ #endif // BABYSTEP_GFX_OVERLAY || MESH_EDIT_GFX_OVERLAY
#endif // HAS_MARLINUI_MENU
diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp
index ae10f0e84e..6be56b0ded 100644
--- a/Marlin/src/lcd/e3v2/proui/dwin.cpp
+++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp
@@ -1271,7 +1271,6 @@ void EachMomentUpdate() {
if ((Printing() != HMI_flag.printing_flag) && !HMI_flag.home_flag) {
HMI_flag.printing_flag = Printing();
- DEBUG_ECHOLNPGM("printing_flag: ", HMI_flag.printing_flag);
if (HMI_flag.printing_flag)
DWIN_Print_Started();
else if (HMI_flag.abort_flag)
@@ -1282,7 +1281,6 @@ void EachMomentUpdate() {
if ((printingIsPaused() != HMI_flag.pause_flag) && !HMI_flag.home_flag) {
HMI_flag.pause_flag = printingIsPaused();
- DEBUG_ECHOLNPGM("pause_flag: ", HMI_flag.pause_flag);
if (HMI_flag.pause_flag)
DWIN_Print_Pause();
else if (HMI_flag.abort_flag)
@@ -1628,7 +1626,6 @@ void DWIN_LevelingDone() {
// Started a Print Job
void DWIN_Print_Started() {
- DEBUG_ECHOLNPGM("DWIN_Print_Started: ", SD_Printing());
TERN_(HAS_GCODE_PREVIEW, if (Host_Printing()) Preview_Invalidate());
_percent_done = 0;
_remain_time = 0;
@@ -1642,20 +1639,17 @@ void DWIN_Print_Started() {
// Pause a print job
void DWIN_Print_Pause() {
- DEBUG_ECHOLNPGM("DWIN_Print_Pause");
ICON_ResumeOrPause();
}
// Resume print job
void DWIN_Print_Resume() {
- DEBUG_ECHOLNPGM("DWIN_Print_Resume");
ICON_ResumeOrPause();
LCD_MESSAGE(MSG_RESUME_PRINT);
}
// Ended print job
void DWIN_Print_Finished() {
- DEBUG_ECHOLNPGM("DWIN_Print_Finished");
TERN_(POWER_LOSS_RECOVERY, if (card.isPrinting()) recovery.cancel());
HMI_flag.pause_flag = false;
wait_for_heatup = false;
@@ -1666,7 +1660,6 @@ void DWIN_Print_Finished() {
// Print was aborted
void DWIN_Print_Aborted() {
- DEBUG_ECHOLNPGM("DWIN_Print_Aborted");
DWIN_Print_Finished();
}
@@ -1714,7 +1707,6 @@ void DWIN_SetColorDefaults() {
}
void DWIN_SetDataDefaults() {
- DEBUG_ECHOLNPGM("DWIN_SetDataDefaults");
DWIN_SetColorDefaults();
DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color, HMI_data.StatusBg_Color);
TERN_(PIDTEMP, HMI_data.HotendPidT = DEF_HOTENDPIDT);
@@ -1738,13 +1730,10 @@ void DWIN_SetDataDefaults() {
}
void DWIN_CopySettingsTo(char * const buff) {
- DEBUG_ECHOLNPGM("DWIN_CopySettingsTo");
- DEBUG_ECHOLNPGM("HMI_data: ", sizeof(HMI_data_t));
memcpy(buff, &HMI_data, eeprom_data_size);
}
void DWIN_CopySettingsFrom(const char * const buff) {
- DEBUG_ECHOLNPGM("DWIN_CopySettingsFrom");
memcpy(&HMI_data, buff, sizeof(HMI_data_t));
if (HMI_data.Text_Color == HMI_data.Background_Color) DWIN_SetColorDefaults();
DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color, HMI_data.StatusBg_Color);
@@ -1764,18 +1753,14 @@ void DWIN_CopySettingsFrom(const char * const buff) {
// Initialize or re-initialize the LCD
void MarlinUI::init_lcd() {
- DEBUG_ECHOLNPGM("MarlinUI::init_lcd");
delay(750); // wait to wakeup screen
const bool hs = DWIN_Handshake(); UNUSED(hs);
- DEBUG_ECHOPGM("DWIN_Handshake ");
- DEBUG_ECHOLNF(hs ? F("ok.") : F("error."));
DWIN_Frame_SetDir(1);
DWIN_JPG_CacheTo1(Language_English);
Encoder_Configuration();
}
void DWIN_InitScreen() {
- DEBUG_ECHOLNPGM("DWIN_InitScreen");
DWIN_SetColorDefaults();
HMI_Init(); // draws boot screen
DWINUI::init();
@@ -2034,7 +2019,6 @@ void AutoHome() { queue.inject_P(G28_STR); }
#if EITHER(BABYSTEP_ZPROBE_OFFSET, JUST_BABYSTEP)
const_float_t step_zoffset = round((MenuData.Value / 100.0f) * planner.settings.axis_steps_per_mm[Z_AXIS]) - babystep.accum;
if (BABYSTEP_ALLOWED()) babystep.add_steps(Z_AXIS, step_zoffset);
- //DEBUG_ECHOLNF(F("BB Steps: "), step_zoffset);
#endif
}
void SetZOffset() {
diff --git a/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp b/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp
index bc489dd1fa..f8bcda8353 100644
--- a/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp
+++ b/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp
@@ -135,7 +135,7 @@ bool Has_Preview() {
Get_Value(buf, ";MAXZ:", fileprop.height);
fileprop.height -= tmp;
posptr = strstr(buf, tbstart);
- if (posptr != NULL) {
+ if (posptr != nullptr) {
fileprop.thumbstart = indx + (posptr - &buf[0]);
}
else {
diff --git a/Marlin/src/lcd/extui/anycubic_chiron/FileNavigator.cpp b/Marlin/src/lcd/extui/anycubic_chiron/FileNavigator.cpp
index 0ef8186668..90e3321252 100644
--- a/Marlin/src/lcd/extui/anycubic_chiron/FileNavigator.cpp
+++ b/Marlin/src/lcd/extui/anycubic_chiron/FileNavigator.cpp
@@ -70,7 +70,6 @@ char FileNavigator::currentfoldername[MAX_PATH_LEN + 1]; // Current folde
FileNavigator::FileNavigator() { reset(); }
void FileNavigator::reset() {
- DEBUG_ECHOLNPGM("reset()");
currentfoldername[0] = '\0';
currentfolderdepth = 0;
currentindex = 0;
@@ -86,7 +85,6 @@ void FileNavigator::refresh() { filelist.refresh(); }
void FileNavigator::changeDIR(const char *folder) {
if (currentfolderdepth >= MAX_FOLDER_DEPTH) return; // limit the folder depth
- DEBUG_ECHOLNPGM("FD:" , folderdepth, " FP:",currentindex, " currentfolder:", currentfoldername, " enter:", folder);
currentfolderindex[currentfolderdepth] = currentindex;
strcat(currentfoldername, folder);
strcat(currentfoldername, "/");
@@ -96,7 +94,6 @@ void FileNavigator::changeDIR(const char *folder) {
}
void FileNavigator::upDIR() {
- DEBUG_ECHOLNPGM("upDIR() from D:", currentfolderdepth, " N:", currentfoldername);
if (!filelist.isAtRootDir()) {
filelist.upDir();
currentfolderdepth--;
@@ -117,7 +114,6 @@ void FileNavigator::skiptofileindex(uint16_t skip) {
if (skip == 0) return;
while (skip > 0) {
if (filelist.seek(currentindex)) {
- DEBUG_ECHOLNPGM("CI:", currentindex, " FD:", currentfolderdepth, " N:", skip, " ", filelist.longFilename());
if (!filelist.isDir()) {
skip--;
currentindex++;
@@ -151,8 +147,6 @@ void FileNavigator::skiptofileindex(uint16_t skip) {
}
lastpanelindex = index;
- DEBUG_ECHOLNPGM("index=", index, " currentindex=", currentindex);
-
if (currentindex == 0 && currentfolderdepth > 0) { // Add a link to go up a folder
// The new panel ignores entries that don't end in .GCO or .gcode so add and pad them.
if (paneltype <= AC_panel_new) {
@@ -166,12 +160,8 @@ void FileNavigator::skiptofileindex(uint16_t skip) {
filesneeded--;
}
- for (uint16_t seek = currentindex; seek < currentindex + filesneeded; seek++) {
- if (filelist.seek(seek)) {
- sendFile(paneltype);
- DEBUG_ECHOLNPGM("-", seek, " '", filelist.longFilename(), "' '", currentfoldername, "", filelist.shortFilename(), "'");
- }
- }
+ for (uint16_t seek = currentindex; seek < currentindex + filesneeded; seek++)
+ if (filelist.seek(seek)) sendFile(paneltype);
}
void FileNavigator::sendFile(panel_type_t paneltype) {
@@ -212,7 +202,6 @@ void FileNavigator::skiptofileindex(uint16_t skip) {
#else // Flat file list
void FileNavigator::getFiles(uint16_t index, panel_type_t paneltype, uint8_t filesneeded) {
- DEBUG_ECHOLNPGM("getFiles() I:", index," L:", lastpanelindex);
// if we're searching backwards, jump back to start and search forward
if (index < lastpanelindex) {
reset();
@@ -248,7 +237,6 @@ void FileNavigator::skiptofileindex(uint16_t skip) {
TFTSer.println(filelist.shortFilename());
if (currentfolderdepth > 0) TFTSer.print(currentfoldername);
TFTSer.println(filelist.longFilename());
- DEBUG_ECHOLNPGM("/", currentfoldername, "", filelist.shortFilename(), " ", filelist.longFilename());
}
#endif // Flat file list
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 03997fa95b..774ba55e43 100644
--- a/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.cpp
+++ b/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.cpp
@@ -704,7 +704,7 @@ void AnycubicTFTClass::GetCommandFromTFT() {
break;
case 16: { // A16 set hotend temp
- unsigned int tempvalue;
+ uint16_t tempvalue;
if (CodeSeen('S')) {
tempvalue = constrain(CodeValue(), 0, 275);
setTargetTemp_celsius(tempvalue, (extruder_t)E0);
@@ -719,7 +719,7 @@ void AnycubicTFTClass::GetCommandFromTFT() {
break;
case 17: { // A17 set heated bed temp
- unsigned int tempbed;
+ uint16_t tempbed;
if (CodeSeen('S')) {
tempbed = constrain(CodeValue(), 0, 100);
setTargetTemp_celsius(tempbed, (heater_t)BED);
@@ -777,7 +777,7 @@ void AnycubicTFTClass::GetCommandFromTFT() {
case 22: // A22 move X/Y/Z or extrude
if (!isPrinting()) {
float coorvalue;
- unsigned int movespeed = 0;
+ uint16_t movespeed = 0;
char commandStr[30];
char fullCommandStr[38];
diff --git a/Marlin/src/lcd/extui/dgus/DGUSDisplay.cpp b/Marlin/src/lcd/extui/dgus/DGUSDisplay.cpp
index 0eb95bb041..2a7d635c6d 100644
--- a/Marlin/src/lcd/extui/dgus/DGUSDisplay.cpp
+++ b/Marlin/src/lcd/extui/dgus/DGUSDisplay.cpp
@@ -141,7 +141,6 @@ void DGUSDisplay::ProcessRx() {
if (!LCD_SERIAL.available() && LCD_SERIAL.buffer_overruns()) {
// Overrun, but reset the flag only when the buffer is empty
// We want to extract as many as valid datagrams possible...
- DEBUG_ECHOPGM("OVFL");
rx_datagram_state = DGUS_IDLE;
//LCD_SERIAL.reset_rx_overun();
LCD_SERIAL.flush();
@@ -205,17 +204,11 @@ void DGUSDisplay::ProcessRx() {
| Command DataLen (in Words) */
if (command == DGUS_CMD_READVAR) {
const uint16_t vp = tmp[0] << 8 | tmp[1];
- //const uint8_t dlen = tmp[2] << 1; // Convert to Bytes. (Display works with words)
- //DEBUG_ECHOPGM(" vp=", vp, " dlen=", dlen);
DGUS_VP_Variable ramcopy;
if (populate_VPVar(vp, &ramcopy)) {
if (ramcopy.set_by_display_handler)
ramcopy.set_by_display_handler(ramcopy, &tmp[3]);
- else
- DEBUG_ECHOLNPGM(" VPVar found, no handler.");
}
- else
- DEBUG_ECHOLNPGM(" VPVar not found:", vp);
rx_datagram_state = DGUS_IDLE;
break;
@@ -260,9 +253,7 @@ bool DGUSDisplay::Initialized = false,
#define sw_barrier() asm volatile("": : :"memory");
bool populate_VPVar(const uint16_t VP, DGUS_VP_Variable * const ramcopy) {
- //DEBUG_ECHOPGM("populate_VPVar ", VP);
const DGUS_VP_Variable *pvp = DGUSLCD_FindVPVar(VP);
- //DEBUG_ECHOLNPGM(" pvp ", (uint16_t )pvp);
if (!pvp) return false;
memcpy_P(ramcopy, pvp, sizeof(DGUS_VP_Variable));
return true;
diff --git a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp
index 82dbeee411..b2363c4ee9 100644
--- a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp
@@ -112,8 +112,6 @@ void DGUSScreenHandler::setstatusmessagePGM(PGM_P const msg) {
// Send an 8 bit or 16 bit value to the display.
void DGUSScreenHandler::DGUSLCD_SendWordValueToDisplay(DGUS_VP_Variable &var) {
if (var.memadr) {
- //DEBUG_ECHOPGM(" DGUS_LCD_SendWordValueToDisplay ", var.VP);
- //DEBUG_ECHOLNPGM(" data ", *(uint16_t *)var.memadr);
if (var.size > 1)
dgusdisplay.WriteVariable(var.VP, *(int16_t*)var.memadr);
else
@@ -124,8 +122,6 @@ void DGUSScreenHandler::DGUSLCD_SendWordValueToDisplay(DGUS_VP_Variable &var) {
// Send an uint8_t between 0 and 255 to the display, but scale to a percentage (0..100)
void DGUSScreenHandler::DGUSLCD_SendPercentageToDisplay(DGUS_VP_Variable &var) {
if (var.memadr) {
- //DEBUG_ECHOPGM(" DGUS_LCD_SendWordValueToDisplay ", var.VP);
- //DEBUG_ECHOLNPGM(" data ", *(uint16_t *)var.memadr);
uint16_t tmp = *(uint8_t *) var.memadr + 1; // +1 -> avoid rounding issues for the display.
tmp = map(tmp, 0, 255, 0, 100);
dgusdisplay.WriteVariable(var.VP, tmp);
@@ -134,9 +130,7 @@ void DGUSScreenHandler::DGUSLCD_SendPercentageToDisplay(DGUS_VP_Variable &var) {
// Send the current print progress to the display.
void DGUSScreenHandler::DGUSLCD_SendPrintProgressToDisplay(DGUS_VP_Variable &var) {
- //DEBUG_ECHOPGM(" DGUSLCD_SendPrintProgressToDisplay ", var.VP);
uint16_t tmp = ExtUI::getProgress_percent();
- //DEBUG_ECHOLNPGM(" data ", tmp);
dgusdisplay.WriteVariable(var.VP, tmp);
}
@@ -153,9 +147,7 @@ void DGUSScreenHandler::DGUSLCD_SendPrintTimeToDisplay(DGUS_VP_Variable &var) {
void DGUSScreenHandler::DGUSLCD_PercentageToUint8(DGUS_VP_Variable &var, void *val_ptr) {
if (var.memadr) {
const uint16_t value = BE16_P(val_ptr);
- DEBUG_ECHOLNPGM("Got percent:", value);
*(uint8_t*)var.memadr = map(constrain(value, 0, 100), 0, 100, 0, 255);
- DEBUG_ECHOLNPGM("Set uint8:", *(uint8_t*)var.memadr);
}
}
@@ -236,8 +228,6 @@ void DGUSScreenHandler::DGUSLCD_SendStringToDisplayPGM(DGUS_VP_Variable &var) {
void DGUSScreenHandler::DGUSLCD_SendFanStatusToDisplay(DGUS_VP_Variable &var) {
if (var.memadr) {
- DEBUG_ECHOPGM(" DGUSLCD_SendFanStatusToDisplay ", var.VP);
- DEBUG_ECHOLNPGM(" data ", *(uint8_t *)var.memadr);
uint16_t data_to_send = 0;
if (*(uint8_t *) var.memadr) data_to_send = 1;
dgusdisplay.WriteVariable(var.VP, data_to_send);
@@ -249,8 +239,6 @@ void DGUSScreenHandler::DGUSLCD_SendStringToDisplayPGM(DGUS_VP_Variable &var) {
// Send heater status value to the display.
void DGUSScreenHandler::DGUSLCD_SendHeaterStatusToDisplay(DGUS_VP_Variable &var) {
if (var.memadr) {
- DEBUG_ECHOPGM(" DGUSLCD_SendHeaterStatusToDisplay ", var.VP);
- DEBUG_ECHOLNPGM(" data ", *(int16_t *)var.memadr);
uint16_t data_to_send = 0;
if (*(int16_t *) var.memadr) data_to_send = 1;
dgusdisplay.WriteVariable(var.VP, data_to_send);
@@ -263,11 +251,8 @@ void DGUSScreenHandler::DGUSLCD_SendHeaterStatusToDisplay(DGUS_VP_Variable &var)
// In FYSETC UI design there are 10 statuses to loop
static uint16_t period = 0;
static uint16_t index = 0;
- //DEBUG_ECHOPGM(" DGUSLCD_SendWaitingStatusToDisplay ", var.VP);
- //DEBUG_ECHOLNPGM(" data ", BE16_P(&index));
if (period++ > DGUS_UI_WAITING_STATUS_PERIOD) {
dgusdisplay.WriteVariable(var.VP, index);
- //DEBUG_ECHOLNPGM(" data ", BE16_P(&index));
if (++index >= DGUS_UI_WAITING_STATUS) index = 0;
period = 0;
}
@@ -309,17 +294,14 @@ void DGUSScreenHandler::DGUSLCD_SendHeaterStatusToDisplay(DGUS_VP_Variable &var)
const int16_t scroll = (int16_t)BE16_P(val_ptr);
if (scroll) {
top_file += scroll;
- DEBUG_ECHOPGM("new topfile calculated:", top_file);
if (top_file < 0) {
top_file = 0;
- DEBUG_ECHOLNPGM("Top of filelist reached");
}
else {
int16_t max_top = filelist.count() - DGUS_SD_FILESPERSCREEN;
NOLESS(max_top, 0);
NOMORE(top_file, max_top);
}
- DEBUG_ECHOPGM("new topfile adjusted:", top_file);
}
else if (!filelist.isAtRootDir()) {
IF_DISABLED(DGUS_LCD_UI_MKS, filelist.upDir());
@@ -374,7 +356,6 @@ const DGUS_VP_Variable* DGUSLCD_FindVPVar(const uint16_t vp) {
++ret;
} while (1);
- DEBUG_ECHOLNPGM("FindVPVar NOT FOUND ", vp);
return nullptr;
}
@@ -444,8 +425,6 @@ void DGUSScreenHandler::HandleFlowRateChanged(DGUS_VP_Variable &var, void *val_p
}
void DGUSScreenHandler::HandleManualExtrude(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleManualExtrude");
-
const int16_t movevalue = BE16_P(val_ptr);
float target = movevalue * 0.01f;
ExtUI::extruder_t target_extruder;
@@ -467,19 +446,16 @@ void DGUSScreenHandler::HandleManualExtrude(DGUS_VP_Variable &var, void *val_ptr
#if ENABLED(DGUS_UI_MOVE_DIS_OPTION)
void DGUSScreenHandler::HandleManualMoveOption(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleManualMoveOption");
*(uint16_t*)var.memadr = BE16_P(val_ptr);
}
#endif
void DGUSScreenHandler::HandleMotorLockUnlock(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleMotorLockUnlock");
const int16_t lock = BE16_P(val_ptr);
queue.enqueue_one_now(lock ? F("M18") : F("M17"));
}
void DGUSScreenHandler::HandleSettings(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleSettings");
const uint16_t value = BE16_P(val_ptr);
switch (value) {
default: break;
@@ -495,7 +471,6 @@ void DGUSScreenHandler::HandleSettings(DGUS_VP_Variable &var, void *val_ptr) {
void DGUSScreenHandler::HandleStepPerMMChanged(DGUS_VP_Variable &var, void *val_ptr) {
const uint16_t value_raw = BE16_P(val_ptr);
- DEBUG_ECHOLNPGM("HandleStepPerMMChanged:", value_raw);
const float value = (float)value_raw / 10;
ExtUI::axis_t axis;
switch (var.VP) {
@@ -504,15 +479,12 @@ void DGUSScreenHandler::HandleStepPerMMChanged(DGUS_VP_Variable &var, void *val_
case VP_Z_STEP_PER_MM: axis = ExtUI::axis_t::Z; break;
default: return;
}
- DEBUG_ECHOLNPGM("value:", value);
ExtUI::setAxisSteps_per_mm(value, axis);
- DEBUG_ECHOLNPGM("value_set:", ExtUI::getAxisSteps_per_mm(axis));
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
void DGUSScreenHandler::HandleStepPerMMExtruderChanged(DGUS_VP_Variable &var, void *val_ptr) {
const uint16_t value_raw = BE16_P(val_ptr);
- DEBUG_ECHOLNPGM("HandleStepPerMMExtruderChanged:", value_raw);
const float value = (float)value_raw / 10;
ExtUI::extruder_t extruder;
switch (var.VP) {
@@ -524,16 +496,12 @@ void DGUSScreenHandler::HandleStepPerMMExtruderChanged(DGUS_VP_Variable &var, vo
#endif
#endif
}
- DEBUG_ECHOLNPGM("value:", value);
ExtUI::setAxisSteps_per_mm(value, extruder);
- DEBUG_ECHOLNPGM("value_set:", ExtUI::getAxisSteps_per_mm(extruder));
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
#if HAS_PID_HEATING
void DGUSScreenHandler::HandlePIDAutotune(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandlePIDAutotune");
-
char buf[32] = {0};
switch (var.VP) {
@@ -568,8 +536,6 @@ void DGUSScreenHandler::HandleStepPerMMExtruderChanged(DGUS_VP_Variable &var, vo
#if HAS_BED_PROBE
void DGUSScreenHandler::HandleProbeOffsetZChanged(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleProbeOffsetZChanged");
-
const float offset = float(int16_t(BE16_P(val_ptr))) / 100.0f;
ExtUI::setZOffset_mm(offset);
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
@@ -579,14 +545,11 @@ void DGUSScreenHandler::HandleStepPerMMExtruderChanged(DGUS_VP_Variable &var, vo
#if HAS_FAN
void DGUSScreenHandler::HandleFanControl(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleFanControl");
*(uint8_t*)var.memadr = *(uint8_t*)var.memadr > 0 ? 0 : 255;
}
#endif
void DGUSScreenHandler::HandleHeaterControl(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleHeaterControl");
-
uint8_t preheat_temp = 0;
switch (var.VP) {
#if HAS_HOTEND
@@ -614,8 +577,6 @@ void DGUSScreenHandler::HandleHeaterControl(DGUS_VP_Variable &var, void *val_ptr
#if ENABLED(DGUS_PREHEAT_UI)
void DGUSScreenHandler::HandlePreheat(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandlePreheat");
-
const uint16_t preheat_option = BE16_P(val_ptr);
switch (preheat_option) {
default:
@@ -654,7 +615,6 @@ void DGUSScreenHandler::HandleHeaterControl(DGUS_VP_Variable &var, void *val_ptr
#endif
void DGUSScreenHandler::UpdateNewScreen(DGUSLCD_Screens newscreen, bool popup) {
- DEBUG_ECHOLNPGM("SetNewScreen: ", newscreen);
if (!popup) {
memmove(&past_screens[1], &past_screens[0], sizeof(past_screens) - 1);
past_screens[0] = current_screen;
@@ -665,18 +625,14 @@ void DGUSScreenHandler::UpdateNewScreen(DGUSLCD_Screens newscreen, bool popup) {
}
void DGUSScreenHandler::PopToOldScreen() {
- DEBUG_ECHOLNPGM("PopToOldScreen s=", past_screens[0]);
GotoScreen(past_screens[0], true);
memmove(&past_screens[0], &past_screens[1], sizeof(past_screens) - 1);
past_screens[sizeof(past_screens) - 1] = DGUSLCD_SCREEN_MAIN;
}
void DGUSScreenHandler::UpdateScreenVPData() {
- DEBUG_ECHOPGM(" UpdateScreenVPData Screen: ", current_screen);
-
const uint16_t *VPList = DGUSLCD_FindScreenVPMapList(current_screen);
if (!VPList) {
- DEBUG_ECHOLNPGM(" NO SCREEN FOR: ", current_screen);
ScreenComplete = true;
return; // nothing to do, likely a bug or boring screen.
}
@@ -687,10 +643,8 @@ void DGUSScreenHandler::UpdateScreenVPData() {
bool sent_one = false;
do {
uint16_t VP = pgm_read_word(VPList);
- DEBUG_ECHOPGM(" VP: ", VP);
if (!VP) {
update_ptr = 0;
- DEBUG_ECHOLNPGM(" UpdateScreenVPData done");
ScreenComplete = true;
return; // Screen completed.
}
@@ -703,14 +657,10 @@ void DGUSScreenHandler::UpdateScreenVPData() {
// Send the VP to the display, but try to avoid overrunning the Tx Buffer.
// But send at least one VP, to avoid getting stalled.
if (rcpy.send_to_display_handler && (!sent_one || expected_tx <= dgusdisplay.GetFreeTxBuffer())) {
- //DEBUG_ECHOPGM(" calling handler for ", rcpy.VP);
sent_one = true;
rcpy.send_to_display_handler(rcpy);
}
else {
- // auto x=dgusdisplay.GetFreeTxBuffer();
- //DEBUG_ECHOLNPGM(" tx almost full: ", x);
- //DEBUG_ECHOPGM(" update_ptr ", update_ptr);
ScreenComplete = false;
return; // please call again!
}
@@ -725,7 +675,6 @@ void DGUSScreenHandler::GotoScreen(DGUSLCD_Screens screen, bool ispopup) {
}
void DGUSDisplay::RequestScreen(DGUSLCD_Screens screen) {
- DEBUG_ECHOLNPGM("GotoScreen ", screen);
const unsigned char gotoscreen[] = { 0x5A, 0x01, (unsigned char) (screen >> 8U), (unsigned char) (screen & 0xFFU) };
WriteVariable(0x84, gotoscreen, sizeof(gotoscreen));
}
diff --git a/Marlin/src/lcd/extui/dgus/DGUSScreenHandlerBase.h b/Marlin/src/lcd/extui/dgus/DGUSScreenHandlerBase.h
index 340938c979..7ff9ac673f 100644
--- a/Marlin/src/lcd/extui/dgus/DGUSScreenHandlerBase.h
+++ b/Marlin/src/lcd/extui/dgus/DGUSScreenHandlerBase.h
@@ -191,7 +191,7 @@ public:
// Send a float value to the display.
// Display will get a 4-byte integer scaled to the number of digits:
// Tell the display the number of digits and it cheats by displaying a dot between...
- template
+ template
static void DGUSLCD_SendFloatAsLongValueToDisplay(DGUS_VP_Variable &var) {
if (var.memadr) {
float f = *(float *)var.memadr;
@@ -203,7 +203,7 @@ public:
// Send a float value to the display.
// Display will get a 2-byte integer scaled to the number of digits:
// Tell the display the number of digits and it cheats by displaying a dot between...
- template
+ template
static void DGUSLCD_SendFloatAsIntValueToDisplay(DGUS_VP_Variable &var) {
if (var.memadr) {
float f = *(float *)var.memadr;
diff --git a/Marlin/src/lcd/extui/dgus/fysetc/DGUSDisplayDef.h b/Marlin/src/lcd/extui/dgus/fysetc/DGUSDisplayDef.h
index 2543d20b76..5deedc0450 100644
--- a/Marlin/src/lcd/extui/dgus/fysetc/DGUSDisplayDef.h
+++ b/Marlin/src/lcd/extui/dgus/fysetc/DGUSDisplayDef.h
@@ -258,7 +258,7 @@ constexpr uint16_t VP_BED_STATUS = 0x331C;
constexpr uint16_t VP_MOVE_OPTION = 0x3400;
// Step per mm
-constexpr uint16_t VP_X_STEP_PER_MM = 0x3600; // at the moment , 2 byte unsigned int , 0~1638.4
+constexpr uint16_t VP_X_STEP_PER_MM = 0x3600; // at the moment , uint16_t , 0~1638.4
//constexpr uint16_t VP_X2_STEP_PER_MM = 0x3602;
constexpr uint16_t VP_Y_STEP_PER_MM = 0x3604;
//constexpr uint16_t VP_Y2_STEP_PER_MM = 0x3606;
@@ -272,10 +272,10 @@ constexpr uint16_t VP_E1_STEP_PER_MM = 0x3612;
//constexpr uint16_t VP_E5_STEP_PER_MM = 0x361A;
// PIDs
-constexpr uint16_t VP_E0_PID_P = 0x3700; // at the moment , 2 byte unsigned int , 0~1638.4
+constexpr uint16_t VP_E0_PID_P = 0x3700; // at the moment , uint16_t , 0~1638.4
constexpr uint16_t VP_E0_PID_I = 0x3702;
constexpr uint16_t VP_E0_PID_D = 0x3704;
-constexpr uint16_t VP_E1_PID_P = 0x3706; // at the moment , 2 byte unsigned int , 0~1638.4
+constexpr uint16_t VP_E1_PID_P = 0x3706; // at the moment , uint16_t , 0~1638.4
constexpr uint16_t VP_E1_PID_I = 0x3708;
constexpr uint16_t VP_E1_PID_D = 0x370A;
constexpr uint16_t VP_BED_PID_P = 0x3710;
diff --git a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp
index b68f72a1fb..c6e000eeca 100644
--- a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp
@@ -134,8 +134,6 @@ void DGUSScreenHandler::ScreenChangeHook(DGUS_VP_Variable &var, void *val_ptr) {
// meaning "return to previous screen"
DGUSLCD_Screens target = (DGUSLCD_Screens)tmp[1];
- DEBUG_ECHOLNPGM("\n DEBUG target", target);
-
if (target == DGUSLCD_SCREEN_POPUP) {
// Special handling for popup is to return to previous menu
if (current_screen == DGUSLCD_SCREEN_POPUP && confirm_action_cb) confirm_action_cb();
@@ -151,8 +149,6 @@ void DGUSScreenHandler::ScreenChangeHook(DGUS_VP_Variable &var, void *val_ptr) {
}
void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleManualMove");
-
int16_t movevalue = swap16(*(uint16_t*)val_ptr);
#if ENABLED(DGUS_UI_MOVE_DIS_OPTION)
if (movevalue) {
@@ -161,7 +157,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
}
#endif
char axiscode;
- unsigned int speed = 1500; // FIXME: get default feedrate for manual moves, don't hardcode.
+ uint16_t speed = _mf[X_AXIS]; // Default feedrate for manual moves
switch (var.VP) {
default: return;
@@ -171,16 +167,21 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
if (!ExtUI::canMove(ExtUI::axis_t::X)) goto cannotmove;
break;
- case VP_MOVE_Y:
- axiscode = 'Y';
- if (!ExtUI::canMove(ExtUI::axis_t::Y)) goto cannotmove;
- break;
+ #if HAS_Y_AXIS
+ case VP_MOVE_Y:
+ axiscode = 'Y';
+ speed = _mf[Y_AXIS];
+ if (!ExtUI::canMove(ExtUI::axis_t::Y)) goto cannotmove;
+ break;
+ #endif
- case VP_MOVE_Z:
- axiscode = 'Z';
- speed = 300; // default to 5mm/s
- if (!ExtUI::canMove(ExtUI::axis_t::Z)) goto cannotmove;
- break;
+ #if HAS_Z_AXIS
+ case VP_MOVE_Z:
+ axiscode = 'Z';
+ speed = _mf[Z_AXIS];
+ if (!ExtUI::canMove(ExtUI::axis_t::Z)) goto cannotmove;
+ break;
+ #endif
case VP_HOME_ALL: // only used for homing
axiscode = '\0';
@@ -190,63 +191,42 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
if (!movevalue) {
// homing
- DEBUG_ECHOPGM(" homing ", AS_CHAR(axiscode));
char buf[6] = "G28 X";
buf[4] = axiscode;
- //DEBUG_ECHOPGM(" ", buf);
queue.enqueue_one_now(buf);
- //DEBUG_ECHOLNPGM(" ✓");
ForceCompleteUpdate();
return;
}
else {
// movement
- DEBUG_ECHOPGM(" move ", AS_CHAR(axiscode));
bool old_relative_mode = relative_mode;
- if (!relative_mode) {
- //DEBUG_ECHOPGM(" G91");
- queue.enqueue_now(F("G91"));
- //DEBUG_ECHOPGM(" ✓ ");
- }
+ if (!relative_mode) queue.enqueue_now(F("G91"));
char buf[32]; // G1 X9999.99 F12345
- unsigned int backup_speed = MMS_TO_MMM(feedrate_mm_s);
+ const uint16_t backup_speed = MMS_TO_MMM(feedrate_mm_s);
char sign[] = "\0";
int16_t value = movevalue / 100;
if (movevalue < 0) { value = -value; sign[0] = '-'; }
int16_t fraction = ABS(movevalue) % 100;
snprintf_P(buf, 32, PSTR("G0 %c%s%d.%02d F%d"), axiscode, sign, value, fraction, speed);
- //DEBUG_ECHOPGM(" ", buf);
queue.enqueue_one_now(buf);
- //DEBUG_ECHOLNPGM(" ✓ ");
if (backup_speed != speed) {
snprintf_P(buf, 32, PSTR("G0 F%d"), backup_speed);
queue.enqueue_one_now(buf);
- //DEBUG_ECHOPGM(" ", buf);
- }
- // while (!enqueue_and_echo_command(buf)) idle();
- //DEBUG_ECHOLNPGM(" ✓ ");
- if (!old_relative_mode) {
- //DEBUG_ECHOPGM("G90");
- queue.enqueue_now(F("G90"));
- //DEBUG_ECHOPGM(" ✓ ");
}
+ //while (!enqueue_and_echo_command(buf)) idle();
+ if (!old_relative_mode) queue.enqueue_now(F("G90"));
}
ForceCompleteUpdate();
- DEBUG_ECHOLNPGM("manmv done.");
- return;
cannotmove:
- DEBUG_ECHOLNPGM(" cannot move ", AS_CHAR(axiscode));
return;
}
#if HAS_PID_HEATING
void DGUSScreenHandler::HandleTemperaturePIDChanged(DGUS_VP_Variable &var, void *val_ptr) {
uint16_t rawvalue = swap16(*(uint16_t*)val_ptr);
- DEBUG_ECHOLNPGM("V1:", rawvalue);
float value = (float)rawvalue / 10;
- DEBUG_ECHOLNPGM("V2:", value);
float newvalue = 0;
switch (var.VP) {
@@ -268,7 +248,6 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
#endif
}
- DEBUG_ECHOLNPGM("V3:", newvalue);
*(float *)var.memadr = newvalue;
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
@@ -277,7 +256,6 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
#if ENABLED(BABYSTEPPING)
void DGUSScreenHandler::HandleLiveAdjustZ(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleLiveAdjustZ");
int16_t flag = swap16(*(uint16_t*)val_ptr),
steps = flag ? -20 : 20;
ExtUI::smartAdjustAxis_steps(steps, ExtUI::axis_t::Z, true);
@@ -288,8 +266,6 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
#if ENABLED(DGUS_FILAMENT_LOADUNLOAD)
void DGUSScreenHandler::HandleFilamentOption(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleFilamentOption");
-
uint8_t e_temp = 0;
filament_data.heated = false;
uint16_t preheat_option = swap16(*(uint16_t*)val_ptr);
@@ -360,7 +336,6 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
}
void DGUSScreenHandler::HandleFilamentLoadUnload(DGUS_VP_Variable &var) {
- DEBUG_ECHOLNPGM("HandleFilamentLoadUnload");
if (filament_data.action <= 0) return;
// If we close to the target temperature, we can start load or unload the filament
diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.h b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.h
index e958155381..3b7199f07e 100644
--- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.h
+++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.h
@@ -257,7 +257,7 @@ constexpr uint16_t VP_BED_STATUS = 0x331C;
constexpr uint16_t VP_MOVE_OPTION = 0x3400;
// Step per mm
-constexpr uint16_t VP_X_STEP_PER_MM = 0x3600; // at the moment , 2 byte unsigned int , 0~1638.4
+constexpr uint16_t VP_X_STEP_PER_MM = 0x3600; // at the moment , uint16_t , 0~1638.4
//constexpr uint16_t VP_X2_STEP_PER_MM = 0x3602;
constexpr uint16_t VP_Y_STEP_PER_MM = 0x3604;
//constexpr uint16_t VP_Y2_STEP_PER_MM = 0x3606;
@@ -271,7 +271,7 @@ constexpr uint16_t VP_E0_STEP_PER_MM = 0x3610;
//constexpr uint16_t VP_E5_STEP_PER_MM = 0x361A;
// PIDs
-constexpr uint16_t VP_E0_PID_P = 0x3700; // at the moment , 2 byte unsigned int , 0~1638.4
+constexpr uint16_t VP_E0_PID_P = 0x3700; // at the moment , uint16_t , 0~1638.4
constexpr uint16_t VP_E0_PID_I = 0x3702;
constexpr uint16_t VP_E0_PID_D = 0x3704;
constexpr uint16_t VP_BED_PID_P = 0x3710;
diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp
index 475a03307e..ca1a64123a 100644
--- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp
@@ -134,8 +134,6 @@ void DGUSScreenHandler::ScreenChangeHook(DGUS_VP_Variable &var, void *val_ptr) {
// meaning "return to previous screen"
DGUSLCD_Screens target = (DGUSLCD_Screens)tmp[1];
- DEBUG_ECHOLNPGM("\n DEBUG target", target);
-
if (target == DGUSLCD_SCREEN_POPUP) {
// Special handling for popup is to return to previous menu
if (current_screen == DGUSLCD_SCREEN_POPUP && confirm_action_cb) confirm_action_cb();
@@ -151,8 +149,6 @@ void DGUSScreenHandler::ScreenChangeHook(DGUS_VP_Variable &var, void *val_ptr) {
}
void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleManualMove");
-
int16_t movevalue = swap16(*(uint16_t*)val_ptr);
#if ENABLED(DGUS_UI_MOVE_DIS_OPTION)
if (movevalue) {
@@ -161,7 +157,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
}
#endif
char axiscode;
- unsigned int speed = 1500; // FIXME: get default feedrate for manual moves, don't hardcode.
+ uint16_t speed = _mf[X_AXIS]; // Default feedrate for manual moves
switch (var.VP) {
default: return;
@@ -171,16 +167,21 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
if (!ExtUI::canMove(ExtUI::axis_t::X)) goto cannotmove;
break;
- case VP_MOVE_Y:
- axiscode = 'Y';
- if (!ExtUI::canMove(ExtUI::axis_t::Y)) goto cannotmove;
- break;
+ #if HAS_Y_AXIS
+ case VP_MOVE_Y:
+ axiscode = 'Y';
+ speed = _mf[Y_AXIS];
+ if (!ExtUI::canMove(ExtUI::axis_t::Y)) goto cannotmove;
+ break;
+ #endif
- case VP_MOVE_Z:
- axiscode = 'Z';
- speed = 300; // default to 5mm/s
- if (!ExtUI::canMove(ExtUI::axis_t::Z)) goto cannotmove;
- break;
+ #if HAS_Z_AXIS
+ case VP_MOVE_Z:
+ axiscode = 'Z';
+ speed = _mf[Z_AXIS];
+ if (!ExtUI::canMove(ExtUI::axis_t::Z)) goto cannotmove;
+ break;
+ #endif
case VP_HOME_ALL: // only used for homing
axiscode = '\0';
@@ -190,63 +191,42 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
if (!movevalue) {
// homing
- DEBUG_ECHOPGM(" homing ", AS_CHAR(axiscode));
char buf[6] = "G28 X";
buf[4] = axiscode;
- //DEBUG_ECHOPGM(" ", buf);
queue.enqueue_one_now(buf);
- //DEBUG_ECHOLNPGM(" ✓");
ForceCompleteUpdate();
return;
}
else {
// movement
- DEBUG_ECHOPGM(" move ", AS_CHAR(axiscode));
- bool old_relative_mode = relative_mode;
- if (!relative_mode) {
- //DEBUG_ECHOPGM(" G91");
- queue.enqueue_now(F("G91"));
- //DEBUG_ECHOPGM(" ✓ ");
- }
+ const bool old_relative_mode = relative_mode;
+ if (!relative_mode) queue.enqueue_now(F("G91"));
char buf[32]; // G1 X9999.99 F12345
- unsigned int backup_speed = MMS_TO_MMM(feedrate_mm_s);
+ const uint16_t backup_speed = MMS_TO_MMM(feedrate_mm_s);
char sign[] = "\0";
int16_t value = movevalue / 100;
if (movevalue < 0) { value = -value; sign[0] = '-'; }
int16_t fraction = ABS(movevalue) % 100;
snprintf_P(buf, 32, PSTR("G0 %c%s%d.%02d F%d"), axiscode, sign, value, fraction, speed);
- //DEBUG_ECHOPGM(" ", buf);
queue.enqueue_one_now(buf);
- //DEBUG_ECHOLNPGM(" ✓ ");
if (backup_speed != speed) {
snprintf_P(buf, 32, PSTR("G0 F%d"), backup_speed);
queue.enqueue_one_now(buf);
- //DEBUG_ECHOPGM(" ", buf);
- }
- // while (!enqueue_and_echo_command(buf)) idle();
- //DEBUG_ECHOLNPGM(" ✓ ");
- if (!old_relative_mode) {
- //DEBUG_ECHOPGM("G90");
- queue.enqueue_now(F("G90"));
- //DEBUG_ECHOPGM(" ✓ ");
}
+ //while (!enqueue_and_echo_command(buf)) idle();
+ if (!old_relative_mode) queue.enqueue_now(F("G90"));
}
ForceCompleteUpdate();
- DEBUG_ECHOLNPGM("manmv done.");
- return;
cannotmove:
- DEBUG_ECHOLNPGM(" cannot move ", AS_CHAR(axiscode));
return;
}
#if HAS_PID_HEATING
void DGUSScreenHandler::HandleTemperaturePIDChanged(DGUS_VP_Variable &var, void *val_ptr) {
uint16_t rawvalue = swap16(*(uint16_t*)val_ptr);
- DEBUG_ECHOLNPGM("V1:", rawvalue);
float value = (float)rawvalue / 10;
- DEBUG_ECHOLNPGM("V2:", value);
float newvalue = 0;
switch (var.VP) {
@@ -268,7 +248,6 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
#endif
}
- DEBUG_ECHOLNPGM("V3:", newvalue);
*(float *)var.memadr = newvalue;
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
@@ -277,7 +256,6 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
#if ENABLED(BABYSTEPPING)
void DGUSScreenHandler::HandleLiveAdjustZ(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleLiveAdjustZ");
int16_t flag = swap16(*(uint16_t*)val_ptr),
steps = flag ? -20 : 20;
ExtUI::smartAdjustAxis_steps(steps, ExtUI::axis_t::Z, true);
@@ -288,8 +266,6 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
#if ENABLED(DGUS_FILAMENT_LOADUNLOAD)
void DGUSScreenHandler::HandleFilamentOption(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleFilamentOption");
-
uint8_t e_temp = 0;
filament_data.heated = false;
uint16_t preheat_option = swap16(*(uint16_t*)val_ptr);
@@ -360,7 +336,6 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
}
void DGUSScreenHandler::HandleFilamentLoadUnload(DGUS_VP_Variable &var) {
- DEBUG_ECHOLNPGM("HandleFilamentLoadUnload");
if (filament_data.action <= 0) return;
// If we close to the target temperature, we can start load or unload the filament
diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.h b/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.h
index bdcd248dd6..63586e7fe5 100644
--- a/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.h
+++ b/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.h
@@ -256,10 +256,10 @@ constexpr uint16_t VP_E1_STATUS = 0x3412;
constexpr uint16_t VP_MOVE_OPTION = 0x3500;
// // PIDs
-// constexpr uint16_t VP_E0_PID_P = 0x3700; // at the moment , 2 byte unsigned int , 0~1638.4
+// constexpr uint16_t VP_E0_PID_P = 0x3700; // at the moment , uint16_t , 0~1638.4
// constexpr uint16_t VP_E0_PID_I = 0x3702;
// constexpr uint16_t VP_E0_PID_D = 0x3704;
-// constexpr uint16_t VP_E1_PID_P = 0x3706; // at the moment , 2 byte unsigned int , 0~1638.4
+// constexpr uint16_t VP_E1_PID_P = 0x3706; // at the moment , uint16_t , 0~1638.4
// constexpr uint16_t VP_E1_PID_I = 0x3708;
// constexpr uint16_t VP_E1_PID_D = 0x370A;
// constexpr uint16_t VP_BED_PID_P = 0x3710;
@@ -414,7 +414,7 @@ constexpr uint16_t SP_T_Bed_Set = 0x5040;
constexpr uint16_t VP_FAN3_STATUS = 0x2716;
// Step per mm
- constexpr uint16_t VP_X_STEP_PER_MM = 0x2900; // at the moment , 2 byte unsigned int , 0~1638.4
+ constexpr uint16_t VP_X_STEP_PER_MM = 0x2900; // at the moment , uint16_t , 0~1638.4
constexpr uint16_t VP_Y_STEP_PER_MM = 0x2904;
constexpr uint16_t VP_Z_STEP_PER_MM = 0x2908;
constexpr uint16_t VP_E0_STEP_PER_MM = 0x2910;
@@ -521,10 +521,10 @@ constexpr uint16_t SP_T_Bed_Set = 0x5040;
constexpr uint16_t VP_PrintTime_S = 0x3504;
// PIDs
- constexpr uint16_t VP_E0_PID_P = 0x3700; // at the moment , 2 byte unsigned int , 0~1638.4
+ constexpr uint16_t VP_E0_PID_P = 0x3700; // at the moment , uint16_t , 0~1638.4
constexpr uint16_t VP_E0_PID_I = 0x3702;
constexpr uint16_t VP_E0_PID_D = 0x3704;
- constexpr uint16_t VP_E1_PID_P = 0x3706; // at the moment , 2 byte unsigned int , 0~1638.4
+ constexpr uint16_t VP_E1_PID_P = 0x3706; // at the moment , uint16_t , 0~1638.4
constexpr uint16_t VP_E1_PID_I = 0x3708;
constexpr uint16_t VP_E1_PID_D = 0x370A;
constexpr uint16_t VP_BED_PID_P = 0x3710;
diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp
index 882cfadcd2..3cf0c32648 100644
--- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp
@@ -80,8 +80,6 @@ void DGUSScreenHandlerMKS::sendinfoscreen(const void *line1, const void *line2,
void DGUSScreenHandlerMKS::DGUSLCD_SendFanToDisplay(DGUS_VP_Variable &var) {
if (var.memadr) {
- //DEBUG_ECHOPGM(" DGUS_LCD_SendWordValueToDisplay ", var.VP);
- //DEBUG_ECHOLNPGM(" data ", *(uint16_t *)var.memadr);
uint16_t tmp = *(uint8_t *) var.memadr; // +1 -> avoid rounding issues for the display.
// tmp = map(tmp, 0, 255, 0, 100);
dgusdisplay.WriteVariable(var.VP, tmp);
@@ -90,7 +88,6 @@ void DGUSScreenHandlerMKS::DGUSLCD_SendFanToDisplay(DGUS_VP_Variable &var) {
void DGUSScreenHandlerMKS::DGUSLCD_SendBabyStepToDisplay(DGUS_VP_Variable &var) {
float value = current_position.z;
- DEBUG_ECHOLNPAIR_F(" >> ", value, 6);
value *= cpow(10, 2);
dgusdisplay.WriteVariable(VP_SD_Print_Baby, (uint16_t)value);
}
@@ -106,14 +103,11 @@ void DGUSScreenHandlerMKS::DGUSLCD_SendPrintTimeToDisplay(DGUS_VP_Variable &var)
void DGUSScreenHandlerMKS::DGUSLCD_SetUint8(DGUS_VP_Variable &var, void *val_ptr) {
if (var.memadr) {
const uint16_t value = BE16_P(val_ptr);
- DEBUG_ECHOLNPGM("Got uint8:", value);
*(uint8_t*)var.memadr = map(constrain(value, 0, 255), 0, 255, 0, 255);
- DEBUG_ECHOLNPGM("Set uint8:", *(uint8_t*)var.memadr);
}
}
void DGUSScreenHandlerMKS::DGUSLCD_SendGbkToDisplay(DGUS_VP_Variable &var) {
- DEBUG_ECHOLNPGM(" data ", *(uint16_t *)var.memadr);
uint16_t *tmp = (uint16_t*) var.memadr;
dgusdisplay.WriteVariable(var.VP, tmp, var.size, true);
}
@@ -278,8 +272,6 @@ void DGUSScreenHandler::ScreenChangeHook(DGUS_VP_Variable &var, void *val_ptr) {
// meaning "return to previous screen"
DGUSLCD_Screens target = (DGUSLCD_Screens)tmp[1];
- DEBUG_ECHOLNPGM("\n DEBUG target", target);
-
// when the dgus had reboot, it will enter the DGUSLCD_SCREEN_MAIN page,
// so user can change any page to use this function, an it will check
// if robin nano is printing. when it is, dgus will enter the printing
@@ -313,7 +305,6 @@ void DGUSScreenHandler::ScreenChangeHook(DGUS_VP_Variable &var, void *val_ptr) {
void DGUSScreenHandlerMKS::ScreenBackChange(DGUS_VP_Variable &var, void *val_ptr) {
const uint16_t target = BE16_P(val_ptr);
- DEBUG_ECHOLNPGM(" back = 0x%x", target);
switch (target) {
}
}
@@ -327,7 +318,6 @@ void DGUSScreenHandlerMKS::ZoffsetConfirm(DGUS_VP_Variable &var, void *val_ptr)
}
void DGUSScreenHandlerMKS::GetTurnOffCtrl(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("GetTurnOffCtrl\n");
const uint16_t value = BE16_P(val_ptr);
switch (value) {
case 0 ... 1: DGUSAutoTurnOff = (bool)value; break;
@@ -336,7 +326,6 @@ void DGUSScreenHandlerMKS::GetTurnOffCtrl(DGUS_VP_Variable &var, void *val_ptr)
}
void DGUSScreenHandlerMKS::GetMinExtrudeTemp(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("GetMinExtrudeTemp");
const uint16_t value = BE16_P(val_ptr);
TERN_(PREVENT_COLD_EXTRUSION, thermalManager.extrude_min_temp = value);
mks_min_extrusion_temp = value;
@@ -344,7 +333,6 @@ void DGUSScreenHandlerMKS::GetMinExtrudeTemp(DGUS_VP_Variable &var, void *val_pt
}
void DGUSScreenHandlerMKS::GetZoffsetDistance(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("GetZoffsetDistance");
const uint16_t value = BE16_P(val_ptr);
float val_distance = 0;
switch (value) {
@@ -358,7 +346,6 @@ void DGUSScreenHandlerMKS::GetZoffsetDistance(DGUS_VP_Variable &var, void *val_p
}
void DGUSScreenHandlerMKS::GetManualMovestep(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("\nGetManualMovestep");
*(uint16_t *)var.memadr = BE16_P(val_ptr);
}
@@ -395,7 +382,6 @@ void DGUSScreenHandlerMKS::GetOffsetValue(DGUS_VP_Variable &var, void *val_ptr)
#if HAS_BED_PROBE
const int32_t value = BE32_P(val_ptr);
const float Offset = value / 100.0f;
- DEBUG_ECHOLNPGM("\nget int6 offset >> ", value, 6);
switch (var.VP) {
default: break;
@@ -743,8 +729,6 @@ void DGUSScreenHandlerMKS::TMC_ChangeConfig(DGUS_VP_Variable &var, void *val_ptr
}
void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleManualMove");
-
int16_t movevalue = BE16_P(val_ptr);
// Choose Move distance
@@ -752,69 +736,64 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
else if (manualMoveStep == 0x02) manualMoveStep = 100;
else if (manualMoveStep == 0x03) manualMoveStep = 1000;
- DEBUG_ECHOLNPGM("QUEUE LEN:", queue.ring_buffer.length);
-
if (!print_job_timer.isPaused() && !queue.ring_buffer.empty())
return;
char axiscode;
- unsigned int speed = 1500; // FIXME: get default feedrate for manual moves, don't hardcode.
+ uint16_t speed = _mf[X_AXIS]; // Default feedrate for manual moves
switch (var.VP) { // switch X Y Z or Home
default: return;
case VP_MOVE_X:
- DEBUG_ECHOLNPGM("X Move");
axiscode = 'X';
if (!ExtUI::canMove(ExtUI::axis_t::X)) goto cannotmove;
break;
- case VP_MOVE_Y:
- DEBUG_ECHOLNPGM("Y Move");
- axiscode = 'Y';
- if (!ExtUI::canMove(ExtUI::axis_t::Y)) goto cannotmove;
- break;
+ #if HAS_Y_AXIS
+ case VP_MOVE_Y:
+ axiscode = 'Y';
+ speed = _mf[Y_AXIS];
+ if (!ExtUI::canMove(ExtUI::axis_t::Y)) goto cannotmove;
+ break;
+ #endif
- case VP_MOVE_Z:
- DEBUG_ECHOLNPGM("Z Move");
- axiscode = 'Z';
- speed = 300; // default to 5mm/s
- if (!ExtUI::canMove(ExtUI::axis_t::Z)) goto cannotmove;
- break;
+ #if HAS_Z_AXIS
+ case VP_MOVE_Z:
+ axiscode = 'Z';
+ speed = _mf[Z_AXIS];
+ if (!ExtUI::canMove(ExtUI::axis_t::Z)) goto cannotmove;
+ break;
+ #endif
case VP_MOTOR_LOCK_UNLOK:
- DEBUG_ECHOLNPGM("Motor Unlock");
movevalue = 5;
- axiscode = '\0';
- // return ;
break;
case VP_HOME_ALL: // only used for homing
- DEBUG_ECHOLNPGM("Home all");
- axiscode = '\0';
+ axiscode = '\0';
movevalue = 0; // ignore value sent from display, this VP is _ONLY_ for homing.
- //return;
break;
case VP_X_HOME:
- DEBUG_ECHOLNPGM("X Home");
- axiscode = 'X';
+ axiscode = 'X';
movevalue = 0;
break;
- case VP_Y_HOME:
- DEBUG_ECHOLNPGM("Y Home");
- axiscode = 'Y';
- movevalue = 0;
- break;
+ #if HAS_Y_AXIS
+ case VP_Y_HOME:
+ axiscode = 'Y';
+ movevalue = 0;
+ break;
+ #endif
- case VP_Z_HOME:
- DEBUG_ECHOLNPGM("Z Home");
- axiscode = 'Z';
- movevalue = 0;
- break;
+ #if HAS_Z_AXIS
+ case VP_Z_HOME:
+ axiscode = 'Z';
+ movevalue = 0;
+ break;
+ #endif
}
- DEBUG_ECHOPGM("movevalue = ", movevalue);
if (movevalue != 0 && movevalue != 5) { // get move distance
switch (movevalue) {
case 0x0001: movevalue = manualMoveStep; break;
@@ -824,21 +803,16 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
}
if (!movevalue) {
- // homing
- DEBUG_ECHOPGM(" homing ", AS_CHAR(axiscode));
// char buf[6] = "G28 X";
// buf[4] = axiscode;
char buf[6];
sprintf(buf, "G28 %c", axiscode);
- //DEBUG_ECHOPGM(" ", buf);
queue.enqueue_one_now(buf);
- //DEBUG_ECHOLNPGM(" ✓");
ForceCompleteUpdate();
return;
}
else if (movevalue == 5) {
- DEBUG_ECHOPGM("send M84");
char buf[6];
snprintf_P(buf,6,PSTR("M84 %c"), axiscode);
queue.enqueue_one_now(buf);
@@ -847,45 +821,30 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
}
else {
// movement
- DEBUG_ECHOPGM(" move ", AS_CHAR(axiscode));
- bool old_relative_mode = relative_mode;
-
- if (!relative_mode) {
- //DEBUG_ECHOPGM(" G91");
- queue.enqueue_now(F("G91"));
- //DEBUG_ECHOPGM(" ✓ ");
- }
+ const bool old_relative_mode = relative_mode;
+ if (!relative_mode) queue.enqueue_now(F("G91"));
char buf[32]; // G1 X9999.99 F12345
- // unsigned int backup_speed = MMS_TO_MMM(feedrate_mm_s);
+ //const uint16_t backup_speed = MMS_TO_MMM(feedrate_mm_s);
char sign[] = "\0";
int16_t value = movevalue / 100;
if (movevalue < 0) { value = -value; sign[0] = '-'; }
- int16_t fraction = ABS(movevalue) % 100;
+ const int16_t fraction = ABS(movevalue) % 100;
snprintf_P(buf, 32, PSTR("G0 %c%s%d.%02d F%d"), axiscode, sign, value, fraction, speed);
queue.enqueue_one_now(buf);
//if (backup_speed != speed) {
// snprintf_P(buf, 32, PSTR("G0 F%d"), backup_speed);
// queue.enqueue_one_now(buf);
- // //DEBUG_ECHOPGM(" ", buf);
//}
//while (!enqueue_and_echo_command(buf)) idle();
- //DEBUG_ECHOLNPGM(" ✓ ");
- if (!old_relative_mode) {
- //DEBUG_ECHOPGM("G90");
- //queue.enqueue_now(F("G90"));
- queue.enqueue_now(F("G90"));
- //DEBUG_ECHOPGM(" ✓ ");
- }
+
+ if (!old_relative_mode) queue.enqueue_now(F("G90"));
}
ForceCompleteUpdate();
- DEBUG_ECHOLNPGM("manmv done.");
- return;
cannotmove:
- DEBUG_ECHOLNPGM(" cannot move ", AS_CHAR(axiscode));
return;
}
@@ -902,10 +861,7 @@ void DGUSScreenHandlerMKS::GetParkPos(DGUS_VP_Variable &var, void *val_ptr) {
}
void DGUSScreenHandlerMKS::HandleChangeLevelPoint(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleChangeLevelPoint");
-
const int16_t value_raw = BE16_P(val_ptr);
- DEBUG_ECHOLNPGM("value_raw:", value_raw);
*(int16_t*)var.memadr = value_raw;
@@ -914,14 +870,9 @@ void DGUSScreenHandlerMKS::HandleChangeLevelPoint(DGUS_VP_Variable &var, void *v
}
void DGUSScreenHandlerMKS::HandleStepPerMMChanged(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleStepPerMMChanged");
-
const uint16_t value_raw = BE16_P(val_ptr);
const float value = (float)value_raw;
- DEBUG_ECHOLNPGM("value_raw:", value_raw);
- DEBUG_ECHOLNPGM("value:", value);
-
ExtUI::axis_t axis;
switch (var.VP) {
default: return;
@@ -930,20 +881,14 @@ void DGUSScreenHandlerMKS::HandleStepPerMMChanged(DGUS_VP_Variable &var, void *v
case VP_Z_STEP_PER_MM: axis = ExtUI::axis_t::Z; break;
}
ExtUI::setAxisSteps_per_mm(value, axis);
- DEBUG_ECHOLNPGM("value_set:", ExtUI::getAxisSteps_per_mm(axis));
settings.save();
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
void DGUSScreenHandlerMKS::HandleStepPerMMExtruderChanged(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleStepPerMMExtruderChanged");
-
const uint16_t value_raw = BE16_P(val_ptr);
const float value = (float)value_raw;
- DEBUG_ECHOLNPGM("value_raw:", value_raw);
- DEBUG_ECHOLNPGM("value:", value);
-
ExtUI::extruder_t extruder;
switch (var.VP) {
default: return;
@@ -955,20 +900,14 @@ void DGUSScreenHandlerMKS::HandleStepPerMMExtruderChanged(DGUS_VP_Variable &var,
#endif
}
ExtUI::setAxisSteps_per_mm(value, extruder);
- DEBUG_ECHOLNPGM("value_set:", ExtUI::getAxisSteps_per_mm(extruder));
settings.save();
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
void DGUSScreenHandlerMKS::HandleMaxSpeedChange(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleMaxSpeedChange");
-
const uint16_t value_raw = BE16_P(val_ptr);
const float value = (float)value_raw;
- DEBUG_ECHOLNPGM("value_raw:", value_raw);
- DEBUG_ECHOLNPGM("value:", value);
-
ExtUI::axis_t axis;
switch (var.VP) {
case VP_X_MAX_SPEED: axis = ExtUI::axis_t::X; break;
@@ -977,20 +916,14 @@ void DGUSScreenHandlerMKS::HandleMaxSpeedChange(DGUS_VP_Variable &var, void *val
default: return;
}
ExtUI::setAxisMaxFeedrate_mm_s(value, axis);
- DEBUG_ECHOLNPGM("value_set:", ExtUI::getAxisMaxFeedrate_mm_s(axis));
settings.save();
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
void DGUSScreenHandlerMKS::HandleExtruderMaxSpeedChange(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleExtruderMaxSpeedChange");
-
const uint16_t value_raw = BE16_P(val_ptr);
const float value = (float)value_raw;
- DEBUG_ECHOLNPGM("value_raw:", value_raw);
- DEBUG_ECHOLNPGM("value:", value);
-
ExtUI::extruder_t extruder;
switch (var.VP) {
default: return;
@@ -1002,20 +935,14 @@ void DGUSScreenHandlerMKS::HandleExtruderMaxSpeedChange(DGUS_VP_Variable &var, v
case VP_E1_MAX_SPEED: extruder = ExtUI::extruder_t::E1; break;
}
ExtUI::setAxisMaxFeedrate_mm_s(value, extruder);
- DEBUG_ECHOLNPGM("value_set:", ExtUI::getAxisMaxFeedrate_mm_s(extruder));
settings.save();
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
void DGUSScreenHandlerMKS::HandleMaxAccChange(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleMaxAccChange");
-
const uint16_t value_raw = BE16_P(val_ptr);
const float value = (float)value_raw;
- DEBUG_ECHOLNPGM("value_raw:", value_raw);
- DEBUG_ECHOLNPGM("value:", value);
-
ExtUI::axis_t axis;
switch (var.VP) {
default: return;
@@ -1024,16 +951,12 @@ void DGUSScreenHandlerMKS::HandleMaxAccChange(DGUS_VP_Variable &var, void *val_p
case VP_Z_ACC_MAX_SPEED: axis = ExtUI::axis_t::Z; break;
}
ExtUI::setAxisMaxAcceleration_mm_s2(value, axis);
- DEBUG_ECHOLNPGM("value_set:", ExtUI::getAxisMaxAcceleration_mm_s2(axis));
settings.save();
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
void DGUSScreenHandlerMKS::HandleExtruderAccChange(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleExtruderAccChange");
-
uint16_t value_raw = BE16_P(val_ptr);
- DEBUG_ECHOLNPGM("value_raw:", value_raw);
float value = (float)value_raw;
ExtUI::extruder_t extruder;
switch (var.VP) {
@@ -1045,9 +968,7 @@ void DGUSScreenHandlerMKS::HandleExtruderAccChange(DGUS_VP_Variable &var, void *
case VP_E1_ACC_MAX_SPEED: extruder = ExtUI::extruder_t::E1; settings.load(); break;
#endif
}
- DEBUG_ECHOLNPGM("value:", value);
ExtUI::setAxisMaxAcceleration_mm_s2(value, extruder);
- DEBUG_ECHOLNPGM("value_set:", ExtUI::getAxisMaxAcceleration_mm_s2(extruder));
settings.save();
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
@@ -1087,9 +1008,7 @@ void DGUSScreenHandlerMKS::HandleAccChange(DGUS_VP_Variable &var, void *val_ptr)
#if HAS_PID_HEATING
void DGUSScreenHandler::HandleTemperaturePIDChanged(DGUS_VP_Variable &var, void *val_ptr) {
const uint16_t rawvalue = BE16_P(val_ptr);
- DEBUG_ECHOLNPGM("V1:", rawvalue);
- const float value = 1.0f * rawvalue;
- DEBUG_ECHOLNPGM("V2:", value);
+ const float value = float(rawvalue);
float newvalue = 0;
switch (var.VP) {
@@ -1111,7 +1030,6 @@ void DGUSScreenHandlerMKS::HandleAccChange(DGUS_VP_Variable &var, void *val_ptr)
#endif
}
- DEBUG_ECHOLNPGM("V3:", newvalue);
*(float *)var.memadr = newvalue;
settings.save();
@@ -1121,7 +1039,6 @@ void DGUSScreenHandlerMKS::HandleAccChange(DGUS_VP_Variable &var, void *val_ptr)
#if ENABLED(BABYSTEPPING)
void DGUSScreenHandler::HandleLiveAdjustZ(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleLiveAdjustZ");
const float step = ZOffset_distance;
const uint16_t flag = BE16_P(val_ptr);
@@ -1166,7 +1083,6 @@ void DGUSScreenHandlerMKS::GetManualFilament(DGUS_VP_Variable &var, void *val_pt
const uint16_t value_len = BE16_P(val_ptr);
const float value = (float)value_len;
- DEBUG_ECHOLNPGM("GetManualFilament:", value);
distanceFilament = value;
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
@@ -1175,7 +1091,6 @@ void DGUSScreenHandlerMKS::GetManualFilament(DGUS_VP_Variable &var, void *val_pt
void DGUSScreenHandlerMKS::GetManualFilamentSpeed(DGUS_VP_Variable &var, void *val_ptr) {
const uint16_t value_len = BE16_P(val_ptr);
filamentSpeed_mm_s = value_len;
- DEBUG_ECHOLNPGM("GetManualFilamentSpeed:", value_len);
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
@@ -1264,20 +1179,16 @@ void GcodeSuite::M1002() {
}
void DGUSScreenHandlerMKS::FilamentLoad(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("FilamentLoad");
FilamentLoadUnload(var, val_ptr, 1);
}
void DGUSScreenHandlerMKS::FilamentUnLoad(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("FilamentUnLoad");
FilamentLoadUnload(var, val_ptr, -1);
}
#if ENABLED(DGUS_FILAMENT_LOADUNLOAD)
void DGUSScreenHandler::HandleFilamentOption(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleFilamentOption");
-
uint8_t e_temp = 0;
filament_data.heated = false;
uint16_t preheat_option = BE16_P(val_ptr);
@@ -1345,7 +1256,6 @@ void DGUSScreenHandlerMKS::FilamentUnLoad(DGUS_VP_Variable &var, void *val_ptr)
}
void DGUSScreenHandler::HandleFilamentLoadUnload(DGUS_VP_Variable &var) {
- DEBUG_ECHOLNPGM("HandleFilamentLoadUnload");
if (filament_data.action <= 0) return;
// If we close to the target temperature, we can start load or unload the filament
diff --git a/Marlin/src/lcd/extui/dgus/origin/DGUSDisplayDef.h b/Marlin/src/lcd/extui/dgus/origin/DGUSDisplayDef.h
index f5fb986bde..d529b0adfe 100644
--- a/Marlin/src/lcd/extui/dgus/origin/DGUSDisplayDef.h
+++ b/Marlin/src/lcd/extui/dgus/origin/DGUSDisplayDef.h
@@ -247,7 +247,7 @@ constexpr uint16_t VP_BED_STATUS = 0x331C;
constexpr uint16_t VP_MOVE_OPTION = 0x3400;
// Step per mm
-constexpr uint16_t VP_X_STEP_PER_MM = 0x3600; // at the moment , 2 byte unsigned int , 0~1638.4
+constexpr uint16_t VP_X_STEP_PER_MM = 0x3600; // at the moment , uint16_t , 0~1638.4
//constexpr uint16_t VP_X2_STEP_PER_MM = 0x3602;
constexpr uint16_t VP_Y_STEP_PER_MM = 0x3604;
//constexpr uint16_t VP_Y2_STEP_PER_MM = 0x3606;
@@ -261,7 +261,7 @@ constexpr uint16_t VP_E0_STEP_PER_MM = 0x3610;
//constexpr uint16_t VP_E5_STEP_PER_MM = 0x361A;
// PIDs
-constexpr uint16_t VP_E0_PID_P = 0x3700; // at the moment , 2 byte unsigned int , 0~1638.4
+constexpr uint16_t VP_E0_PID_P = 0x3700; // at the moment , uint16_t , 0~1638.4
constexpr uint16_t VP_E0_PID_I = 0x3702;
constexpr uint16_t VP_E0_PID_D = 0x3704;
constexpr uint16_t VP_BED_PID_P = 0x3710;
diff --git a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp
index 55be3777e1..22fdd80fc9 100644
--- a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp
@@ -134,8 +134,6 @@ void DGUSScreenHandler::ScreenChangeHook(DGUS_VP_Variable &var, void *val_ptr) {
// meaning "return to previous screen"
DGUSLCD_Screens target = (DGUSLCD_Screens)tmp[1];
- DEBUG_ECHOLNPGM("\n DEBUG target", target);
-
if (target == DGUSLCD_SCREEN_POPUP) {
// Special handling for popup is to return to previous menu
if (current_screen == DGUSLCD_SCREEN_POPUP && confirm_action_cb) confirm_action_cb();
@@ -151,8 +149,6 @@ void DGUSScreenHandler::ScreenChangeHook(DGUS_VP_Variable &var, void *val_ptr) {
}
void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleManualMove");
-
int16_t movevalue = swap16(*(uint16_t*)val_ptr);
#if ENABLED(DGUS_UI_MOVE_DIS_OPTION)
if (movevalue) {
@@ -161,7 +157,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
}
#endif
char axiscode;
- unsigned int speed = 1500; // FIXME: get default feedrate for manual moves, don't hardcode.
+ uint16_t speed = _mf[X_AXIS]; // Default feedrate for manual moves
switch (var.VP) {
default: return;
@@ -171,16 +167,21 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
if (!ExtUI::canMove(ExtUI::axis_t::X)) goto cannotmove;
break;
- case VP_MOVE_Y:
- axiscode = 'Y';
- if (!ExtUI::canMove(ExtUI::axis_t::Y)) goto cannotmove;
- break;
+ #if HAS_Y_AXIS
+ case VP_MOVE_Y:
+ axiscode = 'Y';
+ speed = _mf[Y_AXIS];
+ if (!ExtUI::canMove(ExtUI::axis_t::Y)) goto cannotmove;
+ break;
+ #endif
- case VP_MOVE_Z:
- axiscode = 'Z';
- speed = 300; // default to 5mm/s
- if (!ExtUI::canMove(ExtUI::axis_t::Z)) goto cannotmove;
- break;
+ #if HAS_Z_AXIS
+ case VP_MOVE_Z:
+ axiscode = 'Z';
+ speed = _mf[Z_AXIS];
+ if (!ExtUI::canMove(ExtUI::axis_t::Z)) goto cannotmove;
+ break;
+ #endif
case VP_HOME_ALL: // only used for homing
axiscode = '\0';
@@ -190,63 +191,42 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
if (!movevalue) {
// homing
- DEBUG_ECHOPGM(" homing ", AS_CHAR(axiscode));
char buf[6] = "G28 X";
buf[4] = axiscode;
- //DEBUG_ECHOPGM(" ", buf);
queue.enqueue_one_now(buf);
- //DEBUG_ECHOLNPGM(" ✓");
ForceCompleteUpdate();
return;
}
else {
// movement
- DEBUG_ECHOPGM(" move ", AS_CHAR(axiscode));
- bool old_relative_mode = relative_mode;
- if (!relative_mode) {
- //DEBUG_ECHOPGM(" G91");
- queue.enqueue_now(F("G91"));
- //DEBUG_ECHOPGM(" ✓ ");
- }
+ const bool old_relative_mode = relative_mode;
+ if (!relative_mode) queue.enqueue_now(F("G91"));
char buf[32]; // G1 X9999.99 F12345
- unsigned int backup_speed = MMS_TO_MMM(feedrate_mm_s);
+ const uint16_t backup_speed = MMS_TO_MMM(feedrate_mm_s);
char sign[] = "\0";
int16_t value = movevalue / 100;
if (movevalue < 0) { value = -value; sign[0] = '-'; }
int16_t fraction = ABS(movevalue) % 100;
snprintf_P(buf, 32, PSTR("G0 %c%s%d.%02d F%d"), axiscode, sign, value, fraction, speed);
- //DEBUG_ECHOPGM(" ", buf);
queue.enqueue_one_now(buf);
- //DEBUG_ECHOLNPGM(" ✓ ");
if (backup_speed != speed) {
snprintf_P(buf, 32, PSTR("G0 F%d"), backup_speed);
queue.enqueue_one_now(buf);
- //DEBUG_ECHOPGM(" ", buf);
- }
- // while (!enqueue_and_echo_command(buf)) idle();
- //DEBUG_ECHOLNPGM(" ✓ ");
- if (!old_relative_mode) {
- //DEBUG_ECHOPGM("G90");
- queue.enqueue_now(F("G90"));
- //DEBUG_ECHOPGM(" ✓ ");
}
+ //while (!enqueue_and_echo_command(buf)) idle();
+ if (!old_relative_mode) queue.enqueue_now(F("G90"));
}
ForceCompleteUpdate();
- DEBUG_ECHOLNPGM("manmv done.");
- return;
cannotmove:
- DEBUG_ECHOLNPGM(" cannot move ", AS_CHAR(axiscode));
return;
}
#if HAS_PID_HEATING
void DGUSScreenHandler::HandleTemperaturePIDChanged(DGUS_VP_Variable &var, void *val_ptr) {
uint16_t rawvalue = swap16(*(uint16_t*)val_ptr);
- DEBUG_ECHOLNPGM("V1:", rawvalue);
float value = (float)rawvalue / 10;
- DEBUG_ECHOLNPGM("V2:", value);
float newvalue = 0;
switch (var.VP) {
@@ -268,7 +248,6 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
#endif
}
- DEBUG_ECHOLNPGM("V3:", newvalue);
*(float *)var.memadr = newvalue;
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
@@ -277,7 +256,6 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
#if ENABLED(BABYSTEPPING)
void DGUSScreenHandler::HandleLiveAdjustZ(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleLiveAdjustZ");
int16_t flag = swap16(*(uint16_t*)val_ptr),
steps = flag ? -20 : 20;
ExtUI::smartAdjustAxis_steps(steps, ExtUI::axis_t::Z, true);
@@ -288,8 +266,6 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
#if ENABLED(DGUS_FILAMENT_LOADUNLOAD)
void DGUSScreenHandler::HandleFilamentOption(DGUS_VP_Variable &var, void *val_ptr) {
- DEBUG_ECHOLNPGM("HandleFilamentOption");
-
uint8_t e_temp = 0;
filament_data.heated = false;
uint16_t preheat_option = swap16(*(uint16_t*)val_ptr);
@@ -360,7 +336,6 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
}
void DGUSScreenHandler::HandleFilamentLoadUnload(DGUS_VP_Variable &var) {
- DEBUG_ECHOLNPGM("HandleFilamentLoadUnload");
if (filament_data.action <= 0) return;
// If we close to the target temperature, we can start load or unload the filament
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp
index df22407c0f..5bbeb0d7cc 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp
@@ -164,7 +164,6 @@ void DGUSDisplay::ReadVersions() {
}
void DGUSDisplay::SwitchScreen(DGUS_Screen screen) {
- DEBUG_ECHOLNPGM("SwitchScreen ", (uint8_t)screen);
const uint8_t command[] = { 0x5A, 0x01, 0x00, (uint8_t)screen };
Write(0x84, command, sizeof(command));
}
@@ -172,14 +171,11 @@ void DGUSDisplay::SwitchScreen(DGUS_Screen screen) {
void DGUSDisplay::PlaySound(uint8_t start, uint8_t len, uint8_t volume) {
if (volume == 0) volume = DGUSDisplay::volume;
if (volume == 0) return;
- DEBUG_ECHOLNPGM("PlaySound ", start, ":", len, "\nVolume ", volume);
const uint8_t command[] = { start, len, volume, 0x00 };
Write(0xA0, command, sizeof(command));
}
void DGUSDisplay::EnableControl(DGUS_Screen screen, DGUS_ControlType type, DGUS_Control control) {
- DEBUG_ECHOLNPGM("EnableControl ", (uint8_t)control, "\nScreen ", (uint8_t)screen, "\nType ", (uint8_t)type);
-
const uint8_t command[] = { 0x5A, 0xA5, 0x00, (uint8_t)screen, (uint8_t)control, type, 0x00, 0x01 };
Write(0xB0, command, sizeof(command));
@@ -188,8 +184,6 @@ void DGUSDisplay::EnableControl(DGUS_Screen screen, DGUS_ControlType type, DGUS_
}
void DGUSDisplay::DisableControl(DGUS_Screen screen, DGUS_ControlType type, DGUS_Control control) {
- DEBUG_ECHOLNPGM("DisableControl ", (uint8_t)control, "\nScreen ", (uint8_t)screen, "\nType ", (uint8_t)type);
-
const uint8_t command[] = { 0x5A, 0xA5, 0x00, (uint8_t)screen, (uint8_t)control, type, 0x00, 0x00 };
Write(0xB0, command, sizeof(command));
@@ -208,14 +202,12 @@ uint8_t DGUSDisplay::GetVolume() {
void DGUSDisplay::SetBrightness(uint8_t new_brightness) {
brightness = constrain(new_brightness, 0, 100);
new_brightness = map_precise(brightness, 0, 100, 5, 100);
- DEBUG_ECHOLNPGM("SetBrightness ", new_brightness);
const uint8_t command[] = { new_brightness, new_brightness };
Write(0x82, command, sizeof(command));
}
void DGUSDisplay::SetVolume(uint8_t new_volume) {
volume = map_precise(constrain(new_volume, 0, 100), 0, 100, 0, 255);
- DEBUG_ECHOLNPGM("SetVolume ", volume);
const uint8_t command[] = { volume, 0x00 };
Write(0xA1, command, sizeof(command));
}
@@ -226,7 +218,6 @@ void DGUSDisplay::ProcessRx() {
if (!LCD_SERIAL.available() && LCD_SERIAL.buffer_overruns()) {
// Overrun, but reset the flag only when the buffer is empty
// We want to extract as many as valid datagrams possible...
- DEBUG_ECHOPGM("OVFL");
rx_datagram_state = DGUS_IDLE;
//LCD_SERIAL.reset_rx_overun();
LCD_SERIAL.flush();
@@ -239,20 +230,16 @@ void DGUSDisplay::ProcessRx() {
case DGUS_IDLE: // Waiting for the first header byte
receivedbyte = LCD_SERIAL.read();
- DEBUG_ECHOPGM("< ", receivedbyte);
if (DGUS_HEADER1 == receivedbyte) rx_datagram_state = DGUS_HEADER1_SEEN;
break;
case DGUS_HEADER1_SEEN: // Waiting for the second header byte
receivedbyte = LCD_SERIAL.read();
- DEBUG_ECHOPGM(" ", receivedbyte);
rx_datagram_state = (DGUS_HEADER2 == receivedbyte) ? DGUS_HEADER2_SEEN : DGUS_IDLE;
break;
case DGUS_HEADER2_SEEN: // Waiting for the length byte
rx_datagram_len = LCD_SERIAL.read();
- DEBUG_ECHOPGM(" (", rx_datagram_len, ") ");
-
// Telegram min len is 3 (command and one word of payload)
rx_datagram_state = WITHIN(rx_datagram_len, 3, DGUS_RX_BUFFER_SIZE) ? DGUS_WAIT_TELEGRAM : DGUS_IDLE;
break;
@@ -262,22 +249,16 @@ void DGUSDisplay::ProcessRx() {
initialized = true; // We've talked to it, so we defined it as initialized.
uint8_t command = LCD_SERIAL.read();
-
- DEBUG_ECHOPGM("# ", command);
-
uint8_t readlen = rx_datagram_len - 1; // command is part of len.
unsigned char tmp[rx_datagram_len - 1];
unsigned char *ptmp = tmp;
while (readlen--) {
receivedbyte = LCD_SERIAL.read();
- DEBUG_ECHOPGM(" ", receivedbyte);
*ptmp++ = receivedbyte;
}
- DEBUG_ECHOPGM(" # ");
// mostly we'll get this: 5A A5 03 82 4F 4B -- ACK on 0x82, so discard it.
if (command == DGUS_WRITEVAR && 'O' == tmp[0] && 'K' == tmp[1]) {
- DEBUG_ECHOLNPGM(">");
rx_datagram_state = DGUS_IDLE;
break;
}
@@ -292,10 +273,7 @@ void DGUSDisplay::ProcessRx() {
if (command == DGUS_READVAR) {
const uint16_t addr = tmp[0] << 8 | tmp[1];
const uint8_t dlen = tmp[2] << 1; // Convert to Bytes. (Display works with words)
- DEBUG_ECHOPGM("addr=", addr, " dlen=", dlen, "> ");
-
if (addr == DGUS_VERSION && dlen == 2) {
- DEBUG_ECHOLNPGM("VERSIONS");
gui_version = tmp[3];
os_version = tmp[4];
rx_datagram_state = DGUS_IDLE;
@@ -304,13 +282,11 @@ void DGUSDisplay::ProcessRx() {
DGUS_VP vp;
if (!DGUS_PopulateVP((DGUS_Addr)addr, &vp)) {
- DEBUG_ECHOLNPGM("VP not found");
rx_datagram_state = DGUS_IDLE;
break;
}
if (!vp.rx_handler) {
- DEBUG_ECHOLNPGM("VP found, no handler.");
rx_datagram_state = DGUS_IDLE;
break;
}
@@ -346,7 +322,6 @@ void DGUSDisplay::ProcessRx() {
}
if (dlen != vp.size) {
- DEBUG_ECHOLNPGM("VP found, size mismatch.");
rx_datagram_state = DGUS_IDLE;
break;
}
@@ -358,7 +333,6 @@ void DGUSDisplay::ProcessRx() {
break;
}
- DEBUG_ECHOLNPGM(">");
rx_datagram_state = DGUS_IDLE;
break;
}
@@ -402,7 +376,6 @@ bool DGUS_PopulateVP(const DGUS_Addr addr, DGUS_VP * const buffer) {
return true;
}
} while (++ret);
- DEBUG_ECHOLNPGM("VP not found: ", (uint16_t)addr);
return false;
}
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp
index 3d0896a67c..a7295f90fe 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp
@@ -473,19 +473,14 @@ void DGUSScreenHandler::MoveToScreen(DGUS_Screen screen, bool abort_wait) {
if (!CallScreenSetup(screen)) return;
- if (!SendScreenVPData(screen, true)) {
- DEBUG_ECHOLNPGM("SendScreenVPData failed");
- return;
- }
+ if (!SendScreenVPData(screen, true)) return;
current_screen = screen;
dgus_display.SwitchScreen(current_screen);
}
bool DGUSScreenHandler::SendScreenVPData(DGUS_Screen screen, bool complete_update) {
- if (complete_update) {
- full_update = false;
- }
+ if (complete_update) full_update = false;
const DGUS_Addr *list = FindScreenAddrList(screen);
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp
index 47603052e9..39b3f57e96 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp
@@ -37,7 +37,7 @@
#endif
#if ENABLED(SDSUPPORT)
- void DGUSTxHandler::SetFileControlState(int file, bool state) {
+ void DGUSTxHandler::SetFileControlState(int16_t file, bool state) {
DGUS_Control control;
switch (file) {
@@ -75,17 +75,17 @@
// Batch send
uint16_t data[DGUS_FILE_COUNT];
- for (int i = 0; i < DGUS_FILE_COUNT; i++) {
+ for (int16_t i = 0; i < DGUS_FILE_COUNT; i++) {
if (!dgus_screen_handler.filelist.seek(dgus_screen_handler.filelist_offset + i)) {
- data[i] = Swap16((uint16_t)DGUS_Data::SDType::NONE);
+ data[i] = Swap16(DGUS_Data::SDType::NONE);
SetFileControlState(i, false);
continue;
}
data[i] = dgus_screen_handler.filelist.isDir() ?
- Swap16((uint16_t)DGUS_Data::SDType::DIRECTORY)
- : Swap16((uint16_t)DGUS_Data::SDType::FILE);
+ Swap16(DGUS_Data::SDType::DIRECTORY)
+ : Swap16(DGUS_Data::SDType::FILE);
SetFileControlState(i, true);
}
@@ -287,7 +287,7 @@ void DGUSTxHandler::TempMax(DGUS_VP &vp) {
void DGUSTxHandler::StepperStatus(DGUS_VP &vp) {
const bool motor_on = stepper.axis_enabled.bits & (_BV(NUM_AXES) - 1);
- dgus_display.Write((uint16_t)vp.addr, Swap16(uint16_t(motor_on ? DGUS_Data::Status::ENABLED : DGUS_Data::Status::DISABLED)));
+ dgus_display.Write((uint16_t)vp.addr, Swap16(motor_on ? DGUS_Data::Status::ENABLED : DGUS_Data::Status::DISABLED));
}
void DGUSTxHandler::StepIcons(DGUS_VP &vp) {
@@ -340,7 +340,7 @@ void DGUSTxHandler::ABLGrid(DGUS_VP &vp) {
xy_uint8_t point;
int16_t fixed;
- for (int i = 0; i < DGUS_LEVEL_GRID_SIZE; i++) {
+ for (int16_t i = 0; i < DGUS_LEVEL_GRID_SIZE; i++) {
point.x = i % (GRID_MAX_POINTS_X);
point.y = i / (GRID_MAX_POINTS_X);
fixed = dgus_display.ToFixedPoint(ExtUI::getMeshPoint(point));
@@ -385,13 +385,13 @@ void DGUSTxHandler::BLTouch(DGUS_VP &vp) {
DGUSDisplay::RETURN_KEY_CODE,
DGUS_Control::EXTRA2);
- dgus_display.Write((uint16_t)vp.addr, Swap16((uint16_t)DGUS_Data::Status::ENABLED));
+ dgus_display.Write((uint16_t)vp.addr, Swap16(DGUS_Data::Status::ENABLED));
#else
dgus_display.DisableControl(DGUS_Screen::SETTINGS_MENU2,
DGUSDisplay::RETURN_KEY_CODE,
DGUS_Control::EXTRA2);
- dgus_display.Write((uint16_t)vp.addr, Swap16((uint16_t)DGUS_Data::Status::DISABLED));
+ dgus_display.Write((uint16_t)vp.addr, Swap16(DGUS_Data::Status::DISABLED));
#endif
}
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h
index 7d1b46773b..aad73dd5d6 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h
@@ -24,12 +24,12 @@
#include "DGUSDisplay.h"
#include "definition/DGUS_VP.h"
-#define Swap16(val) ((uint16_t)(((uint16_t)(val) >> 8) | ((uint16_t)(val) << 8)))
+#define Swap16(val) (uint16_t((uint16_t(val) >> 8) | (uint16_t(val) << 8)))
namespace DGUSTxHandler {
#if ENABLED(SDSUPPORT)
- void SetFileControlState(int, bool);
+ void SetFileControlState(int16_t, bool);
void FileType(DGUS_VP &);
void FileName(DGUS_VP &);
void ScrollIcons(DGUS_VP &);
@@ -85,18 +85,18 @@ namespace DGUSTxHandler {
switch (vp.size) {
default: return;
case 1: {
- const uint8_t data = (uint8_t)(*(T*)vp.extra);
- dgus_display.Write((uint16_t)vp.addr, data);
+ const uint8_t data = uint8_t(*(T*)vp.extra);
+ dgus_display.Write(uint16_t(vp.addr), data);
break;
}
case 2: {
- const uint16_t data = (uint16_t)(*(T*)vp.extra);
- dgus_display.Write((uint16_t)vp.addr, Swap16(data));
+ const uint16_t data = uint16_t(*(T*)vp.extra);
+ dgus_display.Write(uint16_t(vp.addr), Swap16(data));
break;
}
case 4: {
- const uint32_t data = (uint32_t)(*(T*)vp.extra);
- dgus_display.Write((uint16_t)vp.addr, dgus_display.SwapBytes(data));
+ const uint32_t data = uint32_t(*(T*)vp.extra);
+ dgus_display.Write(uint16_t(vp.addr), dgus_display.SwapBytes(data));
break;
}
}
@@ -109,17 +109,17 @@ namespace DGUSTxHandler {
default: return;
case 1: {
const uint8_t data = dgus_display.ToFixedPoint(*(T*)vp.extra);
- dgus_display.Write((uint16_t)vp.addr, data);
+ dgus_display.Write(uint16_t(vp.addr), data);
break;
}
case 2: {
const uint16_t data = dgus_display.ToFixedPoint(*(T*)vp.extra);
- dgus_display.Write((uint16_t)vp.addr, Swap16(data));
+ dgus_display.Write(uint16_t(vp.addr), Swap16(data));
break;
}
case 4: {
const uint32_t data = dgus_display.ToFixedPoint(*(T*)vp.extra);
- dgus_display.Write((uint16_t)vp.addr, dgus_display.SwapBytes(data));
+ dgus_display.Write(uint16_t(vp.addr), dgus_display.SwapBytes(data));
break;
}
}
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h
index 39e97156d0..3fd6d16f5b 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h
+++ b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h
@@ -21,153 +21,153 @@
*/
#pragma once
-constexpr uint8_t DGUS_LINE_LEN = 32;
-constexpr uint8_t DGUS_STATUS_LEN = 32;
-constexpr uint8_t DGUS_FILE_COUNT = 5;
-constexpr uint8_t DGUS_FILENAME_LEN = 32;
-constexpr uint8_t DGUS_ELLAPSED_LEN = 15;
-constexpr uint8_t DGUS_LEVEL_GRID_SIZE = 25;
-constexpr uint8_t DGUS_MACHINE_LEN = 24;
-constexpr uint8_t DGUS_BUILDVOLUME_LEN = 24;
-constexpr uint8_t DGUS_VERSION_LEN = 16;
-constexpr uint8_t DGUS_PRINTTIME_LEN = 24;
-constexpr uint8_t DGUS_LONGESTPRINT_LEN = 24;
-constexpr uint8_t DGUS_FILAMENTUSED_LEN = 24;
-constexpr uint8_t DGUS_GCODE_LEN = 32;
+#define DGUS_LINE_LEN 32
+#define DGUS_STATUS_LEN 32
+#define DGUS_FILE_COUNT 5
+#define DGUS_FILENAME_LEN 32
+#define DGUS_ELAPSED_LEN 15
+#define DGUS_LEVEL_GRID_SIZE 25
+#define DGUS_MACHINE_LEN 24
+#define DGUS_BUILDVOLUME_LEN 24
+#define DGUS_VERSION_LEN 16
+#define DGUS_PRINTTIME_LEN 24
+#define DGUS_LONGESTPRINT_LEN 24
+#define DGUS_FILAMENTUSED_LEN 24
+#define DGUS_GCODE_LEN 32
enum class DGUS_Addr : uint16_t {
- MESSAGE_Line1 = 0x1100, // 0x1100 - 0x111F
- MESSAGE_Line2 = 0x1120, // 0x1120 - 0x113F
- MESSAGE_Line3 = 0x1140, // 0x1140 - 0x115F
- MESSAGE_Line4 = 0x1160, // 0x1160 - 0x117F
+ MESSAGE_Line1 = 0x1100, // 0x1100 - 0x111F
+ MESSAGE_Line2 = 0x1120, // 0x1120 - 0x113F
+ MESSAGE_Line3 = 0x1140, // 0x1140 - 0x115F
+ MESSAGE_Line4 = 0x1160, // 0x1160 - 0x117F
// READ-ONLY VARIABLES
- SCREENCHANGE = 0x2000, // Screen change request. Data contains target screen in low byte.
- SCREENCHANGE_SD = 0x2001, // Only change if SD card present.
- SCREENCHANGE_Idle = 0x2002, // Only change if not printing.
- SCREENCHANGE_Printing = 0x2003, // Only change if printing.
- SD_SelectFile = 0x2004, // Data: file index (0-4)
- SD_Scroll = 0x2005, // Data: DGUS_Data::Scroll
- SD_Print = 0x2006,
- STATUS_Abort = 0x2007, // Popup / Data: DGUS_Data::Popup
- STATUS_Pause = 0x2008, // Popup / Data: DGUS_Data::Popup
- STATUS_Resume = 0x2009, // Popup / Data: DGUS_Data::Popup
- ADJUST_SetFeedrate = 0x200A, // Type: Integer (16 bits signed)
- ADJUST_SetFlowrate_CUR = 0x200B, // Type: Integer (16 bits signed)
+ SCREENCHANGE = 0x2000, // Screen change request. Data contains target screen in low byte.
+ SCREENCHANGE_SD = 0x2001, // Only change if SD card present.
+ SCREENCHANGE_Idle = 0x2002, // Only change if not printing.
+ SCREENCHANGE_Printing = 0x2003, // Only change if printing.
+ SD_SelectFile = 0x2004, // Data: file index (0-4)
+ SD_Scroll = 0x2005, // Data: DGUS_Data::Scroll
+ SD_Print = 0x2006,
+ STATUS_Abort = 0x2007, // Popup / Data: DGUS_Data::Popup
+ STATUS_Pause = 0x2008, // Popup / Data: DGUS_Data::Popup
+ STATUS_Resume = 0x2009, // Popup / Data: DGUS_Data::Popup
+ ADJUST_SetFeedrate = 0x200A, // Type: Integer (16 bits signed)
+ ADJUST_SetFlowrate_CUR = 0x200B, // Type: Integer (16 bits signed)
#if HAS_MULTI_EXTRUDER
- ADJUST_SetFlowrate_E0 = 0x200C, // Type: Integer (16 bits signed)
- ADJUST_SetFlowrate_E1 = 0x200D, // Type: Integer (16 bits signed)
+ ADJUST_SetFlowrate_E0 = 0x200C, // Type: Integer (16 bits signed)
+ ADJUST_SetFlowrate_E1 = 0x200D, // Type: Integer (16 bits signed)
#endif
- ADJUST_SetBabystep = 0x200E, // Type: Fixed point, 2 decimals (16 bits signed)
- ADJUST_Babystep = 0x200F, // Data: DGUS_Data::Adjust
- TEMP_Preset = 0x2010, // Popup / Data: DGUS_Data::TempPreset
- TEMP_SetTarget_Bed = 0x2011, // Type: Integer (16 bits signed)
- TEMP_SetTarget_H0 = 0x2012, // Type: Integer (16 bits signed)
+ ADJUST_SetBabystep = 0x200E, // Type: Fixed point, 2 decimals (16 bits signed)
+ ADJUST_Babystep = 0x200F, // Data: DGUS_Data::Adjust
+ TEMP_Preset = 0x2010, // Popup / Data: DGUS_Data::TempPreset
+ TEMP_SetTarget_Bed = 0x2011, // Type: Integer (16 bits signed)
+ TEMP_SetTarget_H0 = 0x2012, // Type: Integer (16 bits signed)
#if HAS_MULTI_HOTEND
- TEMP_SetTarget_H1 = 0x2013, // Type: Integer (16 bits signed)
+ TEMP_SetTarget_H1 = 0x2013, // Type: Integer (16 bits signed)
#endif
- TEMP_Cool = 0x2014, // Data: DGUS_Data::Heater
- STEPPER_Control = 0x2015, // Popup / Data: DGUS_Data::Control
- LEVEL_OFFSET_Set = 0x2016, // Type: Fixed point, 2 decimals (16 bits signed)
- LEVEL_OFFSET_Step = 0x2017, // Data: DGUS_Data::Adjust
- LEVEL_OFFSET_SetStep = 0x2018, // Data: DGUS_Data::StepSize
- LEVEL_MANUAL_Point = 0x2019, // Data: point index (1-5)
- LEVEL_AUTO_Probe = 0x201A,
- LEVEL_AUTO_Disable = 0x201B,
- FILAMENT_Select = 0x201C, // Data: DGUS_Data::Extruder
- FILAMENT_SetLength = 0x201D, // Type: Integer (16 bits unsigned)
- FILAMENT_Move = 0x201E, // Data: DGUS_Data::FilamentMove
- MOVE_Home = 0x201F, // Data: DGUS_Data::Axis
- MOVE_SetX = 0x2020, // Type: Fixed point, 1 decimal (16 bits signed)
- MOVE_SetY = 0x2021, // Type: Fixed point, 1 decimal (16 bits signed)
- MOVE_SetZ = 0x2022, // Type: Fixed point, 1 decimal (16 bits signed)
- MOVE_Step = 0x2023, // Data: DGUS_Data::MoveDirection
- MOVE_SetStep = 0x2024, // Data: DGUS_Data::StepSize
- GCODE_Clear = 0x2025,
- GCODE_Execute = 0x2026,
- EEPROM_Reset = 0x2027, // Popup / Data: DGUS_Data::Popup
- SETTINGS2_Extra = 0x2028, // Data: DGUS_Data::Extra
- PID_Select = 0x2029, // Data: DGUS_Data::Heater
- PID_SetTemp = 0x202A, // Type: Integer (16 bits unsigned)
- PID_Run = 0x202B,
- POWERLOSS_Abort = 0x202C, // Popup / Data: DGUS_Data::Popup
- POWERLOSS_Resume = 0x202D, // Popup / Data: DGUS_Data::Popup
- WAIT_Abort = 0x202E, // Popup / Data: DGUS_Data::Popup
- WAIT_Continue = 0x202F,
+ TEMP_Cool = 0x2014, // Data: DGUS_Data::Heater
+ STEPPER_Control = 0x2015, // Popup / Data: DGUS_Data::Control
+ LEVEL_OFFSET_Set = 0x2016, // Type: Fixed point, 2 decimals (16 bits signed)
+ LEVEL_OFFSET_Step = 0x2017, // Data: DGUS_Data::Adjust
+ LEVEL_OFFSET_SetStep = 0x2018, // Data: DGUS_Data::StepSize
+ LEVEL_MANUAL_Point = 0x2019, // Data: point index (1-5)
+ LEVEL_AUTO_Probe = 0x201A,
+ LEVEL_AUTO_Disable = 0x201B,
+ FILAMENT_Select = 0x201C, // Data: DGUS_Data::Extruder
+ FILAMENT_SetLength = 0x201D, // Type: Integer (16 bits unsigned)
+ FILAMENT_Move = 0x201E, // Data: DGUS_Data::FilamentMove
+ MOVE_Home = 0x201F, // Data: DGUS_Data::Axis
+ MOVE_SetX = 0x2020, // Type: Fixed point, 1 decimal (16 bits signed)
+ MOVE_SetY = 0x2021, // Type: Fixed point, 1 decimal (16 bits signed)
+ MOVE_SetZ = 0x2022, // Type: Fixed point, 1 decimal (16 bits signed)
+ MOVE_Step = 0x2023, // Data: DGUS_Data::MoveDirection
+ MOVE_SetStep = 0x2024, // Data: DGUS_Data::StepSize
+ GCODE_Clear = 0x2025,
+ GCODE_Execute = 0x2026,
+ EEPROM_Reset = 0x2027, // Popup / Data: DGUS_Data::Popup
+ SETTINGS2_Extra = 0x2028, // Data: DGUS_Data::Extra
+ PID_Select = 0x2029, // Data: DGUS_Data::Heater
+ PID_SetTemp = 0x202A, // Type: Integer (16 bits unsigned)
+ PID_Run = 0x202B,
+ POWERLOSS_Abort = 0x202C, // Popup / Data: DGUS_Data::Popup
+ POWERLOSS_Resume = 0x202D, // Popup / Data: DGUS_Data::Popup
+ WAIT_Abort = 0x202E, // Popup / Data: DGUS_Data::Popup
+ WAIT_Continue = 0x202F,
// WRITE-ONLY VARIABLES
- MESSAGE_Status = 0x3000, // 0x3000 - 0x301F
- SD_Type = 0x3020, // 0x3020 - 0x3024 / Data: DGUS_Data::SDType
- SD_FileName0 = 0x3025, // 0x3025 - 0x3044
- SD_FileName1 = 0x3045, // 0x3045 - 0x3064
- SD_FileName2 = 0x3065, // 0x3065 - 0x3084
- SD_FileName3 = 0x3085, // 0x3085 - 0x30A4
- SD_FileName4 = 0x30A5, // 0x30A5 - 0x30C4
- SD_ScrollIcons = 0x30C5, // Bits: DGUS_Data::ScrollIcon
- SD_SelectedFileName = 0x30C6, // 0x30C6 - 0x30E5
- STATUS_PositionZ = 0x30E6, // Type: Fixed point, 1 decimal (16 bits signed)
- STATUS_Ellapsed = 0x30E7, // 0x30E7 - 0x30F5
- STATUS_Percent = 0x30F6, // Type: Integer (16 bits unsigned)
- STATUS_Icons = 0x30F7, // Bits: DGUS_Data::StatusIcon
- ADJUST_Feedrate = 0x30F8, // Type: Integer (16 bits signed)
- ADJUST_Flowrate_CUR = 0x30F9, // Type: Integer (16 bits signed)
+ MESSAGE_Status = 0x3000, // 0x3000 - 0x301F
+ SD_Type = 0x3020, // 0x3020 - 0x3024 / Data: DGUS_Data::SDType
+ SD_FileName0 = 0x3025, // 0x3025 - 0x3044
+ SD_FileName1 = 0x3045, // 0x3045 - 0x3064
+ SD_FileName2 = 0x3065, // 0x3065 - 0x3084
+ SD_FileName3 = 0x3085, // 0x3085 - 0x30A4
+ SD_FileName4 = 0x30A5, // 0x30A5 - 0x30C4
+ SD_ScrollIcons = 0x30C5, // Bits: DGUS_Data::ScrollIcon
+ SD_SelectedFileName = 0x30C6, // 0x30C6 - 0x30E5
+ STATUS_PositionZ = 0x30E6, // Type: Fixed point, 1 decimal (16 bits signed)
+ STATUS_Ellapsed = 0x30E7, // 0x30E7 - 0x30F5
+ STATUS_Percent = 0x30F6, // Type: Integer (16 bits unsigned)
+ STATUS_Icons = 0x30F7, // Bits: DGUS_Data::StatusIcon
+ ADJUST_Feedrate = 0x30F8, // Type: Integer (16 bits signed)
+ ADJUST_Flowrate_CUR = 0x30F9, // Type: Integer (16 bits signed)
#if HAS_MULTI_EXTRUDER
- ADJUST_Flowrate_E0 = 0x30FA, // Type: Integer (16 bits signed)
- ADJUST_Flowrate_E1 = 0x30FB, // Type: Integer (16 bits signed)
+ ADJUST_Flowrate_E0 = 0x30FA, // Type: Integer (16 bits signed)
+ ADJUST_Flowrate_E1 = 0x30FB, // Type: Integer (16 bits signed)
#endif
- TEMP_Current_Bed = 0x30FC, // Type: Integer (16 bits signed)
- TEMP_Target_Bed = 0x30FD, // Type: Integer (16 bits signed)
- TEMP_Max_Bed = 0x30FE, // Type: Integer (16 bits unsigned)
- TEMP_Current_H0 = 0x30FF, // Type: Integer (16 bits signed)
- TEMP_Target_H0 = 0x3100, // Type: Integer (16 bits signed)
- TEMP_Max_H0 = 0x3101, // Type: Integer (16 bits unsigned)
+ TEMP_Current_Bed = 0x30FC, // Type: Integer (16 bits signed)
+ TEMP_Target_Bed = 0x30FD, // Type: Integer (16 bits signed)
+ TEMP_Max_Bed = 0x30FE, // Type: Integer (16 bits unsigned)
+ TEMP_Current_H0 = 0x30FF, // Type: Integer (16 bits signed)
+ TEMP_Target_H0 = 0x3100, // Type: Integer (16 bits signed)
+ TEMP_Max_H0 = 0x3101, // Type: Integer (16 bits unsigned)
#if HAS_MULTI_HOTEND
- TEMP_Current_H1 = 0x3102, // Type: Integer (16 bits signed)
- TEMP_Target_H1 = 0x3103, // Type: Integer (16 bits signed)
- TEMP_Max_H1 = 0x3104, // Type: Integer (16 bits unsigned)
+ TEMP_Current_H1 = 0x3102, // Type: Integer (16 bits signed)
+ TEMP_Target_H1 = 0x3103, // Type: Integer (16 bits signed)
+ TEMP_Max_H1 = 0x3104, // Type: Integer (16 bits unsigned)
#endif
- STEPPER_Status = 0x3105, // Data: DGUS_Data::Status
- LEVEL_OFFSET_Current = 0x3106, // Type: Fixed point, 2 decimals (16 bits signed)
- LEVEL_OFFSET_StepIcons = 0x3107, // Bits: DGUS_Data::StepIcon
- LEVEL_AUTO_DisableIcon = 0x3108, // Data: DGUS_Data::Status
- LEVEL_AUTO_Grid = 0x3109, // 0x3109 - 0x3121 / Type: Fixed point, 3 decimals (16 bits signed)
- LEVEL_PROBING_Icons1 = 0x3122, // Type: Integer (16 bits unsigned) / Each bit represents a grid point
- LEVEL_PROBING_Icons2 = 0x3123, // Type: Integer (16 bits unsigned) / Each bit represents a grid point
- FILAMENT_ExtruderIcons = 0x3124, // Data: DGUS_Data::ExtruderIcon
- FILAMENT_Length = 0x3125, // Type: Integer (16 bits unsigned)
- MOVE_CurrentX = 0x3126, // Type: Fixed point, 1 decimal (16 bits signed)
- MOVE_CurrentY = 0x3127, // Type: Fixed point, 1 decimal (16 bits signed)
- MOVE_CurrentZ = 0x3128, // Type: Fixed point, 1 decimal (16 bits signed)
- MOVE_StepIcons = 0x3129, // Bits: DGUS_Data::StepIcon
- SETTINGS2_BLTouch = 0x312A, // Data: DGUS_Data::Status
- PID_HeaterIcons = 0x312B, // Data: DGUS_Data::HeaterIcon
- PID_Temp = 0x312C, // Type: Integer (16 bits unsigned)
- PID_Kp = 0x312D, // Type: Fixed point, 2 decimals (32 bits signed)
- PID_Ki = 0x312F, // Type: Fixed point, 2 decimals (32 bits signed)
- PID_Kd = 0x3131, // Type: Fixed point, 2 decimals (32 bits signed)
- INFOS_Machine = 0x3133, // 0x3133 - 0x314A
- INFOS_BuildVolume = 0x314B, // 0x314B - 0x3162
- INFOS_Version = 0x3163, // 0x3163 - 0x3172
- INFOS_TotalPrints = 0x3173, // Type: Integer (16 bits unsigned)
- INFOS_FinishedPrints = 0x3174, // Type: Integer (16 bits unsigned)
- INFOS_PrintTime = 0x3175, // 0x3175 - 0x318C
- INFOS_LongestPrint = 0x318D, // 0x318D - 0x31A4
- INFOS_FilamentUsed = 0x31A5, // 0x31A5 - 0x31BC
- WAIT_Icons = 0x31BD, // Bits: DGUS_Data::WaitIcon
+ STEPPER_Status = 0x3105, // Data: DGUS_Data::Status
+ LEVEL_OFFSET_Current = 0x3106, // Type: Fixed point, 2 decimals (16 bits signed)
+ LEVEL_OFFSET_StepIcons = 0x3107, // Bits: DGUS_Data::StepIcon
+ LEVEL_AUTO_DisableIcon = 0x3108, // Data: DGUS_Data::Status
+ LEVEL_AUTO_Grid = 0x3109, // 0x3109 - 0x3121 / Type: Fixed point, 3 decimals (16 bits signed)
+ LEVEL_PROBING_Icons1 = 0x3122, // Type: Integer (16 bits unsigned) / Each bit represents a grid point
+ LEVEL_PROBING_Icons2 = 0x3123, // Type: Integer (16 bits unsigned) / Each bit represents a grid point
+ FILAMENT_ExtruderIcons = 0x3124, // Data: DGUS_Data::ExtruderIcon
+ FILAMENT_Length = 0x3125, // Type: Integer (16 bits unsigned)
+ MOVE_CurrentX = 0x3126, // Type: Fixed point, 1 decimal (16 bits signed)
+ MOVE_CurrentY = 0x3127, // Type: Fixed point, 1 decimal (16 bits signed)
+ MOVE_CurrentZ = 0x3128, // Type: Fixed point, 1 decimal (16 bits signed)
+ MOVE_StepIcons = 0x3129, // Bits: DGUS_Data::StepIcon
+ SETTINGS2_BLTouch = 0x312A, // Data: DGUS_Data::Status
+ PID_HeaterIcons = 0x312B, // Data: DGUS_Data::HeaterIcon
+ PID_Temp = 0x312C, // Type: Integer (16 bits unsigned)
+ PID_Kp = 0x312D, // Type: Fixed point, 2 decimals (32 bits signed)
+ PID_Ki = 0x312F, // Type: Fixed point, 2 decimals (32 bits signed)
+ PID_Kd = 0x3131, // Type: Fixed point, 2 decimals (32 bits signed)
+ INFOS_Machine = 0x3133, // 0x3133 - 0x314A
+ INFOS_BuildVolume = 0x314B, // 0x314B - 0x3162
+ INFOS_Version = 0x3163, // 0x3163 - 0x3172
+ INFOS_TotalPrints = 0x3173, // Type: Integer (16 bits unsigned)
+ INFOS_FinishedPrints = 0x3174, // Type: Integer (16 bits unsigned)
+ INFOS_PrintTime = 0x3175, // 0x3175 - 0x318C
+ INFOS_LongestPrint = 0x318D, // 0x318D - 0x31A4
+ INFOS_FilamentUsed = 0x31A5, // 0x31A5 - 0x31BC
+ WAIT_Icons = 0x31BD, // Bits: DGUS_Data::WaitIcon
// READ-WRITE VARIABLES
- FAN0_Speed = 0x4000, // Type: Integer (16 bits unsigned) / Data: fan speed as percent (0-100)
- GCODE_Data = 0x4001, // 0x4001 - 0x4020
- PID_Cycles = 0x4021, // Type: Integer (16 bits unsigned)
- VOLUME_Level = 0x4022, // Type: Integer (16 bits unsigned) / Data: volume as percent (0-100)
- BRIGHTNESS_Level = 0x4023, // Type: Integer (16 bits unsigned) / Data: brightness as percent (0-100)
+ FAN0_Speed = 0x4000, // Type: Integer (16 bits unsigned) / Data: fan speed as percent (0-100)
+ GCODE_Data = 0x4001, // 0x4001 - 0x4020
+ PID_Cycles = 0x4021, // Type: Integer (16 bits unsigned)
+ VOLUME_Level = 0x4022, // Type: Integer (16 bits unsigned) / Data: volume as percent (0-100)
+ BRIGHTNESS_Level = 0x4023, // Type: Integer (16 bits unsigned) / Data: brightness as percent (0-100)
// SPECIAL CASES
- STATUS_Percent_Complete = 0x5000, // Same as STATUS_Percent, but always 100%
- INFOS_Debug = 0x5001,
+ STATUS_Percent_Complete = 0x5000, // Same as STATUS_Percent, but always 100%
+ INFOS_Debug = 0x5001,
};
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Constants.h b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Constants.h
index 846fd15942..dda3c888fe 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Constants.h
+++ b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Constants.h
@@ -25,7 +25,9 @@
#include "DGUS_Addr.h"
-static_assert((DGUS_LEVEL_GRID_SIZE == GRID_MAX_POINTS_X * GRID_MAX_POINTS_Y), "DGUS_LEVEL_GRID_SIZE incompatible with current mesh.");
+#if DGUS_LEVEL_GRID_SIZE != GRID_MAX_POINTS
+ #error "DGUS_LEVEL_GRID_SIZE is incompatible with current mesh."
+#endif
#ifndef DGUS_DEFAULT_VOLUME
#define DGUS_DEFAULT_VOLUME 50
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 faa6a0d235..4370a06d04 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp
@@ -178,7 +178,7 @@ const struct DGUS_VP vp_list[] PROGMEM = {
nullptr,
&DGUSTxHandler::PositionZ),
VP_HELPER(DGUS_Addr::STATUS_Ellapsed,
- DGUS_ELLAPSED_LEN,
+ DGUS_ELAPSED_LEN,
VPFLAG_AUTOUPLOAD,
nullptr,
nullptr,
diff --git a/Marlin/src/lcd/extui/ia_creality/FileNavigator.cpp b/Marlin/src/lcd/extui/ia_creality/FileNavigator.cpp
index cdde3c4f6b..448d078cc4 100644
--- a/Marlin/src/lcd/extui/ia_creality/FileNavigator.cpp
+++ b/Marlin/src/lcd/extui/ia_creality/FileNavigator.cpp
@@ -111,8 +111,6 @@ void FileNavigator::getFiles(uint16_t index) {
rtscheck.RTS_SndData(10, FilenameIcon1 + j);
}
- DEBUG_ECHOLNPGM("index=", index, " currentindex=", currentindex, "folderdepth=", folderdepth);
-
if (currentindex == 0 && folderdepth > 0) { // Add a link to go up a folder
files--;
rtscheck.RTS_SndData("Up Directory", SDFILE_ADDR);
@@ -149,7 +147,6 @@ void FileNavigator::getFiles(uint16_t index) {
}
void FileNavigator::changeDIR(char *folder) {
- DEBUG_ECHOLNPGM("currentfolder: ", currentfoldername, " New: ", folder);
if (folderdepth >= MAX_FOLDER_DEPTH) return; // limit the folder depth
strcat(currentfoldername, folder);
strcat(currentfoldername, "/");
@@ -175,7 +172,6 @@ void FileNavigator::upDIR() {
pos = strchr(currentfoldername, '/');
pos[1] = '\0';
}
- DEBUG_ECHOLNPGM("depth: ", folderdepth, " currentfoldername: ", currentfoldername);
}
char* FileNavigator::getCurrentFolderName() { return currentfoldername; }
diff --git a/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp b/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
index 6742c2c010..0275902557 100644
--- a/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
+++ b/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
@@ -53,8 +53,7 @@ namespace ExtUI {
uint8_t startprogress = 0;
char waitway = 0;
- int recnum = 0;
- unsigned char Percentrecord = 0;
+ int16_t recnum = 0;
float ChangeMaterialbuf[2] = {0};
char NozzleTempStatus[3] = {0};
@@ -62,11 +61,11 @@ namespace ExtUI {
char PrinterStatusKey[2] = {0}; // PrinterStatusKey[1] value: 0 represents to keep temperature, 1 represents to heating , 2 stands for cooling , 3 stands for printing
// PrinterStatusKey[0] value: 0 reprensents 3D printer ready
- unsigned char AxisPagenum = 0; // 0 for 10mm, 1 for 1mm, 2 for 0.1mm
+ uint8_t AxisPagenum = 0; // 0 for 10mm, 1 for 1mm, 2 for 0.1mm
bool InforShowStatus = true;
bool TPShowStatus = false; // true for only opening time and percentage, false for closing time and percentage.
bool AutohomeKey = false;
- unsigned char AutoHomeIconNum;
+ uint8_t AutoHomeIconNum;
int16_t userConfValidation = 0;
uint8_t lastPauseMsgState = 0;
@@ -117,7 +116,7 @@ namespace ExtUI {
rtscheck.RTS_SndData(getActualFan_percent((fan_t)getActiveTool()), FanKeyIcon);
/***************transmit Printer information to screen*****************/
- for (int j = 0; j < 20; j++) // clean filename
+ for (int16_t j = 0; j < 20; j++) // clean filename
rtscheck.RTS_SndData(0, MacVersion + j);
char sizebuf[20] = {0};
sprintf(sizebuf, "%d X %d X %d", Y_BED_SIZE, X_BED_SIZE, Z_MAX_POS);
@@ -131,20 +130,18 @@ namespace ExtUI {
rtscheck.RTS_SndData(0, PrintscheduleIcon + 1);
/************************clean screen*******************************/
- for (int i = 0; i < MaxFileNumber; i++)
- for (int j = 0; j < 10; j++) rtscheck.RTS_SndData(0, SDFILE_ADDR + i * 10 + j);
+ for (int16_t i = 0; i < MaxFileNumber; i++)
+ for (int16_t j = 0; j < 10; j++) rtscheck.RTS_SndData(0, SDFILE_ADDR + i * 10 + j);
- for (int j = 0; j < 10; j++) {
+ for (int16_t j = 0; j < 10; j++) {
rtscheck.RTS_SndData(0, Printfilename + j); // clean screen.
rtscheck.RTS_SndData(0, Choosefilename + j); // clean filename
}
- for (int j = 0; j < 8; j++) rtscheck.RTS_SndData(0, FilenameCount + j);
- for (int j = 1; j <= MaxFileNumber; j++) {
+ for (int16_t j = 0; j < 8; j++) rtscheck.RTS_SndData(0, FilenameCount + j);
+ for (int16_t j = 1; j <= MaxFileNumber; j++) {
rtscheck.RTS_SndData(10, FilenameIcon + j);
rtscheck.RTS_SndData(10, FilenameIcon1 + j);
}
-
- DEBUG_ECHOLNPGM("==Dwin Init Complete==");
}
void onIdle() {
@@ -181,7 +178,7 @@ namespace ExtUI {
case PAUSE_MESSAGE_HEAT: ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_HEAT)); break;
case PAUSE_MESSAGE_HEATING: ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_HEATING)); break;
case PAUSE_MESSAGE_OPTION: ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_OPTION_HEADER)); break;
- case PAUSE_MESSAGE_STATUS: DEBUG_ECHOLNPGM("PauseStatus"); break;
+ case PAUSE_MESSAGE_STATUS: break;
default: onUserConfirmRequired(PSTR("Confirm Continue")); break;
}
userConfValidation = 0;
@@ -216,7 +213,6 @@ namespace ExtUI {
case 1:
if (isPositionKnown()) {
InforShowStatus = true;
- DEBUG_ECHOLNPGM("==waitway 1==");
rtscheck.RTS_SndData(ExchangePageBase + 54, ExchangepageAddr);
waitway = 0;
}
@@ -227,7 +223,6 @@ namespace ExtUI {
break;
case 3:
- DEBUG_ECHOLNPGM("==waitway 3==");
//if(isPositionKnown() && (getActualTemp_celsius(BED) >= (getTargetTemp_celsius(BED)-1))) {
rtscheck.RTS_SndData(ExchangePageBase + 64, ExchangepageAddr);
waitway = 7;
@@ -237,8 +232,7 @@ namespace ExtUI {
case 4:
if (AutohomeKey && isPositionKnown() && !commandsInQueue()) { // Manual Move Home Done
- DEBUG_ECHOLNPGM("==waitway 4==");
- // rtscheck.RTS_SndData(ExchangePageBase + 71 + AxisPagenum, ExchangepageAddr);
+ //rtscheck.RTS_SndData(ExchangePageBase + 71 + AxisPagenum, ExchangepageAddr);
AutohomeKey = false;
waitway = 0;
}
@@ -247,7 +241,6 @@ namespace ExtUI {
if (isPositionKnown() && !commandsInQueue()) {
InforShowStatus = true;
waitway = 0;
- DEBUG_ECHOLNPGM("==waitway 5==");
rtscheck.RTS_SndData(ExchangePageBase + 78, ExchangepageAddr); // exchange to 78 page
}
break;
@@ -277,7 +270,6 @@ namespace ExtUI {
else
injectCommands(F("M22\nM21"));
startprogress = 254;
- DEBUG_ECHOLNPGM(" startprogress ");
InforShowStatus = true;
TPShowStatus = false;
rtscheck.RTS_SndData(ExchangePageBase + 45, ExchangepageAddr);
@@ -289,28 +281,28 @@ namespace ExtUI {
else
rtscheck.RTS_SndData(startprogress - 100, StartIcon + 1);
- // rtscheck.RTS_SndData((startprogress++) % 5, ExchFlmntIcon);
+ //rtscheck.RTS_SndData((startprogress++) % 5, ExchFlmntIcon);
if (isPrinting()) {
rtscheck.RTS_SndData(getActualFan_percent((fan_t)getActiveTool()), FanKeyIcon);
rtscheck.RTS_SndData(getProgress_seconds_elapsed() / 3600, Timehour);
rtscheck.RTS_SndData((getProgress_seconds_elapsed() % 3600) / 60, Timemin);
if (getProgress_percent() > 0) {
- Percentrecord = getProgress_percent() + 1;
- if (Percentrecord <= 50) {
- rtscheck.RTS_SndData((unsigned int)Percentrecord * 2, PrintscheduleIcon);
+ const uint16_t perc = getProgress_percent() + 1;
+ if (perc <= 50) {
+ rtscheck.RTS_SndData(uint16_t(perc) * 2, PrintscheduleIcon);
rtscheck.RTS_SndData(0, PrintscheduleIcon + 1);
}
else {
rtscheck.RTS_SndData(100, PrintscheduleIcon);
- rtscheck.RTS_SndData((unsigned int)Percentrecord * 2 - 100, PrintscheduleIcon + 1);
+ rtscheck.RTS_SndData(uint16_t(perc) * 2 - 100, PrintscheduleIcon + 1);
}
}
else {
rtscheck.RTS_SndData(0, PrintscheduleIcon);
rtscheck.RTS_SndData(0, PrintscheduleIcon + 1);
}
- rtscheck.RTS_SndData((unsigned int)getProgress_percent(), Percentage);
+ rtscheck.RTS_SndData(uint16_t(getProgress_percent()), Percentage);
}
else { // Not printing settings
rtscheck.RTS_SndData(map(constrain(Settings.display_volume, 0, 255), 0, 255, 0, 100), VolumeDisplay);
@@ -322,31 +314,31 @@ namespace ExtUI {
else
rtscheck.RTS_SndData(2, DisplayStandbyEnableIndicator);
- rtscheck.RTS_SndData((unsigned int)(getAxisSteps_per_mm(X) * 10), StepMM_X);
- rtscheck.RTS_SndData((unsigned int)(getAxisSteps_per_mm(Y) * 10), StepMM_Y);
- rtscheck.RTS_SndData((unsigned int)(getAxisSteps_per_mm(Z) * 10), StepMM_Z);
- rtscheck.RTS_SndData((unsigned int)(getAxisSteps_per_mm(E0) * 10), StepMM_E);
+ rtscheck.RTS_SndData(uint16_t(getAxisSteps_per_mm(X)) * 10, StepMM_X);
+ rtscheck.RTS_SndData(uint16_t(getAxisSteps_per_mm(Y)) * 10, StepMM_Y);
+ rtscheck.RTS_SndData(uint16_t(getAxisSteps_per_mm(Z)) * 10, StepMM_Z);
+ rtscheck.RTS_SndData(uint16_t(getAxisSteps_per_mm(E0)) * 10, StepMM_E);
- rtscheck.RTS_SndData(((unsigned int)getAxisMaxAcceleration_mm_s2(X) / 100), Accel_X);
- rtscheck.RTS_SndData(((unsigned int)getAxisMaxAcceleration_mm_s2(Y) / 100), Accel_Y);
- rtscheck.RTS_SndData(((unsigned int)getAxisMaxAcceleration_mm_s2(Z) / 10), Accel_Z);
- rtscheck.RTS_SndData(((unsigned int)getAxisMaxAcceleration_mm_s2(E0)), Accel_E);
+ rtscheck.RTS_SndData(uint16_t(getAxisMaxAcceleration_mm_s2(X)) / 100, Accel_X);
+ rtscheck.RTS_SndData(uint16_t(getAxisMaxAcceleration_mm_s2(Y)) / 100, Accel_Y);
+ rtscheck.RTS_SndData(uint16_t(getAxisMaxAcceleration_mm_s2(Z)) / 10, Accel_Z);
+ rtscheck.RTS_SndData(uint16_t(getAxisMaxAcceleration_mm_s2(E0)), Accel_E);
- rtscheck.RTS_SndData(((unsigned int)getAxisMaxFeedrate_mm_s(X)), Feed_X);
- rtscheck.RTS_SndData(((unsigned int)getAxisMaxFeedrate_mm_s(Y)), Feed_Y);
- rtscheck.RTS_SndData(((unsigned int)getAxisMaxFeedrate_mm_s(Z)), Feed_Z);
- rtscheck.RTS_SndData(((unsigned int)getAxisMaxFeedrate_mm_s(E0)), Feed_E);
+ rtscheck.RTS_SndData(uint16_t(getAxisMaxFeedrate_mm_s(X)), Feed_X);
+ rtscheck.RTS_SndData(uint16_t(getAxisMaxFeedrate_mm_s(Y)), Feed_Y);
+ rtscheck.RTS_SndData(uint16_t(getAxisMaxFeedrate_mm_s(Z)), Feed_Z);
+ rtscheck.RTS_SndData(uint16_t(getAxisMaxFeedrate_mm_s(E0)), Feed_E);
- rtscheck.RTS_SndData(((unsigned int)getAxisMaxJerk_mm_s(X) * 100), Jerk_X);
- rtscheck.RTS_SndData(((unsigned int)getAxisMaxJerk_mm_s(Y) * 100), Jerk_Y);
- rtscheck.RTS_SndData(((unsigned int)getAxisMaxJerk_mm_s(Z) * 100), Jerk_Z);
- rtscheck.RTS_SndData(((unsigned int)getAxisMaxJerk_mm_s(E0) * 100), Jerk_E);
+ rtscheck.RTS_SndData(uint16_t(getAxisMaxJerk_mm_s(X)) * 100, Jerk_X);
+ rtscheck.RTS_SndData(uint16_t(getAxisMaxJerk_mm_s(Y)) * 100, Jerk_Y);
+ rtscheck.RTS_SndData(uint16_t(getAxisMaxJerk_mm_s(Z)) * 100, Jerk_Z);
+ rtscheck.RTS_SndData(uint16_t(getAxisMaxJerk_mm_s(E0)) * 100, Jerk_E);
#if HAS_HOTEND_OFFSET
- rtscheck.RTS_SndData(((unsigned int)getNozzleOffset_mm(X, E1) * 10), T2Offset_X);
- rtscheck.RTS_SndData(((unsigned int)getNozzleOffset_mm(Y, E1) * 10), T2Offset_Y);
- rtscheck.RTS_SndData(((unsigned int)getNozzleOffset_mm(Z, E1) * 10), T2Offset_Z);
- rtscheck.RTS_SndData((unsigned int)(getAxisSteps_per_mm(E1) * 10), T2StepMM_E);
+ rtscheck.RTS_SndData(uint16_t(getNozzleOffset_mm(X, E1)) * 10, T2Offset_X);
+ rtscheck.RTS_SndData(uint16_t(getNozzleOffset_mm(Y, E1)) * 10, T2Offset_Y);
+ rtscheck.RTS_SndData(uint16_t(getNozzleOffset_mm(Z, E1)) * 10, T2Offset_Z);
+ rtscheck.RTS_SndData(uint16_t(getAxisSteps_per_mm(E1)) * 10, T2StepMM_E);
#endif
#if HAS_BED_PROBE
@@ -357,42 +349,38 @@ namespace ExtUI {
#if HAS_PID_HEATING
rtscheck.RTS_SndData(pid_hotendAutoTemp, HotendPID_AutoTmp);
rtscheck.RTS_SndData(pid_bedAutoTemp, BedPID_AutoTmp);
- rtscheck.RTS_SndData((unsigned int)(getPID_Kp(E0) * 10), HotendPID_P);
- rtscheck.RTS_SndData((unsigned int)(getPID_Ki(E0) * 10), HotendPID_I);
- rtscheck.RTS_SndData((unsigned int)(getPID_Kd(E0) * 10), HotendPID_D);
+ rtscheck.RTS_SndData(uint16_t(getPID_Kp(E0)) * 10, HotendPID_P);
+ rtscheck.RTS_SndData(uint16_t(getPID_Ki(E0)) * 10, HotendPID_I);
+ rtscheck.RTS_SndData(uint16_t(getPID_Kd(E0)) * 10, HotendPID_D);
#if ENABLED(PIDTEMPBED)
- rtscheck.RTS_SndData((unsigned int)(getBedPID_Kp() * 10), BedPID_P);
- rtscheck.RTS_SndData((unsigned int)(getBedPID_Ki() * 10), BedPID_I);
- rtscheck.RTS_SndData((unsigned int)(getBedPID_Kd() * 10), BedPID_D);
+ rtscheck.RTS_SndData(uint16_t(getBedPID_Kp()) * 10, BedPID_P);
+ rtscheck.RTS_SndData(uint16_t(getBedPID_Ki()) * 10, BedPID_I);
+ rtscheck.RTS_SndData(uint16_t(getBedPID_Kd()) * 10, BedPID_D);
#endif
#endif
}
rtscheck.RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z);
- rtscheck.RTS_SndData((unsigned int)(getFlow_percent(E0)), Flowrate);
+ rtscheck.RTS_SndData(uint16_t(getFlow_percent(E0)), Flowrate);
- if (NozzleTempStatus[0] || NozzleTempStatus[2]) { // statuse of loadfilement and unloadfinement when temperature is less than
- unsigned int IconTemp;
-
- IconTemp = getActualTemp_celsius(getActiveTool()) * 100 / getTargetTemp_celsius(getActiveTool());
- NOMORE(IconTemp, 100);
+ if (NozzleTempStatus[0] || NozzleTempStatus[2]) { // statuse of loadfilament and unloadfinement when temperature is less than
+ uint16_t IconTemp = getActualTemp_celsius(getActiveTool()) * 100 / getTargetTemp_celsius(getActiveTool());
+ NOMORE(IconTemp, 100U);
rtscheck.RTS_SndData(IconTemp, HeatPercentIcon);
if (getActualTemp_celsius(getActiveTool()) > EXTRUDE_MINTEMP && NozzleTempStatus[0] != 0) {
NozzleTempStatus[0] = 0;
rtscheck.RTS_SndData(10 * ChangeMaterialbuf[0], FilamentUnit1);
rtscheck.RTS_SndData(10 * ChangeMaterialbuf[1], FilamentUnit2);
- DEBUG_ECHOLNPGM("==Heating Done Change Filament==");
rtscheck.RTS_SndData(ExchangePageBase + 65, ExchangepageAddr);
}
else if (getActualTemp_celsius(getActiveTool()) >= getTargetTemp_celsius(getActiveTool()) && NozzleTempStatus[2]) {
- DEBUG_ECHOLNPGM("***NozzleTempStatus[2] =", (int)NozzleTempStatus[2]);
NozzleTempStatus[2] = 0;
- TPShowStatus = true;
+ TPShowStatus = true;
rtscheck.RTS_SndData(4, ExchFlmntIcon);
rtscheck.RTS_SndData(ExchangePageBase + 83, ExchangepageAddr);
}
else if (NozzleTempStatus[2]) {
- // rtscheck.RTS_SndData((startprogress++) % 5, ExchFlmntIcon);
+ //rtscheck.RTS_SndData((startprogress++) % 5, ExchFlmntIcon);
}
}
@@ -431,20 +419,18 @@ namespace ExtUI {
memset(databuf, 0, sizeof(databuf));
}
- int RTSSHOW::RTS_RecData() {
+ int16_t RTSSHOW::RTS_RecData() {
uint8_t receivedbyte;
while (DWIN_SERIAL.available())
switch (rx_datagram_state) {
case DGUS_IDLE: // Waiting for the first header byte
receivedbyte = DWIN_SERIAL.read();
- //DEBUG_ECHOLNPGM("< ",receivedbyte);
if (FHONE == receivedbyte) rx_datagram_state = DGUS_HEADER1_SEEN;
break;
case DGUS_HEADER1_SEEN: // Waiting for the second header byte
receivedbyte = DWIN_SERIAL.read();
- //DEBUG_ECHOLNPGM(" ", receivedbyte);
rx_datagram_state = (FHTWO == receivedbyte) ? DGUS_HEADER2_SEEN : DGUS_IDLE;
break;
@@ -462,20 +448,19 @@ namespace ExtUI {
Initialized = true; // We've talked to it, so we defined it as initialized.
uint8_t command = DWIN_SERIAL.read();
- // DEBUGLCDCOMM_ECHOPAIR("# ", command);
+ //DEBUGLCDCOMM_ECHOPAIR("# ", command);
uint8_t readlen = rx_datagram_len - 1; // command is part of len.
- unsigned char tmp[rx_datagram_len - 1];
- unsigned char *ptmp = tmp;
+ uint8_t tmp[rx_datagram_len - 1];
+ uint8_t *ptmp = tmp;
while (readlen--) {
receivedbyte = DWIN_SERIAL.read();
- // DEBUGLCDCOMM_ECHOPAIR(" ", receivedbyte);
+ //DEBUGLCDCOMM_ECHOPAIR(" ", receivedbyte);
*ptmp++ = receivedbyte;
}
- // DEBUGLCDCOMM_ECHOPGM(" # ");
+ //DEBUGLCDCOMM_ECHOPGM(" # ");
// mostly we'll get this: 5A A5 03 82 4F 4B -- ACK on 0x82, so discard it.
if (command == VarAddr_W && 'O' == tmp[0] && 'K' == tmp[1]) {
- // DEBUG_ECHOLNPGM(">");
rx_datagram_state = DGUS_IDLE;
break;
}
@@ -491,19 +476,13 @@ namespace ExtUI {
const uint16_t vp = tmp[0] << 8 | tmp[1];
const uint8_t dlen = tmp[2] << 1; // Convert to Bytes. (Display works with words)
- //DEBUG_ECHOLNPGM(" vp=", vp, " dlen=", dlen);
recdat.addr = vp;
recdat.len = tmp[2];
- for (unsigned int i = 0; i < dlen; i += 2) {
+ for (uint16_t i = 0; i < dlen; i += 2) {
recdat.data[i / 2] = tmp[3 + i];
recdat.data[i / 2] = (recdat.data[i / 2] << 8 ) | tmp[4 + i];
}
- DEBUG_ECHOLNPGM("VP received: ", vp, " - len ", tmp[2]);
-
- DEBUG_ECHOLNPGM("d1: ", tmp[3], " - d2 ", tmp[4]);
- DEBUG_ECHOLNPGM("d3: ", tmp[5], " - d4 ", tmp[6]);
-
rx_datagram_state = DGUS_IDLE;
return 2;
break;
@@ -523,7 +502,7 @@ namespace ExtUI {
databuf[3] = snddat.command;
if (snddat.command == 0x80) { // to write data to the register
databuf[4] = snddat.addr;
- for (int i = 0; i < (snddat.len - 2); i++) databuf[5 + i] = snddat.data[i];
+ for (int16_t i = 0; i < (snddat.len - 2); i++) databuf[5 + i] = snddat.data[i];
}
else if (snddat.len == 3 && (snddat.command == 0x81)) { // to read data from the register
databuf[4] = snddat.addr;
@@ -532,7 +511,7 @@ namespace ExtUI {
else if (snddat.command == 0x82) { // to write data to the variate
databuf[4] = snddat.addr >> 8;
databuf[5] = snddat.addr & 0xFF;
- for (int i = 0; i < (snddat.len - 3); i += 2) {
+ for (int16_t i = 0; i < (snddat.len - 3); i += 2) {
databuf[6 + i] = snddat.data[i / 2] >> 8;
databuf[7 + i] = snddat.data[i / 2] & 0xFF;
}
@@ -542,7 +521,7 @@ namespace ExtUI {
databuf[5] = snddat.addr & 0xFF;
databuf[6] = snddat.bytelen;
}
- for (int i = 0; i < (snddat.len + 3); i++) {
+ for (int16_t i = 0; i < (snddat.len + 3); i++) {
DWIN_SERIAL.write(databuf[i]);
delay_us(1);
}
@@ -554,15 +533,15 @@ namespace ExtUI {
}
}
- void RTSSHOW::RTS_SndData(const String &s, unsigned long addr, unsigned char cmd /*= VarAddr_W*/) {
+ void RTSSHOW::RTS_SndData(const String &s, uint32_t addr, uint8_t cmd/*=VarAddr_W*/) {
if (s.length() < 1) return;
RTS_SndData(s.c_str(), addr, cmd);
}
- void RTSSHOW::RTS_SndData(const char *str, unsigned long addr, unsigned char cmd /*= VarAddr_W*/) {
+ void RTSSHOW::RTS_SndData(const char *str, uint32_t addr, uint8_t cmd/*=VarAddr_W*/) {
- int len = strlen(str);
- constexpr int maxlen = SizeofDatabuf - 6;
+ int16_t len = strlen(str);
+ constexpr int16_t maxlen = SizeofDatabuf - 6;
if (len > 0) {
if (len > maxlen) len = maxlen;
databuf[0] = FHONE;
@@ -571,9 +550,9 @@ namespace ExtUI {
databuf[3] = cmd;
databuf[4] = addr >> 8;
databuf[5] = addr & 0x00FF;
- for (int i = 0; i < len; i++) databuf[6 + i] = str[i];
+ for (int16_t i = 0; i < len; i++) databuf[6 + i] = str[i];
- for (int i = 0; i < (len + 6); i++) {
+ for (int16_t i = 0; i < (len + 6); i++) {
DWIN_SERIAL.write(databuf[i]);
delay_us(1);
}
@@ -581,58 +560,50 @@ namespace ExtUI {
}
}
- void RTSSHOW::RTS_SndData(char c, unsigned long addr, unsigned char cmd /*= VarAddr_W*/) {
+ void RTSSHOW::RTS_SndData(char c, uint32_t addr, uint8_t cmd/*=VarAddr_W*/) {
snddat.command = cmd;
snddat.addr = addr;
- snddat.data[0] = (unsigned long)c;
+ snddat.data[0] = uint32_t(c);
snddat.data[0] = snddat.data[0] << 8;
snddat.len = 5;
RTS_SndData();
}
- void RTSSHOW::RTS_SndData(unsigned char *str, unsigned long addr, unsigned char cmd) { RTS_SndData((char *)str, addr, cmd); }
+ void RTSSHOW::RTS_SndData(uint8_t *str, uint32_t addr, uint8_t cmd) { RTS_SndData((char *)str, addr, cmd); }
- void RTSSHOW::RTS_SndData(int n, unsigned long addr, unsigned char cmd /*= VarAddr_W*/) {
+ void RTSSHOW::RTS_SndData(int16_t n, uint32_t addr, uint8_t cmd/*=VarAddr_W*/) {
if (cmd == VarAddr_W) {
- if ((uint8_t)n > 0xFFFF) {
- snddat.data[0] = n >> 16;
- snddat.data[1] = n & 0xFFFF;
- snddat.len = 7;
- }
- else {
- snddat.data[0] = n;
- snddat.len = 5;
- }
+ snddat.data[0] = n;
+ snddat.len = 5;
}
else if (cmd == RegAddr_W) {
snddat.data[0] = n;
- snddat.len = 3;
+ snddat.len = 3;
}
else if (cmd == VarAddr_R) {
snddat.bytelen = n;
- snddat.len = 4;
+ snddat.len = 4;
}
snddat.command = cmd;
- snddat.addr = addr;
+ snddat.addr = addr;
RTS_SndData();
}
- void RTSSHOW::RTS_SndData(unsigned int n, unsigned long addr, unsigned char cmd) { RTS_SndData((int)n, addr, cmd); }
+ void RTSSHOW::RTS_SndData(uint16_t n, uint32_t addr, uint8_t cmd) { RTS_SndData(int16_t(n), addr, cmd); }
- void RTSSHOW::RTS_SndData(float n, unsigned long addr, unsigned char cmd) { RTS_SndData((int)n, addr, cmd); }
+ void RTSSHOW::RTS_SndData(float n, uint32_t addr, uint8_t cmd) { RTS_SndData(int16_t(n), addr, cmd); }
- void RTSSHOW::RTS_SndData(long n, unsigned long addr, unsigned char cmd) { RTS_SndData((unsigned long)n, addr, cmd); }
+ void RTSSHOW::RTS_SndData(int32_t n, uint32_t addr, uint8_t cmd) { RTS_SndData(uint32_t(n), addr, cmd); }
- void RTSSHOW::RTS_SndData(unsigned long n, unsigned long addr, unsigned char cmd /*= VarAddr_W*/) {
+ void RTSSHOW::RTS_SndData(uint32_t n, uint32_t addr, uint8_t cmd/*=VarAddr_W*/) {
if (cmd == VarAddr_W) {
if (n > 0xFFFF) {
snddat.data[0] = n >> 16;
snddat.data[1] = n & 0xFFFF;
-
- // snddat.data[0] = n >> 24;
- // snddat.data[1] = n >> 16;
- // snddat.data[2] = n >> 8;
- // snddat.data[3] = n;
+ //snddat.data[0] = n >> 24;
+ //snddat.data[1] = n >> 16;
+ //snddat.data[2] = n >> 8;
+ //snddat.data[3] = n;
snddat.len = 7;
}
else {
@@ -650,17 +621,14 @@ namespace ExtUI {
}
void RTSSHOW::RTS_HandleData() {
- int Checkkey = -1;
- DEBUG_ECHOLNPGM(" *******RTS_HandleData******** ");
+ int16_t Checkkey = -1;
if (waitway > 0) { // for waiting
- DEBUG_ECHOLNPGM("waitway ==", (int)waitway);
memset(&recdat, 0, sizeof(recdat));
recdat.head[0] = FHONE;
recdat.head[1] = FHTWO;
return;
}
- DEBUG_ECHOLNPGM("recdat.data[0] ==", recdat.data[0], " recdat.addr ==", recdat.addr);
- for (int i = 0; Addrbuf[i] != 0; i++)
+ for (int16_t i = 0; Addrbuf[i] != 0; i++)
if (recdat.addr == Addrbuf[i]) {
if (Addrbuf[i] == NzBdSet || Addrbuf[i] == NozzlePreheat || Addrbuf[i] == BedPreheat || Addrbuf[i] == Flowrate)
Checkkey = ManualSetTemp;
@@ -697,16 +665,13 @@ namespace ExtUI {
case DisplayStandbyBrightness: Checkkey = DisplayStandbyBrightness; break;
case DisplayStandbySeconds: Checkkey = DisplayStandbySeconds; break;
default:
- if (WITHIN(recdat.addr, AutolevelVal, 4400)) // ((int)AutolevelVal+(GRID_MAX_POINTS_X*GRID_MAX_POINTS_Y*2)) = 4400 with 5x5 mesh
+ if (WITHIN(recdat.addr, AutolevelVal, 4400)) // (int16_t(AutolevelVal) + GRID_MAX_POINTS * 2) = 4400 with 5x5 mesh
Checkkey = AutolevelVal;
else if (WITHIN(recdat.addr, SDFILE_ADDR, SDFILE_ADDR + 10 * (FileNum + 1)))
Checkkey = Filename;
break;
}
- DEBUG_ECHOLNPGM("== Checkkey==");
- DEBUG_ECHOLN(Checkkey);
-
if (Checkkey < 0) {
memset(&recdat, 0, sizeof(recdat));
recdat.head[0] = FHONE;
@@ -715,17 +680,14 @@ namespace ExtUI {
}
constexpr float lfrb[4] = BED_TRAMMING_INSET_LFRB;
- DEBUG_ECHOLNPGM("BeginSwitch");
switch (Checkkey) {
case Printfile:
if (recdat.data[0] == 1) { // card
InforShowStatus = false;
- DEBUG_ECHOLNPGM("Handle Data PrintFile Pre");
filenavigator.getFiles(0);
fileIndex = 0;
recordcount = 0;
- DEBUG_ECHOLNPGM("Handle Data PrintFile Post");
RTS_SndData(ExchangePageBase + 46, ExchangepageAddr);
}
else if (recdat.data[0] == 2) { // return after printing result.
@@ -741,13 +703,11 @@ namespace ExtUI {
RTS_SndData(0, Timehour);
RTS_SndData(0, Timemin);
- DEBUG_ECHOLNPGM("Handle Data PrintFile 2 Setting Screen ");
RTS_SndData(ExchangePageBase + 45, ExchangepageAddr); // exchange to 45 page
}
else if (recdat.data[0] == 3) { // Temperature control
InforShowStatus = true;
TPShowStatus = false;
- DEBUG_ECHOLNPGM("Handle Data PrintFile 3 Setting Screen ");
if (getTargetFan_percent((fan_t)getActiveTool()) == 0)
RTS_SndData(ExchangePageBase + 58, ExchangepageAddr); // exchange to 58 page, the fans off
else
@@ -763,7 +723,6 @@ namespace ExtUI {
InforShowStatus = false;
}
else if (recdat.data[0] == 2) {
- DEBUG_ECHOLNPGM("Handle Data Adjust 2 Setting Screen ");
InforShowStatus = true;
if (PrinterStatusKey[1] == 3) // during heating
RTS_SndData(ExchangePageBase + 53, ExchangepageAddr);
@@ -783,16 +742,13 @@ namespace ExtUI {
case PrintChoice:
if (recdat.addr == Stopprint) {
- DEBUG_ECHOLNPGM("StopPrint");
if (recdat.data[0] == 240) { // no
RTS_SndData(ExchangePageBase + 53, ExchangepageAddr);
- DEBUG_ECHOLNPGM("Stop No", recdat.data[0] );
}
else {
RTS_SndData(ExchangePageBase + 45, ExchangepageAddr);
RTS_SndData(0, Timehour);
RTS_SndData(0, Timemin);
- DEBUG_ECHOLNPGM("Stop Triggered", recdat.data[0] );
stopPrint();
}
}
@@ -823,17 +779,13 @@ namespace ExtUI {
case Zoffset:
float tmp_zprobe_offset;
if (recdat.data[0] >= 32768)
- tmp_zprobe_offset = ((float)recdat.data[0] - 65536) / 100;
+ tmp_zprobe_offset = (float(recdat.data[0]) - 65536) / 100;
else
- tmp_zprobe_offset = ((float)recdat.data[0]) / 100;
- DEBUG_ECHOLNPGM("Requested Offset ", tmp_zprobe_offset);
+ tmp_zprobe_offset = float(recdat.data[0]) / 100;
if (WITHIN((tmp_zprobe_offset), Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) {
int16_t tmpSteps = mmToWholeSteps(getZOffset_mm() - tmp_zprobe_offset, axis_t(Z));
- if (tmpSteps == 0) {
- DEBUG_ECHOLNPGM("Rounding to step");
- tmpSteps = getZOffset_mm() < tmp_zprobe_offset ? 1 : -1;
- }
- smartAdjustAxis_steps(tmpSteps * -1, axis_t(Z), false);
+ if (tmpSteps == 0) tmpSteps = getZOffset_mm() < tmp_zprobe_offset ? 1 : -1;
+ smartAdjustAxis_steps(-tmpSteps, axis_t(Z), false);
char zOffs[20], tmp1[11];
sprintf_P(zOffs, PSTR("Z Offset : %s"), dtostrf(getZOffset_mm(), 1, 3, tmp1));
onStatusChanged(zOffs);
@@ -883,7 +835,7 @@ namespace ExtUI {
RTS_SndData(PREHEAT_2_TEMP_BED, BedPreheat);
}
else if (recdat.data[0] == 0xF1) {
- // InforShowStatus = true;
+ //InforShowStatus = true;
#if FAN_COUNT > 0
for (uint8_t i = 0; i < FAN_COUNT; i++) setTargetFan_percent(0, (fan_t)i);
#endif
@@ -898,7 +850,6 @@ namespace ExtUI {
break;
case ManualSetTemp:
- DEBUG_ECHOLNPGM("ManualSetTemp");
if (recdat.addr == NzBdSet) {
if (recdat.data[0] == 0) {
if (getTargetFan_percent((fan_t)getActiveTool()) == 0)
@@ -916,65 +867,65 @@ namespace ExtUI {
}
}
else if (recdat.addr == NozzlePreheat) {
- setTargetTemp_celsius((float)recdat.data[0], H0);
+ setTargetTemp_celsius(float(recdat.data[0]), H0);
}
#if HAS_MULTI_HOTEND
else if (recdat.addr == e2Preheat) {
- setTargetTemp_celsius((float)recdat.data[0], H1);
+ setTargetTemp_celsius(float(recdat.data[0]), H1);
}
#endif
else if (recdat.addr == BedPreheat) {
- setTargetTemp_celsius((float)recdat.data[0], BED);
+ setTargetTemp_celsius(float(recdat.data[0]), BED);
}
else if (recdat.addr == Flowrate) {
- setFlow_percent((int16_t)recdat.data[0], getActiveTool());
+ setFlow_percent(int16_t(recdat.data[0]), getActiveTool());
}
#if HAS_PID_HEATING
else if (recdat.addr == HotendPID_AutoTmp) {
- pid_hotendAutoTemp = (uint16_t)recdat.data[0];
+ pid_hotendAutoTemp = uint16_t(recdat.data[0]);
}
else if (recdat.addr == BedPID_AutoTmp) {
- pid_bedAutoTemp = (uint16_t)recdat.data[0];
+ pid_bedAutoTemp = uint16_t(recdat.data[0]);
}
#endif
else if (recdat.addr == Accel_X) {
- setAxisMaxAcceleration_mm_s2((uint16_t)recdat.data[0] * 100, X);
+ setAxisMaxAcceleration_mm_s2(uint16_t(recdat.data[0]) * 100, X);
}
else if (recdat.addr == Accel_Y) {
- setAxisMaxAcceleration_mm_s2((uint16_t)recdat.data[0] * 100, Y);
+ setAxisMaxAcceleration_mm_s2(uint16_t(recdat.data[0]) * 100, Y);
}
else if (recdat.addr == Accel_Z) {
- setAxisMaxAcceleration_mm_s2((uint16_t)recdat.data[0] * 10, Z);
+ setAxisMaxAcceleration_mm_s2(uint16_t(recdat.data[0]) * 10, Z);
}
else if (recdat.addr == Accel_E) {
- setAxisMaxAcceleration_mm_s2((uint16_t)recdat.data[0], E0);
- setAxisMaxAcceleration_mm_s2((uint16_t)recdat.data[0], E1);
+ setAxisMaxAcceleration_mm_s2(uint16_t(recdat.data[0]), E0);
+ setAxisMaxAcceleration_mm_s2(uint16_t(recdat.data[0]), E1);
}
else if (recdat.addr == Feed_X) {
- setAxisMaxFeedrate_mm_s((uint16_t)recdat.data[0], X);
+ setAxisMaxFeedrate_mm_s(uint16_t(recdat.data[0]), X);
}
else if (recdat.addr == Feed_Y) {
- setAxisMaxFeedrate_mm_s((uint16_t)recdat.data[0], Y);
+ setAxisMaxFeedrate_mm_s(uint16_t(recdat.data[0]), Y);
}
else if (recdat.addr == Feed_Z) {
- setAxisMaxFeedrate_mm_s((uint16_t)recdat.data[0], Z);
+ setAxisMaxFeedrate_mm_s(uint16_t(recdat.data[0]), Z);
}
else if (recdat.addr == Feed_E) {
- setAxisMaxFeedrate_mm_s((uint16_t)recdat.data[0], E0);
- setAxisMaxFeedrate_mm_s((uint16_t)recdat.data[0], E1);
+ setAxisMaxFeedrate_mm_s(uint16_t(recdat.data[0]), E0);
+ setAxisMaxFeedrate_mm_s(uint16_t(recdat.data[0]), E1);
}
else if (recdat.addr == FanKeyIcon) {
- setTargetFan_percent((uint16_t)recdat.data[0], (fan_t)getActiveTool());
+ setTargetFan_percent(uint16_t(recdat.data[0]), (fan_t)getActiveTool());
}
else {
float tmp_float_handling;
if (recdat.data[0] >= 32768)
- tmp_float_handling = ((float)recdat.data[0] - 65536) / 100;
+ tmp_float_handling = (float(recdat.data[0]) - 65536) / 100;
else
- tmp_float_handling = ((float)recdat.data[0]) / 100;
+ tmp_float_handling = float(recdat.data[0]) / 100;
if (recdat.addr == StepMM_X) {
setAxisSteps_per_mm(tmp_float_handling * 10, X);
}
@@ -1089,7 +1040,7 @@ namespace ExtUI {
for (uint8_t outer = 0; outer < GRID_MAX_POINTS_Y; outer++)
for (uint8_t inner = 0; inner < GRID_MAX_POINTS_X; inner++) {
const bool zig = outer & 1;
- const xy_uint8_t point = { zig ? (GRID_MAX_POINTS_X - 1) - inner : inner, outer };
+ const xy_uint8_t point = { uint8_t(zig ? (GRID_MAX_POINTS_X - 1) - inner : inner), outer };
rtscheck.RTS_SndData(ExtUI::getMeshPoint(point) * 1000, AutolevelVal + abl_probe_index * 2);
++abl_probe_index;
}
@@ -1100,7 +1051,7 @@ namespace ExtUI {
waitway = 2;
RTS_SndData(ExchangePageBase + 64, ExchangepageAddr);
}
- else if (recdat.data[0] == 2) { // Exchange filement
+ else if (recdat.data[0] == 2) { // Exchange filament
InforShowStatus = true;
TPShowStatus = false;
memset(ChangeMaterialbuf, 0, sizeof(ChangeMaterialbuf));
@@ -1131,7 +1082,6 @@ namespace ExtUI {
break;
case ReturnBack:
- DEBUG_ECHOPGM("Return : ", recdat.data[0]);
if (recdat.data[0] == 1) { // return to the tool page
InforShowStatus = false;
RTS_SndData(ExchangePageBase + 63, ExchangepageAddr);
@@ -1141,7 +1091,6 @@ namespace ExtUI {
break;
case Bedlevel:
- DEBUG_ECHOLNPGM("Bed Level Option ", recdat.data[0]);
switch (recdat.data[0]) {
case 1: { // Z-axis to home
// Disallow Z homing if X or Y are unknown
@@ -1152,7 +1101,6 @@ namespace ExtUI {
case 2: { // Z-axis to Up
if (WITHIN((getZOffset_mm() + 0.1), Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) {
smartAdjustAxis_steps(getAxisSteps_per_mm(Z) / 10, axis_t(Z), false);
- //DEBUG_ECHOLNPGM("Babystep Pos Steps : ", (int)(getAxisSteps_per_mm(Z) / 10));
//setZOffset_mm(getZOffset_mm() + 0.1);
RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z);
char zOffs[20], tmp1[11];
@@ -1163,10 +1111,9 @@ namespace ExtUI {
}
case 3: { // Z-axis to Down
if (WITHIN((getZOffset_mm() - 0.1), Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) {
- smartAdjustAxis_steps(((getAxisSteps_per_mm(Z) / 10) * -1), axis_t(Z), false);
- // DEBUG_ECHOLNPGM("Babystep Neg Steps : ", (int)((getAxisSteps_per_mm(Z) / 10) * -1));
- // babystepAxis_steps((((int)getAxisSteps_per_mm(Z) / 10) * -1), axis_t(Z));
- // setZOffset_mm(getZOffset_mm() - 0.1);
+ smartAdjustAxis_steps(-getAxisSteps_per_mm(Z) / 10, axis_t(Z), false);
+ //babystepAxis_steps(int16_t(-getAxisSteps_per_mm(Z)) / 10, axis_t(Z));
+ //setZOffset_mm(getZOffset_mm() - 0.1);
RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z);
char zOffs[20], tmp1[11];
sprintf_P(zOffs, PSTR("Z Offset : %s"), dtostrf(getZOffset_mm(), 1, 3, tmp1));
@@ -1319,10 +1266,7 @@ namespace ExtUI {
setActiveTool(getActiveTool() == E0 ? E1 : E0, !isAxisPositionKnown(X));
break;
}
- default: {
- DEBUG_ECHOLNPGM("Unsupported Option Selected", recdat.data[0]);
- break;
- }
+ default: break;
}
RTS_SndData(10, FilenameIcon);
@@ -1362,7 +1306,7 @@ namespace ExtUI {
break;
}
- float targetPos = ((float)recdat.data[0]) / 10;
+ float targetPos = float(recdat.data[0]) / 10;
LIMIT(targetPos, min, max);
setAxisPosition_mm(targetPos, axis);
waitway = 0;
@@ -1372,39 +1316,38 @@ namespace ExtUI {
case Filament:
- unsigned int IconTemp;
- if (recdat.addr == Exchfilement) {
+ uint16_t IconTemp;
+ if (recdat.addr == Exchfilament) {
if (getActualTemp_celsius(getActiveTool()) < EXTRUDE_MINTEMP && recdat.data[0] < 5) {
- RTS_SndData((int)EXTRUDE_MINTEMP, 0x1020);
+ RTS_SndData(int16_t(EXTRUDE_MINTEMP), 0x1020);
delay_ms(5);
RTS_SndData(ExchangePageBase + 66, ExchangepageAddr);
break;
}
switch (recdat.data[0]) {
- case 1: { // Unload filement1
- setAxisPosition_mm((getAxisPosition_mm(E0) - ChangeMaterialbuf[0]), E0);
+ case 1: { // Unload filament1
+ setAxisPosition_mm(getAxisPosition_mm(E0) - ChangeMaterialbuf[0], E0);
break;
}
- case 2: { // Load filement1
- setAxisPosition_mm((getAxisPosition_mm(E0) + ChangeMaterialbuf[0]), E0);
+ case 2: { // Load filament1
+ setAxisPosition_mm(getAxisPosition_mm(E0) + ChangeMaterialbuf[0], E0);
break;
}
- case 3: { // Unload filement2
- setAxisPosition_mm((getAxisPosition_mm(E1) - ChangeMaterialbuf[1]), E1);
+ case 3: { // Unload filament2
+ setAxisPosition_mm(getAxisPosition_mm(E1) - ChangeMaterialbuf[1], E1);
break;
}
- case 4: { // Load filement2
- setAxisPosition_mm((getAxisPosition_mm(E1) + ChangeMaterialbuf[1]), E1);
+ case 4: { // Load filament2
+ setAxisPosition_mm(getAxisPosition_mm(E1) + ChangeMaterialbuf[1], E1);
break;
}
case 5: { // sure to heat
NozzleTempStatus[0] = 1;
- // InforShowoStatus = true;
setTargetTemp_celsius((PREHEAT_1_TEMP_HOTEND + 10), getActiveTool());
IconTemp = getActualTemp_celsius(getActiveTool()) * 100 / getTargetTemp_celsius(getActiveTool());
- NOMORE(IconTemp, 100);
+ NOMORE(IconTemp, 100U);
RTS_SndData(IconTemp, HeatPercentIcon);
RTS_SndData(getActualTemp_celsius(H0), NozzleTemp);
@@ -1420,7 +1363,6 @@ namespace ExtUI {
break;
}
case 0xF1: { // Sure to cancel heating
- // InforShowoStatus = true;
NozzleTempStatus[0] = 0;
delay_ms(1);
RTS_SndData(ExchangePageBase + 65, ExchangepageAddr);
@@ -1433,27 +1375,20 @@ namespace ExtUI {
RTS_SndData(10 * ChangeMaterialbuf[1], FilamentUnit2);
}
else if (recdat.addr == FilamentUnit1) {
- ChangeMaterialbuf[0] = ((float)recdat.data[0]) / 10;
+ ChangeMaterialbuf[0] = float(recdat.data[0]) / 10;
}
else if (recdat.addr == FilamentUnit2) {
- ChangeMaterialbuf[1] = ((float)recdat.data[0]) / 10;
+ ChangeMaterialbuf[1] = float(recdat.data[0]) / 10;
}
break;
case LanguageChoice:
- DEBUG_ECHOLNPGM("\n ***recdat.data[0] =", recdat.data[0]);
- /*if(recdat.data[0]==1) {
- settings.save();
- }
- else {
- injectCommands(F("M300"));
- }*/
+ //if (recdat.data[0] == 1) settings.save(); else injectCommands(F("M300"));
+
// may at some point use language change screens to save eeprom explicitly
- DEBUG_ECHOLNPGM("InLangChoice");
switch (recdat.data[0]) {
case 0: {
- DEBUG_ECHOLNPGM("Store Settings");
injectCommands(F("M500"));
break;
}
@@ -1471,12 +1406,10 @@ namespace ExtUI {
#endif
case 3: {
- DEBUG_ECHOLNPGM("Init EEPROM");
injectCommands(F("M502\nM500"));
break;
}
case 4: {
- DEBUG_ECHOLNPGM("BLTouch Reset");
injectCommands(F("M999\nM280P0S160"));
break;
}
@@ -1485,27 +1418,19 @@ namespace ExtUI {
#if ENABLED(PIDTEMPBED)
onStatusChanged(F("Bed PID Started"));
startBedPIDTune(static_cast(pid_bedAutoTemp));
- #else
- DEBUG_ECHOLNPGM("Bed PID Disabled");
#endif
break;
}
case 6: {
- DEBUG_ECHOLNPGM("Store Settings");
injectCommands(F("M500"));
break;
}
- default: {
- DEBUG_ECHOLNPGM("Invalid Option");
- break;
- }
+ default: break;
}
break;
- case No_Filament:
- DEBUG_ECHOLNPGM("\n No Filament");
+ case No_Filament:
if (recdat.data[0] == 1) { // Filament is out, resume / resume selected on screen
- DEBUG_ECHOLNPGM("Resume Yes during print");
if (ExtUI::pauseModeStatus != PAUSE_MESSAGE_PURGE && ExtUI::pauseModeStatus != PAUSE_MESSAGE_OPTION) {
// setPauseMenuResponse(PAUSE_RESPONSE_RESUME_PRINT);
setUserConfirmed();
@@ -1536,7 +1461,6 @@ namespace ExtUI {
}
}
else if (recdat.data[0] == 0) { // Filamet is out, Cancel Selected
- DEBUG_ECHOLNPGM(" Filament Response No");
if (ExtUI::pauseModeStatus == PAUSE_MESSAGE_PURGE || ExtUI::pauseModeStatus == PAUSE_MESSAGE_OPTION) {
setPauseMenuResponse(PAUSE_RESPONSE_EXTRUDE_MORE);
setUserConfirmed();
@@ -1573,14 +1497,11 @@ namespace ExtUI {
break;
case Filename:
- DEBUG_ECHOLNPGM("Filename Selected");
if (isMediaInserted() && recdat.addr == FilenameChs) {
- DEBUG_ECHOLNPGM("Has Media");
recordcount = recdat.data[0] - 1;
if (filenavigator.currentindex == 0 && filenavigator.folderdepth > 0 && (fileIndex + recordcount) == 0) {
filenavigator.upDIR();
- DEBUG_ECHOLNPGM("GoUpDir");
filenavigator.getFiles(0);
fileIndex = 0;
return;
@@ -1589,24 +1510,22 @@ namespace ExtUI {
if (filenavigator.currentindex == 0 && filenavigator.folderdepth > 0)
recordcount = recordcount - 1; // account for return dir link in file index
- for (int j = 1; j <= 4; j++) { // Clear filename BG Color and Frame
- RTS_SndData((unsigned long)0xFFFF, FilenameNature + j * 16); // white
+ for (int16_t j = 1; j <= 4; j++) { // Clear filename BG Color and Frame
+ RTS_SndData(0xFFFFUL, FilenameNature + j * 16); // white
RTS_SndData(10, FilenameIcon1 + j); // clean
}
- for (int j = 0; j < 10; j++) // clear current filename
+ for (int16_t j = 0; j < 10; j++) // clear current filename
RTS_SndData(0, Choosefilename + j);
if (filenavigator.getIndexisDir(fileIndex + recordcount)) {
- DEBUG_ECHOLNPGM("Is Dir ", (fileIndex + recordcount));
filenavigator.changeDIR((char *)filenavigator.getIndexName(fileIndex + recordcount));
filenavigator.getFiles(0);
fileIndex = 0;
return;
}
else {
- DEBUG_ECHOLNPGM("Is File ", (fileIndex + recordcount));
RTS_SndData(filenavigator.getIndexName(fileIndex + recordcount), Choosefilename);
- RTS_SndData((unsigned long)0x87F0, FilenameNature + recdat.data[0] * 16); // Change BG of selected line to Light Green
+ RTS_SndData(0x87F0UL, FilenameNature + recdat.data[0] * 16); // Change BG of selected line to Light Green
RTS_SndData(6, FilenameIcon1 + recdat.data[0]); // show frame
}
}
@@ -1614,13 +1533,13 @@ namespace ExtUI {
if (recdat.data[0] == 1 && isMediaInserted()) { // for sure
printFile(filenavigator.getIndexName(fileIndex + recordcount));
- for (int j = 0; j < 10; j++) // clean screen.
+ for (int16_t j = 0; j < 10; j++) // clean screen.
RTS_SndData(0, Printfilename + j);
RTS_SndData(filenavigator.getIndexName(fileIndex + recordcount), Printfilename);
- delay_ms(2);
- delay_ms(2);
+ delay_ms(4);
+
RTS_SndData(ExchangePageBase + 53, ExchangepageAddr);
TPShowStatus = InforShowStatus = true;
@@ -1630,7 +1549,6 @@ namespace ExtUI {
recordcount = 0;
}
else if (recdat.data[0] == 2) { // Page Down
- DEBUG_ECHOLNPGM("PgDown");
if ((fileIndex + DISPLAY_FILES) < (filenavigator.maxFiles() + (filenavigator.folderdepth != 0))) {
fileIndex = fileIndex + DISPLAY_FILES;
// if(filenavigator.folderdepth!=0 && fileIndex!=0) //Shift to acknowledge Return DIR button on first page
@@ -1641,7 +1559,6 @@ namespace ExtUI {
}
}
else if (recdat.data[0] == 3) { // Page Up
- DEBUG_ECHOLNPGM("PgUp");
if (fileIndex >= DISPLAY_FILES) {
fileIndex = fileIndex - DISPLAY_FILES;
// if(filenavigator.folderdepth!=0 && fileIndex!=0) //Shift to acknowledge Return DIR button on first page
@@ -1651,7 +1568,6 @@ namespace ExtUI {
}
}
else if (recdat.data[0] == 4) { // Page Up
- DEBUG_ECHOLNPGM("Refresh");
injectCommands(F("M22\nM21"));
}
else if (recdat.data[0] == 0) { // return to main page
@@ -1662,7 +1578,6 @@ namespace ExtUI {
break;
case VolumeDisplay: {
- DEBUG_ECHOLNPGM("VolumeDisplay");
if (recdat.data[0] == 0) {
Settings.display_volume = 0;
Settings.display_sound = false;
@@ -1680,20 +1595,17 @@ namespace ExtUI {
}
case DisplayBrightness: {
- DEBUG_ECHOLNPGM("DisplayBrightness LCD: ", recdat.data[0]);
if (recdat.data[0] < 10)
Settings.screen_brightness = 10;
else if (recdat.data[0] > 100)
Settings.screen_brightness = 100;
else
Settings.screen_brightness = (uint8_t)recdat.data[0];
- DEBUG_ECHOLNPGM("DisplayBrightness Set: ", Settings.screen_brightness);
SetTouchScreenConfiguration();
break;
}
case DisplayStandbyBrightness: {
- DEBUG_ECHOLNPGM("DisplayStandbyBrightness");
if (recdat.data[0] < 10)
Settings.standby_screen_brightness = 10;
else if (recdat.data[0] > 100)
@@ -1705,7 +1617,6 @@ namespace ExtUI {
}
case DisplayStandbySeconds: {
- DEBUG_ECHOLNPGM("DisplayStandbySeconds");
if (recdat.data[0] < 5)
Settings.standby_time_seconds = 5;
else if (recdat.data[0] > 100)
@@ -1722,22 +1633,16 @@ namespace ExtUI {
xPnt = meshPoint - (yPnt * GRID_MAX_POINTS_X);
if (yPnt % 2 != 0) xPnt = (GRID_MAX_POINTS_X - 1) - xPnt; // zag row
- DEBUG_ECHOLNPGM("meshPoint ", meshPoint, " xPnt ", xPnt, " yPnt ", yPnt);
-
float meshVal = float(recdat.data[0] - (recdat.data[0] >= 32768 ? 65536 : 0)) / 1000;
- DEBUG_ECHOLNPGM("meshVal ", meshVal);
LIMIT(meshVal, Z_PROBE_LOW_POINT, Z_CLEARANCE_BETWEEN_PROBES);
- DEBUG_ECHOLNPGM("Constrain meshVal ", meshVal);
xy_uint8_t point = { xPnt, yPnt };
setMeshPoint(point, meshVal);
rtscheck.RTS_SndData(meshVal * 1000, recdat.addr);
break;
}
- default:
- DEBUG_ECHOLNPGM("No Match :");
- break;
+ default: break;
}
memset(&recdat, 0, sizeof(recdat));
@@ -1770,7 +1675,7 @@ namespace ExtUI {
LIMIT(Settings.screen_brightness, 10, 100); // Prevent a possible all-dark screen
LIMIT(Settings.standby_time_seconds, 10, 655); // Prevent a possible all-dark screen for standby, yet also don't go higher than the DWIN limitation
- unsigned char cfg_bits = 0x0
+ uint8_t cfg_bits = 0x0
| _BV(7) // 7: Enable Control ... TERN0(DWINOS_4, _BV(7))
| _BV(5) // 5: load 22 touch file
| _BV(4) // 4: auto-upload should always be enabled
@@ -1782,12 +1687,12 @@ namespace ExtUI {
#endif
;
- const unsigned char config_set[] = { 0x5A, 0x00, TERN(DWINOS_4, 0x00, 0xFF), cfg_bits };
+ const uint8_t config_set[] = { 0x5A, 0x00, TERN(DWINOS_4, 0x00, 0xFF), cfg_bits };
WriteVariable(0x80 /*System_Config*/, config_set, sizeof(config_set));
// Standby brightness (LED_Config)
uint16_t dwinStandbyTimeSeconds = 100 * Settings.standby_time_seconds; /* milliseconds, but divided by 10 (not 5 like the docs say) */
- const unsigned char brightness_set[] = {
+ const uint8_t brightness_set[] = {
Settings.screen_brightness /*% active*/,
Settings.standby_screen_brightness /*% standby*/,
static_cast(dwinStandbyTimeSeconds >> 8),
@@ -1816,9 +1721,8 @@ namespace ExtUI {
}
void onPrinterKilled(FSTR_P const error, FSTR_P const component) {
- DEBUG_ECHOLNPGM("***kill***");
rtscheck.RTS_SndData(ExchangePageBase + 88, ExchangepageAddr);
- int j = 0;
+ int16_t j = 0;
char outmsg[40];
char killMsg[strlen_P(FTOP(error)) + strlen_P(FTOP(component)) + 3];
sprintf_P(killMsg, PSTR(S_FMT ": " S_FMT), FTOP(error), FTOP(component));
@@ -1839,7 +1743,6 @@ namespace ExtUI {
}
void onMediaInserted() {
- DEBUG_ECHOLNPGM("***Initing card is OK***");
filenavigator.reset();
filenavigator.getFiles(0);
fileIndex = 0;
@@ -1848,61 +1751,53 @@ namespace ExtUI {
void onMediaError() {
filenavigator.reset();
- for (int i = 0; i < MaxFileNumber; i++)
- for (int j = 0; j < 10; j++) rtscheck.RTS_SndData(0, SDFILE_ADDR + i * 10 + j);
+ for (int16_t i = 0; i < MaxFileNumber; i++)
+ for (int16_t j = 0; j < 10; j++) rtscheck.RTS_SndData(0, SDFILE_ADDR + i * 10 + j);
- for (int j = 0; j < 10; j++) {
+ for (int16_t j = 0; j < 10; j++) {
rtscheck.RTS_SndData(0, Printfilename + j); // clean screen.
rtscheck.RTS_SndData(0, Choosefilename + j); // clean filename
}
- for (int j = 0; j < 8; j++) rtscheck.RTS_SndData(0, FilenameCount + j);
- for (int j = 1; j <= MaxFileNumber; j++) {
+ for (int16_t j = 0; j < 8; j++) rtscheck.RTS_SndData(0, FilenameCount + j);
+ for (int16_t j = 1; j <= MaxFileNumber; j++) {
rtscheck.RTS_SndData(10, FilenameIcon + j);
rtscheck.RTS_SndData(10, FilenameIcon1 + j);
}
- return;
- DEBUG_ECHOLNPGM("***Initing card fails***");
}
void onMediaRemoved() {
filenavigator.reset();
- for (int i = 0; i < MaxFileNumber; i++)
- for (int j = 0; j < 10; j++) rtscheck.RTS_SndData(0, SDFILE_ADDR + i * 10 + j);
+ for (int16_t i = 0; i < MaxFileNumber; i++)
+ for (int16_t j = 0; j < 10; j++) rtscheck.RTS_SndData(0, SDFILE_ADDR + i * 10 + j);
- for (int j = 0; j < 10; j++) {
+ for (int16_t j = 0; j < 10; j++) {
rtscheck.RTS_SndData(0, Printfilename + j); // clean screen.
rtscheck.RTS_SndData(0, Choosefilename + j); // clean filename
}
- for (int j = 0; j < 8; j++) rtscheck.RTS_SndData(0, FilenameCount + j);
- for (int j = 1; j <= MaxFileNumber; j++) {
+ for (int16_t j = 0; j < 8; j++) rtscheck.RTS_SndData(0, FilenameCount + j);
+ for (int16_t j = 1; j <= MaxFileNumber; j++) {
rtscheck.RTS_SndData(10, FilenameIcon + j);
rtscheck.RTS_SndData(10, FilenameIcon1 + j);
}
- return;
- DEBUG_ECHOLNPGM("***Card Removed***");
}
void onPlayTone(const uint16_t frequency, const uint16_t duration) {
- DEBUG_ECHOLNPGM("***CPlay Tone***");
rtscheck.RTS_SndData(StartSoundSet, SoundAddr);
}
void onPrintTimerStarted() {
- DEBUG_ECHOLNPGM("==onPrintTimerStarted==");
if (waitway == 7) return;
PrinterStatusKey[1] = 3;
- InforShowStatus = true;
+ InforShowStatus = true;
delay_ms(1);
rtscheck.RTS_SndData(ExchangePageBase + 53, ExchangepageAddr);
}
void onPrintTimerPaused() {
- DEBUG_ECHOLNPGM("==onPrintTimerPaused==");
rtscheck.RTS_SndData(ExchangePageBase + 78, ExchangepageAddr); // Display Pause Screen
onStatusChanged(F("Pausing..."));
}
void onPrintTimerStopped() {
- DEBUG_ECHOLNPGM("==onPrintTimerStopped==");
if (waitway == 3) return;
#if FAN_COUNT > 0
@@ -1910,26 +1805,24 @@ namespace ExtUI {
#endif
PrinterStatusKey[0] = 0;
- InforShowStatus = true;
- TPShowStatus = false;
+ InforShowStatus = true;
+ TPShowStatus = false;
rtscheck.RTS_SndData(ExchangePageBase + 51, ExchangepageAddr);
}
void onFilamentRunout() {
- DEBUG_ECHOLNPGM("==onFilamentRunout==");
PrinterStatusKey[1] = 4;
- TPShowStatus = false;
+ TPShowStatus = false;
rtscheck.RTS_SndData(ExchangePageBase + 78, ExchangepageAddr);
}
void onFilamentRunout(extruder_t extruder) {
- DEBUG_ECHOLNPGM("==onFilamentRunout==");
PrinterStatusKey[1] = 4;
- TPShowStatus = false;
+ TPShowStatus = false;
rtscheck.RTS_SndData(ExchangePageBase + 78, ExchangepageAddr);
}
void onUserConfirmRequired(const char *const msg) {
PrinterStatusKey[1] = 4;
- TPShowStatus = false;
+ TPShowStatus = false;
if (lastPauseMsgState == ExtUI::pauseModeStatus && msg == (const char*)GET_TEXT_F(MSG_FILAMENT_CHANGE_LOAD))
return;
@@ -2009,16 +1902,14 @@ namespace ExtUI {
default: {
setPauseMenuResponse(PAUSE_RESPONSE_RESUME_PRINT);
setUserConfirmed();
- DEBUG_ECHOLNPGM("Pause Mode Status");
break;
}
}
lastPauseMsgState = ExtUI::pauseModeStatus;
- DEBUG_ECHOLNPGM("==onUserConfirmRequired==", pauseModeStatus);
}
void onStatusChanged(const char *const statMsg) {
- for (int j = 0; j < 20; j++) // Clear old message
+ for (int16_t j = 0; j < 20; j++) // Clear old message
rtscheck.RTS_SndData(' ', StatusMessageString + j);
rtscheck.RTS_SndData(statMsg, StatusMessageString);
}
@@ -2035,7 +1926,6 @@ namespace ExtUI {
onStartup();
startprogress = 0;
InforShowStatus = true;
- DEBUG_ECHOLNPGM("==onFactoryReset==");
}
void onMeshUpdate(const int8_t xpos, const int8_t ypos, probe_state_t state) {}
@@ -2049,7 +1939,7 @@ namespace ExtUI {
for (uint8_t outer = 0; outer < GRID_MAX_POINTS_Y; outer++)
for (uint8_t inner = 0; inner < GRID_MAX_POINTS_X; inner++) {
const bool zig = outer & 1; // != ((PR_OUTER_END) & 1);
- const xy_uint8_t point = { zig ? (GRID_MAX_POINTS_X - 1) - inner : inner, outer };
+ const xy_uint8_t point = { uint8_t(zig ? (GRID_MAX_POINTS_X - 1) - inner : inner), outer };
if (point.x == xpos && outer == ypos)
rtscheck.RTS_SndData(ExtUI::getMeshPoint(point) * 1000, AutolevelVal + (abl_probe_index * 2));
++abl_probe_index;
@@ -2064,7 +1954,6 @@ namespace ExtUI {
);
// Write to buffer
- DEBUG_ECHOLNPGM("Saving DWIN LCD setting from EEPROM");
memcpy(buff, &Settings, sizeof(creality_dwin_settings_t));
}
@@ -2079,48 +1968,34 @@ namespace ExtUI {
// If size is not the same, discard settings
if (eepromSettings.settings_size != sizeof(creality_dwin_settings_t)) {
- DEBUG_ECHOLNPGM("Discarding DWIN LCD setting from EEPROM - size incorrect");
onFactoryReset();
return;
}
if (eepromSettings.settings_version != dwin_settings_version) {
- DEBUG_ECHOLNPGM("Discarding DWIN LCD setting from EEPROM - settings version incorrect");
onFactoryReset();
return;
}
// Copy into final location
- DEBUG_ECHOLNPGM("Loading DWIN LCD setting from EEPROM");
memcpy(&Settings, &eepromSettings, sizeof(creality_dwin_settings_t));
- DEBUG_ECHOLNPGM("Setting Brightness : ", Settings.screen_brightness);
- DEBUG_ECHOLNPGM("Setting Standby : ", Settings.standby_screen_brightness);
- DEBUG_ECHOLNPGM("Setting Standby Time : ", Settings.standby_time_seconds);
- DEBUG_ECHOLNPGM("Setting Rotation : ", Settings.screen_rotation);
- DEBUG_ECHOLNPGM("Setting Volume : ", Settings.display_volume);
-
- DEBUG_ECHOLNPGM("Setting Standby On : ", Settings.display_standby);
- DEBUG_ECHOLNPGM("Setting Volume On : ", Settings.display_sound);
-
SetTouchScreenConfiguration();
}
void onSettingsStored(bool success) {
- DEBUG_ECHOLNPGM("==onSettingsStored==");
// This is called after the entire EEPROM has been written,
// whether successful or not.
}
void onSettingsLoaded(bool success) {
- DEBUG_ECHOLNPGM("==onConfigurationStoreRead==");
#if HAS_MESH
if (ExtUI::getMeshValid()) {
uint8_t abl_probe_index = 0;
for (uint8_t outer = 0; outer < GRID_MAX_POINTS_Y; outer++)
for (uint8_t inner = 0; inner < GRID_MAX_POINTS_X; inner++) {
const bool zig = outer & 1;
- const xy_uint8_t point = { zig ? (GRID_MAX_POINTS_X - 1) - inner : inner, outer };
+ const xy_uint8_t point = { uint8_t(zig ? (GRID_MAX_POINTS_X - 1) - inner : inner), outer };
rtscheck.RTS_SndData(ExtUI::getMeshPoint(point) * 1000, AutolevelVal + (abl_probe_index * 2));
++abl_probe_index;
}
@@ -2134,14 +2009,12 @@ namespace ExtUI {
}
#endif
- DEBUG_ECHOLNPGM("\n init zprobe_zoffset = ", getZOffset_mm());
rtscheck.RTS_SndData(getZOffset_mm() * 100, ProbeOffset_Z);
SetTouchScreenConfiguration();
}
#if ENABLED(POWER_LOSS_RECOVERY)
void onPowerLossResume() {
- DEBUG_ECHOLNPGM("==OnPowerLossResume==");
startprogress = 254;
InforShowStatus = true;
TPShowStatus = false;
@@ -2155,13 +2028,13 @@ namespace ExtUI {
// Called for temperature PID tuning result
rtscheck.RTS_SndData(pid_hotendAutoTemp, HotendPID_AutoTmp);
rtscheck.RTS_SndData(pid_bedAutoTemp, BedPID_AutoTmp);
- rtscheck.RTS_SndData((unsigned int)(getPID_Kp(E0) * 10), HotendPID_P);
- rtscheck.RTS_SndData((unsigned int)(getPID_Ki(E0) * 10), HotendPID_I);
- rtscheck.RTS_SndData((unsigned int)(getPID_Kd(E0) * 10), HotendPID_D);
+ rtscheck.RTS_SndData(uint16_t(getPID_Kp(E0)) * 10, HotendPID_P);
+ rtscheck.RTS_SndData(uint16_t(getPID_Ki(E0)) * 10, HotendPID_I);
+ rtscheck.RTS_SndData(uint16_t(getPID_Kd(E0)) * 10, HotendPID_D);
#if ENABLED(PIDTEMPBED)
- rtscheck.RTS_SndData((unsigned int)(getBedPID_Kp() * 10), BedPID_P);
- rtscheck.RTS_SndData((unsigned int)(getBedPID_Ki() * 10), BedPID_I);
- rtscheck.RTS_SndData((unsigned int)(getBedPID_Kd() * 10), BedPID_D);
+ rtscheck.RTS_SndData(uint16_t(getBedPID_Kp()) * 10, BedPID_P);
+ rtscheck.RTS_SndData(uint16_t(getBedPID_Ki()) * 10, BedPID_I);
+ rtscheck.RTS_SndData(uint16_t(getBedPID_Kd()) * 10, BedPID_D);
#endif
onStatusChanged(F("PID Tune Finished"));
}
@@ -2176,7 +2049,7 @@ namespace ExtUI {
for (uint8_t outer = 0; outer < GRID_MAX_POINTS_Y; outer++)
for (uint8_t inner = 0; inner < GRID_MAX_POINTS_X; inner++) {
const bool zig = outer & 1;
- const xy_uint8_t point = { zig ? (GRID_MAX_POINTS_X - 1) - inner : inner, outer };
+ const xy_uint8_t point = { uint8_t(zig ? (GRID_MAX_POINTS_X - 1) - inner : inner), outer };
rtscheck.RTS_SndData(ExtUI::getMeshPoint(point) * 1000, AutolevelVal + abl_probe_index * 2);
++abl_probe_index;
}
diff --git a/Marlin/src/lcd/extui/ia_creality/creality_extui.h b/Marlin/src/lcd/extui/ia_creality/creality_extui.h
index a051ea92c2..874a51b6f6 100644
--- a/Marlin/src/lcd/extui/ia_creality/creality_extui.h
+++ b/Marlin/src/lcd/extui/ia_creality/creality_extui.h
@@ -49,19 +49,21 @@
#define SizeofDatabuf 46
-/*************Register and Variable addr*****************/
+//#define FONT_EEPROM 90
+//#define AutoLeve_EEPROM 100
+//#define FanOn 255
+#define FanOff 0
+
+#define ExchangePageBase 0x5A010000UL // the first page ID. other page = first page ID + relevant num;
+#define StartSoundSet 0x060480A0UL // 06,start-music; 04, 4 musics; 80, the volume value; 04, return value about music number.
+
+// Register addresses
#define RegAddr_W 0x80
#define RegAddr_R 0x81
#define VarAddr_W 0x82
#define VarAddr_R 0x83
-#define ExchangePageBase (unsigned long)0x5A010000 // the first page ID. other page = first page ID + relevant num;
-#define StartSoundSet ((unsigned long)0x060480A0) // 06,start-music; 04, 4 musics; 80, the volume value; 04, return value about music number.
-//#define FONT_EEPROM 90
-//#define AutoLeve_EEPROM 100
-//#define FanOn 255
-#define FanOff 0
-/*variable addr*/
+// Variable addresses
#define ExchangepageAddr 0x0084
#define SoundAddr 0x00A0
#define StartIcon 0x1000
@@ -142,7 +144,7 @@
#define DisplayZaxis 0x104C
#define FilamentUnit1 0x1054
-#define Exchfilement 0x1056
+#define Exchfilament 0x1056
#define FilamentUnit2 0x1058
#define MacVersion 0x1060
@@ -193,13 +195,13 @@ namespace ExtUI {
} rx_datagram_state_t;
typedef struct DataBuf {
- unsigned char len;
- unsigned char head[2];
- unsigned char command;
- unsigned long addr;
- unsigned long bytelen;
- unsigned short data[32];
- unsigned char reserv[4];
+ uint8_t len;
+ uint8_t head[2];
+ uint8_t command;
+ uint32_t addr;
+ uint32_t bytelen;
+ uint16_t data[32];
+ uint8_t reserv[4];
} DB;
struct creality_dwin_settings_t {
@@ -220,27 +222,27 @@ namespace ExtUI {
class RTSSHOW {
public:
RTSSHOW();
- int RTS_RecData();
+ int16_t RTS_RecData();
void RTS_SDCardInit(void);
void RTS_SDCardUpate(bool, bool);
- int RTS_CheckFilament(int);
+ int16_t RTS_CheckFilament(int16_t);
void RTS_SndData(void);
- void RTS_SndData(const String &, unsigned long, unsigned char = VarAddr_W);
- void RTS_SndData(const char[], unsigned long, unsigned char = VarAddr_W);
- void RTS_SndData(char, unsigned long, unsigned char = VarAddr_W);
- void RTS_SndData(unsigned char*, unsigned long, unsigned char = VarAddr_W);
- void RTS_SndData(int, unsigned long, unsigned char = VarAddr_W);
- void RTS_SndData(float, unsigned long, unsigned char = VarAddr_W);
- void RTS_SndData(unsigned int,unsigned long, unsigned char = VarAddr_W);
- void RTS_SndData(long,unsigned long, unsigned char = VarAddr_W);
- void RTS_SndData(unsigned long,unsigned long, unsigned char = VarAddr_W);
+ void RTS_SndData(const String &, uint32_t, uint8_t=VarAddr_W);
+ void RTS_SndData(const char[], uint32_t, uint8_t=VarAddr_W);
+ void RTS_SndData(char, uint32_t, uint8_t=VarAddr_W);
+ void RTS_SndData(uint8_t*, uint32_t, uint8_t=VarAddr_W);
+ void RTS_SndData(int16_t, uint32_t, uint8_t=VarAddr_W);
+ void RTS_SndData(float, uint32_t, uint8_t=VarAddr_W);
+ void RTS_SndData(uint16_t, uint32_t, uint8_t=VarAddr_W);
+ void RTS_SndData(int32_t, uint32_t, uint8_t=VarAddr_W);
+ void RTS_SndData(uint32_t, uint32_t, uint8_t=VarAddr_W);
void RTS_SDcard_Stop();
void RTS_HandleData();
void RTS_Init();
DB recdat;
DB snddat;
- unsigned char databuf[SizeofDatabuf];
+ uint8_t databuf[SizeofDatabuf];
static rx_datagram_state_t rx_datagram_state;
static uint8_t rx_datagram_len;
@@ -250,13 +252,13 @@ namespace ExtUI {
static RTSSHOW rtscheck;
#define Addvalue 3
- #define PrintChoice_Value (0+Addvalue)
- #define Zoffset_Value (3+Addvalue)
- #define Setting_Value (8+Addvalue)
- #define XYZEaxis_Value (12+Addvalue)
- #define Filament_Value (15+Addvalue)
- #define Language_Value (18+Addvalue)
- #define Filename_Value (22+Addvalue)
+ #define PrintChoice_Value (0 + Addvalue)
+ #define Zoffset_Value (3 + Addvalue)
+ #define Setting_Value (8 + Addvalue)
+ #define XYZEaxis_Value (12 + Addvalue)
+ #define Filament_Value (15 + Addvalue)
+ #define Language_Value (18 + Addvalue)
+ #define Filename_Value (22 + Addvalue)
enum PROC_COM {
Printfile = 0,
@@ -279,7 +281,7 @@ namespace ExtUI {
Filename = Filename_Value
};
- const unsigned long Addrbuf[] = {
+ const uint32_t Addrbuf[] = {
0x1002, 0x1004, 0x1006, 0x1008, 0x100A, 0x100C, 0x1026, 0x1030, 0x1032, 0x1034, 0x103A,
0x103E, 0x1040, 0x1044, 0x1046, 0x1048, 0x104A, 0x104C, 0x1054, 0x1056, 0x1058,
0x105C, 0x105E, 0x105F, 0x1088, 0
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_wifi_tips.h b/Marlin/src/lcd/extui/mks_ui/draw_wifi_tips.h
index ad15238932..a289a80dc7 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_wifi_tips.h
+++ b/Marlin/src/lcd/extui/mks_ui/draw_wifi_tips.h
@@ -38,7 +38,7 @@ extern TIPS_TYPE wifi_tips_type;
typedef struct {
unsigned char timer;
- unsigned int timer_count;
+ uint16_t timer_count;
} TIPS_DISP;
extern TIPS_DISP tips_disp;
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 b31977e7ca..a5a8f7cbe4 100644
--- a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp
@@ -300,7 +300,7 @@ void lv_fill_rect(lv_coord_t x1, lv_coord_t y1, lv_coord_t x2, lv_coord_t y2, lv
#define TICK_CYCLE 1
-unsigned int getTickDiff(unsigned int curTick, unsigned int lastTick) {
+uint16_t getTickDiff(uint16_t curTick, uint16_t lastTick) {
return TICK_CYCLE * (lastTick <= curTick ? (curTick - lastTick) : (0xFFFFFFFF - lastTick + curTick));
}
diff --git a/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.cpp b/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.cpp
index 0e55b3448b..cac3d2a17d 100644
--- a/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.cpp
@@ -230,7 +230,7 @@ void WifiSerial::_rx_complete_irq(serial_t *obj) {
WRITE(WIFI_IO1_PIN, HIGH);
- rx_buffer_index_t i = (unsigned int)(obj->rx_head + 1) % WIFI_RX_BUF_SIZE;
+ rx_buffer_index_t i = uint16_t(obj->rx_head + 1) % WIFI_RX_BUF_SIZE;
// if we should be storing the received character into the location
// just before the tail (meaning that the head would advance to the
@@ -292,7 +292,7 @@ void WifiSerial::begin(unsigned long baud, byte config) {
case 0: Error_Handler(); break;
}
- uart_init(&_serial, (uint32_t)baud, databits, parity, stopbits);
+ uart_init(&_serial, uint32_t(baud), databits, parity, stopbits);
enableHalfDuplexRx();
if (baud == WIFI_BAUDRATE)
uart_attach_rx_callback(&_serial, _rx_complete_irq);
@@ -311,7 +311,7 @@ void WifiSerial::end() {
}
int WifiSerial::available() {
- return ((unsigned int)(WIFI_RX_BUF_SIZE + _serial.rx_head - _serial.rx_tail)) % WIFI_RX_BUF_SIZE;
+ return uint16_t(WIFI_RX_BUF_SIZE + _serial.rx_head - _serial.rx_tail) % WIFI_RX_BUF_SIZE;
}
//
diff --git a/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp b/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp
index a8d30b442a..215281d450 100644
--- a/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp
@@ -59,7 +59,7 @@ extern uint8_t Explore_Disk(char *path, uint8_t recu_level);
extern uint8_t commands_in_queue;
extern uint8_t sel_id;
-extern unsigned int getTickDiff(unsigned int curTick, unsigned int lastTick);
+extern uint16_t getTickDiff(uint16_t curTick, uint16_t lastTick);
volatile SZ_USART_FIFO WifiRxFifo;
diff --git a/Marlin/src/lcd/extui/mks_ui/wifi_upload.cpp b/Marlin/src/lcd/extui/mks_ui/wifi_upload.cpp
index 18a311303c..44869d4770 100644
--- a/Marlin/src/lcd/extui/mks_ui/wifi_upload.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/wifi_upload.cpp
@@ -79,9 +79,9 @@ const uint32_t ESP_FLASH_ADDR = 0x40200000; // address of start of Flash
UPLOAD_STRUCT esp_upload;
-static const unsigned int retriesPerReset = 3;
+static const uint16_t retriesPerReset = 3;
static const uint32_t connectAttemptInterval = 50;
-static const unsigned int percentToReportIncrement = 5; // how often we report % complete
+static const uint16_t percentToReportIncrement = 5; // how often we report % complete
static const uint32_t defaultTimeout = 500;
static const uint32_t eraseTimeout = 15000;
static const uint32_t blockWriteTimeout = 200;
@@ -151,7 +151,7 @@ void flushInput() {
uint32_t getData(unsigned byteCnt, const uint8_t *buf, int ofst) {
uint32_t val = 0;
if (buf && byteCnt) {
- unsigned int shiftCnt = 0;
+ uint16_t shiftCnt = 0;
NOMORE(byteCnt, 4U);
do {
val |= (uint32_t)buf[ofst++] << shiftCnt;
@@ -348,7 +348,7 @@ EspUploadResult readPacket(uint8_t op, uint32_t *valp, size_t *bodyLen, uint32_t
// Send a block of data performing SLIP encoding of the content.
void _writePacket(const uint8_t *data, size_t len) {
unsigned char outBuf[2048] = {0};
- unsigned int outIndex = 0;
+ uint16_t outIndex = 0;
while (len != 0) {
if (*data == 0xC0) {
outBuf[outIndex++] = 0xDB;
@@ -597,7 +597,7 @@ void upload_spin() {
case uploading:
// The ESP needs several milliseconds to recover from one packet before it will accept another
if (getWifiTickDiff(esp_upload.lastAttemptTime, getWifiTick()) >= 15) {
- unsigned int percentComplete;
+ uint16_t percentComplete;
const uint32_t blkCnt = (esp_upload.fileSize + EspFlashBlockSize - 1) / EspFlashBlockSize;
if (esp_upload.uploadBlockNumber < blkCnt) {
esp_upload.uploadResult = flashWriteBlock(0, 0);
diff --git a/Marlin/src/lcd/language/language_an.h b/Marlin/src/lcd/language/language_an.h
index 1d4801278c..a7da7c6e96 100644
--- a/Marlin/src/lcd/language/language_an.h
+++ b/Marlin/src/lcd/language/language_an.h
@@ -93,7 +93,7 @@ namespace Language_an {
LSTR MSG_MOVE_50MM = _UxGT("Mover 50mm");
LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
LSTR MSG_SPEED = _UxGT("Velocidat");
- LSTR MSG_BED_Z = _UxGT("Base Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Base Z");
LSTR MSG_NOZZLE = _UxGT("Boquilla");
LSTR MSG_NOZZLE_N = _UxGT("Boquilla ~");
LSTR MSG_BED = _UxGT("Base");
diff --git a/Marlin/src/lcd/language/language_bg.h b/Marlin/src/lcd/language/language_bg.h
index 312ada7b10..87199ffbc9 100644
--- a/Marlin/src/lcd/language/language_bg.h
+++ b/Marlin/src/lcd/language/language_bg.h
@@ -82,7 +82,7 @@ namespace Language_bg {
LSTR MSG_MOVE_50MM = _UxGT("Премести с 50mm");
LSTR MSG_MOVE_100MM = _UxGT("Премести с 100mm");
LSTR MSG_SPEED = _UxGT("Скорост");
- LSTR MSG_BED_Z = _UxGT("Bed Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Bed Z");
LSTR MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" Дюза");
LSTR MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" Дюза ~");
LSTR MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" Легло");
diff --git a/Marlin/src/lcd/language/language_ca.h b/Marlin/src/lcd/language/language_ca.h
index 13b5d70837..fec9c44741 100644
--- a/Marlin/src/lcd/language/language_ca.h
+++ b/Marlin/src/lcd/language/language_ca.h
@@ -93,7 +93,7 @@ namespace Language_ca {
LSTR MSG_MOVE_50MM = _UxGT("Mou 50mm");
LSTR MSG_MOVE_100MM = _UxGT("Mou 100mm");
LSTR MSG_SPEED = _UxGT("Velocitat");
- LSTR MSG_BED_Z = _UxGT("Llit Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Llit Z");
LSTR MSG_NOZZLE = _UxGT("Nozzle");
LSTR MSG_NOZZLE_N = _UxGT("Nozzle ~");
LSTR MSG_BED = _UxGT("Llit");
diff --git a/Marlin/src/lcd/language/language_cz.h b/Marlin/src/lcd/language/language_cz.h
index bb930eb784..f0da141069 100644
--- a/Marlin/src/lcd/language/language_cz.h
+++ b/Marlin/src/lcd/language/language_cz.h
@@ -243,7 +243,7 @@ namespace Language_cz {
LSTR MSG_MOVE_50MM = _UxGT("Posunout o 50mm");
LSTR MSG_MOVE_100MM = _UxGT("Posunout o 100mm");
LSTR MSG_SPEED = _UxGT("Rychlost");
- LSTR MSG_BED_Z = _UxGT("Výška podl.");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Výška podl.");
LSTR MSG_NOZZLE = _UxGT("Tryska");
LSTR MSG_NOZZLE_N = _UxGT("Tryska ~");
LSTR MSG_BED = _UxGT("Podložka");
diff --git a/Marlin/src/lcd/language/language_da.h b/Marlin/src/lcd/language/language_da.h
index 56c53b84fd..ec1a769783 100644
--- a/Marlin/src/lcd/language/language_da.h
+++ b/Marlin/src/lcd/language/language_da.h
@@ -84,7 +84,7 @@ namespace Language_da {
LSTR MSG_MOVE_50MM = _UxGT("Flyt 50mm");
LSTR MSG_MOVE_100MM = _UxGT("Flyt 100mm");
LSTR MSG_SPEED = _UxGT("Hastighed");
- LSTR MSG_BED_Z = _UxGT("Plade Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Plade Z");
LSTR MSG_NOZZLE = _UxGT("Dyse");
LSTR MSG_NOZZLE_N = _UxGT("Dyse ~");
diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h
index 1cbddf860e..32da975e04 100644
--- a/Marlin/src/lcd/language/language_de.h
+++ b/Marlin/src/lcd/language/language_de.h
@@ -308,7 +308,7 @@ namespace Language_de {
LSTR MSG_MOVE_01IN = _UxGT("0.100 in");
LSTR MSG_MOVE_1IN = _UxGT("1.000 in");
LSTR MSG_SPEED = _UxGT("Geschw.");
- LSTR MSG_BED_Z = _UxGT("Bett Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Bett Z");
LSTR MSG_NOZZLE = _UxGT("Düse");
LSTR MSG_NOZZLE_N = _UxGT("Düse ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Düse geparkt");
diff --git a/Marlin/src/lcd/language/language_el.h b/Marlin/src/lcd/language/language_el.h
index 57af804147..a411f33155 100644
--- a/Marlin/src/lcd/language/language_el.h
+++ b/Marlin/src/lcd/language/language_el.h
@@ -102,7 +102,7 @@ namespace Language_el {
LSTR MSG_MOVE_50MM = _UxGT("Μετακίνηση 50 μμ");
LSTR MSG_MOVE_100MM = _UxGT("Μετακίνηση 100 μμ");
LSTR MSG_SPEED = _UxGT("Ταχύτητα");
- LSTR MSG_BED_Z = _UxGT("Επ. Εκτύπωσης Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Επ. Εκτύπωσης Z");
LSTR MSG_NOZZLE = _UxGT("Ακροφύσιο");
LSTR MSG_NOZZLE_N = _UxGT("Ακροφύσιο ~");
LSTR MSG_BED = _UxGT("Επ. Εκτύπωσης");
diff --git a/Marlin/src/lcd/language/language_el_gr.h b/Marlin/src/lcd/language/language_el_gr.h
index 08f647f705..463d6d4c7b 100644
--- a/Marlin/src/lcd/language/language_el_gr.h
+++ b/Marlin/src/lcd/language/language_el_gr.h
@@ -91,7 +91,7 @@ namespace Language_el_gr {
LSTR MSG_MOVE_50MM = _UxGT("Μετακίνηση 50 μμ");
LSTR MSG_MOVE_100MM = _UxGT("Μετακίνηση 100 μμ");
LSTR MSG_SPEED = _UxGT("Ταχύτητα");
- LSTR MSG_BED_Z = _UxGT("Κλίνη Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Κλίνη Z");
LSTR MSG_NOZZLE = _UxGT("Ακροφύσιο");
LSTR MSG_NOZZLE_N = _UxGT("Ακροφύσιο ~");
LSTR MSG_BED = _UxGT("Κλίνη");
diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h
index 5adc5275fc..0a695bfe06 100644
--- a/Marlin/src/lcd/language/language_en.h
+++ b/Marlin/src/lcd/language/language_en.h
@@ -329,7 +329,7 @@ namespace Language_en {
LSTR MSG_MOVE_1IN = _UxGT("Move 1.0in");
LSTR MSG_LIVE_MOVE = _UxGT("Live Move");
LSTR MSG_SPEED = _UxGT("Speed");
- LSTR MSG_BED_Z = _UxGT("Bed Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Bed Z");
LSTR MSG_NOZZLE = _UxGT("Nozzle");
LSTR MSG_NOZZLE_N = _UxGT("Nozzle ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Nozzle Parked");
diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h
index d95275c317..13d9a9b655 100644
--- a/Marlin/src/lcd/language/language_es.h
+++ b/Marlin/src/lcd/language/language_es.h
@@ -237,7 +237,7 @@ namespace Language_es {
LSTR MSG_MOVE_50MM = _UxGT("Mover 50mm");
LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
LSTR MSG_SPEED = _UxGT("Velocidad");
- LSTR MSG_BED_Z = _UxGT("Cama Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Cama Z");
LSTR MSG_NOZZLE = _UxGT("Boquilla");
LSTR MSG_NOZZLE_N = _UxGT("Boquilla ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Boquilla Aparcada");
diff --git a/Marlin/src/lcd/language/language_eu.h b/Marlin/src/lcd/language/language_eu.h
index 0c29cdd2aa..f000b5fcfb 100644
--- a/Marlin/src/lcd/language/language_eu.h
+++ b/Marlin/src/lcd/language/language_eu.h
@@ -146,7 +146,7 @@ namespace Language_eu {
LSTR MSG_MOVE_50MM = _UxGT("Mugitu 50mm");
LSTR MSG_MOVE_100MM = _UxGT("Mugitu 100mm");
LSTR MSG_SPEED = _UxGT("Abiadura");
- LSTR MSG_BED_Z = _UxGT("Z Ohea");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Z Ohea");
LSTR MSG_NOZZLE = _UxGT("Pita");
LSTR MSG_NOZZLE_N = _UxGT("Pita ~");
LSTR MSG_BED = _UxGT("Ohea");
diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h
index fdb556abe8..e274de8db6 100644
--- a/Marlin/src/lcd/language/language_fr.h
+++ b/Marlin/src/lcd/language/language_fr.h
@@ -246,7 +246,7 @@ namespace Language_fr {
LSTR MSG_MOVE_05IN = _UxGT("Déplacer 0.5\"");
LSTR MSG_MOVE_1IN = _UxGT("Déplacer 1\"");
LSTR MSG_SPEED = _UxGT("Vitesse");
- LSTR MSG_BED_Z = _UxGT("Lit Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Lit Z");
LSTR MSG_NOZZLE = _UxGT("Buse");
LSTR MSG_NOZZLE_N = _UxGT("Buse ~");
LSTR MSG_BED = _UxGT("Lit");
diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h
index 28917bad35..7d6b285834 100644
--- a/Marlin/src/lcd/language/language_gl.h
+++ b/Marlin/src/lcd/language/language_gl.h
@@ -234,7 +234,7 @@ namespace Language_gl {
LSTR MSG_MOVE_50MM = _UxGT("Mover 50mm");
LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
LSTR MSG_SPEED = _UxGT("Velocidade");
- LSTR MSG_BED_Z = _UxGT("Cama Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Cama Z");
LSTR MSG_NOZZLE = _UxGT("Bico");
LSTR MSG_NOZZLE_N = _UxGT("Bico ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Bico Estacionado");
diff --git a/Marlin/src/lcd/language/language_hr.h b/Marlin/src/lcd/language/language_hr.h
index 36eaf78acb..697341fc44 100644
--- a/Marlin/src/lcd/language/language_hr.h
+++ b/Marlin/src/lcd/language/language_hr.h
@@ -89,7 +89,7 @@ namespace Language_hr {
LSTR MSG_MOVE_50MM = _UxGT("Miči 50mm");
LSTR MSG_MOVE_100MM = _UxGT("Miči 100mm");
LSTR MSG_SPEED = _UxGT("Brzina");
- LSTR MSG_BED_Z = _UxGT("Bed Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Bed Z");
LSTR MSG_NOZZLE = _UxGT("Dizna");
LSTR MSG_NOZZLE_N = _UxGT("Dizna ~");
LSTR MSG_BED = _UxGT("Bed");
diff --git a/Marlin/src/lcd/language/language_hu.h b/Marlin/src/lcd/language/language_hu.h
index 61c7d9f9c4..e17de38747 100644
--- a/Marlin/src/lcd/language/language_hu.h
+++ b/Marlin/src/lcd/language/language_hu.h
@@ -272,7 +272,7 @@ namespace Language_hu {
LSTR MSG_MOVE_05IN = _UxGT("Mozgás 12.7mm");
LSTR MSG_MOVE_1IN = _UxGT("Mozgáá 25.4mm");
LSTR MSG_SPEED = _UxGT("Sebesség");
- LSTR MSG_BED_Z = _UxGT("Z ágy");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Z ágy");
LSTR MSG_NOZZLE = _UxGT("Fej");
LSTR MSG_NOZZLE_N = _UxGT("Fej ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Fej parkolva");
diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h
index ee8d51203c..0caf950aa5 100644
--- a/Marlin/src/lcd/language/language_it.h
+++ b/Marlin/src/lcd/language/language_it.h
@@ -326,7 +326,7 @@ namespace Language_it {
LSTR MSG_MOVE_1IN = _UxGT("Muovi di 1\"");
LSTR MSG_LIVE_MOVE = _UxGT("Modalità Live");
LSTR MSG_SPEED = _UxGT("Velocità");
- LSTR MSG_BED_Z = _UxGT("Piatto Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Piatto Z");
LSTR MSG_NOZZLE = _UxGT("Ugello");
LSTR MSG_NOZZLE_N = _UxGT("Ugello ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Ugello parcheggiato");
diff --git a/Marlin/src/lcd/language/language_jp_kana.h b/Marlin/src/lcd/language/language_jp_kana.h
index 335d4533da..8ed1a7865e 100644
--- a/Marlin/src/lcd/language/language_jp_kana.h
+++ b/Marlin/src/lcd/language/language_jp_kana.h
@@ -102,7 +102,7 @@ namespace Language_jp_kana {
LSTR MSG_MOVE_50MM = _UxGT(" 50mm イドウ"); // "Move 50mm"
LSTR MSG_MOVE_100MM = _UxGT(" 100mm イドウ"); // "Move 100mm"
LSTR MSG_SPEED = _UxGT("ソクド"); // "Speed"
- LSTR MSG_BED_Z = _UxGT("Zオフセット"); // "Bed Z"
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Zオフセット"); // "Bed Z"
LSTR MSG_NOZZLE = _UxGT("ノズル"); // "Nozzle"
LSTR MSG_BED = _UxGT("ベッド"); // "Bed"
LSTR MSG_FAN_SPEED = _UxGT("ファンソクド"); // "Fan speed"
diff --git a/Marlin/src/lcd/language/language_nl.h b/Marlin/src/lcd/language/language_nl.h
index 9ad16bcd8c..6397a95a7e 100644
--- a/Marlin/src/lcd/language/language_nl.h
+++ b/Marlin/src/lcd/language/language_nl.h
@@ -93,7 +93,7 @@ namespace Language_nl {
LSTR MSG_MOVE_10MM = _UxGT("Verplaats 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Verplaats 100mm");
LSTR MSG_SPEED = _UxGT("Snelheid");
- LSTR MSG_BED_Z = _UxGT("Bed Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Bed Z");
LSTR MSG_NOZZLE = _UxGT("Nozzle");
LSTR MSG_NOZZLE_N = _UxGT("Nozzle ~");
LSTR MSG_BED = _UxGT("Bed");
diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h
index b39c084ec8..15d6a29053 100644
--- a/Marlin/src/lcd/language/language_pl.h
+++ b/Marlin/src/lcd/language/language_pl.h
@@ -248,7 +248,7 @@ namespace Language_pl {
LSTR MSG_MOVE_001IN = _UxGT("Przesuń co 0.01 cala");
LSTR MSG_MOVE_01IN = _UxGT("Przesuń co 0.1 cala");
LSTR MSG_SPEED = _UxGT("Predkość");
- LSTR MSG_BED_Z = _UxGT("Stół Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Stół Z");
LSTR MSG_NOZZLE = _UxGT("Dysza");
LSTR MSG_NOZZLE_N = _UxGT("Dysza ~");
LSTR MSG_NOZZLE_STANDBY = _UxGT("Dysza w oczekiwaniu");
diff --git a/Marlin/src/lcd/language/language_pt.h b/Marlin/src/lcd/language/language_pt.h
index 55d9c1d7c5..4d9a8ae6da 100644
--- a/Marlin/src/lcd/language/language_pt.h
+++ b/Marlin/src/lcd/language/language_pt.h
@@ -87,7 +87,7 @@ namespace Language_pt {
LSTR MSG_MOVE_10MM = _UxGT("Mover 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
LSTR MSG_SPEED = _UxGT("Velocidade");
- LSTR MSG_BED_Z = _UxGT("Base Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Base Z");
LSTR MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" Bico");
LSTR MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" Bico ~");
LSTR MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" Base");
diff --git a/Marlin/src/lcd/language/language_pt_br.h b/Marlin/src/lcd/language/language_pt_br.h
index d52728d107..1bd3f61682 100644
--- a/Marlin/src/lcd/language/language_pt_br.h
+++ b/Marlin/src/lcd/language/language_pt_br.h
@@ -219,7 +219,7 @@ namespace Language_pt_br {
LSTR MSG_MOVE_10MM = _UxGT("Mover 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
LSTR MSG_SPEED = _UxGT("Velocidade");
- LSTR MSG_BED_Z = _UxGT("Base Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Base Z");
LSTR MSG_NOZZLE = _UxGT("Bocal");
LSTR MSG_NOZZLE_N = _UxGT("Bocal ~");
LSTR MSG_BED = _UxGT("Mesa");
diff --git a/Marlin/src/lcd/language/language_ro.h b/Marlin/src/lcd/language/language_ro.h
index c5fdcc786f..162f3a3616 100644
--- a/Marlin/src/lcd/language/language_ro.h
+++ b/Marlin/src/lcd/language/language_ro.h
@@ -232,7 +232,7 @@ namespace Language_ro {
LSTR MSG_MOVE_10MM = _UxGT("Move 10mm");
LSTR MSG_MOVE_100MM = _UxGT("Move 100mm");
LSTR MSG_SPEED = _UxGT("Speed");
- LSTR MSG_BED_Z = _UxGT("Bed Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Bed Z");
LSTR MSG_NOZZLE = _UxGT("Nozzle");
LSTR MSG_NOZZLE_N = _UxGT("Nozzle ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Nozzle Parked");
diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h
index b9cb0c5ebf..75579972a2 100644
--- a/Marlin/src/lcd/language/language_ru.h
+++ b/Marlin/src/lcd/language/language_ru.h
@@ -342,7 +342,7 @@ namespace Language_ru {
LSTR MSG_MOVE_10MM = _UxGT("Движение 10мм");
LSTR MSG_MOVE_100MM = _UxGT("Движение 100mm");
LSTR MSG_SPEED = _UxGT("Скорость");
- LSTR MSG_BED_Z = _UxGT("Z стола");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Z стола");
LSTR MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE _UxGT("C");
LSTR MSG_NOZZLE_N = _UxGT("Сопло ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Сопло запарковано");
diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h
index 4167fc802a..0e00ce4b12 100644
--- a/Marlin/src/lcd/language/language_sk.h
+++ b/Marlin/src/lcd/language/language_sk.h
@@ -327,7 +327,7 @@ namespace Language_sk {
LSTR MSG_MOVE_1IN = _UxGT("Posunúť o 1,0in");
LSTR MSG_LIVE_MOVE = _UxGT("Živý pohyb");
LSTR MSG_SPEED = _UxGT("Rýchlosť");
- LSTR MSG_BED_Z = _UxGT("Výška podl.");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Výška podl.");
LSTR MSG_NOZZLE = _UxGT("Tryska");
LSTR MSG_NOZZLE_N = _UxGT("Tryska ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Tryska zaparkovaná");
diff --git a/Marlin/src/lcd/language/language_sv.h b/Marlin/src/lcd/language/language_sv.h
index e550e877a1..c7e6c19bd7 100644
--- a/Marlin/src/lcd/language/language_sv.h
+++ b/Marlin/src/lcd/language/language_sv.h
@@ -262,7 +262,7 @@ namespace Language_sv {
LSTR MSG_MOVE_001IN = _UxGT("Flytta 0.01tum");
LSTR MSG_MOVE_01IN = _UxGT("Flytta 0.1tum");
LSTR MSG_SPEED = _UxGT("Hastighet");
- LSTR MSG_BED_Z = _UxGT("Bädd Z");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Bädd Z");
LSTR MSG_NOZZLE = _UxGT("Munstycke");
LSTR MSG_NOZZLE_N = _UxGT("Munstycke ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Munstycke Parkerad");
diff --git a/Marlin/src/lcd/language/language_tr.h b/Marlin/src/lcd/language/language_tr.h
index 5ff8ab7b48..cb3c6a03ae 100644
--- a/Marlin/src/lcd/language/language_tr.h
+++ b/Marlin/src/lcd/language/language_tr.h
@@ -235,7 +235,7 @@ namespace Language_tr {
LSTR MSG_MOVE_10MM = _UxGT("10mm");
LSTR MSG_MOVE_100MM = _UxGT("100mm");
LSTR MSG_SPEED = _UxGT("Hız");
- LSTR MSG_BED_Z = _UxGT("Z Mesafesi");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Z Mesafesi");
LSTR MSG_NOZZLE = _UxGT("Nozul");
LSTR MSG_NOZZLE_N = _UxGT("Nozul ~");
LSTR MSG_BED = _UxGT("Tabla");
diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h
index f4e7741f93..dc03265524 100644
--- a/Marlin/src/lcd/language/language_uk.h
+++ b/Marlin/src/lcd/language/language_uk.h
@@ -343,7 +343,7 @@ namespace Language_uk {
LSTR MSG_MOVE_10MM = _UxGT("Рух 10мм");
LSTR MSG_MOVE_100MM = _UxGT("Рух 100mm");
LSTR MSG_SPEED = _UxGT("Швидкість");
- LSTR MSG_BED_Z = _UxGT("Z Столу");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Z Столу");
LSTR MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE _UxGT("C");
LSTR MSG_NOZZLE_N = _UxGT("Сопло ~");
LSTR MSG_NOZZLE_PARKED = _UxGT("Сопло запарковане");
diff --git a/Marlin/src/lcd/language/language_vi.h b/Marlin/src/lcd/language/language_vi.h
index 575191f50b..c01b2f44fa 100644
--- a/Marlin/src/lcd/language/language_vi.h
+++ b/Marlin/src/lcd/language/language_vi.h
@@ -207,7 +207,7 @@ namespace Language_vi {
LSTR MSG_MOVE_10MM = _UxGT("Di chuyển 10mm"); // Move 10mm
LSTR MSG_MOVE_100MM = _UxGT("Di chuyển 100mm"); // Move 100mm
LSTR MSG_SPEED = _UxGT("Tốc độ"); // Speed
- LSTR MSG_BED_Z = _UxGT("Z Bàn");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Z Bàn");
LSTR MSG_NOZZLE = _UxGT("Đầu phun"); // Nozzle
LSTR MSG_NOZZLE_N = _UxGT("Đầu phun ~");
LSTR MSG_BED = _UxGT("Bàn"); // bed
diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h
index 6e2864ce6f..4dccbc4f09 100644
--- a/Marlin/src/lcd/language/language_zh_CN.h
+++ b/Marlin/src/lcd/language/language_zh_CN.h
@@ -232,7 +232,7 @@ namespace Language_zh_CN {
LSTR MSG_MOVE_10MM = _UxGT("移动 10 mm"); // "Move 10mm"
LSTR MSG_MOVE_100MM = _UxGT("移动 100 mm"); // "Move 100mm"
LSTR MSG_SPEED = _UxGT("速率"); // "Speed"
- LSTR MSG_BED_Z = _UxGT("热床Z"); // "Bed Z"
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("热床Z"); // "Bed Z"
LSTR MSG_NOZZLE = _UxGT("喷嘴"); // "Nozzle" 噴嘴
LSTR MSG_NOZZLE_N = _UxGT("喷嘴 ~"); // "Nozzle" 噴嘴
LSTR MSG_NOZZLE_PARKED = _UxGT("喷嘴已停靠");
diff --git a/Marlin/src/lcd/language/language_zh_TW.h b/Marlin/src/lcd/language/language_zh_TW.h
index 79d4ba75a7..4ba94f3014 100644
--- a/Marlin/src/lcd/language/language_zh_TW.h
+++ b/Marlin/src/lcd/language/language_zh_TW.h
@@ -229,7 +229,7 @@ namespace Language_zh_TW {
LSTR MSG_MOVE_50MM = _UxGT("移動 50 mm"); // "Move 50mm"
LSTR MSG_MOVE_100MM = _UxGT("移動 100 mm"); // "Move 100mm"
LSTR MSG_SPEED = _UxGT("速率"); // "Speed"
- LSTR MSG_BED_Z = _UxGT("熱床Z"); // "Bed Z"
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("熱床Z"); // "Bed Z"
LSTR MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴"); // "Nozzle" 噴嘴
LSTR MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ~");
LSTR MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" 熱床"); // "Bed"
diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp
index 5d264198a3..d10ae7c5cc 100644
--- a/Marlin/src/lcd/marlinui.cpp
+++ b/Marlin/src/lcd/marlinui.cpp
@@ -1831,7 +1831,7 @@ void MarlinUI::init() {
#endif
}
- #if EITHER(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
+ #if EITHER(BABYSTEP_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
void MarlinUI::zoffset_overlay(const_float_t zvalue) {
// Determine whether the user is raising or lowering the nozzle.
static int8_t dir;
diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h
index 827a71a29d..fa18878c1b 100644
--- a/Marlin/src/lcd/marlinui.h
+++ b/Marlin/src/lcd/marlinui.h
@@ -506,7 +506,7 @@ public:
static bool old_is_printing;
#endif
- #if EITHER(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
+ #if EITHER(BABYSTEP_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
static void zoffset_overlay(const int8_t dir);
static void zoffset_overlay(const_float_t zvalue);
#endif
diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp
index 6389383d28..7f55f79f03 100644
--- a/Marlin/src/lcd/menu/menu.cpp
+++ b/Marlin/src/lcd/menu/menu.cpp
@@ -321,7 +321,7 @@ void scroll_screen(const uint8_t limit, const bool is_menu) {
if (ui.should_draw()) {
if (do_probe) {
MenuEditItemBase::draw_edit_screen(GET_TEXT_F(MSG_ZPROBE_ZOFFSET), BABYSTEP_TO_STR(probe.offset.z));
- TERN_(BABYSTEP_ZPROBE_GFX_OVERLAY, ui.zoffset_overlay(probe.offset.z));
+ TERN_(BABYSTEP_GFX_OVERLAY, ui.zoffset_overlay(probe.offset.z));
}
else {
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
diff --git a/Marlin/src/lcd/menu/menu_bed_leveling.cpp b/Marlin/src/lcd/menu/menu_bed_leveling.cpp
index 9505a82dd7..d25d35011e 100644
--- a/Marlin/src/lcd/menu/menu_bed_leveling.cpp
+++ b/Marlin/src/lcd/menu/menu_bed_leveling.cpp
@@ -283,7 +283,7 @@ void menu_bed_leveling() {
#else
#define LCD_Z_OFFSET_TYPE float42_52 // Values from -99.99 to 99.99
#endif
- EDIT_ITEM(LCD_Z_OFFSET_TYPE, MSG_BED_Z, &bedlevel.z_offset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
+ EDIT_ITEM(LCD_Z_OFFSET_TYPE, MSG_MESH_Z_OFFSET, &bedlevel.z_offset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
#endif
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
diff --git a/Marlin/src/lcd/menu/menu_tune.cpp b/Marlin/src/lcd/menu/menu_tune.cpp
index 423af4e5a1..8c4b2b1cfc 100644
--- a/Marlin/src/lcd/menu/menu_tune.cpp
+++ b/Marlin/src/lcd/menu/menu_tune.cpp
@@ -120,7 +120,7 @@ void menu_tune() {
// Manual bed leveling, Bed Z:
//
#if BOTH(MESH_BED_LEVELING, LCD_BED_LEVELING)
- EDIT_ITEM(float43, MSG_BED_Z, &bedlevel.z_offset, -1, 1);
+ EDIT_ITEM(float43, MSG_MESH_Z_OFFSET, &bedlevel.z_offset, -1, 1);
#endif
//
diff --git a/buildroot/tests/FYSETC_F6 b/buildroot/tests/FYSETC_F6
index 24fe550157..5129ff9807 100755
--- a/buildroot/tests/FYSETC_F6
+++ b/buildroot/tests/FYSETC_F6
@@ -11,7 +11,7 @@ set -e
#
restore_configs
opt_set MOTHERBOARD BOARD_FYSETC_F6_13 LCD_SERIAL_PORT 1 DGUS_LCD_UI FYSETC
-exec_test $1 $2 "FYSETC F6 1.3 with DGUS" "$3"
+exec_test $1 $2 "FYSETC F6 1.3 with DGUS (FYSETC)" "$3"
#
# Delta Config (generic) + UBL + ALLEN_KEY + EEPROM_SETTINGS + OLED_PANEL_TINYBOY2
diff --git a/buildroot/tests/LPC1768 b/buildroot/tests/LPC1768
index 2e680b60d7..37cc705c0c 100755
--- a/buildroot/tests/LPC1768
+++ b/buildroot/tests/LPC1768
@@ -44,7 +44,7 @@ opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER ADAPTIVE_FAN_SLOWING TE
FILAMENT_WIDTH_SENSOR FILAMENT_LCD_DISPLAY PID_EXTRUSION_SCALING SOUND_MENU_ITEM \
NOZZLE_AS_PROBE AUTO_BED_LEVELING_BILINEAR PREHEAT_BEFORE_LEVELING G29_RETRY_AND_RECOVER Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
ASSISTED_TRAMMING ASSISTED_TRAMMING_WIZARD REPORT_TRAMMING_MM ASSISTED_TRAMMING_WAIT_POSITION \
- BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET BABYSTEP_ZPROBE_GFX_OVERLAY \
+ BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET BABYSTEP_GFX_OVERLAY \
PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE SLOW_PWM_HEATERS PIDTEMPBED EEPROM_SETTINGS INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT \
Z_SAFE_HOMING ADVANCED_PAUSE_FEATURE PARK_HEAD_ON_PAUSE \
HOST_KEEPALIVE_FEATURE HOST_ACTION_COMMANDS HOST_PROMPT_SUPPORT \
diff --git a/buildroot/tests/SAMD21_minitronics20 b/buildroot/tests/SAMD21_minitronics20
index 420495bb76..b46fb9f08a 100755
--- a/buildroot/tests/SAMD21_minitronics20
+++ b/buildroot/tests/SAMD21_minitronics20
@@ -24,7 +24,7 @@ opt_enable ENDSTOP_INTERRUPTS_FEATURE BLTOUCH Z_MIN_PROBE_REPEATABILITY_TEST \
STATUS_MESSAGE_SCROLLING SET_PROGRESS_MANUALLY SHOW_REMAINING_TIME SET_REMAINING_TIME \
LONG_FILENAME_HOST_SUPPORT CUSTOM_FIRMWARE_UPLOAD M20_TIMESTAMP_SUPPORT \
SCROLL_LONG_FILENAMES BABYSTEPPING DOUBLECLICK_FOR_Z_BABYSTEPPING \
- MOVE_Z_WHEN_IDLE BABYSTEP_ZPROBE_OFFSET BABYSTEP_ZPROBE_GFX_OVERLAY \
+ MOVE_Z_WHEN_IDLE BABYSTEP_ZPROBE_OFFSET BABYSTEP_GFX_OVERLAY \
LIN_ADVANCE ADVANCED_PAUSE_FEATURE PARK_HEAD_ON_PAUSE MONITOR_DRIVER_STATUS SENSORLESS_HOMING \
SQUARE_WAVE_STEPPING
exec_test $1 $2 "Minitronics 2.0 with assorted features" "$3"
diff --git a/buildroot/tests/SAMD51_grandcentral_m4 b/buildroot/tests/SAMD51_grandcentral_m4
index ef67e061fe..042733072d 100755
--- a/buildroot/tests/SAMD51_grandcentral_m4
+++ b/buildroot/tests/SAMD51_grandcentral_m4
@@ -24,7 +24,7 @@ opt_enable ENDSTOP_INTERRUPTS_FEATURE S_CURVE_ACCELERATION BLTOUCH Z_MIN_PROBE_R
STATUS_MESSAGE_SCROLLING SET_PROGRESS_MANUALLY SHOW_REMAINING_TIME SET_REMAINING_TIME \
LONG_FILENAME_HOST_SUPPORT CUSTOM_FIRMWARE_UPLOAD M20_TIMESTAMP_SUPPORT \
SCROLL_LONG_FILENAMES BABYSTEPPING DOUBLECLICK_FOR_Z_BABYSTEPPING \
- MOVE_Z_WHEN_IDLE BABYSTEP_ZPROBE_OFFSET BABYSTEP_ZPROBE_GFX_OVERLAY \
+ MOVE_Z_WHEN_IDLE BABYSTEP_ZPROBE_OFFSET BABYSTEP_GFX_OVERLAY \
LIN_ADVANCE ADVANCED_PAUSE_FEATURE PARK_HEAD_ON_PAUSE MONITOR_DRIVER_STATUS SENSORLESS_HOMING \
SQUARE_WAVE_STEPPING TMC_DEBUG
exec_test $1 $2 "Grand Central M4 with assorted features" "$3"
diff --git a/buildroot/tests/teensy35 b/buildroot/tests/teensy35
index bcb8e944a1..ec12082909 100755
--- a/buildroot/tests/teensy35
+++ b/buildroot/tests/teensy35
@@ -24,7 +24,7 @@ opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT SDCARD_SORT_A
LCD_INFO_MENU LCD_PRINTER_INFO_IS_BOOTSCREEN LARGE_MOVE_ITEMS TURBO_BACK_MENU_ITEM PREHEAT_SHORTCUT_MENU_ITEM \
FILAMENT_WIDTH_SENSOR FILAMENT_LCD_DISPLAY CALIBRATION_GCODE BAUD_RATE_GCODE SOUND_MENU_ITEM \
FIX_MOUNTED_PROBE Z_SAFE_HOMING AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
- BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET BABYSTEP_ZPROBE_GFX_OVERLAY \
+ BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET BABYSTEP_GFX_OVERLAY \
PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE SLOW_PWM_HEATERS PIDTEMPBED EEPROM_SETTINGS INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT M100_FREE_MEMORY_WATCHER \
ADVANCED_PAUSE_FEATURE ARC_SUPPORT BEZIER_CURVE_SUPPORT EXPERIMENTAL_I2CBUS EXTENDED_CAPABILITIES_REPORT AUTO_REPORT_TEMPERATURES PARK_HEAD_ON_PAUSE \
PHOTO_GCODE PHOTO_POSITION PHOTO_SWITCH_POSITION PHOTO_SWITCH_MS PHOTO_DELAY_MS PHOTO_RETRACT_MM \
From 9db5bd000b6a07b8dcb6d6568df8411efe57a133 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Davide=20Rombol=C3=A0?=
Date: Sat, 18 Feb 2023 10:49:57 +0100
Subject: [PATCH 32/97] =?UTF-8?q?=E2=9C=A8=20IA=5FCREALITY=20screen=20rota?=
=?UTF-8?q?tion=20(#25397)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Scott Lahteine
---
Marlin/Configuration.h | 2 ++
Marlin/src/lcd/extui/ia_creality/creality_extui.cpp | 4 +++-
buildroot/tests/FYSETC_F6 | 8 ++++++++
3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 6363b79360..480520e28e 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -3048,6 +3048,8 @@
//#define DGUS_LCD_UI ORIGIN
#if DGUS_UI_IS(MKS)
#define USE_MKS_GREEN_UI
+#elif DGUS_UI_IS(IA_CREALITY)
+ //#define LCD_SCREEN_ROTATE 90 // Portrait Mode or 800x480 displays
#endif
//
diff --git a/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp b/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
index 0275902557..fed5fc7165 100644
--- a/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
+++ b/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
@@ -1682,8 +1682,10 @@ namespace ExtUI {
| (Settings.display_sound ? _BV(3) : 0) // 3: audio
| (Settings.display_standby ? _BV(2) : 0) // 2: backlight on standby
| (Settings.screen_rotation == 10 ? _BV(1) : 0) // 1 & 0: Inversion
- #if EITHER(MachineCR10Smart, MachineCR10SmartPro)
+ #if LCD_SCREEN_ROTATE == 90
| _BV(0) // Portrait Mode or 800x480 display has 0 point rotated 90deg from 480x272 display
+ #elif LCD_SCREEN_ROTATE
+ #error "Only 90° rotation is supported for the selected LCD."
#endif
;
diff --git a/buildroot/tests/FYSETC_F6 b/buildroot/tests/FYSETC_F6
index 5129ff9807..d970a23590 100755
--- a/buildroot/tests/FYSETC_F6
+++ b/buildroot/tests/FYSETC_F6
@@ -13,6 +13,14 @@ restore_configs
opt_set MOTHERBOARD BOARD_FYSETC_F6_13 LCD_SERIAL_PORT 1 DGUS_LCD_UI FYSETC
exec_test $1 $2 "FYSETC F6 1.3 with DGUS (FYSETC)" "$3"
+#
+# Test IA_CREALITY
+#
+restore_configs
+opt_set MOTHERBOARD BOARD_FYSETC_F6_13 LCD_SERIAL_PORT 1 DGUS_LCD_UI IA_CREALITY LCD_SCREEN_ROTATE 90
+opt_enable ADVANCED_PAUSE_FEATURE LCD_BED_TRAMMING CLASSIC_JERK BABYSTEPPING AUTO_BED_LEVELING_BILINEAR NOZZLE_PARK_FEATURE PROBE_MANUALLY
+exec_test $1 $2 "FYSETC F6 1.3 with DGUS (IA_CREALITY)" "$3"
+
#
# Delta Config (generic) + UBL + ALLEN_KEY + EEPROM_SETTINGS + OLED_PANEL_TINYBOY2
#
From 786c666151dede1f972c189f2151fe266f9bc7ec Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Sun, 19 Feb 2023 00:23:11 +0000
Subject: [PATCH 33/97] [cron] Bump distribution date (2023-02-19)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 745788f05a..23e0c15cd9 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-02-18"
+//#define STRING_DISTRIBUTION_DATE "2023-02-19"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index c0e9542b44..c2d07f32c8 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-02-18"
+ #define STRING_DISTRIBUTION_DATE "2023-02-19"
#endif
/**
From c950f0f5d1e6804365506d1718e0a4029fb232cf Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Sun, 19 Feb 2023 11:41:50 -0600
Subject: [PATCH 34/97] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20ExtUI?=
=?UTF-8?q?::onPowerLoss?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/feature/powerloss.cpp | 7 +++++++
Marlin/src/lcd/extui/anycubic_chiron/chiron_extui.cpp | 3 +++
Marlin/src/lcd/extui/anycubic_i3mega/anycubic_extui.cpp | 3 +++
Marlin/src/lcd/extui/dgus/dgus_extui.cpp | 3 +++
.../src/lcd/extui/dgus_reloaded/dgus_reloaded_extui.cpp | 3 +++
Marlin/src/lcd/extui/example/example.cpp | 3 +++
.../src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp | 7 ++++++-
Marlin/src/lcd/extui/ia_creality/creality_extui.cpp | 9 ++++++---
Marlin/src/lcd/extui/malyan/malyan_extui.cpp | 7 ++++++-
Marlin/src/lcd/extui/nextion/nextion_extui.cpp | 3 +++
Marlin/src/lcd/extui/ui_api.h | 1 +
Marlin/src/libs/numtostr.h | 2 +-
12 files changed, 45 insertions(+), 6 deletions(-)
diff --git a/Marlin/src/feature/powerloss.cpp b/Marlin/src/feature/powerloss.cpp
index 1037f823f6..faec893928 100644
--- a/Marlin/src/feature/powerloss.cpp
+++ b/Marlin/src/feature/powerloss.cpp
@@ -31,6 +31,10 @@
#include "powerloss.h"
#include "../core/macros.h"
+#if ENABLED(EXTENSIBLE_UI)
+ #include "../lcd/extui/ui_api.h"
+#endif
+
bool PrintJobRecovery::enabled; // Initialized by settings.load()
MediaFile PrintJobRecovery::file;
@@ -313,6 +317,9 @@ void PrintJobRecovery::save(const bool force/*=false*/, const float zraise/*=POW
// and a flag whether the raise was already done here.
if (IS_SD_PRINTING()) save(true, zraise, ENABLED(BACKUP_POWER_SUPPLY));
+ // Tell the LCD about the outage, even though it is about to die
+ TERN_(EXTENSIBLE_UI, ExtUI::onPowerLoss());
+
// Disable all heaters to reduce power loss
thermalManager.disable_all_heaters();
diff --git a/Marlin/src/lcd/extui/anycubic_chiron/chiron_extui.cpp b/Marlin/src/lcd/extui/anycubic_chiron/chiron_extui.cpp
index 75061c162a..39b328d808 100644
--- a/Marlin/src/lcd/extui/anycubic_chiron/chiron_extui.cpp
+++ b/Marlin/src/lcd/extui/anycubic_chiron/chiron_extui.cpp
@@ -120,6 +120,9 @@ namespace ExtUI {
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
+ void onPowerLoss() {
+ // Called when power-loss state is detected
+ }
// Called on resume from power-loss
void onPowerLossResume() { Chiron.PowerLossRecovery(); }
#endif
diff --git a/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_extui.cpp b/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_extui.cpp
index 40a670b5b0..afe88bf583 100644
--- a/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_extui.cpp
+++ b/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_extui.cpp
@@ -106,6 +106,9 @@ namespace ExtUI {
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
+ void onPowerLoss() {
+ // Called when power-loss state is detected
+ }
void onPowerLossResume() {
// Called on resume from power-loss
}
diff --git a/Marlin/src/lcd/extui/dgus/dgus_extui.cpp b/Marlin/src/lcd/extui/dgus/dgus_extui.cpp
index 382c5eb1be..2f3bbd64cc 100644
--- a/Marlin/src/lcd/extui/dgus/dgus_extui.cpp
+++ b/Marlin/src/lcd/extui/dgus/dgus_extui.cpp
@@ -126,6 +126,9 @@ namespace ExtUI {
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
+ void onPowerLoss() {
+ // Called when power-loss state is detected
+ }
void onPowerLossResume() {
// Called on resume from power-loss
IF_DISABLED(DGUS_LCD_UI_MKS, ScreenHandler.GotoScreen(DGUSLCD_SCREEN_POWER_LOSS));
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 1ff22da268..9aecf65f98 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/dgus_reloaded_extui.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/dgus_reloaded_extui.cpp
@@ -123,6 +123,9 @@ namespace ExtUI {
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
+ void onPowerLoss() {
+ // Called when power-loss state is detected
+ }
void onPowerLossResume() {
// Called on resume from power-loss
dgus_screen_handler.PowerLossResume();
diff --git a/Marlin/src/lcd/extui/example/example.cpp b/Marlin/src/lcd/extui/example/example.cpp
index 27269a9bee..a5e816efd8 100644
--- a/Marlin/src/lcd/extui/example/example.cpp
+++ b/Marlin/src/lcd/extui/example/example.cpp
@@ -112,6 +112,9 @@ namespace ExtUI {
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
+ void onPowerLoss() {
+ // Called when power-loss state is detected
+ }
void onPowerLossResume() {
// Called on resume from power-loss
}
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 84de2c5871..159847bde1 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
@@ -125,7 +125,12 @@ namespace ExtUI {
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
- void onPowerLossResume() {} // Called on resume from power-loss
+ void onPowerLoss() {
+ // Called when power-loss state is detected
+ }
+ void onPowerLossResume() {
+ // Called on resume from power-loss
+ }
#endif
#if HAS_PID_HEATING
diff --git a/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp b/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
index fed5fc7165..d27d68aad4 100644
--- a/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
+++ b/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
@@ -436,7 +436,7 @@ namespace ExtUI {
case DGUS_HEADER2_SEEN: // Waiting for the length byte
rx_datagram_len = DWIN_SERIAL.read();
- //DEBUGLCDCOMM_ECHOPAIR(" (", rx_datagram_len, ") ");
+ //DEBUGLCDCOMM_ECHOPGM(" (", rx_datagram_len, ") ");
// Telegram min len is 3 (command and one word of payload)
rx_datagram_state = WITHIN(rx_datagram_len, 3, DGUS_RX_BUFFER_SIZE) ? DGUS_WAIT_TELEGRAM : DGUS_IDLE;
@@ -448,14 +448,14 @@ namespace ExtUI {
Initialized = true; // We've talked to it, so we defined it as initialized.
uint8_t command = DWIN_SERIAL.read();
- //DEBUGLCDCOMM_ECHOPAIR("# ", command);
+ //DEBUGLCDCOMM_ECHOPGM("# ", command);
uint8_t readlen = rx_datagram_len - 1; // command is part of len.
uint8_t tmp[rx_datagram_len - 1];
uint8_t *ptmp = tmp;
while (readlen--) {
receivedbyte = DWIN_SERIAL.read();
- //DEBUGLCDCOMM_ECHOPAIR(" ", receivedbyte);
+ //DEBUGLCDCOMM_ECHOPGM(" ", receivedbyte);
*ptmp++ = receivedbyte;
}
//DEBUGLCDCOMM_ECHOPGM(" # ");
@@ -2016,6 +2016,9 @@ namespace ExtUI {
}
#if ENABLED(POWER_LOSS_RECOVERY)
+ void onPowerLoss() {
+ // Called when power-loss state is detected
+ }
void onPowerLossResume() {
startprogress = 254;
InforShowStatus = true;
diff --git a/Marlin/src/lcd/extui/malyan/malyan_extui.cpp b/Marlin/src/lcd/extui/malyan/malyan_extui.cpp
index 8ed319e35c..b978937def 100644
--- a/Marlin/src/lcd/extui/malyan/malyan_extui.cpp
+++ b/Marlin/src/lcd/extui/malyan/malyan_extui.cpp
@@ -158,7 +158,12 @@ namespace ExtUI {
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
- void onPowerLossResume() {}
+ void onPowerLoss() {
+ // Called when power-loss state is detected
+ }
+ void onPowerLossResume() {
+ // Called on resume from power-loss
+ }
#endif
void onSteppersDisabled() {}
diff --git a/Marlin/src/lcd/extui/nextion/nextion_extui.cpp b/Marlin/src/lcd/extui/nextion/nextion_extui.cpp
index 0e84fd33cf..433bbfbe8b 100644
--- a/Marlin/src/lcd/extui/nextion/nextion_extui.cpp
+++ b/Marlin/src/lcd/extui/nextion/nextion_extui.cpp
@@ -103,6 +103,9 @@ namespace ExtUI {
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
+ void onPowerLoss() {
+ // Called when power-loss state is detected
+ }
void onPowerLossResume() {
// Called on resume from power-loss
}
diff --git a/Marlin/src/lcd/extui/ui_api.h b/Marlin/src/lcd/extui/ui_api.h
index b48dc94f8f..46f0891bb7 100644
--- a/Marlin/src/lcd/extui/ui_api.h
+++ b/Marlin/src/lcd/extui/ui_api.h
@@ -426,6 +426,7 @@ namespace ExtUI {
void onSettingsStored(bool success);
void onSettingsLoaded(bool success);
#if ENABLED(POWER_LOSS_RECOVERY)
+ void onPowerLoss();
void onPowerLossResume();
#endif
#if HAS_PID_HEATING
diff --git a/Marlin/src/libs/numtostr.h b/Marlin/src/libs/numtostr.h
index 047b22cd17..0c8ce0f79a 100644
--- a/Marlin/src/libs/numtostr.h
+++ b/Marlin/src/libs/numtostr.h
@@ -56,7 +56,7 @@ const char* ui16tostr3rj(const uint16_t x);
// Convert int16_t to string with 123 format
const char* i16tostr3rj(const int16_t x);
-// Convert unsigned int to lj string with 123 format
+// Convert signed int to lj string with 123 format
const char* i16tostr3left(const int16_t xx);
// Convert signed int to rj string with _123, -123, _-12, or __-1 format
From d67e701b757b49fb2f9a5a54f276658f84fdb231 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Mon, 20 Feb 2023 00:25:06 +0000
Subject: [PATCH 35/97] [cron] Bump distribution date (2023-02-20)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 23e0c15cd9..4fff768a0e 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-02-19"
+//#define STRING_DISTRIBUTION_DATE "2023-02-20"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index c2d07f32c8..8c147a501e 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-02-19"
+ #define STRING_DISTRIBUTION_DATE "2023-02-20"
#endif
/**
From 4f212e50b6ad402ae34e7c9ed35ec9168bae6221 Mon Sep 17 00:00:00 2001
From: Anson Liu
Date: Mon, 20 Feb 2023 19:49:15 -0500
Subject: [PATCH 36/97] =?UTF-8?q?=E2=9C=A8=20TC=5FGCODE=5FUSE=5FGLOBAL=5F*?=
=?UTF-8?q?=20(#25399)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Scott Lahteine
---
Marlin/Configuration_adv.h | 14 +++++--
Marlin/src/inc/Conditionals_adv.h | 7 ++++
Marlin/src/inc/SanityCheck.h | 6 +++
Marlin/src/module/tool_change.cpp | 69 ++++++++++++++++++++++++-------
buildroot/tests/BIGTREE_GTR_V1_0 | 2 +-
5 files changed, 80 insertions(+), 18 deletions(-)
diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index 7e224ae61c..cdf32e490a 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -2556,9 +2556,17 @@
* Extra G-code to run while executing tool-change commands. Can be used to use an additional
* stepper motor (e.g., I axis in Configuration.h) to drive the tool-changer.
*/
- //#define EVENT_GCODE_TOOLCHANGE_T0 "G28 A\nG1 A0" // Extra G-code to run while executing tool-change command T0
- //#define EVENT_GCODE_TOOLCHANGE_T1 "G1 A10" // Extra G-code to run while executing tool-change command T1
- //#define EVENT_GCODE_TOOLCHANGE_ALWAYS_RUN // Always execute above G-code sequences. Use with caution!
+ //#define EVENT_GCODE_TOOLCHANGE_T0 "G28 A\nG1 A0" // Extra G-code to run while executing tool-change command T0
+ //#define EVENT_GCODE_TOOLCHANGE_T1 "G1 A10" // Extra G-code to run while executing tool-change command T1
+ //#define EVENT_GCODE_TOOLCHANGE_ALWAYS_RUN // Always execute above G-code sequences. Use with caution!
+
+ /**
+ * Consider coordinates for EVENT_GCODE_TOOLCHANGE_Tx as relative to T0
+ * so that moves in the specified axes are the same for all tools.
+ */
+ //#define TC_GCODE_USE_GLOBAL_X // Use X position relative to Tool 0
+ //#define TC_GCODE_USE_GLOBAL_Y // Use Y position relative to Tool 0
+ //#define TC_GCODE_USE_GLOBAL_Z // Use Z position relative to Tool 0
/**
* Tool Sensors detect when tools have been picked up or dropped.
diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h
index ad89824347..6c6f1f585a 100644
--- a/Marlin/src/inc/Conditionals_adv.h
+++ b/Marlin/src/inc/Conditionals_adv.h
@@ -1152,3 +1152,10 @@
#if EITHER(INPUT_SHAPING_X, INPUT_SHAPING_Y)
#define HAS_SHAPING 1
#endif
+
+// Toolchange Event G-code
+#if !HAS_MULTI_EXTRUDER || !(defined(EVENT_GCODE_TOOLCHANGE_T0) || defined(EVENT_GCODE_TOOLCHANGE_T1) || defined(EVENT_GCODE_TOOLCHANGE_T2) || defined(EVENT_GCODE_TOOLCHANGE_T3) || defined(EVENT_GCODE_TOOLCHANGE_T4) || defined(EVENT_GCODE_TOOLCHANGE_T5) || defined(EVENT_GCODE_TOOLCHANGE_T6) || defined(EVENT_GCODE_TOOLCHANGE_T7))
+ #undef TC_GCODE_USE_GLOBAL_X
+ #undef TC_GCODE_USE_GLOBAL_Y
+ #undef TC_GCODE_USE_GLOBAL_Z
+#endif
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index 12d281b704..d011fb18f0 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -1015,9 +1015,15 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#endif
#endif
+/**
+ * Custom Event G-code
+ */
#if defined(EVENT_GCODE_SD_ABORT) && DISABLED(NOZZLE_PARK_FEATURE)
static_assert(nullptr == strstr(EVENT_GCODE_SD_ABORT, "G27"), "NOZZLE_PARK_FEATURE is required to use G27 in EVENT_GCODE_SD_ABORT.");
#endif
+#if ANY(TC_GCODE_USE_GLOBAL_X, TC_GCODE_USE_GLOBAL_Y, TC_GCODE_USE_GLOBAL_Z) && ENABLED(NO_WORKSPACE_OFFSETS)
+ #error "TC_GCODE_USE_GLOBAL_* options are incompatible with NO_WORKSPACE_OFFSETS."
+#endif
/**
* I2C Position Encoders
diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp
index 16b562e482..0defced87e 100644
--- a/Marlin/src/module/tool_change.cpp
+++ b/Marlin/src/module/tool_change.cpp
@@ -30,6 +30,7 @@
#include "temperature.h"
#include "../MarlinCore.h"
+#include "../gcode/gcode.h"
//#define DEBUG_TOOL_CHANGE
//#define DEBUG_TOOLCHANGE_FILAMENT_SWAP
@@ -49,12 +50,6 @@
Flags toolchange_extruder_ready;
#endif
-#if EITHER(MAGNETIC_PARKING_EXTRUDER, TOOL_SENSOR) \
- || defined(EVENT_GCODE_TOOLCHANGE_T0) || defined(EVENT_GCODE_TOOLCHANGE_T1) || defined(EVENT_GCODE_AFTER_TOOLCHANGE) \
- || (ENABLED(PARKING_EXTRUDER) && PARKING_EXTRUDER_SOLENOIDS_DELAY > 0)
- #include "../gcode/gcode.h"
-#endif
-
#if ENABLED(TOOL_SENSOR)
#include "../lcd/marlinui.h"
#endif
@@ -98,7 +93,6 @@
#endif
#if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
- #include "../gcode/gcode.h"
#if TOOLCHANGE_FS_WIPE_RETRACT <= 0
#undef TOOLCHANGE_FS_WIPE_RETRACT
#define TOOLCHANGE_FS_WIPE_RETRACT 0
@@ -986,7 +980,7 @@ void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0.
}
#endif
- //Calculate and perform the priming distance
+ // Calculate and perform the priming distance
if (toolchange_settings.extra_prime >= 0) {
// Positive extra_prime value
// - Return filament at speed (fr) then extra_prime at prime speed
@@ -1409,14 +1403,61 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
TERN_(HAS_FANMUX, fanmux_switch(active_extruder));
if (ENABLED(EVENT_GCODE_TOOLCHANGE_ALWAYS_RUN) || !no_move) {
- #ifdef EVENT_GCODE_TOOLCHANGE_T0
- if (new_tool == 0)
- gcode.process_subcommands_now(F(EVENT_GCODE_TOOLCHANGE_T0));
+
+ #if ANY(TC_GCODE_USE_GLOBAL_X, TC_GCODE_USE_GLOBAL_Y, TC_GCODE_USE_GLOBAL_Z)
+ // G0/G1/G2/G3/G5 moves are relative to the active tool.
+ // Shift the workspace to make custom moves relative to T0.
+ xyz_pos_t old_position_shift;
+ if (new_tool > 0) {
+ old_position_shift = position_shift;
+ const xyz_pos_t &he = hotend_offset[new_tool];
+ #if ENABLED(TC_GCODE_USE_GLOBAL_X)
+ position_shift.x -= he.x; update_workspace_offset(X_AXIS);
+ #endif
+ #if ENABLED(TC_GCODE_USE_GLOBAL_Y)
+ position_shift.y -= he.y; update_workspace_offset(Y_AXIS);
+ #endif
+ #if ENABLED(TC_GCODE_USE_GLOBAL_Z)
+ position_shift.z -= he.z; update_workspace_offset(Z_AXIS);
+ #endif
+ }
#endif
- #ifdef EVENT_GCODE_TOOLCHANGE_T1
- if (new_tool == 1)
- gcode.process_subcommands_now(F(EVENT_GCODE_TOOLCHANGE_T1));
+ switch (new_tool) {
+ default: break;
+ #ifdef EVENT_GCODE_TOOLCHANGE_T0
+ case 0: gcode.process_subcommands_now(F(EVENT_GCODE_TOOLCHANGE_T0)); break;
+ #endif
+ #ifdef EVENT_GCODE_TOOLCHANGE_T1
+ case 1: gcode.process_subcommands_now(F(EVENT_GCODE_TOOLCHANGE_T1)); break;
+ #endif
+ #ifdef EVENT_GCODE_TOOLCHANGE_T2
+ case 2: gcode.process_subcommands_now(F(EVENT_GCODE_TOOLCHANGE_T2)); break;
+ #endif
+ #ifdef EVENT_GCODE_TOOLCHANGE_T3
+ case 3: gcode.process_subcommands_now(F(EVENT_GCODE_TOOLCHANGE_T3)); break;
+ #endif
+ #ifdef EVENT_GCODE_TOOLCHANGE_T4
+ case 4: gcode.process_subcommands_now(F(EVENT_GCODE_TOOLCHANGE_T4)); break;
+ #endif
+ #ifdef EVENT_GCODE_TOOLCHANGE_T5
+ case 5: gcode.process_subcommands_now(F(EVENT_GCODE_TOOLCHANGE_T5)); break;
+ #endif
+ #ifdef EVENT_GCODE_TOOLCHANGE_T6
+ case 6: gcode.process_subcommands_now(F(EVENT_GCODE_TOOLCHANGE_T6)); break;
+ #endif
+ #ifdef EVENT_GCODE_TOOLCHANGE_T7
+ case 7: gcode.process_subcommands_now(F(EVENT_GCODE_TOOLCHANGE_T7)); break;
+ #endif
+ }
+
+ #if ANY(TC_GCODE_USE_GLOBAL_X, TC_GCODE_USE_GLOBAL_Y, TC_GCODE_USE_GLOBAL_Z)
+ if (new_tool > 0) {
+ position_shift = old_position_shift;
+ TERN_(TC_GCODE_USE_GLOBAL_X, update_workspace_offset(X_AXIS));
+ TERN_(TC_GCODE_USE_GLOBAL_Y, update_workspace_offset(Y_AXIS));
+ TERN_(TC_GCODE_USE_GLOBAL_Z, update_workspace_offset(Z_AXIS));
+ }
#endif
#ifdef EVENT_GCODE_AFTER_TOOLCHANGE
diff --git a/buildroot/tests/BIGTREE_GTR_V1_0 b/buildroot/tests/BIGTREE_GTR_V1_0
index d6eccaff07..09e36d6475 100755
--- a/buildroot/tests/BIGTREE_GTR_V1_0
+++ b/buildroot/tests/BIGTREE_GTR_V1_0
@@ -25,7 +25,7 @@ opt_set MOTHERBOARD BOARD_BTT_GTR_V1_0 SERIAL_PORT -1 \
Z_DRIVER_TYPE A4988 Z2_DRIVER_TYPE A4988 Z3_DRIVER_TYPE A4988 Z4_DRIVER_TYPE A4988 \
DEFAULT_Kp_LIST '{ 22.2, 20.0, 21.0, 19.0, 18.0 }' DEFAULT_Ki_LIST '{ 1.08 }' DEFAULT_Kd_LIST '{ 114.0, 112.0, 110.0, 108.0 }'
opt_enable TOOLCHANGE_FILAMENT_SWAP TOOLCHANGE_MIGRATION_FEATURE TOOLCHANGE_FS_SLOW_FIRST_PRIME TOOLCHANGE_FS_PRIME_FIRST_USED \
- PID_PARAMS_PER_HOTEND Z_MULTI_ENDSTOPS
+ PID_PARAMS_PER_HOTEND Z_MULTI_ENDSTOPS TC_GCODE_USE_GLOBAL_X TC_GCODE_USE_GLOBAL_Y
exec_test $1 $2 "BigTreeTech GTR | 6 Extruders | Quad Z + Endstops" "$3"
restore_configs
From 0f745468a17c3e6130e3830fcb3210703ebaacee Mon Sep 17 00:00:00 2001
From: lukasradek
Date: Tue, 21 Feb 2023 01:57:15 +0100
Subject: [PATCH 37/97] =?UTF-8?q?=F0=9F=94=A7=20Up=20to=209=20tramming=20p?=
=?UTF-8?q?oints=20(#25293)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Scott Lahteine
---
Marlin/Configuration_adv.h | 2 +-
Marlin/src/core/macros.h | 13 ++++++++
Marlin/src/feature/tramming.cpp | 28 +++-------------
Marlin/src/feature/tramming.h | 57 ++++++++++++++-------------------
buildroot/tests/DUE | 3 +-
5 files changed, 44 insertions(+), 59 deletions(-)
diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index cdf32e490a..b607588568 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -1034,7 +1034,7 @@
//#define ASSISTED_TRAMMING
#if ENABLED(ASSISTED_TRAMMING)
- // Define positions for probe points.
+ // Define from 3 to 9 points to probe.
#define TRAMMING_POINT_XY { { 20, 20 }, { 180, 20 }, { 180, 180 }, { 20, 180 } }
// Define position names for probe points.
diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h
index c20cd17a7e..9a014d5d92 100644
--- a/Marlin/src/core/macros.h
+++ b/Marlin/src/core/macros.h
@@ -717,6 +717,19 @@
#define RREPEAT2_S(S,N,OP,V...) EVAL1024(_RREPEAT2(S,SUB##S(N),OP,V))
#define RREPEAT2(N,OP,V...) RREPEAT2_S(0,N,OP,V)
+// Emit a list of N OP(I) items with ascending counter.
+#define _REPLIST(_RPT_I,_RPT_N,_RPT_OP) \
+ _RPT_OP(_RPT_I) \
+ IF_ELSE(SUB1(_RPT_N)) \
+ ( , DEFER2(__REPLIST)()(ADD1(_RPT_I),SUB1(_RPT_N),_RPT_OP) ) \
+ ( /* Do nothing */ )
+#define __REPLIST() _REPLIST
+
+// Repeat a macro, comma-separated, passing S...N-1.
+#define REPLIST_S(S,N,OP) EVAL(_REPLIST(S,SUB##S(N),OP))
+#define REPLIST(N,OP) REPLIST_S(0,N,OP)
+#define REPLIST_1(N,OP) REPLIST_S(1,INCREMENT(N),OP)
+
// Call OP(A) with each item as an argument
#define _MAP(_MAP_OP,A,V...) \
_MAP_OP(A) \
diff --git a/Marlin/src/feature/tramming.cpp b/Marlin/src/feature/tramming.cpp
index d03f0cf53b..3721c5eb81 100644
--- a/Marlin/src/feature/tramming.cpp
+++ b/Marlin/src/feature/tramming.cpp
@@ -29,31 +29,11 @@
#define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE)
#include "../core/debug_out.h"
-PGMSTR(point_name_1, TRAMMING_POINT_NAME_1);
-PGMSTR(point_name_2, TRAMMING_POINT_NAME_2);
-PGMSTR(point_name_3, TRAMMING_POINT_NAME_3);
-#ifdef TRAMMING_POINT_NAME_4
- PGMSTR(point_name_4, TRAMMING_POINT_NAME_4);
- #ifdef TRAMMING_POINT_NAME_5
- PGMSTR(point_name_5, TRAMMING_POINT_NAME_5);
- #ifdef TRAMMING_POINT_NAME_6
- PGMSTR(point_name_6, TRAMMING_POINT_NAME_6);
- #endif
- #endif
-#endif
+#define _TRAM_NAME_DEF(N) PGMSTR(point_name_##N, TRAMMING_POINT_NAME_##N);
+#define _TRAM_NAME_ITEM(N) point_name_##N
+REPEAT_1(_NR_TRAM_NAMES, _TRAM_NAME_DEF)
-PGM_P const tramming_point_name[] PROGMEM = {
- point_name_1, point_name_2, point_name_3
- #ifdef TRAMMING_POINT_NAME_4
- , point_name_4
- #ifdef TRAMMING_POINT_NAME_5
- , point_name_5
- #ifdef TRAMMING_POINT_NAME_6
- , point_name_6
- #endif
- #endif
- #endif
-};
+PGM_P const tramming_point_name[] PROGMEM = { REPLIST_1(_NR_TRAM_NAMES, _TRAM_NAME_ITEM) };
#ifdef ASSISTED_TRAMMING_WAIT_POSITION
diff --git a/Marlin/src/feature/tramming.h b/Marlin/src/feature/tramming.h
index 925659e29d..c8f20f0010 100644
--- a/Marlin/src/feature/tramming.h
+++ b/Marlin/src/feature/tramming.h
@@ -31,43 +31,34 @@
constexpr xy_pos_t tramming_points[] = TRAMMING_POINT_XY;
#define G35_PROBE_COUNT COUNT(tramming_points)
-static_assert(WITHIN(G35_PROBE_COUNT, 3, 6), "TRAMMING_POINT_XY requires between 3 and 6 XY positions.");
+static_assert(WITHIN(G35_PROBE_COUNT, 3, 9), "TRAMMING_POINT_XY requires between 3 and 9 XY positions.");
-#define VALIDATE_TRAMMING_POINT(N) static_assert(N >= G35_PROBE_COUNT || Probe::build_time::can_reach(tramming_points[N]), \
- "TRAMMING_POINT_XY point " STRINGIFY(N) " is not reachable with the default NOZZLE_TO_PROBE offset and PROBING_MARGIN.")
-VALIDATE_TRAMMING_POINT(0); VALIDATE_TRAMMING_POINT(1); VALIDATE_TRAMMING_POINT(2); VALIDATE_TRAMMING_POINT(3); VALIDATE_TRAMMING_POINT(4); VALIDATE_TRAMMING_POINT(5);
-
-extern const char point_name_1[], point_name_2[], point_name_3[]
- #ifdef TRAMMING_POINT_NAME_4
- , point_name_4[]
- #ifdef TRAMMING_POINT_NAME_5
- , point_name_5[]
- #ifdef TRAMMING_POINT_NAME_6
- , point_name_6[]
- #endif
- #endif
- #endif
-;
-
-#define _NR_TRAM_NAMES 2
-#ifdef TRAMMING_POINT_NAME_3
- #undef _NR_TRAM_NAMES
+#ifdef TRAMMING_POINT_NAME_9
+ #define _NR_TRAM_NAMES 9
+#elif defined(TRAMMING_POINT_NAME_8)
+ #define _NR_TRAM_NAMES 8
+#elif defined(TRAMMING_POINT_NAME_7)
+ #define _NR_TRAM_NAMES 7
+#elif defined(TRAMMING_POINT_NAME_6)
+ #define _NR_TRAM_NAMES 6
+#elif defined(TRAMMING_POINT_NAME_5)
+ #define _NR_TRAM_NAMES 5
+#elif defined(TRAMMING_POINT_NAME_4)
+ #define _NR_TRAM_NAMES 4
+#elif defined(TRAMMING_POINT_NAME_3)
#define _NR_TRAM_NAMES 3
- #ifdef TRAMMING_POINT_NAME_4
- #undef _NR_TRAM_NAMES
- #define _NR_TRAM_NAMES 4
- #ifdef TRAMMING_POINT_NAME_5
- #undef _NR_TRAM_NAMES
- #define _NR_TRAM_NAMES 5
- #ifdef TRAMMING_POINT_NAME_6
- #undef _NR_TRAM_NAMES
- #define _NR_TRAM_NAMES 6
- #endif
- #endif
- #endif
+#else
+ #define _NR_TRAM_NAMES 0
#endif
+
static_assert(_NR_TRAM_NAMES >= G35_PROBE_COUNT, "Define enough TRAMMING_POINT_NAME_s for all TRAMMING_POINT_XY entries.");
-#undef _NR_TRAM_NAMES
+
+#define _TRAM_NAME_PTR(N) point_name_##N[]
+extern const char REPLIST_1(_NR_TRAM_NAMES, _TRAM_NAME_PTR);
+
+#define _CHECK_TRAM_POINT(N) static_assert(Probe::build_time::can_reach(tramming_points[N]), "TRAMMING_POINT_XY point " STRINGIFY(N) " is not reachable with the default NOZZLE_TO_PROBE offset and PROBING_MARGIN.");
+REPEAT(_NR_TRAM_NAMES, _CHECK_TRAM_POINT)
+#undef _CHECK_TRAM_POINT
extern PGM_P const tramming_point_name[];
diff --git a/buildroot/tests/DUE b/buildroot/tests/DUE
index a2f3fda7a7..4ed234ab3a 100755
--- a/buildroot/tests/DUE
+++ b/buildroot/tests/DUE
@@ -12,7 +12,8 @@ opt_set MOTHERBOARD BOARD_RAMPS4DUE_EFB \
TEMP_SENSOR_0 -2 TEMP_SENSOR_BED 2 \
GRID_MAX_POINTS_X 16 \
E0_AUTO_FAN_PIN 8 FANMUX0_PIN 53 EXTRUDER_AUTO_FAN_SPEED 100 \
- TEMP_SENSOR_CHAMBER 3 TEMP_CHAMBER_PIN 6 HEATER_CHAMBER_PIN 45
+ TEMP_SENSOR_CHAMBER 3 TEMP_CHAMBER_PIN 6 HEATER_CHAMBER_PIN 45 \
+ TRAMMING_POINT_XY '{{20,20},{20,20},{20,20},{20,20},{20,20}}' TRAMMING_POINT_NAME_5 '"Point 5"'
opt_enable S_CURVE_ACCELERATION EEPROM_SETTINGS GCODE_MACROS \
FIX_MOUNTED_PROBE Z_SAFE_HOMING CODEPENDENT_XY_HOMING \
ASSISTED_TRAMMING REPORT_TRAMMING_MM ASSISTED_TRAMMING_WAIT_POSITION \
From e002f4fd38fc8557a3e6d029f03396607ace9e50 Mon Sep 17 00:00:00 2001
From: ellensp <530024+ellensp@users.noreply.github.com>
Date: Tue, 21 Feb 2023 13:58:40 +1300
Subject: [PATCH 38/97] =?UTF-8?q?=F0=9F=93=BA=20Update=20Re-ARM=20VIKI2=20?=
=?UTF-8?q?SPI=20pins=20(#25411)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h b/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h
index fe424c800a..9a210e1607 100644
--- a/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h
+++ b/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h
@@ -354,8 +354,8 @@
#if EITHER(VIKI2, miniVIKI)
#define DOGLCD_CS P0_16 // (16)
#define DOGLCD_A0 P2_06 // (59) J3-8 & AUX-2
- #define DOGLCD_SCK SD_SCK_PIN
- #define DOGLCD_MOSI SD_MOSI_PIN
+ #define DOGLCD_SCK P0_15 // (52) (SCK) J3-9 & AUX-3
+ #define DOGLCD_MOSI P0_18 // (51) (MOSI) J3-10 & AUX-3
#define STAT_LED_BLUE_PIN P0_26 // (63) may change if cable changes
#define STAT_LED_RED_PIN P1_21 // ( 6) may change if cable changes
From 03a43786703d84f1b8c6374755b2764aeb9e04eb Mon Sep 17 00:00:00 2001
From: ellensp <530024+ellensp@users.noreply.github.com>
Date: Tue, 21 Feb 2023 15:25:22 +1300
Subject: [PATCH 39/97] =?UTF-8?q?=F0=9F=94=A7=20Sanity-check=20hotend=20ma?=
=?UTF-8?q?x=20/=20preheat=20temps=20(#25407)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Scott Lahteine
---
Marlin/src/core/macros.h | 9 +-
Marlin/src/inc/Conditionals_adv.h | 82 +++++++++++++++----
Marlin/src/lcd/marlinui.cpp | 2 +-
Marlin/src/module/temperature.cpp | 16 +++-
.../src/module/thermistor/thermistor_2000.h | 12 +--
5 files changed, 94 insertions(+), 27 deletions(-)
diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h
index 9a014d5d92..65fba21094 100644
--- a/Marlin/src/core/macros.h
+++ b/Marlin/src/core/macros.h
@@ -712,10 +712,11 @@
( DEFER2(__RREPEAT2)()(ADD1(_RPT_I),SUB1(_RPT_N),_RPT_OP,V) ) \
( /* Do nothing */ )
#define __RREPEAT2() _RREPEAT2
-#define RREPEAT_S(S,N,OP) EVAL1024(_RREPEAT(S,SUB##S(N),OP))
-#define RREPEAT(N,OP) RREPEAT_S(0,N,OP)
-#define RREPEAT2_S(S,N,OP,V...) EVAL1024(_RREPEAT2(S,SUB##S(N),OP,V))
-#define RREPEAT2(N,OP,V...) RREPEAT2_S(0,N,OP,V)
+#define RREPEAT_S(S,N,OP) EVAL1024(_RREPEAT(S,SUB##S(N),OP))
+#define RREPEAT(N,OP) RREPEAT_S(0,N,OP)
+#define RREPEAT_1(N,OP) RREPEAT_S(1,INCREMENT(N),OP)
+#define RREPEAT2_S(S,N,OP,V...) EVAL1024(_RREPEAT2(S,SUB##S(N),OP,V))
+#define RREPEAT2(N,OP,V...) RREPEAT2_S(0,N,OP,V)
// Emit a list of N OP(I) items with ascending counter.
#define _REPLIST(_RPT_I,_RPT_N,_RPT_OP) \
diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h
index 6c6f1f585a..436b6194da 100644
--- a/Marlin/src/inc/Conditionals_adv.h
+++ b/Marlin/src/inc/Conditionals_adv.h
@@ -223,13 +223,12 @@
#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
- #if 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
- #endif
#else
#undef HEATER_0_MINTEMP
#undef HEATER_0_MAXTEMP
@@ -269,13 +268,12 @@
#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
- #if 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
- #endif
#else
#undef HEATER_1_MINTEMP
#undef HEATER_1_MAXTEMP
@@ -315,18 +313,72 @@
#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
- #if 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
- #endif
#else
#undef HEATER_2_MINTEMP
#undef HEATER_2_MAXTEMP
#endif
+#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
+#elif TEMP_SENSOR_3 > 0
+ #define TEMP_SENSOR_3_IS_THERMISTOR 1
+#elif !TEMP_SENSOR_3
+ #undef HEATER_3_MINTEMP
+ #undef HEATER_3_MAXTEMP
+#endif
+
+#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
+#elif TEMP_SENSOR_4 > 0
+ #define TEMP_SENSOR_4_IS_THERMISTOR 1
+#elif !TEMP_SENSOR_4
+ #undef HEATER_4_MINTEMP
+ #undef HEATER_4_MAXTEMP
+#endif
+
+#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
+#elif TEMP_SENSOR_5 > 0
+ #define TEMP_SENSOR_5_IS_THERMISTOR 1
+#elif !TEMP_SENSOR_5
+ #undef HEATER_5_MINTEMP
+ #undef HEATER_5_MAXTEMP
+#endif
+
+#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
+#elif TEMP_SENSOR_6 > 0
+ #define TEMP_SENSOR_6_IS_THERMISTOR 1
+#elif !TEMP_SENSOR_6
+ #undef HEATER_6_MINTEMP
+ #undef HEATER_6_MAXTEMP
+#endif
+
+#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
+#elif TEMP_SENSOR_7 > 0
+ #define TEMP_SENSOR_7_IS_THERMISTOR 1
+#elif !TEMP_SENSOR_7
+ #undef HEATER_7_MINTEMP
+ #undef HEATER_7_MAXTEMP
+#endif
+
#if TEMP_SENSOR_IS_MAX_TC(REDUNDANT)
#if TEMP_SENSOR_REDUNDANT == -5
#if !REDUNDANT_TEMP_MATCH(SOURCE, E0) && !REDUNDANT_TEMP_MATCH(SOURCE, E1) && !REDUNDANT_TEMP_MATCH(SOURCE, E2)
diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp
index d10ae7c5cc..aa1ccb17c2 100644
--- a/Marlin/src/lcd/marlinui.cpp
+++ b/Marlin/src/lcd/marlinui.cpp
@@ -149,7 +149,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
const preheat_t &pre = material_preset[m];
TERN_(HAS_HOTEND, if (TEST(pmask, PT_HOTEND)) thermalManager.setTargetHotend(pre.hotend_temp, e));
TERN_(HAS_HEATED_BED, if (TEST(pmask, PT_BED)) thermalManager.setTargetBed(pre.bed_temp));
- //TERN_(HAS_HEATED_CHAMBER, if (TEST(pmask, PT_CHAMBER)) thermalManager.setTargetBed(pre.chamber_temp));
+ //TERN_(HAS_HEATED_CHAMBER, if (TEST(pmask, PT_CHAMBER)) thermalManager.setTargetChamber(pre.chamber_temp));
TERN_(HAS_FAN, if (TEST(pmask, PT_FAN)) thermalManager.set_fan_speed(0, pre.fan_speed));
}
#endif
diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp
index f3a1dc7afe..fc3149d4f0 100644
--- a/Marlin/src/module/temperature.cpp
+++ b/Marlin/src/module/temperature.cpp
@@ -317,8 +317,22 @@ PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED);
#if HAS_HOTEND
hotend_info_t Temperature::temp_hotend[HOTENDS];
- #define _HMT(N) HEATER_##N##_MAXTEMP,
const celsius_t Temperature::hotend_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
+
+ // Sanity-check max readable temperatures
+ #define CHECK_MAXTEMP_(N,M,S) static_assert( \
+ S >= 998 || M <= _MAX(TT_NAME(S)[0].celsius, TT_NAME(S)[COUNT(TT_NAME(S)) - 1].celsius) - HOTEND_OVERSHOOT, \
+ "HEATER_" STRINGIFY(N) "_MAXTEMP (" STRINGIFY(M) ") is too high for thermistor_" STRINGIFY(S) ".h with HOTEND_OVERSHOOT=" STRINGIFY(HOTEND_OVERSHOOT) ".");
+ #define CHECK_MAXTEMP(N) TERN(TEMP_SENSOR_##N##_IS_THERMISTOR, CHECK_MAXTEMP_, CODE_0)(N, HEATER_##N##_MAXTEMP, TEMP_SENSOR_##N)
+ REPEAT(HOTENDS, CHECK_MAXTEMP)
+
+ #if HAS_PREHEAT
+ #define CHECK_PREHEAT__(N,P,T,M) static_assert(T <= M - HOTEND_OVERSHOOT, "PREHEAT_" STRINGIFY(P) "_TEMP_HOTEND (" STRINGIFY(T) ") must be less than HEATER_" STRINGIFY(N) "_MAXTEMP (" STRINGIFY(M) ") - " STRINGIFY(HOTEND_OVERSHOOT) ".");
+ #define CHECK_PREHEAT_(N,P) CHECK_PREHEAT__(N, P, PREHEAT_##P##_TEMP_HOTEND, HEATER_##N##_MAXTEMP);
+ #define CHECK_PREHEAT(P) REPEAT2(HOTENDS, CHECK_PREHEAT_, P);
+ RREPEAT_1(PREHEAT_COUNT, CHECK_PREHEAT)
+ #endif
+
#endif
#if HAS_TEMP_REDUNDANT
diff --git a/Marlin/src/module/thermistor/thermistor_2000.h b/Marlin/src/module/thermistor/thermistor_2000.h
index 3815a6f256..6393c980ea 100644
--- a/Marlin/src/module/thermistor/thermistor_2000.h
+++ b/Marlin/src/module/thermistor/thermistor_2000.h
@@ -23,12 +23,12 @@
// R25 = 100 KOhm, beta25 = 4550 K, 4.7 kOhm pull-up, TDK NTCG104LH104KT1 https://product.tdk.com/en/search/sensor/ntc/chip-ntc-thermistor/info?part_no=NTCG104LH104KT1
constexpr temp_entry_t temptable_2000[] PROGMEM = {
-{ OV(313), 125 },
-{ OV(347), 120 },
-{ OV(383), 115 },
-{ OV(422), 110 },
-{ OV(463), 105 },
-{ OV(506), 100 },
+{ OV(313), 125 },
+{ OV(347), 120 },
+{ OV(383), 115 },
+{ OV(422), 110 },
+{ OV(463), 105 },
+{ OV(506), 100 },
{ OV(549), 95 },
{ OV(594), 90 },
{ OV(638), 85 },
From 122d4a89f6f151db0e8cb3396b49b743b6211d8f Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Tue, 21 Feb 2023 06:06:25 +0000
Subject: [PATCH 40/97] [cron] Bump distribution date (2023-02-21)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 4fff768a0e..1e19985a35 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-02-20"
+//#define STRING_DISTRIBUTION_DATE "2023-02-21"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 8c147a501e..1a54011d8c 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-02-20"
+ #define STRING_DISTRIBUTION_DATE "2023-02-21"
#endif
/**
From babd3b0037d660f52cccbb295b8839b8dd744036 Mon Sep 17 00:00:00 2001
From: DerAndere <26200979+DerAndere1@users.noreply.github.com>
Date: Tue, 21 Feb 2023 19:26:10 +0100
Subject: [PATCH 41/97] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Add?=
=?UTF-8?q?=20get=5Fmove=5Fdistance=20for=20rotation/kinematics=20(#25370)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/module/motion.cpp | 103 +++++++++++++++++++++++++++++++++-
Marlin/src/module/motion.h | 2 +
Marlin/src/module/planner.cpp | 102 +++++++++++----------------------
Marlin/src/module/planner.h | 5 ++
4 files changed, 139 insertions(+), 73 deletions(-)
diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp
index b32368ca92..9d43db48c7 100644
--- a/Marlin/src/module/motion.cpp
+++ b/Marlin/src/module/motion.cpp
@@ -1059,6 +1059,88 @@ FORCE_INLINE void segment_idle(millis_t &next_idle_ms) {
thermalManager.task(); // Returns immediately on most calls
}
+/**
+ * Get distance from displacements along axes and, if required, update move type.
+ */
+float get_move_distance(const xyze_pos_t &diff OPTARG(HAS_ROTATIONAL_AXES, bool &is_cartesian_move)) {
+ if (!(NUM_AXIS_GANG(diff.x, || diff.y, /* skip z */, || diff.i, || diff.j, || diff.k, || diff.u, || diff.v, || diff.w)))
+ return TERN0(HAS_Z_AXIS, ABS(diff.z));
+
+ #if ENABLED(ARTICULATED_ROBOT_ARM)
+
+ // For articulated robots, interpreting feedrate like LinuxCNC would require inverse kinematics. As a workaround, pretend that motors sit on n mutually orthogonal
+ // axes and assume that we could think of distance as magnitude of an n-vector in an n-dimensional Euclidian space.
+ const float distance_sqr = NUM_AXIS_GANG(
+ sq(diff.x), + sq(diff.y), + sq(diff.z),
+ + sq(diff.i), + sq(diff.j), + sq(diff.k),
+ + sq(diff.u), + sq(diff.v), + sq(diff.w)
+ );
+
+ #elif ENABLED(FOAMCUTTER_XYUV)
+
+ const float distance_sqr = (
+ #if HAS_J_AXIS
+ _MAX(sq(diff.x) + sq(diff.y), sq(diff.i) + sq(diff.j)) // Special 5 axis kinematics. Return the larger of plane X/Y or I/J
+ #else
+ sq(diff.x) + sq(diff.y) // Foamcutter with only two axes (XY)
+ #endif
+ );
+
+ #else
+
+ /**
+ * Calculate distance for feedrate interpretation in accordance with NIST RS274NGC interpreter - version 3) and its default CANON_XYZ feed reference mode.
+ * Assume:
+ * - X, Y, Z are the primary linear axes;
+ * - U, V, W are secondary linear axes;
+ * - A, B, C are rotational axes.
+ *
+ * Then:
+ * - dX, dY, dZ are the displacements of the primary linear axes;
+ * - dU, dV, dW are the displacements of linear axes;
+ * - dA, dB, dC are the displacements of rotational axes.
+ *
+ * The time it takes to execute a move command with feedrate F is t = D/F,
+ * plus any time for acceleration and deceleration.
+ * Here, D is the total distance, calculated as follows:
+ *
+ * D^2 = dX^2 + dY^2 + dZ^2
+ * if D^2 == 0 (none of XYZ move but any secondary linear axes move, whether other axes are moved or not):
+ * D^2 = dU^2 + dV^2 + dW^2
+ * if D^2 == 0 (only rotational axes are moved):
+ * D^2 = dA^2 + dB^2 + dC^2
+ */
+ float distance_sqr = XYZ_GANG(sq(diff.x), + sq(diff.y), + sq(diff.z));
+
+ #if SECONDARY_LINEAR_AXES
+ if (UNEAR_ZERO(distance_sqr)) {
+ // Move does not involve any primary linear axes (xyz) but might involve secondary linear axes
+ distance_sqr = (
+ SECONDARY_AXIS_GANG(
+ IF_DISABLED(AXIS4_ROTATES, + sq(diff.i)),
+ IF_DISABLED(AXIS5_ROTATES, + sq(diff.j)),
+ IF_DISABLED(AXIS6_ROTATES, + sq(diff.k)),
+ IF_DISABLED(AXIS7_ROTATES, + sq(diff.u)),
+ IF_DISABLED(AXIS8_ROTATES, + sq(diff.v)),
+ IF_DISABLED(AXIS9_ROTATES, + sq(diff.w))
+ )
+ );
+ }
+ #endif
+
+ #if HAS_ROTATIONAL_AXES
+ if (UNEAR_ZERO(distance_sqr)) {
+ // Move involves only rotational axes. Calculate angular distance in accordance with LinuxCNC
+ is_cartesian_move = false;
+ distance_sqr = ROTATIONAL_AXIS_GANG(sq(diff.i), + sq(diff.j), + sq(diff.k), + sq(diff.u), + sq(diff.v), + sq(diff.w));
+ }
+ #endif
+
+ #endif
+
+ return SQRT(distance_sqr);
+}
+
#if IS_KINEMATIC
#if IS_SCARA
@@ -1109,7 +1191,10 @@ FORCE_INLINE void segment_idle(millis_t &next_idle_ms) {
if (!position_is_reachable(destination)) return true;
// Get the linear distance in XYZ
- float cartesian_mm = xyz_float_t(diff).magnitude();
+ #if HAS_ROTATIONAL_AXES
+ bool cartes_move = true;
+ #endif
+ float cartesian_mm = get_move_distance(diff OPTARG(HAS_ROTATIONAL_AXES, cartes_move));
// If the move is very short, check the E move distance
TERN_(HAS_EXTRUDERS, if (UNEAR_ZERO(cartesian_mm)) cartesian_mm = ABS(diff.e));
@@ -1118,7 +1203,13 @@ FORCE_INLINE void segment_idle(millis_t &next_idle_ms) {
if (UNEAR_ZERO(cartesian_mm)) return true;
// Minimum number of seconds to move the given distance
- const float seconds = cartesian_mm / scaled_fr_mm_s;
+ const float seconds = cartesian_mm / (
+ #if BOTH(HAS_ROTATIONAL_AXES, INCH_MODE_SUPPORT)
+ cartes_move ? scaled_fr_mm_s : LINEAR_UNIT(scaled_fr_mm_s)
+ #else
+ scaled_fr_mm_s
+ #endif
+ );
// The number of segments-per-second times the duration
// gives the number of segments
@@ -1140,6 +1231,7 @@ FORCE_INLINE void segment_idle(millis_t &next_idle_ms) {
// Add hints to help optimize the move
PlannerHints hints(cartesian_mm * inv_segments);
+ TERN_(HAS_ROTATIONAL_AXES, hints.cartesian_move = cartes_move);
TERN_(FEEDRATE_SCALING, hints.inv_duration = scaled_fr_mm_s / hints.millimeters);
/*
@@ -1190,9 +1282,13 @@ FORCE_INLINE void segment_idle(millis_t &next_idle_ms) {
}
// Get the linear distance in XYZ
+ #if HAS_ROTATIONAL_AXES
+ bool cartes_move = true;
+ #endif
+ float cartesian_mm = get_move_distance(diff OPTARG(HAS_ROTATIONAL_AXES, cartes_move));
+
// If the move is very short, check the E move distance
// No E move either? Game over.
- float cartesian_mm = diff.magnitude();
TERN_(HAS_EXTRUDERS, if (UNEAR_ZERO(cartesian_mm)) cartesian_mm = ABS(diff.e));
if (UNEAR_ZERO(cartesian_mm)) return;
@@ -1207,6 +1303,7 @@ FORCE_INLINE void segment_idle(millis_t &next_idle_ms) {
// Add hints to help optimize the move
PlannerHints hints(cartesian_mm * inv_segments);
+ TERN_(HAS_ROTATIONAL_AXES, hints.cartesian_move = cartes_move);
TERN_(FEEDRATE_SCALING, hints.inv_duration = scaled_fr_mm_s / hints.millimeters);
//SERIAL_ECHOPGM("mm=", cartesian_mm);
diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h
index f0e4094f0f..2acc54ebc2 100644
--- a/Marlin/src/module/motion.h
+++ b/Marlin/src/module/motion.h
@@ -302,6 +302,8 @@ void report_current_position_projected();
#endif
#endif
+float get_move_distance(const xyze_pos_t &diff OPTARG(HAS_ROTATIONAL_AXES, bool &is_cartesian_move));
+
void get_cartesian_from_steppers();
void set_current_from_steppers_for_axis(const AxisEnum axis);
diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp
index 46aff32481..ff5449d230 100644
--- a/Marlin/src/module/planner.cpp
+++ b/Marlin/src/module/planner.cpp
@@ -2130,8 +2130,8 @@ bool Planner::_populate_block(
TERN_(LCD_SHOW_E_TOTAL, e_move_accumulator += steps_dist_mm.e);
- #if BOTH(HAS_ROTATIONAL_AXES, INCH_MODE_SUPPORT)
- bool cartesian_move = true;
+ #if HAS_ROTATIONAL_AXES
+ bool cartesian_move = hints.cartesian_move;
#endif
if (true NUM_AXIS_GANG(
@@ -2152,71 +2152,34 @@ bool Planner::_populate_block(
if (hints.millimeters)
block->millimeters = hints.millimeters;
else {
- /**
- * Distance for interpretation of feedrate in accordance with LinuxCNC (the successor of NIST
- * RS274NGC interpreter - version 3) and its default CANON_XYZ feed reference mode.
- * Assume that X, Y, Z are the primary linear axes and U, V, W are secondary linear axes and A, B, C are
- * rotational axes. Then dX, dY, dZ are the displacements of the primary linear axes and dU, dV, dW are the displacements of linear axes and
- * dA, dB, dC are the displacements of rotational axes.
- * The time it takes to execute move command with feedrate F is t = D/F, where D is the total distance, calculated as follows:
- * D^2 = dX^2 + dY^2 + dZ^2
- * if D^2 == 0 (none of XYZ move but any secondary linear axes move, whether other axes are moved or not):
- * D^2 = dU^2 + dV^2 + dW^2
- * if D^2 == 0 (only rotational axes are moved):
- * D^2 = dA^2 + dB^2 + dC^2
- */
- float distance_sqr = (
- #if ENABLED(ARTICULATED_ROBOT_ARM)
- // For articulated robots, interpreting feedrate like LinuxCNC would require inverse kinematics. As a workaround, pretend that motors sit on n mutually orthogonal
- // axes and assume that we could think of distance as magnitude of an n-vector in an n-dimensional Euclidian space.
- NUM_AXIS_GANG(
- sq(steps_dist_mm.x), + sq(steps_dist_mm.y), + sq(steps_dist_mm.z),
- + sq(steps_dist_mm.i), + sq(steps_dist_mm.j), + sq(steps_dist_mm.k),
- + sq(steps_dist_mm.u), + sq(steps_dist_mm.v), + sq(steps_dist_mm.w)
- )
- #elif ENABLED(FOAMCUTTER_XYUV)
- #if HAS_J_AXIS
- // Special 5 axis kinematics. Return the largest distance move from either X/Y or I/J plane
- _MAX(sq(steps_dist_mm.x) + sq(steps_dist_mm.y), sq(steps_dist_mm.i) + sq(steps_dist_mm.j))
- #else // Foamcutter with only two axes (XY)
- sq(steps_dist_mm.x) + sq(steps_dist_mm.y)
- #endif
- #elif ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX)
- XYZ_GANG(sq(steps_dist_mm.head.x), + sq(steps_dist_mm.head.y), + sq(steps_dist_mm.z))
+ const xyze_pos_t displacement = LOGICAL_AXIS_ARRAY(
+ steps_dist_mm.e,
+ #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX)
+ steps_dist_mm.head.x,
+ steps_dist_mm.head.y,
+ steps_dist_mm.z,
#elif CORE_IS_XZ
- XYZ_GANG(sq(steps_dist_mm.head.x), + sq(steps_dist_mm.y), + sq(steps_dist_mm.head.z))
+ steps_dist_mm.head.x,
+ steps_dist_mm.y,
+ steps_dist_mm.head.z,
#elif CORE_IS_YZ
- XYZ_GANG(sq(steps_dist_mm.x), + sq(steps_dist_mm.head.y), + sq(steps_dist_mm.head.z))
+ steps_dist_mm.x,
+ steps_dist_mm.head.y,
+ steps_dist_mm.head.z,
#else
- XYZ_GANG(sq(steps_dist_mm.x), + sq(steps_dist_mm.y), + sq(steps_dist_mm.z))
+ steps_dist_mm.x,
+ steps_dist_mm.y,
+ steps_dist_mm.z,
#endif
+ steps_dist_mm.i,
+ steps_dist_mm.j,
+ steps_dist_mm.k,
+ steps_dist_mm.u,
+ steps_dist_mm.v,
+ steps_dist_mm.w
);
- #if SECONDARY_LINEAR_AXES && NONE(FOAMCUTTER_XYUV, ARTICULATED_ROBOT_ARM)
- if (UNEAR_ZERO(distance_sqr)) {
- // Move does not involve any primary linear axes (xyz) but might involve secondary linear axes
- distance_sqr = (0.0f
- SECONDARY_AXIS_GANG(
- IF_DISABLED(AXIS4_ROTATES, + sq(steps_dist_mm.i)),
- IF_DISABLED(AXIS5_ROTATES, + sq(steps_dist_mm.j)),
- IF_DISABLED(AXIS6_ROTATES, + sq(steps_dist_mm.k)),
- IF_DISABLED(AXIS7_ROTATES, + sq(steps_dist_mm.u)),
- IF_DISABLED(AXIS8_ROTATES, + sq(steps_dist_mm.v)),
- IF_DISABLED(AXIS9_ROTATES, + sq(steps_dist_mm.w))
- )
- );
- }
- #endif
-
- #if HAS_ROTATIONAL_AXES && NONE(FOAMCUTTER_XYUV, ARTICULATED_ROBOT_ARM)
- if (UNEAR_ZERO(distance_sqr)) {
- // Move involves only rotational axes. Calculate angular distance in accordance with LinuxCNC
- TERN_(INCH_MODE_SUPPORT, cartesian_move = false);
- distance_sqr = ROTATIONAL_AXIS_GANG(sq(steps_dist_mm.i), + sq(steps_dist_mm.j), + sq(steps_dist_mm.k), + sq(steps_dist_mm.u), + sq(steps_dist_mm.v), + sq(steps_dist_mm.w));
- }
- #endif
-
- block->millimeters = SQRT(distance_sqr);
+ block->millimeters = get_move_distance(displacement OPTARG(HAS_ROTATIONAL_AXES, cartesian_move));
}
/**
@@ -2354,12 +2317,13 @@ bool Planner::_populate_block(
// Calculate inverse time for this move. No divide by zero due to previous checks.
// Example: At 120mm/s a 60mm move involving XYZ axes takes 0.5s. So this will give 2.0.
// Example 2: At 120°/s a 60° move involving only rotational axes takes 0.5s. So this will give 2.0.
- float inverse_secs;
- #if BOTH(HAS_ROTATIONAL_AXES, INCH_MODE_SUPPORT)
- inverse_secs = inverse_millimeters * (cartesian_move ? fr_mm_s : LINEAR_UNIT(fr_mm_s));
- #else
- inverse_secs = fr_mm_s * inverse_millimeters;
- #endif
+ float inverse_secs = inverse_millimeters * (
+ #if BOTH(HAS_ROTATIONAL_AXES, INCH_MODE_SUPPORT)
+ cartesian_move ? fr_mm_s : LINEAR_UNIT(fr_mm_s)
+ #else
+ fr_mm_s
+ #endif
+ );
// Get the number of non busy movements in queue (non busy means that they can be altered)
const uint8_t moves_queued = nonbusy_movesplanned();
@@ -3157,9 +3121,7 @@ bool Planner::buffer_line(const xyze_pos_t &cart, const_feedRate_t fr_mm_s
PlannerHints ph = hints;
if (!hints.millimeters)
- ph.millimeters = (cart_dist_mm.x || cart_dist_mm.y)
- ? xyz_pos_t(cart_dist_mm).magnitude()
- : TERN0(HAS_Z_AXIS, ABS(cart_dist_mm.z));
+ ph.millimeters = get_move_distance(xyze_pos_t(cart_dist_mm) OPTARG(HAS_ROTATIONAL_AXES, ph.cartesian_move));
#if DISABLED(FEEDRATE_SCALING)
diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h
index 7cc8bc08e4..b63fabb84d 100644
--- a/Marlin/src/module/planner.h
+++ b/Marlin/src/module/planner.h
@@ -377,6 +377,11 @@ struct PlannerHints {
// would calculate if it knew the as-yet-unbuffered path
#endif
+ #if HAS_ROTATIONAL_AXES
+ bool cartesian_move = true; // True if linear motion of the tool centerpoint relative to the workpiece occurs.
+ // False if no movement of the tool center point relative to the work piece occurs
+ // (i.e. the tool rotates around the tool centerpoint)
+ #endif
PlannerHints(const_float_t mm=0.0f) : millimeters(mm) {}
};
From df44424388ee5b2105270ad7086c37f84263dc5a Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Tue, 21 Feb 2023 15:08:25 -0600
Subject: [PATCH 42/97] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Fix?=
=?UTF-8?q?=20preheat=20tests=20(nested=20macro=20limit=20~256)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Followup to #25407
---
Marlin/src/core/macros.h | 4 ++-
Marlin/src/module/temperature.cpp | 41 ++++++++++++++++++++++++++-----
Marlin/src/module/temperature.h | 2 +-
3 files changed, 39 insertions(+), 8 deletions(-)
diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h
index 65fba21094..fec390b64b 100644
--- a/Marlin/src/core/macros.h
+++ b/Marlin/src/core/macros.h
@@ -634,7 +634,9 @@
#define DEFER4(M) M EMPTY EMPTY EMPTY EMPTY()()()()
// Force define expansion
-#define EVAL(V...) EVAL16(V)
+#define EVAL EVAL16
+#define EVAL4096(V...) EVAL2048(EVAL2048(V))
+#define EVAL2048(V...) EVAL1024(EVAL1024(V))
#define EVAL1024(V...) EVAL512(EVAL512(V))
#define EVAL512(V...) EVAL256(EVAL256(V))
#define EVAL256(V...) EVAL128(EVAL128(V))
diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp
index fc3149d4f0..b572690256 100644
--- a/Marlin/src/module/temperature.cpp
+++ b/Marlin/src/module/temperature.cpp
@@ -317,7 +317,7 @@ PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED);
#if HAS_HOTEND
hotend_info_t Temperature::temp_hotend[HOTENDS];
- const celsius_t Temperature::hotend_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
+ constexpr celsius_t Temperature::hotend_maxtemp[HOTENDS];
// Sanity-check max readable temperatures
#define CHECK_MAXTEMP_(N,M,S) static_assert( \
@@ -328,12 +328,41 @@ PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED);
#if HAS_PREHEAT
#define CHECK_PREHEAT__(N,P,T,M) static_assert(T <= M - HOTEND_OVERSHOOT, "PREHEAT_" STRINGIFY(P) "_TEMP_HOTEND (" STRINGIFY(T) ") must be less than HEATER_" STRINGIFY(N) "_MAXTEMP (" STRINGIFY(M) ") - " STRINGIFY(HOTEND_OVERSHOOT) ".");
- #define CHECK_PREHEAT_(N,P) CHECK_PREHEAT__(N, P, PREHEAT_##P##_TEMP_HOTEND, HEATER_##N##_MAXTEMP);
- #define CHECK_PREHEAT(P) REPEAT2(HOTENDS, CHECK_PREHEAT_, P);
- RREPEAT_1(PREHEAT_COUNT, CHECK_PREHEAT)
- #endif
+ #define CHECK_PREHEAT_(N,P) CHECK_PREHEAT__(N, P, PREHEAT_##P##_TEMP_HOTEND, HEATER_##N##_MAXTEMP)
+ #define CHECK_PREHEAT(P) REPEAT2(HOTENDS, CHECK_PREHEAT_, P)
+ #if PREHEAT_COUNT >= 1
+ CHECK_PREHEAT(1)
+ #endif
+ #if PREHEAT_COUNT >= 2
+ CHECK_PREHEAT(2)
+ #endif
+ #if PREHEAT_COUNT >= 3
+ CHECK_PREHEAT(3)
+ #endif
+ #if PREHEAT_COUNT >= 4
+ CHECK_PREHEAT(4)
+ #endif
+ #if PREHEAT_COUNT >= 5
+ CHECK_PREHEAT(5)
+ #endif
+ #if PREHEAT_COUNT >= 6
+ CHECK_PREHEAT(6)
+ #endif
+ #if PREHEAT_COUNT >= 7
+ CHECK_PREHEAT(7)
+ #endif
+ #if PREHEAT_COUNT >= 8
+ CHECK_PREHEAT(8)
+ #endif
+ #if PREHEAT_COUNT >= 9
+ CHECK_PREHEAT(9)
+ #endif
+ #if PREHEAT_COUNT >= 10
+ CHECK_PREHEAT(10)
+ #endif
+ #endif // HAS_PREHEAT
-#endif
+#endif // HAS_HOTEND
#if HAS_TEMP_REDUNDANT
redundant_info_t Temperature::temp_redundant;
diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h
index 136ed982dd..f86ec90d19 100644
--- a/Marlin/src/module/temperature.h
+++ b/Marlin/src/module/temperature.h
@@ -586,7 +586,7 @@ class Temperature {
#if HAS_HOTEND
static hotend_info_t temp_hotend[HOTENDS];
- static const celsius_t hotend_maxtemp[HOTENDS];
+ static constexpr celsius_t hotend_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
static celsius_t hotend_max_target(const uint8_t e) { return hotend_maxtemp[e] - (HOTEND_OVERSHOOT); }
#endif
From bc450b45824140d9c0e73e6b04c427ca81de5b57 Mon Sep 17 00:00:00 2001
From: EvilGremlin <22657714+EvilGremlin@users.noreply.github.com>
Date: Wed, 22 Feb 2023 00:19:29 +0300
Subject: [PATCH 43/97] =?UTF-8?q?=F0=9F=8C=90=20Update=20Russian=20languag?=
=?UTF-8?q?e=20(#25360)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/lcd/language/language_ru.h | 204 +++++++++++++-------------
1 file changed, 99 insertions(+), 105 deletions(-)
diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h
index 75579972a2..c8077582b6 100644
--- a/Marlin/src/lcd/language/language_ru.h
+++ b/Marlin/src/lcd/language/language_ru.h
@@ -45,21 +45,19 @@ namespace Language_ru {
LSTR MSG_MEDIA_WAITING = _UxGT("Вставьте SD карту");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Сбой инициализации SD");
- #else
- LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Сбой инициализ. SD");
- #endif
- LSTR MSG_MEDIA_READ_ERROR = _UxGT("Ошибка считывания");
- LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB диск удалён");
- LSTR MSG_MEDIA_USB_FAILED = _UxGT("Ошибка USB диска");
- #if LCD_WIDTH > 21 || HAS_DWIN_E3V2
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Расширенные настройки");
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переполнение вызова");
#else
+ LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Сбой инициализ. SD");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Расшир. настройки");
LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переполн. вызова");
#endif
- LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Прогр. эндстопы");
- LSTR MSG_LCD_ENDSTOPS = _UxGT("Эндстопы"); // Max length 8 characters
- LSTR MSG_MAIN = _UxGT("Основное меню");
- LSTR MSG_ADVANCED_SETTINGS = _UxGT("Другие настройки");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Ошибка чтения");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB диск удалён");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("Ошибка USB диска");
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Прогр. концевики");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Концевик"); // Max length 8 characters
+ LSTR MSG_MAIN = _UxGT("Главное меню");
LSTR MSG_CONFIGURATION = _UxGT("Конфигурация");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Автостарт");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Выключить двигатели");
@@ -70,7 +68,7 @@ namespace Language_ru {
LSTR MSG_AUTO_HOME_X = _UxGT("Парковка X");
LSTR MSG_AUTO_HOME_Y = _UxGT("Парковка Y");
LSTR MSG_AUTO_HOME_Z = _UxGT("Парковка Z");
- LSTR MSG_AUTO_Z_ALIGN = _UxGT("Авто Z-выравнивание");
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Авто-выравнивание Z");
LSTR MSG_ITERATION = _UxGT("G34 Итерация: %i");
LSTR MSG_DECREASING_ACCURACY = _UxGT("Уменьшение точности!");
LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Точность достигнута");
@@ -78,7 +76,7 @@ namespace Language_ru {
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Нажмите чтобы начать");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Следующая точка");
LSTR MSG_LEVEL_BED_DONE = _UxGT("Выравнивание готово!");
- LSTR MSG_Z_FADE_HEIGHT = _UxGT("Высота спада");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Лимит выранивания");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Установ. смещения дома");
LSTR MSG_HOME_OFFSET_X = _UxGT("Смещение дома X");
@@ -99,20 +97,20 @@ namespace Language_ru {
#endif
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Преднагрев ") PREHEAT_1_LABEL;
- LSTR MSG_PREHEAT_1_H = _UxGT("Нагрев ") PREHEAT_1_LABEL " ~";
- LSTR MSG_PREHEAT_1_END = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" сопло");
- LSTR MSG_PREHEAT_1_END_E = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" сопло ~");
- LSTR MSG_PREHEAT_1_ALL = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" всё");
- LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" стол");
- LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" правка");
+ LSTR MSG_PREHEAT_1_H = _UxGT("Нагреть ~ ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_END = _UxGT("Нагреть сопло ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Нагреть сопло ~") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Нагреть всё ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Нагреть стол ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Правка предн. ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_M = _UxGT("Преднагрев $");
- LSTR MSG_PREHEAT_M_H = _UxGT("Нагрев $ ~");
- LSTR MSG_PREHEAT_M_END = _UxGT("Нагрев $ сопло");
- LSTR MSG_PREHEAT_M_END_E = _UxGT("Нагрев $ сопло ~");
- LSTR MSG_PREHEAT_M_ALL = _UxGT("Нагрев $ всё");
- LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Нагрев $ стол");
- LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Нагрев $ правка");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Нагреть ~ $");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Нагреть сопло $");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Нагреть сопло ~ $");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Нагреть всё $");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Нагреть стол $");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Правка преднаг. $");
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Нагрев Свой");
LSTR MSG_COOLDOWN = _UxGT("Охлаждение");
@@ -145,8 +143,8 @@ namespace Language_ru {
LSTR MSG_SWITCH_PS_ON = _UxGT("Включить питание");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Выключить питание");
- LSTR MSG_EXTRUDE = _UxGT("Экструзия");
- LSTR MSG_RETRACT = _UxGT("Втягивание");
+ LSTR MSG_EXTRUDE = _UxGT("Выдавить");
+ LSTR MSG_RETRACT = _UxGT("Втянуть");
LSTR MSG_MOVE_AXIS = _UxGT("Движение по осям");
LSTR MSG_BED_LEVELING = _UxGT("Выравнивание стола");
LSTR MSG_LEVEL_BED = _UxGT("Выровнять стол");
@@ -245,9 +243,9 @@ namespace Language_ru {
#endif
LSTR MSG_G26_HEATING_BED = _UxGT("G26 нагрев стола");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 нагрев сопла");
- LSTR MSG_G26_MANUAL_PRIME = _UxGT("Ручная грунтовка");
- LSTR MSG_G26_FIXED_LENGTH = _UxGT("Грунт фикс. длины");
- LSTR MSG_G26_PRIME_DONE = _UxGT("Грунтовка сделана");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Ручная прочистка");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Прочистка фикс.длины");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Прочистка окончена");
LSTR MSG_G26_CANCELED = _UxGT("G26 завершена");
LSTR MSG_G26_LEAVING = _UxGT("Выйти из G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Продолжить сетку");
@@ -257,7 +255,7 @@ namespace Language_ru {
#else
LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-точечное выравн.");
#endif
- LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Калибровка растера");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Выравнивание сеткой");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Выровнять сетку");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Крайние точки");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Тип карты");
@@ -291,7 +289,7 @@ namespace Language_ru {
LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Ошибка: Восстан.UBL");
LSTR MSG_UBL_Z_OFFSET = _UxGT("Смещение Z: ");
LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Смещение Z останов.");
- LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL пошагово");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Пошаговая настр. UBL");
LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Строить холодную");
LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Умное заполнение");
LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Проверить сетку");
@@ -364,7 +362,7 @@ namespace Language_ru {
LSTR MSG_STORED_FAN_N = _UxGT("Сохранённый кулер ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Дополн. кулер");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Дополн. кулер ~");
- LSTR MSG_CONTROLLER_FAN = _UxGT("Контроллер кулера");
+ LSTR MSG_CONTROLLER_FAN = _UxGT("Кулер контроллера");
LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Холостые обороты");
LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Автовключение");
LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Рабочие обороты");
@@ -375,16 +373,16 @@ namespace Language_ru {
LSTR MSG_MIN = " " LCD_STR_THERMOMETER ", " LCD_STR_DEGREE _UxGT("С мин");
LSTR MSG_MAX = " " LCD_STR_THERMOMETER ", " LCD_STR_DEGREE _UxGT("С макс");
LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Фактор");
- LSTR MSG_AUTOTEMP = _UxGT("Автотемпер.");
+ LSTR MSG_AUTOTEMP = _UxGT("Автотемпература");
LSTR MSG_LCD_ON = _UxGT("Вкл");
LSTR MSG_LCD_OFF = _UxGT("Выкл");
- LSTR MSG_PID_AUTOTUNE = _UxGT("Автоподбор PID");
- LSTR MSG_PID_AUTOTUNE_E = _UxGT("Автоподбор PID *");
- LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Подбор PID выполнен");
- LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Сбой автоподбора! Плохой экструдер.");
- LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Сбой автоподбора! Температура повышена.");
- LSTR MSG_PID_TIMEOUT = _UxGT("Сбой автоподбора! Завершение времени.");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("Автокалибровка PID");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("Автокалибр. PID *");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Калибр.PID выполнена");
+ LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Сбой калибровки! Неверный экструдер.");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Сбой калибровки! Температура завышена.");
+ LSTR MSG_PID_TIMEOUT = _UxGT("Сбой калибровки! Таймаут.");
LSTR MSG_SELECT_E = _UxGT("Выбор *");
LSTR MSG_ACC = _UxGT("Ускорение");
@@ -395,9 +393,9 @@ namespace Language_ru {
LSTR MSG_VN_JERK = _UxGT("V@-рывок");
LSTR MSG_VE_JERK = _UxGT("Ve-рывок");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
- LSTR MSG_JUNCTION_DEVIATION = _UxGT("Отклонение узла");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Отклонение угла");
#else
- LSTR MSG_JUNCTION_DEVIATION = _UxGT("Отклон. узла");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Отклон.угла");
#endif
LSTR MSG_MAX_SPEED = _UxGT("Скорость, мм/с");
LSTR MSG_VMAX_A = _UxGT("Скор.макс ") STR_A;
@@ -441,8 +439,8 @@ namespace Language_ru {
#endif
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Загрузка, мм");
LSTR MSG_FILAMENT_LOAD = _UxGT("Выгрузка, мм");
- LSTR MSG_ADVANCE_K = _UxGT("Kоэф. продвиж.");
- LSTR MSG_ADVANCE_K_E = _UxGT("Kоэф. продвиж. *");
+ LSTR MSG_ADVANCE_K = _UxGT("К-фактор LA");
+ LSTR MSG_ADVANCE_K_E = _UxGT("К-фактор LA *");
LSTR MSG_CONTRAST = _UxGT("Контраст экрана");
LSTR MSG_STORE_EEPROM = _UxGT("Сохранить настройки");
LSTR MSG_LOAD_EEPROM = _UxGT("Загрузить настройки");
@@ -467,7 +465,7 @@ namespace Language_ru {
LSTR MSG_CURRENT = _UxGT("Ток");
LSTR MSG_VOLTAGE = _UxGT("Напряжение");
LSTR MSG_POWER = _UxGT("Мощность");
- LSTR MSG_START_PRINT = _UxGT("Начало печати");
+ LSTR MSG_START_PRINT = _UxGT("Запустить печать");
LSTR MSG_BUTTON_NEXT = _UxGT("Дальше"); //short text for buttons
LSTR MSG_BUTTON_INIT = _UxGT("Иниц-я");
@@ -501,48 +499,48 @@ namespace Language_ru {
LSTR MSG_KILLED = _UxGT("УБИТО. ");
LSTR MSG_STOPPED = _UxGT("ОСТАНОВЛЕНО. ");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
- LSTR MSG_CONTROL_RETRACT = _UxGT("Втягивание, мм");
- LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Смена втягив., мм");
- LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Возврат смены, мм");
- LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Возврат смены, V");
- LSTR MSG_AUTORETRACT = _UxGT("Автовтягивание");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Откат, мм");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Откат при смене, мм");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Возврат при смене, мм");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Возврат при смене, V");
+ LSTR MSG_AUTORETRACT = _UxGT("Автооткат");
#else
- LSTR MSG_CONTROL_RETRACT = _UxGT("Втягив., мм");
- LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Смена втяг.,мм");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Откат, мм");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Откат смены,мм");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Возвр.смены,мм");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Возвр.смены V");
- LSTR MSG_AUTORETRACT = _UxGT("Автовтягив.");
+ LSTR MSG_AUTORETRACT = _UxGT("Автооткат");
#endif
- LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Подскок, мм");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Подскок Z, мм");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Втягивание V");
LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Возврат, мм");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Возврат V");
- LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Поменять длины");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Длина замены");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
- LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Поменять дополнительно");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Дополнительная длина");
#else
- LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Поменять дополнит.");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Доп. длина");
#endif
- LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Очистить длину");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Длина прочистки");
LSTR MSG_TOOL_CHANGE = _UxGT("Смена сопел");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Поднятие по Z");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Начальная скор.");
- LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Скорость втягив.");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Скорость отката");
#else
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Началь.скор.");
- LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Скор.втягив.");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Скор.отката");
#endif
LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Парковать голову");
- LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Вернуть скорость");
- LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Обороти кулера");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Скорость возврата");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Скорость кулера");
LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Время кулера");
LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Авто Вкл.");
LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Авто Выкл.");
- LSTR MSG_TOOL_MIGRATION = _UxGT("Замена инструмента");
- LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Авто замена");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("Смена инструмента");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Авто смена");
LSTR MSG_TOOL_MIGRATION_END = _UxGT("Последний экструдер");
LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Замена на *");
LSTR MSG_FILAMENTCHANGE = _UxGT("Смена филамента");
@@ -560,29 +558,29 @@ namespace Language_ru {
LSTR MSG_CHANGE_MEDIA = _UxGT("Сменить SD карту");
LSTR MSG_RELEASE_MEDIA = _UxGT("Освободить SD карту");
LSTR MSG_ZPROBE_OUT = _UxGT("Z-зонд вне стола");
- LSTR MSG_SKEW_FACTOR = _UxGT("Фактор наклона");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Фактор перекоса");
LSTR MSG_BLTOUCH = _UxGT("Z-зонд BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Тестирование BLTouch");
LSTR MSG_BLTOUCH_RESET = _UxGT("Сброс BLTouch");
- LSTR MSG_BLTOUCH_STOW = _UxGT("Поднять BLTouch");
- LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Опустить BLTouch");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Втянуть BLTouch");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Выдвинуть BLTouch");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Режим SW");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Режим 5V");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Режим OD");
- LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Режим сохранения");
- LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Установить на 5V");
- LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Установить на OD");
- LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Слив отчёта");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Сохранить режим");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Установить в 5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Установить в OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Текущий режим");
LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("ОПАСНОСТЬ: Неправильные параметры приводят к повреждениям! Продолжить?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("Z-Зонд TouchMI");
LSTR MSG_TOUCHMI_INIT = _UxGT("Инициализация");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Тест Z-смещения");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Сохранить");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Установить TouchMI");
- LSTR MSG_MANUAL_DEPLOY = _UxGT("Установить зонд");
- LSTR MSG_MANUAL_STOW = _UxGT("Загрузить зонд");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Выдвинуть зонд");
+ LSTR MSG_MANUAL_STOW = _UxGT("Втянуть зонд");
LSTR MSG_HOME_FIRST = _UxGT("Сначала паркуй %s");
- LSTR MSG_ZPROBE_OFFSETS = _UxGT("Смещения Z-зонда");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Смещение Z-зонда");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("Смещение X");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Смещение Y");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Смещение Z");
@@ -595,17 +593,17 @@ namespace Language_ru {
LSTR MSG_BABYSTEP_Y = _UxGT("Микрошаг Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Микрошаг Z");
LSTR MSG_BABYSTEP_N = _UxGT("Микрошаг @");
- LSTR MSG_BABYSTEP_TOTAL = _UxGT("Сумарно");
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Суммарно");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Сработал концевик");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Разогрев не удался");
- LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Ошибка:Избыточная Т");
- LSTR MSG_THERMAL_RUNAWAY = _UxGT("УТЕЧКА ТЕПЛА");
- LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("УТЕЧКА ТЕПЛА СТОЛА");
- LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("УТЕЧКА ТЕПЛА КАМЕРЫ");
- LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("УТЕЧКА ОХЛАЖДЕНИЯ");
- LSTR MSG_COOLING_FAILED = _UxGT("ОХЛАДИТЬ НЕ УДАЛОСЬ");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("УТЕЧКА ТЕМПЕРАТУРЫ");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("УТЕЧКА ТЕМП. СТОЛА");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("УТЕЧКА ТЕМП. КАМЕРЫ");
+ LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("УТЕЧКА ТЕМП. КУЛЕРА");
+ LSTR MSG_COOLING_FAILED = _UxGT("НЕ УДАЛОСЬ ОХЛАДИТЬ");
LSTR MSG_ERR_MAXTEMP = _UxGT("Ошибка: Т макс.");
LSTR MSG_ERR_MINTEMP = _UxGT("Ошибка: Т мин.");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Ошибка: Т контр.");
LSTR MSG_HALTED = _UxGT("ПРИНТЕР ОСТАНОВЛЕН");
LSTR MSG_PLEASE_RESET = _UxGT("Сделайте сброс");
LSTR MSG_SHORT_DAY = _UxGT("д"); // One character only
@@ -620,13 +618,13 @@ namespace Language_ru {
LSTR MSG_CHAMBER_HEATING = _UxGT("Нагрев камеры...");
LSTR MSG_CHAMBER_COOLING = _UxGT("Охладжение камеры...");
LSTR MSG_LASER_COOLING = _UxGT("Охлаждение лазера...");
- LSTR MSG_DELTA_CALIBRATE = _UxGT("Калибровка Delta");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Калибровка дельты");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Калибровать X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Калибровать Y");
LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Калибровать Z");
LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Калибровать центр");
- LSTR MSG_DELTA_SETTINGS = _UxGT("Настройки Delta");
- LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Авто калибровка");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Настройки дельты");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Автокалибр. дельты");
LSTR MSG_DELTA_DIAG_ROD = _UxGT("Стержень диаг.");
LSTR MSG_DELTA_HEIGHT = _UxGT("Высота");
LSTR MSG_DELTA_RADIUS = _UxGT("Радиус");
@@ -641,8 +639,8 @@ namespace Language_ru {
LSTR MSG_LINEAR_LEVELING = _UxGT("Линейное выравн.");
LSTR MSG_BILINEAR_LEVELING = _UxGT("Билин. выравнив.");
#endif
- LSTR MSG_UBL_LEVELING = _UxGT("Управление UBL");
- LSTR MSG_MESH_LEVELING = _UxGT("Выравнивание сетки");
+ LSTR MSG_UBL_LEVELING = _UxGT("Выравнивание UBL");
+ LSTR MSG_MESH_LEVELING = _UxGT("Выравнивание сеткой");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_MESH_DONE = _UxGT("Зондирование выполнено");
#else
@@ -666,7 +664,7 @@ namespace Language_ru {
#endif
LSTR MSG_CASE_LIGHT = _UxGT("Подсветка корпуса");
LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Яркость подсветки");
- LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Неверный принтер");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("НЕВЕРНЫЙ ПРИНТЕР");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Счётчик печати");
@@ -769,10 +767,10 @@ namespace Language_ru {
LSTR MSG_END_Z = _UxGT(" Конец Z");
LSTR MSG_GAMES = _UxGT("Игры");
- LSTR MSG_BRICKOUT = _UxGT("Кирпичи");
- LSTR MSG_INVADERS = _UxGT("Вторжение");
- LSTR MSG_SNAKE = _UxGT("Змейка");
- LSTR MSG_MAZE = _UxGT("Лабиринт");
+ LSTR MSG_BRICKOUT = _UxGT("Brickout");
+ LSTR MSG_INVADERS = _UxGT("Invaders");
+ LSTR MSG_SNAKE = _UxGT("Sn4k3");
+ LSTR MSG_MAZE = _UxGT("Maze");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
LSTR MSG_BAD_PAGE = _UxGT("Плохой индекс страницы");
@@ -791,9 +789,9 @@ namespace Language_ru {
LSTR MSG_PASSWORD_SET = _UxGT("Пароль это ");
LSTR MSG_START_OVER = _UxGT("Старт через");
#if LCD_WIDTH > 21 || HAS_DWIN_E3V2
- LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Запомни для сохранения!");
+ LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Не забудь сохранить!");
#else
- LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Запомни, сохрани!");
+ LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Не забудь сохранить");
#endif
LSTR MSG_PASSWORD_REMOVED = _UxGT("Пароль удалён");
@@ -811,7 +809,7 @@ namespace Language_ru {
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Ожидайте", "выгрузки", "филамента"));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Ожидайте", "загрузки", "филамента"));
LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Ожидайте", "экструзии", "филамента"));
- LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Нажмите кнопку", "для завершения", "очистки филамента"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Нажмите кнопку", "для завершения", "прочистки филамента"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Ожидайте", "возобновления", "печати"));
#else
LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Продолжить печать"));
@@ -821,15 +819,15 @@ namespace Language_ru {
LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Нагрев..."));
LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Выгрузка..."));
LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Загрузка..."));
- LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Выдавливание..."));
- LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Завершить очистку"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Прочистка..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Завершить прочистку"));
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Возобновление..."));
#endif
LSTR MSG_TMC_DRIVERS = _UxGT("Драйвера TMC");
LSTR MSG_TMC_CURRENT = _UxGT("Ток двигателей");
LSTR MSG_TMC_HYBRID_THRS = _UxGT("Гибридный режим");
- LSTR MSG_TMC_HOMING_THRS = _UxGT("Режим без эндстопов");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Чувствительность");
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Режим драйвера");
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("Тихий режим вкл");
@@ -839,13 +837,9 @@ namespace Language_ru {
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Исправление");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Сглаживание");
- LSTR MSG_LEVEL_X_AXIS = _UxGT("Уровень оси X");
- LSTR MSG_AUTO_CALIBRATE = _UxGT("Авто калибровка");
- #if LCD_WIDTH > 21 || HAS_DWIN_E3V2
- LSTR MSG_HEATER_TIMEOUT = _UxGT("Время нагревателя вышло");
- #else
- LSTR MSG_HEATER_TIMEOUT = _UxGT("Время нагрев. вышло");
- #endif
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("Выровнять ось X");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Автокалибровка");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Таймаут нагрева");
LSTR MSG_REHEAT = _UxGT("Возобновить нагрев");
LSTR MSG_REHEATING = _UxGT("Нагрев...");
@@ -867,7 +861,7 @@ namespace Language_ru {
LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Калибровка успешна");
LSTR MSG_CALIBRATION_FAILED = _UxGT("Ошибка калибровки");
- LSTR MSG_DRIVER_BACKWARD = _UxGT(" драйвер назад");
+ LSTR MSG_DRIVER_BACKWARD = _UxGT(" драйвер наоборот");
LSTR MSG_SD_CARD = _UxGT("SD Карта");
LSTR MSG_USB_DISK = _UxGT("USB Диск");
From 464bb1f149324ff51d17699df4e55a305faf0d1c Mon Sep 17 00:00:00 2001
From: ellensp <530024+ellensp@users.noreply.github.com>
Date: Wed, 22 Feb 2023 11:27:47 +1300
Subject: [PATCH 44/97] =?UTF-8?q?=F0=9F=94=A8=20Encrypt=20some=20MKS=20Rob?=
=?UTF-8?q?in=20(#25349)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ini/stm32f1-maple.ini | 72 +++++++++++++++++++++----------------------
1 file changed, 36 insertions(+), 36 deletions(-)
diff --git a/ini/stm32f1-maple.ini b/ini/stm32f1-maple.ini
index dc75774754..d06e95750a 100644
--- a/ini/stm32f1-maple.ini
+++ b/ini/stm32f1-maple.ini
@@ -195,23 +195,23 @@ build_unflags = ${STM32F1_maple.build_unflags}
# MKS Robin Mini (STM32F103VET6)
#
[env:mks_robin_mini_maple]
-extends = STM32F1_maple
-board = genericSTM32F103VE
-board_build.address = 0x08007000
-board_build.rename = Robin_mini.bin
-board_build.ldscript = mks_robin_mini.ld
-build_flags = ${STM32F1_maple.build_flags} -DMCU_STM32F103VE
+extends = STM32F1_maple
+board = genericSTM32F103VE
+board_build.address = 0x08007000
+board_build.encrypt_mks = Robin_mini.bin
+board_build.ldscript = mks_robin_mini.ld
+build_flags = ${STM32F1_maple.build_flags} -DMCU_STM32F103VE
#
# MKS Robin Nano v1.x and v2 (STM32F103VET6)
#
[env:mks_robin_nano_v1v2_maple]
-extends = STM32F1_maple
-board = genericSTM32F103VE
-board_build.address = 0x08007000
-board_build.rename = Robin_nano35.bin
-board_build.ldscript = mks_robin_nano.ld
-build_flags = ${STM32F1_maple.build_flags} -DMCU_STM32F103VE -DSS_TIMER=4
+extends = STM32F1_maple
+board = genericSTM32F103VE
+board_build.address = 0x08007000
+board_build.encrypt_mks = Robin_nano35.bin
+board_build.ldscript = mks_robin_nano.ld
+build_flags = ${STM32F1_maple.build_flags} -DMCU_STM32F103VE -DSS_TIMER=4
#
# MKS Robin (STM32F103ZET6)
@@ -245,46 +245,46 @@ extra_scripts = ${STM32F1_maple.extra_scripts}
# MKS Robin E3 with TMC2209
#
[env:mks_robin_e3_maple]
-extends = STM32F1_maple
-board = genericSTM32F103RC
-board_build.address = 0x08005000
-board_build.rename = Robin_e3.bin
-board_build.ldscript = mks_robin_e3.ld
-build_flags = ${STM32F1_maple.build_flags} -DDEBUG_LEVEL=0 -DSS_TIMER=4
+extends = STM32F1_maple
+board = genericSTM32F103RC
+board_build.address = 0x08005000
+board_build.encrypt_mks = Robin_e3.bin
+board_build.ldscript = mks_robin_e3.ld
+build_flags = ${STM32F1_maple.build_flags} -DDEBUG_LEVEL=0 -DSS_TIMER=4
#
# MKS Robin E3p (STM32F103VET6)
# - LVGL UI
#
[env:mks_robin_e3p_maple]
-extends = STM32F1_maple
-board = genericSTM32F103VE
-board_build.address = 0x08007000
-board_build.rename = Robin_e3p.bin
-board_build.ldscript = mks_robin_e3p.ld
-build_flags = ${STM32F1_maple.build_flags} -DMCU_STM32F103VE -DSS_TIMER=4
-debug_tool = jlink
-upload_protocol = jlink
+extends = STM32F1_maple
+board = genericSTM32F103VE
+board_build.address = 0x08007000
+board_build.encrypt_mks = Robin_e3p.bin
+board_build.ldscript = mks_robin_e3p.ld
+build_flags = ${STM32F1_maple.build_flags} -DMCU_STM32F103VE -DSS_TIMER=4
+debug_tool = jlink
+upload_protocol = jlink
#
# MKS Robin Lite/Lite2 (STM32F103RCT6)
#
[env:mks_robin_lite_maple]
-extends = STM32F1_maple
-board = genericSTM32F103RC
-board_build.address = 0x08005000
-board_build.rename = mksLite.bin
-board_build.ldscript = mks_robin_lite.ld
+extends = STM32F1_maple
+board = genericSTM32F103RC
+board_build.address = 0x08005000
+board_build.encrypt_mks = mksLite.bin
+board_build.ldscript = mks_robin_lite.ld
#
# MKS ROBIN LITE3 (STM32F103RCT6)
#
[env:mks_robin_lite3_maple]
-extends = STM32F1_maple
-board = genericSTM32F103RC
-board_build.address = 0x08005000
-board_build.rename = mksLite3.bin
-board_build.ldscript = mks_robin_lite.ld
+extends = STM32F1_maple
+board = genericSTM32F103RC
+board_build.address = 0x08005000
+board_build.encrypt_mks = mksLite3.bin
+board_build.ldscript = mks_robin_lite.ld
#
# JGAurora A5S A1 (STM32F103ZET6)
From 5a8883b44f6a6fc7be43e0f50c5d7708d0e28c97 Mon Sep 17 00:00:00 2001
From: tombrazier <68918209+tombrazier@users.noreply.github.com>
Date: Tue, 21 Feb 2023 22:37:11 +0000
Subject: [PATCH 45/97] =?UTF-8?q?=F0=9F=90=9B=20Fix=20AVR=20maths=20used?=
=?UTF-8?q?=20by=20Stepper=20(#25338)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/HAL/AVR/math.h | 40 ++++++++++++++++++-----------------
Marlin/src/module/stepper.cpp | 2 +-
Marlin/src/module/stepper.h | 4 ++--
3 files changed, 24 insertions(+), 22 deletions(-)
diff --git a/Marlin/src/HAL/AVR/math.h b/Marlin/src/HAL/AVR/math.h
index 7dd1018ff1..34f859fbbb 100644
--- a/Marlin/src/HAL/AVR/math.h
+++ b/Marlin/src/HAL/AVR/math.h
@@ -27,13 +27,14 @@
// intRes = longIn1 * longIn2 >> 24
// uses:
-// A[tmp] to store 0
-// B[tmp] to store bits 16-23 of the 48bit result. The top bit is used to round the two byte result.
-// note that the lower two bytes and the upper byte of the 48bit result are not calculated.
-// this can cause the result to be out by one as the lower bytes may cause carries into the upper ones.
-// B A are bits 24-39 and are the returned value
-// C B A is longIn1
-// D C B A is longIn2
+// r1, r0 for the result of mul.
+// [tmp1] to store 0.
+// [tmp2] to store bits 16-23 of the 56 bit result. The top bit of [tmp2] is used for rounding.
+// Note that the lower two bytes and the upper two bytes of the 56 bit result are not calculated.
+// This can cause the result to be out by one as the lower bytes may cause carries into the upper ones.
+// [intRes] (A B) is bits 24-39 and is the returned value.
+// [longIn1] (C B A) is a 24 bit parameter.
+// [longIn2] (D C B A) is a 32 bit parameter.
//
FORCE_INLINE static uint16_t MultiU24X32toH16(uint32_t longIn1, uint32_t longIn2) {
uint8_t tmp1;
@@ -66,11 +67,9 @@ FORCE_INLINE static uint16_t MultiU24X32toH16(uint32_t longIn1, uint32_t longIn2
A("add %[tmp2], r1")
A("adc %A[intRes], %[tmp1]")
A("adc %B[intRes], %[tmp1]")
- A("lsr %[tmp2]")
- A("adc %A[intRes], %[tmp1]")
- A("adc %B[intRes], %[tmp1]")
A("mul %D[longIn2], %A[longIn1]")
- A("add %A[intRes], r0")
+ A("lsl %[tmp2]")
+ A("adc %A[intRes], r0")
A("adc %B[intRes], r1")
A("mul %D[longIn2], %B[longIn1]")
A("add %B[intRes], r0")
@@ -85,11 +84,16 @@ FORCE_INLINE static uint16_t MultiU24X32toH16(uint32_t longIn1, uint32_t longIn2
return intRes;
}
-// intRes = intIn1 * intIn2 >> 16
+// intRes = intIn1 * intIn2 >> 8
// uses:
-// r26 to store 0
-// r27 to store the byte 1 of the 24 bit result
-FORCE_INLINE static uint16_t MultiU16X8toH16(uint8_t charIn1, uint16_t intIn2) {
+// r1, r0 for the result of mul. After the second mul, r0 holds bits 0-7 of the 24 bit result and
+// the top bit of r0 is used for rounding.
+// [tmp] to store 0.
+// [intRes] (A B) is bits 8-15 and is the returned value.
+// [charIn1] is an 8 bit parameter.
+// [intIn2] (B A) is a 16 bit parameter.
+//
+FORCE_INLINE static uint16_t MultiU8X16toH16(uint8_t charIn1, uint16_t intIn2) {
uint8_t tmp;
uint16_t intRes;
__asm__ __volatile__ (
@@ -97,10 +101,8 @@ FORCE_INLINE static uint16_t MultiU16X8toH16(uint8_t charIn1, uint16_t intIn2) {
A("mul %[charIn1], %B[intIn2]")
A("movw %A[intRes], r0")
A("mul %[charIn1], %A[intIn2]")
- A("add %A[intRes], r1")
- A("adc %B[intRes], %[tmp]")
- A("lsr r0")
- A("adc %A[intRes], %[tmp]")
+ A("lsl r0")
+ A("adc %A[intRes], r1")
A("adc %B[intRes], %[tmp]")
A("clr r1")
: [intRes] "=&r" (intRes),
diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp
index 54b52cd16e..f9de7498d7 100644
--- a/Marlin/src/module/stepper.cpp
+++ b/Marlin/src/module/stepper.cpp
@@ -2062,7 +2062,7 @@ uint32_t Stepper::calc_timer_interval(uint32_t step_rate) {
const uint8_t rate_mod_256 = (step_rate & 0x00FF);
const uintptr_t table_address = uintptr_t(&speed_lookuptable_fast[uint8_t(step_rate >> 8)][0]),
gain = uint16_t(pgm_read_word(table_address + 2));
- return uint16_t(pgm_read_word(table_address)) - MultiU16X8toH16(rate_mod_256, gain);
+ return uint16_t(pgm_read_word(table_address)) - MultiU8X16toH16(rate_mod_256, gain);
}
else { // lower step rates
uintptr_t table_address = uintptr_t(&speed_lookuptable_slow[0][0]);
diff --git a/Marlin/src/module/stepper.h b/Marlin/src/module/stepper.h
index 3bbfeac9ca..0706451e90 100644
--- a/Marlin/src/module/stepper.h
+++ b/Marlin/src/module/stepper.h
@@ -114,11 +114,11 @@
#define TIMER_READ_ADD_AND_STORE_CYCLES 13UL
// The base ISR
- #define ISR_BASE_CYCLES 1000UL
+ #define ISR_BASE_CYCLES 996UL
// Linear advance base time is 32 cycles
#if ENABLED(LIN_ADVANCE)
- #define ISR_LA_BASE_CYCLES 32UL
+ #define ISR_LA_BASE_CYCLES 30UL
#else
#define ISR_LA_BASE_CYCLES 0UL
#endif
From e46a50236fa35531d66ec501a30804dfa9343f34 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Wed, 22 Feb 2023 00:20:53 +0000
Subject: [PATCH 46/97] [cron] Bump distribution date (2023-02-22)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 1e19985a35..5fadc32c52 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-02-21"
+//#define STRING_DISTRIBUTION_DATE "2023-02-22"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 1a54011d8c..32bd32d0d4 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-02-21"
+ #define STRING_DISTRIBUTION_DATE "2023-02-22"
#endif
/**
From 9e42480855b54d64415f3810d4aa911f7f439097 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Tue, 21 Feb 2023 18:22:16 -0600
Subject: [PATCH 47/97] =?UTF-8?q?=F0=9F=94=A8=20Fix=20marlin=5Fcustom.*=20?=
=?UTF-8?q?without=20lib=5Fdeps?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
buildroot/share/PlatformIO/scripts/common-dependencies.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/buildroot/share/PlatformIO/scripts/common-dependencies.py b/buildroot/share/PlatformIO/scripts/common-dependencies.py
index 91331d8f7a..6b5a9aea57 100644
--- a/buildroot/share/PlatformIO/scripts/common-dependencies.py
+++ b/buildroot/share/PlatformIO/scripts/common-dependencies.py
@@ -67,6 +67,7 @@ if pioutil.is_pio_build():
for dep in re.split(r',\s*', line):
lib_name = re.sub(r'@([~^]|[<>]=?)?[\d.]+', '', dep.strip()).split('=').pop(0)
lib_re = re.compile('(?!^' + lib_name + '\\b)')
+ if not 'lib_deps' in feat: feat['lib_deps'] = {}
feat['lib_deps'] = list(filter(lib_re.match, feat['lib_deps'])) + [dep]
blab("[%s] lib_deps = %s" % (feature, dep), 3)
From 44faf5cbab869a6b28287bd52172ced84badffe9 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Wed, 22 Feb 2023 14:30:02 -0600
Subject: [PATCH 48/97] =?UTF-8?q?=F0=9F=94=A7=20Fix=20Einsy=20Rambo=20TMC?=
=?UTF-8?q?=20driver=20check?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/pins/rambo/pins_EINSY_RAMBO.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h b/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h
index c5d5fcef78..de9ecc5b45 100644
--- a/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h
+++ b/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h
@@ -35,8 +35,8 @@
//
// TMC2130 Configuration_adv defaults for EinsyRambo
//
-#if !AXIS_DRIVER_TYPE_X(TMC2130) || !AXIS_DRIVER_TYPE_Y(TMC2130) || !AXIS_DRIVER_TYPE_Z(TMC2130) || !AXIS_DRIVER_TYPE_E0(TMC2130)
- #error "You must set ([XYZ]|E0)_DRIVER_TYPE to TMC2130 in Configuration.h for EinsyRambo."
+#if (HAS_X_AXIS && !AXIS_DRIVER_TYPE_X(TMC2130)) || (HAS_Y_AXIS && !AXIS_DRIVER_TYPE_Y(TMC2130)) || (HAS_Z_AXIS && !AXIS_DRIVER_TYPE_Z(TMC2130)) || (HAS_EXTRUDERS && !AXIS_DRIVER_TYPE_E0(TMC2130))
+ #error "For EinsyRambo you must set all *_DRIVER_TYPE to TMC2130 in Configuration.h."
#endif
// TMC2130 Diag Pins (currently just for reference)
From d3527f5de42f087bfe313aa475b0bf5d07559fed Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Thu, 23 Feb 2023 00:22:15 +0000
Subject: [PATCH 49/97] [cron] Bump distribution date (2023-02-23)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 5fadc32c52..e36c2b5f78 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-02-22"
+//#define STRING_DISTRIBUTION_DATE "2023-02-23"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 32bd32d0d4..656060be9f 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-02-22"
+ #define STRING_DISTRIBUTION_DATE "2023-02-23"
#endif
/**
From f9f6662a8c4692cc67006fb302068c96a0e86ac1 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Thu, 23 Feb 2023 21:08:31 -0600
Subject: [PATCH 50/97] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Stepper=20options=20?=
=?UTF-8?q?refactor=20(#25422)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/Configuration.h | 18 +--
Marlin/Configuration_adv.h | 41 +++---
Marlin/src/MarlinCore.cpp | 2 +-
Marlin/src/core/types.h | 42 +++---
Marlin/src/gcode/calibrate/G28.cpp | 2 +-
Marlin/src/gcode/geometry/M206_M428.cpp | 4 +-
Marlin/src/inc/Conditionals_LCD.h | 65 ++++-----
Marlin/src/inc/Conditionals_adv.h | 132 ++++++++++---------
Marlin/src/inc/Conditionals_post.h | 85 ++++++------
Marlin/src/inc/SanityCheck.h | 4 +
Marlin/src/lcd/dogm/status_screen_DOGM.cpp | 4 +-
Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp | 2 +-
Marlin/src/module/planner.cpp | 6 +-
Marlin/src/module/stepper.cpp | 96 +++++++-------
buildroot/tests/mega2560 | 27 ++--
15 files changed, 265 insertions(+), 265 deletions(-)
diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 480520e28e..c163c58704 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -1673,15 +1673,15 @@
// Disable axis steppers immediately when they're not being stepped.
// WARNING: When motors turn off there is a chance of losing position accuracy!
-#define DISABLE_X false
-#define DISABLE_Y false
-#define DISABLE_Z false
-//#define DISABLE_I false
-//#define DISABLE_J false
-//#define DISABLE_K false
-//#define DISABLE_U false
-//#define DISABLE_V false
-//#define DISABLE_W false
+//#define DISABLE_X
+//#define DISABLE_Y
+//#define DISABLE_Z
+//#define DISABLE_I
+//#define DISABLE_J
+//#define DISABLE_K
+//#define DISABLE_U
+//#define DISABLE_V
+//#define DISABLE_W
// Turn off the display blinking that warns about possible accuracy reduction
//#define DISABLE_REDUCED_ACCURACY_WARNING
diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index b607588568..6d74a130c7 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -1104,17 +1104,17 @@
// Add a Duplicate option for well-separated conjoined nozzles
//#define MULTI_NOZZLE_DUPLICATION
-// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
-#define INVERT_X_STEP_PIN false
-#define INVERT_Y_STEP_PIN false
-#define INVERT_Z_STEP_PIN false
-#define INVERT_I_STEP_PIN false
-#define INVERT_J_STEP_PIN false
-#define INVERT_K_STEP_PIN false
-#define INVERT_U_STEP_PIN false
-#define INVERT_V_STEP_PIN false
-#define INVERT_W_STEP_PIN false
-#define INVERT_E_STEP_PIN false
+// By default stepper drivers require an active-HIGH signal but some high-power drivers require an active-LOW signal to step.
+#define STEP_STATE_X HIGH
+#define STEP_STATE_Y HIGH
+#define STEP_STATE_Z HIGH
+#define STEP_STATE_I HIGH
+#define STEP_STATE_J HIGH
+#define STEP_STATE_K HIGH
+#define STEP_STATE_U HIGH
+#define STEP_STATE_V HIGH
+#define STEP_STATE_W HIGH
+#define STEP_STATE_E HIGH
/**
* Idle Stepper Shutdown
@@ -1122,16 +1122,15 @@
* The Deactive Time can be overridden with M18 and M84. Set to 0 for No Timeout.
*/
#define DEFAULT_STEPPER_DEACTIVE_TIME 120
-#define DISABLE_INACTIVE_X true
-#define DISABLE_INACTIVE_Y true
-#define DISABLE_INACTIVE_Z true // Set 'false' if the nozzle could fall onto your printed part!
-#define DISABLE_INACTIVE_I true
-#define DISABLE_INACTIVE_J true
-#define DISABLE_INACTIVE_K true
-#define DISABLE_INACTIVE_U true
-#define DISABLE_INACTIVE_V true
-#define DISABLE_INACTIVE_W true
-#define DISABLE_INACTIVE_E true
+#define DISABLE_INACTIVE_X
+#define DISABLE_INACTIVE_Y
+#define DISABLE_INACTIVE_Z // Disable if the nozzle could fall onto your printed part!
+//#define DISABLE_INACTIVE_I
+//#define DISABLE_INACTIVE_J
+//#define DISABLE_INACTIVE_K
+//#define DISABLE_INACTIVE_U
+//#define DISABLE_INACTIVE_V
+//#define DISABLE_INACTIVE_W
// Default Minimum Feedrates for printing and travel moves
#define DEFAULT_MINIMUMFEEDRATE 0.0 // (mm/s. °/s for rotational-only moves) Minimum feedrate. Set with M205 S.
diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp
index ed892ac813..3b704e4f65 100644
--- a/Marlin/src/MarlinCore.cpp
+++ b/Marlin/src/MarlinCore.cpp
@@ -448,7 +448,7 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
TERN_(DISABLE_INACTIVE_U, stepper.disable_axis(U_AXIS));
TERN_(DISABLE_INACTIVE_V, stepper.disable_axis(V_AXIS));
TERN_(DISABLE_INACTIVE_W, stepper.disable_axis(W_AXIS));
- TERN_(DISABLE_INACTIVE_E, stepper.disable_e_steppers());
+ TERN_(DISABLE_INACTIVE_EXTRUDER, stepper.disable_e_steppers());
TERN_(AUTO_BED_LEVELING_UBL, bedlevel.steppers_were_disabled());
}
diff --git a/Marlin/src/core/types.h b/Marlin/src/core/types.h
index f1fae85b5c..bae345b496 100644
--- a/Marlin/src/core/types.h
+++ b/Marlin/src/core/types.h
@@ -44,7 +44,7 @@ struct IF { typedef L type; };
#define NUM_AXIS_LIST_1(V) LIST_N_1(NUM_AXES, V)
#define NUM_AXIS_ARRAY(V...) { NUM_AXIS_LIST(V) }
#define NUM_AXIS_ARRAY_1(V) { NUM_AXIS_LIST_1(V) }
-#define NUM_AXIS_ARGS(T...) NUM_AXIS_LIST(T x, T y, T z, T i, T j, T k, T u, T v, T w)
+#define NUM_AXIS_ARGS(T) NUM_AXIS_LIST(T x, T y, T z, T i, T j, T k, T u, T v, T w)
#define NUM_AXIS_ELEM(O) NUM_AXIS_LIST(O.x, O.y, O.z, O.i, O.j, O.k, O.u, O.v, O.w)
#define NUM_AXIS_DEFS(T,V) NUM_AXIS_LIST(T x=V, T y=V, T z=V, T i=V, T j=V, T k=V, T u=V, T v=V, T w=V)
#define MAIN_AXIS_NAMES NUM_AXIS_LIST(X, Y, Z, I, J, K, U, V, W)
@@ -57,7 +57,7 @@ struct IF { typedef L type; };
#define LOGICAL_AXIS_LIST_1(V) NUM_AXIS_LIST_1(V) LIST_ITEM_E(V)
#define LOGICAL_AXIS_ARRAY(E,V...) { LOGICAL_AXIS_LIST(E,V) }
#define LOGICAL_AXIS_ARRAY_1(V) { LOGICAL_AXIS_LIST_1(V) }
-#define LOGICAL_AXIS_ARGS(T...) LOGICAL_AXIS_LIST(T e, T x, T y, T z, T i, T j, T k, T u, T v, T w)
+#define LOGICAL_AXIS_ARGS(T) LOGICAL_AXIS_LIST(T e, T x, T y, T z, T i, T j, T k, T u, T v, T w)
#define LOGICAL_AXIS_ELEM(O) LOGICAL_AXIS_LIST(O.e, O.x, O.y, O.z, O.i, O.j, O.k, O.u, O.v, O.w)
#define LOGICAL_AXIS_DECL(T,V) LOGICAL_AXIS_LIST(T e=V, T x=V, T y=V, T z=V, T i=V, T j=V, T k=V, T u=V, T v=V, T w=V)
#define LOGICAL_AXIS_NAMES LOGICAL_AXIS_LIST(E, X, Y, Z, I, J, K, U, V, W)
@@ -96,14 +96,14 @@ struct Flags {
bits_t b;
typename IF<(N>8), N16, N8>::type flag;
};
- void reset() { b = 0; }
- void set(const int n, const bool onoff) { onoff ? set(n) : clear(n); }
- void set(const int n) { b |= (bits_t)_BV(n); }
- void clear(const int n) { b &= ~(bits_t)_BV(n); }
- bool test(const int n) const { return TEST(b, n); }
- bool operator[](const int n) { return test(n); }
- bool operator[](const int n) const { return test(n); }
- int size() const { return sizeof(b); }
+ void reset() { b = 0; }
+ void set(const int n, const bool onoff) { onoff ? set(n) : clear(n); }
+ void set(const int n) { b |= (bits_t)_BV(n); }
+ void clear(const int n) { b &= ~(bits_t)_BV(n); }
+ bool test(const int n) const { return TEST(b, n); }
+ bool operator[](const int n) { return test(n); }
+ bool operator[](const int n) const { return test(n); }
+ int size() const { return sizeof(b); }
};
// Specialization for a single bool flag
@@ -129,14 +129,14 @@ typedef struct AxisFlags {
struct Flags flags;
struct { bool LOGICAL_AXIS_LIST(e:1, x:1, y:1, z:1, i:1, j:1, k:1, u:1, v:1, w:1); };
};
- void reset() { flags.reset(); }
- void set(const int n) { flags.set(n); }
- void set(const int n, const bool onoff) { flags.set(n, onoff); }
- void clear(const int n) { flags.clear(n); }
- bool test(const int n) const { return flags.test(n); }
- bool operator[](const int n) { return flags[n]; }
- bool operator[](const int n) const { return flags[n]; }
- int size() const { return sizeof(flags); }
+ void reset() { flags.reset(); }
+ void set(const int n) { flags.set(n); }
+ void set(const int n, const bool onoff) { flags.set(n, onoff); }
+ void clear(const int n) { flags.clear(n); }
+ bool test(const int n) const { return flags.test(n); }
+ bool operator[](const int n) { return flags[n]; }
+ bool operator[](const int n) const { return flags[n]; }
+ int size() const { return sizeof(flags); }
} axis_flags_t;
//
@@ -188,9 +188,9 @@ typedef IF<(NUM_AXIS_ENUMS > 8), uint16_t, uint8_t>::type axis_bits_t;
// Loop over axes
//
#define LOOP_ABC(VAR) LOOP_S_LE_N(VAR, A_AXIS, C_AXIS)
-#define LOOP_NUM_AXES(VAR) LOOP_S_L_N(VAR, X_AXIS, NUM_AXES)
-#define LOOP_LOGICAL_AXES(VAR) LOOP_S_L_N(VAR, X_AXIS, LOGICAL_AXES)
-#define LOOP_DISTINCT_AXES(VAR) LOOP_S_L_N(VAR, X_AXIS, DISTINCT_AXES)
+#define LOOP_NUM_AXES(VAR) LOOP_S_L_N(VAR, 0, NUM_AXES)
+#define LOOP_LOGICAL_AXES(VAR) LOOP_S_L_N(VAR, 0, LOGICAL_AXES)
+#define LOOP_DISTINCT_AXES(VAR) LOOP_S_L_N(VAR, 0, DISTINCT_AXES)
#define LOOP_DISTINCT_E(VAR) LOOP_L_N(VAR, DISTINCT_E)
//
diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp
index 0b6548a3e3..6f0f27cb9d 100644
--- a/Marlin/src/gcode/calibrate/G28.cpp
+++ b/Marlin/src/gcode/calibrate/G28.cpp
@@ -86,7 +86,7 @@
NUM_AXIS_LIST(
TERN0(X_SENSORLESS, tmc_enable_stallguard(stepperX)),
TERN0(Y_SENSORLESS, tmc_enable_stallguard(stepperY)),
- false, false, false, false
+ false, false, false, false, false, false, false
)
, TERN0(X2_SENSORLESS, tmc_enable_stallguard(stepperX2))
, TERN0(Y2_SENSORLESS, tmc_enable_stallguard(stepperY2))
diff --git a/Marlin/src/gcode/geometry/M206_M428.cpp b/Marlin/src/gcode/geometry/M206_M428.cpp
index b12e680605..b055f0e207 100644
--- a/Marlin/src/gcode/geometry/M206_M428.cpp
+++ b/Marlin/src/gcode/geometry/M206_M428.cpp
@@ -33,9 +33,7 @@
/**
* M206: Set Additional Homing Offset (X Y Z). SCARA aliases T=X, P=Y
*
- * *** @thinkyhead: I recommend deprecating M206 for SCARA in favor of M665.
- * *** M206 for SCARA will remain enabled in 1.1.x for compatibility.
- * *** In the 2.0 release, it will simply be disabled by default.
+ * *** TODO: Deprecate M206 for SCARA in favor of M665.
*/
void GcodeSuite::M206() {
if (!parser.seen_any()) return M206_report();
diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h
index 920ad15c6c..bddc0554f5 100644
--- a/Marlin/src/inc/Conditionals_LCD.h
+++ b/Marlin/src/inc/Conditionals_LCD.h
@@ -758,39 +758,31 @@
#define HAS_X_AXIS 1
#if NUM_AXES >= XY
#define HAS_Y_AXIS 1
- #if NUM_AXES >= XYZ
- #define HAS_Z_AXIS 1
- #ifdef Z4_DRIVER_TYPE
- #define NUM_Z_STEPPERS 4
- #elif defined(Z3_DRIVER_TYPE)
- #define NUM_Z_STEPPERS 3
- #elif defined(Z2_DRIVER_TYPE)
- #define NUM_Z_STEPPERS 2
- #else
- #define NUM_Z_STEPPERS 1
- #endif
- #if NUM_AXES >= 4
- #define HAS_I_AXIS 1
- #if NUM_AXES >= 5
- #define HAS_J_AXIS 1
- #if NUM_AXES >= 6
- #define HAS_K_AXIS 1
- #if NUM_AXES >= 7
- #define HAS_U_AXIS 1
- #if NUM_AXES >= 8
- #define HAS_V_AXIS 1
- #if NUM_AXES >= 9
- #define HAS_W_AXIS 1
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
+#endif
+#if NUM_AXES >= XYZ
+ #define HAS_Z_AXIS 1
+#endif
+#if NUM_AXES >= 4
+ #define HAS_I_AXIS 1
+#endif
+#if NUM_AXES >= 5
+ #define HAS_J_AXIS 1
+#endif
+#if NUM_AXES >= 6
+ #define HAS_K_AXIS 1
+#endif
+#if NUM_AXES >= 7
+ #define HAS_U_AXIS 1
+#endif
+#if NUM_AXES >= 8
+ #define HAS_V_AXIS 1
+#endif
+#if NUM_AXES >= 9
+ #define HAS_W_AXIS 1
#endif
#if !HAS_Y_AXIS
+ #undef AVOID_OBSTACLES
#undef ENDSTOPPULLUP_YMIN
#undef ENDSTOPPULLUP_YMAX
#undef Y_MIN_ENDSTOP_INVERTING
@@ -807,7 +799,17 @@
#undef MAX_SOFTWARE_ENDSTOP_Y
#endif
-#if !HAS_Z_AXIS
+#if HAS_Z_AXIS
+ #ifdef Z4_DRIVER_TYPE
+ #define NUM_Z_STEPPERS 4
+ #elif defined(Z3_DRIVER_TYPE)
+ #define NUM_Z_STEPPERS 3
+ #elif defined(Z2_DRIVER_TYPE)
+ #define NUM_Z_STEPPERS 2
+ #else
+ #define NUM_Z_STEPPERS 1
+ #endif
+#else
#undef ENDSTOPPULLUP_ZMIN
#undef ENDSTOPPULLUP_ZMAX
#undef Z_MIN_ENDSTOP_INVERTING
@@ -822,6 +824,7 @@
#undef Z_MIN_POS
#undef Z_MAX_POS
#undef MANUAL_Z_HOME_POS
+ #undef Z_SAFE_HOMING
#undef MIN_SOFTWARE_ENDSTOP_Z
#undef MAX_SOFTWARE_ENDSTOP_Z
#endif
diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h
index 436b6194da..ff2e54e393 100644
--- a/Marlin/src/inc/Conditionals_adv.h
+++ b/Marlin/src/inc/Conditionals_adv.h
@@ -88,51 +88,108 @@
// Some options are disallowed without required axes
#if !HAS_Y_AXIS
- #undef SAFE_BED_LEVELING_START_Y
#undef ARC_SUPPORT
+ #undef CALIBRATION_MEASURE_YMAX
+ #undef CALIBRATION_MEASURE_YMIN
+ #undef DISABLE_INACTIVE_Y
+ #undef HOME_Y_BEFORE_X
#undef INPUT_SHAPING_Y
- #undef SHAPING_FREQ_Y
+ #undef QUICK_HOME
+ #undef SAFE_BED_LEVELING_START_Y
#undef SHAPING_BUFFER_Y
+ #undef SHAPING_FREQ_Y
+ #undef STEALTHCHOP_Y
+ #undef STEP_STATE_Y
#endif
+
#if !HAS_Z_AXIS
+ #undef CALIBRATION_MEASURE_ZMAX
+ #undef CALIBRATION_MEASURE_ZMIN
+ #undef CNC_WORKSPACE_PLANES
+ #undef DISABLE_INACTIVE_Z
+ #undef ENABLE_LEVELING_FADE_HEIGHT
+ #undef HOME_Z_FIRST
+ #undef HOMING_Z_WITH_PROBE
+ #undef NUM_Z_STEPPERS
#undef SAFE_BED_LEVELING_START_Z
+ #undef STEALTHCHOP_Z
+ #undef STEP_STATE_Z
+ #undef Z_IDLE_HEIGHT
+ #undef Z_PROBE_SLED
+ #undef Z_SAFE_HOMING
#endif
+
#if !HAS_I_AXIS
+ #undef CALIBRATION_MEASURE_IMAX
+ #undef CALIBRATION_MEASURE_IMIN
+ #undef DISABLE_INACTIVE_I
#undef SAFE_BED_LEVELING_START_I
+ #undef STEALTHCHOP_I
+ #undef STEP_STATE_I
#endif
+
#if !HAS_J_AXIS
+ #undef CALIBRATION_MEASURE_JMAX
+ #undef CALIBRATION_MEASURE_JMIN
+ #undef DISABLE_INACTIVE_J
#undef SAFE_BED_LEVELING_START_J
+ #undef STEALTHCHOP_J
+ #undef STEP_STATE_J
#endif
+
#if !HAS_K_AXIS
+ #undef CALIBRATION_MEASURE_KMAX
+ #undef CALIBRATION_MEASURE_KMIN
+ #undef DISABLE_INACTIVE_K
#undef SAFE_BED_LEVELING_START_K
+ #undef STEALTHCHOP_K
+ #undef STEP_STATE_K
#endif
+
#if !HAS_U_AXIS
+ #undef CALIBRATION_MEASURE_UMAX
+ #undef CALIBRATION_MEASURE_UMIN
+ #undef DISABLE_INACTIVE_U
#undef SAFE_BED_LEVELING_START_U
+ #undef STEALTHCHOP_U
+ #undef STEP_STATE_U
#endif
+
#if !HAS_V_AXIS
+ #undef CALIBRATION_MEASURE_VMAX
+ #undef CALIBRATION_MEASURE_VMIN
+ #undef DISABLE_INACTIVE_V
#undef SAFE_BED_LEVELING_START_V
+ #undef STEALTHCHOP_V
+ #undef STEP_STATE_V
#endif
+
#if !HAS_W_AXIS
+ #undef CALIBRATION_MEASURE_WMAX
+ #undef CALIBRATION_MEASURE_WMIN
+ #undef DISABLE_INACTIVE_W
#undef SAFE_BED_LEVELING_START_W
+ #undef STEALTHCHOP_W
+ #undef STEP_STATE_W
#endif
// Disallowed with no extruders
#if !HAS_EXTRUDERS
#define NO_VOLUMETRICS
- #undef FWRETRACT
- #undef PIDTEMP
- #undef AUTOTEMP
- #undef PID_EXTRUSION_SCALING
- #undef LIN_ADVANCE
#undef ADVANCED_PAUSE_FEATURE
- #undef FILAMENT_LOAD_UNLOAD_GCODES
+ #undef AUTOTEMP
#undef EXTRUDER_RUNOUT_PREVENT
+ #undef FILAMENT_LOAD_UNLOAD_GCODES
+ #undef FWRETRACT
+ #undef LCD_SHOW_E_TOTAL
+ #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
- #undef SHOW_TEMP_ADC_VALUES
- #undef LCD_SHOW_E_TOTAL
- #undef MANUAL_E_MOVES_RELATIVE
- #undef STEALTHCHOP_E
#endif
#if HOTENDS <= 7
@@ -1043,53 +1100,6 @@
#endif
#endif
-// Remove unused STEALTHCHOP flags
-#if NUM_AXES < 9
- #undef STEALTHCHOP_W
- #undef CALIBRATION_MEASURE_WMIN
- #undef CALIBRATION_MEASURE_WMAX
- #if NUM_AXES < 8
- #undef STEALTHCHOP_V
- #undef CALIBRATION_MEASURE_VMIN
- #undef CALIBRATION_MEASURE_VMAX
- #if NUM_AXES < 7
- #undef STEALTHCHOP_U
- #undef CALIBRATION_MEASURE_UMIN
- #undef CALIBRATION_MEASURE_UMAX
- #if NUM_AXES < 6
- #undef STEALTHCHOP_K
- #undef CALIBRATION_MEASURE_KMIN
- #undef CALIBRATION_MEASURE_KMAX
- #if NUM_AXES < 5
- #undef STEALTHCHOP_J
- #undef CALIBRATION_MEASURE_JMIN
- #undef CALIBRATION_MEASURE_JMAX
- #if NUM_AXES < 4
- #undef STEALTHCHOP_I
- #undef CALIBRATION_MEASURE_IMIN
- #undef CALIBRATION_MEASURE_IMAX
- #if NUM_AXES < 3
- #undef STEALTHCHOP_Z
- #undef Z_IDLE_HEIGHT
- #undef Z_PROBE_SLED
- #undef Z_SAFE_HOMING
- #undef HOME_Z_FIRST
- #undef HOMING_Z_WITH_PROBE
- #undef ENABLE_LEVELING_FADE_HEIGHT
- #undef NUM_Z_STEPPERS
- #undef CNC_WORKSPACE_PLANES
- #if NUM_AXES < 2
- #undef STEALTHCHOP_Y
- #undef QUICK_HOME
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
-#endif
-
#if defined(SAFE_BED_LEVELING_START_X) || defined(SAFE_BED_LEVELING_START_Y) || defined(SAFE_BED_LEVELING_START_Z) \
|| defined(SAFE_BED_LEVELING_START_I) || defined(SAFE_BED_LEVELING_START_J) || defined(SAFE_BED_LEVELING_START_K) \
|| defined(SAFE_BED_LEVELING_START_U) || defined(SAFE_BED_LEVELING_START_V) || defined(SAFE_BED_LEVELING_START_W)
@@ -1185,10 +1195,6 @@
#define CANNOT_EMBED_CONFIGURATION defined(__AVR__)
#endif
-#if ANY(DISABLE_INACTIVE_X, DISABLE_INACTIVE_Y, DISABLE_INACTIVE_Z, DISABLE_INACTIVE_I, DISABLE_INACTIVE_J, DISABLE_INACTIVE_K, DISABLE_INACTIVE_U, DISABLE_INACTIVE_V, DISABLE_INACTIVE_W, DISABLE_INACTIVE_E)
- #define HAS_DISABLE_INACTIVE_AXIS 1
-#endif
-
// Fan Kickstart
#if FAN_KICKSTART_TIME && !defined(FAN_KICKSTART_POWER)
#define FAN_KICKSTART_POWER 180
diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h
index 5c149cee89..249aa5c30e 100644
--- a/Marlin/src/inc/Conditionals_post.h
+++ b/Marlin/src/inc/Conditionals_post.h
@@ -1308,9 +1308,6 @@
/**
* Set defaults for missing (newer) options
*/
-#if !defined(DISABLE_INACTIVE_X) && ENABLED(DISABLE_X)
- #define DISABLE_INACTIVE_X 1
-#endif
#if HAS_Y_AXIS
#if PIN_EXISTS(Y_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Y))
@@ -1338,11 +1335,6 @@
#if PIN_EXISTS(Y2_MS1)
#define HAS_Y2_MS_PINS 1
#endif
- #if !defined(DISABLE_INACTIVE_Y) && ENABLED(DISABLE_Y)
- #define DISABLE_INACTIVE_Y 1
- #endif
-#else
- #undef DISABLE_INACTIVE_Y
#endif
#if HAS_Z_AXIS
@@ -1358,11 +1350,6 @@
#if PIN_EXISTS(Z_MS1)
#define HAS_Z_MS_PINS 1
#endif
- #if !defined(DISABLE_INACTIVE_Z) && ENABLED(DISABLE_Z)
- #define DISABLE_INACTIVE_Z 1
- #endif
-#else
- #undef DISABLE_INACTIVE_Z
#endif
#if NUM_Z_STEPPERS >= 2
@@ -1423,11 +1410,6 @@
#if PIN_EXISTS(I_MS1)
#define HAS_I_MS_PINS 1
#endif
- #if !defined(DISABLE_INACTIVE_I) && ENABLED(DISABLE_I)
- #define DISABLE_INACTIVE_I 1
- #endif
-#else
- #undef DISABLE_INACTIVE_I
#endif
#if HAS_J_AXIS
@@ -1443,11 +1425,6 @@
#if PIN_EXISTS(J_MS1)
#define HAS_J_MS_PINS 1
#endif
- #if !defined(DISABLE_INACTIVE_J) && ENABLED(DISABLE_J)
- #define DISABLE_INACTIVE_J 1
- #endif
-#else
- #undef DISABLE_INACTIVE_J
#endif
#if HAS_K_AXIS
@@ -1463,11 +1440,6 @@
#if PIN_EXISTS(K_MS1)
#define HAS_K_MS_PINS 1
#endif
- #if !defined(DISABLE_INACTIVE_K) && ENABLED(DISABLE_K)
- #define DISABLE_INACTIVE_K 1
- #endif
-#else
- #undef DISABLE_INACTIVE_K
#endif
#if HAS_U_AXIS
@@ -1483,11 +1455,6 @@
#if PIN_EXISTS(U_MS1)
#define HAS_U_MS_PINS 1
#endif
- #if !defined(DISABLE_INACTIVE_U) && ENABLED(DISABLE_U)
- #define DISABLE_INACTIVE_U 1
- #endif
-#else
- #undef DISABLE_INACTIVE_U
#endif
#if HAS_V_AXIS
@@ -1503,11 +1470,6 @@
#if PIN_EXISTS(V_MS1)
#define HAS_V_MS_PINS 1
#endif
- #if !defined(DISABLE_INACTIVE_V) && ENABLED(DISABLE_V)
- #define DISABLE_INACTIVE_V 1
- #endif
-#else
- #undef DISABLE_INACTIVE_V
#endif
#if HAS_W_AXIS
@@ -1523,11 +1485,43 @@
#if PIN_EXISTS(W_MS1)
#define HAS_W_MS_PINS 1
#endif
- #if !defined(DISABLE_INACTIVE_W) && ENABLED(DISABLE_W)
- #define DISABLE_INACTIVE_W 1
- #endif
-#else
- #undef DISABLE_INACTIVE_W
+#endif
+
+#if !defined(DISABLE_INACTIVE_X) && ENABLED(DISABLE_X)
+ #define DISABLE_INACTIVE_X
+#endif
+#if !defined(DISABLE_INACTIVE_Y) && ENABLED(DISABLE_Y)
+ #define DISABLE_INACTIVE_Y
+#endif
+#if !defined(DISABLE_INACTIVE_Z) && ENABLED(DISABLE_Z)
+ #define DISABLE_INACTIVE_Z
+#endif
+#if !defined(DISABLE_INACTIVE_I) && ENABLED(DISABLE_I)
+ #define DISABLE_INACTIVE_I
+#endif
+#if !defined(DISABLE_INACTIVE_J) && ENABLED(DISABLE_J)
+ #define DISABLE_INACTIVE_J
+#endif
+#if !defined(DISABLE_INACTIVE_K) && ENABLED(DISABLE_K)
+ #define DISABLE_INACTIVE_K
+#endif
+#if !defined(DISABLE_INACTIVE_U) && ENABLED(DISABLE_U)
+ #define DISABLE_INACTIVE_U
+#endif
+#if !defined(DISABLE_INACTIVE_V) && ENABLED(DISABLE_V)
+ #define DISABLE_INACTIVE_V
+#endif
+#if !defined(DISABLE_INACTIVE_W) && ENABLED(DISABLE_W)
+ #define DISABLE_INACTIVE_W
+#endif
+#if !defined(DISABLE_INACTIVE_EXTRUDER) && ENABLED(DISABLE_E)
+ #define DISABLE_INACTIVE_EXTRUDER
+#endif
+#if ANY(DISABLE_INACTIVE_X, DISABLE_INACTIVE_Y, DISABLE_INACTIVE_Z, DISABLE_INACTIVE_I, DISABLE_INACTIVE_J, DISABLE_INACTIVE_K, DISABLE_INACTIVE_U, DISABLE_INACTIVE_V, DISABLE_INACTIVE_W, DISABLE_INACTIVE_EXTRUDER)
+ #define HAS_DISABLE_INACTIVE_AXIS 1
+#endif
+#if ANY(DISABLE_X, DISABLE_Y, DISABLE_Z, DISABLE_I, DISABLE_J, DISABLE_K, DISABLE_U, DISABLE_V, DISABLE_W, DISABLE_E)
+ #define HAS_DISABLE_AXIS 1
#endif
// Extruder steppers and solenoids
@@ -1651,11 +1645,6 @@
#endif
#endif
- #if !defined(DISABLE_INACTIVE_E) && ENABLED(DISABLE_E)
- #define DISABLE_INACTIVE_E 1
- #endif
-#else
- #undef DISABLE_INACTIVE_E
#endif // HAS_EXTRUDERS
/**
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index d011fb18f0..11d27d6eaf 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -672,6 +672,10 @@
#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_E)
+ #error "DISABLE_INACTIVE_E is now set with DISABLE_INACTIVE_EXTRUDER."
+#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."
#endif
// L64xx stepper drivers have been removed
diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
index 721dcb63ff..091c531abb 100644
--- a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
+++ b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
@@ -524,7 +524,9 @@ void MarlinUI::draw_status_screen() {
const bool show_e_total = TERN0(LCD_SHOW_E_TOTAL, printingIsActive());
- static u8g_uint_t progress_bar_solid_width = 0;
+ #if HAS_PRINT_PROGRESS
+ static u8g_uint_t progress_bar_solid_width = 0;
+ #endif
// At the first page, generate new display values
if (first_page) {
diff --git a/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp b/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp
index 0c6315d438..86b5e6eb4c 100644
--- a/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp
@@ -269,7 +269,7 @@
#if HAS_Y_AXIS
WRITE(Y_DIR_PIN, HIGH);
#endif
- #if HAS_Y_AXIS
+ #if HAS_Z_AXIS
WRITE(Z_DIR_PIN, HIGH);
#endif
#if HAS_EXTRUDERS
diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp
index ff5449d230..25db52437f 100644
--- a/Marlin/src/module/planner.cpp
+++ b/Marlin/src/module/planner.cpp
@@ -1320,7 +1320,7 @@ void Planner::recalculate(TERN_(HINTS_SAFE_EXIT_SPEED, const_float_t safe_exit_s
*/
void Planner::check_axes_activity() {
- #if ANY(DISABLE_X, DISABLE_Y, DISABLE_Z, DISABLE_I, DISABLE_J, DISABLE_K, DISABLE_U, DISABLE_V, DISABLE_W, DISABLE_E)
+ #if HAS_DISABLE_AXIS
xyze_bool_t axis_active = { false };
#endif
@@ -1360,7 +1360,7 @@ void Planner::check_axes_activity() {
TERN_(HAS_HEATER_2, tail_e_to_p_pressure = block->e_to_p_pressure);
#endif
- #if ANY(DISABLE_X, DISABLE_Y, DISABLE_Z, DISABLE_I, DISABLE_J, DISABLE_K, DISABLE_E)
+ #if HAS_DISABLE_AXIS
for (uint8_t b = block_buffer_tail; b != block_buffer_head; b = next_block_index(b)) {
block_t * const bnext = &block_buffer[b];
LOGICAL_AXIS_CODE(
@@ -1492,7 +1492,7 @@ void Planner::check_axes_activity() {
thermalManager.setTargetHotend(t, active_extruder);
}
-#endif
+#endif // AUTOTEMP
#if DISABLED(NO_VOLUMETRICS)
diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp
index f9de7498d7..0750fd82aa 100644
--- a/Marlin/src/module/stepper.cpp
+++ b/Marlin/src/module/stepper.cpp
@@ -1664,7 +1664,7 @@ void Stepper::pulse_phase_isr() {
do {
#define _APPLY_STEP(AXIS, INV, ALWAYS) AXIS ##_APPLY_STEP(INV, ALWAYS)
- #define _INVERT_STEP_PIN(AXIS) INVERT_## AXIS ##_STEP_PIN
+ #define _STEP_STATE(AXIS) STEP_STATE_## AXIS
// Determine if a pulse is needed using Bresenham
#define PULSE_PREP(AXIS) do{ \
@@ -1714,14 +1714,14 @@ void Stepper::pulse_phase_isr() {
#define PULSE_START(AXIS) do{ \
if (step_needed[_AXIS(AXIS)]) { \
count_position[_AXIS(AXIS)] += count_direction[_AXIS(AXIS)]; \
- _APPLY_STEP(AXIS, !_INVERT_STEP_PIN(AXIS), 0); \
+ _APPLY_STEP(AXIS, _STEP_STATE(AXIS), 0); \
} \
}while(0)
// Stop an active pulse if needed
#define PULSE_STOP(AXIS) do { \
if (step_needed[_AXIS(AXIS)]) { \
- _APPLY_STEP(AXIS, _INVERT_STEP_PIN(AXIS), 0); \
+ _APPLY_STEP(AXIS, !_STEP_STATE(AXIS), 0); \
} \
}while(0)
@@ -1933,7 +1933,7 @@ void Stepper::pulse_phase_isr() {
#if ENABLED(MIXING_EXTRUDER)
if (step_needed.e) {
count_position[E_AXIS] += count_direction[E_AXIS];
- E_STEP_WRITE(mixer.get_next_stepper(), !INVERT_E_STEP_PIN);
+ E_STEP_WRITE(mixer.get_next_stepper(), STEP_STATE_E);
}
#elif HAS_E0_STEP
PULSE_START(E);
@@ -1977,7 +1977,7 @@ void Stepper::pulse_phase_isr() {
#endif
#if ENABLED(MIXING_EXTRUDER)
- if (step_needed.e) E_STEP_WRITE(mixer.get_stepper(), INVERT_E_STEP_PIN);
+ if (step_needed.e) E_STEP_WRITE(mixer.get_stepper(), !STEP_STATE_E);
#elif HAS_E0_STEP
PULSE_STOP(E);
#endif
@@ -2638,7 +2638,7 @@ uint32_t Stepper::block_phase_isr() {
la_delta_error -= advance_divisor;
// Set the STEP pulse ON
- E_STEP_WRITE(TERN(MIXING_EXTRUDER, mixer.get_next_stepper(), stepper_extruder), !INVERT_E_STEP_PIN);
+ E_STEP_WRITE(TERN(MIXING_EXTRUDER, mixer.get_next_stepper(), stepper_extruder), STEP_STATE_E);
}
TERN_(I2S_STEPPER_STREAM, i2s_push_sample());
@@ -2652,7 +2652,7 @@ uint32_t Stepper::block_phase_isr() {
#endif
// Set the STEP pulse OFF
- E_STEP_WRITE(TERN(MIXING_EXTRUDER, mixer.get_stepper(), stepper_extruder), INVERT_E_STEP_PIN);
+ E_STEP_WRITE(TERN(MIXING_EXTRUDER, mixer.get_stepper(), stepper_extruder), !STEP_STATE_E);
}
}
@@ -2906,7 +2906,7 @@ void Stepper::init() {
#define AXIS_INIT(AXIS, PIN) \
_STEP_INIT(AXIS); \
- _WRITE_STEP(AXIS, _INVERT_STEP_PIN(PIN)); \
+ _WRITE_STEP(AXIS, !_STEP_STATE(PIN)); \
_DISABLE_AXIS(AXIS)
#define E_AXIS_INIT(NUM) AXIS_INIT(E## NUM, E)
@@ -2915,7 +2915,7 @@ void Stepper::init() {
#if HAS_X_STEP
#if HAS_X2_STEPPER
X2_STEP_INIT();
- X2_STEP_WRITE(INVERT_X_STEP_PIN);
+ X2_STEP_WRITE(!STEP_STATE_X);
#endif
AXIS_INIT(X, X);
#endif
@@ -2923,7 +2923,7 @@ void Stepper::init() {
#if HAS_Y_STEP
#if HAS_DUAL_Y_STEPPERS
Y2_STEP_INIT();
- Y2_STEP_WRITE(INVERT_Y_STEP_PIN);
+ Y2_STEP_WRITE(!STEP_STATE_Y);
#endif
AXIS_INIT(Y, Y);
#endif
@@ -2931,15 +2931,15 @@ void Stepper::init() {
#if HAS_Z_STEP
#if NUM_Z_STEPPERS >= 2
Z2_STEP_INIT();
- Z2_STEP_WRITE(INVERT_Z_STEP_PIN);
+ Z2_STEP_WRITE(!STEP_STATE_Z);
#endif
#if NUM_Z_STEPPERS >= 3
Z3_STEP_INIT();
- Z3_STEP_WRITE(INVERT_Z_STEP_PIN);
+ Z3_STEP_WRITE(!STEP_STATE_Z);
#endif
#if NUM_Z_STEPPERS >= 4
Z4_STEP_INIT();
- Z4_STEP_WRITE(INVERT_Z_STEP_PIN);
+ Z4_STEP_WRITE(!STEP_STATE_Z);
#endif
AXIS_INIT(Z, Z);
#endif
@@ -3338,19 +3338,19 @@ void Stepper::report_positions() {
#if DISABLED(DELTA)
- #define BABYSTEP_AXIS(AXIS, INV, DIR) do{ \
- const uint8_t old_dir = _READ_DIR(AXIS); \
- _ENABLE_AXIS(AXIS); \
- DIR_WAIT_BEFORE(); \
- _APPLY_DIR(AXIS, _INVERT_DIR(AXIS)^DIR^INV); \
- DIR_WAIT_AFTER(); \
- _SAVE_START(); \
- _APPLY_STEP(AXIS, !_INVERT_STEP_PIN(AXIS), true); \
- _PULSE_WAIT(); \
- _APPLY_STEP(AXIS, _INVERT_STEP_PIN(AXIS), true); \
- EXTRA_DIR_WAIT_BEFORE(); \
- _APPLY_DIR(AXIS, old_dir); \
- EXTRA_DIR_WAIT_AFTER(); \
+ #define BABYSTEP_AXIS(AXIS, INV, DIR) do{ \
+ const uint8_t old_dir = _READ_DIR(AXIS); \
+ _ENABLE_AXIS(AXIS); \
+ DIR_WAIT_BEFORE(); \
+ _APPLY_DIR(AXIS, _INVERT_DIR(AXIS)^DIR^INV); \
+ DIR_WAIT_AFTER(); \
+ _SAVE_START(); \
+ _APPLY_STEP(AXIS, _STEP_STATE(AXIS), true); \
+ _PULSE_WAIT(); \
+ _APPLY_STEP(AXIS, !_STEP_STATE(AXIS), true); \
+ EXTRA_DIR_WAIT_BEFORE(); \
+ _APPLY_DIR(AXIS, old_dir); \
+ EXTRA_DIR_WAIT_AFTER(); \
}while(0)
#endif
@@ -3365,11 +3365,11 @@ void Stepper::report_positions() {
_APPLY_DIR(B, _INVERT_DIR(B)^DIR^INV^ALT); \
DIR_WAIT_AFTER(); \
_SAVE_START(); \
- _APPLY_STEP(A, !_INVERT_STEP_PIN(A), true); \
- _APPLY_STEP(B, !_INVERT_STEP_PIN(B), true); \
+ _APPLY_STEP(A, _STEP_STATE(A), true); \
+ _APPLY_STEP(B, _STEP_STATE(B), true); \
_PULSE_WAIT(); \
- _APPLY_STEP(A, _INVERT_STEP_PIN(A), true); \
- _APPLY_STEP(B, _INVERT_STEP_PIN(B), true); \
+ _APPLY_STEP(A, !_STEP_STATE(A), true); \
+ _APPLY_STEP(B, !_STEP_STATE(B), true); \
EXTRA_DIR_WAIT_BEFORE(); \
_APPLY_DIR(A, old_dir.a); _APPLY_DIR(B, old_dir.b); \
EXTRA_DIR_WAIT_AFTER(); \
@@ -3466,58 +3466,58 @@ void Stepper::report_positions() {
_SAVE_START();
- X_STEP_WRITE(!INVERT_X_STEP_PIN);
+ X_STEP_WRITE(STEP_STATE_X);
#ifdef Y_STEP_WRITE
- Y_STEP_WRITE(!INVERT_Y_STEP_PIN);
+ Y_STEP_WRITE(STEP_STATE_Y);
#endif
#ifdef Z_STEP_WRITE
- Z_STEP_WRITE(!INVERT_Z_STEP_PIN);
+ Z_STEP_WRITE(STEP_STATE_Z);
#endif
#ifdef I_STEP_WRITE
- I_STEP_WRITE(!INVERT_I_STEP_PIN);
+ I_STEP_WRITE(STEP_STATE_I);
#endif
#ifdef J_STEP_WRITE
- J_STEP_WRITE(!INVERT_J_STEP_PIN);
+ J_STEP_WRITE(STEP_STATE_J);
#endif
#ifdef K_STEP_WRITE
- K_STEP_WRITE(!INVERT_K_STEP_PIN);
+ K_STEP_WRITE(STEP_STATE_K);
#endif
#ifdef U_STEP_WRITE
- U_STEP_WRITE(!INVERT_U_STEP_PIN);
+ U_STEP_WRITE(STEP_STATE_U);
#endif
#ifdef V_STEP_WRITE
- V_STEP_WRITE(!INVERT_V_STEP_PIN);
+ V_STEP_WRITE(STEP_STATE_V);
#endif
#ifdef W_STEP_WRITE
- W_STEP_WRITE(!INVERT_W_STEP_PIN);
+ W_STEP_WRITE(STEP_STATE_W);
#endif
_PULSE_WAIT();
- X_STEP_WRITE(INVERT_X_STEP_PIN);
+ X_STEP_WRITE(!STEP_STATE_X);
#ifdef Y_STEP_WRITE
- Y_STEP_WRITE(INVERT_Y_STEP_PIN);
+ Y_STEP_WRITE(!STEP_STATE_Y);
#endif
#ifdef Z_STEP_WRITE
- Z_STEP_WRITE(INVERT_Z_STEP_PIN);
+ Z_STEP_WRITE(!STEP_STATE_Z);
#endif
#ifdef I_STEP_WRITE
- I_STEP_WRITE(INVERT_I_STEP_PIN);
+ I_STEP_WRITE(!STEP_STATE_I);
#endif
#ifdef J_STEP_WRITE
- J_STEP_WRITE(INVERT_J_STEP_PIN);
+ J_STEP_WRITE(!STEP_STATE_J);
#endif
#ifdef K_STEP_WRITE
- K_STEP_WRITE(INVERT_K_STEP_PIN);
+ K_STEP_WRITE(!STEP_STATE_K);
#endif
#ifdef U_STEP_WRITE
- U_STEP_WRITE(INVERT_U_STEP_PIN);
+ U_STEP_WRITE(!STEP_STATE_U);
#endif
#ifdef V_STEP_WRITE
- V_STEP_WRITE(INVERT_V_STEP_PIN);
+ V_STEP_WRITE(!STEP_STATE_V);
#endif
#ifdef W_STEP_WRITE
- W_STEP_WRITE(INVERT_W_STEP_PIN);
+ W_STEP_WRITE(!STEP_STATE_W);
#endif
// Restore direction bits
diff --git a/buildroot/tests/mega2560 b/buildroot/tests/mega2560
index 7cac8b13b0..bd855f1df1 100755
--- a/buildroot/tests/mega2560
+++ b/buildroot/tests/mega2560
@@ -53,7 +53,6 @@ opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER LIGHTWEIGHT_UI SHOW_CUS
opt_disable SEGMENT_LEVELED_MOVES
exec_test $1 $2 "Azteeg X3 Pro | EXTRUDERS 5 | RRDFGSC | UBL | LIN_ADVANCE | Sled Probe | Skew | JP-Kana | Babystep offsets ..." "$3"
-
#
# 5 runout sensors with distinct states
#
@@ -126,7 +125,7 @@ exec_test $1 $2 "Azteeg X3 | Mixing Extruder (x5) | Gradient Mix | Input Shaping
#opt_set MOTHERBOARD BOARD_RIGIDBOARD_V2
#opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT BABYSTEPPING DAC_MOTOR_CURRENT_DEFAULT
#exec_test $1 $2 "Stuff" "$3"
-# #
+#
# G3D_PANEL with SDCARD_SORT_ALPHA and STATUS_MESSAGE_SCROLLING
#
#restore_configs
@@ -177,9 +176,9 @@ exec_test $1 $2 "Azteeg X3 | Mixing Extruder (x5) | Gradient Mix | Input Shaping
#opt_enable LCM1602
#exec_test $1 $2 "Stuff" "$3"
-# #
-# # Test Laser features with 12864 LCD
-# #
+#
+# Test Laser features with 12864 LCD
+#
# restore_configs
# opt_set MOTHERBOARD BOARD_RAMPS_14_EFB EXTRUDERS 0 LCD_LANGUAGE en TEMP_SENSOR_COOLER 1 TEMP_SENSOR_1 0 SERIAL_PORT_2 2 \
# DEFAULT_AXIS_STEPS_PER_UNIT '{ 80, 80, 400 }' \
@@ -191,9 +190,9 @@ exec_test $1 $2 "Azteeg X3 | Mixing Extruder (x5) | Gradient Mix | Input Shaping
# LASER_FEATURE LASER_SAFETY_TIMEOUT_MS LASER_COOLANT_FLOW_METER AIR_EVACUATION AIR_EVACUATION_PIN AIR_ASSIST AIR_ASSIST_PIN LASER_SYNCHRONOUS_M106_M107
# exec_test $1 $2 "MEGA2560 RAMPS | Laser Options | 12864 | Meatpack | Fan Sync | SERIAL_PORT_2 " "$3"
-# #
-# # Test Laser features with 44780 LCD
-# #
+#
+# Test Laser features with 44780 LCD
+#
# restore_configs
# opt_set MOTHERBOARD BOARD_RAMPS_14_EFB EXTRUDERS 0 LCD_LANGUAGE en TEMP_SENSOR_COOLER 1 TEMP_SENSOR_1 0 \
# DEFAULT_AXIS_STEPS_PER_UNIT '{ 80, 80, 400 }' \
@@ -205,9 +204,9 @@ exec_test $1 $2 "Azteeg X3 | Mixing Extruder (x5) | Gradient Mix | Input Shaping
# LASER_FEATURE LASER_SAFETY_TIMEOUT_MS LASER_COOLANT_FLOW_METER AIR_EVACUATION AIR_EVACUATION_PIN AIR_ASSIST AIR_ASSIST_PIN
# exec_test $1 $2 "MEGA2560 RAMPS | Laser Feature | Air Evacuation | Air Assist | Cooler | Laser Safety Timeout | Flowmeter | 44780 LCD " "$3"
-# #
-# # Test redundant temperature sensors + MAX TC + Backlight Timeout
-# #
+#
+# Test redundant temperature sensors + MAX TC + Backlight Timeout
+#
# restore_configs
# opt_set MOTHERBOARD BOARD_RAMPS_14_EFB EXTRUDERS 1 \
# TEMP_SENSOR_0 -2 TEMP_SENSOR_REDUNDANT -2 \
@@ -218,9 +217,9 @@ exec_test $1 $2 "Azteeg X3 | Mixing Extruder (x5) | Gradient Mix | Input Shaping
# opt_disable PIDTEMP
# exec_test $1 $2 "MEGA2560 RAMPS | Redundant temperature sensor | 2x MAX6675 | BL Timeout" "$3"
-# #
-# # Polargraph Config
-# #
+#
+# Polargraph Config
+#
# use_example_configs Polargraph
# exec_test $1 $2 "RUMBA | POLARGRAPH | RRD LCD" "$3"
From c5d5c375fdee7c4912b22e717caa82465ce6ccf4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?=
Date: Fri, 24 Feb 2023 03:29:47 +0000
Subject: [PATCH 51/97] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20Reduce=20edit=5Fscre?=
=?UTF-8?q?en=20code=20size=20(#25420)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/lcd/menu/menu.cpp | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp
index 7f55f79f03..c529ae757a 100644
--- a/Marlin/src/lcd/menu/menu.cpp
+++ b/Marlin/src/lcd/menu/menu.cpp
@@ -117,8 +117,7 @@ void MenuEditItemBase::edit_screen(strfunc_t strfunc, loadfunc_t loadfunc) {
// Reset repeat_delay for Touch Buttons
TERN_(HAS_TOUCH_BUTTONS, ui.repeat_delay = BUTTON_DELAY_EDIT);
// Constrain ui.encoderPosition to 0 ... maxEditValue (calculated in encoder steps)
- if (int32_t(ui.encoderPosition) < 0) ui.encoderPosition = 0;
- if (int32_t(ui.encoderPosition) > maxEditValue) ui.encoderPosition = maxEditValue;
+ ui.encoderPosition = constrain(int32_t(ui.encoderPosition), 0, maxEditValue);
// If drawing is flagged then redraw the (whole) edit screen
if (ui.should_draw())
draw_edit_screen(strfunc(ui.encoderPosition + minEditValue));
From acfde4e7e5e1fc4ad46a26700f25a6e60e325967 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Thu, 23 Feb 2023 21:38:11 -0600
Subject: [PATCH 52/97] =?UTF-8?q?=F0=9F=8E=A8=20Use=20LIMIT=20macro?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/lcd/e3v2/jyersui/dwin.cpp | 6 ++----
Marlin/src/lcd/menu/game/brickout.cpp | 6 ++----
Marlin/src/lcd/menu/menu_mixer.cpp | 3 +--
Marlin/src/lcd/tft/touch.cpp | 6 ++----
Marlin/src/module/planner.cpp | 3 +--
5 files changed, 8 insertions(+), 16 deletions(-)
diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp
index 8894150c98..3f13fe8b3b 100644
--- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp
+++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp
@@ -4229,8 +4229,7 @@ void CrealityDWINClass::Value_Control() {
if (funcpointer) funcpointer();
return;
}
- NOLESS(tempvalue, (valuemin * valueunit));
- NOMORE(tempvalue, (valuemax * valueunit));
+ LIMIT(tempvalue, valuemin * valueunit, valuemax * valueunit);
Draw_Float(tempvalue / valueunit, selection - scrollpos, true, valueunit);
DWIN_UpdateLCD();
if (active_menu == Move && livemove) {
@@ -4272,8 +4271,7 @@ void CrealityDWINClass::Option_Control() {
DWIN_UpdateLCD();
return;
}
- NOLESS(tempvalue, valuemin);
- NOMORE(tempvalue, valuemax);
+ LIMIT(tempvalue, valuemin, valuemax);
Draw_Option(tempvalue, static_cast(valuepointer), selection - scrollpos, true);
DWIN_UpdateLCD();
}
diff --git a/Marlin/src/lcd/menu/game/brickout.cpp b/Marlin/src/lcd/menu/game/brickout.cpp
index d738250b60..fc4d19b1d9 100644
--- a/Marlin/src/lcd/menu/game/brickout.cpp
+++ b/Marlin/src/lcd/menu/game/brickout.cpp
@@ -117,13 +117,11 @@ void BrickoutGame::game_screen() {
}
else if (diff <= 3) {
bdat.ballh += fixed_t(random(-64, 0));
- NOLESS(bdat.ballh, BTOF(-2));
- NOMORE(bdat.ballh, BTOF(2));
+ LIMIT(bdat.ballh, BTOF(-2), BTOF(2));
}
else if (diff >= PADDLE_W-1 - 3) {
bdat.ballh += fixed_t(random( 0, 64));
- NOLESS(bdat.ballh, BTOF(-2));
- NOMORE(bdat.ballh, BTOF(2));
+ LIMIT(bdat.ballh, BTOF(-2), BTOF(2));
}
// Paddle hit after clearing the board? Reset the board.
diff --git a/Marlin/src/lcd/menu/menu_mixer.cpp b/Marlin/src/lcd/menu/menu_mixer.cpp
index feb4c59f18..f18c5bbfeb 100644
--- a/Marlin/src/lcd/menu/menu_mixer.cpp
+++ b/Marlin/src/lcd/menu/menu_mixer.cpp
@@ -50,8 +50,7 @@
if (ui.encoderPosition) {
zvar += float(int32_t(ui.encoderPosition)) * 0.1;
ui.encoderPosition = 0;
- NOLESS(zvar, 0);
- NOMORE(zvar, Z_MAX_POS);
+ LIMIT(zvar, 0, Z_MAX_POS);
}
if (ui.should_draw()) {
diff --git a/Marlin/src/lcd/tft/touch.cpp b/Marlin/src/lcd/tft/touch.cpp
index 77082db0d7..cc800cddc3 100644
--- a/Marlin/src/lcd/tft/touch.cpp
+++ b/Marlin/src/lcd/tft/touch.cpp
@@ -113,10 +113,8 @@ void Touch::idle() {
if (x != 0 && y != 0) {
if (current_control) {
if (WITHIN(x, current_control->x - FREE_MOVE_RANGE, current_control->x + current_control->width + FREE_MOVE_RANGE) && WITHIN(y, current_control->y - FREE_MOVE_RANGE, current_control->y + current_control->height + FREE_MOVE_RANGE)) {
- NOLESS(x, current_control->x);
- NOMORE(x, current_control->x + current_control->width);
- NOLESS(y, current_control->y);
- NOMORE(y, current_control->y + current_control->height);
+ LIMIT(x, current_control->x, current_control->x + current_control->width);
+ LIMIT(y, current_control->y, current_control->y + current_control->height);
touch(current_control);
}
else
diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp
index 25db52437f..583e3686a0 100644
--- a/Marlin/src/module/planner.cpp
+++ b/Marlin/src/module/planner.cpp
@@ -3453,8 +3453,7 @@ void Planner::set_max_feedrate(const AxisEnum axis, float inMaxFeedrateMMS) {
// Doesn't matter because block_buffer_runtime_us is already too small an estimation.
bbru >>= 10;
// limit to about a minute.
- NOMORE(bbru, 0x0000FFFFUL);
- return bbru;
+ return _MIN(bbru, 0x0000FFFFUL);
}
void Planner::clear_block_buffer_runtime() {
From 7552fc8f8d96a01bfe12756374307b793bc729ec Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Thu, 23 Feb 2023 22:01:44 -0600
Subject: [PATCH 53/97] =?UTF-8?q?=F0=9F=93=9D=20Update=20DISABLE=5FINACTIV?=
=?UTF-8?q?E=5F*=20comment?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Followup to #25422
---
Marlin/Configuration_adv.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index 6d74a130c7..abb238e33e 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -1118,7 +1118,7 @@
/**
* Idle Stepper Shutdown
- * Set DISABLE_INACTIVE_? 'true' to shut down axis steppers after an idle period.
+ * Enable DISABLE_INACTIVE_* to shut down axis steppers after an idle period.
* The Deactive Time can be overridden with M18 and M84. Set to 0 for No Timeout.
*/
#define DEFAULT_STEPPER_DEACTIVE_TIME 120
From b1f45b384b2e472219ca055050ebd2182eea045d Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Fri, 24 Feb 2023 06:06:31 +0000
Subject: [PATCH 54/97] [cron] Bump distribution date (2023-02-24)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index e36c2b5f78..3719a0aafe 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-02-23"
+//#define STRING_DISTRIBUTION_DATE "2023-02-24"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 656060be9f..30f7951878 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-02-23"
+ #define STRING_DISTRIBUTION_DATE "2023-02-24"
#endif
/**
From 03eb9b058252bdaf099558ed8dfaa837aaf1411c Mon Sep 17 00:00:00 2001
From: ellensp <530024+ellensp@users.noreply.github.com>
Date: Mon, 27 Feb 2023 15:23:39 +1300
Subject: [PATCH 55/97] =?UTF-8?q?=F0=9F=93=9D=20New=20URL=20for=20IA=5FCRE?=
=?UTF-8?q?ALITY=20DWIN=20files=20=20(#25423)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/Configuration.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index c163c58704..e9c175a006 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -3036,7 +3036,7 @@
* - Copy the downloaded DWIN_SET folder to the SD card.
*
* IA_CREALITY (T5UID1)
- * - Download https://github.com/InsanityAutomation/Marlin/raw/CrealityDwin2.0_Bleeding/TM3D_Combined480272_Landscape_V7.7z
+ * - Download https://github.com/InsanityAutomation/Marlin/raw/CrealityDwin_2.0/TM3D_Combined480272_Landscape_V7.7z
* - Copy the downloaded DWIN_SET folder to the SD card.
*
* Flash display with DGUS Displays for Marlin:
From db904f1895d27c0e97dc066074367566406ee3e7 Mon Sep 17 00:00:00 2001
From: ellensp <530024+ellensp@users.noreply.github.com>
Date: Mon, 27 Feb 2023 15:27:58 +1300
Subject: [PATCH 56/97] =?UTF-8?q?=F0=9F=93=9D=20Link=20to=20archived=20RA?=
=?UTF-8?q?=20Control=20Panel=20page=20(#25424)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/Configuration.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index e9c175a006..f780bdd243 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -2725,7 +2725,7 @@
//
// Elefu RA Board Control Panel
-// http://www.elefu.com/index.php?route=product/product&product_id=53
+// https://web.archive.org/web/20140823033947/http://www.elefu.com/index.php?route=product/product&product_id=53
//
//#define RA_CONTROL_PANEL
From 445181fc421891726973fa086c1de0601912d45e Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Sun, 26 Feb 2023 20:54:10 -0600
Subject: [PATCH 57/97] =?UTF-8?q?=F0=9F=A9=B9=20Native=20types=20for=20RTS?=
=?UTF-8?q?=20overloads=20(#25440)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Followup to #25400
---
.../lcd/extui/ia_creality/creality_extui.cpp | 51 +++++++++----------
.../lcd/extui/ia_creality/creality_extui.h | 26 +++++-----
.../src/lcd/extui/mks_ui/wifiSerial_STM32.cpp | 2 +-
3 files changed, 39 insertions(+), 40 deletions(-)
diff --git a/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp b/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
index d27d68aad4..547b500106 100644
--- a/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
+++ b/Marlin/src/lcd/extui/ia_creality/creality_extui.cpp
@@ -92,7 +92,7 @@ namespace ExtUI {
DWIN_SERIAL.begin(115200);
rtscheck.recdat.head[0] = rtscheck.snddat.head[0] = FHONE;
rtscheck.recdat.head[1] = rtscheck.snddat.head[1] = FHTWO;
- memset(rtscheck.databuf, 0, sizeof(rtscheck.databuf));
+ ZERO(rtscheck.databuf);
delay_ms(TERN(DWINOS_4, 1500, 500)); // Delay to allow screen startup
SetTouchScreenConfiguration();
@@ -206,7 +206,7 @@ namespace ExtUI {
if (waitway_lock > 100) {
waitway_lock = 0;
- waitway = 0; // clear waitway if nothing is going on
+ waitway = 0; // clear waitway if nothing is going on
}
switch (waitway) {
@@ -416,7 +416,7 @@ namespace ExtUI {
RTSSHOW::RTSSHOW() {
recdat.head[0] = snddat.head[0] = FHONE;
recdat.head[1] = snddat.head[1] = FHTWO;
- memset(databuf, 0, sizeof(databuf));
+ ZERO(databuf);
}
int16_t RTSSHOW::RTS_RecData() {
@@ -494,8 +494,8 @@ namespace ExtUI {
return -1;
}
- void RTSSHOW::RTS_SndData(void) {
- if ((snddat.head[0] == FHONE) && (snddat.head[1] == FHTWO) && snddat.len >= 3) {
+ void RTSSHOW::RTS_SndData() {
+ if (snddat.head[0] == FHONE && snddat.head[1] == FHTWO && snddat.len >= 3) {
databuf[0] = snddat.head[0];
databuf[1] = snddat.head[1];
databuf[2] = snddat.len;
@@ -527,7 +527,7 @@ namespace ExtUI {
}
memset(&snddat, 0, sizeof(snddat));
- memset(databuf, 0, sizeof(databuf));
+ ZERO(databuf);
snddat.head[0] = FHONE;
snddat.head[1] = FHTWO;
}
@@ -539,7 +539,6 @@ namespace ExtUI {
}
void RTSSHOW::RTS_SndData(const char *str, uint32_t addr, uint8_t cmd/*=VarAddr_W*/) {
-
int16_t len = strlen(str);
constexpr int16_t maxlen = SizeofDatabuf - 6;
if (len > 0) {
@@ -556,25 +555,29 @@ namespace ExtUI {
DWIN_SERIAL.write(databuf[i]);
delay_us(1);
}
- memset(databuf, 0, sizeof(databuf));
+ ZERO(databuf);
}
}
- void RTSSHOW::RTS_SndData(char c, uint32_t addr, uint8_t cmd/*=VarAddr_W*/) {
+ void RTSSHOW::RTS_SndData(const char c, const uint32_t addr, const uint8_t cmd/*=VarAddr_W*/) {
snddat.command = cmd;
snddat.addr = addr;
- snddat.data[0] = uint32_t(c);
- snddat.data[0] = snddat.data[0] << 8;
+ snddat.data[0] = uint32_t(uint16_t(c) << 8);
snddat.len = 5;
RTS_SndData();
}
- void RTSSHOW::RTS_SndData(uint8_t *str, uint32_t addr, uint8_t cmd) { RTS_SndData((char *)str, addr, cmd); }
-
- void RTSSHOW::RTS_SndData(int16_t n, uint32_t addr, uint8_t cmd/*=VarAddr_W*/) {
+ void RTSSHOW::RTS_SndData(const int n, const uint32_t addr, const uint8_t cmd/*=VarAddr_W*/) {
if (cmd == VarAddr_W) {
- snddat.data[0] = n;
- snddat.len = 5;
+ if ((unsigned int)n > 0xFFFF) {
+ snddat.data[0] = n >> 16;
+ snddat.data[1] = n & 0xFFFF;
+ snddat.len = 7;
+ }
+ else {
+ snddat.data[0] = n;
+ snddat.len = 5;
+ }
}
else if (cmd == RegAddr_W) {
snddat.data[0] = n;
@@ -589,13 +592,7 @@ namespace ExtUI {
RTS_SndData();
}
- void RTSSHOW::RTS_SndData(uint16_t n, uint32_t addr, uint8_t cmd) { RTS_SndData(int16_t(n), addr, cmd); }
-
- void RTSSHOW::RTS_SndData(float n, uint32_t addr, uint8_t cmd) { RTS_SndData(int16_t(n), addr, cmd); }
-
- void RTSSHOW::RTS_SndData(int32_t n, uint32_t addr, uint8_t cmd) { RTS_SndData(uint32_t(n), addr, cmd); }
-
- void RTSSHOW::RTS_SndData(uint32_t n, uint32_t addr, uint8_t cmd/*=VarAddr_W*/) {
+ void RTSSHOW::RTS_SndData(const unsigned long n, uint32_t addr, uint8_t cmd/*=VarAddr_W*/) {
if (cmd == VarAddr_W) {
if (n > 0xFFFF) {
snddat.data[0] = n >> 16;
@@ -632,11 +629,11 @@ namespace ExtUI {
if (recdat.addr == Addrbuf[i]) {
if (Addrbuf[i] == NzBdSet || Addrbuf[i] == NozzlePreheat || Addrbuf[i] == BedPreheat || Addrbuf[i] == Flowrate)
Checkkey = ManualSetTemp;
- else if (Addrbuf[i] >= Stopprint && Addrbuf[i] <= Resumeprint)
+ else if (WITHIN(Addrbuf[i], Stopprint, Resumeprint))
Checkkey = PrintChoice;
- else if (Addrbuf[i] >= AutoZero && Addrbuf[i] <= DisplayZaxis)
+ else if (WITHIN(Addrbuf[i], AutoZero, DisplayZaxis))
Checkkey = XYZEaxis;
- else if (Addrbuf[i] >= FilamentUnit1 && Addrbuf[i] <= FilamentUnit2)
+ else if (WITHIN(Addrbuf[i], FilamentUnit1, FilamentUnit2))
Checkkey = Filament;
else
Checkkey = i;
@@ -1054,7 +1051,7 @@ namespace ExtUI {
else if (recdat.data[0] == 2) { // Exchange filament
InforShowStatus = true;
TPShowStatus = false;
- memset(ChangeMaterialbuf, 0, sizeof(ChangeMaterialbuf));
+ 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[1], FilamentUnit2);
diff --git a/Marlin/src/lcd/extui/ia_creality/creality_extui.h b/Marlin/src/lcd/extui/ia_creality/creality_extui.h
index 874a51b6f6..35162eebee 100644
--- a/Marlin/src/lcd/extui/ia_creality/creality_extui.h
+++ b/Marlin/src/lcd/extui/ia_creality/creality_extui.h
@@ -223,19 +223,21 @@ namespace ExtUI {
public:
RTSSHOW();
int16_t RTS_RecData();
- void RTS_SDCardInit(void);
+ void RTS_SDCardInit();
void RTS_SDCardUpate(bool, bool);
int16_t RTS_CheckFilament(int16_t);
- void RTS_SndData(void);
- void RTS_SndData(const String &, uint32_t, uint8_t=VarAddr_W);
- void RTS_SndData(const char[], uint32_t, uint8_t=VarAddr_W);
- void RTS_SndData(char, uint32_t, uint8_t=VarAddr_W);
- void RTS_SndData(uint8_t*, uint32_t, uint8_t=VarAddr_W);
- void RTS_SndData(int16_t, uint32_t, uint8_t=VarAddr_W);
- void RTS_SndData(float, uint32_t, uint8_t=VarAddr_W);
- void RTS_SndData(uint16_t, uint32_t, uint8_t=VarAddr_W);
- void RTS_SndData(int32_t, uint32_t, uint8_t=VarAddr_W);
- void RTS_SndData(uint32_t, uint32_t, uint8_t=VarAddr_W);
+ void RTS_SndData();
+ void RTS_SndData(const String&, const uint32_t, const uint8_t=VarAddr_W);
+ void RTS_SndData(const char[], const uint32_t, const uint8_t=VarAddr_W);
+ void RTS_SndData(char, const uint32_t, const uint8_t=VarAddr_W);
+ void RTS_SndData(int, const uint32_t, const uint8_t=VarAddr_W);
+ void RTS_SndData(unsigned long, const uint32_t, const uint8_t=VarAddr_W);
+
+ void RTS_SndData(uint8_t * const str, const uint32_t addr, const uint8_t cmd=VarAddr_W) { RTS_SndData((char *)str, addr, cmd); }
+ void RTS_SndData(const unsigned int n, uint32_t addr, const uint8_t cmd=VarAddr_W) { RTS_SndData(int(n), addr, cmd); }
+ void RTS_SndData(const_float_t n, const uint32_t addr, const uint8_t cmd=VarAddr_W) { RTS_SndData(int(n), addr, cmd); }
+ void RTS_SndData(const long n, const uint32_t addr, const uint8_t cmd=VarAddr_W) { RTS_SndData((unsigned long)n, addr, cmd); }
+
void RTS_SDcard_Stop();
void RTS_HandleData();
void RTS_Init();
@@ -281,7 +283,7 @@ namespace ExtUI {
Filename = Filename_Value
};
- const uint32_t Addrbuf[] = {
+ const uint16_t Addrbuf[] = {
0x1002, 0x1004, 0x1006, 0x1008, 0x100A, 0x100C, 0x1026, 0x1030, 0x1032, 0x1034, 0x103A,
0x103E, 0x1040, 0x1044, 0x1046, 0x1048, 0x104A, 0x104C, 0x1054, 0x1056, 0x1058,
0x105C, 0x105E, 0x105F, 0x1088, 0
diff --git a/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.cpp b/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.cpp
index cac3d2a17d..9d7f5e2032 100644
--- a/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.cpp
@@ -322,7 +322,7 @@ int WifiSerial::read() {
// if the head isn't ahead of the tail, we don't have any characters
if (_serial.rx_head == _serial.rx_tail) return -1;
- unsigned char c = _serial.rx_buff[_serial.rx_tail];
+ uint8_t c = _serial.rx_buff[_serial.rx_tail];
_serial.rx_tail = (rx_buffer_index_t)(_serial.rx_tail + 1) % WIFI_RX_BUF_SIZE;
return c;
}
From 106896309245b946276d83fa3ea4ebc4e9aa33ea Mon Sep 17 00:00:00 2001
From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com>
Date: Sun, 26 Feb 2023 19:03:28 -0800
Subject: [PATCH 58/97] =?UTF-8?q?=F0=9F=94=A8=20Fix=20env=20STM32G0B1RE=5F?=
=?UTF-8?q?btt,=20add=20=E2=80=A6=5Fmanta=5Fbtt=20(#25431)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/pins/pins.h | 6 ++---
.../variants/MARLIN_BIGTREE_GTR_V1/variant.h | 2 +-
.../MARLIN_BIGTREE_SKR_PRO_11/variant.h | 2 +-
.../MARLIN_CREALITY_STM32F401RC/variant.h | 4 +--
.../MARLIN_FYSETC_CHEETAH_V20/variant.h | 2 +-
.../MARLIN_FYSETC_SPIDER_KING407/variant.h | 2 +-
.../variant_MARLIN_STM32G0B1RE.h | 12 ---------
ini/stm32g0.ini | 26 +++++++++++++++++--
8 files changed, 33 insertions(+), 23 deletions(-)
diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h
index 18bb7dba58..1c45b0b155 100644
--- a/Marlin/src/pins/pins.h
+++ b/Marlin/src/pins/pins.h
@@ -546,11 +546,11 @@
#elif MB(BTT_SKR_MINI_E3_V3_0)
#include "stm32g0/pins_BTT_SKR_MINI_E3_V3_0.h" // STM32G0 env:STM32G0B1RE_btt env:STM32G0B1RE_btt_xfer
#elif MB(BTT_MANTA_M4P_V1_0)
- #include "stm32g0/pins_BTT_MANTA_M4P_V1_0.h" // STM32G0 env:STM32G0B1RE_btt env:STM32G0B1RE_btt_xfer
+ #include "stm32g0/pins_BTT_MANTA_M4P_V1_0.h" // STM32G0 env:STM32G0B1RE_manta_btt env:STM32G0B1RE_manta_btt_xfer
#elif MB(BTT_MANTA_M5P_V1_0)
- #include "stm32g0/pins_BTT_MANTA_M5P_V1_0.h" // STM32G0 env:STM32G0B1RE_btt env:STM32G0B1RE_btt_xfer
+ #include "stm32g0/pins_BTT_MANTA_M5P_V1_0.h" // STM32G0 env:STM32G0B1RE_manta_btt env:STM32G0B1RE_manta_btt_xfer
#elif MB(BTT_MANTA_E3_EZ_V1_0)
- #include "stm32g0/pins_BTT_MANTA_E3_EZ_V1_0.h" // STM32G0 env:STM32G0B1RE_btt env:STM32G0B1RE_btt_xfer
+ #include "stm32g0/pins_BTT_MANTA_E3_EZ_V1_0.h" // STM32G0 env:STM32G0B1RE_manta_btt env:STM32G0B1RE_manta_btt_xfer
#elif MB(BTT_MANTA_M8P_V1_0)
#include "stm32g0/pins_BTT_MANTA_M8P_V1_0.h" // STM32G0 env:STM32G0B1VE_btt env:STM32G0B1VE_btt_xfer
#elif MB(BTT_MANTA_M8P_V1_1)
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_GTR_V1/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_GTR_V1/variant.h
index 2c70693991..d39e665d53 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_GTR_V1/variant.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_GTR_V1/variant.h
@@ -280,7 +280,7 @@ extern "C" {
#define PIN_SERIAL_TX PA9
// Optional PIN_SERIALn_RX and PIN_SERIALn_TX where 'n' is the U(S)ART number
-// Used when user instantiate a hardware Serial using its peripheral name.
+// Used when the user instantiates 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
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_SKR_PRO_11/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_SKR_PRO_11/variant.h
index b5cf0bad9d..c30d7ecc77 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_SKR_PRO_11/variant.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_SKR_PRO_11/variant.h
@@ -280,7 +280,7 @@ extern "C" {
#define PIN_SERIAL_TX PA9
// Optional PIN_SERIALn_RX and PIN_SERIALn_TX where 'n' is the U(S)ART number
-// Used when user instantiate a hardware Serial using its peripheral name.
+// Used when the user instantiates 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
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RC/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RC/variant.h
index b5a4e5ef80..595601aae0 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RC/variant.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_CREALITY_STM32F401RC/variant.h
@@ -112,7 +112,7 @@ extern "C" {
#define PIN_SERIAL_RX PA10
#define PIN_SERIAL_TX PA9
-// Used when user instanciate a hardware Serial using its peripheral name.
+// Used when the user instantiates 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
@@ -148,4 +148,4 @@ extern "C" {
#define SERIAL_PORT_HARDWARE_OPEN Serial2
#endif
-#endif /* _VARIANT_ARDUINO_STM32_ */
\ No newline at end of file
+#endif /* _VARIANT_ARDUINO_STM32_ */
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_CHEETAH_V20/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_CHEETAH_V20/variant.h
index d4982113a0..a090113fa3 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_CHEETAH_V20/variant.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_CHEETAH_V20/variant.h
@@ -110,7 +110,7 @@ extern "C" {
#define PIN_SERIAL_RX PA10
#define PIN_SERIAL_TX PA9
-// Used when user instantiate a hardware Serial using its peripheral name.
+// Used when the user instantiates 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
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_SPIDER_KING407/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_SPIDER_KING407/variant.h
index 727c0d07d8..c3a0c16811 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_SPIDER_KING407/variant.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_SPIDER_KING407/variant.h
@@ -196,7 +196,7 @@ extern "C" {
#define PIN_SERIAL_TX PA9
// Optional PIN_SERIALn_RX and PIN_SERIALn_TX where 'n' is the U(S)ART number
-// Used when user instantiate a hardware Serial using its peripheral name.
+// Used when the user instantiates 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
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h b/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h
index 23cecd371a..6a26baff45 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h
@@ -158,9 +158,6 @@
#endif
// UART Definitions
-//#define ENABLE_HWSERIAL1 done automatically by the #define SERIAL_UART_INSTANCE below
-#define ENABLE_HWSERIAL3
-
#ifndef SERIAL_UART_INSTANCE
#define SERIAL_UART_INSTANCE 2
#endif
@@ -174,15 +171,6 @@
#define PIN_SERIAL_TX PA2
#endif
-// Optional PIN_SERIALn_RX and PIN_SERIALn_TX where 'n' is the U(S)ART number
-// Used when user instantiate 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 PA3
-#define PIN_SERIAL1_TX PA2
-#define PIN_SERIAL3_RX PD9
-#define PIN_SERIAL3_TX PD8
-
/*----------------------------------------------------------------------------
* Arduino objects - C++ only
*----------------------------------------------------------------------------*/
diff --git a/ini/stm32g0.ini b/ini/stm32g0.ini
index 5891395642..2ffee09790 100644
--- a/ini/stm32g0.ini
+++ b/ini/stm32g0.ini
@@ -41,7 +41,7 @@ upload_protocol = stlink
debug_tool = stlink
#
-# BigTreeTech SKR Mini E3 V3.0 / Manta E3 EZ V1.0 / Manta M4P V1.0 / Manta M5P V1.0 (STM32G0B1RET6 ARM Cortex-M0+)
+# BigTreeTech SKR Mini E3 V3.0 (STM32G0B1RET6 ARM Cortex-M0+)
#
[env:STM32G0B1RE_btt]
extends = stm32_variant
@@ -59,7 +59,7 @@ upload_protocol = stlink
debug_tool = stlink
#
-# BigTreeTech SKR Mini E3 V3.0 / Manta E3 EZ V1.0 / Manta M4P V1.0 / Manta M5P V1.0 (STM32G0B1RET6 ARM Cortex-M0+)
+# BigTreeTech SKR Mini E3 V3.0 (STM32G0B1RET6 ARM Cortex-M0+)
# Custom upload to SD via Marlin with Binary Protocol
# Requires Marlin with BINARY_FILE_TRANSFER already installed on the target board.
# If CUSTOM_FIRMWARE_UPLOAD is also installed, Marlin will reboot the board to install the firmware.
@@ -72,6 +72,28 @@ extra_scripts = ${env:STM32G0B1RE_btt.extra_scripts}
pre:buildroot/share/scripts/upload.py
upload_protocol = custom
+#
+# BigTreeTech Manta E3 EZ V1.0 / Manta M4P V1.0 / Manta M5P V1.0 (STM32G0B1RET6 ARM Cortex-M0+)
+#
+[env:STM32G0B1RE_manta_btt]
+extends = env:STM32G0B1RE_btt
+build_flags = ${env:STM32G0B1RE_btt.build_flags}
+ -DPIN_SERIAL3_RX=PD_9 -DPIN_SERIAL3_TX=PD_8 -DENABLE_HWSERIAL3
+
+#
+# BigTreeTech Manta E3 EZ V1.0 / Manta M4P V1.0 / Manta M5P V1.0 (STM32G0B1RET6 ARM Cortex-M0+)
+# Custom upload to SD via Marlin with Binary Protocol
+# Requires Marlin with BINARY_FILE_TRANSFER already installed on the target board.
+# If CUSTOM_FIRMWARE_UPLOAD is also installed, Marlin will reboot the board to install the firmware.
+# Currently CUSTOM_FIRMWARE_UPLOAD must also be enabled to use 'xfer' build envs.
+#
+[env:STM32G0B1RE_manta_btt_xfer]
+extends = env:STM32G0B1RE_manta_btt
+build_flags = ${env:STM32G0B1RE_manta_btt.build_flags} -DXFER_BUILD
+extra_scripts = ${env:STM32G0B1RE_manta_btt.extra_scripts}
+ pre:buildroot/share/scripts/upload.py
+upload_protocol = custom
+
#
# BigTreeTech Manta M8P V1.x (STM32G0B1VET6 ARM Cortex-M0+)
#
From 866e7d3128a7c526a76b8826df70b3769177385d Mon Sep 17 00:00:00 2001
From: Daranbalt4 <119883952+Daranbalt4@users.noreply.github.com>
Date: Mon, 27 Feb 2023 04:23:52 +0100
Subject: [PATCH 59/97] =?UTF-8?q?=E2=9C=A8=20LCD=5FBACKLIGHT=5FTIMEOUT=20f?=
=?UTF-8?q?or=20Neopixel=20LCD=20(#25438)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/Configuration.h | 3 ++-
Marlin/src/feature/leds/neopixel.cpp | 10 +++++++++-
Marlin/src/feature/leds/neopixel.h | 1 +
Marlin/src/inc/SanityCheck.h | 8 +++++++-
Marlin/src/lcd/marlinui.cpp | 19 +++++++++++++++----
buildroot/tests/LPC1768 | 2 +-
6 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index f780bdd243..7503fd82da 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -3403,7 +3403,8 @@
// Use some of the NeoPixel LEDs for static (background) lighting
//#define NEOPIXEL_BKGD_INDEX_FIRST 0 // Index of the first background LED
//#define NEOPIXEL_BKGD_INDEX_LAST 5 // Index of the last background LED
- //#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 } // R, G, B, W
+ //#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 } // R, G, B, W
+ //#define NEOPIXEL_BKGD_TIMEOUT_COLOR { 25, 25, 25, 0 } // R, G, B, W
//#define NEOPIXEL_BKGD_ALWAYS_ON // Keep the backlight on when other NeoPixels are off
#endif
diff --git a/Marlin/src/feature/leds/neopixel.cpp b/Marlin/src/feature/leds/neopixel.cpp
index ab7ffe2177..2193217df0 100644
--- a/Marlin/src/feature/leds/neopixel.cpp
+++ b/Marlin/src/feature/leds/neopixel.cpp
@@ -54,7 +54,15 @@ Adafruit_NeoPixel Marlin_NeoPixel::adaneo1(NEOPIXEL_PIXELS, NEOPIXEL_PIN, NEOPIX
set_background_color(background_color);
}
-#endif
+ void Marlin_NeoPixel::set_background_off() {
+ #ifndef NEOPIXEL_BKGD_TIMEOUT_COLOR
+ #define NEOPIXEL_BKGD_TIMEOUT_COLOR { 0, 0, 0, 0 }
+ #endif
+ constexpr uint8_t background_color_off[4] = NEOPIXEL_BKGD_TIMEOUT_COLOR;
+ set_background_color(background_color_off);
+ }
+
+#endif // NEOPIXEL_BKGD_INDEX_FIRST
void Marlin_NeoPixel::set_color(const uint32_t color) {
if (neoindex >= 0) {
diff --git a/Marlin/src/feature/leds/neopixel.h b/Marlin/src/feature/leds/neopixel.h
index 2048e2c2ee..7c8d018013 100644
--- a/Marlin/src/feature/leds/neopixel.h
+++ b/Marlin/src/feature/leds/neopixel.h
@@ -91,6 +91,7 @@ public:
static void set_background_color(const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t w);
static void set_background_color(const uint8_t (&rgbw)[4]) { set_background_color(rgbw[0], rgbw[1], rgbw[2], rgbw[3]); }
static void reset_background_color();
+ static void set_background_off();
#endif
static void begin() {
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index 11d27d6eaf..02e7dba54b 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -3241,8 +3241,14 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#if LCD_BACKLIGHT_TIMEOUT_MINS
#if !HAS_ENCODER_ACTION
#error "LCD_BACKLIGHT_TIMEOUT_MINS requires an LCD with encoder or keypad."
+ #elif ENABLED(NEOPIXEL_BKGD_INDEX_FIRST)
+ #if PIN_EXISTS(LCD_BACKLIGHT)
+ #error "LCD_BACKLIGHT_PIN and NEOPIXEL_BKGD_INDEX_FIRST are not supported at the same time."
+ #elif ENABLED(NEOPIXEL_BKGD_ALWAYS_ON)
+ #error "LCD_BACKLIGHT_TIMEOUT is not compatible with NEOPIXEL_BKGD_ALWAYS_ON."
+ #endif
#elif !PIN_EXISTS(LCD_BACKLIGHT)
- #error "LCD_BACKLIGHT_TIMEOUT_MINS requires LCD_BACKLIGHT_PIN."
+ #error "LCD_BACKLIGHT_TIMEOUT_MINS requires either LCD_BACKLIGHT_PIN or NEOPIXEL_BKGD_INDEX_FIRST."
#endif
#endif
diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp
index aa1ccb17c2..d3f01e6d23 100644
--- a/Marlin/src/lcd/marlinui.cpp
+++ b/Marlin/src/lcd/marlinui.cpp
@@ -24,7 +24,7 @@
#include "../MarlinCore.h" // for printingIsPaused
-#if LED_POWEROFF_TIMEOUT > 0 || BOTH(HAS_WIRED_LCD, PRINTER_EVENT_LEDS)
+#if LED_POWEROFF_TIMEOUT > 0 || BOTH(HAS_WIRED_LCD, PRINTER_EVENT_LEDS) || (defined(LCD_BACKLIGHT_TIMEOUT_MINS) && defined(NEOPIXEL_BKGD_INDEX_FIRST))
#include "../feature/leds/leds.h"
#endif
@@ -186,12 +186,17 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
#if LCD_BACKLIGHT_TIMEOUT_MINS
constexpr uint8_t MarlinUI::backlight_timeout_min, MarlinUI::backlight_timeout_max;
-
uint8_t MarlinUI::backlight_timeout_minutes; // Initialized by settings.load()
millis_t MarlinUI::backlight_off_ms = 0;
+
void MarlinUI::refresh_backlight_timeout() {
backlight_off_ms = backlight_timeout_minutes ? millis() + backlight_timeout_minutes * 60UL * 1000UL : 0;
- WRITE(LCD_BACKLIGHT_PIN, HIGH);
+ #ifdef NEOPIXEL_BKGD_INDEX_FIRST
+ neo.reset_background_color();
+ neo.show();
+ #elif PIN_EXISTS(LCD_BACKLIGHT)
+ WRITE(LCD_BACKLIGHT_PIN, HIGH);
+ #endif
}
#elif HAS_DISPLAY_SLEEP
@@ -1196,8 +1201,14 @@ void MarlinUI::init() {
#endif
#if LCD_BACKLIGHT_TIMEOUT_MINS
+
if (backlight_off_ms && ELAPSED(ms, backlight_off_ms)) {
- WRITE(LCD_BACKLIGHT_PIN, LOW); // Backlight off
+ #ifdef NEOPIXEL_BKGD_INDEX_FIRST
+ neo.set_background_off();
+ neo.show();
+ #elif PIN_EXIST(LCD_BACKLIGHT)
+ WRITE(LCD_BACKLIGHT_PIN, LOW); // Backlight off
+ #endif
backlight_off_ms = 0;
}
#elif HAS_DISPLAY_SLEEP
diff --git a/buildroot/tests/LPC1768 b/buildroot/tests/LPC1768
index 37cc705c0c..ee01bb621f 100755
--- a/buildroot/tests/LPC1768
+++ b/buildroot/tests/LPC1768
@@ -17,7 +17,7 @@ restore_configs
opt_set MOTHERBOARD BOARD_RAMPS_14_RE_ARM_EFB SERIAL_PORT_3 3 \
NEOPIXEL_TYPE NEO_RGB RGB_LED_R_PIN P2_12 RGB_LED_G_PIN P1_23 RGB_LED_B_PIN P1_22 RGB_LED_W_PIN P1_24
opt_enable FYSETC_MINI_12864_2_1 SDSUPPORT SDCARD_READONLY SERIAL_PORT_2 RGBW_LED E_DUAL_STEPPER_DRIVERS \
- NEOPIXEL_LED NEOPIXEL_IS_SEQUENTIAL NEOPIXEL_STARTUP_TEST NEOPIXEL_BKGD_INDEX_FIRST NEOPIXEL_BKGD_INDEX_LAST NEOPIXEL_BKGD_COLOR NEOPIXEL_BKGD_ALWAYS_ON
+ NEOPIXEL_LED NEOPIXEL_IS_SEQUENTIAL NEOPIXEL_STARTUP_TEST NEOPIXEL_BKGD_INDEX_FIRST NEOPIXEL_BKGD_INDEX_LAST NEOPIXEL_BKGD_COLOR NEOPIXEL_BKGD_TIMEOUT_COLOR NEOPIXEL_BKGD_ALWAYS_ON
exec_test $1 $2 "ReARM EFB VIKI2, SDSUPPORT, 2 Serial ports (USB CDC + UART0), NeoPixel" "$3"
#restore_configs
From 80f0d4ed7c7e6487ffcc9a2f4b8ea32f78192446 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Mon, 27 Feb 2023 06:07:00 +0000
Subject: [PATCH 60/97] [cron] Bump distribution date (2023-02-27)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 3719a0aafe..f29856bb9e 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-02-24"
+//#define STRING_DISTRIBUTION_DATE "2023-02-27"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 30f7951878..0b60d59261 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-02-24"
+ #define STRING_DISTRIBUTION_DATE "2023-02-27"
#endif
/**
From 18601f458fa13efe7b1f431f3f005db0dfe43431 Mon Sep 17 00:00:00 2001
From: ellensp <530024+ellensp@users.noreply.github.com>
Date: Tue, 28 Feb 2023 06:11:53 +1300
Subject: [PATCH 61/97] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Add?=
=?UTF-8?q?=20IA=5FCREALITY=20CI=20test=20(#25434)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
buildroot/tests/STM32F103RE_creality | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/buildroot/tests/STM32F103RE_creality b/buildroot/tests/STM32F103RE_creality
index 8c0a40d8ae..8910db0017 100755
--- a/buildroot/tests/STM32F103RE_creality
+++ b/buildroot/tests/STM32F103RE_creality
@@ -38,5 +38,12 @@ opt_enable NOZZLE_AS_PROBE Z_SAFE_HOMING Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN FAN_
PROBE_ACTIVATION_SWITCH PROBE_TARE PROBE_TARE_ONLY_WHILE_INACTIVE
exec_test $1 $2 "Creality V4.5.2 PROBE_ACTIVATION_SWITCH, Probe Tare" "$3"
+restore_configs
+opt_set MOTHERBOARD BOARD_CREALITY_V422 SERIAL_PORT 1 DGUS_LCD_UI IA_CREALITY
+opt_enable NOZZLE_PARK_FEATURE ADVANCED_PAUSE_FEATURE LCD_BED_TRAMMING CLASSIC_JERK BABYSTEPPING \
+ AUTO_BED_LEVELING_BILINEAR PROBE_MANUALLY FAN_SOFT_PWM
+opt_add NO_CREALITY_422_DRIVER_WARNING NO_AUTO_ASSIGN_WARNING
+exec_test $1 $2 "Creality V4.2.2 with IA_CREALITY" "$3"
+
# clean up
restore_configs
From 6084502f8067c001ba3c4ab42e246931a6c6c8d8 Mon Sep 17 00:00:00 2001
From: tombrazier <68918209+tombrazier@users.noreply.github.com>
Date: Mon, 27 Feb 2023 23:00:13 +0000
Subject: [PATCH 62/97] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Linear=20Advance=20E?=
=?UTF-8?q?=20position=20tracking=20(#25442)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Fix regression from #24951
---
Marlin/src/module/stepper.cpp | 1 -
1 file changed, 1 deletion(-)
diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp
index 0750fd82aa..d47565f409 100644
--- a/Marlin/src/module/stepper.cpp
+++ b/Marlin/src/module/stepper.cpp
@@ -1869,7 +1869,6 @@ void Stepper::pulse_phase_isr() {
// don't actually step here, but do subtract movements steps
// from the linear advance step count
step_needed.e = false;
- count_position.e -= count_direction.e;
la_advance_steps--;
}
#endif
From 20d4b995f7fbbc1505fda363b69596a75bda03df Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Tue, 28 Feb 2023 00:23:17 +0000
Subject: [PATCH 63/97] [cron] Bump distribution date (2023-02-28)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index f29856bb9e..a2f12b8c0a 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-02-27"
+//#define STRING_DISTRIBUTION_DATE "2023-02-28"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 0b60d59261..7860200016 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-02-27"
+ #define STRING_DISTRIBUTION_DATE "2023-02-28"
#endif
/**
From 579833e2a3d8ab8716fcab85dd26904a718fcec8 Mon Sep 17 00:00:00 2001
From: ellensp <530024+ellensp@users.noreply.github.com>
Date: Tue, 28 Feb 2023 16:16:11 +1300
Subject: [PATCH 64/97] =?UTF-8?q?=F0=9F=94=A7=20Fix=20Sensorless=20Probe?=
=?UTF-8?q?=20sanity-check=20err=20(#25417)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/inc/SanityCheck.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index 02e7dba54b..d5e91932da 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -1919,9 +1919,9 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
*/
#if ENABLED(SENSORLESS_PROBING)
#if ENABLED(DELTA) && !(X_SENSORLESS && Y_SENSORLESS && Z_SENSORLESS)
- #error "SENSORLESS_PROBING requires TMC2130/2160/2209/5130/5160 drivers on X, Y, and Z."
+ #error "SENSORLESS_PROBING requires TMC2130/2160/2209/5130/5160 drivers on X, Y, and Z and {X|Y|Z}_STALL_SENSITIVITY."
#elif !Z_SENSORLESS
- #error "SENSORLESS_PROBING requires a TMC2130/2160/2209/5130/5160 driver on Z."
+ #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)
From 894e3787028575015bb6f978ab28219bda66f58d Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Tue, 28 Feb 2023 17:50:06 -0600
Subject: [PATCH 65/97] =?UTF-8?q?=F0=9F=94=A8=20Improve=20config.ini=20exa?=
=?UTF-8?q?mple=20fetch?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
buildroot/share/PlatformIO/scripts/configuration.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/buildroot/share/PlatformIO/scripts/configuration.py b/buildroot/share/PlatformIO/scripts/configuration.py
index 7a07f02d46..3fc43ed6d8 100644
--- a/buildroot/share/PlatformIO/scripts/configuration.py
+++ b/buildroot/share/PlatformIO/scripts/configuration.py
@@ -88,6 +88,7 @@ def fetch_example(url):
if not url.startswith('http'):
brch = "bugfix-2.1.x"
if '@' in url: url, brch = map(str.strip, url.split('@'))
+ if url == 'examples/default': url = 'default'
url = f"https://raw.githubusercontent.com/MarlinFirmware/Configurations/{brch}/config/{url}"
url = url.replace("%", "%25").replace(" ", "%20")
@@ -103,7 +104,7 @@ def fetch_example(url):
import os
# Reset configurations to default
- os.system("git reset --hard HEAD")
+ os.system("git checkout HEAD Marlin/*.h")
# Try to fetch the remote files
gotfile = False
@@ -191,7 +192,7 @@ def apply_config_ini(cp):
# For 'examples/' fetch an example set from GitHub.
# For https?:// do a direct fetch of the URL.
- if ckey.startswith('examples/') or ckey.startswith('http:'):
+ if ckey.startswith('examples/') or ckey.startswith('http'):
fetch_example(ckey)
ckey = 'base'
From 42cd314d96b764831f6406102530d570aff8a06c Mon Sep 17 00:00:00 2001
From: tombrazier <68918209+tombrazier@users.noreply.github.com>
Date: Wed, 1 Mar 2023 00:16:27 +0000
Subject: [PATCH 66/97] =?UTF-8?q?=F0=9F=90=9B=20Fix=20LA=20retract/feedrat?=
=?UTF-8?q?e=20edge=20case=20(#25445)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Followup to #25442
---
Marlin/src/module/stepper.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp
index d47565f409..d0398b404c 100644
--- a/Marlin/src/module/stepper.cpp
+++ b/Marlin/src/module/stepper.cpp
@@ -2261,6 +2261,8 @@ uint32_t Stepper::block_phase_isr() {
DIR_WAIT_AFTER();
}
}
+ else
+ la_interval = LA_ADV_NEVER;
}
#endif // LIN_ADVANCE
From 030559bf7f0287150549dc1a9876ca2bc7de1617 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Wed, 1 Mar 2023 00:26:50 +0000
Subject: [PATCH 67/97] [cron] Bump distribution date (2023-03-01)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index a2f12b8c0a..0a78854bd8 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-02-28"
+//#define STRING_DISTRIBUTION_DATE "2023-03-01"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 7860200016..047acad5cf 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-02-28"
+ #define STRING_DISTRIBUTION_DATE "2023-03-01"
#endif
/**
From 6a8ebddaf66fbe12d6d6b266d99080d66e618876 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Wed, 1 Mar 2023 19:07:47 -0600
Subject: [PATCH 68/97] =?UTF-8?q?=F0=9F=94=A8=20Update=20font=20scripts?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 3 +-
buildroot/share/fonts/bdf2u8g/Makefile | 15 +
buildroot/share/fonts/bdf2u8g/bdf2u8g.c | 1214 +++++++++++++++++
buildroot/share/fonts/genallfont.sh | 37 +-
.../share/fonts/{ => genpages}/genpages.c | 2 +-
.../share/fonts/{ => genpages}/getline.c | 0
.../share/fonts/{ => genpages}/getline.h | 0
buildroot/share/fonts/get-bdf2u8g.sh | 35 -
buildroot/share/fonts/u8glib-bdf2u8g.patch | 32 -
buildroot/share/fonts/uxggenpages.sh | 29 +-
10 files changed, 1263 insertions(+), 104 deletions(-)
create mode 100644 buildroot/share/fonts/bdf2u8g/Makefile
create mode 100644 buildroot/share/fonts/bdf2u8g/bdf2u8g.c
rename buildroot/share/fonts/{ => genpages}/genpages.c (99%)
rename buildroot/share/fonts/{ => genpages}/getline.c (100%)
rename buildroot/share/fonts/{ => genpages}/getline.h (100%)
delete mode 100755 buildroot/share/fonts/get-bdf2u8g.sh
delete mode 100644 buildroot/share/fonts/u8glib-bdf2u8g.patch
diff --git a/.gitignore b/.gitignore
index 09db344257..555bde8622 100755
--- a/.gitignore
+++ b/.gitignore
@@ -21,7 +21,8 @@
# Generated files
_Version.h
-bdf2u8g
+bdf2u8g.exe
+genpages.exe
marlin_config.json
mczip.h
*.gen
diff --git a/buildroot/share/fonts/bdf2u8g/Makefile b/buildroot/share/fonts/bdf2u8g/Makefile
new file mode 100644
index 0000000000..cb00c7bb74
--- /dev/null
+++ b/buildroot/share/fonts/bdf2u8g/Makefile
@@ -0,0 +1,15 @@
+CFLAGS = -g -Wall
+#CFLAGS = -O4 -Wall
+
+SRC = bdf2u8g.c
+
+OBJ = $(SRC:.c=.o)
+
+bdf2u8g: $(OBJ)
+ $(CC) $(CFLAGS) $(LDFLAGS) $(OBJ) -o bdf2u8g.exe
+
+clean:
+ -rm $(OBJ) bdf2u8g.exe
+
+test:
+ ./bdf2u8g.exe -f 2 ../bdf/9x18.bdf u8g_aafont_9x18 u8g_aafont_9x18.c
diff --git a/buildroot/share/fonts/bdf2u8g/bdf2u8g.c b/buildroot/share/fonts/bdf2u8g/bdf2u8g.c
new file mode 100644
index 0000000000..0421bbd87f
--- /dev/null
+++ b/buildroot/share/fonts/bdf2u8g/bdf2u8g.c
@@ -0,0 +1,1214 @@
+/*
+ general font collections
+ http://www.smashingmagazine.com/2007/11/08/40-excellent-freefonts-for-professional-design/
+ http://techmagazine.ws/most-popular-free-quality-fonts/
+ http://openfontlibrary.org/
+ bitmap font collections
+ http://www.orgdot.com/aliasfonts/ (includes links)
+ http://www.04.jp.org/
+ http://www.miniml.com
+ http://www.fontspace.com/010bus
+
+ http://en.wikipedia.org/wiki/Unicode_typeface
+ da könnten auch ein paar fonts dabei sein, die die m2tklib sonderzeichen beinhalten:
+ Caslon Roman http://en.wikipedia.org/wiki/Caslon_Roman
+ Charis Sil http://en.wikipedia.org/wiki/Charis_SIL
+ DejaVu Sans http://en.wikipedia.org/wiki/DejaVu_fonts
+ Doulos http://en.wikipedia.org/wiki/Doulos_SIL
+ Free Serif http://en.wikipedia.org/wiki/FreeSerif http://ftp.gnu.org/gnu/freefont/
+ --> keine box, aber es gibt pfeile/invertierte pfeile und kreise für m2tklib
+ Gentium Plus ???? http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=Gentium_download#02b091ae
+ --> keine graphic
+ GNU Unifont http://en.wikipedia.org/wiki/GNU_Unifont, http://unifoundry.com/unifont.html
+
+ Titus cyberbit Basic http://en.wikipedia.org/wiki/TITUS_Cyberbit_Basic
+
+ fonts
+ Gentium
+ http://openfontlibrary.org/font/gentium
+ license: OFL
+ Old-Standard
+ http://openfontlibrary.org/font/old-standard
+ license: OFL
+ Hanuman
+ http://openfontlibrary.org/font/hanumanb
+ license: OFL
+ FreeUniversal
+ http://openfontlibrary.org/font/freeuniversal
+ license: OFL
+ FriendShip-Code <--- nicht so sicher...
+ http://openfontlibrary.org/font/friendship-code
+ license: CC-BY-SA
+ LinuxLibertine
+ http://de.wikipedia.org/wiki/Linux_Libertine
+ http://sourceforge.net/projects/linuxlibertine/files/linuxlibertine/5.1.3-2/
+ license: OFL
+ DidactGothic
+ source: http://openfontlibrary.org/
+ judson
+ source: http://openfontlibrary.org/
+ unicons
+ source: http://openfontlibrary.org/
+ license: OFL
+ suggested pt: 26, 30
+ org_V01, fixed_V0
+ source: http://www.orgdot.com/aliasfonts/
+ license: open source, individual, cite required
+ suggested pt: 8
+ 04b_03b.zip 04b_03.zip 04b_09.zip 04b_11.zip 04b_19.zip 04b_21.zip 04b_25.zip 04b_30.zip
+ source: http://www.04.jp.org/
+ license: "Freeware: You may use them as you like"
+ 7px4bus
+ source: http://www.fontspace.com/010bus
+ license: Licensed as: Freeware, Commercial use allowed!
+ suggested 7pt
+ 8pxbus
+ source: http://www.fontspace.com/010bus
+ license: Licensed as: Freeware, Commercial use allowed!
+ suggested 8pt
+
+*/
+
+/*
+ only supports metric set "0"
+ assume DWIDTH second arg to be 0 for all glyphs
+ assumes that (0,0) of the BBX is placed on the base line
+ assumes ISO10646 encoding of the BDF file
+
+ font information
+ offset
+ 0 font format
+ 1 FONTBOUNDINGBOX width unsigned
+ 2 FONTBOUNDINGBOX height unsigned
+ 3 FONTBOUNDINGBOX x-offset signed
+ 4 FONTBOUNDINGBOX y-offset signed
+ 5 capital A height unsigned
+ 6 start 'A'
+ 8 start 'a'
+ 10 encoding start
+ 11 encoding end
+ 12 descent 'g' negative: below baseline
+ 13 font max ascent
+ 14 font min decent negative: below baseline
+ 15 xascent (ascent of "(")
+ 16 xdescent (descent of ")")
+
+format 0
+ glyph information
+ offset
+ 0 BBX width unsigned
+ 1 BBX height unsigned
+ 2 data size unsigned (BBX width + 7)/8 * BBX height
+ 3 DWIDTH signed
+ 4 BBX xoffset signed
+ 5 BBX yoffset signed
+
+format 1
+ 0 BBX xoffset signed --> upper 4 Bit
+ 0 BBX yoffset signed --> lower 4 Bit
+ 1 BBX width unsigned --> upper 4 Bit
+ 1 BBX height unsigned --> lower 4 Bit
+ 2 data size unsigned -(BBX width + 7)/8 * BBX height --> lower 4 Bit
+ 2 DWIDTH signed --> upper 4 Bit
+ byte 0 == 255 indicates empty glyph
+
+format 2
+ like format 0, but 4 gray levels for the glyph (4 pixel per byte in the glyph data)
+
+ The glyph bitmap size is defined by BBX width and BBX height
+ number of bytes in the bitmap data (BBX width + 7)/8 * BBX height (format 0 and 1)
+
+ draw_text(x,y,str)
+ get_text_frame(x,y,str, &x1, &y1, &width, &height)
+ frame( x1, y1, width, height)
+ underline( x1, y-1, width )
+
+ size of the surrounding bbox
+
+ width = - xoffset(c1) + DWIDTH(c1) + DWIDTH(c2) + ... + DWIDTH(cn-1) + width(cn) + xoffset(cn)
+ height = FONTBOUNDINGBOX height
+ x1 = x + xoffset(c1)
+ y1 = y + yoffset(c1)
+
+ISO-8859-1 was incorporated as the first 256 code points of ISO/IEC 10646 and Unicode.
+
+*/
+
+#include
+#include
+#include
+#include
+
+#define BDF2U8G_COMPACT_OUTPUT
+#define BDF2U8G_VERSION "1.01"
+//#define VERBOSE
+
+/*=== forward declaration ===*/
+void bdf_aa_ClearDoShow(void);
+void bdf_aa_Do(void);
+
+/*=== result data ===*/
+#define DATA_BUF_SIZE (1024 * 64)
+unsigned char data_buf[DATA_BUF_SIZE];
+int data_pos = 0;
+
+void data_Init(void) {
+ data_pos = 0;
+}
+
+void data_Put(unsigned char c) {
+ data_buf[data_pos] = c;
+ data_pos++;
+}
+
+void data_Write(FILE *out_fp, const char *indent) {
+ int i;
+ int bytes_per_line = 16;
+ for (i = 0; i < data_pos; i++) {
+ fprintf(out_fp, "0x%02X", data_buf[i]);
+ if (i + 1 != data_pos)
+ fprintf(out_fp, ",");
+ if ((i + 1) % bytes_per_line == 0)
+ fprintf(out_fp, "\n%s", indent);
+ }
+}
+
+/*=== low level parser ===*/
+#define P_BUF_SIZE (1024 * 4)
+int p_current_char;
+const char *p_line;
+char p_buf[P_BUF_SIZE];
+
+/* put next char into p_current_char */
+static int p_next_char(void) {
+ p_current_char = *p_line;
+ if (p_current_char == '\0')
+ return 0;
+ p_line++;
+ return 1;
+}
+
+int p_first_char(const char *line) {
+ p_line = line;
+ return p_next_char();
+}
+
+void p_err(const char *msg) {
+}
+
+int p_skip_space(void) {
+ for (;;) {
+ if (p_current_char == 0 || p_current_char > 32)
+ break;
+ if (p_next_char() == 0)
+ return 0;
+ }
+ return 1;
+}
+
+/* put identifier into p_buf */
+int p_get_identifier(void) {
+ int i = 0;
+ if (p_current_char == '\0')
+ return p_err("unexpected EOF (expected identifier)"), 0;
+ for (;;) {
+ if (p_current_char <= 32)
+ break;
+ p_buf[i++] = p_current_char;
+ if (p_next_char() == 0)
+ break;
+ }
+ p_buf[i++] = '\0';
+ p_skip_space();
+ return 1;
+}
+
+/* put identifier into p_buf */
+int p_get_identifier_with_blank(void) {
+ int i = 0;
+ for (;;) {
+ if (p_current_char < 32)
+ break;
+ p_buf[i++] = p_current_char;
+ if (p_next_char() == 0)
+ break;
+ }
+ p_buf[i++] = '\0';
+ p_skip_space();
+ return 1;
+}
+
+int p_get_string(void) {
+ int i = 0;
+ if (p_current_char == '\0')
+ return 0;
+ if (p_current_char != '\"')
+ return p_err("\" expected"), 0;
+ if (p_next_char() == 0)
+ return p_err("unexpected EOF (\")"), 0;
+ for (;;) {
+ if (p_current_char == '\\') {
+ if (p_next_char() == 0)
+ return p_err("unexpected EOF (\\)"), 0;
+ }
+ else if (p_current_char == '\"') {
+ p_next_char();
+ break;
+ }
+ p_buf[i++] = p_current_char;
+ if (p_next_char() == 0)
+ return p_err("unexpected EOF (\")"), 0;
+ }
+ p_buf[i] = '\0';
+ return 1;
+}
+
+int p_get_any(void) {
+ if (p_current_char == '\"')
+ return p_get_string();
+ return p_get_identifier();
+}
+
+int p_get_val(void) {
+ p_get_any();
+ return atoi(p_buf);
+}
+
+int p_get_hex(void) {
+ int value = 0;
+ if (p_current_char >= '0' && p_current_char <= '9')
+ value = p_current_char - '0';
+ else if (p_current_char >= 'a' && p_current_char <= 'f')
+ value = p_current_char - 'a' + 10;
+ else if (p_current_char >= 'A' && p_current_char <= 'F')
+ value = p_current_char - 'A' + 10;
+ p_next_char();
+ return value;
+}
+
+int p_get_hex_byte(void) {
+ int v;
+ v = p_get_hex();
+ v *= 16;
+ v += p_get_hex();
+ return v;
+}
+
+/*=== encoding mapping ===*/
+/* the internal u8g index number (0..255) is mapped to the unicode number */
+/* for the conversion we need the reverse search */
+/* 0 is special and means not found */
+int map_u8g_to_unicode[256];
+
+int map_UnicodeToU8G(int unicode) {
+ int i;
+ for (i = 0; i < 256; i++)
+ if (map_u8g_to_unicode[i] == unicode)
+ return i;
+ return 0;
+}
+
+void map_Init(void) {
+ int i;
+ map_u8g_to_unicode[0] = 0;
+ for (i = 0; i < 256; i++) map_u8g_to_unicode[i] = i;
+}
+
+void map_UpperLowerPage(int lower_page, int upper_page, int shift, int upper_shift) {
+ int i;
+ int encoding;
+ int tmp[256];
+ // map_u8g_to_unicode[0] = 0;
+ for (i = 0; i < 128; i++) {
+ encoding = i + lower_page * 128;
+ map_u8g_to_unicode[i] = encoding;
+ }
+
+ for (i = 128; i < 256; i++) {
+ encoding = i - 128 + upper_page * 128;
+ if (i + upper_shift < 256)
+ map_u8g_to_unicode[i + upper_shift] = encoding;
+ }
+
+ for (i = 0; i < 256; i++) tmp[i] = map_u8g_to_unicode[i];
+
+ for (i = 0; i < shift; i++) map_u8g_to_unicode[i] = -1;
+
+ for (i = shift; i < 256; i++) map_u8g_to_unicode[i] = tmp[(i + 256 - shift) % 256];
+ /*
+ printf("map_u8g_to_unicode[ 32 ] = %d\n", map_u8g_to_unicode[ 32 ]);
+ printf("map_u8g_to_unicode[ 33 ] = %d\n", map_u8g_to_unicode[ 33 ]);
+ */
+}
+
+/*=== store bdf file positions ===*/
+
+long bdf_last_line_start_pos;
+long bdf_encoding_pos[256];
+
+void bdf_InitFilePos(void) {
+ int i;
+ for (i = 0; i < 256; i++) bdf_encoding_pos[i] = 0;
+}
+
+void bdf_SetFilePos(FILE *fp, int encoding) {
+ if (encoding < 0)
+ return;
+ if (bdf_encoding_pos[encoding] == 0L)
+ return;
+ fseek(fp, bdf_encoding_pos[encoding], SEEK_SET);
+ // fprintf(stderr, "setting file for encoding %d to pos %ld\n", encoding, bdf_encoding_pos[encoding]);
+}
+
+int bdf_IsEncodingAvailable(int encoding) {
+ if (bdf_encoding_pos[encoding] == 0L)
+ // printf("encoding %d not availabe\n", encoding);
+ return 0;
+ return 1;
+}
+
+void bdf_StoreFilePos(int encoding, long pos) {
+ // if ( encoding == 33 )
+ // printf("encoding %d at pos %ld\n", encoding, pos);
+ if (bdf_encoding_pos[encoding] != 0L)
+ return;
+ bdf_encoding_pos[encoding] = pos;
+}
+
+/*=== bdf file read ===*/
+
+int bdf_font_format = 0;
+
+#define BDF_STATE_FONT_DATA 0
+#define BDF_STATE_ENCODING 1
+
+int bdf_state = BDF_STATE_FONT_DATA;
+int bdf_requested_encoding = 0;
+
+#define BDF_LINE_MAX (1024 * 4)
+#define BDF_LINE_STATE_KEYWORDS 0
+#define BDF_LINE_STATE_BITMAP 1
+#define BDF_MAX_HEIGHT 200
+#define BDF_AA_OFFSET 1
+
+char bdf_copyright[BDF_LINE_MAX];
+char bdf_font[BDF_LINE_MAX];
+unsigned char bdf_bitmap_line[BDF_MAX_HEIGHT][20];
+unsigned char bdf_aa_bitmap_line[BDF_MAX_HEIGHT + 2 * BDF_AA_OFFSET][(20 + 2 * BDF_AA_OFFSET) * 8];
+
+int bdf_line_state = BDF_LINE_STATE_KEYWORDS;
+int bdf_line_bm_line = 0;
+
+int bdf_font_size; /* point font size */
+
+int bdf_font_width; /* FONTBOUNDINGBOX arg 1 */
+int bdf_font_height; /* FONTBOUNDINGBOX arg 2 */
+int bdf_font_x; /* FONTBOUNDINGBOX arg 3 */
+int bdf_font_y; /* FONTBOUNDINGBOX arg 4 */
+
+int bdf_capital_A_height;
+int bdf_capital_1_height;
+int bdf_lower_g_descent;
+
+int bdf_char_width; /* BBX arg 1 */
+int bdf_char_max_width;
+int bdf_char_height; /* BBX arg 2 */
+int bdf_char_ascent; /* defined as BBX arg 2 + BBX arg 4 */
+int bdf_char_xascent;
+int bdf_char_xdescent;
+int bdf_char_max_ascent;
+int bdf_char_max_height;
+int bdf_char_x; /* BBX arg 3 */
+int bdf_char_max_x;
+int bdf_char_min_x;
+int bdf_char_y; /* BBX arg 4 */
+int bdf_char_max_y;
+int bdf_char_min_y;
+
+int bdf_delta_x_default = -1;
+int bdf_delta_x = -1; /* DWIDTH arg 1 */
+int bdf_delta_max_x;
+int bdf_delta_min_x;
+int bdf_delta_y; /* DWIDTH arg 2 */
+int bdf_delta_max_y;
+int bdf_delta_min_y;
+
+int bdf_glyph_data_len;
+int bdf_glyph_data_max_len;
+
+int bdf_encoding;
+
+int bdf_encoding_65_pos;
+int bdf_encoding_97_pos;
+int bdf_is_encoding_successfully_done;
+
+char bdf_info[32000 * 2];
+
+int bdf_is_put_glyph_completed = 0; /* indicator, when the glyph has been processed */
+
+void bdf_ResetMax(void) {
+ bdf_char_max_width = 0;
+ bdf_char_max_height = 0;
+ bdf_char_max_x = 0;
+ bdf_char_max_y = 0;
+ bdf_delta_max_x = 0;
+ bdf_delta_max_y = 0;
+ bdf_char_min_x = 0;
+ bdf_char_min_y = 0;
+ bdf_delta_min_x = 0;
+ bdf_delta_min_y = 0;
+ bdf_glyph_data_max_len = 0;
+ bdf_char_max_ascent = 0;
+ bdf_char_xascent = 0;
+ bdf_char_xdescent = 0;
+}
+
+void bdf_UpdateMax(void) {
+ if (bdf_char_max_width < bdf_char_width)
+ bdf_char_max_width = bdf_char_width;
+ if (bdf_char_max_height < bdf_char_height)
+ bdf_char_max_height = bdf_char_height;
+
+ if (bdf_char_max_x < bdf_char_x)
+ bdf_char_max_x = bdf_char_x;
+
+ if (bdf_char_max_y < bdf_char_y)
+ bdf_char_max_y = bdf_char_y;
+
+ if (bdf_delta_max_x < bdf_delta_x)
+ bdf_delta_max_x = bdf_delta_x;
+ if (bdf_delta_max_y < bdf_delta_y)
+ bdf_delta_max_y = bdf_delta_y;
+
+ if (bdf_char_min_x > bdf_char_x)
+ bdf_char_min_x = bdf_char_x;
+
+ if (bdf_char_min_y > bdf_char_y)
+ bdf_char_min_y = bdf_char_y;
+
+ if (bdf_delta_min_x > bdf_delta_x)
+ bdf_delta_min_x = bdf_delta_x;
+ if (bdf_delta_min_y > bdf_delta_y)
+ bdf_delta_min_y = bdf_delta_y;
+
+ if (bdf_glyph_data_max_len < bdf_glyph_data_len)
+ bdf_glyph_data_max_len = bdf_glyph_data_len;
+
+ if (bdf_char_max_ascent < bdf_char_ascent)
+ bdf_char_max_ascent = bdf_char_ascent;
+}
+
+void bdf_ShowGlyph(void) {
+ #ifdef VERBOSE
+ int x, y, byte, bit;
+ int gx, gy;
+ char *p;
+ gy = bdf_char_height - 1 + bdf_char_y;
+ printf("bbx %d %d %d %d encoding %d\n", bdf_char_width, bdf_char_height, bdf_char_x, bdf_char_y, bdf_encoding);
+ for (y = 0; y < bdf_line_bm_line; y++) {
+ printf("%02d ", gy);
+ gx = bdf_char_x;
+ for (x = 0; x < bdf_char_width; x++) {
+ byte = x >> 3;
+ bit = 7 - (x & 7);
+ if ((bdf_bitmap_line[y][byte] & (1 << bit)) == 0)
+ p = " .";
+ else
+ p = " *";
+ if (gy == 0 && gx == 0)
+ p = " o";
+ printf("%s", p);
+ gx++;
+ }
+ printf(" ");
+ for (x = 0; x < ((bdf_char_width + 7) / 8); x++) printf( "%02X", bdf_bitmap_line[y][x]);
+ gy--;
+ printf("\n");
+ }
+ #else
+ printf("bbx %d %d %d %d encoding %d\n", bdf_char_width, bdf_char_height, bdf_char_x, bdf_char_y, bdf_encoding);
+ fflush(stdout);
+ #endif
+}
+
+void bdf_ClearGlyphBuffer(void) {
+ int x, y;
+ for (y = 0; y < BDF_MAX_HEIGHT; y++)
+ for (x = 0; x < 20; x++) bdf_bitmap_line[y][x] = 0;
+}
+
+void bdf_PutGlyph(void) {
+ int len;
+ int y, x;
+
+ if (bdf_state == BDF_STATE_ENCODING) {
+ //if (bdf_char_width == 0 && bdf_char_height == 0) bdf_char_y = 0;
+
+ bdf_char_ascent = bdf_char_height + bdf_char_y;
+ //printf("h:%d w:%d ascent: %d\n", bdf_char_height, bdf_char_width, bdf_char_ascent);
+
+ if (bdf_encoding == 'A')
+ bdf_capital_A_height = bdf_char_height;
+ if (bdf_encoding == '1')
+ bdf_capital_1_height = bdf_char_height;
+
+ if (bdf_encoding == 'g')
+ bdf_lower_g_descent = bdf_char_y;
+
+ if (bdf_char_xascent < bdf_capital_A_height)
+ bdf_char_xascent = bdf_capital_A_height;
+ if (bdf_char_xascent < bdf_capital_1_height)
+ bdf_char_xascent = bdf_capital_1_height;
+ if (bdf_encoding == '(')
+ if (bdf_char_xascent < bdf_char_ascent)
+ bdf_char_xascent = bdf_char_ascent;
+ if (bdf_encoding == '[')
+ if (bdf_char_xascent < bdf_char_ascent)
+ bdf_char_xascent = bdf_char_ascent;
+
+ if (bdf_char_xdescent > bdf_lower_g_descent)
+ bdf_char_xdescent = bdf_lower_g_descent;
+ if (bdf_encoding == '(')
+ if (bdf_char_xdescent > bdf_char_y)
+ bdf_char_xdescent = bdf_char_y;
+ if (bdf_encoding == '[')
+ if (bdf_char_xdescent > bdf_char_y)
+ bdf_char_xdescent = bdf_char_y;
+
+ if (bdf_requested_encoding != bdf_encoding)
+ return;
+
+ assert( bdf_line_bm_line == bdf_char_height);
+
+ bdf_ShowGlyph();
+ #ifdef VERBOSE
+ bdf_aa_ClearDoShow();
+ #endif
+
+ bdf_UpdateMax();
+
+ if (bdf_font_format <= 1)
+ len = (bdf_char_width + 7) / 8 * bdf_char_height;
+ else
+ len = (bdf_char_width + 2 * BDF_AA_OFFSET + 3) / 4 * (bdf_char_height + 2 * BDF_AA_OFFSET);
+ if (len > 255) {
+ fprintf(stderr, "Glyph with encoding %d is too large (%d > 255)\n", bdf_encoding, len);
+ exit(1);
+ }
+
+ bdf_glyph_data_len = len;
+
+ /*
+ format 0 and format 2
+ glyph information
+ offset
+ 0 BBX width unsigned
+ 1 BBX height unsigned
+ 2 data size unsigned (BBX width + 7)/8 * BBX height
+ 3 DWIDTH signed
+ 4 BBX xoffset signed
+ 5 BBX yoffset signed
+ */
+
+ if (bdf_font_format == 0) {
+ data_Put(bdf_char_width);
+ data_Put(bdf_char_height);
+ data_Put(bdf_glyph_data_len);
+ data_Put(bdf_delta_x);
+ data_Put(bdf_char_x);
+ data_Put(bdf_char_y);
+ // data_Put(bdf_encoding);
+ bdf_is_encoding_successfully_done = 1;
+ }
+ else if (bdf_font_format == 2) {
+ data_Put(bdf_char_width + 2 * BDF_AA_OFFSET);
+ data_Put(bdf_char_height + 2 * BDF_AA_OFFSET);
+ data_Put(bdf_glyph_data_len);
+ data_Put(bdf_delta_x);
+ data_Put(bdf_char_x - BDF_AA_OFFSET);
+ data_Put(bdf_char_y - BDF_AA_OFFSET);
+ // data_Put(bdf_encoding);
+ bdf_is_encoding_successfully_done = 1;
+ }
+ else {
+ /**
+ * format 1
+ * 0 BBX xoffset signed --> upper 4 Bit
+ * 0 BBX yoffset signed --> lower 4 Bit
+ * 1 BBX width unsigned --> upper 4 Bit
+ * 1 BBX height unsigned --> lower 4 Bit
+ * 2 data size unsigned -(BBX width + 7)/8 * BBX height --> lower 4 Bit
+ * 2 DWIDTH signed --> upper 4 Bit
+ * byte 0 == 255 indicates empty glyph
+ */
+ if (bdf_glyph_data_len < 0 || bdf_glyph_data_len > 15) {
+ fprintf(stderr, "Glyph with encoding %d does not fit for format 1 (data len = %d)\n", bdf_encoding, bdf_glyph_data_len);
+ exit(1);
+ }
+ if (bdf_delta_x < 0 || bdf_delta_x > 15) {
+ fprintf(stderr, "Glyph with encoding %d does not fit for format 1 (DWIDTH = %d)\n", bdf_encoding, bdf_delta_x);
+ exit(1);
+ }
+ if (bdf_char_x < 0 || bdf_char_x > 15) {
+ fprintf(stderr, "Glyph with encoding %d does not fit for format 1 (x-off = %d)\n", bdf_encoding, bdf_char_x);
+ exit(1);
+ }
+ if (bdf_char_y < -2 || bdf_char_y > 13) {
+ fprintf(stderr, "Glyph with encoding %d does not fit for format 1 (y-off = %d [%d..%d])\n", bdf_encoding, bdf_char_y, bdf_char_min_y, bdf_char_max_y);
+ exit(1);
+ }
+ if (bdf_char_width < 0 || bdf_char_width > 15) {
+ fprintf(stderr, "Glyph with encoding %d does not fit for format 1 (width = %d)\n", bdf_encoding, bdf_char_width);
+ exit(1);
+ }
+ if (bdf_char_height < 0 || bdf_char_height > 15) {
+ fprintf(stderr, "Glyph with encoding %d does not fit for format 1 (height = %d)\n", bdf_encoding, bdf_char_height);
+ exit(1);
+ }
+ // data_Put(bdf_encoding);
+ if (((bdf_char_x << 4) | (bdf_char_y + 2)) == 255) {
+ fprintf(stderr, "Glyph with encoding %d does not fit for format 1 (skip mark generated)\n", bdf_encoding);
+ exit(1);
+ }
+ data_Put((bdf_char_x << 4) | (bdf_char_y + 2));
+ data_Put((bdf_char_width << 4) | bdf_char_height );
+ data_Put((bdf_delta_x << 4) | bdf_glyph_data_len );
+ bdf_is_encoding_successfully_done = 1;
+ }
+
+ sprintf(bdf_info + strlen(bdf_info), "/* encoding %d %c, bbx %d %d %d %d asc %d dx %d*/\n",
+ bdf_encoding,
+ bdf_encoding > 32 && bdf_encoding <= 'z' ? bdf_encoding : ' ',
+ bdf_char_width,
+ bdf_char_height,
+ bdf_char_x,
+ bdf_char_y,
+ bdf_char_ascent,
+ bdf_delta_x);
+
+ if (bdf_font_format <= 1) {
+ for (y = 0; y < bdf_char_height; y++)
+ for (x = 0; x < ((bdf_char_width + 7) / 8); x++) {
+ data_Put(bdf_bitmap_line[y][x]);
+ len--;
+ }
+ assert( len == 0 );
+ bdf_is_put_glyph_completed = 1;
+ }
+ else { /* format == 2 */
+ int b, cnt;
+ bdf_aa_Do();
+ for (y = 0; y < bdf_char_height + 2 * BDF_AA_OFFSET; y++) {
+ b = 0;
+ cnt = 0;
+ for (x = 0; x < bdf_char_width + 2 * BDF_AA_OFFSET; x++) {
+ b <<= 2;
+ b |= bdf_aa_bitmap_line[y][x] & 3;
+ cnt++;
+ if (cnt == 4) {
+ data_Put(b);
+ b = 0;
+ cnt = 0;
+ len--;
+ }
+ }
+
+ if (cnt != 0) {
+ b <<= 2 * (4 - cnt);
+ data_Put(b);
+ b = 0;
+ cnt = 0;
+ len--;
+ }
+ }
+ assert( len == 0 );
+ }
+ }
+}
+
+/*=========================================================================*/
+/* Glyph Clipping */
+
+int bdf_IsColZero(int x) {
+ int y, byte, bit;
+ for (y = 0; y < bdf_char_height; y++) {
+ byte = x >> 3;
+ bit = 7 - (x & 7);
+ if ((bdf_bitmap_line[y][byte] & (1 << bit)) != 0)
+ return 0;
+ }
+ return 1;
+}
+
+int bdf_IsRowZero(int y) {
+ int x, byte, bit;
+ for (x = 0; x < bdf_char_width; x++) {
+ byte = x >> 3;
+ bit = 7 - (x & 7);
+ if ((bdf_bitmap_line[y][byte] & (1 << bit)) != 0)
+ return 0;
+ }
+ return 1;
+}
+
+void bdf_DeleteFirstCol(void) {
+ int m = (bdf_char_width + 7) / 8;
+ int x, y;
+ for (y = 0; y < bdf_char_height; y++)
+ for (x = 0; x < m; x++) {
+ bdf_bitmap_line[y][x] <<= 1;
+ bdf_bitmap_line[y][x] |= bdf_bitmap_line[y][x + 1] >> 7;
+ }
+}
+
+void bdf_DeleteFirstRow(void) {
+ int m = (bdf_char_width + 7) / 8;
+ int x, y;
+ for (y = 0; y + 1 < bdf_char_height; y++)
+ for (x = 0; x < m; x++)
+ bdf_bitmap_line[y][x] = bdf_bitmap_line[y + 1][x];
+}
+
+void bdf_ReduceGlyph(void) {
+ while (bdf_char_width > 0) {
+ if (bdf_IsColZero(bdf_char_width - 1) == 0)
+ break;
+ bdf_char_width--;
+ }
+
+ while (bdf_char_height > 0) {
+ if (bdf_IsRowZero(bdf_char_height - 1) == 0)
+ break;
+ bdf_line_bm_line--;
+ bdf_char_height--;
+ bdf_char_y++;
+ }
+
+ while (bdf_IsColZero(0) != 0 && bdf_char_width > 0) {
+ bdf_DeleteFirstCol();
+ bdf_char_x++;
+ bdf_char_width--;
+ }
+
+ while (bdf_char_height > 0) {
+ if (bdf_IsRowZero(0) == 0)
+ break;
+ bdf_DeleteFirstRow();
+ bdf_line_bm_line--;
+ bdf_char_height--;
+ }
+}
+
+/*=========================================================================*/
+/* Anti Aliasing / Graylevel Glyph */
+
+int bdf_GetXYVal(int x, int y) {
+ int byte, bit;
+
+ if (x < 0) return 0;
+ if (y < 0) return 0;
+ if (x >= bdf_char_width) return 0;
+ if (y >= bdf_char_height) return 0;
+
+ byte = x >> 3;
+ bit = 7 - (x & 7);
+ if ((bdf_bitmap_line[y][byte] & (1 << bit)) != 0) return 1;
+ return 0;
+}
+
+void bdf_aa_Clear(void) {
+ int x, y;
+ for (y = 0; y < BDF_MAX_HEIGHT + 2 * BDF_AA_OFFSET; y++)
+ for (x = 0; x < (20 + 2 * BDF_AA_OFFSET) * 8; x++)
+ bdf_aa_bitmap_line[y][x] = 0;
+}
+
+void bdf_aa_SetXYVal(int x, int y, int val) {
+ bdf_aa_bitmap_line[y][x] = val;
+}
+
+int bdf_aa_matrix[9] = {
+ 1, 3, 1,
+ 3, 4, 3,
+ 1, 3, 1
+};
+int bdf_aa_sum = 20;
+int bdf_aa_gray_levels = 4;
+
+void bdf_aa_Do(void) {
+ int x, y, val, sx, sy, sum, gray;
+ bdf_aa_Clear();
+ for (y = 0; y < bdf_char_height + 2 * BDF_AA_OFFSET; y++)
+ for (x = 0; x < bdf_char_width + 2 * BDF_AA_OFFSET; x++) {
+ if (bdf_GetXYVal(x - BDF_AA_OFFSET, y - BDF_AA_OFFSET) == 0) {
+ sum = 0;
+ for (sy = -BDF_AA_OFFSET; sy <= BDF_AA_OFFSET; sy++)
+ for (sx = -BDF_AA_OFFSET; sx <= BDF_AA_OFFSET; sx++) {
+ val = bdf_GetXYVal(x + sx - BDF_AA_OFFSET, y + sy - BDF_AA_OFFSET);
+ val *= bdf_aa_matrix[(sy + BDF_AA_OFFSET) * (2 * BDF_AA_OFFSET + 1) + sx + BDF_AA_OFFSET];
+ sum += val;
+ }
+ if (sum <= 5)
+ gray = 0;
+ else
+ gray = (sum * (bdf_aa_gray_levels - 1) + (bdf_aa_sum / 2)) / bdf_aa_sum;
+ if (gray >= bdf_aa_gray_levels)
+ gray = bdf_aa_gray_levels - 1;
+ }
+ else {
+ gray = bdf_aa_gray_levels - 1;
+ }
+ bdf_aa_SetXYVal(x, y, gray);
+ }
+}
+
+void bdf_aa_Show(void) {
+ int x, y;
+ if (bdf_font_format == 2) {
+ for (y = 0; y < bdf_char_height + 2 * BDF_AA_OFFSET; y++) {
+ for (x = 0; x < bdf_char_width + 2 * BDF_AA_OFFSET; x++)
+ switch (bdf_aa_bitmap_line[y][x]) {
+ case 0: printf("."); break;
+ case 1: printf("-"); break;
+ case 2: printf("+"); break;
+ case 3: printf("#"); break;
+ }
+ printf("\n");
+ }
+ }
+}
+
+void bdf_aa_ClearDoShow(void) {
+ bdf_aa_Do();
+ bdf_aa_Show();
+}
+
+/*=========================================================================*/
+/* Parser */
+
+void bdf_ReadLine(const char *s) {
+ /*
+ if ( bdf_line_state == BDF_LINE_STATE_BITMAP && bdf_requested_encoding != bdf_encoding && *s != 'E' )
+ return;
+ */
+
+ if (p_first_char(s) == 0) return;
+ if (p_skip_space() == 0) return;
+
+ if (bdf_line_state == BDF_LINE_STATE_KEYWORDS) {
+ p_get_identifier();
+ if (strcmp(p_buf, "COPYRIGHT") == 0) {
+ p_get_any();
+ strcpy(bdf_copyright, p_buf);
+ }
+ else if (strcmp(p_buf, "FONT") == 0) {
+ /* p_get_any(); */
+ p_get_identifier_with_blank();
+ strcpy(bdf_font, p_buf);
+ }
+ else if (strcmp(p_buf, "SIZE") == 0) {
+ bdf_font_size = p_get_val();
+ }
+ else if (strcmp(p_buf, "ENCODING") == 0) {
+ bdf_encoding = map_UnicodeToU8G(p_get_val());
+ bdf_StoreFilePos(bdf_encoding, bdf_last_line_start_pos);
+ }
+ else if (strcmp(p_buf, "DWIDTH") == 0) {
+ bdf_delta_x = p_get_val();
+ bdf_delta_y = p_get_val();
+ }
+ else if (strcmp(p_buf, "FONTBOUNDINGBOX") == 0) {
+ bdf_font_width = p_get_val();
+ bdf_font_height = p_get_val();
+ bdf_font_x = p_get_val();
+ bdf_font_y = p_get_val();
+ }
+ else if (strcmp(p_buf, "BBX") == 0) {
+ bdf_char_width = p_get_val();
+ bdf_char_height = p_get_val();
+ bdf_char_x = p_get_val();
+ bdf_char_y = p_get_val();
+ bdf_char_ascent = bdf_char_height + bdf_char_y;
+ // printf("h:%d w:%d ascent: %d\n", bdf_char_height, bdf_char_width, bdf_char_ascent);
+ }
+ else if (strcmp(p_buf, "CHARS") == 0) {
+ if (bdf_delta_x < 0)
+ bdf_delta_x = 0;
+ if (bdf_delta_x_default < 0)
+ bdf_delta_x_default = bdf_delta_x;
+ }
+ else if (strcmp(p_buf, "STARTCHAR") == 0) {
+ if (bdf_delta_x_default < 0)
+ bdf_delta_x_default = 0;
+ bdf_delta_x = bdf_delta_x_default;
+ }
+ else if (strcmp(p_buf, "BITMAP") == 0) {
+ bdf_line_state = BDF_LINE_STATE_BITMAP;
+ bdf_line_bm_line = 0;
+ }
+ }
+ else if (bdf_line_state == BDF_LINE_STATE_BITMAP) {
+ if (strncmp(s, "ENDCHAR", 7) == 0) {
+ bdf_ReduceGlyph();
+ bdf_PutGlyph();
+ bdf_line_state = BDF_LINE_STATE_KEYWORDS;
+ bdf_line_bm_line = 0;
+ }
+ else if (bdf_requested_encoding == bdf_encoding) {
+ int i = 0;
+ for (;;) {
+ if (p_current_char < '0') break;
+ bdf_bitmap_line[bdf_line_bm_line][i] = p_get_hex_byte();
+ i++;
+ }
+ bdf_line_bm_line++;
+ assert(bdf_line_bm_line < BDF_MAX_HEIGHT);
+ }
+ }
+}
+
+int bdf_ReadFP(FILE *fp) {
+ static char bdf_line[BDF_LINE_MAX];
+ bdf_is_put_glyph_completed = 0;
+ for (;;) {
+ bdf_last_line_start_pos = ftell(fp);
+ if (fgets(bdf_line, BDF_LINE_MAX - 1, fp) == NULL)
+ break;
+ bdf_ReadLine(bdf_line);
+ if (bdf_is_put_glyph_completed != 0)
+ break;
+ }
+ return 1;
+}
+
+int bdf_ReadFile(const char *filename, int encoding) {
+ int r;
+ FILE *fp;
+ fp = fopen(filename, "rb");
+ if (fp != NULL) {
+ bdf_SetFilePos(fp, encoding);
+ r = bdf_ReadFP(fp);
+ fclose(fp);
+ return r;
+ }
+ return 0; /* open error */
+}
+
+void bdf_GenerateFontData(const char *filename, int begin, int end) {
+ bdf_state = BDF_STATE_FONT_DATA;
+ bdf_ReadFile(filename, -1);
+ /**
+ * font information
+ *
+ * offset
+ * 0 font format
+ * 1 FONTBOUNDINGBOX width unsigned
+ * 2 FONTBOUNDINGBOX height unsigned
+ * 3 FONTBOUNDINGBOX x-offset signed
+ * 4 FONTBOUNDINGBOX y-offset signed
+ * 5 Capital A Height unsigned
+ * 6 position of encoding 65 'A' high byte first
+ * 8 position of encoding 97 'a' high byte first
+ */
+ data_Put(bdf_font_format);
+ data_Put(bdf_font_width);
+ data_Put(bdf_font_height);
+ data_Put(bdf_font_x);
+ data_Put(bdf_font_y);
+ data_Put(bdf_capital_A_height > 0 ? bdf_capital_A_height : bdf_capital_1_height);
+ data_Put(0);
+ data_Put(0);
+ data_Put(0);
+ data_Put(0);
+ data_Put(begin);
+ data_Put(end); /* will be overwritten later */
+ data_Put(0); /* lower g descent */
+ data_Put(0); /* max ascent */
+ data_Put(0); /* min y = descent */
+ data_Put(0); /* x ascent */
+ data_Put(0); /* x descent */
+}
+
+void bdf_GenerateGlyph(const char *filename, int encoding) {
+ bdf_ClearGlyphBuffer();
+ bdf_requested_encoding = encoding;
+ bdf_state = BDF_STATE_ENCODING;
+ bdf_ReadFile(filename, encoding);
+}
+
+void bdf_Generate(const char *filename, int begin, int end) {
+ int i;
+ int last_valid_encoding;
+
+ bdf_encoding_65_pos = 0;
+ bdf_encoding_97_pos = 0;
+
+ bdf_InitFilePos();
+ bdf_ResetMax();
+ bdf_info[0] = '\0';
+ bdf_font[0] = '\0';
+ bdf_copyright[0] = '\0';
+
+ bdf_GenerateFontData(filename, begin, end);
+ for (i = begin; i <= end; i++) {
+
+ if (i == 65) bdf_encoding_65_pos = data_pos;
+ if (i == 97) bdf_encoding_97_pos = data_pos;
+
+ bdf_is_encoding_successfully_done = 0;
+ if (bdf_IsEncodingAvailable(i))
+ bdf_GenerateGlyph(filename, i);
+ if (bdf_is_encoding_successfully_done == 0)
+ data_Put(255); /* no char encoding */
+ if (bdf_is_encoding_successfully_done != 0)
+ last_valid_encoding = i;
+ }
+ /* data_Put(255); obsolete, not required any more for format 0 */ /* encoding 255, end of font data (format 0) */
+
+ data_buf[5] = bdf_capital_A_height > 0 ? bdf_capital_A_height : bdf_capital_1_height;
+
+ data_buf[6] = (bdf_encoding_65_pos >> 8);
+ data_buf[7] = (bdf_encoding_65_pos & 255);
+ data_buf[8] = (bdf_encoding_97_pos >> 8);
+ data_buf[9] = (bdf_encoding_97_pos & 255);
+
+ data_buf[12] = bdf_lower_g_descent;
+ data_buf[13] = bdf_char_max_ascent;
+ data_buf[14] = bdf_char_min_y;
+ data_buf[15] = bdf_char_xascent;
+ data_buf[16] = bdf_char_xdescent;
+
+ if (0) data_buf[11] = last_valid_encoding;
+
+}
+
+void bdf_WriteC(const char *outname, const char *fontname) {
+ int capital_ascent;
+ FILE *out_fp;
+ out_fp = fopen(outname, "wb");
+ assert( out_fp != NULL );
+
+ capital_ascent = bdf_capital_A_height > 0 ? bdf_capital_A_height : bdf_capital_1_height;
+
+ fprintf(out_fp, "/*\n");
+ fprintf(out_fp, " Fontname: %s\n", bdf_font);
+ fprintf(out_fp, " Copyright: %s\n", bdf_copyright);
+ fprintf(out_fp, " Capital A Height: %d, '1' Height: %d\n", bdf_capital_A_height, bdf_capital_1_height);
+ fprintf(out_fp, " Calculated Max Values w=%2d h=%2d x=%2d y=%2d dx=%2d dy=%2d ascent=%2d len=%2d\n",
+ bdf_char_max_width, bdf_char_max_height, bdf_char_max_x, bdf_char_max_y, bdf_delta_max_x, bdf_delta_max_y,
+ bdf_char_max_ascent, bdf_glyph_data_max_len);
+ fprintf(out_fp, " Font Bounding box w=%2d h=%2d x=%2d y=%2d\n",
+ bdf_font_width, bdf_font_height, bdf_font_x, bdf_font_y);
+ fprintf(out_fp, " Calculated Min Values x=%2d y=%2d dx=%2d dy=%2d\n",
+ bdf_char_min_x, bdf_char_min_y, bdf_delta_min_x, bdf_delta_min_y);
+
+ fprintf(out_fp, " Pure Font ascent =%2d descent=%2d\n", capital_ascent, bdf_lower_g_descent);
+ fprintf(out_fp, " X Font ascent =%2d descent=%2d\n", bdf_char_xascent, bdf_char_xdescent);
+ fprintf(out_fp, " Max Font ascent =%2d descent=%2d\n", bdf_char_max_ascent, bdf_char_min_y);
+
+ fprintf(out_fp, "*/\n");
+ fprintf(out_fp, "const u8g_fntpgm_uint8_t %s[%d] U8G_FONT_SECTION(\"%s\") = {\n", fontname, data_pos, fontname);
+ fprintf(out_fp, " ");
+ data_Write(out_fp, " ");
+ fprintf(out_fp, "};\n");
+ #ifndef BDF2U8G_COMPACT_OUTPUT
+ fprintf(out_fp, "%s\n", bdf_info);
+ #endif
+
+ fclose(out_fp);
+}
+
+int ga_argc;
+char **ga_argv;
+
+void ga_remove_arg(void) {
+ if (ga_argc == 0) return;
+ ga_argc--;
+ ga_argv++;
+}
+
+int ga_is_arg(char opt) {
+ if (ga_argc == 0) return 0;
+ if (ga_argv[0] == NULL) return 0;
+ if (ga_argv[0][0] != '-') return 0;
+ if (ga_argv[0][1] != opt) return 0;
+ ga_remove_arg();
+ return 1;
+}
+
+int main(int argc, char **argv) {
+ int lower_page = 0;
+ int upper_page = 1;
+ int mapping_shift = 0;
+ int upper_mapping_shift = 0;
+ int begin = 32;
+ int end = 255;
+
+ if (argc < 4) {
+ printf("bdf to u8glib font format converter v" BDF2U8G_VERSION "\n");
+ printf("%s [-l page] [-u page] [-s shift] [-S upper-shift] [-b begin] [-e end] [-f format] fontfile fontname outputfile\n", argv[0]);
+ return 1;
+ }
+
+ ga_argc = argc;
+ ga_argv = argv;
+ ga_remove_arg(); /* remove program name */
+
+ for (;;) {
+ if (ga_is_arg('l')) {
+ lower_page = atoi(ga_argv[0]);
+ ga_remove_arg();
+ }
+ else if (ga_is_arg('u')) {
+ upper_page = atoi(ga_argv[0]);
+ ga_remove_arg();
+ }
+ else if (ga_is_arg('s')) {
+ mapping_shift = atoi(ga_argv[0]);
+ ga_remove_arg();
+ }
+ else if (ga_is_arg('S')) {
+ upper_mapping_shift = atoi(ga_argv[0]);
+ ga_remove_arg();
+ }
+ else if (ga_is_arg('b')) {
+ begin = atoi(ga_argv[0]);
+ ga_remove_arg();
+ }
+ else if (ga_is_arg('e')) {
+ end = atoi(ga_argv[0]);
+ ga_remove_arg();
+ }
+ else if (ga_is_arg('f')) {
+ bdf_font_format = atoi(ga_argv[0]);
+ ga_remove_arg();
+ }
+ else {
+ break;
+ }
+ }
+
+ printf("encoding range %d..%d\n", begin, end);
+
+ data_Init();
+ map_Init();
+ map_UpperLowerPage(lower_page, upper_page, mapping_shift, upper_mapping_shift);
+
+ /*
+ puts(bdf_font);
+ puts(bdf_copyright);
+ if (ga_argc < 3) {
+ printf("from page %d to page %d\n", lower_page, upper_page);
+ return 1;
+ }
+ */
+
+ bdf_Generate(ga_argv[0], begin, end);
+ bdf_WriteC(ga_argv[2], ga_argv[1]);
+
+ printf("input file '%s'\n", ga_argv[0]);
+ printf("u8g font name '%s'\n", ga_argv[1]);
+ printf("output file '%s'\n", ga_argv[2]);
+
+ return 0;
+}
diff --git a/buildroot/share/fonts/genallfont.sh b/buildroot/share/fonts/genallfont.sh
index ebb99b273f..e04b11a799 100755
--- a/buildroot/share/fonts/genallfont.sh
+++ b/buildroot/share/fonts/genallfont.sh
@@ -24,19 +24,9 @@ my_getpath() {
echo -n "${DN}"
[[ -z "$FN" ]] || echo -n "/${FN}"
}
-#DN_EXEC=`echo "$0" | ${EXEC_AWK} -F/ '{b=$1; for (i=2; i < NF; i ++) {b=b "/" $(i)}; print b}'`
+
DN_EXEC=$(dirname $(my_getpath "$0") )
-EXEC_WXGGEN="${DN_EXEC}/uxggenpages.sh"
-
-#
-# Locate the bdf2u8g command
-#
-EXEC_BDF2U8G=`which bdf2u8g`
-[ -x "${EXEC_BDF2U8G}" ] || EXEC_BDF2U8G="${DN_EXEC}/bdf2u8g"
-[ -x "${EXEC_BDF2U8G}" ] || EXEC_BDF2U8G="${PWD}/bdf2u8g"
-[ -x "${EXEC_BDF2U8G}" ] || { EOL=$'\n' ; echo "ERR: Can't find bdf2u8g!${EOL}See uxggenpages.md for bdf2u8g build instructions." >&2 ; exit 1; }
-
#
# Get language arguments
#
@@ -55,9 +45,19 @@ OLDWD=`pwd`
[[ -f "Configuration.h" ]] || { echo -n "cd to the 'Marlin' folder to run " ; basename $0 ; exit 1; }
#
-# Compile the 'genpages' command in-place
+# Compile the 'genpages.exe' and 'bdf2u8g.exe' commands in-place
#
-(cd ${DN_EXEC}; cc -o genpages genpages.c getline.c)
+if [[ ! -x "${DN_EXEC}/genpages/genpages.exe" ]]; then
+ echo "Building genpages.exe..."
+ ( cd ${DN_EXEC}/genpages ; cc -o genpages.exe genpages.c getline.c )
+ [[ -x "${DN_EXEC}/genpages/genpages.exe" ]] || { echo "Build of genpages.exe failed" ; exit 1 ; }
+fi
+
+if [[ ! -x "${DN_EXEC}/bdf2u8g/bdf2u8g.exe" ]]; then
+ echo "Building bdf2u8g.exe..."
+ ( cd ${DN_EXEC}/bdf2u8g ; make )
+ [[ -x "${DN_EXEC}/bdf2u8g/bdf2u8g.exe" ]] || { echo "Build of bdf2u8g.exe failed" ; exit 1 ; }
+fi
#
# By default loop through all languages
@@ -74,11 +74,11 @@ for LANG in ${LANG_ARG:=$LANGS_DEFAULT} ; do
ko_* ) FONTFILE="${DN_EXEC}/NanumGothic.bdf" ;;
* ) FONTFILE="${DN_EXEC}/marlin-6x12-3.bdf" ;;
esac
- DN_WORK=`mktemp -d`
+ DN_WORK=$(mktemp -d)
cp Configuration.h ${DN_WORK}/
cp src/lcd/language/language_${LANG}.h ${DN_WORK}/
cd "${DN_WORK}"
- ${EXEC_WXGGEN} "${FONTFILE}"
+ ${DN_EXEC}/uxggenpages.sh "${FONTFILE}" $LANG
sed -i fontutf8-data.h -e 's|fonts//|fonts/|g' -e 's|fonts//|fonts/|g' -e 's|[/0-9a-zA-Z_\-]*buildroot/share/fonts|buildroot/share/fonts|' 2>/dev/null
cd - >/dev/null
mv ${DN_WORK}/fontutf8-data.h src/lcd/dogm/fontdata/langdata_${LANG}.h
@@ -89,9 +89,10 @@ done
# Generate default ASCII font (char range 0-255):
# Marlin/src/lcd/dogm/fontdata/fontdata_ISO10646_1.h
#
+EXEC_BDF2U8G="${DN_EXEC}/bdf2u8g/bdf2u8g.exe"
#if [ "${MARLIN_LANGS}" == "${LANGS_DEFAULT}" ]; then
if [ 1 = 1 ]; then
- DN_WORK=`mktemp -d`
+ DN_WORK=$(mktemp -d)
cd ${DN_WORK}
${EXEC_BDF2U8G} -b 1 -e 127 ${FN_FONT} ISO10646_1_5x7 tmp1.h >/dev/null
${EXEC_BDF2U8G} -b 1 -e 255 ${FN_FONT} ISO10646_1_5x7 tmp2.h >/dev/null
@@ -103,7 +104,7 @@ if [ 1 = 1 ]; then
cat <src/lcd/dogm/fontdata/fontdata_ISO10646_1.h
/**
* Marlin 3D Printer Firmware
- * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ * Copyright (c) 2023 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
@@ -139,6 +140,4 @@ EOF
fi
-(cd ${DN_EXEC}; rm genpages)
-
cd "$OLDWD"
diff --git a/buildroot/share/fonts/genpages.c b/buildroot/share/fonts/genpages/genpages.c
similarity index 99%
rename from buildroot/share/fonts/genpages.c
rename to buildroot/share/fonts/genpages/genpages.c
index 8009e553fa..dea5b05c5c 100644
--- a/buildroot/share/fonts/genpages.c
+++ b/buildroot/share/fonts/genpages/genpages.c
@@ -66,7 +66,7 @@ wchar_t get_val_utf82uni(uint8_t *pstart) {
*/
uint8_t* get_utf8_value(uint8_t *pstart, wchar_t *pval) {
uint32_t val = 0;
- const uint8_t *p = pstart;
+ uint8_t *p = pstart;
/*size_t maxlen = strlen(pstart);*/
assert(NULL != pstart);
diff --git a/buildroot/share/fonts/getline.c b/buildroot/share/fonts/genpages/getline.c
similarity index 100%
rename from buildroot/share/fonts/getline.c
rename to buildroot/share/fonts/genpages/getline.c
diff --git a/buildroot/share/fonts/getline.h b/buildroot/share/fonts/genpages/getline.h
similarity index 100%
rename from buildroot/share/fonts/getline.h
rename to buildroot/share/fonts/genpages/getline.h
diff --git a/buildroot/share/fonts/get-bdf2u8g.sh b/buildroot/share/fonts/get-bdf2u8g.sh
deleted file mode 100755
index 5851bf93e3..0000000000
--- a/buildroot/share/fonts/get-bdf2u8g.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env bash
-
-#####################################################################
-# get-bdf2u8g.sh for Marlin
-#
-# This script downloads, patches, and builds bdf2u8g
-# License: CC-SA
-#
-# Execute from within buildroot/share/fonts
-#
-#####################################################################
-
-HERE=$(pwd)
-
-for CMD in curl unzip patch make; do
- which $CMD >/dev/null || { echo "'$CMD' is required for this script." ; exit 1 ; }
-done
-
-[[ $HERE =~ 'buildroot/share/fonts'$ ]] || { echo "Change to buildroot/share/fonts to run $(basename $0)" ; exit 1; }
-
-# Download u8glib
-curl -LJO https://github.com/olikraus/u8glib/archive/master.zip
-unzip u8glib-master.zip >/dev/null 2>&1
-
-# Patch and build bdf2u8g
-cd u8glib-master/tools/font/bdf2u8g
-patch -p0 <../../../../u8glib-bdf2u8g.patch bdf2u8g.c >/dev/null 2>&1
-make >/dev/null 2>&1
-mv bdf2u8g ../../../../
-
-# Clean up
-cd -
-rm -rf u8glib-master*
-
-cd "$HERE"
diff --git a/buildroot/share/fonts/u8glib-bdf2u8g.patch b/buildroot/share/fonts/u8glib-bdf2u8g.patch
deleted file mode 100644
index 1201e99800..0000000000
--- a/buildroot/share/fonts/u8glib-bdf2u8g.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-178c178
-< fprintf(out_fp, "%d", data_buf[i]);
----
-> fprintf(out_fp, "0x%02x", data_buf[i]);
-180c180
-< fprintf(out_fp, "%3d", data_buf[i]);
----
-> fprintf(out_fp, "0x%02x", data_buf[i]);
-487c487,488
-< int bdf_delta_x; /* DWIDTH arg 1 */
----
-> int bdf_delta_x_default = -1;
-> int bdf_delta_x = -1; /* DWIDTH arg 1 */
-1097a1099,1114
-> else if ( strcmp(p_buf, "CHARS") == 0 )
-> {
-> if (bdf_delta_x < 0) {
-> bdf_delta_x = 0;
-> }
-> if (bdf_delta_x_default < 0) {
-> bdf_delta_x_default = bdf_delta_x;
-> }
-> }
-> else if ( strcmp(p_buf, "STARTCHAR") == 0 )
-> {
-> if (bdf_delta_x_default < 0) {
-> bdf_delta_x_default = 0;
-> }
-> bdf_delta_x = bdf_delta_x_default;
-> }
-1293d1309
-< fprintf(out_fp, "#include \"u8g.h\"\n");
diff --git a/buildroot/share/fonts/uxggenpages.sh b/buildroot/share/fonts/uxggenpages.sh
index 047d3ae661..2d39297b8f 100755
--- a/buildroot/share/fonts/uxggenpages.sh
+++ b/buildroot/share/fonts/uxggenpages.sh
@@ -1,12 +1,12 @@
#!/usr/bin/env bash
#####################################################################
-# genpages.sh for u8g
+# uxggenpages.sh for u8g
#
# This script will generate u8g c files for specified fonts
#
# Copyright 2015-2018 Yunhui Fu
-# License: GPL/BSD
+# License: BSD
#####################################################################
my_getpath() {
@@ -31,16 +31,11 @@ DN_EXEC=$(dirname $(my_getpath "$0") )
#####################################################################
-EXEC_GENPAGES=${DN_EXEC}/genpages
-[ -x "${EXEC_GENPAGES}" ] || EXEC_GENPAGES="$(my_getpath ${DN_EXEC}/../../../genpages)"
-[ -x "${EXEC_GENPAGES}" ] || EXEC_GENPAGES=$(which genpages)
+EXEC_GENPAGES=${DN_EXEC}/genpages/genpages.exe
[ -x "${EXEC_GENPAGES}" ] || { echo "Error: genpages not found!" ; exit 1; }
-#echo "EXEC_GENPAGES=${EXEC_GENPAGES}"
-EXEC_BDF2U8G=${DN_EXEC}/bdf2u8g
-[ -x "${EXEC_BDF2U8G}" ] || EXEC_BDF2U8G="${DN_EXEC}/../../../bdf2u8g"
-[ -x "${EXEC_BDF2U8G}" ] || EXEC_BDF2U8G=$(which bdf2u8g)
-[ -x "${EXEC_BDF2U8G}" ] || { echo "Error: bdf2u8g not found!" ; echo "Please compile u8glib/tools/font/bdf2u8g/bdf2u8g and link to it from here!"; exit 1; }
+EXEC_BDF2U8G=${DN_EXEC}/bdf2u8g/bdf2u8g.exe
+[ -x "${EXEC_BDF2U8G}" ] || { echo "Error: bdf2u8g not found!" ; exit 1; }
DN_CUR=$(pwd)
DN_DATA=$(pwd)/datatmp
@@ -56,6 +51,7 @@ FN_FONT_BASE="marlin-6x12-3"
#FN_FONT_BASE=wenquanyi_9pt
FN_FONT="${1:-}"
+LANG="$2"
DN_FONT0=`dirname ${FN_FONT}`
DN_FONT="$(my_getpath ${DN_FONT0})"
FN_FONT="$(my_getpath "${DN_FONT}")/"`basename ${FN_FONT}`
@@ -151,14 +147,14 @@ grep -Hrn _UxGT . | grep '"' \
${EXEC_BDF2U8G} -u ${PAGE} -b ${BEGIN} -e ${END} ${FN_FONT} fontpage_${PAGE}_${BEGIN}_${END} ${DN_DATA}/fontpage_${PAGE}_${BEGIN}_${END}.h > /dev/null 2>&1 ;
fi ; \
grep -A 10000000000 u8g_fntpgm_uint8_t ${DN_DATA}/fontpage_${PAGE}_${BEGIN}_${END}.h >> tmpa ; \
- echo " FONTDATA_ITEM(${PAGE}, ${BEGIN}, ${END}, fontpage_${PAGE}_${BEGIN}_${END}), // '${UTF8BEGIN}' -- '${UTF8END}'" >> tmpb ;\
+ echo " FONTDATA_ITEM(${PAGE}, ${BEGIN}, ${END}, fontpage_${PAGE}_${BEGIN}_${END}), // '${UTF8BEGIN}' -- '${UTF8END}'" >> tmpb ;\
done
TMPA=$(cat tmpa)
TMPB=$(cat tmpb)
EOL=$'\n'
-[[ ! "$TMPA" == "" ]] && TMPA="$EOL$TMPA$EOL"
+[[ ! "$TMPA" == "" ]] && TMPA="$TMPA$EOL$EOL"
[[ ! "$TMPB" == "" ]] && TMPB="$EOL$TMPB$EOL"
rm -f tmpa tmpb "proc.awk"
@@ -169,8 +165,9 @@ cat <fontutf8-data.h
* Contents will be REPLACED by future processing!
* Use genallfont.sh to generate font data for updated languages.
*/
-#include
-$TMPA
-#define FONTDATA_ITEM(page, begin, end, data) { page, begin, end, COUNT(data), data }
-static const uxg_fontinfo_t g_fontinfo[] PROGMEM = {$TMPB};
+#pragma once
+
+#include "langdata.h"
+
+${TMPA}static const uxg_fontinfo_t g_fontinfo_${LANG}[] PROGMEM = {${TMPB}};
EOF
From 31f1a0207fbbb693d22d17076c2e6e755b49fdde Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Wed, 1 Mar 2023 20:06:47 -0600
Subject: [PATCH 69/97] =?UTF-8?q?=F0=9F=8C=90=20Regenerate=20language=20da?=
=?UTF-8?q?ta?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/lcd/dogm/fontdata/langdata_hu.h | 8 +-------
Marlin/src/lcd/dogm/fontdata/langdata_pl.h | 4 ++++
Marlin/src/lcd/dogm/fontdata/langdata_sv.h | 10 ++++++++++
Marlin/src/lcd/dogm/fontdata/langdata_zh_CN.h | 19 -------------------
Marlin/src/lcd/dogm/fontdata/langdata_zh_TW.h | 10 ++++------
5 files changed, 19 insertions(+), 32 deletions(-)
create mode 100644 Marlin/src/lcd/dogm/fontdata/langdata_sv.h
diff --git a/Marlin/src/lcd/dogm/fontdata/langdata_hu.h b/Marlin/src/lcd/dogm/fontdata/langdata_hu.h
index 450662a8c9..c0175be874 100644
--- a/Marlin/src/lcd/dogm/fontdata/langdata_hu.h
+++ b/Marlin/src/lcd/dogm/fontdata/langdata_hu.h
@@ -7,10 +7,4 @@
#include "langdata.h"
-const u8g_fntpgm_uint8_t fontpage_2_241_241[31] U8G_FONT_SECTION("fontpage_2_241_241") = {
- 0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xF1,0xF1,0x00,0x08,0x00,0x00,
- 0x00,0x05,0x08,0x08,0x06,0x00,0x00,0x48,0x90,0x00,0x88,0x88,0x88,0x88,0x70};
-
-static const uxg_fontinfo_t g_fontinfo_hu[] PROGMEM = {
- FONTDATA_ITEM(2, 241, 241, fontpage_2_241_241), // 'ű' -- 'ű'
-};
+static const uxg_fontinfo_t g_fontinfo_hu[] PROGMEM = {};
diff --git a/Marlin/src/lcd/dogm/fontdata/langdata_pl.h b/Marlin/src/lcd/dogm/fontdata/langdata_pl.h
index e89a6c159a..e9365a69c2 100644
--- a/Marlin/src/lcd/dogm/fontdata/langdata_pl.h
+++ b/Marlin/src/lcd/dogm/fontdata/langdata_pl.h
@@ -27,6 +27,9 @@ const u8g_fntpgm_uint8_t fontpage_2_218_219[47] U8G_FONT_SECTION("fontpage_2_218
0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xDA,0xDB,0x00,0x0A,0x00,0x00,
0x00,0x05,0x0A,0x0A,0x06,0x00,0x00,0x10,0x20,0x00,0x70,0x88,0x80,0x70,0x08,0x88,
0x70,0x05,0x08,0x08,0x06,0x00,0x00,0x10,0x20,0x00,0x78,0x80,0x70,0x08,0xF0};
+const u8g_fntpgm_uint8_t fontpage_2_250_250[31] U8G_FONT_SECTION("fontpage_2_250_250") = {
+ 0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xFA,0xFA,0x00,0x08,0x00,0x00,
+ 0x00,0x05,0x08,0x08,0x06,0x00,0x00,0x10,0x20,0x00,0xF8,0x10,0x20,0x40,0xF8};
const u8g_fntpgm_uint8_t fontpage_2_252_252[30] U8G_FONT_SECTION("fontpage_2_252_252") = {
0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0x00,0x07,0x00,0x00,
0x00,0x05,0x07,0x07,0x06,0x00,0x00,0x20,0x00,0xF8,0x10,0x20,0x40,0xF8};
@@ -37,5 +40,6 @@ static const uxg_fontinfo_t g_fontinfo_pl[] PROGMEM = {
FONTDATA_ITEM(2, 153, 153, fontpage_2_153_153), // 'ę' -- 'ę'
FONTDATA_ITEM(2, 193, 196, fontpage_2_193_196), // 'Ł' -- 'ń'
FONTDATA_ITEM(2, 218, 219, fontpage_2_218_219), // 'Ś' -- 'ś'
+ FONTDATA_ITEM(2, 250, 250, fontpage_2_250_250), // 'ź' -- 'ź'
FONTDATA_ITEM(2, 252, 252, fontpage_2_252_252), // 'ż' -- 'ż'
};
diff --git a/Marlin/src/lcd/dogm/fontdata/langdata_sv.h b/Marlin/src/lcd/dogm/fontdata/langdata_sv.h
new file mode 100644
index 0000000000..cf6328766e
--- /dev/null
+++ b/Marlin/src/lcd/dogm/fontdata/langdata_sv.h
@@ -0,0 +1,10 @@
+/**
+ * Generated automatically by buildroot/share/fonts/uxggenpages.sh
+ * Contents will be REPLACED by future processing!
+ * Use genallfont.sh to generate font data for updated languages.
+ */
+#pragma once
+
+#include "langdata.h"
+
+static const uxg_fontinfo_t g_fontinfo_sv[] PROGMEM = {};
diff --git a/Marlin/src/lcd/dogm/fontdata/langdata_zh_CN.h b/Marlin/src/lcd/dogm/fontdata/langdata_zh_CN.h
index 664fa5f4bf..60316a1479 100644
--- a/Marlin/src/lcd/dogm/fontdata/langdata_zh_CN.h
+++ b/Marlin/src/lcd/dogm/fontdata/langdata_zh_CN.h
@@ -7,9 +7,6 @@
#include "langdata.h"
-const u8g_fntpgm_uint8_t fontpage_64_157_157[26] U8G_FONT_SECTION("fontpage_64_157_157") = {
- 0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x9D,0x9D,0x00,0x07,0x00,0x00,
- 0x00,0x05,0x03,0x03,0x06,0x00,0x04,0xD8,0x48,0x90};
const u8g_fntpgm_uint8_t fontpage_69_191_191[28] U8G_FONT_SECTION("fontpage_69_191_191") = {
0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xBF,0xBF,0x00,0x05,0x00,0x00,
0x00,0x05,0x05,0x05,0x06,0x00,0x00,0x08,0x18,0x28,0x48,0xF8};
@@ -382,10 +379,6 @@ const u8g_fntpgm_uint8_t fontpage_172_232_232[45] U8G_FONT_SECTION("fontpage_172
0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xE8,0xE8,0x00,0x0A,0xFF,0x00,
0x00,0x0B,0x0B,0x16,0x0C,0x00,0xFF,0x7B,0xC0,0x4A,0x40,0x4A,0x40,0x7B,0xC0,0x04,
0x80,0xFF,0xE0,0x11,0x00,0xFB,0xE0,0x4A,0x40,0x4A,0x40,0x7B,0xC0};
-const u8g_fntpgm_uint8_t fontpage_172_244_244[45] U8G_FONT_SECTION("fontpage_172_244_244") = {
- 0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xF4,0xF4,0x00,0x0A,0xFF,0x00,
- 0x00,0x0B,0x0B,0x16,0x0C,0x00,0xFF,0x01,0x00,0xEF,0xE0,0xA5,0x40,0xAF,0xE0,0xA4,
- 0x40,0xA7,0xC0,0xE4,0x40,0x07,0xC0,0x04,0x40,0x07,0xC0,0x0C,0x60};
const u8g_fntpgm_uint8_t fontpage_173_222_222[45] U8G_FONT_SECTION("fontpage_173_222_222") = {
0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xDE,0xDE,0x00,0x0A,0xFF,0x00,
0x00,0x0A,0x0B,0x16,0x0C,0x01,0xFF,0xFF,0xC0,0x80,0x40,0x80,0x40,0x9E,0x40,0x92,
@@ -744,10 +737,6 @@ const u8g_fntpgm_uint8_t fontpage_202_244_244[45] U8G_FONT_SECTION("fontpage_202
0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xF4,0xF4,0x00,0x0A,0xFF,0x00,
0x00,0x0B,0x0B,0x16,0x0C,0x00,0xFF,0x11,0x00,0xFF,0xE0,0x55,0x40,0x7C,0x80,0x39,
0x40,0x56,0x20,0x7F,0xC0,0x04,0x00,0x27,0x80,0x24,0x00,0xFF,0xE0};
-const u8g_fntpgm_uint8_t fontpage_203_135_135[45] U8G_FONT_SECTION("fontpage_203_135_135") = {
- 0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x87,0x87,0x00,0x0A,0xFF,0x00,
- 0x00,0x0B,0x0B,0x16,0x0C,0x00,0xFF,0x08,0x00,0x04,0x00,0xFF,0xE0,0x11,0x00,0x11,
- 0x00,0x11,0x00,0x0A,0x00,0x0A,0x00,0x04,0x00,0x1B,0x00,0xE0,0xE0};
const u8g_fntpgm_uint8_t fontpage_203_153_153[45] U8G_FONT_SECTION("fontpage_203_153_153") = {
0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x00,0x0A,0xFF,0x00,
0x00,0x0B,0x0B,0x16,0x0C,0x00,0xFF,0x20,0x80,0xAC,0x80,0x72,0x80,0x20,0x80,0xFC,
@@ -1050,10 +1039,6 @@ const u8g_fntpgm_uint8_t fontpage_246_201_201[45] U8G_FONT_SECTION("fontpage_246
0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xC9,0xC9,0x00,0x0A,0xFF,0x00,
0x00,0x0B,0x0B,0x16,0x0C,0x00,0xFF,0x42,0x00,0x7B,0xE0,0x94,0x80,0x7F,0xC0,0x04,
0x00,0xFF,0xE0,0x01,0x00,0x7F,0xC0,0x11,0x00,0x09,0x00,0x03,0x00};
-const u8g_fntpgm_uint8_t fontpage_247_128_128[45] U8G_FONT_SECTION("fontpage_247_128_128") = {
- 0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x0A,0xFF,0x00,
- 0x00,0x0B,0x0B,0x16,0x0C,0x00,0xFF,0x42,0x00,0x7B,0xE0,0x94,0x80,0x27,0xC0,0x50,
- 0x40,0x4F,0x40,0x49,0x40,0x4F,0x40,0x49,0x40,0x4F,0x40,0x40,0xC0};
const u8g_fntpgm_uint8_t fontpage_247_177_177[45] U8G_FONT_SECTION("fontpage_247_177_177") = {
0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xB1,0xB1,0x00,0x0A,0xFF,0x00,
0x00,0x0B,0x0B,0x16,0x0C,0x00,0xFF,0x21,0x00,0x3D,0xE0,0x4A,0x80,0x94,0x40,0x7F,
@@ -1465,7 +1450,6 @@ const u8g_fntpgm_uint8_t fontpage_510_154_154[30] U8G_FONT_SECTION("fontpage_510
0x00,0x02,0x07,0x07,0x0C,0x06,0x01,0xC0,0xC0,0x00,0x00,0x00,0xC0,0xC0};
static const uxg_fontinfo_t g_fontinfo_zh_CN[] PROGMEM = {
- FONTDATA_ITEM(64, 157, 157, fontpage_64_157_157), // '”' -- '”'
FONTDATA_ITEM(69, 191, 191, fontpage_69_191_191), // '⊿' -- '⊿'
FONTDATA_ITEM(156, 128, 128, fontpage_156_128_128), // '一' -- '一'
FONTDATA_ITEM(156, 137, 139, fontpage_156_137_139), // '三' -- '下'
@@ -1553,7 +1537,6 @@ static const uxg_fontinfo_t g_fontinfo_zh_CN[] PROGMEM = {
FONTDATA_ITEM(171, 183, 183, fontpage_171_183_183), // '喷' -- '喷'
FONTDATA_ITEM(172, 180, 180, fontpage_172_180_180), // '嘴' -- '嘴'
FONTDATA_ITEM(172, 232, 232, fontpage_172_232_232), // '器' -- '器'
- FONTDATA_ITEM(172, 244, 244, fontpage_172_244_244), // '噴' -- '噴'
FONTDATA_ITEM(173, 222, 222, fontpage_173_222_222), // '回' -- '回'
FONTDATA_ITEM(173, 224, 224, fontpage_173_224_224), // '因' -- '因'
FONTDATA_ITEM(173, 250, 250, fontpage_173_250_250), // '固' -- '固'
@@ -1642,7 +1625,6 @@ static const uxg_fontinfo_t g_fontinfo_zh_CN[] PROGMEM = {
FONTDATA_ITEM(202, 240, 240, fontpage_202_240_240), // '数' -- '数'
FONTDATA_ITEM(202, 242, 242, fontpage_202_242_242), // '敲' -- '敲'
FONTDATA_ITEM(202, 244, 244, fontpage_202_244_244), // '整' -- '整'
- FONTDATA_ITEM(203, 135, 135, fontpage_203_135_135), // '文' -- '文'
FONTDATA_ITEM(203, 153, 153, fontpage_203_153_153), // '料' -- '料'
FONTDATA_ITEM(203, 156, 156, fontpage_203_156_156), // '斜' -- '斜'
FONTDATA_ITEM(203, 173, 173, fontpage_203_173_173), // '断' -- '断'
@@ -1718,7 +1700,6 @@ static const uxg_fontinfo_t g_fontinfo_zh_CN[] PROGMEM = {
FONTDATA_ITEM(245, 239, 239, fontpage_245_239_239), // '端' -- '端'
FONTDATA_ITEM(246, 172, 172, fontpage_246_172_172), // '第' -- '第'
FONTDATA_ITEM(246, 201, 201, fontpage_246_201_201), // '等' -- '等'
- FONTDATA_ITEM(247, 128, 128, fontpage_247_128_128), // '简' -- '简'
FONTDATA_ITEM(247, 177, 177, fontpage_247_177_177), // '箱' -- '箱'
FONTDATA_ITEM(248, 251, 251, fontpage_248_251_251), // '类' -- '类'
FONTDATA_ITEM(250, 162, 162, fontpage_250_162_162), // '索' -- '索'
diff --git a/Marlin/src/lcd/dogm/fontdata/langdata_zh_TW.h b/Marlin/src/lcd/dogm/fontdata/langdata_zh_TW.h
index 093629cd16..c132a0de70 100644
--- a/Marlin/src/lcd/dogm/fontdata/langdata_zh_TW.h
+++ b/Marlin/src/lcd/dogm/fontdata/langdata_zh_TW.h
@@ -343,12 +343,10 @@ const u8g_fntpgm_uint8_t fontpage_178_167_167[45] U8G_FONT_SECTION("fontpage_178
0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xA7,0xA7,0x00,0x0A,0xFF,0x00,
0x00,0x0B,0x0B,0x16,0x0C,0x00,0xFF,0x04,0x00,0x04,0x00,0x04,0x00,0xFF,0xE0,0x04,
0x00,0x04,0x00,0x0A,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0xC0,0x60};
-const u8g_fntpgm_uint8_t fontpage_178_169_170[73] U8G_FONT_SECTION("fontpage_178_169_170") = {
- 0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xA9,0xAA,0x00,0x0A,0xFF,0x00,
+const u8g_fntpgm_uint8_t fontpage_178_169_169[45] U8G_FONT_SECTION("fontpage_178_169_169") = {
+ 0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xA9,0xA9,0x00,0x0A,0xFF,0x00,
0x00,0x0B,0x0B,0x16,0x0C,0x00,0xFF,0x7F,0xC0,0x04,0x00,0x04,0x00,0x04,0x00,0xFF,
- 0xE0,0x04,0x00,0x0A,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0xC0,0x60,0x0B,0x0B,0x16,
- 0x0C,0x00,0xFF,0x04,0x00,0x04,0x00,0x04,0x00,0xFF,0xE0,0x04,0x00,0x0A,0x00,0x0A,
- 0x00,0x11,0x00,0x19,0x00,0x24,0x80,0xC4,0x60};
+ 0xE0,0x04,0x00,0x0A,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0xC0,0x60};
const u8g_fntpgm_uint8_t fontpage_178_177_177[45] U8G_FONT_SECTION("fontpage_178_177_177") = {
0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xB1,0xB1,0x00,0x0A,0xFF,0x00,
0x00,0x0B,0x0B,0x16,0x0C,0x00,0xFF,0x24,0x00,0x24,0x00,0x3F,0xC0,0x44,0x00,0x04,
@@ -1302,7 +1300,7 @@ static const uxg_fontinfo_t g_fontinfo_zh_TW[] PROGMEM = {
FONTDATA_ITEM(178, 154, 154, fontpage_178_154_154), // '多' -- '多'
FONTDATA_ITEM(178, 160, 160, fontpage_178_160_160), // '夠' -- '夠'
FONTDATA_ITEM(178, 167, 167, fontpage_178_167_167), // '大' -- '大'
- FONTDATA_ITEM(178, 169, 170, fontpage_178_169_170), // '天' -- '太'
+ FONTDATA_ITEM(178, 169, 169, fontpage_178_169_169), // '天' -- '天'
FONTDATA_ITEM(178, 177, 177, fontpage_178_177_177), // '失' -- '失'
FONTDATA_ITEM(179, 203, 203, fontpage_179_203_203), // '始' -- '始'
FONTDATA_ITEM(181, 146, 146, fontpage_181_146_146), // '媒' -- '媒'
From 41115e0590e7adfc40a5a19cb4b0676b24e46075 Mon Sep 17 00:00:00 2001
From: Marcio T
Date: Wed, 1 Mar 2023 21:07:23 -0700
Subject: [PATCH 70/97] =?UTF-8?q?=F0=9F=9A=B8=20Improve=20CocoaPress=20Tou?=
=?UTF-8?q?ch=20UI=20(#25446)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../cocoa_press/advanced_settings_menu.cpp | 4 +-
.../cocoa_press/cocoa_press_ui.h | 54 ++--
.../confirm_start_print_dialog_box.cpp | 55 ++++
.../confirm_start_print_dialog_box.h | 32 ++
.../cocoa_press/files_screen.cpp | 289 ++++++++++++++++++
.../cocoa_press/files_screen.h | 68 +++++
.../cocoa_press/leveling_menu.cpp | 6 +
.../cocoa_press/load_chocolate.cpp | 95 ++----
.../cocoa_press/load_chocolate.h | 2 +-
.../cocoa_press/preheat_menu.cpp | 2 +-
.../ftdi_eve_touch_ui/cocoa_press/screens.h | 4 +-
.../cocoa_press/status_screen.cpp | 268 ++++++++++------
.../cocoa_press/status_screen.h | 10 +-
.../generic/max_velocity_screen.cpp | 2 +-
.../ftdi_eve_touch_ui/language/language_en.h | 6 +-
.../lcd/extui/ftdi_eve_touch_ui/screen_data.h | 1 +
.../lcd/extui/ftdi_eve_touch_ui/screens.cpp | 2 +
.../theme/marlin_bootscreen_landscape.h | 1 -
.../theme/marlin_bootscreen_portrait.h | 1 -
19 files changed, 695 insertions(+), 207 deletions(-)
create mode 100644 Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/confirm_start_print_dialog_box.cpp
create mode 100644 Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/confirm_start_print_dialog_box.h
create mode 100644 Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/files_screen.cpp
create mode 100644 Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/files_screen.h
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/advanced_settings_menu.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/advanced_settings_menu.cpp
index 00cdf76331..f607dc102d 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/advanced_settings_menu.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/advanced_settings_menu.cpp
@@ -58,8 +58,8 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
.enabled(ENABLED(HAS_TRINAMIC_CONFIG))
.tag(3) .button(TMC_CURRENT_POS, GET_TEXT_F(MSG_TMC_CURRENT))
.enabled(ENABLED(LIN_ADVANCE))
- .tag(4) .button(LIN_ADVANCE_POS, GET_TEXT_F(MSG_LINEAR_ADVANCE))
- .tag(5) .button(VELOCITY_POS, GET_TEXT_F(MSG_MAX_SPEED))
+ .tag(4) .button(LIN_ADVANCE_POS, GET_TEXT_F(MSG_LINEAR_ADVANCE))
+ .tag(5) .button(VELOCITY_POS, GET_TEXT_F(MSG_MAX_SPEED_NO_UNITS))
.tag(6) .button(ACCELERATION_POS, GET_TEXT_F(MSG_ACCELERATION))
.tag(7) .button(JERK_POS, GET_TEXT_F(TERN(HAS_JUNCTION_DEVIATION, MSG_JUNCTION_DEVIATION, MSG_JERK)))
.tag(8) .button(ENDSTOPS_POS, GET_TEXT_F(MSG_LCD_ENDSTOPS))
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/cocoa_press_ui.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/cocoa_press_ui.h
index 6a02228925..5704371131 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/cocoa_press_ui.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/cocoa_press_ui.h
@@ -1,4 +1,3 @@
-
/****************************************************************************
* 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 *
@@ -28,33 +27,26 @@ constexpr float x_max = 480.000000;
constexpr float y_min = 0.000000;
constexpr float y_max = 272.000000;
-const PROGMEM uint16_t syringe_outline[] = {0xED96, 0x14F0, 0xE65D, 0x10E9, 0xDED2, 0x0F9C, 0xD74B, 0x110E, 0xD01B, 0x1543, 0xCE80, 0x1836, 0xCE0A, 0x1C3A, 0xCE0F, 0x27AD, 0xCF0A, 0x2BD3, 0xD127, 0x2E5B, 0xD2A1, 0x2FF0, 0xD2A2, 0x9FC9, 0xD407, 0xA97A, 0xD7B9, 0xB10C, 0xD7BF, 0xBB58, 0xD978, 0xC2BE, 0xDD55, 0xC6EB, 0xDD58, 0xD159, 0xDE3B, 0xD3A8, 0xDFCF, 0xD3AF, 0xE0B8, 0xD04C, 0xE0B8, 0xC6EB, 0xE4A7, 0xC299, 0xE652, 0xBAF6, 0xE652, 0xB10C, 0xEA2E, 0xA8EA, 0xEB6C, 0x9E86, 0xEB6C, 0x2F58, 0xEF3C, 0x2B4E, 0xF003, 0x2583, 0xEFFD, 0x1AC2, 0xED96, 0x14F0, 0xED96, 0x14F0};
-const PROGMEM uint16_t syringe_fluid[] = {0xDE73, 0x2512, 0xDA0C, 0x261D, 0xD5B8, 0x29A0, 0xD4AE, 0x2D87, 0xD4AE, 0x9F60, 0xD585, 0xA63B, 0xDE44, 0xA9DE, 0xE32A, 0xA942, 0xE7E3, 0xA6A5, 0xE930, 0xA342, 0xE95D, 0x9C1D, 0xE95B, 0x31B8, 0xE955, 0x2B63, 0xE867, 0x2A67, 0xE790, 0x28DE, 0xE342, 0x25CB, 0xDE73, 0x2512};
-const PROGMEM uint16_t syringe[] = {0xED91, 0x1502, 0xE658, 0x10FB, 0xDECE, 0x0FAE, 0xD746, 0x1120, 0xD016, 0x1555, 0xCE7B, 0x1848, 0xCE05, 0x1C4D, 0xCE0A, 0x27BF, 0xCF05, 0x2BE5, 0xD122, 0x2E6E, 0xD29C, 0x3002, 0xD29D, 0x9FDB, 0xD402, 0xA98C, 0xD7B4, 0xB11F, 0xD7BA, 0xBB6A, 0xD973, 0xC2D1, 0xDD50, 0xC6FD, 0xDD53, 0xD16C, 0xDE36, 0xD3BA, 0xDFCA, 0xD3C2, 0xE0B3, 0xD05E, 0xE0B3, 0xC6FD, 0xE4A2, 0xC2AB, 0xE64D, 0xBB09, 0xE64D, 0xB11F, 0xEA29, 0xA8FC, 0xEB67, 0x9E98, 0xEB67, 0x2F6B, 0xEF37, 0x2B60, 0xEFFE, 0x2595, 0xEFF8, 0x1AD5, 0xED91, 0x1502, 0xED91, 0x1502, 0xFFFF, 0xD1CF, 0x1A7E, 0xD84F, 0x16DB, 0xDF19, 0x15A9, 0xE5E0, 0x16EA, 0xEC5B, 0x1AA4, 0xEC9D, 0x1D34, 0xEC9D, 0x20CC, 0xE5F1, 0x1D41, 0xDF02, 0x1C12, 0xD812, 0x1D41, 0xD166, 0x20CC, 0xD16C, 0x1B45, 0xD1CF, 0x1A7E, 0xFFFF, 0xE3BD, 0xACFD, 0xDE8E, 0xAF4F, 0xD988, 0xAC0F, 0xD7CC, 0xA8CD, 0xDD1C, 0xAAA9, 0xE287, 0xAA5B, 0xE655, 0xA8BE, 0xE3BD, 0xACFD, 0xFFFF, 0xE802, 0x2DC5, 0xE809, 0x343C, 0xE808, 0x9FC8, 0xE7E3, 0xA296, 0xE70D, 0xA4B1, 0xE2C9, 0xA70E, 0xDE4E, 0xA790, 0xD6A1, 0xA457, 0xD5FF, 0x9F2B, 0xD5FF, 0x2DFD, 0xD6B2, 0x2B72, 0xDA78, 0x2861, 0xDE9D, 0x276F, 0xE300, 0x2824, 0xE70D, 0x2B13, 0xE7FF, 0x2DB6, 0xE800, 0x2DC5, 0xE802, 0x2DC5, 0xFFFF, 0xE2ED, 0xBA8B, 0xE1CC, 0xBF52, 0xDF1C, 0xC165, 0xDC64, 0xBF99, 0xDB1B, 0xBAFF, 0xDB19, 0xB433, 0xDF04, 0xB552, 0xE2EF, 0xB438, 0xE2ED, 0xBA8B, 0xFFFF, 0xEC09, 0x2893, 0xE925, 0x2A08, 0xE57D, 0x261D, 0xE149, 0x246F, 0xDBDE, 0x24A0, 0xD6BC, 0x2795, 0xD484, 0x2A46, 0xD1C0, 0x2853, 0xD166, 0x251E, 0xD80D, 0x2151, 0xDF02, 0x200C, 0xE5F6, 0x2151, 0xEC9D, 0x251E, 0xEC09, 0x2893};
-const PROGMEM uint16_t park_btn[] = {0x0AAA, 0x0E1E, 0x57FF, 0x0E1E, 0x57FF, 0x33C3, 0x0AAA, 0x33C3, 0x0AAA, 0x0E1E};
-const PROGMEM uint16_t pause_btn[] = {0x47FF, 0xCA58, 0x7FFF, 0xCA58, 0x7FFF, 0xEFFE, 0x47FF, 0xEFFE, 0x47FF, 0xCA58};
-const PROGMEM uint16_t load_chocolate_btn[] = {0x0AAA, 0x3D2C, 0x57FF, 0x3D2C, 0x57FF, 0x62D2, 0x0AAA, 0x62D2, 0x0AAA, 0x3D2C};
-const PROGMEM uint16_t preheat_chocolate_btn[] = {0x0AAA, 0x6C3B, 0x57FF, 0x6C3B, 0x57FF, 0x91E0, 0x0AAA, 0x91E0, 0x0AAA, 0x6C3B};
-const PROGMEM uint16_t menu_btn[] = {0x0AAA, 0x9B4A, 0x57FF, 0x9B4A, 0x57FF, 0xC0EF, 0x0AAA, 0xC0EF, 0x0AAA, 0x9B4A};
-const PROGMEM uint16_t print_btn[] = {0x0AAA, 0xCA58, 0x42AA, 0xCA58, 0x42AA, 0xEFFE, 0x0AAA, 0xEFFE, 0x0AAA, 0xCA58};
-const PROGMEM uint16_t stop_btn[] = {0x8554, 0xCA58, 0xBD53, 0xCA58, 0xBD53, 0xEFFE, 0x8554, 0xEFFE, 0x8554, 0xCA58};
-const PROGMEM uint16_t print_time_hms[] = {0x62A9, 0xA968, 0x8FFE, 0xA968, 0x8FFE, 0xC0EF, 0x62A9, 0xC0EF, 0x62A9, 0xA968};
-const PROGMEM uint16_t print_time_percent[] = {0x8FFE, 0xA968, 0xBD53, 0xA968, 0xBD53, 0xC0EF, 0x8FFE, 0xC0EF, 0x8FFE, 0xA968};
-const PROGMEM uint16_t print_time_label[] = {0x62A9, 0x91E0, 0xBD53, 0x91E0, 0xBD53, 0xA986, 0x62A9, 0xA986, 0x62A9, 0x91E0};
-const PROGMEM uint16_t h3_temp[] = {0x62A9, 0x75A4, 0x8FFE, 0x75A4, 0x8FFE, 0x8D2C, 0x62A9, 0x8D2C, 0x62A9, 0x75A4};
-const PROGMEM uint16_t h3_label[] = {0x62A9, 0x5E1D, 0x8FFE, 0x5E1D, 0x8FFE, 0x75A4, 0x62A9, 0x75A4, 0x62A9, 0x5E1D};
-const PROGMEM uint16_t chocolate_label[] = {0x62A9, 0x12D2, 0xBD53, 0x12D2, 0xBD53, 0x2A5A, 0x62A9, 0x2A5A, 0x62A9, 0x12D2};
-const PROGMEM uint16_t h0_label[] = {0x62A9, 0x2A5A, 0x8FFE, 0x2A5A, 0x8FFE, 0x41E1, 0x62A9, 0x41E1, 0x62A9, 0x2A5A};
-const PROGMEM uint16_t h0_temp[] = {0x62A9, 0x41E1, 0x8FFE, 0x41E1, 0x8FFE, 0x5968, 0x62A9, 0x5968, 0x62A9, 0x41E1};
-const PROGMEM uint16_t h1_label[] = {0x8FFE, 0x2A5A, 0xBD53, 0x2A5A, 0xBD53, 0x41E1, 0x8FFE, 0x41E1, 0x8FFE, 0x2A5A};
-const PROGMEM uint16_t h1_temp[] = {0x8FFE, 0x41E1, 0xBD53, 0x41E1, 0xBD53, 0x5968, 0x8FFE, 0x5968, 0x8FFE, 0x41E1};
-const PROGMEM uint16_t h2_label[] = {0x8FFE, 0x5E1D, 0xBD53, 0x5E1D, 0xBD53, 0x75A4, 0x8FFE, 0x75A4, 0x8FFE, 0x5E1D};
-const PROGMEM uint16_t h2_temp[] = {0x8FFE, 0x75A4, 0xBD53, 0x75A4, 0xBD53, 0x8D2C, 0x8FFE, 0x8D2C, 0x8FFE, 0x75A4};
-const PROGMEM uint16_t extrude_btn[] = {0xC859, 0xDD2B, 0xF5AE, 0xDD2B, 0xF5AE, 0xEFFE, 0xC859, 0xEFFE, 0xC859, 0xDD2B};
-const PROGMEM uint16_t load_screen_extrude[] = {0x25FB, 0x89AE, 0x2F58, 0x89AE, 0x2F58, 0xAAF6, 0x3406, 0xAAF6, 0x2AAA, 0xBB9A, 0x214D, 0xAAF6, 0x25FB, 0xAAF6, 0x25FB, 0x89AE};
-const PROGMEM uint16_t load_screen_retract[] = {0x25FC, 0x790A, 0x2F58, 0x790A, 0x2F58, 0x57C2, 0x3406, 0x57C2, 0x2AAA, 0x471D, 0x214D, 0x57C2, 0x25FC, 0x57C2, 0x25FC, 0x790A};
-const PROGMEM uint16_t load_screen_back_btn[] = {0x1555, 0xCA58, 0xC553, 0xCA58, 0xC553, 0xEFFE, 0x1555, 0xEFFE, 0x1555, 0xCA58};
-const PROGMEM uint16_t load_screen_unload_btn[] = {0x4AAA, 0x8EBD, 0xC553, 0x8EBD, 0xC553, 0xB463, 0x4AAA, 0xB463, 0x4AAA, 0x8EBD};
-const PROGMEM uint16_t load_screen_load_btn[] = {0x4AAA, 0x5322, 0xC553, 0x5322, 0xC553, 0x78C7, 0x4AAA, 0x78C7, 0x4AAA, 0x5322};
-const PROGMEM uint16_t load_sreen_title[] = {0x4AAA, 0x1787, 0xC553, 0x1787, 0xC553, 0x3D2C, 0x4AAA, 0x3D2C, 0x4AAA, 0x1787};
-const PROGMEM uint16_t load_screen_increment[] = {0x1555, 0x2E1D, 0x3FFF, 0x2E1D, 0x3FFF, 0x3D2C, 0x1555, 0x3D2C, 0x1555, 0x2E1D};
+const PROGMEM uint16_t menu_btn[] = {0x0AAA, 0x0E1E, 0x6D54, 0x0E1E, 0x6D54, 0x2F0E, 0x0AAA, 0x2F0E, 0x0AAA, 0x0E1E};
+const PROGMEM uint16_t print_btn[] = {0x47FF, 0xCF0D, 0x7FFF, 0xCF0D, 0x7FFF, 0xEFFE, 0x47FF, 0xEFFE, 0x47FF, 0xCF0D};
+const PROGMEM uint16_t load_chocolate_btn[] = {0x0AAA, 0x3878, 0x6D54, 0x3878, 0x6D54, 0x5968, 0x0AAA, 0x5968, 0x0AAA, 0x3878};
+const PROGMEM uint16_t extrude_btn[] = {0x0AAA, 0x5E1D, 0x6D54, 0x5E1D, 0x6D54, 0x7F0E, 0x0AAA, 0x7F0E, 0x0AAA, 0x5E1D};
+const PROGMEM uint16_t preheat_chocolate_btn[] = {0x0AAA, 0x83C2, 0x6D54, 0x83C2, 0x6D54, 0xA4B3, 0x0AAA, 0xA4B3, 0x0AAA, 0x83C2};
+const PROGMEM uint16_t media_btn[] = {0x0AAA, 0xCF0D, 0x42AA, 0xCF0D, 0x42AA, 0xEFFE, 0x0AAA, 0xEFFE, 0x0AAA, 0xCF0D};
+const PROGMEM uint16_t pause_btn[] = {0x8554, 0xCF0D, 0xBD53, 0xCF0D, 0xBD53, 0xEFFE, 0x8554, 0xEFFE, 0x8554, 0xCF0D};
+const PROGMEM uint16_t print_time_hms[] = {0xC59E, 0xAEA0, 0xF510, 0xAEA0, 0xF510, 0xC52D, 0xC59E, 0xC52D, 0xC59E, 0xAEA0};
+const PROGMEM uint16_t file_name[] = {0x0B0E, 0xAECD, 0xBCEF, 0xAECD, 0xBCEF, 0xC4AB, 0x0B0E, 0xC4AB, 0x0B0E, 0xAECD};
+const PROGMEM uint16_t chocolate_label[] = {0x75C1, 0x1369, 0xF4FE, 0x1369, 0xF4FE, 0x2AB1, 0x75C1, 0x2AB1, 0x75C1, 0x1369};
+const PROGMEM uint16_t h0_label[] = {0x8304, 0x4BEB, 0xB271, 0x4BEB, 0xB271, 0x63B0, 0x8304, 0x63B0, 0x8304, 0x4BEB};
+const PROGMEM uint16_t h0_temp[] = {0x8304, 0x7190, 0xB271, 0x7190, 0xB271, 0x8955, 0x8304, 0x8955, 0x8304, 0x7190};
+const PROGMEM uint16_t h1_label[] = {0xBB04, 0x4BEB, 0xEA71, 0x4BEB, 0xEA71, 0x63B0, 0xBB04, 0x63B0, 0xBB04, 0x4BEB};
+const PROGMEM uint16_t h1_temp[] = {0xBB04, 0x7190, 0xEA71, 0x7190, 0xEA71, 0x8956, 0xBB04, 0x8956, 0xBB04, 0x7190};
+const PROGMEM uint16_t stop_btn[] = {0xC2A9, 0xCF0D, 0xF553, 0xCF0D, 0xF553, 0xEFFE, 0xC2A9, 0xEFFE, 0xC2A9, 0xCF0D};
+const PROGMEM uint16_t load_screen_extrude[] = {0x382C, 0x8B02, 0x4188, 0x8B02, 0x4188, 0xAC4A, 0x4637, 0xAC4A, 0x3CDA, 0xBCEE, 0x337D, 0xAC4A, 0x382C, 0xAC4A, 0x382C, 0x8B02};
+const PROGMEM uint16_t load_screen_retract[] = {0x382C, 0x7A5D, 0x4188, 0x7A5D, 0x4188, 0x5915, 0x4637, 0x5915, 0x3CDA, 0x4871, 0x337E, 0x5915, 0x382C, 0x5915, 0x382C, 0x7A5D};
+const PROGMEM uint16_t load_screen_back_btn[] = {0x1555, 0xCA58, 0xEAA8, 0xCA58, 0xEAA8, 0xEFFE, 0x1555, 0xEFFE, 0x1555, 0xCA58};
+const PROGMEM uint16_t load_screen_unload_btn[] = {0x67FF, 0x70F0, 0xEAA8, 0x70F0, 0xEAA8, 0x9695, 0x67FF, 0x9695, 0x67FF, 0x70F0};
+const PROGMEM uint16_t load_screen_start_stop_btn[] = {0x67FF, 0x9B4A, 0xEAA8, 0x9B4A, 0xEAA8, 0xC0EF, 0x67FF, 0xC0EF, 0x67FF, 0x9B4A};
+const PROGMEM uint16_t load_screen_load_btn[] = {0x67FF, 0x4696, 0xEAA8, 0x4696, 0xEAA8, 0x6C3B, 0x67FF, 0x6C3B, 0x67FF, 0x4696};
+const PROGMEM uint16_t load_screen_continuous[] = {0x67FF, 0x1787, 0xEAA8, 0x1787, 0xEAA8, 0x3D2C, 0x67FF, 0x3D2C, 0x67FF, 0x1787};
+const PROGMEM uint16_t load_screen_increment[] = {0x1555, 0x1787, 0x62A9, 0x1787, 0x62A9, 0x3D2C, 0x1555, 0x3D2C, 0x1555, 0x1787};
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/confirm_start_print_dialog_box.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/confirm_start_print_dialog_box.cpp
new file mode 100644
index 0000000000..ca98e7c9b6
--- /dev/null
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/confirm_start_print_dialog_box.cpp
@@ -0,0 +1,55 @@
+/**************************************
+ * confirm_start_print_dialog_box.cpp *
+ **************************************/
+
+/****************************************************************************
+ * Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
+ * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
+ * *
+ * 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. *
+ * *
+ * To view a copy of the GNU General Public License, go to the following *
+ * location: . *
+ ****************************************************************************/
+
+#include "../config.h"
+#include "../screens.h"
+
+#ifdef COCOA_CONFIRM_START_PRINT
+
+using namespace FTDI;
+using namespace Theme;
+using namespace ExtUI;
+
+void ConfirmStartPrintDialogBox::onRedraw(draw_mode_t) {
+ FileList files;
+ const char *filename = files.filename();
+ char buffer[strlen_P(GET_TEXT(MSG_START_PRINT_CONFIRMATION)) + strlen(filename) + 1];
+ sprintf_P(buffer, GET_TEXT(MSG_START_PRINT_CONFIRMATION), filename);
+ drawMessage((const char *)buffer);
+ drawYesNoButtons();
+}
+
+bool ConfirmStartPrintDialogBox::onTouchEnd(uint8_t tag) {
+ switch (tag) {
+ case 1: {
+ FileList files;
+ printFile(files.shortFilename());
+ StatusScreen::setStatusMessage(GET_TEXT_F(MSG_PRINT_STARTING));
+ GOTO_SCREEN(StatusScreen);
+ return true;
+ }
+ case 2: GOTO_PREVIOUS(); return true;
+ default: return false;
+ }
+}
+
+#endif // COCOA_CONFIRM_START_PRINT
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/confirm_start_print_dialog_box.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/confirm_start_print_dialog_box.h
new file mode 100644
index 0000000000..38cb5c2774
--- /dev/null
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/confirm_start_print_dialog_box.h
@@ -0,0 +1,32 @@
+/************************************
+ * confirm_start_print_dialog_box.h *
+ ************************************/
+
+/****************************************************************************
+ * Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
+ * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
+ * *
+ * 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. *
+ * *
+ * To view a copy of the GNU General Public License, go to the following *
+ * location: . *
+ ****************************************************************************/
+
+#pragma once
+
+#define COCOA_CONFIRM_START_PRINT
+#define COCOA_CONFIRM_START_PRINT_CLASS ConfirmStartPrintDialogBox
+
+class ConfirmStartPrintDialogBox : public DialogBoxBaseClass, public UncachedScreen {
+ public:
+ static void onRedraw(draw_mode_t);
+ static bool onTouchEnd(uint8_t);
+};
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/files_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/files_screen.cpp
new file mode 100644
index 0000000000..581c337428
--- /dev/null
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/files_screen.cpp
@@ -0,0 +1,289 @@
+/********************
+ * files_screen.cpp *
+ ********************/
+
+/****************************************************************************
+ * Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
+ * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
+ * *
+ * 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. *
+ * *
+ * To view a copy of the GNU General Public License, go to the following *
+ * location: . *
+ ****************************************************************************/
+
+#include "../config.h"
+#include "../screens.h"
+#include "../screen_data.h"
+
+#ifdef COCOA_FILES_SCREEN
+
+#if ENABLED(TOUCH_UI_PORTRAIT)
+ #define GRID_COLS 6
+ #define GRID_ROWS 15
+ #define FILES_PER_PAGE 11
+ #define PREV_DIR LEFT
+ #define NEXT_DIR RIGHT
+
+ #define PREV_POS BTN_POS(1,1), BTN_SIZE(1,2)
+ #define HEAD_POS BTN_POS(2,1), BTN_SIZE(4,2)
+ #define NEXT_POS BTN_POS(6,1), BTN_SIZE(1,2)
+ #define LIST_POS BTN_POS(1,3), BTN_SIZE(6,FILES_PER_PAGE)
+ #define BTN1_POS BTN_POS(1,14), BTN_SIZE(3,2)
+ #define BTN2_POS BTN_POS(4,14), BTN_SIZE(3,2)
+#else
+ #define GRID_COLS 12
+ #define GRID_ROWS 8
+ #define FILES_PER_PAGE 6
+ #define PREV_DIR UP
+ #define NEXT_DIR DOWN
+
+ #define PREV_POS BTN_POS(12,2), BTN_SIZE(1,3)
+ #define HEAD_POS BTN_POS( 1,1), BTN_SIZE(12,1)
+ #define NEXT_POS BTN_POS(12,5), BTN_SIZE(1,4)
+ #define LIST_POS BTN_POS( 1,2), BTN_SIZE(11,FILES_PER_PAGE)
+ #define BTN1_POS BTN_POS( 1,8), BTN_SIZE(6,1)
+ #define BTN2_POS BTN_POS( 7,8), BTN_SIZE(5,1)
+#endif
+
+using namespace FTDI;
+using namespace ExtUI;
+using namespace Theme;
+
+constexpr static FilesScreenData &mydata = screen_data.FilesScreen;
+
+void FilesScreen::onEntry() {
+ mydata.cur_page = 0;
+ mydata.selected_tag = 0xFF;
+ #if ENABLED(SCROLL_LONG_FILENAMES) && (FTDI_API_LEVEL >= 810)
+ CLCD::mem_write_32(CLCD::REG::MACRO_0,DL::NOP);
+ #endif
+ gotoPage(0);
+ BaseScreen::onEntry();
+}
+
+const char *FilesScreen::getSelectedFilename(bool shortName) {
+ FileList files;
+ files.seek(getSelectedFileIndex(), true);
+ return shortName ? files.shortFilename() : files.filename();
+}
+
+void FilesScreen::drawSelectedFile() {
+ if(mydata.selected_tag == 0xFF) return;
+ FileList files;
+ files.seek(getSelectedFileIndex(), true);
+ mydata.flags.is_dir = files.isDir();
+ drawFileButton(
+ files.filename(),
+ mydata.selected_tag,
+ mydata.flags.is_dir,
+ true
+ );
+}
+
+uint16_t FilesScreen::getSelectedFileIndex() {
+ return getFileForTag(mydata.selected_tag);
+}
+
+uint16_t FilesScreen::getFileForTag(uint8_t tag) {
+ return mydata.cur_page * FILES_PER_PAGE + tag - 2;
+}
+
+void FilesScreen::drawFileButton(int x, int y, int w, int h, const char *filename, uint8_t tag, bool is_dir, bool is_highlighted) {
+ #define SUB_COLS 6
+ #define SUB_ROWS FILES_PER_PAGE
+
+ const int bx = SUB_X(1);
+ const int by = SUB_Y(getLineForTag(tag)+1);
+ const int bw = SUB_W(6);
+ const int bh = SUB_H(1);
+
+ CommandProcessor cmd;
+ cmd.tag(tag);
+ cmd.cmd(COLOR_RGB(is_highlighted ? fg_action : bg_color));
+ cmd.font(font_medium).rectangle(bx, by, bw, bh);
+ cmd.cmd(COLOR_RGB(is_highlighted ? normal_btn.rgb : bg_text_enabled));
+ #if ENABLED(SCROLL_LONG_FILENAMES)
+ if (is_highlighted) {
+ cmd.cmd(SAVE_CONTEXT());
+ cmd.cmd(SCISSOR_XY(x,y));
+ cmd.cmd(SCISSOR_SIZE(w,h));
+ cmd.cmd(MACRO(0));
+ cmd.text(bx, by, bw, bh, filename, OPT_CENTERY | OPT_NOFIT);
+ } else
+ #endif
+ draw_text_with_ellipsis(cmd, bx,by, bw - (is_dir ? 20 : 0), bh, filename, OPT_CENTERY, font_medium);
+ if (is_dir && !is_highlighted) cmd.text(bx, by, bw, bh, F("> "), OPT_CENTERY | OPT_RIGHTX);
+ #if ENABLED(SCROLL_LONG_FILENAMES)
+ if (is_highlighted) cmd.cmd(RESTORE_CONTEXT());
+ #endif
+}
+
+void FilesScreen::drawFileList() {
+ FileList files;
+ mydata.num_page = max(1,ceil(float(files.count()) / FILES_PER_PAGE));
+ mydata.cur_page = min(mydata.cur_page, mydata.num_page-1);
+ mydata.flags.is_root = files.isAtRootDir();
+ mydata.flags.is_empty = true;
+
+ uint16_t fileIndex = mydata.cur_page * FILES_PER_PAGE;
+ for (uint8_t i = 0; i < FILES_PER_PAGE; i++, fileIndex++) {
+ if (files.seek(fileIndex)) {
+ drawFileButton(files.filename(), getTagForLine(i), files.isDir(), false);
+ mydata.flags.is_empty = false;
+ } else
+ break;
+ }
+}
+
+void FilesScreen::drawHeader() {
+ char str[16];
+ sprintf_P(str, PSTR("Page %d of %d"), mydata.cur_page + 1, mydata.num_page);
+
+ CommandProcessor cmd;
+ cmd.colors(normal_btn)
+ .font(font_small)
+ .tag(0).button(HEAD_POS, str, OPT_CENTER | OPT_FLAT);
+}
+
+void FilesScreen::drawArrows() {
+ const bool prev_enabled = mydata.cur_page > 0;
+ const bool next_enabled = mydata.cur_page < (mydata.num_page - 1);
+
+ CommandProcessor cmd;
+ cmd.colors(normal_btn);
+ cmd.tag(242).enabled(prev_enabled).button(PREV_POS, F("")); if (prev_enabled) drawArrow(PREV_POS, PREV_DIR);
+ cmd.tag(243).enabled(next_enabled).button(NEXT_POS, F("")); if (next_enabled) drawArrow(NEXT_POS, NEXT_DIR);
+}
+
+void FilesScreen::drawFooter() {
+ const bool has_selection = mydata.selected_tag != 0xFF;
+
+ CommandProcessor cmd;
+ cmd.colors(normal_btn)
+ .font(font_medium)
+ .colors(normal_btn)
+ .enabled(!mydata.flags.is_root)
+ .tag(245).button(BTN2_POS, F("Up Dir"))
+ .colors(action_btn);
+
+ if (mydata.flags.is_empty)
+ cmd.tag(240).button(BTN1_POS, GET_TEXT_F(MSG_BUTTON_DONE));
+ else if (has_selection && mydata.flags.is_dir)
+ cmd.tag(244).button(BTN1_POS, GET_TEXT_F(MSG_BUTTON_OPEN));
+ else
+ cmd.tag(241).enabled(has_selection).button(BTN1_POS, F("Select"));
+}
+
+void FilesScreen::drawFileButton(const char *filename, uint8_t tag, bool is_dir, bool is_highlighted) {
+ #undef MARGIN_L
+ #undef MARGIN_R
+ #define MARGIN_L 0
+ #define MARGIN_R 0
+ drawFileButton(LIST_POS, filename, tag, is_dir, is_highlighted);
+}
+
+void FilesScreen::onRedraw(draw_mode_t what) {
+ if (what & FOREGROUND) {
+ drawHeader();
+ drawArrows();
+ drawSelectedFile();
+ drawFooter();
+ }
+}
+
+void FilesScreen::gotoPage(uint8_t page) {
+ mydata.selected_tag = 0xFF;
+ mydata.cur_page = page;
+ CommandProcessor cmd;
+ cmd.cmd(CMD_DLSTART)
+ .cmd(CLEAR_COLOR_RGB(bg_color))
+ .cmd(CLEAR(true,true,true))
+ .colors(normal_btn);
+ drawFileList();
+ storeBackground();
+}
+
+bool FilesScreen::onTouchEnd(uint8_t tag) {
+ switch (tag) {
+ case 240: // Done button, always select first file
+ {
+ FileList files;
+ files.seek(0);
+ GOTO_PREVIOUS();
+ }
+ return true;
+ case 241: // Select highlighted file
+ GOTO_PREVIOUS();
+ return true;
+ case 242: // Previous page
+ if (mydata.cur_page > 0) {
+ gotoPage(mydata.cur_page-1);
+ }
+ break;
+ case 243: // Next page
+ if (mydata.cur_page < (mydata.num_page-1)) {
+ gotoPage(mydata.cur_page+1);
+ }
+ break;
+ case 244: // Select directory
+ {
+ FileList files;
+ files.changeDir(getSelectedShortFilename());
+ gotoPage(0);
+ }
+ break;
+ case 245: // Up directory
+ {
+ FileList files;
+ files.upDir();
+ gotoPage(0);
+ }
+ break;
+ default: // File selected
+ if (tag < 240) {
+ mydata.selected_tag = tag;
+ #if ENABLED(SCROLL_LONG_FILENAMES) && (FTDI_API_LEVEL >= 810)
+ mydata.scroll_pos = 0;
+ mydata.scroll_max = 0;
+ if (FTDI::ftdi_chip >= 810) {
+ const char *filename = getSelectedFilename();
+ if (filename[0]) {
+ CommandProcessor cmd;
+ constexpr int dim[4] = {LIST_POS};
+ const uint16_t text_width = cmd.font(font_medium).text_width(filename);
+ if (text_width > dim[2])
+ mydata.scroll_max = text_width - dim[2] + MARGIN_L + MARGIN_R + 10;
+ }
+ }
+ #endif
+ }
+ break;
+ }
+ return true;
+}
+
+void FilesScreen::onIdle() {
+ #if ENABLED(SCROLL_LONG_FILENAMES) && (FTDI_API_LEVEL >= 810)
+ if (FTDI::ftdi_chip >= 810) {
+ CLCD::mem_write_32(CLCD::REG::MACRO_0,
+ VERTEX_TRANSLATE_X(-int32_t(mydata.scroll_pos)));
+ if (mydata.scroll_pos < mydata.scroll_max * 16)
+ mydata.scroll_pos++;
+ }
+ #endif
+}
+
+void FilesScreen::onMediaRemoved() {
+ if (AT_SCREEN(FilesScreen)) GOTO_SCREEN(StatusScreen);
+}
+
+#endif // COCOA_FILES_SCREEN
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/files_screen.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/files_screen.h
new file mode 100644
index 0000000000..99ea52ff81
--- /dev/null
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/files_screen.h
@@ -0,0 +1,68 @@
+/******************
+ * files_screen.h *
+ ******************/
+
+/****************************************************************************
+ * Written By Mark Pelletier 2017 - Aleph Objects, Inc. *
+ * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
+ * *
+ * 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. *
+ * *
+ * To view a copy of the GNU General Public License, go to the following *
+ * location: . *
+ ****************************************************************************/
+
+#pragma once
+
+#define COCOA_FILES_SCREEN
+#define COCOA_FILES_SCREEN_CLASS FilesScreen
+
+struct FilesScreenData {
+ struct {
+ uint8_t is_dir : 1;
+ uint8_t is_root : 1;
+ uint8_t is_empty : 1;
+ } flags;
+ uint8_t selected_tag;
+ uint8_t num_page;
+ uint8_t cur_page;
+ #if ENABLED(SCROLL_LONG_FILENAMES) && (FTDI_API_LEVEL >= 810)
+ uint16_t scroll_pos;
+ uint16_t scroll_max;
+ #endif
+};
+
+class FilesScreen : public BaseScreen, public CachedScreen {
+ private:
+ static uint8_t getTagForLine(uint8_t line) {return line + 2;}
+ static uint8_t getLineForTag(uint8_t tag) {return tag - 2;}
+ static uint16_t getFileForTag(uint8_t tag);
+ static uint16_t getSelectedFileIndex();
+
+ inline static const char *getSelectedShortFilename() {return getSelectedFilename(true);}
+ static const char *getSelectedFilename(bool shortName = false);
+
+ static void drawFileButton(int x, int y, int w, int h, const char *filename, uint8_t tag, bool is_dir, bool is_highlighted);
+ static void drawFileButton(const char *filename, uint8_t tag, bool is_dir, bool is_highlighted);
+ static void drawFileList();
+ static void drawHeader();
+ static void drawArrows();
+ static void drawFooter();
+ static void drawSelectedFile();
+
+ static void gotoPage(uint8_t);
+ public:
+ static void onEntry();
+ static void onRedraw(draw_mode_t);
+ static bool onTouchEnd(uint8_t tag);
+ static void onIdle();
+ static void onMediaRemoved();
+};
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/leveling_menu.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/leveling_menu.cpp
index 5e61bdb12f..be18c03483 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/leveling_menu.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/leveling_menu.cpp
@@ -57,7 +57,9 @@ void LevelingMenu::onRedraw(draw_mode_t what) {
cmd.font(font_large)
.cmd(COLOR_RGB(bg_text_enabled))
.text(BED_MESH_TITLE_POS, GET_TEXT_F(MSG_BED_LEVELING))
+ #if ENABLED(BLTOUCH)
.text(BLTOUCH_TITLE_POS, GET_TEXT_F(MSG_BLTOUCH))
+ #endif
.font(font_medium).colors(normal_btn)
.tag(2).button(PROBE_BED_POS, GET_TEXT_F(MSG_PROBE_BED))
.enabled(ENABLED(HAS_MESH))
@@ -66,8 +68,10 @@ void LevelingMenu::onRedraw(draw_mode_t what) {
.tag(4).button(EDIT_MESH_POS, GET_TEXT_F(MSG_EDIT_MESH))
#undef GRID_COLS
#define GRID_COLS 2
+ #if ENABLED(BLTOUCH)
.tag(5).button(BLTOUCH_RESET_POS, GET_TEXT_F(MSG_BLTOUCH_RESET))
.tag(6).button(BLTOUCH_TEST_POS, GET_TEXT_F(MSG_BLTOUCH_SELFTEST))
+ #endif
#undef GRID_COLS
#define GRID_COLS 3
.colors(action_btn)
@@ -81,8 +85,10 @@ bool LevelingMenu::onTouchEnd(uint8_t tag) {
case 2: BedMeshViewScreen::doProbe(); break;
case 3: BedMeshViewScreen::show(); break;
case 4: BedMeshEditScreen::show(); break;
+ #if ENABLED(BLTOUCH)
case 5: injectCommands(F("M280 P0 S60")); break;
case 6: SpinnerDialogBox::enqueueAndWait(F("M280 P0 S90\nG4 P100\nM280 P0 S120")); break;
+ #endif
default: return false;
}
return true;
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/load_chocolate.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/load_chocolate.cpp
index d40b3be354..95ddf7d387 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/load_chocolate.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/load_chocolate.cpp
@@ -39,42 +39,6 @@ using namespace Theme;
constexpr static LoadChocolateScreenData &mydata = screen_data.LoadChocolateScreen;
-void LoadChocolateScreen::draw_syringe(draw_mode_t what) {
- #if ENABLED(COCOA_PRESS_CHOCOLATE_LEVEL_SENSOR)
- const float fill_level = get_chocolate_fill_level();
- #else
- constexpr float fill_level = 1.0f;
- #endif
-
- CommandProcessor cmd;
- PolyUI ui(cmd, what);
-
- if (what & BACKGROUND) {
- // Paint the shadow for the syringe
- ui.color(shadow_rgb);
- ui.shadow(POLY(syringe_outline), shadow_depth);
- }
-
- if (what & FOREGROUND) {
- int16_t x, y, h, v;
-
- // Paint the syringe icon
- ui.color(syringe_rgb);
- ui.fill(POLY(syringe_outline));
-
- ui.color(fluid_rgb);
- ui.bounds(POLY(syringe_fluid), x, y, h, v);
- cmd.cmd(SAVE_CONTEXT());
- cmd.cmd(SCISSOR_XY(x,y + v * (1.0 - fill_level)));
- cmd.cmd(SCISSOR_SIZE(h, v * fill_level));
- ui.fill(POLY(syringe_fluid), false);
- cmd.cmd(RESTORE_CONTEXT());
-
- ui.color(stroke_rgb);
- ui.fill(POLY(syringe));
- }
-}
-
void LoadChocolateScreen::draw_buttons(draw_mode_t what) {
int16_t x, y, h, v;
@@ -84,10 +48,18 @@ void LoadChocolateScreen::draw_buttons(draw_mode_t what) {
cmd.font(font_medium).colors(normal_btn);
ui.bounds(POLY(load_screen_unload_btn), x, y, h, v);
- cmd.tag(2).button(x, y, h, v, GET_TEXT_F(MSG_FULL_UNLOAD));
+ cmd.tag(2).colors(mydata.repeat_tag == 5 ? action_btn : normal_btn).button(x, y, h, v, GET_TEXT_F(MSG_UNLOAD));
ui.bounds(POLY(load_screen_load_btn), x, y, h, v);
- cmd.tag(3).button(x, y, h, v, GET_TEXT_F(MSG_FULL_LOAD));
+ cmd.tag(3).colors(mydata.repeat_tag == 6 ? action_btn : normal_btn).button(x, y, h, v, GET_TEXT_F(MSG_LOAD));
+
+ ui.bounds(POLY(load_screen_start_stop_btn), x, y, h, v);
+ if(mydata.repeat_tag == 0) {
+ cmd.colors(normal_btn).enabled(false);
+ } else {
+ cmd.colors(mydata.repeating ? action_btn : normal_btn).enabled(true);
+ }
+ cmd.tag(4).button(x, y, h, v, GET_TEXT_F(MSG_START_STOP));
ui.bounds(POLY(load_screen_back_btn), x, y, h, v);
cmd.tag(1).colors(action_btn).button(x, y, h, v, GET_TEXT_F(MSG_BUTTON_DONE));
@@ -102,8 +74,8 @@ void LoadChocolateScreen::draw_text(draw_mode_t what) {
cmd.font(font_medium).cmd(COLOR_RGB(bg_text_enabled));
- ui.bounds(POLY(load_sreen_title), x, y, h, v);
- cmd.tag(2).text(x, y, h, v, GET_TEXT_F(MSG_LOAD_UNLOAD));
+ ui.bounds(POLY(load_screen_continuous), x, y, h, v);
+ cmd.tag(2).text(x, y, h, v, GET_TEXT_F(MSG_CONTINUOUS));
ui.bounds(POLY(load_screen_increment), x, y, h, v);
cmd.tag(3).text(x, y, h, v, GET_TEXT_F(MSG_INCREMENT));
@@ -120,11 +92,12 @@ void LoadChocolateScreen::draw_arrows(draw_mode_t what) {
constexpr uint8_t style = PolyUI::REGULAR;
- ui.button(4, POLY(load_screen_extrude), style);
- ui.button(5, POLY(load_screen_retract), style);
+ ui.button(5, POLY(load_screen_extrude), style);
+ ui.button(6, POLY(load_screen_retract), style);
}
void LoadChocolateScreen::onEntry() {
+ mydata.repeating = false;
mydata.repeat_tag = 0;
}
@@ -136,14 +109,15 @@ void LoadChocolateScreen::onRedraw(draw_mode_t what) {
.tag(0);
}
- draw_syringe(what);
draw_arrows(what);
draw_buttons(what);
draw_text(what);
}
-bool LoadChocolateScreen::onTouchStart(uint8_t) {
- mydata.repeat_tag = 0;
+bool LoadChocolateScreen::onTouchStart(uint8_t tag) {
+ if(tag != 4) {
+ mydata.repeating = false;
+ }
return true;
}
@@ -151,10 +125,13 @@ bool LoadChocolateScreen::onTouchEnd(uint8_t tag) {
using namespace ExtUI;
switch (tag) {
case 2:
- mydata.repeat_tag = (mydata.repeat_tag == 2) ? 0 : 2;
+ mydata.repeat_tag = 5;
break;
case 3:
- mydata.repeat_tag = (mydata.repeat_tag == 3) ? 0 : 3;
+ mydata.repeat_tag = 6;
+ break;
+ case 4:
+ mydata.repeating = !mydata.repeating;
break;
case 1: GOTO_PREVIOUS(); break;
}
@@ -176,26 +153,10 @@ bool LoadChocolateScreen::onTouchHeld(uint8_t tag) {
#define UI_INCREMENT_AXIS(axis) UI_INCREMENT(AxisPosition_mm, axis);
#define UI_DECREMENT_AXIS(axis) UI_DECREMENT(AxisPosition_mm, axis);
switch (tag) {
- case 2: {
- if (get_chocolate_fill_level() < 0.1) {
- mydata.repeat_tag = 0;
- return false;
- }
- UI_INCREMENT_AXIS(E0);
- break;
- }
- case 3: {
- if (get_chocolate_fill_level() > 0.75) {
- mydata.repeat_tag = 0;
- return false;
- }
- UI_DECREMENT_AXIS(E0);
- break;
- }
- case 4:
- UI_INCREMENT_AXIS(E0);
- break;
case 5:
+ UI_INCREMENT_AXIS(E0);
+ break;
+ case 6:
UI_DECREMENT_AXIS(E0);
break;
default: return false;
@@ -207,7 +168,7 @@ bool LoadChocolateScreen::onTouchHeld(uint8_t tag) {
void LoadChocolateScreen::onIdle() {
reset_menu_timeout();
- if (mydata.repeat_tag) onTouchHeld(mydata.repeat_tag);
+ if (mydata.repeating) onTouchHeld(mydata.repeat_tag);
if (refresh_timer.elapsed(STATUS_UPDATE_INTERVAL)) {
if (!EventLoop::is_touch_held())
onRefresh();
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/load_chocolate.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/load_chocolate.h
index 4a582f0212..426669775d 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/load_chocolate.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/load_chocolate.h
@@ -28,11 +28,11 @@
struct LoadChocolateScreenData {
uint8_t repeat_tag;
+ bool repeating;
};
class LoadChocolateScreen : public BaseScreen, public CachedScreen {
private:
- static void draw_syringe(draw_mode_t what);
static void draw_arrows(draw_mode_t what);
static void draw_buttons(draw_mode_t what);
static void draw_text(draw_mode_t what);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_menu.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_menu.cpp
index b01aa81dd4..2fabb81ee4 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_menu.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_menu.cpp
@@ -32,7 +32,7 @@ using namespace Theme;
#define GRID_ROWS 5
void PreheatMenu::onRedraw(draw_mode_t what) {
- const int16_t w = TERN0(COCOA_PRESS_EXTRA_HEATER, has_extra_heater() ? BTN_W(1) : BTN_W(2));
+ const int16_t w = TERN0(COCOA_PRESS_EXTRA_HEATER, has_extra_heater()) ? BTN_W(1) : BTN_W(2);
const int16_t h = BTN_H(1);
if (what & BACKGROUND) {
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/screens.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/screens.h
index 8481e446c4..5276f64f44 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/screens.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/screens.h
@@ -90,7 +90,6 @@ enum {
#include "../generic/spinner_dialog_box.h"
#include "../generic/restore_failsafe_dialog_box.h"
#include "../generic/save_settings_dialog_box.h"
-#include "../generic/confirm_start_print_dialog_box.h"
#include "../generic/confirm_abort_print_dialog_box.h"
#include "../generic/confirm_user_request_alert_box.h"
#include "../generic/touch_calibration_screen.h"
@@ -114,7 +113,6 @@ enum {
#include "../generic/bed_mesh_edit_screen.h"
#include "../generic/case_light_screen.h"
#include "../generic/linear_advance_screen.h"
-#include "../generic/files_screen.h"
#include "../generic/move_axis_screen.h"
#include "../generic/flow_percent_screen.h"
#if HAS_JUNCTION_DEVIATION
@@ -132,3 +130,5 @@ enum {
#include "leveling_menu.h"
#include "move_xyz_screen.h"
#include "move_e_screen.h"
+#include "files_screen.h"
+#include "confirm_start_print_dialog_box.h"
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/status_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/status_screen.cpp
index 00b2d6a094..eddf367239 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/status_screen.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/status_screen.cpp
@@ -29,6 +29,8 @@
#include "cocoa_press_ui.h"
#define POLY(A) PolyUI::poly_reader_t(A, sizeof(A)/sizeof(A[0]))
+#define ICON_POS(x,y,w,h) x, y, h, h
+#define TEXT_POS(x,y,w,h) x + h, y, w - h, h
const uint8_t shadow_depth = 5;
@@ -38,8 +40,28 @@ using namespace ExtUI;
float StatusScreen::increment;
+void StatusScreen::_format_time(char *outstr, uint32_t time) {
+ const uint8_t hrs = time / 3600,
+ min = (time / 60) % 60,
+ sec = time % 60;
+ if (hrs)
+ sprintf_P(outstr, PSTR("%02d:%02d"), hrs, min);
+ else
+ sprintf_P(outstr, PSTR("%02d:%02ds"), min, sec);
+}
+
void StatusScreen::loadBitmaps() {
+ // Load the bitmaps for the status screen
+ using namespace Theme;
constexpr uint32_t base = ftdi_memory_map::RAM_G;
+ CLCD::mem_write_xbm(base + Light_Bulb_Info.RAMG_offset, Light_Bulb, sizeof(Light_Bulb));
+ CLCD::mem_write_xbm(base + Chamber_Icon_Info.RAMG_offset, Chamber_Icon, sizeof(Chamber_Icon));
+ CLCD::mem_write_xbm(base + Clock_Icon_Info.RAMG_offset, Clock_Icon, sizeof(Clock_Icon));
+ CLCD::mem_write_xbm(base + File_Icon_Info.RAMG_offset, File_Icon, sizeof(File_Icon));
+ CLCD::mem_write_xbm(base + TD_Icon_Info.RAMG_offset, TD_Icon, sizeof(TD_Icon));
+ CLCD::mem_write_xbm(base + Extruder_Icon_Info.RAMG_offset, Extruder_Icon, sizeof(Extruder_Icon));
+ CLCD::mem_write_xbm(base + Bed_Heat_Icon_Info.RAMG_offset, Bed_Heat_Icon, sizeof(Bed_Heat_Icon));
+ CLCD::mem_write_xbm(base + Fan_Icon_Info.RAMG_offset, Fan_Icon, sizeof(Fan_Icon));
// Load fonts for internationalization
#if ENABLED(TOUCH_UI_USE_UTF8)
@@ -47,33 +69,50 @@ void StatusScreen::loadBitmaps() {
#endif
}
-void StatusScreen::draw_progress(draw_mode_t what) {
+void StatusScreen::draw_time(draw_mode_t what) {
CommandProcessor cmd;
PolyUI ui(cmd, what);
- int16_t x, y, h, v;
-
- cmd.cmd(COLOR_RGB(accent_color_1));
- cmd.font(font_medium);
+ int16_t x, y, w, h;
+ ui.bounds(POLY(print_time_hms), x, y, w, h);
if (what & BACKGROUND) {
- ui.bounds(POLY(print_time_label), x, y, h, v);
- cmd.text(x, y, h, v, GET_TEXT_F(MSG_ELAPSED_PRINT));
+ cmd.cmd(COLOR_RGB(bg_text_enabled))
+ .cmd (BITMAP_SOURCE(Clock_Icon_Info))
+ .cmd (BITMAP_LAYOUT(Clock_Icon_Info))
+ .cmd (BITMAP_SIZE (Clock_Icon_Info))
+ .icon(ICON_POS(x, y, w, h), Clock_Icon_Info, icon_scale)
+ .cmd(COLOR_RGB(bg_text_enabled));
}
if (what & FOREGROUND) {
const uint32_t elapsed = getProgress_seconds_elapsed();
- const uint8_t hrs = elapsed/3600;
- const uint8_t min = (elapsed/60)%60;
+ char elapsed_str[10];
+ _format_time(elapsed_str, elapsed);
- char str[10];
- sprintf_P(str, PSTR(" %02d : %02d"), hrs, min);
- ui.bounds(POLY(print_time_hms), x, y, h, v);
- cmd.text(x, y, h, v, str);
+ cmd.font(font_medium)
+ .cmd(COLOR_RGB(bg_text_enabled))
+ .text(TEXT_POS(x, y, w, h), elapsed_str);
+ }
+}
- sprintf_P(str, PSTR("%-3d%%"), getProgress_percent() );
- ui.bounds(POLY(print_time_percent), x, y, h, v);
- cmd.text(x, y, h, v, str);
+
+void StatusScreen::draw_progress(draw_mode_t what) {
+ CommandProcessor cmd;
+ PolyUI ui(cmd, what);
+
+ int16_t x, y, w, h;
+
+ cmd.cmd(COLOR_RGB(accent_color_1));
+ cmd.font(font_medium);
+
+ if (what & FOREGROUND) {
+ // Draw progress bar
+ ui.bounds(POLY(file_name), x, y, w, h);
+ const uint16_t bar_width = w * getProgress_percent() / 100;
+ cmd.tag(8)
+ .cmd(COLOR_RGB(accent_color_5))
+ .rectangle(x, y, bar_width, h);
}
}
@@ -81,30 +120,38 @@ void StatusScreen::draw_temperature(draw_mode_t what) {
CommandProcessor cmd;
PolyUI ui(cmd, what);
- int16_t x, y, h, v;
+ int16_t x, y, w, h;
if (what & BACKGROUND) {
cmd.cmd(COLOR_RGB(fluid_rgb));
cmd.font(font_medium).tag(10);
- ui.bounds(POLY(chocolate_label), x, y, h, v);
- cmd.text(x, y, h, v, GET_TEXT_F(MSG_CHOCOLATE));
+ /*ui.bounds(POLY(temp_lbl), x, y, w, h);
+ cmd.text(x, y, w, h, F("Temp"));
- ui.bounds(POLY(h0_label), x, y, h, v);
- cmd.text(x, y, h, v, GET_TEXT_F(MSG_NOZZLE));
+ ui.bounds(POLY(set_lbl), x, y, w, h);
+ cmd.text(x, y, w, h, F("Set"));*/
- ui.bounds(POLY(h1_label), x, y, h, v);
- cmd.text(x, y, h, v, GET_TEXT_F(MSG_BODY));
+ ui.bounds(POLY(chocolate_label), x, y, w, h);
+ cmd.text(x, y, w, h, F("Cocoa Press"));
+
+ ui.bounds(POLY(h0_label), x, y, w, h);
+ cmd.text(x, y, w, h, GET_TEXT_F(MSG_NOZZLE));
+
+ ui.bounds(POLY(h1_label), x, y, w, h);
+ cmd.text(x, y, w, h, GET_TEXT_F(MSG_BODY));
#if ENABLED(COCOA_PRESS_EXTRA_HEATER)
if (has_extra_heater()) {
- ui.bounds(POLY(h2_label), x, y, h, v);
- cmd.text(x, y, h, v, GET_TEXT_F(MSG_EXTERNAL));
+ ui.bounds(POLY(h2_label), x, y, w, h);
+ cmd.text(x, y, w, h, GET_TEXT_F(MSG_EXTERNAL));
}
#endif
- ui.bounds(POLY(h3_label), x, y, h, v);
- cmd.text(x, y, h, v, GET_TEXT_F(MSG_CHAMBER));
+ #if ENABLED(COCOA_PRESS_CHAMBER_COOLER)
+ ui.bounds(POLY(h3_label), x, y, w, h);
+ cmd.text(x, y, w, h, GET_TEXT_F(MSG_CHAMBER));
+ #endif
#if ENABLED(TOUCH_UI_USE_UTF8)
load_utf8_bitmaps(cmd); // Restore font bitmap handles
@@ -117,68 +164,60 @@ void StatusScreen::draw_temperature(draw_mode_t what) {
cmd.font(font_large).tag(10);
+ // Show the actual temperatures
+
format_temp(str, getActualTemp_celsius(E0));
- ui.bounds(POLY(h0_temp), x, y, h, v);
- cmd.text(x, y, h, v, str);
+ ui.bounds(POLY(h0_temp), x, y, w, h);
+ cmd.text(x, y, w, h, str);
format_temp(str, getActualTemp_celsius(E1));
- ui.bounds(POLY(h1_temp), x, y, h, v);
- cmd.text(x, y, h, v, str);
+ ui.bounds(POLY(h1_temp), x, y, w, h);
+ cmd.text(x, y, w, h, str);
#if ENABLED(COCOA_PRESS_EXTRA_HEATER)
if (has_extra_heater()) {
format_temp(str, getActualTemp_celsius(E2));
- ui.bounds(POLY(h2_temp), x, y, h, v);
- cmd.text(x, y, h, v, str);
+ ui.bounds(POLY(h2_temp), x, y, w, h);
+ cmd.text(x, y, w, h, str);
}
#endif
- format_temp(str, getActualTemp_celsius(CHAMBER));
- ui.bounds(POLY(h3_temp), x, y, h, v);
- cmd.text(x, y, h, v, str);
- }
-}
+ #if ENABLED(COCOA_PRESS_CHAMBER_COOLER)
+ format_temp(str, getActualTemp_celsius(CHAMBER));
+ ui.bounds(POLY(h3_temp), x, y, w, h);
+ cmd.text(x, y, w, h, str);
+ #endif
-void StatusScreen::draw_syringe(draw_mode_t what) {
- #if ENABLED(COCOA_PRESS_CHOCOLATE_LEVEL_SENSOR)
- const float fill_level = get_chocolate_fill_level();
- #else
- constexpr float fill_level = 1.0f;
- #endif
+ /*// Show the set temperatures
+ format_temp(str, getTargetTemp_celsius(E0));
+ ui.bounds(POLY(h0_set), x, y, w, h);
+ cmd.text(x, y, w, h, str);
- CommandProcessor cmd;
- PolyUI ui(cmd, what);
+ format_temp(str, getTargetTemp_celsius(E1));
+ ui.bounds(POLY(h1_set), x, y, w, h);
+ cmd.text(x, y, w, h, str);
- if (what & BACKGROUND) {
- // Paint the shadow for the syringe
- ui.color(shadow_rgb);
- ui.shadow(POLY(syringe_outline), shadow_depth);
- }
+ #if ENABLED(COCOA_PRESS_EXTRA_HEATER)
+ if (has_extra_heater()) {
+ format_temp(str, getTargetTemp_celsius(E2));
+ ui.bounds(POLY(h2_set), x, y, w, h);
+ cmd.text(x, y, w, h, str);
+ }
+ #endif
- if (what & FOREGROUND) {
- int16_t x, y, h, v;
-
- // Paint the syringe icon
- ui.color(syringe_rgb);
- ui.fill(POLY(syringe_outline));
-
- ui.color(fluid_rgb);
- ui.bounds(POLY(syringe_fluid), x, y, h, v);
- cmd.cmd(SAVE_CONTEXT());
- cmd.cmd(SCISSOR_XY(x,y + v * (1.0 - fill_level)));
- cmd.cmd(SCISSOR_SIZE(h, v * fill_level));
- ui.fill(POLY(syringe_fluid), false);
- cmd.cmd(RESTORE_CONTEXT());
-
- ui.color(stroke_rgb);
- ui.fill(POLY(syringe));
+ #if ENABLED(COCOA_PRESS_CHAMBER_COOLER)
+ format_temp(str, getTargetTemp_celsius(CHAMBER));
+ ui.bounds(POLY(h3_set), x, y, w, h);
+ cmd.text(x, y, w, h, str);
+ #endif*/
}
}
void StatusScreen::draw_buttons(draw_mode_t what) {
- int16_t x, y, h, v;
+ int16_t x, y, w, h;
- const bool can_print = isMediaInserted() && !isPrintingFromMedia();
+ const bool can_print = !isPrinting() && isMediaInserted() && isFileSelected();
+ const bool can_select = !isPrinting() && isMediaInserted();
const bool sdOrHostPrinting = ExtUI::isPrinting();
const bool sdOrHostPaused = ExtUI::isPrintingPaused();
@@ -187,29 +226,68 @@ void StatusScreen::draw_buttons(draw_mode_t what) {
cmd.font(font_medium).colors(normal_btn);
- ui.bounds(POLY(park_btn), x, y, h, v);
- cmd.tag(1).button(x, y, h, v, GET_TEXT_F(MSG_FILAMENT_PARK_ENABLED));
+ ui.bounds(POLY(load_chocolate_btn), x, y, w, h);
+ cmd.tag(1).button(x, y, w, h, GET_TEXT_F(MSG_LOAD_UNLOAD));
- ui.bounds(POLY(load_chocolate_btn), x, y, h, v);
- cmd.tag(2).button(x, y, h, v, GET_TEXT_F(MSG_LOAD_UNLOAD));
+ ui.bounds(POLY(extrude_btn), x, y, w, h);
+ cmd.tag(2).button(x, y, w, h, GET_TEXT_F(MSG_EXTRUDE));
- ui.bounds(POLY(preheat_chocolate_btn), x, y, h, v);
- cmd.tag(3).button(x, y, h, v, GET_TEXT_F(MSG_PREHEAT_CHOCOLATE));
+ ui.bounds(POLY(preheat_chocolate_btn), x, y, w, h);
+ cmd.tag(3).button(x, y, w, h, GET_TEXT_F(MSG_PREHEAT_CHOCOLATE));
- ui.bounds(POLY(menu_btn), x, y, h, v);
- cmd.tag(4).button(x, y, h, v, GET_TEXT_F(MSG_BUTTON_MENU));
+ ui.bounds(POLY(menu_btn), x, y, w, h);
+ cmd.tag(4).button(x, y, w, h, GET_TEXT_F(MSG_BUTTON_MENU));
- ui.bounds(POLY(pause_btn), x, y, h, v);
- cmd.tag(sdOrHostPaused ? 6 : 5).enabled(sdOrHostPrinting).button(x, y, h, v, sdOrHostPaused ? GET_TEXT_F(MSG_BUTTON_RESUME) : GET_TEXT_F(MSG_BUTTON_PAUSE));
+ ui.bounds(POLY(media_btn), x, y, w, h);
+ cmd.tag(5).enabled(can_select).button(x, y, w, h, GET_TEXT_F(MSG_BUTTON_MEDIA));
- ui.bounds(POLY(stop_btn), x, y, h, v);
- cmd.tag(7).enabled(sdOrHostPrinting).button(x, y, h, v, GET_TEXT_F(MSG_BUTTON_STOP));
+ ui.bounds(POLY(print_btn), x, y, w, h);
+ cmd.tag(6).colors(action_btn).enabled(can_print).button(x, y, w, h, GET_TEXT_F(MSG_BUTTON_PRINT));
- ui.bounds(POLY(extrude_btn), x, y, h, v);
- cmd.tag(8).button(x, y, h, v, GET_TEXT_F(MSG_EXTRUDE));
+ ui.bounds(POLY(pause_btn), x, y, w, h);
+ cmd.tag(sdOrHostPaused ? 8 : 7).enabled(sdOrHostPrinting).button(x, y, w, h, sdOrHostPaused ? GET_TEXT_F(MSG_BUTTON_RESUME) : GET_TEXT_F(MSG_BUTTON_PAUSE));
- ui.bounds(POLY(print_btn), x, y, h, v);
- cmd.tag(9).colors(action_btn).enabled(can_print).button(x, y, h, v, GET_TEXT_F(MSG_BUTTON_PRINT));
+ ui.bounds(POLY(stop_btn), x, y, w, h);
+ cmd.tag(9).enabled(sdOrHostPrinting).button(x, y, w, h, GET_TEXT_F(MSG_BUTTON_STOP));
+}
+
+void StatusScreen::draw_file(draw_mode_t what) {
+ int16_t x, y, w, h;
+
+ CommandProcessor cmd;
+ PolyUI ui(cmd, what);
+
+ ui.bounds(POLY(file_name), x, y, w, h);
+
+ if (what & BACKGROUND) {
+ cmd.tag(5)
+ .cmd(COLOR_RGB(bg_text_enabled))
+ .cmd (BITMAP_SOURCE(File_Icon_Info))
+ .cmd (BITMAP_LAYOUT(File_Icon_Info))
+ .cmd (BITMAP_SIZE (File_Icon_Info))
+ .icon(ICON_POS(x, y, w, h), File_Icon_Info, icon_scale);
+ }
+
+ if (what & FOREGROUND) {
+ cmd.cmd(COLOR_RGB(bg_text_enabled));
+
+ if(!isMediaInserted())
+ draw_text_with_ellipsis(cmd, TEXT_POS(x, y, w, h), F("No media present"), OPT_CENTERY, font_small);
+ else if(isFileSelected()) {
+ FileList list;
+ draw_text_with_ellipsis(cmd, TEXT_POS(x, y, w, h), list.filename(), OPT_CENTERY, font_small);
+ } else
+ draw_text_with_ellipsis(cmd, TEXT_POS(x, y, w, h), F("No file selected"), OPT_CENTERY, font_small);
+ }
+}
+
+bool StatusScreen::isFileSelected() {
+ if(!isMediaInserted()) return false;
+ FileList list;
+ if(list.isDir()) return false;
+ const char *filename = list.filename();
+ if(filename[0] == '\0') return false;
+ return true;
}
void StatusScreen::onRedraw(draw_mode_t what) {
@@ -220,8 +298,9 @@ void StatusScreen::onRedraw(draw_mode_t what) {
.tag(0);
}
+ draw_file(what);
+ draw_time(what);
draw_progress(what);
- draw_syringe(what);
draw_temperature(what);
draw_buttons(what);
}
@@ -233,11 +312,12 @@ bool StatusScreen::onTouchStart(uint8_t) {
bool StatusScreen::onTouchEnd(uint8_t tag) {
switch (tag) {
- case 1: SpinnerDialogBox::enqueueAndWait(F("G28 O\nG27")); break;
- case 2: GOTO_SCREEN(LoadChocolateScreen); break;
+ case 1: GOTO_SCREEN(LoadChocolateScreen); break;
case 3: GOTO_SCREEN(PreheatMenu); break;
case 4: GOTO_SCREEN(MainMenu); break;
- case 5:
+ case 5: GOTO_SCREEN(FilesScreen); break;
+ case 6: GOTO_SCREEN(ConfirmStartPrintDialogBox); break;
+ case 7:
sound.play(twinkle, PLAY_ASYNCHRONOUS);
if (ExtUI::isPrintingFromMedia())
ExtUI::pausePrint();
@@ -246,7 +326,7 @@ bool StatusScreen::onTouchEnd(uint8_t tag) {
#endif
GOTO_SCREEN(StatusScreen);
break;
- case 6:
+ case 8:
sound.play(twinkle, PLAY_ASYNCHRONOUS);
if (ExtUI::isPrintingFromMedia())
ExtUI::resumePrint();
@@ -255,12 +335,12 @@ bool StatusScreen::onTouchEnd(uint8_t tag) {
#endif
GOTO_SCREEN(StatusScreen);
break;
- case 7:
+ case 9:
GOTO_SCREEN(ConfirmAbortPrintDialogBox);
current_screen.forget();
PUSH_SCREEN(StatusScreen);
break;
- case 9: GOTO_SCREEN(FilesScreen); break;
+
case 10: GOTO_SCREEN(TemperatureScreen); break;
default: return false;
}
@@ -271,7 +351,7 @@ bool StatusScreen::onTouchEnd(uint8_t tag) {
}
bool StatusScreen::onTouchHeld(uint8_t tag) {
- if (tag == 8 && !ExtUI::isMoving()) {
+ if (tag == 2 && !ExtUI::isMoving()) {
LoadChocolateScreen::setManualFeedrateAndIncrement(1, increment);
UI_INCREMENT(AxisPosition_mm, E0);
current_screen.onRefresh();
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/status_screen.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/status_screen.h
index 08fb6f26d4..05f99e953d 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/status_screen.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/status_screen.h
@@ -28,17 +28,19 @@
class StatusScreen : public BaseScreen, public CachedScreen {
private:
+ static void _format_time(char *outstr, uint32_t time);
+
static float increment;
static bool jog_xy;
static bool fine_motion;
+ static void draw_time(draw_mode_t what);
static void draw_progress(draw_mode_t what);
static void draw_temperature(draw_mode_t what);
- static void draw_syringe(draw_mode_t what);
- static void draw_arrows(draw_mode_t what);
- static void draw_overlay_icons(draw_mode_t what);
- static void draw_fine_motion(draw_mode_t what);
static void draw_buttons(draw_mode_t what);
+ static void draw_file(draw_mode_t what);
+
+ static bool isFileSelected();
public:
static void loadBitmaps();
static void unlockMotors();
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/max_velocity_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/max_velocity_screen.cpp
index e7fc23ab48..666a7542cc 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/max_velocity_screen.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/max_velocity_screen.cpp
@@ -34,7 +34,7 @@ void MaxVelocityScreen::onRedraw(draw_mode_t what) {
widgets_t w(what);
w.precision(0);
w.units(GET_TEXT_F(MSG_UNITS_MM_S));
- w.heading( GET_TEXT_F(MSG_MAX_SPEED));
+ w.heading( GET_TEXT_F(MSG_MAX_SPEED_NO_UNITS));
w.color(x_axis) .adjuster( 2, GET_TEXT_F(MSG_VMAX_X), getAxisMaxFeedrate_mm_s(X) );
w.color(y_axis) .adjuster( 4, GET_TEXT_F(MSG_VMAX_Y), getAxisMaxFeedrate_mm_s(Y) );
w.color(z_axis) .adjuster( 6, GET_TEXT_F(MSG_VMAX_Z), getAxisMaxFeedrate_mm_s(Z) );
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/language/language_en.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/language/language_en.h
index 5dbde8a5c3..05e625842a 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/language/language_en.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/language/language_en.h
@@ -146,6 +146,7 @@ namespace Language_en {
LSTR MSG_PROBE_BED = u8"Probe Mesh";
LSTR MSG_PRINT_TEST = u8"Print Test (PLA)";
LSTR MSG_MOVE_Z_TO_TOP = u8"Raise Z to Top";
+ LSTR MSG_MAX_SPEED_NO_UNITS = u8"Max Speed";
#if ENABLED(TOUCH_UI_LULZBOT_BIO)
LSTR MSG_MOVE_TO_HOME = u8"Move to Home";
@@ -163,8 +164,9 @@ namespace Language_en {
LSTR MSG_CHOCOLATE = u8"Chocolate";
LSTR MSG_UNLOAD_CARTRIDGE = u8"Unload Cartridge";
LSTR MSG_LOAD_UNLOAD = u8"Load/Unload";
- LSTR MSG_FULL_LOAD = u8"Full Load";
- LSTR MSG_FULL_UNLOAD = u8"Full Unload";
+ LSTR MSG_START_STOP = u8"Start/Stop";
+ LSTR MSG_LOAD = u8"Load";
+ LSTR MSG_UNLOAD = u8"Unload";
LSTR MSG_PREHEAT_CHOCOLATE = u8"Preheat Chocolate";
LSTR MSG_PREHEAT_FINISHED = u8"Preheat finished";
LSTR MSG_PREHEAT = u8"Preheat";
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screen_data.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screen_data.h
index 5d715572fa..48a0c1a964 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screen_data.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screen_data.h
@@ -64,6 +64,7 @@ union screen_data_t {
DECL_DATA_IF_INCLUDED(FTDI_ALERT_DIALOG_BOX)
DECL_DATA_IF_INCLUDED(COCOA_PREHEAT_SCREEN)
DECL_DATA_IF_INCLUDED(COCOA_LOAD_CHOCOLATE_SCREEN)
+ DECL_DATA_IF_INCLUDED(COCOA_FILES_SCREEN)
};
extern screen_data_t screen_data;
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screens.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screens.cpp
index ec627e313b..ed210369c4 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screens.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screens.cpp
@@ -116,6 +116,8 @@ SCREEN_TABLE {
DECL_SCREEN_IF_INCLUDED(COCOA_LEVELING_MENU)
DECL_SCREEN_IF_INCLUDED(COCOA_MOVE_XYZ_SCREEN)
DECL_SCREEN_IF_INCLUDED(COCOA_MOVE_E_SCREEN)
+ DECL_SCREEN_IF_INCLUDED(COCOA_CONFIRM_START_PRINT)
+ DECL_SCREEN_IF_INCLUDED(COCOA_FILES_SCREEN)
};
SCREEN_TABLE_POST
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/marlin_bootscreen_landscape.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/marlin_bootscreen_landscape.h
index 1231d31dc3..4e706a645a 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/marlin_bootscreen_landscape.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/marlin_bootscreen_landscape.h
@@ -1,4 +1,3 @@
-
/****************************************************************************
* 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 *
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/marlin_bootscreen_portrait.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/marlin_bootscreen_portrait.h
index c6065af7f7..ce04239213 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/marlin_bootscreen_portrait.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/marlin_bootscreen_portrait.h
@@ -1,4 +1,3 @@
-
/****************************************************************************
* 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 *
From 49911c8f5d7740071e53d5a38f102ca1b1474dfa Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Thu, 2 Mar 2023 06:06:30 +0000
Subject: [PATCH 71/97] [cron] Bump distribution date (2023-03-02)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 0a78854bd8..23eacec0a0 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-03-01"
+//#define STRING_DISTRIBUTION_DATE "2023-03-02"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 047acad5cf..f99e206846 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-03-01"
+ #define STRING_DISTRIBUTION_DATE "2023-03-02"
#endif
/**
From 593567b4404a73ad1d933a47811ab7a7faae6025 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Fri, 3 Mar 2023 13:42:46 -0600
Subject: [PATCH 72/97] =?UTF-8?q?=F0=9F=93=9D=20Fix=20a=20comment?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/inc/Conditionals_LCD.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h
index bddc0554f5..4e9285e6c1 100644
--- a/Marlin/src/inc/Conditionals_LCD.h
+++ b/Marlin/src/inc/Conditionals_LCD.h
@@ -936,7 +936,7 @@
/**
* Number of Primary Linear Axes (e.g., XYZ)
- * X, XY, or XYZ axes. Excluding duplicate axes (X2, Y2. Z2. Z3, Z4)
+ * X, XY, or XYZ axes. Excluding duplicate axes (X2, Y2, Z2, Z3, Z4)
*/
#if NUM_AXES >= 3
#define PRIMARY_LINEAR_AXES 3
From 13eab74fb8097f9604e5089f9cd2f30183d11f26 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Fri, 3 Mar 2023 14:22:21 -0600
Subject: [PATCH 73/97] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Stepper=20options=20?=
=?UTF-8?q?followup?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Followup to #25422
---
Marlin/Configuration.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 7503fd82da..a83c5822ef 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -1688,7 +1688,7 @@
// @section extruder
-#define DISABLE_E false // Disable the extruder when not stepping
+//#define DISABLE_E // Disable the extruder when not stepping
#define DISABLE_INACTIVE_EXTRUDER // Keep only the active extruder enabled
// @section motion
From 59f30d384cf94202a3bd28ff1b5c1379841f8695 Mon Sep 17 00:00:00 2001
From: jamespearson04
Date: Fri, 3 Mar 2023 20:26:38 +0000
Subject: [PATCH 74/97] =?UTF-8?q?=F0=9F=90=9B=20Fix=20UBL=20'G29=20J'=20me?=
=?UTF-8?q?sh=20tilt=20(#25453)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Fix regression from #24214
---
Marlin/src/feature/bedlevel/ubl/ubl.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.h b/Marlin/src/feature/bedlevel/ubl/ubl.h
index ae69e3cd92..05a937c985 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl.h
+++ b/Marlin/src/feature/bedlevel/ubl/ubl.h
@@ -264,9 +264,9 @@ public:
return UBL_Z_RAISE_WHEN_OFF_MESH;
#endif
- const uint8_t mx = _MIN(cx, (GRID_MAX_POINTS_X) - 2) + 1, my = _MIN(cy, (GRID_MAX_POINTS_Y) - 2) + 1,
- x0 = get_mesh_x(cx), x1 = get_mesh_x(cx + 1);
- const float z1 = calc_z0(rx0, x0, z_values[cx][cy], x1, z_values[mx][cy]),
+ const uint8_t mx = _MIN(cx, (GRID_MAX_POINTS_X) - 2) + 1, my = _MIN(cy, (GRID_MAX_POINTS_Y) - 2) + 1;
+ const float x0 = get_mesh_x(cx), x1 = get_mesh_x(cx + 1),
+ z1 = calc_z0(rx0, x0, z_values[cx][cy], x1, z_values[mx][cy]),
z2 = calc_z0(rx0, x0, z_values[cx][my], x1, z_values[mx][my]);
float z0 = calc_z0(ry0, get_mesh_y(cy), z1, get_mesh_y(cy + 1), z2);
From 3c492793e00c000cf8e56b7853ea45931e0351c4 Mon Sep 17 00:00:00 2001
From: Giuliano Zaro <3684609+GMagician@users.noreply.github.com>
Date: Fri, 3 Mar 2023 21:27:15 +0100
Subject: [PATCH 75/97] =?UTF-8?q?=F0=9F=8C=90=20Update=20Italian=20languag?=
=?UTF-8?q?e=20(#25454)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/lcd/language/language_it.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h
index 0caf950aa5..ad6668112f 100644
--- a/Marlin/src/lcd/language/language_it.h
+++ b/Marlin/src/lcd/language/language_it.h
@@ -577,6 +577,8 @@ namespace Language_it {
LSTR MSG_TOUCHMI_SAVE = _UxGT("Memorizzare");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Estendi TouchMI");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Estendi Sonda-Z");
+ LSTR MSG_MANUAL_PENUP = _UxGT("Penna su");
+ LSTR MSG_MANUAL_PENDOWN = _UxGT("Penna giù");
LSTR MSG_BLTOUCH_STOW = _UxGT("Ritrai BLTouch");
LSTR MSG_MANUAL_STOW = _UxGT("Ritrai Sonda-Z");
LSTR MSG_HOME_FIRST = _UxGT("Home %s prima");
From 8b74df00958062022c7cd8155be3d854876baf24 Mon Sep 17 00:00:00 2001
From: ellensp <530024+ellensp@users.noreply.github.com>
Date: Sat, 4 Mar 2023 09:32:04 +1300
Subject: [PATCH 76/97] =?UTF-8?q?=F0=9F=94=A8=20Fix=20'step'=20type=20in?=
=?UTF-8?q?=20createTemperatureLookupMarlin.py=20(#25455)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../scripts/createTemperatureLookupMarlin.py | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/buildroot/share/scripts/createTemperatureLookupMarlin.py b/buildroot/share/scripts/createTemperatureLookupMarlin.py
index 02981f1015..5902e91a87 100755
--- a/buildroot/share/scripts/createTemperatureLookupMarlin.py
+++ b/buildroot/share/scripts/createTemperatureLookupMarlin.py
@@ -50,7 +50,7 @@ class Thermistor:
if c < 0:
print("//////////////////////////////////////////////////////////////////////////////////////")
- print("// WARNING: negative coefficient 'c'! Something may be wrong with the measurements! //")
+ print("// WARNING: Negative coefficient 'c'! Something may be wrong with the measurements! //")
print("//////////////////////////////////////////////////////////////////////////////////////")
c = -c
self.c1 = a # Steinhart-Hart coefficients
@@ -93,8 +93,8 @@ def main(argv):
r2 = 1641.9 # resistance at middle temperature (1.6 KOhm)
t3 = 250 # high temperature in Kelvin (250 degC)
r3 = 226.15 # resistance at high temperature (226.15 Ohm)
- rp = 4700; # pull-up resistor (4.7 kOhm)
- num_temps = 36; # number of entries for look-up table
+ rp = 4700 # pull-up resistor (4.7 kOhm)
+ num_temps = 36 # number of entries for look-up table
try:
opts, args = getopt.getopt(argv, "h", ["help", "rp=", "t1=", "t2=", "t3=", "num-temps="])
@@ -125,13 +125,13 @@ def main(argv):
num_temps = int(arg)
t = Thermistor(rp, t1, r1, t2, r2, t3, r3)
- increment = int((ARES-1)/(num_temps-1));
- step = (TMIN-TMAX) / (num_temps-1)
- low_bound = t.temp(ARES-1);
- up_bound = t.temp(1);
+ increment = int((ARES - 1) / (num_temps - 1))
+ step = int((TMIN - TMAX) / (num_temps - 1))
+ low_bound = t.temp(ARES - 1)
+ up_bound = t.temp(1)
min_temp = int(TMIN if TMIN > low_bound else low_bound)
max_temp = int(TMAX if TMAX < up_bound else up_bound)
- temps = list(range(max_temp, TMIN+step, step));
+ temps = list(range(max_temp, TMIN + step, step))
print("// Thermistor lookup table for Marlin")
print("// ./createTemperatureLookupMarlin.py --rp=%s --t1=%s:%s --t2=%s:%s --t3=%s:%s --num-temps=%s" % (rp, t1, r1, t2, r2, t3, r3, num_temps))
From c1ced60db0f095b943010a3f3354a43a023bec04 Mon Sep 17 00:00:00 2001
From: tombrazier <68918209+tombrazier@users.noreply.github.com>
Date: Fri, 3 Mar 2023 20:37:10 +0000
Subject: [PATCH 77/97] =?UTF-8?q?=F0=9F=90=9B=20Fix=20ISR=5FSHAPING=5FLOOP?=
=?UTF-8?q?=5FCYCLES=20(#25335)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/module/stepper.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Marlin/src/module/stepper.h b/Marlin/src/module/stepper.h
index 0706451e90..dcb9babde7 100644
--- a/Marlin/src/module/stepper.h
+++ b/Marlin/src/module/stepper.h
@@ -220,7 +220,7 @@
#define ISR_LOOP_CYCLES(R) ((ISR_LOOP_BASE_CYCLES + MIN_ISR_LOOP_CYCLES + MIN_STEPPER_PULSE_CYCLES) * (R - 1) + _MAX(MIN_ISR_LOOP_CYCLES, MIN_STEPPER_PULSE_CYCLES))
// Model input shaping as an extra loop call
-#define ISR_SHAPING_LOOP_CYCLES(R) ((TERN0(HAS_SHAPING, ISR_LOOP_BASE_CYCLES) + TERN0(INPUT_SHAPING_X, ISR_X_STEPPER_CYCLES) + TERN0(INPUT_SHAPING_Y, ISR_Y_STEPPER_CYCLES)) * (R) + (MIN_ISR_LOOP_CYCLES) * (R - 1))
+#define ISR_SHAPING_LOOP_CYCLES(R) TERN0(HAS_SHAPING, (R) * ((ISR_LOOP_BASE_CYCLES) + TERN0(INPUT_SHAPING_X, ISR_X_STEPPER_CYCLES) + TERN0(INPUT_SHAPING_Y, ISR_Y_STEPPER_CYCLES)))
// If linear advance is enabled, then it is handled separately
#if ENABLED(LIN_ADVANCE)
From f359f8818a4b7009d904d687349b63b84350a896 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Sat, 4 Mar 2023 00:28:15 +0000
Subject: [PATCH 78/97] [cron] Bump distribution date (2023-03-04)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 23eacec0a0..462d7595be 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-03-02"
+//#define STRING_DISTRIBUTION_DATE "2023-03-04"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index f99e206846..dc0ea11f2d 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-03-02"
+ #define STRING_DISTRIBUTION_DATE "2023-03-04"
#endif
/**
From e977232735abd759678e8665759dbc214df88202 Mon Sep 17 00:00:00 2001
From: EvilGremlin <22657714+EvilGremlin@users.noreply.github.com>
Date: Sat, 4 Mar 2023 05:43:20 +0300
Subject: [PATCH 79/97] =?UTF-8?q?=E2=9C=A8=20Switching=20extruder/nozzle?=
=?UTF-8?q?=20without=20servo=20(e.g.,=20Dondolo)=20(#24553)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Anson Liu
---
Marlin/Configuration.h | 11 ++++-
Marlin/src/MarlinCore.cpp | 10 ++--
Marlin/src/inc/Conditionals_LCD.h | 17 +++++--
Marlin/src/inc/Conditionals_adv.h | 40 ++++++++--------
Marlin/src/inc/SanityCheck.h | 61 ++++++++++++++++++-------
Marlin/src/lcd/menu/menu_motion.cpp | 4 +-
Marlin/src/module/planner.cpp | 2 +-
Marlin/src/module/stepper/indirection.h | 2 +-
Marlin/src/module/temperature.h | 2 +-
Marlin/src/module/tool_change.cpp | 58 +++++++++++++++++------
Marlin/src/pins/sensitive_pins.h | 4 +-
11 files changed, 145 insertions(+), 66 deletions(-)
diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index a83c5822ef..54a895712d 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -270,7 +270,13 @@
#endif
#endif
-// A dual-nozzle that uses a servomotor to raise/lower one (or both) of the nozzles
+// Switch extruders by bumping the toolhead. Requires EVENT_GCODE_TOOLCHANGE_#.
+//#define MECHANICAL_SWITCHING_EXTRUDER
+
+/**
+ * A dual-nozzle that uses a servomotor to raise/lower one (or both) of the nozzles.
+ * Can be combined with SWITCHING_EXTRUDER.
+ */
//#define SWITCHING_NOZZLE
#if ENABLED(SWITCHING_NOZZLE)
#define SWITCHING_NOZZLE_SERVO_NR 0
@@ -279,6 +285,9 @@
#define SWITCHING_NOZZLE_SERVO_DWELL 2500 // Dwell time to wait for servo to make physical move
#endif
+// Switch nozzles by bumping the toolhead. Requires EVENT_GCODE_TOOLCHANGE_#.
+//#define MECHANICAL_SWITCHING_NOZZLE
+
/**
* Two separate X-carriages with extruders that connect to a moving part
* via a solenoid docking mechanism. Requires SOL1_PIN and SOL2_PIN.
diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp
index 3b704e4f65..ef6bf6aad5 100644
--- a/Marlin/src/MarlinCore.cpp
+++ b/Marlin/src/MarlinCore.cpp
@@ -669,7 +669,7 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
&& ELAPSED(ms, gcode.previous_move_ms + SEC_TO_MS(EXTRUDER_RUNOUT_SECONDS))
&& !planner.has_blocks_queued()
) {
- #if ENABLED(SWITCHING_EXTRUDER)
+ #if HAS_SWITCHING_EXTRUDER
bool oldstatus;
switch (active_extruder) {
default: oldstatus = stepper.AXIS_IS_ENABLED(E_AXIS, 0); stepper.ENABLE_EXTRUDER(0); break;
@@ -683,7 +683,7 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
#endif // E_STEPPERS > 2
#endif // E_STEPPERS > 1
}
- #else // !SWITCHING_EXTRUDER
+ #else // !HAS_SWITCHING_EXTRUDER
bool oldstatus;
switch (active_extruder) {
default:
@@ -699,7 +699,7 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
planner.set_e_position_mm(olde);
planner.synchronize();
- #if ENABLED(SWITCHING_EXTRUDER)
+ #if HAS_SWITCHING_EXTRUDER
switch (active_extruder) {
default: if (oldstatus) stepper.ENABLE_EXTRUDER(0); else stepper.DISABLE_EXTRUDER(0); break;
#if E_STEPPERS > 1
@@ -709,12 +709,12 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
#endif // E_STEPPERS > 2
#endif // E_STEPPERS > 1
}
- #else // !SWITCHING_EXTRUDER
+ #else // !HAS_SWITCHING_EXTRUDER
switch (active_extruder) {
#define _CASE_RESTORE(N) case N: if (oldstatus) stepper.ENABLE_EXTRUDER(N); else stepper.DISABLE_EXTRUDER(N); break;
REPEAT(E_STEPPERS, _CASE_RESTORE);
}
- #endif // !SWITCHING_EXTRUDER
+ #endif // !HAS_SWITCHING_EXTRUDER
gcode.reset_stepper_timeout(ms);
}
diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h
index 4e9285e6c1..0031e17eea 100644
--- a/Marlin/src/inc/Conditionals_LCD.h
+++ b/Marlin/src/inc/Conditionals_LCD.h
@@ -613,7 +613,9 @@
#undef TEMP_SENSOR_7
#undef SINGLENOZZLE
#undef SWITCHING_EXTRUDER
+ #undef MECHANICAL_SWITCHING_EXTRUDER
#undef SWITCHING_NOZZLE
+ #undef MECHANICAL_SWITCHING_NOZZLE
#undef MIXING_EXTRUDER
#undef HOTEND_IDLE_TIMEOUT
#undef DISABLE_E
@@ -629,12 +631,19 @@
#define E_TERN_(N) TERN_(HAS_MULTI_EXTRUDER, N)
#define E_TERN0(N) TERN0(HAS_MULTI_EXTRUDER, N)
+#if EITHER(SWITCHING_EXTRUDER, MECHANICAL_SWITCHING_EXTRUDER)
+ #define HAS_SWITCHING_EXTRUDER 1
+#endif
+#if EITHER(SWITCHING_NOZZLE, MECHANICAL_SWITCHING_NOZZLE)
+ #define HAS_SWITCHING_NOZZLE 1
+#endif
+
#if ENABLED(E_DUAL_STEPPER_DRIVERS) // E0/E1 steppers act in tandem as E0
#define E_STEPPERS 2
#define E_MANUAL 1
-#elif ENABLED(SWITCHING_EXTRUDER) // One stepper for every two EXTRUDERS
+#elif HAS_SWITCHING_EXTRUDER // One stepper for every two EXTRUDERS
#if EXTRUDERS > 4
#define E_STEPPERS 3
@@ -643,7 +652,7 @@
#else
#define E_STEPPERS 1
#endif
- #if DISABLED(SWITCHING_NOZZLE)
+ #if !HAS_SWITCHING_NOZZLE
#define HOTENDS E_STEPPERS
#endif
@@ -668,7 +677,7 @@
#endif
// No inactive extruders with SWITCHING_NOZZLE or Průša MMU1
-#if ENABLED(SWITCHING_NOZZLE) || HAS_PRUSA_MMU1
+#if HAS_SWITCHING_NOZZLE || HAS_PRUSA_MMU1
#undef DISABLE_INACTIVE_EXTRUDER
#endif
@@ -1064,7 +1073,7 @@
#endif
// Switching extruder has its own servo?
-#if ENABLED(SWITCHING_EXTRUDER) && (DISABLED(SWITCHING_NOZZLE) || SWITCHING_EXTRUDER_SERVO_NR != SWITCHING_NOZZLE_SERVO_NR)
+#if ENABLED(SWITCHING_EXTRUDER) && (!HAS_SWITCHING_NOZZLE || SWITCHING_EXTRUDER_SERVO_NR != SWITCHING_NOZZLE_SERVO_NR)
#define DO_SWITCH_EXTRUDER 1
#endif
diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h
index ff2e54e393..5b303e919f 100644
--- a/Marlin/src/inc/Conditionals_adv.h
+++ b/Marlin/src/inc/Conditionals_adv.h
@@ -30,26 +30,26 @@
#define AXIS_RELATIVE_MODES {}
#endif
-#ifdef SWITCHING_NOZZLE_E1_SERVO_NR
+#if defined(SWITCHING_NOZZLE_E1_SERVO_NR) && DISABLED(MECHANICAL_SWITCHING_NOZZLE)
#define SWITCHING_NOZZLE_TWO_SERVOS 1
#endif
// Determine NUM_SERVOS if none was supplied
#ifndef NUM_SERVOS
#define NUM_SERVOS 0
- #if ANY(HAS_Z_SERVO_PROBE, CHAMBER_VENT, SWITCHING_TOOLHEAD, SWITCHING_EXTRUDER, SWITCHING_NOZZLE, SPINDLE_SERVO)
- #if NUM_SERVOS <= Z_PROBE_SERVO_NR
- #undef NUM_SERVOS
- #define NUM_SERVOS (Z_PROBE_SERVO_NR + 1)
- #endif
- #if NUM_SERVOS <= CHAMBER_VENT_SERVO_NR
- #undef NUM_SERVOS
- #define NUM_SERVOS (CHAMBER_VENT_SERVO_NR + 1)
- #endif
- #if NUM_SERVOS <= SWITCHING_TOOLHEAD_SERVO_NR
- #undef NUM_SERVOS
- #define NUM_SERVOS (SWITCHING_TOOLHEAD_SERVO_NR + 1)
- #endif
+ #if HAS_Z_SERVO_PROBE && NUM_SERVOS <= Z_PROBE_SERVO_NR
+ #undef NUM_SERVOS
+ #define NUM_SERVOS (Z_PROBE_SERVO_NR + 1)
+ #endif
+ #if ENABLED(CHAMBER_VENT) && NUM_SERVOS <= CHAMBER_VENT_SERVO_NR
+ #undef NUM_SERVOS
+ #define NUM_SERVOS (CHAMBER_VENT_SERVO_NR + 1)
+ #endif
+ #if ENABLED(SWITCHING_TOOLHEAD) && NUM_SERVOS <= SWITCHING_TOOLHEAD_SERVO_NR
+ #undef NUM_SERVOS
+ #define NUM_SERVOS (SWITCHING_TOOLHEAD_SERVO_NR + 1)
+ #endif
+ #if ENABLED(SWITCHING_NOZZLE)
#if NUM_SERVOS <= SWITCHING_NOZZLE_SERVO_NR
#undef NUM_SERVOS
#define NUM_SERVOS (SWITCHING_NOZZLE_SERVO_NR + 1)
@@ -58,6 +58,8 @@
#undef NUM_SERVOS
#define NUM_SERVOS (SWITCHING_NOZZLE_E1_SERVO_NR + 1)
#endif
+ #endif
+ #if ENABLED(SWITCHING_EXTRUDER)
#if NUM_SERVOS <= SWITCHING_EXTRUDER_SERVO_NR
#undef NUM_SERVOS
#define NUM_SERVOS (SWITCHING_EXTRUDER_SERVO_NR + 1)
@@ -66,12 +68,12 @@
#undef NUM_SERVOS
#define NUM_SERVOS (SWITCHING_EXTRUDER_E23_SERVO_NR + 1)
#endif
- #if NUM_SERVOS <= SPINDLE_SERVO_NR
- #undef NUM_SERVOS
- #define NUM_SERVOS (SPINDLE_SERVO_NR + 1)
- #endif
#endif
-#endif
+ #if ENABLED(SPINDLE_SERVO) && NUM_SERVOS <= SPINDLE_SERVO_NR
+ #undef NUM_SERVOS
+ #define NUM_SERVOS (SPINDLE_SERVO_NR + 1)
+ #endif
+#endif // !defined(NUM_SERVOS)
// Convenience override for a BLTouch alone
#if ENABLED(BLTOUCH) && NUM_SERVOS == 1
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index d5e91932da..54ffcaf0ca 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -1269,20 +1269,34 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
/**
* A Dual Nozzle carriage with switching servo
*/
-#if ENABLED(SWITCHING_NOZZLE)
- #if ENABLED(DUAL_X_CARRIAGE)
+#if BOTH(SWITCHING_NOZZLE, MECHANICAL_SWITCHING_NOZZLE)
+ #error "Enable only one of SWITCHING_NOZZLE or MECHANICAL_SWITCHING_NOZZLE."
+#elif ENABLED(MECHANICAL_SWITCHING_NOZZLE)
+ #if EXTRUDERS != 2
+ #error "MECHANICAL_SWITCHING_NOZZLE requires exactly 2 EXTRUDERS."
+ #elif ENABLED(DUAL_X_CARRIAGE)
+ #error "MECHANICAL_SWITCHING_NOZZLE and DUAL_X_CARRIAGE are incompatible."
+ #elif ENABLED(SINGLENOZZLE)
+ #error "MECHANICAL_SWITCHING_NOZZLE and SINGLENOZZLE are incompatible."
+ #elif HAS_PRUSA_MMU2
+ #error "MECHANICAL_SWITCHING_NOZZLE and PRUSA_MMU2(S) are incompatible."
+ #elif !defined(EVENT_GCODE_TOOLCHANGE_T0)
+ #error "MECHANICAL_SWITCHING_NOZZLE requires EVENT_GCODE_TOOLCHANGE_T0."
+ #elif !defined(EVENT_GCODE_TOOLCHANGE_T1)
+ #error "MECHANICAL_SWITCHING_NOZZLE requires EVENT_GCODE_TOOLCHANGE_T1."
+ #endif
+#elif ENABLED(SWITCHING_NOZZLE)
+ #if EXTRUDERS != 2
+ #error "SWITCHING_NOZZLE requires exactly 2 EXTRUDERS."
+ #elif ENABLED(DUAL_X_CARRIAGE)
#error "SWITCHING_NOZZLE and DUAL_X_CARRIAGE are incompatible."
#elif ENABLED(SINGLENOZZLE)
#error "SWITCHING_NOZZLE and SINGLENOZZLE are incompatible."
#elif HAS_PRUSA_MMU2
#error "SWITCHING_NOZZLE and PRUSA_MMU2(S) are incompatible."
- #elif EXTRUDERS != 2
- #error "SWITCHING_NOZZLE requires exactly 2 EXTRUDERS."
#elif NUM_SERVOS < 1
#error "SWITCHING_NOZZLE requires NUM_SERVOS >= 1."
- #endif
-
- #ifndef SWITCHING_NOZZLE_SERVO_NR
+ #elif !defined(SWITCHING_NOZZLE_SERVO_NR)
#error "SWITCHING_NOZZLE requires SWITCHING_NOZZLE_SERVO_NR."
#elif SWITCHING_NOZZLE_SERVO_NR == 0 && !PIN_EXISTS(SERVO0)
#error "SERVO0_PIN must be defined for your SWITCHING_NOZZLE."
@@ -1293,7 +1307,6 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#elif SWITCHING_NOZZLE_SERVO_NR == 3 && !PIN_EXISTS(SERVO3)
#error "SERVO3_PIN must be defined for your SWITCHING_NOZZLE."
#endif
-
#ifdef SWITCHING_NOZZLE_E1_SERVO_NR
#if SWITCHING_NOZZLE_E1_SERVO_NR == SWITCHING_NOZZLE_SERVO_NR
#error "SWITCHING_NOZZLE_E1_SERVO_NR must be different from SWITCHING_NOZZLE_SERVO_NR."
@@ -1307,14 +1320,26 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#error "SERVO3_PIN must be defined for your SWITCHING_NOZZLE."
#endif
#endif
-#endif
+#endif // SWITCHING_NOZZLE
/**
* Single Stepper Dual Extruder with switching servo
*/
-#if ENABLED(SWITCHING_EXTRUDER)
+#if BOTH(SWITCHING_EXTRUDER, MECHANICAL_SWITCHING_EXTRUDER)
+ #error "Enable only one of SWITCHING_EXTRUDER or MECHANICAL_SWITCHING_EXTRUDER."
+#elif ENABLED(MECHANICAL_SWITCHING_EXTRUDER)
+ #if EXTRUDERS < 2
+ #error "MECHANICAL_SWITCHING_EXTRUDER requires EXTRUDERS >= 2."
+ #elif !defined(EVENT_GCODE_TOOLCHANGE_T0)
+ #error "MECHANICAL_SWITCHING_EXTRUDER requires EVENT_GCODE_TOOLCHANGE_T0."
+ #elif !defined(EVENT_GCODE_TOOLCHANGE_T1)
+ #error "MECHANICAL_SWITCHING_EXTRUDER requires EVENT_GCODE_TOOLCHANGE_T1."
+ #endif
+#elif ENABLED(SWITCHING_EXTRUDER)
#if NUM_SERVOS < 1
#error "SWITCHING_EXTRUDER requires NUM_SERVOS >= 1."
+ #elif !defined(SWITCHING_EXTRUDER_SERVO_NR)
+ #error "SWITCHING_EXTRUDER requires SWITCHING_EXTRUDER_SERVO_NR."
#elif SWITCHING_EXTRUDER_SERVO_NR == 0 && !PIN_EXISTS(SERVO0)
#error "SERVO0_PIN must be defined for your SWITCHING_EXTRUDER."
#elif SWITCHING_EXTRUDER_SERVO_NR == 1 && !PIN_EXISTS(SERVO1)
@@ -1338,8 +1363,10 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#elif SWITCHING_EXTRUDER_E23_SERVO_NR == SWITCHING_EXTRUDER_SERVO_NR
#error "SWITCHING_EXTRUDER_E23_SERVO_NR should be a different extruder from SWITCHING_EXTRUDER_SERVO_NR."
#endif
+ #elif EXTRUDERS < 2
+ #error "SWITCHING_EXTRUDER requires EXTRUDERS >= 2."
#endif
-#endif
+#endif // SWITCHING_EXTRUDER
/**
* Mixing Extruder requirements
@@ -1351,8 +1378,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#error "You must set MIXING_STEPPERS >= 2 for a mixing extruder."
#elif ENABLED(FILAMENT_WIDTH_SENSOR)
#error "MIXING_EXTRUDER is incompatible with FILAMENT_WIDTH_SENSOR. Comment out this line to use it anyway."
- #elif ENABLED(SWITCHING_EXTRUDER)
- #error "Please select either MIXING_EXTRUDER or SWITCHING_EXTRUDER, not both."
+ #elif HAS_SWITCHING_EXTRUDER
+ #error "MIXING_EXTRUDER is incompatible with (MECHANICAL_)SWITCHING_EXTRUDER."
#elif ENABLED(SINGLENOZZLE)
#error "MIXING_EXTRUDER is incompatible with SINGLENOZZLE."
#elif ENABLED(DISABLE_INACTIVE_EXTRUDER)
@@ -1370,8 +1397,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#error "E_DUAL_STEPPER_DRIVERS can only be used with EXTRUDERS set to 1."
#elif ENABLED(MIXING_EXTRUDER)
#error "E_DUAL_STEPPER_DRIVERS is incompatible with MIXING_EXTRUDER."
- #elif ENABLED(SWITCHING_EXTRUDER)
- #error "E_DUAL_STEPPER_DRIVERS is incompatible with SWITCHING_EXTRUDER."
+ #elif HAS_SWITCHING_EXTRUDER
+ #error "E_DUAL_STEPPER_DRIVERS is incompatible with (MECHANICAL_)SWITCHING_EXTRUDER."
#endif
#endif
@@ -2733,8 +2760,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE, "Movement bounds (X_MIN_POS, X_MAX_POS
#error "MULTI_NOZZLE_DUPLICATION is incompatible with DUAL_X_CARRIAGE."
#elif ENABLED(MIXING_EXTRUDER)
#error "MULTI_NOZZLE_DUPLICATION is incompatible with MIXING_EXTRUDER."
- #elif ENABLED(SWITCHING_EXTRUDER)
- #error "MULTI_NOZZLE_DUPLICATION is incompatible with SWITCHING_EXTRUDER."
+ #elif HAS_SWITCHING_EXTRUDER
+ #error "MULTI_NOZZLE_DUPLICATION is incompatible with (MECHANICAL_)SWITCHING_EXTRUDER."
#elif HOTENDS < 2
#error "MULTI_NOZZLE_DUPLICATION requires 2 or more hotends."
#endif
diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp
index 6ce75d59ae..215497c4c9 100644
--- a/Marlin/src/lcd/menu/menu_motion.cpp
+++ b/Marlin/src/lcd/menu/menu_motion.cpp
@@ -232,7 +232,7 @@ void menu_move() {
else
GCODES_ITEM(MSG_AUTO_HOME, FPSTR(G28_STR));
- #if ANY(SWITCHING_EXTRUDER, SWITCHING_NOZZLE, MAGNETIC_SWITCHING_TOOLHEAD)
+ #if ANY(HAS_SWITCHING_EXTRUDER, HAS_SWITCHING_NOZZLE, MAGNETIC_SWITCHING_TOOLHEAD)
#if EXTRUDERS >= 4
switch (active_extruder) {
@@ -265,7 +265,7 @@ void menu_move() {
#define SUBMENU_MOVE_E(N) SUBMENU_N(N, MSG_MOVE_EN, []{ _menu_move_distance(E_AXIS, []{ lcd_move_e(N); }, N); });
- #if EITHER(SWITCHING_EXTRUDER, SWITCHING_NOZZLE)
+ #if HAS_SWITCHING_EXTRUDER || HAS_SWITCHING_NOZZLE
// ...and the non-switching
#if E_MANUAL == 7 || E_MANUAL == 5 || E_MANUAL == 3
diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp
index 583e3686a0..9fb775e03f 100644
--- a/Marlin/src/module/planner.cpp
+++ b/Marlin/src/module/planner.cpp
@@ -2283,7 +2283,7 @@ bool Planner::_populate_block(
if (g_uc_extruder_last_move[i]) g_uc_extruder_last_move[i]--;
// Switching Extruder uses one E stepper motor per two nozzles
- #define E_STEPPER_INDEX(E) TERN(SWITCHING_EXTRUDER, (E) / 2, E)
+ #define E_STEPPER_INDEX(E) TERN(HAS_SWITCHING_EXTRUDER, (E) / 2, E)
// Enable all (i.e., both) E steppers for IDEX-style duplication, but only active E steppers for multi-nozzle (i.e., single wide X carriage) duplication
#define _IS_DUPE(N) TERN0(HAS_DUPLICATION_MODE, (extruder_duplication_enabled && TERN1(MULTI_NOZZLE_DUPLICATION, TEST(duplication_e_mask, N))))
diff --git a/Marlin/src/module/stepper/indirection.h b/Marlin/src/module/stepper/indirection.h
index e9a9aa7de9..81a1377cef 100644
--- a/Marlin/src/module/stepper/indirection.h
+++ b/Marlin/src/module/stepper/indirection.h
@@ -454,7 +454,7 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
/**
* Extruder indirection for the single E axis
*/
-#if ENABLED(SWITCHING_EXTRUDER) // One stepper driver per two extruders, reversed on odd index
+#if HAS_SWITCHING_EXTRUDER // One stepper driver per two extruders, reversed on odd index
#if EXTRUDERS > 7
#define E_STEP_WRITE(E,V) do{ if (E < 2) { E0_STEP_WRITE(V); } else if (E < 4) { E1_STEP_WRITE(V); } else if (E < 6) { E2_STEP_WRITE(V); } else { E3_STEP_WRITE(V); } }while(0)
#define NORM_E_DIR(E) do{ switch (E) { \
diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h
index f86ec90d19..b7f388cbb6 100644
--- a/Marlin/src/module/temperature.h
+++ b/Marlin/src/module/temperature.h
@@ -748,7 +748,7 @@ class Temperature {
static raw_adc_t mintemp_raw_COOLER, maxtemp_raw_COOLER;
#endif
- #if HAS_TEMP_BOARD && ENABLED(THERMAL_PROTECTION_BOARD)
+ #if BOTH(HAS_TEMP_BOARD, THERMAL_PROTECTION_BOARD)
static raw_adc_t mintemp_raw_BOARD, maxtemp_raw_BOARD;
#endif
diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp
index 0defced87e..9955a0f1b0 100644
--- a/Marlin/src/module/tool_change.cpp
+++ b/Marlin/src/module/tool_change.cpp
@@ -1173,7 +1173,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
#endif
// Z raise before retraction
- #if ENABLED(TOOLCHANGE_ZRAISE_BEFORE_RETRACT) && DISABLED(SWITCHING_NOZZLE)
+ #if ENABLED(TOOLCHANGE_ZRAISE_BEFORE_RETRACT) && !HAS_SWITCHING_NOZZLE
if (can_move_away && TERN1(TOOLCHANGE_PARK, toolchange_settings.enable_park)) {
// Do a small lift to avoid the workpiece in the move back (below)
current_position.z += toolchange_settings.z_raise;
@@ -1217,7 +1217,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
#endif
#endif
- #if DISABLED(TOOLCHANGE_ZRAISE_BEFORE_RETRACT) && DISABLED(SWITCHING_NOZZLE)
+ #if NONE(TOOLCHANGE_ZRAISE_BEFORE_RETRACT, HAS_SWITCHING_NOZZLE)
if (can_move_away && TERN1(TOOLCHANGE_PARK, toolchange_settings.enable_park)) {
// Do a small lift to avoid the workpiece in the move back (below)
current_position.z += toolchange_settings.z_raise;
@@ -1227,7 +1227,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
#endif
// Toolchange park
- #if ENABLED(TOOLCHANGE_PARK) && DISABLED(SWITCHING_NOZZLE)
+ #if ENABLED(TOOLCHANGE_PARK) && !HAS_SWITCHING_NOZZLE
if (can_move_away && toolchange_settings.enable_park) {
IF_DISABLED(TOOLCHANGE_PARK_Y_ONLY, current_position.x = toolchange_settings.change_point.x);
IF_DISABLED(TOOLCHANGE_PARK_X_ONLY, current_position.y = toolchange_settings.change_point.y);
@@ -1279,6 +1279,11 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
fast_line_to_current(Z_AXIS);
}
move_nozzle_servo(new_tool);
+ #elif EITHER(MECHANICAL_SWITCHING_EXTRUDER, MECHANICAL_SWITCHING_NOZZLE)
+ if (!no_move) {
+ current_position.z = _MIN(current_position.z + toolchange_settings.z_raise, _MIN(TERN(HAS_SOFTWARE_ENDSTOPS, soft_endstop.max.z, Z_MAX_POS), Z_MAX_POS));
+ fast_line_to_current(Z_AXIS);
+ }
#endif
IF_DISABLED(DUAL_X_CARRIAGE, active_extruder = new_tool); // Set the new active extruder
@@ -1343,15 +1348,19 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
if (toolchange_settings.enable_park) do_blocking_move_to_xy_z(destination, destination.z, MMM_TO_MMS(TOOLCHANGE_PARK_XY_FEEDRATE));
#else
do_blocking_move_to_xy(destination, planner.settings.max_feedrate_mm_s[X_AXIS]);
- do_blocking_move_to_z(destination.z, planner.settings.max_feedrate_mm_s[Z_AXIS]);
- SECONDARY_AXIS_CODE(
- do_blocking_move_to_i(destination.i, planner.settings.max_feedrate_mm_s[I_AXIS]),
- do_blocking_move_to_j(destination.j, planner.settings.max_feedrate_mm_s[J_AXIS]),
- do_blocking_move_to_k(destination.k, planner.settings.max_feedrate_mm_s[K_AXIS]),
- do_blocking_move_to_u(destination.u, planner.settings.max_feedrate_mm_s[U_AXIS]),
- do_blocking_move_to_v(destination.v, planner.settings.max_feedrate_mm_s[V_AXIS]),
- do_blocking_move_to_w(destination.w, planner.settings.max_feedrate_mm_s[W_AXIS])
- );
+
+ // If using MECHANICAL_SWITCHING extruder/nozzle, set HOTEND_OFFSET in Z axis after running EVENT_GCODE_TOOLCHANGE below.
+ #if NONE(MECHANICAL_SWITCHING_EXTRUDER, MECHANICAL_SWITCHING_NOZZLE)
+ do_blocking_move_to_z(destination.z, planner.settings.max_feedrate_mm_s[Z_AXIS]);
+ SECONDARY_AXIS_CODE(
+ do_blocking_move_to_i(destination.i, planner.settings.max_feedrate_mm_s[I_AXIS]),
+ do_blocking_move_to_j(destination.j, planner.settings.max_feedrate_mm_s[J_AXIS]),
+ do_blocking_move_to_k(destination.k, planner.settings.max_feedrate_mm_s[K_AXIS]),
+ do_blocking_move_to_u(destination.u, planner.settings.max_feedrate_mm_s[U_AXIS]),
+ do_blocking_move_to_v(destination.v, planner.settings.max_feedrate_mm_s[V_AXIS]),
+ do_blocking_move_to_w(destination.w, planner.settings.max_feedrate_mm_s[W_AXIS])
+ );
+ #endif
#endif
#endif
@@ -1373,7 +1382,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
TERN_(DUAL_X_CARRIAGE, idex_set_parked(false));
}
- #if ENABLED(SWITCHING_NOZZLE)
+ #if HAS_SWITCHING_NOZZLE
// Move back down. (Including when the new tool is higher.)
if (!should_move)
do_blocking_move_to_z(destination.z, planner.settings.max_feedrate_mm_s[Z_AXIS]);
@@ -1460,6 +1469,29 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
}
#endif
+ // If using MECHANICAL_SWITCHING extruder/nozzle, set HOTEND_OFFSET in Z axis after running EVENT_GCODE_TOOLCHANGE
+ // so that nozzle does not lower below print surface if new hotend Z offset is higher than old hotend Z offset.
+ #if EITHER(MECHANICAL_SWITCHING_EXTRUDER, MECHANICAL_SWITCHING_NOZZLE)
+ #if HAS_HOTEND_OFFSET
+ xyz_pos_t diff = hotend_offset[new_tool] - hotend_offset[old_tool];
+ TERN_(DUAL_X_CARRIAGE, diff.x = 0);
+ #else
+ constexpr xyz_pos_t diff{0};
+ #endif
+
+ if (!no_move) {
+ // Move to new hotend Z offset and reverse Z_RAISE
+ do_blocking_move_to_z(
+ _MIN(
+ _MAX((destination.z - diff.z) - toolchange_settings.z_raise,
+ _MAX(TERN(HAS_SOFTWARE_ENDSTOPS, soft_endstop.min.z, Z_MIN_POS), Z_MIN_POS)
+ ),
+ _MIN(TERN(HAS_SOFTWARE_ENDSTOPS, soft_endstop.max.z, Z_MAX_POS), Z_MAX_POS)),
+ planner.settings.max_feedrate_mm_s[Z_AXIS]
+ );
+ }
+ #endif
+
#ifdef EVENT_GCODE_AFTER_TOOLCHANGE
if (TERN1(DUAL_X_CARRIAGE, dual_x_carriage_mode == DXC_AUTO_PARK_MODE))
gcode.process_subcommands_now(F(EVENT_GCODE_AFTER_TOOLCHANGE));
diff --git a/Marlin/src/pins/sensitive_pins.h b/Marlin/src/pins/sensitive_pins.h
index 061e27faf4..288bcc904e 100644
--- a/Marlin/src/pins/sensitive_pins.h
+++ b/Marlin/src/pins/sensitive_pins.h
@@ -419,7 +419,7 @@
// Mixing stepper, Switching stepper, or regular stepper
#define E_NEEDED(N) (ENABLED(MIXING_EXTRUDER) && MIXING_STEPPERS > N) \
- || (ENABLED(SWITCHING_EXTRUDER) && E_STEPPERS > N) \
+ || (HAS_SWITCHING_EXTRUDER && E_STEPPERS > N) \
|| (NONE(SWITCHING_EXTRUDER, MIXING_EXTRUDER) && EXTRUDERS > N)
#define _E0_CS
@@ -632,7 +632,7 @@
#define _E0_PINS E0_STEP_PIN, E0_DIR_PIN, E0_ENABLE_PIN, _E0_CS _E0_MS1 _E0_MS2 _E0_MS3
#endif
-#if ENABLED(SWITCHING_EXTRUDER)
+#if HAS_SWITCHING_EXTRUDER
// Tools 0 and 1 use E0
#if EXTRUDERS > 2 // Tools 2 and 3 use E1
#undef _E1_PINS
From f0c8c9182090f8929ec4766683ec2d6902d4bc00 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Fri, 3 Mar 2023 20:44:24 -0600
Subject: [PATCH 80/97] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Width?=
=?UTF-8?q?/Magnitude-based=20types=20(#25458)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/HAL/AVR/MarlinSerial.h | 7 +-
Marlin/src/HAL/DUE/MarlinSerial.h | 7 +-
Marlin/src/core/types.h | 25 ++--
Marlin/src/core/utility.h | 12 +-
Marlin/src/feature/direct_stepping.h | 7 +-
Marlin/src/feature/leds/neopixel.h | 2 +-
Marlin/src/feature/max7219.cpp | 2 +-
Marlin/src/feature/spindle_laser_types.h | 2 +-
Marlin/src/lcd/dogm/status_screen_DOGM.cpp | 5 +-
.../lcd/extui/dgus/mks/DGUSScreenHandler.cpp | 111 +++++++++---------
Marlin/src/module/endstops.h | 2 +-
Marlin/src/module/motion.h | 4 +-
Marlin/src/module/planner.cpp | 14 +--
Marlin/src/module/planner.h | 4 +-
Marlin/src/module/stepper.h | 8 +-
15 files changed, 102 insertions(+), 110 deletions(-)
diff --git a/Marlin/src/HAL/AVR/MarlinSerial.h b/Marlin/src/HAL/AVR/MarlinSerial.h
index 7eb76000d6..7dd208e54e 100644
--- a/Marlin/src/HAL/AVR/MarlinSerial.h
+++ b/Marlin/src/HAL/AVR/MarlinSerial.h
@@ -34,6 +34,7 @@
#include
#include "../../inc/MarlinConfigPre.h"
+#include "../../core/types.h"
#include "../../core/serial_hook.h"
#ifndef SERIAL_PORT
@@ -138,10 +139,6 @@
#define BYTE 0
- // Templated type selector
- template struct TypeSelector { typedef T type;} ;
- template struct TypeSelector { typedef F type; };
-
template
class MarlinSerial {
protected:
@@ -164,7 +161,7 @@
static constexpr B_U2Xx B_U2X = 0;
// Base size of type on buffer size
- typedef typename TypeSelector<(Cfg::RX_SIZE>256), uint16_t, uint8_t>::type ring_buffer_pos_t;
+ typedef uvalue_t(Cfg::RX_SIZE - 1) ring_buffer_pos_t;
struct ring_buffer_r {
volatile ring_buffer_pos_t head, tail;
diff --git a/Marlin/src/HAL/DUE/MarlinSerial.h b/Marlin/src/HAL/DUE/MarlinSerial.h
index 5a61bffee0..b80ae21823 100644
--- a/Marlin/src/HAL/DUE/MarlinSerial.h
+++ b/Marlin/src/HAL/DUE/MarlinSerial.h
@@ -30,6 +30,7 @@
#include
#include "../../inc/MarlinConfigPre.h"
+#include "../../core/types.h"
#include "../../core/serial_hook.h"
// Define constants and variables for buffering incoming serial data. We're
@@ -52,10 +53,6 @@
// #error "TX_BUFFER_SIZE must be 0, a power of 2 greater than 1, and no greater than 256."
//#endif
-// Templated type selector
-template struct TypeSelector { typedef T type;} ;
-template struct TypeSelector { typedef F type; };
-
// Templated structure wrapper
template struct StructWrapper {
constexpr StructWrapper(int) {}
@@ -76,7 +73,7 @@ protected:
static constexpr int HWUART_IRQ_ID = IRQ_IDS[Cfg::PORT];
// Base size of type on buffer size
- typedef typename TypeSelector<(Cfg::RX_SIZE>256), uint16_t, uint8_t>::type ring_buffer_pos_t;
+ typedef uvalue_t(Cfg::RX_SIZE - 1) ring_buffer_pos_t;
struct ring_buffer_r {
volatile ring_buffer_pos_t head, tail;
diff --git a/Marlin/src/core/types.h b/Marlin/src/core/types.h
index bae345b496..4e3d7f0782 100644
--- a/Marlin/src/core/types.h
+++ b/Marlin/src/core/types.h
@@ -31,10 +31,8 @@
//
// typename IF<(MYOPT==12), int, float>::type myvar;
//
-template
-struct IF { typedef R type; };
-template
-struct IF { typedef L type; };
+template struct IF { typedef R type; };
+template struct IF { typedef L type; };
#define ALL_AXIS_NAMES X, X2, Y, Y2, Z, Z2, Z3, Z4, I, J, K, U, V, W, E0, E1, E2, E3, E4, E5, E6, E7
@@ -86,20 +84,27 @@ struct IF { typedef L type; };
#define AXIS_COLLISION(L) (AXIS4_NAME == L || AXIS5_NAME == L || AXIS6_NAME == L || AXIS7_NAME == L || AXIS8_NAME == L || AXIS9_NAME == L)
+// Define types based on largest bit width stored value required
+#define bits_t(W) typename IF<((W)> 16), uint32_t, typename IF<((W)> 8), uint16_t, uint8_t>::type>::type
+#define uvalue_t(V) typename IF<((V)>65535), uint32_t, typename IF<((V)>255), uint16_t, uint8_t>::type>::type
+#define value_t(V) typename IF<((V)>32767), int32_t, typename IF<((V)>127), int16_t, int8_t>::type>::type
+
// General Flags for some number of states
template
struct Flags {
- typedef typename IF<(N>8), uint16_t, uint8_t>::type bits_t;
+ typedef value_t(N) flagbits_t;
typedef struct { bool b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1; } N8;
typedef struct { bool b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1, b8:1, b9:1, b10:1, b11:1, b12:1, b13:1, b14:1, b15:1; } N16;
+ typedef struct { bool b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1, b8:1, b9:1, b10:1, b11:1, b12:1, b13:1, b14:1, b15:1,
+ b16:1, b17:1, b18:1, b19:1, b20:1, b21:1, b22:1, b23:1, b24:1, b25:1, b26:1, b27:1, b28:1, b29:1, b30:1, b31:1; } N32;
union {
- bits_t b;
- typename IF<(N>8), N16, N8>::type flag;
+ flagbits_t b;
+ typename IF<(N>16), N32, typename IF<(N>8), N16, N8>::type>::type flag;
};
void reset() { b = 0; }
void set(const int n, const bool onoff) { onoff ? set(n) : clear(n); }
- void set(const int n) { b |= (bits_t)_BV(n); }
- void clear(const int n) { b &= ~(bits_t)_BV(n); }
+ void set(const int n) { b |= (flagbits_t)_BV(n); }
+ void clear(const int n) { b &= ~(flagbits_t)_BV(n); }
bool test(const int n) const { return TEST(b, n); }
bool operator[](const int n) { return test(n); }
bool operator[](const int n) const { return test(n); }
@@ -182,7 +187,7 @@ enum AxisEnum : uint8_t {
, ALL_AXES_ENUM = 0xFE, NO_AXIS_ENUM = 0xFF
};
-typedef IF<(NUM_AXIS_ENUMS > 8), uint16_t, uint8_t>::type axis_bits_t;
+typedef bits_t(NUM_AXIS_ENUMS) axis_bits_t;
//
// Loop over axes
diff --git a/Marlin/src/core/utility.h b/Marlin/src/core/utility.h
index 2731e62b67..c4bb3c2a8a 100644
--- a/Marlin/src/core/utility.h
+++ b/Marlin/src/core/utility.h
@@ -38,12 +38,12 @@ void safe_delay(millis_t ms); // Delay ensuring that temperatures are
// 16x16 bit arrays
template
struct FlagBits {
- typename IF<(W>8), uint16_t, uint8_t>::type bits[H];
- void fill() { memset(bits, 0xFF, sizeof(bits)); }
- void reset() { memset(bits, 0x00, sizeof(bits)); }
- void unmark(const uint8_t x, const uint8_t y) { CBI(bits[y], x); }
- void mark(const uint8_t x, const uint8_t y) { SBI(bits[y], x); }
- bool marked(const uint8_t x, const uint8_t y) { return TEST(bits[y], x); }
+ bits_t(W) flags[H];
+ void fill() { memset(flags, 0xFF, sizeof(flags)); }
+ void reset() { memset(flags, 0x00, sizeof(flags)); }
+ void unmark(const uint8_t x, const uint8_t y) { CBI(flags[y], x); }
+ void mark(const uint8_t x, const uint8_t y) { SBI(flags[y], x); }
+ bool marked(const uint8_t x, const uint8_t y) { return TEST(flags[y], x); }
inline void unmark(const xy_int8_t &xy) { unmark(xy.x, xy.y); }
inline void mark(const xy_int8_t &xy) { mark(xy.x, xy.y); }
inline bool marked(const xy_int8_t &xy) { return marked(xy.x, xy.y); }
diff --git a/Marlin/src/feature/direct_stepping.h b/Marlin/src/feature/direct_stepping.h
index 962310281e..b8a803f811 100644
--- a/Marlin/src/feature/direct_stepping.h
+++ b/Marlin/src/feature/direct_stepping.h
@@ -80,9 +80,6 @@ namespace DirectStepping {
static void set_page_state(const page_idx_t page_idx, const PageState page_state);
};
- template struct TypeSelector { typedef T type;} ;
- template struct TypeSelector { typedef F type; };
-
template
struct config_t {
static constexpr char CONTROL_CHAR = '!';
@@ -98,8 +95,8 @@ namespace DirectStepping {
static constexpr int TOTAL_STEPS = SEGMENT_STEPS * SEGMENTS;
static constexpr int PAGE_SIZE = (AXIS_COUNT * BITS_SEGMENT * SEGMENTS) / 8;
- typedef typename TypeSelector<(PAGE_SIZE>256), uint16_t, uint8_t>::type write_byte_idx_t;
- typedef typename TypeSelector<(PAGE_COUNT>256), uint16_t, uint8_t>::type page_idx_t;
+ typedef uvalue_t(PAGE_SIZE - 1) write_byte_idx_t;
+ typedef uvalue_t(PAGE_COUNT - 1) page_idx_t;
};
template
diff --git a/Marlin/src/feature/leds/neopixel.h b/Marlin/src/feature/leds/neopixel.h
index 7c8d018013..3801ded6aa 100644
--- a/Marlin/src/feature/leds/neopixel.h
+++ b/Marlin/src/feature/leds/neopixel.h
@@ -66,7 +66,7 @@
// Types
// ------------------------
-typedef IF<(TERN0(NEOPIXEL_LED, NEOPIXEL_PIXELS > 127)), int16_t, int8_t>::type pixel_index_t;
+typedef value_t(TERN0(NEOPIXEL_LED, NEOPIXEL_PIXELS)) pixel_index_t;
// ------------------------
// Classes
diff --git a/Marlin/src/feature/max7219.cpp b/Marlin/src/feature/max7219.cpp
index 2fdfcba32d..83d161d1fe 100644
--- a/Marlin/src/feature/max7219.cpp
+++ b/Marlin/src/feature/max7219.cpp
@@ -471,7 +471,7 @@ void Max7219::register_setup() {
constexpr millis_t pattern_delay = 4;
int8_t spiralx, spiraly, spiral_dir;
- IF<(MAX7219_LEDS > 255), uint16_t, uint8_t>::type spiral_count;
+ uvalue_t(MAX7219_LEDS) spiral_count;
void Max7219::test_pattern() {
constexpr int8_t way[][2] = { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } };
diff --git a/Marlin/src/feature/spindle_laser_types.h b/Marlin/src/feature/spindle_laser_types.h
index 2f36a68a1a..4e5e4d06f6 100644
--- a/Marlin/src/feature/spindle_laser_types.h
+++ b/Marlin/src/feature/spindle_laser_types.h
@@ -57,7 +57,7 @@
#endif
#endif
-typedef IF<(SPEED_POWER_MAX > 255), uint16_t, uint8_t>::type cutter_cpower_t;
+typedef uvalue_t(SPEED_POWER_MAX) cutter_cpower_t;
#if CUTTER_UNIT_IS(RPM) && SPEED_POWER_MAX > 255
typedef uint16_t cutter_power_t;
diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
index 091c531abb..22e71251ff 100644
--- a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
+++ b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
@@ -96,9 +96,10 @@
DRAWBIT_HOTEND,
DRAWBIT_BED = HOTENDS,
DRAWBIT_CHAMBER,
- DRAWBIT_CUTTER
+ DRAWBIT_CUTTER,
+ DRAWBIT_COUNT
};
- IF<(DRAWBIT_CUTTER > 7), uint16_t, uint8_t>::type draw_bits;
+ bits_t(DRAWBIT_COUNT) draw_bits;
#endif
#if ANIM_HOTEND
diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp
index 3cf0c32648..2dd4d0d19e 100644
--- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp
@@ -368,8 +368,8 @@ void DGUSScreenHandlerMKS::EEPROM_CTRL(DGUS_VP_Variable &var, void *val_ptr) {
}
void DGUSScreenHandlerMKS::Z_offset_select(DGUS_VP_Variable &var, void *val_ptr) {
- const uint16_t z_value = BE16_P(val_ptr);
- switch (z_value) {
+ const uint16_t z = BE16_P(val_ptr);
+ switch (z) {
case 0: Z_distance = 0.01; break;
case 1: Z_distance = 0.1; break;
case 2: Z_distance = 0.5; break;
@@ -477,7 +477,7 @@ void DGUSScreenHandlerMKS::MeshLevelDistanceConfig(DGUS_VP_Variable &var, void *
void DGUSScreenHandlerMKS::MeshLevel(DGUS_VP_Variable &var, void *val_ptr) {
#if ENABLED(MESH_BED_LEVELING)
- const uint16_t mesh_value = BE16_P(val_ptr);
+ const uint16_t mesh_val = BE16_P(val_ptr);
// static uint8_t a_first_level = 1;
char cmd_buf[30];
float offset = mesh_adj_distance;
@@ -485,7 +485,7 @@ void DGUSScreenHandlerMKS::MeshLevel(DGUS_VP_Variable &var, void *val_ptr) {
if (!queue.ring_buffer.empty()) return;
- switch (mesh_value) {
+ switch (mesh_val) {
case 0:
offset = mesh_adj_distance;
integer = offset; // get int
@@ -575,20 +575,19 @@ void DGUSScreenHandlerMKS::SD_FileBack(DGUS_VP_Variable&, void*) {
}
void DGUSScreenHandlerMKS::LCD_BLK_Adjust(DGUS_VP_Variable &var, void *val_ptr) {
-
- const uint16_t lcd_value = BE16_P(val_ptr);
- lcd_default_light = constrain(lcd_value, 10, 100);
+ const uint16_t lcd_val = BE16_P(val_ptr);
+ lcd_default_light = constrain(lcd_val, 10, 100);
const uint16_t lcd_data[2] = { lcd_default_light, lcd_default_light };
dgusdisplay.WriteVariable(0x0082, &lcd_data, 5, true);
}
void DGUSScreenHandlerMKS::ManualAssistLeveling(DGUS_VP_Variable &var, void *val_ptr) {
- const int16_t point_value = BE16_P(val_ptr);
+ const int16_t point_val = BE16_P(val_ptr);
// Insist on leveling first time at this screen
static bool first_level_flag = false;
- if (!first_level_flag || point_value == 0x0001) {
+ if (!first_level_flag || point_val == 0x0001) {
queue.enqueue_now_P(G28_STR);
first_level_flag = true;
}
@@ -601,10 +600,10 @@ void DGUSScreenHandlerMKS::ManualAssistLeveling(DGUS_VP_Variable &var, void *val
queue.enqueue_one_now(buf_level);
};
- if (WITHIN(point_value, 0x0001, 0x0005))
+ if (WITHIN(point_val, 0x0001, 0x0005))
queue.enqueue_now(F("G1Z10"));
- switch (point_value) {
+ switch (point_val) {
case 0x0001:
enqueue_corner_move(X_MIN_POS + ABS(mks_corner_offsets[0].x),
Y_MIN_POS + ABS(mks_corner_offsets[0].y), level_speed);
@@ -628,7 +627,7 @@ void DGUSScreenHandlerMKS::ManualAssistLeveling(DGUS_VP_Variable &var, void *val
break;
}
- if (WITHIN(point_value, 0x0002, 0x0005)) {
+ if (WITHIN(point_val, 0x0002, 0x0005)) {
//queue.enqueue_now(F("G28Z"));
queue.enqueue_now(F("G1Z-10"));
}
@@ -638,14 +637,14 @@ void DGUSScreenHandlerMKS::ManualAssistLeveling(DGUS_VP_Variable &var, void *val
#define mks_max(a, b) ((a) > (b)) ? (a) : (b)
void DGUSScreenHandlerMKS::TMC_ChangeConfig(DGUS_VP_Variable &var, void *val_ptr) {
#if EITHER(HAS_TRINAMIC_CONFIG, HAS_STEALTHCHOP)
- const uint16_t tmc_value = BE16_P(val_ptr);
+ const uint16_t tmc_val = BE16_P(val_ptr);
#endif
switch (var.VP) {
case VP_TMC_X_STEP:
#if USE_SENSORLESS
#if X_HAS_STEALTHCHOP
- stepperX.homing_threshold(mks_min(tmc_value, 255));
+ stepperX.homing_threshold(mks_min(tmc_val, 255));
settings.save();
//tmc_step.x = stepperX.homing_threshold();
#endif
@@ -654,7 +653,7 @@ void DGUSScreenHandlerMKS::TMC_ChangeConfig(DGUS_VP_Variable &var, void *val_ptr
case VP_TMC_Y_STEP:
#if USE_SENSORLESS
#if Y_HAS_STEALTHCHOP
- stepperY.homing_threshold(mks_min(tmc_value, 255));
+ stepperY.homing_threshold(mks_min(tmc_val, 255));
settings.save();
//tmc_step.y = stepperY.homing_threshold();
#endif
@@ -663,7 +662,7 @@ void DGUSScreenHandlerMKS::TMC_ChangeConfig(DGUS_VP_Variable &var, void *val_ptr
case VP_TMC_Z_STEP:
#if USE_SENSORLESS
#if Z_HAS_STEALTHCHOP
- stepperZ.homing_threshold(mks_min(tmc_value, 255));
+ stepperZ.homing_threshold(mks_min(tmc_val, 255));
settings.save();
//tmc_step.z = stepperZ.homing_threshold();
#endif
@@ -671,49 +670,49 @@ void DGUSScreenHandlerMKS::TMC_ChangeConfig(DGUS_VP_Variable &var, void *val_ptr
break;
case VP_TMC_X_Current:
#if AXIS_IS_TMC(X)
- stepperX.rms_current(tmc_value);
+ stepperX.rms_current(tmc_val);
settings.save();
#endif
break;
case VP_TMC_X1_Current:
#if AXIS_IS_TMC(X2)
- stepperX2.rms_current(tmc_value);
+ stepperX2.rms_current(tmc_val);
settings.save();
#endif
break;
case VP_TMC_Y_Current:
#if AXIS_IS_TMC(Y)
- stepperY.rms_current(tmc_value);
+ stepperY.rms_current(tmc_val);
settings.save();
#endif
break;
case VP_TMC_Y1_Current:
#if AXIS_IS_TMC(X2)
- stepperY2.rms_current(tmc_value);
+ stepperY2.rms_current(tmc_val);
settings.save();
#endif
break;
case VP_TMC_Z_Current:
#if AXIS_IS_TMC(Z)
- stepperZ.rms_current(tmc_value);
+ stepperZ.rms_current(tmc_val);
settings.save();
#endif
break;
case VP_TMC_Z1_Current:
#if AXIS_IS_TMC(Z2)
- stepperZ2.rms_current(tmc_value);
+ stepperZ2.rms_current(tmc_val);
settings.save();
#endif
break;
case VP_TMC_E0_Current:
#if AXIS_IS_TMC(E0)
- stepperE0.rms_current(tmc_value);
+ stepperE0.rms_current(tmc_val);
settings.save();
#endif
break;
case VP_TMC_E1_Current:
#if AXIS_IS_TMC(E1)
- stepperE1.rms_current(tmc_value);
+ stepperE1.rms_current(tmc_val);
settings.save();
#endif
break;
@@ -849,29 +848,29 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
}
void DGUSScreenHandlerMKS::GetParkPos(DGUS_VP_Variable &var, void *val_ptr) {
- const int16_t value_pos = BE16_P(val_ptr);
+ const int16_t pos = BE16_P(val_ptr);
switch (var.VP) {
- case VP_X_PARK_POS: mks_park_pos.x = value_pos; break;
- case VP_Y_PARK_POS: mks_park_pos.y = value_pos; break;
- case VP_Z_PARK_POS: mks_park_pos.z = value_pos; break;
+ case VP_X_PARK_POS: mks_park_pos.x = pos; break;
+ case VP_Y_PARK_POS: mks_park_pos.y = pos; break;
+ case VP_Z_PARK_POS: mks_park_pos.z = pos; break;
default: break;
}
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
void DGUSScreenHandlerMKS::HandleChangeLevelPoint(DGUS_VP_Variable &var, void *val_ptr) {
- const int16_t value_raw = BE16_P(val_ptr);
+ const int16_t raw = BE16_P(val_ptr);
- *(int16_t*)var.memadr = value_raw;
+ *(int16_t*)var.memadr = raw;
settings.save();
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
void DGUSScreenHandlerMKS::HandleStepPerMMChanged(DGUS_VP_Variable &var, void *val_ptr) {
- const uint16_t value_raw = BE16_P(val_ptr);
- const float value = (float)value_raw;
+ const uint16_t raw = BE16_P(val_ptr);
+ const float value = (float)raw;
ExtUI::axis_t axis;
switch (var.VP) {
@@ -886,8 +885,8 @@ void DGUSScreenHandlerMKS::HandleStepPerMMChanged(DGUS_VP_Variable &var, void *v
}
void DGUSScreenHandlerMKS::HandleStepPerMMExtruderChanged(DGUS_VP_Variable &var, void *val_ptr) {
- const uint16_t value_raw = BE16_P(val_ptr);
- const float value = (float)value_raw;
+ const uint16_t raw = BE16_P(val_ptr);
+ const float value = (float)raw;
ExtUI::extruder_t extruder;
switch (var.VP) {
@@ -905,8 +904,8 @@ void DGUSScreenHandlerMKS::HandleStepPerMMExtruderChanged(DGUS_VP_Variable &var,
}
void DGUSScreenHandlerMKS::HandleMaxSpeedChange(DGUS_VP_Variable &var, void *val_ptr) {
- const uint16_t value_raw = BE16_P(val_ptr);
- const float value = (float)value_raw;
+ const uint16_t raw = BE16_P(val_ptr);
+ const float value = (float)raw;
ExtUI::axis_t axis;
switch (var.VP) {
@@ -921,8 +920,8 @@ void DGUSScreenHandlerMKS::HandleMaxSpeedChange(DGUS_VP_Variable &var, void *val
}
void DGUSScreenHandlerMKS::HandleExtruderMaxSpeedChange(DGUS_VP_Variable &var, void *val_ptr) {
- const uint16_t value_raw = BE16_P(val_ptr);
- const float value = (float)value_raw;
+ const uint16_t raw = BE16_P(val_ptr);
+ const float value = (float)raw;
ExtUI::extruder_t extruder;
switch (var.VP) {
@@ -940,8 +939,8 @@ void DGUSScreenHandlerMKS::HandleExtruderMaxSpeedChange(DGUS_VP_Variable &var, v
}
void DGUSScreenHandlerMKS::HandleMaxAccChange(DGUS_VP_Variable &var, void *val_ptr) {
- const uint16_t value_raw = BE16_P(val_ptr);
- const float value = (float)value_raw;
+ const uint16_t raw = BE16_P(val_ptr);
+ const float value = (float)raw;
ExtUI::axis_t axis;
switch (var.VP) {
@@ -956,8 +955,8 @@ void DGUSScreenHandlerMKS::HandleMaxAccChange(DGUS_VP_Variable &var, void *val_p
}
void DGUSScreenHandlerMKS::HandleExtruderAccChange(DGUS_VP_Variable &var, void *val_ptr) {
- uint16_t value_raw = BE16_P(val_ptr);
- float value = (float)value_raw;
+ uint16_t raw = BE16_P(val_ptr);
+ float value = (float)raw;
ExtUI::extruder_t extruder;
switch (var.VP) {
default: return;
@@ -974,33 +973,33 @@ void DGUSScreenHandlerMKS::HandleExtruderAccChange(DGUS_VP_Variable &var, void *
}
void DGUSScreenHandlerMKS::HandleTravelAccChange(DGUS_VP_Variable &var, void *val_ptr) {
- uint16_t value_travel = BE16_P(val_ptr);
- planner.settings.travel_acceleration = (float)value_travel;
+ uint16_t travel = BE16_P(val_ptr);
+ planner.settings.travel_acceleration = (float)travel;
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
void DGUSScreenHandlerMKS::HandleFeedRateMinChange(DGUS_VP_Variable &var, void *val_ptr) {
- uint16_t value_t = BE16_P(val_ptr);
- planner.settings.min_feedrate_mm_s = (float)value_t;
+ uint16_t t = BE16_P(val_ptr);
+ planner.settings.min_feedrate_mm_s = (float)t;
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
void DGUSScreenHandlerMKS::HandleMin_T_F(DGUS_VP_Variable &var, void *val_ptr) {
- uint16_t value_t_f = BE16_P(val_ptr);
- planner.settings.min_travel_feedrate_mm_s = (float)value_t_f;
+ uint16_t t_f = BE16_P(val_ptr);
+ planner.settings.min_travel_feedrate_mm_s = (float)t_f;
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
void DGUSScreenHandlerMKS::HandleAccChange(DGUS_VP_Variable &var, void *val_ptr) {
- uint16_t value_acc = BE16_P(val_ptr);
- planner.settings.acceleration = (float)value_acc;
+ uint16_t acc = BE16_P(val_ptr);
+ planner.settings.acceleration = (float)acc;
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
#if ENABLED(PREVENT_COLD_EXTRUSION)
void DGUSScreenHandlerMKS::HandleGetExMinTemp(DGUS_VP_Variable &var, void *val_ptr) {
- const uint16_t value_ex_min_temp = BE16_P(val_ptr);
- thermalManager.extrude_min_temp = value_ex_min_temp;
+ const uint16_t ex_min_temp = BE16_P(val_ptr);
+ thermalManager.extrude_min_temp = ex_min_temp;
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
#endif
@@ -1080,8 +1079,8 @@ void DGUSScreenHandlerMKS::HandleAccChange(DGUS_VP_Variable &var, void *val_ptr)
#endif // BABYSTEPPING
void DGUSScreenHandlerMKS::GetManualFilament(DGUS_VP_Variable &var, void *val_ptr) {
- const uint16_t value_len = BE16_P(val_ptr);
- const float value = (float)value_len;
+ const uint16_t len = BE16_P(val_ptr);
+ const float value = (float)len;
distanceFilament = value;
@@ -1089,8 +1088,8 @@ void DGUSScreenHandlerMKS::GetManualFilament(DGUS_VP_Variable &var, void *val_pt
}
void DGUSScreenHandlerMKS::GetManualFilamentSpeed(DGUS_VP_Variable &var, void *val_ptr) {
- const uint16_t value_len = BE16_P(val_ptr);
- filamentSpeed_mm_s = value_len;
+ const uint16_t len = BE16_P(val_ptr);
+ filamentSpeed_mm_s = len;
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
}
diff --git a/Marlin/src/module/endstops.h b/Marlin/src/module/endstops.h
index 4d64455b21..36cd002c8f 100644
--- a/Marlin/src/module/endstops.h
+++ b/Marlin/src/module/endstops.h
@@ -115,7 +115,7 @@ enum EndstopEnum : char {
class Endstops {
public:
- typedef IF<(NUM_ENDSTOP_STATES > 8), uint16_t, uint8_t>::type endstop_mask_t;
+ typedef bits_t(NUM_ENDSTOP_STATES) endstop_mask_t;
#if ENABLED(X_DUAL_ENDSTOPS)
static float x2_endstop_adj;
diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h
index 2acc54ebc2..611d3a17bd 100644
--- a/Marlin/src/module/motion.h
+++ b/Marlin/src/module/motion.h
@@ -411,10 +411,10 @@ void restore_feedrate_and_scaling();
/**
* Homing and Trusted Axes
*/
-typedef IF<(NUM_AXES > 8), uint16_t, uint8_t>::type main_axes_bits_t;
+typedef bits_t(NUM_AXES) main_axes_bits_t;
constexpr main_axes_bits_t main_axes_mask = _BV(NUM_AXES) - 1;
-typedef IF<(NUM_AXES + EXTRUDERS > 8), uint16_t, uint8_t>::type e_axis_bits_t;
+typedef bits_t(NUM_AXES + EXTRUDERS) e_axis_bits_t;
constexpr e_axis_bits_t e_axis_mask = (_BV(EXTRUDERS) - 1) << NUM_AXES;
void set_axis_is_at_home(const AxisEnum axis);
diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp
index 9fb775e03f..12e879af96 100644
--- a/Marlin/src/module/planner.cpp
+++ b/Marlin/src/module/planner.cpp
@@ -216,7 +216,7 @@ xyze_float_t Planner::previous_speed;
float Planner::previous_nominal_speed;
#if ENABLED(DISABLE_INACTIVE_EXTRUDER)
- last_move_t Planner::g_uc_extruder_last_move[E_STEPPERS] = { 0 };
+ last_move_t Planner::extruder_last_move[E_STEPPERS] = { 0 };
#endif
#ifdef XY_FREQUENCY_LIMIT
@@ -2280,7 +2280,7 @@ bool Planner::_populate_block(
// Count down all steppers that were recently moved
LOOP_L_N(i, E_STEPPERS)
- if (g_uc_extruder_last_move[i]) g_uc_extruder_last_move[i]--;
+ if (extruder_last_move[i]) extruder_last_move[i]--;
// Switching Extruder uses one E stepper motor per two nozzles
#define E_STEPPER_INDEX(E) TERN(HAS_SWITCHING_EXTRUDER, (E) / 2, E)
@@ -2289,12 +2289,12 @@ bool Planner::_populate_block(
#define _IS_DUPE(N) TERN0(HAS_DUPLICATION_MODE, (extruder_duplication_enabled && TERN1(MULTI_NOZZLE_DUPLICATION, TEST(duplication_e_mask, N))))
#define ENABLE_ONE_E(N) do{ \
- if (N == E_STEPPER_INDEX(extruder) || _IS_DUPE(N)) { /* N is 'extruder', or N is duplicating */ \
- stepper.ENABLE_EXTRUDER(N); /* Enable the relevant E stepper... */ \
- g_uc_extruder_last_move[N] = (BLOCK_BUFFER_SIZE) * 2; /* ...and reset its counter */ \
+ if (N == E_STEPPER_INDEX(extruder) || _IS_DUPE(N)) { /* N is 'extruder', or N is duplicating */ \
+ stepper.ENABLE_EXTRUDER(N); /* Enable the relevant E stepper... */ \
+ extruder_last_move[N] = (BLOCK_BUFFER_SIZE) * 2; /* ...and reset its counter */ \
} \
- else if (!g_uc_extruder_last_move[N]) /* Counter expired since last E stepper enable */ \
- stepper.DISABLE_EXTRUDER(N); /* Disable the E stepper */ \
+ else if (!extruder_last_move[N]) /* Counter expired since last E stepper enable */ \
+ stepper.DISABLE_EXTRUDER(N); /* Disable the E stepper */ \
}while(0);
#else
diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h
index b63fabb84d..9497912d2f 100644
--- a/Marlin/src/module/planner.h
+++ b/Marlin/src/module/planner.h
@@ -353,7 +353,7 @@ typedef struct {
#endif
#if ENABLED(DISABLE_INACTIVE_EXTRUDER)
- typedef IF<(BLOCK_BUFFER_SIZE > 64), uint16_t, uint8_t>::type last_move_t;
+ typedef uvalue_t(BLOCK_BUFFER_SIZE * 2) last_move_t;
#endif
#if ENABLED(ARC_SUPPORT)
@@ -535,7 +535,7 @@ class Planner {
#if ENABLED(DISABLE_INACTIVE_EXTRUDER)
// Counters to manage disabling inactive extruder steppers
- static last_move_t g_uc_extruder_last_move[E_STEPPERS];
+ static last_move_t extruder_last_move[E_STEPPERS];
#endif
#if HAS_WIRED_LCD
diff --git a/Marlin/src/module/stepper.h b/Marlin/src/module/stepper.h
index dcb9babde7..05f609c9f3 100644
--- a/Marlin/src/module/stepper.h
+++ b/Marlin/src/module/stepper.h
@@ -263,11 +263,7 @@
#define MIN_STEP_ISR_FREQUENCY (MAX_STEP_ISR_FREQUENCY_1X / 2)
#define ENABLE_COUNT (NUM_AXES + E_STEPPERS)
-#if ENABLE_COUNT > 16
- typedef uint32_t ena_mask_t;
-#else
- typedef IF<(ENABLE_COUNT > 8), uint16_t, uint8_t>::type ena_mask_t;
-#endif
+typedef bits_t(ENABLE_COUNT) ena_mask_t;
// Axis flags type, for enabled state or other simple state
typedef struct {
@@ -358,7 +354,7 @@ constexpr ena_mask_t enable_overlap[] = {
constexpr uint16_t shaping_min_freq = SHAPING_MIN_FREQ,
shaping_echoes = max_step_rate / shaping_min_freq / 2 + 3;
- typedef IF::type shaping_time_t;
+ typedef hal_timer_t shaping_time_t;
enum shaping_echo_t { ECHO_NONE = 0, ECHO_FWD = 1, ECHO_BWD = 2 };
struct shaping_echo_axis_t {
TERN_(INPUT_SHAPING_X, shaping_echo_t x:2);
From f3f7b1e7e337f9590b7805651969ae88b58a903f Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Sun, 5 Mar 2023 00:26:20 +0000
Subject: [PATCH 81/97] [cron] Bump distribution date (2023-03-05)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 462d7595be..09916dd851 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-03-04"
+//#define STRING_DISTRIBUTION_DATE "2023-03-05"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index dc0ea11f2d..9d1c614d6f 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-03-04"
+ #define STRING_DISTRIBUTION_DATE "2023-03-05"
#endif
/**
From dee4ef09f8763f320bba0e1c2f664f9764fd631d Mon Sep 17 00:00:00 2001
From: Hans-Christian Ebke
Date: Sun, 5 Mar 2023 23:25:11 +0100
Subject: [PATCH 82/97] =?UTF-8?q?=F0=9F=90=9B=20Fix=20apply=5Fpower=20for?=
=?UTF-8?q?=20SPINDLE=5FSERVO=20(#25465)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/feature/spindle_laser.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Marlin/src/feature/spindle_laser.cpp b/Marlin/src/feature/spindle_laser.cpp
index e7898268e8..c0635c7220 100644
--- a/Marlin/src/feature/spindle_laser.cpp
+++ b/Marlin/src/feature/spindle_laser.cpp
@@ -141,7 +141,7 @@ void SpindleLaser::apply_power(const uint8_t opwr) {
else
ocr_off();
#elif ENABLED(SPINDLE_SERVO)
- MOVE_SERVO(SPINDLE_SERVO_NR, power);
+ servo[SPINDLE_SERVO_NR].move(opwr);
#else
WRITE(SPINDLE_LASER_ENA_PIN, enabled() ? SPINDLE_LASER_ACTIVE_STATE : !SPINDLE_LASER_ACTIVE_STATE);
isReadyForUI = true;
From 33ed748004ccd3a538c3761839dc3634516baea3 Mon Sep 17 00:00:00 2001
From: alextrical <35117191+alextrical@users.noreply.github.com>
Date: Sun, 5 Mar 2023 22:28:50 +0000
Subject: [PATCH 83/97] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Flash=20EEPROM=20for?=
=?UTF-8?q?=20STM32G0B1CB=20(#25469)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/pins/stm32g0/pins_BTT_EBB42_V1_1.h | 2 +-
.../MARLIN_BTT_EBB42_V1_1/variant_MARLIN_BTT_EBB42_V1_1.h | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/Marlin/src/pins/stm32g0/pins_BTT_EBB42_V1_1.h b/Marlin/src/pins/stm32g0/pins_BTT_EBB42_V1_1.h
index cdd85a6d75..3de67ea8d5 100644
--- a/Marlin/src/pins/stm32g0/pins_BTT_EBB42_V1_1.h
+++ b/Marlin/src/pins/stm32g0/pins_BTT_EBB42_V1_1.h
@@ -44,7 +44,7 @@
#define FLASH_EEPROM_EMULATION
#endif
#define EEPROM_PAGE_SIZE (0x800UL) // 2K
- #define EEPROM_START_ADDRESS (0x0801F800UL)
+ #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 1UL)
#define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE
#endif
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BTT_EBB42_V1_1/variant_MARLIN_BTT_EBB42_V1_1.h b/buildroot/share/PlatformIO/variants/MARLIN_BTT_EBB42_V1_1/variant_MARLIN_BTT_EBB42_V1_1.h
index ff75bc1e48..9373e2fa3b 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BTT_EBB42_V1_1/variant_MARLIN_BTT_EBB42_V1_1.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BTT_EBB42_V1_1/variant_MARLIN_BTT_EBB42_V1_1.h
@@ -155,6 +155,8 @@
#define SERIAL_UART_INSTANCE 4
#endif
+#define FLASH_BANK_NUMBER FLASH_BANK_1
+
// Default pin used for generic 'Serial' instance
// Mandatory for Firmata
#ifndef PIN_SERIAL_RX
From c63577fd1dacaa232cfcd44a1e9ea1426cd8c0bc Mon Sep 17 00:00:00 2001
From: Abdullah YILMAZ
Date: Mon, 6 Mar 2023 01:29:43 +0300
Subject: [PATCH 84/97] =?UTF-8?q?=F0=9F=8C=90=20Update=20Turkish=20languag?=
=?UTF-8?q?e=20(#25447)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../language => kaynak/lcd/dil}/language_tr.h | 461 ++++++++++++++----
Marlin/src/lcd/language/language_en.h | 5 +-
Marlin/src/lcd/language/language_fr.h | 7 +-
Marlin/src/lcd/language/language_hu.h | 15 +-
Marlin/src/lcd/language/language_pl.h | 8 -
Marlin/src/lcd/language/language_ro.h | 8 -
Marlin/src/lcd/language/language_ru.h | 15 +-
Marlin/src/lcd/language/language_uk.h | 15 +-
Marlin/src/lcd/language/language_vi.h | 7 +-
Marlin/src/lcd/language/language_zh_CN.h | 15 +-
Marlin/src/lcd/language/language_zh_TW.h | 15 +-
11 files changed, 393 insertions(+), 178 deletions(-)
rename Marlin/{src/lcd/language => kaynak/lcd/dil}/language_tr.h (57%)
diff --git a/Marlin/src/lcd/language/language_tr.h b/Marlin/kaynak/lcd/dil/language_tr.h
similarity index 57%
rename from Marlin/src/lcd/language/language_tr.h
rename to Marlin/kaynak/lcd/dil/language_tr.h
index cb3c6a03ae..569b32b93d 100644
--- a/Marlin/src/lcd/language/language_tr.h
+++ b/Marlin/kaynak/lcd/dil/language_tr.h
@@ -26,10 +26,6 @@
*
* LCD Menu Messages
* See also https://marlinfw.org/docs/development/lcd_language.html
- *
- * Bu çeviri dosyasındaki sorunlar ve düzeltmeler için iletişim;
- * Contact for issues and corrections in this translation file;
- * Yücel Temel - (info@elektromanyetix.com) - https://elektromanyetix.com/
*/
#define DISPLAY_CHARSET_ISO10646_TR
@@ -40,38 +36,67 @@ namespace Language_tr {
constexpr uint8_t CHARSIZE = 2;
LSTR LANGUAGE = _UxGT("Turkish");
+ // These strings should be translated
LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" hazır.");
LSTR MSG_YES = _UxGT("EVET");
LSTR MSG_NO = _UxGT("HAYIR");
+ LSTR MSG_HIGH = _UxGT("YÜKSEK");
+ LSTR MSG_LOW = _UxGT("DÜŞÜK");
LSTR MSG_BACK = _UxGT("Geri");
+ LSTR MSG_ERROR = _UxGT("Hata");
LSTR MSG_MEDIA_ABORTING = _UxGT("Durduruluyor...");
LSTR MSG_MEDIA_INSERTED = _UxGT("SD K. Yerleştirildi.");
LSTR MSG_MEDIA_REMOVED = _UxGT("SD Kart Çıkarıldı.");
LSTR MSG_MEDIA_WAITING = _UxGT("SD Kart Bekleniyor");
+ LSTR MSG_MEDIA_INIT_FAIL = MEDIA_TYPE_EN _UxGT(" Başlatma Başarısız");
LSTR MSG_MEDIA_READ_ERROR = _UxGT("Kart Okuma Hatası");
LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB Çıkarıldı");
LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB Başlat. Hatası");
- LSTR MSG_LCD_ENDSTOPS = _UxGT("Enstops"); // Max length 8 characters
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Subcall Overflow");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Yazılımsal Endstops");
LSTR MSG_MAIN = _UxGT("Ana");
LSTR MSG_ADVANCED_SETTINGS = _UxGT("Gelişmiş Ayarlar");
+ LSTR MSG_TOOLBAR_SETUP = _UxGT("Araç Çubuğu Kurulumu");
+ LSTR MSG_OPTION_DISABLED = _UxGT("Seçenek Devre Dışı");
LSTR MSG_CONFIGURATION = _UxGT("Yapılandırma");
LSTR MSG_RUN_AUTO_FILES = _UxGT("Oto. Başlat");
LSTR MSG_DISABLE_STEPPERS = _UxGT("Motorları Durdur");
LSTR MSG_DEBUG_MENU = _UxGT("Hata Ayıklama");
LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Durum Çubuğu Testi");
+ LSTR MSG_HOMING = _UxGT("Sıfırlanıyor");
LSTR MSG_AUTO_HOME = _UxGT("Eksenleri Sıfırla");
+ LSTR MSG_AUTO_HOME_A = _UxGT("@ Sıfırla");
LSTR MSG_AUTO_HOME_X = _UxGT("X Sıfırla");
LSTR MSG_AUTO_HOME_Y = _UxGT("Y Sıfırla");
LSTR MSG_AUTO_HOME_Z = _UxGT("Z Sıfırla");
+ LSTR MSG_FILAMENT_SET = _UxGT("Filament Ayarları");
+ LSTR MSG_FILAMENT_MAN = _UxGT("Filament Yönetimi");
+ LSTR MSG_MANUAL_LEVELING = _UxGT("Manuel Seviyeleme");
+ LSTR MSG_LEVBED_FL = _UxGT("Sol Ön");
+ LSTR MSG_LEVBED_FR = _UxGT("Ön Sağ");
+ LSTR MSG_LEVBED_C = _UxGT("Orta");
+ LSTR MSG_LEVBED_BL = _UxGT("Arka Sol");
+ LSTR MSG_LEVBED_BR = _UxGT("Arka Sağ");
+ LSTR MSG_MANUAL_MESH = _UxGT("Manuel Mesh");
+ LSTR MSG_AUTO_MESH = _UxGT("Oto Mesh Oluştur");
LSTR MSG_AUTO_Z_ALIGN = _UxGT("Oto. Z-Hizalama");
+ LSTR MSG_ITERATION = _UxGT("G34 Yinelemesi: %i");
+ LSTR MSG_DECREASING_ACCURACY = _UxGT("Doğruluk Düşüyor!");
+ LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Doğruluk Sağlandı");
LSTR MSG_LEVEL_BED_HOMING = _UxGT("XYZ Sıfırlanıyor");
LSTR MSG_LEVEL_BED_WAITING = _UxGT("Başlatmak için tıkla");
LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Sonraki Nokta");
- LSTR MSG_LEVEL_BED_DONE = _UxGT("Hizalama Tamam!");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Seviyeleme Tamam!");
LSTR MSG_Z_FADE_HEIGHT = _UxGT("Kaçınma Yüksekliği");
LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ofset Ayarla");
+ LSTR MSG_HOME_OFFSET_X = _UxGT("X Ofset Sıfırla");
+ LSTR MSG_HOME_OFFSET_Y = _UxGT("Y Ofset Sıfırla");
+ LSTR MSG_HOME_OFFSET_Z = _UxGT("Z Ofset Sıfırla");
LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofset Tamam");
+ LSTR MSG_TRAMMING_WIZARD = _UxGT("Hizalama Sihirbazı");
+ LSTR MSG_SELECT_ORIGIN = _UxGT("Başlangıç Seç");
+ LSTR MSG_LAST_VALUE_SP = _UxGT("Son değer ");
#if HAS_PREHEAT
LSTR MSG_PREHEAT_1 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL;
LSTR MSG_PREHEAT_1_H = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " ~";
@@ -80,7 +105,14 @@ namespace Language_tr {
LSTR MSG_PREHEAT_1_ALL = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Tüm");
LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Tabla");
LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Ayarlar");
-
+ #ifdef PREHEAT_2_LABEL
+ LSTR MSG_PREHEAT_2 = _UxGT("Ön Isınma ") PREHEAT_2_LABEL;
+ LSTR MSG_PREHEAT_2_SETTINGS = _UxGT("Ön Isınma ") PREHEAT_2_LABEL _UxGT(" Conf");
+ #endif
+ #ifdef PREHEAT_3_LABEL
+ LSTR MSG_PREHEAT_3 = _UxGT("Ön Isınma ") PREHEAT_3_LABEL;
+ LSTR MSG_PREHEAT_3_SETTINGS = _UxGT("Ön Isınma ") PREHEAT_3_LABEL _UxGT(" Conf");
+ #endif
LSTR MSG_PREHEAT_M = _UxGT("Ön Isınma $");
LSTR MSG_PREHEAT_M_H = _UxGT("Ön Isınma $ ~");
LSTR MSG_PREHEAT_M_END = _UxGT("Ön Isınma $ Nozul");
@@ -91,30 +123,59 @@ namespace Language_tr {
#endif
LSTR MSG_PREHEAT_CUSTOM = _UxGT("Özel Ön Isınma");
LSTR MSG_COOLDOWN = _UxGT("Soğut/(Durdur)");
+
+ LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frekans");
LSTR MSG_LASER_MENU = _UxGT("Lazer Kontrolü");
- LSTR MSG_LASER_POWER = _UxGT("Lazer Gücü");
LSTR MSG_SPINDLE_MENU = _UxGT("Spindle Kontrolü");
+ LSTR MSG_LASER_POWER = _UxGT("Lazer Gücü");
LSTR MSG_SPINDLE_POWER = _UxGT("Spindle Gücü");
- LSTR MSG_SPINDLE_REVERSE = _UxGT("Spindle Ters Yön");
+ LSTR MSG_LASER_TOGGLE = _UxGT("Lazer Değiştir");
+ LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Üfleyici Değiştir");
+ LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Hava Desteği");
+ LSTR MSG_LASER_PULSE_MS = _UxGT("Test Pulse ms");
+ LSTR MSG_LASER_FIRE_PULSE = _UxGT("Fire Pulse");
+ LSTR MSG_FLOWMETER_FAULT = _UxGT("Soğutucu Akış Hatası");
+ LSTR MSG_SPINDLE_TOGGLE = _UxGT("Spindle Değiştir");
+ LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Vakum Değiştir");
+ LSTR MSG_SPINDLE_FORWARD = _UxGT("Spindle İleri Yön");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Spindle Geri Yön");
LSTR MSG_SWITCH_PS_ON = _UxGT("Gücü Aç");
LSTR MSG_SWITCH_PS_OFF = _UxGT("Gücü Kapat");
LSTR MSG_EXTRUDE = _UxGT("Ekstrüzyon");
LSTR MSG_RETRACT = _UxGT("Geri Çek");
LSTR MSG_MOVE_AXIS = _UxGT("Eksen Hareketleri");
- LSTR MSG_BED_LEVELING = _UxGT("Tabla Hizalama");
- LSTR MSG_LEVEL_BED = _UxGT("Tabla Hizası");
- LSTR MSG_BED_TRAMMING = _UxGT("Hizalama Köşeleri");
+ LSTR MSG_BED_LEVELING = _UxGT("Tabla Seviyeleme");
+ LSTR MSG_LEVEL_BED = _UxGT("Tabla Seviyesi");
+ LSTR MSG_BED_TRAMMING = _UxGT("Tabla Hizalama");
+ LSTR MSG_BED_TRAMMING_MANUAL = _UxGT("Manuel Hizalama");
+ LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Prob tetiklenene kadar tablayı ayarlayın.");
+ LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Köşeler tolerans dahilinde. Tabla hizalandı.");
+ LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("İyi Noktalar: ");
+ LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Son Z: ");
LSTR MSG_NEXT_CORNER = _UxGT("Sonraki Köşe");
LSTR MSG_MESH_EDITOR = _UxGT("Mesh Editörü");
+ LSTR MSG_MESH_VIEWER = _UxGT("Mesh görüntüleyici");
LSTR MSG_EDIT_MESH = _UxGT("Mesh Düzenle");
+ LSTR MSG_MESH_VIEW = _UxGT("Mesh Göster");
LSTR MSG_EDITING_STOPPED = _UxGT("Mesh Düzenleme Durdu");
+ LSTR MSG_NO_VALID_MESH = _UxGT("Geçerli Mesh yok");
+ LSTR MSG_ACTIVATE_MESH = _UxGT("Seviyeleme Aç");
LSTR MSG_PROBING_POINT = _UxGT("Prop Noktası");
LSTR MSG_MESH_X = _UxGT("İndeks X");
LSTR MSG_MESH_Y = _UxGT("İndeks Y");
+ LSTR MSG_MESH_INSET = _UxGT("Mesh Inset");
+ LSTR MSG_MESH_MIN_X = _UxGT("Mesh X Minimum");
+ LSTR MSG_MESH_MAX_X = _UxGT("Mesh X Maximum");
+ LSTR MSG_MESH_MIN_Y = _UxGT("Mesh Y Minimum");
+ LSTR MSG_MESH_MAX_Y = _UxGT("Mesh Y Maximum");
+ LSTR MSG_MESH_AMAX = _UxGT("Alanı Büyüt");
+ LSTR MSG_MESH_CENTER = _UxGT("Merkez Alan");
LSTR MSG_MESH_EDIT_Z = _UxGT("Z Değeri");
+ LSTR MSG_MESH_CANCEL = _UxGT("Mesh iptal edildi");
LSTR MSG_CUSTOM_COMMANDS = _UxGT("Özel Komutlar");
LSTR MSG_M48_TEST = _UxGT("M48 Prob Testi");
LSTR MSG_M48_POINT = _UxGT("M48 Nokta");
+ LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Sınır dışı araştırma");
LSTR MSG_M48_DEVIATION = _UxGT("Sapma");
LSTR MSG_IDEX_MENU = _UxGT("IDEX Modu");
LSTR MSG_OFFSETS_MENU = _UxGT("Takım Ofsetleri");
@@ -122,21 +183,26 @@ namespace Language_tr {
LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Kopyala");
LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Yansıtılmış kopya");
LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Tam Kontrol");
+ LSTR MSG_IDEX_DUPE_GAP = _UxGT("Yinelenen X-Boşluğu");
LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2. nozul Z");
LSTR MSG_HOTEND_OFFSET_A = _UxGT("2. nozul @");
LSTR MSG_UBL_DOING_G29 = _UxGT("G29 Çalışıyor");
LSTR MSG_UBL_TOOLS = _UxGT("UBL Araçları");
- LSTR MSG_UBL_LEVEL_BED = _UxGT("UBL Yatak Hizalama");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("UBL Tabla Seviyeleme");
LSTR MSG_LCD_TILTING_MESH = _UxGT("Eğim Noktası");
+ LSTR MSG_UBL_TILT_MESH = _UxGT("Eğimli Mesh");
+ LSTR MSG_UBL_TILTING_GRID = _UxGT("Eğimli Izgara Boyutu");
+ LSTR MSG_UBL_MESH_TILTED = _UxGT("Mesh Eğildi");
LSTR MSG_UBL_MANUAL_MESH = _UxGT("Elle Mesh Oluştur");
+ LSTR MSG_UBL_MESH_WIZARD = _UxGT("UBL Mesh Sihirbazı");
LSTR MSG_UBL_BC_INSERT = _UxGT("Altlık & Ölçü Ver");
- LSTR MSG_UBL_BC_INSERT2 = _UxGT("Ölçü");
- LSTR MSG_UBL_BC_REMOVE = _UxGT("Yataktan Ölçü Kaldır");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Ölçüm");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Tablayı Kaldır & Ölç");
LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Sonrakine Git");
LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("UBL'yi Etkinleştir");
LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL'yi Etkisizleştir");
- LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Yatak Sıcaklığı");
- LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Yatak Sıcaklığı");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Tabla Sıcaklığı");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Tabla Sıcaklığı");
LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Nozul Sıcaklığı");
LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Nozul Sıcaklığı");
LSTR MSG_UBL_MESH_EDIT = _UxGT("Mesh Düzenleme");
@@ -145,14 +211,12 @@ namespace Language_tr {
LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Mesh Düzenleme Tamam");
LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Özel Mesh Oluştur");
LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Mesh Oluştur");
- #if HAS_PREHEAT
- LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Mesh Oluştur ($)");
- LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Doğrulama Mesh ($)");
- #endif
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Mesh Oluştur ($)");
LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Soğuk Mesh Oluştur");
LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Mesh Yükseklik Ayarı");
LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Yükseklik miktarı");
LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Doğrulama Mesh");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Doğrulama Mesh ($)");
LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Özel Mesh Doğrulama");
LSTR MSG_G26_HEATING_BED = _UxGT("G26 Isıtma Tablası");
LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Isıtma Memesi");
@@ -162,29 +226,32 @@ namespace Language_tr {
LSTR MSG_G26_CANCELED = _UxGT("G26 İptal edildi");
LSTR MSG_G26_LEAVING = _UxGT("Çıkış G26");
LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Tabla Mesh Devam et");
- LSTR MSG_UBL_MESH_LEVELING = _UxGT("Mesh Hizalama");
- LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Nokta Hizalama");
- LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Kafes Mesh Hizalama");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Mesh Seviyeleme");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Nokta Seviyeleme");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Kafes Mesh Seviyeleme");
LSTR MSG_UBL_MESH_LEVEL = _UxGT("Mesh Seviyesi");
LSTR MSG_UBL_SIDE_POINTS = _UxGT("Yan Noktalar");
LSTR MSG_UBL_MAP_TYPE = _UxGT("Haritalama Türü");
LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Mesh Çıkış Haritası");
LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Host için Çıktı");
LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("CSV için Çıktı");
- LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Yazıcıda Yedek Kpalı");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Yedekleme Kapalı");
LSTR MSG_UBL_INFO_UBL = _UxGT("UBL Çıkış Bilgisi");
LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Dolgu Miktarı");
LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Manuel Dolgu");
LSTR MSG_UBL_SMART_FILLIN = _UxGT("Akıllı Dogu");
LSTR MSG_UBL_FILLIN_MESH = _UxGT("Mesh Dolgu");
+ LSTR MSG_UBL_MESH_FILLED = _UxGT("Eksikler Dolduruldu");
+ LSTR MSG_UBL_MESH_INVALID = _UxGT("Geçersiz Mesh");
LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Tümünü Geçersiz Kıl");
LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Yakını Geçersiz Kıl");
LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Tümünü İnce Ayarla");
LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Yakını İnce Ayarla");
LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Depolama");
LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Bellek Yuvası");
- LSTR MSG_UBL_LOAD_MESH = _UxGT("Yatak Mesh Yükle");
- LSTR MSG_UBL_SAVE_MESH = _UxGT("Yatak Mesh Kayıt Et");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Tabla Mesh Yükle");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Tabla Mesh Kayıt Et");
+ LSTR MSG_UBL_INVALID_SLOT = _UxGT("Önce Mesh Yuvası Seç");
LSTR MSG_MESH_LOADED = _UxGT("Mesh %i yüklendi");
LSTR MSG_MESH_SAVED = _UxGT("Mesh %i kayıtlandı");
LSTR MSG_UBL_NO_STORAGE = _UxGT("Depolama Yok");
@@ -199,7 +266,7 @@ namespace Language_tr {
LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Tümünü İnce Ayarla");
LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Doğrulama Mesh");
LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Tümünü İnce Ayarla");
- LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Yatak Mesh Kayıt Et");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Tabla Mesh Kaydet");
LSTR MSG_LED_CONTROL = _UxGT("LED Kontrolü");
LSTR MSG_LEDS = _UxGT("LEDler");
@@ -213,6 +280,10 @@ 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_LEDS2 = _UxGT("Işıklar #2");
+ LSTR MSG_NEO2_PRESETS = _UxGT("Işık #2 Ön Ayarları");
+ LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Parlaklık");
LSTR MSG_CUSTOM_LEDS = _UxGT("Özel Işıklar");
LSTR MSG_INTENSITY_R = _UxGT("Kırmızı Şiddeti");
LSTR MSG_INTENSITY_G = _UxGT("Yeşil Şiddeti");
@@ -222,7 +293,7 @@ namespace Language_tr {
LSTR MSG_MOVING = _UxGT("Hareket Ediyor..");
LSTR MSG_FREE_XY = _UxGT("Durdur XY");
- LSTR MSG_MOVE_X = _UxGT("X Hareketi");
+ LSTR MSG_MOVE_X = _UxGT("X Hareketi"); // Used by draw_edit_screen
LSTR MSG_MOVE_Y = _UxGT("Y Hareketi");
LSTR MSG_MOVE_Z = _UxGT("Z Hareketi");
LSTR MSG_MOVE_N = _UxGT("@ Hareketi");
@@ -233,18 +304,36 @@ namespace Language_tr {
LSTR MSG_MOVE_01MM = _UxGT("0.1mm");
LSTR MSG_MOVE_1MM = _UxGT("1mm");
LSTR MSG_MOVE_10MM = _UxGT("10mm");
+ LSTR MSG_MOVE_50MM = _UxGT("50mm");
LSTR MSG_MOVE_100MM = _UxGT("100mm");
+ LSTR MSG_MOVE_0001IN = _UxGT("0.001in");
+ LSTR MSG_MOVE_001IN = _UxGT("0.01in");
+ LSTR MSG_MOVE_01IN = _UxGT("0.1in");
+ LSTR MSG_MOVE_05IN = _UxGT("0.5in");
+ LSTR MSG_MOVE_1IN = _UxGT("1.0in");
LSTR MSG_SPEED = _UxGT("Hız");
- LSTR MSG_MESH_Z_OFFSET = _UxGT("Z Mesafesi");
+ LSTR MSG_BED_Z = _UxGT("Z Mesafesi");
LSTR MSG_NOZZLE = _UxGT("Nozul");
LSTR MSG_NOZZLE_N = _UxGT("Nozul ~");
+ LSTR MSG_NOZZLE_PARKED = _UxGT("Nozul Park Edildi");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Nozul Beklemede");
LSTR MSG_BED = _UxGT("Tabla");
- LSTR MSG_CHAMBER = _UxGT("Çevirme");
+ LSTR MSG_CHAMBER = _UxGT("Kabin");
+ LSTR MSG_COOLER = _UxGT("Lazer Soğutucu");
+ LSTR MSG_COOLER_TOGGLE = _UxGT("Soğutucuyu Değiştir");
+ LSTR MSG_FLOWMETER_SAFETY = _UxGT("Akış Güvenliği");
+ LSTR MSG_CUTTER = _UxGT("Kesici");
+ LSTR MSG_LASER = _UxGT("Lazer");
LSTR MSG_FAN_SPEED = _UxGT("Fan Hızı");
LSTR MSG_FAN_SPEED_N = _UxGT("Fan Hızı ~");
LSTR MSG_STORED_FAN_N = _UxGT("Depolanan Fan ~");
LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Ekstra Fan Hızı");
LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Ekstra Fan Hızı ~");
+ LSTR MSG_CONTROLLER_FAN = _UxGT("Kontrolör Fanı");
+ LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Rölanti Hızı");
+ LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Otomatik Mod");
+ LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Aktif Hız");
+ LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Rölanti Periyodu");
LSTR MSG_FLOW = _UxGT("Akış");
LSTR MSG_FLOW_N = _UxGT("Akış ~");
LSTR MSG_CONTROL = _UxGT("Kontrol");
@@ -256,34 +345,58 @@ namespace Language_tr {
LSTR MSG_LCD_OFF = _UxGT("Kapalı");
LSTR MSG_PID_AUTOTUNE = _UxGT("PID Kalibrasyon");
LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Kalibrasyon *");
+ LSTR MSG_PID_CYCLE = _UxGT("PID Döngüleri");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID ayarı yapıldı");
+ LSTR MSG_PID_AUTOTUNE_FAILED = _UxGT("PID Autotune başarısız!");
+ LSTR MSG_BAD_EXTRUDER_NUM = _UxGT("Kötü ekstruder.");
+ LSTR MSG_TEMP_TOO_HIGH = _UxGT("Sıcaklık çok yüksek.");
+ LSTR MSG_TIMEOUT = _UxGT("Zaman aşımı.");
+ LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Otomatik ayar başarısız! Kötü ekstruder.");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Otomatik ayar başarısız! Sıcaklık çok yüksek.");
+ LSTR MSG_PID_TIMEOUT = _UxGT("Otomatik ayar başarısız! Zaman aşımı.");
+ LSTR MSG_MPC_MEASURING_AMBIENT = _UxGT("Isı kaybı test ediliyor");
+ LSTR MSG_MPC_AUTOTUNE = _UxGT("MPC Otomatik Ayarı");
+ LSTR MSG_MPC_EDIT = _UxGT("Düzenle * MPC");
+ LSTR MSG_MPC_POWER_E = _UxGT("Güç *");
+ LSTR MSG_MPC_BLOCK_HEAT_CAPACITY_E = _UxGT("Blok C *");
+ LSTR MSG_SENSOR_RESPONSIVENESS_E = _UxGT("Sensör çözünürlüğü *");
+ LSTR MSG_MPC_AMBIENT_XFER_COEFF_E = _UxGT("Ortam h *");
+ LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN_E = _UxGT("Amb. h fan *");
+ LSTR MSG_SELECT = _UxGT("Seç");
LSTR MSG_SELECT_E = _UxGT("Seç *");
LSTR MSG_ACC = _UxGT("İvme");
-
- LSTR MSG_JERK = _UxGT("Sarsım");
- LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT("-Sarsım");
- LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT("-Sarsım");
- LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT("-Sarsım");
- LSTR MSG_VN_JERK = _UxGT("V@-Sarsım");
- LSTR MSG_VE_JERK = _UxGT("Ve-Sarsım");
+ LSTR MSG_JERK = _UxGT("Sarsma");
+ LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT(" Sarsma");
+ LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT(" Sarsma");
+ LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT(" Sarsma");
+ LSTR MSG_VN_JERK = _UxGT("Max @ Sarsma");
+ LSTR MSG_VE_JERK = _UxGT("Max E Sarsma");
LSTR MSG_JUNCTION_DEVIATION = _UxGT("Jonksiyon Sapması");
LSTR MSG_MAX_SPEED = _UxGT("Hız Vektörü");
- LSTR MSG_VMAX_A = _UxGT("HızVektör.max ") STR_A;
- LSTR MSG_VMAX_B = _UxGT("HızVektör.max ") STR_B;
- LSTR MSG_VMAX_C = _UxGT("HızVektör.max ") STR_C;
- LSTR MSG_VMAX_N = _UxGT("HızVektör.max @");
- LSTR MSG_VMAX_E = _UxGT("HızVektör.max E");
- LSTR MSG_VMAX_EN = _UxGT("HızVektör.max *");
- LSTR MSG_VMIN = _UxGT("HızVektör.min");
- LSTR MSG_VTRAV_MIN = _UxGT("HV.gezinme min");
+ LSTR MSG_VMAX_A = _UxGT("Max ") STR_A _UxGT(" Hız");
+ LSTR MSG_VMAX_B = _UxGT("Max ") STR_B _UxGT(" Hız");
+ LSTR MSG_VMAX_C = _UxGT("Max ") STR_C _UxGT(" Hız");
+ LSTR MSG_VMAX_N = _UxGT("Max @ Hız");
+ LSTR MSG_VMAX_E = _UxGT("Max E Hız");
+ LSTR MSG_VMAX_EN = _UxGT("Max * Hız");
+ LSTR MSG_VMIN = _UxGT("Min Hız");
+ LSTR MSG_VTRAV_MIN = _UxGT("Min Gezme Hızı");
LSTR MSG_ACCELERATION = _UxGT("Ivme");
- LSTR MSG_AMAX_A = _UxGT("Max. ivme ") STR_A;
- LSTR MSG_AMAX_B = _UxGT("Max. ivme ") STR_B;
- LSTR MSG_AMAX_C = _UxGT("Max. ivme ") STR_C;
- LSTR MSG_AMAX_N = _UxGT("Max. ivme @");
- LSTR MSG_AMAX_E = _UxGT("Max. ivme E");
- LSTR MSG_AMAX_EN = _UxGT("Max. ivme *");
- LSTR MSG_A_RETRACT = _UxGT("Ivme-geri çekme");
- LSTR MSG_A_TRAVEL = _UxGT("Ivme-gezinme");
+ LSTR MSG_AMAX_A = _UxGT("Max ") STR_A _UxGT(" İvme");
+ LSTR MSG_AMAX_B = _UxGT("Max ") STR_B _UxGT(" İvme");
+ LSTR MSG_AMAX_C = _UxGT("Max ") STR_C _UxGT(" İvme");
+ LSTR MSG_AMAX_N = _UxGT("Max @ İvme");
+ LSTR MSG_AMAX_E = _UxGT("Max E İvme");
+ LSTR MSG_AMAX_EN = _UxGT("Max * İvme");
+ LSTR MSG_A_RETRACT = _UxGT("G.Çekme Hızı");
+ LSTR MSG_A_TRAVEL = _UxGT("Gezinme Hızı");
+ LSTR MSG_INPUT_SHAPING = _UxGT("Girdi Şekillendirme");
+ LSTR MSG_SHAPING_ENABLE = _UxGT("Biçimleme @ aktif");
+ LSTR MSG_SHAPING_DISABLE = _UxGT("Biçimleme @ pasif");
+ LSTR MSG_SHAPING_FREQ = _UxGT("@ frekans");
+ LSTR MSG_SHAPING_ZETA = _UxGT("@ sönümleme");
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("XY Frek. Sınırı");
+ LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Min FR Factor");
LSTR MSG_STEPS_PER_MM = _UxGT("Adım/mm");
LSTR MSG_A_STEPS = STR_A _UxGT(" adım/mm");
LSTR MSG_B_STEPS = STR_B _UxGT(" adım/mm");
@@ -295,69 +408,133 @@ namespace Language_tr {
LSTR MSG_MOTION = _UxGT("Hareket");
LSTR MSG_FILAMENT = _UxGT("Filaman");
LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("Ekstrüzyon/mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
LSTR MSG_FILAMENT_DIAM = _UxGT("Filaman Çapı");
LSTR MSG_FILAMENT_DIAM_E = _UxGT("Filaman Çapı *");
LSTR MSG_FILAMENT_UNLOAD = _UxGT("Çıkart mm");
LSTR MSG_FILAMENT_LOAD = _UxGT("Yükle mm");
+ LSTR MSG_SEGMENTS_PER_SECOND = _UxGT("Segment/Sn");
+ LSTR MSG_DRAW_MIN_X = _UxGT("Draw Min X");
+ LSTR MSG_DRAW_MAX_X = _UxGT("Draw Max X");
+ LSTR MSG_DRAW_MIN_Y = _UxGT("Draw Min Y");
+ LSTR MSG_DRAW_MAX_Y = _UxGT("Draw Max Y");
+ LSTR MSG_MAX_BELT_LEN = _UxGT("Max Kayış Boyu");
LSTR MSG_ADVANCE_K = _UxGT("K İlerlet");
LSTR MSG_ADVANCE_K_E = _UxGT("K İlerlet *");
LSTR MSG_CONTRAST = _UxGT("LCD Kontrast");
+ LSTR MSG_BRIGHTNESS = _UxGT("LCD Parlaklığı");
+ LSTR MSG_SCREEN_TIMEOUT = _UxGT("LCD Zaman Aşımı (m)");
+ LSTR MSG_BRIGHTNESS_OFF = _UxGT("Arka Işık Kapalı");
LSTR MSG_STORE_EEPROM = _UxGT("Hafızaya Al");
LSTR MSG_LOAD_EEPROM = _UxGT("Hafızadan Yükle");
LSTR MSG_RESTORE_DEFAULTS = _UxGT("Fabrika Ayarları");
LSTR MSG_INIT_EEPROM = _UxGT("EEPROM'u başlat");
LSTR MSG_ERR_EEPROM_CRC = _UxGT("Hata: EEPROM CRC");
LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Hata: EEPROM Indeks");
- LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Hata: EEPROM Versiyonu");
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Hata: EEPROM Sürümü");
+ LSTR MSG_SETTINGS_STORED = _UxGT("Ayarlar Kaydedildi");
LSTR MSG_MEDIA_UPDATE = _UxGT("SD Güncellemesi");
LSTR MSG_RESET_PRINTER = _UxGT("Yazıcıyı Resetle");
LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Yenile");
LSTR MSG_INFO_SCREEN = _UxGT("Bilgi Ekranı");
+ LSTR MSG_INFO_MACHINENAME = _UxGT("Makine Adı");
+ LSTR MSG_INFO_SIZE = _UxGT("Boyut");
+ LSTR MSG_INFO_FWVERSION = _UxGT("Yazılım Sürümü");
+ LSTR MSG_INFO_BUILD = _UxGT("Tarih & Saat Oluştur");
LSTR MSG_PREPARE = _UxGT("Hazırlık");
LSTR MSG_TUNE = _UxGT("Ayar");
+ LSTR MSG_POWER_MONITOR = _UxGT("Güç monitörü");
+ LSTR MSG_CURRENT = _UxGT("Akım");
+ LSTR MSG_VOLTAGE = _UxGT("Voltaj");
+ LSTR MSG_POWER = _UxGT("Güç");
LSTR MSG_START_PRINT = _UxGT("Yaz. Başlat");
LSTR MSG_BUTTON_NEXT = _UxGT("İleri");
- LSTR MSG_BUTTON_INIT = _UxGT("İçinde");
+ LSTR MSG_BUTTON_INIT = _UxGT("Başlat");
LSTR MSG_BUTTON_STOP = _UxGT("Durdur");
LSTR MSG_BUTTON_PRINT = _UxGT("Yazdır");
LSTR MSG_BUTTON_RESET = _UxGT("Resetle");
+ LSTR MSG_BUTTON_IGNORE = _UxGT("Yoksay");
LSTR MSG_BUTTON_CANCEL = _UxGT("İptal");
+ LSTR MSG_BUTTON_CONFIRM = _UxGT("Onayla");
+ LSTR MSG_BUTTON_CONTINUE = _UxGT("Sürdür");
LSTR MSG_BUTTON_DONE = _UxGT("Tamamlandı");
LSTR MSG_BUTTON_BACK = _UxGT("Geri");
- LSTR MSG_BUTTON_PROCEED = _UxGT("Devam ediyor");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Devam Et");
+ LSTR MSG_BUTTON_SKIP = _UxGT("Atla");
+ LSTR MSG_BUTTON_INFO = _UxGT("Bilgi");
+ LSTR MSG_BUTTON_LEVEL = _UxGT("Seviye");
+ LSTR MSG_BUTTON_PAUSE = _UxGT("Duraklat");
+ LSTR MSG_BUTTON_RESUME = _UxGT("Devam Et");
+ LSTR MSG_BUTTON_ADVANCED = _UxGT("Gelişmiş");
+ LSTR MSG_BUTTON_SAVE = _UxGT("Kaydet");
+ LSTR MSG_BUTTON_PURGE = _UxGT("Temizle");
+ LSTR MSG_PAUSING = _UxGT("Duraklatılıyor...");
LSTR MSG_PAUSE_PRINT = _UxGT("Duraklat");
- LSTR MSG_RESUME_PRINT = _UxGT("Sürdür");
- LSTR MSG_STOP_PRINT = _UxGT("Durdur");
- 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_ADVANCED_PAUSE = _UxGT("Gelişmiş Duraklatma");
+ LSTR MSG_RESUME_PRINT = _UxGT("Baskıyı Sürdür");
+ LSTR MSG_STOP_PRINT = _UxGT("Baskıyı Durdur");
LSTR MSG_OUTAGE_RECOVERY = _UxGT("Kesinti Kurtarma");
- LSTR MSG_MEDIA_MENU = _UxGT("SD Karttan Yazdır");
+ #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
+ 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_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");
+ LSTR MSG_END_LOOPS = _UxGT("Tekrr Döngüler Bitir");
+ #else
+ 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_CONTINUE_PRINT_JOB = _UxGT("İşe Devam Et");
+ LSTR MSG_MEDIA_MENU = MEDIA_TYPE_EN _UxGT(" Yazdır");
+ LSTR MSG_TURN_OFF = _UxGT("Şimdi kapat");
+ LSTR MSG_END_LOOPS = _UxGT("Son Döngüler");
+ #endif
LSTR MSG_NO_MEDIA = _UxGT("SD Kart Yok!");
LSTR MSG_DWELL = _UxGT("Uyku...");
- LSTR MSG_USERWAIT = _UxGT("Operatör bekleniyor.");
+ LSTR MSG_USERWAIT = _UxGT("Devam için tıkla...");
LSTR MSG_PRINT_PAUSED = _UxGT("Baskı Duraklatıldı");
LSTR MSG_PRINTING = _UxGT("Baskı Yapılıyor...");
+ LSTR MSG_STOPPING = _UxGT("Durduruluyor...");
+ LSTR MSG_REMAINING_TIME = _UxGT("Kalan");
LSTR MSG_PRINT_ABORTED = _UxGT("Baskı Durduruldu!");
+ LSTR MSG_PRINT_DONE = _UxGT("Yazdırma Bitti");
+ LSTR MSG_PRINTER_KILLED = _UxGT("Yazıcı çöktü!");
LSTR MSG_NO_MOVE = _UxGT("İşlem yok.");
- LSTR MSG_KILLED = _UxGT("Kilitlendi. ");
- LSTR MSG_STOPPED = _UxGT("Durdu. ");
+ LSTR MSG_KILLED = _UxGT("ÇÖKTÜ. ");
+ LSTR MSG_STOPPED = _UxGT("DURDURULDU. ");
+ LSTR MSG_FWRETRACT = _UxGT("Yazılım Geri Çekme");
LSTR MSG_CONTROL_RETRACT = _UxGT("Geri Çek mm");
LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Re.mm");
LSTR MSG_CONTROL_RETRACTF = _UxGT("Geri Çekme V");
LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Atlama mm");
- LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Geri Çek. mm");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
LSTR MSG_AUTORETRACT = _UxGT("Oto. Geri Çekme");
LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("G.Çekme Boyu");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Ekstra Değiştir");
LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Tasfiye uzunluğu");
LSTR MSG_TOOL_CHANGE = _UxGT("Takım Değişimi");
LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Yükselt");
LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Birincil Hız");
+ LSTR MSG_SINGLENOZZLE_WIPE_RETRACT = _UxGT("Geri Çekme Sil");
LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Geri Çekme Hızı");
- LSTR MSG_NOZZLE_STANDBY = _UxGT("Nozul Beklemede");
+ LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Kafa Park");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Kurtarma Hızı");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Fan Hızı");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Fan Süresi");
+ LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Otomatik AÇIK");
+ LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Otomatik KAPALI");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("Takım Taşıma");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Otomatik-taşıma");
+ LSTR MSG_TOOL_MIGRATION_END = _UxGT("Son Ekstruder");
+ LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("* konumuna taşı");
LSTR MSG_FILAMENTCHANGE = _UxGT("Filaman Değiştir");
LSTR MSG_FILAMENTCHANGE_E = _UxGT("Filaman Değiştir *");
LSTR MSG_FILAMENTLOAD = _UxGT("Filaman Yükle");
@@ -365,36 +542,42 @@ namespace Language_tr {
LSTR MSG_FILAMENTUNLOAD = _UxGT("Filaman Çıkart");
LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Filaman Çıkart *");
LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Tümünü Çıkart");
- LSTR MSG_ATTACH_MEDIA = _UxGT("SD Kart Başlatılıyor");
- LSTR MSG_CHANGE_MEDIA = _UxGT("SD Kart Değiştir");
- LSTR MSG_RELEASE_MEDIA = _UxGT("SD Kart Çıkart");
- LSTR MSG_ZPROBE_OUT = _UxGT("Z Prob Açık. Tabla");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Ekle ") MEDIA_TYPE_EN;
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Değiştir ") MEDIA_TYPE_EN;
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Çıkart ") MEDIA_TYPE_EN;
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z Prob Tablayı Geçti");
LSTR MSG_SKEW_FACTOR = _UxGT("Çarpıklık Faktörü");
LSTR MSG_BLTOUCH = _UxGT("BLTouch");
LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch K. Test");
- LSTR MSG_BLTOUCH_RESET = _UxGT("Reset");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Sıfırla");
LSTR MSG_BLTOUCH_STOW = _UxGT("Kapat");
LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Aç");
LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Modu");
+ LSTR MSG_BLTOUCH_SPEED_MODE = _UxGT("Yüksek Hız");
LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Modu");
LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Modu");
LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("BLTouch 5V Ayarla");
LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("BLTouch OD Ayarla");
LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Drenaj Raporu");
- LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("TEHLIKE: Kötü ayarlar hasara neden olabilir! Yine de devam edilsin mi?");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("TEHLIKE: Kötü ayarlar zarar verebilir! Yine de devam edilsin mi?");
LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- LSTR MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("TouchMI'yi Başlat");
LSTR MSG_TOUCHMI_ZTEST = _UxGT("Z Ofset Testi");
LSTR MSG_TOUCHMI_SAVE = _UxGT("Kaydet");
LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("TouchMI Aç");
LSTR MSG_MANUAL_DEPLOY = _UxGT("Z-Probe Aç");
LSTR MSG_MANUAL_STOW = _UxGT("Z-Probe Kapat");
- LSTR MSG_HOME_FIRST = _UxGT("Önce %s Sıfırla");
+ LSTR MSG_HOME_FIRST = _UxGT("Önce %s%s%s Sıfırla");
+ LSTR MSG_ZPROBE_SETTINGS = _UxGT("Prob Ayarları");
LSTR MSG_ZPROBE_OFFSETS = _UxGT("Prob Ofsetleri");
LSTR MSG_ZPROBE_XOFFSET = _UxGT("X Prob Ofset");
LSTR MSG_ZPROBE_YOFFSET = _UxGT("Y Prob Ofset");
LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z Prob Ofset");
+ LSTR MSG_ZPROBE_MARGIN = _UxGT("Prob Payı");
+ LSTR MSG_Z_FEED_RATE = _UxGT("Z İlerleme Hızı");
+ LSTR MSG_ENABLE_HS_MODE = _UxGT("HS modunu aç");
+ LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Nozülü Tablaya Taşı");
LSTR MSG_BABYSTEP_X = _UxGT("Miniadım X");
LSTR MSG_BABYSTEP_Y = _UxGT("Miniadım Y");
LSTR MSG_BABYSTEP_Z = _UxGT("Miniadım Z");
@@ -402,23 +585,28 @@ namespace Language_tr {
LSTR MSG_BABYSTEP_TOTAL = _UxGT("Toplam");
LSTR MSG_ENDSTOP_ABORT = _UxGT("Endstop iptal");
LSTR MSG_HEATING_FAILED_LCD = _UxGT("Isınma başarısız");
- LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Hata: Sıcaklık Aşımı");
- LSTR MSG_THERMAL_RUNAWAY = _UxGT("TERMAL PROBLEM");
- LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("TABLA TERMAL PROBLEM");
- LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ODA TERMAL PROBLEM");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Hata: ISI AŞIMI");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("ISI SORUNU");
+ LSTR MSG_TEMP_MALFUNCTION = _UxGT("SICAKLIK ARIZASI");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("TABLA ISI SORUNU");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("KABİN ISI SORUNU");
+ LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("Soğutucu Isı Sorunu");
+ LSTR MSG_COOLING_FAILED = _UxGT("Soğutma Başarısız");
LSTR MSG_ERR_MAXTEMP = _UxGT("Hata: MAX.SICAKLIK");
LSTR MSG_ERR_MINTEMP = _UxGT("Hata: MIN.SICAKLIK");
LSTR MSG_HALTED = _UxGT("YAZICI DURDURULDU");
+ LSTR MSG_PLEASE_WAIT = _UxGT("Lütfen bekleyin...");
LSTR MSG_PLEASE_RESET = _UxGT("Lütfen Resetleyin");
- LSTR MSG_SHORT_DAY = _UxGT("G"); // One character only
- LSTR MSG_SHORT_HOUR = _UxGT("S"); // One character only
- LSTR MSG_SHORT_MINUTE = _UxGT("D"); // One character only
+ LSTR MSG_PREHEATING = _UxGT("ön ısıtma...");
LSTR MSG_HEATING = _UxGT("Isınıyor...");
LSTR MSG_COOLING = _UxGT("Soğuyor...");
LSTR MSG_BED_HEATING = _UxGT("Tabla Isınıyor...");
LSTR MSG_BED_COOLING = _UxGT("Tabla Soğuyor...");
- LSTR MSG_CHAMBER_HEATING = _UxGT("Oda Isınıyor...");
- LSTR MSG_CHAMBER_COOLING = _UxGT("Oda Soğuyor...");
+ LSTR MSG_PROBE_HEATING = _UxGT("Prob ısınıyor...");
+ LSTR MSG_PROBE_COOLING = _UxGT("Prob Soğuyor...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Kabin Isınıyor...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Kabin Soğuyor...");
+ LSTR MSG_LASER_COOLING = _UxGT("Lazer Soğuyor...");
LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrasyonu");
LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Ayarla X");
LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Ayarla Y");
@@ -431,35 +619,59 @@ namespace Language_tr {
LSTR MSG_DELTA_RADIUS = _UxGT("Yarıçap");
LSTR MSG_INFO_MENU = _UxGT("Yazıcı Hakkında");
LSTR MSG_INFO_PRINTER_MENU = _UxGT("Yazıcı Bilgisi");
- LSTR MSG_3POINT_LEVELING = _UxGT("3-Nokta Hizalama");
- LSTR MSG_LINEAR_LEVELING = _UxGT("Doğrusal Hizalama");
+ LSTR MSG_3POINT_LEVELING = _UxGT("3-Nokta Seviyeleme");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Doğrusal Seviyeleme");
LSTR MSG_BILINEAR_LEVELING = _UxGT("İki Yönlü Doğ. Hiza.");
LSTR MSG_UBL_LEVELING = _UxGT("Birleşik Tabla Hiza.");
- LSTR MSG_MESH_LEVELING = _UxGT("Mesh Hizalama");
+ LSTR MSG_MESH_LEVELING = _UxGT("Mesh Seviyeleme");
+ LSTR MSG_MESH_DONE = _UxGT("Mesh sondalama tamam");
LSTR MSG_INFO_STATS_MENU = _UxGT("İstatistikler");
LSTR MSG_INFO_BOARD_MENU = _UxGT("Kontrolcü Bilgisi");
LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistörler");
LSTR MSG_INFO_EXTRUDERS = _UxGT("Ekstruderler");
LSTR MSG_INFO_BAUDRATE = _UxGT("İletişim Hızı");
LSTR MSG_INFO_PROTOCOL = _UxGT("Protokol");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Kaçak İzleme: KAPALI");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Kaçak İzleme: AÇIK");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Boşta Zamn Aş");
+ LSTR MSG_FAN_SPEED_FAULT = _UxGT("Fan hızı hatası");
+
LSTR MSG_CASE_LIGHT = _UxGT("Aydınlatmayı Aç");
- LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Aydınlatma Parlaklğı");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Işık Parlaklğı");
LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Yanlış Yazıcı");
+ LSTR MSG_COLORS_GET = _UxGT("Renk Al");
+ LSTR MSG_COLORS_SELECT = _UxGT("Renkleri Seç");
+ LSTR MSG_COLORS_APPLIED = _UxGT("Uygulanan renkler");
+ LSTR MSG_COLORS_RED = _UxGT("Kırmızı");
+ LSTR MSG_COLORS_GREEN = _UxGT("Yeşil");
+ LSTR MSG_COLORS_BLUE = _UxGT("Mavi");
+ LSTR MSG_COLORS_WHITE = _UxGT("Beyaz");
+ LSTR MSG_UI_LANGUAGE = _UxGT("UI Dili");
+ LSTR MSG_SOUND_ENABLE = _UxGT("Sesi etkinleştir");
+ LSTR MSG_LOCKSCREEN = _UxGT("Kilit Ekranı");
+ LSTR MSG_LOCKSCREEN_LOCKED = _UxGT("Yazıcı Kilitlendi,");
+ LSTR MSG_LOCKSCREEN_UNLOCK = _UxGT("Açmak için kaydırın.");
+ LSTR MSG_PLEASE_WAIT_REBOOT = _UxGT("Y.Başlatma bekleyin.");
+
#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
+ LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("Ortam yerleştirilmedi.");
+ LSTR MSG_PLEASE_PREHEAT = _UxGT("Lütfen önce hotend'i ısıtın.");
+ LSTR MSG_INFO_PRINT_COUNT_RESET = _UxGT("Baskı Sayısını Sıfırla");
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Baskı Sayısı");
- LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Tamamlanan");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Toplam Baskı Süresi");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("En Uzun Baskı Süresi");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Toplam Filaman");
#else
+ LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("Medya Yok");
+ LSTR MSG_PLEASE_PREHEAT = _UxGT("Ön Isıtma Lütfen");
LSTR MSG_INFO_PRINT_COUNT = _UxGT("Baskı");
- LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Tamamlanan");
LSTR MSG_INFO_PRINT_TIME = _UxGT("Süre");
LSTR MSG_INFO_PRINT_LONGEST = _UxGT("En Uzun");
LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Filaman");
#endif
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Tamamlanan");
LSTR MSG_INFO_MIN_TEMP = _UxGT("Min Sıc.");
LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Sıc.");
LSTR MSG_INFO_PSU = _UxGT("Güç Kaynağı");
@@ -474,9 +686,15 @@ namespace Language_tr {
LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("Seçenekler:");
LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Daha Fazla Tasviye");
LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Baskıyı sürdür");
+ LSTR MSG_FILAMENT_CHANGE_PURGE_CONTINUE = _UxGT("Temizle veya Devam?");
LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozul: ");
LSTR MSG_RUNOUT_SENSOR = _UxGT("Runout Sensörü");
LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Aşınma Farkı mm");
+ LSTR MSG_RUNOUT_ENABLE = _UxGT("Fil. Sens. Aç");
+ LSTR MSG_RUNOUT_ACTIVE = _UxGT("Fil. Sens. Aktif");
+ LSTR MSG_INVERT_EXTRUDER = _UxGT("Ekstruder Ters Çevir");
+ LSTR MSG_EXTRUDER_MIN_TEMP = _UxGT("Ekstruder Min Isı");
+ LSTR MSG_FANCHECK = _UxGT("Fan Takosu Kontrolü");
LSTR MSG_KILL_HOMING_FAILED = _UxGT("Sıfırlama Başarısız");
LSTR MSG_LCD_PROBING_FAILED = _UxGT("Probing Başarısız");
@@ -526,6 +744,20 @@ namespace Language_tr {
LSTR MSG_SNAKE = _UxGT("Sn4k3");
LSTR MSG_MAZE = _UxGT("Maze");
+ LSTR MSG_BAD_PAGE = _UxGT("Hatalı sayfa dizini");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("Kötü sayfa hızı");
+
+ LSTR MSG_EDIT_PASSWORD = _UxGT("Şifreyi Düzenle");
+ LSTR MSG_LOGIN_REQUIRED = _UxGT("Giriş Gerekli");
+ LSTR MSG_PASSWORD_SETTINGS = _UxGT("Şifre Ayarları");
+ LSTR MSG_ENTER_DIGIT = _UxGT("Rakam girin");
+ LSTR MSG_CHANGE_PASSWORD = _UxGT("Şifre Belirle/Düzenle");
+ LSTR MSG_REMOVE_PASSWORD = _UxGT("Şifre Kaldır");
+ LSTR MSG_PASSWORD_SET = _UxGT("Şifre ");
+ LSTR MSG_START_OVER = _UxGT("Yeniden Başla");
+ LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Kaydetmeyi Unutma!");
+ LSTR MSG_PASSWORD_REMOVED = _UxGT("Şifre Kaldırıldı");
+
//
// Filament Değişim ekranları 4 satırlı ekranda 3 satıra kadar gösterilir
// ...veya 3 satırlı ekranda 2 satıra kadar
@@ -567,12 +799,43 @@ namespace Language_tr {
LSTR MSG_BACKLASH = _UxGT("Ters Tepki");
LSTR MSG_BACKLASH_CORRECTION = _UxGT("Düzeltme");
LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Yumuşatma");
-}
-#if FAN_COUNT == 1
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
-#else
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
-#endif
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("Seviye X Ekseni");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Otomatik Kalibre Et");
+ #if ENABLED(TOUCH_UI_FTDI_EVE)
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Boşta kalma zaman aşımı, sıcaklık düştü. Yeniden ısıtmak ve tekrar devam etmek için için Tamam'a basın.");
+ #else
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Isıtıcı Zaman Aşımı");
+ #endif
+ LSTR MSG_REHEAT = _UxGT("Yeniden ısıt");
+ LSTR MSG_REHEATING = _UxGT("Yeniden ısıtılıyor...");
+ LSTR MSG_REHEATDONE = _UxGT("Y. Isıtma Tamam");
+
+ LSTR MSG_PROBE_WIZARD = _UxGT("Z Prob Sihirbazı");
+ LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Z Referansını Tarama");
+ LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Prob Konumuna Geçme");
+
+ LSTR MSG_XATC = _UxGT("X-Twist Sihirbazı");
+ LSTR MSG_XATC_DONE = _UxGT("X-Twist Sihirbazı Bitti!");
+ LSTR MSG_XATC_UPDATE_Z_OFFSET = _UxGT("Prob Z-Offset güncelle ");
+
+ LSTR MSG_SOUND = _UxGT("Ses");
+
+ LSTR MSG_TOP_LEFT = _UxGT("Üst Sol");
+ LSTR MSG_BOTTOM_LEFT = _UxGT("Alt Sol");
+ LSTR MSG_TOP_RIGHT = _UxGT("Üst Sağ");
+ LSTR MSG_BOTTOM_RIGHT = _UxGT("Alt Sağ");
+ LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Kalibrasyon Tamamlandı");
+ LSTR MSG_CALIBRATION_FAILED = _UxGT("Kalibrasyon Başarısız");
+
+ LSTR MSG_DRIVER_BACKWARD = _UxGT(" driver backward");
+
+ LSTR MSG_SD_CARD = _UxGT("SD Kart");
+ LSTR MSG_USB_DISK = _UxGT("USB Disk");
+
+ LSTR MSG_HOST_SHUTDOWN = _UxGT("Host'u Kapat");
+
+ LSTR MSG_SHORT_DAY = _UxGT("g"); // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("s"); // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("d"); // One character only
+}
diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h
index 0a695bfe06..106d73d35f 100644
--- a/Marlin/src/lcd/language/language_en.h
+++ b/Marlin/src/lcd/language/language_en.h
@@ -866,11 +866,12 @@ namespace Language_en {
LSTR MSG_HOST_SHUTDOWN = _UxGT("Host Shutdown");
- // These strings can be the same in all languages
- LSTR MSG_MARLIN = _UxGT("Marlin");
LSTR MSG_SHORT_DAY = _UxGT("d"); // One character only
LSTR MSG_SHORT_HOUR = _UxGT("h"); // One character only
LSTR MSG_SHORT_MINUTE = _UxGT("m"); // One character only
+
+ // These strings can be the same in all languages
+ LSTR MSG_MARLIN = _UxGT("Marlin");
LSTR MSG_PID_P = _UxGT("PID-P");
LSTR MSG_PID_P_E = _UxGT("PID-P *");
LSTR MSG_PID_I = _UxGT("PID-I");
diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h
index e274de8db6..cfd6c81d59 100644
--- a/Marlin/src/lcd/language/language_fr.h
+++ b/Marlin/src/lcd/language/language_fr.h
@@ -443,9 +443,6 @@ namespace Language_fr {
LSTR MSG_HALTED = _UxGT("IMPR. STOPPÉE");
LSTR MSG_PLEASE_RESET = _UxGT("Redémarrer SVP");
- LSTR MSG_SHORT_DAY = _UxGT("j"); // One character only
- LSTR MSG_SHORT_HOUR = _UxGT("h"); // One character only
- LSTR MSG_SHORT_MINUTE = _UxGT("m"); // One character only
LSTR MSG_HEATING = _UxGT("en chauffe...");
LSTR MSG_COOLING = _UxGT("Refroidissement");
@@ -631,4 +628,8 @@ namespace Language_fr {
LSTR MSG_SD_CARD = _UxGT("Carte SD");
LSTR MSG_USB_DISK = _UxGT("Clé USB");
+
+ LSTR MSG_SHORT_DAY = _UxGT("j"); // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("h"); // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("m"); // One character only
}
diff --git a/Marlin/src/lcd/language/language_hu.h b/Marlin/src/lcd/language/language_hu.h
index e17de38747..caa8fc62df 100644
--- a/Marlin/src/lcd/language/language_hu.h
+++ b/Marlin/src/lcd/language/language_hu.h
@@ -490,9 +490,6 @@ namespace Language_hu {
LSTR MSG_ERR_MINTEMP = _UxGT("Hiba: MIN höfok");
LSTR MSG_HALTED = _UxGT("A NYOMTATÓ LEÁLLT");
LSTR MSG_PLEASE_RESET = _UxGT("Indítsd újra!");
- LSTR MSG_SHORT_DAY = _UxGT("n"); // Csak egy karakter
- LSTR MSG_SHORT_HOUR = _UxGT("ó"); // Csak egy karakter
- LSTR MSG_SHORT_MINUTE = _UxGT("p"); // Csak egy karakter
LSTR MSG_HEATING = _UxGT("Fütés...");
LSTR MSG_COOLING = _UxGT("Hütés...");
LSTR MSG_BED_HEATING = _UxGT("Ágy fütés...");
@@ -696,12 +693,8 @@ namespace Language_hu {
LSTR MSG_SD_CARD = _UxGT("SD Kártya");
LSTR MSG_USB_DISK = _UxGT("USB Lemez");
-}
-#if FAN_COUNT == 1
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
-#else
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
-#endif
+ LSTR MSG_SHORT_DAY = _UxGT("n"); // Csak egy karakter
+ LSTR MSG_SHORT_HOUR = _UxGT("ó"); // Csak egy karakter
+ LSTR MSG_SHORT_MINUTE = _UxGT("p"); // Csak egy karakter
+}
diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h
index 15d6a29053..1b5715aedd 100644
--- a/Marlin/src/lcd/language/language_pl.h
+++ b/Marlin/src/lcd/language/language_pl.h
@@ -538,11 +538,3 @@ namespace Language_pl {
LSTR MSG_CALIBRATION_FAILED = _UxGT("Kalibracja nie powiodła się");
}
-
-#if FAN_COUNT == 1
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
-#else
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
-#endif
diff --git a/Marlin/src/lcd/language/language_ro.h b/Marlin/src/lcd/language/language_ro.h
index 162f3a3616..938aa71c57 100644
--- a/Marlin/src/lcd/language/language_ro.h
+++ b/Marlin/src/lcd/language/language_ro.h
@@ -606,11 +606,3 @@ namespace Language_ro {
LSTR MSG_REHEAT = _UxGT("Reincalzire");
LSTR MSG_REHEATING = _UxGT("Reincalzire...");
}
-
-#if FAN_COUNT == 1
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
-#else
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
-#endif
diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h
index c8077582b6..ab5d7fca98 100644
--- a/Marlin/src/lcd/language/language_ru.h
+++ b/Marlin/src/lcd/language/language_ru.h
@@ -606,9 +606,6 @@ namespace Language_ru {
LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Ошибка: Т контр.");
LSTR MSG_HALTED = _UxGT("ПРИНТЕР ОСТАНОВЛЕН");
LSTR MSG_PLEASE_RESET = _UxGT("Сделайте сброс");
- LSTR MSG_SHORT_DAY = _UxGT("д"); // One character only
- LSTR MSG_SHORT_HOUR = _UxGT("ч"); // One character only
- LSTR MSG_SHORT_MINUTE = _UxGT("м"); // One character only
LSTR MSG_HEATING = _UxGT("Нагрев...");
LSTR MSG_COOLING = _UxGT("Охлаждение...");
LSTR MSG_BED_HEATING = _UxGT("Нагрев стола...");
@@ -865,12 +862,8 @@ namespace Language_ru {
LSTR MSG_SD_CARD = _UxGT("SD Карта");
LSTR MSG_USB_DISK = _UxGT("USB Диск");
-}
-#if FAN_COUNT == 1
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
-#else
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
-#endif
+ LSTR MSG_SHORT_DAY = _UxGT("д"); // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("ч"); // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("м"); // One character only
+}
diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h
index dc03265524..7e7ef5eb37 100644
--- a/Marlin/src/lcd/language/language_uk.h
+++ b/Marlin/src/lcd/language/language_uk.h
@@ -625,9 +625,6 @@ namespace Language_uk {
LSTR MSG_ERR_MINTEMP = _UxGT("МІНІМАЛЬНА Т") LCD_STR_DEGREE;
LSTR MSG_HALTED = _UxGT("ПРИНТЕР ЗУПИНЕНО");
LSTR MSG_PLEASE_RESET = _UxGT("Перезавантажте");
- LSTR MSG_SHORT_DAY = _UxGT("д"); // One character only
- LSTR MSG_SHORT_HOUR = _UxGT("г"); // One character only
- LSTR MSG_SHORT_MINUTE = _UxGT("х"); // One character only
LSTR MSG_HEATING = _UxGT("Нагрівання...");
LSTR MSG_COOLING = _UxGT("Охолодження...");
LSTR MSG_BED_HEATING = _UxGT("Нагрів столу...");
@@ -913,12 +910,8 @@ namespace Language_uk {
LSTR MSG_SD_CARD = _UxGT("SD Картка");
LSTR MSG_USB_DISK = _UxGT("USB Диск");
-}
-#if FAN_COUNT == 1
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
-#else
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
-#endif
+ LSTR MSG_SHORT_DAY = _UxGT("д"); // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("г"); // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("х"); // One character only
+}
diff --git a/Marlin/src/lcd/language/language_vi.h b/Marlin/src/lcd/language/language_vi.h
index c01b2f44fa..3925eb8b83 100644
--- a/Marlin/src/lcd/language/language_vi.h
+++ b/Marlin/src/lcd/language/language_vi.h
@@ -341,9 +341,6 @@ namespace Language_vi {
LSTR MSG_ERR_MINTEMP = _UxGT("Điều sai: nhiệt độ tối thiểu"); // Err: MINTEMP
LSTR MSG_HALTED = _UxGT("MÁY IN ĐÃ DỪNG LẠI"); // PRINTER HALTED
LSTR MSG_PLEASE_RESET = _UxGT("Xin bặt lại"); // Please reset
- LSTR MSG_SHORT_DAY = _UxGT("n"); // d - ngày - One character only
- LSTR MSG_SHORT_HOUR = _UxGT("g"); // h - giờ - One character only
- LSTR MSG_SHORT_MINUTE = _UxGT("p"); // m - phút - One character only
LSTR MSG_HEATING = _UxGT("Đang sưởi nóng..."); // heating
LSTR MSG_COOLING = _UxGT("Đang làm nguội..."); // cooling
LSTR MSG_BED_HEATING = _UxGT("Đang sưởi nong bàn..."); // bed heating
@@ -437,4 +434,8 @@ namespace Language_vi {
LSTR MSG_TMC_HOMING_THRS = _UxGT("Vô cảm biến"); // Sensorless homing
LSTR MSG_TMC_STEPPING_MODE = _UxGT("Chế độ từng bước"); // Stepping mode
LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("CắtTàngHình được kích hoạt"); // StealthChop enabled
+
+ LSTR MSG_SHORT_DAY = _UxGT("n"); // d - ngày - One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("g"); // h - giờ - One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("p"); // m - phút - One character only
}
diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h
index 4dccbc4f09..0fd72b410c 100644
--- a/Marlin/src/lcd/language/language_zh_CN.h
+++ b/Marlin/src/lcd/language/language_zh_CN.h
@@ -438,9 +438,6 @@ namespace Language_zh_CN {
LSTR MSG_ERR_MINTEMP = _UxGT("错误:最低温度"); // "Err: MINTEMP"
LSTR MSG_HALTED = _UxGT("打印停机"); // "PRINTER HALTED"
LSTR MSG_PLEASE_RESET = _UxGT("请重置"); // "Please reset"
- LSTR MSG_SHORT_DAY = _UxGT("天"); // "d" // One character only
- LSTR MSG_SHORT_HOUR = _UxGT("时"); // "h" // One character only
- LSTR MSG_SHORT_MINUTE = _UxGT("分"); // "m" // One character only
LSTR MSG_HEATING = _UxGT("加热中 ..."); // "Heating..."
LSTR MSG_COOLING = _UxGT("冷却中 ...");
LSTR MSG_BED_HEATING = _UxGT("加热热床中 ..."); // "Bed Heating..."
@@ -608,12 +605,8 @@ namespace Language_zh_CN {
LSTR MSG_HEATER_TIMEOUT = _UxGT("加热器超时");
LSTR MSG_REHEAT = _UxGT("重新加热");
LSTR MSG_REHEATING = _UxGT("重新加热中...");
-}
-#if FAN_COUNT == 1
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
-#else
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
-#endif
+ LSTR MSG_SHORT_DAY = _UxGT("天"); // "d" // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("时"); // "h" // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("分"); // "m" // One character only
+}
diff --git a/Marlin/src/lcd/language/language_zh_TW.h b/Marlin/src/lcd/language/language_zh_TW.h
index 4ba94f3014..a00303864a 100644
--- a/Marlin/src/lcd/language/language_zh_TW.h
+++ b/Marlin/src/lcd/language/language_zh_TW.h
@@ -388,9 +388,6 @@ namespace Language_zh_TW {
LSTR MSG_ERR_MINTEMP = _UxGT("錯誤:最低溫度"); // "Err: MINTEMP"
LSTR MSG_HALTED = _UxGT("印表機停機"); // "PRINTER HALTED"
LSTR MSG_PLEASE_RESET = _UxGT("請重置"); // "Please reset"
- LSTR MSG_SHORT_DAY = _UxGT("天"); // "d" // One character only
- LSTR MSG_SHORT_HOUR = _UxGT("時"); // "h" // One character only
- LSTR MSG_SHORT_MINUTE = _UxGT("分"); // "m" // One character only
LSTR MSG_HEATING = _UxGT("加熱中 ..."); // "Heating..."
LSTR MSG_COOLING = _UxGT("冷卻中 ..."); // "Cooling..."
LSTR MSG_BED_HEATING = _UxGT("加熱熱床中 ..."); // "Bed Heating..."
@@ -490,12 +487,8 @@ namespace Language_zh_TW {
LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("按下完成..")); // "Click to finish"
LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("恢復中 ...")); // "Resuming..."
#endif // LCD_HEIGHT < 4
-}
-#if FAN_COUNT == 1
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
-#else
- #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
- #define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
-#endif
+ LSTR MSG_SHORT_DAY = _UxGT("天"); // "d" // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("時"); // "h" // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("分"); // "m" // One character only
+}
From c2572de9f48c8518ebae7866a45882cf6cad64aa Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Mon, 6 Mar 2023 00:23:51 +0000
Subject: [PATCH 85/97] [cron] Bump distribution date (2023-03-06)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 09916dd851..1458b8e10e 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-03-05"
+//#define STRING_DISTRIBUTION_DATE "2023-03-06"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 9d1c614d6f..7c61f7c5bd 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-03-05"
+ #define STRING_DISTRIBUTION_DATE "2023-03-06"
#endif
/**
From 22f370a3fa3a9c9f95965eeb3e7bcdac577d3905 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Sun, 5 Mar 2023 19:15:22 -0600
Subject: [PATCH 86/97] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Scrip?=
=?UTF-8?q?t=20to=20make=20non-accented=20languages?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/lcd/language/language_pt.h | 2 +-
buildroot/share/fonts/genallfont.sh | 12 ++++-----
buildroot/share/fonts/make_lang_na.sh | 39 +++++++++++++++++++++++++++
3 files changed, 46 insertions(+), 7 deletions(-)
create mode 100755 buildroot/share/fonts/make_lang_na.sh
diff --git a/Marlin/src/lcd/language/language_pt.h b/Marlin/src/lcd/language/language_pt.h
index 4d9a8ae6da..7f09d71e48 100644
--- a/Marlin/src/lcd/language/language_pt.h
+++ b/Marlin/src/lcd/language/language_pt.h
@@ -29,7 +29,7 @@
* See also https://marlinfw.org/docs/development/lcd_language.html
*/
- #define DISPLAY_CHARSET_ISO10646_1
+#define DISPLAY_CHARSET_ISO10646_1
namespace Language_pt {
using namespace Language_en; // Inherit undefined strings from English
diff --git a/buildroot/share/fonts/genallfont.sh b/buildroot/share/fonts/genallfont.sh
index e04b11a799..cc92d17d2c 100755
--- a/buildroot/share/fonts/genallfont.sh
+++ b/buildroot/share/fonts/genallfont.sh
@@ -67,21 +67,21 @@ LANGS_DEFAULT="an bg ca cz da de el el_CY en es eu fi fr gl hr hu it jp_kana ko_
#
# Generate data for language list MARLIN_LANGS or all if not provided
#
-for LANG in ${LANG_ARG:=$LANGS_DEFAULT} ; do
- echo "Generating Marlin language data for '${LANG}'" >&2
- case "$LANG" in
+for ALANG in ${LANG_ARG:=$LANGS_DEFAULT} ; do
+ echo "Generating Marlin language data for '${ALANG}'" >&2
+ case "$ALANG" in
zh_* ) FONTFILE="wenquanyi_12pt" ;;
ko_* ) FONTFILE="${DN_EXEC}/NanumGothic.bdf" ;;
* ) FONTFILE="${DN_EXEC}/marlin-6x12-3.bdf" ;;
esac
DN_WORK=$(mktemp -d)
cp Configuration.h ${DN_WORK}/
- cp src/lcd/language/language_${LANG}.h ${DN_WORK}/
+ cp src/lcd/language/language_${ALANG}.h ${DN_WORK}/
cd "${DN_WORK}"
- ${DN_EXEC}/uxggenpages.sh "${FONTFILE}" $LANG
+ ${DN_EXEC}/uxggenpages.sh "${FONTFILE}" $ALANG
sed -i fontutf8-data.h -e 's|fonts//|fonts/|g' -e 's|fonts//|fonts/|g' -e 's|[/0-9a-zA-Z_\-]*buildroot/share/fonts|buildroot/share/fonts|' 2>/dev/null
cd - >/dev/null
- mv ${DN_WORK}/fontutf8-data.h src/lcd/dogm/fontdata/langdata_${LANG}.h
+ mv ${DN_WORK}/fontutf8-data.h src/lcd/dogm/fontdata/langdata_${ALANG}.h
rm -rf ${DN_WORK}
done
diff --git a/buildroot/share/fonts/make_lang_na.sh b/buildroot/share/fonts/make_lang_na.sh
new file mode 100755
index 0000000000..d7453e2820
--- /dev/null
+++ b/buildroot/share/fonts/make_lang_na.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env bash
+#
+# make_lang_na.sh
+#
+# Create non-accented language files given a list of accented language files.
+#
+
+which gsed >/dev/null || { echo "gsed is required for this script." ; exit 1 ; }
+which perl >/dev/null || { echo "perl is required for this script." ; exit 1 ; }
+
+#
+# Get language arguments
+#
+[ $# ] || { echo "One or more language codes (such as 'fr') must be supplied." ; exit 1 ; }
+
+LANG_ARG="$@"
+
+#
+# Change to working directory 'Marlin'
+#
+OLDWD=`pwd`
+[[ $(basename "$OLDWD") != 'Marlin' && -d "Marlin" ]] && cd Marlin
+[[ -f "Configuration.h" ]] || { echo -n "cd to the 'Marlin' folder to run " ; basename $0 ; exit 1; }
+
+#
+# Generate a non-accented language file
+#
+for ALANG in $LANG_ARG ; do
+ echo "Generating a non-accented language for '${ALANG}'" >&2
+ OUTFILE=src/lcd/language/language_${ALANG}_na.h
+ cp src/lcd/language/language_${ALANG}.h $OUTFILE
+ perl -pi -e 's/\s*#define DISPLAY_CHARSET_.+\n*//g' $OUTFILE
+ perl -pi -e 's/\s*constexpr .+ CHARSIZE.+\n*//g' $OUTFILE
+ perl -pi -e "s/namespace Language_${ALANG}/#define DISPLAY_CHARSET_ISO10646_1\n#define NOT_EXTENDED_ISO10646_1_5X7\n\nnamespace Language_${ALANG}_na/" $OUTFILE
+ gsed -i 'y/āáǎàâäēéěèêīíǐìïîōóǒòöôūúǔùǖǘǚǜüûĀÁǍÀĒÉĚÈÊĪÍǏÌÎŌÓǑÒÔŪÚǓÙǕǗǙǛÜÛÇçÑñ/aaaaaaeeeeeiiiiiioooooouuuuuuuuuuAAAAEEEEEIIIIIOOOOOUUUUUUUUUUCcNn/' $OUTFILE
+ perl -pi -e 's/ß/ss/g' $OUTFILE
+done
+
+cd "$OLDWD"
From e0538278313a9249c79c80dc6a0653ac5e44071a Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Mon, 6 Mar 2023 13:55:38 -0600
Subject: [PATCH 87/97] =?UTF-8?q?=F0=9F=8C=90=20Update=20Turkish=20languag?=
=?UTF-8?q?e?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Followup to #25447
---
Marlin/{kaynak/lcd/dil => src/lcd/language}/language_tr.h | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename Marlin/{kaynak/lcd/dil => src/lcd/language}/language_tr.h (100%)
diff --git a/Marlin/kaynak/lcd/dil/language_tr.h b/Marlin/src/lcd/language/language_tr.h
similarity index 100%
rename from Marlin/kaynak/lcd/dil/language_tr.h
rename to Marlin/src/lcd/language/language_tr.h
From 0e2837e3e771635b65b7293fc11857d333ef0c16 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Tue, 7 Mar 2023 00:40:18 +0000
Subject: [PATCH 88/97] [cron] Bump distribution date (2023-03-07)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 1458b8e10e..3eae6ed9d8 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-03-06"
+//#define STRING_DISTRIBUTION_DATE "2023-03-07"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 7c61f7c5bd..0eac8c737c 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-03-06"
+ #define STRING_DISTRIBUTION_DATE "2023-03-07"
#endif
/**
From cc31537ae3ca3be37ffb171540e7445f30827930 Mon Sep 17 00:00:00 2001
From: albatorsssx
Date: Tue, 7 Mar 2023 03:04:47 +0100
Subject: [PATCH 89/97] =?UTF-8?q?=F0=9F=8C=90=20DGUS=20Reloaded=20non-acce?=
=?UTF-8?q?nted=20French=20(#25443)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Scott Lahteine
---
Marlin/src/core/language.h | 1 +
Marlin/src/lcd/dogm/fontdata/langdata_fr_na.h | 10 +
.../lcd/extui/dgus_reloaded/DGUSRxHandler.cpp | 80 +--
.../extui/dgus_reloaded/DGUSScreenHandler.cpp | 48 +-
.../extui/dgus_reloaded/DGUSScreenHandler.h | 15 +-
.../extui/dgus_reloaded/DGUSSetupHandler.cpp | 28 +-
.../lcd/extui/dgus_reloaded/DGUSTxHandler.cpp | 2 +-
.../lcd/extui/dgus_reloaded/DGUSTxHandler.h | 2 +-
.../extui/dgus_reloaded/config/DGUS_Addr.h | 2 +-
.../definition/DGUS_ScreenAddrList.cpp | 4 +-
.../dgus_reloaded/definition/DGUS_VPList.cpp | 4 +-
Marlin/src/lcd/language/language_en.h | 24 +
Marlin/src/lcd/language/language_fr.h | 23 +
Marlin/src/lcd/language/language_fr_na.h | 658 ++++++++++++++++++
buildroot/share/fonts/genallfont.sh | 2 +-
buildroot/tests/FYSETC_F6 | 11 +-
16 files changed, 804 insertions(+), 110 deletions(-)
create mode 100644 Marlin/src/lcd/dogm/fontdata/langdata_fr_na.h
create mode 100644 Marlin/src/lcd/language/language_fr_na.h
diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h
index 2d0b23a529..d231a7d3e9 100644
--- a/Marlin/src/core/language.h
+++ b/Marlin/src/core/language.h
@@ -55,6 +55,7 @@
// eu Basque-Euskera
// fi Finnish
// fr French
+// fr_na French without accents (DWIN T5UID1 touchscreen)
// gl Galician
// hr Croatian
// hu Hungarian
diff --git a/Marlin/src/lcd/dogm/fontdata/langdata_fr_na.h b/Marlin/src/lcd/dogm/fontdata/langdata_fr_na.h
new file mode 100644
index 0000000000..218f042a20
--- /dev/null
+++ b/Marlin/src/lcd/dogm/fontdata/langdata_fr_na.h
@@ -0,0 +1,10 @@
+/**
+ * Generated automatically by buildroot/share/fonts/uxggenpages.sh
+ * Contents will be REPLACED by future processing!
+ * Use genallfont.sh to generate font data for updated languages.
+ */
+#pragma once
+
+#include "langdata.h"
+
+static const uxg_fontinfo_t g_fontinfo_fr_na[] PROGMEM = {};
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp
index 2b750df9c9..f149d3c419 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp
@@ -63,13 +63,13 @@ void DGUSRxHandler::ScreenChange(DGUS_VP &vp, void *data_ptr) {
if (vp.addr == DGUS_Addr::SCREENCHANGE_Idle
&& (ExtUI::isPrinting() || ExtUI::isPrintingPaused())) {
- dgus_screen_handler.SetStatusMessage(F("Impossible while printing"));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_NOT_WHILE_PRINTING));
return;
}
if (vp.addr == DGUS_Addr::SCREENCHANGE_Printing
&& (!ExtUI::isPrinting() && !ExtUI::isPrintingPaused())) {
- dgus_screen_handler.SetStatusMessage(F("Impossible while idle"));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_NOT_WHILE_IDLE));
return;
}
@@ -137,7 +137,7 @@ void DGUSRxHandler::ScreenChange(DGUS_VP &vp, void *data_ptr) {
UNUSED(data_ptr);
if (dgus_screen_handler.filelist_selected < 0) {
- dgus_screen_handler.SetStatusMessage(F("No file selected"));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_NO_FILE_SELECTED));
return;
}
@@ -147,7 +147,7 @@ void DGUSRxHandler::ScreenChange(DGUS_VP &vp, void *data_ptr) {
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
@@ -205,7 +205,7 @@ void DGUSRxHandler::PrintResume(DGUS_VP &vp, void *data_ptr) {
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
@@ -362,7 +362,7 @@ void DGUSRxHandler::TempCool(DGUS_VP &vp, void *data_ptr) {
#endif
}
- dgus_screen_handler.SetStatusMessage(F("Cooling..."));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(MSG_COOLING));
dgus_screen_handler.TriggerFullUpdate();
}
@@ -388,12 +388,12 @@ void DGUSRxHandler::ZOffset(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
if (!ExtUI::isAxisPositionKnown(ExtUI::Z)) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_HOMING_REQUIRED));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_HOMING_REQUIRED));
return;
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
@@ -412,12 +412,12 @@ void DGUSRxHandler::ZOffsetStep(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
if (!ExtUI::isAxisPositionKnown(ExtUI::Z)) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_HOMING_REQUIRED));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_HOMING_REQUIRED));
return;
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
@@ -454,12 +454,12 @@ void DGUSRxHandler::MoveToPoint(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
if (!ExtUI::isPositionKnown()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_HOMING_REQUIRED));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_HOMING_REQUIRED));
return;
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
@@ -509,12 +509,12 @@ void DGUSRxHandler::Probe(DGUS_VP &vp, void *data_ptr) {
#endif
if (!ExtUI::isPositionKnown()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_HOMING_REQUIRED));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_HOMING_REQUIRED));
return;
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
@@ -533,7 +533,7 @@ void DGUSRxHandler::DisableABL(DGUS_VP &vp, void *data_ptr) {
UNUSED(data_ptr);
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
@@ -574,7 +574,7 @@ void DGUSRxHandler::FilamentMove(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
@@ -598,7 +598,7 @@ void DGUSRxHandler::FilamentMove(DGUS_VP &vp, void *data_ptr) {
}
if (ExtUI::getActualTemp_celsius(extruder) < (float)EXTRUDE_MINTEMP) {
- dgus_screen_handler.SetStatusMessage(F("Temperature too low"));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_TEMP_TOO_LOW));
return;
}
@@ -618,17 +618,13 @@ void DGUSRxHandler::Home(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
DGUS_Data::Axis axis = (DGUS_Data::Axis)((uint8_t*)data_ptr)[1];
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 1);
- dgus_screen_handler.SetMessageLinePGM(DGUS_MSG_HOMING, 2);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 3);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 4);
- dgus_screen_handler.ShowWaitScreen(dgus_screen_handler.GetCurrentScreen());
+ dgus_screen_handler.ShowWaitScreen(GET_TEXT_F(DGUS_MSG_HOMING), dgus_screen_handler.GetCurrentScreen());
switch (axis) {
case DGUS_Data::Axis::X_Y_Z:
@@ -662,7 +658,7 @@ void DGUSRxHandler::Move(DGUS_VP &vp, void *data_ptr) {
}
if (!ExtUI::isAxisPositionKnown(axis)) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_HOMING_REQUIRED));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_HOMING_REQUIRED));
return;
}
@@ -718,7 +714,7 @@ void DGUSRxHandler::MoveStep(DGUS_VP &vp, void *data_ptr) {
}
if (!ExtUI::isAxisPositionKnown(axis)) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_HOMING_REQUIRED));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_HOMING_REQUIRED));
return;
}
@@ -755,15 +751,11 @@ void DGUSRxHandler::GcodeExecute(DGUS_VP &vp, void *data_ptr) {
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 1);
- dgus_screen_handler.SetMessageLinePGM(PSTR("Executing command..."), 2);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 3);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 4);
- dgus_screen_handler.ShowWaitScreen(DGUS_Screen::GCODE);
+ dgus_screen_handler.ShowWaitScreen(GET_TEXT_F(DGUS_MSG_EXECUTING_COMMAND), DGUS_Screen::GCODE);
queue.enqueue_one_now(dgus_screen_handler.gcode);
}
@@ -778,7 +770,7 @@ void DGUSRxHandler::ResetEEPROM(DGUS_VP &vp, void *data_ptr) {
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
@@ -796,7 +788,7 @@ void DGUSRxHandler::SettingsExtra(DGUS_VP &vp, void *data_ptr) {
case DGUS_Data::Extra::BUTTON1:
#if ENABLED(BLTOUCH)
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
@@ -842,7 +834,7 @@ void DGUSRxHandler::PIDSetTemp(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
@@ -873,7 +865,7 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) {
UNUSED(data_ptr);
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
@@ -887,7 +879,7 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) {
heater = H_BED;
break;
#else
- dgus_screen_handler.SetStatusMessage(F("Bed PID disabled"));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BED_PID_DISABLED));
return;
#endif
case DGUS_Data::Heater::H0:
@@ -895,7 +887,7 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) {
heater = H_E0;
break;
#else
- dgus_screen_handler.SetStatusMessage(F("PID disabled"));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_PID_DISABLED));
return;
#endif
#if HAS_MULTI_HOTEND
@@ -904,7 +896,7 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) {
heater = H_E1;
break;
#else
- dgus_screen_handler.SetStatusMessage(F("PID disabled"));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_PID_DISABLED));
return;
#endif
#endif
@@ -913,11 +905,7 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) {
char buffer[24];
snprintf_P(buffer, sizeof(buffer), PSTR("M303C%dE%dS%dU1"), cycles, heater, dgus_screen_handler.pid_temp);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 1);
- dgus_screen_handler.SetMessageLinePGM(PSTR("PID autotuning..."), 2);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 3);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 4);
- dgus_screen_handler.ShowWaitScreen(DGUS_Screen::PID);
+ dgus_screen_handler.ShowWaitScreen(GET_TEXT_F(DGUS_MSG_PID_AUTOTUNING), DGUS_Screen::PID);
queue.enqueue_one_now(buffer);
queue.enqueue_now_P(DGUS_CMD_EEPROM_SAVE);
@@ -934,7 +922,7 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) {
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
@@ -953,12 +941,12 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) {
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return;
}
if (!recovery.valid()) {
- dgus_screen_handler.SetStatusMessage(F("Invalid recovery data"));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_INVALID_RECOVERY_DATA));
return;
}
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp
index a7295f90fe..cc98126c9b 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp
@@ -69,12 +69,7 @@ bool DGUSScreenHandler::leveling_active = false;
millis_t DGUSScreenHandler::status_expire = 0;
millis_t DGUSScreenHandler::eeprom_save = 0;
-const char DGUS_MSG_HOMING_REQUIRED[] PROGMEM = "Homing required",
- DGUS_MSG_BUSY[] PROGMEM = "Busy",
- DGUS_MSG_UNDEF[] PROGMEM = "-",
- DGUS_MSG_HOMING[] PROGMEM = "Homing...",
- DGUS_MSG_FW_OUTDATED[] PROGMEM = "DWIN GUI/OS update required",
- DGUS_MSG_ABL_REQUIRED[] PROGMEM = "Auto bed leveling required";
+const char DGUS_MSG_UNDEF[] PROGMEM = "-";
const char DGUS_CMD_HOME[] PROGMEM = "G28",
DGUS_CMD_EEPROM_SAVE[] PROGMEM = "M500";
@@ -138,7 +133,7 @@ void DGUSScreenHandler::Loop() {
if (current_screen == DGUS_Screen::LEVELING_PROBING && IsPrinterIdle()) {
dgus_display.PlaySound(3);
- SetStatusMessage(ExtUI::getMeshValid() ? F("Probing successful") : F("Probing failed"));
+ SetStatusMessage(ExtUI::getMeshValid() ? GET_TEXT_F(DGUS_MSG_PROBING_SUCCESS) : GET_TEXT_F(DGUS_MSG_PROBING_FAILED));
MoveToScreen(DGUS_Screen::LEVELING_AUTOMATIC);
return;
@@ -159,10 +154,10 @@ void DGUSScreenHandler::Loop() {
}
void DGUSScreenHandler::PrinterKilled(FSTR_P const error, FSTR_P const component) {
- SetMessageLinePGM(FTOP(error), 1);
- SetMessageLinePGM(FTOP(component), 2);
+ SetMessageLine(error, 1);
+ SetMessageLine(component, 2);
SetMessageLinePGM(NUL_STR, 3);
- SetMessageLinePGM(GET_TEXT(MSG_PLEASE_RESET), 4);
+ SetMessageLine(GET_TEXT_F(MSG_PLEASE_RESET), 4);
dgus_display.PlaySound(3, 1, 200);
@@ -170,14 +165,14 @@ void DGUSScreenHandler::PrinterKilled(FSTR_P const error, FSTR_P const component
}
void DGUSScreenHandler::UserConfirmRequired(const char * const msg) {
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 1);
- dgus_screen_handler.SetMessageLine(msg, 2);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 3);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 4);
+ SetMessageLinePGM(NUL_STR, 1);
+ SetMessageLine(msg, 2);
+ SetMessageLinePGM(NUL_STR, 3);
+ SetMessageLinePGM(NUL_STR, 4);
dgus_display.PlaySound(3);
- dgus_screen_handler.ShowWaitScreen(current_screen, true);
+ ShowWaitScreen(current_screen, true);
}
void DGUSScreenHandler::SettingsReset() {
@@ -189,7 +184,7 @@ void DGUSScreenHandler::SettingsReset() {
Ready();
}
- SetStatusMessage(F("EEPROM reset"));
+ SetStatusMessage(GET_TEXT_F(DGUS_MSG_RESET_EEPROM));
}
void DGUSScreenHandler::StoreSettings(char *buff) {
@@ -223,12 +218,12 @@ void DGUSScreenHandler::LoadSettings(const char *buff) {
void DGUSScreenHandler::ConfigurationStoreWritten(bool success) {
if (!success)
- SetStatusMessage(F("EEPROM write failed"));
+ SetStatusMessage(GET_TEXT_F(DGUS_MSG_WRITE_EEPROM_FAILED));
}
void DGUSScreenHandler::ConfigurationStoreRead(bool success) {
if (!success) {
- SetStatusMessage(F("EEPROM read failed"));
+ SetStatusMessage(GET_TEXT_F(DGUS_MSG_READ_EEPROM_FAILED));
}
else if (!settings_ready) {
settings_ready = true;
@@ -283,7 +278,8 @@ void DGUSScreenHandler::PrintTimerStopped() {
void DGUSScreenHandler::FilamentRunout(const ExtUI::extruder_t extruder) {
char buffer[21];
- snprintf_P(buffer, sizeof(buffer), PSTR("Filament runout E%d"), extruder);
+
+ snprintf_P(buffer, sizeof(buffer), GET_TEXT(DGUS_MSG_FILAMENT_RUNOUT), extruder);
SetStatusMessage(buffer);
@@ -346,7 +342,7 @@ void DGUSScreenHandler::FilamentRunout(const ExtUI::extruder_t extruder) {
#endif // HAS_PID_HEATING
-void DGUSScreenHandler::SetMessageLine(const char* msg, uint8_t line) {
+void DGUSScreenHandler::SetMessageLine(const char * const msg, const uint8_t line) {
switch (line) {
default: return;
case 1:
@@ -364,7 +360,7 @@ void DGUSScreenHandler::SetMessageLine(const char* msg, uint8_t line) {
}
}
-void DGUSScreenHandler::SetMessageLinePGM(PGM_P msg, uint8_t line) {
+void DGUSScreenHandler::SetMessageLinePGM(PGM_P const msg, const uint8_t line) {
switch (line) {
default: return;
case 1:
@@ -394,7 +390,7 @@ void DGUSScreenHandler::SetStatusMessage(FSTR_P const fmsg, const millis_t durat
status_expire = (duration > 0 ? ExtUI::safe_millis() + duration : 0);
}
-void DGUSScreenHandler::ShowWaitScreen(DGUS_Screen return_screen, bool has_continue) {
+void DGUSScreenHandler::ShowWaitScreen(const DGUS_Screen return_screen, const bool has_continue/*=false*/) {
if (return_screen != DGUS_Screen::WAIT) {
wait_return_screen = return_screen;
}
@@ -403,6 +399,14 @@ void DGUSScreenHandler::ShowWaitScreen(DGUS_Screen return_screen, bool has_conti
TriggerScreenChange(DGUS_Screen::WAIT);
}
+void DGUSScreenHandler::ShowWaitScreen(FSTR_P const msg, const DGUS_Screen return_screen, const bool has_continue/*=false*/) {
+ SetMessageLinePGM(NUL_STR, 1);
+ SetMessageLine(msg, 2);
+ SetMessageLinePGM(NUL_STR, 3);
+ SetMessageLinePGM(NUL_STR, 4);
+ ShowWaitScreen(return_screen, has_continue);
+}
+
DGUS_Screen DGUSScreenHandler::GetCurrentScreen() {
return current_screen;
}
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h
index 6a00a4f72a..e872e8a823 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h
@@ -69,13 +69,15 @@ public:
static void PidTuning(const ExtUI::result_t rst);
#endif
- static void SetMessageLine(const char* msg, uint8_t line);
- static void SetMessageLinePGM(PGM_P msg, uint8_t line);
+ static void SetMessageLine(const char * const msg, const uint8_t line);
+ static void SetMessageLinePGM(PGM_P const msg, const uint8_t line);
+ static void SetMessageLine(FSTR_P const msg, const uint8_t line) { SetMessageLinePGM(FTOP(msg), line); }
static void SetStatusMessage(const char* msg, const millis_t duration=DGUS_STATUS_EXPIRATION_MS);
static void SetStatusMessage(FSTR_P const msg, const millis_t duration=DGUS_STATUS_EXPIRATION_MS);
- static void ShowWaitScreen(DGUS_Screen return_screen, bool has_continue=false);
+ static void ShowWaitScreen(const DGUS_Screen return_screen, const bool has_continue=false);
+ static void ShowWaitScreen(FSTR_P const msg, const DGUS_Screen return_screen, const bool has_continue=false);
static DGUS_Screen GetCurrentScreen();
static void TriggerScreenChange(DGUS_Screen screen);
@@ -140,12 +142,7 @@ private:
extern DGUSScreenHandler dgus_screen_handler;
-extern const char DGUS_MSG_HOMING_REQUIRED[],
- DGUS_MSG_BUSY[],
- DGUS_MSG_UNDEF[],
- DGUS_MSG_HOMING[],
- DGUS_MSG_FW_OUTDATED[],
- DGUS_MSG_ABL_REQUIRED[];
+extern const char DGUS_MSG_UNDEF[];
extern const char DGUS_CMD_HOME[],
DGUS_CMD_EEPROM_SAVE[];
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp
index 4caccc0717..3b243e4711 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp
@@ -68,7 +68,7 @@ bool DGUSSetupHandler::LevelingMenu() {
ExtUI::setLevelingActive(dgus_screen_handler.leveling_active);
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return false;
}
@@ -80,11 +80,7 @@ bool DGUSSetupHandler::LevelingMenu() {
return true;
}
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 1);
- dgus_screen_handler.SetMessageLinePGM(DGUS_MSG_HOMING, 2);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 3);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 4);
- dgus_screen_handler.ShowWaitScreen(DGUS_Screen::LEVELING_MENU);
+ dgus_screen_handler.ShowWaitScreen(GET_TEXT_F(DGUS_MSG_HOMING), DGUS_Screen::LEVELING_MENU);
queue.enqueue_now_P(DGUS_CMD_HOME);
@@ -99,15 +95,11 @@ bool DGUSSetupHandler::LevelingManual() {
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return false;
}
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 1);
- dgus_screen_handler.SetMessageLinePGM(DGUS_MSG_HOMING, 2);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 3);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 4);
- dgus_screen_handler.ShowWaitScreen(DGUS_Screen::LEVELING_MANUAL);
+ dgus_screen_handler.ShowWaitScreen(GET_TEXT_F(DGUS_MSG_HOMING), DGUS_Screen::LEVELING_MANUAL);
queue.enqueue_now_P(DGUS_CMD_HOME);
@@ -118,7 +110,7 @@ bool DGUSSetupHandler::LevelingOffset() {
dgus_screen_handler.offset_steps = DGUS_Data::StepSize::MMP1;
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return false;
}
@@ -136,11 +128,7 @@ bool DGUSSetupHandler::LevelingOffset() {
return true;
}
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 1);
- dgus_screen_handler.SetMessageLinePGM(DGUS_MSG_HOMING, 2);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 3);
- dgus_screen_handler.SetMessageLinePGM(NUL_STR, 4);
- dgus_screen_handler.ShowWaitScreen(DGUS_Screen::LEVELING_OFFSET);
+ dgus_screen_handler.ShowWaitScreen(GET_TEXT_F(DGUS_MSG_HOMING), DGUS_Screen::LEVELING_OFFSET);
queue.enqueue_now_P(DGUS_CMD_HOME);
@@ -175,7 +163,7 @@ bool DGUSSetupHandler::Move() {
dgus_screen_handler.move_steps = DGUS_Data::StepSize::MM10;
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
return false;
}
@@ -186,7 +174,7 @@ bool DGUSSetupHandler::Gcode() {
ZERO(dgus_screen_handler.gcode);
if (dgus_display.gui_version < 0x30 || dgus_display.os_version < 0x21) {
- dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_FW_OUTDATED));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_FW_OUTDATED));
return false;
}
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp
index 39b3f57e96..eb1b3aa510 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp
@@ -188,7 +188,7 @@ void DGUSTxHandler::PositionZ(DGUS_VP &vp) {
dgus_display.Write((uint16_t)vp.addr, Swap16(data));
}
-void DGUSTxHandler::Ellapsed(DGUS_VP &vp) {
+void DGUSTxHandler::Elapsed(DGUS_VP &vp) {
char buffer[21];
duration_t(print_job_timer.duration()).toString(buffer);
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h
index aad73dd5d6..161d73f813 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h
@@ -37,7 +37,7 @@ namespace DGUSTxHandler {
#endif
void PositionZ(DGUS_VP &);
- void Ellapsed(DGUS_VP &);
+ void Elapsed(DGUS_VP &);
void Percent(DGUS_VP &);
void StatusIcons(DGUS_VP &);
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h
index 3fd6d16f5b..39cc040f19 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h
+++ b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h
@@ -108,7 +108,7 @@ enum class DGUS_Addr : uint16_t {
SD_ScrollIcons = 0x30C5, // Bits: DGUS_Data::ScrollIcon
SD_SelectedFileName = 0x30C6, // 0x30C6 - 0x30E5
STATUS_PositionZ = 0x30E6, // Type: Fixed point, 1 decimal (16 bits signed)
- STATUS_Ellapsed = 0x30E7, // 0x30E7 - 0x30F5
+ STATUS_Elapsed = 0x30E7, // 0x30E7 - 0x30F5
STATUS_Percent = 0x30F6, // Type: Integer (16 bits unsigned)
STATUS_Icons = 0x30F7, // Bits: DGUS_Data::StatusIcon
ADJUST_Feedrate = 0x30F8, // Type: Integer (16 bits signed)
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 855c0bccfa..706038f0ed 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenAddrList.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenAddrList.cpp
@@ -56,7 +56,7 @@ constexpr DGUS_Addr LIST_PRINT_STATUS[] PROGMEM = {
DGUS_Addr::TEMP_Current_Bed,
DGUS_Addr::TEMP_Target_Bed,
DGUS_Addr::STATUS_PositionZ,
- DGUS_Addr::STATUS_Ellapsed,
+ DGUS_Addr::STATUS_Elapsed,
DGUS_Addr::STATUS_Percent,
DGUS_Addr::STATUS_Icons,
(DGUS_Addr)0
@@ -78,7 +78,7 @@ constexpr DGUS_Addr LIST_PRINT_FINISHED[] PROGMEM = {
DGUS_Addr::TEMP_Current_Bed,
DGUS_Addr::TEMP_Target_Bed,
DGUS_Addr::STATUS_PositionZ,
- DGUS_Addr::STATUS_Ellapsed,
+ DGUS_Addr::STATUS_Elapsed,
DGUS_Addr::STATUS_Percent_Complete,
(DGUS_Addr)0
};
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 4370a06d04..4def1c48f8 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp
@@ -177,12 +177,12 @@ const struct DGUS_VP vp_list[] PROGMEM = {
VP_HELPER_TX_AUTO(DGUS_Addr::STATUS_PositionZ,
nullptr,
&DGUSTxHandler::PositionZ),
- VP_HELPER(DGUS_Addr::STATUS_Ellapsed,
+ VP_HELPER(DGUS_Addr::STATUS_Elapsed,
DGUS_ELAPSED_LEN,
VPFLAG_AUTOUPLOAD,
nullptr,
nullptr,
- &DGUSTxHandler::Ellapsed),
+ &DGUSTxHandler::Elapsed),
VP_HELPER_TX_AUTO(DGUS_Addr::STATUS_Percent,
nullptr,
&DGUSTxHandler::Percent),
diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h
index 106d73d35f..5012f8c496 100644
--- a/Marlin/src/lcd/language/language_en.h
+++ b/Marlin/src/lcd/language/language_en.h
@@ -883,6 +883,30 @@ namespace Language_en {
LSTR MSG_PID_F = _UxGT("PID-F");
LSTR MSG_PID_F_E = _UxGT("PID-F *");
LSTR MSG_BACKLASH_N = _UxGT("@");
+
+ // DGUS-Specific message strings, not used elsewhere
+ LSTR DGUS_MSG_NOT_WHILE_PRINTING = _UxGT("Not allowed during print");
+ LSTR DGUS_MSG_NOT_WHILE_IDLE = _UxGT("Not allowed while idle");
+ LSTR DGUS_MSG_NO_FILE_SELECTED = _UxGT("No file selected");
+ LSTR DGUS_MSG_TEMP_TOO_LOW = _UxGT("Temperature too low");
+ LSTR DGUS_MSG_EXECUTING_COMMAND = _UxGT("Executing command...");
+ LSTR DGUS_MSG_BED_PID_DISABLED = _UxGT("Bed PID disabled");
+ LSTR DGUS_MSG_PID_DISABLED = _UxGT("PID disabled");
+ LSTR DGUS_MSG_PID_AUTOTUNING = _UxGT("PID autotuning...");
+ LSTR DGUS_MSG_INVALID_RECOVERY_DATA = _UxGT("Invalid recovery data");
+
+ LSTR DGUS_MSG_HOMING_REQUIRED = _UxGT("Homing required");
+ LSTR DGUS_MSG_BUSY = _UxGT("Busy");
+ LSTR DGUS_MSG_HOMING = _UxGT("Homing...");
+ LSTR DGUS_MSG_FW_OUTDATED = _UxGT("DWIN GUI/OS update required");
+ LSTR DGUS_MSG_ABL_REQUIRED = _UxGT("Auto bed leveling required");
+ LSTR DGUS_MSG_PROBING_FAILED = _UxGT("Probing failed");
+ LSTR DGUS_MSG_PROBING_SUCCESS = _UxGT("Probing successful");
+ LSTR DGUS_MSG_RESET_EEPROM = _UxGT("EEPROM reset");
+ LSTR DGUS_MSG_WRITE_EEPROM_FAILED = _UxGT("EEPROM write failed");
+ LSTR DGUS_MSG_READ_EEPROM_FAILED = _UxGT("EEPROM read failed");
+ LSTR DGUS_MSG_FILAMENT_RUNOUT = _UxGT("Filament runout E%d");
+
}
#if FAN_COUNT == 1
diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h
index cfd6c81d59..1128328391 100644
--- a/Marlin/src/lcd/language/language_fr.h
+++ b/Marlin/src/lcd/language/language_fr.h
@@ -629,6 +629,29 @@ namespace Language_fr {
LSTR MSG_SD_CARD = _UxGT("Carte SD");
LSTR MSG_USB_DISK = _UxGT("Clé USB");
+ // DGUS-Specific message strings, not used elsewhere
+ LSTR DGUS_MSG_NOT_WHILE_PRINTING = _UxGT("Impossible pendant une impression");
+ LSTR DGUS_MSG_NOT_WHILE_IDLE = _UxGT("Impossible tant que l'imprimante est en attente");
+ LSTR DGUS_MSG_NO_FILE_SELECTED = _UxGT("Aucun fichier selectionne");
+ LSTR DGUS_MSG_TEMP_TOO_LOW = _UxGT("Temperature trop basse");
+ LSTR DGUS_MSG_EXECUTING_COMMAND = _UxGT("Execution de la commande...");
+ LSTR DGUS_MSG_BED_PID_DISABLED = _UxGT("Bed PID desactive");
+ LSTR DGUS_MSG_PID_DISABLED = _UxGT("PID desactive");
+ LSTR DGUS_MSG_PID_AUTOTUNING = _UxGT("Autocalibrage du PID...");
+ LSTR DGUS_MSG_INVALID_RECOVERY_DATA = _UxGT("Donnees de recuperation non valides");
+
+ LSTR DGUS_MSG_HOMING_REQUIRED = _UxGT("Retour a l'origine necessaire...");
+ LSTR DGUS_MSG_BUSY = _UxGT("Occupe");
+ LSTR DGUS_MSG_HOMING = _UxGT("Retour a l'origine...");
+ LSTR DGUS_MSG_FW_OUTDATED = _UxGT("Mise a jour DWIN GUI/OS necessaire");
+ LSTR DGUS_MSG_ABL_REQUIRED = _UxGT("Nivellement du bed necessaire");
+ LSTR DGUS_MSG_PROBING_FAILED = _UxGT("Echec du nivellement...");
+ LSTR DGUS_MSG_PROBING_SUCCESS = _UxGT("Nivellement realise avec succes");
+ LSTR DGUS_MSG_RESET_EEPROM = _UxGT("Reinitialisation de l'EEPROM");
+ LSTR DGUS_MSG_WRITE_EEPROM_FAILED = _UxGT("Echec ecriture de l'EEPROM");
+ LSTR DGUS_MSG_READ_EEPROM_FAILED = _UxGT("Echec lecture de l'EEPROM");
+ LSTR DGUS_MSG_FILAMENT_RUNOUT = _UxGT("Sortie de filament E%d");
+
LSTR MSG_SHORT_DAY = _UxGT("j"); // One character only
LSTR MSG_SHORT_HOUR = _UxGT("h"); // One character only
LSTR MSG_SHORT_MINUTE = _UxGT("m"); // One character only
diff --git a/Marlin/src/lcd/language/language_fr_na.h b/Marlin/src/lcd/language/language_fr_na.h
new file mode 100644
index 0000000000..48030dd031
--- /dev/null
+++ b/Marlin/src/lcd/language/language_fr_na.h
@@ -0,0 +1,658 @@
+/**
+ * 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
+
+/**
+ * French (without accent for DWIN T5UID1)
+ *
+ * LCD Menu Messages
+ * See also https://marlinfw.org/docs/development/lcd_language.html
+ */
+
+#define DISPLAY_CHARSET_ISO10646_1
+#define NOT_EXTENDED_ISO10646_1_5X7
+
+namespace Language_fr_na {
+ using namespace Language_en; // Inherit undefined strings from English
+
+ LSTR LANGUAGE = _UxGT("Francais");
+
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" prete.");
+ LSTR MSG_YES = _UxGT("Oui");
+ LSTR MSG_NO = _UxGT("Non");
+ LSTR MSG_BACK = _UxGT("Retour");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Annulation...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Media insere");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Media retire");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Attente media");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Err lecture media");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB debranche");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("Erreur media USB");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Butees");
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Butees SW");
+ LSTR MSG_MAIN = _UxGT("Menu principal");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Config. avancee");
+ LSTR MSG_CONFIGURATION = _UxGT("Configuration");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Exec. auto.gcode");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Arreter moteurs");
+ LSTR MSG_DEBUG_MENU = _UxGT("Menu debug");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test barre progress.");
+ LSTR MSG_HOMING = _UxGT("Origine");
+ LSTR MSG_AUTO_HOME = _UxGT("Origine auto");
+ LSTR MSG_AUTO_HOME_A = _UxGT("Origine @ auto");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Origine X auto");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Origine Y auto");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Origine Z auto");
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Align. Z auto");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Origine XYZ...");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Clic pour commencer");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Point suivant");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Mise a niveau OK!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Hauteur lissee");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Regl. decal origine");
+ LSTR MSG_HOME_OFFSET_X = _UxGT("Decal. origine X");
+ LSTR MSG_HOME_OFFSET_Y = _UxGT("Decal. origine Y");
+ LSTR MSG_HOME_OFFSET_Z = _UxGT("Decal. origine Z");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Decalages appliques");
+ LSTR MSG_TRAMMING_WIZARD = _UxGT("Assistant Molettes");
+ LSTR MSG_SELECT_ORIGIN = _UxGT("Molette du lit"); // Not a selection of the origin
+ LSTR MSG_LAST_VALUE_SP = _UxGT("Ecart origine ");
+ #if HAS_PREHEAT
+ LSTR MSG_PREHEAT_1 = _UxGT("Prechauffage ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Prechauffage ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Prech. ") PREHEAT_1_LABEL _UxGT(" buse");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Prech. ") PREHEAT_1_LABEL _UxGT(" buse ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Prech. ") PREHEAT_1_LABEL _UxGT(" Tout");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Prech. ") PREHEAT_1_LABEL _UxGT(" lit");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Regler prech. ") PREHEAT_1_LABEL;
+
+ LSTR MSG_PREHEAT_M = _UxGT("Prechauffage $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Prechauffage $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Prech. $ buse");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Prech. $ buse ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Prech. $ Tout");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Prech. $ lit");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Regler prech. $");
+ #endif
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Prechauf. perso");
+ LSTR MSG_COOLDOWN = _UxGT("Refroidir");
+ LSTR MSG_LASER_MENU = _UxGT("Controle Laser");
+ LSTR MSG_LASER_POWER = _UxGT("Puissance");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Inverser broches");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Allumer alim.");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Eteindre alim.");
+ LSTR MSG_EXTRUDE = _UxGT("Extrusion");
+ LSTR MSG_RETRACT = _UxGT("Retractation");
+ LSTR MSG_MOVE_AXIS = _UxGT("Deplacer un axe");
+ LSTR MSG_BED_LEVELING = _UxGT("Regler Niv. lit");
+ LSTR MSG_LEVEL_BED = _UxGT("Niveau du lit");
+ LSTR MSG_BED_TRAMMING = _UxGT("Niveau des coins");
+ LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Relever le coin jusqu'a la sonde");
+ LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Coins dans la tolerance. Niveau lit.");
+ LSTR MSG_NEXT_CORNER = _UxGT("Coin suivant");
+ LSTR MSG_MESH_EDITOR = _UxGT("Modif. maille"); // 13 car. max
+ LSTR MSG_EDIT_MESH = _UxGT("Modifier grille");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Modification arretee");
+ LSTR MSG_PROBING_POINT = _UxGT("Mesure point");
+ LSTR MSG_MESH_X = _UxGT("Index X");
+ LSTR MSG_MESH_Y = _UxGT("Index Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Valeur Z");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Commandes perso");
+
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Mesure point");
+ LSTR MSG_M48_TEST = _UxGT("Ecart sonde Z M48");
+ LSTR MSG_M48_DEVIATION = _UxGT("Ecart");
+ LSTR MSG_M48_POINT = _UxGT("Point M48");
+ LSTR MSG_IDEX_MENU = _UxGT("Mode IDEX");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copie miroir");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Controle complet");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Offsets Outil");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("Buse 2 Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("Buse 2 @");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26: Chauffage du lit");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("Buse en chauffe...");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Amorce manuelle...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Amorce longueur fixe");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Amorce terminee");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 annule");
+ LSTR MSG_G26_LEAVING = _UxGT("Sortie G26");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("G29 en cours");
+ LSTR MSG_UBL_TOOLS = _UxGT("Outils UBL");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Niveau lit unifie");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Maillage manuel");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Poser cale & mesurer");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Mesure");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("oter et mesurer lit");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Aller au suivant");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Activer l'UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Desactiver l'UBL");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Temperature lit");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temperature lit");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temperature buse");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temperature buse");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Modifier grille");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Modif. grille perso");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Reglage fin");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Terminer");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Creer la grille");
+ #if HAS_PREHEAT
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Creer grille $");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Impr. grille $");
+ #endif
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Creer grille ...");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Mesure a froid");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Ajuster haut. couche");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Hauteur (x0.1mm)");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Verifier grille");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Impr. grille ...");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Continuer grille");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Niveau par mailles");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Niveau a 3 points");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Niveau par grille");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Effectuer mesures");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Points lateraux");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Type de carte");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Exporter grille");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Export pour hote");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Export en CSV");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Export sauvegarde");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Infos debug UBL");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Nombre de points");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Remplissage manuel");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Remplissage auto");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Remplissage grille");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Tout effacer");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Effacer le + pres");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Reglage fin (tous)");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Reglage fin + pres");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Stockage grille");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Slot memoire");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Charger la grille");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Stocker la grille");
+ LSTR MSG_MESH_LOADED = _UxGT("Grille %i chargee");
+ LSTR MSG_MESH_SAVED = _UxGT("Grille %i enreg.");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Pas de memoire");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Err: Enreg. UBL");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Err: Ouvrir UBL");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Decal. Z arrete");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Assistant UBL");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Mesure a froid");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Completer auto.");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Verifier grille");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Reglage fin");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Verifier grille");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Reglage fin");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Stocker grille");
+
+ LSTR MSG_LED_CONTROL = _UxGT("Controle LED");
+ LSTR MSG_LEDS = _UxGT("Lumiere");
+ LSTR MSG_LED_PRESETS = _UxGT("Preregl. LED");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Rouge");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Orange");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Jaune");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Vert");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Bleu");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violet");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Blanc");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Defaut");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("LEDs perso.");
+ LSTR MSG_INTENSITY_R = _UxGT("Intensite rouge");
+ LSTR MSG_INTENSITY_G = _UxGT("Intensite vert");
+ LSTR MSG_INTENSITY_B = _UxGT("Intensite bleu");
+ LSTR MSG_INTENSITY_W = _UxGT("Intensite blanc");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Luminosite");
+
+ LSTR MSG_MOVING = _UxGT("Deplacement...");
+ LSTR MSG_FREE_XY = _UxGT("Debloquer XY");
+ LSTR MSG_MOVE_X = _UxGT("Deplacer X");
+ LSTR MSG_MOVE_Y = _UxGT("Deplacer Y");
+ LSTR MSG_MOVE_Z = _UxGT("Deplacer Z");
+ LSTR MSG_MOVE_N = _UxGT("Deplacer @");
+ LSTR MSG_MOVE_E = _UxGT("Extruder");
+ LSTR MSG_MOVE_EN = _UxGT("Extruder *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Buse trop froide");
+ LSTR MSG_MOVE_N_MM = _UxGT("Deplacer $mm");
+ LSTR MSG_MOVE_01MM = _UxGT("Deplacer 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Deplacer 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Deplacer 10mm");
+ LSTR MSG_MOVE_50MM = _UxGT("Deplacer 50mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Deplacer 100mm");
+ LSTR MSG_MOVE_0001IN = _UxGT("Deplacer 0.001\"");
+ LSTR MSG_MOVE_001IN = _UxGT("Deplacer 0.01\"");
+ LSTR MSG_MOVE_01IN = _UxGT("Deplacer 0.1\"");
+ LSTR MSG_MOVE_05IN = _UxGT("Deplacer 0.5\"");
+ LSTR MSG_MOVE_1IN = _UxGT("Deplacer 1\"");
+ LSTR MSG_SPEED = _UxGT("Vitesse");
+ LSTR MSG_MESH_Z_OFFSET = _UxGT("Lit Z");
+ LSTR MSG_NOZZLE = _UxGT("Buse");
+ LSTR MSG_NOZZLE_N = _UxGT("Buse ~");
+ LSTR MSG_BED = _UxGT("Lit");
+ LSTR MSG_CHAMBER = _UxGT("Caisson");
+ LSTR MSG_FAN_SPEED = _UxGT("Vit. ventil. "); // 15 car. max
+ LSTR MSG_FAN_SPEED_N = _UxGT("Vit. ventil. ~");
+ LSTR MSG_STORED_FAN_N = _UxGT("Vit. enreg. ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra ventil. ");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra ventil. ~");
+
+ LSTR MSG_FLOW = _UxGT("Flux");
+ LSTR MSG_FLOW_N = _UxGT("Flux ~");
+ LSTR MSG_CONTROL = _UxGT("Controler");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Facteur");
+ LSTR MSG_AUTOTEMP = _UxGT("Temp. Auto.");
+ LSTR MSG_LCD_ON = _UxGT("Marche");
+ LSTR MSG_LCD_OFF = _UxGT("Arret");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autotune");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Tuning PID termine");
+ LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Echec Autotune! E incorrect");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Echec Autotune! Temp. trop haute");
+ LSTR MSG_PID_TIMEOUT = _UxGT("Echec Autotune! Oper. expiree");
+ LSTR MSG_SELECT_E = _UxGT("Selectionner *");
+ LSTR MSG_ACC = _UxGT("Acceleration");
+ LSTR MSG_JERK = _UxGT("Jerk");
+ LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT(" jerk");
+ LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT(" jerk");
+ LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT(" jerk");
+ LSTR MSG_VN_JERK = _UxGT("V@ jerk");
+ LSTR MSG_VE_JERK = _UxGT("Ve jerk");
+ LSTR MSG_MAX_SPEED = _UxGT("Max Velocite");
+ LSTR MSG_VMAX_A = _UxGT("Vit. Max ") STR_A;
+ LSTR MSG_VMAX_B = _UxGT("Vit. Max ") STR_B;
+ LSTR MSG_VMAX_C = _UxGT("Vit. Max ") STR_C;
+ LSTR MSG_VMAX_N = _UxGT("Vit. Max @");
+ LSTR MSG_VMAX_E = _UxGT("Vit. Max E");
+ LSTR MSG_VMAX_EN = _UxGT("Vit. Max *");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Deviat. jonct.");
+ LSTR MSG_VMIN = _UxGT("Vit. Min");
+ LSTR MSG_VTRAV_MIN = _UxGT("Vmin course");
+ LSTR MSG_ACCELERATION = _UxGT("Acceleration");
+ LSTR MSG_AMAX_A = _UxGT("Max Accel. ") STR_A;
+ LSTR MSG_AMAX_B = _UxGT("Max Accel. ") STR_B;
+ LSTR MSG_AMAX_C = _UxGT("Max Accel. ") STR_C;
+ LSTR MSG_AMAX_N = _UxGT("Max Accel. @");
+ LSTR MSG_AMAX_E = _UxGT("Max Accel. E");
+ LSTR MSG_AMAX_EN = _UxGT("Max Accel. *");
+ LSTR MSG_A_RETRACT = _UxGT("Acc.retraction");
+ LSTR MSG_A_TRAVEL = _UxGT("Acc.course");
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Frequence max");
+ LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Vitesse min");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Pas/mm");
+ LSTR MSG_A_STEPS = STR_A _UxGT(" pas/mm");
+ LSTR MSG_B_STEPS = STR_B _UxGT(" pas/mm");
+ LSTR MSG_C_STEPS = STR_C _UxGT(" pas/mm");
+ LSTR MSG_N_STEPS = _UxGT("@ pas/mm");
+ LSTR MSG_E_STEPS = _UxGT("E pas/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* pas/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperature");
+ LSTR MSG_MOTION = _UxGT("Mouvement");
+ LSTR MSG_FILAMENT = _UxGT("Filament");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("Limite en mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("Limite *");
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Diametre fil.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Diametre fil. *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Retrait mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Charger mm");
+ LSTR MSG_ADVANCE_K = _UxGT("Avance K");
+ LSTR MSG_ADVANCE_K_E = _UxGT("Avance K *");
+ LSTR MSG_BRIGHTNESS = _UxGT("Luminosite LCD");
+ LSTR MSG_CONTRAST = _UxGT("Contraste LCD");
+ LSTR MSG_SCREEN_TIMEOUT = _UxGT("Veille LCD (m)");
+ LSTR MSG_BRIGHTNESS_OFF = _UxGT("Eteindre l'ecran LCD");
+ LSTR MSG_STORE_EEPROM = _UxGT("Enregistrer config.");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Charger config.");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restaurer defauts");
+ LSTR MSG_INIT_EEPROM = _UxGT("Initialiser EEPROM");
+ LSTR MSG_SETTINGS_STORED = _UxGT("Config. enregistree");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("MaJ Firmware SD");
+ LSTR MSG_RESET_PRINTER = _UxGT("RaZ imprimante");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Actualiser");
+ LSTR MSG_INFO_SCREEN = _UxGT("Surveiller");
+ LSTR MSG_PREPARE = _UxGT("Preparer");
+ LSTR MSG_TUNE = _UxGT("Regler");
+ LSTR MSG_START_PRINT = _UxGT("Demarrer impression");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Suivant");
+ LSTR MSG_BUTTON_INIT = _UxGT("Init.");
+ LSTR MSG_BUTTON_STOP = _UxGT("Stop");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Imprimer");
+ LSTR MSG_BUTTON_RESET = _UxGT("Reset");
+ LSTR MSG_BUTTON_IGNORE = _UxGT("Ignorer");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Annuler");
+ LSTR MSG_BUTTON_DONE = _UxGT("Termine");
+ LSTR MSG_BUTTON_BACK = _UxGT("Retour");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Proceder");
+ LSTR MSG_BUTTON_SKIP = _UxGT("Passer");
+ LSTR MSG_PAUSING = _UxGT("Mise en pause...");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pause impression");
+ LSTR MSG_RESUME_PRINT = _UxGT("Reprendre impr.");
+ 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_OUTAGE_RECOVERY = _UxGT("Recup. coup.");
+ LSTR MSG_MEDIA_MENU = _UxGT("Impression SD");
+ LSTR MSG_NO_MEDIA = _UxGT("Pas de media");
+ LSTR MSG_DWELL = _UxGT("Repos...");
+ LSTR MSG_USERWAIT = _UxGT("Attente utilis.");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Impr. en pause");
+ LSTR MSG_PRINTING = _UxGT("Impression");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Impr. annulee");
+ LSTR MSG_NO_MOVE = _UxGT("Moteurs bloques");
+ LSTR MSG_KILLED = _UxGT("KILLED");
+ LSTR MSG_STOPPED = _UxGT("STOPPE");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Retractation mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Ech. retr. mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Vit. retract") LCD_STR_DEGREE;
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Saut Z mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Ret.reprise mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Ech.reprise mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("V.ret. reprise");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("V.ech. reprise");
+ LSTR MSG_AUTORETRACT = _UxGT("Retraction auto");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Changement outil");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Augmenter Z");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Vitesse primaire");
+ LSTR MSG_SINGLENOZZLE_WIPE_RETRACT = _UxGT("Purge Retract");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Vitesse retract") LCD_STR_DEGREE;
+ LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Garer Extrudeur");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Vitesse reprise");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Vit. ventil.");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Temps ventil.");
+ LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
+ LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("Migration d'outil");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Migration auto");
+ LSTR MSG_TOOL_MIGRATION_END = _UxGT("Extrudeur Final");
+ LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrer vers *");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Attente buse");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Longueur retrait");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Longueur Extra");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Longueur de purge");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Changer filament");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Changer filament *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Charger filament");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Charger filament *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Retrait filament");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Retrait filament *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Retirer tout");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Charger le media");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Actualiser media");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Retirer le media");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Sonde Z hors lit");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Facteur ecart");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Self-Test");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Reset");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Ranger");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Deployer");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Mode SW");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Mode 5V");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Mode OD");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Appliquer Mode");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Mise en 5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Mise en OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Afficher Mode");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("Init. TouchMI");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test decalage Z");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Sauvegarde");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Deployer TouchMI");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Deployer Sonde Z");
+ LSTR MSG_MANUAL_STOW = _UxGT("Ranger Sonde Z");
+ LSTR MSG_HOME_FIRST = _UxGT("Origine %s Premier");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Position sonde Z");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("Decalage X");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Decalage Y");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Decalage Z");
+ LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
+ LSTR MSG_BABYSTEP_N = _UxGT("Babystep @");
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Butee abandon");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Err de chauffe");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err TEMP. REDONDANTE");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("Err THERMIQUE");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Err TEMP. MAX");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Err TEMP. MIN");
+
+ LSTR MSG_HALTED = _UxGT("IMPR. STOPPEE");
+ LSTR MSG_PLEASE_RESET = _UxGT("Redemarrer SVP");
+ LSTR MSG_SHORT_DAY = _UxGT("j"); // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("h"); // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("m"); // One character only
+
+ LSTR MSG_HEATING = _UxGT("en chauffe...");
+ LSTR MSG_COOLING = _UxGT("Refroidissement");
+ LSTR MSG_BED_HEATING = _UxGT("Lit en chauffe...");
+ LSTR MSG_BED_COOLING = _UxGT("Refroid. du lit...");
+ LSTR MSG_PROBE_HEATING = _UxGT("Probe en chauffe...");
+ LSTR MSG_PROBE_COOLING = _UxGT("Refroid. Probe...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Chauffe caisson...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Refroid. caisson...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibration Delta");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrer X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrer Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrer Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrer centre");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Reglages Delta");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Calibration Auto");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diagonale");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Hauteur");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Rayon");
+
+ LSTR MSG_INFO_MENU = _UxGT("Infos imprimante");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Infos imprimante");
+ LSTR MSG_3POINT_LEVELING = _UxGT("Niveau a 3 points");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Niveau lineaire");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Niveau bilineaire");
+ LSTR MSG_UBL_LEVELING = _UxGT("Niveau lit unifie");
+ LSTR MSG_MESH_LEVELING = _UxGT("Niveau par grille");
+ LSTR MSG_MESH_DONE = _UxGT("Niveau termine");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Stats. imprimante");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Infos carte");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistances");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrudeurs");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Bauds");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protocole");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Protection inactive");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Protection active");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
+
+ LSTR MSG_CASE_LIGHT = _UxGT("Lumiere caisson");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Luminosite");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Imprimante incorrecte");
+
+ #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Nbre impressions");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Terminees");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Tps impr. total");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Impr. la + longue");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total filament");
+ #else
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Impressions");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Terminees");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("+ long");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Filament");
+ #endif
+
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Temp Min");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp Max");
+ LSTR MSG_INFO_PSU = _UxGT("Alim.");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Puiss. moteur ");
+ LSTR MSG_DAC_PERCENT_N = _UxGT("Driver @ %");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM sauv.");
+ LSTR MSG_ERROR_TMC = _UxGT("ERREUR CONNEXION TMC");
+
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("CHANGER FILAMENT");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPR. PAUSE");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CHARGER FIL");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DECHARGER FIL");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPTIONS REPRISE:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purger encore");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Reprendre impr.");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Buse: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Capteur fil.");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Echec origine");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Echec sonde");
+
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("MAJ firmware MMU!!");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("CHOISIR FILAMENT");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU ne repond plus");
+ LSTR MSG_MMU2_RESUME = _UxGT("Continuer Imp. MMU");
+ LSTR MSG_MMU2_RESUMING = _UxGT("Reprise MMU...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Charge dans MMU");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("Charger tous dans MMU");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Charger dans buse");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Ejecter fil. du MMU");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Ejecter fil. ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Retrait filament");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Chargem. fil. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejection fil...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Retrait fil....");
+ LSTR MSG_MMU2_ALL = _UxGT("Tous");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
+ LSTR MSG_MMU2_RESET = _UxGT("Reinit. MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("Reinit. MMU...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Retrait, click");
+
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Composante =");
+ LSTR MSG_MIXER = _UxGT("Mixeur");
+ LSTR MSG_GRADIENT = _UxGT("Degrade");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Degrade complet");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Toggle mix");
+ LSTR MSG_CYCLE_MIX = _UxGT("Cycle mix");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Mix degrade");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Inverser degrade");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
+ LSTR MSG_START_VTOOL = _UxGT("Debut V-tool");
+ LSTR MSG_END_VTOOL = _UxGT(" Fin V-tool");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Reinit. V-tools");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Valider Mix V-tool");
+ LSTR MSG_VTOOLS_RESET = _UxGT("V-tools reinit. ok");
+ LSTR MSG_START_Z = _UxGT("Debut Z:");
+ LSTR MSG_END_Z = _UxGT(" Fin Z:");
+ LSTR MSG_GAMES = _UxGT("Jeux");
+ LSTR MSG_BRICKOUT = _UxGT("Casse-briques");
+ LSTR MSG_INVADERS = _UxGT("Invaders");
+ LSTR MSG_SNAKE = _UxGT("Sn4k3");
+ LSTR MSG_MAZE = _UxGT("Labyrinthe");
+
+ LSTR MSG_BAD_PAGE = _UxGT("Erreur index page");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("Erreur vitesse page");
+
+ #if LCD_HEIGHT >= 4
+ // Up to 3 lines allowed
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Presser bouton", "pour reprendre"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parking..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Attente filament", "pour demarrer"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Inserer filament", "et app. bouton", "pour continuer..."));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Presser le bouton", "pour chauffer..."));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Buse en chauffe", "Patienter SVP..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Attente", "retrait du filament"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Attente", "chargement filament"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Attente", "Purge filament"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Presser pour finir", "la purge du filament"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Attente reprise", "impression"));
+ #else // LCD_HEIGHT < 4
+ // Up to 2 lines allowed
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Clic pour continuer"));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Patience..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Inserer fil."));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Chauffer ?"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Chauffage..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Retrait fil..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Chargement..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purge..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Terminer ?"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Reprise..."));
+ #endif // LCD_HEIGHT < 4
+
+ LSTR MSG_TMC_CURRENT = _UxGT("Courant driver");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Seuil hybride");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Home sans capteur");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Mode pas a pas");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop active");
+ LSTR MSG_SERVICE_RESET = _UxGT("Reinit.");
+ LSTR MSG_SERVICE_IN = _UxGT(" dans:");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Correction");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Lissage");
+
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("Niveau axe X");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Etalon. auto.");
+ #if ENABLED(TOUCH_UI_FTDI_EVE)
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("En protection, temp. reduite. Ok pour rechauffer et continuer.");
+ #else
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("En protection");
+ #endif
+ LSTR MSG_REHEAT = _UxGT("Chauffer");
+ LSTR MSG_REHEATING = _UxGT("Rechauffe...");
+
+ LSTR MSG_PROBE_WIZARD = _UxGT("Assistant Sonde Z");
+ LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Mesure reference");
+ LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Depl. vers pos");
+
+ LSTR MSG_SOUND = _UxGT("Sons");
+
+ LSTR MSG_TOP_LEFT = _UxGT("Coin haut gauche");
+ LSTR MSG_BOTTOM_LEFT = _UxGT("Coin bas gauche");
+ LSTR MSG_TOP_RIGHT = _UxGT("Coin haut droit");
+ LSTR MSG_BOTTOM_RIGHT = _UxGT("Coin bas droit");
+ LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Calibration terminee");
+ LSTR MSG_CALIBRATION_FAILED = _UxGT("Echec de l'etalonnage");
+
+ LSTR MSG_SD_CARD = _UxGT("Carte SD");
+ LSTR MSG_USB_DISK = _UxGT("Cle USB");
+
+ // DGUS-Specific message strings, not used elsewhere
+ LSTR DGUS_MSG_NOT_WHILE_PRINTING = _UxGT("Impossible pendant une impression");
+ LSTR DGUS_MSG_NOT_WHILE_IDLE = _UxGT("Impossible tant que l'imprimante est en attente");
+ LSTR DGUS_MSG_NO_FILE_SELECTED = _UxGT("Aucun fichier selectionne");
+ LSTR DGUS_MSG_TEMP_TOO_LOW = _UxGT("Temperature trop basse");
+ LSTR DGUS_MSG_EXECUTING_COMMAND = _UxGT("Execution de la commande...");
+ LSTR DGUS_MSG_BED_PID_DISABLED = _UxGT("Bed PID desactive");
+ LSTR DGUS_MSG_PID_DISABLED = _UxGT("PID desactive");
+ LSTR DGUS_MSG_PID_AUTOTUNING = _UxGT("Autocalibrage du PID...");
+ LSTR DGUS_MSG_INVALID_RECOVERY_DATA = _UxGT("Donnees de recuperation non valides");
+
+ LSTR DGUS_MSG_HOMING_REQUIRED = _UxGT("Retour a l'origine necessaire...");
+ LSTR DGUS_MSG_BUSY = _UxGT("Occupe");
+ LSTR DGUS_MSG_HOMING = _UxGT("Retour a l'origine...");
+ LSTR DGUS_MSG_FW_OUTDATED = _UxGT("Mise a jour DWIN GUI/OS necessaire");
+ LSTR DGUS_MSG_ABL_REQUIRED = _UxGT("Nivellement du bed necessaire");
+ LSTR DGUS_MSG_PROBING_FAILED = _UxGT("Echec du nivellement...");
+ LSTR DGUS_MSG_PROBING_SUCCESS = _UxGT("Nivellement realise avec succes");
+ LSTR DGUS_MSG_RESET_EEPROM = _UxGT("Reinitialisation de l'EEPROM");
+ LSTR DGUS_MSG_WRITE_EEPROM_FAILED = _UxGT("Echec ecriture de l'EEPROM");
+ LSTR DGUS_MSG_READ_EEPROM_FAILED = _UxGT("Echec lecture de l'EEPROM");
+ LSTR DGUS_MSG_FILAMENT_RUNOUT = _UxGT("Sortie de filament E%d");
+
+}
diff --git a/buildroot/share/fonts/genallfont.sh b/buildroot/share/fonts/genallfont.sh
index cc92d17d2c..5d85c88a18 100755
--- a/buildroot/share/fonts/genallfont.sh
+++ b/buildroot/share/fonts/genallfont.sh
@@ -62,7 +62,7 @@ fi
#
# By default loop through all languages
#
-LANGS_DEFAULT="an bg ca cz da de el el_CY en es eu fi fr gl hr hu it jp_kana ko_KR nl pl pt pt_br ro ru sk sv tr uk vi zh_CN zh_TW test"
+LANGS_DEFAULT="an bg ca cz da de el el_CY en es eu fi fr fr_na gl hr hu it jp_kana ko_KR nl pl pt pt_br ro ru sk sv tr uk vi zh_CN zh_TW test"
#
# Generate data for language list MARLIN_LANGS or all if not provided
diff --git a/buildroot/tests/FYSETC_F6 b/buildroot/tests/FYSETC_F6
index d970a23590..f8fce4b5b8 100755
--- a/buildroot/tests/FYSETC_F6
+++ b/buildroot/tests/FYSETC_F6
@@ -7,19 +7,20 @@
set -e
#
-# Build with the default configurations
+# Build with the default config plus DGUS_LCD_UI FYSETC
#
restore_configs
opt_set MOTHERBOARD BOARD_FYSETC_F6_13 LCD_SERIAL_PORT 1 DGUS_LCD_UI FYSETC
exec_test $1 $2 "FYSETC F6 1.3 with DGUS (FYSETC)" "$3"
#
-# Test IA_CREALITY
+# Test DGUS_LCD_UI RELOADED
#
restore_configs
-opt_set MOTHERBOARD BOARD_FYSETC_F6_13 LCD_SERIAL_PORT 1 DGUS_LCD_UI IA_CREALITY LCD_SCREEN_ROTATE 90
-opt_enable ADVANCED_PAUSE_FEATURE LCD_BED_TRAMMING CLASSIC_JERK BABYSTEPPING AUTO_BED_LEVELING_BILINEAR NOZZLE_PARK_FEATURE PROBE_MANUALLY
-exec_test $1 $2 "FYSETC F6 1.3 with DGUS (IA_CREALITY)" "$3"
+opt_set MOTHERBOARD BOARD_FYSETC_F6_13 TEMP_SENSOR_BED 2 LCD_SERIAL_PORT 1 DGUS_LCD_UI RELOADED GRID_MAX_POINTS_X 5
+opt_enable ADVANCED_PAUSE_FEATURE LCD_BED_TRAMMING CLASSIC_JERK BABYSTEPPING BABYSTEP_ALWAYS_AVAILABLE BABYSTEP_ZPROBE_OFFSET \
+ BLTOUCH Z_SAFE_HOMING AUTO_BED_LEVELING_BILINEAR NOZZLE_PARK_FEATURE
+exec_test $1 $2 "FYSETC F6 1.3 with DGUS (RELOADED)" "$3"
#
# Delta Config (generic) + UBL + ALLEN_KEY + EEPROM_SETTINGS + OLED_PANEL_TINYBOY2
From 4b9bb85b1266e8febbcb1931c8427d410a05bf84 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Mon, 6 Mar 2023 22:55:55 -0600
Subject: [PATCH 90/97] =?UTF-8?q?=F0=9F=94=A7=20Add=20DGUS=5FLCD=5FUI=20RE?=
=?UTF-8?q?LOADED=20conditions?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/src/inc/SanityCheck.h | 2 +
.../lcd/extui/dgus_reloaded/DGUSDisplay.cpp | 27 +++----
.../src/lcd/extui/dgus_reloaded/DGUSDisplay.h | 25 ++++---
.../lcd/extui/dgus_reloaded/DGUSRxHandler.cpp | 75 ++++++-------------
.../extui/dgus_reloaded/DGUSScreenHandler.cpp | 9 +--
.../extui/dgus_reloaded/DGUSScreenHandler.h | 5 --
.../extui/dgus_reloaded/DGUSSetupHandler.cpp | 6 +-
.../lcd/extui/dgus_reloaded/DGUSTxHandler.cpp | 6 +-
8 files changed, 56 insertions(+), 99 deletions(-)
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index 54ffcaf0ca..7d8f404591 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -4409,6 +4409,8 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive.");
#error "DGUS_LCD_UI RELOADED requires BABYSTEP_ALWAYS_AVAILABLE."
#elif DISABLED(BABYSTEP_ZPROBE_OFFSET)
#error "DGUS_LCD_UI RELOADED requires BABYSTEP_ZPROBE_OFFSET."
+ #elif ENABLED(HOME_AFTER_DEACTIVATE)
+ #error "DGUS_LCD_UI RELOADED requires HOME_AFTER_DEACTIVATE to be disabled."
#elif ENABLED(AUTO_BED_LEVELING_UBL) && DISABLED(UBL_SAVE_ACTIVE_ON_M500)
#warning "Without UBL_SAVE_ACTIVE_ON_M500, your mesh will not be saved when using the touchscreen."
#endif
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp
index 5bbeb0d7cc..7e215f887c 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp
@@ -125,8 +125,7 @@ void DGUSDisplay::WriteStringPGM(uint16_t addr, const void* data_ptr, uint8_t si
const char* data = static_cast(data_ptr);
size_t len = strlen_P(data);
- uint8_t left_spaces = 0;
- uint8_t right_spaces = 0;
+ uint8_t left_spaces = 0, right_spaces = 0;
if (len < size) {
if (!len) {
@@ -147,15 +146,9 @@ void DGUSDisplay::WriteStringPGM(uint16_t addr, const void* data_ptr, uint8_t si
len = size;
}
- while (left_spaces--) {
- LCD_SERIAL.write(' ');
- }
- while (len--) {
- LCD_SERIAL.write(pgm_read_byte(data++));
- }
- while (right_spaces--) {
- LCD_SERIAL.write(use_space ? ' ' : '\0');
- }
+ while (left_spaces--) LCD_SERIAL.write(' ');
+ while (len--) LCD_SERIAL.write(pgm_read_byte(data++));
+ while (right_spaces--) LCD_SERIAL.write(use_space ? ' ' : '\0');
}
void DGUSDisplay::ReadVersions() {
@@ -340,11 +333,13 @@ void DGUSDisplay::ProcessRx() {
}
size_t DGUSDisplay::GetFreeTxBuffer() {
- #ifdef LCD_SERIAL_GET_TX_BUFFER_FREE
- return LCD_SERIAL_GET_TX_BUFFER_FREE();
- #else
- return SIZE_MAX;
- #endif
+ return (
+ #ifdef LCD_SERIAL_GET_TX_BUFFER_FREE
+ LCD_SERIAL_GET_TX_BUFFER_FREE()
+ #else
+ SIZE_MAX
+ #endif
+ );
}
void DGUSDisplay::FlushTx() {
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h
index c4e3645f28..bfea5780a1 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h
@@ -47,13 +47,13 @@ public:
enum DGUS_ControlType : uint8_t {
VARIABLE_DATA_INPUT = 0x00,
- POPUP_WINDOW = 0x01,
- INCREMENTAL_ADJUST = 0x02,
- SLIDER_ADJUST = 0x03,
- RTC_SETTINGS = 0x04,
- RETURN_KEY_CODE = 0x05,
- TEXT_INPUT = 0x06,
- FIRMWARE_SETTINGS = 0x07
+ POPUP_WINDOW = 0x01,
+ INCREMENTAL_ADJUST = 0x02,
+ SLIDER_ADJUST = 0x03,
+ RTC_SETTINGS = 0x04,
+ RETURN_KEY_CODE = 0x05,
+ TEXT_INPUT = 0x06,
+ FIRMWARE_SETTINGS = 0x07
};
DGUSDisplay() = default;
@@ -63,8 +63,11 @@ public:
static void Read(uint16_t addr, uint8_t size);
static void Write(uint16_t addr, const void* data_ptr, uint8_t size);
- static void WriteString(uint16_t addr, const void* data_ptr, uint8_t size, bool left = true, bool right = false, bool use_space = true);
- static void WriteStringPGM(uint16_t addr, const void* data_ptr, uint8_t size, bool left = true, bool right = false, bool use_space = true);
+ static void WriteString(uint16_t addr, const void* data_ptr, uint8_t size, bool left=true, bool right=false, bool use_space=true);
+ static void WriteStringPGM(uint16_t addr, const void* data_ptr, uint8_t size, bool left=true, bool right=false, bool use_space=true);
+ static void WriteString(uint16_t addr, FSTR_P const fstr, uint8_t size, bool left=true, bool right=false, bool use_space=true) {
+ WriteStringPGM(addr, FTOP(fstr), size, left, right, use_space);
+ }
template
static void Write(uint16_t addr, T data) {
@@ -83,7 +86,7 @@ public:
// start: position at which the sound was stored on the display.
// len: how many sounds to play. Sounds will play consecutively from start to start+len-1.
// volume: playback volume. 0 keeps the current volume.
- static void PlaySound(uint8_t start, uint8_t len = 1, uint8_t volume = 0);
+ static void PlaySound(uint8_t start, uint8_t len=1, uint8_t volume=0);
// Enable/disable a specific touch control.
// type: control type.
// control: index of the control on the page (set during screen development).
@@ -154,7 +157,7 @@ private:
};
enum dgus_system_addr : uint16_t {
- DGUS_VERSION = 0x000f // OS/GUI version
+ DGUS_VERSION = 0x000F // OS/GUI version
};
static void WriteHeader(uint16_t addr, uint8_t command, uint8_t len);
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp
index f149d3c419..7a0318a555 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp
@@ -387,7 +387,7 @@ void DGUSRxHandler::Steppers(DGUS_VP &vp, void *data_ptr) {
void DGUSRxHandler::ZOffset(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
- if (!ExtUI::isAxisPositionKnown(ExtUI::Z)) {
+ if (TERN0(NO_MOTION_BEFORE_HOMING, !ExtUI::isAxisPositionKnown(ExtUI::Z))) {
dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_HOMING_REQUIRED));
return;
}
@@ -411,7 +411,7 @@ void DGUSRxHandler::ZOffset(DGUS_VP &vp, void *data_ptr) {
void DGUSRxHandler::ZOffsetStep(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
- if (!ExtUI::isAxisPositionKnown(ExtUI::Z)) {
+ if (TERN0(NO_MOTION_BEFORE_HOMING, !ExtUI::isAxisPositionKnown(ExtUI::Z))) {
dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_HOMING_REQUIRED));
return;
}
@@ -525,7 +525,7 @@ void DGUSRxHandler::Probe(DGUS_VP &vp, void *data_ptr) {
#else
queue.enqueue_now(F("G29"));
#endif
- queue.enqueue_now_P(DGUS_CMD_EEPROM_SAVE);
+ queue.enqueue_now(F("M500"));
}
void DGUSRxHandler::DisableABL(DGUS_VP &vp, void *data_ptr) {
@@ -646,18 +646,12 @@ void DGUSRxHandler::Move(DGUS_VP &vp, void *data_ptr) {
switch (vp.addr) {
default: return;
- case DGUS_Addr::MOVE_SetX:
- axis = ExtUI::X;
- break;
- case DGUS_Addr::MOVE_SetY:
- axis = ExtUI::Y;
- break;
- case DGUS_Addr::MOVE_SetZ:
- axis = ExtUI::Z;
- break;
+ case DGUS_Addr::MOVE_SetX: axis = ExtUI::X; break;
+ case DGUS_Addr::MOVE_SetY: axis = ExtUI::Y; break;
+ case DGUS_Addr::MOVE_SetZ: axis = ExtUI::Z; break;
}
- if (!ExtUI::isAxisPositionKnown(axis)) {
+ if (TERN0(NO_MOTION_BEFORE_HOMING, !ExtUI::isAxisPositionKnown(axis))) {
dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_HOMING_REQUIRED));
return;
}
@@ -671,18 +665,11 @@ void DGUSRxHandler::MoveStep(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
float offset;
-
switch (dgus_screen_handler.move_steps) {
default: return;
- case DGUS_Data::StepSize::MM10:
- offset = 10.0f;
- break;
- case DGUS_Data::StepSize::MM1:
- offset = 1.0f;
- break;
- case DGUS_Data::StepSize::MMP1:
- offset = 0.1f;
- break;
+ case DGUS_Data::StepSize::MM10: offset = 10.0f; break;
+ case DGUS_Data::StepSize::MM1: offset = 1.0f; break;
+ case DGUS_Data::StepSize::MMP1: offset = 0.1f; break;
}
const DGUS_Data::MoveDirection direction = (DGUS_Data::MoveDirection)((uint8_t*)data_ptr)[1];
@@ -690,30 +677,15 @@ void DGUSRxHandler::MoveStep(DGUS_VP &vp, void *data_ptr) {
switch (direction) {
default: return;
- case DGUS_Data::MoveDirection::XP:
- axis = ExtUI::X;
- break;
- case DGUS_Data::MoveDirection::XM:
- axis = ExtUI::X;
- offset = -offset;
- break;
- case DGUS_Data::MoveDirection::YP:
- axis = ExtUI::Y;
- break;
- case DGUS_Data::MoveDirection::YM:
- axis = ExtUI::Y;
- offset = -offset;
- break;
- case DGUS_Data::MoveDirection::ZP:
- axis = ExtUI::Z;
- break;
- case DGUS_Data::MoveDirection::ZM:
- axis = ExtUI::Z;
- offset = -offset;
- break;
+ case DGUS_Data::MoveDirection::XM: offset = -offset;
+ case DGUS_Data::MoveDirection::XP: axis = ExtUI::X; break;
+ case DGUS_Data::MoveDirection::YM: offset = -offset;
+ case DGUS_Data::MoveDirection::YP: axis = ExtUI::Y; break;
+ case DGUS_Data::MoveDirection::ZM: offset = -offset;
+ case DGUS_Data::MoveDirection::ZP: axis = ExtUI::Z; break;
}
- if (!ExtUI::isAxisPositionKnown(axis)) {
+ if (TERN0(NO_MOTION_BEFORE_HOMING, !ExtUI::isAxisPositionKnown(axis))) {
dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_HOMING_REQUIRED));
return;
}
@@ -727,7 +699,6 @@ void DGUSRxHandler::MoveSetStep(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
const DGUS_Data::StepSize size = (DGUS_Data::StepSize)((uint8_t*)data_ptr)[1];
-
dgus_screen_handler.move_steps = size;
dgus_screen_handler.TriggerFullUpdate();
@@ -746,9 +717,7 @@ void DGUSRxHandler::GcodeExecute(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
UNUSED(data_ptr);
- if (!strlen(dgus_screen_handler.gcode)) {
- return;
- }
+ if (!strlen(dgus_screen_handler.gcode)) return;
if (!dgus_screen_handler.IsPrinterIdle()) {
dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
@@ -765,9 +734,7 @@ void DGUSRxHandler::ResetEEPROM(DGUS_VP &vp, void *data_ptr) {
const DGUS_Data::Popup result = (DGUS_Data::Popup)((uint8_t*)data_ptr)[1];
- if (result != DGUS_Data::Popup::CONFIRMED) {
- return;
- }
+ if (result != DGUS_Data::Popup::CONFIRMED) return;
if (!dgus_screen_handler.IsPrinterIdle()) {
dgus_screen_handler.SetStatusMessage(GET_TEXT_F(DGUS_MSG_BUSY));
@@ -775,7 +742,7 @@ void DGUSRxHandler::ResetEEPROM(DGUS_VP &vp, void *data_ptr) {
}
queue.enqueue_now(F("M502"));
- queue.enqueue_now_P(DGUS_CMD_EEPROM_SAVE);
+ queue.enqueue_now(F("M500"));
}
void DGUSRxHandler::SettingsExtra(DGUS_VP &vp, void *data_ptr) {
@@ -908,7 +875,7 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) {
dgus_screen_handler.ShowWaitScreen(GET_TEXT_F(DGUS_MSG_PID_AUTOTUNING), DGUS_Screen::PID);
queue.enqueue_one_now(buffer);
- queue.enqueue_now_P(DGUS_CMD_EEPROM_SAVE);
+ queue.enqueue_now(F("M500"));
}
#if ENABLED(POWER_LOSS_RECOVERY)
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp
index cc98126c9b..e1d8778567 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp
@@ -69,11 +69,6 @@ bool DGUSScreenHandler::leveling_active = false;
millis_t DGUSScreenHandler::status_expire = 0;
millis_t DGUSScreenHandler::eeprom_save = 0;
-const char DGUS_MSG_UNDEF[] PROGMEM = "-";
-
-const char DGUS_CMD_HOME[] PROGMEM = "G28",
- DGUS_CMD_EEPROM_SAVE[] PROGMEM = "M500";
-
void DGUSScreenHandler::Init() {
dgus_display.Init();
@@ -146,7 +141,7 @@ void DGUSScreenHandler::Loop() {
if (eeprom_save > 0 && ELAPSED(ms, eeprom_save) && IsPrinterIdle()) {
eeprom_save = 0;
- queue.enqueue_now_P(DGUS_CMD_EEPROM_SAVE);
+ queue.enqueue_now(F("M500"));
return;
}
@@ -385,7 +380,7 @@ void DGUSScreenHandler::SetStatusMessage(const char* msg, const millis_t duratio
}
void DGUSScreenHandler::SetStatusMessage(FSTR_P const fmsg, const millis_t duration) {
- dgus_display.WriteStringPGM((uint16_t)DGUS_Addr::MESSAGE_Status, FTOP(fmsg), DGUS_STATUS_LEN, false, true);
+ dgus_display.WriteString((uint16_t)DGUS_Addr::MESSAGE_Status, fmsg, DGUS_STATUS_LEN, false, true);
status_expire = (duration > 0 ? ExtUI::safe_millis() + duration : 0);
}
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h
index e872e8a823..295df311df 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h
@@ -141,8 +141,3 @@ private:
};
extern DGUSScreenHandler dgus_screen_handler;
-
-extern const char DGUS_MSG_UNDEF[];
-
-extern const char DGUS_CMD_HOME[],
- DGUS_CMD_EEPROM_SAVE[];
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp
index 3b243e4711..c95d7d0453 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp
@@ -82,7 +82,7 @@ bool DGUSSetupHandler::LevelingMenu() {
dgus_screen_handler.ShowWaitScreen(GET_TEXT_F(DGUS_MSG_HOMING), DGUS_Screen::LEVELING_MENU);
- queue.enqueue_now_P(DGUS_CMD_HOME);
+ queue.enqueue_now(F("G28"));
return false;
}
@@ -101,7 +101,7 @@ bool DGUSSetupHandler::LevelingManual() {
dgus_screen_handler.ShowWaitScreen(GET_TEXT_F(DGUS_MSG_HOMING), DGUS_Screen::LEVELING_MANUAL);
- queue.enqueue_now_P(DGUS_CMD_HOME);
+ queue.enqueue_now(F("G28"));
return false;
}
@@ -130,7 +130,7 @@ bool DGUSSetupHandler::LevelingOffset() {
dgus_screen_handler.ShowWaitScreen(GET_TEXT_F(DGUS_MSG_HOMING), DGUS_Screen::LEVELING_OFFSET);
- queue.enqueue_now_P(DGUS_CMD_HOME);
+ queue.enqueue_now(F("G28"));
return false;
}
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp
index eb1b3aa510..dc2aea8bef 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp
@@ -522,7 +522,7 @@ void DGUSTxHandler::PrintTime(DGUS_VP &vp) {
dgus_display.WriteString((uint16_t)vp.addr, buffer, vp.size);
#else
- dgus_display.WriteStringPGM((uint16_t)vp.addr, DGUS_MSG_UNDEF, vp.size);
+ dgus_display.WriteString((uint16_t)vp.addr, F("-"), vp.size);
#endif
}
@@ -533,7 +533,7 @@ void DGUSTxHandler::LongestPrint(DGUS_VP &vp) {
dgus_display.WriteString((uint16_t)vp.addr, buffer, vp.size);
#else
- dgus_display.WriteStringPGM((uint16_t)vp.addr, DGUS_MSG_UNDEF, vp.size);
+ dgus_display.WriteString((uint16_t)vp.addr, F("-"), vp.size);
#endif
}
@@ -544,7 +544,7 @@ void DGUSTxHandler::FilamentUsed(DGUS_VP &vp) {
dgus_display.WriteString((uint16_t)vp.addr, buffer, vp.size);
#else
- dgus_display.WriteStringPGM((uint16_t)vp.addr, DGUS_MSG_UNDEF, vp.size);
+ dgus_display.WriteString((uint16_t)vp.addr, F("-"), vp.size);
#endif
}
From 0b473eecbccb50e1f59f91abae1ff28701df4a46 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Wed, 8 Mar 2023 00:23:50 +0000
Subject: [PATCH 91/97] [cron] Bump distribution date (2023-03-08)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 3eae6ed9d8..504127e34f 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-03-07"
+//#define STRING_DISTRIBUTION_DATE "2023-03-08"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index 0eac8c737c..da24836a33 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-03-07"
+ #define STRING_DISTRIBUTION_DATE "2023-03-08"
#endif
/**
From db5ff20b72c8769865f1f7a23d3ce5074b0c997e Mon Sep 17 00:00:00 2001
From: Kurt Haenen
Date: Thu, 9 Mar 2023 07:20:30 +0100
Subject: [PATCH 92/97] =?UTF-8?q?=E2=9C=A8=20Extra=20Z=20Servo=20Probe=20o?=
=?UTF-8?q?ptions=20(#21427)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Scott Lahteine
---
Marlin/Configuration.h | 6 ++++--
Marlin/src/gcode/bedlevel/abl/G29.cpp | 2 +-
Marlin/src/module/probe.cpp | 14 ++++++++++++++
3 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 54a895712d..77f1908901 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -1388,8 +1388,10 @@
/**
* Z Servo Probe, such as an endstop switch on a rotating arm.
*/
-//#define Z_PROBE_SERVO_NR 0 // Defaults to SERVO 0 connector.
-//#define Z_SERVO_ANGLES { 70, 0 } // Z Servo Deploy and Stow angles
+//#define Z_PROBE_SERVO_NR 0 // Defaults to SERVO 0 connector.
+//#define Z_SERVO_ANGLES { 70, 0 } // Z Servo Deploy and Stow angles
+//#define Z_SERVO_MEASURE_ANGLE 45 // Use if the servo must move to a "free" position for measuring after deploy.
+//#define Z_SERVO_INTERMEDIATE_STOW // Stow the probe between points.
/**
* The BLTouch probe uses a Hall effect sensor and emulates a servo.
diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp
index 4769bd79c0..114fa55520 100644
--- a/Marlin/src/gcode/bedlevel/abl/G29.cpp
+++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp
@@ -491,7 +491,7 @@ G29_TYPE GcodeSuite::G29() {
if (!no_action) set_bed_leveling_enabled(false);
// Deploy certain probes before starting probing
- #if ENABLED(BLTOUCH)
+ #if ENABLED(BLTOUCH) || BOTH(HAS_Z_SERVO_PROBE, Z_SERVO_INTERMEDIATE_STOW)
do_z_clearance(Z_CLEARANCE_DEPLOY_PROBE);
#elif HAS_BED_PROBE
if (probe.deploy()) { // (returns true on deploy failure)
diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp
index f0a3c8584b..7daafd1139 100644
--- a/Marlin/src/module/probe.cpp
+++ b/Marlin/src/module/probe.cpp
@@ -405,6 +405,11 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
servo[Z_PROBE_SERVO_NR].move(servo_angles[Z_PROBE_SERVO_NR][deploy ? 0 : 1]);
+ #ifdef Z_SERVO_MEASURE_ANGLE
+ // After deploy move back to the measure angle...
+ if (deploy) MOVE_SERVO(Z_PROBE_SERVO_NR, Z_SERVO_MEASURE_ANGLE);
+ #endif
+
#elif ANY(TOUCH_MI_PROBE, Z_PROBE_ALLEN_KEY, MAG_MOUNTED_PROBE)
deploy ? run_deploy_moves() : run_stow_moves();
@@ -582,11 +587,16 @@ bool Probe::probe_down_to_z(const_float_t z, const_feedRate_t fr_mm_s) {
#if BOTH(HAS_TEMP_HOTEND, WAIT_FOR_HOTEND)
thermalManager.wait_for_hotend_heating(active_extruder);
#endif
+
#if ENABLED(BLTOUCH)
if (!bltouch.high_speed_mode && bltouch.deploy())
return true; // Deploy in LOW SPEED MODE on every probe action
#endif
+ #if HAS_Z_SERVO_PROBE && (ENABLED(Z_SERVO_INTERMEDIATE_STOW) || defined(Z_SERVO_MEASURE_ANGLE))
+ probe_specific_action(true); // Always re-deploy in this case
+ #endif
+
// Disable stealthChop if used. Enable diag1 pin on driver.
#if ENABLED(SENSORLESS_PROBING)
sensorless_t stealth_states { false };
@@ -636,6 +646,10 @@ bool Probe::probe_down_to_z(const_float_t z, const_feedRate_t fr_mm_s) {
return true; // Stow in LOW SPEED MODE on every trigger
#endif
+ #if BOTH(HAS_Z_SERVO_PROBE, Z_SERVO_INTERMEDIATE_STOW)
+ probe_specific_action(false); // Always stow
+ #endif
+
// Clear endstop flags
endstops.hit_on_purpose();
From 1d06fe8e267a369dbe3a547d8c08264714331783 Mon Sep 17 00:00:00 2001
From: Scott Lahteine
Date: Thu, 9 Mar 2023 01:37:09 -0600
Subject: [PATCH 93/97] =?UTF-8?q?=F0=9F=94=A7=20Update=20some=20config.ini?=
=?UTF-8?q?=20options?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/config.ini | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/Marlin/config.ini b/Marlin/config.ini
index 0fb9fb0c93..65058a500d 100644
--- a/Marlin/config.ini
+++ b/Marlin/config.ini
@@ -95,10 +95,10 @@ invert_y_dir = true
invert_z_dir = false
invert_e0_dir = false
-invert_e_step_pin = false
-invert_x_step_pin = false
-invert_y_step_pin = false
-invert_z_step_pin = false
+step_state_e = HIGH
+step_state_x = HIGH
+step_state_y = HIGH
+step_state_z = HIGH
disable_x = false
disable_y = false
@@ -178,7 +178,7 @@ autotemp_oldweight = 0.98
bed_check_interval = 5000
default_stepper_deactive_time = 120
default_volumetric_extruder_limit = 0.00
-disable_inactive_e = true
+disable_inactive_extruder = true
disable_inactive_x = true
disable_inactive_y = true
disable_inactive_z = true
From 32dcd7f1187b3e2fc30f69cc936c0250c40a60cd Mon Sep 17 00:00:00 2001
From: Sion Williams
Date: Thu, 9 Mar 2023 08:45:01 +0000
Subject: [PATCH 94/97] =?UTF-8?q?=F0=9F=94=A8=20VSCode=20+=20Devcontainer?=
=?UTF-8?q?=20support=20(#22420)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.devcontainer/Dockerfile | 29 +++++++++++++++++++
.devcontainer/devcontainer.json | 51 +++++++++++++++++++++++++++++++++
README.md | 1 +
3 files changed, 81 insertions(+)
create mode 100644 .devcontainer/Dockerfile
create mode 100644 .devcontainer/devcontainer.json
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
new file mode 100644
index 0000000000..4f29a10053
--- /dev/null
+++ b/.devcontainer/Dockerfile
@@ -0,0 +1,29 @@
+# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.187.0/containers/python-3/.devcontainer/base.Dockerfile
+
+# [Choice] Python version: 3, 3.9, 3.8, 3.7, 3.6
+ARG VARIANT="3.9.0-buster"
+FROM python:${VARIANT}
+
+# [Option] Install Node.js
+ARG INSTALL_NODE="true"
+ARG NODE_VERSION="lts/*"
+RUN if [ "${INSTALL_NODE}" = "true" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi
+
+# [Optional] If your pip requirements rarely change, uncomment this section to add them to the image.
+# COPY requirements.txt /tmp/pip-tmp/
+# RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \
+# && rm -rf /tmp/pip-tmp
+
+# [Optional] Uncomment this section to install additional OS packages.
+# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
+# && apt-get -y install --no-install-recommends
+
+# [Optional] Uncomment this line to install global node packages.
+# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g " 2>&1
+
+
+RUN pip install -U https://github.com/platformio/platformio-core/archive/develop.zip
+RUN platformio update
+# To get the test platforms
+RUN pip install PyYaml
+#ENV PATH /code/buildroot/bin/:/code/buildroot/tests/:${PATH}
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644
index 0000000000..54627d462b
--- /dev/null
+++ b/.devcontainer/devcontainer.json
@@ -0,0 +1,51 @@
+// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
+// https://github.com/microsoft/vscode-dev-containers/tree/v0.187.0/containers/python-3
+{
+ "name": "Python 3",
+ "build": {
+ "dockerfile": "Dockerfile",
+ "context": "..",
+ "args": {
+ // Update 'VARIANT' to pick a Python version: 3, 3.6, 3.7, 3.8, 3.9
+ "VARIANT": "3.9.0-buster",
+ // Options
+ "INSTALL_NODE": "false",
+ "NODE_VERSION": "lts/*"
+ }
+ },
+
+ // Set *default* container specific settings.json values on container create.
+ "settings": {
+ "python.pythonPath": "/usr/local/bin/python",
+ "python.languageServer": "Pylance",
+ "python.linting.enabled": true,
+ "python.linting.pylintEnabled": true,
+ "python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8",
+ "python.formatting.blackPath": "/usr/local/py-utils/bin/black",
+ "python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf",
+ "python.linting.banditPath": "/usr/local/py-utils/bin/bandit",
+ "python.linting.flake8Path": "/usr/local/py-utils/bin/flake8",
+ "python.linting.mypyPath": "/usr/local/py-utils/bin/mypy",
+ "python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle",
+ "python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle",
+ "python.linting.pylintPath": "/usr/local/py-utils/bin/pylint"
+ },
+
+ // Add the IDs of extensions you want installed when the container is created.
+ "extensions": [
+ "ms-python.python",
+ "ms-python.vscode-pylance",
+ "platformio.platformio-ide",
+ "marlinfirmware.auto-build",
+ "editorconfig.editorconfig"
+ ],
+
+ // Use 'forwardPorts' to make a list of ports inside the container available locally.
+ // "forwardPorts": [],
+
+ // Use 'postCreateCommand' to run commands after the container is created.
+ // "postCreateCommand": "pip3 install --user -r requirements.txt",
+
+ // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
+ // "remoteUser": "vscode"
+}
diff --git a/README.md b/README.md
index 05afe9ec27..ac496aac21 100644
--- a/README.md
+++ b/README.md
@@ -35,6 +35,7 @@ To build and upload Marlin you will use one of these tools:
- The free [Visual Studio Code](https://code.visualstudio.com/download) using the [Auto Build Marlin](https://marlinfw.org/docs/basics/auto_build_marlin.html) extension.
- The free [Arduino IDE](https://www.arduino.cc/en/main/software) : See [Building Marlin with Arduino](https://marlinfw.org/docs/basics/install_arduino.html)
+- You can also use VSCode with devcontainer : See [Installing Marlin (VSCode devcontainer)](http://marlinfw.org/docs/basics/install_devcontainer_vscode.html).
Marlin is optimized to build with the **PlatformIO IDE** extension for **Visual Studio Code**. You can still build Marlin with **Arduino IDE**, and we hope to improve the Arduino build experience, but at this time PlatformIO is the better choice.
From 26f96dc7a66bac9503bff6ae64f8addaf1a3a537 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Thu, 9 Mar 2023 12:08:13 +0000
Subject: [PATCH 95/97] [cron] Bump distribution date (2023-03-09)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 504127e34f..3453f39de0 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-03-08"
+//#define STRING_DISTRIBUTION_DATE "2023-03-09"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index da24836a33..a03bf0bb76 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-03-08"
+ #define STRING_DISTRIBUTION_DATE "2023-03-09"
#endif
/**
From 904ddf8551149e7de1af25456fc41d069f2f2ac4 Mon Sep 17 00:00:00 2001
From: Evgeniy Zhabotinskiy
Date: Fri, 10 Mar 2023 03:56:19 +0300
Subject: [PATCH 96/97] =?UTF-8?q?=E2=9C=A8=20Z=5FSAFE=5FHOMING=5FPOINT=5FA?=
=?UTF-8?q?BSOLUTE=20(#23069)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Marlin/Configuration.h | 1 +
Marlin/src/gcode/calibrate/G28.cpp | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 77f1908901..3b90555cec 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -2179,6 +2179,7 @@
#if ENABLED(Z_SAFE_HOMING)
#define Z_SAFE_HOMING_X_POINT X_CENTER // X point for Z homing
#define Z_SAFE_HOMING_Y_POINT Y_CENTER // Y point for Z homing
+ //#define Z_SAFE_HOMING_POINT_ABSOLUTE // Ignore home offsets (M206) for Z homing position
#endif
// Homing speeds (linear=mm/min, rotational=°/min)
diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp
index 6f0f27cb9d..e279b90e33 100644
--- a/Marlin/src/gcode/calibrate/G28.cpp
+++ b/Marlin/src/gcode/calibrate/G28.cpp
@@ -124,7 +124,7 @@
* (Z is already at the right height)
*/
constexpr xy_float_t safe_homing_xy = { Z_SAFE_HOMING_X_POINT, Z_SAFE_HOMING_Y_POINT };
- #if HAS_HOME_OFFSET
+ #if HAS_HOME_OFFSET && DISABLED(Z_SAFE_HOMING_POINT_ABSOLUTE)
xy_float_t okay_homing_xy = safe_homing_xy;
okay_homing_xy -= home_offset;
#else
From cff395236cacc55845b517ef649cd510fd786a86 Mon Sep 17 00:00:00 2001
From: thinkyhead
Date: Fri, 10 Mar 2023 06:06:44 +0000
Subject: [PATCH 97/97] [cron] Bump distribution date (2023-03-10)
---
Marlin/Version.h | 2 +-
Marlin/src/inc/Version.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 3453f39de0..154e1f9c4e 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-03-09"
+//#define STRING_DISTRIBUTION_DATE "2023-03-10"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index a03bf0bb76..f1b0861dad 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-03-09"
+ #define STRING_DISTRIBUTION_DATE "2023-03-10"
#endif
/**