From 8e4953514c893410c402ba6486f86580385effd9 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Tue, 12 Oct 2021 23:19:05 -0400 Subject: [PATCH 001/532] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20Formbot=20ST7920?= =?UTF-8?q?=20delays,=20intentional=20X2=20pins=20(#22915)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/inc/Conditionals_adv.h | 4 +++- Marlin/src/module/stepper.cpp | 2 +- Marlin/src/pins/pins_postprocess.h | 4 ++-- Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR2.h | 6 ++++++ Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h | 18 +++++++++++++++--- Marlin/src/pins/sensitive_pins.h | 2 +- 6 files changed, 28 insertions(+), 8 deletions(-) diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index 94332c9268..e2ee8d914a 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -624,7 +624,9 @@ #endif // Fallback Stepper Driver types that depend on Configuration_adv.h -#if NONE(DUAL_X_CARRIAGE, X_DUAL_STEPPER_DRIVERS) +#if EITHER(DUAL_X_CARRIAGE, X_DUAL_STEPPER_DRIVERS) + #define HAS_X2_STEPPER 1 +#else #undef X2_DRIVER_TYPE #endif #if DISABLED(Y_DUAL_STEPPER_DRIVERS) diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 3a1ee39c52..e374b85d7a 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -2614,7 +2614,7 @@ void Stepper::init() { #if HAS_X_ENABLE X_ENABLE_INIT(); if (!X_ENABLE_ON) X_ENABLE_WRITE(HIGH); - #if EITHER(DUAL_X_CARRIAGE, X_DUAL_STEPPER_DRIVERS) && HAS_X2_ENABLE + #if BOTH(HAS_X2_STEPPER, HAS_X2_ENABLE) X2_ENABLE_INIT(); if (!X_ENABLE_ON) X2_ENABLE_WRITE(HIGH); #endif diff --git a/Marlin/src/pins/pins_postprocess.h b/Marlin/src/pins/pins_postprocess.h index 827e07e3f5..a2fe2b9af3 100644 --- a/Marlin/src/pins/pins_postprocess.h +++ b/Marlin/src/pins/pins_postprocess.h @@ -579,12 +579,12 @@ #endif // The X2 axis, if any, should be the next open extruder port -#if EITHER(DUAL_X_CARRIAGE, X_DUAL_STEPPER_DRIVERS) && !defined(X2_DIAG_PIN) && !defined(X2_STEP_PIN) && !PIN_EXISTS(X2_CS_PIN) +#if HAS_X2_STEPPER && !defined(X2_DIAG_PIN) && !defined(X2_STEP_PIN) && !PIN_EXISTS(X2_CS_PIN) #define Y2_E_INDEX INCREMENT(X2_E_INDEX) #else #define Y2_E_INDEX X2_E_INDEX #endif -#if EITHER(DUAL_X_CARRIAGE, X_DUAL_STEPPER_DRIVERS) +#if HAS_X2_STEPPER #ifndef X2_STEP_PIN #define X2_STEP_PIN _EPIN(X2_E_INDEX, STEP) #define X2_DIR_PIN _EPIN(X2_E_INDEX, DIR) diff --git a/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR2.h b/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR2.h index 843eadb432..4fb10bfd35 100644 --- a/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR2.h +++ b/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR2.h @@ -66,3 +66,9 @@ #if ENABLED(CASE_LIGHT_ENABLE) && PIN_EXISTS(CASE_LIGHT) && (CASE_LIGHT_PIN == SPINDLE_LASER_ENA_PIN || CASE_LIGHT_PIN == SPINDLE_LASER_PWM_PIN) #error "CASE_LIGHT_PIN conflicts with a Spindle / Laser pin." #endif + +#if HAS_MARLINUI_U8GLIB + #define BOARD_ST7920_DELAY_1 125 + #define BOARD_ST7920_DELAY_2 125 + #define BOARD_ST7920_DELAY_3 125 +#endif diff --git a/Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h b/Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h index c953cff3d0..79ac308ce7 100644 --- a/Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h +++ b/Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h @@ -100,9 +100,15 @@ #define E1_CS_PIN 44 #endif -#define E2_STEP_PIN 42 -#define E2_DIR_PIN 43 -#define E2_ENABLE_PIN 44 +#if HAS_X2_STEPPER + #define X2_STEP_PIN 42 + #define X2_DIR_PIN 43 + #define X2_ENABLE_PIN 44 +#else + #define E2_STEP_PIN 42 + #define E2_DIR_PIN 43 + #define E2_ENABLE_PIN 44 +#endif // // Temperature Sensors @@ -174,3 +180,9 @@ #define BEEPER_PIN 37 #endif #endif + +#if HAS_MARLINUI_U8GLIB + #define BOARD_ST7920_DELAY_1 125 + #define BOARD_ST7920_DELAY_2 125 + #define BOARD_ST7920_DELAY_3 125 +#endif diff --git a/Marlin/src/pins/sensitive_pins.h b/Marlin/src/pins/sensitive_pins.h index 7ccb0339b2..5f2bd0467e 100644 --- a/Marlin/src/pins/sensitive_pins.h +++ b/Marlin/src/pins/sensitive_pins.h @@ -632,7 +632,7 @@ // Chip Select and Digital Micro-stepping // -#if EITHER(DUAL_X_CARRIAGE, X_DUAL_STEPPER_DRIVERS) +#if HAS_X2_STEPPER #if PIN_EXISTS(X2_CS) && AXIS_HAS_SPI(X2) #define _X2_CS X2_CS_PIN, #else From 5d665d5e1e3a7b9f95cd4075815883fce3791465 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 14 Oct 2021 01:01:39 +0000 Subject: [PATCH 002/532] [cron] Bump distribution date (2021-10-14) --- 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 b48ab6ef67..9c5769db27 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 "2021-10-13" +//#define STRING_DISTRIBUTION_DATE "2021-10-14" /** * 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 614fdc36f2..2743d5b41d 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 "2021-10-13" + #define STRING_DISTRIBUTION_DATE "2021-10-14" #endif /** From 11435356643c7e32dd6f30e8a144e2c3766bfb35 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 15 Oct 2021 01:05:59 +0000 Subject: [PATCH 003/532] [cron] Bump distribution date (2021-10-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 9c5769db27..cb13c11a22 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 "2021-10-14" +//#define STRING_DISTRIBUTION_DATE "2021-10-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 2743d5b41d..d6176599f0 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 "2021-10-14" + #define STRING_DISTRIBUTION_DATE "2021-10-15" #endif /** From de5aefd09e2ede1314382c4a10e51335d07524f9 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Fri, 15 Oct 2021 14:38:03 +1300 Subject: [PATCH 004/532] =?UTF-8?q?=F0=9F=94=A7=20Add,=20update=20TFT=20sa?= =?UTF-8?q?nity=20checks=20(#22928)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Conditionals_LCD.h | 1 - Marlin/src/inc/SanityCheck.h | 11 +++++++---- Marlin/src/inc/Warnings.cpp | 4 ++++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index 46b969a478..e80dd3ed69 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -332,7 +332,6 @@ #if ANY(FSMC_GRAPHICAL_TFT, SPI_GRAPHICAL_TFT, TFT_320x240, TFT_480x320, TFT_320x240_SPI, TFT_480x320_SPI, TFT_LVGL_UI_FSMC, TFT_LVGL_UI_SPI) #define IS_LEGACY_TFT 1 #define TFT_GENERIC - #warning "Don't forget to update your TFT settings in Configuration.h." #endif #if ANY(FSMC_GRAPHICAL_TFT, TFT_320x240, TFT_480x320, TFT_LVGL_UI_FSMC) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 3be2076dd9..0aa5bd9f2d 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2723,12 +2723,11 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #undef IS_U8GLIB_SSD1306 #undef IS_EXTUI -#undef IS_LEGACY_TFT #if ANY(TFT_GENERIC, MKS_TS35_V2_0, MKS_ROBIN_TFT24, MKS_ROBIN_TFT28, MKS_ROBIN_TFT32, MKS_ROBIN_TFT35, MKS_ROBIN_TFT43, MKS_ROBIN_TFT_V1_1R, TFT_TRONXY_X5SA, ANYCUBIC_TFT35, ANYCUBIC_TFT35, LONGER_LK_TFT28, ANET_ET4_TFT28, ANET_ET5_TFT35, BIQU_BX_TFT70) #if NONE(TFT_COLOR_UI, TFT_CLASSIC_UI, TFT_LVGL_UI) #error "TFT_COLOR_UI, TFT_CLASSIC_UI, TFT_LVGL_UI is required for your TFT. Please enable one." - #elif 1 < ENABLED(TFT_COLOR_UI) + ENABLED(TFT_CLASSIC_UI) + ENABLED(TFT_LVGL_UI) + #elif MANY(TFT_COLOR_UI, TFT_CLASSIC_UI, TFT_LVGL_UI) #error "Please select only one of TFT_COLOR_UI, TFT_CLASSIC_UI, or TFT_LVGL_UI." #endif #elif ANY(TFT_COLOR_UI, TFT_CLASSIC_UI, TFT_LVGL_UI) @@ -2751,8 +2750,12 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "Please select only one of TFT_RES_320x240, TFT_RES_480x272, TFT_RES_480x320, or TFT_RES_1024x600." #endif -#if HAS_TFT_LVGL_UI && DISABLED(TFT_RES_480x320) - #error "(FMSC|SPI)TFT_LVGL_UI requires TFT_RES_480x320." +#if ENABLED(TFT_LVGL_UI) + #if DISABLED(TFT_RES_480x320) + #error "TFT_LVGL_UI requires TFT_RES_480x320." + #elif DISABLED(SDSUPPORT) + #error "TFT_LVGL_UI requires SDSUPPORT." + #endif #endif #if defined(GRAPHICAL_TFT_UPSCALE) && !WITHIN(GRAPHICAL_TFT_UPSCALE, 2, 4) diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index fbec990fa7..0e04cdd435 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -456,6 +456,10 @@ #endif #endif +#if IS_LEGACY_TFT + #warning "Don't forget to update your TFT settings in Configuration.h." +#endif + // Ender 3 Pro (but, apparently all Creality 4.2.2 boards) #if ENABLED(EMIT_CREALITY_422_WARNING) || MB(CREALITY_V4) #warning "Creality 4.2.2 boards may have A4988 or TMC2208_STANDALONE drivers. Check your board and make sure to select the correct DRIVER_TYPE!" From ee28a14e8e7f6b33fe5813dbedcd85380207c345 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 15 Oct 2021 00:24:08 -0500 Subject: [PATCH 005/532] =?UTF-8?q?=F0=9F=8E=A8=20Refactor=20Host=20Action?= =?UTF-8?q?s=20as=20singleton?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/MarlinCore.cpp | 4 +- Marlin/src/feature/e_parser.h | 2 +- Marlin/src/feature/host_actions.cpp | 109 +++++++++------- Marlin/src/feature/host_actions.h | 122 ++++++++++++------ Marlin/src/feature/mmu/mmu2.cpp | 2 +- Marlin/src/feature/pause.cpp | 28 ++-- Marlin/src/feature/runout.cpp | 9 +- Marlin/src/gcode/config/M43.cpp | 2 +- Marlin/src/gcode/control/M111.cpp | 2 +- Marlin/src/gcode/gcode.cpp | 10 +- Marlin/src/gcode/host/M876.cpp | 2 +- Marlin/src/gcode/lcd/M0_M1.cpp | 2 +- Marlin/src/gcode/sd/M1001.cpp | 2 +- Marlin/src/gcode/sd/M24_M25.cpp | 8 +- Marlin/src/gcode/stats/M75-M78.cpp | 2 +- Marlin/src/lcd/e3v2/creality/dwin.cpp | 2 +- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 2 +- Marlin/src/lcd/e3v2/jyersui/dwin.cpp | 6 +- .../cocoa_press/status_screen.cpp | 4 +- .../confirm_abort_print_dialog_box.cpp | 2 +- .../ftdi_eve_touch_ui/generic/tune_menu.cpp | 4 +- Marlin/src/lcd/extui/ui_api.cpp | 2 +- Marlin/src/lcd/marlinui.cpp | 20 +-- Marlin/src/lcd/menu/menu_delta_calibrate.cpp | 4 +- Marlin/src/lcd/menu/menu_main.cpp | 2 +- Marlin/src/module/probe.cpp | 4 +- 26 files changed, 208 insertions(+), 150 deletions(-) diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 346c5f8f2c..2e9f6a6fc2 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -872,7 +872,7 @@ void kill(FSTR_P const lcd_error/*=nullptr*/, FSTR_P const lcd_component/*=nullp SERIAL_ERROR_MSG(STR_ERR_KILLED); #ifdef ACTION_ON_KILL - host_action_kill(); + hostui.kill(); #endif minkill(steppers_off); @@ -1525,7 +1525,7 @@ void setup() { #endif #if ENABLED(HOST_PROMPT_SUPPORT) - SETUP_RUN(host_action_prompt_end()); + SETUP_RUN(hostui.prompt_end()); #endif #if HAS_TRINAMIC_CONFIG && DISABLED(PSU_DEFAULT_OFF) diff --git a/Marlin/src/feature/e_parser.h b/Marlin/src/feature/e_parser.h index 3723caa35e..1dee0cf755 100644 --- a/Marlin/src/feature/e_parser.h +++ b/Marlin/src/feature/e_parser.h @@ -199,7 +199,7 @@ public: case EP_M112: killed_by_M112 = true; break; case EP_M410: quickstop_by_M410 = true; break; #if ENABLED(HOST_PROMPT_SUPPORT) - case EP_M876SN: host_response_handler(M876_reason); break; + case EP_M876SN: hostui.handle_response(M876_reason); break; #endif #if ENABLED(REALTIME_REPORTING_COMMANDS) case EP_GRBL_STATUS: report_current_position_moving(); break; diff --git a/Marlin/src/feature/host_actions.cpp b/Marlin/src/feature/host_actions.cpp index 9f5a1481f1..6a1faf81c0 100644 --- a/Marlin/src/feature/host_actions.cpp +++ b/Marlin/src/feature/host_actions.cpp @@ -24,10 +24,10 @@ #if ENABLED(HOST_ACTION_COMMANDS) -#include "host_actions.h" - //#define DEBUG_HOST_ACTIONS +#include "host_actions.h" + #if ENABLED(ADVANCED_PAUSE_FEATURE) #include "pause.h" #include "../gcode/queue.h" @@ -37,7 +37,12 @@ #include "runout.h" #endif -void host_action(FSTR_P const fstr, const bool eol) { +HostUI hostui; + +flag_t HostUI::flag; + +void HostUI::action(FSTR_P const fstr, const bool eol) { + if (!flag.bits) return; PORT_REDIRECT(SerialMask::All); SERIAL_ECHOPGM("//action:"); SERIAL_ECHOF(fstr); @@ -45,29 +50,40 @@ void host_action(FSTR_P const fstr, const bool eol) { } #ifdef ACTION_ON_KILL - void host_action_kill() { host_action(F(ACTION_ON_KILL)); } + void HostUI::kill() { action(F(ACTION_ON_KILL)); } #endif #ifdef ACTION_ON_PAUSE - void host_action_pause(const bool eol/*=true*/) { host_action(F(ACTION_ON_PAUSE), eol); } + void HostUI::pause(const bool eol/*=true*/) { action(F(ACTION_ON_PAUSE), eol); } #endif #ifdef ACTION_ON_PAUSED - void host_action_paused(const bool eol/*=true*/) { host_action(F(ACTION_ON_PAUSED), eol); } + void HostUI::paused(const bool eol/*=true*/) { action(F(ACTION_ON_PAUSED), eol); } #endif #ifdef ACTION_ON_RESUME - void host_action_resume() { host_action(F(ACTION_ON_RESUME)); } + void HostUI::resume() { action(F(ACTION_ON_RESUME)); } #endif #ifdef ACTION_ON_RESUMED - void host_action_resumed() { host_action(F(ACTION_ON_RESUMED)); } + void HostUI::resumed() { action(F(ACTION_ON_RESUMED)); } #endif #ifdef ACTION_ON_CANCEL - void host_action_cancel() { host_action(F(ACTION_ON_CANCEL)); } + void HostUI::cancel() { action(F(ACTION_ON_CANCEL)); } #endif #ifdef ACTION_ON_START - void host_action_start() { host_action(F(ACTION_ON_START)); } + void HostUI::start() { action(F(ACTION_ON_START)); } +#endif + +#if ENABLED(G29_RETRY_AND_RECOVER) + #ifdef ACTION_ON_G29_RECOVER + void HostUI::g29_recover() { action(F(ACTION_ON_G29_RECOVER)); } + #endif + #ifdef ACTION_ON_G29_FAILURE + void HostUI::g29_failure() { action(F(ACTION_ON_G29_FAILURE)); } + #endif #endif #if ENABLED(HOST_PROMPT_SUPPORT) + PromptReason HostUI::host_prompt_reason = PROMPT_NOT_DEFINED; + PGMSTR(CONTINUE_STR, "Continue"); PGMSTR(DISMISS_STR, "Dismiss"); @@ -75,64 +91,69 @@ void host_action(FSTR_P const fstr, const bool eol) { extern bool wait_for_user; #endif - PromptReason host_prompt_reason = PROMPT_NOT_DEFINED; - - void host_action_notify(const char * const cstr) { + void HostUI::notify(const char * const cstr) { + if (!flag.bits) return; PORT_REDIRECT(SerialMask::All); - host_action(F("notification "), false); + action(F("notification "), false); SERIAL_ECHOLN(cstr); } - void host_action_notify(FSTR_P const fstr) { + void HostUI::notify_P(PGM_P const pstr) { + if (!flag.bits) return; PORT_REDIRECT(SerialMask::All); - host_action(F("notification "), false); - SERIAL_ECHOLNF(fstr); + action(F("notification "), false); + SERIAL_ECHOLNPGM_P(pstr); } - void host_action_prompt(FSTR_P const ptype, const bool eol=true) { + void HostUI::prompt(FSTR_P const ptype, const bool eol/*=true*/) { + if (!flag.bits) return; PORT_REDIRECT(SerialMask::All); - host_action(F("prompt_"), false); + action(F("prompt_"), false); SERIAL_ECHOF(ptype); if (eol) SERIAL_EOL(); } - void host_action_prompt_plus(FSTR_P const ptype, FSTR_P const fstr, const char extra_char='\0') { - host_action_prompt(ptype, false); + void HostUI::prompt_plus(FSTR_P const ptype, FSTR_P const fstr, const char extra_char/*='\0'*/) { + if (!flag.bits) return; + prompt(ptype, false); PORT_REDIRECT(SerialMask::All); SERIAL_CHAR(' '); SERIAL_ECHOF(fstr); if (extra_char != '\0') SERIAL_CHAR(extra_char); SERIAL_EOL(); } - void host_action_prompt_begin(const PromptReason reason, FSTR_P const fstr, const char extra_char/*='\0'*/) { - host_action_prompt_end(); + void HostUI::prompt_begin(const PromptReason reason, FSTR_P const fstr, const char extra_char/*='\0'*/) { + if (!flag.bits) return; + prompt_end(); host_prompt_reason = reason; - host_action_prompt_plus(F("begin"), fstr, extra_char); + prompt_plus(F("begin"), fstr, extra_char); } - void host_action_prompt_button(FSTR_P const fstr) { host_action_prompt_plus(F("button"), fstr); } - void host_action_prompt_end() { host_action_prompt(F("end")); } - void host_action_prompt_show() { host_action_prompt(F("show")); } + void HostUI::prompt_button(FSTR_P const fstr) { prompt_plus(F("button"), fstr); } + void HostUI::prompt_end() { prompt(F("end")); } + void HostUI::prompt_show() { prompt(F("show")); } - void _host_prompt_show(FSTR_P const btn1/*=nullptr*/, FSTR_P const btn2/*=nullptr*/) { - if (btn1) host_action_prompt_button(btn1); - if (btn2) host_action_prompt_button(btn2); - host_action_prompt_show(); + void HostUI::_prompt_show(FSTR_P const btn1, FSTR_P const btn2) { + if (btn1) prompt_button(btn1); + if (btn2) prompt_button(btn2); + prompt_show(); } - void host_prompt_do(const PromptReason reason, FSTR_P const fstr, FSTR_P const btn1/*=nullptr*/, FSTR_P const btn2/*=nullptr*/) { - host_action_prompt_begin(reason, fstr); - _host_prompt_show(btn1, btn2); + void HostUI::prompt_do(const PromptReason reason, FSTR_P const fstr, FSTR_P const btn1/*=nullptr*/, FSTR_P const btn2/*=nullptr*/) { + prompt_begin(reason, fstr); + _prompt_show(btn1, btn2); } - void host_prompt_do(const PromptReason reason, FSTR_P const fstr, const char extra_char, FSTR_P const btn1/*=nullptr*/, FSTR_P const btn2/*=nullptr*/) { - host_action_prompt_begin(reason, fstr, extra_char); - _host_prompt_show(btn1, btn2); + void HostUI::prompt_do(const PromptReason reason, FSTR_P const fstr, const char extra_char, FSTR_P const btn1/*=nullptr*/, FSTR_P const btn2/*=nullptr*/) { + prompt_begin(reason, fstr, extra_char); + _prompt_show(btn1, btn2); } - void filament_load_host_prompt() { - const bool disable_to_continue = TERN0(HAS_FILAMENT_SENSOR, runout.filament_ran_out); - host_prompt_do(PROMPT_FILAMENT_RUNOUT, F("Paused"), F("PurgeMore"), - disable_to_continue ? F("DisableRunout") : FPSTR(CONTINUE_STR) - ); - } + #if ENABLED(ADVANCED_PAUSE_FEATURE) + void HostUI::filament_load_prompt() { + const bool disable_to_continue = TERN0(HAS_FILAMENT_SENSOR, runout.filament_ran_out); + prompt_do(PROMPT_FILAMENT_RUNOUT, F("Paused"), F("PurgeMore"), + disable_to_continue ? F("DisableRunout") : FPSTR(CONTINUE_STR) + ); + } + #endif // // Handle responses from the host, such as: @@ -141,7 +162,7 @@ void host_action(FSTR_P const fstr, const bool eol) { // - Resume Print response // - Dismissal of info // - void host_response_handler(const uint8_t response) { + void HostUI::handle_response(const uint8_t response) { const PromptReason hpr = host_prompt_reason; host_prompt_reason = PROMPT_NOT_DEFINED; // Reset now ahead of logic switch (hpr) { diff --git a/Marlin/src/feature/host_actions.h b/Marlin/src/feature/host_actions.h index fb19618b1a..6671072139 100644 --- a/Marlin/src/feature/host_actions.h +++ b/Marlin/src/feature/host_actions.h @@ -24,34 +24,13 @@ #include "../inc/MarlinConfigPre.h" #include "../HAL/shared/Marduino.h" -void host_action(FSTR_P const fstr, const bool eol=true); - -#ifdef ACTION_ON_KILL - void host_action_kill(); -#endif -#ifdef ACTION_ON_PAUSE - void host_action_pause(const bool eol=true); -#endif -#ifdef ACTION_ON_PAUSED - void host_action_paused(const bool eol=true); -#endif -#ifdef ACTION_ON_RESUME - void host_action_resume(); -#endif -#ifdef ACTION_ON_RESUMED - void host_action_resumed(); -#endif -#ifdef ACTION_ON_CANCEL - void host_action_cancel(); -#endif -#ifdef ACTION_ON_START - void host_action_start(); -#endif +typedef union { + uint8_t bits; + struct { bool info:1, errors:1, debug:1; }; +} flag_t; #if ENABLED(HOST_PROMPT_SUPPORT) - extern const char CONTINUE_STR[], DISMISS_STR[]; - enum PromptReason : uint8_t { PROMPT_NOT_DEFINED, PROMPT_FILAMENT_RUNOUT, @@ -61,21 +40,80 @@ void host_action(FSTR_P const fstr, const bool eol=true); PROMPT_INFO }; - extern PromptReason host_prompt_reason; - - void host_response_handler(const uint8_t response); - void host_action_notify(const char * const cstr); - void host_action_notify(FSTR_P const fstr); - void host_action_prompt_begin(const PromptReason reason, FSTR_P const fstr, const char extra_char='\0'); - void host_action_prompt_button(FSTR_P const fstr); - void host_action_prompt_end(); - void host_action_prompt_show(); - void host_prompt_do(const PromptReason reason, FSTR_P const fstr, FSTR_P const btn1=nullptr, FSTR_P const btn2=nullptr); - void host_prompt_do(const PromptReason reason, FSTR_P const fstr, const char extra_char, FSTR_P const btn1=nullptr, FSTR_P const btn2=nullptr); - inline void host_prompt_open(const PromptReason reason, FSTR_P const fstr, FSTR_P const btn1=nullptr, FSTR_P const btn2=nullptr) { - if (host_prompt_reason == PROMPT_NOT_DEFINED) host_prompt_do(reason, fstr, btn1, btn2); - } - - void filament_load_host_prompt(); - #endif + +class HostUI { + public: + + static flag_t flag; + HostUI() { flag.bits = 0xFF; } + + static void action(FSTR_P const fstr, const bool eol=true); + + #ifdef ACTION_ON_KILL + static void kill(); + #endif + #ifdef ACTION_ON_PAUSE + static void pause(const bool eol=true); + #endif + #ifdef ACTION_ON_PAUSED + static void paused(const bool eol=true); + #endif + #ifdef ACTION_ON_RESUME + static void resume(); + #endif + #ifdef ACTION_ON_RESUMED + static void resumed(); + #endif + #ifdef ACTION_ON_CANCEL + static void cancel(); + #endif + #ifdef ACTION_ON_START + static void start(); + #endif + + #if ENABLED(G29_RETRY_AND_RECOVER) + #ifdef ACTION_ON_G29_RECOVER + static void g29_recover(); + #endif + #ifdef ACTION_ON_G29_FAILURE + static void g29_failure(); + #endif + #endif + + #if ENABLED(HOST_PROMPT_SUPPORT) + private: + static void prompt(FSTR_P const ptype, const bool eol=true); + static void prompt_plus(FSTR_P const ptype, FSTR_P const fstr, const char extra_char='\0'); + static void prompt_show(); + static void _prompt_show(FSTR_P const btn1, FSTR_P const btn2); + + public: + static PromptReason host_prompt_reason; + + static void handle_response(const uint8_t response); + + static void notify_P(PGM_P const message); + static inline void notify(FSTR_P const fmsg) { notify_P(FTOP(fmsg)); } + static void notify(const char * const message); + + static void prompt_begin(const PromptReason reason, FSTR_P const fstr, const char extra_char='\0'); + static void prompt_button(FSTR_P const fstr); + static void prompt_end(); + static void prompt_do(const PromptReason reason, FSTR_P const pstr, FSTR_P const btn1=nullptr, FSTR_P const btn2=nullptr); + static void prompt_do(const PromptReason reason, FSTR_P const pstr, const char extra_char, FSTR_P const btn1=nullptr, FSTR_P const btn2=nullptr); + static inline void prompt_open(const PromptReason reason, FSTR_P const pstr, FSTR_P const btn1=nullptr, FSTR_P const btn2=nullptr) { + if (host_prompt_reason == PROMPT_NOT_DEFINED) prompt_do(reason, pstr, btn1, btn2); + } + + #if ENABLED(ADVANCED_PAUSE_FEATURE) + static void filament_load_prompt(); + #endif + + #endif + +}; + +extern HostUI hostui; + +extern const char CONTINUE_STR[], DISMISS_STR[]; diff --git a/Marlin/src/feature/mmu/mmu2.cpp b/Marlin/src/feature/mmu/mmu2.cpp index 56e6e6150b..2813337c63 100644 --- a/Marlin/src/feature/mmu/mmu2.cpp +++ b/Marlin/src/feature/mmu/mmu2.cpp @@ -962,7 +962,7 @@ bool MMU2::eject_filament(const uint8_t index, const bool recover) { if (recover) { LCD_MESSAGE(MSG_MMU2_EJECT_RECOVER); BUZZ(200, 404); - TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, F("MMU2 Eject Recover"), FPSTR(CONTINUE_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, F("MMU2 Eject Recover"), FPSTR(CONTINUE_STR))); TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(F("MMU2 Eject Recover"))); TERN_(HAS_RESUME_CONTINUE, wait_for_user_response()); BUZZ(200, 404); diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index 643c4ef9fc..d97ac2a0ac 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -198,7 +198,7 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load #if ENABLED(HOST_PROMPT_SUPPORT) const char tool = '0' + TERN0(MULTI_FILAMENT_SENSOR, active_extruder); - host_prompt_do(PROMPT_USER_CONTINUE, F("Load Filament T"), tool, FPSTR(CONTINUE_STR)); + hostui.prompt_do(PROMPT_USER_CONTINUE, F("Load Filament T"), tool, FPSTR(CONTINUE_STR)); #endif while (wait_for_user) { @@ -253,7 +253,7 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load if (show_lcd) ui.pause_show_message(PAUSE_MESSAGE_PURGE); TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE))); - TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE), FPSTR(CONTINUE_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE), FPSTR(CONTINUE_STR))); TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_Popup_Confirm(ICON_BLTouch, GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE), FPSTR(CONTINUE_STR))); wait_for_user = true; // A click or M108 breaks the purge_length loop for (float purge_count = purge_length; purge_count > 0 && wait_for_user; --purge_count) @@ -271,7 +271,7 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load unscaled_e_move(purge_length, ADVANCED_PAUSE_PURGE_FEEDRATE); } - TERN_(HOST_PROMPT_SUPPORT, filament_load_host_prompt()); // Initiate another host prompt. + TERN_(HOST_PROMPT_SUPPORT, hostui.filament_load_prompt()); // Initiate another host prompt. #if M600_PURGE_MORE_RESUMABLE if (show_lcd) { @@ -291,7 +291,7 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load } while (TERN0(M600_PURGE_MORE_RESUMABLE, pause_menu_response == PAUSE_RESPONSE_EXTRUDE_MORE)); #endif - TERN_(HOST_PROMPT_SUPPORT, host_action_prompt_end()); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_end()); return true; } @@ -397,13 +397,13 @@ bool pause_print(const_float_t retract, const xyz_pos_t &park_point, const bool #if ENABLED(HOST_ACTION_COMMANDS) #ifdef ACTION_ON_PAUSED - host_action_paused(); + hostui.paused(); #elif defined(ACTION_ON_PAUSE) - host_action_pause(); + hostui.pause(); #endif #endif - TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_INFO, F("Pause"), FPSTR(DISMISS_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_open(PROMPT_INFO, F("Pause"), FPSTR(DISMISS_STR))); // Indicate that the printer is paused ++did_pause_print; @@ -512,7 +512,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep // Wait for filament insert by user and press button KEEPALIVE_STATE(PAUSED_FOR_USER); - TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_NOZZLE_PARKED), FPSTR(CONTINUE_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_NOZZLE_PARKED), FPSTR(CONTINUE_STR))); TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_NOZZLE_PARKED))); wait_for_user = true; // LCD click or M108 will clear this while (wait_for_user) { @@ -528,13 +528,13 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep ui.pause_show_message(PAUSE_MESSAGE_HEAT); SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_HEAT)); - TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_HEATER_TIMEOUT), GET_TEXT_F(MSG_REHEAT))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_HEATER_TIMEOUT), GET_TEXT_F(MSG_REHEAT))); TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_HEATER_TIMEOUT))); TERN_(HAS_RESUME_CONTINUE, wait_for_user_response(0, true)); // Wait for LCD click or M108 - TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_INFO, GET_TEXT_F(MSG_REHEATING))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_INFO, GET_TEXT_F(MSG_REHEATING))); TERN_(EXTENSIBLE_UI, ExtUI::onStatusChanged(GET_TEXT_F(MSG_REHEATING))); @@ -554,7 +554,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep HOTEND_LOOP() thermalManager.heater_idle[e].start(nozzle_timeout); - TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_REHEATDONE), FPSTR(CONTINUE_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_REHEATDONE), FPSTR(CONTINUE_STR))); TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_REHEATDONE))); TERN_(DWIN_CREALITY_LCD_ENHANCED, LCD_MESSAGE(MSG_REHEATDONE)); @@ -664,14 +664,14 @@ void resume_print(const_float_t slow_load_length/*=0*/, const_float_t fast_load_ ui.pause_show_message(PAUSE_MESSAGE_STATUS); #ifdef ACTION_ON_RESUMED - host_action_resumed(); + hostui.resumed(); #elif defined(ACTION_ON_RESUME) - host_action_resume(); + hostui.resume(); #endif --did_pause_print; - TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_INFO, F("Resuming"), FPSTR(DISMISS_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_open(PROMPT_INFO, F("Resuming"), FPSTR(DISMISS_STR))); // Resume the print job timer if it was running if (print_job_timer.isPaused()) print_job_timer.start(); diff --git a/Marlin/src/feature/runout.cpp b/Marlin/src/feature/runout.cpp index e53c229e70..9317e3489a 100644 --- a/Marlin/src/feature/runout.cpp +++ b/Marlin/src/feature/runout.cpp @@ -96,8 +96,7 @@ void event_filament_runout(const uint8_t extruder) { //action:out_of_filament #if ENABLED(HOST_PROMPT_SUPPORT) - host_action_prompt_begin(PROMPT_FILAMENT_RUNOUT, F("FilamentRunout T"), tool); - host_action_prompt_show(); + hostui.prompt_do(PROMPT_FILAMENT_RUNOUT, F("FilamentRunout T"), tool); //action:out_of_filament #endif const bool run_runout_script = !runout.host_handling; @@ -109,18 +108,18 @@ void event_filament_runout(const uint8_t extruder) { || TERN0(ADVANCED_PAUSE_FEATURE, strstr(FILAMENT_RUNOUT_SCRIPT, "M25")) ) ) { - host_action_paused(false); + hostui.paused(false); } else { // Legacy Repetier command for use until newer version supports standard dialog // To be removed later when pause command also triggers dialog #ifdef ACTION_ON_FILAMENT_RUNOUT - host_action(F(ACTION_ON_FILAMENT_RUNOUT " T"), false); + hostui.action(F(ACTION_ON_FILAMENT_RUNOUT " T"), false); SERIAL_CHAR(tool); SERIAL_EOL(); #endif - host_action_pause(false); + hostui.pause(false); } SERIAL_ECHOPGM(" " ACTION_REASON_ON_FILAMENT_RUNOUT " "); SERIAL_CHAR(tool); diff --git a/Marlin/src/gcode/config/M43.cpp b/Marlin/src/gcode/config/M43.cpp index 2c778fd006..097aa142f0 100644 --- a/Marlin/src/gcode/config/M43.cpp +++ b/Marlin/src/gcode/config/M43.cpp @@ -344,7 +344,7 @@ void GcodeSuite::M43() { #if HAS_RESUME_CONTINUE KEEPALIVE_STATE(PAUSED_FOR_USER); wait_for_user = true; - TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, F("M43 Wait Called"), FPSTR(CONTINUE_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, F("M43 Wait Called"), FPSTR(CONTINUE_STR))); TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(F("M43 Wait Called"))); #endif diff --git a/Marlin/src/gcode/control/M111.cpp b/Marlin/src/gcode/control/M111.cpp index 69d20b4c5d..08c39b762e 100644 --- a/Marlin/src/gcode/control/M111.cpp +++ b/Marlin/src/gcode/control/M111.cpp @@ -26,7 +26,7 @@ * M111: Set the debug level */ void GcodeSuite::M111() { - if (parser.seen('S')) marlin_debug_flags = parser.byteval('S'); + if (parser.seenval('S')) marlin_debug_flags = parser.value_byte(); static PGMSTR(str_debug_1, STR_DEBUG_ECHO); static PGMSTR(str_debug_2, STR_DEBUG_INFO); diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 1bfb82622e..5a030e97ab 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -237,9 +237,9 @@ void GcodeSuite::dwell(millis_t time) { #if ENABLED(G29_RETRY_AND_RECOVER) void GcodeSuite::event_probe_recover() { - TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_INFO, F("G29 Retrying"), FPSTR(DISMISS_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_INFO, F("G29 Retrying"), FPSTR(DISMISS_STR))); #ifdef ACTION_ON_G29_RECOVER - host_action(F(ACTION_ON_G29_RECOVER)); + hostui.g29_recover(); #endif #ifdef G29_RECOVER_COMMANDS process_subcommands_now(F(G29_RECOVER_COMMANDS)); @@ -252,14 +252,14 @@ void GcodeSuite::dwell(millis_t time) { void GcodeSuite::event_probe_failure() { #ifdef ACTION_ON_G29_FAILURE - host_action(F(ACTION_ON_G29_FAILURE)); + hostui.g29_failure(); #endif #ifdef G29_FAILURE_COMMANDS process_subcommands_now(F(G29_FAILURE_COMMANDS)); #endif #if ENABLED(G29_HALT_ON_FAILURE) #ifdef ACTION_ON_CANCEL - host_action_cancel(); + hostui.cancel(); #endif kill(GET_TEXT_F(MSG_LCD_PROBING_FAILED)); #endif @@ -282,7 +282,7 @@ void GcodeSuite::dwell(millis_t time) { } } - TERN_(HOST_PROMPT_SUPPORT, host_action_prompt_end()); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_end()); #ifdef G29_SUCCESS_COMMANDS process_subcommands_now(F(G29_SUCCESS_COMMANDS)); diff --git a/Marlin/src/gcode/host/M876.cpp b/Marlin/src/gcode/host/M876.cpp index 00efb013d2..49994f44e6 100644 --- a/Marlin/src/gcode/host/M876.cpp +++ b/Marlin/src/gcode/host/M876.cpp @@ -33,7 +33,7 @@ */ void GcodeSuite::M876() { - if (parser.seenval('S')) host_response_handler((uint8_t)parser.value_int()); + if (parser.seenval('S')) hostui.handle_response((uint8_t)parser.value_int()); } diff --git a/Marlin/src/gcode/lcd/M0_M1.cpp b/Marlin/src/gcode/lcd/M0_M1.cpp index 239366fec8..6e3b84c020 100644 --- a/Marlin/src/gcode/lcd/M0_M1.cpp +++ b/Marlin/src/gcode/lcd/M0_M1.cpp @@ -84,7 +84,7 @@ void GcodeSuite::M0_M1() { #endif - TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, parser.codenum ? F("M1 Stop") : F("M0 Stop"), FPSTR(CONTINUE_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, parser.codenum ? F("M1 Stop") : F("M0 Stop"), FPSTR(CONTINUE_STR))); TERN_(HAS_RESUME_CONTINUE, wait_for_user_response(ms)); diff --git a/Marlin/src/gcode/sd/M1001.cpp b/Marlin/src/gcode/sd/M1001.cpp index 374b100f59..417f3747c1 100644 --- a/Marlin/src/gcode/sd/M1001.cpp +++ b/Marlin/src/gcode/sd/M1001.cpp @@ -97,7 +97,7 @@ void GcodeSuite::M1001() { if (long_print) { printerEventLEDs.onPrintCompleted(); TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_PRINT_DONE))); - TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_PRINT_DONE), FPSTR(CONTINUE_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_PRINT_DONE), FPSTR(CONTINUE_STR))); TERN_(HAS_RESUME_CONTINUE, wait_for_user_response(SEC_TO_MS(TERN(HAS_LCD_MENU, PE_LEDS_COMPLETED_TIME, 30)))); printerEventLEDs.onResumeAfterWait(); } diff --git a/Marlin/src/gcode/sd/M24_M25.cpp b/Marlin/src/gcode/sd/M24_M25.cpp index 21e43b033e..64ac0cce09 100644 --- a/Marlin/src/gcode/sd/M24_M25.cpp +++ b/Marlin/src/gcode/sd/M24_M25.cpp @@ -77,9 +77,9 @@ void GcodeSuite::M24() { #if ENABLED(HOST_ACTION_COMMANDS) #ifdef ACTION_ON_RESUME - host_action_resume(); + hostui.resume(); #endif - TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_INFO, F("Resuming SD"), FPSTR(DISMISS_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_open(PROMPT_INFO, F("Resuming SD"), FPSTR(DISMISS_STR))); #endif ui.reset_status(); @@ -116,9 +116,9 @@ void GcodeSuite::M25() { IF_DISABLED(DWIN_CREALITY_LCD, ui.reset_status()); #if ENABLED(HOST_ACTION_COMMANDS) - TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_PAUSE_RESUME, F("Pause SD"), F("Resume"))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_open(PROMPT_PAUSE_RESUME, F("Pause SD"), F("Resume"))); #ifdef ACTION_ON_PAUSE - host_action_pause(); + hostui.pause(); #endif #endif diff --git a/Marlin/src/gcode/stats/M75-M78.cpp b/Marlin/src/gcode/stats/M75-M78.cpp index b55409946e..7d16899fd3 100644 --- a/Marlin/src/gcode/stats/M75-M78.cpp +++ b/Marlin/src/gcode/stats/M75-M78.cpp @@ -49,7 +49,7 @@ void GcodeSuite::M75() { */ void GcodeSuite::M76() { print_job_timer.pause(); - TERN_(HOST_PAUSE_M76, host_action_pause()); + TERN_(HOST_PAUSE_M76, hostui.pause()); } /** diff --git a/Marlin/src/lcd/e3v2/creality/dwin.cpp b/Marlin/src/lcd/e3v2/creality/dwin.cpp index d5abe977e5..3326ccb1f3 100644 --- a/Marlin/src/lcd/e3v2/creality/dwin.cpp +++ b/Marlin/src/lcd/e3v2/creality/dwin.cpp @@ -2363,7 +2363,7 @@ void HMI_PauseOrStop() { card.abortFilePrintSoon(); // Let the main loop handle SD abort dwin_abort_flag = true; // Reset feedrate, return to Home #ifdef ACTION_ON_CANCEL - host_action_cancel(); + hostui.cancel(); #endif Popup_Window_Home(true); if (HMI_flag.home_flag) planner.synchronize(); // Wait for planner moves to finish! diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index 4035a78c93..f9f2da5a4c 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -1391,7 +1391,7 @@ void HMI_PauseOrStop() { card.abortFilePrintSoon(); // Let the main loop handle SD abort dwin_abort_flag = true; // Reset feedrate, return to Home #ifdef ACTION_ON_CANCEL - host_action_cancel(); + hostui.cancel(); #endif DWIN_Draw_Popup(ICON_BLTouch, F("Stopping...") , F("Please wait until done.")); } diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp index 9bb324b05e..6fe3db438d 100644 --- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp @@ -4503,7 +4503,7 @@ void CrealityDWINClass::Print_Screen_Control() { #endif } else { - TERN_(HOST_ACTION_COMMANDS, host_action_resume()); + TERN_(HOST_ACTION_COMMANDS, hostui.resume()); } Draw_Print_Screen(); } @@ -4553,7 +4553,7 @@ void CrealityDWINClass::Popup_Control() { #endif } else { - TERN_(HOST_ACTION_COMMANDS, host_action_pause()); + TERN_(HOST_ACTION_COMMANDS, hostui.pause()); } } Draw_Print_Screen(); @@ -4566,7 +4566,7 @@ void CrealityDWINClass::Popup_Control() { thermalManager.disable_all_heaters(); } else { - TERN_(HOST_ACTION_COMMANDS, host_action_cancel()); + TERN_(HOST_ACTION_COMMANDS, hostui.cancel()); } } else 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 0db063b70c..00b2d6a094 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 @@ -242,7 +242,7 @@ bool StatusScreen::onTouchEnd(uint8_t tag) { if (ExtUI::isPrintingFromMedia()) ExtUI::pausePrint(); #ifdef ACTION_ON_PAUSE - else host_action_pause(); + else hostui.pause(); #endif GOTO_SCREEN(StatusScreen); break; @@ -251,7 +251,7 @@ bool StatusScreen::onTouchEnd(uint8_t tag) { if (ExtUI::isPrintingFromMedia()) ExtUI::resumePrint(); #ifdef ACTION_ON_RESUME - else host_action_resume(); + else hostui.resume(); #endif GOTO_SCREEN(StatusScreen); break; diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/confirm_abort_print_dialog_box.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/confirm_abort_print_dialog_box.cpp index 02e48efa01..bf4aa74375 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/confirm_abort_print_dialog_box.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/confirm_abort_print_dialog_box.cpp @@ -41,7 +41,7 @@ bool ConfirmAbortPrintDialogBox::onTouchEnd(uint8_t tag) { if (ExtUI::isPrintingFromMedia()) ExtUI::stopPrint(); #ifdef ACTION_ON_CANCEL - else host_action_cancel(); + else hostui.cancel(); #endif return true; default: diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/tune_menu.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/tune_menu.cpp index 6f4beb6673..98150ceccb 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/tune_menu.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/tune_menu.cpp @@ -138,7 +138,7 @@ void TuneMenu::pausePrint() { if (ExtUI::isPrintingFromMedia()) ExtUI::pausePrint(); #ifdef ACTION_ON_PAUSE - else host_action_pause(); + else hostui.pause(); #endif GOTO_SCREEN(StatusScreen); } @@ -150,7 +150,7 @@ void TuneMenu::resumePrint() { else if (ExtUI::isPrintingFromMedia()) ExtUI::resumePrint(); #ifdef ACTION_ON_RESUME - else host_action_resume(); + else hostui.resume(); #endif GOTO_SCREEN(StatusScreen); } diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index 8e588ef8c2..72dab6f35e 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -918,7 +918,7 @@ namespace ExtUI { #endif // HAS_LEVELING #if ENABLED(HOST_PROMPT_SUPPORT) - void setHostResponse(const uint8_t response) { host_response_handler(response); } + void setHostResponse(const uint8_t response) { hostui.handle_response(response); } #endif #if ENABLED(PRINTCOUNTER) diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 83be7fd1a8..ae169cdab6 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -1355,7 +1355,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; void MarlinUI::set_status(const char * const cstr, const bool persist) { if (alert_level) return; - TERN_(HOST_PROMPT_SUPPORT, host_action_notify(cstr)); + TERN_(HOST_PROMPT_SUPPORT, hostui.notify(cstr)); // Here we have a problem. The message is encoded in UTF8, so // arbitrarily cutting it will be a problem. We MUST be sure @@ -1427,7 +1427,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; if (level < alert_level) return; alert_level = level; - TERN_(HOST_PROMPT_SUPPORT, host_action_notify(fstr)); + TERN_(HOST_PROMPT_SUPPORT, hostui.notify(fstr)); // Since the message is encoded in UTF8 it must // only be cut on a character boundary. @@ -1533,10 +1533,10 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; card.abortFilePrintSoon(); #endif #ifdef ACTION_ON_CANCEL - host_action_cancel(); + hostui.cancel(); #endif IF_DISABLED(SDSUPPORT, print_job_timer.stop()); - TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_INFO, F("UI Aborted"), FPSTR(DISMISS_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_open(PROMPT_INFO, F("UI Aborted"), FPSTR(DISMISS_STR))); LCD_MESSAGE(MSG_PRINT_ABORTED); TERN_(HAS_LCD_MENU, return_to_status()); } @@ -1565,7 +1565,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; #endif TERN_(HAS_TOUCH_SLEEP, wakeup_screen()); - TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_PAUSE_RESUME, F("UI Pause"), F("Resume"))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_open(PROMPT_PAUSE_RESUME, F("UI Pause"), F("Resume"))); LCD_MESSAGE(MSG_PRINT_PAUSED); @@ -1575,7 +1575,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; #elif ENABLED(SDSUPPORT) queue.inject(F("M25")); #elif defined(ACTION_ON_PAUSE) - host_action_pause(); + hostui.pause(); #endif } @@ -1584,7 +1584,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; TERN_(PARK_HEAD_ON_PAUSE, wait_for_heatup = wait_for_user = false); TERN_(SDSUPPORT, if (IS_SD_PAUSED()) queue.inject_P(M24_STR)); #ifdef ACTION_ON_RESUME - host_action_resume(); + hostui.resume(); #endif print_job_timer.start(); // Also called by M24 } @@ -1639,13 +1639,13 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; // Send the status line as a host notification // void MarlinUI::set_status(const char * const cstr, const bool) { - TERN(HOST_PROMPT_SUPPORT, host_action_notify(cstr), UNUSED(cstr)); + TERN(HOST_PROMPT_SUPPORT, hostui.notify(cstr), UNUSED(cstr)); } void MarlinUI::set_status(FSTR_P const fstr, const int8_t) { - TERN(HOST_PROMPT_SUPPORT, host_action_notify(fstr), UNUSED(fstr)); + TERN(HOST_PROMPT_SUPPORT, hostui.notify(fstr), UNUSED(fstr)); } void MarlinUI::status_printf(const uint8_t, FSTR_P const fstr, ...) { - TERN(HOST_PROMPT_SUPPORT, host_action_notify(fstr), UNUSED(fstr)); + TERN(HOST_PROMPT_SUPPORT, hostui.notify(fstr), UNUSED(fstr)); } #endif // !HAS_DISPLAY && !HAS_STATUS_MESSAGE diff --git a/Marlin/src/lcd/menu/menu_delta_calibrate.cpp b/Marlin/src/lcd/menu/menu_delta_calibrate.cpp index 95103e9bf6..ea627f69e7 100644 --- a/Marlin/src/lcd/menu/menu_delta_calibrate.cpp +++ b/Marlin/src/lcd/menu/menu_delta_calibrate.cpp @@ -58,13 +58,13 @@ void _man_probe_pt(const xy_pos_t &xy) { #include "../../MarlinCore.h" // for wait_for_user_response() #endif #if ENABLED(HOST_PROMPT_SUPPORT) - #include "../../feature/host_actions.h" // for host_prompt_do + #include "../../feature/host_actions.h" // for hostui.prompt_do #endif float lcd_probe_pt(const xy_pos_t &xy) { _man_probe_pt(xy); ui.defer_status_screen(); - TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, F("Delta Calibration in progress"), FPSTR(CONTINUE_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, F("Delta Calibration in progress"), FPSTR(CONTINUE_STR))); TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(F("Delta Calibration in progress"))); TERN_(HAS_RESUME_CONTINUE, wait_for_user_response()); ui.goto_previous_screen_no_defer(); diff --git a/Marlin/src/lcd/menu/menu_main.cpp b/Marlin/src/lcd/menu/menu_main.cpp index f39e008cd7..172f9daf7a 100644 --- a/Marlin/src/lcd/menu/menu_main.cpp +++ b/Marlin/src/lcd/menu/menu_main.cpp @@ -301,7 +301,7 @@ void menu_main() { ACTION_ITEM(MSG_RESUME_PRINT, ui.resume_print); #if ENABLED(HOST_START_MENU_ITEM) && defined(ACTION_ON_START) - ACTION_ITEM(MSG_HOST_START_PRINT, host_action_start); + ACTION_ITEM(MSG_HOST_START_PRINT, hostui.start); #endif #if ENABLED(PREHEAT_SHORTCUT_MENU_ITEM) diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 4078effe76..d9e52a9b43 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -140,7 +140,7 @@ xyz_pos_t Probe::offset; // Initialized by settings.load() LCD_MESSAGE(MSG_MANUAL_DEPLOY_TOUCHMI); ui.return_to_status(); - TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, F("Deploy TouchMI"), FPSTR(CONTINUE_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, F("Deploy TouchMI"), FPSTR(CONTINUE_STR))); TERN_(HAS_RESUME_CONTINUE, wait_for_user_response()); ui.reset_status(); ui.goto_screen(prev_screen); @@ -295,7 +295,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) { ui.set_status(ds_str, 99); SERIAL_ECHOLNF(ds_str); - TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, F("Stow Probe"), FPSTR(CONTINUE_STR))); + TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, F("Stow Probe"), FPSTR(CONTINUE_STR))); TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(F("Stow Probe"))); TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_Popup_Confirm(ICON_BLTouch, F("Stow Probe"), FPSTR(CONTINUE_STR))); TERN_(HAS_RESUME_CONTINUE, wait_for_user_response()); From 95662d3aed0a31ea832407c042a5b0c56cd8a2db Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Fri, 15 Oct 2021 15:56:59 -0400 Subject: [PATCH 006/532] =?UTF-8?q?=E2=9C=A8=20Add=20option=20EVENT=5FGCOD?= =?UTF-8?q?E=5FTOOLCHANGE=5FALWAYS=5FRUN=20(#22960)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 1 + Marlin/src/module/tool_change.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 8e1f673c87..9d119eac84 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -2313,6 +2313,7 @@ */ //#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! /** * Tool Sensors detect when tools have been picked up or dropped. diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp index b968537e71..81d85573af 100644 --- a/Marlin/src/module/tool_change.cpp +++ b/Marlin/src/module/tool_change.cpp @@ -1307,7 +1307,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) { TERN_(HAS_FANMUX, fanmux_switch(active_extruder)); - if (!no_move) { + 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)); From 9d72cbf84b970e5060f8dceef7158b9ca8252856 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 15 Oct 2021 15:07:47 -0500 Subject: [PATCH 007/532] =?UTF-8?q?=F0=9F=92=A1=20Update=20old=20gnu.org?= =?UTF-8?q?=20links?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/marlinui/lcdprint_dwin.cpp | 2 +- Marlin/src/lcd/e3v2/marlinui/marlinui_dwin.h | 2 +- Marlin/src/lcd/e3v2/marlinui/ui_common.cpp | 2 +- Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp | 2 +- Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp | 2 +- Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h | 2 +- Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp | 2 +- Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.h | 2 +- Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp | 2 +- Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h | 2 +- Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp | 2 +- Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.h | 2 +- Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp | 2 +- Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h | 2 +- Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h | 2 +- Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Constants.h | 2 +- Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Control.h | 2 +- Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Data.h | 2 +- Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Screen.h | 2 +- .../lcd/extui/dgus_reloaded/definition/DGUS_ScreenAddrList.cpp | 2 +- .../lcd/extui/dgus_reloaded/definition/DGUS_ScreenAddrList.h | 2 +- .../src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenSetup.cpp | 2 +- .../src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenSetup.h | 2 +- Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VP.h | 2 +- Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp | 2 +- Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.h | 2 +- Marlin/src/lcd/extui/dgus_reloaded/dgus_reloaded_extui.cpp | 2 +- Marlin/src/pins/stm32f1/pins_ZM3E2_V1_0.h | 2 +- Marlin/src/pins/stm32f1/pins_ZM3E4_V1_0.h | 2 +- Marlin/src/pins/stm32f1/pins_ZM3E4_V2_0.h | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/Marlin/src/lcd/e3v2/marlinui/lcdprint_dwin.cpp b/Marlin/src/lcd/e3v2/marlinui/lcdprint_dwin.cpp index 5f62459534..44be749d41 100644 --- a/Marlin/src/lcd/e3v2/marlinui/lcdprint_dwin.cpp +++ b/Marlin/src/lcd/e3v2/marlinui/lcdprint_dwin.cpp @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ diff --git a/Marlin/src/lcd/e3v2/marlinui/marlinui_dwin.h b/Marlin/src/lcd/e3v2/marlinui/marlinui_dwin.h index de87c30b6b..a91cd19f6e 100644 --- a/Marlin/src/lcd/e3v2/marlinui/marlinui_dwin.h +++ b/Marlin/src/lcd/e3v2/marlinui/marlinui_dwin.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once diff --git a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp index 8648401c9c..126700185b 100644 --- a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp +++ b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ diff --git a/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp b/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp index 0e2f3a3d4c..703db2ee45 100644 --- a/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp +++ b/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp index 4fce364f81..1d97902c71 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h index 2a679648d1..1869f79404 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp index 58c7baa0b6..f0844dc785 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.h index 593b2e3bb8..c2e6e4308e 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp index e81eab8e73..9bae2b95d3 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h index 4a5fbd141a..509d599200 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp index 6ab2b004e5..090d53c92e 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.h index 20cd48c986..9e3866467f 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp index 6c14745904..3fc48d2ebb 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h index a034b92ece..94632fe385 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once 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 00cdecb689..4207119c87 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once 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 4047a6d6dc..9b275fb2f5 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Constants.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Constants.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once diff --git a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Control.h b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Control.h index 92d2f5ece2..650e1e3a1d 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Control.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Control.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once diff --git a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Data.h b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Data.h index 886109054c..e1c1bf557f 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Data.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Data.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once diff --git a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Screen.h b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Screen.h index b3d2ad6d3c..0a738223ce 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Screen.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Screen.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once 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 95e6444956..1627d44c84 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenAddrList.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenAddrList.cpp @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ diff --git a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenAddrList.h b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenAddrList.h index af05c46d28..1e481ef3cc 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenAddrList.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenAddrList.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once diff --git a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenSetup.cpp b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenSetup.cpp index 213e430334..13319edd05 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenSetup.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenSetup.cpp @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ diff --git a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenSetup.h b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenSetup.h index 3b9208e5ec..93df5ad90a 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenSetup.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_ScreenSetup.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once diff --git a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VP.h b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VP.h index b1b6792224..30b3f9ddba 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VP.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VP.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once 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 486f00f6ed..27b6d9036c 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ diff --git a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.h b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.h index d481fbab5c..1a4f36882c 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once 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 bf79661b42..61b072a3f7 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/dgus_reloaded_extui.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/dgus_reloaded_extui.cpp @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ diff --git a/Marlin/src/pins/stm32f1/pins_ZM3E2_V1_0.h b/Marlin/src/pins/stm32f1/pins_ZM3E2_V1_0.h index d4f77d5f84..ba948bc479 100644 --- a/Marlin/src/pins/stm32f1/pins_ZM3E2_V1_0.h +++ b/Marlin/src/pins/stm32f1/pins_ZM3E2_V1_0.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once diff --git a/Marlin/src/pins/stm32f1/pins_ZM3E4_V1_0.h b/Marlin/src/pins/stm32f1/pins_ZM3E4_V1_0.h index ca6510c7d9..49e9564b27 100644 --- a/Marlin/src/pins/stm32f1/pins_ZM3E4_V1_0.h +++ b/Marlin/src/pins/stm32f1/pins_ZM3E4_V1_0.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once diff --git a/Marlin/src/pins/stm32f1/pins_ZM3E4_V2_0.h b/Marlin/src/pins/stm32f1/pins_ZM3E4_V2_0.h index 817ad71752..295ab4c50c 100644 --- a/Marlin/src/pins/stm32f1/pins_ZM3E4_V2_0.h +++ b/Marlin/src/pins/stm32f1/pins_ZM3E4_V2_0.h @@ -16,7 +16,7 @@ * 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 . + * along with this program. If not, see . * */ #pragma once From babb3d7b4ce49fdca215bab857039e7132dfadbd Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 16 Oct 2021 01:07:57 +0000 Subject: [PATCH 008/532] [cron] Bump distribution date (2021-10-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 cb13c11a22..88550591a9 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 "2021-10-15" +//#define STRING_DISTRIBUTION_DATE "2021-10-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 d6176599f0..965cc112e6 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 "2021-10-15" + #define STRING_DISTRIBUTION_DATE "2021-10-16" #endif /** From 3c94f2f1c33395e45f3b2456f97eb64310b41000 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 17 Oct 2021 01:02:43 +0000 Subject: [PATCH 009/532] [cron] Bump distribution date (2021-10-17) --- 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 88550591a9..efafaf83f7 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 "2021-10-16" +//#define STRING_DISTRIBUTION_DATE "2021-10-17" /** * 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 965cc112e6..6b67bee326 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 "2021-10-16" + #define STRING_DISTRIBUTION_DATE "2021-10-17" #endif /** From bc567e7b4939f3abb75a72c313824e6abf0fb07c Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 17 Oct 2021 16:56:01 -0500 Subject: [PATCH 010/532] =?UTF-8?q?=F0=9F=94=A7=20Safety=20feature=20warni?= =?UTF-8?q?ngs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Warnings.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index 0e04cdd435..e5e9d57fc6 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -35,6 +35,23 @@ #warning "WARNING! Disable MARLIN_DEV_MODE for the final build!" #endif +// Safety Features +#if DISABLED(USE_WATCHDOG) + #warning "Safety Alert! Enable USE_WATCHDOG for the final build!" +#endif +#if HAS_HOTEND && DISABLED(THERMAL_PROTECTION_HOTENDS) + #warning "Safety Alert! Enable THERMAL_PROTECTION_HOTENDS for the final build!" +#endif +#if HAS_HEATED_BED && DISABLED(THERMAL_PROTECTION_BED) + #warning "Safety Alert! Enable THERMAL_PROTECTION_BED for the final build!" +#endif +#if HAS_HEATED_CHAMBER && DISABLED(THERMAL_PROTECTION_CHAMBER) + #warning "Safety Alert! Enable THERMAL_PROTECTION_CHAMBER for the final build!" +#endif +#if HAS_COOLER && DISABLED(THERMAL_PROTECTION_COOLER) + #warning "Safety Alert! Enable THERMAL_PROTECTION_COOLER for the final build!" +#endif + #if NONE(HAS_RESUME_CONTINUE, HOST_PROMPT_SUPPORT) #warning "Your Configuration provides no method to acquire user feedback!" #endif From cd0ee8c34dab5393d7b7c7845e553a02dfd6d2da Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 18 Oct 2021 01:06:10 +0000 Subject: [PATCH 011/532] [cron] Bump distribution date (2021-10-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 efafaf83f7..f0f467ba58 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 "2021-10-17" +//#define STRING_DISTRIBUTION_DATE "2021-10-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 6b67bee326..6341981970 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 "2021-10-17" + #define STRING_DISTRIBUTION_DATE "2021-10-18" #endif /** From 7d16f0cadf12ed9c662d47af96daad6fe8e07d9e Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 17 Oct 2021 19:26:31 -0500 Subject: [PATCH 012/532] =?UTF-8?q?=F0=9F=94=A8=20Improve=20'mftest'=20err?= =?UTF-8?q?or=20message?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/bin/mftest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildroot/bin/mftest b/buildroot/bin/mftest index 4ed1b9d951..9a58ba9cfc 100755 --- a/buildroot/bin/mftest +++ b/buildroot/bin/mftest @@ -155,7 +155,7 @@ if ((AUTO_BUILD)); then BLINE=$( grep -E "define\s+BOARD_$MB\b" Marlin/src/core/boards.h ) BNUM=$( $SED -E 's/^.+BOARD_[^ ]+ +([0-9]+).+$/\1/' <<<"$BLINE" ) BDESC=$( $SED -E 's/^.+\/\/ *(.+)$/\1/' <<<"$BLINE" ) - [[ -z $BNUM ]] && { echo "Error - Can't find $MB in boards list." ; exit 1 ; } + [[ -z $BNUM ]] && { echo "Error - Can't find BOARD_$MB in core/boards.h." ; exit 1 ; } ENVS=( $( grep -EA1 "MB\(.*\b$MB\b.*\)" Marlin/src/pins/pins.h | grep -E "#include.+//.+(env|$SYS):[^ ]+" | grep -oE "(env|$SYS):[^ ]+" | $SED -E "s/(env|$SYS)://" ) ) [[ -z $ENVS ]] && { errout "Error - Can't find target(s) for $MB ($BNUM)." ; exit 1 ; } ECOUNT=${#ENVS[*]} From d685cbd5c304e8e3f3b86960e616c6b797ae85bd Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 17 Oct 2021 18:11:16 -0500 Subject: [PATCH 013/532] =?UTF-8?q?=F0=9F=8E=A8=20Fix=20up=20MKS=20UI=20de?= =?UTF-8?q?fines?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mks_ui/draw_acceleration_settings.cpp | 41 ++++++++++----- .../extui/mks_ui/draw_advance_settings.cpp | 2 +- .../draw_auto_level_offset_settings.cpp | 2 +- .../lcd/extui/mks_ui/draw_baby_stepping.cpp | 50 +++++++++---------- .../lcd/extui/mks_ui/draw_eeprom_settings.cpp | 2 +- .../extui/mks_ui/draw_encoder_settings.cpp | 2 +- .../extui/mks_ui/draw_filament_settings.cpp | 2 +- Marlin/src/lcd/extui/mks_ui/draw_gcode.cpp | 2 +- .../draw_homing_sensitivity_settings.cpp | 2 +- .../lcd/extui/mks_ui/draw_jerk_settings.cpp | 2 +- Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp | 20 ++++---- .../lcd/extui/mks_ui/draw_level_settings.cpp | 2 +- .../lcd/extui/mks_ui/draw_machine_para.cpp | 2 +- .../extui/mks_ui/draw_machine_settings.cpp | 32 +++++------- .../mks_ui/draw_max_feedrate_settings.cpp | 2 +- .../lcd/extui/mks_ui/draw_motor_settings.cpp | 2 +- .../lcd/extui/mks_ui/draw_pause_position.cpp | 2 +- Marlin/src/lcd/extui/mks_ui/draw_preHeat.cpp | 2 +- .../lcd/extui/mks_ui/draw_step_settings.cpp | 2 +- .../mks_ui/draw_tmc_current_settings.cpp | 22 +++----- .../mks_ui/draw_tmc_step_mode_settings.cpp | 2 +- .../mks_ui/draw_tramming_pos_settings.cpp | 4 +- Marlin/src/lcd/extui/mks_ui/draw_ui.cpp | 28 +++++------ Marlin/src/lcd/extui/mks_ui/draw_ui.h | 15 +++--- .../lcd/extui/mks_ui/draw_wifi_settings.cpp | 2 +- Marlin/src/lcd/extui/mks_ui/wifi_module.cpp | 6 +-- 26 files changed, 123 insertions(+), 129 deletions(-) diff --git a/Marlin/src/lcd/extui/mks_ui/draw_acceleration_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_acceleration_settings.cpp index 5de4a13c88..ac7d6d3dfb 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_acceleration_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_acceleration_settings.cpp @@ -110,38 +110,53 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { void lv_draw_acceleration_settings() { scr = lv_screen_create(ACCELERATION_UI, machine_menu.AccelerationConfTitle); + lv_coord_t y = PARA_UI_POS_Y; if (!uiCfg.para_ui_page) { dtostrf(planner.settings.acceleration, 1, 1, public_buf_l); - lv_screen_menu_item_1_edit(scr, machine_menu.PrintAcceleration, PARA_UI_POS_X, PARA_UI_POS_Y, event_handler, ID_ACCE_PRINT, 0, public_buf_l); + lv_screen_menu_item_1_edit(scr, machine_menu.PrintAcceleration, PARA_UI_POS_X, y, event_handler, ID_ACCE_PRINT, 0, public_buf_l); + y += PARA_UI_POS_Y; dtostrf(planner.settings.retract_acceleration, 1, 1, public_buf_l); - lv_screen_menu_item_1_edit(scr, machine_menu.RetractAcceleration, PARA_UI_POS_X, PARA_UI_POS_Y * 2, event_handler, ID_ACCE_RETRA, 1, public_buf_l); + lv_screen_menu_item_1_edit(scr, machine_menu.RetractAcceleration, PARA_UI_POS_X, y, event_handler, ID_ACCE_RETRA, 1, public_buf_l); + y += PARA_UI_POS_Y; dtostrf(planner.settings.travel_acceleration, 1, 1, public_buf_l); - lv_screen_menu_item_1_edit(scr, machine_menu.TravelAcceleration, PARA_UI_POS_X, PARA_UI_POS_Y * 3, event_handler, ID_ACCE_TRAVEL, 2, public_buf_l); + lv_screen_menu_item_1_edit(scr, machine_menu.TravelAcceleration, PARA_UI_POS_X, y, event_handler, ID_ACCE_TRAVEL, 2, public_buf_l); + y += PARA_UI_POS_Y; itoa(planner.settings.max_acceleration_mm_per_s2[X_AXIS], public_buf_l, 10); - lv_screen_menu_item_1_edit(scr, machine_menu.X_Acceleration, PARA_UI_POS_X, PARA_UI_POS_Y * 4, event_handler, ID_ACCE_X, 3, public_buf_l); + lv_screen_menu_item_1_edit(scr, machine_menu.X_Acceleration, PARA_UI_POS_X, y, event_handler, ID_ACCE_X, 3, public_buf_l); lv_big_button_create(scr, "F:/bmp_back70x40.bin", machine_menu.next, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y, event_handler, ID_ACCE_DOWN, true); } else { - itoa(planner.settings.max_acceleration_mm_per_s2[Y_AXIS], public_buf_l, 10); - lv_screen_menu_item_1_edit(scr, machine_menu.Y_Acceleration, PARA_UI_POS_X, PARA_UI_POS_Y, event_handler, ID_ACCE_Y, 0, public_buf_l); + #if HAS_Y_AXIS + itoa(planner.settings.max_acceleration_mm_per_s2[Y_AXIS], public_buf_l, 10); + lv_screen_menu_item_1_edit(scr, machine_menu.Y_Acceleration, PARA_UI_POS_X, y, event_handler, ID_ACCE_Y, 0, public_buf_l); + #endif - itoa(planner.settings.max_acceleration_mm_per_s2[Z_AXIS], public_buf_l, 10); - lv_screen_menu_item_1_edit(scr, machine_menu.Z_Acceleration, PARA_UI_POS_X, PARA_UI_POS_Y * 2, event_handler, ID_ACCE_Z, 1, public_buf_l); + #if HAS_Z_AXIS + y += PARA_UI_POS_Y; + itoa(planner.settings.max_acceleration_mm_per_s2[Z_AXIS], public_buf_l, 10); + lv_screen_menu_item_1_edit(scr, machine_menu.Z_Acceleration, PARA_UI_POS_X, y, event_handler, ID_ACCE_Z, 1, public_buf_l); + #endif - itoa(planner.settings.max_acceleration_mm_per_s2[E_AXIS], public_buf_l, 10); - lv_screen_menu_item_1_edit(scr, machine_menu.E0_Acceleration, PARA_UI_POS_X, PARA_UI_POS_Y * 3, event_handler, ID_ACCE_E0, 2, public_buf_l); + #if HAS_HOTEND + y += PARA_UI_POS_Y; + itoa(planner.settings.max_acceleration_mm_per_s2[E_AXIS], public_buf_l, 10); + lv_screen_menu_item_1_edit(scr, machine_menu.E0_Acceleration, PARA_UI_POS_X, y, event_handler, ID_ACCE_E0, 2, public_buf_l); + #endif - itoa(planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(1)], public_buf_l, 10); - lv_screen_menu_item_1_edit(scr, machine_menu.E1_Acceleration, PARA_UI_POS_X, PARA_UI_POS_Y * 4, event_handler, ID_ACCE_E1, 3, public_buf_l); + #if ENABLED(DISTINCT_E_FACTORS) + y += PARA_UI_POS_Y; + itoa(planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(1)], public_buf_l, 10); + lv_screen_menu_item_1_edit(scr, machine_menu.E1_Acceleration, PARA_UI_POS_X, y, event_handler, ID_ACCE_E1, 3, public_buf_l); + #endif lv_big_button_create(scr, "F:/bmp_back70x40.bin", machine_menu.previous, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y, event_handler, ID_ACCE_UP, true); } - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y, event_handler, ID_ACCE_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X, PARA_UI_BACK_POS_Y, event_handler, ID_ACCE_RETURN, true); } void lv_clear_acceleration_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_advance_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_advance_settings.cpp index 28958b6d2c..92acae2a47 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_advance_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_advance_settings.cpp @@ -84,7 +84,7 @@ void lv_draw_advance_settings() { index++; #endif - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X + 10, PARA_UI_BACL_POS_Y, event_handler, ID_ADVANCE_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X + 10, PARA_UI_BACK_POS_Y, event_handler, ID_ADVANCE_RETURN, true); } void lv_clear_advance_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_auto_level_offset_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_auto_level_offset_settings.cpp index 5ac24c4413..fd14585e70 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_auto_level_offset_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_auto_level_offset_settings.cpp @@ -77,7 +77,7 @@ void lv_draw_auto_level_offset_settings() { dtostrf(TERN0(HAS_PROBE_XY_OFFSET, probe.offset.z), 1, 1, public_buf_l); lv_screen_menu_item_1_edit(scr, machine_menu.Zoffset, PARA_UI_POS_X, PARA_UI_POS_Y * 3, event_handler, ID_OFFSET_Z, 2, public_buf_l); - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y, event_handler, ID_OFFSET_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X, PARA_UI_BACK_POS_Y, event_handler, ID_OFFSET_RETURN, true); } void lv_clear_auto_level_offset_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.cpp b/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.cpp index 65617fa9bb..bcc075ae64 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.cpp @@ -45,14 +45,14 @@ static lv_obj_t *scr; static lv_obj_t *labelV, *buttonV, *zOffsetText; enum { - ID_BABY_STEP_X_P = 1, - ID_BABY_STEP_X_N, - ID_BABY_STEP_Y_P, - ID_BABY_STEP_Y_N, - ID_BABY_STEP_Z_P, - ID_BABY_STEP_Z_N, - ID_BABY_STEP_DIST, - ID_BABY_STEP_RETURN + ID_BABYSTEP_X_P = 1, + ID_BABYSTEP_X_N, + ID_BABYSTEP_Y_P, + ID_BABYSTEP_Y_N, + ID_BABYSTEP_Z_P, + ID_BABYSTEP_Z_N, + ID_BABYSTEP_DIST, + ID_BABYSTEP_RETURN }; static float babystep_dist = 0.01; @@ -63,37 +63,37 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { char baby_buf[30] = { 0 }; char str_1[16]; switch (obj->mks_obj_id) { - case ID_BABY_STEP_X_P: + case ID_BABYSTEP_X_P: sprintf_P(baby_buf, PSTR("M290 X%s"), dtostrf(babystep_dist, 1, 3, str_1)); gcode.process_subcommands_now(F(baby_buf)); has_adjust_z = 1; break; - case ID_BABY_STEP_X_N: + case ID_BABYSTEP_X_N: sprintf_P(baby_buf, PSTR("M290 X%s"), dtostrf(-babystep_dist, 1, 3, str_1)); gcode.process_subcommands_now(F(baby_buf)); has_adjust_z = 1; break; - case ID_BABY_STEP_Y_P: + case ID_BABYSTEP_Y_P: sprintf_P(baby_buf, PSTR("M290 Y%s"), dtostrf(babystep_dist, 1, 3, str_1)); gcode.process_subcommands_now(F(baby_buf)); has_adjust_z = 1; break; - case ID_BABY_STEP_Y_N: + case ID_BABYSTEP_Y_N: sprintf_P(baby_buf, PSTR("M290 Y%s"), dtostrf(-babystep_dist, 1, 3, str_1)); gcode.process_subcommands_now(F(baby_buf)); has_adjust_z = 1; break; - case ID_BABY_STEP_Z_P: + case ID_BABYSTEP_Z_P: sprintf_P(baby_buf, PSTR("M290 Z%s"), dtostrf(babystep_dist, 1, 3, str_1)); gcode.process_subcommands_now(F(baby_buf)); has_adjust_z = 1; break; - case ID_BABY_STEP_Z_N: + case ID_BABYSTEP_Z_N: sprintf_P(baby_buf, PSTR("M290 Z%s"), dtostrf(-babystep_dist, 1, 3, str_1)); gcode.process_subcommands_now(F(baby_buf)); has_adjust_z = 1; break; - case ID_BABY_STEP_DIST: + case ID_BABYSTEP_DIST: if (ABS((int)(100 * babystep_dist)) == 1) babystep_dist = 0.05; else if (ABS((int)(100 * babystep_dist)) == 5) @@ -102,7 +102,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { babystep_dist = 0.01; disp_baby_step_dist(); break; - case ID_BABY_STEP_RETURN: + case ID_BABYSTEP_RETURN: if (has_adjust_z == 1) { TERN_(EEPROM_SETTINGS, (void)settings.save()); has_adjust_z = 0; @@ -114,21 +114,21 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { } void lv_draw_baby_stepping() { - scr = lv_screen_create(BABY_STEP_UI); - lv_big_button_create(scr, "F:/bmp_xAdd.bin", move_menu.x_add, INTERVAL_V, titleHeight, event_handler, ID_BABY_STEP_X_P); - lv_big_button_create(scr, "F:/bmp_xDec.bin", move_menu.x_dec, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_BABY_STEP_X_N); - lv_big_button_create(scr, "F:/bmp_yAdd.bin", move_menu.y_add, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight, event_handler, ID_BABY_STEP_Y_P); - lv_big_button_create(scr, "F:/bmp_yDec.bin", move_menu.y_dec, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_BABY_STEP_Y_N); - lv_big_button_create(scr, "F:/bmp_zAdd.bin", move_menu.z_add, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight, event_handler, ID_BABY_STEP_Z_P); - lv_big_button_create(scr, "F:/bmp_zDec.bin", move_menu.z_dec, BTN_X_PIXEL * 2 + INTERVAL_V * 3, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_BABY_STEP_Z_N); - buttonV = lv_imgbtn_create(scr, nullptr, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight, event_handler, ID_BABY_STEP_DIST); + scr = lv_screen_create(BABYSTEP_UI); + lv_big_button_create(scr, "F:/bmp_xAdd.bin", move_menu.x_add, INTERVAL_V, titleHeight, event_handler, ID_BABYSTEP_X_P); + lv_big_button_create(scr, "F:/bmp_xDec.bin", move_menu.x_dec, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_BABYSTEP_X_N); + lv_big_button_create(scr, "F:/bmp_yAdd.bin", move_menu.y_add, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight, event_handler, ID_BABYSTEP_Y_P); + lv_big_button_create(scr, "F:/bmp_yDec.bin", move_menu.y_dec, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_BABYSTEP_Y_N); + lv_big_button_create(scr, "F:/bmp_zAdd.bin", move_menu.z_add, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight, event_handler, ID_BABYSTEP_Z_P); + lv_big_button_create(scr, "F:/bmp_zDec.bin", move_menu.z_dec, BTN_X_PIXEL * 2 + INTERVAL_V * 3, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_BABYSTEP_Z_N); + buttonV = lv_imgbtn_create(scr, nullptr, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight, event_handler, ID_BABYSTEP_DIST); labelV = lv_label_create_empty(buttonV); #if HAS_ROTARY_ENCODER if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonV); #endif - lv_big_button_create(scr, "F:/bmp_return.bin", common_menu.text_back, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_BABY_STEP_RETURN); + lv_big_button_create(scr, "F:/bmp_return.bin", common_menu.text_back, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_BABYSTEP_RETURN); disp_baby_step_dist(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_eeprom_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_eeprom_settings.cpp index c518d85ab5..a9d4ac781a 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_eeprom_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_eeprom_settings.cpp @@ -70,7 +70,7 @@ void lv_draw_eeprom_settings() { scr = lv_screen_create(EEPROM_SETTINGS_UI); lv_screen_menu_item(scr, eeprom_menu.revert, PARA_UI_POS_X, PARA_UI_POS_Y, event_handler, ID_EEPROM_REVERT, 0); lv_screen_menu_item(scr, eeprom_menu.store, PARA_UI_POS_X, PARA_UI_POS_Y * 2, event_handler, ID_EEPROM_STORE, 1); - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y, event_handler, ID_EEPROM_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X, PARA_UI_BACK_POS_Y, event_handler, ID_EEPROM_RETURN, true); } void lv_clear_eeprom_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_encoder_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_encoder_settings.cpp index 04c6b51e2a..ec6d221e89 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_encoder_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_encoder_settings.cpp @@ -58,7 +58,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { void lv_draw_encoder_settings() { scr = lv_screen_create(ENCODER_SETTINGS_UI, machine_menu.EncoderConfTitle); buttonEncoderState = lv_screen_menu_item_onoff(scr, machine_menu.EncoderConfText, PARA_UI_POS_X, PARA_UI_POS_Y, event_handler, ID_ENCODER_STATE, 0, gCfgItems.encoder_enable); - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y, event_handler, ID_ENCODER_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X, PARA_UI_BACK_POS_Y, event_handler, ID_ENCODER_RETURN, true); } void lv_clear_encoder_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_filament_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_filament_settings.cpp index e3ca75da51..9f418b178e 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_filament_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_filament_settings.cpp @@ -114,7 +114,7 @@ void lv_draw_filament_settings() { lv_big_button_create(scr, "F:/bmp_back70x40.bin", machine_menu.previous, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y, event_handler, ID_FILAMENT_SET_UP, true); } - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y, event_handler, ID_FILAMENT_SET_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X, PARA_UI_BACK_POS_Y, event_handler, ID_FILAMENT_SET_RETURN, true); } void lv_clear_filament_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_gcode.cpp b/Marlin/src/lcd/extui/mks_ui/draw_gcode.cpp index fa9f7b0c47..effd49bff8 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_gcode.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_gcode.cpp @@ -96,7 +96,7 @@ void lv_draw_gcode(bool clear) { outL = lv_label_create(scr, PARA_UI_POS_X, PARA_UI_POS_Y * 2, "Result:"); outV = lv_label_create(scr, PARA_UI_POS_X, PARA_UI_POS_Y * 3, (const char*)public_buf); - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X + 10, PARA_UI_BACL_POS_Y, event_handler, ID_GCODE_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X + 10, PARA_UI_BACK_POS_Y, event_handler, ID_GCODE_RETURN, true); } void lv_clear_gcode() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_homing_sensitivity_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_homing_sensitivity_settings.cpp index 212f2b4995..aea64e57a8 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_homing_sensitivity_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_homing_sensitivity_settings.cpp @@ -92,7 +92,7 @@ void lv_draw_homing_sensitivity_settings() { lv_screen_menu_item_1_edit(scr, machine_menu.Z2_Sensitivity, PARA_UI_POS_X, PARA_UI_POS_Y * 4, event_handler, ID_SENSITIVITY_Z2, 3, public_buf_l); #endif - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y, event_handler, ID_SENSITIVITY_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X, PARA_UI_BACK_POS_Y, event_handler, ID_SENSITIVITY_RETURN, true); } void lv_clear_homing_sensitivity_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_jerk_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_jerk_settings.cpp index d410b2003c..a680976d96 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_jerk_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_jerk_settings.cpp @@ -86,7 +86,7 @@ void lv_draw_jerk_settings() { dtostrf(planner.max_jerk[E_AXIS], 1, 1, public_buf_l); lv_screen_menu_item_1_edit(scr, machine_menu.E_Jerk, PARA_UI_POS_X, PARA_UI_POS_Y * 4, event_handler, ID_JERK_E, 3, public_buf_l); - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y, event_handler, ID_JERK_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X, PARA_UI_BACK_POS_Y, event_handler, ID_JERK_RETURN, true); } void lv_clear_jerk_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp b/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp index e1184c2195..df5ebc8f22 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp @@ -88,22 +88,22 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) { if (!txt) return; // Do the corresponding action according to the text of the button - if (strcmp(txt, "abc") == 0) { + if (strcmp_P(txt, PSTR("abc")) == 0) { lv_btnm_set_map(kb, kb_map_lc); lv_btnm_set_ctrl_map(kb, kb_ctrl_lc_map); return; } - else if (strcmp(txt, "ABC") == 0) { + else if (strcmp_P(txt, PSTR("ABC")) == 0) { lv_btnm_set_map(kb, kb_map_uc); lv_btnm_set_ctrl_map(kb, kb_ctrl_uc_map); return; } - else if (strcmp(txt, "1#") == 0) { + else if (strcmp_P(txt, PSTR("1#")) == 0) { lv_btnm_set_map(kb, kb_map_spec); lv_btnm_set_ctrl_map(kb, kb_ctrl_spec_map); return; } - else if (strcmp(txt, LV_SYMBOL_CLOSE) == 0) { + else if (strcmp_P(txt, PSTR(LV_SYMBOL_CLOSE)) == 0) { if (kb->event_cb != lv_kb_def_event_cb) { lv_clear_keyboard(); draw_return_ui(); @@ -115,7 +115,7 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) { } return; } - else if (strcmp(txt, LV_SYMBOL_OK) == 0) { + else if (strcmp_P(txt, PSTR(LV_SYMBOL_OK)) == 0) { if (kb->event_cb != lv_kb_def_event_cb) { const char * ret_ta_txt = lv_ta_get_text(ext->ta); switch (keyboard_value) { @@ -183,15 +183,15 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) { // Add the characters to the text area if set if (!ext->ta) return; - if (strcmp(txt, "Enter") == 0 || strcmp(txt, LV_SYMBOL_NEW_LINE) == 0) + if (strcmp_P(txt, PSTR("Enter")) == 0 || strcmp_P(txt, PSTR(LV_SYMBOL_NEW_LINE)) == 0) lv_ta_add_char(ext->ta, '\n'); - else if (strcmp(txt, LV_SYMBOL_LEFT) == 0) + else if (strcmp_P(txt, PSTR(LV_SYMBOL_LEFT)) == 0) lv_ta_cursor_left(ext->ta); - else if (strcmp(txt, LV_SYMBOL_RIGHT) == 0) + else if (strcmp_P(txt, PSTR(LV_SYMBOL_RIGHT)) == 0) lv_ta_cursor_right(ext->ta); - else if (strcmp(txt, LV_SYMBOL_BACKSPACE) == 0) + else if (strcmp_P(txt, PSTR(LV_SYMBOL_BACKSPACE)) == 0) lv_ta_del_char(ext->ta); - else if (strcmp(txt, "+/-") == 0) { + else if (strcmp_P(txt, PSTR("+/-")) == 0) { uint16_t cur = lv_ta_get_cursor_pos(ext->ta); const char * ta_txt = lv_ta_get_text(ext->ta); if (ta_txt[0] == '-') { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_level_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_level_settings.cpp index 6fc8704607..93d34a8578 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_level_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_level_settings.cpp @@ -68,7 +68,7 @@ void lv_draw_level_settings() { #if HAS_BED_PROBE lv_screen_menu_item(scr, machine_menu.LevelingAutoZoffsetConf, PARA_UI_POS_X, PARA_UI_POS_Y * 3, event_handler, ID_LEVEL_ZOFFSET, 2); #endif - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X + 10, PARA_UI_BACL_POS_Y, event_handler, ID_LEVEL_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X + 10, PARA_UI_BACK_POS_Y, event_handler, ID_LEVEL_RETURN, true); } void lv_clear_level_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_machine_para.cpp b/Marlin/src/lcd/extui/mks_ui/draw_machine_para.cpp index 57c32c733e..8e50fd8b04 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_machine_para.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_machine_para.cpp @@ -72,7 +72,7 @@ void lv_draw_machine_para() { lv_screen_menu_item(scr, MachinePara_menu.MotorSetting, PARA_UI_POS_X, PARA_UI_POS_Y * 2, event_handler, ID_PARA_MOTOR, 1); lv_screen_menu_item(scr, MachinePara_menu.leveling, PARA_UI_POS_X, PARA_UI_POS_Y * 3, event_handler, ID_PARA_LEVEL, 2); lv_screen_menu_item(scr, MachinePara_menu.AdvanceSetting, PARA_UI_POS_X, PARA_UI_POS_Y * 4, event_handler, ID_PARA_ADVANCE, 3); - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X + 10, PARA_UI_BACL_POS_Y, event_handler, ID_PARA_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X + 10, PARA_UI_BACK_POS_Y, event_handler, ID_PARA_RETURN, true); } void lv_clear_machine_para() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_machine_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_machine_settings.cpp index b14dc6b759..c81002e3e0 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_machine_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_machine_settings.cpp @@ -41,36 +41,28 @@ enum { static void event_handler(lv_obj_t *obj, lv_event_t event) { if (event != LV_EVENT_RELEASED) return; + clear_cur_ui(); switch (obj->mks_obj_id) { - case ID_MACHINE_RETURN: - lv_clear_machine_settings(); - draw_return_ui(); - break; - case ID_MACHINE_ACCELERATION: - lv_clear_machine_settings(); - lv_draw_acceleration_settings(); - break; - case ID_MACHINE_FEEDRATE: - lv_clear_machine_settings(); - lv_draw_max_feedrate_settings(); - break; + case ID_MACHINE_RETURN: draw_return_ui(); break; + case ID_MACHINE_ACCELERATION: lv_draw_acceleration_settings(); break; + case ID_MACHINE_FEEDRATE: lv_draw_max_feedrate_settings(); break; #if HAS_CLASSIC_JERK - case ID_MACHINE_JERK: - lv_clear_machine_settings(); - lv_draw_jerk_settings(); - break; + case ID_MACHINE_JERK: lv_draw_jerk_settings(); break; #endif } } void lv_draw_machine_settings() { scr = lv_screen_create(MACHINE_SETTINGS_UI, machine_menu.MachineConfigTitle); - lv_screen_menu_item(scr, machine_menu.AccelerationConf, PARA_UI_POS_X, PARA_UI_POS_Y, event_handler, ID_MACHINE_ACCELERATION, 0); - lv_screen_menu_item(scr, machine_menu.MaxFeedRateConf, PARA_UI_POS_X, PARA_UI_POS_Y * 2, event_handler, ID_MACHINE_FEEDRATE, 1); + lv_coord_t y = PARA_UI_POS_Y; + lv_screen_menu_item(scr, machine_menu.AccelerationConf, PARA_UI_POS_X, y, event_handler, ID_MACHINE_ACCELERATION, 0); + y += PARA_UI_POS_Y; + lv_screen_menu_item(scr, machine_menu.MaxFeedRateConf, PARA_UI_POS_X, y, event_handler, ID_MACHINE_FEEDRATE, 1); #if HAS_CLASSIC_JERK - lv_screen_menu_item(scr, machine_menu.JerkConf, PARA_UI_POS_X, PARA_UI_POS_Y * 3, event_handler, ID_MACHINE_JERK, 2); + y += PARA_UI_POS_Y; + lv_screen_menu_item(scr, machine_menu.JerkConf, PARA_UI_POS_X, y, event_handler, ID_MACHINE_JERK, 2); #endif - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X + 10, PARA_UI_BACL_POS_Y, event_handler, ID_MACHINE_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X + 10, PARA_UI_BACK_POS_Y, event_handler, ID_MACHINE_RETURN, true); } void lv_clear_machine_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_max_feedrate_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_max_feedrate_settings.cpp index 1dd6a93d62..592acd346b 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_max_feedrate_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_max_feedrate_settings.cpp @@ -105,7 +105,7 @@ void lv_draw_max_feedrate_settings() { lv_big_button_create(scr, "F:/bmp_back70x40.bin", machine_menu.previous, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y, event_handler, ID_FEED_UP, true); } - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y, event_handler, ID_FEED_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X, PARA_UI_BACK_POS_Y, event_handler, ID_FEED_RETURN, true); } void lv_clear_max_feedrate_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_motor_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_motor_settings.cpp index 7367cec1c2..df17ac7687 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_motor_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_motor_settings.cpp @@ -86,7 +86,7 @@ void lv_draw_motor_settings() { index++; #endif #endif - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X + 10, PARA_UI_BACL_POS_Y, event_handler, ID_MOTOR_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X + 10, PARA_UI_BACK_POS_Y, event_handler, ID_MOTOR_RETURN, true); } void lv_clear_motor_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_pause_position.cpp b/Marlin/src/lcd/extui/mks_ui/draw_pause_position.cpp index 8e107d4cee..7231cbfabd 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_pause_position.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_pause_position.cpp @@ -72,7 +72,7 @@ void lv_draw_pause_position() { dtostrf(gCfgItems.pausePosZ, 1, 1, public_buf_l); lv_screen_menu_item_1_edit(scr, machine_menu.zPos, PARA_UI_POS_X, PARA_UI_POS_Y * 3, event_handler, ID_PAUSE_Z, 2, public_buf_l); - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y, event_handler, ID_PAUSE_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X, PARA_UI_BACK_POS_Y, event_handler, ID_PAUSE_RETURN, true); } void lv_clear_pause_position() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_preHeat.cpp b/Marlin/src/lcd/extui/mks_ui/draw_preHeat.cpp index ab95ce3a83..fe651133c3 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_preHeat.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_preHeat.cpp @@ -188,7 +188,7 @@ void disp_add_dec() { } void lv_draw_preHeat() { - scr = lv_screen_create(PRE_HEAT_UI); + scr = lv_screen_create(PREHEAT_UI); // Create image buttons disp_add_dec(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_step_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_step_settings.cpp index fc920728b4..4807a63a2c 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_step_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_step_settings.cpp @@ -104,7 +104,7 @@ void lv_draw_step_settings() { lv_big_button_create(scr, "F:/bmp_back70x40.bin", machine_menu.previous, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y, event_handler, ID_STEP_UP, true); } - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y, event_handler, ID_STEP_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X, PARA_UI_BACK_POS_Y, event_handler, ID_STEP_RETURN, true); } void lv_clear_step_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_tmc_current_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_tmc_current_settings.cpp index 60a3562b9d..9ec8f1501a 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_tmc_current_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_tmc_current_settings.cpp @@ -54,29 +54,19 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { draw_return_ui(); return; #if AXIS_IS_TMC(X) - case ID_TMC_CURRENT_X: - value = Xcurrent; - break; + case ID_TMC_CURRENT_X: value = Xcurrent; break; #endif #if AXIS_IS_TMC(Y) - case ID_TMC_CURRENT_Y: - value = Ycurrent; - break; + case ID_TMC_CURRENT_Y: value = Ycurrent; break; #endif #if AXIS_IS_TMC(Z) - case ID_TMC_CURRENT_Z: - value = Zcurrent; - break; + case ID_TMC_CURRENT_Z: value = Zcurrent; break; #endif #if AXIS_IS_TMC(E0) - case ID_TMC_CURRENT_E0: - value = E0current; - break; + case ID_TMC_CURRENT_E0: value = E0current; break; #endif #if AXIS_IS_TMC(E1) - case ID_TMC_CURRENT_E1: - value = E1current; - break; + case ID_TMC_CURRENT_E1: value = E1current; break; #endif case ID_TMC_CURRENT_UP: @@ -143,7 +133,7 @@ void lv_draw_tmc_current_settings() { lv_big_button_create(scr, "F:/bmp_back70x40.bin", machine_menu.previous, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y, event_handler, ID_TMC_CURRENT_UP, true); } - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y, event_handler, ID_TMC_CURRENT_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X, PARA_UI_BACK_POS_Y, event_handler, ID_TMC_CURRENT_RETURN, true); } void lv_clear_tmc_current_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_tmc_step_mode_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_tmc_step_mode_settings.cpp index f25f850c2a..990cdda7e6 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_tmc_step_mode_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_tmc_step_mode_settings.cpp @@ -122,7 +122,7 @@ void lv_draw_tmc_step_mode_settings() { lv_big_button_create(scr, "F:/bmp_back70x40.bin", machine_menu.previous, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y, event_handler, ID_TMC_MODE_UP, true); } - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y, event_handler, ID_TMC_MODE_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X, PARA_UI_BACK_POS_Y, event_handler, ID_TMC_MODE_RETURN, true); } void lv_clear_tmc_step_mode_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.cpp index d6e52606c0..d5501a3a45 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.cpp @@ -105,7 +105,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { void lv_draw_tramming_pos_settings() { char buf2[50]; - scr = lv_screen_create(MANUAL_LEVELING_POSIGION_UI, machine_menu.LevelingParaConfTitle); + scr = lv_screen_create(MANUAL_LEVELING_POSITION_UI, machine_menu.LevelingParaConfTitle); if (!uiCfg.para_ui_page) { itoa(gCfgItems.trammingPos[0].x, public_buf_l, 10); @@ -134,7 +134,7 @@ void lv_draw_tramming_pos_settings() { lv_big_button_create(scr, "F:/bmp_back70x40.bin", machine_menu.previous, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y, event_handler, ID_MANUAL_POS_UP, true); } - lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACL_POS_X + 10, PARA_UI_BACL_POS_Y, event_handler, ID_MANUAL_POS_RETURN, true); + lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X + 10, PARA_UI_BACK_POS_Y, event_handler, ID_MANUAL_POS_RETURN, true); } void lv_clear_tramming_pos_settings() { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp index c44bdfea93..37b06356e0 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp @@ -475,7 +475,7 @@ char *getDispText(int index) { case EXTRUSION_UI: strcpy(public_buf_l, extrude_menu.title); break; case CHANGE_SPEED_UI: strcpy(public_buf_l, speed_menu.title); break; case FAN_UI: strcpy(public_buf_l, fan_menu.title); break; - case PRE_HEAT_UI: + case PREHEAT_UI: switch (disp_state_stack._disp_state[disp_state_stack._disp_index]) { case OPERATE_UI: strcpy(public_buf_l, preheat_menu.adjust_title); default: strcpy(public_buf_l, preheat_menu.title); break; @@ -500,7 +500,7 @@ char *getDispText(int index) { case TOOL_UI: strcpy(public_buf_l, tool_menu.title); break; case WIFI_LIST_UI: TERN_(MKS_WIFI_MODULE, strcpy(public_buf_l, list_menu.title)); break; case MACHINE_PARA_UI: strcpy(public_buf_l, MachinePara_menu.title); break; - case BABY_STEP_UI: strcpy(public_buf_l, operation_menu.babystep); break; + case BABYSTEP_UI: strcpy(public_buf_l, operation_menu.babystep); break; case EEPROM_SETTINGS_UI: strcpy(public_buf_l, eeprom_menu.title); break; case MEDIA_SELECT_UI: strcpy(public_buf_l, media_select_menu.title); break; default: break; @@ -742,7 +742,7 @@ void GUI_RefreshPage() { disp_hotend_temp(); } break; - case PRE_HEAT_UI: + case PREHEAT_UI: if (temps_update_flag) { temps_update_flag = false; disp_desire_temp(); @@ -822,7 +822,7 @@ void GUI_RefreshPage() { case WIFI_TIPS_UI: switch (wifi_tips_type) { case TIPS_TYPE_JOINING: - if (wifi_link_state == WIFI_CONNECTED && strcmp((const char *)wifi_list.wifiConnectedName,(const char *)wifi_list.wifiName[wifi_list.nameIndex]) == 0) { + if (wifi_link_state == WIFI_CONNECTED && strcmp((const char *)wifi_list.wifiConnectedName, (const char *)wifi_list.wifiName[wifi_list.nameIndex]) == 0) { tips_disp.timer = TIPS_TIMER_STOP; tips_disp.timer_count = 0; @@ -864,7 +864,7 @@ void GUI_RefreshPage() { break; #endif - case BABY_STEP_UI: + case BABYSTEP_UI: if (temps_update_flag) { temps_update_flag = false; disp_z_offset_value(); @@ -888,7 +888,7 @@ void clear_cur_ui() { case OPERATE_UI: lv_clear_operation(); break; case PAUSE_UI: break; case EXTRUSION_UI: lv_clear_extrusion(); break; - case PRE_HEAT_UI: lv_clear_preHeat(); break; + case PREHEAT_UI: lv_clear_preHeat(); break; case CHANGE_SPEED_UI: lv_clear_change_speed(); break; case FAN_UI: lv_clear_fan(); break; case SET_UI: lv_clear_set(); break; @@ -929,15 +929,14 @@ void clear_cur_ui() { case MACHINE_SETTINGS_UI: lv_clear_machine_settings(); break; case TEMPERATURE_SETTINGS_UI: break; case MOTOR_SETTINGS_UI: lv_clear_motor_settings(); break; - case MACHINETYPE_UI: break; + case MACHINE_TYPE_UI: break; case STROKE_UI: break; case HOME_DIR_UI: break; case ENDSTOP_TYPE_UI: break; case FILAMENT_SETTINGS_UI: break; - case LEVELING_SETTIGNS_UI: break; case LEVELING_PARA_UI: lv_clear_level_settings(); break; case DELTA_LEVELING_PARA_UI: break; - case MANUAL_LEVELING_POSIGION_UI: lv_clear_tramming_pos_settings(); break; + case MANUAL_LEVELING_POSITION_UI: lv_clear_tramming_pos_settings(); break; case MAXFEEDRATE_UI: lv_clear_max_feedrate_settings(); break; case STEPS_UI: lv_clear_step_settings(); break; case ACCELERATION_UI: lv_clear_acceleration_settings(); break; @@ -950,7 +949,7 @@ void clear_cur_ui() { case DOUBLE_Z_UI: break; case ENABLE_INVERT_UI: break; case NUMBER_KEY_UI: lv_clear_number_key(); break; - case BABY_STEP_UI: lv_clear_baby_stepping(); break; + case BABYSTEP_UI: lv_clear_baby_stepping(); break; case PAUSE_POS_UI: lv_clear_pause_position(); break; #if HAS_TRINAMIC_CONFIG case TMC_CURRENT_UI: lv_clear_tmc_current_settings(); break; @@ -997,7 +996,7 @@ void draw_return_ui() { case OPERATE_UI: lv_draw_operation(); break; case PAUSE_UI: break; case EXTRUSION_UI: lv_draw_extrusion(); break; - case PRE_HEAT_UI: lv_draw_preHeat(); break; + case PREHEAT_UI: lv_draw_preHeat(); break; case CHANGE_SPEED_UI: lv_draw_change_speed(); break; case FAN_UI: lv_draw_fan(); break; case SET_UI: lv_draw_set(); break; @@ -1037,15 +1036,14 @@ void draw_return_ui() { case MACHINE_SETTINGS_UI: lv_draw_machine_settings(); break; case TEMPERATURE_SETTINGS_UI: break; case MOTOR_SETTINGS_UI: lv_draw_motor_settings(); break; - case MACHINETYPE_UI: break; + case MACHINE_TYPE_UI: break; case STROKE_UI: break; case HOME_DIR_UI: break; case ENDSTOP_TYPE_UI: break; case FILAMENT_SETTINGS_UI: lv_draw_filament_settings(); break; - case LEVELING_SETTIGNS_UI: break; case LEVELING_PARA_UI: lv_draw_level_settings(); break; case DELTA_LEVELING_PARA_UI: break; - case MANUAL_LEVELING_POSIGION_UI: lv_draw_tramming_pos_settings(); break; + case MANUAL_LEVELING_POSITION_UI: lv_draw_tramming_pos_settings(); break; case MAXFEEDRATE_UI: lv_draw_max_feedrate_settings(); break; case STEPS_UI: lv_draw_step_settings(); break; case ACCELERATION_UI: lv_draw_acceleration_settings(); break; @@ -1061,7 +1059,7 @@ void draw_return_ui() { case ENABLE_INVERT_UI: break; case NUMBER_KEY_UI: lv_draw_number_key(); break; case DIALOG_UI: break; - case BABY_STEP_UI: lv_draw_baby_stepping(); break; + case BABYSTEP_UI: lv_draw_baby_stepping(); break; case PAUSE_POS_UI: lv_draw_pause_position(); break; #if HAS_TRINAMIC_CONFIG case TMC_CURRENT_UI: lv_draw_tmc_current_settings(); break; diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.h b/Marlin/src/lcd/extui/mks_ui/draw_ui.h index edb513a8b5..a74d7e1ae2 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ui.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.h @@ -143,8 +143,8 @@ #define PARA_UI_ARROW_V 12 - #define PARA_UI_BACL_POS_X 400 - #define PARA_UI_BACL_POS_Y 270 + #define PARA_UI_BACK_POS_X 400 + #define PARA_UI_BACK_POS_Y 270 #define PARA_UI_TURN_PAGE_POS_X 320 #define PARA_UI_TURN_PAGE_POS_Y 270 @@ -270,7 +270,7 @@ typedef enum { PAUSE_UI, EXTRUSION_UI, FAN_UI, - PRE_HEAT_UI, + PREHEAT_UI, CHANGE_SPEED_UI, TEMP_UI, SET_UI, @@ -304,15 +304,14 @@ typedef enum { MACHINE_SETTINGS_UI, TEMPERATURE_SETTINGS_UI, MOTOR_SETTINGS_UI, - MACHINETYPE_UI, + MACHINE_TYPE_UI, STROKE_UI, HOME_DIR_UI, ENDSTOP_TYPE_UI, FILAMENT_SETTINGS_UI, - LEVELING_SETTIGNS_UI, LEVELING_PARA_UI, DELTA_LEVELING_PARA_UI, - MANUAL_LEVELING_POSIGION_UI, + MANUAL_LEVELING_POSITION_UI, MAXFEEDRATE_UI, STEPS_UI, ACCELERATION_UI, @@ -325,7 +324,7 @@ typedef enum { DOUBLE_Z_UI, ENABLE_INVERT_UI, NUMBER_KEY_UI, - BABY_STEP_UI, + BABYSTEP_UI, ERROR_MESSAGE_UI, PAUSE_POS_UI, TMC_CURRENT_UI, @@ -336,7 +335,7 @@ typedef enum { ENCODER_SETTINGS_UI, TOUCH_CALIBRATION_UI, GCODE_UI, - MEDIA_SELECT_UI, + MEDIA_SELECT_UI } DISP_STATE; typedef struct { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.cpp index e087f74286..fb9fb4f9eb 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.cpp @@ -130,7 +130,7 @@ void lv_draw_wifi_settings() { lv_obj_t *buttonConfig = lv_imgbtn_create(scr, "F:/bmp_back70x40.bin", PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y, event_handler, ID_WIFI_CONFIG); lv_obj_t *labelConfig = lv_label_create_empty(buttonConfig); - lv_obj_t *buttonBack = lv_imgbtn_create(scr, "F:/bmp_back70x40.bin", PARA_UI_BACL_POS_X, PARA_UI_BACL_POS_Y, event_handler, ID_WIFI_RETURN); + lv_obj_t *buttonBack = lv_imgbtn_create(scr, "F:/bmp_back70x40.bin", PARA_UI_BACK_POS_X, PARA_UI_BACK_POS_Y, event_handler, ID_WIFI_RETURN); lv_obj_t *label_Back = lv_label_create_empty(buttonBack); if (gCfgItems.multiple_language) { diff --git a/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp b/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp index 20d4720d00..f56d68366c 100644 --- a/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp +++ b/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp @@ -2026,12 +2026,12 @@ void get_wifi_commands() { #if DISABLED(EMERGENCY_PARSER) // Process critical commands early - if (strcmp(command, "M108") == 0) { + if (strcmp_P(command, PSTR("M108")) == 0) { wait_for_heatup = false; TERN_(HAS_LCD_MENU, wait_for_user = false); } - if (strcmp(command, "M112") == 0) kill(FPSTR(M112_KILL_STR), nullptr, true); - if (strcmp(command, "M410") == 0) quickstop_stepper(); + if (strcmp_P(command, PSTR("M112")) == 0) kill(FPSTR(M112_KILL_STR), nullptr, true); + if (strcmp_P(command, PSTR("M410")) == 0) quickstop_stepper(); #endif // Add the command to the queue From 741e70541d5ba0e8a7cfd2c402b306dfab4b77ee Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 17 Oct 2021 20:24:41 -0500 Subject: [PATCH 014/532] =?UTF-8?q?=F0=9F=9A=B8=20Tweak=20MKS=20UI=20G-cod?= =?UTF-8?q?e=20console?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/queue.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_gcode.cpp | 2 -- Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp | 10 +++++----- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/Marlin/src/gcode/queue.h b/Marlin/src/gcode/queue.h index 2e3e26d179..82e2a7a0e4 100644 --- a/Marlin/src/gcode/queue.h +++ b/Marlin/src/gcode/queue.h @@ -133,7 +133,7 @@ public: * Enqueue command(s) to run from SRAM. Drained by process_injected_command(). * Aborts the current SRAM queue so only use for one or two commands. */ - static inline void inject(char * const gcode) { + static inline void inject(const char * const gcode) { strncpy(injected_commands, gcode, sizeof(injected_commands) - 1); } diff --git a/Marlin/src/lcd/extui/mks_ui/draw_gcode.cpp b/Marlin/src/lcd/extui/mks_ui/draw_gcode.cpp index effd49bff8..8a3366e01d 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_gcode.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_gcode.cpp @@ -82,8 +82,6 @@ void lv_serial_capt_hook(void * userPointer, uint8_t c) { void lv_eom_hook(void *) { // Message is done, let's remove the hook now MYSERIAL1.setHook(); - // We are back from the keyboard, so let's redraw ourselves - draw_return_ui(); } void lv_draw_gcode(bool clear) { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp b/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp index df5ebc8f22..6d7bdc2aa7 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp @@ -164,13 +164,13 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) { draw_return_ui(); break; case GCodeCommand: - if (!queue.ring_buffer.full(3)) { - // Hook anything that goes to the serial port + if (ret_ta_txt[0] && !queue.ring_buffer.full(3)) { + // Hook for the next bytes to arrive from the serial port MYSERIAL1.setHook(lv_serial_capt_hook, lv_eom_hook, 0); - queue.enqueue_one_now(ret_ta_txt); + // Run the command as soon as possible + queue.inject(ret_ta_txt); } - lv_clear_keyboard(); - // draw_return_ui is called in the end of message hook + goto_previous_ui(); break; default: break; } From d2b0939118827c49610058c41f521b789c827477 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Mon, 18 Oct 2021 02:01:28 -0400 Subject: [PATCH 015/532] Fix Tool Change Park (#22968) --- Marlin/src/module/tool_change.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp index 81d85573af..285b4cba84 100644 --- a/Marlin/src/module/tool_change.cpp +++ b/Marlin/src/module/tool_change.cpp @@ -954,7 +954,7 @@ void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0. #if ENABLED(TOOLCHANGE_NO_RETURN) const float temp = destination.z; destination = current_position; - destination.z = temp.z; + destination.z = temp; #endif prepare_internal_move_to_destination(TERN(TOOLCHANGE_NO_RETURN, planner.settings.max_feedrate_mm_s[Z_AXIS], MMM_TO_MMS(TOOLCHANGE_PARK_XY_FEEDRATE))); } From b93c3301f2146bed7287ad097b95b53507c35420 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Mon, 18 Oct 2021 02:03:01 -0400 Subject: [PATCH 016/532] Fix JyersUI ZOffset Multiplication (#22975) --- Marlin/src/lcd/e3v2/jyersui/dwin.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp index 6fe3db438d..a4e05cace9 100644 --- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp @@ -419,7 +419,7 @@ void CrealityDWINClass::Draw_Float(float value, uint8_t row, bool selected/*=fal if (isnan(value)) DWIN_Draw_String(true, DWIN_FONT_MENU, Color_White, bColor, xpos - 8, MBASE(row), F(" NaN")); else { - DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_MENU, Color_White, bColor, digits - log10(minunit) + 1, log10(minunit), xpos, MBASE(row), (value < 0 ? -value : value) * minunit); + DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_MENU, Color_White, bColor, digits - log10(minunit) + 1, log10(minunit), xpos, MBASE(row), (value < 0 ? -value : value)); DWIN_Draw_String(true, DWIN_FONT_MENU, Color_White, bColor, xpos - 8, MBASE(row), value < 0 ? F("-") : F(" ")); } } @@ -871,7 +871,7 @@ void CrealityDWINClass::Draw_Status_Area(bool icons/*=false*/) { } if (zoffsetvalue != offset) { offset = zoffsetvalue; - DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_STAT, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 2, 2, 207, 417, (zoffsetvalue < 0 ? -zoffsetvalue : zoffsetvalue) * 100); + DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_STAT, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 2, 2, 207, 417, (zoffsetvalue < 0 ? -zoffsetvalue : zoffsetvalue)); DWIN_Draw_String(true, DWIN_FONT_MENU, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 205, 419, zoffsetvalue < 0 ? F("-") : F(" ")); } #endif From ad4a8a68c2125f74124225813fe978c31677b3e5 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 18 Oct 2021 01:49:35 -0500 Subject: [PATCH 017/532] =?UTF-8?q?=E2=9C=85=20Warn=20about=20dummy=20ther?= =?UTF-8?q?mistors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Conditionals_adv.h | 16 +++-- Marlin/src/inc/SanityCheck.h | 70 +++------------------- Marlin/src/inc/Warnings.cpp | 3 + Marlin/src/module/temperature.cpp | 16 ++--- Marlin/src/module/thermistor/thermistors.h | 12 ---- 5 files changed, 25 insertions(+), 92 deletions(-) diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index e2ee8d914a..dd2d6ed748 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -132,17 +132,15 @@ #define HID_E6 6 #define HID_E7 7 -#define ANY_TEMP_SENSOR_IS(n) (n == TEMP_SENSOR_0 || n == TEMP_SENSOR_1 || n == TEMP_SENSOR_2 || n == TEMP_SENSOR_3 \ - || n == TEMP_SENSOR_4 || n == TEMP_SENSOR_5 || n == TEMP_SENSOR_6 || n == TEMP_SENSOR_7 \ - || n == TEMP_SENSOR_BED \ - || n == TEMP_SENSOR_PROBE \ - || n == TEMP_SENSOR_CHAMBER \ - || n == TEMP_SENSOR_COOLER \ - || n == TEMP_SENSOR_REDUNDANT ) -#if ANY_TEMP_SENSOR_IS(1000) +#define _SENSOR_IS(I,N) || (TEMP_SENSOR_##N == I) +#define _E_SENSOR_IS(I,N) _SENSOR_IS(N,I) +#define ANY_THERMISTOR_IS(N) (0 REPEAT2(HOTENDS, _E_SENSOR_IS, N) \ + _SENSOR_IS(N,BED) _SENSOR_IS(N,PROBE) _SENSOR_IS(N,CHAMBER) \ + _SENSOR_IS(N,COOLER) _SENSOR_IS(N,BOARD) _SENSOR_IS(N,REDUNDANT) ) + +#if ANY_THERMISTOR_IS(1000) #define HAS_USER_THERMISTORS 1 #endif -#undef ANY_TEMP_SENSOR_IS #if TEMP_SENSOR_REDUNDANT #define _HEATER_ID(M) HID_##M diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 0aa5bd9f2d..7d1629a67e 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2193,68 +2193,12 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #elif !PIN_EXISTS(TEMP_7) && !TEMP_SENSOR_7_IS_DUMMY #error "TEMP_7_PIN not defined for this board." #endif - #elif TEMP_SENSOR_7 != 0 - #error "TEMP_SENSOR_7 shouldn't be set with only 7 HOTENDS." - #endif - #elif TEMP_SENSOR_6 != 0 - #error "TEMP_SENSOR_6 shouldn't be set with only 6 HOTENDS." - #elif TEMP_SENSOR_7 != 0 - #error "TEMP_SENSOR_7 shouldn't be set with only 6 HOTENDS." - #endif - #elif TEMP_SENSOR_5 != 0 - #error "TEMP_SENSOR_5 shouldn't be set with only 5 HOTENDS." - #elif TEMP_SENSOR_6 != 0 - #error "TEMP_SENSOR_6 shouldn't be set with only 5 HOTENDS." - #elif TEMP_SENSOR_7 != 0 - #error "TEMP_SENSOR_7 shouldn't be set with only 5 HOTENDS." - #endif - #elif TEMP_SENSOR_4 != 0 - #error "TEMP_SENSOR_4 shouldn't be set with only 4 HOTENDS." - #elif TEMP_SENSOR_5 != 0 - #error "TEMP_SENSOR_5 shouldn't be set with only 4 HOTENDS." - #elif TEMP_SENSOR_6 != 0 - #error "TEMP_SENSOR_6 shouldn't be set with only 4 HOTENDS." - #elif TEMP_SENSOR_7 != 0 - #error "TEMP_SENSOR_7 shouldn't be set with only 4 HOTENDS." - #endif - #elif TEMP_SENSOR_3 != 0 - #error "TEMP_SENSOR_3 shouldn't be set with only 3 HOTENDS." - #elif TEMP_SENSOR_4 != 0 - #error "TEMP_SENSOR_4 shouldn't be set with only 3 HOTENDS." - #elif TEMP_SENSOR_5 != 0 - #error "TEMP_SENSOR_5 shouldn't be set with only 3 HOTENDS." - #elif TEMP_SENSOR_6 != 0 - #error "TEMP_SENSOR_6 shouldn't be set with only 3 HOTENDS." - #elif TEMP_SENSOR_7 != 0 - #error "TEMP_SENSOR_7 shouldn't be set with only 3 HOTENDS." - #endif - #elif TEMP_SENSOR_2 != 0 - #error "TEMP_SENSOR_2 shouldn't be set with only 2 HOTENDS." - #elif TEMP_SENSOR_3 != 0 - #error "TEMP_SENSOR_3 shouldn't be set with only 2 HOTENDS." - #elif TEMP_SENSOR_4 != 0 - #error "TEMP_SENSOR_4 shouldn't be set with only 2 HOTENDS." - #elif TEMP_SENSOR_5 != 0 - #error "TEMP_SENSOR_5 shouldn't be set with only 2 HOTENDS." - #elif TEMP_SENSOR_6 != 0 - #error "TEMP_SENSOR_6 shouldn't be set with only 2 HOTENDS." - #elif TEMP_SENSOR_7 != 0 - #error "TEMP_SENSOR_7 shouldn't be set with only 2 HOTENDS." - #endif -#elif TEMP_SENSOR_1 != 0 - #error "TEMP_SENSOR_1 shouldn't be set with only 1 HOTEND." -#elif TEMP_SENSOR_2 != 0 - #error "TEMP_SENSOR_2 shouldn't be set with only 1 HOTEND." -#elif TEMP_SENSOR_3 != 0 - #error "TEMP_SENSOR_3 shouldn't be set with only 1 HOTEND." -#elif TEMP_SENSOR_4 != 0 - #error "TEMP_SENSOR_4 shouldn't be set with only 1 HOTEND." -#elif TEMP_SENSOR_5 != 0 - #error "TEMP_SENSOR_5 shouldn't be set with only 1 HOTEND." -#elif TEMP_SENSOR_6 != 0 - #error "TEMP_SENSOR_6 shouldn't be set with only 1 HOTEND." -#elif TEMP_SENSOR_7 != 0 - #error "TEMP_SENSOR_7 shouldn't be set with only 1 HOTEND." + #endif // HOTENDS > 7 + #endif // HOTENDS > 6 + #endif // HOTENDS > 5 + #endif // HOTENDS > 4 + #endif // HOTENDS > 3 + #endif // HOTENDS > 2 #endif // HAS_MULTI_HOTEND /** @@ -3292,7 +3236,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #if HAS_MOTOR_CURRENT_I2C #if BOTH(DIGIPOT_MCP4018, DIGIPOT_MCP4451) #error "Enable only one of DIGIPOT_MCP4018 or DIGIPOT_MCP4451." -#elif !MB(MKS_SBASE, AZTEEG_X5_GT, AZTEEG_X5_MINI, AZTEEG_X5_MINI_WIFI) \ + #elif !MB(MKS_SBASE, AZTEEG_X5_GT, AZTEEG_X5_MINI, AZTEEG_X5_MINI_WIFI) \ && (!defined(DIGIPOTS_I2C_SDA_X) || !defined(DIGIPOTS_I2C_SDA_Y) || !defined(DIGIPOTS_I2C_SDA_Z) || !defined(DIGIPOTS_I2C_SDA_E0) || !defined(DIGIPOTS_I2C_SDA_E1)) #error "DIGIPOT_MCP4018/4451 requires DIGIPOTS_I2C_SDA_* pins to be defined." #endif diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index e5e9d57fc6..a0affac56a 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -51,6 +51,9 @@ #if HAS_COOLER && DISABLED(THERMAL_PROTECTION_COOLER) #warning "Safety Alert! Enable THERMAL_PROTECTION_COOLER for the final build!" #endif +#if ANY_THERMISTOR_IS(998) || ANY_THERMISTOR_IS(999) + #warning "Warning! Don't use dummy thermistors (998/999) for final build!" +#endif #if NONE(HAS_RESUME_CONTINUE, HOST_PROMPT_SUPPORT) #warning "Your Configuration provides no method to acquire user feedback!" diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 3130914451..4320a530c5 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -2207,22 +2207,22 @@ void Temperature::init() { // Thermistor activation by MCU pin #if PIN_EXISTS(TEMP_0_TR_ENABLE) - OUT_WRITE(TEMP_0_TR_ENABLE_PIN, + OUT_WRITE(TEMP_0_TR_ENABLE_PIN, ( #if TEMP_SENSOR_IS_ANY_MAX_TC(0) - 1 + HIGH #else - 0 + LOW #endif - ); + )); #endif #if PIN_EXISTS(TEMP_1_TR_ENABLE) - OUT_WRITE(TEMP_1_TR_ENABLE_PIN, + OUT_WRITE(TEMP_1_TR_ENABLE_PIN, ( #if TEMP_SENSOR_IS_ANY_MAX_TC(1) - 1 + HIGH #else - 0 + LOW #endif - ); + )); #endif #if HAS_HEATER_0 diff --git a/Marlin/src/module/thermistor/thermistors.h b/Marlin/src/module/thermistor/thermistors.h index 28a1e2f90f..85f4449636 100644 --- a/Marlin/src/module/thermistor/thermistors.h +++ b/Marlin/src/module/thermistor/thermistors.h @@ -42,18 +42,6 @@ #define OV_SCALE(N) (N) #define OV(N) int16_t(OV_SCALE(N) * (OVERSAMPLENR) * (THERMISTOR_TABLE_SCALE)) -#define TEMP_SENSOR_IS(n,H) (n == TEMP_SENSOR_##H) -#define ANY_THERMISTOR_IS(n) ( TEMP_SENSOR_IS(n, 0) || TEMP_SENSOR_IS(n, 1) \ - || TEMP_SENSOR_IS(n, 2) || TEMP_SENSOR_IS(n, 3) \ - || TEMP_SENSOR_IS(n, 4) || TEMP_SENSOR_IS(n, 5) \ - || TEMP_SENSOR_IS(n, 6) || TEMP_SENSOR_IS(n, 7) \ - || TEMP_SENSOR_IS(n, BED) \ - || TEMP_SENSOR_IS(n, CHAMBER) \ - || TEMP_SENSOR_IS(n, COOLER) \ - || TEMP_SENSOR_IS(n, PROBE) \ - || TEMP_SENSOR_IS(n, BOARD) \ - || TEMP_SENSOR_IS(n, REDUNDANT) ) - typedef struct { int16_t value; celsius_t celsius; } temp_entry_t; // Pt1000 and Pt100 handling From 2e0bde37d77c8c0d8274d74f18cb27be2c232278 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 17 Oct 2021 22:10:08 -0500 Subject: [PATCH 018/532] =?UTF-8?q?=F0=9F=8E=A8=20Add=20MKS=20UI=20goto=5F?= =?UTF-8?q?previous=5Fui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/extui/mks_ui/draw_about.cpp | 3 +- .../lcd/extui/mks_ui/draw_baby_stepping.cpp | 3 +- .../lcd/extui/mks_ui/draw_change_speed.cpp | 3 +- .../src/lcd/extui/mks_ui/draw_cloud_bind.cpp | 3 +- Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp | 30 +++++++------------ .../src/lcd/extui/mks_ui/draw_extrusion.cpp | 3 +- Marlin/src/lcd/extui/mks_ui/draw_fan.cpp | 2 +- .../lcd/extui/mks_ui/draw_filament_change.cpp | 3 +- Marlin/src/lcd/extui/mks_ui/draw_home.cpp | 3 +- Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp | 12 +++----- .../src/lcd/extui/mks_ui/draw_move_motor.cpp | 3 +- .../src/lcd/extui/mks_ui/draw_number_key.cpp | 3 +- .../src/lcd/extui/mks_ui/draw_operation.cpp | 3 +- Marlin/src/lcd/extui/mks_ui/draw_preHeat.cpp | 3 +- .../extui/mks_ui/draw_touch_calibration.cpp | 3 +- .../mks_ui/draw_tramming_pos_settings.cpp | 3 +- Marlin/src/lcd/extui/mks_ui/draw_ui.cpp | 5 ++++ Marlin/src/lcd/extui/mks_ui/draw_ui.h | 1 + .../lcd/extui/mks_ui/draw_wifi_settings.cpp | 3 +- 19 files changed, 35 insertions(+), 57 deletions(-) diff --git a/Marlin/src/lcd/extui/mks_ui/draw_about.cpp b/Marlin/src/lcd/extui/mks_ui/draw_about.cpp index 3424bf7a0e..49ee6eee73 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_about.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_about.cpp @@ -39,8 +39,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { if (event != LV_EVENT_RELEASED) return; switch (obj->mks_obj_id) { case ID_A_RETURN: - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); break; } } diff --git a/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.cpp b/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.cpp index bcc075ae64..1a6767dcc1 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.cpp @@ -107,8 +107,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { TERN_(EEPROM_SETTINGS, (void)settings.save()); has_adjust_z = 0; } - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); break; } } diff --git a/Marlin/src/lcd/extui/mks_ui/draw_change_speed.cpp b/Marlin/src/lcd/extui/mks_ui/draw_change_speed.cpp index 5248816f54..6b07d4b719 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_change_speed.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_change_speed.cpp @@ -110,8 +110,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { disp_speed_step(); break; case ID_C_RETURN: - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); break; } } diff --git a/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.cpp b/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.cpp index 1d0ae7775b..1dae0ebe22 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.cpp @@ -49,8 +49,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) { if (event != LV_EVENT_RELEASED) return; switch (obj->mks_obj_id) { case ID_CLOUD_BIND_RETURN: - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); break; case ID_CLOUD_RELEASE_BIND: if (cloud_para.state == 0x12) { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp b/Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp index 3cdb07b608..a69c54bcff 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp @@ -136,19 +136,16 @@ static void btn_ok_event_cb(lv_obj_t *btn, lv_event_t event) { else if (DIALOG_IS(PAUSE_MESSAGE_OPTION)) pause_menu_response = PAUSE_RESPONSE_EXTRUDE_MORE; else if (DIALOG_IS(PAUSE_MESSAGE_RESUME)) { - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); } #endif else if (DIALOG_IS(STORE_EEPROM_TIPS)) { TERN_(EEPROM_SETTINGS, (void)settings.save()); - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); } else if (DIALOG_IS(READ_EEPROM_TIPS)) { TERN_(EEPROM_SETTINGS, (void)settings.load()); - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); } else if (DIALOG_IS(REVERT_EEPROM_TIPS)) { TERN_(EEPROM_SETTINGS, (void)settings.reset()); @@ -166,27 +163,23 @@ static void btn_ok_event_cb(lv_obj_t *btn, lv_event_t event) { } else if (DIALOG_IS(WIFI_CONFIG_TIPS)) { uiCfg.configWifi = true; - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); } else if (DIALOG_IS(TYPE_FILAMENT_HEAT_LOAD_COMPLETED)) uiCfg.filament_heat_completed_load = true; else if (DIALOG_IS(TYPE_FILAMENT_HEAT_UNLOAD_COMPLETED)) uiCfg.filament_heat_completed_unload = true; else if (DIALOG_IS(TYPE_FILAMENT_LOAD_COMPLETED, TYPE_FILAMENT_UNLOAD_COMPLETED)) { - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); } #if ENABLED(MKS_WIFI_MODULE) else if (DIALOG_IS(TYPE_UNBIND)) { cloud_unbind(); - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); } #endif else { - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); } } @@ -197,8 +190,7 @@ static void btn_cancel_event_cb(lv_obj_t *btn, lv_event_t event) { } else if (DIALOG_IS(TYPE_FILAMENT_LOAD_HEAT, TYPE_FILAMENT_UNLOAD_HEAT, TYPE_FILAMENT_HEAT_LOAD_COMPLETED, TYPE_FILAMENT_HEAT_UNLOAD_COMPLETED)) { thermalManager.setTargetHotend(uiCfg.hotendTargetTempBak, uiCfg.extruderIndex); - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); } else if (DIALOG_IS(TYPE_FILAMENT_LOADING, TYPE_FILAMENT_UNLOADING)) { queue.enqueue_one(F("M410")); @@ -210,12 +202,10 @@ static void btn_cancel_event_cb(lv_obj_t *btn, lv_event_t event) { uiCfg.filament_unloading_time_flg = false; uiCfg.filament_unloading_time_cnt = 0; thermalManager.setTargetHotend(uiCfg.hotendTargetTempBak, uiCfg.extruderIndex); - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); } else { - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); } } diff --git a/Marlin/src/lcd/extui/mks_ui/draw_extrusion.cpp b/Marlin/src/lcd/extui/mks_ui/draw_extrusion.cpp index f3204eb962..85894a5e92 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_extrusion.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_extrusion.cpp @@ -106,8 +106,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { disp_ext_speed(); break; case ID_E_RETURN: - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); break; } } diff --git a/Marlin/src/lcd/extui/mks_ui/draw_fan.cpp b/Marlin/src/lcd/extui/mks_ui/draw_fan.cpp index b2107709a4..12b47d9e94 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_fan.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_fan.cpp @@ -55,7 +55,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { case ID_F_HIGH: fanPercent = 100; break; case ID_F_MID: fanPercent = 50; break; case ID_F_OFF: fanPercent = 0; break; - case ID_F_RETURN: clear_cur_ui(); draw_return_ui(); return; + case ID_F_RETURN: goto_previous_ui(); return; } thermalManager.set_fan_speed(0, map(fanPercent, 0, 100, 0, 255)); if (obj->mks_obj_id != ID_F_RETURN) disp_fan_value(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_filament_change.cpp b/Marlin/src/lcd/extui/mks_ui/draw_filament_change.cpp index 61d212303b..be70fa9b4e 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_filament_change.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_filament_change.cpp @@ -101,8 +101,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { planner.set_e_position_mm((destination.e = current_position.e = uiCfg.current_e_position_bak)); thermalManager.setTargetHotend(uiCfg.hotendTargetTempBak, uiCfg.extruderIndex); - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); break; } } diff --git a/Marlin/src/lcd/extui/mks_ui/draw_home.cpp b/Marlin/src/lcd/extui/mks_ui/draw_home.cpp index 04ebd95a09..a819fffacd 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_home.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_home.cpp @@ -67,8 +67,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { queue.inject(F("M84XY")); break; case ID_H_RETURN: - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); break; } } diff --git a/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp b/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp index 6d7bdc2aa7..90b181d6b5 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp @@ -105,8 +105,7 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) { } else if (strcmp_P(txt, PSTR(LV_SYMBOL_CLOSE)) == 0) { if (kb->event_cb != lv_kb_def_event_cb) { - lv_clear_keyboard(); - draw_return_ui(); + goto_previous_ui(); } else { lv_kb_set_ta(kb, nullptr); // De-assign the text area to hide its cursor if needed @@ -122,13 +121,11 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) { #if ENABLED(MKS_WIFI_MODULE) case wifiName: memcpy(uiCfg.wifi_name, ret_ta_txt, sizeof(uiCfg.wifi_name)); - lv_clear_keyboard(); - draw_return_ui(); + goto_previous_ui(); break; case wifiPassWord: memcpy(uiCfg.wifi_key, ret_ta_txt, sizeof(uiCfg.wifi_name)); - lv_clear_keyboard(); - draw_return_ui(); + goto_previous_ui(); break; case wifiConfig: ZERO(uiCfg.wifi_name); @@ -160,8 +157,7 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) { uint8_t buf[100]; strncpy((char *)buf, ret_ta_txt, sizeof(buf)); update_gcode_command(AUTO_LEVELING_COMMAND_ADDR, buf); - lv_clear_keyboard(); - draw_return_ui(); + goto_previous_ui(); break; case GCodeCommand: if (ret_ta_txt[0] && !queue.ring_buffer.full(3)) { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_move_motor.cpp b/Marlin/src/lcd/extui/mks_ui/draw_move_motor.cpp index baa8d48da3..635421b4c3 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_move_motor.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_move_motor.cpp @@ -83,8 +83,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { disp_move_dist(); break; case ID_M_RETURN: - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); return; } disp_cur_pos(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_number_key.cpp b/Marlin/src/lcd/extui/mks_ui/draw_number_key.cpp index 630bb4efef..deed037248 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_number_key.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_number_key.cpp @@ -453,8 +453,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { case ID_NUM_CONFIRM: last_disp_state = NUMBER_KEY_UI; if (strlen(key_value) != 0) set_value_confirm(); - lv_clear_number_key(); - draw_return_ui(); + goto_previous_ui(); break; } } diff --git a/Marlin/src/lcd/extui/mks_ui/draw_operation.cpp b/Marlin/src/lcd/extui/mks_ui/draw_operation.cpp index 8be74c6b9a..ffe714fca9 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_operation.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_operation.cpp @@ -90,8 +90,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { lv_draw_change_speed(); break; case ID_O_RETURN: - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); break; case ID_O_POWER_OFF: if (gCfgItems.finish_power_off) { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_preHeat.cpp b/Marlin/src/lcd/extui/mks_ui/draw_preHeat.cpp index fe651133c3..fe289d8cad 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_preHeat.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_preHeat.cpp @@ -159,8 +159,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { disp_desire_temp(); break; case ID_P_RETURN: - clear_cur_ui(); - draw_return_ui(); + goto_previous_ui(); break; case ID_P_ABS: if (uiCfg.curTempType == 0) { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_touch_calibration.cpp b/Marlin/src/lcd/extui/mks_ui/draw_touch_calibration.cpp index c7e2d5bc31..e0c663e282 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_touch_calibration.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_touch_calibration.cpp @@ -99,8 +99,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { switch (obj->mks_obj_id) { case ID_TC_RETURN: TERN_(MKS_TEST, current_disp_ui = 1); - lv_clear_touch_calibration_screen(); - draw_return_ui(); + goto_previous_ui(); break; } } diff --git a/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.cpp index d5501a3a45..845ef1d807 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.cpp @@ -54,8 +54,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { switch (obj->mks_obj_id) { case ID_MANUAL_POS_RETURN: uiCfg.para_ui_page = false; - lv_clear_tramming_pos_settings(); - draw_return_ui(); + goto_previous_ui(); return; case ID_MANUAL_POS_X1: value = level_pos_x1; diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp index 37b06356e0..66b2deda66 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp @@ -1082,6 +1082,11 @@ void draw_return_ui() { } } +void goto_previous_ui() { + clear_cur_ui(); + draw_return_ui(); +} + // Set the same image for both Released and Pressed void lv_imgbtn_set_src_both(lv_obj_t *imgbtn, const void *src) { lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_REL, src); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.h b/Marlin/src/lcd/extui/mks_ui/draw_ui.h index a74d7e1ae2..55ea6220e0 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ui.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.h @@ -467,6 +467,7 @@ void lv_eom_hook(void *); void GUI_RefreshPage(); void clear_cur_ui(); void draw_return_ui(); +void goto_previous_ui(); void sd_detection(); void gCfg_to_spiFlah(); void print_time_count(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.cpp index fb9fb4f9eb..cf086b45b1 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.cpp @@ -47,8 +47,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { if (event != LV_EVENT_RELEASED) return; switch (obj->mks_obj_id) { case ID_WIFI_RETURN: - lv_clear_wifi_settings(); - draw_return_ui(); + goto_previous_ui(); break; case ID_WIFI_MODEL: if (gCfgItems.wifi_mode_sel == AP_MODEL) { From 28e2c358d1238d2d0db9e74b23e83f6e3bff89d4 Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Mon, 18 Oct 2021 02:40:47 -0500 Subject: [PATCH 019/532] =?UTF-8?q?=F0=9F=8E=A8=20Suppress=20type=20warnin?= =?UTF-8?q?g=20(#22976)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/controllerfan.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/feature/controllerfan.cpp b/Marlin/src/feature/controllerfan.cpp index 5efddbb111..03ef31e414 100644 --- a/Marlin/src/feature/controllerfan.cpp +++ b/Marlin/src/feature/controllerfan.cpp @@ -58,7 +58,7 @@ void ControllerFan::update() { // - At least one stepper driver is enabled // - The heated bed is enabled // - TEMP_SENSOR_BOARD is reporting >= CONTROLLER_FAN_MIN_BOARD_TEMP - const ena_mask_t axis_mask = TERN(CONTROLLER_FAN_USE_Z_ONLY, _BV(Z_AXIS), ~TERN0(CONTROLLER_FAN_IGNORE_Z, _BV(Z_AXIS))); + const ena_mask_t axis_mask = TERN(CONTROLLER_FAN_USE_Z_ONLY, _BV(Z_AXIS), (ena_mask_t)~TERN0(CONTROLLER_FAN_IGNORE_Z, _BV(Z_AXIS))); if ( (stepper.axis_enabled.bits & axis_mask) || TERN0(HAS_HEATED_BED, thermalManager.temp_bed.soft_pwm_amount > 0) || TERN0(HAS_CONTROLLER_FAN_MIN_BOARD_TEMP, thermalManager.wholeDegBoard() >= CONTROLLER_FAN_MIN_BOARD_TEMP) From d3a84bc584875dc3e022f2d9fd8065207caef204 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Mon, 18 Oct 2021 00:51:01 -0700 Subject: [PATCH 020/532] =?UTF-8?q?=E2=9C=A8=20=20BTT=20Octopus=20Pro=20V1?= =?UTF-8?q?.0=20(STM32F446ZET6)=20(#22971)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/boards.h | 39 ++++++++++--------- Marlin/src/pins/pins.h | 2 + .../pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h | 39 +++++++++++++++++++ .../src/pins/stm32f4/pins_BTT_OCTOPUS_V1_0.h | 9 +++++ .../src/pins/stm32f4/pins_BTT_OCTOPUS_V1_1.h | 9 +++++ .../pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h | 11 +++--- ini/stm32f4.ini | 4 +- 7 files changed, 86 insertions(+), 27 deletions(-) create mode 100644 Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index dd08f6a1b4..86fe878837 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -384,25 +384,26 @@ #define BOARD_BTT_GTR_V1_0 4214 // BigTreeTech GTR v1.0 (STM32F407IGT) #define BOARD_BTT_OCTOPUS_V1_0 4215 // BigTreeTech Octopus v1.0 (STM32F446ZET6) #define BOARD_BTT_OCTOPUS_V1_1 4216 // BigTreeTech Octopus v1.1 (STM32F446ZET6) -#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 (STM32F446VET6) -#define BOARD_FYSETC_S6 4221 // FYSETC S6 (STM32F446VET6) -#define BOARD_FYSETC_S6_V2_0 4222 // FYSETC S6 v2.0 (STM32F446VET6) -#define BOARD_FYSETC_SPIDER 4223 // FYSETC Spider (STM32F446VET6) -#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_MONSTER8 4228 // MKS Monster8 (STM32F407VGT6) -#define BOARD_ANET_ET4 4229 // ANET ET4 V1.x (STM32F407VGT6) -#define BOARD_ANET_ET4P 4230 // ANET ET4P V1.x (STM32F407VGT6) -#define BOARD_FYSETC_CHEETAH_V20 4231 // FYSETC Cheetah V2.0 -#define BOARD_TH3D_EZBOARD_LITE_V2 4232 // TH3D EZBoard Lite v2.0 -#define BOARD_INDEX_REV03 4233 // Index PnP Controller REV03 (STM32F407VET6/VGT6) -#define BOARD_MKS_ROBIN_NANO_V1_3_F4 4234 // MKS Robin Nano V1.3 and MKS Robin Nano-S V1.3 (STM32F407VET6) -#define BOARD_MKS_EAGLE 4235 // MKS Eagle (STM32F407VET6) +#define BOARD_BTT_OCTOPUS_PRO_V1_0 4217 // BigTreeTech Octopus Pro v1.0 (STM32F446ZET6/STM32F429ZGT6) +#define BOARD_LERDGE_K 4218 // Lerdge K (STM32F407ZG) +#define BOARD_LERDGE_S 4219 // Lerdge S (STM32F407VE) +#define BOARD_LERDGE_X 4220 // Lerdge X (STM32F407VE) +#define BOARD_VAKE403D 4221 // VAkE 403D (STM32F446VET6) +#define BOARD_FYSETC_S6 4222 // FYSETC S6 (STM32F446VET6) +#define BOARD_FYSETC_S6_V2_0 4223 // FYSETC S6 v2.0 (STM32F446VET6) +#define BOARD_FYSETC_SPIDER 4224 // FYSETC Spider (STM32F446VET6) +#define BOARD_FLYF407ZG 4225 // FLYmaker FLYF407ZG (STM32F407ZG) +#define BOARD_MKS_ROBIN2 4226 // MKS_ROBIN2 (STM32F407ZE) +#define BOARD_MKS_ROBIN_PRO_V2 4227 // MKS Robin Pro V2 (STM32F407VE) +#define BOARD_MKS_ROBIN_NANO_V3 4228 // MKS Robin Nano V3 (STM32F407VG) +#define BOARD_MKS_MONSTER8 4229 // MKS Monster8 (STM32F407VGT6) +#define BOARD_ANET_ET4 4230 // ANET ET4 V1.x (STM32F407VGT6) +#define BOARD_ANET_ET4P 4231 // ANET ET4P V1.x (STM32F407VGT6) +#define BOARD_FYSETC_CHEETAH_V20 4232 // FYSETC Cheetah V2.0 +#define BOARD_TH3D_EZBOARD_LITE_V2 4233 // TH3D EZBoard Lite v2.0 +#define BOARD_INDEX_REV03 4234 // Index PnP Controller REV03 (STM32F407VET6/VGT6) +#define BOARD_MKS_ROBIN_NANO_V1_3_F4 4235 // MKS Robin Nano V1.3 and MKS Robin Nano-S V1.3 (STM32F407VET6) +#define BOARD_MKS_EAGLE 4236 // MKS Eagle (STM32F407VET6) // // ARM Cortex M7 diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 111038d875..6e5a2e51eb 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -615,6 +615,8 @@ #include "stm32f4/pins_BTT_OCTOPUS_V1_0.h" // STM32F4 env:BIGTREE_OCTOPUS_V1 env:BIGTREE_OCTOPUS_V1_USB #elif MB(BTT_OCTOPUS_V1_1) #include "stm32f4/pins_BTT_OCTOPUS_V1_1.h" // STM32F4 env:BIGTREE_OCTOPUS_V1 env:BIGTREE_OCTOPUS_V1_USB +#elif MB(BTT_OCTOPUS_PRO_V1_0) + #include "stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h" // STM32F4 env:BIGTREE_OCTOPUS_V1 env:BIGTREE_OCTOPUS_V1_USB #elif MB(LERDGE_K) #include "stm32f4/pins_LERDGE_K.h" // STM32F4 env:LERDGEK env:LERDGEK_usb_flash_drive #elif MB(LERDGE_S) diff --git a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h new file mode 100644 index 0000000000..a93ed68201 --- /dev/null +++ b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h @@ -0,0 +1,39 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +#define BOARD_INFO_NAME "BTT OCTOPUS PRO V1.0" + +// +// Temperature Sensors +// +#if TEMP_SENSOR_0 == -5 + #define TEMP_0_CS_PIN PF8 // Max31865 CS + #define TEMP_0_SCK_PIN PA5 + #define TEMP_0_MISO_PIN PA6 + #define TEMP_0_MOSI_PIN PA7 + #define SOFTWARE_SPI // Max31865 and LCD SD share a set of SPIs, Set SD to softwareSPI for Max31865 +#else + #define TEMP_0_PIN PF4 // TH0 +#endif + +#include "pins_BTT_OCTOPUS_V1_common.h" diff --git a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_0.h index e51e0a24bb..c2f02d0d8e 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_0.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_0.h @@ -23,4 +23,13 @@ #define BOARD_INFO_NAME "BTT OCTOPUS V1.0" +// +// Temperature Sensors +// +#if TEMP_SENSOR_0 == 20 + #define TEMP_0_PIN PF8 // PT100 Connector +#else + #define TEMP_0_PIN PF4 // TH0 +#endif + #include "pins_BTT_OCTOPUS_V1_common.h" diff --git a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_1.h b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_1.h index 93240c16b8..daa0e8fbfd 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_1.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_1.h @@ -23,4 +23,13 @@ #define BOARD_INFO_NAME "BTT OCTOPUS V1.1" +// +// Temperature Sensors +// +#if TEMP_SENSOR_0 == 20 + #define TEMP_0_PIN PF8 // PT100 Connector +#else + #define TEMP_0_PIN PF4 // TH0 +#endif + #include "pins_BTT_OCTOPUS_V1_common.h" diff --git a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h index 7ab8012d88..655e65da47 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h @@ -61,7 +61,11 @@ // Z Probe (when not Z_MIN_PIN) // #ifndef Z_MIN_PROBE_PIN - #define Z_MIN_PROBE_PIN PB7 + #if ENABLED(BLTOUCH) + #define Z_MIN_PROBE_PIN PB7 + #else + #define Z_MIN_PROBE_PIN PC5 // Probe (Proximity switch) port + #endif #endif // @@ -235,11 +239,6 @@ // Temperature Sensors // #define TEMP_BED_PIN PF3 // TB -#if TEMP_SENSOR_0 == 20 - #define TEMP_0_PIN PF8 // PT100 Connector -#else - #define TEMP_0_PIN PF4 // TH0 -#endif #define TEMP_1_PIN PF5 // TH1 #define TEMP_2_PIN PF6 // TH2 #define TEMP_3_PIN PF7 // TH3 diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index 4544bf56a0..f4968a55e4 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -231,7 +231,7 @@ build_flags = ${env:BIGTREE_SKR_2.build_flags} -DUSBD_USE_CDC_MSC build_unflags = ${env:BIGTREE_SKR_2.build_unflags} -DUSBD_USE_CDC # -# BigTreeTech Octopus V1.0/1.1 (STM32F446ZET6 ARM Cortex-M4) +# BigTreeTech Octopus V1.0/1.1 / Octopus Pro V1.0 (STM32F446ZET6 ARM Cortex-M4) # [env:BIGTREE_OCTOPUS_V1] platform = ${common_stm32.platform} @@ -242,7 +242,7 @@ build_flags = ${stm32_variant.build_flags} -DSTM32F446_5VX -DUSE_USB_HS_IN_FS # -# BigTreeTech Octopus V1.0/1.1 (STM32F446ZET6 ARM Cortex-M4) with USB Flash Drive Support +# BigTreeTech Octopus V1.0/1.1 / Octopus Pro V1.0 (STM32F446ZET6 ARM Cortex-M4) with USB Flash Drive Support # [env:BIGTREE_OCTOPUS_V1_USB] platform = ${common_stm32.platform} From ec57879c595ceffff8c136bf8acd5b4bce33a44a Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Mon, 18 Oct 2021 20:54:20 +1300 Subject: [PATCH 021/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20MMU1=20compile=20(?= =?UTF-8?q?#22965)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/MarlinCore.cpp | 4 ++++ Marlin/src/feature/mmu/mmu.cpp | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 2e9f6a6fc2..eb57835f96 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -216,6 +216,10 @@ #include "feature/controllerfan.h" #endif +#if HAS_PRUSA_MMU1 + #include "feature/mmu/mmu.h" +#endif + #if HAS_PRUSA_MMU2 #include "feature/mmu/mmu2.h" #endif diff --git a/Marlin/src/feature/mmu/mmu.cpp b/Marlin/src/feature/mmu/mmu.cpp index 6340f3c301..58c49ed224 100644 --- a/Marlin/src/feature/mmu/mmu.cpp +++ b/Marlin/src/feature/mmu/mmu.cpp @@ -24,9 +24,9 @@ #if HAS_PRUSA_MMU1 -#include "../MarlinCore.h" -#include "../module/planner.h" -#include "../module/stepper.h" +#include "../../MarlinCore.h" +#include "../../module/planner.h" +#include "../../module/stepper.h" void mmu_init() { SET_OUTPUT(E_MUX0_PIN); From 7bab1c92e72f8e1bdb5c04287c4ee82a89dba600 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Mon, 18 Oct 2021 00:57:54 -0700 Subject: [PATCH 022/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20I2C=20EEPROM=20SDA?= =?UTF-8?q?/SCL=20aliases=20with=20SKR=20Mini=20E3=20V2=20(#22955)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_V2_0.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_V2_0.h b/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_V2_0.h index c22409923b..2ab7a61e0b 100644 --- a/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_V2_0.h +++ b/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_V2_0.h @@ -30,8 +30,8 @@ #define I2C_EEPROM #define SOFT_I2C_EEPROM #define MARLIN_EEPROM_SIZE 0x1000 // 4KB - #define I2C_SDA_PIN SDA - #define I2C_SCL_PIN SCL + #define I2C_SDA_PIN PB7 + #define I2C_SCL_PIN PB6 #undef NO_EEPROM_SELECTED #endif From 357fb8d98458883144e29a39e9f4d5c033f803a3 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Mon, 18 Oct 2021 01:11:16 -0700 Subject: [PATCH 023/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20max=20chamber=20fa?= =?UTF-8?q?n=20speed=20(#22977)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/temperature.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 4320a530c5..5e8f4c9d95 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -1494,8 +1494,8 @@ void Temperature::manage_heater() { #elif CHAMBER_FAN_MODE == 3 fan_chamber_pwm = CHAMBER_FAN_BASE + _MAX((CHAMBER_FAN_FACTOR) * (temp_chamber.celsius - temp_chamber.target), 0); #endif - NOMORE(fan_chamber_pwm, 225); - set_fan_speed(CHAMBER_FAN_INDEX, fan_chamber_pwm); // TODO: instead of fan 2, set to chamber fan + NOMORE(fan_chamber_pwm, 255); + set_fan_speed(CHAMBER_FAN_INDEX, fan_chamber_pwm); #endif #if ENABLED(CHAMBER_VENT) From 3a77894efd579955968a4bcf023b6d8ae937ae05 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 19 Oct 2021 01:06:11 +0000 Subject: [PATCH 024/532] [cron] Bump distribution date (2021-10-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 f0f467ba58..f88ecddddc 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 "2021-10-18" +//#define STRING_DISTRIBUTION_DATE "2021-10-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 6341981970..eb6f967756 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 "2021-10-18" + #define STRING_DISTRIBUTION_DATE "2021-10-19" #endif /** From c91451d215506b3c3977b9ae4b146c98b48acdeb Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 19 Oct 2021 02:49:35 -0500 Subject: [PATCH 025/532] =?UTF-8?q?=F0=9F=94=A8=20Update=20'pio=20vscode?= =?UTF-8?q?=20init'=20detection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PlatformIO/scripts/common-dependencies.py | 9 ++++++--- .../PlatformIO/scripts/download_mks_assets.py | 15 ++++++++++----- buildroot/share/PlatformIO/scripts/pioutil.py | 8 ++++++++ .../share/PlatformIO/scripts/preflight-checks.py | 11 ++++++----- 4 files changed, 30 insertions(+), 13 deletions(-) create mode 100644 buildroot/share/PlatformIO/scripts/pioutil.py diff --git a/buildroot/share/PlatformIO/scripts/common-dependencies.py b/buildroot/share/PlatformIO/scripts/common-dependencies.py index 83dfeca879..f523b12069 100644 --- a/buildroot/share/PlatformIO/scripts/common-dependencies.py +++ b/buildroot/share/PlatformIO/scripts/common-dependencies.py @@ -2,7 +2,12 @@ # common-dependencies.py # Convenience script to check dependencies and add libs and sources for Marlin Enabled Features # -import subprocess,os,re +import subprocess,os,re,pioutil +Import("env") + +# Detect that 'vscode init' is running +if pioutil.is_vscode_init(): + env.Exit(0) PIO_VERSION_MIN = (5, 0, 3) try: @@ -31,8 +36,6 @@ except: from platformio.package.meta import PackageSpec from platformio.project.config import ProjectConfig -Import("env") - #print(env.Dump()) try: diff --git a/buildroot/share/PlatformIO/scripts/download_mks_assets.py b/buildroot/share/PlatformIO/scripts/download_mks_assets.py index e922fed2be..251a74a4cc 100644 --- a/buildroot/share/PlatformIO/scripts/download_mks_assets.py +++ b/buildroot/share/PlatformIO/scripts/download_mks_assets.py @@ -3,10 +3,15 @@ # Added by HAS_TFT_LVGL_UI to download assets from Makerbase repo # Import("env") -import os,requests,zipfile,tempfile,shutil +import os,requests,zipfile,tempfile,shutil,pioutil -url = "https://github.com/makerbase-mks/Mks-Robin-Nano-Marlin2.0-Firmware/archive/master.zip" -zip_path = os.path.join(env.Dictionary("PROJECT_LIBDEPS_DIR"), "mks-assets.zip") +# Detect that 'vscode init' is running +if pioutil.is_vscode_init(): + env.Exit(0) + +url = "https://github.com/makerbase-mks/Mks-Robin-Nano-Marlin2.0-Firmware/archive/0263cdaccf.zip" +deps_path = env.Dictionary("PROJECT_LIBDEPS_DIR") +zip_path = os.path.join(deps_path, "mks-assets.zip") assets_path = os.path.join(env.Dictionary("PROJECT_BUILD_DIR"), env.Dictionary("PIOENV"), "assets") def download_mks_assets(): @@ -14,8 +19,8 @@ def download_mks_assets(): r = requests.get(url, stream=True) # the user may have a very clean workspace, # so create the PROJECT_LIBDEPS_DIR directory if not exits - if os.path.exists(env.Dictionary("PROJECT_LIBDEPS_DIR")) == False: - os.mkdir(env.Dictionary("PROJECT_LIBDEPS_DIR")) + if os.path.exists(deps_path) == False: + os.mkdir(deps_path) with open(zip_path, 'wb') as fd: for chunk in r.iter_content(chunk_size=128): fd.write(chunk) diff --git a/buildroot/share/PlatformIO/scripts/pioutil.py b/buildroot/share/PlatformIO/scripts/pioutil.py new file mode 100644 index 0000000000..f0c021fca7 --- /dev/null +++ b/buildroot/share/PlatformIO/scripts/pioutil.py @@ -0,0 +1,8 @@ +# +# buildroot/share/PlatformIO/scripts/pioutil.py +# + +# Detect that 'vscode init' is running +def is_vscode_init(): + from SCons.Script import COMMAND_LINE_TARGETS + return "idedata" in COMMAND_LINE_TARGETS or "_idedata" in COMMAND_LINE_TARGETS diff --git a/buildroot/share/PlatformIO/scripts/preflight-checks.py b/buildroot/share/PlatformIO/scripts/preflight-checks.py index b949df97c8..0dab3e4b1f 100644 --- a/buildroot/share/PlatformIO/scripts/preflight-checks.py +++ b/buildroot/share/PlatformIO/scripts/preflight-checks.py @@ -2,9 +2,13 @@ # preflight-checks.py # Check for common issues prior to compiling # -import os,re,sys +import os,re,sys,pioutil Import("env") +# Detect that 'vscode init' is running +if pioutil.is_vscode_init(): + env.Exit(0) + def get_envs_for_board(board): with open(os.path.join("Marlin", "src", "pins", "pins.h"), "r") as file: @@ -94,7 +98,4 @@ def sanity_check_target(): err = "ERROR: Old files fell into your Marlin folder. Remove %s and try again" % ", ".join(mixedin) raise SystemExit(err) -# Detect that 'vscode init' is running -from SCons.Script import COMMAND_LINE_TARGETS -if "idedata" not in COMMAND_LINE_TARGETS: - sanity_check_target() +sanity_check_target() From 6cf6c4cd852bd09c509407057e81e37e36bad52e Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 19 Oct 2021 02:56:44 -0500 Subject: [PATCH 026/532] =?UTF-8?q?=F0=9F=94=A8=20Delete=20after=20encrypt?= =?UTF-8?q?.=20Lerdge=20encrypt=20only=20once?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/PlatformIO/scripts/lerdge.py | 47 ++++++++++---------- buildroot/share/PlatformIO/scripts/marlin.py | 16 ++++--- ini/stm32f4.ini | 4 +- 3 files changed, 34 insertions(+), 33 deletions(-) diff --git a/buildroot/share/PlatformIO/scripts/lerdge.py b/buildroot/share/PlatformIO/scripts/lerdge.py index 654f0ad4df..144ab64a9a 100644 --- a/buildroot/share/PlatformIO/scripts/lerdge.py +++ b/buildroot/share/PlatformIO/scripts/lerdge.py @@ -12,37 +12,36 @@ from SCons.Script import DefaultEnvironment board = DefaultEnvironment().BoardConfig() def encryptByte(byte): - byte = 0xFF & ((byte << 6) | (byte >> 2)) - i = 0x58 + byte - j = 0x05 + byte + (i >> 8) - byte = (0xF8 & i) | (0x07 & j) - return byte + byte = 0xFF & ((byte << 6) | (byte >> 2)) + i = 0x58 + byte + j = 0x05 + byte + (i >> 8) + byte = (0xF8 & i) | (0x07 & j) + return byte def encrypt_file(input, output_file, file_length): - input_file = bytearray(input.read()) - for i in range(len(input_file)): - result = encryptByte(input_file[i]) - input_file[i] = result - - output_file.write(input_file) - return + input_file = bytearray(input.read()) + for i in range(len(input_file)): + input_file[i] = encryptByte(input_file[i]) + output_file.write(input_file) # Encrypt ${PROGNAME}.bin and save it with the name given in build.encrypt def encrypt(source, target, env): - fwname = board.get("build.encrypt") - print("Encrypting %s to %s" % (target[0].path, fwname)) - firmware = open(target[0].path, "rb") - renamed = open(target[0].dir.path + "/" + fwname, "wb") - length = os.path.getsize(target[0].path) + fwpath = target[0].path + enname = board.get("build.encrypt") + print("Encrypting %s to %s" % (fwpath, enname)) + fwfile = open(fwpath, "rb") + enfile = open(target[0].dir.path + "/" + enname, "wb") + length = os.path.getsize(fwpath) - encrypt_file(firmware, renamed, length) + encrypt_file(fwfile, enfile, length) - firmware.close() - renamed.close() + fwfile.close() + enfile.close() + os.remove(fwpath) if 'encrypt' in board.get("build").keys(): - if board.get("build.encrypt") != "": - marlin.add_post_action(encrypt) + if board.get("build.encrypt") != "": + marlin.add_post_action(encrypt) else: - print("LERDGE builds require output file via board_build.encrypt = 'filename' parameter") - exit(1) + print("LERDGE builds require output file via board_build.encrypt = 'filename' parameter") + exit(1) diff --git a/buildroot/share/PlatformIO/scripts/marlin.py b/buildroot/share/PlatformIO/scripts/marlin.py index 3949037904..caa0c89749 100644 --- a/buildroot/share/PlatformIO/scripts/marlin.py +++ b/buildroot/share/PlatformIO/scripts/marlin.py @@ -48,22 +48,24 @@ def encrypt_mks(source, target, env, new_name): key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E] - firmware = open(target[0].path, "rb") - renamed = open(target[0].dir.path + "/" + new_name, "wb") - length = os.path.getsize(target[0].path) + fwpath = target[0].path + fwfile = open(fwpath, "rb") + enfile = open(target[0].dir.path + "/" + new_name, "wb") + length = os.path.getsize(fwpath) position = 0 try: while position < length: - byte = firmware.read(1) + byte = fwfile.read(1) if position >= 320 and position < 31040: byte = chr(ord(byte) ^ key[position & 31]) if sys.version_info[0] > 2: byte = bytes(byte, 'latin1') - renamed.write(byte) + enfile.write(byte) position += 1 finally: - firmware.close() - renamed.close() + fwfile.close() + enfile.close() + os.remove(fwpath) def add_post_action(action): env.AddPostAction(join("$BUILD_DIR", "${PROGNAME}.bin"), action); diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index f4968a55e4..a6bc125d21 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -263,13 +263,13 @@ platform = ${common_stm32.platform} extends = stm32_variant board = marlin_STM32F407ZGT6 board_build.variant = MARLIN_LERDGE -board_build.encrypt = firmware.bin board_build.offset = 0x10000 build_flags = ${stm32_variant.build_flags} -DSTM32F4 -DSTM32F4xx -DTARGET_STM32F4 -DDISABLE_GENERIC_SERIALUSB -DARDUINO_ARCH_STM32 -DLERDGE_TFT35 build_unflags = ${stm32_variant.build_unflags} -DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483 -extra_scripts = ${stm32_variant.extra_scripts} +extra_scripts = ${common_stm32.extra_scripts} + pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py buildroot/share/PlatformIO/scripts/lerdge.py # From f8ec8e5bf6df342a27e5dc9e39d6605c50f64194 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 19 Oct 2021 04:03:03 -0500 Subject: [PATCH 027/532] =?UTF-8?q?=F0=9F=92=A1=20Sub-include=20pins=20lab?= =?UTF-8?q?els?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/lpc1769/pins_BTT_SKR_V1_4_TURBO.h | 2 +- Marlin/src/pins/ramps/pins_AZTEEG_X3.h | 2 +- Marlin/src/pins/ramps/pins_BQ_ZUM_MEGA_3D.h | 2 +- Marlin/src/pins/ramps/pins_K8200.h | 2 +- Marlin/src/pins/ramps/pins_K8400.h | 2 +- Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h | 2 +- Marlin/src/pins/ramps/pins_MKS_BASE_10.h | 2 +- Marlin/src/pins/ramps/pins_MKS_BASE_14.h | 2 +- Marlin/src/pins/ramps/pins_MKS_BASE_15.h | 2 +- Marlin/src/pins/ramps/pins_MKS_BASE_16.h | 2 +- Marlin/src/pins/ramps/pins_MKS_BASE_HEROIC.h | 2 +- Marlin/src/pins/ramps/pins_RIGIDBOARD_V2.h | 2 +- Marlin/src/pins/ramps/pins_TRIGORILLA_13.h | 2 +- Marlin/src/pins/ramps/pins_ZRIB_V20.h | 2 +- Marlin/src/pins/ramps/pins_ZRIB_V52.h | 2 +- Marlin/src/pins/sanguino/pins_AZTEEG_X1.h | 2 +- Marlin/src/pins/sanguino/pins_MELZI.h | 2 +- Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h | 2 +- Marlin/src/pins/sanguino/pins_MELZI_MAKR3D.h | 2 +- Marlin/src/pins/sanguino/pins_MELZI_MALYAN.h | 2 +- Marlin/src/pins/sanguino/pins_MELZI_TRONXY.h | 2 +- Marlin/src/pins/sanguino/pins_MELZI_V2.h | 2 +- Marlin/src/pins/sanguino/pins_STB_11.h | 2 +- Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_MZ_V1_0.h | 2 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3D_V1_1.h | 2 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_V1_1.h | 2 +- 26 files changed, 26 insertions(+), 26 deletions(-) diff --git a/Marlin/src/pins/lpc1769/pins_BTT_SKR_V1_4_TURBO.h b/Marlin/src/pins/lpc1769/pins_BTT_SKR_V1_4_TURBO.h index 2b847d339f..7f428fc918 100644 --- a/Marlin/src/pins/lpc1769/pins_BTT_SKR_V1_4_TURBO.h +++ b/Marlin/src/pins/lpc1769/pins_BTT_SKR_V1_4_TURBO.h @@ -31,4 +31,4 @@ // Include SKR 1.4 pins // #define REQUIRE_LPC1769 -#include "../lpc1768/pins_BTT_SKR_V1_4.h" +#include "../lpc1768/pins_BTT_SKR_V1_4.h" // ... BTT_SKR_common diff --git a/Marlin/src/pins/ramps/pins_AZTEEG_X3.h b/Marlin/src/pins/ramps/pins_AZTEEG_X3.h index 07af61e693..ee8cafa897 100644 --- a/Marlin/src/pins/ramps/pins_AZTEEG_X3.h +++ b/Marlin/src/pins/ramps/pins_AZTEEG_X3.h @@ -43,7 +43,7 @@ #define SERVO0_PIN 44 // SERVO1 port #define SERVO1_PIN 55 // SERVO2 port -#include "pins_RAMPS_13.h" +#include "pins_RAMPS_13.h" // ... RAMPS // // LCD / Controller diff --git a/Marlin/src/pins/ramps/pins_BQ_ZUM_MEGA_3D.h b/Marlin/src/pins/ramps/pins_BQ_ZUM_MEGA_3D.h index 64d881866b..523ab7678f 100644 --- a/Marlin/src/pins/ramps/pins_BQ_ZUM_MEGA_3D.h +++ b/Marlin/src/pins/ramps/pins_BQ_ZUM_MEGA_3D.h @@ -115,7 +115,7 @@ // // Import RAMPS 1.3 pins // -#include "pins_RAMPS_13.h" +#include "pins_RAMPS_13.h" // ... RAMPS // // Used by the Hephestos 2 heated bed upgrade kit diff --git a/Marlin/src/pins/ramps/pins_K8200.h b/Marlin/src/pins/ramps/pins_K8200.h index df685e0f0c..395e1ccca5 100644 --- a/Marlin/src/pins/ramps/pins_K8200.h +++ b/Marlin/src/pins/ramps/pins_K8200.h @@ -30,4 +30,4 @@ #define DEFAULT_MACHINE_NAME "K8200" #define DEFAULT_SOURCE_CODE_URL "github.com/CONSULitAS/Marlin-K8200" -#include "pins_3DRAG.h" +#include "pins_3DRAG.h" // ... RAMPS diff --git a/Marlin/src/pins/ramps/pins_K8400.h b/Marlin/src/pins/ramps/pins_K8400.h index bed2238162..36c438aca2 100644 --- a/Marlin/src/pins/ramps/pins_K8400.h +++ b/Marlin/src/pins/ramps/pins_K8400.h @@ -50,7 +50,7 @@ #define X_STOP_PIN 3 #define Y_STOP_PIN 14 -#include "pins_3DRAG.h" +#include "pins_3DRAG.h" // ... RAMPS // // Heaters / Fans diff --git a/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h b/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h index ccf7ab6793..6b48e3cbd6 100644 --- a/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h +++ b/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h @@ -117,4 +117,4 @@ // Other RAMPS 1.3 pins // #define IS_RAMPS_EFB // Override autodetection. Bed will be undefined. -#include "pins_RAMPS_13.h" +#include "pins_RAMPS_13.h" // ... RAMPS diff --git a/Marlin/src/pins/ramps/pins_MKS_BASE_10.h b/Marlin/src/pins/ramps/pins_MKS_BASE_10.h index 0be58653aa..c40cabe325 100644 --- a/Marlin/src/pins/ramps/pins_MKS_BASE_10.h +++ b/Marlin/src/pins/ramps/pins_MKS_BASE_10.h @@ -34,4 +34,4 @@ #define BOARD_INFO_NAME "MKS BASE 1.0" #define MKS_BASE_VERSION 10 -#include "pins_MKS_BASE_common.h" +#include "pins_MKS_BASE_common.h" // ... RAMPS diff --git a/Marlin/src/pins/ramps/pins_MKS_BASE_14.h b/Marlin/src/pins/ramps/pins_MKS_BASE_14.h index 3612f9b894..992ab92ee9 100644 --- a/Marlin/src/pins/ramps/pins_MKS_BASE_14.h +++ b/Marlin/src/pins/ramps/pins_MKS_BASE_14.h @@ -58,7 +58,7 @@ #define CASE_LIGHT_PIN 11 // PB5 ** Pin24 ** PWM11 #endif -#include "pins_MKS_BASE_common.h" +#include "pins_MKS_BASE_common.h" // ... RAMPS /* Available connectors on MKS BASE v1.4 diff --git a/Marlin/src/pins/ramps/pins_MKS_BASE_15.h b/Marlin/src/pins/ramps/pins_MKS_BASE_15.h index 9e670d1bbd..2b0c2bb883 100644 --- a/Marlin/src/pins/ramps/pins_MKS_BASE_15.h +++ b/Marlin/src/pins/ramps/pins_MKS_BASE_15.h @@ -32,4 +32,4 @@ #define BOARD_INFO_NAME "MKS BASE 1.5" #define MKS_BASE_VERSION 15 -#include "pins_MKS_BASE_common.h" +#include "pins_MKS_BASE_common.h" // ... RAMPS diff --git a/Marlin/src/pins/ramps/pins_MKS_BASE_16.h b/Marlin/src/pins/ramps/pins_MKS_BASE_16.h index a4dfca21b4..31a8fdab8d 100644 --- a/Marlin/src/pins/ramps/pins_MKS_BASE_16.h +++ b/Marlin/src/pins/ramps/pins_MKS_BASE_16.h @@ -56,4 +56,4 @@ #define PS_ON_PIN -1 #endif -#include "pins_MKS_BASE_common.h" +#include "pins_MKS_BASE_common.h" // ... RAMPS diff --git a/Marlin/src/pins/ramps/pins_MKS_BASE_HEROIC.h b/Marlin/src/pins/ramps/pins_MKS_BASE_HEROIC.h index 3ce138b975..973f924e7c 100644 --- a/Marlin/src/pins/ramps/pins_MKS_BASE_HEROIC.h +++ b/Marlin/src/pins/ramps/pins_MKS_BASE_HEROIC.h @@ -25,7 +25,7 @@ * MKS BASE with Heroic HR4982 stepper drivers */ -#include "pins_MKS_BASE_15.h" +#include "pins_MKS_BASE_15.h" // ... MKS_BASE_common ... RAMPS /** * Some new boards use HR4982 (Heroic) instead of the A4982 (Allegro) stepper drivers. diff --git a/Marlin/src/pins/ramps/pins_RIGIDBOARD_V2.h b/Marlin/src/pins/ramps/pins_RIGIDBOARD_V2.h index 5a6bba3c08..8242f1a772 100644 --- a/Marlin/src/pins/ramps/pins_RIGIDBOARD_V2.h +++ b/Marlin/src/pins/ramps/pins_RIGIDBOARD_V2.h @@ -27,7 +27,7 @@ #define BOARD_INFO_NAME "RigidBoard V2" -#include "pins_RIGIDBOARD.h" +#include "pins_RIGIDBOARD.h" // ... RAMPS // // Steppers diff --git a/Marlin/src/pins/ramps/pins_TRIGORILLA_13.h b/Marlin/src/pins/ramps/pins_TRIGORILLA_13.h index ce9e4e5466..eee0dcd3d2 100644 --- a/Marlin/src/pins/ramps/pins_TRIGORILLA_13.h +++ b/Marlin/src/pins/ramps/pins_TRIGORILLA_13.h @@ -41,4 +41,4 @@ #define E0_AUTO_FAN_PIN 9 #endif -#include "pins_RAMPS_13.h" +#include "pins_RAMPS_13.h" // ... RAMPS diff --git a/Marlin/src/pins/ramps/pins_ZRIB_V20.h b/Marlin/src/pins/ramps/pins_ZRIB_V20.h index 6c4b28d0b8..e9328ca7ba 100644 --- a/Marlin/src/pins/ramps/pins_ZRIB_V20.h +++ b/Marlin/src/pins/ramps/pins_ZRIB_V20.h @@ -26,7 +26,7 @@ * V2 and V3 Boards only differ in USB controller, nothing affecting the pins. */ -#include "pins_MKS_GEN_13.h" +#include "pins_MKS_GEN_13.h" // ... RAMPS #define ZRIB_V20_D6_PIN 6 // Fan #define ZRIB_V20_D9_PIN 9 // Fan2 diff --git a/Marlin/src/pins/ramps/pins_ZRIB_V52.h b/Marlin/src/pins/ramps/pins_ZRIB_V52.h index f4db07ef8d..a6e9175b62 100644 --- a/Marlin/src/pins/ramps/pins_ZRIB_V52.h +++ b/Marlin/src/pins/ramps/pins_ZRIB_V52.h @@ -48,7 +48,7 @@ #define E2_ENABLE_PIN 22 #define HEATER_1_PIN 7 -#include "pins_MKS_BASE_common.h" +#include "pins_MKS_BASE_common.h" // ... RAMPS /* Available connectors on MKS BASE v1.4 (Basically same as ZRIB V5.2) diff --git a/Marlin/src/pins/sanguino/pins_AZTEEG_X1.h b/Marlin/src/pins/sanguino/pins_AZTEEG_X1.h index c3c38eb6f3..3edb14ec41 100644 --- a/Marlin/src/pins/sanguino/pins_AZTEEG_X1.h +++ b/Marlin/src/pins/sanguino/pins_AZTEEG_X1.h @@ -27,4 +27,4 @@ #define BOARD_INFO_NAME "Azteeg X1" -#include "pins_SANGUINOLOLU_12.h" +#include "pins_SANGUINOLOLU_12.h" // ... SANGUINOLOLU_11 diff --git a/Marlin/src/pins/sanguino/pins_MELZI.h b/Marlin/src/pins/sanguino/pins_MELZI.h index 852ad5a34b..e24636c8e0 100644 --- a/Marlin/src/pins/sanguino/pins_MELZI.h +++ b/Marlin/src/pins/sanguino/pins_MELZI.h @@ -44,4 +44,4 @@ #endif #endif -#include "pins_SANGUINOLOLU_12.h" +#include "pins_SANGUINOLOLU_12.h" // ... SANGUINOLOLU_11 diff --git a/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h b/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h index 36e26980f4..1b37940e2a 100644 --- a/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h +++ b/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h @@ -42,7 +42,7 @@ #define BOARD_ST7920_DELAY_3 125 #endif -#include "pins_MELZI.h" +#include "pins_MELZI.h" // ... SANGUINOLOLU_12 ... SANGUINOLOLU_11 // // For the stock CR-10 enable CR10_STOCKDISPLAY in Configuration.h diff --git a/Marlin/src/pins/sanguino/pins_MELZI_MAKR3D.h b/Marlin/src/pins/sanguino/pins_MELZI_MAKR3D.h index 0e09c1f005..447eca7e3c 100644 --- a/Marlin/src/pins/sanguino/pins_MELZI_MAKR3D.h +++ b/Marlin/src/pins/sanguino/pins_MELZI_MAKR3D.h @@ -26,4 +26,4 @@ */ #define BOARD_INFO_NAME "Melzi (ATmega1284)" -#include "pins_MELZI.h" +#include "pins_MELZI.h" // ... SANGUINOLOLU_12 ... SANGUINOLOLU_11 diff --git a/Marlin/src/pins/sanguino/pins_MELZI_MALYAN.h b/Marlin/src/pins/sanguino/pins_MELZI_MALYAN.h index 3bf8f80457..a0421dcf5c 100644 --- a/Marlin/src/pins/sanguino/pins_MELZI_MALYAN.h +++ b/Marlin/src/pins/sanguino/pins_MELZI_MALYAN.h @@ -27,7 +27,7 @@ #define BOARD_INFO_NAME "Melzi (Malyan)" -#include "pins_MELZI.h" +#include "pins_MELZI.h" // ... SANGUINOLOLU_12 ... SANGUINOLOLU_11 #undef LCD_SDSS #undef LCD_PINS_RS diff --git a/Marlin/src/pins/sanguino/pins_MELZI_TRONXY.h b/Marlin/src/pins/sanguino/pins_MELZI_TRONXY.h index 81bd78b7a0..3f7b36765f 100644 --- a/Marlin/src/pins/sanguino/pins_MELZI_TRONXY.h +++ b/Marlin/src/pins/sanguino/pins_MELZI_TRONXY.h @@ -34,7 +34,7 @@ #define BOARD_ST7920_DELAY_3 0 #endif -#include "pins_MELZI.h" +#include "pins_MELZI.h" // ... SANGUINOLOLU_12 ... SANGUINOLOLU_11 #undef Z_ENABLE_PIN #undef LCD_PINS_RS diff --git a/Marlin/src/pins/sanguino/pins_MELZI_V2.h b/Marlin/src/pins/sanguino/pins_MELZI_V2.h index a3ab5ff61b..e49eb57b11 100644 --- a/Marlin/src/pins/sanguino/pins_MELZI_V2.h +++ b/Marlin/src/pins/sanguino/pins_MELZI_V2.h @@ -34,4 +34,4 @@ #define BOARD_ST7920_DELAY_3 0 #endif -#include "pins_MELZI.h" +#include "pins_MELZI.h" // ... SANGUINOLOLU_12 ... SANGUINOLOLU_11 diff --git a/Marlin/src/pins/sanguino/pins_STB_11.h b/Marlin/src/pins/sanguino/pins_STB_11.h index b10a09840a..ea36211f3b 100644 --- a/Marlin/src/pins/sanguino/pins_STB_11.h +++ b/Marlin/src/pins/sanguino/pins_STB_11.h @@ -27,4 +27,4 @@ #define BOARD_INFO_NAME "STB V1.1" -#include "pins_SANGUINOLOLU_12.h" +#include "pins_SANGUINOLOLU_12.h" // ... SANGUINOLOLU_11 diff --git a/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_MZ_V1_0.h b/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_MZ_V1_0.h index 96420cf322..8133955224 100644 --- a/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_MZ_V1_0.h +++ b/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_MZ_V1_0.h @@ -23,4 +23,4 @@ #define BOARD_INFO_NAME "BTT SKR Mini MZ V1.0" -#include "pins_BTT_SKR_MINI_E3_V2_0.h" +#include "pins_BTT_SKR_MINI_E3_V2_0.h" // ... BTT_SKR_MINI_E3_common diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3D_V1_1.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3D_V1_1.h index 0d927cf7cb..718f9dc27a 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3D_V1_1.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3D_V1_1.h @@ -64,4 +64,4 @@ #endif #endif -#include "pins_MKS_ROBIN_E3_V1_1_common.h" +#include "pins_MKS_ROBIN_E3_V1_1_common.h" // ... MKS_ROBIN_E3_common diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_V1_1.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_V1_1.h index 002c35fe54..30720e0c7f 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_V1_1.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_V1_1.h @@ -33,4 +33,4 @@ #define BOARD_INFO_NAME "MKS Robin E3 V1.1" #endif -#include "pins_MKS_ROBIN_E3_V1_1_common.h" +#include "pins_MKS_ROBIN_E3_V1_1_common.h" // ... MKS_ROBIN_E3_common From e77df7230023cc0ac4eb4cce08fae70ff1427dce Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 19 Oct 2021 05:51:49 -0500 Subject: [PATCH 028/532] =?UTF-8?q?=F0=9F=8E=A8=20Fix=20pinsDebug=5Flist?= =?UTF-8?q?=20warnings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/pinsDebug_list.h | 298 ++++++++++++++++++------------- 1 file changed, 171 insertions(+), 127 deletions(-) diff --git a/Marlin/src/pins/pinsDebug_list.h b/Marlin/src/pins/pinsDebug_list.h index fe670cca29..8a4350d90e 100644 --- a/Marlin/src/pins/pinsDebug_list.h +++ b/Marlin/src/pins/pinsDebug_list.h @@ -26,9 +26,9 @@ // If the new pin name is over 28 characters long then pinsDebug.h will need to be modified. #if TARGET_LPC1768 - #define ANALOG_OK(PN) ((PN) == P0_02 || (PN) == P0_03 || (PN) == P0_23 || (PN) == P0_24 || (PN) == P0_25 || (PN) == P0_26 || (PN) == P1_30 || (PN) == P1_31) + #define ANALOG_OK(PN) (WITHIN(PN, P0_02, P0_03) || WITHIN(PN, P0_23, P0_26) || WITHIN(PN, P1_30, P1_31)) #else - #define ANALOG_OK(PN) ((PN) >= 0 && (PN) < NUM_ANALOG_INPUTS) + #define ANALOG_OK(PN) WITHIN(PN, 0, NUM_ANALOG_INPUTS - 1) #endif #line 35 // set __LINE__ to a known value for both passes @@ -37,86 +37,130 @@ // Analog Pin Assignments // -#if defined(EXT_AUX_A0) && ANALOG_OK(EXT_AUX_A0) +#define _EXISTS(PN,V...) (defined(PN##V) && PN##V >= 0) + +#if _EXISTS(EXT_AUX_A0) + #if ANALOG_OK(EXT_AUX_A0) REPORT_NAME_ANALOG(__LINE__, EXT_AUX_A0) #endif -#if defined(EXT_AUX_A1) && ANALOG_OK(EXT_AUX_A0) - REPORT_NAME_ANALOG(__LINE__, EXT_AUX_A1) #endif -#if defined(EXT_AUX_A2) && ANALOG_OK(EXT_AUX_A0) - REPORT_NAME_ANALOG(__LINE__, EXT_AUX_A2) +#if _EXISTS(EXT_AUX_A1) + #if ANALOG_OK(EXT_AUX_A0) + REPORT_NAME_ANALOG(__LINE__, EXT_AUX_A0) + #endif #endif -#if defined(EXT_AUX_A3) && ANALOG_OK(EXT_AUX_A0) - REPORT_NAME_ANALOG(__LINE__, EXT_AUX_A3) +#if _EXISTS(EXT_AUX_A2) + #if ANALOG_OK(EXT_AUX_A0) + REPORT_NAME_ANALOG(__LINE__, EXT_AUX_A0) + #endif #endif -#if defined(EXT_AUX_A4) && ANALOG_OK(EXT_AUX_A0) - REPORT_NAME_ANALOG(__LINE__, EXT_AUX_A4) +#if _EXISTS(EXT_AUX_A3) + #if ANALOG_OK(EXT_AUX_A0) + REPORT_NAME_ANALOG(__LINE__, EXT_AUX_A0) + #endif #endif -#if PIN_EXISTS(FILWIDTH) && ANALOG_OK(FILWIDTH_PIN) - REPORT_NAME_ANALOG(__LINE__, FILWIDTH_PIN) +#if _EXISTS(EXT_AUX_A4) + #if ANALOG_OK(EXT_AUX_A0) + REPORT_NAME_ANALOG(__LINE__, EXT_AUX_A0) + #endif #endif -#if PIN_EXISTS(MAIN_VOLTAGE_MEASURE) && ANALOG_OK(MAIN_VOLTAGE_MEASURE_PIN) - REPORT_NAME_ANALOG(__LINE__, MAIN_VOLTAGE_MEASURE_PIN) +#if PIN_EXISTS(FILWIDTH) + #if ANALOG_OK(FILWIDTH_PIN) + REPORT_NAME_ANALOG(__LINE__, FILWIDTH_PIN) + #endif +#endif +#if PIN_EXISTS(MAIN_VOLTAGE_MEASURE) + #if ANALOG_OK(MAIN_VOLTAGE_MEASURE_PIN) + REPORT_NAME_ANALOG(__LINE__, MAIN_VOLTAGE_MEASURE_PIN) + #endif #endif #if !defined(ARDUINO_ARCH_SAM) && !defined(ARDUINO_ARCH_SAMD) // TC1 & TC2 are macros in the SAM/SAMD tool chain - #if defined(TC1) && ANALOG_OK(TC1) + #if _EXISTS(TC1) + #if ANALOG_OK(TC1) REPORT_NAME_ANALOG(__LINE__, TC1) #endif - #if defined(TC2) && ANALOG_OK(TC1) - REPORT_NAME_ANALOG(__LINE__, TC2) + #endif + #if _EXISTS(TC2) + #if ANALOG_OK(TC1) + REPORT_NAME_ANALOG(__LINE__, TC1) + #endif #endif #endif -#if PIN_EXISTS(TEMP_0) && ANALOG_OK(TEMP_0_PIN) - REPORT_NAME_ANALOG(__LINE__, TEMP_0_PIN) +#if PIN_EXISTS(TEMP_0) + #if ANALOG_OK(TEMP_0_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_0_PIN) + #endif #endif -#if PIN_EXISTS(TEMP_1) && ANALOG_OK(TEMP_1_PIN) - REPORT_NAME_ANALOG(__LINE__, TEMP_1_PIN) +#if PIN_EXISTS(TEMP_1) + #if ANALOG_OK(TEMP_1_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_1_PIN) + #endif #endif -#if PIN_EXISTS(TEMP_2) && ANALOG_OK(TEMP_2_PIN) - REPORT_NAME_ANALOG(__LINE__, TEMP_2_PIN) +#if PIN_EXISTS(TEMP_2) + #if ANALOG_OK(TEMP_2_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_2_PIN) + #endif #endif -#if PIN_EXISTS(TEMP_3) && ANALOG_OK(TEMP_3_PIN) - REPORT_NAME_ANALOG(__LINE__, TEMP_3_PIN) +#if PIN_EXISTS(TEMP_3) + #if ANALOG_OK(TEMP_3_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_3_PIN) + #endif #endif -#if PIN_EXISTS(TEMP_4) && ANALOG_OK(TEMP_4_PIN) - REPORT_NAME_ANALOG(__LINE__, TEMP_4_PIN) +#if PIN_EXISTS(TEMP_4) + #if ANALOG_OK(TEMP_4_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_4_PIN) + #endif #endif -#if PIN_EXISTS(TEMP_5) && ANALOG_OK(TEMP_5_PIN) - REPORT_NAME_ANALOG(__LINE__, TEMP_5_PIN) +#if PIN_EXISTS(TEMP_5) + #if ANALOG_OK(TEMP_5_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_5_PIN) + #endif #endif -#if PIN_EXISTS(TEMP_6) && ANALOG_OK(TEMP_6_PIN) - REPORT_NAME_ANALOG(__LINE__, TEMP_6_PIN) +#if PIN_EXISTS(TEMP_6) + #if ANALOG_OK(TEMP_6_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_6_PIN) + #endif #endif -#if PIN_EXISTS(TEMP_7) && ANALOG_OK(TEMP_7_PIN) - REPORT_NAME_ANALOG(__LINE__, TEMP_7_PIN) +#if PIN_EXISTS(TEMP_7) + #if ANALOG_OK(TEMP_7_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_7_PIN) + #endif #endif -#if PIN_EXISTS(TEMP_BED) && ANALOG_OK(TEMP_BED_PIN) - REPORT_NAME_ANALOG(__LINE__, TEMP_BED_PIN) +#if PIN_EXISTS(TEMP_BED) + #if ANALOG_OK(TEMP_BED_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_BED_PIN) + #endif #endif -#if PIN_EXISTS(TEMP_CHAMBER) && ANALOG_OK(TEMP_CHAMBER_PIN) - REPORT_NAME_ANALOG(__LINE__, TEMP_CHAMBER_PIN) +#if PIN_EXISTS(TEMP_CHAMBER) + #if ANALOG_OK(TEMP_CHAMBER_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_CHAMBER_PIN) + #endif #endif -#if PIN_EXISTS(TEMP_COOLER) && ANALOG_OK(TEMP_COOLER_PIN) - REPORT_NAME_ANALOG(__LINE__, TEMP_COOLER_PIN) +#if PIN_EXISTS(TEMP_COOLER) + #if ANALOG_OK(TEMP_COOLER_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_COOLER_PIN) + #endif #endif -#if PIN_EXISTS(ADC_KEYPAD) && ANALOG_OK(ADC_KEYPAD_PIN) - REPORT_NAME_ANALOG(__LINE__, ADC_KEYPAD_PIN) +#if PIN_EXISTS(ADC_KEYPAD) + #if ANALOG_OK(ADC_KEYPAD_PIN) + REPORT_NAME_ANALOG(__LINE__, ADC_KEYPAD_PIN) + #endif #endif // // Digital Pin Assignments // -#if defined(__FD) && __FD >= 0 +#if _EXISTS(__FD) REPORT_NAME_DIGITAL(__LINE__, __FD) #endif -#if defined(__FS) && __FS >= 0 +#if _EXISTS(__FS) REPORT_NAME_DIGITAL(__LINE__, __FS) #endif -#if defined(__GD) && __GD >= 0 +#if _EXISTS(__GD) REPORT_NAME_DIGITAL(__LINE__, __GD) #endif -#if defined(__GS) && __GS >= 0 +#if _EXISTS(__GS) REPORT_NAME_DIGITAL(__LINE__, __GS) #endif #if PIN_EXISTS(AVR_MISO) @@ -137,46 +181,46 @@ #if PIN_EXISTS(BEEPER) REPORT_NAME_DIGITAL(__LINE__, BEEPER_PIN) #endif -#if defined(BTN_BACK) && BTN_BACK >= 0 +#if _EXISTS(BTN_BACK) REPORT_NAME_DIGITAL(__LINE__, BTN_BACK) #endif -#if defined(BTN_CENTER) && BTN_CENTER >= 0 +#if _EXISTS(BTN_CENTER) REPORT_NAME_DIGITAL(__LINE__, BTN_CENTER) #endif -#if defined(BTN_DOWN) && BTN_DOWN >= 0 +#if _EXISTS(BTN_DOWN) REPORT_NAME_DIGITAL(__LINE__, BTN_DOWN) #endif -#if defined(BTN_DWN) && BTN_DWN >= 0 +#if _EXISTS(BTN_DWN) REPORT_NAME_DIGITAL(__LINE__, BTN_DWN) #endif -#if defined(BTN_EN1) && BTN_EN1 >= 0 +#if _EXISTS(BTN_EN1) REPORT_NAME_DIGITAL(__LINE__, BTN_EN1) #endif -#if defined(BTN_EN2) && BTN_EN2 >= 0 +#if _EXISTS(BTN_EN2) REPORT_NAME_DIGITAL(__LINE__, BTN_EN2) #endif -#if defined(BTN_ENC_EN) && BTN_ENC_EN >= 0 +#if _EXISTS(BTN_ENC_EN) REPORT_NAME_DIGITAL(__LINE__, BTN_ENC_EN) #endif -#if defined(BTN_ENC) && BTN_ENC >= 0 +#if _EXISTS(BTN_ENC) REPORT_NAME_DIGITAL(__LINE__, BTN_ENC) #endif -#if defined(BTN_HOME) && BTN_HOME >= 0 +#if _EXISTS(BTN_HOME) REPORT_NAME_DIGITAL(__LINE__, BTN_HOME) #endif -#if defined(BTN_LEFT) && BTN_LEFT >= 0 +#if _EXISTS(BTN_LEFT) REPORT_NAME_DIGITAL(__LINE__, BTN_LEFT) #endif -#if defined(BTN_LFT) && BTN_LFT >= 0 +#if _EXISTS(BTN_LFT) REPORT_NAME_DIGITAL(__LINE__, BTN_LFT) #endif -#if defined(BTN_RIGHT) && BTN_RIGHT >= 0 +#if _EXISTS(BTN_RIGHT) REPORT_NAME_DIGITAL(__LINE__, BTN_RIGHT) #endif -#if defined(BTN_RT) && BTN_RT >= 0 +#if _EXISTS(BTN_RT) REPORT_NAME_DIGITAL(__LINE__, BTN_RT) #endif -#if defined(BTN_UP) && BTN_UP >= 0 +#if _EXISTS(BTN_UP) REPORT_NAME_DIGITAL(__LINE__, BTN_UP) #endif #if PIN_EXISTS(JOY_X) @@ -287,10 +331,10 @@ #if PIN_EXISTS(CUTOFF_TEST) REPORT_NAME_DIGITAL(__LINE__, CUTOFF_TEST_PIN) #endif -#if defined(D57) && D57 >= 0 +#if _EXISTS(D57) REPORT_NAME_DIGITAL(__LINE__, D57) #endif -#if defined(D58) && D58 >= 0 +#if _EXISTS(D58) REPORT_NAME_DIGITAL(__LINE__, D58) #endif #if PIN_EXISTS(DAC_DISABLE) @@ -305,49 +349,49 @@ #if PIN_EXISTS(DEBUG) REPORT_NAME_DIGITAL(__LINE__, DEBUG_PIN) #endif -#if defined(DIGIPOTS_I2C_SCL) && DIGIPOTS_I2C_SCL >= 0 +#if _EXISTS(DIGIPOTS_I2C_SCL) REPORT_NAME_DIGITAL(__LINE__, DIGIPOTS_I2C_SCL) #endif -#if defined(DIGIPOTS_I2C_SDA_E0) && DIGIPOTS_I2C_SDA_E0 >= 0 +#if _EXISTS(DIGIPOTS_I2C_SDA_E0) REPORT_NAME_DIGITAL(__LINE__, DIGIPOTS_I2C_SDA_E0) #endif -#if defined(DIGIPOTS_I2C_SDA_E1) && DIGIPOTS_I2C_SDA_E1 >= 0 +#if _EXISTS(DIGIPOTS_I2C_SDA_E1) REPORT_NAME_DIGITAL(__LINE__, DIGIPOTS_I2C_SDA_E1) #endif -#if defined(DIGIPOTS_I2C_SDA_X) && DIGIPOTS_I2C_SDA_X >= 0 +#if _EXISTS(DIGIPOTS_I2C_SDA_X) REPORT_NAME_DIGITAL(__LINE__, DIGIPOTS_I2C_SDA_X) #endif -#if defined(DIGIPOTS_I2C_SDA_Y) && DIGIPOTS_I2C_SDA_Y >= 0 +#if _EXISTS(DIGIPOTS_I2C_SDA_Y) REPORT_NAME_DIGITAL(__LINE__, DIGIPOTS_I2C_SDA_Y) #endif -#if defined(DIGIPOTS_I2C_SDA_Z) && DIGIPOTS_I2C_SDA_Z >= 0 +#if _EXISTS(DIGIPOTS_I2C_SDA_Z) REPORT_NAME_DIGITAL(__LINE__, DIGIPOTS_I2C_SDA_Z) #endif #if PIN_EXISTS(DIGIPOTSS) REPORT_NAME_DIGITAL(__LINE__, DIGIPOTSS_PIN) #endif -#if defined(DOGLCD_A0) && DOGLCD_A0 >= 0 +#if _EXISTS(DOGLCD_A0) REPORT_NAME_DIGITAL(__LINE__, DOGLCD_A0) #endif -#if defined(DOGLCD_CS) && DOGLCD_CS >= 0 +#if _EXISTS(DOGLCD_CS) REPORT_NAME_DIGITAL(__LINE__, DOGLCD_CS) #endif -#if defined(DOGLCD_MOSI) && DOGLCD_MOSI >= 0 +#if _EXISTS(DOGLCD_MOSI) REPORT_NAME_DIGITAL(__LINE__, DOGLCD_MOSI) #endif -#if defined(DOGLCD_SCK) && DOGLCD_SCK >= 0 +#if _EXISTS(DOGLCD_SCK) REPORT_NAME_DIGITAL(__LINE__, DOGLCD_SCK) #endif -#if defined(TMC_SW_MISO) && TMC_SW_MISO >= 0 +#if _EXISTS(TMC_SW_MISO) REPORT_NAME_DIGITAL(__LINE__, TMC_SW_MISO) #endif -#if defined(TMC_SW_MOSI) && TMC_SW_MOSI >= 0 +#if _EXISTS(TMC_SW_MOSI) REPORT_NAME_DIGITAL(__LINE__, TMC_SW_MOSI) #endif -#if defined(TMC_SW_SCK) && TMC_SW_SCK >= 0 +#if _EXISTS(TMC_SW_SCK) REPORT_NAME_DIGITAL(__LINE__, TMC_SW_SCK) #endif -#if defined(TFTGLCD_CS) && TFTGLCD_CS >= 0 +#if _EXISTS(TFTGLCD_CS) REPORT_NAME_DIGITAL(__LINE__, TFTGLCD_CS) #endif #if PIN_EXISTS(E_MUX0) @@ -557,71 +601,71 @@ #if PIN_EXISTS(E7_STEP) REPORT_NAME_DIGITAL(__LINE__, E7_STEP_PIN) #endif -#if defined(ENET_CRS) && ENET_CRS >= 0 +#if _EXISTS(ENET_CRS) REPORT_NAME_DIGITAL(__LINE__, ENET_CRS) #endif -#if defined(ENET_MDIO) && ENET_MDIO >= 0 +#if _EXISTS(ENET_MDIO) REPORT_NAME_DIGITAL(__LINE__, ENET_MDIO) #endif -#if defined(ENET_MOC) && ENET_MOC >= 0 +#if _EXISTS(ENET_MOC) REPORT_NAME_DIGITAL(__LINE__, ENET_MOC) #endif -#if defined(ENET_RX_ER) && ENET_RX_ER >= 0 +#if _EXISTS(ENET_RX_ER) REPORT_NAME_DIGITAL(__LINE__, ENET_RX_ER) #endif -#if defined(ENET_RXD0) && ENET_RXD0 >= 0 +#if _EXISTS(ENET_RXD0) REPORT_NAME_DIGITAL(__LINE__, ENET_RXD0) #endif -#if defined(ENET_RXD1) && ENET_RXD1 >= 0 +#if _EXISTS(ENET_RXD1) REPORT_NAME_DIGITAL(__LINE__, ENET_RXD1) #endif -#if defined(ENET_TX_EN) && ENET_TX_EN >= 0 +#if _EXISTS(ENET_TX_EN) REPORT_NAME_DIGITAL(__LINE__, ENET_TX_EN) #endif -#if defined(ENET_TXD0) && ENET_TXD0 >= 0 +#if _EXISTS(ENET_TXD0) REPORT_NAME_DIGITAL(__LINE__, ENET_TXD0) #endif -#if defined(ENET_TXD1) && ENET_TXD1 >= 0 +#if _EXISTS(ENET_TXD1) REPORT_NAME_DIGITAL(__LINE__, ENET_TXD1) #endif #if PIN_EXISTS(EXP_VOLTAGE_LEVEL) REPORT_NAME_DIGITAL(__LINE__, EXP_VOLTAGE_LEVEL_PIN) #endif -#if defined(EXT_AUX_A0_IO) && EXT_AUX_A0_IO >= 0 +#if _EXISTS(EXT_AUX_A0_IO) REPORT_NAME_DIGITAL(__LINE__, EXT_AUX_A0_IO) #endif -#if defined(EXT_AUX_A1_IO) && EXT_AUX_A1_IO >= 0 +#if _EXISTS(EXT_AUX_A1_IO) REPORT_NAME_DIGITAL(__LINE__, EXT_AUX_A1_IO) #endif -#if defined(EXT_AUX_A2_IO) && EXT_AUX_A2_IO >= 0 +#if _EXISTS(EXT_AUX_A2_IO) REPORT_NAME_DIGITAL(__LINE__, EXT_AUX_A2_IO) #endif -#if defined(EXT_AUX_A3_IO) && EXT_AUX_A3_IO >= 0 +#if _EXISTS(EXT_AUX_A3_IO) REPORT_NAME_DIGITAL(__LINE__, EXT_AUX_A3_IO) #endif -#if defined(EXT_AUX_A4_IO) && EXT_AUX_A4_IO >= 0 +#if _EXISTS(EXT_AUX_A4_IO) REPORT_NAME_DIGITAL(__LINE__, EXT_AUX_A4_IO) #endif -#if defined(EXT_AUX_PWM_D24) && EXT_AUX_PWM_D24 >= 0 +#if _EXISTS(EXT_AUX_PWM_D24) REPORT_NAME_DIGITAL(__LINE__, EXT_AUX_PWM_D24) #endif -#if defined(EXT_AUX_RX1_D2) && EXT_AUX_RX1_D2 >= 0 +#if _EXISTS(EXT_AUX_RX1_D2) REPORT_NAME_DIGITAL(__LINE__, EXT_AUX_RX1_D2) #endif -#if defined(EXT_AUX_SCL_D0) && EXT_AUX_SCL_D0 >= 0 +#if _EXISTS(EXT_AUX_SCL_D0) REPORT_NAME_DIGITAL(__LINE__, EXT_AUX_SCL_D0) #endif -#if defined(EXT_AUX_SDA_D1) && EXT_AUX_SDA_D1 >= 0 +#if _EXISTS(EXT_AUX_SDA_D1) REPORT_NAME_DIGITAL(__LINE__, EXT_AUX_SDA_D1) #endif -#if defined(EXT_AUX_TX1_D3) && EXT_AUX_TX1_D3 >= 0 +#if _EXISTS(EXT_AUX_TX1_D3) REPORT_NAME_DIGITAL(__LINE__, EXT_AUX_TX1_D3) #endif -#if defined(EXTRUDER_0_AUTO_FAN) && EXTRUDER_0_AUTO_FAN >= 0 +#if _EXISTS(EXTRUDER_0_AUTO_FAN) REPORT_NAME_DIGITAL(__LINE__, EXTRUDER_0_AUTO_FAN) #endif -#if defined(EXTRUDER_1_AUTO_FAN) && EXTRUDER_1_AUTO_FAN >= 0 +#if _EXISTS(EXTRUDER_1_AUTO_FAN) REPORT_NAME_DIGITAL(__LINE__, EXTRUDER_1_AUTO_FAN) #endif #if PIN_EXISTS(FAN) @@ -735,25 +779,25 @@ #if PIN_EXISTS(LCD_BACKLIGHT) REPORT_NAME_DIGITAL(__LINE__, LCD_BACKLIGHT_PIN) #endif -#if defined(LCD_PINS_D4) && LCD_PINS_D4 >= 0 +#if _EXISTS(LCD_PINS_D4) REPORT_NAME_DIGITAL(__LINE__, LCD_PINS_D4) #endif -#if defined(LCD_PINS_D5) && LCD_PINS_D5 >= 0 +#if _EXISTS(LCD_PINS_D5) REPORT_NAME_DIGITAL(__LINE__, LCD_PINS_D5) #endif -#if defined(LCD_PINS_D6) && LCD_PINS_D6 >= 0 +#if _EXISTS(LCD_PINS_D6) REPORT_NAME_DIGITAL(__LINE__, LCD_PINS_D6) #endif -#if defined(LCD_PINS_D7) && LCD_PINS_D7 >= 0 +#if _EXISTS(LCD_PINS_D7) REPORT_NAME_DIGITAL(__LINE__, LCD_PINS_D7) #endif -#if defined(LCD_PINS_ENABLE) && LCD_PINS_ENABLE >= 0 +#if _EXISTS(LCD_PINS_ENABLE) REPORT_NAME_DIGITAL(__LINE__, LCD_PINS_ENABLE) #endif -#if defined(LCD_PINS_RS) && LCD_PINS_RS >= 0 +#if _EXISTS(LCD_PINS_RS) REPORT_NAME_DIGITAL(__LINE__, LCD_PINS_RS) #endif -#if defined(LCD_SDSS) && LCD_SDSS >= 0 +#if _EXISTS(LCD_SDSS) REPORT_NAME_DIGITAL(__LINE__, LCD_SDSS) #endif #if PIN_EXISTS(LED_GREEN) @@ -799,9 +843,9 @@ REPORT_NAME_DIGITAL(__LINE__, MAX7219_LOAD_PIN) #endif -// #if defined(MISO) && MISO >= 0 -// REPORT_NAME_DIGITAL(__LINE__, MISO) -// #endif +//#if _EXISTS(MISO) +// REPORT_NAME_DIGITAL(__LINE__, MISO) +//#endif #if PIN_EXISTS(MISO) REPORT_NAME_DIGITAL(__LINE__, SD_MISO_PIN) #endif @@ -817,9 +861,9 @@ #if PIN_EXISTS(MOSFET_D) REPORT_NAME_DIGITAL(__LINE__, MOSFET_D_PIN) #endif -// #if defined(MOSI) && MOSI >= 0 -// REPORT_NAME_DIGITAL(__LINE__, MOSI) -// #endif +//#if _EXISTS(MOSI) +// REPORT_NAME_DIGITAL(__LINE__, MOSI) +//#endif #if PIN_EXISTS(MOSI) REPORT_NAME_DIGITAL(__LINE__, SD_MOSI_PIN) #endif @@ -862,7 +906,7 @@ #if PIN_EXISTS(PWM_2) REPORT_NAME_DIGITAL(__LINE__, PWM_2_PIN) #endif -#if defined(REF_CLK) && REF_CLK >= 0 +#if _EXISTS(REF_CLK) REPORT_NAME_DIGITAL(__LINE__, REF_CLK) #endif #if PIN_EXISTS(RAMPS_D10) @@ -898,28 +942,28 @@ #if PIN_EXISTS(SAFETY_TRIGGERED) REPORT_NAME_DIGITAL(__LINE__, SAFETY_TRIGGERED_PIN) #endif -// #if defined(SCK) && SCK >= 0 -// REPORT_NAME_DIGITAL(__LINE__, SCK) -// #endif +//#if _EXISTS(SCK) +// REPORT_NAME_DIGITAL(__LINE__, SCK) +//#endif #if PIN_EXISTS(SCK) REPORT_NAME_DIGITAL(__LINE__, SD_SCK_PIN) #endif -// #if defined(SCL) && SCL >= 0 -// REPORT_NAME_DIGITAL(__LINE__, SCL) -// #endif +//#if _EXISTS(SCL) +// REPORT_NAME_DIGITAL(__LINE__, SCL) +//#endif #if PIN_EXISTS(SD_DETECT) REPORT_NAME_DIGITAL(__LINE__, SD_DETECT_PIN) #endif -// #if defined(SDA) && SDA >= 0 -// REPORT_NAME_DIGITAL(__LINE__, SDA) -// #endif +//#if _EXISTS(SDA) +// REPORT_NAME_DIGITAL(__LINE__, SDA) +//#endif #if PIN_EXISTS(SDPOWER) REPORT_NAME_DIGITAL(__LINE__, SDPOWER_PIN) #endif -#if defined(SDSS) && SDSS >= 0 +#if _EXISTS(SDSS) REPORT_NAME_DIGITAL(__LINE__, SDSS) #endif -#if defined(SERVO0) && SERVO0 >= 0 +#if _EXISTS(SERVO0) REPORT_NAME_DIGITAL(__LINE__, SERVO0) #endif #if PIN_EXISTS(SERVO0) @@ -976,7 +1020,7 @@ #if PIN_EXISTS(SOL7) REPORT_NAME_DIGITAL(__LINE__, SOL7_PIN) #endif -#if defined(SPARE_IO) && SPARE_IO >= 0 +#if _EXISTS(SPARE_IO) REPORT_NAME_DIGITAL(__LINE__, SPARE_IO) #endif #if PIN_EXISTS(SPI_EEPROM1_CS) @@ -1015,7 +1059,7 @@ #if PIN_EXISTS(STAT_LED_BLUE) REPORT_NAME_DIGITAL(__LINE__, STAT_LED_BLUE_PIN) #endif -#if defined(STAT_LED_RED_LED) && STAT_LED_RED_LED >= 0 +#if _EXISTS(STAT_LED_RED_LED) REPORT_NAME_DIGITAL(__LINE__, STAT_LED_RED_LED) #endif #if PIN_EXISTS(STAT_LED_RED) @@ -1069,13 +1113,13 @@ #if PIN_EXISTS(TX_ENABLE) REPORT_NAME_DIGITAL(__LINE__, TX_ENABLE_PIN) #endif -#if defined(UI1) && UI1 >= 0 +#if _EXISTS(UI1) REPORT_NAME_DIGITAL(__LINE__, UI1) #endif -#if defined(UI2) && UI2 >= 0 +#if _EXISTS(UI2) REPORT_NAME_DIGITAL(__LINE__, UI2) #endif -#if defined(UNUSED_PWM) && UNUSED_PWM >= 0 +#if _EXISTS(UNUSED_PWM) REPORT_NAME_DIGITAL(__LINE__, UNUSED_PWM) #endif #if PIN_EXISTS(X_ATT) From 1f3f9cb68ce9c9adad55a98ccea07e491d7b9785 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 19 Oct 2021 05:52:41 -0500 Subject: [PATCH 029/532] =?UTF-8?q?=F0=9F=8E=A8=20Pragma=20GCC=20cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/AVR/HAL.h | 6 ++---- Marlin/src/HAL/DUE/HAL.h | 6 ++---- Marlin/src/HAL/ESP32/HAL.h | 6 ++---- Marlin/src/HAL/LINUX/HAL.h | 6 ++---- Marlin/src/HAL/LPC1768/HAL.h | 6 ++---- Marlin/src/HAL/SAMD51/HAL.h | 6 ++---- Marlin/src/HAL/TEENSY31_32/HAL.h | 6 ++---- Marlin/src/HAL/TEENSY35_36/HAL.h | 6 ++---- Marlin/src/HAL/TEENSY40_41/HAL.h | 6 ++---- Marlin/src/lcd/dogm/status_screen_DOGM.cpp | 6 ++---- .../lcd/extui/ftdi_eve_touch_ui/generic/string_format.cpp | 6 ++---- Marlin/src/libs/duration_t.h | 6 ++---- Marlin/src/module/endstops.cpp | 6 ++---- 13 files changed, 26 insertions(+), 52 deletions(-) diff --git a/Marlin/src/HAL/AVR/HAL.h b/Marlin/src/HAL/AVR/HAL.h index a22daf9b5c..ecb566ed46 100644 --- a/Marlin/src/HAL/AVR/HAL.h +++ b/Marlin/src/HAL/AVR/HAL.h @@ -157,16 +157,14 @@ inline uint8_t HAL_get_reset_source() { return MCUSR; } void HAL_reboot(); +#pragma GCC diagnostic push #if GCC_VERSION <= 50000 - #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" #endif extern "C" int freeMemory(); -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic pop -#endif +#pragma GCC diagnostic pop // ADC #ifdef DIDR2 diff --git a/Marlin/src/HAL/DUE/HAL.h b/Marlin/src/HAL/DUE/HAL.h index 92e26bcf43..fb90c40aa7 100644 --- a/Marlin/src/HAL/DUE/HAL.h +++ b/Marlin/src/HAL/DUE/HAL.h @@ -168,16 +168,14 @@ void HAL_init(); // void _delay_ms(const int delay); +#pragma GCC diagnostic push #if GCC_VERSION <= 50000 - #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" #endif int freeMemory(); -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic pop -#endif +#pragma GCC diagnostic pop #ifdef __cplusplus extern "C" { diff --git a/Marlin/src/HAL/ESP32/HAL.h b/Marlin/src/HAL/ESP32/HAL.h index bc0ce4e037..8a8f6df640 100644 --- a/Marlin/src/HAL/ESP32/HAL.h +++ b/Marlin/src/HAL/ESP32/HAL.h @@ -105,16 +105,14 @@ void HAL_reboot(); void _delay_ms(int delay); +#pragma GCC diagnostic push #if GCC_VERSION <= 50000 - #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" #endif int freeMemory(); -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic pop -#endif +#pragma GCC diagnostic pop void analogWrite(pin_t pin, int value); diff --git a/Marlin/src/HAL/LINUX/HAL.h b/Marlin/src/HAL/LINUX/HAL.h index 79639f4993..b80fe210f8 100644 --- a/Marlin/src/HAL/LINUX/HAL.h +++ b/Marlin/src/HAL/LINUX/HAL.h @@ -79,16 +79,14 @@ extern MSerialT usb_serial; inline void HAL_init() {} // Utility functions +#pragma GCC diagnostic push #if GCC_VERSION <= 50000 - #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" #endif int freeMemory(); -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic pop -#endif +#pragma GCC diagnostic pop // ADC #define HAL_ADC_VREF 5.0 diff --git a/Marlin/src/HAL/LPC1768/HAL.h b/Marlin/src/HAL/LPC1768/HAL.h index f241249804..348ea6b21a 100644 --- a/Marlin/src/HAL/LPC1768/HAL.h +++ b/Marlin/src/HAL/LPC1768/HAL.h @@ -123,16 +123,14 @@ extern DefaultSerial1 USBSerial; // // Utility functions // +#pragma GCC diagnostic push #if GCC_VERSION <= 50000 - #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" #endif int freeMemory(); -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic pop -#endif +#pragma GCC diagnostic pop // // ADC API diff --git a/Marlin/src/HAL/SAMD51/HAL.h b/Marlin/src/HAL/SAMD51/HAL.h index 491c3f82c4..775a9240e1 100644 --- a/Marlin/src/HAL/SAMD51/HAL.h +++ b/Marlin/src/HAL/SAMD51/HAL.h @@ -153,16 +153,14 @@ void HAL_idletask(); // FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } +#pragma GCC diagnostic push #if GCC_VERSION <= 50000 - #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" #endif int freeMemory(); -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic pop -#endif +#pragma GCC diagnostic pop #ifdef __cplusplus extern "C" { diff --git a/Marlin/src/HAL/TEENSY31_32/HAL.h b/Marlin/src/HAL/TEENSY31_32/HAL.h index aa195845fb..7235f5ef0e 100644 --- a/Marlin/src/HAL/TEENSY31_32/HAL.h +++ b/Marlin/src/HAL/TEENSY31_32/HAL.h @@ -98,16 +98,14 @@ void HAL_reboot(); FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } +#pragma GCC diagnostic push #if GCC_VERSION <= 50000 - #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" #endif extern "C" int freeMemory(); -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic pop -#endif +#pragma GCC diagnostic pop // ADC diff --git a/Marlin/src/HAL/TEENSY35_36/HAL.h b/Marlin/src/HAL/TEENSY35_36/HAL.h index 0093294a2a..8892ffec45 100644 --- a/Marlin/src/HAL/TEENSY35_36/HAL.h +++ b/Marlin/src/HAL/TEENSY35_36/HAL.h @@ -105,16 +105,14 @@ void HAL_reboot(); FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } +#pragma GCC diagnostic push #if GCC_VERSION <= 50000 - #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" #endif extern "C" int freeMemory(); -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic pop -#endif +#pragma GCC diagnostic pop // ADC diff --git a/Marlin/src/HAL/TEENSY40_41/HAL.h b/Marlin/src/HAL/TEENSY40_41/HAL.h index ea51f15ba1..c9716eacde 100644 --- a/Marlin/src/HAL/TEENSY40_41/HAL.h +++ b/Marlin/src/HAL/TEENSY40_41/HAL.h @@ -125,16 +125,14 @@ void HAL_reboot(); FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } +#pragma GCC diagnostic push #if GCC_VERSION <= 50000 - #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" #endif extern "C" uint32_t freeMemory(); -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic pop -#endif +#pragma GCC diagnostic pop // ADC diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp index 847c13d3ac..52554e5df8 100644 --- a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp +++ b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp @@ -862,17 +862,15 @@ void MarlinUI::draw_status_screen() { mix_label = PSTR("Mx"); } + #pragma GCC diagnostic push #if GCC_VERSION <= 50000 - #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat-overflow" #endif sprintf_P(mixer_messages, PSTR(S_FMT " %d;%d%% "), mix_label, int(mixer.mix[0]), int(mixer.mix[1])); lcd_put_u8str(X_LABEL_POS, XYZ_BASELINE, mixer_messages); - #if GCC_VERSION <= 50000 - #pragma GCC diagnostic pop - #endif + #pragma GCC diagnostic pop #else diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/string_format.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/string_format.cpp index ed24a9d9ed..a952028277 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/string_format.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/string_format.cpp @@ -27,8 +27,8 @@ #define ROUND(val) uint16_t((val)+0.5) +#pragma GCC diagnostic push #if GCC_VERSION <= 50000 - #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wno-format" #endif @@ -105,8 +105,6 @@ void format_position(char *str, float x, float y, float z) { sprintf_P(str, PSTR("%s; %s; %s " S_FMT), num1, num2, num3, GET_TEXT(MSG_UNITS_MM)); } -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic pop -#endif +#pragma GCC diagnostic pop #endif // TOUCH_UI_FTDI_EVE diff --git a/Marlin/src/libs/duration_t.h b/Marlin/src/libs/duration_t.h index 4d722a296c..2528bcdbff 100644 --- a/Marlin/src/libs/duration_t.h +++ b/Marlin/src/libs/duration_t.h @@ -106,8 +106,8 @@ struct duration_t { return this->value; } + #pragma GCC diagnostic push #if GCC_VERSION <= 50000 - #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat-overflow" #endif @@ -170,7 +170,5 @@ struct duration_t { } } - #if GCC_VERSION <= 50000 - #pragma GCC diagnostic pop - #endif + #pragma GCC diagnostic pop }; diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index da5a0073cf..332becfb73 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -478,8 +478,8 @@ void Endstops::event_handler() { } } +#pragma GCC diagnostic push #if GCC_VERSION <= 50000 - #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-function" #endif @@ -489,9 +489,7 @@ static void print_es_state(const bool is_hit, FSTR_P const flabel=nullptr) { SERIAL_ECHOLNF(is_hit ? F(STR_ENDSTOP_HIT) : F(STR_ENDSTOP_OPEN)); } -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic pop -#endif +#pragma GCC diagnostic pop void _O2 Endstops::report_states() { TERN_(BLTOUCH, bltouch._set_SW_mode()); From b69971f06aed8e2811ffcede0f153251f06775dc Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 19 Oct 2021 05:53:34 -0500 Subject: [PATCH 030/532] =?UTF-8?q?=F0=9F=94=A8=20Fix=20older=20GCC=20CXXF?= =?UTF-8?q?LAGS=20warning?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/PlatformIO/scripts/common-cxxflags.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/buildroot/share/PlatformIO/scripts/common-cxxflags.py b/buildroot/share/PlatformIO/scripts/common-cxxflags.py index 856a246fba..26bff515a6 100644 --- a/buildroot/share/PlatformIO/scripts/common-cxxflags.py +++ b/buildroot/share/PlatformIO/scripts/common-cxxflags.py @@ -3,13 +3,16 @@ # Convenience script to apply customizations to CPP flags # Import("env") -env.Append(CXXFLAGS=[ - "-Wno-register" + +cxxflags = [ #"-Wno-incompatible-pointer-types", #"-Wno-unused-const-variable", #"-Wno-maybe-uninitialized", #"-Wno-sign-compare" -]) +] +if "teensy" not in env['PIOENV']: + cxxflags += ["-Wno-register"] +env.Append(CXXFLAGS=cxxflags) # # Add CPU frequency as a compile time constant instead of a runtime variable From 5f7c92dfbb0af65610d88ea48d48f00fd04505c2 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 19 Oct 2021 05:59:48 -0500 Subject: [PATCH 031/532] =?UTF-8?q?=F0=9F=8E=A8=20Refactor=20MOSFET=20pins?= =?UTF-8?q?=20layout=20(#22983)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/SanityCheck.h | 2 + Marlin/src/pins/linux/pins_RAMPS_LINUX.h | 71 +++++++---------- Marlin/src/pins/lpc1768/pins_AZSMZ_MINI.h | 4 +- Marlin/src/pins/lpc1768/pins_MKS_SBASE.h | 4 +- Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h | 77 ++++++++----------- Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h | 62 ++++++--------- Marlin/src/pins/pins.h | 20 +++-- Marlin/src/pins/pinsDebug_list.h | 9 --- Marlin/src/pins/ramps/pins_3DRAG.h | 4 +- Marlin/src/pins/ramps/pins_BQ_ZUM_MEGA_3D.h | 6 +- Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h | 17 ---- .../src/pins/ramps/pins_FORMBOT_TREX2PLUS.h | 17 ---- Marlin/src/pins/ramps/pins_K8600.h | 1 - Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h | 1 - Marlin/src/pins/ramps/pins_RAMPS.h | 71 +++++++---------- Marlin/src/pins/ramps/pins_RAMPS_ENDER_4.h | 2 +- Marlin/src/pins/ramps/pins_RAMPS_PLUS.h | 4 +- Marlin/src/pins/ramps/pins_RIGIDBOARD.h | 4 +- Marlin/src/pins/ramps/pins_SAINSMART_2IN1.h | 8 +- Marlin/src/pins/ramps/pins_TRIGORILLA_13.h | 3 +- Marlin/src/pins/ramps/pins_TRIGORILLA_14.h | 72 ++++++++--------- Marlin/src/pins/ramps/pins_VORON.h | 2 +- Marlin/src/pins/ramps/pins_ZRIB_V52.h | 3 +- 23 files changed, 175 insertions(+), 289 deletions(-) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 7d1629a67e..4259bf5271 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -595,6 +595,8 @@ #error "ARC_SUPPORT now requires MIN_ARC_SEGMENT_MM and MAX_ARC_SEGMENT_MM." #elif defined(SPINDLE_LASER_PWM) #error "SPINDLE_LASER_PWM (true) is now set with SPINDLE_LASER_USE_PWM (enabled)." +#elif ANY(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) + #error "The IS_RAMPS_* conditionals (for heater/fan/bed pins) are now called FET_ORDER_*." #endif #if MB(DUE3DOM_MINI) && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD) diff --git a/Marlin/src/pins/linux/pins_RAMPS_LINUX.h b/Marlin/src/pins/linux/pins_RAMPS_LINUX.h index 04f9afaad2..20bd5ef8cc 100644 --- a/Marlin/src/pins/linux/pins_RAMPS_LINUX.h +++ b/Marlin/src/pins/linux/pins_RAMPS_LINUX.h @@ -57,8 +57,6 @@ #define MARLIN_EEPROM_SIZE 0x1000 // 4KB #endif -#define IS_RAMPS_EFB - // // Servos // @@ -144,58 +142,41 @@ #define TEMP_0_CS_PIN 66 // Don't use 49 (SD_DETECT_PIN) #endif -// -// Augmentation for auto-assigning RAMPS plugs -// -#if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D) - #if HAS_MULTI_HOTEND - #if TEMP_SENSOR_BED - #define IS_RAMPS_EEB - #else - #define IS_RAMPS_EEF - #endif - #elif TEMP_SENSOR_BED - #define IS_RAMPS_EFB - #else - #define IS_RAMPS_EFF - #endif -#endif - // // Heaters / Fans // +#ifndef MOSFET_A_PIN + #define MOSFET_A_PIN 10 +#endif +#ifndef MOSFET_B_PIN + #define MOSFET_B_PIN 9 +#endif +#ifndef MOSFET_C_PIN + #define MOSFET_C_PIN 8 +#endif #ifndef MOSFET_D_PIN #define MOSFET_D_PIN -1 #endif -#ifndef RAMPS_D8_PIN - #define RAMPS_D8_PIN 8 -#endif -#ifndef RAMPS_D9_PIN - #define RAMPS_D9_PIN 9 -#endif -#ifndef RAMPS_D10_PIN - #define RAMPS_D10_PIN 10 -#endif -#define HEATER_0_PIN RAMPS_D10_PIN +#define HEATER_0_PIN MOSFET_A_PIN -#if ENABLED(IS_RAMPS_EFB) // Hotend, Fan, Bed - #define FAN_PIN RAMPS_D9_PIN - #define HEATER_BED_PIN RAMPS_D8_PIN -#elif ENABLED(IS_RAMPS_EEF) // Hotend, Hotend, Fan - #define HEATER_1_PIN RAMPS_D9_PIN - #define FAN_PIN RAMPS_D8_PIN -#elif ENABLED(IS_RAMPS_EEB) // Hotend, Hotend, Bed - #define HEATER_1_PIN RAMPS_D9_PIN - #define HEATER_BED_PIN RAMPS_D8_PIN -#elif ENABLED(IS_RAMPS_EFF) // Hotend, Fan, Fan - #define FAN_PIN RAMPS_D9_PIN - #define FAN1_PIN RAMPS_D8_PIN -#elif ENABLED(IS_RAMPS_SF) // Spindle, Fan - #define FAN_PIN RAMPS_D8_PIN +#if FET_ORDER_EFB // Hotend, Fan, Bed + #define FAN_PIN MOSFET_B_PIN + #define HEATER_BED_PIN MOSFET_C_PIN +#elif FET_ORDER_EEF // Hotend, Hotend, Fan + #define HEATER_1_PIN MOSFET_B_PIN + #define FAN_PIN MOSFET_C_PIN +#elif FET_ORDER_EEB // Hotend, Hotend, Bed + #define HEATER_1_PIN MOSFET_B_PIN + #define HEATER_BED_PIN MOSFET_C_PIN +#elif FET_ORDER_EFF // Hotend, Fan, Fan + #define FAN_PIN MOSFET_B_PIN + #define FAN1_PIN MOSFET_C_PIN +#elif FET_ORDER_SF // Spindle, Fan + #define FAN_PIN MOSFET_C_PIN #else // Non-specific are "EFB" (i.e., "EFBF" or "EFBE") - #define FAN_PIN RAMPS_D9_PIN - #define HEATER_BED_PIN RAMPS_D8_PIN + #define FAN_PIN MOSFET_B_PIN + #define HEATER_BED_PIN MOSFET_C_PIN #if HOTENDS == 1 && DISABLED(HEATERS_PARALLEL) #define FAN1_PIN MOSFET_D_PIN #else diff --git a/Marlin/src/pins/lpc1768/pins_AZSMZ_MINI.h b/Marlin/src/pins/lpc1768/pins_AZSMZ_MINI.h index ff36796207..4d1dbecf2e 100644 --- a/Marlin/src/pins/lpc1768/pins_AZSMZ_MINI.h +++ b/Marlin/src/pins/lpc1768/pins_AZSMZ_MINI.h @@ -145,9 +145,9 @@ * PWM1.4 DIO53 SDSS(SSEL0) J3-5 AUX-3 * PWM1.4 DIO46 Z_STEP_PIN * PWM1.5 DIO3 X_MIN_PIN 10K PULLUP TO 3.3v, 1K SERIES - * PWM1.5 DIO9 RAMPS_D9_PIN + * PWM1.5 DIO9 MOSFET_B_PIN * PWM1.6 DIO14 Y_MIN_PIN 10K PULLUP TO 3.3v, 1K SERIES - * PWM1.6 DIO10 RAMPS_D10_PIN + * PWM1.6 DIO10 MOSFET_A_PIN */ /** diff --git a/Marlin/src/pins/lpc1768/pins_MKS_SBASE.h b/Marlin/src/pins/lpc1768/pins_MKS_SBASE.h index 258ecd107b..406e65d295 100644 --- a/Marlin/src/pins/lpc1768/pins_MKS_SBASE.h +++ b/Marlin/src/pins/lpc1768/pins_MKS_SBASE.h @@ -363,9 +363,9 @@ * PWM1.4 P1_23 SDSS(SSEL0) J3-5 AUX-3 * PWM1.4 P2_03 Z_STEP_PIN * PWM1.5 P1_24 X_MIN_PIN 10K PULLUP TO 3.3v, 1K SERIES - * PWM1.5 P2_04 RAMPS_D9_PIN + * PWM1.5 P2_04 MOSFET_B_PIN * PWM1.6 P1_26 Y_MIN_PIN 10K PULLUP TO 3.3v, 1K SERIES - * PWM1.6 P2_05 RAMPS_D10_PIN + * PWM1.6 P2_05 MOSFET_A_PIN */ /** diff --git a/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h b/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h index ce5d5ad7c6..934b74cbb1 100644 --- a/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h +++ b/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h @@ -168,52 +168,35 @@ //#define ?? P0_03_A6 // A6 - ( 0) - RXD0 - J4-4 & AUX-1 #define FILWIDTH_PIN P0_02_A7 // A7 - ( 1) - TXD0 - J4-5 & AUX-1 -// -// Augmentation for auto-assigning RAMPS plugs -// -#if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D) - #if HAS_MULTI_HOTEND - #if TEMP_SENSOR_BED - #define IS_RAMPS_EEB - #else - #define IS_RAMPS_EEF - #endif - #elif TEMP_SENSOR_BED - #define IS_RAMPS_EFB - #else - #define IS_RAMPS_EFF - #endif -#endif - // // Heaters / Fans // +#ifndef MOSFET_A_PIN + #define MOSFET_A_PIN P2_05 +#endif +#ifndef MOSFET_B_PIN + #define MOSFET_B_PIN P2_04 +#endif +#ifndef MOSFET_C_PIN + #define MOSFET_C_PIN P2_07 +#endif #ifndef MOSFET_D_PIN #define MOSFET_D_PIN -1 #endif -#ifndef RAMPS_D8_PIN - #define RAMPS_D8_PIN P2_07 // (8) -#endif -#ifndef RAMPS_D9_PIN - #define RAMPS_D9_PIN P2_04 // (9) -#endif -#ifndef RAMPS_D10_PIN - #define RAMPS_D10_PIN P2_05 // (10) -#endif -#define HEATER_0_PIN RAMPS_D10_PIN +#define HEATER_0_PIN MOSFET_A_PIN -#if ENABLED(IS_RAMPS_EFB) // Hotend, Fan, Bed - #define HEATER_BED_PIN RAMPS_D8_PIN -#elif ENABLED(IS_RAMPS_EEF) // Hotend, Hotend, Fan - #define HEATER_1_PIN RAMPS_D9_PIN -#elif ENABLED(IS_RAMPS_EEB) // Hotend, Hotend, Bed - #define HEATER_1_PIN RAMPS_D9_PIN - #define HEATER_BED_PIN RAMPS_D8_PIN -#elif ENABLED(IS_RAMPS_EFF) // Hotend, Fan, Fan - #define FAN1_PIN RAMPS_D8_PIN -#elif DISABLED(IS_RAMPS_SF) // Not Spindle, Fan (i.e., "EFBF" or "EFBE") - #define HEATER_BED_PIN RAMPS_D8_PIN +#if FET_ORDER_EFB // Hotend, Fan, Bed + #define HEATER_BED_PIN MOSFET_C_PIN +#elif FET_ORDER_EEF // Hotend, Hotend, Fan + #define HEATER_1_PIN MOSFET_B_PIN +#elif FET_ORDER_EEB // Hotend, Hotend, Bed + #define HEATER_1_PIN MOSFET_B_PIN + #define HEATER_BED_PIN MOSFET_C_PIN +#elif FET_ORDER_EFF // Hotend, Fan, Fan + #define FAN1_PIN MOSFET_C_PIN +#elif DISABLED(FET_ORDER_SF) // Not Spindle, Fan (i.e., "EFBF" or "EFBE") + #define HEATER_BED_PIN MOSFET_C_PIN #if HOTENDS == 1 && DISABLED(HEATERS_PARALLEL) #define FAN1_PIN MOSFET_D_PIN #else @@ -222,14 +205,14 @@ #endif #ifndef FAN_PIN - #if EITHER(IS_RAMPS_EFB, IS_RAMPS_EFF) // Hotend, Fan, Bed or Hotend, Fan, Fan - #define FAN_PIN RAMPS_D9_PIN - #elif EITHER(IS_RAMPS_EEF, IS_RAMPS_SF) // Hotend, Hotend, Fan or Spindle, Fan - #define FAN_PIN RAMPS_D8_PIN - #elif ENABLED(IS_RAMPS_EEB) // Hotend, Hotend, Bed + #if EITHER(FET_ORDER_EFB, FET_ORDER_EFF) // Hotend, Fan, Bed or Hotend, Fan, Fan + #define FAN_PIN MOSFET_B_PIN + #elif EITHER(FET_ORDER_EEF, FET_ORDER_SF) // Hotend, Hotend, Fan or Spindle, Fan + #define FAN_PIN MOSFET_C_PIN + #elif FET_ORDER_EEB // Hotend, Hotend, Bed #define FAN_PIN P1_18 // (4) IO pin. Buffer needed #else // Non-specific are "EFB" (i.e., "EFBF" or "EFBE") - #define FAN_PIN RAMPS_D9_PIN + #define FAN_PIN MOSFET_B_PIN #endif #endif @@ -484,14 +467,14 @@ * All Fast PWMs have a 50Hz rate. * * The following pins/signals use the direct method. All other pins use the - * the interrupt method. Note that SERVO2_PIN and RAMPS_D8_PIN use the + * the interrupt method. Note that SERVO2_PIN and MOSFET_C_PIN use the * interrupt method. * * P1_20 (11) SERVO0_PIN * P1_21 ( 6) SERVO1_PIN J5-1 * P0_18 ( 4) SERVO3_PIN 5V output - * *P2_04 ( 9) RAMPS_D9_PIN - * *P2_05 (10) RAMPS_D10_PIN + * *P2_04 ( 9) MOSFET_B_PIN + * *P2_05 (10) MOSFET_A_PIN * * * - If used as a heater driver then a Fast PWM is NOT assigned. If used as * a fan driver then enabling FAST_PWM_FAN assigns a Fast PWM to it. diff --git a/Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h b/Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h index aea05134a8..d5122e46a9 100644 --- a/Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h +++ b/Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h @@ -151,54 +151,43 @@ // With no heated bed, an additional 24V fan is possible. // -// Labels from the schematic: -#define EX1_HEAT_PIN 6 // H3 -#define EX1_FAN_PIN 7 // H4 -#define EX2_HEAT_PIN 11 // B5 -#define EX2_FAN_PIN 12 // B6 -#define HBP_PIN 45 // L4 -#define EXTRA_FET_PIN 44 // L5 - -#if HAS_MULTI_HOTEND - #if TEMP_SENSOR_BED - #define IS_EEB - #else - #define IS_EEF - #endif -#elif TEMP_SENSOR_BED - #define IS_EFB -#else - #define IS_EFF -#endif +#define MOSFET_A_PIN 6 // H3 EX1_HEAT_PIN +#define MOSFET_B_PIN 11 // B5 EX2_HEAT_PIN +#define MOSFET_C_PIN 45 // L4 HBP_PIN +#define MOSFET_D_PIN 44 // L5 EXTRA_FET_PIN // // Heaters / Fans (24V) // -#define HEATER_0_PIN EX1_HEAT_PIN +#define HEATER_0_PIN MOSFET_A_PIN -#if ENABLED(IS_EFB) // Hotend, Fan, Bed - #define HEATER_BED_PIN HBP_PIN -#elif ENABLED(IS_EEF) // Hotend, Hotend, Fan - #define HEATER_1_PIN EX2_HEAT_PIN -#elif ENABLED(IS_EEB) // Hotend, Hotend, Bed - #define HEATER_1_PIN EX2_HEAT_PIN - #define HEATER_BED_PIN HBP_PIN -#elif ENABLED(IS_EFF) // Hotend, Fan, Fan - #define FAN1_PIN HBP_PIN +#if FET_ORDER_EFB // Hotend, Fan, Bed + #define HEATER_BED_PIN MOSFET_C_PIN +#elif FET_ORDER_EEF // Hotend, Hotend, Fan + #define HEATER_1_PIN MOSFET_B_PIN +#elif FET_ORDER_EEB // Hotend, Hotend, Bed + #define HEATER_1_PIN MOSFET_B_PIN + #define HEATER_BED_PIN MOSFET_C_PIN +#elif FET_ORDER_EFF // Hotend, Fan, Fan + #define FAN1_PIN MOSFET_C_PIN #endif #ifndef FAN_PIN - #if EITHER(IS_EFB, IS_EFF) // Hotend, Fan, Bed or Hotend, Fan, Fan - #define FAN_PIN EX2_HEAT_PIN - #elif EITHER(IS_EEF, IS_SF) // Hotend, Hotend, Fan or Spindle, Fan - #define FAN_PIN HBP_PIN + #if EITHER(FET_ORDER_EFB, FET_ORDER_EFF) // Hotend, Fan, Bed or Hotend, Fan, Fan + #define FAN_PIN MOSFET_B_PIN + #elif EITHER(FET_ORDER_EEF, FET_ORDER_SF) // Hotend, Hotend, Fan or Spindle, Fan + #define FAN_PIN MOSFET_C_PIN #else - #define FAN_PIN EXTRA_FET_PIN + #define FAN_PIN MOSFET_D_PIN #endif #endif +#ifndef FAN1_PIN + #define FAN1_PIN 7 // H4 EX1_FAN_PIN +#endif + #ifndef CONTROLLER_FAN_PIN - #define CONTROLLER_FAN_PIN EX2_FAN_PIN + #define CONTROLLER_FAN_PIN 12 // B6 EX2_FAN_PIN #endif // @@ -268,9 +257,6 @@ #define SDSS 53 // B0 #define SD_DETECT_PIN 9 // H6 -// -// TMC 220x -// #if HAS_TMC_UART /** * TMC220x stepper drivers diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 6e5a2e51eb..8df379f853 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -38,15 +38,23 @@ #define MAX_E_STEPPERS 8 #if MB(RAMPS_13_EFB, RAMPS_14_EFB, RAMPS_PLUS_EFB, RAMPS_14_RE_ARM_EFB, RAMPS_SMART_EFB, RAMPS_DUO_EFB, RAMPS4DUE_EFB) - #define IS_RAMPS_EFB + #define FET_ORDER_EFB 1 #elif MB(RAMPS_13_EEB, RAMPS_14_EEB, RAMPS_PLUS_EEB, RAMPS_14_RE_ARM_EEB, RAMPS_SMART_EEB, RAMPS_DUO_EEB, RAMPS4DUE_EEB) - #define IS_RAMPS_EEB + #define FET_ORDER_EEB 1 #elif MB(RAMPS_13_EFF, RAMPS_14_EFF, RAMPS_PLUS_EFF, RAMPS_14_RE_ARM_EFF, RAMPS_SMART_EFF, RAMPS_DUO_EFF, RAMPS4DUE_EFF) - #define IS_RAMPS_EFF + #define FET_ORDER_EFF 1 #elif MB(RAMPS_13_EEF, RAMPS_14_EEF, RAMPS_PLUS_EEF, RAMPS_14_RE_ARM_EEF, RAMPS_SMART_EEF, RAMPS_DUO_EEF, RAMPS4DUE_EEF) - #define IS_RAMPS_EEF -#elif MB(RAMPS_13_SF, RAMPS_14_SF, RAMPS_PLUS_SF, RAMPS_14_RE_ARM_SF, RAMPS_SMART_SF, RAMPS_DUO_SF, RAMPS4DUE_SF) - #define IS_RAMPS_SF + #define FET_ORDER_EEF 1 +#elif MB(RAMPS_13_SF, RAMPS_14_SF, RAMPS_PLUS_SF, RAMPS_14_RE_ARM_SF, RAMPS_SMART_SF, RAMPS_DUO_SF, RAMPS4DUE_SF) || EITHER(SPINDLE_FEATURE, LASER_FEATURE) + #define FET_ORDER_SF 1 +#elif HAS_MULTI_HOTEND && TEMP_SENSOR_BED + #define FET_ORDER_EEB 1 +#elif HAS_MULTI_HOTEND + #define FET_ORDER_EEF 1 +#elif TEMP_SENSOR_BED + #define FET_ORDER_EFB 1 +#else + #define FET_ORDER_EFF 1 #endif #if !(BOTH(IS_ULTRA_LCD, IS_NEWPANEL) && ANY(PANEL_ONE, VIKI2, miniVIKI, WYH_L12864, MINIPANEL, REPRAPWORLD_KEYPAD)) diff --git a/Marlin/src/pins/pinsDebug_list.h b/Marlin/src/pins/pinsDebug_list.h index 8a4350d90e..f07b1cf025 100644 --- a/Marlin/src/pins/pinsDebug_list.h +++ b/Marlin/src/pins/pinsDebug_list.h @@ -909,15 +909,6 @@ #if _EXISTS(REF_CLK) REPORT_NAME_DIGITAL(__LINE__, REF_CLK) #endif -#if PIN_EXISTS(RAMPS_D10) - REPORT_NAME_DIGITAL(__LINE__, RAMPS_D10_PIN) -#endif -#if PIN_EXISTS(RAMPS_D8) - REPORT_NAME_DIGITAL(__LINE__, RAMPS_D8_PIN) -#endif -#if PIN_EXISTS(RAMPS_D9) - REPORT_NAME_DIGITAL(__LINE__, RAMPS_D9_PIN) -#endif #if PIN_EXISTS(NEOPIXEL) REPORT_NAME_DIGITAL(__LINE__, NEOPIXEL_PIN) #endif diff --git a/Marlin/src/pins/ramps/pins_3DRAG.h b/Marlin/src/pins/ramps/pins_3DRAG.h index 4ff6e2d7e5..48eeacd5c4 100644 --- a/Marlin/src/pins/ramps/pins_3DRAG.h +++ b/Marlin/src/pins/ramps/pins_3DRAG.h @@ -62,8 +62,8 @@ // // Heaters / Fans // -#define RAMPS_D8_PIN 9 -#define RAMPS_D9_PIN 8 +#define MOSFET_B_PIN 8 +#define MOSFET_C_PIN 9 #define MOSFET_D_PIN 12 // diff --git a/Marlin/src/pins/ramps/pins_BQ_ZUM_MEGA_3D.h b/Marlin/src/pins/ramps/pins_BQ_ZUM_MEGA_3D.h index 523ab7678f..4a54b85ae0 100644 --- a/Marlin/src/pins/ramps/pins_BQ_ZUM_MEGA_3D.h +++ b/Marlin/src/pins/ramps/pins_BQ_ZUM_MEGA_3D.h @@ -68,9 +68,9 @@ // // Heaters / Fans // -#define RAMPS_D8_PIN 10 -#define RAMPS_D9_PIN 12 -#define RAMPS_D10_PIN 9 +#define MOSFET_A_PIN 9 +#define MOSFET_B_PIN 12 +#define MOSFET_C_PIN 10 #define MOSFET_D_PIN 7 // diff --git a/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h b/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h index 34a4ceb27d..845e2d65ec 100644 --- a/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h +++ b/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h @@ -121,23 +121,6 @@ #define TEMP_0_CS_PIN 66 // Don't use 49 (SD_DETECT_PIN) #endif -// -// Augmentation for auto-assigning RAMPS plugs -// -#if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D) - #if HAS_MULTI_HOTEND - #if TEMP_SENSOR_BED - #define IS_RAMPS_EEB - #else - #define IS_RAMPS_EEF - #endif - #elif TEMP_SENSOR_BED - #define IS_RAMPS_EFB - #else - #define IS_RAMPS_EFF - #endif -#endif - // // Heaters / Fans // diff --git a/Marlin/src/pins/ramps/pins_FORMBOT_TREX2PLUS.h b/Marlin/src/pins/ramps/pins_FORMBOT_TREX2PLUS.h index f15c89e4f8..7a12831862 100644 --- a/Marlin/src/pins/ramps/pins_FORMBOT_TREX2PLUS.h +++ b/Marlin/src/pins/ramps/pins_FORMBOT_TREX2PLUS.h @@ -118,23 +118,6 @@ #define TEMP_0_CS_PIN 66 // Don't use 49 (SD_DETECT_PIN) #endif -// -// Augmentation for auto-assigning RAMPS plugs -// -#if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D) - #if HAS_MULTI_HOTEND - #if TEMP_SENSOR_BED - #define IS_RAMPS_EEB - #else - #define IS_RAMPS_EEF - #endif - #elif TEMP_SENSOR_BED - #define IS_RAMPS_EFB - #else - #define IS_RAMPS_EFF - #endif -#endif - // // Heaters / Fans // diff --git a/Marlin/src/pins/ramps/pins_K8600.h b/Marlin/src/pins/ramps/pins_K8600.h index d312490dbe..f37516b710 100644 --- a/Marlin/src/pins/ramps/pins_K8600.h +++ b/Marlin/src/pins/ramps/pins_K8600.h @@ -59,7 +59,6 @@ // // Other RAMPS pins // -#define IS_RAMPS_EFB // Override autodetection. Bed will be undefined. #include "pins_RAMPS.h" // diff --git a/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h b/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h index 6b48e3cbd6..3b2639b431 100644 --- a/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h +++ b/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h @@ -116,5 +116,4 @@ // // Other RAMPS 1.3 pins // -#define IS_RAMPS_EFB // Override autodetection. Bed will be undefined. #include "pins_RAMPS_13.h" // ... RAMPS diff --git a/Marlin/src/pins/ramps/pins_RAMPS.h b/Marlin/src/pins/ramps/pins_RAMPS.h index e90c3d03fc..4697ff61b2 100644 --- a/Marlin/src/pins/ramps/pins_RAMPS.h +++ b/Marlin/src/pins/ramps/pins_RAMPS.h @@ -189,52 +189,35 @@ #define TEMP_0_CS_PIN 66 // Don't use 53 if using Display/SD card (SDSS) or 49 (SD_DETECT_PIN) #endif -// -// Augmentation for auto-assigning RAMPS plugs -// -#if NONE(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) && !PIN_EXISTS(MOSFET_D) - #if HAS_MULTI_HOTEND - #if TEMP_SENSOR_BED - #define IS_RAMPS_EEB - #else - #define IS_RAMPS_EEF - #endif - #elif TEMP_SENSOR_BED - #define IS_RAMPS_EFB - #else - #define IS_RAMPS_EFF - #endif -#endif - // // Heaters / Fans // +#ifndef MOSFET_A_PIN + #define MOSFET_A_PIN 10 +#endif +#ifndef MOSFET_B_PIN + #define MOSFET_B_PIN 9 +#endif +#ifndef MOSFET_C_PIN + #define MOSFET_C_PIN 8 +#endif #ifndef MOSFET_D_PIN #define MOSFET_D_PIN -1 #endif -#ifndef RAMPS_D8_PIN - #define RAMPS_D8_PIN 8 -#endif -#ifndef RAMPS_D9_PIN - #define RAMPS_D9_PIN 9 -#endif -#ifndef RAMPS_D10_PIN - #define RAMPS_D10_PIN 10 -#endif -#define HEATER_0_PIN RAMPS_D10_PIN +#define HEATER_0_PIN MOSFET_A_PIN -#if ENABLED(IS_RAMPS_EFB) // Hotend, Fan, Bed - #define HEATER_BED_PIN RAMPS_D8_PIN -#elif ENABLED(IS_RAMPS_EEF) // Hotend, Hotend, Fan - #define HEATER_1_PIN RAMPS_D9_PIN -#elif ENABLED(IS_RAMPS_EEB) // Hotend, Hotend, Bed - #define HEATER_1_PIN RAMPS_D9_PIN - #define HEATER_BED_PIN RAMPS_D8_PIN -#elif ENABLED(IS_RAMPS_EFF) // Hotend, Fan, Fan - #define FAN1_PIN RAMPS_D8_PIN -#elif DISABLED(IS_RAMPS_SF) // Not Spindle, Fan (i.e., "EFBF" or "EFBE") - #define HEATER_BED_PIN RAMPS_D8_PIN +#if FET_ORDER_EFB // Hotend, Fan, Bed + #define HEATER_BED_PIN MOSFET_C_PIN +#elif FET_ORDER_EEF // Hotend, Hotend, Fan + #define HEATER_1_PIN MOSFET_B_PIN +#elif FET_ORDER_EEB // Hotend, Hotend, Bed + #define HEATER_1_PIN MOSFET_B_PIN + #define HEATER_BED_PIN MOSFET_C_PIN +#elif FET_ORDER_EFF // Hotend, Fan, Fan + #define FAN1_PIN MOSFET_C_PIN +#elif DISABLED(FET_ORDER_SF) // Not Spindle, Fan (i.e., "EFBF" or "EFBE") + #define HEATER_BED_PIN MOSFET_C_PIN #if EITHER(HAS_MULTI_HOTEND, HEATERS_PARALLEL) #define HEATER_1_PIN MOSFET_D_PIN #else @@ -243,14 +226,14 @@ #endif #ifndef FAN_PIN - #if EITHER(IS_RAMPS_EFB, IS_RAMPS_EFF) // Hotend, Fan, Bed or Hotend, Fan, Fan - #define FAN_PIN RAMPS_D9_PIN - #elif EITHER(IS_RAMPS_EEF, IS_RAMPS_SF) // Hotend, Hotend, Fan or Spindle, Fan - #define FAN_PIN RAMPS_D8_PIN - #elif ENABLED(IS_RAMPS_EEB) // Hotend, Hotend, Bed + #if EITHER(FET_ORDER_EFB, FET_ORDER_EFF) // Hotend, Fan, Bed or Hotend, Fan, Fan + #define FAN_PIN MOSFET_B_PIN + #elif EITHER(FET_ORDER_EEF, FET_ORDER_SF) // Hotend, Hotend, Fan or Spindle, Fan + #define FAN_PIN MOSFET_C_PIN + #elif FET_ORDER_EEB // Hotend, Hotend, Bed #define FAN_PIN 4 // IO pin. Buffer needed #else // Non-specific are "EFB" (i.e., "EFBF" or "EFBE") - #define FAN_PIN RAMPS_D9_PIN + #define FAN_PIN MOSFET_B_PIN #endif #endif diff --git a/Marlin/src/pins/ramps/pins_RAMPS_ENDER_4.h b/Marlin/src/pins/ramps/pins_RAMPS_ENDER_4.h index d9964242dd..ebd0bdc0c6 100644 --- a/Marlin/src/pins/ramps/pins_RAMPS_ENDER_4.h +++ b/Marlin/src/pins/ramps/pins_RAMPS_ENDER_4.h @@ -36,6 +36,6 @@ #if ENABLED(CASE_LIGHT_ENABLE) #undef FAN_PIN #ifndef CASE_LIGHT_PIN - #define CASE_LIGHT_PIN RAMPS_D9_PIN + #define CASE_LIGHT_PIN MOSFET_B_PIN #endif #endif diff --git a/Marlin/src/pins/ramps/pins_RAMPS_PLUS.h b/Marlin/src/pins/ramps/pins_RAMPS_PLUS.h index af91f63bdb..a69572dee7 100644 --- a/Marlin/src/pins/ramps/pins_RAMPS_PLUS.h +++ b/Marlin/src/pins/ramps/pins_RAMPS_PLUS.h @@ -41,8 +41,8 @@ #define BOARD_INFO_NAME "RAMPS 1.4 Plus" -#define RAMPS_D8_PIN 10 -#define RAMPS_D10_PIN 8 +#define MOSFET_A_PIN 8 +#define MOSFET_C_PIN 10 // // Steppers diff --git a/Marlin/src/pins/ramps/pins_RIGIDBOARD.h b/Marlin/src/pins/ramps/pins_RIGIDBOARD.h index 0263c78b06..2d68577f7c 100644 --- a/Marlin/src/pins/ramps/pins_RIGIDBOARD.h +++ b/Marlin/src/pins/ramps/pins_RIGIDBOARD.h @@ -51,8 +51,8 @@ // // MOSFET changes // -#define RAMPS_D9_PIN 8 // FAN (by default) -#define RAMPS_D10_PIN 9 // EXTRUDER 1 +#define MOSFET_A_PIN 9 // EXTRUDER 1 +#define MOSFET_B_PIN 8 // FAN (by default) #define MOSFET_D_PIN 12 // EXTRUDER 2 or FAN #include "pins_RAMPS.h" diff --git a/Marlin/src/pins/ramps/pins_SAINSMART_2IN1.h b/Marlin/src/pins/ramps/pins_SAINSMART_2IN1.h index e15fc94ac4..85defdf1bd 100644 --- a/Marlin/src/pins/ramps/pins_SAINSMART_2IN1.h +++ b/Marlin/src/pins/ramps/pins_SAINSMART_2IN1.h @@ -34,9 +34,9 @@ // // Heaters / Fans // -#define RAMPS_D10_PIN 9 // E -#define RAMPS_D9_PIN 7 // F PART FAN in front of board next to Extruder heat - // RAMPS_D8_PIN 8 // B -#define MOSFET_D_PIN 10 // F / E +#define MOSFET_A_PIN 9 // E +#define MOSFET_B_PIN 7 // F PART FAN in front of board next to Extruder heat + // MOSFET_C_PIN 8 // B +#define MOSFET_D_PIN 10 // F / E #include "pins_RAMPS.h" diff --git a/Marlin/src/pins/ramps/pins_TRIGORILLA_13.h b/Marlin/src/pins/ramps/pins_TRIGORILLA_13.h index eee0dcd3d2..71dfb8c704 100644 --- a/Marlin/src/pins/ramps/pins_TRIGORILLA_13.h +++ b/Marlin/src/pins/ramps/pins_TRIGORILLA_13.h @@ -27,8 +27,7 @@ #define BOARD_INFO_NAME "Anycubic RAMPS 1.3" -#define IS_RAMPS_EFB -#define RAMPS_D9_PIN 44 +#define MOSFET_B_PIN 44 #define E1_STEP_PIN -1 #define E1_DIR_PIN -1 diff --git a/Marlin/src/pins/ramps/pins_TRIGORILLA_14.h b/Marlin/src/pins/ramps/pins_TRIGORILLA_14.h index 54d91cee6a..994a54297f 100644 --- a/Marlin/src/pins/ramps/pins_TRIGORILLA_14.h +++ b/Marlin/src/pins/ramps/pins_TRIGORILLA_14.h @@ -27,16 +27,6 @@ #define BOARD_INFO_NAME "Anycubic RAMPS 1.4" -// Board labeled pins: - -#define TG_HEATER_BED_PIN 8 -#define TG_HEATER_0_PIN 10 -#define TG_HEATER_1_PIN 45 // Anycubic Kossel: Unused - -#define TG_FAN0_PIN 9 // Anycubic Kossel: Usually the part cooling fan -#define TG_FAN1_PIN 7 // Anycubic Kossel: Unused -#define TG_FAN2_PIN 44 // Anycubic Kossel: Hotend fan - // // Servos // @@ -47,45 +37,45 @@ #define SERVO3_PIN 6 #endif -// Remap MOSFET pins to common usages: - -#define RAMPS_D10_PIN TG_HEATER_0_PIN // HEATER_0_PIN is always RAMPS_D10_PIN in pins_RAMPS.h - -#if HAS_MULTI_HOTEND // EEF and EEB - #define RAMPS_D9_PIN TG_HEATER_1_PIN - #if !TEMP_SENSOR_BED - // EEF - #define RAMPS_D8_PIN TG_FAN0_PIN - #else - // EEB - #define RAMPS_D8_PIN TG_HEATER_BED_PIN - #define FAN_PIN TG_FAN0_PIN // Override pin 4 in pins_RAMPS.h - #endif -#elif TEMP_SENSOR_BED - // EFB (Anycubic Kossel default) - #define RAMPS_D9_PIN TG_FAN0_PIN - #if ENABLED(ANYCUBIC_LCD_CHIRON) - #define RAMPS_D8_PIN TG_HEATER_1_PIN // Heated bed is connected to HEATER1 output - #else - #define RAMPS_D8_PIN TG_HEATER_BED_PIN - #endif +// +// PWM FETS +// +#if EITHER(FET_ORDER_EEF, FET_ORDER_EEB) + #define MOSFET_B_PIN 45 // HEATER1 +#elif FET_ORDER_EFB + #define MOSFET_B_PIN 9 // FAN0 #else - // EFF - #define RAMPS_D9_PIN TG_FAN1_PIN - #define RAMPS_D8_PIN TG_FAN0_PIN + #define MOSFET_B_PIN 7 // FAN1 #endif -#if HAS_MULTI_HOTEND || TEMP_SENSOR_BED // EEF, EEB, EFB - #define FAN1_PIN TG_FAN1_PIN +#if FET_ORDER_EEB + #define MOSFET_C_PIN 8 // BED +#elif FET_ORDER_EFB + #if DISABLED(ANYCUBIC_LCD_CHIRON) + #define MOSFET_C_PIN 8 + #else + #define MOSFET_C_PIN 45 + #endif +#else // EEF, EFF + #define MOSFET_C_PIN 9 #endif -#define FAN2_PIN TG_FAN2_PIN +#if FET_ORDER_EEB + #define FAN_PIN 9 // Override pin 4 in pins_RAMPS.h +#endif + +// +// Heaters / Fans +// +#if ANY(FET_ORDER_EEF, FET_ORDER_EEB, FET_ORDER_EFB) + #define FAN1_PIN 7 +#endif +#define FAN2_PIN 44 #ifndef E0_AUTO_FAN_PIN - #define E0_AUTO_FAN_PIN TG_FAN2_PIN // Used in Anycubic Kossel example config + #define E0_AUTO_FAN_PIN 44 // Used in Anycubic Kossel example config #endif - #if ENABLED(ANYCUBIC_LCD_I3MEGA) - #define CONTROLLER_FAN_PIN TG_FAN1_PIN + #define CONTROLLER_FAN_PIN 7 #endif // diff --git a/Marlin/src/pins/ramps/pins_VORON.h b/Marlin/src/pins/ramps/pins_VORON.h index 9ab6573468..9390381010 100644 --- a/Marlin/src/pins/ramps/pins_VORON.h +++ b/Marlin/src/pins/ramps/pins_VORON.h @@ -28,7 +28,7 @@ #define BOARD_INFO_NAME "VORON Design v2" -#define RAMPS_D8_PIN 11 +#define MOSFET_C_PIN 11 #include "pins_RAMPS.h" diff --git a/Marlin/src/pins/ramps/pins_ZRIB_V52.h b/Marlin/src/pins/ramps/pins_ZRIB_V52.h index a6e9175b62..27f043914f 100644 --- a/Marlin/src/pins/ramps/pins_ZRIB_V52.h +++ b/Marlin/src/pins/ramps/pins_ZRIB_V52.h @@ -32,11 +32,11 @@ #define BOARD_INFO_NAME "ZRIB V5.2" #define MKS_BASE_VERSION 14 -#define IS_RAMPS_EFB // // Heaters / Fans // +#define HEATER_1_PIN 7 #define FAN_PIN 9 // PH6 ** Pin18 ** PWM9 #define FAN1_PIN 6 @@ -46,7 +46,6 @@ #define E2_STEP_PIN 4 #define E2_DIR_PIN 5 #define E2_ENABLE_PIN 22 -#define HEATER_1_PIN 7 #include "pins_MKS_BASE_common.h" // ... RAMPS From 52edc543bd72bfacb4ac6eb47eae2e466dcce62d Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Tue, 19 Oct 2021 06:05:23 -0500 Subject: [PATCH 032/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20pragma=20ignored?= =?UTF-8?q?=20for=20older=20GCC=20(#22978)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/gcode.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 5a030e97ab..ef21935185 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -1095,14 +1095,15 @@ void GcodeSuite::process_next_command() { process_parsed_command(); } +#pragma GCC diagnostic push +#if GCC_VERSION >= 80000 + #pragma GCC diagnostic ignored "-Wstringop-truncation" +#endif + /** * Run a series of commands, bypassing the command queue to allow * G-code "macros" to be called from within other G-code handlers. */ - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wstringop-truncation" - void GcodeSuite::process_subcommands_now(FSTR_P fgcode) { PGM_P pgcode = FTOP(fgcode); char * const saved_cmd = parser.command_ptr; // Save the parser state From a6a838084d69435f2113deb5d783b96d909be085 Mon Sep 17 00:00:00 2001 From: Augusto Zanellato Date: Tue, 19 Oct 2021 17:24:22 +0200 Subject: [PATCH 033/532] =?UTF-8?q?=E2=9C=A8=20Eryone=20Ery32=20mini=20(ST?= =?UTF-8?q?M32F103VET6)=20board=20(#22956)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/boards.h | 1 + Marlin/src/pins/pins.h | 2 + .../src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h | 195 ++++++++++++++++++ .../PlatformIO/ldscripts/eryone_ery32_mini.ld | 14 ++ .../variants/marlin_MEEB_3DP/ld/mem-flash.inc | 4 +- ini/stm32f1-maple.ini | 19 ++ 6 files changed, 233 insertions(+), 2 deletions(-) create mode 100644 Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h create mode 100644 buildroot/share/PlatformIO/ldscripts/eryone_ery32_mini.ld diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 86fe878837..ab8383ddb5 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -355,6 +355,7 @@ #define BOARD_ZONESTAR_ZM3E2 4055 // Zonestar ZM3E2 (STM32F103RCT6) #define BOARD_ZONESTAR_ZM3E4 4056 // Zonestar ZM3E4 V1 (STM32F103VCT6) #define BOARD_ZONESTAR_ZM3E4V2 4057 // Zonestar ZM3E4 V2 (STM32F103VCT6) +#define BOARD_ERYONE_ERY32_MINI 4058 // Eryone Ery32 mini (STM32F103VET6) // // ARM Cortex-M4F diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 8df379f853..64cebc42e7 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -579,6 +579,8 @@ #include "stm32f1/pins_ZM3E4_V1_0.h" // STM32F1 env:STM32F103VC_ZM3E4_USB env:STM32F103VC_ZM3E4_USB_maple #elif MB(ZONESTAR_ZM3E4V2) #include "stm32f1/pins_ZM3E4_V2_0.h" // STM32F1 env:STM32F103VE_ZM3E4V2_USB env:STM32F103VE_ZM3E4V2_USB_maple +#elif MB(ERYONE_ERY32_MINI) + #include "stm32f1/pins_ERYONE_ERY32_MINI.h" // STM32F103VET6 env:ERYONE_ERY32_MINI_maple // // ARM Cortex-M4F diff --git a/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h b/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h new file mode 100644 index 0000000000..7ce21a20af --- /dev/null +++ b/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h @@ -0,0 +1,195 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 + +/** + * Eryone Ery32 mini (STM32F103VET6) board pin assignments + */ + +#include "env_validate.h" + +#if HOTENDS > 2 || E_STEPPERS > 2 + #error "Eryone Ery32 mini supports up to 2 hotends / E-steppers. Comment out this line to continue." +#endif + +#ifndef BOARD_INFO_NAME + #define BOARD_INFO_NAME "ERYONE Ery32 mini" +#endif + +//#define DISABLE_DEBUG +#define DISABLE_JTAG +//#define ENABLE_SPI3 +#define FLASH_EEPROM_EMULATION +#define FAN_SOFT_PWM + +#if ENABLED(FLASH_EEPROM_EMULATION) + #define EEPROM_PAGE_SIZE (0x800U) // 2KB + #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 PA12 + +// +// Limit Switches +// +#define X_STOP_PIN PD8 +#define Y_STOP_PIN PD15 +#define Z_MIN_PIN PA11 +//#define Z_MAX_PIN PB1 + +// +// Steppers +// +#define X_STEP_PIN PB15 +#define X_DIR_PIN PB14 +#define X_ENABLE_PIN PD10 + +#define Y_STEP_PIN PD14 +#define Y_DIR_PIN PD13 +#define Y_ENABLE_PIN PC6 + +#define Z_STEP_PIN PC8 +#define Z_DIR_PIN PC7 +#define Z_ENABLE_PIN PA8 + +#define E0_STEP_PIN PE13 +#define E0_DIR_PIN PE14 +#define E0_ENABLE_PIN PB13 + +//#define E1_STEP_PIN PD13 +//#define E1_DIR_PIN PD12 +//#define E1_ENABLE_PIN PC6 + +// +// Heaters 0,1 / Fans / Bed +// +#define HEATER_0_PIN PD11 + +#if ENABLED(FET_ORDER_EFB) // Hotend, Fan, Bed + #define HEATER_BED_PIN PD12 +#elif ENABLED(FET_ORDER_EEF) // Hotend, Hotend, Fan + #define HEATER_1_PIN PD4 +#elif ENABLED(FET_ORDER_EEB) // Hotend, Hotend, Bed + #define HEATER_1_PIN PD4 + #define HEATER_BED_PIN PD12 +#elif ENABLED(FET_ORDER_EFF) // Hotend, Fan, Fan + #define FAN1_PIN PD12 +#elif DISABLED(FET_ORDER_SF) // Not Spindle, Fan (i.e., "EFBF" or "EFBE") + #define HEATER_BED_PIN PD12 + #if EITHER(HAS_MULTI_HOTEND, HEATERS_PARALLEL) + #define HEATER_1_PIN PB9 + #else + #define FAN1_PIN PB9 + #endif +#endif + +#ifndef FAN_PIN + #if EITHER(FET_ORDER_EFB, FET_ORDER_EFF) // Hotend, Fan, Bed or Hotend, Fan, Fan + #define FAN_PIN PB5 + #elif EITHER(FET_ORDER_EEF, FET_ORDER_SF) // Hotend, Hotend, Fan or Spindle, Fan + #define FAN_PIN PD12 + #elif ENABLED(FET_ORDER_EEB) // Hotend, Hotend, Bed + #define FAN_PIN -1 // IO pin. Buffer needed + #else // Non-specific are "EFB" (i.e., "EFBF" or "EFBE") + #define FAN_PIN PB5 + #endif +#endif + +// +// Misc. Functions +// +//#define PS_ON_PIN PB9 + +#if HAS_TMC_UART + /** + * TMC2208/TMC2209 stepper drivers + * + * Hardware serial communication ports. + * If undefined software serial is used according to the pins below + */ + #define X_HARDWARE_SERIAL MSerial4 + #define Y_HARDWARE_SERIAL MSerial4 + #define Z_HARDWARE_SERIAL MSerial4 + #define E0_HARDWARE_SERIAL MSerial4 + #ifndef X_SLAVE_ADDRESS + #define X_SLAVE_ADDRESS 2 + #endif + #ifndef Y_SLAVE_ADDRESS + #define Y_SLAVE_ADDRESS 3 + #endif + #ifndef Z_SLAVE_ADDRESS + #define Z_SLAVE_ADDRESS 1 + #endif + #ifndef E0_SLAVE_ADDRESS + #define E0_SLAVE_ADDRESS 0 + #endif +#endif +// +// Temperature Sensors +// +#define TEMP_BED_PIN PC2 //TB +#define TEMP_0_PIN PC1 //TH1 +//#define TEMP_1_PIN PC3 //TH2 +#define TEMP_BOARD_PIN PC3 +#ifndef TEMP_SENSOR_BOARD + #define TEMP_SENSOR_BOARD 13 +#endif +#define FIL_RUNOUT_PIN PA10 // MT_DET + +// +// LCD Pins +// +#if HAS_WIRED_LCD + #define BEEPER_PIN PE12 + #define BTN_ENC PE11 + #define LCD_PINS_ENABLE PE10 + #define LCD_PINS_RS PE9 + #define BTN_EN1 PE4 + #define BTN_EN2 PE3 + #define LCD_PINS_D4 PE8 + #define LCD_PINS_D5 PE7 + #define LCD_PINS_D6 PB2 + #define LCD_PINS_D7 PB1 + + #if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) + #define BTN_ENC_EN LCD_PINS_D7 // Detect the presence of the encoder + #endif + + #define BOARD_ST7920_DELAY_1 50 + #define BOARD_ST7920_DELAY_2 50 + #define BOARD_ST7920_DELAY_3 50 + +#endif // HAS_WIRED_LCD + +// +// SD Card +// +#define ENABLE_SPI1 +#define SD_DETECT_PIN PA4 +#define SCK_PIN PA5 +#define MISO_PIN PA6 +#define MOSI_PIN PA7 +#define SS_PIN PC4 diff --git a/buildroot/share/PlatformIO/ldscripts/eryone_ery32_mini.ld b/buildroot/share/PlatformIO/ldscripts/eryone_ery32_mini.ld new file mode 100644 index 0000000000..0458574256 --- /dev/null +++ b/buildroot/share/PlatformIO/ldscripts/eryone_ery32_mini.ld @@ -0,0 +1,14 @@ +MEMORY +{ + ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - 4K + rom (rx) : ORIGIN = 0x08004000, LENGTH = 512K - 16K +} + +/* Provide memory region aliases for common.inc */ +REGION_ALIAS("REGION_TEXT", rom); +REGION_ALIAS("REGION_DATA", ram); +REGION_ALIAS("REGION_BSS", ram); +REGION_ALIAS("REGION_RODATA", rom); + +/* Let common.inc handle the real work. */ +INCLUDE common.inc diff --git a/buildroot/share/PlatformIO/variants/marlin_MEEB_3DP/ld/mem-flash.inc b/buildroot/share/PlatformIO/variants/marlin_MEEB_3DP/ld/mem-flash.inc index ddb8876fa5..75030ec01a 100644 --- a/buildroot/share/PlatformIO/variants/marlin_MEEB_3DP/ld/mem-flash.inc +++ b/buildroot/share/PlatformIO/variants/marlin_MEEB_3DP/ld/mem-flash.inc @@ -1,5 +1,5 @@ MEMORY { - ram (rwx) : ORIGIN = 0x20000C00, LENGTH = 61K - rom (rx) : ORIGIN = 0x08005000, LENGTH = 492K + ram (rwx) : ORIGIN = 0x20000C00, LENGTH = 64K - 3K + rom (rx) : ORIGIN = 0x08005000, LENGTH = 512K - 20K } diff --git a/ini/stm32f1-maple.ini b/ini/stm32f1-maple.ini index e11aa03560..f86bf98ebd 100644 --- a/ini/stm32f1-maple.ini +++ b/ini/stm32f1-maple.ini @@ -400,3 +400,22 @@ board = genericSTM32F103VE board_build.ldscript = ZONESTAR_ZM3E_512K.ld build_flags = ${ZONESTAR_ZM3E_maple.build_flags} -DTONE_TIMER=1 -DTONE_CHANNEL=2 board_upload.maximum_size = 499712 + +# +# ERYONE ERY32 Mini (STM32F103VET6) +# +[env:ERYONE_ERY32_MINI_maple] +platform = ${common_stm32f1.platform} +extends = common_stm32f1 +board = genericSTM32F103VE +build_flags = ${common_stm32f1.build_flags} + -ffunction-sections -fdata-sections -nostdlib -MMD + -DMCU_STM32F103VE -DARDUINO_GENERIC_STM32F103V -DARDUINO_ARCH_STM32F1 -O0 + -DDEBUG_LEVEL=DEBUG_NONE -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG=1 + -DSS_TIMER=4 +board_build.variant = MARLIN_F103Vx +board_build.ldscript = eryone_ery32_mini.ld +board_build.address = 0x08004000 +build_unflags = ${common_stm32f1.build_unflags} +extra_scripts = ${common_stm32f1.extra_scripts} + buildroot/share/PlatformIO/scripts/custom_board.py From a05b66a9503ea89cbb967f50c8680856c40c724f Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 20 Oct 2021 01:05:51 +0000 Subject: [PATCH 034/532] [cron] Bump distribution date (2021-10-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 f88ecddddc..00f73bbb4f 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 "2021-10-19" +//#define STRING_DISTRIBUTION_DATE "2021-10-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 eb6f967756..fdb1328611 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 "2021-10-19" + #define STRING_DISTRIBUTION_DATE "2021-10-20" #endif /** From 566ce56a2d6c572d9d4700dad95a330b2459cb32 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 21 Oct 2021 01:08:58 +0000 Subject: [PATCH 035/532] [cron] Bump distribution date (2021-10-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 00f73bbb4f..b8abeb8838 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 "2021-10-20" +//#define STRING_DISTRIBUTION_DATE "2021-10-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 fdb1328611..654ccb4b08 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 "2021-10-20" + #define STRING_DISTRIBUTION_DATE "2021-10-21" #endif /** From a309a9535db532457b0aca8e861f5b8ed9f8dd93 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 22 Oct 2021 01:12:18 +0000 Subject: [PATCH 036/532] [cron] Bump distribution date (2021-10-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 b8abeb8838..8fbfd2b6d5 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 "2021-10-21" +//#define STRING_DISTRIBUTION_DATE "2021-10-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 654ccb4b08..582347a78b 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 "2021-10-21" + #define STRING_DISTRIBUTION_DATE "2021-10-22" #endif /** From f62890d889f51e07e3281e065d93445afe7b6566 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Fri, 22 Oct 2021 17:57:30 +1300 Subject: [PATCH 037/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20E3V2=20width/heigh?= =?UTF-8?q?t=20defines=20(#22994)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/common/dwin_api.h | 7 ++++--- Marlin/src/lcd/e3v2/creality/dwin_lcd.h | 3 --- Marlin/src/lcd/e3v2/marlinui/dwin_lcd.h | 5 ----- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/Marlin/src/lcd/e3v2/common/dwin_api.h b/Marlin/src/lcd/e3v2/common/dwin_api.h index 11b065e420..37b1525ba3 100644 --- a/Marlin/src/lcd/e3v2/common/dwin_api.h +++ b/Marlin/src/lcd/e3v2/common/dwin_api.h @@ -23,10 +23,11 @@ #include "../../../inc/MarlinConfig.h" -#ifndef DWIN_WIDTH +#if ENABLED(DWIN_MARLINUI_LANDSCAPE) + #define DWIN_WIDTH 480 + #define DWIN_HEIGHT 272 +#else #define DWIN_WIDTH 272 -#endif -#ifndef DWIN_HEIGHT #define DWIN_HEIGHT 480 #endif diff --git a/Marlin/src/lcd/e3v2/creality/dwin_lcd.h b/Marlin/src/lcd/e3v2/creality/dwin_lcd.h index 115781f094..b37a65977c 100644 --- a/Marlin/src/lcd/e3v2/creality/dwin_lcd.h +++ b/Marlin/src/lcd/e3v2/creality/dwin_lcd.h @@ -29,9 +29,6 @@ * @brief 迪文屏控制操作函数 ********************************************************************************/ -#define DWIN_WIDTH 272 -#define DWIN_HEIGHT 480 - #include "../common/dwin_api.h" #include "../common/dwin_set.h" #include "../common/dwin_font.h" diff --git a/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.h b/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.h index 65d9394a85..3e80a0103e 100644 --- a/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.h +++ b/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.h @@ -28,11 +28,6 @@ #include "../../../inc/MarlinConfigPre.h" -#if ENABLED(DWIN_MARLINUI_LANDSCAPE) - #define DWIN_WIDTH 480 - #define DWIN_HEIGHT 272 -#endif - #include "../common/dwin_api.h" // Picture ID From 9a19ea50d8451fc0970843cc896bd2553e0f987e Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Fri, 22 Oct 2021 08:52:31 -0700 Subject: [PATCH 038/532] =?UTF-8?q?=E2=9C=A8=20BigTreeTech=20TFT35=20SPI?= =?UTF-8?q?=20V1.0=20(#22986)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration.h | 21 +++++++----- Marlin/src/core/macros.h | 32 ++++++++++++++++++- Marlin/src/inc/Conditionals_LCD.h | 12 +++---- Marlin/src/inc/SanityCheck.h | 8 +++-- .../dogm/u8g_dev_tft_upscale_from_128x64.cpp | 14 ++++---- .../ftdi_eve_touch_ui/ftdi_eve_lib/compat.h | 28 ++++++++++++++++ .../src/lcd/extui/mks_ui/SPIFlashStorage.cpp | 4 +++ Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h | 3 +- .../pins/stm32f4/pins_BTT_SKR_V2_0_common.h | 21 ++++++++++++ 9 files changed, 118 insertions(+), 25 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index ab1565d343..e6b81bfed8 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -2642,32 +2642,32 @@ */ // -// 480x320, 3.5", SPI Display From MKS -// Normally used in MKS Robin Nano V2 +// 480x320, 3.5", SPI Display with Rotary Encoder from MKS +// Usually paired with MKS Robin Nano V2 & V3 // //#define MKS_TS35_V2_0 // // 320x240, 2.4", FSMC Display From MKS -// Normally used in MKS Robin Nano V1.2 +// Usually paired with MKS Robin Nano V1.2 // //#define MKS_ROBIN_TFT24 // // 320x240, 2.8", FSMC Display From MKS -// Normally used in MKS Robin Nano V1.2 +// Usually paired with MKS Robin Nano V1.2 // //#define MKS_ROBIN_TFT28 // // 320x240, 3.2", FSMC Display From MKS -// Normally used in MKS Robin Nano V1.2 +// Usually paired with MKS Robin Nano V1.2 // //#define MKS_ROBIN_TFT32 // // 480x320, 3.5", FSMC Display From MKS -// Normally used in MKS Robin Nano V1.2 +// Usually paired with MKS Robin Nano V1.2 // //#define MKS_ROBIN_TFT35 @@ -2678,7 +2678,7 @@ // // 320x240, 3.2", FSMC Display From MKS -// Normally used in MKS Robin +// Usually paired with MKS Robin // //#define MKS_ROBIN_TFT_V1_1R @@ -2708,10 +2708,15 @@ //#define ANET_ET5_TFT35 // -// 1024x600, 7", RGB Stock Display from BIQU-BX +// 1024x600, 7", RGB Stock Display with Rotary Encoder from BIQU-BX // //#define BIQU_BX_TFT70 +// +// 480x320, 3.5", SPI Stock Display with Rotary Encoder from BIQU B1 SE Series +// +//#define BTT_TFT35_SPI_V1_0 + // // Generic TFT with detailed options // diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h index 22c3767e1d..d8a15b910d 100644 --- a/Marlin/src/core/macros.h +++ b/Marlin/src/core/macros.h @@ -160,7 +160,7 @@ #endif -// Macros to chain up to 14 conditions +// Macros to chain up to 40 conditions #define _DO_1(W,C,A) (_##W##_1(A)) #define _DO_2(W,C,A,B) (_##W##_1(A) C _##W##_1(B)) #define _DO_3(W,C,A,V...) (_##W##_1(A) C _DO_2(W,C,V)) @@ -176,6 +176,31 @@ #define _DO_13(W,C,A,V...) (_##W##_1(A) C _DO_12(W,C,V)) #define _DO_14(W,C,A,V...) (_##W##_1(A) C _DO_13(W,C,V)) #define _DO_15(W,C,A,V...) (_##W##_1(A) C _DO_14(W,C,V)) +#define _DO_16(W,C,A,V...) (_##W##_1(A) C _DO_15(W,C,V)) +#define _DO_17(W,C,A,V...) (_##W##_1(A) C _DO_16(W,C,V)) +#define _DO_18(W,C,A,V...) (_##W##_1(A) C _DO_17(W,C,V)) +#define _DO_19(W,C,A,V...) (_##W##_1(A) C _DO_18(W,C,V)) +#define _DO_20(W,C,A,V...) (_##W##_1(A) C _DO_19(W,C,V)) +#define _DO_21(W,C,A,V...) (_##W##_1(A) C _DO_20(W,C,V)) +#define _DO_22(W,C,A,V...) (_##W##_1(A) C _DO_21(W,C,V)) +#define _DO_23(W,C,A,V...) (_##W##_1(A) C _DO_22(W,C,V)) +#define _DO_24(W,C,A,V...) (_##W##_1(A) C _DO_23(W,C,V)) +#define _DO_25(W,C,A,V...) (_##W##_1(A) C _DO_24(W,C,V)) +#define _DO_26(W,C,A,V...) (_##W##_1(A) C _DO_25(W,C,V)) +#define _DO_27(W,C,A,V...) (_##W##_1(A) C _DO_26(W,C,V)) +#define _DO_28(W,C,A,V...) (_##W##_1(A) C _DO_27(W,C,V)) +#define _DO_29(W,C,A,V...) (_##W##_1(A) C _DO_28(W,C,V)) +#define _DO_30(W,C,A,V...) (_##W##_1(A) C _DO_29(W,C,V)) +#define _DO_31(W,C,A,V...) (_##W##_1(A) C _DO_30(W,C,V)) +#define _DO_32(W,C,A,V...) (_##W##_1(A) C _DO_31(W,C,V)) +#define _DO_33(W,C,A,V...) (_##W##_1(A) C _DO_32(W,C,V)) +#define _DO_34(W,C,A,V...) (_##W##_1(A) C _DO_33(W,C,V)) +#define _DO_35(W,C,A,V...) (_##W##_1(A) C _DO_34(W,C,V)) +#define _DO_36(W,C,A,V...) (_##W##_1(A) C _DO_35(W,C,V)) +#define _DO_37(W,C,A,V...) (_##W##_1(A) C _DO_36(W,C,V)) +#define _DO_38(W,C,A,V...) (_##W##_1(A) C _DO_37(W,C,V)) +#define _DO_39(W,C,A,V...) (_##W##_1(A) C _DO_38(W,C,V)) +#define _DO_40(W,C,A,V...) (_##W##_1(A) C _DO_39(W,C,V)) #define __DO_N(W,C,N,V...) _DO_##N(W,C,V) #define _DO_N(W,C,N,V...) __DO_N(W,C,N,V) #define DO(W,C,V...) (_DO_N(W,C,NUM_ARGS(V),V)) @@ -251,6 +276,11 @@ memcpy(&a[0],&b[0],_MIN(sizeof(a),sizeof(b))); \ }while(0) +#define CODE_16( A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,...) A; B; C; D; E; F; G; H; I; J; K; L; M; N; O; P +#define CODE_15( A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,...) A; B; C; D; E; F; G; H; I; J; K; L; M; N; O +#define CODE_14( A,B,C,D,E,F,G,H,I,J,K,L,M,N,...) A; B; C; D; E; F; G; H; I; J; K; L; M; N +#define CODE_13( A,B,C,D,E,F,G,H,I,J,K,L,M,...) A; B; C; D; E; F; G; H; I; J; K; L; M +#define CODE_12( A,B,C,D,E,F,G,H,I,J,K,L,...) A; B; C; D; E; F; G; H; I; J; K; L #define CODE_11( A,B,C,D,E,F,G,H,I,J,K,...) A; B; C; D; E; F; G; H; I; J; K #define CODE_10( A,B,C,D,E,F,G,H,I,J,...) A; B; C; D; E; F; G; H; I; J #define CODE_9( A,B,C,D,E,F,G,H,I,...) A; B; C; D; E; F; G; H; I diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index e80dd3ed69..c9ef448162 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -1244,20 +1244,20 @@ * - TFT_COLOR * - GRAPHICAL_TFT_UPSCALE */ -#if ENABLED(MKS_TS35_V2_0) // ST7796 +#if EITHER(MKS_TS35_V2_0, BTT_TFT35_SPI_V1_0) // ST7796 #define TFT_DEFAULT_DRIVER ST7796 #define TFT_DEFAULT_ORIENTATION TFT_EXCHANGE_XY #define TFT_RES_480x320 #define TFT_INTERFACE_SPI -#elif EITHER(LERDGE_TFT35, ANET_ET5_TFT35) // ST7796 +#elif EITHER(LERDGE_TFT35, ANET_ET5_TFT35) // ST7796 #define TFT_DEFAULT_ORIENTATION TFT_EXCHANGE_XY #define TFT_RES_480x320 #define TFT_INTERFACE_FSMC -#elif ANY(ANET_ET4_TFT28, MKS_ROBIN_TFT24, MKS_ROBIN_TFT28, MKS_ROBIN_TFT32) // ST7789 +#elif ANY(ANET_ET4_TFT28, MKS_ROBIN_TFT24, MKS_ROBIN_TFT28, MKS_ROBIN_TFT32) // ST7789 #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY | TFT_INVERT_Y) #define TFT_RES_320x240 #define TFT_INTERFACE_FSMC -#elif ANY(MKS_ROBIN_TFT35, TFT_TRONXY_X5SA, ANYCUBIC_TFT35) // ILI9488 +#elif ANY(MKS_ROBIN_TFT35, TFT_TRONXY_X5SA, ANYCUBIC_TFT35) // ILI9488 #define TFT_DRIVER ILI9488 #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY | TFT_INVERT_X | TFT_INVERT_Y) #define TFT_RES_480x320 @@ -1267,11 +1267,11 @@ #define TFT_DEFAULT_ORIENTATION 0 #define TFT_RES_480x272 #define TFT_INTERFACE_FSMC -#elif ANY(MKS_ROBIN_TFT_V1_1R, LONGER_LK_TFT28) // ILI9328 or R61505 +#elif ANY(MKS_ROBIN_TFT_V1_1R, LONGER_LK_TFT28) // ILI9328 or R61505 #define TFT_DEFAULT_ORIENTATION (TFT_EXCHANGE_XY | TFT_INVERT_X | TFT_INVERT_Y) #define TFT_RES_320x240 #define TFT_INTERFACE_FSMC -#elif ENABLED(BIQU_BX_TFT70) // RGB +#elif ENABLED(BIQU_BX_TFT70) // RGB #define TFT_DEFAULT_ORIENTATION TFT_EXCHANGE_XY #define TFT_RES_1024x600 #define TFT_INTERFACE_LTDC diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 4259bf5271..e406093a98 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2619,7 +2619,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS + COUNT_ENABLED(FYSETC_MINI_12864_X_X, FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0, FYSETC_MINI_12864_2_1, FYSETC_GENERIC_12864_1_1) \ + COUNT_ENABLED(LCD_SAINSMART_I2C_1602, LCD_SAINSMART_I2C_2004) \ + COUNT_ENABLED(MKS_12864OLED, MKS_12864OLED_SSD1306) \ - + COUNT_ENABLED(MKS_TS35_V2_0, MKS_ROBIN_TFT24, MKS_ROBIN_TFT28, MKS_ROBIN_TFT32, MKS_ROBIN_TFT35, MKS_ROBIN_TFT43, MKS_ROBIN_TFT_V1_1R, ANET_ET4_TFT28, ANET_ET5_TFT35) \ + + COUNT_ENABLED(MKS_TS35_V2_0, MKS_ROBIN_TFT24, MKS_ROBIN_TFT28, MKS_ROBIN_TFT32, MKS_ROBIN_TFT35, MKS_ROBIN_TFT43, MKS_ROBIN_TFT_V1_1R, ANET_ET4_TFT28, ANET_ET5_TFT35, BIQU_BX_TFT70, BTT_TFT35_SPI_V1_0) \ + COUNT_ENABLED(TFTGLCD_PANEL_SPI, TFTGLCD_PANEL_I2C) \ + COUNT_ENABLED(VIKI2, miniVIKI) \ + ENABLED(WYH_L12864) \ @@ -2670,7 +2670,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #undef IS_U8GLIB_SSD1306 #undef IS_EXTUI -#if ANY(TFT_GENERIC, MKS_TS35_V2_0, MKS_ROBIN_TFT24, MKS_ROBIN_TFT28, MKS_ROBIN_TFT32, MKS_ROBIN_TFT35, MKS_ROBIN_TFT43, MKS_ROBIN_TFT_V1_1R, TFT_TRONXY_X5SA, ANYCUBIC_TFT35, ANYCUBIC_TFT35, LONGER_LK_TFT28, ANET_ET4_TFT28, ANET_ET5_TFT35, BIQU_BX_TFT70) +#if ANY(TFT_GENERIC, MKS_TS35_V2_0, MKS_ROBIN_TFT24, MKS_ROBIN_TFT28, MKS_ROBIN_TFT32, MKS_ROBIN_TFT35, MKS_ROBIN_TFT43, MKS_ROBIN_TFT_V1_1R, TFT_TRONXY_X5SA, ANYCUBIC_TFT35, ANYCUBIC_TFT35, LONGER_LK_TFT28, ANET_ET4_TFT28, ANET_ET5_TFT35, BIQU_BX_TFT70, BTT_TFT35_SPI_V1_0) #if NONE(TFT_COLOR_UI, TFT_CLASSIC_UI, TFT_LVGL_UI) #error "TFT_COLOR_UI, TFT_CLASSIC_UI, TFT_LVGL_UI is required for your TFT. Please enable one." #elif MANY(TFT_COLOR_UI, TFT_CLASSIC_UI, TFT_LVGL_UI) @@ -2712,6 +2712,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "Please select only one of CHIRON_TFT_STANDARD or CHIRON_TFT_NEW." #endif +#if EITHER(MKS_TS35_V2_0, BTT_TFT35_SPI_V1_0) && SD_CONNECTION_IS(LCD) + #error "SDCARD_CONNECTION cannot be set to LCD for the enabled TFT. No available SD card reader." +#endif + /** * Ender 3 V2 controller has some limitations */ diff --git a/Marlin/src/lcd/dogm/u8g_dev_tft_upscale_from_128x64.cpp b/Marlin/src/lcd/dogm/u8g_dev_tft_upscale_from_128x64.cpp index df7b4000a9..4a794f5000 100644 --- a/Marlin/src/lcd/dogm/u8g_dev_tft_upscale_from_128x64.cpp +++ b/Marlin/src/lcd/dogm/u8g_dev_tft_upscale_from_128x64.cpp @@ -78,13 +78,13 @@ TFT_IO tftio; #include "../marlinui.h" #endif -#if HAS_TOUCH_BUTTONS - #include "../touch/touch_buttons.h" - #if HAS_TOUCH_SLEEP - #define HAS_TOUCH_BUTTONS_SLEEP 1 - #endif +#if HAS_TOUCH_BUTTONS && HAS_TOUCH_SLEEP + #define HAS_TOUCH_BUTTONS_SLEEP 1 #endif +#include "../touch/touch_buttons.h" +#include "../scaled_tft.h" + #define X_HI (UPSCALE(TFT_PIXEL_OFFSET_X, WIDTH) - 1) #define Y_HI (UPSCALE(TFT_PIXEL_OFFSET_Y, HEIGHT) - 1) @@ -325,6 +325,7 @@ static bool preinit = true; static uint8_t page; #if HAS_TOUCH_BUTTONS + static bool redrawTouchButtons = true; static void drawTouchButtons(u8g_t *u8g, u8g_dev_t *dev) { if (!redrawTouchButtons) return; @@ -343,6 +344,7 @@ static uint8_t page; setWindow(u8g, dev, BUTTONC_X_LO, BUTTON_Y_LO, BUTTONC_X_HI, BUTTON_Y_HI); drawImage(buttonC, u8g, dev, BUTTON_DRAW_WIDTH, BUTTON_DRAW_HEIGHT, TFT_BTOKMENU_COLOR); } + #endif // HAS_TOUCH_BUTTONS static void u8g_upscale_clear_lcd(u8g_t *u8g, u8g_dev_t *dev, uint16_t *buffer) { @@ -395,7 +397,7 @@ uint8_t u8g_dev_tft_320x240_upscale_from_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, u if (!sleepCleared) { sleepCleared = true; u8g_upscale_clear_lcd(u8g, dev, buffer); - IF_ENABLED(HAS_TOUCH_BUTTONS, redrawTouchButtons = true); + TERN_(HAS_TOUCH_BUTTONS, redrawTouchButtons = true); } break; } diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/compat.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/compat.h index 4e11c73226..b8e687147b 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/compat.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/compat.h @@ -255,6 +255,34 @@ #define _DO_10(W,C,A,V...) (_##W##_1(A) C _DO_9(W,C,V)) #define _DO_11(W,C,A,V...) (_##W##_1(A) C _DO_10(W,C,V)) #define _DO_12(W,C,A,V...) (_##W##_1(A) C _DO_11(W,C,V)) + #define _DO_13(W,C,A,V...) (_##W##_1(A) C _DO_12(W,C,V)) + #define _DO_14(W,C,A,V...) (_##W##_1(A) C _DO_13(W,C,V)) + #define _DO_15(W,C,A,V...) (_##W##_1(A) C _DO_14(W,C,V)) + #define _DO_16(W,C,A,V...) (_##W##_1(A) C _DO_15(W,C,V)) + #define _DO_17(W,C,A,V...) (_##W##_1(A) C _DO_16(W,C,V)) + #define _DO_18(W,C,A,V...) (_##W##_1(A) C _DO_17(W,C,V)) + #define _DO_19(W,C,A,V...) (_##W##_1(A) C _DO_18(W,C,V)) + #define _DO_20(W,C,A,V...) (_##W##_1(A) C _DO_19(W,C,V)) + #define _DO_21(W,C,A,V...) (_##W##_1(A) C _DO_20(W,C,V)) + #define _DO_22(W,C,A,V...) (_##W##_1(A) C _DO_21(W,C,V)) + #define _DO_23(W,C,A,V...) (_##W##_1(A) C _DO_22(W,C,V)) + #define _DO_24(W,C,A,V...) (_##W##_1(A) C _DO_23(W,C,V)) + #define _DO_25(W,C,A,V...) (_##W##_1(A) C _DO_24(W,C,V)) + #define _DO_26(W,C,A,V...) (_##W##_1(A) C _DO_25(W,C,V)) + #define _DO_27(W,C,A,V...) (_##W##_1(A) C _DO_26(W,C,V)) + #define _DO_28(W,C,A,V...) (_##W##_1(A) C _DO_27(W,C,V)) + #define _DO_29(W,C,A,V...) (_##W##_1(A) C _DO_28(W,C,V)) + #define _DO_30(W,C,A,V...) (_##W##_1(A) C _DO_29(W,C,V)) + #define _DO_31(W,C,A,V...) (_##W##_1(A) C _DO_30(W,C,V)) + #define _DO_32(W,C,A,V...) (_##W##_1(A) C _DO_31(W,C,V)) + #define _DO_33(W,C,A,V...) (_##W##_1(A) C _DO_32(W,C,V)) + #define _DO_34(W,C,A,V...) (_##W##_1(A) C _DO_33(W,C,V)) + #define _DO_35(W,C,A,V...) (_##W##_1(A) C _DO_34(W,C,V)) + #define _DO_36(W,C,A,V...) (_##W##_1(A) C _DO_35(W,C,V)) + #define _DO_37(W,C,A,V...) (_##W##_1(A) C _DO_36(W,C,V)) + #define _DO_38(W,C,A,V...) (_##W##_1(A) C _DO_37(W,C,V)) + #define _DO_39(W,C,A,V...) (_##W##_1(A) C _DO_38(W,C,V)) + #define _DO_40(W,C,A,V...) (_##W##_1(A) C _DO_39(W,C,V)) #define __DO_N(W,C,N,V...) _DO_##N(W,C,V) #define _DO_N(W,C,N,V...) __DO_N(W,C,N,V) #define DO(W,C,V...) _DO_N(W,C,NUM_ARGS(V),V) diff --git a/Marlin/src/lcd/extui/mks_ui/SPIFlashStorage.cpp b/Marlin/src/lcd/extui/mks_ui/SPIFlashStorage.cpp index 2fb28415a1..6f2351bba6 100644 --- a/Marlin/src/lcd/extui/mks_ui/SPIFlashStorage.cpp +++ b/Marlin/src/lcd/extui/mks_ui/SPIFlashStorage.cpp @@ -27,6 +27,10 @@ #include "../../../inc/MarlinConfig.h" #include "SPIFlashStorage.h" +#if !HAS_SPI_FLASH + #error "HAS_SPI_FLASH is required with TFT_LVGL_UI." +#endif + extern W25QXXFlash W25QXX; uint8_t SPIFlashStorage::m_pageData[SPI_FLASH_PageSize]; diff --git a/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h b/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h index 6717455692..3b7a4e4402 100644 --- a/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h +++ b/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h @@ -69,14 +69,13 @@ // SPI Flash #define HAS_SPI_FLASH 1 -#define SPI_FLASH_SIZE 0x1000000 // 16MB - #if HAS_SPI_FLASH // SPI 2 #define SPI_FLASH_CS_PIN PB12 // SPI2_NSS / Flash chip-select #define SPI_FLASH_MOSI_PIN PB15 #define SPI_FLASH_MISO_PIN PB14 #define SPI_FLASH_SCK_PIN PB13 + #define SPI_FLASH_SIZE 0x1000000 // 16MB #endif // diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h index 95cfb1234d..d3b59e03b8 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h @@ -495,6 +495,27 @@ #endif #endif +#if HAS_SPI_TFT + // + // e.g., BTT_TFT35_SPI_V1_0 (480x320, 3.5", SPI Stock Display with Rotary Encoder in BIQU B1 SE) + // + #define TFT_CS_PIN EXP2_07_PIN + #define TFT_A0_PIN EXP2_04_PIN + #define TFT_SCK_PIN EXP2_09_PIN + #define TFT_MISO_PIN EXP2_10_PIN + #define TFT_MOSI_PIN EXP2_05_PIN + + #define TOUCH_INT_PIN EXP1_04_PIN + #define TOUCH_MISO_PIN EXP1_05_PIN + #define TOUCH_MOSI_PIN EXP1_08_PIN + #define TOUCH_SCK_PIN EXP1_06_PIN + #define TOUCH_CS_PIN EXP1_07_PIN + + #define BTN_EN1 EXP2_08_PIN + #define BTN_EN2 EXP2_06_PIN + #define BTN_ENC EXP1_09_PIN +#endif + // // NeoPixel LED // From de3c563a990e72533fb9ea9f376c53595c3e986b Mon Sep 17 00:00:00 2001 From: tome9111991 <57866234+tome9111991@users.noreply.github.com> Date: Fri, 22 Oct 2021 18:16:07 +0200 Subject: [PATCH 039/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20SHOW=5FREMAINING?= =?UTF-8?q?=5FTIME=20option=20for=20JyersUI=20(#22999)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 2 +- Marlin/src/inc/Conditionals_LCD.h | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 9d119eac84..e934ed92c3 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1306,7 +1306,7 @@ // LCD Print Progress options #if EITHER(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY) - #if ANY(HAS_MARLINUI_U8GLIB, EXTENSIBLE_UI, HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL, IS_DWIN_MARLINUI) + #if CAN_SHOW_REMAINING_TIME //#define SHOW_REMAINING_TIME // Display estimated time to completion #if ENABLED(SHOW_REMAINING_TIME) //#define USE_M73_REMAINING_TIME // Use remaining time from M73 command instead of estimation diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index c9ef448162..7b0c992868 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -542,6 +542,10 @@ #define HAS_LCD_MENU 1 #endif +#if ANY(HAS_MARLINUI_U8GLIB, EXTENSIBLE_UI, HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL, IS_DWIN_MARLINUI, DWIN_CREALITY_LCD_JYERSUI) + #define CAN_SHOW_REMAINING_TIME 1 +#endif + #if HAS_MARLINUI_U8GLIB #ifndef LCD_PIXEL_WIDTH #define LCD_PIXEL_WIDTH 128 From 9c055621a0944e7f65051c0c72d117d13b7fe05b Mon Sep 17 00:00:00 2001 From: tombrazier <68918209+tombrazier@users.noreply.github.com> Date: Fri, 22 Oct 2021 21:56:05 +0100 Subject: [PATCH 040/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20probe=20temp=20com?= =?UTF-8?q?pensation=20maths=20(#23004)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/probe_temp_comp.cpp | 65 +++++++++++--------- Marlin/src/feature/probe_temp_comp.h | 8 +-- Marlin/src/gcode/calibrate/G76_M192_M871.cpp | 2 +- 3 files changed, 41 insertions(+), 34 deletions(-) diff --git a/Marlin/src/feature/probe_temp_comp.cpp b/Marlin/src/feature/probe_temp_comp.cpp index 05b204ae6b..5f3bc985e6 100644 --- a/Marlin/src/feature/probe_temp_comp.cpp +++ b/Marlin/src/feature/probe_temp_comp.cpp @@ -24,6 +24,8 @@ #if ENABLED(PROBE_TEMP_COMPENSATION) +//#define DEBUG_PTC // Print extra debug output with 'M871' + #include "probe_temp_comp.h" #include @@ -79,9 +81,17 @@ void ProbeTempComp::print_offsets() { " temp: ", temp, "C; Offset: ", i < 0 ? 0.0f : sensor_z_offsets[s][i], " um" ); - temp += cali_info[s].temp_res; + temp += cali_info[s].temp_resolution; } } + #if ENABLED(DEBUG_PTC) + float meas[4] = { 0, 0, 0, 0 }; + compensate_measurement(TSI_PROBE, 27.5, meas[0]); + compensate_measurement(TSI_PROBE, 32.5, meas[1]); + compensate_measurement(TSI_PROBE, 77.5, meas[2]); + compensate_measurement(TSI_PROBE, 82.5, meas[3]); + SERIAL_ECHOLNPGM("DEBUG_PTC 27.5:", meas[0], " 32.5:", meas[1], " 77.5:", meas[2], " 82.5:", meas[3]); + #endif } void ProbeTempComp::prepare_new_calibration(const_float_t init_meas_z) { @@ -111,7 +121,7 @@ bool ProbeTempComp::finish_calibration(const TempSensorID tsi) { const uint8_t measurements = cali_info[tsi].measurements; const celsius_t start_temp = cali_info[tsi].start_temp, - res_temp = cali_info[tsi].temp_res; + res_temp = cali_info[tsi].temp_resolution; int16_t * const data = sensor_z_offsets[tsi]; // Extrapolate @@ -156,46 +166,45 @@ bool ProbeTempComp::finish_calibration(const TempSensorID tsi) { } void ProbeTempComp::compensate_measurement(const TempSensorID tsi, const celsius_t temp, float &meas_z) { - if (WITHIN(temp, cali_info[tsi].start_temp, cali_info[tsi].end_temp)) - meas_z -= get_offset_for_temperature(tsi, temp); -} - -float ProbeTempComp::get_offset_for_temperature(const TempSensorID tsi, const celsius_t temp) { const uint8_t measurements = cali_info[tsi].measurements; const celsius_t start_temp = cali_info[tsi].start_temp, - res_temp = cali_info[tsi].temp_res; + end_temp = cali_info[tsi].end_temp, + res_temp = cali_info[tsi].temp_resolution; const int16_t * const data = sensor_z_offsets[tsi]; - auto point = [&](uint8_t i) -> xy_float_t { - return xy_float_t({ static_cast(start_temp) + i * res_temp, static_cast(data[i]) }); + // Given a data index, return { celsius, zoffset } in the form { x, y } + auto tpoint = [&](uint8_t i) -> xy_float_t { + return xy_float_t({ static_cast(start_temp) + i * res_temp, i ? static_cast(data[i - 1]) : 0.0f }); }; + // Interpolate Z based on a temperature being within a given range auto linear_interp = [](const_float_t x, xy_float_t p1, xy_float_t p2) { - return (p2.y - p1.y) / (p2.x - p2.y) * (x - p1.x) + p1.y; + // zoffs1 + zoffset_per_toffset * toffset + return p1.y + (p2.y - p1.y) / (p2.x - p1.x) * (x - p1.x); }; - // Linear interpolation - uint8_t idx = static_cast((temp - start_temp) / res_temp); - // offset in µm float offset = 0.0f; - #if !defined(PTC_LINEAR_EXTRAPOLATION) || PTC_LINEAR_EXTRAPOLATION <= 0 - if (idx < 0) - offset = 0.0f; - else if (idx > measurements - 2) - offset = static_cast(data[measurements - 1]); + #if PTC_LINEAR_EXTRAPOLATION + if (temp < start_temp) + offset = linear_interp(temp, tpoint(0), tpoint(PTC_LINEAR_EXTRAPOLATION)); + else if (temp >= end_temp) + offset = linear_interp(temp, tpoint(measurements - PTC_LINEAR_EXTRAPOLATION), tpoint(measurements)); #else - if (idx < 0) - offset = linear_interp(temp, point(0), point(PTC_LINEAR_EXTRAPOLATION)); - else if (idx > measurements - 2) - offset = linear_interp(temp, point(measurements - PTC_LINEAR_EXTRAPOLATION - 1), point(measurements - 1)); + if (temp < start_temp) + offset = 0.0f; + else if (temp >= end_temp) + offset = static_cast(data[measurements - 1]); #endif - else - offset = linear_interp(temp, point(idx), point(idx + 1)); + else { + // Linear interpolation + const int8_t idx = static_cast((temp - start_temp) / res_temp); + offset = linear_interp(temp, tpoint(idx), tpoint(idx + 1)); + } - // return offset in mm - return offset / 1000.0f; + // convert offset to mm and apply it + meas_z -= offset / 1000.0f; } bool ProbeTempComp::linear_regression(const TempSensorID tsi, float &k, float &d) { @@ -204,7 +213,7 @@ bool ProbeTempComp::linear_regression(const TempSensorID tsi, float &k, float &d if (!WITHIN(calib_idx, 2, cali_info[tsi].measurements)) return false; const celsius_t start_temp = cali_info[tsi].start_temp, - res_temp = cali_info[tsi].temp_res; + res_temp = cali_info[tsi].temp_resolution; const int16_t * const data = sensor_z_offsets[tsi]; float sum_x = start_temp, diff --git a/Marlin/src/feature/probe_temp_comp.h b/Marlin/src/feature/probe_temp_comp.h index f5f922410c..f24b9acd9b 100644 --- a/Marlin/src/feature/probe_temp_comp.h +++ b/Marlin/src/feature/probe_temp_comp.h @@ -33,9 +33,9 @@ enum TempSensorID : uint8_t { }; typedef struct { - uint8_t measurements; // Max. number of measurements to be stored (35 - 80°C) - celsius_t temp_res, // Resolution in °C between measurements - start_temp, // Base measurement; z-offset == 0 + uint8_t measurements; // Max. number of measurements to be stored (35 - 80°C) + celsius_t temp_resolution, // Resolution in °C between measurements + start_temp, // Base measurement; z-offset == 0 end_temp; } temp_calib_t; @@ -135,8 +135,6 @@ class ProbeTempComp { */ static float init_measurement; - static float get_offset_for_temperature(const TempSensorID tsi, const celsius_t temp); - /** * Fit a linear function in measured temperature offsets * to allow generating values of higher temperatures. diff --git a/Marlin/src/gcode/calibrate/G76_M192_M871.cpp b/Marlin/src/gcode/calibrate/G76_M192_M871.cpp index 2408f44ac4..0fc41ed929 100644 --- a/Marlin/src/gcode/calibrate/G76_M192_M871.cpp +++ b/Marlin/src/gcode/calibrate/G76_M192_M871.cpp @@ -121,7 +121,7 @@ void GcodeSuite::G76() { temp_comp.prepare_new_calibration(measured_z); else temp_comp.push_back_new_measurement(sid, measured_z); - targ += cali_info_init[sid].temp_res; + targ += cali_info_init[sid].temp_resolution; } return measured_z; }; From 3ec0213dbc34152e18eb5b4225e02a12d6cdc8e5 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 23 Oct 2021 01:04:09 +0000 Subject: [PATCH 041/532] [cron] Bump distribution date (2021-10-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 8fbfd2b6d5..fa6761ea6f 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 "2021-10-22" +//#define STRING_DISTRIBUTION_DATE "2021-10-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 582347a78b..9974c63a42 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 "2021-10-22" + #define STRING_DISTRIBUTION_DATE "2021-10-23" #endif /** From e5e872c2e2ff87a4bef0c0565aec97cc12355dc7 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 24 Oct 2021 01:02:51 +0000 Subject: [PATCH 042/532] [cron] Bump distribution date (2021-10-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 fa6761ea6f..410304f25c 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 "2021-10-23" +//#define STRING_DISTRIBUTION_DATE "2021-10-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 9974c63a42..d70399ee1a 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 "2021-10-23" + #define STRING_DISTRIBUTION_DATE "2021-10-24" #endif /** From 22d3a993e7d5d2499517ddda8de5b8450735ab56 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 25 Oct 2021 01:03:57 +0000 Subject: [PATCH 043/532] [cron] Bump distribution date (2021-10-25) --- 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 410304f25c..c158f2732e 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 "2021-10-24" +//#define STRING_DISTRIBUTION_DATE "2021-10-25" /** * 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 d70399ee1a..5dea5c709c 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 "2021-10-24" + #define STRING_DISTRIBUTION_DATE "2021-10-25" #endif /** From 6a6bf0fd1b04f79215ee6d64596fdb1dcd72ccaa Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 24 Oct 2021 23:33:27 -0500 Subject: [PATCH 044/532] =?UTF-8?q?=F0=9F=94=A7=20Fewer=20alerts=20about?= =?UTF-8?q?=20Z=5FSAFE=5FHOMING?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/SanityCheck.h | 4 ---- Marlin/src/inc/Warnings.cpp | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index e406093a98..d342b6c76a 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1660,10 +1660,6 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "Z_PROBE_LOW_POINT must be less than or equal to 0." #endif - #if HOMING_Z_WITH_PROBE && IS_CARTESIAN && DISABLED(Z_SAFE_HOMING) - #error "Z_SAFE_HOMING is recommended when homing with a probe. Enable it or comment out this line to continue." - #endif - #if ENABLED(PROBE_ACTIVATION_SWITCH) #ifndef PROBE_ACTIVATION_SWITCH_STATE #error "PROBE_ACTIVATION_SWITCH_STATE is required for PROBE_ACTIVATION_SWITCH." diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index a0affac56a..d258aefd82 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -484,3 +484,7 @@ #if ENABLED(EMIT_CREALITY_422_WARNING) || MB(CREALITY_V4) #warning "Creality 4.2.2 boards may have A4988 or TMC2208_STANDALONE drivers. Check your board and make sure to select the correct DRIVER_TYPE!" #endif + +#if HOMING_Z_WITH_PROBE && IS_CARTESIAN && DISABLED(Z_SAFE_HOMING) + #error "Z_SAFE_HOMING is recommended when homing with a probe. Enable Z_SAFE_HOMING or comment out this line to continue." +#endif From f8968ed13c217ffa8db13d15c1d136e8d3864c1e Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 24 Oct 2021 23:32:34 -0500 Subject: [PATCH 045/532] =?UTF-8?q?=F0=9F=90=9B=20More=20explicit=20alloca?= =?UTF-8?q?tion=20of=20solenoids?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In reference to #22887 --- Marlin/Configuration.h | 1 - Marlin/src/feature/solenoid.cpp | 40 +++----------------- Marlin/src/inc/Conditionals_post.h | 59 ++++++++++++++++++------------ Marlin/src/inc/SanityCheck.h | 2 +- 4 files changed, 41 insertions(+), 61 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index e6b81bfed8..d8ced232b4 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -260,7 +260,6 @@ #define PARKING_EXTRUDER_PARKING_X { -78, 184 } // X positions for parking the extruders #define PARKING_EXTRUDER_GRAB_DISTANCE 1 // (mm) Distance to move beyond the parking point to grab the extruder - //#define MANUAL_SOLENOID_CONTROL // Manual control of docking solenoids with M380 S / M381 #if ENABLED(PARKING_EXTRUDER) diff --git a/Marlin/src/feature/solenoid.cpp b/Marlin/src/feature/solenoid.cpp index 623f223caa..b6795d1a1e 100644 --- a/Marlin/src/feature/solenoid.cpp +++ b/Marlin/src/feature/solenoid.cpp @@ -34,28 +34,12 @@ #include "../module/tool_change.h" #endif -#define HAS_SOLENOID(N) (HAS_SOLENOID_##N && (ENABLED(MANUAL_SOLENOID_CONTROL) || N < EXTRUDERS)) - // Used primarily with MANUAL_SOLENOID_CONTROL static void set_solenoid(const uint8_t num, const bool active) { const uint8_t value = active ? PE_MAGNET_ON_STATE : !PE_MAGNET_ON_STATE; + #define _SOL_CASE(N) case N: TERN_(HAS_SOLENOID_##N, OUT_WRITE(SOL##N##_PIN, value)); break; switch (num) { - case 0: OUT_WRITE(SOL0_PIN, value); break; - #if HAS_SOLENOID(1) - case 1: OUT_WRITE(SOL1_PIN, value); break; - #endif - #if HAS_SOLENOID(2) - case 2: OUT_WRITE(SOL2_PIN, value); break; - #endif - #if HAS_SOLENOID(3) - case 3: OUT_WRITE(SOL3_PIN, value); break; - #endif - #if HAS_SOLENOID(4) - case 4: OUT_WRITE(SOL4_PIN, value); break; - #endif - #if HAS_SOLENOID(5) - case 5: OUT_WRITE(SOL5_PIN, value); break; - #endif + REPEAT(8, _SOL_CASE) default: SERIAL_ECHO_MSG(STR_INVALID_SOLENOID); break; } @@ -67,25 +51,11 @@ static void set_solenoid(const uint8_t num, const bool active) { void enable_solenoid(const uint8_t num) { set_solenoid(num, true); } void disable_solenoid(const uint8_t num) { set_solenoid(num, false); } -void enable_solenoid_on_active_extruder() { enable_solenoid(active_extruder); } +void enable_solenoid_on_active_extruder() { } void disable_all_solenoids() { - disable_solenoid(0); - #if HAS_SOLENOID(1) - disable_solenoid(1); - #endif - #if HAS_SOLENOID(2) - disable_solenoid(2); - #endif - #if HAS_SOLENOID(3) - disable_solenoid(3); - #endif - #if HAS_SOLENOID(4) - disable_solenoid(4); - #endif - #if HAS_SOLENOID(5) - disable_solenoid(5); - #endif + #define _SOL_DISABLE(N) TERN_(HAS_SOLENOID_##N, disable_solenoid(N)); + REPEAT(8, _SOL_DISABLE) } #endif // EXT_SOLENOID || MANUAL_SOLENOID_CONTROL diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 9dfc7b187a..41a2ab3938 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -1635,9 +1635,6 @@ #if PIN_EXISTS(E0_MS1) #define HAS_E0_MS_PINS 1 #endif - #if PIN_EXISTS(SOL0) - #define HAS_SOLENOID_0 1 - #endif #if E_STEPPERS > 1 #if PIN_EXISTS(E1_ENABLE) || AXIS_IS_L64XX(E1) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E1)) @@ -1652,9 +1649,6 @@ #if PIN_EXISTS(E1_MS1) #define HAS_E1_MS_PINS 1 #endif - #if PIN_EXISTS(SOL1) - #define HAS_SOLENOID_1 1 - #endif #endif #if E_STEPPERS > 2 @@ -1670,9 +1664,6 @@ #if PIN_EXISTS(E2_MS1) #define HAS_E2_MS_PINS 1 #endif - #if PIN_EXISTS(SOL2) - #define HAS_SOLENOID_2 1 - #endif #endif #if E_STEPPERS > 3 @@ -1688,9 +1679,6 @@ #if PIN_EXISTS(E3_MS1) #define HAS_E3_MS_PINS 1 #endif - #if PIN_EXISTS(SOL3) - #define HAS_SOLENOID_3 1 - #endif #endif #if E_STEPPERS > 4 @@ -1706,9 +1694,6 @@ #if PIN_EXISTS(E4_MS1) #define HAS_E4_MS_PINS 1 #endif - #if PIN_EXISTS(SOL4) - #define HAS_SOLENOID_4 1 - #endif #endif #if E_STEPPERS > 5 @@ -1724,9 +1709,6 @@ #if PIN_EXISTS(E5_MS1) #define HAS_E5_MS_PINS 1 #endif - #if PIN_EXISTS(SOL5) - #define HAS_SOLENOID_5 1 - #endif #endif #if E_STEPPERS > 6 @@ -1742,9 +1724,6 @@ #if PIN_EXISTS(E6_MS1) #define HAS_E6_MS_PINS 1 #endif - #if PIN_EXISTS(SOL6) - #define HAS_SOLENOID_6 1 - #endif #endif #if E_STEPPERS > 7 @@ -1760,9 +1739,6 @@ #if PIN_EXISTS(E7_MS1) #define HAS_E7_MS_PINS 1 #endif - #if PIN_EXISTS(SOL7) - #define HAS_SOLENOID_7 1 - #endif #endif #if !defined(DISABLE_INACTIVE_E) && ENABLED(DISABLE_E) @@ -1772,6 +1748,41 @@ #undef DISABLE_INACTIVE_E #endif // HAS_EXTRUDERS +/** + * Set solenoid flags if any features use solenoids + * - EXT_SOLENOID (M380, M381) to enable/disable the extruder solenoid + * - MANUAL_SOLENOID_CONTROL (M380, M381) to enable/disable solenoids by index + * - PARKING_EXTRUDER uses SOL0_PIN and SOL1_PIN + * - SOLENOID_PROBE uses SOL1_PIN + * - Z_PROBE_SLED uses SOL1_PIN, when defined (unless EXT_SOLENOID is enabled) + */ +#if ANY(EXT_SOLENOID, MANUAL_SOLENOID_CONTROL, PARKING_EXTRUDER, SOLENOID_PROBE, Z_PROBE_SLED) + #if PIN_EXISTS(SOL0) && (EITHER(MANUAL_SOLENOID_CONTROL, PARKING_EXTRUDER) || BOTH(EXT_SOLENOID, HAS_EXTRUDERS)) + #define HAS_SOLENOID_0 1 + #endif + #if PIN_EXISTS(SOL1) && (ANY(MANUAL_SOLENOID_CONTROL, PARKING_EXTRUDER, SOLENOID_PROBE, Z_PROBE_SLED) || TERN0(EXT_SOLENOID, E_STEPPERS > 1)) + #define HAS_SOLENOID_1 1 + #endif + #if PIN_EXISTS(SOL2) && (ENABLED(MANUAL_SOLENOID_CONTROL) || TERN0(EXT_SOLENOID, E_STEPPERS > 2)) + #define HAS_SOLENOID_2 2 + #endif + #if PIN_EXISTS(SOL3) && (ENABLED(MANUAL_SOLENOID_CONTROL) || TERN0(EXT_SOLENOID, E_STEPPERS > 3)) + #define HAS_SOLENOID_3 3 + #endif + #if PIN_EXISTS(SOL4) && (ENABLED(MANUAL_SOLENOID_CONTROL) || TERN0(EXT_SOLENOID, E_STEPPERS > 4)) + #define HAS_SOLENOID_4 4 + #endif + #if PIN_EXISTS(SOL5) && (ENABLED(MANUAL_SOLENOID_CONTROL) || TERN0(EXT_SOLENOID, E_STEPPERS > 5)) + #define HAS_SOLENOID_5 5 + #endif + #if PIN_EXISTS(SOL6) && (ENABLED(MANUAL_SOLENOID_CONTROL) || TERN0(EXT_SOLENOID, E_STEPPERS > 6)) + #define HAS_SOLENOID_6 6 + #endif + #if PIN_EXISTS(SOL7) && (ENABLED(MANUAL_SOLENOID_CONTROL) || TERN0(EXT_SOLENOID, E_STEPPERS > 7)) + #define HAS_SOLENOID_7 7 + #endif +#endif + // // Trinamic Stepper Drivers // diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index d342b6c76a..8ad184ecf1 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1241,7 +1241,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS /** * (Magnetic) Parking Extruder requirements */ -#if ANY(PARKING_EXTRUDER, MAGNETIC_PARKING_EXTRUDER) +#if EITHER(PARKING_EXTRUDER, MAGNETIC_PARKING_EXTRUDER) #if ENABLED(EXT_SOLENOID) #error "(MAGNETIC_)PARKING_EXTRUDER and EXT_SOLENOID are incompatible. (Pins are used twice.)" #elif EXTRUDERS != 2 From 444f27dfa0bba82b73b428b7adcc50d44b99775a Mon Sep 17 00:00:00 2001 From: tombrazier <68918209+tombrazier@users.noreply.github.com> Date: Mon, 25 Oct 2021 06:33:40 +0100 Subject: [PATCH 046/532] =?UTF-8?q?=F0=9F=90=9B=20Add=20USE=5FTEMP=5FEXT?= =?UTF-8?q?=5FCOMPENSATION=20options=20(#23007)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 8 +++++++- Marlin/src/feature/probe_temp_comp.h | 20 +++++++++++++++++--- Marlin/src/gcode/bedlevel/abl/G29.cpp | 2 +- Marlin/src/inc/SanityCheck.h | 16 ++++++++++++++++ 4 files changed, 41 insertions(+), 5 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index e934ed92c3..fbf2c41943 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -2006,7 +2006,7 @@ #define PTC_PROBE_POS { 90, 100 } // Enable additional compensation using hotend temperature - // Note: this values cannot be calibrated automatically but have to be set manually + // Note: this values cannot be calibrated automatically but have to be set manually via M871. //#define USE_TEMP_EXT_COMPENSATION // Probe temperature calibration generates a table of values starting at PTC_SAMPLE_START @@ -2022,6 +2022,12 @@ //#define BTC_SAMPLE_RES 5 // (°C) //#define BTC_SAMPLE_COUNT 10 + #if ENABLED(USE_TEMP_EXT_COMPENSATION) + //#define ETC_SAMPLE_START 180 // (°C) + //#define ETC_SAMPLE_RES 5 // (°C) + //#define ETC_SAMPLE_COUNT 20 + #endif + // The temperature the probe should be at while taking measurements during bed temperature // calibration. //#define BTC_PROBE_TEMP 30 // (°C) diff --git a/Marlin/src/feature/probe_temp_comp.h b/Marlin/src/feature/probe_temp_comp.h index f24b9acd9b..e5d459b8e8 100644 --- a/Marlin/src/feature/probe_temp_comp.h +++ b/Marlin/src/feature/probe_temp_comp.h @@ -72,6 +72,20 @@ typedef struct { #endif #define BTC_SAMPLE_END (BTC_SAMPLE_START + (BTC_SAMPLE_COUNT) * BTC_SAMPLE_RES) +// Extruder temperature calibration constants +#if ENABLED(USE_TEMP_EXT_COMPENSATION) + #ifndef ETC_SAMPLE_COUNT + #define ETC_SAMPLE_COUNT 20 + #endif + #ifndef ETC_SAMPLE_RES + #define ETC_SAMPLE_RES 5 + #endif + #ifndef ETC_SAMPLE_START + #define ETC_SAMPLE_START 180 + #endif + #define ETC_SAMPLE_END (ETC_SAMPLE_START + (ETC_SAMPLE_COUNT) * ETC_SAMPLE_RES) +#endif + #ifndef PTC_PROBE_HEATING_OFFSET #define PTC_PROBE_HEATING_OFFSET 0.5f #endif @@ -81,10 +95,10 @@ typedef struct { #endif static constexpr temp_calib_t cali_info_init[TSI_COUNT] = { - { PTC_SAMPLE_COUNT, PTC_SAMPLE_RES, PTC_SAMPLE_START, PTC_SAMPLE_END }, // Probe - { BTC_SAMPLE_COUNT, BTC_SAMPLE_RES, BTC_SAMPLE_START, BTC_SAMPLE_END }, // Bed + { PTC_SAMPLE_COUNT, PTC_SAMPLE_RES, PTC_SAMPLE_START, PTC_SAMPLE_END }, // Probe + { BTC_SAMPLE_COUNT, BTC_SAMPLE_RES, BTC_SAMPLE_START, BTC_SAMPLE_END }, // Bed #if ENABLED(USE_TEMP_EXT_COMPENSATION) - { 20, 5, 180, 180 + 5 * 20 } // Extruder + { ETC_SAMPLE_COUNT, ETC_SAMPLE_RES, ETC_SAMPLE_START, ETC_SAMPLE_END }, // Extruder #endif }; diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index f7afd93c81..5d94797f16 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -648,7 +648,7 @@ G29_TYPE GcodeSuite::G29() { #if ENABLED(PROBE_TEMP_COMPENSATION) temp_comp.compensate_measurement(TSI_BED, thermalManager.degBed(), abl.measured_z); temp_comp.compensate_measurement(TSI_PROBE, thermalManager.degProbe(), abl.measured_z); - TERN_(USE_TEMP_EXT_COMPENSATION, temp_comp.compensate_measurement(TSI_EXT, thermalManager.degHotend(), abl.measured_z)); + TERN_(USE_TEMP_EXT_COMPENSATION, temp_comp.compensate_measurement(TSI_EXT, thermalManager.degHotend(0), abl.measured_z)); #endif #if ENABLED(AUTO_BED_LEVELING_LINEAR) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 8ad184ecf1..60238e6c80 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -648,6 +648,22 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L constexpr decltype(_btc_probe_temp) _test_btc_probe_temp = 12.3f; static_assert(_test_btc_probe_temp != 12.3f, "BTC_PROBE_TEMP must be a whole number."); #endif + #if ENABLED(USE_TEMP_EXT_COMPENSATION) + #ifdef ETC_SAMPLE_START + constexpr auto _etc_sample_start = ETC_SAMPLE_START; + constexpr decltype(_etc_sample_start) _test_etc_sample_start = 12.3f; + static_assert(_test_etc_sample_start != 12.3f, "ETC_SAMPLE_START must be a whole number."); + #endif + #ifdef ETC_SAMPLE_RES + constexpr auto _etc_sample_res = ETC_SAMPLE_RES; + constexpr decltype(_etc_sample_res) _test_etc_sample_res = 12.3f; + static_assert(_test_etc_sample_res != 12.3f, "ETC_SAMPLE_RES must be a whole number."); + #endif + #endif + + #if ENABLED(USE_TEMP_EXT_COMPENSATION) && EXTRUDERS != 1 + #error "USE_TEMP_EXT_COMPENSATION only works with a single extruder." + #endif #endif /** From f6c7fbd1ab62b0c3aa70c971ad6c30d062d3252a Mon Sep 17 00:00:00 2001 From: Dennis Date: Mon, 25 Oct 2021 07:35:11 +0200 Subject: [PATCH 047/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20JyersUI=20current?= =?UTF-8?q?=20positions=20(scaling)=20(#23005)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/jyersui/dwin.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp index a4e05cace9..691c03af0d 100644 --- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp @@ -904,21 +904,21 @@ void CrealityDWINClass::Draw_Status_Area(bool icons/*=false*/) { if ((update_x = axis_should_home(X_AXIS) && ui.get_blink())) DWIN_Draw_String(true, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 35, 459, F(" -?- ")); else - DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 3, 1, 35, 459, current_position.x * 10); + DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 3, 1, 35, 459, current_position.x); } if (update_y) { y = current_position.y; if ((update_y = axis_should_home(Y_AXIS) && ui.get_blink())) DWIN_Draw_String(true, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 120, 459, F(" -?- ")); else - DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 3, 1, 120, 459, current_position.y * 10); + DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 3, 1, 120, 459, current_position.y); } if (update_z) { z = current_position.z; if ((update_z = axis_should_home(Z_AXIS) && ui.get_blink())) DWIN_Draw_String(true, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 205, 459, F(" -?- ")); else - DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 3, 2, 205, 459, (current_position.z>=0) ? current_position.z * 100 : 0); + DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 3, 2, 205, 459, (current_position.z>=0) ? current_position.z : 0); } DWIN_UpdateLCD(); } From d79ea20dcd139ae0073051fd15405fef5b40dbf4 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Mon, 25 Oct 2021 01:39:48 -0400 Subject: [PATCH 048/532] =?UTF-8?q?=E2=9C=A8=20Creality=20v2.4.S1=20(Ender?= =?UTF-8?q?=207)=20board=20=20(#23010)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/boards.h | 21 +++++------ Marlin/src/pins/pins.h | 2 ++ Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h | 36 +++++++++++++++++++ Marlin/src/pins/stm32f1/pins_CREALITY_V4.h | 9 +++-- 4 files changed, 55 insertions(+), 13 deletions(-) create mode 100644 Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index ab8383ddb5..82c68f3171 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -346,16 +346,17 @@ #define BOARD_CREALITY_V431_D 4046 // Creality v4.3.1d (STM32F103RE) #define BOARD_CREALITY_V452 4047 // Creality v4.5.2 (STM32F103RE) #define BOARD_CREALITY_V453 4048 // Creality v4.5.3 (STM32F103RE) -#define BOARD_TRIGORILLA_PRO 4049 // Trigorilla Pro (STM32F103ZET6) -#define BOARD_FLY_MINI 4050 // FLYmaker FLY MINI (STM32F103RCT6) -#define BOARD_FLSUN_HISPEED 4051 // FLSUN HiSpeedV1 (STM32F103VET6) -#define BOARD_BEAST 4052 // STM32F103RET6 Libmaple-based controller -#define BOARD_MINGDA_MPX_ARM_MINI 4053 // STM32F103ZET6 Mingda MD-16 -#define BOARD_GTM32_PRO_VD 4054 // STM32F103VET6 controller -#define BOARD_ZONESTAR_ZM3E2 4055 // Zonestar ZM3E2 (STM32F103RCT6) -#define BOARD_ZONESTAR_ZM3E4 4056 // Zonestar ZM3E4 V1 (STM32F103VCT6) -#define BOARD_ZONESTAR_ZM3E4V2 4057 // Zonestar ZM3E4 V2 (STM32F103VCT6) -#define BOARD_ERYONE_ERY32_MINI 4058 // Eryone Ery32 mini (STM32F103VET6) +#define BOARD_CREALITY_V24S1 4049 // Creality v2.4.S1 (STM32F103RE) v101 as found in the Ender 7 +#define BOARD_TRIGORILLA_PRO 4050 // Trigorilla Pro (STM32F103ZET6) +#define BOARD_FLY_MINI 4051 // FLYmaker FLY MINI (STM32F103RCT6) +#define BOARD_FLSUN_HISPEED 4052 // FLSUN HiSpeedV1 (STM32F103VET6) +#define BOARD_BEAST 4053 // STM32F103RET6 Libmaple-based controller +#define BOARD_MINGDA_MPX_ARM_MINI 4054 // STM32F103ZET6 Mingda MD-16 +#define BOARD_GTM32_PRO_VD 4055 // STM32F103VET6 controller +#define BOARD_ZONESTAR_ZM3E2 4056 // Zonestar ZM3E2 (STM32F103RCT6) +#define BOARD_ZONESTAR_ZM3E4 4057 // Zonestar ZM3E4 V1 (STM32F103VCT6) +#define BOARD_ZONESTAR_ZM3E4V2 4058 // Zonestar ZM3E4 V2 (STM32F103VCT6) +#define BOARD_ERYONE_ERY32_MINI 4059 // Eryone Ery32 mini (STM32F103VET6) // // ARM Cortex-M4F diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 64cebc42e7..4de4446cf5 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -563,6 +563,8 @@ #include "stm32f1/pins_CREALITY_V452.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple #elif MB(CREALITY_V453) #include "stm32f1/pins_CREALITY_V453.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple +#elif MB(CREALITY_V24S1) + #include "stm32f1/pins_CREALITY_V24S1.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple #elif MB(TRIGORILLA_PRO) #include "stm32f1/pins_TRIGORILLA_PRO.h" // STM32F1 env:trigorilla_pro env:trigorilla_pro_maple #elif MB(FLY_MINI) diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h new file mode 100644 index 0000000000..ffd7baa00c --- /dev/null +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h @@ -0,0 +1,36 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 + +/** + * Creality v2.4.S1 (STM32F103RE) v101 as found in the Ender 7 board pin assignments + */ + +#define BOARD_INFO_NAME "Creality v2.4.S1 V101" +#define DEFAULT_MACHINE_NAME "Creality3D" + +// +// Heaters +// +#define HEATER_BED_PIN PA15 // HOT BED + +#include "pins_CREALITY_V4.h" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h index c60d4dc2ba..ea58b5b3a9 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h @@ -134,9 +134,12 @@ // // Heaters / Fans // -#define HEATER_0_PIN PA1 // HEATER1 -#define HEATER_BED_PIN PA2 // HOT BED - +#ifndef HEATER_0_PIN + #define HEATER_0_PIN PA1 // HEATER1 +#endif +#ifndef HEATER_BED_PIN + #define HEATER_BED_PIN PA2 // HOT BED +#endif #ifndef FAN_PIN #define FAN_PIN PA0 // FAN #endif From 5ef0468251b24fae5d2053691ff986b95fcd1631 Mon Sep 17 00:00:00 2001 From: Lefteris Garyfalakis <46350667+lefterisgar@users.noreply.github.com> Date: Mon, 25 Oct 2021 09:06:13 +0300 Subject: [PATCH 049/532] =?UTF-8?q?=F0=9F=9A=B8=20E3V2=20Enhanced=20cosmet?= =?UTF-8?q?ic=20fixes=20(#23009)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 4 +++- Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index f9f2da5a4c..1bea3ceb15 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -1105,7 +1105,7 @@ void Draw_Info_Menu() { LOOP_L_N(i, 3) { DWINUI::Draw_Icon(ICON_PrintSize + i, 26, 99 + i * 73); - DWIN_Draw_Line(HMI_data.SplitLine_Color, 16, MBASE(2) + i * 73, 256, 156 + i * 73); + DWIN_Draw_HLine(HMI_data.SplitLine_Color, 16, MBASE(2) + i * 73, 240); } DWIN_UpdateLCD(); @@ -1651,6 +1651,7 @@ void HMI_SaveProcessID(const uint8_t id) { void DWIN_StartHoming() { HMI_flag.home_flag = true; HMI_SaveProcessID(Homing); + Title.ShowCaption(F("Axis Homing")); DWIN_Draw_Popup(ICON_BLTouch, F("Axis Homing"), F("Please wait until done.")); } @@ -1666,6 +1667,7 @@ void DWIN_CompletedHoming() { void DWIN_MeshLevelingStart() { #if HAS_ONESTEP_LEVELING HMI_SaveProcessID(Leveling); + Title.ShowCaption(F("Bed Leveling")); DWIN_Draw_Popup(ICON_AutoLeveling, GET_TEXT_F(MSG_BED_LEVELING), F("Please wait until done.")); #elif ENABLED(MESH_BED_LEVELING) Draw_ManualMesh_Menu(); diff --git a/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp b/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp index d874db79ca..8d6b5fa2c0 100644 --- a/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp @@ -51,7 +51,7 @@ void MeshViewerClass::Draw() { NOLESS(maxz, v); NOMORE(minz, v); } - Title.ShowCaption(F("Mesh viewer")); + Title.ShowCaption(F("Mesh Viewer")); DWINUI::ClearMenuArea(); DWINUI::Draw_Icon(ICON_Continue_E, 86, 305); DWIN_Draw_Rectangle(0, HMI_data.SplitLine_Color, px(0), py(0), px(GRID_MAX_POINTS_X - 1), py(GRID_MAX_POINTS_Y - 1)); From 70863058cd91b155a9d299680c34430c8d9a4192 Mon Sep 17 00:00:00 2001 From: Miguel Risco-Castillo Date: Mon, 25 Oct 2021 01:08:15 -0500 Subject: [PATCH 050/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Ender-3=20V2=20Enh?= =?UTF-8?q?anced=20SetFlow=20(#23016)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index 1bea3ceb15..b861b0274a 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -2343,7 +2343,8 @@ void SetSpeed() { SetPIntOnClick(MIN_PRINT_SPEED, MAX_PRINT_SPEED); } #endif // ADVANCED_PAUSE_FEATURE -void SetFlow() { SetPIntOnClick(MIN_PRINT_FLOW, MAX_PRINT_FLOW); } +void ApplyFlow() { planner.refresh_e_factor(0); } +void SetFlow() { SetPIntOnClick(MIN_PRINT_FLOW, MAX_PRINT_FLOW, ApplyFlow); } // Leveling Bed Corners void LevBed(uint8_t point) { From b619a7184406a3fff2d67d33f1f82159721bb1bc Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Mon, 25 Oct 2021 19:12:07 +1300 Subject: [PATCH 051/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20b=C3=B8rken=20E=5F?= =?UTF-8?q?DUAL=5FSTEPPER=5FDRIVERS=20(#23017)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Conditionals_post.h | 2 +- Marlin/src/module/stepper.cpp | 2 +- Marlin/src/module/stepper/indirection.h | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 41a2ab3938..6a70a5ce54 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -1636,7 +1636,7 @@ #define HAS_E0_MS_PINS 1 #endif - #if E_STEPPERS > 1 + #if E_STEPPERS > 1 || ENABLED(E_DUAL_STEPPER_DRIVERS) #if PIN_EXISTS(E1_ENABLE) || AXIS_IS_L64XX(E1) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E1)) #define HAS_E1_ENABLE 1 #endif diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index e374b85d7a..a54bf53c49 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -2744,7 +2744,7 @@ void Stepper::init() { #if E_STEPPERS && HAS_E0_STEP E_AXIS_INIT(0); #endif - #if E_STEPPERS > 1 && HAS_E1_STEP + #if (E_STEPPERS > 1 || ENABLED(E_DUAL_STEPPER_DRIVERS)) && HAS_E1_STEP E_AXIS_INIT(1); #endif #if E_STEPPERS > 2 && HAS_E2_STEP diff --git a/Marlin/src/module/stepper/indirection.h b/Marlin/src/module/stepper/indirection.h index 3e3ebd411f..93b765d7a5 100644 --- a/Marlin/src/module/stepper/indirection.h +++ b/Marlin/src/module/stepper/indirection.h @@ -751,14 +751,14 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset #endif #ifndef ENABLE_STEPPER_E1 - #if E_STEPPERS > 1 && HAS_E1_ENABLE + #if (E_STEPPERS > 1 || ENABLED(E_DUAL_STEPPER_DRIVERS)) && HAS_E1_ENABLE #define ENABLE_STEPPER_E1() E1_ENABLE_WRITE( E_ENABLE_ON) #else #define ENABLE_STEPPER_E1() NOOP #endif #endif #ifndef DISABLE_STEPPER_E1 - #if E_STEPPERS > 1 && HAS_E1_ENABLE + #if (E_STEPPERS > 1 || ENABLED(E_DUAL_STEPPER_DRIVERS)) && HAS_E1_ENABLE #define DISABLE_STEPPER_E1() E1_ENABLE_WRITE(!E_ENABLE_ON) #else #define DISABLE_STEPPER_E1() NOOP From 90716eb7ce6ffd315b923e85a19d3bca65b78ff0 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Sun, 24 Oct 2021 23:14:02 -0700 Subject: [PATCH 052/532] =?UTF-8?q?=E2=9C=A8=20Octopus=20Pro=20V1.0=20with?= =?UTF-8?q?=20STM32F429ZGT6=20(#23008)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/pins.h | 2 +- .../marlin_BigTree_Octopus_Pro_v1_F429.json | 50 ++ .../PeripheralPins.c | 433 ++++++++++++++++++ .../PinNamesVar.h | 30 ++ .../hal_conf_extra.h | 53 +++ .../ldscript.ld | 209 +++++++++ .../variant.cpp | 233 ++++++++++ .../variant.h | 216 +++++++++ ini/stm32f4.ini | 25 + 9 files changed, 1250 insertions(+), 1 deletion(-) create mode 100644 buildroot/share/PlatformIO/boards/marlin_BigTree_Octopus_Pro_v1_F429.json create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/PeripheralPins.c create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/PinNamesVar.h create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/hal_conf_extra.h create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/ldscript.ld create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.cpp create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.h diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 4de4446cf5..3b83e14d62 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -628,7 +628,7 @@ #elif MB(BTT_OCTOPUS_V1_1) #include "stm32f4/pins_BTT_OCTOPUS_V1_1.h" // STM32F4 env:BIGTREE_OCTOPUS_V1 env:BIGTREE_OCTOPUS_V1_USB #elif MB(BTT_OCTOPUS_PRO_V1_0) - #include "stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h" // STM32F4 env:BIGTREE_OCTOPUS_V1 env:BIGTREE_OCTOPUS_V1_USB + #include "stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h" // STM32F4 env:BIGTREE_OCTOPUS_V1 env:BIGTREE_OCTOPUS_V1_USB env:BIGTREE_OCTOPUS_PRO_V1_F429 env:BIGTREE_OCTOPUS_PRO_V1_F429_USB #elif MB(LERDGE_K) #include "stm32f4/pins_LERDGE_K.h" // STM32F4 env:LERDGEK env:LERDGEK_usb_flash_drive #elif MB(LERDGE_S) diff --git a/buildroot/share/PlatformIO/boards/marlin_BigTree_Octopus_Pro_v1_F429.json b/buildroot/share/PlatformIO/boards/marlin_BigTree_Octopus_Pro_v1_F429.json new file mode 100644 index 0000000000..66ee1c842e --- /dev/null +++ b/buildroot/share/PlatformIO/boards/marlin_BigTree_Octopus_Pro_v1_F429.json @@ -0,0 +1,50 @@ +{ + "build": { + "cpu": "cortex-m4", + "extra_flags": "-DSTM32F4 -DSTM32F429xx", + "f_cpu": "168000000L", + "mcu": "stm32f429zgt6", + "product_line": "STM32F429xx", + "variant": "MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429" + }, + "connectivity": [ + "can" + ], + "debug": { + "default_tools": [ + "stlink" + ], + "jlink_device": "STM32F429ZG", + "onboard_tools": [ + "stlink" + ], + "openocd_board": "stm32f429", + "openocd_target": "stm32f4x", + "svd_path": "STM32F429x.svd" + }, + "frameworks": [ + "arduino", + "cmsis", + "mbed", + "stm32cube", + "libopencm3", + "zephyr" + ], + "name": "STM32F429ZG (128k RAM, 64k CCM RAM, 1024k Flash", + "upload": { + "disable_flushing": false, + "maximum_ram_size": 131072, + "maximum_size": 1048576, + "protocol": "stlink", + "protocols": [ + "stlink", + "dfu", + "jlink" + ], + "require_upload_port": true, + "use_1200bps_touch": false, + "wait_for_upload_port": false + }, + "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f429-439.html", + "vendor": "ST" +} diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/PeripheralPins.c b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/PeripheralPins.c new file mode 100644 index 0000000000..d0905853a9 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/PeripheralPins.c @@ -0,0 +1,433 @@ +/* + ******************************************************************************* + * Copyright (c) 2016, STMicroelectronics + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************* + */ +#include "Arduino.h" +#include "PeripheralPins.h" + +// ===== +// Note: Commented lines are alternative possibilities which are not used per default. +// If you change them, you will have to know what you do +// ===== + + +//*** ADC *** + +#ifdef HAL_ADC_MODULE_ENABLED +const PinMap PinMap_ADC[] = { + {PA_3, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3 + {PA_4, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC2_IN4 + {PC_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10 + {PC_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11 + {PC_2, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12 + {PC_3, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13 + {PC_4, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_IN14 + {PF_3, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC3_IN9 TH_0 + {PF_4, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC3_IN14 TH_1 + {PF_5, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC3_IN15 TH_2 + {PF_6, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC3_IN4 TH_3 + {PF_7, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC3_IN5 EXP_13 + {PF_8, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC3_IN6 PT100 + {NC, NP, 0} + + // {PA_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC1_IN0 + // {PA_0, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC2_IN0 + // {PA_0, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC3_IN0 + // {PA_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1 + // {PA_1, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC2_IN1 + // {PA_1, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC3_IN1 + // {PA_2, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2 + // {PA_2, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC2_IN2 + // {PA_2, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC3_IN2 + // {PA_3, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC2_IN3 + // {PA_3, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC3_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_5, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC2_IN5 + // {PA_6, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_IN6 + // {PA_6, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC2_IN6 + // {PA_7, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_IN7 + // {PA_7, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC2_IN7 + // {PB_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8 + // {PB_0, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC2_IN8 + // {PB_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9 + // {PB_1, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC2_IN9 + // {PC_0, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC2_IN10 + // {PC_0, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC3_IN10 + // {PC_1, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC2_IN11 + // {PC_1, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC3_IN11 + // {PC_2, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC2_IN12 + // {PC_2, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC3_IN12 + // {PC_3, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC2_IN13 + // {PC_3, ADC3, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC3_IN13 + // {PC_4, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC2_IN14 + // {PC_5, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_IN15 + // {PC_5, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC2_IN15 + +}; +#endif + +//*** DAC *** + +#ifdef HAL_DAC_MODULE_ENABLED +const PinMap PinMap_DAC[] = { + // {PA_4, DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC_OUT1 + // {PA_5, DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC_OUT2 - LD2 + {NC, NP, 0} +}; +#endif + +//*** I2C *** + +#ifdef HAL_I2C_MODULE_ENABLED +const PinMap PinMap_I2C_SDA[] = { + // {PB_3, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, + // {PB_4, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, + // {PB_7, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + {PB_9, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + // {PC_7, FMPI2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_FMPI2C1)}, + // {PC_9, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, + // {PC_12, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, + {NC, NP, 0} +}; +#endif + +#ifdef HAL_I2C_MODULE_ENABLED +const PinMap PinMap_I2C_SCL[] = { + // {PA_8, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, + // {PB_6, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + {PB_8, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + // {PB_10, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, + // {PC_6, FMPI2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_FMPI2C1)}, + {NC, NP, 0} +}; +#endif + +//*** PWM *** + +#ifdef HAL_TIM_MODULE_ENABLED +const PinMap PinMap_PWM[] = { + {PA_1, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 BED + {PA_2, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 HEATER0 + {PA_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 HEATER1 + {PB_10, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 HEATER2 + {PB_11, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 HEATER3 + {PA_8, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 FAN0 + {PE_5, TIM9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1 FAN1 + {PD_12, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1 FAN2 + {PD_13, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2 FAN3 + {PD_14, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3 FAN4 + {PD_15, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4 FAN5 + + /** + * Unused by specifications on Octopus. + * Uncomment the corresponding line if you want to have HardwarePWM on some pins. + * WARNING: check timers' usage first to avoid conflicts. + * If you don't know what you're doing leave things as they are or you WILL break something (including hardware) + * If you alter this section DO NOT report bugs to Marlin team since they are most likely caused by you. Thank you. + */ + //{PA_0, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 + //{PA_0, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 + //{PA_1, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 BLTOUCH is a "servo" + //{PA_2, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 BLTOUCH is a "servo" + //{PA_1, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 + //{PA_2, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3 + //{PA_2, TIM9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1 + //{PA_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 + //{PA_3, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4 + //{PA_3, TIM9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2 + //{PA_5, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 + //{PA_5, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N + //{PA_6, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 + //{PA_6, TIM13, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1 + //{PA_7, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N + //{PA_7, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 + //{PA_7, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N + //{PA_7, TIM14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1 + //{PA_8, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 + //{PA_9, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2 + //{PA_10, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3 + //{PA_11, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4 + //{PA_15, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 + //{PB_0, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N + //{PB_0, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N + //{PB_1, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N + //{PB_1, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N + //{PB_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 + //{PB_4, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 + //{PB_5, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 + //{PB_6, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1 + //{PB_8, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3 + //{PB_8, TIM10, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1 + //{PB_9, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4 + //{PB_9, TIM11, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1 + //{PB_10, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 + //{PB_11, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 + //{PB_13, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N + //{PB_14, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N + //{PB_14, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N + //{PB_14, TIM12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 1, 0)}, // TIM12_CH1 + //{PB_15, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N + //{PB_15, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N + //{PB_15, TIM12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 2, 0)}, // TIM12_CH2 + //{PC_6, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1 + //{PC_7, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 + //{PC_7, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2 + //{PC_8, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 + //{PC_9, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 + //{PD_13, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2 + //{PD_15, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_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 + //144 pins mcu, 114 gpio + //{PF_6, TIM10, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1 + //{PF_7, TIM11, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1 + //{PF_8, TIM13, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1 + //{PF_9, TIM14, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1 + + //176 pins mcu, 140 gpio + //{PH_10, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 + //{PH_6, TIM12, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 1, 0)}, // TIM12_CH1 + //{PH_11, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 + //{PI_5, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1 + //{PI_6, TIM8, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2 + + {NC, NP, 0} +}; +#endif + +//*** SERIAL *** + +#ifdef HAL_UART_MODULE_ENABLED +const PinMap PinMap_UART_TX[] = { + // {PA_0, UART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, + // {PA_2, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PD_5, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PA_9, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PD_8, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + // {PB_6, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + // {PB_10, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + // {PC_6, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + // {PC_10, UART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, + //{PC_10, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + // {PC_12, UART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)}, + {NC, NP, 0} +}; +#endif + +#ifdef HAL_UART_MODULE_ENABLED +const PinMap PinMap_UART_RX[] = { + // {PA_1, UART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, + // {PA_3, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PD_6, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PA_10, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PD_9, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + // {PB_7, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + // {PC_5, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + // {PC_7, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + // {PC_11, UART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, + //{PC_11, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + // {PD_2, UART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)}, + {NC, NP, 0} +}; +#endif + +#ifdef HAL_UART_MODULE_ENABLED +const PinMap PinMap_UART_RTS[] = { + // {PA_1, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + // {PA_12, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + // {PA_15, UART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, + // {PB_14, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + // {PC_8, UART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART5)}, + {NC, NP, 0} +}; +#endif + +#ifdef HAL_UART_MODULE_ENABLED +const PinMap PinMap_UART_CTS[] = { + // {PA_0, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + // {PA_11, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + // {PB_0, UART4, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)}, + // {PB_13, USART3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)}, + // {PC_9, UART5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_UART5)}, + {NC, NP, 0} +}; +#endif + +//*** SPI *** + +#ifdef HAL_SPI_MODULE_ENABLED +const PinMap PinMap_SPI_MOSI[] = { + {PA_7, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + // {PB_0, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_SPI3)}, + // {PB_2, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_SPI3)}, + // {PB_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + // {PB_5, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + // {PB_15, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + // {PC_1, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_SPI2)}, + // {PC_1, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI3)}, + // {PC_3, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + // {PC_12, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NP, 0} +}; +#endif + +#ifdef HAL_SPI_MODULE_ENABLED +const PinMap PinMap_SPI_MISO[] = { + {PA_6, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + // {PB_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + // {PB_4, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + // {PB_14, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + // {PC_2, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + // {PC_11, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NP, 0} +}; +#endif + +#ifdef HAL_SPI_MODULE_ENABLED +const PinMap PinMap_SPI_SCLK[] = { + {PA_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + // {PA_9, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + // {PB_3, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + // {PB_3, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + // {PB_10, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + // {PB_13, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + // {PC_7, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + // {PC_10, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NP, 0} +}; +#endif + +#ifdef HAL_SPI_MODULE_ENABLED +const PinMap PinMap_SPI_SSEL[] = { + {PA_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + // {PA_4, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + // {PA_15, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + // {PA_15, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + // {PB_4, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_SPI2)}, + // {PB_9, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + // {PB_12, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {NC, NP, 0} +}; +#endif + +//*** CAN *** + +#ifdef HAL_CAN_MODULE_ENABLED +const PinMap PinMap_CAN_RD[] = { + // {PA_11, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, + // {PB_5, CAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN2)}, + // {PB_8, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, + // {PB_12, CAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN2)}, + {NC, NP, 0} +}; +#endif + +#ifdef HAL_CAN_MODULE_ENABLED +const PinMap PinMap_CAN_TD[] = { + // {PA_12, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, + // {PB_6, CAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN2)}, + // {PB_9, CAN1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN1)}, + // {PB_13, CAN2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF9_CAN2)}, + {NC, NP, 0} +}; +#endif + +//*** ETHERNET *** + +//*** No Ethernet *** + +//*** QUADSPI *** + +#ifdef HAL_QSPI_MODULE_ENABLED +const PinMap PinMap_QUADSPI[] = { + // {PA_1, QUADSPI, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QSPI)}, // QUADSPI_BK1_IO3 + // {PB_2, QUADSPI, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QSPI)}, // QUADSPI_CLK + // {PB_6, QUADSPI, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_QSPI)}, // QUADSPI_BK1_NCS + // {PC_9, QUADSPI, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QSPI)}, // QUADSPI_BK1_IO0 + // {PC_10, QUADSPI, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QSPI)}, // QUADSPI_BK1_IO1 + // {PC_11, QUADSPI, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_QSPI)}, // QUADSPI_BK2_NCS + {NC, NP, 0} +}; +#endif + +//*** USB *** + +#ifdef HAL_PCD_MODULE_ENABLED +const PinMap PinMap_USB_OTG_FS[] = { + // {PA_8, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_SOF + // {PA_9, USB_OTG_FS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)}, // USB_OTG_FS_VBUS + // {PA_10, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_ID + {PA_11, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DM + {PA_12, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DP + {NC, NP, 0} +}; + +const PinMap PinMap_USB_OTG_HS[] = { + //{PB_12, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_ID + //{PB_13, USB_OTG_HS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_OTG_HS_VBUS + {PB_14, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_DM + {PB_15, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_DP + + /*#error "USB in HS mode isn't supported by the board" + {PA_3, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D0 + {PB_0, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D1 + {PB_1, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D2 + {PB_5, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D7 + {PB_10, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D3 + {PB_12, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D5 + {PB_13, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D6 + {PC_0, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_STP + {PC_2, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_DIR + {PC_3, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_NXT + */ + {NC, NP, 0} +}; + + +#ifdef HAL_SD_MODULE_ENABLED +WEAK const PinMap PinMap_SD[] = { + // {PB_8, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D4 + // {PB_9, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D5 + // {PC_6, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D6 + // {PC_7, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D7 + {PC_8, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D0 + {PC_9, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D1 + {PC_10, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D2 + {PC_11, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D3 + {PC_12, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_SDIO)}, // SDIO_CK + {PD_2, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_SDIO)}, // SDIO_CMD + {NC, NP, 0} +}; +#endif +#endif diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/PinNamesVar.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/PinNamesVar.h new file mode 100644 index 0000000000..bff3f21349 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/PinNamesVar.h @@ -0,0 +1,30 @@ +/* SYS_WKUP */ +#ifdef PWR_WAKEUP_PIN1 + SYS_WKUP1 = PA_0, /* SYS_WKUP0 */ +#endif +#ifdef PWR_WAKEUP_PIN2 + SYS_WKUP2 = NC, +#endif +#ifdef PWR_WAKEUP_PIN3 + SYS_WKUP3 = NC, +#endif +#ifdef PWR_WAKEUP_PIN4 + SYS_WKUP4 = NC, +#endif +#ifdef PWR_WAKEUP_PIN5 + SYS_WKUP5 = NC, +#endif +#ifdef PWR_WAKEUP_PIN6 + SYS_WKUP6 = NC, +#endif +#ifdef PWR_WAKEUP_PIN7 + SYS_WKUP7 = NC, +#endif +#ifdef PWR_WAKEUP_PIN8 + SYS_WKUP8 = NC, +#endif +/* USB */ +#ifdef USBCON + USB_OTG_FS_DM = PA_11, + USB_OTG_FS_DP = PA_12, +#endif diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/hal_conf_extra.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/hal_conf_extra.h new file mode 100644 index 0000000000..d62c510095 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/hal_conf_extra.h @@ -0,0 +1,53 @@ +#pragma once + +#define HAL_MODULE_ENABLED +#define HAL_ADC_MODULE_ENABLED +#define HAL_CRC_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED // Needed for Endstop (and other external) Interrupts +#define HAL_GPIO_MODULE_ENABLED +#define HAL_I2C_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +//#define HAL_RTC_MODULE_ENABLED // Real Time Clock...do we use it? +#define HAL_SPI_MODULE_ENABLED +#define HAL_TIM_MODULE_ENABLED +#define HAL_USART_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED +//#define HAL_UART_MODULE_ENABLED // by default +//#define HAL_PCD_MODULE_ENABLED // Since STM32 v3.10700.191028 this is automatically added if any type of USB is enabled (as in Arduino IDE) +#define HAL_SD_MODULE_ENABLED + +//#undef HAL_SD_MODULE_ENABLED +#undef HAL_DAC_MODULE_ENABLED +#undef HAL_FLASH_MODULE_ENABLED +#undef HAL_CAN_MODULE_ENABLED +#undef HAL_CAN_LEGACY_MODULE_ENABLED +#undef HAL_CEC_MODULE_ENABLED +#undef HAL_CRYP_MODULE_ENABLED +#undef HAL_DCMI_MODULE_ENABLED +#undef HAL_DMA2D_MODULE_ENABLED +#undef HAL_ETH_MODULE_ENABLED +#undef HAL_NAND_MODULE_ENABLED +#undef HAL_NOR_MODULE_ENABLED +#undef HAL_PCCARD_MODULE_ENABLED +#undef HAL_SRAM_MODULE_ENABLED +#undef HAL_SDRAM_MODULE_ENABLED +#undef HAL_HASH_MODULE_ENABLED +#undef HAL_SMBUS_MODULE_ENABLED +#undef HAL_I2S_MODULE_ENABLED +#undef HAL_IWDG_MODULE_ENABLED +#undef HAL_LTDC_MODULE_ENABLED +#undef HAL_DSI_MODULE_ENABLED +#undef HAL_QSPI_MODULE_ENABLED +#undef HAL_RNG_MODULE_ENABLED +#undef HAL_SAI_MODULE_ENABLED +#undef HAL_IRDA_MODULE_ENABLED +#undef HAL_SMARTCARD_MODULE_ENABLED +#undef HAL_WWDG_MODULE_ENABLED +//#undef HAL_HCD_MODULE_ENABLED +#undef HAL_FMPI2C_MODULE_ENABLED +#undef HAL_SPDIFRX_MODULE_ENABLED +#undef HAL_DFSDM_MODULE_ENABLED +#undef HAL_LPTIM_MODULE_ENABLED +#undef HAL_MMC_MODULE_ENABLED diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/ldscript.ld b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/ldscript.ld new file mode 100644 index 0000000000..4cac4ac6e2 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/ldscript.ld @@ -0,0 +1,209 @@ +/* +***************************************************************************** +** + +** File : LinkerScript.ld +** +** Abstract : Linker script for STM32F429VGTx Device with +** 2048KByte FLASH, 192KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Target : STMicroelectronics STM32 +** +** +** Distribution: The file is distributed as is, without any warranty +** of any kind. +** +***************************************************************************** +** @attention +** +**

© COPYRIGHT(c) 2014 Ac6

+** +** Redistribution and use in source and binary forms, with or without modification, +** are permitted provided that the following conditions are met: +** 1. Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** 3. Neither the name of Ac6 nor the names of its contributors +** may be used to endorse or promote products derived from this software +** without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20000000 + LD_MAX_DATA_SIZE; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x200; /* required amount of heap */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +FLASH (rx) : ORIGIN = 0x08000000 + LD_FLASH_OFFSET, LENGTH = LD_MAX_SIZE - LD_FLASH_OFFSET +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = LD_MAX_DATA_SIZE +CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K +MEMORY_ARRAY (rw) : ORIGIN = 0x10000000, LENGTH = 0x144 +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + /* The program code and other data goes into FLASH */ + .text ALIGN(4): + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata ALIGN(4) : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + _siccmram = LOADADDR(.ccmram); + + /* CCM-RAM section + * + * IMPORTANT NOTE! + * If initialized variables will be placed in this section, + * the startup code needs to be modified to copy the init-values. + */ + .ccmram : + { + . = ALIGN(4); + _sccmram = .; /* create a global symbol at ccmram start */ + *(.ccmram) + *(.ccmram*) + + . = ALIGN(4); + _eccmram = .; /* create a global symbol at ccmram end */ + } >CCMRAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } + ExtRAMData : {*(.ExtRAMData)} >MEMORY_ARRAY +} diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.cpp b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.cpp new file mode 100644 index 0000000000..c8ed0d1e52 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.cpp @@ -0,0 +1,233 @@ +/* + Copyright (c) 2011 Arduino. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "pins_arduino.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// Pin number +const PinName digitalPin[] = { + PA_0, //D0 + PA_1, //D1 + PA_2, //D2 + PA_3, //D3 + PA_4, //D4 + PA_5, //D5 + PA_6, //D6 + PA_7, //D7 + 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 + PB_1, //D17 + PB_2, //D18 + PB_3, //D19 + PB_4, //D20 + PB_5, //D21 + PB_6, //D22 + PB_7, //D23 + PB_8, //D24 + PB_9, //D25 + PB_10, //D26 + PB_11, //D27 + PB_12, //D28 + PB_13, //D29 + PB_14, //D30 + PB_15, //D31 + PC_0, //D32 + PC_1, //D33 + PC_2, //D34 + PC_3, //D35 + PC_4, //D36 + PC_5, //D37 + 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 + PF_14, //D94 + PF_15, //D95 + PG_0, //D96 + PG_1, //D97 + PG_2, //D98 + PG_3, //D99 + PG_4, //D100 + PG_5, //D101 + PG_6, //D102 + PG_7, //D103 + PG_8, //D104 + PG_9, //D105 + PG_10, //D106 + PG_11, //D107 + PG_12, //D108 + PG_13, //D109 + PG_14, //D110 + PG_15, //D111 + + //Duplicated ADC Pins + PA_3, //D112/A0 + PA_4, //D113/A1 + PC_0, //D114/A2 + PC_1, //D115/A3 + PC_2, //D116/A4 + PC_3, //D117/A5 + PC_4, //D118/A6 + PF_3, //D119/A16 - 1:FSMC_A3 2:ADC3_IN9 + PF_4, //D120/A17 - 1:FSMC_A4 2:ADC3_IN14 + PF_5, //D121/A18 - 1:FSMC_A5 2:ADC3_IN15 + PF_6, //D122/A19 - 1:TIM10_CH1 2:ADC3_IN4 + PF_7, //D123/A20 - 1:TIM11_CH1 2:ADC3_IN5 + PF_8, //D124/A20 - 1:TIM11_CH1 2:ADC3_IN6 +}; + +#ifdef __cplusplus +} +#endif + +// ---------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief System Clock Configuration + * The system Clock is configured as follow : + * System Clock source = PLL (HSE) + * SYSCLK(Hz) = 168000000 + * HCLK(Hz) = 168000000 + * AHB Prescaler = 1 + * APB1 Prescaler = 4 + * APB2 Prescaler = 2 + * HSE Frequency(Hz) = 8000000 + * PLL_M = 8 + * PLL_N = 336 + * PLL_P = 2 + * PLL_Q = 7 + * VDD(V) = 3.3 + * Main regulator output voltage = Scale1 mode + * Flash Latency(WS) = 5 + * @param None + * @retval None + */ +WEAK void SystemClock_Config(void) +{ + RCC_ClkInitTypeDef RCC_ClkInitStruct; + RCC_OscInitTypeDef RCC_OscInitStruct; + + /* Enable Power Control clock */ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* The voltage scaling allows optimizing the power consumption when the device is + clocked below the maximum system frequency, to update the voltage scaling value + regarding system frequency refer to product datasheet. */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + + /* Enable HSE Oscillator and activate PLL with HSE as source */ + 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 = 8; + RCC_OscInitStruct.PLL.PLLN = 336; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 7; + if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + /* Initialization Error */ + } + + if(HAL_PWREx_EnableOverDrive() != HAL_OK) + { + /* Initialization Error */ + } + + /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 + clocks dividers */ + RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; + if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) + { + /* Initialization Error */ + } +} + +#ifdef __cplusplus +} +#endif diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.h new file mode 100644 index 0000000000..0147ece0ab --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.h @@ -0,0 +1,216 @@ +/* + Copyright (c) 2011 Arduino. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _VARIANT_ARDUINO_STM32_ +#define _VARIANT_ARDUINO_STM32_ + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/*---------------------------------------------------------------------------- + * Pins + *----------------------------------------------------------------------------*/ + +#define PA0 0 //D0 +#define PA1 1 //D1 +#define PA2 2 //D2 +#define PA3 3 //D3 +#define PA4 4 //D4 +#define PA5 5 //D5 +#define PA6 6 //D6 +#define PA7 7 //D7 +#define PA8 8 //D8 +#define PA9 9 //D9 +#define PA10 10 //D10 +#define PA11 11 //D11 +#define PA12 12 //D12 +#define PA13 13 //D13 +#define PA14 14 //D14 +#define PA15 15 //D15 +#define PB0 16 //D16 +#define PB1 17 //D17 +#define PB2 18 //D18 +#define PB3 19 //D19 +#define PB4 20 //D20 +#define PB5 21 //D21 +#define PB6 22 //D22 +#define PB7 23 //D23 +#define PB8 24 //D24 +#define PB9 25 //D25 +#define PB10 26 //D26 +#define PB11 27 //D27 +#define PB12 28 //D28 +#define PB13 29 //D29 +#define PB14 30 //D30 +#define PB15 31 //D31 +#define PC0 32 //D32 +#define PC1 33 //D33 +#define PC2 34 //D34 +#define PC3 35 //D35 +#define PC4 36 //D36 +#define PC5 37 //D37 +#define PC6 38 //D38 +#define PC7 39 //D39 +#define PC8 40 //D40 +#define PC9 41 //D41 +#define PC10 42 //D42 +#define PC11 43 //D43 +#define PC12 44 //D44 +#define PC13 45 //D45 +#define PC14 46 //D46 +#define PC15 47 //D47 +#define PD0 48 //D48 +#define PD1 49 //D49 +#define PD2 50 //D50 +#define PD3 51 //D51 +#define PD4 52 //D52 +#define PD5 53 //D53 +#define PD6 54 //D54 +#define PD7 55 //D55 +#define PD8 56 //D56 +#define PD9 57 //D57 +#define PD10 58 //D58 +#define PD11 59 //D59 +#define PD12 60 //D60 +#define PD13 61 //D61 +#define PD14 62 //D62 +#define PD15 63 //D63 +#define PE0 64 //D64 +#define PE1 65 //D65 +#define PE2 66 //D66 +#define PE3 67 //D67 +#define PE4 68 //D68 +#define PE5 69 //D69 +#define PE6 70 //D70 +#define PE7 71 //D71 +#define PE8 72 //D72 +#define PE9 73 //D73 +#define PE10 74 //D74 +#define PE11 75 //D75 +#define PE12 76 //D76 +#define PE13 77 //D77 +#define PE14 78 //D78 +#define PE15 79 //D79 +#define PF0 80 //D64 +#define PF1 81 //D65 +#define PF2 82 //D66 +#define PF3 83 //D67 +#define PF4 84 //D68 +#define PF5 85 //D69 +#define PF6 86 //D70 +#define PF7 87 //D71 +#define PF8 88 //D72 +#define PF9 89 //D73 +#define PF10 90 //D74 +#define PF11 91 //D75 +#define PF12 92 //D76 +#define PF13 93 //D77 +#define PF14 94 //D78 +#define PF15 95 //D79 +#define PG0 96 //D64 +#define PG1 97 //D65 +#define PG2 98 //D66 +#define PG3 99 //D67 +#define PG4 100 //D68 +#define PG5 101 //D69 +#define PG6 102 //D70 +#define PG7 103 //D71 +#define PG8 104 //D72 +#define PG9 105 //D73 +#define PG10 106 //D74 +#define PG11 107 //D75 +#define PG12 108 //D76 +#define PG13 109 //D77 +#define PG14 110 //D78 +#define PG15 111 //D79 + +// This must be a literal with the same value as PEND +#define NUM_DIGITAL_PINS 125 +// This must be a literal with a value less than or equal to to MAX_ANALOG_INPUTS +#define NUM_ANALOG_INPUTS 13 +#define NUM_ANALOG_FIRST 112 + +//#define ADC_RESOLUTION 12 + +// PWM resolution +//#define PWM_RESOLUTION 12 +#define PWM_FREQUENCY 1000 // >= 20 Khz => inaudible noise for fans +#define PWM_MAX_DUTY_CYCLE 255 + +// SPI Definitions +#define PIN_SPI_SS PA4 +#define PIN_SPI_MOSI PA7 +#define PIN_SPI_MISO PA6 +#define PIN_SPI_SCK PA5 + +// I2C Definitions +#define PIN_WIRE_SDA PB9 +#define PIN_WIRE_SCL PB8 + +// Timer Definitions +// Do not use timer used by PWM pin. See PinMap_PWM. +#define TIMER_TONE TIM6 +#define TIMER_SERVO TIM5 +#define TIMER_SERIAL TIM7 + +// UART Definitions +//#define SERIAL_UART_INSTANCE 1 // Connected to EXP3 header +/* Enable Serial 3 */ +#define HAVE_HWSERIAL1 +#define HAVE_HWSERIAL3 + +// Default pin used for 'Serial' instance (ex: ST-Link) +// Mandatory for Firmata +#define PIN_SERIAL_RX PA10 +#define PIN_SERIAL_TX PA9 + +/* HAL configuration */ +#define HSE_VALUE 8000000U + +#define FLASH_PAGE_SIZE (4U * 1024U) + +#ifdef __cplusplus +} // extern "C" +#endif + +/*---------------------------------------------------------------------------- + * Arduino objects - C++ only + *----------------------------------------------------------------------------*/ + +#ifdef __cplusplus +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_HARDWARE_OPEN Serial +#endif + +#endif /* _VARIANT_ARDUINO_STM32_ */ diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index a6bc125d21..3e0c400a6b 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -255,6 +255,31 @@ build_flags = ${stm_flash_drive.build_flags} -DUSBD_IRQ_SUBPRIO=6 -DUSBD_USE_CDC_MSC +# +# BigTreeTech Octopus Pro V1.0 (STM32F429ZGT6 ARM Cortex-M4) +# +[env:BIGTREE_OCTOPUS_PRO_V1_F429] +platform = ${common_stm32.platform} +extends = stm32_variant +board = marlin_BigTree_Octopus_Pro_v1_F429 +board_build.offset = 0x8000 +build_flags = ${stm32_variant.build_flags} + -DUSE_USB_HS_IN_FS + +# +# BigTreeTech Octopus Pro V1.0 (STM32F429ZGT6 ARM Cortex-M4) with USB Flash Drive Support +# +[env:BIGTREE_OCTOPUS_PRO_V1_F429_USB] +platform = ${common_stm32.platform} +extends = env:BIGTREE_OCTOPUS_PRO_V1_F429 +platform_packages = ${stm_flash_drive.platform_packages} +build_unflags = -DUSBD_USE_CDC +build_flags = ${stm_flash_drive.build_flags} + -DSTM32F446_5VX -DUSE_USB_HS_IN_FS + -DUSE_USBHOST_HS -DUSBD_IRQ_PRIO=5 + -DUSBD_IRQ_SUBPRIO=6 + -DUSBD_USE_CDC_MSC + # # Lerdge base # From 930cb7c3175eb85866bb673a861f8945c3c18726 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Tue, 26 Oct 2021 10:02:29 +1300 Subject: [PATCH 053/532] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20Add'l=20PCINTs=20f?= =?UTF-8?q?or=20Mega=20Extended=20(#23019)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../variants/MARLIN_MEGA_EXTENDED/pins_arduino.h | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/buildroot/share/PlatformIO/variants/MARLIN_MEGA_EXTENDED/pins_arduino.h b/buildroot/share/PlatformIO/variants/MARLIN_MEGA_EXTENDED/pins_arduino.h index dbbb7b4832..1129f8edae 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_MEGA_EXTENDED/pins_arduino.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_MEGA_EXTENDED/pins_arduino.h @@ -85,19 +85,23 @@ static const uint8_t A15 = PIN_A15; // A majority of the pins are NOT PCINTs, SO BE WARNED (i.e. you cannot use them as receive pins) // Only pins available for RECEIVE (TRANSMIT can be on any pin): // (I've deliberately left out pin mapping to the Hardware USARTs - seems senseless to me) -// Pins: 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69 +// Pins: 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69, 72, 73, 75, 76, 77 #define digitalPinToPCICR(p) ( (((p) >= 10) && ((p) <= 13)) || \ (((p) >= 50) && ((p) <= 53)) || \ - (((p) >= 62) && ((p) <= 69)) ? (&PCICR) : nullptr ) + (((p) >= 62) && ((p) <= 69)) || \ + (((p) >= 72) && ((p) <= 73)) || \ + (((p) >= 75) && ((p) <= 77)) ? (&PCICR) : nullptr ) #define digitalPinToPCICRbit(p) ( (((p) >= 10) && ((p) <= 13)) || (((p) >= 50) && ((p) <= 53)) ? 0 : \ ( (((p) >= 62) && ((p) <= 69)) ? 2 : \ - 0 ) ) + ( (((p) >= 72) && ((p) <= 73)) || (((p) >= 75) && ((p) <= 77)) ? 1 : \ + 0 ) ) ) #define digitalPinToPCMSK(p) ( (((p) >= 10) && ((p) <= 13)) || (((p) >= 50) && ((p) <= 53)) ? (&PCMSK0) : \ ( (((p) >= 62) && ((p) <= 69)) ? (&PCMSK2) : \ - nullptr ) ) + ( (((p) >= 72) && ((p) <= 73)) || (((p) >= 75) && ((p) <= 77)) ? (&PCMSK1) : \ + nullptr ) ) ) #define digitalPinToPCMSKbit(p) ( (((p) >= 10) && ((p) <= 13)) ? ((p) - 6) : \ ( ((p) == 50) ? 3 : \ @@ -105,7 +109,9 @@ static const uint8_t A15 = PIN_A15; ( ((p) == 52) ? 1 : \ ( ((p) == 53) ? 0 : \ ( (((p) >= 62) && ((p) <= 69)) ? ((p) - 62) : \ - 0 ) ) ) ) ) ) + ( (((p) >= 72) && ((p) <= 73)) ? ((p) - 69) : \ + ( (((p) >= 75) && ((p) <= 77)) ? ((p) - 70) : \ + 0 ) ) ) ) ) ) ) ) #define digitalPinToInterrupt(p) ((p) == 2 ? 0 : ((p) == 3 ? 1 : ((p) >= 18 && (p) <= 21 ? 23 - (p) : NOT_AN_INTERRUPT))) From 73875cf9ccd4b23bbe2a46bb57192109b7d1a7c6 Mon Sep 17 00:00:00 2001 From: tombrazier <68918209+tombrazier@users.noreply.github.com> Date: Mon, 25 Oct 2021 22:29:40 +0100 Subject: [PATCH 054/532] =?UTF-8?q?=F0=9F=9A=B8=20Default=20T0=20for=20M56?= =?UTF-8?q?9,=20M906,=20M913=20(#23020)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/feature/L6470/M906.cpp | 2 +- Marlin/src/gcode/feature/trinamic/M569.cpp | 2 +- Marlin/src/gcode/feature/trinamic/M906.cpp | 2 +- Marlin/src/gcode/feature/trinamic/M911-M914.cpp | 2 +- Marlin/src/gcode/gcode.cpp | 9 +++++---- Marlin/src/gcode/gcode.h | 2 +- 6 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Marlin/src/gcode/feature/L6470/M906.cpp b/Marlin/src/gcode/feature/L6470/M906.cpp index a74365e84d..d058ce5501 100644 --- a/Marlin/src/gcode/feature/L6470/M906.cpp +++ b/Marlin/src/gcode/feature/L6470/M906.cpp @@ -280,7 +280,7 @@ void GcodeSuite::M906() { #if E_STEPPERS case E_AXIS: { - const int8_t target_e_stepper = get_target_e_stepper_from_command(); + const int8_t target_e_stepper = get_target_e_stepper_from_command(0); if (target_e_stepper < 0) return; switch (target_e_stepper) { #if AXIS_IS_L64XX(E0) diff --git a/Marlin/src/gcode/feature/trinamic/M569.cpp b/Marlin/src/gcode/feature/trinamic/M569.cpp index 2803c44592..cb33d46d25 100644 --- a/Marlin/src/gcode/feature/trinamic/M569.cpp +++ b/Marlin/src/gcode/feature/trinamic/M569.cpp @@ -133,7 +133,7 @@ static void say_stealth_status() { */ void GcodeSuite::M569() { if (parser.seen('S')) - set_stealth_status(parser.value_bool(), get_target_e_stepper_from_command()); + set_stealth_status(parser.value_bool(), get_target_e_stepper_from_command(0)); else say_stealth_status(); } diff --git a/Marlin/src/gcode/feature/trinamic/M906.cpp b/Marlin/src/gcode/feature/trinamic/M906.cpp index 74596831d3..f28718c831 100644 --- a/Marlin/src/gcode/feature/trinamic/M906.cpp +++ b/Marlin/src/gcode/feature/trinamic/M906.cpp @@ -104,7 +104,7 @@ void GcodeSuite::M906() { #if E_STEPPERS case E_AXIS: { - const int8_t target_e_stepper = get_target_e_stepper_from_command(); + const int8_t target_e_stepper = get_target_e_stepper_from_command(0); if (target_e_stepper < 0) return; switch (target_e_stepper) { #if AXIS_IS_TMC(E0) diff --git a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp index 6e177960ef..3f83558fd4 100644 --- a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp +++ b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp @@ -268,7 +268,7 @@ break; #if E_STEPPERS case E_AXIS: { - const int8_t target_e_stepper = get_target_e_stepper_from_command(); + const int8_t target_e_stepper = get_target_e_stepper_from_command(0); if (target_e_stepper < 0) return; switch (target_e_stepper) { TERN_(E0_HAS_STEALTHCHOP, case 0: TMC_SET_PWMTHRS_E(0); break;) diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index ef21935185..30c7d926e0 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -137,11 +137,12 @@ int8_t GcodeSuite::get_target_extruder_from_command() { } /** - * Get the target e stepper from the T parameter - * Return -1 if the T parameter is out of range or unspecified + * Get the target E stepper from the 'T' parameter. + * If there is no 'T' parameter then dval will be substituted. + * Returns -1 if the resulting E stepper index is out of range. */ -int8_t GcodeSuite::get_target_e_stepper_from_command() { - const int8_t e = parser.intval('T', -1); +int8_t GcodeSuite::get_target_e_stepper_from_command(const int8_t dval/*=-1*/) { + const int8_t e = parser.intval('T', dval); if (WITHIN(e, 0, E_STEPPERS - 1)) return e; SERIAL_ECHO_START(); diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 21f0d3942f..5ad4750fe4 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -390,7 +390,7 @@ public: static void say_units(); static int8_t get_target_extruder_from_command(); - static int8_t get_target_e_stepper_from_command(); + static int8_t get_target_e_stepper_from_command(const int8_t dval=-1); static void get_destination_from_command(); static void process_parsed_command(const bool no_ok=false); From 79626062d03f2f336b43378cc950ead9bffc8703 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 26 Oct 2021 00:59:45 +0000 Subject: [PATCH 055/532] [cron] Bump distribution date (2021-10-26) --- 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 c158f2732e..311c36aa31 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 "2021-10-25" +//#define STRING_DISTRIBUTION_DATE "2021-10-26" /** * 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 5dea5c709c..39fc8dc233 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 "2021-10-25" + #define STRING_DISTRIBUTION_DATE "2021-10-26" #endif /** From 9338b7f06e03fd27ac8b2babb96e92a2701700ad Mon Sep 17 00:00:00 2001 From: woisy00 Date: Wed, 27 Oct 2021 01:05:34 +0200 Subject: [PATCH 056/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20AUTOTEMP=20bug=20(?= =?UTF-8?q?thermal=20runaway)=20(#23025)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Regression from 9823a37 --- Marlin/Configuration_adv.h | 2 +- Marlin/src/module/planner.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index fbf2c41943..d6217ba940 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -414,7 +414,7 @@ */ #define AUTOTEMP #if ENABLED(AUTOTEMP) - #define AUTOTEMP_OLDWEIGHT 0.98 + #define AUTOTEMP_OLDWEIGHT 0.98 // Factor used to weight previous readings (0.0 < value < 1.0) // Turn on AUTOTEMP on M104/M109 by default using proportions set here //#define AUTOTEMP_PROPORTIONAL #if ENABLED(AUTOTEMP_PROPORTIONAL) diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index b89a313f2b..2552efc69a 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1457,7 +1457,7 @@ void Planner::check_axes_activity() { float t = autotemp_min + high * autotemp_factor; LIMIT(t, autotemp_min, autotemp_max); - if (t < oldt) t *= (1.0f - (AUTOTEMP_OLDWEIGHT)) + oldt * (AUTOTEMP_OLDWEIGHT); + if (t < oldt) t = t * (1.0f - (AUTOTEMP_OLDWEIGHT)) + oldt * (AUTOTEMP_OLDWEIGHT); oldt = t; thermalManager.setTargetHotend(t, active_extruder); } From 65dfc407a5a57eaaa036475b079153efdd1a51da Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 26 Oct 2021 19:36:16 -0500 Subject: [PATCH 057/532] =?UTF-8?q?=F0=9F=9A=B8=20Tweaks=20to=20UBL=20G29?= =?UTF-8?q?=20Q?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index d78a5e2578..df83923fef 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -346,13 +346,14 @@ void unified_bed_leveling::G29() { if (parser.seen('Q')) { const int16_t test_pattern = parser.has_value() ? parser.value_int() : -99; - if (!WITHIN(test_pattern, -1, 2)) { - SERIAL_ECHOLNPGM("Invalid test_pattern value. (-1 to 2)\n"); + if (!WITHIN(test_pattern, TERN0(UBL_DEVEL_DEBUGGING, -1), 2)) { + SERIAL_ECHOLNPGM("?Invalid (Q) test pattern. (" TERN(UBL_DEVEL_DEBUGGING, "-1", "0") " to 2)\n"); return; } - SERIAL_ECHOLNPGM("Loading test_pattern values.\n"); + SERIAL_ECHOLNPGM("Applying test pattern.\n"); switch (test_pattern) { + default: case -1: TERN_(UBL_DEVEL_DEBUGGING, g29_eeprom_dump()); break; case 0: From de6dfc9abc9aed3769c92ab89e35ee598424c3fe Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 27 Oct 2021 01:02:46 +0000 Subject: [PATCH 058/532] [cron] Bump distribution date (2021-10-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 311c36aa31..8bfe27d29e 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 "2021-10-26" +//#define STRING_DISTRIBUTION_DATE "2021-10-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 39fc8dc233..904e519c20 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 "2021-10-26" + #define STRING_DISTRIBUTION_DATE "2021-10-27" #endif /** From 2199ae77c80aa419a580f9ed8dc2f11ecddd6912 Mon Sep 17 00:00:00 2001 From: tome9111991 <57866234+tome9111991@users.noreply.github.com> Date: Wed, 27 Oct 2021 21:58:32 +0200 Subject: [PATCH 059/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20E3V2=20(CrealityUI?= =?UTF-8?q?)=20position=20display=20(#23023)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Followup to #23005, #22778 --- Marlin/src/lcd/e3v2/creality/dwin.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/lcd/e3v2/creality/dwin.cpp b/Marlin/src/lcd/e3v2/creality/dwin.cpp index 3326ccb1f3..0f8a739728 100644 --- a/Marlin/src/lcd/e3v2/creality/dwin.cpp +++ b/Marlin/src/lcd/e3v2/creality/dwin.cpp @@ -1659,7 +1659,7 @@ void _update_axis_value(const AxisEnum axis, const uint16_t x, const uint16_t y, else if (blink && draw_empty) DWIN_Draw_String(true, font8x16, Color_White, Color_Bg_Black, x, y, F(" ")); else - DWIN_Draw_FloatValue(true, true, 0, font8x16, Color_White, Color_Bg_Black, 3, 1, x, y, p * 10); + DWIN_Draw_FloatValue(true, true, 0, font8x16, Color_White, Color_Bg_Black, 3, 1, x, y, p); } } @@ -1769,11 +1769,11 @@ void update_variable() { if (BABY_Z_VAR != _offset) { _offset = BABY_Z_VAR; if (BABY_Z_VAR < 0) { - Draw_Stat_Float(207, 417, -_offset * 100); + Draw_Stat_Float(207, 417, -_offset); DWIN_Draw_String(true, font8x16, Color_White, Color_Bg_Black, 205, 419, F("-")); } else { - Draw_Stat_Float(207, 417, _offset * 100); + Draw_Stat_Float(207, 417, _offset); DWIN_Draw_String(true, font8x16, Color_White, Color_Bg_Black, 205, 419, F(" ")); } } From 3f6c8d5dc56938f95edaecddf20e9b76aec6df29 Mon Sep 17 00:00:00 2001 From: somehibs Date: Wed, 27 Oct 2021 21:00:02 +0100 Subject: [PATCH 060/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20serial=20PORT=5FRE?= =?UTF-8?q?STORE=20(and=20BUFFER=5FMONITORING)=20(#23022)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/serial.h | 2 +- Marlin/src/gcode/queue.cpp | 2 +- Marlin/src/libs/autoreport.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/core/serial.h b/Marlin/src/core/serial.h index e058f1e5cd..aee4d4d43d 100644 --- a/Marlin/src/core/serial.h +++ b/Marlin/src/core/serial.h @@ -87,7 +87,7 @@ extern uint8_t marlin_debug_flags; // interface with the ability to output to multiple serial ports. #if HAS_MULTI_SERIAL #define _PORT_REDIRECT(n,p) REMEMBER(n,multiSerial.portMask,p) - #define _PORT_RESTORE(n,p) RESTORE(n) + #define _PORT_RESTORE(n) RESTORE(n) #define SERIAL_ASSERT(P) if (multiSerial.portMask!=(P)) { debugger(); } // If we have a catchall, use that directly #ifdef SERIAL_CATCHALL diff --git a/Marlin/src/gcode/queue.cpp b/Marlin/src/gcode/queue.cpp index cc072e51a1..fd98a39cd6 100644 --- a/Marlin/src/gcode/queue.cpp +++ b/Marlin/src/gcode/queue.cpp @@ -719,7 +719,7 @@ void GCodeQueue::advance() { if (auto_buffer_report_interval && ELAPSED(ms, next_buffer_report_ms)) { next_buffer_report_ms = ms + 1000UL * auto_buffer_report_interval; - PORT_REDIRECT(SERIAL_BOTH); + PORT_REDIRECT(SerialMask::All); report_buffer_statistics(); PORT_RESTORE(); } diff --git a/Marlin/src/libs/autoreport.h b/Marlin/src/libs/autoreport.h index a6bc5adbf7..9aa74ab81e 100644 --- a/Marlin/src/libs/autoreport.h +++ b/Marlin/src/libs/autoreport.h @@ -44,7 +44,7 @@ struct AutoReporter { next_report_ms = ms + SEC_TO_MS(report_interval); PORT_REDIRECT(report_port_mask); Helper::report(); - //PORT_RESTORE(); + PORT_RESTORE(); } } }; From 11f1335efb448c5774c92ca14a72e6dbec9dac23 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Thu, 28 Oct 2021 09:06:06 +1300 Subject: [PATCH 061/532] =?UTF-8?q?=F0=9F=A9=B9=20Retain=20LCD=20pins=20wi?= =?UTF-8?q?th=20motor=20expansion=20(#23024)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h index dc82a2857f..a072242adc 100644 --- a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h +++ b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h @@ -281,7 +281,7 @@ #define BEEPER_PIN EXP1_05_PIN #endif -#elif HAS_WIRED_LCD && !BTT_MOTOR_EXPANSION +#elif HAS_WIRED_LCD #if ENABLED(ANET_FULL_GRAPHICS_LCD_ALT_WIRING) #error "CAUTION! ANET_FULL_GRAPHICS_LCD_ALT_WIRING requires wiring modifications. See 'pins_BTT_SKR_V1_4.h' for details. Comment out this line to continue." From c0337da6334923ea7b65bcd4f9c1ea08c8b33cf2 Mon Sep 17 00:00:00 2001 From: Zlopi Date: Wed, 27 Oct 2021 23:10:46 +0300 Subject: [PATCH 062/532] =?UTF-8?q?=F0=9F=9A=B8=20Scroll=20long=20filename?= =?UTF-8?q?=20on=20MKS=20TFT=20(#23031)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/tft/ui_common.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Marlin/src/lcd/tft/ui_common.cpp b/Marlin/src/lcd/tft/ui_common.cpp index e152ceab50..8c503d2c9e 100644 --- a/Marlin/src/lcd/tft/ui_common.cpp +++ b/Marlin/src/lcd/tft/ui_common.cpp @@ -167,8 +167,7 @@ void MenuEditItemBase::draw(const bool sel, const uint8_t row, PGM_P const pstr, void MenuItem_static::draw(const uint8_t row, PGM_P const pstr, const uint8_t style/*=SS_DEFAULT*/, const char * const vstr/*=nullptr*/) { menu_item(row); tft_string.set(pstr, itemIndex, itemString); - if (vstr) - tft_string.add(vstr); + if (vstr) tft_string.add(vstr); tft.add_text(tft_string.center(TFT_WIDTH), MENU_TEXT_Y_OFFSET, COLOR_YELLOW, tft_string); } @@ -176,9 +175,9 @@ void MenuItem_static::draw(const uint8_t row, PGM_P const pstr, const uint8_t st void MenuItem_sdbase::draw(const bool sel, const uint8_t row, PGM_P const, CardReader &theCard, const bool isDir) { menu_item(row, sel); - if (isDir) - tft.add_image(MENU_ITEM_ICON_X, MENU_ITEM_ICON_Y, imgDirectory, COLOR_MENU_TEXT, sel ? COLOR_SELECTION_BG : COLOR_BACKGROUND); - tft.add_text(MENU_ITEM_ICON_SPACE, MENU_TEXT_Y_OFFSET, COLOR_MENU_TEXT, theCard.longest_filename()); + if (isDir) tft.add_image(MENU_ITEM_ICON_X, MENU_ITEM_ICON_Y, imgDirectory, COLOR_MENU_TEXT, sel ? COLOR_SELECTION_BG : COLOR_BACKGROUND); + constexpr uint8_t maxlen = (MENU_ITEM_HEIGHT) - (MENU_TEXT_Y_OFFSET) + 1; + tft.add_text(MENU_ITEM_ICON_SPACE, MENU_TEXT_Y_OFFSET, COLOR_MENU_TEXT, ui.scrolled_filename(theCard, maxlen, row, sel)); } #endif From fbc125b06c0858d1dbdd29908ad862ed25918b3b Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 28 Oct 2021 01:00:14 +0000 Subject: [PATCH 063/532] [cron] Bump distribution date (2021-10-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 8bfe27d29e..e61ec1b4e7 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 "2021-10-27" +//#define STRING_DISTRIBUTION_DATE "2021-10-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 904e519c20..a1ad05bd3a 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 "2021-10-27" + #define STRING_DISTRIBUTION_DATE "2021-10-28" #endif /** From aa2c6387e95bdab955499627e3890561842f0a6a Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 26 Oct 2021 21:54:43 -0500 Subject: [PATCH 064/532] =?UTF-8?q?=F0=9F=8E=A8=20Apply=20HAS=5FMULTI=5FHO?= =?UTF-8?q?TEND=20conditional?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lcd/e3v2/marlinui/ui_status_480x272.cpp | 15 +++---- .../src/lcd/extui/dgus/DGUSScreenHandler.cpp | 8 ++-- .../lcd/extui/dgus/fysetc/DGUSDisplayDef.cpp | 12 ++--- .../extui/dgus/fysetc/DGUSScreenHandler.cpp | 4 +- .../lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp | 44 ++++++++----------- .../extui/dgus/hiprecy/DGUSScreenHandler.cpp | 6 +-- .../src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp | 10 ++--- .../lcd/extui/dgus/origin/DGUSDisplayDef.cpp | 10 ++--- .../extui/dgus/origin/DGUSScreenHandler.cpp | 6 +-- .../lcd/extui/dgus_reloaded/DGUSRxHandler.cpp | 12 ++--- .../lcd/extui/dgus_reloaded/DGUSTxHandler.cpp | 8 ++-- .../extui/dgus_reloaded/config/DGUS_Addr.h | 4 +- .../dgus_reloaded/definition/DGUS_VPList.cpp | 4 +- Marlin/src/lcd/menu/menu_temperature.cpp | 7 +-- Marlin/src/lcd/tft/ui_common.h | 4 +- Marlin/src/pins/esp32/pins_E4D.h | 2 +- Marlin/src/pins/esp32/pins_FYSETC_E4.h | 2 +- Marlin/src/pins/esp32/pins_MRR_ESPA.h | 2 +- Marlin/src/pins/esp32/pins_MRR_ESPE.h | 2 +- Marlin/src/pins/ramps/pins_K8600.h | 2 +- Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h | 2 +- Marlin/src/pins/ramps/pins_RAMPS_ENDER_4.h | 2 +- .../src/pins/stm32f1/pins_CCROBOT_MEEB_3DP.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V4.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V452.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V453.h | 2 +- Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h | 2 +- .../src/pins/stm32f1/pins_JGAURORA_A5S_A1.h | 2 +- Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h | 2 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3.h | 2 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3D.h | 2 +- .../pins/stm32f1/pins_MKS_ROBIN_E3D_V1_1.h | 2 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h | 2 +- .../src/pins/stm32f1/pins_MKS_ROBIN_E3_V1_1.h | 2 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_LITE.h | 2 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h | 2 +- Marlin/src/pins/stm32f4/pins_ANET_ET4.h | 2 +- .../src/pins/stm32f4/pins_BTT_BTT002_V1_0.h | 2 +- Marlin/src/pins/stm32f4/pins_LERDGE_X.h | 2 +- Marlin/src/pins/stm32f7/pins_REMRAM_V1.h | 2 +- 41 files changed, 100 insertions(+), 106 deletions(-) diff --git a/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp b/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp index 703db2ee45..306e9044f7 100644 --- a/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp +++ b/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp @@ -132,20 +132,19 @@ FORCE_INLINE void _draw_fan_status(const uint16_t x, const uint16_t y) { } } -#if HOTENDS > 2 - #define HOTEND_STATS 3 -#elif HOTENDS > 1 - #define HOTEND_STATS 2 -#elif HAS_HOTEND - #define HOTEND_STATS 1 -#endif - /** * Draw a single heater icon with current and target temperature, at the given XY */ FORCE_INLINE void _draw_heater_status(const heater_id_t heater, const uint16_t x, const uint16_t y) { #if HAS_HOTEND + #if HOTENDS > 2 + #define HOTEND_STATS 3 + #elif HOTENDS > 1 + #define HOTEND_STATS 2 + #elif HAS_HOTEND + #define HOTEND_STATS 1 + #endif static celsius_t old_temp[HOTEND_STATS] = ARRAY_N_1(HOTEND_STATS, 500), old_target[HOTEND_STATS] = ARRAY_N_1(HOTEND_STATS, 500); static bool old_on[HOTEND_STATS] = ARRAY_N_1(HOTEND_STATS, false); diff --git a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp index c9e7268f04..be08b074ff 100644 --- a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp @@ -185,7 +185,7 @@ void DGUSScreenHandler::DGUSLCD_SendStringToDisplayPGM(DGUS_VP_Variable &var) { case VP_E0_PID_I: valuesend = unscalePID_i(value); break; case VP_E0_PID_D: valuesend = unscalePID_d(value); break; #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND case VP_E1_PID_P: valuesend = value; break; case VP_E1_PID_I: valuesend = unscalePID_i(value); break; case VP_E1_PID_D: valuesend = unscalePID_d(value); break; @@ -400,7 +400,7 @@ void DGUSScreenHandler::HandleTemperatureChanged(DGUS_VP_Variable &var, void *va acceptedvalue = thermalManager.degTargetHotend(0); break; #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND case VP_T_E1_Set: NOMORE(newvalue, HEATER_1_MAXTEMP); thermalManager.setTargetHotend(newvalue, 1); @@ -551,7 +551,7 @@ void DGUSScreenHandler::HandleStepPerMMExtruderChanged(DGUS_VP_Variable &var, vo sprintf_P(buf, PSTR("M303 E%d C5 S210 U1"), ExtUI::extruder_t::E0); break; #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND case VP_PID_AUTOTUNE_E1: sprintf_P(buf, PSTR("M303 E%d C5 S210 U1"), ExtUI::extruder_t::E1); break; @@ -598,7 +598,7 @@ void DGUSScreenHandler::HandleHeaterControl(DGUS_VP_Variable &var, void *val_ptr switch (var.VP) { #if HAS_HOTEND case VP_E0_CONTROL: - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND case VP_E1_CONTROL: #if HOTENDS >= 3 case VP_E2_CONTROL: diff --git a/Marlin/src/lcd/extui/dgus/fysetc/DGUSDisplayDef.cpp b/Marlin/src/lcd/extui/dgus/fysetc/DGUSDisplayDef.cpp index d73a7ea552..a4c0997bf8 100644 --- a/Marlin/src/lcd/extui/dgus/fysetc/DGUSDisplayDef.cpp +++ b/Marlin/src/lcd/extui/dgus/fysetc/DGUSDisplayDef.cpp @@ -51,7 +51,7 @@ const uint16_t VPList_Main[] PROGMEM = { #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, VP_E0_STATUS, #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #if HAS_HEATED_BED @@ -73,7 +73,7 @@ const uint16_t VPList_Temp[] PROGMEM = { #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #if HAS_HEATED_BED @@ -87,7 +87,7 @@ const uint16_t VPList_Status[] PROGMEM = { #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #if HAS_HEATED_BED @@ -120,7 +120,7 @@ const uint16_t VPList_Preheat[] PROGMEM = { #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #if HAS_HEATED_BED @@ -187,7 +187,7 @@ const uint16_t VPList_SD_PrintManipulation[] PROGMEM = { #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #if HAS_HEATED_BED @@ -379,7 +379,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { VPHELPER(VP_E0_FILAMENT_LOAD_UNLOAD, nullptr, ScreenHandler.HandleFilamentOption, ScreenHandler.HandleFilamentLoadUnload), #endif #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VPHELPER(VP_T_E1_Is, &thermalManager.temp_hotend[1].celsius, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<0>), VPHELPER(VP_T_E1_Set, &thermalManager.temp_hotend[1].target, ScreenHandler.HandleTemperatureChanged, ScreenHandler.DGUSLCD_SendWordValueToDisplay), VPHELPER(VP_Flowrate_E1, &planner.flow_percentage[ExtUI::extruder_t::E1], ScreenHandler.HandleFlowRateChanged, ScreenHandler.DGUSLCD_SendWordValueToDisplay), // ERROR: Flow is per-extruder, not per-hotend diff --git a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp index 2f08136cbb..750acece1c 100644 --- a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp @@ -256,7 +256,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) { case VP_E0_PID_I: newvalue = scalePID_i(value); break; case VP_E0_PID_D: newvalue = scalePID_d(value); break; #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND case VP_E1_PID_P: newvalue = value; break; case VP_E1_PID_I: newvalue = scalePID_i(value); break; case VP_E1_PID_D: newvalue = scalePID_d(value); break; @@ -334,7 +334,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) { #if HAS_HOTEND thermalManager.setTargetHotend(e_temp, ExtUI::extruder_t::E0); #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND thermalManager.setTargetHotend(e_temp, ExtUI::extruder_t::E1); #endif GotoScreen(DGUSLCD_SCREEN_UTILITY); diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp index bdcff47ae8..f3f361f84e 100644 --- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp +++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp @@ -50,7 +50,7 @@ const uint16_t VPList_Main[] PROGMEM = { // VP_M117, for completeness, but it cannot be auto-uploaded. #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, VP_E0_STATUS, - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #endif @@ -72,7 +72,7 @@ const uint16_t VPList_Main[] PROGMEM = { const uint16_t VPList_Temp[] PROGMEM = { #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #endif @@ -86,7 +86,7 @@ const uint16_t VPList_Status[] PROGMEM = { // VP_M117, for completeness, but it cannot be auto-uploaded #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #endif @@ -107,7 +107,7 @@ const uint16_t VPList_Status2[] PROGMEM = { // VP_M117, for completeness, but it cannot be auto-uploaded #if HAS_HOTEND VP_Flowrate_E0, - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_Flowrate_E1, #endif #endif @@ -119,7 +119,7 @@ const uint16_t VPList_Status2[] PROGMEM = { const uint16_t VPList_Preheat[] PROGMEM = { #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #endif @@ -137,7 +137,7 @@ const uint16_t VPList_ManualMove[] PROGMEM = { const uint16_t VPList_ManualExtrude[] PROGMEM = { #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #endif @@ -159,7 +159,7 @@ const uint16_t VPList_Filament_heating[] PROGMEM = { #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, VP_E0_FILAMENT_LOAD_UNLOAD, - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #endif @@ -169,7 +169,7 @@ const uint16_t VPList_Filament_heating[] PROGMEM = { const uint16_t VPList_Filament_load_unload[] PROGMEM = { #if HAS_HOTEND VP_E0_FILAMENT_LOAD_UNLOAD, - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_E1_FILAMENT_LOAD_UNLOAD, #endif #endif @@ -185,7 +185,7 @@ const uint16_t VPList_SD_PrintManipulation[] PROGMEM = { VP_PrintProgress_Percentage, VP_PrintTime, #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #endif @@ -205,7 +205,7 @@ const uint16_t VPList_SD_PrintManipulation[] PROGMEM = { const uint16_t VPList_SDPrintTune[] PROGMEM = { #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #endif @@ -222,23 +222,17 @@ const uint16_t VPList_SDPrintTune[] PROGMEM = { }; const uint16_t VPList_StepPerMM[] PROGMEM = { - VP_X_STEP_PER_MM, - VP_Y_STEP_PER_MM, - VP_Z_STEP_PER_MM, - #if HAS_HOTEND - VP_E0_STEP_PER_MM, - #if HOTENDS >= 2 - VP_E1_STEP_PER_MM, - #endif - #endif - 0x0000 + VP_X_STEP_PER_MM + , VP_Y_STEP_PER_MM + , VP_Z_STEP_PER_MM + OPTARG(HAS_HOTEND, VP_E0_STEP_PER_MM) + OPTARG(HAS_MULTI_HOTEND, VP_E1_STEP_PER_MM) + , 0x0000 }; const uint16_t VPList_PIDE0[] PROGMEM = { #if ENABLED(PIDTEMP) - VP_E0_PID_P, - VP_E0_PID_I, - VP_E0_PID_D, + VP_E0_PID_P, VP_E0_PID_I, VP_E0_PID_D, #endif 0x0000 }; @@ -382,7 +376,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { VPHELPER(VP_PID_AUTOTUNE_E0, nullptr, ScreenHandler.HandlePIDAutotune, nullptr), #endif #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VPHELPER(VP_T_E1_Is, &thermalManager.temp_hotend[1].celsius, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<0>), VPHELPER(VP_T_E1_Set, &thermalManager.temp_hotend[1].target, ScreenHandler.HandleTemperatureChanged, ScreenHandler.DGUSLCD_SendWordValueToDisplay), VPHELPER(VP_Flowrate_E1, nullptr, ScreenHandler.HandleFlowRateChanged, ScreenHandler.DGUSLCD_SendWordValueToDisplay), @@ -435,7 +429,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { VPHELPER(VP_Z_STEP_PER_MM, &planner.settings.axis_steps_per_mm[Z_AXIS], ScreenHandler.HandleStepPerMMChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), #if HAS_HOTEND VPHELPER(VP_E0_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(0)], ScreenHandler.HandleStepPerMMExtruderChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VPHELPER(VP_E1_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(1)], ScreenHandler.HandleStepPerMMExtruderChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), #endif #endif diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp index f72a9f439d..79a3cb9103 100644 --- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp @@ -256,7 +256,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) { case VP_E0_PID_I: newvalue = scalePID_i(value); break; case VP_E0_PID_D: newvalue = scalePID_d(value); break; #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND case VP_E1_PID_P: newvalue = value; break; case VP_E1_PID_I: newvalue = scalePID_i(value); break; case VP_E1_PID_D: newvalue = scalePID_d(value); break; @@ -333,7 +333,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) { if (filament_data.action == 0) { // Go back to utility screen #if HAS_HOTEND thermalManager.setTargetHotend(e_temp, ExtUI::extruder_t::E0); - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND thermalManager.setTargetHotend(e_temp, ExtUI::extruder_t::E1); #endif #endif @@ -348,7 +348,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) { thermalManager.setTargetHotend(e_temp, filament_data.extruder); break; #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND case VP_E1_FILAMENT_LOAD_UNLOAD: filament_data.extruder = ExtUI::extruder_t::E1; thermalManager.setTargetHotend(e_temp, filament_data.extruder); diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp b/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp index 9ecfb57397..ff013967c0 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp @@ -122,7 +122,7 @@ const uint16_t VPList_Main[] PROGMEM = { // VP_M117, for completeness, but it cannot be auto-uploaded. #if HAS_HOTEND MKSLIST_E_ITEM(0) VP_E0_STATUS, - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND MKSLIST_E_ITEM(1) VP_E1_STATUS, #endif #endif @@ -567,7 +567,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { #endif #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VPHELPER(VP_T_E1_Is, &thermalManager.temp_hotend[1].celsius, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<0>), VPHELPER(VP_T_E1_Set, &thermalManager.temp_hotend[1].target, ScreenHandler.HandleTemperatureChanged, ScreenHandler.DGUSLCD_SendWordValueToDisplay), VPHELPER(VP_Flowrate_E1, &planner.flow_percentage[ExtUI::extruder_t::E1], ScreenHandler.HandleFlowRateChanged, ScreenHandler.DGUSLCD_SendWordValueToDisplay), @@ -656,7 +656,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { #if HAS_HOTEND VPHELPER(VP_E0_MAX_SPEED, &planner.settings.max_feedrate_mm_s[E_AXIS_N(0)], ScreenHandler.HandleExtruderMaxSpeedChange_MKS, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<0>), - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VPHELPER(VP_E1_MAX_SPEED, &planner.settings.max_feedrate_mm_s[E_AXIS_N(1)], ScreenHandler.HandleExtruderMaxSpeedChange_MKS, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<0>), #endif #endif @@ -667,7 +667,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { #if HAS_HOTEND VPHELPER(VP_E0_ACC_MAX_SPEED, (uint16_t *)&planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(0)], ScreenHandler.HandleExtruderAccChange_MKS, ScreenHandler.DGUSLCD_SendWordValueToDisplay), - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VPHELPER(VP_E1_ACC_MAX_SPEED, (uint16_t *)&planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(1)], ScreenHandler.HandleExtruderAccChange_MKS, ScreenHandler.DGUSLCD_SendWordValueToDisplay), #endif #endif @@ -744,7 +744,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { #if HAS_HOTEND VPHELPER(VP_E0_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(0)], ScreenHandler.HandleStepPerMMExtruderChanged_MKS, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<0>), - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VPHELPER(VP_E1_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(1)], ScreenHandler.HandleStepPerMMExtruderChanged_MKS, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<0>), #endif #endif diff --git a/Marlin/src/lcd/extui/dgus/origin/DGUSDisplayDef.cpp b/Marlin/src/lcd/extui/dgus/origin/DGUSDisplayDef.cpp index 2f5e2787d6..0115d3b8c1 100644 --- a/Marlin/src/lcd/extui/dgus/origin/DGUSDisplayDef.cpp +++ b/Marlin/src/lcd/extui/dgus/origin/DGUSDisplayDef.cpp @@ -57,7 +57,7 @@ const uint16_t VPList_Main[] PROGMEM = { const uint16_t VPList_Temp[] PROGMEM = { #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #endif @@ -71,7 +71,7 @@ const uint16_t VPList_Status[] PROGMEM = { // VP_M117, for completeness, but it cannot be auto-uploaded #if HAS_HOTEND VP_T_E0_Is, VP_T_E0_Set, - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_T_E1_Is, VP_T_E1_Set, #endif #endif @@ -92,7 +92,7 @@ const uint16_t VPList_Status2[] PROGMEM = { // VP_M117, for completeness, but it cannot be auto-uploaded #if HAS_HOTEND VP_Flowrate_E0, - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VP_Flowrate_E1, #endif #endif @@ -182,7 +182,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { VPHELPER(VP_E0_FILAMENT_LOAD_UNLOAD, nullptr, ScreenHandler.HandleFilamentOption, ScreenHandler.HandleFilamentLoadUnload), #endif #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VPHELPER(VP_T_E1_Is, &thermalManager.temp_hotend[1].celsius, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<0>), VPHELPER(VP_T_E1_Set, &thermalManager.temp_hotend[1].target, ScreenHandler.HandleTemperatureChanged, ScreenHandler.DGUSLCD_SendWordValueToDisplay), VPHELPER(VP_Flowrate_E1, nullptr, ScreenHandler.HandleFlowRateChanged, ScreenHandler.DGUSLCD_SendWordValueToDisplay), @@ -237,7 +237,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { VPHELPER(VP_Z_STEP_PER_MM, &planner.settings.axis_steps_per_mm[Z_AXIS], ScreenHandler.HandleStepPerMMChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), #if HAS_HOTEND VPHELPER(VP_E0_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(0)], ScreenHandler.HandleStepPerMMExtruderChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND VPHELPER(VP_E1_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(1)], ScreenHandler.HandleStepPerMMExtruderChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), #endif #endif diff --git a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp index 82404ead94..b77c92b7eb 100644 --- a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp @@ -256,7 +256,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) { case VP_E0_PID_I: newvalue = scalePID_i(value); break; case VP_E0_PID_D: newvalue = scalePID_d(value); break; #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND case VP_E1_PID_P: newvalue = value; break; case VP_E1_PID_I: newvalue = scalePID_i(value); break; case VP_E1_PID_D: newvalue = scalePID_d(value); break; @@ -333,7 +333,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) { if (filament_data.action == 0) { // Go back to utility screen #if HAS_HOTEND thermalManager.setTargetHotend(e_temp, ExtUI::extruder_t::E0); - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND thermalManager.setTargetHotend(e_temp, ExtUI::extruder_t::E1); #endif #endif @@ -348,7 +348,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) { thermalManager.setTargetHotend(e_temp, filament_data.extruder); break; #endif - #if HOTENDS >= 2 + #if HAS_MULTI_HOTEND case VP_E1_FILAMENT_LOAD_UNLOAD: filament_data.extruder = ExtUI::extruder_t::E1; thermalManager.setTargetHotend(e_temp, filament_data.extruder); diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp index f0844dc785..cf95bb1d76 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp @@ -327,7 +327,7 @@ void DGUSRxHandler::TempTarget(DGUS_VP &vp, void *data_ptr) { case DGUS_Addr::TEMP_SetTarget_H0: ExtUI::setTargetTemp_celsius(temp, ExtUI::H0); break; - #if HOTENDS > 1 + #if HAS_MULTI_HOTEND case DGUS_Addr::TEMP_SetTarget_H1: ExtUI::setTargetTemp_celsius(temp, ExtUI::H1); break; @@ -347,7 +347,7 @@ void DGUSRxHandler::TempCool(DGUS_VP &vp, void *data_ptr) { case DGUS_Data::Heater::ALL: ExtUI::setTargetTemp_celsius(0, ExtUI::BED); ExtUI::setTargetTemp_celsius(0, ExtUI::H0); - #if HOTENDS > 1 + #if HAS_MULTI_HOTEND ExtUI::setTargetTemp_celsius(0, ExtUI::H1); #endif break; @@ -357,7 +357,7 @@ void DGUSRxHandler::TempCool(DGUS_VP &vp, void *data_ptr) { case DGUS_Data::Heater::H0: ExtUI::setTargetTemp_celsius(0, ExtUI::H0); break; - #if HOTENDS > 1 + #if HAS_MULTI_HOTEND case DGUS_Data::Heater::H1: ExtUI::setTargetTemp_celsius(0, ExtUI::H1); break; @@ -827,7 +827,7 @@ void DGUSRxHandler::PIDSelect(DGUS_VP &vp, void *data_ptr) { dgus_screen_handler.pid_heater = heater; break; case DGUS_Data::Heater::H0: - #if HOTENDS > 1 + #if HAS_MULTI_HOTEND case DGUS_Data::Heater::H1: #endif dgus_screen_handler.pid_temp = DGUS_PLA_TEMP_HOTEND; @@ -858,7 +858,7 @@ void DGUSRxHandler::PIDSetTemp(DGUS_VP &vp, void *data_ptr) { case DGUS_Data::Heater::H0: temp = constrain(temp, HEATER_0_MINTEMP, (HEATER_0_MAXTEMP - HOTEND_OVERSHOOT)); break; - #if HOTENDS > 1 + #if HAS_MULTI_HOTEND case DGUS_Data::Heater::H1: temp = constrain(temp, HEATER_1_MINTEMP, (HEATER_1_MAXTEMP - HOTEND_OVERSHOOT)); break; @@ -900,7 +900,7 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) { dgus_screen_handler.SetStatusMessage(F("PID disabled")); return; #endif - #if HOTENDS > 1 + #if HAS_MULTI_HOTEND case DGUS_Data::Heater::H1: #if ENABLED(PIDTEMP) heater = H_E1; diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp index 3fc48d2ebb..8d57038765 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp @@ -275,7 +275,7 @@ void DGUSTxHandler::TempMax(DGUS_VP &vp) { case DGUS_Addr::TEMP_Max_H0: temp = HEATER_0_MAXTEMP - HOTEND_OVERSHOOT; break; - #if HOTENDS > 1 + #if HAS_MULTI_HOTEND case DGUS_Addr::TEMP_Max_H1: temp = HEATER_1_MAXTEMP - HOTEND_OVERSHOOT; break; @@ -428,7 +428,7 @@ void DGUSTxHandler::PIDKp(DGUS_VP &vp) { case DGUS_Data::Heater::H0: value = ExtUI::getPIDValues_Kp(ExtUI::E0); break; - #if HOTENDS > 1 + #if HAS_MULTI_HOTEND case DGUS_Data::Heater::H1: value = ExtUI::getPIDValues_Kp(ExtUI::E1); break; @@ -454,7 +454,7 @@ void DGUSTxHandler::PIDKi(DGUS_VP &vp) { case DGUS_Data::Heater::H0: value = ExtUI::getPIDValues_Ki(ExtUI::E0); break; - #if HOTENDS > 1 + #if HAS_MULTI_HOTEND case DGUS_Data::Heater::H1: value = ExtUI::getPIDValues_Ki(ExtUI::E1); break; @@ -480,7 +480,7 @@ void DGUSTxHandler::PIDKd(DGUS_VP &vp) { case DGUS_Data::Heater::H0: value = ExtUI::getPIDValues_Kd(ExtUI::E0); break; - #if HOTENDS > 1 + #if HAS_MULTI_HOTEND case DGUS_Data::Heater::H1: value = ExtUI::getPIDValues_Kd(ExtUI::E1); 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 4207119c87..39e97156d0 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h @@ -64,7 +64,7 @@ enum class DGUS_Addr : uint16_t { 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 HOTENDS > 1 + #if HAS_MULTI_HOTEND TEMP_SetTarget_H1 = 0x2013, // Type: Integer (16 bits signed) #endif TEMP_Cool = 0x2014, // Data: DGUS_Data::Heater @@ -123,7 +123,7 @@ enum class DGUS_Addr : uint16_t { 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 HOTENDS > 1 + #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) 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 27b6d9036c..e77aa45011 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp @@ -102,7 +102,7 @@ const struct DGUS_VP vp_list[] PROGMEM = { VP_HELPER_RX(DGUS_Addr::TEMP_Preset, &DGUSRxHandler::TempPreset), VP_HELPER_RX(DGUS_Addr::TEMP_SetTarget_Bed, &DGUSRxHandler::TempTarget), VP_HELPER_RX(DGUS_Addr::TEMP_SetTarget_H0, &DGUSRxHandler::TempTarget), - #if HOTENDS > 1 + #if HAS_MULTI_HOTEND VP_HELPER_RX(DGUS_Addr::TEMP_SetTarget_H1, &DGUSRxHandler::TempTarget), #endif VP_HELPER_RX(DGUS_Addr::TEMP_Cool, &DGUSRxHandler::TempCool), @@ -217,7 +217,7 @@ const struct DGUS_VP vp_list[] PROGMEM = { &thermalManager.temp_hotend[ExtUI::heater_t::H0].target, &DGUSTxHandler::ExtraToInteger), VP_HELPER_TX(DGUS_Addr::TEMP_Max_H0, &DGUSTxHandler::TempMax), - #if HOTENDS > 1 + #if HAS_MULTI_HOTEND VP_HELPER_TX_AUTO(DGUS_Addr::TEMP_Current_H1, &thermalManager.temp_hotend[ExtUI::heater_t::H1].celsius, &DGUSTxHandler::ExtraToInteger), diff --git a/Marlin/src/lcd/menu/menu_temperature.cpp b/Marlin/src/lcd/menu/menu_temperature.cpp index 65cef5b76d..3abb2e9c20 100644 --- a/Marlin/src/lcd/menu/menu_temperature.cpp +++ b/Marlin/src/lcd/menu/menu_temperature.cpp @@ -122,7 +122,8 @@ void Temperature::lcd_preheat(const uint8_t e, const int8_t indh, const int8_t i HOTEND_LOOP() PREHEAT_ITEMS(editable.int8, e); ACTION_ITEM_S(ui.get_preheat_label(m), MSG_PREHEAT_M_ALL, []() { - HOTEND_LOOP() thermalManager.setTargetHotend(ui.material_preset[editable.int8].hotend_temp, e); + const celsius_t t = ui.material_preset[editable.int8].hotend_temp; + HOTEND_LOOP() thermalManager.setTargetHotend(t, e); TERN(HAS_HEATED_BED, _preheat_bed(editable.int8), ui.return_to_status()); }); @@ -268,7 +269,7 @@ void menu_temperature() { // LOOP_L_N(m, PREHEAT_COUNT) { editable.int8 = m; - #if HOTENDS > 1 || HAS_HEATED_BED + #if HAS_MULTI_HOTEND || HAS_HEATED_BED SUBMENU_S(ui.get_preheat_label(m), MSG_PREHEAT_M, menu_preheat_m); #elif HAS_HOTEND ACTION_ITEM_S(ui.get_preheat_label(m), MSG_PREHEAT_M, do_preheat_end_m); @@ -295,7 +296,7 @@ void menu_temperature() { LOOP_L_N(m, PREHEAT_COUNT) { editable.int8 = m; - #if HOTENDS > 1 || HAS_HEATED_BED + #if HAS_MULTI_HOTEND || HAS_HEATED_BED SUBMENU_S(ui.get_preheat_label(m), MSG_PREHEAT_M, menu_preheat_m); #else ACTION_ITEM_S(ui.get_preheat_label(m), MSG_PREHEAT_M, do_preheat_end_m); diff --git a/Marlin/src/lcd/tft/ui_common.h b/Marlin/src/lcd/tft/ui_common.h index d3ffd4bc31..7329c31a52 100644 --- a/Marlin/src/lcd/tft/ui_common.h +++ b/Marlin/src/lcd/tft/ui_common.h @@ -57,7 +57,7 @@ void menu_item(const uint8_t row, bool sel = false); #define ABSOLUTE_ZERO -273.15 -#if HAS_TEMP_CHAMBER && HOTENDS > 1 +#if HAS_TEMP_CHAMBER && HAS_MULTI_HOTEND #define ITEM_E0 0 #define ITEM_E1 1 #define ITEM_BED 2 @@ -74,7 +74,7 @@ void menu_item(const uint8_t row, bool sel = false); #define ITEM_COOLER 0 #define ITEM_FAN 1 #define ITEMS_COUNT 2 -#elif HOTENDS > 1 +#elif HAS_MULTI_HOTEND #define ITEM_E0 0 #define ITEM_E1 1 #define ITEM_BED 2 diff --git a/Marlin/src/pins/esp32/pins_E4D.h b/Marlin/src/pins/esp32/pins_E4D.h index 54621f36c1..02a5fe4e33 100644 --- a/Marlin/src/pins/esp32/pins_E4D.h +++ b/Marlin/src/pins/esp32/pins_E4D.h @@ -32,7 +32,7 @@ #if EXTRUDERS > 1 || E_STEPPERS > 1 #error "E4d@box only supports one E Stepper. Comment out this line to continue." -#elif HOTENDS > 1 +#elif HAS_MULTI_HOTEND #error "E4d@box only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/esp32/pins_FYSETC_E4.h b/Marlin/src/pins/esp32/pins_FYSETC_E4.h index 2b2fe40c4a..4e71a66a22 100644 --- a/Marlin/src/pins/esp32/pins_FYSETC_E4.h +++ b/Marlin/src/pins/esp32/pins_FYSETC_E4.h @@ -32,7 +32,7 @@ #if EXTRUDERS > 1 || E_STEPPERS > 1 #error "FYSETC E4 only supports one E Stepper. Comment out this line to continue." -#elif HOTENDS > 1 +#elif HAS_MULTI_HOTEND #error "FYSETC E4 only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/esp32/pins_MRR_ESPA.h b/Marlin/src/pins/esp32/pins_MRR_ESPA.h index ab4f401f26..a5f70e8159 100644 --- a/Marlin/src/pins/esp32/pins_MRR_ESPA.h +++ b/Marlin/src/pins/esp32/pins_MRR_ESPA.h @@ -32,7 +32,7 @@ #if EXTRUDERS > 1 || E_STEPPERS > 1 #error "MRR ESPA only supports one E Stepper. Comment out this line to continue." -#elif HOTENDS > 1 +#elif HAS_MULTI_HOTEND #error "MRR ESPA only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/esp32/pins_MRR_ESPE.h b/Marlin/src/pins/esp32/pins_MRR_ESPE.h index 1f829b7755..ae4f0c6e36 100644 --- a/Marlin/src/pins/esp32/pins_MRR_ESPE.h +++ b/Marlin/src/pins/esp32/pins_MRR_ESPE.h @@ -33,7 +33,7 @@ #if EXTRUDERS > 2 || E_STEPPERS > 2 #error "MRR ESPE only supports two E Steppers. Comment out this line to continue." -#elif HOTENDS > 1 +#elif HAS_MULTI_HOTEND #error "MRR ESPE only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/ramps/pins_K8600.h b/Marlin/src/pins/ramps/pins_K8600.h index f37516b710..0155129927 100644 --- a/Marlin/src/pins/ramps/pins_K8600.h +++ b/Marlin/src/pins/ramps/pins_K8600.h @@ -25,7 +25,7 @@ * VERTEX NANO Arduino Mega with RAMPS EFB v1.4 pin assignments. */ -#if HOTENDS > 1 +#if HAS_MULTI_HOTEND #error "Only 1 hotend is supported for Vertex Nano." #endif diff --git a/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h b/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h index 3b2639b431..75ee01946a 100644 --- a/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h +++ b/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h @@ -28,7 +28,7 @@ #define REQUIRE_MEGA2560 #include "env_validate.h" -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "Longer3D LGT KIT V1.0 board only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/ramps/pins_RAMPS_ENDER_4.h b/Marlin/src/pins/ramps/pins_RAMPS_ENDER_4.h index ebd0bdc0c6..3583958906 100644 --- a/Marlin/src/pins/ramps/pins_RAMPS_ENDER_4.h +++ b/Marlin/src/pins/ramps/pins_RAMPS_ENDER_4.h @@ -21,7 +21,7 @@ */ #pragma once -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "Ender-4 only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f1/pins_CCROBOT_MEEB_3DP.h b/Marlin/src/pins/stm32f1/pins_CCROBOT_MEEB_3DP.h index f8e3e76ada..b0b201f1d5 100644 --- a/Marlin/src/pins/stm32f1/pins_CCROBOT_MEEB_3DP.h +++ b/Marlin/src/pins/stm32f1/pins_CCROBOT_MEEB_3DP.h @@ -23,7 +23,7 @@ #include "env_validate.h" -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "CCROBOT-ONLINE MEEB_3DP only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h index ea58b5b3a9..bf2a55fc7b 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h @@ -27,7 +27,7 @@ #include "env_validate.h" -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "Creality V4 only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h index 52ebdecc35..ae54805a94 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h @@ -27,7 +27,7 @@ #include "env_validate.h" -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "CREALITY supports up to 1 hotends / E-steppers. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h index 64e07a0bc8..a2add81c8b 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h @@ -25,7 +25,7 @@ * Creality v4.5.2 (STM32F103RET6) board pin assignments */ -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "Creality v4.5.2 only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h index ca437312c8..7b8c3280d2 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h @@ -25,7 +25,7 @@ * Creality v4.5.3 (STM32F103RET6) board pin assignments */ -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "Creality v4.5.3 only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h b/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h index 3b7a4e4402..e19d330092 100644 --- a/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h +++ b/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h @@ -31,7 +31,7 @@ #if NOT_TARGET(__STM32F1__, STM32F1xx) #error "Oops! Select an STM32F1 board in 'Tools > Board.'" -#elif HOTENDS > 1 || E_STEPPERS > 1 +#elif HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "FLSUN HiSpeedV1 only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f1/pins_JGAURORA_A5S_A1.h b/Marlin/src/pins/stm32f1/pins_JGAURORA_A5S_A1.h index 98465a8607..beae0a3bf0 100644 --- a/Marlin/src/pins/stm32f1/pins_JGAURORA_A5S_A1.h +++ b/Marlin/src/pins/stm32f1/pins_JGAURORA_A5S_A1.h @@ -32,7 +32,7 @@ #include "env_validate.h" -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "JGAurora A5S A1 only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h index 34fbdaf02f..7585a6e289 100644 --- a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h +++ b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h @@ -27,7 +27,7 @@ #if NOT_TARGET(__STM32F1__, STM32F1xx) #error "Oops! Select a STM32F1 board in 'Tools > Board.'" -#elif HOTENDS > 1 || E_STEPPERS > 1 +#elif HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "Longer3D only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3.h index 89ace3493f..6b05bb7a74 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3.h @@ -25,7 +25,7 @@ * MKS Robin E3 (STM32F103RCT6) board pin assignments */ -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "MKS Robin E3 only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3D.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3D.h index a629bce9f3..9d11af43ef 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3D.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3D.h @@ -25,7 +25,7 @@ * MKS Robin E3D (STM32F103RCT6) board pin assignments */ -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "MKS Robin E3D only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3D_V1_1.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3D_V1_1.h index 718f9dc27a..930ef9722d 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3D_V1_1.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3D_V1_1.h @@ -25,7 +25,7 @@ * MKS Robin E3D v1.1 (STM32F103RCT6) board pin assignments */ -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "MKS Robin E3D v1.1 only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h index c5080b5227..06b9721403 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h @@ -27,7 +27,7 @@ #include "env_validate.h" -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "MKS Robin E3P only supports one hotend / E-stepper. Comment out this line to continue." #elif HAS_FSMC_TFT #error "MKS Robin E3P doesn't support FSMC-based TFT displays." diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_V1_1.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_V1_1.h index 30720e0c7f..7a38507c76 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_V1_1.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_V1_1.h @@ -25,7 +25,7 @@ * MKS Robin E3 v1.1 (STM32F103RCT6) board pin assignments */ -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "MKS Robin E3 v1.1 only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_LITE.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_LITE.h index 3767748e53..94f7313996 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_LITE.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_LITE.h @@ -23,7 +23,7 @@ #include "env_validate.h" -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "MKS Robin Lite only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h index ae45d8b6d1..c981fdc00a 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h @@ -27,7 +27,7 @@ #include "env_validate.h" -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "MKS Robin mini only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f4/pins_ANET_ET4.h b/Marlin/src/pins/stm32f4/pins_ANET_ET4.h index 8343010432..eb3af65f32 100644 --- a/Marlin/src/pins/stm32f4/pins_ANET_ET4.h +++ b/Marlin/src/pins/stm32f4/pins_ANET_ET4.h @@ -23,7 +23,7 @@ #include "env_validate.h" -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "Anet ET4 only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h index d054e354f7..44485b0776 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h @@ -23,7 +23,7 @@ #include "env_validate.h" -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "BIGTREE BTT002 V1.0 only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_X.h b/Marlin/src/pins/stm32f4/pins_LERDGE_X.h index 12e47e35cc..7f35c0f5dd 100644 --- a/Marlin/src/pins/stm32f4/pins_LERDGE_X.h +++ b/Marlin/src/pins/stm32f4/pins_LERDGE_X.h @@ -24,7 +24,7 @@ #define ALLOW_STM32DUINO #include "env_validate.h" -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "LERDGE X only supports one hotend / E-stepper. Comment out this line to continue." #endif diff --git a/Marlin/src/pins/stm32f7/pins_REMRAM_V1.h b/Marlin/src/pins/stm32f7/pins_REMRAM_V1.h index 133dcd2935..dbf2593c48 100644 --- a/Marlin/src/pins/stm32f7/pins_REMRAM_V1.h +++ b/Marlin/src/pins/stm32f7/pins_REMRAM_V1.h @@ -32,7 +32,7 @@ #define SRAM_EEPROM_EMULATION // Emulate the EEPROM using Backup SRAM #endif -#if HOTENDS > 1 || E_STEPPERS > 1 +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 #error "RemRam only supports one hotend / E-stepper. Comment out this line to continue." #endif From a1c4aad1472bb418bc0c0bc52322032b68df3a1f Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Thu, 28 Oct 2021 03:26:05 -0700 Subject: [PATCH 065/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20MKS=20Robin=20E3/E?= =?UTF-8?q?3D=20Z=20Stop/Probe=20pins=20(#23034)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h index dd1008ee3a..a221ce94c5 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h @@ -54,8 +54,14 @@ // #define X_STOP_PIN PA12 #define Y_STOP_PIN PA11 -#define Z_MIN_PIN PC6 -#define Z_MAX_PIN PB1 +#define Z_STOP_PIN PC6 + +// +// Z Probe +// +#ifndef Z_MIN_PROBE_PIN + #define Z_MIN_PROBE_PIN PB1 +#endif // // Steppers From 5d04c7496cec3b8a564ac302da116e3783c4b1d3 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 28 Oct 2021 19:22:35 -0500 Subject: [PATCH 066/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20EZBoard=20V2=20boa?= =?UTF-8?q?rd=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/boards.h | 2 +- Marlin/src/pins/pins.h | 7 +++++-- ...{pins_TH3D_EZBOARD_LITE_V2.h => pins_TH3D_EZBOARD_V2.h} | 2 +- .../PeripheralPins.c | 0 .../PinNamesVar.h | 0 .../hal_conf_extra.h | 0 .../ldscript.ld | 0 .../variant.cpp | 0 .../variant.h | 0 ini/stm32f4.ini | 6 +++--- 10 files changed, 10 insertions(+), 7 deletions(-) rename Marlin/src/pins/stm32f4/{pins_TH3D_EZBOARD_LITE_V2.h => pins_TH3D_EZBOARD_V2.h} (99%) rename buildroot/share/PlatformIO/variants/{MARLIN_TH3D_EZBOARD_LITE_V2 => MARLIN_TH3D_EZBOARD_V2}/PeripheralPins.c (100%) rename buildroot/share/PlatformIO/variants/{MARLIN_TH3D_EZBOARD_LITE_V2 => MARLIN_TH3D_EZBOARD_V2}/PinNamesVar.h (100%) rename buildroot/share/PlatformIO/variants/{MARLIN_TH3D_EZBOARD_LITE_V2 => MARLIN_TH3D_EZBOARD_V2}/hal_conf_extra.h (100%) rename buildroot/share/PlatformIO/variants/{MARLIN_TH3D_EZBOARD_LITE_V2 => MARLIN_TH3D_EZBOARD_V2}/ldscript.ld (100%) rename buildroot/share/PlatformIO/variants/{MARLIN_TH3D_EZBOARD_LITE_V2 => MARLIN_TH3D_EZBOARD_V2}/variant.cpp (100%) rename buildroot/share/PlatformIO/variants/{MARLIN_TH3D_EZBOARD_LITE_V2 => MARLIN_TH3D_EZBOARD_V2}/variant.h (100%) diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 82c68f3171..6e116888bc 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -402,7 +402,7 @@ #define BOARD_ANET_ET4 4230 // ANET ET4 V1.x (STM32F407VGT6) #define BOARD_ANET_ET4P 4231 // ANET ET4P V1.x (STM32F407VGT6) #define BOARD_FYSETC_CHEETAH_V20 4232 // FYSETC Cheetah V2.0 -#define BOARD_TH3D_EZBOARD_LITE_V2 4233 // TH3D EZBoard Lite v2.0 +#define BOARD_TH3D_EZBOARD_V2 4233 // TH3D EZBoard v2.0 #define BOARD_INDEX_REV03 4234 // Index PnP Controller REV03 (STM32F407VET6/VGT6) #define BOARD_MKS_ROBIN_NANO_V1_3_F4 4235 // MKS Robin Nano V1.3 and MKS Robin Nano-S V1.3 (STM32F407VET6) #define BOARD_MKS_EAGLE 4236 // MKS Eagle (STM32F407VET6) diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 3b83e14d62..1a05f55fdc 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -659,8 +659,8 @@ #include "stm32f4/pins_FYSETC_CHEETAH_V20.h" // STM32F4 env:FYSETC_CHEETAH_V20 #elif MB(MKS_MONSTER8) #include "stm32f4/pins_MKS_MONSTER8.h" // STM32F4 env:mks_monster8 env:mks_monster8_usb_flash_drive env:mks_monster8_usb_flash_drive_msc -#elif MB(TH3D_EZBOARD_LITE_V2) - #include "stm32f4/pins_TH3D_EZBOARD_LITE_V2.h" // STM32F4 env:TH3D_EZBoard_Lite_V2 +#elif MB(TH3D_EZBOARD_V2) + #include "stm32f4/pins_TH3D_EZBOARD_V2.h" // STM32F4 env:TH3D_EZBoard_V2 #elif MB(INDEX_REV03) #include "stm32f4/pins_INDEX_REV03.h" // STM32F4 env:Index_Mobo_Rev03 #elif MB(MKS_ROBIN_NANO_V1_3_F4) @@ -752,6 +752,7 @@ #define BOARD_RAMPS_DAGOMA -1020 #define BOARD_RAMPS_LONGER3D_LK4PRO -1021 #define BOARD_BTT_SKR_V2_0 -1022 + #define BOARD_TH3D_EZBOARD_LITE_V2 -1023 #if MB(MKS_13) #error "BOARD_MKS_13 has been renamed BOARD_MKS_GEN_13. Please update your configuration." @@ -801,6 +802,8 @@ #error "BOARD_RAMPS_LONGER3D_LK4PRO is now BOARD_LONGER3D_LKx_PRO. Please update your configuration." #elif MB(BTT_SKR_V2_0) #error "BTT_SKR_V2_0 is now BTT_SKR_V2_0_REV_A or BTT_SKR_V2_0_REV_B. See https://bit.ly/3t5d9JQ for more information. Please update your configuration." + #elif MB(BOARD_TH3D_EZBOARD_LITE_V2) + #error "BOARD_TH3D_EZBOARD_LITE_V2 is now BOARD_TH3D_EZBOARD_V2. Please update your configuration." #elif defined(MOTHERBOARD) #error "Unknown MOTHERBOARD value set in Configuration.h." #else diff --git a/Marlin/src/pins/stm32f4/pins_TH3D_EZBOARD_LITE_V2.h b/Marlin/src/pins/stm32f4/pins_TH3D_EZBOARD_V2.h similarity index 99% rename from Marlin/src/pins/stm32f4/pins_TH3D_EZBOARD_LITE_V2.h rename to Marlin/src/pins/stm32f4/pins_TH3D_EZBOARD_V2.h index bff3f5b6ee..6368142c34 100644 --- a/Marlin/src/pins/stm32f4/pins_TH3D_EZBOARD_LITE_V2.h +++ b/Marlin/src/pins/stm32f4/pins_TH3D_EZBOARD_V2.h @@ -24,7 +24,7 @@ #define ALLOW_STM32DUINO #include "env_validate.h" -#define BOARD_INFO_NAME "TH3D EZBoard Lite V2" +#define BOARD_INFO_NAME "TH3D EZBoard V2" #define BOARD_WEBSITE_URL "th3dstudio.com" //#define V3_EZABL_ON_SERVO // As in TH3D Firmware Config diff --git a/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/PeripheralPins.c b/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/PeripheralPins.c similarity index 100% rename from buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/PeripheralPins.c rename to buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/PeripheralPins.c diff --git a/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/PinNamesVar.h b/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/PinNamesVar.h similarity index 100% rename from buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/PinNamesVar.h rename to buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/PinNamesVar.h diff --git a/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/hal_conf_extra.h b/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/hal_conf_extra.h similarity index 100% rename from buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/hal_conf_extra.h rename to buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/hal_conf_extra.h diff --git a/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/ldscript.ld b/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/ldscript.ld similarity index 100% rename from buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/ldscript.ld rename to buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/ldscript.ld diff --git a/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/variant.cpp b/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/variant.cpp similarity index 100% rename from buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/variant.cpp rename to buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/variant.cpp diff --git a/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/variant.h similarity index 100% rename from buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_LITE_V2/variant.h rename to buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/variant.h diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index 3e0c400a6b..3d7f4d2d02 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -521,13 +521,13 @@ build_flags = ${env:mks_monster8_usb_flash_drive.build_flags} build_unflags = -DUSBD_USE_CDC # -# TH3D EZBoard Lite v2.0 (STM32F405RGT6 ARM Cortex-M4) +# TH3D EZBoard v2.0 (STM32F405RGT6 ARM Cortex-M4) # -[env:TH3D_EZBoard_Lite_V2] +[env:TH3D_EZBoard_V2] platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F405RG -board_build.variant = MARLIN_TH3D_EZBOARD_LITE_V2 +board_build.variant = MARLIN_TH3D_EZBOARD_V2 board_build.offset = 0xC000 board_upload.offset_address = 0x0800C000 build_flags = ${stm32_variant.build_flags} -DHSE_VALUE=12000000U -O0 From 2c8dce69e16daa08de4a62f115b06fe68c0db17d Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 29 Oct 2021 00:58:40 +0000 Subject: [PATCH 067/532] [cron] Bump distribution date (2021-10-29) --- 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 e61ec1b4e7..e0165a280f 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 "2021-10-28" +//#define STRING_DISTRIBUTION_DATE "2021-10-29" /** * 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 a1ad05bd3a..f61066e58f 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 "2021-10-28" + #define STRING_DISTRIBUTION_DATE "2021-10-29" #endif /** From 3b9bea6f80f02b76f6b71c6c1dcdb751e3611d8e Mon Sep 17 00:00:00 2001 From: tome9111991 <57866234+tome9111991@users.noreply.github.com> Date: Sat, 30 Oct 2021 00:49:12 +0200 Subject: [PATCH 068/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20E3V2=20(CrealityUI?= =?UTF-8?q?)=20Tune/Prepare=20>=20Zoffset=20(#23040)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/creality/dwin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/lcd/e3v2/creality/dwin.cpp b/Marlin/src/lcd/e3v2/creality/dwin.cpp index 0f8a739728..5114e8a38a 100644 --- a/Marlin/src/lcd/e3v2/creality/dwin.cpp +++ b/Marlin/src/lcd/e3v2/creality/dwin.cpp @@ -615,7 +615,7 @@ void Draw_Edit_Float3(const uint8_t row, const uint16_t value, const bool active } void Draw_Edit_Signed_Float2(const uint8_t row, const float value, const bool active=false) { - DWIN_Draw_Signed_Float(font8x16, active ? Select_Color : Color_Bg_Black, 2, UNITFDIGITS, 220 + 8 - UNITFDIGITS * 8, EBASE(row), value); + DWIN_Draw_Signed_Float(font8x16, active ? Select_Color : Color_Bg_Black, 2, UNITFDIGITS + 1, 220 + 8 - UNITFDIGITS * 8, EBASE(row), value); } void Draw_Edit_Signed_Float3(const uint8_t row, const float value, const bool active=false) { From 1d80464ba77bc576426f15af28a633bf48d769ad Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 27 Oct 2021 21:15:58 -0500 Subject: [PATCH 069/532] =?UTF-8?q?=F0=9F=8E=A8=20Define=20HAS=5FPREHEAT?= =?UTF-8?q?=20conditional?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/bedlevel/G26.cpp | 6 +- Marlin/src/gcode/gcode.cpp | 2 +- Marlin/src/gcode/gcode.h | 2 +- Marlin/src/gcode/lcd/M145.cpp | 4 +- Marlin/src/gcode/temp/M104_M109.cpp | 2 +- Marlin/src/gcode/temp/M106_M107.cpp | 4 +- Marlin/src/gcode/temp/M140_M190.cpp | 2 +- Marlin/src/inc/Conditionals_post.h | 6 +- Marlin/src/lcd/e3v2/creality/dwin.cpp | 153 ++++++++++--------- Marlin/src/lcd/e3v2/creality/dwin.h | 11 +- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 12 +- Marlin/src/lcd/e3v2/enhanced/dwin.h | 21 +-- Marlin/src/lcd/e3v2/jyersui/dwin.cpp | 6 +- Marlin/src/lcd/extui/nextion/nextion_tft.cpp | 4 +- Marlin/src/lcd/extui/ui_api.cpp | 2 +- Marlin/src/lcd/extui/ui_api.h | 2 +- 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 | 4 +- Marlin/src/lcd/language/language_da.h | 2 +- Marlin/src/lcd/language/language_de.h | 4 +- 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 | 4 +- Marlin/src/lcd/language/language_eu.h | 4 +- Marlin/src/lcd/language/language_fi.h | 2 +- Marlin/src/lcd/language/language_fr.h | 4 +- Marlin/src/lcd/language/language_gl.h | 4 +- Marlin/src/lcd/language/language_hr.h | 2 +- Marlin/src/lcd/language/language_hu.h | 2 +- Marlin/src/lcd/language/language_it.h | 4 +- Marlin/src/lcd/language/language_jp_kana.h | 2 +- Marlin/src/lcd/language/language_ko_KR.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 | 4 +- Marlin/src/lcd/language/language_ro.h | 4 +- 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 | 4 +- Marlin/src/lcd/language/language_uk.h | 2 +- Marlin/src/lcd/language/language_vi.h | 4 +- Marlin/src/lcd/language/language_zh_CN.h | 4 +- Marlin/src/lcd/language/language_zh_TW.h | 4 +- Marlin/src/lcd/marlinui.cpp | 2 +- Marlin/src/lcd/marlinui.h | 4 +- Marlin/src/lcd/menu/menu_configuration.cpp | 4 +- Marlin/src/lcd/menu/menu_filament.cpp | 2 +- Marlin/src/lcd/menu/menu_temperature.cpp | 6 +- Marlin/src/lcd/menu/menu_ubl.cpp | 8 +- Marlin/src/module/settings.cpp | 10 +- 55 files changed, 183 insertions(+), 182 deletions(-) diff --git a/Marlin/src/gcode/bedlevel/G26.cpp b/Marlin/src/gcode/bedlevel/G26.cpp index e111bcd8aa..728771d580 100644 --- a/Marlin/src/gcode/bedlevel/G26.cpp +++ b/Marlin/src/gcode/bedlevel/G26.cpp @@ -520,7 +520,7 @@ void GcodeSuite::G26() { g26.keep_heaters_on = parser.boolval('K'); // Accept 'I' if temperature presets are defined - #if PREHEAT_COUNT + #if HAS_PREHEAT const uint8_t preset_index = parser.seenval('I') ? _MIN(parser.value_byte(), PREHEAT_COUNT - 1) + 1 : 0; #endif @@ -530,7 +530,7 @@ void GcodeSuite::G26() { celsius_t bedtemp = 0; // Use the 'I' index if temperature presets are defined - #if PREHEAT_COUNT + #if HAS_PREHEAT if (preset_index) bedtemp = ui.material_preset[preset_index - 1].bed_temp; #endif @@ -613,7 +613,7 @@ void GcodeSuite::G26() { celsius_t noztemp = 0; // Accept 'I' if temperature presets are defined - #if PREHEAT_COUNT + #if HAS_PREHEAT if (preset_index) noztemp = ui.material_preset[preset_index - 1].hotend_temp; #endif diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 30c7d926e0..fb1669c1ea 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -640,7 +640,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { case 120: M120(); break; // M120: Enable endstops case 121: M121(); break; // M121: Disable endstops - #if PREHEAT_COUNT + #if HAS_PREHEAT case 145: M145(); break; // M145: Set material heatup parameters #endif diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 5ad4750fe4..8de15fc9c7 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -749,7 +749,7 @@ private: static void M193(); #endif - #if PREHEAT_COUNT + #if HAS_PREHEAT static void M145(); static void M145_report(const bool forReplay=true); #endif diff --git a/Marlin/src/gcode/lcd/M145.cpp b/Marlin/src/gcode/lcd/M145.cpp index 2dba238d3f..8dbe2fb07e 100644 --- a/Marlin/src/gcode/lcd/M145.cpp +++ b/Marlin/src/gcode/lcd/M145.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if PREHEAT_COUNT +#if HAS_PREHEAT #include "../gcode.h" #include "../../lcd/marlinui.h" @@ -79,4 +79,4 @@ void GcodeSuite::M145_report(const bool forReplay/*=true*/) { } } -#endif // PREHEAT_COUNT +#endif // HAS_PREHEAT diff --git a/Marlin/src/gcode/temp/M104_M109.cpp b/Marlin/src/gcode/temp/M104_M109.cpp index efda04def5..baaac02100 100644 --- a/Marlin/src/gcode/temp/M104_M109.cpp +++ b/Marlin/src/gcode/temp/M104_M109.cpp @@ -88,7 +88,7 @@ void GcodeSuite::M104_M109(const bool isM109) { celsius_t temp = 0; // Accept 'I' if temperature presets are defined - #if PREHEAT_COUNT + #if HAS_PREHEAT got_temp = parser.seenval('I'); if (got_temp) { const uint8_t index = parser.value_byte(); diff --git a/Marlin/src/gcode/temp/M106_M107.cpp b/Marlin/src/gcode/temp/M106_M107.cpp index 3f85c53d78..98e87c415d 100644 --- a/Marlin/src/gcode/temp/M106_M107.cpp +++ b/Marlin/src/gcode/temp/M106_M107.cpp @@ -32,7 +32,7 @@ #include "../../module/planner.h" #endif -#if PREHEAT_COUNT +#if HAS_PREHEAT #include "../../lcd/marlinui.h" #endif @@ -75,7 +75,7 @@ void GcodeSuite::M106() { uint16_t speed = dspeed; // Accept 'I' if temperature presets are defined - #if PREHEAT_COUNT + #if HAS_PREHEAT const bool got_preset = parser.seenval('I'); if (got_preset) speed = ui.material_preset[_MIN(parser.value_byte(), PREHEAT_COUNT - 1)].fan_speed; #else diff --git a/Marlin/src/gcode/temp/M140_M190.cpp b/Marlin/src/gcode/temp/M140_M190.cpp index edc15b9cba..7532defccd 100644 --- a/Marlin/src/gcode/temp/M140_M190.cpp +++ b/Marlin/src/gcode/temp/M140_M190.cpp @@ -63,7 +63,7 @@ void GcodeSuite::M140_M190(const bool isM190) { celsius_t temp = 0; // Accept 'I' if temperature presets are defined - #if PREHEAT_COUNT + #if HAS_PREHEAT got_temp = parser.seenval('I'); if (got_temp) { const uint8_t index = parser.value_byte(); diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 6a70a5ce54..c8b6d504e2 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -2876,10 +2876,14 @@ #elif defined(PREHEAT_1_LABEL) #define PREHEAT_COUNT 1 #endif + #if PREHEAT_COUNT && ANY(HAS_HOTEND, HAS_HEATED_BED, HAS_FAN) + #define HAS_PREHEAT 1 + #endif #endif -#if !PREHEAT_COUNT +#if !HAS_PREHEAT #undef PREHEAT_SHORTCUT_MENU_ITEM + #undef DGUS_PREHEAT_UI #endif /** diff --git a/Marlin/src/lcd/e3v2/creality/dwin.cpp b/Marlin/src/lcd/e3v2/creality/dwin.cpp index 5114e8a38a..a27762d71e 100644 --- a/Marlin/src/lcd/e3v2/creality/dwin.cpp +++ b/Marlin/src/lcd/e3v2/creality/dwin.cpp @@ -165,14 +165,9 @@ typedef struct { } select_t; select_t select_page{0}, select_file{0}, select_print{0}, select_prepare{0} - , select_control{0}, select_axis{0}, select_temp{0}, select_motion{0}, select_tune{0} - , select_advset{0}, select_PLA{0}, select_ABS{0} - , select_speed{0} - , select_acc{0} - , select_jerk{0} - , select_step{0} - , select_item{0} - ; + , select_control{0}, select_axis{0}, select_temp{0}, select_motion{0}, select_tune{0} + , select_advset{0}, select_PLA{0}, select_ABS{0} + , select_speed{0}, select_acc{0}, select_jerk{0}, select_step{0}, select_item{0}; uint8_t index_file = MROWS, index_prepare = MROWS, @@ -700,7 +695,7 @@ void Item_Prepare_Home(const uint8_t row) { #endif -#if HAS_HOTEND +#if HAS_PREHEAT void Item_Prepare_PLA(const uint8_t row) { if (HMI_IsChinese()) Item_AreaCopy(100, 89, 151, 101, row); @@ -715,22 +710,22 @@ void Item_Prepare_Home(const uint8_t row) { Draw_Menu_Line(row, ICON_PLAPreheat); } - void Item_Prepare_ABS(const uint8_t row) { - if (HMI_IsChinese()) - Item_AreaCopy(180, 89, 233, 100, row); - else { - #ifdef USE_STRING_TITLES - DWIN_Draw_Label(row, F("Preheat " PREHEAT_2_LABEL)); - #else - Item_AreaCopy(108, 76, 155, 87, row); // "Preheat" - say_abs_en(52, row); // "ABS" - #endif + #if PREHEAT_COUNT > 1 + void Item_Prepare_ABS(const uint8_t row) { + if (HMI_IsChinese()) + Item_AreaCopy(180, 89, 233, 100, row); + else { + #ifdef USE_STRING_TITLES + DWIN_Draw_Label(row, F("Preheat " PREHEAT_2_LABEL)); + #else + Item_AreaCopy(108, 76, 155, 87, row); // "Preheat" + say_abs_en(52, row); // "ABS" + #endif + } + Draw_Menu_Line(row, ICON_ABSPreheat); } - Draw_Menu_Line(row, ICON_ABSPreheat); - } -#endif + #endif -#if HAS_PREHEAT void Item_Prepare_Cool(const uint8_t row) { if (HMI_IsChinese()) Item_AreaCopy(1, 104, 56, 117, row); @@ -785,11 +780,11 @@ void Draw_Prepare_Menu() { #if HAS_ZOFFSET_ITEM if (PVISI(PREPARE_CASE_ZOFF)) Item_Prepare_Offset(PSCROL(PREPARE_CASE_ZOFF)); // Edit Z-Offset / Babystep / Set Home Offset #endif - #if HAS_HOTEND - if (PVISI(PREPARE_CASE_PLA)) Item_Prepare_PLA(PSCROL(PREPARE_CASE_PLA)); // Preheat PLA - if (PVISI(PREPARE_CASE_ABS)) Item_Prepare_ABS(PSCROL(PREPARE_CASE_ABS)); // Preheat ABS - #endif #if HAS_PREHEAT + if (PVISI(PREPARE_CASE_PLA)) Item_Prepare_PLA(PSCROL(PREPARE_CASE_PLA)); // Preheat PLA + #if PREHEAT_COUNT > 1 + if (PVISI(PREPARE_CASE_ABS)) Item_Prepare_ABS(PSCROL(PREPARE_CASE_ABS)); // Preheat ABS + #endif if (PVISI(PREPARE_CASE_COOL)) Item_Prepare_Cool(PSCROL(PREPARE_CASE_COOL)); // Cooldown #endif if (PVISI(PREPARE_CASE_LANG)) Item_Prepare_Lang(PSCROL(PREPARE_CASE_LANG)); // Language CN/EN @@ -1425,25 +1420,34 @@ void HMI_Move_Z() { uint8_t temp_line; switch (HMI_ValueStruct.show_mode) { case -1: temp_line = TEMP_CASE_TEMP; break; - case -2: temp_line = PREHEAT_CASE_TEMP; break; - case -3: temp_line = PREHEAT_CASE_TEMP; break; + #if HAS_PREHEAT + case -2: temp_line = PREHEAT_CASE_TEMP; break; + #if PREHEAT_COUNT > 1 + case -3: temp_line = PREHEAT_CASE_TEMP; break; + #endif + #endif default: temp_line = TUNE_CASE_TEMP + MROWS - index_tune; } if (Apply_Encoder(encoder_diffState, HMI_ValueStruct.E_Temp)) { EncoderRate.enabled = false; - if (HMI_ValueStruct.show_mode == -2) { - checkkey = PLAPreheat; - ui.material_preset[0].hotend_temp = HMI_ValueStruct.E_Temp; - Draw_Edit_Integer3(temp_line, ui.material_preset[0].hotend_temp); - return; - } - else if (HMI_ValueStruct.show_mode == -3) { - checkkey = ABSPreheat; - ui.material_preset[1].hotend_temp = HMI_ValueStruct.E_Temp; - Draw_Edit_Integer3(temp_line, ui.material_preset[1].hotend_temp); - return; - } - else if (HMI_ValueStruct.show_mode == -1) // Temperature + #if HAS_PREHEAT + if (HMI_ValueStruct.show_mode == -2) { + checkkey = PLAPreheat; + ui.material_preset[0].hotend_temp = HMI_ValueStruct.E_Temp; + Draw_Edit_Integer3(temp_line, ui.material_preset[0].hotend_temp); + return; + } + #if PREHEAT_COUNT > 1 + if (HMI_ValueStruct.show_mode == -3) { + checkkey = ABSPreheat; + ui.material_preset[1].hotend_temp = HMI_ValueStruct.E_Temp; + Draw_Edit_Integer3(temp_line, ui.material_preset[1].hotend_temp); + return; + } + #endif + #endif + + if (HMI_ValueStruct.show_mode == -1) // Temperature checkkey = TemperatureID; else checkkey = Tune; @@ -1467,28 +1471,33 @@ void HMI_Move_Z() { uint8_t bed_line; switch (HMI_ValueStruct.show_mode) { case -1: bed_line = TEMP_CASE_BED; break; - case -2: bed_line = PREHEAT_CASE_BED; break; - case -3: bed_line = PREHEAT_CASE_BED; break; + #if HAS_PREHEAT + case -2: bed_line = PREHEAT_CASE_BED; break; + #if PREHEAT_COUNT > 1 + case -3: bed_line = PREHEAT_CASE_BED; break; + #endif + #endif default: bed_line = TUNE_CASE_BED + MROWS - index_tune; } if (Apply_Encoder(encoder_diffState, HMI_ValueStruct.Bed_Temp)) { EncoderRate.enabled = false; - if (HMI_ValueStruct.show_mode == -2) { - checkkey = PLAPreheat; - ui.material_preset[0].bed_temp = HMI_ValueStruct.Bed_Temp; - Draw_Edit_Integer3(bed_line, ui.material_preset[0].bed_temp); - return; - } - else if (HMI_ValueStruct.show_mode == -3) { - checkkey = ABSPreheat; - ui.material_preset[1].bed_temp = HMI_ValueStruct.Bed_Temp; - Draw_Edit_Integer3(bed_line, ui.material_preset[1].bed_temp); - return; - } - else if (HMI_ValueStruct.show_mode == -1) - checkkey = TemperatureID; - else - checkkey = Tune; + #if HAS_PREHEAT + if (HMI_ValueStruct.show_mode == -2) { + checkkey = PLAPreheat; + ui.material_preset[0].bed_temp = HMI_ValueStruct.Bed_Temp; + Draw_Edit_Integer3(bed_line, ui.material_preset[0].bed_temp); + return; + } + #if PREHEAT_COUNT > 1 + if (HMI_ValueStruct.show_mode == -3) { + checkkey = ABSPreheat; + ui.material_preset[1].bed_temp = HMI_ValueStruct.Bed_Temp; + Draw_Edit_Integer3(bed_line, ui.material_preset[1].bed_temp); + return; + } + #endif + #endif + checkkey = HMI_ValueStruct.show_mode == -1 ? TemperatureID : Tune; Draw_Edit_Integer3(bed_line, HMI_ValueStruct.Bed_Temp); thermalManager.setTargetBed(HMI_ValueStruct.Bed_Temp); return; @@ -1522,16 +1531,15 @@ void HMI_Move_Z() { Draw_Edit_Integer3(fan_line, ui.material_preset[0].fan_speed); return; } - else if (HMI_ValueStruct.show_mode == -3) { - checkkey = ABSPreheat; - ui.material_preset[1].fan_speed = HMI_ValueStruct.Fan_speed; - Draw_Edit_Integer3(fan_line, ui.material_preset[1].fan_speed); - return; - } - else if (HMI_ValueStruct.show_mode == -1) - checkkey = TemperatureID; - else - checkkey = Tune; + #if PREHEAT_COUNT > 1 + if (HMI_ValueStruct.show_mode == -3) { + checkkey = ABSPreheat; + ui.material_preset[1].fan_speed = HMI_ValueStruct.Fan_speed; + Draw_Edit_Integer3(fan_line, ui.material_preset[1].fan_speed); + return; + } + #endif + checkkey = HMI_ValueStruct.show_mode == -1 ? TemperatureID : Tune; Draw_Edit_Integer3(fan_line, HMI_ValueStruct.Fan_speed); thermalManager.set_fan_speed(0, HMI_ValueStruct.Fan_speed); return; @@ -3068,7 +3076,7 @@ void HMI_Temperature() { EncoderRate.enabled = true; break; #endif - #if HAS_HOTEND + #if HAS_PREHEAT case TEMP_CASE_PLA: { checkkey = PLAPreheat; select_PLA.reset(); @@ -3145,7 +3153,8 @@ void HMI_Temperature() { Draw_Menu_Line(++i, ICON_WriteEEPROM); #endif } break; - + #endif + #if PREHEAT_COUNT > 1 case TEMP_CASE_ABS: { // ABS preheat setting checkkey = ABSPreheat; select_ABS.reset(); diff --git a/Marlin/src/lcd/e3v2/creality/dwin.h b/Marlin/src/lcd/e3v2/creality/dwin.h index d9ac0aa5fa..3122a6fcba 100644 --- a/Marlin/src/lcd/e3v2/creality/dwin.h +++ b/Marlin/src/lcd/e3v2/creality/dwin.h @@ -31,13 +31,6 @@ #include "../../../inc/MarlinConfigPre.h" -#if ANY(HAS_HOTEND, HAS_HEATED_BED, HAS_FAN) && PREHEAT_COUNT - #define HAS_PREHEAT 1 - #if PREHEAT_COUNT < 2 - #error "Creality DWIN requires two material preheat presets." - #endif -#endif - enum processID : uint8_t { // Process ID MainMenu, @@ -53,7 +46,9 @@ enum processID : uint8_t { Tune, #if HAS_PREHEAT PLAPreheat, - ABSPreheat, + #if PREHEAT_COUNT > 1 + ABSPreheat, + #endif #endif MaxSpeed, MaxSpeed_value, diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index b861b0274a..22de4d720b 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -3124,12 +3124,14 @@ void Draw_Prepare_Menu() { ADDMENUITEM(ICON_SetHome, GET_TEXT_F(MSG_SET_HOME_OFFSETS), onDrawHomeOffset, SetHome); #endif #endif - #if HAS_HOTEND - ADDMENUITEM(ICON_PLAPreheat, GET_TEXT_F(MSG_PREHEAT_1), onDrawPreheat1, SetPreheat0); - ADDMENUITEM(ICON_ABSPreheat, PSTR("Preheat " PREHEAT_2_LABEL), onDrawPreheat2, SetPreheat1); - ADDMENUITEM(ICON_CustomPreheat, GET_TEXT_F(MSG_PREHEAT_CUSTOM), onDrawMenuItem, SetPreheat2); - #endif #if HAS_PREHEAT + ADDMENUITEM(ICON_PLAPreheat, GET_TEXT_F(MSG_PREHEAT_1), onDrawPreheat1, SetPreheat0); + #if PREHEAT_COUNT > 1 + ADDMENUITEM(ICON_ABSPreheat, PSTR("Preheat " PREHEAT_2_LABEL), onDrawPreheat2, SetPreheat1); + #endif + #if PREHEAT_COUNT > 2 + ADDMENUITEM(ICON_CustomPreheat, GET_TEXT_F(MSG_PREHEAT_CUSTOM), onDrawMenuItem, SetPreheat2); + #endif ADDMENUITEM(ICON_Cool, GET_TEXT_F(MSG_COOLDOWN), onDrawCooldown, SetCoolDown); #endif ADDMENUITEM(ICON_Language, PSTR("UI Language"), onDrawLanguage, SetLanguage); diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.h b/Marlin/src/lcd/e3v2/enhanced/dwin.h index 0908417117..c2220c68a8 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.h @@ -33,13 +33,6 @@ #include "../common/encoder.h" #include "../../../libs/BL24CXX.h" -#if ANY(HAS_HOTEND, HAS_HEATED_BED, HAS_FAN) && PREHEAT_COUNT - #define HAS_PREHEAT 1 - #if PREHEAT_COUNT < 2 - #error "Creality DWIN requires two material preheat presets." - #endif -#endif - #if ANY(AUTO_BED_LEVELING_BILINEAR, AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_3POINT) && DISABLED(PROBE_MANUALLY) #define HAS_ONESTEP_LEVELING 1 #endif @@ -123,12 +116,14 @@ typedef struct { uint16_t Barfill_Color = Def_Barfill_Color; uint16_t Indicator_Color = Def_Indicator_Color; uint16_t Coordinate_Color = Def_Coordinate_Color; - #if HAS_HOTEND - int16_t HotendPidT = PREHEAT_1_TEMP_HOTEND; - int16_t PidCycles = 10; - #endif - #ifdef PREHEAT_1_TEMP_BED - int16_t BedPidT = PREHEAT_1_TEMP_BED; + #if HAS_PREHEAT + #ifdef PREHEAT_1_TEMP_HOTEND + int16_t HotendPidT = PREHEAT_1_TEMP_HOTEND; + int16_t PidCycles = 10; + #endif + #ifdef PREHEAT_1_TEMP_BED + int16_t BedPidT = PREHEAT_1_TEMP_BED; + #endif #endif #if ENABLED(PREVENT_COLD_EXTRUSION) int16_t ExtMinT = EXTRUDE_MINTEMP; diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp index 691c03af0d..9cecf202b2 100644 --- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp @@ -76,10 +76,6 @@ #include "../../../module/probe.h" #endif -#if ANY(HAS_HOTEND, HAS_HEATED_BED, HAS_FAN) && PREHEAT_COUNT - #define HAS_PREHEAT 1 -#endif - #if ENABLED(POWER_LOSS_RECOVERY) #include "../../../feature/powerloss.h" #endif @@ -1593,7 +1589,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/ #define PREHEAT_BACK 0 #define PREHEAT_MODE (PREHEAT_BACK + 1) - #define PREHEAT_1 (PREHEAT_MODE + (PREHEAT_COUNT >= 1)) + #define PREHEAT_1 (PREHEAT_MODE + 1) #define PREHEAT_2 (PREHEAT_1 + (PREHEAT_COUNT >= 2)) #define PREHEAT_3 (PREHEAT_2 + (PREHEAT_COUNT >= 3)) #define PREHEAT_4 (PREHEAT_3 + (PREHEAT_COUNT >= 4)) diff --git a/Marlin/src/lcd/extui/nextion/nextion_tft.cpp b/Marlin/src/lcd/extui/nextion/nextion_tft.cpp index 99211a220c..2c1bde245c 100644 --- a/Marlin/src/lcd/extui/nextion/nextion_tft.cpp +++ b/Marlin/src/lcd/extui/nextion/nextion_tft.cpp @@ -335,7 +335,7 @@ void NextionTFT::PanelInfo(uint8_t req) { break; case 29: // Preheat - #if PREHEAT_COUNT + #if HAS_PREHEAT if (!isPrinting()) { // Preheat PLA if (nextion_command[4] == 'P') { @@ -560,7 +560,7 @@ void NextionTFT::PanelAction(uint8_t req) { break; case 63: // Preheat // Temps defined in configuration.h - #if PREHEAT_COUNT + #if HAS_PREHEAT if (!isPrinting()) switch (nextion_command[4]) { // Preheat PLA case 'P': diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index 72dab6f35e..7358cbce23 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -705,7 +705,7 @@ namespace ExtUI { uint8_t getIDEX_Mode() { return dual_x_carriage_mode; } #endif - #if PREHEAT_COUNT + #if HAS_PREHEAT uint16_t getMaterial_preset_E(const uint16_t index) { return ui.material_preset[index].hotend_temp; } #if HAS_HEATED_BED uint16_t getMaterial_preset_B(const uint16_t index) { return ui.material_preset[index].bed_temp; } diff --git a/Marlin/src/lcd/extui/ui_api.h b/Marlin/src/lcd/extui/ui_api.h index 7e899221ad..04a298ba58 100644 --- a/Marlin/src/lcd/extui/ui_api.h +++ b/Marlin/src/lcd/extui/ui_api.h @@ -148,7 +148,7 @@ namespace ExtUI { uint32_t getProgress_seconds_elapsed(); - #if PREHEAT_COUNT + #if HAS_PREHEAT uint16_t getMaterial_preset_E(const uint16_t); #if HAS_HEATED_BED uint16_t getMaterial_preset_B(const uint16_t); diff --git a/Marlin/src/lcd/language/language_an.h b/Marlin/src/lcd/language/language_an.h index 4669f0c233..8e4ff0e95c 100644 --- a/Marlin/src/lcd/language/language_an.h +++ b/Marlin/src/lcd/language/language_an.h @@ -56,7 +56,7 @@ namespace Language_an { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Achustar desfases"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfase aplicau"); LSTR MSG_SET_ORIGIN = _UxGT("Establir orichen"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Precalentar ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Precalentar ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla"); diff --git a/Marlin/src/lcd/language/language_bg.h b/Marlin/src/lcd/language/language_bg.h index 3d332ca058..05209f7718 100644 --- a/Marlin/src/lcd/language/language_bg.h +++ b/Marlin/src/lcd/language/language_bg.h @@ -45,7 +45,7 @@ namespace Language_bg { LSTR MSG_AUTO_HOME = _UxGT("Паркиране"); LSTR MSG_SET_HOME_OFFSETS = _UxGT("Задай Начало"); LSTR MSG_SET_ORIGIN = _UxGT("Изходна точка"); - #if PREHEAT_COUNT + #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(" Дюза"); diff --git a/Marlin/src/lcd/language/language_ca.h b/Marlin/src/lcd/language/language_ca.h index c8f0d26a32..6fba76a552 100644 --- a/Marlin/src/lcd/language/language_ca.h +++ b/Marlin/src/lcd/language/language_ca.h @@ -54,7 +54,7 @@ namespace Language_ca { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ajusta decalatge"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Decalatge aplicat"); LSTR MSG_SET_ORIGIN = _UxGT("Estableix origen"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Preescalfa ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Preescalfa ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" End"); diff --git a/Marlin/src/lcd/language/language_cz.h b/Marlin/src/lcd/language/language_cz.h index fd064b0834..596591e0f6 100644 --- a/Marlin/src/lcd/language/language_cz.h +++ b/Marlin/src/lcd/language/language_cz.h @@ -78,7 +78,7 @@ namespace Language_cz { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Nastavit ofsety"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofsety nastaveny"); LSTR MSG_SET_ORIGIN = _UxGT("Nastavit počátek"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Zahřát ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Zahřát ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end"); @@ -153,7 +153,7 @@ namespace Language_cz { LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Konec úprav sítě"); LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Vlastní síť"); LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Vytvořit síť"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Síť bodů $"); LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Kontrola sítě $"); #endif diff --git a/Marlin/src/lcd/language/language_da.h b/Marlin/src/lcd/language/language_da.h index ef11906ed6..e032605578 100644 --- a/Marlin/src/lcd/language/language_da.h +++ b/Marlin/src/lcd/language/language_da.h @@ -48,7 +48,7 @@ namespace Language_da { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Sæt forsk. af home"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Forsk. er nu aktiv"); LSTR MSG_SET_ORIGIN = _UxGT("Sæt origin"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Forvarm ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Forvarm ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end"); diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h index 8160ad4724..613880caa6 100644 --- a/Marlin/src/lcd/language/language_de.h +++ b/Marlin/src/lcd/language/language_de.h @@ -69,7 +69,7 @@ namespace Language_de { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Setze Homeversatz"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Homeversatz aktiv"); LSTR MSG_SET_ORIGIN = _UxGT("Setze Nullpunkte"); //"G92 X0 Y0 Z0" commented out in marlinui.cpp - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" Vorwärmen"); LSTR MSG_PREHEAT_1_H = PREHEAT_1_LABEL _UxGT(" Vorwärmen ~"); LSTR MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärmen"); @@ -144,7 +144,7 @@ namespace Language_de { LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Bearbeitung beendet"); LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Eigenes Netz erst."); LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Netz erstellen"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_UBL_BUILD_MESH_M = _UxGT("$ Netz erstellen"); LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("$ Netz validieren"); #endif diff --git a/Marlin/src/lcd/language/language_el.h b/Marlin/src/lcd/language/language_el.h index 21f5ca6503..3d1a79ea92 100644 --- a/Marlin/src/lcd/language/language_el.h +++ b/Marlin/src/lcd/language/language_el.h @@ -65,7 +65,7 @@ namespace Language_el { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ορισμός μετατοπίσεων"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Εφαρμογή μετατοπίσεων"); LSTR MSG_SET_ORIGIN = _UxGT("Ορισμός προέλευσης"); - #if PREHEAT_COUNT + #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(" End"); diff --git a/Marlin/src/lcd/language/language_el_gr.h b/Marlin/src/lcd/language/language_el_gr.h index 5259962f02..53e3ee3b94 100644 --- a/Marlin/src/lcd/language/language_el_gr.h +++ b/Marlin/src/lcd/language/language_el_gr.h @@ -54,7 +54,7 @@ namespace Language_el_gr { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ορισμός βασικών μετατοπίσεων"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Εφαρμόστηκαν οι μετατοπίσεις"); LSTR MSG_SET_ORIGIN = _UxGT("Ορισμός προέλευσης"); - #if PREHEAT_COUNT + #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(" End"); diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index c9413d3cea..8af60c1642 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -104,7 +104,7 @@ namespace Language_en { LSTR MSG_TRAMMING_WIZARD = _UxGT("Tramming Wizard"); LSTR MSG_SELECT_ORIGIN = _UxGT("Select Origin"); LSTR MSG_LAST_VALUE_SP = _UxGT("Last value "); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Preheat ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Preheat ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End"); diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h index 62dd69b526..38f21985ec 100644 --- a/Marlin/src/lcd/language/language_es.h +++ b/Marlin/src/lcd/language/language_es.h @@ -73,7 +73,7 @@ namespace Language_es { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ajustar desfases"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfase aplicada"); LSTR MSG_SET_ORIGIN = _UxGT("Establecer origen"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Precal. ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Precal. ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Fusor"); @@ -147,7 +147,7 @@ namespace Language_es { LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Term. edici. Mallado"); LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crear Mallado Pers."); LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Crear Mallado"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Crear Mallado ($)"); LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Valid. Mall. ($)"); #endif diff --git a/Marlin/src/lcd/language/language_eu.h b/Marlin/src/lcd/language/language_eu.h index fc8f2e0f62..adc812f6ff 100644 --- a/Marlin/src/lcd/language/language_eu.h +++ b/Marlin/src/lcd/language/language_eu.h @@ -57,7 +57,7 @@ namespace Language_eu { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Etxe. offset eza."); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsetak ezarrita"); LSTR MSG_SET_ORIGIN = _UxGT("Hasiera ipini"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Berotu ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Berotu ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia"); @@ -100,7 +100,7 @@ namespace Language_eu { LSTR MSG_UBL_MESH_EDIT = _UxGT("Sarea editatu"); LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Sarea editatzea eginda"); LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Sarea sortu"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_UBL_BUILD_MESH_M = _UxGT("$ sarea sortu"); LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("$ sarea balioetsi"); #endif diff --git a/Marlin/src/lcd/language/language_fi.h b/Marlin/src/lcd/language/language_fi.h index 075b5b2744..62f3aae807 100644 --- a/Marlin/src/lcd/language/language_fi.h +++ b/Marlin/src/lcd/language/language_fi.h @@ -44,7 +44,7 @@ namespace Language_fi { LSTR MSG_DISABLE_STEPPERS = _UxGT("Vapauta moottorit"); LSTR MSG_AUTO_HOME = _UxGT("Aja referenssiin"); LSTR MSG_SET_ORIGIN = _UxGT("Aseta origo"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Esilämmitä ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin"); diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h index 77472e4fbb..e9c55ed401 100644 --- a/Marlin/src/lcd/language/language_fr.h +++ b/Marlin/src/lcd/language/language_fr.h @@ -82,7 +82,7 @@ namespace Language_fr { 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 PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Préchauffage ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Préchauffage ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse"); @@ -162,7 +162,7 @@ namespace Language_fr { LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Réglage fin"); LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Terminer"); LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Créer la grille"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Créer grille $"); LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Impr. grille $"); #endif diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h index 0252cf30ec..c17faa7014 100644 --- a/Marlin/src/lcd/language/language_gl.h +++ b/Marlin/src/lcd/language/language_gl.h @@ -70,7 +70,7 @@ namespace Language_gl { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Axustar Desfases"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfases aplicados"); LSTR MSG_SET_ORIGIN = _UxGT("Fixar orixe"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Prequentar ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Prequentar ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico"); @@ -144,7 +144,7 @@ namespace Language_gl { LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Fin Edición da Malla"); LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crear Malla Person."); LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Crear Malla"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Crear Malla ($)"); LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Validar Malla ($)"); #endif diff --git a/Marlin/src/lcd/language/language_hr.h b/Marlin/src/lcd/language/language_hr.h index e828b489f6..23be8abbb1 100644 --- a/Marlin/src/lcd/language/language_hr.h +++ b/Marlin/src/lcd/language/language_hr.h @@ -54,7 +54,7 @@ namespace Language_hr { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Postavi home offsete"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets postavljeni"); LSTR MSG_SET_ORIGIN = _UxGT("Postavi ishodište"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Predgrij ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Predgrij ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna"); diff --git a/Marlin/src/lcd/language/language_hu.h b/Marlin/src/lcd/language/language_hu.h index 4028ab10cd..faa313e48a 100644 --- a/Marlin/src/lcd/language/language_hu.h +++ b/Marlin/src/lcd/language/language_hu.h @@ -89,7 +89,7 @@ namespace Language_hu { LSTR MSG_TRAMMING_WIZARD = _UxGT("Elektromos varázsló"); LSTR MSG_SELECT_ORIGIN = _UxGT("Eredeti választása"); LSTR MSG_LAST_VALUE_SP = _UxGT("Utolsó érték "); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Fütés ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Fütés ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Fej"); diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index 2e2529a845..44ae49b519 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -95,7 +95,7 @@ namespace Language_it { LSTR MSG_TRAMMING_WIZARD = _UxGT("Wizard Tramming"); LSTR MSG_SELECT_ORIGIN = _UxGT("Selez. origine"); LSTR MSG_LAST_VALUE_SP = _UxGT("Ultimo valore "); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Preriscalda ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Preriscalda ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello"); @@ -186,7 +186,7 @@ namespace Language_it { LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Modif.Mesh fatta"); LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crea Mesh personal."); LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Crea Mesh"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Crea Mesh ($)"); LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Valida Mesh ($)"); #endif diff --git a/Marlin/src/lcd/language/language_jp_kana.h b/Marlin/src/lcd/language/language_jp_kana.h index 1d291ed3ad..16e605cc25 100644 --- a/Marlin/src/lcd/language/language_jp_kana.h +++ b/Marlin/src/lcd/language/language_jp_kana.h @@ -62,7 +62,7 @@ namespace Language_jp_kana { LSTR MSG_SET_HOME_OFFSETS = _UxGT("キジュンオフセットセッテイ"); // "Set home offsets" LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("オフセットガテキヨウサレマシタ"); // "Offsets applied" LSTR MSG_SET_ORIGIN = _UxGT("キジュンセット"); // "Set origin" - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" ヨネツ"); // "Preheat " PREHEAT_1_LABEL LSTR MSG_PREHEAT_1_H = PREHEAT_1_LABEL _UxGT(" ヨネツ ~"); // "Preheat " PREHEAT_1_LABEL LSTR MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" ヨネツノズル"); // " Nozzle" diff --git a/Marlin/src/lcd/language/language_ko_KR.h b/Marlin/src/lcd/language/language_ko_KR.h index 4ecdd5bb2d..50c73f69e9 100644 --- a/Marlin/src/lcd/language/language_ko_KR.h +++ b/Marlin/src/lcd/language/language_ko_KR.h @@ -54,7 +54,7 @@ namespace Language_ko_KR { LSTR MSG_LEVEL_BED_WAITING = _UxGT("누르면 시작합니다"); LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("다음 Point"); LSTR MSG_LEVEL_BED_DONE = _UxGT("레벨링 완료!"); - #if PREHEAT_COUNT + #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(" 노즐"); diff --git a/Marlin/src/lcd/language/language_nl.h b/Marlin/src/lcd/language/language_nl.h index b44d09d07c..42df92b880 100644 --- a/Marlin/src/lcd/language/language_nl.h +++ b/Marlin/src/lcd/language/language_nl.h @@ -54,7 +54,7 @@ namespace Language_nl { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Zet home offsets"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("H offset toegep."); LSTR MSG_SET_ORIGIN = _UxGT("Nulpunt instellen"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" voorverwarmen"); LSTR MSG_PREHEAT_1_H = PREHEAT_1_LABEL _UxGT(" voorverw. ~"); LSTR MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" voorverw. Einde"); diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h index 2dde747378..9105f58bdb 100644 --- a/Marlin/src/lcd/language/language_pl.h +++ b/Marlin/src/lcd/language/language_pl.h @@ -83,7 +83,7 @@ namespace Language_pl { LSTR MSG_SET_ORIGIN = _UxGT("Ustaw punkt zero"); LSTR MSG_SELECT_ORIGIN = _UxGT("Wybierz punkt zero"); LSTR MSG_LAST_VALUE_SP = _UxGT("Poprzednia wartość "); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza"); diff --git a/Marlin/src/lcd/language/language_pt.h b/Marlin/src/lcd/language/language_pt.h index 13f62f693b..524c2c97d8 100644 --- a/Marlin/src/lcd/language/language_pt.h +++ b/Marlin/src/lcd/language/language_pt.h @@ -53,7 +53,7 @@ namespace Language_pt { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Definir desvio"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets aplicados"); LSTR MSG_SET_ORIGIN = _UxGT("Definir origem"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico"); diff --git a/Marlin/src/lcd/language/language_pt_br.h b/Marlin/src/lcd/language/language_pt_br.h index 7d97d48336..c66f717f9d 100644 --- a/Marlin/src/lcd/language/language_pt_br.h +++ b/Marlin/src/lcd/language/language_pt_br.h @@ -68,7 +68,7 @@ namespace Language_pt_br { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Compensar origem"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Alteração aplicada"); LSTR MSG_SET_ORIGIN = _UxGT("Ajustar Origem"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Extrusora ") PREHEAT_1_LABEL; @@ -133,7 +133,7 @@ namespace Language_pt_br { LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Fim da Edição"); LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Montar Malha Custom"); LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Montar "); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Montar $"); LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Checar $"); #endif diff --git a/Marlin/src/lcd/language/language_ro.h b/Marlin/src/lcd/language/language_ro.h index 2eb4c0b996..fee63dc2ad 100644 --- a/Marlin/src/lcd/language/language_ro.h +++ b/Marlin/src/lcd/language/language_ro.h @@ -69,7 +69,7 @@ namespace Language_ro { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Seteaza Offseturile Acasa"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offseturi Aplicate"); LSTR MSG_SET_ORIGIN = _UxGT("Seteaza Originea"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Preincalzeste ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Preincalzeste ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Capatul"); @@ -143,7 +143,7 @@ namespace Language_ro { LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Done Editing Mesh"); LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Build Custom Mesh"); LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Build Mesh"); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Build Mesh ($)"); LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Validate Mesh ($)"); #endif diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h index 2de45e7d8d..e33018b034 100644 --- a/Marlin/src/lcd/language/language_ru.h +++ b/Marlin/src/lcd/language/language_ru.h @@ -106,7 +106,7 @@ namespace Language_ru { #else LSTR MSG_LAST_VALUE_SP = _UxGT("Послед. знач. "); #endif - #if PREHEAT_COUNT + #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(" сопло"); diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h index 81fb9a3d01..76e7f7fbd7 100644 --- a/Marlin/src/lcd/language/language_sk.h +++ b/Marlin/src/lcd/language/language_sk.h @@ -107,7 +107,7 @@ namespace Language_sk { LSTR MSG_TRAMMING_WIZARD = _UxGT("Spriev. vyrovn."); LSTR MSG_SELECT_ORIGIN = _UxGT("Vyberte začiatok"); LSTR MSG_LAST_VALUE_SP = _UxGT("Posl. hodnota "); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Zahriať ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Zahriať ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" hotend"); diff --git a/Marlin/src/lcd/language/language_sv.h b/Marlin/src/lcd/language/language_sv.h index 3b4d6c24c1..cdb902aef0 100644 --- a/Marlin/src/lcd/language/language_sv.h +++ b/Marlin/src/lcd/language/language_sv.h @@ -78,7 +78,7 @@ namespace Language_sv { LSTR MSG_SELECT_ORIGIN = _UxGT("Välj Origo"); LSTR MSG_LAST_VALUE_SP = _UxGT("Senaste värde "); - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Förvärmning ") PREHEAT_1_LABEL; LSTR MSG_PREHEAT_1_H = _UxGT("Förvärmning ") PREHEAT_1_LABEL " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Stoppa"); diff --git a/Marlin/src/lcd/language/language_tr.h b/Marlin/src/lcd/language/language_tr.h index d6f2f52a0c..4c2bbfa0dc 100644 --- a/Marlin/src/lcd/language/language_tr.h +++ b/Marlin/src/lcd/language/language_tr.h @@ -73,7 +73,7 @@ namespace Language_tr { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ofset Ayarla"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofset Tamam"); LSTR MSG_SET_ORIGIN = _UxGT("Sıfır Belirle"); - #if PREHEAT_COUNT + #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 " ~"; LSTR MSG_PREHEAT_1_END = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul"); @@ -146,7 +146,7 @@ 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 PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Mesh Oluştur ($)"); LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Doğrulama Mesh ($)"); #endif diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h index 581a501b49..afba537008 100644 --- a/Marlin/src/lcd/language/language_uk.h +++ b/Marlin/src/lcd/language/language_uk.h @@ -108,7 +108,7 @@ namespace Language_uk { #else LSTR MSG_LAST_VALUE_SP = _UxGT("Останнє знач. "); #endif - #if PREHEAT_COUNT + #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(" сопло"); diff --git a/Marlin/src/lcd/language/language_vi.h b/Marlin/src/lcd/language/language_vi.h index 9a4ef464b5..ae0babbf8b 100644 --- a/Marlin/src/lcd/language/language_vi.h +++ b/Marlin/src/lcd/language/language_vi.h @@ -64,7 +64,7 @@ namespace Language_vi { LSTR MSG_SET_HOME_OFFSETS = _UxGT("Đặt bù đắp nhà"); // Set home offsets LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Bù đắp được áp dụng"); // Offsets applied LSTR MSG_SET_ORIGIN = _UxGT("Đặt nguồn gốc"); // Set origin - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước"); // Preheat LSTR MSG_PREHEAT_1_H = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ~"); // Preheat LSTR MSG_PREHEAT_1_END = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu"); @@ -126,7 +126,7 @@ namespace Language_vi { LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Chỉnh sửa xong lưới"); // Done Editing Mesh LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Xây dựng lưới tự chọn"); // Build Custom Mesh LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Xây dựng lưới"); // Build Mesh - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Xây dựng lưới ($)"); LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Thẩm tra lưới ($)"); #endif diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h index afa51689cf..d61634e431 100644 --- a/Marlin/src/lcd/language/language_zh_CN.h +++ b/Marlin/src/lcd/language/language_zh_CN.h @@ -68,7 +68,7 @@ namespace Language_zh_CN { LSTR MSG_SET_HOME_OFFSETS = _UxGT("设置原点偏移"); // "Set home offsets" LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("偏移已启用"); // "Offsets applied" LSTR MSG_SET_ORIGIN = _UxGT("设置原点"); // "Set origin" - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("预热 ") PREHEAT_1_LABEL; // "Preheat PREHEAT_2_LABEL" LSTR MSG_PREHEAT_1_H = _UxGT("预热 ") PREHEAT_1_LABEL " ~"; // "Preheat PREHEAT_2_LABEL" LSTR MSG_PREHEAT_1_END = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴"); //MSG_PREHEAT_1 " " @@ -142,7 +142,7 @@ namespace Language_zh_CN { LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("完成编辑网格"); // "Done Editing Mesh" LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("创设客户网格"); // "Build Custom Mesh" LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("创设网格"); // "Build Mesh" - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_UBL_BUILD_MESH_M = _UxGT("创设 $ 网格"); // "Build PREHEAT_1_LABEL Mesh" LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("批准 $ 网格"); // "Validate PREHEAT_1_LABEL Mesh" #endif diff --git a/Marlin/src/lcd/language/language_zh_TW.h b/Marlin/src/lcd/language/language_zh_TW.h index 01b11225e3..7680721b00 100644 --- a/Marlin/src/lcd/language/language_zh_TW.h +++ b/Marlin/src/lcd/language/language_zh_TW.h @@ -66,7 +66,7 @@ namespace Language_zh_TW { LSTR MSG_SET_HOME_OFFSETS = _UxGT("設置原點偏移"); // "Set home offsets" LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("偏移已啟用"); // "Offsets applied" LSTR MSG_SET_ORIGIN = _UxGT("設置原點"); // "Set origin" - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = _UxGT("預熱 ") PREHEAT_1_LABEL; // "Preheat PREHEAT_1_LABEL" LSTR MSG_PREHEAT_1_H = _UxGT("預熱 ") PREHEAT_1_LABEL " ~"; // "Preheat PREHEAT_1_LABEL" LSTR MSG_PREHEAT_1_END = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴"); //MSG_PREHEAT_1 " " @@ -139,7 +139,7 @@ namespace Language_zh_TW { LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("完成編輯網格"); // "Done Editing Mesh" LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("創設客戶網格"); // "Build Custom Mesh" LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("創設網格"); // "Build Mesh" - #if PREHEAT_COUNT + #if HAS_PREHEAT LSTR MSG_UBL_BUILD_MESH_M = _UxGT("創設 $ 網格"); // "Build PREHEAT_1_LABEL Mesh" LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("批准 $ 網格"); // "Validate PREHEAT_1_LABEL Mesh" #endif diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index ae169cdab6..2757e6d47a 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -134,7 +134,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; } #endif -#if PREHEAT_COUNT +#if HAS_PREHEAT preheat_t MarlinUI::material_preset[PREHEAT_COUNT]; // Initialized by settings.load() PGM_P MarlinUI::get_preheat_label(const uint8_t m) { #define _PDEF(N) static PGMSTR(preheat_##N##_label, PREHEAT_##N##_LABEL); diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index 883850d6e0..63e1eb5b0d 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -116,7 +116,7 @@ }; #endif -#if PREHEAT_COUNT +#if HAS_PREHEAT typedef struct { #if HAS_HOTEND celsius_t hotend_temp; @@ -497,7 +497,7 @@ public: static const char * scrolled_filename(CardReader &theCard, const uint8_t maxlen, uint8_t hash, const bool doScroll); #endif - #if PREHEAT_COUNT + #if HAS_PREHEAT static preheat_t material_preset[PREHEAT_COUNT]; static PGM_P get_preheat_label(const uint8_t m); #endif diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 0e11cd211a..9e1f455a64 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -310,7 +310,7 @@ void menu_advanced_settings(); #endif -#if PREHEAT_COUNT && DISABLED(SLIM_LCD_MENUS) +#if HAS_PREHEAT && DISABLED(SLIM_LCD_MENUS) void _menu_configuration_preheat_settings() { #define _MINTEMP_ITEM(N) HEATER_##N##_MINTEMP, @@ -547,7 +547,7 @@ void menu_configuration() { #endif // Preheat configurations - #if PREHEAT_COUNT && DISABLED(SLIM_LCD_MENUS) + #if HAS_PREHEAT && DISABLED(SLIM_LCD_MENUS) LOOP_L_N(m, PREHEAT_COUNT) SUBMENU_N_S(m, ui.get_preheat_label(m), MSG_PREHEAT_M_SETTINGS, _menu_configuration_preheat_settings); #endif diff --git a/Marlin/src/lcd/menu/menu_filament.cpp b/Marlin/src/lcd/menu/menu_filament.cpp index 7d0d2dc72c..e7365744e9 100644 --- a/Marlin/src/lcd/menu/menu_filament.cpp +++ b/Marlin/src/lcd/menu/menu_filament.cpp @@ -90,7 +90,7 @@ void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) { START_MENU(); if (LCD_HEIGHT >= 4) STATIC_ITEM_P(change_filament_header(mode), SS_DEFAULT|SS_INVERT); BACK_ITEM(MSG_BACK); - #if PREHEAT_COUNT + #if HAS_PREHEAT LOOP_L_N(m, PREHEAT_COUNT) ACTION_ITEM_N_S(m, ui.get_preheat_label(m), MSG_PREHEAT_M, _change_filament_with_preset); #endif diff --git a/Marlin/src/lcd/menu/menu_temperature.cpp b/Marlin/src/lcd/menu/menu_temperature.cpp index 3abb2e9c20..5524793b19 100644 --- a/Marlin/src/lcd/menu/menu_temperature.cpp +++ b/Marlin/src/lcd/menu/menu_temperature.cpp @@ -69,7 +69,7 @@ void Temperature::lcd_preheat(const uint8_t e, const int8_t indh, const int8_t i ui.return_to_status(); } -#if PREHEAT_COUNT +#if HAS_PREHEAT #if HAS_TEMP_HOTEND inline void _preheat_end(const uint8_t m, const uint8_t e) { thermalManager.lcd_preheat(e, m, -1); } @@ -138,7 +138,7 @@ void Temperature::lcd_preheat(const uint8_t e, const int8_t indh, const int8_t i #endif // HAS_MULTI_HOTEND || HAS_HEATED_BED -#endif // PREHEAT_COUNT +#endif // HAS_PREHEAT #if HAS_TEMP_HOTEND || HAS_HEATED_BED @@ -263,7 +263,7 @@ void menu_temperature() { #endif // HAS_FAN - #if PREHEAT_COUNT + #if HAS_PREHEAT // // Preheat for all Materials // diff --git a/Marlin/src/lcd/menu/menu_ubl.cpp b/Marlin/src/lcd/menu/menu_ubl.cpp index 8dea7d943d..a08eceed77 100644 --- a/Marlin/src/lcd/menu/menu_ubl.cpp +++ b/Marlin/src/lcd/menu/menu_ubl.cpp @@ -208,7 +208,7 @@ void _lcd_ubl_edit_mesh() { void _lcd_ubl_validate_mesh() { START_MENU(); BACK_ITEM(MSG_UBL_TOOLS); - #if PREHEAT_COUNT + #if HAS_PREHEAT #if HAS_HEATED_BED #define VALIDATE_MESH_GCODE_ITEM(M) \ GCODES_ITEM_N_S(M, ui.get_preheat_label(M), MSG_UBL_VALIDATE_MESH_M, PSTR("G28\nG26CPI" STRINGIFY(M))) @@ -230,7 +230,7 @@ void _lcd_ubl_edit_mesh() { #endif #endif #endif - #endif // PREHEAT_COUNT + #endif // HAS_PREHEAT ACTION_ITEM(MSG_UBL_VALIDATE_CUSTOM_MESH, _lcd_ubl_validate_custom_mesh); ACTION_ITEM(MSG_INFO_SCREEN, ui.return_to_status); END_MENU(); @@ -324,7 +324,7 @@ void _lcd_ubl_invalidate() { void _lcd_ubl_build_mesh() { START_MENU(); BACK_ITEM(MSG_UBL_TOOLS); - #if PREHEAT_COUNT + #if HAS_PREHEAT #if HAS_HEATED_BED #define PREHEAT_BED_GCODE(M) "M190I" STRINGIFY(M) "\n" #else @@ -352,7 +352,7 @@ void _lcd_ubl_build_mesh() { #endif #endif #endif - #endif // PREHEAT_COUNT + #endif // HAS_PREHEAT SUBMENU(MSG_UBL_BUILD_CUSTOM_MESH, _lcd_ubl_custom_mesh); GCODES_ITEM(MSG_UBL_BUILD_COLD_MESH, PSTR("G29NP1")); diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 6b7143e82a..c82f5aad0d 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -317,7 +317,7 @@ typedef struct SettingsDataStruct { // // Material Presets // - #if PREHEAT_COUNT + #if HAS_PREHEAT preheat_t ui_material_preset[PREHEAT_COUNT]; // M145 S0 H B F #endif @@ -918,7 +918,7 @@ void MarlinSettings::postprocess() { // // LCD Preheat settings // - #if PREHEAT_COUNT + #if HAS_PREHEAT _FIELD_TEST(ui_material_preset); EEPROM_WRITE(ui.material_preset); #endif @@ -1786,7 +1786,7 @@ void MarlinSettings::postprocess() { // // LCD Preheat settings // - #if PREHEAT_COUNT + #if HAS_PREHEAT _FIELD_TEST(ui_material_preset); EEPROM_READ(ui.material_preset); #endif @@ -2796,7 +2796,7 @@ void MarlinSettings::reset() { // // Preheat parameters // - #if PREHEAT_COUNT + #if HAS_PREHEAT #define _PITEM(N,T) PREHEAT_##N##_##T, #if HAS_HOTEND constexpr uint16_t hpre[] = { REPEAT2_S(1, INCREMENT(PREHEAT_COUNT), _PITEM, TEMP_HOTEND) }; @@ -3181,7 +3181,7 @@ void MarlinSettings::reset() { // // LCD Preheat Settings // - #if PREHEAT_COUNT + #if HAS_PREHEAT gcode.M145_report(forReplay); #endif From b09038fcc72bc8df4ec8a7014597586e0b0390ca Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 27 Oct 2021 20:01:44 -0500 Subject: [PATCH 070/532] =?UTF-8?q?=F0=9F=8E=A8=20Standard=20material=20pr?= =?UTF-8?q?esets=20behavior?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/creality/dwin.cpp | 211 ++++++++++-------- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 18 +- Marlin/src/lcd/e3v2/jyersui/dwin.cpp | 110 +++------ .../src/lcd/extui/dgus/DGUSScreenHandler.cpp | 54 +---- Marlin/src/lcd/extui/ui_api.cpp | 5 +- Marlin/src/lcd/marlinui.cpp | 11 + Marlin/src/lcd/marlinui.h | 8 +- 7 files changed, 178 insertions(+), 239 deletions(-) diff --git a/Marlin/src/lcd/e3v2/creality/dwin.cpp b/Marlin/src/lcd/e3v2/creality/dwin.cpp index a27762d71e..82623d7c7d 100644 --- a/Marlin/src/lcd/e3v2/creality/dwin.cpp +++ b/Marlin/src/lcd/e3v2/creality/dwin.cpp @@ -166,8 +166,14 @@ typedef struct { select_t select_page{0}, select_file{0}, select_print{0}, select_prepare{0} , select_control{0}, select_axis{0}, select_temp{0}, select_motion{0}, select_tune{0} - , select_advset{0}, select_PLA{0}, select_ABS{0} - , select_speed{0}, select_acc{0}, select_jerk{0}, select_step{0}, select_item{0}; + , select_advset{0}, select_speed{0}, select_acc{0}, select_jerk{0}, select_step{0}, select_item{0}; + +#if HAS_PREHEAT + select_t select_PLA{0}; + #if PREHEAT_COUNT > 1 + select_t select_ABS{0}; + #endif +#endif uint8_t index_file = MROWS, index_prepare = MROWS, @@ -492,8 +498,8 @@ inline bool Apply_Encoder(const EncoderState &encoder_diffState, T &valref) { #define PREPARE_CASE_DISA 2 #define PREPARE_CASE_HOME 3 #define PREPARE_CASE_ZOFF (PREPARE_CASE_HOME + ENABLED(HAS_ZOFFSET_ITEM)) -#define PREPARE_CASE_PLA (PREPARE_CASE_ZOFF + ENABLED(HAS_HOTEND)) -#define PREPARE_CASE_ABS (PREPARE_CASE_PLA + ENABLED(HAS_HOTEND)) +#define PREPARE_CASE_PLA (PREPARE_CASE_ZOFF + ENABLED(HAS_PREHEAT)) +#define PREPARE_CASE_ABS (PREPARE_CASE_PLA + (TERN0(HAS_PREHEAT, PREHEAT_COUNT > 1))) #define PREPARE_CASE_COOL (PREPARE_CASE_ABS + EITHER(HAS_HOTEND, HAS_HEATED_BED)) #define PREPARE_CASE_LANG (PREPARE_CASE_COOL + 1) #define PREPARE_CASE_TOTAL PREPARE_CASE_LANG @@ -517,8 +523,8 @@ inline bool Apply_Encoder(const EncoderState &encoder_diffState, T &valref) { #define TEMP_CASE_TEMP (0 + ENABLED(HAS_HOTEND)) #define TEMP_CASE_BED (TEMP_CASE_TEMP + ENABLED(HAS_HEATED_BED)) #define TEMP_CASE_FAN (TEMP_CASE_BED + ENABLED(HAS_FAN)) -#define TEMP_CASE_PLA (TEMP_CASE_FAN + ENABLED(HAS_HOTEND)) -#define TEMP_CASE_ABS (TEMP_CASE_PLA + ENABLED(HAS_HOTEND)) +#define TEMP_CASE_PLA (TEMP_CASE_FAN + ENABLED(HAS_PREHEAT)) +#define TEMP_CASE_ABS (TEMP_CASE_PLA + (TERN0(HAS_PREHEAT, PREHEAT_COUNT > 1))) #define TEMP_CASE_TOTAL TEMP_CASE_ABS #define PREHEAT_CASE_TEMP (0 + ENABLED(HAS_HOTEND)) @@ -785,6 +791,8 @@ void Draw_Prepare_Menu() { #if PREHEAT_COUNT > 1 if (PVISI(PREPARE_CASE_ABS)) Item_Prepare_ABS(PSCROL(PREPARE_CASE_ABS)); // Preheat ABS #endif + #endif + #if HAS_HOTEND || HAS_HEATED_BED if (PVISI(PREPARE_CASE_COOL)) Item_Prepare_Cool(PSCROL(PREPARE_CASE_COOL)); // Cooldown #endif if (PVISI(PREPARE_CASE_LANG)) Item_Prepare_Lang(PSCROL(PREPARE_CASE_LANG)); // Language CN/EN @@ -2664,10 +2672,10 @@ void HMI_Prepare() { // Draw "More" icon for sub-menus if (index_prepare < 7) Draw_More_Icon(MROWS - index_prepare + 1); - #if HAS_HOTEND + #if PREHEAT_COUNT > 1 if (index_prepare == PREPARE_CASE_ABS) Item_Prepare_ABS(MROWS); #endif - #if HAS_PREHEAT + #if HAS_HOTEND || HAS_HEATED_BED if (index_prepare == PREPARE_CASE_COOL) Item_Prepare_Cool(MROWS); #endif if (index_prepare == PREPARE_CASE_LANG) Item_Prepare_Lang(MROWS); @@ -2743,16 +2751,13 @@ void HMI_Prepare() { break; #endif #if HAS_PREHEAT - case PREPARE_CASE_PLA: - TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[0].hotend_temp, 0)); - TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(ui.material_preset[0].bed_temp)); - TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[0].fan_speed)); - break; - case PREPARE_CASE_ABS: - TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[1].hotend_temp, 0)); - TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(ui.material_preset[1].bed_temp)); - TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[1].fan_speed)); - break; + case PREPARE_CASE_PLA: ui.preheat_all(0); break; + #if PREHEAT_COUNT > 1 + case PREPARE_CASE_ABS: ui.preheat_all(1); break; + #endif + #endif + + #if HAS_HOTEND || HAS_HEATED_BED case PREPARE_CASE_COOL: TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); #if HAS_HOTEND || HAS_HEATED_BED @@ -2760,6 +2765,7 @@ void HMI_Prepare() { #endif break; #endif + case PREPARE_CASE_LANG: HMI_ToggleLanguage(); Draw_Prepare_Menu(); @@ -2784,9 +2790,11 @@ void Draw_Temperature_Menu() { #if HAS_FAN Item_AreaCopy(115, 134, 170, 146, TEMP_CASE_FAN); #endif - #if HAS_HOTEND + #if HAS_PREHEAT Item_AreaCopy(100, 89, 178, 101, TEMP_CASE_PLA); - Item_AreaCopy(180, 89, 260, 100, TEMP_CASE_ABS); + #if PREHEAT_COUNT > 1 + Item_AreaCopy(180, 89, 260, 100, TEMP_CASE_ABS); + #endif #endif } else { @@ -2805,30 +2813,33 @@ void Draw_Temperature_Menu() { #if HAS_FAN DWIN_Draw_Label(TEMP_CASE_FAN, GET_TEXT_F(MSG_FAN_SPEED)); #endif - #if HAS_HOTEND + #if HAS_PREHEAT DWIN_Draw_Label(TEMP_CASE_PLA, F(PREHEAT_1_LABEL " Preheat Settings")); - DWIN_Draw_Label(TEMP_CASE_ABS, F(PREHEAT_2_LABEL " Preheat Settings")); + #if PREHEAT_COUNT > 1 + DWIN_Draw_Label(TEMP_CASE_ABS, F(PREHEAT_2_LABEL " Preheat Settings")); + #endif #endif #else #if HAS_HOTEND - Item_AreaCopy(197, 104, 238, 114, TEMP_CASE_TEMP); // "Nozzle" - Item_AreaCopy(1, 89, 83, 101, TEMP_CASE_TEMP, 44); // "Temperature" + Item_AreaCopy(197, 104, 238, 114, TEMP_CASE_TEMP); // "Nozzle" + Item_AreaCopy(1, 89, 83, 101, TEMP_CASE_TEMP, 44); // "Temperature" #endif #if HAS_HEATED_BED - Item_AreaCopy(240, 104, 264, 114, TEMP_CASE_BED); // "Bed" - Item_AreaCopy(1, 89, 83, 101, TEMP_CASE_BED, 27); // "Temperature" + Item_AreaCopy(240, 104, 264, 114, TEMP_CASE_BED); // "Bed" + Item_AreaCopy(1, 89, 83, 101, TEMP_CASE_BED, 27); // "Temperature" #endif #if HAS_FAN - Item_AreaCopy( 1, 119, 61, 132, TEMP_CASE_FAN); // "Fan speed" + Item_AreaCopy( 1, 119, 61, 132, TEMP_CASE_FAN); // "Fan speed" #endif - #if HAS_HOTEND - Item_AreaCopy(107, 76, 156, 86, TEMP_CASE_PLA); // "Preheat" - say_pla_en(52, TEMP_CASE_PLA); // "PLA" - Item_AreaCopy(150, 135, 202, 148, TEMP_CASE_PLA, 79); // "Settings" - - Item_AreaCopy(107, 76, 156, 86, TEMP_CASE_ABS); // "Preheat" - say_abs_en(52, TEMP_CASE_ABS); // "ABS" - Item_AreaCopy(150, 135, 202, 148, TEMP_CASE_ABS, 81); // "Settings" + #if HAS_PREHEAT + Item_AreaCopy(107, 76, 156, 86, TEMP_CASE_PLA); // "Preheat" + say_pla_en(52, TEMP_CASE_PLA); // "PLA" + Item_AreaCopy(150, 135, 202, 148, TEMP_CASE_PLA, 79); // "Settings" + #if PREHEAT_COUNT > 1 + Item_AreaCopy(107, 76, 156, 86, TEMP_CASE_ABS); // "Preheat" + say_abs_en(52, TEMP_CASE_ABS); // "ABS" + Item_AreaCopy(150, 135, 202, 148, TEMP_CASE_ABS, 81); // "Settings" + #endif #endif #endif } @@ -2851,12 +2862,12 @@ void Draw_Temperature_Menu() { _TMENU_ICON(TEMP_CASE_FAN); Draw_Edit_Integer3(i, thermalManager.fan_speed[0]); #endif - #if HAS_HOTEND + #if HAS_PREHEAT // PLA/ABS items have submenus - _TMENU_ICON(TEMP_CASE_PLA); - Draw_More_Icon(i); - _TMENU_ICON(TEMP_CASE_ABS); - Draw_More_Icon(i); + _TMENU_ICON(TEMP_CASE_PLA); Draw_More_Icon(i); + #if PREHEAT_COUNT > 1 + _TMENU_ICON(TEMP_CASE_ABS); Draw_More_Icon(i); + #endif #endif } @@ -3076,6 +3087,7 @@ void HMI_Temperature() { EncoderRate.enabled = true; break; #endif + #if HAS_PREHEAT case TEMP_CASE_PLA: { checkkey = PLAPreheat; @@ -3153,7 +3165,8 @@ void HMI_Temperature() { Draw_Menu_Line(++i, ICON_WriteEEPROM); #endif } break; - #endif + #endif // HAS_PREHEAT + #if PREHEAT_COUNT > 1 case TEMP_CASE_ABS: { // ABS preheat setting checkkey = ABSPreheat; @@ -3236,7 +3249,7 @@ void HMI_Temperature() { } break; - #endif // HAS_HOTEND + #endif // PREHEAT_COUNT > 1 } } DWIN_UpdateLCD(); @@ -3579,14 +3592,12 @@ void HMI_AdvSet() { #if HAS_HOTEND case ADVSET_CASE_HEPID: - thermalManager.setTargetHotend(ui.material_preset[0].hotend_temp, 0); thermalManager.PID_autotune(ui.material_preset[0].hotend_temp, H_E0, 10, true); break; #endif #if HAS_HEATED_BED case ADVSET_CASE_BEDPID: - thermalManager.setTargetBed(ui.material_preset[0].bed_temp); thermalManager.PID_autotune(ui.material_preset[0].bed_temp, H_BED, 10, true); break; #endif @@ -3881,63 +3892,65 @@ void HMI_Tune() { DWIN_UpdateLCD(); } - // ABS Preheat - void HMI_ABSPreheatSetting() { - EncoderState encoder_diffState = get_encoder_state(); - if (encoder_diffState == ENCODER_DIFF_NO) return; + #if PREHEAT_COUNT > 1 + // ABS Preheat + void HMI_ABSPreheatSetting() { + EncoderState encoder_diffState = get_encoder_state(); + if (encoder_diffState == ENCODER_DIFF_NO) return; - // Avoid flicker by updating only the previous menu - if (encoder_diffState == ENCODER_DIFF_CW) { - if (select_ABS.inc(1 + PREHEAT_CASE_TOTAL)) Move_Highlight(1, select_ABS.now); - } - else if (encoder_diffState == ENCODER_DIFF_CCW) { - if (select_ABS.dec()) Move_Highlight(-1, select_ABS.now); - } - else if (encoder_diffState == ENCODER_DIFF_ENTER) { - switch (select_ABS.now) { - case CASE_BACK: - checkkey = TemperatureID; - select_temp.now = TEMP_CASE_ABS; - HMI_ValueStruct.show_mode = -1; - Draw_Temperature_Menu(); - break; - #if HAS_HOTEND - case PREHEAT_CASE_TEMP: - checkkey = ETemp; - HMI_ValueStruct.E_Temp = ui.material_preset[1].hotend_temp; - Draw_Edit_Integer3(PREHEAT_CASE_TEMP, ui.material_preset[1].hotend_temp, true); - EncoderRate.enabled = true; - break; - #endif - #if HAS_HEATED_BED - case PREHEAT_CASE_BED: - checkkey = BedTemp; - HMI_ValueStruct.Bed_Temp = ui.material_preset[1].bed_temp; - Draw_Edit_Integer3(PREHEAT_CASE_BED, ui.material_preset[1].bed_temp, true); - EncoderRate.enabled = true; - break; - #endif - #if HAS_FAN - case PREHEAT_CASE_FAN: - checkkey = FanSpeed; - HMI_ValueStruct.Fan_speed = ui.material_preset[1].fan_speed; - Draw_Edit_Integer3(PREHEAT_CASE_FAN, ui.material_preset[1].fan_speed, true); - EncoderRate.enabled = true; - break; - #endif - #if ENABLED(EEPROM_SETTINGS) - case PREHEAT_CASE_SAVE: { - const bool success = settings.save(); - HMI_AudioFeedback(success); - } break; - #endif - default: break; + // Avoid flicker by updating only the previous menu + if (encoder_diffState == ENCODER_DIFF_CW) { + if (select_ABS.inc(1 + PREHEAT_CASE_TOTAL)) Move_Highlight(1, select_ABS.now); } + else if (encoder_diffState == ENCODER_DIFF_CCW) { + if (select_ABS.dec()) Move_Highlight(-1, select_ABS.now); + } + else if (encoder_diffState == ENCODER_DIFF_ENTER) { + switch (select_ABS.now) { + case CASE_BACK: + checkkey = TemperatureID; + select_temp.now = TEMP_CASE_ABS; + HMI_ValueStruct.show_mode = -1; + Draw_Temperature_Menu(); + break; + #if HAS_HOTEND + case PREHEAT_CASE_TEMP: + checkkey = ETemp; + HMI_ValueStruct.E_Temp = ui.material_preset[1].hotend_temp; + Draw_Edit_Integer3(PREHEAT_CASE_TEMP, ui.material_preset[1].hotend_temp, true); + EncoderRate.enabled = true; + break; + #endif + #if HAS_HEATED_BED + case PREHEAT_CASE_BED: + checkkey = BedTemp; + HMI_ValueStruct.Bed_Temp = ui.material_preset[1].bed_temp; + Draw_Edit_Integer3(PREHEAT_CASE_BED, ui.material_preset[1].bed_temp, true); + EncoderRate.enabled = true; + break; + #endif + #if HAS_FAN + case PREHEAT_CASE_FAN: + checkkey = FanSpeed; + HMI_ValueStruct.Fan_speed = ui.material_preset[1].fan_speed; + Draw_Edit_Integer3(PREHEAT_CASE_FAN, ui.material_preset[1].fan_speed, true); + EncoderRate.enabled = true; + break; + #endif + #if ENABLED(EEPROM_SETTINGS) + case PREHEAT_CASE_SAVE: { + const bool success = settings.save(); + HMI_AudioFeedback(success); + } break; + #endif + default: break; + } + } + DWIN_UpdateLCD(); } - DWIN_UpdateLCD(); - } + #endif // PREHEAT_COUNT > 1 -#endif +#endif // HAS_PREHEAT // Max Speed void HMI_MaxSpeed() { @@ -4241,7 +4254,9 @@ void DWIN_HandleScreen() { case Tune: HMI_Tune(); break; #if HAS_PREHEAT case PLAPreheat: HMI_PLAPreheatSetting(); break; - case ABSPreheat: HMI_ABSPreheatSetting(); break; + #if PREHEAT_COUNT > 1 + case ABSPreheat: HMI_ABSPreheatSetting(); break; + #endif #endif case MaxSpeed: HMI_MaxSpeed(); break; case MaxAcceleration: HMI_MaxAcceleration(); break; diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index 22de4d720b..3d5a56c869 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -2116,21 +2116,15 @@ void SetHome() { #endif #if HAS_PREHEAT - void SetPreheat(const uint8_t i) { - TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[i].hotend_temp, 0)); - TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(ui.material_preset[i].bed_temp)); - TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[i].fan_speed)); - } - void SetPreheat0() { SetPreheat(0); } - void SetPreheat1() { SetPreheat(1); } - void SetPreheat2() { SetPreheat(2); } - void SetCoolDown() { TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); #if HAS_HOTEND || HAS_HEATED_BED thermalManager.disable_all_heaters(); #endif } + void DoPreheat0() { ui.preheat_all(0); } + void DoPreheat1() { ui.preheat_all(1); } + void DoPreheat2() { ui.preheat_all(2); } #endif void SetLanguage() { @@ -3125,12 +3119,12 @@ void Draw_Prepare_Menu() { #endif #endif #if HAS_PREHEAT - ADDMENUITEM(ICON_PLAPreheat, GET_TEXT_F(MSG_PREHEAT_1), onDrawPreheat1, SetPreheat0); + ADDMENUITEM(ICON_PLAPreheat, GET_TEXT_F(MSG_PREHEAT_1), onDrawPreheat1, DoPreheat0); #if PREHEAT_COUNT > 1 - ADDMENUITEM(ICON_ABSPreheat, PSTR("Preheat " PREHEAT_2_LABEL), onDrawPreheat2, SetPreheat1); + ADDMENUITEM(ICON_ABSPreheat, PSTR("Preheat " PREHEAT_2_LABEL), onDrawPreheat2, DoPreheat1); #endif #if PREHEAT_COUNT > 2 - ADDMENUITEM(ICON_CustomPreheat, GET_TEXT_F(MSG_PREHEAT_CUSTOM), onDrawMenuItem, SetPreheat2); + ADDMENUITEM(ICON_CustomPreheat, GET_TEXT_F(MSG_PREHEAT_CUSTOM), onDrawMenuItem, DoPreheat2); #endif ADDMENUITEM(ICON_Cool, GET_TEXT_F(MSG_COOLDOWN), onDrawCooldown, SetCoolDown); #endif diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp index 9cecf202b2..54266e717b 100644 --- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp @@ -1584,9 +1584,9 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/ } break; #endif - #if HAS_PREHEAT - case Preheat: + #if HAS_PREHEAT + case Preheat: { #define PREHEAT_BACK 0 #define PREHEAT_MODE (PREHEAT_BACK + 1) #define PREHEAT_1 (PREHEAT_MODE + 1) @@ -1596,6 +1596,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/ #define PREHEAT_5 (PREHEAT_4 + (PREHEAT_COUNT >= 5)) #define PREHEAT_TOTAL PREHEAT_5 + auto do_preheat = [](const uint8_t m) { + thermalManager.disable_all_heaters(); + TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); + if (preheatmode == 0 || preheatmode == 1) { ui.preheat_hotend_and_fan(m); } + if (preheatmode == 0 || preheatmode == 2) ui.preheat_bed(m); + }; + switch (item) { case PREHEAT_BACK: if (draw) @@ -1616,17 +1623,8 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/ case PREHEAT_1: if (draw) Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_1_LABEL)); - else { - thermalManager.disable_all_heaters(); - TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); - if (preheatmode == 0 || preheatmode == 1) { - TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[0].hotend_temp, 0)); - TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[0].fan_speed)); - } - #if HAS_HEATED_BED - if (preheatmode == 0 || preheatmode == 2) thermalManager.setTargetBed(ui.material_preset[0].bed_temp); - #endif - } + else + do_preheat(0); break; #endif @@ -1634,17 +1632,8 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/ case PREHEAT_2: if (draw) Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_2_LABEL)); - else { - thermalManager.disable_all_heaters(); - TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); - if (preheatmode == 0 || preheatmode == 1) { - TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[1].hotend_temp, 0)); - TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[1].fan_speed)); - } - #if HAS_HEATED_BED - if (preheatmode == 0 || preheatmode == 2) thermalManager.setTargetBed(ui.material_preset[1].bed_temp); - #endif - } + else + do_preheat(1); break; #endif @@ -1652,17 +1641,8 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/ case PREHEAT_3: if (draw) Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_3_LABEL)); - else { - thermalManager.disable_all_heaters(); - TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); - if (preheatmode == 0 || preheatmode == 1) { - TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[2].hotend_temp, 0)); - TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[2].fan_speed)); - } - #if HAS_HEATED_BED - if (preheatmode == 0 || preheatmode == 2) thermalManager.setTargetBed(ui.material_preset[2].bed_temp); - #endif - } + else + do_preheat(2); break; #endif @@ -1670,17 +1650,8 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/ case PREHEAT_4: if (draw) Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_4_LABEL)); - else { - thermalManager.disable_all_heaters(); - TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); - if (preheatmode == 0 || preheatmode == 1) { - TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[3].hotend_temp, 0)); - TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[3].fan_speed)); - } - #if HAS_HEATED_BED - if (preheatmode == 0 || preheatmode == 2) thermalManager.setTargetBed(ui.material_preset[3].bed_temp); - #endif - } + else + do_preheat(3); break; #endif @@ -1688,22 +1659,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/ case PREHEAT_5: if (draw) Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_5_LABEL)); - else { - thermalManager.disable_all_heaters(); - TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); - if (preheatmode == 0 || preheatmode == 1) { - TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[4].hotend_temp, 0)); - TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[4].fan_speed)); - } - #if HAS_HEATED_BED - if (preheatmode == 0 || preheatmode == 2) thermalManager.setTargetBed(ui.material_preset[4].bed_temp); - #endif - } + else + do_preheat(4); break; #endif } - break; - #endif + } break; + #endif // HAS_PREHEAT #if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES) case ChangeFilament: @@ -3964,50 +3926,40 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/ case PREHEATHOTEND_1: if (draw) Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_1_LABEL)); - else { - thermalManager.setTargetHotend(ui.material_preset[0].hotend_temp, 0); - thermalManager.set_fan_speed(0, ui.material_preset[0].fan_speed); - } + else + ui.preheat_hotend_and_fan(0); break; #endif #if PREHEAT_COUNT >= 2 case PREHEATHOTEND_2: if (draw) Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_2_LABEL)); - else { - thermalManager.setTargetHotend(ui.material_preset[1].hotend_temp, 0); - thermalManager.set_fan_speed(0, ui.material_preset[1].fan_speed); - } + else + ui.preheat_hotend_and_fan(1); break; #endif #if PREHEAT_COUNT >= 3 case PREHEATHOTEND_3: if (draw) Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_3_LABEL)); - else { - thermalManager.setTargetHotend(ui.material_preset[2].hotend_temp, 0); - thermalManager.set_fan_speed(0, ui.material_preset[2].fan_speed); - } + else + ui.preheat_hotend_and_fan(2); break; #endif #if PREHEAT_COUNT >= 4 case PREHEATHOTEND_4: if (draw) Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_4_LABEL)); - else { - thermalManager.setTargetHotend(ui.material_preset[3].hotend_temp, 0); - thermalManager.set_fan_speed(0, ui.material_preset[3].fan_speed); - } + else + ui.preheat_hotend_and_fan(3); break; #endif #if PREHEAT_COUNT >= 5 case PREHEATHOTEND_5: if (draw) Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_5_LABEL)); - else { - thermalManager.setTargetHotend(ui.material_preset[4].hotend_temp, 0); - thermalManager.set_fan_speed(0, ui.material_preset[4].fan_speed); - } + else + ui.preheat_hotend_and_fan(4); break; #endif case PREHEATHOTEND_CUSTOM: diff --git a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp index be08b074ff..be00b9c73a 100644 --- a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp @@ -621,55 +621,19 @@ void DGUSScreenHandler::HandleHeaterControl(DGUS_VP_Variable &var, void *val_ptr void DGUSScreenHandler::HandlePreheat(DGUS_VP_Variable &var, void *val_ptr) { DEBUG_ECHOLNPGM("HandlePreheat"); - uint8_t e_temp = 0; - #if HAS_HEATED_BED - uint8_t bed_temp = 0; - #endif const uint16_t preheat_option = swap16(*(uint16_t*)val_ptr); switch (preheat_option) { default: - case 0: // Preheat PLA - #if defined(PREHEAT_1_TEMP_HOTEND) && defined(PREHEAT_1_TEMP_BED) - e_temp = PREHEAT_1_TEMP_HOTEND; - TERN_(HAS_HEATED_BED, bed_temp = PREHEAT_1_TEMP_BED); - #endif - break; - case 1: // Preheat ABS - #if defined(PREHEAT_2_TEMP_HOTEND) && defined(PREHEAT_2_TEMP_BED) - e_temp = PREHEAT_2_TEMP_HOTEND; - TERN_(HAS_HEATED_BED, bed_temp = PREHEAT_2_TEMP_BED); - #endif - break; - case 2: // Preheat PET - #if defined(PREHEAT_3_TEMP_HOTEND) && defined(PREHEAT_3_TEMP_BED) - e_temp = PREHEAT_3_TEMP_HOTEND; - TERN_(HAS_HEATED_BED, bed_temp = PREHEAT_3_TEMP_BED); - #endif - break; - case 3: // Preheat FLEX - #if defined(PREHEAT_4_TEMP_HOTEND) && defined(PREHEAT_4_TEMP_BED) - e_temp = PREHEAT_4_TEMP_HOTEND; - TERN_(HAS_HEATED_BED, bed_temp = PREHEAT_4_TEMP_BED); - #endif - break; + switch (var.VP) { + default: return; + case VP_E0_BED_PREHEAT: TERN_(HAS_HOTEND, ui.preheat_all(0)); break; + case VP_E1_BED_PREHEAT: TERN_(HAS_MULTI_HOTEND, ui.preheat_all(1)); break; + } case 7: break; // Custom preheat - case 9: break; // Cool down - } - - switch (var.VP) { - default: return; - #if HAS_HOTEND - case VP_E0_BED_PREHEAT: - thermalManager.setTargetHotend(e_temp, 0); - TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(bed_temp)); - break; - #endif - #if HOTENDS >= 2 - case VP_E1_BED_PREHEAT: - thermalManager.setTargetHotend(e_temp, 1); - TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(bed_temp)); - break; - #endif + case 9: // Cool down + thermalManager.zero_fan_speeds(); + thermalManager.disable_all_heaters(); + break; } // Go to the preheat screen to show the heating progress diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index 7358cbce23..7ce89c922a 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -1035,10 +1035,7 @@ namespace ExtUI { void setFeedrate_percent(const_float_t value) { feedrate_percentage = constrain(value, 10, 500); } void coolDown() { - #if HAS_HOTEND - HOTEND_LOOP() thermalManager.setTargetHotend(0, e); - #endif - TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(0)); + thermalManager.disable_all_heaters(); TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); } diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 2757e6d47a..925e1c1618 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -135,7 +135,10 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; #endif #if HAS_PREHEAT + #include "../module/temperature.h" + preheat_t MarlinUI::material_preset[PREHEAT_COUNT]; // Initialized by settings.load() + PGM_P MarlinUI::get_preheat_label(const uint8_t m) { #define _PDEF(N) static PGMSTR(preheat_##N##_label, PREHEAT_##N##_LABEL); #define _PLBL(N) preheat_##N##_label, @@ -143,6 +146,14 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; static PGM_P const preheat_labels[PREHEAT_COUNT] PROGMEM = { REPEAT_1(PREHEAT_COUNT, _PLBL) }; return (PGM_P)pgm_read_ptr(&preheat_labels[m]); } + + void MarlinUI::apply_preheat(const uint8_t m, const uint8_t pmask, const uint8_t e/*=active_extruder*/) { + const preheat_t &pre = material_preset[m]; + TERN_(HAS_HOTEND, if (TEST(pmask, PM_HOTEND)) thermalManager.setTargetHotend(pre.hotend_temp, e)); + TERN_(HAS_HEATED_BED, if (TEST(pmask, PM_BED)) thermalManager.setTargetBed(pre.bed_temp)); + //TERN_(HAS_HEATED_CHAMBER, if (TEST(pmask, PM_CHAMBER)) thermalManager.setTargetBed(pre.chamber_temp)); + TERN_(HAS_FAN, if (TEST(pmask, PM_FAN)) thermalManager.set_fan_speed(0, pre.fan_speed)); + } #endif #if EITHER(HAS_LCD_MENU, EXTENSIBLE_UI) diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index 63e1eb5b0d..4f797d899d 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -56,7 +56,6 @@ #if ENABLED(ADVANCED_PAUSE_FEATURE) && ANY(HAS_LCD_MENU, EXTENSIBLE_UI, HAS_DWIN_E3V2) #include "../feature/pause.h" - #include "../module/motion.h" // for active_extruder #endif #if ENABLED(DWIN_CREALITY_LCD) @@ -498,8 +497,15 @@ public: #endif #if HAS_PREHEAT + enum PreheatMask : uint8_t { PM_HOTEND = _BV(0), PM_BED = _BV(1), PM_FAN = _BV(2), PM_CHAMBER = _BV(3) }; static preheat_t material_preset[PREHEAT_COUNT]; static PGM_P get_preheat_label(const uint8_t m); + static void apply_preheat(const uint8_t m, const uint8_t pmask, const uint8_t e=active_extruder); + static inline void preheat_set_fan(const uint8_t m) { TERN_(HAS_FAN, apply_preheat(m, PM_FAN)); } + static inline void preheat_hotend(const uint8_t m, const uint8_t e=active_extruder) { TERN_(HAS_HOTEND, apply_preheat(m, PM_HOTEND)); } + static inline void preheat_hotend_and_fan(const uint8_t m, const uint8_t e=active_extruder) { preheat_hotend(m, e); preheat_set_fan(m); } + static inline void preheat_bed(const uint8_t m) { TERN_(HAS_HEATED_BED, apply_preheat(m, PM_BED)); } + static inline void preheat_all(const uint8_t m) { apply_preheat(m, 0xFF); } #endif #if SCREENS_CAN_TIME_OUT From 70e31bff45165dd07375cd6140fc0a72468e0894 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 27 Oct 2021 21:36:06 -0500 Subject: [PATCH 071/532] =?UTF-8?q?=F0=9F=8E=A8=20Standard=20'cooldown'=20?= =?UTF-8?q?method?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/control/M80_M81.cpp | 3 +-- Marlin/src/lcd/e3v2/creality/dwin.cpp | 10 ++++---- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 13 ++++------- Marlin/src/lcd/e3v2/jyersui/dwin.cpp | 23 ++++++++----------- .../src/lcd/extui/dgus/DGUSScreenHandler.cpp | 7 ++---- Marlin/src/lcd/extui/ui_api.cpp | 5 +--- Marlin/src/lcd/menu/menu_temperature.cpp | 3 +-- Marlin/src/module/temperature.h | 8 +++++++ 8 files changed, 31 insertions(+), 41 deletions(-) diff --git a/Marlin/src/gcode/control/M80_M81.cpp b/Marlin/src/gcode/control/M80_M81.cpp index 2a1b3b34b9..b8be9daa40 100644 --- a/Marlin/src/gcode/control/M80_M81.cpp +++ b/Marlin/src/gcode/control/M80_M81.cpp @@ -74,13 +74,12 @@ * This code should ALWAYS be available for FULL SHUTDOWN! */ void GcodeSuite::M81() { - thermalManager.disable_all_heaters(); planner.finish_and_disable(); + thermalManager.cooldown(); print_job_timer.stop(); #if HAS_FAN - thermalManager.zero_fan_speeds(); #if ENABLED(PROBING_FANS_OFF) thermalManager.fans_paused = false; ZERO(thermalManager.saved_fan_speed); diff --git a/Marlin/src/lcd/e3v2/creality/dwin.cpp b/Marlin/src/lcd/e3v2/creality/dwin.cpp index 82623d7c7d..adf8f3771f 100644 --- a/Marlin/src/lcd/e3v2/creality/dwin.cpp +++ b/Marlin/src/lcd/e3v2/creality/dwin.cpp @@ -2735,6 +2735,7 @@ void HMI_Prepare() { queue.inject_P(G28_STR); // G28 will set home_flag Popup_Window_Home(); break; + #if HAS_ZOFFSET_ITEM case PREPARE_CASE_ZOFF: #if EITHER(HAS_BED_PROBE, BABYSTEPPING) @@ -2750,6 +2751,7 @@ void HMI_Prepare() { #endif break; #endif + #if HAS_PREHEAT case PREPARE_CASE_PLA: ui.preheat_all(0); break; #if PREHEAT_COUNT > 1 @@ -2758,18 +2760,14 @@ void HMI_Prepare() { #endif #if HAS_HOTEND || HAS_HEATED_BED - case PREPARE_CASE_COOL: - TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); - #if HAS_HOTEND || HAS_HEATED_BED - thermalManager.disable_all_heaters(); - #endif - break; + case PREPARE_CASE_COOL: thermalManager.cooldown(); break; #endif case PREPARE_CASE_LANG: HMI_ToggleLanguage(); Draw_Prepare_Menu(); break; + default: break; } } diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index 3d5a56c869..787cf717eb 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -1787,8 +1787,7 @@ void DWIN_Print_Started(const bool sd) { // Ended print job void DWIN_Print_Finished() { if (checkkey == PrintProcess || printingIsActive()) { - thermalManager.disable_all_heaters(); - thermalManager.zero_fan_speeds(); + thermalManager.cooldown(); HMI_flag.print_finish = true; } } @@ -2116,17 +2115,13 @@ void SetHome() { #endif #if HAS_PREHEAT - void SetCoolDown() { - TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); - #if HAS_HOTEND || HAS_HEATED_BED - thermalManager.disable_all_heaters(); - #endif - } void DoPreheat0() { ui.preheat_all(0); } void DoPreheat1() { ui.preheat_all(1); } void DoPreheat2() { ui.preheat_all(2); } #endif +void DoCoolDown() { thermalManager.cooldown(); } + void SetLanguage() { HMI_ToggleLanguage(); CurrentMenu = nullptr; // Invalidate menu to full redraw @@ -3126,8 +3121,8 @@ void Draw_Prepare_Menu() { #if PREHEAT_COUNT > 2 ADDMENUITEM(ICON_CustomPreheat, GET_TEXT_F(MSG_PREHEAT_CUSTOM), onDrawMenuItem, DoPreheat2); #endif - ADDMENUITEM(ICON_Cool, GET_TEXT_F(MSG_COOLDOWN), onDrawCooldown, SetCoolDown); #endif + ADDMENUITEM(ICON_Cool, GET_TEXT_F(MSG_COOLDOWN), onDrawCooldown, DoCoolDown); ADDMENUITEM(ICON_Language, PSTR("UI Language"), onDrawLanguage, SetLanguage); } CurrentMenu->draw(); diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp index 54266e717b..80ef88d0b2 100644 --- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp @@ -1030,7 +1030,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/ #define PREPARE_MANUALLEVEL (PREPARE_HOME + 1) #define PREPARE_ZOFFSET (PREPARE_MANUALLEVEL + ENABLED(HAS_ZOFFSET_ITEM)) #define PREPARE_PREHEAT (PREPARE_ZOFFSET + ENABLED(HAS_PREHEAT)) - #define PREPARE_COOLDOWN (PREPARE_PREHEAT + ENABLED(HAS_PREHEAT)) + #define PREPARE_COOLDOWN (PREPARE_PREHEAT + EITHER(HAS_HOTEND, HAS_HEATED_BED)) #define PREPARE_CHANGEFIL (PREPARE_COOLDOWN + ENABLED(ADVANCED_PAUSE_FEATURE)) #define PREPARE_TOTAL PREPARE_CHANGEFIL @@ -1096,13 +1096,14 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/ else Draw_Menu(Preheat); break; + #endif + + #if HAS_HOTEND || HAS_HEATED_BED case PREPARE_COOLDOWN: if (draw) Draw_Menu_Item(row, ICON_Cool, F("Cooldown")); - else { - TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); - thermalManager.disable_all_heaters(); - } + else + thermalManager.cooldown(); break; #endif @@ -1597,8 +1598,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/ #define PREHEAT_TOTAL PREHEAT_5 auto do_preheat = [](const uint8_t m) { - thermalManager.disable_all_heaters(); - TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); + thermalManager.cooldown(); if (preheatmode == 0 || preheatmode == 1) { ui.preheat_hotend_and_fan(m); } if (preheatmode == 0 || preheatmode == 2) ui.preheat_bed(m); }; @@ -4496,8 +4496,7 @@ void CrealityDWINClass::Popup_Control() { TERN_(HAS_HOTEND, pausetemp = thermalManager.temp_hotend[0].target); TERN_(HAS_HEATED_BED, pausebed = thermalManager.temp_bed.target); TERN_(HAS_FAN, pausefan = thermalManager.fan_speed[0]); - thermalManager.disable_all_heaters(); - TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); + thermalManager.cooldown(); #endif } else { @@ -4510,8 +4509,7 @@ void CrealityDWINClass::Popup_Control() { if (selection == 0) { if (sdprint) { ui.abort_print(); - TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); - thermalManager.disable_all_heaters(); + thermalManager.cooldown(); } else { TERN_(HOST_ACTION_COMMANDS, hostui.cancel()); @@ -4741,8 +4739,7 @@ void CrealityDWINClass::Start_Print(bool sd) { void CrealityDWINClass::Stop_Print() { printing = false; sdprint = false; - TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); - thermalManager.disable_all_heaters(); + thermalManager.cooldown(); TERN_(LCD_SET_PROGRESS_MANUALLY, ui.set_progress(100 * (PROGRESS_SCALE))); TERN_(USE_M73_REMAINING_TIME, ui.set_remaining_time(0)); Draw_Print_confirm(); diff --git a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp index be00b9c73a..2b00fd16f8 100644 --- a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp @@ -626,14 +626,11 @@ void DGUSScreenHandler::HandleHeaterControl(DGUS_VP_Variable &var, void *val_ptr default: switch (var.VP) { default: return; - case VP_E0_BED_PREHEAT: TERN_(HAS_HOTEND, ui.preheat_all(0)); break; + case VP_E0_BED_PREHEAT: TERN_(HAS_HOTEND, ui.preheat_all(0)); break; case VP_E1_BED_PREHEAT: TERN_(HAS_MULTI_HOTEND, ui.preheat_all(1)); break; } case 7: break; // Custom preheat - case 9: // Cool down - thermalManager.zero_fan_speeds(); - thermalManager.disable_all_heaters(); - break; + case 9: thermalManager.cooldown(); break; // Cool down } // Go to the preheat screen to show the heating progress diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index 7ce89c922a..54e7db55c2 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -1034,10 +1034,7 @@ namespace ExtUI { void setFeedrate_percent(const_float_t value) { feedrate_percentage = constrain(value, 10, 500); } - void coolDown() { - thermalManager.disable_all_heaters(); - TERN_(HAS_FAN, thermalManager.zero_fan_speeds()); - } + void coolDown() { thermalManager.cooldown(); } bool awaitingUserConfirm() { return TERN0(HAS_RESUME_CONTINUE, wait_for_user) || getHostKeepaliveIsPaused(); diff --git a/Marlin/src/lcd/menu/menu_temperature.cpp b/Marlin/src/lcd/menu/menu_temperature.cpp index 5524793b19..0e36884858 100644 --- a/Marlin/src/lcd/menu/menu_temperature.cpp +++ b/Marlin/src/lcd/menu/menu_temperature.cpp @@ -143,8 +143,7 @@ void Temperature::lcd_preheat(const uint8_t e, const int8_t indh, const int8_t i #if HAS_TEMP_HOTEND || HAS_HEATED_BED void lcd_cooldown() { - thermalManager.zero_fan_speeds(); - thermalManager.disable_all_heaters(); + thermalManager.cooldown(); ui.return_to_status(); } diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index 5579f71172..0e66f23110 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -848,6 +848,14 @@ class Temperature { */ static void disable_all_heaters(); + /** + * Cooldown, as from the LCD. Disables all heaters and fans. + */ + static inline void cooldown() { + zero_fan_speeds(); + disable_all_heaters(); + } + #if ENABLED(PRINTJOB_TIMER_AUTOSTART) /** * Methods to check if heaters are enabled, indicating an active job From 67b075fd39e530c5d7e8a09ee6b3dba81d8548d0 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 30 Oct 2021 00:58:37 +0000 Subject: [PATCH 072/532] [cron] Bump distribution date (2021-10-30) --- 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 e0165a280f..d1bff6ba10 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 "2021-10-29" +//#define STRING_DISTRIBUTION_DATE "2021-10-30" /** * 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 f61066e58f..9a90feeb88 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 "2021-10-29" + #define STRING_DISTRIBUTION_DATE "2021-10-30" #endif /** From 18a924d4e26539c270dc08677d4319e5b012c723 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 29 Oct 2021 20:42:52 -0500 Subject: [PATCH 073/532] =?UTF-8?q?=F0=9F=94=A7=20Configuration=20version?= =?UTF-8?q?=2002000903?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration.h | 2 +- Marlin/Configuration_adv.h | 2 +- Marlin/src/inc/Version.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index d8ced232b4..0a51019b67 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -35,7 +35,7 @@ * * Advanced settings can be found in Configuration_adv.h */ -#define CONFIGURATION_H_VERSION 02000902 +#define CONFIGURATION_H_VERSION 02000903 //=========================================================================== //============================= Getting Started ============================= diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index d6217ba940..b713371a60 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -30,7 +30,7 @@ * * Basic settings can be found in Configuration.h */ -#define CONFIGURATION_ADV_H_VERSION 02000902 +#define CONFIGURATION_ADV_H_VERSION 02000903 //=========================================================================== //============================= Thermal Settings ============================ diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index 9a90feeb88..9e87e765d5 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -52,7 +52,7 @@ * to alert users to major changes. */ -#define MARLIN_HEX_VERSION 02000902 +#define MARLIN_HEX_VERSION 02000903 #ifndef REQUIRED_CONFIGURATION_H_VERSION #define REQUIRED_CONFIGURATION_H_VERSION MARLIN_HEX_VERSION #endif From aa4e32555dd247c391356a2e1449dd9820beeab6 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 29 Oct 2021 20:46:55 -0500 Subject: [PATCH 074/532] =?UTF-8?q?=E2=9C=A8=20"Rutilea"=20ESP32=20board?= =?UTF-8?q?=20(#22880)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/ESP32/i2s.cpp | 30 ++++---- Marlin/src/core/boards.h | 7 +- Marlin/src/pins/esp32/pins_ESPA_common.h | 89 ++++++++++++++++++++++ Marlin/src/pins/esp32/pins_FYSETC_E4.h | 57 +------------- Marlin/src/pins/esp32/pins_MRR_ESPA.h | 53 +------------ Marlin/src/pins/esp32/pins_MRR_ESPE.h | 1 - Marlin/src/pins/esp32/pins_RESP32_CUSTOM.h | 37 +++++++++ Marlin/src/pins/pins.h | 2 + 8 files changed, 148 insertions(+), 128 deletions(-) create mode 100644 Marlin/src/pins/esp32/pins_ESPA_common.h create mode 100644 Marlin/src/pins/esp32/pins_RESP32_CUSTOM.h diff --git a/Marlin/src/HAL/ESP32/i2s.cpp b/Marlin/src/HAL/ESP32/i2s.cpp index 557ea319e6..3e77b65836 100644 --- a/Marlin/src/HAL/ESP32/i2s.cpp +++ b/Marlin/src/HAL/ESP32/i2s.cpp @@ -64,12 +64,9 @@ uint32_t i2s_port_data = 0; #define I2S_EXIT_CRITICAL() portEXIT_CRITICAL(&i2s_spinlock[i2s_num]) static inline void gpio_matrix_out_check(uint32_t gpio, uint32_t signal_idx, bool out_inv, bool oen_inv) { - //if pin = -1, do not need to configure - if (gpio != -1) { - PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio], PIN_FUNC_GPIO); - gpio_set_direction((gpio_num_t)gpio, (gpio_mode_t)GPIO_MODE_DEF_OUTPUT); - gpio_matrix_out(gpio, signal_idx, out_inv, oen_inv); - } + PIN_FUNC_SELECT(GPIO_PIN_MUX_REG[gpio], PIN_FUNC_GPIO); + gpio_set_direction((gpio_num_t)gpio, (gpio_mode_t)GPIO_MODE_DEF_OUTPUT); + gpio_matrix_out(gpio, signal_idx, out_inv, oen_inv); } static esp_err_t i2s_reset_fifo(i2s_port_t i2s_num) { @@ -256,13 +253,7 @@ int i2s_init() { I2S0.fifo_conf.dscr_en = 0; - I2S0.conf_chan.tx_chan_mod = ( - #if ENABLED(I2S_STEPPER_SPLIT_STREAM) - 4 - #else - 0 - #endif - ); + I2S0.conf_chan.tx_chan_mod = TERN(I2S_STEPPER_SPLIT_STREAM, 4, 0); I2S0.fifo_conf.tx_fifo_mod = 0; I2S0.conf.tx_mono = 0; @@ -313,9 +304,16 @@ int i2s_init() { xTaskCreatePinnedToCore(stepperTask, "StepperTask", 10000, nullptr, 1, nullptr, CONFIG_ARDUINO_RUNNING_CORE); // run I2S stepper task on same core as rest of Marlin // Route the i2s pins to the appropriate GPIO - gpio_matrix_out_check(I2S_DATA, I2S0O_DATA_OUT23_IDX, 0, 0); - gpio_matrix_out_check(I2S_BCK, I2S0O_BCK_OUT_IDX, 0, 0); - gpio_matrix_out_check(I2S_WS, I2S0O_WS_OUT_IDX, 0, 0); + // If a pin is not defined, no need to configure + #if defined(I2S_DATA) && I2S_DATA >= 0 + gpio_matrix_out_check(I2S_DATA, I2S0O_DATA_OUT23_IDX, 0, 0); + #endif + #if defined(I2S_BCK) && I2S_BCK >= 0 + gpio_matrix_out_check(I2S_BCK, I2S0O_BCK_OUT_IDX, 0, 0); + #endif + #if defined(I2S_WS) && I2S_WS >= 0 + gpio_matrix_out_check(I2S_WS, I2S0O_WS_OUT_IDX, 0, 0); + #endif // Start the I2S peripheral return i2s_start(I2S_NUM_0); diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 6e116888bc..2341e6577b 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -425,9 +425,10 @@ #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_FYSETC_E4 6004 // FYSETC E4 -#define BOARD_PANDA_ZHU 6005 // Panda_ZHU -#define BOARD_PANDA_M4 6006 // Panda_M4 +#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 // // SAMD51 ARM Cortex M4 diff --git a/Marlin/src/pins/esp32/pins_ESPA_common.h b/Marlin/src/pins/esp32/pins_ESPA_common.h new file mode 100644 index 0000000000..2fcacb3002 --- /dev/null +++ b/Marlin/src/pins/esp32/pins_ESPA_common.h @@ -0,0 +1,89 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 + +/** + * ESPA-like pin assignments + * Supports 4 stepper drivers, heated bed, single hotend. + */ + +#include "env_validate.h" + +#ifndef DEFAULT_MACHINE_NAME + #define DEFAULT_MACHINE_NAME BOARD_INFO_NAME +#endif + +// +// Disable I2S stepper stream, by default +// +#undef I2S_STEPPER_STREAM +#undef I2S_WS +#undef I2S_BCK +#undef I2S_DATA + +// +// Limit Switches +// +#define X_STOP_PIN 34 +#define Y_STOP_PIN 35 +#define Z_STOP_PIN 15 + +// +// Steppers +// +#define X_STEP_PIN 27 +#define X_DIR_PIN 26 +#define X_ENABLE_PIN 25 + +#define Y_STEP_PIN 33 +#define Y_DIR_PIN 32 +#define Y_ENABLE_PIN X_ENABLE_PIN + +#define Z_STEP_PIN 14 +#define Z_DIR_PIN 12 +#define Z_ENABLE_PIN X_ENABLE_PIN + +#define E0_STEP_PIN 16 +#define E0_DIR_PIN 17 +#define E0_ENABLE_PIN X_ENABLE_PIN + +// +// Temperature Sensors +// +#define TEMP_0_PIN 36 // Analog Input +#define TEMP_BED_PIN 39 // Analog Input + +// +// Heaters / Fans +// +#define HEATER_0_PIN 2 +#define FAN_PIN 13 +#define HEATER_BED_PIN 4 + +// +// MicroSD card +// +#define SD_MOSI_PIN 23 +#define SD_MISO_PIN 19 +#define SD_SCK_PIN 18 +#define SDSS 5 +#define USES_SHARED_SPI // SPI is shared by SD card with TMC SPI drivers diff --git a/Marlin/src/pins/esp32/pins_FYSETC_E4.h b/Marlin/src/pins/esp32/pins_FYSETC_E4.h index 4e71a66a22..e75b6ece28 100644 --- a/Marlin/src/pins/esp32/pins_FYSETC_E4.h +++ b/Marlin/src/pins/esp32/pins_FYSETC_E4.h @@ -37,41 +37,8 @@ #endif #define BOARD_INFO_NAME "FYSETC_E4" -#define DEFAULT_MACHINE_NAME BOARD_INFO_NAME -// -// Disable I2S stepper stream -// -#undef I2S_STEPPER_STREAM -#define I2S_WS -1 -#define I2S_BCK -1 -#define I2S_DATA -1 - -// -// Limit Switches -// -#define X_STOP_PIN 34 -#define Y_STOP_PIN 35 -#define Z_STOP_PIN 15 - -// -// Steppers -// -#define X_STEP_PIN 27 -#define X_DIR_PIN 26 -#define X_ENABLE_PIN 25 - -#define Y_STEP_PIN 33 -#define Y_DIR_PIN 32 -#define Y_ENABLE_PIN X_ENABLE_PIN - -#define Z_STEP_PIN 14 -#define Z_DIR_PIN 12 -#define Z_ENABLE_PIN X_ENABLE_PIN - -#define E0_STEP_PIN 16 -#define E0_DIR_PIN 17 -#define E0_ENABLE_PIN X_ENABLE_PIN +#include "pins_ESPA_common.h" #if HAS_TMC_UART // @@ -89,28 +56,6 @@ #define TMC_BAUD_RATE 115200 #endif -// -// Temperature Sensors -// -#define TEMP_0_PIN 36 // Analog Input -#define TEMP_BED_PIN 39 // Analog Input - -// -// Heaters / Fans -// -#define HEATER_0_PIN 2 -#define FAN_PIN 13 -#define HEATER_BED_PIN 4 - -// -// MicroSD card -// -#define SD_MOSI_PIN 23 -#define SD_MISO_PIN 19 -#define SD_SCK_PIN 18 -#define SDSS 5 -#define USES_SHARED_SPI // SPI is shared by SD card with TMC SPI drivers - /** * Hardware serial pins * diff --git a/Marlin/src/pins/esp32/pins_MRR_ESPA.h b/Marlin/src/pins/esp32/pins_MRR_ESPA.h index a5f70e8159..cc67bc025c 100644 --- a/Marlin/src/pins/esp32/pins_MRR_ESPA.h +++ b/Marlin/src/pins/esp32/pins_MRR_ESPA.h @@ -38,68 +38,17 @@ #define BOARD_INFO_NAME "MRR ESPA" #define BOARD_WEBSITE_URL "github.com/maplerainresearch/MRR_ESPA" -#define DEFAULT_MACHINE_NAME BOARD_INFO_NAME -// -// Disable I2S stepper stream -// -#undef I2S_STEPPER_STREAM -#undef I2S_WS -#undef I2S_BCK -#undef I2S_DATA - -// -// Limit Switches -// -#define X_STOP_PIN 34 -#define Y_STOP_PIN 35 -#define Z_STOP_PIN 15 +#include "pins_ESPA_common.h" // // Steppers // -#define X_STEP_PIN 27 -#define X_DIR_PIN 26 -#define X_ENABLE_PIN 25 //#define X_CS_PIN 21 - -#define Y_STEP_PIN 33 -#define Y_DIR_PIN 32 -#define Y_ENABLE_PIN X_ENABLE_PIN //#define Y_CS_PIN 22 - -#define Z_STEP_PIN 14 -#define Z_DIR_PIN 12 -#define Z_ENABLE_PIN X_ENABLE_PIN //#define Z_CS_PIN 5 // SS_PIN - -#define E0_STEP_PIN 16 -#define E0_DIR_PIN 17 -#define E0_ENABLE_PIN X_ENABLE_PIN //#define E0_CS_PIN 21 -// -// Temperature Sensors -// -#define TEMP_0_PIN 36 // Analog Input -#define TEMP_BED_PIN 39 // Analog Input - -// -// Heaters / Fans -// -#define HEATER_0_PIN 2 -#define FAN_PIN 13 -#define HEATER_BED_PIN 4 - -// -// MicroSD card -// -#define SD_MOSI_PIN 23 -#define SD_MISO_PIN 19 -#define SD_SCK_PIN 18 -#define SDSS 5 -#define USES_SHARED_SPI // SPI is shared by SD card with TMC SPI drivers - // Hardware serial pins // Add the following to Configuration.h or Configuration_adv.h to assign // specific pins to hardware Serial1. diff --git a/Marlin/src/pins/esp32/pins_MRR_ESPE.h b/Marlin/src/pins/esp32/pins_MRR_ESPE.h index ae4f0c6e36..60c8405dfe 100644 --- a/Marlin/src/pins/esp32/pins_MRR_ESPE.h +++ b/Marlin/src/pins/esp32/pins_MRR_ESPE.h @@ -51,7 +51,6 @@ // // Enable I2S stepper stream // -#undef I2S_STEPPER_STREAM #define I2S_STEPPER_STREAM #define I2S_WS 26 #define I2S_BCK 25 diff --git a/Marlin/src/pins/esp32/pins_RESP32_CUSTOM.h b/Marlin/src/pins/esp32/pins_RESP32_CUSTOM.h new file mode 100644 index 0000000000..5d3f75574d --- /dev/null +++ b/Marlin/src/pins/esp32/pins_RESP32_CUSTOM.h @@ -0,0 +1,37 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 + +/** + * Rutilea ESP32 (Tensilica Xtensa LX6) pin assignments + */ + +#include "env_validate.h" + +#define BOARD_INFO_NAME "Rutilea ESP32" + +#include "pins_ESPA_common.h" + +// +// I2S (steppers & other output-only pins) +// +#define I2S_STEPPER_STREAM diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 1a05f55fdc..49d06590e9 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -695,6 +695,8 @@ #include "esp32/pins_MRR_ESPE.h" // ESP32 env:esp32 #elif MB(E4D_BOX) #include "esp32/pins_E4D.h" // ESP32 env:esp32 +#elif MB(RESP32_CUSTOM) + #include "esp32/pins_RESP32_CUSTOM.h" // ESP32 env:esp32 #elif MB(FYSETC_E4) #include "esp32/pins_FYSETC_E4.h" // ESP32 env:FYSETC_E4 #elif MB(PANDA_ZHU) From 75e0b7f8ff668217889b770a83990c532998ca95 Mon Sep 17 00:00:00 2001 From: aalku Date: Sat, 30 Oct 2021 07:17:20 +0200 Subject: [PATCH 075/532] =?UTF-8?q?=E2=9C=A8=20Shutdown=20Host=20Action=20?= =?UTF-8?q?(#22908)?= 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/feature/host_actions.cpp | 4 ++++ Marlin/src/feature/host_actions.h | 3 +++ Marlin/src/inc/Conditionals_adv.h | 3 +++ Marlin/src/lcd/language/language_en.h | 2 ++ Marlin/src/lcd/menu/menu_bed_corners.cpp | 2 +- Marlin/src/lcd/menu/menu_cancelobject.cpp | 2 +- Marlin/src/lcd/menu/menu_configuration.cpp | 11 +++------ Marlin/src/lcd/menu/menu_main.cpp | 27 ++++++++++++++-------- Marlin/src/lcd/menu/menu_media.cpp | 2 +- Marlin/src/lcd/menu/menu_motion.cpp | 2 +- Marlin/src/lcd/menu/menu_tramming.cpp | 2 +- 12 files changed, 40 insertions(+), 23 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index b713371a60..4efab8193c 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -3844,7 +3844,8 @@ #if ENABLED(HOST_ACTION_COMMANDS) //#define HOST_PAUSE_M76 //#define HOST_PROMPT_SUPPORT - //#define HOST_START_MENU_ITEM // Add a menu item that tells the host to start + //#define HOST_START_MENU_ITEM // Add a menu item that tells the host to start + //#define HOST_SHUTDOWN_MENU_ITEM // Add a menu item that tells the host to shut down #endif /** diff --git a/Marlin/src/feature/host_actions.cpp b/Marlin/src/feature/host_actions.cpp index 6a1faf81c0..be7b055b55 100644 --- a/Marlin/src/feature/host_actions.cpp +++ b/Marlin/src/feature/host_actions.cpp @@ -80,6 +80,10 @@ void HostUI::action(FSTR_P const fstr, const bool eol) { #endif #endif +#ifdef SHUTDOWN_ACTION + void HostUI::shutdown() { action(F(SHUTDOWN_ACTION)); } +#endif + #if ENABLED(HOST_PROMPT_SUPPORT) PromptReason HostUI::host_prompt_reason = PROMPT_NOT_DEFINED; diff --git a/Marlin/src/feature/host_actions.h b/Marlin/src/feature/host_actions.h index 6671072139..45379afc29 100644 --- a/Marlin/src/feature/host_actions.h +++ b/Marlin/src/feature/host_actions.h @@ -71,6 +71,9 @@ class HostUI { #ifdef ACTION_ON_START static void start(); #endif + #ifdef SHUTDOWN_ACTION + static void shutdown(); + #endif #if ENABLED(G29_RETRY_AND_RECOVER) #ifdef ACTION_ON_G29_RECOVER diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index dd2d6ed748..efb9db420d 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -701,6 +701,9 @@ #ifndef ACTION_ON_KILL #define ACTION_ON_KILL "poweroff" #endif + #ifndef SHUTDOWN_ACTION + #define SHUTDOWN_ACTION "shutdown" + #endif #if HAS_FILAMENT_SENSOR #ifndef ACTION_ON_FILAMENT_RUNOUT #define ACTION_ON_FILAMENT_RUNOUT "filament_runout" diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 8af60c1642..9a92a7e268 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -745,6 +745,8 @@ namespace Language_en { LSTR MSG_SD_CARD = _UxGT("SD Card"); LSTR MSG_USB_DISK = _UxGT("USB Disk"); + 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 diff --git a/Marlin/src/lcd/menu/menu_bed_corners.cpp b/Marlin/src/lcd/menu/menu_bed_corners.cpp index 79193fbef3..872b9b3840 100644 --- a/Marlin/src/lcd/menu/menu_bed_corners.cpp +++ b/Marlin/src/lcd/menu/menu_bed_corners.cpp @@ -213,7 +213,7 @@ static void _lcd_level_bed_corners_get_next_position() { if (!ui.should_draw()) return; MenuItem_confirm::confirm_screen( []{ queue.inject(TERN(HAS_LEVELING, F("G29N"), FPSTR(G28_STR))); ui.return_to_status(); } - , []{ ui.goto_previous_screen_no_defer(); } + , ui.goto_previous_screen_no_defer , GET_TEXT(MSG_BED_TRAMMING_IN_RANGE) , (const char*)nullptr, PSTR("?") ); diff --git a/Marlin/src/lcd/menu/menu_cancelobject.cpp b/Marlin/src/lcd/menu/menu_cancelobject.cpp index a8ced05759..f2a06ecf6a 100644 --- a/Marlin/src/lcd/menu/menu_cancelobject.cpp +++ b/Marlin/src/lcd/menu/menu_cancelobject.cpp @@ -47,7 +47,7 @@ static void lcd_cancel_object_confirm() { ui.completion_feedback(); ui.goto_previous_screen(); }, - ui.goto_previous_screen, + nullptr, GET_TEXT(MSG_CANCEL_OBJECT), item_num, PSTR("?") ); } diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 9e1f455a64..6d6b0228fb 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -64,9 +64,7 @@ void menu_advanced_settings(); static int8_t bar_percent = 0; if (ui.use_click()) { ui.goto_previous_screen(); - #if HAS_MARLINUI_HD44780 - ui.set_custom_characters(CHARSET_MENU); - #endif + TERN_(HAS_MARLINUI_HD44780, ui.set_custom_characters(CHARSET_MENU)); return; } bar_percent += (int8_t)ui.encoderPosition; @@ -79,9 +77,7 @@ void menu_advanced_settings(); void _progress_bar_test() { ui.goto_screen(progress_bar_test); - #if HAS_MARLINUI_HD44780 - ui.set_custom_characters(CHARSET_INFO); - #endif + TERN_(HAS_MARLINUI_HD44780, ui.set_custom_characters(CHARSET_INFO)); } #endif // LCD_PROGRESS_BAR_TEST @@ -363,8 +359,7 @@ void menu_advanced_settings(); #define _CUSTOM_ITEM_CONF_CONFIRM(N) \ SUBMENU_P(PSTR(CONFIG_MENU_ITEM_##N##_DESC), []{ \ MenuItem_confirm::confirm_screen( \ - GCODE_LAMBDA_CONF(N), \ - ui.goto_previous_screen, \ + GCODE_LAMBDA_CONF(N), nullptr, \ PSTR(CONFIG_MENU_ITEM_##N##_DESC "?") \ ); \ }) diff --git a/Marlin/src/lcd/menu/menu_main.cpp b/Marlin/src/lcd/menu/menu_main.cpp index 172f9daf7a..aca10edc6a 100644 --- a/Marlin/src/lcd/menu/menu_main.cpp +++ b/Marlin/src/lcd/menu/menu_main.cpp @@ -58,7 +58,7 @@ #include "../../feature/password/password.h" #endif -#if ENABLED(HOST_START_MENU_ITEM) && defined(ACTION_ON_START) +#if (ENABLED(HOST_START_MENU_ITEM) && defined(ACTION_ON_START)) || (ENABLED(HOST_SHUTDOWN_MENU_ITEM) && defined(SHUTDOWN_ACTION)) #include "../../feature/host_actions.h" #endif @@ -128,8 +128,7 @@ void menu_configuration(); #define _CUSTOM_ITEM_MAIN_CONFIRM(N) \ SUBMENU_P(PSTR(MAIN_MENU_ITEM_##N##_DESC), []{ \ MenuItem_confirm::confirm_screen( \ - GCODE_LAMBDA_MAIN(N), \ - ui.goto_previous_screen, \ + GCODE_LAMBDA_MAIN(N), nullptr, \ PSTR(MAIN_MENU_ITEM_##N##_DESC "?") \ ); \ }) @@ -274,7 +273,7 @@ void menu_main() { SUBMENU(MSG_STOP_PRINT, []{ MenuItem_confirm::select_screen( GET_TEXT(MSG_BUTTON_STOP), GET_TEXT(MSG_BACK), - ui.abort_print, ui.goto_previous_screen, + ui.abort_print, nullptr, GET_TEXT(MSG_STOP_PRINT), (const char *)nullptr, PSTR("?") ); }); @@ -346,7 +345,7 @@ void menu_main() { #if ENABLED(ADVANCED_PAUSE_FEATURE) #if E_STEPPERS == 1 && DISABLED(FILAMENT_LOAD_UNLOAD_GCODES) YESNO_ITEM(MSG_FILAMENTCHANGE, - menu_change_filament, ui.goto_previous_screen, + menu_change_filament, nullptr, GET_TEXT(MSG_FILAMENTCHANGE), (const char *)nullptr, PSTR("?") ); #else @@ -370,7 +369,7 @@ void menu_main() { #if ENABLED(PS_OFF_CONFIRM) CONFIRM_ITEM(MSG_SWITCH_PS_OFF, MSG_YES, MSG_NO, - ui.poweroff, ui.goto_previous_screen, + ui.poweroff, nullptr, GET_TEXT(MSG_SWITCH_PS_OFF), (const char *)nullptr, PSTR("?") ); #else @@ -394,21 +393,21 @@ void menu_main() { #if SERVICE_INTERVAL_1 > 0 CONFIRM_ITEM_P(PSTR(SERVICE_NAME_1), MSG_BUTTON_RESET, MSG_BUTTON_CANCEL, - []{ _service_reset(1); }, ui.goto_previous_screen, + []{ _service_reset(1); }, nullptr, GET_TEXT(MSG_SERVICE_RESET), F(SERVICE_NAME_1), PSTR("?") ); #endif #if SERVICE_INTERVAL_2 > 0 CONFIRM_ITEM_P(PSTR(SERVICE_NAME_2), MSG_BUTTON_RESET, MSG_BUTTON_CANCEL, - []{ _service_reset(2); }, ui.goto_previous_screen, + []{ _service_reset(2); }, nullptr, GET_TEXT(MSG_SERVICE_RESET), F(SERVICE_NAME_2), PSTR("?") ); #endif #if SERVICE_INTERVAL_3 > 0 CONFIRM_ITEM_P(PSTR(SERVICE_NAME_3), MSG_BUTTON_RESET, MSG_BUTTON_CANCEL, - []{ _service_reset(3); }, ui.goto_previous_screen, + []{ _service_reset(3); }, nullptr, GET_TEXT(MSG_SERVICE_RESET), F(SERVICE_NAME_3), PSTR("?") ); #endif @@ -442,6 +441,16 @@ void menu_main() { SUBMENU(LANGUAGE, menu_language); #endif + #if ENABLED(HOST_SHUTDOWN_MENU_ITEM) && defined(SHUTDOWN_ACTION) + SUBMENU(MSG_HOST_SHUTDOWN, []{ + MenuItem_confirm::select_screen( + GET_TEXT(MSG_BUTTON_PROCEED), GET_TEXT(MSG_BUTTON_CANCEL), + []{ ui.return_to_status(); hostui.shutdown(); }, nullptr, + GET_TEXT(MSG_HOST_SHUTDOWN), (const char *)nullptr, PSTR("?") + ); + }); + #endif + END_MENU(); } diff --git a/Marlin/src/lcd/menu/menu_media.cpp b/Marlin/src/lcd/menu/menu_media.cpp index 213ad257b8..4ce0a396d4 100644 --- a/Marlin/src/lcd/menu/menu_media.cpp +++ b/Marlin/src/lcd/menu/menu_media.cpp @@ -79,7 +79,7 @@ class MenuItem_sdfile : public MenuItem_sdbase { strcpy(buffer + 1, longest); MenuItem_confirm::select_screen( GET_TEXT(MSG_BUTTON_PRINT), GET_TEXT(MSG_BUTTON_CANCEL), - sdcard_start_selected_file, ui.goto_previous_screen, + sdcard_start_selected_file, nullptr, GET_TEXT(MSG_START_PRINT), buffer, PSTR("?") ); }); diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp index 7191e637d1..cddb7ede74 100644 --- a/Marlin/src/lcd/menu/menu_motion.cpp +++ b/Marlin/src/lcd/menu/menu_motion.cpp @@ -210,7 +210,7 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int ui.goto_screen([]{ MenuItem_confirm::select_screen( GET_TEXT(MSG_BUTTON_PROCEED), GET_TEXT(MSG_BACK), - _goto_menu_move_distance_e, ui.goto_previous_screen, + _goto_menu_move_distance_e, nullptr, GET_TEXT(MSG_HOTEND_TOO_COLD), (const char *)nullptr, PSTR("!") ); }); diff --git a/Marlin/src/lcd/menu/menu_tramming.cpp b/Marlin/src/lcd/menu/menu_tramming.cpp index 5cdcf75c1e..8e9d4b3942 100644 --- a/Marlin/src/lcd/menu/menu_tramming.cpp +++ b/Marlin/src/lcd/menu/menu_tramming.cpp @@ -66,7 +66,7 @@ static void _menu_single_probe() { STATIC_ITEM(MSG_BED_TRAMMING, SS_LEFT); STATIC_ITEM(MSG_LAST_VALUE_SP, SS_LEFT, z_isvalid[tram_index] ? ftostr42_52(z_measured[reference_index] - z_measured[tram_index]) : "---"); ACTION_ITEM(MSG_UBL_BC_INSERT2, []{ if (probe_single_point()) ui.refresh(); }); - ACTION_ITEM(MSG_BUTTON_DONE, []{ ui.goto_previous_screen(); }); + ACTION_ITEM(MSG_BUTTON_DONE, ui.goto_previous_screen); END_MENU(); } From be412e3e2b07664f95eec21dc8a63a66f25d26a6 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 30 Oct 2021 01:39:33 -0500 Subject: [PATCH 076/532] =?UTF-8?q?=F0=9F=8E=A8=20Adjust=20Ender-3=20V2=20?= =?UTF-8?q?DWIN=20options?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration.h | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 0a51019b67..8ab3929c41 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -2770,23 +2770,11 @@ // // Ender-3 v2 OEM display. A DWIN display with Rotary Encoder. // -//#define DWIN_CREALITY_LCD - -// -// Ender-3 v2 OEM display, enhanced. -// -//#define DWIN_CREALITY_LCD_ENHANCED - -// -// Ender-3 v2 OEM display with enhancements by Jacob Myers -// -//#define DWIN_CREALITY_LCD_JYERSUI - -// -// MarlinUI for Creality's DWIN display (and others) -// -//#define DWIN_MARLINUI_PORTRAIT -//#define DWIN_MARLINUI_LANDSCAPE +//#define DWIN_CREALITY_LCD // Creality UI +//#define DWIN_CREALITY_LCD_ENHANCED // Enhanced UI +//#define DWIN_CREALITY_LCD_JYERSUI // Jyers UI by Jacob Myers +//#define DWIN_MARLINUI_PORTRAIT // MarlinUI (portrait orientation) +//#define DWIN_MARLINUI_LANDSCAPE // MarlinUI (landscape orientation) // // Touch Screen Settings From 4dd1f0928688c68c6c334e1fb1a8e13be2dc351a Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 30 Oct 2021 04:16:37 -0500 Subject: [PATCH 077/532] =?UTF-8?q?=F0=9F=92=9A=20Update=20Ender-3=20V2=20?= =?UTF-8?q?config=20path?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MarlinFirmware/Configurations#600 --- buildroot/tests/STM32F103RET6_creality | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/buildroot/tests/STM32F103RET6_creality b/buildroot/tests/STM32F103RET6_creality index d530f7b851..ca7573cf16 100755 --- a/buildroot/tests/STM32F103RET6_creality +++ b/buildroot/tests/STM32F103RET6_creality @@ -9,21 +9,21 @@ set -e # # Build with configs included in the PR # -use_example_configs "Creality/Ender-3 V2/CrealityUI" +use_example_configs "Creality/Ender-3 V2/CrealityV422/CrealityUI" opt_enable MARLIN_DEV_MODE BUFFER_MONITORING BLTOUCH AUTO_BED_LEVELING_BILINEAR Z_SAFE_HOMING exec_test $1 $2 "Ender 3 v2 with CrealityUI" "$3" -use_example_configs "Creality/Ender-3 V2/CrealityUI" +use_example_configs "Creality/Ender-3 V2/CrealityV422/CrealityUI" opt_disable DWIN_CREALITY_LCD opt_enable DWIN_CREALITY_LCD_ENHANCED BLTOUCH AUTO_BED_LEVELING_UBL Z_SAFE_HOMING exec_test $1 $2 "Ender 3 v2 with Enhanced UI" "$3" -use_example_configs "Creality/Ender-3 V2/CrealityUI" +use_example_configs "Creality/Ender-3 V2/CrealityV422/CrealityUI" opt_disable DWIN_CREALITY_LCD opt_enable DWIN_CREALITY_LCD_JYERSUI AUTO_BED_LEVELING_BILINEAR PROBE_MANUALLY exec_test $1 $2 "Ender 3 v2 with JyersUI" "$3" -use_example_configs "Creality/Ender-3 V2/MarlinUI" +use_example_configs "Creality/Ender-3 V2/CrealityV422/MarlinUI" opt_add SDCARD_EEPROM_EMULATION AUTO_BED_LEVELING_BILINEAR Z_SAFE_HOMING exec_test $1 $2 "Ender 3 v2 with MarlinUI" "$3" From b88612f9761601e985f8ec8db5d3b91214c39555 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 31 Oct 2021 01:03:08 +0000 Subject: [PATCH 078/532] [cron] Bump distribution date (2021-10-31) --- 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 d1bff6ba10..a638379ef4 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 "2021-10-30" +//#define STRING_DISTRIBUTION_DATE "2021-10-31" /** * 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 9e87e765d5..a086f1797e 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 "2021-10-30" + #define STRING_DISTRIBUTION_DATE "2021-10-31" #endif /** From ba0b772d84bad99604b0131e2142366544370646 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 30 Oct 2021 22:43:02 -0500 Subject: [PATCH 079/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20linker=20error=20(?= =?UTF-8?q?transfer=5Fport=5Findex)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/sd/cardreader.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 1ab6dcc7c6..513d682de6 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -72,8 +72,8 @@ char CardReader::filename[FILENAME_LENGTH], CardReader::longFilename[LONG_FILENA IF_DISABLED(NO_SD_AUTOSTART, uint8_t CardReader::autofile_index); // = 0 -#if BOTH(HAS_MULTI_SERIAL, BINARY_FILE_TRANSFER) - serial_index_t CardReader::transfer_port_index; +#if ENABLED(BINARY_FILE_TRANSFER) + serial_index_t IF_DISABLED(HAS_MULTI_SERIAL, constexpr) CardReader::transfer_port_index; #endif // private: From efe2e79ac8e6d35e80a7d29bfd266685a82dc546 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 30 Oct 2021 23:43:19 -0500 Subject: [PATCH 080/532] =?UTF-8?q?=F0=9F=94=A8=20Help=20for=20GDB=20remot?= =?UTF-8?q?e=20debugging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 +-- Marlin/src/pins/pins.h | 4 +- .../share/PlatformIO/debugging/launch.json | 48 +++++++++++++++++++ ini/native.ini | 18 +------ ini/stm32f1-maple.ini | 2 +- ini/stm32f4.ini | 7 +++ 6 files changed, 60 insertions(+), 25 deletions(-) create mode 100644 buildroot/share/PlatformIO/debugging/launch.json diff --git a/.gitignore b/.gitignore index bc603ba38b..a83bfa4265 100755 --- a/.gitignore +++ b/.gitignore @@ -27,7 +27,7 @@ bdf2u8g # OS # applet/ -*.DS_Store +.DS_Store # # Misc @@ -167,7 +167,3 @@ __pycache__ # IOLogger logs *_log.csv - -# Simulation / Native -eeprom.dat -imgui.ini diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 49d06590e9..40bbe6b41b 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -620,9 +620,9 @@ #elif MB(BTT_E3_RRF) #include "stm32f4/pins_BTT_E3_RRF.h" // STM32F4 env:BIGTREE_E3_RRF #elif MB(BTT_SKR_V2_0_REV_A) - #include "stm32f4/pins_BTT_SKR_V2_0_REV_A.h" // STM32F4 env:BIGTREE_SKR_2 env:BIGTREE_SKR_2_USB + #include "stm32f4/pins_BTT_SKR_V2_0_REV_A.h" // STM32F4 env:BIGTREE_SKR_2 env:BIGTREE_SKR_2_USB env:BIGTREE_SKR_2_USB_debug #elif MB(BTT_SKR_V2_0_REV_B) - #include "stm32f4/pins_BTT_SKR_V2_0_REV_B.h" // STM32F4 env:BIGTREE_SKR_2 env:BIGTREE_SKR_2_USB + #include "stm32f4/pins_BTT_SKR_V2_0_REV_B.h" // STM32F4 env:BIGTREE_SKR_2 env:BIGTREE_SKR_2_USB env:BIGTREE_SKR_2_USB_debug #elif MB(BTT_OCTOPUS_V1_0) #include "stm32f4/pins_BTT_OCTOPUS_V1_0.h" // STM32F4 env:BIGTREE_OCTOPUS_V1 env:BIGTREE_OCTOPUS_V1_USB #elif MB(BTT_OCTOPUS_V1_1) diff --git a/buildroot/share/PlatformIO/debugging/launch.json b/buildroot/share/PlatformIO/debugging/launch.json new file mode 100644 index 0000000000..335c4c663e --- /dev/null +++ b/buildroot/share/PlatformIO/debugging/launch.json @@ -0,0 +1,48 @@ +/** + * Remote debugging on STM32 using the "Cortex Debug" extension. + * + * Copy one or more of the configurations items below into .vscode/launch.json + * to add those debug options to the PlatformIO IDE "Run & Debug" panel. + * + * Examples for BigTreeTech SKR 2 (USB) and Native Simulator. Modify for your own build. + * + * NOTE: The PlatformIO extension will remove items when regenerating launch.json. + */ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug STM32 (launch)", + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "cwd": "${workspaceRoot}", + "showDevDebugOutput": false, + "configFiles": [ "interface/stlink.cfg", "target/stm32f4x.cfg" ], + "device": "STM32F407", + "executable": ".pio/build/BIGTREE_SKR_2_USB_debug/firmware.elf", + }, + { + "name": "Debug STM32 (attach)", + "request": "attach", + "type": "cortex-debug", + "servertype": "openocd", + "cwd": "${workspaceRoot}", + "showDevDebugOutput": false, + "configFiles": [ "interface/stlink.cfg", "target/stm32f4x.cfg" ], + "device": "STM32F407", + "executable": ".pio/build/BIGTREE_SKR_2_USB_debug/firmware.elf", + }, + { + "name": "Debug Sim", + "request": "launch", + "type": "cppdbg", + "cwd": "${workspaceRoot}", + //"program": ".pio/build/simulator_linux_debug/MarlinSimulator", + //"program": ".pio/build/simulator_windows/MarlinSimulator", + "program": ".pio/build/simulator_macos_debug/MarlinSimulator", + "miDebuggerPath": "/opt/local/bin/ggdb", + "MIMode": "gdb" + } + ] +} diff --git a/ini/native.ini b/ini/native.ini index 981e93f996..fe5fe3a5d0 100644 --- a/ini/native.ini +++ b/ini/native.ini @@ -29,10 +29,7 @@ src_filter = ${common.default_src_filter} + # # Tested with Linux (Mint 20) : gcc [9.3.0, 10.2.0]: libsdl2-dev[2.0.10], libsdl2-net-dev[2.0.1], libglm-dev[0.9.9.7, 0.9.9.8] # -# Debugging with gdb in vscode is as easy as adding the launch task as usual, but platformio -# will randomly remove your task when it recreates its tasks from a template. Add your gdb -# launch task to '~/.platformio/penv/lib/python{PYTHON_VERSION}/site-packages/platformio/ide/tpls/vscode/.vscode' -# to avoid this until platformio updates. +# For VSCode debugging see buildroot/share/PlatformIO/debugging/launch.json # [simulator_common] platform = native @@ -43,7 +40,6 @@ release_flags = -g0 -O3 -flto debug_build_flags = -fstack-protector-strong -g -g3 -ggdb lib_compat_mode = off src_filter = ${common.default_src_filter} + - lib_deps = ${common.lib_deps} MarlinSimUI=https://github.com/p3p/MarlinSimUI/archive/master.zip Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/marlin_sim_native.zip @@ -51,7 +47,6 @@ lib_deps = ${common.lib_deps} extra_scripts = ${common.extra_scripts} pre:buildroot/share/PlatformIO/scripts/simulator.py - [simulator_linux] extends = simulator_common build_flags = ${simulator_common.build_flags} -ldl -lpthread -lSDL2 -lSDL2_net -lGL @@ -84,17 +79,6 @@ build_flags = ${simulator_linux.build_flags} ${simulator_linux.release_flags} # Use 'sudo port install mesa' to get a if no Xcode is installed. # If Xcode is installed be sure to run `xcode-select --install` first. # -# For VSCode debugging paste the block below near the top of launch.json. -# NOTE: The PlatformIO VSCode extension will remove it when regenerating launch.json. -# -# { "name": "Debug Sim", -# "type": "cppdbg", -# "request": "launch", -# "program": "${workspaceFolder}/.pio/build/simulator_macos/MarlinSimulator", -# "miDebuggerPath": "/opt/local/bin/ggdb", -# "MIMode": "gdb", -# "cwd": "${workspaceFolder}/.pio/build/simulator_macos" }, -# [simulator_macos] build_unflags = -lGL custom_verbose = 0 diff --git a/ini/stm32f1-maple.ini b/ini/stm32f1-maple.ini index f86bf98ebd..e0b4ad711a 100644 --- a/ini/stm32f1-maple.ini +++ b/ini/stm32f1-maple.ini @@ -410,7 +410,7 @@ extends = common_stm32f1 board = genericSTM32F103VE build_flags = ${common_stm32f1.build_flags} -ffunction-sections -fdata-sections -nostdlib -MMD - -DMCU_STM32F103VE -DARDUINO_GENERIC_STM32F103V -DARDUINO_ARCH_STM32F1 -O0 + -DMCU_STM32F103VE -DARDUINO_GENERIC_STM32F103V -DARDUINO_ARCH_STM32F1 -DDEBUG_LEVEL=DEBUG_NONE -DCONFIG_MAPLE_MINI_NO_DISABLE_DEBUG=1 -DSS_TIMER=4 board_build.variant = MARLIN_F103Vx diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index 3d7f4d2d02..850807585f 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -220,6 +220,7 @@ build_flags = ${stm_flash_drive.build_flags} -DUSBD_IRQ_PRIO=5 -DUSBD_IRQ_SUBPRIO=6 -DHSE_VALUE=8000000U -DHAL_SD_MODULE_ENABLED -DPIN_SERIAL3_RX=PD_9 -DPIN_SERIAL3_TX=PD_8 +upload_protocol = stlink # # BigTreeTech SKR V2.0 (STM32F407VGT6 ARM Cortex-M4) with USB Media Share Support @@ -230,6 +231,12 @@ extends = env:BIGTREE_SKR_2 build_flags = ${env:BIGTREE_SKR_2.build_flags} -DUSBD_USE_CDC_MSC build_unflags = ${env:BIGTREE_SKR_2.build_unflags} -DUSBD_USE_CDC +[env:BIGTREE_SKR_2_USB_debug] +platform = ${common_stm32.platform} +extends = env:BIGTREE_SKR_2_USB +build_flags = ${env:BIGTREE_SKR_2_USB.build_flags} -O0 +build_unflags = ${env:BIGTREE_SKR_2_USB.build_unflags} -Os -NDEBUG + # # BigTreeTech Octopus V1.0/1.1 / Octopus Pro V1.0 (STM32F446ZET6 ARM Cortex-M4) # From 9176dcea6ee1e449aee8f4972739268d4e97f034 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 8 Jul 2021 01:17:16 -0500 Subject: [PATCH 081/532] =?UTF-8?q?=F0=9F=93=9D=20Tweak=20EXP=20comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h index d3b59e03b8..50330932cf 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h @@ -294,14 +294,14 @@ #endif /** - * ----- ----- - * NC | 1 2 | GND 5V | 1 2 | GND - * RESET | 3 4 | PC4 (SD_DETECT) (LCD_D7) PE13 | 3 4 | PE12 (LCD_D6) - * (MOSI) PA7 | 5 6 PB2 (BTN_EN2) (LCD_D5) PE11 | 5 6 PE10 (LCD_D4) - * (SD_SS) PA4 | 7 8 | PE7 (BTN_EN1) (LCD_RS) PE9 | 7 8 | PB1 (LCD_EN) - * (SCK) PA5 | 9 10| PA6 (MISO) (BTN_ENC) PB0 | 9 10| PC5 (BEEPER) - * ----- ----- - * EXP2 EXP1 + * ------ ------ + * NC | 1 2 | GND 5V | 1 2 | GND + * RESET | 3 4 | PC4 (SD_DETECT) (LCD_D7) PE13 | 3 4 | PE12 (LCD_D6) + * (MOSI) PA7 | 5 6 PB2 (BTN_EN2) (LCD_D5) PE11 | 5 6 PE10 (LCD_D4) + * (SD_SS) PA4 | 7 8 | PE7 (BTN_EN1) (LCD_RS) PE9 | 7 8 | PB1 (LCD_EN) + * (SCK) PA5 | 9 10 | PA6 (MISO) (BTN_ENC) PB0 | 9 10 | PC5 (BEEPER) + * ------ ------ + * EXP2 EXP1 */ #define EXP1_03_PIN PE13 #define EXP1_04_PIN PE12 From 5e9b5bb4482bdc4e600c2d0302faca29d6487b42 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 1 Nov 2021 01:03:28 +0000 Subject: [PATCH 082/532] [cron] Bump distribution date (2021-11-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 a638379ef4..1eb431186e 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 "2021-10-31" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 a086f1797e..aef8d8b60b 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 "2021-10-31" + #define STRING_DISTRIBUTION_DATE "2021-11-01" #endif /** From 296a6137cd06ce06f062767ab1b59f99ee95a094 Mon Sep 17 00:00:00 2001 From: tombrazier <68918209+tombrazier@users.noreply.github.com> Date: Mon, 1 Nov 2021 23:03:50 +0000 Subject: [PATCH 083/532] =?UTF-8?q?=F0=9F=9A=B8=20More=20flexible=20Probe?= =?UTF-8?q?=20Temperature=20Compensation=20(#23033)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 100 +++--- Marlin/src/feature/probe_temp_comp.cpp | 86 ++--- Marlin/src/feature/probe_temp_comp.h | 116 ++---- Marlin/src/gcode/bedlevel/abl/G29.cpp | 10 +- Marlin/src/gcode/calibrate/G76_M192_M871.cpp | 358 ------------------- Marlin/src/gcode/calibrate/G76_M871.cpp | 337 +++++++++++++++++ Marlin/src/gcode/gcode.cpp | 9 +- Marlin/src/gcode/gcode.h | 57 ++- Marlin/src/gcode/temp/M192.cpp | 56 +++ Marlin/src/inc/Conditionals_adv.h | 14 + Marlin/src/inc/SanityCheck.h | 78 ++-- Marlin/src/module/settings.cpp | 54 ++- buildroot/tests/rambo | 8 +- ini/features.ini | 9 +- platformio.ini | 3 +- 15 files changed, 672 insertions(+), 623 deletions(-) delete mode 100644 Marlin/src/gcode/calibrate/G76_M192_M871.cpp create mode 100644 Marlin/src/gcode/calibrate/G76_M871.cpp create mode 100644 Marlin/src/gcode/temp/M192.cpp diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 4efab8193c..aa6fffd44e 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1988,65 +1988,69 @@ /** * Thermal Probe Compensation - * Probe measurements are adjusted to compensate for temperature distortion. - * Use G76 to calibrate this feature. Use M871 to set values manually. - * For a more detailed explanation of the process see G76_M871.cpp. + * + * Adjust probe measurements to compensate for distortion associated with the temperature + * of the probe, bed, and/or hotend. + * Use G76 to automatically calibrate this feature for probe and bed temperatures. + * (Extruder temperature/offset values must be calibrated manually.) + * Use M871 to set temperature/offset values manually. + * For more details see https://marlinfw.org/docs/features/probe_temp_compensation.html */ -#if HAS_BED_PROBE && TEMP_SENSOR_PROBE && TEMP_SENSOR_BED - // Enable thermal first layer compensation using bed and probe temperatures - #define PROBE_TEMP_COMPENSATION +//#define PTC_PROBE // Compensate based on probe temperature +//#define PTC_BED // Compensate based on bed temperature +//#define PTC_HOTEND // Compensate based on hotend temperature - // Add additional compensation depending on hotend temperature - // Note: this values cannot be calibrated and have to be set manually - #if ENABLED(PROBE_TEMP_COMPENSATION) +#if ANY(PTC_PROBE, PTC_BED, PTC_HOTEND) + /** + * If the probe is outside the defined range, use linear extrapolation with the closest + * point and the point with index PTC_LINEAR_EXTRAPOLATION. e.g., If set to 4 it will use the + * linear extrapolation between data[0] and data[4] for values below PTC_PROBE_START. + */ + //#define PTC_LINEAR_EXTRAPOLATION 4 + + #if ENABLED(PTC_PROBE) + // Probe temperature calibration generates a table of values starting at PTC_PROBE_START + // (e.g., 30), in steps of PTC_PROBE_RES (e.g., 5) with PTC_PROBE_COUNT (e.g., 10) samples. + #define PTC_PROBE_START 30 // (°C) + #define PTC_PROBE_RES 5 // (°C) + #define PTC_PROBE_COUNT 10 + #define PTC_PROBE_ZOFFS { 0 } // (µm) Z adjustments per sample + #endif + + #if ENABLED(PTC_BED) + // Bed temperature calibration builds a similar table. + #define PTC_BED_START 60 // (°C) + #define PTC_BED_RES 5 // (°C) + #define PTC_BED_COUNT 10 + #define PTC_BED_ZOFFS { 0 } // (µm) Z adjustments per sample + #endif + + #if ENABLED(PTC_HOTEND) + // Note: There is no automatic calibration for the hotend. Use M871. + #define PTC_HOTEND_START 180 // (°C) + #define PTC_HOTEND_RES 5 // (°C) + #define PTC_HOTEND_COUNT 20 + #define PTC_HOTEND_ZOFFS { 0 } // (µm) Z adjustments per sample + #endif + + // G76 options + #if BOTH(PTC_PROBE, PTC_BED) // Park position to wait for probe cooldown #define PTC_PARK_POS { 0, 0, 100 } // Probe position to probe and wait for probe to reach target temperature + //#define PTC_PROBE_POS { 12.0f, 7.3f } // Example: MK52 magnetic heatbed #define PTC_PROBE_POS { 90, 100 } - // Enable additional compensation using hotend temperature - // Note: this values cannot be calibrated automatically but have to be set manually via M871. - //#define USE_TEMP_EXT_COMPENSATION - - // Probe temperature calibration generates a table of values starting at PTC_SAMPLE_START - // (e.g., 30), in steps of PTC_SAMPLE_RES (e.g., 5) with PTC_SAMPLE_COUNT (e.g., 10) samples. - - //#define PTC_SAMPLE_START 30 // (°C) - //#define PTC_SAMPLE_RES 5 // (°C) - //#define PTC_SAMPLE_COUNT 10 - - // Bed temperature calibration builds a similar table. - - //#define BTC_SAMPLE_START 60 // (°C) - //#define BTC_SAMPLE_RES 5 // (°C) - //#define BTC_SAMPLE_COUNT 10 - - #if ENABLED(USE_TEMP_EXT_COMPENSATION) - //#define ETC_SAMPLE_START 180 // (°C) - //#define ETC_SAMPLE_RES 5 // (°C) - //#define ETC_SAMPLE_COUNT 20 - #endif - - // The temperature the probe should be at while taking measurements during bed temperature - // calibration. - //#define BTC_PROBE_TEMP 30 // (°C) + // The temperature the probe should be at while taking measurements during + // bed temperature calibration. + #define PTC_PROBE_TEMP 30 // (°C) // Height above Z=0.0 to raise the nozzle. Lowering this can help the probe to heat faster. - // Note: the Z=0.0 offset is determined by the probe offset which can be set using M851. - //#define PTC_PROBE_HEATING_OFFSET 0.5 - - // Height to raise the Z-probe between heating and taking the next measurement. Some probes - // may fail to untrigger if they have been triggered for a long time, which can be solved by - // increasing the height the probe is raised to. - //#define PTC_PROBE_RAISE 15 - - // If the probe is outside of the defined range, use linear extrapolation using the closest - // point and the PTC_LINEAR_EXTRAPOLATION'th next point. E.g. if set to 4 it will use data[0] - // and data[4] to perform linear extrapolation for values below PTC_SAMPLE_START. - //#define PTC_LINEAR_EXTRAPOLATION 4 + // Note: The Z=0.0 offset is determined by the probe Z offset (e.g., as set with M851 Z). + #define PTC_PROBE_HEATING_OFFSET 0.5 #endif -#endif +#endif // PTC_PROBE || PTC_BED || PTC_HOTEND // @section extras diff --git a/Marlin/src/feature/probe_temp_comp.cpp b/Marlin/src/feature/probe_temp_comp.cpp index 5f3bc985e6..9a975d6763 100644 --- a/Marlin/src/feature/probe_temp_comp.cpp +++ b/Marlin/src/feature/probe_temp_comp.cpp @@ -22,39 +22,53 @@ #include "../inc/MarlinConfigPre.h" -#if ENABLED(PROBE_TEMP_COMPENSATION) +#if HAS_PTC //#define DEBUG_PTC // Print extra debug output with 'M871' #include "probe_temp_comp.h" #include -ProbeTempComp temp_comp; +ProbeTempComp ptc; -int16_t ProbeTempComp::z_offsets_probe[cali_info_init[TSI_PROBE].measurements], // = {0} - ProbeTempComp::z_offsets_bed[cali_info_init[TSI_BED].measurements]; // = {0} +#if ENABLED(PTC_PROBE) + constexpr int16_t z_offsets_probe_default[PTC_PROBE_COUNT] = PTC_PROBE_ZOFFS; + int16_t ProbeTempComp::z_offsets_probe[PTC_PROBE_COUNT] = PTC_PROBE_ZOFFS; +#endif -#if ENABLED(USE_TEMP_EXT_COMPENSATION) - int16_t ProbeTempComp::z_offsets_ext[cali_info_init[TSI_EXT].measurements]; // = {0} +#if ENABLED(PTC_BED) + constexpr int16_t z_offsets_bed_default[PTC_BED_COUNT] = PTC_BED_ZOFFS; + int16_t ProbeTempComp::z_offsets_bed[PTC_BED_COUNT] = PTC_BED_ZOFFS; +#endif + +#if ENABLED(PTC_HOTEND) + constexpr int16_t z_offsets_hotend_default[PTC_HOTEND_COUNT] = PTC_HOTEND_ZOFFS; + int16_t ProbeTempComp::z_offsets_hotend[PTC_HOTEND_COUNT] = PTC_HOTEND_ZOFFS; #endif int16_t *ProbeTempComp::sensor_z_offsets[TSI_COUNT] = { - ProbeTempComp::z_offsets_probe, ProbeTempComp::z_offsets_bed - OPTARG(USE_TEMP_EXT_COMPENSATION, ProbeTempComp::z_offsets_ext) + #if ENABLED(PTC_PROBE) + ProbeTempComp::z_offsets_probe, + #endif + #if ENABLED(PTC_BED) + ProbeTempComp::z_offsets_bed, + #endif + #if ENABLED(PTC_HOTEND) + ProbeTempComp::z_offsets_hotend, + #endif }; -const temp_calib_t ProbeTempComp::cali_info[TSI_COUNT] = { - cali_info_init[TSI_PROBE], cali_info_init[TSI_BED] - OPTARG(USE_TEMP_EXT_COMPENSATION, cali_info_init[TSI_EXT]) -}; - -constexpr xyz_pos_t ProbeTempComp::park_point; -constexpr xy_pos_t ProbeTempComp::measure_point; -constexpr celsius_t ProbeTempComp::probe_calib_bed_temp; +constexpr temp_calib_t ProbeTempComp::cali_info[TSI_COUNT]; uint8_t ProbeTempComp::calib_idx; // = 0 float ProbeTempComp::init_measurement; // = 0.0 +void ProbeTempComp::reset() { + TERN_(PTC_PROBE, LOOP_L_N(i, PTC_PROBE_COUNT) z_offsets_probe[i] = z_offsets_probe_default[i]); + TERN_(PTC_BED, LOOP_L_N(i, PTC_BED_COUNT) z_offsets_bed[i] = z_offsets_bed_default[i]); + TERN_(PTC_HOTEND, LOOP_L_N(i, PTC_HOTEND_COUNT) z_offsets_hotend[i] = z_offsets_hotend_default[i]); +} + void ProbeTempComp::clear_offsets(const TempSensorID tsi) { LOOP_L_N(i, cali_info[tsi].measurements) sensor_z_offsets[tsi][i] = 0; @@ -71,10 +85,9 @@ void ProbeTempComp::print_offsets() { LOOP_L_N(s, TSI_COUNT) { celsius_t temp = cali_info[s].start_temp; for (int16_t i = -1; i < cali_info[s].measurements; ++i) { - SERIAL_ECHOF(s == TSI_BED ? F("Bed") : - #if ENABLED(USE_TEMP_EXT_COMPENSATION) - s == TSI_EXT ? F("Extruder") : - #endif + SERIAL_ECHOF( + TERN_(PTC_BED, s == TSI_BED ? F("Bed") :) + TERN_(PTC_HOTEND, s == TSI_EXT ? F("Extruder") :) F("Probe") ); SERIAL_ECHOLNPGM( @@ -100,21 +113,13 @@ void ProbeTempComp::prepare_new_calibration(const_float_t init_meas_z) { } void ProbeTempComp::push_back_new_measurement(const TempSensorID tsi, const_float_t meas_z) { - switch (tsi) { - case TSI_PROBE: - case TSI_BED: - //case TSI_EXT: - if (calib_idx >= cali_info[tsi].measurements) return; - sensor_z_offsets[tsi][calib_idx++] = static_cast(meas_z * 1000.0f - init_measurement * 1000.0f); - default: break; - } + if (calib_idx >= cali_info[tsi].measurements) return; + sensor_z_offsets[tsi][calib_idx++] = static_cast((meas_z - init_measurement) * 1000.0f); } bool ProbeTempComp::finish_calibration(const TempSensorID tsi) { - if (tsi != TSI_PROBE && tsi != TSI_BED) return false; - - if (calib_idx < 3) { - SERIAL_ECHOLNPGM("!Insufficient measurements (min. 3)."); + if (!calib_idx) { + SERIAL_ECHOLNPGM("!No measurements."); clear_offsets(tsi); return false; } @@ -130,16 +135,15 @@ bool ProbeTempComp::finish_calibration(const TempSensorID tsi) { SERIAL_ECHOLNPGM("Got ", calib_idx, " measurements. "); if (linear_regression(tsi, k, d)) { SERIAL_ECHOPGM("Applying linear extrapolation"); - calib_idx--; for (; calib_idx < measurements; ++calib_idx) { - const celsius_float_t temp = start_temp + float(calib_idx) * res_temp; + const celsius_float_t temp = start_temp + float(calib_idx + 1) * res_temp; data[calib_idx] = static_cast(k * temp + d); } } else { // Simply use the last measured value for higher temperatures SERIAL_ECHOPGM("Failed to extrapolate"); - const int16_t last_val = data[calib_idx]; + const int16_t last_val = data[calib_idx-1]; for (; calib_idx < measurements; ++calib_idx) data[calib_idx] = last_val; } @@ -157,7 +161,7 @@ bool ProbeTempComp::finish_calibration(const TempSensorID tsi) { // Restrict the max. offset difference between two probings if (calib_idx > 0 && ABS(data[calib_idx - 1] - data[calib_idx]) > 800) { SERIAL_ECHOLNPGM("!Invalid Z-offset between two probings detected (0-0.8)."); - clear_offsets(TSI_PROBE); + clear_offsets(tsi); return false; } } @@ -168,8 +172,8 @@ bool ProbeTempComp::finish_calibration(const TempSensorID tsi) { void ProbeTempComp::compensate_measurement(const TempSensorID tsi, const celsius_t temp, float &meas_z) { const uint8_t measurements = cali_info[tsi].measurements; const celsius_t start_temp = cali_info[tsi].start_temp, - end_temp = cali_info[tsi].end_temp, - res_temp = cali_info[tsi].temp_resolution; + res_temp = cali_info[tsi].temp_resolution, + end_temp = start_temp + measurements * res_temp; const int16_t * const data = sensor_z_offsets[tsi]; // Given a data index, return { celsius, zoffset } in the form { x, y } @@ -208,9 +212,7 @@ void ProbeTempComp::compensate_measurement(const TempSensorID tsi, const celsius } bool ProbeTempComp::linear_regression(const TempSensorID tsi, float &k, float &d) { - if (tsi != TSI_PROBE && tsi != TSI_BED) return false; - - if (!WITHIN(calib_idx, 2, cali_info[tsi].measurements)) return false; + if (!WITHIN(calib_idx, 1, cali_info[tsi].measurements)) return false; const celsius_t start_temp = cali_info[tsi].start_temp, res_temp = cali_info[tsi].temp_resolution; @@ -243,4 +245,4 @@ bool ProbeTempComp::linear_regression(const TempSensorID tsi, float &k, float &d return true; } -#endif // PROBE_TEMP_COMPENSATION +#endif // HAS_PTC diff --git a/Marlin/src/feature/probe_temp_comp.h b/Marlin/src/feature/probe_temp_comp.h index e5d459b8e8..4579f2187c 100644 --- a/Marlin/src/feature/probe_temp_comp.h +++ b/Marlin/src/feature/probe_temp_comp.h @@ -24,9 +24,13 @@ #include "../inc/MarlinConfig.h" enum TempSensorID : uint8_t { - TSI_PROBE, - TSI_BED, - #if ENABLED(USE_TEMP_EXT_COMPENSATION) + #if ENABLED(PTC_PROBE) + TSI_PROBE, + #endif + #if ENABLED(PTC_BED) + TSI_BED, + #endif + #if ENABLED(PTC_HOTEND) TSI_EXT, #endif TSI_COUNT @@ -35,8 +39,7 @@ enum TempSensorID : uint8_t { typedef struct { uint8_t measurements; // Max. number of measurements to be stored (35 - 80°C) celsius_t temp_resolution, // Resolution in °C between measurements - start_temp, // Base measurement; z-offset == 0 - end_temp; + start_temp; // Base measurement; z-offset == 0 } temp_calib_t; /** @@ -45,93 +48,40 @@ typedef struct { * measurement errors/shifts due to changed temperature. */ -// Probe temperature calibration constants -#ifndef PTC_SAMPLE_COUNT - #define PTC_SAMPLE_COUNT 10 -#endif -#ifndef PTC_SAMPLE_RES - #define PTC_SAMPLE_RES 5 -#endif -#ifndef PTC_SAMPLE_START - #define PTC_SAMPLE_START 30 -#endif -#define PTC_SAMPLE_END (PTC_SAMPLE_START + (PTC_SAMPLE_COUNT) * PTC_SAMPLE_RES) - -// Bed temperature calibration constants -#ifndef BTC_PROBE_TEMP - #define BTC_PROBE_TEMP 30 -#endif -#ifndef BTC_SAMPLE_COUNT - #define BTC_SAMPLE_COUNT 10 -#endif -#ifndef BTC_SAMPLE_RES - #define BTC_SAMPLE_RES 5 -#endif -#ifndef BTC_SAMPLE_START - #define BTC_SAMPLE_START 60 -#endif -#define BTC_SAMPLE_END (BTC_SAMPLE_START + (BTC_SAMPLE_COUNT) * BTC_SAMPLE_RES) - -// Extruder temperature calibration constants -#if ENABLED(USE_TEMP_EXT_COMPENSATION) - #ifndef ETC_SAMPLE_COUNT - #define ETC_SAMPLE_COUNT 20 - #endif - #ifndef ETC_SAMPLE_RES - #define ETC_SAMPLE_RES 5 - #endif - #ifndef ETC_SAMPLE_START - #define ETC_SAMPLE_START 180 - #endif - #define ETC_SAMPLE_END (ETC_SAMPLE_START + (ETC_SAMPLE_COUNT) * ETC_SAMPLE_RES) -#endif - -#ifndef PTC_PROBE_HEATING_OFFSET - #define PTC_PROBE_HEATING_OFFSET 0.5f -#endif - -#ifndef PTC_PROBE_RAISE - #define PTC_PROBE_RAISE 10 -#endif - -static constexpr temp_calib_t cali_info_init[TSI_COUNT] = { - { PTC_SAMPLE_COUNT, PTC_SAMPLE_RES, PTC_SAMPLE_START, PTC_SAMPLE_END }, // Probe - { BTC_SAMPLE_COUNT, BTC_SAMPLE_RES, BTC_SAMPLE_START, BTC_SAMPLE_END }, // Bed - #if ENABLED(USE_TEMP_EXT_COMPENSATION) - { ETC_SAMPLE_COUNT, ETC_SAMPLE_RES, ETC_SAMPLE_START, ETC_SAMPLE_END }, // Extruder - #endif -}; - class ProbeTempComp { public: - static const temp_calib_t cali_info[TSI_COUNT]; + static constexpr temp_calib_t cali_info[TSI_COUNT] = { + #if ENABLED(PTC_PROBE) + { PTC_PROBE_COUNT, PTC_PROBE_RES, PTC_PROBE_START }, // Probe + #endif + #if ENABLED(PTC_BED) + { PTC_BED_COUNT, PTC_BED_RES, PTC_BED_START }, // Bed + #endif + #if ENABLED(PTC_HOTEND) + { PTC_HOTEND_COUNT, PTC_HOTEND_RES, PTC_HOTEND_START }, // Extruder + #endif + }; - // Where to park nozzle to wait for probe cooldown - static constexpr xyz_pos_t park_point = PTC_PARK_POS; - - // XY coordinates of nozzle for probing the bed - static constexpr xy_pos_t measure_point = PTC_PROBE_POS; // Coordinates to probe - //measure_point = { 12.0f, 7.3f }; // Coordinates for the MK52 magnetic heatbed - - static constexpr celsius_t probe_calib_bed_temp = BED_MAX_TARGET, // Bed temperature while calibrating probe - bed_calib_probe_temp = BTC_PROBE_TEMP; // Probe temperature while calibrating bed - - static int16_t *sensor_z_offsets[TSI_COUNT], - z_offsets_probe[cali_info_init[TSI_PROBE].measurements], // (µm) - z_offsets_bed[cali_info_init[TSI_BED].measurements]; // (µm) - - #if ENABLED(USE_TEMP_EXT_COMPENSATION) - static int16_t z_offsets_ext[cali_info_init[TSI_EXT].measurements]; // (µm) + static int16_t *sensor_z_offsets[TSI_COUNT]; + #if ENABLED(PTC_PROBE) + static int16_t z_offsets_probe[PTC_PROBE_COUNT]; // (µm) + #endif + #if ENABLED(PTC_BED) + static int16_t z_offsets_bed[PTC_BED_COUNT]; // (µm) + #endif + #if ENABLED(PTC_HOTEND) + static int16_t z_offsets_hotend[PTC_HOTEND_COUNT]; // (µm) #endif static inline void reset_index() { calib_idx = 0; }; static inline uint8_t get_index() { return calib_idx; } + static void reset(); static void clear_offsets(const TempSensorID tsi); static inline void clear_all_offsets() { - clear_offsets(TSI_BED); - clear_offsets(TSI_PROBE); - TERN_(USE_TEMP_EXT_COMPENSATION, clear_offsets(TSI_EXT)); + TERN_(PTC_PROBE, clear_offsets(TSI_PROBE)); + TERN_(PTC_BED, clear_offsets(TSI_BED)); + TERN_(PTC_HOTEND, clear_offsets(TSI_EXT)); } static bool set_offset(const TempSensorID tsi, const uint8_t idx, const int16_t offset); static void print_offsets(); @@ -156,4 +106,4 @@ class ProbeTempComp { static bool linear_regression(const TempSensorID tsi, float &k, float &d); }; -extern ProbeTempComp temp_comp; +extern ProbeTempComp ptc; diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 5d94797f16..14da38c8fe 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -36,7 +36,7 @@ #include "../../../module/probe.h" #include "../../queue.h" -#if ENABLED(PROBE_TEMP_COMPENSATION) +#if HAS_PTC #include "../../../feature/probe_temp_comp.h" #include "../../../module/temperature.h" #endif @@ -645,11 +645,9 @@ G29_TYPE GcodeSuite::G29() { break; // Breaks out of both loops } - #if ENABLED(PROBE_TEMP_COMPENSATION) - temp_comp.compensate_measurement(TSI_BED, thermalManager.degBed(), abl.measured_z); - temp_comp.compensate_measurement(TSI_PROBE, thermalManager.degProbe(), abl.measured_z); - TERN_(USE_TEMP_EXT_COMPENSATION, temp_comp.compensate_measurement(TSI_EXT, thermalManager.degHotend(0), abl.measured_z)); - #endif + TERN_(PTC_BED, ptc.compensate_measurement(TSI_BED, thermalManager.degBed(), abl.measured_z)); + TERN_(PTC_PROBE, ptc.compensate_measurement(TSI_PROBE, thermalManager.degProbe(), abl.measured_z)); + TERN_(PTC_HOTEND, ptc.compensate_measurement(TSI_EXT, thermalManager.degHotend(0), abl.measured_z)); #if ENABLED(AUTO_BED_LEVELING_LINEAR) diff --git a/Marlin/src/gcode/calibrate/G76_M192_M871.cpp b/Marlin/src/gcode/calibrate/G76_M192_M871.cpp deleted file mode 100644 index 0fc41ed929..0000000000 --- a/Marlin/src/gcode/calibrate/G76_M192_M871.cpp +++ /dev/null @@ -1,358 +0,0 @@ -/** - * Marlin 3D Printer Firmware - * Copyright (c) 2020 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 . - * - */ - -/** - * G76_M871.cpp - Temperature calibration/compensation for z-probing - */ - -#include "../../inc/MarlinConfig.h" - -#if ENABLED(PROBE_TEMP_COMPENSATION) - -#include "../gcode.h" -#include "../../module/motion.h" -#include "../../module/planner.h" -#include "../../module/probe.h" -#include "../../feature/bedlevel/bedlevel.h" -#include "../../module/temperature.h" -#include "../../module/probe.h" -#include "../../feature/probe_temp_comp.h" -#include "../../lcd/marlinui.h" - -/** - * G76: calibrate probe and/or bed temperature offsets - * Notes: - * - When calibrating probe, bed temperature is held constant. - * Compensation values are deltas to first probe measurement at probe temp. = 30°C. - * - When calibrating bed, probe temperature is held constant. - * Compensation values are deltas to first probe measurement at bed temp. = 60°C. - * - The hotend will not be heated at any time. - * - On my Průša MK3S clone I put a piece of paper between the probe and the hotend - * so the hotend fan would not cool my probe constantly. Alternatively you could just - * make sure the fan is not running while running the calibration process. - * - * Probe calibration: - * - Moves probe to cooldown point. - * - Heats up bed to 100°C. - * - Moves probe to probing point (1mm above heatbed). - * - Waits until probe reaches target temperature (30°C). - * - Does a z-probing (=base value) and increases target temperature by 5°C. - * - Waits until probe reaches increased target temperature. - * - Does a z-probing (delta to base value will be a compensation value) and increases target temperature by 5°C. - * - Repeats last two steps until max. temperature reached or timeout (i.e. probe does not heat up any further). - * - Compensation values of higher temperatures will be extrapolated (using linear regression first). - * While this is not exact by any means it is still better than simply using the last compensation value. - * - * Bed calibration: - * - Moves probe to cooldown point. - * - Heats up bed to 60°C. - * - Moves probe to probing point (1mm above heatbed). - * - Waits until probe reaches target temperature (30°C). - * - Does a z-probing (=base value) and increases bed temperature by 5°C. - * - Moves probe to cooldown point. - * - Waits until probe is below 30°C and bed has reached target temperature. - * - Moves probe to probing point and waits until it reaches target temperature (30°C). - * - Does a z-probing (delta to base value will be a compensation value) and increases bed temperature by 5°C. - * - Repeats last four points until max. bed temperature reached (110°C) or timeout. - * - Compensation values of higher temperatures will be extrapolated (using linear regression first). - * While this is not exact by any means it is still better than simply using the last compensation value. - * - * G76 [B | P] - * - no flag - Both calibration procedures will be run. - * - `B` - Run bed temperature calibration. - * - `P` - Run probe temperature calibration. - */ - -static void say_waiting_for() { SERIAL_ECHOPGM("Waiting for "); } -static void say_waiting_for_probe_heating() { say_waiting_for(); SERIAL_ECHOLNPGM("probe heating."); } -static void say_successfully_calibrated() { SERIAL_ECHOPGM("Successfully calibrated"); } -static void say_failed_to_calibrate() { SERIAL_ECHOPGM("!Failed to calibrate"); } - -void GcodeSuite::G76() { - // Check if heated bed is available and z-homing is done with probe - #if TEMP_SENSOR_BED == 0 || !(HOMING_Z_WITH_PROBE) - return; - #endif - - auto report_temps = [](millis_t &ntr, millis_t timeout=0) { - idle_no_sleep(); - const millis_t ms = millis(); - if (ELAPSED(ms, ntr)) { - ntr = ms + 1000; - thermalManager.print_heater_states(active_extruder); - } - return (timeout && ELAPSED(ms, timeout)); - }; - - auto wait_for_temps = [&](const celsius_t tb, const celsius_t tp, millis_t &ntr, const millis_t timeout=0) { - say_waiting_for(); SERIAL_ECHOLNPGM("bed and probe temperature."); - while (thermalManager.wholeDegBed() != tb || thermalManager.wholeDegProbe() > tp) - if (report_temps(ntr, timeout)) return true; - return false; - }; - - auto g76_probe = [](const TempSensorID sid, celsius_t &targ, const xy_pos_t &nozpos) { - do_z_clearance(5.0); // Raise nozzle before probing - const float measured_z = probe.probe_at_point(nozpos, PROBE_PT_STOW, 0, false); // verbose=0, probe_relative=false - if (isnan(measured_z)) - SERIAL_ECHOLNPGM("!Received NAN. Aborting."); - else { - SERIAL_ECHOLNPAIR_F("Measured: ", measured_z); - if (targ == cali_info_init[sid].start_temp) - temp_comp.prepare_new_calibration(measured_z); - else - temp_comp.push_back_new_measurement(sid, measured_z); - targ += cali_info_init[sid].temp_resolution; - } - return measured_z; - }; - - #if ENABLED(BLTOUCH) - // Make sure any BLTouch error condition is cleared - bltouch_command(BLTOUCH_RESET, BLTOUCH_RESET_DELAY); - set_bltouch_deployed(false); - #endif - - bool do_bed_cal = parser.boolval('B'), do_probe_cal = parser.boolval('P'); - if (!do_bed_cal && !do_probe_cal) do_bed_cal = do_probe_cal = true; - - // Synchronize with planner - planner.synchronize(); - - const xyz_pos_t parkpos = temp_comp.park_point, - probe_pos_xyz = xyz_pos_t(temp_comp.measure_point) + xyz_pos_t({ 0.0f, 0.0f, PTC_PROBE_HEATING_OFFSET }), - noz_pos_xyz = probe_pos_xyz - probe.offset_xy; // Nozzle position based on probe position - - if (do_bed_cal || do_probe_cal) { - // Ensure park position is reachable - bool reachable = position_is_reachable(parkpos) || WITHIN(parkpos.z, Z_MIN_POS - fslop, Z_MAX_POS + fslop); - if (!reachable) - SERIAL_ECHOLNPGM("!Park"); - else { - // Ensure probe position is reachable - reachable = probe.can_reach(probe_pos_xyz); - if (!reachable) SERIAL_ECHOLNPGM("!Probe"); - } - - if (!reachable) { - SERIAL_ECHOLNPGM(" position unreachable - aborting."); - return; - } - - process_subcommands_now(FPSTR(G28_STR)); - } - - remember_feedrate_scaling_off(); - - /****************************************** - * Calibrate bed temperature offsets - ******************************************/ - - // Report temperatures every second and handle heating timeouts - millis_t next_temp_report = millis() + 1000; - - auto report_targets = [&](const celsius_t tb, const celsius_t tp) { - SERIAL_ECHOLNPGM("Target Bed:", tb, " Probe:", tp); - }; - - if (do_bed_cal) { - - celsius_t target_bed = cali_info_init[TSI_BED].start_temp, - target_probe = temp_comp.bed_calib_probe_temp; - - say_waiting_for(); SERIAL_ECHOLNPGM(" cooling."); - while (thermalManager.wholeDegBed() > target_bed || thermalManager.wholeDegProbe() > target_probe) - report_temps(next_temp_report); - - // Disable leveling so it won't mess with us - TERN_(HAS_LEVELING, set_bed_leveling_enabled(false)); - - for (;;) { - thermalManager.setTargetBed(target_bed); - - report_targets(target_bed, target_probe); - - // Park nozzle - do_blocking_move_to(parkpos); - - // Wait for heatbed to reach target temp and probe to cool below target temp - if (wait_for_temps(target_bed, target_probe, next_temp_report, millis() + MIN_TO_MS(15))) { - SERIAL_ECHOLNPGM("!Bed heating timeout."); - break; - } - - // Move the nozzle to the probing point and wait for the probe to reach target temp - do_blocking_move_to(noz_pos_xyz); - say_waiting_for_probe_heating(); - SERIAL_EOL(); - while (thermalManager.wholeDegProbe() < target_probe) - report_temps(next_temp_report); - - const float measured_z = g76_probe(TSI_BED, target_bed, noz_pos_xyz); - if (isnan(measured_z) || target_bed > (BED_MAX_TARGET)) break; - } - - SERIAL_ECHOLNPGM("Retrieved measurements: ", temp_comp.get_index()); - if (temp_comp.finish_calibration(TSI_BED)) { - say_successfully_calibrated(); - SERIAL_ECHOLNPGM(" bed."); - } - else { - say_failed_to_calibrate(); - SERIAL_ECHOLNPGM(" bed. Values reset."); - } - - // Cleanup - thermalManager.setTargetBed(0); - TERN_(HAS_LEVELING, set_bed_leveling_enabled(true)); - } // do_bed_cal - - /******************************************** - * Calibrate probe temperature offsets - ********************************************/ - - if (do_probe_cal) { - - // Park nozzle - do_blocking_move_to(parkpos); - - // Initialize temperatures - const celsius_t target_bed = temp_comp.probe_calib_bed_temp; - thermalManager.setTargetBed(target_bed); - - celsius_t target_probe = cali_info_init[TSI_PROBE].start_temp; - - report_targets(target_bed, target_probe); - - // Wait for heatbed to reach target temp and probe to cool below target temp - wait_for_temps(target_bed, target_probe, next_temp_report); - - // Disable leveling so it won't mess with us - TERN_(HAS_LEVELING, set_bed_leveling_enabled(false)); - - bool timeout = false; - for (;;) { - // Move probe to probing point and wait for it to reach target temperature - do_blocking_move_to(noz_pos_xyz); - - say_waiting_for_probe_heating(); - SERIAL_ECHOLNPGM(" Bed:", target_bed, " Probe:", target_probe); - const millis_t probe_timeout_ms = millis() + SEC_TO_MS(900UL); - while (thermalManager.degProbe() < target_probe) { - if (report_temps(next_temp_report, probe_timeout_ms)) { - SERIAL_ECHOLNPGM("!Probe heating timed out."); - timeout = true; - break; - } - } - if (timeout) break; - - const float measured_z = g76_probe(TSI_PROBE, target_probe, noz_pos_xyz); - if (isnan(measured_z) || target_probe > cali_info_init[TSI_PROBE].end_temp) break; - } - - SERIAL_ECHOLNPGM("Retrieved measurements: ", temp_comp.get_index()); - if (temp_comp.finish_calibration(TSI_PROBE)) - say_successfully_calibrated(); - else - say_failed_to_calibrate(); - SERIAL_ECHOLNPGM(" probe."); - - // Cleanup - thermalManager.setTargetBed(0); - TERN_(HAS_LEVELING, set_bed_leveling_enabled(true)); - - SERIAL_ECHOLNPGM("Final compensation values:"); - temp_comp.print_offsets(); - } // do_probe_cal - - restore_feedrate_and_scaling(); -} - -/** - * M871: Report / reset temperature compensation offsets. - * Note: This does not affect values in EEPROM until M500. - * - * M871 [ R | B | P | E ] - * - * No Parameters - Print current offset values. - * - * Select only one of these flags: - * R - Reset all offsets to zero (i.e., disable compensation). - * B - Manually set offset for bed - * P - Manually set offset for probe - * E - Manually set offset for extruder - * - * With B, P, or E: - * I[index] - Index in the array - * V[value] - Adjustment in µm - */ -void GcodeSuite::M871() { - - if (parser.seen('R')) { - // Reset z-probe offsets to factory defaults - temp_comp.clear_all_offsets(); - SERIAL_ECHOLNPGM("Offsets reset to default."); - } - else if (parser.seen("BPE")) { - if (!parser.seenval('V')) return; - const int16_t offset_val = parser.value_int(); - if (!parser.seenval('I')) return; - const int16_t idx = parser.value_int(); - const TempSensorID mod = (parser.seen('B') ? TSI_BED : - #if ENABLED(USE_TEMP_EXT_COMPENSATION) - parser.seen('E') ? TSI_EXT : - #endif - TSI_PROBE - ); - if (idx > 0 && temp_comp.set_offset(mod, idx - 1, offset_val)) - SERIAL_ECHOLNPGM("Set value: ", offset_val); - else - SERIAL_ECHOLNPGM("!Invalid index. Failed to set value (note: value at index 0 is constant)."); - - } - else // Print current Z-probe adjustments. Note: Values in EEPROM might differ. - temp_comp.print_offsets(); -} - -/** - * M192: Wait for probe temperature sensor to reach a target - * - * Select only one of these flags: - * R - Wait for heating or cooling - * S - Wait only for heating - */ -void GcodeSuite::M192() { - if (DEBUGGING(DRYRUN)) return; - - const bool no_wait_for_cooling = parser.seenval('S'); - if (!no_wait_for_cooling && ! parser.seenval('R')) { - SERIAL_ERROR_MSG("No target temperature set."); - return; - } - - const celsius_t target_temp = parser.value_celsius(); - ui.set_status(thermalManager.isProbeBelowTemp(target_temp) ? GET_TEXT_F(MSG_PROBE_HEATING) : GET_TEXT_F(MSG_PROBE_COOLING)); - thermalManager.wait_for_probe(target_temp, no_wait_for_cooling); -} - -#endif // PROBE_TEMP_COMPENSATION diff --git a/Marlin/src/gcode/calibrate/G76_M871.cpp b/Marlin/src/gcode/calibrate/G76_M871.cpp new file mode 100644 index 0000000000..21bb2c7590 --- /dev/null +++ b/Marlin/src/gcode/calibrate/G76_M871.cpp @@ -0,0 +1,337 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2020 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 . + * + */ + +/** + * G76_M871.cpp - Temperature calibration/compensation for z-probing + */ + +#include "../../inc/MarlinConfig.h" + +#if HAS_PTC + +#include "../gcode.h" +#include "../../module/motion.h" +#include "../../module/planner.h" +#include "../../module/probe.h" +#include "../../feature/bedlevel/bedlevel.h" +#include "../../module/temperature.h" +#include "../../module/probe.h" +#include "../../feature/probe_temp_comp.h" +#include "../../lcd/marlinui.h" + +/** + * G76: calibrate probe and/or bed temperature offsets + * Notes: + * - When calibrating probe, bed temperature is held constant. + * Compensation values are deltas to first probe measurement at probe temp. = 30°C. + * - When calibrating bed, probe temperature is held constant. + * Compensation values are deltas to first probe measurement at bed temp. = 60°C. + * - The hotend will not be heated at any time. + * - On my Průša MK3S clone I put a piece of paper between the probe and the hotend + * so the hotend fan would not cool my probe constantly. Alternatively you could just + * make sure the fan is not running while running the calibration process. + * + * Probe calibration: + * - Moves probe to cooldown point. + * - Heats up bed to 100°C. + * - Moves probe to probing point (1mm above heatbed). + * - Waits until probe reaches target temperature (30°C). + * - Does a z-probing (=base value) and increases target temperature by 5°C. + * - Waits until probe reaches increased target temperature. + * - Does a z-probing (delta to base value will be a compensation value) and increases target temperature by 5°C. + * - Repeats last two steps until max. temperature reached or timeout (i.e. probe does not heat up any further). + * - Compensation values of higher temperatures will be extrapolated (using linear regression first). + * While this is not exact by any means it is still better than simply using the last compensation value. + * + * Bed calibration: + * - Moves probe to cooldown point. + * - Heats up bed to 60°C. + * - Moves probe to probing point (1mm above heatbed). + * - Waits until probe reaches target temperature (30°C). + * - Does a z-probing (=base value) and increases bed temperature by 5°C. + * - Moves probe to cooldown point. + * - Waits until probe is below 30°C and bed has reached target temperature. + * - Moves probe to probing point and waits until it reaches target temperature (30°C). + * - Does a z-probing (delta to base value will be a compensation value) and increases bed temperature by 5°C. + * - Repeats last four points until max. bed temperature reached (110°C) or timeout. + * - Compensation values of higher temperatures will be extrapolated (using linear regression first). + * While this is not exact by any means it is still better than simply using the last compensation value. + * + * G76 [B | P] + * - no flag - Both calibration procedures will be run. + * - `B` - Run bed temperature calibration. + * - `P` - Run probe temperature calibration. + */ + +static void say_waiting_for() { SERIAL_ECHOPGM("Waiting for "); } +static void say_waiting_for_probe_heating() { say_waiting_for(); SERIAL_ECHOLNPGM("probe heating."); } +static void say_successfully_calibrated() { SERIAL_ECHOPGM("Successfully calibrated"); } +static void say_failed_to_calibrate() { SERIAL_ECHOPGM("!Failed to calibrate"); } + +#if BOTH(PTC_PROBE, PTC_BED) + + void GcodeSuite::G76() { + auto report_temps = [](millis_t &ntr, millis_t timeout=0) { + idle_no_sleep(); + const millis_t ms = millis(); + if (ELAPSED(ms, ntr)) { + ntr = ms + 1000; + thermalManager.print_heater_states(active_extruder); + } + return (timeout && ELAPSED(ms, timeout)); + }; + + auto wait_for_temps = [&](const celsius_t tb, const celsius_t tp, millis_t &ntr, const millis_t timeout=0) { + say_waiting_for(); SERIAL_ECHOLNPGM("bed and probe temperature."); + while (thermalManager.wholeDegBed() != tb || thermalManager.wholeDegProbe() > tp) + if (report_temps(ntr, timeout)) return true; + return false; + }; + + auto g76_probe = [](const TempSensorID sid, celsius_t &targ, const xy_pos_t &nozpos) { + do_z_clearance(5.0); // Raise nozzle before probing + const float measured_z = probe.probe_at_point(nozpos, PROBE_PT_STOW, 0, false); // verbose=0, probe_relative=false + if (isnan(measured_z)) + SERIAL_ECHOLNPGM("!Received NAN. Aborting."); + else { + SERIAL_ECHOLNPAIR_F("Measured: ", measured_z); + if (targ == ProbeTempComp::cali_info[sid].start_temp) + ptc.prepare_new_calibration(measured_z); + else + ptc.push_back_new_measurement(sid, measured_z); + targ += ProbeTempComp::cali_info[sid].temp_resolution; + } + return measured_z; + }; + + #if ENABLED(BLTOUCH) + // Make sure any BLTouch error condition is cleared + bltouch_command(BLTOUCH_RESET, BLTOUCH_RESET_DELAY); + set_bltouch_deployed(false); + #endif + + bool do_bed_cal = parser.boolval('B'), do_probe_cal = parser.boolval('P'); + if (!do_bed_cal && !do_probe_cal) do_bed_cal = do_probe_cal = true; + + // Synchronize with planner + planner.synchronize(); + + #ifndef PTC_PROBE_HEATING_OFFSET + #define PTC_PROBE_HEATING_OFFSET 0 + #endif + const xyz_pos_t parkpos = PTC_PARK_POS, + probe_pos_xyz = xyz_pos_t(PTC_PROBE_POS) + xyz_pos_t({ 0.0f, 0.0f, PTC_PROBE_HEATING_OFFSET }), + noz_pos_xyz = probe_pos_xyz - probe.offset_xy; // Nozzle position based on probe position + + if (do_bed_cal || do_probe_cal) { + // Ensure park position is reachable + bool reachable = position_is_reachable(parkpos) || WITHIN(parkpos.z, Z_MIN_POS - fslop, Z_MAX_POS + fslop); + if (!reachable) + SERIAL_ECHOLNPGM("!Park"); + else { + // Ensure probe position is reachable + reachable = probe.can_reach(probe_pos_xyz); + if (!reachable) SERIAL_ECHOLNPGM("!Probe"); + } + + if (!reachable) { + SERIAL_ECHOLNPGM(" position unreachable - aborting."); + return; + } + + process_subcommands_now(FPSTR(G28_STR)); + } + + remember_feedrate_scaling_off(); + + /****************************************** + * Calibrate bed temperature offsets + ******************************************/ + + // Report temperatures every second and handle heating timeouts + millis_t next_temp_report = millis() + 1000; + + auto report_targets = [&](const celsius_t tb, const celsius_t tp) { + SERIAL_ECHOLNPGM("Target Bed:", tb, " Probe:", tp); + }; + + if (do_bed_cal) { + + celsius_t target_bed = PTC_BED_START, + target_probe = PTC_PROBE_TEMP; + + say_waiting_for(); SERIAL_ECHOLNPGM(" cooling."); + while (thermalManager.wholeDegBed() > target_bed || thermalManager.wholeDegProbe() > target_probe) + report_temps(next_temp_report); + + // Disable leveling so it won't mess with us + TERN_(HAS_LEVELING, set_bed_leveling_enabled(false)); + + for (uint8_t idx = 0; idx <= PTC_BED_COUNT; idx++) { + thermalManager.setTargetBed(target_bed); + + report_targets(target_bed, target_probe); + + // Park nozzle + do_blocking_move_to(parkpos); + + // Wait for heatbed to reach target temp and probe to cool below target temp + if (wait_for_temps(target_bed, target_probe, next_temp_report, millis() + MIN_TO_MS(15))) { + SERIAL_ECHOLNPGM("!Bed heating timeout."); + break; + } + + // Move the nozzle to the probing point and wait for the probe to reach target temp + do_blocking_move_to(noz_pos_xyz); + say_waiting_for_probe_heating(); + SERIAL_EOL(); + while (thermalManager.wholeDegProbe() < target_probe) + report_temps(next_temp_report); + + const float measured_z = g76_probe(TSI_BED, target_bed, noz_pos_xyz); + if (isnan(measured_z) || target_bed > (BED_MAX_TARGET)) break; + } + + SERIAL_ECHOLNPGM("Retrieved measurements: ", ptc.get_index()); + if (ptc.finish_calibration(TSI_BED)) { + say_successfully_calibrated(); + SERIAL_ECHOLNPGM(" bed."); + } + else { + say_failed_to_calibrate(); + SERIAL_ECHOLNPGM(" bed. Values reset."); + } + + // Cleanup + thermalManager.setTargetBed(0); + TERN_(HAS_LEVELING, set_bed_leveling_enabled(true)); + } // do_bed_cal + + /******************************************** + * Calibrate probe temperature offsets + ********************************************/ + + if (do_probe_cal) { + + // Park nozzle + do_blocking_move_to(parkpos); + + // Initialize temperatures + const celsius_t target_bed = BED_MAX_TARGET; + thermalManager.setTargetBed(target_bed); + + celsius_t target_probe = PTC_PROBE_START; + + report_targets(target_bed, target_probe); + + // Wait for heatbed to reach target temp and probe to cool below target temp + wait_for_temps(target_bed, target_probe, next_temp_report); + + // Disable leveling so it won't mess with us + TERN_(HAS_LEVELING, set_bed_leveling_enabled(false)); + + bool timeout = false; + for (uint8_t idx = 0; idx <= PTC_PROBE_COUNT; idx++) { + // Move probe to probing point and wait for it to reach target temperature + do_blocking_move_to(noz_pos_xyz); + + say_waiting_for_probe_heating(); + SERIAL_ECHOLNPGM(" Bed:", target_bed, " Probe:", target_probe); + const millis_t probe_timeout_ms = millis() + SEC_TO_MS(900UL); + while (thermalManager.degProbe() < target_probe) { + if (report_temps(next_temp_report, probe_timeout_ms)) { + SERIAL_ECHOLNPGM("!Probe heating timed out."); + timeout = true; + break; + } + } + if (timeout) break; + + const float measured_z = g76_probe(TSI_PROBE, target_probe, noz_pos_xyz); + if (isnan(measured_z)) break; + } + + SERIAL_ECHOLNPGM("Retrieved measurements: ", ptc.get_index()); + if (ptc.finish_calibration(TSI_PROBE)) + say_successfully_calibrated(); + else + say_failed_to_calibrate(); + SERIAL_ECHOLNPGM(" probe."); + + // Cleanup + thermalManager.setTargetBed(0); + TERN_(HAS_LEVELING, set_bed_leveling_enabled(true)); + + SERIAL_ECHOLNPGM("Final compensation values:"); + ptc.print_offsets(); + } // do_probe_cal + + restore_feedrate_and_scaling(); + } + +#endif // PTC_PROBE && PTC_BED + +/** + * M871: Report / reset temperature compensation offsets. + * Note: This does not affect values in EEPROM until M500. + * + * M871 [ R | B | P | E ] + * + * No Parameters - Print current offset values. + * + * Select only one of these flags: + * R - Reset all offsets to zero (i.e., disable compensation). + * B - Manually set offset for bed + * P - Manually set offset for probe + * E - Manually set offset for extruder + * + * With B, P, or E: + * I[index] - Index in the array + * V[value] - Adjustment in µm + */ +void GcodeSuite::M871() { + + if (parser.seen('R')) { + // Reset z-probe offsets to factory defaults + ptc.clear_all_offsets(); + SERIAL_ECHOLNPGM("Offsets reset to default."); + } + else if (parser.seen("BPE")) { + if (!parser.seenval('V')) return; + const int16_t offset_val = parser.value_int(); + if (!parser.seenval('I')) return; + const int16_t idx = parser.value_int(); + const TempSensorID mod = TERN_(PTC_BED, parser.seen_test('B') ? TSI_BED :) + TERN_(PTC_HOTEND, parser.seen_test('E') ? TSI_EXT :) + TERN_(PTC_PROBE, parser.seen_test('P') ? TSI_PROBE :) TSI_COUNT; + if (mod == TSI_COUNT) + SERIAL_ECHOLNPGM("!Invalid sensor."); + else if (idx > 0 && ptc.set_offset(mod, idx - 1, offset_val)) + SERIAL_ECHOLNPGM("Set value: ", offset_val); + else + SERIAL_ECHOLNPGM("!Invalid index. Failed to set value (note: value at index 0 is constant)."); + } + else // Print current Z-probe adjustments. Note: Values in EEPROM might differ. + ptc.print_offsets(); +} + +#endif // HAS_PTC diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index fb1669c1ea..b2cb26122f 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -424,7 +424,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { case 61: G61(); break; // G61: Apply/restore saved coordinates. #endif - #if ENABLED(PROBE_TEMP_COMPENSATION) + #if BOTH(PTC_PROBE, PTC_BED) case 76: G76(); break; // G76: Calibrate first layer compensation values #endif @@ -587,6 +587,10 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { case 191: M191(); break; // M191: Wait for chamber temperature to reach target #endif + #if HAS_TEMP_PROBE + case 192: M192(); break; // M192: Wait for probe temp + #endif + #if HAS_COOLER case 143: M143(); break; // M143: Set cooler temperature case 193: M193(); break; // M193: Wait for cooler temperature to reach target @@ -921,8 +925,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { case 852: M852(); break; // M852: Set Skew factors #endif - #if ENABLED(PROBE_TEMP_COMPENSATION) - case 192: M192(); break; // M192: Wait for probe temp + #if HAS_PTC case 871: M871(); break; // M871: Print/reset/clear first layer temperature offset values #endif diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 8de15fc9c7..09dd53d6f6 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -66,7 +66,7 @@ * G42 - Coordinated move to a mesh point (Requires MESH_BED_LEVELING, AUTO_BED_LEVELING_BLINEAR, or AUTO_BED_LEVELING_UBL) * G60 - Save current position. (Requires SAVED_POSITIONS) * G61 - Apply/restore saved coordinates. (Requires SAVED_POSITIONS) - * G76 - Calibrate first layer temperature offsets. (Requires PROBE_TEMP_COMPENSATION) + * G76 - Calibrate first layer temperature offsets. (Requires PTC_PROBE and PTC_BED) * G80 - Cancel current motion mode (Requires GCODE_MOTION_MODES) * G90 - Use Absolute Coordinates * G91 - Use Relative Coordinates @@ -88,6 +88,8 @@ * M16 - Expected printer check. (Requires EXPECTED_PRINTER_CHECK) * M17 - Enable/Power all stepper motors * M18 - Disable all stepper motors; same as M84 + * + *** Print from Media (SDSUPPORT) *** * M20 - List SD card. (Requires SDSUPPORT) * M21 - Init SD card. (Requires SDSUPPORT) * M22 - Release SD card. (Requires SDSUPPORT) @@ -100,30 +102,36 @@ * OR, with 'C' get the current filename. * M28 - Start SD write: "M28 /path/file.gco". (Requires SDSUPPORT) * M29 - Stop SD write. (Requires SDSUPPORT) - * M30 - Delete file from SD: "M30 /path/file.gco" + * M30 - Delete file from SD: "M30 /path/file.gco" (Requires SDSUPPORT) * M31 - Report time since last M109 or SD card start to serial. * M32 - Select file and start SD print: "M32 [S] !/path/file.gco#". (Requires SDSUPPORT) * Use P to run other files as sub-programs: "M32 P !filename#" * The '#' is necessary when calling from within sd files, as it stops buffer prereading * M33 - Get the longname version of a path. (Requires LONG_FILENAME_HOST_SUPPORT) * M34 - Set SD Card sorting options. (Requires SDCARD_SORT_ALPHA) + * * M42 - Change pin status via gcode: M42 P S. LED pin assumed if P is omitted. (Requires DIRECT_PIN_CONTROL) - * M43 - Display pin status, watch pins for changes, watch endstops & toggle LED, Z servo probe test, toggle pins + * M43 - Display pin status, watch pins for changes, watch endstops & toggle LED, Z servo probe test, toggle pins (Requires PINS_DEBUGGING) * M48 - Measure Z Probe repeatability: M48 P X Y V E L S. (Requires Z_MIN_PROBE_REPEATABILITY_TEST) + * * M73 - Set the progress percentage. (Requires LCD_SET_PROGRESS_MANUALLY) * M75 - Start the print job timer. * M76 - Pause the print job timer. * M77 - Stop the print job timer. * M78 - Show statistical information about the print jobs. (Requires PRINTCOUNTER) + * * M80 - Turn on Power Supply. (Requires PSU_CONTROL) * M81 - Turn off Power Supply. (Requires PSU_CONTROL) + * * M82 - Set E codes absolute (default). * M83 - Set E codes relative while in Absolute (G90) mode. * M84 - Disable steppers until next move, or use S to specify an idle * duration after which steppers should turn off. S0 disables the timeout. * M85 - Set inactivity shutdown timer with parameter S. To disable set zero (default) * M92 - Set planner.settings.axis_steps_per_mm for one or more axes. + * * M100 - Watch Free Memory (for debugging) (Requires M100_FREE_MEMORY_WATCHER) + * * M104 - Set extruder target temp. * M105 - Report current temperatures. * M106 - Set print fan speed. @@ -132,23 +140,29 @@ * M109 - S Wait for extruder current temp to reach target temp. ** Wait only when heating! ** * R Wait for extruder current temp to reach target temp. ** Wait for heating or cooling. ** * If AUTOTEMP is enabled, S B F. Exit autotemp by any M109 without F + * * M110 - Set the current line number. (Used by host printing) * M111 - Set debug flags: "M111 S". See flag bits defined in enum.h. * M112 - Full Shutdown. + * * M113 - Get or set the timeout interval for Host Keepalive "busy" messages. (Requires HOST_KEEPALIVE_FEATURE) * M114 - Report current position. * M115 - Report capabilities. (Extended capabilities requires EXTENDED_CAPABILITIES_REPORT) * M117 - Display a message on the controller screen. (Requires an LCD) * M118 - Display a message in the host console. + * * M119 - Report endstops status. * M120 - Enable endstops detection. * M121 - Disable endstops detection. + * * M122 - Debug stepper (Requires at least one _DRIVER_TYPE defined as TMC2130/2160/5130/5160/2208/2209/2660 or L6470) * M125 - Save current position and move to filament change position. (Requires PARK_HEAD_ON_PAUSE) + * * M126 - Solenoid Air Valve Open. (Requires BARICUDA) * M127 - Solenoid Air Valve Closed. (Requires BARICUDA) * M128 - EtoP Open. (Requires BARICUDA) * M129 - EtoP Closed. (Requires BARICUDA) + * * M140 - Set bed target temp. S * M141 - Set heated chamber target temp. S (Requires a chamber heater) * M143 - Set cooler target temp. S (Requires a laser cooling device) @@ -161,9 +175,9 @@ * M164 - Commit the mix and save to a virtual tool (current, or as specified by 'S'). (Requires MIXING_EXTRUDER) * M165 - Set the mix for the mixing extruder (and current virtual tool) with parameters ABCDHI. (Requires MIXING_EXTRUDER and DIRECT_MIXING_IN_G1) * M166 - Set the Gradient Mix for the mixing extruder. (Requires GRADIENT_MIX) - * M190 - S Wait for bed current temp to reach target temp. ** Wait only when heating! ** - * R Wait for bed current temp to reach target temp. ** Wait for heating or cooling. ** - * M193 - R Wait for cooler temp to reach target temp. ** Wait for cooling. ** + * M190 - Set bed target temperature and wait. R Set target temperature and wait. S Set, but only wait when heating. (Requires TEMP_SENSOR_BED) + * M192 - Wait for probe to reach target temperature. (Requires TEMP_SENSOR_PROBE) + * M193 - R Wait for cooler to reach target temp. ** Wait for cooling. ** * M200 - Set filament diameter, D, setting E axis units to cubic. (Use S0 to revert to linear units.) * M201 - Set max acceleration in units/s^2 for print moves: "M201 X Y Z E" * M202 - Set max acceleration in units/s^2 for travel moves: "M202 X Y Z E" ** UNUSED IN MARLIN! ** @@ -183,7 +197,7 @@ * M218 - Set/get a tool offset: "M218 T X Y". (Requires 2 or more extruders) * M220 - Set Feedrate Percentage: "M220 S" (i.e., "FR" on the LCD) * Use "M220 B" to back up the Feedrate Percentage and "M220 R" to restore it. (Requires an MMU_MODEL version 2 or 2S) - * M221 - Set Flow Percentage: "M221 S" + * M221 - Set Flow Percentage: "M221 S" (Requires an extruder) * M226 - Wait until a pin is in a given state: "M226 P S" (Requires DIRECT_PIN_CONTROL) * M240 - Trigger a camera to take a photograph. (Requires PHOTO_GCODE) * M250 - Set LCD contrast: "M250 C" (0-63). (Requires LCD support) @@ -230,9 +244,9 @@ * M502 - Revert to the default "factory settings". ** Does not write them to EEPROM! ** * M503 - Print the current settings (in memory): "M503 S". S0 specifies compact output. * M504 - Validate EEPROM contents. (Requires EEPROM_SETTINGS) - * M510 - Lock Printer - * M511 - Unlock Printer - * M512 - Set/Change/Remove Password + * M510 - Lock Printer (Requires PASSWORD_FEATURE) + * M511 - Unlock Printer (Requires PASSWORD_UNLOCK_GCODE) + * M512 - Set/Change/Remove Password (Requires PASSWORD_CHANGE_GCODE) * M524 - Abort the current SD print job started with M24. (Requires SDSUPPORT) * M540 - Enable/disable SD card abort on endstop hit: "M540 S". (Requires SD_ABORT_ON_ENDSTOP_HIT) * M552 - Get or set IP address. Enable/disable network interface. (Requires enabled Ethernet port) @@ -252,7 +266,9 @@ * M808 - Set or Goto a Repeat Marker (Requires GCODE_REPEAT_MARKERS) * M810-M819 - Define/execute a G-code macro (Requires GCODE_MACROS) * M851 - Set Z probe's XYZ offsets in current units. (Negative values: X=left, Y=front, Z=below) - * M852 - Set skew factors: "M852 [I] [J] [K]". (Requires SKEW_CORRECTION_GCODE, and SKEW_CORRECTION_FOR_Z for IJ) + * M852 - Set skew factors: "M852 [I] [J] [K]". (Requires SKEW_CORRECTION_GCODE, plus SKEW_CORRECTION_FOR_Z for IJ) + * + *** I2C_POSITION_ENCODERS *** * M860 - Report the position of position encoder modules. * M861 - Report the status of position encoder modules. * M862 - Perform an axis continuity test for position encoder modules. @@ -263,8 +279,8 @@ * M867 - Enable/disable or toggle error correction for position encoder modules. * M868 - Report or set position encoder module error correction threshold. * M869 - Report position encoder module error. - * M871 - Print/reset/clear first layer temperature offset values. (Requires PROBE_TEMP_COMPENSATION) - * M192 - Wait for probe temp (Requires PROBE_TEMP_COMPENSATION) + * + * M871 - Print/reset/clear first layer temperature offset values. (Requires PTC_PROBE, PTC_BED, or PTC_HOTEND) * M876 - Handle Prompt Response. (Requires HOST_PROMPT_SUPPORT and not EMERGENCY_PARSER) * M900 - Get or Set Linear Advance K-factor. (Requires LIN_ADVANCE) * M906 - Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given. (Requires at least one _DRIVER_TYPE defined as TMC2130/2160/5130/5160/2208/2209/2660 or L6470) @@ -282,13 +298,14 @@ * M951 - Set Magnetic Parking Extruder parameters. (Requires MAGNETIC_PARKING_EXTRUDER) * M7219 - Control Max7219 Matrix LEDs. (Requires MAX7219_GCODE) * + *** SCARA *** * M360 - SCARA calibration: Move to cal-position ThetaA (0 deg calibration) * M361 - SCARA calibration: Move to cal-position ThetaB (90 deg calibration - steps per degree) * M362 - SCARA calibration: Move to cal-position PsiA (0 deg calibration) * M363 - SCARA calibration: Move to cal-position PsiB (90 deg calibration - steps per degree) * M364 - SCARA calibration: Move to cal-position PSIC (90 deg to Theta calibration position) * - * ************ Custom codes - This can change to suit future G-code regulations + *** Custom codes (can be changed to suit future G-code standards) *** * G425 - Calibrate using a conductive object. (Requires CALIBRATION_GCODE) * M928 - Start SD logging: "M928 filename.gco". Stop with M29. (Requires SDSUPPORT) * M993 - Backup SPI Flash to SD @@ -296,10 +313,11 @@ * M995 - Touch screen calibration for TFT display * M997 - Perform in-application firmware update * M999 - Restart after being stopped by error + * * D... - Custom Development G-code. Add hooks to 'gcode_D.cpp' for developers to test features. (Requires MARLIN_DEV_MODE) * D576 - Set buffer monitoring options. (Requires BUFFER_MONITORING) * - * "T" Codes + *** "T" Codes *** * * T0-T3 - Select an extruder (tool) by index: "T F" */ @@ -551,7 +569,7 @@ private: static void G59(); #endif - #if ENABLED(PROBE_TEMP_COMPENSATION) + #if BOTH(PTC_PROBE, PTC_BED) static void G76(); #endif @@ -744,6 +762,10 @@ private: static void M191(); #endif + #if HAS_TEMP_PROBE + static void M192(); + #endif + #if HAS_COOLER static void M143(); static void M193(); @@ -1087,8 +1109,7 @@ private: FORCE_INLINE static void M869() { I2CPEM.M869(); } #endif - #if ENABLED(PROBE_TEMP_COMPENSATION) - static void M192(); + #if HAS_PTC static void M871(); #endif diff --git a/Marlin/src/gcode/temp/M192.cpp b/Marlin/src/gcode/temp/M192.cpp new file mode 100644 index 0000000000..a96e2d34a4 --- /dev/null +++ b/Marlin/src/gcode/temp/M192.cpp @@ -0,0 +1,56 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 . + * + */ + +/** + * M192.cpp - Wait for probe to reach temperature + */ + +#include "../../inc/MarlinConfig.h" + +#if HAS_TEMP_PROBE + +#include "../gcode.h" +#include "../../module/temperature.h" +#include "../../lcd/marlinui.h" + +/** + * M192: Wait for probe temperature sensor to reach a target + * + * Select only one of these flags: + * R - Wait for heating or cooling + * S - Wait only for heating + */ +void GcodeSuite::M192() { + if (DEBUGGING(DRYRUN)) return; + + const bool no_wait_for_cooling = parser.seenval('S'); + if (!no_wait_for_cooling && !parser.seenval('R')) { + SERIAL_ERROR_MSG("No target temperature set."); + return; + } + + const celsius_t target_temp = parser.value_celsius(); + ui.set_status(thermalManager.isProbeBelowTemp(target_temp) ? GET_TEXT_F(MSG_PROBE_HEATING) : GET_TEXT_F(MSG_PROBE_COOLING)); + thermalManager.wait_for_probe(target_temp, no_wait_for_cooling); +} + +#endif // HAS_TEMP_PROBE diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index efb9db420d..49067a5606 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -550,6 +550,20 @@ #endif #endif +// Probe Temperature Compensation +#if !TEMP_SENSOR_PROBE + #undef PTC_PROBE +#endif +#if !TEMP_SENSOR_BED + #undef PTC_BED +#endif +#if !HAS_EXTRUDERS + #undef PTC_HOTEND +#endif +#if ANY(PTC_PROBE, PTC_BED, PTC_HOTEND) + #define HAS_PTC 1 +#endif + // Let SD_FINISHED_RELEASECOMMAND stand in for SD_FINISHED_STEPPERRELEASE #if ENABLED(SD_FINISHED_STEPPERRELEASE) #ifndef SD_FINISHED_RELEASECOMMAND diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 60238e6c80..c8d30a2718 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -597,6 +597,10 @@ #error "SPINDLE_LASER_PWM (true) is now set with SPINDLE_LASER_USE_PWM (enabled)." #elif ANY(IS_RAMPS_EEB, IS_RAMPS_EEF, IS_RAMPS_EFB, IS_RAMPS_EFF, IS_RAMPS_SF) #error "The IS_RAMPS_* conditionals (for heater/fan/bed pins) are now called FET_ORDER_*." +#elif defined(PROBE_TEMP_COMPENSATION) + #error "PROBE_TEMP_COMPENSATION is now set using the PTC_PROBE, PTC_BED, PTC_HOTEND options." +#elif defined(BTC_PROBE_TEMP) + #error "BTC_PROBE_TEMP is now PTC_PROBE_TEMP." #endif #if MB(DUE3DOM_MINI) && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD) @@ -611,60 +615,60 @@ static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _L /** * Probe temp compensation requirements */ - -#if ENABLED(PROBE_TEMP_COMPENSATION) - #if defined(PTC_PARK_POS_X) || defined(PTC_PARK_POS_Y) || defined(PTC_PARK_POS_Z) - #error "PTC_PARK_POS_[XYZ] is now PTC_PARK_POS (array)." - #elif !defined(PTC_PARK_POS) - #error "PROBE_TEMP_COMPENSATION requires PTC_PARK_POS." - #elif defined(PTC_PROBE_POS_X) || defined(PTC_PROBE_POS_Y) - #error "PTC_PROBE_POS_[XY] is now PTC_PROBE_POS (array)." - #elif !defined(PTC_PROBE_POS) - #error "PROBE_TEMP_COMPENSATION requires PTC_PROBE_POS." +#if HAS_PTC + #if TEMP_SENSOR_PROBE && TEMP_SENSOR_BED + #if defined(PTC_PARK_POS_X) || defined(PTC_PARK_POS_Y) || defined(PTC_PARK_POS_Z) + #error "PTC_PARK_POS_[XYZ] is now PTC_PARK_POS (array)." + #elif !defined(PTC_PARK_POS) + #error "PTC_PARK_POS is required for Probe Temperature Compensation." + #elif defined(PTC_PROBE_POS_X) || defined(PTC_PROBE_POS_Y) + #error "PTC_PROBE_POS_[XY] is now PTC_PROBE_POS (array)." + #elif !defined(PTC_PROBE_POS) + #error "PTC_PROBE_POS is required for Probe Temperature Compensation." + #endif #endif - #ifdef PTC_SAMPLE_START - constexpr auto _ptc_sample_start = PTC_SAMPLE_START; + #ifdef PTC_PROBE_START + constexpr auto _ptc_sample_start = PTC_PROBE_START; constexpr decltype(_ptc_sample_start) _test_ptc_sample_start = 12.3f; - static_assert(_test_ptc_sample_start != 12.3f, "PTC_SAMPLE_START must be a whole number."); + static_assert(_test_ptc_sample_start != 12.3f, "PTC_PROBE_START must be a whole number."); #endif - #ifdef PTC_SAMPLE_RES - constexpr auto _ptc_sample_res = PTC_SAMPLE_RES; + #ifdef PTC_PROBE_RES + constexpr auto _ptc_sample_res = PTC_PROBE_RES; constexpr decltype(_ptc_sample_res) _test_ptc_sample_res = 12.3f; - static_assert(_test_ptc_sample_res != 12.3f, "PTC_SAMPLE_RES must be a whole number."); + static_assert(_test_ptc_sample_res != 12.3f, "PTC_PROBE_RES must be a whole number."); #endif - #ifdef BTC_SAMPLE_START - constexpr auto _btc_sample_start = BTC_SAMPLE_START; + #ifdef PTC_BED_START + constexpr auto _btc_sample_start = PTC_BED_START; constexpr decltype(_btc_sample_start) _test_btc_sample_start = 12.3f; - static_assert(_test_btc_sample_start != 12.3f, "BTC_SAMPLE_START must be a whole number."); + static_assert(_test_btc_sample_start != 12.3f, "PTC_BED_START must be a whole number."); #endif - #ifdef BTC_SAMPLE_RES - constexpr auto _btc_sample_res = BTC_SAMPLE_RES; + #ifdef PTC_BED_RES + constexpr auto _btc_sample_res = PTC_BED_RES; constexpr decltype(_btc_sample_res) _test_btc_sample_res = 12.3f; - static_assert(_test_btc_sample_res != 12.3f, "BTC_SAMPLE_RES must be a whole number."); + static_assert(_test_btc_sample_res != 12.3f, "PTC_BED_RES must be a whole number."); #endif - #ifdef BTC_PROBE_TEMP - constexpr auto _btc_probe_temp = BTC_PROBE_TEMP; + #ifdef PTC_PROBE_TEMP + constexpr auto _btc_probe_temp = PTC_PROBE_TEMP; constexpr decltype(_btc_probe_temp) _test_btc_probe_temp = 12.3f; - static_assert(_test_btc_probe_temp != 12.3f, "BTC_PROBE_TEMP must be a whole number."); + static_assert(_test_btc_probe_temp != 12.3f, "PTC_PROBE_TEMP must be a whole number."); #endif - #if ENABLED(USE_TEMP_EXT_COMPENSATION) - #ifdef ETC_SAMPLE_START - constexpr auto _etc_sample_start = ETC_SAMPLE_START; + #if ENABLED(PTC_HOTEND) + #if EXTRUDERS != 1 + #error "PTC_HOTEND only works with a single extruder." + #endif + #ifdef PTC_HOTEND_START + constexpr auto _etc_sample_start = PTC_HOTEND_START; constexpr decltype(_etc_sample_start) _test_etc_sample_start = 12.3f; - static_assert(_test_etc_sample_start != 12.3f, "ETC_SAMPLE_START must be a whole number."); + static_assert(_test_etc_sample_start != 12.3f, "PTC_HOTEND_START must be a whole number."); #endif - #ifdef ETC_SAMPLE_RES - constexpr auto _etc_sample_res = ETC_SAMPLE_RES; + #ifdef PTC_HOTEND_RES + constexpr auto _etc_sample_res = PTC_HOTEND_RES; constexpr decltype(_etc_sample_res) _test_etc_sample_res = 12.3f; - static_assert(_test_etc_sample_res != 12.3f, "ETC_SAMPLE_RES must be a whole number."); + static_assert(_test_etc_sample_res != 12.3f, "PTC_HOTEND_RES must be a whole number."); #endif #endif - - #if ENABLED(USE_TEMP_EXT_COMPENSATION) && EXTRUDERS != 1 - #error "USE_TEMP_EXT_COMPENSATION only works with a single extruder." - #endif -#endif +#endif // HAS_PTC /** * Marlin release, version and default string diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index c82f5aad0d..01a5c47fd5 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -128,7 +128,7 @@ #include "../feature/tmc_util.h" #endif -#if ENABLED(PROBE_TEMP_COMPENSATION) +#if HAS_PTC #include "../feature/probe_temp_comp.h" #endif @@ -264,13 +264,16 @@ typedef struct SettingsDataStruct { // // Temperature first layer compensation values // - #if ENABLED(PROBE_TEMP_COMPENSATION) - int16_t z_offsets_probe[COUNT(temp_comp.z_offsets_probe)], // M871 P I V - z_offsets_bed[COUNT(temp_comp.z_offsets_bed)] // M871 B I V - #if ENABLED(USE_TEMP_EXT_COMPENSATION) - , z_offsets_ext[COUNT(temp_comp.z_offsets_ext)] // M871 E I V - #endif - ; + #if HAS_PTC + #if ENABLED(PTC_PROBE) + int16_t z_offsets_probe[COUNT(ptc.z_offsets_probe)]; // M871 P I V + #endif + #if ENABLED(PTC_BED) + int16_t z_offsets_bed[COUNT(ptc.z_offsets_bed)]; // M871 B I V + #endif + #if ENABLED(PTC_HOTEND) + int16_t z_offsets_hotend[COUNT(ptc.z_offsets_hotend)]; // M871 E I V + #endif #endif // @@ -844,11 +847,15 @@ void MarlinSettings::postprocess() { // // Thermal first layer compensation values // - #if ENABLED(PROBE_TEMP_COMPENSATION) - EEPROM_WRITE(temp_comp.z_offsets_probe); - EEPROM_WRITE(temp_comp.z_offsets_bed); - #if ENABLED(USE_TEMP_EXT_COMPENSATION) - EEPROM_WRITE(temp_comp.z_offsets_ext); + #if HAS_PTC + #if ENABLED(PTC_PROBE) + EEPROM_WRITE(ptc.z_offsets_probe); + #endif + #if ENABLED(PTC_BED) + EEPROM_WRITE(ptc.z_offsets_bed); + #endif + #if ENABLED(PTC_HOTEND) + EEPROM_WRITE(ptc.z_offsets_hotend); #endif #else // No placeholder data for this feature @@ -1710,13 +1717,17 @@ void MarlinSettings::postprocess() { // // Thermal first layer compensation values // - #if ENABLED(PROBE_TEMP_COMPENSATION) - EEPROM_READ(temp_comp.z_offsets_probe); - EEPROM_READ(temp_comp.z_offsets_bed); - #if ENABLED(USE_TEMP_EXT_COMPENSATION) - EEPROM_READ(temp_comp.z_offsets_ext); + #if HAS_PTC + #if ENABLED(PTC_PROBE) + EEPROM_READ(ptc.z_offsets_probe); #endif - temp_comp.reset_index(); + # if ENABLED(PTC_BED) + EEPROM_READ(ptc.z_offsets_bed); + #endif + #if ENABLED(PTC_HOTEND) + EEPROM_READ(ptc.z_offsets_hotend); + #endif + ptc.reset_index(); #else // No placeholder data for this feature #endif @@ -2728,6 +2739,11 @@ void MarlinSettings::reset() { // TERN_(EDITABLE_SERVO_ANGLES, COPY(servo_angles, base_servo_angles)); // When not editable only one copy of servo angles exists + // + // Probe Temperature Compensation + // + TERN_(HAS_PTC, ptc.reset()); + // // BLTOUCH // diff --git a/buildroot/tests/rambo b/buildroot/tests/rambo index a563bd4ed3..b7136e445e 100755 --- a/buildroot/tests/rambo +++ b/buildroot/tests/rambo @@ -18,7 +18,7 @@ opt_set MOTHERBOARD BOARD_RAMBO \ FANMUX0_PIN 53 opt_disable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN USE_WATCHDOG opt_enable USE_ZMAX_PLUG REPRAP_DISCOUNT_SMART_CONTROLLER LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TEST \ - FIX_MOUNTED_PROBE CODEPENDENT_XY_HOMING PIDTEMPBED PROBE_TEMP_COMPENSATION \ + FIX_MOUNTED_PROBE CODEPENDENT_XY_HOMING PIDTEMPBED PTC_PROBE PTC_BED \ PREHEAT_BEFORE_PROBING PROBING_HEATERS_OFF PROBING_FANS_OFF PROBING_STEPPERS_OFF WAIT_FOR_BED_HEATER \ EEPROM_SETTINGS SDSUPPORT SD_REPRINT_LAST_SELECTED_FILE BINARY_FILE_TRANSFER \ BLINKM PCA9533 PCA9632 RGB_LED RGB_LED_R_PIN RGB_LED_G_PIN RGB_LED_B_PIN LED_CONTROL_MENU \ @@ -61,16 +61,16 @@ opt_disable MIN_SOFTWARE_ENDSTOP_Z MAX_SOFTWARE_ENDSTOPS exec_test $1 $2 "Rambo CNC Configuration" "$3" # -# Rambo heated bed only +# Rambo heated bed and probe temp sensor # restore_configs -opt_set MOTHERBOARD BOARD_RAMBO EXTRUDERS 0 TEMP_SENSOR_BED 1 \ +opt_set MOTHERBOARD BOARD_RAMBO EXTRUDERS 0 TEMP_SENSOR_BED 1 TEMP_SENSOR_PROBE 1 TEMP_PROBE_PIN 12 \ DEFAULT_AXIS_STEPS_PER_UNIT '{ 80, 80, 4000 }' \ DEFAULT_MAX_FEEDRATE '{ 300, 300, 5 }' \ DEFAULT_MAX_ACCELERATION '{ 3000, 3000, 100 }' \ MANUAL_FEEDRATE '{ 50*60, 50*60, 4*60 }' \ AXIS_RELATIVE_MODES '{ false, false, false }' -opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER +opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER FIX_MOUNTED_PROBE Z_SAFE_HOMING exec_test $1 $2 "Rambo heated bed only" "$3" # diff --git a/ini/features.ini b/ini/features.ini index f54b645f85..4c14651298 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -136,20 +136,20 @@ ADVANCED_PAUSE_FEATURE = src_filter=+ + HAS_POWER_MONITOR = src_filter=+ + POWER_LOSS_RECOVERY = src_filter=+ + -PROBE_TEMP_COMPENSATION = src_filter=+ + +HAS_PTC = src_filter=+ + HAS_FILAMENT_SENSOR = src_filter=+ + (EXT|MANUAL)_SOLENOID.* = src_filter=+ + MK2_MULTIPLEXER = src_filter=+ HAS_CUTTER = src_filter=+ + HAS_DRIVER_SAFE_POWER_PROTECT = src_filter=+ EXPERIMENTAL_I2CBUS = src_filter=+ + -MECHANICAL_GANTRY_CAL.+ = src_filter=+ -Z_MULTI_ENDSTOPS = src_filter=+ -Z_STEPPER_AUTO_ALIGN = src_filter=+ + G26_MESH_VALIDATION = src_filter=+ ASSISTED_TRAMMING = src_filter=+ + HAS_MESH = src_filter=+ HAS_LEVELING = src_filter=+ + +MECHANICAL_GANTRY_CAL.+ = src_filter=+ +Z_MULTI_ENDSTOPS|Z_STEPPER_AUTO_ALIGN = src_filter=+ +Z_STEPPER_AUTO_ALIGN = src_filter=+ DELTA_AUTO_CALIBRATION = src_filter=+ CALIBRATION_GCODE = src_filter=+ Z_MIN_PROBE_REPEATABILITY_TEST = src_filter=+ @@ -209,6 +209,7 @@ SDSUPPORT = src_filter=+ + GCODE_REPEAT_MARKERS = src_filter=+ + HAS_EXTRUDERS = src_filter=+ + + +HAS_TEMP_PROBE = src_filter=+ HAS_COOLER = src_filter=+ HAS_COOLER|LASER_COOLANT_FLOW_METER = src_filter=+ AUTO_REPORT_TEMPERATURES = src_filter=+ diff --git a/platformio.ini b/platformio.ini index 106e454d10..a364e8920f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -152,7 +152,7 @@ default_src_filter = + - - + - - - - - + - - - - @@ -229,6 +229,7 @@ default_src_filter = + - - + - - - + - - - - From 36e475b8beccd7bcc74335cbab69c5aa6ecbf61c Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Tue, 2 Nov 2021 12:34:53 +1300 Subject: [PATCH 084/532] =?UTF-8?q?=F0=9F=A9=B9=20Fill=20gaps=20in=20pinsD?= =?UTF-8?q?ebug=5Flist=20(#23051)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/pinsDebug_list.h | 98 ++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/Marlin/src/pins/pinsDebug_list.h b/Marlin/src/pins/pinsDebug_list.h index f07b1cf025..05756d6004 100644 --- a/Marlin/src/pins/pinsDebug_list.h +++ b/Marlin/src/pins/pinsDebug_list.h @@ -74,6 +74,16 @@ REPORT_NAME_ANALOG(__LINE__, MAIN_VOLTAGE_MEASURE_PIN) #endif #endif +#if PIN_EXISTS(POWER_MONITOR_CURRENT) + #if ANALOG_OK(POWER_MONITOR_CURRENT_PIN) + REPORT_NAME_ANALOG(__LINE__, POWER_MONITOR_CURRENT_PIN) + #endif +#endif +#if PIN_EXISTS(POWER_MONITOR_VOLTAGE) + #if ANALOG_OK(POWER_MONITOR_VOLTAGE_PIN) + REPORT_NAME_ANALOG(__LINE__, POWER_MONITOR_VOLTAGE_PIN) + #endif +#endif #if !defined(ARDUINO_ARCH_SAM) && !defined(ARDUINO_ARCH_SAMD) // TC1 & TC2 are macros in the SAM/SAMD tool chain #if _EXISTS(TC1) #if ANALOG_OK(TC1) @@ -131,6 +141,11 @@ REPORT_NAME_ANALOG(__LINE__, TEMP_BED_PIN) #endif #endif +#if PIN_EXISTS(TEMP_BOARD) + #if ANALOG_OK(TEMP_BOARD_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_BOARD_PIN) + #endif +#endif #if PIN_EXISTS(TEMP_CHAMBER) #if ANALOG_OK(TEMP_CHAMBER_PIN) REPORT_NAME_ANALOG(__LINE__, TEMP_CHAMBER_PIN) @@ -141,6 +156,11 @@ REPORT_NAME_ANALOG(__LINE__, TEMP_COOLER_PIN) #endif #endif +#if PIN_EXISTS(TEMP_PROBE) + #if ANALOG_OK(TEMP_PROBE_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_PROBE_PIN) + #endif +#endif #if PIN_EXISTS(ADC_KEYPAD) #if ANALOG_OK(ADC_KEYPAD_PIN) REPORT_NAME_ANALOG(__LINE__, ADC_KEYPAD_PIN) @@ -370,6 +390,9 @@ #if PIN_EXISTS(DIGIPOTSS) REPORT_NAME_DIGITAL(__LINE__, DIGIPOTSS_PIN) #endif +#if PIN_EXISTS(LCD_RESET) + REPORT_NAME_DIGITAL(__LINE__, LCD_RESET_PIN) +#endif #if _EXISTS(DOGLCD_A0) REPORT_NAME_DIGITAL(__LINE__, DOGLCD_A0) #endif @@ -433,6 +456,9 @@ #if PIN_EXISTS(E0_STEP) REPORT_NAME_DIGITAL(__LINE__, E0_STEP_PIN) #endif +#if PIN_EXISTS(E0_STDBY) + REPORT_NAME_DIGITAL(__LINE__, E0_STDBY_PIN) +#endif #if PIN_EXISTS(E1_AUTO_FAN) REPORT_NAME_DIGITAL(__LINE__, E1_AUTO_FAN_PIN) #endif @@ -457,6 +483,9 @@ #if PIN_EXISTS(E1_STEP) REPORT_NAME_DIGITAL(__LINE__, E1_STEP_PIN) #endif +#if PIN_EXISTS(E1_STDBY) + REPORT_NAME_DIGITAL(__LINE__, E1_STDBY_PIN) +#endif #if PIN_EXISTS(E2_AUTO_FAN) REPORT_NAME_DIGITAL(__LINE__, E2_AUTO_FAN_PIN) #endif @@ -481,6 +510,9 @@ #if PIN_EXISTS(E2_STEP) REPORT_NAME_DIGITAL(__LINE__, E2_STEP_PIN) #endif +#if PIN_EXISTS(E2_STDBY) + REPORT_NAME_DIGITAL(__LINE__, E2_STDBY_PIN) +#endif #if PIN_EXISTS(E3_AUTO_FAN) REPORT_NAME_DIGITAL(__LINE__, E3_AUTO_FAN_PIN) #endif @@ -505,6 +537,9 @@ #if PIN_EXISTS(E3_STEP) REPORT_NAME_DIGITAL(__LINE__, E3_STEP_PIN) #endif +#if PIN_EXISTS(E3_STDBY) + REPORT_NAME_DIGITAL(__LINE__, E3_STDBY_PIN) +#endif #if PIN_EXISTS(E4_AUTO_FAN) REPORT_NAME_DIGITAL(__LINE__, E4_AUTO_FAN_PIN) #endif @@ -529,6 +564,9 @@ #if PIN_EXISTS(E4_STEP) REPORT_NAME_DIGITAL(__LINE__, E4_STEP_PIN) #endif +#if PIN_EXISTS(E4_STDBY) + REPORT_NAME_DIGITAL(__LINE__, E4_STDBY_PIN) +#endif #if PIN_EXISTS(E5_AUTO_FAN) REPORT_NAME_DIGITAL(__LINE__, E5_AUTO_FAN_PIN) #endif @@ -553,6 +591,9 @@ #if PIN_EXISTS(E5_STEP) REPORT_NAME_DIGITAL(__LINE__, E5_STEP_PIN) #endif +#if PIN_EXISTS(E5_STDBY) + REPORT_NAME_DIGITAL(__LINE__, E5_STDBY_PIN) +#endif #if PIN_EXISTS(E6_AUTO_FAN) REPORT_NAME_DIGITAL(__LINE__, E6_AUTO_FAN_PIN) #endif @@ -577,6 +618,9 @@ #if PIN_EXISTS(E6_STEP) REPORT_NAME_DIGITAL(__LINE__, E6_STEP_PIN) #endif +#if PIN_EXISTS(E6_STDBY) + REPORT_NAME_DIGITAL(__LINE__, E6_STDBY_PIN) +#endif #if PIN_EXISTS(E7_AUTO_FAN) REPORT_NAME_DIGITAL(__LINE__, E7_AUTO_FAN_PIN) #endif @@ -601,6 +645,9 @@ #if PIN_EXISTS(E7_STEP) REPORT_NAME_DIGITAL(__LINE__, E7_STEP_PIN) #endif +#if PIN_EXISTS(E7_STDBY) + REPORT_NAME_DIGITAL(__LINE__, E7_STDBY_PIN) +#endif #if _EXISTS(ENET_CRS) REPORT_NAME_DIGITAL(__LINE__, ENET_CRS) #endif @@ -704,6 +751,9 @@ #if PIN_EXISTS(POWER_LOSS) REPORT_NAME_DIGITAL(__LINE__, POWER_LOSS_PIN) #endif +#if PIN_EXISTS(SAFE_POWER) + REPORT_NAME_DIGITAL(__LINE__, SAFE_POWER_PIN) +#endif #if PIN_EXISTS(FIL_RUNOUT) REPORT_NAME_DIGITAL(__LINE__, FIL_RUNOUT_PIN) #endif @@ -806,6 +856,15 @@ #if PIN_EXISTS(LED) REPORT_NAME_DIGITAL(__LINE__, LED_PIN) #endif +#if PIN_EXISTS(LED2) + REPORT_NAME_DIGITAL(__LINE__, LED2_PIN) +#endif +#if PIN_EXISTS(LED3) + REPORT_NAME_DIGITAL(__LINE__, LED3_PIN) +#endif +#if PIN_EXISTS(LED4) + REPORT_NAME_DIGITAL(__LINE__, LED4_PIN) +#endif #if PIN_EXISTS(LED_RED) REPORT_NAME_DIGITAL(__LINE__, LED_RED_PIN) #endif @@ -870,6 +929,12 @@ #if PIN_EXISTS(MOTOR_CURRENT_PWM_E) REPORT_NAME_DIGITAL(__LINE__, MOTOR_CURRENT_PWM_E_PIN) #endif +#if PIN_EXISTS(MOTOR_CURRENT_PWM_E0) + REPORT_NAME_DIGITAL(__LINE__, MOTOR_CURRENT_PWM_E0_PIN) +#endif +#if PIN_EXISTS(MOTOR_CURRENT_PWM_E1) + REPORT_NAME_DIGITAL(__LINE__, MOTOR_CURRENT_PWM_E1_PIN) +#endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_X) REPORT_NAME_DIGITAL(__LINE__, MOTOR_CURRENT_PWM_X_PIN) #endif @@ -1146,6 +1211,9 @@ #if PIN_EXISTS(X_STEP) REPORT_NAME_DIGITAL(__LINE__, X_STEP_PIN) #endif +#if PIN_EXISTS(X_STDBY) + REPORT_NAME_DIGITAL(__LINE__, X_STDBY_PIN) +#endif #if PIN_EXISTS(X_STOP) REPORT_NAME_DIGITAL(__LINE__, X_STOP_PIN) #endif @@ -1209,6 +1277,9 @@ #if PIN_EXISTS(Y_STEP) REPORT_NAME_DIGITAL(__LINE__, Y_STEP_PIN) #endif +#if PIN_EXISTS(Y_STDBY) + REPORT_NAME_DIGITAL(__LINE__, Y_STDBY_PIN) +#endif #if PIN_EXISTS(Y_STOP) REPORT_NAME_DIGITAL(__LINE__, Y_STOP_PIN) #endif @@ -1272,6 +1343,9 @@ #if PIN_EXISTS(Z_STEP) REPORT_NAME_DIGITAL(__LINE__, Z_STEP_PIN) #endif +#if PIN_EXISTS(Z_STDBY) + REPORT_NAME_DIGITAL(__LINE__, Z_STDBY_PIN) +#endif #if PIN_EXISTS(Z_STOP) REPORT_NAME_DIGITAL(__LINE__, Z_STOP_PIN) #endif @@ -1290,6 +1364,9 @@ #if PIN_EXISTS(Z2_MIN) REPORT_NAME_DIGITAL(__LINE__, Z2_MIN_PIN) #endif +#if PIN_EXISTS(Z2_DIAG) + REPORT_NAME_DIGITAL(__LINE__, Z2_DIAG_PIN) +#endif #if PIN_EXISTS(Z2_MS1) REPORT_NAME_DIGITAL(__LINE__, Z2_MS1_PIN) #endif @@ -1302,6 +1379,9 @@ #if PIN_EXISTS(Z2_STEP) REPORT_NAME_DIGITAL(__LINE__, Z2_STEP_PIN) #endif +#if PIN_EXISTS(Z2_STOP) + REPORT_NAME_DIGITAL(__LINE__, Z2_STOP_PIN) +#endif #if PIN_EXISTS(Z3_CS) REPORT_NAME_DIGITAL(__LINE__, Z3_CS_PIN) #endif @@ -1584,6 +1664,24 @@ #if PIN_EXISTS(E7_SERIAL_RX) REPORT_NAME_DIGITAL(__LINE__, E7_SERIAL_RX_PIN) #endif +#if PIN_EXISTS(I_SERIAL_TX) + REPORT_NAME_DIGITAL(__LINE__, I_SERIAL_TX_PIN) +#endif +#if PIN_EXISTS(I_SERIAL_RX) + REPORT_NAME_DIGITAL(__LINE__, I_SERIAL_RX_PIN) +#endif +#if PIN_EXISTS(J_SERIAL_TX) + REPORT_NAME_DIGITAL(__LINE__, J_SERIAL_TX_PIN) +#endif +#if PIN_EXISTS(J_SERIAL_RX) + REPORT_NAME_DIGITAL(__LINE__, J_SERIAL_RX_PIN) +#endif +#if PIN_EXISTS(K_SERIAL_TX) + REPORT_NAME_DIGITAL(__LINE__, K_SERIAL_TX_PIN) +#endif +#if PIN_EXISTS(K_SERIAL_RX) + REPORT_NAME_DIGITAL(__LINE__, K_SERIAL_RX_PIN) +#endif #if PIN_EXISTS(L6470_CHAIN_SCK) REPORT_NAME_DIGITAL(__LINE__, L6470_CHAIN_SCK_PIN) #endif From 40477e031f16c2ecde535bc4ddae65c986060c9a Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Tue, 2 Nov 2021 12:36:22 +1300 Subject: [PATCH 085/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Y=5FSERIAL=5FRX=5F?= =?UTF-8?q?PIN=20for=20FYSETC=20S6=20(#23055)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f4/pins_FYSETC_S6.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h b/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h index e2454b578d..37a48cab7f 100644 --- a/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h +++ b/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h @@ -128,7 +128,7 @@ #define Y_SERIAL_TX_PIN PE14 #endif #ifndef Y_SERIAL_RX_PIN - #define Y_SERIAL_RX_PIN PE13 + #define Y_SERIAL_RX_PIN PC4 #endif #ifndef Z_SERIAL_TX_PIN #define Z_SERIAL_TX_PIN PD11 From 6af344c19329b51307d38463c4912651ac1dcdaa Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 2 Nov 2021 01:02:55 +0000 Subject: [PATCH 086/532] [cron] Bump distribution date (2021-11-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 1eb431186e..607561a87d 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 "2021-11-01" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 aef8d8b60b..c0dbd45fa2 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 "2021-11-01" + #define STRING_DISTRIBUTION_DATE "2021-11-02" #endif /** From 7942f71d26b58630a841f2de2d4f2abaa4120395 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Mon, 1 Nov 2021 20:23:24 -0700 Subject: [PATCH 087/532] =?UTF-8?q?=E2=9C=A8=20Artillery=20Ruby=20(STM32F4?= =?UTF-8?q?01RCT6)=20(#23029)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/STM32/HAL.cpp | 2 +- Marlin/src/core/boards.h | 1 + Marlin/src/pins/pins.h | 2 + Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h | 182 +++++++ .../boards/marlin_Artillery_Ruby.json | 60 +++ .../scripts/STM32F103RC_MEEB_3DP.py | 18 - .../PlatformIO/scripts/STM32F103RC_fysetc.py | 1 - .../MARLIN_ARTILLERY_RUBY/PeripheralPins.c | 247 +++++++++ .../MARLIN_ARTILLERY_RUBY/PinNamesVar.h | 33 ++ .../MARLIN_ARTILLERY_RUBY/hal_conf_custom.h | 496 ++++++++++++++++++ .../MARLIN_ARTILLERY_RUBY/ldscript.ld | 196 +++++++ .../MARLIN_ARTILLERY_RUBY/variant.cpp | 172 ++++++ .../variants/MARLIN_ARTILLERY_RUBY/variant.h | 148 ++++++ ini/stm32f4.ini | 14 + 14 files changed, 1552 insertions(+), 20 deletions(-) create mode 100644 Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h create mode 100644 buildroot/share/PlatformIO/boards/marlin_Artillery_Ruby.json create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/PeripheralPins.c create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/PinNamesVar.h create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/hal_conf_custom.h create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/ldscript.ld create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/variant.cpp create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/variant.h diff --git a/Marlin/src/HAL/STM32/HAL.cpp b/Marlin/src/HAL/STM32/HAL.cpp index a04a24c112..0920a72ec1 100644 --- a/Marlin/src/HAL/STM32/HAL.cpp +++ b/Marlin/src/HAL/STM32/HAL.cpp @@ -154,7 +154,7 @@ void HAL_adc_start_conversion(const uint8_t adc_pin) { HAL_adc_result = analogRe uint16_t HAL_adc_get_result() { return HAL_adc_result; } // Reset the system to initiate a firmware flash -void flashFirmware(const int16_t) { HAL_reboot(); } +WEAK void flashFirmware(const int16_t) { HAL_reboot(); } // Maple Compatibility volatile uint32_t systick_uptime_millis = 0; diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 2341e6577b..789512c4ef 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -406,6 +406,7 @@ #define BOARD_INDEX_REV03 4234 // Index PnP Controller REV03 (STM32F407VET6/VGT6) #define BOARD_MKS_ROBIN_NANO_V1_3_F4 4235 // MKS Robin Nano V1.3 and MKS Robin Nano-S V1.3 (STM32F407VET6) #define BOARD_MKS_EAGLE 4236 // MKS Eagle (STM32F407VET6) +#define BOARD_ARTILLERY_RUBY 4237 // Artillery Ruby (STM32F401RCT6) // // ARM Cortex M7 diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 40bbe6b41b..369a78be7a 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -667,6 +667,8 @@ #include "stm32f4/pins_MKS_ROBIN_NANO_V1_3_F4.h" // STM32F4 env:mks_robin_nano_v1_3_f4 #elif MB(MKS_EAGLE) #include "stm32f4/pins_MKS_EAGLE.h" // STM32F4 env:mks_eagle +#elif MB(ARTILLERY_RUBY) + #include "stm32f4/pins_ARTILLERY_RUBY.h" // STM32F4 env:Artillery_Ruby // // ARM Cortex M7 diff --git a/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h b/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h new file mode 100644 index 0000000000..4cf9768fbe --- /dev/null +++ b/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h @@ -0,0 +1,182 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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" + +#if HOTENDS > 1 || E_STEPPERS > 1 + #error "Artillery Ruby supports up to 1 hotends / E-steppers." +#endif + +#define BOARD_INFO_NAME "Artillery Ruby" + +#define FLASH_EEPROM_EMULATION +//#define I2C_EEPROM +//#define E2END 0xFFF // 4KB + +#define HAL_TIMER_RATE F_CPU + +// +// Limit Switches +// +#if (X_HOME_DIR == 1) + #define X_MIN_PIN -1 + #define X_MAX_PIN PA2 +#else + #define X_MIN_PIN PA2 + #define X_MAX_PIN -1 +#endif +#if (Y_HOME_DIR == 1) + #define Y_MIN_PIN -1 + #define Y_MAX_PIN PA1 +#else + #define Y_MIN_PIN PA1 + #define Y_MAX_PIN -1 +#endif +#if (Z_HOME_DIR == 1) + #define Z_MIN_PIN PC2 + #define Z_MAX_PIN PA0 +#else + #define Z_MIN_PIN PA0 + #define Z_MAX_PIN PC2 +#endif + +// +// Steppers +// +#define X_STEP_PIN PB14 +#define X_DIR_PIN PB13 +#define X_ENABLE_PIN PB15 + +#define Y_STEP_PIN PB10 +#define Y_DIR_PIN PB2 +#define Y_ENABLE_PIN PB12 + +#define Z_STEP_PIN PB0 +#define Z_DIR_PIN PC5 +#define Z_ENABLE_PIN PB1 + +#define E0_STEP_PIN PA7 +#define E0_DIR_PIN PA6 +#define E0_ENABLE_PIN PC4 + +#define E1_STEP_PIN PA4 +#define E1_DIR_PIN PA3 +#define E1_ENABLE_PIN PA5 + +// +// Temperature Sensors +// +#define TEMP_0_PIN PC0 +#define TEMP_BED_PIN PC1 + +// +// Heaters / Fans +// +#ifndef HEATER_0_PIN + #define HEATER_0_PIN PC9 // Heater0 +#endif +#ifndef HEATER_BED_PIN + #define HEATER_BED_PIN PA8 // Hotbed +#endif +#ifndef FAN_PIN + #define FAN_PIN PC8 // Fan0 +#endif +#ifndef FAN1_PIN + #define FAN1_PIN PC7 // Fan1 +#endif +#ifndef FAN2_PIN + #define FAN2_PIN PC6 // Fan2 +#endif + +// +// Servos +// +#define SERVO0_PIN PC3 + +// +// SPI +// +#define SCK_PIN PC10 +#define MISO_PIN PC11 +#define MOSI_PIN PC12 + +// +// LCD / Controller +// +#if HAS_WIRED_LCD + #if EITHER(MKS_12864OLED, MKS_12864OLED_SSD1306) + #define LCD_PINS_DC PB8 // Set as output on init + #define LCD_PINS_RS PB9 // Pull low for 1s to init + // DOGM SPI LCD Support + #define DOGLCD_CS PC15 + #define DOGLCD_MOSI PB6 + #define DOGLCD_SCK PB5 + #define DOGLCD_A0 LCD_PINS_DC + #elif ENABLED(FYSETC_MINI_12864) + #define DOGLCD_CS PB6 + #define DOGLCD_A0 PC15 + + //#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 PB5 // 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 PB9 + #endif + #ifndef RGB_LED_G_PIN + #define RGB_LED_G_PIN PB8 + #endif + #ifndef RGB_LED_B_PIN + #define RGB_LED_B_PIN PB7 + #endif + #elif ENABLED(FYSETC_MINI_12864_2_1) + #define NEOPIXEL_PIN PB9 + #endif + + #define DEFAULT_LCD_CONTRAST 255 + #else + #define LCD_PINS_RS PC15 + #define LCD_PINS_ENABLE PB6 + #define LCD_PINS_D4 PB5 + #define LCD_PINS_D5 PB9 + #define LCD_PINS_D6 PB8 + #endif + + #define LCD_PINS_D7 PB7 + + // + // Beeper, SD Card, Encoder + // + #define BEEPER_PIN PC13 + + #if ENABLED(SDSUPPORT) + #define SDSS PA15 + #define SD_DETECT_PIN PD2 + #endif + + #define BTN_EN1 PB4 + #define BTN_EN2 PB3 + #define BTN_ENC PC14 +#endif diff --git a/buildroot/share/PlatformIO/boards/marlin_Artillery_Ruby.json b/buildroot/share/PlatformIO/boards/marlin_Artillery_Ruby.json new file mode 100644 index 0000000000..e1c8333800 --- /dev/null +++ b/buildroot/share/PlatformIO/boards/marlin_Artillery_Ruby.json @@ -0,0 +1,60 @@ +{ + "build": { + "core": "stm32", + "cpu": "cortex-m4", + "extra_flags": "-DSTM32F401xx", + "f_cpu": "84000000L", + "hwids": [ + [ + "0x0483", + "0xDF11" + ] + ], + "mcu": "stm32f401rct6", + "variant": "MARLIN_ARTILLERY_RUBY" + }, + "debug": { + "jlink_device": "STM32F401RC", + "openocd_target": "stm32f4x", + "svd_path": "STM32F40x.svd", + "tools": { + "stlink": { + "server": { + "arguments": [ + "-f", + "scripts/interface/stlink.cfg", + "-c", + "transport select hla_swd", + "-f", + "scripts/target/stm32f4x.cfg", + "-c", + "reset_config none" + ], + "executable": "bin/openocd", + "package": "tool-openocd" + } + } + } + }, + "frameworks": [ + "arduino", + "stm32cube" + ], + "name": "STM32F401RC (64k RAM. 256k Flash)", + "upload": { + "disable_flushing": false, + "maximum_ram_size": 65536, + "maximum_size": 262144, + "protocol": "stlink", + "protocols": [ + "stlink", + "dfu", + "jlink" + ], + "require_upload_port": true, + "use_1200bps_touch": false, + "wait_for_upload_port": false + }, + "url": "https://www.st.com/en/evaluation-tools/steval-3dp001v1.html", + "vendor": "Generic" +} diff --git a/buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py b/buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py index 03e121c435..e059d44578 100644 --- a/buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py +++ b/buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py @@ -8,37 +8,19 @@ except ImportError: import os Import("env", "projenv") -# access to global build environment -print(env) -# access to project build environment (is used source files in "src" folder) -print(projenv) config = configparser.ConfigParser() config.read("platformio.ini") -#com_port = config.get("env:STM32F103RC_meeb", "upload_port") -#print('Use the {0:s} to reboot the board to dfu mode.'.format(com_port)) - # # Upload actions # - def before_upload(source, target, env): - print("before_upload") - # do some actions - # use com_port - # env.Execute("pwd") def after_upload(source, target, env): - print("after_upload") - # do some actions - # - # env.Execute("pwd") -print("Current build targets", map(str, BUILD_TARGETS)) - env.AddPreAction("upload", before_upload) env.AddPostAction("upload", after_upload) diff --git a/buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py b/buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py index 668475dc01..07f6548b18 100644 --- a/buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py +++ b/buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py @@ -1,7 +1,6 @@ # # buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py # -import os from os.path import join from os.path import expandvars Import("env") diff --git a/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/PeripheralPins.c b/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/PeripheralPins.c new file mode 100644 index 0000000000..b2783d8c31 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/PeripheralPins.c @@ -0,0 +1,247 @@ +/* + ******************************************************************************* + * Copyright (c) 2019, 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 STM32F401R(B-C)Tx.xml + */ +#include "Arduino.h" +#include "PeripheralPins.h" + +/* ===== + * Note: Commented lines are alternative possibilities which are not used per default. + * If you change them, you will have to know what you do + * ===== + */ + +//*** ADC *** + +#ifdef HAL_ADC_MODULE_ENABLED +WEAK const PinMap PinMap_ADC[] = { + {PA_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC1_IN0 + {PA_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1 + {PA_2, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2 + {PA_3, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3 + {PA_4, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4 + {PA_5, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_IN5 + {PA_6, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_IN6 + {PA_7, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_IN7 + {PB_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8 + {PB_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9 + {PC_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10 + {PC_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11 + {PC_2, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12 + {PC_3, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13 + {PC_4, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_IN14 + {PC_5, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_IN15 + {NC, NP, 0} +}; +#endif + +//*** No DAC *** + +//*** I2C *** + +#ifdef HAL_I2C_MODULE_ENABLED +WEAK const PinMap PinMap_I2C_SDA[] = { + {PB_3, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C2)}, + {PB_4, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF9_I2C3)}, + {PB_7, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + {PB_9, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + {PC_9, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, + {NC, NP, 0} +}; +#endif + +#ifdef HAL_I2C_MODULE_ENABLED +WEAK const PinMap PinMap_I2C_SCL[] = { + {PA_8, I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)}, + {PB_6, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + {PB_8, I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, + {PB_10, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, + {NC, NP, 0} +}; +#endif + +//*** PWM *** + +#ifdef HAL_TIM_MODULE_ENABLED +WEAK const PinMap PinMap_PWM[] = { + {PA_0, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 + {PA_0, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1 + {PA_1, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 + {PA_1, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2 + {PA_2, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 + {PA_2, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3 + {PA_2, TIM9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1 + {PA_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4 + {PA_3, TIM5, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4 + {PA_3, TIM9, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2 + {PA_5, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 + {PA_6, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 + {PA_7, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N + {PA_7, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 + {PA_8, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1 + {PA_9, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2 + {PA_10, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3 + {PA_11, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4 + {PA_15, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1 + {PB_0, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N + {PB_0, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 + {PB_1, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N + {PB_1, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 + {PB_3, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2 + {PB_4, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 + {PB_5, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 + {PB_6, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1 + {PB_7, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2 + {PB_8, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3 + {PB_8, TIM10, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1 + {PB_9, TIM4, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4 + {PB_9, TIM11, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1 + {PB_10, TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3 + {PB_13, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N + {PB_14, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N + {PB_15, TIM1, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N + {PC_6, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1 + {PC_7, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2 + {PC_8, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3 + {PC_9, TIM3, STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4 + {NC, NP, 0} +}; +#endif + +//*** SERIAL *** + +#ifdef HAL_UART_MODULE_ENABLED +WEAK const PinMap PinMap_UART_TX[] = { + {PA_2, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PA_9, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PA_11, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {PB_6, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PC_6, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {NC, NP, 0} +}; +#endif + +#ifdef HAL_UART_MODULE_ENABLED +WEAK const PinMap PinMap_UART_RX[] = { + {PA_3, USART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)}, + {PA_10, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PA_12, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {PB_7, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {PC_7, USART6, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)}, + {NC, NP, 0} +}; +#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_AF7_USART2)}, + {PA_12, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {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_AF7_USART2)}, + {PA_11, USART1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)}, + {NC, NP, 0} +}; +#endif + +//*** SPI *** + +#ifdef HAL_SPI_MODULE_ENABLED +WEAK const PinMap PinMap_SPI_MOSI[] = { + {PA_7, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PB_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PB_5, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_15, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_3, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_12, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NP, 0} +}; +#endif + +#ifdef HAL_SPI_MODULE_ENABLED +WEAK const PinMap PinMap_SPI_MISO[] = { + {PA_6, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PB_4, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PB_4, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_14, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_2, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_11, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NP, 0} +}; +#endif + +#ifdef HAL_SPI_MODULE_ENABLED +WEAK const PinMap PinMap_SPI_SCLK[] = { + {PA_5, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PB_3, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PB_3, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_10, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PB_13, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PC_10, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {NC, NP, 0} +}; +#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_AF5_SPI1)}, + {PA_4, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PA_15, SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI1)}, + {PA_15, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)}, + {PB_9, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {PB_12, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)}, + {NC, NP, 0} +}; +#endif + +//*** No CAN *** + +//*** No ETHERNET *** + +//*** No QUADSPI *** + +//*** USB *** + +#ifdef HAL_PCD_MODULE_ENABLED +WEAK const PinMap PinMap_USB_OTG_FS[] = { + {PA_8, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_SOF + {PA_9, USB_OTG_FS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_OTG_FS_VBUS + {PA_10, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_ID + {PA_11, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DM + {PA_12, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DP + {NC, NP, 0} +}; +#endif + +//*** No USB_OTG_HS *** + +//*** SD *** + +#ifdef HAL_SD_MODULE_ENABLED +WEAK const PinMap PinMap_SD[] = { + {PB_8, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D4 + {PB_9, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D5 + {PC_6, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D6 + {PC_7, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D7 + {PC_8, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D0 + {PC_9, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D1 + {PC_10, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D2 + {PC_11, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_SDIO)}, // SDIO_D3 + {PC_12, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_SDIO)}, // SDIO_CK + {PD_2, SDIO, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_SDIO)}, // SDIO_CMD + {NC, NP, 0} +}; +#endif diff --git a/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/PinNamesVar.h b/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/PinNamesVar.h new file mode 100644 index 0000000000..3082f8842a --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/PinNamesVar.h @@ -0,0 +1,33 @@ +/* SYS_WKUP */ +#ifdef PWR_WAKEUP_PIN1 +SYS_WKUP1 = PA_0, +#endif +#ifdef PWR_WAKEUP_PIN2 +SYS_WKUP2 = NC, +#endif +#ifdef PWR_WAKEUP_PIN3 +SYS_WKUP3 = NC, +#endif +#ifdef PWR_WAKEUP_PIN4 +SYS_WKUP4 = NC, +#endif +#ifdef PWR_WAKEUP_PIN5 +SYS_WKUP5 = NC, +#endif +#ifdef PWR_WAKEUP_PIN6 +SYS_WKUP6 = NC, +#endif +#ifdef PWR_WAKEUP_PIN7 +SYS_WKUP7 = NC, +#endif +#ifdef PWR_WAKEUP_PIN8 +SYS_WKUP8 = NC, +#endif +/* USB */ +#ifdef USBCON +USB_OTG_FS_SOF = PA_8, +USB_OTG_FS_VBUS = PA_9, +USB_OTG_FS_ID = PA_10, +USB_OTG_FS_DM = PA_11, +USB_OTG_FS_DP = PA_12, +#endif diff --git a/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/hal_conf_custom.h b/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/hal_conf_custom.h new file mode 100644 index 0000000000..9fa98807d6 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/hal_conf_custom.h @@ -0,0 +1,496 @@ +/** + ****************************************************************************** + * @file stm32f4xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + *

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

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

© COPYRIGHT(c) 2014 Ac6

+** +** Redistribution and use in source and binary forms, with or without modification, +** are permitted provided that the following conditions are met: +** 1. Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** 3. Neither the name of Ac6 nor the names of its contributors +** may be used to endorse or promote products derived from this software +** without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x200; /* required amount of heap */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +BOOT (rx) : ORIGIN = 0x08000000, LENGTH = 16K +EMULATED_EEPROM (rx) : ORIGIN = 0x08004000, LENGTH = 16K +FLASH (rx) : ORIGIN = 0x08008000, LENGTH = 256K - 16K * 2 +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >BOOT + + .boot : + { + . = ALIGN(4); + *(.text.Reset_Handler) + . = ALIGN(4); + } >BOOT + + /* The program code and other data goes into FLASH */ + .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 goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(4); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(4); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/variant.cpp b/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/variant.cpp new file mode 100644 index 0000000000..8f24d68e2f --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/variant.cpp @@ -0,0 +1,172 @@ +/* + Copyright (c) 2011 Arduino. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "pins_arduino.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// Pin number +const PinName digitalPin[] = { + PA_0, //D0 + PA_1, //D1 + PA_2, //D2 + PA_3, //D3 + PA_4, //D4 + PA_5, //D5 + PA_6, //D6 + PA_7, //D7 + 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 + PB_1, //D17 + PB_2, //D18 + PB_3, //D19 + PB_4, //D20 + PB_5, //D21 + PB_6, //D22 + PB_7, //D23 + PB_8, //D24 + PB_9, //D25 + PB_10, //D26 + PB_12, //D27 + PB_13, //D28 + PB_14, //D29 + PB_15, //D30 + PC_0, //D31 + PC_1, //D32 + PC_2, //D33 + PC_3, //D34 + PC_4, //D35 + PC_5, //D36 + PC_6, //D37 + PC_7, //D38 + PC_8, //D39 + PC_9, //D40 + PC_10, //D41 + PC_11, //D42 + PC_12, //D43 + PC_13, //D44 + PC_14, //D45 + PC_15, //D46 + PD_2, //D47 + PH_0, //D48 + PH_1, //D49 + + //Duplicated ADC Pins + PA_0, //D50/A0 + PA_1, //D51/A1 + PA_2, //D52/A2 + PA_3, //D53/A3 + PA_4, //D54/A4 + PA_5, //D55/A5 + PA_6, //D56/A6 + PA_7, //D57/A7 + PB_0, //D58/A8 + PB_1, //D59/A9 + PC_0, //D60/A10 + PC_1, //D61/A11 + PC_2, //D62/A12 + PC_3, //D63/A13 + PC_4, //D64/A14 + PC_5 //D65/A15 +}; + +#ifdef __cplusplus +} +#endif + +// ---------------------------------------------------------------------------- + +#ifdef __cplusplus +extern "C" { +#endif +/** + * @brief System Clock Configuration + * The system Clock is configured as follow : + * System Clock source = PLL (HSE) + * SYSCLK(Hz) = 84000000 + * HCLK(Hz) = 84000000 + * AHB Prescaler = 1 + * APB1 Prescaler = 2 + * APB2 Prescaler = 1 + * HSE Frequency(Hz) = 8000000 + * PLL_M = 8 + * PLL_N = 336 + * PLL_P = 4 + * PLL_Q = 7 + * VDD(V) = 3.3 + * Main regulator output voltage = Scale2 mode + * Flash Latency(WS) = 2 + * @param None + * @retval None + */ +WEAK void SystemClock_Config(void) +{ + RCC_ClkInitTypeDef RCC_ClkInitStruct; + RCC_OscInitTypeDef RCC_OscInitStruct; + + /* Enable Power Control clock */ + __HAL_RCC_PWR_CLK_ENABLE(); + + /* The voltage scaling allows optimizing the power consumption when the device is + clocked below the maximum system frequency, to update the voltage scaling value + regarding system frequency refer to product datasheet. */ + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2); + + /* Enable HSI Oscillator and activate PLL with HSI as source */ + 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 = 8; + RCC_OscInitStruct.PLL.PLLN = 336; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; + RCC_OscInitStruct.PLL.PLLQ = 7; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { + /* Initialization Error */ + while (1); + } + /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 + clocks dividers */ + RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { + /* Initialization Error */ + while (1); + } +} + +#ifdef __cplusplus +} +#endif + +void flashFirmware(const int16_t) { + *((unsigned long *)0x2000FFF0) = 0xDEADBEEF; // End of RAM + NVIC_SystemReset(); +} diff --git a/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/variant.h new file mode 100644 index 0000000000..0c66ae89b8 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/variant.h @@ -0,0 +1,148 @@ +/* + Copyright (c) 2011 Arduino. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _VARIANT_ARDUINO_STM32_ +#define _VARIANT_ARDUINO_STM32_ + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/*---------------------------------------------------------------------------- + * Pins + *----------------------------------------------------------------------------*/ + + +#define PA0 0 //D0 +#define PA1 1 //D1 +#define PA2 2 //D2 +#define PA3 3 //D3 +#define PA4 4 //D4 +#define PA5 5 //D5 +#define PA6 6 //D6 +#define PA7 7 //D7 +#define PA8 8 //D8 +#define PA9 9 //D9 +#define PA10 10 //D10 +#define PA11 11 //D11 +#define PA12 12 //D12 +#define PA13 13 //D13 +#define PA14 14 //D14 +#define PA15 15 //D15 +#define PB0 16 //D16 +#define PB1 17 //D17 +#define PB2 18 //D18 +#define PB3 19 //D19 +#define PB4 20 //D20 +#define PB5 21 //D21 +#define PB6 22 //D22 +#define PB7 23 //D23 +#define PB8 24 //D24 +#define PB9 25 //D25 +#define PB10 26 //D26 +#define PB12 27 //D27 +#define PB13 28 //D28 +#define PB14 29 //D29 +#define PB15 30 //D30 +#define PC0 31 //D31 +#define PC1 32 //D32 +#define PC2 33 //D33 +#define PC3 34 //D34 +#define PC4 35 //D35 +#define PC5 36 //D36 +#define PC6 37 //D37 +#define PC7 38 //D38 +#define PC8 39 //D39 +#define PC9 40 //D40 +#define PC10 41 //D41 +#define PC11 42 //D42 +#define PC12 43 //D43 +#define PC13 44 //D44 +#define PC14 45 //D45 +#define PC15 46 //D46 +#define PD2 47 //D47 +#define PH0 48 //D48 +#define PH1 49 //D49 + +// This must be a literal +#define NUM_DIGITAL_PINS 66 +// This must be a literal with a value less than or equal to to MAX_ANALOG_INPUTS +#define NUM_ANALOG_INPUTS 16 +#define NUM_ANALOG_FIRST 50 + +/* +// PWM resolution +#define PWM_RESOLUTION 8 +#define PWM_FREQUENCY 20000 // >= 20 Khz => inaudible noise for fans +#define PWM_MAX_DUTY_CYCLE 255 +*/ + +// SPI Definitions +#define PIN_SPI_MOSI PC12 +#define PIN_SPI_MISO PC11 +#define PIN_SPI_SCK PC10 +#define PIN_SPI_SS PA15 + +// Timer Definitions +// TIM1 - Hardware PWM (HB) +// TIM2 - TIMER_SERVO +// TIM3 - Hardware PWM (FAN0/1/2, HE0) +// TIM4 - Hardware PWM (LED_R/G/B) +// TIM5 - TIMER_TONE +// TIM9 - STEP_TIMER +// TIM10 - TEMP_TIMER +// TIM11 - +#define TIMER_SERVO TIM2 +#define TIMER_TONE TIM5 + +// UART Definitions +#define SERIAL_UART_INSTANCE 1 + +// Default pin used for 'Serial' instance (ex: ST-Link) +// Mandatory for Firmata +#define PIN_SERIAL_RX PA10 +#define PIN_SERIAL_TX PA9 + +#ifdef __cplusplus +} // extern "C" +#endif +/*---------------------------------------------------------------------------- + * Arduino objects - C++ only + *----------------------------------------------------------------------------*/ + +#ifdef __cplusplus +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_HARDWARE Serial +#endif + +#endif /* _VARIANT_ARDUINO_STM32_ */ diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index 850807585f..0e9b507c8b 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -564,3 +564,17 @@ build_unflags = ${stm32_variant.build_unflags} -DUSBCON -DUSBD_USE_CDC debug_tool = jlink upload_protocol = jlink + +# +# Artillery Ruby +# +[env:Artillery_Ruby] +platform = ${common_stm32.platform} +extends = common_stm32 +board = marlin_Artillery_Ruby +build_flags = ${common_stm32.build_flags} + -DSTM32F401xC -DTARGET_STM32F4 -DDISABLE_GENERIC_SERIALUSB -DARDUINO_ARCH_STM32 + -DUSBD_USE_CDC_COMPOSITE -DUSE_USB_FS + -DUSB_PRODUCT=\"Artillery_3D_Printer\" +extra_scripts = ${common_stm32.extra_scripts} + pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py From 498937967482faf7b299c2119c258c8ce7090ce9 Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Tue, 2 Nov 2021 10:29:23 +0700 Subject: [PATCH 088/532] =?UTF-8?q?=F0=9F=8E=A8=20Fix=20redefine=20warning?= =?UTF-8?q?s=20(#23061)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/pins_postprocess.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Marlin/src/pins/pins_postprocess.h b/Marlin/src/pins/pins_postprocess.h index a2fe2b9af3..d1047db0d7 100644 --- a/Marlin/src/pins/pins_postprocess.h +++ b/Marlin/src/pins/pins_postprocess.h @@ -1260,22 +1260,22 @@ // Disable unused endstop / probe pins // #define _STOP_IN_USE(N) (X2_USE_ENDSTOP == N || Y2_USE_ENDSTOP == N || Z2_USE_ENDSTOP == N || Z3_USE_ENDSTOP == N || Z4_USE_ENDSTOP == N) -#if _STOP_IN_USE(_XMAX_) +#if !defined(USE_XMAX_PLUG) && _STOP_IN_USE(_XMAX_) #define USE_XMAX_PLUG #endif -#if _STOP_IN_USE(_YMAX_) +#if !defined(USE_YMAX_PLUG) && _STOP_IN_USE(_YMAX_) #define USE_YMAX_PLUG #endif -#if _STOP_IN_USE(_ZMAX_) +#if !defined(USE_ZMAX_PLUG) && _STOP_IN_USE(_ZMAX_) #define USE_ZMAX_PLUG #endif -#if _STOP_IN_USE(_XMIN_) +#if !defined(USE_XMIN_PLUG) && _STOP_IN_USE(_XMIN_) #define USE_XMIN_PLUG #endif -#if _STOP_IN_USE(_YMIN_) +#if !defined(USE_YMIN_PLUG) && _STOP_IN_USE(_YMIN_) #define USE_YMIN_PLUG #endif -#if _STOP_IN_USE(_ZMIN_) +#if !defined(USE_ZMIN_PLUG) && _STOP_IN_USE(_ZMIN_) #define USE_ZMIN_PLUG #endif #undef _STOP_IN_USE From a57355ee06e59fb3d89ab56f8749eb5549efbee3 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Mon, 1 Nov 2021 21:23:54 -0700 Subject: [PATCH 089/532] =?UTF-8?q?=E2=9C=A8=20Allow=20Low=20EJERK=20with?= =?UTF-8?q?=20LA,=20optional=20(#23054)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 1 + Marlin/src/inc/SanityCheck.h | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index aa6fffd44e..934ceceafd 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1913,6 +1913,7 @@ #define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed //#define LA_DEBUG // If enabled, this will generate debug information output over USB. //#define EXPERIMENTAL_SCURVE // Enable this option to permit S-Curve Acceleration + //#define ALLOW_LOW_EJERK // Allow a DEFAULT_EJERK value of <10. Recommended for direct drive hotends. #endif // @section leveling diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index c8d30a2718..b4eaf242b7 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1246,8 +1246,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "LIN_ADVANCE and S_CURVE_ACCELERATION may not play well together! Enable EXPERIMENTAL_SCURVE to continue." #elif ENABLED(DIRECT_STEPPING) #error "DIRECT_STEPPING is incompatible with LIN_ADVANCE. Enable in external planner if possible." - #elif !HAS_JUNCTION_DEVIATION && defined(DEFAULT_EJERK) - static_assert(DEFAULT_EJERK >= 10, "It is strongly recommended to set DEFAULT_EJERK >= 10 when using LIN_ADVANCE."); + #elif NONE(HAS_JUNCTION_DEVIATION, ALLOW_LOW_EJERK) && defined(DEFAULT_EJERK) + static_assert(DEFAULT_EJERK >= 10, "It is strongly recommended to set DEFAULT_EJERK >= 10 when using LIN_ADVANCE. Enable ALLOW_LOW_EJERK to bypass this alert (e.g., for direct drive)."); #endif #endif From 767a15d468ab6859eec19600541ad21dff757d1a Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Mon, 1 Nov 2021 22:43:40 -0700 Subject: [PATCH 090/532] =?UTF-8?q?=F0=9F=94=A7=20Endstop=20/=20DIAG=20hom?= =?UTF-8?q?ing=20conflict=20warning=20(#23050)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/gcode.h | 2 +- Marlin/src/inc/Warnings.cpp | 9 +++++++++ Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_3.h | 4 +++- Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h | 2 ++ Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h | 2 ++ Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h | 2 ++ Marlin/src/pins/lpc1769/pins_MKS_SGEN_L_V2.h | 2 ++ Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_common.h | 2 ++ Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h | 5 +++-- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h | 1 + Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h | 8 +++++--- Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h | 2 ++ Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h | 9 ++++----- Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h | 6 +++--- Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h | 5 +++-- Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h | 3 +-- Marlin/src/pins/stm32f4/pins_LERDGE_K.h | 3 +-- Marlin/src/pins/stm32f4/pins_LERDGE_S.h | 3 +-- Marlin/src/pins/stm32f4/pins_LERDGE_X.h | 3 +-- Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h | 4 ++-- Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3.h | 6 ++---- Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h | 3 +-- Marlin/src/pins/stm32f4/pins_MKS_ROBIN_PRO_V2.h | 3 +-- Marlin/src/pins/stm32h7/pins_BTT_SKR_SE_BX.h | 3 +-- 24 files changed, 55 insertions(+), 37 deletions(-) diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 09dd53d6f6..d7bacaef32 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -1130,7 +1130,7 @@ private: static void M913(); static void M913_report(const bool forReplay=true); #endif - #if ENABLED(USE_SENSORLESS) + #if USE_SENSORLESS static void M914(); static void M914_report(const bool forReplay=true); #endif diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index d258aefd82..2510949010 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -488,3 +488,12 @@ #if HOMING_Z_WITH_PROBE && IS_CARTESIAN && DISABLED(Z_SAFE_HOMING) #error "Z_SAFE_HOMING is recommended when homing with a probe. Enable Z_SAFE_HOMING or comment out this line to continue." #endif + +// +// Warn users of potential endstop/DIAG pin conflicts to prevent homing issues when not using sensorless homing +// +#if !USE_SENSORLESS && ENABLED(USES_DIAG_JUMPERS) + #warning "Motherboard DIAG jumpers must be removed when SENSORLESS_HOMING is disabled." +#elif !USE_SENSORLESS && ENABLED(USES_DIAG_PINS) + #warning "Driver DIAG pins must be physically removed unless SENSORLESS_HOMING is enabled. (See https://bit.ly/2ZPRlt0)" +#endif diff --git a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_3.h b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_3.h index ec8f31b854..97d78c0d24 100644 --- a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_3.h +++ b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_3.h @@ -26,7 +26,9 @@ */ #define BOARD_INFO_NAME "BTT SKR V1.3" -#define LPC1768_IS_SKRV1_3 1 + +#define LPC1768_IS_SKRV1_3 +#define USES_DIAG_JUMPERS // // Trinamic Stallguard pins diff --git a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h index a072242adc..b9dc845c5b 100644 --- a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h +++ b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h @@ -35,6 +35,8 @@ #define BOARD_CUSTOM_BUILD_FLAGS -DLPC_PINCFG_UART3_P4_28 #endif +#define USES_DIAG_PINS + // // EEPROM // diff --git a/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h b/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h index d6b1eeab46..15afe7e238 100644 --- a/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h +++ b/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h @@ -30,6 +30,8 @@ #define BOARD_INFO_NAME "MKS SGen-L" #define BOARD_WEBSITE_URL "github.com/makerbase-mks/MKS-SGEN_L" +#define USES_DIAG_JUMPERS + // // Servos // diff --git a/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h b/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h index 9c514f8ca3..bdc49fc236 100644 --- a/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h +++ b/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h @@ -31,6 +31,8 @@ #define BOARD_INFO_NAME "BTT SKR E3 Turbo" #endif +#define USES_DIAG_JUMPERS + // Onboard I2C EEPROM #define I2C_EEPROM #define MARLIN_EEPROM_SIZE 0x1000 // 4KB (AT24C32) diff --git a/Marlin/src/pins/lpc1769/pins_MKS_SGEN_L_V2.h b/Marlin/src/pins/lpc1769/pins_MKS_SGEN_L_V2.h index bb39009f09..8107f11937 100644 --- a/Marlin/src/pins/lpc1769/pins_MKS_SGEN_L_V2.h +++ b/Marlin/src/pins/lpc1769/pins_MKS_SGEN_L_V2.h @@ -30,6 +30,8 @@ #define BOARD_INFO_NAME "MKS SGEN_L V2" #define BOARD_WEBSITE_URL "github.com/makerbase-mks" +#define USES_DIAG_JUMPERS + // // EEPROM, MKS SGEN_L V2.0 hardware has 4K EEPROM on the board // 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 48d38e2213..c132691c20 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 @@ -26,6 +26,8 @@ // Release PB3/PB4 (E0 STP/DIR) from JTAG pins #define DISABLE_JTAG +#define USES_DIAG_JUMPERS + // Ignore temp readings during development. //#define BOGUS_TEMPERATURE_GRACE_PERIOD 2000 diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h index a221ce94c5..a34099120e 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h @@ -27,10 +27,11 @@ #include "env_validate.h" -#define BOARD_NO_NATIVE_USB - #define BOARD_WEBSITE_URL "github.com/makerbase-mks" +#define BOARD_NO_NATIVE_USB +#define USES_DIAG_JUMPERS + //#define DISABLE_DEBUG #define DISABLE_JTAG diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h index 3df6727d03..1cdee92b08 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h @@ -36,6 +36,7 @@ #define BOARD_INFO_NAME "MKS Robin nano V2.0" #define BOARD_NO_NATIVE_USB +#define USES_DIAG_PINS // Avoid conflict with TIMER_SERVO when using the STM32 HAL #define TEMP_TIMER 5 diff --git a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h index 44485b0776..b7ffcce4a8 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h @@ -29,6 +29,11 @@ #define BOARD_INFO_NAME "BTT BTT002 V1.0" +#define USES_DIAG_PINS + +// Ignore temp readings during development. +//#define BOGUS_TEMPERATURE_GRACE_PERIOD 2000 + // Use one of these or SDCard-based Emulation will be used #if NO_EEPROM_SELECTED //#define SRAM_EEPROM_EMULATION // Use BackSRAM-based EEPROM emulation @@ -41,9 +46,6 @@ #define FLASH_EEPROM_LEVELING #endif -// Ignore temp readings during development. -//#define BOGUS_TEMPERATURE_GRACE_PERIOD 2000 - // // Limit Switches // diff --git a/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h b/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h index bd483ecf0a..d1f38f5c80 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h @@ -29,6 +29,8 @@ #define BOARD_INFO_NAME "BTT E3 RRF" #endif +#define USES_DIAG_JUMPERS + // Add-on board for IDEX conversion //#define BTT_E3_RRF_IDEX_BOARD diff --git a/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h index 95f74efe84..dfa9d8a7b9 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h @@ -31,15 +31,14 @@ #define BOARD_INFO_NAME "BTT GTR V1.0" +#define USES_DIAG_JUMPERS +#define HAS_OTG_USB_HOST_SUPPORT // USB Flash Drive support +#define M5_EXTENDER // The M5 extender is attached + // Onboard I2C EEPROM #define I2C_EEPROM #define MARLIN_EEPROM_SIZE 0x2000 // 8KB (24C64 ... 64Kb = 8KB) -// USB Flash Drive support -#define HAS_OTG_USB_HOST_SUPPORT - -#define M5_EXTENDER // The M5 extender is attached - // // Servos // diff --git a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h index 655e65da47..6dc90bf910 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h @@ -23,15 +23,15 @@ #include "env_validate.h" +#define HAS_OTG_USB_HOST_SUPPORT // USB Flash Drive support +#define USES_DIAG_JUMPERS + // Onboard I2C EEPROM #define I2C_EEPROM #define MARLIN_EEPROM_SIZE 0x8000 // 32KB (24C32A) #define I2C_SCL_PIN PB8 #define I2C_SDA_PIN PB9 -// USB Flash Drive support -#define HAS_OTG_USB_HOST_SUPPORT - // Avoid conflict with TIMER_TONE #define STEP_TIMER 10 diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h index 3314d0154d..ac049baa21 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h @@ -23,6 +23,8 @@ #include "env_validate.h" +#define USES_DIAG_JUMPERS + // If you have the BigTreeTech driver expansion module, enable BTT_MOTOR_EXPANSION // https://github.com/bigtreetech/BTT-Expansion-module/tree/master/BTT%20EXP-MOT //#define BTT_MOTOR_EXPANSION @@ -47,8 +49,7 @@ #define FLASH_EEPROM_LEVELING #endif -// USB Flash Drive support -#define HAS_OTG_USB_HOST_SUPPORT +#define HAS_OTG_USB_HOST_SUPPORT // USB Flash Drive support // // Servos diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h index 50330932cf..9a280eac16 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h @@ -47,8 +47,7 @@ #define FLASH_EEPROM_LEVELING #endif -// USB Flash Drive support -#define HAS_OTG_USB_HOST_SUPPORT +#define HAS_OTG_USB_HOST_SUPPORT // USB Flash Drive support // Avoid conflict with TIMER_TONE #define STEP_TIMER 10 diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_K.h b/Marlin/src/pins/stm32f4/pins_LERDGE_K.h index 6ad3849d11..099b3b79a4 100644 --- a/Marlin/src/pins/stm32f4/pins_LERDGE_K.h +++ b/Marlin/src/pins/stm32f4/pins_LERDGE_K.h @@ -40,8 +40,7 @@ #define MARLIN_EEPROM_SIZE 0x10000 #endif -// USB Flash Drive support -#define HAS_OTG_USB_HOST_SUPPORT +#define HAS_OTG_USB_HOST_SUPPORT // USB Flash Drive support // // Servos diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_S.h b/Marlin/src/pins/stm32f4/pins_LERDGE_S.h index 68e5636955..c686e19ccb 100644 --- a/Marlin/src/pins/stm32f4/pins_LERDGE_S.h +++ b/Marlin/src/pins/stm32f4/pins_LERDGE_S.h @@ -34,8 +34,7 @@ #define STEP_TIMER 4 #define TEMP_TIMER 2 -// USB Flash Drive support -#define HAS_OTG_USB_HOST_SUPPORT +#define HAS_OTG_USB_HOST_SUPPORT // USB Flash Drive support // // Servos diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_X.h b/Marlin/src/pins/stm32f4/pins_LERDGE_X.h index 7f35c0f5dd..93526db442 100644 --- a/Marlin/src/pins/stm32f4/pins_LERDGE_X.h +++ b/Marlin/src/pins/stm32f4/pins_LERDGE_X.h @@ -39,8 +39,7 @@ #define I2C_SDA_PIN PB9 #define MARLIN_EEPROM_SIZE 0x10000 // FM24CL64 F-RAM 64K (8Kx8) -// USB Flash Drive support -#define HAS_OTG_USB_HOST_SUPPORT +#define HAS_OTG_USB_HOST_SUPPORT // USB Flash Drive support // // Servos diff --git a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h index 8fa211dc95..a7f853185e 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h @@ -32,8 +32,8 @@ #define BOARD_INFO_NAME "MKS Monster8 V1.x" -// USB Flash Drive support -#define HAS_OTG_USB_HOST_SUPPORT +#define HAS_OTG_USB_HOST_SUPPORT // USB Flash Drive support +#define USES_DIAG_JUMPERS //#define DISABLE_DEBUG diff --git a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3.h b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3.h index 4dc73e0312..02140865f9 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3.h @@ -32,22 +32,20 @@ #define BOARD_INFO_NAME "MKS Robin Nano V3" +#define USES_DIAG_JUMPERS + #ifndef X_CS_PIN #define X_CS_PIN PD5 #endif - #ifndef Y_CS_PIN #define Y_CS_PIN PD7 #endif - #ifndef Z_CS_PIN #define Z_CS_PIN PD4 #endif - #ifndef E0_CS_PIN #define E0_CS_PIN PD9 #endif - #ifndef E1_CS_PIN #define E1_CS_PIN PD8 #endif diff --git a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h index c3e3963b55..256439e654 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h @@ -26,8 +26,7 @@ // MKS Robin Nano V3, MKS Eagle pinmap // -// USB Flash Drive support -#define HAS_OTG_USB_HOST_SUPPORT +#define HAS_OTG_USB_HOST_SUPPORT // USB Flash Drive support // Avoid conflict with TIMER_TONE #define STEP_TIMER 10 diff --git a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_PRO_V2.h b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_PRO_V2.h index 46dec71c11..68b2385254 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_PRO_V2.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_PRO_V2.h @@ -39,8 +39,7 @@ #define I2C_EEPROM #define MARLIN_EEPROM_SIZE 0x1000 // 4KB -// USB Flash Drive support -#define HAS_OTG_USB_HOST_SUPPORT +#define HAS_OTG_USB_HOST_SUPPORT // USB Flash Drive support // // Release PB4 (Y_ENABLE_PIN) from JTAG NRST role diff --git a/Marlin/src/pins/stm32h7/pins_BTT_SKR_SE_BX.h b/Marlin/src/pins/stm32h7/pins_BTT_SKR_SE_BX.h index 991c611a89..9eb0acf144 100644 --- a/Marlin/src/pins/stm32h7/pins_BTT_SKR_SE_BX.h +++ b/Marlin/src/pins/stm32h7/pins_BTT_SKR_SE_BX.h @@ -32,8 +32,7 @@ #define I2C_EEPROM #define MARLIN_EEPROM_SIZE 0x1000 // 4KB (24C32 ... 32Kb = 4KB) -// USB Flash Drive support -#define HAS_OTG_USB_HOST_SUPPORT +#define HAS_OTG_USB_HOST_SUPPORT // USB Flash Drive support // // Limit Switches From da830e6ced7f7c7e509e748104245064d1c1b265 Mon Sep 17 00:00:00 2001 From: Andrei M <22990561+andrei-moraru@users.noreply.github.com> Date: Tue, 2 Nov 2021 01:47:16 -0400 Subject: [PATCH 091/532] =?UTF-8?q?=E2=9A=97=EF=B8=8F=20Use=20pwm=5Fset=5F?= =?UTF-8?q?duty=20over=20analogWrite=20to=20set=20PWM=20(#23048)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/HAL/AVR/HAL.h | 2 +- Marlin/src/HAL/AVR/fast_pwm.cpp | 64 +++++++++++++-------------- Marlin/src/HAL/DUE/HAL.h | 5 +++ Marlin/src/HAL/ESP32/HAL.h | 4 ++ Marlin/src/HAL/LINUX/HAL.h | 3 ++ Marlin/src/HAL/LPC1768/fast_pwm.cpp | 16 +++---- Marlin/src/HAL/NATIVE_SIM/HAL.h | 3 ++ Marlin/src/HAL/SAMD51/HAL.h | 5 +++ Marlin/src/HAL/STM32/fast_pwm.cpp | 37 ++++++++-------- Marlin/src/HAL/STM32F1/HAL.cpp | 3 +- Marlin/src/HAL/STM32F1/fast_pwm.cpp | 60 ++++++++++++------------- Marlin/src/HAL/TEENSY31_32/HAL.h | 6 +++ Marlin/src/HAL/TEENSY35_36/HAL.h | 6 +++ Marlin/src/HAL/TEENSY40_41/HAL.cpp | 10 ++--- Marlin/src/HAL/TEENSY40_41/HAL.h | 8 +++- Marlin/src/feature/caselight.cpp | 2 +- Marlin/src/feature/controllerfan.cpp | 7 +-- Marlin/src/feature/leds/leds.cpp | 10 ++--- Marlin/src/feature/spindle_laser.cpp | 6 +-- Marlin/src/gcode/control/M42.cpp | 4 +- Marlin/src/lcd/dogm/marlinui_DOGM.cpp | 2 +- Marlin/src/lcd/tft/ui_common.cpp | 2 +- Marlin/src/module/endstops.cpp | 2 +- Marlin/src/module/planner.cpp | 6 +-- Marlin/src/module/stepper.cpp | 2 +- Marlin/src/module/temperature.cpp | 10 ++--- 26 files changed, 159 insertions(+), 126 deletions(-) diff --git a/Marlin/src/HAL/AVR/HAL.h b/Marlin/src/HAL/AVR/HAL.h index ecb566ed46..ad1f47a4e6 100644 --- a/Marlin/src/HAL/AVR/HAL.h +++ b/Marlin/src/HAL/AVR/HAL.h @@ -221,7 +221,7 @@ void set_pwm_frequency(const pin_t pin, int f_desired); /** * set_pwm_duty - * Sets the PWM duty cycle of the provided pin to the provided value + * Set the PWM duty cycle of the provided pin to the provided value * Optionally allows inverting the duty cycle [default = false] * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] */ diff --git a/Marlin/src/HAL/AVR/fast_pwm.cpp b/Marlin/src/HAL/AVR/fast_pwm.cpp index 238c1124ad..2556fa0441 100644 --- a/Marlin/src/HAL/AVR/fast_pwm.cpp +++ b/Marlin/src/HAL/AVR/fast_pwm.cpp @@ -22,11 +22,10 @@ #ifdef __AVR__ #include "../../inc/MarlinConfigPre.h" +#include "HAL.h" #if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM -#include "HAL.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 @@ -153,7 +152,7 @@ Timer get_pwm_timer(const pin_t pin) { void set_pwm_frequency(const pin_t pin, int f_desired) { Timer timer = get_pwm_timer(pin); - if (timer.n == 0) return; // Don't proceed if protected timer or not recognised + if (timer.n == 0) return; // Don't proceed if protected timer or not recognized uint16_t size; if (timer.n == 2) size = 255; else size = 65535; @@ -243,40 +242,39 @@ void set_pwm_frequency(const pin_t pin, int f_desired) { _SET_ICRn(timer.ICRn, res); // Set ICRn value (TOP) = res } +#endif // NEEDS_HARDWARE_PWM + void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { - // If v is 0 or v_size (max), digitalWrite to LOW or HIGH. - // Note that digitalWrite also disables pwm output for us (sets COM bit to 0) - if (v == 0) - digitalWrite(pin, invert); - else if (v == v_size) - digitalWrite(pin, !invert); - else { - Timer timer = get_pwm_timer(pin); - if (timer.n == 0) return; // Don't proceed if protected timer or not recognised - // Set compare output mode to CLEAR -> SET or SET -> CLEAR (if inverted) - _SET_COMnQ(timer.TCCRnQ, (timer.q - #ifdef TCCR2 - + (timer.q == 2) // COM20 is on bit 4 of TCCR2, thus requires q + 1 in the macro - #endif - ), COM_CLEAR_SET + invert - ); + #if NEEDS_HARDWARE_PWM - uint16_t top; - if (timer.n == 2) { // if TIMER2 - top = ( - #if ENABLED(USE_OCR2A_AS_TOP) - *timer.OCRnQ[0] // top = OCR2A - #else - 255 // top = 0xFF (max) - #endif + // If v is 0 or v_size (max), digitalWrite to LOW or HIGH. + // Note that digitalWrite also disables pwm output for us (sets COM bit to 0) + if (v == 0) + digitalWrite(pin, invert); + else if (v == v_size) + digitalWrite(pin, !invert); + else { + Timer timer = get_pwm_timer(pin); + if (timer.n == 0) return; // Don't proceed if protected timer or not recognized + // Set compare output mode to CLEAR -> SET or SET -> CLEAR (if inverted) + _SET_COMnQ(timer.TCCRnQ, (timer.q + #ifdef TCCR2 + + (timer.q == 2) // COM20 is on bit 4 of TCCR2, thus requires q + 1 in the macro + #endif + ), COM_CLEAR_SET + invert ); - } - else - top = *timer.ICRn; // top = ICRn - _SET_OCRnQ(timer.OCRnQ, timer.q, v * float(top) / float(v_size)); // Scale 8/16-bit v to top value - } + uint16_t top = (timer.n == 2) ? TERN(USE_OCR2A_AS_TOP, *timer.OCRnQ[0], 255) : *timer.ICRn; + _SET_OCRnQ(timer.OCRnQ, timer.q, (v * top + v_size / 2) / v_size); // Scale 8/16-bit v to top value + } + + #else + + analogWrite(pin, v); + UNUSED(v_size); + UNUSED(invert); + + #endif } -#endif // NEEDS_HARDWARE_PWM #endif // __AVR__ diff --git a/Marlin/src/HAL/DUE/HAL.h b/Marlin/src/HAL/DUE/HAL.h index fb90c40aa7..96ab5d9808 100644 --- a/Marlin/src/HAL/DUE/HAL.h +++ b/Marlin/src/HAL/DUE/HAL.h @@ -144,6 +144,11 @@ inline void HAL_adc_init() {}//todo void HAL_adc_start_conversion(const uint8_t ch); uint16_t HAL_adc_get_result(); +// +// PWM +// +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + // // Pin Map // diff --git a/Marlin/src/HAL/ESP32/HAL.h b/Marlin/src/HAL/ESP32/HAL.h index 8a8f6df640..8473e3c4e4 100644 --- a/Marlin/src/HAL/ESP32/HAL.h +++ b/Marlin/src/HAL/ESP32/HAL.h @@ -129,6 +129,10 @@ void HAL_adc_init(); void HAL_adc_start_conversion(const uint8_t adc_pin); +// PWM +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + +// Pin Map #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) diff --git a/Marlin/src/HAL/LINUX/HAL.h b/Marlin/src/HAL/LINUX/HAL.h index b80fe210f8..d7d3a92b73 100644 --- a/Marlin/src/HAL/LINUX/HAL.h +++ b/Marlin/src/HAL/LINUX/HAL.h @@ -101,6 +101,9 @@ void HAL_adc_enable_channel(const uint8_t ch); void HAL_adc_start_conversion(const uint8_t ch); uint16_t HAL_adc_get_result(); +// PWM +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + // Reset source inline void HAL_clear_reset_source(void) {} inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; } diff --git a/Marlin/src/HAL/LPC1768/fast_pwm.cpp b/Marlin/src/HAL/LPC1768/fast_pwm.cpp index dd440b5e77..70fc0e333d 100644 --- a/Marlin/src/HAL/LPC1768/fast_pwm.cpp +++ b/Marlin/src/HAL/LPC1768/fast_pwm.cpp @@ -22,18 +22,18 @@ #ifdef TARGET_LPC1768 #include "../../inc/MarlinConfigPre.h" - -#if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM - #include -void set_pwm_frequency(const pin_t pin, int f_desired) { - LPC176x::pwm_set_frequency(pin, f_desired); -} - void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { LPC176x::pwm_write_ratio(pin, invert ? 1.0f - (float)v / v_size : (float)v / v_size); } -#endif // NEEDS_HARDWARE_PWM +#if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM + + void set_pwm_frequency(const pin_t pin, int f_desired) { + LPC176x::pwm_set_frequency(pin, f_desired); + } + +#endif + #endif // TARGET_LPC1768 diff --git a/Marlin/src/HAL/NATIVE_SIM/HAL.h b/Marlin/src/HAL/NATIVE_SIM/HAL.h index 235c24808c..915339468b 100644 --- a/Marlin/src/HAL/NATIVE_SIM/HAL.h +++ b/Marlin/src/HAL/NATIVE_SIM/HAL.h @@ -133,6 +133,9 @@ void HAL_adc_enable_channel(const uint8_t ch); void HAL_adc_start_conversion(const uint8_t ch); uint16_t HAL_adc_get_result(); +// PWM +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + // Reset source inline void HAL_clear_reset_source(void) {} inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; } diff --git a/Marlin/src/HAL/SAMD51/HAL.h b/Marlin/src/HAL/SAMD51/HAL.h index 775a9240e1..c262752a8d 100644 --- a/Marlin/src/HAL/SAMD51/HAL.h +++ b/Marlin/src/HAL/SAMD51/HAL.h @@ -127,6 +127,11 @@ void HAL_adc_init(); void HAL_adc_start_conversion(const uint8_t adc_pin); +// +// PWM +// +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + // // Pin Map // diff --git a/Marlin/src/HAL/STM32/fast_pwm.cpp b/Marlin/src/HAL/STM32/fast_pwm.cpp index 917e12615f..d4d695b969 100644 --- a/Marlin/src/HAL/STM32/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32/fast_pwm.cpp @@ -24,26 +24,9 @@ #ifdef HAL_STM32 -#include "../../inc/MarlinConfigPre.h" - -#if NEEDS_HARDWARE_PWM - -#include "HAL.h" +#include "../../inc/MarlinConfig.h" #include "timers.h" -void set_pwm_frequency(const pin_t pin, int f_desired) { - if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer - - PinName pin_name = digitalPinToPinName(pin); - TIM_TypeDef *Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance - - LOOP_S_L_N(i, 0, NUM_HARDWARE_TIMERS) // Protect used timers - if (timer_instance[i] && timer_instance[i]->getHandle()->Instance == Instance) - return; - - pwm_start(pin_name, f_desired, 0, RESOLUTION_8B_COMPARE_FORMAT); -} - void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { PinName pin_name = digitalPinToPinName(pin); TIM_TypeDef *Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); @@ -58,5 +41,21 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 } } -#endif // NEEDS_HARDWARE_PWM +#if NEEDS_HARDWARE_PWM + + void set_pwm_frequency(const pin_t pin, int f_desired) { + if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer + + PinName pin_name = digitalPinToPinName(pin); + TIM_TypeDef *Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance + + LOOP_S_L_N(i, 0, NUM_HARDWARE_TIMERS) // Protect used timers + if (timer_instance[i] && timer_instance[i]->getHandle()->Instance == Instance) + return; + + pwm_start(pin_name, f_desired, 0, RESOLUTION_8B_COMPARE_FORMAT); + } + +#endif + #endif // HAL_STM32 diff --git a/Marlin/src/HAL/STM32F1/HAL.cpp b/Marlin/src/HAL/STM32F1/HAL.cpp index df1ba33d4a..f29b305361 100644 --- a/Marlin/src/HAL/STM32F1/HAL.cpp +++ b/Marlin/src/HAL/STM32F1/HAL.cpp @@ -449,8 +449,7 @@ uint16_t analogRead(pin_t pin) { // Wrapper to maple unprotected analogWrite void analogWrite(pin_t pin, int pwm_val8) { - if (PWM_PIN(pin)) - analogWrite(uint8_t(pin), pwm_val8); + if (PWM_PIN(pin)) analogWrite(uint8_t(pin), pwm_val8); } void HAL_reboot() { nvic_sys_reset(); } diff --git a/Marlin/src/HAL/STM32F1/fast_pwm.cpp b/Marlin/src/HAL/STM32F1/fast_pwm.cpp index 884d482af5..6a9d7e8a19 100644 --- a/Marlin/src/HAL/STM32F1/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32F1/fast_pwm.cpp @@ -23,40 +23,10 @@ #include "../../inc/MarlinConfigPre.h" -#if NEEDS_HARDWARE_PWM - #include #include "HAL.h" #include "timers.h" -void set_pwm_frequency(const pin_t pin, int f_desired) { - if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer - - timer_dev *timer = PIN_MAP[pin].timer_device; - uint8_t channel = PIN_MAP[pin].timer_channel; - - // Protect used timers - if (timer == get_timer_dev(TEMP_TIMER_NUM)) return; - if (timer == get_timer_dev(STEP_TIMER_NUM)) return; - #if PULSE_TIMER_NUM != STEP_TIMER_NUM - if (timer == get_timer_dev(PULSE_TIMER_NUM)) return; - #endif - - if (!(timer->regs.bas->SR & TIMER_CR1_CEN)) // Ensure the timer is enabled - timer_init(timer); - - timer_set_mode(timer, channel, TIMER_PWM); - uint16_t preload = 255; // Lock 255 PWM resolution for high frequencies - int32_t prescaler = (HAL_TIMER_RATE) / (preload + 1) / f_desired - 1; - if (prescaler > 65535) { // For low frequencies increase prescaler - prescaler = 65535; - preload = (HAL_TIMER_RATE) / (prescaler + 1) / f_desired - 1; - } - if (prescaler < 0) return; // Too high frequency - timer_set_reload(timer, preload); - timer_set_prescaler(timer, prescaler); -} - void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { timer_dev *timer = PIN_MAP[pin].timer_device; uint16_t max_val = timer->regs.bas->ARR * v / v_size; @@ -64,5 +34,35 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 pwmWrite(pin, max_val); } +#if NEEDS_HARDWARE_PWM + + void set_pwm_frequency(const pin_t pin, int f_desired) { + if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer + + timer_dev *timer = PIN_MAP[pin].timer_device; + uint8_t channel = PIN_MAP[pin].timer_channel; + + // Protect used timers + if (timer == get_timer_dev(TEMP_TIMER_NUM)) return; + if (timer == get_timer_dev(STEP_TIMER_NUM)) return; + #if PULSE_TIMER_NUM != STEP_TIMER_NUM + if (timer == get_timer_dev(PULSE_TIMER_NUM)) return; + #endif + + if (!(timer->regs.bas->SR & TIMER_CR1_CEN)) // Ensure the timer is enabled + timer_init(timer); + + timer_set_mode(timer, channel, TIMER_PWM); + uint16_t preload = 255; // Lock 255 PWM resolution for high frequencies + int32_t prescaler = (HAL_TIMER_RATE) / (preload + 1) / f_desired - 1; + if (prescaler > 65535) { // For low frequencies increase prescaler + prescaler = 65535; + preload = (HAL_TIMER_RATE) / (prescaler + 1) / f_desired - 1; + } + if (prescaler < 0) return; // Too high frequency + timer_set_reload(timer, preload); + timer_set_prescaler(timer, prescaler); + } + #endif // NEEDS_HARDWARE_PWM #endif // __STM32F1__ diff --git a/Marlin/src/HAL/TEENSY31_32/HAL.h b/Marlin/src/HAL/TEENSY31_32/HAL.h index 7235f5ef0e..61d8b34604 100644 --- a/Marlin/src/HAL/TEENSY31_32/HAL.h +++ b/Marlin/src/HAL/TEENSY31_32/HAL.h @@ -122,6 +122,12 @@ void HAL_adc_init(); void HAL_adc_start_conversion(const uint8_t adc_pin); uint16_t HAL_adc_get_result(); +// PWM + +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + +// Pin Map + #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) diff --git a/Marlin/src/HAL/TEENSY35_36/HAL.h b/Marlin/src/HAL/TEENSY35_36/HAL.h index 8892ffec45..892eb2d3c5 100644 --- a/Marlin/src/HAL/TEENSY35_36/HAL.h +++ b/Marlin/src/HAL/TEENSY35_36/HAL.h @@ -129,6 +129,12 @@ void HAL_adc_init(); void HAL_adc_start_conversion(const uint8_t adc_pin); uint16_t HAL_adc_get_result(); +// PWM + +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + +// Pin Map + #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) diff --git a/Marlin/src/HAL/TEENSY40_41/HAL.cpp b/Marlin/src/HAL/TEENSY40_41/HAL.cpp index ccc8c2659c..270bee0dc9 100644 --- a/Marlin/src/HAL/TEENSY40_41/HAL.cpp +++ b/Marlin/src/HAL/TEENSY40_41/HAL.cpp @@ -106,17 +106,17 @@ void HAL_adc_init() { void HAL_clear_reset_source() { uint32_t reset_source = SRC_SRSR; SRC_SRSR = reset_source; - } +} uint8_t HAL_get_reset_source() { switch (SRC_SRSR & 0xFF) { case 1: return RST_POWER_ON; break; case 2: return RST_SOFTWARE; break; case 4: return RST_EXTERNAL; break; - // case 8: return RST_BROWN_OUT; break; + //case 8: return RST_BROWN_OUT; break; case 16: return RST_WATCHDOG; break; - case 64: return RST_JTAG; break; - // case 128: return RST_OVERTEMP; break; + case 64: return RST_JTAG; break; + //case 128: return RST_OVERTEMP; break; } return 0; } @@ -168,7 +168,7 @@ uint16_t HAL_adc_get_result() { return 0; } -bool is_output(uint8_t pin) { +bool is_output(pin_t pin) { const struct digital_pin_bitband_and_config_table_struct *p; p = digital_pin_to_info_PGM + pin; return (*(p->reg + 1) & p->mask); diff --git a/Marlin/src/HAL/TEENSY40_41/HAL.h b/Marlin/src/HAL/TEENSY40_41/HAL.h index c9716eacde..2b730768a8 100644 --- a/Marlin/src/HAL/TEENSY40_41/HAL.h +++ b/Marlin/src/HAL/TEENSY40_41/HAL.h @@ -150,8 +150,14 @@ void HAL_adc_init(); void HAL_adc_start_conversion(const uint8_t adc_pin); uint16_t HAL_adc_get_result(); +// PWM + +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + +// Pin Map + #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) -bool is_output(uint8_t pin); +bool is_output(pin_t pin); diff --git a/Marlin/src/feature/caselight.cpp b/Marlin/src/feature/caselight.cpp index 1baef6d468..7c4755d0b5 100644 --- a/Marlin/src/feature/caselight.cpp +++ b/Marlin/src/feature/caselight.cpp @@ -70,7 +70,7 @@ void CaseLight::update(const bool sflag) { #if CASELIGHT_USES_BRIGHTNESS if (pin_is_pwm()) - analogWrite(pin_t(CASE_LIGHT_PIN), ( + set_pwm_duty(pin_t(CASE_LIGHT_PIN), ( #if CASE_LIGHT_MAX_PWM == 255 n10ct #else diff --git a/Marlin/src/feature/controllerfan.cpp b/Marlin/src/feature/controllerfan.cpp index 03ef31e414..330f3914f6 100644 --- a/Marlin/src/feature/controllerfan.cpp +++ b/Marlin/src/feature/controllerfan.cpp @@ -72,9 +72,10 @@ void ControllerFan::update() { ? settings.active_speed : settings.idle_speed ); - // Allow digital or PWM fan output (see M42 handling) - WRITE(CONTROLLER_FAN_PIN, speed); - analogWrite(pin_t(CONTROLLER_FAN_PIN), speed); + if (PWM_PIN(CONTROLLER_FAN_PIN)) + set_pwm_duty(pin_t(CONTROLLER_FAN_PIN), speed); + else + WRITE(CONTROLLER_FAN_PIN, speed); } } diff --git a/Marlin/src/feature/leds/leds.cpp b/Marlin/src/feature/leds/leds.cpp index 328daa626d..a371637f00 100644 --- a/Marlin/src/feature/leds/leds.cpp +++ b/Marlin/src/feature/leds/leds.cpp @@ -121,11 +121,11 @@ void LEDLights::set_color(const LEDColor &incol // This variant uses 3-4 separate pins for the RGB(W) components. // If the pins can do PWM then their intensity will be set. - #define _UPDATE_RGBW(C,c) do { \ - if (PWM_PIN(RGB_LED_##C##_PIN)) \ - analogWrite(pin_t(RGB_LED_##C##_PIN), c); \ - else \ - WRITE(RGB_LED_##C##_PIN, c ? HIGH : LOW); \ + #define _UPDATE_RGBW(C,c) do { \ + if (PWM_PIN(RGB_LED_##C##_PIN)) \ + set_pwm_duty(pin_t(RGB_LED_##C##_PIN), c); \ + else \ + WRITE(RGB_LED_##C##_PIN, c ? HIGH : LOW); \ }while(0) #define UPDATE_RGBW(C,c) _UPDATE_RGBW(C, TERN1(CASE_LIGHT_USE_RGB_LED, caselight.on) ? incol.c : 0) UPDATE_RGBW(R,r); UPDATE_RGBW(G,g); UPDATE_RGBW(B,b); diff --git a/Marlin/src/feature/spindle_laser.cpp b/Marlin/src/feature/spindle_laser.cpp index ea6fc4990e..9297e9b95c 100644 --- a/Marlin/src/feature/spindle_laser.cpp +++ b/Marlin/src/feature/spindle_laser.cpp @@ -66,7 +66,7 @@ void SpindleLaser::init() { #endif #if ENABLED(SPINDLE_LASER_USE_PWM) SET_PWM(SPINDLE_LASER_PWM_PIN); - analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // Set to lowest speed + set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // Set to lowest speed #endif #if ENABLED(HAL_CAN_SET_PWM_FREQ) && defined(SPINDLE_LASER_FREQUENCY) set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_FREQUENCY); @@ -92,10 +92,8 @@ void SpindleLaser::init() { void SpindleLaser::_set_ocr(const uint8_t ocr) { #if NEEDS_HARDWARE_PWM && SPINDLE_LASER_FREQUENCY set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), TERN(MARLIN_DEV_MODE, frequency, SPINDLE_LASER_FREQUENCY)); - set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF); - #else - analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF); #endif + set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF); } void SpindleLaser::set_ocr(const uint8_t ocr) { diff --git a/Marlin/src/gcode/control/M42.cpp b/Marlin/src/gcode/control/M42.cpp index eead971a01..77c0ccc49b 100644 --- a/Marlin/src/gcode/control/M42.cpp +++ b/Marlin/src/gcode/control/M42.cpp @@ -126,10 +126,10 @@ void GcodeSuite::M42() { extDigitalWrite(pin, pin_status); #ifdef ARDUINO_ARCH_STM32 - // A simple I/O will be set to 0 by analogWrite() + // A simple I/O will be set to 0 by set_pwm_duty() if (pin_status <= 1 && !PWM_PIN(pin)) return; #endif - analogWrite(pin, pin_status); + set_pwm_duty(pin, pin_status); } #endif // DIRECT_PIN_CONTROL diff --git a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp index 5d4c30bbb4..f339cad706 100644 --- a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp +++ b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp @@ -342,7 +342,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop void MarlinUI::_set_brightness() { #if PIN_EXISTS(TFT_BACKLIGHT) if (PWM_PIN(TFT_BACKLIGHT_PIN)) - analogWrite(pin_t(TFT_BACKLIGHT_PIN), brightness); + set_pwm_duty(pin_t(TFT_BACKLIGHT_PIN), brightness); #endif } #endif diff --git a/Marlin/src/lcd/tft/ui_common.cpp b/Marlin/src/lcd/tft/ui_common.cpp index 8c503d2c9e..85ae21e867 100644 --- a/Marlin/src/lcd/tft/ui_common.cpp +++ b/Marlin/src/lcd/tft/ui_common.cpp @@ -213,7 +213,7 @@ void MarlinUI::clear_lcd() { void MarlinUI::_set_brightness() { #if PIN_EXISTS(TFT_BACKLIGHT) if (PWM_PIN(TFT_BACKLIGHT_PIN)) - analogWrite(pin_t(TFT_BACKLIGHT_PIN), brightness); + set_pwm_duty(pin_t(TFT_BACKLIGHT_PIN), brightness); #endif } #endif diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index 332becfb73..04f20ca3a4 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -1342,7 +1342,7 @@ void Endstops::update() { ES_REPORT_CHANGE(K_MAX); #endif SERIAL_ECHOLNPGM("\n"); - analogWrite(pin_t(LED_PIN), local_LED_status); + set_pwm_duty(pin_t(LED_PIN), local_LED_status); local_LED_status ^= 255; old_live_state_local = live_state_local; } diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 2552efc69a..11460fa67a 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1270,7 +1270,7 @@ void Planner::recalculate() { #elif ENABLED(FAST_PWM_FAN) #define _FAN_SET(F) set_pwm_duty(FAN##F##_PIN, CALC_FAN_SPEED(F)); #else - #define _FAN_SET(F) analogWrite(pin_t(FAN##F##_PIN), CALC_FAN_SPEED(F)); + #define _FAN_SET(F) set_pwm_duty(pin_t(FAN##F##_PIN), CALC_FAN_SPEED(F)); #endif #define FAN_SET(F) do{ kickstart_fan(fan_speed, ms, F); _FAN_SET(F); }while(0) @@ -1393,8 +1393,8 @@ void Planner::check_axes_activity() { TERN_(AUTOTEMP, autotemp_task()); #if ENABLED(BARICUDA) - TERN_(HAS_HEATER_1, analogWrite(pin_t(HEATER_1_PIN), tail_valve_pressure)); - TERN_(HAS_HEATER_2, analogWrite(pin_t(HEATER_2_PIN), tail_e_to_p_pressure)); + TERN_(HAS_HEATER_1, set_pwm_duty(pin_t(HEATER_1_PIN), tail_valve_pressure)); + TERN_(HAS_HEATER_2, set_pwm_duty(pin_t(HEATER_2_PIN), tail_e_to_p_pressure)); #endif } diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index a54bf53c49..2c8933266f 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -3253,7 +3253,7 @@ void Stepper::report_positions() { #elif HAS_MOTOR_CURRENT_PWM - #define _WRITE_CURRENT_PWM(P) analogWrite(pin_t(MOTOR_CURRENT_PWM_## P ##_PIN), 255L * current / (MOTOR_CURRENT_PWM_RANGE)) + #define _WRITE_CURRENT_PWM(P) set_pwm_duty(pin_t(MOTOR_CURRENT_PWM_## P ##_PIN), 255L * current / (MOTOR_CURRENT_PWM_RANGE)) switch (driver) { case 0: #if PIN_EXISTS(MOTOR_CURRENT_PWM_X) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 5e8f4c9d95..cef348c5f9 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -887,11 +887,11 @@ int16_t Temperature::getHeaterPower(const heater_id_t heater_id) { SBI(fanState, pgm_read_byte(&fanBit[COOLER_FAN_INDEX])); #endif - #define _UPDATE_AUTO_FAN(P,D,A) do{ \ - if (PWM_PIN(P##_AUTO_FAN_PIN) && A < 255) \ - analogWrite(pin_t(P##_AUTO_FAN_PIN), D ? A : 0); \ - else \ - WRITE(P##_AUTO_FAN_PIN, D); \ + #define _UPDATE_AUTO_FAN(P,D,A) do{ \ + if (PWM_PIN(P##_AUTO_FAN_PIN) && A < 255) \ + set_pwm_duty(pin_t(P##_AUTO_FAN_PIN), D ? A : 0); \ + else \ + WRITE(P##_AUTO_FAN_PIN, D); \ }while(0) uint8_t fanDone = 0; From 95357c33fb0d3ce6d84e59bd16e8354836997015 Mon Sep 17 00:00:00 2001 From: Sebastien BLAISOT Date: Tue, 2 Nov 2021 06:49:21 +0100 Subject: [PATCH 092/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20NEOPIXEL2=5FSEPARA?= =?UTF-8?q?TE=20default=20color=20(#23057)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/leds/leds.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/feature/leds/leds.cpp b/Marlin/src/feature/leds/leds.cpp index a371637f00..17d790b8cc 100644 --- a/Marlin/src/feature/leds/leds.cpp +++ b/Marlin/src/feature/leds/leds.cpp @@ -170,9 +170,9 @@ void LEDLights::set_color(const LEDColor &incol #if ENABLED(NEO2_COLOR_PRESETS) const LEDColor LEDLights2::defaultLEDColor = LEDColor( - LED_USER_PRESET_RED, LED_USER_PRESET_GREEN, LED_USER_PRESET_BLUE - OPTARG(HAS_WHITE_LED2, LED_USER_PRESET_WHITE) - OPTARG(NEOPIXEL_LED, LED_USER_PRESET_BRIGHTNESS) + NEO2_USER_PRESET_RED, NEO2_USER_PRESET_GREEN, NEO2_USER_PRESET_BLUE + OPTARG(HAS_WHITE_LED2, NEO2_USER_PRESET_WHITE) + OPTARG(NEOPIXEL_LED, NEO2_USER_PRESET_BRIGHTNESS) ); #endif From 0db9f9a828c43f978e37b5140f7b9bb6ca630667 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Mon, 1 Nov 2021 23:15:29 -0700 Subject: [PATCH 093/532] =?UTF-8?q?=F0=9F=93=8C=20Default=20NeoPixel=20pin?= =?UTF-8?q?=20for=20MKS=20Robin=20E3/E3D=20(#23060)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h index a34099120e..025c65a38b 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h @@ -64,6 +64,11 @@ #define Z_MIN_PROBE_PIN PB1 #endif +// LED driving pin +#ifndef NEOPIXEL_PIN + #define NEOPIXEL_PIN PA2 +#endif + // // Steppers // From f632b72e8c58ea4c54676ca17e9b9c9ee4584be0 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 2 Nov 2021 01:28:00 -0500 Subject: [PATCH 094/532] =?UTF-8?q?=F0=9F=94=A8=20Support=20ABM=20in=20mf?= =?UTF-8?q?=20scripts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/git/mfinfo | 1 + 1 file changed, 1 insertion(+) diff --git a/buildroot/share/git/mfinfo b/buildroot/share/git/mfinfo index e17138e456..0f5d79a002 100755 --- a/buildroot/share/git/mfinfo +++ b/buildroot/share/git/mfinfo @@ -52,6 +52,7 @@ case "$REPO" in Marlin ) TARG=bugfix-2.0.x ; [[ $INDEX == 1 ]] && TARG=bugfix-1.1.x ; [[ $INDEX == 3 ]] && TARG=dev-2.1.x ;; Configurations ) TARG=import-2.0.x ;; MarlinDocumentation ) TARG=master ;; + AutoBuildMarlin ) TARG=master ;; esac [[ $BRANCH =~ ^[123]$ ]] && USAGE=1 From 627b67e27aa4de50c172e0ffc4a13fe3fb2d35f8 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 3 Nov 2021 01:00:15 +0000 Subject: [PATCH 095/532] [cron] Bump distribution date (2021-11-03) --- 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 607561a87d..68c7d05299 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 "2021-11-02" +//#define STRING_DISTRIBUTION_DATE "2021-11-03" /** * 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 c0dbd45fa2..1e1977671b 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 "2021-11-02" + #define STRING_DISTRIBUTION_DATE "2021-11-03" #endif /** From cac42e24a581915176816c680a61396855660b19 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 3 Nov 2021 07:02:21 -0500 Subject: [PATCH 096/532] =?UTF-8?q?=F0=9F=94=A8=20Update=20git=20helper=20?= =?UTF-8?q?scripts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/git/mffp | 14 +++++++++----- buildroot/share/git/mfinfo | 28 ++++++++++++++++------------ buildroot/share/git/mfnew | 6 +++--- buildroot/share/git/mfpr | 6 +++--- buildroot/share/git/mfqp | 4 ++-- buildroot/share/git/mfrb | 4 ++-- 6 files changed, 35 insertions(+), 27 deletions(-) diff --git a/buildroot/share/git/mffp b/buildroot/share/git/mffp index 2663a4a137..0680b3dba5 100755 --- a/buildroot/share/git/mffp +++ b/buildroot/share/git/mffp @@ -1,19 +1,23 @@ #!/usr/bin/env bash # -# mffp [1|2|3] [commit-id] +# mffp [1|2] [ref] # # Push the given commit (or HEAD) upstream immediately. -# By default: `git push upstream HEAD:bugfix-1.1.x` +# By default: `git push upstream HEAD:bugfix-2.0.x` # -[[ $# < 3 && $1 != "-h" && $1 != "--help" ]] || { echo "usage: `basename $0` [1|2|3] [commit-id]" 1>&2 ; exit 1; } +usage() { echo "usage: `basename $0` [1|2] [ref]" 1>&2 } -if [[ $1 == '1' || $1 == '2' || $1 == '3' ]]; then +[[ $# < 3 && $1 != "-h" && $1 != "--help" ]] || { usage ; exit 1; } + +if [[ $1 == '1' || $1 == '2' ]]; then MFINFO=$(mfinfo "$1") || exit 1 REF=${2:-HEAD} -else +elif [[ $# == 1 ]]; then MFINFO=$(mfinfo) || exit 1 REF=${1:-HEAD} +else + usage fi IFS=' ' read -a INFO <<< "$MFINFO" diff --git a/buildroot/share/git/mfinfo b/buildroot/share/git/mfinfo index 0f5d79a002..0c2113d922 100755 --- a/buildroot/share/git/mfinfo +++ b/buildroot/share/git/mfinfo @@ -2,15 +2,19 @@ # # mfinfo # -# Provide the following info about the working directory: +# Print the following info about the working copy: # # - Remote (upstream) Org name (MarlinFirmware) # - Remote (origin) Org name (your Github username) # - Repo Name (Marlin, MarlinDocumentation) -# - PR Target branch (bugfix-1.1.x, bugfix-2.0.x, dev-2.1.x, etc.) +# - PR Target branch (e.g., bugfix-2.0.x) # - Branch Arg (the branch argument or current branch) # - Current Branch # +# Example output +# > mfinfo -q ongoing +# MarlinFirmware john.doe Marlin bugfix-2.0.x ongoing bugfix-2.0.x -q +# CURR=$(git branch 2>/dev/null | grep ^* | sed 's/\* //g') [[ -z $CURR ]] && { echo "No git repository here!" 1>&2 ; exit 1; } @@ -26,37 +30,37 @@ FORK=$(git remote get-url origin 2>/dev/null | sed -E 's/.*[\/:](.*)\/.*$/\1/') # Defaults if no arguments given BRANCH=$CURR -INDEX=1 +MORE="" +INDEX=2 +# Loop through arguments while [[ $# -gt 0 ]]; do + # Get an arg and maybe a val to go with it opt="$1" ; shift ; val="$1" + # Split up an arg containing = IFS='=' read -a PARTS <<<"$opt" [[ "${PARTS[1]}" != "" ]] && { EQUALS=1 ; opt="${PARTS[0]}" ; val="${PARTS[1]}" ; } - GOODVAL=1 if [[ "$val" =~ ^-{1,2}.* || ! "$opt" =~ ^-{1,2}.* ]]; then - GOODVAL=0 val="" fi case "$opt" in - -*|--*) MORE="$MORE$opt " ; [[ $EQUALS == 1 ]] && MORE="$MORE=$val" ;; - 1|2|3) INDEX=$opt ;; + -*|--*) MORE=" $MORE$opt" ; ((EQUALS)) && MORE="$MORE=$val" ;; + 1|2) INDEX=$opt ;; *) BRANCH="$opt" ;; esac done case "$REPO" in - Marlin ) TARG=bugfix-2.0.x ; [[ $INDEX == 1 ]] && TARG=bugfix-1.1.x ; [[ $INDEX == 3 ]] && TARG=dev-2.1.x ;; + Marlin ) TARG=bugfix-2.0.x ; ((INDEX == 1)) && TARG=bugfix-1.1.x ; [[ $BRANCH =~ ^[12]$ ]] && USAGE=1 ;; Configurations ) TARG=import-2.0.x ;; MarlinDocumentation ) TARG=master ;; AutoBuildMarlin ) TARG=master ;; esac -[[ $BRANCH =~ ^[123]$ ]] && USAGE=1 +[[ $USAGE == 1 ]] && { echo "usage: `basename $0` [1|2] [branch]" 1>&2 ; exit 1 ; } -[[ $USAGE == 1 ]] && { echo "usage: `basename $0` [1|2|3] [branch]" 1>&2 ; exit 1 ; } - -echo "$ORG $FORK $REPO $TARG $BRANCH $CURR $MORE" +echo "$ORG $FORK $REPO $TARG $BRANCH $CURR$MORE" diff --git a/buildroot/share/git/mfnew b/buildroot/share/git/mfnew index e491fea191..6d067a7f08 100755 --- a/buildroot/share/git/mfnew +++ b/buildroot/share/git/mfnew @@ -6,7 +6,7 @@ # usage() { - echo "usage: `basename $0` [1|2|3] [name]" 1>&2 + echo "usage: `basename $0` [1|2] [name]" 1>&2 } [[ $# < 3 && $1 != "-h" && $1 != "--help" ]] || { usage; exit 1; } @@ -19,12 +19,12 @@ BRANCH=pr_for_$TARG-$(date +"%G-%m-%d_%H.%M.%S") # BRANCH can be given as the last argument case "$#" in 1 ) case "$1" in - 1|2|3) ;; + 1|2) ;; *) BRANCH=$1 ;; esac ;; 2 ) case "$1" in - 1|2|3) BRANCH=$2 ;; + 1|2) BRANCH=$2 ;; *) usage ; exit 1 ;; esac ;; diff --git a/buildroot/share/git/mfpr b/buildroot/share/git/mfpr index b853c6929e..230bd2886c 100755 --- a/buildroot/share/git/mfpr +++ b/buildroot/share/git/mfpr @@ -1,11 +1,11 @@ #!/usr/bin/env bash # -# mfpr [1|2|3] +# mfpr [1|2] # -# Make a PR against bugfix-1.1.x or bugfix-2.0.x +# Make a PR targeted to MarlinFirmware/[repo] # -[[ $# < 2 && $1 != "-h" && $1 != "--help" ]] || { echo "usage: `basename $0` [1|2|3] [branch]" 1>&2 ; exit 1; } +[[ $# < 2 && $1 != "-h" && $1 != "--help" ]] || { echo "usage: `basename $0` [1|2] [branch]" 1>&2 ; exit 1; } MFINFO=$(mfinfo "$@") || exit 1 IFS=' ' read -a INFO <<< "$MFINFO" diff --git a/buildroot/share/git/mfqp b/buildroot/share/git/mfqp index f0c4446a21..6e36e6113a 100755 --- a/buildroot/share/git/mfqp +++ b/buildroot/share/git/mfqp @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# mfqp [1|2|3] +# mfqp [1|2] # # - git add . # - git commit --amend @@ -24,7 +24,7 @@ while [ $IND -lt ${#INFO[@]} ]; do let IND+=1 done -[[ $USAGE == 1 ]] && { echo "usage: `basename $0` [1|2|3]" 1>&2 ; exit 1 ; } +[[ $USAGE == 1 ]] && { echo "usage: `basename $0` [1|2]" 1>&2 ; exit 1 ; } [[ $FORCE != 1 && $CURR == $TARG && $REPO != "MarlinDocumentation" ]] && { echo "Don't alter the PR Target branch."; exit 1 ; } diff --git a/buildroot/share/git/mfrb b/buildroot/share/git/mfrb index 071b0b3d59..b55a34e010 100755 --- a/buildroot/share/git/mfrb +++ b/buildroot/share/git/mfrb @@ -2,7 +2,7 @@ # # mfrb # -# Do "git rebase -i" against the "target" branch (bugfix-1.1.x, bugfix-2.0.x, dev-2.1.x, or master) +# Do "git rebase -i" against the repo's "target" branch # MFINFO=$(mfinfo "$@") || exit 1 @@ -21,7 +21,7 @@ while [ $IND -lt ${#INFO[@]} ]; do let IND+=1 done -[[ $USAGE == 1 ]] && { echo "usage: `basename $0` [1|2|3]" 1>&2 ; exit 1 ; } +[[ $USAGE == 1 ]] && { echo "usage: `basename $0` [1|2]" 1>&2 ; exit 1 ; } [[ $QUICK ]] || git fetch upstream git rebase upstream/$TARG && git rebase -i upstream/$TARG From 02b6fb8025ef82c2d1290cdc1a98bc0c54f502c9 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 3 Nov 2021 07:06:31 -0500 Subject: [PATCH 097/532] =?UTF-8?q?=F0=9F=94=A8=20Script=20'mfprep'=20find?= =?UTF-8?q?s=20pending=20commits?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/git/mfprep | 64 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100755 buildroot/share/git/mfprep diff --git a/buildroot/share/git/mfprep b/buildroot/share/git/mfprep new file mode 100755 index 0000000000..7a8e05ee31 --- /dev/null +++ b/buildroot/share/git/mfprep @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +# +# mfprep tag1 [tag2] +# +# Find commits in bugfix-2.0.x not yet in 2.0.x +# + +SED=$(which gsed sed | head -n1) +SELF=`basename "$0"` + +[[ $# < 1 || $# > 2 ]] && { echo "Usage $SELF tag1 [tag2]" ; exit 1 ; } + +TAG1=$1 +TAG2=${2:-"HEAD"} + +# Validate that the required tags exist + +MTAG=`git tag | grep -e "^bf-$TAG1\$"` +[[ -n $MTAG ]] || { echo "Can't find tag bf-$TAG1" ; exit 1 ; } +MTAG=`git tag | grep -e "^$TAG1\$"` +[[ -n $MTAG ]] || { echo "Can't find tag $TAG1" ; exit 1 ; } + +# Generate log of recent commits for bugfix-2.0.x and 2.0.x + +TMPDIR=`mktemp -d` +LOGB="$TMPDIR/log-bf.txt" +LOG2="$TMPDIR/log-20x.txt" +TMPF="$TMPDIR/tmp.txt" +SCRF="$TMPDIR/update-20x.sh" + +git checkout bugfix-2.0.x +git log --pretty="[%h] %s" bf-$TAG1..$TAG2 | grep -v '\[cron\]' | $SED '1!G;h;$!d' >"$LOGB" + +git checkout 2.0.x +git log --pretty="[%h] %s" $TAG1..$TAG2 | $SED '1!G;h;$!d' >"$LOG2" || { echo "Can't find tag bf-$TAG1" ; exit 1 ; } + +# Go through commit text from 2.0.x removing all matches from the bugfix log + +cat "$LOG2" | while read line; do + #echo "... $line" + if [[ $line =~ (\(#[0-9]{5}\))$ ]]; then + PATT=${BASH_REMATCH[1]} + #echo "... $PATT" + else + PATT=$( $SED -E 's/^\[[0-9a-f]{10}\]( . )?(.+)$/\2/' <<<"$line" ) + fi + [[ -n $PATT ]] && { grep -v "$PATT" "$LOGB" >"$TMPF" ; cp "$TMPF" "$LOGB" ; } +done + +# Convert remaining commits into git commands + +echo -e "#!/usr/bin/env bash\nset -e\ngit checkout 2.0.x\n" >"$TMPF" +cat "$LOGB" | while read line; do + if [[ $line =~ ^\[([0-9a-f]{10})\]\ *(.*)$ ]]; then + CID=${BASH_REMATCH[1]} + REST=${BASH_REMATCH[2]} + echo "git cherry-pick $CID ;# $REST" >>"$TMPF" + else + echo ";# $line" >>"$TMPF" + fi +done +mv "$TMPF" "$SCRF" + +open "$TMPDIR" From fef96bb556f19bf1e132368ec0675d1d2b12634d Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 4 Nov 2021 01:00:55 +0000 Subject: [PATCH 098/532] [cron] Bump distribution date (2021-11-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 68c7d05299..e562730ae3 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 "2021-11-03" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 1e1977671b..f695d0a1b2 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 "2021-11-03" + #define STRING_DISTRIBUTION_DATE "2021-11-04" #endif /** From 399faa91b99dab0f8565396efd32f277965c93b2 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Thu, 4 Nov 2021 14:04:06 +1300 Subject: [PATCH 099/532] =?UTF-8?q?=F0=9F=93=8C=20'STOP'=20auto-assign,=20?= =?UTF-8?q?some=20Chitu=20V9=20pins=20(#22889)?= 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 | 6 ++ Marlin/src/inc/Conditionals_post.h | 70 +++++++++++++++++++++-- Marlin/src/inc/Warnings.cpp | 48 ++++++++++++++++ Marlin/src/pins/pins_postprocess.h | 23 +++++++- Marlin/src/pins/stm32f1/pins_CHITU3D_V9.h | 4 ++ 5 files changed, 143 insertions(+), 8 deletions(-) diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h index d8a15b910d..62675d1319 100644 --- a/Marlin/src/core/macros.h +++ b/Marlin/src/core/macros.h @@ -33,6 +33,12 @@ #define _AXIS(A) (A##_AXIS) +#define _XSTOP_ 0x01 +#define _YSTOP_ 0x02 +#define _ZSTOP_ 0x03 +#define _ISTOP_ 0x04 +#define _JSTOP_ 0x05 +#define _KSTOP_ 0x06 #define _XMIN_ 0x11 #define _YMIN_ 0x12 #define _ZMIN_ 0x13 diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index c8b6d504e2..8008461547 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -769,19 +769,25 @@ #define X2_MAX_ENDSTOP_INVERTING false #endif #endif - #ifndef X2_MAX_PIN + #if !defined(X2_MAX_PIN) && !defined(X2_STOP_PIN) #if X2_USE_ENDSTOP == _XMIN_ #define X2_MAX_PIN X_MIN_PIN #elif X2_USE_ENDSTOP == _XMAX_ #define X2_MAX_PIN X_MAX_PIN + #elif X2_USE_ENDSTOP == _XSTOP_ + #define X2_MAX_PIN X_STOP_PIN #elif X2_USE_ENDSTOP == _YMIN_ #define X2_MAX_PIN Y_MIN_PIN #elif X2_USE_ENDSTOP == _YMAX_ #define X2_MAX_PIN Y_MAX_PIN + #elif X2_USE_ENDSTOP == _YSTOP_ + #define X2_MAX_PIN Y_STOP_PIN #elif X2_USE_ENDSTOP == _ZMIN_ #define X2_MAX_PIN Z_MIN_PIN #elif X2_USE_ENDSTOP == _ZMAX_ #define X2_MAX_PIN Z_MAX_PIN + #elif X2_USE_ENDSTOP == _ZSTOP_ + #define X2_MAX_PIN Z_STOP_PIN #elif X2_USE_ENDSTOP == _XDIAG_ #define X2_MAX_PIN X_DIAG_PIN #elif X2_USE_ENDSTOP == _YDIAG_ @@ -827,19 +833,25 @@ #define X2_MIN_ENDSTOP_INVERTING false #endif #endif - #ifndef X2_MIN_PIN + #if !defined(X2_MIN_PIN) && !defined(X2_STOP_PIN) #if X2_USE_ENDSTOP == _XMIN_ #define X2_MIN_PIN X_MIN_PIN #elif X2_USE_ENDSTOP == _XMAX_ #define X2_MIN_PIN X_MAX_PIN + #elif X2_USE_ENDSTOP == _XSTOP_ + #define X2_MIN_PIN X_STOP_PIN #elif X2_USE_ENDSTOP == _YMIN_ #define X2_MIN_PIN Y_MIN_PIN #elif X2_USE_ENDSTOP == _YMAX_ #define X2_MIN_PIN Y_MAX_PIN + #elif X2_USE_ENDSTOP == _YSTOP_ + #define X2_MIN_PIN Y_STOP_PIN #elif X2_USE_ENDSTOP == _ZMIN_ #define X2_MIN_PIN Z_MIN_PIN #elif X2_USE_ENDSTOP == _ZMAX_ #define X2_MIN_PIN Z_MAX_PIN + #elif X2_USE_ENDSTOP == _ZSTOP_ + #define X2_MIN_PIN Z_STOP_PIN #elif X2_USE_ENDSTOP == _XDIAG_ #define X2_MIN_PIN X_DIAG_PIN #elif X2_USE_ENDSTOP == _YDIAG_ @@ -892,19 +904,25 @@ #define Y2_MAX_ENDSTOP_INVERTING false #endif #endif - #ifndef Y2_MAX_PIN + #if !defined(Y2_MAX_PIN) && !defined(Y2_STOP_PIN) #if Y2_USE_ENDSTOP == _XMIN_ #define Y2_MAX_PIN X_MIN_PIN #elif Y2_USE_ENDSTOP == _XMAX_ #define Y2_MAX_PIN X_MAX_PIN + #elif Y2_USE_ENDSTOP == _XSTOP_ + #define Y2_MAX_PIN X_STOP_PIN #elif Y2_USE_ENDSTOP == _YMIN_ #define Y2_MAX_PIN Y_MIN_PIN #elif Y2_USE_ENDSTOP == _YMAX_ #define Y2_MAX_PIN Y_MAX_PIN + #elif Y2_USE_ENDSTOP == _YSTOP_ + #define Y2_MAX_PIN Y_STOP_PIN #elif Y2_USE_ENDSTOP == _ZMIN_ #define Y2_MAX_PIN Z_MIN_PIN #elif Y2_USE_ENDSTOP == _ZMAX_ #define Y2_MAX_PIN Z_MAX_PIN + #elif Y2_USE_ENDSTOP == _ZSTOP_ + #define Y2_MAX_PIN Z_STOP_PIN #elif Y2_USE_ENDSTOP == _XDIAG_ #define Y2_MAX_PIN X_DIAG_PIN #elif Y2_USE_ENDSTOP == _YDIAG_ @@ -950,19 +968,25 @@ #define Y2_MIN_ENDSTOP_INVERTING false #endif #endif - #ifndef Y2_MIN_PIN + #if !defined(Y2_MIN_PIN) && !defined(Y2_STOP_PIN) #if Y2_USE_ENDSTOP == _XMIN_ #define Y2_MIN_PIN X_MIN_PIN #elif Y2_USE_ENDSTOP == _XMAX_ #define Y2_MIN_PIN X_MAX_PIN + #elif Y2_USE_ENDSTOP == _XSTOP_ + #define Y2_MIN_PIN X_STOP_PIN #elif Y2_USE_ENDSTOP == _YMIN_ #define Y2_MIN_PIN Y_MIN_PIN #elif Y2_USE_ENDSTOP == _YMAX_ #define Y2_MIN_PIN Y_MAX_PIN + #elif Y2_USE_ENDSTOP == _YSTOP_ + #define Y2_MIN_PIN Y_STOP_PIN #elif Y2_USE_ENDSTOP == _ZMIN_ #define Y2_MIN_PIN Z_MIN_PIN #elif Y2_USE_ENDSTOP == _ZMAX_ #define Y2_MIN_PIN Z_MAX_PIN + #elif Y2_USE_ENDSTOP == _ZSTOP_ + #define Y2_MIN_PIN Z_STOP_PIN #elif Y2_USE_ENDSTOP == _XDIAG_ #define Y2_MIN_PIN X_DIAG_PIN #elif Y2_USE_ENDSTOP == _YDIAG_ @@ -1016,19 +1040,25 @@ #define Z2_MAX_ENDSTOP_INVERTING false #endif #endif - #ifndef Z2_MAX_PIN + #if !defined(Z2_MAX_PIN) && !defined(Z2_STOP_PIN) #if Z2_USE_ENDSTOP == _XMIN_ #define Z2_MAX_PIN X_MIN_PIN #elif Z2_USE_ENDSTOP == _XMAX_ #define Z2_MAX_PIN X_MAX_PIN + #elif Z2_USE_ENDSTOP == _XSTOP_ + #define Z2_MAX_PIN X_STOP_PIN #elif Z2_USE_ENDSTOP == _YMIN_ #define Z2_MAX_PIN Y_MIN_PIN #elif Z2_USE_ENDSTOP == _YMAX_ #define Z2_MAX_PIN Y_MAX_PIN + #elif Z2_USE_ENDSTOP == _YSTOP_ + #define Z2_MAX_PIN Y_STOP_PIN #elif Z2_USE_ENDSTOP == _ZMIN_ #define Z2_MAX_PIN Z_MIN_PIN #elif Z2_USE_ENDSTOP == _ZMAX_ #define Z2_MAX_PIN Z_MAX_PIN + #elif Z2_USE_ENDSTOP == _ZSTOP_ + #define Z2_MAX_PIN Z_STOP_PIN #elif Z2_USE_ENDSTOP == _XDIAG_ #define Z2_MAX_PIN X_DIAG_PIN #elif Z2_USE_ENDSTOP == _YDIAG_ @@ -1079,14 +1109,20 @@ #define Z2_MIN_PIN X_MIN_PIN #elif Z2_USE_ENDSTOP == _XMAX_ #define Z2_MIN_PIN X_MAX_PIN + #elif Z2_USE_ENDSTOP == _XSTOP_ + #define Z2_MIN_PIN X_STOP_PIN #elif Z2_USE_ENDSTOP == _YMIN_ #define Z2_MIN_PIN Y_MIN_PIN #elif Z2_USE_ENDSTOP == _YMAX_ #define Z2_MIN_PIN Y_MAX_PIN + #elif Z2_USE_ENDSTOP == _YSTOP_ + #define Z2_MIN_PIN Y_STOP_PIN #elif Z2_USE_ENDSTOP == _ZMIN_ #define Z2_MIN_PIN Z_MIN_PIN #elif Z2_USE_ENDSTOP == _ZMAX_ #define Z2_MIN_PIN Z_MAX_PIN + #elif Z2_USE_ENDSTOP == _ZSTOP_ + #define Z2_MIN_PIN Z_STOP_PIN #elif Z2_USE_ENDSTOP == _XDIAG_ #define Z2_MIN_PIN X_DIAG_PIN #elif Z2_USE_ENDSTOP == _YDIAG_ @@ -1140,14 +1176,20 @@ #define Z3_MAX_PIN X_MIN_PIN #elif Z3_USE_ENDSTOP == _XMAX_ #define Z3_MAX_PIN X_MAX_PIN + #elif Z3_USE_ENDSTOP == _XSTOP_ + #define Z3_MAX_PIN X_STOP_PIN #elif Z3_USE_ENDSTOP == _YMIN_ #define Z3_MAX_PIN Y_MIN_PIN #elif Z3_USE_ENDSTOP == _YMAX_ #define Z3_MAX_PIN Y_MAX_PIN + #elif Z3_USE_ENDSTOP == _YSTOP_ + #define Z3_MAX_PIN Y_STOP_PIN #elif Z3_USE_ENDSTOP == _ZMIN_ #define Z3_MAX_PIN Z_MIN_PIN #elif Z3_USE_ENDSTOP == _ZMAX_ #define Z3_MAX_PIN Z_MAX_PIN + #elif Z3_USE_ENDSTOP == _ZSTOP_ + #define Z3_MAX_PIN Z_STOP_PIN #elif Z3_USE_ENDSTOP == _XDIAG_ #define Z3_MAX_PIN X_DIAG_PIN #elif Z3_USE_ENDSTOP == _YDIAG_ @@ -1198,14 +1240,20 @@ #define Z3_MIN_PIN X_MIN_PIN #elif Z3_USE_ENDSTOP == _XMAX_ #define Z3_MIN_PIN X_MAX_PIN + #elif Z3_USE_ENDSTOP == _XSTOP_ + #define Z3_MIN_PIN X_STOP_PIN #elif Z3_USE_ENDSTOP == _YMIN_ #define Z3_MIN_PIN Y_MIN_PIN #elif Z3_USE_ENDSTOP == _YMAX_ #define Z3_MIN_PIN Y_MAX_PIN + #elif Z3_USE_ENDSTOP == _YSTOP_ + #define Z3_MIN_PIN Y_STOP_PIN #elif Z3_USE_ENDSTOP == _ZMIN_ #define Z3_MIN_PIN Z_MIN_PIN #elif Z3_USE_ENDSTOP == _ZMAX_ #define Z3_MIN_PIN Z_MAX_PIN + #elif Z3_USE_ENDSTOP == _ZSTOP_ + #define Z3_MIN_PIN Z_STOP_PIN #elif Z3_USE_ENDSTOP == _XDIAG_ #define Z3_MIN_PIN X_DIAG_PIN #elif Z3_USE_ENDSTOP == _YDIAG_ @@ -1260,14 +1308,20 @@ #define Z4_MAX_PIN X_MIN_PIN #elif Z4_USE_ENDSTOP == _XMAX_ #define Z4_MAX_PIN X_MAX_PIN + #elif Z4_USE_ENDSTOP == _XSTOP_ + #define Z4_MAX_PIN X_STOP_PIN #elif Z4_USE_ENDSTOP == _YMIN_ #define Z4_MAX_PIN Y_MIN_PIN #elif Z4_USE_ENDSTOP == _YMAX_ #define Z4_MAX_PIN Y_MAX_PIN + #elif Z4_USE_ENDSTOP == _YSTOP_ + #define Z4_MAX_PIN Y_STOP_PIN #elif Z4_USE_ENDSTOP == _ZMIN_ #define Z4_MAX_PIN Z_MIN_PIN #elif Z4_USE_ENDSTOP == _ZMAX_ #define Z4_MAX_PIN Z_MAX_PIN + #elif Z4_USE_ENDSTOP == _ZSTOP_ + #define Z4_MAX_PIN Z_STOP_PIN #elif Z4_USE_ENDSTOP == _XDIAG_ #define Z4_MAX_PIN X_DIAG_PIN #elif Z4_USE_ENDSTOP == _YDIAG_ @@ -1318,14 +1372,20 @@ #define Z4_MIN_PIN X_MIN_PIN #elif Z4_USE_ENDSTOP == _XMAX_ #define Z4_MIN_PIN X_MAX_PIN + #elif Z4_USE_ENDSTOP == _XSTOP_ + #define Z4_MIN_PIN X_STOP_PIN #elif Z4_USE_ENDSTOP == _YMIN_ #define Z4_MIN_PIN Y_MIN_PIN #elif Z4_USE_ENDSTOP == _YMAX_ #define Z4_MIN_PIN Y_MAX_PIN + #elif Z4_USE_ENDSTOP == _YSTOP_ + #define Z4_MIN_PIN Y_STOP_PIN #elif Z4_USE_ENDSTOP == _ZMIN_ #define Z4_MIN_PIN Z_MIN_PIN #elif Z4_USE_ENDSTOP == _ZMAX_ #define Z4_MIN_PIN Z_MAX_PIN + #elif Z4_USE_ENDSTOP == _ZSTOP_ + #define Z4_MIN_PIN Z_STOP_PIN #elif Z4_USE_ENDSTOP == _XDIAG_ #define Z4_MIN_PIN X_DIAG_PIN #elif Z4_USE_ENDSTOP == _YDIAG_ diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index 2510949010..1976c09581 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -79,14 +79,20 @@ #warning "Auto-assigned X2_DIAG_PIN to X_MIN_PIN." #elif X2_USE_ENDSTOP == _XMAX_ #warning "Auto-assigned X2_DIAG_PIN to X_MAX_PIN." + #elif X2_USE_ENDSTOP == _XSTOP_ + #warning "Auto-assigned X2_DIAG_PIN to X_STOP_PIN." #elif X2_USE_ENDSTOP == _YMIN_ #warning "Auto-assigned X2_DIAG_PIN to Y_MIN_PIN." #elif X2_USE_ENDSTOP == _YMAX_ #warning "Auto-assigned X2_DIAG_PIN to Y_MAX_PIN." + #elif X2_USE_ENDSTOP == _YSTOP_ + #warning "Auto-assigned X2_DIAG_PIN to Y_STOP_PIN." #elif X2_USE_ENDSTOP == _ZMIN_ #warning "Auto-assigned X2_DIAG_PIN to Z_MIN_PIN." #elif X2_USE_ENDSTOP == _ZMAX_ #warning "Auto-assigned X2_DIAG_PIN to Z_MAX_PIN." + #elif X2_USE_ENDSTOP == _ZSTOP_ + #warning "Auto-assigned X2_DIAG_PIN to Z_STOP_PIN." #elif X2_USE_ENDSTOP == _XDIAG_ #warning "Auto-assigned X2_DIAG_PIN to X_DIAG_PIN." #elif X2_USE_ENDSTOP == _YDIAG_ @@ -131,14 +137,20 @@ #warning "Auto-assigned Y2_DIAG_PIN to X_MIN_PIN." #elif Y2_USE_ENDSTOP == _XMAX_ #warning "Auto-assigned Y2_DIAG_PIN to X_MAX_PIN." + #elif Y2_USE_ENDSTOP == _XSTOP_ + #warning "Auto-assigned Y2_DIAG_PIN to X_STOP_PIN." #elif Y2_USE_ENDSTOP == _YMIN_ #warning "Auto-assigned Y2_DIAG_PIN to Y_MIN_PIN." #elif Y2_USE_ENDSTOP == _YMAX_ #warning "Auto-assigned Y2_DIAG_PIN to Y_MAX_PIN." + #elif Y2_USE_ENDSTOP == _YSTOP_ + #warning "Auto-assigned Y2_DIAG_PIN to Y_STOP_PIN." #elif Y2_USE_ENDSTOP == _ZMIN_ #warning "Auto-assigned Y2_DIAG_PIN to Z_MIN_PIN." #elif Y2_USE_ENDSTOP == _ZMAX_ #warning "Auto-assigned Y2_DIAG_PIN to Z_MAX_PIN." + #elif Y2_USE_ENDSTOP == _ZSTOP_ + #warning "Auto-assigned Y2_DIAG_PIN to Z_STOP_PIN." #elif Y2_USE_ENDSTOP == _XDIAG_ #warning "Auto-assigned Y2_DIAG_PIN to X_DIAG_PIN." #elif Y2_USE_ENDSTOP == _YDIAG_ @@ -183,14 +195,20 @@ #warning "Auto-assigned Z2_DIAG_PIN to X_MIN_PIN." #elif Z2_USE_ENDSTOP == _XMAX_ #warning "Auto-assigned Z2_DIAG_PIN to X_MAX_PIN." + #elif Z2_USE_ENDSTOP == _XSTOP_ + #warning "Auto-assigned Z2_DIAG_PIN to X_STOP_PIN." #elif Z2_USE_ENDSTOP == _YMIN_ #warning "Auto-assigned Z2_DIAG_PIN to Y_MIN_PIN." #elif Z2_USE_ENDSTOP == _YMAX_ #warning "Auto-assigned Z2_DIAG_PIN to Y_MAX_PIN." + #elif Z2_USE_ENDSTOP == _YSTOP_ + #warning "Auto-assigned Z2_DIAG_PIN to Y_STOP_PIN." #elif Z2_USE_ENDSTOP == _ZMIN_ #warning "Auto-assigned Z2_DIAG_PIN to Z_MIN_PIN." #elif Z2_USE_ENDSTOP == _ZMAX_ #warning "Auto-assigned Z2_DIAG_PIN to Z_MAX_PIN." + #elif Z2_USE_ENDSTOP == _ZSTOP_ + #warning "Auto-assigned Z2_DIAG_PIN to Z_STOP_PIN." #elif Z2_USE_ENDSTOP == _XDIAG_ #warning "Auto-assigned Z2_DIAG_PIN to X_DIAG_PIN." #elif Z2_USE_ENDSTOP == _YDIAG_ @@ -235,14 +253,20 @@ #warning "Auto-assigned Z3_DIAG_PIN to X_MIN_PIN." #elif Z3_USE_ENDSTOP == _XMAX_ #warning "Auto-assigned Z3_DIAG_PIN to X_MAX_PIN." + #elif Z3_USE_ENDSTOP == _XSTOP_ + #warning "Auto-assigned Z3_DIAG_PIN to X_STOP_PIN." #elif Z3_USE_ENDSTOP == _YMIN_ #warning "Auto-assigned Z3_DIAG_PIN to Y_MIN_PIN." #elif Z3_USE_ENDSTOP == _YMAX_ #warning "Auto-assigned Z3_DIAG_PIN to Y_MAX_PIN." + #elif Z3_USE_ENDSTOP == _YSTOP_ + #warning "Auto-assigned Z3_DIAG_PIN to Y_STOP_PIN." #elif Z3_USE_ENDSTOP == _ZMIN_ #warning "Auto-assigned Z3_DIAG_PIN to Z_MIN_PIN." #elif Z3_USE_ENDSTOP == _ZMAX_ #warning "Auto-assigned Z3_DIAG_PIN to Z_MAX_PIN." + #elif Z3_USE_ENDSTOP == _ZSTOP_ + #warning "Auto-assigned Z3_DIAG_PIN to Z_STOP_PIN." #elif Z3_USE_ENDSTOP == _XDIAG_ #warning "Auto-assigned Z3_DIAG_PIN to X_DIAG_PIN." #elif Z3_USE_ENDSTOP == _YDIAG_ @@ -287,14 +311,20 @@ #warning "Auto-assigned Z4_DIAG_PIN to X_MIN_PIN." #elif Z4_USE_ENDSTOP == _XMAX_ #warning "Auto-assigned Z4_DIAG_PIN to X_MAX_PIN." + #elif Z4_USE_ENDSTOP == _XSTOP_ + #warning "Auto-assigned Z4_DIAG_PIN to X_STOP_PIN." #elif Z4_USE_ENDSTOP == _YMIN_ #warning "Auto-assigned Z4_DIAG_PIN to Y_MIN_PIN." #elif Z4_USE_ENDSTOP == _YMAX_ #warning "Auto-assigned Z4_DIAG_PIN to Y_MAX_PIN." + #elif Z4_USE_ENDSTOP == _YSTOP_ + #warning "Auto-assigned Z4_DIAG_PIN to Y_STOP_PIN." #elif Z4_USE_ENDSTOP == _ZMIN_ #warning "Auto-assigned Z4_DIAG_PIN to Z_MIN_PIN." #elif Z4_USE_ENDSTOP == _ZMAX_ #warning "Auto-assigned Z4_DIAG_PIN to Z_MAX_PIN." + #elif Z4_USE_ENDSTOP == _ZSTOP_ + #warning "Auto-assigned Z4_DIAG_PIN to Z_STOP_PIN." #elif Z4_USE_ENDSTOP == _XDIAG_ #warning "Auto-assigned Z4_DIAG_PIN to X_DIAG_PIN." #elif Z4_USE_ENDSTOP == _YDIAG_ @@ -339,14 +369,20 @@ #warning "Auto-assigned I_DIAG_PIN to X_MIN_PIN." #elif I_USE_ENDSTOP == _XMAX_ #warning "Auto-assigned I_DIAG_PIN to X_MAX_PIN." + #elif I_USE_ENDSTOP == _XSTOP_ + #warning "Auto-assigned I_DIAG_PIN to X_STOP_PIN." #elif I_USE_ENDSTOP == _YMIN_ #warning "Auto-assigned I_DIAG_PIN to Y_MIN_PIN." #elif I_USE_ENDSTOP == _YMAX_ #warning "Auto-assigned I_DIAG_PIN to Y_MAX_PIN." + #elif I_USE_ENDSTOP == _YSTOP_ + #warning "Auto-assigned I_DIAG_PIN to Y_STOP_PIN." #elif I_USE_ENDSTOP == _ZMIN_ #warning "Auto-assigned I_DIAG_PIN to Z_MIN_PIN." #elif I_USE_ENDSTOP == _ZMAX_ #warning "Auto-assigned I_DIAG_PIN to Z_MAX_PIN." + #elif I_USE_ENDSTOP == _ZSTOP_ + #warning "Auto-assigned I_DIAG_PIN to Z_STOP_PIN." #elif I_USE_ENDSTOP == _XDIAG_ #warning "Auto-assigned I_DIAG_PIN to X_DIAG_PIN." #elif I_USE_ENDSTOP == _YDIAG_ @@ -391,14 +427,20 @@ #warning "Auto-assigned J_DIAG_PIN to X_MIN_PIN." #elif J_USE_ENDSTOP == _XMAX_ #warning "Auto-assigned J_DIAG_PIN to X_MAX_PIN." + #elif J_USE_ENDSTOP == _XSTOP_ + #warning "Auto-assigned J_DIAG_PIN to X_STOP_PIN." #elif J_USE_ENDSTOP == _YMIN_ #warning "Auto-assigned J_DIAG_PIN to Y_MIN_PIN." #elif J_USE_ENDSTOP == _YMAX_ #warning "Auto-assigned J_DIAG_PIN to Y_MAX_PIN." + #elif J_USE_ENDSTOP == _YSTOP_ + #warning "Auto-assigned J_DIAG_PIN to Y_STOP_PIN." #elif J_USE_ENDSTOP == _ZMIN_ #warning "Auto-assigned J_DIAG_PIN to Z_MIN_PIN." #elif J_USE_ENDSTOP == _ZMAX_ #warning "Auto-assigned J_DIAG_PIN to Z_MAX_PIN." + #elif J_USE_ENDSTOP == _ZSTOP_ + #warning "Auto-assigned J_DIAG_PIN to Z_STOP_PIN." #elif J_USE_ENDSTOP == _XDIAG_ #warning "Auto-assigned J_DIAG_PIN to X_DIAG_PIN." #elif J_USE_ENDSTOP == _YDIAG_ @@ -443,14 +485,20 @@ #warning "Auto-assigned K_DIAG_PIN to X_MIN_PIN." #elif K_USE_ENDSTOP == _XMAX_ #warning "Auto-assigned K_DIAG_PIN to X_MAX_PIN." + #elif K_USE_ENDSTOP == _XSTOP_ + #warning "Auto-assigned K_DIAG_PIN to X_STOP_PIN." #elif K_USE_ENDSTOP == _YMIN_ #warning "Auto-assigned K_DIAG_PIN to Y_MIN_PIN." #elif K_USE_ENDSTOP == _YMAX_ #warning "Auto-assigned K_DIAG_PIN to Y_MAX_PIN." + #elif K_USE_ENDSTOP == _YSTOP_ + #warning "Auto-assigned K_DIAG_PIN to Y_STOP_PIN." #elif K_USE_ENDSTOP == _ZMIN_ #warning "Auto-assigned K_DIAG_PIN to Z_MIN_PIN." #elif K_USE_ENDSTOP == _ZMAX_ #warning "Auto-assigned K_DIAG_PIN to Z_MAX_PIN." + #elif K_USE_ENDSTOP == _ZSTOP_ + #warning "Auto-assigned K_DIAG_PIN to Z_STOP_PIN." #elif K_USE_ENDSTOP == _XDIAG_ #warning "Auto-assigned K_DIAG_PIN to X_DIAG_PIN." #elif K_USE_ENDSTOP == _YDIAG_ diff --git a/Marlin/src/pins/pins_postprocess.h b/Marlin/src/pins/pins_postprocess.h index d1047db0d7..1e6703fd4a 100644 --- a/Marlin/src/pins/pins_postprocess.h +++ b/Marlin/src/pins/pins_postprocess.h @@ -419,6 +419,9 @@ #else #define X_STOP_PIN X_MAX_PIN #endif +#if !defined(X2_USE_ENDSTOP) && ENABLED(X_DUAL_ENDSTOPS) && PIN_EXISTS(X_STOP) + #define X2_USE_ENDSTOP _XSTOP_ +#endif #if HAS_Y_AXIS #ifdef Y_STOP_PIN @@ -438,6 +441,9 @@ #else #define Y_STOP_PIN Y_MAX_PIN #endif + #if !defined(Y2_USE_ENDSTOP) && ENABLED(Y_DUAL_ENDSTOPS) && PIN_EXISTS(Y_STOP) + #define Y2_USE_ENDSTOP _YSTOP_ + #endif #endif #if HAS_Z_AXIS @@ -458,6 +464,17 @@ #else #define Z_STOP_PIN Z_MAX_PIN #endif + #if ENABLED(Z_MULTI_ENDSTOPS) && PIN_EXISTS(Z_STOP) + #ifndef Z2_USE_ENDSTOP + #define Z2_USE_ENDSTOP _ZSTOP_ + #endif + #if NUM_Z_STEPPER_DRIVERS >= 3 && !defined(Z3_USE_ENDSTOP) + #define Z3_USE_ENDSTOP _ZSTOP_ + #endif + #if NUM_Z_STEPPER_DRIVERS >= 4 && !defined(Z4_USE_ENDSTOP) + #define Z4_USE_ENDSTOP _ZSTOP_ + #endif + #endif #endif #if LINEAR_AXES >= 4 @@ -801,7 +818,7 @@ #endif #endif // Auto-assign pins for stallGuard sensorless homing - #if !defined(Z2_DIAG_PIN) && !defined(Z2_USE_ENDSTOP) && defined(Z2_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 2 && _PEXI(Z2_E_INDEX, DIAG) + #if !defined(Z2_DIAG_PIN) && !defined(Z2_USE_ENDSTOP) && defined(Z2_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && _PEXI(Z2_E_INDEX, DIAG) #define Z2_DIAG_PIN _EPIN(Z2_E_INDEX, DIAG) #if DIAG_REMAPPED(Z2, X_MIN) #define Z2_USE_ENDSTOP _XMIN_ @@ -886,7 +903,7 @@ #endif #endif // Auto-assign pins for stallGuard sensorless homing - #if !defined(Z3_DIAG_PIN) && !defined(Z3_USE_ENDSTOP) && defined(Z3_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 3 && _PEXI(Z3_E_INDEX, DIAG) + #if !defined(Z3_DIAG_PIN) && !defined(Z3_USE_ENDSTOP) && defined(Z3_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && _PEXI(Z3_E_INDEX, DIAG) #define Z3_DIAG_PIN _EPIN(Z3_E_INDEX, DIAG) #if DIAG_REMAPPED(Z3, X_MIN) #define Z3_USE_ENDSTOP _XMIN_ @@ -971,7 +988,7 @@ #endif #endif // Auto-assign pins for stallGuard sensorless homing - #if !defined(Z4_DIAG_PIN) && !defined(Z4_USE_ENDSTOP) && defined(Z4_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 4 && _PEXI(Z4_E_INDEX, DIAG) + #if !defined(Z4_DIAG_PIN) && !defined(Z4_USE_ENDSTOP) && defined(Z4_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && _PEXI(Z4_E_INDEX, DIAG) #define Z4_DIAG_PIN _EPIN(Z4_E_INDEX, DIAG) #if DIAG_REMAPPED(Z4, X_MIN) #define Z4_USE_ENDSTOP _XMIN_ diff --git a/Marlin/src/pins/stm32f1/pins_CHITU3D_V9.h b/Marlin/src/pins/stm32f1/pins_CHITU3D_V9.h index eb7f91deab..0d02e1d5d9 100755 --- a/Marlin/src/pins/stm32f1/pins_CHITU3D_V9.h +++ b/Marlin/src/pins/stm32f1/pins_CHITU3D_V9.h @@ -28,7 +28,11 @@ #define Z2_ENABLE_PIN PF3 #define Z2_STEP_PIN PF5 #define Z2_DIR_PIN PF1 +#define Z2_STOP_PIN PA13 +#ifndef Z_MIN_PROBE_PIN + #define Z_MIN_PROBE_PIN PG9 +#endif #ifndef FIL_RUNOUT2_PIN #define FIL_RUNOUT2_PIN PF13 #endif From 4483b8aaf023576ea1c8ecfa84e7093ec26ad75a Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Thu, 4 Nov 2021 17:28:42 +0700 Subject: [PATCH 100/532] =?UTF-8?q?=F0=9F=94=A8=20Fix=20IntelliSense=20/?= =?UTF-8?q?=20PIO=20conflicts=20(#23058)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/HAL/DUE/upload_extra_script.py | 19 +- Marlin/src/HAL/LPC1768/upload_extra_script.py | 200 +++--- Marlin/src/HAL/STM32F1/build_flags.py | 30 +- .../scripts/SAMD51_grandcentral_m4.py | 24 +- .../scripts/STM32F103RC_MEEB_3DP.py | 61 +- .../PlatformIO/scripts/STM32F103RC_fysetc.py | 43 +- .../scripts/STM32F1_create_variant.py | 40 +- .../share/PlatformIO/scripts/add_nanolib.py | 1 + .../share/PlatformIO/scripts/chitu_crypt.py | 167 ++--- .../PlatformIO/scripts/common-cxxflags.py | 60 +- .../scripts/common-dependencies-post.py | 22 +- .../PlatformIO/scripts/common-dependencies.py | 577 +++++++++--------- .../share/PlatformIO/scripts/custom_board.py | 20 +- .../PlatformIO/scripts/download_mks_assets.py | 84 ++- .../scripts/fix_framework_weakness.py | 47 +- .../scripts/generic_create_variant.py | 76 +-- .../jgaurora_a5s_a1_with_bootloader.py | 67 +- buildroot/share/PlatformIO/scripts/lerdge.py | 70 +-- buildroot/share/PlatformIO/scripts/marlin.py | 16 +- .../share/PlatformIO/scripts/mks_robin.py | 2 +- .../share/PlatformIO/scripts/mks_robin_e3.py | 2 +- .../share/PlatformIO/scripts/mks_robin_e3p.py | 2 +- .../PlatformIO/scripts/mks_robin_lite.py | 2 +- .../PlatformIO/scripts/mks_robin_lite3.py | 2 +- .../PlatformIO/scripts/mks_robin_mini.py | 2 +- .../PlatformIO/scripts/mks_robin_nano.py | 2 +- .../PlatformIO/scripts/mks_robin_nano35.py | 2 +- .../share/PlatformIO/scripts/mks_robin_pro.py | 2 +- .../PlatformIO/scripts/offset_and_rename.py | 80 +-- buildroot/share/PlatformIO/scripts/openblt.py | 28 +- buildroot/share/PlatformIO/scripts/pioutil.py | 8 +- .../PlatformIO/scripts/preflight-checks.py | 165 +++-- .../share/PlatformIO/scripts/random-bin.py | 10 +- buildroot/share/PlatformIO/scripts/robin.py | 16 +- .../share/PlatformIO/scripts/simulator.py | 68 ++- .../PlatformIO/scripts/stm32_serialbuffer.py | 98 +-- ini/stm32f1-maple.ini | 1 - 37 files changed, 1075 insertions(+), 1041 deletions(-) diff --git a/Marlin/src/HAL/DUE/upload_extra_script.py b/Marlin/src/HAL/DUE/upload_extra_script.py index d52a0a3642..4f7a494512 100644 --- a/Marlin/src/HAL/DUE/upload_extra_script.py +++ b/Marlin/src/HAL/DUE/upload_extra_script.py @@ -4,15 +4,16 @@ # Windows: bossac.exe # Other: leave unchanged # +import pioutil +if pioutil.is_pio_build(): + import platform + current_OS = platform.system() -import platform -current_OS = platform.system() + if current_OS == 'Windows': -if current_OS == 'Windows': + Import("env") - Import("env") - - # Use bossac.exe on Windows - env.Replace( - UPLOADCMD="bossac --info --unlock --write --verify --reset --erase -U false --boot $SOURCE" - ) + # Use bossac.exe on Windows + env.Replace( + UPLOADCMD="bossac --info --unlock --write --verify --reset --erase -U false --boot $SOURCE" + ) diff --git a/Marlin/src/HAL/LPC1768/upload_extra_script.py b/Marlin/src/HAL/LPC1768/upload_extra_script.py index fb3aaef7cd..7975f151f7 100755 --- a/Marlin/src/HAL/LPC1768/upload_extra_script.py +++ b/Marlin/src/HAL/LPC1768/upload_extra_script.py @@ -1,123 +1,127 @@ # -# sets output_port +# upload_extra_script.py +# set the output_port # if target_filename is found then that drive is used # else if target_drive is found then that drive is used # from __future__ import print_function -target_filename = "FIRMWARE.CUR" -target_drive = "REARM" +import pioutil +if pioutil.is_pio_build(): -import os,getpass,platform + target_filename = "FIRMWARE.CUR" + target_drive = "REARM" -current_OS = platform.system() -Import("env") + import os,getpass,platform -def print_error(e): - print('\nUnable to find destination disk (%s)\n' \ - 'Please select it in platformio.ini using the upload_port keyword ' \ - '(https://docs.platformio.org/en/latest/projectconf/section_env_upload.html) ' \ - 'or copy the firmware (.pio/build/%s/firmware.bin) manually to the appropriate disk\n' \ - %(e, env.get('PIOENV'))) + current_OS = platform.system() + Import("env") -def before_upload(source, target, env): - try: - # - # Find a disk for upload - # - upload_disk = 'Disk not found' - target_file_found = False - target_drive_found = False - if current_OS == 'Windows': + def print_error(e): + print('\nUnable to find destination disk (%s)\n' \ + 'Please select it in platformio.ini using the upload_port keyword ' \ + '(https://docs.platformio.org/en/latest/projectconf/section_env_upload.html) ' \ + 'or copy the firmware (.pio/build/%s/firmware.bin) manually to the appropriate disk\n' \ + %(e, env.get('PIOENV'))) + + def before_upload(source, target, env): + try: # - # platformio.ini will accept this for a Windows upload port designation: 'upload_port = L:' - # Windows - doesn't care about the disk's name, only cares about the drive letter - import subprocess,string - from ctypes import windll + # Find a disk for upload + # + upload_disk = 'Disk not found' + target_file_found = False + target_drive_found = False + if current_OS == 'Windows': + # + # platformio.ini will accept this for a Windows upload port designation: 'upload_port = L:' + # Windows - doesn't care about the disk's name, only cares about the drive letter + import subprocess,string + from ctypes import windll - # getting list of drives - # https://stackoverflow.com/questions/827371/is-there-a-way-to-list-all-the-available-drive-letters-in-python - drives = [] - bitmask = windll.kernel32.GetLogicalDrives() - for letter in string.ascii_uppercase: - if bitmask & 1: - drives.append(letter) - bitmask >>= 1 + # getting list of drives + # https://stackoverflow.com/questions/827371/is-there-a-way-to-list-all-the-available-drive-letters-in-python + drives = [] + bitmask = windll.kernel32.GetLogicalDrives() + for letter in string.ascii_uppercase: + if bitmask & 1: + drives.append(letter) + bitmask >>= 1 - for drive in drives: - final_drive_name = drive + ':\\' - # print ('disc check: {}'.format(final_drive_name)) - try: - volume_info = str(subprocess.check_output('cmd /C dir ' + final_drive_name, stderr=subprocess.STDOUT)) - except Exception as e: - print ('error:{}'.format(e)) - continue - else: - if target_drive in volume_info and not target_file_found: # set upload if not found target file yet - target_drive_found = True - upload_disk = final_drive_name - if target_filename in volume_info: - if not target_file_found: + for drive in drives: + final_drive_name = drive + ':\\' + # print ('disc check: {}'.format(final_drive_name)) + try: + volume_info = str(subprocess.check_output('cmd /C dir ' + final_drive_name, stderr=subprocess.STDOUT)) + except Exception as e: + print ('error:{}'.format(e)) + continue + else: + if target_drive in volume_info and not target_file_found: # set upload if not found target file yet + target_drive_found = True upload_disk = final_drive_name - target_file_found = True + if target_filename in volume_info: + if not target_file_found: + upload_disk = final_drive_name + target_file_found = True - elif current_OS == 'Linux': - # - # platformio.ini will accept this for a Linux upload port designation: 'upload_port = /media/media_name/drive' - # - drives = os.listdir(os.path.join(os.sep, 'media', getpass.getuser())) - if target_drive in drives: # If target drive is found, use it. - target_drive_found = True - upload_disk = os.path.join(os.sep, 'media', getpass.getuser(), target_drive) + os.sep - else: + elif current_OS == 'Linux': + # + # platformio.ini will accept this for a Linux upload port designation: 'upload_port = /media/media_name/drive' + # + drives = os.listdir(os.path.join(os.sep, 'media', getpass.getuser())) + if target_drive in drives: # If target drive is found, use it. + target_drive_found = True + upload_disk = os.path.join(os.sep, 'media', getpass.getuser(), target_drive) + os.sep + else: + for drive in drives: + try: + files = os.listdir(os.path.join(os.sep, 'media', getpass.getuser(), drive)) + except: + continue + else: + if target_filename in files: + upload_disk = os.path.join(os.sep, 'media', getpass.getuser(), drive) + os.sep + target_file_found = True + break + # + # set upload_port to drive if found + # + + if target_file_found or target_drive_found: + env.Replace( + UPLOAD_FLAGS="-P$UPLOAD_PORT" + ) + + elif current_OS == 'Darwin': # MAC + # + # platformio.ini will accept this for a OSX upload port designation: 'upload_port = /media/media_name/drive' + # + drives = os.listdir('/Volumes') # human readable names + if target_drive in drives and not target_file_found: # set upload if not found target file yet + target_drive_found = True + upload_disk = '/Volumes/' + target_drive + '/' for drive in drives: try: - files = os.listdir(os.path.join(os.sep, 'media', getpass.getuser(), drive)) + filenames = os.listdir('/Volumes/' + drive + '/') # will get an error if the drive is protected except: continue else: - if target_filename in files: - upload_disk = os.path.join(os.sep, 'media', getpass.getuser(), drive) + os.sep + if target_filename in filenames: + if not target_file_found: + upload_disk = '/Volumes/' + drive + '/' target_file_found = True - break - # - # set upload_port to drive if found - # + # + # Set upload_port to drive if found + # if target_file_found or target_drive_found: - env.Replace( - UPLOAD_FLAGS="-P$UPLOAD_PORT" - ) + env.Replace(UPLOAD_PORT=upload_disk) + print('\nUpload disk: ', upload_disk, '\n') + else: + print_error('Autodetect Error') - elif current_OS == 'Darwin': # MAC - # - # platformio.ini will accept this for a OSX upload port designation: 'upload_port = /media/media_name/drive' - # - drives = os.listdir('/Volumes') # human readable names - if target_drive in drives and not target_file_found: # set upload if not found target file yet - target_drive_found = True - upload_disk = '/Volumes/' + target_drive + '/' - for drive in drives: - try: - filenames = os.listdir('/Volumes/' + drive + '/') # will get an error if the drive is protected - except: - continue - else: - if target_filename in filenames: - if not target_file_found: - upload_disk = '/Volumes/' + drive + '/' - target_file_found = True + except Exception as e: + print_error(str(e)) - # - # Set upload_port to drive if found - # - if target_file_found or target_drive_found: - env.Replace(UPLOAD_PORT=upload_disk) - print('\nUpload disk: ', upload_disk, '\n') - else: - print_error('Autodetect Error') - - except Exception as e: - print_error(str(e)) - -env.AddPreAction("upload", before_upload) + env.AddPreAction("upload", before_upload) diff --git a/Marlin/src/HAL/STM32F1/build_flags.py b/Marlin/src/HAL/STM32F1/build_flags.py index d0848d1c64..970ca8b767 100755 --- a/Marlin/src/HAL/STM32F1/build_flags.py +++ b/Marlin/src/HAL/STM32F1/build_flags.py @@ -30,25 +30,27 @@ if __name__ == "__main__": # extra script for linker options else: - from SCons.Script import DefaultEnvironment - env = DefaultEnvironment() - env.Append( + import pioutil + if pioutil.is_pio_build(): + from SCons.Script import DefaultEnvironment + env = DefaultEnvironment() + env.Append( ARFLAGS=["rcs"], ASFLAGS=["-x", "assembler-with-cpp"], CXXFLAGS=[ - "-fabi-version=0", - "-fno-use-cxa-atexit", - "-fno-threadsafe-statics" + "-fabi-version=0", + "-fno-use-cxa-atexit", + "-fno-threadsafe-statics" ], LINKFLAGS=[ - "-Os", - "-mcpu=cortex-m3", - "-ffreestanding", - "-mthumb", - "--specs=nano.specs", - "--specs=nosys.specs", - "-u_printf_float", + "-Os", + "-mcpu=cortex-m3", + "-ffreestanding", + "-mthumb", + "--specs=nano.specs", + "--specs=nosys.specs", + "-u_printf_float", ], - ) + ) diff --git a/buildroot/share/PlatformIO/scripts/SAMD51_grandcentral_m4.py b/buildroot/share/PlatformIO/scripts/SAMD51_grandcentral_m4.py index 9e37024d11..be2c87266a 100644 --- a/buildroot/share/PlatformIO/scripts/SAMD51_grandcentral_m4.py +++ b/buildroot/share/PlatformIO/scripts/SAMD51_grandcentral_m4.py @@ -2,18 +2,20 @@ # SAMD51_grandcentral_m4.py # Customizations for env:SAMD51_grandcentral_m4 # -from os.path import join, isfile -import shutil -from pprint import pprint +import pioutil +if pioutil.is_pio_build(): + from os.path import join, isfile + import shutil + from pprint import pprint -Import("env") + Import("env") -mf = env["MARLIN_FEATURES"] -rxBuf = mf["RX_BUFFER_SIZE"] if "RX_BUFFER_SIZE" in mf else "0" -txBuf = mf["TX_BUFFER_SIZE"] if "TX_BUFFER_SIZE" in mf else "0" + mf = env["MARLIN_FEATURES"] + rxBuf = mf["RX_BUFFER_SIZE"] if "RX_BUFFER_SIZE" in mf else "0" + txBuf = mf["TX_BUFFER_SIZE"] if "TX_BUFFER_SIZE" in mf else "0" -serialBuf = str(max(int(rxBuf), int(txBuf), 350)) + serialBuf = str(max(int(rxBuf), int(txBuf), 350)) -build_flags = env.get('BUILD_FLAGS') -build_flags.append("-DSERIAL_BUFFER_SIZE=" + serialBuf) -env.Replace(BUILD_FLAGS=build_flags) + build_flags = env.get('BUILD_FLAGS') + build_flags.append("-DSERIAL_BUFFER_SIZE=" + serialBuf) + env.Replace(BUILD_FLAGS=build_flags) diff --git a/buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py b/buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py index e059d44578..eccee76068 100644 --- a/buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py +++ b/buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py @@ -1,40 +1,43 @@ # -# buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py +# STM32F103RC_MEEB_3DP.py # -try: - import configparser -except ImportError: - import ConfigParser as configparser +import pioutil +if pioutil.is_pio_build(): -import os -Import("env", "projenv") + try: + import configparser + except ImportError: + import ConfigParser as configparser -config = configparser.ConfigParser() -config.read("platformio.ini") + import os + Import("env", "projenv") -# -# Upload actions -# -def before_upload(source, target, env): - env.Execute("pwd") + config = configparser.ConfigParser() + config.read("platformio.ini") -def after_upload(source, target, env): - env.Execute("pwd") + # + # Upload actions + # + def before_upload(source, target, env): + env.Execute("pwd") -env.AddPreAction("upload", before_upload) -env.AddPostAction("upload", after_upload) + def after_upload(source, target, env): + env.Execute("pwd") -flash_size = 0 -vect_tab_addr = 0 + env.AddPreAction("upload", before_upload) + env.AddPostAction("upload", after_upload) -for define in env['CPPDEFINES']: - if define[0] == "VECT_TAB_ADDR": - vect_tab_addr = define[1] - if define[0] == "STM32_FLASH_SIZE": - flash_size = define[1] + flash_size = 0 + vect_tab_addr = 0 -print('Use the {0:s} address as the marlin app entry point.'.format(vect_tab_addr)) -print('Use the {0:d}KB flash version of stm32f103rct6 chip.'.format(flash_size)) + for define in env['CPPDEFINES']: + if define[0] == "VECT_TAB_ADDR": + vect_tab_addr = define[1] + if define[0] == "STM32_FLASH_SIZE": + flash_size = define[1] -import marlin -marlin.custom_ld_script("STM32F103RC_MEEB_3DP.ld") + print('Use the {0:s} address as the marlin app entry point.'.format(vect_tab_addr)) + print('Use the {0:d}KB flash version of stm32f103rct6 chip.'.format(flash_size)) + + import marlin + marlin.custom_ld_script("STM32F103RC_MEEB_3DP.ld") diff --git a/buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py b/buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py index 07f6548b18..c9794702c3 100644 --- a/buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py +++ b/buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py @@ -1,25 +1,28 @@ # -# buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py +# STM32F103RC_fysetc.py # -from os.path import join -from os.path import expandvars -Import("env") +import pioutil +if pioutil.is_pio_build(): + import os + from os.path import join + from os.path import expandvars + Import("env") -# Custom HEX from ELF -env.AddPostAction( - join("$BUILD_DIR", "${PROGNAME}.elf"), - env.VerboseAction(" ".join([ - "$OBJCOPY", "-O ihex", "$TARGET", - "\"" + join("$BUILD_DIR", "${PROGNAME}.hex") + "\"", # Note: $BUILD_DIR is a full path - ]), "Building $TARGET")) + # Custom HEX from ELF + env.AddPostAction( + join("$BUILD_DIR", "${PROGNAME}.elf"), + env.VerboseAction(" ".join([ + "$OBJCOPY", "-O ihex", "$TARGET", + "\"" + join("$BUILD_DIR", "${PROGNAME}.hex") + "\"", # Note: $BUILD_DIR is a full path + ]), "Building $TARGET")) -# In-line command with arguments -UPLOAD_TOOL="stm32flash" -platform = env.PioPlatform() -if platform.get_package_dir("tool-stm32duino") != None: - UPLOAD_TOOL=expandvars("\"" + join(platform.get_package_dir("tool-stm32duino"),"stm32flash","stm32flash") + "\"") + # In-line command with arguments + UPLOAD_TOOL="stm32flash" + platform = env.PioPlatform() + if platform.get_package_dir("tool-stm32duino") != None: + UPLOAD_TOOL=expandvars("\"" + join(platform.get_package_dir("tool-stm32duino"),"stm32flash","stm32flash") + "\"") -env.Replace( - UPLOADER=UPLOAD_TOOL, - UPLOADCMD=expandvars(UPLOAD_TOOL + " -v -i rts,-dtr,dtr -R -b 115200 -g 0x8000000 -w \"" + join("$BUILD_DIR","${PROGNAME}.hex")+"\"" + " $UPLOAD_PORT") -) + env.Replace( + UPLOADER=UPLOAD_TOOL, + UPLOADCMD=expandvars(UPLOAD_TOOL + " -v -i rts,-dtr,dtr -R -b 115200 -g 0x8000000 -w \"" + join("$BUILD_DIR","${PROGNAME}.hex")+"\"" + " $UPLOAD_PORT") + ) diff --git a/buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py b/buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py index 0a38e1ceee..592fa50e5e 100644 --- a/buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py +++ b/buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py @@ -1,30 +1,32 @@ # # STM32F1_create_variant.py # -import os,shutil,marlin -from SCons.Script import DefaultEnvironment -from platformio import util +import pioutil +if pioutil.is_pio_build(): + import os,shutil,marlin + from SCons.Script import DefaultEnvironment + from platformio import util -env = DefaultEnvironment() -platform = env.PioPlatform() -board = env.BoardConfig() + env = DefaultEnvironment() + platform = env.PioPlatform() + board = env.BoardConfig() -FRAMEWORK_DIR = platform.get_package_dir("framework-arduinoststm32-maple") -assert os.path.isdir(FRAMEWORK_DIR) + FRAMEWORK_DIR = platform.get_package_dir("framework-arduinoststm32-maple") + assert os.path.isdir(FRAMEWORK_DIR) -source_root = os.path.join("buildroot", "share", "PlatformIO", "variants") -assert os.path.isdir(source_root) + source_root = os.path.join("buildroot", "share", "PlatformIO", "variants") + assert os.path.isdir(source_root) -variant = board.get("build.variant") -variant_dir = os.path.join(FRAMEWORK_DIR, "STM32F1", "variants", variant) + variant = board.get("build.variant") + variant_dir = os.path.join(FRAMEWORK_DIR, "STM32F1", "variants", variant) -source_dir = os.path.join(source_root, variant) -assert os.path.isdir(source_dir) + source_dir = os.path.join(source_root, variant) + assert os.path.isdir(source_dir) -if os.path.isdir(variant_dir): - shutil.rmtree(variant_dir) + if os.path.isdir(variant_dir): + shutil.rmtree(variant_dir) -if not os.path.isdir(variant_dir): - os.mkdir(variant_dir) + if not os.path.isdir(variant_dir): + os.mkdir(variant_dir) -marlin.copytree(source_dir, variant_dir) + marlin.copytree(source_dir, variant_dir) diff --git a/buildroot/share/PlatformIO/scripts/add_nanolib.py b/buildroot/share/PlatformIO/scripts/add_nanolib.py index 3b74b0d271..f5166d7d84 100644 --- a/buildroot/share/PlatformIO/scripts/add_nanolib.py +++ b/buildroot/share/PlatformIO/scripts/add_nanolib.py @@ -2,4 +2,5 @@ # add_nanolib.py # Import("env") + env.Append(LINKFLAGS=["--specs=nano.specs"]) diff --git a/buildroot/share/PlatformIO/scripts/chitu_crypt.py b/buildroot/share/PlatformIO/scripts/chitu_crypt.py index 23d81c1721..b28156bfb9 100644 --- a/buildroot/share/PlatformIO/scripts/chitu_crypt.py +++ b/buildroot/share/PlatformIO/scripts/chitu_crypt.py @@ -1,116 +1,117 @@ # -# buildroot/share/PlatformIO/scripts/chitu_crypt.py +# chitu_crypt.py # Customizations for Chitu boards # -import os,random,struct,uuid,marlin +import pioutil +if pioutil.is_pio_build(): + import os,random,struct,uuid,marlin + # Relocate firmware from 0x08000000 to 0x08008800 + marlin.relocate_firmware("0x08008800") -# Relocate firmware from 0x08000000 to 0x08008800 -marlin.relocate_firmware("0x08008800") + def calculate_crc(contents, seed): + accumulating_xor_value = seed; -def calculate_crc(contents, seed): - accumulating_xor_value = seed; + for i in range(0, len(contents), 4): + value = struct.unpack('> ip - # shift the xor_seed left by the bits in IP. - xor_seed = xor_seed >> ip + # load a byte into IP + ip = r0[loop_counter] - # load a byte into IP - ip = r0[loop_counter] + # XOR the seed with r7 + xor_seed = xor_seed ^ r7 - # XOR the seed with r7 - xor_seed = xor_seed ^ r7 + # and then with IP + xor_seed = xor_seed ^ ip - # and then with IP - xor_seed = xor_seed ^ ip + #Now store the byte back + r1[loop_counter] = xor_seed & 0xFF - #Now store the byte back - r1[loop_counter] = xor_seed & 0xFF + #increment the loop_counter + loop_counter = loop_counter + 1 - #increment the loop_counter - loop_counter = loop_counter + 1 + def encrypt_file(input, output_file, file_length): + input_file = bytearray(input.read()) + block_size = 0x800 + key_length = 0x18 -def encrypt_file(input, output_file, file_length): - input_file = bytearray(input.read()) - block_size = 0x800 - key_length = 0x18 + uid_value = uuid.uuid4() + file_key = int(uid_value.hex[0:8], 16) - uid_value = uuid.uuid4() - file_key = int(uid_value.hex[0:8], 16) + xor_crc = 0xEF3D4323; - xor_crc = 0xEF3D4323; + # the input file is exepcted to be in chunks of 0x800 + # so round the size + while len(input_file) % block_size != 0: + input_file.extend(b'0x0') - # the input file is exepcted to be in chunks of 0x800 - # so round the size - while len(input_file) % block_size != 0: - input_file.extend(b'0x0') + # write the file header + output_file.write(struct.pack(">I", 0x443D2D3F)) + # encrypt the contents using a known file header key - # write the file header - output_file.write(struct.pack(">I", 0x443D2D3F)) - # encrypt the contents using a known file header key + # write the file_key + output_file.write(struct.pack("= level: - print("[deps] %s" % str) + def validate_pio(): + PIO_VERSION_MIN = (5, 0, 3) + try: + from platformio import VERSION as PIO_VERSION + weights = (1000, 100, 1) + version_min = sum([x[0] * float(re.sub(r'[^0-9]', '.', str(x[1]))) for x in zip(weights, PIO_VERSION_MIN)]) + version_cur = sum([x[0] * float(re.sub(r'[^0-9]', '.', str(x[1]))) for x in zip(weights, PIO_VERSION)]) + if version_cur < version_min: + print() + print("**************************************************") + print("****** An update to PlatformIO is ******") + print("****** required to build Marlin Firmware. ******") + print("****** ******") + print("****** Minimum version: ", PIO_VERSION_MIN, " ******") + print("****** Current Version: ", PIO_VERSION, " ******") + print("****** ******") + print("****** Update PlatformIO and try again. ******") + print("**************************************************") + print() + exit(1) + except SystemExit: + exit(1) + except: + print("Can't detect PlatformIO Version") -FEATURE_CONFIG = {} + def blab(str,level=1): + if verbose >= level: + print("[deps] %s" % str) -def add_to_feat_cnf(feature, flines): + def add_to_feat_cnf(feature, flines): - try: - feat = FEATURE_CONFIG[feature] - except: - FEATURE_CONFIG[feature] = {} - - # Get a reference to the FEATURE_CONFIG under construction - feat = FEATURE_CONFIG[feature] - - # Split up passed lines on commas or newlines and iterate - # Add common options to the features config under construction - # For lib_deps replace a previous instance of the same library - atoms = re.sub(r',\\s*', '\n', flines).strip().split('\n') - for line in atoms: - parts = line.split('=') - name = parts.pop(0) - if name in ['build_flags', 'extra_scripts', 'src_filter', 'lib_ignore']: - feat[name] = '='.join(parts) - blab("[%s] %s=%s" % (feature, name, feat[name]), 3) - else: - 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)') - feat['lib_deps'] = list(filter(lib_re.match, feat['lib_deps'])) + [dep] - blab("[%s] lib_deps = %s" % (feature, dep), 3) - -def load_config(): - blab("========== Gather [features] entries...") - items = ProjectConfig().items('features') - for key in items: - feature = key[0].upper() - if not feature in FEATURE_CONFIG: - FEATURE_CONFIG[feature] = { 'lib_deps': [] } - add_to_feat_cnf(feature, key[1]) - - # Add options matching custom_marlin.MY_OPTION to the pile - blab("========== Gather custom_marlin entries...") - all_opts = env.GetProjectOptions() - for n in all_opts: - key = n[0] - mat = re.match(r'custom_marlin\.(.+)', key) - if mat: - try: - val = env.GetProjectOption(key) - except: - val = None - if val: - opt = mat.group(1).upper() - blab("%s.custom_marlin.%s = '%s'" % ( env['PIOENV'], opt, val )) - add_to_feat_cnf(opt, val) - -def get_all_known_libs(): - known_libs = [] - for feature in FEATURE_CONFIG: - feat = FEATURE_CONFIG[feature] - if not 'lib_deps' in feat: - continue - for dep in feat['lib_deps']: - known_libs.append(PackageSpec(dep).name) - return known_libs - -def get_all_env_libs(): - env_libs = [] - lib_deps = env.GetProjectOption('lib_deps') - for dep in lib_deps: - env_libs.append(PackageSpec(dep).name) - return env_libs - -def set_env_field(field, value): - proj = env.GetProjectConfig() - proj.set("env:" + env['PIOENV'], field, value) - -# All unused libs should be ignored so that if a library -# exists in .pio/lib_deps it will not break compilation. -def force_ignore_unused_libs(): - env_libs = get_all_env_libs() - known_libs = get_all_known_libs() - diff = (list(set(known_libs) - set(env_libs))) - lib_ignore = env.GetProjectOption('lib_ignore') + diff - blab("Ignore libraries: %s" % lib_ignore) - set_env_field('lib_ignore', lib_ignore) - -def apply_features_config(): - load_config() - blab("========== Apply enabled features...") - for feature in FEATURE_CONFIG: - if not env.MarlinFeatureIsEnabled(feature): - continue + try: + feat = FEATURE_CONFIG[feature] + except: + FEATURE_CONFIG[feature] = {} + # Get a reference to the FEATURE_CONFIG under construction feat = FEATURE_CONFIG[feature] - if 'lib_deps' in feat and len(feat['lib_deps']): - blab("========== Adding lib_deps for %s... " % feature, 2) + # Split up passed lines on commas or newlines and iterate + # Add common options to the features config under construction + # For lib_deps replace a previous instance of the same library + atoms = re.sub(r',\\s*', '\n', flines).strip().split('\n') + for line in atoms: + parts = line.split('=') + name = parts.pop(0) + if name in ['build_flags', 'extra_scripts', 'src_filter', 'lib_ignore']: + feat[name] = '='.join(parts) + blab("[%s] %s=%s" % (feature, name, feat[name]), 3) + else: + 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)') + feat['lib_deps'] = list(filter(lib_re.match, feat['lib_deps'])) + [dep] + blab("[%s] lib_deps = %s" % (feature, dep), 3) - # feat to add - deps_to_add = {} + def load_config(): + blab("========== Gather [features] entries...") + items = ProjectConfig().items('features') + for key in items: + feature = key[0].upper() + if not feature in FEATURE_CONFIG: + FEATURE_CONFIG[feature] = { 'lib_deps': [] } + add_to_feat_cnf(feature, key[1]) + + # Add options matching custom_marlin.MY_OPTION to the pile + blab("========== Gather custom_marlin entries...") + all_opts = env.GetProjectOptions() + for n in all_opts: + key = n[0] + mat = re.match(r'custom_marlin\.(.+)', key) + if mat: + try: + val = env.GetProjectOption(key) + except: + val = None + if val: + opt = mat.group(1).upper() + blab("%s.custom_marlin.%s = '%s'" % ( env['PIOENV'], opt, val )) + add_to_feat_cnf(opt, val) + + def get_all_known_libs(): + known_libs = [] + for feature in FEATURE_CONFIG: + feat = FEATURE_CONFIG[feature] + if not 'lib_deps' in feat: + continue for dep in feat['lib_deps']: - deps_to_add[PackageSpec(dep).name] = dep - blab("==================== %s... " % dep, 2) + known_libs.append(PackageSpec(dep).name) + return known_libs - # Does the env already have the dependency? - deps = env.GetProjectOption('lib_deps') - for dep in deps: - name = PackageSpec(dep).name - if name in deps_to_add: - del deps_to_add[name] + def get_all_env_libs(): + env_libs = [] + lib_deps = env.GetProjectOption('lib_deps') + for dep in lib_deps: + env_libs.append(PackageSpec(dep).name) + return env_libs - # Are there any libraries that should be ignored? - lib_ignore = env.GetProjectOption('lib_ignore') - for dep in deps: - name = PackageSpec(dep).name - if name in deps_to_add: - del deps_to_add[name] + def set_env_field(field, value): + proj = env.GetProjectConfig() + proj.set("env:" + env['PIOENV'], field, value) - # Is there anything left? - if len(deps_to_add) > 0: - # Only add the missing dependencies - set_env_field('lib_deps', deps + list(deps_to_add.values())) + # All unused libs should be ignored so that if a library + # exists in .pio/lib_deps it will not break compilation. + def force_ignore_unused_libs(): + env_libs = get_all_env_libs() + known_libs = get_all_known_libs() + diff = (list(set(known_libs) - set(env_libs))) + lib_ignore = env.GetProjectOption('lib_ignore') + diff + blab("Ignore libraries: %s" % lib_ignore) + set_env_field('lib_ignore', lib_ignore) - if 'build_flags' in feat: - f = feat['build_flags'] - blab("========== Adding build_flags for %s: %s" % (feature, f), 2) - new_flags = env.GetProjectOption('build_flags') + [ f ] - env.Replace(BUILD_FLAGS=new_flags) + def apply_features_config(): + load_config() + blab("========== Apply enabled features...") + for feature in FEATURE_CONFIG: + if not env.MarlinFeatureIsEnabled(feature): + continue - if 'extra_scripts' in feat: - blab("Running extra_scripts for %s... " % feature, 2) - env.SConscript(feat['extra_scripts'], exports="env") + feat = FEATURE_CONFIG[feature] - if 'src_filter' in feat: - blab("========== Adding src_filter for %s... " % feature, 2) - src_filter = ' '.join(env.GetProjectOption('src_filter')) - # first we need to remove the references to the same folder - my_srcs = re.findall(r'[+-](<.*?>)', feat['src_filter']) - cur_srcs = re.findall(r'[+-](<.*?>)', src_filter) - for d in my_srcs: - if d in cur_srcs: - src_filter = re.sub(r'[+-]' + d, '', src_filter) + if 'lib_deps' in feat and len(feat['lib_deps']): + blab("========== Adding lib_deps for %s... " % feature, 2) - src_filter = feat['src_filter'] + ' ' + src_filter - set_env_field('src_filter', [src_filter]) - env.Replace(SRC_FILTER=src_filter) + # feat to add + deps_to_add = {} + for dep in feat['lib_deps']: + deps_to_add[PackageSpec(dep).name] = dep + blab("==================== %s... " % dep, 2) - if 'lib_ignore' in feat: - blab("========== Adding lib_ignore for %s... " % feature, 2) - lib_ignore = env.GetProjectOption('lib_ignore') + [feat['lib_ignore']] - set_env_field('lib_ignore', lib_ignore) + # Does the env already have the dependency? + deps = env.GetProjectOption('lib_deps') + for dep in deps: + name = PackageSpec(dep).name + if name in deps_to_add: + del deps_to_add[name] -# -# Find a compiler, considering the OS -# -ENV_BUILD_PATH = os.path.join(env.Dictionary('PROJECT_BUILD_DIR'), env['PIOENV']) -GCC_PATH_CACHE = os.path.join(ENV_BUILD_PATH, ".gcc_path") -def search_compiler(): - try: - filepath = env.GetProjectOption('custom_gcc') - blab("Getting compiler from env") + # Are there any libraries that should be ignored? + lib_ignore = env.GetProjectOption('lib_ignore') + for dep in deps: + name = PackageSpec(dep).name + if name in deps_to_add: + del deps_to_add[name] + + # Is there anything left? + if len(deps_to_add) > 0: + # Only add the missing dependencies + set_env_field('lib_deps', deps + list(deps_to_add.values())) + + if 'build_flags' in feat: + f = feat['build_flags'] + blab("========== Adding build_flags for %s: %s" % (feature, f), 2) + new_flags = env.GetProjectOption('build_flags') + [ f ] + env.Replace(BUILD_FLAGS=new_flags) + + if 'extra_scripts' in feat: + blab("Running extra_scripts for %s... " % feature, 2) + env.SConscript(feat['extra_scripts'], exports="env") + + if 'src_filter' in feat: + blab("========== Adding src_filter for %s... " % feature, 2) + src_filter = ' '.join(env.GetProjectOption('src_filter')) + # first we need to remove the references to the same folder + my_srcs = re.findall(r'[+-](<.*?>)', feat['src_filter']) + cur_srcs = re.findall(r'[+-](<.*?>)', src_filter) + for d in my_srcs: + if d in cur_srcs: + src_filter = re.sub(r'[+-]' + d, '', src_filter) + + src_filter = feat['src_filter'] + ' ' + src_filter + set_env_field('src_filter', [src_filter]) + env.Replace(SRC_FILTER=src_filter) + + if 'lib_ignore' in feat: + blab("========== Adding lib_ignore for %s... " % feature, 2) + lib_ignore = env.GetProjectOption('lib_ignore') + [feat['lib_ignore']] + set_env_field('lib_ignore', lib_ignore) + + # + # Find a compiler, considering the OS + # + ENV_BUILD_PATH = os.path.join(env.Dictionary('PROJECT_BUILD_DIR'), env['PIOENV']) + GCC_PATH_CACHE = os.path.join(ENV_BUILD_PATH, ".gcc_path") + def search_compiler(): + try: + filepath = env.GetProjectOption('custom_gcc') + blab("Getting compiler from env") + return filepath + except: + pass + + if os.path.exists(GCC_PATH_CACHE): + with open(GCC_PATH_CACHE, 'r') as f: + return f.read() + + # Find the current platform compiler by searching the $PATH + # which will be in a platformio toolchain bin folder + path_regex = re.escape(env['PROJECT_PACKAGES_DIR']) + + # See if the environment provides a default compiler + try: + gcc = env.GetProjectOption('custom_deps_gcc') + except: + gcc = "g++" + + if env['PLATFORM'] == 'win32': + path_separator = ';' + path_regex += r'.*\\bin' + gcc += ".exe" + else: + path_separator = ':' + path_regex += r'/.+/bin' + + # Search for the compiler + for pathdir in env['ENV']['PATH'].split(path_separator): + if not re.search(path_regex, pathdir, re.IGNORECASE): + continue + for filepath in os.listdir(pathdir): + if not filepath.endswith(gcc): + continue + # Use entire path to not rely on env PATH + filepath = os.path.sep.join([pathdir, filepath]) + # Cache the g++ path to no search always + if os.path.exists(ENV_BUILD_PATH): + with open(GCC_PATH_CACHE, 'w+') as f: + f.write(filepath) + + return filepath + + filepath = env.get('CXX') + if filepath == 'CC': + filepath = gcc + blab("Couldn't find a compiler! Fallback to %s" % filepath) return filepath + + # + # Use the compiler to get a list of all enabled features + # + def load_marlin_features(): + if 'MARLIN_FEATURES' in env: + return + + # Process defines + build_flags = env.get('BUILD_FLAGS') + build_flags = env.ParseFlagsExtended(build_flags) + + cxx = search_compiler() + cmd = ['"' + cxx + '"'] + + # Build flags from board.json + #if 'BOARD' in env: + # cmd += [env.BoardConfig().get("build.extra_flags")] + for s in build_flags['CPPDEFINES']: + if isinstance(s, tuple): + cmd += ['-D' + s[0] + '=' + str(s[1])] + else: + cmd += ['-D' + s] + + cmd += ['-D__MARLIN_DEPS__ -w -dM -E -x c++ buildroot/share/PlatformIO/scripts/common-dependencies.h'] + cmd = ' '.join(cmd) + blab(cmd, 4) + define_list = subprocess.check_output(cmd, shell=True).splitlines() + marlin_features = {} + for define in define_list: + feature = define[8:].strip().decode().split(' ') + feature, definition = feature[0], ' '.join(feature[1:]) + marlin_features[feature] = definition + env['MARLIN_FEATURES'] = marlin_features + + # + # Return True if a matching feature is enabled + # + def MarlinFeatureIsEnabled(env, feature): + load_marlin_features() + r = re.compile('^' + feature + '$') + found = list(filter(r.match, env['MARLIN_FEATURES'])) + + # Defines could still be 'false' or '0', so check + some_on = False + if len(found): + for f in found: + val = env['MARLIN_FEATURES'][f] + if val in [ '', '1', 'true' ]: + some_on = True + elif val in env['MARLIN_FEATURES']: + some_on = env.MarlinFeatureIsEnabled(val) + + return some_on + + validate_pio() + + try: + verbose = int(env.GetProjectOption('custom_verbose')) except: pass - if os.path.exists(GCC_PATH_CACHE): - with open(GCC_PATH_CACHE, 'r') as f: - return f.read() + # Add a method for other PIO scripts to query enabled features + env.AddMethod(MarlinFeatureIsEnabled) - # Find the current platform compiler by searching the $PATH - # which will be in a platformio toolchain bin folder - path_regex = re.escape(env['PROJECT_PACKAGES_DIR']) - - # See if the environment provides a default compiler - try: - gcc = env.GetProjectOption('custom_deps_gcc') - except: - gcc = "g++" - - if env['PLATFORM'] == 'win32': - path_separator = ';' - path_regex += r'.*\\bin' - gcc += ".exe" - else: - path_separator = ':' - path_regex += r'/.+/bin' - - # Search for the compiler - for pathdir in env['ENV']['PATH'].split(path_separator): - if not re.search(path_regex, pathdir, re.IGNORECASE): - continue - for filepath in os.listdir(pathdir): - if not filepath.endswith(gcc): - continue - # Use entire path to not rely on env PATH - filepath = os.path.sep.join([pathdir, filepath]) - # Cache the g++ path to no search always - if os.path.exists(ENV_BUILD_PATH): - with open(GCC_PATH_CACHE, 'w+') as f: - f.write(filepath) - - return filepath - - filepath = env.get('CXX') - if filepath == 'CC': - filepath = gcc - blab("Couldn't find a compiler! Fallback to %s" % filepath) - return filepath - -# -# Use the compiler to get a list of all enabled features -# -def load_marlin_features(): - if 'MARLIN_FEATURES' in env: - return - - # Process defines - build_flags = env.get('BUILD_FLAGS') - build_flags = env.ParseFlagsExtended(build_flags) - - cxx = search_compiler() - cmd = ['"' + cxx + '"'] - - # Build flags from board.json - #if 'BOARD' in env: - # cmd += [env.BoardConfig().get("build.extra_flags")] - for s in build_flags['CPPDEFINES']: - if isinstance(s, tuple): - cmd += ['-D' + s[0] + '=' + str(s[1])] - else: - cmd += ['-D' + s] - - cmd += ['-D__MARLIN_DEPS__ -w -dM -E -x c++ buildroot/share/PlatformIO/scripts/common-dependencies.h'] - cmd = ' '.join(cmd) - blab(cmd, 4) - define_list = subprocess.check_output(cmd, shell=True).splitlines() - marlin_features = {} - for define in define_list: - feature = define[8:].strip().decode().split(' ') - feature, definition = feature[0], ' '.join(feature[1:]) - marlin_features[feature] = definition - env['MARLIN_FEATURES'] = marlin_features - -# -# Return True if a matching feature is enabled -# -def MarlinFeatureIsEnabled(env, feature): - load_marlin_features() - r = re.compile('^' + feature + '$') - found = list(filter(r.match, env['MARLIN_FEATURES'])) - - # Defines could still be 'false' or '0', so check - some_on = False - if len(found): - for f in found: - val = env['MARLIN_FEATURES'][f] - if val in [ '', '1', 'true' ]: - some_on = True - elif val in env['MARLIN_FEATURES']: - some_on = env.MarlinFeatureIsEnabled(val) - - return some_on - -# -# Add a method for other PIO scripts to query enabled features -# -env.AddMethod(MarlinFeatureIsEnabled) - -# -# Add dependencies for enabled Marlin features -# -apply_features_config() -force_ignore_unused_libs() + # Add dependencies for enabled Marlin features + apply_features_config() + force_ignore_unused_libs() diff --git a/buildroot/share/PlatformIO/scripts/custom_board.py b/buildroot/share/PlatformIO/scripts/custom_board.py index e462738190..da3bdca0bb 100644 --- a/buildroot/share/PlatformIO/scripts/custom_board.py +++ b/buildroot/share/PlatformIO/scripts/custom_board.py @@ -1,16 +1,18 @@ # -# buildroot/share/PlatformIO/scripts/custom_board.py +# custom_board.py # # - For build.address replace VECT_TAB_ADDR to relocate the firmware # - For build.ldscript use one of the linker scripts in buildroot/share/PlatformIO/ldscripts # -import marlin -board = marlin.env.BoardConfig() +import pioutil +if pioutil.is_pio_build(): + import marlin + board = marlin.env.BoardConfig() -address = board.get("build.address", "") -if address: - marlin.relocate_firmware(address) + address = board.get("build.address", "") + if address: + marlin.relocate_firmware(address) -ldscript = board.get("build.ldscript", "") -if ldscript: - marlin.custom_ld_script(ldscript) + ldscript = board.get("build.ldscript", "") + if ldscript: + marlin.custom_ld_script(ldscript) diff --git a/buildroot/share/PlatformIO/scripts/download_mks_assets.py b/buildroot/share/PlatformIO/scripts/download_mks_assets.py index 251a74a4cc..1990400222 100644 --- a/buildroot/share/PlatformIO/scripts/download_mks_assets.py +++ b/buildroot/share/PlatformIO/scripts/download_mks_assets.py @@ -1,51 +1,49 @@ # -# buildroot/share/PlatformIO/scripts/download_mks_assets.py +# download_mks_assets.py # Added by HAS_TFT_LVGL_UI to download assets from Makerbase repo # -Import("env") -import os,requests,zipfile,tempfile,shutil,pioutil +import pioutil +if pioutil.is_pio_build(): + Import("env") + import os,requests,zipfile,tempfile,shutil -# Detect that 'vscode init' is running -if pioutil.is_vscode_init(): - env.Exit(0) + url = "https://github.com/makerbase-mks/Mks-Robin-Nano-Marlin2.0-Firmware/archive/0263cdaccf.zip" + deps_path = env.Dictionary("PROJECT_LIBDEPS_DIR") + zip_path = os.path.join(deps_path, "mks-assets.zip") + assets_path = os.path.join(env.Dictionary("PROJECT_BUILD_DIR"), env.Dictionary("PIOENV"), "assets") -url = "https://github.com/makerbase-mks/Mks-Robin-Nano-Marlin2.0-Firmware/archive/0263cdaccf.zip" -deps_path = env.Dictionary("PROJECT_LIBDEPS_DIR") -zip_path = os.path.join(deps_path, "mks-assets.zip") -assets_path = os.path.join(env.Dictionary("PROJECT_BUILD_DIR"), env.Dictionary("PIOENV"), "assets") + def download_mks_assets(): + print("Downloading MKS Assets") + r = requests.get(url, stream=True) + # the user may have a very clean workspace, + # so create the PROJECT_LIBDEPS_DIR directory if not exits + if os.path.exists(deps_path) == False: + os.mkdir(deps_path) + with open(zip_path, 'wb') as fd: + for chunk in r.iter_content(chunk_size=128): + fd.write(chunk) -def download_mks_assets(): - print("Downloading MKS Assets") - r = requests.get(url, stream=True) - # the user may have a very clean workspace, - # so create the PROJECT_LIBDEPS_DIR directory if not exits - if os.path.exists(deps_path) == False: - os.mkdir(deps_path) - with open(zip_path, 'wb') as fd: - for chunk in r.iter_content(chunk_size=128): - fd.write(chunk) + def copy_mks_assets(): + print("Copying MKS Assets") + output_path = tempfile.mkdtemp() + zip_obj = zipfile.ZipFile(zip_path, 'r') + zip_obj.extractall(output_path) + zip_obj.close() + if os.path.exists(assets_path) == True and os.path.isdir(assets_path) == False: + os.unlink(assets_path) + if os.path.exists(assets_path) == False: + os.mkdir(assets_path) + base_path = '' + for filename in os.listdir(output_path): + base_path = filename + for filename in os.listdir(os.path.join(output_path, base_path, 'Firmware', 'mks_font')): + shutil.copy(os.path.join(output_path, base_path, 'Firmware', 'mks_font', filename), assets_path) + for filename in os.listdir(os.path.join(output_path, base_path, 'Firmware', 'mks_pic')): + shutil.copy(os.path.join(output_path, base_path, 'Firmware', 'mks_pic', filename), assets_path) + shutil.rmtree(output_path, ignore_errors=True) + + if os.path.exists(zip_path) == False: + download_mks_assets() -def copy_mks_assets(): - print("Copying MKS Assets") - output_path = tempfile.mkdtemp() - zip_obj = zipfile.ZipFile(zip_path, 'r') - zip_obj.extractall(output_path) - zip_obj.close() - if os.path.exists(assets_path) == True and os.path.isdir(assets_path) == False: - os.unlink(assets_path) if os.path.exists(assets_path) == False: - os.mkdir(assets_path) - base_path = '' - for filename in os.listdir(output_path): - base_path = filename - for filename in os.listdir(os.path.join(output_path, base_path, 'Firmware', 'mks_font')): - shutil.copy(os.path.join(output_path, base_path, 'Firmware', 'mks_font', filename), assets_path) - for filename in os.listdir(os.path.join(output_path, base_path, 'Firmware', 'mks_pic')): - shutil.copy(os.path.join(output_path, base_path, 'Firmware', 'mks_pic', filename), assets_path) - shutil.rmtree(output_path, ignore_errors=True) - -if os.path.exists(zip_path) == False: - download_mks_assets() - -if os.path.exists(assets_path) == False: - copy_mks_assets() + copy_mks_assets() diff --git a/buildroot/share/PlatformIO/scripts/fix_framework_weakness.py b/buildroot/share/PlatformIO/scripts/fix_framework_weakness.py index fa91b7bb70..663e7c76d9 100644 --- a/buildroot/share/PlatformIO/scripts/fix_framework_weakness.py +++ b/buildroot/share/PlatformIO/scripts/fix_framework_weakness.py @@ -1,32 +1,35 @@ # # fix_framework_weakness.py # -from os.path import join, isfile -import shutil -from pprint import pprint +import pioutil +if pioutil.is_pio_build(): -Import("env") + import shutil + from os.path import join, isfile + from pprint import pprint -if env.MarlinFeatureIsEnabled("POSTMORTEM_DEBUGGING"): - FRAMEWORK_DIR = env.PioPlatform().get_package_dir("framework-arduinoststm32-maple") - patchflag_path = join(FRAMEWORK_DIR, ".exc-patching-done") + Import("env") - # patch file only if we didn't do it before - if not isfile(patchflag_path): - print("Patching libmaple exception handlers") - original_file = join(FRAMEWORK_DIR, "STM32F1", "cores", "maple", "libmaple", "exc.S") - backup_file = join(FRAMEWORK_DIR, "STM32F1", "cores", "maple", "libmaple", "exc.S.bak") - src_file = join("buildroot", "share", "PlatformIO", "scripts", "exc.S") + if env.MarlinFeatureIsEnabled("POSTMORTEM_DEBUGGING"): + FRAMEWORK_DIR = env.PioPlatform().get_package_dir("framework-arduinoststm32-maple") + patchflag_path = join(FRAMEWORK_DIR, ".exc-patching-done") - assert isfile(original_file) and isfile(src_file) - shutil.copyfile(original_file, backup_file) - shutil.copyfile(src_file, original_file); + # patch file only if we didn't do it before + if not isfile(patchflag_path): + print("Patching libmaple exception handlers") + original_file = join(FRAMEWORK_DIR, "STM32F1", "cores", "maple", "libmaple", "exc.S") + backup_file = join(FRAMEWORK_DIR, "STM32F1", "cores", "maple", "libmaple", "exc.S.bak") + src_file = join("buildroot", "share", "PlatformIO", "scripts", "exc.S") - def _touch(path): - with open(path, "w") as fp: - fp.write("") + assert isfile(original_file) and isfile(src_file) + shutil.copyfile(original_file, backup_file) + shutil.copyfile(src_file, original_file); - env.Execute(lambda *args, **kwargs: _touch(patchflag_path)) - print("Done patching exception handler") + def _touch(path): + with open(path, "w") as fp: + fp.write("") - print("Libmaple modified and ready for post mortem debugging") + env.Execute(lambda *args, **kwargs: _touch(patchflag_path)) + print("Done patching exception handler") + + print("Libmaple modified and ready for post mortem debugging") diff --git a/buildroot/share/PlatformIO/scripts/generic_create_variant.py b/buildroot/share/PlatformIO/scripts/generic_create_variant.py index 7f76ef9426..52473c752a 100644 --- a/buildroot/share/PlatformIO/scripts/generic_create_variant.py +++ b/buildroot/share/PlatformIO/scripts/generic_create_variant.py @@ -5,50 +5,52 @@ # the appropriate framework variants folder, so that its contents # will be picked up by PlatformIO just like any other variant. # -import os,shutil,marlin -from SCons.Script import DefaultEnvironment -from platformio import util +import pioutil +if pioutil.is_pio_build(): + import os,shutil,marlin + from SCons.Script import DefaultEnvironment + from platformio import util -env = DefaultEnvironment() + env = DefaultEnvironment() -# -# Get the platform name from the 'platform_packages' option, -# or look it up by the platform.class.name. -# -platform = env.PioPlatform() + # + # Get the platform name from the 'platform_packages' option, + # or look it up by the platform.class.name. + # + platform = env.PioPlatform() -from platformio.package.meta import PackageSpec -platform_packages = env.GetProjectOption('platform_packages') -if len(platform_packages) == 0: - framewords = { - "Ststm32Platform": "framework-arduinoststm32", - "AtmelavrPlatform": "framework-arduino-avr" - } - platform_name = framewords[platform.__class__.__name__] -else: - platform_name = PackageSpec(platform_packages[0]).name + from platformio.package.meta import PackageSpec + platform_packages = env.GetProjectOption('platform_packages') + if len(platform_packages) == 0: + framewords = { + "Ststm32Platform": "framework-arduinoststm32", + "AtmelavrPlatform": "framework-arduino-avr" + } + platform_name = framewords[platform.__class__.__name__] + else: + platform_name = PackageSpec(platform_packages[0]).name -if platform_name in [ "usb-host-msc", "usb-host-msc-cdc-msc", "usb-host-msc-cdc-msc-2", "usb-host-msc-cdc-msc-3", "tool-stm32duino" ]: - platform_name = "framework-arduinoststm32" + if platform_name in [ "usb-host-msc", "usb-host-msc-cdc-msc", "usb-host-msc-cdc-msc-2", "usb-host-msc-cdc-msc-3", "tool-stm32duino" ]: + platform_name = "framework-arduinoststm32" -FRAMEWORK_DIR = platform.get_package_dir(platform_name) -assert os.path.isdir(FRAMEWORK_DIR) + FRAMEWORK_DIR = platform.get_package_dir(platform_name) + assert os.path.isdir(FRAMEWORK_DIR) -board = env.BoardConfig() + board = env.BoardConfig() -#mcu_type = board.get("build.mcu")[:-2] -variant = board.get("build.variant") -#series = mcu_type[:7].upper() + "xx" + #mcu_type = board.get("build.mcu")[:-2] + variant = board.get("build.variant") + #series = mcu_type[:7].upper() + "xx" -# Prepare a new empty folder at the destination -variant_dir = os.path.join(FRAMEWORK_DIR, "variants", variant) -if os.path.isdir(variant_dir): - shutil.rmtree(variant_dir) -if not os.path.isdir(variant_dir): - os.mkdir(variant_dir) + # Prepare a new empty folder at the destination + variant_dir = os.path.join(FRAMEWORK_DIR, "variants", variant) + if os.path.isdir(variant_dir): + shutil.rmtree(variant_dir) + if not os.path.isdir(variant_dir): + os.mkdir(variant_dir) -# Source dir is a local variant sub-folder -source_dir = os.path.join("buildroot/share/PlatformIO/variants", variant) -assert os.path.isdir(source_dir) + # Source dir is a local variant sub-folder + source_dir = os.path.join("buildroot/share/PlatformIO/variants", variant) + assert os.path.isdir(source_dir) -marlin.copytree(source_dir, variant_dir) + marlin.copytree(source_dir, variant_dir) diff --git a/buildroot/share/PlatformIO/scripts/jgaurora_a5s_a1_with_bootloader.py b/buildroot/share/PlatformIO/scripts/jgaurora_a5s_a1_with_bootloader.py index a4001a240c..0af9c1046d 100644 --- a/buildroot/share/PlatformIO/scripts/jgaurora_a5s_a1_with_bootloader.py +++ b/buildroot/share/PlatformIO/scripts/jgaurora_a5s_a1_with_bootloader.py @@ -1,39 +1,40 @@ # -# buildroot/share/PlatformIO/scripts/jgaurora_a5s_a1_with_bootloader.py +# jgaurora_a5s_a1_with_bootloader.py # Customizations for env:jgaurora_a5s_a1 # -import os,marlin +import pioutil +if pioutil.is_pio_build(): + import os,marlin + # Append ${PROGNAME}.bin firmware after bootloader and save it as 'jgaurora_firmware.bin' + def addboot(source, target, env): + firmware = open(target[0].path, "rb") + lengthfirmware = os.path.getsize(target[0].path) + bootloader_bin = "buildroot/share/PlatformIO/scripts/" + "jgaurora_bootloader.bin" + bootloader = open(bootloader_bin, "rb") + lengthbootloader = os.path.getsize(bootloader_bin) -# Append ${PROGNAME}.bin firmware after bootloader and save it as 'jgaurora_firmware.bin' -def addboot(source, target, env): - firmware = open(target[0].path, "rb") - lengthfirmware = os.path.getsize(target[0].path) - bootloader_bin = "buildroot/share/PlatformIO/scripts/" + "jgaurora_bootloader.bin" - bootloader = open(bootloader_bin, "rb") - lengthbootloader = os.path.getsize(bootloader_bin) + firmware_with_boothloader_bin = target[0].dir.path + '/firmware_with_bootloader.bin' + if os.path.exists(firmware_with_boothloader_bin): + os.remove(firmware_with_boothloader_bin) + firmwareimage = open(firmware_with_boothloader_bin, "wb") + position = 0 + while position < lengthbootloader: + byte = bootloader.read(1) + firmwareimage.write(byte) + position += 1 + position = 0 + while position < lengthfirmware: + byte = firmware.read(1) + firmwareimage.write(byte) + position += 1 + bootloader.close() + firmware.close() + firmwareimage.close() - firmware_with_boothloader_bin = target[0].dir.path + '/firmware_with_bootloader.bin' - if os.path.exists(firmware_with_boothloader_bin): - os.remove(firmware_with_boothloader_bin) - firmwareimage = open(firmware_with_boothloader_bin, "wb") - position = 0 - while position < lengthbootloader: - byte = bootloader.read(1) - firmwareimage.write(byte) - position += 1 - position = 0 - while position < lengthfirmware: - byte = firmware.read(1) - firmwareimage.write(byte) - position += 1 - bootloader.close() - firmware.close() - firmwareimage.close() + firmware_without_bootloader_bin = target[0].dir.path + '/firmware_for_sd_upload.bin' + if os.path.exists(firmware_without_bootloader_bin): + os.remove(firmware_without_bootloader_bin) + os.rename(target[0].path, firmware_without_bootloader_bin) + #os.rename(target[0].dir.path+'/firmware_with_bootloader.bin', target[0].dir.path+'/firmware.bin') - firmware_without_bootloader_bin = target[0].dir.path + '/firmware_for_sd_upload.bin' - if os.path.exists(firmware_without_bootloader_bin): - os.remove(firmware_without_bootloader_bin) - os.rename(target[0].path, firmware_without_bootloader_bin) - #os.rename(target[0].dir.path+'/firmware_with_bootloader.bin', target[0].dir.path+'/firmware.bin') - -marlin.add_post_action(addboot); + marlin.add_post_action(addboot); diff --git a/buildroot/share/PlatformIO/scripts/lerdge.py b/buildroot/share/PlatformIO/scripts/lerdge.py index 144ab64a9a..505a935560 100644 --- a/buildroot/share/PlatformIO/scripts/lerdge.py +++ b/buildroot/share/PlatformIO/scripts/lerdge.py @@ -1,47 +1,49 @@ # -# buildroot/share/PlatformIO/scripts/lerdge.py +# lerdge.py # Customizations for Lerdge build environments: # env:LERDGEX env:LERDGEX_usb_flash_drive # env:LERDGES env:LERDGES_usb_flash_drive # env:LERDGEK env:LERDGEK_usb_flash_drive # -import os,marlin -Import("env") +import pioutil +if pioutil.is_pio_build(): + import os,marlin + Import("env") -from SCons.Script import DefaultEnvironment -board = DefaultEnvironment().BoardConfig() + from SCons.Script import DefaultEnvironment + board = DefaultEnvironment().BoardConfig() -def encryptByte(byte): - byte = 0xFF & ((byte << 6) | (byte >> 2)) - i = 0x58 + byte - j = 0x05 + byte + (i >> 8) - byte = (0xF8 & i) | (0x07 & j) - return byte + def encryptByte(byte): + byte = 0xFF & ((byte << 6) | (byte >> 2)) + i = 0x58 + byte + j = 0x05 + byte + (i >> 8) + byte = (0xF8 & i) | (0x07 & j) + return byte -def encrypt_file(input, output_file, file_length): - input_file = bytearray(input.read()) - for i in range(len(input_file)): - input_file[i] = encryptByte(input_file[i]) - output_file.write(input_file) + def encrypt_file(input, output_file, file_length): + input_file = bytearray(input.read()) + for i in range(len(input_file)): + input_file[i] = encryptByte(input_file[i]) + output_file.write(input_file) -# Encrypt ${PROGNAME}.bin and save it with the name given in build.encrypt -def encrypt(source, target, env): - fwpath = target[0].path - enname = board.get("build.encrypt") - print("Encrypting %s to %s" % (fwpath, enname)) - fwfile = open(fwpath, "rb") - enfile = open(target[0].dir.path + "/" + enname, "wb") - length = os.path.getsize(fwpath) + # Encrypt ${PROGNAME}.bin and save it with the name given in build.encrypt + def encrypt(source, target, env): + fwpath = target[0].path + enname = board.get("build.encrypt") + print("Encrypting %s to %s" % (fwpath, enname)) + fwfile = open(fwpath, "rb") + enfile = open(target[0].dir.path + "/" + enname, "wb") + length = os.path.getsize(fwpath) - encrypt_file(fwfile, enfile, length) + encrypt_file(fwfile, enfile, length) - fwfile.close() - enfile.close() - os.remove(fwpath) + fwfile.close() + enfile.close() + os.remove(fwpath) -if 'encrypt' in board.get("build").keys(): - if board.get("build.encrypt") != "": - marlin.add_post_action(encrypt) -else: - print("LERDGE builds require output file via board_build.encrypt = 'filename' parameter") - exit(1) + if 'encrypt' in board.get("build").keys(): + if board.get("build.encrypt") != "": + marlin.add_post_action(encrypt) + else: + print("LERDGE builds require output file via board_build.encrypt = 'filename' parameter") + exit(1) diff --git a/buildroot/share/PlatformIO/scripts/marlin.py b/buildroot/share/PlatformIO/scripts/marlin.py index caa0c89749..b8a6283ced 100644 --- a/buildroot/share/PlatformIO/scripts/marlin.py +++ b/buildroot/share/PlatformIO/scripts/marlin.py @@ -1,5 +1,5 @@ # -# buildroot/share/PlatformIO/scripts/marlin.py +# marlin.py # Helper module with some commonly-used functions # import os,shutil @@ -10,13 +10,13 @@ env = DefaultEnvironment() from os.path import join def copytree(src, dst, symlinks=False, ignore=None): - for item in os.listdir(src): - s = join(src, item) - d = join(dst, item) - if os.path.isdir(s): - shutil.copytree(s, d, symlinks, ignore) - else: - shutil.copy2(s, d) + for item in os.listdir(src): + s = join(src, item) + d = join(dst, item) + if os.path.isdir(s): + shutil.copytree(s, d, symlinks, ignore) + else: + shutil.copy2(s, d) def replace_define(field, value): for define in env['CPPDEFINES']: diff --git a/buildroot/share/PlatformIO/scripts/mks_robin.py b/buildroot/share/PlatformIO/scripts/mks_robin.py index 2dea7c615f..7b423bedab 100644 --- a/buildroot/share/PlatformIO/scripts/mks_robin.py +++ b/buildroot/share/PlatformIO/scripts/mks_robin.py @@ -1,5 +1,5 @@ # -# buildroot/share/PlatformIO/scripts/mks_robin.py +# mks_robin.py # import robin robin.prepare("0x08007000", "mks_robin.ld", "Robin.bin") diff --git a/buildroot/share/PlatformIO/scripts/mks_robin_e3.py b/buildroot/share/PlatformIO/scripts/mks_robin_e3.py index 6ddeccbf80..645230c625 100644 --- a/buildroot/share/PlatformIO/scripts/mks_robin_e3.py +++ b/buildroot/share/PlatformIO/scripts/mks_robin_e3.py @@ -1,5 +1,5 @@ # -# buildroot/share/PlatformIO/scripts/mks_robin_e3.py +# mks_robin_e3.py # import robin robin.prepare("0x08005000", "mks_robin_e3.ld", "Robin_e3.bin") diff --git a/buildroot/share/PlatformIO/scripts/mks_robin_e3p.py b/buildroot/share/PlatformIO/scripts/mks_robin_e3p.py index 5eeb93c096..bb15cb5a70 100644 --- a/buildroot/share/PlatformIO/scripts/mks_robin_e3p.py +++ b/buildroot/share/PlatformIO/scripts/mks_robin_e3p.py @@ -1,5 +1,5 @@ # -# buildroot/share/PlatformIO/scripts/mks_robin_e3p.py +# mks_robin_e3p.py # import robin robin.prepare("0x08007000", "mks_robin_e3p.ld", "Robin_e3p.bin") diff --git a/buildroot/share/PlatformIO/scripts/mks_robin_lite.py b/buildroot/share/PlatformIO/scripts/mks_robin_lite.py index c2018336fd..123b043f7c 100644 --- a/buildroot/share/PlatformIO/scripts/mks_robin_lite.py +++ b/buildroot/share/PlatformIO/scripts/mks_robin_lite.py @@ -1,5 +1,5 @@ # -# buildroot/share/PlatformIO/scripts/mks_robin_lite.py +# mks_robin_lite.py # import robin robin.prepare("0x08005000", "mks_robin_lite.ld", "mksLite.bin") diff --git a/buildroot/share/PlatformIO/scripts/mks_robin_lite3.py b/buildroot/share/PlatformIO/scripts/mks_robin_lite3.py index 42c8fb18b6..092231eae8 100644 --- a/buildroot/share/PlatformIO/scripts/mks_robin_lite3.py +++ b/buildroot/share/PlatformIO/scripts/mks_robin_lite3.py @@ -1,5 +1,5 @@ # -# buildroot/share/PlatformIO/scripts/mks_robin_lite3.py +# mks_robin_lite3.py # import robin robin.prepare("0x08005000", "mks_robin_lite.ld", "mksLite3.bin") diff --git a/buildroot/share/PlatformIO/scripts/mks_robin_mini.py b/buildroot/share/PlatformIO/scripts/mks_robin_mini.py index b0d8388653..d1d175dd1c 100644 --- a/buildroot/share/PlatformIO/scripts/mks_robin_mini.py +++ b/buildroot/share/PlatformIO/scripts/mks_robin_mini.py @@ -1,5 +1,5 @@ # -# buildroot/share/PlatformIO/scripts/mks_robin_mini.py +# mks_robin_mini.py # import robin robin.prepare("0x08007000", "mks_robin_mini.ld", "Robin_mini.bin") diff --git a/buildroot/share/PlatformIO/scripts/mks_robin_nano.py b/buildroot/share/PlatformIO/scripts/mks_robin_nano.py index 35e99830c4..32d1af2366 100644 --- a/buildroot/share/PlatformIO/scripts/mks_robin_nano.py +++ b/buildroot/share/PlatformIO/scripts/mks_robin_nano.py @@ -1,5 +1,5 @@ # -# buildroot/share/PlatformIO/scripts/mks_robin_nano.py +# mks_robin_nano.py # import robin robin.prepare("0x08007000", "mks_robin_nano.ld", "Robin_nano.bin") diff --git a/buildroot/share/PlatformIO/scripts/mks_robin_nano35.py b/buildroot/share/PlatformIO/scripts/mks_robin_nano35.py index 4a5726ad5b..7e635bd6ec 100644 --- a/buildroot/share/PlatformIO/scripts/mks_robin_nano35.py +++ b/buildroot/share/PlatformIO/scripts/mks_robin_nano35.py @@ -1,5 +1,5 @@ # -# buildroot/share/PlatformIO/scripts/mks_robin_nano35.py +# mks_robin_nano35.py # import robin robin.prepare("0x08007000", "mks_robin_nano.ld", "Robin_nano35.bin") diff --git a/buildroot/share/PlatformIO/scripts/mks_robin_pro.py b/buildroot/share/PlatformIO/scripts/mks_robin_pro.py index 60e2482bb0..54526aeaef 100644 --- a/buildroot/share/PlatformIO/scripts/mks_robin_pro.py +++ b/buildroot/share/PlatformIO/scripts/mks_robin_pro.py @@ -1,5 +1,5 @@ # -# buildroot/share/PlatformIO/scripts/mks_robin_pro.py +# mks_robin_pro.py # import robin robin.prepare("0x08007000", "mks_robin_pro.ld", "Robin_pro.bin") diff --git a/buildroot/share/PlatformIO/scripts/offset_and_rename.py b/buildroot/share/PlatformIO/scripts/offset_and_rename.py index 9caed298e4..00803b722e 100644 --- a/buildroot/share/PlatformIO/scripts/offset_and_rename.py +++ b/buildroot/share/PlatformIO/scripts/offset_and_rename.py @@ -8,54 +8,56 @@ # # - For 'board_build.rename' add a post-action to rename the firmware file. # -import os,sys,marlin -Import("env") +import pioutil +if pioutil.is_pio_build(): + import os,sys,marlin + Import("env") -from SCons.Script import DefaultEnvironment -board = DefaultEnvironment().BoardConfig() + from SCons.Script import DefaultEnvironment + board = DefaultEnvironment().BoardConfig() -board_keys = board.get("build").keys() + board_keys = board.get("build").keys() -# -# For build.offset define LD_FLASH_OFFSET, used by ldscript.ld -# -if 'offset' in board_keys: - LD_FLASH_OFFSET = board.get("build.offset") - marlin.relocate_vtab(LD_FLASH_OFFSET) + # + # For build.offset define LD_FLASH_OFFSET, used by ldscript.ld + # + if 'offset' in board_keys: + LD_FLASH_OFFSET = board.get("build.offset") + marlin.relocate_vtab(LD_FLASH_OFFSET) - # Flash size - maximum_flash_size = int(board.get("upload.maximum_size") / 1024) - marlin.replace_define('STM32_FLASH_SIZE', maximum_flash_size) + # Flash size + maximum_flash_size = int(board.get("upload.maximum_size") / 1024) + marlin.replace_define('STM32_FLASH_SIZE', maximum_flash_size) - # Get upload.maximum_ram_size (defined by /buildroot/share/PlatformIO/boards/VARIOUS.json) - maximum_ram_size = board.get("upload.maximum_ram_size") + # Get upload.maximum_ram_size (defined by /buildroot/share/PlatformIO/boards/VARIOUS.json) + maximum_ram_size = board.get("upload.maximum_ram_size") - for i, flag in enumerate(env["LINKFLAGS"]): - if "-Wl,--defsym=LD_FLASH_OFFSET" in flag: - env["LINKFLAGS"][i] = "-Wl,--defsym=LD_FLASH_OFFSET=" + LD_FLASH_OFFSET - if "-Wl,--defsym=LD_MAX_DATA_SIZE" in flag: - env["LINKFLAGS"][i] = "-Wl,--defsym=LD_MAX_DATA_SIZE=" + str(maximum_ram_size - 40) + for i, flag in enumerate(env["LINKFLAGS"]): + if "-Wl,--defsym=LD_FLASH_OFFSET" in flag: + env["LINKFLAGS"][i] = "-Wl,--defsym=LD_FLASH_OFFSET=" + LD_FLASH_OFFSET + if "-Wl,--defsym=LD_MAX_DATA_SIZE" in flag: + env["LINKFLAGS"][i] = "-Wl,--defsym=LD_MAX_DATA_SIZE=" + str(maximum_ram_size - 40) -# -# For build.encrypt rename and encode the firmware file. -# -if 'encrypt' in board_keys: + # + # For build.encrypt rename and encode the firmware file. + # + if 'encrypt' in board_keys: - # Encrypt ${PROGNAME}.bin and save it with the name given in build.encrypt - def encrypt(source, target, env): - marlin.encrypt_mks(source, target, env, board.get("build.encrypt")) + # Encrypt ${PROGNAME}.bin and save it with the name given in build.encrypt + def encrypt(source, target, env): + marlin.encrypt_mks(source, target, env, board.get("build.encrypt")) - if board.get("build.encrypt") != "": - marlin.add_post_action(encrypt) + if board.get("build.encrypt") != "": + marlin.add_post_action(encrypt) -# -# For build.rename simply rename the firmware file. -# -if 'rename' in board_keys: + # + # For build.rename simply rename the firmware file. + # + if 'rename' in board_keys: - def rename_target(source, target, env): - firmware = os.path.join(target[0].dir.path, board.get("build.rename")) - import shutil - shutil.copy(target[0].path, firmware) + def rename_target(source, target, env): + firmware = os.path.join(target[0].dir.path, board.get("build.rename")) + import shutil + shutil.copy(target[0].path, firmware) - marlin.add_post_action(rename_target) + marlin.add_post_action(rename_target) diff --git a/buildroot/share/PlatformIO/scripts/openblt.py b/buildroot/share/PlatformIO/scripts/openblt.py index 6e71ca9eb8..61b38a5e87 100644 --- a/buildroot/share/PlatformIO/scripts/openblt.py +++ b/buildroot/share/PlatformIO/scripts/openblt.py @@ -1,18 +1,20 @@ # # Convert the ELF to an SREC file suitable for some bootloaders # -import os,sys -from os.path import join +import pioutil +if pioutil.is_pio_build(): + import os,sys + from os.path import join -Import("env") + Import("env") -board = env.BoardConfig() -board_keys = board.get("build").keys() -if 'encrypt' in board_keys: - env.AddPostAction( - join("$BUILD_DIR", "${PROGNAME}.bin"), - env.VerboseAction(" ".join([ - "$OBJCOPY", "-O", "srec", - "\"$BUILD_DIR/${PROGNAME}.elf\"", "\"" + join("$BUILD_DIR", board.get("build.encrypt")) + "\"" - ]), "Building $TARGET") - ) + board = env.BoardConfig() + board_keys = board.get("build").keys() + if 'encrypt' in board_keys: + env.AddPostAction( + join("$BUILD_DIR", "${PROGNAME}.bin"), + env.VerboseAction(" ".join([ + "$OBJCOPY", "-O", "srec", + "\"$BUILD_DIR/${PROGNAME}.elf\"", "\"" + join("$BUILD_DIR", board.get("build.encrypt")) + "\"" + ]), "Building $TARGET") + ) diff --git a/buildroot/share/PlatformIO/scripts/pioutil.py b/buildroot/share/PlatformIO/scripts/pioutil.py index f0c021fca7..b8c1e9cfca 100644 --- a/buildroot/share/PlatformIO/scripts/pioutil.py +++ b/buildroot/share/PlatformIO/scripts/pioutil.py @@ -1,8 +1,8 @@ # -# buildroot/share/PlatformIO/scripts/pioutil.py +# pioutil.py # -# Detect that 'vscode init' is running -def is_vscode_init(): +# Make sure 'vscode init' is not the current command +def is_pio_build(): from SCons.Script import COMMAND_LINE_TARGETS - return "idedata" in COMMAND_LINE_TARGETS or "_idedata" in COMMAND_LINE_TARGETS + return "idedata" not in COMMAND_LINE_TARGETS and "_idedata" not in COMMAND_LINE_TARGETS diff --git a/buildroot/share/PlatformIO/scripts/preflight-checks.py b/buildroot/share/PlatformIO/scripts/preflight-checks.py index 0dab3e4b1f..1837a7580d 100644 --- a/buildroot/share/PlatformIO/scripts/preflight-checks.py +++ b/buildroot/share/PlatformIO/scripts/preflight-checks.py @@ -2,100 +2,99 @@ # preflight-checks.py # Check for common issues prior to compiling # -import os,re,sys,pioutil -Import("env") +import pioutil +if pioutil.is_pio_build(): -# Detect that 'vscode init' is running -if pioutil.is_vscode_init(): - env.Exit(0) + import os,re,sys + Import("env") -def get_envs_for_board(board): - with open(os.path.join("Marlin", "src", "pins", "pins.h"), "r") as file: + def get_envs_for_board(board): + with open(os.path.join("Marlin", "src", "pins", "pins.h"), "r") as file: - if sys.platform == 'win32': - envregex = r"(?:env|win):" - elif sys.platform == 'darwin': - envregex = r"(?:env|mac|uni):" - elif sys.platform == 'linux': - envregex = r"(?:env|lin|uni):" - else: - envregex = r"(?:env):" + if sys.platform == 'win32': + envregex = r"(?:env|win):" + elif sys.platform == 'darwin': + envregex = r"(?:env|mac|uni):" + elif sys.platform == 'linux': + envregex = r"(?:env|lin|uni):" + else: + envregex = r"(?:env):" - r = re.compile(r"if\s+MB\((.+)\)") - if board.startswith("BOARD_"): - board = board[6:] + r = re.compile(r"if\s+MB\((.+)\)") + if board.startswith("BOARD_"): + board = board[6:] - for line in file: - mbs = r.findall(line) - if mbs and board in re.split(r",\s*", mbs[0]): - line = file.readline() - found_envs = re.match(r"\s*#include .+" + envregex, line) - if found_envs: - envlist = re.findall(envregex + r"(\w+)", line) - return [ "env:"+s for s in envlist ] - return [] + for line in file: + mbs = r.findall(line) + if mbs and board in re.split(r",\s*", mbs[0]): + line = file.readline() + found_envs = re.match(r"\s*#include .+" + envregex, line) + if found_envs: + envlist = re.findall(envregex + r"(\w+)", line) + return [ "env:"+s for s in envlist ] + return [] -def check_envs(build_env, board_envs, config): - if build_env in board_envs: - return True - ext = config.get(build_env, 'extends', default=None) - if ext: - if isinstance(ext, str): - return check_envs(ext, board_envs, config) - elif isinstance(ext, list): - for ext_env in ext: - if check_envs(ext_env, board_envs, config): - return True - return False + def check_envs(build_env, board_envs, config): + if build_env in board_envs: + return True + ext = config.get(build_env, 'extends', default=None) + if ext: + if isinstance(ext, str): + return check_envs(ext, board_envs, config) + elif isinstance(ext, list): + for ext_env in ext: + if check_envs(ext_env, board_envs, config): + return True + return False -def sanity_check_target(): - # Sanity checks: - if 'PIOENV' not in env: - raise SystemExit("Error: PIOENV is not defined. This script is intended to be used with PlatformIO") + def sanity_check_target(): + # Sanity checks: + if 'PIOENV' not in env: + raise SystemExit("Error: PIOENV is not defined. This script is intended to be used with PlatformIO") - if 'MARLIN_FEATURES' not in env: - raise SystemExit("Error: this script should be used after common Marlin scripts") + if 'MARLIN_FEATURES' not in env: + raise SystemExit("Error: this script should be used after common Marlin scripts") - if 'MOTHERBOARD' not in env['MARLIN_FEATURES']: - raise SystemExit("Error: MOTHERBOARD is not defined in Configuration.h") + if 'MOTHERBOARD' not in env['MARLIN_FEATURES']: + raise SystemExit("Error: MOTHERBOARD is not defined in Configuration.h") - build_env = env['PIOENV'] - motherboard = env['MARLIN_FEATURES']['MOTHERBOARD'] - board_envs = get_envs_for_board(motherboard) - config = env.GetProjectConfig() - result = check_envs("env:"+build_env, board_envs, config) + build_env = env['PIOENV'] + motherboard = env['MARLIN_FEATURES']['MOTHERBOARD'] + board_envs = get_envs_for_board(motherboard) + config = env.GetProjectConfig() + result = check_envs("env:"+build_env, board_envs, config) - if not result: - err = "Error: Build environment '%s' is incompatible with %s. Use one of these: %s" % \ - ( build_env, motherboard, ", ".join([ e[4:] for e in board_envs if e.startswith("env:") ]) ) - raise SystemExit(err) + if not result: + err = "Error: Build environment '%s' is incompatible with %s. Use one of these: %s" % \ + ( build_env, motherboard, ", ".join([ e[4:] for e in board_envs if e.startswith("env:") ]) ) + raise SystemExit(err) - # - # Check for Config files in two common incorrect places - # - for p in [ env['PROJECT_DIR'], os.path.join(env['PROJECT_DIR'], "config") ]: - for f in [ "Configuration.h", "Configuration_adv.h" ]: + # + # Check for Config files in two common incorrect places + # + for p in [ env['PROJECT_DIR'], os.path.join(env['PROJECT_DIR'], "config") ]: + for f in [ "Configuration.h", "Configuration_adv.h" ]: + if os.path.isfile(os.path.join(p, f)): + err = "ERROR: Config files found in directory %s. Please move them into the Marlin subfolder." % p + raise SystemExit(err) + + # + # Give warnings on every build + # + warnfile = os.path.join(env['PROJECT_BUILD_DIR'], build_env, "src", "src", "inc", "Warnings.cpp.o") + if os.path.exists(warnfile): + os.remove(warnfile) + + # + # Check for old files indicating an entangled Marlin (mixing old and new code) + # + mixedin = [] + p = os.path.join(env['PROJECT_DIR'], "Marlin", "src", "lcd", "dogm") + for f in [ "ultralcd_DOGM.cpp", "ultralcd_DOGM.h" ]: if os.path.isfile(os.path.join(p, f)): - err = "ERROR: Config files found in directory %s. Please move them into the Marlin subfolder." % p - raise SystemExit(err) + mixedin += [ f ] + if mixedin: + err = "ERROR: Old files fell into your Marlin folder. Remove %s and try again" % ", ".join(mixedin) + raise SystemExit(err) - # - # Give warnings on every build - # - warnfile = os.path.join(env['PROJECT_BUILD_DIR'], build_env, "src", "src", "inc", "Warnings.cpp.o") - if os.path.exists(warnfile): - os.remove(warnfile) - - # - # Check for old files indicating an entangled Marlin (mixing old and new code) - # - mixedin = [] - p = os.path.join(env['PROJECT_DIR'], "Marlin", "src", "lcd", "dogm") - for f in [ "ultralcd_DOGM.cpp", "ultralcd_DOGM.h" ]: - if os.path.isfile(os.path.join(p, f)): - mixedin += [ f ] - if mixedin: - err = "ERROR: Old files fell into your Marlin folder. Remove %s and try again" % ", ".join(mixedin) - raise SystemExit(err) - -sanity_check_target() + sanity_check_target() diff --git a/buildroot/share/PlatformIO/scripts/random-bin.py b/buildroot/share/PlatformIO/scripts/random-bin.py index c03b863448..5a88906c30 100644 --- a/buildroot/share/PlatformIO/scripts/random-bin.py +++ b/buildroot/share/PlatformIO/scripts/random-bin.py @@ -2,8 +2,8 @@ # random-bin.py # Set a unique firmware name based on current date and time # -Import("env") - -from datetime import datetime - -env['PROGNAME'] = datetime.now().strftime("firmware-%Y%m%d-%H%M%S") +import pioutil +if pioutil.is_pio_build(): + from datetime import datetime + Import("env") + env['PROGNAME'] = datetime.now().strftime("firmware-%Y%m%d-%H%M%S") diff --git a/buildroot/share/PlatformIO/scripts/robin.py b/buildroot/share/PlatformIO/scripts/robin.py index 50d0d92d2f..ffc9a43b90 100644 --- a/buildroot/share/PlatformIO/scripts/robin.py +++ b/buildroot/share/PlatformIO/scripts/robin.py @@ -1,12 +1,14 @@ # -# buildroot/share/PlatformIO/scripts/robin.py +# robin.py # -import marlin # Apply customizations for a MKS Robin def prepare(address, ldname, fwname): - def encrypt(source, target, env): - marlin.encrypt_mks(source, target, env, fwname) - marlin.relocate_firmware(address) - marlin.custom_ld_script(ldname) - marlin.add_post_action(encrypt); + import pioutil + if pioutil.is_pio_build(): + import marlin + def encrypt(source, target, env): + marlin.encrypt_mks(source, target, env, fwname) + marlin.relocate_firmware(address) + marlin.custom_ld_script(ldname) + marlin.add_post_action(encrypt); diff --git a/buildroot/share/PlatformIO/scripts/simulator.py b/buildroot/share/PlatformIO/scripts/simulator.py index fb9d93cceb..c6a5277b92 100644 --- a/buildroot/share/PlatformIO/scripts/simulator.py +++ b/buildroot/share/PlatformIO/scripts/simulator.py @@ -1,52 +1,54 @@ # +# simulator.py # PlatformIO pre: script for simulator builds # +import pioutil +if pioutil.is_pio_build(): + # Get the environment thus far for the build + Import("env") -# Get the environment thus far for the build -Import("env") + #print(env.Dump()) -#print(env.Dump()) + # + # Give the binary a distinctive name + # -# -# Give the binary a distinctive name -# + env['PROGNAME'] = "MarlinSimulator" -env['PROGNAME'] = "MarlinSimulator" + # + # If Xcode is installed add the path to its Frameworks folder, + # or if Mesa is installed try to use its GL/gl.h. + # -# -# If Xcode is installed add the path to its Frameworks folder, -# or if Mesa is installed try to use its GL/gl.h. -# + import sys + if sys.platform == 'darwin': -import sys -if sys.platform == 'darwin': + # + # Silence half of the ranlib warnings. (No equivalent for 'ARFLAGS') + # + env['RANLIBFLAGS'] += [ "-no_warning_for_no_symbols" ] - # - # Silence half of the ranlib warnings. (No equivalent for 'ARFLAGS') - # - env['RANLIBFLAGS'] += [ "-no_warning_for_no_symbols" ] + # Default paths for Xcode and a lucky GL/gl.h dropped by Mesa + xcode_path = "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks" + mesa_path = "/opt/local/include/GL/gl.h" - # Default paths for Xcode and a lucky GL/gl.h dropped by Mesa - xcode_path = "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks" - mesa_path = "/opt/local/include/GL/gl.h" + import os.path - import os.path + if os.path.exists(xcode_path): - if os.path.exists(xcode_path): + env['BUILD_FLAGS'] += [ "-F" + xcode_path ] + print("Using OpenGL framework headers from Xcode.app") - env['BUILD_FLAGS'] += [ "-F" + xcode_path ] - print("Using OpenGL framework headers from Xcode.app") + elif os.path.exists(mesa_path): - elif os.path.exists(mesa_path): + env['BUILD_FLAGS'] += [ '-D__MESA__' ] + print("Using OpenGL header from", mesa_path) - env['BUILD_FLAGS'] += [ '-D__MESA__' ] - print("Using OpenGL header from", mesa_path) + else: - else: + print("\n\nNo OpenGL headers found. Install Xcode for matching headers, or use 'sudo port install mesa' to get a GL/gl.h.\n\n") - print("\n\nNo OpenGL headers found. Install Xcode for matching headers, or use 'sudo port install mesa' to get a GL/gl.h.\n\n") + # Break out of the PIO build immediately + sys.exit(1) - # Break out of the PIO build immediately - sys.exit(1) - -env.AddCustomTarget("upload", "$BUILD_DIR/${PROGNAME}", "$BUILD_DIR/${PROGNAME}") + env.AddCustomTarget("upload", "$BUILD_DIR/${PROGNAME}", "$BUILD_DIR/${PROGNAME}") diff --git a/buildroot/share/PlatformIO/scripts/stm32_serialbuffer.py b/buildroot/share/PlatformIO/scripts/stm32_serialbuffer.py index c3779289e0..033803009e 100644 --- a/buildroot/share/PlatformIO/scripts/stm32_serialbuffer.py +++ b/buildroot/share/PlatformIO/scripts/stm32_serialbuffer.py @@ -1,59 +1,61 @@ # # stm32_serialbuffer.py # -Import("env") +import pioutil +if pioutil.is_pio_build(): + Import("env") -# Marlin uses the `RX_BUFFER_SIZE` \ `TX_BUFFER_SIZE` options to -# configure buffer sizes for receiving \ transmitting serial data. -# Stm32duino uses another set of defines for the same purpose, so this -# script gets the values from the configuration and uses them to define -# `SERIAL_RX_BUFFER_SIZE` and `SERIAL_TX_BUFFER_SIZE` as global build -# flags so they are available for use by the platform. -# -# The script will set the value as the default one (64 bytes) -# or the user-configured one, whichever is higher. -# -# Marlin's default buffer sizes are 128 for RX and 32 for TX. -# The highest value is taken (128/64). -# -# If MF_*_BUFFER_SIZE, SERIAL_*_BUFFER_SIZE, USART_*_BUF_SIZE, are -# defined, the first of these values will be used as the minimum. -build_flags = env.ParseFlags(env.get('BUILD_FLAGS'))["CPPDEFINES"] -mf = env["MARLIN_FEATURES"] + # Get a build flag's value or None + def getBuildFlagValue(name): + for flag in build_flags: + if isinstance(flag, list) and flag[0] == name: + return flag[1] -# Get a build flag's value or None -def getBuildFlagValue(name): - for flag in build_flags: - if isinstance(flag, list) and flag[0] == name: - return flag[1] + return None - return None + # Get an overriding buffer size for RX or TX from the build flags + def getInternalSize(side): + return getBuildFlagValue(f"MF_{side}_BUFFER_SIZE") or \ + getBuildFlagValue(f"SERIAL_{side}_BUFFER_SIZE") or \ + getBuildFlagValue(f"USART_{side}_BUF_SIZE") -# Get an overriding buffer size for RX or TX from the build flags -def getInternalSize(side): - return getBuildFlagValue(f"MF_{side}_BUFFER_SIZE") or \ - getBuildFlagValue(f"SERIAL_{side}_BUFFER_SIZE") or \ - getBuildFlagValue(f"USART_{side}_BUF_SIZE") + # Get the largest defined buffer size for RX or TX + def getBufferSize(side, default): + # Get a build flag value or fall back to the given default + internal = int(getInternalSize(side) or default) + flag = side + "_BUFFER_SIZE" + # Return the largest value + return max(int(mf[flag]), internal) if flag in mf else internal -# Get the largest defined buffer size for RX or TX -def getBufferSize(side, default): - # Get a build flag value or fall back to the given default - internal = int(getInternalSize(side) or default) - flag = side + "_BUFFER_SIZE" - # Return the largest value - return max(int(mf[flag]), internal) if flag in mf else internal + # Add a build flag if it's not already defined + def tryAddFlag(name, value): + if getBuildFlagValue(name) is None: + env.Append(BUILD_FLAGS=[f"-D{name}={value}"]) -# Add a build flag if it's not already defined -def tryAddFlag(name, value): - if getBuildFlagValue(name) is None: - env.Append(BUILD_FLAGS=[f"-D{name}={value}"]) + # Marlin uses the `RX_BUFFER_SIZE` \ `TX_BUFFER_SIZE` options to + # configure buffer sizes for receiving \ transmitting serial data. + # Stm32duino uses another set of defines for the same purpose, so this + # script gets the values from the configuration and uses them to define + # `SERIAL_RX_BUFFER_SIZE` and `SERIAL_TX_BUFFER_SIZE` as global build + # flags so they are available for use by the platform. + # + # The script will set the value as the default one (64 bytes) + # or the user-configured one, whichever is higher. + # + # Marlin's default buffer sizes are 128 for RX and 32 for TX. + # The highest value is taken (128/64). + # + # If MF_*_BUFFER_SIZE, SERIAL_*_BUFFER_SIZE, USART_*_BUF_SIZE, are + # defined, the first of these values will be used as the minimum. + build_flags = env.ParseFlags(env.get('BUILD_FLAGS'))["CPPDEFINES"] + mf = env["MARLIN_FEATURES"] -# Get the largest defined buffer sizes for RX or TX, using defaults for undefined -rxBuf = getBufferSize("RX", 128) -txBuf = getBufferSize("TX", 64) + # Get the largest defined buffer sizes for RX or TX, using defaults for undefined + rxBuf = getBufferSize("RX", 128) + txBuf = getBufferSize("TX", 64) -# Provide serial buffer sizes to the stm32duino platform -tryAddFlag("SERIAL_RX_BUFFER_SIZE", rxBuf) -tryAddFlag("SERIAL_TX_BUFFER_SIZE", txBuf) -tryAddFlag("USART_RX_BUF_SIZE", rxBuf) -tryAddFlag("USART_TX_BUF_SIZE", txBuf) + # Provide serial buffer sizes to the stm32duino platform + tryAddFlag("SERIAL_RX_BUFFER_SIZE", rxBuf) + tryAddFlag("SERIAL_TX_BUFFER_SIZE", txBuf) + tryAddFlag("USART_RX_BUF_SIZE", rxBuf) + tryAddFlag("USART_TX_BUF_SIZE", txBuf) diff --git a/ini/stm32f1-maple.ini b/ini/stm32f1-maple.ini index e0b4ad711a..969bb815da 100644 --- a/ini/stm32f1-maple.ini +++ b/ini/stm32f1-maple.ini @@ -326,7 +326,6 @@ platform = ${common_stm32f1.platform} extends = common_stm32f1 board = marlin_CHITU_F103 extra_scripts = ${common_stm32f1.extra_scripts} - pre:buildroot/share/PlatformIO/scripts/common-dependencies.py pre:buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py buildroot/share/PlatformIO/scripts/chitu_crypt.py build_flags = ${common_stm32f1.build_flags} From 7b792014703e778d8fc0b1760747d50ab8f340d1 Mon Sep 17 00:00:00 2001 From: BigTreeTech <38851044+bigtreetech@users.noreply.github.com> Date: Thu, 4 Nov 2021 18:54:38 +0800 Subject: [PATCH 101/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Octopus-Pro=20Max3?= =?UTF-8?q?1865=20/=20SPI=20(#23072)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h | 1 + .../src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h | 14 +++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h index a93ed68201..fd367e87c0 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h @@ -32,6 +32,7 @@ #define TEMP_0_MISO_PIN PA6 #define TEMP_0_MOSI_PIN PA7 #define SOFTWARE_SPI // Max31865 and LCD SD share a set of SPIs, Set SD to softwareSPI for Max31865 + #define FORCE_SOFT_SPI #else #define TEMP_0_PIN PF4 // TH0 #endif diff --git a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h index 6dc90bf910..efeff04f25 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h @@ -168,13 +168,6 @@ #define POWER_LOSS_PIN PC0 // PWRDET #endif -// -// NeoPixel LED -// -#ifndef NEOPIXEL_PIN - #define NEOPIXEL_PIN PB0 -#endif - // // Steppers // @@ -524,6 +517,13 @@ #define BTN_ENC EXP1_09_PIN #endif +// +// NeoPixel LED +// +#ifndef NEOPIXEL_PIN + #define NEOPIXEL_PIN PB0 +#endif + // // WIFI // From a9dc737624cf45bceff1866ce4807bb2cc36ac44 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 4 Nov 2021 18:04:04 +0100 Subject: [PATCH 102/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20TFT=20backlight=20?= =?UTF-8?q?[STM32]=20(#23062)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/STM32/fast_pwm.cpp | 4 +++- Marlin/src/HAL/STM32F1/fast_pwm.cpp | 1 + Marlin/src/lcd/dogm/marlinui_DOGM.cpp | 4 +++- Marlin/src/lcd/tft/ui_common.cpp | 4 +++- Marlin/src/lcd/tft_io/tft_io.cpp | 3 +-- Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h | 14 +++++++++++--- 6 files changed, 22 insertions(+), 8 deletions(-) diff --git a/Marlin/src/HAL/STM32/fast_pwm.cpp b/Marlin/src/HAL/STM32/fast_pwm.cpp index d4d695b969..4d450374d3 100644 --- a/Marlin/src/HAL/STM32/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32/fast_pwm.cpp @@ -28,11 +28,13 @@ #include "timers.h" void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { + if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer + PinName pin_name = digitalPinToPinName(pin); TIM_TypeDef *Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); + uint16_t adj_val = Instance->ARR * v / v_size; if (invert) adj_val = Instance->ARR - adj_val; - switch (get_pwm_channel(pin_name)) { case TIM_CHANNEL_1: LL_TIM_OC_SetCompareCH1(Instance, adj_val); break; case TIM_CHANNEL_2: LL_TIM_OC_SetCompareCH2(Instance, adj_val); break; diff --git a/Marlin/src/HAL/STM32F1/fast_pwm.cpp b/Marlin/src/HAL/STM32F1/fast_pwm.cpp index 6a9d7e8a19..5171c11545 100644 --- a/Marlin/src/HAL/STM32F1/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32F1/fast_pwm.cpp @@ -28,6 +28,7 @@ #include "timers.h" void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { + if (!PWM_PIN(pin)) return; timer_dev *timer = PIN_MAP[pin].timer_device; uint16_t max_val = timer->regs.bas->ARR * v / v_size; if (invert) max_val = v_size - max_val; diff --git a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp index f339cad706..59c74148ad 100644 --- a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp +++ b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp @@ -339,12 +339,14 @@ void MarlinUI::draw_kill_screen() { void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop #if HAS_LCD_BRIGHTNESS + void MarlinUI::_set_brightness() { #if PIN_EXISTS(TFT_BACKLIGHT) if (PWM_PIN(TFT_BACKLIGHT_PIN)) - set_pwm_duty(pin_t(TFT_BACKLIGHT_PIN), brightness); + analogWrite(pin_t(TFT_BACKLIGHT_PIN), backlight ? brightness : 0); #endif } + #endif #if HAS_LCD_MENU diff --git a/Marlin/src/lcd/tft/ui_common.cpp b/Marlin/src/lcd/tft/ui_common.cpp index 85ae21e867..acc91f51fa 100644 --- a/Marlin/src/lcd/tft/ui_common.cpp +++ b/Marlin/src/lcd/tft/ui_common.cpp @@ -210,12 +210,14 @@ void MarlinUI::clear_lcd() { } #if HAS_LCD_BRIGHTNESS + void MarlinUI::_set_brightness() { #if PIN_EXISTS(TFT_BACKLIGHT) if (PWM_PIN(TFT_BACKLIGHT_PIN)) - set_pwm_duty(pin_t(TFT_BACKLIGHT_PIN), brightness); + analogWrite(pin_t(TFT_BACKLIGHT_PIN), backlight ? brightness : 0); #endif } + #endif #if ENABLED(TOUCH_SCREEN_CALIBRATION) diff --git a/Marlin/src/lcd/tft_io/tft_io.cpp b/Marlin/src/lcd/tft_io/tft_io.cpp index 6ec3bedcdf..acb78c3e6e 100644 --- a/Marlin/src/lcd/tft_io/tft_io.cpp +++ b/Marlin/src/lcd/tft_io/tft_io.cpp @@ -152,8 +152,7 @@ if (lcd_id != 0xFFFFFFFF) return; #endif #if PIN_EXISTS(TFT_BACKLIGHT) && ENABLED(DELAYED_BACKLIGHT_INIT) - WRITE(TFT_BACKLIGHT_PIN, HIGH); - TERN_(HAS_LCD_BRIGHTNESS, ui._set_brightness()); + TERN(HAS_LCD_BRIGHTNESS, ui._set_brightness(), WRITE(TFT_BACKLIGHT_PIN, HIGH)); #endif } diff --git a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h index 7585a6e289..3a8019a27e 100644 --- a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h +++ b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h @@ -89,9 +89,17 @@ #define HEATER_BED_PIN PA8 // pin 67 (Hot Bed Mosfet) #define FAN_PIN PA15 // pin 77 (4cm Fan) -#define FAN_SOFT_PWM // Required to avoid issues with heating or STLink -#define FAN_MIN_PWM 35 // Fan will not start in 1-30 range -#define FAN_MAX_PWM 255 +#ifdef MAPLE_STM32F1 + #define FAN_SOFT_PWM // Required to avoid issues with heating or STLink + #define FAN_MIN_PWM 35 // Fan will not start in 1-30 range + #define FAN_MAX_PWM 255 +#else + #define FAST_PWM_FAN // STM32 Variant allow TIMER2 Hardware PWM + #define FAST_PWM_FAN_FREQUENCY 31400 // This frequency allow a good range, fan starts at 3%, half noise at 50% + #define NEEDS_HARDWARE_PWM 1 + #define FAN_MIN_PWM 5 + #define FAN_MAX_PWM 255 +#endif //#define BEEPER_PIN PD13 // pin 60 (Servo PWM output 5V/GND on Board V0G+) made for BL-Touch sensor // Can drive a PC Buzzer, if connected between PWM and 5V pins From f53d627750ab0cf377ea1738bdcf792f2ef37de9 Mon Sep 17 00:00:00 2001 From: Skruppy Date: Thu, 4 Nov 2021 18:11:57 +0100 Subject: [PATCH 103/532] =?UTF-8?q?=F0=9F=90=9B=20Prevent=20AVR=20watchdog?= =?UTF-8?q?pile=20(#23075)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 3 +++ Marlin/src/HAL/AVR/HAL.cpp | 21 ++++++++++++++++++++- Marlin/src/HAL/AVR/HAL.h | 6 +++--- Marlin/src/inc/SanityCheck.h | 5 +++++ 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 934ceceafd..fc495a6ea6 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -4224,3 +4224,6 @@ */ //#define SOFT_RESET_VIA_SERIAL // 'KILL' and '^X' commands will soft-reset the controller //#define SOFT_RESET_ON_KILL // Use a digital button to soft-reset the controller after KILL + +// Report uncleaned reset reason from register r2 instead of MCUSR. Supported by Optiboot on AVR. +//#define OPTIBOOT_RESET_REASON diff --git a/Marlin/src/HAL/AVR/HAL.cpp b/Marlin/src/HAL/AVR/HAL.cpp index 708583b262..d7bf2a6f6f 100644 --- a/Marlin/src/HAL/AVR/HAL.cpp +++ b/Marlin/src/HAL/AVR/HAL.cpp @@ -35,12 +35,31 @@ // Public Variables // ------------------------ -//uint8_t MCUSR; +// Don't initialize/override variable (which would happen in .init4) +uint8_t reset_reason __attribute__((section(".noinit"))); // ------------------------ // Public functions // ------------------------ +__attribute__((naked)) // Don't output function pro- and epilogue +__attribute__((used)) // Output the function, even if "not used" +__attribute__((section(".init3"))) // Put in an early user definable section +void HAL_save_reset_reason() { + #if ENABLED(OPTIBOOT_RESET_REASON) + __asm__ __volatile__( + A("STS %0, r2") + : "=m"(reset_reason) + ); + #else + reset_reason = MCUSR; + #endif + + // Clear within 16ms since WDRF bit enables a 16ms watchdog timer -> Boot loop + MCUSR = 0; + wdt_disable(); +} + void HAL_init() { // Init Servo Pins #define INIT_SERVO(N) OUT_WRITE(SERVO##N##_PIN, LOW) diff --git a/Marlin/src/HAL/AVR/HAL.h b/Marlin/src/HAL/AVR/HAL.h index ad1f47a4e6..2217f239d6 100644 --- a/Marlin/src/HAL/AVR/HAL.h +++ b/Marlin/src/HAL/AVR/HAL.h @@ -91,7 +91,7 @@ typedef int8_t pin_t; // Public Variables // ------------------------ -//extern uint8_t MCUSR; +extern uint8_t reset_reason; // Serial ports #ifdef USBCON @@ -152,8 +152,8 @@ void HAL_init(); //void _delay_ms(const int delay); -inline void HAL_clear_reset_source() { MCUSR = 0; } -inline uint8_t HAL_get_reset_source() { return MCUSR; } +inline void HAL_clear_reset_source() { } +inline uint8_t HAL_get_reset_source() { return reset_reason; } void HAL_reboot(); diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index b4eaf242b7..fbdda2c127 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2489,6 +2489,11 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "An encoder button is required or SOFT_RESET_ON_KILL will reset the printer without notice!" #endif +// Reset reason for AVR +#if ENABLED(OPTIBOOT_RESET_REASON) && !defined(__AVR__) + #error "OPTIBOOT_RESET_REASON only applies to AVR." +#endif + /** * I2C bus */ From f6147e038bbd4b4b96c8c188107b9e7d4f02d534 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 4 Nov 2021 12:18:23 -0500 Subject: [PATCH 104/532] =?UTF-8?q?=F0=9F=8D=BB=20Get/clear=20reset=20sour?= =?UTF-8?q?ce=20earlier?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Followup to #23075 --- Marlin/src/MarlinCore.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index eb57835f96..5e8881d1c6 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -1104,6 +1104,10 @@ void setup() { tmc_standby_setup(); // TMC Low Power Standby pins must be set early or they're not usable + // Check startup - does nothing if bootloader sets MCUSR to 0 + const byte mcu = HAL_get_reset_source(); + HAL_clear_reset_source(); + #if ENABLED(MARLIN_DEV_MODE) auto log_current_ms = [&](PGM_P const msg) { SERIAL_ECHO_START(); @@ -1232,15 +1236,14 @@ void setup() { SETUP_RUN(esp_wifi_init()); - // Check startup - does nothing if bootloader sets MCUSR to 0 - const byte mcu = HAL_get_reset_source(); + // Report Reset Reason if (mcu & RST_POWER_ON) SERIAL_ECHOLNPGM(STR_POWERUP); if (mcu & RST_EXTERNAL) SERIAL_ECHOLNPGM(STR_EXTERNAL_RESET); if (mcu & RST_BROWN_OUT) SERIAL_ECHOLNPGM(STR_BROWNOUT_RESET); if (mcu & RST_WATCHDOG) SERIAL_ECHOLNPGM(STR_WATCHDOG_RESET); if (mcu & RST_SOFTWARE) SERIAL_ECHOLNPGM(STR_SOFTWARE_RESET); - HAL_clear_reset_source(); + // Identify myself as Marlin x.x.x SERIAL_ECHOLNPGM("Marlin " SHORT_BUILD_VERSION); #if defined(STRING_DISTRIBUTION_DATE) && defined(STRING_CONFIG_H_AUTHOR) SERIAL_ECHO_MSG( From 3e8cdef36b42d4cae1efc8fe3272497827dcc440 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 5 Nov 2021 01:00:14 +0000 Subject: [PATCH 105/532] [cron] Bump distribution date (2021-11-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 e562730ae3..b94659a044 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 "2021-11-04" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 f695d0a1b2..115eb4bbd2 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 "2021-11-04" + #define STRING_DISTRIBUTION_DATE "2021-11-05" #endif /** From f5284715fb7c35a5ba9caf98f45f533db709eeb4 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 6 Nov 2021 00:58:50 +0000 Subject: [PATCH 106/532] [cron] Bump distribution date (2021-11-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 b94659a044..c3618ba586 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 "2021-11-05" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 115eb4bbd2..670be92f4b 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 "2021-11-05" + #define STRING_DISTRIBUTION_DATE "2021-11-06" #endif /** From dfdffca2bddb2c7301b6befe5d453da5b84dc16f Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 7 Nov 2021 01:06:43 +0000 Subject: [PATCH 107/532] [cron] Bump distribution date (2021-11-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 c3618ba586..ce8acbbc3e 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 "2021-11-06" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 670be92f4b..7626b58e3e 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 "2021-11-06" + #define STRING_DISTRIBUTION_DATE "2021-11-07" #endif /** From c07aa875bc8c285adf7f967df656f6bf8a13bf92 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Sun, 7 Nov 2021 15:27:53 +1300 Subject: [PATCH 108/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20DGUS=20Reloaded=20?= =?UTF-8?q?status=20message=20(#23090)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp index 9bae2b95d3..17e7a38445 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp @@ -409,7 +409,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(msg), DGUS_STATUS_LEN, false, true); + dgus_display.WriteStringPGM((uint16_t)DGUS_Addr::MESSAGE_Status, FTOP(fmsg), DGUS_STATUS_LEN, false, true); status_expire = (duration > 0 ? ExtUI::safe_millis() + duration : 0); } From 30a69f76a3dc9deaef6974d18107d7f759502092 Mon Sep 17 00:00:00 2001 From: dwzg <50058606+dwzg@users.noreply.github.com> Date: Sun, 7 Nov 2021 04:48:00 +0100 Subject: [PATCH 109/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20JyersUI=20scrollin?= =?UTF-8?q?g=20filename,=20etc.=20(#23082)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/lcd/e3v2/jyersui/dwin.cpp | 50 +++++++++++++++------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp index 80ef88d0b2..4c838a2e21 100644 --- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp @@ -678,31 +678,31 @@ void CrealityDWINClass::Draw_Print_Filename(const bool reset/*=false*/) { static uint8_t namescrl = 0; if (reset) namescrl = 0; if (process == Print) { - size_t len = strlen(filename); - int8_t pos = len; - if (pos > 30) { - pos -= namescrl; - len = _MIN(pos, 30); - char dispname[len + 1]; + constexpr int8_t maxlen = 30; + char *outstr = filename; + size_t slen = strlen(filename); + int8_t outlen = slen; + if (slen > maxlen) { + char dispname[maxlen + 1]; + int8_t pos = slen - namescrl, len = maxlen; if (pos >= 0) { + NOMORE(len, pos); LOOP_L_N(i, len) dispname[i] = filename[i + namescrl]; } else { - LOOP_L_N(i, 30 + pos) dispname[i] = ' '; - LOOP_S_L_N(i, 30 + pos, 30) dispname[i] = filename[i - (30 + pos)]; + const int8_t mp = maxlen + pos; + LOOP_L_N(i, mp) dispname[i] = ' '; + LOOP_S_L_N(i, mp, maxlen) dispname[i] = filename[i - mp]; + if (mp <= 0) namescrl = 0; } dispname[len] = '\0'; - DWIN_Draw_Rectangle(1, Color_Bg_Black, 8, 50, DWIN_WIDTH - 8, 80); - const int8_t npos = (DWIN_WIDTH - 30 * MENU_CHR_W) / 2; - DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, npos, 60, dispname); - if (-pos >= 30) namescrl = 0; + outstr = dispname; + outlen = maxlen; namescrl++; } - else { - DWIN_Draw_Rectangle(1, Color_Bg_Black, 8, 50, DWIN_WIDTH - 8, 80); - const int8_t npos = (DWIN_WIDTH - strlen(filename) * MENU_CHR_W) / 2; - DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, npos, 60, filename); - } + DWIN_Draw_Rectangle(1, Color_Bg_Black, 8, 50, DWIN_WIDTH - 8, 80); + const int8_t npos = (DWIN_WIDTH - outlen * MENU_CHR_W) / 2; + DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, npos, 60, outstr); } } @@ -4702,7 +4702,7 @@ void CrealityDWINClass::Update_Status(const char * const text) { char header[4]; LOOP_L_N(i, 3) header[i] = text[i]; header[3] = '\0'; - if (strcmp_P(header,"") == 0) { + if (strcmp_P(header, PSTR("")) == 0) { LOOP_L_N(i, _MIN((size_t)LONG_FILENAME_LENGTH, strlen(text))) filename[i] = text[i + 3]; filename[_MIN((size_t)LONG_FILENAME_LENGTH - 1, strlen(text))] = '\0'; Draw_Print_Filename(true); @@ -4798,22 +4798,23 @@ void CrealityDWINClass::State_Update() { } void CrealityDWINClass::Screen_Update() { + const millis_t ms = millis(); static millis_t scrltime = 0; - if (ELAPSED(millis(), scrltime)) { - scrltime = millis() + 200; + if (ELAPSED(ms, scrltime)) { + scrltime = ms + 200; Update_Status_Bar(); if (process == Print) Draw_Print_Filename(); } static millis_t statustime = 0; - if (ELAPSED(millis(), statustime)) { - statustime = millis() + 500; + if (ELAPSED(ms, statustime)) { + statustime = ms + 500; Draw_Status_Area(); } static millis_t printtime = 0; - if (ELAPSED(millis(), printtime)) { - printtime = millis() + 1000; + if (ELAPSED(ms, printtime)) { + printtime = ms + 1000; if (process == Print) { Draw_Print_ProgressBar(); Draw_Print_ProgressElapsed(); @@ -5000,6 +5001,7 @@ void MarlinUI::init() { void MarlinUI::pause_show_message(const PauseMessage message, const PauseMode mode/*=PAUSE_MODE_SAME*/, const uint8_t extruder/*=active_extruder*/) { switch (message) { case PAUSE_MESSAGE_INSERT: CrealityDWIN.Confirm_Handler(FilInsert); break; + case PAUSE_MESSAGE_PURGE: case PAUSE_MESSAGE_OPTION: CrealityDWIN.Popup_Handler(PurgeMore); break; case PAUSE_MESSAGE_HEAT: CrealityDWIN.Confirm_Handler(HeaterTime); break; case PAUSE_MESSAGE_WAITING: CrealityDWIN.Draw_Print_Screen(); break; From 27220f09440e90ed490087273a2357b84a41663c Mon Sep 17 00:00:00 2001 From: Jin <3448324+jinhong-@users.noreply.github.com> Date: Sun, 7 Nov 2021 11:53:36 +0800 Subject: [PATCH 110/532] =?UTF-8?q?=F0=9F=8D=BB=20Preliminary=20fix=20for?= =?UTF-8?q?=20Max31865=20SPI=20(#22682)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/HAL/shared/Delay.h | 15 +++- Marlin/src/HAL/shared/Marduino.h | 2 +- Marlin/src/libs/MAX31865.cpp | 125 +++++++++++++++---------------- Marlin/src/libs/MAX31865.h | 11 ++- buildroot/tests/LPC1769 | 3 +- buildroot/tests/teensy41 | 5 +- 6 files changed, 90 insertions(+), 71 deletions(-) diff --git a/Marlin/src/HAL/shared/Delay.h b/Marlin/src/HAL/shared/Delay.h index 04df35d88d..df07881f01 100644 --- a/Marlin/src/HAL/shared/Delay.h +++ b/Marlin/src/HAL/shared/Delay.h @@ -92,6 +92,12 @@ void calibrate_delay_loop(); #define DELAY_CYCLES(X) do { SmartDelay _smrtdly_X(X); } while(0) + #if GCC_VERSION <= 70000 + #define DELAY_CYCLES_VAR(X) DelayCycleFnc(X) + #else + #define DELAY_CYCLES_VAR DELAY_CYCLES + #endif + // For delay in microseconds, no smart delay selection is required, directly call the delay function // Teensy compiler is too old and does not accept smart delay compile-time / run-time selection correctly #define DELAY_US(x) DelayCycleFnc((x) * ((F_CPU) / 1000000UL)) @@ -200,9 +206,12 @@ void calibrate_delay_loop(); #endif #if ENABLED(DELAY_NS_ROUND_DOWN) - #define DELAY_NS(x) DELAY_CYCLES((x) * ((F_CPU) / 1000000UL) / 1000UL) // floor + #define _NS_TO_CYCLES(x) ( (x) * ((F_CPU) / 1000000UL) / 1000UL) // floor #elif ENABLED(DELAY_NS_ROUND_CLOSEST) - #define DELAY_NS(x) DELAY_CYCLES(((x) * ((F_CPU) / 1000000UL) + 500) / 1000UL) // round + #define _NS_TO_CYCLES(x) (((x) * ((F_CPU) / 1000000UL) + 500) / 1000UL) // round #else - #define DELAY_NS(x) DELAY_CYCLES(((x) * ((F_CPU) / 1000000UL) + 999) / 1000UL) // "ceil" + #define _NS_TO_CYCLES(x) (((x) * ((F_CPU) / 1000000UL) + 999) / 1000UL) // "ceil" #endif + +#define DELAY_NS(x) DELAY_CYCLES(_NS_TO_CYCLES(x)) +#define DELAY_NS_VAR(x) DELAY_CYCLES_VAR(_NS_TO_CYCLES(x)) diff --git a/Marlin/src/HAL/shared/Marduino.h b/Marlin/src/HAL/shared/Marduino.h index 3b5a68a373..0e2a021a3c 100644 --- a/Marlin/src/HAL/shared/Marduino.h +++ b/Marlin/src/HAL/shared/Marduino.h @@ -39,7 +39,7 @@ #define DISABLED(V...) DO(DIS,&&,V) #undef _BV -#define _BV(b) (1UL << (b)) +#define _BV(b) (1 << (b)) #ifndef SBI #define SBI(A,B) (A |= _BV(B)) #endif diff --git a/Marlin/src/libs/MAX31865.cpp b/Marlin/src/libs/MAX31865.cpp index df0702b9fb..94048af208 100644 --- a/Marlin/src/libs/MAX31865.cpp +++ b/Marlin/src/libs/MAX31865.cpp @@ -48,20 +48,17 @@ #if HAS_MAX31865 && !USE_ADAFRUIT_MAX31865 -//#include // TODO: switch to SPIclass/SoftSPI #include "MAX31865.h" +#ifdef TARGET_LPC1768 + #include +#endif + // The maximum speed the MAX31865 can do is 5 MHz SPISettings MAX31865::spiConfig = SPISettings( - #if defined(TARGET_LPC1768) - SPI_QUARTER_SPEED - #elif defined(ARDUINO_ARCH_STM32) - SPI_CLOCK_DIV4 - #else - 500000 - #endif - , MSBFIRST - , SPI_MODE_1 // CPOL0 CPHA1 + TERN(TARGET_LPC1768, SPI_QUARTER_SPEED, TERN(ARDUINO_ARCH_STM32, SPI_CLOCK_DIV4, 500000)), + MSBFIRST, + SPI_MODE1 // CPOL0 CPHA1 ); #ifndef LARGE_PINMAP @@ -93,7 +90,7 @@ SPISettings MAX31865::spiConfig = SPISettings( _sclk = _miso = _mosi = -1; } -#else +#else // LARGE_PINMAP /** * Create the interface object using software (bitbang) SPI for PIN values @@ -106,9 +103,7 @@ SPISettings MAX31865::spiConfig = SPISettings( * @param spi_clk the SPI clock pin to use * @param pin_mapping set to 1 for positive pin values */ - MAX31865::MAX31865(uint32_t spi_cs, uint32_t spi_mosi, - uint32_t spi_miso, uint32_t spi_clk, - uint8_t pin_mapping) { + MAX31865::MAX31865(uint32_t spi_cs, uint32_t spi_mosi, uint32_t spi_miso, uint32_t spi_clk, uint8_t pin_mapping) { _cs = spi_cs; _mosi = spi_mosi; _miso = spi_miso; @@ -130,14 +125,12 @@ SPISettings MAX31865::spiConfig = SPISettings( #endif // LARGE_PINMAP - /** * * Instance & Class methods * */ - /** * Initialize the SPI interface and set the number of RTD wires used * @@ -152,22 +145,13 @@ void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) { OUT_WRITE(_cs, HIGH); if (_sclk != TERN(LARGE_PINMAP, -1UL, -1)) { - // Define pin modes for Software SPI - #ifdef MAX31865_DEBUG - SERIAL_ECHOLN("Initializing MAX31865 Software SPI"); - #endif - - OUT_WRITE(_sclk, LOW); - SET_OUTPUT(_mosi); - SET_INPUT(_miso); + softSpiBegin(SPI_QUARTER_SPEED); // Define pin modes for Software SPI } else { - // Start and configure hardware SPI #ifdef MAX31865_DEBUG - SERIAL_ECHOLN("Initializing MAX31865 Hardware SPI"); + SERIAL_ECHOLNPGM("Initializing MAX31865 Hardware SPI"); #endif - - SPI.begin(); + SPI.begin(); // Start and configure hardware SPI } setWires(wires); @@ -176,25 +160,15 @@ void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) { clearFault(); #ifdef MAX31865_DEBUG_SPI - #ifndef LARGE_PINMAP - SERIAL_ECHOLNPGM( - "Regular begin call with _cs: ", _cs, - " _miso: ", _miso, - " _sclk: ", _sclk, - " _mosi: ", _mosi - ); - #else - SERIAL_ECHOLNPGM( - "LARGE_PINMAP begin call with _cs: ", _cs, - " _miso: ", _miso, - " _sclk: ", _sclk, - " _mosi: ", _mosi - ); - #endif // LARGE_PINMAP - - SERIAL_ECHOLNPGM("config: ", readRegister8(MAX31856_CONFIG_REG)); - SERIAL_EOL(); - #endif // MAX31865_DEBUG_SPI + SERIAL_ECHOLNPGM( + TERN(LARGE_PINMAP, "LARGE_PINMAP", "Regular") + " begin call with _cs: ", _cs, + " _miso: ", _miso, + " _sclk: ", _sclk, + " _mosi: ", _mosi, + " config: ", readRegister8(MAX31856_CONFIG_REG) + ); + #endif } /** @@ -371,7 +345,6 @@ float MAX31865::temperature(float Rrtd) { // private: // - /** * Set a value in the configuration register. * @@ -432,10 +405,15 @@ void MAX31865::readRegisterN(uint8_t addr, uint8_t buffer[], uint8_t n) { WRITE(_sclk, LOW); WRITE(_cs, LOW); - spixfer(addr); + + #ifdef TARGET_LPC1768 + DELAY_CYCLES(_spi_speed); + #endif + + spiTransfer(addr); while (n--) { - buffer[0] = spixfer(0xFF); + buffer[0] = spiTransfer(0xFF); #ifdef MAX31865_DEBUG_SPI SERIAL_ECHOLNPGM("buffer read ", n, " data: ", buffer[0]); #endif @@ -462,8 +440,12 @@ void MAX31865::writeRegister8(uint8_t addr, uint8_t data) { WRITE(_cs, LOW); - spixfer(addr | 0x80); // make sure top bit is set - spixfer(data); + #ifdef TARGET_LPC1768 + DELAY_CYCLES(_spi_speed); + #endif + + spiTransfer(addr | 0x80); // make sure top bit is set + spiTransfer(data); if (_sclk == TERN(LARGE_PINMAP, -1UL, -1)) SPI.endTransaction(); @@ -480,21 +462,38 @@ void MAX31865::writeRegister8(uint8_t addr, uint8_t data) { * @param x an 8-bit chunk of data to write * @return the 8-bit response */ -uint8_t MAX31865::spixfer(uint8_t x) { +uint8_t MAX31865::spiTransfer(uint8_t x) { if (_sclk == TERN(LARGE_PINMAP, -1UL, -1)) return SPI.transfer(x); - uint8_t reply = 0; - for (int i = 7; i >= 0; i--) { - reply <<= 1; - WRITE(_sclk, HIGH); - WRITE(_mosi, x & (1 << i)); - WRITE(_sclk, LOW); - if (READ(_miso)) - reply |= 1; - } + #ifdef TARGET_LPC1768 + return swSpiTransfer(x, _spi_speed, _sclk, _miso, _mosi); + #else + uint8_t reply = 0; + for (int i = 7; i >= 0; i--) { + WRITE(_sclk, HIGH); DELAY_NS_VAR(_spi_delay); + reply <<= 1; + WRITE(_mosi, x & _BV(i)); DELAY_NS_VAR(_spi_delay); + if (READ(_miso)) reply |= 1; + WRITE(_sclk, LOW); DELAY_NS_VAR(_spi_delay); + } + return reply; + #endif +} - return reply; +void MAX31865::softSpiBegin(const uint8_t spi_speed) { + #ifdef MAX31865_DEBUG + SERIAL_ECHOLNPGM("Initializing MAX31865 Software SPI"); + #endif + #ifdef TARGET_LPC1768 + swSpiBegin(_sclk, _miso, _mosi); + _spi_speed = swSpiInit(spi_speed, _sclk, _mosi); + #else + _spi_delay = (100UL << spi_speed) / 3; // Calculate delay in ns. Top speed is ~10MHz, or 100ns delay between bits. + OUT_WRITE(_sclk, LOW); + SET_OUTPUT(_mosi); + SET_INPUT(_miso); + #endif } #endif // HAS_MAX31865 && !USE_ADAFRUIT_MAX31865 diff --git a/Marlin/src/libs/MAX31865.h b/Marlin/src/libs/MAX31865.h index 5d50e870ec..7610924c23 100644 --- a/Marlin/src/libs/MAX31865.h +++ b/Marlin/src/libs/MAX31865.h @@ -90,6 +90,13 @@ private: static SPISettings spiConfig; TERN(LARGE_PINMAP, uint32_t, uint8_t) _sclk, _miso, _mosi, _cs; + + #ifdef TARGET_LPC1768 + uint8_t _spi_speed; + #else + uint16_t _spi_delay; + #endif + float Rzero, Rref; void setConfig(uint8_t config, bool enable); @@ -99,7 +106,9 @@ private: uint16_t readRegister16(uint8_t addr); void writeRegister8(uint8_t addr, uint8_t reg); - uint8_t spixfer(uint8_t addr); + uint8_t spiTransfer(uint8_t addr); + + void softSpiBegin(const uint8_t spi_speed); public: #ifdef LARGE_PINMAP diff --git a/buildroot/tests/LPC1769 b/buildroot/tests/LPC1769 index f0dab630e5..3fe99734ca 100755 --- a/buildroot/tests/LPC1769 +++ b/buildroot/tests/LPC1769 @@ -14,11 +14,12 @@ exec_test $1 $2 "Azteeg X5GT Example Configuration" "$3" restore_configs opt_set MOTHERBOARD BOARD_SMOOTHIEBOARD \ - EXTRUDERS 2 TEMP_SENSOR_1 -1 TEMP_SENSOR_BED 5 \ + EXTRUDERS 2 TEMP_SENSOR_0 -5 TEMP_SENSOR_1 -1 TEMP_SENSOR_BED 5 TEMP_0_CS_PIN P1_29 \ GRID_MAX_POINTS_X 16 \ NOZZLE_CLEAN_START_POINT "{ { 10, 10, 3 }, { 10, 10, 3 } }" \ NOZZLE_CLEAN_END_POINT "{ { 10, 20, 3 }, { 10, 20, 3 } }" opt_enable TFTGLCD_PANEL_SPI SDSUPPORT ADAPTIVE_FAN_SLOWING NO_FAN_SLOWING_IN_PID_TUNING \ + 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 \ BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET LEVEL_CORNERS_USE_PROBE LEVEL_CORNERS_VERIFY_RAISED \ PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE SLOW_PWM_HEATERS PIDTEMPBED EEPROM_SETTINGS INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT \ diff --git a/buildroot/tests/teensy41 b/buildroot/tests/teensy41 index fd89512ea5..1affd7c89e 100755 --- a/buildroot/tests/teensy41 +++ b/buildroot/tests/teensy41 @@ -15,12 +15,13 @@ exec_test $1 $2 "Teensy4.1 with default config" "$3" # restore_configs opt_set MOTHERBOARD BOARD_TEENSY41 \ - EXTRUDERS 2 TEMP_SENSOR_0 1 TEMP_SENSOR_1 5 TEMP_SENSOR_BED 1 \ + EXTRUDERS 2 TEMP_SENSOR_0 -5 TEMP_SENSOR_1 5 TEMP_SENSOR_BED 1 TEMP_0_CS_PIN 23 \ I2C_SLAVE_ADDRESS 63 \ GRID_MAX_POINTS_X 16 \ NOZZLE_CLEAN_START_POINT "{ { 10, 10, 3 }, { 10, 10, 3 } }" \ NOZZLE_CLEAN_END_POINT "{ { 10, 20, 3 }, { 10, 20, 3 } }" -opt_enable EXTENSIBLE_UI LCD_INFO_MENU SDSUPPORT SDCARD_SORT_ALPHA \ +opt_enable MAX31865_SENSOR_OHMS_0 MAX31865_CALIBRATION_OHMS_0 \ + EXTENSIBLE_UI LCD_INFO_MENU SDSUPPORT SDCARD_SORT_ALPHA \ FILAMENT_LCD_DISPLAY CALIBRATION_GCODE BAUD_RATE_GCODE \ FIX_MOUNTED_PROBE Z_SAFE_HOMING AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \ BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET \ From dc972990f35ed0f6c1ddc7d2d6c15df9e8a4cb3c Mon Sep 17 00:00:00 2001 From: Evgeniy Zhabotinskiy Date: Sun, 7 Nov 2021 07:16:18 +0300 Subject: [PATCH 111/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20M503=20report=20(#?= =?UTF-8?q?23084)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/config/M304.cpp | 2 +- Marlin/src/module/settings.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/gcode/config/M304.cpp b/Marlin/src/gcode/config/M304.cpp index 4bd415db1e..97dc4be25e 100644 --- a/Marlin/src/gcode/config/M304.cpp +++ b/Marlin/src/gcode/config/M304.cpp @@ -43,7 +43,7 @@ void GcodeSuite::M304() { void GcodeSuite::M304_report(const bool forReplay/*=true*/) { report_heading_etc(forReplay, F(STR_BED_PID)); - SERIAL_ECHO_MSG( + SERIAL_ECHOLNPGM( " M304 P", thermalManager.temp_bed.pid.Kp , " I", unscalePID_i(thermalManager.temp_bed.pid.Ki) , " D", unscalePID_d(thermalManager.temp_bed.pid.Kd) diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 01a5c47fd5..f4eba776b6 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -3068,9 +3068,9 @@ void MarlinSettings::reset() { // CONFIG_ECHO_HEADING("Linear Units"); #if ENABLED(INCH_MODE_SUPPORT) - SERIAL_ECHOPGM(" G2", AS_DIGIT(parser.linear_unit_factor == 1.0), " ;"); + SERIAL_ECHO_MSG(" G2", AS_DIGIT(parser.linear_unit_factor == 1.0), " ;"); #else - SERIAL_ECHOPGM(" G21 ;"); + SERIAL_ECHO_MSG(" G21 ;"); #endif gcode.say_units(); From e15f9fdcd9ccff010f188d6b0762cf00956a55c1 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Sat, 6 Nov 2021 23:09:15 -0700 Subject: [PATCH 112/532] =?UTF-8?q?=F0=9F=9A=B8=20Indicate=20Preheating=20?= =?UTF-8?q?for=20probe=20/=20leveling=20(#23088)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/language/language_en.h | 1 + Marlin/src/module/probe.cpp | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 9a92a7e268..ecd5ef5660 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -531,6 +531,7 @@ namespace Language_en { LSTR MSG_ERR_MINTEMP = _UxGT("Err: MINTEMP"); LSTR MSG_HALTED = _UxGT("PRINTER HALTED"); LSTR MSG_PLEASE_RESET = _UxGT("Please Reset"); + LSTR MSG_PREHEATING = _UxGT("Preheating..."); LSTR MSG_HEATING = _UxGT("Heating..."); LSTR MSG_COOLING = _UxGT("Cooling..."); LSTR MSG_BED_HEATING = _UxGT("Bed Heating..."); diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index d9e52a9b43..984a3aabb5 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -362,6 +362,8 @@ FORCE_INLINE void probe_specific_action(const bool deploy) { #define WAIT_FOR_BED_HEAT #endif + LCD_MESSAGE(MSG_PREHEATING); + DEBUG_ECHOPGM("Preheating "); #if ENABLED(WAIT_FOR_NOZZLE_HEAT) From 030b66eb2710165a2081c625a7a0573a6d04b5ae Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 7 Nov 2021 01:11:51 -0600 Subject: [PATCH 113/532] =?UTF-8?q?=F0=9F=8E=A8=20Misc.=20code=20cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/MarlinCore.cpp | 5 +++-- Marlin/src/feature/twibus.cpp | 2 +- .../src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h | 4 ++-- .../variant.cpp | 18 +++++++++--------- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 5e8881d1c6..8b6b278f1f 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -1554,6 +1554,7 @@ void setup() { #endif #if HAS_DWIN_E3V2_BASIC + SETUP_LOG("E3V2 Init"); Encoder_Configuration(); HMI_Init(); HMI_SetLanguageCache(); @@ -1562,7 +1563,7 @@ void setup() { #endif #if HAS_SERVICE_INTERVALS && !HAS_DWIN_E3V2_BASIC - ui.reset_status(true); // Show service messages or keep current status + SETUP_RUN(ui.reset_status(true)); // Show service messages or keep current status #endif #if ENABLED(MAX7219_DEBUG) @@ -1593,7 +1594,7 @@ void setup() { #endif #if BOTH(HAS_LCD_MENU, TOUCH_SCREEN_CALIBRATION) && EITHER(TFT_CLASSIC_UI, TFT_COLOR_UI) - ui.check_touch_calibration(); + SETUP_RUN(ui.check_touch_calibration()); #endif marlin_state = MF_RUNNING; diff --git a/Marlin/src/feature/twibus.cpp b/Marlin/src/feature/twibus.cpp index 0e23b48a40..e33581676c 100644 --- a/Marlin/src/feature/twibus.cpp +++ b/Marlin/src/feature/twibus.cpp @@ -98,7 +98,7 @@ void TWIBus::echodata(uint8_t bytes, FSTR_P const pref, uint8_t adr, const uint8 union TwoBytesToInt16 { uint8_t bytes[2]; int16_t integervalue; }; TwoBytesToInt16 ConversionUnion; - echoprefix(bytes, pref, adr); + echoprefix(bytes, pref, adr); while (bytes-- && Wire.available()) { int value = Wire.read(); diff --git a/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h b/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h index 7ce21a20af..fea5b00b50 100644 --- a/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h +++ b/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h @@ -54,7 +54,7 @@ // // Limit Switches -// +// #define X_STOP_PIN PD8 #define Y_STOP_PIN PD15 #define Z_MIN_PIN PA11 @@ -173,7 +173,7 @@ #define LCD_PINS_D5 PE7 #define LCD_PINS_D6 PB2 #define LCD_PINS_D7 PB1 - + #if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) #define BTN_ENC_EN LCD_PINS_D7 // Detect the presence of the encoder #endif diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.cpp b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.cpp index c8ed0d1e52..7979f3f804 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.cpp +++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.cpp @@ -190,12 +190,12 @@ WEAK void SystemClock_Config(void) /* Enable Power Control clock */ __HAL_RCC_PWR_CLK_ENABLE(); - - /* The voltage scaling allows optimizing the power consumption when the device is - clocked below the maximum system frequency, to update the voltage scaling value + + /* The voltage scaling allows optimizing the power consumption when the device is + clocked below the maximum system frequency, to update the voltage scaling value regarding system frequency refer to product datasheet. */ __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); - + /* Enable HSE Oscillator and activate PLL with HSE as source */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; @@ -209,19 +209,19 @@ WEAK void SystemClock_Config(void) { /* Initialization Error */ } - + if(HAL_PWREx_EnableOverDrive() != HAL_OK) { /* Initialization Error */ } - - /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 + + /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) { /* Initialization Error */ From fa5bfca3678ef6e695e8e5d4a51af2bcd02e8e85 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 8 Nov 2021 01:01:19 +0000 Subject: [PATCH 114/532] [cron] Bump distribution date (2021-11-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 ce8acbbc3e..6cba2f4558 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 "2021-11-07" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 7626b58e3e..a1c65c210f 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 "2021-11-07" + #define STRING_DISTRIBUTION_DATE "2021-11-08" #endif /** From 467e883e17dd8a67c26a3273f0586ce474e959f5 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 9 Nov 2021 01:01:17 +0000 Subject: [PATCH 115/532] [cron] Bump distribution date (2021-11-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 6cba2f4558..38c122bdb4 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 "2021-11-08" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 a1c65c210f..45bf84a537 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 "2021-11-08" + #define STRING_DISTRIBUTION_DATE "2021-11-09" #endif /** From cee50552ab4dc3463717920b792a8825a783cd83 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Tue, 9 Nov 2021 08:30:02 -0800 Subject: [PATCH 116/532] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20BTT002=20(STM32F40?= =?UTF-8?q?7VET6)=20variant,=20MK3=5FFAN=5FPINS=20flag=20(#23093)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/pins.h | 2 +- .../src/pins/stm32f4/pins_BTT_BTT002_V1_0.h | 20 +++++++- .../boards/marlin_BigTree_BTT002_VET6.json | 46 +++++++++++++++++++ ini/stm32f4.ini | 8 ++++ 4 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 buildroot/share/PlatformIO/boards/marlin_BigTree_BTT002_VET6.json diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 369a78be7a..57648b3e16 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -616,7 +616,7 @@ #elif MB(BTT_GTR_V1_0) #include "stm32f4/pins_BTT_GTR_V1_0.h" // STM32F4 env:BIGTREE_GTR_V1_0 env:BIGTREE_GTR_V1_0_usb_flash_drive #elif MB(BTT_BTT002_V1_0) - #include "stm32f4/pins_BTT_BTT002_V1_0.h" // STM32F4 env:BIGTREE_BTT002 + #include "stm32f4/pins_BTT_BTT002_V1_0.h" // STM32F4 env:BIGTREE_BTT002 env:BIGTREE_BTT002_VET6 #elif MB(BTT_E3_RRF) #include "stm32f4/pins_BTT_E3_RRF.h" // STM32F4 env:BIGTREE_E3_RRF #elif MB(BTT_SKR_V2_0_REV_A) diff --git a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h index b7ffcce4a8..7b99352ef4 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h @@ -29,6 +29,8 @@ #define BOARD_INFO_NAME "BTT BTT002 V1.0" +//#define MK3_FAN_PINS + #define USES_DIAG_PINS // Ignore temp readings during development. @@ -169,8 +171,22 @@ // #define HEATER_0_PIN PE6 // Heater0 #define HEATER_BED_PIN PE5 // Hotbed -#define FAN_PIN PB8 // Fan1 -#define FAN1_PIN PB9 // Fan0 + +#ifndef FAN_PIN + #ifdef MK3_FAN_PINS + #define FAN_PIN PB8 // Fan1 + #else + #define FAN_PIN PB9 // Fan0 + #endif +#endif + +#ifndef FAN1_PIN + #ifdef MK3_FAN_PINS + #define FAN1_PIN PB9 // Fan0 + #else + #define FAN1_PIN PB8 // Fan1 + #endif +#endif /** * -----------------------------------BTT002 V1.0---------------------------------------- diff --git a/buildroot/share/PlatformIO/boards/marlin_BigTree_BTT002_VET6.json b/buildroot/share/PlatformIO/boards/marlin_BigTree_BTT002_VET6.json new file mode 100644 index 0000000000..77d3af0112 --- /dev/null +++ b/buildroot/share/PlatformIO/boards/marlin_BigTree_BTT002_VET6.json @@ -0,0 +1,46 @@ +{ + "build": { + "core": "stm32", + "cpu": "cortex-m4", + "extra_flags": "-DSTM32F4 -DSTM32F407xx -DSTM32F40_41xxx", + "f_cpu": "168000000L", + "hwids": [ + [ + "0x1EAF", + "0x0003" + ], + [ + "0x0483", + "0x3748" + ] + ], + "mcu": "stm32f407vet6", + "variant": "MARLIN_BIGTREE_BTT002" + }, + "debug": { + "jlink_device": "STM32F407VE", + "openocd_target": "stm32f4x", + "svd_path": "STM32F40x.svd" + }, + "frameworks": [ + "arduino" + ], + "name": "STM32F407VE (192k RAM. 512k Flash)", + "upload": { + "disable_flushing": false, + "maximum_ram_size": 131072, + "maximum_size": 524288, + "protocol": "stlink", + "protocols": [ + "stlink", + "dfu", + "jlink" + ], + "offset_address": "0x8008000", + "require_upload_port": true, + "use_1200bps_touch": false, + "wait_for_upload_port": false + }, + "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f407ve.html", + "vendor": "ST" +} diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index 0e9b507c8b..6fec1d46fc 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -204,6 +204,14 @@ build_flags = ${stm32_variant.build_flags} -DPIN_SERIAL2_RX=PD_6 -DPIN_SERIAL2_TX=PD_5 +# +# BigTreeTech BTT002 V1.x with 512k of flash (STM32F407VET6 ARM Cortex-M4) +# +[env:BIGTREE_BTT002_VET6] +platform = ${env:BIGTREE_BTT002.platform} +extends = env:BIGTREE_BTT002 +board = marlin_BigTree_BTT002_VET6 + # # BigTreeTech SKR V2.0 (STM32F407VGT6 ARM Cortex-M4) with USB Flash Drive Support # From e776fa1e93d5a8ac1d6ebd7c084e18e1a009ad6b Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 10 Nov 2021 01:01:08 +0000 Subject: [PATCH 117/532] [cron] Bump distribution date (2021-11-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 38c122bdb4..0f2136cbdd 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 "2021-11-09" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 45bf84a537..e61948958d 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 "2021-11-09" + #define STRING_DISTRIBUTION_DATE "2021-11-10" #endif /** From 07befb545b2bc6ea284d444637a039127af6b4d1 Mon Sep 17 00:00:00 2001 From: BigTreeTech <38851044+bigtreetech@users.noreply.github.com> Date: Wed, 10 Nov 2021 23:56:10 +0800 Subject: [PATCH 118/532] =?UTF-8?q?=E2=9C=A8=20Support=20for=20BIQU=20B1-S?= =?UTF-8?q?E-Plus=20strain=20gauge=20probe=20(#23101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/Configuration.h | 9 +++++++++ Marlin/src/module/endstops.cpp | 3 +++ Marlin/src/pins/pinsDebug_list.h | 9 +++++++++ Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h | 4 +++- Marlin/src/pins/stm32f1/pins_CREALITY_V452.h | 5 ++++- Marlin/src/pins/stm32f1/pins_CREALITY_V453.h | 5 ++++- Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h | 7 +++++++ 7 files changed, 39 insertions(+), 3 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 8ab3929c41..2c53498d02 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -1220,6 +1220,15 @@ #endif #endif +/** + * Probe Enable / Disable + * The probe only provides a triggered signal when enabled. + */ +//#define PROBE_ENABLE_DISABLE +#if ENABLED(PROBE_ENABLE_DISABLE) + //#define PROBE_ENABLE_PIN -1 // Override the default pin here +#endif + /** * Multiple Probing * diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index 04f20ca3a4..aa5907477e 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -392,6 +392,9 @@ void Endstops::not_homing() { #if HAS_BED_PROBE void Endstops::enable_z_probe(const bool onoff) { z_probe_enabled = onoff; + #if PIN_EXISTS(PROBE_ENABLE) + WRITE(PROBE_ENABLE_PIN, onoff); + #endif resync(); } #endif diff --git a/Marlin/src/pins/pinsDebug_list.h b/Marlin/src/pins/pinsDebug_list.h index 05756d6004..dc0d5225db 100644 --- a/Marlin/src/pins/pinsDebug_list.h +++ b/Marlin/src/pins/pinsDebug_list.h @@ -1439,6 +1439,15 @@ #if PIN_EXISTS(Z_MIN_PROBE) REPORT_NAME_DIGITAL(__LINE__, Z_MIN_PROBE_PIN) #endif +#if PIN_EXISTS(PROBE_ACTIVATION_SWITCH) + REPORT_NAME_DIGITAL(__LINE__, PROBE_ACTIVATION_SWITCH_PIN) +#endif +#if PIN_EXISTS(PROBE_ENABLE) + REPORT_NAME_DIGITAL(__LINE__, PROBE_ENABLE_PIN) +#endif +#if PIN_EXISTS(PROBE_TARE) + REPORT_NAME_DIGITAL(__LINE__, PROBE_TARE_PIN) +#endif #if PIN_EXISTS(I_ATT) REPORT_NAME_DIGITAL(__LINE__, I_ATT_PIN) #endif diff --git a/Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h b/Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h index 8bae916a46..8368fd03cd 100644 --- a/Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h +++ b/Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h @@ -71,7 +71,9 @@ // Probe // #define PROBE_TARE_PIN PA1 -#define PROBE_ACTIVATION_SWITCH_PIN PC2 // Optoswitch to Enable Z Probe +#if ENABLED(PROBE_ACTIVATION_SWITCH) + #define PROBE_ACTIVATION_SWITCH_PIN PC2 // Optoswitch to Enable Z Probe +#endif // // Steppers diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h index a2add81c8b..7d3140056a 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h @@ -34,6 +34,9 @@ #define HEATER_0_PIN PA1 // HEATER1 #define HEATER_BED_PIN PA2 // HOT BED #define FAN_PIN PA0 // FAN -#define PROBE_ACTIVATION_SWITCH_PIN PC6 // Optoswitch to Enable Z Probe + +#if ENABLED(PROBE_ACTIVATION_SWITCH) + #define PROBE_ACTIVATION_SWITCH_PIN PC6 // Optoswitch to Enable Z Probe +#endif #include "pins_CREALITY_V45x.h" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h index 7b8c3280d2..b669887d1e 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h @@ -34,6 +34,9 @@ #define HEATER_0_PIN PB14 // HEATER1 #define HEATER_BED_PIN PB13 // HOT BED #define FAN_PIN PB15 // FAN -#define PROBE_ACTIVATION_SWITCH_PIN PB2 // Optoswitch to Enable Z Probe + +#if ENABLED(PROBE_ACTIVATION_SWITCH) + #define PROBE_ACTIVATION_SWITCH_PIN PB2 // Optoswitch to Enable Z Probe +#endif #include "pins_CREALITY_V45x.h" diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h index 9a280eac16..762e355626 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h @@ -132,6 +132,13 @@ #define Z_MIN_PROBE_PIN PE4 #endif +// +// Probe enable +// +#if ENABLED(PROBE_ENABLE_DISABLE) + #define PROBE_ENABLE_PIN SERVO0_PIN +#endif + // // Filament Runout Sensor // From 99df0b86fb3fdf8a671fd553301b7bb5acc4a0a5 Mon Sep 17 00:00:00 2001 From: George Fu Date: Wed, 10 Nov 2021 23:58:20 +0800 Subject: [PATCH 119/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20FYSETC=20Cheetah?= =?UTF-8?q?=202.0=20pins=20for=20production=20(#23104)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f4/pins_FYSETC_CHEETAH_V20.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Marlin/src/pins/stm32f4/pins_FYSETC_CHEETAH_V20.h b/Marlin/src/pins/stm32f4/pins_FYSETC_CHEETAH_V20.h index a604a71c4b..054da62754 100644 --- a/Marlin/src/pins/stm32f4/pins_FYSETC_CHEETAH_V20.h +++ b/Marlin/src/pins/stm32f4/pins_FYSETC_CHEETAH_V20.h @@ -38,9 +38,9 @@ #define FLASH_EEPROM_EMULATION #define FLASH_EEPROM_LEVELING - #define FLASH_SECTOR 2 + #define FLASH_SECTOR 1 #define FLASH_UNIT_SIZE 0x4000 // 16k - #define FLASH_ADDRESS_START 0x8008000 + #define FLASH_ADDRESS_START 0x8004000 #endif // @@ -57,7 +57,7 @@ // Limit Switches // #define X_STOP_PIN PB4 -#define Y_STOP_PIN PB3 +#define Y_STOP_PIN PC8 #define Z_STOP_PIN PB1 // @@ -111,9 +111,10 @@ #define HEATER_0_PIN PC6 #define HEATER_BED_PIN PC7 #ifndef FAN_PIN - #define FAN_PIN PA1 + #define FAN_PIN PA14 #endif -#define FAN1_PIN PC8 +#define FAN1_PIN PA13 +#define FAN2_PIN PA1 // // Temperature Sensors From b4b16b63ff40aaba9e482294e8f34403eb51e632 Mon Sep 17 00:00:00 2001 From: Miguel Risco-Castillo Date: Wed, 10 Nov 2021 11:31:35 -0500 Subject: [PATCH 120/532] =?UTF-8?q?=F0=9F=9A=B8=20Expose=20sub-options=20f?= =?UTF-8?q?or=20E3V2=20Enhanced=20(#23099)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 2 +- Marlin/src/MarlinCore.cpp | 1 - Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 111 +++++++++++++++++++++----- Marlin/src/lcd/e3v2/enhanced/dwin.h | 4 +- Marlin/src/lcd/marlinui.cpp | 19 ++--- Marlin/src/lcd/marlinui.h | 7 +- 6 files changed, 105 insertions(+), 39 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index fc495a6ea6..fc9688edb7 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1280,7 +1280,7 @@ #endif // HAS_LCD_MENU -#if HAS_DISPLAY +#if EITHER(HAS_DISPLAY, DWIN_CREALITY_LCD_ENHANCED) // The timeout (in ms) to return to the status screen from sub-menus //#define LCD_TIMEOUT_TO_STATUS 15000 diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 8b6b278f1f..f2031cdfb9 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -1559,7 +1559,6 @@ void setup() { HMI_Init(); HMI_SetLanguageCache(); HMI_StartFrame(true); - DWIN_StatusChanged(GET_TEXT_F(WELCOME_MSG)); #endif #if HAS_SERVICE_INTERVALS && !HAS_DWIN_E3V2_BASIC diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index 787cf717eb..c92bfe57c3 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -170,6 +170,7 @@ select_t select_page{0}, select_file{0}, select_print{0}; uint8_t index_file = MROWS; bool dwin_abort_flag = false; // Flag to reset feedrate, return to Home +bool hash_changed = true; // Flag to know if message status was changed constexpr float default_max_feedrate[] = DEFAULT_MAX_FEEDRATE; constexpr float default_max_acceleration[] = DEFAULT_MAX_ACCELERATION; @@ -610,6 +611,86 @@ void Popup_window_PauseOrStop() { #endif +// Draw status line +void DWIN_DrawStatusLine(const uint16_t color, const uint16_t bgcolor, const char *text, const bool center = true) { + DWIN_Draw_Rectangle(1, bgcolor, 0, STATUS_Y, DWIN_WIDTH, STATUS_Y + 20); + if (text) { + if (center) DWINUI::Draw_CenteredString(color, STATUS_Y + 2, text); + else DWINUI::Draw_String(color, 0, STATUS_Y + 2, text); + } + DWIN_UpdateLCD(); +} +void DWIN_DrawStatusLine(const char *text, const bool center = true) { + DWIN_DrawStatusLine(HMI_data.StatusTxt_Color, HMI_data.StatusBg_Color, text, center); +} + +// Clear & reset status line +void DWIN_ResetStatusLine() { + ui.status_message[0] = 0; + DWIN_CheckStatusMessage(); +} + +// Djb2 hash algorithm +void DWIN_CheckStatusMessage() { + static uint32_t old_hash = 0; + char * str = &ui.status_message[0]; + uint32_t hash = 5381; + char c; + while ((c = *str++)) hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ + hash_changed = hash != old_hash; + old_hash = hash; +}; + +void DWIN_DrawStatusMessage() { + const uint8_t max_status_chars = DWIN_WIDTH / DWINUI::fontWidth(DWINUI::font); + + #if ENABLED(STATUS_MESSAGE_SCROLLING) + + // Get the UTF8 character count of the string + uint8_t slen = utf8_strlen(ui.status_message); + + // If the string fits the status line do not scroll it + if (slen <= max_status_chars) { + if (hash_changed) { + DWIN_DrawStatusLine(HMI_data.StatusTxt_Color, HMI_data.StatusBg_Color, ui.status_message); + hash_changed = false; + } + } + else { + // String is larger than the available line space + + // Get a pointer to the next valid UTF8 character + // and the string remaining length + uint8_t rlen; + const char *stat = MarlinUI::status_and_len(rlen); + DWIN_Draw_Rectangle(1, HMI_data.StatusBg_Color, 0, STATUS_Y, DWIN_WIDTH, STATUS_Y + 20); + DWINUI::MoveTo(0, STATUS_Y + 2); + DWINUI::Draw_String(stat, max_status_chars); + + // If the string doesn't completely fill the line... + if (rlen < max_status_chars) { + DWINUI::Draw_Char('.'); // Always at 1+ spaces left, draw a dot + uint8_t chars = max_status_chars - rlen; // Amount of space left in characters + if (--chars) { // Draw a second dot if there's space + DWINUI::Draw_Char('.'); + if (--chars) + DWINUI::Draw_String(ui.status_message, chars); // Print a second copy of the message + } + } + MarlinUI::advance_status_scroll(); + } + + #else + + if (hash_changed) { + ui.status_message[max_status_chars] = 0; + DWIN_DrawStatusLine(HMI_data.StatusTxt_Color, HMI_data.StatusBg_Color, ui.status_message); + hash_changed = false; + } + + #endif +} + void Draw_Print_Labels() { if (HMI_IsChinese()) { Title.FrameCopy(30, 1, 42, 14); // "Printing" @@ -713,7 +794,7 @@ void Draw_Main_Menu() { void Goto_Main_Menu() { checkkey = MainMenu; - DWIN_StatusChanged(); + ui.reset_status(true); Draw_Main_Menu(); } @@ -1077,6 +1158,7 @@ void Draw_Status_Area(const bool with_update) { void HMI_StartFrame(const bool with_update) { Goto_Main_Menu(); + DWIN_DrawStatusLine(nullptr); Draw_Status_Area(with_update); } @@ -1474,7 +1556,7 @@ void DWIN_Update() { } void EachMomentUpdate() { - static millis_t next_var_update_ms = 0, next_rts_update_ms = 0; + static millis_t next_var_update_ms = 0, next_rts_update_ms = 0, next_status_update_ms = 0; const millis_t ms = millis(); if (ELAPSED(ms, next_var_update_ms)) { @@ -1482,6 +1564,11 @@ void EachMomentUpdate() { update_variable(); } + if (ELAPSED(ms, next_status_update_ms)) { + next_status_update_ms = ms + 500; + DWIN_DrawStatusMessage(); + } + if (PENDING(ms, next_rts_update_ms)) return; next_rts_update_ms = ms + DWIN_SCROLL_UPDATE_INTERVAL; @@ -1745,7 +1832,7 @@ void Draw_Title(TitleClass* title) { void Draw_Menu(MenuClass* menu) { DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color); DWIN_Draw_Rectangle(1, DWINUI::backcolor, 0, TITLE_HEIGHT, DWIN_WIDTH - 1, STATUS_Y - 1); - ui.set_status(""); + DWIN_ResetStatusLine(); } // Startup routines @@ -1758,23 +1845,6 @@ void DWIN_Startup() { HMI_SetLanguage(); } -void DWIN_DrawStatusLine(const uint16_t color, const uint16_t bgcolor, const char * const text/*=nullptr*/) { - DWIN_Draw_Rectangle(1, bgcolor, 0, STATUS_Y, DWIN_WIDTH, STATUS_Y + 20); - if (text) DWINUI::Draw_CenteredString(color, STATUS_Y + 2, text); - DWIN_UpdateLCD(); -} - -// Update Status line -void DWIN_StatusChanged(const char * const cstr/*=nullptr*/) { - DWIN_DrawStatusLine(HMI_data.StatusTxt_Color, HMI_data.StatusBg_Color, cstr); -} - -void DWIN_StatusChanged(FSTR_P const fstr) { - char str[strlen_P(FTOP(fstr)) + 1]; - strcpy_P(str, FTOP(fstr)); - DWIN_StatusChanged(str); -} - // Started a Print Job void DWIN_Print_Started(const bool sd) { sdprint = card.isPrinting() || sd; @@ -1866,7 +1936,6 @@ void DWIN_RebootScreen() { void DWIN_Redraw_screen() { Draw_Main_Area(); - DWIN_StatusChanged(ui.status_message); Draw_Status_Area(false); } diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.h b/Marlin/src/lcd/e3v2/enhanced/dwin.h index c2220c68a8..90b7ceacfa 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.h @@ -174,9 +174,7 @@ void EachMomentUpdate(); void update_variable(); void DWIN_HandleScreen(); void DWIN_Update(); -void DWIN_DrawStatusLine(const uint16_t color, const uint16_t bgcolor, const char *text=nullptr); -void DWIN_StatusChanged(const char * const cstr=nullptr); -void DWIN_StatusChanged(FSTR_P const fstr); +void DWIN_CheckStatusMessage(); void DWIN_StartHoming(); void DWIN_CompletedHoming(); #if HAS_MESH diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 925e1c1618..57157d2c00 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -49,6 +49,7 @@ MarlinUI ui; #if ENABLED(DWIN_CREALITY_LCD) #include "e3v2/creality/dwin.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) + #include "fontutils.h" #include "e3v2/enhanced/dwin.h" #elif ENABLED(DWIN_CREALITY_LCD_JYERSUI) #include "e3v2/jyersui/dwin.h" @@ -69,7 +70,7 @@ MarlinUI ui; constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; #if HAS_STATUS_MESSAGE - #if BOTH(HAS_WIRED_LCD, STATUS_MESSAGE_SCROLLING) + #if ENABLED(STATUS_MESSAGE_SCROLLING) && EITHER(HAS_WIRED_LCD, DWIN_CREALITY_LCD_ENHANCED) uint8_t MarlinUI::status_scroll_offset; // = 0 #endif char MarlinUI::status_message[MAX_MESSAGE_LENGTH + 1]; @@ -1481,11 +1482,9 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; void MarlinUI::finish_status(const bool persist) { - #if HAS_WIRED_LCD + UNUSED(persist); - #if !(BASIC_PROGRESS_BAR && (PROGRESS_MSG_EXPIRE) > 0) - UNUSED(persist); - #endif + #if HAS_WIRED_LCD #if BASIC_PROGRESS_BAR || BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) const millis_t ms = millis(); @@ -1502,13 +1501,15 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; next_filament_display = ms + 5000UL; // Show status message for 5s #endif - TERN_(STATUS_MESSAGE_SCROLLING, status_scroll_offset = 0); - #else // HAS_WIRED_LCD - UNUSED(persist); + #endif + + #if ENABLED(STATUS_MESSAGE_SCROLLING) && EITHER(HAS_WIRED_LCD, DWIN_CREALITY_LCD_ENHANCED) + status_scroll_offset = 0; #endif TERN_(EXTENSIBLE_UI, ExtUI::onStatusChanged(status_message)); - TERN_(HAS_DWIN_E3V2_BASIC, DWIN_StatusChanged(status_message)); + TERN_(DWIN_CREALITY_LCD, DWIN_StatusChanged(status_message)); + TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_CheckStatusMessage()); TERN_(DWIN_CREALITY_LCD_JYERSUI, CrealityDWIN.Update_Status(status_message)); } diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index 4f797d899d..ed5b539eaf 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -356,6 +356,9 @@ public: #if EITHER(HAS_DISPLAY, DWIN_CREALITY_LCD_ENHANCED) static void kill_screen(FSTR_P const lcd_error, FSTR_P const lcd_component); + #if DISABLED(LIGHTWEIGHT_UI) + static void draw_status_message(const bool blink); + #endif #else static inline void kill_screen(FSTR_P const, FSTR_P const) {} #endif @@ -444,10 +447,6 @@ public: static inline void completion_feedback(const bool=true) { TERN_(HAS_TOUCH_SLEEP, wakeup_screen()); } #endif - #if DISABLED(LIGHTWEIGHT_UI) - static void draw_status_message(const bool blink); - #endif - #if ENABLED(ADVANCED_PAUSE_FEATURE) static void draw_hotend_status(const uint8_t row, const uint8_t extruder); #endif From 589a6d7f6bbf2254958aa92d8707c51fcbcd8dd3 Mon Sep 17 00:00:00 2001 From: Miguel Risco-Castillo Date: Wed, 10 Nov 2021 11:55:20 -0500 Subject: [PATCH 121/532] =?UTF-8?q?=F0=9F=9A=B8=20Fix=20up=20E3V2=20Enhanc?= =?UTF-8?q?ed=20(#23100)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/pause.cpp | 1 - Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 106 ++++++++++---------- Marlin/src/lcd/e3v2/enhanced/dwin.h | 5 +- Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp | 4 +- Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h | 11 +- Marlin/src/lcd/e3v2/enhanced/dwinui.cpp | 18 ++-- Marlin/src/lcd/e3v2/enhanced/dwinui.h | 37 ++++--- Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp | 41 ++++++-- Marlin/src/lcd/e3v2/enhanced/meshviewer.h | 4 +- Marlin/src/module/settings.cpp | 2 - Marlin/src/module/temperature.cpp | 3 +- 11 files changed, 128 insertions(+), 104 deletions(-) diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index d97ac2a0ac..191c0e4b08 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -254,7 +254,6 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE))); TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE), FPSTR(CONTINUE_STR))); - TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_Popup_Confirm(ICON_BLTouch, GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE), FPSTR(CONTINUE_STR))); wait_for_user = true; // A click or M108 breaks the purge_length loop for (float purge_count = purge_length; purge_count > 0 && wait_for_user; --purge_count) unscaled_e_move(1, ADVANCED_PAUSE_PURGE_FEEDRATE); diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index c92bfe57c3..d1a9ba7077 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -23,8 +23,8 @@ /** * DWIN UI Enhanced implementation * Author: Miguel A. Risco-Castillo - * Version: 3.6.3 - * Date: 2021/09/10 + * Version: 3.7.1 + * Date: 2021/11/09 */ #include "../../../inc/MarlinConfigPre.h" @@ -142,7 +142,7 @@ HMI_data_t HMI_data; millis_t dwin_heat_time = 0; -uint8_t checkkey = MainMenu, last_checkkey = MainMenu; +uint8_t checkkey = 255, last_checkkey = MainMenu; enum SelectItem : uint8_t { PAGE_PRINT = 0, @@ -387,15 +387,15 @@ void ICON_Stop() { ICON_Button(select_print.now == PRINT_STOP, ICON_Stop_0, ico, txt); } -void Draw_Menu_Cursor(const uint8_t line) { +void Draw_Menu_Cursor(const int8_t line) { DWIN_Draw_Rectangle(1, HMI_data.Cursor_color, 0, MBASE(line) - 18, 14, MBASE(line + 1) - 20); } -void Erase_Menu_Cursor(const uint8_t line) { +void Erase_Menu_Cursor(const int8_t line) { DWIN_Draw_Rectangle(1, HMI_data.Background_Color, 0, MBASE(line) - 18, 14, MBASE(line + 1) - 20); } -void Move_Highlight(const int16_t from, const uint16_t newline) { +void Move_Highlight(const int8_t from, const int8_t newline) { Erase_Menu_Cursor(newline - from); Draw_Menu_Cursor(newline); } @@ -578,6 +578,7 @@ void Popup_window_PauseOrStop() { DWINUI::Draw_Icon(ICON_Cancel_E, 146, 280); } Draw_Select_Highlight(true); + DWIN_UpdateLCD(); } #if HAS_HOTEND || HAS_HEATED_BED @@ -608,7 +609,6 @@ void Popup_window_PauseOrStop() { } } } - #endif // Draw status line @@ -752,6 +752,7 @@ void Draw_PrintProcess() { } void Goto_PrintProcess() { + if (checkkey == PrintProcess) return; checkkey = PrintProcess; Draw_PrintProcess(); } @@ -793,6 +794,7 @@ void Draw_Main_Menu() { } void Goto_Main_Menu() { + if (checkkey == MainMenu) return; checkkey = MainMenu; ui.reset_status(true); Draw_Main_Menu(); @@ -1239,10 +1241,10 @@ void HMI_MainMenu() { case PAGE_INFO_LEVELING: #if HAS_ONESTEP_LEVELING - queue.inject(F("G28XYO\nG28Z\nG29")); // TODO: 'G29' should be homing when needed. Does it make sense for every LCD to do this differently? + queue.inject(F("G28Z\nG29")); // Force to get the current Z home position #else - checkkey = Info; - Draw_Info_Menu(); + last_checkkey = MainMenu; + Goto_InfoMenu(); #endif break; } @@ -1327,7 +1329,7 @@ void HMI_SelectFile() { } } else if (encoder_diffState == ENCODER_DIFF_ENTER) { - if (select_file.now == 0) { + if (select_file.now == 0) { // Back select_page.set(PAGE_PRINT); Goto_Main_Menu(); } @@ -1523,7 +1525,6 @@ void Draw_Main_Area() { void HMI_ReturnScreen() { checkkey = last_checkkey; Draw_Main_Area(); - DWIN_UpdateLCD(); return; } @@ -2230,7 +2231,7 @@ void SetMoveZ() { HMI_value.axis = Z_AXIS; SetPFloatOnClick(Z_MIN_POS, Z_MAX_POS void SetMoveZto0() { char cmd[48] = ""; char str_1[5] = "", str_2[5] = ""; - sprintf_P(cmd, PSTR("G28OXY\nG28Z\nG0X%sY%sF5000\nG0Z0F300"), + sprintf_P(cmd, PSTR("G28Z\nG0X%sY%sF5000\nM420S0\nG0Z0F300"), #if ENABLED(MESH_BED_LEVELING) dtostrf(0, 1, 1, str_1), dtostrf(0, 1, 1, str_2) @@ -2413,7 +2414,7 @@ void LevBed(uint8_t point) { float xpos = 0, ypos = 0, zval = 0; float margin = PROBING_MARGIN; #else - #define fmt "M420 S0\nG28O\nG90\nG0 Z5 F300\nG0 X%i Y%i F5000\nG0 Z0 F300" + #define fmt "M420S0\nG28O\nG90\nG0Z5F300\nG0X%iY%iF5000\nG0Z0F300" int16_t xpos = 0, ypos = 0; int16_t margin = 30; #endif @@ -2469,7 +2470,7 @@ void LevBedC () { LevBed(4); } void ManualMeshStart(){ LCD_MESSAGE(MSG_UBL_BUILD_MESH_MENU); - gcode.process_subcommands_now(F("G28 XYO\nG28 Z\nM211 S0\nG29S1")); + gcode.process_subcommands_now(F("G28Z\nM211S0\nG29S1")); planner.synchronize(); #ifdef MANUAL_PROBE_START_Z const uint8_t line = CurrentMenu->line(MMeshMoveZItem->pos); @@ -2494,7 +2495,7 @@ void LevBedC () { LevBed(4); } void ManualMeshSave(){ LCD_MESSAGE(MSG_UBL_STORAGE_MESH_MENU); - queue.inject(F("M211 S1\nM500")); + queue.inject(F("M211S1\nM500")); } #endif // MESH_BED_LEVELING @@ -2810,7 +2811,7 @@ void onDrawSteps(MenuItemClass* menuitem, int8_t line) { #if ENABLED(MESH_BED_LEVELING) void onDrawMMeshMoveZ(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) menuitem->SetFrame(1, 160, 118, 209, 132); - onDrawPFloatMenu(menuitem, line); + onDrawPFloat2Menu(menuitem, line); } #endif @@ -3096,11 +3097,11 @@ void HMI_SetIntNoDraw() { // Set an integer pointer variable using the encoder void HMI_SetPInt() { int8_t val = HMI_GetInt(HMI_value.MinValue, HMI_value.MaxValue); - if (!val) return; - else if (val == 2) { // Apply - *HMI_value.P_Int = HMI_value.Value; - if (HMI_value.Apply != nullptr) HMI_value.Apply(); - } else if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate(); + switch (val) { + case 0: return; + case 1: if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate(); break; + case 2: *HMI_value.P_Int = HMI_value.Value; if (HMI_value.Apply != nullptr) HMI_value.Apply(); break; + } } // Get a scaled float value using the encoder @@ -3140,17 +3141,16 @@ void HMI_SetFloat() { // Set a scaled float pointer variable using the encoder void HMI_SetPFloat() { const int8_t val = HMI_GetFloat(HMI_value.dp, HMI_value.MinValue, HMI_value.MaxValue); - if (!val) return; - if (val == 2) { // Apply - *HMI_value.P_Float = HMI_value.Value / POW(10, HMI_value.dp); - if (HMI_value.Apply != nullptr) HMI_value.Apply(); + switch (val) { + case 0: return; + case 1: if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate(); break; + case 2: *HMI_value.P_Float = HMI_value.Value / POW(10, HMI_value.dp); if (HMI_value.Apply != nullptr) HMI_value.Apply(); break; } - else if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate(); } // Menu Creation and Drawing functions ====================================================== -void SetMenuTitle(frame_rect_t cn, frame_rect_t en, const __FlashStringHelper* fstr) { +void SetMenuTitle(frame_rect_t cn, const __FlashStringHelper* fstr) { if (HMI_IsChinese() && (cn.w != 0)) CurrentMenu->MenuTitle.SetFrame(cn.x, cn.y, cn.w, cn.h); else @@ -3162,7 +3162,7 @@ void Draw_Prepare_Menu() { if (PrepareMenu == nullptr) PrepareMenu = new MenuClass(); if (CurrentMenu != PrepareMenu) { CurrentMenu = PrepareMenu; - SetMenuTitle({133, 1, 28, 13}, {179, 0, 48, 14}, GET_TEXT_F(MSG_PREPARE)); + SetMenuTitle({133, 1, 28, 13}, GET_TEXT_F(MSG_PREPARE)); DWINUI::MenuItemsPrepare(13); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu); #if ENABLED(ADVANCED_PAUSE_FEATURE) @@ -3203,7 +3203,7 @@ void Draw_LevBedCorners_Menu() { if (LevBedMenu == nullptr) LevBedMenu = new MenuClass(); if (CurrentMenu != LevBedMenu) { CurrentMenu = LevBedMenu; - SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_BED_TRAMMING)); // TODO: Chinese, English "Bed Tramming" JPG + SetMenuTitle({0}, GET_TEXT_F(MSG_BED_TRAMMING)); // TODO: Chinese, English "Bed Tramming" JPG DWINUI::MenuItemsPrepare(6); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu); ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_FL), onDrawMenuItem, LevBedFL); @@ -3220,7 +3220,7 @@ void Draw_Control_Menu() { if (ControlMenu == nullptr) ControlMenu = new MenuClass(); if (CurrentMenu != ControlMenu) { CurrentMenu = ControlMenu; - SetMenuTitle({103, 1, 28, 14}, {128, 2, 49, 11}, GET_TEXT_F(MSG_CONTROL)); + SetMenuTitle({103, 1, 28, 14}, GET_TEXT_F(MSG_CONTROL)); DWINUI::MenuItemsPrepare(9); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu); ADDMENUITEM(ICON_Temperature, GET_TEXT_F(MSG_TEMPERATURE), onDrawTempSubMenu, Draw_Temperature_Menu); @@ -3242,8 +3242,8 @@ void Draw_AdvancedSettings_Menu() { if (AdvancedSettings == nullptr) AdvancedSettings = new MenuClass(); if (CurrentMenu != AdvancedSettings) { CurrentMenu = AdvancedSettings; - SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_ADVANCED_SETTINGS)); // TODO: Chinese, English "Advanced Settings" JPG - DWINUI::MenuItemsPrepare(11); + SetMenuTitle({0}, GET_TEXT_F(MSG_ADVANCED_SETTINGS)); // TODO: Chinese, English "Advanced Settings" JPG + DWINUI::MenuItemsPrepare(12); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu); #if HAS_HOME_OFFSET ADDMENUITEM(ICON_HomeOffset, GET_TEXT_F(MSG_SET_HOME_OFFSETS), onDrawSubMenu, Draw_HomeOffset_Menu); @@ -3283,7 +3283,7 @@ void Draw_Move_Menu() { if (MoveMenu == nullptr) MoveMenu = new MenuClass(); if (CurrentMenu != MoveMenu) { CurrentMenu = MoveMenu; - SetMenuTitle({192, 1, 42, 14}, {231, 2, 35, 11}, GET_TEXT_F(MSG_MOVE_AXIS)); + SetMenuTitle({192, 1, 42, 14}, GET_TEXT_F(MSG_MOVE_AXIS)); DWINUI::MenuItemsPrepare(5); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu); ADDMENUITEM_P(ICON_MoveX, GET_TEXT_F(MSG_MOVE_X), onDrawMoveX, SetMoveX, ¤t_position.x); @@ -3303,7 +3303,7 @@ void Draw_Move_Menu() { if (HomeOffMenu == nullptr) HomeOffMenu = new MenuClass(); if (CurrentMenu != HomeOffMenu) { CurrentMenu = HomeOffMenu; - SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_SET_HOME_OFFSETS)); // TODO: Chinese, English "Set Home Offsets" JPG + SetMenuTitle({0}, GET_TEXT_F(MSG_SET_HOME_OFFSETS)); // TODO: Chinese, English "Set Home Offsets" JPG DWINUI::MenuItemsPrepare(4); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu); ADDMENUITEM_P(ICON_HomeOffsetX, GET_TEXT_F(MSG_HOME_OFFSET_X), onDrawPFloatMenu, SetHomeOffsetX, &home_offset[X_AXIS]); @@ -3320,7 +3320,7 @@ void Draw_Move_Menu() { if (ProbeSetMenu == nullptr) ProbeSetMenu = new MenuClass(); if (CurrentMenu != ProbeSetMenu) { CurrentMenu = ProbeSetMenu; - SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_ZPROBE_SETTINGS)); // TODO: Chinese, English "Probe Settings" JPG + SetMenuTitle({0}, GET_TEXT_F(MSG_ZPROBE_SETTINGS)); // TODO: Chinese, English "Probe Settings" JPG DWINUI::MenuItemsPrepare(5); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu); ADDMENUITEM_P(ICON_ProbeOffsetX, GET_TEXT_F(MSG_ZPROBE_XOFFSET), onDrawPFloatMenu, SetProbeOffsetX, &probe.offset.x); @@ -3364,7 +3364,7 @@ void Draw_SelectColors_Menu() { if (SelectColorMenu == nullptr) SelectColorMenu = new MenuClass(); if (CurrentMenu != SelectColorMenu) { CurrentMenu = SelectColorMenu; - SetMenuTitle({0}, {0}, F("Select Colors")); // TODO: Chinese, English "Select Color" JPG + SetMenuTitle({0}, F("Select Colors")); // TODO: Chinese, English "Select Color" JPG DWINUI::MenuItemsPrepare(20); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu); ADDMENUITEM(ICON_StockConfiguration, GET_TEXT_F(MSG_RESTORE_DEFAULTS), onDrawMenuItem, RestoreDefaultsColors); @@ -3395,7 +3395,7 @@ void Draw_GetColor_Menu() { if (GetColorMenu == nullptr) GetColorMenu = new MenuClass(); if (CurrentMenu != GetColorMenu) { CurrentMenu = GetColorMenu; - SetMenuTitle({0}, {0}, F("Get Color")); // TODO: Chinese, English "Get Color" JPG + SetMenuTitle({0}, F("Get Color")); // TODO: Chinese, English "Get Color" JPG DWINUI::MenuItemsPrepare(5); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, DWIN_ApplyColor); ADDMENUITEM(ICON_Cancel, GET_TEXT_F(MSG_BUTTON_CANCEL), onDrawMenuItem, Draw_SelectColors_Menu); @@ -3412,7 +3412,7 @@ void Draw_Tune_Menu() { if (TuneMenu == nullptr) TuneMenu = new MenuClass(); if (CurrentMenu != TuneMenu) { CurrentMenu = TuneMenu; - SetMenuTitle({73, 2, 28, 12}, {94, 2, 33, 11}, GET_TEXT_F(MSG_TUNE)); // TODO: Chinese, English "Tune" JPG + SetMenuTitle({73, 2, 28, 12}, GET_TEXT_F(MSG_TUNE)); // TODO: Chinese, English "Tune" JPG DWINUI::MenuItemsPrepare(10); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_PrintProcess); ADDMENUITEM_P(ICON_Speed, GET_TEXT_F(MSG_SPEED), onDrawSpeedItem, SetSpeed, &feedrate_percentage); @@ -3445,7 +3445,7 @@ void Draw_Motion_Menu() { if (MotionMenu == nullptr) MotionMenu = new MenuClass(); if (CurrentMenu != MotionMenu) { CurrentMenu = MotionMenu; - SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_MOTION)); // TODO: Chinese, English "Motion" JPG + SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_MOTION)); // TODO: Chinese, English "Motion" JPG DWINUI::MenuItemsPrepare(6); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu); ADDMENUITEM(ICON_MaxSpeed, GET_TEXT_F(MSG_SPEED), onDrawSpeed, Draw_MaxSpeed_Menu); @@ -3465,7 +3465,7 @@ void Draw_Motion_Menu() { if (FilamentMenu == nullptr) FilamentMenu = new MenuClass(); if (CurrentMenu != FilamentMenu) { CurrentMenu = FilamentMenu; - SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_FILAMENT_MAN)); // TODO: Chinese, English "Filament Management" JPG + SetMenuTitle({0}, GET_TEXT_F(MSG_FILAMENT_MAN)); // TODO: Chinese, English "Filament Management" JPG DWINUI::MenuItemsPrepare(5); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu); ADDMENUITEM(ICON_Park, GET_TEXT_F(MSG_FILAMENT_PARK_ENABLED), onDrawMenuItem, ParkHead); @@ -3485,8 +3485,8 @@ void Draw_Motion_Menu() { if (ManualMesh == nullptr) ManualMesh = new MenuClass(); if (CurrentMenu != ManualMesh) { CurrentMenu = ManualMesh; - SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_MANUAL_MESH)); // TODO: Chinese, English "Manual Mesh Leveling" JPG - DWINUI::MenuItemsPrepare(5); + SetMenuTitle({0}, GET_TEXT_F(MSG_MANUAL_MESH)); // TODO: Chinese, English "Manual Mesh Leveling" JPG + DWINUI::MenuItemsPrepare(6); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu); ADDMENUITEM(ICON_ManualMesh, GET_TEXT_F(MSG_LEVEL_BED), onDrawMenuItem, ManualMeshStart); MMeshMoveZItem = ADDMENUITEM_P(ICON_Zoffset, GET_TEXT_F(MSG_MOVE_Z), onDrawMMeshMoveZ, SetMMeshMoveZ, ¤t_position.z); @@ -3500,11 +3500,11 @@ void Draw_Motion_Menu() { #if HAS_PREHEAT - void Draw_Preheat_Menu(frame_rect_t cn, frame_rect_t en, const __FlashStringHelper* fstr) { + void Draw_Preheat_Menu(frame_rect_t cn, const __FlashStringHelper* fstr) { checkkey = Menu; if (CurrentMenu != PreheatMenu) { CurrentMenu = PreheatMenu; - SetMenuTitle(cn, en, fstr); + SetMenuTitle(cn, fstr); DWINUI::MenuItemsPrepare(5); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Temperature_Menu); #if HAS_HOTEND @@ -3526,13 +3526,13 @@ void Draw_Motion_Menu() { void Draw_Preheat1_Menu() { HMI_value.Preheat = 0; if (PreheatMenu == nullptr) PreheatMenu = new MenuClass(); - Draw_Preheat_Menu({59, 16, 81, 14}, {56, 15, 85, 14}, F(PREHEAT_1_LABEL " Preheat Settings")); // TODO: English "PLA Settings" JPG + Draw_Preheat_Menu({59, 16, 81, 14}, F(PREHEAT_1_LABEL " Preheat Settings")); // TODO: English "PLA Settings" JPG } void Draw_Preheat2_Menu() { HMI_value.Preheat = 1; if (PreheatMenu == nullptr) PreheatMenu = new MenuClass(); - Draw_Preheat_Menu({142, 16, 82, 14}, {56, 15, 85, 14}, F(PREHEAT_2_LABEL " Preheat Settings")); // TODO: English "ABS Settings" JPG + Draw_Preheat_Menu({142, 16, 82, 14}, F(PREHEAT_2_LABEL " Preheat Settings")); // TODO: English "ABS Settings" JPG } #ifdef PREHEAT_3_LABEL @@ -3540,7 +3540,7 @@ void Draw_Motion_Menu() { HMI_value.Preheat = 2; if (PreheatMenu == nullptr) PreheatMenu = new MenuClass(); #define PREHEAT_3_TITLE PREHEAT_3_LABEL " Preheat Set." - Draw_Preheat_Menu({0}, {0}, F(PREHEAT_3_TITLE)); // TODO: Chinese, English "Custom Preheat Settings" JPG + Draw_Preheat_Menu({0}, F(PREHEAT_3_TITLE)); // TODO: Chinese, English "Custom Preheat Settings" JPG } #endif @@ -3551,7 +3551,7 @@ void Draw_Temperature_Menu() { if (TemperatureMenu == nullptr) TemperatureMenu = new MenuClass(); if (CurrentMenu != TemperatureMenu) { CurrentMenu = TemperatureMenu; - SetMenuTitle({236, 2, 28, 12}, {56, 15, 85, 14}, GET_TEXT_F(MSG_TEMPERATURE)); + SetMenuTitle({236, 2, 28, 12}, GET_TEXT_F(MSG_TEMPERATURE)); DWINUI::MenuItemsPrepare(7); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu); #if HAS_HOTEND @@ -3579,7 +3579,7 @@ void Draw_MaxSpeed_Menu() { if (MaxSpeedMenu == nullptr) MaxSpeedMenu = new MenuClass(); if (CurrentMenu != MaxSpeedMenu) { CurrentMenu = MaxSpeedMenu; - SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_MAXSPEED)); + SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_MAXSPEED)); DWINUI::MenuItemsPrepare(5); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu); ADDMENUITEM_P(ICON_MaxSpeedX, GET_TEXT_F(MSG_MAXSPEED_X), onDrawMaxSpeedX, SetMaxSpeedX, &planner.settings.max_feedrate_mm_s[X_AXIS]); @@ -3597,7 +3597,7 @@ void Draw_MaxAccel_Menu() { if (MaxAccelMenu == nullptr) MaxAccelMenu = new MenuClass(); if (CurrentMenu != MaxAccelMenu) { CurrentMenu = MaxAccelMenu; - SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_ACCELERATION)); + SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_ACCELERATION)); DWINUI::MenuItemsPrepare(5); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu); ADDMENUITEM_P(ICON_MaxAccX, GET_TEXT_F(MSG_AMAX_A), onDrawMaxAccelX, SetMaxAccelX, &planner.settings.max_acceleration_mm_per_s2[X_AXIS]); @@ -3616,7 +3616,7 @@ void Draw_MaxAccel_Menu() { if (MaxJerkMenu == nullptr) MaxJerkMenu = new MenuClass(); if (CurrentMenu != MaxJerkMenu) { CurrentMenu = MaxJerkMenu; - SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_JERK)); + SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_JERK)); DWINUI::MenuItemsPrepare(5); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu); ADDMENUITEM_P(ICON_MaxSpeedJerkX, GET_TEXT_F(MSG_VA_JERK), onDrawMaxJerkX, SetMaxJerkX, &planner.max_jerk[X_AXIS]); @@ -3635,7 +3635,7 @@ void Draw_Steps_Menu() { if (StepsMenu == nullptr) StepsMenu = new MenuClass(); if (CurrentMenu != StepsMenu) { CurrentMenu = StepsMenu; - SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_STEPS_PER_MM)); + SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_STEPS_PER_MM)); DWINUI::MenuItemsPrepare(5); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu); ADDMENUITEM_P(ICON_StepX, GET_TEXT_F(MSG_A_STEPS), onDrawStepsX, SetStepsX, &planner.settings.axis_steps_per_mm[X_AXIS]); diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.h b/Marlin/src/lcd/e3v2/enhanced/dwin.h index 90b7ceacfa..05b81c1019 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.h @@ -24,8 +24,8 @@ /** * DWIN UI Enhanced implementation * Author: Miguel A. Risco-Castillo - * Version: 3.6.3 - * Date: 2021/09/08 + * Version: 3.7.1 + * Date: 2021/11/09 */ #include "../../../inc/MarlinConfigPre.h" @@ -154,6 +154,7 @@ void HMI_SDCardUpdate(); // Other void Goto_PrintProcess(); void Goto_Main_Menu(); +void Goto_InfoMenu(); void Draw_Select_Highlight(const bool sel); void Draw_Status_Area(const bool with_update); // Status Area void Draw_Main_Area(); // Redraw main area; diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp index 93477be0b8..681b318a15 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp @@ -23,8 +23,8 @@ /** * DWIN UI Enhanced implementation * Author: Miguel A. Risco-Castillo - * Version: 3.6.3 - * Date: 2021/09/08 + * Version: 3.7.1 + * Date: 2021/11/09 */ #include "../../../inc/MarlinConfigPre.h" diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h b/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h index c49f23af45..43cb098b91 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h @@ -24,8 +24,8 @@ /** * DWIN UI Enhanced implementation * Author: Miguel A. Risco-Castillo - * Version: 3.6.3 - * Date: 2021/09/08 + * Version: 3.7.1 + * Date: 2021/11/09 */ #include "../common/dwin_api.h" @@ -48,13 +48,6 @@ inline void DWIN_Draw_QR(uint8_t QR_Pixel, uint16_t x, uint16_t y, FSTR_P title) // x/y: Screen paste point void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y); -// Copy area from virtual display area to current screen -// cacheID: virtual area number -// xStart/yStart: Upper-left of virtual area -// xEnd/yEnd: Lower-right of virtual area -// x/y: Screen paste point -void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y); - // Copy area from current virtual display area to current screen // xStart/yStart: Upper-left of virtual area // xEnd/yEnd: Lower-right of virtual area diff --git a/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp b/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp index 6c46eb31f1..824aca07f8 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp @@ -23,8 +23,8 @@ /** * DWIN UI Enhanced implementation * Author: Miguel A. Risco-Castillo - * Version: 3.6.3 - * Date: 2021/09/08 + * Version: 3.7.1 + * Date: 2021/11/09 */ #include "../../../inc/MarlinConfigPre.h" @@ -38,8 +38,8 @@ //#define DEBUG_OUT 1 #include "../../../core/debug_out.h" -uint8_t MenuItemTotal = 0; -uint8_t MenuItemCount = 0; +int8_t MenuItemTotal = 0; +int8_t MenuItemCount = 0; MenuItemClass** MenuItems = nullptr; MenuClass *CurrentMenu = nullptr; MenuClass *PreviousMenu = nullptr; @@ -50,8 +50,8 @@ uint16_t DWINUI::textcolor = Def_Text_Color; uint16_t DWINUI::backcolor = Def_Background_Color; uint8_t DWINUI::font = font8x16; -void (*DWINUI::onCursorErase)(uint8_t line)=nullptr; -void (*DWINUI::onCursorDraw)(uint8_t line)=nullptr; +void (*DWINUI::onCursorErase)(const int8_t line)=nullptr; +void (*DWINUI::onCursorDraw)(const int8_t line)=nullptr; void (*DWINUI::onTitleDraw)(TitleClass* title)=nullptr; void (*DWINUI::onMenuDraw)(MenuClass* menu)=nullptr; @@ -304,14 +304,14 @@ void DWINUI::ClearMenuArea() { void DWINUI::MenuItemsClear() { if (MenuItems == nullptr) return; - for (uint8_t i = 0; i < MenuItemCount; i++) delete MenuItems[i]; + for (int8_t i = 0; i < MenuItemCount; i++) delete MenuItems[i]; delete[] MenuItems; MenuItems = nullptr; MenuItemCount = 0; MenuItemTotal = 0; } -void DWINUI::MenuItemsPrepare(uint8_t totalitems) { +void DWINUI::MenuItemsPrepare(int8_t totalitems) { MenuItemsClear(); MenuItemTotal = totalitems; MenuItems = new MenuItemClass*[totalitems]; @@ -379,7 +379,7 @@ MenuClass::MenuClass() { void MenuClass::draw() { MenuTitle.draw(); if (DWINUI::onMenuDraw != nullptr) (*DWINUI::onMenuDraw)(this); - for (uint8_t i = 0; i < MenuItemCount; i++) + for (int8_t i = 0; i < MenuItemCount; i++) MenuItems[i]->draw(i - topline); if (DWINUI::onCursorDraw != nullptr) DWINUI::onCursorDraw(line()); DWIN_UpdateLCD(); diff --git a/Marlin/src/lcd/e3v2/enhanced/dwinui.h b/Marlin/src/lcd/e3v2/enhanced/dwinui.h index 8cbb66fdf0..078b3cc58b 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwinui.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwinui.h @@ -24,11 +24,10 @@ /** * DWIN UI Enhanced implementation * Author: Miguel A. Risco-Castillo - * Version: 3.6.3 - * Date: 2021/09/08 + * Version: 3.7.1 + * Date: 2021/11/09 */ -#include "../../../core/types.h" #include "dwin_lcd.h" #include "../common/dwin_set.h" #include "../common/dwin_font.h" @@ -138,7 +137,7 @@ extern TitleClass Title; class MenuItemClass { protected: public: - uint8_t pos = 0; + int8_t pos = 0; uint8_t icon = 0; char caption[32] = ""; uint8_t frameid = 0; @@ -185,8 +184,8 @@ namespace DWINUI { extern uint16_t backcolor; extern uint8_t font; - extern void (*onCursorErase)(uint8_t line); - extern void (*onCursorDraw)(uint8_t line); + extern void (*onCursorErase)(const int8_t line); + extern void (*onCursorDraw)(const int8_t line); extern void (*onTitleDraw)(TitleClass* title); extern void (*onMenuDraw)(MenuClass* menu); @@ -342,6 +341,12 @@ namespace DWINUI { // rlimit: For draw less chars than string length use rlimit void Draw_String(const char * const string, uint16_t rlimit = 0xFFFF); void Draw_String(uint16_t color, const char * const string, uint16_t rlimit = 0xFFFF); + inline void Draw_String(FSTR_P string, uint16_t rlimit = 0xFFFF) { + Draw_String(FTOP(string), rlimit); + } + inline void Draw_String(uint16_t color, FSTR_P string, uint16_t rlimit = 0xFFFF) { + Draw_String(color, FTOP(string), rlimit); + } // Draw a string // size: Font size @@ -353,25 +358,25 @@ namespace DWINUI { DWIN_Draw_String(false, font, textcolor, backcolor, x, y, string); } inline void Draw_String(uint16_t x, uint16_t y, FSTR_P title) { - DWIN_Draw_String(false, font, textcolor, backcolor, x, y, (char *)title); + DWIN_Draw_String(false, font, textcolor, backcolor, x, y, FTOP(title)); } inline void Draw_String(uint16_t color, uint16_t x, uint16_t y, const char * const string) { DWIN_Draw_String(false, font, color, backcolor, x, y, string); } inline void Draw_String(uint16_t color, uint16_t x, uint16_t y, FSTR_P title) { - DWIN_Draw_String(false, font, color, backcolor, x, y, (char *)title); + DWIN_Draw_String(false, font, color, backcolor, x, y, title); } inline void Draw_String(uint16_t color, uint16_t bgcolor, uint16_t x, uint16_t y, const char * const string) { DWIN_Draw_String(true, font, color, bgcolor, x, y, string); } inline void Draw_String(uint16_t color, uint16_t bgcolor, uint16_t x, uint16_t y, FSTR_P title) { - DWIN_Draw_String(true, font, color, bgcolor, x, y, (char *)title); + DWIN_Draw_String(true, font, color, bgcolor, x, y, title); } inline void Draw_String(uint8_t size, uint16_t color, uint16_t bgcolor, uint16_t x, uint16_t y, const char * const string) { DWIN_Draw_String(true, size, color, bgcolor, x, y, string); } inline void Draw_String(uint8_t size, uint16_t color, uint16_t bgcolor, uint16_t x, uint16_t y, FSTR_P title) { - DWIN_Draw_String(true, size, color, bgcolor, x, y, (char *)title); + DWIN_Draw_String(true, size, color, bgcolor, x, y, title); } // Draw a centered string using DWIN_WIDTH @@ -382,8 +387,8 @@ namespace DWINUI { // y: Upper coordinate of the string // *string: The string void Draw_CenteredString(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t y, const char * const string); - inline void Draw_CenteredString(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t y, FSTR_P title) { - Draw_CenteredString(bShow, size, color, bColor, y, (char *)title); + inline void Draw_CenteredString(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t y, FSTR_P string) { + Draw_CenteredString(bShow, size, color, bColor, y, FTOP(string)); } inline void Draw_CenteredString(uint16_t color, uint16_t bcolor, uint16_t y, const char * const string) { Draw_CenteredString(true, font, color, bcolor, y, string); @@ -392,19 +397,19 @@ namespace DWINUI { Draw_CenteredString(false, size, color, backcolor, y, string); } inline void Draw_CenteredString(uint8_t size, uint16_t color, uint16_t y, FSTR_P title) { - Draw_CenteredString(false, size, color, backcolor, y, (char *)title); + Draw_CenteredString(false, size, color, backcolor, y, title); } inline void Draw_CenteredString(uint16_t color, uint16_t y, const char * const string) { Draw_CenteredString(false, font, color, backcolor, y, string); } inline void Draw_CenteredString(uint16_t color, uint16_t y, FSTR_P title) { - Draw_CenteredString(false, font, color, backcolor, y, (char *)title); + Draw_CenteredString(false, font, color, backcolor, y, title); } inline void Draw_CenteredString(uint16_t y, const char * const string) { Draw_CenteredString(false, font, textcolor, backcolor, y, string); } inline void Draw_CenteredString(uint16_t y, FSTR_P title) { - Draw_CenteredString(false, font, textcolor, backcolor, y, (char *)title); + Draw_CenteredString(false, font, textcolor, backcolor, y, title); } // Draw a circle @@ -477,7 +482,7 @@ namespace DWINUI { void MenuItemsClear(); // Prepare MenuItems array - void MenuItemsPrepare(uint8_t totalitems); + void MenuItemsPrepare(int8_t totalitems); // Add elements to the MenuItems array MenuItemClass* MenuItemsAdd(MenuItemClass* menuitem); diff --git a/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp b/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp index 8d6b5fa2c0..3824d63b2b 100644 --- a/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp @@ -1,8 +1,8 @@ /** * DWIN Mesh Viewer * Author: Miguel A. Risco-Castillo - * version: 2.5 - * Date: 2021/09/27 + * version: 3.8.1 + * Date: 2021/11/06 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as @@ -35,13 +35,15 @@ MeshViewerClass MeshViewer; void MeshViewerClass::Draw() { - const int8_t mx = 30, my = 30; // Margins + const int8_t mx = 25, my = 25; // Margins const int16_t stx = (DWIN_WIDTH - 2 * mx) / (GRID_MAX_POINTS_X - 1), // Steps sty = (DWIN_WIDTH - 2 * my) / (GRID_MAX_POINTS_Y - 1); - int8_t zmesh[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y], maxz =-127, minz = 127; + const int8_t rmax = _MIN(mx - 2, stx / 2); + const int8_t rmin = 7; + int16_t zmesh[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y], maxz =-32000, minz = 32000; #define px(xp) (mx + (xp) * stx) #define py(yp) (30 + DWIN_WIDTH - my - (yp) * sty) - #define rm(z) ((((z) - minz) * 10 / _MAX(1, (maxz - minz))) + 10) + #define rm(z) ((z - minz) * (rmax - rmin) / _MAX(1, (maxz - minz)) + rmin) #define DrawMeshValue(xp, yp, zv) DWINUI::Draw_Signed_Float(font6x12, 1, 2, px(xp) - 12, py(yp) - 6, zv) #define DrawMeshHLine(yp) DWIN_Draw_HLine(HMI_data.SplitLine_Color, px(0), py(yp), DWIN_WIDTH - 2 * mx) #define DrawMeshVLine(xp) DWIN_Draw_VLine(HMI_data.SplitLine_Color, px(xp), py(GRID_MAX_POINTS_Y - 1), DWIN_WIDTH - 2 * my) @@ -61,8 +63,33 @@ void MeshViewerClass::Draw() { watchdog_refresh(); LOOP_L_N(x, GRID_MAX_POINTS_X) { uint16_t color = DWINUI::RainbowInt(zmesh[x][y], _MIN(-5, minz), _MAX(5, maxz)); - DWINUI::Draw_FillCircle(color, px(x), py(y), rm(zmesh[x][y])); - DrawMeshValue(x, y, Z_VALUES(x,y)); + uint8_t radius = rm(zmesh[x][y]); + DWINUI::Draw_FillCircle(color, px(x), py(y), radius); + if (GRID_MAX_POINTS_X < 9) + DWINUI::Draw_Signed_Float(font6x12, 1, 2, px(x) - 12, py(y) - 6, Z_VALUES(x,y)); + else { + char str_1[9]; + str_1[0] = 0; + switch (zmesh[x][y]) { + case -999 ... -100: + DWINUI::Draw_Signed_Float(font6x12, 1, 1, px(x) - 12, py(y) - 6, Z_VALUES(x,y)); + break; + case -99 ... -1: + sprintf_P(str_1, PSTR("-.%02i"), -zmesh[x][y]); + break; + case 0: + DWIN_Draw_String(false, font6x12, DWINUI::textcolor, DWINUI::backcolor, px(x) - 4, py(y) - 6, "0");; + break; + case 1 ... 99: + sprintf_P(str_1, PSTR(".%02i"), zmesh[x][y]); + break; + case 100 ... 999: + DWINUI::Draw_Signed_Float(font6x12, 1, 1, px(x) - 12, py(y) - 6, Z_VALUES(x,y)); + break; + } + if (str_1[0]) + DWIN_Draw_String(false, font6x12, DWINUI::textcolor, DWINUI::backcolor, px(x) - 12, py(y) - 6, str_1); + } } } char str_1[6], str_2[6] = ""; diff --git a/Marlin/src/lcd/e3v2/enhanced/meshviewer.h b/Marlin/src/lcd/e3v2/enhanced/meshviewer.h index 4f7a6ae1d2..0ba6ae2d7d 100644 --- a/Marlin/src/lcd/e3v2/enhanced/meshviewer.h +++ b/Marlin/src/lcd/e3v2/enhanced/meshviewer.h @@ -1,8 +1,8 @@ /** * DWIN Mesh Viewer * Author: Miguel A. Risco-Castillo - * version: 2.5 - * Date: 2021/09/27 + * Version: 3.8.1 + * Date: 2021/11/06 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index f4eba776b6..0cb29f29e0 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -3044,8 +3044,6 @@ void MarlinSettings::reset() { postprocess(); DEBUG_ECHO_MSG("Hardcoded Default Settings Loaded"); - - TERN_(EXTENSIBLE_UI, ExtUI::onFactoryReset()); } #if DISABLED(DISABLE_M503) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index cef348c5f9..48941532c8 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -3731,8 +3731,9 @@ void Temperature::isr() { HMI_flag.heat_flag = 0; duration_t elapsed = print_job_timer.duration(); // print timer dwin_heat_time = elapsed.value; + #else + ui.reset_status(); #endif - ui.reset_status(); TERN_(PRINTER_EVENT_LEDS, printerEventLEDs.onHeatingDone()); return true; } From ecd4cdb2983e6eb0d2f6a112f1706b0e7c158ec2 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 11 Nov 2021 01:01:59 +0000 Subject: [PATCH 122/532] [cron] Bump distribution date (2021-11-11) --- 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 0f2136cbdd..6d97693cd1 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 "2021-11-10" +//#define STRING_DISTRIBUTION_DATE "2021-11-11" /** * 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 e61948958d..3b5f97d1c4 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 "2021-11-10" + #define STRING_DISTRIBUTION_DATE "2021-11-11" #endif /** From 72de764488b96a28d44668e0f246fa86cbadcb0a Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 12 Nov 2021 01:02:28 +0000 Subject: [PATCH 123/532] [cron] Bump distribution date (2021-11-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 6d97693cd1..1643741f49 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 "2021-11-11" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 3b5f97d1c4..badb7231e0 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 "2021-11-11" + #define STRING_DISTRIBUTION_DATE "2021-11-12" #endif /** From 4a840e15e160038b139131ec559b220e0ac4318e Mon Sep 17 00:00:00 2001 From: Skruppy Date: Fri, 12 Nov 2021 15:57:24 +0100 Subject: [PATCH 124/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20RGB=20case=20light?= =?UTF-8?q?=20compile=20(#23108)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/caselight.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Marlin/src/feature/caselight.cpp b/Marlin/src/feature/caselight.cpp index 7c4755d0b5..59832fd6ed 100644 --- a/Marlin/src/feature/caselight.cpp +++ b/Marlin/src/feature/caselight.cpp @@ -39,7 +39,6 @@ CaseLight caselight; bool CaseLight::on = CASE_LIGHT_DEFAULT_ON; #if CASE_LIGHT_IS_COLOR_LED - #include "leds/leds.h" constexpr uint8_t init_case_light[] = CASE_LIGHT_DEFAULT_COLOR; LEDColor CaseLight::color = { init_case_light[0], init_case_light[1], init_case_light[2] OPTARG(HAS_WHITE_LED, init_case_light[3]) }; #endif @@ -65,7 +64,7 @@ void CaseLight::update(const bool sflag) { #endif #if CASE_LIGHT_IS_COLOR_LED - leds.set_color(LEDColor(color.r, color.g, color.b OPTARG(HAS_WHITE_LED, color.w), n10ct)); + leds.set_color(LEDColor(color.r, color.g, color.b OPTARG(HAS_WHITE_LED, color.w) OPTARG(NEOPIXEL_LED, n10ct))); #else // !CASE_LIGHT_IS_COLOR_LED #if CASELIGHT_USES_BRIGHTNESS From 649c7685bf3c06b7faf39400538831b76e24d392 Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Fri, 12 Nov 2021 12:14:28 -0600 Subject: [PATCH 125/532] =?UTF-8?q?=F0=9F=90=9B=20[LCP1768]=20Init=20PWM?= =?UTF-8?q?=20in=20set=5Fpwm=5Fduty=20(#23110)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/LPC1768/fast_pwm.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Marlin/src/HAL/LPC1768/fast_pwm.cpp b/Marlin/src/HAL/LPC1768/fast_pwm.cpp index 70fc0e333d..197abb3310 100644 --- a/Marlin/src/HAL/LPC1768/fast_pwm.cpp +++ b/Marlin/src/HAL/LPC1768/fast_pwm.cpp @@ -25,7 +25,9 @@ #include void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { - LPC176x::pwm_write_ratio(pin, invert ? 1.0f - (float)v / v_size : (float)v / v_size); + if (!LPC176x::pin_is_valid(pin)) return; + if (LPC176x::pwm_attach_pin(pin)) + LPC176x::pwm_write_ratio(pin, invert ? 1.0f - (float)v / v_size : (float)v / v_size); // map 1-254 onto PWM range } #if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM From 4aa2c6628f05ad60001e66a87e3f52e26c0998c9 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Fri, 12 Nov 2021 21:26:19 +0100 Subject: [PATCH 126/532] =?UTF-8?q?=F0=9F=8E=A8=20MPX=20ARM=20Mini=20pins?= =?UTF-8?q?=20cleanup=20(#23113)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pins/stm32f1/pins_MINGDA_MPX_ARM_MINI.h | 32 ++++++------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/Marlin/src/pins/stm32f1/pins_MINGDA_MPX_ARM_MINI.h b/Marlin/src/pins/stm32f1/pins_MINGDA_MPX_ARM_MINI.h index 3fed0adac3..87526bac87 100644 --- a/Marlin/src/pins/stm32f1/pins_MINGDA_MPX_ARM_MINI.h +++ b/Marlin/src/pins/stm32f1/pins_MINGDA_MPX_ARM_MINI.h @@ -22,16 +22,16 @@ #pragma once /** - * MKS Robin mini (STM32F103VET6) board pin assignments + * MPX ARM MINI (STM32F103ZET6) board pin assignments */ #if NOT_TARGET(STM32F1, STM32F1xx) #error "Oops! Select an STM32F1 board in 'Tools > Board.'" -#elif HOTENDS > 2 || E_STEPPERS > 2 - #error "MKS Robin supports up to 2 hotends / E-steppers. Comment out this line to continue." +#elif HOTENDS > 1 || E_STEPPERS > 1 + #error "MPX ARM Mini only supports one hotend / E-stepper. Comment out this line to continue." #endif -#define BOARD_INFO_NAME "Mingda MPX_ARM_MINI" +#define BOARD_INFO_NAME "Mingda MPX ARM Mini" #define BOARD_NO_NATIVE_USB #define DISABLE_DEBUG @@ -64,9 +64,9 @@ // Limit Switches // #define X_MIN_PIN PD6 -#define X_MAX_PIN PG15 +#define X_MAX_PIN PG15 // To double check #define Y_MIN_PIN PG9 -#define Y_MAX_PIN PG14 +#define Y_MAX_PIN PG14 // To double check #define Z_MIN_PIN PG10 #define Z_MAX_PIN PG13 @@ -137,18 +137,6 @@ // TFT with FSMC interface // #if HAS_FSMC_TFT - /** - * Note: MKS Robin TFT screens use various TFT controllers - * Supported screens are based on the ILI9341, ST7789V and ILI9328 (320x240) - * ILI9488 is not supported - * Define init sequences for other screens in u8g_dev_tft_320x240_upscale_from_128x64.cpp - * - * If the screen stays white, disable 'TFT_RESET_PIN' - * to let the bootloader init the screen. - * - * Setting an 'TFT_RESET_PIN' may cause a flicker when entering the LCD menu - * because Marlin uses the reset as a failsafe to revive a glitchy LCD. - */ #define TFT_RESET_PIN PF15 #define TFT_BACKLIGHT_PIN PF11 @@ -166,8 +154,8 @@ #endif #if NEED_TOUCH_PINS - #define TOUCH_CS_PIN PA4 // SPI2_NSS - #define TOUCH_SCK_PIN PA5 // SPI2_SCK - #define TOUCH_MISO_PIN PA6 // SPI2_MISO - #define TOUCH_MOSI_PIN PA7 // SPI2_MOSI + #define TOUCH_CS_PIN PA4 // SPI1_NSS + #define TOUCH_SCK_PIN PA5 // SPI1_SCK + #define TOUCH_MISO_PIN PA6 // SPI1_MISO + #define TOUCH_MOSI_PIN PA7 // SPI1_MOSI #endif From d89f472a4f5bc58d083698955a8cdcc1c6d7f956 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 13 Nov 2021 00:59:50 +0000 Subject: [PATCH 127/532] [cron] Bump distribution date (2021-11-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 1643741f49..f4cb9e1600 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 "2021-11-12" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 badb7231e0..be48e253ba 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 "2021-11-12" + #define STRING_DISTRIBUTION_DATE "2021-11-13" #endif /** From 5fa4631e375968dddbca5b584eabeb917a679464 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 14 Nov 2021 01:03:14 +0000 Subject: [PATCH 128/532] [cron] Bump distribution date (2021-11-14) --- 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 f4cb9e1600..b2150960b9 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 "2021-11-13" +//#define STRING_DISTRIBUTION_DATE "2021-11-14" /** * 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 be48e253ba..ed67ecef84 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 "2021-11-13" + #define STRING_DISTRIBUTION_DATE "2021-11-14" #endif /** From 8ee368b718ea7086522f9d64dc97e45a273d6832 Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Sun, 14 Nov 2021 05:55:31 -0600 Subject: [PATCH 129/532] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20Controller=20Fan?= =?UTF-8?q?=20software=20PWM=20(etc.)=20(#23102)?= 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 | 42 ++++----------------- Marlin/src/HAL/AVR/fastio.h | 30 ++++++--------- Marlin/src/HAL/AVR/inc/SanityCheck.h | 2 +- Marlin/src/HAL/AVR/pinsDebug.h | 43 +++++++++++----------- Marlin/src/feature/controllerfan.cpp | 12 ++++-- Marlin/src/lcd/menu/menu_configuration.cpp | 4 +- Marlin/src/module/temperature.cpp | 19 ++++++++++ Marlin/src/module/temperature.h | 4 ++ 8 files changed, 76 insertions(+), 80 deletions(-) diff --git a/Marlin/src/HAL/AVR/fast_pwm.cpp b/Marlin/src/HAL/AVR/fast_pwm.cpp index 2556fa0441..cbe4fed94a 100644 --- a/Marlin/src/HAL/AVR/fast_pwm.cpp +++ b/Marlin/src/HAL/AVR/fast_pwm.cpp @@ -54,8 +54,8 @@ Timer get_pwm_timer(const pin_t pin) { case TIMER1A: case TIMER1B: #endif break; - #if defined(TCCR2) || defined(TCCR2A) - #ifdef TCCR2 + #if HAS_TCCR2 || defined(TCCR2A) + #if HAS_TCCR2 case TIMER2: { Timer timer = { /*TCCRnQ*/ { &TCCR2, nullptr, nullptr }, @@ -200,16 +200,7 @@ void set_pwm_frequency(const pin_t pin, int f_desired) { res = res_temp_fast; j = i; // Set the Wave Generation Mode to FAST PWM - if (timer.n == 2) { - wgm = ( - #if ENABLED(USE_OCR2A_AS_TOP) - WGM2_FAST_PWM_OCR2A - #else - WGM2_FAST_PWM - #endif - ); - } - else wgm = WGM_FAST_PWM_ICRn; + wgm = timer.n == 2 ? TERN(USE_OCR2A_AS_TOP, WGM2_FAST_PWM_OCR2A, WGM2_FAST_PWM) : WGM_FAST_PWM_ICRn; } // If PHASE CORRECT values are closes to desired f else if (f_phase_diff < f_diff) { @@ -217,16 +208,7 @@ void set_pwm_frequency(const pin_t pin, int f_desired) { res = res_temp_phase_correct; j = i; // Set the Wave Generation Mode to PWM PHASE CORRECT - if (timer.n == 2) { - wgm = ( - #if ENABLED(USE_OCR2A_AS_TOP) - WGM2_PWM_PC_OCR2A - #else - WGM2_PWM_PC - #endif - ); - } - else wgm = WGM_PWM_PC_ICRn; + wgm = timer.n == 2 ? TERN(USE_OCR2A_AS_TOP, WGM2_PWM_PC_OCR2A, WGM2_PWM_PC) : WGM_PWM_PC_ICRn; } } } @@ -234,9 +216,7 @@ void set_pwm_frequency(const pin_t pin, int f_desired) { _SET_CSn(timer.TCCRnQ, j); if (timer.n == 2) { - #if ENABLED(USE_OCR2A_AS_TOP) - _SET_OCRnQ(timer.OCRnQ, 0, res); // Set OCR2A value (TOP) = res - #endif + TERN_(USE_OCR2A_AS_TOP, _SET_OCRnQ(timer.OCRnQ, 0, res)); // Set OCR2A value (TOP) = res } else _SET_ICRn(timer.ICRn, res); // Set ICRn value (TOP) = res @@ -257,15 +237,9 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 Timer timer = get_pwm_timer(pin); if (timer.n == 0) return; // Don't proceed if protected timer or not recognized // Set compare output mode to CLEAR -> SET or SET -> CLEAR (if inverted) - _SET_COMnQ(timer.TCCRnQ, (timer.q - #ifdef TCCR2 - + (timer.q == 2) // COM20 is on bit 4 of TCCR2, thus requires q + 1 in the macro - #endif - ), COM_CLEAR_SET + invert - ); - - uint16_t top = (timer.n == 2) ? TERN(USE_OCR2A_AS_TOP, *timer.OCRnQ[0], 255) : *timer.ICRn; - _SET_OCRnQ(timer.OCRnQ, timer.q, (v * top + v_size / 2) / v_size); // Scale 8/16-bit v to top value + _SET_COMnQ(timer.TCCRnQ, timer.q TERN_(HAS_TCCR2, + (timer.q == 2)), COM_CLEAR_SET + invert); // COM20 is on bit 4 of TCCR2, so +1 for q==2 + const uint16_t top = timer.n == 2 ? TERN(USE_OCR2A_AS_TOP, *timer.OCRnQ[0], 255) : *timer.ICRn; + _SET_OCRnQ(timer.OCRnQ, timer.q, uint16_t(uint32_t(v) * top / v_size)); // Scale 8/16-bit v to top value } #else diff --git a/Marlin/src/HAL/AVR/fastio.h b/Marlin/src/HAL/AVR/fastio.h index f77d4f666c..db6e598b86 100644 --- a/Marlin/src/HAL/AVR/fastio.h +++ b/Marlin/src/HAL/AVR/fastio.h @@ -211,32 +211,32 @@ enum ClockSource2 : char { // Set Clock Select bits // Ex: SET_CS3(PRESCALER_64); +#ifdef TCCR2 + #define HAS_TCCR2 1 +#endif #define _SET_CS(T,V) (TCCR##T##B = (TCCR##T##B & ~(0x7 << CS##T##0)) | ((int(V) & 0x7) << CS##T##0)) #define _SET_CS0(V) _SET_CS(0,V) #define _SET_CS1(V) _SET_CS(1,V) -#ifdef TCCR2 - #define _SET_CS2(V) (TCCR2 = (TCCR2 & ~(0x7 << CS20)) | (int(V) << CS20)) -#else - #define _SET_CS2(V) _SET_CS(2,V) -#endif #define _SET_CS3(V) _SET_CS(3,V) #define _SET_CS4(V) _SET_CS(4,V) #define _SET_CS5(V) _SET_CS(5,V) #define SET_CS0(V) _SET_CS0(CS_##V) #define SET_CS1(V) _SET_CS1(CS_##V) -#ifdef TCCR2 + +#if HAS_TCCR2 + #define _SET_CS2(V) (TCCR2 = (TCCR2 & ~(0x7 << CS20)) | (int(V) << CS20)) #define SET_CS2(V) _SET_CS2(CS2_##V) #else + #define _SET_CS2(V) _SET_CS(2,V) #define SET_CS2(V) _SET_CS2(CS_##V) #endif + #define SET_CS3(V) _SET_CS3(CS_##V) #define SET_CS4(V) _SET_CS4(CS_##V) #define SET_CS5(V) _SET_CS5(CS_##V) #define SET_CS(T,V) SET_CS##T(V) // Runtime (see set_pwm_frequency) -#define _SET_CSn(TCCRnQ, V) do{ \ - (*(TCCRnQ)[1] = (*(TCCRnQ[1]) & ~(0x7 << 0)) | ((int(V) & 0x7) << 0)); \ - }while(0) +#define _SET_CSn(TCCRnQ, V) (*(TCCRnQ)[1] = (*(TCCRnQ[1]) & ~(0x7 << 0)) | ((int(V) & 0x7) << 0)) // Set Compare Mode bits // Ex: SET_COMS(4,CLEAR_SET,CLEAR_SET,CLEAR_SET); @@ -247,21 +247,15 @@ enum ClockSource2 : char { #define SET_COMC(T,V) SET_COM(T,C,V) #define SET_COMS(T,V1,V2,V3) do{ SET_COMA(T,V1); SET_COMB(T,V2); SET_COMC(T,V3); }while(0) // Runtime (see set_pwm_duty) -#define _SET_COMnQ(TCCRnQ, Q, V) do{ \ - (*(TCCRnQ)[0] = (*(TCCRnQ)[0] & ~(0x3 << (6-2*(Q)))) | (int(V) << (6-2*(Q)))); \ - }while(0) +#define _SET_COMnQ(TCCRnQ, Q, V) (*(TCCRnQ)[0] = (*(TCCRnQ)[0] & ~(0x3 << (6-2*(Q)))) | (int(V) << (6-2*(Q)))) // Set OCRnQ register // Runtime (see set_pwm_duty): -#define _SET_OCRnQ(OCRnQ, Q, V) do{ \ - (*(OCRnQ)[(Q)] = (0x0000) | (int(V) & 0xFFFF)); \ - }while(0) +#define _SET_OCRnQ(OCRnQ, Q, V) (*(OCRnQ)[Q] = int(V) & 0xFFFF) // Set ICRn register (one per timer) // Runtime (see set_pwm_frequency) -#define _SET_ICRn(ICRn, V) do{ \ - (*(ICRn) = (0x0000) | (int(V) & 0xFFFF)); \ - }while(0) +#define _SET_ICRn(ICRn, V) (*(ICRn) = int(V) & 0xFFFF) // Set Noise Canceler bit // Ex: SET_ICNC(2,1) diff --git a/Marlin/src/HAL/AVR/inc/SanityCheck.h b/Marlin/src/HAL/AVR/inc/SanityCheck.h index 79809b8f61..2f80d1fee1 100644 --- a/Marlin/src/HAL/AVR/inc/SanityCheck.h +++ b/Marlin/src/HAL/AVR/inc/SanityCheck.h @@ -28,7 +28,7 @@ /** * Checks for FAST PWM */ -#if ENABLED(FAST_PWM_FAN) && (ENABLED(USE_OCR2A_AS_TOP) && defined(TCCR2)) +#if ALL(FAST_PWM_FAN, USE_OCR2A_AS_TOP, HAS_TCCR2) #error "USE_OCR2A_AS_TOP does not apply to devices with a single output TIMER2" #endif diff --git a/Marlin/src/HAL/AVR/pinsDebug.h b/Marlin/src/HAL/AVR/pinsDebug.h index fcbb7af3e1..0f564df987 100644 --- a/Marlin/src/HAL/AVR/pinsDebug.h +++ b/Marlin/src/HAL/AVR/pinsDebug.h @@ -102,7 +102,7 @@ void PRINT_ARRAY_NAME(uint8_t x) { return true; \ } else return false - +#define ABTEST(N) defined(TCCR##N##A) && defined(COM##N##A1) /** * Print a pin's PWM status. @@ -113,7 +113,7 @@ static bool pwm_status(uint8_t pin) { switch (digitalPinToTimer_DEBUG(pin)) { - #if defined(TCCR0A) && defined(COM0A1) + #if ABTEST(0) #ifdef TIMER0A #if !AVR_AT90USB1286_FAMILY // not available in Teensyduino type IDEs PWM_CASE(0, A); @@ -122,20 +122,20 @@ static bool pwm_status(uint8_t pin) { PWM_CASE(0, B); #endif - #if defined(TCCR1A) && defined(COM1A1) + #if ABTEST(1) PWM_CASE(1, A); PWM_CASE(1, B); - #if defined(COM1C1) && defined(TIMER1C) - PWM_CASE(1, C); - #endif + #if defined(COM1C1) && defined(TIMER1C) + PWM_CASE(1, C); + #endif #endif - #if defined(TCCR2A) && defined(COM2A1) + #if ABTEST(2) PWM_CASE(2, A); PWM_CASE(2, B); #endif - #if defined(TCCR3A) && defined(COM3A1) + #if ABTEST(3) PWM_CASE(3, A); PWM_CASE(3, B); #ifdef COM3C1 @@ -149,7 +149,7 @@ static bool pwm_status(uint8_t pin) { PWM_CASE(4, C); #endif - #if defined(TCCR5A) && defined(COM5A1) + #if ABTEST(5) PWM_CASE(5, A); PWM_CASE(5, B); PWM_CASE(5, C); @@ -166,16 +166,16 @@ static bool pwm_status(uint8_t pin) { const volatile uint8_t* const PWM_other[][3] PROGMEM = { { &TCCR0A, &TCCR0B, &TIMSK0 }, { &TCCR1A, &TCCR1B, &TIMSK1 }, - #if defined(TCCR2A) && defined(COM2A1) + #if ABTEST(2) { &TCCR2A, &TCCR2B, &TIMSK2 }, #endif - #if defined(TCCR3A) && defined(COM3A1) + #if ABTEST(3) { &TCCR3A, &TCCR3B, &TIMSK3 }, #endif #ifdef TCCR4A { &TCCR4A, &TCCR4B, &TIMSK4 }, #endif - #if defined(TCCR5A) && defined(COM5A1) + #if ABTEST(5) { &TCCR5A, &TCCR5B, &TIMSK5 }, #endif }; @@ -195,11 +195,11 @@ const volatile uint8_t* const PWM_OCR[][3] PROGMEM = { { (const uint8_t*)&OCR1A, (const uint8_t*)&OCR1B, 0 }, #endif - #if defined(TCCR2A) && defined(COM2A1) + #if ABTEST(2) { &OCR2A, &OCR2B, 0 }, #endif - #if defined(TCCR3A) && defined(COM3A1) + #if ABTEST(3) #ifdef COM3C1 { (const uint8_t*)&OCR3A, (const uint8_t*)&OCR3B, (const uint8_t*)&OCR3C }, #else @@ -211,7 +211,7 @@ const volatile uint8_t* const PWM_OCR[][3] PROGMEM = { { (const uint8_t*)&OCR4A, (const uint8_t*)&OCR4B, (const uint8_t*)&OCR4C }, #endif - #if defined(TCCR5A) && defined(COM5A1) + #if ABTEST(5) { (const uint8_t*)&OCR5A, (const uint8_t*)&OCR5B, (const uint8_t*)&OCR5C }, #endif }; @@ -281,7 +281,7 @@ void timer_prefix(uint8_t T, char L, uint8_t N) { // T - timer L - pwm N - static void pwm_details(uint8_t pin) { switch (digitalPinToTimer_DEBUG(pin)) { - #if defined(TCCR0A) && defined(COM0A1) + #if ABTEST(0) #ifdef TIMER0A #if !AVR_AT90USB1286_FAMILY // not available in Teensyduino type IDEs case TIMER0A: timer_prefix(0, 'A', 3); break; @@ -290,7 +290,7 @@ static void pwm_details(uint8_t pin) { case TIMER0B: timer_prefix(0, 'B', 3); break; #endif - #if defined(TCCR1A) && defined(COM1A1) + #if ABTEST(1) case TIMER1A: timer_prefix(1, 'A', 4); break; case TIMER1B: timer_prefix(1, 'B', 4); break; #if defined(COM1C1) && defined(TIMER1C) @@ -298,12 +298,12 @@ static void pwm_details(uint8_t pin) { #endif #endif - #if defined(TCCR2A) && defined(COM2A1) + #if ABTEST(2) case TIMER2A: timer_prefix(2, 'A', 3); break; case TIMER2B: timer_prefix(2, 'B', 3); break; #endif - #if defined(TCCR3A) && defined(COM3A1) + #if ABTEST(3) case TIMER3A: timer_prefix(3, 'A', 4); break; case TIMER3B: timer_prefix(3, 'B', 4); break; #ifdef COM3C1 @@ -317,7 +317,7 @@ static void pwm_details(uint8_t pin) { case TIMER4C: timer_prefix(4, 'C', 4); break; #endif - #if defined(TCCR5A) && defined(COM5A1) + #if ABTEST(5) case TIMER5A: timer_prefix(5, 'A', 4); break; case TIMER5B: timer_prefix(5, 'B', 4); break; case TIMER5C: timer_prefix(5, 'C', 4); break; @@ -351,7 +351,6 @@ static void pwm_details(uint8_t pin) { #endif } // pwm_details - #ifndef digitalRead_mod // Use Teensyduino's version of digitalRead - it doesn't disable the PWMs int digitalRead_mod(const int8_t pin) { // same as digitalRead except the PWM stop section has been removed const uint8_t port = digitalPinToPort_DEBUG(pin); @@ -397,3 +396,5 @@ static void pwm_details(uint8_t pin) { #define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0) #define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), DIGITAL_PIN_TO_ANALOG_PIN(pin)); SERIAL_ECHO(buffer); }while(0) + +#undef ABTEST diff --git a/Marlin/src/feature/controllerfan.cpp b/Marlin/src/feature/controllerfan.cpp index 330f3914f6..59ba665e11 100644 --- a/Marlin/src/feature/controllerfan.cpp +++ b/Marlin/src/feature/controllerfan.cpp @@ -72,10 +72,14 @@ void ControllerFan::update() { ? settings.active_speed : settings.idle_speed ); - if (PWM_PIN(CONTROLLER_FAN_PIN)) - set_pwm_duty(pin_t(CONTROLLER_FAN_PIN), speed); - else - WRITE(CONTROLLER_FAN_PIN, speed); + #if ENABLED(FAN_SOFT_PWM) + thermalManager.soft_pwm_controller_speed = speed; + #else + if (PWM_PIN(CONTROLLER_FAN_PIN)) + set_pwm_duty(pin_t(CONTROLLER_FAN_PIN), speed); + else + WRITE(CONTROLLER_FAN_PIN, speed > 0); + #endif } } diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 6d6b0228fb..b976224b8c 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -266,10 +266,10 @@ void menu_advanced_settings(); void menu_controller_fan() { START_MENU(); BACK_ITEM(MSG_CONFIGURATION); - EDIT_ITEM_FAST(percent, MSG_CONTROLLER_FAN_IDLE_SPEED, &controllerFan.settings.idle_speed, _MAX(1, CONTROLLERFAN_SPEED_MIN) - 1, 255); + EDIT_ITEM_FAST(percent, MSG_CONTROLLER_FAN_IDLE_SPEED, &controllerFan.settings.idle_speed, CONTROLLERFAN_SPEED_MIN, 255); EDIT_ITEM(bool, MSG_CONTROLLER_FAN_AUTO_ON, &controllerFan.settings.auto_mode); if (controllerFan.settings.auto_mode) { - EDIT_ITEM_FAST(percent, MSG_CONTROLLER_FAN_SPEED, &controllerFan.settings.active_speed, _MAX(1, CONTROLLERFAN_SPEED_MIN) - 1, 255); + EDIT_ITEM_FAST(percent, MSG_CONTROLLER_FAN_SPEED, &controllerFan.settings.active_speed, CONTROLLERFAN_SPEED_MIN, 255); EDIT_ITEM(uint16_4, MSG_CONTROLLER_FAN_DURATION, &controllerFan.settings.duration, 0, 4800); } END_MENU(); diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 48941532c8..ede8aa73ac 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -41,6 +41,10 @@ #include "../feature/spindle_laser.h" #endif +#if ENABLED(USE_CONTROLLER_FAN) + #include "../feature/controllerfan.h" +#endif + #if ENABLED(EMERGENCY_PARSER) #include "motion.h" #endif @@ -302,6 +306,10 @@ PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED); uint8_t Temperature::coolerfan_speed; // = 0 #endif +#if BOTH(FAN_SOFT_PWM, USE_CONTROLLER_FAN) + uint8_t Temperature::soft_pwm_controller_speed; +#endif + // Init fans according to whether they're native PWM or Software PWM #ifdef BOARD_OPENDRAIN_MOSFETS #define _INIT_SOFT_FAN(P) OUT_WRITE_OD(P, FAN_INVERTING ? LOW : HIGH) @@ -3021,6 +3029,10 @@ void Temperature::isr() { static SoftPWM soft_pwm_cooler; #endif + #if BOTH(FAN_SOFT_PWM, USE_CONTROLLER_FAN) + static SoftPWM soft_pwm_controller; + #endif + #define WRITE_FAN(n, v) WRITE(FAN##n##_PIN, (v) ^ FAN_INVERTING) #if DISABLED(SLOW_PWM_HEATERS) @@ -3056,6 +3068,10 @@ void Temperature::isr() { _PWM_MOD(COOLER, soft_pwm_cooler, temp_cooler); #endif + #if BOTH(USE_CONTROLLER_FAN, FAN_SOFT_PWM) + WRITE(CONTROLLER_FAN_PIN, soft_pwm_controller.add(pwm_mask, soft_pwm_controller_speed)); + #endif + #if ENABLED(FAN_SOFT_PWM) #define _FAN_PWM(N) do{ \ uint8_t &spcf = soft_pwm_count_fan[N]; \ @@ -3132,6 +3148,9 @@ void Temperature::isr() { #if HAS_FAN7 if (soft_pwm_count_fan[7] <= pwm_count_tmp) WRITE_FAN(7, LOW); #endif + #if ENABLED(USE_CONTROLLER_FAN) + if (soft_pwm_controller.count <= pwm_count_tmp) WRITE(CONTROLLER_FAN_PIN, LOW); + #endif #endif } diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index 0e66f23110..050b3379e9 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -387,6 +387,10 @@ class Temperature { soft_pwm_count_fan[FAN_COUNT]; #endif + #if BOTH(FAN_SOFT_PWM, USE_CONTROLLER_FAN) + static uint8_t soft_pwm_controller_speed; + #endif + #if ENABLED(PREVENT_COLD_EXTRUSION) static bool allow_cold_extrude; static celsius_t extrude_min_temp; From 8b952d9d11e3415d1aa42559c54c42c489860a5f Mon Sep 17 00:00:00 2001 From: EvilGremlin <22657714+EvilGremlin@users.noreply.github.com> Date: Mon, 15 Nov 2021 00:15:07 +0300 Subject: [PATCH 130/532] =?UTF-8?q?=F0=9F=9A=B8=20Simplify=20touchscreen?= =?UTF-8?q?=20calibration=20for=20SimUI=20(#23124)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/SanityCheck.h | 4 +- Marlin/src/pins/linux/pins_RAMPS_LINUX.h | 53 +++++++++++++++++++----- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index fbdda2c127..866b86ef6b 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -3652,8 +3652,8 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); /** * Touch Screen Calibration */ -#if ENABLED(TFT_TOUCH_DEVICE_XPT2046) && DISABLED(TOUCH_SCREEN_CALIBRATION) \ - && (!defined(TOUCH_CALIBRATION_X) || !defined(TOUCH_CALIBRATION_Y) || !defined(TOUCH_OFFSET_X) || !defined(TOUCH_OFFSET_Y)) +#if !MB(LINUX_RAMPS) && ENABLED(TFT_TOUCH_DEVICE_XPT2046) && DISABLED(TOUCH_SCREEN_CALIBRATION) \ + && !(defined(TOUCH_CALIBRATION_X) && defined(TOUCH_CALIBRATION_Y) && defined(TOUCH_OFFSET_X) && defined(TOUCH_OFFSET_Y)) #error "TOUCH_CALIBRATION_[XY] and TOUCH_OFFSET_[XY] are required for resistive touch screens with TOUCH_SCREEN_CALIBRATION disabled." #endif diff --git a/Marlin/src/pins/linux/pins_RAMPS_LINUX.h b/Marlin/src/pins/linux/pins_RAMPS_LINUX.h index 20bd5ef8cc..acf2d31cf6 100644 --- a/Marlin/src/pins/linux/pins_RAMPS_LINUX.h +++ b/Marlin/src/pins/linux/pins_RAMPS_LINUX.h @@ -391,6 +391,7 @@ #define BEEPER_PIN 42 #define TOUCH_CS_PIN 33 + #define SD_DETECT_PIN 41 #define HAS_SPI_FLASH 1 @@ -407,17 +408,47 @@ #ifndef TFT_DRIVER #define TFT_DRIVER ST7796 #endif - #ifndef XPT2046_X_CALIBRATION - #define XPT2046_X_CALIBRATION 63934 - #endif - #ifndef XPT2046_Y_CALIBRATION - #define XPT2046_Y_CALIBRATION 63598 - #endif - #ifndef XPT2046_X_OFFSET - #define XPT2046_X_OFFSET -1 - #endif - #ifndef XPT2046_Y_OFFSET - #define XPT2046_Y_OFFSET -20 + #ifndef TOUCH_SCREEN_CALIBRATION + #if ENABLED(TFT_RES_320x240) + #ifndef TOUCH_CALIBRATION_X + #define TOUCH_CALIBRATION_X 20525 + #endif + #ifndef TOUCH_CALIBRATION_Y + #define TOUCH_CALIBRATION_Y 15335 + #endif + #ifndef TOUCH_OFFSET_X + #define TOUCH_OFFSET_X -1 + #endif + #ifndef TOUCH_OFFSET_Y + #define TOUCH_OFFSET_Y 0 + #endif + #elif ENABLED(TFT_RES_480x272) + #ifndef TOUCH_CALIBRATION_X + #define TOUCH_CALIBRATION_X 30715 + #endif + #ifndef TOUCH_CALIBRATION_Y + #define TOUCH_CALIBRATION_Y 17415 + #endif + #ifndef TOUCH_OFFSET_X + #define TOUCH_OFFSET_X 0 + #endif + #ifndef TOUCH_OFFSET_Y + #define TOUCH_OFFSET_Y -1 + #endif + #elif ENABLED(TFT_RES_480x320) + #ifndef TOUCH_CALIBRATION_X + #define TOUCH_CALIBRATION_X 30595 + #endif + #ifndef TOUCH_CALIBRATION_Y + #define TOUCH_CALIBRATION_Y 20415 + #endif + #ifndef TOUCH_OFFSET_X + #define TOUCH_OFFSET_X 2 + #endif + #ifndef TOUCH_OFFSET_Y + #define TOUCH_OFFSET_Y 1 + #endif + #endif #endif #define BTN_BACK 70 From 33c89d1f3fa603e49f5a9b346d089331f0f0efbf Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 14 Nov 2021 17:19:57 -0600 Subject: [PATCH 131/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20SENSORLESS=5FHOMIN?= =?UTF-8?q?G=20for=206-axis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/calibrate/G28.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 95f2a9b176..28df536c51 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -83,9 +83,7 @@ #if ENABLED(SENSORLESS_HOMING) sensorless_t stealth_states { - tmc_enable_stallguard(stepperX) - , tmc_enable_stallguard(stepperY) - , false + LINEAR_AXIS_LIST(tmc_enable_stallguard(stepperX), tmc_enable_stallguard(stepperY), false, false, false, false) , false #if AXIS_HAS_STALLGUARD(X2) || tmc_enable_stallguard(stepperX2) From 125310dca00383d60632f13fcf185f59bc51bdf6 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 15 Nov 2021 01:01:02 +0000 Subject: [PATCH 132/532] [cron] Bump distribution date (2021-11-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 b2150960b9..d1e68f6ca6 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 "2021-11-14" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 ed67ecef84..9c201fd66d 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 "2021-11-14" + #define STRING_DISTRIBUTION_DATE "2021-11-15" #endif /** From 36b2650f65e036ce1b02da568364230201a22b80 Mon Sep 17 00:00:00 2001 From: Mikhail Basov Date: Mon, 15 Nov 2021 07:46:34 +0300 Subject: [PATCH 133/532] =?UTF-8?q?=F0=9F=9A=B8=20LCD=5FSHOW=5FE=5FTOTAL?= =?UTF-8?q?=20for=20TFT=5FCOLOR=5FUI=20(#23127)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lcd/dogm/status_screen_lite_ST7920.cpp | 16 ++++---- Marlin/src/lcd/tft/ui_1024x600.cpp | 38 +++++++++++------- Marlin/src/lcd/tft/ui_320x240.cpp | 39 ++++++++++++------- Marlin/src/lcd/tft/ui_480x320.cpp | 38 +++++++++++------- 4 files changed, 81 insertions(+), 50 deletions(-) diff --git a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp index 2e6d697488..492a79a311 100644 --- a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp +++ b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp @@ -672,14 +672,7 @@ void ST7920_Lite_Status_Screen::draw_position(const xyze_pos_t &pos, const bool // If position is unknown, flash the labels. const unsigned char alt_label = position_trusted ? 0 : (ui.get_blink() ? ' ' : 0); - if (TERN1(LCD_SHOW_E_TOTAL, !printingIsActive())) { - write_byte(alt_label ? alt_label : 'X'); - write_str(dtostrf(pos.x, -4, 0, str), 4); - - write_byte(alt_label ? alt_label : 'Y'); - write_str(dtostrf(pos.y, -4, 0, str), 4); - } - else { + if (TERN0(LCD_SHOW_E_TOTAL, printingIsActive())) { #if ENABLED(LCD_SHOW_E_TOTAL) char tmp[15]; const uint8_t escale = e_move_accumulator >= 100000.0f ? 10 : 1; // After 100m switch to cm @@ -687,6 +680,13 @@ void ST7920_Lite_Status_Screen::draw_position(const xyze_pos_t &pos, const bool write_str(tmp); #endif } + else { + write_byte(alt_label ? alt_label : 'X'); + write_str(dtostrf(pos.x, -4, 0, str), 4); + + write_byte(alt_label ? alt_label : 'Y'); + write_str(dtostrf(pos.y, -4, 0, str), 4); + } write_byte(alt_label ? alt_label : 'Z'); write_str(dtostrf(pos.z, -5, 1, str), 5); diff --git a/Marlin/src/lcd/tft/ui_1024x600.cpp b/Marlin/src/lcd/tft/ui_1024x600.cpp index 3f0c70ab4c..160f8c29f3 100644 --- a/Marlin/src/lcd/tft/ui_1024x600.cpp +++ b/Marlin/src/lcd/tft/ui_1024x600.cpp @@ -258,21 +258,31 @@ void MarlinUI::draw_status_screen() { tft.set_background(COLOR_BACKGROUND); tft.add_rectangle(0, 0, TFT_WIDTH - 8, FONT_LINE_HEIGHT, COLOR_AXIS_HOMED); - tft.add_text(200, 3, COLOR_AXIS_HOMED , "X"); - tft.add_text(500, 3, COLOR_AXIS_HOMED , "Y"); + if (TERN0(LCD_SHOW_E_TOTAL, printingIsActive())) { + #if ENABLED(LCD_SHOW_E_TOTAL) + tft.add_text(200, 3, COLOR_AXIS_HOMED , "E"); + const uint8_t escale = e_move_accumulator >= 100000.0f ? 10 : 1; // After 100m switch to cm + tft_string.set(ftostr4sign(e_move_accumulator / escale)); + tft_string.add(escale == 10 ? 'c' : 'm'); + tft_string.add('m'); + tft.add_text(500 - tft_string.width(), 3, COLOR_AXIS_HOMED, tft_string); + #endif + } + else { + tft.add_text(200, 3, COLOR_AXIS_HOMED , "X"); + const bool nhx = axis_should_home(X_AXIS); + tft_string.set(blink && nhx ? "?" : ftostr4sign(LOGICAL_X_POSITION(current_position.x))); + tft.add_text(300 - tft_string.width(), 3, nhx ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); + + tft.add_text(500, 3, COLOR_AXIS_HOMED , "Y"); + const bool nhy = axis_should_home(Y_AXIS); + tft_string.set(blink && nhy ? "?" : ftostr4sign(LOGICAL_Y_POSITION(current_position.y))); + tft.add_text(600 - tft_string.width(), 3, nhy ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); + } tft.add_text(800, 3, COLOR_AXIS_HOMED , "Z"); - - bool not_homed = axis_should_home(X_AXIS); - tft_string.set(blink && not_homed ? "?" : ftostr4sign(LOGICAL_X_POSITION(current_position.x))); - tft.add_text(300 - tft_string.width(), 3, not_homed ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); - - not_homed = axis_should_home(Y_AXIS); - tft_string.set(blink && not_homed ? "?" : ftostr4sign(LOGICAL_Y_POSITION(current_position.y))); - tft.add_text(600 - tft_string.width(), 3, not_homed ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); - uint16_t offset = 32; - not_homed = axis_should_home(Z_AXIS); - if (blink && not_homed) + const bool nhz = axis_should_home(Z_AXIS); + if (blink && nhz) tft_string.set("?"); else { const float z = LOGICAL_Z_POSITION(current_position.z); @@ -283,7 +293,7 @@ void MarlinUI::draw_status_screen() { tft_string.set(ftostr52sp(z)); offset -= tft_string.width(); } - tft.add_text(900 - tft_string.width() - offset, 3, not_homed ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); + tft.add_text(900 - tft_string.width() - offset, 3, nhz ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); TERN_(TOUCH_SCREEN, touch.add_control(MOVE_AXIS, 4, y, TFT_WIDTH - 8, FONT_LINE_HEIGHT)); y += 100; diff --git a/Marlin/src/lcd/tft/ui_320x240.cpp b/Marlin/src/lcd/tft/ui_320x240.cpp index 1ef4c5881c..d85a917983 100644 --- a/Marlin/src/lcd/tft/ui_320x240.cpp +++ b/Marlin/src/lcd/tft/ui_320x240.cpp @@ -256,21 +256,32 @@ void MarlinUI::draw_status_screen() { tft.set_background(COLOR_BACKGROUND); tft.add_rectangle(0, 0, 312, 24, COLOR_AXIS_HOMED); - tft.add_text( 10, 3, COLOR_AXIS_HOMED , "X"); - tft.add_text(127, 3, COLOR_AXIS_HOMED , "Y"); + if (TERN0(LCD_SHOW_E_TOTAL, printingIsActive())) { + #if ENABLED(LCD_SHOW_E_TOTAL) + tft.add_text( 10, 3, COLOR_AXIS_HOMED , "E"); + const uint8_t escale = e_move_accumulator >= 100000.0f ? 10 : 1; // After 100m switch to cm + tft_string.set(ftostr4sign(e_move_accumulator / escale)); + tft_string.add(escale == 10 ? 'c' : 'm'); + tft_string.add('m'); + tft.add_text(127 - tft_string.width(), 3, COLOR_AXIS_HOMED, tft_string); + #endif + } + else { + tft.add_text( 10, 3, COLOR_AXIS_HOMED , "X"); + const bool nhx = axis_should_home(X_AXIS); + tft_string.set(blink && nhx ? "?" : ftostr4sign(LOGICAL_X_POSITION(current_position.x))); + tft.add_text( 68 - tft_string.width(), 3, nhx ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); + + tft.add_text(127, 3, COLOR_AXIS_HOMED , "Y"); + const bool nhy = axis_should_home(Y_AXIS); + tft_string.set(blink && nhy ? "?" : ftostr4sign(LOGICAL_Y_POSITION(current_position.y))); + tft.add_text(185 - tft_string.width(), 3, nhy ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); + } + tft.add_text(219, 3, COLOR_AXIS_HOMED , "Z"); - - bool not_homed = axis_should_home(X_AXIS); - tft_string.set(blink && not_homed ? "?" : ftostr4sign(LOGICAL_X_POSITION(current_position.x))); - tft.add_text( 68 - tft_string.width(), 3, not_homed ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); - - not_homed = axis_should_home(Y_AXIS); - tft_string.set(blink && not_homed ? "?" : ftostr4sign(LOGICAL_Y_POSITION(current_position.y))); - tft.add_text(185 - tft_string.width(), 3, not_homed ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); - - not_homed = axis_should_home(Z_AXIS); + const bool nhz = axis_should_home(Z_AXIS); uint16_t offset = 25; - if (blink && not_homed) + if (blink && nhz) tft_string.set("?"); else { const float z = LOGICAL_Z_POSITION(current_position.z); @@ -281,7 +292,7 @@ void MarlinUI::draw_status_screen() { tft_string.set(ftostr52sp(z)); offset -= tft_string.width(); } - tft.add_text(301 - tft_string.width() - offset, 3, not_homed ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); + tft.add_text(301 - tft_string.width() - offset, 3, nhz ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); TERN_(TOUCH_SCREEN, touch.add_control(MOVE_AXIS, 0, 103, 312, 24)); // feed rate diff --git a/Marlin/src/lcd/tft/ui_480x320.cpp b/Marlin/src/lcd/tft/ui_480x320.cpp index f6591d682d..ff14a9d588 100644 --- a/Marlin/src/lcd/tft/ui_480x320.cpp +++ b/Marlin/src/lcd/tft/ui_480x320.cpp @@ -258,21 +258,31 @@ void MarlinUI::draw_status_screen() { tft.set_background(COLOR_BACKGROUND); tft.add_rectangle(0, 0, TFT_WIDTH - 8, FONT_LINE_HEIGHT, COLOR_AXIS_HOMED); - tft.add_text( 16, 3, COLOR_AXIS_HOMED , "X"); - tft.add_text(192, 3, COLOR_AXIS_HOMED , "Y"); + if (TERN0(LCD_SHOW_E_TOTAL, printingIsActive())) { + #if ENABLED(LCD_SHOW_E_TOTAL) + tft.add_text( 16, 3, COLOR_AXIS_HOMED , "E"); + const uint8_t escale = e_move_accumulator >= 100000.0f ? 10 : 1; // After 100m switch to cm + tft_string.set(ftostr4sign(e_move_accumulator / escale)); + tft_string.add(escale == 10 ? 'c' : 'm'); + tft_string.add('m'); + tft.add_text(192 - tft_string.width(), 3, COLOR_AXIS_HOMED, tft_string); + #endif + } + else { + tft.add_text( 16, 3, COLOR_AXIS_HOMED , "X"); + const bool nhx = axis_should_home(X_AXIS); + tft_string.set(blink && nhx ? "?" : ftostr4sign(LOGICAL_X_POSITION(current_position.x))); + tft.add_text(102 - tft_string.width(), 3, nhx ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); + + tft.add_text(192, 3, COLOR_AXIS_HOMED , "Y"); + const bool nhy = axis_should_home(Y_AXIS); + tft_string.set(blink && nhy ? "?" : ftostr4sign(LOGICAL_Y_POSITION(current_position.y))); + tft.add_text(280 - tft_string.width(), 3, nhy ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); + } tft.add_text(330, 3, COLOR_AXIS_HOMED , "Z"); - - bool not_homed = axis_should_home(X_AXIS); - tft_string.set(blink && not_homed ? "?" : ftostr4sign(LOGICAL_X_POSITION(current_position.x))); - tft.add_text(102 - tft_string.width(), 3, not_homed ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); - - not_homed = axis_should_home(Y_AXIS); - tft_string.set(blink && not_homed ? "?" : ftostr4sign(LOGICAL_Y_POSITION(current_position.y))); - tft.add_text(280 - tft_string.width(), 3, not_homed ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); - uint16_t offset = 32; - not_homed = axis_should_home(Z_AXIS); - if (blink && not_homed) + const bool nhz = axis_should_home(Z_AXIS); + if (blink && nhz) tft_string.set("?"); else { const float z = LOGICAL_Z_POSITION(current_position.z); @@ -283,7 +293,7 @@ void MarlinUI::draw_status_screen() { tft_string.set(ftostr52sp(z)); offset -= tft_string.width(); } - tft.add_text(455 - tft_string.width() - offset, 3, not_homed ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); + tft.add_text(455 - tft_string.width() - offset, 3, nhz ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); TERN_(TOUCH_SCREEN, touch.add_control(MOVE_AXIS, 4, y, TFT_WIDTH - 8, FONT_LINE_HEIGHT)); y += TERN(HAS_UI_480x272, 38, 48); From f0b1ce8749b5b988d6fc640be1c64652fff160d5 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 16 Nov 2021 01:01:41 +0000 Subject: [PATCH 134/532] [cron] Bump distribution date (2021-11-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 d1e68f6ca6..78a19bc06e 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 "2021-11-15" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 9c201fd66d..80420626f0 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 "2021-11-15" + #define STRING_DISTRIBUTION_DATE "2021-11-16" #endif /** From 2aa36af55739c3e2685cd3698186748835cd57da Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 16 Nov 2021 08:54:30 -0600 Subject: [PATCH 135/532] =?UTF-8?q?=F0=9F=94=A7=20SOUND=5FMENU=5FITEM=20fo?= =?UTF-8?q?r=20E3V2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index fc9688edb7..c4feba5692 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1246,9 +1246,6 @@ // BACK menu items keep the highlight at the top //#define TURBO_BACK_MENU_ITEM - // Add a mute option to the LCD menu - //#define SOUND_MENU_ITEM - /** * LED Control Menu * Add LED Control to the LCD menu @@ -1280,6 +1277,10 @@ #endif // HAS_LCD_MENU +#if ANY(HAS_DISPLAY, DWIN_CREALITY_LCD_ENHANCED, DWIN_CREALITY_LCD_JYERSUI) + //#define SOUND_MENU_ITEM // Add a mute option to the LCD menu +#endif + #if EITHER(HAS_DISPLAY, DWIN_CREALITY_LCD_ENHANCED) // The timeout (in ms) to return to the status screen from sub-menus //#define LCD_TIMEOUT_TO_STATUS 15000 From 629498f8d43be6675674671927456b8b6b4ac47b Mon Sep 17 00:00:00 2001 From: Luc Van Daele Date: Tue, 16 Nov 2021 16:24:53 +0100 Subject: [PATCH 136/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20G33,=20Delta=20rad?= =?UTF-8?q?ii,=20reachable=20(#22795)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/LPC1768/fast_pwm.cpp | 2 +- Marlin/src/gcode/calibrate/G33.cpp | 71 ++++++++++++----------------- Marlin/src/inc/SanityCheck.h | 2 +- Marlin/src/module/probe.cpp | 11 ++--- Marlin/src/module/probe.h | 46 ++++++++++++------- 5 files changed, 66 insertions(+), 66 deletions(-) diff --git a/Marlin/src/HAL/LPC1768/fast_pwm.cpp b/Marlin/src/HAL/LPC1768/fast_pwm.cpp index 197abb3310..eae0e36b0b 100644 --- a/Marlin/src/HAL/LPC1768/fast_pwm.cpp +++ b/Marlin/src/HAL/LPC1768/fast_pwm.cpp @@ -26,7 +26,7 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { if (!LPC176x::pin_is_valid(pin)) return; - if (LPC176x::pwm_attach_pin(pin)) + if (LPC176x::pwm_attach_pin(pin)) LPC176x::pwm_write_ratio(pin, invert ? 1.0f - (float)v / v_size : (float)v / v_size); // map 1-254 onto PWM range } diff --git a/Marlin/src/gcode/calibrate/G33.cpp b/Marlin/src/gcode/calibrate/G33.cpp index 779ae99d0a..a4b9aec01b 100644 --- a/Marlin/src/gcode/calibrate/G33.cpp +++ b/Marlin/src/gcode/calibrate/G33.cpp @@ -69,8 +69,6 @@ enum CalEnum : char { // the 7 main calibration points - float lcd_probe_pt(const xy_pos_t &xy); -float dcr; - void ac_home() { endstops.enable(true); TERN_(HAS_DELTA_SENSORLESS_PROBING, probe.set_homing_current(true)); @@ -177,7 +175,7 @@ static float std_dev_points(float z_pt[NPP + 1], const bool _0p_cal, const bool */ static float calibration_probe(const xy_pos_t &xy, const bool stow, const bool probe_at_offset) { #if HAS_BED_PROBE - return probe.probe_at_point(xy, stow ? PROBE_PT_STOW : PROBE_PT_RAISE, 0, true, probe_at_offset); + return probe.probe_at_point(xy, stow ? PROBE_PT_STOW : PROBE_PT_RAISE, 0, probe_at_offset, false); #else UNUSED(stow); return lcd_probe_pt(xy); @@ -187,7 +185,7 @@ static float calibration_probe(const xy_pos_t &xy, const bool stow, const bool p /** * - Probe a grid */ -static bool probe_calibration_points(float z_pt[NPP + 1], const int8_t probe_points, const bool towers_set, const bool stow_after_each, const bool probe_at_offset) { +static bool probe_calibration_points(float z_pt[NPP + 1], const int8_t probe_points, const float dcr, const bool towers_set, const bool stow_after_each, const bool probe_at_offset) { const bool _0p_calibration = probe_points == 0, _1p_calibration = probe_points == 1 || probe_points == -1, _4p_calibration = probe_points == 2, @@ -271,7 +269,7 @@ static bool probe_calibration_points(float z_pt[NPP + 1], const int8_t probe_poi * - formulae for approximative forward kinematics in the end-stop displacement matrix * - definition of the matrix scaling parameters */ -static void reverse_kinematics_probe_points(float z_pt[NPP + 1], abc_float_t mm_at_pt_axis[NPP + 1]) { +static void reverse_kinematics_probe_points(float z_pt[NPP + 1], abc_float_t mm_at_pt_axis[NPP + 1], const float dcr) { xyz_pos_t pos{0}; LOOP_CAL_ALL(rad) { @@ -283,7 +281,7 @@ static void reverse_kinematics_probe_points(float z_pt[NPP + 1], abc_float_t mm_ } } -static void forward_kinematics_probe_points(abc_float_t mm_at_pt_axis[NPP + 1], float z_pt[NPP + 1]) { +static void forward_kinematics_probe_points(abc_float_t mm_at_pt_axis[NPP + 1], float z_pt[NPP + 1], const float dcr) { const float r_quot = dcr / delta_radius; #define ZPP(N,I,A) (((1.0f + r_quot * (N)) / 3.0f) * mm_at_pt_axis[I].A) @@ -302,19 +300,19 @@ static void forward_kinematics_probe_points(abc_float_t mm_at_pt_axis[NPP + 1], z_pt[_AB] = Zp1(_AB, a) + Zp1(_AB, b) + Zm2(_AB, c); } -static void calc_kinematics_diff_probe_points(float z_pt[NPP + 1], abc_float_t delta_e, const float delta_r, abc_float_t delta_t) { +static void calc_kinematics_diff_probe_points(float z_pt[NPP + 1], const float dcr, abc_float_t delta_e, const float delta_r, abc_float_t delta_t) { const float z_center = z_pt[CEN]; abc_float_t diff_mm_at_pt_axis[NPP + 1], new_mm_at_pt_axis[NPP + 1]; - reverse_kinematics_probe_points(z_pt, diff_mm_at_pt_axis); + reverse_kinematics_probe_points(z_pt, diff_mm_at_pt_axis, dcr); delta_radius += delta_r; delta_tower_angle_trim += delta_t; recalc_delta_settings(); - reverse_kinematics_probe_points(z_pt, new_mm_at_pt_axis); + reverse_kinematics_probe_points(z_pt, new_mm_at_pt_axis, dcr); LOOP_CAL_ALL(rad) diff_mm_at_pt_axis[rad] -= new_mm_at_pt_axis[rad] + delta_e; - forward_kinematics_probe_points(diff_mm_at_pt_axis, z_pt); + forward_kinematics_probe_points(diff_mm_at_pt_axis, z_pt, dcr); LOOP_CAL_RAD(rad) z_pt[rad] -= z_pt[CEN] - z_center; z_pt[CEN] = z_center; @@ -324,23 +322,23 @@ static void calc_kinematics_diff_probe_points(float z_pt[NPP + 1], abc_float_t d recalc_delta_settings(); } -static float auto_tune_h() { +static float auto_tune_h(const float dcr) { const float r_quot = dcr / delta_radius; return RECIPROCAL(r_quot / (2.0f / 3.0f)); // (2/3)/CR } -static float auto_tune_r() { +static float auto_tune_r(const float dcr) { constexpr float diff = 0.01f, delta_r = diff; float r_fac = 0.0f, z_pt[NPP + 1] = { 0.0f }; abc_float_t delta_e = { 0.0f }, delta_t = { 0.0f }; - calc_kinematics_diff_probe_points(z_pt, delta_e, delta_r, delta_t); + calc_kinematics_diff_probe_points(z_pt, dcr, delta_e, delta_r, delta_t); r_fac = -(z_pt[__A] + z_pt[__B] + z_pt[__C] + z_pt[_BC] + z_pt[_CA] + z_pt[_AB]) / 6.0f; r_fac = diff / r_fac / 3.0f; // 1/(3*delta_Z) return r_fac; } -static float auto_tune_a() { +static float auto_tune_a(const float dcr) { constexpr float diff = 0.01f, delta_r = 0.0f; float a_fac = 0.0f, z_pt[NPP + 1] = { 0.0f }; abc_float_t delta_e = { 0.0f }, delta_t = { 0.0f }; @@ -348,7 +346,7 @@ static float auto_tune_a() { delta_t.reset(); LOOP_LINEAR_AXES(axis) { delta_t[axis] = diff; - calc_kinematics_diff_probe_points(z_pt, delta_e, delta_r, delta_t); + calc_kinematics_diff_probe_points(z_pt, dcr, delta_e, delta_r, delta_t); delta_t[axis] = 0; a_fac += z_pt[uint8_t((axis * _4P_STEP) - _7P_STEP + NPP) % NPP + 1] / 6.0f; a_fac -= z_pt[uint8_t((axis * _4P_STEP) + 1 + _7P_STEP)] / 6.0f; @@ -370,7 +368,7 @@ static float auto_tune_a() { * P3 Probe all positions: center, towers and opposite towers. Calibrate all. * P4-P10 Probe all positions at different intermediate locations and average them. * - * Rn.nn override default calibration Radius + * Rn.nn Temporary reduce the probe grid by the specified amount (mm) * * T Don't calibrate tower angle corrections * @@ -386,7 +384,7 @@ static float auto_tune_a() { * * E Engage the probe for each point * - * O Probe at offset points (this is wrong but it seems to work) + * O Probe at offsetted probe positions (this is wrong but it seems to work) * * With SENSORLESS_PROBING: * Use these flags to calibrate stall sensitivity: (e.g., `G33 P1 Y Z` to calibrate X only.) @@ -404,27 +402,17 @@ void GcodeSuite::G33() { return; } - const bool probe_at_offset = TERN0(HAS_PROBE_XY_OFFSET, parser.boolval('O')), + const bool probe_at_offset = TERN0(HAS_PROBE_XY_OFFSET, parser.seen_test('O')), towers_set = !parser.seen_test('T'); - float max_dcr = dcr = DELTA_PRINTABLE_RADIUS; + // The calibration radius is set to a calculated value + float dcr = probe_at_offset ? DELTA_PRINTABLE_RADIUS : DELTA_PRINTABLE_RADIUS - PROBING_MARGIN; #if HAS_PROBE_XY_OFFSET - // For offset probes the calibration radius is set to a safe but non-optimal value - dcr -= HYPOT(probe.offset_xy.x, probe.offset_xy.y); - if (probe_at_offset) { - // With probe positions both probe and nozzle need to be within the printable area - max_dcr = dcr; - } - // else with nozzle positions there is a risk of the probe being outside the bed - // but as long the nozzle stays within the printable area there is no risk of - // the effector crashing into the towers. + const float total_offset = HYPOT(probe.offset_xy.x, probe.offset_xy.y); + dcr -= probe_at_offset ? _MAX(total_offset, PROBING_MARGIN) : total_offset; #endif - - if (parser.seenval('R')) dcr = parser.value_float(); - if (!WITHIN(dcr, 0, max_dcr)) { - SERIAL_ECHOLNPGM("?calibration (R)adius implausible."); - return; - } + NOMORE(dcr, DELTA_PRINTABLE_RADIUS); + if (parser.seenval('R')) dcr -= _MAX(parser.value_float(),0); const float calibration_precision = parser.floatval('C', 0.0f); if (calibration_precision < 0) { @@ -475,8 +463,9 @@ void GcodeSuite::G33() { SERIAL_ECHOLNPGM("G33 Auto Calibrate"); // Report settings - FSTR_P const checkingac = F("Checking... AC"); - SERIAL_ECHOF(checkingac); + PGM_P const checkingac = PSTR("Checking... AC"); + SERIAL_ECHOPGM_P(checkingac); + SERIAL_ECHOPGM(" at radius:", dcr); if (verbose_level == 0) SERIAL_ECHOPGM(" (DRY-RUN)"); SERIAL_EOL(); ui.set_status(checkingac); @@ -496,7 +485,7 @@ void GcodeSuite::G33() { // Probe the points zero_std_dev_old = zero_std_dev; - if (!probe_calibration_points(z_at_pt, probe_points, towers_set, stow_after_each, probe_at_offset)) { + if (!probe_calibration_points(z_at_pt, probe_points, dcr, towers_set, stow_after_each, probe_at_offset)) { SERIAL_ECHOLNPGM("Correct delta settings with M665 and M666"); return ac_cleanup(TERN_(HAS_MULTI_HOTEND, old_tool_index)); } @@ -536,10 +525,10 @@ void GcodeSuite::G33() { // calculate factors if (_7p_9_center) dcr *= 0.9f; - h_factor = auto_tune_h(); - r_factor = auto_tune_r(); - a_factor = auto_tune_a(); - dcr /= 0.9f; + h_factor = auto_tune_h(dcr); + r_factor = auto_tune_r(dcr); + a_factor = auto_tune_a(dcr); + if (_7p_9_center) dcr /= 0.9f; switch (probe_points) { case 0: diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 866b86ef6b..4186e99467 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1635,7 +1635,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #if ENABLED(NOZZLE_AS_PROBE) static_assert(sanity_nozzle_to_probe_offset.x == 0 && sanity_nozzle_to_probe_offset.y == 0, "NOZZLE_AS_PROBE requires the XY offsets in NOZZLE_TO_PROBE_OFFSET to both be 0."); - #else + #elif !IS_KINEMATIC static_assert(PROBING_MARGIN >= 0, "PROBING_MARGIN must be >= 0."); static_assert(PROBING_MARGIN_BACK >= 0, "PROBING_MARGIN_BACK must be >= 0."); static_assert(PROBING_MARGIN_FRONT >= 0, "PROBING_MARGIN_FRONT must be >= 0."); diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 984a3aabb5..89a043d0f5 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -768,14 +768,11 @@ float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRai // On delta keep Z below clip height or do_blocking_move_to will abort xyz_pos_t npos = { rx, ry, TERN(DELTA, _MIN(delta_clip_start_height, current_position.z), current_position.z) }; - if (probe_relative) { // The given position is in terms of the probe - if (!can_reach(npos)) { - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Position Not Reachable"); - return NAN; - } - npos -= offset_xy; // Get the nozzle position + if (!can_reach(npos, probe_relative)) { + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Position Not Reachable"); + return NAN; } - else if (!position_is_reachable(npos)) return NAN; // The given position is in terms of the nozzle + if (probe_relative) npos -= offset_xy; // Get the nozzle position // Move the probe to the starting XYZ do_blocking_move_to(npos, feedRate_t(XY_PROBE_FEEDRATE_MM_S)); diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index f9275ba9fd..3c97afcb89 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -77,13 +77,20 @@ public: #if HAS_PROBE_XY_OFFSET // Return true if the both nozzle and the probe can reach the given point. // Note: This won't work on SCARA since the probe offset rotates with the arm. - static bool can_reach(const_float_t rx, const_float_t ry) { - return position_is_reachable(rx - offset_xy.x, ry - offset_xy.y) // The nozzle can go where it needs to go? - && position_is_reachable(rx, ry, ABS(PROBING_MARGIN)); // Can the nozzle also go near there? + static bool can_reach(const_float_t rx, const_float_t ry, const bool probe_relative=true) { + if (probe_relative) { + return position_is_reachable(rx - offset_xy.x, ry - offset_xy.y) // The nozzle can go where it needs to go? + && position_is_reachable(rx, ry, PROBING_MARGIN); // Can the probe also go near there? + } + else { + return position_is_reachable(rx, ry) + && position_is_reachable(rx + offset_xy.x, ry + offset_xy.y, PROBING_MARGIN); + } } #else - static bool can_reach(const_float_t rx, const_float_t ry) { - return position_is_reachable(rx, ry, PROBING_MARGIN); + static bool can_reach(const_float_t rx, const_float_t ry, const bool=true) { + return position_is_reachable(rx, ry) + && position_is_reachable(rx, ry, PROBING_MARGIN); } #endif @@ -96,10 +103,17 @@ public: * Example: For a probe offset of -10,+10, then for the probe to reach 0,0 the * nozzle must be be able to reach +10,-10. */ - static bool can_reach(const_float_t rx, const_float_t ry) { - 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); + static bool can_reach(const_float_t rx, const_float_t ry, const bool probe_relative=true) { + 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); + } + 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); + } } #endif @@ -120,7 +134,7 @@ public: static bool set_deployed(const bool) { return false; } - static bool can_reach(const_float_t rx, const_float_t ry) { return position_is_reachable(rx, ry); } + static bool can_reach(const_float_t rx, const_float_t ry, const bool=true) { return position_is_reachable(rx, ry); } #endif @@ -132,7 +146,7 @@ public: #endif } - static bool can_reach(const xy_pos_t &pos) { return can_reach(pos.x, pos.y); } + static bool can_reach(const xy_pos_t &pos, const bool probe_relative=true) { return can_reach(pos.x, pos.y, probe_relative); } static bool good_bounds(const xy_pos_t &lf, const xy_pos_t &rb) { return ( @@ -161,30 +175,30 @@ public: TERN_(DELTA, DELTA_PRINTABLE_RADIUS) TERN_(IS_SCARA, SCARA_PRINTABLE_RADIUS) ); - static constexpr float probe_radius(const xy_pos_t &probe_offset_xy = offset_xy) { + static constexpr float probe_radius(const xy_pos_t &probe_offset_xy=offset_xy) { return printable_radius - _MAX(PROBING_MARGIN, HYPOT(probe_offset_xy.x, probe_offset_xy.y)); } #endif - static constexpr float _min_x(const xy_pos_t &probe_offset_xy = offset_xy) { + static constexpr float _min_x(const xy_pos_t &probe_offset_xy=offset_xy) { return TERN(IS_KINEMATIC, (X_CENTER) - probe_radius(probe_offset_xy), _MAX((X_MIN_BED) + (PROBING_MARGIN_LEFT), (X_MIN_POS) + probe_offset_xy.x) ); } - static constexpr float _max_x(const xy_pos_t &probe_offset_xy = offset_xy) { + static constexpr float _max_x(const xy_pos_t &probe_offset_xy=offset_xy) { return TERN(IS_KINEMATIC, (X_CENTER) + probe_radius(probe_offset_xy), _MIN((X_MAX_BED) - (PROBING_MARGIN_RIGHT), (X_MAX_POS) + probe_offset_xy.x) ); } - static constexpr float _min_y(const xy_pos_t &probe_offset_xy = offset_xy) { + static constexpr float _min_y(const xy_pos_t &probe_offset_xy=offset_xy) { return TERN(IS_KINEMATIC, (Y_CENTER) - probe_radius(probe_offset_xy), _MAX((Y_MIN_BED) + (PROBING_MARGIN_FRONT), (Y_MIN_POS) + probe_offset_xy.y) ); } - static constexpr float _max_y(const xy_pos_t &probe_offset_xy = offset_xy) { + static constexpr float _max_y(const xy_pos_t &probe_offset_xy=offset_xy) { return TERN(IS_KINEMATIC, (Y_CENTER) + probe_radius(probe_offset_xy), _MIN((Y_MAX_BED) - (PROBING_MARGIN_BACK), (Y_MAX_POS) + probe_offset_xy.y) From eb8392edd4a1ccedd235c7463f15e583f47f233a Mon Sep 17 00:00:00 2001 From: EvilGremlin <22657714+EvilGremlin@users.noreply.github.com> Date: Tue, 16 Nov 2021 19:32:43 +0300 Subject: [PATCH 137/532] =?UTF-8?q?=F0=9F=94=A8=20Ignore=20sim=20flashdriv?= =?UTF-8?q?e=20file=20(#23129)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a83bfa4265..fabe544563 100755 --- a/.gitignore +++ b/.gitignore @@ -146,6 +146,7 @@ vc-fileutils.settings #Simulation imgui.ini eeprom.dat +spi_flash.bin #cmake CMakeLists.txt From 89fe5f6d74ba6d45290e3e268619c8f9b32ba8ba Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 16 Nov 2021 12:49:25 -0600 Subject: [PATCH 138/532] =?UTF-8?q?=F0=9F=94=A8=20Bring=20Makefile=20up=20?= =?UTF-8?q?to=20date?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Makefile | 165 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 158 insertions(+), 7 deletions(-) diff --git a/Marlin/Makefile b/Marlin/Makefile index d09e5828f5..eee1403b53 100644 --- a/Marlin/Makefile +++ b/Marlin/Makefile @@ -191,6 +191,134 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1034) # RAMPS Derivatives - ATmega1280, ATmega2560 # +# 3Drag Controller +else ifeq ($(HARDWARE_MOTHERBOARD),1100) +# Velleman K8200 Controller (derived from 3Drag Controller) +else ifeq ($(HARDWARE_MOTHERBOARD),1101) +# Velleman K8400 Controller (derived from 3Drag Controller) +else ifeq ($(HARDWARE_MOTHERBOARD),1102) +# Velleman K8600 Controller (Vertex Nano) +else ifeq ($(HARDWARE_MOTHERBOARD),1103) +# Velleman K8800 Controller (Vertex Delta) +else ifeq ($(HARDWARE_MOTHERBOARD),1104) +# 2PrintBeta BAM&DICE with STK drivers +else ifeq ($(HARDWARE_MOTHERBOARD),1105) +# 2PrintBeta BAM&DICE Due with STK drivers +else ifeq ($(HARDWARE_MOTHERBOARD),1106) +# MKS BASE v1.0 +else ifeq ($(HARDWARE_MOTHERBOARD),1107) +# MKS BASE v1.4 with Allegro A4982 stepper drivers +else ifeq ($(HARDWARE_MOTHERBOARD),1108) +# MKS BASE v1.5 with Allegro A4982 stepper drivers +else ifeq ($(HARDWARE_MOTHERBOARD),1109) +# MKS BASE v1.6 with Allegro A4982 stepper drivers +else ifeq ($(HARDWARE_MOTHERBOARD),1110) +# MKS BASE 1.0 with Heroic HR4982 stepper drivers +else ifeq ($(HARDWARE_MOTHERBOARD),1111) +# MKS GEN v1.3 or 1.4 +else ifeq ($(HARDWARE_MOTHERBOARD),1112) +# MKS GEN L +else ifeq ($(HARDWARE_MOTHERBOARD),1113) +# BigTreeTech or BIQU KFB2.0 +else ifeq ($(HARDWARE_MOTHERBOARD),1114) +# zrib V2.0 (Chinese RAMPS replica) +else ifeq ($(HARDWARE_MOTHERBOARD),1115) +# zrib V5.2 (Chinese RAMPS replica) +else ifeq ($(HARDWARE_MOTHERBOARD),1116) +# Felix 2.0+ Electronics Board (RAMPS like) +else ifeq ($(HARDWARE_MOTHERBOARD),1117) +# Invent-A-Part RigidBoard +else ifeq ($(HARDWARE_MOTHERBOARD),1118) +# Invent-A-Part RigidBoard V2 +else ifeq ($(HARDWARE_MOTHERBOARD),1119) +# Sainsmart 2-in-1 board +else ifeq ($(HARDWARE_MOTHERBOARD),1120) +# Ultimaker +else ifeq ($(HARDWARE_MOTHERBOARD),1121) +# Ultimaker (Older electronics. Pre 1.5.4. This is rare) +else ifeq ($(HARDWARE_MOTHERBOARD),1122) + MCU ?= atmega1280 + PROG_MCU ?= m1280 +# Azteeg X3 +else ifeq ($(HARDWARE_MOTHERBOARD),1123) +# Azteeg X3 Pro +else ifeq ($(HARDWARE_MOTHERBOARD),1124) +# Ultimainboard 2.x (Uses TEMP_SENSOR 20) +else ifeq ($(HARDWARE_MOTHERBOARD),1125) +# Rumba +else ifeq ($(HARDWARE_MOTHERBOARD),1126) +# Raise3D N series Rumba derivative +else ifeq ($(HARDWARE_MOTHERBOARD),1127) +# Rapide Lite 200 (v1, low-cost RUMBA clone with drv) +else ifeq ($(HARDWARE_MOTHERBOARD),1128) +# Formbot T-Rex 2 Plus +else ifeq ($(HARDWARE_MOTHERBOARD),1129) +# Formbot T-Rex 3 +else ifeq ($(HARDWARE_MOTHERBOARD),1130) +# Formbot Raptor +else ifeq ($(HARDWARE_MOTHERBOARD),1131) +# Formbot Raptor 2 +else ifeq ($(HARDWARE_MOTHERBOARD),1132) +# bq ZUM Mega 3D +else ifeq ($(HARDWARE_MOTHERBOARD),1133) +# MakeBoard Mini v2.1.2 by MicroMake +else ifeq ($(HARDWARE_MOTHERBOARD),1134) +# TriGorilla Anycubic version 1.3-based on RAMPS EFB +else ifeq ($(HARDWARE_MOTHERBOARD),1135) +# ... Ver 1.4 +else ifeq ($(HARDWARE_MOTHERBOARD),1136) +# ... Rev 1.1 (new servo pin order) +else ifeq ($(HARDWARE_MOTHERBOARD),1137) +# Creality: Ender-4, CR-8 +else ifeq ($(HARDWARE_MOTHERBOARD),1138) +# Creality: CR10S, CR20, CR-X +else ifeq ($(HARDWARE_MOTHERBOARD),1139) +# Dagoma F5 +else ifeq ($(HARDWARE_MOTHERBOARD),1140) +# FYSETC F6 1.3 +else ifeq ($(HARDWARE_MOTHERBOARD),1141) +# FYSETC F6 1.4 +else ifeq ($(HARDWARE_MOTHERBOARD),1142) +# Wanhao Duplicator i3 Plus +else ifeq ($(HARDWARE_MOTHERBOARD),1143) +# VORON Design +else ifeq ($(HARDWARE_MOTHERBOARD),1144) +# Tronxy TRONXY-V3-1.0 +else ifeq ($(HARDWARE_MOTHERBOARD),1145) +# Z-Bolt X Series +else ifeq ($(HARDWARE_MOTHERBOARD),1146) +# TT OSCAR +else ifeq ($(HARDWARE_MOTHERBOARD),1147) +# Overlord/Overlord Pro +else ifeq ($(HARDWARE_MOTHERBOARD),1148) +# ADIMLab Gantry v1 +else ifeq ($(HARDWARE_MOTHERBOARD),1149) +# ADIMLab Gantry v2 +else ifeq ($(HARDWARE_MOTHERBOARD),1150) +# BIQU Tango V1 +else ifeq ($(HARDWARE_MOTHERBOARD),1151) +# MKS GEN L V2 +else ifeq ($(HARDWARE_MOTHERBOARD),1152) +# MKS GEN L V2.1 +else ifeq ($(HARDWARE_MOTHERBOARD),1153) +# Copymaster 3D +else ifeq ($(HARDWARE_MOTHERBOARD),1154) +# Ortur 4 +else ifeq ($(HARDWARE_MOTHERBOARD),1155) +# Tenlog D3 Hero IDEX printer +else ifeq ($(HARDWARE_MOTHERBOARD),1156) +# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Fan, Bed) +else ifeq ($(HARDWARE_MOTHERBOARD),1157) +# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Hotend2, Bed) +else ifeq ($(HARDWARE_MOTHERBOARD),1158) +# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend, Fan0, Fan1, Bed) +else ifeq ($(HARDWARE_MOTHERBOARD),1159) +# Longer LK1 PRO / Alfawise U20 Pro (PRO version) +else ifeq ($(HARDWARE_MOTHERBOARD),1160) +# Longer LKx PRO / Alfawise Uxx Pro (PRO version) +else ifeq ($(HARDWARE_MOTHERBOARD),1161) + + # 3Drag Controller else ifeq ($(HARDWARE_MOTHERBOARD),1100) # Velleman K8200 Controller (derived from 3Drag Controller) @@ -358,20 +486,38 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1311) else ifeq ($(HARDWARE_MOTHERBOARD),1312) # Mega controller else ifeq ($(HARDWARE_MOTHERBOARD),1313) -# Geeetech GT2560 Rev B for Mecreator2 +# Geeetech GT2560 Rev A else ifeq ($(HARDWARE_MOTHERBOARD),1314) -# Geeetech GT2560 Rev. A +# Geeetech GT2560 Rev A+ (with auto level probe) else ifeq ($(HARDWARE_MOTHERBOARD),1315) -# Geeetech GT2560 Rev. A+ (with auto level probe) +# Geeetech GT2560 Rev B else ifeq ($(HARDWARE_MOTHERBOARD),1316) -# Geeetech GT2560 Rev B for A10(M/D) +# Geeetech GT2560 Rev B for A10(M/T/D) else ifeq ($(HARDWARE_MOTHERBOARD),1317) -# Geeetech GT2560 Rev B for A20(M/D) +# Geeetech GT2560 Rev B for A10(M/T/D) else ifeq ($(HARDWARE_MOTHERBOARD),1318) -# Einstart retrofit +# Geeetech GT2560 Rev B for Mecreator2 else ifeq ($(HARDWARE_MOTHERBOARD),1319) -# Wanhao 0ne+ i3 Mini +# Geeetech GT2560 Rev B for A20(M/T/D) else ifeq ($(HARDWARE_MOTHERBOARD),1320) +# Einstart retrofit +else ifeq ($(HARDWARE_MOTHERBOARD),1321) +# Wanhao 0ne+ i3 Mini +else ifeq ($(HARDWARE_MOTHERBOARD),1322) +# Leapfrog Xeed 2015 +else ifeq ($(HARDWARE_MOTHERBOARD),1323) +# PICA Shield (original version) +else ifeq ($(HARDWARE_MOTHERBOARD),1324) +# PICA Shield (rev C or later) +else ifeq ($(HARDWARE_MOTHERBOARD),1325) +# Intamsys 4.0 (Funmat HT) +else ifeq ($(HARDWARE_MOTHERBOARD),1326) +# Malyan M180 Mainboard Version 2 (no display function, direct gcode only) +else ifeq ($(HARDWARE_MOTHERBOARD),1327) +# Geeetech GT2560 Rev B for A20(M/T/D) +else ifeq ($(HARDWARE_MOTHERBOARD),1328) +# Mega controller & Protoneer CNC Shield V3.00 +else ifeq ($(HARDWARE_MOTHERBOARD),1329) # # ATmega1281, ATmega2561 @@ -445,6 +591,11 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1510) HARDWARE_VARIANT ?= Sanguino MCU ?= atmega1284p PROG_MCU ?= m1284p +# ZoneStar ZMIB V2 +else ifeq ($(HARDWARE_MOTHERBOARD),1511) + HARDWARE_VARIANT ?= Sanguino + MCU ?= atmega1284p + PROG_MCU ?= m1284p # # Other ATmega644P, ATmega644, ATmega1284P From 36173fb2593489a0be1ad1f2a90553de3a452700 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 16 Nov 2021 14:06:36 -0600 Subject: [PATCH 139/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20fast=20PWM=20WGM?= =?UTF-8?q?=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Followup to #23102 --- Marlin/src/HAL/AVR/fast_pwm.cpp | 10 ++++++++-- Marlin/src/feature/spindle_laser.cpp | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Marlin/src/HAL/AVR/fast_pwm.cpp b/Marlin/src/HAL/AVR/fast_pwm.cpp index cbe4fed94a..804e5fad30 100644 --- a/Marlin/src/HAL/AVR/fast_pwm.cpp +++ b/Marlin/src/HAL/AVR/fast_pwm.cpp @@ -200,7 +200,10 @@ void set_pwm_frequency(const pin_t pin, int f_desired) { res = res_temp_fast; j = i; // Set the Wave Generation Mode to FAST PWM - wgm = timer.n == 2 ? TERN(USE_OCR2A_AS_TOP, WGM2_FAST_PWM_OCR2A, WGM2_FAST_PWM) : WGM_FAST_PWM_ICRn; + if (timer.n == 2) + wgm = TERN(USE_OCR2A_AS_TOP, WGM2_FAST_PWM_OCR2A, WGM2_FAST_PWM); + else + wgm = WGM_FAST_PWM_ICRn; } // If PHASE CORRECT values are closes to desired f else if (f_phase_diff < f_diff) { @@ -208,7 +211,10 @@ void set_pwm_frequency(const pin_t pin, int f_desired) { res = res_temp_phase_correct; j = i; // Set the Wave Generation Mode to PWM PHASE CORRECT - wgm = timer.n == 2 ? TERN(USE_OCR2A_AS_TOP, WGM2_PWM_PC_OCR2A, WGM2_PWM_PC) : WGM_PWM_PC_ICRn; + if (timer.n == 2) + wgm = TERN(USE_OCR2A_AS_TOP, WGM2_PWM_PC_OCR2A, WGM2_FAST_PWM); + else + wgm = WGM_PWM_PC_ICRn; } } } diff --git a/Marlin/src/feature/spindle_laser.cpp b/Marlin/src/feature/spindle_laser.cpp index 9297e9b95c..cde2b47d90 100644 --- a/Marlin/src/feature/spindle_laser.cpp +++ b/Marlin/src/feature/spindle_laser.cpp @@ -62,7 +62,7 @@ void SpindleLaser::init() { OUT_WRITE(SPINDLE_LASER_ENA_PIN, !SPINDLE_LASER_ACTIVE_STATE); // Init spindle to off #endif #if ENABLED(SPINDLE_CHANGE_DIR) - OUT_WRITE(SPINDLE_DIR_PIN, SPINDLE_INVERT_DIR ? 255 : 0); // Init rotation to clockwise (M3) + OUT_WRITE(SPINDLE_DIR_PIN, SPINDLE_INVERT_DIR); // Init rotation to clockwise (M3) #endif #if ENABLED(SPINDLE_LASER_USE_PWM) SET_PWM(SPINDLE_LASER_PWM_PIN); From 3e14f06f8009e1d02a6b92f2caa6ed027ed078b0 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 17 Nov 2021 01:01:01 +0000 Subject: [PATCH 140/532] [cron] Bump distribution date (2021-11-17) --- 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 78a19bc06e..eb5d6934bb 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 "2021-11-16" +//#define STRING_DISTRIBUTION_DATE "2021-11-17" /** * 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 80420626f0..b2fa8bac0c 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 "2021-11-16" + #define STRING_DISTRIBUTION_DATE "2021-11-17" #endif /** From 44d8c2f5bf970e5f701e8bf8e2eff4e17b9266bc Mon Sep 17 00:00:00 2001 From: espr14 Date: Wed, 17 Nov 2021 18:07:11 +0100 Subject: [PATCH 141/532] =?UTF-8?q?=F0=9F=8F=97=EF=B8=8F=20Planner::busy()?= =?UTF-8?q?=20(#23145)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/planner.cpp | 12 ++---------- Marlin/src/module/planner.h | 11 +++++++++++ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 11460fa67a..e19684a7b5 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -91,10 +91,6 @@ #include "../feature/power.h" #endif -#if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER) - #include "../feature/closedloop.h" -#endif - #if ENABLED(BACKLASH_COMPENSATION) #include "../feature/backlash.h" #endif @@ -1763,13 +1759,9 @@ float Planner::get_axis_position_mm(const AxisEnum axis) { } /** - * Block until all buffered steps are executed / cleaned + * Block until the planner is finished processing */ -void Planner::synchronize() { - while (has_blocks_queued() || cleaning_buffer_counter - || TERN0(EXTERNAL_CLOSED_LOOP_CONTROLLER, CLOSED_LOOP_WAITING()) - ) idle(); -} +void Planner::synchronize() { while (busy()) idle(); } /** * Planner::_buffer_steps diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index 16d136be45..60574b65f0 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -75,6 +75,10 @@ #define IS_PAGE(B) false #endif +#if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER) + #include "../feature/closedloop.h" +#endif + // Feedrate for manual moves #ifdef MANUAL_FEEDRATE constexpr xyze_feedrate_t _mf = MANUAL_FEEDRATE, @@ -865,6 +869,13 @@ class Planner { // Triggered position of an axis in mm (not core-savvy) static float triggered_position_mm(const AxisEnum axis); + // Blocks are queued, or we're running out moves, or the closed loop controller is waiting + static inline bool busy() { + return (has_blocks_queued() || cleaning_buffer_counter + || TERN0(EXTERNAL_CLOSED_LOOP_CONTROLLER, CLOSED_LOOP_WAITING()) + ); + } + // Block until all buffered steps are executed / cleaned static void synchronize(); From b7be62ad36d9d2e8bc4d0718b8cba94321267077 Mon Sep 17 00:00:00 2001 From: luzpaz Date: Wed, 17 Nov 2021 12:09:01 -0500 Subject: [PATCH 142/532] =?UTF-8?q?=F0=9F=8E=A8=20Fix=20misspelling=20(#23?= =?UTF-8?q?137)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/STM32F1/onboard_sd.cpp | 2 +- Marlin/src/lcd/e3v2/enhanced/dwinui.cpp | 6 +++--- Marlin/src/lcd/e3v2/enhanced/dwinui.h | 6 +++--- Marlin/src/lcd/e3v2/jyersui/dwin.cpp | 2 +- Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h | 2 +- Marlin/src/pins/stm32f4/pins_RUMBA32_BTT.h | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Marlin/src/HAL/STM32F1/onboard_sd.cpp b/Marlin/src/HAL/STM32F1/onboard_sd.cpp index df98c2c057..582ee3853d 100644 --- a/Marlin/src/HAL/STM32F1/onboard_sd.cpp +++ b/Marlin/src/HAL/STM32F1/onboard_sd.cpp @@ -278,7 +278,7 @@ DSTATUS disk_initialize ( if (drv) return STA_NOINIT; // Supports only drive 0 sd_power_on(); // Initialize SPI - if (Stat & STA_NODISK) return Stat; // Is a card existing in the soket? + if (Stat & STA_NODISK) return Stat; // Is a card existing in the socket? FCLK_SLOW(); for (n = 10; n; n--) xchg_spi(0xFF); // Send 80 dummy clocks diff --git a/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp b/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp index 824aca07f8..52b7c3b521 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp @@ -93,7 +93,7 @@ uint8_t DWINUI::fontWidth(uint8_t cfont) { } } -// Get font character heigh +// Get font character height uint8_t DWINUI::fontHeight(uint8_t cfont) { switch (cfont) { case font6x12 : return 12; @@ -110,12 +110,12 @@ uint8_t DWINUI::fontHeight(uint8_t cfont) { } } -// Get screen x coodinates from text column +// Get screen x coordinates from text column uint16_t DWINUI::ColToX(uint8_t col) { return col * fontWidth(font); } -// Get screen y coodinates from text row +// Get screen y coordinates from text row uint16_t DWINUI::RowToY(uint8_t row) { return row * fontHeight(font); } diff --git a/Marlin/src/lcd/e3v2/enhanced/dwinui.h b/Marlin/src/lcd/e3v2/enhanced/dwinui.h index 078b3cc58b..9a717da80d 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwinui.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwinui.h @@ -198,13 +198,13 @@ namespace DWINUI { // Get font character width uint8_t fontWidth(uint8_t cfont); - // Get font character heigh + // Get font character height uint8_t fontHeight(uint8_t cfont); - // Get screen x coodinates from text column + // Get screen x coordinates from text column uint16_t ColToX(uint8_t col); - // Get screen y coodinates from text row + // Get screen y coordinates from text row uint16_t RowToY(uint8_t row); // Set text/number color diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp index 4c838a2e21..eea464dcfd 100644 --- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp @@ -4135,7 +4135,7 @@ void CrealityDWINClass::Popup_Handler(PopupID popupid, bool option/*=false*/) { switch (popupid) { case Pause: Draw_Popup(F("Pause Print"), F(""), F(""), Popup); break; case Stop: Draw_Popup(F("Stop Print"), F(""), F(""), Popup); break; - case Resume: Draw_Popup(F("Resume Print?"), F("Looks Like the last"), F("print was interupted."), Popup); break; + case Resume: Draw_Popup(F("Resume Print?"), F("Looks Like the last"), F("print was interrupted."), Popup); break; case ConfFilChange: Draw_Popup(F("Confirm Filament Change"), F(""), F(""), Popup); break; case PurgeMore: Draw_Popup(F("Purge more filament?"), F("(Cancel to finish process)"), F(""), Popup); break; case SaveLevel: Draw_Popup(F("Leveling Complete"), F("Save to EEPROM?"), F(""), Popup); break; diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h index 1869f79404..265e2fe584 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h @@ -96,7 +96,7 @@ public: static size_t GetFreeTxBuffer(); static void FlushTx(); - // Checks two things: Can we confirm the presence of the display and has we initiliazed it. + // Checks two things: Can we confirm the presence of the display and has we initialized it. // (both boils down that the display answered to our chatting) static inline bool IsInitialized() { return initialized; diff --git a/Marlin/src/pins/stm32f4/pins_RUMBA32_BTT.h b/Marlin/src/pins/stm32f4/pins_RUMBA32_BTT.h index 04dcc432ca..f2fc53379b 100644 --- a/Marlin/src/pins/stm32f4/pins_RUMBA32_BTT.h +++ b/Marlin/src/pins/stm32f4/pins_RUMBA32_BTT.h @@ -22,7 +22,7 @@ #pragma once /** - * No offical schematics have been found. + * No official schematics have been found. * But these differences where noted in https://github.com/bigtreetech/Rumba32/issues/1 */ From e3d777cf8fcdeafe11df73d88fd6c374148b6f47 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Wed, 17 Nov 2021 09:33:42 -0800 Subject: [PATCH 143/532] =?UTF-8?q?=F0=9F=93=8C=20Overridable=20probe-rela?= =?UTF-8?q?ted=20pins=20(#23107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h | 9 +++++++-- Marlin/src/pins/stm32f1/pins_CREALITY_V452.h | 4 +++- Marlin/src/pins/stm32f1/pins_CREALITY_V453.h | 4 +++- Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h | 4 +++- Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h | 4 +++- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h b/Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h index 8368fd03cd..570d102c47 100644 --- a/Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h +++ b/Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h @@ -70,9 +70,14 @@ // // Probe // -#define PROBE_TARE_PIN PA1 +#ifndef PROBE_TARE_PIN + #define PROBE_TARE_PIN PA1 +#endif + #if ENABLED(PROBE_ACTIVATION_SWITCH) - #define PROBE_ACTIVATION_SWITCH_PIN PC2 // Optoswitch to Enable Z Probe + #ifndef PROBE_ACTIVATION_SWITCH_PIN + #define PROBE_ACTIVATION_SWITCH_PIN PC2 // Optoswitch to Enable Z Probe + #endif #endif // diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h index 7d3140056a..9b6862d99b 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h @@ -36,7 +36,9 @@ #define FAN_PIN PA0 // FAN #if ENABLED(PROBE_ACTIVATION_SWITCH) - #define PROBE_ACTIVATION_SWITCH_PIN PC6 // Optoswitch to Enable Z Probe + #ifndef PROBE_ACTIVATION_SWITCH_PIN + #define PROBE_ACTIVATION_SWITCH_PIN PC6 // Optoswitch to Enable Z Probe + #endif #endif #include "pins_CREALITY_V45x.h" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h index b669887d1e..fd3ea93c32 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h @@ -36,7 +36,9 @@ #define FAN_PIN PB15 // FAN #if ENABLED(PROBE_ACTIVATION_SWITCH) - #define PROBE_ACTIVATION_SWITCH_PIN PB2 // Optoswitch to Enable Z Probe + #ifndef PROBE_ACTIVATION_SWITCH_PIN + #define PROBE_ACTIVATION_SWITCH_PIN PB2 // Optoswitch to Enable Z Probe + #endif #endif #include "pins_CREALITY_V45x.h" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h index 39dccf1271..023fca21ce 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h @@ -64,7 +64,9 @@ // // Probe // -#define PROBE_TARE_PIN PA5 +#ifndef PROBE_TARE_PIN + #define PROBE_TARE_PIN PA5 +#endif // // Steppers diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h index 762e355626..0a80c99878 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h @@ -136,7 +136,9 @@ // Probe enable // #if ENABLED(PROBE_ENABLE_DISABLE) - #define PROBE_ENABLE_PIN SERVO0_PIN + #ifndef PROBE_ENABLE_PIN + #define PROBE_ENABLE_PIN SERVO0_PIN + #endif #endif // From 2edda4c58200db4a20af852c30e0ae4accfb5640 Mon Sep 17 00:00:00 2001 From: BigTreeTech <38851044+bigtreetech@users.noreply.github.com> Date: Thu, 18 Nov 2021 01:35:28 +0800 Subject: [PATCH 144/532] =?UTF-8?q?=F0=9F=90=9B=20Init=20PROBE=5FENABLE=5F?= =?UTF-8?q?PIN=20(#23133)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/MarlinCore.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index f2031cdfb9..04ee8eb520 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -1353,6 +1353,9 @@ void setup() { #endif #if HAS_BED_PROBE + #if PIN_EXISTS(PROBE_ENABLE) + OUT_WRITE(PROBE_ENABLE_PIN, LOW); // Disable + #endif SETUP_RUN(endstops.enable_z_probe(false)); #endif From f1af475253941e4ee4cc2bdf05989c623c27a663 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 17 Nov 2021 13:01:44 -0600 Subject: [PATCH 145/532] =?UTF-8?q?=F0=9F=8E=A8=20Misc=20formatting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/NATIVE_SIM/u8g/u8g_com_sw_spi.cpp | 5 ++++- Marlin/src/lcd/extui/mks_ui/draw_about.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_acceleration_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_advance_settings.h | 2 +- .../src/lcd/extui/mks_ui/draw_auto_level_offset_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_change_speed.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.h | 4 ++-- Marlin/src/lcd/extui/mks_ui/draw_dialog.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_eeprom_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_encoder_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_error_message.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_extrusion.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_fan.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_filament_change.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_filament_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_gcode.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_home.h | 2 +- .../src/lcd/extui/mks_ui/draw_homing_sensitivity_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_jerk_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_keyboard.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_language.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_level_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_machine_para.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_machine_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_manuaLevel.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_max_feedrate_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_media_select.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_more.h | 4 ++-- Marlin/src/lcd/extui/mks_ui/draw_motor_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_move_motor.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_number_key.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_operation.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_pause_message.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_pause_position.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_preHeat.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_print_file.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_printing.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_ready_print.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_set.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_step_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_tmc_current_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_tmc_step_mode_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_tool.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_touch_calibration.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_ui.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_wifi.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_wifi_list.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.h | 2 +- Marlin/src/lcd/extui/mks_ui/draw_wifi_tips.h | 2 +- Marlin/src/lcd/extui/mks_ui/irq_overrid.cpp | 2 +- Marlin/src/lcd/extui/mks_ui/pic_manager.h | 2 +- Marlin/src/lcd/extui/mks_ui/printer_operation.h | 2 +- Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.h | 2 +- Marlin/src/lcd/extui/mks_ui/wifi_module.h | 2 +- Marlin/src/lcd/extui/mks_ui/wifi_upload.h | 2 +- 57 files changed, 62 insertions(+), 59 deletions(-) diff --git a/Marlin/src/HAL/NATIVE_SIM/u8g/u8g_com_sw_spi.cpp b/Marlin/src/HAL/NATIVE_SIM/u8g/u8g_com_sw_spi.cpp index 7fd335d62e..7be84580b1 100644 --- a/Marlin/src/HAL/NATIVE_SIM/u8g/u8g_com_sw_spi.cpp +++ b/Marlin/src/HAL/NATIVE_SIM/u8g/u8g_com_sw_spi.cpp @@ -208,8 +208,11 @@ uint8_t u8g_com_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_pt } #endif -#elif !ANY(TFT_COLOR_UI, TFT_CLASSIC_UI, TFT_LVGL_UI, HAS_MARLINUI_HD44780) && HAS_MARLINUI_U8GLIB +#elif NONE(TFT_COLOR_UI, TFT_CLASSIC_UI, TFT_LVGL_UI, HAS_MARLINUI_HD44780) && HAS_MARLINUI_U8GLIB + #include uint8_t u8g_com_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) {return 0;} + #endif // HAS_MARLINUI_U8GLIB && !IS_U8GLIB_ST7920 + #endif // __PLAT_NATIVE_SIM__ diff --git a/Marlin/src/lcd/extui/mks_ui/draw_about.h b/Marlin/src/lcd/extui/mks_ui/draw_about.h index 4e7b318eda..fdb76c5c41 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_about.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_about.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_about(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_acceleration_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_acceleration_settings.h index e333e0ae51..0147945edb 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_acceleration_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_acceleration_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_acceleration_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_advance_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_advance_settings.h index 8848c34451..39c9764136 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_advance_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_advance_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_advance_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_auto_level_offset_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_auto_level_offset_settings.h index 38314f6bc2..11c4f0502b 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_auto_level_offset_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_auto_level_offset_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_auto_level_offset_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.h b/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.h index f8efeabc40..f525273887 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_baby_stepping(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_change_speed.h b/Marlin/src/lcd/extui/mks_ui/draw_change_speed.h index 66662d8811..326e5d33a1 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_change_speed.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_change_speed.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif #define MIN_EXT_SPEED_PERCENT 10 diff --git a/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.h b/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.h index ff60f121a1..1414637ab7 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_cloud_bind(); @@ -33,5 +33,5 @@ void display_qrcode(uint8_t *qrcode_data); void cloud_unbind(); #ifdef __cplusplus -} /* C-declarations for C++ */ + } #endif diff --git a/Marlin/src/lcd/extui/mks_ui/draw_dialog.h b/Marlin/src/lcd/extui/mks_ui/draw_dialog.h index 7e98a80c0a..ad26ec639f 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_dialog.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_dialog.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif enum { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_eeprom_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_eeprom_settings.h index 575ebbc6a2..f71886c855 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_eeprom_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_eeprom_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_eeprom_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_encoder_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_encoder_settings.h index bbf0c34858..0f57e44436 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_encoder_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_encoder_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_encoder_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_error_message.h b/Marlin/src/lcd/extui/mks_ui/draw_error_message.h index 8963e7f477..5a4d75575f 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_error_message.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_error_message.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif #ifndef PGM_P diff --git a/Marlin/src/lcd/extui/mks_ui/draw_extrusion.h b/Marlin/src/lcd/extui/mks_ui/draw_extrusion.h index 0252767767..27961bd6a9 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_extrusion.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_extrusion.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_extrusion(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_fan.h b/Marlin/src/lcd/extui/mks_ui/draw_fan.h index 0db87eb4f6..739d628446 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_fan.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_fan.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_fan(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_filament_change.h b/Marlin/src/lcd/extui/mks_ui/draw_filament_change.h index d3536a380a..8b09708445 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_filament_change.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_filament_change.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_filament_change(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_filament_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_filament_settings.h index 3d190e99c7..92b4091b6b 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_filament_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_filament_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_filament_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_gcode.h b/Marlin/src/lcd/extui/mks_ui/draw_gcode.h index 4e1610431e..df752e7cc9 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_gcode.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_gcode.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_gcode(bool clear = false); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_home.h b/Marlin/src/lcd/extui/mks_ui/draw_home.h index 7375dc7aa8..ae7ce5f6c2 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_home.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_home.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_home(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_homing_sensitivity_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_homing_sensitivity_settings.h index e086391373..11f0b2f403 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_homing_sensitivity_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_homing_sensitivity_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_homing_sensitivity_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_jerk_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_jerk_settings.h index 7f5ffc3ac5..5b990e1344 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_jerk_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_jerk_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_jerk_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_keyboard.h b/Marlin/src/lcd/extui/mks_ui/draw_keyboard.h index d89806c272..0db13cf88e 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_keyboard.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_keyboard.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_keyboard(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_language.h b/Marlin/src/lcd/extui/mks_ui/draw_language.h index 4f51856f4f..4f0ceefff2 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_language.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_language.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_language(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_level_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_level_settings.h index 06283d2095..9b5056753e 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_level_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_level_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_level_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_machine_para.h b/Marlin/src/lcd/extui/mks_ui/draw_machine_para.h index f495e8b35e..3853e7d9d8 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_machine_para.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_machine_para.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_machine_para(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_machine_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_machine_settings.h index f113f65fc1..ce12415a52 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_machine_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_machine_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_machine_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_manuaLevel.h b/Marlin/src/lcd/extui/mks_ui/draw_manuaLevel.h index 29c8fa144e..4a234a85e7 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_manuaLevel.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_manuaLevel.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_manualLevel(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_max_feedrate_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_max_feedrate_settings.h index 45c3fd29db..802693356f 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_max_feedrate_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_max_feedrate_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_max_feedrate_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_media_select.h b/Marlin/src/lcd/extui/mks_ui/draw_media_select.h index a698714a9d..2274539277 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_media_select.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_media_select.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif extern void lv_draw_media_select(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_more.h b/Marlin/src/lcd/extui/mks_ui/draw_more.h index 86ee6f895f..8e36e9d16a 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_more.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_more.h @@ -22,12 +22,12 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_more(); void lv_clear_more(); #ifdef __cplusplus -} /* C-declarations for C++ */ + } #endif diff --git a/Marlin/src/lcd/extui/mks_ui/draw_motor_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_motor_settings.h index 5d26a402d0..309829aeda 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_motor_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_motor_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_motor_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_move_motor.h b/Marlin/src/lcd/extui/mks_ui/draw_move_motor.h index 133a0444c1..60f55dc1d9 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_move_motor.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_move_motor.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_move_motor(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_number_key.h b/Marlin/src/lcd/extui/mks_ui/draw_number_key.h index fcff280d3b..62f4e501b3 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_number_key.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_number_key.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_number_key(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_operation.h b/Marlin/src/lcd/extui/mks_ui/draw_operation.h index d58b3307b8..3d89f1dc25 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_operation.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_operation.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_operation(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_pause_message.h b/Marlin/src/lcd/extui/mks_ui/draw_pause_message.h index c3df8118a4..97ce398897 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_pause_message.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_pause_message.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_pause_message(const PauseMessage msg); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_pause_position.h b/Marlin/src/lcd/extui/mks_ui/draw_pause_position.h index fd5459c647..7dc4c1fbc2 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_pause_position.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_pause_position.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_pause_position(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_preHeat.h b/Marlin/src/lcd/extui/mks_ui/draw_preHeat.h index 023f1228b3..ddb488eaa7 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_preHeat.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_preHeat.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_preHeat(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_print_file.h b/Marlin/src/lcd/extui/mks_ui/draw_print_file.h index 85eadc0a6b..01b0db83fb 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_print_file.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_print_file.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif typedef struct { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_printing.h b/Marlin/src/lcd/extui/mks_ui/draw_printing.h index b2a02a62da..8055a0746a 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_printing.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_printing.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif enum { diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ready_print.h b/Marlin/src/lcd/extui/mks_ui/draw_ready_print.h index 873be528ed..d5582936ce 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ready_print.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_ready_print.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_ready_print(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_set.h b/Marlin/src/lcd/extui/mks_ui/draw_set.h index a270308e07..11a38ea32f 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_set.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_set.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_set(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_step_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_step_settings.h index 4f32f0a6c2..0678aaa7fe 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_step_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_step_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_step_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_tmc_current_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_tmc_current_settings.h index 99589a3a17..b3ab95dc69 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_tmc_current_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_tmc_current_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_tmc_current_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_tmc_step_mode_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_tmc_step_mode_settings.h index aa42d9b87d..0f58bb56ad 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_tmc_step_mode_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_tmc_step_mode_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_tmc_step_mode_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_tool.h b/Marlin/src/lcd/extui/mks_ui/draw_tool.h index 0dc86b7030..db65ae5763 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_tool.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_tool.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_tool(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_touch_calibration.h b/Marlin/src/lcd/extui/mks_ui/draw_touch_calibration.h index 567256a792..17ec9fc96c 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_touch_calibration.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_touch_calibration.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_touch_calibration_screen(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.h index 863ff6fc7e..15c783c362 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_tramming_pos_settings(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.h b/Marlin/src/lcd/extui/mks_ui/draw_ui.h index 55ea6220e0..950386f878 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ui.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.h @@ -178,7 +178,7 @@ #endif // ifdef TFT35 #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif extern char public_buf_m[100]; diff --git a/Marlin/src/lcd/extui/mks_ui/draw_wifi.h b/Marlin/src/lcd/extui/mks_ui/draw_wifi.h index 4fa642b39c..a89bbd67d8 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_wifi.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_wifi.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif diff --git a/Marlin/src/lcd/extui/mks_ui/draw_wifi_list.h b/Marlin/src/lcd/extui/mks_ui/draw_wifi_list.h index 8dbedf832e..81c3a00d4a 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_wifi_list.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_wifi_list.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif void lv_draw_wifi_list(); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.h b/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.h index ff27397049..81400856fd 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif #define WIFI_AP_TEXT "AP" 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 4ffe6c1312..ad15238932 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_wifi_tips.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_wifi_tips.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif diff --git a/Marlin/src/lcd/extui/mks_ui/irq_overrid.cpp b/Marlin/src/lcd/extui/mks_ui/irq_overrid.cpp index f3c87c03c4..aca1db0039 100644 --- a/Marlin/src/lcd/extui/mks_ui/irq_overrid.cpp +++ b/Marlin/src/lcd/extui/mks_ui/irq_overrid.cpp @@ -39,7 +39,7 @@ #include "../../../inc/MarlinConfig.h" #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif #define WIFI_IO1_SET() WRITE(WIFI_IO1_PIN, HIGH); diff --git a/Marlin/src/lcd/extui/mks_ui/pic_manager.h b/Marlin/src/lcd/extui/mks_ui/pic_manager.h index 95405af1cf..320cb20b0b 100644 --- a/Marlin/src/lcd/extui/mks_ui/pic_manager.h +++ b/Marlin/src/lcd/extui/mks_ui/pic_manager.h @@ -131,7 +131,7 @@ #define OTHERS_COMMAND_ADDR_4 OTHERS_COMMAND_ADDR_3 + 100 #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif union union32 { diff --git a/Marlin/src/lcd/extui/mks_ui/printer_operation.h b/Marlin/src/lcd/extui/mks_ui/printer_operation.h index 499799c6c7..d9c0b741f2 100644 --- a/Marlin/src/lcd/extui/mks_ui/printer_operation.h +++ b/Marlin/src/lcd/extui/mks_ui/printer_operation.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif #define MIN_FILE_PRINTED 100 //5000 diff --git a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.h b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.h index e2786fd452..0790d8323c 100644 --- a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.h +++ b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.h @@ -27,7 +27,7 @@ */ #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif #include diff --git a/Marlin/src/lcd/extui/mks_ui/wifi_module.h b/Marlin/src/lcd/extui/mks_ui/wifi_module.h index 15b90ab367..36998899b4 100644 --- a/Marlin/src/lcd/extui/mks_ui/wifi_module.h +++ b/Marlin/src/lcd/extui/mks_ui/wifi_module.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif #include "../../../inc/MarlinConfigPre.h" diff --git a/Marlin/src/lcd/extui/mks_ui/wifi_upload.h b/Marlin/src/lcd/extui/mks_ui/wifi_upload.h index ff98173b95..2daa505d90 100644 --- a/Marlin/src/lcd/extui/mks_ui/wifi_upload.h +++ b/Marlin/src/lcd/extui/mks_ui/wifi_upload.h @@ -22,7 +22,7 @@ #pragma once #ifdef __cplusplus - extern "C" { /* C-declarations for C++ */ + extern "C" { #endif #define ESP_FIRMWARE_FILE "MksWifi.bin" From e34ca749b1b4a060549c42480d170f6d7440538d Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 18 Nov 2021 01:01:47 +0000 Subject: [PATCH 146/532] [cron] Bump distribution date (2021-11-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 eb5d6934bb..708c628a95 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 "2021-11-17" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 b2fa8bac0c..7f7818ea6e 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 "2021-11-17" + #define STRING_DISTRIBUTION_DATE "2021-11-18" #endif /** From 8e7f2f4483e83edc9ee6f38d632ed2a5f7ad0465 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 19 Nov 2021 01:01:40 +0000 Subject: [PATCH 147/532] [cron] Bump distribution date (2021-11-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 708c628a95..ae7f2d0125 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 "2021-11-18" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 7f7818ea6e..2cd02b1ab6 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 "2021-11-18" + #define STRING_DISTRIBUTION_DATE "2021-11-19" #endif /** From 0293a8340872296dc085394f75a6e68337087d18 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 20 Nov 2021 01:00:26 +0000 Subject: [PATCH 148/532] [cron] Bump distribution date (2021-11-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 ae7f2d0125..21e6af29f0 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 "2021-11-19" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 2cd02b1ab6..0f6a8c011c 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 "2021-11-19" + #define STRING_DISTRIBUTION_DATE "2021-11-20" #endif /** From 1c31366bf37fcebe91e8e6011af354904dd58ad4 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sat, 20 Nov 2021 02:44:53 +0100 Subject: [PATCH 149/532] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20Reduce=20calls=20t?= =?UTF-8?q?o=20set=20fan=20PWM=20(#23149)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/planner.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index e19684a7b5..28364d4be0 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1311,7 +1311,8 @@ void Planner::check_axes_activity() { #endif #if HAS_TAIL_FAN_SPEED - uint8_t tail_fan_speed[FAN_COUNT]; + static uint8_t tail_fan_speed[FAN_COUNT]; + bool fans_need_update = false; #endif #if ENABLED(BARICUDA) @@ -1330,7 +1331,13 @@ void Planner::check_axes_activity() { #endif #if HAS_TAIL_FAN_SPEED - FANS_LOOP(i) tail_fan_speed[i] = thermalManager.scaledFanSpeed(i, block->fan_speed[i]); + FANS_LOOP(i) { + const uint8_t spd = thermalManager.scaledFanSpeed(i, block->fan_speed[i]); + if (tail_fan_speed[i] != spd) { + fans_need_update = true; + tail_fan_speed[i] = spd; + } + } #endif #if ENABLED(BARICUDA) @@ -1358,7 +1365,13 @@ void Planner::check_axes_activity() { TERN_(HAS_CUTTER, cutter.refresh()); #if HAS_TAIL_FAN_SPEED - FANS_LOOP(i) tail_fan_speed[i] = thermalManager.scaledFanSpeed(i); + FANS_LOOP(i) { + const uint8_t spd = thermalManager.scaledFanSpeed(i); + if (tail_fan_speed[i] != spd) { + fans_need_update = true; + tail_fan_speed[i] = spd; + } + } #endif #if ENABLED(BARICUDA) @@ -1384,7 +1397,7 @@ void Planner::check_axes_activity() { // Update Fan speeds // Only if synchronous M106/M107 is disabled // - TERN_(HAS_TAIL_FAN_SPEED, sync_fan_speeds(tail_fan_speed)); + TERN_(HAS_TAIL_FAN_SPEED, if (fans_need_update) sync_fan_speeds(tail_fan_speed)); TERN_(AUTOTEMP, autotemp_task()); From 2955061b056dba156dc846385285cd6c8633e274 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 21 Nov 2021 01:04:01 +0000 Subject: [PATCH 150/532] [cron] Bump distribution date (2021-11-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 21e6af29f0..0afcc71151 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 "2021-11-20" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 0f6a8c011c..d08ffda113 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 "2021-11-20" + #define STRING_DISTRIBUTION_DATE "2021-11-21" #endif /** From f33396c2c34be960d81a6a7be1086af90946f262 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sun, 21 Nov 2021 20:13:01 +0100 Subject: [PATCH 151/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20TFT=20backlight=20?= =?UTF-8?q?sleep/wake=20(#23153)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/tft/touch.cpp | 8 +++++--- Marlin/src/lcd/touch/touch_buttons.cpp | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Marlin/src/lcd/tft/touch.cpp b/Marlin/src/lcd/tft/touch.cpp index dc1f2ecb6c..a04715a295 100644 --- a/Marlin/src/lcd/tft/touch.cpp +++ b/Marlin/src/lcd/tft/touch.cpp @@ -287,15 +287,17 @@ bool Touch::get_point(int16_t *x, int16_t *y) { #if HAS_TOUCH_SLEEP void Touch::sleepTimeout() { - #if PIN_EXISTS(TFT_BACKLIGHT) - OUT_WRITE(TFT_BACKLIGHT_PIN, LOW); + #if HAS_LCD_BRIGHTNESS + ui.set_brightness(0); + #elif PIN_EXISTS(TFT_BACKLIGHT) + WRITE(TFT_BACKLIGHT_PIN, LOW); #endif next_sleep_ms = TSLP_SLEEPING; } void Touch::wakeUp() { if (isSleeping()) { #if HAS_LCD_BRIGHTNESS - ui._set_brightness(); + ui.set_brightness(ui.brightness); #elif PIN_EXISTS(TFT_BACKLIGHT) WRITE(TFT_BACKLIGHT_PIN, HIGH); #endif diff --git a/Marlin/src/lcd/touch/touch_buttons.cpp b/Marlin/src/lcd/touch/touch_buttons.cpp index feaba8483b..c15bb08281 100644 --- a/Marlin/src/lcd/touch/touch_buttons.cpp +++ b/Marlin/src/lcd/touch/touch_buttons.cpp @@ -115,15 +115,17 @@ uint8_t TouchButtons::read_buttons() { #if HAS_TOUCH_SLEEP void TouchButtons::sleepTimeout() { - #if PIN_EXISTS(TFT_BACKLIGHT) - OUT_WRITE(TFT_BACKLIGHT_PIN, LOW); + #if HAS_LCD_BRIGHTNESS + ui.set_brightness(0); + #elif PIN_EXISTS(TFT_BACKLIGHT) + WRITE(TFT_BACKLIGHT_PIN, LOW); #endif next_sleep_ms = TSLP_SLEEPING; } void TouchButtons::wakeUp() { if (isSleeping()) { #if HAS_LCD_BRIGHTNESS - ui._set_brightness(); + ui.set_brightness(ui.brightness); #elif PIN_EXISTS(TFT_BACKLIGHT) WRITE(TFT_BACKLIGHT_PIN, HIGH); #endif From 6ac0d4727cd4abe70002c32faf3d87c7e24bfad3 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Sun, 21 Nov 2021 11:25:06 -0800 Subject: [PATCH 152/532] =?UTF-8?q?=E2=9C=A8=20BigTreeTech=20Mini=2012864?= =?UTF-8?q?=20V1.0=20(#23130)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/Configuration.h | 5 +++++ Marlin/src/HAL/STM32F1/inc/SanityCheck.h | 2 +- Marlin/src/inc/Conditionals_LCD.h | 4 ++-- Marlin/src/inc/Conditionals_post.h | 2 +- Marlin/src/inc/SanityCheck.h | 4 +++- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h | 2 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h | 2 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h | 2 +- Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h | 2 +- Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h | 2 +- 10 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 2c53498d02..28040bf1c7 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -2458,6 +2458,11 @@ //#define FYSETC_MINI_12864_2_1 // Type A/B. NeoPixel RGB Backlight //#define FYSETC_GENERIC_12864_1_1 // Larger display with basic ON/OFF backlight. +// +// BigTreeTech Mini 12864 V1.0 is an alias for FYSETC_MINI_12864_2_1. Type A/B. NeoPixel RGB Backlight. +// +//#define BTT_MINI_12864_V1 + // // Factory display for Creality CR-10 // https://www.aliexpress.com/item/32833148327.html diff --git a/Marlin/src/HAL/STM32F1/inc/SanityCheck.h b/Marlin/src/HAL/STM32F1/inc/SanityCheck.h index 2846155c35..fe8f6e0ec2 100644 --- a/Marlin/src/HAL/STM32F1/inc/SanityCheck.h +++ b/Marlin/src/HAL/STM32F1/inc/SanityCheck.h @@ -39,7 +39,7 @@ #error "SERIAL_STATS_DROPPED_RX is not supported on the STM32F1 platform." #endif -#if ENABLED(NEOPIXEL_LED) && DISABLED(MKS_MINI_12864_V3) +#if ENABLED(NEOPIXEL_LED) && DISABLED(FYSETC_MINI_12864_2_1) #error "NEOPIXEL_LED (Adafruit NeoPixel) is not supported for HAL/STM32F1. Comment out this line to proceed at your own risk!" #endif diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index 7b0c992868..7d8b50f7be 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -31,8 +31,8 @@ #define MKS_MINI_12864 #endif -// MKS_MINI_12864_V3 is simply identical to FYSETC_MINI_12864_2_1 -#if ENABLED(MKS_MINI_12864_V3) +// MKS_MINI_12864_V3 and BTT_MINI_12864_V1 are identical to FYSETC_MINI_12864_2_1 +#if EITHER(MKS_MINI_12864_V3, BTT_MINI_12864_V1) #define FYSETC_MINI_12864_2_1 #endif diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 8008461547..ae3a8a8bf2 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -373,7 +373,7 @@ #elif EITHER(MKS_MINI_12864, ENDER2_STOCKDISPLAY) #define _LCD_CONTRAST_MIN 120 #define _LCD_CONTRAST_INIT 195 -#elif ENABLED(MKS_MINI_12864_V3) +#elif EITHER(MKS_MINI_12864_V3, BTT_MINI_12864_V1) #define _LCD_CONTRAST_MIN 255 #define _LCD_CONTRAST_INIT 255 #define _LCD_CONTRAST_MAX 255 diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 4186e99467..959302ee73 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2630,6 +2630,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS + (ENABLED(U8GLIB_SSD1306) && DISABLED(IS_U8GLIB_SSD1306)) \ + (ENABLED(MINIPANEL) && NONE(MKS_MINI_12864, ENDER2_STOCKDISPLAY)) \ + (ENABLED(MKS_MINI_12864) && NONE(MKS_LCD12864A, MKS_LCD12864B)) \ + + (ENABLED(FYSETC_MINI_12864_2_1) && NONE(MKS_MINI_12864_V3, BTT_MINI_12864_V1)) \ + + COUNT_ENABLED(MKS_MINI_12864_V3, BTT_MINI_12864_V1) \ + (ENABLED(EXTENSIBLE_UI) && DISABLED(IS_EXTUI)) \ + (DISABLED(IS_LEGACY_TFT) && ENABLED(TFT_GENERIC)) \ + (ENABLED(IS_LEGACY_TFT) && COUNT_ENABLED(TFT_320x240, TFT_320x240_SPI, TFT_480x320, TFT_480x320_SPI)) \ @@ -2637,7 +2639,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS + COUNT_ENABLED(DGUS_LCD_UI_ORIGIN, DGUS_LCD_UI_FYSETC, DGUS_LCD_UI_HIPRECY, DGUS_LCD_UI_MKS, DGUS_LCD_UI_RELOADED) \ + COUNT_ENABLED(ENDER2_STOCKDISPLAY, CR10_STOCKDISPLAY) \ + COUNT_ENABLED(DWIN_CREALITY_LCD, DWIN_CREALITY_LCD_ENHANCED, DWIN_CREALITY_LCD_JYERSUI, DWIN_MARLINUI_PORTRAIT, DWIN_MARLINUI_LANDSCAPE) \ - + COUNT_ENABLED(FYSETC_MINI_12864_X_X, FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0, FYSETC_MINI_12864_2_1, FYSETC_GENERIC_12864_1_1) \ + + COUNT_ENABLED(FYSETC_MINI_12864_X_X, FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0, FYSETC_GENERIC_12864_1_1) \ + COUNT_ENABLED(LCD_SAINSMART_I2C_1602, LCD_SAINSMART_I2C_2004) \ + COUNT_ENABLED(MKS_12864OLED, MKS_12864OLED_SSD1306) \ + COUNT_ENABLED(MKS_TS35_V2_0, MKS_ROBIN_TFT24, MKS_ROBIN_TFT28, MKS_ROBIN_TFT32, MKS_ROBIN_TFT35, MKS_ROBIN_TFT43, MKS_ROBIN_TFT_V1_1R, ANET_ET4_TFT28, ANET_ET5_TFT35, BIQU_BX_TFT70, BTT_TFT35_SPI_V1_0) \ diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h index 06b9721403..6707296897 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h @@ -314,7 +314,7 @@ #define BEEPER_PIN -1 #endif - #elif ENABLED(MKS_MINI_12864_V3) + #elif ENABLED(FYSETC_MINI_12864_2_1) #define DOGLCD_CS PD13 #define DOGLCD_A0 PC6 #define LCD_PINS_DC DOGLCD_A0 diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h index 025c65a38b..c30bb0ac9e 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h @@ -201,7 +201,7 @@ #define DOGLCD_SCK EXP2_09_PIN #define DOGLCD_MOSI EXP2_05_PIN - #elif ENABLED(MKS_MINI_12864_V3) + #elif ENABLED(FYSETC_MINI_12864_2_1) #define DOGLCD_CS EXP1_08_PIN #define DOGLCD_A0 EXP1_07_PIN #define LCD_PINS_DC DOGLCD_A0 diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h index 1cdee92b08..e8d567bc70 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h @@ -338,7 +338,7 @@ #define BEEPER_PIN -1 #endif - #elif ENABLED(MKS_MINI_12864_V3) + #elif ENABLED(FYSETC_MINI_12864_2_1) #define DOGLCD_CS PD13 #define DOGLCD_A0 PC6 #define LCD_PINS_DC DOGLCD_A0 diff --git a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h index a7f853185e..00dcade892 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h @@ -346,7 +346,7 @@ //#define DOGLCD_SCK EXP2_09_PIN //#define DOGLCD_MOSI EXP2_05_PIN - #elif ENABLED(MKS_MINI_12864_V3) + #elif ENABLED(FYSETC_MINI_12864_2_1) #define DOGLCD_CS EXP1_08_PIN #define DOGLCD_A0 EXP1_07_PIN #define LCD_PINS_DC DOGLCD_A0 diff --git a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h index 256439e654..48d2ffef6e 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h @@ -335,7 +335,7 @@ //#define MKS_LCD12864B //#undef SHOW_BOOTSCREEN - #elif ENABLED(MKS_MINI_12864_V3) + #elif ENABLED(FYSETC_MINI_12864_2_1) #define DOGLCD_CS EXP1_08_PIN #define DOGLCD_A0 EXP1_07_PIN #define LCD_PINS_DC DOGLCD_A0 From 0fbecf4aaff595bb90b9e7d7556fba3dc40e406c Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 22 Nov 2021 01:05:17 +0000 Subject: [PATCH 153/532] [cron] Bump distribution date (2021-11-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 0afcc71151..d5fa63a955 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 "2021-11-21" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 d08ffda113..c71818b136 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 "2021-11-21" + #define STRING_DISTRIBUTION_DATE "2021-11-22" #endif /** From 430a4aec3453b671a531ea7fa2b7dc203ba8769a Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 23 Nov 2021 01:01:29 +0000 Subject: [PATCH 154/532] [cron] Bump distribution date (2021-11-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 d5fa63a955..b025ee39a3 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 "2021-11-22" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 c71818b136..71086876af 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 "2021-11-22" + #define STRING_DISTRIBUTION_DATE "2021-11-23" #endif /** From 7110d11c9d8933c8c412c2fabd3b065a5ab97b6e Mon Sep 17 00:00:00 2001 From: Giuliano Zaro <3684609+GMagician@users.noreply.github.com> Date: Tue, 23 Nov 2021 21:01:53 +0100 Subject: [PATCH 155/532] =?UTF-8?q?=E2=9C=A8=20Fan=20tachometer=20support?= =?UTF-8?q?=20(#23086)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/Configuration_adv.h | 40 ++++ Marlin/src/MarlinCore.cpp | 7 + Marlin/src/core/language.h | 1 + Marlin/src/feature/fancheck.cpp | 207 ++++++++++++++++++ Marlin/src/feature/fancheck.h | 89 ++++++++ Marlin/src/gcode/control/M999.cpp | 2 +- Marlin/src/gcode/gcode.cpp | 10 + Marlin/src/gcode/gcode.h | 5 + Marlin/src/gcode/temp/M123.cpp | 48 ++++ Marlin/src/inc/Conditionals_post.h | 34 ++- Marlin/src/inc/SanityCheck.h | 25 +++ Marlin/src/lcd/language/language_en.h | 2 + Marlin/src/lcd/language/language_it.h | 3 + Marlin/src/lcd/marlinui.cpp | 4 - Marlin/src/lcd/menu/menu_configuration.cpp | 8 + Marlin/src/module/settings.cpp | 31 +++ Marlin/src/module/temperature.cpp | 67 +++--- Marlin/src/module/temperature.h | 40 +++- .../src/pins/stm32f4/pins_BTT_BTT002_V1_0.h | 8 + ini/features.ini | 3 +- platformio.ini | 2 + 21 files changed, 592 insertions(+), 44 deletions(-) create mode 100644 Marlin/src/feature/fancheck.cpp create mode 100644 Marlin/src/feature/fancheck.h create mode 100644 Marlin/src/gcode/temp/M123.cpp diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index c4feba5692..a1366fc511 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -603,6 +603,40 @@ #define COOLER_AUTO_FAN_TEMPERATURE 18 #define COOLER_AUTO_FAN_SPEED 255 +/** + * Hotend Cooling Fans tachometers + * + * Define one or more tachometer pins to enable fan speed + * monitoring, and reporting of fan speeds with M123. + * + * NOTE: Only works with fans up to 7000 RPM. + */ +//#define FOURWIRES_FANS // Needed with AUTO_FAN when 4-wire PWM fans are installed +//#define E0_FAN_TACHO_PIN -1 +//#define E0_FAN_TACHO_PULLUP +//#define E0_FAN_TACHO_PULLDOWN +//#define E1_FAN_TACHO_PIN -1 +//#define E1_FAN_TACHO_PULLUP +//#define E1_FAN_TACHO_PULLDOWN +//#define E2_FAN_TACHO_PIN -1 +//#define E2_FAN_TACHO_PULLUP +//#define E2_FAN_TACHO_PULLDOWN +//#define E3_FAN_TACHO_PIN -1 +//#define E3_FAN_TACHO_PULLUP +//#define E3_FAN_TACHO_PULLDOWN +//#define E4_FAN_TACHO_PIN -1 +//#define E4_FAN_TACHO_PULLUP +//#define E4_FAN_TACHO_PULLDOWN +//#define E5_FAN_TACHO_PIN -1 +//#define E5_FAN_TACHO_PULLUP +//#define E5_FAN_TACHO_PULLDOWN +//#define E6_FAN_TACHO_PIN -1 +//#define E6_FAN_TACHO_PULLUP +//#define E6_FAN_TACHO_PULLDOWN +//#define E7_FAN_TACHO_PIN -1 +//#define E7_FAN_TACHO_PULLUP +//#define E7_FAN_TACHO_PULLDOWN + /** * Part-Cooling Fan Multiplexer * @@ -3607,6 +3641,12 @@ */ //#define CNC_COORDINATE_SYSTEMS +/** + * Auto-report fan speed with M123 S + * Requires fans with tachometer pins + */ +//#define AUTO_REPORT_FANS + /** * Auto-report temperatures with M155 S */ diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 04ee8eb520..827d2af864 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -212,6 +212,10 @@ #include "module/tool_change.h" +#if HAS_FANCHECK + #include "feature/fancheck.h" +#endif + #if ENABLED(USE_CONTROLLER_FAN) #include "feature/controllerfan.h" #endif @@ -829,6 +833,7 @@ void idle(bool no_stepper_sleep/*=false*/) { #if HAS_AUTO_REPORTING if (!gcode.autoreport_paused) { TERN_(AUTO_REPORT_TEMPERATURES, thermalManager.auto_reporter.tick()); + TERN_(AUTO_REPORT_FANS, fan_check.auto_reporter.tick()); TERN_(AUTO_REPORT_SD_STATUS, card.auto_reporter.tick()); TERN_(AUTO_REPORT_POSITION, position_auto_reporter.tick()); TERN_(BUFFER_MONITORING, queue.auto_report_buffer_statistics()); @@ -1275,6 +1280,8 @@ void setup() { SETUP_RUN(controllerFan.setup()); #endif + TERN_(HAS_FANCHECK, fan_check.init()); + // UI must be initialized before EEPROM // (because EEPROM code calls the UI). diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h index 03bffb8bd9..0a6870af26 100644 --- a/Marlin/src/core/language.h +++ b/Marlin/src/core/language.h @@ -140,6 +140,7 @@ #define STR_RESEND "Resend: " #define STR_UNKNOWN_COMMAND "Unknown command: \"" #define STR_ACTIVE_EXTRUDER "Active Extruder: " +#define STR_ERR_FANSPEED "Fan speed E" #define STR_PROBE_OFFSET "Probe Offset" #define STR_SKEW_MIN "min_skew_factor: " diff --git a/Marlin/src/feature/fancheck.cpp b/Marlin/src/feature/fancheck.cpp new file mode 100644 index 0000000000..1b47fadecc --- /dev/null +++ b/Marlin/src/feature/fancheck.cpp @@ -0,0 +1,207 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 . + * + */ + +/** + * fancheck.cpp - fan tachometer check + */ + +#include "../inc/MarlinConfig.h" + +#if HAS_FANCHECK + +#include "fancheck.h" +#include "../module/temperature.h" + +#if HAS_AUTO_FAN && EXTRUDER_AUTO_FAN_SPEED != 255 && DISABLED(FOURWIRES_FANS) + bool FanCheck::measuring = false; +#endif +bool FanCheck::tacho_state[TACHO_COUNT]; +uint16_t FanCheck::edge_counter[TACHO_COUNT]; +uint8_t FanCheck::rps[TACHO_COUNT]; +FanCheck::TachoError FanCheck::error = FanCheck::TachoError::NONE; +bool FanCheck::enabled; + +void FanCheck::init() { + #define _TACHINIT(N) TERN(E##N##_FAN_TACHO_PULLUP, SET_INPUT_PULLUP, TERN(E##N##_FAN_TACHO_PULLDOWN, SET_INPUT_PULLDOWN, SET_INPUT))(E##N##_FAN_TACHO_PIN) + #if HAS_E0_FAN_TACHO + _TACHINIT(0); + #endif + #if HAS_E1_FAN_TACHO + _TACHINIT(1); + #endif + #if HAS_E2_FAN_TACHO + _TACHINIT(2); + #endif + #if HAS_E3_FAN_TACHO + _TACHINIT(3); + #endif + #if HAS_E4_FAN_TACHO + _TACHINIT(4); + #endif + #if HAS_E5_FAN_TACHO + _TACHINIT(5); + #endif + #if HAS_E6_FAN_TACHO + _TACHINIT(6); + #endif + #if HAS_E7_FAN_TACHO + _TACHINIT(7); + #endif +} + +void FanCheck::update_tachometers() { + bool status; + + #define _TACHO_CASE(N) case N: status = READ(E##N##_FAN_TACHO_PIN); break; + LOOP_L_N(f, TACHO_COUNT) { + switch (f) { + #if HAS_E0_FAN_TACHO + _TACHO_CASE(0) + #endif + #if HAS_E1_FAN_TACHO + _TACHO_CASE(1) + #endif + #if HAS_E2_FAN_TACHO + _TACHO_CASE(2) + #endif + #if HAS_E3_FAN_TACHO + _TACHO_CASE(3) + #endif + #if HAS_E4_FAN_TACHO + _TACHO_CASE(4) + #endif + #if HAS_E5_FAN_TACHO + _TACHO_CASE(5) + #endif + #if HAS_E6_FAN_TACHO + _TACHO_CASE(6) + #endif + #if HAS_E7_FAN_TACHO + _TACHO_CASE(7) + #endif + default: continue; + } + + if (status != tacho_state[f]) { + if (measuring) ++edge_counter[f]; + tacho_state[f] = status; + } + } +} + +void FanCheck::compute_speed(uint16_t elapsedTime) { + static uint8_t errors_count[TACHO_COUNT]; + static uint8_t fan_reported_errors_msk = 0; + + uint8_t fan_error_msk = 0; + LOOP_L_N(f, TACHO_COUNT) { + switch (f) { + TERN_(HAS_E0_FAN_TACHO, case 0:) + TERN_(HAS_E1_FAN_TACHO, case 1:) + TERN_(HAS_E2_FAN_TACHO, case 2:) + TERN_(HAS_E3_FAN_TACHO, case 3:) + TERN_(HAS_E4_FAN_TACHO, case 4:) + TERN_(HAS_E5_FAN_TACHO, case 5:) + TERN_(HAS_E6_FAN_TACHO, case 6:) + TERN_(HAS_E7_FAN_TACHO, case 7:) + // Compute fan speed + rps[f] = edge_counter[f] * float(250) / elapsedTime; + edge_counter[f] = 0; + + // Check fan speed + constexpr int8_t max_extruder_fan_errors = TERN(HAS_PWMFANCHECK, 10000, 5000) / Temperature::fan_update_interval_ms; + + if (rps[f] >= 20 || TERN0(HAS_AUTO_FAN, thermalManager.autofan_speed[f] == 0)) + errors_count[f] = 0; + else if (errors_count[f] < max_extruder_fan_errors) + ++errors_count[f]; + else if (enabled) + SBI(fan_error_msk, f); + break; + } + } + + // Drop the error when all fans are ok + if (!fan_error_msk && error == TachoError::REPORTED) error = TachoError::FIXED; + + if (error == TachoError::FIXED && !printJobOngoing() && !printingIsPaused()) { + error = TachoError::NONE; // if the issue has been fixed while the printer is idle, reenable immediately + ui.reset_alert_level(); + } + + if (fan_error_msk & ~fan_reported_errors_msk) { + // Handle new faults only + LOOP_L_N(f, TACHO_COUNT) if (TEST(fan_error_msk, f)) report_speed_error(f); + } + fan_reported_errors_msk = fan_error_msk; +} + +void FanCheck::report_speed_error(uint8_t fan) { + if (printJobOngoing()) { + if (error == TachoError::NONE) { + if (thermalManager.degTargetHotend(fan) != 0) { + kill(GET_TEXT_F(MSG_FAN_SPEED_FAULT)); + error = TachoError::REPORTED; + } + else + error = TachoError::DETECTED; // Plans error for next processed command + } + } + else if (!printingIsPaused()) { + thermalManager.setTargetHotend(0, fan); // Always disable heating + if (error == TachoError::NONE) error = TachoError::REPORTED; + } + + SERIAL_ERROR_MSG(STR_ERR_FANSPEED, fan); + LCD_ALERTMESSAGE(MSG_FAN_SPEED_FAULT); +} + +void FanCheck::print_fan_states() { + LOOP_L_N(s, 2) { + LOOP_L_N(f, TACHO_COUNT) { + switch (f) { + TERN_(HAS_E0_FAN_TACHO, case 0:) + TERN_(HAS_E1_FAN_TACHO, case 1:) + TERN_(HAS_E2_FAN_TACHO, case 2:) + TERN_(HAS_E3_FAN_TACHO, case 3:) + TERN_(HAS_E4_FAN_TACHO, case 4:) + TERN_(HAS_E5_FAN_TACHO, case 5:) + TERN_(HAS_E6_FAN_TACHO, case 6:) + TERN_(HAS_E7_FAN_TACHO, case 7:) + SERIAL_ECHOPGM("E", f); + if (s == 0) + SERIAL_ECHOPGM(":", 60 * rps[f], " RPM "); + else + SERIAL_ECHOPGM("@:", TERN(HAS_AUTO_FAN, thermalManager.autofan_speed[f], 255), " "); + break; + } + } + } + SERIAL_EOL(); +} + +#if ENABLED(AUTO_REPORT_FANS) + AutoReporter FanCheck::auto_reporter; + void FanCheck::AutoReportFan::report() { print_fan_states(); } +#endif + +#endif // HAS_FANCHECK diff --git a/Marlin/src/feature/fancheck.h b/Marlin/src/feature/fancheck.h new file mode 100644 index 0000000000..6e8038b498 --- /dev/null +++ b/Marlin/src/feature/fancheck.h @@ -0,0 +1,89 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 "../inc/MarlinConfig.h" + +#if HAS_FANCHECK + +#include "../MarlinCore.h" +#include "../lcd/marlinui.h" + +#if ENABLED(AUTO_REPORT_FANS) + #include "../libs/autoreport.h" +#endif + +#if ENABLED(PARK_HEAD_ON_PAUSE) + #include "../gcode/queue.h" +#endif + +/** + * fancheck.h + */ +#define TACHO_COUNT TERN(HAS_E7_FAN_TACHO, 8, TERN(HAS_E6_FAN_TACHO, 7, TERN(HAS_E5_FAN_TACHO, 6, TERN(HAS_E4_FAN_TACHO, 5, TERN(HAS_E3_FAN_TACHO, 4, TERN(HAS_E2_FAN_TACHO, 3, TERN(HAS_E1_FAN_TACHO, 2, 1))))))) + +class FanCheck { + private: + + enum class TachoError : uint8_t { NONE, DETECTED, REPORTED, FIXED }; + + #if HAS_PWMFANCHECK + static bool measuring; // For future use (3 wires PWM controlled fans) + #else + static constexpr bool measuring = true; + #endif + static bool tacho_state[TACHO_COUNT]; + static uint16_t edge_counter[TACHO_COUNT]; + static uint8_t rps[TACHO_COUNT]; + static TachoError error; + + static inline void report_speed_error(uint8_t fan); + + public: + + static bool enabled; + + static void init(); + static void update_tachometers(); + static void compute_speed(uint16_t elapsedTime); + static void print_fan_states(); + #if HAS_PWMFANCHECK + static inline void toggle_measuring() { measuring = !measuring; } + static inline bool is_measuring() { return measuring; } + #endif + + static inline void check_deferred_error() { + if (error == TachoError::DETECTED) { + error = TachoError::REPORTED; + TERN(PARK_HEAD_ON_PAUSE, queue.inject(F("M125")), kill(GET_TEXT_F(MSG_FAN_SPEED_FAULT))); + } + } + + #if ENABLED(AUTO_REPORT_FANS) + struct AutoReportFan { static void report(); }; + static AutoReporter auto_reporter; + #endif +}; + +extern FanCheck fan_check; + +#endif // HAS_FANCHECK diff --git a/Marlin/src/gcode/control/M999.cpp b/Marlin/src/gcode/control/M999.cpp index b7219673a3..b7d6db9f23 100644 --- a/Marlin/src/gcode/control/M999.cpp +++ b/Marlin/src/gcode/control/M999.cpp @@ -22,7 +22,7 @@ #include "../gcode.h" -#include "../../lcd/marlinui.h" // for lcd_reset_alert_level +#include "../../lcd/marlinui.h" // for ui.reset_alert_level #include "../../MarlinCore.h" // for marlin_state #include "../queue.h" // for flush_and_request_resend diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index b2cb26122f..24eb9914d1 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -65,6 +65,10 @@ GcodeSuite gcode; #include "../feature/password/password.h" #endif +#if HAS_FANCHECK + #include "../feature/fancheck.h" +#endif + #include "../MarlinCore.h" // for idle, kill // Inactivity shutdown @@ -296,6 +300,8 @@ void GcodeSuite::dwell(millis_t time) { * Process the parsed command and dispatch it to its handler */ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { + TERN_(HAS_FANCHECK, fan_check.check_deferred_error()); + KEEPALIVE_STATE(IN_HANDLER); /** @@ -577,6 +583,10 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { case 113: M113(); break; // M113: Set Host Keepalive interval #endif + #if HAS_FANCHECK + case 123: M123(); break; // M123: Report fan states or set fans auto-report interval + #endif + #if HAS_HEATED_BED case 140: M140(); break; // M140: Set bed temperature case 190: M190(); break; // M190: Wait for bed temperature to reach target diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index d7bacaef32..6bfaf00c13 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -156,6 +156,7 @@ * M121 - Disable endstops detection. * * M122 - Debug stepper (Requires at least one _DRIVER_TYPE defined as TMC2130/2160/5130/5160/2208/2209/2660 or L6470) + * M123 - Report fan tachometers. (Requires En_FAN_TACHO_PIN) Optionally set auto-report interval. (Requires AUTO_REPORT_FANS) * M125 - Save current position and move to filament change position. (Requires PARK_HEAD_ON_PAUSE) * * M126 - Solenoid Air Valve Open. (Requires BARICUDA) @@ -736,6 +737,10 @@ private: static void M120(); static void M121(); + #if HAS_FANCHECK + static void M123(); + #endif + #if ENABLED(PARK_HEAD_ON_PAUSE) static void M125(); #endif diff --git a/Marlin/src/gcode/temp/M123.cpp b/Marlin/src/gcode/temp/M123.cpp new file mode 100644 index 0000000000..389656ef34 --- /dev/null +++ b/Marlin/src/gcode/temp/M123.cpp @@ -0,0 +1,48 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include "../../inc/MarlinConfig.h" + +#if HAS_FANCHECK + +#include "../gcode.h" +#include "../../feature/fancheck.h" + +/** + * M123: Report fan states -or- set interval for auto-report + * + * S : Set auto-report interval + */ +void GcodeSuite::M123() { + + #if ENABLED(AUTO_REPORT_FANS) + if (parser.seenval('S')) { + fan_check.auto_reporter.set_interval(parser.value_byte()); + return; + } + #endif + + fan_check.print_fan_states(); + +} + +#endif // HAS_FANCHECK diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index ae3a8a8bf2..d0b5aff5dd 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -2510,10 +2510,42 @@ #define AUTO_CHAMBER_IS_E 1 #endif +// Fans check +#if HAS_HOTEND && PIN_EXISTS(E0_FAN_TACHO) + #define HAS_E0_FAN_TACHO 1 +#endif +#if HOTENDS > 1 && PIN_EXISTS(E1_FAN_TACHO) + #define HAS_E1_FAN_TACHO 1 +#endif +#if HOTENDS > 2 && PIN_EXISTS(E2_FAN_TACHO) + #define HAS_E2_FAN_TACHO 1 +#endif +#if HOTENDS > 3 && PIN_EXISTS(E3_FAN_TACHO) + #define HAS_E3_FAN_TACHO 1 +#endif +#if HOTENDS > 4 && PIN_EXISTS(E4_FAN_TACHO) + #define HAS_E4_FAN_TACHO 1 +#endif +#if HOTENDS > 5 && PIN_EXISTS(E5_FAN_TACHO) + #define HAS_E5_FAN_TACHO 1 +#endif +#if HOTENDS > 6 && PIN_EXISTS(E6_FAN_TACHO) + #define HAS_E6_FAN_TACHO 1 +#endif +#if HOTENDS > 7 && PIN_EXISTS(E7_FAN_TACHO) + #define HAS_E7_FAN_TACHO 1 +#endif +#if ANY(HAS_E0_FAN_TACHO, HAS_E1_FAN_TACHO, HAS_E2_FAN_TACHO, HAS_E3_FAN_TACHO, HAS_E4_FAN_TACHO, HAS_E5_FAN_TACHO, HAS_E6_FAN_TACHO, HAS_E7_FAN_TACHO) + #define HAS_FANCHECK 1 + #if HAS_AUTO_FAN && EXTRUDER_AUTO_FAN_SPEED != 255 && DISABLED(FOURWIRES_FANS) + #define HAS_PWMFANCHECK 1 + #endif +#endif + #if !HAS_TEMP_SENSOR #undef AUTO_REPORT_TEMPERATURES #endif -#if ANY(AUTO_REPORT_TEMPERATURES, AUTO_REPORT_SD_STATUS, AUTO_REPORT_POSITION) +#if ANY(AUTO_REPORT_TEMPERATURES, AUTO_REPORT_SD_STATUS, AUTO_REPORT_POSITION, AUTO_REPORT_FANS) #define HAS_AUTO_REPORTING 1 #endif diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 959302ee73..193750ef26 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2583,6 +2583,31 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #endif #endif +/** + * Fan check + */ +#if HAS_FANCHECK + #if BOTH(E0_FAN_TACHO_PULLUP, E0_FAN_TACHO_PULLDOWN) + #error "Enable only one of E0_FAN_TACHO_PULLUP or E0_FAN_TACHO_PULLDOWN." + #elif BOTH(E1_FAN_TACHO_PULLUP, E1_FAN_TACHO_PULLDOWN) + #error "Enable only one of E1_FAN_TACHO_PULLUP or E1_FAN_TACHO_PULLDOWN." + #elif BOTH(E2_FAN_TACHO_PULLUP, E2_FAN_TACHO_PULLDOWN) + #error "Enable only one of E2_FAN_TACHO_PULLUP or E2_FAN_TACHO_PULLDOWN." + #elif BOTH(E3_FAN_TACHO_PULLUP, E3_FAN_TACHO_PULLDOWN) + #error "Enable only one of E3_FAN_TACHO_PULLUP or E3_FAN_TACHO_PULLDOWN." + #elif BOTH(E4_FAN_TACHO_PULLUP, E4_FAN_TACHO_PULLDOWN) + #error "Enable only one of E4_FAN_TACHO_PULLUP or E4_FAN_TACHO_PULLDOWN." + #elif BOTH(E5_FAN_TACHO_PULLUP, E5_FAN_TACHO_PULLDOWN) + #error "Enable only one of E5_FAN_TACHO_PULLUP or E5_FAN_TACHO_PULLDOWN." + #elif BOTH(E6_FAN_TACHO_PULLUP, E6_FAN_TACHO_PULLDOWN) + #error "Enable only one of E6_FAN_TACHO_PULLUP or E6_FAN_TACHO_PULLDOWN." + #elif BOTH(E7_FAN_TACHO_PULLUP, E7_FAN_TACHO_PULLDOWN) + #error "Enable only one of E7_FAN_TACHO_PULLUP or E7_FAN_TACHO_PULLDOWN." + #endif +#elif ENABLED(AUTO_REPORT_FANS) + #error "AUTO_REPORT_FANS requires one or more fans with a tachometer pin." +#endif + /** * Make sure only one EEPROM type is enabled */ diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index ecd5ef5660..907faa1436 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -570,6 +570,7 @@ namespace Language_en { LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Runaway Watch: OFF"); LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Runaway Watch: ON"); LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout"); + LSTR MSG_FAN_SPEED_FAULT = _UxGT("Fan speed fault"); LSTR MSG_CASE_LIGHT = _UxGT("Case Light"); LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Light Brightness"); @@ -613,6 +614,7 @@ namespace Language_en { LSTR MSG_RUNOUT_SENSOR = _UxGT("Runout Sensor"); LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Runout Dist mm"); LSTR MSG_RUNOUT_ENABLE = _UxGT("Enable Runout"); + LSTR MSG_FANCHECK = _UxGT("Fan Tacho Check"); LSTR MSG_KILL_HOMING_FAILED = _UxGT("Homing Failed"); LSTR MSG_LCD_PROBING_FAILED = _UxGT("Probing Failed"); diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index 44ae49b519..1720c0a93a 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -556,6 +556,7 @@ namespace Language_it { LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Controllo fuga: OFF"); LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Controllo fuga: ON"); LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Timeout inatt.ugello"); + LSTR MSG_FAN_SPEED_FAULT = _UxGT("Err.vel.della ventola"); LSTR MSG_CASE_LIGHT = _UxGT("Luci Case"); LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Luminosità Luci"); @@ -597,6 +598,8 @@ namespace Language_it { LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Ugello: "); LSTR MSG_RUNOUT_SENSOR = _UxGT("Sens.filo termin."); // Max 17 characters LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Dist mm filo term."); + LSTR MSG_RUNOUT_ENABLE = _UxGT("Abil.filo termin."); + LSTR MSG_FANCHECK = _UxGT("Verif.tacho vent."); // Max 17 characters LSTR MSG_KILL_HOMING_FAILED = _UxGT("Home fallito"); LSTR MSG_LCD_PROBING_FAILED = _UxGT("Sondaggio fallito"); diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 57157d2c00..5cf3e66826 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -1566,10 +1566,6 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; TERN_(HAS_LCD_MENU, return_to_status()); } - #if ANY(PARK_HEAD_ON_PAUSE, SDSUPPORT) - #include "../gcode/queue.h" - #endif - void MarlinUI::pause_print() { #if HAS_LCD_MENU synchronize(GET_TEXT(MSG_PAUSING)); diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index b976224b8c..cd8bad9c8b 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -34,6 +34,10 @@ #include "../../feature/runout.h" #endif +#if HAS_FANCHECK + #include "../../feature/fancheck.h" +#endif + #if ENABLED(POWER_LOSS_RECOVERY) #include "../../feature/powerloss.h" #endif @@ -537,6 +541,10 @@ void menu_configuration() { EDIT_ITEM(bool, MSG_RUNOUT_SENSOR, &runout.enabled, runout.reset); #endif + #if HAS_FANCHECK + EDIT_ITEM(bool, MSG_FANCHECK, &fan_check.enabled); + #endif + #if ENABLED(POWER_LOSS_RECOVERY) EDIT_ITEM(bool, MSG_OUTAGE_RECOVERY, &recovery.enabled, recovery.changed); #endif diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 0cb29f29e0..4057d339dc 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -154,6 +154,10 @@ #include "../libs/buzzer.h" #endif +#if HAS_FANCHECK + #include "../feature/fancheck.h" +#endif + #if ENABLED(DGUS_LCD_UI_MKS) #include "../lcd/extui/dgus/DGUSScreenHandler.h" #include "../lcd/extui/dgus/DGUSDisplayDef.h" @@ -491,6 +495,13 @@ typedef struct SettingsDataStruct { bool buzzer_enabled; #endif + // + // Fan tachometer check + // + #if HAS_FANCHECK + bool fan_check_enabled; + #endif + // // MKS UI controller // @@ -1433,6 +1444,13 @@ void MarlinSettings::postprocess() { EEPROM_WRITE(ui.buzzer_enabled); #endif + // + // Fan tachometer check + // + #if HAS_FANCHECK + EEPROM_WRITE(fan_check.enabled); + #endif + // // MKS UI controller // @@ -2339,6 +2357,14 @@ void MarlinSettings::postprocess() { EEPROM_READ(ui.buzzer_enabled); #endif + // + // Fan tachometer check + // + #if HAS_FANCHECK + _FIELD_TEST(fan_check_enabled); + EEPROM_READ(fan_check.enabled); + #endif + // // MKS UI controller // @@ -3036,6 +3062,11 @@ void MarlinSettings::reset() { #endif #endif + // + // Fan tachometer check + // + TERN_(HAS_FANCHECK, fan_check.enabled = true); + // // MKS UI controller // diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index ede8aa73ac..7afec4408e 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -294,7 +294,7 @@ PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED); redundant_info_t Temperature::temp_redundant; #endif -#if ENABLED(AUTO_POWER_E_FANS) +#if EITHER(AUTO_POWER_E_FANS, HAS_FANCHECK) uint8_t Temperature::autofan_speed[HOTENDS]; // = { 0 } #endif @@ -526,8 +526,9 @@ volatile bool Temperature::raw_temps_ready = false; millis_t Temperature::preheat_end_time[HOTENDS] = { 0 }; #endif -#if HAS_AUTO_FAN - millis_t Temperature::next_auto_fan_check_ms = 0; +#if HAS_FAN_LOGIC + constexpr millis_t Temperature::fan_update_interval_ms; + millis_t Temperature::fan_update_ms = 0; #endif #if ENABLED(FAN_SOFT_PWM) @@ -614,7 +615,7 @@ volatile bool Temperature::raw_temps_ready = false; bool heated = false; #endif - TERN_(HAS_AUTO_FAN, next_auto_fan_check_ms = next_temp_ms + 2500UL); + TERN_(HAS_FAN_LOGIC, fan_update_ms = next_temp_ms + fan_update_interval_ms); TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_STARTED)); TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_PidTuning(isbed ? PID_BED_START : PID_EXTR_START)); @@ -659,12 +660,7 @@ volatile bool Temperature::raw_temps_ready = false; ONHEATING(start_temp, current_temp, target); #endif - #if HAS_AUTO_FAN - if (ELAPSED(ms, next_auto_fan_check_ms)) { - checkExtruderAutoFans(); - next_auto_fan_check_ms = ms + 2500UL; - } - #endif + TERN_(HAS_FAN_LOGIC, manage_extruder_fans(ms)); if (heating && current_temp > target && ELAPSED(ms, t2 + 5000UL)) { heating = false; @@ -853,6 +849,7 @@ int16_t Temperature::getHeaterPower(const heater_id_t heater_id) { #define _EFANOVERLAP(A,B) _FANOVERLAP(E##A,B) #if HAS_AUTO_FAN + #if EXTRUDER_AUTO_FAN_SPEED != 255 #define INIT_E_AUTO_FAN_PIN(P) do{ if (P == FAN1_PIN || P == FAN2_PIN) { SET_PWM(P); SET_FAST_PWM_FREQ(P); } else SET_OUTPUT(P); }while(0) #else @@ -866,7 +863,7 @@ int16_t Temperature::getHeaterPower(const heater_id_t heater_id) { #define CHAMBER_FAN_INDEX HOTENDS - void Temperature::checkExtruderAutoFans() { + void Temperature::update_autofans() { #define _EFAN(B,A) _EFANOVERLAP(A,B) ? B : static const uint8_t fanBit[] PROGMEM = { 0 @@ -914,36 +911,43 @@ int16_t Temperature::getHeaterPower(const heater_id_t heater_id) { break; #endif default: - #if ENABLED(AUTO_POWER_E_FANS) + #if EITHER(AUTO_POWER_E_FANS, HAS_FANCHECK) autofan_speed[realFan] = fan_on ? EXTRUDER_AUTO_FAN_SPEED : 0; #endif break; } + #if BOTH(HAS_FANCHECK, HAS_PWMFANCHECK) + #define _AUTOFAN_SPEED() fan_check.is_measuring() ? 255 : EXTRUDER_AUTO_FAN_SPEED + #else + #define _AUTOFAN_SPEED() 255 + #endif + #define _AUTOFAN_CASE(N) case N: _UPDATE_AUTO_FAN(E##N, fan_on, _AUTOFAN_SPEED()); break + switch (f) { #if HAS_AUTO_FAN_0 - case 0: _UPDATE_AUTO_FAN(E0, fan_on, EXTRUDER_AUTO_FAN_SPEED); break; + _AUTOFAN_CASE(0); #endif #if HAS_AUTO_FAN_1 - case 1: _UPDATE_AUTO_FAN(E1, fan_on, EXTRUDER_AUTO_FAN_SPEED); break; + _AUTOFAN_CASE(1); #endif #if HAS_AUTO_FAN_2 - case 2: _UPDATE_AUTO_FAN(E2, fan_on, EXTRUDER_AUTO_FAN_SPEED); break; + _AUTOFAN_CASE(2); #endif #if HAS_AUTO_FAN_3 - case 3: _UPDATE_AUTO_FAN(E3, fan_on, EXTRUDER_AUTO_FAN_SPEED); break; + _AUTOFAN_CASE(3); #endif #if HAS_AUTO_FAN_4 - case 4: _UPDATE_AUTO_FAN(E4, fan_on, EXTRUDER_AUTO_FAN_SPEED); break; + _AUTOFAN_CASE(4); #endif #if HAS_AUTO_FAN_5 - case 5: _UPDATE_AUTO_FAN(E5, fan_on, EXTRUDER_AUTO_FAN_SPEED); break; + _AUTOFAN_CASE(5); #endif #if HAS_AUTO_FAN_6 - case 6: _UPDATE_AUTO_FAN(E6, fan_on, EXTRUDER_AUTO_FAN_SPEED); break; + _AUTOFAN_CASE(6); #endif #if HAS_AUTO_FAN_7 - case 7: _UPDATE_AUTO_FAN(E7, fan_on, EXTRUDER_AUTO_FAN_SPEED); break; + _AUTOFAN_CASE(7); #endif #if HAS_AUTO_CHAMBER_FAN && !AUTO_CHAMBER_IS_E case CHAMBER_FAN_INDEX: _UPDATE_AUTO_FAN(CHAMBER, fan_on, CHAMBER_AUTO_FAN_SPEED); break; @@ -1367,20 +1371,14 @@ void Temperature::manage_heater() { _temp_error((heater_id_t)HEATER_ID(TEMP_SENSOR_REDUNDANT_TARGET), F(STR_REDUNDANCY), GET_TEXT_F(MSG_ERR_REDUNDANT_TEMP)); #endif - #if HAS_AUTO_FAN - if (ELAPSED(ms, next_auto_fan_check_ms)) { // only need to check fan state very infrequently - checkExtruderAutoFans(); - next_auto_fan_check_ms = ms + 2500UL; - } - #endif + // Manage extruder auto fans and/or read fan tachometers + TERN_(HAS_FAN_LOGIC, manage_extruder_fans(ms)); - #if ENABLED(FILAMENT_WIDTH_SENSOR) - /** - * Dynamically set the volumetric multiplier based - * on the delayed Filament Width measurement. - */ - filwidth.update_volumetric(); - #endif + /** + * Dynamically set the volumetric multiplier based + * on the delayed Filament Width measurement. + */ + TERN_(FILAMENT_WIDTH_SENSOR, filwidth.update_volumetric()); #if HAS_HEATED_BED @@ -3501,6 +3499,9 @@ void Temperature::isr() { babystep.task(); #endif + // Check fan tachometers + TERN_(HAS_FANCHECK, fan_check.update_tachometers()); + // Poll endstops state, if required endstops.poll(); diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index 050b3379e9..0e4302938e 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -37,6 +37,10 @@ #include "../libs/autoreport.h" #endif +#if HAS_FANCHECK + #include "../feature/fancheck.h" +#endif + #ifndef SOFT_PWM_SCALE #define SOFT_PWM_SCALE 0 #endif @@ -344,6 +348,10 @@ typedef struct { int16_t raw_min, raw_max; celsius_t mintemp, maxtemp; } temp_ra #endif +#if HAS_AUTO_FAN || HAS_FANCHECK + #define HAS_FAN_LOGIC 1 +#endif + class Temperature { public: @@ -372,7 +380,7 @@ class Temperature { static redundant_info_t temp_redundant; #endif - #if ENABLED(AUTO_POWER_E_FANS) + #if EITHER(AUTO_POWER_E_FANS, HAS_FANCHECK) static uint8_t autofan_speed[HOTENDS]; #endif #if ENABLED(AUTO_POWER_CHAMBER_FAN) @@ -459,6 +467,10 @@ class Temperature { static int16_t lpq_len; #endif + #if HAS_FAN_LOGIC + static constexpr millis_t fan_update_interval_ms = TERN(HAS_PWMFANCHECK, 5000, TERN(HAS_FANCHECK, 1000, 2500)); + #endif + private: #if ENABLED(WATCH_HOTENDS) @@ -510,8 +522,28 @@ class Temperature { static millis_t preheat_end_time[HOTENDS]; #endif - #if HAS_AUTO_FAN - static millis_t next_auto_fan_check_ms; + #if HAS_FAN_LOGIC + static millis_t fan_update_ms; + + static inline void manage_extruder_fans(millis_t ms) { + if (ELAPSED(ms, fan_update_ms)) { // only need to check fan state very infrequently + const millis_t next_ms = ms + fan_update_interval_ms; + #if HAS_PWMFANCHECK + #define FAN_CHECK_DURATION 100 + if (fan_check.is_measuring()) { + fan_check.compute_speed(ms + FAN_CHECK_DURATION - fan_update_ms); + fan_update_ms = next_ms; + } + else + fan_update_ms = ms + FAN_CHECK_DURATION; + fan_check.toggle_measuring(); + #else + TERN_(HAS_FANCHECK, fan_check.compute_speed(next_ms - fan_update_ms)); + fan_update_ms = next_ms; + #endif + TERN_(HAS_AUTO_FAN, update_autofans()); // Needed as last when HAS_PWMFANCHECK to properly force fan speed + } + } #endif #if ENABLED(PROBING_HEATERS_OFF) @@ -961,7 +993,7 @@ class Temperature { static int16_t read_max_tc(TERN_(HAS_MULTI_MAX_TC, const uint8_t hindex=0)); #endif - static void checkExtruderAutoFans(); + static void update_autofans(); #if HAS_HOTEND static float get_pid_output_hotend(const uint8_t e); diff --git a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h index 7b99352ef4..602c8b0548 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h @@ -188,6 +188,14 @@ #endif #endif +#ifndef E0_FAN_TACHO_PIN + #ifdef MK3_FAN_PINS + #define E0_FAN_TACHO_PIN PE0 // Fan1 + #else + #define E0_FAN_TACHO_PIN PE1 // Fan0 + #endif +#endif + /** * -----------------------------------BTT002 V1.0---------------------------------------- * ------ ------ | diff --git a/ini/features.ini b/ini/features.ini index 4c14651298..606370e07a 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -107,6 +107,7 @@ CANCEL_OBJECTS = src_filter=+ + EXTERNAL_CLOSED_LOOP_CONTROLLER = src_filter=+ + USE_CONTROLLER_FAN = src_filter=+ +HAS_COOLER|LASER_COOLANT_FLOW_METER = src_filter=+ HAS_MOTOR_CURRENT_DAC = src_filter=+ DIRECT_STEPPING = src_filter=+ + EMERGENCY_PARSER = src_filter=+ - @@ -114,6 +115,7 @@ I2C_POSITION_ENCODERS = src_filter=+ HAS_SPI_FLASH = src_filter=+ HAS_ETHERNET = src_filter=+ + +HAS_FANCHECK = src_filter=+ + HAS_FANMUX = src_filter=+ FILAMENT_WIDTH_SENSOR = src_filter=+ + FWRETRACT = src_filter=+ + @@ -211,7 +213,6 @@ GCODE_REPEAT_MARKERS = src_filter=+ +< HAS_EXTRUDERS = src_filter=+ + + HAS_TEMP_PROBE = src_filter=+ HAS_COOLER = src_filter=+ -HAS_COOLER|LASER_COOLANT_FLOW_METER = src_filter=+ AUTO_REPORT_TEMPERATURES = src_filter=+ INCH_MODE_SUPPORT = src_filter=+ TEMPERATURE_UNITS_SUPPORT = src_filter=+ diff --git a/platformio.ini b/platformio.ini index a364e8920f..0be12fb6ae 100644 --- a/platformio.ini +++ b/platformio.ini @@ -111,6 +111,7 @@ default_src_filter = + - - + - - - - + - - - - - - @@ -228,6 +229,7 @@ default_src_filter = + - - + - - - + - - - - From 5387ceba74862788d27b62f8624a2c697fe233ee Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Tue, 23 Nov 2021 14:05:50 -0600 Subject: [PATCH 156/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20STM32=20set=5Fpwm?= =?UTF-8?q?=5Fduty=20(#23125)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/STM32/MarlinSPI.cpp | 11 +-- Marlin/src/HAL/STM32/fast_pwm.cpp | 74 +++++++++++++++------ Marlin/src/HAL/STM32/tft/tft_spi.cpp | 12 ++-- Marlin/src/HAL/STM32F1/HAL.h | 6 +- Marlin/src/HAL/STM32F1/fast_pwm.cpp | 50 +++++++------- Marlin/src/lcd/extui/mks_ui/wifi_module.cpp | 2 +- Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h | 1 - 7 files changed, 96 insertions(+), 60 deletions(-) diff --git a/Marlin/src/HAL/STM32/MarlinSPI.cpp b/Marlin/src/HAL/STM32/MarlinSPI.cpp index 7078d210dc..f7c603d77e 100644 --- a/Marlin/src/HAL/STM32/MarlinSPI.cpp +++ b/Marlin/src/HAL/STM32/MarlinSPI.cpp @@ -114,16 +114,19 @@ byte MarlinSPI::transfer(uint8_t _data) { return rxData; } +__STATIC_INLINE void LL_SPI_EnableDMAReq_RX(SPI_TypeDef *SPIx) { SET_BIT(SPIx->CR2, SPI_CR2_RXDMAEN); } +__STATIC_INLINE void LL_SPI_EnableDMAReq_TX(SPI_TypeDef *SPIx) { SET_BIT(SPIx->CR2, SPI_CR2_TXDMAEN); } + uint8_t MarlinSPI::dmaTransfer(const void *transmitBuf, void *receiveBuf, uint16_t length) { const uint8_t ff = 0xFF; - //if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) //only enable if disabled + //if (!LL_SPI_IsEnabled(_spi.handle)) // only enable if disabled __HAL_SPI_ENABLE(&_spi.handle); if (receiveBuf) { setupDma(_spi.handle, _dmaRx, DMA_PERIPH_TO_MEMORY, true); HAL_DMA_Start(&_dmaRx, (uint32_t)&(_spi.handle.Instance->DR), (uint32_t)receiveBuf, length); - SET_BIT(_spi.handle.Instance->CR2, SPI_CR2_RXDMAEN); /* Enable Rx DMA Request */ + LL_SPI_EnableDMAReq_RX(_spi.handle.Instance); // Enable Rx DMA Request } // check for 2 lines transfer @@ -136,7 +139,7 @@ uint8_t MarlinSPI::dmaTransfer(const void *transmitBuf, void *receiveBuf, uint16 if (transmitBuf) { setupDma(_spi.handle, _dmaTx, DMA_MEMORY_TO_PERIPH, mincTransmit); HAL_DMA_Start(&_dmaTx, (uint32_t)transmitBuf, (uint32_t)&(_spi.handle.Instance->DR), length); - SET_BIT(_spi.handle.Instance->CR2, SPI_CR2_TXDMAEN); /* Enable Tx DMA Request */ + LL_SPI_EnableDMAReq_TX(_spi.handle.Instance); // Enable Tx DMA Request } if (transmitBuf) { @@ -160,7 +163,7 @@ uint8_t MarlinSPI::dmaSend(const void * transmitBuf, uint16_t length, bool minc) setupDma(_spi.handle, _dmaTx, DMA_MEMORY_TO_PERIPH, minc); HAL_DMA_Start(&_dmaTx, (uint32_t)transmitBuf, (uint32_t)&(_spi.handle.Instance->DR), length); __HAL_SPI_ENABLE(&_spi.handle); - SET_BIT(_spi.handle.Instance->CR2, SPI_CR2_TXDMAEN); /* Enable Tx DMA Request */ + LL_SPI_EnableDMAReq_TX(_spi.handle.Instance); // Enable Tx DMA Request HAL_DMA_PollForTransfer(&_dmaTx, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY); HAL_DMA_Abort(&_dmaTx); // DeInit objects diff --git a/Marlin/src/HAL/STM32/fast_pwm.cpp b/Marlin/src/HAL/STM32/fast_pwm.cpp index 4d450374d3..4986e138a1 100644 --- a/Marlin/src/HAL/STM32/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32/fast_pwm.cpp @@ -27,37 +27,67 @@ #include "../../inc/MarlinConfig.h" #include "timers.h" -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { - if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer +// Array to support sticky frequency sets per timer +static uint16_t timer_freq[TIMER_NUM]; +void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { + if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer + bool needs_freq; PinName pin_name = digitalPinToPinName(pin); TIM_TypeDef *Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); + HardwareTimer *HT; + TimerModes_t previousMode; - uint16_t adj_val = Instance->ARR * v / v_size; - if (invert) adj_val = Instance->ARR - adj_val; - switch (get_pwm_channel(pin_name)) { - case TIM_CHANNEL_1: LL_TIM_OC_SetCompareCH1(Instance, adj_val); break; - case TIM_CHANNEL_2: LL_TIM_OC_SetCompareCH2(Instance, adj_val); break; - case TIM_CHANNEL_3: LL_TIM_OC_SetCompareCH3(Instance, adj_val); break; - case TIM_CHANNEL_4: LL_TIM_OC_SetCompareCH4(Instance, adj_val); break; + uint16_t value = v; + if (invert) value = v_size - value; + + uint32_t index = get_timer_index(Instance); + + if (HardwareTimer_Handle[index] == nullptr) { + HardwareTimer_Handle[index]->__this = new HardwareTimer((TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM)); + needs_freq = true; // The instance must be new set the default frequency of PWM_FREQUENCY } + + HT = (HardwareTimer *)(HardwareTimer_Handle[index]->__this); + uint32_t channel = STM_PIN_CHANNEL(pinmap_function(pin_name, PinMap_PWM)); + previousMode = HT->getMode(channel); + + if (previousMode != TIMER_OUTPUT_COMPARE_PWM1) + HT->setMode(channel, TIMER_OUTPUT_COMPARE_PWM1, pin); + + if (needs_freq) { + if (timer_freq[index] == 0 ) { // If the timer is unconfigured and no freq is set then default PWM_FREQUENCY. + timer_freq[index] = PWM_FREQUENCY; + set_pwm_frequency(pin_name, timer_freq[index]); // Set the frequency and save the value to the assigned index no. + } + } + // Note the resolution is sticky here, the input can be upto 16 bits and that would require RESOLUTION_16B_COMPARE_FORMAT (16) + // If such a need were to manifest then we would need to calc the resolution based on the v_size parameter and add code for it. + HT->setCaptureCompare(channel, value, RESOLUTION_8B_COMPARE_FORMAT); // Sets the duty, the calc is done in the library :) + pinmap_pinout(pin_name, PinMap_PWM); // Make sure the pin output state is set. + if (previousMode != TIMER_OUTPUT_COMPARE_PWM1) HT->resume(); } -#if NEEDS_HARDWARE_PWM +void set_pwm_frequency(const pin_t pin, int f_desired) { + if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer + HardwareTimer *HT; + PinName pin_name = digitalPinToPinName(pin); + TIM_TypeDef *Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance - void set_pwm_frequency(const pin_t pin, int f_desired) { - if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer + uint32_t index = get_timer_index(Instance); - PinName pin_name = digitalPinToPinName(pin); - TIM_TypeDef *Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance + // Protect used timers + if (index == TEMP_TIMER_NUM || index == STEP_TIMER_NUM + #if PULSE_TIMER_NUM != STEP_TIMER_NUM + || index == PULSE_TIMER_NUM + #endif + ) return; - LOOP_S_L_N(i, 0, NUM_HARDWARE_TIMERS) // Protect used timers - if (timer_instance[i] && timer_instance[i]->getHandle()->Instance == Instance) - return; - - pwm_start(pin_name, f_desired, 0, RESOLUTION_8B_COMPARE_FORMAT); - } - -#endif + if (HardwareTimer_Handle[index] == nullptr) // If frequency is set before duty we need to create a handle here. + HardwareTimer_Handle[index]->__this = new HardwareTimer((TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM)); + HT = (HardwareTimer *)(HardwareTimer_Handle[index]->__this); + timer_freq[index] = f_desired; // Save the last frequency so duty will not set the default for this timer number. + HT->setOverflow(f_desired, HERTZ_FORMAT); +} #endif // HAL_STM32 diff --git a/Marlin/src/HAL/STM32/tft/tft_spi.cpp b/Marlin/src/HAL/STM32/tft/tft_spi.cpp index 790513e7ed..4ad35cee8b 100644 --- a/Marlin/src/HAL/STM32/tft/tft_spi.cpp +++ b/Marlin/src/HAL/STM32/tft/tft_spi.cpp @@ -161,11 +161,11 @@ uint32_t TFT_SPI::ReadID(uint16_t Reg) { for (i = 0; i < 4; i++) { #if TFT_MISO_PIN != TFT_MOSI_PIN //if (hspi->Init.Direction == SPI_DIRECTION_2LINES) { - while ((SPIx.Instance->SR & SPI_FLAG_TXE) != SPI_FLAG_TXE) {} + while (!__HAL_SPI_GET_FLAG(&SPIx, SPI_FLAG_TXE)) {} SPIx.Instance->DR = 0; //} #endif - while ((SPIx.Instance->SR & SPI_FLAG_RXNE) != SPI_FLAG_RXNE) {} + while (!__HAL_SPI_GET_FLAG(&SPIx, SPI_FLAG_RXNE)) {} Data = (Data << 8) | SPIx.Instance->DR; } @@ -195,8 +195,8 @@ bool TFT_SPI::isBusy() { void TFT_SPI::Abort() { // Wait for any running spi - while ((SPIx.Instance->SR & SPI_FLAG_TXE) != SPI_FLAG_TXE) {} - while ((SPIx.Instance->SR & SPI_FLAG_BSY) == SPI_FLAG_BSY) {} + while (!__HAL_SPI_GET_FLAG(&SPIx, SPI_FLAG_TXE)) {} + while ( __HAL_SPI_GET_FLAG(&SPIx, SPI_FLAG_BSY)) {} // First, abort any running dma HAL_DMA_Abort(&DMAtx); // DeInit objects @@ -214,8 +214,8 @@ void TFT_SPI::Transmit(uint16_t Data) { SPIx.Instance->DR = Data; - while ((SPIx.Instance->SR & SPI_FLAG_TXE) != SPI_FLAG_TXE) {} - while ((SPIx.Instance->SR & SPI_FLAG_BSY) == SPI_FLAG_BSY) {} + while (!__HAL_SPI_GET_FLAG(&SPIx, SPI_FLAG_TXE)) {} + while ( __HAL_SPI_GET_FLAG(&SPIx, SPI_FLAG_BSY)) {} if (TFT_MISO_PIN != TFT_MOSI_PIN) __HAL_SPI_CLEAR_OVRFLAG(&SPIx); // Clear overrun flag in 2 Lines communication mode because received is not read diff --git a/Marlin/src/HAL/STM32F1/HAL.h b/Marlin/src/HAL/STM32F1/HAL.h index 3bdfb9703c..026e83bc0d 100644 --- a/Marlin/src/HAL/STM32F1/HAL.h +++ b/Marlin/src/HAL/STM32F1/HAL.h @@ -264,7 +264,10 @@ void analogWrite(pin_t pin, int pwm_val8); // PWM only! mul by 257 in maple!? #define PLATFORM_M997_SUPPORT void flashFirmware(const int16_t); -#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment +#ifndef PWM_FREQUENCY + #define PWM_FREQUENCY 1000 // Default PWM Frequency +#endif +#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment /** * set_pwm_frequency @@ -278,5 +281,6 @@ void set_pwm_frequency(const pin_t pin, int f_desired); * Set the PWM duty cycle of the provided pin to the provided value * Optionally allows inverting the duty cycle [default = false] * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] + * The timer must be pre-configured with set_pwm_frequency() if the default frequency is not desired. */ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); diff --git a/Marlin/src/HAL/STM32F1/fast_pwm.cpp b/Marlin/src/HAL/STM32F1/fast_pwm.cpp index 5171c11545..b510a4c8a0 100644 --- a/Marlin/src/HAL/STM32F1/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32F1/fast_pwm.cpp @@ -30,40 +30,40 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { if (!PWM_PIN(pin)) return; timer_dev *timer = PIN_MAP[pin].timer_device; + if (!(timer->regs.bas->SR & TIMER_CR1_CEN)) // Ensure the timer is enabled + set_pwm_frequency(pin, PWM_FREQUENCY); uint16_t max_val = timer->regs.bas->ARR * v / v_size; if (invert) max_val = v_size - max_val; pwmWrite(pin, max_val); + } -#if NEEDS_HARDWARE_PWM +void set_pwm_frequency(const pin_t pin, int f_desired) { + if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer - void set_pwm_frequency(const pin_t pin, int f_desired) { - if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer + timer_dev *timer = PIN_MAP[pin].timer_device; + uint8_t channel = PIN_MAP[pin].timer_channel; - timer_dev *timer = PIN_MAP[pin].timer_device; - uint8_t channel = PIN_MAP[pin].timer_channel; + // Protect used timers + if (timer == get_timer_dev(TEMP_TIMER_NUM)) return; + if (timer == get_timer_dev(STEP_TIMER_NUM)) return; + #if PULSE_TIMER_NUM != STEP_TIMER_NUM + if (timer == get_timer_dev(PULSE_TIMER_NUM)) return; + #endif - // Protect used timers - if (timer == get_timer_dev(TEMP_TIMER_NUM)) return; - if (timer == get_timer_dev(STEP_TIMER_NUM)) return; - #if PULSE_TIMER_NUM != STEP_TIMER_NUM - if (timer == get_timer_dev(PULSE_TIMER_NUM)) return; - #endif + if (!(timer->regs.bas->SR & TIMER_CR1_CEN)) // Ensure the timer is enabled + timer_init(timer); - if (!(timer->regs.bas->SR & TIMER_CR1_CEN)) // Ensure the timer is enabled - timer_init(timer); - - timer_set_mode(timer, channel, TIMER_PWM); - uint16_t preload = 255; // Lock 255 PWM resolution for high frequencies - int32_t prescaler = (HAL_TIMER_RATE) / (preload + 1) / f_desired - 1; - if (prescaler > 65535) { // For low frequencies increase prescaler - prescaler = 65535; - preload = (HAL_TIMER_RATE) / (prescaler + 1) / f_desired - 1; - } - if (prescaler < 0) return; // Too high frequency - timer_set_reload(timer, preload); - timer_set_prescaler(timer, prescaler); + timer_set_mode(timer, channel, TIMER_PWM); + uint16_t preload = 255; // Lock 255 PWM resolution for high frequencies + int32_t prescaler = (HAL_TIMER_RATE) / (preload + 1) / f_desired - 1; + if (prescaler > 65535) { // For low frequencies increase prescaler + prescaler = 65535; + preload = (HAL_TIMER_RATE) / (prescaler + 1) / f_desired - 1; } + if (prescaler < 0) return; // Too high frequency + timer_set_reload(timer, preload); + timer_set_prescaler(timer, prescaler); +} -#endif // NEEDS_HARDWARE_PWM #endif // __STM32F1__ diff --git a/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp b/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp index f56d68366c..cc8458ce43 100644 --- a/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp +++ b/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp @@ -345,7 +345,7 @@ static bool longName2DosName(const char *longName, char *dosName) { hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex); SET_BIT(hdma->ErrorCode, HAL_DMA_ERROR_TE); // Update error code - hdma->State= HAL_DMA_STATE_READY; // Change the DMA state + hdma->State = HAL_DMA_STATE_READY; // Change the DMA state __HAL_UNLOCK(hdma); // Process Unlocked return HAL_ERROR; } diff --git a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h index 3a8019a27e..c6f1e014e0 100644 --- a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h +++ b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h @@ -96,7 +96,6 @@ #else #define FAST_PWM_FAN // STM32 Variant allow TIMER2 Hardware PWM #define FAST_PWM_FAN_FREQUENCY 31400 // This frequency allow a good range, fan starts at 3%, half noise at 50% - #define NEEDS_HARDWARE_PWM 1 #define FAN_MIN_PWM 5 #define FAN_MAX_PWM 255 #endif From de398b4fd2f96349e73d63512021a3fca800712d Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Wed, 24 Nov 2021 04:19:32 +0700 Subject: [PATCH 157/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20serial=5Fdata=5Fav?= =?UTF-8?q?ailable=20(#23160)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/queue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/gcode/queue.cpp b/Marlin/src/gcode/queue.cpp index fd98a39cd6..cc52a3bb9e 100644 --- a/Marlin/src/gcode/queue.cpp +++ b/Marlin/src/gcode/queue.cpp @@ -281,7 +281,7 @@ void GCodeQueue::flush_and_request_resend(const serial_index_t serial_ind) { static bool serial_data_available(serial_index_t index) { const int a = SERIAL_IMPL.available(index); - #if BOTH(RX_BUFFER_MONITOR, RX_BUFFER_SIZE) + #if ENABLED(RX_BUFFER_MONITOR) && RX_BUFFER_SIZE if (a > RX_BUFFER_SIZE - 2) { PORT_REDIRECT(SERIAL_PORTMASK(index)); SERIAL_ERROR_MSG("RX BUF overflow, increase RX_BUFFER_SIZE: ", a); From e5154ec28179c7dc7b58a830412e7cb09c2f878c Mon Sep 17 00:00:00 2001 From: John Robertson Date: Tue, 23 Nov 2021 21:24:24 +0000 Subject: [PATCH 158/532] =?UTF-8?q?=E2=9C=A8=20MarkForged=20YX=20kinematic?= =?UTF-8?q?s=20(#23163)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration.h | 1 + Marlin/src/core/types.h | 2 +- Marlin/src/core/utility.cpp | 3 +- Marlin/src/feature/backlash.cpp | 2 +- Marlin/src/gcode/host/M360.cpp | 3 +- Marlin/src/inc/Conditionals_LCD.h | 2 +- Marlin/src/inc/Conditionals_post.h | 2 +- Marlin/src/inc/SanityCheck.h | 16 ++-- Marlin/src/lcd/menu/menu_backlash.cpp | 2 +- Marlin/src/module/endstops.cpp | 10 +-- Marlin/src/module/motion.cpp | 12 +-- Marlin/src/module/planner.cpp | 101 ++++++++++++++------------ Marlin/src/module/stepper.cpp | 14 +++- 13 files changed, 93 insertions(+), 77 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 28040bf1c7..060c07bbbc 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -756,6 +756,7 @@ //#define COREZX //#define COREZY //#define MARKFORGED_XY // MarkForged. See https://reprap.org/forum/read.php?152,504042 +//#define MARKFORGED_YX // Enable for a belt style printer with endless "Z" motion //#define BELTPRINTER diff --git a/Marlin/src/core/types.h b/Marlin/src/core/types.h index 72099fb408..9a5b64c22e 100644 --- a/Marlin/src/core/types.h +++ b/Marlin/src/core/types.h @@ -82,7 +82,7 @@ enum AxisEnum : uint8_t { #undef _EN_ITEM // Core also keeps toolhead directions - #if EITHER(IS_CORE, MARKFORGED_XY) + #if ANY(IS_CORE, MARKFORGED_XY, MARKFORGED_YX) , X_HEAD, Y_HEAD, Z_HEAD #endif diff --git a/Marlin/src/core/utility.cpp b/Marlin/src/core/utility.cpp index b70e2fa9a9..cc3b1ace2f 100644 --- a/Marlin/src/core/utility.cpp +++ b/Marlin/src/core/utility.cpp @@ -60,7 +60,8 @@ void safe_delay(millis_t ms) { TERN_(DELTA, "Delta") TERN_(IS_SCARA, "SCARA") TERN_(IS_CORE, "Core") - TERN_(MARKFORGED_XY, "MarkForged") + TERN_(MARKFORGED_XY, "MarkForgedXY") + TERN_(MARKFORGED_YX, "MarkForgedYX") TERN_(IS_CARTESIAN, "Cartesian") ); diff --git a/Marlin/src/feature/backlash.cpp b/Marlin/src/feature/backlash.cpp index b646e19f15..24c0f2ca0c 100644 --- a/Marlin/src/feature/backlash.cpp +++ b/Marlin/src/feature/backlash.cpp @@ -64,7 +64,7 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const static axis_bits_t last_direction_bits; axis_bits_t changed_dir = last_direction_bits ^ dm; // Ignore direction change unless steps are taken in that direction - #if DISABLED(CORE_BACKLASH) || ENABLED(MARKFORGED_XY) + #if DISABLED(CORE_BACKLASH) || EITHER(MARKFORGED_XY, MARKFORGED_YX) if (!da) CBI(changed_dir, X_AXIS); if (!db) CBI(changed_dir, Y_AXIS); if (!dc) CBI(changed_dir, Z_AXIS); diff --git a/Marlin/src/gcode/host/M360.cpp b/Marlin/src/gcode/host/M360.cpp index b1b558b033..1feb57996a 100644 --- a/Marlin/src/gcode/host/M360.cpp +++ b/Marlin/src/gcode/host/M360.cpp @@ -162,7 +162,8 @@ void GcodeSuite::M360() { TERN_(DELTA, "Delta") TERN_(IS_SCARA, "SCARA") TERN_(IS_CORE, "Core") - TERN_(MARKFORGED_XY, "MarkForged") + TERN_(MARKFORGED_XY, "MarkForgedXY") + TERN_(MARKFORGED_YX, "MarkForgedYX") TERN_(IS_CARTESIAN, "Cartesian") ); diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index 7d8b50f7be..9e050101aa 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -1079,7 +1079,7 @@ #define CORE_AXIS_2 C_AXIS #endif #define CORESIGN(n) (ANY(COREYX, COREZX, COREZY) ? (-(n)) : (n)) -#elif ENABLED(MARKFORGED_XY) +#elif EITHER(MARKFORGED_XY, MARKFORGED_YX) // Markforged kinematics #define CORE_AXIS_1 A_AXIS #define CORE_AXIS_2 B_AXIS diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index d0b5aff5dd..971318518d 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -193,7 +193,7 @@ // Calibration codes only for non-core axes #if EITHER(BACKLASH_GCODE, CALIBRATION_GCODE) - #if EITHER(IS_CORE, MARKFORGED_XY) + #if ANY(IS_CORE, MARKFORGED_XY, MARKFORGED_YX) #define CAN_CALIBRATE(A,B) (_AXIS(A) == B) #else #define CAN_CALIBRATE(A,B) true diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 193750ef26..39a154cb53 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -914,7 +914,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #if ENABLED(BABYSTEPPING) #if ENABLED(SCARA) #error "BABYSTEPPING is not implemented for SCARA yet." - #elif BOTH(MARKFORGED_XY, BABYSTEP_XY) + #elif ENABLED(BABYSTEP_XY) && EITHER(MARKFORGED_XY, MARKFORGED_YX) #error "BABYSTEPPING only implemented for Z axis on MarkForged." #elif BOTH(DELTA, BABYSTEP_XY) #error "BABYSTEPPING only implemented for Z axis on deltabots." @@ -1459,8 +1459,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS /** * Allow only one kinematic type to be defined */ -#if MANY(DELTA, MORGAN_SCARA, MP_SCARA, AXEL_TPARA, COREXY, COREXZ, COREYZ, COREYX, COREZX, COREZY, MARKFORGED_XY, FOAMCUTTER_XYUV) - #error "Please enable only one of DELTA, MORGAN_SCARA, MP_SCARA, AXEL_TPARA, COREXY, COREXZ, COREYZ, COREYX, COREZX, COREZY, MARKFORGED_XY, or FOAMCUTTER_XYUV." +#if MANY(DELTA, MORGAN_SCARA, MP_SCARA, AXEL_TPARA, COREXY, COREXZ, COREYZ, COREYX, COREZX, COREZY, MARKFORGED_XY, MARKFORGED_YX, FOAMCUTTER_XYUV) + #error "Please enable only one of DELTA, MORGAN_SCARA, MP_SCARA, AXEL_TPARA, COREXY, COREXZ, COREYZ, COREYX, COREZX, COREZY, MARKFORGED_XY, MARKFORGED_YX, or FOAMCUTTER_XYUV." #endif /** @@ -1958,8 +1958,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #if ENABLED(DUAL_X_CARRIAGE) #if EXTRUDERS < 2 #error "DUAL_X_CARRIAGE requires 2 (or more) extruders." - #elif ANY(CORE_IS_XY, CORE_IS_XZ, MARKFORGED_XY) - #error "DUAL_X_CARRIAGE cannot be used with COREXY, COREYX, COREXZ, COREZX, or MARKFORGED_XY." + #elif ANY(CORE_IS_XY, CORE_IS_XZ, MARKFORGED_XY, MARKFORGED_YX) + #error "DUAL_X_CARRIAGE cannot be used with COREXY, COREYX, COREXZ, COREZX, MARKFORGED_YX, or MARKFORGED_XY." #elif !GOOD_AXIS_PINS(X2) #error "DUAL_X_CARRIAGE requires X2 stepper pins to be defined." #elif !HAS_X_MAX @@ -3201,8 +3201,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "CoreXZ requires both X and Z to use sensorless homing if either one does." #elif CORE_IS_YZ && Y_SENSORLESS != Z_SENSORLESS && !HOMING_Z_WITH_PROBE #error "CoreYZ requires both Y and Z to use sensorless homing if either one does." -#elif ENABLED(MARKFORGED_XY) && X_SENSORLESS != Y_SENSORLESS - #error "MARKFORGED_XY requires both X and Y to use sensorless homing if either one does." +#elif EITHER(MARKFORGED_XY, MARKFORGED_YX) && X_SENSORLESS != Y_SENSORLESS + #error "MARKFORGED requires both X and Y to use sensorless homing if either one does." #endif // Other TMC feature requirements @@ -3462,7 +3462,7 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #error "BACKLASH_COMPENSATION requires BACKLASH_DISTANCE_MM." #elif !defined(BACKLASH_CORRECTION) #error "BACKLASH_COMPENSATION requires BACKLASH_CORRECTION." - #elif ENABLED(MARKFORGED_XY) + #elif EITHER(MARKFORGED_XY, MARKFORGED_YX) constexpr float backlash_arr[] = BACKLASH_DISTANCE_MM; static_assert(!backlash_arr[CORE_AXIS_1] && !backlash_arr[CORE_AXIS_2], "BACKLASH_COMPENSATION can only apply to " STRINGIFY(NORMAL_AXIS) " on a MarkForged system."); diff --git a/Marlin/src/lcd/menu/menu_backlash.cpp b/Marlin/src/lcd/menu/menu_backlash.cpp index b9adacc502..ad276e11c0 100644 --- a/Marlin/src/lcd/menu/menu_backlash.cpp +++ b/Marlin/src/lcd/menu/menu_backlash.cpp @@ -38,7 +38,7 @@ void menu_backlash() { EDIT_ITEM_FAST(percent, MSG_BACKLASH_CORRECTION, &backlash.correction, all_off, all_on); - #if DISABLED(CORE_BACKLASH) || ENABLED(MARKFORGED_XY) + #if DISABLED(CORE_BACKLASH) || EITHER(MARKFORGED_XY, MARKFORGED_YX) #define _CAN_CALI AXIS_CAN_CALIBRATE #else #define _CAN_CALI(A) true diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index aa5907477e..06cbb839cd 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -617,7 +617,7 @@ void Endstops::update() { #define UPDATE_ENDSTOP_BIT(AXIS, MINMAX) SET_BIT_TO(live_state, _ENDSTOP(AXIS, MINMAX), (READ(_ENDSTOP_PIN(AXIS, MINMAX)) != _ENDSTOP_INVERTING(AXIS, MINMAX))) #define COPY_LIVE_STATE(SRC_BIT, DST_BIT) SET_BIT_TO(live_state, DST_BIT, TEST(live_state, SRC_BIT)) - #if ENABLED(G38_PROBE_TARGET) && NONE(CORE_IS_XY, CORE_IS_XZ, MARKFORGED_XY) + #if ENABLED(G38_PROBE_TARGET) && NONE(CORE_IS_XY, CORE_IS_XZ, MARKFORGED_XY, MARKFORGED_XY) #define HAS_G38_PROBE 1 // For G38 moves check the probe's pin for ALL movement if (G38_move) UPDATE_ENDSTOP_BIT(Z, TERN(USES_Z_MIN_PROBE_PIN, MIN_PROBE, MIN)); @@ -628,12 +628,12 @@ void Endstops::update() { #define X_MAX_TEST() TERN1(DUAL_X_CARRIAGE, TERN0(X_HOME_TO_MAX, stepper.last_moved_extruder == 0) || TERN0(X2_HOME_TO_MAX, stepper.last_moved_extruder != 0)) // Use HEAD for core axes, AXIS for others - #if ANY(CORE_IS_XY, CORE_IS_XZ, MARKFORGED_XY) + #if ANY(CORE_IS_XY, CORE_IS_XZ, MARKFORGED_XY, MARKFORGED_XY) #define X_AXIS_HEAD X_HEAD #else #define X_AXIS_HEAD X_AXIS #endif - #if ANY(CORE_IS_XY, CORE_IS_YZ, MARKFORGED_XY) + #if ANY(CORE_IS_XY, CORE_IS_YZ, MARKFORGED_XY, MARKFORGED_YX) #define Y_AXIS_HEAD Y_HEAD #else #define Y_AXIS_HEAD Y_AXIS @@ -1111,7 +1111,7 @@ 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) && Y_SPI_SENSORLESS + #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) && Y_SPI_SENSORLESS || stepperY.test_stall_status() #elif CORE_IS_XZ && Z_SPI_SENSORLESS || stepperZ.test_stall_status() @@ -1123,7 +1123,7 @@ void Endstops::update() { #endif #if Y_SPI_SENSORLESS if (tmc_spi_homing.y && (stepperY.test_stall_status() - #if ANY(CORE_IS_XY, MARKFORGED_XY) && X_SPI_SENSORLESS + #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) && X_SPI_SENSORLESS || stepperX.test_stall_status() #elif CORE_IS_YZ && Z_SPI_SENSORLESS || stepperZ.test_stall_status() diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 71239501fd..9ff668bf30 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -1367,7 +1367,7 @@ void prepare_line_to_destination() { #if AXIS_HAS_STALLGUARD(X2) stealth_states.x2 = tmc_enable_stallguard(stepperX2); #endif - #if EITHER(CORE_IS_XY, MARKFORGED_XY) && Y_SENSORLESS + #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) && Y_SENSORLESS stealth_states.y = tmc_enable_stallguard(stepperY); #elif CORE_IS_XZ && Z_SENSORLESS stealth_states.z = tmc_enable_stallguard(stepperZ); @@ -1380,7 +1380,7 @@ void prepare_line_to_destination() { #if AXIS_HAS_STALLGUARD(Y2) stealth_states.y2 = tmc_enable_stallguard(stepperY2); #endif - #if EITHER(CORE_IS_XY, MARKFORGED_XY) && X_SENSORLESS + #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) && X_SENSORLESS stealth_states.x = tmc_enable_stallguard(stepperX); #elif CORE_IS_YZ && Z_SENSORLESS stealth_states.z = tmc_enable_stallguard(stepperZ); @@ -1444,7 +1444,7 @@ void prepare_line_to_destination() { #if AXIS_HAS_STALLGUARD(X2) tmc_disable_stallguard(stepperX2, enable_stealth.x2); #endif - #if EITHER(CORE_IS_XY, MARKFORGED_XY) && Y_SENSORLESS + #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) && Y_SENSORLESS tmc_disable_stallguard(stepperY, enable_stealth.y); #elif CORE_IS_XZ && Z_SENSORLESS tmc_disable_stallguard(stepperZ, enable_stealth.z); @@ -1457,7 +1457,7 @@ void prepare_line_to_destination() { #if AXIS_HAS_STALLGUARD(Y2) tmc_disable_stallguard(stepperY2, enable_stealth.y2); #endif - #if EITHER(CORE_IS_XY, MARKFORGED_XY) && X_SENSORLESS + #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) && X_SENSORLESS tmc_disable_stallguard(stepperX, enable_stealth.x); #elif CORE_IS_YZ && Z_SENSORLESS tmc_disable_stallguard(stepperZ, enable_stealth.z); @@ -2011,7 +2011,7 @@ void prepare_line_to_destination() { do_homing_move(axis, adjDistance, get_homing_bump_feedrate(axis)); } - #else // CARTESIAN / CORE / MARKFORGED_XY + #else // CARTESIAN / CORE / MARKFORGED_XY / MARKFORGED_YX set_axis_is_at_home(axis); sync_plan_position(); @@ -2041,7 +2041,7 @@ void prepare_line_to_destination() { #if ENABLED(SENSORLESS_HOMING) planner.synchronize(); if (false - #if EITHER(IS_CORE, MARKFORGED_XY) + #if ANY(IS_CORE, MARKFORGED_XY, MARKFORGED_YX) || axis != NORMAL_AXIS #endif ) safe_delay(200); // Short delay to allow belts to spring back diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 28364d4be0..cd8729edac 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1745,7 +1745,7 @@ float Planner::get_axis_position_mm(const AxisEnum axis) { else axis_steps = stepper.position(axis); - #elif ENABLED(MARKFORGED_XY) + #elif EITHER(MARKFORGED_XY, MARKFORGED_YX) // Requesting one of the joined axes? if (axis == CORE_AXIS_1 || axis == CORE_AXIS_2) { @@ -1919,30 +1919,43 @@ bool Planner::_populate_block(block_t * const block, bool split_move, // Compute direction bit-mask for this block axis_bits_t dm = 0; - #if CORE_IS_XY - if (da < 0) SBI(dm, X_HEAD); // Save the toolhead's true direction in X - if (db < 0) SBI(dm, Y_HEAD); // ...and Y + #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) + if (da < 0) SBI(dm, X_HEAD); // Save the toolhead's true direction in X + if (db < 0) SBI(dm, Y_HEAD); // ...and Y if (dc < 0) SBI(dm, Z_AXIS); - if (da + db < 0) SBI(dm, A_AXIS); // Motor A direction - if (CORESIGN(da - db) < 0) SBI(dm, B_AXIS); // Motor B direction - #elif CORE_IS_XZ - if (da < 0) SBI(dm, X_HEAD); // Save the toolhead's true direction in X - if (db < 0) SBI(dm, Y_AXIS); - if (dc < 0) SBI(dm, Z_HEAD); // ...and Z - if (da + dc < 0) SBI(dm, A_AXIS); // Motor A direction - if (CORESIGN(da - dc) < 0) SBI(dm, C_AXIS); // Motor C direction - #elif CORE_IS_YZ - if (da < 0) SBI(dm, X_AXIS); - if (db < 0) SBI(dm, Y_HEAD); // Save the toolhead's true direction in Y - if (dc < 0) SBI(dm, Z_HEAD); // ...and Z - if (db + dc < 0) SBI(dm, B_AXIS); // Motor B direction - if (CORESIGN(db - dc) < 0) SBI(dm, C_AXIS); // Motor C direction + #endif + #if IS_CORE + #if CORE_IS_XY + if (da + db < 0) SBI(dm, A_AXIS); // Motor A direction + if (CORESIGN(da - db) < 0) SBI(dm, B_AXIS); // Motor B direction + #elif CORE_IS_XZ + if (da < 0) SBI(dm, X_HEAD); // Save the toolhead's true direction in X + if (db < 0) SBI(dm, Y_AXIS); + if (dc < 0) SBI(dm, Z_HEAD); // ...and Z + if (da + dc < 0) SBI(dm, A_AXIS); // Motor A direction + if (CORESIGN(da - dc) < 0) SBI(dm, C_AXIS); // Motor C direction + #elif CORE_IS_YZ + if (da < 0) SBI(dm, X_AXIS); + if (db < 0) SBI(dm, Y_HEAD); // Save the toolhead's true direction in Y + if (dc < 0) SBI(dm, Z_HEAD); // ...and Z + if (db + dc < 0) SBI(dm, B_AXIS); // Motor B direction + if (CORESIGN(db - dc) < 0) SBI(dm, C_AXIS); // Motor C direction + #endif + #if LINEAR_AXES >= 4 + if (di < 0) SBI(dm, I_AXIS); + #endif + #if LINEAR_AXES >= 5 + if (dj < 0) SBI(dm, J_AXIS); + #endif + #if LINEAR_AXES >= 6 + if (dk < 0) SBI(dm, K_AXIS); + #endif #elif ENABLED(MARKFORGED_XY) - if (da < 0) SBI(dm, X_HEAD); // Save the toolhead's true direction in X - if (db < 0) SBI(dm, Y_HEAD); // ...and Y - if (dc < 0) SBI(dm, Z_AXIS); - if (da + db < 0) SBI(dm, A_AXIS); // Motor A direction - if (db < 0) SBI(dm, B_AXIS); // Motor B direction + if (da + db < 0) SBI(dm, A_AXIS); // Motor A direction + if (db < 0) SBI(dm, B_AXIS); // Motor B direction + #elif ENABLED(MARKFORGED_YX) + if (da < 0) SBI(dm, A_AXIS); // Motor A direction + if (db + da < 0) SBI(dm, B_AXIS); // Motor B direction #else LINEAR_AXIS_CODE( if (da < 0) SBI(dm, X_AXIS), @@ -1954,21 +1967,8 @@ bool Planner::_populate_block(block_t * const block, bool split_move, ); #endif - #if IS_CORE - #if LINEAR_AXES >= 4 - if (di < 0) SBI(dm, I_AXIS); - #endif - #if LINEAR_AXES >= 5 - if (dj < 0) SBI(dm, J_AXIS); - #endif - #if LINEAR_AXES >= 6 - if (dk < 0) SBI(dm, K_AXIS); - #endif - #endif - - TERN_(HAS_EXTRUDERS, if (de < 0) SBI(dm, E_AXIS)); - #if HAS_EXTRUDERS + if (de < 0) SBI(dm, E_AXIS); const float esteps_float = de * e_factor[extruder]; const uint32_t esteps = ABS(esteps_float) + 0.5f; #else @@ -1998,6 +1998,8 @@ bool Planner::_populate_block(block_t * const block, bool split_move, block->steps.set(LINEAR_AXIS_LIST(ABS(da), ABS(db + dc), ABS(db - dc), ABS(di), ABS(dj), ABS(dk))); #elif ENABLED(MARKFORGED_XY) block->steps.set(LINEAR_AXIS_LIST(ABS(da + db), ABS(db), ABS(dc), ABS(di), ABS(dj), ABS(dk))); + #elif ENABLED(MARKFORGED_YX) + block->steps.set(LINEAR_AXIS_LIST(ABS(da), ABS(db + da), ABS(dc), ABS(di), ABS(dj), ABS(dk))); #elif IS_SCARA block->steps.set(LINEAR_AXIS_LIST(ABS(da), ABS(db), ABS(dc), ABS(di), ABS(dj), ABS(dk))); #else @@ -2014,15 +2016,18 @@ bool Planner::_populate_block(block_t * const block, bool split_move, * Having the real displacement of the head, we can calculate the total movement length and apply the desired speed. */ struct DistanceMM : abce_float_t { - #if EITHER(IS_CORE, MARKFORGED_XY) + #if ANY(IS_CORE, MARKFORGED_XY, MARKFORGED_YX) struct { float x, y, z; } head; #endif } steps_dist_mm; + + #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) + steps_dist_mm.head.x = da * mm_per_step[A_AXIS]; + steps_dist_mm.head.y = db * mm_per_step[B_AXIS]; + steps_dist_mm.z = dc * mm_per_step[Z_AXIS]; + #endif #if IS_CORE #if CORE_IS_XY - steps_dist_mm.head.x = da * mm_per_step[A_AXIS]; - steps_dist_mm.head.y = db * mm_per_step[B_AXIS]; - steps_dist_mm.z = dc * mm_per_step[Z_AXIS]; steps_dist_mm.a = (da + db) * mm_per_step[A_AXIS]; steps_dist_mm.b = CORESIGN(da - db) * mm_per_step[B_AXIS]; #elif CORE_IS_XZ @@ -2048,11 +2053,11 @@ bool Planner::_populate_block(block_t * const block, bool split_move, steps_dist_mm.k = dk * mm_per_step[K_AXIS]; #endif #elif ENABLED(MARKFORGED_XY) - steps_dist_mm.head.x = da * mm_per_step[A_AXIS]; - steps_dist_mm.head.y = db * mm_per_step[B_AXIS]; - steps_dist_mm.z = dc * mm_per_step[Z_AXIS]; steps_dist_mm.a = (da - db) * mm_per_step[A_AXIS]; steps_dist_mm.b = db * mm_per_step[B_AXIS]; + #elif ENABLED(MARKFORGED_YX) + steps_dist_mm.a = da * mm_per_step[A_AXIS]; + steps_dist_mm.b = (db - da) * mm_per_step[B_AXIS]; #else LINEAR_AXIS_CODE( steps_dist_mm.a = da * mm_per_step[A_AXIS], @@ -2084,7 +2089,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, block->millimeters = millimeters; else { block->millimeters = SQRT( - #if EITHER(CORE_IS_XY, MARKFORGED_XY) + #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) LINEAR_AXIS_GANG( sq(steps_dist_mm.head.x), + sq(steps_dist_mm.head.y), + sq(steps_dist_mm.z), + sq(steps_dist_mm.i), + sq(steps_dist_mm.j), + sq(steps_dist_mm.k) @@ -2163,7 +2168,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, #endif // Enable active axes - #if EITHER(CORE_IS_XY, MARKFORGED_XY) + #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) if (block->steps.a || block->steps.b) { stepper.enable_axis(X_AXIS); stepper.enable_axis(Y_AXIS); @@ -2193,7 +2198,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, if (block->steps.k) stepper.enable_axis(K_AXIS) ); #endif - #if EITHER(IS_CORE, MARKFORGED_XY) + #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) #if LINEAR_AXES >= 4 if (block->steps.i) stepper.enable_axis(I_AXIS); #endif @@ -2551,7 +2556,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, * => normalize the complete junction vector. * Elsewise, when needed JD will factor-in the E component */ - if (EITHER(IS_CORE, MARKFORGED_XY) || esteps > 0) + if (ANY(IS_CORE, MARKFORGED_XY, MARKFORGED_YX) || esteps > 0) normalize_junction_vector(unit_vec); // Normalize with XYZE components else unit_vec *= inverse_millimeters; // Use pre-calculated (1 / SQRT(x^2 + y^2 + z^2)) diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 2c8933266f..69818aff7a 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -2212,6 +2212,8 @@ uint32_t Stepper::block_phase_isr() { #define Y_CMP(A,B) ((A)!=(B)) #endif #define Y_MOVE_TEST ( S_(1) != S_(2) || (S_(1) > 0 && Y_CMP(D_(1),D_(2))) ) + #elif ENABLED(MARKFORGED_YX) + #define Y_MOVE_TEST (current_block->steps.a != current_block->steps.b) #else #define Y_MOVE_TEST !!current_block->steps.b #endif @@ -2800,7 +2802,7 @@ void Stepper::init() { * derive the current XYZE position later on. */ void Stepper::_set_position(const abce_long_t &spos) { - #if EITHER(IS_CORE, MARKFORGED_XY) + #if ANY(IS_CORE, MARKFORGED_XY, MARKFORGED_YX) #if CORE_IS_XY // corexy positioning // these equations follow the form of the dA and dB equations on https://www.corexy.com/theory.html @@ -2813,6 +2815,8 @@ void Stepper::_set_position(const abce_long_t &spos) { count_position.set(spos.a, spos.b + spos.c, CORESIGN(spos.b - spos.c)); #elif ENABLED(MARKFORGED_XY) count_position.set(spos.a - spos.b, spos.b, spos.c); + #elif ENABLED(MARKFORGED_YX) + count_position.set(spos.a, spos.b - spos.a, spos.c); #endif TERN_(HAS_EXTRUDERS, count_position.e = spos.e); #else @@ -2884,6 +2888,10 @@ void Stepper::endstop_triggered(const AxisEnum axis) { axis == CORE_AXIS_1 ? count_position[CORE_AXIS_1] - count_position[CORE_AXIS_2] : count_position[CORE_AXIS_2] + #elif ENABLED(MARKFORGED_YX) + axis == CORE_AXIS_1 + ? count_position[CORE_AXIS_1] + : count_position[CORE_AXIS_2] - count_position[CORE_AXIS_1] #else // !IS_CORE count_position[axis] #endif @@ -2912,10 +2920,10 @@ int32_t Stepper::triggered_position(const AxisEnum axis) { return v; } -#if ANY(CORE_IS_XY, CORE_IS_XZ, MARKFORGED_XY, IS_SCARA, DELTA) +#if ANY(CORE_IS_XY, CORE_IS_XZ, MARKFORGED_XY, MARKFORGED_YX, IS_SCARA, DELTA) #define SAYS_A 1 #endif -#if ANY(CORE_IS_XY, CORE_IS_YZ, MARKFORGED_XY, IS_SCARA, DELTA) +#if ANY(CORE_IS_XY, CORE_IS_YZ, MARKFORGED_XY, MARKFORGED_YX, IS_SCARA, DELTA) #define SAYS_B 1 #endif #if ANY(CORE_IS_XZ, CORE_IS_YZ, DELTA) From 7bc18a707572d063ac3ba905f1f704dd965f26f3 Mon Sep 17 00:00:00 2001 From: lukrow80 <64228214+lukrow80@users.noreply.github.com> Date: Tue, 23 Nov 2021 22:30:13 +0100 Subject: [PATCH 159/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20homing=20current?= =?UTF-8?q?=20for=20extra=20axes=20(#23152)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Followup to #19112 --- Marlin/src/gcode/calibrate/G28.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 28df536c51..8743c0d895 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -262,7 +262,7 @@ void GcodeSuite::G28() { reset_stepper_timeout(); #define HAS_CURRENT_HOME(N) (defined(N##_CURRENT_HOME) && N##_CURRENT_HOME != N##_CURRENT) - #if HAS_CURRENT_HOME(X) || HAS_CURRENT_HOME(X2) || HAS_CURRENT_HOME(Y) || HAS_CURRENT_HOME(Y2) || (ENABLED(DELTA) && HAS_CURRENT_HOME(Z)) + #if HAS_CURRENT_HOME(X) || HAS_CURRENT_HOME(X2) || HAS_CURRENT_HOME(Y) || HAS_CURRENT_HOME(Y2) || HAS_CURRENT_HOME(I) || HAS_CURRENT_HOME(J) || HAS_CURRENT_HOME(K) || (ENABLED(DELTA) && HAS_CURRENT_HOME(Z)) #define HAS_HOMING_CURRENT 1 #endif @@ -290,6 +290,21 @@ void GcodeSuite::G28() { stepperY2.rms_current(Y2_CURRENT_HOME); if (DEBUGGING(LEVELING)) debug_current(F("Y2"), tmc_save_current_Y2, Y2_CURRENT_HOME); #endif + #if HAS_CURRENT_HOME(I) + const int16_t tmc_save_current_I = stepperI.getMilliamps(); + stepperI.rms_current(I_CURRENT_HOME); + if (DEBUGGING(LEVELING)) debug_current(F(AXIS4_STR), tmc_save_current_I, I_CURRENT_HOME); + #endif + #if HAS_CURRENT_HOME(J) + const int16_t tmc_save_current_J = stepperJ.getMilliamps(); + stepperJ.rms_current(J_CURRENT_HOME); + if (DEBUGGING(LEVELING)) debug_current(F(AXIS5_STR), tmc_save_current_J, J_CURRENT_HOME); + #endif + #if HAS_CURRENT_HOME(K) + const int16_t tmc_save_current_K = stepperK.getMilliamps(); + stepperK.rms_current(K_CURRENT_HOME); + if (DEBUGGING(LEVELING)) debug_current(F(AXIS6_STR), tmc_save_current_K, K_CURRENT_HOME); + #endif #if HAS_CURRENT_HOME(Z) && ENABLED(DELTA) const int16_t tmc_save_current_Z = stepperZ.getMilliamps(); stepperZ.rms_current(Z_CURRENT_HOME); From 203047f859c23ee5053ed20c88531b7f15fcee5f Mon Sep 17 00:00:00 2001 From: Giuliano Zaro <3684609+GMagician@users.noreply.github.com> Date: Tue, 23 Nov 2021 22:33:33 +0100 Subject: [PATCH 160/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20include=20path=20(?= =?UTF-8?q?#23150)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp b/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp index ff013967c0..a7ec99d982 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp @@ -40,7 +40,7 @@ #endif #if ENABLED(POWER_LOSS_RECOVERY) - #include "../../../../../feature/powerloss.h" + #include "../../../../feature/powerloss.h" #endif #if ENABLED(DGUS_UI_MOVE_DIS_OPTION) From d4c78edfe37c62e82aee9bfa3ca8b685e3d5cb62 Mon Sep 17 00:00:00 2001 From: schmttc <89831403+schmttc@users.noreply.github.com> Date: Wed, 24 Nov 2021 08:52:18 +1100 Subject: [PATCH 161/532] =?UTF-8?q?=E2=9C=A8=20EasyThreeD=20ET4000+=20boar?= =?UTF-8?q?d=20and=20UI=20(#23080)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/Configuration.h | 5 + Marlin/src/MarlinCore.cpp | 10 + Marlin/src/feature/easythreed_ui.cpp | 236 ++++++++++++++++++ Marlin/src/feature/easythreed_ui.h | 35 +++ Marlin/src/pins/stm32f1/pins_MKS_ROBIN_LITE.h | 50 +++- ini/features.ini | 1 + platformio.ini | 1 + 7 files changed, 329 insertions(+), 9 deletions(-) create mode 100644 Marlin/src/feature/easythreed_ui.cpp create mode 100644 Marlin/src/feature/easythreed_ui.h diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 060c07bbbc..71a9211330 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -2825,6 +2825,11 @@ //#define REPRAPWORLD_KEYPAD //#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0 // (mm) Distance to move per key-press +// +// EasyThreeD ET-4000+ with button input and status LED +// +//#define EASYTHREED_UI + //============================================================================= //=============================== Extra Features ============================== //============================================================================= diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 827d2af864..941903149f 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -248,6 +248,10 @@ #include "feature/power.h" #endif +#if ENABLED(EASYTHREED_UI) + #include "feature/easythreed_ui.h" +#endif + PGMSTR(M112_KILL_STR, "M112 Shutdown"); MarlinState marlin_state = MF_INITIALIZING; @@ -637,6 +641,8 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) { #endif #endif + TERN_(EASYTHREED_UI, easythreed_ui.run()); + TERN_(USE_CONTROLLER_FAN, controllerFan.update()); // Check if fan should be turned on to cool stepper drivers down TERN_(AUTO_POWER_CONTROL, powerManager.check(!ui.on_status_screen() || printJobOngoing() || printingIsPaused())); @@ -1606,6 +1612,10 @@ void setup() { SETUP_RUN(ui.check_touch_calibration()); #endif + #if ENABLED(EASYTHREED_UI) + SETUP_RUN(easythreed_ui.init()); + #endif + marlin_state = MF_RUNNING; SETUP_LOG("setup() completed."); diff --git a/Marlin/src/feature/easythreed_ui.cpp b/Marlin/src/feature/easythreed_ui.cpp new file mode 100644 index 0000000000..3eff233c01 --- /dev/null +++ b/Marlin/src/feature/easythreed_ui.cpp @@ -0,0 +1,236 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include "../inc/MarlinConfigPre.h" + +#if ENABLED(EASYTHREED_UI) + +#include "easythreed_ui.h" +#include "pause.h" +#include "../module/temperature.h" +#include "../module/printcounter.h" +#include "../sd/cardreader.h" +#include "../gcode/queue.h" +#include "../module/motion.h" +#include "../module/planner.h" +#include "../MarlinCore.h" + +EasythreedUI easythreed_ui; + +#define BTN_DEBOUNCE_MS 20 + +void EasythreedUI::init() { + SET_INPUT_PULLUP(BTN_HOME); SET_OUTPUT(BTN_HOME_GND); + SET_INPUT_PULLUP(BTN_FEED); SET_OUTPUT(BTN_FEED_GND); + SET_INPUT_PULLUP(BTN_RETRACT); SET_OUTPUT(BTN_RETRACT_GND); + SET_INPUT_PULLUP(BTN_PRINT); + SET_OUTPUT(EASYTHREED_LED_PIN); +} + +void EasythreedUI::run() { + blinkLED(); + loadButton(); + printButton(); +} + +enum LEDInterval : uint16_t { + LED_OFF = 0, + LED_ON = 4000, + LED_BLINK_0 = 2500, + LED_BLINK_1 = 1500, + LED_BLINK_2 = 1000, + LED_BLINK_3 = 800, + LED_BLINK_4 = 500, + LED_BLINK_5 = 300, + LED_BLINK_6 = 150, + LED_BLINK_7 = 50 +}; + +uint16_t blink_interval_ms = LED_ON; // Status LED on Start button + +void EasythreedUI::blinkLED() { + static millis_t prev_blink_interval_ms = 0, blink_start_ms = 0; + + if (blink_interval_ms == LED_OFF) { WRITE(EASYTHREED_LED_PIN, HIGH); return; } // OFF + if (blink_interval_ms >= LED_ON) { WRITE(EASYTHREED_LED_PIN, LOW); return; } // ON + + const millis_t ms = millis(); + if (prev_blink_interval_ms != blink_interval_ms) { + prev_blink_interval_ms = blink_interval_ms; + blink_start_ms = ms; + } + if (PENDING(ms, blink_start_ms + blink_interval_ms)) + WRITE(EASYTHREED_LED_PIN, LOW); + else if (PENDING(ms, blink_start_ms + 2 * blink_interval_ms)) + WRITE(EASYTHREED_LED_PIN, HIGH); + else + blink_start_ms = ms; +} + +// +// Filament Load/Unload Button +// Load/Unload buttons are a 3 position switch with a common center ground. +// +void EasythreedUI::loadButton() { + if (printingIsActive()) return; + + enum FilamentStatus : uint8_t { FS_IDLE, FS_PRESS, FS_CHECK, FS_PROCEED }; + static uint8_t filament_status = FS_IDLE; + static millis_t filament_time = 0; + + switch (filament_status) { + + case FS_IDLE: + if (!READ(BTN_RETRACT) || !READ(BTN_FEED)) { // If feed/retract switch is toggled... + filament_status++; // ...proceed to next test. + filament_time = millis(); + } + break; + + case FS_PRESS: + if (ELAPSED(millis(), filament_time + BTN_DEBOUNCE_MS)) { // After a short debounce delay... + if (!READ(BTN_RETRACT) || !READ(BTN_FEED)) { // ...if switch still toggled... + thermalManager.setTargetHotend(EXTRUDE_MINTEMP + 10, 0); // Start heating up + blink_interval_ms = LED_BLINK_7; // Set the LED to blink fast + filament_status++; + } + else + filament_status = FS_IDLE; // Switch not toggled long enough + } + break; + + case FS_CHECK: + if (READ(BTN_RETRACT) && READ(BTN_FEED)) { // Switch in center position (stop) + blink_interval_ms = LED_ON; // LED on steady + filament_status = FS_IDLE; + thermalManager.disable_all_heaters(); + } + else if (thermalManager.hotEnoughToExtrude(0)) { // Is the hotend hot enough to move material? + filament_status++; // Proceed to feed / retract. + blink_interval_ms = LED_BLINK_5; // Blink ~3 times per second + } + break; + + case FS_PROCEED: { + // Feed or Retract just once. Hard abort all moves and return to idle on swicth release. + static bool flag = false; + if (READ(BTN_RETRACT) && READ(BTN_FEED)) { // Switch in center position (stop) + flag = false; // Restore flag to false + filament_status = FS_IDLE; // Go back to idle state + quickstop_stepper(); // Hard-stop all the steppers ... now! + thermalManager.disable_all_heaters(); // And disable all the heaters + blink_interval_ms = LED_ON; + } + else if (!flag) { + flag = true; + queue.inject(!READ(BTN_RETRACT) ? F("G91\nG0 E10 F180\nG0 E-120 F180\nM104 S0") : F("G91\nG0 E100 F120\nM104 S0")); + } + } break; + } + +} + +#if HAS_STEPPER_RESET + void disableStepperDrivers(); +#endif + +// +// Print Start/Pause/Resume Button +// +void EasythreedUI::printButton() { + enum KeyStatus : uint8_t { KS_IDLE, KS_PRESS, KS_PROCEED }; + static uint8_t key_status = KS_IDLE; + static millis_t key_time = 0; + + enum PrintFlag : uint8_t { PF_START, PF_PAUSE, PF_RESUME }; + static PrintFlag print_key_flag = PF_START; + + const millis_t ms = millis(); + + switch (key_status) { + case KS_IDLE: + if (!READ(BTN_PRINT)) { // Print/Pause/Resume button pressed? + key_time = ms; // Save start time + key_status++; // Go to debounce test + } + break; + + case KS_PRESS: + if (ELAPSED(ms, key_time + BTN_DEBOUNCE_MS)) // Wait for debounce interval to expire + key_status = READ(BTN_PRINT) ? KS_IDLE : KS_PROCEED; // Proceed if still pressed + break; + + case KS_PROCEED: + if (!READ(BTN_PRINT)) break; // Wait for the button to be released + key_status = KS_IDLE; // Ready for the next press + if (PENDING(ms, key_time + 1200 - BTN_DEBOUNCE_MS)) { // Register a press < 1.2 seconds + switch (print_key_flag) { + case PF_START: { // The "Print" button starts an SD card print + if (printingIsActive()) break; // Already printing? (find another line that checks for 'is planner doing anything else right now?') + blink_interval_ms = LED_BLINK_2; // Blink the indicator LED at 1 second intervals + print_key_flag = PF_PAUSE; // The "Print" button now pauses the print + card.mount(); // Force SD card to mount - now! + if (!card.isMounted) { // Failed to mount? + blink_interval_ms = LED_OFF; // Turn off LED + print_key_flag = PF_START; + return; // Bail out + } + card.ls(); // List all files to serial output + const uint16_t filecnt = card.countFilesInWorkDir(); // Count printable files in cwd + if (filecnt == 0) return; // None are printable? + card.selectFileByIndex(filecnt); // Select the last file according to current sort options + card.openAndPrintFile(card.filename); // Start printing it + break; + } + case PF_PAUSE: { // Pause printing (not currently firing) + if (!printingIsActive()) break; + blink_interval_ms = LED_ON; // Set indicator to steady ON + queue.inject(F("M25")); // Queue Pause + print_key_flag = PF_RESUME; // The "Print" button now resumes the print + break; + } + case PF_RESUME: { // Resume printing + if (printingIsActive()) break; + blink_interval_ms = LED_BLINK_2; // Blink the indicator LED at 1 second intervals + queue.inject(F("M24")); // Queue resume + print_key_flag = PF_PAUSE; // The "Print" button now pauses the print + break; + } + } + } + else { // Register a longer press + if (print_key_flag == PF_START && !printingIsActive()) { // While not printing, this moves Z up 10mm + blink_interval_ms = LED_ON; + queue.inject(F("G91\nG0 Z10 F600\nG90")); // Raise Z soon after returning to main loop + } + else { // While printing, cancel print + card.abortFilePrintSoon(); // There is a delay while the current steps play out + blink_interval_ms = LED_OFF; // Turn off LED + } + planner.synchronize(); // Wait for commands already in the planner to finish + TERN_(HAS_STEPPER_RESET, disableStepperDrivers()); // Disable all steppers - now! + print_key_flag = PF_START; // The "Print" button now starts a new print + } + break; + } +} +#endif // EASYTHREED_UI diff --git a/Marlin/src/feature/easythreed_ui.h b/Marlin/src/feature/easythreed_ui.h new file mode 100644 index 0000000000..af9ad2d090 --- /dev/null +++ b/Marlin/src/feature/easythreed_ui.h @@ -0,0 +1,35 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 + +class EasythreedUI { + public: + static void init(); + static void run(); + + private: + static void blinkLED(); + static void loadButton(); + static void printButton(); +}; + +extern EasythreedUI easythreed_ui; diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_LITE.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_LITE.h index 94f7313996..9f33d4392a 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_LITE.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_LITE.h @@ -79,31 +79,51 @@ #define FIL_RUNOUT_PIN PB8 // MT_DET +/** ------ + * (BEEPER) PD2 |10 9 | PB3 (BTN_ENC) + * (BTN_EN1) PB5 | 8 7 | PA11 (RESET?) + * (BTN_EN2) PB4 6 5 | PC1 (LCD_D4) + * (LCD_RS) PC3 | 4 3 | PC2 (LCD_EN) + * GND | 2 1 | 5V + * ------ + * "E3" EXP1 + */ +#define E3_EXP1_01_PIN -1 // 5V +#define E3_EXP1_02_PIN -1 // GND +#define E3_EXP1_03_PIN PC2 +#define E3_EXP1_04_PIN PC3 +#define E3_EXP1_05_PIN PC1 +#define E3_EXP1_06_PIN PB4 +#define E3_EXP1_07_PIN PA11 // RESET? +#define E3_EXP1_08_PIN PB5 +#define E3_EXP1_09_PIN PB3 +#define E3_EXP1_10_PIN PD2 + // // LCD Pins // #if HAS_WIRED_LCD - #define BEEPER_PIN PD2 - #define BTN_ENC PB3 - #define LCD_PINS_RS PC3 + #define BEEPER_PIN E3_EXP1_10_PIN + #define BTN_ENC E3_EXP1_09_PIN + #define LCD_PINS_RS E3_EXP1_04_PIN - #define BTN_EN1 PB5 - #define BTN_EN2 PB4 + #define BTN_EN1 E3_EXP1_08_PIN + #define BTN_EN2 E3_EXP1_06_PIN - #define LCD_PINS_ENABLE PC2 + #define LCD_PINS_ENABLE E3_EXP1_03_PIN #if ENABLED(MKS_MINI_12864) #define LCD_BACKLIGHT_PIN -1 #define LCD_RESET_PIN -1 - #define DOGLCD_A0 PC1 - #define DOGLCD_CS PC2 + #define DOGLCD_A0 E3_EXP1_05_PIN + #define DOGLCD_CS E3_EXP1_03_PIN #define DOGLCD_SCK PB13 #define DOGLCD_MOSI PB15 #else // !MKS_MINI_12864 - #define LCD_PINS_D4 PC1 + #define LCD_PINS_D4 E3_EXP1_05_PIN #if IS_ULTIPANEL #define LCD_PINS_D5 -1 #define LCD_PINS_D6 -1 @@ -141,3 +161,15 @@ #define SD_MISO_PIN PB14 #define SD_MOSI_PIN PB15 #define SD_SS_PIN PA15 + +// EXP1 replace LCD with keys for EasyThreeD ET4000+ Mainboard +#if ENABLED(EASYTHREED_UI) + #define BTN_HOME E3_EXP1_04_PIN // INPUT_PULLUP (unused) + #define BTN_FEED E3_EXP1_09_PIN // Run E Forward + #define BTN_RETRACT E3_EXP1_08_PIN // Run E Backward + #define BTN_PRINT E3_EXP1_07_PIN // Start File Print + #define BTN_HOME_GND E3_EXP1_03_PIN // OUTPUT (LOW) + #define BTN_FEED_GND E3_EXP1_06_PIN // OUTPUT (LOW) + #define BTN_RETRACT_GND E3_EXP1_05_PIN // OUTPUT (LOW) + #define EASYTHREED_LED_PIN E3_EXP1_10_PIN // Indicator LED +#endif diff --git a/ini/features.ini b/ini/features.ini index 606370e07a..91baa601ca 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -111,6 +111,7 @@ HAS_COOLER|LASER_COOLANT_FLOW_METER = src_filter=+ HAS_MOTOR_CURRENT_DAC = src_filter=+ DIRECT_STEPPING = src_filter=+ + EMERGENCY_PARSER = src_filter=+ - +EASYTHREED_UI = src_filter=+ I2C_POSITION_ENCODERS = src_filter=+ IIC_BL24CXX_EEPROM = src_filter=+ HAS_SPI_FLASH = src_filter=+ diff --git a/platformio.ini b/platformio.ini index 0be12fb6ae..07821fca96 100644 --- a/platformio.ini +++ b/platformio.ini @@ -109,6 +109,7 @@ default_src_filter = + - - + - - - - - + - - - - - From f0e48ce104b5e3dc06f91127e69b3ef5b46370cd Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Tue, 23 Nov 2021 13:54:31 -0800 Subject: [PATCH 162/532] =?UTF-8?q?=F0=9F=93=8C=20Biqu=20BX=20temporary=20?= =?UTF-8?q?framework=20workaround=20(#23131)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/PlatformIO/scripts/generic_create_variant.py | 2 +- ini/stm32h7.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/buildroot/share/PlatformIO/scripts/generic_create_variant.py b/buildroot/share/PlatformIO/scripts/generic_create_variant.py index 52473c752a..06929e0504 100644 --- a/buildroot/share/PlatformIO/scripts/generic_create_variant.py +++ b/buildroot/share/PlatformIO/scripts/generic_create_variant.py @@ -30,7 +30,7 @@ if pioutil.is_pio_build(): else: platform_name = PackageSpec(platform_packages[0]).name - if platform_name in [ "usb-host-msc", "usb-host-msc-cdc-msc", "usb-host-msc-cdc-msc-2", "usb-host-msc-cdc-msc-3", "tool-stm32duino" ]: + if platform_name in [ "usb-host-msc", "usb-host-msc-cdc-msc", "usb-host-msc-cdc-msc-2", "usb-host-msc-cdc-msc-3", "tool-stm32duino", "biqu-bx-workaround" ]: platform_name = "framework-arduinoststm32" FRAMEWORK_DIR = platform.get_package_dir(platform_name) diff --git a/ini/stm32h7.ini b/ini/stm32h7.ini index fb39d4cc6b..16d1067e52 100644 --- a/ini/stm32h7.ini +++ b/ini/stm32h7.ini @@ -25,7 +25,7 @@ [env:BTT_SKR_SE_BX] platform = ${common_stm32.platform} extends = stm32_variant -platform_packages = ${stm_flash_drive.platform_packages} +platform_packages = framework-arduinoststm32@https://github.com/thisiskeithb/Arduino_Core_STM32/archive/biqu-bx-workaround.zip board = marlin_BTT_SKR_SE_BX board_build.offset = 0x20000 build_flags = ${stm32_variant.build_flags} ${stm_flash_drive.build_flags} From b6a8cc06fadd2ef3e5b06c7bb2a006ee42f7bfef Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 24 Nov 2021 01:01:07 +0000 Subject: [PATCH 163/532] [cron] Bump distribution date (2021-11-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 b025ee39a3..e678293220 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 "2021-11-23" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 71086876af..b8e5b4b020 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 "2021-11-23" + #define STRING_DISTRIBUTION_DATE "2021-11-24" #endif /** From a7549aac5c5efc7097d6ebe69b2d46b3e7acbfab Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 22 Oct 2021 13:21:26 -0500 Subject: [PATCH 164/532] =?UTF-8?q?=F0=9F=8E=A8=20Misc.=20issue=20review?= =?UTF-8?q?=20patches?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 8 ++++---- Marlin/src/gcode/feature/pause/M600.cpp | 4 ++-- Marlin/src/gcode/feature/pause/M701_M702.cpp | 10 +++++----- .../lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.h | 2 +- Marlin/src/module/temperature.cpp | 8 ++++---- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index a1366fc511..8dc6fc9132 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -329,14 +329,14 @@ * Thermal Protection parameters for the laser cooler. */ #if ENABLED(THERMAL_PROTECTION_COOLER) - #define THERMAL_PROTECTION_COOLER_PERIOD 10 // Seconds - #define THERMAL_PROTECTION_COOLER_HYSTERESIS 3 // Degrees Celsius + #define THERMAL_PROTECTION_COOLER_PERIOD 10 // Seconds + #define THERMAL_PROTECTION_COOLER_HYSTERESIS 3 // Degrees Celsius /** * Laser cooling watch settings (M143/M193). */ - #define WATCH_COOLER_TEMP_PERIOD 60 // Seconds - #define WATCH_COOLER_TEMP_INCREASE 3 // Degrees Celsius + #define WATCH_COOLER_TEMP_PERIOD 60 // Seconds + #define WATCH_COOLER_TEMP_INCREASE 3 // Degrees Celsius #endif #if ENABLED(PIDTEMP) diff --git a/Marlin/src/gcode/feature/pause/M600.cpp b/Marlin/src/gcode/feature/pause/M600.cpp index 541fa08350..a95e3e02b4 100644 --- a/Marlin/src/gcode/feature/pause/M600.cpp +++ b/Marlin/src/gcode/feature/pause/M600.cpp @@ -106,7 +106,7 @@ void GcodeSuite::M600() { // Change toolhead if specified const uint8_t active_extruder_before_filament_change = active_extruder; if (active_extruder != target_extruder && TERN1(DUAL_X_CARRIAGE, !idex_is_duplicating())) - tool_change(target_extruder, false); + tool_change(target_extruder); #endif // Initial retract before move to filament change position @@ -159,7 +159,7 @@ void GcodeSuite::M600() { #if HAS_MULTI_EXTRUDER // Restore toolhead if it was changed if (active_extruder_before_filament_change != active_extruder) - tool_change(active_extruder_before_filament_change, false); + tool_change(active_extruder_before_filament_change); #endif TERN_(MIXING_EXTRUDER, mixer.T(old_mixing_tool)); // Restore original mixing tool diff --git a/Marlin/src/gcode/feature/pause/M701_M702.cpp b/Marlin/src/gcode/feature/pause/M701_M702.cpp index d46bb234bc..21e389a5f2 100644 --- a/Marlin/src/gcode/feature/pause/M701_M702.cpp +++ b/Marlin/src/gcode/feature/pause/M701_M702.cpp @@ -85,7 +85,7 @@ void GcodeSuite::M701() { // Change toolhead if specified uint8_t active_extruder_before_filament_change = active_extruder; if (active_extruder != target_extruder) - tool_change(target_extruder, false); + tool_change(target_extruder); #endif auto move_z_by = [](const_float_t zdist) { @@ -124,7 +124,7 @@ void GcodeSuite::M701() { #if HAS_MULTI_EXTRUDER && (HAS_PRUSA_MMU1 || !HAS_MMU) // Restore toolhead if it was changed if (active_extruder_before_filament_change != active_extruder) - tool_change(active_extruder_before_filament_change, false); + tool_change(active_extruder_before_filament_change); #endif TERN_(MIXING_EXTRUDER, mixer.T(old_mixing_tool)); // Restore original mixing tool @@ -188,7 +188,7 @@ void GcodeSuite::M702() { // Change toolhead if specified uint8_t active_extruder_before_filament_change = active_extruder; if (active_extruder != target_extruder) - tool_change(target_extruder, false); + tool_change(target_extruder); #endif // Lift Z axis @@ -202,7 +202,7 @@ void GcodeSuite::M702() { #if BOTH(HAS_MULTI_EXTRUDER, FILAMENT_UNLOAD_ALL_EXTRUDERS) if (!parser.seenval('T')) { HOTEND_LOOP() { - if (e != active_extruder) tool_change(e, false); + if (e != active_extruder) tool_change(e); unload_filament(-fc_settings[e].unload_length, true, PAUSE_MODE_UNLOAD_FILAMENT); } } @@ -228,7 +228,7 @@ void GcodeSuite::M702() { #if HAS_MULTI_EXTRUDER && (HAS_PRUSA_MMU1 || !HAS_MMU) // Restore toolhead if it was changed if (active_extruder_before_filament_change != active_extruder) - tool_change(active_extruder_before_filament_change, false); + tool_change(active_extruder_before_filament_change); #endif TERN_(MIXING_EXTRUDER, mixer.T(old_mixing_tool)); // Restore original mixing tool diff --git a/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.h b/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.h index fa62b545dc..8fcadc1553 100644 --- a/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.h +++ b/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.h @@ -39,7 +39,7 @@ enum AnycubicMediaPauseState { AMPAUSESTATE_PARKING, AMPAUSESTATE_PARKED, AMPAUSESTATE_FILAMENT_OUT, - AMPAUSESTATE_FIAMENT_PRUGING, + AMPAUSESTATE_FILAMENT_PURGING, AMPAUSESTATE_HEATER_TIMEOUT, AMPAUSESTATE_REHEATING, AMPAUSESTATE_REHEAT_FINISHED diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 7afec4408e..fc5eb2dc6c 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -593,7 +593,7 @@ volatile bool Temperature::raw_temps_ready = false; #define ONHEATINGSTART() C_TERN(ischamber, printerEventLEDs.onChamberHeatingStart(), B_TERN(isbed, printerEventLEDs.onBedHeatingStart(), printerEventLEDs.onHotendHeatingStart())) #define ONHEATING(S,C,T) C_TERN(ischamber, printerEventLEDs.onChamberHeating(S,C,T), B_TERN(isbed, printerEventLEDs.onBedHeating(S,C,T), printerEventLEDs.onHotendHeating(S,C,T))) - #define WATCH_PID BOTH(WATCH_CHAMBER, PIDTEMPCHAMBER) || BOTH(WATCH_BED, PIDTEMPBED) || BOTH(WATCH_HOTENDS, PIDTEMP) + #define WATCH_PID DISABLED(NO_WATCH_PID_TUNING) && (BOTH(WATCH_CHAMBER, PIDTEMPCHAMBER) || BOTH(WATCH_BED, PIDTEMPBED) || BOTH(WATCH_HOTENDS, PIDTEMP)) #if WATCH_PID #if BOTH(THERMAL_PROTECTION_CHAMBER, PIDTEMPCHAMBER) @@ -684,8 +684,8 @@ volatile bool Temperature::raw_temps_ready = false; if (cycles > 2) { const float Ku = (4.0f * d) / (float(M_PI) * (maxT - minT) * 0.5f), Tu = float(t_low + t_high) * 0.001f, - pf = ischamber ? 0.2f : (isbed ? 0.2f : 0.6f), - df = ischamber ? 1.0f / 3.0f : (isbed ? 1.0f / 3.0f : 1.0f / 8.0f); + pf = (ischamber || isbed) ? 0.2f : 0.6f, + df = (ischamber || isbed) ? 1.0f / 3.0f : 1.0f / 8.0f; tune_pid.Kp = Ku * pf; tune_pid.Ki = tune_pid.Kp * 2.0f / Tu; @@ -731,7 +731,7 @@ volatile bool Temperature::raw_temps_ready = false; if (!heated) { // If not yet reached target... if (current_temp > next_watch_temp) { // Over the watch temp? next_watch_temp = current_temp + watch_temp_increase; // - set the next temp to watch for - temp_change_ms = ms + SEC_TO_MS(watch_temp_period); // - move the expiration timer up + temp_change_ms = ms + SEC_TO_MS(watch_temp_period); // - move the expiration timer up if (current_temp > watch_temp_target) heated = true; // - Flag if target temperature reached } else if (ELAPSED(ms, temp_change_ms)) // Watch timer expired From 9e7b9d01a18f4a77d51c2d8d4c7094b2b5e8bfb4 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 25 Nov 2021 01:02:19 +0000 Subject: [PATCH 165/532] [cron] Bump distribution date (2021-11-25) --- 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 e678293220..4bde5ecfe4 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 "2021-11-24" +//#define STRING_DISTRIBUTION_DATE "2021-11-25" /** * 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 b8e5b4b020..36baa26676 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 "2021-11-24" + #define STRING_DISTRIBUTION_DATE "2021-11-25" #endif /** From 981ad44ded7b3805ce54da389581403c230f7dbd Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 26 Nov 2021 01:00:27 +0000 Subject: [PATCH 166/532] [cron] Bump distribution date (2021-11-26) --- 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 4bde5ecfe4..1913f2d8df 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 "2021-11-25" +//#define STRING_DISTRIBUTION_DATE "2021-11-26" /** * 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 36baa26676..b9267a1fcc 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 "2021-11-25" + #define STRING_DISTRIBUTION_DATE "2021-11-26" #endif /** From 47d34682519cb1524e71e71c018e946824803660 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 27 Nov 2021 00:59:57 +0000 Subject: [PATCH 167/532] [cron] Bump distribution date (2021-11-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 1913f2d8df..e635eb5f10 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 "2021-11-26" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 b9267a1fcc..4f9c011703 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 "2021-11-26" + #define STRING_DISTRIBUTION_DATE "2021-11-27" #endif /** From 716d74131576c01c69f438e7640cc9857334bd0e Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Sat, 27 Nov 2021 11:23:23 -0800 Subject: [PATCH 168/532] =?UTF-8?q?=F0=9F=90=9B=20Swap=20BTT002=20Tachomet?= =?UTF-8?q?er=20Pins=20(#23199)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Followup to #23086 --- Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h index 602c8b0548..653ebd82a1 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h @@ -190,9 +190,9 @@ #ifndef E0_FAN_TACHO_PIN #ifdef MK3_FAN_PINS - #define E0_FAN_TACHO_PIN PE0 // Fan1 + #define E0_FAN_TACHO_PIN PE1 // Fan1 #else - #define E0_FAN_TACHO_PIN PE1 // Fan0 + #define E0_FAN_TACHO_PIN PE0 // Fan0 #endif #endif From a3c4a5eca693bb5794c0374f5ca72ed8f2dc422f Mon Sep 17 00:00:00 2001 From: George Fu Date: Sun, 28 Nov 2021 03:26:53 +0800 Subject: [PATCH 169/532] =?UTF-8?q?=E2=9C=A8=20=20FYSETC=20Spider=20v2.2?= =?UTF-8?q?=20(#23208)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/boards.h | 1 + Marlin/src/pins/pins.h | 2 ++ Marlin/src/pins/stm32f4/pins_FYSETC_S6.h | 12 +++++-- .../pins/stm32f4/pins_FYSETC_SPIDER_V2_2.h | 34 +++++++++++++++++++ .../MARLIN_FYSETC_S6/PeripheralPins.c | 4 +-- 5 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 Marlin/src/pins/stm32f4/pins_FYSETC_SPIDER_V2_2.h diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 789512c4ef..ebb130698c 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -407,6 +407,7 @@ #define BOARD_MKS_ROBIN_NANO_V1_3_F4 4235 // MKS Robin Nano V1.3 and MKS Robin Nano-S V1.3 (STM32F407VET6) #define BOARD_MKS_EAGLE 4236 // MKS Eagle (STM32F407VET6) #define BOARD_ARTILLERY_RUBY 4237 // Artillery Ruby (STM32F401RCT6) +#define BOARD_FYSETC_SPIDER_V2_2 4238 // FYSETC Spider V2.2 (STM32F446VET6) // // ARM Cortex M7 diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 57648b3e16..3843441712 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -643,6 +643,8 @@ #include "stm32f4/pins_FYSETC_S6_V2_0.h" // STM32F4 env:FYSETC_S6 env:FYSETC_S6_8000 #elif MB(FYSETC_SPIDER) #include "stm32f4/pins_FYSETC_SPIDER.h" // STM32F4 env:FYSETC_S6 env:FYSETC_S6_8000 +#elif MB(FYSETC_SPIDER_V2_2) + #include "stm32f4/pins_FYSETC_SPIDER_V2_2.h" // STM32F4 env:FYSETC_S6 env:FYSETC_S6_8000 #elif MB(FLYF407ZG) #include "stm32f4/pins_FLYF407ZG.h" // STM32F4 env:FLYF407ZG #elif MB(MKS_ROBIN2) diff --git a/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h b/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h index 37a48cab7f..85071034c2 100644 --- a/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h +++ b/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h @@ -162,7 +162,9 @@ #define TEMP_0_PIN PC0 #define TEMP_1_PIN PC1 #define TEMP_2_PIN PC2 -#define TEMP_BED_PIN PC3 +#ifndef TEMP_BED_PIN + #define TEMP_BED_PIN PC3 +#endif // // Heaters / Fans @@ -180,8 +182,12 @@ #define HEATER_BED_PIN PC8 #endif -#define FAN_PIN PB0 -#define FAN1_PIN PB1 +#ifndef FAN_PIN + #define FAN_PIN PB0 +#endif +#ifndef FAN1_PIN + #define FAN1_PIN PB1 +#endif #define FAN2_PIN PB2 // diff --git a/Marlin/src/pins/stm32f4/pins_FYSETC_SPIDER_V2_2.h b/Marlin/src/pins/stm32f4/pins_FYSETC_SPIDER_V2_2.h new file mode 100644 index 0000000000..50a19fa3d3 --- /dev/null +++ b/Marlin/src/pins/stm32f4/pins_FYSETC_SPIDER_V2_2.h @@ -0,0 +1,34 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +#define BOARD_INFO_NAME "FYSETC SPIDER V22" +#define DEFAULT_MACHINE_NAME BOARD_INFO_NAME + +#define TEMP_3_PIN PC3 +#define TEMP_4_PIN PB1 +#define TEMP_BED_PIN PB0 + +#define FAN_PIN PA13 +#define FAN1_PIN PA14 + +#include "pins_FYSETC_SPIDER.h" diff --git a/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_S6/PeripheralPins.c b/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_S6/PeripheralPins.c index ec28776ebe..f63000e88a 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_S6/PeripheralPins.c +++ b/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_S6/PeripheralPins.c @@ -60,9 +60,9 @@ const PinMap PinMap_ADC[] = { //{PA_6, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC2_IN6 //{PA_7, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_IN7 //{PA_7, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC2_IN7 - //{PB_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8 + {PB_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8 //{PB_0, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC2_IN8 - //{PB_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9 + {PB_1, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9 //{PB_1, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC2_IN9 {PC_0, ADC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10 //{PC_0, ADC2, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC2_IN10 From 1861f780de948cbfdad4357604a45441ec0b25ce Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Sat, 27 Nov 2021 13:54:39 -0800 Subject: [PATCH 170/532] =?UTF-8?q?=F0=9F=A9=B9=20Handle=20nullptr=20in=20?= =?UTF-8?q?CardReader::printLongPath=20(#23197)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/sd/cardreader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 513d682de6..b2f950bc04 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -359,7 +359,7 @@ void CardReader::ls(TERN_(LONG_FILENAME_HOST_SUPPORT, bool includeLongNames/*=fa // void CardReader::printLongPath(char * const path) { - int i, pathLen = strlen(path); + int i, pathLen = path ? strlen(path) : 0; // SERIAL_ECHOPGM("Full Path: "); SERIAL_ECHOLN(path); From 6fa278b7418ebdc4f02b49749d34888c67c22024 Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Sat, 27 Nov 2021 17:58:05 -0500 Subject: [PATCH 171/532] =?UTF-8?q?=F0=9F=A9=B9=20UM2=20extruder=20cooling?= =?UTF-8?q?=20fan=20on=20PJ6=20(#23194)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/temperature.cpp | 16 ++++++++++++++-- Marlin/src/pins/ramps/pins_ULTIMAIN_2.h | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index fc5eb2dc6c..187776de12 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -878,9 +878,21 @@ int16_t Temperature::getHeaterPower(const heater_id_t heater_id) { }; uint8_t fanState = 0; - HOTEND_LOOP() - if (temp_hotend[e].celsius >= EXTRUDER_AUTO_FAN_TEMPERATURE) + HOTEND_LOOP() { + if (temp_hotend[e].celsius >= EXTRUDER_AUTO_FAN_TEMPERATURE) { SBI(fanState, pgm_read_byte(&fanBit[e])); + #if MOTHERBOARD == BOARD_ULTIMAIN_2 + // For the UM2 the head fan is connected to PJ6, which does not have an Arduino PIN definition. So use direct register access. + // https://github.com/Ultimaker/Ultimaker2Marlin/blob/master/Marlin/temperature.cpp#L553 + SBI(DDRJ, 6); SBI(PORTJ, 6); + #endif + } + else { + #if MOTHERBOARD == BOARD_ULTIMAIN_2 + SBI(DDRJ, 6); CBI(PORTJ, 6); + #endif + } + } #if HAS_AUTO_CHAMBER_FAN if (temp_chamber.celsius >= CHAMBER_AUTO_FAN_TEMPERATURE) diff --git a/Marlin/src/pins/ramps/pins_ULTIMAIN_2.h b/Marlin/src/pins/ramps/pins_ULTIMAIN_2.h index 128f1974e0..9823d4cf4b 100644 --- a/Marlin/src/pins/ramps/pins_ULTIMAIN_2.h +++ b/Marlin/src/pins/ramps/pins_ULTIMAIN_2.h @@ -98,7 +98,7 @@ #endif #ifndef E0_AUTO_FAN_PIN - #define E0_AUTO_FAN_PIN 77 + #define E0_AUTO_FAN_PIN 69 #endif // From 09ee63caf1f78bbb63518164895fd2a7cafd96d6 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Sat, 27 Nov 2021 14:59:32 -0800 Subject: [PATCH 172/532] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Fix=20Unicode=20(#?= =?UTF-8?q?23186)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 8dc6fc9132..d4fcd51003 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1667,7 +1667,7 @@ //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap //#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames //#define STATUS_HEAT_PERCENT // Show heating in a progress bar - //#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~‭3260 (or ~940) bytes of PROGMEM. + //#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~3260 (or ~940) bytes of PROGMEM. // Frivolous Game Options //#define MARLIN_BRICKOUT From 0539e870de30877a38c78d29a304a97a6068cc80 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 27 Nov 2021 18:33:32 -0600 Subject: [PATCH 173/532] =?UTF-8?q?=F0=9F=8E=A8=20Rename=20HAL=20timer=20e?= =?UTF-8?q?lements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/AVR/timers.h | 16 ++--- Marlin/src/HAL/DUE/Tone.cpp | 6 +- Marlin/src/HAL/DUE/timers.cpp | 16 ++--- Marlin/src/HAL/DUE/timers.h | 48 ++++++------- Marlin/src/HAL/ESP32/HAL.cpp | 6 +- Marlin/src/HAL/ESP32/Tone.cpp | 6 +- Marlin/src/HAL/ESP32/timers.cpp | 18 ++--- Marlin/src/HAL/ESP32/timers.h | 32 ++++----- Marlin/src/HAL/LINUX/timers.h | 23 +++--- Marlin/src/HAL/LPC1768/timers.cpp | 4 +- Marlin/src/HAL/LPC1768/timers.h | 62 ++++++++-------- Marlin/src/HAL/NATIVE_SIM/timers.h | 26 +++---- Marlin/src/HAL/SAMD51/Servo.cpp | 8 +-- Marlin/src/HAL/SAMD51/inc/SanityCheck.h | 2 +- Marlin/src/HAL/SAMD51/timers.cpp | 20 +++--- Marlin/src/HAL/SAMD51/timers.h | 62 ++++++++-------- Marlin/src/HAL/STM32/fast_pwm.cpp | 11 ++- Marlin/src/HAL/STM32/timers.cpp | 14 ++-- Marlin/src/HAL/STM32/timers.h | 22 +++--- Marlin/src/HAL/STM32F1/HAL.h | 4 +- Marlin/src/HAL/STM32F1/Servo.cpp | 18 ++--- Marlin/src/HAL/STM32F1/fast_pwm.cpp | 9 ++- Marlin/src/HAL/STM32F1/timers.cpp | 30 ++++---- Marlin/src/HAL/STM32F1/timers.h | 70 +++++++++---------- Marlin/src/HAL/TEENSY31_32/timers.cpp | 20 +++--- Marlin/src/HAL/TEENSY31_32/timers.h | 34 ++++----- Marlin/src/HAL/TEENSY35_36/timers.cpp | 20 +++--- Marlin/src/HAL/TEENSY35_36/timers.h | 34 ++++----- Marlin/src/HAL/TEENSY40_41/timers.cpp | 28 +++----- Marlin/src/HAL/TEENSY40_41/timers.h | 38 +++++----- Marlin/src/feature/easythreed_ui.cpp | 4 +- Marlin/src/module/planner.h | 2 +- Marlin/src/module/stepper.cpp | 20 +++--- Marlin/src/module/temperature.cpp | 6 +- Marlin/src/pins/sam/pins_ARCHIM1.h | 3 +- Marlin/src/pins/stm32f0/pins_MALYAN_M300.h | 4 +- Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h | 2 +- Marlin/src/pins/stm32f1/pins_MALYAN_M200.h | 4 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h | 2 +- .../src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h | 2 +- .../pins/stm32f1/pins_MKS_ROBIN_NANO_common.h | 2 +- .../pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h | 2 +- .../pins/stm32f4/pins_BTT_SKR_V2_0_common.h | 2 +- Marlin/src/pins/stm32f4/pins_FLYF407ZG.h | 4 +- Marlin/src/pins/stm32f4/pins_LERDGE_S.h | 4 +- Marlin/src/pins/stm32f4/pins_LERDGE_X.h | 4 +- Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h | 2 +- .../stm32f4/pins_MKS_ROBIN_NANO_V3_common.h | 2 +- Marlin/src/pins/stm32f4/pins_RUMBA32_common.h | 4 +- Marlin/src/pins/stm32f7/pins_NUCLEO_F767ZI.h | 4 +- Marlin/src/pins/stm32f7/pins_REMRAM_V1.h | 2 +- 51 files changed, 384 insertions(+), 404 deletions(-) diff --git a/Marlin/src/HAL/AVR/timers.h b/Marlin/src/HAL/AVR/timers.h index 82eb8b14b1..29907204ac 100644 --- a/Marlin/src/HAL/AVR/timers.h +++ b/Marlin/src/HAL/AVR/timers.h @@ -34,14 +34,14 @@ typedef uint16_t hal_timer_t; #define HAL_TIMER_RATE ((F_CPU) / 8) // i.e., 2MHz or 2.5MHz -#ifndef STEP_TIMER_NUM - #define STEP_TIMER_NUM 1 +#ifndef MF_TIMER_STEP + #define MF_TIMER_STEP 1 #endif -#ifndef PULSE_TIMER_NUM - #define PULSE_TIMER_NUM STEP_TIMER_NUM +#ifndef MF_TIMER_PULSE + #define MF_TIMER_PULSE MF_TIMER_STEP #endif -#ifndef TEMP_TIMER_NUM - #define TEMP_TIMER_NUM 0 +#ifndef MF_TIMER_TEMP + #define MF_TIMER_TEMP 0 #endif #define TEMP_TIMER_FREQUENCY ((F_CPU) / 64.0 / 256.0) @@ -64,7 +64,7 @@ typedef uint16_t hal_timer_t; FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) { switch (timer_num) { - case STEP_TIMER_NUM: + case MF_TIMER_STEP: // waveform generation = 0100 = CTC SET_WGM(1, CTC_OCRnA); @@ -84,7 +84,7 @@ FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) { TCNT1 = 0; break; - case TEMP_TIMER_NUM: + case MF_TIMER_TEMP: // Use timer0 for temperature measurement // Interleave temperature interrupt with millies interrupt OCR0B = 128; diff --git a/Marlin/src/HAL/DUE/Tone.cpp b/Marlin/src/HAL/DUE/Tone.cpp index 9beb602223..1ac81faaf0 100644 --- a/Marlin/src/HAL/DUE/Tone.cpp +++ b/Marlin/src/HAL/DUE/Tone.cpp @@ -38,17 +38,17 @@ volatile static int32_t toggles; void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration) { tone_pin = _pin; toggles = 2 * frequency * duration / 1000; - HAL_timer_start(TONE_TIMER_NUM, 2 * frequency); + HAL_timer_start(MF_TIMER_TONE, 2 * frequency); } void noTone(const pin_t _pin) { - HAL_timer_disable_interrupt(TONE_TIMER_NUM); + HAL_timer_disable_interrupt(MF_TIMER_TONE); extDigitalWrite(_pin, LOW); } HAL_TONE_TIMER_ISR() { static uint8_t pin_state = 0; - HAL_timer_isr_prologue(TONE_TIMER_NUM); + HAL_timer_isr_prologue(MF_TIMER_TONE); if (toggles) { toggles--; diff --git a/Marlin/src/HAL/DUE/timers.cpp b/Marlin/src/HAL/DUE/timers.cpp index 65073c510d..a7bf7fbd6d 100644 --- a/Marlin/src/HAL/DUE/timers.cpp +++ b/Marlin/src/HAL/DUE/timers.cpp @@ -42,7 +42,7 @@ // Private Variables // ------------------------ -const tTimerConfig TimerConfig [NUM_HARDWARE_TIMERS] = { +const tTimerConfig timer_config[NUM_HARDWARE_TIMERS] = { { TC0, 0, TC0_IRQn, 3}, // 0 - [servo timer5] { TC0, 1, TC1_IRQn, 0}, // 1 { TC0, 2, TC2_IRQn, 2}, // 2 - stepper @@ -66,9 +66,9 @@ const tTimerConfig TimerConfig [NUM_HARDWARE_TIMERS] = { */ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { - Tc *tc = TimerConfig[timer_num].pTimerRegs; - IRQn_Type irq = TimerConfig[timer_num].IRQ_Id; - uint32_t channel = TimerConfig[timer_num].channel; + Tc *tc = timer_config[timer_num].pTimerRegs; + IRQn_Type irq = timer_config[timer_num].IRQ_Id; + uint32_t channel = timer_config[timer_num].channel; // Disable interrupt, just in case it was already enabled NVIC_DisableIRQ(irq); @@ -86,7 +86,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { pmc_set_writeprotect(false); pmc_enable_periph_clk((uint32_t)irq); - NVIC_SetPriority(irq, TimerConfig [timer_num].priority); + NVIC_SetPriority(irq, timer_config[timer_num].priority); // wave mode, reset counter on match with RC, TC_Configure(tc, channel, TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC | TC_CMR_TCCLKS_TIMER_CLOCK1); @@ -105,12 +105,12 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { } void HAL_timer_enable_interrupt(const uint8_t timer_num) { - IRQn_Type irq = TimerConfig[timer_num].IRQ_Id; + IRQn_Type irq = timer_config[timer_num].IRQ_Id; NVIC_EnableIRQ(irq); } void HAL_timer_disable_interrupt(const uint8_t timer_num) { - IRQn_Type irq = TimerConfig[timer_num].IRQ_Id; + IRQn_Type irq = timer_config[timer_num].IRQ_Id; NVIC_DisableIRQ(irq); // We NEED memory barriers to ensure Interrupts are actually disabled! @@ -125,7 +125,7 @@ static bool NVIC_GetEnabledIRQ(IRQn_Type IRQn) { } bool HAL_timer_interrupt_enabled(const uint8_t timer_num) { - IRQn_Type irq = TimerConfig[timer_num].IRQ_Id; + IRQn_Type irq = timer_config[timer_num].IRQ_Id; return NVIC_GetEnabledIRQ(irq); } diff --git a/Marlin/src/HAL/DUE/timers.h b/Marlin/src/HAL/DUE/timers.h index 0e1ea07cc2..bab67826df 100644 --- a/Marlin/src/HAL/DUE/timers.h +++ b/Marlin/src/HAL/DUE/timers.h @@ -37,35 +37,35 @@ typedef uint32_t hal_timer_t; #define HAL_TIMER_RATE ((F_CPU) / 2) // frequency of timers peripherals -#ifndef STEP_TIMER_NUM - #define STEP_TIMER_NUM 2 // Timer Index for Stepper +#ifndef MF_TIMER_STEP + #define MF_TIMER_STEP 2 // Timer Index for Stepper #endif -#ifndef PULSE_TIMER_NUM - #define PULSE_TIMER_NUM STEP_TIMER_NUM +#ifndef MF_TIMER_PULSE + #define MF_TIMER_PULSE MF_TIMER_STEP #endif -#ifndef TEMP_TIMER_NUM - #define TEMP_TIMER_NUM 4 // Timer Index for Temperature +#ifndef MF_TIMER_TEMP + #define MF_TIMER_TEMP 4 // Timer Index for Temperature #endif -#ifndef TONE_TIMER_NUM - #define TONE_TIMER_NUM 6 // index of timer to use for beeper tones +#ifndef MF_TIMER_TONE + #define MF_TIMER_TONE 6 // index of timer to use for beeper tones #endif #define TEMP_TIMER_FREQUENCY 1000 // temperature interrupt frequency -#define STEPPER_TIMER_RATE HAL_TIMER_RATE // frequency of stepper timer (HAL_TIMER_RATE / STEPPER_TIMER_PRESCALE) -#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000) // stepper timer ticks per µs -#define STEPPER_TIMER_PRESCALE (CYCLES_PER_MICROSECOND / STEPPER_TIMER_TICKS_PER_US) +#define STEPPER_TIMER_RATE HAL_TIMER_RATE // frequency of stepper timer (HAL_TIMER_RATE / STEPPER_TIMER_PRESCALE) +#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000) // stepper timer ticks per µs +#define STEPPER_TIMER_PRESCALE (CYCLES_PER_MICROSECOND / STEPPER_TIMER_TICKS_PER_US) -#define PULSE_TIMER_RATE STEPPER_TIMER_RATE // frequency of pulse timer -#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE -#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US +#define PULSE_TIMER_RATE STEPPER_TIMER_RATE // frequency of pulse timer +#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE +#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US -#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM) -#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM) -#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM) +#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP) +#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP) +#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP) -#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM) -#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM) +#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP) +#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP) #ifndef HAL_STEP_TIMER_ISR #define HAL_STEP_TIMER_ISR() void TC2_Handler() @@ -92,7 +92,7 @@ typedef struct { // Public Variables // ------------------------ -extern const tTimerConfig TimerConfig[]; +extern const tTimerConfig timer_config[]; // ------------------------ // Public functions @@ -101,17 +101,17 @@ extern const tTimerConfig TimerConfig[]; void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency); FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const hal_timer_t compare) { - const tTimerConfig * const pConfig = &TimerConfig[timer_num]; + const tTimerConfig * const pConfig = &timer_config[timer_num]; pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_RC = compare; } FORCE_INLINE static hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) { - const tTimerConfig * const pConfig = &TimerConfig[timer_num]; + const tTimerConfig * const pConfig = &timer_config[timer_num]; return pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_RC; } FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) { - const tTimerConfig * const pConfig = &TimerConfig[timer_num]; + const tTimerConfig * const pConfig = &timer_config[timer_num]; return pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_CV; } @@ -120,7 +120,7 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { - const tTimerConfig * const pConfig = &TimerConfig[timer_num]; + const tTimerConfig * const pConfig = &timer_config[timer_num]; // Reading the status register clears the interrupt flag pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_SR; } diff --git a/Marlin/src/HAL/ESP32/HAL.cpp b/Marlin/src/HAL/ESP32/HAL.cpp index 6a66d519b3..810e386894 100644 --- a/Marlin/src/HAL/ESP32/HAL.cpp +++ b/Marlin/src/HAL/ESP32/HAL.cpp @@ -276,7 +276,7 @@ void analogWrite(pin_t pin, int value) { idx = numPWMUsed; pwmPins[idx] = pin; // Start timer on first use - if (idx == 0) HAL_timer_start(PWM_TIMER_NUM, PWM_TIMER_FREQUENCY); + if (idx == 0) HAL_timer_start(MF_TIMER_PWM, PWM_TIMER_FREQUENCY); ++numPWMUsed; } @@ -287,7 +287,7 @@ void analogWrite(pin_t pin, int value) { // Handle PWM timer interrupt HAL_PWM_TIMER_ISR() { - HAL_timer_isr_prologue(PWM_TIMER_NUM); + HAL_timer_isr_prologue(MF_TIMER_PWM); static uint8_t count = 0; @@ -301,7 +301,7 @@ HAL_PWM_TIMER_ISR() { // 128 for 7 Bit resolution count = (count + 1) & 0x7F; - HAL_timer_isr_epilogue(PWM_TIMER_NUM); + HAL_timer_isr_epilogue(MF_TIMER_PWM); } #endif // ARDUINO_ARCH_ESP32 diff --git a/Marlin/src/HAL/ESP32/Tone.cpp b/Marlin/src/HAL/ESP32/Tone.cpp index 376c0f32e1..9c16cdde80 100644 --- a/Marlin/src/HAL/ESP32/Tone.cpp +++ b/Marlin/src/HAL/ESP32/Tone.cpp @@ -38,16 +38,16 @@ volatile static int32_t toggles; void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration) { tone_pin = _pin; toggles = 2 * frequency * duration / 1000; - HAL_timer_start(TONE_TIMER_NUM, 2 * frequency); + HAL_timer_start(MF_TIMER_TONE, 2 * frequency); } void noTone(const pin_t _pin) { - HAL_timer_disable_interrupt(TONE_TIMER_NUM); + HAL_timer_disable_interrupt(MF_TIMER_TONE); WRITE(_pin, LOW); } HAL_TONE_TIMER_ISR() { - HAL_timer_isr_prologue(TONE_TIMER_NUM); + HAL_timer_isr_prologue(MF_TIMER_TONE); if (toggles) { toggles--; diff --git a/Marlin/src/HAL/ESP32/timers.cpp b/Marlin/src/HAL/ESP32/timers.cpp index 57662a6658..df0065f453 100644 --- a/Marlin/src/HAL/ESP32/timers.cpp +++ b/Marlin/src/HAL/ESP32/timers.cpp @@ -41,7 +41,7 @@ static timg_dev_t *TG[2] = {&TIMERG0, &TIMERG1}; -const tTimerConfig TimerConfig [NUM_HARDWARE_TIMERS] = { +const tTimerConfig timer_config[NUM_HARDWARE_TIMERS] = { { TIMER_GROUP_0, TIMER_0, STEPPER_TIMER_PRESCALE, stepTC_Handler }, // 0 - Stepper { TIMER_GROUP_0, TIMER_1, TEMP_TIMER_PRESCALE, tempTC_Handler }, // 1 - Temperature { TIMER_GROUP_1, TIMER_0, PWM_TIMER_PRESCALE, pwmTC_Handler }, // 2 - PWM @@ -53,7 +53,7 @@ const tTimerConfig TimerConfig [NUM_HARDWARE_TIMERS] = { // ------------------------ void IRAM_ATTR timer_isr(void *para) { - const tTimerConfig& timer = TimerConfig[(int)para]; + const tTimerConfig& timer = timer_config[(int)para]; // Retrieve the interrupt status and the counter value // from the timer that reported the interrupt @@ -82,7 +82,7 @@ void IRAM_ATTR timer_isr(void *para) { * @param frequency frequency of the timer */ void HAL_timer_start(const uint8_t timer_num, uint32_t frequency) { - const tTimerConfig timer = TimerConfig[timer_num]; + const tTimerConfig timer = timer_config[timer_num]; timer_config_t config; config.divider = timer.divider; @@ -115,7 +115,7 @@ void HAL_timer_start(const uint8_t timer_num, uint32_t frequency) { * @param count threshold at which the interrupt is triggered */ void HAL_timer_set_compare(const uint8_t timer_num, hal_timer_t count) { - const tTimerConfig timer = TimerConfig[timer_num]; + const tTimerConfig timer = timer_config[timer_num]; timer_set_alarm_value(timer.group, timer.idx, count); } @@ -125,7 +125,7 @@ void HAL_timer_set_compare(const uint8_t timer_num, hal_timer_t count) { * @return the timer current threshold for the alarm to be triggered */ hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) { - const tTimerConfig timer = TimerConfig[timer_num]; + const tTimerConfig timer = timer_config[timer_num]; uint64_t alarm_value; timer_get_alarm_value(timer.group, timer.idx, &alarm_value); @@ -139,7 +139,7 @@ hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) { * @return the current counter of the alarm */ hal_timer_t HAL_timer_get_count(const uint8_t timer_num) { - const tTimerConfig timer = TimerConfig[timer_num]; + const tTimerConfig timer = timer_config[timer_num]; uint64_t counter_value; timer_get_counter_value(timer.group, timer.idx, &counter_value); return counter_value; @@ -150,7 +150,7 @@ hal_timer_t HAL_timer_get_count(const uint8_t timer_num) { * @param timer_num timer number to enable interrupts on */ void HAL_timer_enable_interrupt(const uint8_t timer_num) { - //const tTimerConfig timer = TimerConfig[timer_num]; + //const tTimerConfig timer = timer_config[timer_num]; //timer_enable_intr(timer.group, timer.idx); } @@ -159,12 +159,12 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num) { * @param timer_num timer number to disable interrupts on */ void HAL_timer_disable_interrupt(const uint8_t timer_num) { - //const tTimerConfig timer = TimerConfig[timer_num]; + //const tTimerConfig timer = timer_config[timer_num]; //timer_disable_intr(timer.group, timer.idx); } bool HAL_timer_interrupt_enabled(const uint8_t timer_num) { - const tTimerConfig timer = TimerConfig[timer_num]; + const tTimerConfig timer = timer_config[timer_num]; return TG[timer.group]->int_ena.val | BIT(timer_num); } diff --git a/Marlin/src/HAL/ESP32/timers.h b/Marlin/src/HAL/ESP32/timers.h index a47697113d..b651ffe6b1 100644 --- a/Marlin/src/HAL/ESP32/timers.h +++ b/Marlin/src/HAL/ESP32/timers.h @@ -32,20 +32,20 @@ typedef uint64_t hal_timer_t; #define HAL_TIMER_TYPE_MAX 0xFFFFFFFFFFFFFFFFULL -#ifndef STEP_TIMER_NUM - #define STEP_TIMER_NUM 0 // Timer Index for Stepper +#ifndef MF_TIMER_STEP + #define MF_TIMER_STEP 0 // Timer Index for Stepper #endif -#ifndef PULSE_TIMER_NUM - #define PULSE_TIMER_NUM STEP_TIMER_NUM +#ifndef MF_TIMER_PULSE + #define MF_TIMER_PULSE MF_TIMER_STEP #endif -#ifndef TEMP_TIMER_NUM - #define TEMP_TIMER_NUM 1 // Timer Index for Temperature +#ifndef MF_TIMER_TEMP + #define MF_TIMER_TEMP 1 // Timer Index for Temperature #endif -#ifndef PWM_TIMER_NUM - #define PWM_TIMER_NUM 2 // index of timer to use for PWM outputs +#ifndef MF_TIMER_PWM + #define MF_TIMER_PWM 2 // index of timer to use for PWM outputs #endif -#ifndef TONE_TIMER_NUM - #define TONE_TIMER_NUM 3 // index of timer for beeper tones +#ifndef MF_TIMER_TONE + #define MF_TIMER_TONE 3 // index of timer for beeper tones #endif #define HAL_TIMER_RATE APB_CLK_FREQ // frequency of timer peripherals @@ -79,12 +79,12 @@ typedef uint64_t hal_timer_t; #define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE #define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US -#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM) -#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM) -#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM) +#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP) +#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP) +#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP) -#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM) -#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM) +#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP) +#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP) #ifndef HAL_TEMP_TIMER_ISR #define HAL_TEMP_TIMER_ISR() extern "C" void tempTC_Handler() @@ -121,7 +121,7 @@ typedef struct { // Public Variables // ------------------------ -extern const tTimerConfig TimerConfig[]; +extern const tTimerConfig timer_config[]; // ------------------------ // Public functions diff --git a/Marlin/src/HAL/LINUX/timers.h b/Marlin/src/HAL/LINUX/timers.h index 1beaea95ab..21dba62071 100644 --- a/Marlin/src/HAL/LINUX/timers.h +++ b/Marlin/src/HAL/LINUX/timers.h @@ -37,14 +37,14 @@ typedef uint32_t hal_timer_t; #define HAL_TIMER_RATE ((SystemCoreClock) / 4) // frequency of timers peripherals -#ifndef STEP_TIMER_NUM - #define STEP_TIMER_NUM 0 // Timer Index for Stepper +#ifndef MF_TIMER_STEP + #define MF_TIMER_STEP 0 // Timer Index for Stepper #endif -#ifndef PULSE_TIMER_NUM - #define PULSE_TIMER_NUM STEP_TIMER_NUM +#ifndef MF_TIMER_PULSE + #define MF_TIMER_PULSE MF_TIMER_STEP #endif -#ifndef TEMP_TIMER_NUM - #define TEMP_TIMER_NUM 1 // Timer Index for Temperature +#ifndef MF_TIMER_TEMP + #define MF_TIMER_TEMP 1 // Timer Index for Temperature #endif #define TEMP_TIMER_RATE 1000000 @@ -58,12 +58,12 @@ typedef uint32_t hal_timer_t; #define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE #define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US -#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM) -#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM) -#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM) +#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP) +#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP) +#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP) -#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM) -#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM) +#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP) +#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP) #ifndef HAL_STEP_TIMER_ISR #define HAL_STEP_TIMER_ISR() extern "C" void TIMER0_IRQHandler() @@ -77,7 +77,6 @@ typedef uint32_t hal_timer_t; #define HAL_PWM_TIMER_ISR() extern "C" void TIMER3_IRQHandler() #define HAL_PWM_TIMER_IRQn - void HAL_timer_init(); void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency); diff --git a/Marlin/src/HAL/LPC1768/timers.cpp b/Marlin/src/HAL/LPC1768/timers.cpp index a7a40584da..bbb13f81da 100644 --- a/Marlin/src/HAL/LPC1768/timers.cpp +++ b/Marlin/src/HAL/LPC1768/timers.cpp @@ -40,7 +40,7 @@ void HAL_timer_init() { void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { switch (timer_num) { - case 0: + case MF_TIMER_STEP: LPC_TIM0->MCR = _BV(SBIT_MR0I) | _BV(SBIT_MR0R); // Match on MR0, reset on MR0, interrupts when NVIC enables them LPC_TIM0->MR0 = uint32_t(STEPPER_TIMER_RATE) / frequency; // Match value (period) to set frequency LPC_TIM0->TCR = _BV(SBIT_CNTEN); // Counter Enable @@ -49,7 +49,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { NVIC_EnableIRQ(TIMER0_IRQn); break; - case 1: + case MF_TIMER_TEMP: LPC_TIM1->MCR = _BV(SBIT_MR0I) | _BV(SBIT_MR0R); // Match on MR0, reset on MR0, interrupts when NVIC enables them LPC_TIM1->MR0 = uint32_t(TEMP_TIMER_RATE) / frequency; LPC_TIM1->TCR = _BV(SBIT_CNTEN); // Counter Enable diff --git a/Marlin/src/HAL/LPC1768/timers.h b/Marlin/src/HAL/LPC1768/timers.h index 4b63854685..ef437cabac 100644 --- a/Marlin/src/HAL/LPC1768/timers.h +++ b/Marlin/src/HAL/LPC1768/timers.h @@ -60,17 +60,17 @@ typedef uint32_t hal_timer_t; #define HAL_TIMER_RATE ((F_CPU) / 4) // frequency of timers peripherals -#ifndef STEP_TIMER_NUM - #define STEP_TIMER_NUM 0 // Timer Index for Stepper +#ifndef MF_TIMER_STEP + #define MF_TIMER_STEP 0 // Timer Index for Stepper #endif -#ifndef PULSE_TIMER_NUM - #define PULSE_TIMER_NUM STEP_TIMER_NUM +#ifndef MF_TIMER_PULSE + #define MF_TIMER_PULSE MF_TIMER_STEP #endif -#ifndef TEMP_TIMER_NUM - #define TEMP_TIMER_NUM 1 // Timer Index for Temperature +#ifndef MF_TIMER_TEMP + #define MF_TIMER_TEMP 1 // Timer Index for Temperature #endif -#ifndef PWM_TIMER_NUM - #define PWM_TIMER_NUM 3 // Timer Index for PWM +#ifndef MF_TIMER_PWM + #define MF_TIMER_PWM 3 // Timer Index for PWM #endif #define TEMP_TIMER_RATE 1000000 @@ -84,23 +84,23 @@ typedef uint32_t hal_timer_t; #define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE #define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US -#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM) -#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM) -#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM) +#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP) +#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP) +#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP) -#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM) -#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM) +#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP) +#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP) #ifndef HAL_STEP_TIMER_ISR - #define HAL_STEP_TIMER_ISR() _HAL_TIMER_ISR(STEP_TIMER_NUM) + #define HAL_STEP_TIMER_ISR() _HAL_TIMER_ISR(MF_TIMER_STEP) #endif #ifndef HAL_TEMP_TIMER_ISR - #define HAL_TEMP_TIMER_ISR() _HAL_TIMER_ISR(TEMP_TIMER_NUM) + #define HAL_TEMP_TIMER_ISR() _HAL_TIMER_ISR(MF_TIMER_TEMP) #endif // Timer references by index -#define STEP_TIMER_PTR _HAL_TIMER(STEP_TIMER_NUM) -#define TEMP_TIMER_PTR _HAL_TIMER(TEMP_TIMER_NUM) +#define STEP_TIMER_PTR _HAL_TIMER(MF_TIMER_STEP) +#define TEMP_TIMER_PTR _HAL_TIMER(MF_TIMER_TEMP) // ------------------------ // Public functions @@ -110,38 +110,38 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency); FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const hal_timer_t compare) { switch (timer_num) { - case 0: STEP_TIMER_PTR->MR0 = compare; break; // Stepper Timer Match Register 0 - case 1: TEMP_TIMER_PTR->MR0 = compare; break; // Temp Timer Match Register 0 + case MF_TIMER_STEP: STEP_TIMER_PTR->MR0 = compare; break; // Stepper Timer Match Register 0 + case MF_TIMER_TEMP: TEMP_TIMER_PTR->MR0 = compare; break; // Temp Timer Match Register 0 } } FORCE_INLINE static hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) { switch (timer_num) { - case 0: return STEP_TIMER_PTR->MR0; // Stepper Timer Match Register 0 - case 1: return TEMP_TIMER_PTR->MR0; // Temp Timer Match Register 0 + case MF_TIMER_STEP: return STEP_TIMER_PTR->MR0; // Stepper Timer Match Register 0 + case MF_TIMER_TEMP: return TEMP_TIMER_PTR->MR0; // Temp Timer Match Register 0 } return 0; } FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) { switch (timer_num) { - case 0: return STEP_TIMER_PTR->TC; // Stepper Timer Count - case 1: return TEMP_TIMER_PTR->TC; // Temp Timer Count + case MF_TIMER_STEP: return STEP_TIMER_PTR->TC; // Stepper Timer Count + case MF_TIMER_TEMP: return TEMP_TIMER_PTR->TC; // Temp Timer Count } return 0; } FORCE_INLINE static void HAL_timer_enable_interrupt(const uint8_t timer_num) { switch (timer_num) { - case 0: NVIC_EnableIRQ(TIMER0_IRQn); break; // Enable interrupt handler - case 1: NVIC_EnableIRQ(TIMER1_IRQn); break; // Enable interrupt handler + case MF_TIMER_STEP: NVIC_EnableIRQ(TIMER0_IRQn); break; // Enable interrupt handler + case MF_TIMER_TEMP: NVIC_EnableIRQ(TIMER1_IRQn); break; // Enable interrupt handler } } FORCE_INLINE static void HAL_timer_disable_interrupt(const uint8_t timer_num) { switch (timer_num) { - case 0: NVIC_DisableIRQ(TIMER0_IRQn); break; // Disable interrupt handler - case 1: NVIC_DisableIRQ(TIMER1_IRQn); break; // Disable interrupt handler + case MF_TIMER_STEP: NVIC_DisableIRQ(TIMER0_IRQn); break; // Disable interrupt handler + case MF_TIMER_TEMP: NVIC_DisableIRQ(TIMER1_IRQn); break; // Disable interrupt handler } // We NEED memory barriers to ensure Interrupts are actually disabled! @@ -157,16 +157,16 @@ FORCE_INLINE static bool NVIC_GetEnableIRQ(IRQn_Type IRQn) { FORCE_INLINE static bool HAL_timer_interrupt_enabled(const uint8_t timer_num) { switch (timer_num) { - case 0: return NVIC_GetEnableIRQ(TIMER0_IRQn); // Check if interrupt is enabled or not - case 1: return NVIC_GetEnableIRQ(TIMER1_IRQn); // Check if interrupt is enabled or not + case MF_TIMER_STEP: return NVIC_GetEnableIRQ(TIMER0_IRQn); // Check if interrupt is enabled or not + case MF_TIMER_TEMP: return NVIC_GetEnableIRQ(TIMER1_IRQn); // Check if interrupt is enabled or not } return false; } FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { switch (timer_num) { - case 0: SBI(STEP_TIMER_PTR->IR, SBIT_CNTEN); break; - case 1: SBI(TEMP_TIMER_PTR->IR, SBIT_CNTEN); break; + case MF_TIMER_STEP: SBI(STEP_TIMER_PTR->IR, SBIT_CNTEN); break; + case MF_TIMER_TEMP: SBI(TEMP_TIMER_PTR->IR, SBIT_CNTEN); break; } } diff --git a/Marlin/src/HAL/NATIVE_SIM/timers.h b/Marlin/src/HAL/NATIVE_SIM/timers.h index c61eb29e76..4d140a4b6c 100644 --- a/Marlin/src/HAL/NATIVE_SIM/timers.h +++ b/Marlin/src/HAL/NATIVE_SIM/timers.h @@ -37,17 +37,17 @@ typedef uint64_t hal_timer_t; #define HAL_TIMER_RATE ((SystemCoreClock) / 4) // frequency of timers peripherals -#ifndef STEP_TIMER_NUM - #define STEP_TIMER_NUM 0 // Timer Index for Stepper +#ifndef MF_TIMER_STEP + #define MF_TIMER_STEP 0 // Timer Index for Stepper #endif -#ifndef PULSE_TIMER_NUM - #define PULSE_TIMER_NUM STEP_TIMER_NUM +#ifndef MF_TIMER_PULSE + #define MF_TIMER_PULSE MF_TIMER_STEP #endif -#ifndef TEMP_TIMER_NUM - #define TEMP_TIMER_NUM 1 // Timer Index for Temperature +#ifndef MF_TIMER_TEMP + #define MF_TIMER_TEMP 1 // Timer Index for Temperature #endif -#ifndef SYSTICK_TIMER_NUM - #define SYSTICK_TIMER_NUM 2 // Timer Index for Systick +#ifndef MF_TIMER_SYSTICK + #define MF_TIMER_SYSTICK 2 // Timer Index for Systick #endif #define SYSTICK_TIMER_FREQUENCY 1000 @@ -62,12 +62,12 @@ typedef uint64_t hal_timer_t; #define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE #define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US -#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM) -#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM) -#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM) +#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP) +#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP) +#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP) -#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM) -#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM) +#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP) +#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP) #ifndef HAL_STEP_TIMER_ISR #define HAL_STEP_TIMER_ISR() extern "C" void TIMER0_IRQHandler() diff --git a/Marlin/src/HAL/SAMD51/Servo.cpp b/Marlin/src/HAL/SAMD51/Servo.cpp index 9bab8e89be..23ab21c615 100644 --- a/Marlin/src/HAL/SAMD51/Servo.cpp +++ b/Marlin/src/HAL/SAMD51/Servo.cpp @@ -53,7 +53,7 @@ static volatile int8_t currentServoIndex[_Nbr_16timers]; // index for the servo being pulsed for each timer (or -1 if refresh interval) FORCE_INLINE static uint16_t getTimerCount() { - Tc * const tc = TimerConfig[SERVO_TC].pTc; + Tc * const tc = timer_config[SERVO_TC].pTc; tc->COUNT16.CTRLBSET.reg = TC_CTRLBCLR_CMD_READSYNC; SYNC(tc->COUNT16.SYNCBUSY.bit.CTRLB || tc->COUNT16.SYNCBUSY.bit.COUNT); @@ -65,7 +65,7 @@ FORCE_INLINE static uint16_t getTimerCount() { // Interrupt handler for the TC // ---------------------------- HAL_SERVO_TIMER_ISR() { - Tc * const tc = TimerConfig[SERVO_TC].pTc; + Tc * const tc = timer_config[SERVO_TC].pTc; const timer16_Sequence_t timer = #ifndef _useTimer1 _timer2 @@ -125,7 +125,7 @@ HAL_SERVO_TIMER_ISR() { } void initISR(timer16_Sequence_t timer) { - Tc * const tc = TimerConfig[SERVO_TC].pTc; + Tc * const tc = timer_config[SERVO_TC].pTc; const uint8_t tcChannel = TIMER_TCCHANNEL(timer); static bool initialized = false; // Servo TC has been initialized @@ -202,7 +202,7 @@ void initISR(timer16_Sequence_t timer) { } void finISR(timer16_Sequence_t timer) { - Tc * const tc = TimerConfig[SERVO_TC].pTc; + Tc * const tc = timer_config[SERVO_TC].pTc; const uint8_t tcChannel = TIMER_TCCHANNEL(timer); // Disable the match channel interrupt request diff --git a/Marlin/src/HAL/SAMD51/inc/SanityCheck.h b/Marlin/src/HAL/SAMD51/inc/SanityCheck.h index 38c6dd9e08..1b876c947d 100644 --- a/Marlin/src/HAL/SAMD51/inc/SanityCheck.h +++ b/Marlin/src/HAL/SAMD51/inc/SanityCheck.h @@ -36,7 +36,7 @@ #error "OnBoard SPI BUS can't be shared with other devices." #endif -#if SERVO_TC == RTC_TIMER_NUM +#if SERVO_TC == MF_TIMER_RTC #error "Servos can't use RTC timer" #endif diff --git a/Marlin/src/HAL/SAMD51/timers.cpp b/Marlin/src/HAL/SAMD51/timers.cpp index 7a535299db..ce13dd231e 100644 --- a/Marlin/src/HAL/SAMD51/timers.cpp +++ b/Marlin/src/HAL/SAMD51/timers.cpp @@ -31,13 +31,13 @@ // Local defines // -------------------------------------------------------------------------- -#define NUM_HARDWARE_TIMERS 8 +#define NUM_HARDWARE_TIMERS 9 // -------------------------------------------------------------------------- // Private Variables // -------------------------------------------------------------------------- -const tTimerConfig TimerConfig[NUM_HARDWARE_TIMERS+1] = { +const tTimerConfig timer_config[NUM_HARDWARE_TIMERS] = { { {.pTc=TC0}, TC0_IRQn, TC_PRIORITY(0) }, // 0 - stepper (assigned priority 2) { {.pTc=TC1}, TC1_IRQn, TC_PRIORITY(1) }, // 1 - stepper (needed by 32 bit timers) { {.pTc=TC2}, TC2_IRQn, 5 }, // 2 - tone (reserved by framework and fixed assigned priority 5) @@ -67,13 +67,13 @@ FORCE_INLINE void Disable_Irq(IRQn_Type irq) { // -------------------------------------------------------------------------- void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { - IRQn_Type irq = TimerConfig[timer_num].IRQ_Id; + IRQn_Type irq = timer_config[timer_num].IRQ_Id; // Disable interrupt, just in case it was already enabled Disable_Irq(irq); - if (timer_num == RTC_TIMER_NUM) { - Rtc * const rtc = TimerConfig[timer_num].pRtc; + if (timer_num == MF_TIMER_RTC) { + Rtc * const rtc = timer_config[timer_num].pRtc; // Disable timer interrupt rtc->MODE0.INTENCLR.reg = RTC_MODE0_INTENCLR_CMP0; @@ -101,7 +101,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { SYNC(rtc->MODE0.SYNCBUSY.bit.ENABLE); } else { - Tc * const tc = TimerConfig[timer_num].pTc; + Tc * const tc = timer_config[timer_num].pTc; // Disable timer interrupt tc->COUNT32.INTENCLR.reg = TC_INTENCLR_OVF; // disable overflow interrupt @@ -141,17 +141,17 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { } // Finally, enable IRQ - NVIC_SetPriority(irq, TimerConfig[timer_num].priority); + NVIC_SetPriority(irq, timer_config[timer_num].priority); NVIC_EnableIRQ(irq); } void HAL_timer_enable_interrupt(const uint8_t timer_num) { - const IRQn_Type irq = TimerConfig[timer_num].IRQ_Id; + const IRQn_Type irq = timer_config[timer_num].IRQ_Id; NVIC_EnableIRQ(irq); } void HAL_timer_disable_interrupt(const uint8_t timer_num) { - const IRQn_Type irq = TimerConfig[timer_num].IRQ_Id; + const IRQn_Type irq = timer_config[timer_num].IRQ_Id; Disable_Irq(irq); } @@ -161,7 +161,7 @@ static bool NVIC_GetEnabledIRQ(IRQn_Type IRQn) { } bool HAL_timer_interrupt_enabled(const uint8_t timer_num) { - const IRQn_Type irq = TimerConfig[timer_num].IRQ_Id; + const IRQn_Type irq = timer_config[timer_num].IRQ_Id; return NVIC_GetEnabledIRQ(irq); } diff --git a/Marlin/src/HAL/SAMD51/timers.h b/Marlin/src/HAL/SAMD51/timers.h index dc6e38b730..86e980c566 100644 --- a/Marlin/src/HAL/SAMD51/timers.h +++ b/Marlin/src/HAL/SAMD51/timers.h @@ -25,21 +25,22 @@ // -------------------------------------------------------------------------- // Defines // -------------------------------------------------------------------------- -#define RTC_TIMER_NUM 8 // This is not a TC but a RTC typedef uint32_t hal_timer_t; #define HAL_TIMER_TYPE_MAX 0xFFFFFFFF #define HAL_TIMER_RATE F_CPU // frequency of timers peripherals -#ifndef STEP_TIMER_NUM - #define STEP_TIMER_NUM 0 // Timer Index for Stepper +#define MF_TIMER_RTC 8 // This is not a TC but a RTC + +#ifndef MF_TIMER_STEP + #define MF_TIMER_STEP 0 // Timer Index for Stepper #endif -#ifndef PULSE_TIMER_NUM - #define PULSE_TIMER_NUM STEP_TIMER_NUM +#ifndef MF_TIMER_PULSE + #define MF_TIMER_PULSE MF_TIMER_STEP #endif -#ifndef TEMP_TIMER_NUM - #define TEMP_TIMER_NUM RTC_TIMER_NUM // Timer Index for Temperature +#ifndef MF_TIMER_TEMP + #define MF_TIMER_TEMP MF_TIMER_RTC // Timer Index for Temperature #endif #define TEMP_TIMER_FREQUENCY 1000 // temperature interrupt frequency @@ -52,30 +53,29 @@ typedef uint32_t hal_timer_t; #define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE #define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US -#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM) -#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM) -#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM) +#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP) +#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP) +#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP) -#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM) -#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM) +#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP) +#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP) -#define TC_PRIORITY(t) t == SERVO_TC ? 1 \ - : (t == STEP_TIMER_NUM || t == PULSE_TIMER_NUM) ? 2 \ - : (t == TEMP_TIMER_NUM) ? 6 \ - : 7 +#define TC_PRIORITY(t) ( t == SERVO_TC ? 1 \ + : (t == MF_TIMER_STEP || t == MF_TIMER_PULSE) ? 2 \ + : (t == MF_TIMER_TEMP) ? 6 : 7 ) #define _TC_HANDLER(t) void TC##t##_Handler() #define TC_HANDLER(t) _TC_HANDLER(t) #ifndef HAL_STEP_TIMER_ISR - #define HAL_STEP_TIMER_ISR() TC_HANDLER(STEP_TIMER_NUM) + #define HAL_STEP_TIMER_ISR() TC_HANDLER(MF_TIMER_STEP) #endif -#if STEP_TIMER_NUM != PULSE_TIMER_NUM - #define HAL_PULSE_TIMER_ISR() TC_HANDLER(PULSE_TIMER_NUM) +#if MF_TIMER_STEP != MF_TIMER_PULSE + #define HAL_PULSE_TIMER_ISR() TC_HANDLER(MF_TIMER_PULSE) #endif -#if TEMP_TIMER_NUM == RTC_TIMER_NUM +#if MF_TIMER_TEMP == MF_TIMER_RTC #define HAL_TEMP_TIMER_ISR() void RTC_Handler() #else - #define HAL_TEMP_TIMER_ISR() TC_HANDLER(TEMP_TIMER_NUM) + #define HAL_TEMP_TIMER_ISR() TC_HANDLER(MF_TIMER_TEMP) #endif // -------------------------------------------------------------------------- @@ -95,7 +95,7 @@ typedef struct { // Public Variables // -------------------------------------------------------------------------- -extern const tTimerConfig TimerConfig[]; +extern const tTimerConfig timer_config[]; // -------------------------------------------------------------------------- // Public functions @@ -104,20 +104,20 @@ extern const tTimerConfig TimerConfig[]; void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency); FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const hal_timer_t compare) { - // Should never be called with timer RTC_TIMER_NUM - Tc * const tc = TimerConfig[timer_num].pTc; + // Should never be called with timer MF_TIMER_RTC + Tc * const tc = timer_config[timer_num].pTc; tc->COUNT32.CC[0].reg = compare; } FORCE_INLINE static hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) { - // Should never be called with timer RTC_TIMER_NUM - Tc * const tc = TimerConfig[timer_num].pTc; + // Should never be called with timer MF_TIMER_RTC + Tc * const tc = timer_config[timer_num].pTc; return (hal_timer_t)tc->COUNT32.CC[0].reg; } FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) { - // Should never be called with timer RTC_TIMER_NUM - Tc * const tc = TimerConfig[timer_num].pTc; + // Should never be called with timer MF_TIMER_RTC + Tc * const tc = timer_config[timer_num].pTc; tc->COUNT32.CTRLBSET.reg = TC_CTRLBCLR_CMD_READSYNC; SYNC(tc->COUNT32.SYNCBUSY.bit.CTRLB || tc->COUNT32.SYNCBUSY.bit.COUNT); return tc->COUNT32.COUNT.reg; @@ -128,13 +128,13 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { - if (timer_num == RTC_TIMER_NUM) { - Rtc * const rtc = TimerConfig[timer_num].pRtc; + if (timer_num == MF_TIMER_RTC) { + Rtc * const rtc = timer_config[timer_num].pRtc; // Clear interrupt flag rtc->MODE0.INTFLAG.reg = RTC_MODE0_INTFLAG_CMP0; } else { - Tc * const tc = TimerConfig[timer_num].pTc; + Tc * const tc = timer_config[timer_num].pTc; // Clear interrupt flag tc->COUNT32.INTFLAG.reg = TC_INTFLAG_OVF; } diff --git a/Marlin/src/HAL/STM32/fast_pwm.cpp b/Marlin/src/HAL/STM32/fast_pwm.cpp index 4986e138a1..8eaecd718e 100644 --- a/Marlin/src/HAL/STM32/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32/fast_pwm.cpp @@ -70,9 +70,6 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 void set_pwm_frequency(const pin_t pin, int f_desired) { if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer - HardwareTimer *HT; - PinName pin_name = digitalPinToPinName(pin); - TIM_TypeDef *Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance uint32_t index = get_timer_index(Instance); @@ -83,11 +80,13 @@ void set_pwm_frequency(const pin_t pin, int f_desired) { #endif ) return; - if (HardwareTimer_Handle[index] == nullptr) // If frequency is set before duty we need to create a handle here. + const PinName pin_name = digitalPinToPinName(pin); + TIM_TypeDef * const Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance + if (HardwareTimer_Handle[index] == nullptr) // If frequency is set before duty we need to create a handle here. HardwareTimer_Handle[index]->__this = new HardwareTimer((TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM)); - HT = (HardwareTimer *)(HardwareTimer_Handle[index]->__this); + HardwareTimer * const HT = (HardwareTimer *)(HardwareTimer_Handle[index]->__this); timer_freq[index] = f_desired; // Save the last frequency so duty will not set the default for this timer number. - HT->setOverflow(f_desired, HERTZ_FORMAT); + HT->setOverflow(f_desired, HERTZ_FORMAT); } #endif // HAL_STM32 diff --git a/Marlin/src/HAL/STM32/timers.cpp b/Marlin/src/HAL/STM32/timers.cpp index 9b69323ef5..8f1659591b 100644 --- a/Marlin/src/HAL/STM32/timers.cpp +++ b/Marlin/src/HAL/STM32/timers.cpp @@ -110,7 +110,7 @@ HardwareTimer *timer_instance[NUM_HARDWARE_TIMERS] = { nullptr }; uint32_t GetStepperTimerClkFreq() { // Timer input clocks vary between devices, and in some cases between timers on the same device. // Retrieve at runtime to ensure device compatibility. Cache result to avoid repeated overhead. - static uint32_t clkfreq = timer_instance[STEP_TIMER_NUM]->getTimerClkFreq(); + static uint32_t clkfreq = timer_instance[MF_TIMER_STEP]->getTimerClkFreq(); return clkfreq; } @@ -118,7 +118,7 @@ uint32_t GetStepperTimerClkFreq() { void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { if (!HAL_timer_initialized(timer_num)) { switch (timer_num) { - case STEP_TIMER_NUM: // STEPPER TIMER - use a 32bit timer if possible + case MF_TIMER_STEP: // STEPPER TIMER - use a 32bit timer if possible timer_instance[timer_num] = new HardwareTimer(STEP_TIMER_DEV); /* Set the prescaler to the final desired value. * This will change the effective ISR callback frequency but when @@ -137,7 +137,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { timer_instance[timer_num]->setPrescaleFactor(STEPPER_TIMER_PRESCALE); //the -1 is done internally timer_instance[timer_num]->setOverflow(_MIN(hal_timer_t(HAL_TIMER_TYPE_MAX), (HAL_TIMER_RATE) / (STEPPER_TIMER_PRESCALE) /* /frequency */), TICK_FORMAT); break; - case TEMP_TIMER_NUM: // TEMP TIMER - any available 16bit timer + case MF_TIMER_TEMP: // TEMP TIMER - any available 16bit timer timer_instance[timer_num] = new HardwareTimer(TEMP_TIMER_DEV); // The prescale factor is computed automatically for HERTZ_FORMAT timer_instance[timer_num]->setOverflow(frequency, HERTZ_FORMAT); @@ -157,10 +157,10 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { // These calls can be removed and replaced with // timer_instance[timer_num]->setInterruptPriority switch (timer_num) { - case STEP_TIMER_NUM: + case MF_TIMER_STEP: timer_instance[timer_num]->setInterruptPriority(STEP_TIMER_IRQ_PRIO, 0); break; - case TEMP_TIMER_NUM: + case MF_TIMER_TEMP: timer_instance[timer_num]->setInterruptPriority(TEMP_TIMER_IRQ_PRIO, 0); break; } @@ -170,10 +170,10 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { void HAL_timer_enable_interrupt(const uint8_t timer_num) { if (HAL_timer_initialized(timer_num) && !timer_instance[timer_num]->hasInterrupt()) { switch (timer_num) { - case STEP_TIMER_NUM: + case MF_TIMER_STEP: timer_instance[timer_num]->attachInterrupt(Step_Handler); break; - case TEMP_TIMER_NUM: + case MF_TIMER_TEMP: timer_instance[timer_num]->attachInterrupt(Temp_Handler); break; } diff --git a/Marlin/src/HAL/STM32/timers.h b/Marlin/src/HAL/STM32/timers.h index 7a35e43210..ae70e65886 100644 --- a/Marlin/src/HAL/STM32/timers.h +++ b/Marlin/src/HAL/STM32/timers.h @@ -42,14 +42,14 @@ #define NUM_HARDWARE_TIMERS 2 -#ifndef STEP_TIMER_NUM - #define STEP_TIMER_NUM 0 // Timer Index for Stepper +#ifndef MF_TIMER_STEP + #define MF_TIMER_STEP 0 // Timer Index for Stepper #endif -#ifndef PULSE_TIMER_NUM - #define PULSE_TIMER_NUM STEP_TIMER_NUM +#ifndef MF_TIMER_PULSE + #define MF_TIMER_PULSE MF_TIMER_STEP #endif -#ifndef TEMP_TIMER_NUM - #define TEMP_TIMER_NUM 1 // Timer Index for Temperature +#ifndef MF_TIMER_TEMP + #define MF_TIMER_TEMP 1 // Timer Index for Temperature #endif #define TEMP_TIMER_FREQUENCY 1000 // Temperature::isr() is expected to be called at around 1kHz @@ -64,12 +64,12 @@ extern uint32_t GetStepperTimerClkFreq(); #define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE #define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US -#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM) -#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM) -#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM) +#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP) +#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP) +#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP) -#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM) -#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM) +#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP) +#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP) extern void Step_Handler(); extern void Temp_Handler(); diff --git a/Marlin/src/HAL/STM32F1/HAL.h b/Marlin/src/HAL/STM32F1/HAL.h index 026e83bc0d..153cfe8ac8 100644 --- a/Marlin/src/HAL/STM32F1/HAL.h +++ b/Marlin/src/HAL/STM32F1/HAL.h @@ -266,7 +266,7 @@ void flashFirmware(const int16_t); #ifndef PWM_FREQUENCY #define PWM_FREQUENCY 1000 // Default PWM Frequency -#endif +#endif #define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment /** @@ -281,6 +281,6 @@ void set_pwm_frequency(const pin_t pin, int f_desired); * Set the PWM duty cycle of the provided pin to the provided value * Optionally allows inverting the duty cycle [default = false] * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] - * The timer must be pre-configured with set_pwm_frequency() if the default frequency is not desired. + * The timer must be pre-configured with set_pwm_frequency() if the default frequency is not desired. */ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); diff --git a/Marlin/src/HAL/STM32F1/Servo.cpp b/Marlin/src/HAL/STM32F1/Servo.cpp index 36f7c6d512..8dc1ef7b6a 100644 --- a/Marlin/src/HAL/STM32F1/Servo.cpp +++ b/Marlin/src/HAL/STM32F1/Servo.cpp @@ -60,7 +60,7 @@ uint8_t ServoCount = 0; #define US_TO_ANGLE(us) int16_t(map((us), SERVO_DEFAULT_MIN_PW, SERVO_DEFAULT_MAX_PW, minAngle, maxAngle)) void libServo::servoWrite(uint8_t inPin, uint16_t duty_cycle) { - #ifdef SERVO0_TIMER_NUM + #ifdef MF_TIMER_SERVO0 if (servoIndex == 0) { pwmSetDuty(duty_cycle); return; @@ -74,7 +74,7 @@ void libServo::servoWrite(uint8_t inPin, uint16_t duty_cycle) { libServo::libServo() { servoIndex = ServoCount < MAX_SERVOS ? ServoCount++ : INVALID_SERVO; - timer_set_interrupt_priority(SERVO0_TIMER_NUM, SERVO0_TIMER_IRQ_PRIO); + HAL_timer_set_interrupt_priority(MF_TIMER_SERVO0, SERVO0_TIMER_IRQ_PRIO); } bool libServo::attach(const int32_t inPin, const int32_t inMinAngle, const int32_t inMaxAngle) { @@ -85,7 +85,7 @@ bool libServo::attach(const int32_t inPin, const int32_t inMinAngle, const int32 maxAngle = inMaxAngle; angle = -1; - #ifdef SERVO0_TIMER_NUM + #ifdef MF_TIMER_SERVO0 if (servoIndex == 0 && setupSoftPWM(inPin)) { pin = inPin; // set attached() return true; @@ -119,7 +119,7 @@ bool libServo::detach() { int32_t libServo::read() const { if (attached()) { - #ifdef SERVO0_TIMER_NUM + #ifdef MF_TIMER_SERVO0 if (servoIndex == 0) return angle; #endif timer_dev *tdev = PIN_MAP[pin].timer_device; @@ -141,9 +141,9 @@ void libServo::move(const int32_t value) { } } -#ifdef SERVO0_TIMER_NUM +#ifdef MF_TIMER_SERVO0 extern "C" void Servo_IRQHandler() { - static timer_dev *tdev = get_timer_dev(SERVO0_TIMER_NUM); + static timer_dev *tdev = HAL_get_timer_dev(MF_TIMER_SERVO0); uint16_t SR = timer_get_status(tdev); if (SR & TIMER_SR_CC1IF) { // channel 1 off #ifdef SERVO0_PWM_OD @@ -164,7 +164,7 @@ void libServo::move(const int32_t value) { } bool libServo::setupSoftPWM(const int32_t inPin) { - timer_dev *tdev = get_timer_dev(SERVO0_TIMER_NUM); + timer_dev *tdev = HAL_get_timer_dev(MF_TIMER_SERVO0); if (!tdev) return false; #ifdef SERVO0_PWM_OD OUT_WRITE_OD(inPin, 1); @@ -189,7 +189,7 @@ void libServo::move(const int32_t value) { } void libServo::pwmSetDuty(const uint16_t duty_cycle) { - timer_dev *tdev = get_timer_dev(SERVO0_TIMER_NUM); + timer_dev *tdev = HAL_get_timer_dev(MF_TIMER_SERVO0); timer_set_compare(tdev, 1, duty_cycle); timer_generate_update(tdev); if (duty_cycle) { @@ -208,7 +208,7 @@ void libServo::move(const int32_t value) { } void libServo::pauseSoftPWM() { // detach - timer_dev *tdev = get_timer_dev(SERVO0_TIMER_NUM); + timer_dev *tdev = HAL_get_timer_dev(MF_TIMER_SERVO0); timer_pause(tdev); pwmSetDuty(0); } diff --git a/Marlin/src/HAL/STM32F1/fast_pwm.cpp b/Marlin/src/HAL/STM32F1/fast_pwm.cpp index b510a4c8a0..994e62dbcd 100644 --- a/Marlin/src/HAL/STM32F1/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32F1/fast_pwm.cpp @@ -35,7 +35,6 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 uint16_t max_val = timer->regs.bas->ARR * v / v_size; if (invert) max_val = v_size - max_val; pwmWrite(pin, max_val); - } void set_pwm_frequency(const pin_t pin, int f_desired) { @@ -45,10 +44,10 @@ void set_pwm_frequency(const pin_t pin, int f_desired) { uint8_t channel = PIN_MAP[pin].timer_channel; // Protect used timers - if (timer == get_timer_dev(TEMP_TIMER_NUM)) return; - if (timer == get_timer_dev(STEP_TIMER_NUM)) return; - #if PULSE_TIMER_NUM != STEP_TIMER_NUM - if (timer == get_timer_dev(PULSE_TIMER_NUM)) return; + if (timer == HAL_get_timer_dev(MF_TIMER_TEMP)) return; + if (timer == HAL_get_timer_dev(MF_TIMER_STEP)) return; + #if MF_TIMER_PULSE != MF_TIMER_STEP + if (timer == HAL_get_timer_dev(MF_TIMER_PULSE)) return; #endif if (!(timer->regs.bas->SR & TIMER_CR1_CEN)) // Ensure the timer is enabled diff --git a/Marlin/src/HAL/STM32F1/timers.cpp b/Marlin/src/HAL/STM32F1/timers.cpp index 8c2df1e216..112c730b9a 100644 --- a/Marlin/src/HAL/STM32F1/timers.cpp +++ b/Marlin/src/HAL/STM32F1/timers.cpp @@ -47,10 +47,7 @@ * TODO: Calculate Timer prescale value, so we get the 32bit to adjust */ - - - -void timer_set_interrupt_priority(uint_fast8_t timer_num, uint_fast8_t priority) { +void HAL_timer_set_interrupt_priority(uint_fast8_t timer_num, uint_fast8_t priority) { nvic_irq_num irq_num; switch (timer_num) { case 1: irq_num = NVIC_TIMER1_CC; break; @@ -73,7 +70,6 @@ void timer_set_interrupt_priority(uint_fast8_t timer_num, uint_fast8_t priority) nvic_irq_set_priority(irq_num, priority); } - void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { /** * Give the Stepper ISR a higher priority (lower number) @@ -81,7 +77,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { */ switch (timer_num) { - case STEP_TIMER_NUM: + case MF_TIMER_STEP: timer_pause(STEP_TIMER_DEV); timer_set_mode(STEP_TIMER_DEV, STEP_TIMER_CHAN, TIMER_OUTPUT_COMPARE); // counter timer_set_count(STEP_TIMER_DEV, 0); @@ -91,11 +87,11 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { timer_set_compare(STEP_TIMER_DEV, STEP_TIMER_CHAN, _MIN(hal_timer_t(HAL_TIMER_TYPE_MAX), (STEPPER_TIMER_RATE) / frequency)); timer_no_ARR_preload_ARPE(STEP_TIMER_DEV); // Need to be sure no preload on ARR register timer_attach_interrupt(STEP_TIMER_DEV, STEP_TIMER_CHAN, stepTC_Handler); - timer_set_interrupt_priority(STEP_TIMER_NUM, STEP_TIMER_IRQ_PRIO); + HAL_timer_set_interrupt_priority(MF_TIMER_STEP, STEP_TIMER_IRQ_PRIO); timer_generate_update(STEP_TIMER_DEV); timer_resume(STEP_TIMER_DEV); break; - case TEMP_TIMER_NUM: + case MF_TIMER_TEMP: timer_pause(TEMP_TIMER_DEV); timer_set_mode(TEMP_TIMER_DEV, TEMP_TIMER_CHAN, TIMER_OUTPUT_COMPARE); timer_set_count(TEMP_TIMER_DEV, 0); @@ -103,7 +99,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { timer_set_reload(TEMP_TIMER_DEV, 0xFFFF); timer_set_compare(TEMP_TIMER_DEV, TEMP_TIMER_CHAN, _MIN(hal_timer_t(HAL_TIMER_TYPE_MAX), (F_CPU) / (TEMP_TIMER_PRESCALE) / frequency)); timer_attach_interrupt(TEMP_TIMER_DEV, TEMP_TIMER_CHAN, tempTC_Handler); - timer_set_interrupt_priority(TEMP_TIMER_NUM, TEMP_TIMER_IRQ_PRIO); + HAL_timer_set_interrupt_priority(MF_TIMER_TEMP, TEMP_TIMER_IRQ_PRIO); timer_generate_update(TEMP_TIMER_DEV); timer_resume(TEMP_TIMER_DEV); break; @@ -112,31 +108,31 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { void HAL_timer_enable_interrupt(const uint8_t timer_num) { switch (timer_num) { - case STEP_TIMER_NUM: ENABLE_STEPPER_DRIVER_INTERRUPT(); break; - case TEMP_TIMER_NUM: ENABLE_TEMPERATURE_INTERRUPT(); break; + case MF_TIMER_STEP: ENABLE_STEPPER_DRIVER_INTERRUPT(); break; + case MF_TIMER_TEMP: ENABLE_TEMPERATURE_INTERRUPT(); break; } } void HAL_timer_disable_interrupt(const uint8_t timer_num) { switch (timer_num) { - case STEP_TIMER_NUM: DISABLE_STEPPER_DRIVER_INTERRUPT(); break; - case TEMP_TIMER_NUM: DISABLE_TEMPERATURE_INTERRUPT(); break; + case MF_TIMER_STEP: DISABLE_STEPPER_DRIVER_INTERRUPT(); break; + case MF_TIMER_TEMP: DISABLE_TEMPERATURE_INTERRUPT(); break; } } -static inline bool timer_irq_enabled(const timer_dev * const dev, const uint8_t interrupt) { +static inline bool HAL_timer_irq_enabled(const timer_dev * const dev, const uint8_t interrupt) { return bool(*bb_perip(&(dev->regs).gen->DIER, interrupt)); } bool HAL_timer_interrupt_enabled(const uint8_t timer_num) { switch (timer_num) { - case STEP_TIMER_NUM: return timer_irq_enabled(STEP_TIMER_DEV, STEP_TIMER_CHAN); - case TEMP_TIMER_NUM: return timer_irq_enabled(TEMP_TIMER_DEV, TEMP_TIMER_CHAN); + case MF_TIMER_STEP: return HAL_timer_irq_enabled(STEP_TIMER_DEV, STEP_TIMER_CHAN); + case MF_TIMER_TEMP: return HAL_timer_irq_enabled(TEMP_TIMER_DEV, TEMP_TIMER_CHAN); } return false; } -timer_dev* get_timer_dev(int number) { +timer_dev* HAL_get_timer_dev(int number) { switch (number) { #if STM32_HAVE_TIMER(1) case 1: return &timer1; diff --git a/Marlin/src/HAL/STM32F1/timers.h b/Marlin/src/HAL/STM32F1/timers.h index c89d55a134..24e241ee3d 100644 --- a/Marlin/src/HAL/STM32F1/timers.h +++ b/Marlin/src/HAL/STM32F1/timers.h @@ -65,30 +65,30 @@ typedef uint16_t hal_timer_t; * - Otherwise it uses Timer 8 on boards with STM32_HIGH_DENSITY * or Timer 4 on other boards. */ -#ifndef STEP_TIMER_NUM +#ifndef MF_TIMER_STEP #if defined(MCU_STM32F103CB) || defined(MCU_STM32F103C8) - #define STEP_TIMER_NUM 4 // For C8/CB boards, use timer 4 + #define MF_TIMER_STEP 4 // For C8/CB boards, use timer 4 #else - #define STEP_TIMER_NUM 5 // for other boards, five is fine. + #define MF_TIMER_STEP 5 // for other boards, five is fine. #endif #endif -#ifndef PULSE_TIMER_NUM - #define PULSE_TIMER_NUM STEP_TIMER_NUM +#ifndef MF_TIMER_PULSE + #define MF_TIMER_PULSE MF_TIMER_STEP #endif -#ifndef TEMP_TIMER_NUM - #define TEMP_TIMER_NUM 2 // Timer Index for Temperature - //#define TEMP_TIMER_NUM 4 // 2->4, Timer 2 for Stepper Current PWM +#ifndef MF_TIMER_TEMP + #define MF_TIMER_TEMP 2 // Timer Index for Temperature + //#define MF_TIMER_TEMP 4 // 2->4, Timer 2 for Stepper Current PWM #endif #if MB(BTT_SKR_MINI_E3_V1_0, BTT_SKR_E3_DIP, BTT_SKR_MINI_E3_V1_2, MKS_ROBIN_LITE, MKS_ROBIN_E3D, MKS_ROBIN_E3) // SKR Mini E3 boards use PA8 as FAN_PIN, so TIMER 1 is used for Fan PWM. #ifdef STM32_HIGH_DENSITY - #define SERVO0_TIMER_NUM 8 // tone.cpp uses Timer 4 + #define MF_TIMER_SERVO0 8 // tone.cpp uses Timer 4 #else - #define SERVO0_TIMER_NUM 3 // tone.cpp uses Timer 8 + #define MF_TIMER_SERVO0 3 // tone.cpp uses Timer 8 #endif #else - #define SERVO0_TIMER_NUM 1 // SERVO0 or BLTOUCH + #define MF_TIMER_SERVO0 1 // SERVO0 or BLTOUCH #endif #define STEP_TIMER_IRQ_PRIO 2 @@ -98,22 +98,22 @@ typedef uint16_t hal_timer_t; #define TEMP_TIMER_PRESCALE 1000 // prescaler for setting Temp timer, 72Khz #define TEMP_TIMER_FREQUENCY 1000 // temperature interrupt frequency -#define STEPPER_TIMER_PRESCALE 18 // prescaler for setting stepper timer, 4Mhz -#define STEPPER_TIMER_RATE (HAL_TIMER_RATE / STEPPER_TIMER_PRESCALE) // frequency of stepper timer -#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000) // stepper timer ticks per µs +#define STEPPER_TIMER_PRESCALE 18 // prescaler for setting stepper timer, 4Mhz +#define STEPPER_TIMER_RATE (HAL_TIMER_RATE / STEPPER_TIMER_PRESCALE) // frequency of stepper timer +#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000) // stepper timer ticks per µs -#define PULSE_TIMER_RATE STEPPER_TIMER_RATE // frequency of pulse timer -#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE -#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US +#define PULSE_TIMER_RATE STEPPER_TIMER_RATE // frequency of pulse timer +#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE +#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US -timer_dev* get_timer_dev(int number); -#define TIMER_DEV(num) get_timer_dev(num) -#define STEP_TIMER_DEV TIMER_DEV(STEP_TIMER_NUM) -#define TEMP_TIMER_DEV TIMER_DEV(TEMP_TIMER_NUM) +timer_dev* HAL_get_timer_dev(int number); +#define TIMER_DEV(num) HAL_get_timer_dev(num) +#define STEP_TIMER_DEV TIMER_DEV(MF_TIMER_STEP) +#define TEMP_TIMER_DEV TIMER_DEV(MF_TIMER_TEMP) #define ENABLE_STEPPER_DRIVER_INTERRUPT() timer_enable_irq(STEP_TIMER_DEV, STEP_TIMER_CHAN) #define DISABLE_STEPPER_DRIVER_INTERRUPT() timer_disable_irq(STEP_TIMER_DEV, STEP_TIMER_CHAN) -#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM) +#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP) #define ENABLE_TEMPERATURE_INTERRUPT() timer_enable_irq(TEMP_TIMER_DEV, TEMP_TIMER_CHAN) #define DISABLE_TEMPERATURE_INTERRUPT() timer_disable_irq(TEMP_TIMER_DEV, TEMP_TIMER_CHAN) @@ -138,8 +138,8 @@ extern "C" { // Public Variables // ------------------------ -//static HardwareTimer StepperTimer(STEP_TIMER_NUM); -//static HardwareTimer TempTimer(TEMP_TIMER_NUM); +//static HardwareTimer StepperTimer(MF_TIMER_STEP); +//static HardwareTimer TempTimer(MF_TIMER_TEMP); // ------------------------ // Public functions @@ -163,13 +163,13 @@ bool HAL_timer_interrupt_enabled(const uint8_t timer_num); FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const hal_timer_t compare) { switch (timer_num) { - case STEP_TIMER_NUM: + case MF_TIMER_STEP: // NOTE: WE have set ARPE = 0, which means the Auto reload register is not preloaded // and there is no need to use any compare, as in the timer mode used, setting ARR to the compare value // will result in exactly the same effect, ie triggering an interrupt, and on top, set counter to 0 timer_set_reload(STEP_TIMER_DEV, compare); // We reload direct ARR as needed during counting up break; - case TEMP_TIMER_NUM: + case MF_TIMER_TEMP: timer_set_compare(TEMP_TIMER_DEV, TEMP_TIMER_CHAN, compare); break; } @@ -177,14 +177,14 @@ FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const ha FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { switch (timer_num) { - case STEP_TIMER_NUM: - // No counter to clear - timer_generate_update(STEP_TIMER_DEV); - return; - case TEMP_TIMER_NUM: - timer_set_count(TEMP_TIMER_DEV, 0); - timer_generate_update(TEMP_TIMER_DEV); - return; + case MF_TIMER_STEP: + // No counter to clear + timer_generate_update(STEP_TIMER_DEV); + return; + case MF_TIMER_TEMP: + timer_set_count(TEMP_TIMER_DEV, 0); + timer_generate_update(TEMP_TIMER_DEV); + return; } } @@ -196,6 +196,6 @@ FORCE_INLINE static void timer_no_ARR_preload_ARPE(timer_dev *dev) { bb_peri_set_bit(&(dev->regs).gen->CR1, TIMER_CR1_ARPE_BIT, 0); } -void timer_set_interrupt_priority(uint_fast8_t timer_num, uint_fast8_t priority); +void HAL_timer_set_interrupt_priority(uint_fast8_t timer_num, uint_fast8_t priority); #define TIMER_OC_NO_PRELOAD 0 // Need to disable preload also on compare registers. diff --git a/Marlin/src/HAL/TEENSY31_32/timers.cpp b/Marlin/src/HAL/TEENSY31_32/timers.cpp index 7e01a38f89..f217715a3f 100644 --- a/Marlin/src/HAL/TEENSY31_32/timers.cpp +++ b/Marlin/src/HAL/TEENSY31_32/timers.cpp @@ -47,7 +47,7 @@ FORCE_INLINE static void __DSB() { void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { switch (timer_num) { - case 0: + case MF_TIMER_STEP: FTM0_MODE = FTM_MODE_WPDIS | FTM_MODE_FTMEN; FTM0_SC = 0x00; // Set this to zero before changing the modulus FTM0_CNT = 0x0000; // Reset the count to zero @@ -56,7 +56,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { FTM0_SC = (FTM_SC_CLKS(0b1) & FTM_SC_CLKS_MASK) | (FTM_SC_PS(FTM0_TIMER_PRESCALE_BITS) & FTM_SC_PS_MASK); // Bus clock 60MHz divided by prescaler 8 FTM0_C0SC = FTM_CSC_CHIE | FTM_CSC_MSA | FTM_CSC_ELSA; break; - case 1: + case MF_TIMER_TEMP: FTM1_MODE = FTM_MODE_WPDIS | FTM_MODE_FTMEN; // Disable write protection, Enable FTM1 FTM1_SC = 0x00; // Set this to zero before changing the modulus FTM1_CNT = 0x0000; // Reset the count to zero @@ -70,15 +70,15 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { void HAL_timer_enable_interrupt(const uint8_t timer_num) { switch (timer_num) { - case 0: NVIC_ENABLE_IRQ(IRQ_FTM0); break; - case 1: NVIC_ENABLE_IRQ(IRQ_FTM1); break; + case MF_TIMER_STEP: NVIC_ENABLE_IRQ(IRQ_FTM0); break; + case MF_TIMER_TEMP: NVIC_ENABLE_IRQ(IRQ_FTM1); break; } } void HAL_timer_disable_interrupt(const uint8_t timer_num) { switch (timer_num) { - case 0: NVIC_DISABLE_IRQ(IRQ_FTM0); break; - case 1: NVIC_DISABLE_IRQ(IRQ_FTM1); break; + case MF_TIMER_STEP: NVIC_DISABLE_IRQ(IRQ_FTM0); break; + case MF_TIMER_TEMP: NVIC_DISABLE_IRQ(IRQ_FTM1); break; } // We NEED memory barriers to ensure Interrupts are actually disabled! @@ -89,20 +89,20 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num) { bool HAL_timer_interrupt_enabled(const uint8_t timer_num) { switch (timer_num) { - case 0: return NVIC_IS_ENABLED(IRQ_FTM0); - case 1: return NVIC_IS_ENABLED(IRQ_FTM1); + case MF_TIMER_STEP: return NVIC_IS_ENABLED(IRQ_FTM0); + case MF_TIMER_TEMP: return NVIC_IS_ENABLED(IRQ_FTM1); } return false; } void HAL_timer_isr_prologue(const uint8_t timer_num) { switch (timer_num) { - case 0: + case MF_TIMER_STEP: FTM0_CNT = 0x0000; FTM0_SC &= ~FTM_SC_TOF; // Clear FTM Overflow flag FTM0_C0SC &= ~FTM_CSC_CHF; // Clear FTM Channel Compare flag break; - case 1: + case MF_TIMER_TEMP: FTM1_CNT = 0x0000; FTM1_SC &= ~FTM_SC_TOF; // Clear FTM Overflow flag FTM1_C0SC &= ~FTM_CSC_CHF; // Clear FTM Channel Compare flag diff --git a/Marlin/src/HAL/TEENSY31_32/timers.h b/Marlin/src/HAL/TEENSY31_32/timers.h index 61b8673596..08f82f0b7d 100644 --- a/Marlin/src/HAL/TEENSY31_32/timers.h +++ b/Marlin/src/HAL/TEENSY31_32/timers.h @@ -46,14 +46,14 @@ typedef uint32_t hal_timer_t; #define HAL_TIMER_RATE (FTM0_TIMER_RATE) -#ifndef STEP_TIMER_NUM - #define STEP_TIMER_NUM 0 // Timer Index for Stepper +#ifndef MF_TIMER_STEP + #define MF_TIMER_STEP 0 // Timer Index for Stepper #endif -#ifndef PULSE_TIMER_NUM - #define PULSE_TIMER_NUM STEP_TIMER_NUM +#ifndef MF_TIMER_PULSE + #define MF_TIMER_PULSE MF_TIMER_STEP #endif -#ifndef TEMP_TIMER_NUM - #define TEMP_TIMER_NUM 1 // Timer Index for Temperature +#ifndef MF_TIMER_TEMP + #define MF_TIMER_TEMP 1 // Timer Index for Temperature #endif #define TEMP_TIMER_FREQUENCY 1000 @@ -66,12 +66,12 @@ typedef uint32_t hal_timer_t; #define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE #define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US -#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM) -#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM) -#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM) +#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP) +#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP) +#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP) -#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM) -#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM) +#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP) +#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP) #ifndef HAL_STEP_TIMER_ISR #define HAL_STEP_TIMER_ISR() extern "C" void ftm0_isr() //void TC3_Handler() @@ -84,23 +84,23 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency); FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const hal_timer_t compare) { switch (timer_num) { - case 0: FTM0_C0V = compare; break; - case 1: FTM1_C0V = compare; break; + case MF_TIMER_STEP: FTM0_C0V = compare; break; + case MF_TIMER_TEMP: FTM1_C0V = compare; break; } } FORCE_INLINE static hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) { switch (timer_num) { - case 0: return FTM0_C0V; - case 1: return FTM1_C0V; + case MF_TIMER_STEP: return FTM0_C0V; + case MF_TIMER_TEMP: return FTM1_C0V; } return 0; } FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) { switch (timer_num) { - case 0: return FTM0_CNT; - case 1: return FTM1_CNT; + case MF_TIMER_STEP: return FTM0_CNT; + case MF_TIMER_TEMP: return FTM1_CNT; } return 0; } diff --git a/Marlin/src/HAL/TEENSY35_36/timers.cpp b/Marlin/src/HAL/TEENSY35_36/timers.cpp index 8067d091dd..39095fbd77 100644 --- a/Marlin/src/HAL/TEENSY35_36/timers.cpp +++ b/Marlin/src/HAL/TEENSY35_36/timers.cpp @@ -47,7 +47,7 @@ FORCE_INLINE static void __DSB() { void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { switch (timer_num) { - case 0: + case MF_TIMER_STEP: FTM0_MODE = FTM_MODE_WPDIS | FTM_MODE_FTMEN; FTM0_SC = 0x00; // Set this to zero before changing the modulus FTM0_CNT = 0x0000; // Reset the count to zero @@ -56,7 +56,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { FTM0_SC = (FTM_SC_CLKS(0b1) & FTM_SC_CLKS_MASK) | (FTM_SC_PS(FTM0_TIMER_PRESCALE_BITS) & FTM_SC_PS_MASK); // Bus clock 60MHz divided by prescaler 8 FTM0_C0SC = FTM_CSC_CHIE | FTM_CSC_MSA | FTM_CSC_ELSA; break; - case 1: + case MF_TIMER_TEMP: FTM1_MODE = FTM_MODE_WPDIS | FTM_MODE_FTMEN; // Disable write protection, Enable FTM1 FTM1_SC = 0x00; // Set this to zero before changing the modulus FTM1_CNT = 0x0000; // Reset the count to zero @@ -70,15 +70,15 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { void HAL_timer_enable_interrupt(const uint8_t timer_num) { switch (timer_num) { - case 0: NVIC_ENABLE_IRQ(IRQ_FTM0); break; - case 1: NVIC_ENABLE_IRQ(IRQ_FTM1); break; + case MF_TIMER_STEP: NVIC_ENABLE_IRQ(IRQ_FTM0); break; + case MF_TIMER_TEMP: NVIC_ENABLE_IRQ(IRQ_FTM1); break; } } void HAL_timer_disable_interrupt(const uint8_t timer_num) { switch (timer_num) { - case 0: NVIC_DISABLE_IRQ(IRQ_FTM0); break; - case 1: NVIC_DISABLE_IRQ(IRQ_FTM1); break; + case MF_TIMER_STEP: NVIC_DISABLE_IRQ(IRQ_FTM0); break; + case MF_TIMER_TEMP: NVIC_DISABLE_IRQ(IRQ_FTM1); break; } // We NEED memory barriers to ensure Interrupts are actually disabled! @@ -89,20 +89,20 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num) { bool HAL_timer_interrupt_enabled(const uint8_t timer_num) { switch (timer_num) { - case 0: return NVIC_IS_ENABLED(IRQ_FTM0); - case 1: return NVIC_IS_ENABLED(IRQ_FTM1); + case MF_TIMER_STEP: return NVIC_IS_ENABLED(IRQ_FTM0); + case MF_TIMER_TEMP: return NVIC_IS_ENABLED(IRQ_FTM1); } return false; } void HAL_timer_isr_prologue(const uint8_t timer_num) { switch (timer_num) { - case 0: + case MF_TIMER_STEP: FTM0_CNT = 0x0000; FTM0_SC &= ~FTM_SC_TOF; // Clear FTM Overflow flag FTM0_C0SC &= ~FTM_CSC_CHF; // Clear FTM Channel Compare flag break; - case 1: + case MF_TIMER_TEMP: FTM1_CNT = 0x0000; FTM1_SC &= ~FTM_SC_TOF; // Clear FTM Overflow flag FTM1_C0SC &= ~FTM_CSC_CHF; // Clear FTM Channel Compare flag diff --git a/Marlin/src/HAL/TEENSY35_36/timers.h b/Marlin/src/HAL/TEENSY35_36/timers.h index 99269ac657..4f65bdffd1 100644 --- a/Marlin/src/HAL/TEENSY35_36/timers.h +++ b/Marlin/src/HAL/TEENSY35_36/timers.h @@ -45,14 +45,14 @@ typedef uint32_t hal_timer_t; #define HAL_TIMER_RATE (FTM0_TIMER_RATE) -#ifndef STEP_TIMER_NUM - #define STEP_TIMER_NUM 0 // Timer Index for Stepper +#ifndef MF_TIMER_STEP + #define MF_TIMER_STEP 0 // Timer Index for Stepper #endif -#ifndef PULSE_TIMER_NUM - #define PULSE_TIMER_NUM STEP_TIMER_NUM +#ifndef MF_TIMER_PULSE + #define MF_TIMER_PULSE MF_TIMER_STEP #endif -#ifndef TEMP_TIMER_NUM - #define TEMP_TIMER_NUM 1 // Timer Index for Temperature +#ifndef MF_TIMER_TEMP + #define MF_TIMER_TEMP 1 // Timer Index for Temperature #endif #define TEMP_TIMER_FREQUENCY 1000 @@ -65,12 +65,12 @@ typedef uint32_t hal_timer_t; #define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE #define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US -#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM) -#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM) -#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM) +#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP) +#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP) +#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP) -#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM) -#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM) +#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP) +#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP) #ifndef HAL_STEP_TIMER_ISR #define HAL_STEP_TIMER_ISR() extern "C" void ftm0_isr() //void TC3_Handler() @@ -83,23 +83,23 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency); FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const hal_timer_t compare) { switch (timer_num) { - case 0: FTM0_C0V = compare; break; - case 1: FTM1_C0V = compare; break; + case MF_TIMER_STEP: FTM0_C0V = compare; break; + case MF_TIMER_TEMP: FTM1_C0V = compare; break; } } FORCE_INLINE static hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) { switch (timer_num) { - case 0: return FTM0_C0V; - case 1: return FTM1_C0V; + case MF_TIMER_STEP: return FTM0_C0V; + case MF_TIMER_TEMP: return FTM1_C0V; } return 0; } FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) { switch (timer_num) { - case 0: return FTM0_CNT; - case 1: return FTM1_CNT; + case MF_TIMER_STEP: return FTM0_CNT; + case MF_TIMER_TEMP: return FTM1_CNT; } return 0; } diff --git a/Marlin/src/HAL/TEENSY40_41/timers.cpp b/Marlin/src/HAL/TEENSY40_41/timers.cpp index 81c9b08c17..ed99f65d6e 100644 --- a/Marlin/src/HAL/TEENSY40_41/timers.cpp +++ b/Marlin/src/HAL/TEENSY40_41/timers.cpp @@ -30,7 +30,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { switch (timer_num) { - case 0: + case MF_TIMER_STEP: CCM_CSCMR1 &= ~CCM_CSCMR1_PERCLK_CLK_SEL; // turn off 24mhz mode CCM_CCGR1 |= CCM_CCGR1_GPT1_BUS(CCM_CCGR_ON); @@ -48,7 +48,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { attachInterruptVector(IRQ_GPT1, &stepTC_Handler); NVIC_SET_PRIORITY(IRQ_GPT1, 16); break; - case 1: + case MF_TIMER_TEMP: CCM_CSCMR1 &= ~CCM_CSCMR1_PERCLK_CLK_SEL; // turn off 24mhz mode CCM_CCGR0 |= CCM_CCGR0_GPT2_BUS(CCM_CCGR_ON); @@ -71,19 +71,15 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { void HAL_timer_enable_interrupt(const uint8_t timer_num) { switch (timer_num) { - case 0: - NVIC_ENABLE_IRQ(IRQ_GPT1); - break; - case 1: - NVIC_ENABLE_IRQ(IRQ_GPT2); - break; + case MF_TIMER_STEP: NVIC_ENABLE_IRQ(IRQ_GPT1); break; + case MF_TIMER_TEMP: NVIC_ENABLE_IRQ(IRQ_GPT2); break; } } void HAL_timer_disable_interrupt(const uint8_t timer_num) { switch (timer_num) { - case 0: NVIC_DISABLE_IRQ(IRQ_GPT1); break; - case 1: NVIC_DISABLE_IRQ(IRQ_GPT2); break; + case MF_TIMER_STEP: NVIC_DISABLE_IRQ(IRQ_GPT1); break; + case MF_TIMER_TEMP: NVIC_DISABLE_IRQ(IRQ_GPT2); break; } // We NEED memory barriers to ensure Interrupts are actually disabled! @@ -93,20 +89,16 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num) { bool HAL_timer_interrupt_enabled(const uint8_t timer_num) { switch (timer_num) { - case 0: return (NVIC_IS_ENABLED(IRQ_GPT1)); - case 1: return (NVIC_IS_ENABLED(IRQ_GPT2)); + case MF_TIMER_STEP: return (NVIC_IS_ENABLED(IRQ_GPT1)); + case MF_TIMER_TEMP: return (NVIC_IS_ENABLED(IRQ_GPT2)); } return false; } void HAL_timer_isr_prologue(const uint8_t timer_num) { switch (timer_num) { - case 0: - GPT1_SR = GPT_IR_OF1IE; // clear OF3 bit - break; - case 1: - GPT2_SR = GPT_IR_OF1IE; // clear OF3 bit - break; + case MF_TIMER_STEP: GPT1_SR = GPT_IR_OF1IE; break; // clear OF3 bit + case MF_TIMER_TEMP: GPT2_SR = GPT_IR_OF1IE; break; // clear OF3 bit } asm volatile("dsb"); } diff --git a/Marlin/src/HAL/TEENSY40_41/timers.h b/Marlin/src/HAL/TEENSY40_41/timers.h index 556333d7f4..afb373c599 100644 --- a/Marlin/src/HAL/TEENSY40_41/timers.h +++ b/Marlin/src/HAL/TEENSY40_41/timers.h @@ -43,14 +43,14 @@ typedef uint32_t hal_timer_t; #define GPT1_TIMER_RATE (GPT_TIMER_RATE / GPT1_TIMER_PRESCALE) // 75MHz #define GPT2_TIMER_RATE (GPT_TIMER_RATE / GPT2_TIMER_PRESCALE) // 15MHz -#ifndef STEP_TIMER_NUM - #define STEP_TIMER_NUM 0 // Timer Index for Stepper +#ifndef MF_TIMER_STEP + #define MF_TIMER_STEP 0 // Timer Index for Stepper #endif -#ifndef PULSE_TIMER_NUM - #define PULSE_TIMER_NUM STEP_TIMER_NUM +#ifndef MF_TIMER_PULSE + #define MF_TIMER_PULSE MF_TIMER_STEP #endif -#ifndef TEMP_TIMER_NUM - #define TEMP_TIMER_NUM 1 // Timer Index for Temperature +#ifndef MF_TIMER_TEMP + #define MF_TIMER_TEMP 1 // Timer Index for Temperature #endif #define TEMP_TIMER_RATE 1000000 @@ -64,12 +64,12 @@ typedef uint32_t hal_timer_t; #define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE #define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US -#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(STEP_TIMER_NUM) -#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(STEP_TIMER_NUM) -#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(STEP_TIMER_NUM) +#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP) +#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP) +#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP) -#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(TEMP_TIMER_NUM) -#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(TEMP_TIMER_NUM) +#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP) +#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP) #ifndef HAL_STEP_TIMER_ISR #define HAL_STEP_TIMER_ISR() extern "C" void stepTC_Handler() // GPT1_Handler() @@ -87,27 +87,23 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency); FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const hal_timer_t compare) { switch (timer_num) { - case 0: - GPT1_OCR1 = compare - 1; - break; - case 1: - GPT2_OCR1 = compare - 1; - break; + case MF_TIMER_STEP: GPT1_OCR1 = compare - 1; break; + case MF_TIMER_TEMP: GPT2_OCR1 = compare - 1; break; } } FORCE_INLINE static hal_timer_t HAL_timer_get_compare(const uint8_t timer_num) { switch (timer_num) { - case 0: return GPT1_OCR1; - case 1: return GPT2_OCR1; + case MF_TIMER_STEP: return GPT1_OCR1; + case MF_TIMER_TEMP: return GPT2_OCR1; } return 0; } FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_num) { switch (timer_num) { - case 0: return GPT1_CNT; - case 1: return GPT2_CNT; + case MF_TIMER_STEP: return GPT1_CNT; + case MF_TIMER_TEMP: return GPT2_CNT; } return 0; } diff --git a/Marlin/src/feature/easythreed_ui.cpp b/Marlin/src/feature/easythreed_ui.cpp index 3eff233c01..9f8af03947 100644 --- a/Marlin/src/feature/easythreed_ui.cpp +++ b/Marlin/src/feature/easythreed_ui.cpp @@ -88,7 +88,7 @@ void EasythreedUI::blinkLED() { // // Filament Load/Unload Button -// Load/Unload buttons are a 3 position switch with a common center ground. +// Load/Unload buttons are a 3 position switch with a common center ground. // void EasythreedUI::loadButton() { if (printingIsActive()) return; @@ -208,7 +208,7 @@ void EasythreedUI::printButton() { print_key_flag = PF_RESUME; // The "Print" button now resumes the print break; } - case PF_RESUME: { // Resume printing + case PF_RESUME: { // Resume printing if (printingIsActive()) break; blink_interval_ms = LED_BLINK_2; // Blink the indicator LED at 1 second intervals queue.inject(F("M24")); // Queue resume diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index 60574b65f0..69e3f035ba 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -875,7 +875,7 @@ class Planner { || TERN0(EXTERNAL_CLOSED_LOOP_CONTROLLER, CLOSED_LOOP_WAITING()) ); } - + // Block until all buffered steps are executed / cleaned static void synchronize(); diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 69818aff7a..b93dd21198 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -464,8 +464,8 @@ xyze_int8_t Stepper::count_direction{0}; #define PULSE_LOW_TICK_COUNT hal_timer_t(NS_TO_PULSE_TIMER_TICKS(_MIN_PULSE_LOW_NS - _MIN(_MIN_PULSE_LOW_NS, TIMER_SETUP_NS))) #define USING_TIMED_PULSE() hal_timer_t start_pulse_count = 0 -#define START_TIMED_PULSE(DIR) (start_pulse_count = HAL_timer_get_count(PULSE_TIMER_NUM)) -#define AWAIT_TIMED_PULSE(DIR) while (PULSE_##DIR##_TICK_COUNT > HAL_timer_get_count(PULSE_TIMER_NUM) - start_pulse_count) { } +#define START_TIMED_PULSE(DIR) (start_pulse_count = HAL_timer_get_count(MF_TIMER_PULSE)) +#define AWAIT_TIMED_PULSE(DIR) while (PULSE_##DIR##_TICK_COUNT > HAL_timer_get_count(MF_TIMER_PULSE) - start_pulse_count) { } #define START_HIGH_PULSE() START_TIMED_PULSE(HIGH) #define AWAIT_HIGH_PULSE() AWAIT_TIMED_PULSE(HIGH) #define START_LOW_PULSE() START_TIMED_PULSE(LOW) @@ -1454,11 +1454,11 @@ void Stepper::set_directions() { */ HAL_STEP_TIMER_ISR() { - HAL_timer_isr_prologue(STEP_TIMER_NUM); + HAL_timer_isr_prologue(MF_TIMER_STEP); Stepper::isr(); - HAL_timer_isr_epilogue(STEP_TIMER_NUM); + HAL_timer_isr_epilogue(MF_TIMER_STEP); } #ifdef CPU_32_BIT @@ -1480,7 +1480,7 @@ void Stepper::isr() { // Program timer compare for the maximum period, so it does NOT // flag an interrupt while this ISR is running - So changes from small // periods to big periods are respected and the timer does not reset to 0 - HAL_timer_set_compare(STEP_TIMER_NUM, hal_timer_t(HAL_TIMER_TYPE_MAX)); + HAL_timer_set_compare(MF_TIMER_STEP, hal_timer_t(HAL_TIMER_TYPE_MAX)); // Count of ticks for the next ISR hal_timer_t next_isr_ticks = 0; @@ -1584,7 +1584,7 @@ void Stepper::isr() { * On AVR the ISR epilogue+prologue is estimated at 100 instructions - Give 8µs as margin * On ARM the ISR epilogue+prologue is estimated at 20 instructions - Give 1µs as margin */ - min_ticks = HAL_timer_get_count(STEP_TIMER_NUM) + hal_timer_t( + min_ticks = HAL_timer_get_count(MF_TIMER_STEP) + hal_timer_t( #ifdef __AVR__ 8 #else @@ -1608,7 +1608,7 @@ void Stepper::isr() { // sure that the time has not arrived yet - Warrantied by the scheduler // Set the next ISR to fire at the proper time - HAL_timer_set_compare(STEP_TIMER_NUM, hal_timer_t(next_isr_ticks)); + HAL_timer_set_compare(MF_TIMER_STEP, hal_timer_t(next_isr_ticks)); // Don't forget to finally reenable interrupts ENABLE_ISRS(); @@ -2769,7 +2769,7 @@ void Stepper::init() { #endif #if DISABLED(I2S_STEPPER_STREAM) - HAL_timer_start(STEP_TIMER_NUM, 122); // Init Stepper ISR to 122 Hz for quick starting + HAL_timer_start(MF_TIMER_STEP, 122); // Init Stepper ISR to 122 Hz for quick starting wake_up(); sei(); #endif @@ -2980,8 +2980,8 @@ void Stepper::report_positions() { #define EXTRA_CYCLES_BABYSTEP (STEP_PULSE_CYCLES - (CYCLES_EATEN_BABYSTEP)) #if EXTRA_CYCLES_BABYSTEP > 20 - #define _SAVE_START() const hal_timer_t pulse_start = HAL_timer_get_count(PULSE_TIMER_NUM) - #define _PULSE_WAIT() while (EXTRA_CYCLES_BABYSTEP > (uint32_t)(HAL_timer_get_count(PULSE_TIMER_NUM) - pulse_start) * (PULSE_TIMER_PRESCALE)) { /* nada */ } + #define _SAVE_START() const hal_timer_t pulse_start = HAL_timer_get_count(MF_TIMER_PULSE) + #define _PULSE_WAIT() while (EXTRA_CYCLES_BABYSTEP > (uint32_t)(HAL_timer_get_count(MF_TIMER_PULSE) - pulse_start) * (PULSE_TIMER_PRESCALE)) { /* nada */ } #else #define _SAVE_START() NOOP #if EXTRA_CYCLES_BABYSTEP > 0 diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 187776de12..758275d21e 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -2387,7 +2387,7 @@ void Temperature::init() { HAL_ANALOG_SELECT(POWER_MONITOR_VOLTAGE_PIN); #endif - HAL_timer_start(TEMP_TIMER_NUM, TEMP_TIMER_FREQUENCY); + HAL_timer_start(MF_TIMER_TEMP, TEMP_TIMER_FREQUENCY); ENABLE_TEMPERATURE_INTERRUPT(); #if HAS_AUTO_FAN_0 @@ -2968,11 +2968,11 @@ void Temperature::readings_ready() { * - Call planner.isr to count down its "ignore" time */ HAL_TEMP_TIMER_ISR() { - HAL_timer_isr_prologue(TEMP_TIMER_NUM); + HAL_timer_isr_prologue(MF_TIMER_TEMP); Temperature::isr(); - HAL_timer_isr_epilogue(TEMP_TIMER_NUM); + HAL_timer_isr_epilogue(MF_TIMER_TEMP); } #if ENABLED(SLOW_PWM_HEATERS) && !defined(MIN_STATE_TIME) diff --git a/Marlin/src/pins/sam/pins_ARCHIM1.h b/Marlin/src/pins/sam/pins_ARCHIM1.h index 57bbeb62a2..d9f1dcbf94 100644 --- a/Marlin/src/pins/sam/pins_ARCHIM1.h +++ b/Marlin/src/pins/sam/pins_ARCHIM1.h @@ -46,8 +46,7 @@ // // Timers // -// These are already defined in DUE, so must be undefined first -#define STEP_TIMER_NUM 3 +#define MF_TIMER_STEP 3 #define HAL_STEP_TIMER_ISR() void TC3_Handler() // diff --git a/Marlin/src/pins/stm32f0/pins_MALYAN_M300.h b/Marlin/src/pins/stm32f0/pins_MALYAN_M300.h index 299b9ff49c..904a9a56fa 100644 --- a/Marlin/src/pins/stm32f0/pins_MALYAN_M300.h +++ b/Marlin/src/pins/stm32f0/pins_MALYAN_M300.h @@ -45,8 +45,8 @@ // // Timers // -#define STEP_TIMER 6 -#define TEMP_TIMER 7 +#define STEP_TIMER 6 +#define TEMP_TIMER 7 // // Limit Switches diff --git a/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h b/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h index e19d330092..947e36c765 100644 --- a/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h +++ b/Marlin/src/pins/stm32f1/pins_FLSUN_HISPEED.h @@ -41,7 +41,7 @@ #define BOARD_NO_NATIVE_USB // Avoid conflict with TIMER_SERVO when using the STM32 HAL -#define TEMP_TIMER 5 +#define TEMP_TIMER 5 // // Release PB4 (Y_ENABLE_PIN) from JTAG NRST role diff --git a/Marlin/src/pins/stm32f1/pins_MALYAN_M200.h b/Marlin/src/pins/stm32f1/pins_MALYAN_M200.h index 32d1937653..94e5340099 100644 --- a/Marlin/src/pins/stm32f1/pins_MALYAN_M200.h +++ b/Marlin/src/pins/stm32f1/pins_MALYAN_M200.h @@ -47,8 +47,8 @@ // On STM32F103: // PB3, PB6, PB7, and PB8 can be used with pwm, which rules out TIM2 and TIM4. // On STM32F070, 16 and 17 are in use, but 1 and 3 are available. -#define STEP_TIMER 1 -#define TEMP_TIMER 3 +#define STEP_TIMER 1 +#define TEMP_TIMER 3 // // Limit Switches diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h index 6707296897..a51f28bf95 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h @@ -39,7 +39,7 @@ #define MKS_HARDWARE_TEST_ONLY_E0 // Avoid conflict with TIMER_SERVO when using the STM32 HAL -#define TEMP_TIMER 5 +#define TEMP_TIMER 5 // // Release PB4 (Y_ENABLE_PIN) from JTAG NRST role diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h index e8d567bc70..592d585982 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h @@ -39,7 +39,7 @@ #define USES_DIAG_PINS // Avoid conflict with TIMER_SERVO when using the STM32 HAL -#define TEMP_TIMER 5 +#define TEMP_TIMER 5 // // Release PB4 (Y_ENABLE_PIN) from JTAG NRST role diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h index c76175a35c..c1d0e591e9 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h @@ -32,7 +32,7 @@ #define BOARD_NO_NATIVE_USB // Avoid conflict with TIMER_SERVO when using the STM32 HAL -#define TEMP_TIMER 5 +#define TEMP_TIMER 5 // // EEPROM diff --git a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h index efeff04f25..9db0459be9 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h @@ -33,7 +33,7 @@ #define I2C_SDA_PIN PB9 // Avoid conflict with TIMER_TONE -#define STEP_TIMER 10 +#define STEP_TIMER 10 // // Servos diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h index 0a80c99878..a2111d849e 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h @@ -50,7 +50,7 @@ #define HAS_OTG_USB_HOST_SUPPORT // USB Flash Drive support // Avoid conflict with TIMER_TONE -#define STEP_TIMER 10 +#define STEP_TIMER 10 // // Servos diff --git a/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h b/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h index 794649e416..af316cf4b1 100644 --- a/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h +++ b/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h @@ -33,8 +33,8 @@ #define DEFAULT_MACHINE_NAME BOARD_INFO_NAME // Avoid conflict with fans and TIMER_TONE -#define TEMP_TIMER 3 -#define STEP_TIMER 5 +#define TEMP_TIMER 3 +#define STEP_TIMER 5 // // EEPROM Emulation diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_S.h b/Marlin/src/pins/stm32f4/pins_LERDGE_S.h index c686e19ccb..c904d57a1f 100644 --- a/Marlin/src/pins/stm32f4/pins_LERDGE_S.h +++ b/Marlin/src/pins/stm32f4/pins_LERDGE_S.h @@ -31,8 +31,8 @@ #define BOARD_INFO_NAME "Lerdge S" #define DEFAULT_MACHINE_NAME "LERDGE" -#define STEP_TIMER 4 -#define TEMP_TIMER 2 +#define STEP_TIMER 4 +#define TEMP_TIMER 2 #define HAS_OTG_USB_HOST_SUPPORT // USB Flash Drive support diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_X.h b/Marlin/src/pins/stm32f4/pins_LERDGE_X.h index 93526db442..5048933146 100644 --- a/Marlin/src/pins/stm32f4/pins_LERDGE_X.h +++ b/Marlin/src/pins/stm32f4/pins_LERDGE_X.h @@ -31,8 +31,8 @@ #define BOARD_INFO_NAME "Lerdge X" #define DEFAULT_MACHINE_NAME "LERDGE" -#define STEP_TIMER 4 -#define TEMP_TIMER 2 +#define STEP_TIMER 4 +#define TEMP_TIMER 2 #define I2C_EEPROM #define I2C_SCL_PIN PB8 diff --git a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h index 00dcade892..2f77c0f9d6 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h @@ -38,7 +38,7 @@ //#define DISABLE_DEBUG // Avoid conflict with TIMER_TONE -#define STEP_TIMER 10 +#define STEP_TIMER 10 // Use one of these or SDCard-based Emulation will be used //#define SRAM_EEPROM_EMULATION // Use BackSRAM-based EEPROM emulation diff --git a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h index 48d2ffef6e..c2dea50b29 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h @@ -29,7 +29,7 @@ #define HAS_OTG_USB_HOST_SUPPORT // USB Flash Drive support // Avoid conflict with TIMER_TONE -#define STEP_TIMER 10 +#define STEP_TIMER 10 // Use one of these or SDCard-based Emulation will be used //#define SRAM_EEPROM_EMULATION // Use BackSRAM-based EEPROM emulation diff --git a/Marlin/src/pins/stm32f4/pins_RUMBA32_common.h b/Marlin/src/pins/stm32f4/pins_RUMBA32_common.h index 00f49acbeb..cf7c9ed8a6 100644 --- a/Marlin/src/pins/stm32f4/pins_RUMBA32_common.h +++ b/Marlin/src/pins/stm32f4/pins_RUMBA32_common.h @@ -45,8 +45,8 @@ // This will be difficult to solve from the Arduino IDE, without modifying the RUMBA32 variant // included with the STM32 framework. -#define STEP_TIMER 10 -#define TEMP_TIMER 14 +#define STEP_TIMER 10 +#define TEMP_TIMER 14 // // Limit Switches diff --git a/Marlin/src/pins/stm32f7/pins_NUCLEO_F767ZI.h b/Marlin/src/pins/stm32f7/pins_NUCLEO_F767ZI.h index c41b5ab1de..75c7217163 100644 --- a/Marlin/src/pins/stm32f7/pins_NUCLEO_F767ZI.h +++ b/Marlin/src/pins/stm32f7/pins_NUCLEO_F767ZI.h @@ -57,8 +57,8 @@ * TIM14 - TEMP_TIMER (Marlin) * */ -#define STEP_TIMER 4 -#define TEMP_TIMER 14 +#define STEP_TIMER 4 +#define TEMP_TIMER 14 /** * These pin assignments are arbitrary and intending for testing purposes. diff --git a/Marlin/src/pins/stm32f7/pins_REMRAM_V1.h b/Marlin/src/pins/stm32f7/pins_REMRAM_V1.h index dbf2593c48..486c10e711 100644 --- a/Marlin/src/pins/stm32f7/pins_REMRAM_V1.h +++ b/Marlin/src/pins/stm32f7/pins_REMRAM_V1.h @@ -134,4 +134,4 @@ // Timers // -#define STEP_TIMER 2 +#define STEP_TIMER 2 From 1874787b6bb840156e4ebb721ae6ee6b6438b97a Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 28 Nov 2021 01:02:49 +0000 Subject: [PATCH 174/532] [cron] Bump distribution date (2021-11-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 e635eb5f10..0c76c76fd8 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 "2021-11-27" +//#define STRING_DISTRIBUTION_DATE "2021-11-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 4f9c011703..a660a0cd9f 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 "2021-11-27" + #define STRING_DISTRIBUTION_DATE "2021-11-28" #endif /** From a276c088e33417403ca468879678d837c00433e2 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 29 Nov 2021 01:01:36 +0000 Subject: [PATCH 175/532] [cron] Bump distribution date (2021-11-29) --- 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 0c76c76fd8..f50e7271af 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 "2021-11-28" +//#define STRING_DISTRIBUTION_DATE "2021-11-29" /** * 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 a660a0cd9f..04aa7b6449 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 "2021-11-28" + #define STRING_DISTRIBUTION_DATE "2021-11-29" #endif /** From 9e71f9baf9aad453be1a5c4ff5cd604b18e65d2d Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 30 Nov 2021 01:01:54 +0000 Subject: [PATCH 176/532] [cron] Bump distribution date (2021-11-30) --- 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 f50e7271af..fd3ceff1fa 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 "2021-11-29" +//#define STRING_DISTRIBUTION_DATE "2021-11-30" /** * 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 04aa7b6449..b3541e8404 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 "2021-11-29" + #define STRING_DISTRIBUTION_DATE "2021-11-30" #endif /** From 7ffada64ceb4d8e5a2ca1e7a75638a3bb6be6cf4 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 30 Nov 2021 13:03:31 -0600 Subject: [PATCH 177/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20STM32=20FastPWM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/STM32/fast_pwm.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/HAL/STM32/fast_pwm.cpp b/Marlin/src/HAL/STM32/fast_pwm.cpp index 8eaecd718e..d28bc1b84b 100644 --- a/Marlin/src/HAL/STM32/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32/fast_pwm.cpp @@ -71,6 +71,8 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 void set_pwm_frequency(const pin_t pin, int f_desired) { if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer + const PinName pin_name = digitalPinToPinName(pin); + TIM_TypeDef * const Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance uint32_t index = get_timer_index(Instance); // Protect used timers @@ -80,8 +82,6 @@ void set_pwm_frequency(const pin_t pin, int f_desired) { #endif ) return; - const PinName pin_name = digitalPinToPinName(pin); - TIM_TypeDef * const Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance if (HardwareTimer_Handle[index] == nullptr) // If frequency is set before duty we need to create a handle here. HardwareTimer_Handle[index]->__this = new HardwareTimer((TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM)); HardwareTimer * const HT = (HardwareTimer *)(HardwareTimer_Handle[index]->__this); From 1f5eaf29b947a1486699c588cbe1e274cfb72ec4 Mon Sep 17 00:00:00 2001 From: Jiri Jirus Date: Tue, 30 Nov 2021 21:46:48 +0100 Subject: [PATCH 178/532] =?UTF-8?q?=F0=9F=A9=B9=20Assume=204K=20EEPROM=20f?= =?UTF-8?q?or=20RUMBA32=20BTT=20(#23205)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f4/pins_RUMBA32_BTT.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/pins/stm32f4/pins_RUMBA32_BTT.h b/Marlin/src/pins/stm32f4/pins_RUMBA32_BTT.h index f2fc53379b..28d2dfd180 100644 --- a/Marlin/src/pins/stm32f4/pins_RUMBA32_BTT.h +++ b/Marlin/src/pins/stm32f4/pins_RUMBA32_BTT.h @@ -30,7 +30,7 @@ #if NO_EEPROM_SELECTED #define I2C_EEPROM - #define MARLIN_EEPROM_SIZE 0x2000 // 8KB (24LC64T-I/OT) + #define MARLIN_EEPROM_SIZE 0x1000 // 4KB (24LC32AT-I/OT) #endif #if ENABLED(FLASH_EEPROM_EMULATION) From c09641c7c0cddadd67eb7f873d0c9e2633376821 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 30 Nov 2021 15:04:05 -0600 Subject: [PATCH 179/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20STM32=20FastPWM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/STM32/fast_pwm.cpp | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/Marlin/src/HAL/STM32/fast_pwm.cpp b/Marlin/src/HAL/STM32/fast_pwm.cpp index d28bc1b84b..2099184893 100644 --- a/Marlin/src/HAL/STM32/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32/fast_pwm.cpp @@ -32,26 +32,17 @@ static uint16_t timer_freq[TIMER_NUM]; void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer - bool needs_freq; PinName pin_name = digitalPinToPinName(pin); TIM_TypeDef *Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); - HardwareTimer *HT; - TimerModes_t previousMode; - uint16_t value = v; - if (invert) value = v_size - value; - - uint32_t index = get_timer_index(Instance); - - if (HardwareTimer_Handle[index] == nullptr) { + const uint32_t index = get_timer_index(Instance); + bool needs_freq = (HardwareTimer_Handle[index] == nullptr); // A new instance must be set to the default frequency of PWM_FREQUENCY + if (needs_freq) HardwareTimer_Handle[index]->__this = new HardwareTimer((TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM)); - needs_freq = true; // The instance must be new set the default frequency of PWM_FREQUENCY - } - - HT = (HardwareTimer *)(HardwareTimer_Handle[index]->__this); - uint32_t channel = STM_PIN_CHANNEL(pinmap_function(pin_name, PinMap_PWM)); - previousMode = HT->getMode(channel); + HardwareTimer * const HT = (HardwareTimer *)(HardwareTimer_Handle[index]->__this); + const uint32_t channel = STM_PIN_CHANNEL(pinmap_function(pin_name, PinMap_PWM)); + const TimerModes_t previousMode = HT->getMode(channel); if (previousMode != TIMER_OUTPUT_COMPARE_PWM1) HT->setMode(channel, TIMER_OUTPUT_COMPARE_PWM1, pin); @@ -63,6 +54,7 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 } // Note the resolution is sticky here, the input can be upto 16 bits and that would require RESOLUTION_16B_COMPARE_FORMAT (16) // If such a need were to manifest then we would need to calc the resolution based on the v_size parameter and add code for it. + const uint16_t value = invert ? v_size - v : v; HT->setCaptureCompare(channel, value, RESOLUTION_8B_COMPARE_FORMAT); // Sets the duty, the calc is done in the library :) pinmap_pinout(pin_name, PinMap_PWM); // Make sure the pin output state is set. if (previousMode != TIMER_OUTPUT_COMPARE_PWM1) HT->resume(); @@ -73,12 +65,12 @@ void set_pwm_frequency(const pin_t pin, int f_desired) { const PinName pin_name = digitalPinToPinName(pin); TIM_TypeDef * const Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance - uint32_t index = get_timer_index(Instance); + const uint32_t index = get_timer_index(Instance); // Protect used timers - if (index == TEMP_TIMER_NUM || index == STEP_TIMER_NUM - #if PULSE_TIMER_NUM != STEP_TIMER_NUM - || index == PULSE_TIMER_NUM + if (index == MF_TIMER_TEMP || index == MF_TIMER_STEP + #if MF_TIMER_PULSE != MF_TIMER_STEP + || index == MF_TIMER_PULSE #endif ) return; From f46c76f3608ed3e229a36229bf6d0878fb4ab51e Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 1 Dec 2021 01:05:56 +0000 Subject: [PATCH 180/532] [cron] Bump distribution date (2021-12-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 fd3ceff1fa..efd79c97f8 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 "2021-11-30" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 b3541e8404..8c09fbb850 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 "2021-11-30" + #define STRING_DISTRIBUTION_DATE "2021-12-01" #endif /** From b9ee84e8dcc6ae81aba3d46e079ed26e1a308a49 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 2 Dec 2021 01:02:43 +0000 Subject: [PATCH 181/532] [cron] Bump distribution date (2021-12-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 efd79c97f8..da5596aae3 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 "2021-12-01" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 8c09fbb850..436384c2d4 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 "2021-12-01" + #define STRING_DISTRIBUTION_DATE "2021-12-02" #endif /** From e3d7274c84242aebdfef2b164d5b89cb99ee6ac3 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 3 Dec 2021 01:02:06 +0000 Subject: [PATCH 182/532] [cron] Bump distribution date (2021-12-03) --- 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 da5596aae3..456a5c33bc 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 "2021-12-02" +//#define STRING_DISTRIBUTION_DATE "2021-12-03" /** * 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 436384c2d4..42c737ca3c 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 "2021-12-02" + #define STRING_DISTRIBUTION_DATE "2021-12-03" #endif /** From 2a1facf8530ac931760ca43b9ecb11d57409ff74 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Fri, 3 Dec 2021 19:31:48 +0100 Subject: [PATCH 183/532] =?UTF-8?q?=F0=9F=8F=97=EF=B8=8F=20Rework=20STM32?= =?UTF-8?q?=20timer=20frequency=20protection=20(#23187)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/STM32/fast_pwm.cpp | 41 +++++++++++++++---------------- Marlin/src/HAL/STM32/timers.h | 15 +++++------ 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/Marlin/src/HAL/STM32/fast_pwm.cpp b/Marlin/src/HAL/STM32/fast_pwm.cpp index 2099184893..b1bea5ce20 100644 --- a/Marlin/src/HAL/STM32/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32/fast_pwm.cpp @@ -25,19 +25,18 @@ #ifdef HAL_STM32 #include "../../inc/MarlinConfig.h" -#include "timers.h" // Array to support sticky frequency sets per timer static uint16_t timer_freq[TIMER_NUM]; void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer - PinName pin_name = digitalPinToPinName(pin); - TIM_TypeDef *Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); + const PinName pin_name = digitalPinToPinName(pin); + TIM_TypeDef * const Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); - const uint32_t index = get_timer_index(Instance); - bool needs_freq = (HardwareTimer_Handle[index] == nullptr); // A new instance must be set to the default frequency of PWM_FREQUENCY - if (needs_freq) + const timer_index_t index = get_timer_index(Instance); + const bool needs_freq = (HardwareTimer_Handle[index] == nullptr); + if (needs_freq) // A new instance must be set to the default frequency of PWM_FREQUENCY HardwareTimer_Handle[index]->__this = new HardwareTimer((TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM)); HardwareTimer * const HT = (HardwareTimer *)(HardwareTimer_Handle[index]->__this); @@ -46,12 +45,9 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 if (previousMode != TIMER_OUTPUT_COMPARE_PWM1) HT->setMode(channel, TIMER_OUTPUT_COMPARE_PWM1, pin); - if (needs_freq) { - if (timer_freq[index] == 0 ) { // If the timer is unconfigured and no freq is set then default PWM_FREQUENCY. - timer_freq[index] = PWM_FREQUENCY; - set_pwm_frequency(pin_name, timer_freq[index]); // Set the frequency and save the value to the assigned index no. - } - } + if (needs_freq && timer_freq[index] == 0) // If the timer is unconfigured and no freq is set then default PWM_FREQUENCY + set_pwm_frequency(pin_name, PWM_FREQUENCY); // Set the frequency and save the value to the assigned index no. + // Note the resolution is sticky here, the input can be upto 16 bits and that would require RESOLUTION_16B_COMPARE_FORMAT (16) // If such a need were to manifest then we would need to calc the resolution based on the v_size parameter and add code for it. const uint16_t value = invert ? v_size - v : v; @@ -62,23 +58,26 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 void set_pwm_frequency(const pin_t pin, int f_desired) { if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer - const PinName pin_name = digitalPinToPinName(pin); TIM_TypeDef * const Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance - const uint32_t index = get_timer_index(Instance); + const timer_index_t index = get_timer_index(Instance); - // Protect used timers - if (index == MF_TIMER_TEMP || index == MF_TIMER_STEP - #if MF_TIMER_PULSE != MF_TIMER_STEP - || index == MF_TIMER_PULSE - #endif - ) return; + // Protect used timers. + #ifdef STEP_TIMER + if (index == TIMER_INDEX(STEP_TIMER)) return; + #endif + #ifdef TEMP_TIMER + if (index == TIMER_INDEX(TEMP_TIMER)) return; + #endif + #if defined(PULSE_TIMER) && MF_TIMER_PULSE != MF_TIMER_STEP + if (index == TIMER_INDEX(PULSE_TIMER)) return; + #endif if (HardwareTimer_Handle[index] == nullptr) // If frequency is set before duty we need to create a handle here. HardwareTimer_Handle[index]->__this = new HardwareTimer((TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM)); HardwareTimer * const HT = (HardwareTimer *)(HardwareTimer_Handle[index]->__this); - timer_freq[index] = f_desired; // Save the last frequency so duty will not set the default for this timer number. HT->setOverflow(f_desired, HERTZ_FORMAT); + timer_freq[index] = f_desired; // Save the last frequency so duty will not set the default for this timer number. } #endif // HAL_STM32 diff --git a/Marlin/src/HAL/STM32/timers.h b/Marlin/src/HAL/STM32/timers.h index ae70e65886..33b5d8470f 100644 --- a/Marlin/src/HAL/STM32/timers.h +++ b/Marlin/src/HAL/STM32/timers.h @@ -40,17 +40,14 @@ #define hal_timer_t uint32_t #define HAL_TIMER_TYPE_MAX UINT16_MAX +// Marlin timer_instance[] content (unrelated to timer selection) #define NUM_HARDWARE_TIMERS 2 +#define MF_TIMER_STEP 0 // Timer Index for Stepper +#define MF_TIMER_TEMP 1 // Timer Index for Temperature +#define MF_TIMER_PULSE MF_TIMER_STEP -#ifndef MF_TIMER_STEP - #define MF_TIMER_STEP 0 // Timer Index for Stepper -#endif -#ifndef MF_TIMER_PULSE - #define MF_TIMER_PULSE MF_TIMER_STEP -#endif -#ifndef MF_TIMER_TEMP - #define MF_TIMER_TEMP 1 // Timer Index for Temperature -#endif +#define TIMER_INDEX_(T) TIMER##T##_INDEX // TIMER#_INDEX enums (timer_index_t) depend on TIM#_BASE defines. +#define TIMER_INDEX(T) TIMER_INDEX_(T) // Convert Timer ID to HardwareTimer_Handle index. #define TEMP_TIMER_FREQUENCY 1000 // Temperature::isr() is expected to be called at around 1kHz From 4411af655e60646b0b114f759a62cedc8e0e6aa4 Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Fri, 3 Dec 2021 12:48:48 -0600 Subject: [PATCH 184/532] =?UTF-8?q?=F0=9F=8F=97=EF=B8=8F=20Fix=20Maple=20H?= =?UTF-8?q?AL/STM32F1=20PWM=20(#23211)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/AVR/timers.h | 4 ++-- Marlin/src/HAL/DUE/timers.h | 2 +- Marlin/src/HAL/ESP32/timers.h | 4 ++-- Marlin/src/HAL/LINUX/timers.h | 4 ++-- Marlin/src/HAL/LPC1768/timers.h | 2 +- Marlin/src/HAL/NATIVE_SIM/timers.h | 4 ++-- Marlin/src/HAL/STM32/timers.cpp | 10 +++++++-- Marlin/src/HAL/STM32/timers.h | 5 ++--- Marlin/src/HAL/STM32F1/fast_pwm.cpp | 32 +++++++++++++++++++++-------- Marlin/src/HAL/STM32F1/timers.h | 2 +- Marlin/src/HAL/TEENSY31_32/timers.h | 2 +- Marlin/src/HAL/TEENSY35_36/timers.h | 2 +- Marlin/src/HAL/TEENSY40_41/timers.h | 2 +- 13 files changed, 48 insertions(+), 27 deletions(-) diff --git a/Marlin/src/HAL/AVR/timers.h b/Marlin/src/HAL/AVR/timers.h index 29907204ac..36b04eae0d 100644 --- a/Marlin/src/HAL/AVR/timers.h +++ b/Marlin/src/HAL/AVR/timers.h @@ -109,8 +109,8 @@ FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) { * (otherwise, characters will be lost due to UART overflow). * Then: Stepper, Endstops, Temperature, and -finally- all others. */ -#define HAL_timer_isr_prologue(TIMER_NUM) -#define HAL_timer_isr_epilogue(TIMER_NUM) +#define HAL_timer_isr_prologue(T) +#define HAL_timer_isr_epilogue(T) /* 18 cycles maximum latency */ #ifndef HAL_STEP_TIMER_ISR diff --git a/Marlin/src/HAL/DUE/timers.h b/Marlin/src/HAL/DUE/timers.h index bab67826df..e2932ff36f 100644 --- a/Marlin/src/HAL/DUE/timers.h +++ b/Marlin/src/HAL/DUE/timers.h @@ -125,4 +125,4 @@ FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_SR; } -#define HAL_timer_isr_epilogue(TIMER_NUM) +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/ESP32/timers.h b/Marlin/src/HAL/ESP32/timers.h index b651ffe6b1..266169848d 100644 --- a/Marlin/src/HAL/ESP32/timers.h +++ b/Marlin/src/HAL/ESP32/timers.h @@ -136,5 +136,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num); void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); -#define HAL_timer_isr_prologue(TIMER_NUM) -#define HAL_timer_isr_epilogue(TIMER_NUM) +#define HAL_timer_isr_prologue(T) +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/LINUX/timers.h b/Marlin/src/HAL/LINUX/timers.h index 21dba62071..a98ceb6f39 100644 --- a/Marlin/src/HAL/LINUX/timers.h +++ b/Marlin/src/HAL/LINUX/timers.h @@ -92,5 +92,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num); void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); -#define HAL_timer_isr_prologue(TIMER_NUM) -#define HAL_timer_isr_epilogue(TIMER_NUM) +#define HAL_timer_isr_prologue(T) +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/LPC1768/timers.h b/Marlin/src/HAL/LPC1768/timers.h index ef437cabac..78e856db28 100644 --- a/Marlin/src/HAL/LPC1768/timers.h +++ b/Marlin/src/HAL/LPC1768/timers.h @@ -170,4 +170,4 @@ FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { } } -#define HAL_timer_isr_epilogue(TIMER_NUM) +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/NATIVE_SIM/timers.h b/Marlin/src/HAL/NATIVE_SIM/timers.h index 4d140a4b6c..cedfdb62d6 100644 --- a/Marlin/src/HAL/NATIVE_SIM/timers.h +++ b/Marlin/src/HAL/NATIVE_SIM/timers.h @@ -87,5 +87,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num); void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); -#define HAL_timer_isr_prologue(TIMER_NUM) -#define HAL_timer_isr_epilogue(TIMER_NUM) +#define HAL_timer_isr_prologue(T) +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/STM32/timers.cpp b/Marlin/src/HAL/STM32/timers.cpp index 8f1659591b..53a1f2a8e9 100644 --- a/Marlin/src/HAL/STM32/timers.cpp +++ b/Marlin/src/HAL/STM32/timers.cpp @@ -97,9 +97,15 @@ #define STEP_TIMER_DEV _TIMER_DEV(STEP_TIMER) #define TEMP_TIMER_DEV _TIMER_DEV(TEMP_TIMER) -// ------------------------ +// -------------------------------------------------------------------------- +// Local defines +// -------------------------------------------------------------------------- + +#define NUM_HARDWARE_TIMERS 2 + +// -------------------------------------------------------------------------- // Private Variables -// ------------------------ +// -------------------------------------------------------------------------- HardwareTimer *timer_instance[NUM_HARDWARE_TIMERS] = { nullptr }; diff --git a/Marlin/src/HAL/STM32/timers.h b/Marlin/src/HAL/STM32/timers.h index 33b5d8470f..aad543229e 100644 --- a/Marlin/src/HAL/STM32/timers.h +++ b/Marlin/src/HAL/STM32/timers.h @@ -41,7 +41,6 @@ #define HAL_TIMER_TYPE_MAX UINT16_MAX // Marlin timer_instance[] content (unrelated to timer selection) -#define NUM_HARDWARE_TIMERS 2 #define MF_TIMER_STEP 0 // Timer Index for Stepper #define MF_TIMER_TEMP 1 // Timer Index for Temperature #define MF_TIMER_PULSE MF_TIMER_STEP @@ -117,5 +116,5 @@ FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const ha } } -#define HAL_timer_isr_prologue(TIMER_NUM) -#define HAL_timer_isr_epilogue(TIMER_NUM) +#define HAL_timer_isr_prologue(T) +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/STM32F1/fast_pwm.cpp b/Marlin/src/HAL/STM32F1/fast_pwm.cpp index 994e62dbcd..98d56bc5e9 100644 --- a/Marlin/src/HAL/STM32F1/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32F1/fast_pwm.cpp @@ -27,21 +27,35 @@ #include "HAL.h" #include "timers.h" +#define NR_TIMERS TERN(STM32_XL_DENSITY, 14, 8) // Maple timers, 14 for STM32_XL_DENSITY (F/G chips), 8 for HIGH density (C D E) + +static uint16_t timer_freq[NR_TIMERS]; + +inline uint8_t timer_and_index_for_pin(const pin_t pin, timer_dev **timer_ptr) { + *timer_ptr = PIN_MAP[pin].timer_device; + for (uint8_t i = 0; i < NR_TIMERS; i++) if (*timer_ptr == HAL_get_timer_dev(i)) + return i; + return 0; +} + void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { if (!PWM_PIN(pin)) return; - timer_dev *timer = PIN_MAP[pin].timer_device; - if (!(timer->regs.bas->SR & TIMER_CR1_CEN)) // Ensure the timer is enabled + + timer_dev *timer; UNUSED(timer); + if (timer_freq[timer_and_index_for_pin(pin, &timer)] == 0) set_pwm_frequency(pin, PWM_FREQUENCY); - uint16_t max_val = timer->regs.bas->ARR * v / v_size; - if (invert) max_val = v_size - max_val; - pwmWrite(pin, max_val); + + const uint8_t channel = PIN_MAP[pin].timer_channel; + const uint16_t duty = invert ? v_size - v : v; + timer_set_compare(timer, channel, duty); + timer_set_mode(timer, channel, TIMER_PWM); // PWM Output Mode } void set_pwm_frequency(const pin_t pin, int f_desired) { if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer - timer_dev *timer = PIN_MAP[pin].timer_device; - uint8_t channel = PIN_MAP[pin].timer_channel; + timer_dev *timer; UNUSED(timer); + timer_freq[timer_and_index_for_pin(pin, &timer)] = f_desired; // Protect used timers if (timer == HAL_get_timer_dev(MF_TIMER_TEMP)) return; @@ -53,8 +67,10 @@ void set_pwm_frequency(const pin_t pin, int f_desired) { if (!(timer->regs.bas->SR & TIMER_CR1_CEN)) // Ensure the timer is enabled timer_init(timer); + const uint8_t channel = PIN_MAP[pin].timer_channel; timer_set_mode(timer, channel, TIMER_PWM); - uint16_t preload = 255; // Lock 255 PWM resolution for high frequencies + // Preload (resolution) cannot be equal to duty of 255 otherwise it may not result in digital off or on. + uint16_t preload = 254; int32_t prescaler = (HAL_TIMER_RATE) / (preload + 1) / f_desired - 1; if (prescaler > 65535) { // For low frequencies increase prescaler prescaler = 65535; diff --git a/Marlin/src/HAL/STM32F1/timers.h b/Marlin/src/HAL/STM32F1/timers.h index 24e241ee3d..f9ab6d13d3 100644 --- a/Marlin/src/HAL/STM32F1/timers.h +++ b/Marlin/src/HAL/STM32F1/timers.h @@ -188,7 +188,7 @@ FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { } } -#define HAL_timer_isr_epilogue(TIMER_NUM) +#define HAL_timer_isr_epilogue(T) // No command is available in framework to turn off ARPE bit, which is turned on by default in libmaple. // Needed here to reset ARPE=0 for stepper timer diff --git a/Marlin/src/HAL/TEENSY31_32/timers.h b/Marlin/src/HAL/TEENSY31_32/timers.h index 08f82f0b7d..3b073d63ab 100644 --- a/Marlin/src/HAL/TEENSY31_32/timers.h +++ b/Marlin/src/HAL/TEENSY31_32/timers.h @@ -110,4 +110,4 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); void HAL_timer_isr_prologue(const uint8_t timer_num); -#define HAL_timer_isr_epilogue(TIMER_NUM) +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/TEENSY35_36/timers.h b/Marlin/src/HAL/TEENSY35_36/timers.h index 4f65bdffd1..6c342bbe0d 100644 --- a/Marlin/src/HAL/TEENSY35_36/timers.h +++ b/Marlin/src/HAL/TEENSY35_36/timers.h @@ -109,4 +109,4 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); void HAL_timer_isr_prologue(const uint8_t timer_num); -#define HAL_timer_isr_epilogue(TIMER_NUM) +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/TEENSY40_41/timers.h b/Marlin/src/HAL/TEENSY40_41/timers.h index afb373c599..81cf67f7bc 100644 --- a/Marlin/src/HAL/TEENSY40_41/timers.h +++ b/Marlin/src/HAL/TEENSY40_41/timers.h @@ -114,4 +114,4 @@ bool HAL_timer_interrupt_enabled(const uint8_t timer_num); void HAL_timer_isr_prologue(const uint8_t timer_num); //void HAL_timer_isr_epilogue(const uint8_t timer_num) {} -#define HAL_timer_isr_epilogue(TIMER_NUM) +#define HAL_timer_isr_epilogue(T) From e949b4439becc0e440c64bbcba1825654dd9efce Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Sat, 4 Dec 2021 09:48:54 +1300 Subject: [PATCH 185/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20TIMER=5FTONE=20for?= =?UTF-8?q?=20ZM3E4=20(#23212)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ini/stm32f1.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ini/stm32f1.ini b/ini/stm32f1.ini index da7cedd3a3..0e57848b10 100644 --- a/ini/stm32f1.ini +++ b/ini/stm32f1.ini @@ -410,12 +410,12 @@ platform = ${ZONESTAR_ZM3E.platform} extends = ZONESTAR_ZM3E board = genericSTM32F103VC board_build.variant = MARLIN_F103Vx -build_flags = ${ZONESTAR_ZM3E.build_flags} -DTIMER_TONE=1 +build_flags = ${ZONESTAR_ZM3E.build_flags} -DTIMER_TONE=TIM1 [env:STM32F103VE_ZM3E4V2_USB] platform = ${ZONESTAR_ZM3E.platform} extends = ZONESTAR_ZM3E board = genericSTM32F103VE board_build.variant = MARLIN_F103Vx -build_flags = ${ZONESTAR_ZM3E.build_flags} -DTIMER_TONE=1 +build_flags = ${ZONESTAR_ZM3E.build_flags} -DTIMER_TONE=TIM1 board_upload.maximum_size = 499712 From 36a04190a01a83b2bf9a9fd810b082649aa53aa9 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 4 Dec 2021 01:02:04 +0000 Subject: [PATCH 186/532] [cron] Bump distribution date (2021-12-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 456a5c33bc..689d35f481 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 "2021-12-03" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 42c737ca3c..656c68abf9 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 "2021-12-03" + #define STRING_DISTRIBUTION_DATE "2021-12-04" #endif /** From bfead67544106ec2b3f2ba228a44319ad8510a52 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Sun, 5 Dec 2021 11:10:29 +1300 Subject: [PATCH 187/532] =?UTF-8?q?=E2=9C=A8=20BigTree=20SKR=202=20with=20?= =?UTF-8?q?F429=20(#23177)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/boards.h | 2 +- Marlin/src/pins/pins.h | 2 +- .../boards/marlin_STM32F429VGT6.json | 50 +++++++++++++++++++ ini/stm32f4.ini | 33 ++++++++++++ 4 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 buildroot/share/PlatformIO/boards/marlin_STM32F429VGT6.json diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index ebb130698c..9483d6322a 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -382,7 +382,7 @@ #define BOARD_BTT_BTT002_V1_0 4210 // BigTreeTech BTT002 v1.0 (STM32F407VGT6) #define BOARD_BTT_E3_RRF 4211 // BigTreeTech E3 RRF (STM32F407VGT6) #define BOARD_BTT_SKR_V2_0_REV_A 4212 // BigTreeTech SKR v2.0 Rev A (STM32F407VGT6) -#define BOARD_BTT_SKR_V2_0_REV_B 4213 // BigTreeTech SKR v2.0 Rev B (STM32F407VGT6) +#define BOARD_BTT_SKR_V2_0_REV_B 4213 // BigTreeTech SKR v2.0 Rev B (STM32F407VGT6/STM32F429VGT6) #define BOARD_BTT_GTR_V1_0 4214 // BigTreeTech GTR v1.0 (STM32F407IGT) #define BOARD_BTT_OCTOPUS_V1_0 4215 // BigTreeTech Octopus v1.0 (STM32F446ZET6) #define BOARD_BTT_OCTOPUS_V1_1 4216 // BigTreeTech Octopus v1.1 (STM32F446ZET6) diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 3843441712..59e0633307 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -622,7 +622,7 @@ #elif MB(BTT_SKR_V2_0_REV_A) #include "stm32f4/pins_BTT_SKR_V2_0_REV_A.h" // STM32F4 env:BIGTREE_SKR_2 env:BIGTREE_SKR_2_USB env:BIGTREE_SKR_2_USB_debug #elif MB(BTT_SKR_V2_0_REV_B) - #include "stm32f4/pins_BTT_SKR_V2_0_REV_B.h" // STM32F4 env:BIGTREE_SKR_2 env:BIGTREE_SKR_2_USB env:BIGTREE_SKR_2_USB_debug + #include "stm32f4/pins_BTT_SKR_V2_0_REV_B.h" // STM32F4 env:BIGTREE_SKR_2 env:BIGTREE_SKR_2_USB env:BIGTREE_SKR_2_USB_debug env:BIGTREE_SKR_2_F429 env:BIGTREE_SKR_2_F429_USB env:BIGTREE_SKR_2_F429_USB_debug #elif MB(BTT_OCTOPUS_V1_0) #include "stm32f4/pins_BTT_OCTOPUS_V1_0.h" // STM32F4 env:BIGTREE_OCTOPUS_V1 env:BIGTREE_OCTOPUS_V1_USB #elif MB(BTT_OCTOPUS_V1_1) diff --git a/buildroot/share/PlatformIO/boards/marlin_STM32F429VGT6.json b/buildroot/share/PlatformIO/boards/marlin_STM32F429VGT6.json new file mode 100644 index 0000000000..3ad2d9d99f --- /dev/null +++ b/buildroot/share/PlatformIO/boards/marlin_STM32F429VGT6.json @@ -0,0 +1,50 @@ +{ + "build": { + "cpu": "cortex-m4", + "extra_flags": "-DSTM32F4 -DSTM32F429xx", + "f_cpu": "168000000L", + "mcu": "stm32f429vgt6", + "product_line": "STM32F429xx", + "variant": "MARLIN_F4x7Vx" + }, + "connectivity": [ + "can" + ], + "debug": { + "default_tools": [ + "stlink" + ], + "jlink_device": "STM32F429VG", + "onboard_tools": [ + "stlink" + ], + "openocd_board": "stm32f429", + "openocd_target": "stm32f4x", + "svd_path": "STM32F429x.svd" + }, + "frameworks": [ + "arduino", + "cmsis", + "mbed", + "stm32cube", + "libopencm3", + "zephyr" + ], + "name": "STM32F429VG (128k RAM, 64k CCM RAM, 1024k Flash)", + "upload": { + "disable_flushing": false, + "maximum_ram_size": 131072, + "maximum_size": 1048576, + "protocol": "stlink", + "protocols": [ + "stlink", + "dfu", + "jlink" + ], + "require_upload_port": true, + "use_1200bps_touch": false, + "wait_for_upload_port": false + }, + "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f429-439.html", + "vendor": "ST" +} diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index 6fec1d46fc..d7c80cf0e9 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -245,6 +245,39 @@ extends = env:BIGTREE_SKR_2_USB build_flags = ${env:BIGTREE_SKR_2_USB.build_flags} -O0 build_unflags = ${env:BIGTREE_SKR_2_USB.build_unflags} -Os -NDEBUG +# +# Bigtreetech SKR V2.0 F429 (STM32F429VGT6 ARM Cortex-M4) with USB Flash Drive Support +# +[env:BIGTREE_SKR_2_F429] +platform = ${common_stm32.platform} +extends = stm32_variant +platform_packages = ${stm_flash_drive.platform_packages} +board = marlin_STM32F429VGT6 +board_build.variant = MARLIN_F4x7Vx +board_build.offset = 0x8000 +board_upload.offset_address = 0x08008000 +build_flags = ${stm_flash_drive.build_flags} + -DUSE_USBHOST_HS -DUSE_USB_HS_IN_FS + -DUSBD_IRQ_PRIO=5 -DUSBD_IRQ_SUBPRIO=6 + -DHSE_VALUE=8000000U -DHAL_SD_MODULE_ENABLED + -DPIN_SERIAL3_RX=PD_9 -DPIN_SERIAL3_TX=PD_8 +upload_protocol = stlink + +# +# BigTreeTech SKR V2.0 F429 (STM32F429VGT6 ARM Cortex-M4) with USB Media Share Support +# +[env:BIGTREE_SKR_2_F429_USB] +platform = ${common_stm32.platform} +extends = env:BIGTREE_SKR_2_F429 +build_flags = ${env:BIGTREE_SKR_2_F429.build_flags} -DUSBD_USE_CDC_MSC +build_unflags = ${env:BIGTREE_SKR_2_F429.build_unflags} -DUSBD_USE_CDC + +[env:BIGTREE_SKR_2_F429_USB_debug] +platform = ${common_stm32.platform} +extends = env:BIGTREE_SKR_2_F429_USB +build_flags = ${env:BIGTREE_SKR_2_F429_USB.build_flags} -O0 +build_unflags = ${env:BIGTREE_SKR_2_F429_USB.build_unflags} -Os -NDEBUG + # # BigTreeTech Octopus V1.0/1.1 / Octopus Pro V1.0 (STM32F446ZET6 ARM Cortex-M4) # From 7daa76382f858817ea7b52d11f9fae88d252988d Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Sun, 5 Dec 2021 05:14:19 +0700 Subject: [PATCH 188/532] =?UTF-8?q?=F0=9F=9A=B8=20Park=20nozzle=20on=20"lo?= =?UTF-8?q?ud=20kill"=20(#23172)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/temperature.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 758275d21e..9d6c8ae061 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -67,6 +67,10 @@ #include "../gcode/gcode.h" #endif +#if ENABLED(NOZZLE_PARK_FEATURE) + #include "../libs/nozzle.h" +#endif + // MAX TC related macros #define TEMP_SENSOR_IS_MAX(n, M) (ENABLED(TEMP_SENSOR_##n##_IS_MAX##M) || (ENABLED(TEMP_SENSOR_REDUNDANT_IS_MAX##M) && REDUNDANT_TEMP_MATCH(SOURCE, E##n))) #define TEMP_SENSOR_IS_ANY_MAX_TC(n) (ENABLED(TEMP_SENSOR_##n##_IS_MAX_TC) || (ENABLED(TEMP_SENSOR_REDUNDANT_IS_MAX_TC) && REDUNDANT_TEMP_MATCH(SOURCE, E##n))) @@ -991,6 +995,12 @@ inline void loud_kill(FSTR_P const lcd_msg, const heater_id_t heater_id) { } WRITE(BEEPER_PIN, HIGH); #endif + #if ENABLED(NOZZLE_PARK_FEATURE) + if (!homing_needed_error()) { + nozzle.park(0); + planner.synchronize(); + } + #endif kill(lcd_msg, HEATER_FSTR(heater_id)); } From e6bbdd89b44a6d83df8788debf25880fadfab87a Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 4 Dec 2021 17:17:10 -0600 Subject: [PATCH 189/532] =?UTF-8?q?=F0=9F=94=A7=20Cutter=20pins=20for=20SK?= =?UTF-8?q?R=202.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pins/stm32f4/pins_BTT_SKR_V2_0_common.h | 83 +++++++++++++------ 1 file changed, 57 insertions(+), 26 deletions(-) diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h index a2111d849e..bf3409210e 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h @@ -190,16 +190,28 @@ #define Z_CS_PIN PD0 #endif -#define E0_STEP_PIN PD15 -#define E0_DIR_PIN PD14 -#define E0_ENABLE_PIN PC7 +#ifndef E0_STEP_PIN + #define E0_STEP_PIN PD15 +#endif +#ifndef E0_DIR_PIN + #define E0_DIR_PIN PD14 +#endif +#ifndef E0_ENABLE_PIN + #define E0_ENABLE_PIN PC7 +#endif #ifndef E0_CS_PIN #define E0_CS_PIN PC6 #endif -#define E1_STEP_PIN PD11 -#define E1_DIR_PIN PD10 -#define E1_ENABLE_PIN PD13 +#ifndef E1_STEP_PIN + #define E1_STEP_PIN PD11 +#endif +#ifndef E1_DIR_PIN + #define E1_DIR_PIN PD10 +#endif +#ifndef E1_ENABLE_PIN + #define E1_ENABLE_PIN PD13 +#endif #ifndef E1_CS_PIN #define E1_CS_PIN PD12 #endif @@ -207,9 +219,15 @@ // // Temperature Sensors // -#define TEMP_BED_PIN PA1 // TB -#define TEMP_0_PIN PA2 // TH0 -#define TEMP_1_PIN PA3 // TH1 +#ifndef TEMP_0_PIN + #define TEMP_0_PIN PA2 // TH0 +#endif +#ifndef TEMP_1_PIN + #define TEMP_1_PIN PA3 // TH1 +#endif +#ifndef TEMP_BED_PIN + #define TEMP_BED_PIN PA1 // TB +#endif #if HOTENDS == 1 && DISABLED(HEATERS_PARALLEL) #if TEMP_SENSOR_PROBE @@ -234,12 +252,22 @@ #ifndef FAN_PIN #define FAN_PIN PB7 // Fan0 #endif -#ifndef FAN1_PIN - #define FAN1_PIN PB6 // Fan1 -#endif -#ifndef FAN2_PIN - #define FAN2_PIN PB5 // Fan2 -#endif + +#if EITHER(SPINDLE_FEATURE, LASER_FEATURE) + #ifndef SPINDLE_LASER_PWM_PIN + #define SPINDLE_LASER_PWM_PIN PB5 + #endif + #ifndef SPINDLE_LASER_ENA_PIN + #define SPINDLE_LASER_ENA_PIN PB6 + #endif +#else + #ifndef FAN1_PIN + #define FAN1_PIN PB6 // Fan1 + #endif + #ifndef FAN2_PIN + #define FAN2_PIN PB5 // Fan2 + #endif +#endif // SPINDLE_FEATURE || LASER_FEATURE // // Software SPI pins for TMC2130 stepper drivers @@ -275,6 +303,9 @@ //#define E3_HARDWARE_SERIAL Serial1 //#define E4_HARDWARE_SERIAL Serial1 + // + // Software serial + // #define X_SERIAL_TX_PIN PE0 #define X_SERIAL_RX_PIN X_SERIAL_TX_PIN @@ -333,7 +364,16 @@ // Onboard SD card // Must use soft SPI because Marlin's default hardware SPI is tied to LCD's EXP2 // -#if SD_CONNECTION_IS(ONBOARD) +#if SD_CONNECTION_IS(LCD) + + #define SDSS PA4 + #define SD_SS_PIN SDSS + #define SD_SCK_PIN PA5 + #define SD_MISO_PIN PA6 + #define SD_MOSI_PIN PA7 + #define SD_DETECT_PIN PC4 + +#elif SD_CONNECTION_IS(ONBOARD) #define SDIO_SUPPORT // Use SDIO for onboard SD #define SDIO_D0_PIN PC8 @@ -343,17 +383,8 @@ #define SDIO_CK_PIN PC12 #define SDIO_CMD_PIN PD2 -#elif SD_CONNECTION_IS(LCD) - - #define SDSS PA4 - #define SD_SS_PIN SDSS - #define SD_SCK_PIN PA5 - #define SD_MISO_PIN PA6 - #define SD_MOSI_PIN PA7 - #define SD_DETECT_PIN PC4 - #elif SD_CONNECTION_IS(CUSTOM_CABLE) - #error "CUSTOM_CABLE is not a supported SDCARD_CONNECTION for this board" + #error "No custom SD drive cable defined for this board." #endif #if ENABLED(BTT_MOTOR_EXPANSION) From 363a17ac464e72bb013150e742b0e95f9df707eb Mon Sep 17 00:00:00 2001 From: Stuart Pittaway <1201909+stuartpittaway@users.noreply.github.com> Date: Sat, 4 Dec 2021 23:44:10 +0000 Subject: [PATCH 190/532] =?UTF-8?q?=E2=9C=A8=20M3426=20to=20read=20i2c=20M?= =?UTF-8?q?CP3426=20ADC=20(#23184)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/adc/adc_mcp3426.cpp | 104 +++++++++++++++++++++ Marlin/src/feature/adc/adc_mcp3426.h | 41 ++++++++ Marlin/src/feature/twibus.cpp | 15 ++- Marlin/src/gcode/feature/adc/M3426.cpp | 63 +++++++++++++ Marlin/src/gcode/gcode.cpp | 4 + Marlin/src/gcode/gcode.h | 5 + Marlin/src/pins/stm32f4/pins_INDEX_REV03.h | 5 + ini/features.ini | 1 + platformio.ini | 1 + 9 files changed, 234 insertions(+), 5 deletions(-) create mode 100644 Marlin/src/feature/adc/adc_mcp3426.cpp create mode 100644 Marlin/src/feature/adc/adc_mcp3426.h create mode 100644 Marlin/src/gcode/feature/adc/M3426.cpp diff --git a/Marlin/src/feature/adc/adc_mcp3426.cpp b/Marlin/src/feature/adc/adc_mcp3426.cpp new file mode 100644 index 0000000000..aaddf46821 --- /dev/null +++ b/Marlin/src/feature/adc/adc_mcp3426.cpp @@ -0,0 +1,104 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 . + * + */ + +/** + * adc_mcp3426.cpp - library for MicroChip MCP3426 I2C A/D converter + * + * For implementation details, please take a look at the datasheet: + * https://www.microchip.com/en-us/product/MCP3426 + */ + +#include "../../inc/MarlinConfig.h" + +#if ENABLED(HAS_MCP3426_ADC) + +#include "adc_mcp3426.h" + +// Read the ADC value from MCP342X on a specific channel +int16_t MCP3426::ReadValue(uint8_t channel, uint8_t gain) { + Error = false; + + #if PINS_EXIST(I2C_SCL, I2C_SDA) && DISABLED(SOFT_I2C_EEPROM) + Wire.setSDA(pin_t(I2C_SDA_PIN)); + Wire.setSCL(pin_t(I2C_SCL_PIN)); + #endif + + Wire.begin(); // No address joins the BUS as the master + + Wire.beginTransmission(I2C_ADDRESS(MCP342X_ADC_I2C_ADDRESS)); + + // Continuous Conversion Mode, 16 bit, Channel 1, Gain x4 + // 26 = 0b00011000 + // RXXCSSGG + // R = Ready Bit + // XX = Channel (00=1, 01=2, 10=3 (MCP3428), 11=4 (MCP3428)) + // C = Conversion Mode Bit (1= Continuous Conversion Mode (Default)) + // SS = Sample rate, 10=15 samples per second @ 16 bits + // GG = Gain 00 =x1 + uint8_t controlRegister = 0b00011000; + + if (channel == 2) controlRegister |= 0b00100000; // Select channel 2 + + if (gain == 2) + controlRegister |= 0b00000001; + else if (gain == 4) + controlRegister |= 0b00000010; + else if (gain == 8) + controlRegister |= 0b00000011; + + Wire.write(controlRegister); + if (Wire.endTransmission() != 0) { + Error = true; + return 0; + } + + const uint8_t len = 3; + uint8_t buffer[len] = {}; + + do { + Wire.requestFrom(I2C_ADDRESS(MCP342X_ADC_I2C_ADDRESS), len); + if (Wire.available() != len) { + Error = true; + return 0; + } + + for (uint8_t i = 0; i < len; ++i) + buffer[i] = Wire.read(); + + // Is conversion ready, if not loop around again + } while ((buffer[2] & 0x80) != 0); + + union TwoBytesToInt16 { + uint8_t bytes[2]; + int16_t integervalue; + }; + TwoBytesToInt16 ConversionUnion; + + ConversionUnion.bytes[1] = buffer[0]; + ConversionUnion.bytes[0] = buffer[1]; + + return ConversionUnion.integervalue; +} + +MCP3426 mcp3426; + +#endif // HAS_MCP3426_ADC diff --git a/Marlin/src/feature/adc/adc_mcp3426.h b/Marlin/src/feature/adc/adc_mcp3426.h new file mode 100644 index 0000000000..35458716b9 --- /dev/null +++ b/Marlin/src/feature/adc/adc_mcp3426.h @@ -0,0 +1,41 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 + +/** + * Arduino library for MicroChip MCP3426 I2C A/D converter. + * https://www.microchip.com/en-us/product/MCP3426 + */ + +#include +#include + +// Address of MCP342X chip +#define MCP342X_ADC_I2C_ADDRESS 104 + +class MCP3426 { + public: + int16_t ReadValue(uint8_t channel, uint8_t gain); + bool Error; +}; + +extern MCP3426 mcp3426; diff --git a/Marlin/src/feature/twibus.cpp b/Marlin/src/feature/twibus.cpp index e33581676c..bbe4c0966a 100644 --- a/Marlin/src/feature/twibus.cpp +++ b/Marlin/src/feature/twibus.cpp @@ -34,13 +34,18 @@ TWIBus i2c; TWIBus::TWIBus() { #if I2C_SLAVE_ADDRESS == 0 - Wire.begin( // No address joins the BUS as the master - #if PINS_EXIST(I2C_SCL, I2C_SDA) && DISABLED(SOFT_I2C_EEPROM) - pin_t(I2C_SDA_PIN), pin_t(I2C_SCL_PIN) - #endif - ); + + #if PINS_EXIST(I2C_SCL, I2C_SDA) && DISABLED(SOFT_I2C_EEPROM) + Wire.setSDA(pin_t(I2C_SDA_PIN)); + Wire.setSCL(pin_t(I2C_SCL_PIN)); + #endif + + Wire.begin(); // No address joins the BUS as the master + #else + Wire.begin(I2C_SLAVE_ADDRESS); // Join the bus as a slave + #endif reset(); } diff --git a/Marlin/src/gcode/feature/adc/M3426.cpp b/Marlin/src/gcode/feature/adc/M3426.cpp new file mode 100644 index 0000000000..8205fa01f2 --- /dev/null +++ b/Marlin/src/gcode/feature/adc/M3426.cpp @@ -0,0 +1,63 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include "../../../inc/MarlinConfig.h" + +#if ENABLED(HAS_MCP3426_ADC) + +#include "../../gcode.h" + +#include "../../../feature/adc/adc_mcp3426.h" + +/** + * M3426: Read 16 bit (signed) value from I2C MCP3426 ADC device + * + * M3426 C channel 1 or 2 + * M3426 G gain 1, 2, 4 or 8 + * M3426 I 0 or 1, invert reply + */ +void GcodeSuite::M3426() { + uint8_t channel = parser.byteval('C', 1), // Select the channel 1 or 2 + gain = parser.byteval('G', 1); + const bool inverted = parser.byteval('I') == 1; + + if (channel <= 2 && (gain == 1 || gain == 2 || gain == 4 || gain == 8)) { + int16_t result = mcp3426.ReadValue(channel, gain); + + if (mcp3426.Error == false) { + if (inverted) { + // Should we invert the reading (32767 - ADC value) ? + // Caters to end devices that expect values to increase when in reality they decrease. + // e.g., A pressure sensor in a vacuum when the end device expects a positive pressure. + result = INT16_MAX - result; + } + //SERIAL_ECHOPGM(STR_OK); + SERIAL_ECHOLNPGM("V:", result, " C:", channel, " G:", gain, " I:", inverted ? 1 : 0); + } + else + SERIAL_ERROR_MSG("MCP342X i2c error"); + } + else + SERIAL_ERROR_MSG("MCP342X Bad request"); +} + +#endif // HAS_MCP3426_ADC diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 24eb9914d1..c05ac5494d 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -1054,6 +1054,10 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { case 7219: M7219(); break; // M7219: Set LEDs, columns, and rows #endif + #if ENABLED(HAS_MCP3426_ADC) + case 3426: M3426(); break; // M3426: Read MCP3426 ADC (over i2c) + #endif + default: parser.unknown_command_warning(); break; } break; diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 6bfaf00c13..bbfb31a3fe 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -297,6 +297,7 @@ * M917 - L6470 tuning: Find minimum current thresholds. (Requires at least one _DRIVER_TYPE L6470) * M918 - L6470 tuning: Increase speed until max or error. (Requires at least one _DRIVER_TYPE L6470) * M951 - Set Magnetic Parking Extruder parameters. (Requires MAGNETIC_PARKING_EXTRUDER) + * M3426 - Read MCP3426 ADC over I2C. (Requires HAS_MCP3426_ADC) * M7219 - Control Max7219 Matrix LEDs. (Requires MAX7219_GCODE) * *** SCARA *** @@ -1204,6 +1205,10 @@ private: static void M1004(); #endif + #if ENABLED(HAS_MCP3426_ADC) + static void M3426(); + #endif + #if ENABLED(MAX7219_GCODE) static void M7219(); #endif diff --git a/Marlin/src/pins/stm32f4/pins_INDEX_REV03.h b/Marlin/src/pins/stm32f4/pins_INDEX_REV03.h index 8761ca955a..8560a04375 100644 --- a/Marlin/src/pins/stm32f4/pins_INDEX_REV03.h +++ b/Marlin/src/pins/stm32f4/pins_INDEX_REV03.h @@ -42,6 +42,9 @@ #define SRAM_EEPROM_EMULATION #define MARLIN_EEPROM_SIZE 0x2000 // 8KB +// I2C MCP3426 (16-Bit, 240SPS, dual-channel ADC) +#define HAS_MCP3426_ADC + // // Servos // @@ -116,6 +119,8 @@ #define FAN2_PIN PE4 #define FAN3_PIN PE5 +#define FAN_SOFT_PWM + // Neopixel Rings #define NEOPIXEL_PIN PC7 #define NEOPIXEL2_PIN PC8 diff --git a/ini/features.ini b/ini/features.ini index 91baa601ca..b56565b154 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -94,6 +94,7 @@ NEXTION_TFT = src_filter=+ USE_UHS2_USB = src_filter=+ USE_UHS3_USB = src_filter=+ USB_FLASH_DRIVE_SUPPORT = src_filter=+ +HAS_MCP3426_ADC = src_filter=+ + AUTO_BED_LEVELING_BILINEAR = src_filter=+ AUTO_BED_LEVELING_(3POINT|(BI)?LINEAR) = src_filter=+ MESH_BED_LEVELING = src_filter=+ + diff --git a/platformio.ini b/platformio.ini index 07821fca96..1b4effcf25 100644 --- a/platformio.ini +++ b/platformio.ini @@ -92,6 +92,7 @@ default_src_filter = + - - + - - - + - - - - - - From d6b332f4c7a79553a41c4a6166f21f802be930c8 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 5 Dec 2021 01:07:50 +0000 Subject: [PATCH 191/532] [cron] Bump distribution date (2021-12-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 689d35f481..aca4b1d333 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 "2021-12-04" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 656c68abf9..a60bc91011 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 "2021-12-04" + #define STRING_DISTRIBUTION_DATE "2021-12-05" #endif /** From 97400e54b90a4fe40b60ea2f76e90cb14b0bf6ea Mon Sep 17 00:00:00 2001 From: ladismrkolj Date: Sun, 5 Dec 2021 22:41:39 +0100 Subject: [PATCH 192/532] =?UTF-8?q?=F0=9F=94=A7=20Chamber=20Fan=20index=20?= =?UTF-8?q?option=20(#23262)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 3 ++- Marlin/src/inc/SanityCheck.h | 4 ++-- Marlin/src/inc/Warnings.cpp | 4 ++++ Marlin/src/module/temperature.cpp | 4 +++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index d4fcd51003..5f02d25cc4 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -186,7 +186,8 @@ //#define CHAMBER_FAN // Enable a fan on the chamber #if ENABLED(CHAMBER_FAN) - #define CHAMBER_FAN_MODE 2 // Fan control mode: 0=Static; 1=Linear increase when temp is higher than target; 2=V-shaped curve; 3=similar to 1 but fan is always on. + //#define CHAMBER_FAN_INDEX 2 // Index of a fan to repurpose as the chamber fan. (Default: first unused fan) + #define CHAMBER_FAN_MODE 2 // Fan control mode: 0=Static; 1=Linear increase when temp is higher than target; 2=V-shaped curve; 3=similar to 1 but fan is always on. #if CHAMBER_FAN_MODE == 0 #define CHAMBER_FAN_BASE 255 // Chamber fan PWM (0-255) #elif CHAMBER_FAN_MODE == 1 diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 39a154cb53..1442b9219f 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2270,8 +2270,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "LASER_COOLANT_FLOW_METER requires FLOWMETER_PIN and LASER_FEATURE." #endif -#if ENABLED(CHAMBER_FAN) && !(defined(CHAMBER_FAN_MODE) && WITHIN(CHAMBER_FAN_MODE, 0, 2)) - #error "CHAMBER_FAN_MODE must be between 0 and 2." +#if ENABLED(CHAMBER_FAN) && !(defined(CHAMBER_FAN_MODE) && WITHIN(CHAMBER_FAN_MODE, 0, 3)) + #error "CHAMBER_FAN_MODE must be between 0 and 3." #endif #if ENABLED(CHAMBER_VENT) diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index 1976c09581..b7eef9c49f 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -524,6 +524,10 @@ #endif #endif +#if ENABLED(CHAMBER_FAN) && !defined(CHAMBER_FAN_INDEX) + #warning "Auto-assigned CHAMBER_FAN_INDEX to the first free FAN pin." +#endif + #if IS_LEGACY_TFT #warning "Don't forget to update your TFT settings in Configuration.h." #endif diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 9d6c8ae061..9d6c566ba0 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -865,7 +865,9 @@ int16_t Temperature::getHeaterPower(const heater_id_t heater_id) { #define INIT_CHAMBER_AUTO_FAN_PIN(P) SET_OUTPUT(P) #endif - #define CHAMBER_FAN_INDEX HOTENDS + #ifndef CHAMBER_FAN_INDEX + #define CHAMBER_FAN_INDEX HOTENDS + #endif void Temperature::update_autofans() { #define _EFAN(B,A) _EFANOVERLAP(A,B) ? B : From 4d0880c74d8363948e63f22839c2a9ed5a672f7d Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Mon, 6 Dec 2021 10:42:56 +1300 Subject: [PATCH 193/532] =?UTF-8?q?=F0=9F=93=8C=20More=20Longer3D=20LKx=20?= =?UTF-8?q?Pro=20serial=20tests=20=20(#23260)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h b/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h index 75ee01946a..729a82b9c6 100644 --- a/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h +++ b/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h @@ -32,13 +32,13 @@ #error "Longer3D LGT KIT V1.0 board only supports one hotend / E-stepper. Comment out this line to continue." #endif -#if SERIAL_PORT == 1 || SERIAL_PORT_2 == 1 +#if SERIAL_PORT == 1 || SERIAL_PORT_2 == 1 || SERIAL_PORT_3 == 1 #warning "Serial 1 is originally reserved to DGUS LCD." #endif -#if SERIAL_PORT == 2 || SERIAL_PORT_2 == 2 +#if SERIAL_PORT == 2 || SERIAL_PORT_2 == 2 || SERIAL_PORT_3 == 2 || LCD_SERIAL_PORT == 2 #warning "Serial 2 has no connector. Hardware changes may be required to use it." #endif -#if SERIAL_PORT == 3 || SERIAL_PORT_2 == 3 +#if SERIAL_PORT == 3 || SERIAL_PORT_2 == 3 || SERIAL_PORT_3 == 3 || LCD_SERIAL_PORT == 3 #define CHANGE_Y_LIMIT_PINS #warning "Serial 3 is originally reserved to Y limit switches. Hardware changes are required to use it." #endif From fcb48598e2e2dfebb92acdc103f7119c7f9fcaa3 Mon Sep 17 00:00:00 2001 From: tommywienert <53783769+tommywienert@users.noreply.github.com> Date: Sun, 5 Dec 2021 23:16:23 +0100 Subject: [PATCH 194/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20env:chitu=5Ff103?= =?UTF-8?q?=20(#23225)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ini/stm32f1.ini | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ini/stm32f1.ini b/ini/stm32f1.ini index 0e57848b10..a2cd1b0f58 100644 --- a/ini/stm32f1.ini +++ b/ini/stm32f1.ini @@ -365,8 +365,9 @@ platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F103ZE board_build.variant = MARLIN_F103Zx +board_build.offset = 0x8800 build_flags = ${stm32_variant.build_flags} - -DSTM32F1xx -DSTM32_XL_DENSITY + -DSTM32F1xx build_unflags = ${stm32_variant.build_unflags} extra_scripts = ${stm32_variant.extra_scripts} buildroot/share/PlatformIO/scripts/chitu_crypt.py From a010c4d1c8a9c6fdf296a33233deb99e235e188a Mon Sep 17 00:00:00 2001 From: Chris Pepper Date: Sun, 5 Dec 2021 22:18:02 +0000 Subject: [PATCH 195/532] =?UTF-8?q?=F0=9F=90=9B=20HAL=5Freboot=20for=20nat?= =?UTF-8?q?ive=20HAL=20(#23246)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/NATIVE_SIM/HAL.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Marlin/src/HAL/NATIVE_SIM/HAL.h b/Marlin/src/HAL/NATIVE_SIM/HAL.h index 915339468b..436b4b4daa 100644 --- a/Marlin/src/HAL/NATIVE_SIM/HAL.h +++ b/Marlin/src/HAL/NATIVE_SIM/HAL.h @@ -140,6 +140,8 @@ inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, inline void HAL_clear_reset_source(void) {} inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; } +void HAL_reboot(); + /* ---------------- Delay in cycles */ #define DELAY_CYCLES(x) Kernel::delayCycles(x) From ecd1ac70929b4b6b2bc0e4f9ea4e7c4b050e2396 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 6 Dec 2021 01:04:44 +0000 Subject: [PATCH 196/532] [cron] Bump distribution date (2021-12-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 aca4b1d333..be5594a148 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 "2021-12-05" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 a60bc91011..134cacc336 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 "2021-12-05" + #define STRING_DISTRIBUTION_DATE "2021-12-06" #endif /** From 6580e655fb255125d63e41e05045075452f5bef9 Mon Sep 17 00:00:00 2001 From: Stuart Pittaway <1201909+stuartpittaway@users.noreply.github.com> Date: Mon, 6 Dec 2021 21:40:18 +0000 Subject: [PATCH 197/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20TWIBus=20Wire.begi?= =?UTF-8?q?n=20call=20(#23183)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/twibus.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Marlin/src/feature/twibus.cpp b/Marlin/src/feature/twibus.cpp index bbe4c0966a..9aec6b0305 100644 --- a/Marlin/src/feature/twibus.cpp +++ b/Marlin/src/feature/twibus.cpp @@ -40,11 +40,11 @@ TWIBus::TWIBus() { Wire.setSCL(pin_t(I2C_SCL_PIN)); #endif - Wire.begin(); // No address joins the BUS as the master + Wire.begin(); // No address joins the BUS as the master #else - Wire.begin(I2C_SLAVE_ADDRESS); // Join the bus as a slave + Wire.begin(I2C_SLAVE_ADDRESS); // Join the bus as a slave #endif reset(); @@ -56,9 +56,8 @@ void TWIBus::reset() { } void TWIBus::address(const uint8_t adr) { - if (!WITHIN(adr, 8, 127)) { + if (!WITHIN(adr, 8, 127)) SERIAL_ECHO_MSG("Bad I2C address (8-127)"); - } addr = adr; From ea0d0e8e8b4552aff660be36a9b70c2c8960cdc3 Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Mon, 6 Dec 2021 15:52:18 -0600 Subject: [PATCH 198/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20non-PWM=20cutter?= =?UTF-8?q?=20compile=20(#23169)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/spindle_laser.h | 12 +++------ Marlin/src/feature/spindle_laser_types.h | 24 +++++++++++++++++- Marlin/src/gcode/control/M3-M5.cpp | 32 +++++++++++++----------- buildroot/tests/mega1280 | 6 +++++ 4 files changed, 50 insertions(+), 24 deletions(-) diff --git a/Marlin/src/feature/spindle_laser.h b/Marlin/src/feature/spindle_laser.h index ba82c4d731..95d60ae486 100644 --- a/Marlin/src/feature/spindle_laser.h +++ b/Marlin/src/feature/spindle_laser.h @@ -41,18 +41,10 @@ #define PCT_TO_PWM(X) ((X) * 255 / 100) #define PCT_TO_SERVO(X) ((X) * 180 / 100) -#ifndef SPEED_POWER_INTERCEPT - #define SPEED_POWER_INTERCEPT 0 -#endif - // #define _MAP(N,S1,S2,D1,D2) ((N)*_MAX((D2)-(D1),0)/_MAX((S2)-(S1),1)+(D1)) class SpindleLaser { public: - static constexpr float - min_pct = TERN(CUTTER_POWER_RELATIVE, 0, TERN(SPINDLE_FEATURE, round(100.0f * (SPEED_POWER_MIN) / (SPEED_POWER_MAX)), SPEED_POWER_MIN)), - max_pct = TERN(SPINDLE_FEATURE, 100, SPEED_POWER_MAX); - static const inline uint8_t pct_to_ocr(const_float_t pct) { return uint8_t(PCT_TO_PWM(pct)); } // cpower = configured values (e.g., SPEED_POWER_MAX) @@ -158,6 +150,9 @@ public: } static inline cutter_power_t power_to_range(const cutter_power_t pwr, const uint8_t pwrUnit) { + static constexpr float + min_pct = TERN(CUTTER_POWER_RELATIVE, 0, TERN(SPINDLE_FEATURE, round(100.0f * (SPEED_POWER_MIN) / (SPEED_POWER_MAX)), SPEED_POWER_MIN)), + max_pct = TERN(SPINDLE_FEATURE, 100, SPEED_POWER_MAX); if (pwr <= 0) return 0; cutter_power_t upwr; switch (pwrUnit) { @@ -186,6 +181,7 @@ public: } return upwr; } + #endif // SPINDLE_LASER_USE_PWM /** diff --git a/Marlin/src/feature/spindle_laser_types.h b/Marlin/src/feature/spindle_laser_types.h index 0075e54819..d249a20e75 100644 --- a/Marlin/src/feature/spindle_laser_types.h +++ b/Marlin/src/feature/spindle_laser_types.h @@ -28,12 +28,34 @@ #include "../inc/MarlinConfigPre.h" +#define MSG_CUTTER(M) _MSG_CUTTER(M) + +#ifndef SPEED_POWER_INTERCEPT + #define SPEED_POWER_INTERCEPT 0 +#endif #if ENABLED(SPINDLE_FEATURE) #define _MSG_CUTTER(M) MSG_SPINDLE_##M + #ifndef SPEED_POWER_MIN + #define SPEED_POWER_MIN 5000 + #endif + #ifndef SPEED_POWER_MAX + #define SPEED_POWER_MAX 30000 + #endif + #ifndef SPEED_POWER_STARTUP + #define SPEED_POWER_STARTUP 25000 + #endif #else #define _MSG_CUTTER(M) MSG_LASER_##M + #ifndef SPEED_POWER_MIN + #define SPEED_POWER_MIN 0 + #endif + #ifndef SPEED_POWER_MAX + #define SPEED_POWER_MAX 255 + #endif + #ifndef SPEED_POWER_STARTUP + #define SPEED_POWER_STARTUP 255 + #endif #endif -#define MSG_CUTTER(M) _MSG_CUTTER(M) typedef IF<(SPEED_POWER_MAX > 255), uint16_t, uint8_t>::type cutter_cpower_t; diff --git a/Marlin/src/gcode/control/M3-M5.cpp b/Marlin/src/gcode/control/M3-M5.cpp index ecae8b06c6..ddbbc4ab68 100644 --- a/Marlin/src/gcode/control/M3-M5.cpp +++ b/Marlin/src/gcode/control/M3-M5.cpp @@ -66,21 +66,23 @@ * PWM duty cycle goes from 0 (off) to 255 (always on). */ void GcodeSuite::M3_M4(const bool is_M4) { - auto get_s_power = [] { - if (parser.seenval('S')) { - const float spwr = parser.value_float(); - #if ENABLED(SPINDLE_SERVO) - cutter.unitPower = spwr; - #else - cutter.unitPower = TERN(SPINDLE_LASER_USE_PWM, - cutter.power_to_range(cutter_power_t(round(spwr))), - spwr > 0 ? 255 : 0); - #endif - } - else - cutter.unitPower = cutter.cpwr_to_upwr(SPEED_POWER_STARTUP); - return cutter.unitPower; - }; + #if EITHER(SPINDLE_LASER_USE_PWM, SPINDLE_SERVO) + auto get_s_power = [] { + if (parser.seenval('S')) { + const float spwr = parser.value_float(); + #if ENABLED(SPINDLE_SERVO) + cutter.unitPower = spwr; + #else + cutter.unitPower = TERN(SPINDLE_LASER_USE_PWM, + cutter.power_to_range(cutter_power_t(round(spwr))), + spwr > 0 ? 255 : 0); + #endif + } + else + cutter.unitPower = cutter.cpwr_to_upwr(SPEED_POWER_STARTUP); + return cutter.unitPower; + }; + #endif #if ENABLED(LASER_POWER_INLINE) if (parser.seen('I') == DISABLED(LASER_POWER_INLINE_INVERT)) { diff --git a/buildroot/tests/mega1280 b/buildroot/tests/mega1280 index cae747017f..a7f25953ac 100755 --- a/buildroot/tests/mega1280 +++ b/buildroot/tests/mega1280 @@ -27,6 +27,12 @@ opt_enable SPINDLE_FEATURE ULTIMAKERCONTROLLER LCD_BED_LEVELING \ EXTERNAL_CLOSED_LOOP_CONTROLLER POWER_MONITOR_CURRENT POWER_MONITOR_VOLTAGE exec_test $1 $2 "Spindle, MESH_BED_LEVELING, closed loop, Power Monitor, and LCD" "$3" +# +# ...and without PWM +# +opt_disable SPINDLE_LASER_USE_PWM +exec_test $1 $2 "(No PWM)" "$3" + # # Test DUAL_X_CARRIAGE # From c67f7fb4df878e829289848ff60e28462c949aa1 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 7 Dec 2021 01:06:09 +0000 Subject: [PATCH 199/532] [cron] Bump distribution date (2021-12-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 be5594a148..dd14eeff4f 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 "2021-12-06" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 134cacc336..36e2488f9e 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 "2021-12-06" + #define STRING_DISTRIBUTION_DATE "2021-12-07" #endif /** From a16a059312b0ddb822da2769b5ba5372f9857c48 Mon Sep 17 00:00:00 2001 From: Giuseppe499 Date: Tue, 7 Dec 2021 02:53:51 +0100 Subject: [PATCH 200/532] =?UTF-8?q?=E2=9C=A8=20X=20Twist=20Compensation=20?= =?UTF-8?q?&=20Calibration=20(#23238)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 16 ++ Marlin/src/feature/bedlevel/abl/x_twist.cpp | 59 ++++++ Marlin/src/feature/bedlevel/abl/x_twist.h | 37 ++++ Marlin/src/feature/bedlevel/bedlevel.h | 3 + Marlin/src/gcode/bedlevel/abl/G29.cpp | 2 +- Marlin/src/inc/SanityCheck.h | 4 + Marlin/src/lcd/language/language_en.h | 4 + Marlin/src/lcd/marlinui.h | 2 +- Marlin/src/lcd/menu/menu.cpp | 12 +- Marlin/src/lcd/menu/menu.h | 13 ++ Marlin/src/lcd/menu/menu_advanced.cpp | 4 + Marlin/src/lcd/menu/menu_bed_corners.cpp | 4 - Marlin/src/lcd/menu/menu_bed_leveling.cpp | 2 - Marlin/src/lcd/menu/menu_motion.cpp | 9 + Marlin/src/lcd/menu/menu_probe_offset.cpp | 11 +- Marlin/src/lcd/menu/menu_x_twist.cpp | 224 ++++++++++++++++++++ Marlin/src/module/settings.cpp | 24 +++ buildroot/tests/rambo | 7 +- ini/features.ini | 1 + platformio.ini | 2 + 20 files changed, 417 insertions(+), 23 deletions(-) create mode 100644 Marlin/src/feature/bedlevel/abl/x_twist.cpp create mode 100644 Marlin/src/feature/bedlevel/abl/x_twist.h create mode 100644 Marlin/src/lcd/menu/menu_x_twist.cpp diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 5f02d25cc4..4e10ce5577 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1270,6 +1270,22 @@ // Set a convenient position to do the calibration (probing point and nozzle/bed-distance) //#define PROBE_OFFSET_WIZARD_XY_POS { X_CENTER, Y_CENTER } #endif + + #if ENABLED(AUTO_BED_LEVELING_BILINEAR) + // Add a calibration procedure in the Probe Offsets menu + // to compensate for twist in the X-axis. + //#define X_AXIS_TWIST_COMPENSATION + #if ENABLED(X_AXIS_TWIST_COMPENSATION) + /** + * Enable to init the Probe Z-Offset when starting the Wizard. + * Use a height slightly above the estimated nozzle-to-probe Z offset. + * For example, with an offset of -5, consider a starting height of -4. + */ + #define XATC_START_Z 0.0 + #define XATC_MAX_POINTS 3 // Number of points to probe in the wizard + #define XATC_Y_POSITION Y_CENTER // (mm) Y position to probe + #endif + #endif #endif // Include a page of printer information in the LCD Main Menu diff --git a/Marlin/src/feature/bedlevel/abl/x_twist.cpp b/Marlin/src/feature/bedlevel/abl/x_twist.cpp new file mode 100644 index 0000000000..c4a62c3595 --- /dev/null +++ b/Marlin/src/feature/bedlevel/abl/x_twist.cpp @@ -0,0 +1,59 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#include "../../../inc/MarlinConfig.h" + +#if ENABLED(X_AXIS_TWIST_COMPENSATION) + +#include "../bedlevel.h" + +XATC xatc; + +float XATC::spacing, XATC::start; +xatc_points_t XATC::z_values; + +void XATC::print_points() { + SERIAL_ECHOLNPGM(" X-Twist Correction:"); + LOOP_L_N(x, XATC_MAX_POINTS) { + SERIAL_CHAR(' '); + if (!isnan(z_values[x])) { + if (z_values[x] >= 0) SERIAL_CHAR('+'); + SERIAL_ECHO_F(z_values[x], 3); + } + else { + LOOP_L_N(i, 6) + SERIAL_CHAR(i ? '=' : ' '); + } + } + SERIAL_EOL(); +} + +float lerp(const_float_t t, const_float_t a, const_float_t b) { return a + t * (b - a); } + +float XATC::compensation(const xy_pos_t &raw) { + float t = (raw.x - start) / spacing; + int i = FLOOR(t); + LIMIT(i, 0, XATC_MAX_POINTS - 2); + t -= i; + return lerp(t, z_values[i], z_values[i + 1]); +} + +#endif // X_AXIS_TWIST_COMPENSATION diff --git a/Marlin/src/feature/bedlevel/abl/x_twist.h b/Marlin/src/feature/bedlevel/abl/x_twist.h new file mode 100644 index 0000000000..bbad9e73ef --- /dev/null +++ b/Marlin/src/feature/bedlevel/abl/x_twist.h @@ -0,0 +1,37 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 "../../../inc/MarlinConfigPre.h" + +typedef float xatc_points_t[XATC_MAX_POINTS]; + +class XATC { +public: + static float spacing, start; + static xatc_points_t z_values; + + static float compensation(const xy_pos_t &raw); + static void print_points(); +}; + +extern XATC xatc; diff --git a/Marlin/src/feature/bedlevel/bedlevel.h b/Marlin/src/feature/bedlevel/bedlevel.h index 63f032eee8..c623c99b5c 100644 --- a/Marlin/src/feature/bedlevel/bedlevel.h +++ b/Marlin/src/feature/bedlevel/bedlevel.h @@ -63,6 +63,9 @@ class TemporaryBedLevelingState { #if ENABLED(AUTO_BED_LEVELING_BILINEAR) #include "abl/abl.h" + #if ENABLED(X_AXIS_TWIST_COMPENSATION) + #include "abl/x_twist.h" + #endif #elif ENABLED(AUTO_BED_LEVELING_UBL) #include "ubl/ubl.h" #elif ENABLED(MESH_BED_LEVELING) diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 14da38c8fe..6765ec86a6 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -662,7 +662,7 @@ G29_TYPE GcodeSuite::G29() { #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) const float z = abl.measured_z + abl.Z_offset; - z_values[abl.meshCount.x][abl.meshCount.y] = z; + z_values[abl.meshCount.x][abl.meshCount.y] = z PLUS_TERN0(X_AXIS_TWIST_COMPENSATION, xatc.compensation(abl.probePos)); TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(abl.meshCount, z)); #endif diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 1442b9219f..a809fad132 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -3391,6 +3391,10 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #endif #endif +#if BOTH(X_AXIS_TWIST_COMPENSATION, NOZZLE_AS_PROBE) + #error "X_AXIS_TWIST_COMPENSATION is incompatible with NOZZLE_AS_PROBE." +#endif + #if ENABLED(POWER_LOSS_RECOVERY) #if ENABLED(BACKUP_POWER_SUPPLY) && !PIN_EXISTS(POWER_LOSS) #error "BACKUP_POWER_SUPPLY requires a POWER_LOSS_PIN." diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 907faa1436..9f60632152 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -734,6 +734,10 @@ namespace Language_en { LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Probing Z Reference"); LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Moving to Probing Pos"); + LSTR MSG_XATC = _UxGT("X-Twist Wizard"); + LSTR MSG_XATC_DONE = _UxGT("X-Twist Wizard Done!"); + LSTR MSG_XATC_UPDATE_Z_OFFSET = _UxGT("Update Probe Z-Offset to "); + LSTR MSG_SOUND = _UxGT("Sound"); LSTR MSG_TOP_LEFT = _UxGT("Top Left"); diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index ed5b539eaf..7014040097 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -640,7 +640,7 @@ public: // // Special handling if a move is underway // - #if ANY(DELTA_CALIBRATION_MENU, DELTA_AUTO_CALIBRATION, PROBE_OFFSET_WIZARD) || (ENABLED(LCD_BED_LEVELING) && EITHER(PROBE_MANUALLY, MESH_BED_LEVELING)) + #if ANY(DELTA_CALIBRATION_MENU, DELTA_AUTO_CALIBRATION, PROBE_OFFSET_WIZARD, X_AXIS_TWIST_COMPENSATION) || (ENABLED(LCD_BED_LEVELING) && EITHER(PROBE_MANUALLY, MESH_BED_LEVELING)) #define LCD_HAS_WAIT_FOR_MOVE 1 static bool wait_for_move; #else diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp index a24ad883f7..c566e9b2a6 100644 --- a/Marlin/src/lcd/menu/menu.cpp +++ b/Marlin/src/lcd/menu/menu.cpp @@ -38,7 +38,7 @@ #include "../../module/probe.h" #endif -#if EITHER(ENABLE_LEVELING_FADE_HEIGHT, AUTO_BED_LEVELING_UBL) +#if HAS_LEVELING #include "../../feature/bedlevel/bedlevel.h" #endif @@ -46,6 +46,13 @@ ///////////// Global Variables ///////////// //////////////////////////////////////////// +#if HAS_LEVELING && ANY(LEVEL_BED_CORNERS, PROBE_OFFSET_WIZARD, X_AXIS_TWIST_COMPENSATION) + bool leveling_was_active; // = false +#endif +#if ANY(PROBE_MANUALLY, MESH_BED_LEVELING, X_AXIS_TWIST_COMPENSATION) + uint8_t manual_probe_index; // = 0 +#endif + // Menu Navigation int8_t encoderTopLine, encoderLine, screen_items; @@ -338,8 +345,7 @@ void _lcd_draw_homing() { } } -#if ENABLED(LCD_BED_LEVELING) || (HAS_LEVELING && DISABLED(SLIM_LCD_MENUS)) - #include "../../feature/bedlevel/bedlevel.h" +#if HAS_LEVELING && DISABLED(SLIM_LCD_MENUS) void _lcd_toggle_bed_leveling() { set_bed_leveling_enabled(!planner.leveling_active); } #endif diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h index 44b0e89aca..048dab9b73 100644 --- a/Marlin/src/lcd/menu/menu.h +++ b/Marlin/src/lcd/menu/menu.h @@ -218,6 +218,11 @@ void _lcd_draw_homing(); void goto_probe_offset_wizard(); #endif +#if ENABLED(X_AXIS_TWIST_COMPENSATION) + void xatc_wizard_continue(); + void menu_advanced_settings(); +#endif + #if ENABLED(LCD_BED_LEVELING) || (HAS_LEVELING && DISABLED(SLIM_LCD_MENUS)) void _lcd_toggle_bed_leveling(); #endif @@ -249,3 +254,11 @@ extern uint8_t screen_history_depth; inline void clear_menu_history() { screen_history_depth = 0; } #define STICKY_SCREEN(S) []{ ui.defer_status_screen(); ui.goto_screen(S); } + +#if HAS_LEVELING && ANY(LEVEL_BED_CORNERS, PROBE_OFFSET_WIZARD, X_AXIS_TWIST_COMPENSATION) + extern bool leveling_was_active; +#endif + +#if ANY(PROBE_MANUALLY, MESH_BED_LEVELING, X_AXIS_TWIST_COMPENSATION) + extern uint8_t manual_probe_index; +#endif diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp index 8b688ab2ab..a5b4455d6f 100644 --- a/Marlin/src/lcd/menu/menu_advanced.cpp +++ b/Marlin/src/lcd/menu/menu_advanced.cpp @@ -508,6 +508,10 @@ void menu_backlash(); SUBMENU(MSG_PROBE_WIZARD, goto_probe_offset_wizard); #endif + #if ENABLED(X_AXIS_TWIST_COMPENSATION) + SUBMENU(MSG_XATC, xatc_wizard_continue); + #endif + END_MENU(); } #endif diff --git a/Marlin/src/lcd/menu/menu_bed_corners.cpp b/Marlin/src/lcd/menu/menu_bed_corners.cpp index 872b9b3840..7bf247f40b 100644 --- a/Marlin/src/lcd/menu/menu_bed_corners.cpp +++ b/Marlin/src/lcd/menu/menu_bed_corners.cpp @@ -66,10 +66,6 @@ static_assert(LEVEL_CORNERS_Z_HOP >= 0, "LEVEL_CORNERS_Z_HOP must be >= 0. Please update your configuration."); -#if HAS_LEVELING - static bool leveling_was_active = false; -#endif - #ifndef LEVEL_CORNERS_LEVELING_ORDER #define LEVEL_CORNERS_LEVELING_ORDER { LF, RF, LB, RB } // Default //#define LEVEL_CORNERS_LEVELING_ORDER { LF, LB, RF } // 3 hard-coded points diff --git a/Marlin/src/lcd/menu/menu_bed_leveling.cpp b/Marlin/src/lcd/menu/menu_bed_leveling.cpp index eb286f96b9..a47e2517ae 100644 --- a/Marlin/src/lcd/menu/menu_bed_leveling.cpp +++ b/Marlin/src/lcd/menu/menu_bed_leveling.cpp @@ -52,8 +52,6 @@ // Motion > Level Bed handlers // - static uint8_t manual_probe_index; - // LCD probed points are from defaults constexpr uint8_t total_probe_points = TERN(AUTO_BED_LEVELING_3POINT, 3, GRID_MAX_POINTS); diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp index cddb7ede74..29a908ac33 100644 --- a/Marlin/src/lcd/menu/menu_motion.cpp +++ b/Marlin/src/lcd/menu/menu_motion.cpp @@ -134,6 +134,15 @@ void lcd_move_x() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_X), X_AXIS); } #endif // E_MANUAL +#if EITHER(PROBE_OFFSET_WIZARD, X_AXIS_TWIST_COMPENSATION) + + void _goto_manual_move_z(const_float_t scale) { + ui.manual_move.menu_scale = scale; + ui.goto_screen(lcd_move_z); + } + +#endif + // // "Motion" > "Move Xmm" > "Move XYZ" submenu // diff --git a/Marlin/src/lcd/menu/menu_probe_offset.cpp b/Marlin/src/lcd/menu/menu_probe_offset.cpp index 12b55969a3..add7395533 100644 --- a/Marlin/src/lcd/menu/menu_probe_offset.cpp +++ b/Marlin/src/lcd/menu/menu_probe_offset.cpp @@ -39,13 +39,11 @@ #include "../../feature/bedlevel/bedlevel.h" #endif +void _goto_manual_move_z(const_float_t); + // Global storage float z_offset_backup, calculated_z_offset, z_offset_ref; -#if HAS_LEVELING - bool leveling_was_active; -#endif - inline void z_clearance_move() { do_z_clearance( #ifdef Z_AFTER_HOMING @@ -65,11 +63,6 @@ void set_offset_and_go_back(const_float_t z) { ui.goto_previous_screen_no_defer(); } -void _goto_manual_move_z(const_float_t scale) { - ui.manual_move.menu_scale = scale; - ui.goto_screen(lcd_move_z); -} - void probe_offset_wizard_menu() { START_MENU(); calculated_z_offset = probe.offset.z + current_position.z - z_offset_ref; diff --git a/Marlin/src/lcd/menu/menu_x_twist.cpp b/Marlin/src/lcd/menu/menu_x_twist.cpp new file mode 100644 index 0000000000..288f16603a --- /dev/null +++ b/Marlin/src/lcd/menu/menu_x_twist.cpp @@ -0,0 +1,224 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#include "../../inc/MarlinConfigPre.h" + +#if ENABLED(X_AXIS_TWIST_COMPENSATION) + +#include "menu_item.h" +#include "menu_addon.h" +#include "../../module/planner.h" +#include "../../feature/bedlevel/bedlevel.h" +#include "../../module/motion.h" +#include "../../gcode/queue.h" +#include "../../module/probe.h" + +#ifndef XATC_Y_POSITION + #define XATC_Y_POSITION ((probe.max_y() - probe.min_y())/2) +#endif + +void _goto_manual_move_z(const_float_t); + +float measured_z, z_offset; + +// +// Step 9: X Axis Twist Compensation Wizard is finished. +// +void xatc_wizard_done() { + if (!ui.wait_for_move) { + xatc.print_points(); + set_bed_leveling_enabled(leveling_was_active); + SET_SOFT_ENDSTOP_LOOSE(false); + ui.goto_screen(menu_advanced_settings); + } + if (ui.should_draw()) + MenuItem_static::draw(LCD_HEIGHT >= 4, GET_TEXT(MSG_XATC_DONE)); + ui.refresh(LCDVIEW_CALL_REDRAW_NEXT); +} + +void xatc_wizard_goto_next_point(); + +// +// Step 8: Ask the user if he wants to update the z-offset of the probe +// +void xatc_wizard_update_z_offset() { + MenuItem_confirm::select_screen( + GET_TEXT(MSG_YES), GET_TEXT(MSG_NO) + , []{ + probe.offset.z = z_offset; + ui.goto_screen(xatc_wizard_done); + } + , xatc_wizard_done + , GET_TEXT(MSG_XATC_UPDATE_Z_OFFSET) + , ftostr42_52(z_offset), PSTR("?") + ); +} + +// +// Step 7: Set the Z-offset for this point and go to the next one. +// +void xatc_wizard_set_offset_and_go_to_next_point() { + // Set Z-offset at probed point + xatc.z_values[manual_probe_index++] = probe.offset.z + current_position.z - measured_z; + // Go to next point + ui.goto_screen(xatc_wizard_goto_next_point); +} + +// +// Step 6: Wizard Menu. Move the nozzle down until it touches the bed. +// +void xatc_wizard_menu() { + START_MENU(); + float calculated_z_offset = probe.offset.z + current_position.z - measured_z; + + if (LCD_HEIGHT >= 4) + STATIC_ITEM(MSG_MOVE_NOZZLE_TO_BED, SS_CENTER|SS_INVERT); + + STATIC_ITEM_P(PSTR("Z="), SS_CENTER, ftostr42_52(current_position.z)); + STATIC_ITEM(MSG_ZPROBE_ZOFFSET, SS_LEFT, ftostr42_52(calculated_z_offset)); + + SUBMENU(MSG_MOVE_1MM, []{ _goto_manual_move_z( 1); }); + SUBMENU(MSG_MOVE_01MM, []{ _goto_manual_move_z( 0.1f); }); + + if ((FINE_MANUAL_MOVE) > 0.0f && (FINE_MANUAL_MOVE) < 0.1f) { + char tmp[20], numstr[10]; + // Determine digits needed right of decimal + const uint8_t digs = !UNEAR_ZERO((FINE_MANUAL_MOVE) * 1000 - int((FINE_MANUAL_MOVE) * 1000)) ? 4 : + !UNEAR_ZERO((FINE_MANUAL_MOVE) * 100 - int((FINE_MANUAL_MOVE) * 100)) ? 3 : 2; + sprintf_P(tmp, GET_TEXT(MSG_MOVE_N_MM), dtostrf(FINE_MANUAL_MOVE, 1, digs, numstr)); + #if DISABLED(HAS_GRAPHICAL_TFT) + SUBMENU_P(NUL_STR, []{ _goto_manual_move_z(float(FINE_MANUAL_MOVE)); }); + MENU_ITEM_ADDON_START(0 + ENABLED(HAS_MARLINUI_HD44780)); + lcd_put_u8str(tmp); + MENU_ITEM_ADDON_END(); + #else + SUBMENU_P(tmp, []{ _goto_manual_move_z(float(FINE_MANUAL_MOVE)); }); + #endif + } + + ACTION_ITEM(MSG_BUTTON_DONE, xatc_wizard_set_offset_and_go_to_next_point); + + END_MENU(); +} + +// +// Step 5: Display "Next point: 1 / 9" while waiting for move to finish +// +void xatc_wizard_moving() { + if (ui.should_draw()) { + char msg[10]; + sprintf_P(msg, PSTR("%i / %u"), manual_probe_index + 1, XATC_MAX_POINTS); + MenuEditItemBase::draw_edit_screen(GET_TEXT(MSG_LEVEL_BED_NEXT_POINT), msg); + } + ui.refresh(LCDVIEW_CALL_NO_REDRAW); + if (!ui.wait_for_move) ui.goto_screen(xatc_wizard_menu); +} + +// +// Step 4: Initiate a move to the next point +// +void xatc_wizard_goto_next_point() { + if (manual_probe_index < XATC_MAX_POINTS) { + + const float x = xatc.start + manual_probe_index * xatc.spacing; + + // Avoid probing outside the round or hexagonal area + if (!TERN0(IS_KINEMATIC, !probe.can_reach(x, XATC_Y_POSITION))) { + ui.wait_for_move = true; + ui.goto_screen(xatc_wizard_moving); + + // Deploy certain probes before starting probing + TERN_(BLTOUCH, do_z_clearance(Z_CLEARANCE_DEPLOY_PROBE)); + + measured_z = probe.probe_at_point(x, XATC_Y_POSITION, PROBE_PT_STOW); + current_position += probe.offset_xy; + current_position.z = XATC_START_Z - probe.offset.z + measured_z; + line_to_current_position(MMM_TO_MMS(XY_PROBE_FEEDRATE)); + ui.wait_for_move = false; + } + else + manual_probe_index++; // Go to next point + } + else { + // Compute the z-offset by averaging the values found with this wizard + z_offset = 0; + LOOP_L_N(i, XATC_MAX_POINTS) z_offset += xatc.z_values[i]; + z_offset /= XATC_MAX_POINTS; + + // Subtract the average from the values found with this wizard. + // This way they are indipendent from the z-offset + LOOP_L_N(i, XATC_MAX_POINTS) xatc.z_values[i] -= z_offset; + + ui.goto_screen(xatc_wizard_update_z_offset); + } +} + +// +// Step 3: Display "Click to Begin", wait for click +// Move to the first probe position +// +void xatc_wizard_homing_done() { + if (ui.should_draw()) { + MenuItem_static::draw(1, GET_TEXT(MSG_LEVEL_BED_WAITING)); + + // Color UI needs a control to detect a touch + #if BOTH(TOUCH_SCREEN, HAS_GRAPHICAL_TFT) + touch.add_control(CLICK, 0, 0, TFT_WIDTH, TFT_HEIGHT); + #endif + } + + if (ui.use_click()) { + xatc.spacing = (probe.max_x() - probe.min_x()) / (XATC_MAX_POINTS - 1); + xatc.start = probe.min_x(); + + SET_SOFT_ENDSTOP_LOOSE(true); // Disable soft endstops for free Z movement + + ui.goto_screen(xatc_wizard_goto_next_point); + } +} + +// +// Step 2: Display "Homing XYZ" - Wait for homing to finish +// +void xatc_wizard_homing() { + _lcd_draw_homing(); + if (all_axes_homed()) + ui.goto_screen(xatc_wizard_homing_done); +} + +// +// Step 1: Prepare for the wizard... +// +void xatc_wizard_continue() { + // Store Bed-Leveling-State and disable + #if HAS_LEVELING + leveling_was_active = planner.leveling_active; + set_bed_leveling_enabled(false); + #endif + + // Home all axes + ui.defer_status_screen(); + set_all_unhomed(); + ui.goto_screen(xatc_wizard_homing); + queue.inject_P(G28_STR); +} + +#endif // X_AXIS_TWIST_COMPENSATION diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 4057d339dc..8ccf773adc 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -63,6 +63,9 @@ #if HAS_LEVELING #include "../feature/bedlevel/bedlevel.h" + #if ENABLED(X_AXIS_TWIST_COMPENSATION) + #include "../feature/bedlevel/abl/x_twist.h" + #endif #endif #if ENABLED(Z_STEPPER_AUTO_ALIGN) @@ -250,6 +253,9 @@ typedef struct SettingsDataStruct { xy_pos_t bilinear_grid_spacing, bilinear_start; // G29 L F #if ENABLED(AUTO_BED_LEVELING_BILINEAR) bed_mesh_t z_values; // G29 + #if ENABLED(X_AXIS_TWIST_COMPENSATION) + XATC xatc; // TBD + #endif #else float z_values[3][3]; #endif @@ -814,6 +820,12 @@ void MarlinSettings::postprocess() { sizeof(z_values) == (GRID_MAX_POINTS) * sizeof(z_values[0][0]), "Bilinear Z array is the wrong size." ); + #if ENABLED(X_AXIS_TWIST_COMPENSATION) + static_assert( + sizeof(xatc.z_values) == (XATC_MAX_POINTS) * sizeof(xatc.z_values[0]), + "Z-offset mesh is the wrong size." + ); + #endif #else const xy_pos_t bilinear_start{0}, bilinear_grid_spacing{0}; #endif @@ -827,6 +839,9 @@ void MarlinSettings::postprocess() { #if ENABLED(AUTO_BED_LEVELING_BILINEAR) EEPROM_WRITE(z_values); // 9-256 floats + #if ENABLED(X_AXIS_TWIST_COMPENSATION) + EEPROM_WRITE(xatc); + #endif #else dummyf = 0; for (uint16_t q = grid_max_x * grid_max_y; q--;) EEPROM_WRITE(dummyf); @@ -1691,6 +1706,9 @@ void MarlinSettings::postprocess() { EEPROM_READ(bilinear_grid_spacing); // 2 ints EEPROM_READ(bilinear_start); // 2 ints EEPROM_READ(z_values); // 9 to 256 floats + #if ENABLED(X_AXIS_TWIST_COMPENSATION) + EEPROM_READ(xatc); + #endif } else // EEPROM data is stale #endif // AUTO_BED_LEVELING_BILINEAR @@ -3197,6 +3215,12 @@ void MarlinSettings::reset() { } } + // TODO: Create G-code for settings + //#if ENABLED(X_AXIS_TWIST_COMPENSATION) + // CONFIG_ECHO_START(); + // xatc.print_points(); + //#endif + #endif #endif // HAS_LEVELING diff --git a/buildroot/tests/rambo b/buildroot/tests/rambo index b7136e445e..a54c04eeb2 100755 --- a/buildroot/tests/rambo +++ b/buildroot/tests/rambo @@ -91,7 +91,7 @@ opt_set MOTHERBOARD BOARD_MINIRAMBO \ I2C_SLAVE_ADDRESS 63 opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER \ SDSUPPORT PCA9632 SOUND_MENU_ITEM GCODE_REPEAT_MARKERS \ - AUTO_BED_LEVELING_BILINEAR PROBE_MANUALLY LCD_BED_LEVELING G26_MESH_VALIDATION MESH_EDIT_MENU \ + AUTO_BED_LEVELING_LINEAR PROBE_MANUALLY LCD_BED_LEVELING \ LIN_ADVANCE EXTRA_LIN_ADVANCE_K \ INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT EXPERIMENTAL_I2CBUS M100_FREE_MEMORY_WATCHER \ NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE \ @@ -99,7 +99,7 @@ opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CO PRINTCOUNTER SERVICE_NAME_1 SERVICE_INTERVAL_1 M114_DETAIL opt_add M100_FREE_MEMORY_DUMPER opt_add M100_FREE_MEMORY_CORRUPTOR -exec_test $1 $2 "MINIRAMBO | RRDGFSC | ABL Bilinear Manual | M100 | PWM_MOTOR_CURRENT | M600..." "$3" +exec_test $1 $2 "MINIRAMBO | RRDGFSC | ABL Linear Manual | M100 | PWM_MOTOR_CURRENT | M600..." "$3" # # Test many less common options @@ -118,7 +118,8 @@ opt_enable COREYX USE_XMAX_PLUG MIXING_EXTRUDER GRADIENT_MIX \ BABYSTEPPING BABYSTEP_DISPLAY_TOTAL FILAMENT_LCD_DISPLAY FILAMENT_WIDTH_SENSOR \ REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER MENU_ADDAUTOSTART SDSUPPORT SDCARD_SORT_ALPHA \ ENDSTOP_NOISE_THRESHOLD FAN_SOFT_PWM \ - FIX_MOUNTED_PROBE PROBING_ESTEPPERS_OFF AUTO_BED_LEVELING_LINEAR DEBUG_LEVELING_FEATURE PROBE_OFFSET_WIZARD \ + FIX_MOUNTED_PROBE PROBING_ESTEPPERS_OFF PROBE_OFFSET_WIZARD \ + AUTO_BED_LEVELING_BILINEAR X_AXIS_TWIST_COMPENSATION MESH_EDIT_MENU DEBUG_LEVELING_FEATURE G26_MESH_VALIDATION \ Z_SAFE_HOMING SHOW_TEMP_ADC_VALUES HOME_Y_BEFORE_X EMERGENCY_PARSER \ SD_ABORT_ON_ENDSTOP_HIT HOST_ACTION_COMMANDS HOST_PROMPT_SUPPORT HOST_PAUSE_M76 ADVANCED_OK M114_DETAIL \ VOLUMETRIC_DEFAULT_ON NO_WORKSPACE_OFFSETS EXTRA_FAN_SPEED FWRETRACT \ diff --git a/ini/features.ini b/ini/features.ini index b56565b154..5f69fcca25 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -97,6 +97,7 @@ USB_FLASH_DRIVE_SUPPORT = src_filter=+ + AUTO_BED_LEVELING_BILINEAR = src_filter=+ AUTO_BED_LEVELING_(3POINT|(BI)?LINEAR) = src_filter=+ +X_AXIS_TWIST_COMPENSATION = src_filter=+ + MESH_BED_LEVELING = src_filter=+ + AUTO_BED_LEVELING_UBL = src_filter=+ + UBL_HILBERT_CURVE = src_filter=+ diff --git a/platformio.ini b/platformio.ini index 1b4effcf25..55a2bd2457 100644 --- a/platformio.ini +++ b/platformio.ini @@ -74,6 +74,7 @@ default_src_filter = + - - + - - - + - - - - - - - - @@ -97,6 +98,7 @@ default_src_filter = + - - + - - - - - + - - - - - - From 63d73bfafc8c146a0f230ad1a45c97f0ba23168b Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 6 Dec 2021 20:18:50 -0600 Subject: [PATCH 201/532] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20MAX31856=20=3D>=20?= =?UTF-8?q?MAX31865?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/libs/MAX31865.cpp | 28 ++++++++++++++-------------- Marlin/src/libs/MAX31865.h | 34 +++++++++++++++++----------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/Marlin/src/libs/MAX31865.cpp b/Marlin/src/libs/MAX31865.cpp index 94048af208..54103074f7 100644 --- a/Marlin/src/libs/MAX31865.cpp +++ b/Marlin/src/libs/MAX31865.cpp @@ -166,7 +166,7 @@ void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) { " _miso: ", _miso, " _sclk: ", _sclk, " _mosi: ", _mosi, - " config: ", readRegister8(MAX31856_CONFIG_REG) + " config: ", readRegister8(MAX31865_CONFIG_REG) ); #endif } @@ -177,14 +177,14 @@ void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) { * @return The raw unsigned 8-bit FAULT status register */ uint8_t MAX31865::readFault() { - return readRegister8(MAX31856_FAULTSTAT_REG); + return readRegister8(MAX31865_FAULTSTAT_REG); } /** * Clear all faults in FAULTSTAT. */ void MAX31865::clearFault() { - setConfig(MAX31856_CONFIG_FAULTSTAT, 1); + setConfig(MAX31865_CONFIG_FAULTSTAT, 1); } /** @@ -193,7 +193,7 @@ void MAX31865::clearFault() { * @param b If true, auto conversion is enabled */ void MAX31865::autoConvert(bool b) { - setConfig(MAX31856_CONFIG_MODEAUTO, b); + setConfig(MAX31865_CONFIG_MODEAUTO, b); } /** @@ -202,7 +202,7 @@ void MAX31865::autoConvert(bool b) { * @param b If true, 50Hz noise is filtered, else 60Hz(default) */ void MAX31865::enable50HzFilter(bool b) { - setConfig(MAX31856_CONFIG_FILT50HZ, b); + setConfig(MAX31865_CONFIG_FILT50HZ, b); } /** @@ -211,7 +211,7 @@ void MAX31865::enable50HzFilter(bool b) { * @param b If true bias is enabled, else disabled */ void MAX31865::enableBias(bool b) { - setConfig(MAX31856_CONFIG_BIAS, b); + setConfig(MAX31865_CONFIG_BIAS, b); // From the datasheet: // Note that if VBIAS is off (to reduce supply current between conversions), any filter @@ -226,7 +226,7 @@ void MAX31865::enableBias(bool b) { * Start a one-shot temperature reading. */ void MAX31865::oneShot() { - setConfig(MAX31856_CONFIG_1SHOT, 1); + setConfig(MAX31865_CONFIG_1SHOT, 1); // From the datasheet: // Note that a single conversion requires approximately 52ms in 60Hz filter @@ -242,12 +242,12 @@ void MAX31865::oneShot() { * @param wires The number of wires in enum format */ void MAX31865::setWires(max31865_numwires_t wires) { - uint8_t t = readRegister8(MAX31856_CONFIG_REG); + uint8_t t = readRegister8(MAX31865_CONFIG_REG); if (wires == MAX31865_3WIRE) - t |= MAX31856_CONFIG_3WIRE; + t |= MAX31865_CONFIG_3WIRE; else // 2 or 4 wire - t &= ~MAX31856_CONFIG_3WIRE; - writeRegister8(MAX31856_CONFIG_REG, t); + t &= ~MAX31865_CONFIG_3WIRE; + writeRegister8(MAX31865_CONFIG_REG, t); } /** @@ -261,7 +261,7 @@ uint16_t MAX31865::readRaw() { enableBias(true); oneShot(); - uint16_t rtd = readRegister16(MAX31856_RTDMSB_REG); + uint16_t rtd = readRegister16(MAX31865_RTDMSB_REG); #ifdef MAX31865_DEBUG SERIAL_ECHOLNPGM("RTD MSB:", (rtd >> 8), " RTD LSB:", (rtd & 0x00FF)); @@ -352,12 +352,12 @@ float MAX31865::temperature(float Rrtd) { * @param enable whether to enable or disable the value */ void MAX31865::setConfig(uint8_t config, bool enable) { - uint8_t t = readRegister8(MAX31856_CONFIG_REG); + uint8_t t = readRegister8(MAX31865_CONFIG_REG); if (enable) t |= config; else t &= ~config; // disable - writeRegister8(MAX31856_CONFIG_REG, t); + writeRegister8(MAX31865_CONFIG_REG, t); } /** diff --git a/Marlin/src/libs/MAX31865.h b/Marlin/src/libs/MAX31865.h index 7610924c23..25a69b32db 100644 --- a/Marlin/src/libs/MAX31865.h +++ b/Marlin/src/libs/MAX31865.h @@ -45,24 +45,24 @@ #include "../HAL/shared/Delay.h" #include HAL_PATH(../HAL, MarlinSPI.h) -#define MAX31856_CONFIG_REG 0x00 -#define MAX31856_CONFIG_BIAS 0x80 -#define MAX31856_CONFIG_MODEAUTO 0x40 -#define MAX31856_CONFIG_MODEOFF 0x00 -#define MAX31856_CONFIG_1SHOT 0x20 -#define MAX31856_CONFIG_3WIRE 0x10 -#define MAX31856_CONFIG_24WIRE 0x00 -#define MAX31856_CONFIG_FAULTSTAT 0x02 -#define MAX31856_CONFIG_FILT50HZ 0x01 -#define MAX31856_CONFIG_FILT60HZ 0x00 +#define MAX31865_CONFIG_REG 0x00 +#define MAX31865_CONFIG_BIAS 0x80 +#define MAX31865_CONFIG_MODEAUTO 0x40 +#define MAX31865_CONFIG_MODEOFF 0x00 +#define MAX31865_CONFIG_1SHOT 0x20 +#define MAX31865_CONFIG_3WIRE 0x10 +#define MAX31865_CONFIG_24WIRE 0x00 +#define MAX31865_CONFIG_FAULTSTAT 0x02 +#define MAX31865_CONFIG_FILT50HZ 0x01 +#define MAX31865_CONFIG_FILT60HZ 0x00 -#define MAX31856_RTDMSB_REG 0x01 -#define MAX31856_RTDLSB_REG 0x02 -#define MAX31856_HFAULTMSB_REG 0x03 -#define MAX31856_HFAULTLSB_REG 0x04 -#define MAX31856_LFAULTMSB_REG 0x05 -#define MAX31856_LFAULTLSB_REG 0x06 -#define MAX31856_FAULTSTAT_REG 0x07 +#define MAX31865_RTDMSB_REG 0x01 +#define MAX31865_RTDLSB_REG 0x02 +#define MAX31865_HFAULTMSB_REG 0x03 +#define MAX31865_HFAULTLSB_REG 0x04 +#define MAX31865_LFAULTMSB_REG 0x05 +#define MAX31865_LFAULTLSB_REG 0x06 +#define MAX31865_FAULTSTAT_REG 0x07 #define MAX31865_FAULT_HIGHTHRESH 0x80 // D7 #define MAX31865_FAULT_LOWTHRESH 0x40 // D6 From 5d45aba550598f63b4f0ded99205b40c29275b26 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 8 Dec 2021 01:05:41 +0000 Subject: [PATCH 202/532] [cron] Bump distribution date (2021-12-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 dd14eeff4f..258fd24881 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 "2021-12-07" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 36e2488f9e..7139fe4c18 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 "2021-12-07" + #define STRING_DISTRIBUTION_DATE "2021-12-08" #endif /** From 0a64209305ea32e85a7b786604ae0c11fd4f1fcb Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 8 Dec 2021 12:40:23 -0600 Subject: [PATCH 203/532] =?UTF-8?q?=F0=9F=8E=A8=20Rename=20MAX31865=20elem?= =?UTF-8?q?ents?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/libs/MAX31865.cpp | 116 +++++++++++++++++------------------ Marlin/src/libs/MAX31865.h | 12 ++-- 2 files changed, 64 insertions(+), 64 deletions(-) diff --git a/Marlin/src/libs/MAX31865.cpp b/Marlin/src/libs/MAX31865.cpp index 54103074f7..40c65300c0 100644 --- a/Marlin/src/libs/MAX31865.cpp +++ b/Marlin/src/libs/MAX31865.cpp @@ -73,10 +73,10 @@ SPISettings MAX31865::spiConfig = SPISettings( * @param spi_clk the SPI clock pin to use */ MAX31865::MAX31865(int8_t spi_cs, int8_t spi_mosi, int8_t spi_miso, int8_t spi_clk) { - _cs = spi_cs; - _mosi = spi_mosi; - _miso = spi_miso; - _sclk = spi_clk; + cselPin = spi_cs; + mosiPin = spi_mosi; + misoPin = spi_miso; + sclkPin = spi_clk; } /** @@ -86,8 +86,8 @@ SPISettings MAX31865::spiConfig = SPISettings( * @param spi_cs the SPI CS pin to use along with the default SPI device */ MAX31865::MAX31865(int8_t spi_cs) { - _cs = spi_cs; - _sclk = _miso = _mosi = -1; + cselPin = spi_cs; + sclkPin = misoPin = mosiPin = -1; } #else // LARGE_PINMAP @@ -104,10 +104,10 @@ SPISettings MAX31865::spiConfig = SPISettings( * @param pin_mapping set to 1 for positive pin values */ MAX31865::MAX31865(uint32_t spi_cs, uint32_t spi_mosi, uint32_t spi_miso, uint32_t spi_clk, uint8_t pin_mapping) { - _cs = spi_cs; - _mosi = spi_mosi; - _miso = spi_miso; - _sclk = spi_clk; + cselPin = spi_cs; + mosiPin = spi_mosi; + misoPin = spi_miso; + sclkPin = spi_clk; } /** @@ -119,8 +119,8 @@ SPISettings MAX31865::spiConfig = SPISettings( * @param pin_mapping set to 1 for positive pin values */ MAX31865::MAX31865(uint32_t spi_cs, uint8_t pin_mapping) { - _cs = spi_cs; - _sclk = _miso = _mosi = -1UL; //-1UL or 0xFFFFFFFF or 4294967295 + cselPin = spi_cs; + sclkPin = misoPin = mosiPin = -1UL; //-1UL or 0xFFFFFFFF or 4294967295 } #endif // LARGE_PINMAP @@ -139,12 +139,12 @@ SPISettings MAX31865::spiConfig = SPISettings( * @param ref The resistance of the reference resistor, in ohms. */ void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) { - Rzero = zero; - Rref = ref; + zeroRes = zero; + refRes = ref; - OUT_WRITE(_cs, HIGH); + OUT_WRITE(cselPin, HIGH); - if (_sclk != TERN(LARGE_PINMAP, -1UL, -1)) { + if (sclkPin != TERN(LARGE_PINMAP, -1UL, -1)) { softSpiBegin(SPI_QUARTER_SPEED); // Define pin modes for Software SPI } else { @@ -162,10 +162,10 @@ void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) { #ifdef MAX31865_DEBUG_SPI SERIAL_ECHOLNPGM( TERN(LARGE_PINMAP, "LARGE_PINMAP", "Regular") - " begin call with _cs: ", _cs, - " _miso: ", _miso, - " _sclk: ", _sclk, - " _mosi: ", _mosi, + " begin call with cselPin: ", cselPin, + " misoPin: ", misoPin, + " sclkPin: ", sclkPin, + " mosiPin: ", mosiPin, " config: ", readRegister8(MAX31865_CONFIG_REG) ); #endif @@ -282,8 +282,8 @@ uint16_t MAX31865::readRaw() { */ float MAX31865::readResistance() { // Strip the error bit (D0) and convert to a float ratio. - // less precise method: (readRaw() * Rref) >> 16 - return (((readRaw() >> 1) / 32768.0f) * Rref); + // less precise method: (readRaw() * refRes) >> 16 + return (((readRaw() >> 1) / 32768.0f) * refRes); } /** @@ -300,8 +300,8 @@ float MAX31865::temperature() { * * @return Temperature in C */ -float MAX31865::temperature(uint16_t adcVal) { - return temperature(((adcVal) / 32768.0f) * Rref); +float MAX31865::temperature(uint16_t adc_val) { + return temperature(((adc_val) / 32768.0f) * refRes); } /** @@ -309,11 +309,11 @@ float MAX31865::temperature(uint16_t adcVal) { * Uses the technique outlined in this PDF: * http://www.analog.com/media/en/technical-documentation/application-notes/AN709_0.pdf * - * @param Rrtd the resistance value in ohms - * @return the temperature in degC + * @param rtd_res the resistance value in ohms + * @return the temperature in degC */ -float MAX31865::temperature(float Rrtd) { - float temp = (RTD_Z1 + sqrt(RTD_Z2 + (RTD_Z3 * Rrtd))) / RTD_Z4; +float MAX31865::temperature(float rtd_res) { + float temp = (RTD_Z1 + sqrt(RTD_Z2 + (RTD_Z3 * rtd_res))) * RECIPROCAL(RTD_Z4); // From the PDF... // @@ -324,17 +324,17 @@ float MAX31865::temperature(float Rrtd) { // of resistance. // if (temp < 0) { - Rrtd = (Rrtd / Rzero) * 100; // normalize to 100 ohm - float rpoly = Rrtd; + rtd_res = (rtd_res / zeroRes) * 100; // normalize to 100 ohm + float rpoly = rtd_res; temp = -242.02 + (2.2228 * rpoly); - rpoly *= Rrtd; // square + rpoly *= rtd_res; // square temp += 2.5859e-3 * rpoly; - rpoly *= Rrtd; // ^3 + rpoly *= rtd_res; // ^3 temp -= 4.8260e-6 * rpoly; - rpoly *= Rrtd; // ^4 + rpoly *= rtd_res; // ^4 temp -= 2.8183e-8 * rpoly; - rpoly *= Rrtd; // ^5 + rpoly *= rtd_res; // ^5 temp += 1.5243e-10 * rpoly; } @@ -399,15 +399,15 @@ uint16_t MAX31865::readRegister16(uint8_t addr) { */ void MAX31865::readRegisterN(uint8_t addr, uint8_t buffer[], uint8_t n) { addr &= 0x7F; // make sure top bit is not set - if (_sclk == TERN(LARGE_PINMAP, -1UL, -1)) + if (sclkPin == TERN(LARGE_PINMAP, -1UL, -1)) SPI.beginTransaction(spiConfig); else - WRITE(_sclk, LOW); + WRITE(sclkPin, LOW); - WRITE(_cs, LOW); + WRITE(cselPin, LOW); #ifdef TARGET_LPC1768 - DELAY_CYCLES(_spi_speed); + DELAY_CYCLES(spiSpeed); #endif spiTransfer(addr); @@ -420,10 +420,10 @@ void MAX31865::readRegisterN(uint8_t addr, uint8_t buffer[], uint8_t n) { buffer++; } - if (_sclk == TERN(LARGE_PINMAP, -1UL, -1)) + if (sclkPin == TERN(LARGE_PINMAP, -1UL, -1)) SPI.endTransaction(); - WRITE(_cs, HIGH); + WRITE(cselPin, HIGH); } /** @@ -433,24 +433,24 @@ void MAX31865::readRegisterN(uint8_t addr, uint8_t buffer[], uint8_t n) { * @param data the data to write */ void MAX31865::writeRegister8(uint8_t addr, uint8_t data) { - if (_sclk == TERN(LARGE_PINMAP, -1UL, -1)) + if (sclkPin == TERN(LARGE_PINMAP, -1UL, -1)) SPI.beginTransaction(spiConfig); else - WRITE(_sclk, LOW); + WRITE(sclkPin, LOW); - WRITE(_cs, LOW); + WRITE(cselPin, LOW); #ifdef TARGET_LPC1768 - DELAY_CYCLES(_spi_speed); + DELAY_CYCLES(spiSpeed); #endif spiTransfer(addr | 0x80); // make sure top bit is set spiTransfer(data); - if (_sclk == TERN(LARGE_PINMAP, -1UL, -1)) + if (sclkPin == TERN(LARGE_PINMAP, -1UL, -1)) SPI.endTransaction(); - WRITE(_cs, HIGH); + WRITE(cselPin, HIGH); } /** @@ -463,19 +463,19 @@ void MAX31865::writeRegister8(uint8_t addr, uint8_t data) { * @return the 8-bit response */ uint8_t MAX31865::spiTransfer(uint8_t x) { - if (_sclk == TERN(LARGE_PINMAP, -1UL, -1)) + if (sclkPin == TERN(LARGE_PINMAP, -1UL, -1)) return SPI.transfer(x); #ifdef TARGET_LPC1768 - return swSpiTransfer(x, _spi_speed, _sclk, _miso, _mosi); + return swSpiTransfer(x, spiSpeed, sclkPin, misoPin, mosiPin); #else uint8_t reply = 0; for (int i = 7; i >= 0; i--) { - WRITE(_sclk, HIGH); DELAY_NS_VAR(_spi_delay); + WRITE(sclkPin, HIGH); DELAY_NS_VAR(spiDelay); reply <<= 1; - WRITE(_mosi, x & _BV(i)); DELAY_NS_VAR(_spi_delay); - if (READ(_miso)) reply |= 1; - WRITE(_sclk, LOW); DELAY_NS_VAR(_spi_delay); + WRITE(mosiPin, x & _BV(i)); DELAY_NS_VAR(spiDelay); + if (READ(misoPin)) reply |= 1; + WRITE(sclkPin, LOW); DELAY_NS_VAR(spiDelay); } return reply; #endif @@ -486,13 +486,13 @@ void MAX31865::softSpiBegin(const uint8_t spi_speed) { SERIAL_ECHOLNPGM("Initializing MAX31865 Software SPI"); #endif #ifdef TARGET_LPC1768 - swSpiBegin(_sclk, _miso, _mosi); - _spi_speed = swSpiInit(spi_speed, _sclk, _mosi); + swSpiBegin(sclkPin, misoPin, mosiPin); + spiSpeed = swSpiInit(spi_speed, sclkPin, mosiPin); #else - _spi_delay = (100UL << spi_speed) / 3; // Calculate delay in ns. Top speed is ~10MHz, or 100ns delay between bits. - OUT_WRITE(_sclk, LOW); - SET_OUTPUT(_mosi); - SET_INPUT(_miso); + spiDelay = (100UL << spi_speed) / 3; // Calculate delay in ns. Top speed is ~10MHz, or 100ns delay between bits. + OUT_WRITE(sclkPin, LOW); + SET_OUTPUT(mosiPin); + SET_INPUT(misoPin); #endif } diff --git a/Marlin/src/libs/MAX31865.h b/Marlin/src/libs/MAX31865.h index 25a69b32db..7cd1f25c98 100644 --- a/Marlin/src/libs/MAX31865.h +++ b/Marlin/src/libs/MAX31865.h @@ -89,15 +89,15 @@ class MAX31865 { private: static SPISettings spiConfig; - TERN(LARGE_PINMAP, uint32_t, uint8_t) _sclk, _miso, _mosi, _cs; + TERN(LARGE_PINMAP, uint32_t, uint8_t) sclkPin, misoPin, mosiPin, cselPin; #ifdef TARGET_LPC1768 - uint8_t _spi_speed; + uint8_t spiSpeed; #else - uint16_t _spi_delay; + uint16_t spiDelay; #endif - float Rzero, Rref; + float zeroRes, refRes; void setConfig(uint8_t config, bool enable); @@ -135,6 +135,6 @@ public: uint16_t readRaw(); float readResistance(); float temperature(); - float temperature(uint16_t adcVal); - float temperature(float Rrtd); + float temperature(uint16_t adc_val); + float temperature(float rtd_res); }; From 9e6ded3cdfb362fb6b0f44ade6baca562708ee1c Mon Sep 17 00:00:00 2001 From: John Lagonikas <39417467+zeleps@users.noreply.github.com> Date: Wed, 8 Dec 2021 20:55:09 +0200 Subject: [PATCH 204/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20and=20improve=20MA?= =?UTF-8?q?X31865=20(#23215)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/Configuration_adv.h | 9 + Marlin/src/inc/Conditionals_adv.h | 6 + Marlin/src/libs/MAX31865.cpp | 311 ++++++++++++++++++------------ Marlin/src/libs/MAX31865.h | 43 ++++- Marlin/src/module/temperature.cpp | 10 +- 5 files changed, 238 insertions(+), 141 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 4e10ce5577..0d848f260b 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -142,11 +142,20 @@ * FORCE_HW_SPI: Ignore SCK/MOSI/MISO pins and just use the CS pin & default SPI bus. * MAX31865_WIRES: Set the number of wires for the probe connected to a MAX31865 board, 2-4. Default: 2 * MAX31865_50HZ: Enable 50Hz filter instead of the default 60Hz. + * MAX31865_USE_READ_ERROR_DETECTION: Detects random read errors from value spikes (a 20°C difference in less than 1sec) + * MAX31865_USE_AUTO_MODE: Faster and more frequent reads than 1-shot, but bias voltage always on, slightly affecting RTD temperature. + * MAX31865_MIN_SAMPLING_TIME_MSEC: in 1-shot mode, the minimum time between subsequent reads. This reduces the effect of bias voltage by leaving the sensor unpowered for longer intervals. + * MAX31865_WIRE_OHMS: In 2-wire configurations, manually set the wire resistance for more accurate readings */ //#define TEMP_SENSOR_FORCE_HW_SPI //#define MAX31865_SENSOR_WIRES_0 2 //#define MAX31865_SENSOR_WIRES_1 2 //#define MAX31865_50HZ_FILTER +//#define MAX31865_USE_READ_ERROR_DETECTION +//#define MAX31865_USE_AUTO_MODE +//#define MAX31865_MIN_SAMPLING_TIME_MSEC 100 +//#define MAX31865_WIRE_OHMS_0 0.0f +//#define MAX31865_WIRE_OHMS_1 0.0f /** * Hephestos 2 24V heated bed upgrade kit. diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index 49067a5606..22f1591d68 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -159,6 +159,9 @@ #ifndef MAX31865_SENSOR_WIRES_0 #define MAX31865_SENSOR_WIRES_0 2 #endif + #ifndef MAX31865_WIRE_OHMS_0 + #define MAX31865_WIRE_OHMS_0 0.0f + #endif #elif TEMP_SENSOR_0 == -3 #define TEMP_SENSOR_0_IS_MAX31855 1 #define TEMP_SENSOR_0_MAX_TC_TMIN -270 @@ -193,6 +196,9 @@ #ifndef MAX31865_SENSOR_WIRES_1 #define MAX31865_SENSOR_WIRES_1 2 #endif + #ifndef MAX31865_WIRE_OHMS_1 + #define MAX31865_WIRE_OHMS_1 0.0f + #endif #elif TEMP_SENSOR_1 == -3 #define TEMP_SENSOR_1_IS_MAX31855 1 #define TEMP_SENSOR_1_MAX_TC_TMIN -270 diff --git a/Marlin/src/libs/MAX31865.cpp b/Marlin/src/libs/MAX31865.cpp index 40c65300c0..6cc8ffca39 100644 --- a/Marlin/src/libs/MAX31865.cpp +++ b/Marlin/src/libs/MAX31865.cpp @@ -40,20 +40,23 @@ * All rights reserved. */ -// Useful for RTD debugging. -//#define MAX31865_DEBUG -//#define MAX31865_DEBUG_SPI - #include "../inc/MarlinConfig.h" #if HAS_MAX31865 && !USE_ADAFRUIT_MAX31865 #include "MAX31865.h" +#ifndef MAX31865_MIN_SAMPLING_TIME_MSEC + #define MAX31865_MIN_SAMPLING_TIME_MSEC 0 +#endif + #ifdef TARGET_LPC1768 #include #endif +#define DEBUG_OUT ENABLED(DEBUG_MAX31865) +#include "../core/debug_out.h" + // The maximum speed the MAX31865 can do is 5 MHz SPISettings MAX31865::spiConfig = SPISettings( TERN(TARGET_LPC1768, SPI_QUARTER_SPEED, TERN(ARDUINO_ARCH_STM32, SPI_CLOCK_DIV4, 500000)), @@ -61,7 +64,7 @@ SPISettings MAX31865::spiConfig = SPISettings( SPI_MODE1 // CPOL0 CPHA1 ); -#ifndef LARGE_PINMAP +#if DISABLED(LARGE_PINMAP) /** * Create the interface object using software (bitbang) SPI for PIN values @@ -137,117 +140,121 @@ SPISettings MAX31865::spiConfig = SPISettings( * @param wires The number of wires in enum format. Can be MAX31865_2WIRE, MAX31865_3WIRE, or MAX31865_4WIRE. * @param zero The resistance of the RTD at 0 degC, in ohms. * @param ref The resistance of the reference resistor, in ohms. + * @param wire The resistance of the wire connecting the sensor to the RTD, in ohms. */ -void MAX31865::begin(max31865_numwires_t wires, float zero, float ref) { - zeroRes = zero; - refRes = ref; +void MAX31865::begin(max31865_numwires_t wires, float zero_res, float ref_res, float wire_res) { + zeroRes = zero_res; + refRes = ref_res; + wireRes = wire_res; - OUT_WRITE(cselPin, HIGH); + pinMode(cselPin, OUTPUT); + digitalWrite(cselPin, HIGH); - if (sclkPin != TERN(LARGE_PINMAP, -1UL, -1)) { + if (sclkPin != TERN(LARGE_PINMAP, -1UL, 255)) softSpiBegin(SPI_QUARTER_SPEED); // Define pin modes for Software SPI - } else { - #ifdef MAX31865_DEBUG - SERIAL_ECHOLNPGM("Initializing MAX31865 Hardware SPI"); - #endif + DEBUG_ECHOLNPGM("Initializing MAX31865 Hardware SPI"); SPI.begin(); // Start and configure hardware SPI } - setWires(wires); - enableBias(false); - autoConvert(false); - clearFault(); + initFixedFlags(wires); - #ifdef MAX31865_DEBUG_SPI - SERIAL_ECHOLNPGM( - TERN(LARGE_PINMAP, "LARGE_PINMAP", "Regular") - " begin call with cselPin: ", cselPin, - " misoPin: ", misoPin, - " sclkPin: ", sclkPin, - " mosiPin: ", mosiPin, - " config: ", readRegister8(MAX31865_CONFIG_REG) - ); - #endif + clearFault(); // also initializes flags + + #if DISABLED(MAX31865_USE_AUTO_MODE) // make a proper first 1 shot read to initialize _lastRead + + enableBias(); + DELAY_US(11500); + oneShot(); + DELAY_US(65000); + uint16_t rtd = readRegister16(MAX31865_RTDMSB_REG); + + if (rtd & 1) { + lastRead = 0xFFFF; // some invalid value + lastFault = readRegister8(MAX31865_FAULTSTAT_REG); + clearFault(); // also clears the bias voltage flag, so no further action is required + + DEBUG_ECHOLNPGM("MAX31865 read fault: ", rtd); + } + else { + DEBUG_ECHOLNPGM("RTD MSB:", (rtd >> 8), " RTD LSB:", (rtd & 0x00FF)); + + resetFlags(); + + lastRead = rtd; + nextEvent = SETUP_BIAS_VOLTAGE; + millis_t now = millis(); + nextEventStamp = now + MAX31865_MIN_SAMPLING_TIME_MSEC; + + TERN_(MAX31865_USE_READ_ERROR_DETECTION, lastReadStamp = now); + } + + #endif // !MAX31865_USE_AUTO_MODE + + DEBUG_ECHOLNPGM( + TERN(LARGE_PINMAP, "LARGE_PINMAP", "Regular") + " begin call with cselPin: ", cselPin, + " misoPin: ", misoPin, + " sclkPin: ", sclkPin, + " mosiPin: ", mosiPin, + " config: ", readRegister8(MAX31865_CONFIG_REG) + ); } /** - * Read the raw 8-bit FAULTSTAT register + * Return and clear the last fault value * - * @return The raw unsigned 8-bit FAULT status register + * @return The raw unsigned 8-bit FAULT status register or spike fault */ uint8_t MAX31865::readFault() { - return readRegister8(MAX31865_FAULTSTAT_REG); + uint8_t r = lastFault; + lastFault = 0; + return r; } /** - * Clear all faults in FAULTSTAT. + * Clear last fault */ void MAX31865::clearFault() { setConfig(MAX31865_CONFIG_FAULTSTAT, 1); } /** - * Whether we want to have continuous conversions (50/60 Hz) - * - * @param b If true, auto conversion is enabled + * Reset flags */ -void MAX31865::autoConvert(bool b) { - setConfig(MAX31865_CONFIG_MODEAUTO, b); -} - -/** - * Whether we want filter out 50Hz noise or 60Hz noise - * - * @param b If true, 50Hz noise is filtered, else 60Hz(default) - */ -void MAX31865::enable50HzFilter(bool b) { - setConfig(MAX31865_CONFIG_FILT50HZ, b); +void MAX31865::resetFlags() { + writeRegister8(MAX31865_CONFIG_REG, stdFlags); } /** * Enable the bias voltage on the RTD sensor - * - * @param b If true bias is enabled, else disabled */ -void MAX31865::enableBias(bool b) { - setConfig(MAX31865_CONFIG_BIAS, b); - - // From the datasheet: - // Note that if VBIAS is off (to reduce supply current between conversions), any filter - // capacitors at the RTDIN inputs need to charge before an accurate conversion can be - // performed. Therefore, enable VBIAS and wait at least 10.5 time constants of the input - // RC network plus an additional 1ms before initiating the conversion. - if (b) - DELAY_US(11500); //11.5ms +void MAX31865::enableBias() { + setConfig(MAX31865_CONFIG_BIAS, 1); } /** * Start a one-shot temperature reading. */ void MAX31865::oneShot() { - setConfig(MAX31865_CONFIG_1SHOT, 1); - - // From the datasheet: - // Note that a single conversion requires approximately 52ms in 60Hz filter - // mode or 62.5ms in 50Hz filter mode to complete. 1-Shot is a self-clearing bit. - // TODO: switch this out depending on the filter mode. - DELAY_US(65000); // 65ms + setConfig(MAX31865_CONFIG_1SHOT | MAX31865_CONFIG_BIAS, 1); } /** - * How many wires we have in our RTD setup, can be MAX31865_2WIRE, - * MAX31865_3WIRE, or MAX31865_4WIRE + * Initialize standard flags with flags that will not change during operation (Hz, polling mode and no. of wires) * * @param wires The number of wires in enum format */ -void MAX31865::setWires(max31865_numwires_t wires) { - uint8_t t = readRegister8(MAX31865_CONFIG_REG); +void MAX31865::initFixedFlags(max31865_numwires_t wires) { + + // set config-defined flags (same for all sensors) + stdFlags = TERN(MAX31865_50HZ_FILTER, MAX31865_CONFIG_FILT50HZ, MAX31865_CONFIG_FILT60HZ) | + TERN(MAX31865_USE_AUTO_MODE, MAX31865_CONFIG_MODEAUTO | MAX31865_CONFIG_BIAS, MAX31865_CONFIG_MODEOFF); + if (wires == MAX31865_3WIRE) - t |= MAX31865_CONFIG_3WIRE; - else // 2 or 4 wire - t &= ~MAX31865_CONFIG_3WIRE; - writeRegister8(MAX31865_CONFIG_REG, t); + stdFlags |= MAX31865_CONFIG_3WIRE; + else // 2 or 4 wire + stdFlags &= ~MAX31865_CONFIG_3WIRE; } /** @@ -257,33 +264,96 @@ void MAX31865::setWires(max31865_numwires_t wires) { * @return The raw unsigned 16-bit register value with ERROR bit attached, NOT temperature! */ uint16_t MAX31865::readRaw() { - clearFault(); - enableBias(true); - oneShot(); - uint16_t rtd = readRegister16(MAX31865_RTDMSB_REG); + #if ENABLED(MAX31865_USE_AUTO_MODE) + + const uint16_t rtd = readRegister16(MAX31865_RTDMSB_REG); + DEBUG_ECHOLNPGM("MAX31865 RTD MSB:", (rtd >> 8), " LSB:", (rtd & 0x00FF)); + + if (rtd & 1) { + lastFault = readRegister8(MAX31865_FAULTSTAT_REG); + lastRead |= 1; + clearFault(); // also clears the bias voltage flag, so no further action is required + DEBUG_ECHOLNPGM("MAX31865 read fault: ", rtd); + } + #if ENABLED(MAX31865_USE_READ_ERROR_DETECTION) + else if (ABS(lastRead - rtd) > 500 && PENDING(millis(), lastReadStamp + 1000)) { // if two readings within a second differ too much (~20°C), consider it a read error. + lastFault = 0x01; + lastRead |= 1; + DEBUG_ECHOLNPGM("MAX31865 read error: ", rtd); + } + #endif + else { + lastRead = rtd; + TERN_(MAX31865_USE_READ_ERROR_DETECTION, lastReadStamp = millis()); + } + + #else + + if (PENDING(millis(), nextEventStamp)) { + DEBUG_ECHOLNPGM("MAX31865 waiting for event ", nextEvent); + return lastRead; + } + + switch (nextEvent) { + case SETUP_BIAS_VOLTAGE: + enableBias(); + nextEventStamp = millis() + 11; // wait at least 11msec before enabling 1shot + nextEvent = SETUP_1_SHOT_MODE; + DEBUG_ECHOLN("MAX31865 bias voltage enabled"); + break; + + case SETUP_1_SHOT_MODE: + oneShot(); + nextEventStamp = millis() + 65; // wait at least 65msec before reading RTD register + nextEvent = READ_RTD_REG; + DEBUG_ECHOLN("MAX31865 1 shot mode enabled"); + break; + + case READ_RTD_REG: { + const uint16_t rtd = readRegister16(MAX31865_RTDMSB_REG); + DEBUG_ECHOLNPGM("MAX31865 RTD MSB:", (rtd >> 8), " LSB:", (rtd & 0x00FF)); + + if (rtd & 1) { + lastFault = readRegister8(MAX31865_FAULTSTAT_REG); + lastRead |= 1; + clearFault(); // also clears the bias voltage flag, so no further action is required + DEBUG_ECHOLNPGM("MAX31865 read fault: ", rtd); + } + #if ENABLED(MAX31865_USE_READ_ERROR_DETECTION) + else if (ABS(lastRead - rtd) > 500 && PENDING(millis(), lastReadStamp + 1000)) { // if two readings within a second differ too much (~20°C), consider it a read error. + lastFault = 0x01; + lastRead |= 1; + DEBUG_ECHOLNPGM("MAX31865 read error: ", rtd); + } + #endif + else { + lastRead = rtd; + TERN_(MAX31865_USE_READ_ERROR_DETECTION, lastReadStamp = millis()); + } + + if (!(rtd & 1)) // if clearFault() was not invoked, need to clear the bias voltage and 1-shot flags + resetFlags(); + + nextEvent = SETUP_BIAS_VOLTAGE; + nextEventStamp = millis() + MAX31865_MIN_SAMPLING_TIME_MSEC; // next step should not occur within less than MAX31865_MIN_SAMPLING_TIME_MSEC from the last one + } break; + } - #ifdef MAX31865_DEBUG - SERIAL_ECHOLNPGM("RTD MSB:", (rtd >> 8), " RTD LSB:", (rtd & 0x00FF)); #endif - // Disable the bias to lower power dissipation between reads. - // If the ref resistor heats up, the temperature reading will be skewed. - enableBias(false); - - return rtd; + return lastRead; } /** * Calculate and return the resistance value of the connected RTD. * - * @param refResistor The value of the matching reference resistor, usually 430 or 4300 * @return The raw RTD resistance value, NOT temperature! */ float MAX31865::readResistance() { // Strip the error bit (D0) and convert to a float ratio. // less precise method: (readRaw() * refRes) >> 16 - return (((readRaw() >> 1) / 32768.0f) * refRes); + return ((readRaw() * RECIPROCAL(65536.0f)) * refRes - wireRes); } /** @@ -301,7 +371,7 @@ float MAX31865::temperature() { * @return Temperature in C */ float MAX31865::temperature(uint16_t adc_val) { - return temperature(((adc_val) / 32768.0f) * refRes); + return temperature(((adc_val) * RECIPROCAL(32768.0f)) * refRes - wireRes); } /** @@ -352,11 +422,8 @@ float MAX31865::temperature(float rtd_res) { * @param enable whether to enable or disable the value */ void MAX31865::setConfig(uint8_t config, bool enable) { - uint8_t t = readRegister8(MAX31865_CONFIG_REG); - if (enable) - t |= config; - else - t &= ~config; // disable + uint8_t t = stdFlags; + if (enable) t |= config; else t &= ~config; writeRegister8(MAX31865_CONFIG_REG, t); } @@ -369,7 +436,6 @@ void MAX31865::setConfig(uint8_t config, bool enable) { uint8_t MAX31865::readRegister8(uint8_t addr) { uint8_t ret = 0; readRegisterN(addr, &ret, 1); - return ret; } @@ -380,14 +446,9 @@ uint8_t MAX31865::readRegister8(uint8_t addr) { * @return both register contents as a single 16-bit int */ uint16_t MAX31865::readRegister16(uint8_t addr) { - uint8_t buffer[2] = {0, 0}; + uint8_t buffer[2] = { 0 }; readRegisterN(addr, buffer, 2); - - uint16_t ret = buffer[0]; - ret <<= 8; - ret |= buffer[1]; - - return ret; + return uint16_t(buffer[0]) << 8 | buffer[1]; } /** @@ -399,12 +460,12 @@ uint16_t MAX31865::readRegister16(uint8_t addr) { */ void MAX31865::readRegisterN(uint8_t addr, uint8_t buffer[], uint8_t n) { addr &= 0x7F; // make sure top bit is not set - if (sclkPin == TERN(LARGE_PINMAP, -1UL, -1)) + if (sclkPin == TERN(LARGE_PINMAP, -1UL, 255)) SPI.beginTransaction(spiConfig); else - WRITE(sclkPin, LOW); + digitalWrite(sclkPin, LOW); - WRITE(cselPin, LOW); + digitalWrite(cselPin, LOW); #ifdef TARGET_LPC1768 DELAY_CYCLES(spiSpeed); @@ -414,16 +475,13 @@ void MAX31865::readRegisterN(uint8_t addr, uint8_t buffer[], uint8_t n) { while (n--) { buffer[0] = spiTransfer(0xFF); - #ifdef MAX31865_DEBUG_SPI - SERIAL_ECHOLNPGM("buffer read ", n, " data: ", buffer[0]); - #endif buffer++; } - if (sclkPin == TERN(LARGE_PINMAP, -1UL, -1)) + if (sclkPin == TERN(LARGE_PINMAP, -1UL, 255)) SPI.endTransaction(); - WRITE(cselPin, HIGH); + digitalWrite(cselPin, HIGH); } /** @@ -433,12 +491,12 @@ void MAX31865::readRegisterN(uint8_t addr, uint8_t buffer[], uint8_t n) { * @param data the data to write */ void MAX31865::writeRegister8(uint8_t addr, uint8_t data) { - if (sclkPin == TERN(LARGE_PINMAP, -1UL, -1)) + if (sclkPin == TERN(LARGE_PINMAP, -1UL, 255)) SPI.beginTransaction(spiConfig); else - WRITE(sclkPin, LOW); + digitalWrite(sclkPin, LOW); - WRITE(cselPin, LOW); + digitalWrite(cselPin, LOW); #ifdef TARGET_LPC1768 DELAY_CYCLES(spiSpeed); @@ -447,10 +505,10 @@ void MAX31865::writeRegister8(uint8_t addr, uint8_t data) { spiTransfer(addr | 0x80); // make sure top bit is set spiTransfer(data); - if (sclkPin == TERN(LARGE_PINMAP, -1UL, -1)) + if (sclkPin == TERN(LARGE_PINMAP, -1UL, 255)) SPI.endTransaction(); - WRITE(cselPin, HIGH); + digitalWrite(cselPin, HIGH); } /** @@ -463,36 +521,41 @@ void MAX31865::writeRegister8(uint8_t addr, uint8_t data) { * @return the 8-bit response */ uint8_t MAX31865::spiTransfer(uint8_t x) { - if (sclkPin == TERN(LARGE_PINMAP, -1UL, -1)) + + if (sclkPin == TERN(LARGE_PINMAP, -1UL, 255)) return SPI.transfer(x); #ifdef TARGET_LPC1768 + return swSpiTransfer(x, spiSpeed, sclkPin, misoPin, mosiPin); + #else + uint8_t reply = 0; for (int i = 7; i >= 0; i--) { - WRITE(sclkPin, HIGH); DELAY_NS_VAR(spiDelay); + digitalWrite(sclkPin, HIGH); DELAY_NS_VAR(spiDelay); reply <<= 1; - WRITE(mosiPin, x & _BV(i)); DELAY_NS_VAR(spiDelay); - if (READ(misoPin)) reply |= 1; - WRITE(sclkPin, LOW); DELAY_NS_VAR(spiDelay); + digitalWrite(mosiPin, x & _BV(i)); DELAY_NS_VAR(spiDelay); + if (digitalRead(misoPin)) reply |= 1; + digitalWrite(sclkPin, LOW); DELAY_NS_VAR(spiDelay); } return reply; + #endif } void MAX31865::softSpiBegin(const uint8_t spi_speed) { - #ifdef MAX31865_DEBUG - SERIAL_ECHOLNPGM("Initializing MAX31865 Software SPI"); - #endif + DEBUG_ECHOLNPGM("Initializing MAX31865 Software SPI"); + #ifdef TARGET_LPC1768 swSpiBegin(sclkPin, misoPin, mosiPin); spiSpeed = swSpiInit(spi_speed, sclkPin, mosiPin); #else spiDelay = (100UL << spi_speed) / 3; // Calculate delay in ns. Top speed is ~10MHz, or 100ns delay between bits. - OUT_WRITE(sclkPin, LOW); - SET_OUTPUT(mosiPin); - SET_INPUT(misoPin); + pinMode(sclkPin, OUTPUT); + digitalWrite(sclkPin, LOW); + pinMode(mosiPin, OUTPUT); + pinMode(misoPin, INPUT); #endif } diff --git a/Marlin/src/libs/MAX31865.h b/Marlin/src/libs/MAX31865.h index 7cd1f25c98..bc7733b835 100644 --- a/Marlin/src/libs/MAX31865.h +++ b/Marlin/src/libs/MAX31865.h @@ -41,6 +41,8 @@ */ #pragma once +//#define DEBUG_MAX31865 + #include "../inc/MarlinConfig.h" #include "../HAL/shared/Delay.h" #include HAL_PATH(../HAL, MarlinSPI.h) @@ -84,6 +86,14 @@ typedef enum max31865_numwires { MAX31865_4WIRE = 0 } max31865_numwires_t; +#if DISABLED(MAX31865_USE_AUTO_MODE) + typedef enum one_shot_event : uint8_t { + SETUP_BIAS_VOLTAGE, + SETUP_1_SHOT_MODE, + READ_RTD_REG + } one_shot_event_t; +#endif + /* Interface class for the MAX31865 RTD Sensor reader */ class MAX31865 { private: @@ -97,7 +107,21 @@ private: uint16_t spiDelay; #endif - float zeroRes, refRes; + float zeroRes, refRes, wireRes; + + #if ENABLED(MAX31865_USE_READ_ERROR_DETECTION) + millis_t lastReadStamp = 0; + #endif + + uint16_t lastRead = 0; + uint8_t lastFault = 0; + + #if DISABLED(MAX31865_USE_AUTO_MODE) + millis_t nextEventStamp; + one_shot_event_t nextEvent; + #endif + + uint8_t stdFlags = 0; void setConfig(uint8_t config, bool enable); @@ -110,8 +134,15 @@ private: void softSpiBegin(const uint8_t spi_speed); + void initFixedFlags(max31865_numwires_t wires); + + void enable50HzFilter(bool b); + void enableBias(); + void oneShot(); + void resetFlags(); + public: - #ifdef LARGE_PINMAP + #if ENABLED(LARGE_PINMAP) MAX31865(uint32_t spi_cs, uint8_t pin_mapping); MAX31865(uint32_t spi_cs, uint32_t spi_mosi, uint32_t spi_miso, uint32_t spi_clk, uint8_t pin_mapping); @@ -121,17 +152,11 @@ public: int8_t spi_clk); #endif - void begin(max31865_numwires_t wires, float zero, float ref); + void begin(max31865_numwires_t wires, float zero_res, float ref_res, float wire_res); uint8_t readFault(); void clearFault(); - void setWires(max31865_numwires_t wires); - void autoConvert(bool b); - void enable50HzFilter(bool b); - void enableBias(bool b); - void oneShot(); - uint16_t readRaw(); float readResistance(); float temperature(); diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 9d6c566ba0..e068d4fca0 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -2202,11 +2202,8 @@ void Temperature::init() { #elif TEMP_SENSOR_IS_MAX(0, 31865) max31865_0.begin( MAX31865_WIRES(MAX31865_SENSOR_WIRES_0) // MAX31865_2WIRE, MAX31865_3WIRE, MAX31865_4WIRE - OPTARG(LIB_INTERNAL_MAX31865, MAX31865_SENSOR_OHMS_0, MAX31865_CALIBRATION_OHMS_0) + OPTARG(LIB_INTERNAL_MAX31865, MAX31865_SENSOR_OHMS_0, MAX31865_CALIBRATION_OHMS_0, MAX31865_WIRE_OHMS_0) ); - #if defined(LIB_INTERNAL_MAX31865) && ENABLED(MAX31865_50HZ_FILTER) - max31865_0.enable50HzFilter(1); - #endif #endif #if TEMP_SENSOR_IS_MAX(1, 6675) && HAS_MAX6675_LIBRARY @@ -2216,11 +2213,8 @@ void Temperature::init() { #elif TEMP_SENSOR_IS_MAX(1, 31865) max31865_1.begin( MAX31865_WIRES(MAX31865_SENSOR_WIRES_1) // MAX31865_2WIRE, MAX31865_3WIRE, MAX31865_4WIRE - OPTARG(LIB_INTERNAL_MAX31865, MAX31865_SENSOR_OHMS_1, MAX31865_CALIBRATION_OHMS_1) + OPTARG(LIB_INTERNAL_MAX31865, MAX31865_SENSOR_OHMS_1, MAX31865_CALIBRATION_OHMS_1, MAX31865_WIRE_OHMS_1) ); - #if defined(LIB_INTERNAL_MAX31865) && ENABLED(MAX31865_50HZ_FILTER) - max31865_1.enable50HzFilter(1); - #endif #endif #undef MAX31865_WIRES #undef _MAX31865_WIRES From a84e0404e019de905edfd9bbe61d35176c51c3c7 Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Thu, 9 Dec 2021 01:57:50 +0700 Subject: [PATCH 205/532] =?UTF-8?q?=F0=9F=9A=B8=20Onboard=20SD=20for=20SKR?= =?UTF-8?q?=202.0=20/=20SKR=20PRO=20(#23274)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h | 2 +- Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h index ac049baa21..1a1ac4ec21 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h @@ -309,7 +309,7 @@ // #ifndef SDCARD_CONNECTION - #define SDCARD_CONNECTION LCD + #define SDCARD_CONNECTION ONBOARD #endif /** ------ ------ diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h index bf3409210e..d4e07bb8b7 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h @@ -329,7 +329,7 @@ // SD Connection // #ifndef SDCARD_CONNECTION - #define SDCARD_CONNECTION LCD + #define SDCARD_CONNECTION ONBOARD #endif /** From 65e52c1150b461f6458378c3f00bc3683c1bff62 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Wed, 8 Dec 2021 11:10:37 -0800 Subject: [PATCH 206/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20ACTION=5FITEM=20wi?= =?UTF-8?q?th=20nullptr=20(#23195)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/lcd/menu/menu_item.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/lcd/menu/menu_item.h b/Marlin/src/lcd/menu/menu_item.h index 56138a15bd..624b9b303d 100644 --- a/Marlin/src/lcd/menu/menu_item.h +++ b/Marlin/src/lcd/menu/menu_item.h @@ -55,7 +55,7 @@ class MenuItem_button : public MenuItemBase { class MenuItem_function : public MenuItem_button { public: //static inline void action(PGM_P const, const uint8_t, const menuAction_t func) { (*func)(); }; - static inline void action(PGM_P const, const menuAction_t func) { (*func)(); }; + static inline void action(PGM_P const, const menuAction_t func) { if (func) (*func)(); }; }; // GCODES_ITEM(LABEL, GCODES) From dfa1c26471f27e0fa81f1e7f7655a54efc50f77c Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Thu, 9 Dec 2021 02:15:31 +0700 Subject: [PATCH 207/532] =?UTF-8?q?=F0=9F=A9=B9=20Coerce=20pin=5Ft=20in=20?= =?UTF-8?q?set=5Fpwm=5Fduty=20macros=20(#23273)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/planner.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index cd8729edac..0c62b11f5c 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1263,8 +1263,6 @@ void Planner::recalculate() { #if ENABLED(FAN_SOFT_PWM) #define _FAN_SET(F) thermalManager.soft_pwm_amount_fan[F] = CALC_FAN_SPEED(F); - #elif ENABLED(FAST_PWM_FAN) - #define _FAN_SET(F) set_pwm_duty(FAN##F##_PIN, CALC_FAN_SPEED(F)); #else #define _FAN_SET(F) set_pwm_duty(pin_t(FAN##F##_PIN), CALC_FAN_SPEED(F)); #endif From 135683010ac348c77f7a49202314b35f9aa8228d Mon Sep 17 00:00:00 2001 From: Sola <42537573+solawc@users.noreply.github.com> Date: Thu, 9 Dec 2021 03:37:45 +0800 Subject: [PATCH 208/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20MKS=20LVGL=20UI=20?= =?UTF-8?q?retraction=20(#23267)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/extui/mks_ui/draw_extrusion.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/lcd/extui/mks_ui/draw_extrusion.cpp b/Marlin/src/lcd/extui/mks_ui/draw_extrusion.cpp index 85894a5e92..0cacf90f36 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_extrusion.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_extrusion.cpp @@ -55,7 +55,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { if (event != LV_EVENT_RELEASED) return; switch (obj->mks_obj_id) { case ID_E_ADD: - if (thermalManager.degHotend(uiCfg.extruderIndex) >= EXTRUDE_MINTEMP) { + if (thermalManager.hotEnoughToExtrude(uiCfg.extruderIndex)) { sprintf_P((char *)public_buf_l, PSTR("G91\nG1 E%d F%d\nG90"), uiCfg.extruStep, 60 * uiCfg.extruSpeed); queue.inject(public_buf_l); extrudeAmount += uiCfg.extruStep; @@ -63,9 +63,9 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { } break; case ID_E_DEC: - if (thermalManager.degHotend(uiCfg.extruderIndex) >= EXTRUDE_MINTEMP) { + if (thermalManager.hotEnoughToExtrude(uiCfg.extruderIndex)) { sprintf_P((char *)public_buf_l, PSTR("G91\nG1 E%d F%d\nG90"), 0 - uiCfg.extruStep, 60 * uiCfg.extruSpeed); - queue.enqueue_one_now(public_buf_l); + queue.inject(public_buf_l); extrudeAmount -= uiCfg.extruStep; disp_extru_amount(); } From 4d45fdf0eb605629960d06abb86704cfbd62db49 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 8 Dec 2021 18:36:08 -0600 Subject: [PATCH 209/532] =?UTF-8?q?=F0=9F=8E=A8=20Misc.=20probe=20/=20ends?= =?UTF-8?q?top=20cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/endstops.cpp | 2 +- Marlin/src/module/probe.cpp | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index 06cbb839cd..7c08456fa5 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -564,7 +564,7 @@ void _O2 Endstops::report_states() { #if HAS_K_MAX ES_REPORT(K_MAX); #endif - #if BOTH(MARLIN_DEV_MODE, PROBE_ACTIVATION_SWITCH) + #if BOTH(PROBE_ACTIVATION_SWITCH) print_es_state(probe_switch_activated(), F(STR_PROBE_EN)); #endif #if USES_Z_MIN_PROBE_PIN diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 89a043d0f5..7e08db7a5b 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -496,10 +496,10 @@ bool Probe::probe_down_to_z(const_float_t z, const_feedRate_t fr_mm_s) { #if ENABLED(SENSORLESS_PROBING) sensorless_t stealth_states { false }; #if HAS_DELTA_SENSORLESS_PROBING - if (probe.test_sensitivity.x) stealth_states.x = tmc_enable_stallguard(stepperX); // Delta watches all DIAG pins for a stall - if (probe.test_sensitivity.y) stealth_states.y = tmc_enable_stallguard(stepperY); + if (test_sensitivity.x) stealth_states.x = tmc_enable_stallguard(stepperX); // Delta watches all DIAG pins for a stall + if (test_sensitivity.y) stealth_states.y = tmc_enable_stallguard(stepperY); #endif - if (probe.test_sensitivity.z) stealth_states.z = tmc_enable_stallguard(stepperZ); // All machines will check Z-DIAG for stall + if (test_sensitivity.z) stealth_states.z = tmc_enable_stallguard(stepperZ); // All machines will check Z-DIAG for stall endstops.enable(true); set_homing_current(true); // The "homing" current also applies to probing #endif @@ -524,10 +524,10 @@ bool Probe::probe_down_to_z(const_float_t z, const_feedRate_t fr_mm_s) { #if ENABLED(SENSORLESS_PROBING) endstops.not_homing(); #if HAS_DELTA_SENSORLESS_PROBING - if (probe.test_sensitivity.x) tmc_disable_stallguard(stepperX, stealth_states.x); - if (probe.test_sensitivity.y) tmc_disable_stallguard(stepperY, stealth_states.y); + if (test_sensitivity.x) tmc_disable_stallguard(stepperX, stealth_states.x); + if (test_sensitivity.y) tmc_disable_stallguard(stepperY, stealth_states.y); #endif - if (probe.test_sensitivity.z) tmc_disable_stallguard(stepperZ, stealth_states.z); + if (test_sensitivity.z) tmc_disable_stallguard(stepperZ, stealth_states.z); set_homing_current(false); #endif From 1ccaad7a9bc98b1afbb864ad50730a96fa944d17 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 9 Dec 2021 01:03:55 +0000 Subject: [PATCH 210/532] [cron] Bump distribution date (2021-12-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 258fd24881..efd25d331c 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 "2021-12-08" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 7139fe4c18..b1f459df2a 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 "2021-12-08" + #define STRING_DISTRIBUTION_DATE "2021-12-09" #endif /** From c3af6bd8ce731737d0812a0e554e37dc0779127f Mon Sep 17 00:00:00 2001 From: Scott Alfter Date: Wed, 8 Dec 2021 23:18:04 -0800 Subject: [PATCH 211/532] Fix Endstops::report_states (#23280) Fix regression 4d45fdf0eb --- Marlin/src/module/endstops.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index 7c08456fa5..7a2cefdd4c 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -564,7 +564,7 @@ void _O2 Endstops::report_states() { #if HAS_K_MAX ES_REPORT(K_MAX); #endif - #if BOTH(PROBE_ACTIVATION_SWITCH) + #if ENABLED(PROBE_ACTIVATION_SWITCH) print_es_state(probe_switch_activated(), F(STR_PROBE_EN)); #endif #if USES_Z_MIN_PROBE_PIN From 1e637a8de2d2785e869d54897b0b2122410a0370 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 10 Dec 2021 01:04:24 +0000 Subject: [PATCH 212/532] [cron] Bump distribution date (2021-12-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 efd25d331c..3966933d3c 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 "2021-12-09" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 b1f459df2a..a0e443bff4 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 "2021-12-09" + #define STRING_DISTRIBUTION_DATE "2021-12-10" #endif /** From 0077d982cdbc414c60b2be8c7800317883ce6413 Mon Sep 17 00:00:00 2001 From: BigTreeTech <38851044+bigtreetech@users.noreply.github.com> Date: Sat, 11 Dec 2021 03:38:03 +0800 Subject: [PATCH 213/532] =?UTF-8?q?=E2=9C=A8=20BigTreeTech=20SKR=20mini=20?= =?UTF-8?q?E3=20V3.0=20(STM32G0B1RET6)=20(#23283)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/STM32/HAL.h | 6 +- Marlin/src/HAL/STM32/HAL_MinSerial.cpp | 2 +- Marlin/src/HAL/STM32/timers.cpp | 2 +- .../src/HAL/shared/backtrace/unwmemaccess.cpp | 2 +- .../shared/cpu_exception/exception_arm.cpp | 2 +- Marlin/src/core/boards.h | 67 +-- Marlin/src/module/stepper.cpp | 2 +- Marlin/src/pins/pins.h | 2 + .../stm32f1/pins_BTT_SKR_MINI_E3_common.h | 4 +- .../pins/stm32g0/pins_BTT_SKR_MINI_E3_V3_0.h | 332 ++++++++++++++ .../PlatformIO/boards/marlin_STM32G0B1RE.json | 47 ++ .../scripts/generic_create_variant.py | 2 +- .../STM32G0xx/MARLIN_G0B1RE/PeripheralPins.c | 428 ++++++++++++++++++ .../STM32G0xx/MARLIN_G0B1RE/PinNamesVar.h | 90 ++++ .../STM32G0xx/MARLIN_G0B1RE/ldscript.ld | 177 ++++++++ .../variant_MARLIN_STM32G0B1RE.cpp | 177 ++++++++ .../variant_MARLIN_STM32G0B1RE.h | 199 ++++++++ ini/stm32g0.ini | 39 ++ platformio.ini | 1 + 19 files changed, 1539 insertions(+), 42 deletions(-) create mode 100644 Marlin/src/pins/stm32g0/pins_BTT_SKR_MINI_E3_V3_0.h create mode 100644 buildroot/share/PlatformIO/boards/marlin_STM32G0B1RE.json create mode 100644 buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/PeripheralPins.c create mode 100644 buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/PinNamesVar.h create mode 100644 buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/ldscript.ld create mode 100644 buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.cpp create mode 100644 buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h create mode 100644 ini/stm32g0.ini diff --git a/Marlin/src/HAL/STM32/HAL.h b/Marlin/src/HAL/STM32/HAL.h index a68e8a8c0e..adaf14223f 100644 --- a/Marlin/src/HAL/STM32/HAL.h +++ b/Marlin/src/HAL/STM32/HAL.h @@ -130,7 +130,11 @@ // Types // ------------------------ -typedef int16_t pin_t; +#ifdef STM32G0B1xx + typedef int32_t pin_t; +#else + typedef int16_t pin_t; +#endif #define HAL_SERVO_LIB libServo #define PAUSE_SERVO_OUTPUT() libServo::pause_all_servos() diff --git a/Marlin/src/HAL/STM32/HAL_MinSerial.cpp b/Marlin/src/HAL/STM32/HAL_MinSerial.cpp index 29826a890d..b6e86b72da 100644 --- a/Marlin/src/HAL/STM32/HAL_MinSerial.cpp +++ b/Marlin/src/HAL/STM32/HAL_MinSerial.cpp @@ -135,7 +135,7 @@ void install_min_serial() { HAL_min_serial_out = &TX; } -#if DISABLED(DYNAMIC_VECTORTABLE) && DISABLED(STM32F0xx) // Cortex M0 can't jump to a symbol that's too far from the current function, so we work around this in exception_arm.cpp +#if NONE(DYNAMIC_VECTORTABLE, STM32F0xx, STM32G0xx) // Cortex M0 can't jump to a symbol that's too far from the current function, so we work around this in exception_arm.cpp extern "C" { __attribute__((naked)) void JumpHandler_ASM() { __asm__ __volatile__ ( diff --git a/Marlin/src/HAL/STM32/timers.cpp b/Marlin/src/HAL/STM32/timers.cpp index 53a1f2a8e9..fe27ca1016 100644 --- a/Marlin/src/HAL/STM32/timers.cpp +++ b/Marlin/src/HAL/STM32/timers.cpp @@ -67,7 +67,7 @@ #endif #endif -#ifdef STM32F0xx +#if defined(STM32F0xx) || defined(STM32G0xx) #define MCU_STEP_TIMER 16 #define MCU_TEMP_TIMER 17 #elif defined(STM32F1xx) diff --git a/Marlin/src/HAL/shared/backtrace/unwmemaccess.cpp b/Marlin/src/HAL/shared/backtrace/unwmemaccess.cpp index 2bde1e208d..a4151b38c2 100644 --- a/Marlin/src/HAL/shared/backtrace/unwmemaccess.cpp +++ b/Marlin/src/HAL/shared/backtrace/unwmemaccess.cpp @@ -41,7 +41,7 @@ #define START_FLASH_ADDR 0x00000000 #define END_FLASH_ADDR 0x00080000 -#elif defined(__STM32F1__) || defined(STM32F1xx) || defined(STM32F0xx) +#elif defined(__STM32F1__) || defined(STM32F1xx) || defined(STM32F0xx) || defined(STM32G0xx) // For STM32F103ZET6/STM32F103VET6/STM32F0xx // SRAM (0x20000000 - 0x20010000) (64kb) diff --git a/Marlin/src/HAL/shared/cpu_exception/exception_arm.cpp b/Marlin/src/HAL/shared/cpu_exception/exception_arm.cpp index 0f0f7c4807..a106ed2b05 100644 --- a/Marlin/src/HAL/shared/cpu_exception/exception_arm.cpp +++ b/Marlin/src/HAL/shared/cpu_exception/exception_arm.cpp @@ -101,7 +101,7 @@ struct __attribute__((packed)) ContextSavedFrame { uint32_t ELR; }; -#if DISABLED(STM32F0xx) +#if NONE(STM32F0xx, STM32G0xx) extern "C" __attribute__((naked)) void CommonHandler_ASM() { __asm__ __volatile__ ( diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 9483d6322a..2fc08c8cc7 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -324,39 +324,40 @@ #define BOARD_BTT_SKR_MINI_E3_V1_0 4024 // BigTreeTech SKR Mini E3 (STM32F103RC) #define BOARD_BTT_SKR_MINI_E3_V1_2 4025 // BigTreeTech SKR Mini E3 V1.2 (STM32F103RC) #define BOARD_BTT_SKR_MINI_E3_V2_0 4026 // BigTreeTech SKR Mini E3 V2.0 (STM32F103RC / STM32F103RE) -#define BOARD_BTT_SKR_MINI_MZ_V1_0 4027 // BigTreeTech SKR Mini MZ V1.0 (STM32F103RC) -#define BOARD_BTT_SKR_E3_DIP 4028 // BigTreeTech SKR E3 DIP V1.0 (STM32F103RC / STM32F103RE) -#define BOARD_BTT_SKR_CR6 4029 // BigTreeTech SKR CR6 v1.0 (STM32F103RE) -#define BOARD_JGAURORA_A5S_A1 4030 // JGAurora A5S A1 (STM32F103ZET6) -#define BOARD_FYSETC_AIO_II 4031 // FYSETC AIO_II -#define BOARD_FYSETC_CHEETAH 4032 // FYSETC Cheetah -#define BOARD_FYSETC_CHEETAH_V12 4033 // FYSETC Cheetah V1.2 -#define BOARD_LONGER3D_LK 4034 // Alfawise U20/U20+/U30 (Longer3D LK1/2) / STM32F103VET6 -#define BOARD_CCROBOT_MEEB_3DP 4035 // ccrobot-online.com MEEB_3DP (STM32F103RC) -#define BOARD_CHITU3D_V5 4036 // Chitu3D TronXY X5SA V5 Board -#define BOARD_CHITU3D_V6 4037 // Chitu3D TronXY X5SA V6 Board -#define BOARD_CHITU3D_V9 4038 // Chitu3D TronXY X5SA V9 Board -#define BOARD_CREALITY_V4 4039 // Creality v4.x (STM32F103RE) -#define BOARD_CREALITY_V427 4040 // Creality v4.2.7 (STM32F103RE) -#define BOARD_CREALITY_V4210 4041 // Creality v4.2.10 (STM32F103RE) as found in the CR-30 -#define BOARD_CREALITY_V431 4042 // Creality v4.3.1 (STM32F103RE) -#define BOARD_CREALITY_V431_A 4043 // Creality v4.3.1a (STM32F103RE) -#define BOARD_CREALITY_V431_B 4044 // Creality v4.3.1b (STM32F103RE) -#define BOARD_CREALITY_V431_C 4045 // Creality v4.3.1c (STM32F103RE) -#define BOARD_CREALITY_V431_D 4046 // Creality v4.3.1d (STM32F103RE) -#define BOARD_CREALITY_V452 4047 // Creality v4.5.2 (STM32F103RE) -#define BOARD_CREALITY_V453 4048 // Creality v4.5.3 (STM32F103RE) -#define BOARD_CREALITY_V24S1 4049 // Creality v2.4.S1 (STM32F103RE) v101 as found in the Ender 7 -#define BOARD_TRIGORILLA_PRO 4050 // Trigorilla Pro (STM32F103ZET6) -#define BOARD_FLY_MINI 4051 // FLYmaker FLY MINI (STM32F103RCT6) -#define BOARD_FLSUN_HISPEED 4052 // FLSUN HiSpeedV1 (STM32F103VET6) -#define BOARD_BEAST 4053 // STM32F103RET6 Libmaple-based controller -#define BOARD_MINGDA_MPX_ARM_MINI 4054 // STM32F103ZET6 Mingda MD-16 -#define BOARD_GTM32_PRO_VD 4055 // STM32F103VET6 controller -#define BOARD_ZONESTAR_ZM3E2 4056 // Zonestar ZM3E2 (STM32F103RCT6) -#define BOARD_ZONESTAR_ZM3E4 4057 // Zonestar ZM3E4 V1 (STM32F103VCT6) -#define BOARD_ZONESTAR_ZM3E4V2 4058 // Zonestar ZM3E4 V2 (STM32F103VCT6) -#define BOARD_ERYONE_ERY32_MINI 4059 // Eryone Ery32 mini (STM32F103VET6) +#define BOARD_BTT_SKR_MINI_E3_V3_0 4027 // BigTreeTech SKR Mini E3 V3.0 (STM32G0B1RE) +#define BOARD_BTT_SKR_MINI_MZ_V1_0 4028 // BigTreeTech SKR Mini MZ V1.0 (STM32F103RC) +#define BOARD_BTT_SKR_E3_DIP 4029 // BigTreeTech SKR E3 DIP V1.0 (STM32F103RC / STM32F103RE) +#define BOARD_BTT_SKR_CR6 4030 // BigTreeTech SKR CR6 v1.0 (STM32F103RE) +#define BOARD_JGAURORA_A5S_A1 4031 // JGAurora A5S A1 (STM32F103ZET6) +#define BOARD_FYSETC_AIO_II 4032 // FYSETC AIO_II +#define BOARD_FYSETC_CHEETAH 4033 // FYSETC Cheetah +#define BOARD_FYSETC_CHEETAH_V12 4034 // FYSETC Cheetah V1.2 +#define BOARD_LONGER3D_LK 4035 // Alfawise U20/U20+/U30 (Longer3D LK1/2) / STM32F103VET6 +#define BOARD_CCROBOT_MEEB_3DP 4036 // ccrobot-online.com MEEB_3DP (STM32F103RC) +#define BOARD_CHITU3D_V5 4037 // Chitu3D TronXY X5SA V5 Board +#define BOARD_CHITU3D_V6 4038 // Chitu3D TronXY X5SA V6 Board +#define BOARD_CHITU3D_V9 4039 // Chitu3D TronXY X5SA V9 Board +#define BOARD_CREALITY_V4 4040 // Creality v4.x (STM32F103RE) +#define BOARD_CREALITY_V427 4041 // Creality v4.2.7 (STM32F103RE) +#define BOARD_CREALITY_V4210 4042 // Creality v4.2.10 (STM32F103RE) as found in the CR-30 +#define BOARD_CREALITY_V431 4043 // Creality v4.3.1 (STM32F103RE) +#define BOARD_CREALITY_V431_A 4044 // Creality v4.3.1a (STM32F103RE) +#define BOARD_CREALITY_V431_B 4045 // Creality v4.3.1b (STM32F103RE) +#define BOARD_CREALITY_V431_C 4046 // Creality v4.3.1c (STM32F103RE) +#define BOARD_CREALITY_V431_D 4047 // Creality v4.3.1d (STM32F103RE) +#define BOARD_CREALITY_V452 4048 // Creality v4.5.2 (STM32F103RE) +#define BOARD_CREALITY_V453 4049 // Creality v4.5.3 (STM32F103RE) +#define BOARD_CREALITY_V24S1 4050 // Creality v2.4.S1 (STM32F103RE) v101 as found in the Ender 7 +#define BOARD_TRIGORILLA_PRO 4051 // Trigorilla Pro (STM32F103ZET6) +#define BOARD_FLY_MINI 4052 // FLYmaker FLY MINI (STM32F103RCT6) +#define BOARD_FLSUN_HISPEED 4053 // FLSUN HiSpeedV1 (STM32F103VET6) +#define BOARD_BEAST 4054 // STM32F103RET6 Libmaple-based controller +#define BOARD_MINGDA_MPX_ARM_MINI 4055 // STM32F103ZET6 Mingda MD-16 +#define BOARD_GTM32_PRO_VD 4056 // STM32F103VET6 controller +#define BOARD_ZONESTAR_ZM3E2 4057 // Zonestar ZM3E2 (STM32F103RCT6) +#define BOARD_ZONESTAR_ZM3E4 4058 // Zonestar ZM3E4 V1 (STM32F103VCT6) +#define BOARD_ZONESTAR_ZM3E4V2 4059 // Zonestar ZM3E4 V2 (STM32F103VCT6) +#define BOARD_ERYONE_ERY32_MINI 4060 // Eryone Ery32 mini (STM32F103VET6) // // ARM Cortex-M4F diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index b93dd21198..c100051f98 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -1380,7 +1380,7 @@ void Stepper::set_directions() { } FORCE_INLINE int32_t Stepper::_eval_bezier_curve(const uint32_t curr_step) { - #if defined(__arm__) || defined(__thumb__) + #if (defined(__arm__) || defined(__thumb__)) && !defined(STM32G0B1xx) // TODO: Test define STM32G0xx versus STM32G0B1xx // For ARM Cortex M3/M4 CPUs, we have the optimized assembler version, that takes 43 cycles to execute uint32_t flo = 0; diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 59e0633307..3ffb2d26b7 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -527,6 +527,8 @@ #include "stm32f1/pins_BTT_SKR_MINI_E3_V1_2.h" // STM32F1 env:STM32F103RC_btt env:STM32F103RC_btt_USB env:STM32F103RC_btt_maple env:STM32F103RC_btt_USB_maple #elif MB(BTT_SKR_MINI_E3_V2_0) #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 #elif MB(BTT_SKR_MINI_MZ_V1_0) #include "stm32f1/pins_BTT_SKR_MINI_MZ_V1_0.h" // STM32F1 env:STM32F103RC_btt env:STM32F103RC_btt_USB env:STM32F103RC_btt_maple env:STM32F103RC_btt_USB_maple #elif MB(BTT_SKR_E3_DIP) 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 c132691c20..8c8043be8b 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 @@ -206,7 +206,7 @@ /** * TFTGLCD_PANEL_SPI display pinout * - * Board Display + * Board Display * ------ ------ * 5V | 1 2 | GND (SPI1-MISO) MISO | 1 2 | SCK (SPI1-SCK) * (FREE) PB7 | 3 4 | PB8 (LCD_CS) (PA9) LCD_CS | 3 4 | SD_CS (PA10) @@ -249,7 +249,7 @@ /** * FYSETC TFT TFT81050 display pinout * - * Board Display + * Board Display * ------ ------ * 5V | 1 2 | GND (SPI1-MISO) MISO | 1 2 | SCK (SPI1-SCK) * (FREE) PB7 | 3 4 | PB8 (LCD_CS) (PA9) MOD_RESET | 3 4 | SD_CS (PA10) 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 new file mode 100644 index 0000000000..2fda0fb2c0 --- /dev/null +++ b/Marlin/src/pins/stm32g0/pins_BTT_SKR_MINI_E3_V3_0.h @@ -0,0 +1,332 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +//#define BOARD_CUSTOM_BUILD_FLAGS -DTONE_CHANNEL=4 -DTONE_TIMER=4 -DTIMER_TONE=4 + +#ifndef BOARD_INFO_NAME + #define BOARD_INFO_NAME "BTT SKR Mini E3 V3.0" +#endif + +#define USES_DIAG_JUMPERS + +// Ignore temp readings during development. +//#define BOGUS_TEMPERATURE_GRACE_PERIOD 2000 + +#define LED_PIN PD8 + +// Onboard I2C EEPROM +#if EITHER(NO_EEPROM_SELECTED, I2C_EEPROM) + #undef NO_EEPROM_SELECTED + #define I2C_EEPROM + #define SOFT_I2C_EEPROM // Force the use of Software I2C + #define I2C_SCL_PIN PB6 + #define I2C_SDA_PIN PB7 + #define MARLIN_EEPROM_SIZE 0x1000 // 4KB +#endif + +// +// Servos +// +#define SERVO0_PIN PA1 // SERVOS + +// +// 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 + +// +// Power-loss Detection +// +#ifndef POWER_LOSS_PIN + #define POWER_LOSS_PIN PC12 // Power Loss Detection: PWR-DET +#endif + +#ifndef NEOPIXEL_PIN + #define NEOPIXEL_PIN PA8 // LED driving pin +#endif + +#ifndef PS_ON_PIN + #define PS_ON_PIN PC13 // Power Supply Control +#endif + +// +// Steppers +// +#define X_ENABLE_PIN PB14 +#define X_STEP_PIN PB13 +#define X_DIR_PIN PB12 + +#define Y_ENABLE_PIN PB11 +#define Y_STEP_PIN PB10 +#define Y_DIR_PIN PB2 + +#define Z_ENABLE_PIN PB1 +#define Z_STEP_PIN PB0 +#define Z_DIR_PIN PC5 + +#define E0_ENABLE_PIN PD1 +#define E0_STEP_PIN PB3 +#define E0_DIR_PIN PB4 + +#if HAS_TMC_UART + /** + * TMC220x stepper drivers + * Hardware serial communication ports + */ + #define X_HARDWARE_SERIAL MSerial4 + #define Y_HARDWARE_SERIAL MSerial4 + #define Z_HARDWARE_SERIAL MSerial4 + #define E0_HARDWARE_SERIAL MSerial4 + + // Default TMC slave addresses + #ifndef X_SLAVE_ADDRESS + #define X_SLAVE_ADDRESS 0 + #endif + #ifndef Y_SLAVE_ADDRESS + #define Y_SLAVE_ADDRESS 2 + #endif + #ifndef Z_SLAVE_ADDRESS + #define Z_SLAVE_ADDRESS 1 + #endif + #ifndef E0_SLAVE_ADDRESS + #define E0_SLAVE_ADDRESS 3 + #endif +#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 PC9 // "HB" +#define FAN_PIN PC6 // "FAN0" +#define FAN1_PIN PC7 // "FAN1" +#define FAN2_PIN PB15 // "FAN2" + +/** + * SKR Mini E3 V3.0 + * ------ + * 5V | 1 2 | GND + * (LCD_EN) PD6 | 3 4 | PB8 (LCD_RS) + * (LCD_D4) PB9 | 5 6 PA10 (BTN_EN2) + * RESET | 7 8 | PA9 (BTN_EN1) + * (BTN_ENC) PA15 | 9 10 | PB5 (BEEPER) + * ------ + * EXP1 + */ +#define EXP1_09_PIN PA15 +#define EXP1_03_PIN PD6 + +#if EITHER(DWIN_CREALITY_LCD, IS_DWIN_MARLINUI) + /** + * ------ ------ ------ + * VCC | 1 2 | GND VCC | 1 2 | GND GND | 2 1 | VCC + * A | 3 4 | B A | 3 4 | B B | 4 3 | A + * | 5 6 TX BEEP | 5 6 ENT ENT | 6 5 | BEEP + * | 7 8 | RX TX | 7 8 | RX RX | 8 7 | TX + * BEEP | 9 10 | ENT | 9 10 | | 10 9 | + * ------ ------ ------ + * EXP1 DWIN DWIN (plug) + * + * All pins are labeled as printed on DWIN PCB. Connect TX-TX, A-A and so on. + */ + + #error "DWIN_CREALITY_LCD requires a custom cable, see diagram above this line. Comment out this line to continue." + + #define BEEPER_PIN EXP1_09_PIN + #define BTN_EN1 EXP1_03_PIN + #define BTN_EN2 PB8 + #define BTN_ENC PB5 + +#elif HAS_WIRED_LCD + + #if ENABLED(CR10_STOCKDISPLAY) + + #define BEEPER_PIN PB5 + #define BTN_ENC EXP1_09_PIN + + #define BTN_EN1 PA9 + #define BTN_EN2 PA10 + + #define LCD_PINS_RS PB8 + #define LCD_PINS_ENABLE EXP1_03_PIN + #define LCD_PINS_D4 PB9 + + #elif ENABLED(ZONESTAR_LCD) // ANET A8 LCD Controller - Must convert to 3.3V - CONNECTING TO 5V WILL DAMAGE THE BOARD! + + #error "CAUTION! ZONESTAR_LCD requires wiring modifications. See 'pins_BTT_SKR_MINI_E3_common.h' for details. Comment out this line to continue." + + #define LCD_PINS_RS PB9 + #define LCD_PINS_ENABLE EXP1_09_PIN + #define LCD_PINS_D4 PB8 + #define LCD_PINS_D5 PA10 + #define LCD_PINS_D6 PA9 + #define LCD_PINS_D7 PB5 + #define ADC_KEYPAD_PIN PA1 // Repurpose servo pin for ADC - CONNECTING TO 5V WILL DAMAGE THE BOARD! + + #elif EITHER(MKS_MINI_12864, ENDER2_STOCKDISPLAY) + + #define BTN_ENC EXP1_09_PIN + #define BTN_EN1 PA9 + #define BTN_EN2 PA10 + + #define DOGLCD_CS PB8 + #define DOGLCD_A0 PB9 + #define DOGLCD_SCK PB5 + #define DOGLCD_MOSI EXP1_03_PIN + + #define FORCE_SOFT_SPI + #define LCD_BACKLIGHT_PIN -1 + + #elif IS_TFTGLCD_PANEL + + #if ENABLED(TFTGLCD_PANEL_SPI) + + #error "CAUTION! TFTGLCD_PANEL_SPI requires wiring modifications. See 'pins_BTT_SKR_MINI_E3_common.h' for details. Comment out this line to continue." + + /** + * TFTGLCD_PANEL_SPI display pinout + * + * Board Display + * ------ ------ + * 5V | 1 2 | GND (SPI1-MISO) MISO | 1 2 | SCK (SPI1-SCK) + * (FREE) PB7 | 3 4 | PB8 (LCD_CS) (PA9) LCD_CS | 3 4 | SD_CS (PA10) + * (FREE) PB9 | 5 6 | PA10 (SD_CS) (FREE) | 5 6 | MOSI (SPI1-MOSI) + * RESET | 7 8 | PA9 (MOD_RESET) (PB5) SD_DET | 7 8 | (FREE) + * (BEEPER) PB6 | 9 10 | PB5 (SD_DET) GND | 9 10 | 5V + * ------ ------ + * EXP1 EXP1 + * + * Needs custom cable: + * + * Board Display + * + * EXP1-1 ----------- EXP1-10 + * EXP1-2 ----------- EXP1-9 + * SPI1-4 ----------- EXP1-6 + * EXP1-4 ----------- FREE + * SPI1-3 ----------- EXP1-2 + * EXP1-6 ----------- EXP1-4 + * EXP1-7 ----------- FREE + * EXP1-8 ----------- EXP1-3 + * SPI1-1 ----------- EXP1-1 + * EXP1-10 ----------- EXP1-7 + */ + + #define TFTGLCD_CS PA9 + + #endif + + #else + #error "Only CR10_STOCKDISPLAY, ZONESTAR_LCD, ENDER2_STOCKDISPLAY, MKS_MINI_12864, and TFTGLCD_PANEL_(SPI|I2C) are currently supported on the BIGTREE_SKR_MINI_E3." + #endif + +#endif // HAS_WIRED_LCD + +#if BOTH(TOUCH_UI_FTDI_EVE, LCD_FYSETC_TFT81050) + + #error "CAUTION! LCD_FYSETC_TFT81050 requires wiring modifications. See 'pins_BTT_SKR_MINI_E3_common.h' for details. Comment out this line to continue." + + /** + * FYSETC TFT TFT81050 display pinout + * + * Board Display + * ------ ------ + * 5V | 1 2 | GND (SPI1-MISO) MISO | 1 2 | SCK (SPI1-SCK) + * (FREE) PB7 | 3 4 | PB8 (LCD_CS) (PA9) MOD_RESET | 3 4 | SD_CS (PA10) + * (FREE) PB9 | 5 6 | PA10 (SD_CS) (PB8) LCD_CS | 5 6 | MOSI (SPI1-MOSI) + * RESET | 7 8 | PA9 (MOD_RESET) (PB5) SD_DET | 7 8 | RESET + * (BEEPER) PB6 | 9 10 | PB5 (SD_DET) GND | 9 10 | 5V + * ------ ------ + * EXP1 EXP1 + * + * Needs custom cable: + * + * Board Adapter Display + * _________ + * EXP1-1 ----------- EXP1-10 + * EXP1-2 ----------- EXP1-9 + * SPI1-4 ----------- EXP1-6 + * EXP1-4 ----------- EXP1-5 + * SPI1-3 ----------- EXP1-2 + * EXP1-6 ----------- EXP1-4 + * EXP1-7 ----------- EXP1-8 + * EXP1-8 ----------- EXP1-3 + * SPI1-1 ----------- EXP1-1 + * EXP1-10 ----------- EXP1-7 + */ + + #define CLCD_SPI_BUS 1 // SPI1 connector + + #define BEEPER_PIN EXP1_09_PIN + + #define CLCD_MOD_RESET PA9 + #define CLCD_SPI_CS PB8 + +#endif // TOUCH_UI_FTDI_EVE && LCD_FYSETC_TFT81050 + +// +// SD Support +// + +#ifndef SDCARD_CONNECTION + #define SDCARD_CONNECTION ONBOARD +#endif + +#if SD_CONNECTION_IS(ONBOARD) + #define SD_DETECT_PIN PC3 +#elif SD_CONNECTION_IS(LCD) && (BOTH(TOUCH_UI_FTDI_EVE, LCD_FYSETC_TFT81050) || IS_TFTGLCD_PANEL) + #define SD_DETECT_PIN PB5 + #define SD_SS_PIN PA10 +#elif SD_CONNECTION_IS(CUSTOM_CABLE) + #error "SD CUSTOM_CABLE is not compatible with SKR Mini E3." +#endif + +#define ONBOARD_SPI_DEVICE 1 // SPI1 -> used only by HAL/STM32F1... +#define ONBOARD_SD_CS_PIN PA4 // Chip select for "System" SD card + +#define ENABLE_SPI1 +#define SDSS ONBOARD_SD_CS_PIN +#define SD_SS_PIN ONBOARD_SD_CS_PIN +#define SD_SCK_PIN PA5 +#define SD_MISO_PIN PA6 +#define SD_MOSI_PIN PA7 diff --git a/buildroot/share/PlatformIO/boards/marlin_STM32G0B1RE.json b/buildroot/share/PlatformIO/boards/marlin_STM32G0B1RE.json new file mode 100644 index 0000000000..86f632f53b --- /dev/null +++ b/buildroot/share/PlatformIO/boards/marlin_STM32G0B1RE.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": "stm32g0b1ret6", + "product_line": "STM32G0B1xx", + "variant": "STM32G0xx/MARLIN_G0B1RE" + }, + "debug": { + "default_tools": [ + "stlink" + ], + "jlink_device": "STM32G0B1RE", + "onboard_tools": [ + "stlink" + ], + "openocd_target": "stm32g0x", + "svd_path": "STM32G0B1.svd" + }, + "frameworks": [ + "arduino", + "cmsis", + "libopencm3", + "stm32cube", + "zephyr" + ], + "name": "STM32G0B1RE", + "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/scripts/generic_create_variant.py b/buildroot/share/PlatformIO/scripts/generic_create_variant.py index 06929e0504..d572873ad7 100644 --- a/buildroot/share/PlatformIO/scripts/generic_create_variant.py +++ b/buildroot/share/PlatformIO/scripts/generic_create_variant.py @@ -30,7 +30,7 @@ if pioutil.is_pio_build(): else: platform_name = PackageSpec(platform_packages[0]).name - if platform_name in [ "usb-host-msc", "usb-host-msc-cdc-msc", "usb-host-msc-cdc-msc-2", "usb-host-msc-cdc-msc-3", "tool-stm32duino", "biqu-bx-workaround" ]: + if platform_name in [ "usb-host-msc", "usb-host-msc-cdc-msc", "usb-host-msc-cdc-msc-2", "usb-host-msc-cdc-msc-3", "tool-stm32duino", "biqu-bx-workaround", "main" ]: platform_name = "framework-arduinoststm32" FRAMEWORK_DIR = platform.get_package_dir(platform_name) diff --git a/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/PeripheralPins.c b/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/PeripheralPins.c new file mode 100644 index 0000000000..0abfc70700 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/PeripheralPins.c @@ -0,0 +1,428 @@ +/* + ******************************************************************************* + * 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 STM32G0B1R(B-C-E)IxN.xml, STM32G0B1R(B-C-E)TxN.xml + * STM32G0C1R(C-E)IxN.xml, STM32G0C1R(C-E)TxN.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 + {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 + {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)}, + {PF_2, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_LPUART2)}, + {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)}, + {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)}, + {PF_2, LPUART2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_LPUART2)}, + {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)}, + {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)}, + {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)}, + {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)}, + {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)}, + {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)}, + {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)}, + {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/STM32G0xx/MARLIN_G0B1RE/PinNamesVar.h b/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/PinNamesVar.h new file mode 100644 index 0000000000..9fc0b87c90 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/PinNamesVar.h @@ -0,0 +1,90 @@ +/* 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, + +/* 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 = NC, +#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/STM32G0xx/MARLIN_G0B1RE/ldscript.ld b/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/ldscript.ld new file mode 100644 index 0000000000..3b619b6a97 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/ldscript.ld @@ -0,0 +1,177 @@ +/** + ****************************************************************************** + * @file LinkerScript.ld + * @author Auto-generated by STM32CubeIDE + * @brief Linker script for STM32G0B1RETx 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/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.cpp b/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.cpp new file mode 100644 index 0000000000..e53fb4182c --- /dev/null +++ b/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.cpp @@ -0,0 +1,177 @@ +/* + ******************************************************************************* + * 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_8, // D55 + PD_9, // D56 + PF_0, // D57 + PF_1, // D58 + PF_2, // D59 + PA_9_R, // D60 + PA_10_R // D61 +}; + +// 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 = 16 + * PLL_R = 2 + * PLL_P = 2 + * PLL_Q = 2 + * USB(Hz) = 48000000 (HSI48M) + * @param None + * @retval None + */ +WEAK void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + /** 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_OSCILLATORTYPE_HSI48; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.HSI48State = RCC_HSI48_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 = 16; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2; + RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2; + 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_HSI48; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } +} + +#ifdef __cplusplus +} +#endif +#endif /* STM32G0B1xx */ diff --git a/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h b/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h new file mode 100644 index 0000000000..65aff2ce27 --- /dev/null +++ b/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h @@ -0,0 +1,199 @@ +/* + ******************************************************************************* + * 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 PD8 55 +#define PD9 56 +#define PF0 57 +#define PF1 58 +#define PF2 59 +#define PA9_R 60 +#define PA10_R 61 + +// 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 NUM_DIGITAL_PINS 62 +#define NUM_REMAP_PINS 2 +#define NUM_ANALOG_INPUTS 16 + +// SPI definitions +#ifndef PIN_SPI_SS + #define PIN_SPI_SS PA4 +#endif +#ifndef PIN_SPI_MOSI + #define PIN_SPI_MOSI PA7 +#endif +#ifndef PIN_SPI_MISO + #define PIN_SPI_MISO PA6 +#endif +#ifndef PIN_SPI_SCK + #define PIN_SPI_SCK PA5 +#endif + +// I2C definitions +#ifndef PIN_WIRE_SDA + #define PIN_WIRE_SDA PB6 +#endif +#ifndef PIN_WIRE_SCL + #define PIN_WIRE_SCL PB7 +#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 2 +#endif + +// Default pin used for generic 'Serial' instance +// Mandatory for Firmata +#ifndef PIN_SERIAL_RX + #define PIN_SERIAL_RX PA3 +#endif +#ifndef PIN_SERIAL_TX + #define PIN_SERIAL_TX PA2 +#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 Serial2 + #endif +#endif diff --git a/ini/stm32g0.ini b/ini/stm32g0.ini new file mode 100644 index 0000000000..99f167a4df --- /dev/null +++ b/ini/stm32g0.ini @@ -0,0 +1,39 @@ +# +# Marlin Firmware +# PlatformIO Configuration File +# + +################################# +# +# STM32G0 Architecture +# +# Naming Example: STM32G0B1RET6 +# +# G : Foundation +# 0 : Cortex M0+ core (0:M0, 1-2:M3, 3-4:M4, 7:M7) +# B1 : Line/Features +# R : 64 pins (R:64 or 66, F:20) +# E : 512KB Flash-memory (C:256KB, D:384KB, E:512KB, G:1024KB) +# T : LQFP package +# 6 : -40...85°C (7: ...105°C) +# +################################# + +# +# BigTree SKR mini E3 V3.0 (STM32G0B1RET6 ARM Cortex-M0+) +# +[env:STM32G0B1RE_btt] +platform = ststm32@~14.1.0 +platform_packages = framework-arduinoststm32@https://github.com/stm32duino/Arduino_Core_STM32/archive/main.zip +extends = stm32_variant +board = marlin_STM32G0B1RE +board_build.offset = 0x2000 +board_upload.offset_address = 0x08002000 +build_flags = ${stm32_variant.build_flags} + -DADC_RESOLUTION=12 + -DPIN_SERIAL4_RX=PC_11 -DPIN_SERIAL4_TX=PC_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 diff --git a/platformio.ini b/platformio.ini index 55a2bd2457..74ac012f19 100644 --- a/platformio.ini +++ b/platformio.ini @@ -30,6 +30,7 @@ extra_configs = ini/stm32f4.ini ini/stm32f7.ini ini/stm32h7.ini + ini/stm32g0.ini ini/teensy.ini # From aebf70cdae0683ed067a9d5aa0f3c93883f0d55a Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 11 Dec 2021 01:03:00 +0000 Subject: [PATCH 214/532] [cron] Bump distribution date (2021-12-11) --- 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 3966933d3c..fdfa9e1747 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 "2021-12-10" +//#define STRING_DISTRIBUTION_DATE "2021-12-11" /** * 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 a0e443bff4..7db79cab2a 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 "2021-12-10" + #define STRING_DISTRIBUTION_DATE "2021-12-11" #endif /** From 5528927d7127a176d107e8c1adc4906214142adf Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Sun, 12 Dec 2021 11:06:45 +1300 Subject: [PATCH 215/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20MARLIN=5FF103Rx=20?= =?UTF-8?q?variant=20SCK=20/=20MOSI=20pins=20(#23282)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../share/PlatformIO/variants/MARLIN_F103Rx/variant.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F103Rx/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_F103Rx/variant.h index 41b194abe0..333bb02e5a 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_F103Rx/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_F103Rx/variant.h @@ -105,14 +105,14 @@ extern "C" { // SPI Definitions #if DEFAULT_SPI == 3 #define PIN_SPI_SS PA15 - #define PIN_SPI_MOSI PB3 + #define PIN_SPI_MOSI PB5 #define PIN_SPI_MISO PB4 - #define PIN_SPI_SCK PB5 + #define PIN_SPI_SCK PB3 #elif DEFAULT_SPI == 2 #define PIN_SPI_SS PB12 - #define PIN_SPI_MOSI PB13 + #define PIN_SPI_MOSI PB15 #define PIN_SPI_MISO PB14 - #define PIN_SPI_SCK PB15 + #define PIN_SPI_SCK PB13 #else #define PIN_SPI_SS PA4 #define PIN_SPI_MOSI PA7 From 60717927acc227e9ab71946b653d7e8eb8839fef Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 12 Dec 2021 01:06:58 +0000 Subject: [PATCH 216/532] [cron] Bump distribution date (2021-12-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 fdfa9e1747..4f1744ec36 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 "2021-12-11" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 7db79cab2a..18f2f79992 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 "2021-12-11" + #define STRING_DISTRIBUTION_DATE "2021-12-12" #endif /** From 1cff4fdb3670e0d04d865fe699763073149d4acd Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 12 Dec 2021 16:16:40 -0600 Subject: [PATCH 217/532] =?UTF-8?q?=F0=9F=A9=B9=20SD=20abort=20requires=20?= =?UTF-8?q?open=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See #22566 --- Marlin/src/sd/cardreader.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/sd/cardreader.h b/Marlin/src/sd/cardreader.h index 97003e1d13..53e1a7ffc3 100644 --- a/Marlin/src/sd/cardreader.h +++ b/Marlin/src/sd/cardreader.h @@ -163,7 +163,7 @@ public: static void endFilePrintNow(TERN_(SD_RESORT, const bool re_sort=false)); static void abortFilePrintNow(TERN_(SD_RESORT, const bool re_sort=false)); static void fileHasFinished(); - static inline void abortFilePrintSoon() { flag.abort_sd_printing = true; } + static inline void abortFilePrintSoon() { flag.abort_sd_printing = isFileOpen(); } static inline void pauseSDPrint() { flag.sdprinting = false; } static inline bool isPrinting() { return flag.sdprinting; } static inline bool isPaused() { return isFileOpen() && !isPrinting(); } From 82d569faa09f4e427679502b88f1faa08dade217 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 13 Dec 2021 01:04:05 +0000 Subject: [PATCH 218/532] [cron] Bump distribution date (2021-12-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 4f1744ec36..0c775449b6 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 "2021-12-12" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 18f2f79992..565faed73d 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 "2021-12-12" + #define STRING_DISTRIBUTION_DATE "2021-12-13" #endif /** From 9eb2a5f62c4c98a6f681735da66ca22ac08550e7 Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Tue, 14 Dec 2021 05:07:44 +0700 Subject: [PATCH 219/532] =?UTF-8?q?=F0=9F=A9=B9=20Use=20EXTRUDER=5FAUTO=5F?= =?UTF-8?q?FAN=5FSPEED=20for=20=5FAUTOFAN=5FSPEED=20(#23180)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/temperature.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index e068d4fca0..59d80e0ea8 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -938,7 +938,7 @@ int16_t Temperature::getHeaterPower(const heater_id_t heater_id) { #if BOTH(HAS_FANCHECK, HAS_PWMFANCHECK) #define _AUTOFAN_SPEED() fan_check.is_measuring() ? 255 : EXTRUDER_AUTO_FAN_SPEED #else - #define _AUTOFAN_SPEED() 255 + #define _AUTOFAN_SPEED() EXTRUDER_AUTO_FAN_SPEED #endif #define _AUTOFAN_CASE(N) case N: _UPDATE_AUTO_FAN(E##N, fan_on, _AUTOFAN_SPEED()); break From afce7d6dd50273e9ee397cbe42ad9c4986a55fe4 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 13 Dec 2021 16:15:46 -0600 Subject: [PATCH 220/532] =?UTF-8?q?=F0=9F=94=A7=20Fix=20unknown=20board=20?= =?UTF-8?q?test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/pins.h | 48 +++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 3ffb2d26b7..7759aeb7b7 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -737,30 +737,30 @@ // Obsolete or unknown board // - #define BOARD_MKS_13 -1000 - #define BOARD_TRIGORILLA -1001 - #define BOARD_RURAMPS4D -1002 - #define BOARD_FORMBOT_TREX2 -1003 - #define BOARD_BIQU_SKR_V1_1 -1004 - #define BOARD_STM32F1R -1005 - #define BOARD_STM32F103R -1006 - #define BOARD_ESP32 -1007 - #define BOARD_STEVAL -1008 - #define BOARD_BIGTREE_SKR_V1_1 -1009 - #define BOARD_BIGTREE_SKR_V1_3 -1010 - #define BOARD_BIGTREE_SKR_V1_4 -1011 - #define BOARD_BIGTREE_SKR_V1_4_TURBO -1012 - #define BOARD_BIGTREE_BTT002_V1_0 -1013 - #define BOARD_BIGTREE_SKR_PRO_V1_1 -1014 - #define BOARD_BIGTREE_SKR_MINI_V1_1 -1015 - #define BOARD_BIGTREE_SKR_MINI_E3 -1016 - #define BOARD_BIGTREE_SKR_E3_DIP -1017 - #define BOARD_RUMBA32 -1018 - #define BOARD_RUMBA32_AUS3D -1019 - #define BOARD_RAMPS_DAGOMA -1020 - #define BOARD_RAMPS_LONGER3D_LK4PRO -1021 - #define BOARD_BTT_SKR_V2_0 -1022 - #define BOARD_TH3D_EZBOARD_LITE_V2 -1023 + #define BOARD_MKS_13 99900 + #define BOARD_TRIGORILLA 99901 + #define BOARD_RURAMPS4D 99902 + #define BOARD_FORMBOT_TREX2 99903 + #define BOARD_BIQU_SKR_V1_1 99904 + #define BOARD_STM32F1R 99905 + #define BOARD_STM32F103R 99906 + #define BOARD_ESP32 99907 + #define BOARD_STEVAL 99908 + #define BOARD_BIGTREE_SKR_V1_1 99909 + #define BOARD_BIGTREE_SKR_V1_3 99910 + #define BOARD_BIGTREE_SKR_V1_4 99911 + #define BOARD_BIGTREE_SKR_V1_4_TURBO 99912 + #define BOARD_BIGTREE_BTT002_V1_0 99913 + #define BOARD_BIGTREE_SKR_PRO_V1_1 99914 + #define BOARD_BIGTREE_SKR_MINI_V1_1 99915 + #define BOARD_BIGTREE_SKR_MINI_E3 99916 + #define BOARD_BIGTREE_SKR_E3_DIP 99917 + #define BOARD_RUMBA32 99918 + #define BOARD_RUMBA32_AUS3D 99919 + #define BOARD_RAMPS_DAGOMA 99920 + #define BOARD_RAMPS_LONGER3D_LK4PRO 99921 + #define BOARD_BTT_SKR_V2_0 99922 + #define BOARD_TH3D_EZBOARD_LITE_V2 99923 #if MB(MKS_13) #error "BOARD_MKS_13 has been renamed BOARD_MKS_GEN_13. Please update your configuration." From 26689e1d85e5c210daa01548ae0b6c9118e35bd4 Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Tue, 14 Dec 2021 07:11:52 +0700 Subject: [PATCH 221/532] =?UTF-8?q?=F0=9F=A9=B9=20Init=20fan=20speed=20at?= =?UTF-8?q?=20boot=20(#23181)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/module/planner.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 0c62b11f5c..45ccdd1702 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1309,7 +1309,7 @@ void Planner::check_axes_activity() { #endif #if HAS_TAIL_FAN_SPEED - static uint8_t tail_fan_speed[FAN_COUNT]; + static uint8_t tail_fan_speed[FAN_COUNT] = ARRAY_N_1(FAN_COUNT, 255); bool fans_need_update = false; #endif From dff18e2230eb07cfe7e6b9d9d3d288d2211b089e Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Tue, 14 Dec 2021 13:13:34 +1300 Subject: [PATCH 222/532] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Clean=20up=20dupli?= =?UTF-8?q?cate=20defs=20(#23182)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp | 1 - Marlin/src/lcd/extui/ftdi_eve_touch_ui/language/language_en.h | 1 - 2 files changed, 2 deletions(-) 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 109814abf2..f2ee1e5639 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 @@ -71,7 +71,6 @@ namespace ExtUI { } void onStatusChanged(const char *lcd_msg) { StatusScreen::setStatusMessage(lcd_msg); } - void onStatusChanged(FSTR_P lcd_msg) { StatusScreen::setStatusMessage(lcd_msg); } void onPrintTimerStarted() { InterfaceSoundsScreen::playEventSound(InterfaceSoundsScreen::PRINTING_STARTED); 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 2e2597aec4..f79f788d8d 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 @@ -145,7 +145,6 @@ namespace Language_en { PROGMEM Language_Str MSG_LEVELING = u8"Leveling"; PROGMEM Language_Str MSG_AXIS_LEVELING = u8"Axis Leveling"; PROGMEM Language_Str MSG_PROBE_BED = u8"Probe Mesh"; - PROGMEM Language_Str MSG_MESH_VIEW = u8"View Mesh"; PROGMEM Language_Str MSG_PRINT_TEST = u8"Print Test (PLA)"; PROGMEM Language_Str MSG_MOVE_Z_TO_TOP = u8"Raise Z to Top"; From eef9e046904c382def0735c89dd3ea9961658554 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Tue, 14 Dec 2021 13:18:24 +1300 Subject: [PATCH 223/532] =?UTF-8?q?=E2=9C=A8=20M115=20flag=20EXTENDED=5FM2?= =?UTF-8?q?0=20(#22941)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/host/M115.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Marlin/src/gcode/host/M115.cpp b/Marlin/src/gcode/host/M115.cpp index 8a9c409764..9a90acbf0a 100644 --- a/Marlin/src/gcode/host/M115.cpp +++ b/Marlin/src/gcode/host/M115.cpp @@ -143,6 +143,9 @@ void GcodeSuite::M115() { // LONG_FILENAME_HOST_SUPPORT (M33) cap_line(F("LONG_FILENAME"), ENABLED(LONG_FILENAME_HOST_SUPPORT)); + // EXTENDED_M20 (M20 L) + cap_line(F("EXTENDED_M20"), ENABLED(LONG_FILENAME_HOST_SUPPORT)); + // THERMAL_PROTECTION cap_line(F("THERMAL_PROTECTION"), ENABLED(THERMALLY_SAFE)); From 8277f3ca0db3fcfcade46e202d5c32c4908546ba Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Tue, 14 Dec 2021 01:41:21 +0100 Subject: [PATCH 224/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20TFT=5FCOLOR=5FUI?= =?UTF-8?q?=20Release=20Media=20issue=20(#23123)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/sd/M21_M22.cpp | 2 -- Marlin/src/lcd/menu/menu_main.cpp | 9 ++++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Marlin/src/gcode/sd/M21_M22.cpp b/Marlin/src/gcode/sd/M21_M22.cpp index f42784d8eb..c7f41f9c81 100644 --- a/Marlin/src/gcode/sd/M21_M22.cpp +++ b/Marlin/src/gcode/sd/M21_M22.cpp @@ -26,7 +26,6 @@ #include "../gcode.h" #include "../../sd/cardreader.h" -#include "../../lcd/marlinui.h" /** * M21: Init SD Card @@ -38,7 +37,6 @@ void GcodeSuite::M21() { card.mount(); } */ void GcodeSuite::M22() { if (!IS_SD_PRINTING()) card.release(); - IF_ENABLED(TFT_COLOR_UI, ui.refresh(LCDVIEW_CALL_REDRAW_NEXT)); } #endif // SDSUPPORT diff --git a/Marlin/src/lcd/menu/menu_main.cpp b/Marlin/src/lcd/menu/menu_main.cpp index aca10edc6a..6e66188c02 100644 --- a/Marlin/src/lcd/menu/menu_main.cpp +++ b/Marlin/src/lcd/menu/menu_main.cpp @@ -249,7 +249,14 @@ void menu_main() { #if PIN_EXISTS(SD_DETECT) GCODES_ITEM(MSG_CHANGE_MEDIA, PSTR("M21")); // M21 Change Media #else // - or - - GCODES_ITEM(MSG_RELEASE_MEDIA, PSTR("M22")); // M22 Release Media + ACTION_ITEM(MSG_RELEASE_MEDIA, []{ // M22 Release Media + queue.inject(PSTR("M22")); + #if ENABLED(TFT_COLOR_UI) + // Menu display issue on item removal with multi language selection menu + if (encoderTopLine > 0) encoderTopLine--; + ui.refresh(LCDVIEW_CALL_REDRAW_NEXT); + #endif + }); #endif SUBMENU(MSG_MEDIA_MENU, MEDIA_MENU_GATEWAY); // Media Menu (or Password First) } From 1dd9adbfe40f0423181773a3370fbbab27d0a990 Mon Sep 17 00:00:00 2001 From: Giuliano Zaro <3684609+GMagician@users.noreply.github.com> Date: Tue, 14 Dec 2021 01:47:57 +0100 Subject: [PATCH 225/532] =?UTF-8?q?=F0=9F=9A=B8=20Use=20M600=20for=20disab?= =?UTF-8?q?led=20MMU=20(#21865)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/MarlinCore.cpp | 5 ++- Marlin/src/feature/pause.h | 15 +++------ Marlin/src/gcode/feature/pause/M600.cpp | 45 ++++++++++++++----------- 3 files changed, 34 insertions(+), 31 deletions(-) diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 941903149f..5132d07e87 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -784,7 +784,10 @@ void idle(bool no_stepper_sleep/*=false*/) { (void)check_tool_sensor_stats(active_extruder, true); // Handle filament runout sensors - TERN_(HAS_FILAMENT_SENSOR, runout.run()); + #if HAS_FILAMENT_SENSOR + if (TERN1(HAS_PRUSA_MMU2, !mmu2.enabled())) + runout.run(); + #endif // Run HAL idle tasks TERN_(HAL_IDLETASK, HAL_idletask()); diff --git a/Marlin/src/feature/pause.h b/Marlin/src/feature/pause.h index d2c45e44a5..134b1d1b32 100644 --- a/Marlin/src/feature/pause.h +++ b/Marlin/src/feature/pause.h @@ -73,17 +73,10 @@ extern fil_change_settings_t fc_settings[EXTRUDERS]; extern uint8_t did_pause_print; -#if ENABLED(DUAL_X_CARRIAGE) - #define DXC_PARAMS , const int8_t DXC_ext=-1 - #define DXC_ARGS , const int8_t DXC_ext - #define DXC_PASS , DXC_ext - #define DXC_SAY , " dxc:", int(DXC_ext) -#else - #define DXC_PARAMS - #define DXC_ARGS - #define DXC_PASS - #define DXC_SAY -#endif +#define DXC_PARAMS OPTARG(DUAL_X_CARRIAGE, const int8_t DXC_ext=-1) +#define DXC_ARGS OPTARG(DUAL_X_CARRIAGE, const int8_t DXC_ext) +#define DXC_PASS OPTARG(DUAL_X_CARRIAGE, DXC_ext) +#define DXC_SAY OPTARG(DUAL_X_CARRIAGE, " dxc:", int(DXC_ext)) // Pause the print. If unload_length is set, do a Filament Unload bool pause_print( diff --git a/Marlin/src/gcode/feature/pause/M600.cpp b/Marlin/src/gcode/feature/pause/M600.cpp index a95e3e02b4..665967ca56 100644 --- a/Marlin/src/gcode/feature/pause/M600.cpp +++ b/Marlin/src/gcode/feature/pause/M600.cpp @@ -34,8 +34,11 @@ #include "../../../module/tool_change.h" #endif -#if ENABLED(MMU2_MENUS) - #include "../../../lcd/menu/menu_mmu2.h" +#if ENABLED(HAS_PRUSA_MMU2) + #include "../../../feature/mmu/mmu2.h" + #if ENABLED(MMU2_MENUS) + #include "../../../lcd/menu/menu_mmu2.h" + #endif #endif #if ENABLED(MIXING_EXTRUDER) @@ -92,10 +95,11 @@ void GcodeSuite::M600() { } #endif + const bool standardM600 = TERN1(MMU2_MENUS, !mmu2.enabled()); + // Show initial "wait for start" message - #if DISABLED(MMU2_MENUS) + if (standardM600) ui.pause_show_message(PAUSE_MESSAGE_CHANGING, PAUSE_MODE_PAUSE_PRINT, target_extruder); - #endif #if ENABLED(HOME_BEFORE_FILAMENT_CHANGE) // If needed, home before parking for filament change @@ -126,17 +130,11 @@ void GcodeSuite::M600() { #endif #if ENABLED(MMU2_MENUS) - // For MMU2 reset retract and load/unload values so they don't mess with MMU filament handling - constexpr float unload_length = 0.5f, - slow_load_length = 0.0f, - fast_load_length = 0.0f; + // For MMU2, when enabled, reset retract value so it doesn't mess with MMU filament handling + const float unload_length = standardM600 ? -ABS(parser.axisunitsval('U', E_AXIS, fc_settings[active_extruder].unload_length)) : 0.5f; #else // Unload filament const float unload_length = -ABS(parser.axisunitsval('U', E_AXIS, fc_settings[active_extruder].unload_length)); - // Slow load filament - constexpr float slow_load_length = FILAMENT_CHANGE_SLOW_LOAD_LENGTH; - // Fast load filament - const float fast_load_length = ABS(parser.axisunitsval('L', E_AXIS, fc_settings[active_extruder].load_length)); #endif const int beep_count = parser.intval('B', -1 @@ -146,14 +144,23 @@ void GcodeSuite::M600() { ); if (pause_print(retract, park_point, true, unload_length DXC_PASS)) { - #if ENABLED(MMU2_MENUS) - mmu2_M600(); - resume_print(slow_load_length, fast_load_length, 0, beep_count DXC_PASS); - #else + if (standardM600) { wait_for_confirmation(true, beep_count DXC_PASS); - resume_print(slow_load_length, fast_load_length, ADVANCED_PAUSE_PURGE_LENGTH, - beep_count, (parser.seenval('R') ? parser.value_celsius() : 0) DXC_PASS); - #endif + resume_print( + FILAMENT_CHANGE_SLOW_LOAD_LENGTH, + ABS(parser.axisunitsval('L', E_AXIS, fc_settings[active_extruder].load_length)), + ADVANCED_PAUSE_PURGE_LENGTH, + beep_count, + parser.celsiusval('R') + DXC_PASS + ); + } + else { + #if ENABLED(MMU2_MENUS) + mmu2_M600(); + resume_print(0, 0, 0, beep_count, 0 DXC_PASS); + #endif + } } #if HAS_MULTI_EXTRUDER From bf21bc9ee53aa094a55dc76f5023b9988f31b166 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 14 Dec 2021 01:25:36 +0000 Subject: [PATCH 226/532] [cron] Bump distribution date (2021-12-14) --- 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 0c775449b6..6133fd7b08 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 "2021-12-13" +//#define STRING_DISTRIBUTION_DATE "2021-12-14" /** * 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 565faed73d..2fab27fac8 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 "2021-12-13" + #define STRING_DISTRIBUTION_DATE "2021-12-14" #endif /** From b464a4b1a4ea9cca914126c5f50c3e7384108a5e Mon Sep 17 00:00:00 2001 From: X-Ryl669 Date: Tue, 14 Dec 2021 07:22:06 +0100 Subject: [PATCH 227/532] =?UTF-8?q?=E2=9C=A8=20Configurations=20embed=20an?= =?UTF-8?q?d=20retrieve=20(#21321)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + Marlin/Configuration_adv.h | 8 + Marlin/src/gcode/eeprom/M500-M504.cpp | 18 ++ Marlin/src/gcode/host/M115.cpp | 28 ++- Marlin/src/inc/Conditionals_adv.h | 6 + Marlin/src/inc/Warnings.cpp | 4 + buildroot/bin/restore_configs | 2 +- .../scripts/SAMD51_grandcentral_m4.py | 1 - .../share/PlatformIO/scripts/__init__.py | 0 .../PlatformIO/scripts/common-dependencies.py | 87 ++------- .../share/PlatformIO/scripts/mc-apply.py | 69 +++++++ .../share/PlatformIO/scripts/preprocessor.py | 99 ++++++++++ .../share/PlatformIO/scripts/signature.py | 176 ++++++++++++++++++ docs/ConfigEmbedding.md | 19 ++ 14 files changed, 435 insertions(+), 85 deletions(-) create mode 100644 buildroot/share/PlatformIO/scripts/__init__.py create mode 100755 buildroot/share/PlatformIO/scripts/mc-apply.py create mode 100644 buildroot/share/PlatformIO/scripts/preprocessor.py create mode 100644 buildroot/share/PlatformIO/scripts/signature.py create mode 100644 docs/ConfigEmbedding.md diff --git a/.gitignore b/.gitignore index fabe544563..2b40149b5f 100755 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,9 @@ # Generated files _Version.h bdf2u8g +marlin_config.json +mczip.h +*.gen # # OS diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 0d848f260b..eea15c9651 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1593,6 +1593,14 @@ #define SD_FIRMWARE_UPDATE_INACTIVE_VALUE 0xFF #endif + /** + * Enable this option if you have more than ~3K of unused flash space. + * Marlin will embed all settings in the firmware binary as compressed data. + * Use 'M503 C' to write the settings out to the SD Card as 'mc.zip'. + * See docs/ConfigEmbedding.md for details on how to use 'mc-apply.py'. + */ + //#define CONFIGURATION_EMBEDDING + // Add an optimized binary file transfer mode, initiated with 'M28 B1' //#define BINARY_FILE_TRANSFER diff --git a/Marlin/src/gcode/eeprom/M500-M504.cpp b/Marlin/src/gcode/eeprom/M500-M504.cpp index a06e98ad1e..a1f295ebde 100644 --- a/Marlin/src/gcode/eeprom/M500-M504.cpp +++ b/Marlin/src/gcode/eeprom/M500-M504.cpp @@ -25,6 +25,11 @@ #include "../../core/serial.h" #include "../../inc/MarlinConfig.h" +#if ENABLED(CONFIGURATION_EMBEDDING) + #include "../../sd/SdBaseFile.h" + #include "../../mczip.h" +#endif + /** * M500: Store settings in EEPROM */ @@ -50,9 +55,22 @@ void GcodeSuite::M502() { /** * M503: print settings currently in memory + * + * With CONFIGURATION_EMBEDDING: + * C : Save the full Marlin configuration to SD Card as "mc.zip" */ void GcodeSuite::M503() { (void)settings.report(!parser.boolval('S', true)); + + #if ENABLED(CONFIGURATION_EMBEDDING) + if (parser.seen_test('C')) { + SdBaseFile file; + const uint16_t size = sizeof(mc_zip); + // Need to create the config size on the SD card + if (file.open("mc.zip", O_WRITE|O_CREAT) && file.write(pgm_read_ptr(mc_zip), size) != -1 && file.close()) + SERIAL_ECHO_MSG("Configuration saved as 'mc.zip'"); + } + #endif } #endif // !DISABLE_M503 diff --git a/Marlin/src/gcode/host/M115.cpp b/Marlin/src/gcode/host/M115.cpp index 9a90acbf0a..08943ed5f2 100644 --- a/Marlin/src/gcode/host/M115.cpp +++ b/Marlin/src/gcode/host/M115.cpp @@ -24,7 +24,6 @@ #include "../../inc/MarlinConfig.h" #include "../queue.h" // for getting the command port - #if ENABLED(M115_GEOMETRY_REPORT) #include "../../module/motion.h" #endif @@ -33,13 +32,25 @@ #include "../../feature/caselight.h" #endif +//#define MINIMAL_CAP_LINES // Don't even mention the disabled capabilities + #if ENABLED(EXTENDED_CAPABILITIES_REPORT) - static void cap_line(FSTR_P const name, bool ena=false) { - SERIAL_ECHOPGM("Cap:"); - SERIAL_ECHOF(name); - SERIAL_CHAR(':', '0' + ena); - SERIAL_EOL(); - } + #if ENABLED(MINIMAL_CAP_LINES) + #define cap_line(S,C) if (C) _cap_line(S) + static void _cap_line(FSTR_P const name) { + SERIAL_ECHOPGM("Cap:"); + SERIAL_ECHOF(name); + SERIAL_ECHOLNPGM(":1"); + } + #else + #define cap_line(V...) _cap_line(V) + static void _cap_line(FSTR_P const name, bool ena=false) { + SERIAL_ECHOPGM("Cap:"); + SERIAL_ECHOF(name); + SERIAL_CHAR(':', '0' + ena); + SERIAL_EOL(); + } + #endif #endif /** @@ -167,6 +178,9 @@ void GcodeSuite::M115() { // MEATPACK Compression cap_line(F("MEATPACK"), SERIAL_IMPL.has_feature(port, SerialFeature::MeatPack)); + // CONFIG_EXPORT + cap_line(F("CONFIG_EXPORT"), ENABLED(CONFIG_EMBED_AND_SAVE_TO_SD)); + // Machine Geometry #if ENABLED(M115_GEOMETRY_REPORT) const xyz_pos_t bmin = { 0, 0, 0 }, diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index 22f1591d68..9864b8715c 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -1004,3 +1004,9 @@ #if EITHER(MEATPACK_ON_SERIAL_PORT_1, MEATPACK_ON_SERIAL_PORT_2) #define HAS_MEATPACK 1 #endif + +// AVR are (usually) too limited in resources to store the configuration into the binary +#if !defined(FORCE_CONFIG_EMBED) && (defined(__AVR__) || DISABLED(SDSUPPORT) || EITHER(SDCARD_READONLY, DISABLE_M503)) + #undef CONFIGURATION_EMBEDDING + #define CANNOT_EMBED_CONFIGURATION defined(__AVR__) +#endif diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index b7eef9c49f..c2fe42ae82 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -549,3 +549,7 @@ #elif !USE_SENSORLESS && ENABLED(USES_DIAG_PINS) #warning "Driver DIAG pins must be physically removed unless SENSORLESS_HOMING is enabled. (See https://bit.ly/2ZPRlt0)" #endif + +#if CANNOT_EMBED_CONFIGURATION + #warning "Disabled CONFIGURATION_EMBEDDING because the target usually has less flash storage. Define FORCE_CONFIG_EMBED to override." +#endif diff --git a/buildroot/bin/restore_configs b/buildroot/bin/restore_configs index b2d0ea19ac..61aa3f9ee1 100755 --- a/buildroot/bin/restore_configs +++ b/buildroot/bin/restore_configs @@ -2,4 +2,4 @@ git checkout Marlin/Configuration*.h 2>/dev/null git checkout Marlin/src/pins/ramps/pins_RAMPS.h 2>/dev/null -rm -f Marlin/_Bootscreen.h Marlin/_Statusscreen.h +rm -f Marlin/_Bootscreen.h Marlin/_Statusscreen.h marlin_config.json .pio/build/mc.zip diff --git a/buildroot/share/PlatformIO/scripts/SAMD51_grandcentral_m4.py b/buildroot/share/PlatformIO/scripts/SAMD51_grandcentral_m4.py index be2c87266a..e7442f2485 100644 --- a/buildroot/share/PlatformIO/scripts/SAMD51_grandcentral_m4.py +++ b/buildroot/share/PlatformIO/scripts/SAMD51_grandcentral_m4.py @@ -6,7 +6,6 @@ import pioutil if pioutil.is_pio_build(): from os.path import join, isfile import shutil - from pprint import pprint Import("env") diff --git a/buildroot/share/PlatformIO/scripts/__init__.py b/buildroot/share/PlatformIO/scripts/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/buildroot/share/PlatformIO/scripts/common-dependencies.py b/buildroot/share/PlatformIO/scripts/common-dependencies.py index 004f78f19b..24e780d9b6 100644 --- a/buildroot/share/PlatformIO/scripts/common-dependencies.py +++ b/buildroot/share/PlatformIO/scripts/common-dependencies.py @@ -192,63 +192,6 @@ if pioutil.is_pio_build(): lib_ignore = env.GetProjectOption('lib_ignore') + [feat['lib_ignore']] set_env_field('lib_ignore', lib_ignore) - # - # Find a compiler, considering the OS - # - ENV_BUILD_PATH = os.path.join(env.Dictionary('PROJECT_BUILD_DIR'), env['PIOENV']) - GCC_PATH_CACHE = os.path.join(ENV_BUILD_PATH, ".gcc_path") - def search_compiler(): - try: - filepath = env.GetProjectOption('custom_gcc') - blab("Getting compiler from env") - return filepath - except: - pass - - if os.path.exists(GCC_PATH_CACHE): - with open(GCC_PATH_CACHE, 'r') as f: - return f.read() - - # Find the current platform compiler by searching the $PATH - # which will be in a platformio toolchain bin folder - path_regex = re.escape(env['PROJECT_PACKAGES_DIR']) - - # See if the environment provides a default compiler - try: - gcc = env.GetProjectOption('custom_deps_gcc') - except: - gcc = "g++" - - if env['PLATFORM'] == 'win32': - path_separator = ';' - path_regex += r'.*\\bin' - gcc += ".exe" - else: - path_separator = ':' - path_regex += r'/.+/bin' - - # Search for the compiler - for pathdir in env['ENV']['PATH'].split(path_separator): - if not re.search(path_regex, pathdir, re.IGNORECASE): - continue - for filepath in os.listdir(pathdir): - if not filepath.endswith(gcc): - continue - # Use entire path to not rely on env PATH - filepath = os.path.sep.join([pathdir, filepath]) - # Cache the g++ path to no search always - if os.path.exists(ENV_BUILD_PATH): - with open(GCC_PATH_CACHE, 'w+') as f: - f.write(filepath) - - return filepath - - filepath = env.get('CXX') - if filepath == 'CC': - filepath = gcc - blab("Couldn't find a compiler! Fallback to %s" % filepath) - return filepath - # # Use the compiler to get a list of all enabled features # @@ -257,25 +200,8 @@ if pioutil.is_pio_build(): return # Process defines - build_flags = env.get('BUILD_FLAGS') - build_flags = env.ParseFlagsExtended(build_flags) - - cxx = search_compiler() - cmd = ['"' + cxx + '"'] - - # Build flags from board.json - #if 'BOARD' in env: - # cmd += [env.BoardConfig().get("build.extra_flags")] - for s in build_flags['CPPDEFINES']: - if isinstance(s, tuple): - cmd += ['-D' + s[0] + '=' + str(s[1])] - else: - cmd += ['-D' + s] - - cmd += ['-D__MARLIN_DEPS__ -w -dM -E -x c++ buildroot/share/PlatformIO/scripts/common-dependencies.h'] - cmd = ' '.join(cmd) - blab(cmd, 4) - define_list = subprocess.check_output(cmd, shell=True).splitlines() + from preprocessor import run_preprocessor + define_list = run_preprocessor(env) marlin_features = {} for define in define_list: feature = define[8:].strip().decode().split(' ') @@ -310,9 +236,18 @@ if pioutil.is_pio_build(): except: pass + # # Add a method for other PIO scripts to query enabled features + # env.AddMethod(MarlinFeatureIsEnabled) + # # Add dependencies for enabled Marlin features + # apply_features_config() force_ignore_unused_libs() + + #print(env.Dump()) + + from signature import compute_build_signature + compute_build_signature(env) diff --git a/buildroot/share/PlatformIO/scripts/mc-apply.py b/buildroot/share/PlatformIO/scripts/mc-apply.py new file mode 100755 index 0000000000..f71d192679 --- /dev/null +++ b/buildroot/share/PlatformIO/scripts/mc-apply.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python +# +# Create a Configuration from marlin_config.json +# +import json +import sys +import shutil +import re + +opt_output = '--opt' in sys.argv +output_suffix = '.sh' if opt_output else '' if '--bare-output' in sys.argv else '.gen' + +try: + with open('marlin_config.json', 'r') as infile: + conf = json.load(infile) + for key in conf: + # We don't care about the hash when restoring here + if key == '__INITIAL_HASH': + continue + if key == 'VERSION': + for k, v in sorted(conf[key].items()): + print(k + ': ' + v) + continue + # The key is the file name, so let's build it now + outfile = open('Marlin/' + key + output_suffix, 'w') + for k, v in sorted(conf[key].items()): + # Make define line now + if opt_output: + if v != '': + if '"' in v: + v = "'%s'" % v + elif ' ' in v: + v = '"%s"' % v + define = 'opt_set ' + k + ' ' + v + '\n' + else: + define = 'opt_enable ' + k + '\n' + else: + define = '#define ' + k + ' ' + v + '\n' + outfile.write(define) + outfile.close() + + # Try to apply changes to the actual configuration file (in order to keep useful comments) + if output_suffix != '': + # Move the existing configuration so it doesn't interfere + shutil.move('Marlin/' + key, 'Marlin/' + key + '.orig') + infile_lines = open('Marlin/' + key + '.orig', 'r').read().split('\n') + outfile = open('Marlin/' + key, 'w') + for line in infile_lines: + sline = line.strip(" \t\n\r") + if sline[:7] == "#define": + # Extract the key here (we don't care about the value) + kv = sline[8:].strip().split(' ') + if kv[0] in conf[key]: + outfile.write('#define ' + kv[0] + ' ' + conf[key][kv[0]] + '\n') + # Remove the key from the dict, so we can still write all missing keys at the end of the file + del conf[key][kv[0]] + else: + outfile.write(line + '\n') + else: + outfile.write(line + '\n') + # Process any remaining defines here + for k, v in sorted(conf[key].items()): + define = '#define ' + k + ' ' + v + '\n' + outfile.write(define) + outfile.close() + + print('Output configuration written to: ' + 'Marlin/' + key + output_suffix) +except: + print('No marlin_config.json found.') diff --git a/buildroot/share/PlatformIO/scripts/preprocessor.py b/buildroot/share/PlatformIO/scripts/preprocessor.py new file mode 100644 index 0000000000..6f4ed900ca --- /dev/null +++ b/buildroot/share/PlatformIO/scripts/preprocessor.py @@ -0,0 +1,99 @@ +# +# preprocessor.py +# +import subprocess,os,re + +verbose = 0 + +def blab(str): + if verbose: + print(str) + +################################################################################ +# +# Invoke GCC to run the preprocessor and extract enabled features +# +preprocessor_cache = {} +def run_preprocessor(env, fn=None): + filename = fn or 'buildroot/share/PlatformIO/scripts/common-dependencies.h' + if filename in preprocessor_cache: + return preprocessor_cache[filename] + + # Process defines + build_flags = env.get('BUILD_FLAGS') + build_flags = env.ParseFlagsExtended(build_flags) + + cxx = search_compiler(env) + cmd = ['"' + cxx + '"'] + + # Build flags from board.json + #if 'BOARD' in env: + # cmd += [env.BoardConfig().get("build.extra_flags")] + for s in build_flags['CPPDEFINES']: + if isinstance(s, tuple): + cmd += ['-D' + s[0] + '=' + str(s[1])] + else: + cmd += ['-D' + s] + + cmd += ['-D__MARLIN_DEPS__ -w -dM -E -x c++'] + depcmd = cmd + [ filename ] + cmd = ' '.join(depcmd) + blab(cmd) + define_list = subprocess.check_output(cmd, shell=True).splitlines() + preprocessor_cache[filename] = define_list + return define_list + + +################################################################################ +# +# Find a compiler, considering the OS +# +def search_compiler(env): + + ENV_BUILD_PATH = os.path.join(env.Dictionary('PROJECT_BUILD_DIR'), env['PIOENV']) + GCC_PATH_CACHE = os.path.join(ENV_BUILD_PATH, ".gcc_path") + + try: + filepath = env.GetProjectOption('custom_gcc') + blab("Getting compiler from env") + return filepath + except: + pass + + if os.path.exists(GCC_PATH_CACHE): + blab("Getting g++ path from cache") + with open(GCC_PATH_CACHE, 'r') as f: + return f.read() + + # Find the current platform compiler by searching the $PATH + # which will be in a platformio toolchain bin folder + path_regex = re.escape(env['PROJECT_PACKAGES_DIR']) + gcc = "g++" + if env['PLATFORM'] == 'win32': + path_separator = ';' + path_regex += r'.*\\bin' + gcc += ".exe" + else: + path_separator = ':' + path_regex += r'/.+/bin' + + # Search for the compiler + for pathdir in env['ENV']['PATH'].split(path_separator): + if not re.search(path_regex, pathdir, re.IGNORECASE): + continue + for filepath in os.listdir(pathdir): + if not filepath.endswith(gcc): + continue + # Use entire path to not rely on env PATH + filepath = os.path.sep.join([pathdir, filepath]) + # Cache the g++ path to no search always + if os.path.exists(ENV_BUILD_PATH): + blab("Caching g++ for current env") + with open(GCC_PATH_CACHE, 'w+') as f: + f.write(filepath) + + return filepath + + filepath = env.get('CXX') + blab("Couldn't find a compiler! Fallback to %s" % filepath) + return filepath diff --git a/buildroot/share/PlatformIO/scripts/signature.py b/buildroot/share/PlatformIO/scripts/signature.py new file mode 100644 index 0000000000..53cf347eaa --- /dev/null +++ b/buildroot/share/PlatformIO/scripts/signature.py @@ -0,0 +1,176 @@ +# +# signature.py +# +import os,subprocess,re,json,hashlib + +# +# The dumbest preprocessor in the world +# Extract macro name from an header file and store them in an array +# No processing is done here, so they are raw values here and it does not match what actually enabled +# in the file (since you can have #if SOMETHING_UNDEFINED / #define BOB / #endif) +# But it's useful to filter the useful macro spit out by the preprocessor from noise from the system +# headers. +# +def extract_defines(filepath): + f = open(filepath).read().split("\n") + a = [] + for line in f: + sline = line.strip(" \t\n\r") + if sline[:7] == "#define": + # Extract the key here (we don't care about the value) + kv = sline[8:].strip().split(' ') + a.append(kv[0]) + return a + +# Compute the SHA256 hash of a file +def get_file_sha256sum(filepath): + sha256_hash = hashlib.sha256() + with open(filepath,"rb") as f: + # Read and update hash string value in blocks of 4K + for byte_block in iter(lambda: f.read(4096),b""): + sha256_hash.update(byte_block) + return sha256_hash.hexdigest() + +# +# Compress a JSON file into a zip file +# +import zipfile +def compress_file(filepath, outputbase): + with zipfile.ZipFile(outputbase + '.zip', 'w', compression=zipfile.ZIP_BZIP2, compresslevel=9) as zipf: + zipf.write(filepath, compress_type=zipfile.ZIP_BZIP2, compresslevel=9) + +# +# Compute the build signature. The idea is to extract all defines in the configuration headers +# to build a unique reversible signature from this build so it can be included in the binary +# We can reverse the signature to get a 1:1 equivalent configuration file +# +def compute_build_signature(env): + if 'BUILD_SIGNATURE' in env: + return + + # Definitions from these files will be kept + files_to_keep = [ 'Marlin/Configuration.h', 'Marlin/Configuration_adv.h' ] + + build_dir=os.path.join(env['PROJECT_BUILD_DIR'], env['PIOENV']) + + # Check if we can skip processing + hashes = '' + for header in files_to_keep: + hashes += get_file_sha256sum(header)[0:10] + + marlin_json = os.path.join(build_dir, 'marlin_config.json') + marlin_zip = os.path.join(build_dir, 'mc') + + # Read existing config file + try: + with open(marlin_json, 'r') as infile: + conf = json.load(infile) + if conf['__INITIAL_HASH'] == hashes: + # Same configuration, skip recomputing the building signature + compress_file(marlin_json, marlin_zip) + return + except: + pass + + # Get enabled config options based on preprocessor + from preprocessor import run_preprocessor + complete_cfg = run_preprocessor(env) + + # Dumb #define extraction from the configuration files + real_defines = {} + all_defines = [] + for header in files_to_keep: + defines = extract_defines(header) + # To filter only the define we want + all_defines = all_defines + defines + # To remember from which file it cames from + real_defines[header.split('/')[-1]] = defines + + r = re.compile(r"\(+(\s*-*\s*_.*)\)+") + + # First step is to collect all valid macros + defines = {} + for line in complete_cfg: + + # Split the define from the value + key_val = line[8:].strip().decode().split(' ') + key, value = key_val[0], ' '.join(key_val[1:]) + + # Ignore values starting with two underscore, since it's low level + if len(key) > 2 and key[0:2] == "__" : + continue + # Ignore values containing a parenthesis (likely a function macro) + if '(' in key and ')' in key: + continue + + # Then filter dumb values + if r.match(value): + continue + + defines[key] = value if len(value) else "" + + if not 'CONFIGURATION_EMBEDDING' in defines: + return + + # Second step is to filter useless macro + resolved_defines = {} + for key in defines: + # Remove all boards now + if key[0:6] == "BOARD_" and key != "BOARD_INFO_NAME": + continue + # Remove all keys ending by "_NAME" as it does not make a difference to the configuration + if key[-5:] == "_NAME" and key != "CUSTOM_MACHINE_NAME": + continue + # Remove all keys ending by "_T_DECLARED" as it's a copy of not important system stuff + if key[-11:] == "_T_DECLARED": + continue + # Remove keys that are not in the #define list in the Configuration list + if not (key in all_defines) and key != "DETAILED_BUILD_VERSION" and key != "STRING_DISTRIBUTION_DATE": + continue + + # Don't be that smart guy here + resolved_defines[key] = defines[key] + + # Generate a build signature now + # We are making an object that's a bit more complex than a basic dictionary here + data = {} + data['__INITIAL_HASH'] = hashes + # First create a key for each header here + for header in real_defines: + data[header] = {} + + # Then populate the object where each key is going to (that's a O(N^2) algorithm here...) + for key in resolved_defines: + for header in real_defines: + if key in real_defines[header]: + data[header][key] = resolved_defines[key] + + # Append the source code version and date + data['VERSION'] = {} + data['VERSION']['DETAILED_BUILD_VERSION'] = resolved_defines['DETAILED_BUILD_VERSION'] + data['VERSION']['STRING_DISTRIBUTION_DATE'] = resolved_defines['STRING_DISTRIBUTION_DATE'] + try: + curver = subprocess.check_output(["git", "describe", "--match=NeVeRmAtCh", "--always"]).strip() + data['VERSION']['GIT_REF'] = curver.decode() + except: + pass + + with open(marlin_json, 'w') as outfile: + json.dump(data, outfile, separators=(',', ':')) + + # Compress the JSON file as much as we can + compress_file(marlin_json, marlin_zip) + + # Generate a C source file for storing this array + with open('Marlin/src/mczip.h','wb') as result_file: + result_file.write(b'#warning "Generated file \'mc.zip\' is embedded"\n') + result_file.write(b'const unsigned char mc_zip[] PROGMEM = {\n ') + count = 0 + for b in open(os.path.join(build_dir, 'mc.zip'), 'rb').read(): + result_file.write(b' 0x%02X,' % b) + count += 1 + if (count % 16 == 0): + result_file.write(b'\n ') + if (count % 16): + result_file.write(b'\n') + result_file.write(b'};\n') diff --git a/docs/ConfigEmbedding.md b/docs/ConfigEmbedding.md new file mode 100644 index 0000000000..38db06b3df --- /dev/null +++ b/docs/ConfigEmbedding.md @@ -0,0 +1,19 @@ +# Configuration Embedding + +Starting with version 2.0.9.3, Marlin automatically extracts the configuration used to generate the firmware and stores it in the firmware binary. This is enabled by defining `CONFIGURATION_EMBEDDING` in `Configuration_adv.h`. + +## How it's done +To create the embedded configuration, we do a compiler pass to process the Configuration files and extract all active options. The active options are parsed into key/value pairs, serialized to JSON format, and stored in a file called `marlin_config.json`, which also includes specific build information (like the git revision, the build date, and some version information. The JSON file is then compressed in a ZIP archive called `.pio/build/mc.zip` which is converted into a C array and stored in a C++ file called `mc.h` which is included in the build. + +## Extracting configurations from a Marlin binary +To get the configuration out of a binary firmware, you'll need a non-write-protected SD card inserted into the printer while running the firmware. +Send the command `M503 C` to write the file `mc.zip` to the SD card. Copy the file to your computer, ideally in the same folder as the Marlin repository. + +Run the following commands to extract and apply the configuration: +``` +$ git checkout -f +$ unzip mc.zip +$ python buildroot/share/PlatformIO/scripts/mc-apply.py +``` + +This will attempt to update the configuration files to match the settings used for the original build. It will also dump the git reference used to build the code (which may be accessible if the firmware was built from the main repository. As a fallback it also includes the `STRING_DISTRIBUTION_DATE` which is unlikely to be modified in a fork). From a4678d9e2798f203054ffa7c796f7b5b063c36d4 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Tue, 14 Dec 2021 19:25:28 +1300 Subject: [PATCH 228/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20LCD=5FBED=5FLEVELI?= =?UTF-8?q?NG=20compile=20(#23298)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/menu/menu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp index c566e9b2a6..9337cf4774 100644 --- a/Marlin/src/lcd/menu/menu.cpp +++ b/Marlin/src/lcd/menu/menu.cpp @@ -345,7 +345,7 @@ void _lcd_draw_homing() { } } -#if HAS_LEVELING && DISABLED(SLIM_LCD_MENUS) +#if ENABLED(LCD_BED_LEVELING) || (HAS_LEVELING && DISABLED(SLIM_LCD_MENUS)) void _lcd_toggle_bed_leveling() { set_bed_leveling_enabled(!planner.leveling_active); } #endif From e57b7d043cfe8b25aca5e67bcb15b19515bba7d8 Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Wed, 15 Dec 2021 07:51:19 +0700 Subject: [PATCH 229/532] =?UTF-8?q?=F0=9F=9A=B8=20Change=20"SD"=20to=20"Me?= =?UTF-8?q?dia"=20or=20"SD/FD"=20(#23297)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extui/ftdi_eve_touch_ui/pin_mappings.h | 4 ++-- Marlin/src/lcd/language/language_de.h | 2 +- Marlin/src/lcd/language/language_el.h | 2 +- Marlin/src/lcd/language/language_en.h | 4 ++-- Marlin/src/lcd/language/language_es.h | 22 +++++++++---------- Marlin/src/lcd/language/language_gl.h | 12 +++++----- Marlin/src/lcd/language/language_hu.h | 2 +- Marlin/src/lcd/language/language_it.h | 2 +- Marlin/src/lcd/language/language_pl.h | 2 +- Marlin/src/lcd/language/language_ru.h | 4 ++-- Marlin/src/lcd/language/language_sk.h | 2 +- Marlin/src/lcd/language/language_sv.h | 2 +- Marlin/src/lcd/language/language_uk.h | 4 ++-- Marlin/src/sd/cardreader.cpp | 2 +- 14 files changed, 33 insertions(+), 33 deletions(-) diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/pin_mappings.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/pin_mappings.h index 7c0bdd88e9..34026f4a26 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/pin_mappings.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/pin_mappings.h @@ -123,12 +123,12 @@ * 10 5V 5V 5V --> KILL [3] * * [1] This configuration allows daisy-chaining of the - * display and SD/USB on EXP2, except for [2] + * display and SD/FD on EXP2, except for [2] * * [2] The Ultimachine Einsy boards have a level shifter * on MISO enabled by SD_CSEL chip select, hence it * is not possible to run both the display and the - * SD/USB on EXP2. + * SD/FD on EXP2. * * [3] Archim Rambo provides 5V on this pin. On any other * board, divert this wire from the ribbon cable and diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h index 613880caa6..00f759a83a 100644 --- a/Marlin/src/lcd/language/language_de.h +++ b/Marlin/src/lcd/language/language_de.h @@ -42,7 +42,7 @@ namespace Language_de { LSTR MSG_MEDIA_INSERTED = _UxGT("Medium erkannt"); LSTR MSG_MEDIA_REMOVED = _UxGT("Medium entfernt"); LSTR MSG_MEDIA_WAITING = _UxGT("Warten auf Medium"); - LSTR MSG_SD_INIT_FAIL = _UxGT("SD Init fehlgesch."); + LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Medium Init fehlgesch."); LSTR MSG_MEDIA_READ_ERROR = _UxGT("Medium Lesefehler"); LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB Gerät entfernt"); LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB Start fehlge."); diff --git a/Marlin/src/lcd/language/language_el.h b/Marlin/src/lcd/language/language_el.h index 3d1a79ea92..567706180c 100644 --- a/Marlin/src/lcd/language/language_el.h +++ b/Marlin/src/lcd/language/language_el.h @@ -50,7 +50,7 @@ namespace Language_el { LSTR MSG_MEDIA_READ_ERROR = MEDIA_TYPE_EN _UxGT(" σφάλμα ανάγνωσης"); LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB αφαιρέθη"); LSTR MSG_MEDIA_USB_FAILED = _UxGT("Αποτυχία εκκίνησης USB"); - LSTR MSG_SD_INIT_FAIL = _UxGT("Αποτυχία αρχικοποίησης SD"); + LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Αποτυχία αρχικοποίησης SD"); LSTR MSG_MAIN = _UxGT("Αρχική Οθόνη"); LSTR MSG_RUN_AUTO_FILES = _UxGT("Αυτόματη εκκίνηση"); LSTR MSG_DISABLE_STEPPERS = _UxGT("Απενεργοποίηση μοτέρ"); diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 9f60632152..89b8fd7d77 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -57,8 +57,8 @@ namespace Language_en { LSTR MSG_MEDIA_ABORTING = _UxGT("Aborting..."); LSTR MSG_MEDIA_INSERTED = MEDIA_TYPE_EN _UxGT(" Inserted"); LSTR MSG_MEDIA_REMOVED = MEDIA_TYPE_EN _UxGT(" Removed"); - LSTR MSG_MEDIA_WAITING = _UxGT("Waiting for card"); - LSTR MSG_SD_INIT_FAIL = _UxGT("SD Init Fail"); + LSTR MSG_MEDIA_WAITING = _UxGT("Waiting for ") MEDIA_TYPE_EN; + LSTR MSG_MEDIA_INIT_FAIL = MEDIA_TYPE_EN _UxGT(" Init Fail"); LSTR MSG_MEDIA_READ_ERROR = MEDIA_TYPE_EN _UxGT(" read error"); LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB device removed"); LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB start failed"); diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h index 38f21985ec..9c593215bb 100644 --- a/Marlin/src/lcd/language/language_es.h +++ b/Marlin/src/lcd/language/language_es.h @@ -39,11 +39,11 @@ namespace Language_es { LSTR MSG_NO = _UxGT("NO"); LSTR MSG_BACK = _UxGT("Atrás"); LSTR MSG_MEDIA_ABORTING = _UxGT("Cancelando..."); - LSTR MSG_MEDIA_INSERTED = _UxGT("SD/USB insertado"); - LSTR MSG_MEDIA_REMOVED = _UxGT("SD/USB retirado"); - LSTR MSG_MEDIA_WAITING = _UxGT("Esperando al SD/USB"); - LSTR MSG_SD_INIT_FAIL = _UxGT("Fallo al iniciar SD"); - LSTR MSG_MEDIA_READ_ERROR = _UxGT("Error lectura SD/USB"); + LSTR MSG_MEDIA_INSERTED = _UxGT("SD/FD insertado"); + LSTR MSG_MEDIA_REMOVED = _UxGT("SD/FD retirado"); + LSTR MSG_MEDIA_WAITING = _UxGT("Esperando al SD/FD"); + LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Fallo al iniciar SD/FD"); + LSTR MSG_MEDIA_READ_ERROR = _UxGT("Error lectura SD/FD"); LSTR MSG_MEDIA_USB_REMOVED = _UxGT("Disp. USB retirado"); LSTR MSG_MEDIA_USB_FAILED = _UxGT("Inicio USB fallido"); LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Desbordamiento de subllamada"); @@ -325,7 +325,7 @@ namespace Language_es { LSTR MSG_ERR_EEPROM_CRC = _UxGT("Err: EEPROM CRC"); LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Err: Índice EEPROM"); LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: Versión EEPROM"); - LSTR MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/USB"); + LSTR MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/FD"); LSTR MSG_RESET_PRINTER = _UxGT("Resetear Impresora"); LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Recargar"); LSTR MSG_INFO_SCREEN = _UxGT("Pantalla de Inf."); @@ -348,8 +348,8 @@ namespace Language_es { LSTR MSG_CANCEL_OBJECT = _UxGT("Cancelar Objeto"); LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Objeto ="); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Rec. Fallo electrico"); - LSTR MSG_MEDIA_MENU = _UxGT("Imprim. desde SD/USB"); - LSTR MSG_NO_MEDIA = _UxGT("SD/USB no presente"); + LSTR MSG_MEDIA_MENU = _UxGT("Imprim. desde SD/FD"); + LSTR MSG_NO_MEDIA = _UxGT("SD/FD no presente"); LSTR MSG_DWELL = _UxGT("Reposo..."); LSTR MSG_USERWAIT = _UxGT("Pulsar para Reanudar"); LSTR MSG_PRINT_PAUSED = _UxGT("Impresión Pausada"); @@ -381,9 +381,9 @@ namespace Language_es { LSTR MSG_FILAMENTUNLOAD = _UxGT("Descargar filamento"); LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Descargar fil. *"); LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Descargar todo"); - LSTR MSG_ATTACH_MEDIA = _UxGT("Iniciar SD/USB"); - LSTR MSG_CHANGE_MEDIA = _UxGT("Cambiar SD/USB"); - LSTR MSG_RELEASE_MEDIA = _UxGT("Lanzar SD/USB"); + LSTR MSG_ATTACH_MEDIA = _UxGT("Iniciar SD/FD"); + LSTR MSG_CHANGE_MEDIA = _UxGT("Cambiar SD/FD"); + LSTR MSG_RELEASE_MEDIA = _UxGT("Lanzar SD/FD"); LSTR MSG_ZPROBE_OUT = _UxGT("Sonda Z fuera cama"); LSTR MSG_SKEW_FACTOR = _UxGT("Factor de desviación"); LSTR MSG_BLTOUCH = _UxGT("BLTouch"); diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h index c17faa7014..1f3acf5f09 100644 --- a/Marlin/src/lcd/language/language_gl.h +++ b/Marlin/src/lcd/language/language_gl.h @@ -43,8 +43,8 @@ namespace Language_gl { LSTR MSG_MEDIA_ABORTING = _UxGT("Cancelando..."); LSTR MSG_MEDIA_INSERTED = _UxGT("Tarxeta inserida"); LSTR MSG_MEDIA_REMOVED = _UxGT("Tarxeta retirada"); - LSTR MSG_MEDIA_WAITING = _UxGT("Agardando ao SD/USB"); - LSTR MSG_MEDIA_READ_ERROR = _UxGT("Erro lectura SD/USB"); + LSTR MSG_MEDIA_WAITING = _UxGT("Agardando ao SD/FD"); + LSTR MSG_MEDIA_READ_ERROR = _UxGT("Erro lectura SD/FD"); LSTR MSG_MEDIA_USB_REMOVED = _UxGT("Disp. USB retirado"); LSTR MSG_MEDIA_USB_FAILED = _UxGT("Inicio USB fallido"); LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Desbord. Subch."); @@ -329,7 +329,7 @@ namespace Language_gl { LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Erro: Índice EEPROM"); LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Erro: Versión EEPROM"); LSTR MSG_SETTINGS_STORED = _UxGT("Config Gardada"); - LSTR MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/USB"); + LSTR MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/FD"); LSTR MSG_RESET_PRINTER = _UxGT("Reiniciar Impresora"); LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Recargar"); LSTR MSG_INFO_SCREEN = _UxGT("Información"); @@ -397,9 +397,9 @@ namespace Language_gl { LSTR MSG_FILAMENTUNLOAD = _UxGT("Descargar Filamento"); LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Descargar Filamento *"); LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Descargar Todo"); - LSTR MSG_ATTACH_MEDIA = _UxGT("Iniciar SD/USB"); - LSTR MSG_CHANGE_MEDIA = _UxGT("Cambiar SD/USB"); - LSTR MSG_RELEASE_MEDIA = _UxGT("Lanzar SD/USB"); + LSTR MSG_ATTACH_MEDIA = _UxGT("Iniciar SD/FD"); + LSTR MSG_CHANGE_MEDIA = _UxGT("Cambiar SD/FD"); + LSTR MSG_RELEASE_MEDIA = _UxGT("Lanzar SD/FD"); LSTR MSG_ZPROBE_OUT = _UxGT("Sonda-Z fóra Cama"); LSTR MSG_SKEW_FACTOR = _UxGT("Factor de Desviación"); LSTR MSG_BLTOUCH = _UxGT("BLTouch"); diff --git a/Marlin/src/lcd/language/language_hu.h b/Marlin/src/lcd/language/language_hu.h index faa313e48a..204091f5d5 100644 --- a/Marlin/src/lcd/language/language_hu.h +++ b/Marlin/src/lcd/language/language_hu.h @@ -47,7 +47,7 @@ namespace Language_hu { LSTR MSG_MEDIA_INSERTED = _UxGT("Tároló behelyezve"); LSTR MSG_MEDIA_REMOVED = _UxGT("Tároló eltávolítva"); LSTR MSG_MEDIA_WAITING = _UxGT("Várakozás a tárolóra"); - LSTR MSG_SD_INIT_FAIL = _UxGT("SD-kártya hiba"); + LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Tároló-kártya hiba"); LSTR MSG_MEDIA_READ_ERROR = _UxGT("Tároló olvasási hiba"); LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB eltávolítva"); LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB eszköz hiba"); diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index 1720c0a93a..780f4e9743 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -53,7 +53,7 @@ namespace Language_it { LSTR MSG_MEDIA_INSERTED = _UxGT("Media inserito"); LSTR MSG_MEDIA_REMOVED = _UxGT("Media rimosso"); LSTR MSG_MEDIA_WAITING = _UxGT("Aspettando media"); - LSTR MSG_SD_INIT_FAIL = _UxGT("Inizial.SD fallita"); + LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Iniz.Media fallita"); LSTR MSG_MEDIA_READ_ERROR = _UxGT("Err.leggendo media"); LSTR MSG_MEDIA_USB_REMOVED = _UxGT("Dispos.USB rimosso"); LSTR MSG_MEDIA_USB_FAILED = _UxGT("Avvio USB fallito"); diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h index 9105f58bdb..bf94feea54 100644 --- a/Marlin/src/lcd/language/language_pl.h +++ b/Marlin/src/lcd/language/language_pl.h @@ -53,7 +53,7 @@ namespace Language_pl { LSTR MSG_MEDIA_INSERTED = _UxGT("Karta włożona"); LSTR MSG_MEDIA_REMOVED = _UxGT("Karta usunięta"); LSTR MSG_MEDIA_WAITING = _UxGT("Oczekiwanie na kartę"); - LSTR MSG_SD_INIT_FAIL = _UxGT("Błąd inicializacji karty"); + LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Błąd inicializacji karty"); LSTR MSG_MEDIA_READ_ERROR = _UxGT("Bład odczytu karty"); LSTR MSG_MEDIA_USB_REMOVED = _UxGT("Urządzenie USB usunięte"); LSTR MSG_MEDIA_USB_FAILED = _UxGT("Błąd uruchomienia USB"); diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h index e33018b034..495410500a 100644 --- a/Marlin/src/lcd/language/language_ru.h +++ b/Marlin/src/lcd/language/language_ru.h @@ -44,9 +44,9 @@ namespace Language_ru { LSTR MSG_MEDIA_REMOVED = _UxGT("SD карта извлечена"); LSTR MSG_MEDIA_WAITING = _UxGT("Вставьте SD карту"); #if LCD_WIDTH > 21 - LSTR MSG_SD_INIT_FAIL = _UxGT("Сбой инициализации SD"); + LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Сбой инициализации SD"); #else - LSTR MSG_SD_INIT_FAIL = _UxGT("Сбой инициализ. SD"); + LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Сбой инициализ. SD"); #endif LSTR MSG_MEDIA_READ_ERROR = _UxGT("Ошибка считывания"); LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB диск удалён"); diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h index 76e7f7fbd7..9ab08f2766 100644 --- a/Marlin/src/lcd/language/language_sk.h +++ b/Marlin/src/lcd/language/language_sk.h @@ -56,7 +56,7 @@ namespace Language_sk { LSTR MSG_MEDIA_INSERTED = _UxGT("Karta vložená"); LSTR MSG_MEDIA_REMOVED = _UxGT("Karta vybraná"); LSTR MSG_MEDIA_WAITING = _UxGT("Čakám na kartu"); - LSTR MSG_SD_INIT_FAIL = _UxGT("Inicial. SD zlyhala"); + LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Inicial. SD zlyhala"); LSTR MSG_MEDIA_READ_ERROR = _UxGT("Chyba čítania karty"); LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB zaria. odstrán."); LSTR MSG_MEDIA_USB_FAILED = _UxGT("Chyba spúšťania USB"); diff --git a/Marlin/src/lcd/language/language_sv.h b/Marlin/src/lcd/language/language_sv.h index cdb902aef0..69161d6b55 100644 --- a/Marlin/src/lcd/language/language_sv.h +++ b/Marlin/src/lcd/language/language_sv.h @@ -44,7 +44,7 @@ namespace Language_sv { LSTR MSG_MEDIA_INSERTED = _UxGT("Media Instatt"); LSTR MSG_MEDIA_REMOVED = _UxGT("Media Borttaget"); LSTR MSG_MEDIA_WAITING = _UxGT("Väntar på media"); - LSTR MSG_SD_INIT_FAIL = _UxGT("SD init misslyckades"); + LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Media init misslyckades"); LSTR MSG_MEDIA_READ_ERROR = _UxGT("Media läsningsfel"); LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB enhet borttagen"); LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB start misslyckad"); diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h index afba537008..23110b5e4d 100644 --- a/Marlin/src/lcd/language/language_uk.h +++ b/Marlin/src/lcd/language/language_uk.h @@ -45,9 +45,9 @@ namespace Language_uk { LSTR MSG_MEDIA_REMOVED = _UxGT("SD-картка видалена"); LSTR MSG_MEDIA_WAITING = _UxGT("Вставте SD-картку"); #if LCD_WIDTH > 21 - LSTR MSG_SD_INIT_FAIL = _UxGT("Збій ініціалізації SD"); + LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Збій ініціалізації SD"); #else - LSTR MSG_SD_INIT_FAIL = _UxGT("Збій ініціаліз. SD"); + LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Збій ініціаліз. SD"); #endif LSTR MSG_MEDIA_READ_ERROR = _UxGT("Помилка зчитування"); LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB диск видалений"); diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index b2f950bc04..da6e84c759 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -457,7 +457,7 @@ void CardReader::mount() { cdroot(); #if ENABLED(USB_FLASH_DRIVE_SUPPORT) || PIN_EXISTS(SD_DETECT) else if (marlin_state != MF_INITIALIZING) - ui.set_status(GET_TEXT_F(MSG_SD_INIT_FAIL), -1); + ui.set_status(GET_TEXT_F(MSG_MEDIA_INIT_FAIL), -1); #endif ui.refresh(); From 2175d8aaee68c3555255279ee12da6deee034509 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 15 Dec 2021 01:03:24 +0000 Subject: [PATCH 230/532] [cron] Bump distribution date (2021-12-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 6133fd7b08..75a96bb7de 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 "2021-12-14" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 2fab27fac8..234c706a66 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 "2021-12-14" + #define STRING_DISTRIBUTION_DATE "2021-12-15" #endif /** From 5f9140cccd31f22897dfe135c681f0888b12e041 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 16 Dec 2021 01:03:49 +0000 Subject: [PATCH 231/532] [cron] Bump distribution date (2021-12-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 75a96bb7de..6cf043df89 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 "2021-12-15" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 234c706a66..1d3064d6ec 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 "2021-12-15" + #define STRING_DISTRIBUTION_DATE "2021-12-16" #endif /** From 6dc056f77114a0c3e2cf68758eaa7cf41061e173 Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Thu, 16 Dec 2021 12:04:32 +0700 Subject: [PATCH 232/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20UTF-8=20errror=20i?= =?UTF-8?q?n=20configuration=20embed=20and=20retrieve=20=20(#23303)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The feature added in commit b464a4b1a4ea9cca914126c5f50c3e7384108a5e introduced a UTF-8 encoding error for all users where UTF-8 is not the default codepage. --- buildroot/share/PlatformIO/scripts/signature.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildroot/share/PlatformIO/scripts/signature.py b/buildroot/share/PlatformIO/scripts/signature.py index 53cf347eaa..654e3ea677 100644 --- a/buildroot/share/PlatformIO/scripts/signature.py +++ b/buildroot/share/PlatformIO/scripts/signature.py @@ -12,7 +12,7 @@ import os,subprocess,re,json,hashlib # headers. # def extract_defines(filepath): - f = open(filepath).read().split("\n") + f = open(filepath, encoding="utf8").read().split("\n") a = [] for line in f: sline = line.strip(" \t\n\r") From a994a318ba99799fe749021a213b134f414705ff Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 17 Dec 2021 01:06:28 +0000 Subject: [PATCH 233/532] [cron] Bump distribution date (2021-12-17) --- 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 6cf043df89..516e710f04 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 "2021-12-16" +//#define STRING_DISTRIBUTION_DATE "2021-12-17" /** * 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 1d3064d6ec..a6893d9fc6 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 "2021-12-16" + #define STRING_DISTRIBUTION_DATE "2021-12-17" #endif /** From 9d2441f951da7a5def752105286834f40e0ed618 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 17 Dec 2021 15:57:16 -0600 Subject: [PATCH 234/532] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32g0/pins_BTT_SKR_MINI_E3_V3_0.h | 2 +- docs/ConfigEmbedding.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 2fda0fb2c0..cec1a838fc 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 @@ -150,7 +150,7 @@ * (LCD_D4) PB9 | 5 6 PA10 (BTN_EN2) * RESET | 7 8 | PA9 (BTN_EN1) * (BTN_ENC) PA15 | 9 10 | PB5 (BEEPER) - * ------ + * ------ * EXP1 */ #define EXP1_09_PIN PA15 diff --git a/docs/ConfigEmbedding.md b/docs/ConfigEmbedding.md index 38db06b3df..ed4ea39eda 100644 --- a/docs/ConfigEmbedding.md +++ b/docs/ConfigEmbedding.md @@ -12,7 +12,7 @@ Send the command `M503 C` to write the file `mc.zip` to the SD card. Copy the fi Run the following commands to extract and apply the configuration: ``` $ git checkout -f -$ unzip mc.zip +$ unzip mc.zip $ python buildroot/share/PlatformIO/scripts/mc-apply.py ``` From 504e6fd786abeb06d39cb1cbb1dd83ab3acb1dd0 Mon Sep 17 00:00:00 2001 From: John Lagonikas <39417467+zeleps@users.noreply.github.com> Date: Sat, 18 Dec 2021 01:31:10 +0200 Subject: [PATCH 235/532] =?UTF-8?q?=F0=9F=94=A7=20Warning=20for=20IGNORE?= =?UTF-8?q?=5FTHERMOCOUPLE=5FERRORS=20(#23312)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/temperature.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 59d80e0ea8..341aec59b4 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -1353,6 +1353,8 @@ void Temperature::manage_heater() { if (degRedundant() > TEMP_SENSOR_REDUNDANT_MAX_TC_TMAX - 1.0) max_temp_error(H_REDUNDANT); if (degRedundant() < TEMP_SENSOR_REDUNDANT_MAX_TC_TMIN + .01) min_temp_error(H_REDUNDANT); #endif + #else + #warning "Safety Alert! Disable IGNORE_THERMOCOUPLE_ERRORS for the final build!" #endif millis_t ms = millis(); From b16b1d1fc7e739ae57f80e02e3bfeb34cfe421f9 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 18 Dec 2021 01:07:50 +0000 Subject: [PATCH 236/532] [cron] Bump distribution date (2021-12-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 516e710f04..05316860bb 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 "2021-12-17" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 a6893d9fc6..95ca762b65 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 "2021-12-17" + #define STRING_DISTRIBUTION_DATE "2021-12-18" #endif /** From b4727411d5a57a977625b484e3d22f4bea8f0790 Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Sun, 19 Dec 2021 05:33:21 +0700 Subject: [PATCH 237/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20loud=5Fkill=20heat?= =?UTF-8?q?er=20disable=20(#23314)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/temperature.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 341aec59b4..dccdc55034 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -983,8 +983,8 @@ int16_t Temperature::getHeaterPower(const heater_id_t heater_id) { inline void loud_kill(FSTR_P const lcd_msg, const heater_id_t heater_id) { marlin_state = MF_KILLED; + thermalManager.disable_all_heaters(); #if USE_BEEPER - thermalManager.disable_all_heaters(); for (uint8_t i = 20; i--;) { WRITE(BEEPER_PIN, HIGH); delay(25); From daec6c6bb9f3e42673a8e676bc51aacd7355ca41 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 18 Dec 2021 17:38:29 -0600 Subject: [PATCH 238/532] =?UTF-8?q?=F0=9F=93=9D=20Fix=20a=20config=20comme?= =?UTF-8?q?nt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 eea15c9651..1878a6f258 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -2416,7 +2416,7 @@ // Longer prime to clean out a SINGLENOZZLE #define TOOLCHANGE_FS_EXTRA_PRIME 0 // (mm) Extra priming length #define TOOLCHANGE_FS_PRIME_SPEED (4.6*60) // (mm/min) Extra priming feedrate - #define TOOLCHANGE_FS_WIPE_RETRACT 0 // (mm/min) Retract before cooling for less stringing, better wipe, etc. + #define TOOLCHANGE_FS_WIPE_RETRACT 0 // (mm) Retract before cooling for less stringing, better wipe, etc. // Cool after prime to reduce stringing #define TOOLCHANGE_FS_FAN -1 // Fan index or -1 to skip From 14ceccdbc6e1184f6c5786454d660d875627c852 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 19 Dec 2021 01:26:05 +0000 Subject: [PATCH 239/532] [cron] Bump distribution date (2021-12-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 05316860bb..287dcce5ed 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 "2021-12-18" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 95ca762b65..fb0f53cd83 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 "2021-12-18" + #define STRING_DISTRIBUTION_DATE "2021-12-19" #endif /** From ecaebe4363b2a817649ca37ae29365d5f1e382f4 Mon Sep 17 00:00:00 2001 From: Spencer Owen Date: Sat, 18 Dec 2021 18:58:46 -0700 Subject: [PATCH 240/532] =?UTF-8?q?=E2=9C=A8=20Creality3D=20V4.2.3=20/=20E?= =?UTF-8?q?nder-2=20Pro=20board=20(#23307)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/boards.h | 41 +++++++++--------- Marlin/src/pins/pins.h | 2 + Marlin/src/pins/stm32f1/pins_CREALITY_V423.h | 44 ++++++++++++++++++++ 3 files changed, 67 insertions(+), 20 deletions(-) create mode 100644 Marlin/src/pins/stm32f1/pins_CREALITY_V423.h diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 2fc08c8cc7..674d203027 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -338,26 +338,27 @@ #define BOARD_CHITU3D_V6 4038 // Chitu3D TronXY X5SA V6 Board #define BOARD_CHITU3D_V9 4039 // Chitu3D TronXY X5SA V9 Board #define BOARD_CREALITY_V4 4040 // Creality v4.x (STM32F103RE) -#define BOARD_CREALITY_V427 4041 // Creality v4.2.7 (STM32F103RE) -#define BOARD_CREALITY_V4210 4042 // Creality v4.2.10 (STM32F103RE) as found in the CR-30 -#define BOARD_CREALITY_V431 4043 // Creality v4.3.1 (STM32F103RE) -#define BOARD_CREALITY_V431_A 4044 // Creality v4.3.1a (STM32F103RE) -#define BOARD_CREALITY_V431_B 4045 // Creality v4.3.1b (STM32F103RE) -#define BOARD_CREALITY_V431_C 4046 // Creality v4.3.1c (STM32F103RE) -#define BOARD_CREALITY_V431_D 4047 // Creality v4.3.1d (STM32F103RE) -#define BOARD_CREALITY_V452 4048 // Creality v4.5.2 (STM32F103RE) -#define BOARD_CREALITY_V453 4049 // Creality v4.5.3 (STM32F103RE) -#define BOARD_CREALITY_V24S1 4050 // Creality v2.4.S1 (STM32F103RE) v101 as found in the Ender 7 -#define BOARD_TRIGORILLA_PRO 4051 // Trigorilla Pro (STM32F103ZET6) -#define BOARD_FLY_MINI 4052 // FLYmaker FLY MINI (STM32F103RCT6) -#define BOARD_FLSUN_HISPEED 4053 // FLSUN HiSpeedV1 (STM32F103VET6) -#define BOARD_BEAST 4054 // STM32F103RET6 Libmaple-based controller -#define BOARD_MINGDA_MPX_ARM_MINI 4055 // STM32F103ZET6 Mingda MD-16 -#define BOARD_GTM32_PRO_VD 4056 // STM32F103VET6 controller -#define BOARD_ZONESTAR_ZM3E2 4057 // Zonestar ZM3E2 (STM32F103RCT6) -#define BOARD_ZONESTAR_ZM3E4 4058 // Zonestar ZM3E4 V1 (STM32F103VCT6) -#define BOARD_ZONESTAR_ZM3E4V2 4059 // Zonestar ZM3E4 V2 (STM32F103VCT6) -#define BOARD_ERYONE_ERY32_MINI 4060 // Eryone Ery32 mini (STM32F103VET6) +#define BOARD_CREALITY_V423 4041 // Creality v4.2.3 (STM32F103RE) +#define BOARD_CREALITY_V427 4042 // Creality v4.2.7 (STM32F103RE) +#define BOARD_CREALITY_V4210 4043 // Creality v4.2.10 (STM32F103RE) as found in the CR-30 +#define BOARD_CREALITY_V431 4044 // Creality v4.3.1 (STM32F103RE) +#define BOARD_CREALITY_V431_A 4045 // Creality v4.3.1a (STM32F103RE) +#define BOARD_CREALITY_V431_B 4046 // Creality v4.3.1b (STM32F103RE) +#define BOARD_CREALITY_V431_C 4047 // Creality v4.3.1c (STM32F103RE) +#define BOARD_CREALITY_V431_D 4048 // Creality v4.3.1d (STM32F103RE) +#define BOARD_CREALITY_V452 4049 // Creality v4.5.2 (STM32F103RE) +#define BOARD_CREALITY_V453 4050 // Creality v4.5.3 (STM32F103RE) +#define BOARD_CREALITY_V24S1 4051 // Creality v2.4.S1 (STM32F103RE) v101 as found in the Ender 7 +#define BOARD_TRIGORILLA_PRO 4052 // Trigorilla Pro (STM32F103ZET6) +#define BOARD_FLY_MINI 4053 // FLYmaker FLY MINI (STM32F103RCT6) +#define BOARD_FLSUN_HISPEED 4054 // FLSUN HiSpeedV1 (STM32F103VET6) +#define BOARD_BEAST 4055 // STM32F103RET6 Libmaple-based controller +#define BOARD_MINGDA_MPX_ARM_MINI 4056 // STM32F103ZET6 Mingda MD-16 +#define BOARD_GTM32_PRO_VD 4057 // STM32F103VET6 controller +#define BOARD_ZONESTAR_ZM3E2 4058 // Zonestar ZM3E2 (STM32F103RCT6) +#define BOARD_ZONESTAR_ZM3E4 4059 // Zonestar ZM3E4 V1 (STM32F103VCT6) +#define BOARD_ZONESTAR_ZM3E4V2 4060 // Zonestar ZM3E4 V2 (STM32F103VCT6) +#define BOARD_ERYONE_ERY32_MINI 4061 // Eryone Ery32 mini (STM32F103VET6) // // ARM Cortex-M4F diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 7759aeb7b7..54967197f0 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -557,6 +557,8 @@ #include "stm32f1/pins_CREALITY_V4.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple #elif MB(CREALITY_V4210) #include "stm32f1/pins_CREALITY_V4210.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple +#elif MB(CREALITY_V423) + #include "stm32f1/pins_CREALITY_V423.h" // STM32F1 env:STM32F103RET6_creality #elif MB(CREALITY_V427) #include "stm32f1/pins_CREALITY_V427.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple #elif MB(CREALITY_V431, CREALITY_V431_A, CREALITY_V431_B, CREALITY_V431_C, CREALITY_V431_D) diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V423.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V423.h new file mode 100644 index 0000000000..186051c1fc --- /dev/null +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V423.h @@ -0,0 +1,44 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 + +/** + * CREALITY v4.2.3 (STM32F103) board pin assignments + */ + +#define BOARD_INFO_NAME "Creality v4.2.3" +#define DEFAULT_MACHINE_NAME "Creality3D" + +// +// Heaters +// +#define HEATER_BED_PIN PB10 // HOT BED + +#include "pins_CREALITY_V4.h" + +// +// Encoder +// +#if BTN_EN1 == PB10 + #undef BTN_EN1 + #define BTN_EN1 PA2 // Rotary Encoder +#endif From a055898870d2aac8d0d36a4d0b55846cdca1a808 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 20 Dec 2021 01:06:18 +0000 Subject: [PATCH 241/532] [cron] Bump distribution date (2021-12-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 287dcce5ed..e952cf1ab3 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 "2021-12-19" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 fb0f53cd83..a6019419b1 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 "2021-12-19" + #define STRING_DISTRIBUTION_DATE "2021-12-20" #endif /** From 9d4275506862e6d8029c0152c1d16ee737a4fa64 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 8 Jul 2021 01:33:49 -0500 Subject: [PATCH 242/532] =?UTF-8?q?=F0=9F=8E=A8=20Update=20SKR=20V2=20pins?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h index d4e07bb8b7..196ca46319 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h @@ -366,12 +366,12 @@ // #if SD_CONNECTION_IS(LCD) - #define SDSS PA4 + #define SDSS EXP2_07_PIN #define SD_SS_PIN SDSS - #define SD_SCK_PIN PA5 - #define SD_MISO_PIN PA6 - #define SD_MOSI_PIN PA7 - #define SD_DETECT_PIN PC4 + #define SD_SCK_PIN EXP2_09_PIN + #define SD_MISO_PIN EXP2_10_PIN + #define SD_MOSI_PIN EXP2_05_PIN + #define SD_DETECT_PIN EXP2_04_PIN #elif SD_CONNECTION_IS(ONBOARD) From ba3239145429e15901bb642a7225204f95b8e308 Mon Sep 17 00:00:00 2001 From: GHGiampy <83699429+GHGiampy@users.noreply.github.com> Date: Mon, 20 Dec 2021 09:44:43 +0100 Subject: [PATCH 243/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Opt?= =?UTF-8?q?ion=20allowing=20>=20127=20Neopixels=20(#23322)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/leds/neopixel.cpp | 4 ++-- Marlin/src/feature/leds/neopixel.h | 14 +++++++++++--- Marlin/src/gcode/feature/leds/M150.cpp | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Marlin/src/feature/leds/neopixel.cpp b/Marlin/src/feature/leds/neopixel.cpp index 2654e9a1df..3569cb180d 100644 --- a/Marlin/src/feature/leds/neopixel.cpp +++ b/Marlin/src/feature/leds/neopixel.cpp @@ -35,7 +35,7 @@ #endif Marlin_NeoPixel neo; -int8_t Marlin_NeoPixel::neoindex; +pixel_index_t Marlin_NeoPixel::neoindex; Adafruit_NeoPixel Marlin_NeoPixel::adaneo1(NEOPIXEL_PIXELS, NEOPIXEL_PIN, NEOPIXEL_TYPE + NEO_KHZ800); #if CONJOINED_NEOPIXEL @@ -116,7 +116,7 @@ void Marlin_NeoPixel::init() { Marlin_NeoPixel2 neo2; - int8_t Marlin_NeoPixel2::neoindex; + pixel_index_t Marlin_NeoPixel2::neoindex; Adafruit_NeoPixel Marlin_NeoPixel2::adaneo(NEOPIXEL2_PIXELS, NEOPIXEL2_PIN, NEOPIXEL2_TYPE); void Marlin_NeoPixel2::set_color(const uint32_t color) { diff --git a/Marlin/src/feature/leds/neopixel.h b/Marlin/src/feature/leds/neopixel.h index b2c16459f5..814ae9c8d8 100644 --- a/Marlin/src/feature/leds/neopixel.h +++ b/Marlin/src/feature/leds/neopixel.h @@ -25,6 +25,8 @@ * NeoPixel support */ +#define MAX_NEOPIXELS 127 + #ifndef _NEOPIXEL_INCLUDE_ #error "Always include 'leds.h' and not 'neopixel.h' directly." #endif @@ -63,7 +65,13 @@ #endif // ------------------------ -// Function prototypes +// Types +// ------------------------ + +typedef IF<(MAX_NEOPIXELS > 127), int16_t, int8_t>::type pixel_index_t; + +// ------------------------ +// Classes // ------------------------ class Marlin_NeoPixel { @@ -74,7 +82,7 @@ private: #endif public: - static int8_t neoindex; + static pixel_index_t neoindex; static void init(); static void set_color_startup(const uint32_t c); @@ -150,7 +158,7 @@ extern Marlin_NeoPixel neo; static Adafruit_NeoPixel adaneo; public: - static int8_t neoindex; + static pixel_index_t neoindex; static void init(); static void set_color_startup(const uint32_t c); diff --git a/Marlin/src/gcode/feature/leds/M150.cpp b/Marlin/src/gcode/feature/leds/M150.cpp index 45278fe1f5..f01c220d01 100644 --- a/Marlin/src/gcode/feature/leds/M150.cpp +++ b/Marlin/src/gcode/feature/leds/M150.cpp @@ -54,7 +54,7 @@ */ void GcodeSuite::M150() { #if ENABLED(NEOPIXEL_LED) - const int8_t index = parser.intval('I', -1); + const pixel_index_t index = parser.intval('I', -1); #if ENABLED(NEOPIXEL2_SEPARATE) int8_t brightness = neo.brightness(), unit = parser.intval('S', -1); switch (unit) { From b06f871dd094308828922039ea9923c89fd772a7 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 21 Dec 2021 01:08:00 +0000 Subject: [PATCH 244/532] [cron] Bump distribution date (2021-12-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 e952cf1ab3..222ecc9393 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 "2021-12-20" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 a6019419b1..b5f62034af 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 "2021-12-20" + #define STRING_DISTRIBUTION_DATE "2021-12-21" #endif /** From f374fa0eb8cfa60981b25cb99856c14328fd703e Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Tue, 21 Dec 2021 01:26:31 -0600 Subject: [PATCH 245/532] =?UTF-8?q?=F0=9F=9A=91=EF=B8=8F=20FAST=5FPWM=5FFA?= =?UTF-8?q?N=20default=201KHz=20base=20freq.=20(#23326)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/inc/Conditionals_post.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 971318518d..7fb8395506 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -2668,10 +2668,14 @@ #endif /** - * FAST PWM FAN Settings + * FAST PWM FAN default PWM frequency */ -#if ENABLED(FAST_PWM_FAN) && !defined(FAST_PWM_FAN_FREQUENCY) - #define FAST_PWM_FAN_FREQUENCY ((F_CPU) / (2 * 255 * 1)) // Fan frequency default +#if !defined(FAST_PWM_FAN_FREQUENCY) && ENABLED(FAST_PWM_FAN) + #ifdef __AVR__ + #define FAST_PWM_FAN_FREQUENCY ((F_CPU) / (2 * 255 * 1)) + #else + #define FAST_PWM_FAN_FREQUENCY 1000U + #endif #endif /** From 9cee62681232f154b411a606f1f49f0dd80a49ac Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Wed, 22 Dec 2021 13:48:38 +1300 Subject: [PATCH 246/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Chitu=20Z=5FSTOP?= =?UTF-8?q?=5FPIN=20(#23330)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f1/pins_CHITU3D_V5.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/pins/stm32f1/pins_CHITU3D_V5.h b/Marlin/src/pins/stm32f1/pins_CHITU3D_V5.h index afe58df803..53b6797e91 100644 --- a/Marlin/src/pins/stm32f1/pins_CHITU3D_V5.h +++ b/Marlin/src/pins/stm32f1/pins_CHITU3D_V5.h @@ -23,6 +23,6 @@ #define BOARD_INFO_NAME "Chitu3D V5" -#define Z_STOP_PIN PG9 +#define Z_STOP_PIN PA14 #include "pins_CHITU3D_common.h" From fdd37a84a290bfd55311a200018e7fdcf63df079 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 22 Dec 2021 01:07:10 +0000 Subject: [PATCH 247/532] [cron] Bump distribution date (2021-12-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 222ecc9393..ddabd7b152 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 "2021-12-21" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 b5f62034af..68cfee56e1 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 "2021-12-21" + #define STRING_DISTRIBUTION_DATE "2021-12-22" #endif /** From c1dba3d02888824400413fdf366c1fa574cbb587 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Wed, 22 Dec 2021 15:44:04 +1300 Subject: [PATCH 248/532] =?UTF-8?q?=E2=9C=A8=20Option=20to=20reset=20EEPRO?= =?UTF-8?q?M=20on=20first=20run=20(#23276)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/Configuration.h | 1 + Marlin/src/module/settings.cpp | 76 ++++++++++++++----- .../PlatformIO/scripts/preflight-checks.py | 11 ++- 3 files changed, 68 insertions(+), 20 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 71a9211330..bb89bc14a3 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -1837,6 +1837,7 @@ #define EEPROM_BOOT_SILENT // Keep M503 quiet and only give errors during first load #if ENABLED(EEPROM_SETTINGS) //#define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors. + //#define EEPROM_INIT_NOW // Init EEPROM on first boot after a new build. #endif // diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 8ccf773adc..a9c771240c 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -36,7 +36,7 @@ */ // Change EEPROM version if the structure changes -#define EEPROM_VERSION "V85" +#define EEPROM_VERSION "V86" #define EEPROM_OFFSET 100 // Check the integrity of data offsets. @@ -198,20 +198,32 @@ static const feedRate_t _DMF[] PROGMEM = DEFAULT_MAX_FEEDRATE; */ typedef struct SettingsDataStruct { char version[4]; // Vnn\0 + #if ENABLED(EEPROM_INIT_NOW) + uint32_t build_hash; // Unique build hash + #endif uint16_t crc; // Data Checksum // // DISTINCT_E_FACTORS // - uint8_t esteppers; // DISTINCT_AXES - LINEAR_AXES + uint8_t e_factors; // DISTINCT_AXES - LINEAR_AXES + // + // Planner settings + // planner_settings_t planner_settings; xyze_float_t planner_max_jerk; // M205 XYZE planner.max_jerk float planner_junction_deviation_mm; // M205 J planner.junction_deviation_mm + // + // Home Offset + // xyz_pos_t home_offset; // M206 XYZ / M665 TPZ + // + // Hotend Offset + // #if HAS_HOTEND_OFFSET xyz_pos_t hotend_offset[HOTENDS - 1]; // M218 XYZ #endif @@ -649,13 +661,24 @@ void MarlinSettings::postprocess() { const char version[4] = EEPROM_VERSION; + #if ENABLED(EEPROM_INIT_NOW) + constexpr uint32_t strhash32(const char *s, const uint32_t h=0) { + return *s ? strhash32(s + 1, ((h + *s) << (*s & 3)) ^ *s) : h; + } + constexpr uint32_t build_hash = strhash32(__DATE__ __TIME__); + #endif + bool MarlinSettings::eeprom_error, MarlinSettings::validating; int MarlinSettings::eeprom_index; uint16_t MarlinSettings::working_crc; bool MarlinSettings::size_error(const uint16_t size) { if (size != datasize()) { - DEBUG_ERROR_MSG("EEPROM datasize error."); + DEBUG_ERROR_MSG("EEPROM datasize error." + #if ENABLED(MARLIN_DEV_MODE) + " (Actual:", size, " Expected:", datasize(), ")" + #endif + ); return true; } return false; @@ -675,13 +698,17 @@ void MarlinSettings::postprocess() { // Write or Skip version. (Flash doesn't allow rewrite without erase.) TERN(FLASH_EEPROM_EMULATION, EEPROM_SKIP, EEPROM_WRITE)(ver); - EEPROM_SKIP(working_crc); // Skip the checksum slot + #if ENABLED(EEPROM_INIT_NOW) + EEPROM_SKIP(build_hash); // Skip the hash slot + #endif + + EEPROM_SKIP(working_crc); // Skip the checksum slot working_crc = 0; // clear before first "real data" - const uint8_t esteppers = COUNT(planner.settings.axis_steps_per_mm) - LINEAR_AXES; - _FIELD_TEST(esteppers); - EEPROM_WRITE(esteppers); + const uint8_t e_factors = DISTINCT_AXES - (LINEAR_AXES); + _FIELD_TEST(e_factors); + EEPROM_WRITE(e_factors); // // Planner Motion @@ -1494,6 +1521,9 @@ void MarlinSettings::postprocess() { eeprom_index = EEPROM_OFFSET; EEPROM_WRITE(version); + #if ENABLED(EEPROM_INIT_NOW) + EEPROM_WRITE(build_hash); + #endif EEPROM_WRITE(final_crc); // Report storage size @@ -1527,9 +1557,6 @@ void MarlinSettings::postprocess() { char stored_ver[4]; EEPROM_READ_ALWAYS(stored_ver); - uint16_t stored_crc; - EEPROM_READ_ALWAYS(stored_crc); - // Version has to match or defaults are used if (strncmp(version, stored_ver, 3) != 0) { if (stored_ver[3] != '\0') { @@ -1543,14 +1570,25 @@ void MarlinSettings::postprocess() { eeprom_error = true; } else { + + // Optionally reset on the first boot after flashing + #if ENABLED(EEPROM_INIT_NOW) + uint32_t stored_hash; + EEPROM_READ_ALWAYS(stored_hash); + if (stored_hash != build_hash) { EEPROM_FINISH(); return true; } + #endif + + uint16_t stored_crc; + EEPROM_READ_ALWAYS(stored_crc); + float dummyf = 0; working_crc = 0; // Init to 0. Accumulated by EEPROM_READ - _FIELD_TEST(esteppers); + _FIELD_TEST(e_factors); - // Number of esteppers may change - uint8_t esteppers; - EEPROM_READ_ALWAYS(esteppers); + // Number of e_factors may change + uint8_t e_factors; + EEPROM_READ_ALWAYS(e_factors); // // Planner Motion @@ -1558,16 +1596,16 @@ void MarlinSettings::postprocess() { { // Get only the number of E stepper parameters previously stored // Any steppers added later are set to their defaults - uint32_t tmp1[LINEAR_AXES + esteppers]; - float tmp2[LINEAR_AXES + esteppers]; - feedRate_t tmp3[LINEAR_AXES + esteppers]; + uint32_t tmp1[LINEAR_AXES + e_factors]; + float tmp2[LINEAR_AXES + e_factors]; + feedRate_t tmp3[LINEAR_AXES + e_factors]; EEPROM_READ((uint8_t *)tmp1, sizeof(tmp1)); // max_acceleration_mm_per_s2 EEPROM_READ(planner.settings.min_segment_time_us); EEPROM_READ((uint8_t *)tmp2, sizeof(tmp2)); // axis_steps_per_mm EEPROM_READ((uint8_t *)tmp3, sizeof(tmp3)); // max_feedrate_mm_s if (!validating) LOOP_DISTINCT_AXES(i) { - const bool in = (i < esteppers + LINEAR_AXES); + const bool in = (i < e_factors + LINEAR_AXES); planner.settings.max_acceleration_mm_per_s2[i] = in ? tmp1[i] : pgm_read_dword(&_DMA[ALIM(i, _DMA)]); planner.settings.axis_steps_per_mm[i] = in ? tmp2[i] : pgm_read_float(&_DASU[ALIM(i, _DASU)]); planner.settings.max_feedrate_mm_s[i] = in ? tmp3[i] : pgm_read_float(&_DMF[ALIM(i, _DMF)]); @@ -2496,7 +2534,7 @@ void MarlinSettings::postprocess() { return success; } reset(); - #if ENABLED(EEPROM_AUTO_INIT) + #if EITHER(EEPROM_AUTO_INIT, EEPROM_INIT_NOW) (void)save(); SERIAL_ECHO_MSG("EEPROM Initialized"); #endif diff --git a/buildroot/share/PlatformIO/scripts/preflight-checks.py b/buildroot/share/PlatformIO/scripts/preflight-checks.py index 1837a7580d..9f38ffe8bf 100644 --- a/buildroot/share/PlatformIO/scripts/preflight-checks.py +++ b/buildroot/share/PlatformIO/scripts/preflight-checks.py @@ -81,10 +81,19 @@ if pioutil.is_pio_build(): # # Give warnings on every build # - warnfile = os.path.join(env['PROJECT_BUILD_DIR'], build_env, "src", "src", "inc", "Warnings.cpp.o") + srcpath = os.path.join(env['PROJECT_BUILD_DIR'], build_env, "src", "src") + warnfile = os.path.join(srcpath, "inc", "Warnings.cpp.o") if os.path.exists(warnfile): os.remove(warnfile) + # + # Rebuild 'settings.cpp' for EEPROM_INIT_NOW + # + if 'EEPROM_INIT_NOW' in env['MARLIN_FEATURES']: + setfile = os.path.join(srcpath, "module", "settings.cpp.o") + if os.path.exists(setfile): + os.remove(setfile) + # # Check for old files indicating an entangled Marlin (mixing old and new code) # From 2893048e2955963bb307a4ca67ec26bb336de2f5 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Tue, 21 Dec 2021 23:09:55 -0500 Subject: [PATCH 249/532] =?UTF-8?q?=E2=9C=A8=20BLTouch=20High=20Speed=20mo?= =?UTF-8?q?de=20runtime=20configuration=20(#22916)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/Configuration_adv.h | 6 ++- Marlin/src/feature/bltouch.cpp | 24 ++++++------ Marlin/src/feature/bltouch.h | 15 +++++--- Marlin/src/gcode/bedlevel/G35.cpp | 6 ++- Marlin/src/gcode/calibrate/G34_M422.cpp | 6 ++- Marlin/src/gcode/probe/M401_M402.cpp | 20 ++++++++-- Marlin/src/inc/SanityCheck.h | 3 ++ Marlin/src/lcd/language/language_en.h | 1 + Marlin/src/lcd/menu/menu_bed_corners.cpp | 21 ++++++----- Marlin/src/lcd/menu/menu_configuration.cpp | 14 +++++-- Marlin/src/lcd/menu/menu_tramming.cpp | 6 ++- Marlin/src/module/motion.cpp | 9 +++-- Marlin/src/module/probe.cpp | 17 ++++++--- Marlin/src/module/settings.cpp | 43 ++++++++++++++++------ 14 files changed, 132 insertions(+), 59 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 1878a6f258..e50e0cde89 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -897,12 +897,14 @@ //#define BLTOUCH_FORCE_MODE_SET /** - * Use "HIGH SPEED" mode for probing. + * Enable "HIGH SPEED" option for probing. * Danger: Disable if your probe sometimes fails. Only suitable for stable well-adjusted systems. * This feature was designed for Deltabots with very fast Z moves; however, higher speed Cartesians * might be able to use it. If the machine can't raise Z fast enough the BLTouch may go into ALARM. + * + * Set the default state here, change with 'M401 S' or UI, use M500 to save, M502 to reset. */ - //#define BLTOUCH_HS_MODE + //#define BLTOUCH_HS_MODE true // Safety: Enable voltage mode settings in the LCD menu. //#define BLTOUCH_LCD_VOLTAGE_MENU diff --git a/Marlin/src/feature/bltouch.cpp b/Marlin/src/feature/bltouch.cpp index 49a10f62b1..d3348e79f0 100644 --- a/Marlin/src/feature/bltouch.cpp +++ b/Marlin/src/feature/bltouch.cpp @@ -28,7 +28,12 @@ BLTouch bltouch; -bool BLTouch::last_written_mode; // Initialized by settings.load, 0 = Open Drain; 1 = 5V Drain +bool BLTouch::od_5v_mode; // Initialized by settings.load, 0 = Open Drain; 1 = 5V Drain +#ifdef BLTOUCH_HS_MODE + bool BLTouch::high_speed_mode; // Initialized by settings.load, 0 = Low Speed; 1 = High Speed +#else + constexpr bool BLTouch::high_speed_mode; +#endif #include "../module/servo.h" #include "../module/probe.h" @@ -64,17 +69,14 @@ void BLTouch::init(const bool set_voltage/*=false*/) { #else if (DEBUGGING(LEVELING)) { - DEBUG_ECHOLNPGM("last_written_mode - ", last_written_mode); - DEBUG_ECHOLNPGM("config mode - " - #if ENABLED(BLTOUCH_SET_5V_MODE) - "BLTOUCH_SET_5V_MODE" - #else - "OD" - #endif - ); + PGMSTR(mode0, "OD"); + PGMSTR(mode1, "5V"); + DEBUG_ECHOPGM("BLTouch Mode: "); + DEBUG_ECHOPGM_P(bltouch.od_5v_mode ? mode1 : mode0); + DEBUG_ECHOLNPGM(" (Default " TERN(BLTOUCH_SET_5V_MODE, "5V", "OD") ")"); } - const bool should_set = last_written_mode != ENABLED(BLTOUCH_SET_5V_MODE); + const bool should_set = od_5v_mode != ENABLED(BLTOUCH_SET_5V_MODE); #endif @@ -193,7 +195,7 @@ void BLTouch::mode_conv_proc(const bool M5V) { _mode_store(); if (M5V) _set_5V_mode(); else _set_OD_mode(); _stow(); - last_written_mode = M5V; + od_5v_mode = M5V; } #endif // BLTOUCH diff --git a/Marlin/src/feature/bltouch.h b/Marlin/src/feature/bltouch.h index 9ecccb4256..ae3ab66300 100644 --- a/Marlin/src/feature/bltouch.h +++ b/Marlin/src/feature/bltouch.h @@ -23,10 +23,6 @@ #include "../inc/MarlinConfigPre.h" -#if DISABLED(BLTOUCH_HS_MODE) - #define BLTOUCH_SLOW_MODE 1 -#endif - // BLTouch commands are sent as servo angles typedef unsigned char BLTCommand; @@ -70,8 +66,17 @@ typedef unsigned char BLTCommand; class BLTouch { public: + static void init(const bool set_voltage=false); - static bool last_written_mode; // Initialized by settings.load, 0 = Open Drain; 1 = 5V Drain + static bool od_5v_mode; // Initialized by settings.load, 0 = Open Drain; 1 = 5V Drain + + #ifdef BLTOUCH_HS_MODE + static bool high_speed_mode; // Initialized by settings.load, 0 = Low Speed; 1 = High Speed + #else + static constexpr bool high_speed_mode = false; + #endif + + static inline float z_extra_clearance() { return high_speed_mode ? 7 : 0; } // DEPLOY and STOW are wrapped for error handling - these are used by homing and by probing static bool deploy() { return deploy_proc(); } diff --git a/Marlin/src/gcode/bedlevel/G35.cpp b/Marlin/src/gcode/bedlevel/G35.cpp index e45e18b7fb..8cabb92382 100644 --- a/Marlin/src/gcode/bedlevel/G35.cpp +++ b/Marlin/src/gcode/bedlevel/G35.cpp @@ -33,6 +33,10 @@ #include "../../module/tool_change.h" #endif +#if ENABLED(BLTOUCH) + #include "../../feature/bltouch.h" +#endif + #define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE) #include "../../core/debug_out.h" @@ -102,7 +106,7 @@ void GcodeSuite::G35() { // In BLTOUCH HS mode, the probe travels in a deployed state. // Users of G35 might have a badly misaligned bed, so raise Z by the // length of the deployed pin (BLTOUCH stroke < 7mm) - do_blocking_move_to_z(SUM_TERN(BLTOUCH_HS_MODE, Z_CLEARANCE_BETWEEN_PROBES, 7)); + do_blocking_move_to_z(Z_CLEARANCE_BETWEEN_PROBES + TERN0(BLTOUCH, bltouch.z_extra_clearance())); const float z_probed_height = probe.probe_at_point(tramming_points[i], PROBE_PT_RAISE, 0, true); if (isnan(z_probed_height)) { diff --git a/Marlin/src/gcode/calibrate/G34_M422.cpp b/Marlin/src/gcode/calibrate/G34_M422.cpp index 8f4eab2c97..328a40dbb4 100644 --- a/Marlin/src/gcode/calibrate/G34_M422.cpp +++ b/Marlin/src/gcode/calibrate/G34_M422.cpp @@ -45,6 +45,10 @@ #include "../../libs/least_squares_fit.h" #endif +#if ENABLED(BLTOUCH) + #include "../../feature/bltouch.h" +#endif + #define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE) #include "../../core/debug_out.h" @@ -149,7 +153,7 @@ void GcodeSuite::G34() { // In BLTOUCH HS mode, the probe travels in a deployed state. // Users of G34 might have a badly misaligned bed, so raise Z by the // length of the deployed pin (BLTOUCH stroke < 7mm) - #define Z_BASIC_CLEARANCE (Z_CLEARANCE_BETWEEN_PROBES + 7.0f * BOTH(BLTOUCH, BLTOUCH_HS_MODE)) + #define Z_BASIC_CLEARANCE (Z_CLEARANCE_BETWEEN_PROBES + TERN0(BLTOUCH, bltouch.z_extra_clearance())) // Compute a worst-case clearance height to probe from. After the first // iteration this will be re-calculated based on the actual bed position diff --git a/Marlin/src/gcode/probe/M401_M402.cpp b/Marlin/src/gcode/probe/M401_M402.cpp index bd9bb44c40..7cbae76f4b 100644 --- a/Marlin/src/gcode/probe/M401_M402.cpp +++ b/Marlin/src/gcode/probe/M401_M402.cpp @@ -28,13 +28,27 @@ #include "../../module/motion.h" #include "../../module/probe.h" +#ifdef BLTOUCH_HS_MODE + #include "../../feature/bltouch.h" +#endif + /** * M401: Deploy and activate the Z probe + * + * With BLTOUCH_HS_MODE: + * S Set High Speed (HS) Mode and exit without deploy */ void GcodeSuite::M401() { - probe.deploy(); - TERN_(PROBE_TARE, probe.tare()); - report_current_position(); + if (parser.seen('S')) { + #ifdef BLTOUCH_HS_MODE + bltouch.high_speed_mode = parser.value_bool(); + #endif + } + else { + probe.deploy(); + TERN_(PROBE_TARE, probe.tare()); + report_current_position(); + } } /** diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index a809fad132..fbc0e3d1f0 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1577,6 +1577,9 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #endif #endif + #if ENABLED(BLTOUCH_HS_MODE) && BLTOUCH_HS_MODE == 0 + #error "BLTOUCH_HS_MODE must now be defined as true or false, indicating the default state." + #endif #if BLTOUCH_DELAY < 200 #error "BLTOUCH_DELAY less than 200 is unsafe and is not supported." #endif diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 89b8fd7d77..1d8861b2c7 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -491,6 +491,7 @@ namespace Language_en { LSTR MSG_BLTOUCH_STOW = _UxGT("Stow"); LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Deploy"); LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Mode"); + LSTR MSG_BLTOUCH_SPEED_MODE = _UxGT("High Speed"); LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Mode"); LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Mode"); LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store"); diff --git a/Marlin/src/lcd/menu/menu_bed_corners.cpp b/Marlin/src/lcd/menu/menu_bed_corners.cpp index 7bf247f40b..5740978639 100644 --- a/Marlin/src/lcd/menu/menu_bed_corners.cpp +++ b/Marlin/src/lcd/menu/menu_bed_corners.cpp @@ -217,13 +217,13 @@ static void _lcd_level_bed_corners_get_next_position() { bool _lcd_level_bed_corners_probe(bool verify=false) { if (verify) do_blocking_move_to_z(current_position.z + LEVEL_CORNERS_Z_HOP); // do clearance if needed - TERN_(BLTOUCH_SLOW_MODE, bltouch.deploy()); // Deploy in LOW SPEED MODE on every probe action + TERN_(BLTOUCH, if (!bltouch.high_speed_mode) bltouch.deploy()); // Deploy in LOW SPEED MODE on every probe action do_blocking_move_to_z(last_z - LEVEL_CORNERS_PROBE_TOLERANCE, MMM_TO_MMS(Z_PROBE_FEEDRATE_SLOW)); // Move down to lower tolerance if (TEST(endstops.trigger_state(), Z_MIN_PROBE)) { // check if probe triggered endstops.hit_on_purpose(); set_current_from_steppers_for_axis(Z_AXIS); sync_plan_position(); - TERN_(BLTOUCH_SLOW_MODE, bltouch.stow()); // Stow in LOW SPEED MODE on every trigger + TERN_(BLTOUCH, if (!bltouch.high_speed_mode) bltouch.stow()); // Stow in LOW SPEED MODE on every trigger // Triggered outside tolerance range? if (ABS(current_position.z - last_z) > LEVEL_CORNERS_PROBE_TOLERANCE) { last_z = current_position.z; // Above tolerance. Set a new Z for subsequent corners. @@ -249,7 +249,7 @@ static void _lcd_level_bed_corners_get_next_position() { } idle(); } - TERN_(BLTOUCH_SLOW_MODE, bltouch.stow()); + TERN_(BLTOUCH, if (!bltouch.high_speed_mode) bltouch.stow()); ui.goto_screen(_lcd_draw_probing); return (probe_triggered); } @@ -263,13 +263,14 @@ static void _lcd_level_bed_corners_get_next_position() { do { ui.refresh(LCDVIEW_REDRAW_NOW); _lcd_draw_probing(); // update screen with # of good points - do_blocking_move_to_z(SUM_TERN(BLTOUCH_HS_MODE, current_position.z + LEVEL_CORNERS_Z_HOP, 7)); // clearance + + do_blocking_move_to_z(current_position.z + LEVEL_CORNERS_Z_HOP + TERN0(BLTOUCH, bltouch.z_extra_clearance())); // clearance _lcd_level_bed_corners_get_next_position(); // Select next corner coordinates current_position -= probe.offset_xy; // Account for probe offsets do_blocking_move_to_xy(current_position); // Goto corner - TERN_(BLTOUCH_HS_MODE, bltouch.deploy()); // Deploy in HIGH SPEED MODE + TERN_(BLTOUCH, if (bltouch.high_speed_mode) bltouch.deploy()); // Deploy in HIGH SPEED MODE if (!_lcd_level_bed_corners_probe()) { // Probe down to tolerance if (_lcd_level_bed_corners_raise()) { // Prompt user to raise bed if needed #if ENABLED(LEVEL_CORNERS_VERIFY_RAISED) // Verify @@ -290,10 +291,12 @@ static void _lcd_level_bed_corners_get_next_position() { } while (good_points < nr_edge_points); // loop until all points within tolerance - #if ENABLED(BLTOUCH_HS_MODE) - // In HIGH SPEED MODE do clearance and stow at the very end - do_blocking_move_to_z(current_position.z + LEVEL_CORNERS_Z_HOP); - bltouch.stow(); + #if ENABLED(BLTOUCH) + if (bltouch.high_speed_mode) + // In HIGH SPEED MODE do clearance and stow at the very end + do_blocking_move_to_z(current_position.z + LEVEL_CORNERS_Z_HOP); + bltouch.stow(); + } #endif ui.goto_screen(_lcd_draw_level_prompt); // prompt for bed leveling diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index cd8bad9c8b..19b3dcbafb 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -217,11 +217,14 @@ void menu_advanced_settings(); #if ENABLED(BLTOUCH_LCD_VOLTAGE_MENU) void bltouch_report() { - SERIAL_ECHOLNPGM("EEPROM Last BLTouch Mode - ", bltouch.last_written_mode); - SERIAL_ECHOLNPGM("Configuration BLTouch Mode - " TERN(BLTOUCH_SET_5V_MODE, "5V", "OD")); + PGMSTR(mode0, "OD"); + PGMSTR(mode1, "5V"); + SERIAL_ECHOPGM("BLTouch Mode: "); + SERIAL_ECHOPGM_P(bltouch.od_5v_mode ? mode1 : mode0); + SERIAL_ECHOLNPGM(" (Default " TERN(BLTOUCH_SET_5V_MODE, "5V", "OD") ")"); char mess[21]; - strcpy_P(mess, PSTR("BLTouch Mode - ")); - strcpy_P(&mess[15], bltouch.last_written_mode ? PSTR("5V") : PSTR("OD")); + strcpy_P(mess, PSTR("BLTouch Mode: ")); + strcpy_P(&mess[15], bltouch.od_5v_mode ? mode1 : mode0); ui.set_status(mess); ui.return_to_status(); } @@ -235,6 +238,9 @@ void menu_advanced_settings(); ACTION_ITEM(MSG_BLTOUCH_DEPLOY, bltouch._deploy); ACTION_ITEM(MSG_BLTOUCH_STOW, bltouch._stow); ACTION_ITEM(MSG_BLTOUCH_SW_MODE, bltouch._set_SW_mode); + #ifdef BLTOUCH_HS_MODE + EDIT_ITEM(bool, MSG_BLTOUCH_SPEED_MODE, &bltouch.high_speed_mode); + #endif #if ENABLED(BLTOUCH_LCD_VOLTAGE_MENU) CONFIRM_ITEM(MSG_BLTOUCH_5V_MODE, MSG_BLTOUCH_5V_MODE, MSG_BUTTON_CANCEL, bltouch._set_5V_mode, nullptr, GET_TEXT(MSG_BLTOUCH_MODE_CHANGE)); CONFIRM_ITEM(MSG_BLTOUCH_OD_MODE, MSG_BLTOUCH_OD_MODE, MSG_BUTTON_CANCEL, bltouch._set_OD_mode, nullptr, GET_TEXT(MSG_BLTOUCH_MODE_CHANGE)); diff --git a/Marlin/src/lcd/menu/menu_tramming.cpp b/Marlin/src/lcd/menu/menu_tramming.cpp index 8e9d4b3942..4033421b56 100644 --- a/Marlin/src/lcd/menu/menu_tramming.cpp +++ b/Marlin/src/lcd/menu/menu_tramming.cpp @@ -36,6 +36,10 @@ #include "../../module/probe.h" #include "../../gcode/queue.h" +#if ENABLED(BLTOUCH) + #include "../../feature/bltouch.h" +#endif + //#define DEBUG_OUT 1 #include "../../core/debug_out.h" @@ -51,7 +55,7 @@ static int8_t reference_index; // = 0 static bool probe_single_point() { do_blocking_move_to_z(TERN(BLTOUCH, Z_CLEARANCE_DEPLOY_PROBE, Z_CLEARANCE_BETWEEN_PROBES)); // Stow after each point with BLTouch "HIGH SPEED" mode for push-pin safety - const float z_probed_height = probe.probe_at_point(tramming_points[tram_index], TERN(BLTOUCH_HS_MODE, PROBE_PT_STOW, PROBE_PT_RAISE), 0, true); + const float z_probed_height = probe.probe_at_point(tramming_points[tram_index], TERN0(BLTOUCH, bltouch.high_speed_mode) ? PROBE_PT_STOW : PROBE_PT_RAISE, 0, true); z_measured[tram_index] = z_probed_height; if (reference_index < 0) reference_index = tram_index; move_to_tramming_wait_pos(); diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 9ff668bf30..2248c52d85 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -1803,8 +1803,8 @@ void prepare_line_to_destination() { if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Home Fast: ", move_length, "mm"); do_homing_move(axis, move_length, 0.0, !use_probe_bump); - #if BOTH(HOMING_Z_WITH_PROBE, BLTOUCH_SLOW_MODE) - if (axis == Z_AXIS) bltouch.stow(); // Intermediate STOW (in LOW SPEED MODE) + #if BOTH(HOMING_Z_WITH_PROBE, BLTOUCH) + if (axis == Z_AXIS && !bltouch.high_speed_mode) bltouch.stow(); // Intermediate STOW (in LOW SPEED MODE) #endif // If a second homing move is configured... @@ -1837,8 +1837,9 @@ void prepare_line_to_destination() { } #endif - #if BOTH(HOMING_Z_WITH_PROBE, BLTOUCH_SLOW_MODE) - if (axis == Z_AXIS && bltouch.deploy()) return; // Intermediate DEPLOY (in LOW SPEED MODE) + #if BOTH(HOMING_Z_WITH_PROBE, BLTOUCH) + if (axis == Z_AXIS && !bltouch.high_speed_mode && bltouch.deploy()) + return; // Intermediate DEPLOY (in LOW SPEED MODE) #endif // Slow move towards endstop until triggered diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 7e08db7a5b..540b4e1ae6 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -489,8 +489,10 @@ 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 (TERN0(BLTOUCH_SLOW_MODE, bltouch.deploy())) return true; // Deploy in LOW SPEED MODE on every probe action + #if ENABLED(BLTOUCH) + if (!bltouch.high_speed_mode && bltouch.deploy()) + return true; // Deploy in LOW SPEED MODE on every probe action + #endif // Disable stealthChop if used. Enable diag1 pin on driver. #if ENABLED(SENSORLESS_PROBING) @@ -531,8 +533,10 @@ bool Probe::probe_down_to_z(const_float_t z, const_feedRate_t fr_mm_s) { set_homing_current(false); #endif - if (probe_triggered && TERN0(BLTOUCH_SLOW_MODE, bltouch.stow())) // Stow in LOW SPEED MODE on every trigger - return true; + #if ENABLED(BLTOUCH) + if (probe_triggered && !bltouch.high_speed_mode && bltouch.stow()) + return true; // Stow in LOW SPEED MODE on every trigger + #endif // Clear endstop flags endstops.hit_on_purpose(); @@ -762,8 +766,9 @@ float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRai DEBUG_POS("", current_position); } - #if BOTH(BLTOUCH, BLTOUCH_HS_MODE) - if (bltouch.triggered()) bltouch._reset(); + #if ENABLED(BLTOUCH) + if (bltouch.high_speed_mode && bltouch.triggered()) + bltouch._reset(); #endif // On delta keep Z below clip height or do_blocking_move_to will abort diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index a9c771240c..8a32d4c57e 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -301,7 +301,10 @@ typedef struct SettingsDataStruct { // // BLTOUCH // - bool bltouch_last_written_mode; + bool bltouch_od_5v_mode; + #ifdef BLTOUCH_HS_MODE + bool bltouch_high_speed_mode; // M401 S + #endif // // Kinematic Settings @@ -918,9 +921,15 @@ void MarlinSettings::postprocess() { // BLTOUCH // { - _FIELD_TEST(bltouch_last_written_mode); - const bool bltouch_last_written_mode = TERN(BLTOUCH, bltouch.last_written_mode, false); - EEPROM_WRITE(bltouch_last_written_mode); + _FIELD_TEST(bltouch_od_5v_mode); + const bool bltouch_od_5v_mode = TERN0(BLTOUCH, bltouch.od_5v_mode); + EEPROM_WRITE(bltouch_od_5v_mode); + + #ifdef BLTOUCH_HS_MODE + _FIELD_TEST(bltouch_high_speed_mode); + const bool bltouch_high_speed_mode = TERN0(BLTOUCH, bltouch.high_speed_mode); + EEPROM_WRITE(bltouch_high_speed_mode); + #endif } // @@ -1810,13 +1819,23 @@ void MarlinSettings::postprocess() { // BLTOUCH // { - _FIELD_TEST(bltouch_last_written_mode); + _FIELD_TEST(bltouch_od_5v_mode); #if ENABLED(BLTOUCH) - const bool &bltouch_last_written_mode = bltouch.last_written_mode; + const bool &bltouch_od_5v_mode = bltouch.od_5v_mode; #else - bool bltouch_last_written_mode; + bool bltouch_od_5v_mode; + #endif + EEPROM_READ(bltouch_od_5v_mode); + + #ifdef BLTOUCH_HS_MODE + _FIELD_TEST(bltouch_high_speed_mode); + #if ENABLED(BLTOUCH) + const bool &bltouch_high_speed_mode = bltouch.high_speed_mode; + #else + bool bltouch_high_speed_mode; + #endif + EEPROM_READ(bltouch_high_speed_mode); #endif - EEPROM_READ(bltouch_last_written_mode); } // @@ -2827,11 +2846,11 @@ void MarlinSettings::reset() { TERN_(HAS_PTC, ptc.reset()); // - // BLTOUCH + // BLTouch // - //#if ENABLED(BLTOUCH) - // bltouch.last_written_mode; - //#endif + #ifdef BLTOUCH_HS_MODE + bltouch.high_speed_mode = ENABLED(BLTOUCH_HS_MODE); + #endif // // Kinematic settings From c80ef71c6bd5b3fed36f1b6485d040391a70af70 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 23 Dec 2021 01:05:31 +0000 Subject: [PATCH 250/532] [cron] Bump distribution date (2021-12-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 ddabd7b152..fac298246f 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 "2021-12-22" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 68cfee56e1..e75f1a1788 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 "2021-12-22" + #define STRING_DISTRIBUTION_DATE "2021-12-23" #endif /** From 1b876c170fc62abbb7381cfa79f2456ab4ec48ac Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 23 Dec 2021 07:49:15 +0100 Subject: [PATCH 251/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20settings=20G21=20r?= =?UTF-8?q?eport=20(#23338)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/settings.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 8a32d4c57e..5fda608e38 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -3171,12 +3171,13 @@ void MarlinSettings::reset() { // Announce current units, in case inches are being displayed // CONFIG_ECHO_HEADING("Linear Units"); + CONFIG_ECHO_START(); #if ENABLED(INCH_MODE_SUPPORT) - SERIAL_ECHO_MSG(" G2", AS_DIGIT(parser.linear_unit_factor == 1.0), " ;"); + SERIAL_ECHOPGM(" G2", AS_DIGIT(parser.linear_unit_factor == 1.0), " ;"); #else - SERIAL_ECHO_MSG(" G21 ;"); + SERIAL_ECHOPGM(" G21 ;"); #endif - gcode.say_units(); + gcode.say_units(); // " (in/mm)" // // M149 Temperature units From da67deb621bcf140e2f843c030d2b2b195c39ef9 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Thu, 23 Dec 2021 08:32:27 +0100 Subject: [PATCH 252/532] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Fix=20missing=20br?= =?UTF-8?q?ace=20(#23337)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Followup to #22916 Co-authored-by: Scott Lahteine --- Marlin/src/feature/bltouch.cpp | 16 +++++++++------- Marlin/src/lcd/menu/menu_bed_corners.cpp | 2 +- Marlin/src/lcd/menu/menu_configuration.cpp | 8 +++++--- buildroot/tests/BIGTREE_GTR_V1_0_usb_flash_drive | 4 ++-- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/Marlin/src/feature/bltouch.cpp b/Marlin/src/feature/bltouch.cpp index d3348e79f0..b1cc30bee0 100644 --- a/Marlin/src/feature/bltouch.cpp +++ b/Marlin/src/feature/bltouch.cpp @@ -68,13 +68,15 @@ void BLTouch::init(const bool set_voltage/*=false*/) { #else - if (DEBUGGING(LEVELING)) { - PGMSTR(mode0, "OD"); - PGMSTR(mode1, "5V"); - DEBUG_ECHOPGM("BLTouch Mode: "); - DEBUG_ECHOPGM_P(bltouch.od_5v_mode ? mode1 : mode0); - DEBUG_ECHOLNPGM(" (Default " TERN(BLTOUCH_SET_5V_MODE, "5V", "OD") ")"); - } + #ifdef DEBUG_OUT + if (DEBUGGING(LEVELING)) { + PGMSTR(mode0, "OD"); + PGMSTR(mode1, "5V"); + DEBUG_ECHOPGM("BLTouch Mode: "); + DEBUG_ECHOPGM_P(bltouch.od_5v_mode ? mode1 : mode0); + DEBUG_ECHOLNPGM(" (Default " TERN(BLTOUCH_SET_5V_MODE, "5V", "OD") ")"); + } + #endif const bool should_set = od_5v_mode != ENABLED(BLTOUCH_SET_5V_MODE); diff --git a/Marlin/src/lcd/menu/menu_bed_corners.cpp b/Marlin/src/lcd/menu/menu_bed_corners.cpp index 5740978639..38a074eb01 100644 --- a/Marlin/src/lcd/menu/menu_bed_corners.cpp +++ b/Marlin/src/lcd/menu/menu_bed_corners.cpp @@ -292,7 +292,7 @@ static void _lcd_level_bed_corners_get_next_position() { } while (good_points < nr_edge_points); // loop until all points within tolerance #if ENABLED(BLTOUCH) - if (bltouch.high_speed_mode) + if (bltouch.high_speed_mode) { // In HIGH SPEED MODE do clearance and stow at the very end do_blocking_move_to_z(current_position.z + LEVEL_CORNERS_Z_HOP); bltouch.stow(); diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 19b3dcbafb..4cd43e787a 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -53,6 +53,8 @@ #include "../../libs/buzzer.h" #endif +#include "../../core/debug_out.h" + #define HAS_DEBUG_MENU ENABLED(LCD_PROGRESS_BAR_TEST) void menu_advanced_settings(); @@ -219,9 +221,9 @@ void menu_advanced_settings(); void bltouch_report() { PGMSTR(mode0, "OD"); PGMSTR(mode1, "5V"); - SERIAL_ECHOPGM("BLTouch Mode: "); - SERIAL_ECHOPGM_P(bltouch.od_5v_mode ? mode1 : mode0); - SERIAL_ECHOLNPGM(" (Default " TERN(BLTOUCH_SET_5V_MODE, "5V", "OD") ")"); + DEBUG_ECHOPGM("BLTouch Mode: "); + DEBUG_ECHOPGM_P(bltouch.od_5v_mode ? mode1 : mode0); + DEBUG_ECHOLNPGM(" (Default " TERN(BLTOUCH_SET_5V_MODE, "5V", "OD") ")"); char mess[21]; strcpy_P(mess, PSTR("BLTouch Mode: ")); strcpy_P(&mess[15], bltouch.od_5v_mode ? mode1 : mode0); diff --git a/buildroot/tests/BIGTREE_GTR_V1_0_usb_flash_drive b/buildroot/tests/BIGTREE_GTR_V1_0_usb_flash_drive index 197ece5dfd..34bf77be27 100755 --- a/buildroot/tests/BIGTREE_GTR_V1_0_usb_flash_drive +++ b/buildroot/tests/BIGTREE_GTR_V1_0_usb_flash_drive @@ -10,8 +10,8 @@ restore_configs opt_set MOTHERBOARD BOARD_BTT_GTR_V1_0 SERIAL_PORT 3 \ EXTRUDERS 8 TEMP_SENSOR_1 1 TEMP_SENSOR_2 1 TEMP_SENSOR_3 1 TEMP_SENSOR_4 1 TEMP_SENSOR_5 1 TEMP_SENSOR_6 1 TEMP_SENSOR_7 1 opt_enable SDSUPPORT USB_FLASH_DRIVE_SUPPORT USE_OTG_USB_HOST \ - REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER BLTOUCH NEOPIXEL_LED Z_SAFE_HOMING \ - FILAMENT_RUNOUT_SENSOR NOZZLE_PARK_FEATURE ADVANCED_PAUSE_FEATURE + REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER BLTOUCH LEVEL_BED_CORNERS LEVEL_CORNERS_USE_PROBE \ + NEOPIXEL_LED Z_SAFE_HOMING FILAMENT_RUNOUT_SENSOR NOZZLE_PARK_FEATURE ADVANCED_PAUSE_FEATURE # Not necessary to enable auto-fan for all extruders to hit problematic code paths opt_set E0_AUTO_FAN_PIN PC10 E1_AUTO_FAN_PIN PC11 E2_AUTO_FAN_PIN PC12 NEOPIXEL_PIN PF13 \ X_DRIVER_TYPE TMC2208 Y_DRIVER_TYPE TMC2130 \ From 3e737cbc910315364b77af6b1d6d3e92306f48f3 Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Thu, 23 Dec 2021 15:19:39 +0700 Subject: [PATCH 253/532] =?UTF-8?q?=F0=9F=94=A7=20Group=20FAST=5FPWM=5FFAN?= =?UTF-8?q?.options=20(#23331)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/Configuration.h | 3 --- Marlin/Configuration_adv.h | 29 +++++++++++++++------- Marlin/src/inc/Conditionals_post.h | 11 -------- Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h | 1 - 4 files changed, 20 insertions(+), 24 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index bb89bc14a3..c425746bb5 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -2841,9 +2841,6 @@ // :[1,2,3,4,5,6,7,8] //#define NUM_M106_FANS 1 -// Increase the FAN PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino -//#define FAST_PWM_FAN - // Use software PWM to drive the fan, as for the heaters. This uses a very low frequency // which is not as annoying as with the hardware PWM. On the other hand, if this frequency // is too low, you should also increment SOFT_PWM_SCALE. diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index e50e0cde89..3eb836ec65 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -549,18 +549,21 @@ //#define FAN_MAX_PWM 128 /** - * FAST PWM FAN Settings + * Fan Fast PWM * - * Use to change the FAST FAN PWM frequency (if enabled in Configuration.h) - * Combinations of PWM Modes, prescale values and TOP resolutions are used internally to produce a - * frequency as close as possible to the desired frequency. + * Combinations of PWM Modes, prescale values and TOP resolutions are used internally + * to produce a frequency as close as possible to the desired frequency. * - * FAST_PWM_FAN_FREQUENCY [undefined by default] + * FAST_PWM_FAN_FREQUENCY * Set this to your desired frequency. - * If left undefined this defaults to F = F_CPU/(2*255*1) - * i.e., F = 31.4kHz on 16MHz microcontrollers or F = 39.2kHz on 20MHz microcontrollers. - * These defaults are the same as with the old FAST_PWM_FAN implementation - no migration is required + * For AVR, if left undefined this defaults to F = F_CPU/(2*255*1) + * i.e., F = 31.4kHz on 16MHz microcontrollers or F = 39.2kHz on 20MHz microcontrollers. + * For non AVR, if left undefined this defaults to F = 1Khz. + * This F value is only to protect the hardware from an absence of configuration + * and not to complete it when users are not aware that the frequency must be specifically set to support the target board. + * * NOTE: Setting very low frequencies (< 10 Hz) may result in unexpected timer behavior. + * Setting very high frequencies can damage your hardware. * * USE_OCR2A_AS_TOP [undefined by default] * Boards that use TIMER2 for PWM have limitations resulting in only a few possible frequencies on TIMER2: @@ -570,9 +573,17 @@ * PWM on pin OC2A. Only use this option if you don't need PWM on 0C2A. (Check your schematic.) * USE_OCR2A_AS_TOP sacrifices duty cycle control resolution to achieve this broader range of frequencies. */ +//#define FAST_PWM_FAN // Increase the fan PWM frequency. Removes the PWM noise but increases heating in the FET/Arduino #if ENABLED(FAST_PWM_FAN) - //#define FAST_PWM_FAN_FREQUENCY 31400 + //#define FAST_PWM_FAN_FREQUENCY 31400 // Define here to override the defaults below //#define USE_OCR2A_AS_TOP + #ifndef FAST_PWM_FAN_FREQUENCY + #ifdef __AVR__ + #define FAST_PWM_FAN_FREQUENCY ((F_CPU) / (2 * 255 * 1)) + #else + #define FAST_PWM_FAN_FREQUENCY 1000U + #endif + #endif #endif /** diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 7fb8395506..95c8f7737b 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -2667,17 +2667,6 @@ #error "FAN_OFF_PWM must be less than or equal to FAN_MIN_PWM." #endif -/** - * FAST PWM FAN default PWM frequency - */ -#if !defined(FAST_PWM_FAN_FREQUENCY) && ENABLED(FAST_PWM_FAN) - #ifdef __AVR__ - #define FAST_PWM_FAN_FREQUENCY ((F_CPU) / (2 * 255 * 1)) - #else - #define FAST_PWM_FAN_FREQUENCY 1000U - #endif -#endif - /** * Controller Fan Settings */ diff --git a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h index c6f1e014e0..15c6955a83 100644 --- a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h +++ b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h @@ -95,7 +95,6 @@ #define FAN_MAX_PWM 255 #else #define FAST_PWM_FAN // STM32 Variant allow TIMER2 Hardware PWM - #define FAST_PWM_FAN_FREQUENCY 31400 // This frequency allow a good range, fan starts at 3%, half noise at 50% #define FAN_MIN_PWM 5 #define FAN_MAX_PWM 255 #endif From df9eb566c763be34f4c7ed51fc7526a840df860d Mon Sep 17 00:00:00 2001 From: MrAlvin Date: Thu, 23 Dec 2021 10:47:52 +0100 Subject: [PATCH 254/532] =?UTF-8?q?=F0=9F=9A=B8=20Show=20mm'ss=20during=20?= =?UTF-8?q?first=20hour=20(#23335)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/libs/duration_t.h | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/Marlin/src/libs/duration_t.h b/Marlin/src/libs/duration_t.h index 2528bcdbff..df2c9cd099 100644 --- a/Marlin/src/libs/duration_t.h +++ b/Marlin/src/libs/duration_t.h @@ -127,11 +127,11 @@ struct duration_t { * 59s */ char* toString(char * const buffer) const { - int y = this->year(), - d = this->day() % 365, - h = this->hour() % 24, - m = this->minute() % 60, - s = this->second() % 60; + const uint16_t y = this->year(), + d = this->day() % 365, + h = this->hour() % 24, + m = this->minute() % 60, + s = this->second() % 60; if (y) sprintf_P(buffer, PSTR("%iy %id %ih %im %is"), y, d, h, m, s); else if (d) sprintf_P(buffer, PSTR("%id %ih %im %is"), d, h, m, s); @@ -149,23 +149,29 @@ struct duration_t { * * Output examples: * 123456789 (strlen) + * 12'34 * 99:59 * 11d 12:33 */ uint8_t toDigital(char *buffer, bool with_days=false) const { - uint16_t h = uint16_t(this->hour()), - m = uint16_t(this->minute() % 60UL); + const uint16_t h = uint16_t(this->hour()), + m = uint16_t(this->minute() % 60UL); if (with_days) { - uint16_t d = this->day(); - sprintf_P(buffer, PSTR("%hud %02hu:%02hu"), d, h % 24, m); + const uint16_t d = this->day(); + sprintf_P(buffer, PSTR("%hud %02hu:%02hu"), d, h % 24, m); // 1d 23:45 return d >= 10 ? 9 : 8; } + else if (!h) { + const uint16_t s = uint16_t(this->second() % 60UL); + sprintf_P(buffer, PSTR("%02hu'%02hu"), m, s); // 12'34 + return 5; + } else if (h < 100) { - sprintf_P(buffer, PSTR("%02hu:%02hu"), h, m); + sprintf_P(buffer, PSTR("%02hu:%02hu"), h, m); // 12:34 return 5; } else { - sprintf_P(buffer, PSTR("%hu:%02hu"), h, m); + sprintf_P(buffer, PSTR("%hu:%02hu"), h, m); // 123:45 return 6; } } From ca0215ba646e410e4828ebf14c86e75fc8765eeb Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 24 Dec 2021 01:04:40 +0000 Subject: [PATCH 255/532] [cron] Bump distribution date (2021-12-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 fac298246f..8dc516a329 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 "2021-12-23" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 e75f1a1788..df523fb389 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 "2021-12-23" + #define STRING_DISTRIBUTION_DATE "2021-12-24" #endif /** From 80a537cd13f386fe8140ca672c4aa51d597d5e21 Mon Sep 17 00:00:00 2001 From: Attila BODY Date: Fri, 24 Dec 2021 06:57:20 +0100 Subject: [PATCH 256/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Robin=20Nano=20v3?= =?UTF-8?q?=20filament=20runout=20pins=20(#23344)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/pins/mega/pins_OVERLORD.h | 2 +- Marlin/src/pins/pins_postprocess.h | 7 +++++-- Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h | 1 - Marlin/src/pins/sam/pins_RURAMPS4D_11.h | 6 ++---- Marlin/src/pins/sam/pins_RURAMPS4D_13.h | 6 ++---- Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h | 2 +- Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h | 4 ++-- 7 files changed, 13 insertions(+), 15 deletions(-) diff --git a/Marlin/src/pins/mega/pins_OVERLORD.h b/Marlin/src/pins/mega/pins_OVERLORD.h index 0884d8ecb5..98f8da5719 100644 --- a/Marlin/src/pins/mega/pins_OVERLORD.h +++ b/Marlin/src/pins/mega/pins_OVERLORD.h @@ -49,7 +49,7 @@ #define Z_MIN_PROBE_PIN 46 // JP4, Tfeed1 #endif -#if ENABLED(FILAMENT_RUNOUT_SENSOR) +#ifndef FIL_RUNOUT_PIN #define FIL_RUNOUT_PIN 44 // JP3, Tfeed2 #endif diff --git a/Marlin/src/pins/pins_postprocess.h b/Marlin/src/pins/pins_postprocess.h index 1e6703fd4a..fe8c4c6c41 100644 --- a/Marlin/src/pins/pins_postprocess.h +++ b/Marlin/src/pins/pins_postprocess.h @@ -546,14 +546,17 @@ #undef K_MAX_PIN #endif -// Filament Sensor first pin alias #if HAS_FILAMENT_SENSOR - #define FIL_RUNOUT1_PIN FIL_RUNOUT_PIN + #define FIL_RUNOUT1_PIN FIL_RUNOUT_PIN // Filament Sensor first pin alias #else #undef FIL_RUNOUT_PIN #undef FIL_RUNOUT1_PIN #endif +#if NUM_RUNOUT_SENSORS < 2 + #undef FIL_RUNOUT2_PIN +#endif + #ifndef LCD_PINS_D4 #define LCD_PINS_D4 -1 #endif diff --git a/Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h b/Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h index 79ac308ce7..0a94a582d4 100644 --- a/Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h +++ b/Marlin/src/pins/ramps/pins_FORMBOT_TREX3.h @@ -134,7 +134,6 @@ #define FAN_PIN 9 #define FAN1_PIN 12 -#define NUM_RUNOUT_SENSORS 2 #define FIL_RUNOUT_PIN 22 #define FIL_RUNOUT2_PIN 21 diff --git a/Marlin/src/pins/sam/pins_RURAMPS4D_11.h b/Marlin/src/pins/sam/pins_RURAMPS4D_11.h index 5e612d3e8c..65ecd37e62 100644 --- a/Marlin/src/pins/sam/pins_RURAMPS4D_11.h +++ b/Marlin/src/pins/sam/pins_RURAMPS4D_11.h @@ -121,10 +121,8 @@ #define Z_MIN_PROBE_PIN 49 #endif -#if HAS_FILAMENT_SENSOR - #ifndef FIL_RUNOUT_PIN - #define FIL_RUNOUT_PIN Y_MIN_PIN - #endif +#ifndef FIL_RUNOUT_PIN + #define FIL_RUNOUT_PIN Y_MIN_PIN #endif // diff --git a/Marlin/src/pins/sam/pins_RURAMPS4D_13.h b/Marlin/src/pins/sam/pins_RURAMPS4D_13.h index 37a76c5278..76a2d5a398 100644 --- a/Marlin/src/pins/sam/pins_RURAMPS4D_13.h +++ b/Marlin/src/pins/sam/pins_RURAMPS4D_13.h @@ -109,10 +109,8 @@ #define Z_MIN_PROBE_PIN 49 #endif -#if HAS_FILAMENT_SENSOR - #ifndef FIL_RUNOUT_PIN - #define FIL_RUNOUT_PIN Y_MIN_PIN - #endif +#ifndef FIL_RUNOUT_PIN + #define FIL_RUNOUT_PIN Y_MIN_PIN #endif // diff --git a/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h b/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h index 1b37940e2a..a450515a79 100644 --- a/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h +++ b/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h @@ -68,7 +68,7 @@ #if SERVO0_PIN == BEEPER_PIN #undef BEEPER_PIN #endif -#elif ENABLED(FILAMENT_RUNOUT_SENSOR) +#elif HAS_FILAMENT_SENSOR #ifndef FIL_RUNOUT_PIN #define FIL_RUNOUT_PIN 27 #endif diff --git a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h index c2dea50b29..bbf162bb0d 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h @@ -145,10 +145,10 @@ #endif #ifndef FIL_RUNOUT_PIN - #define FIL_RUNOUT_PIN MT_DET_1_PIN + #define FIL_RUNOUT_PIN PA4 #endif #ifndef FIL_RUNOUT2_PIN - #define FIL_RUNOUT2_PIN MT_DET_2_PIN + #define FIL_RUNOUT2_PIN PE6 #endif #ifndef POWER_LOSS_PIN From 21cd71550663f46c361e6798c04ebcc0165391f3 Mon Sep 17 00:00:00 2001 From: Sola <42537573+solawc@users.noreply.github.com> Date: Fri, 24 Dec 2021 14:03:32 +0800 Subject: [PATCH 257/532] =?UTF-8?q?=E2=9C=A8=20MKS=20TinyBee=20board=20sup?= =?UTF-8?q?port=20(#23340)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Sola <42537573+solawc@users.noreply.github.com> --- Marlin/src/core/boards.h | 1 + Marlin/src/pins/esp32/pins_MKS_TINYBEE.h | 207 +++++++++++++++++++++++ Marlin/src/pins/pins.h | 2 + ini/esp32.ini | 5 + 4 files changed, 215 insertions(+) create mode 100644 Marlin/src/pins/esp32/pins_MKS_TINYBEE.h diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 674d203027..aee9b3c492 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -433,6 +433,7 @@ #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) // // SAMD51 ARM Cortex M4 diff --git a/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h b/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h new file mode 100644 index 0000000000..bfa38adadf --- /dev/null +++ b/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h @@ -0,0 +1,207 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 + +/** + * MRR ESPE pin assignments + * MRR ESPE is a 3D printer control board based on the ESP32 microcontroller. + * Supports 5 stepper drivers (using I2S stepper stream), heated bed, + * single hotend, and LCD controller. + */ + +#include "env_validate.h" + +#if EXTRUDERS > 2 || E_STEPPERS > 2 + #error "MKS ESP Nano only supports two E Steppers. Comment out this line to continue." +#elif HOTENDS > 2 + #error "MKS ESP Nano only supports two hotend / E-stepper. Comment out this line to continue." +#endif + +#define BOARD_INFO_NAME "MKS TinyBee" +#define BOARD_WEBSITE_URL "https://github.com/makerbase-mks" +#define DEFAULT_MACHINE_NAME BOARD_INFO_NAME + +// +// Servos +// +#define SERVO0_PIN 2 + +// +// Limit Switches +// +#define X_STOP_PIN 33 +#define Y_STOP_PIN 32 +#define Z_STOP_PIN 22 +//#define FIL_RUNOUT_PIN 35 + +// +// Enable I2S stepper stream +// +#define I2S_STEPPER_STREAM +#if ENABLED(I2S_STEPPER_STREAM) + #define I2S_WS 26 + #define I2S_BCK 25 + #define I2S_DATA 27 + #if ENABLED(LIN_ADVANCE) + #error "I2S stream is currently incompatible with LIN_ADVANCE." + #endif +#endif + +// +// Steppers +// +#define X_STEP_PIN 129 +#define X_DIR_PIN 130 +#define X_ENABLE_PIN 128 + +#define Y_STEP_PIN 132 +#define Y_DIR_PIN 133 +#define Y_ENABLE_PIN 131 + +#define Z_STEP_PIN 135 +#define Z_DIR_PIN 136 +#define Z_ENABLE_PIN 134 + +#define E0_STEP_PIN 138 +#define E0_DIR_PIN 139 +#define E0_ENABLE_PIN 137 + +#define E1_STEP_PIN 141 +#define E1_DIR_PIN 142 +#define E1_ENABLE_PIN 140 + +#define Z2_STEP_PIN 141 +#define Z2_DIR_PIN 142 +#define Z2_ENABLE_PIN 140 + +// +// Temperature Sensors +// +#define TEMP_0_PIN 36 // Analog Input +#define TEMP_1_PIN 34 // Analog Input, you need set R6=0Ω and R7=NC +#define TEMP_BED_PIN 39 // Analog Input + +// +// Heaters / Fans +// +#define HEATER_0_PIN 145 +#define HEATER_1_PIN 146 +#define FAN_PIN 147 +#define FAN1_PIN 148 +#define HEATER_BED_PIN 144 + +//#define CONTROLLER_FAN_PIN 148 +//#define E0_AUTO_FAN_PIN 148 // need to update Configuration_adv.h @section extruder +//#define E1_AUTO_FAN_PIN 149 // need to update Configuration_adv.h @section extruder + +// +// MicroSD card +// +#define SD_MOSI_PIN 23 +#define SD_MISO_PIN 19 +#define SD_SCK_PIN 18 +#define SDSS 5 +#define SD_DETECT_PIN 34 // IO34 default is SD_DET signal(Jump to SDDET) +#define USES_SHARED_SPI // SPI is shared by SD card with TMC SPI drivers + +/** + * ------ ------ + * (BEEPER) 149 |10 9 | 13 (BTN_ENC) (SPI MISO) 19 |10 9 | 18 (SPI SCK) + * (LCD_EN) 21 | 8 7 | 4 (LCD_RS) (BTN_EN1) 14 | 8 7 | 5 (SPI CS) + * (LCD_D4) 0 | 6 5 16 (LCD_D5) (BTN_EN2) 12 | 6 5 23 (SPI MOSI) + * (LCD_D6) 15 | 4 3 | 17 (LCD_D7) (SPI_DET) 34 | 4 3 | RESET + * GND | 2 1 | 5V GND | 2 1 | 3.3V + * ------ ------ + * EXP1 EXP2 + */ + +#define EXP1_03_PIN 17 +#define EXP1_04_PIN 15 +#define EXP1_05_PIN 16 +#define EXP1_06_PIN 0 +#define EXP1_07_PIN 4 +#define EXP1_08_PIN 21 +#define EXP1_09_PIN 13 +#define EXP1_10_PIN 149 + +#define EXP2_03_PIN -1 // RESET +#define EXP2_04_PIN 34 +#define EXP2_05_PIN 23 +#define EXP2_06_PIN 12 +#define EXP2_07_PIN 5 +#define EXP2_08_PIN 14 +#define EXP2_09_PIN 18 +#define EXP2_10_PIN 19 + +#if HAS_WIRED_LCD + + #define BEEPER_PIN 149 + #define BTN_ENC 13 + #define LCD_PINS_ENABLE 21 + #define LCD_PINS_RS 4 + #define BTN_EN1 14 + #define BTN_EN2 12 + #define LCD_BACKLIGHT_PIN -1 + + // MKS MINI12864 and MKS LCD12864B; If using MKS LCD12864A (Need to remove RPK2 resistor) + #if ENABLED(MKS_MINI_12864) + + //#define LCD_BACKLIGHT_PIN -1 + //#define LCD_RESET_PIN -1 + #define DOGLCD_A0 15 + #define DOGLCD_CS 16 + //#define DOGLCD_SCK 19 + //#define DOGLCD_MOSI 23 + + // Required for MKS_MINI_12864 with this board + //#define MKS_LCD12864B + + #elif ENABLED(MKS_MINI_12864_V3) + + #define DOGLCD_CS EXP1_08_PIN + #define DOGLCD_A0 EXP1_07_PIN + #define LCD_PINS_DC DOGLCD_A0 + #define LCD_BACKLIGHT_PIN -1 + #define LCD_RESET_PIN EXP1_06_PIN + #define NEOPIXEL_PIN EXP1_05_PIN + #define DOGLCD_MOSI EXP2_05_PIN + #define DOGLCD_SCK EXP2_09_PIN + #if SD_CONNECTION_IS(ONBOARD) + #define FORCE_SOFT_SPI + #endif + + #else // !MKS_MINI_12864 + + #define LCD_PINS_D4 0 + #if ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER) + #define LCD_PINS_D5 16 + #define LCD_PINS_D6 15 + #define LCD_PINS_D7 17 + #endif + + #define BOARD_ST7920_DELAY_1 96 + #define BOARD_ST7920_DELAY_2 48 + #define BOARD_ST7920_DELAY_3 600 + + #endif // !MKS_MINI_12864 + +#endif // HAS_WIRED_LCD diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 54967197f0..0f0f42508d 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -711,6 +711,8 @@ #include "esp32/pins_PANDA_ZHU.h" // ESP32 env:PANDA #elif MB(PANDA_M4) #include "esp32/pins_PANDA_M4.h" // ESP32 env:PANDA +#elif MB(MKS_TINYBEE) + #include "esp32/pins_MKS_TINYBEE.h" // ESP32 env:mks_tinybee // // Adafruit Grand Central M4 (SAMD51 ARM Cortex-M4) diff --git a/ini/esp32.ini b/ini/esp32.ini index 9c0c44db67..0815486cc9 100644 --- a/ini/esp32.ini +++ b/ini/esp32.ini @@ -37,3 +37,8 @@ lib_deps = ${common.lib_deps} board_build.partitions = Marlin/src/HAL/ESP32/esp32.csv upload_speed = 115200 monitor_speed = 115200 + +[env:mks_tinybee] +extends = env:esp32 +platform = espressif32@2.1.0 +board_build.partitions = default_8MB.csv From d5dff1948d900ce6fdec31e3f839e905ba09a46b Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 24 Dec 2021 01:46:51 -0600 Subject: [PATCH 258/532] =?UTF-8?q?=F0=9F=94=A7=20Sanity=20check=20MMU2=5F?= =?UTF-8?q?MENUS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/SanityCheck.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index fbc0e3d1f0..c8ac48f7cf 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1070,7 +1070,9 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #elif ENABLED(MMU_EXTRUDER_SENSOR) && DISABLED(FILAMENT_RUNOUT_SENSOR) #error "MMU_EXTRUDER_SENSOR requires FILAMENT_RUNOUT_SENSOR. Enable it to continue." #elif ENABLED(MMU_EXTRUDER_SENSOR) && !HAS_LCD_MENU - #error "MMU_EXTRUDER_SENSOR requires an LCD supporting MarlinUI to be enabled." + #error "MMU_EXTRUDER_SENSOR requires an LCD supporting MarlinUI." + #elif ENABLED(MMU2_MENUS) && !HAS_LCD_MENU + #error "MMU2_MENUS requires an LCD supporting MarlinUI." #elif DISABLED(ADVANCED_PAUSE_FEATURE) static_assert(nullptr == strstr(MMU2_FILAMENT_RUNOUT_SCRIPT, "M600"), "ADVANCED_PAUSE_FEATURE is required to use M600 with PRUSA_MMU2(S) / HAS_EXTENDABLE_MMU(S)."); #endif From 6d09d1d7fb2ce06dfe2693d841e3d417fd33c1b2 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 25 Dec 2021 01:04:01 +0000 Subject: [PATCH 259/532] [cron] Bump distribution date (2021-12-25) --- 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 8dc516a329..596e910a1f 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 "2021-12-24" +//#define STRING_DISTRIBUTION_DATE "2021-12-25" /** * 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 df523fb389..b43547ef53 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 "2021-12-24" + #define STRING_DISTRIBUTION_DATE "2021-12-25" #endif /** From cd1920b35057ee21c77f568af996434303122494 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 24 Dec 2021 20:59:28 -0600 Subject: [PATCH 260/532] =?UTF-8?q?=F0=9F=94=A8=20Ignore=20cmake=20generat?= =?UTF-8?q?ed=20build=20folder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 2b40149b5f..0af55339d8 100755 --- a/.gitignore +++ b/.gitignore @@ -155,6 +155,7 @@ spi_flash.bin CMakeLists.txt src/CMakeLists.txt CMakeListsPrivate.txt +build/ # CLion cmake-build-* From 532f21f96f421e485b472025de2cde9677999179 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 24 Dec 2021 21:32:00 -0600 Subject: [PATCH 261/532] =?UTF-8?q?=F0=9F=94=A8=20Ignore=20sublime=20works?= =?UTF-8?q?pace=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0af55339d8..72fd117bd2 100755 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ bdf2u8g marlin_config.json mczip.h *.gen +*.sublime-workspace # # OS From e211ff148c39bf5dace72de7cffbb83f19d3f1bf Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 24 Dec 2021 21:33:59 -0600 Subject: [PATCH 262/532] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20HAL=20a?= =?UTF-8?q?s=20singleton=20(#23295)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/AVR/HAL.cpp | 14 +- Marlin/src/HAL/AVR/HAL.h | 184 +++++++++++++--------- Marlin/src/HAL/AVR/MarlinSerial.cpp | 4 +- Marlin/src/HAL/AVR/fast_pwm.cpp | 11 +- Marlin/src/HAL/AVR/timers.h | 4 +- Marlin/src/HAL/DUE/HAL.cpp | 45 ++---- Marlin/src/HAL/DUE/HAL.h | 132 ++++++++++------ Marlin/src/HAL/DUE/MarlinSerial.cpp | 4 +- Marlin/src/HAL/DUE/timers.h | 2 +- Marlin/src/HAL/ESP32/HAL.cpp | 35 +++-- Marlin/src/HAL/ESP32/HAL.h | 142 ++++++++++------- Marlin/src/HAL/ESP32/timers.h | 4 +- Marlin/src/HAL/LINUX/HAL.cpp | 39 ++--- Marlin/src/HAL/LINUX/HAL.h | 147 ++++++++++++------ Marlin/src/HAL/LINUX/arduino.cpp | 4 +- Marlin/src/HAL/LINUX/include/Arduino.h | 5 +- Marlin/src/HAL/LINUX/timers.h | 4 +- Marlin/src/HAL/LPC1768/HAL.cpp | 46 +++--- Marlin/src/HAL/LPC1768/HAL.h | 162 +++++++++++++------- Marlin/src/HAL/LPC1768/Servo.h | 3 +- Marlin/src/HAL/LPC1768/fast_pwm.cpp | 14 +- Marlin/src/HAL/LPC1768/main.cpp | 6 +- Marlin/src/HAL/LPC1768/timers.h | 2 +- Marlin/src/HAL/NATIVE_SIM/HAL.h | 173 +++++++++++++-------- Marlin/src/HAL/NATIVE_SIM/timers.h | 4 +- Marlin/src/HAL/SAMD51/HAL.cpp | 26 ++-- Marlin/src/HAL/SAMD51/HAL.h | 125 +++++++++------ Marlin/src/HAL/STM32/HAL.cpp | 28 ++-- Marlin/src/HAL/STM32/HAL.h | 179 ++++++++++++---------- Marlin/src/HAL/STM32/HAL_SPI.cpp | 8 +- Marlin/src/HAL/STM32/eeprom_flash.cpp | 8 +- Marlin/src/HAL/STM32/fast_pwm.cpp | 4 +- Marlin/src/HAL/STM32/pinsDebug.h | 6 +- Marlin/src/HAL/STM32/timers.h | 4 +- Marlin/src/HAL/STM32F1/HAL.cpp | 190 +++++++++++------------ Marlin/src/HAL/STM32F1/HAL.h | 184 ++++++++++++---------- Marlin/src/HAL/STM32F1/Servo.h | 3 +- Marlin/src/HAL/STM32F1/fast_pwm.cpp | 8 +- Marlin/src/HAL/STM32F1/timers.h | 2 +- Marlin/src/HAL/TEENSY31_32/HAL.cpp | 85 ++++++----- Marlin/src/HAL/TEENSY31_32/HAL.h | 131 +++++++++++----- Marlin/src/HAL/TEENSY31_32/timers.h | 2 +- Marlin/src/HAL/TEENSY35_36/HAL.cpp | 114 +++++++------- Marlin/src/HAL/TEENSY35_36/HAL.h | 133 +++++++++++----- Marlin/src/HAL/TEENSY35_36/timers.h | 2 +- Marlin/src/HAL/TEENSY40_41/HAL.cpp | 194 ++++++++++++------------ Marlin/src/HAL/TEENSY40_41/HAL.h | 148 ++++++++++++------ Marlin/src/HAL/TEENSY40_41/timers.h | 2 +- Marlin/src/HAL/shared/HAL.cpp | 36 +++++ Marlin/src/HAL/shared/HAL_spi_L6470.cpp | 8 +- Marlin/src/MarlinCore.cpp | 48 +++--- Marlin/src/feature/caselight.cpp | 2 +- Marlin/src/feature/controllerfan.cpp | 2 +- Marlin/src/feature/e_parser.h | 4 +- Marlin/src/feature/leds/leds.cpp | 2 +- Marlin/src/feature/spindle_laser.cpp | 10 +- Marlin/src/feature/spindle_laser.h | 2 +- Marlin/src/gcode/control/M42.cpp | 4 +- Marlin/src/gcode/gcode_d.cpp | 10 +- Marlin/src/inc/SanityCheck.h | 7 + Marlin/src/lcd/dogm/marlinui_DOGM.cpp | 4 +- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 2 +- Marlin/src/module/endstops.cpp | 2 +- Marlin/src/module/planner.cpp | 6 +- Marlin/src/module/servo.cpp | 2 +- Marlin/src/module/servo.h | 2 +- Marlin/src/module/stepper.cpp | 10 +- Marlin/src/module/temperature.cpp | 112 +++++++------- ini/native.ini | 4 +- 69 files changed, 1772 insertions(+), 1283 deletions(-) create mode 100644 Marlin/src/HAL/shared/HAL.cpp diff --git a/Marlin/src/HAL/AVR/HAL.cpp b/Marlin/src/HAL/AVR/HAL.cpp index d7bf2a6f6f..2b6d2bdbcf 100644 --- a/Marlin/src/HAL/AVR/HAL.cpp +++ b/Marlin/src/HAL/AVR/HAL.cpp @@ -36,7 +36,7 @@ // ------------------------ // Don't initialize/override variable (which would happen in .init4) -uint8_t reset_reason __attribute__((section(".noinit"))); +uint8_t MarlinHAL::reset_reason __attribute__((section(".noinit"))); // ------------------------ // Public functions @@ -45,22 +45,22 @@ uint8_t reset_reason __attribute__((section(".noinit"))); __attribute__((naked)) // Don't output function pro- and epilogue __attribute__((used)) // Output the function, even if "not used" __attribute__((section(".init3"))) // Put in an early user definable section -void HAL_save_reset_reason() { +void save_reset_reason() { #if ENABLED(OPTIBOOT_RESET_REASON) __asm__ __volatile__( A("STS %0, r2") - : "=m"(reset_reason) + : "=m"(hal.reset_reason) ); #else - reset_reason = MCUSR; + hal.reset_reason = MCUSR; #endif // Clear within 16ms since WDRF bit enables a 16ms watchdog timer -> Boot loop - MCUSR = 0; + hal.clear_reset_source(); wdt_disable(); } -void HAL_init() { +void MarlinHAL::init() { // Init Servo Pins #define INIT_SERVO(N) OUT_WRITE(SERVO##N##_PIN, LOW) #if HAS_SERVO_0 @@ -77,7 +77,7 @@ void HAL_init() { #endif } -void HAL_reboot() { +void MarlinHAL::reboot() { #if ENABLED(USE_WATCHDOG) while (1) { /* run out the watchdog */ } #else diff --git a/Marlin/src/HAL/AVR/HAL.h b/Marlin/src/HAL/AVR/HAL.h index 2217f239d6..9babe2d603 100644 --- a/Marlin/src/HAL/AVR/HAL.h +++ b/Marlin/src/HAL/AVR/HAL.h @@ -74,9 +74,8 @@ #define CRITICAL_SECTION_START() unsigned char _sreg = SREG; cli() #define CRITICAL_SECTION_END() SREG = _sreg #endif -#define ISRS_ENABLED() TEST(SREG, SREG_I) -#define ENABLE_ISRS() sei() -#define DISABLE_ISRS() cli() + +#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment // ------------------------ // Types @@ -84,16 +83,16 @@ typedef int8_t pin_t; +// Use shared/servos.cpp #define SHARED_SERVOS HAS_SERVOS -#define HAL_SERVO_LIB Servo + +class Servo; +typedef Servo hal_servo_t; // ------------------------ -// Public Variables -// ------------------------ - -extern uint8_t reset_reason; - // Serial ports +// ------------------------ + #ifdef USBCON #include "../../core/serial_hook.h" typedef ForwardSerial1Class< decltype(Serial) > DefaultSerial1; @@ -142,57 +141,15 @@ extern uint8_t reset_reason; #endif #endif -// ------------------------ -// Public functions -// ------------------------ - -void HAL_init(); - -//void cli(); - -//void _delay_ms(const int delay); - -inline void HAL_clear_reset_source() { } -inline uint8_t HAL_get_reset_source() { return reset_reason; } - -void HAL_reboot(); - -#pragma GCC diagnostic push -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic ignored "-Wunused-function" -#endif - -extern "C" int freeMemory(); - -#pragma GCC diagnostic pop - +// // ADC -#ifdef DIDR2 - #define HAL_ANALOG_SELECT(ind) do{ if (ind < 8) SBI(DIDR0, ind); else SBI(DIDR2, ind & 0x07); }while(0) -#else - #define HAL_ANALOG_SELECT(ind) SBI(DIDR0, ind); -#endif - -inline void HAL_adc_init() { - ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADIF) | 0x07; - DIDR0 = 0; - #ifdef DIDR2 - DIDR2 = 0; - #endif -} - -#define SET_ADMUX_ADCSRA(ch) ADMUX = _BV(REFS0) | (ch & 0x07); SBI(ADCSRA, ADSC) -#ifdef MUX5 - #define HAL_START_ADC(ch) if (ch > 7) ADCSRB = _BV(MUX5); else ADCSRB = 0; SET_ADMUX_ADCSRA(ch) -#else - #define HAL_START_ADC(ch) ADCSRB = 0; SET_ADMUX_ADCSRA(ch) -#endif - +// #define HAL_ADC_VREF 5.0 #define HAL_ADC_RESOLUTION 10 -#define HAL_READ_ADC() ADC -#define HAL_ADC_READY() !TEST(ADCSRA, ADSC) +// +// Pin Mapping for M42, M43, M226 +// #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) @@ -206,23 +163,102 @@ inline void HAL_adc_init() { // AVR compatibility #define strtof strtod -#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment +// ------------------------ +// Class Utilities +// ------------------------ -/** - * set_pwm_frequency - * Sets the frequency of the timer corresponding to the provided pin - * as close as possible to the provided desired frequency. Internally - * calculates the required waveform generation mode, prescaler and - * resolution values required and sets the timer registers accordingly. - * NOTE that the frequency is applied to all pins on the timer (Ex OC3A, OC3B and OC3B) - * NOTE that there are limitations, particularly if using TIMER2. (see Configuration_adv.h -> FAST FAN PWM Settings) - */ -void set_pwm_frequency(const pin_t pin, int f_desired); +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif -/** - * set_pwm_duty - * Set the PWM duty cycle of the provided pin to the provided value - * Optionally allows inverting the duty cycle [default = false] - * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] - */ -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); +extern "C" int freeMemory(); + +#pragma GCC diagnostic pop + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static void init(); // Called early in setup() + static inline void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 + + static inline bool isr_state() { return TEST(SREG, SREG_I); } + static inline void isr_on() { sei(); } + static inline void isr_off() { cli(); } + + static inline void delay_ms(const int ms) { _delay_ms(ms); } + + // Tasks, called from idle() + static inline void idletask() {} + + // Reset + static uint8_t reset_reason; + static inline uint8_t get_reset_source() { return reset_reason; } + static inline void clear_reset_source() { MCUSR = 0; } + + // Free SRAM + static inline int freeMemory() { return freeMemory(); } + + // + // ADC Methods + // + + // Called by Temperature::init once at startup + static inline void adc_init() { + ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADIF) | 0x07; + DIDR0 = 0; + #ifdef DIDR2 + DIDR2 = 0; + #endif + } + + // Called by Temperature::init for each sensor at startup + static inline void adc_enable(const uint8_t ch) { + #ifdef DIDR2 + if (ch > 7) { SBI(DIDR2, ch & 0x07); return; } + #endif + SBI(DIDR0, ch); + } + + // Begin ADC sampling on the given channel + static inline void adc_start(const pin_t ch) { + #ifdef MUX5 + if (ch > 7) { ADCSRB = _BV(MUX5); return; } + #endif + ADCSRB = 0; + ADMUX = _BV(REFS0) | (ch & 0x07); SBI(ADCSRA, ADSC); + } + + // Is the ADC ready for reading? + static inline bool adc_ready() { return !TEST(ADCSRA, ADSC); } + + // The current value of the ADC register + static inline __typeof__(ADC) adc_value() { return ADC; } + + /** + * Set the PWM duty cycle for the pin to the given value. + * Optionally invert the duty cycle [default = false] + * Optionally change the scale of the provided value to enable finer PWM duty control [default = 255] + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); + + /** + * Set the frequency of the timer for the given pin as close as + * possible to the provided desired frequency. Internally calculate + * the required waveform generation mode, prescaler, and resolution + * values and set timer registers accordingly. + * NOTE that the frequency is applied to all pins on the timer (Ex OC3A, OC3B and OC3B) + * NOTE that there are limitations, particularly if using TIMER2. (see Configuration_adv.h -> FAST FAN PWM Settings) + */ + static void set_pwm_frequency(const pin_t pin, int f_desired); +}; + +extern MarlinHAL hal; diff --git a/Marlin/src/HAL/AVR/MarlinSerial.cpp b/Marlin/src/HAL/AVR/MarlinSerial.cpp index cd8bf5e690..986462437c 100644 --- a/Marlin/src/HAL/AVR/MarlinSerial.cpp +++ b/Marlin/src/HAL/AVR/MarlinSerial.cpp @@ -486,7 +486,7 @@ void MarlinSerial::write(const uint8_t c) { const uint8_t i = (tx_buffer.head + 1) & (Cfg::TX_SIZE - 1); // If global interrupts are disabled (as the result of being called from an ISR)... - if (!ISRS_ENABLED()) { + if (!hal.isr_state()) { // Make room by polling if it is possible to transmit, and do so! while (i == tx_buffer.tail) { @@ -534,7 +534,7 @@ void MarlinSerial::flushTX() { if (!_written) return; // If global interrupts are disabled (as the result of being called from an ISR)... - if (!ISRS_ENABLED()) { + if (!hal.isr_state()) { // Wait until everything was transmitted - We must do polling, as interrupts are disabled while (tx_buffer.head != tx_buffer.tail || !B_TXC) { diff --git a/Marlin/src/HAL/AVR/fast_pwm.cpp b/Marlin/src/HAL/AVR/fast_pwm.cpp index 804e5fad30..0053b44c3c 100644 --- a/Marlin/src/HAL/AVR/fast_pwm.cpp +++ b/Marlin/src/HAL/AVR/fast_pwm.cpp @@ -35,10 +35,9 @@ struct Timer { }; /** - * get_pwm_timer - * Get the timer information and register of the provided pin. - * Return a Timer struct containing this information. - * Used by set_pwm_frequency, set_pwm_duty + * Get the timer information and register for a pin. + * Return a Timer struct containing this information. + * Used by set_pwm_frequency, set_pwm_duty */ Timer get_pwm_timer(const pin_t pin) { uint8_t q = 0; @@ -150,7 +149,7 @@ Timer get_pwm_timer(const pin_t pin) { return timer; } -void set_pwm_frequency(const pin_t pin, int f_desired) { +void MarlinHAL::set_pwm_frequency(const pin_t pin, int f_desired) { Timer timer = get_pwm_timer(pin); if (timer.n == 0) return; // Don't proceed if protected timer or not recognized uint16_t size; @@ -230,7 +229,7 @@ void set_pwm_frequency(const pin_t pin, int f_desired) { #endif // NEEDS_HARDWARE_PWM -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { +void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { #if NEEDS_HARDWARE_PWM // If v is 0 or v_size (max), digitalWrite to LOW or HIGH. diff --git a/Marlin/src/HAL/AVR/timers.h b/Marlin/src/HAL/AVR/timers.h index 36b04eae0d..e1fcbf52d6 100644 --- a/Marlin/src/HAL/AVR/timers.h +++ b/Marlin/src/HAL/AVR/timers.h @@ -109,8 +109,8 @@ FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) { * (otherwise, characters will be lost due to UART overflow). * Then: Stepper, Endstops, Temperature, and -finally- all others. */ -#define HAL_timer_isr_prologue(T) -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_prologue(T) NOOP +#define HAL_timer_isr_epilogue(T) NOOP /* 18 cycles maximum latency */ #ifndef HAL_STEP_TIMER_ISR diff --git a/Marlin/src/HAL/DUE/HAL.cpp b/Marlin/src/HAL/DUE/HAL.cpp index a3985652e7..20b711b1b0 100644 --- a/Marlin/src/HAL/DUE/HAL.cpp +++ b/Marlin/src/HAL/DUE/HAL.cpp @@ -34,7 +34,7 @@ // Public Variables // ------------------------ -uint16_t HAL_adc_result; +uint16_t MarlinHAL::adc_result; // ------------------------ // Public functions @@ -42,8 +42,7 @@ uint16_t HAL_adc_result; TERN_(POSTMORTEM_DEBUGGING, extern void install_min_serial()); -// HAL initialization task -void HAL_init() { +void MarlinHAL::init() { // Initialize the USB stack #if ENABLED(SDSUPPORT) OUT_WRITE(SDSS, HIGH); // Try to set SDSS inactive before any other SPI users start up @@ -52,21 +51,17 @@ void HAL_init() { TERN_(POSTMORTEM_DEBUGGING, install_min_serial()); // Install the min serial handler } -// HAL idle task -void HAL_idletask() { - // Perform USB stack housekeeping - usb_task_idle(); +void MarlinHAL::init_board() { + #ifdef BOARD_INIT + BOARD_INIT(); + #endif } -// Disable interrupts -void cli() { noInterrupts(); } +void MarlinHAL::idletask() { + usb_task_idle(); // Perform USB stack housekeeping +} -// Enable interrupts -void sei() { interrupts(); } - -void HAL_clear_reset_source() { } - -uint8_t HAL_get_reset_source() { +uint8_t MarlinHAL::get_reset_source() { switch ((RSTC->RSTC_SR >> 8) & 0x07) { case 0: return RST_POWER_ON; case 1: return RST_BACKUP; @@ -77,12 +72,7 @@ uint8_t HAL_get_reset_source() { } } -void HAL_reboot() { rstc_start_software_reset(RSTC); } - -void _delay_ms(const int delay_ms) { - // Todo: port for Due? - delay(delay_ms); -} +void MarlinHAL::reboot() { rstc_start_software_reset(RSTC); } extern "C" { extern unsigned int _ebss; // end of bss section @@ -94,19 +84,6 @@ int freeMemory() { return (int)&free_memory - (heap_end ?: (int)&_ebss); } -// ------------------------ -// ADC -// ------------------------ - -void HAL_adc_start_conversion(const uint8_t ch) { - HAL_adc_result = analogRead(ch); -} - -uint16_t HAL_adc_get_result() { - // nop - return HAL_adc_result; -} - // Forward the default serial ports #if USING_HW_SERIAL0 DefaultSerial1 MSerial0(false, Serial); diff --git a/Marlin/src/HAL/DUE/HAL.h b/Marlin/src/HAL/DUE/HAL.h index 96ab5d9808..0dd123acdd 100644 --- a/Marlin/src/HAL/DUE/HAL.h +++ b/Marlin/src/HAL/DUE/HAL.h @@ -38,6 +38,10 @@ #include "../../core/serial_hook.h" +// ------------------------ +// Serial ports +// ------------------------ + typedef ForwardSerial1Class< decltype(Serial) > DefaultSerial1; typedef ForwardSerial1Class< decltype(Serial1) > DefaultSerial2; typedef ForwardSerial1Class< decltype(Serial2) > DefaultSerial3; @@ -97,35 +101,31 @@ extern DefaultSerial4 MSerial3; #include "MarlinSerial.h" #include "MarlinSerialUSB.h" -// On AVR this is in math.h? -#define square(x) ((x)*(x)) +// ------------------------ +// Types +// ------------------------ typedef int8_t pin_t; +// Use shared/servos.cpp #define SHARED_SERVOS HAS_SERVOS -#define HAL_SERVO_LIB Servo +class Servo; +typedef Servo hal_servo_t; // // Interrupts // -#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() -#define CRITICAL_SECTION_END() if (!primask) __enable_irq() -#define ISRS_ENABLED() (!__get_PRIMASK()) -#define ENABLE_ISRS() __enable_irq() -#define DISABLE_ISRS() __disable_irq() +#define sei() noInterrupts() +#define cli() interrupts() -void cli(); // Disable interrupts -void sei(); // Enable interrupts - -void HAL_clear_reset_source(); // clear reset reason -uint8_t HAL_get_reset_source(); // get reset reason - -void HAL_reboot(); +#define CRITICAL_SECTION_START() const bool _irqon = hal.isr_state(); hal.isr_off() +#define CRITICAL_SECTION_END() if (_irqon) hal.isr_on() // // ADC // -extern uint16_t HAL_adc_result; // result of last ADC conversion +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 #ifndef analogInputToDigitalPin #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1) @@ -133,24 +133,8 @@ extern uint16_t HAL_adc_result; // result of last ADC conversion #define HAL_ANALOG_SELECT(ch) -inline void HAL_adc_init() {}//todo - -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 -#define HAL_START_ADC(ch) HAL_adc_start_conversion(ch) -#define HAL_READ_ADC() HAL_adc_result -#define HAL_ADC_READY() true - -void HAL_adc_start_conversion(const uint8_t ch); -uint16_t HAL_adc_get_result(); - // -// PWM -// -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } - -// -// Pin Map +// Pin Mapping for M42, M43, M226 // #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin @@ -159,27 +143,18 @@ inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, // // Tone // -void toneInit(); void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration=0); void noTone(const pin_t _pin); -// Enable hooks into idle and setup for HAL -#define HAL_IDLETASK 1 -void HAL_idletask(); -void HAL_init(); - -// -// Utility functions -// -void _delay_ms(const int delay); +// ------------------------ +// Class Utilities +// ------------------------ #pragma GCC diagnostic push #if GCC_VERSION <= 50000 #pragma GCC diagnostic ignored "-Wunused-function" #endif -int freeMemory(); - #pragma GCC diagnostic pop #ifdef __cplusplus @@ -189,3 +164,70 @@ char *dtostrf(double __val, signed char __width, unsigned char __prec, char *__s #ifdef __cplusplus } #endif + +// Return free RAM between end of heap (or end bss) and whatever is current +int freeMemory(); + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static void init(); // Called early in setup() + static void init_board(); // Called less early in setup() + static void reboot(); // Software reset + + static inline bool isr_state() { return !__get_PRIMASK(); } + static inline void isr_on() { __enable_irq(); } + static inline void isr_off() { __disable_irq(); } + + static inline void delay_ms(const int ms) { delay(ms); } + + // Tasks, called from idle() + static void idletask(); + + // Reset + static uint8_t get_reset_source(); + static inline void clear_reset_source() {} + + // Free SRAM + static inline int freeMemory() { return freeMemory(); } + + // + // ADC Methods + // + + static uint16_t adc_result; + + // Called by Temperature::init once at startup + static inline void adc_init() {} + + // Called by Temperature::init for each sensor at startup + static inline void adc_enable(const int ch) {} + + // Begin ADC sampling on the given channel + static inline void adc_start(const uint8_t ch) { adc_result = analogRead(ch); } + + // Is the ADC ready for reading? + static inline bool adc_ready() { return true; } + + // The current value of the ADC register + static inline uint16_t adc_value() { return adc_result; } + + /** + * Set the PWM duty cycle for the pin to the given value. + * No inverting the duty cycle in this HAL. + * No changing the maximum size of the provided value to enable finer PWM duty control in this HAL. + */ + static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + +}; + +extern MarlinHAL hal; diff --git a/Marlin/src/HAL/DUE/MarlinSerial.cpp b/Marlin/src/HAL/DUE/MarlinSerial.cpp index fe62ff5607..638f7a1007 100644 --- a/Marlin/src/HAL/DUE/MarlinSerial.cpp +++ b/Marlin/src/HAL/DUE/MarlinSerial.cpp @@ -406,7 +406,7 @@ size_t MarlinSerial::write(const uint8_t c) { const uint8_t i = (tx_buffer.head + 1) & (Cfg::TX_SIZE - 1); // If global interrupts are disabled (as the result of being called from an ISR)... - if (!ISRS_ENABLED()) { + if (!hal.isr_state()) { // Make room by polling if it is possible to transmit, and do so! while (i == tx_buffer.tail) { @@ -454,7 +454,7 @@ void MarlinSerial::flushTX() { if (!_written) return; // If global interrupts are disabled (as the result of being called from an ISR)... - if (!ISRS_ENABLED()) { + if (!hal.isr_state()) { // Wait until everything was transmitted - We must do polling, as interrupts are disabled while (tx_buffer.head != tx_buffer.tail || !(HWUART->UART_SR & UART_SR_TXEMPTY)) { diff --git a/Marlin/src/HAL/DUE/timers.h b/Marlin/src/HAL/DUE/timers.h index e2932ff36f..bcfd07e268 100644 --- a/Marlin/src/HAL/DUE/timers.h +++ b/Marlin/src/HAL/DUE/timers.h @@ -125,4 +125,4 @@ FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_SR; } -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/ESP32/HAL.cpp b/Marlin/src/HAL/ESP32/HAL.cpp index 810e386894..604acae8dd 100644 --- a/Marlin/src/HAL/ESP32/HAL.cpp +++ b/Marlin/src/HAL/ESP32/HAL.cpp @@ -52,7 +52,7 @@ // Externs // ------------------------ -portMUX_TYPE spinlock = portMUX_INITIALIZER_UNLOCKED; +portMUX_TYPE MarlinHAL::spinlock = portMUX_INITIALIZER_UNLOCKED; // ------------------------ // Local defines @@ -64,7 +64,7 @@ portMUX_TYPE spinlock = portMUX_INITIALIZER_UNLOCKED; // Public Variables // ------------------------ -uint16_t HAL_adc_result; +uint16_t MarlinHAL::adc_result; // ------------------------ // Private Variables @@ -95,20 +95,22 @@ volatile int numPWMUsed = 0, #endif #if ENABLED(USE_ESP32_EXIO) + HardwareSerial YSerial2(2); void Write_EXIO(uint8_t IO, uint8_t v) { - if (ISRS_ENABLED()) { - DISABLE_ISRS(); + if (hal.isr_state()) { + hal.isr_off(); YSerial2.write(0x80 | (((char)v) << 5) | (IO - 100)); - ENABLE_ISRS(); + hal.isr_on(); } else YSerial2.write(0x80 | (((char)v) << 5) | (IO - 100)); } + #endif -void HAL_init_board() { +void MarlinHAL::init_board() { #if ENABLED(USE_ESP32_TASK_WDT) esp_task_wdt_init(10, true); #endif @@ -154,27 +156,24 @@ void HAL_init_board() { #endif } -void HAL_idletask() { +void MarlinHAL::idletask() { #if BOTH(WIFISUPPORT, OTASUPPORT) OTA_handle(); #endif TERN_(ESP3D_WIFISUPPORT, esp3dlib.idletask()); } -void HAL_clear_reset_source() { } +uint8_t MarlinHAL::get_reset_source() { return rtc_get_reset_reason(1); } -uint8_t HAL_get_reset_source() { return rtc_get_reset_reason(1); } - -void HAL_reboot() { ESP.restart(); } - -void _delay_ms(int delay_ms) { delay(delay_ms); } +void MarlinHAL::reboot() { ESP.restart(); } // return free memory between end of heap (or end bss) and whatever is current -int freeMemory() { return ESP.getFreeHeap(); } +int MarlinHAL::freeMemory() { return ESP.getFreeHeap(); } // ------------------------ // ADC // ------------------------ + #define ADC1_CHANNEL(pin) ADC1_GPIO ## pin ## _CHANNEL adc1_channel_t get_channel(int pin) { @@ -196,7 +195,7 @@ void adc1_set_attenuation(adc1_channel_t chan, adc_atten_t atten) { } } -void HAL_adc_init() { +void MarlinHAL::adc_init() { // Configure ADC adc1_config_width(ADC_WIDTH_12Bit); @@ -226,11 +225,11 @@ void HAL_adc_init() { } } -void HAL_adc_start_conversion(const uint8_t adc_pin) { - const adc1_channel_t chan = get_channel(adc_pin); +void MarlinHAL::adc_start(const pin_t pin) { + const adc1_channel_t chan = get_channel(pin); uint32_t mv; esp_adc_cal_get_voltage((adc_channel_t)chan, &characteristics[attenuations[chan]], &mv); - HAL_adc_result = mv * 1023.0 / 3300.0; + adc_result = mv * 1023.0 / 3300.0; // Change the attenuation level based on the new reading adc_atten_t atten; diff --git a/Marlin/src/HAL/ESP32/HAL.h b/Marlin/src/HAL/ESP32/HAL.h index 8473e3c4e4..361c903231 100644 --- a/Marlin/src/HAL/ESP32/HAL.h +++ b/Marlin/src/HAL/ESP32/HAL.h @@ -49,8 +49,6 @@ // Defines // ------------------------ -extern portMUX_TYPE spinlock; - #define MYSERIAL1 flushableSerial #if EITHER(WIFISUPPORT, ESP3D_WIFISUPPORT) @@ -65,9 +63,6 @@ extern portMUX_TYPE spinlock; #define CRITICAL_SECTION_START() portENTER_CRITICAL(&spinlock) #define CRITICAL_SECTION_END() portEXIT_CRITICAL(&spinlock) -#define ISRS_ENABLED() (spinlock.owner == portMUX_FREE_VAL) -#define ENABLE_ISRS() if (spinlock.owner != portMUX_FREE_VAL) portEXIT_CRITICAL(&spinlock) -#define DISABLE_ISRS() portENTER_CRITICAL(&spinlock) // ------------------------ // Types @@ -75,14 +70,8 @@ extern portMUX_TYPE spinlock; typedef int16_t pin_t; -#define HAL_SERVO_LIB Servo - -// ------------------------ -// Public Variables -// ------------------------ - -/** result of last ADC conversion */ -extern uint16_t HAL_adc_result; +class Servo; +typedef Servo hal_servo_t; // ------------------------ // Public functions @@ -91,59 +80,21 @@ extern uint16_t HAL_adc_result; // // Tone // -void toneInit(); void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration=0); void noTone(const pin_t _pin); -// clear reset reason -void HAL_clear_reset_source(); - -// reset reason -uint8_t HAL_get_reset_source(); - -void HAL_reboot(); - -void _delay_ms(int delay); - -#pragma GCC diagnostic push -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic ignored "-Wunused-function" -#endif - -int freeMemory(); - -#pragma GCC diagnostic pop - void analogWrite(pin_t pin, int value); // ADC #define HAL_ANALOG_SELECT(pin) -void HAL_adc_init(); - -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_result -#define HAL_ADC_READY() true - -void HAL_adc_start_conversion(const uint8_t adc_pin); - -// PWM -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } - -// Pin Map +// +// Pin Mapping for M42, M43, M226 +// #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) -// Enable hooks into idle and setup for HAL -#define HAL_IDLETASK 1 -#define BOARD_INIT() HAL_init_board(); -void HAL_idletask(); -inline void HAL_init() {} -void HAL_init_board(); - #if ENABLED(USE_ESP32_EXIO) void Write_EXIO(uint8_t IO, uint8_t v); #endif @@ -188,3 +139,86 @@ FORCE_INLINE static void DELAY_CYCLES(uint32_t x) { } } + +// ------------------------ +// Class Utilities +// ------------------------ + +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif + +int freeMemory(); + +#pragma GCC diagnostic pop + +void _delay_ms(const int ms); + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static inline void init() {} // Called early in setup() + static void init_board(); // Called less early in setup() + static void reboot(); // Restart the firmware + + static portMUX_TYPE spinlock; + static inline bool isr_state() { return spinlock.owner == portMUX_FREE_VAL; } + static inline void isr_on() { if (spinlock.owner != portMUX_FREE_VAL) portEXIT_CRITICAL(&spinlock); } + static inline void isr_off() { portENTER_CRITICAL(&spinlock); } + + static inline void delay_ms(const int ms) { _delay_ms(ms); } + + // Tasks, called from idle() + static void idletask(); + + // Reset + static uint8_t get_reset_source(); + static inline void clear_reset_source() {} + + // Free SRAM + static int freeMemory(); + + // + // ADC Methods + // + + static uint16_t adc_result; + + // Called by Temperature::init once at startup + static void adc_init(); + + // Called by Temperature::init for each sensor at startup + static inline void adc_enable(const pin_t pin) {} + + // Begin ADC sampling on the given channel + static void adc_start(const pin_t pin); + + // Is the ADC ready for reading? + static inline bool adc_ready() { return true; } + + // The current value of the ADC register + static inline uint16_t adc_value() { return adc_result; } + + /** + * Set the PWM duty cycle for the pin to the given value. + * No inverting the duty cycle in this HAL. + * No changing the maximum size of the provided value to enable finer PWM duty control in this HAL. + */ + static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + +}; + +extern MarlinHAL hal; diff --git a/Marlin/src/HAL/ESP32/timers.h b/Marlin/src/HAL/ESP32/timers.h index 266169848d..efae594f6c 100644 --- a/Marlin/src/HAL/ESP32/timers.h +++ b/Marlin/src/HAL/ESP32/timers.h @@ -136,5 +136,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num); void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); -#define HAL_timer_isr_prologue(T) -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_prologue(T) NOOP +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/LINUX/HAL.cpp b/Marlin/src/HAL/LINUX/HAL.cpp index 0b679170ef..91739aaa7b 100644 --- a/Marlin/src/HAL/LINUX/HAL.cpp +++ b/Marlin/src/HAL/LINUX/HAL.cpp @@ -24,6 +24,12 @@ #include "../../inc/MarlinConfig.h" #include "../shared/Delay.h" +extern MarlinHAL hal; + +// ------------------------ +// Serial ports +// ------------------------ + MSerialT usb_serial(TERN0(EMERGENCY_PARSER, true)); // U8glib required functions @@ -37,42 +43,21 @@ extern "C" { //************************// // return free heap space -int freeMemory() { - return 0; -} +int freeMemory() { return 0; } // ------------------------ // ADC // ------------------------ -void HAL_adc_init() { +uint8_t MarlinHAL::active_ch = 0; -} - -void HAL_adc_enable_channel(const uint8_t ch) { - -} - -uint8_t active_ch = 0; -void HAL_adc_start_conversion(const uint8_t ch) { - active_ch = ch; -} - -bool HAL_adc_finished() { - return true; -} - -uint16_t HAL_adc_get_result() { - pin_t pin = analogInputToDigitalPin(active_ch); +uint16_t MarlinHAL::adc_value() { + const pin_t pin = analogInputToDigitalPin(active_ch); if (!VALID_PIN(pin)) return 0; - uint16_t data = ((Gpio::get(pin) >> 2) & 0x3FF); + const uint16_t data = ((Gpio::get(pin) >> 2) & 0x3FF); return data; // return 10bit value as Marlin expects } -void HAL_pwm_init() { - -} - -void HAL_reboot() { /* Reset the application state and GPIO */ } +void MarlinHAL::reboot() { /* Reset the application state and GPIO */ } #endif // __PLAT_LINUX__ diff --git a/Marlin/src/HAL/LINUX/HAL.h b/Marlin/src/HAL/LINUX/HAL.h index d7d3a92b73..0bd8635c90 100644 --- a/Marlin/src/HAL/LINUX/HAL.h +++ b/Marlin/src/HAL/LINUX/HAL.h @@ -21,34 +21,13 @@ */ #pragma once -#define CPU_32_BIT - -#define F_CPU 100000000UL -#define SystemCoreClock F_CPU #include #include #include - #undef min #undef max - #include -void _printf (const char *format, ...); -void _putc(uint8_t c); -uint8_t _getc(); - -//extern "C" volatile uint32_t _millis; - -//arduino: Print.h -#define DEC 10 -#define HEX 16 -#define OCT 8 -#define BIN 2 -//arduino: binary.h (weird defines) -#define B01 1 -#define B10 2 - #include "hardware/Clock.h" #include "../shared/Marduino.h" @@ -58,27 +37,57 @@ uint8_t _getc(); #include "watchdog.h" #include "serial.h" -#define SHARED_SERVOS HAS_SERVOS +// ------------------------ +// Defines +// ------------------------ -extern MSerialT usb_serial; -#define MYSERIAL1 usb_serial +#define CPU_32_BIT +#define SHARED_SERVOS HAS_SERVOS // Use shared/servos.cpp + +#define F_CPU 100000000UL +#define SystemCoreClock F_CPU + +#define DELAY_CYCLES(x) Clock::delayCycles(x) #define CPU_ST7920_DELAY_1 600 #define CPU_ST7920_DELAY_2 750 #define CPU_ST7920_DELAY_3 750 +void _printf(const char *format, ...); +void _putc(uint8_t c); +uint8_t _getc(); + +//arduino: Print.h +#define DEC 10 +#define HEX 16 +#define OCT 8 +#define BIN 2 +//arduino: binary.h (weird defines) +#define B01 1 +#define B10 2 + +// ------------------------ +// Serial ports +// ------------------------ + +extern MSerialT usb_serial; +#define MYSERIAL1 usb_serial + // // Interrupts // #define CRITICAL_SECTION_START() #define CRITICAL_SECTION_END() -#define ISRS_ENABLED() -#define ENABLE_ISRS() -#define DISABLE_ISRS() -inline void HAL_init() {} +// ADC +#define HAL_ADC_VREF 5.0 +#define HAL_ADC_RESOLUTION 10 +#define HAL_ANALOG_SELECT(ch) hal.adc_enable(ch) + +// ------------------------ +// Class Utilities +// ------------------------ -// Utility functions #pragma GCC diagnostic push #if GCC_VERSION <= 50000 #pragma GCC diagnostic ignored "-Wunused-function" @@ -88,29 +97,67 @@ int freeMemory(); #pragma GCC diagnostic pop -// ADC -#define HAL_ADC_VREF 5.0 -#define HAL_ADC_RESOLUTION 10 -#define HAL_ANALOG_SELECT(ch) HAL_adc_enable_channel(ch) -#define HAL_START_ADC(ch) HAL_adc_start_conversion(ch) -#define HAL_READ_ADC() HAL_adc_get_result() -#define HAL_ADC_READY() true +// ------------------------ +// MarlinHAL Class +// ------------------------ -void HAL_adc_init(); -void HAL_adc_enable_channel(const uint8_t ch); -void HAL_adc_start_conversion(const uint8_t ch); -uint16_t HAL_adc_get_result(); +class MarlinHAL { +public: -// PWM -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + // Earliest possible init, before setup() + MarlinHAL() {} -// Reset source -inline void HAL_clear_reset_source(void) {} -inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; } + static inline void init() {} // Called early in setup() + static inline void init_board() {} // Called less early in setup() + static void reboot(); // Reset the application state and GPIO -void HAL_reboot(); // Reset the application state and GPIO + static inline bool isr_state() { return true; } + static inline void isr_on() {} + static inline void isr_off() {} -/* ---------------- Delay in cycles */ -FORCE_INLINE static void DELAY_CYCLES(uint64_t x) { - Clock::delayCycles(x); -} + static inline void delay_ms(const int ms) { _delay_ms(ms); } + + // Tasks, called from idle() + static inline void idletask() {} + + // Reset + static constexpr uint8_t reset_reason = RST_POWER_ON; + static inline uint8_t get_reset_source() { return reset_reason; } + static inline void clear_reset_source() {} + + // Free SRAM + static inline int freeMemory() { return freeMemory(); } + + // + // ADC Methods + // + + static uint8_t active_ch; + + // Called by Temperature::init once at startup + static inline void adc_init() {} + + // Called by Temperature::init for each sensor at startup + static inline void adc_enable(const uint8_t) {} + + // Begin ADC sampling on the given channel + static inline void adc_start(const pin_t ch) { active_ch = ch; } + + // Is the ADC ready for reading? + static inline bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value(); + + /** + * Set the PWM duty cycle for the pin to the given value. + * No option to change the resolution or invert the duty cycle. + */ + static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + + static inline void set_pwm_frequency(const pin_t, int) {} +}; + +extern MarlinHAL hal; diff --git a/Marlin/src/HAL/LINUX/arduino.cpp b/Marlin/src/HAL/LINUX/arduino.cpp index 4b56d02a38..075b4ccde2 100644 --- a/Marlin/src/HAL/LINUX/arduino.cpp +++ b/Marlin/src/HAL/LINUX/arduino.cpp @@ -31,9 +31,7 @@ void cli() { } // Disable void sei() { } // Enable // Time functions -void _delay_ms(const int delay_ms) { - delay(delay_ms); -} +void _delay_ms(const int ms) { delay(ms); } uint32_t millis() { return (uint32_t)Clock::millis(); diff --git a/Marlin/src/HAL/LINUX/include/Arduino.h b/Marlin/src/HAL/LINUX/include/Arduino.h index d4086e259a..49e04d0cb7 100644 --- a/Marlin/src/HAL/LINUX/include/Arduino.h +++ b/Marlin/src/HAL/LINUX/include/Arduino.h @@ -59,7 +59,6 @@ typedef uint8_t byte; #endif #define sq(v) ((v) * (v)) -#define square(v) sq(v) #define constrain(value, arg_min, arg_max) ((value) < (arg_min) ? (arg_min) :((value) > (arg_max) ? (arg_max) : (value))) //Interrupts @@ -74,8 +73,8 @@ extern "C" { } // Time functions -extern "C" void delay(const int milis); -void _delay_ms(const int delay); +extern "C" void delay(const int ms); +void _delay_ms(const int ms); void delayMicroseconds(unsigned long); uint32_t millis(); diff --git a/Marlin/src/HAL/LINUX/timers.h b/Marlin/src/HAL/LINUX/timers.h index a98ceb6f39..2d2a95774c 100644 --- a/Marlin/src/HAL/LINUX/timers.h +++ b/Marlin/src/HAL/LINUX/timers.h @@ -92,5 +92,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num); void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); -#define HAL_timer_isr_prologue(T) -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_prologue(T) NOOP +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/LPC1768/HAL.cpp b/Marlin/src/HAL/LPC1768/HAL.cpp index cee9cfc5f7..541848b08a 100644 --- a/Marlin/src/HAL/LPC1768/HAL.cpp +++ b/Marlin/src/HAL/LPC1768/HAL.cpp @@ -31,7 +31,7 @@ DefaultSerial1 USBSerial(false, UsbSerial); -uint32_t HAL_adc_reading = 0; +uint32_t MarlinHAL::adc_result = 0; // U8glib required functions extern "C" { @@ -41,8 +41,6 @@ extern "C" { void u8g_Delay(uint16_t val) { delay(val); } } -//************************// - // return free heap space int freeMemory() { char stack_end; @@ -54,7 +52,27 @@ int freeMemory() { return result; } -// scan command line for code +void MarlinHAL::reboot() { NVIC_SystemReset(); } + +uint8_t MarlinHAL::get_reset_source() { + #if ENABLED(USE_WATCHDOG) + if (watchdog_timed_out()) return RST_WATCHDOG; + #endif + return RST_POWER_ON; +} + +void MarlinHAL::clear_reset_source() { + TERN_(USE_WATCHDOG, watchdog_clear_timeout_flag()); +} + +void flashFirmware(const int16_t) { + delay(500); // Give OS time to disconnect + USB_Connect(false); // USB clear connection + delay(1000); // Give OS time to notice + hal.reboot(); +} + +// For M42/M43, scan command line for pin code // return index into pin map array if found and the pin is valid. // return dval if not found or not a valid pin. int16_t PARSED_PIN_INDEX(const char code, const int16_t dval) { @@ -63,24 +81,4 @@ int16_t PARSED_PIN_INDEX(const char code, const int16_t dval) { return ind > -1 ? ind : dval; } -void flashFirmware(const int16_t) { - delay(500); // Give OS time to disconnect - USB_Connect(false); // USB clear connection - delay(1000); // Give OS time to notice - HAL_reboot(); -} - -void HAL_clear_reset_source(void) { - TERN_(USE_WATCHDOG, watchdog_clear_timeout_flag()); -} - -uint8_t HAL_get_reset_source(void) { - #if ENABLED(USE_WATCHDOG) - if (watchdog_timed_out()) return RST_WATCHDOG; - #endif - return RST_POWER_ON; -} - -void HAL_reboot() { NVIC_SystemReset(); } - #endif // TARGET_LPC1768 diff --git a/Marlin/src/HAL/LPC1768/HAL.h b/Marlin/src/HAL/LPC1768/HAL.h index 348ea6b21a..ba0729590f 100644 --- a/Marlin/src/HAL/LPC1768/HAL.h +++ b/Marlin/src/HAL/LPC1768/HAL.h @@ -28,8 +28,6 @@ #define CPU_32_BIT -void HAL_init(); - #include #include #include @@ -47,12 +45,9 @@ extern "C" volatile uint32_t _millis; #include #include -// -// Default graphical display delays -// -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 +// ------------------------ +// Serial ports +// ------------------------ typedef ForwardSerial1Class< decltype(UsbSerial) > DefaultSerial1; extern DefaultSerial1 USBSerial; @@ -114,26 +109,12 @@ extern DefaultSerial1 USBSerial; // // Interrupts // -#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() -#define CRITICAL_SECTION_END() if (!primask) __enable_irq() -#define ISRS_ENABLED() (!__get_PRIMASK()) -#define ENABLE_ISRS() __enable_irq() -#define DISABLE_ISRS() __disable_irq() + +#define CRITICAL_SECTION_START() const bool irqon = !__get_PRIMASK(); __disable_irq() +#define CRITICAL_SECTION_END() if (irqon) __enable_irq() // -// Utility functions -// -#pragma GCC diagnostic push -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic ignored "-Wunused-function" -#endif - -int freeMemory(); - -#pragma GCC diagnostic pop - -// -// ADC API +// ADC // #define ADC_MEDIAN_FILTER_SIZE (23) // Higher values increase step delay (phase shift), @@ -152,20 +133,11 @@ int freeMemory(); #define HAL_ADC_RESOLUTION 12 // 15 bit maximum, raw temperature is stored as int16_t #define HAL_ADC_FILTERED // Disable oversampling done in Marlin as ADC values already filtered in HAL -using FilteredADC = LPC176x::ADC; -extern uint32_t HAL_adc_reading; -[[gnu::always_inline]] inline void HAL_adc_start_conversion(const pin_t pin) { - HAL_adc_reading = FilteredADC::read(pin) >> (16 - HAL_ADC_RESOLUTION); // returns 16bit value, reduce to required bits -} -[[gnu::always_inline]] inline uint16_t HAL_adc_get_result() { - return HAL_adc_reading; -} +#define HAL_ANALOG_SELECT(pin) hal.adc_enable(pin) -#define HAL_adc_init() -#define HAL_ANALOG_SELECT(pin) FilteredADC::enable_channel(pin) -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_get_result() -#define HAL_ADC_READY() (true) +// +// Pin Mapping for M42, M43, M226 +// // Test whether the pin is valid constexpr bool VALID_PIN(const pin_t pin) { @@ -192,32 +164,104 @@ int16_t PARSED_PIN_INDEX(const char code, const int16_t dval); // P0.6 thru P0.9 are for the onboard SD card #define HAL_SENSITIVE_PINS P0_06, P0_07, P0_08, P0_09, -#define HAL_IDLETASK 1 -void HAL_idletask(); +// ------------------------ +// Defines +// ------------------------ #define PLATFORM_M997_SUPPORT void flashFirmware(const int16_t); #define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment -/** - * set_pwm_frequency - * Set the frequency of the timer corresponding to the provided pin - * All Hardware PWM pins run at the same frequency and all - * Software PWM pins run at the same frequency - */ -void set_pwm_frequency(const pin_t pin, int f_desired); +// Default graphical display delays +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 -/** - * set_pwm_duty - * Set the PWM duty cycle of the provided pin to the provided value - * Optionally allows inverting the duty cycle [default = false] - * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] - */ -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); +// ------------------------ +// Class Utilities +// ------------------------ -// Reset source -void HAL_clear_reset_source(void); -uint8_t HAL_get_reset_source(void); +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif -void HAL_reboot(); +int freeMemory(); + +#pragma GCC diagnostic pop + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static void init(); // Called early in setup() + static inline void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 + + static inline bool isr_state() { return !__get_PRIMASK(); } + static inline void isr_on() { __enable_irq(); } + static inline void isr_off() { __disable_irq(); } + + static inline void delay_ms(const int ms) { _delay_ms(ms); } + + // Tasks, called from idle() + static void idletask(); + + // Reset + static uint8_t get_reset_source(); + static void clear_reset_source(); + + // Free SRAM + static inline int freeMemory() { return freeMemory(); } + + // + // ADC Methods + // + + using FilteredADC = LPC176x::ADC; + + // Called by Temperature::init once at startup + static inline void adc_init() {} + + // Called by Temperature::init for each sensor at startup + static inline void adc_enable(const pin_t pin) { + FilteredADC::enable_channel(pin); + } + + // Begin ADC sampling on the given pin + static uint32_t adc_result; + FORCE_INLINE static void adc_start(const pin_t pin) { + adc_result = FilteredADC::read(pin) >> (16 - HAL_ADC_RESOLUTION); // returns 16bit value, reduce to required bits + } + + // Is the ADC ready for reading? + static inline bool adc_ready() { return true; } + + // The current value of the ADC register + FORCE_INLINE static uint16_t adc_value() { + return (uint16_t)adc_result; + } + + /** + * Set the PWM duty cycle for the pin to the given value. + * Optionally invert the duty cycle [default = false] + * Optionally change the scale of the provided value to enable finer PWM duty control [default = 255] + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); + + /** + * Set the frequency of the timer corresponding to the provided pin + * All Hardware PWM pins will run at the same frequency and + * All Software PWM pins will run at the same frequency + */ + static void set_pwm_frequency(const pin_t pin, int f_desired); +}; + +extern MarlinHAL hal; diff --git a/Marlin/src/HAL/LPC1768/Servo.h b/Marlin/src/HAL/LPC1768/Servo.h index eb12fd20f4..f02f503a67 100644 --- a/Marlin/src/HAL/LPC1768/Servo.h +++ b/Marlin/src/HAL/LPC1768/Servo.h @@ -65,4 +65,5 @@ class libServo: public Servo { } }; -#define HAL_SERVO_LIB libServo +class libServo; +typedef libServo hal_servo_t; diff --git a/Marlin/src/HAL/LPC1768/fast_pwm.cpp b/Marlin/src/HAL/LPC1768/fast_pwm.cpp index eae0e36b0b..91e92a1575 100644 --- a/Marlin/src/HAL/LPC1768/fast_pwm.cpp +++ b/Marlin/src/HAL/LPC1768/fast_pwm.cpp @@ -21,21 +21,17 @@ */ #ifdef TARGET_LPC1768 -#include "../../inc/MarlinConfigPre.h" +#include "../../inc/MarlinConfig.h" #include -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { +void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { if (!LPC176x::pin_is_valid(pin)) return; if (LPC176x::pwm_attach_pin(pin)) LPC176x::pwm_write_ratio(pin, invert ? 1.0f - (float)v / v_size : (float)v / v_size); // map 1-254 onto PWM range } -#if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM - - void set_pwm_frequency(const pin_t pin, int f_desired) { - LPC176x::pwm_set_frequency(pin, f_desired); - } - -#endif +void MarlinHAL::set_pwm_frequency(const pin_t pin, int f_desired) { + LPC176x::pwm_set_frequency(pin, f_desired); +} #endif // TARGET_LPC1768 diff --git a/Marlin/src/HAL/LPC1768/main.cpp b/Marlin/src/HAL/LPC1768/main.cpp index ef0dc42c78..419c99793f 100644 --- a/Marlin/src/HAL/LPC1768/main.cpp +++ b/Marlin/src/HAL/LPC1768/main.cpp @@ -48,7 +48,7 @@ void SysTick_Callback() { disk_timerproc(); } TERN_(POSTMORTEM_DEBUGGING, extern void install_min_serial()); -void HAL_init() { +void MarlinHAL::init() { // Init LEDs #if PIN_EXISTS(LED) @@ -130,7 +130,7 @@ void HAL_init() { const millis_t usb_timeout = millis() + 2000; while (!USB_Configuration && PENDING(millis(), usb_timeout)) { delay(50); - HAL_idletask(); + idletask(); #if PIN_EXISTS(LED) TOGGLE(LED_PIN); // Flash quickly during USB initialization #endif @@ -142,7 +142,7 @@ void HAL_init() { } // HAL idle task -void HAL_idletask() { +void MarlinHAL::idletask() { #if HAS_SHARED_MEDIA // If Marlin is using the SD card we need to lock it to prevent access from // a PC via USB. diff --git a/Marlin/src/HAL/LPC1768/timers.h b/Marlin/src/HAL/LPC1768/timers.h index 78e856db28..c6d7bc632e 100644 --- a/Marlin/src/HAL/LPC1768/timers.h +++ b/Marlin/src/HAL/LPC1768/timers.h @@ -170,4 +170,4 @@ FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { } } -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/NATIVE_SIM/HAL.h b/Marlin/src/HAL/NATIVE_SIM/HAL.h index 436b4b4daa..bfbdaf211f 100644 --- a/Marlin/src/HAL/NATIVE_SIM/HAL.h +++ b/Marlin/src/HAL/NATIVE_SIM/HAL.h @@ -21,18 +21,10 @@ */ #pragma once -#define CPU_32_BIT -#define HAL_IDLETASK -void HAL_idletask(); - -#define F_CPU 100000000 -#define SystemCoreClock F_CPU #include #include - #undef min #undef max - #include #include "pinmapping.h" @@ -40,8 +32,6 @@ void _printf (const char *format, ...); void _putc(uint8_t c); uint8_t _getc(); -//extern "C" volatile uint32_t _millis; - //arduino: Print.h #define DEC 10 #define HEX 16 @@ -58,7 +48,23 @@ uint8_t _getc(); #include "watchdog.h" #include "serial.h" -#define SHARED_SERVOS HAS_SERVOS +// ------------------------ +// Defines +// ------------------------ + +#define CPU_32_BIT +#define SHARED_SERVOS HAS_SERVOS // Use shared/servos.cpp + +#define F_CPU 100000000 +#define SystemCoreClock F_CPU + +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 + +// ------------------------ +// Serial ports +// ------------------------ extern MSerialT serial_stream_0; extern MSerialT serial_stream_1; @@ -98,49 +104,20 @@ extern MSerialT serial_stream_3; #endif #endif - -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 - -// +// ------------------------ // Interrupts -// +// ------------------------ + #define CRITICAL_SECTION_START() #define CRITICAL_SECTION_END() -#define ISRS_ENABLED() -#define ENABLE_ISRS() -#define DISABLE_ISRS() - -inline void HAL_init() {} - -// Utility functions -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-function" -int freeMemory(); -#pragma GCC diagnostic pop +// ------------------------ // ADC +// ------------------------ + #define HAL_ADC_VREF 5.0 #define HAL_ADC_RESOLUTION 10 -#define HAL_ANALOG_SELECT(ch) HAL_adc_enable_channel(ch) -#define HAL_START_ADC(ch) HAL_adc_start_conversion(ch) -#define HAL_READ_ADC() HAL_adc_get_result() -#define HAL_ADC_READY() true - -void HAL_adc_init(); -void HAL_adc_enable_channel(const uint8_t ch); -void HAL_adc_start_conversion(const uint8_t ch); -uint16_t HAL_adc_get_result(); - -// PWM -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } - -// Reset source -inline void HAL_clear_reset_source(void) {} -inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; } - -void HAL_reboot(); +#define HAL_ANALOG_SELECT(ch) hal.adc_enable(ch) /* ---------------- Delay in cycles */ @@ -159,29 +136,22 @@ constexpr inline std::size_t strlen_constexpr(const char* str) { // https://github.com/gcc-mirror/gcc/blob/5c7634a0e5f202935aa6c11b6ea953b8bf80a00a/libstdc%2B%2B-v3/include/bits/char_traits.h#L329 if (str != nullptr) { std::size_t i = 0; - while (str[i] != '\0') { - ++i; - } - + while (str[i] != '\0') ++i; return i; } - return 0; } constexpr inline int strncmp_constexpr(const char* lhs, const char* rhs, std::size_t count) { // https://github.com/gcc-mirror/gcc/blob/13b9cbfc32fe3ac4c81c4dd9c42d141c8fb95db4/libstdc%2B%2B-v3/include/bits/char_traits.h#L655 - if (lhs == nullptr || rhs == nullptr) { + if (lhs == nullptr || rhs == nullptr) return rhs != nullptr ? -1 : 1; - } - for (std::size_t i = 0; i < count; ++i) { + for (std::size_t i = 0; i < count; ++i) if (lhs[i] != rhs[i]) { return lhs[i] < rhs[i] ? -1 : 1; - } else if (lhs[i] == '\0') { + else if (lhs[i] == '\0') return 0; - } - } return 0; } @@ -193,14 +163,11 @@ constexpr inline const char* strstr_constexpr(const char* str, const char* targe do { char sc = {}; do { - if ((sc = *str++) == '\0') { - return nullptr; - } + if ((sc = *str++) == '\0') return nullptr; } while (sc != c); } while (strncmp_constexpr(str, target, len) != 0); --str; } - return str; } @@ -211,12 +178,88 @@ constexpr inline char* strstr_constexpr(char* str, const char* target) { do { char sc = {}; do { - if ((sc = *str++) == '\0') { - return nullptr; - } + if ((sc = *str++) == '\0') return nullptr; } while (sc != c); } while (strncmp_constexpr(str, target, len) != 0); --str; } return str; } + +// ------------------------ +// Class Utilities +// ------------------------ + +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif + +int freeMemory(); + +#pragma GCC diagnostic pop + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static inline void init() {} // Called early in setup() + static inline void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 + + static inline bool isr_state() { return true; } + static inline void isr_on() {} + static inline void isr_off() {} + + static inline void delay_ms(const int ms) { _delay_ms(ms); } + + // Tasks, called from idle() + static void idletask(); + + // Reset + static constexpr uint8_t reset_reason = RST_POWER_ON; + static inline uint8_t get_reset_source() { return reset_reason; } + static inline void clear_reset_source() {} + + // Free SRAM + static inline int freeMemory() { return freeMemory(); } + + // + // ADC Methods + // + + static uint8_t active_ch; + + // Called by Temperature::init once at startup + static void adc_init(); + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const uint8_t ch); + + // Begin ADC sampling on the given channel + static void adc_start(const uint8_t ch); + + // Is the ADC ready for reading? + static bool adc_ready(); + + // The current value of the ADC register + static uint16_t adc_value(); + + /** + * Set the PWM duty cycle for the pin to the given value. + * No option to invert the duty cycle [default = false] + * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] + */ + static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + +}; + +extern MarlinHAL hal; diff --git a/Marlin/src/HAL/NATIVE_SIM/timers.h b/Marlin/src/HAL/NATIVE_SIM/timers.h index cedfdb62d6..be38d583b6 100644 --- a/Marlin/src/HAL/NATIVE_SIM/timers.h +++ b/Marlin/src/HAL/NATIVE_SIM/timers.h @@ -87,5 +87,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num); void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); -#define HAL_timer_isr_prologue(T) -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_prologue(T) NOOP +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/SAMD51/HAL.cpp b/Marlin/src/HAL/SAMD51/HAL.cpp index 8baad31bc7..f038325128 100644 --- a/Marlin/src/HAL/SAMD51/HAL.cpp +++ b/Marlin/src/HAL/SAMD51/HAL.cpp @@ -106,7 +106,7 @@ // Private Variables // ------------------------ -uint16_t HAL_adc_result; +uint16_t MarlinHAL::adc_result; #if ADC_IS_REQUIRED @@ -402,7 +402,7 @@ uint16_t HAL_adc_result; // ------------------------ // HAL initialization task -void HAL_init() { +void MarlinHAL::init() { TERN_(DMA_IS_REQUIRED, dma_init()); #if ENABLED(SDSUPPORT) #if SD_CONNECTION_IS(ONBOARD) && PIN_EXISTS(SD_DETECT) @@ -412,17 +412,9 @@ void HAL_init() { #endif } -// HAL idle task -/* -void HAL_idletask() { -} -*/ - -void HAL_clear_reset_source() { } - #pragma push_macro("WDT") #undef WDT // Required to be able to use '.bit.WDT'. Compiler wrongly replace struct field with WDT define -uint8_t HAL_get_reset_source() { +uint8_t MarlinHAL::get_reset_source() { RSTC_RCAUSE_Type resetCause; resetCause.reg = REG_RSTC_RCAUSE; @@ -436,7 +428,7 @@ uint8_t HAL_get_reset_source() { } #pragma pop_macro("WDT") -void HAL_reboot() { NVIC_SystemReset(); } +void MarlinHAL::reboot() { NVIC_SystemReset(); } extern "C" { void * _sbrk(int incr); @@ -454,7 +446,7 @@ int freeMemory() { // ADC // ------------------------ -void HAL_adc_init() { +void MarlinHAL::adc_init() { #if ADC_IS_REQUIRED memset(HAL_adc_results, 0xFF, sizeof(HAL_adc_results)); // Fill result with invalid values @@ -491,17 +483,17 @@ void HAL_adc_init() { #endif // ADC_IS_REQUIRED } -void HAL_adc_start_conversion(const uint8_t adc_pin) { +void MarlinHAL::adc_start(const pin_t pin) { #if ADC_IS_REQUIRED LOOP_L_N(pi, COUNT(adc_pins)) { - if (adc_pin == adc_pins[pi]) { - HAL_adc_result = HAL_adc_results[pi]; + if (pin == adc_pins[pi]) { + adc_result = HAL_adc_results[pi]; return; } } #endif - HAL_adc_result = 0xFFFF; + adc_result = 0xFFFF; } #endif // __SAMD51__ diff --git a/Marlin/src/HAL/SAMD51/HAL.h b/Marlin/src/HAL/SAMD51/HAL.h index c262752a8d..144bf9c08d 100644 --- a/Marlin/src/HAL/SAMD51/HAL.h +++ b/Marlin/src/HAL/SAMD51/HAL.h @@ -89,51 +89,31 @@ typedef int8_t pin_t; -#define SHARED_SERVOS HAS_SERVOS -#define HAL_SERVO_LIB Servo +#define SHARED_SERVOS HAS_SERVOS // Use shared/servos.cpp +class Servo; +typedef Servo hal_servo_t; // // Interrupts // -#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() -#define CRITICAL_SECTION_END() if (!primask) __enable_irq() -#define ISRS_ENABLED() (!__get_PRIMASK()) -#define ENABLE_ISRS() __enable_irq() -#define DISABLE_ISRS() __disable_irq() +#define CRITICAL_SECTION_START() const bool irqon = !__get_PRIMASK(); __disable_irq() +#define CRITICAL_SECTION_END() if (irqon) __enable_irq() -#define cli() __disable_irq() // Disable interrupts -#define sei() __enable_irq() // Enable interrupts - -void HAL_clear_reset_source(); // clear reset reason -uint8_t HAL_get_reset_source(); // get reset reason - -void HAL_reboot(); +#define cli() __disable_irq() // Disable interrupts +#define sei() __enable_irq() // Enable interrupts // // ADC // -extern uint16_t HAL_adc_result; // Most recent ADC conversion #define HAL_ANALOG_SELECT(pin) -void HAL_adc_init(); - //#define HAL_ADC_FILTERED // Disable Marlin's oversampling. The HAL filters ADC values. #define HAL_ADC_VREF 3.3 #define HAL_ADC_RESOLUTION 10 // ... 12 -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_result -#define HAL_ADC_READY() true - -void HAL_adc_start_conversion(const uint8_t adc_pin); // -// PWM -// -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } - -// -// Pin Map +// Pin Mapping for M42, M43, M226 // #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin @@ -142,35 +122,92 @@ inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, // // Tone // -void toneInit(); void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration=0); void noTone(const pin_t _pin); -// Enable hooks into idle and setup for HAL -void HAL_init(); -/* -#define HAL_IDLETASK 1 -void HAL_idletask(); -*/ - -// -// Utility functions -// -FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } +// ------------------------ +// Class Utilities +// ------------------------ #pragma GCC diagnostic push #if GCC_VERSION <= 50000 #pragma GCC diagnostic ignored "-Wunused-function" #endif -int freeMemory(); - -#pragma GCC diagnostic pop - #ifdef __cplusplus extern "C" { #endif + char *dtostrf(double __val, signed char __width, unsigned char __prec, char *__s); + +extern "C" int freeMemory(); + #ifdef __cplusplus } #endif + +#pragma GCC diagnostic pop + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static void init(); // Called early in setup() + static inline void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 + + static inline bool isr_state() { return !__get_PRIMASK(); } + static inline void isr_on() { sei(); } + static inline void isr_off() { cli(); } + + static inline void delay_ms(const int ms) { delay(ms); } + + // Tasks, called from idle() + static inline void idletask() {} + + // Reset + static uint8_t get_reset_source(); + static inline void clear_reset_source() {} + + // Free SRAM + static inline int freeMemory() { return freeMemory(); } + + // + // ADC Methods + // + + static uint16_t adc_result; + + // Called by Temperature::init once at startup + static void adc_init(); + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const uint8_t ch); + + // Begin ADC sampling on the given channel + static void adc_start(const pin_t pin); + + // Is the ADC ready for reading? + static inline bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value() { return adc_result; } + + /** + * Set the PWM duty cycle for the pin to the given value. + * No option to invert the duty cycle [default = false] + * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] + */ + static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false) { + analogWrite(pin, v); + } + +}; + +extern MarlinHAL hal; diff --git a/Marlin/src/HAL/STM32/HAL.cpp b/Marlin/src/HAL/STM32/HAL.cpp index 0920a72ec1..324a78316a 100644 --- a/Marlin/src/HAL/STM32/HAL.cpp +++ b/Marlin/src/HAL/STM32/HAL.cpp @@ -53,16 +53,18 @@ // Public Variables // ------------------------ -uint16_t HAL_adc_result; +uint16_t MarlinHAL::adc_result; // ------------------------ // Public functions // ------------------------ -TERN_(POSTMORTEM_DEBUGGING, extern void install_min_serial()); +#if ENABLED(POSTMORTEM_DEBUGGING) + extern void install_min_serial(); +#endif // HAL initialization task -void HAL_init() { +void MarlinHAL::init() { // Ensure F_CPU is a constant expression. // If the compiler breaks here, it means that delay code that should compute at compile time will not work. // So better safe than sorry here. @@ -103,7 +105,7 @@ void HAL_init() { } // HAL idle task -void HAL_idletask() { +void MarlinHAL::idletask() { #if HAS_SHARED_MEDIA // Stm32duino currently doesn't have a "loop/idle" method CDC_resume_receive(); @@ -111,9 +113,9 @@ void HAL_idletask() { #endif } -void HAL_clear_reset_source() { __HAL_RCC_CLEAR_RESET_FLAGS(); } +void MarlinHAL::reboot() { NVIC_SystemReset(); } -uint8_t HAL_get_reset_source() { +uint8_t MarlinHAL::get_reset_source() { return #ifdef RCC_FLAG_IWDGRST // Some sources may not exist... RESET != __HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) ? RST_WATCHDOG : @@ -137,24 +139,14 @@ uint8_t HAL_get_reset_source() { ; } -void HAL_reboot() { NVIC_SystemReset(); } - -void _delay_ms(const int delay_ms) { delay(delay_ms); } +void MarlinHAL::clear_reset_source() { __HAL_RCC_CLEAR_RESET_FLAGS(); } extern "C" { extern unsigned int _ebss; // end of bss section } -// ------------------------ -// ADC -// ------------------------ - -// TODO: Make sure this doesn't cause any delay -void HAL_adc_start_conversion(const uint8_t adc_pin) { HAL_adc_result = analogRead(adc_pin); } -uint16_t HAL_adc_get_result() { return HAL_adc_result; } - // Reset the system to initiate a firmware flash -WEAK void flashFirmware(const int16_t) { HAL_reboot(); } +WEAK void flashFirmware(const int16_t) { hal.reboot(); } // Maple Compatibility volatile uint32_t systick_uptime_millis = 0; diff --git a/Marlin/src/HAL/STM32/HAL.h b/Marlin/src/HAL/STM32/HAL.h index adaf14223f..d71ccd796b 100644 --- a/Marlin/src/HAL/STM32/HAL.h +++ b/Marlin/src/HAL/STM32/HAL.h @@ -44,9 +44,9 @@ #define CPU_ST7920_DELAY_2 40 #define CPU_ST7920_DELAY_3 340 -// -// Serial Ports -// +// ------------------------ +// Serial ports +// ------------------------ #ifdef USBCON #include #include "../../core/serial_hook.h" @@ -115,17 +115,14 @@ #define analogInputToDigitalPin(p) (p) #endif -#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() -#define CRITICAL_SECTION_END() if (!primask) __enable_irq() -#define ISRS_ENABLED() (!__get_PRIMASK()) -#define ENABLE_ISRS() __enable_irq() -#define DISABLE_ISRS() __disable_irq() +// +// Interrupts +// +#define CRITICAL_SECTION_START() const bool irqon = !__get_PRIMASK(); __disable_irq() +#define CRITICAL_SECTION_END() if (irqon) __enable_irq() #define cli() __disable_irq() #define sei() __enable_irq() -// On AVR this is in math.h? -#define square(x) ((x)*(x)) - // ------------------------ // Types // ------------------------ @@ -136,54 +133,14 @@ typedef int16_t pin_t; #endif -#define HAL_SERVO_LIB libServo +class libServo; +typedef libServo hal_servo_t; #define PAUSE_SERVO_OUTPUT() libServo::pause_all_servos() #define RESUME_SERVO_OUTPUT() libServo::resume_all_servos() // ------------------------ -// Public Variables -// ------------------------ - -// result of last ADC conversion -extern uint16_t HAL_adc_result; - -// ------------------------ -// Public functions -// ------------------------ - -// Memory related -#define __bss_end __bss_end__ - -// Enable hooks into setup for HAL -void HAL_init(); -#define HAL_IDLETASK 1 -void HAL_idletask(); - -// Clear reset reason -void HAL_clear_reset_source(); - -// Reset reason -uint8_t HAL_get_reset_source(); - -void HAL_reboot(); - -void _delay_ms(const int delay); - -extern "C" char* _sbrk(int incr); - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-function" - -static inline int freeMemory() { - volatile char top; - return &top - reinterpret_cast(_sbrk(0)); -} - -#pragma GCC diagnostic pop - -// // ADC -// +// ------------------------ #define HAL_ANALOG_SELECT(pin) pinMode(pin, INPUT) @@ -194,16 +151,10 @@ static inline int freeMemory() { #endif #define HAL_ADC_VREF 3.3 -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_result -#define HAL_ADC_READY() true - -inline void HAL_adc_init() { analogReadResolution(HAL_ADC_RESOLUTION); } - -void HAL_adc_start_conversion(const uint8_t adc_pin); - -uint16_t HAL_adc_get_result(); +// +// Pin Mapping for M42, M43, M226 +// #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) @@ -226,17 +177,93 @@ extern volatile uint32_t systick_uptime_millis; #define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment -/** - * set_pwm_frequency - * Set the frequency of the timer corresponding to the provided pin - * All Timer PWM pins run at the same frequency - */ -void set_pwm_frequency(const pin_t pin, int f_desired); +// ------------------------ +// Class Utilities +// ------------------------ -/** - * set_pwm_duty - * Set the PWM duty cycle of the provided pin to the provided value - * Optionally allows inverting the duty cycle [default = false] - * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] - */ -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); +// Memory related +#define __bss_end __bss_end__ + +extern "C" char* _sbrk(int incr); + +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif + +static inline int freeMemory() { + volatile char top; + return &top - reinterpret_cast(_sbrk(0)); +} + +#pragma GCC diagnostic pop + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static void init(); // Called early in setup() + static inline void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 + + static inline bool isr_state() { return !__get_PRIMASK(); } + static inline void isr_on() { sei(); } + static inline void isr_off() { cli(); } + + static inline void delay_ms(const int ms) { delay(ms); } + + // Tasks, called from idle() + static void idletask(); + + // Reset + static uint8_t get_reset_source(); + static void clear_reset_source(); + + // Free SRAM + static inline int freeMemory() { return freeMemory(); } + + // + // ADC Methods + // + + static uint16_t adc_result; + + // Called by Temperature::init once at startup + static inline void adc_init() { + analogReadResolution(HAL_ADC_RESOLUTION); + } + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const pin_t pin); + + // Begin ADC sampling on the given channel + static void adc_start(const pin_t pin) { adc_result = analogRead(pin); } + + // Is the ADC ready for reading? + static inline bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value() { return adc_result; } + + /** + * Set the PWM duty cycle for the pin to the given value. + * Optionally invert the duty cycle [default = false] + * Optionally change the maximum size of the provided value to enable finer PWM duty control [default = 255] + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); + + /** + * Set the frequency of the timer for the given pin. + * All Timer PWM pins run at the same frequency. + */ + static void set_pwm_frequency(const pin_t pin, int f_desired); + +}; + +extern MarlinHAL hal; diff --git a/Marlin/src/HAL/STM32/HAL_SPI.cpp b/Marlin/src/HAL/STM32/HAL_SPI.cpp index 8ee4761647..7737245de8 100644 --- a/Marlin/src/HAL/STM32/HAL_SPI.cpp +++ b/Marlin/src/HAL/STM32/HAL_SPI.cpp @@ -102,9 +102,9 @@ static SPISettings spiConfig; // Soft SPI receive byte uint8_t spiRec() { - DISABLE_ISRS(); // No interrupts during byte receive + hal.isr_off(); // No interrupts during byte receive const uint8_t data = HAL_SPI_STM32_SpiTransfer_Mode_3(0xFF); - ENABLE_ISRS(); // Enable interrupts + hal.isr_off(); // Enable interrupts return data; } @@ -116,9 +116,9 @@ static SPISettings spiConfig; // Soft SPI send byte void spiSend(uint8_t data) { - DISABLE_ISRS(); // No interrupts during byte send + hal.isr_off(); // No interrupts during byte send HAL_SPI_STM32_SpiTransfer_Mode_3(data); // Don't care what is received - ENABLE_ISRS(); // Enable interrupts + hal.isr_on(); // Enable interrupts } // Soft SPI send block diff --git a/Marlin/src/HAL/STM32/eeprom_flash.cpp b/Marlin/src/HAL/STM32/eeprom_flash.cpp index 252b057362..7c8cc8dd21 100644 --- a/Marlin/src/HAL/STM32/eeprom_flash.cpp +++ b/Marlin/src/HAL/STM32/eeprom_flash.cpp @@ -174,9 +174,9 @@ bool PersistentStore::access_finish() { UNLOCK_FLASH(); TERN_(HAS_PAUSE_SERVO_OUTPUT, PAUSE_SERVO_OUTPUT()); - DISABLE_ISRS(); + hal.isr_off(); status = HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError); - ENABLE_ISRS(); + hal.isr_on(); TERN_(HAS_PAUSE_SERVO_OUTPUT, RESUME_SERVO_OUTPUT()); if (status != HAL_OK) { DEBUG_ECHOLNPGM("HAL_FLASHEx_Erase=", status); @@ -229,9 +229,9 @@ bool PersistentStore::access_finish() { // output. Servo output still glitches with interrupts disabled, but recovers after the // erase. TERN_(HAS_PAUSE_SERVO_OUTPUT, PAUSE_SERVO_OUTPUT()); - DISABLE_ISRS(); + hal.isr_off(); eeprom_buffer_flush(); - ENABLE_ISRS(); + hal.isr_on(); TERN_(HAS_PAUSE_SERVO_OUTPUT, RESUME_SERVO_OUTPUT()); eeprom_data_written = false; diff --git a/Marlin/src/HAL/STM32/fast_pwm.cpp b/Marlin/src/HAL/STM32/fast_pwm.cpp index b1bea5ce20..f6d0481c05 100644 --- a/Marlin/src/HAL/STM32/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32/fast_pwm.cpp @@ -29,7 +29,7 @@ // Array to support sticky frequency sets per timer static uint16_t timer_freq[TIMER_NUM]; -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { +void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer const PinName pin_name = digitalPinToPinName(pin); TIM_TypeDef * const Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); @@ -56,7 +56,7 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 if (previousMode != TIMER_OUTPUT_COMPARE_PWM1) HT->resume(); } -void set_pwm_frequency(const pin_t pin, int f_desired) { +void MarlinHAL::set_pwm_frequency(const pin_t pin, int f_desired) { if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer const PinName pin_name = digitalPinToPinName(pin); TIM_TypeDef * const Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance diff --git a/Marlin/src/HAL/STM32/pinsDebug.h b/Marlin/src/HAL/STM32/pinsDebug.h index 73d850fc43..a7f022a0b6 100644 --- a/Marlin/src/HAL/STM32/pinsDebug.h +++ b/Marlin/src/HAL/STM32/pinsDebug.h @@ -115,7 +115,6 @@ const XrefInfo pin_xref[] PROGMEM = { #define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), DIGITAL_PIN_TO_ANALOG_PIN(pin)); SERIAL_ECHO(buffer); }while(0) #define PRINT_PORT(ANUM) port_print(ANUM) #define DIGITAL_PIN_TO_ANALOG_PIN(ANUM) -1 // will report analog pin number in the print port routine -#define GET_PIN_MAP_PIN_M43(Index) pin_xref[Index].Ard_num // x is a variable used to search pin_array #define GET_ARRAY_IS_DIGITAL(x) ((bool) pin_array[x].is_digital) @@ -123,6 +122,11 @@ const XrefInfo pin_xref[] PROGMEM = { #define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0) #define MULTI_NAME_PAD 33 // space needed to be pretty if not first name assigned to a pin +// +// Pin Mapping for M43 +// +#define GET_PIN_MAP_PIN_M43(Index) pin_xref[Index].Ard_num + #ifndef M43_NEVER_TOUCH #define _M43_NEVER_TOUCH(Index) (Index >= 9 && Index <= 12) // SERIAL/USB pins: PA9(TX) PA10(RX) PA11(USB_DM) PA12(USB_DP) #ifdef KILL_PIN diff --git a/Marlin/src/HAL/STM32/timers.h b/Marlin/src/HAL/STM32/timers.h index aad543229e..6828998198 100644 --- a/Marlin/src/HAL/STM32/timers.h +++ b/Marlin/src/HAL/STM32/timers.h @@ -116,5 +116,5 @@ FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const ha } } -#define HAL_timer_isr_prologue(T) -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_prologue(T) NOOP +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/STM32F1/HAL.cpp b/Marlin/src/HAL/STM32F1/HAL.cpp index f29b305361..efc513cf94 100644 --- a/Marlin/src/HAL/STM32F1/HAL.cpp +++ b/Marlin/src/HAL/STM32F1/HAL.cpp @@ -79,7 +79,7 @@ #define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ // ------------------------ -// Public Variables +// Serial ports // ------------------------ #if defined(SERIAL_USB) && !HAS_SD_HOST_DRIVE @@ -112,72 +112,21 @@ #endif #endif -uint16_t HAL_adc_result; - // ------------------------ -// Private Variables +// ADC // ------------------------ -STM32ADC adc(ADC1); -const uint8_t adc_pins[] = { - #if HAS_TEMP_ADC_0 - TEMP_0_PIN, - #endif - #if HAS_TEMP_ADC_PROBE - TEMP_PROBE_PIN, - #endif - #if HAS_HEATED_BED - TEMP_BED_PIN, - #endif - #if HAS_TEMP_CHAMBER - TEMP_CHAMBER_PIN, - #endif - #if HAS_TEMP_COOLER - TEMP_COOLER_PIN, - #endif - #if HAS_TEMP_ADC_1 - TEMP_1_PIN, - #endif - #if HAS_TEMP_ADC_2 - TEMP_2_PIN, - #endif - #if HAS_TEMP_ADC_3 - TEMP_3_PIN, - #endif - #if HAS_TEMP_ADC_4 - TEMP_4_PIN, - #endif - #if HAS_TEMP_ADC_5 - TEMP_5_PIN, - #endif - #if HAS_TEMP_ADC_6 - TEMP_6_PIN, - #endif - #if HAS_TEMP_ADC_7 - TEMP_7_PIN, - #endif - #if ENABLED(FILAMENT_WIDTH_SENSOR) - FILWIDTH_PIN, - #endif - #if HAS_ADC_BUTTONS - ADC_KEYPAD_PIN, - #endif - #if HAS_JOY_ADC_X - JOY_X_PIN, - #endif - #if HAS_JOY_ADC_Y - JOY_Y_PIN, - #endif - #if HAS_JOY_ADC_Z - JOY_Z_PIN, - #endif - #if ENABLED(POWER_MONITOR_CURRENT) - POWER_MONITOR_CURRENT_PIN, - #endif - #if ENABLED(POWER_MONITOR_VOLTAGE) - POWER_MONITOR_VOLTAGE_PIN, - #endif -}; +uint16_t analogRead(pin_t pin) { + const bool is_analog = _GET_MODE(pin) == GPIO_INPUT_ANALOG; + return is_analog ? analogRead(uint8_t(pin)) : 0; +} + +// Wrapper to maple unprotected analogWrite +void analogWrite(pin_t pin, int pwm_val8) { + if (PWM_PIN(pin)) analogWrite(uint8_t(pin), pwm_val8); +} + +uint16_t MarlinHAL::adc_result; enum TempPinIndex : char { #if HAS_TEMP_ADC_0 @@ -245,15 +194,16 @@ uint16_t HAL_adc_results[ADC_PIN_COUNT]; // ------------------------ // Private functions // ------------------------ + static void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); // only values 0..7 are used - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ + reg_value = SCB->AIRCR; // read old register configuration + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); // clear bits to change reg_value = (reg_value | ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << 8)); /* Insert write key & priority group */ + (PriorityGroupTmp << 8)); // Insert write key & priority group SCB->AIRCR = reg_value; } @@ -261,6 +211,8 @@ static void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { // Public functions // ------------------------ +void flashFirmware(const int16_t) { hal.reboot(); } + // // Leave PA11/PA12 intact if USBSerial is not used // @@ -280,7 +232,11 @@ static void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { TERN_(POSTMORTEM_DEBUGGING, extern void install_min_serial()); -void HAL_init() { +// ------------------------ +// MarlinHAL class +// ------------------------ + +void MarlinHAL::init() { NVIC_SetPriorityGrouping(0x3); #if PIN_EXISTS(LED) OUT_WRITE(LED_PIN, LOW); @@ -299,7 +255,7 @@ void HAL_init() { } // HAL idle task -void HAL_idletask() { +void MarlinHAL::idletask() { #if HAS_SHARED_MEDIA // If Marlin is using the SD card we need to lock it to prevent access from // a PC via USB. @@ -314,14 +270,7 @@ void HAL_idletask() { #endif } -void HAL_clear_reset_source() { } - -/** - * TODO: Check this and change or remove. - */ -uint8_t HAL_get_reset_source() { return RST_POWER_ON; } - -void _delay_ms(const int delay_ms) { delay(delay_ms); } +void MarlinHAL::reboot() { nvic_sys_reset(); } extern "C" { extern unsigned int _ebss; // end of bss section @@ -355,11 +304,70 @@ extern "C" { } */ -// ------------------------ // ADC -// ------------------------ + // Init the AD in continuous capture mode -void HAL_adc_init() { +void MarlinHAL::adc_init() { + static const uint8_t adc_pins[] = { + #if HAS_TEMP_ADC_0 + TEMP_0_PIN, + #endif + #if HAS_TEMP_ADC_PROBE + TEMP_PROBE_PIN, + #endif + #if HAS_HEATED_BED + TEMP_BED_PIN, + #endif + #if HAS_TEMP_CHAMBER + TEMP_CHAMBER_PIN, + #endif + #if HAS_TEMP_COOLER + TEMP_COOLER_PIN, + #endif + #if HAS_TEMP_ADC_1 + TEMP_1_PIN, + #endif + #if HAS_TEMP_ADC_2 + TEMP_2_PIN, + #endif + #if HAS_TEMP_ADC_3 + TEMP_3_PIN, + #endif + #if HAS_TEMP_ADC_4 + TEMP_4_PIN, + #endif + #if HAS_TEMP_ADC_5 + TEMP_5_PIN, + #endif + #if HAS_TEMP_ADC_6 + TEMP_6_PIN, + #endif + #if HAS_TEMP_ADC_7 + TEMP_7_PIN, + #endif + #if ENABLED(FILAMENT_WIDTH_SENSOR) + FILWIDTH_PIN, + #endif + #if HAS_ADC_BUTTONS + ADC_KEYPAD_PIN, + #endif + #if HAS_JOY_ADC_X + JOY_X_PIN, + #endif + #if HAS_JOY_ADC_Y + JOY_Y_PIN, + #endif + #if HAS_JOY_ADC_Z + JOY_Z_PIN, + #endif + #if ENABLED(POWER_MONITOR_CURRENT) + POWER_MONITOR_CURRENT_PIN, + #endif + #if ENABLED(POWER_MONITOR_VOLTAGE) + POWER_MONITOR_VOLTAGE_PIN, + #endif + }; + static STM32ADC adc(ADC1); // configure the ADC adc.calibrate(); #if F_CPU > 72000000 @@ -374,10 +382,10 @@ void HAL_adc_init() { adc.startConversion(); } -void HAL_adc_start_conversion(const uint8_t adc_pin) { +void MarlinHAL::adc_start(const pin_t pin) { //TEMP_PINS pin_index; TempPinIndex pin_index; - switch (adc_pin) { + switch (pin) { default: return; #if HAS_TEMP_ADC_0 case TEMP_0_PIN: pin_index = TEMP_0; break; @@ -440,20 +448,4 @@ void HAL_adc_start_conversion(const uint8_t adc_pin) { HAL_adc_result = HAL_adc_results[(int)pin_index] >> (12 - HAL_ADC_RESOLUTION); // shift out unused bits } -uint16_t HAL_adc_get_result() { return HAL_adc_result; } - -uint16_t analogRead(pin_t pin) { - const bool is_analog = _GET_MODE(pin) == GPIO_INPUT_ANALOG; - return is_analog ? analogRead(uint8_t(pin)) : 0; -} - -// Wrapper to maple unprotected analogWrite -void analogWrite(pin_t pin, int pwm_val8) { - if (PWM_PIN(pin)) analogWrite(uint8_t(pin), pwm_val8); -} - -void HAL_reboot() { nvic_sys_reset(); } - -void flashFirmware(const int16_t) { HAL_reboot(); } - #endif // __STM32F1__ diff --git a/Marlin/src/HAL/STM32F1/HAL.h b/Marlin/src/HAL/STM32F1/HAL.h index 153cfe8ac8..517c8f2cb8 100644 --- a/Marlin/src/HAL/STM32F1/HAL.h +++ b/Marlin/src/HAL/STM32F1/HAL.h @@ -66,6 +66,10 @@ #endif #endif +// ------------------------ +// Serial ports +// ------------------------ + #ifdef SERIAL_USB typedef ForwardSerial1Class< USBSerial > DefaultSerial1; extern DefaultSerial1 MSerial0; @@ -141,11 +145,6 @@ #endif #endif -// Set interrupt grouping for this MCU -void HAL_init(); -#define HAL_IDLETASK 1 -void HAL_idletask(); - /** * TODO: review this to return 1 for pins that are not analog input */ @@ -158,15 +157,7 @@ void HAL_idletask(); #define NO_COMPILE_TIME_PWM #endif -#define CRITICAL_SECTION_START() uint32_t primask = __get_primask(); (void)__iCliRetVal() -#define CRITICAL_SECTION_END() if (!primask) (void)__iSeiRetVal() -#define ISRS_ENABLED() (!__get_primask()) -#define ENABLE_ISRS() ((void)__iSeiRetVal()) -#define DISABLE_ISRS() ((void)__iCliRetVal()) - -// On AVR this is in math.h? -#define square(x) ((x)*(x)) - +// Reset Reason #define RST_POWER_ON 1 #define RST_EXTERNAL 2 #define RST_BROWN_OUT 4 @@ -181,62 +172,24 @@ void HAL_idletask(); typedef int8_t pin_t; -// ------------------------ -// Public Variables -// ------------------------ - // Result of last ADC conversion extern uint16_t HAL_adc_result; // ------------------------ -// Public functions +// Interrupts // ------------------------ -// Disable interrupts +#define CRITICAL_SECTION_START() const bool irqon = !__get_primask(); (void)__iCliRetVal() +#define CRITICAL_SECTION_END() if (!primask) (void)__iSeiRetVal() #define cli() noInterrupts() - -// Enable interrupts #define sei() interrupts() -// Memory related -#define __bss_end __bss_end__ - -// Clear reset reason -void HAL_clear_reset_source(); - -// Reset reason -uint8_t HAL_get_reset_source(); - -void HAL_reboot(); - -void _delay_ms(const int delay); - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-function" - -/* -extern "C" { - int freeMemory(); -} -*/ - -extern "C" char* _sbrk(int incr); - -static inline int freeMemory() { - volatile char top; - return &top - _sbrk(0); -} - -#pragma GCC diagnostic pop - -// +// ------------------------ // ADC -// +// ------------------------ #define HAL_ANALOG_SELECT(pin) pinMode(pin, INPUT_ANALOG); -void HAL_adc_init(); - #ifdef ADC_RESOLUTION #define HAL_ADC_RESOLUTION ADC_RESOLUTION #else @@ -244,43 +197,116 @@ void HAL_adc_init(); #endif #define HAL_ADC_VREF 3.3 -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_result -#define HAL_ADC_READY() true - -void HAL_adc_start_conversion(const uint8_t adc_pin); -uint16_t HAL_adc_get_result(); uint16_t analogRead(pin_t pin); // need HAL_ANALOG_SELECT() first void analogWrite(pin_t pin, int pwm_val8); // PWM only! mul by 257 in maple!? +// +// Pin Mapping for M42, M43, M226 +// #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) -#define JTAG_DISABLE() afio_cfg_debug_ports(AFIO_DEBUG_SW_ONLY) +#define JTAG_DISABLE() afio_cfg_debug_ports(AFIO_DEBUG_SW_ONLY) #define JTAGSWD_DISABLE() afio_cfg_debug_ports(AFIO_DEBUG_NONE) #define PLATFORM_M997_SUPPORT void flashFirmware(const int16_t); +#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment #ifndef PWM_FREQUENCY #define PWM_FREQUENCY 1000 // Default PWM Frequency #endif -#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment -/** - * set_pwm_frequency - * Set the frequency of the timer corresponding to the provided pin - * All Timer PWM pins run at the same frequency - */ -void set_pwm_frequency(const pin_t pin, int f_desired); +// ------------------------ +// Class Utilities +// ------------------------ -/** - * set_pwm_duty - * Set the PWM duty cycle of the provided pin to the provided value - * Optionally allows inverting the duty cycle [default = false] - * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] - * The timer must be pre-configured with set_pwm_frequency() if the default frequency is not desired. - */ -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); +// Memory related +#define __bss_end __bss_end__ + +void _delay_ms(const int ms); + +extern "C" char* _sbrk(int incr); + +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif + +static inline int freeMemory() { + volatile char top; + return &top - _sbrk(0); +} + +#pragma GCC diagnostic pop + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static void init(); // Called early in setup() + static inline void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 + + static inline bool isr_state() { return !__get_primask(); } + static inline void isr_on() { ((void)__iSeiRetVal()); } + static inline void isr_off() { ((void)__iCliRetVal()); } + + static inline void delay_ms(const int ms) { delay(ms); } + + // Tasks, called from idle() + static void idletask(); + + // Reset + static inline uint8_t get_reset_source() { return RST_POWER_ON; } + static inline void clear_reset_source() {} + + // Free SRAM + static inline int freeMemory() { return freeMemory(); } + + // + // ADC Methods + // + + static uint16_t adc_result; + + // Called by Temperature::init once at startup + static void adc_init(); + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const pin_t pin); + + // Begin ADC sampling on the given channel + static void adc_start(const pin_t pin); + + // Is the ADC ready for reading? + static inline bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value() { return adc_result; } + + /** + * Set the PWM duty cycle for the pin to the given value. + * Optionally invert the duty cycle [default = false] + * Optionally change the maximum size of the provided value to enable finer PWM duty control [default = 255] + * The timer must be pre-configured with set_pwm_frequency() if the default frequency is not desired. + */ + static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false); + + /** + * Set the frequency of the timer for the given pin. + * All Timer PWM pins run at the same frequency. + */ + static void set_pwm_frequency(const pin_t pin, int f_desired); + +}; + +extern MarlinHAL hal; diff --git a/Marlin/src/HAL/STM32F1/Servo.h b/Marlin/src/HAL/STM32F1/Servo.h index b6143de81d..745a1c93f0 100644 --- a/Marlin/src/HAL/STM32F1/Servo.h +++ b/Marlin/src/HAL/STM32F1/Servo.h @@ -35,7 +35,8 @@ #define SERVO_DEFAULT_MIN_ANGLE 0 #define SERVO_DEFAULT_MAX_ANGLE 180 -#define HAL_SERVO_LIB libServo +class libServo; +typedef libServo hal_servo_t; class libServo { public: diff --git a/Marlin/src/HAL/STM32F1/fast_pwm.cpp b/Marlin/src/HAL/STM32F1/fast_pwm.cpp index 98d56bc5e9..11a1a10712 100644 --- a/Marlin/src/HAL/STM32F1/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32F1/fast_pwm.cpp @@ -21,11 +21,9 @@ */ #ifdef __STM32F1__ -#include "../../inc/MarlinConfigPre.h" +#include "../../inc/MarlinConfig.h" #include -#include "HAL.h" -#include "timers.h" #define NR_TIMERS TERN(STM32_XL_DENSITY, 14, 8) // Maple timers, 14 for STM32_XL_DENSITY (F/G chips), 8 for HIGH density (C D E) @@ -38,7 +36,7 @@ inline uint8_t timer_and_index_for_pin(const pin_t pin, timer_dev **timer_ptr) { return 0; } -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { +void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { if (!PWM_PIN(pin)) return; timer_dev *timer; UNUSED(timer); @@ -51,7 +49,7 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 timer_set_mode(timer, channel, TIMER_PWM); // PWM Output Mode } -void set_pwm_frequency(const pin_t pin, int f_desired) { +void MarlinHAL::set_pwm_frequency(const pin_t pin, int f_desired) { if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer timer_dev *timer; UNUSED(timer); diff --git a/Marlin/src/HAL/STM32F1/timers.h b/Marlin/src/HAL/STM32F1/timers.h index f9ab6d13d3..0cd807fc84 100644 --- a/Marlin/src/HAL/STM32F1/timers.h +++ b/Marlin/src/HAL/STM32F1/timers.h @@ -188,7 +188,7 @@ FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { } } -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_epilogue(T) NOOP // No command is available in framework to turn off ARPE bit, which is turned on by default in libmaple. // Needed here to reset ARPE=0 for stepper timer diff --git a/Marlin/src/HAL/TEENSY31_32/HAL.cpp b/Marlin/src/HAL/TEENSY31_32/HAL.cpp index f08cf799e9..b923ab77b1 100644 --- a/Marlin/src/HAL/TEENSY31_32/HAL.cpp +++ b/Marlin/src/HAL/TEENSY31_32/HAL.cpp @@ -31,6 +31,10 @@ #include +// ------------------------ +// Serial ports +// ------------------------ + #define _IMPLEMENT_SERIAL(X) DefaultSerial##X MSerial##X(false, Serial##X) #define IMPLEMENT_SERIAL(X) _IMPLEMENT_SERIAL(X) #if WITHIN(SERIAL_PORT, 0, 3) @@ -40,45 +44,9 @@ #endif USBSerialType USBSerial(false, SerialUSB); -uint16_t HAL_adc_result; - -static const uint8_t pin2sc1a[] = { - 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 0, 19, 3, 31, // 0-13, we treat them as A0-A13 - 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 (A0-A9) - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, // 24-33 - 0+64, 19+64, 3+64, 31+64, // 34-37 (A10-A13) - 26, 22, 23, 27, 29, 30 // 38-43: temp. sensor, VREF_OUT, A14, bandgap, VREFH, VREFL. A14 isn't connected to anything in Teensy 3.0. -}; - -/* - // disable interrupts - void cli() { noInterrupts(); } - - // enable interrupts - void sei() { interrupts(); } -*/ - -void HAL_adc_init() { - analog_init(); - while (ADC0_SC3 & ADC_SC3_CAL) {}; // Wait for calibration to finish - NVIC_ENABLE_IRQ(IRQ_FTM1); -} - -void HAL_clear_reset_source() { } - -uint8_t HAL_get_reset_source() { - switch (RCM_SRS0) { - case 128: return RST_POWER_ON; break; - case 64: return RST_EXTERNAL; break; - case 32: return RST_WATCHDOG; break; - // case 8: return RST_LOSS_OF_LOCK; break; - // case 4: return RST_LOSS_OF_CLOCK; break; - // case 2: return RST_LOW_VOLTAGE; break; - } - return 0; -} - -void HAL_reboot() { _reboot_Teensyduino_(); } +// ------------------------ +// Class Utilities +// ------------------------ extern "C" { extern char __bss_end; @@ -95,8 +63,43 @@ extern "C" { } } -void HAL_adc_start_conversion(const uint8_t adc_pin) { ADC0_SC1A = pin2sc1a[adc_pin]; } +// ------------------------ +// MarlinHAL Class +// ------------------------ -uint16_t HAL_adc_get_result() { return ADC0_RA; } +void MarlinHAL::reboot() { _reboot_Teensyduino_(); } + +uint8_t MarlinHAL::get_reset_source() { + switch (RCM_SRS0) { + case 128: return RST_POWER_ON; break; + case 64: return RST_EXTERNAL; break; + case 32: return RST_WATCHDOG; break; + // case 8: return RST_LOSS_OF_LOCK; break; + // case 4: return RST_LOSS_OF_CLOCK; break; + // case 2: return RST_LOW_VOLTAGE; break; + } + return 0; +} + +// ADC + +void MarlinHAL::adc_init() { + analog_init(); + while (ADC0_SC3 & ADC_SC3_CAL) {}; // Wait for calibration to finish + NVIC_ENABLE_IRQ(IRQ_FTM1); +} + +void MarlinHAL::adc_start(const pin_t pin) { + static const uint8_t pin2sc1a[] = { + 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 0, 19, 3, 31, // 0-13, we treat them as A0-A13 + 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 (A0-A9) + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, // 24-33 + 0+64, 19+64, 3+64, 31+64, // 34-37 (A10-A13) + 26, 22, 23, 27, 29, 30 // 38-43: temp. sensor, VREF_OUT, A14, bandgap, VREFH, VREFL. A14 isn't connected to anything in Teensy 3.0. + }; + ADC0_SC1A = pin2sc1a[pin]; +} + +uint16_t MarlinHAL::adc_value() { return ADC0_RA; } #endif // __MK20DX256__ diff --git a/Marlin/src/HAL/TEENSY31_32/HAL.h b/Marlin/src/HAL/TEENSY31_32/HAL.h index 61d8b34604..fdf914b1b0 100644 --- a/Marlin/src/HAL/TEENSY31_32/HAL.h +++ b/Marlin/src/HAL/TEENSY31_32/HAL.h @@ -36,12 +36,9 @@ #include -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 - -//#undef MOTHERBOARD -//#define MOTHERBOARD BOARD_TEENSY31_32 +// ------------------------ +// Defines +// ------------------------ #define IS_32BIT_TEENSY 1 #define IS_TEENSY_31_32 1 @@ -49,6 +46,14 @@ #define IS_TEENSY32 1 #endif +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 + +// ------------------------ +// Serial ports +// ------------------------ + #include "../../core/serial_hook.h" #define Serial0 Serial @@ -72,31 +77,46 @@ extern USBSerialType USBSerial; #error "The required SERIAL_PORT must be from 0 to 3, or -1 for Native USB." #endif -#define HAL_SERVO_LIB libServo +// ------------------------ +// Types +// ------------------------ + +class libServo; +typedef libServo hal_servo_t; typedef int8_t pin_t; +// ------------------------ +// Interrupts +// ------------------------ + +uint32_t __get_PRIMASK(void); // CMSIS +#define CRITICAL_SECTION_START() const bool irqon = !__get_PRIMASK(); __disable_irq() +#define CRITICAL_SECTION_END() if (irqon) __enable_irq() + +// ------------------------ +// ADC +// ------------------------ + #ifndef analogInputToDigitalPin #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1) #endif -#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() -#define CRITICAL_SECTION_END() if (!primask) __enable_irq() -#define ISRS_ENABLED() (!__get_PRIMASK()) -#define ENABLE_ISRS() __enable_irq() -#define DISABLE_ISRS() __disable_irq() +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 -inline void HAL_init() {} +#define HAL_ANALOG_SELECT(pin) -// Clear the reset reason -void HAL_clear_reset_source(); +// +// Pin Mapping for M42, M43, M226 +// +#define GET_PIN_MAP_PIN(index) index +#define GET_PIN_MAP_INDEX(pin) pin +#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) -// Get the reason for the reset -uint8_t HAL_get_reset_source(); - -void HAL_reboot(); - -FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } +// ------------------------ +// Class Utilities +// ------------------------ #pragma GCC diagnostic push #if GCC_VERSION <= 50000 @@ -107,27 +127,64 @@ extern "C" int freeMemory(); #pragma GCC diagnostic pop -// ADC +// ------------------------ +// MarlinHAL Class +// ------------------------ -void HAL_adc_init(); +class MarlinHAL { +public: -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_get_result() -#define HAL_ADC_READY() true + // Earliest possible init, before setup() + MarlinHAL() {} -#define HAL_ANALOG_SELECT(pin) + static inline void init() {} // Called early in setup() + static inline void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 -void HAL_adc_start_conversion(const uint8_t adc_pin); -uint16_t HAL_adc_get_result(); + static inline bool isr_state() { return !__get_PRIMASK(); } + static inline void isr_on() { __enable_irq(); } + static inline void isr_off() { __disable_irq(); } -// PWM + static inline void delay_ms(const int ms) { delay(ms); } -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + // Tasks, called from idle() + static inline void idletask() {} -// Pin Map + // Reset + static uint8_t get_reset_source(); + static inline void clear_reset_source() {} -#define GET_PIN_MAP_PIN(index) index -#define GET_PIN_MAP_INDEX(pin) pin -#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) + // Free SRAM + static inline int freeMemory() { return freeMemory(); } + + // + // ADC Methods + // + + // Called by Temperature::init once at startup + static void adc_init(); + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const pin_t ch); + + // Begin ADC sampling on the given channel + static void adc_start(const pin_t ch); + + // Is the ADC ready for reading? + static inline bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value(); + + /** + * Set the PWM duty cycle for the pin to the given value. + * No option to invert the duty cycle [default = false] + * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] + */ + static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + +}; + +extern MarlinHAL hal; diff --git a/Marlin/src/HAL/TEENSY31_32/timers.h b/Marlin/src/HAL/TEENSY31_32/timers.h index 3b073d63ab..9fcbb6f232 100644 --- a/Marlin/src/HAL/TEENSY31_32/timers.h +++ b/Marlin/src/HAL/TEENSY31_32/timers.h @@ -110,4 +110,4 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); void HAL_timer_isr_prologue(const uint8_t timer_num); -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/TEENSY35_36/HAL.cpp b/Marlin/src/HAL/TEENSY35_36/HAL.cpp index 046c00b56e..54a5ad3855 100644 --- a/Marlin/src/HAL/TEENSY35_36/HAL.cpp +++ b/Marlin/src/HAL/TEENSY35_36/HAL.cpp @@ -31,6 +31,10 @@ #include +// ------------------------ +// Serial ports +// ------------------------ + #define _IMPLEMENT_SERIAL(X) DefaultSerial##X MSerial##X(false, Serial##X) #define IMPLEMENT_SERIAL(X) _IMPLEMENT_SERIAL(X) #if WITHIN(SERIAL_PORT, 0, 3) @@ -39,54 +43,9 @@ USBSerialType USBSerial(false, SerialUSB); -uint16_t HAL_adc_result, HAL_adc_select; - -static const uint8_t pin2sc1a[] = { - 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 3, 19+128, 14+128, 15+128, // 0-13 -> A0-A13 - 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 are A0-A9 - 255, 255, 255, 255, 255, 255, 255, // 24-30 are digital only - 14+128, 15+128, 17, 18, 4+128, 5+128, 6+128, 7+128, 17+128, // 31-39 are A12-A20 - 255, 255, 255, 255, 255, 255, 255, 255, 255, // 40-48 are digital only - 10+128, 11+128, // 49-50 are A23-A24 - 255, 255, 255, 255, 255, 255, 255, // 51-57 are digital only - 255, 255, 255, 255, 255, 255, // 58-63 (sd card pins) are digital only - 3, 19+128, // 64-65 are A10-A11 - 23, 23+128,// 66-67 are A21-A22 (DAC pins) - 1, 1+128, // 68-69 are A25-A26 (unused USB host port on Teensy 3.5) - 26, // 70 is Temperature Sensor - 18+128 // 71 is Vref -}; - -/* - // disable interrupts - void cli() { noInterrupts(); } - - // enable interrupts - void sei() { interrupts(); } -*/ - -void HAL_adc_init() { - analog_init(); - while (ADC0_SC3 & ADC_SC3_CAL) {}; // Wait for calibration to finish - while (ADC1_SC3 & ADC_SC3_CAL) {}; // Wait for calibration to finish - NVIC_ENABLE_IRQ(IRQ_FTM1); -} - -void HAL_clear_reset_source() { } - -uint8_t HAL_get_reset_source() { - switch (RCM_SRS0) { - case 128: return RST_POWER_ON; break; - case 64: return RST_EXTERNAL; break; - case 32: return RST_WATCHDOG; break; - // case 8: return RST_LOSS_OF_LOCK; break; - // case 4: return RST_LOSS_OF_CLOCK; break; - // case 2: return RST_LOW_VOLTAGE; break; - } - return 0; -} - -void HAL_reboot() { _reboot_Teensyduino_(); } +// ------------------------ +// Class Utilities +// ------------------------ extern "C" { extern char __bss_end; @@ -103,24 +62,69 @@ extern "C" { } } -void HAL_adc_start_conversion(const uint8_t adc_pin) { +// ------------------------ +// MarlinHAL Class +// ------------------------ + +void MarlinHAL::reboot() { _reboot_Teensyduino_(); } + +// Reset + +uint8_t MarlinHAL::get_reset_source() { + switch (RCM_SRS0) { + case 128: return RST_POWER_ON; break; + case 64: return RST_EXTERNAL; break; + case 32: return RST_WATCHDOG; break; + // case 8: return RST_LOSS_OF_LOCK; break; + // case 4: return RST_LOSS_OF_CLOCK; break; + // case 2: return RST_LOW_VOLTAGE; break; + } + return 0; +} + +// ADC + +int8_t MarlinHAL::adc_select; + +void MarlinHAL::adc_init() { + analog_init(); + while (ADC0_SC3 & ADC_SC3_CAL) { /* Wait for calibration to finish */ } + while (ADC1_SC3 & ADC_SC3_CAL) { /* Wait for calibration to finish */ } + NVIC_ENABLE_IRQ(IRQ_FTM1); +} + +void MarlinHAL::adc_start(const pin_t adc_pin) { + static const uint8_t pin2sc1a[] = { + 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 3, 19+128, 14+128, 15+128, // 0-13 -> A0-A13 + 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 are A0-A9 + 255, 255, 255, 255, 255, 255, 255, // 24-30 are digital only + 14+128, 15+128, 17, 18, 4+128, 5+128, 6+128, 7+128, 17+128, // 31-39 are A12-A20 + 255, 255, 255, 255, 255, 255, 255, 255, 255, // 40-48 are digital only + 10+128, 11+128, // 49-50 are A23-A24 + 255, 255, 255, 255, 255, 255, 255, // 51-57 are digital only + 255, 255, 255, 255, 255, 255, // 58-63 (sd card pins) are digital only + 3, 19+128, // 64-65 are A10-A11 + 23, 23+128,// 66-67 are A21-A22 (DAC pins) + 1, 1+128, // 68-69 are A25-A26 (unused USB host port on Teensy 3.5) + 26, // 70 is Temperature Sensor + 18+128 // 71 is Vref + }; const uint16_t pin = pin2sc1a[adc_pin]; if (pin == 0xFF) { - // Digital only - HAL_adc_select = -1; + adc_select = -1; // Digital only } else if (pin & 0x80) { - HAL_adc_select = 1; + adc_select = 1; ADC1_SC1A = pin & 0x7F; } else { - HAL_adc_select = 0; + adc_select = 0; ADC0_SC1A = pin; } } -uint16_t HAL_adc_get_result() { - switch (HAL_adc_select) { +uint16_t MarlinHAL::adc_value() { + switch (adc_select) { case 0: return ADC0_RA; case 1: return ADC1_RA; } diff --git a/Marlin/src/HAL/TEENSY35_36/HAL.h b/Marlin/src/HAL/TEENSY35_36/HAL.h index 892eb2d3c5..5506599cdf 100644 --- a/Marlin/src/HAL/TEENSY35_36/HAL.h +++ b/Marlin/src/HAL/TEENSY35_36/HAL.h @@ -37,10 +37,6 @@ #include #include -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 - // ------------------------ // Defines // ------------------------ @@ -53,6 +49,17 @@ #define IS_TEENSY35 1 #endif +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 + +#undef sq +#define sq(x) ((x)*(x)) + +// ------------------------ +// Serial ports +// ------------------------ + #include "../../core/serial_hook.h" #define Serial0 Serial @@ -76,34 +83,45 @@ extern USBSerialType USBSerial; #error "SERIAL_PORT must be from 0 to 3, or -1 for Native USB." #endif -#define HAL_SERVO_LIB libServo +// ------------------------ +// Types +// ------------------------ + +class libServo; +typedef libServo hal_servo_t; typedef int8_t pin_t; +// ------------------------ +// Interrupts +// ------------------------ + +#define CRITICAL_SECTION_START() const bool irqon = !__get_primask(); __disable_irq() +#define CRITICAL_SECTION_END() if (irqon) __enable_irq() + +// ------------------------ +// ADC +// ------------------------ + #ifndef analogInputToDigitalPin #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1) #endif -#define CRITICAL_SECTION_START() uint32_t primask = __get_primask(); __disable_irq() -#define CRITICAL_SECTION_END() if (!primask) __enable_irq() -#define ISRS_ENABLED() (!__get_primask()) -#define ENABLE_ISRS() __enable_irq() -#define DISABLE_ISRS() __disable_irq() +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 -#undef sq -#define sq(x) ((x)*(x)) +#define HAL_ANALOG_SELECT(pin) -inline void HAL_init() {} +// +// Pin Mapping for M42, M43, M226 +// +#define GET_PIN_MAP_PIN(index) index +#define GET_PIN_MAP_INDEX(pin) pin +#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) -// Clear reset reason -void HAL_clear_reset_source(); - -// Reset reason -uint8_t HAL_get_reset_source(); - -void HAL_reboot(); - -FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } +// ------------------------ +// Class Utilities +// ------------------------ #pragma GCC diagnostic push #if GCC_VERSION <= 50000 @@ -114,27 +132,66 @@ extern "C" int freeMemory(); #pragma GCC diagnostic pop -// ADC +// ------------------------ +// MarlinHAL Class +// ------------------------ -void HAL_adc_init(); +class MarlinHAL { +public: -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_get_result() -#define HAL_ADC_READY() true + // Earliest possible init, before setup() + MarlinHAL() {} -#define HAL_ANALOG_SELECT(pin) + static inline void init() {} // Called early in setup() + static inline void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 -void HAL_adc_start_conversion(const uint8_t adc_pin); -uint16_t HAL_adc_get_result(); + static inline bool isr_state() { return true; } + static inline void isr_on() { __enable_irq(); } + static inline void isr_off() { __disable_irq(); } -// PWM + static inline void delay_ms(const int ms) { delay(ms); } -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + // Tasks, called from idle() + static inline void idletask() {} -// Pin Map + // Reset + static uint8_t get_reset_source(); + static inline void clear_reset_source() {} -#define GET_PIN_MAP_PIN(index) index -#define GET_PIN_MAP_INDEX(pin) pin -#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) + // Free SRAM + static inline int freeMemory() { return freeMemory(); } + + // + // ADC Methods + // + + static int8_t adc_select; + + // Called by Temperature::init once at startup + static void adc_init(); + + // Called by Temperature::init for each sensor at startup + static inline void adc_enable(const pin_t) {} + + // Begin ADC sampling on the given channel + static void adc_start(const pin_t pin); + + // Is the ADC ready for reading? + static inline bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value(); + + /** + * Set the PWM duty cycle for the pin to the given value. + * No option to invert the duty cycle [default = false] + * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] + */ + static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + +}; + +extern MarlinHAL hal; diff --git a/Marlin/src/HAL/TEENSY35_36/timers.h b/Marlin/src/HAL/TEENSY35_36/timers.h index 6c342bbe0d..8af79d7392 100644 --- a/Marlin/src/HAL/TEENSY35_36/timers.h +++ b/Marlin/src/HAL/TEENSY35_36/timers.h @@ -109,4 +109,4 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); void HAL_timer_isr_prologue(const uint8_t timer_num); -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/TEENSY40_41/HAL.cpp b/Marlin/src/HAL/TEENSY40_41/HAL.cpp index 270bee0dc9..68bd38f72f 100644 --- a/Marlin/src/HAL/TEENSY40_41/HAL.cpp +++ b/Marlin/src/HAL/TEENSY40_41/HAL.cpp @@ -33,6 +33,10 @@ #include "timers.h" #include +// ------------------------ +// Serial ports +// ------------------------ + #define _IMPLEMENT_SERIAL(X) DefaultSerial##X MSerial##X(false, Serial##X) #define IMPLEMENT_SERIAL(X) _IMPLEMENT_SERIAL(X) #if WITHIN(SERIAL_PORT, 0, 3) @@ -40,75 +44,42 @@ #endif USBSerialType USBSerial(false, SerialUSB); -uint16_t HAL_adc_result, HAL_adc_select; +// ------------------------ +// Class Utilities +// ------------------------ -static const uint8_t pin2sc1a[] = { - 0x07, // 0/A0 AD_B1_02 - 0x08, // 1/A1 AD_B1_03 - 0x0C, // 2/A2 AD_B1_07 - 0x0B, // 3/A3 AD_B1_06 - 0x06, // 4/A4 AD_B1_01 - 0x05, // 5/A5 AD_B1_00 - 0x0F, // 6/A6 AD_B1_10 - 0x00, // 7/A7 AD_B1_11 - 0x0D, // 8/A8 AD_B1_08 - 0x0E, // 9/A9 AD_B1_09 - 0x01, // 24/A10 AD_B0_12 - 0x02, // 25/A11 AD_B0_13 - 0x83, // 26/A12 AD_B1_14 - only on ADC2, 3 - 0x84, // 27/A13 AD_B1_15 - only on ADC2, 4 - 0x07, // 14/A0 AD_B1_02 - 0x08, // 15/A1 AD_B1_03 - 0x0C, // 16/A2 AD_B1_07 - 0x0B, // 17/A3 AD_B1_06 - 0x06, // 18/A4 AD_B1_01 - 0x05, // 19/A5 AD_B1_00 - 0x0F, // 20/A6 AD_B1_10 - 0x00, // 21/A7 AD_B1_11 - 0x0D, // 22/A8 AD_B1_08 - 0x0E, // 23/A9 AD_B1_09 - 0x01, // 24/A10 AD_B0_12 - 0x02, // 25/A11 AD_B0_13 - 0x83, // 26/A12 AD_B1_14 - only on ADC2, 3 - 0x84, // 27/A13 AD_B1_15 - only on ADC2, 4 - #ifdef ARDUINO_TEENSY41 - 0xFF, // 28 - 0xFF, // 29 - 0xFF, // 30 - 0xFF, // 31 - 0xFF, // 32 - 0xFF, // 33 - 0xFF, // 34 - 0xFF, // 35 - 0xFF, // 36 - 0xFF, // 37 - 0x81, // 38/A14 AD_B1_12 - only on ADC2, 1 - 0x82, // 39/A15 AD_B1_13 - only on ADC2, 2 - 0x09, // 40/A16 AD_B1_04 - 0x0A, // 41/A17 AD_B1_05 - #endif -}; +#define __bss_end _ebss -/* -// disable interrupts -void cli() { noInterrupts(); } +extern "C" { + extern char __bss_end; + extern char __heap_start; + extern void* __brkval; -// enable interrupts -void sei() { interrupts(); } -*/ - -void HAL_adc_init() { - analog_init(); - while (ADC1_GC & ADC_GC_CAL) ; - while (ADC2_GC & ADC_GC_CAL) ; + // Doesn't work on Teensy 4.x + uint32_t freeMemory() { + uint32_t free_memory; + free_memory = ((uint32_t)&free_memory) - (((uint32_t)__brkval) ?: ((uint32_t)&__bss_end)); + return free_memory; + } } -void HAL_clear_reset_source() { - uint32_t reset_source = SRC_SRSR; - SRC_SRSR = reset_source; +// ------------------------ +// FastIO +// ------------------------ + +bool is_output(pin_t pin) { + const struct digital_pin_bitband_and_config_table_struct *p; + p = digital_pin_to_info_PGM + pin; + return (*(p->reg + 1) & p->mask); } -uint8_t HAL_get_reset_source() { +// ------------------------ +// MarlinHAL Class +// ------------------------ + +void MarlinHAL::reboot() { _reboot_Teensyduino_(); } + +uint8_t MarlinHAL::get_reset_source() { switch (SRC_SRSR & 0xFF) { case 1: return RST_POWER_ON; break; case 2: return RST_SOFTWARE; break; @@ -121,57 +92,92 @@ uint8_t HAL_get_reset_source() { return 0; } -void HAL_reboot() { _reboot_Teensyduino_(); } - -#define __bss_end _ebss - -extern "C" { - extern char __bss_end; - extern char __heap_start; - extern void* __brkval; - - // Doesn't work on Teensy 4.x - uint32_t freeMemory() { - uint32_t free_memory; - if ((uint32_t)__brkval == 0) - free_memory = ((uint32_t)&free_memory) - ((uint32_t)&__bss_end); - else - free_memory = ((uint32_t)&free_memory) - ((uint32_t)__brkval); - return free_memory; - } +void MarlinHAL::clear_reset_source() { + uint32_t reset_source = SRC_SRSR; + SRC_SRSR = reset_source; } -void HAL_adc_start_conversion(const uint8_t adc_pin) { +// ADC + +int8_t MarlinHAL::adc_select; + +void MarlinHAL::adc_init() { + analog_init(); + while (ADC1_GC & ADC_GC_CAL) { /* wait */ } + while (ADC2_GC & ADC_GC_CAL) { /* wait */ } +} + +void MarlinHAL::adc_start(const pin_t adc_pin) { + static const uint8_t pin2sc1a[] = { + 0x07, // 0/A0 AD_B1_02 + 0x08, // 1/A1 AD_B1_03 + 0x0C, // 2/A2 AD_B1_07 + 0x0B, // 3/A3 AD_B1_06 + 0x06, // 4/A4 AD_B1_01 + 0x05, // 5/A5 AD_B1_00 + 0x0F, // 6/A6 AD_B1_10 + 0x00, // 7/A7 AD_B1_11 + 0x0D, // 8/A8 AD_B1_08 + 0x0E, // 9/A9 AD_B1_09 + 0x01, // 24/A10 AD_B0_12 + 0x02, // 25/A11 AD_B0_13 + 0x83, // 26/A12 AD_B1_14 - only on ADC2, 3 + 0x84, // 27/A13 AD_B1_15 - only on ADC2, 4 + 0x07, // 14/A0 AD_B1_02 + 0x08, // 15/A1 AD_B1_03 + 0x0C, // 16/A2 AD_B1_07 + 0x0B, // 17/A3 AD_B1_06 + 0x06, // 18/A4 AD_B1_01 + 0x05, // 19/A5 AD_B1_00 + 0x0F, // 20/A6 AD_B1_10 + 0x00, // 21/A7 AD_B1_11 + 0x0D, // 22/A8 AD_B1_08 + 0x0E, // 23/A9 AD_B1_09 + 0x01, // 24/A10 AD_B0_12 + 0x02, // 25/A11 AD_B0_13 + 0x83, // 26/A12 AD_B1_14 - only on ADC2, 3 + 0x84, // 27/A13 AD_B1_15 - only on ADC2, 4 + #ifdef ARDUINO_TEENSY41 + 0xFF, // 28 + 0xFF, // 29 + 0xFF, // 30 + 0xFF, // 31 + 0xFF, // 32 + 0xFF, // 33 + 0xFF, // 34 + 0xFF, // 35 + 0xFF, // 36 + 0xFF, // 37 + 0x81, // 38/A14 AD_B1_12 - only on ADC2, 1 + 0x82, // 39/A15 AD_B1_13 - only on ADC2, 2 + 0x09, // 40/A16 AD_B1_04 + 0x0A, // 41/A17 AD_B1_05 + #endif + }; const uint16_t pin = pin2sc1a[adc_pin]; if (pin == 0xFF) { - HAL_adc_select = -1; // Digital only + adc_select = -1; // Digital only } else if (pin & 0x80) { - HAL_adc_select = 1; + adc_select = 1; ADC2_HC0 = pin & 0x7F; } else { - HAL_adc_select = 0; + adc_select = 0; ADC1_HC0 = pin; } } -uint16_t HAL_adc_get_result() { - switch (HAL_adc_select) { +uint16_t MarlinHAL::adc_value() { + switch (adc_select) { case 0: - while (!(ADC1_HS & ADC_HS_COCO0)) ; // wait + while (!(ADC1_HS & ADC_HS_COCO0)) { /* wait */ } return ADC1_R0; case 1: - while (!(ADC2_HS & ADC_HS_COCO0)) ; // wait + while (!(ADC2_HS & ADC_HS_COCO0)) { /* wait */ } return ADC2_R0; } return 0; } -bool is_output(pin_t pin) { - const struct digital_pin_bitband_and_config_table_struct *p; - p = digital_pin_to_info_PGM + pin; - return (*(p->reg + 1) & p->mask); -} - #endif // __IMXRT1062__ diff --git a/Marlin/src/HAL/TEENSY40_41/HAL.h b/Marlin/src/HAL/TEENSY40_41/HAL.h index 2b730768a8..4a0b5688d7 100644 --- a/Marlin/src/HAL/TEENSY40_41/HAL.h +++ b/Marlin/src/HAL/TEENSY40_41/HAL.h @@ -41,10 +41,6 @@ #include "../../feature/ethernet.h" #endif -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 - // ------------------------ // Defines // ------------------------ @@ -55,7 +51,23 @@ #define IS_TEENSY41 1 #endif +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 + +#undef sq +#define sq(x) ((x)*(x)) + +// Don't place string constants in PROGMEM +#undef PSTR +#define PSTR(str) ({static const char *data = (str); &data[0];}) + +// ------------------------ +// Serial ports +// ------------------------ + #include "../../core/serial_hook.h" + #define Serial0 Serial #define _DECLARE_SERIAL(X) \ typedef ForwardSerial1Class DefaultSerial##X; \ @@ -89,41 +101,49 @@ extern USBSerialType USBSerial; #endif #endif -#define HAL_SERVO_LIB libServo +// ------------------------ +// Types +// ------------------------ + +class libServo; +typedef libServo hal_servo_t; typedef int8_t pin_t; +// ------------------------ +// Interrupts +// ------------------------ + +#define CRITICAL_SECTION_START() const bool irqon = !__get_primask(); __disable_irq() +#define CRITICAL_SECTION_END() if (irqon) __enable_irq() + +// ------------------------ +// ADC +// ------------------------ + #ifndef analogInputToDigitalPin #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1) #endif -#define CRITICAL_SECTION_START() uint32_t primask = __get_primask(); __disable_irq() -#define CRITICAL_SECTION_END() if (!primask) __enable_irq() -#define ISRS_ENABLED() (!__get_primask()) -#define ENABLE_ISRS() __enable_irq() -#define DISABLE_ISRS() __disable_irq() +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 +#define HAL_ADC_FILTERED // turn off ADC oversampling -#undef sq -#define sq(x) ((x)*(x)) +#define HAL_ANALOG_SELECT(pin) -// Don't place string constants in PROGMEM -#undef PSTR -#define PSTR(str) ({static const char *data = (str); &data[0];}) +// +// Pin Mapping for M42, M43, M226 +// +#define GET_PIN_MAP_PIN(index) index +#define GET_PIN_MAP_INDEX(pin) pin +#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) -// Enable hooks into idle and setup for HAL -#define HAL_IDLETASK 1 -FORCE_INLINE void HAL_idletask() {} -FORCE_INLINE void HAL_init() {} +// FastIO +bool is_output(pin_t pin); -// Clear reset reason -void HAL_clear_reset_source(); - -// Reset reason -uint8_t HAL_get_reset_source(); - -void HAL_reboot(); - -FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } +// ------------------------ +// Class Utilities +// ------------------------ #pragma GCC diagnostic push #if GCC_VERSION <= 50000 @@ -134,30 +154,66 @@ extern "C" uint32_t freeMemory(); #pragma GCC diagnostic pop -// ADC +// ------------------------ +// MarlinHAL Class +// ------------------------ -void HAL_adc_init(); +class MarlinHAL { +public: -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 -#define HAL_ADC_FILTERED // turn off ADC oversampling -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_get_result() -#define HAL_ADC_READY() true + // Earliest possible init, before setup() + MarlinHAL() {} -#define HAL_ANALOG_SELECT(pin) + static inline void init() {} // Called early in setup() + static inline void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 -void HAL_adc_start_conversion(const uint8_t adc_pin); -uint16_t HAL_adc_get_result(); + static inline bool isr_state() { return !__get_primask(); } + static inline void isr_on() { __enable_irq(); } + static inline void isr_off() { __disable_irq(); } -// PWM + static inline void delay_ms(const int ms) { delay(ms); } -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + // Tasks, called from idle() + static inline void idletask() {} -// Pin Map + // Reset + static uint8_t get_reset_source(); + static void clear_reset_source(); -#define GET_PIN_MAP_PIN(index) index -#define GET_PIN_MAP_INDEX(pin) pin -#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) + // Free SRAM + static inline int freeMemory() { return freeMemory(); } -bool is_output(pin_t pin); + // + // ADC Methods + // + + static int8_t adc_select; + + // Called by Temperature::init once at startup + static void adc_init(); + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const pin_t pin); + + // Begin ADC sampling on the given channel + static void adc_start(const pin_t pin); + + // Is the ADC ready for reading? + static inline bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value(); + + /** + * Set the PWM duty cycle for the pin to the given value. + * No option to invert the duty cycle [default = false] + * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] + */ + static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + +}; + +extern MarlinHAL hal; diff --git a/Marlin/src/HAL/TEENSY40_41/timers.h b/Marlin/src/HAL/TEENSY40_41/timers.h index 81cf67f7bc..77fe0953d3 100644 --- a/Marlin/src/HAL/TEENSY40_41/timers.h +++ b/Marlin/src/HAL/TEENSY40_41/timers.h @@ -114,4 +114,4 @@ bool HAL_timer_interrupt_enabled(const uint8_t timer_num); void HAL_timer_isr_prologue(const uint8_t timer_num); //void HAL_timer_isr_epilogue(const uint8_t timer_num) {} -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/shared/HAL.cpp b/Marlin/src/HAL/shared/HAL.cpp new file mode 100644 index 0000000000..a5fe407188 --- /dev/null +++ b/Marlin/src/HAL/shared/HAL.cpp @@ -0,0 +1,36 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 . + * + */ + +/** + * HAL/shared/HAL.cpp + */ + +#include "../../inc/MarlinConfig.h" + +MarlinHAL hal; + +#if ENABLED(SOFT_RESET_VIA_SERIAL) + + // Global for use by e_parser.h + void HAL_reboot() { hal.reboot(); } + +#endif diff --git a/Marlin/src/HAL/shared/HAL_spi_L6470.cpp b/Marlin/src/HAL/shared/HAL_spi_L6470.cpp index bd85dbe7bd..5d4ce89b27 100644 --- a/Marlin/src/HAL/shared/HAL_spi_L6470.cpp +++ b/Marlin/src/HAL/shared/HAL_spi_L6470.cpp @@ -92,9 +92,9 @@ uint8_t L64XX_Marlin::transfer_single(uint8_t data, int16_t ss_pin) { // First device in chain has data sent last extDigitalWrite(ss_pin, LOW); - DISABLE_ISRS(); // Disable interrupts during SPI transfer (can't allow partial command to chips) + hal.isr_off(); // Disable interrupts during SPI transfer (can't allow partial command to chips) const uint8_t data_out = L6470_SpiTransfer_Mode_3(data); - ENABLE_ISRS(); // Enable interrupts + hal.isr_on(); // Enable interrupts extDigitalWrite(ss_pin, HIGH); return data_out; @@ -107,9 +107,9 @@ uint8_t L64XX_Marlin::transfer_chain(uint8_t data, int16_t ss_pin, uint8_t chain extDigitalWrite(ss_pin, LOW); for (uint8_t i = L64XX::chain[0]; !L64xxManager.spi_abort && i >= 1; i--) { // Send data unless aborted - DISABLE_ISRS(); // Disable interrupts during SPI transfer (can't allow partial command to chips) + hal.isr_off(); // Disable interrupts during SPI transfer (can't allow partial command to chips) const uint8_t temp = L6470_SpiTransfer_Mode_3(uint8_t(i == chain_position ? data : dSPIN_NOP)); - ENABLE_ISRS(); // Enable interrupts + hal.isr_on(); // Enable interrupts if (i == chain_position) data_out = temp; } diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 5132d07e87..009edeba2f 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -790,7 +790,7 @@ void idle(bool no_stepper_sleep/*=false*/) { #endif // Run HAL idle tasks - TERN_(HAL_IDLETASK, HAL_idletask()); + hal.idletask(); // Check network connection TERN_(HAS_ETHERNET, ethernet.check()); @@ -929,7 +929,7 @@ void minkill(const bool steppers_off/*=false*/) { watchdog_refresh(); // Reboot the board - HAL_reboot(); + hal.reboot(); #else @@ -1041,7 +1041,7 @@ inline void tmc_standby_setup() { * • L64XX Stepper Drivers (SPI) * • Stepper Driver Reset: DISABLE * • TMC Stepper Drivers (SPI) - * • Run BOARD_INIT if defined + * • Run hal.init_board() for additional pins setup * • ESP WiFi * - Get the Reset Reason and report it * - Print startup messages and diagnostics @@ -1119,8 +1119,8 @@ void setup() { tmc_standby_setup(); // TMC Low Power Standby pins must be set early or they're not usable // Check startup - does nothing if bootloader sets MCUSR to 0 - const byte mcu = HAL_get_reset_source(); - HAL_clear_reset_source(); + const byte mcu = hal.get_reset_source(); + hal.clear_reset_source(); #if ENABLED(MARLIN_DEV_MODE) auto log_current_ms = [&](PGM_P const msg) { @@ -1181,23 +1181,20 @@ void setup() { JTAGSWD_RESET(); #endif - #if EITHER(DISABLE_DEBUG, DISABLE_JTAG) + // Disable any hardware debug to free up pins for IO + #if ENABLED(DISABLE_DEBUG) && defined(JTAGSWD_DISABLE) delay(10); - // Disable any hardware debug to free up pins for IO - #if ENABLED(DISABLE_DEBUG) && defined(JTAGSWD_DISABLE) - SETUP_LOG("JTAGSWD_DISABLE"); - JTAGSWD_DISABLE(); - #elif defined(JTAG_DISABLE) - SETUP_LOG("JTAG_DISABLE"); - JTAG_DISABLE(); - #else - #error "DISABLE_(DEBUG|JTAG) is not supported for the selected MCU/Board." - #endif + SETUP_LOG("JTAGSWD_DISABLE"); + JTAGSWD_DISABLE(); + #elif ENABLED(DISABLE_JTAG) && defined(JTAG_DISABLE) + delay(10); + SETUP_LOG("JTAG_DISABLE"); + JTAG_DISABLE(); #endif TERN_(DYNAMIC_VECTORTABLE, hook_cpu_exceptions()); // If supported, install Marlin exception handlers at runtime - SETUP_RUN(HAL_init()); + SETUP_RUN(hal.init()); // Init and disable SPI thermocouples; this is still needed #if TEMP_SENSOR_0_IS_MAX_TC || (TEMP_SENSOR_REDUNDANT_IS_MAX_TC && REDUNDANT_TEMP_MATCH(SOURCE, E0)) @@ -1243,19 +1240,16 @@ void setup() { SETUP_RUN(tmc_init_cs_pins()); #endif - #ifdef BOARD_INIT - SETUP_LOG("BOARD_INIT"); - BOARD_INIT(); - #endif + SETUP_RUN(hal.init_board()); SETUP_RUN(esp_wifi_init()); // Report Reset Reason - if (mcu & RST_POWER_ON) SERIAL_ECHOLNPGM(STR_POWERUP); - if (mcu & RST_EXTERNAL) SERIAL_ECHOLNPGM(STR_EXTERNAL_RESET); + if (mcu & RST_POWER_ON) SERIAL_ECHOLNPGM(STR_POWERUP); + if (mcu & RST_EXTERNAL) SERIAL_ECHOLNPGM(STR_EXTERNAL_RESET); if (mcu & RST_BROWN_OUT) SERIAL_ECHOLNPGM(STR_BROWNOUT_RESET); - if (mcu & RST_WATCHDOG) SERIAL_ECHOLNPGM(STR_WATCHDOG_RESET); - if (mcu & RST_SOFTWARE) SERIAL_ECHOLNPGM(STR_SOFTWARE_RESET); + if (mcu & RST_WATCHDOG) SERIAL_ECHOLNPGM(STR_WATCHDOG_RESET); + if (mcu & RST_SOFTWARE) SERIAL_ECHOLNPGM(STR_SOFTWARE_RESET); // Identify myself as Marlin x.x.x SERIAL_ECHOLNPGM("Marlin " SHORT_BUILD_VERSION); @@ -1266,7 +1260,7 @@ void setup() { ); #endif SERIAL_ECHO_MSG(" Compiled: " __DATE__); - SERIAL_ECHO_MSG(STR_FREE_MEMORY, freeMemory(), STR_PLANNER_BUFFER_BYTES, sizeof(block_t) * (BLOCK_BUFFER_SIZE)); + SERIAL_ECHO_MSG(STR_FREE_MEMORY, hal.freeMemory(), STR_PLANNER_BUFFER_BYTES, sizeof(block_t) * (BLOCK_BUFFER_SIZE)); // Some HAL need precise delay adjustment calibrate_delay_loop(); @@ -1538,7 +1532,7 @@ void setup() { #endif #if ENABLED(USE_WATCHDOG) - SETUP_RUN(watchdog_init()); // Reinit watchdog after HAL_get_reset_source call + SETUP_RUN(watchdog_init()); // Reinit watchdog after hal.get_reset_source call #endif #if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER) diff --git a/Marlin/src/feature/caselight.cpp b/Marlin/src/feature/caselight.cpp index 59832fd6ed..a58cb66aff 100644 --- a/Marlin/src/feature/caselight.cpp +++ b/Marlin/src/feature/caselight.cpp @@ -69,7 +69,7 @@ void CaseLight::update(const bool sflag) { #if CASELIGHT_USES_BRIGHTNESS if (pin_is_pwm()) - set_pwm_duty(pin_t(CASE_LIGHT_PIN), ( + hal.set_pwm_duty(pin_t(CASE_LIGHT_PIN), ( #if CASE_LIGHT_MAX_PWM == 255 n10ct #else diff --git a/Marlin/src/feature/controllerfan.cpp b/Marlin/src/feature/controllerfan.cpp index 59ba665e11..f42bf52ae4 100644 --- a/Marlin/src/feature/controllerfan.cpp +++ b/Marlin/src/feature/controllerfan.cpp @@ -76,7 +76,7 @@ void ControllerFan::update() { thermalManager.soft_pwm_controller_speed = speed; #else if (PWM_PIN(CONTROLLER_FAN_PIN)) - set_pwm_duty(pin_t(CONTROLLER_FAN_PIN), speed); + hal.set_pwm_duty(pin_t(CONTROLLER_FAN_PIN), speed); else WRITE(CONTROLLER_FAN_PIN, speed > 0); #endif diff --git a/Marlin/src/feature/e_parser.h b/Marlin/src/feature/e_parser.h index 1dee0cf755..fda1ba144b 100644 --- a/Marlin/src/feature/e_parser.h +++ b/Marlin/src/feature/e_parser.h @@ -41,7 +41,9 @@ extern bool wait_for_user, wait_for_heatup; void quickresume_stepper(); #endif -void HAL_reboot(); +#if ENABLED(SOFT_RESET_VIA_SERIAL) + void HAL_reboot(); +#endif class EmergencyParser { diff --git a/Marlin/src/feature/leds/leds.cpp b/Marlin/src/feature/leds/leds.cpp index 17d790b8cc..0a4b511476 100644 --- a/Marlin/src/feature/leds/leds.cpp +++ b/Marlin/src/feature/leds/leds.cpp @@ -123,7 +123,7 @@ void LEDLights::set_color(const LEDColor &incol // If the pins can do PWM then their intensity will be set. #define _UPDATE_RGBW(C,c) do { \ if (PWM_PIN(RGB_LED_##C##_PIN)) \ - set_pwm_duty(pin_t(RGB_LED_##C##_PIN), c); \ + hal.set_pwm_duty(pin_t(RGB_LED_##C##_PIN), c); \ else \ WRITE(RGB_LED_##C##_PIN, c ? HIGH : LOW); \ }while(0) diff --git a/Marlin/src/feature/spindle_laser.cpp b/Marlin/src/feature/spindle_laser.cpp index cde2b47d90..2840a92c58 100644 --- a/Marlin/src/feature/spindle_laser.cpp +++ b/Marlin/src/feature/spindle_laser.cpp @@ -66,10 +66,10 @@ void SpindleLaser::init() { #endif #if ENABLED(SPINDLE_LASER_USE_PWM) SET_PWM(SPINDLE_LASER_PWM_PIN); - set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // Set to lowest speed + hal.set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // Set to lowest speed #endif #if ENABLED(HAL_CAN_SET_PWM_FREQ) && defined(SPINDLE_LASER_FREQUENCY) - set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_FREQUENCY); + hal.set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_FREQUENCY); TERN_(MARLIN_DEV_MODE, frequency = SPINDLE_LASER_FREQUENCY); #endif #if ENABLED(AIR_EVACUATION) @@ -90,10 +90,10 @@ void SpindleLaser::init() { * @param ocr Power value */ void SpindleLaser::_set_ocr(const uint8_t ocr) { - #if NEEDS_HARDWARE_PWM && SPINDLE_LASER_FREQUENCY - set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), TERN(MARLIN_DEV_MODE, frequency, SPINDLE_LASER_FREQUENCY)); + #if BOTH(NEEDS_HARDWARE_PWM, HAL_CAN_SET_PWM_FREQ) && SPINDLE_LASER_FREQUENCY + hal.set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), TERN(MARLIN_DEV_MODE, frequency, SPINDLE_LASER_FREQUENCY)); #endif - set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF); + hal.set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF); } void SpindleLaser::set_ocr(const uint8_t ocr) { diff --git a/Marlin/src/feature/spindle_laser.h b/Marlin/src/feature/spindle_laser.h index 95d60ae486..0415c9c8bb 100644 --- a/Marlin/src/feature/spindle_laser.h +++ b/Marlin/src/feature/spindle_laser.h @@ -103,7 +103,7 @@ public: static void init(); #if ENABLED(MARLIN_DEV_MODE) - static inline void refresh_frequency() { set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), frequency); } + static inline void refresh_frequency() { hal.set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), frequency); } #endif // Modifying this function should update everywhere diff --git a/Marlin/src/gcode/control/M42.cpp b/Marlin/src/gcode/control/M42.cpp index 77c0ccc49b..8076818317 100644 --- a/Marlin/src/gcode/control/M42.cpp +++ b/Marlin/src/gcode/control/M42.cpp @@ -126,10 +126,10 @@ void GcodeSuite::M42() { extDigitalWrite(pin, pin_status); #ifdef ARDUINO_ARCH_STM32 - // A simple I/O will be set to 0 by set_pwm_duty() + // A simple I/O will be set to 0 by hal.set_pwm_duty() if (pin_status <= 1 && !PWM_PIN(pin)) return; #endif - set_pwm_duty(pin, pin_status); + hal.set_pwm_duty(pin, pin_status); } #endif // DIRECT_PIN_CONTROL diff --git a/Marlin/src/gcode/gcode_d.cpp b/Marlin/src/gcode/gcode_d.cpp index 204455e65e..2dd1de0001 100644 --- a/Marlin/src/gcode/gcode_d.cpp +++ b/Marlin/src/gcode/gcode_d.cpp @@ -38,7 +38,7 @@ #include "../sd/cardreader.h" #include "../MarlinCore.h" // for kill -extern void dump_delay_accuracy_check(); +void dump_delay_accuracy_check(); /** * Dn: G-code for development and testing @@ -54,7 +54,7 @@ void GcodeSuite::D(const int16_t dcode) { for (;;) { /* loop forever (watchdog reset) */ } case 0: - HAL_reboot(); + hal.reboot(); break; case 10: @@ -74,7 +74,7 @@ void GcodeSuite::D(const int16_t dcode) { settings.reset(); settings.save(); #endif - HAL_reboot(); + hal.reboot(); } break; case 2: { // D2 Read / Write SRAM @@ -189,12 +189,12 @@ void GcodeSuite::D(const int16_t dcode) { SERIAL_ECHOLNPGM("(USE_WATCHDOG " TERN(USE_WATCHDOG, "ENABLED", "DISABLED") ")"); thermalManager.disable_all_heaters(); delay(1000); // Allow time to print - DISABLE_ISRS(); + hal.isr_off(); // Use a low-level delay that does not rely on interrupts to function // Do not spin forever, to avoid thermal risks if heaters are enabled and // watchdog does not work. for (int i = 10000; i--;) DELAY_US(1000UL); - ENABLE_ISRS(); + hal.isr_on(); SERIAL_ECHOLNPGM("FAILURE: Watchdog did not trigger board reset."); } break; diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index c8ac48f7cf..6ee58f769b 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -3850,3 +3850,10 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #undef _TEST_PWM #undef _LINEAR_AXES_STR #undef _LOGICAL_AXES_STR + +// JTAG support in the HAL +#if ENABLED(DISABLE_DEBUG) && !defined(JTAGSWD_DISABLE) + #error "DISABLE_DEBUG is not supported for the selected MCU/Board." +#elif ENABLED(DISABLE_JTAG) && !defined(JTAG_DISABLE) + #error "DISABLE_JTAG is not supported for the selected MCU/Board." +#endif diff --git a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp index 59c74148ad..61db2db920 100644 --- a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp +++ b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp @@ -282,9 +282,9 @@ void MarlinUI::init_lcd() { #if PIN_EXISTS(LCD_RESET) // Perform a clean hardware reset with needed delays OUT_WRITE(LCD_RESET_PIN, LOW); - _delay_ms(5); + hal.delay_ms(5); WRITE(LCD_RESET_PIN, HIGH); - _delay_ms(5); + hal.delay_ms(5); u8g.begin(); #endif diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index d1a9ba7077..64a65bb686 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -2149,7 +2149,7 @@ void RebootPrinter() { thermalManager.disable_all_heaters(); planner.finish_and_disable(); DWIN_RebootScreen(); - HAL_reboot(); + hal.reboot(); } void Goto_InfoMenu(){ diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index 7a2cefdd4c..df6a857803 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -1345,7 +1345,7 @@ void Endstops::update() { ES_REPORT_CHANGE(K_MAX); #endif SERIAL_ECHOLNPGM("\n"); - set_pwm_duty(pin_t(LED_PIN), local_LED_status); + hal.set_pwm_duty(pin_t(LED_PIN), local_LED_status); local_LED_status ^= 255; old_live_state_local = live_state_local; } diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 45ccdd1702..752834c6ab 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1264,7 +1264,7 @@ void Planner::recalculate() { #if ENABLED(FAN_SOFT_PWM) #define _FAN_SET(F) thermalManager.soft_pwm_amount_fan[F] = CALC_FAN_SPEED(F); #else - #define _FAN_SET(F) set_pwm_duty(pin_t(FAN##F##_PIN), CALC_FAN_SPEED(F)); + #define _FAN_SET(F) hal.set_pwm_duty(pin_t(FAN##F##_PIN), CALC_FAN_SPEED(F)); #endif #define FAN_SET(F) do{ kickstart_fan(fan_speed, ms, F); _FAN_SET(F); }while(0) @@ -1400,8 +1400,8 @@ void Planner::check_axes_activity() { TERN_(AUTOTEMP, autotemp_task()); #if ENABLED(BARICUDA) - TERN_(HAS_HEATER_1, set_pwm_duty(pin_t(HEATER_1_PIN), tail_valve_pressure)); - TERN_(HAS_HEATER_2, set_pwm_duty(pin_t(HEATER_2_PIN), tail_e_to_p_pressure)); + TERN_(HAS_HEATER_1, hal.set_pwm_duty(pin_t(HEATER_1_PIN), tail_valve_pressure)); + TERN_(HAS_HEATER_2, hal.set_pwm_duty(pin_t(HEATER_2_PIN), tail_e_to_p_pressure)); #endif } diff --git a/Marlin/src/module/servo.cpp b/Marlin/src/module/servo.cpp index 231efe84e1..96d5ba9da8 100644 --- a/Marlin/src/module/servo.cpp +++ b/Marlin/src/module/servo.cpp @@ -30,7 +30,7 @@ #include "servo.h" -HAL_SERVO_LIB servo[NUM_SERVOS]; +hal_servo_t servo[NUM_SERVOS]; #if ENABLED(EDITABLE_SERVO_ANGLES) uint16_t servo_angles[NUM_SERVOS][2]; diff --git a/Marlin/src/module/servo.h b/Marlin/src/module/servo.h index 73dbbdddb7..cd55a317a2 100644 --- a/Marlin/src/module/servo.h +++ b/Marlin/src/module/servo.h @@ -112,5 +112,5 @@ #define MOVE_SERVO(I, P) servo[I].move(P) #define DETACH_SERVO(I) servo[I].detach() -extern HAL_SERVO_LIB servo[NUM_SERVOS]; +extern hal_servo_t servo[NUM_SERVOS]; void servo_init(); diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index c100051f98..0f47d66791 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -1474,7 +1474,7 @@ void Stepper::isr() { #ifndef __AVR__ // Disable interrupts, to avoid ISR preemption while we reprogram the period // (AVR enters the ISR with global interrupts disabled, so no need to do it here) - DISABLE_ISRS(); + hal.isr_off(); #endif // Program timer compare for the maximum period, so it does NOT @@ -1492,7 +1492,7 @@ void Stepper::isr() { hal_timer_t min_ticks; do { // Enable ISRs to reduce USART processing latency - ENABLE_ISRS(); + hal.isr_on(); if (!nextMainISR) pulse_phase_isr(); // 0 = Do coordinated axes Stepper pulses @@ -1576,7 +1576,7 @@ void Stepper::isr() { * is less than the current count due to something preempting between the * read and the write of the new period value). */ - DISABLE_ISRS(); + hal.isr_off(); /** * Get the current tick value + margin @@ -1611,7 +1611,7 @@ void Stepper::isr() { HAL_timer_set_compare(MF_TIMER_STEP, hal_timer_t(next_isr_ticks)); // Don't forget to finally reenable interrupts - ENABLE_ISRS(); + hal.isr_on(); } #if MINIMUM_STEPPER_PULSE || MAXIMUM_STEPPER_RATE @@ -3261,7 +3261,7 @@ void Stepper::report_positions() { #elif HAS_MOTOR_CURRENT_PWM - #define _WRITE_CURRENT_PWM(P) set_pwm_duty(pin_t(MOTOR_CURRENT_PWM_## P ##_PIN), 255L * current / (MOTOR_CURRENT_PWM_RANGE)) + #define _WRITE_CURRENT_PWM(P) hal.set_pwm_duty(pin_t(MOTOR_CURRENT_PWM_## P ##_PIN), 255L * current / (MOTOR_CURRENT_PWM_RANGE)) switch (driver) { case 0: #if PIN_EXISTS(MOTOR_CURRENT_PWM_X) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index dccdc55034..1960dc5d9b 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -326,7 +326,7 @@ PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED); #define _INIT_FAN_PIN(P) do{ if (PWM_PIN(P)) SET_PWM(P); else _INIT_SOFT_FAN(P); }while(0) #endif #if ENABLED(FAST_PWM_FAN) - #define SET_FAST_PWM_FREQ(P) set_pwm_frequency(P, FAST_PWM_FAN_FREQUENCY) + #define SET_FAST_PWM_FREQ(P) hal.set_pwm_frequency(pin_t(P), FAST_PWM_FAN_FREQUENCY) #else #define SET_FAST_PWM_FREQ(P) NOOP #endif @@ -813,7 +813,7 @@ volatile bool Temperature::raw_temps_ready = false; } // Run HAL idle tasks - TERN_(HAL_IDLETASK, HAL_idletask()); + hal.idletask(); // Run UI update TERN(HAS_DWIN_E3V2_BASIC, DWIN_Update(), ui.update()); @@ -912,7 +912,7 @@ int16_t Temperature::getHeaterPower(const heater_id_t heater_id) { #define _UPDATE_AUTO_FAN(P,D,A) do{ \ if (PWM_PIN(P##_AUTO_FAN_PIN) && A < 255) \ - set_pwm_duty(pin_t(P##_AUTO_FAN_PIN), D ? A : 0); \ + hal.set_pwm_duty(pin_t(P##_AUTO_FAN_PIN), D ? A : 0); \ else \ WRITE(P##_AUTO_FAN_PIN, D); \ }while(0) @@ -2326,73 +2326,73 @@ void Temperature::init() { TERN_(HAS_MAXTC_SW_SPI, max_tc_spi.init()); - HAL_adc_init(); + hal.adc_init(); #if HAS_TEMP_ADC_0 - HAL_ANALOG_SELECT(TEMP_0_PIN); + hal.adc_enable(TEMP_0_PIN); #endif #if HAS_TEMP_ADC_1 - HAL_ANALOG_SELECT(TEMP_1_PIN); + hal.adc_enable(TEMP_1_PIN); #endif #if HAS_TEMP_ADC_2 - HAL_ANALOG_SELECT(TEMP_2_PIN); + hal.adc_enable(TEMP_2_PIN); #endif #if HAS_TEMP_ADC_3 - HAL_ANALOG_SELECT(TEMP_3_PIN); + hal.adc_enable(TEMP_3_PIN); #endif #if HAS_TEMP_ADC_4 - HAL_ANALOG_SELECT(TEMP_4_PIN); + hal.adc_enable(TEMP_4_PIN); #endif #if HAS_TEMP_ADC_5 - HAL_ANALOG_SELECT(TEMP_5_PIN); + hal.adc_enable(TEMP_5_PIN); #endif #if HAS_TEMP_ADC_6 - HAL_ANALOG_SELECT(TEMP_6_PIN); + hal.adc_enable(TEMP_6_PIN); #endif #if HAS_TEMP_ADC_7 - HAL_ANALOG_SELECT(TEMP_7_PIN); + hal.adc_enable(TEMP_7_PIN); #endif #if HAS_JOY_ADC_X - HAL_ANALOG_SELECT(JOY_X_PIN); + hal.adc_enable(JOY_X_PIN); #endif #if HAS_JOY_ADC_Y - HAL_ANALOG_SELECT(JOY_Y_PIN); + hal.adc_enable(JOY_Y_PIN); #endif #if HAS_JOY_ADC_Z - HAL_ANALOG_SELECT(JOY_Z_PIN); + hal.adc_enable(JOY_Z_PIN); #endif #if HAS_JOY_ADC_EN SET_INPUT_PULLUP(JOY_EN_PIN); #endif #if HAS_TEMP_ADC_BED - HAL_ANALOG_SELECT(TEMP_BED_PIN); + hal.adc_enable(TEMP_BED_PIN); #endif #if HAS_TEMP_ADC_CHAMBER - HAL_ANALOG_SELECT(TEMP_CHAMBER_PIN); + hal.adc_enable(TEMP_CHAMBER_PIN); #endif #if HAS_TEMP_ADC_COOLER - HAL_ANALOG_SELECT(TEMP_COOLER_PIN); + hal.adc_enable(TEMP_COOLER_PIN); #endif #if HAS_TEMP_ADC_PROBE - HAL_ANALOG_SELECT(TEMP_PROBE_PIN); + hal.adc_enable(TEMP_PROBE_PIN); #endif #if HAS_TEMP_ADC_BOARD - HAL_ANALOG_SELECT(TEMP_BOARD_PIN); + hal.adc_enable(TEMP_BOARD_PIN); #endif #if HAS_TEMP_ADC_REDUNDANT - HAL_ANALOG_SELECT(TEMP_REDUNDANT_PIN); + hal.adc_enable(TEMP_REDUNDANT_PIN); #endif #if ENABLED(FILAMENT_WIDTH_SENSOR) - HAL_ANALOG_SELECT(FILWIDTH_PIN); + hal.adc_enable(FILWIDTH_PIN); #endif #if HAS_ADC_BUTTONS - HAL_ANALOG_SELECT(ADC_KEYPAD_PIN); + hal.adc_enable(ADC_KEYPAD_PIN); #endif #if ENABLED(POWER_MONITOR_CURRENT) - HAL_ANALOG_SELECT(POWER_MONITOR_CURRENT_PIN); + hal.adc_enable(POWER_MONITOR_CURRENT_PIN); #endif #if ENABLED(POWER_MONITOR_VOLTAGE) - HAL_ANALOG_SELECT(POWER_MONITOR_VOLTAGE_PIN); + hal.adc_enable(POWER_MONITOR_VOLTAGE_PIN); #endif HAL_timer_start(MF_TIMER_TEMP, TEMP_TIMER_FREQUENCY); @@ -3333,8 +3333,8 @@ void Temperature::isr() { * This gives each ADC 0.9765ms to charge up. */ #define ACCUMULATE_ADC(obj) do{ \ - if (!HAL_ADC_READY()) next_sensor_state = adc_sensor_state; \ - else obj.sample(HAL_READ_ADC()); \ + if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; \ + else obj.sample(hal.adc_value()); \ }while(0) ADCSensorState next_sensor_state = adc_sensor_state < SensorsReady ? (ADCSensorState)(int(adc_sensor_state) + 1) : StartSampling; @@ -3366,115 +3366,115 @@ void Temperature::isr() { break; #if HAS_TEMP_ADC_0 - case PrepareTemp_0: HAL_START_ADC(TEMP_0_PIN); break; + case PrepareTemp_0: hal.adc_start(TEMP_0_PIN); break; case MeasureTemp_0: ACCUMULATE_ADC(temp_hotend[0]); break; #endif #if HAS_TEMP_ADC_BED - case PrepareTemp_BED: HAL_START_ADC(TEMP_BED_PIN); break; + case PrepareTemp_BED: hal.adc_start(TEMP_BED_PIN); break; case MeasureTemp_BED: ACCUMULATE_ADC(temp_bed); break; #endif #if HAS_TEMP_ADC_CHAMBER - case PrepareTemp_CHAMBER: HAL_START_ADC(TEMP_CHAMBER_PIN); break; + case PrepareTemp_CHAMBER: hal.adc_start(TEMP_CHAMBER_PIN); break; case MeasureTemp_CHAMBER: ACCUMULATE_ADC(temp_chamber); break; #endif #if HAS_TEMP_ADC_COOLER - case PrepareTemp_COOLER: HAL_START_ADC(TEMP_COOLER_PIN); break; + case PrepareTemp_COOLER: hal.adc_start(TEMP_COOLER_PIN); break; case MeasureTemp_COOLER: ACCUMULATE_ADC(temp_cooler); break; #endif #if HAS_TEMP_ADC_PROBE - case PrepareTemp_PROBE: HAL_START_ADC(TEMP_PROBE_PIN); break; + case PrepareTemp_PROBE: hal.adc_start(TEMP_PROBE_PIN); break; case MeasureTemp_PROBE: ACCUMULATE_ADC(temp_probe); break; #endif #if HAS_TEMP_ADC_BOARD - case PrepareTemp_BOARD: HAL_START_ADC(TEMP_BOARD_PIN); break; + case PrepareTemp_BOARD: hal.adc_start(TEMP_BOARD_PIN); break; case MeasureTemp_BOARD: ACCUMULATE_ADC(temp_board); break; #endif #if HAS_TEMP_ADC_REDUNDANT - case PrepareTemp_REDUNDANT: HAL_START_ADC(TEMP_REDUNDANT_PIN); break; + case PrepareTemp_REDUNDANT: hal.adc_start(TEMP_REDUNDANT_PIN); break; case MeasureTemp_REDUNDANT: ACCUMULATE_ADC(temp_redundant); break; #endif #if HAS_TEMP_ADC_1 - case PrepareTemp_1: HAL_START_ADC(TEMP_1_PIN); break; + case PrepareTemp_1: hal.adc_start(TEMP_1_PIN); break; case MeasureTemp_1: ACCUMULATE_ADC(temp_hotend[1]); break; #endif #if HAS_TEMP_ADC_2 - case PrepareTemp_2: HAL_START_ADC(TEMP_2_PIN); break; + case PrepareTemp_2: hal.adc_start(TEMP_2_PIN); break; case MeasureTemp_2: ACCUMULATE_ADC(temp_hotend[2]); break; #endif #if HAS_TEMP_ADC_3 - case PrepareTemp_3: HAL_START_ADC(TEMP_3_PIN); break; + case PrepareTemp_3: hal.adc_start(TEMP_3_PIN); break; case MeasureTemp_3: ACCUMULATE_ADC(temp_hotend[3]); break; #endif #if HAS_TEMP_ADC_4 - case PrepareTemp_4: HAL_START_ADC(TEMP_4_PIN); break; + case PrepareTemp_4: hal.adc_start(TEMP_4_PIN); break; case MeasureTemp_4: ACCUMULATE_ADC(temp_hotend[4]); break; #endif #if HAS_TEMP_ADC_5 - case PrepareTemp_5: HAL_START_ADC(TEMP_5_PIN); break; + case PrepareTemp_5: hal.adc_start(TEMP_5_PIN); break; case MeasureTemp_5: ACCUMULATE_ADC(temp_hotend[5]); break; #endif #if HAS_TEMP_ADC_6 - case PrepareTemp_6: HAL_START_ADC(TEMP_6_PIN); break; + case PrepareTemp_6: hal.adc_start(TEMP_6_PIN); break; case MeasureTemp_6: ACCUMULATE_ADC(temp_hotend[6]); break; #endif #if HAS_TEMP_ADC_7 - case PrepareTemp_7: HAL_START_ADC(TEMP_7_PIN); break; + case PrepareTemp_7: hal.adc_start(TEMP_7_PIN); break; case MeasureTemp_7: ACCUMULATE_ADC(temp_hotend[7]); break; #endif #if ENABLED(FILAMENT_WIDTH_SENSOR) - case Prepare_FILWIDTH: HAL_START_ADC(FILWIDTH_PIN); break; + case Prepare_FILWIDTH: hal.adc_start(FILWIDTH_PIN); break; case Measure_FILWIDTH: - if (!HAL_ADC_READY()) next_sensor_state = adc_sensor_state; // Redo this state - else filwidth.accumulate(HAL_READ_ADC()); + if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; // Redo this state + else filwidth.accumulate(hal.adc_value()); break; #endif #if ENABLED(POWER_MONITOR_CURRENT) case Prepare_POWER_MONITOR_CURRENT: - HAL_START_ADC(POWER_MONITOR_CURRENT_PIN); + hal.adc_start(POWER_MONITOR_CURRENT_PIN); break; case Measure_POWER_MONITOR_CURRENT: - if (!HAL_ADC_READY()) next_sensor_state = adc_sensor_state; // Redo this state - else power_monitor.add_current_sample(HAL_READ_ADC()); + if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; // Redo this state + else power_monitor.add_current_sample(hal.adc_value()); break; #endif #if ENABLED(POWER_MONITOR_VOLTAGE) case Prepare_POWER_MONITOR_VOLTAGE: - HAL_START_ADC(POWER_MONITOR_VOLTAGE_PIN); + hal.adc_start(POWER_MONITOR_VOLTAGE_PIN); break; case Measure_POWER_MONITOR_VOLTAGE: - if (!HAL_ADC_READY()) next_sensor_state = adc_sensor_state; // Redo this state - else power_monitor.add_voltage_sample(HAL_READ_ADC()); + if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; // Redo this state + else power_monitor.add_voltage_sample(hal.adc_value()); break; #endif #if HAS_JOY_ADC_X - case PrepareJoy_X: HAL_START_ADC(JOY_X_PIN); break; + case PrepareJoy_X: hal.adc_start(JOY_X_PIN); break; case MeasureJoy_X: ACCUMULATE_ADC(joystick.x); break; #endif #if HAS_JOY_ADC_Y - case PrepareJoy_Y: HAL_START_ADC(JOY_Y_PIN); break; + case PrepareJoy_Y: hal.adc_start(JOY_Y_PIN); break; case MeasureJoy_Y: ACCUMULATE_ADC(joystick.y); break; #endif #if HAS_JOY_ADC_Z - case PrepareJoy_Z: HAL_START_ADC(JOY_Z_PIN); break; + case PrepareJoy_Z: hal.adc_start(JOY_Z_PIN); break; case MeasureJoy_Z: ACCUMULATE_ADC(joystick.z); break; #endif @@ -3482,12 +3482,12 @@ void Temperature::isr() { #ifndef ADC_BUTTON_DEBOUNCE_DELAY #define ADC_BUTTON_DEBOUNCE_DELAY 16 #endif - case Prepare_ADC_KEY: HAL_START_ADC(ADC_KEYPAD_PIN); break; + case Prepare_ADC_KEY: hal.adc_start(ADC_KEYPAD_PIN); break; case Measure_ADC_KEY: - if (!HAL_ADC_READY()) + if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; // redo this state else if (ADCKey_count < ADC_BUTTON_DEBOUNCE_DELAY) { - raw_ADCKey_value = HAL_READ_ADC(); + raw_ADCKey_value = hal.adc_value(); if (raw_ADCKey_value <= 900UL * HAL_ADC_RANGE / 1024UL) { NOMORE(current_ADCKey_raw, raw_ADCKey_value); ADCKey_count++; diff --git a/ini/native.ini b/ini/native.ini index fe5fe3a5d0..eba34afc83 100644 --- a/ini/native.ini +++ b/ini/native.ini @@ -34,14 +34,14 @@ src_filter = ${common.default_src_filter} + [simulator_common] 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/include -IMarlin/src/HAL/NATIVE_SIM/u8g +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 src_build_flags = -Wall -Wno-expansion-to-defined -Wcast-align release_flags = -g0 -O3 -flto debug_build_flags = -fstack-protector-strong -g -g3 -ggdb lib_compat_mode = off src_filter = ${common.default_src_filter} + lib_deps = ${common.lib_deps} - MarlinSimUI=https://github.com/p3p/MarlinSimUI/archive/master.zip + MarlinSimUI=https://github.com/thinkyhead/MarlinSimUI/archive/updated_marlin_hal_2093.zip Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/marlin_sim_native.zip LiquidCrystal=https://github.com/p3p/LiquidCrystal/archive/master.zip extra_scripts = ${common.extra_scripts} From a941cd33e290ed7268ac963388eb0cb28485cd72 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 24 Dec 2021 23:47:52 -0600 Subject: [PATCH 263/532] =?UTF-8?q?=F0=9F=94=A8=20Configurable=20firmware?= =?UTF-8?q?=20bin=20filename?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Configuration.h > FIRMWARE_BIN --- buildroot/share/PlatformIO/scripts/marlin.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/buildroot/share/PlatformIO/scripts/marlin.py b/buildroot/share/PlatformIO/scripts/marlin.py index b8a6283ced..4830232d0b 100644 --- a/buildroot/share/PlatformIO/scripts/marlin.py +++ b/buildroot/share/PlatformIO/scripts/marlin.py @@ -48,6 +48,15 @@ def encrypt_mks(source, target, env, new_name): key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E] + # If FIRMWARE_BIN is defined by config, override all + import re + patt = re.compile("^\\s*#define\\s+FIRMWARE_BIN\\s+\"?(.+)\"?") + with open(join("Marlin", "Configuration.h")) as f: + for line in f: + m = patt.search(line) + if m != None: + new_name = m.group(1) + fwpath = target[0].path fwfile = open(fwpath, "rb") enfile = open(target[0].dir.path + "/" + new_name, "wb") From c74161c011abfeb7004631f63642566f37a845db Mon Sep 17 00:00:00 2001 From: fflosi <34758322+fflosi@users.noreply.github.com> Date: Sat, 25 Dec 2021 05:57:07 -0300 Subject: [PATCH 264/532] =?UTF-8?q?=E2=9C=A8=20Per-axis=20TMC=20hold=20mul?= =?UTF-8?q?tiplier=20(#23345)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 19 + Marlin/src/inc/Conditionals_post.h | 505 +++++++++++++++---------- Marlin/src/module/stepper/trinamic.cpp | 28 +- 3 files changed, 336 insertions(+), 216 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 3eb836ec65..2410d8b903 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -2690,6 +2690,7 @@ #define X_RSENSE 0.11 #define X_CHAIN_POS -1 // -1..0: Not chained. 1: MCU MOSI connected. 2: Next in chain, ... //#define X_INTERPOLATE true // Enable to override 'INTERPOLATE' for the X axis + //#define X_HOLD_MULTIPLIER 0.5 // Enable to override 'HOLD_MULTIPLIER' for the X axis #endif #if AXIS_IS_TMC(X2) @@ -2699,6 +2700,7 @@ #define X2_RSENSE 0.11 #define X2_CHAIN_POS -1 //#define X2_INTERPOLATE true + //#define X2_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(Y) @@ -2708,6 +2710,7 @@ #define Y_RSENSE 0.11 #define Y_CHAIN_POS -1 //#define Y_INTERPOLATE true + //#define Y_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(Y2) @@ -2717,6 +2720,7 @@ #define Y2_RSENSE 0.11 #define Y2_CHAIN_POS -1 //#define Y2_INTERPOLATE true + //#define Y2_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(Z) @@ -2726,6 +2730,7 @@ #define Z_RSENSE 0.11 #define Z_CHAIN_POS -1 //#define Z_INTERPOLATE true + //#define Z_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(Z2) @@ -2735,6 +2740,7 @@ #define Z2_RSENSE 0.11 #define Z2_CHAIN_POS -1 //#define Z2_INTERPOLATE true + //#define Z2_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(Z3) @@ -2744,6 +2750,7 @@ #define Z3_RSENSE 0.11 #define Z3_CHAIN_POS -1 //#define Z3_INTERPOLATE true + //#define Z3_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(Z4) @@ -2753,6 +2760,7 @@ #define Z4_RSENSE 0.11 #define Z4_CHAIN_POS -1 //#define Z4_INTERPOLATE true + //#define Z4_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(I) @@ -2762,6 +2770,7 @@ #define I_RSENSE 0.11 #define I_CHAIN_POS -1 //#define I_INTERPOLATE true + //#define I_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(J) @@ -2771,6 +2780,7 @@ #define J_RSENSE 0.11 #define J_CHAIN_POS -1 //#define J_INTERPOLATE true + //#define J_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(K) @@ -2780,6 +2790,7 @@ #define K_RSENSE 0.11 #define K_CHAIN_POS -1 //#define K_INTERPOLATE true + //#define K_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(E0) @@ -2788,6 +2799,7 @@ #define E0_RSENSE 0.11 #define E0_CHAIN_POS -1 //#define E0_INTERPOLATE true + //#define E0_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(E1) @@ -2796,6 +2808,7 @@ #define E1_RSENSE 0.11 #define E1_CHAIN_POS -1 //#define E1_INTERPOLATE true + //#define E1_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(E2) @@ -2804,6 +2817,7 @@ #define E2_RSENSE 0.11 #define E2_CHAIN_POS -1 //#define E2_INTERPOLATE true + //#define E2_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(E3) @@ -2812,6 +2826,7 @@ #define E3_RSENSE 0.11 #define E3_CHAIN_POS -1 //#define E3_INTERPOLATE true + //#define E3_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(E4) @@ -2820,6 +2835,7 @@ #define E4_RSENSE 0.11 #define E4_CHAIN_POS -1 //#define E4_INTERPOLATE true + //#define E4_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(E5) @@ -2828,6 +2844,7 @@ #define E5_RSENSE 0.11 #define E5_CHAIN_POS -1 //#define E5_INTERPOLATE true + //#define E5_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(E6) @@ -2836,6 +2853,7 @@ #define E6_RSENSE 0.11 #define E6_CHAIN_POS -1 //#define E6_INTERPOLATE true + //#define E6_HOLD_MULTIPLIER 0.5 #endif #if AXIS_IS_TMC(E7) @@ -2844,6 +2862,7 @@ #define E7_RSENSE 0.11 #define E7_CHAIN_POS -1 //#define E7_INTERPOLATE true + //#define E7_HOLD_MULTIPLIER 0.5 #endif /** diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 95c8f7737b..a5c9d20eda 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -1861,231 +1861,332 @@ #undef Z3_STALL_SENSITIVITY #undef Z4_STALL_SENSITIVITY #endif - #if defined(X_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(X) - #define X_SENSORLESS 1 - #endif - #if defined(X2_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(X2) - #define X2_SENSORLESS 1 - #endif - #if defined(Y_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Y) - #define Y_SENSORLESS 1 - #endif - #if defined(Y2_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Y2) - #define Y2_SENSORLESS 1 - #endif - #if defined(Z_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Z) - #define Z_SENSORLESS 1 - #endif - #if defined(Z2_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Z2) - #define Z2_SENSORLESS 1 - #endif - #if defined(Z3_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Z3) - #define Z3_SENSORLESS 1 - #endif - #if defined(Z4_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Z4) - #define Z4_SENSORLESS 1 - #endif - #if defined(I_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(I) - #define I_SENSORLESS 1 - #endif - #if defined(J_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(J) - #define J_SENSORLESS 1 - #endif - #if defined(K_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(K) - #define K_SENSORLESS 1 + + #if AXIS_IS_TMC(X) + #if defined(X_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(X) + #define X_SENSORLESS 1 + #endif + #if AXIS_HAS_STEALTHCHOP(X) + #define X_HAS_STEALTHCHOP 1 + #endif + #if ENABLED(SPI_ENDSTOPS) + #define X_SPI_SENSORLESS X_SENSORLESS + #endif + #ifndef X_INTERPOLATE + #define X_INTERPOLATE INTERPOLATE + #endif + #ifndef X_HOLD_MULTIPLIER + #define X_HOLD_MULTIPLIER HOLD_MULTIPLIER + #endif + #ifndef X_SLAVE_ADDRESS + #define X_SLAVE_ADDRESS 0 + #endif #endif - #if AXIS_HAS_STEALTHCHOP(X) - #define X_HAS_STEALTHCHOP 1 - #endif - #if AXIS_HAS_STEALTHCHOP(X2) - #define X2_HAS_STEALTHCHOP 1 - #endif - #if AXIS_HAS_STEALTHCHOP(Y) - #define Y_HAS_STEALTHCHOP 1 - #endif - #if AXIS_HAS_STEALTHCHOP(Y2) - #define Y2_HAS_STEALTHCHOP 1 - #endif - #if AXIS_HAS_STEALTHCHOP(Z) - #define Z_HAS_STEALTHCHOP 1 - #endif - #if AXIS_HAS_STEALTHCHOP(Z2) - #define Z2_HAS_STEALTHCHOP 1 - #endif - #if AXIS_HAS_STEALTHCHOP(Z3) - #define Z3_HAS_STEALTHCHOP 1 - #endif - #if AXIS_HAS_STEALTHCHOP(Z4) - #define Z4_HAS_STEALTHCHOP 1 - #endif - #if AXIS_HAS_STEALTHCHOP(I) - #define I_HAS_STEALTHCHOP 1 - #endif - #if AXIS_HAS_STEALTHCHOP(J) - #define J_HAS_STEALTHCHOP 1 - #endif - #if AXIS_HAS_STEALTHCHOP(K) - #define K_HAS_STEALTHCHOP 1 - #endif - #if E_STEPPERS > 0 && AXIS_HAS_STEALTHCHOP(E0) - #define E0_HAS_STEALTHCHOP 1 - #endif - #if E_STEPPERS > 1 && AXIS_HAS_STEALTHCHOP(E1) - #define E1_HAS_STEALTHCHOP 1 - #endif - #if E_STEPPERS > 2 && AXIS_HAS_STEALTHCHOP(E2) - #define E2_HAS_STEALTHCHOP 1 - #endif - #if E_STEPPERS > 3 && AXIS_HAS_STEALTHCHOP(E3) - #define E3_HAS_STEALTHCHOP 1 - #endif - #if E_STEPPERS > 4 && AXIS_HAS_STEALTHCHOP(E4) - #define E4_HAS_STEALTHCHOP 1 - #endif - #if E_STEPPERS > 5 && AXIS_HAS_STEALTHCHOP(E5) - #define E5_HAS_STEALTHCHOP 1 - #endif - #if E_STEPPERS > 6 && AXIS_HAS_STEALTHCHOP(E6) - #define E6_HAS_STEALTHCHOP 1 - #endif - #if E_STEPPERS > 7 && AXIS_HAS_STEALTHCHOP(E7) - #define E7_HAS_STEALTHCHOP 1 + #if AXIS_IS_TMC(X2) + #if defined(X2_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(X2) + #define X2_SENSORLESS 1 + #endif + #if AXIS_HAS_STEALTHCHOP(X2) + #define X2_HAS_STEALTHCHOP 1 + #endif + #ifndef X2_INTERPOLATE + #define X2_INTERPOLATE X_INTERPOLATE + #endif + #ifndef X2_HOLD_MULTIPLIER + #define X2_HOLD_MULTIPLIER X_HOLD_MULTIPLIER + #endif + #ifndef X2_SLAVE_ADDRESS + #define X2_SLAVE_ADDRESS 0 + #endif #endif - #if ENABLED(SPI_ENDSTOPS) - #define X_SPI_SENSORLESS X_SENSORLESS - #if HAS_Y_AXIS + #if AXIS_IS_TMC(Y) + #if defined(Y_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Y) + #define Y_SENSORLESS 1 + #endif + #if AXIS_HAS_STEALTHCHOP(Y) + #define Y_HAS_STEALTHCHOP 1 + #endif + #if ENABLED(SPI_ENDSTOPS) #define Y_SPI_SENSORLESS Y_SENSORLESS #endif - #if HAS_Z_AXIS + #ifndef Y_INTERPOLATE + #define Y_INTERPOLATE INTERPOLATE + #endif + #ifndef Y_HOLD_MULTIPLIER + #define Y_HOLD_MULTIPLIER HOLD_MULTIPLIER + #endif + #ifndef Y_SLAVE_ADDRESS + #define Y_SLAVE_ADDRESS 0 + #endif + #if ENABLED(Y_DUAL_STEPPER_DRIVERS) + #if defined(Y2_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Y2) + #define Y2_SENSORLESS 1 + #endif + #if AXIS_HAS_STEALTHCHOP(Y2) + #define Y2_HAS_STEALTHCHOP 1 + #endif + #ifndef Y2_INTERPOLATE + #define Y2_INTERPOLATE Y_INTERPOLATE + #endif + #ifndef Y2_HOLD_MULTIPLIER + #define Y2_HOLD_MULTIPLIER Y_HOLD_MULTIPLIER + #endif + #ifndef Y2_SLAVE_ADDRESS + #define Y2_SLAVE_ADDRESS 0 + #endif + #endif + #endif + + #if AXIS_IS_TMC(Z) + #if defined(Z_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Z) + #define Z_SENSORLESS 1 + #endif + #if AXIS_HAS_STEALTHCHOP(Z) + #define Z_HAS_STEALTHCHOP 1 + #endif + #if ENABLED(SPI_ENDSTOPS) #define Z_SPI_SENSORLESS Z_SENSORLESS #endif - #if LINEAR_AXES >= 4 + #ifndef Z_INTERPOLATE + #define Z_INTERPOLATE INTERPOLATE + #endif + #ifndef Z_HOLD_MULTIPLIER + #define Z_HOLD_MULTIPLIER HOLD_MULTIPLIER + #endif + #ifndef Z_SLAVE_ADDRESS + #define Z_SLAVE_ADDRESS 0 + #endif + #if NUM_Z_STEPPER_DRIVERS >= 2 + #if defined(Z2_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Z2) + #define Z2_SENSORLESS 1 + #endif + #if AXIS_HAS_STEALTHCHOP(Z2) + #define Z2_HAS_STEALTHCHOP 1 + #endif + #ifndef Z2_INTERPOLATE + #define Z2_INTERPOLATE Z_INTERPOLATE + #endif + #ifndef Z2_HOLD_MULTIPLIER + #define Z2_HOLD_MULTIPLIER Z_HOLD_MULTIPLIER + #endif + #ifndef Z2_SLAVE_ADDRESS + #define Z2_SLAVE_ADDRESS 0 + #endif + #endif + #if NUM_Z_STEPPER_DRIVERS >= 3 + #if defined(Z3_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Z3) + #define Z3_SENSORLESS 1 + #endif + #if AXIS_HAS_STEALTHCHOP(Z3) + #define Z3_HAS_STEALTHCHOP 1 + #endif + #ifndef Z3_INTERPOLATE + #define Z3_INTERPOLATE Z_INTERPOLATE + #endif + #ifndef Z3_HOLD_MULTIPLIER + #define Z3_HOLD_MULTIPLIER Z_HOLD_MULTIPLIER + #endif + #ifndef Z3_SLAVE_ADDRESS + #define Z3_SLAVE_ADDRESS 0 + #endif + #endif + #if NUM_Z_STEPPER_DRIVERS >= 4 + #if defined(Z4_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Z4) + #define Z4_SENSORLESS 1 + #endif + #if AXIS_HAS_STEALTHCHOP(Z4) + #define Z4_HAS_STEALTHCHOP 1 + #endif + #ifndef Z4_INTERPOLATE + #define Z4_INTERPOLATE Z_INTERPOLATE + #endif + #ifndef Z4_HOLD_MULTIPLIER + #define Z4_HOLD_MULTIPLIER Z_HOLD_MULTIPLIER + #endif + #ifndef Z4_SLAVE_ADDRESS + #define Z4_SLAVE_ADDRESS 0 + #endif + #endif + #endif + + #if AXIS_IS_TMC(I) + #if defined(I_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(I) + #define I_SENSORLESS 1 + #endif + #if AXIS_HAS_STEALTHCHOP(I) + #define I_HAS_STEALTHCHOP 1 + #endif + #if ENABLED(SPI_ENDSTOPS) #define I_SPI_SENSORLESS I_SENSORLESS #endif - #if LINEAR_AXES >= 5 + #ifndef I_INTERPOLATE + #define I_INTERPOLATE INTERPOLATE + #endif + #ifndef I_HOLD_MULTIPLIER + #define I_HOLD_MULTIPLIER HOLD_MULTIPLIER + #endif + #ifndef I_SLAVE_ADDRESS + #define I_SLAVE_ADDRESS 0 + #endif + #endif + + #if AXIS_IS_TMC(J) + #if defined(J_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(J) + #define J_SENSORLESS 1 + #endif + #if AXIS_HAS_STEALTHCHOP(J) + #define J_HAS_STEALTHCHOP 1 + #endif + #if ENABLED(SPI_ENDSTOPS) #define J_SPI_SENSORLESS J_SENSORLESS #endif - #if LINEAR_AXES >= 6 - #define K_SPI_SENSORLESS K_SENSORLESS + #ifndef J_INTERPOLATE + #define J_INTERPOLATE INTERPOLATE + #endif + #ifndef J_HOLD_MULTIPLIER + #define J_HOLD_MULTIPLIER HOLD_MULTIPLIER + #endif + #ifndef J_SLAVE_ADDRESS + #define J_SLAVE_ADDRESS 0 #endif #endif - #ifndef X_INTERPOLATE - #define X_INTERPOLATE INTERPOLATE + + #if AXIS_IS_TMC(K) + #if defined(K_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(K) + #define K_SENSORLESS 1 + #endif + #if AXIS_HAS_STEALTHCHOP(K) + #define K_HAS_STEALTHCHOP 1 + #endif + #if ENABLED(SPI_ENDSTOPS) + #define K_SPI_SENSORLESS K_SENSORLESS + #endif + #ifndef K_INTERPOLATE + #define K_INTERPOLATE INTERPOLATE + #endif + #ifndef K_HOLD_MULTIPLIER + #define K_HOLD_MULTIPLIER HOLD_MULTIPLIER + #endif + #ifndef K_SLAVE_ADDRESS + #define K_SLAVE_ADDRESS 0 + #endif #endif - #ifndef X2_INTERPOLATE - #define X2_INTERPOLATE INTERPOLATE + + #if AXIS_IS_TMC(E0) + #if AXIS_HAS_STEALTHCHOP(E0) + #define E0_HAS_STEALTHCHOP 1 + #endif + #ifndef E0_INTERPOLATE + #define E0_INTERPOLATE INTERPOLATE + #endif + #ifndef E0_HOLD_MULTIPLIER + #define E0_HOLD_MULTIPLIER HOLD_MULTIPLIER + #endif + #ifndef E0_SLAVE_ADDRESS + #define E0_SLAVE_ADDRESS 0 + #endif #endif - #ifndef Y_INTERPOLATE - #define Y_INTERPOLATE INTERPOLATE + #if AXIS_IS_TMC(E1) + #if AXIS_HAS_STEALTHCHOP(E1) + #define E1_HAS_STEALTHCHOP 1 + #endif + #ifndef E1_INTERPOLATE + #define E1_INTERPOLATE E0_INTERPOLATE + #endif + #ifndef E1_HOLD_MULTIPLIER + #define E1_HOLD_MULTIPLIER E0_HOLD_MULTIPLIER + #endif + #ifndef E1_SLAVE_ADDRESS + #define E1_SLAVE_ADDRESS 0 + #endif #endif - #ifndef Y2_INTERPOLATE - #define Y2_INTERPOLATE INTERPOLATE + #if AXIS_IS_TMC(E2) + #if AXIS_HAS_STEALTHCHOP(E2) + #define E2_HAS_STEALTHCHOP 1 + #endif + #ifndef E2_INTERPOLATE + #define E2_INTERPOLATE E0_INTERPOLATE + #endif + #ifndef E2_HOLD_MULTIPLIER + #define E2_HOLD_MULTIPLIER E0_HOLD_MULTIPLIER + #endif + #ifndef E2_SLAVE_ADDRESS + #define E2_SLAVE_ADDRESS 0 + #endif #endif - #ifndef Z_INTERPOLATE - #define Z_INTERPOLATE INTERPOLATE + #if AXIS_IS_TMC(E3) + #if AXIS_HAS_STEALTHCHOP(E3) + #define E3_HAS_STEALTHCHOP 1 + #endif + #ifndef E3_INTERPOLATE + #define E3_INTERPOLATE E0_INTERPOLATE + #endif + #ifndef E3_HOLD_MULTIPLIER + #define E3_HOLD_MULTIPLIER E0_HOLD_MULTIPLIER + #endif + #ifndef E3_SLAVE_ADDRESS + #define E3_SLAVE_ADDRESS 0 + #endif #endif - #ifndef Z2_INTERPOLATE - #define Z2_INTERPOLATE INTERPOLATE + #if AXIS_IS_TMC(E4) + #if AXIS_HAS_STEALTHCHOP(E4) + #define E4_HAS_STEALTHCHOP 1 + #endif + #ifndef E4_INTERPOLATE + #define E4_INTERPOLATE E0_INTERPOLATE + #endif + #ifndef E4_HOLD_MULTIPLIER + #define E4_HOLD_MULTIPLIER E0_HOLD_MULTIPLIER + #endif + #ifndef E4_SLAVE_ADDRESS + #define E4_SLAVE_ADDRESS 0 + #endif #endif - #ifndef Z3_INTERPOLATE - #define Z3_INTERPOLATE INTERPOLATE + #if AXIS_IS_TMC(E5) + #if AXIS_HAS_STEALTHCHOP(E5) + #define E5_HAS_STEALTHCHOP 1 + #endif + #ifndef E5_INTERPOLATE + #define E5_INTERPOLATE E0_INTERPOLATE + #endif + #ifndef E5_HOLD_MULTIPLIER + #define E5_HOLD_MULTIPLIER E0_HOLD_MULTIPLIER + #endif + #ifndef E5_SLAVE_ADDRESS + #define E5_SLAVE_ADDRESS 0 + #endif #endif - #ifndef Z4_INTERPOLATE - #define Z4_INTERPOLATE INTERPOLATE + #if AXIS_IS_TMC(E6) + #if AXIS_HAS_STEALTHCHOP(E6) + #define E6_HAS_STEALTHCHOP 1 + #endif + #ifndef E6_INTERPOLATE + #define E6_INTERPOLATE E0_INTERPOLATE + #endif + #ifndef E6_HOLD_MULTIPLIER + #define E6_HOLD_MULTIPLIER E0_HOLD_MULTIPLIER + #endif + #ifndef E6_SLAVE_ADDRESS + #define E6_SLAVE_ADDRESS 0 + #endif #endif - #if LINEAR_AXES >= 4 && !defined(I_INTERPOLATE) - #define I_INTERPOLATE INTERPOLATE + #if AXIS_IS_TMC(E7) + #if AXIS_HAS_STEALTHCHOP(E7) + #define E7_HAS_STEALTHCHOP 1 + #endif + #ifndef E7_INTERPOLATE + #define E7_INTERPOLATE E0_INTERPOLATE + #endif + #ifndef E7_HOLD_MULTIPLIER + #define E7_HOLD_MULTIPLIER E0_HOLD_MULTIPLIER + #endif + #ifndef E7_SLAVE_ADDRESS + #define E7_SLAVE_ADDRESS 0 + #endif #endif - #if LINEAR_AXES >= 5 && !defined(J_INTERPOLATE) - #define J_INTERPOLATE INTERPOLATE - #endif - #if LINEAR_AXES >= 6 && !defined(K_INTERPOLATE) - #define K_INTERPOLATE INTERPOLATE - #endif - #ifndef E0_INTERPOLATE - #define E0_INTERPOLATE INTERPOLATE - #endif - #ifndef E1_INTERPOLATE - #define E1_INTERPOLATE INTERPOLATE - #endif - #ifndef E2_INTERPOLATE - #define E2_INTERPOLATE INTERPOLATE - #endif - #ifndef E3_INTERPOLATE - #define E3_INTERPOLATE INTERPOLATE - #endif - #ifndef E4_INTERPOLATE - #define E4_INTERPOLATE INTERPOLATE - #endif - #ifndef E5_INTERPOLATE - #define E5_INTERPOLATE INTERPOLATE - #endif - #ifndef E6_INTERPOLATE - #define E6_INTERPOLATE INTERPOLATE - #endif - #ifndef E7_INTERPOLATE - #define E7_INTERPOLATE INTERPOLATE - #endif - #ifndef X_SLAVE_ADDRESS - #define X_SLAVE_ADDRESS 0 - #endif - #ifndef Y_SLAVE_ADDRESS - #define Y_SLAVE_ADDRESS 0 - #endif - #ifndef Z_SLAVE_ADDRESS - #define Z_SLAVE_ADDRESS 0 - #endif - #ifndef I_SLAVE_ADDRESS - #define I_SLAVE_ADDRESS 0 - #endif - #ifndef J_SLAVE_ADDRESS - #define J_SLAVE_ADDRESS 0 - #endif - #ifndef K_SLAVE_ADDRESS - #define K_SLAVE_ADDRESS 0 - #endif - #ifndef X2_SLAVE_ADDRESS - #define X2_SLAVE_ADDRESS 0 - #endif - #ifndef Y2_SLAVE_ADDRESS - #define Y2_SLAVE_ADDRESS 0 - #endif - #ifndef Z2_SLAVE_ADDRESS - #define Z2_SLAVE_ADDRESS 0 - #endif - #ifndef Z3_SLAVE_ADDRESS - #define Z3_SLAVE_ADDRESS 0 - #endif - #ifndef Z4_SLAVE_ADDRESS - #define Z4_SLAVE_ADDRESS 0 - #endif - #ifndef E0_SLAVE_ADDRESS - #define E0_SLAVE_ADDRESS 0 - #endif - #ifndef E1_SLAVE_ADDRESS - #define E1_SLAVE_ADDRESS 0 - #endif - #ifndef E2_SLAVE_ADDRESS - #define E2_SLAVE_ADDRESS 0 - #endif - #ifndef E3_SLAVE_ADDRESS - #define E3_SLAVE_ADDRESS 0 - #endif - #ifndef E4_SLAVE_ADDRESS - #define E4_SLAVE_ADDRESS 0 - #endif - #ifndef E5_SLAVE_ADDRESS - #define E5_SLAVE_ADDRESS 0 - #endif - #ifndef E6_SLAVE_ADDRESS - #define E6_SLAVE_ADDRESS 0 - #endif - #ifndef E7_SLAVE_ADDRESS - #define E7_SLAVE_ADDRESS 0 - #endif -#endif +#endif // HAS_TRINAMIC_CONFIG #if ANY_AXIS_HAS(HW_SERIAL) #define HAS_TMC_HW_SERIAL 1 diff --git a/Marlin/src/module/stepper/trinamic.cpp b/Marlin/src/module/stepper/trinamic.cpp index e8ecbf1c76..7baa2108f0 100644 --- a/Marlin/src/module/stepper/trinamic.cpp +++ b/Marlin/src/module/stepper/trinamic.cpp @@ -38,7 +38,7 @@ enum StealthIndex : uint8_t { LOGICAL_AXIS_LIST(STEALTH_AXIS_E, STEALTH_AXIS_X, STEALTH_AXIS_Y, STEALTH_AXIS_Z, STEALTH_AXIS_I, STEALTH_AXIS_J, STEALTH_AXIS_K) }; -#define TMC_INIT(ST, STEALTH_INDEX) tmc_init(stepper##ST, ST##_CURRENT, ST##_MICROSTEPS, ST##_HYBRID_THRESHOLD, stealthchop_by_axis[STEALTH_INDEX], chopper_timing_##ST, ST##_INTERPOLATE) +#define TMC_INIT(ST, STEALTH_INDEX) tmc_init(stepper##ST, ST##_CURRENT, ST##_MICROSTEPS, ST##_HYBRID_THRESHOLD, stealthchop_by_axis[STEALTH_INDEX], chopper_timing_##ST, ST##_INTERPOLATE, ST##_HOLD_MULTIPLIER) // IC = TMC model number // ST = Stepper object letter @@ -200,7 +200,7 @@ enum StealthIndex : uint8_t { #if HAS_DRIVER(TMC2130) template - void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t hyb_thrs, const bool stealth, const chopper_timing_t &chop_init, const bool interpolate) { + void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t hyb_thrs, const bool stealth, const chopper_timing_t &chop_init, const bool interpolate, float hold_multiplier) { st.begin(); CHOPCONF_t chopconf{0}; @@ -212,7 +212,7 @@ enum StealthIndex : uint8_t { TERN_(SQUARE_WAVE_STEPPING, chopconf.dedge = true); st.CHOPCONF(chopconf.sr); - st.rms_current(mA, HOLD_MULTIPLIER); + st.rms_current(mA, hold_multiplier); st.microsteps(microsteps); st.iholddelay(10); st.TPOWERDOWN(128); // ~2s until driver lowers to hold current @@ -235,7 +235,7 @@ enum StealthIndex : uint8_t { #if HAS_DRIVER(TMC2160) template - void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t hyb_thrs, const bool stealth, const chopper_timing_t &chop_init, const bool interpolate) { + void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t hyb_thrs, const bool stealth, const chopper_timing_t &chop_init, const bool interpolate, float hold_multiplier) { st.begin(); CHOPCONF_t chopconf{0}; @@ -247,7 +247,7 @@ enum StealthIndex : uint8_t { TERN_(SQUARE_WAVE_STEPPING, chopconf.dedge = true); st.CHOPCONF(chopconf.sr); - st.rms_current(mA, HOLD_MULTIPLIER); + st.rms_current(mA, hold_multiplier); st.microsteps(microsteps); st.iholddelay(10); st.TPOWERDOWN(128); // ~2s until driver lowers to hold current @@ -604,7 +604,7 @@ enum StealthIndex : uint8_t { #if HAS_DRIVER(TMC2208) template - void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t hyb_thrs, const bool stealth, const chopper_timing_t &chop_init, const bool interpolate) { + void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t hyb_thrs, const bool stealth, const chopper_timing_t &chop_init, const bool interpolate, float hold_multiplier) { TMC2208_n::GCONF_t gconf{0}; gconf.pdn_disable = true; // Use UART gconf.mstep_reg_select = true; // Select microsteps with UART @@ -622,7 +622,7 @@ enum StealthIndex : uint8_t { TERN_(SQUARE_WAVE_STEPPING, chopconf.dedge = true); st.CHOPCONF(chopconf.sr); - st.rms_current(mA, HOLD_MULTIPLIER); + st.rms_current(mA, hold_multiplier); st.microsteps(microsteps); st.iholddelay(10); st.TPOWERDOWN(128); // ~2s until driver lowers to hold current @@ -646,7 +646,7 @@ enum StealthIndex : uint8_t { #if HAS_DRIVER(TMC2209) template - void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t hyb_thrs, const bool stealth, const chopper_timing_t &chop_init, const bool interpolate) { + void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t hyb_thrs, const bool stealth, const chopper_timing_t &chop_init, const bool interpolate, float hold_multiplier) { TMC2208_n::GCONF_t gconf{0}; gconf.pdn_disable = true; // Use UART gconf.mstep_reg_select = true; // Select microsteps with UART @@ -664,7 +664,7 @@ enum StealthIndex : uint8_t { TERN_(SQUARE_WAVE_STEPPING, chopconf.dedge = true); st.CHOPCONF(chopconf.sr); - st.rms_current(mA, HOLD_MULTIPLIER); + st.rms_current(mA, hold_multiplier); st.microsteps(microsteps); st.iholddelay(10); st.TPOWERDOWN(128); // ~2s until driver lowers to hold current @@ -688,7 +688,7 @@ enum StealthIndex : uint8_t { #if HAS_DRIVER(TMC2660) template - void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t, const bool, const chopper_timing_t &chop_init, const bool interpolate) { + void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t, const bool, const chopper_timing_t &chop_init, const bool interpolate, float hold_multiplier) { st.begin(); TMC2660_n::CHOPCONF_t chopconf{0}; @@ -710,7 +710,7 @@ enum StealthIndex : uint8_t { #if HAS_DRIVER(TMC5130) template - void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t hyb_thrs, const bool stealth, const chopper_timing_t &chop_init, const bool interpolate) { + void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t hyb_thrs, const bool stealth, const chopper_timing_t &chop_init, const bool interpolate, float hold_multiplier) { st.begin(); CHOPCONF_t chopconf{0}; @@ -722,7 +722,7 @@ enum StealthIndex : uint8_t { TERN_(SQUARE_WAVE_STEPPING, chopconf.dedge = true); st.CHOPCONF(chopconf.sr); - st.rms_current(mA, HOLD_MULTIPLIER); + st.rms_current(mA, hold_multiplier); st.microsteps(microsteps); st.iholddelay(10); st.TPOWERDOWN(128); // ~2s until driver lowers to hold current @@ -745,7 +745,7 @@ enum StealthIndex : uint8_t { #if HAS_DRIVER(TMC5160) template - void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t hyb_thrs, const bool stealth, const chopper_timing_t &chop_init, const bool interpolate) { + void tmc_init(TMCMarlin &st, const uint16_t mA, const uint16_t microsteps, const uint32_t hyb_thrs, const bool stealth, const chopper_timing_t &chop_init, const bool interpolate, float hold_multiplier) { st.begin(); CHOPCONF_t chopconf{0}; @@ -757,7 +757,7 @@ enum StealthIndex : uint8_t { TERN_(SQUARE_WAVE_STEPPING, chopconf.dedge = true); st.CHOPCONF(chopconf.sr); - st.rms_current(mA, HOLD_MULTIPLIER); + st.rms_current(mA, hold_multiplier); st.microsteps(microsteps); st.iholddelay(10); st.TPOWERDOWN(128); // ~2s until driver lowers to hold current From fca6d12093e0cadc0c95a0e4cabfd560e6b628a1 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 25 Dec 2021 03:27:45 -0600 Subject: [PATCH 265/532] =?UTF-8?q?=F0=9F=94=A7=20Move=20MOTHERBOARD=20clo?= =?UTF-8?q?ser=20to=20top?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index c425746bb5..f0fc4dd7d6 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -94,6 +94,11 @@ // @section machine +// Choose the name from boards.h that matches your setup +#ifndef MOTHERBOARD + #define MOTHERBOARD BOARD_RAMPS_14_EFB +#endif + /** * Select the serial port on the board to use for communication with the host. * This allows the connection of wireless adapters (for instance) to non-default port pins. @@ -137,11 +142,6 @@ // Enable the Bluetooth serial interface on AT90USB devices //#define BLUETOOTH -// Choose the name from boards.h that matches your setup -#ifndef MOTHERBOARD - #define MOTHERBOARD BOARD_RAMPS_14_EFB -#endif - // Name displayed in the LCD "Ready" message and Info menu //#define CUSTOM_MACHINE_NAME "3D Printer" From bdb071688e7a2e1eb900c26c59c20bca847ccfdc Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 26 Dec 2021 01:09:46 +0000 Subject: [PATCH 266/532] [cron] Bump distribution date (2021-12-26) --- 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 596e910a1f..fca302288f 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 "2021-12-25" +//#define STRING_DISTRIBUTION_DATE "2021-12-26" /** * 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 b43547ef53..d2b7a93775 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 "2021-12-25" + #define STRING_DISTRIBUTION_DATE "2021-12-26" #endif /** From 4f0932e5c1647b00efff22a2a5f30a1fdd57cc19 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 25 Dec 2021 20:00:48 -0600 Subject: [PATCH 267/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20`freeMemory`=20end?= =?UTF-8?q?less=20loop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Followup to #23295 --- Marlin/src/HAL/AVR/HAL.h | 2 +- Marlin/src/HAL/DUE/HAL.h | 2 +- Marlin/src/HAL/LINUX/HAL.h | 2 +- Marlin/src/HAL/LPC1768/HAL.h | 2 +- Marlin/src/HAL/NATIVE_SIM/HAL.h | 2 +- Marlin/src/HAL/SAMD51/HAL.h | 2 +- Marlin/src/HAL/STM32/HAL.h | 2 +- Marlin/src/HAL/STM32F1/HAL.h | 2 +- Marlin/src/HAL/TEENSY31_32/HAL.h | 2 +- Marlin/src/HAL/TEENSY35_36/HAL.h | 2 +- Marlin/src/HAL/TEENSY40_41/HAL.h | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Marlin/src/HAL/AVR/HAL.h b/Marlin/src/HAL/AVR/HAL.h index 9babe2d603..682374b4ac 100644 --- a/Marlin/src/HAL/AVR/HAL.h +++ b/Marlin/src/HAL/AVR/HAL.h @@ -205,7 +205,7 @@ public: static inline void clear_reset_source() { MCUSR = 0; } // Free SRAM - static inline int freeMemory() { return freeMemory(); } + static inline int freeMemory() { return ::freeMemory(); } // // ADC Methods diff --git a/Marlin/src/HAL/DUE/HAL.h b/Marlin/src/HAL/DUE/HAL.h index 0dd123acdd..5d1d2cf236 100644 --- a/Marlin/src/HAL/DUE/HAL.h +++ b/Marlin/src/HAL/DUE/HAL.h @@ -196,7 +196,7 @@ public: static inline void clear_reset_source() {} // Free SRAM - static inline int freeMemory() { return freeMemory(); } + static inline int freeMemory() { return ::freeMemory(); } // // ADC Methods diff --git a/Marlin/src/HAL/LINUX/HAL.h b/Marlin/src/HAL/LINUX/HAL.h index 0bd8635c90..c1b7a54997 100644 --- a/Marlin/src/HAL/LINUX/HAL.h +++ b/Marlin/src/HAL/LINUX/HAL.h @@ -126,7 +126,7 @@ public: static inline void clear_reset_source() {} // Free SRAM - static inline int freeMemory() { return freeMemory(); } + static inline int freeMemory() { return ::freeMemory(); } // // ADC Methods diff --git a/Marlin/src/HAL/LPC1768/HAL.h b/Marlin/src/HAL/LPC1768/HAL.h index ba0729590f..f1cdbe6f07 100644 --- a/Marlin/src/HAL/LPC1768/HAL.h +++ b/Marlin/src/HAL/LPC1768/HAL.h @@ -219,7 +219,7 @@ public: static void clear_reset_source(); // Free SRAM - static inline int freeMemory() { return freeMemory(); } + static inline int freeMemory() { return ::freeMemory(); } // // ADC Methods diff --git a/Marlin/src/HAL/NATIVE_SIM/HAL.h b/Marlin/src/HAL/NATIVE_SIM/HAL.h index bfbdaf211f..0798bdde39 100644 --- a/Marlin/src/HAL/NATIVE_SIM/HAL.h +++ b/Marlin/src/HAL/NATIVE_SIM/HAL.h @@ -228,7 +228,7 @@ public: static inline void clear_reset_source() {} // Free SRAM - static inline int freeMemory() { return freeMemory(); } + static inline int freeMemory() { return ::freeMemory(); } // // ADC Methods diff --git a/Marlin/src/HAL/SAMD51/HAL.h b/Marlin/src/HAL/SAMD51/HAL.h index 144bf9c08d..9fcd73e9b6 100644 --- a/Marlin/src/HAL/SAMD51/HAL.h +++ b/Marlin/src/HAL/SAMD51/HAL.h @@ -176,7 +176,7 @@ public: static inline void clear_reset_source() {} // Free SRAM - static inline int freeMemory() { return freeMemory(); } + static inline int freeMemory() { return ::freeMemory(); } // // ADC Methods diff --git a/Marlin/src/HAL/STM32/HAL.h b/Marlin/src/HAL/STM32/HAL.h index d71ccd796b..c23ddf69bd 100644 --- a/Marlin/src/HAL/STM32/HAL.h +++ b/Marlin/src/HAL/STM32/HAL.h @@ -226,7 +226,7 @@ public: static void clear_reset_source(); // Free SRAM - static inline int freeMemory() { return freeMemory(); } + static inline int freeMemory() { return ::freeMemory(); } // // ADC Methods diff --git a/Marlin/src/HAL/STM32F1/HAL.h b/Marlin/src/HAL/STM32F1/HAL.h index 517c8f2cb8..8fb4c9299f 100644 --- a/Marlin/src/HAL/STM32F1/HAL.h +++ b/Marlin/src/HAL/STM32F1/HAL.h @@ -270,7 +270,7 @@ public: static inline void clear_reset_source() {} // Free SRAM - static inline int freeMemory() { return freeMemory(); } + static inline int freeMemory() { return ::freeMemory(); } // // ADC Methods diff --git a/Marlin/src/HAL/TEENSY31_32/HAL.h b/Marlin/src/HAL/TEENSY31_32/HAL.h index fdf914b1b0..a5f67a50f0 100644 --- a/Marlin/src/HAL/TEENSY31_32/HAL.h +++ b/Marlin/src/HAL/TEENSY31_32/HAL.h @@ -155,7 +155,7 @@ public: static inline void clear_reset_source() {} // Free SRAM - static inline int freeMemory() { return freeMemory(); } + static inline int freeMemory() { return ::freeMemory(); } // // ADC Methods diff --git a/Marlin/src/HAL/TEENSY35_36/HAL.h b/Marlin/src/HAL/TEENSY35_36/HAL.h index 5506599cdf..8ca76dc636 100644 --- a/Marlin/src/HAL/TEENSY35_36/HAL.h +++ b/Marlin/src/HAL/TEENSY35_36/HAL.h @@ -160,7 +160,7 @@ public: static inline void clear_reset_source() {} // Free SRAM - static inline int freeMemory() { return freeMemory(); } + static inline int freeMemory() { return ::freeMemory(); } // // ADC Methods diff --git a/Marlin/src/HAL/TEENSY40_41/HAL.h b/Marlin/src/HAL/TEENSY40_41/HAL.h index 4a0b5688d7..10263ecb39 100644 --- a/Marlin/src/HAL/TEENSY40_41/HAL.h +++ b/Marlin/src/HAL/TEENSY40_41/HAL.h @@ -182,7 +182,7 @@ public: static void clear_reset_source(); // Free SRAM - static inline int freeMemory() { return freeMemory(); } + static inline int freeMemory() { return ::freeMemory(); } // // ADC Methods From d7af6199362f35db72579e16843239087689e145 Mon Sep 17 00:00:00 2001 From: kaidegit <60053077+kaidegit@users.noreply.github.com> Date: Sun, 26 Dec 2021 10:12:20 +0800 Subject: [PATCH 268/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20open=20for=20bin?= =?UTF-8?q?=20rename=20(#23351)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/PlatformIO/scripts/marlin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildroot/share/PlatformIO/scripts/marlin.py b/buildroot/share/PlatformIO/scripts/marlin.py index 4830232d0b..2114a05fb3 100644 --- a/buildroot/share/PlatformIO/scripts/marlin.py +++ b/buildroot/share/PlatformIO/scripts/marlin.py @@ -51,7 +51,7 @@ def encrypt_mks(source, target, env, new_name): # If FIRMWARE_BIN is defined by config, override all import re patt = re.compile("^\\s*#define\\s+FIRMWARE_BIN\\s+\"?(.+)\"?") - with open(join("Marlin", "Configuration.h")) as f: + with open(join("Marlin", "Configuration.h"), encoding="utf-8") as f: for line in f: m = patt.search(line) if m != None: From 57315f02cbacea6a90c56349dc7e571e53692740 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 25 Dec 2021 21:25:47 -0600 Subject: [PATCH 269/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20missing=20ADC=20me?= =?UTF-8?q?thod?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/DUE/HAL.h | 2 -- Marlin/src/HAL/ESP32/HAL.h | 3 --- Marlin/src/HAL/LINUX/HAL.h | 1 - Marlin/src/HAL/LPC1768/HAL.h | 2 -- Marlin/src/HAL/NATIVE_SIM/HAL.h | 1 - Marlin/src/HAL/SAMD51/HAL.h | 2 -- Marlin/src/HAL/STM32/HAL.h | 4 +--- Marlin/src/HAL/STM32F1/HAL.h | 2 -- Marlin/src/HAL/TEENSY31_32/HAL.h | 2 -- Marlin/src/HAL/TEENSY35_36/HAL.h | 2 -- Marlin/src/HAL/TEENSY40_41/HAL.h | 2 -- 11 files changed, 1 insertion(+), 22 deletions(-) diff --git a/Marlin/src/HAL/DUE/HAL.h b/Marlin/src/HAL/DUE/HAL.h index 5d1d2cf236..96a59fcf3c 100644 --- a/Marlin/src/HAL/DUE/HAL.h +++ b/Marlin/src/HAL/DUE/HAL.h @@ -131,8 +131,6 @@ typedef Servo hal_servo_t; #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1) #endif -#define HAL_ANALOG_SELECT(ch) - // // Pin Mapping for M42, M43, M226 // diff --git a/Marlin/src/HAL/ESP32/HAL.h b/Marlin/src/HAL/ESP32/HAL.h index 361c903231..138346b950 100644 --- a/Marlin/src/HAL/ESP32/HAL.h +++ b/Marlin/src/HAL/ESP32/HAL.h @@ -85,9 +85,6 @@ void noTone(const pin_t _pin); void analogWrite(pin_t pin, int value); -// ADC -#define HAL_ANALOG_SELECT(pin) - // // Pin Mapping for M42, M43, M226 // diff --git a/Marlin/src/HAL/LINUX/HAL.h b/Marlin/src/HAL/LINUX/HAL.h index c1b7a54997..a2a9692cbd 100644 --- a/Marlin/src/HAL/LINUX/HAL.h +++ b/Marlin/src/HAL/LINUX/HAL.h @@ -82,7 +82,6 @@ extern MSerialT usb_serial; // ADC #define HAL_ADC_VREF 5.0 #define HAL_ADC_RESOLUTION 10 -#define HAL_ANALOG_SELECT(ch) hal.adc_enable(ch) // ------------------------ // Class Utilities diff --git a/Marlin/src/HAL/LPC1768/HAL.h b/Marlin/src/HAL/LPC1768/HAL.h index f1cdbe6f07..e1ade3d9a7 100644 --- a/Marlin/src/HAL/LPC1768/HAL.h +++ b/Marlin/src/HAL/LPC1768/HAL.h @@ -133,8 +133,6 @@ extern DefaultSerial1 USBSerial; #define HAL_ADC_RESOLUTION 12 // 15 bit maximum, raw temperature is stored as int16_t #define HAL_ADC_FILTERED // Disable oversampling done in Marlin as ADC values already filtered in HAL -#define HAL_ANALOG_SELECT(pin) hal.adc_enable(pin) - // // Pin Mapping for M42, M43, M226 // diff --git a/Marlin/src/HAL/NATIVE_SIM/HAL.h b/Marlin/src/HAL/NATIVE_SIM/HAL.h index 0798bdde39..50da5af2eb 100644 --- a/Marlin/src/HAL/NATIVE_SIM/HAL.h +++ b/Marlin/src/HAL/NATIVE_SIM/HAL.h @@ -117,7 +117,6 @@ extern MSerialT serial_stream_3; #define HAL_ADC_VREF 5.0 #define HAL_ADC_RESOLUTION 10 -#define HAL_ANALOG_SELECT(ch) hal.adc_enable(ch) /* ---------------- Delay in cycles */ diff --git a/Marlin/src/HAL/SAMD51/HAL.h b/Marlin/src/HAL/SAMD51/HAL.h index 9fcd73e9b6..e9d4a70c3f 100644 --- a/Marlin/src/HAL/SAMD51/HAL.h +++ b/Marlin/src/HAL/SAMD51/HAL.h @@ -106,8 +106,6 @@ typedef Servo hal_servo_t; // ADC // -#define HAL_ANALOG_SELECT(pin) - //#define HAL_ADC_FILTERED // Disable Marlin's oversampling. The HAL filters ADC values. #define HAL_ADC_VREF 3.3 #define HAL_ADC_RESOLUTION 10 // ... 12 diff --git a/Marlin/src/HAL/STM32/HAL.h b/Marlin/src/HAL/STM32/HAL.h index c23ddf69bd..f9bf1c938a 100644 --- a/Marlin/src/HAL/STM32/HAL.h +++ b/Marlin/src/HAL/STM32/HAL.h @@ -142,8 +142,6 @@ typedef libServo hal_servo_t; // ADC // ------------------------ -#define HAL_ANALOG_SELECT(pin) pinMode(pin, INPUT) - #ifdef ADC_RESOLUTION #define HAL_ADC_RESOLUTION ADC_RESOLUTION #else @@ -240,7 +238,7 @@ public: } // Called by Temperature::init for each sensor at startup - static void adc_enable(const pin_t pin); + static inline void adc_enable(const pin_t pin) { pinMode(pin, INPUT); } // Begin ADC sampling on the given channel static void adc_start(const pin_t pin) { adc_result = analogRead(pin); } diff --git a/Marlin/src/HAL/STM32F1/HAL.h b/Marlin/src/HAL/STM32F1/HAL.h index 8fb4c9299f..bdbf4a1885 100644 --- a/Marlin/src/HAL/STM32F1/HAL.h +++ b/Marlin/src/HAL/STM32F1/HAL.h @@ -188,8 +188,6 @@ extern uint16_t HAL_adc_result; // ADC // ------------------------ -#define HAL_ANALOG_SELECT(pin) pinMode(pin, INPUT_ANALOG); - #ifdef ADC_RESOLUTION #define HAL_ADC_RESOLUTION ADC_RESOLUTION #else diff --git a/Marlin/src/HAL/TEENSY31_32/HAL.h b/Marlin/src/HAL/TEENSY31_32/HAL.h index a5f67a50f0..0661b55f53 100644 --- a/Marlin/src/HAL/TEENSY31_32/HAL.h +++ b/Marlin/src/HAL/TEENSY31_32/HAL.h @@ -105,8 +105,6 @@ uint32_t __get_PRIMASK(void); // CMSIS #define HAL_ADC_VREF 3.3 #define HAL_ADC_RESOLUTION 10 -#define HAL_ANALOG_SELECT(pin) - // // Pin Mapping for M42, M43, M226 // diff --git a/Marlin/src/HAL/TEENSY35_36/HAL.h b/Marlin/src/HAL/TEENSY35_36/HAL.h index 8ca76dc636..1cc465c4bb 100644 --- a/Marlin/src/HAL/TEENSY35_36/HAL.h +++ b/Marlin/src/HAL/TEENSY35_36/HAL.h @@ -110,8 +110,6 @@ typedef int8_t pin_t; #define HAL_ADC_VREF 3.3 #define HAL_ADC_RESOLUTION 10 -#define HAL_ANALOG_SELECT(pin) - // // Pin Mapping for M42, M43, M226 // diff --git a/Marlin/src/HAL/TEENSY40_41/HAL.h b/Marlin/src/HAL/TEENSY40_41/HAL.h index 10263ecb39..7bad143179 100644 --- a/Marlin/src/HAL/TEENSY40_41/HAL.h +++ b/Marlin/src/HAL/TEENSY40_41/HAL.h @@ -129,8 +129,6 @@ typedef int8_t pin_t; #define HAL_ADC_RESOLUTION 10 #define HAL_ADC_FILTERED // turn off ADC oversampling -#define HAL_ANALOG_SELECT(pin) - // // Pin Mapping for M42, M43, M226 // From a47f559db15ad550930f0d49d352e73852ff900d Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Sun, 26 Dec 2021 10:36:09 +0700 Subject: [PATCH 270/532] =?UTF-8?q?=F0=9F=90=9B=20HAL=20refactor=20followu?= =?UTF-8?q?p=20(#23354)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/SAMD51/HAL.h | 2 +- Marlin/src/HAL/STM32/HAL_SPI.cpp | 2 +- Marlin/src/HAL/STM32F1/HAL.h | 2 +- Marlin/src/HAL/TEENSY31_32/HAL.h | 2 +- Marlin/src/HAL/TEENSY40_41/HAL.h | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Marlin/src/HAL/SAMD51/HAL.h b/Marlin/src/HAL/SAMD51/HAL.h index e9d4a70c3f..a88ed9ba79 100644 --- a/Marlin/src/HAL/SAMD51/HAL.h +++ b/Marlin/src/HAL/SAMD51/HAL.h @@ -186,7 +186,7 @@ public: static void adc_init(); // Called by Temperature::init for each sensor at startup - static void adc_enable(const uint8_t ch); + static inline void adc_enable(const uint8_t ch) {} // Begin ADC sampling on the given channel static void adc_start(const pin_t pin); diff --git a/Marlin/src/HAL/STM32/HAL_SPI.cpp b/Marlin/src/HAL/STM32/HAL_SPI.cpp index 7737245de8..40d320d5e8 100644 --- a/Marlin/src/HAL/STM32/HAL_SPI.cpp +++ b/Marlin/src/HAL/STM32/HAL_SPI.cpp @@ -104,7 +104,7 @@ static SPISettings spiConfig; uint8_t spiRec() { hal.isr_off(); // No interrupts during byte receive const uint8_t data = HAL_SPI_STM32_SpiTransfer_Mode_3(0xFF); - hal.isr_off(); // Enable interrupts + hal.isr_on(); // Enable interrupts return data; } diff --git a/Marlin/src/HAL/STM32F1/HAL.h b/Marlin/src/HAL/STM32F1/HAL.h index bdbf4a1885..9b973c3ea4 100644 --- a/Marlin/src/HAL/STM32F1/HAL.h +++ b/Marlin/src/HAL/STM32F1/HAL.h @@ -280,7 +280,7 @@ public: static void adc_init(); // Called by Temperature::init for each sensor at startup - static void adc_enable(const pin_t pin); + static inline void adc_enable(const pin_t pin) { pinMode(pin, INPUT_ANALOG); } // Begin ADC sampling on the given channel static void adc_start(const pin_t pin); diff --git a/Marlin/src/HAL/TEENSY31_32/HAL.h b/Marlin/src/HAL/TEENSY31_32/HAL.h index 0661b55f53..14f463708b 100644 --- a/Marlin/src/HAL/TEENSY31_32/HAL.h +++ b/Marlin/src/HAL/TEENSY31_32/HAL.h @@ -163,7 +163,7 @@ public: static void adc_init(); // Called by Temperature::init for each sensor at startup - static void adc_enable(const pin_t ch); + static inline void adc_enable(const pin_t ch) {} // Begin ADC sampling on the given channel static void adc_start(const pin_t ch); diff --git a/Marlin/src/HAL/TEENSY40_41/HAL.h b/Marlin/src/HAL/TEENSY40_41/HAL.h index 7bad143179..b7a8070281 100644 --- a/Marlin/src/HAL/TEENSY40_41/HAL.h +++ b/Marlin/src/HAL/TEENSY40_41/HAL.h @@ -192,7 +192,7 @@ public: static void adc_init(); // Called by Temperature::init for each sensor at startup - static void adc_enable(const pin_t pin); + static inline void adc_enable(const pin_t pin) {} // Begin ADC sampling on the given channel static void adc_start(const pin_t pin); From 555c749fe2be922eaf3bd78a79ae3b89b012662f Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Sat, 25 Dec 2021 19:41:01 -0800 Subject: [PATCH 271/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20MKS=20Robin=20E3?= =?UTF-8?q?=20NeoPixel=20pin=20default=20(#23350)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h index c30bb0ac9e..e02d1db786 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h @@ -64,11 +64,6 @@ #define Z_MIN_PROBE_PIN PB1 #endif -// LED driving pin -#ifndef NEOPIXEL_PIN - #define NEOPIXEL_PIN PA2 -#endif - // // Steppers // @@ -245,6 +240,11 @@ #endif #endif +// LED driving pin +#ifndef NEOPIXEL_PIN + #define NEOPIXEL_PIN PA2 +#endif + // // SD Card // From 00e6e90648012ca0b954139f867a9a0201319209 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 25 Dec 2021 22:10:47 -0600 Subject: [PATCH 272/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20adc=5Fstart=20for?= =?UTF-8?q?=20AVR,=20native?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Followup to #23295 --- Marlin/src/HAL/AVR/HAL.h | 10 ++++++---- Marlin/src/HAL/LINUX/HAL.h | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Marlin/src/HAL/AVR/HAL.h b/Marlin/src/HAL/AVR/HAL.h index 682374b4ac..3dade7fa15 100644 --- a/Marlin/src/HAL/AVR/HAL.h +++ b/Marlin/src/HAL/AVR/HAL.h @@ -229,12 +229,14 @@ public: } // Begin ADC sampling on the given channel - static inline void adc_start(const pin_t ch) { + static inline void adc_start(const uint8_t ch) { #ifdef MUX5 - if (ch > 7) { ADCSRB = _BV(MUX5); return; } + ADCSRB = ch > 7 ? _BV(MUX5) : 0; + #else + ADCSRB = 0; #endif - ADCSRB = 0; - ADMUX = _BV(REFS0) | (ch & 0x07); SBI(ADCSRA, ADSC); + ADMUX = _BV(REFS0) | (ch & 0x07); + SBI(ADCSRA, ADSC); } // Is the ADC ready for reading? diff --git a/Marlin/src/HAL/LINUX/HAL.h b/Marlin/src/HAL/LINUX/HAL.h index a2a9692cbd..104c47ec61 100644 --- a/Marlin/src/HAL/LINUX/HAL.h +++ b/Marlin/src/HAL/LINUX/HAL.h @@ -140,7 +140,7 @@ public: static inline void adc_enable(const uint8_t) {} // Begin ADC sampling on the given channel - static inline void adc_start(const pin_t ch) { active_ch = ch; } + static inline void adc_start(const uint8_t ch) { active_ch = ch; } // Is the ADC ready for reading? static inline bool adc_ready() { return true; } From 6a8b9274a31d11c396ce1bc44b3a0b872a4606dc Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 25 Dec 2021 23:15:17 -0600 Subject: [PATCH 273/532] =?UTF-8?q?=E2=8F=AA=EF=B8=8F=20Refactor=20still?= =?UTF-8?q?=20needs=20work?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reverting #23295 --- Marlin/src/HAL/AVR/HAL.cpp | 14 +- Marlin/src/HAL/AVR/HAL.h | 186 +++++++++-------------- Marlin/src/HAL/AVR/MarlinSerial.cpp | 4 +- Marlin/src/HAL/AVR/fast_pwm.cpp | 11 +- Marlin/src/HAL/AVR/timers.h | 4 +- Marlin/src/HAL/DUE/HAL.cpp | 45 ++++-- Marlin/src/HAL/DUE/HAL.h | 134 ++++++---------- Marlin/src/HAL/DUE/MarlinSerial.cpp | 4 +- Marlin/src/HAL/DUE/timers.h | 2 +- Marlin/src/HAL/ESP32/HAL.cpp | 35 ++--- Marlin/src/HAL/ESP32/HAL.h | 145 +++++++----------- Marlin/src/HAL/ESP32/timers.h | 4 +- Marlin/src/HAL/LINUX/HAL.cpp | 39 +++-- Marlin/src/HAL/LINUX/HAL.h | 144 ++++++------------ Marlin/src/HAL/LINUX/arduino.cpp | 4 +- Marlin/src/HAL/LINUX/include/Arduino.h | 5 +- Marlin/src/HAL/LINUX/timers.h | 4 +- Marlin/src/HAL/LPC1768/HAL.cpp | 46 +++--- Marlin/src/HAL/LPC1768/HAL.h | 162 ++++++++------------ Marlin/src/HAL/LPC1768/Servo.h | 3 +- Marlin/src/HAL/LPC1768/fast_pwm.cpp | 14 +- Marlin/src/HAL/LPC1768/main.cpp | 6 +- Marlin/src/HAL/LPC1768/timers.h | 2 +- Marlin/src/HAL/NATIVE_SIM/HAL.h | 172 ++++++++------------- Marlin/src/HAL/NATIVE_SIM/timers.h | 4 +- Marlin/src/HAL/SAMD51/HAL.cpp | 26 ++-- Marlin/src/HAL/SAMD51/HAL.h | 133 ++++++---------- Marlin/src/HAL/STM32/HAL.cpp | 28 ++-- Marlin/src/HAL/STM32/HAL.h | 181 ++++++++++------------ Marlin/src/HAL/STM32/HAL_SPI.cpp | 8 +- Marlin/src/HAL/STM32/eeprom_flash.cpp | 8 +- Marlin/src/HAL/STM32/fast_pwm.cpp | 4 +- Marlin/src/HAL/STM32/pinsDebug.h | 6 +- Marlin/src/HAL/STM32/timers.h | 4 +- Marlin/src/HAL/STM32F1/HAL.cpp | 190 ++++++++++++----------- Marlin/src/HAL/STM32F1/HAL.h | 188 ++++++++++------------- Marlin/src/HAL/STM32F1/Servo.h | 3 +- Marlin/src/HAL/STM32F1/fast_pwm.cpp | 8 +- Marlin/src/HAL/STM32F1/timers.h | 2 +- Marlin/src/HAL/TEENSY31_32/HAL.cpp | 85 +++++------ Marlin/src/HAL/TEENSY31_32/HAL.h | 131 +++++----------- Marlin/src/HAL/TEENSY31_32/timers.h | 2 +- Marlin/src/HAL/TEENSY35_36/HAL.cpp | 114 +++++++------- Marlin/src/HAL/TEENSY35_36/HAL.h | 133 +++++----------- Marlin/src/HAL/TEENSY35_36/timers.h | 2 +- Marlin/src/HAL/TEENSY40_41/HAL.cpp | 194 ++++++++++++------------ Marlin/src/HAL/TEENSY40_41/HAL.h | 148 ++++++------------ Marlin/src/HAL/TEENSY40_41/timers.h | 2 +- Marlin/src/HAL/shared/HAL.cpp | 36 ----- Marlin/src/HAL/shared/HAL_spi_L6470.cpp | 8 +- Marlin/src/MarlinCore.cpp | 48 +++--- Marlin/src/feature/caselight.cpp | 2 +- Marlin/src/feature/controllerfan.cpp | 2 +- Marlin/src/feature/e_parser.h | 4 +- Marlin/src/feature/leds/leds.cpp | 2 +- Marlin/src/feature/spindle_laser.cpp | 10 +- Marlin/src/feature/spindle_laser.h | 2 +- Marlin/src/gcode/control/M42.cpp | 4 +- Marlin/src/gcode/gcode_d.cpp | 10 +- Marlin/src/inc/SanityCheck.h | 7 - Marlin/src/lcd/dogm/marlinui_DOGM.cpp | 4 +- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 2 +- Marlin/src/module/endstops.cpp | 2 +- Marlin/src/module/planner.cpp | 6 +- Marlin/src/module/servo.cpp | 2 +- Marlin/src/module/servo.h | 2 +- Marlin/src/module/stepper.cpp | 10 +- Marlin/src/module/temperature.cpp | 112 +++++++------- ini/native.ini | 4 +- 69 files changed, 1301 insertions(+), 1771 deletions(-) delete mode 100644 Marlin/src/HAL/shared/HAL.cpp diff --git a/Marlin/src/HAL/AVR/HAL.cpp b/Marlin/src/HAL/AVR/HAL.cpp index 2b6d2bdbcf..d7bf2a6f6f 100644 --- a/Marlin/src/HAL/AVR/HAL.cpp +++ b/Marlin/src/HAL/AVR/HAL.cpp @@ -36,7 +36,7 @@ // ------------------------ // Don't initialize/override variable (which would happen in .init4) -uint8_t MarlinHAL::reset_reason __attribute__((section(".noinit"))); +uint8_t reset_reason __attribute__((section(".noinit"))); // ------------------------ // Public functions @@ -45,22 +45,22 @@ uint8_t MarlinHAL::reset_reason __attribute__((section(".noinit"))); __attribute__((naked)) // Don't output function pro- and epilogue __attribute__((used)) // Output the function, even if "not used" __attribute__((section(".init3"))) // Put in an early user definable section -void save_reset_reason() { +void HAL_save_reset_reason() { #if ENABLED(OPTIBOOT_RESET_REASON) __asm__ __volatile__( A("STS %0, r2") - : "=m"(hal.reset_reason) + : "=m"(reset_reason) ); #else - hal.reset_reason = MCUSR; + reset_reason = MCUSR; #endif // Clear within 16ms since WDRF bit enables a 16ms watchdog timer -> Boot loop - hal.clear_reset_source(); + MCUSR = 0; wdt_disable(); } -void MarlinHAL::init() { +void HAL_init() { // Init Servo Pins #define INIT_SERVO(N) OUT_WRITE(SERVO##N##_PIN, LOW) #if HAS_SERVO_0 @@ -77,7 +77,7 @@ void MarlinHAL::init() { #endif } -void MarlinHAL::reboot() { +void HAL_reboot() { #if ENABLED(USE_WATCHDOG) while (1) { /* run out the watchdog */ } #else diff --git a/Marlin/src/HAL/AVR/HAL.h b/Marlin/src/HAL/AVR/HAL.h index 3dade7fa15..2217f239d6 100644 --- a/Marlin/src/HAL/AVR/HAL.h +++ b/Marlin/src/HAL/AVR/HAL.h @@ -74,8 +74,9 @@ #define CRITICAL_SECTION_START() unsigned char _sreg = SREG; cli() #define CRITICAL_SECTION_END() SREG = _sreg #endif - -#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment +#define ISRS_ENABLED() TEST(SREG, SREG_I) +#define ENABLE_ISRS() sei() +#define DISABLE_ISRS() cli() // ------------------------ // Types @@ -83,16 +84,16 @@ typedef int8_t pin_t; -// Use shared/servos.cpp #define SHARED_SERVOS HAS_SERVOS - -class Servo; -typedef Servo hal_servo_t; +#define HAL_SERVO_LIB Servo // ------------------------ +// Public Variables +// ------------------------ + +extern uint8_t reset_reason; + // Serial ports -// ------------------------ - #ifdef USBCON #include "../../core/serial_hook.h" typedef ForwardSerial1Class< decltype(Serial) > DefaultSerial1; @@ -141,15 +142,57 @@ typedef Servo hal_servo_t; #endif #endif -// +// ------------------------ +// Public functions +// ------------------------ + +void HAL_init(); + +//void cli(); + +//void _delay_ms(const int delay); + +inline void HAL_clear_reset_source() { } +inline uint8_t HAL_get_reset_source() { return reset_reason; } + +void HAL_reboot(); + +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif + +extern "C" int freeMemory(); + +#pragma GCC diagnostic pop + // ADC -// +#ifdef DIDR2 + #define HAL_ANALOG_SELECT(ind) do{ if (ind < 8) SBI(DIDR0, ind); else SBI(DIDR2, ind & 0x07); }while(0) +#else + #define HAL_ANALOG_SELECT(ind) SBI(DIDR0, ind); +#endif + +inline void HAL_adc_init() { + ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADIF) | 0x07; + DIDR0 = 0; + #ifdef DIDR2 + DIDR2 = 0; + #endif +} + +#define SET_ADMUX_ADCSRA(ch) ADMUX = _BV(REFS0) | (ch & 0x07); SBI(ADCSRA, ADSC) +#ifdef MUX5 + #define HAL_START_ADC(ch) if (ch > 7) ADCSRB = _BV(MUX5); else ADCSRB = 0; SET_ADMUX_ADCSRA(ch) +#else + #define HAL_START_ADC(ch) ADCSRB = 0; SET_ADMUX_ADCSRA(ch) +#endif + #define HAL_ADC_VREF 5.0 #define HAL_ADC_RESOLUTION 10 +#define HAL_READ_ADC() ADC +#define HAL_ADC_READY() !TEST(ADCSRA, ADSC) -// -// Pin Mapping for M42, M43, M226 -// #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) @@ -163,104 +206,23 @@ typedef Servo hal_servo_t; // AVR compatibility #define strtof strtod -// ------------------------ -// Class Utilities -// ------------------------ +#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment -#pragma GCC diagnostic push -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic ignored "-Wunused-function" -#endif +/** + * set_pwm_frequency + * Sets the frequency of the timer corresponding to the provided pin + * as close as possible to the provided desired frequency. Internally + * calculates the required waveform generation mode, prescaler and + * resolution values required and sets the timer registers accordingly. + * NOTE that the frequency is applied to all pins on the timer (Ex OC3A, OC3B and OC3B) + * NOTE that there are limitations, particularly if using TIMER2. (see Configuration_adv.h -> FAST FAN PWM Settings) + */ +void set_pwm_frequency(const pin_t pin, int f_desired); -extern "C" int freeMemory(); - -#pragma GCC diagnostic pop - -// ------------------------ -// MarlinHAL Class -// ------------------------ - -class MarlinHAL { -public: - - // Earliest possible init, before setup() - MarlinHAL() {} - - static void init(); // Called early in setup() - static inline void init_board() {} // Called less early in setup() - static void reboot(); // Restart the firmware from 0x0 - - static inline bool isr_state() { return TEST(SREG, SREG_I); } - static inline void isr_on() { sei(); } - static inline void isr_off() { cli(); } - - static inline void delay_ms(const int ms) { _delay_ms(ms); } - - // Tasks, called from idle() - static inline void idletask() {} - - // Reset - static uint8_t reset_reason; - static inline uint8_t get_reset_source() { return reset_reason; } - static inline void clear_reset_source() { MCUSR = 0; } - - // Free SRAM - static inline int freeMemory() { return ::freeMemory(); } - - // - // ADC Methods - // - - // Called by Temperature::init once at startup - static inline void adc_init() { - ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADIF) | 0x07; - DIDR0 = 0; - #ifdef DIDR2 - DIDR2 = 0; - #endif - } - - // Called by Temperature::init for each sensor at startup - static inline void adc_enable(const uint8_t ch) { - #ifdef DIDR2 - if (ch > 7) { SBI(DIDR2, ch & 0x07); return; } - #endif - SBI(DIDR0, ch); - } - - // Begin ADC sampling on the given channel - static inline void adc_start(const uint8_t ch) { - #ifdef MUX5 - ADCSRB = ch > 7 ? _BV(MUX5) : 0; - #else - ADCSRB = 0; - #endif - ADMUX = _BV(REFS0) | (ch & 0x07); - SBI(ADCSRA, ADSC); - } - - // Is the ADC ready for reading? - static inline bool adc_ready() { return !TEST(ADCSRA, ADSC); } - - // The current value of the ADC register - static inline __typeof__(ADC) adc_value() { return ADC; } - - /** - * Set the PWM duty cycle for the pin to the given value. - * Optionally invert the duty cycle [default = false] - * Optionally change the scale of the provided value to enable finer PWM duty control [default = 255] - */ - static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); - - /** - * Set the frequency of the timer for the given pin as close as - * possible to the provided desired frequency. Internally calculate - * the required waveform generation mode, prescaler, and resolution - * values and set timer registers accordingly. - * NOTE that the frequency is applied to all pins on the timer (Ex OC3A, OC3B and OC3B) - * NOTE that there are limitations, particularly if using TIMER2. (see Configuration_adv.h -> FAST FAN PWM Settings) - */ - static void set_pwm_frequency(const pin_t pin, int f_desired); -}; - -extern MarlinHAL hal; +/** + * set_pwm_duty + * Set the PWM duty cycle of the provided pin to the provided value + * Optionally allows inverting the duty cycle [default = false] + * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] + */ +void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); diff --git a/Marlin/src/HAL/AVR/MarlinSerial.cpp b/Marlin/src/HAL/AVR/MarlinSerial.cpp index 986462437c..cd8bf5e690 100644 --- a/Marlin/src/HAL/AVR/MarlinSerial.cpp +++ b/Marlin/src/HAL/AVR/MarlinSerial.cpp @@ -486,7 +486,7 @@ void MarlinSerial::write(const uint8_t c) { const uint8_t i = (tx_buffer.head + 1) & (Cfg::TX_SIZE - 1); // If global interrupts are disabled (as the result of being called from an ISR)... - if (!hal.isr_state()) { + if (!ISRS_ENABLED()) { // Make room by polling if it is possible to transmit, and do so! while (i == tx_buffer.tail) { @@ -534,7 +534,7 @@ void MarlinSerial::flushTX() { if (!_written) return; // If global interrupts are disabled (as the result of being called from an ISR)... - if (!hal.isr_state()) { + if (!ISRS_ENABLED()) { // Wait until everything was transmitted - We must do polling, as interrupts are disabled while (tx_buffer.head != tx_buffer.tail || !B_TXC) { diff --git a/Marlin/src/HAL/AVR/fast_pwm.cpp b/Marlin/src/HAL/AVR/fast_pwm.cpp index 0053b44c3c..804e5fad30 100644 --- a/Marlin/src/HAL/AVR/fast_pwm.cpp +++ b/Marlin/src/HAL/AVR/fast_pwm.cpp @@ -35,9 +35,10 @@ struct Timer { }; /** - * Get the timer information and register for a pin. - * Return a Timer struct containing this information. - * Used by set_pwm_frequency, set_pwm_duty + * get_pwm_timer + * Get the timer information and register of the provided pin. + * Return a Timer struct containing this information. + * Used by set_pwm_frequency, set_pwm_duty */ Timer get_pwm_timer(const pin_t pin) { uint8_t q = 0; @@ -149,7 +150,7 @@ Timer get_pwm_timer(const pin_t pin) { return timer; } -void MarlinHAL::set_pwm_frequency(const pin_t pin, int f_desired) { +void set_pwm_frequency(const pin_t pin, int f_desired) { Timer timer = get_pwm_timer(pin); if (timer.n == 0) return; // Don't proceed if protected timer or not recognized uint16_t size; @@ -229,7 +230,7 @@ void MarlinHAL::set_pwm_frequency(const pin_t pin, int f_desired) { #endif // NEEDS_HARDWARE_PWM -void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { +void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { #if NEEDS_HARDWARE_PWM // If v is 0 or v_size (max), digitalWrite to LOW or HIGH. diff --git a/Marlin/src/HAL/AVR/timers.h b/Marlin/src/HAL/AVR/timers.h index e1fcbf52d6..36b04eae0d 100644 --- a/Marlin/src/HAL/AVR/timers.h +++ b/Marlin/src/HAL/AVR/timers.h @@ -109,8 +109,8 @@ FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) { * (otherwise, characters will be lost due to UART overflow). * Then: Stepper, Endstops, Temperature, and -finally- all others. */ -#define HAL_timer_isr_prologue(T) NOOP -#define HAL_timer_isr_epilogue(T) NOOP +#define HAL_timer_isr_prologue(T) +#define HAL_timer_isr_epilogue(T) /* 18 cycles maximum latency */ #ifndef HAL_STEP_TIMER_ISR diff --git a/Marlin/src/HAL/DUE/HAL.cpp b/Marlin/src/HAL/DUE/HAL.cpp index 20b711b1b0..a3985652e7 100644 --- a/Marlin/src/HAL/DUE/HAL.cpp +++ b/Marlin/src/HAL/DUE/HAL.cpp @@ -34,7 +34,7 @@ // Public Variables // ------------------------ -uint16_t MarlinHAL::adc_result; +uint16_t HAL_adc_result; // ------------------------ // Public functions @@ -42,7 +42,8 @@ uint16_t MarlinHAL::adc_result; TERN_(POSTMORTEM_DEBUGGING, extern void install_min_serial()); -void MarlinHAL::init() { +// HAL initialization task +void HAL_init() { // Initialize the USB stack #if ENABLED(SDSUPPORT) OUT_WRITE(SDSS, HIGH); // Try to set SDSS inactive before any other SPI users start up @@ -51,17 +52,21 @@ void MarlinHAL::init() { TERN_(POSTMORTEM_DEBUGGING, install_min_serial()); // Install the min serial handler } -void MarlinHAL::init_board() { - #ifdef BOARD_INIT - BOARD_INIT(); - #endif +// HAL idle task +void HAL_idletask() { + // Perform USB stack housekeeping + usb_task_idle(); } -void MarlinHAL::idletask() { - usb_task_idle(); // Perform USB stack housekeeping -} +// Disable interrupts +void cli() { noInterrupts(); } -uint8_t MarlinHAL::get_reset_source() { +// Enable interrupts +void sei() { interrupts(); } + +void HAL_clear_reset_source() { } + +uint8_t HAL_get_reset_source() { switch ((RSTC->RSTC_SR >> 8) & 0x07) { case 0: return RST_POWER_ON; case 1: return RST_BACKUP; @@ -72,7 +77,12 @@ uint8_t MarlinHAL::get_reset_source() { } } -void MarlinHAL::reboot() { rstc_start_software_reset(RSTC); } +void HAL_reboot() { rstc_start_software_reset(RSTC); } + +void _delay_ms(const int delay_ms) { + // Todo: port for Due? + delay(delay_ms); +} extern "C" { extern unsigned int _ebss; // end of bss section @@ -84,6 +94,19 @@ int freeMemory() { return (int)&free_memory - (heap_end ?: (int)&_ebss); } +// ------------------------ +// ADC +// ------------------------ + +void HAL_adc_start_conversion(const uint8_t ch) { + HAL_adc_result = analogRead(ch); +} + +uint16_t HAL_adc_get_result() { + // nop + return HAL_adc_result; +} + // Forward the default serial ports #if USING_HW_SERIAL0 DefaultSerial1 MSerial0(false, Serial); diff --git a/Marlin/src/HAL/DUE/HAL.h b/Marlin/src/HAL/DUE/HAL.h index 96a59fcf3c..96ab5d9808 100644 --- a/Marlin/src/HAL/DUE/HAL.h +++ b/Marlin/src/HAL/DUE/HAL.h @@ -38,10 +38,6 @@ #include "../../core/serial_hook.h" -// ------------------------ -// Serial ports -// ------------------------ - typedef ForwardSerial1Class< decltype(Serial) > DefaultSerial1; typedef ForwardSerial1Class< decltype(Serial1) > DefaultSerial2; typedef ForwardSerial1Class< decltype(Serial2) > DefaultSerial3; @@ -101,38 +97,60 @@ extern DefaultSerial4 MSerial3; #include "MarlinSerial.h" #include "MarlinSerialUSB.h" -// ------------------------ -// Types -// ------------------------ +// On AVR this is in math.h? +#define square(x) ((x)*(x)) typedef int8_t pin_t; -// Use shared/servos.cpp #define SHARED_SERVOS HAS_SERVOS -class Servo; -typedef Servo hal_servo_t; +#define HAL_SERVO_LIB Servo // // Interrupts // -#define sei() noInterrupts() -#define cli() interrupts() +#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() +#define CRITICAL_SECTION_END() if (!primask) __enable_irq() +#define ISRS_ENABLED() (!__get_PRIMASK()) +#define ENABLE_ISRS() __enable_irq() +#define DISABLE_ISRS() __disable_irq() -#define CRITICAL_SECTION_START() const bool _irqon = hal.isr_state(); hal.isr_off() -#define CRITICAL_SECTION_END() if (_irqon) hal.isr_on() +void cli(); // Disable interrupts +void sei(); // Enable interrupts + +void HAL_clear_reset_source(); // clear reset reason +uint8_t HAL_get_reset_source(); // get reset reason + +void HAL_reboot(); // // ADC // -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 +extern uint16_t HAL_adc_result; // result of last ADC conversion #ifndef analogInputToDigitalPin #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1) #endif +#define HAL_ANALOG_SELECT(ch) + +inline void HAL_adc_init() {}//todo + +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 +#define HAL_START_ADC(ch) HAL_adc_start_conversion(ch) +#define HAL_READ_ADC() HAL_adc_result +#define HAL_ADC_READY() true + +void HAL_adc_start_conversion(const uint8_t ch); +uint16_t HAL_adc_get_result(); + // -// Pin Mapping for M42, M43, M226 +// PWM +// +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + +// +// Pin Map // #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin @@ -141,18 +159,27 @@ typedef Servo hal_servo_t; // // Tone // +void toneInit(); void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration=0); void noTone(const pin_t _pin); -// ------------------------ -// Class Utilities -// ------------------------ +// Enable hooks into idle and setup for HAL +#define HAL_IDLETASK 1 +void HAL_idletask(); +void HAL_init(); + +// +// Utility functions +// +void _delay_ms(const int delay); #pragma GCC diagnostic push #if GCC_VERSION <= 50000 #pragma GCC diagnostic ignored "-Wunused-function" #endif +int freeMemory(); + #pragma GCC diagnostic pop #ifdef __cplusplus @@ -162,70 +189,3 @@ char *dtostrf(double __val, signed char __width, unsigned char __prec, char *__s #ifdef __cplusplus } #endif - -// Return free RAM between end of heap (or end bss) and whatever is current -int freeMemory(); - -// ------------------------ -// MarlinHAL Class -// ------------------------ - -class MarlinHAL { -public: - - // Earliest possible init, before setup() - MarlinHAL() {} - - static void init(); // Called early in setup() - static void init_board(); // Called less early in setup() - static void reboot(); // Software reset - - static inline bool isr_state() { return !__get_PRIMASK(); } - static inline void isr_on() { __enable_irq(); } - static inline void isr_off() { __disable_irq(); } - - static inline void delay_ms(const int ms) { delay(ms); } - - // Tasks, called from idle() - static void idletask(); - - // Reset - static uint8_t get_reset_source(); - static inline void clear_reset_source() {} - - // Free SRAM - static inline int freeMemory() { return ::freeMemory(); } - - // - // ADC Methods - // - - static uint16_t adc_result; - - // Called by Temperature::init once at startup - static inline void adc_init() {} - - // Called by Temperature::init for each sensor at startup - static inline void adc_enable(const int ch) {} - - // Begin ADC sampling on the given channel - static inline void adc_start(const uint8_t ch) { adc_result = analogRead(ch); } - - // Is the ADC ready for reading? - static inline bool adc_ready() { return true; } - - // The current value of the ADC register - static inline uint16_t adc_value() { return adc_result; } - - /** - * Set the PWM duty cycle for the pin to the given value. - * No inverting the duty cycle in this HAL. - * No changing the maximum size of the provided value to enable finer PWM duty control in this HAL. - */ - static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { - analogWrite(pin, v); - } - -}; - -extern MarlinHAL hal; diff --git a/Marlin/src/HAL/DUE/MarlinSerial.cpp b/Marlin/src/HAL/DUE/MarlinSerial.cpp index 638f7a1007..fe62ff5607 100644 --- a/Marlin/src/HAL/DUE/MarlinSerial.cpp +++ b/Marlin/src/HAL/DUE/MarlinSerial.cpp @@ -406,7 +406,7 @@ size_t MarlinSerial::write(const uint8_t c) { const uint8_t i = (tx_buffer.head + 1) & (Cfg::TX_SIZE - 1); // If global interrupts are disabled (as the result of being called from an ISR)... - if (!hal.isr_state()) { + if (!ISRS_ENABLED()) { // Make room by polling if it is possible to transmit, and do so! while (i == tx_buffer.tail) { @@ -454,7 +454,7 @@ void MarlinSerial::flushTX() { if (!_written) return; // If global interrupts are disabled (as the result of being called from an ISR)... - if (!hal.isr_state()) { + if (!ISRS_ENABLED()) { // Wait until everything was transmitted - We must do polling, as interrupts are disabled while (tx_buffer.head != tx_buffer.tail || !(HWUART->UART_SR & UART_SR_TXEMPTY)) { diff --git a/Marlin/src/HAL/DUE/timers.h b/Marlin/src/HAL/DUE/timers.h index bcfd07e268..e2932ff36f 100644 --- a/Marlin/src/HAL/DUE/timers.h +++ b/Marlin/src/HAL/DUE/timers.h @@ -125,4 +125,4 @@ FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_SR; } -#define HAL_timer_isr_epilogue(T) NOOP +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/ESP32/HAL.cpp b/Marlin/src/HAL/ESP32/HAL.cpp index 604acae8dd..810e386894 100644 --- a/Marlin/src/HAL/ESP32/HAL.cpp +++ b/Marlin/src/HAL/ESP32/HAL.cpp @@ -52,7 +52,7 @@ // Externs // ------------------------ -portMUX_TYPE MarlinHAL::spinlock = portMUX_INITIALIZER_UNLOCKED; +portMUX_TYPE spinlock = portMUX_INITIALIZER_UNLOCKED; // ------------------------ // Local defines @@ -64,7 +64,7 @@ portMUX_TYPE MarlinHAL::spinlock = portMUX_INITIALIZER_UNLOCKED; // Public Variables // ------------------------ -uint16_t MarlinHAL::adc_result; +uint16_t HAL_adc_result; // ------------------------ // Private Variables @@ -95,22 +95,20 @@ volatile int numPWMUsed = 0, #endif #if ENABLED(USE_ESP32_EXIO) - HardwareSerial YSerial2(2); void Write_EXIO(uint8_t IO, uint8_t v) { - if (hal.isr_state()) { - hal.isr_off(); + if (ISRS_ENABLED()) { + DISABLE_ISRS(); YSerial2.write(0x80 | (((char)v) << 5) | (IO - 100)); - hal.isr_on(); + ENABLE_ISRS(); } else YSerial2.write(0x80 | (((char)v) << 5) | (IO - 100)); } - #endif -void MarlinHAL::init_board() { +void HAL_init_board() { #if ENABLED(USE_ESP32_TASK_WDT) esp_task_wdt_init(10, true); #endif @@ -156,24 +154,27 @@ void MarlinHAL::init_board() { #endif } -void MarlinHAL::idletask() { +void HAL_idletask() { #if BOTH(WIFISUPPORT, OTASUPPORT) OTA_handle(); #endif TERN_(ESP3D_WIFISUPPORT, esp3dlib.idletask()); } -uint8_t MarlinHAL::get_reset_source() { return rtc_get_reset_reason(1); } +void HAL_clear_reset_source() { } -void MarlinHAL::reboot() { ESP.restart(); } +uint8_t HAL_get_reset_source() { return rtc_get_reset_reason(1); } + +void HAL_reboot() { ESP.restart(); } + +void _delay_ms(int delay_ms) { delay(delay_ms); } // return free memory between end of heap (or end bss) and whatever is current -int MarlinHAL::freeMemory() { return ESP.getFreeHeap(); } +int freeMemory() { return ESP.getFreeHeap(); } // ------------------------ // ADC // ------------------------ - #define ADC1_CHANNEL(pin) ADC1_GPIO ## pin ## _CHANNEL adc1_channel_t get_channel(int pin) { @@ -195,7 +196,7 @@ void adc1_set_attenuation(adc1_channel_t chan, adc_atten_t atten) { } } -void MarlinHAL::adc_init() { +void HAL_adc_init() { // Configure ADC adc1_config_width(ADC_WIDTH_12Bit); @@ -225,11 +226,11 @@ void MarlinHAL::adc_init() { } } -void MarlinHAL::adc_start(const pin_t pin) { - const adc1_channel_t chan = get_channel(pin); +void HAL_adc_start_conversion(const uint8_t adc_pin) { + const adc1_channel_t chan = get_channel(adc_pin); uint32_t mv; esp_adc_cal_get_voltage((adc_channel_t)chan, &characteristics[attenuations[chan]], &mv); - adc_result = mv * 1023.0 / 3300.0; + HAL_adc_result = mv * 1023.0 / 3300.0; // Change the attenuation level based on the new reading adc_atten_t atten; diff --git a/Marlin/src/HAL/ESP32/HAL.h b/Marlin/src/HAL/ESP32/HAL.h index 138346b950..8473e3c4e4 100644 --- a/Marlin/src/HAL/ESP32/HAL.h +++ b/Marlin/src/HAL/ESP32/HAL.h @@ -49,6 +49,8 @@ // Defines // ------------------------ +extern portMUX_TYPE spinlock; + #define MYSERIAL1 flushableSerial #if EITHER(WIFISUPPORT, ESP3D_WIFISUPPORT) @@ -63,6 +65,9 @@ #define CRITICAL_SECTION_START() portENTER_CRITICAL(&spinlock) #define CRITICAL_SECTION_END() portEXIT_CRITICAL(&spinlock) +#define ISRS_ENABLED() (spinlock.owner == portMUX_FREE_VAL) +#define ENABLE_ISRS() if (spinlock.owner != portMUX_FREE_VAL) portEXIT_CRITICAL(&spinlock) +#define DISABLE_ISRS() portENTER_CRITICAL(&spinlock) // ------------------------ // Types @@ -70,8 +75,14 @@ typedef int16_t pin_t; -class Servo; -typedef Servo hal_servo_t; +#define HAL_SERVO_LIB Servo + +// ------------------------ +// Public Variables +// ------------------------ + +/** result of last ADC conversion */ +extern uint16_t HAL_adc_result; // ------------------------ // Public functions @@ -80,18 +91,59 @@ typedef Servo hal_servo_t; // // Tone // +void toneInit(); void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration=0); void noTone(const pin_t _pin); +// clear reset reason +void HAL_clear_reset_source(); + +// reset reason +uint8_t HAL_get_reset_source(); + +void HAL_reboot(); + +void _delay_ms(int delay); + +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif + +int freeMemory(); + +#pragma GCC diagnostic pop + void analogWrite(pin_t pin, int value); -// -// Pin Mapping for M42, M43, M226 -// +// ADC +#define HAL_ANALOG_SELECT(pin) + +void HAL_adc_init(); + +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 +#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) +#define HAL_READ_ADC() HAL_adc_result +#define HAL_ADC_READY() true + +void HAL_adc_start_conversion(const uint8_t adc_pin); + +// PWM +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + +// Pin Map #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) +// Enable hooks into idle and setup for HAL +#define HAL_IDLETASK 1 +#define BOARD_INIT() HAL_init_board(); +void HAL_idletask(); +inline void HAL_init() {} +void HAL_init_board(); + #if ENABLED(USE_ESP32_EXIO) void Write_EXIO(uint8_t IO, uint8_t v); #endif @@ -136,86 +188,3 @@ FORCE_INLINE static void DELAY_CYCLES(uint32_t x) { } } - -// ------------------------ -// Class Utilities -// ------------------------ - -#pragma GCC diagnostic push -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic ignored "-Wunused-function" -#endif - -int freeMemory(); - -#pragma GCC diagnostic pop - -void _delay_ms(const int ms); - -// ------------------------ -// MarlinHAL Class -// ------------------------ - -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 - -class MarlinHAL { -public: - - // Earliest possible init, before setup() - MarlinHAL() {} - - static inline void init() {} // Called early in setup() - static void init_board(); // Called less early in setup() - static void reboot(); // Restart the firmware - - static portMUX_TYPE spinlock; - static inline bool isr_state() { return spinlock.owner == portMUX_FREE_VAL; } - static inline void isr_on() { if (spinlock.owner != portMUX_FREE_VAL) portEXIT_CRITICAL(&spinlock); } - static inline void isr_off() { portENTER_CRITICAL(&spinlock); } - - static inline void delay_ms(const int ms) { _delay_ms(ms); } - - // Tasks, called from idle() - static void idletask(); - - // Reset - static uint8_t get_reset_source(); - static inline void clear_reset_source() {} - - // Free SRAM - static int freeMemory(); - - // - // ADC Methods - // - - static uint16_t adc_result; - - // Called by Temperature::init once at startup - static void adc_init(); - - // Called by Temperature::init for each sensor at startup - static inline void adc_enable(const pin_t pin) {} - - // Begin ADC sampling on the given channel - static void adc_start(const pin_t pin); - - // Is the ADC ready for reading? - static inline bool adc_ready() { return true; } - - // The current value of the ADC register - static inline uint16_t adc_value() { return adc_result; } - - /** - * Set the PWM duty cycle for the pin to the given value. - * No inverting the duty cycle in this HAL. - * No changing the maximum size of the provided value to enable finer PWM duty control in this HAL. - */ - static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { - analogWrite(pin, v); - } - -}; - -extern MarlinHAL hal; diff --git a/Marlin/src/HAL/ESP32/timers.h b/Marlin/src/HAL/ESP32/timers.h index efae594f6c..266169848d 100644 --- a/Marlin/src/HAL/ESP32/timers.h +++ b/Marlin/src/HAL/ESP32/timers.h @@ -136,5 +136,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num); void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); -#define HAL_timer_isr_prologue(T) NOOP -#define HAL_timer_isr_epilogue(T) NOOP +#define HAL_timer_isr_prologue(T) +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/LINUX/HAL.cpp b/Marlin/src/HAL/LINUX/HAL.cpp index 91739aaa7b..0b679170ef 100644 --- a/Marlin/src/HAL/LINUX/HAL.cpp +++ b/Marlin/src/HAL/LINUX/HAL.cpp @@ -24,12 +24,6 @@ #include "../../inc/MarlinConfig.h" #include "../shared/Delay.h" -extern MarlinHAL hal; - -// ------------------------ -// Serial ports -// ------------------------ - MSerialT usb_serial(TERN0(EMERGENCY_PARSER, true)); // U8glib required functions @@ -43,21 +37,42 @@ extern "C" { //************************// // return free heap space -int freeMemory() { return 0; } +int freeMemory() { + return 0; +} // ------------------------ // ADC // ------------------------ -uint8_t MarlinHAL::active_ch = 0; +void HAL_adc_init() { -uint16_t MarlinHAL::adc_value() { - const pin_t pin = analogInputToDigitalPin(active_ch); +} + +void HAL_adc_enable_channel(const uint8_t ch) { + +} + +uint8_t active_ch = 0; +void HAL_adc_start_conversion(const uint8_t ch) { + active_ch = ch; +} + +bool HAL_adc_finished() { + return true; +} + +uint16_t HAL_adc_get_result() { + pin_t pin = analogInputToDigitalPin(active_ch); if (!VALID_PIN(pin)) return 0; - const uint16_t data = ((Gpio::get(pin) >> 2) & 0x3FF); + uint16_t data = ((Gpio::get(pin) >> 2) & 0x3FF); return data; // return 10bit value as Marlin expects } -void MarlinHAL::reboot() { /* Reset the application state and GPIO */ } +void HAL_pwm_init() { + +} + +void HAL_reboot() { /* Reset the application state and GPIO */ } #endif // __PLAT_LINUX__ diff --git a/Marlin/src/HAL/LINUX/HAL.h b/Marlin/src/HAL/LINUX/HAL.h index 104c47ec61..d7d3a92b73 100644 --- a/Marlin/src/HAL/LINUX/HAL.h +++ b/Marlin/src/HAL/LINUX/HAL.h @@ -21,42 +21,25 @@ */ #pragma once -#include -#include -#include -#undef min -#undef max -#include - -#include "hardware/Clock.h" - -#include "../shared/Marduino.h" -#include "../shared/math_32bit.h" -#include "../shared/HAL_SPI.h" -#include "fastio.h" -#include "watchdog.h" -#include "serial.h" - -// ------------------------ -// Defines -// ------------------------ - #define CPU_32_BIT -#define SHARED_SERVOS HAS_SERVOS // Use shared/servos.cpp #define F_CPU 100000000UL #define SystemCoreClock F_CPU +#include +#include +#include -#define DELAY_CYCLES(x) Clock::delayCycles(x) +#undef min +#undef max -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 +#include -void _printf(const char *format, ...); +void _printf (const char *format, ...); void _putc(uint8_t c); uint8_t _getc(); +//extern "C" volatile uint32_t _millis; + //arduino: Print.h #define DEC 10 #define HEX 16 @@ -66,27 +49,36 @@ uint8_t _getc(); #define B01 1 #define B10 2 -// ------------------------ -// Serial ports -// ------------------------ +#include "hardware/Clock.h" + +#include "../shared/Marduino.h" +#include "../shared/math_32bit.h" +#include "../shared/HAL_SPI.h" +#include "fastio.h" +#include "watchdog.h" +#include "serial.h" + +#define SHARED_SERVOS HAS_SERVOS extern MSerialT usb_serial; #define MYSERIAL1 usb_serial +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 + // // Interrupts // #define CRITICAL_SECTION_START() #define CRITICAL_SECTION_END() +#define ISRS_ENABLED() +#define ENABLE_ISRS() +#define DISABLE_ISRS() -// ADC -#define HAL_ADC_VREF 5.0 -#define HAL_ADC_RESOLUTION 10 - -// ------------------------ -// Class Utilities -// ------------------------ +inline void HAL_init() {} +// Utility functions #pragma GCC diagnostic push #if GCC_VERSION <= 50000 #pragma GCC diagnostic ignored "-Wunused-function" @@ -96,67 +88,29 @@ int freeMemory(); #pragma GCC diagnostic pop -// ------------------------ -// MarlinHAL Class -// ------------------------ +// ADC +#define HAL_ADC_VREF 5.0 +#define HAL_ADC_RESOLUTION 10 +#define HAL_ANALOG_SELECT(ch) HAL_adc_enable_channel(ch) +#define HAL_START_ADC(ch) HAL_adc_start_conversion(ch) +#define HAL_READ_ADC() HAL_adc_get_result() +#define HAL_ADC_READY() true -class MarlinHAL { -public: +void HAL_adc_init(); +void HAL_adc_enable_channel(const uint8_t ch); +void HAL_adc_start_conversion(const uint8_t ch); +uint16_t HAL_adc_get_result(); - // Earliest possible init, before setup() - MarlinHAL() {} +// PWM +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } - static inline void init() {} // Called early in setup() - static inline void init_board() {} // Called less early in setup() - static void reboot(); // Reset the application state and GPIO +// Reset source +inline void HAL_clear_reset_source(void) {} +inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; } - static inline bool isr_state() { return true; } - static inline void isr_on() {} - static inline void isr_off() {} +void HAL_reboot(); // Reset the application state and GPIO - static inline void delay_ms(const int ms) { _delay_ms(ms); } - - // Tasks, called from idle() - static inline void idletask() {} - - // Reset - static constexpr uint8_t reset_reason = RST_POWER_ON; - static inline uint8_t get_reset_source() { return reset_reason; } - static inline void clear_reset_source() {} - - // Free SRAM - static inline int freeMemory() { return ::freeMemory(); } - - // - // ADC Methods - // - - static uint8_t active_ch; - - // Called by Temperature::init once at startup - static inline void adc_init() {} - - // Called by Temperature::init for each sensor at startup - static inline void adc_enable(const uint8_t) {} - - // Begin ADC sampling on the given channel - static inline void adc_start(const uint8_t ch) { active_ch = ch; } - - // Is the ADC ready for reading? - static inline bool adc_ready() { return true; } - - // The current value of the ADC register - static uint16_t adc_value(); - - /** - * Set the PWM duty cycle for the pin to the given value. - * No option to change the resolution or invert the duty cycle. - */ - static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { - analogWrite(pin, v); - } - - static inline void set_pwm_frequency(const pin_t, int) {} -}; - -extern MarlinHAL hal; +/* ---------------- Delay in cycles */ +FORCE_INLINE static void DELAY_CYCLES(uint64_t x) { + Clock::delayCycles(x); +} diff --git a/Marlin/src/HAL/LINUX/arduino.cpp b/Marlin/src/HAL/LINUX/arduino.cpp index 075b4ccde2..4b56d02a38 100644 --- a/Marlin/src/HAL/LINUX/arduino.cpp +++ b/Marlin/src/HAL/LINUX/arduino.cpp @@ -31,7 +31,9 @@ void cli() { } // Disable void sei() { } // Enable // Time functions -void _delay_ms(const int ms) { delay(ms); } +void _delay_ms(const int delay_ms) { + delay(delay_ms); +} uint32_t millis() { return (uint32_t)Clock::millis(); diff --git a/Marlin/src/HAL/LINUX/include/Arduino.h b/Marlin/src/HAL/LINUX/include/Arduino.h index 49e04d0cb7..d4086e259a 100644 --- a/Marlin/src/HAL/LINUX/include/Arduino.h +++ b/Marlin/src/HAL/LINUX/include/Arduino.h @@ -59,6 +59,7 @@ typedef uint8_t byte; #endif #define sq(v) ((v) * (v)) +#define square(v) sq(v) #define constrain(value, arg_min, arg_max) ((value) < (arg_min) ? (arg_min) :((value) > (arg_max) ? (arg_max) : (value))) //Interrupts @@ -73,8 +74,8 @@ extern "C" { } // Time functions -extern "C" void delay(const int ms); -void _delay_ms(const int ms); +extern "C" void delay(const int milis); +void _delay_ms(const int delay); void delayMicroseconds(unsigned long); uint32_t millis(); diff --git a/Marlin/src/HAL/LINUX/timers.h b/Marlin/src/HAL/LINUX/timers.h index 2d2a95774c..a98ceb6f39 100644 --- a/Marlin/src/HAL/LINUX/timers.h +++ b/Marlin/src/HAL/LINUX/timers.h @@ -92,5 +92,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num); void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); -#define HAL_timer_isr_prologue(T) NOOP -#define HAL_timer_isr_epilogue(T) NOOP +#define HAL_timer_isr_prologue(T) +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/LPC1768/HAL.cpp b/Marlin/src/HAL/LPC1768/HAL.cpp index 541848b08a..cee9cfc5f7 100644 --- a/Marlin/src/HAL/LPC1768/HAL.cpp +++ b/Marlin/src/HAL/LPC1768/HAL.cpp @@ -31,7 +31,7 @@ DefaultSerial1 USBSerial(false, UsbSerial); -uint32_t MarlinHAL::adc_result = 0; +uint32_t HAL_adc_reading = 0; // U8glib required functions extern "C" { @@ -41,6 +41,8 @@ extern "C" { void u8g_Delay(uint16_t val) { delay(val); } } +//************************// + // return free heap space int freeMemory() { char stack_end; @@ -52,27 +54,7 @@ int freeMemory() { return result; } -void MarlinHAL::reboot() { NVIC_SystemReset(); } - -uint8_t MarlinHAL::get_reset_source() { - #if ENABLED(USE_WATCHDOG) - if (watchdog_timed_out()) return RST_WATCHDOG; - #endif - return RST_POWER_ON; -} - -void MarlinHAL::clear_reset_source() { - TERN_(USE_WATCHDOG, watchdog_clear_timeout_flag()); -} - -void flashFirmware(const int16_t) { - delay(500); // Give OS time to disconnect - USB_Connect(false); // USB clear connection - delay(1000); // Give OS time to notice - hal.reboot(); -} - -// For M42/M43, scan command line for pin code +// scan command line for code // return index into pin map array if found and the pin is valid. // return dval if not found or not a valid pin. int16_t PARSED_PIN_INDEX(const char code, const int16_t dval) { @@ -81,4 +63,24 @@ int16_t PARSED_PIN_INDEX(const char code, const int16_t dval) { return ind > -1 ? ind : dval; } +void flashFirmware(const int16_t) { + delay(500); // Give OS time to disconnect + USB_Connect(false); // USB clear connection + delay(1000); // Give OS time to notice + HAL_reboot(); +} + +void HAL_clear_reset_source(void) { + TERN_(USE_WATCHDOG, watchdog_clear_timeout_flag()); +} + +uint8_t HAL_get_reset_source(void) { + #if ENABLED(USE_WATCHDOG) + if (watchdog_timed_out()) return RST_WATCHDOG; + #endif + return RST_POWER_ON; +} + +void HAL_reboot() { NVIC_SystemReset(); } + #endif // TARGET_LPC1768 diff --git a/Marlin/src/HAL/LPC1768/HAL.h b/Marlin/src/HAL/LPC1768/HAL.h index e1ade3d9a7..348ea6b21a 100644 --- a/Marlin/src/HAL/LPC1768/HAL.h +++ b/Marlin/src/HAL/LPC1768/HAL.h @@ -28,6 +28,8 @@ #define CPU_32_BIT +void HAL_init(); + #include #include #include @@ -45,9 +47,12 @@ extern "C" volatile uint32_t _millis; #include #include -// ------------------------ -// Serial ports -// ------------------------ +// +// Default graphical display delays +// +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 typedef ForwardSerial1Class< decltype(UsbSerial) > DefaultSerial1; extern DefaultSerial1 USBSerial; @@ -109,12 +114,26 @@ extern DefaultSerial1 USBSerial; // // Interrupts // - -#define CRITICAL_SECTION_START() const bool irqon = !__get_PRIMASK(); __disable_irq() -#define CRITICAL_SECTION_END() if (irqon) __enable_irq() +#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() +#define CRITICAL_SECTION_END() if (!primask) __enable_irq() +#define ISRS_ENABLED() (!__get_PRIMASK()) +#define ENABLE_ISRS() __enable_irq() +#define DISABLE_ISRS() __disable_irq() // -// ADC +// Utility functions +// +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif + +int freeMemory(); + +#pragma GCC diagnostic pop + +// +// ADC API // #define ADC_MEDIAN_FILTER_SIZE (23) // Higher values increase step delay (phase shift), @@ -133,9 +152,20 @@ extern DefaultSerial1 USBSerial; #define HAL_ADC_RESOLUTION 12 // 15 bit maximum, raw temperature is stored as int16_t #define HAL_ADC_FILTERED // Disable oversampling done in Marlin as ADC values already filtered in HAL -// -// Pin Mapping for M42, M43, M226 -// +using FilteredADC = LPC176x::ADC; +extern uint32_t HAL_adc_reading; +[[gnu::always_inline]] inline void HAL_adc_start_conversion(const pin_t pin) { + HAL_adc_reading = FilteredADC::read(pin) >> (16 - HAL_ADC_RESOLUTION); // returns 16bit value, reduce to required bits +} +[[gnu::always_inline]] inline uint16_t HAL_adc_get_result() { + return HAL_adc_reading; +} + +#define HAL_adc_init() +#define HAL_ANALOG_SELECT(pin) FilteredADC::enable_channel(pin) +#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) +#define HAL_READ_ADC() HAL_adc_get_result() +#define HAL_ADC_READY() (true) // Test whether the pin is valid constexpr bool VALID_PIN(const pin_t pin) { @@ -162,104 +192,32 @@ int16_t PARSED_PIN_INDEX(const char code, const int16_t dval); // P0.6 thru P0.9 are for the onboard SD card #define HAL_SENSITIVE_PINS P0_06, P0_07, P0_08, P0_09, -// ------------------------ -// Defines -// ------------------------ +#define HAL_IDLETASK 1 +void HAL_idletask(); #define PLATFORM_M997_SUPPORT void flashFirmware(const int16_t); #define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment -// Default graphical display delays -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 +/** + * set_pwm_frequency + * Set the frequency of the timer corresponding to the provided pin + * All Hardware PWM pins run at the same frequency and all + * Software PWM pins run at the same frequency + */ +void set_pwm_frequency(const pin_t pin, int f_desired); -// ------------------------ -// Class Utilities -// ------------------------ +/** + * set_pwm_duty + * Set the PWM duty cycle of the provided pin to the provided value + * Optionally allows inverting the duty cycle [default = false] + * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] + */ +void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); -#pragma GCC diagnostic push -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic ignored "-Wunused-function" -#endif +// Reset source +void HAL_clear_reset_source(void); +uint8_t HAL_get_reset_source(void); -int freeMemory(); - -#pragma GCC diagnostic pop - -// ------------------------ -// MarlinHAL Class -// ------------------------ - -class MarlinHAL { -public: - - // Earliest possible init, before setup() - MarlinHAL() {} - - static void init(); // Called early in setup() - static inline void init_board() {} // Called less early in setup() - static void reboot(); // Restart the firmware from 0x0 - - static inline bool isr_state() { return !__get_PRIMASK(); } - static inline void isr_on() { __enable_irq(); } - static inline void isr_off() { __disable_irq(); } - - static inline void delay_ms(const int ms) { _delay_ms(ms); } - - // Tasks, called from idle() - static void idletask(); - - // Reset - static uint8_t get_reset_source(); - static void clear_reset_source(); - - // Free SRAM - static inline int freeMemory() { return ::freeMemory(); } - - // - // ADC Methods - // - - using FilteredADC = LPC176x::ADC; - - // Called by Temperature::init once at startup - static inline void adc_init() {} - - // Called by Temperature::init for each sensor at startup - static inline void adc_enable(const pin_t pin) { - FilteredADC::enable_channel(pin); - } - - // Begin ADC sampling on the given pin - static uint32_t adc_result; - FORCE_INLINE static void adc_start(const pin_t pin) { - adc_result = FilteredADC::read(pin) >> (16 - HAL_ADC_RESOLUTION); // returns 16bit value, reduce to required bits - } - - // Is the ADC ready for reading? - static inline bool adc_ready() { return true; } - - // The current value of the ADC register - FORCE_INLINE static uint16_t adc_value() { - return (uint16_t)adc_result; - } - - /** - * Set the PWM duty cycle for the pin to the given value. - * Optionally invert the duty cycle [default = false] - * Optionally change the scale of the provided value to enable finer PWM duty control [default = 255] - */ - static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); - - /** - * Set the frequency of the timer corresponding to the provided pin - * All Hardware PWM pins will run at the same frequency and - * All Software PWM pins will run at the same frequency - */ - static void set_pwm_frequency(const pin_t pin, int f_desired); -}; - -extern MarlinHAL hal; +void HAL_reboot(); diff --git a/Marlin/src/HAL/LPC1768/Servo.h b/Marlin/src/HAL/LPC1768/Servo.h index f02f503a67..eb12fd20f4 100644 --- a/Marlin/src/HAL/LPC1768/Servo.h +++ b/Marlin/src/HAL/LPC1768/Servo.h @@ -65,5 +65,4 @@ class libServo: public Servo { } }; -class libServo; -typedef libServo hal_servo_t; +#define HAL_SERVO_LIB libServo diff --git a/Marlin/src/HAL/LPC1768/fast_pwm.cpp b/Marlin/src/HAL/LPC1768/fast_pwm.cpp index 91e92a1575..eae0e36b0b 100644 --- a/Marlin/src/HAL/LPC1768/fast_pwm.cpp +++ b/Marlin/src/HAL/LPC1768/fast_pwm.cpp @@ -21,17 +21,21 @@ */ #ifdef TARGET_LPC1768 -#include "../../inc/MarlinConfig.h" +#include "../../inc/MarlinConfigPre.h" #include -void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { +void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { if (!LPC176x::pin_is_valid(pin)) return; if (LPC176x::pwm_attach_pin(pin)) LPC176x::pwm_write_ratio(pin, invert ? 1.0f - (float)v / v_size : (float)v / v_size); // map 1-254 onto PWM range } -void MarlinHAL::set_pwm_frequency(const pin_t pin, int f_desired) { - LPC176x::pwm_set_frequency(pin, f_desired); -} +#if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM + + void set_pwm_frequency(const pin_t pin, int f_desired) { + LPC176x::pwm_set_frequency(pin, f_desired); + } + +#endif #endif // TARGET_LPC1768 diff --git a/Marlin/src/HAL/LPC1768/main.cpp b/Marlin/src/HAL/LPC1768/main.cpp index 419c99793f..ef0dc42c78 100644 --- a/Marlin/src/HAL/LPC1768/main.cpp +++ b/Marlin/src/HAL/LPC1768/main.cpp @@ -48,7 +48,7 @@ void SysTick_Callback() { disk_timerproc(); } TERN_(POSTMORTEM_DEBUGGING, extern void install_min_serial()); -void MarlinHAL::init() { +void HAL_init() { // Init LEDs #if PIN_EXISTS(LED) @@ -130,7 +130,7 @@ void MarlinHAL::init() { const millis_t usb_timeout = millis() + 2000; while (!USB_Configuration && PENDING(millis(), usb_timeout)) { delay(50); - idletask(); + HAL_idletask(); #if PIN_EXISTS(LED) TOGGLE(LED_PIN); // Flash quickly during USB initialization #endif @@ -142,7 +142,7 @@ void MarlinHAL::init() { } // HAL idle task -void MarlinHAL::idletask() { +void HAL_idletask() { #if HAS_SHARED_MEDIA // If Marlin is using the SD card we need to lock it to prevent access from // a PC via USB. diff --git a/Marlin/src/HAL/LPC1768/timers.h b/Marlin/src/HAL/LPC1768/timers.h index c6d7bc632e..78e856db28 100644 --- a/Marlin/src/HAL/LPC1768/timers.h +++ b/Marlin/src/HAL/LPC1768/timers.h @@ -170,4 +170,4 @@ FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { } } -#define HAL_timer_isr_epilogue(T) NOOP +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/NATIVE_SIM/HAL.h b/Marlin/src/HAL/NATIVE_SIM/HAL.h index 50da5af2eb..436b4b4daa 100644 --- a/Marlin/src/HAL/NATIVE_SIM/HAL.h +++ b/Marlin/src/HAL/NATIVE_SIM/HAL.h @@ -21,10 +21,18 @@ */ #pragma once +#define CPU_32_BIT +#define HAL_IDLETASK +void HAL_idletask(); + +#define F_CPU 100000000 +#define SystemCoreClock F_CPU #include #include + #undef min #undef max + #include #include "pinmapping.h" @@ -32,6 +40,8 @@ void _printf (const char *format, ...); void _putc(uint8_t c); uint8_t _getc(); +//extern "C" volatile uint32_t _millis; + //arduino: Print.h #define DEC 10 #define HEX 16 @@ -48,23 +58,7 @@ uint8_t _getc(); #include "watchdog.h" #include "serial.h" -// ------------------------ -// Defines -// ------------------------ - -#define CPU_32_BIT -#define SHARED_SERVOS HAS_SERVOS // Use shared/servos.cpp - -#define F_CPU 100000000 -#define SystemCoreClock F_CPU - -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 - -// ------------------------ -// Serial ports -// ------------------------ +#define SHARED_SERVOS HAS_SERVOS extern MSerialT serial_stream_0; extern MSerialT serial_stream_1; @@ -104,19 +98,49 @@ extern MSerialT serial_stream_3; #endif #endif -// ------------------------ -// Interrupts -// ------------------------ +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 + +// +// Interrupts +// #define CRITICAL_SECTION_START() #define CRITICAL_SECTION_END() +#define ISRS_ENABLED() +#define ENABLE_ISRS() +#define DISABLE_ISRS() + +inline void HAL_init() {} + +// Utility functions +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" +int freeMemory(); +#pragma GCC diagnostic pop -// ------------------------ // ADC -// ------------------------ - #define HAL_ADC_VREF 5.0 #define HAL_ADC_RESOLUTION 10 +#define HAL_ANALOG_SELECT(ch) HAL_adc_enable_channel(ch) +#define HAL_START_ADC(ch) HAL_adc_start_conversion(ch) +#define HAL_READ_ADC() HAL_adc_get_result() +#define HAL_ADC_READY() true + +void HAL_adc_init(); +void HAL_adc_enable_channel(const uint8_t ch); +void HAL_adc_start_conversion(const uint8_t ch); +uint16_t HAL_adc_get_result(); + +// PWM +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + +// Reset source +inline void HAL_clear_reset_source(void) {} +inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; } + +void HAL_reboot(); /* ---------------- Delay in cycles */ @@ -135,22 +159,29 @@ constexpr inline std::size_t strlen_constexpr(const char* str) { // https://github.com/gcc-mirror/gcc/blob/5c7634a0e5f202935aa6c11b6ea953b8bf80a00a/libstdc%2B%2B-v3/include/bits/char_traits.h#L329 if (str != nullptr) { std::size_t i = 0; - while (str[i] != '\0') ++i; + while (str[i] != '\0') { + ++i; + } + return i; } + return 0; } constexpr inline int strncmp_constexpr(const char* lhs, const char* rhs, std::size_t count) { // https://github.com/gcc-mirror/gcc/blob/13b9cbfc32fe3ac4c81c4dd9c42d141c8fb95db4/libstdc%2B%2B-v3/include/bits/char_traits.h#L655 - if (lhs == nullptr || rhs == nullptr) + if (lhs == nullptr || rhs == nullptr) { return rhs != nullptr ? -1 : 1; + } - for (std::size_t i = 0; i < count; ++i) + for (std::size_t i = 0; i < count; ++i) { if (lhs[i] != rhs[i]) { return lhs[i] < rhs[i] ? -1 : 1; - else if (lhs[i] == '\0') + } else if (lhs[i] == '\0') { return 0; + } + } return 0; } @@ -162,11 +193,14 @@ constexpr inline const char* strstr_constexpr(const char* str, const char* targe do { char sc = {}; do { - if ((sc = *str++) == '\0') return nullptr; + if ((sc = *str++) == '\0') { + return nullptr; + } } while (sc != c); } while (strncmp_constexpr(str, target, len) != 0); --str; } + return str; } @@ -177,88 +211,12 @@ constexpr inline char* strstr_constexpr(char* str, const char* target) { do { char sc = {}; do { - if ((sc = *str++) == '\0') return nullptr; + if ((sc = *str++) == '\0') { + return nullptr; + } } while (sc != c); } while (strncmp_constexpr(str, target, len) != 0); --str; } return str; } - -// ------------------------ -// Class Utilities -// ------------------------ - -#pragma GCC diagnostic push -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic ignored "-Wunused-function" -#endif - -int freeMemory(); - -#pragma GCC diagnostic pop - -// ------------------------ -// MarlinHAL Class -// ------------------------ - -class MarlinHAL { -public: - - // Earliest possible init, before setup() - MarlinHAL() {} - - static inline void init() {} // Called early in setup() - static inline void init_board() {} // Called less early in setup() - static void reboot(); // Restart the firmware from 0x0 - - static inline bool isr_state() { return true; } - static inline void isr_on() {} - static inline void isr_off() {} - - static inline void delay_ms(const int ms) { _delay_ms(ms); } - - // Tasks, called from idle() - static void idletask(); - - // Reset - static constexpr uint8_t reset_reason = RST_POWER_ON; - static inline uint8_t get_reset_source() { return reset_reason; } - static inline void clear_reset_source() {} - - // Free SRAM - static inline int freeMemory() { return ::freeMemory(); } - - // - // ADC Methods - // - - static uint8_t active_ch; - - // Called by Temperature::init once at startup - static void adc_init(); - - // Called by Temperature::init for each sensor at startup - static void adc_enable(const uint8_t ch); - - // Begin ADC sampling on the given channel - static void adc_start(const uint8_t ch); - - // Is the ADC ready for reading? - static bool adc_ready(); - - // The current value of the ADC register - static uint16_t adc_value(); - - /** - * Set the PWM duty cycle for the pin to the given value. - * No option to invert the duty cycle [default = false] - * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] - */ - static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { - analogWrite(pin, v); - } - -}; - -extern MarlinHAL hal; diff --git a/Marlin/src/HAL/NATIVE_SIM/timers.h b/Marlin/src/HAL/NATIVE_SIM/timers.h index be38d583b6..cedfdb62d6 100644 --- a/Marlin/src/HAL/NATIVE_SIM/timers.h +++ b/Marlin/src/HAL/NATIVE_SIM/timers.h @@ -87,5 +87,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num); void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); -#define HAL_timer_isr_prologue(T) NOOP -#define HAL_timer_isr_epilogue(T) NOOP +#define HAL_timer_isr_prologue(T) +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/SAMD51/HAL.cpp b/Marlin/src/HAL/SAMD51/HAL.cpp index f038325128..8baad31bc7 100644 --- a/Marlin/src/HAL/SAMD51/HAL.cpp +++ b/Marlin/src/HAL/SAMD51/HAL.cpp @@ -106,7 +106,7 @@ // Private Variables // ------------------------ -uint16_t MarlinHAL::adc_result; +uint16_t HAL_adc_result; #if ADC_IS_REQUIRED @@ -402,7 +402,7 @@ uint16_t MarlinHAL::adc_result; // ------------------------ // HAL initialization task -void MarlinHAL::init() { +void HAL_init() { TERN_(DMA_IS_REQUIRED, dma_init()); #if ENABLED(SDSUPPORT) #if SD_CONNECTION_IS(ONBOARD) && PIN_EXISTS(SD_DETECT) @@ -412,9 +412,17 @@ void MarlinHAL::init() { #endif } +// HAL idle task +/* +void HAL_idletask() { +} +*/ + +void HAL_clear_reset_source() { } + #pragma push_macro("WDT") #undef WDT // Required to be able to use '.bit.WDT'. Compiler wrongly replace struct field with WDT define -uint8_t MarlinHAL::get_reset_source() { +uint8_t HAL_get_reset_source() { RSTC_RCAUSE_Type resetCause; resetCause.reg = REG_RSTC_RCAUSE; @@ -428,7 +436,7 @@ uint8_t MarlinHAL::get_reset_source() { } #pragma pop_macro("WDT") -void MarlinHAL::reboot() { NVIC_SystemReset(); } +void HAL_reboot() { NVIC_SystemReset(); } extern "C" { void * _sbrk(int incr); @@ -446,7 +454,7 @@ int freeMemory() { // ADC // ------------------------ -void MarlinHAL::adc_init() { +void HAL_adc_init() { #if ADC_IS_REQUIRED memset(HAL_adc_results, 0xFF, sizeof(HAL_adc_results)); // Fill result with invalid values @@ -483,17 +491,17 @@ void MarlinHAL::adc_init() { #endif // ADC_IS_REQUIRED } -void MarlinHAL::adc_start(const pin_t pin) { +void HAL_adc_start_conversion(const uint8_t adc_pin) { #if ADC_IS_REQUIRED LOOP_L_N(pi, COUNT(adc_pins)) { - if (pin == adc_pins[pi]) { - adc_result = HAL_adc_results[pi]; + if (adc_pin == adc_pins[pi]) { + HAL_adc_result = HAL_adc_results[pi]; return; } } #endif - adc_result = 0xFFFF; + HAL_adc_result = 0xFFFF; } #endif // __SAMD51__ diff --git a/Marlin/src/HAL/SAMD51/HAL.h b/Marlin/src/HAL/SAMD51/HAL.h index a88ed9ba79..c262752a8d 100644 --- a/Marlin/src/HAL/SAMD51/HAL.h +++ b/Marlin/src/HAL/SAMD51/HAL.h @@ -89,29 +89,51 @@ typedef int8_t pin_t; -#define SHARED_SERVOS HAS_SERVOS // Use shared/servos.cpp -class Servo; -typedef Servo hal_servo_t; +#define SHARED_SERVOS HAS_SERVOS +#define HAL_SERVO_LIB Servo // // Interrupts // -#define CRITICAL_SECTION_START() const bool irqon = !__get_PRIMASK(); __disable_irq() -#define CRITICAL_SECTION_END() if (irqon) __enable_irq() +#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() +#define CRITICAL_SECTION_END() if (!primask) __enable_irq() +#define ISRS_ENABLED() (!__get_PRIMASK()) +#define ENABLE_ISRS() __enable_irq() +#define DISABLE_ISRS() __disable_irq() -#define cli() __disable_irq() // Disable interrupts -#define sei() __enable_irq() // Enable interrupts +#define cli() __disable_irq() // Disable interrupts +#define sei() __enable_irq() // Enable interrupts + +void HAL_clear_reset_source(); // clear reset reason +uint8_t HAL_get_reset_source(); // get reset reason + +void HAL_reboot(); // // ADC // +extern uint16_t HAL_adc_result; // Most recent ADC conversion + +#define HAL_ANALOG_SELECT(pin) + +void HAL_adc_init(); //#define HAL_ADC_FILTERED // Disable Marlin's oversampling. The HAL filters ADC values. #define HAL_ADC_VREF 3.3 #define HAL_ADC_RESOLUTION 10 // ... 12 +#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) +#define HAL_READ_ADC() HAL_adc_result +#define HAL_ADC_READY() true + +void HAL_adc_start_conversion(const uint8_t adc_pin); // -// Pin Mapping for M42, M43, M226 +// PWM +// +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + +// +// Pin Map // #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin @@ -120,92 +142,35 @@ typedef Servo hal_servo_t; // // Tone // +void toneInit(); void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration=0); void noTone(const pin_t _pin); -// ------------------------ -// Class Utilities -// ------------------------ +// Enable hooks into idle and setup for HAL +void HAL_init(); +/* +#define HAL_IDLETASK 1 +void HAL_idletask(); +*/ + +// +// Utility functions +// +FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } #pragma GCC diagnostic push #if GCC_VERSION <= 50000 #pragma GCC diagnostic ignored "-Wunused-function" #endif -#ifdef __cplusplus - extern "C" { -#endif - -char *dtostrf(double __val, signed char __width, unsigned char __prec, char *__s); - -extern "C" int freeMemory(); - -#ifdef __cplusplus - } -#endif +int freeMemory(); #pragma GCC diagnostic pop -// ------------------------ -// MarlinHAL Class -// ------------------------ - -class MarlinHAL { -public: - - // Earliest possible init, before setup() - MarlinHAL() {} - - static void init(); // Called early in setup() - static inline void init_board() {} // Called less early in setup() - static void reboot(); // Restart the firmware from 0x0 - - static inline bool isr_state() { return !__get_PRIMASK(); } - static inline void isr_on() { sei(); } - static inline void isr_off() { cli(); } - - static inline void delay_ms(const int ms) { delay(ms); } - - // Tasks, called from idle() - static inline void idletask() {} - - // Reset - static uint8_t get_reset_source(); - static inline void clear_reset_source() {} - - // Free SRAM - static inline int freeMemory() { return ::freeMemory(); } - - // - // ADC Methods - // - - static uint16_t adc_result; - - // Called by Temperature::init once at startup - static void adc_init(); - - // Called by Temperature::init for each sensor at startup - static inline void adc_enable(const uint8_t ch) {} - - // Begin ADC sampling on the given channel - static void adc_start(const pin_t pin); - - // Is the ADC ready for reading? - static inline bool adc_ready() { return true; } - - // The current value of the ADC register - static uint16_t adc_value() { return adc_result; } - - /** - * Set the PWM duty cycle for the pin to the given value. - * No option to invert the duty cycle [default = false] - * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] - */ - static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false) { - analogWrite(pin, v); +#ifdef __cplusplus + extern "C" { +#endif +char *dtostrf(double __val, signed char __width, unsigned char __prec, char *__s); +#ifdef __cplusplus } - -}; - -extern MarlinHAL hal; +#endif diff --git a/Marlin/src/HAL/STM32/HAL.cpp b/Marlin/src/HAL/STM32/HAL.cpp index 324a78316a..0920a72ec1 100644 --- a/Marlin/src/HAL/STM32/HAL.cpp +++ b/Marlin/src/HAL/STM32/HAL.cpp @@ -53,18 +53,16 @@ // Public Variables // ------------------------ -uint16_t MarlinHAL::adc_result; +uint16_t HAL_adc_result; // ------------------------ // Public functions // ------------------------ -#if ENABLED(POSTMORTEM_DEBUGGING) - extern void install_min_serial(); -#endif +TERN_(POSTMORTEM_DEBUGGING, extern void install_min_serial()); // HAL initialization task -void MarlinHAL::init() { +void HAL_init() { // Ensure F_CPU is a constant expression. // If the compiler breaks here, it means that delay code that should compute at compile time will not work. // So better safe than sorry here. @@ -105,7 +103,7 @@ void MarlinHAL::init() { } // HAL idle task -void MarlinHAL::idletask() { +void HAL_idletask() { #if HAS_SHARED_MEDIA // Stm32duino currently doesn't have a "loop/idle" method CDC_resume_receive(); @@ -113,9 +111,9 @@ void MarlinHAL::idletask() { #endif } -void MarlinHAL::reboot() { NVIC_SystemReset(); } +void HAL_clear_reset_source() { __HAL_RCC_CLEAR_RESET_FLAGS(); } -uint8_t MarlinHAL::get_reset_source() { +uint8_t HAL_get_reset_source() { return #ifdef RCC_FLAG_IWDGRST // Some sources may not exist... RESET != __HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) ? RST_WATCHDOG : @@ -139,14 +137,24 @@ uint8_t MarlinHAL::get_reset_source() { ; } -void MarlinHAL::clear_reset_source() { __HAL_RCC_CLEAR_RESET_FLAGS(); } +void HAL_reboot() { NVIC_SystemReset(); } + +void _delay_ms(const int delay_ms) { delay(delay_ms); } extern "C" { extern unsigned int _ebss; // end of bss section } +// ------------------------ +// ADC +// ------------------------ + +// TODO: Make sure this doesn't cause any delay +void HAL_adc_start_conversion(const uint8_t adc_pin) { HAL_adc_result = analogRead(adc_pin); } +uint16_t HAL_adc_get_result() { return HAL_adc_result; } + // Reset the system to initiate a firmware flash -WEAK void flashFirmware(const int16_t) { hal.reboot(); } +WEAK void flashFirmware(const int16_t) { HAL_reboot(); } // Maple Compatibility volatile uint32_t systick_uptime_millis = 0; diff --git a/Marlin/src/HAL/STM32/HAL.h b/Marlin/src/HAL/STM32/HAL.h index f9bf1c938a..adaf14223f 100644 --- a/Marlin/src/HAL/STM32/HAL.h +++ b/Marlin/src/HAL/STM32/HAL.h @@ -44,9 +44,9 @@ #define CPU_ST7920_DELAY_2 40 #define CPU_ST7920_DELAY_3 340 -// ------------------------ -// Serial ports -// ------------------------ +// +// Serial Ports +// #ifdef USBCON #include #include "../../core/serial_hook.h" @@ -115,14 +115,17 @@ #define analogInputToDigitalPin(p) (p) #endif -// -// Interrupts -// -#define CRITICAL_SECTION_START() const bool irqon = !__get_PRIMASK(); __disable_irq() -#define CRITICAL_SECTION_END() if (irqon) __enable_irq() +#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() +#define CRITICAL_SECTION_END() if (!primask) __enable_irq() +#define ISRS_ENABLED() (!__get_PRIMASK()) +#define ENABLE_ISRS() __enable_irq() +#define DISABLE_ISRS() __disable_irq() #define cli() __disable_irq() #define sei() __enable_irq() +// On AVR this is in math.h? +#define square(x) ((x)*(x)) + // ------------------------ // Types // ------------------------ @@ -133,15 +136,57 @@ typedef int16_t pin_t; #endif -class libServo; -typedef libServo hal_servo_t; +#define HAL_SERVO_LIB libServo #define PAUSE_SERVO_OUTPUT() libServo::pause_all_servos() #define RESUME_SERVO_OUTPUT() libServo::resume_all_servos() // ------------------------ -// ADC +// Public Variables // ------------------------ +// result of last ADC conversion +extern uint16_t HAL_adc_result; + +// ------------------------ +// Public functions +// ------------------------ + +// Memory related +#define __bss_end __bss_end__ + +// Enable hooks into setup for HAL +void HAL_init(); +#define HAL_IDLETASK 1 +void HAL_idletask(); + +// Clear reset reason +void HAL_clear_reset_source(); + +// Reset reason +uint8_t HAL_get_reset_source(); + +void HAL_reboot(); + +void _delay_ms(const int delay); + +extern "C" char* _sbrk(int incr); + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" + +static inline int freeMemory() { + volatile char top; + return &top - reinterpret_cast(_sbrk(0)); +} + +#pragma GCC diagnostic pop + +// +// ADC +// + +#define HAL_ANALOG_SELECT(pin) pinMode(pin, INPUT) + #ifdef ADC_RESOLUTION #define HAL_ADC_RESOLUTION ADC_RESOLUTION #else @@ -149,10 +194,16 @@ typedef libServo hal_servo_t; #endif #define HAL_ADC_VREF 3.3 +#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) +#define HAL_READ_ADC() HAL_adc_result +#define HAL_ADC_READY() true + +inline void HAL_adc_init() { analogReadResolution(HAL_ADC_RESOLUTION); } + +void HAL_adc_start_conversion(const uint8_t adc_pin); + +uint16_t HAL_adc_get_result(); -// -// Pin Mapping for M42, M43, M226 -// #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) @@ -175,93 +226,17 @@ extern volatile uint32_t systick_uptime_millis; #define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment -// ------------------------ -// Class Utilities -// ------------------------ +/** + * set_pwm_frequency + * Set the frequency of the timer corresponding to the provided pin + * All Timer PWM pins run at the same frequency + */ +void set_pwm_frequency(const pin_t pin, int f_desired); -// Memory related -#define __bss_end __bss_end__ - -extern "C" char* _sbrk(int incr); - -#pragma GCC diagnostic push -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic ignored "-Wunused-function" -#endif - -static inline int freeMemory() { - volatile char top; - return &top - reinterpret_cast(_sbrk(0)); -} - -#pragma GCC diagnostic pop - -// ------------------------ -// MarlinHAL Class -// ------------------------ - -class MarlinHAL { -public: - - // Earliest possible init, before setup() - MarlinHAL() {} - - static void init(); // Called early in setup() - static inline void init_board() {} // Called less early in setup() - static void reboot(); // Restart the firmware from 0x0 - - static inline bool isr_state() { return !__get_PRIMASK(); } - static inline void isr_on() { sei(); } - static inline void isr_off() { cli(); } - - static inline void delay_ms(const int ms) { delay(ms); } - - // Tasks, called from idle() - static void idletask(); - - // Reset - static uint8_t get_reset_source(); - static void clear_reset_source(); - - // Free SRAM - static inline int freeMemory() { return ::freeMemory(); } - - // - // ADC Methods - // - - static uint16_t adc_result; - - // Called by Temperature::init once at startup - static inline void adc_init() { - analogReadResolution(HAL_ADC_RESOLUTION); - } - - // Called by Temperature::init for each sensor at startup - static inline void adc_enable(const pin_t pin) { pinMode(pin, INPUT); } - - // Begin ADC sampling on the given channel - static void adc_start(const pin_t pin) { adc_result = analogRead(pin); } - - // Is the ADC ready for reading? - static inline bool adc_ready() { return true; } - - // The current value of the ADC register - static uint16_t adc_value() { return adc_result; } - - /** - * Set the PWM duty cycle for the pin to the given value. - * Optionally invert the duty cycle [default = false] - * Optionally change the maximum size of the provided value to enable finer PWM duty control [default = 255] - */ - static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); - - /** - * Set the frequency of the timer for the given pin. - * All Timer PWM pins run at the same frequency. - */ - static void set_pwm_frequency(const pin_t pin, int f_desired); - -}; - -extern MarlinHAL hal; +/** + * set_pwm_duty + * Set the PWM duty cycle of the provided pin to the provided value + * Optionally allows inverting the duty cycle [default = false] + * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] + */ +void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); diff --git a/Marlin/src/HAL/STM32/HAL_SPI.cpp b/Marlin/src/HAL/STM32/HAL_SPI.cpp index 40d320d5e8..8ee4761647 100644 --- a/Marlin/src/HAL/STM32/HAL_SPI.cpp +++ b/Marlin/src/HAL/STM32/HAL_SPI.cpp @@ -102,9 +102,9 @@ static SPISettings spiConfig; // Soft SPI receive byte uint8_t spiRec() { - hal.isr_off(); // No interrupts during byte receive + DISABLE_ISRS(); // No interrupts during byte receive const uint8_t data = HAL_SPI_STM32_SpiTransfer_Mode_3(0xFF); - hal.isr_on(); // Enable interrupts + ENABLE_ISRS(); // Enable interrupts return data; } @@ -116,9 +116,9 @@ static SPISettings spiConfig; // Soft SPI send byte void spiSend(uint8_t data) { - hal.isr_off(); // No interrupts during byte send + DISABLE_ISRS(); // No interrupts during byte send HAL_SPI_STM32_SpiTransfer_Mode_3(data); // Don't care what is received - hal.isr_on(); // Enable interrupts + ENABLE_ISRS(); // Enable interrupts } // Soft SPI send block diff --git a/Marlin/src/HAL/STM32/eeprom_flash.cpp b/Marlin/src/HAL/STM32/eeprom_flash.cpp index 7c8cc8dd21..252b057362 100644 --- a/Marlin/src/HAL/STM32/eeprom_flash.cpp +++ b/Marlin/src/HAL/STM32/eeprom_flash.cpp @@ -174,9 +174,9 @@ bool PersistentStore::access_finish() { UNLOCK_FLASH(); TERN_(HAS_PAUSE_SERVO_OUTPUT, PAUSE_SERVO_OUTPUT()); - hal.isr_off(); + DISABLE_ISRS(); status = HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError); - hal.isr_on(); + ENABLE_ISRS(); TERN_(HAS_PAUSE_SERVO_OUTPUT, RESUME_SERVO_OUTPUT()); if (status != HAL_OK) { DEBUG_ECHOLNPGM("HAL_FLASHEx_Erase=", status); @@ -229,9 +229,9 @@ bool PersistentStore::access_finish() { // output. Servo output still glitches with interrupts disabled, but recovers after the // erase. TERN_(HAS_PAUSE_SERVO_OUTPUT, PAUSE_SERVO_OUTPUT()); - hal.isr_off(); + DISABLE_ISRS(); eeprom_buffer_flush(); - hal.isr_on(); + ENABLE_ISRS(); TERN_(HAS_PAUSE_SERVO_OUTPUT, RESUME_SERVO_OUTPUT()); eeprom_data_written = false; diff --git a/Marlin/src/HAL/STM32/fast_pwm.cpp b/Marlin/src/HAL/STM32/fast_pwm.cpp index f6d0481c05..b1bea5ce20 100644 --- a/Marlin/src/HAL/STM32/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32/fast_pwm.cpp @@ -29,7 +29,7 @@ // Array to support sticky frequency sets per timer static uint16_t timer_freq[TIMER_NUM]; -void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { +void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer const PinName pin_name = digitalPinToPinName(pin); TIM_TypeDef * const Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); @@ -56,7 +56,7 @@ void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v if (previousMode != TIMER_OUTPUT_COMPARE_PWM1) HT->resume(); } -void MarlinHAL::set_pwm_frequency(const pin_t pin, int f_desired) { +void set_pwm_frequency(const pin_t pin, int f_desired) { if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer const PinName pin_name = digitalPinToPinName(pin); TIM_TypeDef * const Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance diff --git a/Marlin/src/HAL/STM32/pinsDebug.h b/Marlin/src/HAL/STM32/pinsDebug.h index a7f022a0b6..73d850fc43 100644 --- a/Marlin/src/HAL/STM32/pinsDebug.h +++ b/Marlin/src/HAL/STM32/pinsDebug.h @@ -115,6 +115,7 @@ const XrefInfo pin_xref[] PROGMEM = { #define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), DIGITAL_PIN_TO_ANALOG_PIN(pin)); SERIAL_ECHO(buffer); }while(0) #define PRINT_PORT(ANUM) port_print(ANUM) #define DIGITAL_PIN_TO_ANALOG_PIN(ANUM) -1 // will report analog pin number in the print port routine +#define GET_PIN_MAP_PIN_M43(Index) pin_xref[Index].Ard_num // x is a variable used to search pin_array #define GET_ARRAY_IS_DIGITAL(x) ((bool) pin_array[x].is_digital) @@ -122,11 +123,6 @@ const XrefInfo pin_xref[] PROGMEM = { #define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0) #define MULTI_NAME_PAD 33 // space needed to be pretty if not first name assigned to a pin -// -// Pin Mapping for M43 -// -#define GET_PIN_MAP_PIN_M43(Index) pin_xref[Index].Ard_num - #ifndef M43_NEVER_TOUCH #define _M43_NEVER_TOUCH(Index) (Index >= 9 && Index <= 12) // SERIAL/USB pins: PA9(TX) PA10(RX) PA11(USB_DM) PA12(USB_DP) #ifdef KILL_PIN diff --git a/Marlin/src/HAL/STM32/timers.h b/Marlin/src/HAL/STM32/timers.h index 6828998198..aad543229e 100644 --- a/Marlin/src/HAL/STM32/timers.h +++ b/Marlin/src/HAL/STM32/timers.h @@ -116,5 +116,5 @@ FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const ha } } -#define HAL_timer_isr_prologue(T) NOOP -#define HAL_timer_isr_epilogue(T) NOOP +#define HAL_timer_isr_prologue(T) +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/STM32F1/HAL.cpp b/Marlin/src/HAL/STM32F1/HAL.cpp index efc513cf94..f29b305361 100644 --- a/Marlin/src/HAL/STM32F1/HAL.cpp +++ b/Marlin/src/HAL/STM32F1/HAL.cpp @@ -79,7 +79,7 @@ #define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ // ------------------------ -// Serial ports +// Public Variables // ------------------------ #if defined(SERIAL_USB) && !HAS_SD_HOST_DRIVE @@ -112,21 +112,72 @@ #endif #endif +uint16_t HAL_adc_result; + // ------------------------ -// ADC +// Private Variables // ------------------------ +STM32ADC adc(ADC1); -uint16_t analogRead(pin_t pin) { - const bool is_analog = _GET_MODE(pin) == GPIO_INPUT_ANALOG; - return is_analog ? analogRead(uint8_t(pin)) : 0; -} - -// Wrapper to maple unprotected analogWrite -void analogWrite(pin_t pin, int pwm_val8) { - if (PWM_PIN(pin)) analogWrite(uint8_t(pin), pwm_val8); -} - -uint16_t MarlinHAL::adc_result; +const uint8_t adc_pins[] = { + #if HAS_TEMP_ADC_0 + TEMP_0_PIN, + #endif + #if HAS_TEMP_ADC_PROBE + TEMP_PROBE_PIN, + #endif + #if HAS_HEATED_BED + TEMP_BED_PIN, + #endif + #if HAS_TEMP_CHAMBER + TEMP_CHAMBER_PIN, + #endif + #if HAS_TEMP_COOLER + TEMP_COOLER_PIN, + #endif + #if HAS_TEMP_ADC_1 + TEMP_1_PIN, + #endif + #if HAS_TEMP_ADC_2 + TEMP_2_PIN, + #endif + #if HAS_TEMP_ADC_3 + TEMP_3_PIN, + #endif + #if HAS_TEMP_ADC_4 + TEMP_4_PIN, + #endif + #if HAS_TEMP_ADC_5 + TEMP_5_PIN, + #endif + #if HAS_TEMP_ADC_6 + TEMP_6_PIN, + #endif + #if HAS_TEMP_ADC_7 + TEMP_7_PIN, + #endif + #if ENABLED(FILAMENT_WIDTH_SENSOR) + FILWIDTH_PIN, + #endif + #if HAS_ADC_BUTTONS + ADC_KEYPAD_PIN, + #endif + #if HAS_JOY_ADC_X + JOY_X_PIN, + #endif + #if HAS_JOY_ADC_Y + JOY_Y_PIN, + #endif + #if HAS_JOY_ADC_Z + JOY_Z_PIN, + #endif + #if ENABLED(POWER_MONITOR_CURRENT) + POWER_MONITOR_CURRENT_PIN, + #endif + #if ENABLED(POWER_MONITOR_VOLTAGE) + POWER_MONITOR_VOLTAGE_PIN, + #endif +}; enum TempPinIndex : char { #if HAS_TEMP_ADC_0 @@ -194,16 +245,15 @@ uint16_t HAL_adc_results[ADC_PIN_COUNT]; // ------------------------ // Private functions // ------------------------ - static void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); // only values 0..7 are used + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ - reg_value = SCB->AIRCR; // read old register configuration - reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); // clear bits to change + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ reg_value = (reg_value | ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << 8)); // Insert write key & priority group + (PriorityGroupTmp << 8)); /* Insert write key & priority group */ SCB->AIRCR = reg_value; } @@ -211,8 +261,6 @@ static void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { // Public functions // ------------------------ -void flashFirmware(const int16_t) { hal.reboot(); } - // // Leave PA11/PA12 intact if USBSerial is not used // @@ -232,11 +280,7 @@ void flashFirmware(const int16_t) { hal.reboot(); } TERN_(POSTMORTEM_DEBUGGING, extern void install_min_serial()); -// ------------------------ -// MarlinHAL class -// ------------------------ - -void MarlinHAL::init() { +void HAL_init() { NVIC_SetPriorityGrouping(0x3); #if PIN_EXISTS(LED) OUT_WRITE(LED_PIN, LOW); @@ -255,7 +299,7 @@ void MarlinHAL::init() { } // HAL idle task -void MarlinHAL::idletask() { +void HAL_idletask() { #if HAS_SHARED_MEDIA // If Marlin is using the SD card we need to lock it to prevent access from // a PC via USB. @@ -270,7 +314,14 @@ void MarlinHAL::idletask() { #endif } -void MarlinHAL::reboot() { nvic_sys_reset(); } +void HAL_clear_reset_source() { } + +/** + * TODO: Check this and change or remove. + */ +uint8_t HAL_get_reset_source() { return RST_POWER_ON; } + +void _delay_ms(const int delay_ms) { delay(delay_ms); } extern "C" { extern unsigned int _ebss; // end of bss section @@ -304,70 +355,11 @@ extern "C" { } */ +// ------------------------ // ADC - +// ------------------------ // Init the AD in continuous capture mode -void MarlinHAL::adc_init() { - static const uint8_t adc_pins[] = { - #if HAS_TEMP_ADC_0 - TEMP_0_PIN, - #endif - #if HAS_TEMP_ADC_PROBE - TEMP_PROBE_PIN, - #endif - #if HAS_HEATED_BED - TEMP_BED_PIN, - #endif - #if HAS_TEMP_CHAMBER - TEMP_CHAMBER_PIN, - #endif - #if HAS_TEMP_COOLER - TEMP_COOLER_PIN, - #endif - #if HAS_TEMP_ADC_1 - TEMP_1_PIN, - #endif - #if HAS_TEMP_ADC_2 - TEMP_2_PIN, - #endif - #if HAS_TEMP_ADC_3 - TEMP_3_PIN, - #endif - #if HAS_TEMP_ADC_4 - TEMP_4_PIN, - #endif - #if HAS_TEMP_ADC_5 - TEMP_5_PIN, - #endif - #if HAS_TEMP_ADC_6 - TEMP_6_PIN, - #endif - #if HAS_TEMP_ADC_7 - TEMP_7_PIN, - #endif - #if ENABLED(FILAMENT_WIDTH_SENSOR) - FILWIDTH_PIN, - #endif - #if HAS_ADC_BUTTONS - ADC_KEYPAD_PIN, - #endif - #if HAS_JOY_ADC_X - JOY_X_PIN, - #endif - #if HAS_JOY_ADC_Y - JOY_Y_PIN, - #endif - #if HAS_JOY_ADC_Z - JOY_Z_PIN, - #endif - #if ENABLED(POWER_MONITOR_CURRENT) - POWER_MONITOR_CURRENT_PIN, - #endif - #if ENABLED(POWER_MONITOR_VOLTAGE) - POWER_MONITOR_VOLTAGE_PIN, - #endif - }; - static STM32ADC adc(ADC1); +void HAL_adc_init() { // configure the ADC adc.calibrate(); #if F_CPU > 72000000 @@ -382,10 +374,10 @@ void MarlinHAL::adc_init() { adc.startConversion(); } -void MarlinHAL::adc_start(const pin_t pin) { +void HAL_adc_start_conversion(const uint8_t adc_pin) { //TEMP_PINS pin_index; TempPinIndex pin_index; - switch (pin) { + switch (adc_pin) { default: return; #if HAS_TEMP_ADC_0 case TEMP_0_PIN: pin_index = TEMP_0; break; @@ -448,4 +440,20 @@ void MarlinHAL::adc_start(const pin_t pin) { HAL_adc_result = HAL_adc_results[(int)pin_index] >> (12 - HAL_ADC_RESOLUTION); // shift out unused bits } +uint16_t HAL_adc_get_result() { return HAL_adc_result; } + +uint16_t analogRead(pin_t pin) { + const bool is_analog = _GET_MODE(pin) == GPIO_INPUT_ANALOG; + return is_analog ? analogRead(uint8_t(pin)) : 0; +} + +// Wrapper to maple unprotected analogWrite +void analogWrite(pin_t pin, int pwm_val8) { + if (PWM_PIN(pin)) analogWrite(uint8_t(pin), pwm_val8); +} + +void HAL_reboot() { nvic_sys_reset(); } + +void flashFirmware(const int16_t) { HAL_reboot(); } + #endif // __STM32F1__ diff --git a/Marlin/src/HAL/STM32F1/HAL.h b/Marlin/src/HAL/STM32F1/HAL.h index 9b973c3ea4..153cfe8ac8 100644 --- a/Marlin/src/HAL/STM32F1/HAL.h +++ b/Marlin/src/HAL/STM32F1/HAL.h @@ -66,10 +66,6 @@ #endif #endif -// ------------------------ -// Serial ports -// ------------------------ - #ifdef SERIAL_USB typedef ForwardSerial1Class< USBSerial > DefaultSerial1; extern DefaultSerial1 MSerial0; @@ -145,6 +141,11 @@ #endif #endif +// Set interrupt grouping for this MCU +void HAL_init(); +#define HAL_IDLETASK 1 +void HAL_idletask(); + /** * TODO: review this to return 1 for pins that are not analog input */ @@ -157,7 +158,15 @@ #define NO_COMPILE_TIME_PWM #endif -// Reset Reason +#define CRITICAL_SECTION_START() uint32_t primask = __get_primask(); (void)__iCliRetVal() +#define CRITICAL_SECTION_END() if (!primask) (void)__iSeiRetVal() +#define ISRS_ENABLED() (!__get_primask()) +#define ENABLE_ISRS() ((void)__iSeiRetVal()) +#define DISABLE_ISRS() ((void)__iCliRetVal()) + +// On AVR this is in math.h? +#define square(x) ((x)*(x)) + #define RST_POWER_ON 1 #define RST_EXTERNAL 2 #define RST_BROWN_OUT 4 @@ -172,66 +181,46 @@ typedef int8_t pin_t; +// ------------------------ +// Public Variables +// ------------------------ + // Result of last ADC conversion extern uint16_t HAL_adc_result; // ------------------------ -// Interrupts +// Public functions // ------------------------ -#define CRITICAL_SECTION_START() const bool irqon = !__get_primask(); (void)__iCliRetVal() -#define CRITICAL_SECTION_END() if (!primask) (void)__iSeiRetVal() +// Disable interrupts #define cli() noInterrupts() + +// Enable interrupts #define sei() interrupts() -// ------------------------ -// ADC -// ------------------------ - -#ifdef ADC_RESOLUTION - #define HAL_ADC_RESOLUTION ADC_RESOLUTION -#else - #define HAL_ADC_RESOLUTION 12 -#endif - -#define HAL_ADC_VREF 3.3 - -uint16_t analogRead(pin_t pin); // need HAL_ANALOG_SELECT() first -void analogWrite(pin_t pin, int pwm_val8); // PWM only! mul by 257 in maple!? - -// -// Pin Mapping for M42, M43, M226 -// -#define GET_PIN_MAP_PIN(index) index -#define GET_PIN_MAP_INDEX(pin) pin -#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) - -#define JTAG_DISABLE() afio_cfg_debug_ports(AFIO_DEBUG_SW_ONLY) -#define JTAGSWD_DISABLE() afio_cfg_debug_ports(AFIO_DEBUG_NONE) - -#define PLATFORM_M997_SUPPORT -void flashFirmware(const int16_t); - -#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment -#ifndef PWM_FREQUENCY - #define PWM_FREQUENCY 1000 // Default PWM Frequency -#endif - -// ------------------------ -// Class Utilities -// ------------------------ - // Memory related #define __bss_end __bss_end__ -void _delay_ms(const int ms); +// Clear reset reason +void HAL_clear_reset_source(); -extern "C" char* _sbrk(int incr); +// Reset reason +uint8_t HAL_get_reset_source(); + +void HAL_reboot(); + +void _delay_ms(const int delay); #pragma GCC diagnostic push -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic ignored "-Wunused-function" -#endif +#pragma GCC diagnostic ignored "-Wunused-function" + +/* +extern "C" { + int freeMemory(); +} +*/ + +extern "C" char* _sbrk(int incr); static inline int freeMemory() { volatile char top; @@ -240,71 +229,58 @@ static inline int freeMemory() { #pragma GCC diagnostic pop -// ------------------------ -// MarlinHAL Class -// ------------------------ +// +// ADC +// -class MarlinHAL { -public: +#define HAL_ANALOG_SELECT(pin) pinMode(pin, INPUT_ANALOG); - // Earliest possible init, before setup() - MarlinHAL() {} +void HAL_adc_init(); - static void init(); // Called early in setup() - static inline void init_board() {} // Called less early in setup() - static void reboot(); // Restart the firmware from 0x0 +#ifdef ADC_RESOLUTION + #define HAL_ADC_RESOLUTION ADC_RESOLUTION +#else + #define HAL_ADC_RESOLUTION 12 +#endif - static inline bool isr_state() { return !__get_primask(); } - static inline void isr_on() { ((void)__iSeiRetVal()); } - static inline void isr_off() { ((void)__iCliRetVal()); } +#define HAL_ADC_VREF 3.3 +#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) +#define HAL_READ_ADC() HAL_adc_result +#define HAL_ADC_READY() true - static inline void delay_ms(const int ms) { delay(ms); } +void HAL_adc_start_conversion(const uint8_t adc_pin); +uint16_t HAL_adc_get_result(); - // Tasks, called from idle() - static void idletask(); +uint16_t analogRead(pin_t pin); // need HAL_ANALOG_SELECT() first +void analogWrite(pin_t pin, int pwm_val8); // PWM only! mul by 257 in maple!? - // Reset - static inline uint8_t get_reset_source() { return RST_POWER_ON; } - static inline void clear_reset_source() {} +#define GET_PIN_MAP_PIN(index) index +#define GET_PIN_MAP_INDEX(pin) pin +#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) - // Free SRAM - static inline int freeMemory() { return ::freeMemory(); } +#define JTAG_DISABLE() afio_cfg_debug_ports(AFIO_DEBUG_SW_ONLY) +#define JTAGSWD_DISABLE() afio_cfg_debug_ports(AFIO_DEBUG_NONE) - // - // ADC Methods - // +#define PLATFORM_M997_SUPPORT +void flashFirmware(const int16_t); - static uint16_t adc_result; +#ifndef PWM_FREQUENCY + #define PWM_FREQUENCY 1000 // Default PWM Frequency +#endif +#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment - // Called by Temperature::init once at startup - static void adc_init(); +/** + * set_pwm_frequency + * Set the frequency of the timer corresponding to the provided pin + * All Timer PWM pins run at the same frequency + */ +void set_pwm_frequency(const pin_t pin, int f_desired); - // Called by Temperature::init for each sensor at startup - static inline void adc_enable(const pin_t pin) { pinMode(pin, INPUT_ANALOG); } - - // Begin ADC sampling on the given channel - static void adc_start(const pin_t pin); - - // Is the ADC ready for reading? - static inline bool adc_ready() { return true; } - - // The current value of the ADC register - static uint16_t adc_value() { return adc_result; } - - /** - * Set the PWM duty cycle for the pin to the given value. - * Optionally invert the duty cycle [default = false] - * Optionally change the maximum size of the provided value to enable finer PWM duty control [default = 255] - * The timer must be pre-configured with set_pwm_frequency() if the default frequency is not desired. - */ - static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false); - - /** - * Set the frequency of the timer for the given pin. - * All Timer PWM pins run at the same frequency. - */ - static void set_pwm_frequency(const pin_t pin, int f_desired); - -}; - -extern MarlinHAL hal; +/** + * set_pwm_duty + * Set the PWM duty cycle of the provided pin to the provided value + * Optionally allows inverting the duty cycle [default = false] + * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] + * The timer must be pre-configured with set_pwm_frequency() if the default frequency is not desired. + */ +void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); diff --git a/Marlin/src/HAL/STM32F1/Servo.h b/Marlin/src/HAL/STM32F1/Servo.h index 745a1c93f0..b6143de81d 100644 --- a/Marlin/src/HAL/STM32F1/Servo.h +++ b/Marlin/src/HAL/STM32F1/Servo.h @@ -35,8 +35,7 @@ #define SERVO_DEFAULT_MIN_ANGLE 0 #define SERVO_DEFAULT_MAX_ANGLE 180 -class libServo; -typedef libServo hal_servo_t; +#define HAL_SERVO_LIB libServo class libServo { public: diff --git a/Marlin/src/HAL/STM32F1/fast_pwm.cpp b/Marlin/src/HAL/STM32F1/fast_pwm.cpp index 11a1a10712..98d56bc5e9 100644 --- a/Marlin/src/HAL/STM32F1/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32F1/fast_pwm.cpp @@ -21,9 +21,11 @@ */ #ifdef __STM32F1__ -#include "../../inc/MarlinConfig.h" +#include "../../inc/MarlinConfigPre.h" #include +#include "HAL.h" +#include "timers.h" #define NR_TIMERS TERN(STM32_XL_DENSITY, 14, 8) // Maple timers, 14 for STM32_XL_DENSITY (F/G chips), 8 for HIGH density (C D E) @@ -36,7 +38,7 @@ inline uint8_t timer_and_index_for_pin(const pin_t pin, timer_dev **timer_ptr) { return 0; } -void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { +void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { if (!PWM_PIN(pin)) return; timer_dev *timer; UNUSED(timer); @@ -49,7 +51,7 @@ void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v timer_set_mode(timer, channel, TIMER_PWM); // PWM Output Mode } -void MarlinHAL::set_pwm_frequency(const pin_t pin, int f_desired) { +void set_pwm_frequency(const pin_t pin, int f_desired) { if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer timer_dev *timer; UNUSED(timer); diff --git a/Marlin/src/HAL/STM32F1/timers.h b/Marlin/src/HAL/STM32F1/timers.h index 0cd807fc84..f9ab6d13d3 100644 --- a/Marlin/src/HAL/STM32F1/timers.h +++ b/Marlin/src/HAL/STM32F1/timers.h @@ -188,7 +188,7 @@ FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { } } -#define HAL_timer_isr_epilogue(T) NOOP +#define HAL_timer_isr_epilogue(T) // No command is available in framework to turn off ARPE bit, which is turned on by default in libmaple. // Needed here to reset ARPE=0 for stepper timer diff --git a/Marlin/src/HAL/TEENSY31_32/HAL.cpp b/Marlin/src/HAL/TEENSY31_32/HAL.cpp index b923ab77b1..f08cf799e9 100644 --- a/Marlin/src/HAL/TEENSY31_32/HAL.cpp +++ b/Marlin/src/HAL/TEENSY31_32/HAL.cpp @@ -31,10 +31,6 @@ #include -// ------------------------ -// Serial ports -// ------------------------ - #define _IMPLEMENT_SERIAL(X) DefaultSerial##X MSerial##X(false, Serial##X) #define IMPLEMENT_SERIAL(X) _IMPLEMENT_SERIAL(X) #if WITHIN(SERIAL_PORT, 0, 3) @@ -44,9 +40,45 @@ #endif USBSerialType USBSerial(false, SerialUSB); -// ------------------------ -// Class Utilities -// ------------------------ +uint16_t HAL_adc_result; + +static const uint8_t pin2sc1a[] = { + 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 0, 19, 3, 31, // 0-13, we treat them as A0-A13 + 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 (A0-A9) + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, // 24-33 + 0+64, 19+64, 3+64, 31+64, // 34-37 (A10-A13) + 26, 22, 23, 27, 29, 30 // 38-43: temp. sensor, VREF_OUT, A14, bandgap, VREFH, VREFL. A14 isn't connected to anything in Teensy 3.0. +}; + +/* + // disable interrupts + void cli() { noInterrupts(); } + + // enable interrupts + void sei() { interrupts(); } +*/ + +void HAL_adc_init() { + analog_init(); + while (ADC0_SC3 & ADC_SC3_CAL) {}; // Wait for calibration to finish + NVIC_ENABLE_IRQ(IRQ_FTM1); +} + +void HAL_clear_reset_source() { } + +uint8_t HAL_get_reset_source() { + switch (RCM_SRS0) { + case 128: return RST_POWER_ON; break; + case 64: return RST_EXTERNAL; break; + case 32: return RST_WATCHDOG; break; + // case 8: return RST_LOSS_OF_LOCK; break; + // case 4: return RST_LOSS_OF_CLOCK; break; + // case 2: return RST_LOW_VOLTAGE; break; + } + return 0; +} + +void HAL_reboot() { _reboot_Teensyduino_(); } extern "C" { extern char __bss_end; @@ -63,43 +95,8 @@ extern "C" { } } -// ------------------------ -// MarlinHAL Class -// ------------------------ +void HAL_adc_start_conversion(const uint8_t adc_pin) { ADC0_SC1A = pin2sc1a[adc_pin]; } -void MarlinHAL::reboot() { _reboot_Teensyduino_(); } - -uint8_t MarlinHAL::get_reset_source() { - switch (RCM_SRS0) { - case 128: return RST_POWER_ON; break; - case 64: return RST_EXTERNAL; break; - case 32: return RST_WATCHDOG; break; - // case 8: return RST_LOSS_OF_LOCK; break; - // case 4: return RST_LOSS_OF_CLOCK; break; - // case 2: return RST_LOW_VOLTAGE; break; - } - return 0; -} - -// ADC - -void MarlinHAL::adc_init() { - analog_init(); - while (ADC0_SC3 & ADC_SC3_CAL) {}; // Wait for calibration to finish - NVIC_ENABLE_IRQ(IRQ_FTM1); -} - -void MarlinHAL::adc_start(const pin_t pin) { - static const uint8_t pin2sc1a[] = { - 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 0, 19, 3, 31, // 0-13, we treat them as A0-A13 - 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 (A0-A9) - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, // 24-33 - 0+64, 19+64, 3+64, 31+64, // 34-37 (A10-A13) - 26, 22, 23, 27, 29, 30 // 38-43: temp. sensor, VREF_OUT, A14, bandgap, VREFH, VREFL. A14 isn't connected to anything in Teensy 3.0. - }; - ADC0_SC1A = pin2sc1a[pin]; -} - -uint16_t MarlinHAL::adc_value() { return ADC0_RA; } +uint16_t HAL_adc_get_result() { return ADC0_RA; } #endif // __MK20DX256__ diff --git a/Marlin/src/HAL/TEENSY31_32/HAL.h b/Marlin/src/HAL/TEENSY31_32/HAL.h index 14f463708b..61d8b34604 100644 --- a/Marlin/src/HAL/TEENSY31_32/HAL.h +++ b/Marlin/src/HAL/TEENSY31_32/HAL.h @@ -36,9 +36,12 @@ #include -// ------------------------ -// Defines -// ------------------------ +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 + +//#undef MOTHERBOARD +//#define MOTHERBOARD BOARD_TEENSY31_32 #define IS_32BIT_TEENSY 1 #define IS_TEENSY_31_32 1 @@ -46,14 +49,6 @@ #define IS_TEENSY32 1 #endif -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 - -// ------------------------ -// Serial ports -// ------------------------ - #include "../../core/serial_hook.h" #define Serial0 Serial @@ -77,44 +72,31 @@ extern USBSerialType USBSerial; #error "The required SERIAL_PORT must be from 0 to 3, or -1 for Native USB." #endif -// ------------------------ -// Types -// ------------------------ - -class libServo; -typedef libServo hal_servo_t; +#define HAL_SERVO_LIB libServo typedef int8_t pin_t; -// ------------------------ -// Interrupts -// ------------------------ - -uint32_t __get_PRIMASK(void); // CMSIS -#define CRITICAL_SECTION_START() const bool irqon = !__get_PRIMASK(); __disable_irq() -#define CRITICAL_SECTION_END() if (irqon) __enable_irq() - -// ------------------------ -// ADC -// ------------------------ - #ifndef analogInputToDigitalPin #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1) #endif -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 +#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() +#define CRITICAL_SECTION_END() if (!primask) __enable_irq() +#define ISRS_ENABLED() (!__get_PRIMASK()) +#define ENABLE_ISRS() __enable_irq() +#define DISABLE_ISRS() __disable_irq() -// -// Pin Mapping for M42, M43, M226 -// -#define GET_PIN_MAP_PIN(index) index -#define GET_PIN_MAP_INDEX(pin) pin -#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) +inline void HAL_init() {} -// ------------------------ -// Class Utilities -// ------------------------ +// Clear the reset reason +void HAL_clear_reset_source(); + +// Get the reason for the reset +uint8_t HAL_get_reset_source(); + +void HAL_reboot(); + +FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } #pragma GCC diagnostic push #if GCC_VERSION <= 50000 @@ -125,64 +107,27 @@ extern "C" int freeMemory(); #pragma GCC diagnostic pop -// ------------------------ -// MarlinHAL Class -// ------------------------ +// ADC -class MarlinHAL { -public: +void HAL_adc_init(); - // Earliest possible init, before setup() - MarlinHAL() {} +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 +#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) +#define HAL_READ_ADC() HAL_adc_get_result() +#define HAL_ADC_READY() true - static inline void init() {} // Called early in setup() - static inline void init_board() {} // Called less early in setup() - static void reboot(); // Restart the firmware from 0x0 +#define HAL_ANALOG_SELECT(pin) - static inline bool isr_state() { return !__get_PRIMASK(); } - static inline void isr_on() { __enable_irq(); } - static inline void isr_off() { __disable_irq(); } +void HAL_adc_start_conversion(const uint8_t adc_pin); +uint16_t HAL_adc_get_result(); - static inline void delay_ms(const int ms) { delay(ms); } +// PWM - // Tasks, called from idle() - static inline void idletask() {} +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } - // Reset - static uint8_t get_reset_source(); - static inline void clear_reset_source() {} +// Pin Map - // Free SRAM - static inline int freeMemory() { return ::freeMemory(); } - - // - // ADC Methods - // - - // Called by Temperature::init once at startup - static void adc_init(); - - // Called by Temperature::init for each sensor at startup - static inline void adc_enable(const pin_t ch) {} - - // Begin ADC sampling on the given channel - static void adc_start(const pin_t ch); - - // Is the ADC ready for reading? - static inline bool adc_ready() { return true; } - - // The current value of the ADC register - static uint16_t adc_value(); - - /** - * Set the PWM duty cycle for the pin to the given value. - * No option to invert the duty cycle [default = false] - * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] - */ - static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { - analogWrite(pin, v); - } - -}; - -extern MarlinHAL hal; +#define GET_PIN_MAP_PIN(index) index +#define GET_PIN_MAP_INDEX(pin) pin +#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) diff --git a/Marlin/src/HAL/TEENSY31_32/timers.h b/Marlin/src/HAL/TEENSY31_32/timers.h index 9fcbb6f232..3b073d63ab 100644 --- a/Marlin/src/HAL/TEENSY31_32/timers.h +++ b/Marlin/src/HAL/TEENSY31_32/timers.h @@ -110,4 +110,4 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); void HAL_timer_isr_prologue(const uint8_t timer_num); -#define HAL_timer_isr_epilogue(T) NOOP +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/TEENSY35_36/HAL.cpp b/Marlin/src/HAL/TEENSY35_36/HAL.cpp index 54a5ad3855..046c00b56e 100644 --- a/Marlin/src/HAL/TEENSY35_36/HAL.cpp +++ b/Marlin/src/HAL/TEENSY35_36/HAL.cpp @@ -31,10 +31,6 @@ #include -// ------------------------ -// Serial ports -// ------------------------ - #define _IMPLEMENT_SERIAL(X) DefaultSerial##X MSerial##X(false, Serial##X) #define IMPLEMENT_SERIAL(X) _IMPLEMENT_SERIAL(X) #if WITHIN(SERIAL_PORT, 0, 3) @@ -43,9 +39,54 @@ USBSerialType USBSerial(false, SerialUSB); -// ------------------------ -// Class Utilities -// ------------------------ +uint16_t HAL_adc_result, HAL_adc_select; + +static const uint8_t pin2sc1a[] = { + 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 3, 19+128, 14+128, 15+128, // 0-13 -> A0-A13 + 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 are A0-A9 + 255, 255, 255, 255, 255, 255, 255, // 24-30 are digital only + 14+128, 15+128, 17, 18, 4+128, 5+128, 6+128, 7+128, 17+128, // 31-39 are A12-A20 + 255, 255, 255, 255, 255, 255, 255, 255, 255, // 40-48 are digital only + 10+128, 11+128, // 49-50 are A23-A24 + 255, 255, 255, 255, 255, 255, 255, // 51-57 are digital only + 255, 255, 255, 255, 255, 255, // 58-63 (sd card pins) are digital only + 3, 19+128, // 64-65 are A10-A11 + 23, 23+128,// 66-67 are A21-A22 (DAC pins) + 1, 1+128, // 68-69 are A25-A26 (unused USB host port on Teensy 3.5) + 26, // 70 is Temperature Sensor + 18+128 // 71 is Vref +}; + +/* + // disable interrupts + void cli() { noInterrupts(); } + + // enable interrupts + void sei() { interrupts(); } +*/ + +void HAL_adc_init() { + analog_init(); + while (ADC0_SC3 & ADC_SC3_CAL) {}; // Wait for calibration to finish + while (ADC1_SC3 & ADC_SC3_CAL) {}; // Wait for calibration to finish + NVIC_ENABLE_IRQ(IRQ_FTM1); +} + +void HAL_clear_reset_source() { } + +uint8_t HAL_get_reset_source() { + switch (RCM_SRS0) { + case 128: return RST_POWER_ON; break; + case 64: return RST_EXTERNAL; break; + case 32: return RST_WATCHDOG; break; + // case 8: return RST_LOSS_OF_LOCK; break; + // case 4: return RST_LOSS_OF_CLOCK; break; + // case 2: return RST_LOW_VOLTAGE; break; + } + return 0; +} + +void HAL_reboot() { _reboot_Teensyduino_(); } extern "C" { extern char __bss_end; @@ -62,69 +103,24 @@ extern "C" { } } -// ------------------------ -// MarlinHAL Class -// ------------------------ - -void MarlinHAL::reboot() { _reboot_Teensyduino_(); } - -// Reset - -uint8_t MarlinHAL::get_reset_source() { - switch (RCM_SRS0) { - case 128: return RST_POWER_ON; break; - case 64: return RST_EXTERNAL; break; - case 32: return RST_WATCHDOG; break; - // case 8: return RST_LOSS_OF_LOCK; break; - // case 4: return RST_LOSS_OF_CLOCK; break; - // case 2: return RST_LOW_VOLTAGE; break; - } - return 0; -} - -// ADC - -int8_t MarlinHAL::adc_select; - -void MarlinHAL::adc_init() { - analog_init(); - while (ADC0_SC3 & ADC_SC3_CAL) { /* Wait for calibration to finish */ } - while (ADC1_SC3 & ADC_SC3_CAL) { /* Wait for calibration to finish */ } - NVIC_ENABLE_IRQ(IRQ_FTM1); -} - -void MarlinHAL::adc_start(const pin_t adc_pin) { - static const uint8_t pin2sc1a[] = { - 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 3, 19+128, 14+128, 15+128, // 0-13 -> A0-A13 - 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 are A0-A9 - 255, 255, 255, 255, 255, 255, 255, // 24-30 are digital only - 14+128, 15+128, 17, 18, 4+128, 5+128, 6+128, 7+128, 17+128, // 31-39 are A12-A20 - 255, 255, 255, 255, 255, 255, 255, 255, 255, // 40-48 are digital only - 10+128, 11+128, // 49-50 are A23-A24 - 255, 255, 255, 255, 255, 255, 255, // 51-57 are digital only - 255, 255, 255, 255, 255, 255, // 58-63 (sd card pins) are digital only - 3, 19+128, // 64-65 are A10-A11 - 23, 23+128,// 66-67 are A21-A22 (DAC pins) - 1, 1+128, // 68-69 are A25-A26 (unused USB host port on Teensy 3.5) - 26, // 70 is Temperature Sensor - 18+128 // 71 is Vref - }; +void HAL_adc_start_conversion(const uint8_t adc_pin) { const uint16_t pin = pin2sc1a[adc_pin]; if (pin == 0xFF) { - adc_select = -1; // Digital only + // Digital only + HAL_adc_select = -1; } else if (pin & 0x80) { - adc_select = 1; + HAL_adc_select = 1; ADC1_SC1A = pin & 0x7F; } else { - adc_select = 0; + HAL_adc_select = 0; ADC0_SC1A = pin; } } -uint16_t MarlinHAL::adc_value() { - switch (adc_select) { +uint16_t HAL_adc_get_result() { + switch (HAL_adc_select) { case 0: return ADC0_RA; case 1: return ADC1_RA; } diff --git a/Marlin/src/HAL/TEENSY35_36/HAL.h b/Marlin/src/HAL/TEENSY35_36/HAL.h index 1cc465c4bb..892eb2d3c5 100644 --- a/Marlin/src/HAL/TEENSY35_36/HAL.h +++ b/Marlin/src/HAL/TEENSY35_36/HAL.h @@ -37,6 +37,10 @@ #include #include +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 + // ------------------------ // Defines // ------------------------ @@ -49,17 +53,6 @@ #define IS_TEENSY35 1 #endif -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 - -#undef sq -#define sq(x) ((x)*(x)) - -// ------------------------ -// Serial ports -// ------------------------ - #include "../../core/serial_hook.h" #define Serial0 Serial @@ -83,43 +76,34 @@ extern USBSerialType USBSerial; #error "SERIAL_PORT must be from 0 to 3, or -1 for Native USB." #endif -// ------------------------ -// Types -// ------------------------ - -class libServo; -typedef libServo hal_servo_t; +#define HAL_SERVO_LIB libServo typedef int8_t pin_t; -// ------------------------ -// Interrupts -// ------------------------ - -#define CRITICAL_SECTION_START() const bool irqon = !__get_primask(); __disable_irq() -#define CRITICAL_SECTION_END() if (irqon) __enable_irq() - -// ------------------------ -// ADC -// ------------------------ - #ifndef analogInputToDigitalPin #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1) #endif -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 +#define CRITICAL_SECTION_START() uint32_t primask = __get_primask(); __disable_irq() +#define CRITICAL_SECTION_END() if (!primask) __enable_irq() +#define ISRS_ENABLED() (!__get_primask()) +#define ENABLE_ISRS() __enable_irq() +#define DISABLE_ISRS() __disable_irq() -// -// Pin Mapping for M42, M43, M226 -// -#define GET_PIN_MAP_PIN(index) index -#define GET_PIN_MAP_INDEX(pin) pin -#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) +#undef sq +#define sq(x) ((x)*(x)) -// ------------------------ -// Class Utilities -// ------------------------ +inline void HAL_init() {} + +// Clear reset reason +void HAL_clear_reset_source(); + +// Reset reason +uint8_t HAL_get_reset_source(); + +void HAL_reboot(); + +FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } #pragma GCC diagnostic push #if GCC_VERSION <= 50000 @@ -130,66 +114,27 @@ extern "C" int freeMemory(); #pragma GCC diagnostic pop -// ------------------------ -// MarlinHAL Class -// ------------------------ +// ADC -class MarlinHAL { -public: +void HAL_adc_init(); - // Earliest possible init, before setup() - MarlinHAL() {} +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 +#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) +#define HAL_READ_ADC() HAL_adc_get_result() +#define HAL_ADC_READY() true - static inline void init() {} // Called early in setup() - static inline void init_board() {} // Called less early in setup() - static void reboot(); // Restart the firmware from 0x0 +#define HAL_ANALOG_SELECT(pin) - static inline bool isr_state() { return true; } - static inline void isr_on() { __enable_irq(); } - static inline void isr_off() { __disable_irq(); } +void HAL_adc_start_conversion(const uint8_t adc_pin); +uint16_t HAL_adc_get_result(); - static inline void delay_ms(const int ms) { delay(ms); } +// PWM - // Tasks, called from idle() - static inline void idletask() {} +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } - // Reset - static uint8_t get_reset_source(); - static inline void clear_reset_source() {} +// Pin Map - // Free SRAM - static inline int freeMemory() { return ::freeMemory(); } - - // - // ADC Methods - // - - static int8_t adc_select; - - // Called by Temperature::init once at startup - static void adc_init(); - - // Called by Temperature::init for each sensor at startup - static inline void adc_enable(const pin_t) {} - - // Begin ADC sampling on the given channel - static void adc_start(const pin_t pin); - - // Is the ADC ready for reading? - static inline bool adc_ready() { return true; } - - // The current value of the ADC register - static uint16_t adc_value(); - - /** - * Set the PWM duty cycle for the pin to the given value. - * No option to invert the duty cycle [default = false] - * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] - */ - static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { - analogWrite(pin, v); - } - -}; - -extern MarlinHAL hal; +#define GET_PIN_MAP_PIN(index) index +#define GET_PIN_MAP_INDEX(pin) pin +#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) diff --git a/Marlin/src/HAL/TEENSY35_36/timers.h b/Marlin/src/HAL/TEENSY35_36/timers.h index 8af79d7392..6c342bbe0d 100644 --- a/Marlin/src/HAL/TEENSY35_36/timers.h +++ b/Marlin/src/HAL/TEENSY35_36/timers.h @@ -109,4 +109,4 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); void HAL_timer_isr_prologue(const uint8_t timer_num); -#define HAL_timer_isr_epilogue(T) NOOP +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/TEENSY40_41/HAL.cpp b/Marlin/src/HAL/TEENSY40_41/HAL.cpp index 68bd38f72f..270bee0dc9 100644 --- a/Marlin/src/HAL/TEENSY40_41/HAL.cpp +++ b/Marlin/src/HAL/TEENSY40_41/HAL.cpp @@ -33,10 +33,6 @@ #include "timers.h" #include -// ------------------------ -// Serial ports -// ------------------------ - #define _IMPLEMENT_SERIAL(X) DefaultSerial##X MSerial##X(false, Serial##X) #define IMPLEMENT_SERIAL(X) _IMPLEMENT_SERIAL(X) #if WITHIN(SERIAL_PORT, 0, 3) @@ -44,42 +40,75 @@ #endif USBSerialType USBSerial(false, SerialUSB); -// ------------------------ -// Class Utilities -// ------------------------ +uint16_t HAL_adc_result, HAL_adc_select; -#define __bss_end _ebss +static const uint8_t pin2sc1a[] = { + 0x07, // 0/A0 AD_B1_02 + 0x08, // 1/A1 AD_B1_03 + 0x0C, // 2/A2 AD_B1_07 + 0x0B, // 3/A3 AD_B1_06 + 0x06, // 4/A4 AD_B1_01 + 0x05, // 5/A5 AD_B1_00 + 0x0F, // 6/A6 AD_B1_10 + 0x00, // 7/A7 AD_B1_11 + 0x0D, // 8/A8 AD_B1_08 + 0x0E, // 9/A9 AD_B1_09 + 0x01, // 24/A10 AD_B0_12 + 0x02, // 25/A11 AD_B0_13 + 0x83, // 26/A12 AD_B1_14 - only on ADC2, 3 + 0x84, // 27/A13 AD_B1_15 - only on ADC2, 4 + 0x07, // 14/A0 AD_B1_02 + 0x08, // 15/A1 AD_B1_03 + 0x0C, // 16/A2 AD_B1_07 + 0x0B, // 17/A3 AD_B1_06 + 0x06, // 18/A4 AD_B1_01 + 0x05, // 19/A5 AD_B1_00 + 0x0F, // 20/A6 AD_B1_10 + 0x00, // 21/A7 AD_B1_11 + 0x0D, // 22/A8 AD_B1_08 + 0x0E, // 23/A9 AD_B1_09 + 0x01, // 24/A10 AD_B0_12 + 0x02, // 25/A11 AD_B0_13 + 0x83, // 26/A12 AD_B1_14 - only on ADC2, 3 + 0x84, // 27/A13 AD_B1_15 - only on ADC2, 4 + #ifdef ARDUINO_TEENSY41 + 0xFF, // 28 + 0xFF, // 29 + 0xFF, // 30 + 0xFF, // 31 + 0xFF, // 32 + 0xFF, // 33 + 0xFF, // 34 + 0xFF, // 35 + 0xFF, // 36 + 0xFF, // 37 + 0x81, // 38/A14 AD_B1_12 - only on ADC2, 1 + 0x82, // 39/A15 AD_B1_13 - only on ADC2, 2 + 0x09, // 40/A16 AD_B1_04 + 0x0A, // 41/A17 AD_B1_05 + #endif +}; -extern "C" { - extern char __bss_end; - extern char __heap_start; - extern void* __brkval; +/* +// disable interrupts +void cli() { noInterrupts(); } - // Doesn't work on Teensy 4.x - uint32_t freeMemory() { - uint32_t free_memory; - free_memory = ((uint32_t)&free_memory) - (((uint32_t)__brkval) ?: ((uint32_t)&__bss_end)); - return free_memory; - } +// enable interrupts +void sei() { interrupts(); } +*/ + +void HAL_adc_init() { + analog_init(); + while (ADC1_GC & ADC_GC_CAL) ; + while (ADC2_GC & ADC_GC_CAL) ; } -// ------------------------ -// FastIO -// ------------------------ - -bool is_output(pin_t pin) { - const struct digital_pin_bitband_and_config_table_struct *p; - p = digital_pin_to_info_PGM + pin; - return (*(p->reg + 1) & p->mask); +void HAL_clear_reset_source() { + uint32_t reset_source = SRC_SRSR; + SRC_SRSR = reset_source; } -// ------------------------ -// MarlinHAL Class -// ------------------------ - -void MarlinHAL::reboot() { _reboot_Teensyduino_(); } - -uint8_t MarlinHAL::get_reset_source() { +uint8_t HAL_get_reset_source() { switch (SRC_SRSR & 0xFF) { case 1: return RST_POWER_ON; break; case 2: return RST_SOFTWARE; break; @@ -92,92 +121,57 @@ uint8_t MarlinHAL::get_reset_source() { return 0; } -void MarlinHAL::clear_reset_source() { - uint32_t reset_source = SRC_SRSR; - SRC_SRSR = reset_source; +void HAL_reboot() { _reboot_Teensyduino_(); } + +#define __bss_end _ebss + +extern "C" { + extern char __bss_end; + extern char __heap_start; + extern void* __brkval; + + // Doesn't work on Teensy 4.x + uint32_t freeMemory() { + uint32_t free_memory; + if ((uint32_t)__brkval == 0) + free_memory = ((uint32_t)&free_memory) - ((uint32_t)&__bss_end); + else + free_memory = ((uint32_t)&free_memory) - ((uint32_t)__brkval); + return free_memory; + } } -// ADC - -int8_t MarlinHAL::adc_select; - -void MarlinHAL::adc_init() { - analog_init(); - while (ADC1_GC & ADC_GC_CAL) { /* wait */ } - while (ADC2_GC & ADC_GC_CAL) { /* wait */ } -} - -void MarlinHAL::adc_start(const pin_t adc_pin) { - static const uint8_t pin2sc1a[] = { - 0x07, // 0/A0 AD_B1_02 - 0x08, // 1/A1 AD_B1_03 - 0x0C, // 2/A2 AD_B1_07 - 0x0B, // 3/A3 AD_B1_06 - 0x06, // 4/A4 AD_B1_01 - 0x05, // 5/A5 AD_B1_00 - 0x0F, // 6/A6 AD_B1_10 - 0x00, // 7/A7 AD_B1_11 - 0x0D, // 8/A8 AD_B1_08 - 0x0E, // 9/A9 AD_B1_09 - 0x01, // 24/A10 AD_B0_12 - 0x02, // 25/A11 AD_B0_13 - 0x83, // 26/A12 AD_B1_14 - only on ADC2, 3 - 0x84, // 27/A13 AD_B1_15 - only on ADC2, 4 - 0x07, // 14/A0 AD_B1_02 - 0x08, // 15/A1 AD_B1_03 - 0x0C, // 16/A2 AD_B1_07 - 0x0B, // 17/A3 AD_B1_06 - 0x06, // 18/A4 AD_B1_01 - 0x05, // 19/A5 AD_B1_00 - 0x0F, // 20/A6 AD_B1_10 - 0x00, // 21/A7 AD_B1_11 - 0x0D, // 22/A8 AD_B1_08 - 0x0E, // 23/A9 AD_B1_09 - 0x01, // 24/A10 AD_B0_12 - 0x02, // 25/A11 AD_B0_13 - 0x83, // 26/A12 AD_B1_14 - only on ADC2, 3 - 0x84, // 27/A13 AD_B1_15 - only on ADC2, 4 - #ifdef ARDUINO_TEENSY41 - 0xFF, // 28 - 0xFF, // 29 - 0xFF, // 30 - 0xFF, // 31 - 0xFF, // 32 - 0xFF, // 33 - 0xFF, // 34 - 0xFF, // 35 - 0xFF, // 36 - 0xFF, // 37 - 0x81, // 38/A14 AD_B1_12 - only on ADC2, 1 - 0x82, // 39/A15 AD_B1_13 - only on ADC2, 2 - 0x09, // 40/A16 AD_B1_04 - 0x0A, // 41/A17 AD_B1_05 - #endif - }; +void HAL_adc_start_conversion(const uint8_t adc_pin) { const uint16_t pin = pin2sc1a[adc_pin]; if (pin == 0xFF) { - adc_select = -1; // Digital only + HAL_adc_select = -1; // Digital only } else if (pin & 0x80) { - adc_select = 1; + HAL_adc_select = 1; ADC2_HC0 = pin & 0x7F; } else { - adc_select = 0; + HAL_adc_select = 0; ADC1_HC0 = pin; } } -uint16_t MarlinHAL::adc_value() { - switch (adc_select) { +uint16_t HAL_adc_get_result() { + switch (HAL_adc_select) { case 0: - while (!(ADC1_HS & ADC_HS_COCO0)) { /* wait */ } + while (!(ADC1_HS & ADC_HS_COCO0)) ; // wait return ADC1_R0; case 1: - while (!(ADC2_HS & ADC_HS_COCO0)) { /* wait */ } + while (!(ADC2_HS & ADC_HS_COCO0)) ; // wait return ADC2_R0; } return 0; } +bool is_output(pin_t pin) { + const struct digital_pin_bitband_and_config_table_struct *p; + p = digital_pin_to_info_PGM + pin; + return (*(p->reg + 1) & p->mask); +} + #endif // __IMXRT1062__ diff --git a/Marlin/src/HAL/TEENSY40_41/HAL.h b/Marlin/src/HAL/TEENSY40_41/HAL.h index b7a8070281..2b730768a8 100644 --- a/Marlin/src/HAL/TEENSY40_41/HAL.h +++ b/Marlin/src/HAL/TEENSY40_41/HAL.h @@ -41,6 +41,10 @@ #include "../../feature/ethernet.h" #endif +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 + // ------------------------ // Defines // ------------------------ @@ -51,23 +55,7 @@ #define IS_TEENSY41 1 #endif -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 - -#undef sq -#define sq(x) ((x)*(x)) - -// Don't place string constants in PROGMEM -#undef PSTR -#define PSTR(str) ({static const char *data = (str); &data[0];}) - -// ------------------------ -// Serial ports -// ------------------------ - #include "../../core/serial_hook.h" - #define Serial0 Serial #define _DECLARE_SERIAL(X) \ typedef ForwardSerial1Class DefaultSerial##X; \ @@ -101,47 +89,41 @@ extern USBSerialType USBSerial; #endif #endif -// ------------------------ -// Types -// ------------------------ - -class libServo; -typedef libServo hal_servo_t; +#define HAL_SERVO_LIB libServo typedef int8_t pin_t; -// ------------------------ -// Interrupts -// ------------------------ - -#define CRITICAL_SECTION_START() const bool irqon = !__get_primask(); __disable_irq() -#define CRITICAL_SECTION_END() if (irqon) __enable_irq() - -// ------------------------ -// ADC -// ------------------------ - #ifndef analogInputToDigitalPin #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1) #endif -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 -#define HAL_ADC_FILTERED // turn off ADC oversampling +#define CRITICAL_SECTION_START() uint32_t primask = __get_primask(); __disable_irq() +#define CRITICAL_SECTION_END() if (!primask) __enable_irq() +#define ISRS_ENABLED() (!__get_primask()) +#define ENABLE_ISRS() __enable_irq() +#define DISABLE_ISRS() __disable_irq() -// -// Pin Mapping for M42, M43, M226 -// -#define GET_PIN_MAP_PIN(index) index -#define GET_PIN_MAP_INDEX(pin) pin -#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) +#undef sq +#define sq(x) ((x)*(x)) -// FastIO -bool is_output(pin_t pin); +// Don't place string constants in PROGMEM +#undef PSTR +#define PSTR(str) ({static const char *data = (str); &data[0];}) -// ------------------------ -// Class Utilities -// ------------------------ +// Enable hooks into idle and setup for HAL +#define HAL_IDLETASK 1 +FORCE_INLINE void HAL_idletask() {} +FORCE_INLINE void HAL_init() {} + +// Clear reset reason +void HAL_clear_reset_source(); + +// Reset reason +uint8_t HAL_get_reset_source(); + +void HAL_reboot(); + +FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } #pragma GCC diagnostic push #if GCC_VERSION <= 50000 @@ -152,66 +134,30 @@ extern "C" uint32_t freeMemory(); #pragma GCC diagnostic pop -// ------------------------ -// MarlinHAL Class -// ------------------------ +// ADC -class MarlinHAL { -public: +void HAL_adc_init(); - // Earliest possible init, before setup() - MarlinHAL() {} +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 +#define HAL_ADC_FILTERED // turn off ADC oversampling +#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) +#define HAL_READ_ADC() HAL_adc_get_result() +#define HAL_ADC_READY() true - static inline void init() {} // Called early in setup() - static inline void init_board() {} // Called less early in setup() - static void reboot(); // Restart the firmware from 0x0 +#define HAL_ANALOG_SELECT(pin) - static inline bool isr_state() { return !__get_primask(); } - static inline void isr_on() { __enable_irq(); } - static inline void isr_off() { __disable_irq(); } +void HAL_adc_start_conversion(const uint8_t adc_pin); +uint16_t HAL_adc_get_result(); - static inline void delay_ms(const int ms) { delay(ms); } +// PWM - // Tasks, called from idle() - static inline void idletask() {} +inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } - // Reset - static uint8_t get_reset_source(); - static void clear_reset_source(); +// Pin Map - // Free SRAM - static inline int freeMemory() { return ::freeMemory(); } +#define GET_PIN_MAP_PIN(index) index +#define GET_PIN_MAP_INDEX(pin) pin +#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) - // - // ADC Methods - // - - static int8_t adc_select; - - // Called by Temperature::init once at startup - static void adc_init(); - - // Called by Temperature::init for each sensor at startup - static inline void adc_enable(const pin_t pin) {} - - // Begin ADC sampling on the given channel - static void adc_start(const pin_t pin); - - // Is the ADC ready for reading? - static inline bool adc_ready() { return true; } - - // The current value of the ADC register - static uint16_t adc_value(); - - /** - * Set the PWM duty cycle for the pin to the given value. - * No option to invert the duty cycle [default = false] - * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] - */ - static inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { - analogWrite(pin, v); - } - -}; - -extern MarlinHAL hal; +bool is_output(pin_t pin); diff --git a/Marlin/src/HAL/TEENSY40_41/timers.h b/Marlin/src/HAL/TEENSY40_41/timers.h index 77fe0953d3..81cf67f7bc 100644 --- a/Marlin/src/HAL/TEENSY40_41/timers.h +++ b/Marlin/src/HAL/TEENSY40_41/timers.h @@ -114,4 +114,4 @@ bool HAL_timer_interrupt_enabled(const uint8_t timer_num); void HAL_timer_isr_prologue(const uint8_t timer_num); //void HAL_timer_isr_epilogue(const uint8_t timer_num) {} -#define HAL_timer_isr_epilogue(T) NOOP +#define HAL_timer_isr_epilogue(T) diff --git a/Marlin/src/HAL/shared/HAL.cpp b/Marlin/src/HAL/shared/HAL.cpp deleted file mode 100644 index a5fe407188..0000000000 --- a/Marlin/src/HAL/shared/HAL.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Marlin 3D Printer Firmware - * Copyright (c) 2021 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 . - * - */ - -/** - * HAL/shared/HAL.cpp - */ - -#include "../../inc/MarlinConfig.h" - -MarlinHAL hal; - -#if ENABLED(SOFT_RESET_VIA_SERIAL) - - // Global for use by e_parser.h - void HAL_reboot() { hal.reboot(); } - -#endif diff --git a/Marlin/src/HAL/shared/HAL_spi_L6470.cpp b/Marlin/src/HAL/shared/HAL_spi_L6470.cpp index 5d4ce89b27..bd85dbe7bd 100644 --- a/Marlin/src/HAL/shared/HAL_spi_L6470.cpp +++ b/Marlin/src/HAL/shared/HAL_spi_L6470.cpp @@ -92,9 +92,9 @@ uint8_t L64XX_Marlin::transfer_single(uint8_t data, int16_t ss_pin) { // First device in chain has data sent last extDigitalWrite(ss_pin, LOW); - hal.isr_off(); // Disable interrupts during SPI transfer (can't allow partial command to chips) + DISABLE_ISRS(); // Disable interrupts during SPI transfer (can't allow partial command to chips) const uint8_t data_out = L6470_SpiTransfer_Mode_3(data); - hal.isr_on(); // Enable interrupts + ENABLE_ISRS(); // Enable interrupts extDigitalWrite(ss_pin, HIGH); return data_out; @@ -107,9 +107,9 @@ uint8_t L64XX_Marlin::transfer_chain(uint8_t data, int16_t ss_pin, uint8_t chain extDigitalWrite(ss_pin, LOW); for (uint8_t i = L64XX::chain[0]; !L64xxManager.spi_abort && i >= 1; i--) { // Send data unless aborted - hal.isr_off(); // Disable interrupts during SPI transfer (can't allow partial command to chips) + DISABLE_ISRS(); // Disable interrupts during SPI transfer (can't allow partial command to chips) const uint8_t temp = L6470_SpiTransfer_Mode_3(uint8_t(i == chain_position ? data : dSPIN_NOP)); - hal.isr_on(); // Enable interrupts + ENABLE_ISRS(); // Enable interrupts if (i == chain_position) data_out = temp; } diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 009edeba2f..5132d07e87 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -790,7 +790,7 @@ void idle(bool no_stepper_sleep/*=false*/) { #endif // Run HAL idle tasks - hal.idletask(); + TERN_(HAL_IDLETASK, HAL_idletask()); // Check network connection TERN_(HAS_ETHERNET, ethernet.check()); @@ -929,7 +929,7 @@ void minkill(const bool steppers_off/*=false*/) { watchdog_refresh(); // Reboot the board - hal.reboot(); + HAL_reboot(); #else @@ -1041,7 +1041,7 @@ inline void tmc_standby_setup() { * • L64XX Stepper Drivers (SPI) * • Stepper Driver Reset: DISABLE * • TMC Stepper Drivers (SPI) - * • Run hal.init_board() for additional pins setup + * • Run BOARD_INIT if defined * • ESP WiFi * - Get the Reset Reason and report it * - Print startup messages and diagnostics @@ -1119,8 +1119,8 @@ void setup() { tmc_standby_setup(); // TMC Low Power Standby pins must be set early or they're not usable // Check startup - does nothing if bootloader sets MCUSR to 0 - const byte mcu = hal.get_reset_source(); - hal.clear_reset_source(); + const byte mcu = HAL_get_reset_source(); + HAL_clear_reset_source(); #if ENABLED(MARLIN_DEV_MODE) auto log_current_ms = [&](PGM_P const msg) { @@ -1181,20 +1181,23 @@ void setup() { JTAGSWD_RESET(); #endif - // Disable any hardware debug to free up pins for IO - #if ENABLED(DISABLE_DEBUG) && defined(JTAGSWD_DISABLE) + #if EITHER(DISABLE_DEBUG, DISABLE_JTAG) delay(10); - SETUP_LOG("JTAGSWD_DISABLE"); - JTAGSWD_DISABLE(); - #elif ENABLED(DISABLE_JTAG) && defined(JTAG_DISABLE) - delay(10); - SETUP_LOG("JTAG_DISABLE"); - JTAG_DISABLE(); + // Disable any hardware debug to free up pins for IO + #if ENABLED(DISABLE_DEBUG) && defined(JTAGSWD_DISABLE) + SETUP_LOG("JTAGSWD_DISABLE"); + JTAGSWD_DISABLE(); + #elif defined(JTAG_DISABLE) + SETUP_LOG("JTAG_DISABLE"); + JTAG_DISABLE(); + #else + #error "DISABLE_(DEBUG|JTAG) is not supported for the selected MCU/Board." + #endif #endif TERN_(DYNAMIC_VECTORTABLE, hook_cpu_exceptions()); // If supported, install Marlin exception handlers at runtime - SETUP_RUN(hal.init()); + SETUP_RUN(HAL_init()); // Init and disable SPI thermocouples; this is still needed #if TEMP_SENSOR_0_IS_MAX_TC || (TEMP_SENSOR_REDUNDANT_IS_MAX_TC && REDUNDANT_TEMP_MATCH(SOURCE, E0)) @@ -1240,16 +1243,19 @@ void setup() { SETUP_RUN(tmc_init_cs_pins()); #endif - SETUP_RUN(hal.init_board()); + #ifdef BOARD_INIT + SETUP_LOG("BOARD_INIT"); + BOARD_INIT(); + #endif SETUP_RUN(esp_wifi_init()); // Report Reset Reason - if (mcu & RST_POWER_ON) SERIAL_ECHOLNPGM(STR_POWERUP); - if (mcu & RST_EXTERNAL) SERIAL_ECHOLNPGM(STR_EXTERNAL_RESET); + if (mcu & RST_POWER_ON) SERIAL_ECHOLNPGM(STR_POWERUP); + if (mcu & RST_EXTERNAL) SERIAL_ECHOLNPGM(STR_EXTERNAL_RESET); if (mcu & RST_BROWN_OUT) SERIAL_ECHOLNPGM(STR_BROWNOUT_RESET); - if (mcu & RST_WATCHDOG) SERIAL_ECHOLNPGM(STR_WATCHDOG_RESET); - if (mcu & RST_SOFTWARE) SERIAL_ECHOLNPGM(STR_SOFTWARE_RESET); + if (mcu & RST_WATCHDOG) SERIAL_ECHOLNPGM(STR_WATCHDOG_RESET); + if (mcu & RST_SOFTWARE) SERIAL_ECHOLNPGM(STR_SOFTWARE_RESET); // Identify myself as Marlin x.x.x SERIAL_ECHOLNPGM("Marlin " SHORT_BUILD_VERSION); @@ -1260,7 +1266,7 @@ void setup() { ); #endif SERIAL_ECHO_MSG(" Compiled: " __DATE__); - SERIAL_ECHO_MSG(STR_FREE_MEMORY, hal.freeMemory(), STR_PLANNER_BUFFER_BYTES, sizeof(block_t) * (BLOCK_BUFFER_SIZE)); + SERIAL_ECHO_MSG(STR_FREE_MEMORY, freeMemory(), STR_PLANNER_BUFFER_BYTES, sizeof(block_t) * (BLOCK_BUFFER_SIZE)); // Some HAL need precise delay adjustment calibrate_delay_loop(); @@ -1532,7 +1538,7 @@ void setup() { #endif #if ENABLED(USE_WATCHDOG) - SETUP_RUN(watchdog_init()); // Reinit watchdog after hal.get_reset_source call + SETUP_RUN(watchdog_init()); // Reinit watchdog after HAL_get_reset_source call #endif #if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER) diff --git a/Marlin/src/feature/caselight.cpp b/Marlin/src/feature/caselight.cpp index a58cb66aff..59832fd6ed 100644 --- a/Marlin/src/feature/caselight.cpp +++ b/Marlin/src/feature/caselight.cpp @@ -69,7 +69,7 @@ void CaseLight::update(const bool sflag) { #if CASELIGHT_USES_BRIGHTNESS if (pin_is_pwm()) - hal.set_pwm_duty(pin_t(CASE_LIGHT_PIN), ( + set_pwm_duty(pin_t(CASE_LIGHT_PIN), ( #if CASE_LIGHT_MAX_PWM == 255 n10ct #else diff --git a/Marlin/src/feature/controllerfan.cpp b/Marlin/src/feature/controllerfan.cpp index f42bf52ae4..59ba665e11 100644 --- a/Marlin/src/feature/controllerfan.cpp +++ b/Marlin/src/feature/controllerfan.cpp @@ -76,7 +76,7 @@ void ControllerFan::update() { thermalManager.soft_pwm_controller_speed = speed; #else if (PWM_PIN(CONTROLLER_FAN_PIN)) - hal.set_pwm_duty(pin_t(CONTROLLER_FAN_PIN), speed); + set_pwm_duty(pin_t(CONTROLLER_FAN_PIN), speed); else WRITE(CONTROLLER_FAN_PIN, speed > 0); #endif diff --git a/Marlin/src/feature/e_parser.h b/Marlin/src/feature/e_parser.h index fda1ba144b..1dee0cf755 100644 --- a/Marlin/src/feature/e_parser.h +++ b/Marlin/src/feature/e_parser.h @@ -41,9 +41,7 @@ extern bool wait_for_user, wait_for_heatup; void quickresume_stepper(); #endif -#if ENABLED(SOFT_RESET_VIA_SERIAL) - void HAL_reboot(); -#endif +void HAL_reboot(); class EmergencyParser { diff --git a/Marlin/src/feature/leds/leds.cpp b/Marlin/src/feature/leds/leds.cpp index 0a4b511476..17d790b8cc 100644 --- a/Marlin/src/feature/leds/leds.cpp +++ b/Marlin/src/feature/leds/leds.cpp @@ -123,7 +123,7 @@ void LEDLights::set_color(const LEDColor &incol // If the pins can do PWM then their intensity will be set. #define _UPDATE_RGBW(C,c) do { \ if (PWM_PIN(RGB_LED_##C##_PIN)) \ - hal.set_pwm_duty(pin_t(RGB_LED_##C##_PIN), c); \ + set_pwm_duty(pin_t(RGB_LED_##C##_PIN), c); \ else \ WRITE(RGB_LED_##C##_PIN, c ? HIGH : LOW); \ }while(0) diff --git a/Marlin/src/feature/spindle_laser.cpp b/Marlin/src/feature/spindle_laser.cpp index 2840a92c58..cde2b47d90 100644 --- a/Marlin/src/feature/spindle_laser.cpp +++ b/Marlin/src/feature/spindle_laser.cpp @@ -66,10 +66,10 @@ void SpindleLaser::init() { #endif #if ENABLED(SPINDLE_LASER_USE_PWM) SET_PWM(SPINDLE_LASER_PWM_PIN); - hal.set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // Set to lowest speed + set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // Set to lowest speed #endif #if ENABLED(HAL_CAN_SET_PWM_FREQ) && defined(SPINDLE_LASER_FREQUENCY) - hal.set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_FREQUENCY); + set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_FREQUENCY); TERN_(MARLIN_DEV_MODE, frequency = SPINDLE_LASER_FREQUENCY); #endif #if ENABLED(AIR_EVACUATION) @@ -90,10 +90,10 @@ void SpindleLaser::init() { * @param ocr Power value */ void SpindleLaser::_set_ocr(const uint8_t ocr) { - #if BOTH(NEEDS_HARDWARE_PWM, HAL_CAN_SET_PWM_FREQ) && SPINDLE_LASER_FREQUENCY - hal.set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), TERN(MARLIN_DEV_MODE, frequency, SPINDLE_LASER_FREQUENCY)); + #if NEEDS_HARDWARE_PWM && SPINDLE_LASER_FREQUENCY + set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), TERN(MARLIN_DEV_MODE, frequency, SPINDLE_LASER_FREQUENCY)); #endif - hal.set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF); + set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF); } void SpindleLaser::set_ocr(const uint8_t ocr) { diff --git a/Marlin/src/feature/spindle_laser.h b/Marlin/src/feature/spindle_laser.h index 0415c9c8bb..95d60ae486 100644 --- a/Marlin/src/feature/spindle_laser.h +++ b/Marlin/src/feature/spindle_laser.h @@ -103,7 +103,7 @@ public: static void init(); #if ENABLED(MARLIN_DEV_MODE) - static inline void refresh_frequency() { hal.set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), frequency); } + static inline void refresh_frequency() { set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), frequency); } #endif // Modifying this function should update everywhere diff --git a/Marlin/src/gcode/control/M42.cpp b/Marlin/src/gcode/control/M42.cpp index 8076818317..77c0ccc49b 100644 --- a/Marlin/src/gcode/control/M42.cpp +++ b/Marlin/src/gcode/control/M42.cpp @@ -126,10 +126,10 @@ void GcodeSuite::M42() { extDigitalWrite(pin, pin_status); #ifdef ARDUINO_ARCH_STM32 - // A simple I/O will be set to 0 by hal.set_pwm_duty() + // A simple I/O will be set to 0 by set_pwm_duty() if (pin_status <= 1 && !PWM_PIN(pin)) return; #endif - hal.set_pwm_duty(pin, pin_status); + set_pwm_duty(pin, pin_status); } #endif // DIRECT_PIN_CONTROL diff --git a/Marlin/src/gcode/gcode_d.cpp b/Marlin/src/gcode/gcode_d.cpp index 2dd1de0001..204455e65e 100644 --- a/Marlin/src/gcode/gcode_d.cpp +++ b/Marlin/src/gcode/gcode_d.cpp @@ -38,7 +38,7 @@ #include "../sd/cardreader.h" #include "../MarlinCore.h" // for kill -void dump_delay_accuracy_check(); +extern void dump_delay_accuracy_check(); /** * Dn: G-code for development and testing @@ -54,7 +54,7 @@ void GcodeSuite::D(const int16_t dcode) { for (;;) { /* loop forever (watchdog reset) */ } case 0: - hal.reboot(); + HAL_reboot(); break; case 10: @@ -74,7 +74,7 @@ void GcodeSuite::D(const int16_t dcode) { settings.reset(); settings.save(); #endif - hal.reboot(); + HAL_reboot(); } break; case 2: { // D2 Read / Write SRAM @@ -189,12 +189,12 @@ void GcodeSuite::D(const int16_t dcode) { SERIAL_ECHOLNPGM("(USE_WATCHDOG " TERN(USE_WATCHDOG, "ENABLED", "DISABLED") ")"); thermalManager.disable_all_heaters(); delay(1000); // Allow time to print - hal.isr_off(); + DISABLE_ISRS(); // Use a low-level delay that does not rely on interrupts to function // Do not spin forever, to avoid thermal risks if heaters are enabled and // watchdog does not work. for (int i = 10000; i--;) DELAY_US(1000UL); - hal.isr_on(); + ENABLE_ISRS(); SERIAL_ECHOLNPGM("FAILURE: Watchdog did not trigger board reset."); } break; diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 6ee58f769b..c8ac48f7cf 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -3850,10 +3850,3 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #undef _TEST_PWM #undef _LINEAR_AXES_STR #undef _LOGICAL_AXES_STR - -// JTAG support in the HAL -#if ENABLED(DISABLE_DEBUG) && !defined(JTAGSWD_DISABLE) - #error "DISABLE_DEBUG is not supported for the selected MCU/Board." -#elif ENABLED(DISABLE_JTAG) && !defined(JTAG_DISABLE) - #error "DISABLE_JTAG is not supported for the selected MCU/Board." -#endif diff --git a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp index 61db2db920..59c74148ad 100644 --- a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp +++ b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp @@ -282,9 +282,9 @@ void MarlinUI::init_lcd() { #if PIN_EXISTS(LCD_RESET) // Perform a clean hardware reset with needed delays OUT_WRITE(LCD_RESET_PIN, LOW); - hal.delay_ms(5); + _delay_ms(5); WRITE(LCD_RESET_PIN, HIGH); - hal.delay_ms(5); + _delay_ms(5); u8g.begin(); #endif diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index 64a65bb686..d1a9ba7077 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -2149,7 +2149,7 @@ void RebootPrinter() { thermalManager.disable_all_heaters(); planner.finish_and_disable(); DWIN_RebootScreen(); - hal.reboot(); + HAL_reboot(); } void Goto_InfoMenu(){ diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index df6a857803..7a2cefdd4c 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -1345,7 +1345,7 @@ void Endstops::update() { ES_REPORT_CHANGE(K_MAX); #endif SERIAL_ECHOLNPGM("\n"); - hal.set_pwm_duty(pin_t(LED_PIN), local_LED_status); + set_pwm_duty(pin_t(LED_PIN), local_LED_status); local_LED_status ^= 255; old_live_state_local = live_state_local; } diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 752834c6ab..45ccdd1702 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1264,7 +1264,7 @@ void Planner::recalculate() { #if ENABLED(FAN_SOFT_PWM) #define _FAN_SET(F) thermalManager.soft_pwm_amount_fan[F] = CALC_FAN_SPEED(F); #else - #define _FAN_SET(F) hal.set_pwm_duty(pin_t(FAN##F##_PIN), CALC_FAN_SPEED(F)); + #define _FAN_SET(F) set_pwm_duty(pin_t(FAN##F##_PIN), CALC_FAN_SPEED(F)); #endif #define FAN_SET(F) do{ kickstart_fan(fan_speed, ms, F); _FAN_SET(F); }while(0) @@ -1400,8 +1400,8 @@ void Planner::check_axes_activity() { TERN_(AUTOTEMP, autotemp_task()); #if ENABLED(BARICUDA) - TERN_(HAS_HEATER_1, hal.set_pwm_duty(pin_t(HEATER_1_PIN), tail_valve_pressure)); - TERN_(HAS_HEATER_2, hal.set_pwm_duty(pin_t(HEATER_2_PIN), tail_e_to_p_pressure)); + TERN_(HAS_HEATER_1, set_pwm_duty(pin_t(HEATER_1_PIN), tail_valve_pressure)); + TERN_(HAS_HEATER_2, set_pwm_duty(pin_t(HEATER_2_PIN), tail_e_to_p_pressure)); #endif } diff --git a/Marlin/src/module/servo.cpp b/Marlin/src/module/servo.cpp index 96d5ba9da8..231efe84e1 100644 --- a/Marlin/src/module/servo.cpp +++ b/Marlin/src/module/servo.cpp @@ -30,7 +30,7 @@ #include "servo.h" -hal_servo_t servo[NUM_SERVOS]; +HAL_SERVO_LIB servo[NUM_SERVOS]; #if ENABLED(EDITABLE_SERVO_ANGLES) uint16_t servo_angles[NUM_SERVOS][2]; diff --git a/Marlin/src/module/servo.h b/Marlin/src/module/servo.h index cd55a317a2..73dbbdddb7 100644 --- a/Marlin/src/module/servo.h +++ b/Marlin/src/module/servo.h @@ -112,5 +112,5 @@ #define MOVE_SERVO(I, P) servo[I].move(P) #define DETACH_SERVO(I) servo[I].detach() -extern hal_servo_t servo[NUM_SERVOS]; +extern HAL_SERVO_LIB servo[NUM_SERVOS]; void servo_init(); diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 0f47d66791..c100051f98 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -1474,7 +1474,7 @@ void Stepper::isr() { #ifndef __AVR__ // Disable interrupts, to avoid ISR preemption while we reprogram the period // (AVR enters the ISR with global interrupts disabled, so no need to do it here) - hal.isr_off(); + DISABLE_ISRS(); #endif // Program timer compare for the maximum period, so it does NOT @@ -1492,7 +1492,7 @@ void Stepper::isr() { hal_timer_t min_ticks; do { // Enable ISRs to reduce USART processing latency - hal.isr_on(); + ENABLE_ISRS(); if (!nextMainISR) pulse_phase_isr(); // 0 = Do coordinated axes Stepper pulses @@ -1576,7 +1576,7 @@ void Stepper::isr() { * is less than the current count due to something preempting between the * read and the write of the new period value). */ - hal.isr_off(); + DISABLE_ISRS(); /** * Get the current tick value + margin @@ -1611,7 +1611,7 @@ void Stepper::isr() { HAL_timer_set_compare(MF_TIMER_STEP, hal_timer_t(next_isr_ticks)); // Don't forget to finally reenable interrupts - hal.isr_on(); + ENABLE_ISRS(); } #if MINIMUM_STEPPER_PULSE || MAXIMUM_STEPPER_RATE @@ -3261,7 +3261,7 @@ void Stepper::report_positions() { #elif HAS_MOTOR_CURRENT_PWM - #define _WRITE_CURRENT_PWM(P) hal.set_pwm_duty(pin_t(MOTOR_CURRENT_PWM_## P ##_PIN), 255L * current / (MOTOR_CURRENT_PWM_RANGE)) + #define _WRITE_CURRENT_PWM(P) set_pwm_duty(pin_t(MOTOR_CURRENT_PWM_## P ##_PIN), 255L * current / (MOTOR_CURRENT_PWM_RANGE)) switch (driver) { case 0: #if PIN_EXISTS(MOTOR_CURRENT_PWM_X) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 1960dc5d9b..dccdc55034 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -326,7 +326,7 @@ PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED); #define _INIT_FAN_PIN(P) do{ if (PWM_PIN(P)) SET_PWM(P); else _INIT_SOFT_FAN(P); }while(0) #endif #if ENABLED(FAST_PWM_FAN) - #define SET_FAST_PWM_FREQ(P) hal.set_pwm_frequency(pin_t(P), FAST_PWM_FAN_FREQUENCY) + #define SET_FAST_PWM_FREQ(P) set_pwm_frequency(P, FAST_PWM_FAN_FREQUENCY) #else #define SET_FAST_PWM_FREQ(P) NOOP #endif @@ -813,7 +813,7 @@ volatile bool Temperature::raw_temps_ready = false; } // Run HAL idle tasks - hal.idletask(); + TERN_(HAL_IDLETASK, HAL_idletask()); // Run UI update TERN(HAS_DWIN_E3V2_BASIC, DWIN_Update(), ui.update()); @@ -912,7 +912,7 @@ int16_t Temperature::getHeaterPower(const heater_id_t heater_id) { #define _UPDATE_AUTO_FAN(P,D,A) do{ \ if (PWM_PIN(P##_AUTO_FAN_PIN) && A < 255) \ - hal.set_pwm_duty(pin_t(P##_AUTO_FAN_PIN), D ? A : 0); \ + set_pwm_duty(pin_t(P##_AUTO_FAN_PIN), D ? A : 0); \ else \ WRITE(P##_AUTO_FAN_PIN, D); \ }while(0) @@ -2326,73 +2326,73 @@ void Temperature::init() { TERN_(HAS_MAXTC_SW_SPI, max_tc_spi.init()); - hal.adc_init(); + HAL_adc_init(); #if HAS_TEMP_ADC_0 - hal.adc_enable(TEMP_0_PIN); + HAL_ANALOG_SELECT(TEMP_0_PIN); #endif #if HAS_TEMP_ADC_1 - hal.adc_enable(TEMP_1_PIN); + HAL_ANALOG_SELECT(TEMP_1_PIN); #endif #if HAS_TEMP_ADC_2 - hal.adc_enable(TEMP_2_PIN); + HAL_ANALOG_SELECT(TEMP_2_PIN); #endif #if HAS_TEMP_ADC_3 - hal.adc_enable(TEMP_3_PIN); + HAL_ANALOG_SELECT(TEMP_3_PIN); #endif #if HAS_TEMP_ADC_4 - hal.adc_enable(TEMP_4_PIN); + HAL_ANALOG_SELECT(TEMP_4_PIN); #endif #if HAS_TEMP_ADC_5 - hal.adc_enable(TEMP_5_PIN); + HAL_ANALOG_SELECT(TEMP_5_PIN); #endif #if HAS_TEMP_ADC_6 - hal.adc_enable(TEMP_6_PIN); + HAL_ANALOG_SELECT(TEMP_6_PIN); #endif #if HAS_TEMP_ADC_7 - hal.adc_enable(TEMP_7_PIN); + HAL_ANALOG_SELECT(TEMP_7_PIN); #endif #if HAS_JOY_ADC_X - hal.adc_enable(JOY_X_PIN); + HAL_ANALOG_SELECT(JOY_X_PIN); #endif #if HAS_JOY_ADC_Y - hal.adc_enable(JOY_Y_PIN); + HAL_ANALOG_SELECT(JOY_Y_PIN); #endif #if HAS_JOY_ADC_Z - hal.adc_enable(JOY_Z_PIN); + HAL_ANALOG_SELECT(JOY_Z_PIN); #endif #if HAS_JOY_ADC_EN SET_INPUT_PULLUP(JOY_EN_PIN); #endif #if HAS_TEMP_ADC_BED - hal.adc_enable(TEMP_BED_PIN); + HAL_ANALOG_SELECT(TEMP_BED_PIN); #endif #if HAS_TEMP_ADC_CHAMBER - hal.adc_enable(TEMP_CHAMBER_PIN); + HAL_ANALOG_SELECT(TEMP_CHAMBER_PIN); #endif #if HAS_TEMP_ADC_COOLER - hal.adc_enable(TEMP_COOLER_PIN); + HAL_ANALOG_SELECT(TEMP_COOLER_PIN); #endif #if HAS_TEMP_ADC_PROBE - hal.adc_enable(TEMP_PROBE_PIN); + HAL_ANALOG_SELECT(TEMP_PROBE_PIN); #endif #if HAS_TEMP_ADC_BOARD - hal.adc_enable(TEMP_BOARD_PIN); + HAL_ANALOG_SELECT(TEMP_BOARD_PIN); #endif #if HAS_TEMP_ADC_REDUNDANT - hal.adc_enable(TEMP_REDUNDANT_PIN); + HAL_ANALOG_SELECT(TEMP_REDUNDANT_PIN); #endif #if ENABLED(FILAMENT_WIDTH_SENSOR) - hal.adc_enable(FILWIDTH_PIN); + HAL_ANALOG_SELECT(FILWIDTH_PIN); #endif #if HAS_ADC_BUTTONS - hal.adc_enable(ADC_KEYPAD_PIN); + HAL_ANALOG_SELECT(ADC_KEYPAD_PIN); #endif #if ENABLED(POWER_MONITOR_CURRENT) - hal.adc_enable(POWER_MONITOR_CURRENT_PIN); + HAL_ANALOG_SELECT(POWER_MONITOR_CURRENT_PIN); #endif #if ENABLED(POWER_MONITOR_VOLTAGE) - hal.adc_enable(POWER_MONITOR_VOLTAGE_PIN); + HAL_ANALOG_SELECT(POWER_MONITOR_VOLTAGE_PIN); #endif HAL_timer_start(MF_TIMER_TEMP, TEMP_TIMER_FREQUENCY); @@ -3333,8 +3333,8 @@ void Temperature::isr() { * This gives each ADC 0.9765ms to charge up. */ #define ACCUMULATE_ADC(obj) do{ \ - if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; \ - else obj.sample(hal.adc_value()); \ + if (!HAL_ADC_READY()) next_sensor_state = adc_sensor_state; \ + else obj.sample(HAL_READ_ADC()); \ }while(0) ADCSensorState next_sensor_state = adc_sensor_state < SensorsReady ? (ADCSensorState)(int(adc_sensor_state) + 1) : StartSampling; @@ -3366,115 +3366,115 @@ void Temperature::isr() { break; #if HAS_TEMP_ADC_0 - case PrepareTemp_0: hal.adc_start(TEMP_0_PIN); break; + case PrepareTemp_0: HAL_START_ADC(TEMP_0_PIN); break; case MeasureTemp_0: ACCUMULATE_ADC(temp_hotend[0]); break; #endif #if HAS_TEMP_ADC_BED - case PrepareTemp_BED: hal.adc_start(TEMP_BED_PIN); break; + case PrepareTemp_BED: HAL_START_ADC(TEMP_BED_PIN); break; case MeasureTemp_BED: ACCUMULATE_ADC(temp_bed); break; #endif #if HAS_TEMP_ADC_CHAMBER - case PrepareTemp_CHAMBER: hal.adc_start(TEMP_CHAMBER_PIN); break; + case PrepareTemp_CHAMBER: HAL_START_ADC(TEMP_CHAMBER_PIN); break; case MeasureTemp_CHAMBER: ACCUMULATE_ADC(temp_chamber); break; #endif #if HAS_TEMP_ADC_COOLER - case PrepareTemp_COOLER: hal.adc_start(TEMP_COOLER_PIN); break; + case PrepareTemp_COOLER: HAL_START_ADC(TEMP_COOLER_PIN); break; case MeasureTemp_COOLER: ACCUMULATE_ADC(temp_cooler); break; #endif #if HAS_TEMP_ADC_PROBE - case PrepareTemp_PROBE: hal.adc_start(TEMP_PROBE_PIN); break; + case PrepareTemp_PROBE: HAL_START_ADC(TEMP_PROBE_PIN); break; case MeasureTemp_PROBE: ACCUMULATE_ADC(temp_probe); break; #endif #if HAS_TEMP_ADC_BOARD - case PrepareTemp_BOARD: hal.adc_start(TEMP_BOARD_PIN); break; + case PrepareTemp_BOARD: HAL_START_ADC(TEMP_BOARD_PIN); break; case MeasureTemp_BOARD: ACCUMULATE_ADC(temp_board); break; #endif #if HAS_TEMP_ADC_REDUNDANT - case PrepareTemp_REDUNDANT: hal.adc_start(TEMP_REDUNDANT_PIN); break; + case PrepareTemp_REDUNDANT: HAL_START_ADC(TEMP_REDUNDANT_PIN); break; case MeasureTemp_REDUNDANT: ACCUMULATE_ADC(temp_redundant); break; #endif #if HAS_TEMP_ADC_1 - case PrepareTemp_1: hal.adc_start(TEMP_1_PIN); break; + case PrepareTemp_1: HAL_START_ADC(TEMP_1_PIN); break; case MeasureTemp_1: ACCUMULATE_ADC(temp_hotend[1]); break; #endif #if HAS_TEMP_ADC_2 - case PrepareTemp_2: hal.adc_start(TEMP_2_PIN); break; + case PrepareTemp_2: HAL_START_ADC(TEMP_2_PIN); break; case MeasureTemp_2: ACCUMULATE_ADC(temp_hotend[2]); break; #endif #if HAS_TEMP_ADC_3 - case PrepareTemp_3: hal.adc_start(TEMP_3_PIN); break; + case PrepareTemp_3: HAL_START_ADC(TEMP_3_PIN); break; case MeasureTemp_3: ACCUMULATE_ADC(temp_hotend[3]); break; #endif #if HAS_TEMP_ADC_4 - case PrepareTemp_4: hal.adc_start(TEMP_4_PIN); break; + case PrepareTemp_4: HAL_START_ADC(TEMP_4_PIN); break; case MeasureTemp_4: ACCUMULATE_ADC(temp_hotend[4]); break; #endif #if HAS_TEMP_ADC_5 - case PrepareTemp_5: hal.adc_start(TEMP_5_PIN); break; + case PrepareTemp_5: HAL_START_ADC(TEMP_5_PIN); break; case MeasureTemp_5: ACCUMULATE_ADC(temp_hotend[5]); break; #endif #if HAS_TEMP_ADC_6 - case PrepareTemp_6: hal.adc_start(TEMP_6_PIN); break; + case PrepareTemp_6: HAL_START_ADC(TEMP_6_PIN); break; case MeasureTemp_6: ACCUMULATE_ADC(temp_hotend[6]); break; #endif #if HAS_TEMP_ADC_7 - case PrepareTemp_7: hal.adc_start(TEMP_7_PIN); break; + case PrepareTemp_7: HAL_START_ADC(TEMP_7_PIN); break; case MeasureTemp_7: ACCUMULATE_ADC(temp_hotend[7]); break; #endif #if ENABLED(FILAMENT_WIDTH_SENSOR) - case Prepare_FILWIDTH: hal.adc_start(FILWIDTH_PIN); break; + case Prepare_FILWIDTH: HAL_START_ADC(FILWIDTH_PIN); break; case Measure_FILWIDTH: - if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; // Redo this state - else filwidth.accumulate(hal.adc_value()); + if (!HAL_ADC_READY()) next_sensor_state = adc_sensor_state; // Redo this state + else filwidth.accumulate(HAL_READ_ADC()); break; #endif #if ENABLED(POWER_MONITOR_CURRENT) case Prepare_POWER_MONITOR_CURRENT: - hal.adc_start(POWER_MONITOR_CURRENT_PIN); + HAL_START_ADC(POWER_MONITOR_CURRENT_PIN); break; case Measure_POWER_MONITOR_CURRENT: - if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; // Redo this state - else power_monitor.add_current_sample(hal.adc_value()); + if (!HAL_ADC_READY()) next_sensor_state = adc_sensor_state; // Redo this state + else power_monitor.add_current_sample(HAL_READ_ADC()); break; #endif #if ENABLED(POWER_MONITOR_VOLTAGE) case Prepare_POWER_MONITOR_VOLTAGE: - hal.adc_start(POWER_MONITOR_VOLTAGE_PIN); + HAL_START_ADC(POWER_MONITOR_VOLTAGE_PIN); break; case Measure_POWER_MONITOR_VOLTAGE: - if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; // Redo this state - else power_monitor.add_voltage_sample(hal.adc_value()); + if (!HAL_ADC_READY()) next_sensor_state = adc_sensor_state; // Redo this state + else power_monitor.add_voltage_sample(HAL_READ_ADC()); break; #endif #if HAS_JOY_ADC_X - case PrepareJoy_X: hal.adc_start(JOY_X_PIN); break; + case PrepareJoy_X: HAL_START_ADC(JOY_X_PIN); break; case MeasureJoy_X: ACCUMULATE_ADC(joystick.x); break; #endif #if HAS_JOY_ADC_Y - case PrepareJoy_Y: hal.adc_start(JOY_Y_PIN); break; + case PrepareJoy_Y: HAL_START_ADC(JOY_Y_PIN); break; case MeasureJoy_Y: ACCUMULATE_ADC(joystick.y); break; #endif #if HAS_JOY_ADC_Z - case PrepareJoy_Z: hal.adc_start(JOY_Z_PIN); break; + case PrepareJoy_Z: HAL_START_ADC(JOY_Z_PIN); break; case MeasureJoy_Z: ACCUMULATE_ADC(joystick.z); break; #endif @@ -3482,12 +3482,12 @@ void Temperature::isr() { #ifndef ADC_BUTTON_DEBOUNCE_DELAY #define ADC_BUTTON_DEBOUNCE_DELAY 16 #endif - case Prepare_ADC_KEY: hal.adc_start(ADC_KEYPAD_PIN); break; + case Prepare_ADC_KEY: HAL_START_ADC(ADC_KEYPAD_PIN); break; case Measure_ADC_KEY: - if (!hal.adc_ready()) + if (!HAL_ADC_READY()) next_sensor_state = adc_sensor_state; // redo this state else if (ADCKey_count < ADC_BUTTON_DEBOUNCE_DELAY) { - raw_ADCKey_value = hal.adc_value(); + raw_ADCKey_value = HAL_READ_ADC(); if (raw_ADCKey_value <= 900UL * HAL_ADC_RANGE / 1024UL) { NOMORE(current_ADCKey_raw, raw_ADCKey_value); ADCKey_count++; diff --git a/ini/native.ini b/ini/native.ini index eba34afc83..fe5fe3a5d0 100644 --- a/ini/native.ini +++ b/ini/native.ini @@ -34,14 +34,14 @@ src_filter = ${common.default_src_filter} + [simulator_common] 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_flags = ${common.build_flags} -std=gnu++17 -D__PLAT_NATIVE_SIM__ -DU8G_HAL_LINKS -I/usr/include/SDL2 -IMarlin -IMarlin/src/HAL/NATIVE_SIM/include -IMarlin/src/HAL/NATIVE_SIM/u8g src_build_flags = -Wall -Wno-expansion-to-defined -Wcast-align release_flags = -g0 -O3 -flto debug_build_flags = -fstack-protector-strong -g -g3 -ggdb lib_compat_mode = off src_filter = ${common.default_src_filter} + lib_deps = ${common.lib_deps} - MarlinSimUI=https://github.com/thinkyhead/MarlinSimUI/archive/updated_marlin_hal_2093.zip + MarlinSimUI=https://github.com/p3p/MarlinSimUI/archive/master.zip Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/marlin_sim_native.zip LiquidCrystal=https://github.com/p3p/LiquidCrystal/archive/master.zip extra_scripts = ${common.extra_scripts} From 7762df7251f1da3be2933670084b416d4a06c89f Mon Sep 17 00:00:00 2001 From: EvilGremlin <22657714+EvilGremlin@users.noreply.github.com> Date: Sun, 26 Dec 2021 09:46:13 +0300 Subject: [PATCH 274/532] =?UTF-8?q?=F0=9F=94=A7=20Check=20Chiron=20LCD=20r?= =?UTF-8?q?equirements=20(#23353)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: EvilGremlin <22657714+EvilGremlin@users.noreply.github.com> --- Marlin/src/inc/SanityCheck.h | 14 ++++++++++++++ .../src/lcd/extui/anycubic_chiron/chiron_tft.cpp | 2 +- .../ftdi_eve_touch_ui/generic/about_screen.cpp | 4 ++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index c8ac48f7cf..ab1a6adec5 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2765,6 +2765,20 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "Please select only one of CHIRON_TFT_STANDARD or CHIRON_TFT_NEW." #endif +#if ENABLED(ANYCUBIC_LCD_CHIRON) + #if !defined(BEEPER_PIN) + #error "ANYCUBIC_LCD_CHIRON requires BEEPER_PIN" + #elif DISABLED(SDSUPPORT) + #error "ANYCUBIC_LCD_CHIRON requires SDSUPPORT" + #elif TEMP_SENSOR_BED == 0 + #error "ANYCUBIC_LCD_CHIRON requires heatbed (TEMP_SENSOR_BED)" + #elif NONE(AUTO_BED_LEVELING_BILINEAR, AUTO_BED_LEVELING_UBL, MESH_BED_LEVELING) + #error "ANYCUBIC_LCD_CHIRON requires one of: AUTO_BED_LEVELING_BILINEAR, AUTO_BED_LEVELING_UBL or MESH_BED_LEVELING" + #elif DISABLED(BABYSTEPPING) + #error "ANYCUBIC_LCD_CHIRON requires BABYSTEPPING" + #endif +#endif + #if EITHER(MKS_TS35_V2_0, BTT_TFT35_SPI_V1_0) && SD_CONNECTION_IS(LCD) #error "SDCARD_CONNECTION cannot be set to LCD for the enabled TFT. No available SD card reader." #endif diff --git a/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp b/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp index 9f558e3a98..6db5972fa7 100644 --- a/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp +++ b/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp @@ -243,7 +243,7 @@ void ChironTFT::StatusChange(const char * const msg) { case AC_printer_probing: { // If probing completes ok save the mesh and park // Ignore the custom machine name - if (strcmp_P(msg + strlen(CUSTOM_MACHINE_NAME), MARLIN_msg_ready) == 0) { + if (strcmp_P(msg + strlen(MACHINE_NAME), MARLIN_msg_ready) == 0) { injectCommands(F("M500\nG27")); SendtoTFTLN(AC_msg_probing_complete); printer_state = AC_printer_idle; diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp index 6cb85e47c4..43e5c33365 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp @@ -69,8 +69,8 @@ void AboutScreen::onRedraw(draw_mode_t) { #endif draw_text_box(cmd, HEADING_POS, - #ifdef CUSTOM_MACHINE_NAME - F(CUSTOM_MACHINE_NAME) + #ifdef MACHINE_NAME + F(MACHINE_NAME) #else GET_TEXT_F(MSG_ABOUT_TOUCH_PANEL_1) #endif From 56ac68172796d03c15235738fcb234c48167d807 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 26 Dec 2021 03:20:29 -0600 Subject: [PATCH 275/532] =?UTF-8?q?=F0=9F=8E=A8=20Pins=20and=20SDIO=20clea?= =?UTF-8?q?nup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{Sd2Card_sdio_stm32duino.cpp => sdio.cpp} | 10 +- Marlin/src/HAL/STM32/sdio.h | 29 +++ Marlin/src/pins/stm32f4/pins_ANET_ET4.h | 15 +- .../src/pins/stm32f4/pins_BLACK_STM32F407VE.h | 18 +- Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h | 7 - .../pins/stm32f4/pins_BTT_SKR_V2_0_common.h | 10 - .../src/pins/stm32f4/pins_STEVAL_3DP001V1.h | 219 +++++++++--------- 7 files changed, 147 insertions(+), 161 deletions(-) rename Marlin/src/HAL/STM32/{Sd2Card_sdio_stm32duino.cpp => sdio.cpp} (98%) create mode 100644 Marlin/src/HAL/STM32/sdio.h diff --git a/Marlin/src/HAL/STM32/Sd2Card_sdio_stm32duino.cpp b/Marlin/src/HAL/STM32/sdio.cpp similarity index 98% rename from Marlin/src/HAL/STM32/Sd2Card_sdio_stm32duino.cpp rename to Marlin/src/HAL/STM32/sdio.cpp index 54e1820c78..18b4434dfa 100644 --- a/Marlin/src/HAL/STM32/Sd2Card_sdio_stm32duino.cpp +++ b/Marlin/src/HAL/STM32/sdio.cpp @@ -28,6 +28,8 @@ #if ENABLED(SDIO_SUPPORT) +#include "sdio.h" + #include #include @@ -49,14 +51,6 @@ #error "SDIO only supported with STM32F103xE, STM32F103xG, STM32F4xx, or STM32F7xx." #endif -// Fixed -#define SDIO_D0_PIN PC8 -#define SDIO_D1_PIN PC9 -#define SDIO_D2_PIN PC10 -#define SDIO_D3_PIN PC11 -#define SDIO_CK_PIN PC12 -#define SDIO_CMD_PIN PD2 - SD_HandleTypeDef hsd; // create SDIO structure // F4 supports one DMA for RX and another for TX, but Marlin will never // do read and write at same time, so we use the same DMA for both. diff --git a/Marlin/src/HAL/STM32/sdio.h b/Marlin/src/HAL/STM32/sdio.h new file mode 100644 index 0000000000..cf5539c3c7 --- /dev/null +++ b/Marlin/src/HAL/STM32/sdio.h @@ -0,0 +1,29 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +#define SDIO_D0_PIN PC8 +#define SDIO_D1_PIN PC9 +#define SDIO_D2_PIN PC10 +#define SDIO_D3_PIN PC11 +#define SDIO_CK_PIN PC12 +#define SDIO_CMD_PIN PD2 diff --git a/Marlin/src/pins/stm32f4/pins_ANET_ET4.h b/Marlin/src/pins/stm32f4/pins_ANET_ET4.h index eb3af65f32..43aefe97f5 100644 --- a/Marlin/src/pins/stm32f4/pins_ANET_ET4.h +++ b/Marlin/src/pins/stm32f4/pins_ANET_ET4.h @@ -203,19 +203,12 @@ #if ENABLED(SDSUPPORT) - #define SDIO_D0_PIN PC8 - #define SDIO_D1_PIN PC9 - #define SDIO_D2_PIN PC10 - #define SDIO_D3_PIN PC11 - #define SDIO_CK_PIN PC12 - #define SDIO_CMD_PIN PD2 - #if DISABLED(SDIO_SUPPORT) #define SOFTWARE_SPI - #define SDSS SDIO_D3_PIN - #define SD_SCK_PIN SDIO_CK_PIN - #define SD_MISO_PIN SDIO_D0_PIN - #define SD_MOSI_PIN SDIO_CMD_PIN + #define SDSS PC11 + #define SD_SCK_PIN PC12 + #define SD_MISO_PIN PC8 + #define SD_MOSI_PIN PD2 #endif #ifndef SD_DETECT_PIN diff --git a/Marlin/src/pins/stm32f4/pins_BLACK_STM32F407VE.h b/Marlin/src/pins/stm32f4/pins_BLACK_STM32F407VE.h index d8a83bef3a..061680aa79 100644 --- a/Marlin/src/pins/stm32f4/pins_BLACK_STM32F407VE.h +++ b/Marlin/src/pins/stm32f4/pins_BLACK_STM32F407VE.h @@ -140,25 +140,17 @@ // // Onboard SD support // -#define SDIO_D0_PIN PC8 -#define SDIO_D1_PIN PC9 -#define SDIO_D2_PIN PC10 -#define SDIO_D3_PIN PC11 -#define SDIO_CK_PIN PC12 -#define SDIO_CMD_PIN PD2 - #ifndef SDCARD_CONNECTION #define SDCARD_CONNECTION ONBOARD #endif #if SD_CONNECTION_IS(ONBOARD) #define SDIO_SUPPORT // Use SDIO for onboard SD - - #ifndef SDIO_SUPPORT + #if DISABLED(SDIO_SUPPORT) #define SOFTWARE_SPI // Use soft SPI for onboard SD - #define SDSS SDIO_D3_PIN - #define SD_SCK_PIN SDIO_CK_PIN - #define SD_MISO_PIN SDIO_D0_PIN - #define SD_MOSI_PIN SDIO_CMD_PIN + #define SDSS PC11 + #define SD_SCK_PIN PC12 + #define SD_MISO_PIN PC8 + #define SD_MOSI_PIN PD2 #endif #endif diff --git a/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h b/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h index d1f38f5c80..e63b534eff 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h @@ -338,13 +338,6 @@ #if SD_CONNECTION_IS(ONBOARD) #define SDIO_SUPPORT // Use SDIO for onboard SD - #define SDIO_D0_PIN PC8 - #define SDIO_D1_PIN PC9 - #define SDIO_D2_PIN PC10 - #define SDIO_D3_PIN PC11 - #define SDIO_CK_PIN PC12 - #define SDIO_CMD_PIN PD2 - //#define SDIO_CLOCK 48000000 #define SD_DETECT_PIN PC4 #elif SD_CONNECTION_IS(CUSTOM_CABLE) diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h index 196ca46319..6d23bc8b20 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h @@ -365,24 +365,14 @@ // Must use soft SPI because Marlin's default hardware SPI is tied to LCD's EXP2 // #if SD_CONNECTION_IS(LCD) - #define SDSS EXP2_07_PIN #define SD_SS_PIN SDSS #define SD_SCK_PIN EXP2_09_PIN #define SD_MISO_PIN EXP2_10_PIN #define SD_MOSI_PIN EXP2_05_PIN #define SD_DETECT_PIN EXP2_04_PIN - #elif SD_CONNECTION_IS(ONBOARD) - #define SDIO_SUPPORT // Use SDIO for onboard SD - #define SDIO_D0_PIN PC8 - #define SDIO_D1_PIN PC9 - #define SDIO_D2_PIN PC10 - #define SDIO_D3_PIN PC11 - #define SDIO_CK_PIN PC12 - #define SDIO_CMD_PIN PD2 - #elif SD_CONNECTION_IS(CUSTOM_CABLE) #error "No custom SD drive cable defined for this board." #endif diff --git a/Marlin/src/pins/stm32f4/pins_STEVAL_3DP001V1.h b/Marlin/src/pins/stm32f4/pins_STEVAL_3DP001V1.h index 7ccb57e238..98d2220878 100644 --- a/Marlin/src/pins/stm32f4/pins_STEVAL_3DP001V1.h +++ b/Marlin/src/pins/stm32f4/pins_STEVAL_3DP001V1.h @@ -48,13 +48,13 @@ // // Limit Switches // -#define X_MIN_PIN 39 // PD8 X_STOP -#define Y_MIN_PIN 40 // PD9 Y_STOP -#define Z_MIN_PIN 41 // PD10 Z_STOP +#define X_MIN_PIN PD8 // X_STOP +#define Y_MIN_PIN PD9 // Y_STOP +#define Z_MIN_PIN PD10 // Z_STOP -#define X_MAX_PIN 44 // PD0 W_STOP -#define Y_MAX_PIN 43 // PA8 V_STOP -#define Z_MAX_PIN 42 // PD11 U_STOP +#define X_MAX_PIN PD0 // W_STOP +#define Y_MAX_PIN PA8 // V_STOP +#define Z_MAX_PIN PD11 // U_STOP // // Z Probe (when not Z_MIN_PIN) @@ -66,64 +66,64 @@ // // Filament runout // -//#define FIL_RUNOUT_PIN 53 // PA3 BED_THE +//#define FIL_RUNOUT_PIN PA3 // BED_THE // // Steppers // -#define X_STEP_PIN 61 // PE14 X_PWM -#define X_DIR_PIN 62 // PE15 X_DIR -#define X_ENABLE_PIN 60 // PE13 X_RES -#define X_CS_PIN 16 // PA4 SPI_CS +#define X_STEP_PIN PE14 // X_PWM +#define X_DIR_PIN PE15 // X_DIR +#define X_ENABLE_PIN PE13 // X_RES +#define X_CS_PIN PA4 // SPI_CS -#define Y_STEP_PIN 64 // PB10 Y_PWM -#define Y_DIR_PIN 65 // PE9 Y_DIR -#define Y_ENABLE_PIN 63 // PE10 Y_RES -#define Y_CS_PIN 16 // PA4 SPI_CS +#define Y_STEP_PIN PB10 // Y_PWM +#define Y_DIR_PIN PE9 // Y_DIR +#define Y_ENABLE_PIN PE10 // Y_RES +#define Y_CS_PIN PA4 // SPI_CS -#define Z_STEP_PIN 67 // PC6 Z_PWM -#define Z_DIR_PIN 68 // PC0 Z_DIR -#define Z_ENABLE_PIN 66 // PC15 Z_RES -#define Z_CS_PIN 16 // PA4 SPI_CS +#define Z_STEP_PIN PC6 // Z_PWM +#define Z_DIR_PIN PC0 // Z_DIR +#define Z_ENABLE_PIN PC15 // Z_RES +#define Z_CS_PIN PA4 // SPI_CS -#define E0_STEP_PIN 71 // PD12 E1_PW -#define E0_DIR_PIN 70 // PC13 E1_DIR -#define E0_ENABLE_PIN 69 // PC14 E1_RE -#define E0_CS_PIN 16 // PA4 SPI_CS +#define E0_STEP_PIN PD12 // E1_PW +#define E0_DIR_PIN PC13 // E1_DIR +#define E0_ENABLE_PIN PC14 // E1_RE +#define E0_CS_PIN PA4 // SPI_CS -#define E1_STEP_PIN 73 // PE5 E2_PWM -#define E1_DIR_PIN 74 // PE6 E2_DIR -#define E1_ENABLE_PIN 72 // PE4 E2_RESE -#define E1_CS_PIN 16 // PA4 SPI_CS +#define E1_STEP_PIN PE5 // E2_PWM +#define E1_DIR_PIN PE6 // E2_DIR +#define E1_ENABLE_PIN PE4 // E2_RESE +#define E1_CS_PIN PA4 // SPI_CS -#define E2_STEP_PIN 77 // PB8 E3_PWM -#define E2_DIR_PIN 76 // PE2 E3_DIR -#define E2_ENABLE_PIN 75 // PE3 E3_RESE -#define E2_CS_PIN 16 // PA4 SPI_CS +#define E2_STEP_PIN PB8 // E3_PWM +#define E2_DIR_PIN PE2 // E3_DIR +#define E2_ENABLE_PIN PE3 // E3_RESE +#define E2_CS_PIN PA4 // SPI_CS // needed to pass a sanity check -#define X2_CS_PIN 16 // PA4 SPI_CS -#define Y2_CS_PIN 16 // PA4 SPI_CS -#define Z2_CS_PIN 16 // PA4 SPI_CS -#define Z3_CS_PIN 16 // PA4 SPI_CS -#define E3_CS_PIN 16 // PA4 SPI_CS -#define E4_CS_PIN 16 // PA4 SPI_CS -#define E5_CS_PIN 16 // PA4 SPI_CS +#define X2_CS_PIN PA4 // SPI_CS +#define Y2_CS_PIN PA4 // SPI_CS +#define Z2_CS_PIN PA4 // SPI_CS +#define Z3_CS_PIN PA4 // SPI_CS +#define E3_CS_PIN PA4 // SPI_CS +#define E4_CS_PIN PA4 // SPI_CS +#define E5_CS_PIN PA4 // SPI_CS #if HAS_L64XX - #define L6470_CHAIN_SCK_PIN 17 // PA5 - #define L6470_CHAIN_MISO_PIN 18 // PA6 - #define L6470_CHAIN_MOSI_PIN 19 // PA7 - #define L6470_CHAIN_SS_PIN 16 // PA4 + #define L6470_CHAIN_SCK_PIN PA5 + #define L6470_CHAIN_MISO_PIN PA6 + #define L6470_CHAIN_MOSI_PIN PA7 + #define L6470_CHAIN_SS_PIN PA4 //#define SD_SCK_PIN L6470_CHAIN_SCK_PIN //#define SD_MISO_PIN L6470_CHAIN_MISO_PIN //#define SD_MOSI_PIN L6470_CHAIN_MOSI_PIN #else - //#define SD_SCK_PIN 13 // PB13 SPI_S - //#define SD_MISO_PIN 12 // PB14 SPI_M - //#define SD_MOSI_PIN 11 // PB15 SPI_M + //#define SD_SCK_PIN PB13 // SPI_S + //#define SD_MISO_PIN PB14 // SPI_M + //#define SD_MOSI_PIN PB15 // SPI_M #endif /** @@ -144,114 +144,109 @@ // // Temperature Sensors // -#define TEMP_0_PIN 3 // Analog input 3, digital pin 54 PA0 E1_THERMISTOR -#define TEMP_1_PIN 4 // Analog input 4, digital pin 55 PA1 E2_THERMISTOR -#define TEMP_2_PIN 5 // Analog input 5, digital pin 56 PA2 E3_THERMISTOR -#define TEMP_BED_PIN 0 // Analog input 0, digital pin 51 PC2 BED_THERMISTOR_1 -#define TEMP_BED_1_PIN 1 // Analog input 1, digital pin 52 PC3 BED_THERMISTOR_2 -#define TEMP_BED_2_PIN 2 // Analog input 2, digital pin 53 PA3 BED_THERMISTOR_3 +#define TEMP_0_PIN PA0 // Analog input 3, digital pin 54 PA0 E1_THERMISTOR +#define TEMP_1_PIN PA1 // Analog input 4, digital pin 55 PA1 E2_THERMISTOR +#define TEMP_2_PIN PA2 // Analog input 5, digital pin 56 PA2 E3_THERMISTOR +#define TEMP_BED_PIN PC2 // Analog input 0, digital pin 51 PC2 BED_THERMISTOR_1 +#define TEMP_BED_1_PIN PC3 // Analog input 1, digital pin 52 PC3 BED_THERMISTOR_2 +#define TEMP_BED_2_PIN PA3 // Analog input 2, digital pin 53 PA3 BED_THERMISTOR_3 // // Heaters / Fans // -#define HEATER_0_PIN 48 // PC7 E1_HEAT_PWM -#define HEATER_1_PIN 49 // PB0 E2_HEAT_PWM -#define HEATER_2_PIN 50 // PB1 E3_HEAT_PWM -#define HEATER_BED_PIN 46 // PD14 (BED_HEAT_1 FET -#define HEATER_BED_1_PIN 45 // PD13 (BED_HEAT_2 FET -#define HEATER_BED_2_PIN 47 // PD15 (BED_HEAT_3 FET +#define HEATER_0_PIN PC7 // E1_HEAT_PWM +#define HEATER_1_PIN PB0 // E2_HEAT_PWM +#define HEATER_2_PIN PB1 // E3_HEAT_PWM +#define HEATER_BED_PIN PD14 // (BED_HEAT_1 FET +#define HEATER_BED_1_PIN PD13 // (BED_HEAT_2 FET +#define HEATER_BED_2_PIN PD15 // (BED_HEAT_3 FET -#define FAN_PIN 57 // PC4 E1_FAN PWM pin, Part cooling fan FET -#define FAN1_PIN 58 // PC5 E2_FAN PWM pin, Extruder fan FET -#define FAN2_PIN 59 // PE8 E3_FAN PWM pin, Controller fan FET +#define FAN_PIN PC4 // E1_FAN PWM pin, Part cooling fan FET +#define FAN1_PIN PC5 // E2_FAN PWM pin, Extruder fan FET +#define FAN2_PIN PE8 // E3_FAN PWM pin, Controller fan FET #ifndef E0_AUTO_FAN_PIN - #define E0_AUTO_FAN_PIN 58 // FAN1_PIN + #define E0_AUTO_FAN_PIN PC5 // FAN1_PIN #endif // // Misc functions // -#define LED_PIN -1 // 9 // PE1 green LED Heart beat -#define PS_ON_PIN -1 -#define KILL_PIN -1 -#define POWER_LOSS_PIN -1 // PWR_LOSS / nAC_FAULT +#define LED_PIN -1 // 9 // PE1 green LED Heart beat +#define PS_ON_PIN -1 +#define KILL_PIN -1 +#define POWER_LOSS_PIN -1 // PWR_LOSS / nAC_FAULT // // LCD / Controller // -//#define SD_DETECT_PIN 66 // PA15 SD_CA -//#define BEEPER_PIN 24 // PC9 SDIO_D1 -//#define LCD_PINS_RS 65 // PE9 Y_DIR -//#define LCD_PINS_ENABLE 59 // PE8 E3_FAN -//#define LCD_PINS_D4 10 // PB12 SPI_C -//#define LCD_PINS_D5 13 // PB13 SPI_S -//#define LCD_PINS_D6 12 // PB14 SPI_M -//#define LCD_PINS_D7 11 // PB15 SPI_M -//#define BTN_EN1 57 // PC4 E1_FAN -//#define BTN_EN2 58 // PC5 E2_FAN -//#define BTN_ENC 52 // PC3 BED_THE +//#define SD_DETECT_PIN PA15 // SD_CA +//#define BEEPER_PIN PC9 // SDIO_D1 +//#define LCD_PINS_RS PE9 // Y_DIR +//#define LCD_PINS_ENABLE PE8 // E3_FAN +//#define LCD_PINS_D4 PB12 // SPI_C +//#define LCD_PINS_D5 PB13 // SPI_S +//#define LCD_PINS_D6 PB14 // SPI_M +//#define LCD_PINS_D7 PB15 // SPI_M +//#define BTN_EN1 PC4 // E1_FAN +//#define BTN_EN2 PC5 // E2_FAN +//#define BTN_ENC PC3 // BED_THE // // Extension pins // -//#define EXT0_PIN 49 // PB0 E2_HEAT -//#define EXT1_PIN 50 // PB1 E3_HEAT -//#define EXT2_PIN // PB2 not used (tied to ground -//#define EXT3_PIN 39 // PD8 X_STOP -//#define EXT4_PIN 40 // PD9 Y_STOP -//#define EXT5_PIN 41 // PD10 Z_STOP -//#define EXT6_PIN 42 // PD11 -//#define EXT7_PIN 71 // PD12 E1_PW -//#define EXT8_PIN 64 // PB10 Y_PWM +//#define EXT0_PIN PB0 //E2_HEAT +//#define EXT1_PIN PB1 //E3_HEAT +//#define EXT2_PIN PB2 //not used (tied to ground +//#define EXT3_PIN PD8 //X_STOP +//#define EXT4_PIN PD9 //Y_STOP +//#define EXT5_PIN PD10 //Z_STOP +//#define EXT6_PIN PD11 +//#define EXT7_PIN PD12 //E1_PW +//#define EXT8_PIN PB10 //Y_PWM // WIFI -// 2 // PD3 CTS -// 3 // PD4 RTS -// 4 // PD5 TX -// 5 // PD6 RX -// 6 // PB5 WIFI_WAKEUP -// 7 // PE11 WIFI_RESET -// 8 // PE12 WIFI_BOOT +// PD3 CTS +// PD4 RTS +// PD5 TX +// PD6 RX +// PB5 WIFI_WAKEUP +// PE11 WIFI_RESET +// PE12 WIFI_BOOT // I2C USER -// 14 // PB7 SDA -// 15 // PB6 SCL +// PB7 SDA +// PB6 SCL // JTAG -// 20 // PA13 JTAG_TMS/SWDIO -// 21 // PA14 JTAG_TCK/SWCLK -// 22 // PB3 JTAG_TDO/SWO +// PA13 JTAG_TMS/SWDIO +// PA14 JTAG_TCK/SWCLK +// PB3 JTAG_TDO/SWO // // Onboard SD support // -#define SDIO_D0_PIN 23 // PC8 SDIO_D0 -#define SDIO_D1_PIN 24 // PC9 SDIO_D1 -//#define SD_CARD_DETECT_PIN 25 // PA15 SD_CARD_DETECT -#define SDIO_D2_PIN 26 // PC10 SDIO_D2 -#define SDIO_D3_PIN 27 // PC11 SDIO_D3 -#define SDIO_CK_PIN 28 // PC12 SDIO_CK -#define SDIO_CMD_PIN 29 // PD2 SDIO_CMD - #ifndef SDCARD_CONNECTION #define SDCARD_CONNECTION ONBOARD #endif #if SD_CONNECTION_IS(ONBOARD) - #define SDIO_SUPPORT // Use SDIO for onboard SD - #ifndef SDIO_SUPPORT + #define SDIO_SUPPORT // Use SDIO for onboard SD + #if DISABLED(SDIO_SUPPORT) #define SOFTWARE_SPI // Use soft SPI for onboard SD - #define SDSS SDIO_D3_PIN - #define SD_SCK_PIN SDIO_CK_PIN - #define SD_MISO_PIN SDIO_D0_PIN - #define SD_MOSI_PIN SDIO_CMD_PIN + #define SDSS PC11 + #define SD_SCK_PIN PC12 + #define SD_MISO_PIN PC8 + #define SD_MOSI_PIN PD2 #endif + + //#define SD_CARD_DETECT_PIN PA15 // SD_CARD_DETECT + #endif #ifndef SDSS - #define SDSS 16 // PA4 SPI_CS + #define SDSS PA4 // SPI_CS #endif // OTG From 7d462915b325c5590bfcdc1debe3bc40c87e9fcd Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 27 Dec 2021 01:05:53 +0000 Subject: [PATCH 276/532] [cron] Bump distribution date (2021-12-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 fca302288f..0310f09749 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 "2021-12-26" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 d2b7a93775..97ccbdbaa5 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 "2021-12-26" + #define STRING_DISTRIBUTION_DATE "2021-12-27" #endif /** From 9345eedb6453e047d65ef0e9a06f63dad7f769fc Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 27 Dec 2021 14:19:55 -0600 Subject: [PATCH 277/532] =?UTF-8?q?=F0=9F=8E=A8=20Clean=20up=20ST=20Eval?= =?UTF-8?q?=203DP001=20V1=20pins?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pins/stm32f4/pins_STEVAL_3DP001V1.h | 260 ++++++++---------- 1 file changed, 116 insertions(+), 144 deletions(-) diff --git a/Marlin/src/pins/stm32f4/pins_STEVAL_3DP001V1.h b/Marlin/src/pins/stm32f4/pins_STEVAL_3DP001V1.h index 98d2220878..0b527a6fdb 100644 --- a/Marlin/src/pins/stm32f4/pins_STEVAL_3DP001V1.h +++ b/Marlin/src/pins/stm32f4/pins_STEVAL_3DP001V1.h @@ -60,13 +60,13 @@ // Z Probe (when not Z_MIN_PIN) // //#ifndef Z_MIN_PROBE_PIN -// #define Z_MIN_PROBE_PIN 16 // PA4 +// #define Z_MIN_PROBE_PIN PA4 // SPI1_CS //#endif // // Filament runout // -//#define FIL_RUNOUT_PIN PA3 // BED_THE +//#define FIL_RUNOUT_PIN PA3 // BED_THERMISTOR_3 // // Steppers @@ -74,56 +74,56 @@ #define X_STEP_PIN PE14 // X_PWM #define X_DIR_PIN PE15 // X_DIR -#define X_ENABLE_PIN PE13 // X_RES -#define X_CS_PIN PA4 // SPI_CS +#define X_ENABLE_PIN PE13 // X_RESET +#define X_CS_PIN PA4 // SPI1_CS #define Y_STEP_PIN PB10 // Y_PWM #define Y_DIR_PIN PE9 // Y_DIR -#define Y_ENABLE_PIN PE10 // Y_RES -#define Y_CS_PIN PA4 // SPI_CS +#define Y_ENABLE_PIN PE10 // Y_RESET +#define Y_CS_PIN PA4 // SPI1_CS #define Z_STEP_PIN PC6 // Z_PWM #define Z_DIR_PIN PC0 // Z_DIR -#define Z_ENABLE_PIN PC15 // Z_RES -#define Z_CS_PIN PA4 // SPI_CS +#define Z_ENABLE_PIN PC15 // Z_RESET +#define Z_CS_PIN PA4 // SPI1_CS #define E0_STEP_PIN PD12 // E1_PW #define E0_DIR_PIN PC13 // E1_DIR -#define E0_ENABLE_PIN PC14 // E1_RE -#define E0_CS_PIN PA4 // SPI_CS +#define E0_ENABLE_PIN PC14 // E1_RESET +#define E0_CS_PIN PA4 // SPI1_CS #define E1_STEP_PIN PE5 // E2_PWM #define E1_DIR_PIN PE6 // E2_DIR -#define E1_ENABLE_PIN PE4 // E2_RESE -#define E1_CS_PIN PA4 // SPI_CS +#define E1_ENABLE_PIN PE4 // E2_RESET +#define E1_CS_PIN PA4 // SPI1_CS #define E2_STEP_PIN PB8 // E3_PWM #define E2_DIR_PIN PE2 // E3_DIR -#define E2_ENABLE_PIN PE3 // E3_RESE -#define E2_CS_PIN PA4 // SPI_CS +#define E2_ENABLE_PIN PE3 // E3_RESET +#define E2_CS_PIN PA4 // SPI1_CS // needed to pass a sanity check -#define X2_CS_PIN PA4 // SPI_CS -#define Y2_CS_PIN PA4 // SPI_CS -#define Z2_CS_PIN PA4 // SPI_CS -#define Z3_CS_PIN PA4 // SPI_CS -#define E3_CS_PIN PA4 // SPI_CS -#define E4_CS_PIN PA4 // SPI_CS -#define E5_CS_PIN PA4 // SPI_CS +#define X2_CS_PIN PA4 // SPI1_CS +#define Y2_CS_PIN PA4 // SPI1_CS +#define Z2_CS_PIN PA4 // SPI1_CS +#define Z3_CS_PIN PA4 // SPI1_CS +#define E3_CS_PIN PA4 // SPI1_CS +#define E4_CS_PIN PA4 // SPI1_CS +#define E5_CS_PIN PA4 // SPI1_CS #if HAS_L64XX - #define L6470_CHAIN_SCK_PIN PA5 - #define L6470_CHAIN_MISO_PIN PA6 - #define L6470_CHAIN_MOSI_PIN PA7 - #define L6470_CHAIN_SS_PIN PA4 + #define L6470_CHAIN_SCK_PIN PA5 // SPI1_SCK + #define L6470_CHAIN_MISO_PIN PA6 // SPI1_MISO + #define L6470_CHAIN_MOSI_PIN PA7 // SPI1_MOSI + #define L6470_CHAIN_SS_PIN PA4 // SPI1_CS //#define SD_SCK_PIN L6470_CHAIN_SCK_PIN //#define SD_MISO_PIN L6470_CHAIN_MISO_PIN //#define SD_MOSI_PIN L6470_CHAIN_MOSI_PIN #else - //#define SD_SCK_PIN PB13 // SPI_S - //#define SD_MISO_PIN PB14 // SPI_M - //#define SD_MOSI_PIN PB15 // SPI_M + //#define SD_SCK_PIN PB13 // SPI2_SCK + //#define SD_MISO_PIN PB14 // SPI2_MISO + //#define SD_MOSI_PIN PB15 // SPI2_MOSI #endif /** @@ -144,12 +144,12 @@ // // Temperature Sensors // -#define TEMP_0_PIN PA0 // Analog input 3, digital pin 54 PA0 E1_THERMISTOR -#define TEMP_1_PIN PA1 // Analog input 4, digital pin 55 PA1 E2_THERMISTOR -#define TEMP_2_PIN PA2 // Analog input 5, digital pin 56 PA2 E3_THERMISTOR -#define TEMP_BED_PIN PC2 // Analog input 0, digital pin 51 PC2 BED_THERMISTOR_1 -#define TEMP_BED_1_PIN PC3 // Analog input 1, digital pin 52 PC3 BED_THERMISTOR_2 -#define TEMP_BED_2_PIN PA3 // Analog input 2, digital pin 53 PA3 BED_THERMISTOR_3 +#define TEMP_0_PIN PA0 // Analog Input 3 +#define TEMP_1_PIN PA1 // Analog Input 4 +#define TEMP_2_PIN PA2 // Analog Input 5 +#define TEMP_BED_PIN PC2 // Analog Input 0 +#define TEMP_BED_1_PIN PC3 // Analog Input 1 +#define TEMP_BED_2_PIN PA3 // Analog Input 2 // // Heaters / Fans @@ -157,9 +157,9 @@ #define HEATER_0_PIN PC7 // E1_HEAT_PWM #define HEATER_1_PIN PB0 // E2_HEAT_PWM #define HEATER_2_PIN PB1 // E3_HEAT_PWM -#define HEATER_BED_PIN PD14 // (BED_HEAT_1 FET -#define HEATER_BED_1_PIN PD13 // (BED_HEAT_2 FET -#define HEATER_BED_2_PIN PD15 // (BED_HEAT_3 FET +#define HEATER_BED_PIN PD14 // BED_HEAT_1 FET +#define HEATER_BED_1_PIN PD13 // BED_HEAT_2 FET +#define HEATER_BED_2_PIN PD15 // BED_HEAT_3 FET #define FAN_PIN PC4 // E1_FAN PWM pin, Part cooling fan FET #define FAN1_PIN PC5 // E2_FAN PWM pin, Extruder fan FET @@ -172,7 +172,7 @@ // // Misc functions // -#define LED_PIN -1 // 9 // PE1 green LED Heart beat +#define LED_PIN -1 // PE1 Green LED Heartbeat #define PS_ON_PIN -1 #define KILL_PIN -1 #define POWER_LOSS_PIN -1 // PWR_LOSS / nAC_FAULT @@ -180,30 +180,30 @@ // // LCD / Controller // -//#define SD_DETECT_PIN PA15 // SD_CA +//#define SD_DETECT_PIN PA15 // SD_CARD_DETECT //#define BEEPER_PIN PC9 // SDIO_D1 //#define LCD_PINS_RS PE9 // Y_DIR //#define LCD_PINS_ENABLE PE8 // E3_FAN -//#define LCD_PINS_D4 PB12 // SPI_C -//#define LCD_PINS_D5 PB13 // SPI_S -//#define LCD_PINS_D6 PB14 // SPI_M -//#define LCD_PINS_D7 PB15 // SPI_M +//#define LCD_PINS_D4 PB12 // SPI2_CS +//#define LCD_PINS_D5 PB13 // SPI2_SCK +//#define LCD_PINS_D6 PB14 // SPI2_MISO +//#define LCD_PINS_D7 PB15 // SPI2_MOSI //#define BTN_EN1 PC4 // E1_FAN //#define BTN_EN2 PC5 // E2_FAN -//#define BTN_ENC PC3 // BED_THE +//#define BTN_ENC PC3 // BED_THERMISTOR_2 // // Extension pins // -//#define EXT0_PIN PB0 //E2_HEAT -//#define EXT1_PIN PB1 //E3_HEAT -//#define EXT2_PIN PB2 //not used (tied to ground -//#define EXT3_PIN PD8 //X_STOP -//#define EXT4_PIN PD9 //Y_STOP -//#define EXT5_PIN PD10 //Z_STOP -//#define EXT6_PIN PD11 -//#define EXT7_PIN PD12 //E1_PW -//#define EXT8_PIN PB10 //Y_PWM +//#define EXT0_PIN PB0 // E2_HEAT +//#define EXT1_PIN PB1 // E3_HEAT +//#define EXT2_PIN PB2 // not used (tied to ground) +//#define EXT3_PIN PD8 // X_STOP +//#define EXT4_PIN PD9 // Y_STOP +//#define EXT5_PIN PD10 // Z_STOP +//#define EXT6_PIN PD11 // U_STOP +//#define EXT7_PIN PD12 // E1_PWM +//#define EXT8_PIN PB10 // Y_PWM // WIFI // PD3 CTS @@ -241,113 +241,85 @@ #define SD_MOSI_PIN PD2 #endif - //#define SD_CARD_DETECT_PIN PA15 // SD_CARD_DETECT + //#define SD_DETECT_PIN PA15 #endif #ifndef SDSS - #define SDSS PA4 // SPI_CS + #define SDSS PA4 // SPI1_CS #endif // OTG -// 30 // PA11 OTG_DM -// 31 // PA12 OTG_DP +// PA11 OTG_DM +// PA12 OTG_DP // USER_PINS -// 34 // PD7 USER3 -// 35 // PB9 USER1 -// 36 // PE0 USER2 -// 37 // PB4 USER4 +// PD7 USER3 +// PB9 USER1 +// PE0 USER2 +// PB4 USER4 // USERKET -// 38 // PE7 USER_BUTTON +// PE7 USER_BUTTON -// 0 // PA9 TX -// 1 // PA10 RX +// PA9 TX +// PA10 RX // IR/PROBE -// 32 // PD1 IR_OUT -// 33 // PC1 IR_ON +// PD1 IR_OUT +// PC1 IR_ON /** * Logical pin vs. port/pin cross reference * - * PA0 54 // E1_THERMISTOR PA9 0 // TX - * PA1 55 // E2_THERMISTOR PA10 1 // RX - * PA2 56 // E3_THERMISTOR PD3 2 // CTS - * PA3 53 // BED_THERMISTOR_3 PD4 3 // RTS - * PA4 16 // SPI_CS PD5 4 // TX - * PA5 17 // SPI_SCK PD6 5 // RX - * PA6 18 // SPI_MISO PB5 6 // WIFI_WAKEUP - * PA7 19 // SPI_MOSI PE11 7 // WIFI_RESET - * PA8 43 // V_STOP PE12 8 // WIFI_BOOT - * PA9 0 // TX PE1 9 // STATUS_LED - * PA10 1 // RX PB12 10 // SPI_CS - * PA11 30 // OTG_DM PB15 11 // SPI_MOSI - * PA12 31 // OTG_DP PB14 12 // SPI_MISO - * PA13 20 // JTAG_TMS/SWDIO PB13 13 // SPI_SCK - * PA14 21 // JTAG_TCK/SWCLK PB7 14 // SDA - * PA15 25 // SD_CARD_DETECT PB6 15 // SCL - * PB0 49 // E2_HEAT_PWM PA4 16 // SPI_CS - * PB1 50 // E3_HEAT_PWM PA5 17 // SPI_SCK - * PB3 22 // JTAG_TDO/SWO PA6 18 // SPI_MISO - * PB4 37 // USER4 PA7 19 // SPI_MOSI - * PB5 6 // WIFI_WAKEUP PA13 20 // JTAG_TMS/SWDIO - * PB6 15 // SCL PA14 21 // JTAG_TCK/SWCLK - * PB7 14 // SDA PB3 22 // JTAG_TDO/SWO - * PB8 77 // E3_PWM PC8 23 // SDIO_D0 - * PB9 35 // USER1 PC9 24 // SDIO_D1 - * PB10 64 // Y_PWM PA15 25 // SD_CARD_DETECT - * PB12 10 // SPI_CS PC10 26 // SDIO_D2 - * PB13 13 // SPI_SCK PC11 27 // SDIO_D3 - * PB14 12 // SPI_MISO PC12 28 // SDIO_CK - * PB15 11 // SPI_MOSI PD2 29 // SDIO_CMD - * PC0 68 // Z_DIR PA11 30 // OTG_DM - * PC1 33 // IR_ON PA12 31 // OTG_DP - * PC2 51 // BED_THERMISTOR_1 PD1 32 // IR_OUT - * PC3 52 // BED_THERMISTOR_2 PC1 33 // IR_ON - * PC4 57 // E1_FAN PD7 34 // USER3 - * PC5 58 // E2_FAN PB9 35 // USER1 - * PC6 67 // Z_PWM PE0 36 // USER2 - * PC7 48 // E1_HEAT_PWM PB4 37 // USER4 - * PC8 23 // SDIO_D0 PE7 38 // USER_BUTTON - * PC9 24 // SDIO_D1 PD8 39 // X_STOP - * PC10 26 // SDIO_D2 PD9 40 // Y_STOP - * PC11 27 // SDIO_D3 PD10 41 // Z_STOP - * PC12 28 // SDIO_CK PD11 42 // U_STOP - * PC13 70 // E1_DIR PA8 43 // V_STOP - * PC14 69 // E1_RESET PD0 44 // W_STOP - * PC15 66 // Z_RESET PD13 45 // BED_HEAT_2 - * PD0 44 // W_STOP PD14 46 // BED_HEAT_1 - * PD1 32 // IR_OUT PD15 47 // BED_HEAT_3 - * PD2 29 // SDIO_CMD PC7 48 // E1_HEAT_PWM - * PD3 2 // CTS PB0 49 // E2_HEAT_PWM - * PD4 3 // RTS PB1 50 // E3_HEAT_PWM - * PD5 4 // TX PC2 51 // BED_THERMISTOR_1 - * PD6 5 // RX PC3 52 // BED_THERMISTOR_2 - * PD7 34 // USER3 PA3 53 // BED_THERMISTOR_3 - * PD8 39 // X_STOP PA0 54 // E1_THERMISTOR - * PD9 40 // Y_STOP PA1 55 // E2_THERMISTOR - * PD10 41 // Z_STOP PA2 56 // E3_THERMISTOR - * PD11 42 // U_STOP PC4 57 // E1_FAN - * PD12 71 // E1_PWM PC5 58 // E2_FAN - * PD13 45 // BED_HEAT_2 PE8 59 // E3_FAN - * PD14 46 // BED_HEAT_1 PE13 60 // X_RESET - * PD15 47 // BED_HEAT_3 PE14 61 // X_PWM - * PE0 36 // USER2 PE15 62 // X_DIR - * PE1 9 // STATUS_LED PE10 63 // Y_RESET - * PE2 76 // E3_DIR PB10 64 // Y_PWM - * PE3 75 // E3_RESET PE9 65 // Y_DIR - * PE4 72 // E2_RESET PC15 66 // Z_RESET - * PE5 73 // E2_PWM PC6 67 // Z_PWM - * PE6 74 // E2_DIR PC0 68 // Z_DIR - * PE7 38 // USER_BUTTON PC14 69 // E1_RESET - * PE8 59 // E3_FAN PC13 70 // E1_DIR - * PE9 65 // Y_DIR PD12 71 // E1_PWM - * PE10 63 // Y_RESET PE4 72 // E2_RESET - * PE11 7 // WIFI_RESET PE5 73 // E2_PWM - * PE12 8 // WIFI_BOOT PE6 74 // E2_DIR - * PE13 60 // X_RESET PE3 75 // E3_RESET - * PE14 61 // X_PWM PE2 76 // E3_DIR - * PE15 62 // X_DIR PB8 77 // E3_PWM + * PA0 E1_THERMISTOR PD0 W_STOP + * PA1 E2_THERMISTOR PD1 IR_OUT + * PA2 E3_THERMISTOR PD2 SDIO_CMD + * PA3 BED_THERMISTOR_3 PD3 CTS + * PA4 SPI1_CS PD4 RTS + * PA5 SPI1_SCK PD5 TX + * PA6 SPI1_MISO PD6 RX + * PA7 SPI1_MOSI PD7 USER3 + * PA8 V_STOP PD8 X_STOP + * PA9 TX PD9 Y_STOP + * PA10 RX PD10 Z_STOP + * PA11 OTG_DM PD11 U_STOP + * PA12 OTG_DP PD12 E1_PWM + * PA13 JTAG_TMS/SWDIO PD13 BED_HEAT_2 + * PA14 JTAG_TCK/SWCLK PD14 BED_HEAT_1 + * PA15 SD_CARD_DETECT PD15 BED_HEAT_3 + * + * PB0 E2_HEAT_PWM PE0 USER2 + * PB1 E3_HEAT_PWM PE1 STATUS_LED + * PB2 --- PE2 E3_DIR + * PB3 JTAG_TDO/SWO PE3 E3_RESET + * PB4 USER4 PE4 E2_RESET + * PB5 WIFI_WAKEUP PE5 E2_PWM + * PB6 SCL PE6 E2_DIR + * PB7 SDA PE7 USER_BUTTON + * PB8 E3_PWM PE8 E3_FAN + * PB9 USER1 PE9 Y_DIR + * PB10 Y_PWM PE10 Y_RESET + * PB11 --- PE11 WIFI_RESET + * PB12 SPI2_CS PE12 WIFI_BOOT + * PB13 SPI2_SCK PE13 X_RESET + * PB14 SPI2_MISO PE14 X_PWM + * PB15 SPI2_MOSI PE15 X_DIR + * + * PC0 Z_DIR + * PC1 IR_ON + * PC2 BED_THERMISTOR_1 + * PC3 BED_THERMISTOR_2 + * PC4 E1_FAN + * PC5 E2_FAN + * PC6 Z_PWM + * PC7 E1_HEAT_PWM + * PC8 SDIO_D0 + * PC9 SDIO_D1 + * PC10 SDIO_D2 + * PC11 SDIO_D3 + * PC12 SDIO_CK + * PC13 E1_DIR + * PC14 E1_RESET + * PC15 Z_RESET */ From 3f6147fe85e9f3d1ea255b218a53dbd71040fec3 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 27 Dec 2021 14:28:59 -0600 Subject: [PATCH 278/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20mffp=20usage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/git/mffp | 4 ++-- buildroot/share/git/mfnew | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/buildroot/share/git/mffp b/buildroot/share/git/mffp index 0680b3dba5..ab4dd4c0b7 100755 --- a/buildroot/share/git/mffp +++ b/buildroot/share/git/mffp @@ -6,7 +6,7 @@ # By default: `git push upstream HEAD:bugfix-2.0.x` # -usage() { echo "usage: `basename $0` [1|2] [ref]" 1>&2 } +usage() { echo "usage: `basename $0` [1|2] [ref]" 1>&2 ; } [[ $# < 3 && $1 != "-h" && $1 != "--help" ]] || { usage ; exit 1; } @@ -17,7 +17,7 @@ elif [[ $# == 1 ]]; then MFINFO=$(mfinfo) || exit 1 REF=${1:-HEAD} else - usage + usage ; exit 1 fi IFS=' ' read -a INFO <<< "$MFINFO" diff --git a/buildroot/share/git/mfnew b/buildroot/share/git/mfnew index 6d067a7f08..48703e67a1 100755 --- a/buildroot/share/git/mfnew +++ b/buildroot/share/git/mfnew @@ -5,9 +5,7 @@ # Create a new branch from the default target with the given name # -usage() { - echo "usage: `basename $0` [1|2] [name]" 1>&2 -} +usage() { echo "usage: `basename $0` [1|2] [name]" 1>&2 ; } [[ $# < 3 && $1 != "-h" && $1 != "--help" ]] || { usage; exit 1; } From d557db842598639f4ab49447e216557515b3ba9e Mon Sep 17 00:00:00 2001 From: Ave6683 <53094187+Ave6683@users.noreply.github.com> Date: Mon, 27 Dec 2021 22:28:27 +0100 Subject: [PATCH 279/532] =?UTF-8?q?=E2=9C=A8=20MagLev=20V4=20probe=20by=20?= =?UTF-8?q?MDD=20(#23192)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration.h | 11 +++++++++++ Marlin/src/MarlinCore.cpp | 4 ++++ Marlin/src/core/utility.cpp | 3 ++- Marlin/src/inc/Conditionals_LCD.h | 2 +- Marlin/src/inc/SanityCheck.h | 23 ++++++++++++++++++----- Marlin/src/module/probe.cpp | 15 +++++++++++++++ 6 files changed, 51 insertions(+), 7 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index f0fc4dd7d6..236c6a8a54 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -1089,6 +1089,17 @@ */ //#define BLTOUCH +/** + * MagLev V4 probe by MDD + * + * This probe is deployed and activated by powering a built-in electromagnet. + */ +//#define MAGLEV4 +#if ENABLED(MAGLEV4) + //#define MAGLEV_TRIGGER_PIN 11 // Set to the connected digital output + #define MAGLEV_TRIGGER_DELAY 15 // Changing this risks overheating the coil +#endif + /** * Touch-MI Probe by hotends.fr * diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 5132d07e87..16cd43443c 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -1502,6 +1502,10 @@ void setup() { SETUP_RUN(bltouch.init(/*set_voltage=*/true)); #endif + #if ENABLED(MAGLEV4) + OUT_WRITE(MAGLEV_TRIGGER_PIN, LOW); + #endif + #if ENABLED(I2C_POSITION_ENCODERS) SETUP_RUN(I2CPEM.init()); #endif diff --git a/Marlin/src/core/utility.cpp b/Marlin/src/core/utility.cpp index cc3b1ace2f..19e7626744 100644 --- a/Marlin/src/core/utility.cpp +++ b/Marlin/src/core/utility.cpp @@ -74,7 +74,8 @@ void safe_delay(millis_t ms) { TERN_(Z_PROBE_SLED, "Z_PROBE_SLED") TERN_(Z_PROBE_ALLEN_KEY, "Z_PROBE_ALLEN_KEY") TERN_(SOLENOID_PROBE, "SOLENOID_PROBE") - TERN(PROBE_SELECTED, "", "NONE") + TERN_(MAGLEV4, "MAGLEV4") + IF_DISABLED(PROBE_SELECTED, "NONE") ); #if HAS_BED_PROBE diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index 9e050101aa..803a182654 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -822,7 +822,7 @@ /** * Set a flag for any type of bed probe, including the paper-test */ -#if ANY(HAS_Z_SERVO_PROBE, FIX_MOUNTED_PROBE, NOZZLE_AS_PROBE, TOUCH_MI_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, SOLENOID_PROBE, SENSORLESS_PROBING, RACK_AND_PINION_PROBE) +#if ANY(HAS_Z_SERVO_PROBE, FIX_MOUNTED_PROBE, NOZZLE_AS_PROBE, TOUCH_MI_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, SOLENOID_PROBE, SENSORLESS_PROBING, RACK_AND_PINION_PROBE, MAGLEV4) #define HAS_BED_PROBE 1 #endif diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index ab1a6adec5..50191dd201 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1509,8 +1509,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS */ #if 1 < 0 \ + (DISABLED(BLTOUCH) && HAS_Z_SERVO_PROBE) \ - + COUNT_ENABLED(PROBE_MANUALLY, BLTOUCH, FIX_MOUNTED_PROBE, NOZZLE_AS_PROBE, TOUCH_MI_PROBE, SOLENOID_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, RACK_AND_PINION_PROBE, SENSORLESS_PROBING) - #error "Please enable only one probe option: PROBE_MANUALLY, SENSORLESS_PROBING, BLTOUCH, FIX_MOUNTED_PROBE, NOZZLE_AS_PROBE, TOUCH_MI_PROBE, SOLENOID_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, or Z Servo." + + COUNT_ENABLED(PROBE_MANUALLY, BLTOUCH, FIX_MOUNTED_PROBE, NOZZLE_AS_PROBE, TOUCH_MI_PROBE, SOLENOID_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, RACK_AND_PINION_PROBE, SENSORLESS_PROBING, MAGLEV4) + #error "Please enable only one probe option: PROBE_MANUALLY, SENSORLESS_PROBING, BLTOUCH, FIX_MOUNTED_PROBE, NOZZLE_AS_PROBE, TOUCH_MI_PROBE, SOLENOID_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, MAGLEV4, or Z Servo." #endif #if HAS_BED_PROBE @@ -1612,6 +1612,19 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #endif #endif + /** + * MagLev V4 probe requirements + */ + #if ENABLED(MAGLEV4) + #if !PIN_EXISTS(MAGLEV_TRIGGER) + #error "MAGLEV4 requires MAGLEV_TRIGGER_PIN to be defined." + #elif DISABLED(Z_SAFE_HOMING) + #error "MAGLEV4 requires Z_SAFE_HOMING." + #elif MAGLEV_TRIGGER_DELAY != 15 + #error "MAGLEV_TRIGGER_DELAY should not be changed. Comment out this line to continue." + #endif + #endif + /** * Require pin options and pins to be defined */ @@ -1699,11 +1712,11 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS * Require some kind of probe for bed leveling and probe testing */ #if HAS_ABL_NOT_UBL && !PROBE_SELECTED - #error "Auto Bed Leveling requires one of these: PROBE_MANUALLY, SENSORLESS_PROBING, BLTOUCH, FIX_MOUNTED_PROBE, NOZZLE_AS_PROBE, TOUCH_MI_PROBE, SOLENOID_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, or a Z Servo." + #error "Auto Bed Leveling requires either PROBE_MANUALLY, SENSORLESS_PROBING, or a real probe." #endif #if ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST) - #error "Z_MIN_PROBE_REPEATABILITY_TEST requires a probe: FIX_MOUNTED_PROBE, NOZZLE_AS_PROBE, BLTOUCH, SOLENOID_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, or Z Servo." + #error "Z_MIN_PROBE_REPEATABILITY_TEST requires a real probe." #endif #endif @@ -3443,7 +3456,7 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #if ENABLED(MECHANICAL_GANTRY_CALIBRATION) #if NONE(HAS_MOTOR_CURRENT_DAC, HAS_MOTOR_CURRENT_SPI, HAS_MOTOR_CURRENT_DAC, HAS_TRINAMIC_CONFIG, HAS_MOTOR_CURRENT_PWM) - #error "It is highly recommended to have adjustable current drivers to prevent damage. Disable this line to continue anyway." + #error "Adjustable current drivers are highly recommended to prevent damage. Comment out this line to continue anyway." #elif !defined(GANTRY_CALIBRATION_CURRENT) #error "MECHANICAL_GANTRY_CALIBRATION Requires GANTRY_CALIBRATION_CURRENT to be set." #elif !defined(GANTRY_CALIBRATION_EXTRA_HEIGHT) diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 540b4e1ae6..d1f3eee207 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -121,6 +121,17 @@ xyz_pos_t Probe::offset; // Initialized by settings.load() #endif } +#elif ENABLED(MAGLEV4) + + // Write trigger pin to release the probe + inline void maglev_deploy() { + WRITE(MAGLEV_TRIGGER_PIN, HIGH); + delay(MAGLEV_TRIGGER_DELAY); + WRITE(MAGLEV_TRIGGER_PIN, LOW); + } + + inline void maglev_idle() { do_blocking_move_to_z(10); } + #elif ENABLED(TOUCH_MI_PROBE) // Move to the magnet to unlock the probe @@ -311,6 +322,10 @@ FORCE_INLINE void probe_specific_action(const bool deploy) { WRITE(SOL1_PIN, deploy); #endif + #elif ENABLED(MAGLEV4) + + deploy ? maglev_deploy() : maglev_idle(); + #elif ENABLED(Z_PROBE_SLED) dock_sled(!deploy); From c160a57397bbd31c44c404f7c56a269f8fd802d6 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 27 Dec 2021 17:40:53 -0600 Subject: [PATCH 280/532] =?UTF-8?q?=F0=9F=93=8C=20Define=20MKS=20Monster8?= =?UTF-8?q?=20pins=20for=20MKS=5FMINI=5F12864?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #23324 --- Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h index 2f77c0f9d6..161884c322 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h @@ -339,14 +339,18 @@ // MKS MINI12864 and MKS LCD12864B; If using MKS LCD12864A (Need to remove RPK2 resistor) #if ENABLED(MKS_MINI_12864) - //#define LCD_BACKLIGHT_PIN -1 - //#define LCD_RESET_PIN -1 - #define DOGLCD_A0 PD11 - #define DOGLCD_CS EXP1_04_PIN - //#define DOGLCD_SCK EXP2_09_PIN - //#define DOGLCD_MOSI EXP2_05_PIN + + #define ENABLE_SPI1 + #define FORCE_SOFT_SPI + #define DOGLCD_A0 EXP1_04_PIN + #define DOGLCD_CS EXP1_05_PIN + #define DOGLCD_SCK EXP2_09_PIN + #define DOGLCD_MOSI EXP2_05_PIN + //#define LCD_BACKLIGHT_PIN -1 + //#define LCD_RESET_PIN -1 #elif ENABLED(FYSETC_MINI_12864_2_1) + #define DOGLCD_CS EXP1_08_PIN #define DOGLCD_A0 EXP1_07_PIN #define LCD_PINS_DC DOGLCD_A0 From c5b74319e7459485ac77263ac2c4597ed6fe6cfd Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 28 Dec 2021 01:05:31 +0000 Subject: [PATCH 281/532] [cron] Bump distribution date (2021-12-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 0310f09749..ca2fb62834 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 "2021-12-27" +//#define STRING_DISTRIBUTION_DATE "2021-12-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 97ccbdbaa5..c2963ee832 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 "2021-12-27" + #define STRING_DISTRIBUTION_DATE "2021-12-28" #endif /** From 761b1b93c62e9b70dd97c9579450804219d8f25b Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 27 Dec 2021 20:52:43 -0600 Subject: [PATCH 282/532] =?UTF-8?q?=F0=9F=93=9D=20Consistent=20pin=20heade?= =?UTF-8?q?r=20orientation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/esp32/pins_MKS_TINYBEE.h | 2 +- Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_1.h | 6 +- Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_3.h | 36 +++++----- Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h | 40 +++++------ Marlin/src/pins/lpc1768/pins_BTT_SKR_common.h | 17 ++--- Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h | 4 +- .../src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h | 20 +++--- Marlin/src/pins/lpc1769/pins_MKS_SGEN_L_V2.h | 4 +- Marlin/src/pins/lpc1769/pins_TH3D_EZBOARD.h | 30 ++++---- Marlin/src/pins/ramps/pins_MKS_GEN_13.h | 2 +- Marlin/src/pins/ramps/pins_RAMPS.h | 16 ++--- Marlin/src/pins/stm32f1/pins_BTT_SKR_E3_DIP.h | 48 ++++++------- .../stm32f1/pins_BTT_SKR_MINI_E3_common.h | 62 ++++++++--------- .../src/pins/stm32f1/pins_BTT_SKR_MINI_V1_1.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h | 4 +- Marlin/src/pins/stm32f1/pins_FLY_MINI.h | 4 +- .../pins/stm32f1/pins_MKS_ROBIN_E3_common.h | 2 +- .../src/pins/stm32f4/pins_BTT_BTT002_V1_0.h | 20 +++--- Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h | 52 +++++++------- Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h | 16 ++--- .../pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h | 24 +++---- .../pins/stm32f4/pins_BTT_SKR_PRO_common.h | 32 ++++----- .../pins/stm32f4/pins_BTT_SKR_V2_0_common.h | 26 +++---- Marlin/src/pins/stm32f4/pins_FLYF407ZG.h | 2 +- .../pins/stm32f4/pins_FYSETC_CHEETAH_V20.h | 34 +++++----- Marlin/src/pins/stm32f4/pins_FYSETC_S6.h | 2 +- Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h | 41 +++++------ .../src/pins/stm32f4/pins_TH3D_EZBOARD_V2.h | 36 +++++----- Marlin/src/pins/stm32f7/pins_NUCLEO_F767ZI.h | 4 +- .../pins/stm32g0/pins_BTT_SKR_MINI_E3_V3_0.h | 68 +++++++++---------- 30 files changed, 329 insertions(+), 327 deletions(-) diff --git a/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h b/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h index bfa38adadf..5cae63d31a 100644 --- a/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h +++ b/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h @@ -127,7 +127,7 @@ * ------ ------ * (BEEPER) 149 |10 9 | 13 (BTN_ENC) (SPI MISO) 19 |10 9 | 18 (SPI SCK) * (LCD_EN) 21 | 8 7 | 4 (LCD_RS) (BTN_EN1) 14 | 8 7 | 5 (SPI CS) - * (LCD_D4) 0 | 6 5 16 (LCD_D5) (BTN_EN2) 12 | 6 5 23 (SPI MOSI) + * (LCD_D4) 0 6 5 | 16 (LCD_D5) (BTN_EN2) 12 6 5 | 23 (SPI MOSI) * (LCD_D6) 15 | 4 3 | 17 (LCD_D7) (SPI_DET) 34 | 4 3 | RESET * GND | 2 1 | 5V GND | 2 1 | 3.3V * ------ ------ diff --git a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_1.h b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_1.h index 48b178dab5..f0f57c63ee 100644 --- a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_1.h +++ b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_1.h @@ -60,9 +60,9 @@ /** ------ ------ * 1.30 |10 9 | 2.11 0.17 |10 9 | 0.15 * 0.18 | 8 7 | 0.16 3.26 | 8 7 | 1.23 - * 0.15 6 5 | NC 3.25 6 5 | 0.18 - * NC | 4 3 | NC 1.31 | 4 3 | RESET - * GND | 2 1 | 5V GND | 2 1 | NC + * 0.15 6 5 | -- 3.25 6 5 | 0.18 + * -- | 4 3 | -- 1.31 | 4 3 | RESET + * GND | 2 1 | 5V GND | 2 1 | -- * ------ ------ * EXP1 EXP2 */ diff --git a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_3.h b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_3.h index 97d78c0d24..586fb14e8e 100644 --- a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_3.h +++ b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_3.h @@ -195,7 +195,7 @@ * (LCD_EN) 1.18 | 8 7 | 1.19 (LCD_RS) (BTN_EN1) 3.26 | 8 7 | 0.16 (SD_SS) * (LCD_D4) 1.20 6 5 | 1.21 (LCD_D5) (BTN_EN2) 3.25 6 5 | 0.18 (MOSI) * (LCD_D6) 1.22 | 4 3 | 1.23 (LCD_D7) (SD_DETECT) 1.31 | 4 3 | RESET - * GND | 2 1 | 5V GND | 2 1 | NC + * GND | 2 1 | 5V GND | 2 1 | -- * ------ ------ * EXP1 EXP2 */ @@ -237,11 +237,11 @@ * * BEFORE AFTER * ------ ------ - * GND 1 | 1 2 | 2 5V 5V 1 | 1 2 | 2 GND - * CS 3 | 3 4 | 4 BTN_EN2 CS 3 | 3 4 | 4 BTN_EN2 - * SID 5 | 5 6 6 BTN_EN1 SID 5 | 5 6 6 BTN_EN1 - * open 7 | 7 8 | 8 BTN_ENC CLK 7 | 7 8 | 8 BTN_ENC - * CLK 9 | 9 10 | 10 Beeper open 9 | 9 10 | 10 Beeper + * (CLK) |10 9 | (BEEPER) (BEEPER) |10 9 | -- + * -- | 8 7 | (BTN_ENC) (BTN_ENC) | 8 7 | (CLK) + * (SID) 6 5 | (BTN_EN1) (BTN_EN1) 6 5 | (SID) + * (CS) | 4 3 | (BTN_EN2) (BTN_EN2) | 4 3 | (CS) + * GND | 2 1 | 5V GND | 2 1 | 5V * ------ ------ * LCD LCD */ @@ -270,11 +270,11 @@ * * BEFORE AFTER * ______ ______ - * GND | 1 2 | 5V 5V | 1 2 | GND - * CS | 3 4 | BTN_EN2 CS | 3 4 | BTN_EN2 - * SID | 5 6 BTN_EN1 SID | 5 6 BTN_EN1 - * SCK | 7 8 | BTN_ENC SCK | 7 8 | BTN_ENC - * MOSI | 9 10 | open | 9 10 | MOSI + * |10 9 | (MOSI) (MOSI) |10 9 | -- + * (BTN_ENC) | 8 7 | (SCK) (BTN_ENC) | 8 7 | (SCK) + * (BTN_EN1) 6 5 | (SID) (BTN_EN1) 6 5 | (SID) + * (BTN_EN2) | 4 3 | (CS) (BTN_EN2) | 4 3 | (CS) + * 5V | 2 1 | GND GND | 2 1 | 5V * ------ ------ * LCD LCD */ @@ -424,13 +424,13 @@ /** * Creality Ender-2 display pinout - * ----- - * 5V | 1 2 | GND - * (MOSI) P1_23 | 3 4 | P1_22 (LCD_CS) - * (LCD_A0) P1_21 | 5 6 P1_20 (BTN_EN2) - * (RESET) P1_19 | 7 8 | P1_18 (BTN_EN1) - * (BTN_ENC) P0_28 | 9 10| P1_30 (SCK) - * ----- + * ------ + * (SCK) P1_30 |10 9 | P0_28 (BTN_ENC) + * (BTN_EN1) P1_18 | 8 7 | P1_19 (RESET) + * (BTN_EN2) P1_20 6 5 | P1_21 (LCD_A0) + * (LCD_CS) P1_22 | 4 3 | P1_23 (MOSI) + * GND | 2 1 | 5V + * ------ * EXP1 */ diff --git a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h index b9dc845c5b..03a0360b6e 100644 --- a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h +++ b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h @@ -250,7 +250,7 @@ * 1.18 | 8 7 | 1.19 3.26 | 8 7 | 0.16 * 1.20 6 5 | 1.21 3.25 6 5 | 0.18 * 1.22 | 4 3 | 1.23 1.31 | 4 3 | RESET - * GND | 2 1 | 5V GND | 2 1 | NC + * GND | 2 1 | 5V GND | 2 1 | -- * ------ ------ * EXP1 EXP2 */ @@ -298,11 +298,11 @@ * * BEFORE AFTER * ------ ------ - * GND | 1 2 | 5V 5V | 1 2 | GND - * CS | 3 4 | BTN_EN2 CS | 3 4 | BTN_EN2 - * SID | 5 6 BTN_EN1 SID | 5 6 BTN_EN1 - * open | 7 8 | BTN_ENC open | 7 8 | BTN_ENC - * CLK | 9 10| BEEPER CLK | 9 10| BEEPER + * (BEEPER) | 10 9 | (CLK) (BEEPER) | 10 9 | (CLK) + * (BTN_ENC) | 8 7 | -- (BTN_ENC) | 8 7 | -- + * (BTN_EN1) 6 5 | (SID) (BTN_EN1) 6 5 | (SID) + * (BTN_EN2) | 4 3 | (CS) (BTN_EN2) | 4 3 | (CS) + * 5V | 2 1 | GND GND | 2 1 | 5V * ------ ------ * LCD LCD */ @@ -330,15 +330,15 @@ * * The ANET_FULL_GRAPHICS_LCD connector plug: * - * BEFORE AFTER - * ------ ------ - * GND | 1 2 | 5V 5V | 1 2 | GND - * CS | 3 4 | BTN_EN2 CS | 3 4 | BTN_EN2 - * SID | 5 6 BTN_EN1 SID | 5 6 BTN_EN1 - * open | 7 8 | BTN_ENC CLK | 7 8 | BTN_ENC - * CLK | 9 10 | BEEPER open | 9 10 | BEEPER - * ------ ------ - * LCD LCD + * BEFORE AFTER + * ------ ------ + * (BEEPER) |10 9 | (CLK) (BEEPER) |10 9 | -- + * (BTN_ENC) | 8 7 | -- (BTN_ENC) | 8 7 | (CLK) + * (BTN_EN1) 6 5 | (SID) (BTN_EN1) 6 5 | (SID) + * (BTN_EN2) | 4 3 | (CS) (BTN_EN2) | 4 3 | (CS) + * 5V | 2 1 | GND GND | 2 1 | 5V + * ------ ------ + * LCD LCD */ #define LCD_PINS_RS EXP1_03_PIN @@ -366,11 +366,11 @@ /** Creality Ender-2 display pinout * ------ - * 5V | 1 2 | GND - * (MOSI) 1.23 | 3 4 | 1.22 (LCD_RS) - * (LCD_A0) 1.21 | 5 6 1.20 (BTN_EN2) - * RESET 1.19 | 7 8 | 1.18 (BTN_EN1) - * (BTN_ENC) 0.28 | 9 10 | 1.30 (SCK) + * (SCK) 1.30 |10 9 | 0.28 (BTN_ENC) + * (BTN_EN1) 1.18 | 8 7 | 1.19 (RESET) + * (BTN_EN2) 1.20 6 5 | 1.21 (LCD_A0) + * (LCD_RS) 1.22 | 4 3 | 1.23 (MOSI) + * GND | 2 1 | 5V * ------ * EXP1 */ diff --git a/Marlin/src/pins/lpc1768/pins_BTT_SKR_common.h b/Marlin/src/pins/lpc1768/pins_BTT_SKR_common.h index 52f34ed0f0..37d0cb7fb1 100644 --- a/Marlin/src/pins/lpc1768/pins_BTT_SKR_common.h +++ b/Marlin/src/pins/lpc1768/pins_BTT_SKR_common.h @@ -150,14 +150,15 @@ #endif #if ENABLED(BTT_MOTOR_EXPANSION) - /** ------ ------ - * NC | 1 2 | GND NC | 1 2 | GND - * NC | 3 4 | M1EN M2EN | 3 4 | M3EN - * M1STP | 5 6 M1DIR M1RX | 5 6 M1DIAG - * M2DIR | 7 8 | M2STP M2RX | 7 8 | M2DIAG - * M3DIR | 9 10 | M3STP M3RX | 9 10 | M3DIAG - * ------ ------ - * EXP2 EXP1 + /** + * ------ ------ + * (M3STP) |10 9 | (M3DIR) (M3DIAG) |10 9 | (M3RX) + * (M2STP) | 8 7 | (M2DIR) (M2DIAG) | 8 7 | (M2RX) + * (M1DIR) 6 5 | (M1STP) (M1DIAG) 6 5 | (M1RX) + * (M1EN) | 4 3 | -- (M3EN) | 4 3 | (M2EN) + * GND | 2 1 | -- GND | 2 1 | -- + * ------ ------ + * EXP2 EXP1 * * NB In EXP_MOT_USE_EXP2_ONLY mode EXP1 is not used and M2EN and M3EN need to be jumpered to M1EN */ diff --git a/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h b/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h index 15afe7e238..95bbe17b9b 100644 --- a/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h +++ b/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h @@ -233,9 +233,9 @@ /** ------ ------ * (BEEPER) 1.31 |10 9 | 1.30 (BTN_ENC) (MISO) 0.8 |10 9 | 0.7 (SD_SCK) * (LCD_EN) 0.18 | 8 7 | 0.16 (LCD_RS) (BTN_EN1) 3.25 | 8 7 | 0.28 (SD_CS2) - * (LCD_D4) 0.15 | 6 5 0.17 (LCD_D5) (BTN_EN2) 3.26 | 6 5 0.9 (SD_MOSI) + * (LCD_D4) 0.15 6 5 | 0.17 (LCD_D5) (BTN_EN2) 3.26 6 5 | 0.9 (SD_MOSI) * (LCD_D6) 1.0 | 4 3 | 1.22 (LCD_D7) (SD_DETECT) 0.27 | 4 3 | RESET - * GND | 2 1 | 5V GND | 2 1 | NC + * GND | 2 1 | 5V GND | 2 1 | -- * ------ ------ * EXP1 EXP2 */ diff --git a/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h b/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h index bdc49fc236..0916138361 100644 --- a/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h +++ b/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h @@ -186,11 +186,11 @@ /** * ------ - * 5V | 1 2 | GND - * (LCD_EN) P0_18 | 3 4 | P0_17 (LCD_RS) - * (LCD_D4) P0_15 | 5 6 P0_20 (BTN_EN2) - * RESET | 7 8 | P0_19 (BTN_EN1) - * (BTN_ENC) P0_16 | 9 10 | P2_08 (BEEPER) + * (BEEPER) P2_08 |10 9 | P0_16 (BTN_ENC) + * (BTN_EN1) P0_19 | 8 7 | RESET + * (BTN_EN2) P0_20 6 5 | P0_15 (LCD_D4) + * (LCD_RS) P0_17 | 4 3 | P0_18 (LCD_EN) + * GND | 2 1 | 5V * ------ * EXP */ @@ -209,11 +209,11 @@ /** * Ender 3 V2 display SKR E3 Turbo (EXP1) Ender 3 V2 display --> SKR E3 Turbo * ------ ------ RX 8 --> 5 P0_15 - * 5V | 1 2 | GND 5V | 1 2 | GND TX 7 --> 9 P0_16 - * (BTN_E1) A | 3 4 | B (BTN_E2) (LCD_EN) P0_18 | 3 4 | P0_17 (LCD_RS) BEEPER 5 --> 10 P2_08 - * BEEPER | 5 6 ENT (BTN_ENC) (LCD_D4) P0_15 | 5 6 P0_20 (BTN_EN2) - * (SKR_RX1) TX | 7 8 | RX (SKR_TX1) Reset | 7 8 | P0_19 (BTN_EN1) - * NC | 9 10 | NC (BTN_ENC) P0_16 | 9 10 | P2_08 (BEEPER) + * -- |10 9 | -- (BEEPER) P2_08 |10 9 | P0_16 (BTN_ENC) TX 7 --> 9 P0_16 + * (SKR_TX1) RX | 8 7 | TX (SKR_RX1) (BTN_EN1) P0_19 | 8 7 | RESET BEEPER 5 --> 10 P2_08 + * (BTN_ENC) ENT 6 5 | BEEPER (BTN_EN2) P0_20 6 5 | P0_15 (LCD_D4) + * (BTN_E2) B | 4 3 | A (BTN_E1) (LCD_RS) P0_17 | 4 3 | P0_18 (LCD_EN) + * GND | 2 1 | 5V GND | 2 1 | 5V * ------ ------ */ diff --git a/Marlin/src/pins/lpc1769/pins_MKS_SGEN_L_V2.h b/Marlin/src/pins/lpc1769/pins_MKS_SGEN_L_V2.h index 8107f11937..7edfb9196f 100644 --- a/Marlin/src/pins/lpc1769/pins_MKS_SGEN_L_V2.h +++ b/Marlin/src/pins/lpc1769/pins_MKS_SGEN_L_V2.h @@ -260,9 +260,9 @@ /** ------ ------ * (BEEPER) 1.31 |10 9 | 1.30 (BTN_ENC) (MISO) 0.8 |10 9 | 0.7 (SD_SCK) * (LCD_EN) 0.18 | 8 7 | 0.16 (LCD_RS) (BTN_EN1) 3.25 | 8 7 | 0.28 (SD_CS2) - * (LCD_D4) 0.15 | 6 5 | 0.17 (LCD_D5) (BTN_EN2) 3.26 | 6 5 | 0.9 (SD_MOSI) + * (LCD_D4) 0.15 6 5 | 0.17 (LCD_D5) (BTN_EN2) 3.26 6 5 | 0.9 (SD_MOSI) * (LCD_D6) 1.0 | 4 3 | 1.22 (LCD_D7) (SD_DETECT) 0.27 | 4 3 | RST - * GND | 2 1 | 5V GND | 2 1 | NC + * GND | 2 1 | 5V GND | 2 1 | -- * ------ ------ * EXP1 EXP2 */ diff --git a/Marlin/src/pins/lpc1769/pins_TH3D_EZBOARD.h b/Marlin/src/pins/lpc1769/pins_TH3D_EZBOARD.h index dc7dcd6db6..81c7dc9403 100644 --- a/Marlin/src/pins/lpc1769/pins_TH3D_EZBOARD.h +++ b/Marlin/src/pins/lpc1769/pins_TH3D_EZBOARD.h @@ -157,11 +157,11 @@ /** * ------ - * 5V | 1 2 | GND - * P0_18 | 3 4 | P0_16 - * P0_15 | 5 6 P3_25 - * P2_11 | 7 8 | P3_26 - * P1_30 | 9 10 | P1_31 + * P1_31 |10 9 | P1_30 + * P3_26 | 8 7 | P2_11 + * P3_25 6 5 | P0_15 + * P0_16 | 4 3 | P0_18 + * GND | 2 1 | 5V * ------ * EXP1 * @@ -182,11 +182,11 @@ #if ENABLED(CR10_STOCKDISPLAY) /** ------ - * 5V | 1 2 | GND - * LCD_EN | 3 4 | LCD_RS - * LCD_D4 | 5 6 EN2 - * KILL | 7 8 | EN1 - * ENC | 9 10 | BEEPER + * BEEPER |10 9 | ENC + * EN1 | 8 7 | KILL + * EN2 6 5 | LCD_D4 + * LCD_RS | 4 3 | LCD_EN + * GND | 2 1 | 5V * ------ */ #define BEEPER_PIN EXP1_10_PIN @@ -197,11 +197,11 @@ #elif ENABLED(MKS_MINI_12864) /** ------ - * 5V | 1 2 | GND - * SPI-MOSI | 3 4 | SPI-CS - * A0 | 5 6 EN2 - * -- | 7 8 | EN1 - * ENC | 9 10 | SPI-SCK + * SCK |10 9 | ENC + * EN1 | 8 7 | -- + * EN2 6 5 | A0 + * CS | 4 3 | MOSI + * GND | 2 1 | 5V * ------ */ #define DOGLCD_CS EXP1_04_PIN diff --git a/Marlin/src/pins/ramps/pins_MKS_GEN_13.h b/Marlin/src/pins/ramps/pins_MKS_GEN_13.h index 4742ac9b0d..5f373f99d7 100644 --- a/Marlin/src/pins/ramps/pins_MKS_GEN_13.h +++ b/Marlin/src/pins/ramps/pins_MKS_GEN_13.h @@ -89,7 +89,7 @@ * BLUE_LED | 8 7 | RED_LED ENCBTN | 8 7 | SDCS * KILL 6 5 | BEEPER 6 5 | MOSI * A0 | 4 3 | LCD_CS SDCD | 4 3 | - * GND | 2 1 | 5V GND | 2 1 | NC + * GND | 2 1 | 5V GND | 2 1 | -- * ------ ------ * EXP1 EXP2 */ diff --git a/Marlin/src/pins/ramps/pins_RAMPS.h b/Marlin/src/pins/ramps/pins_RAMPS.h index 4697ff61b2..121fb1b045 100644 --- a/Marlin/src/pins/ramps/pins_RAMPS.h +++ b/Marlin/src/pins/ramps/pins_RAMPS.h @@ -461,7 +461,7 @@ * D17 | 8 7 | D16 D31 | 8 7 | D53 * D23 6 5 D25 D33 6 5 D51 (MOSI) * D27 | 4 3 | D29 D49 | 4 3 | D41 - * GND | 2 1 | 5V GND | 2 1 | NC + * GND | 2 1 | 5V GND | 2 1 | -- * ------ ------ * EXP1 EXP2 */ @@ -803,13 +803,13 @@ * FYSETC TFT-81050 display pinout * * Board Display - * ----- ----- - * (SCK) D52 | 1 2 | D50 (MISO) MISO | 1 2 | SCK - * (SD_CS) D53 | 3 4 | D33 (BNT_EN2) (BNT_EN2) MOD_RESET | 3 4 | SD_CS - * (MOSI) D51 | 5 6 D31 (BNT_EN1) (BNT_EN1) LCD_CS | 5 6 MOSI - * RESET | 7 8 | D49 (SD_DET) SD_DET | 7 8 | RESET - * NC | 9 10| GND GND | 9 10| 5V - * ----- ----- + * ------ ------ + * GND |10 9 | -- 5V |10 9 | GND + * (SD_DET) 49 | 8 7 | RESET RESET | 8 7 | (SD_DET) + * (BTN_EN1) 31 6 5 | 51 (MOSI) (MOSI) 6 5 | (LCD_CS) + * (BTN_EN2) 33 | 4 3 | 53 (SD_CS) (SD_CS) | 4 3 | (MOD_RESET) + * (MISO) 50 | 2 1 | 52 (SCK) (SCK) | 2 1 | (MISO) + * ------ ------ * EXP2 EXP1 * * Needs custom cable: diff --git a/Marlin/src/pins/stm32f1/pins_BTT_SKR_E3_DIP.h b/Marlin/src/pins/stm32f1/pins_BTT_SKR_E3_DIP.h index dae43d3c13..704501de10 100644 --- a/Marlin/src/pins/stm32f1/pins_BTT_SKR_E3_DIP.h +++ b/Marlin/src/pins/stm32f1/pins_BTT_SKR_E3_DIP.h @@ -156,14 +156,14 @@ #define USB_CONNECT_INVERTING false /** - * ----- - * 5V | 1 2 | GND - * (LCD_EN) PB7 | 3 4 | PB8 (LCD_RS) - * (LCD_D4) PB9 | 5 6 PA10 (BTN_EN2) - * RESET | 7 8 | PA9 (BTN_EN1) - * (BTN_ENC) PB6 | 9 10| PA15 (BEEPER) - * ----- - * EXP1 + * ------ + * (BEEPER) PA15 |10 9 | PB6 (BTN_ENC) + * (BTN_EN1) PA9 | 8 7 | RESET + * (BTN_EN2) PA10 6 5 | PB9 (LCD_D4) + * (LCD_RS) PB8 | 4 3 | PB7 (LCD_EN) + * GND | 2 1 | 5V + * ------ + * EXP1 */ #if HAS_WIRED_LCD @@ -195,13 +195,13 @@ #elif EITHER(MKS_MINI_12864, ENDER2_STOCKDISPLAY) /** Creality Ender-2 display pinout - * ----- - * 5V | 1 2 | GND - * (MOSI) PB7 | 3 4 | PB8 (LCD_RS) - * (LCD_A0) PB9 | 5 6 PA10 (BTN_EN2) - * RESET | 7 8 | PA9 (BTN_EN1) - * (BTN_ENC) PB6 | 9 10| PA15 (SCK) - * ----- + * ------ + * (SCK) PA15 |10 9 | PB6 (BTN_ENC) + * (BTN_EN1) PA9 | 8 7 | RESET + * (BTN_EN2) PA10 6 5 | PB9 (LCD_A0) + * (LCD_RS) PB8 | 4 3 | PB7 (MOSI) + * GND | 2 1 | 5V + * ------ * EXP1 */ @@ -228,15 +228,15 @@ /** FYSETC TFT TFT81050 display pinout * - * Board Display - * ----- ----- - * 5V | 1 2 | GND (SPI1-MISO) MISO | 1 2 | SCK (SPI1-SCK) - * (FREE) PB7 | 3 4 | PB8 (LCD_CS) (PA9) MOD_RESET | 3 4 | SD_CS (PA10) - * (FREE) PB9 | 5 6 PA10 (SD_CS) (PB8) LCD_CS | 5 6 MOSI (SPI1-MOSI) - * RESET | 7 8 | PA9 (MOD_RESET) (PA15) SD_DET | 7 8 | RESET - * (BEEPER) PB6 | 9 10| PA15 (SD_DET) GND | 9 10| 5V - * ----- ----- - * EXP1 EXP1 + * Board Display + * ------ ------ + * (SD_DET) PA15 |10 9 | PB6 (BEEPER) 5V |10 9 | GND + * (MOD_RESET) PA9 | 8 7 | RESET (RESET) | 8 7 | (SD_DET) + * (SD_CS) PA10 6 5 | PB9 (MOSI) 6 5 | (LCD_CS) + * (LCD_CS) PB8 | 4 3 | PB7 (SD_CS) | 4 3 | (MOD_RESET) + * GND | 2 1 | 5V (SCK) | 2 1 | (MISO) + * ------ ------ + * EXP1 EXP1 * * Needs custom cable: * 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 8c8043be8b..bbf38e414f 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 @@ -120,11 +120,11 @@ /** * SKR Mini E3 V1.0, V1.2 SKR Mini E3 V2.0 * ------ ------ - * 5V | 1 2 | GND 5V | 1 2 | GND - * (LCD_EN) PB7 | 3 4 | PB8 (LCD_RS) (LCD_EN) PB15 | 3 4 | PB8 (LCD_RS) - * (LCD_D4) PB9 | 5 6 PA10 (BTN_EN2) (LCD_D4) PB9 | 5 6 PA10 (BTN_EN2) - * RESET | 7 8 | PA9 (BTN_EN1) RESET | 7 8 | PA9 (BTN_EN1) - * (BTN_ENC) PB6 | 9 10 | PB5 (BEEPER) (BTN_ENC) PA15 | 9 10 | PB5 (BEEPER) + * (BEEPER) PB5 |10 9 | PB6 (BTN_ENC) (BEEPER) PB5 |10 9 | PA15 (BTN_ENC) + * (BTN_EN1) PA9 | 8 7 | RESET (BTN_EN1) PA9 | 8 7 | RESET + * (BTN_EN2) PA10 6 5 | PB9 (LCD_D4) (BTN_EN2) PA10 6 5 | PB9 (LCD_D4) + * (LCD_RS) PB8 | 4 3 | PB7 (LCD_EN) (LCD_RS) PB8 | 4 3 | PB15 (LCD_EN) + * GND | 2 1 | 5V GND | 2 1 | 5V * ------ ------ * EXP1 EXP1 */ @@ -138,14 +138,14 @@ #if EITHER(HAS_DWIN_E3V2, IS_DWIN_MARLINUI) /** - * ------ ------ ------ - * VCC | 1 2 | GND VCC | 1 2 | GND GND | 2 1 | VCC - * A | 3 4 | B A | 3 4 | B B | 4 3 | A - * | 5 6 TX BEEP | 5 6 ENT ENT | 6 5 | BEEP - * | 7 8 | RX TX | 7 8 | RX RX | 8 7 | TX - * BEEP | 9 10 | ENT | 9 10 | | 10 9 | - * ------ ------ ------ - * EXP1 DWIN DWIN (plug) + * ------ ------ ------ + * (ENT) |10 9 | (BEEP) |10 9 | |10 9 | + * (RX) | 8 7 | (RX) | 8 7 | (TX) RX | 8 7 | TX + * (TX) 6 5 | (ENT) 6 5 | (BEEP) ENT | 6 5 | BEEP + * (B) | 4 3 | (A) (B) | 4 3 | (A) B | 4 3 | A + * GND | 2 1 | (VCC) GND | 2 1 | VCC GND | 2 1 | VCC + * ------ ------ ------ + * EXP1 DWIN DWIN (plug) * * All pins are labeled as printed on DWIN PCB. Connect TX-TX, A-A and so on. */ @@ -206,15 +206,15 @@ /** * TFTGLCD_PANEL_SPI display pinout * - * Board Display - * ------ ------ - * 5V | 1 2 | GND (SPI1-MISO) MISO | 1 2 | SCK (SPI1-SCK) - * (FREE) PB7 | 3 4 | PB8 (LCD_CS) (PA9) LCD_CS | 3 4 | SD_CS (PA10) - * (FREE) PB9 | 5 6 | PA10 (SD_CS) (FREE) | 5 6 | MOSI (SPI1-MOSI) - * RESET | 7 8 | PA9 (MOD_RESET) (PB5) SD_DET | 7 8 | (FREE) - * (BEEPER) PB6 | 9 10 | PB5 (SD_DET) GND | 9 10 | 5V - * ------ ------ - * EXP1 EXP1 + * Board Display + * ------ ------ + * (SD_DET) PB5 |10 9 | PB6 (BEEPER) 5V |10 9 | GND + * (MOD_RESET) PA9 | 8 7 | RESET -- | 8 7 | (SD_DET) + * (SD_CS) PA10 6 5 | PB9 (MOSI) | 6 5 | -- + * (LCD_CS) PB8 | 4 3 | PB7 (SD_CS) | 4 3 | (LCD_CS) + * GND | 2 1 | 5V (SCK) | 2 1 | (MISO) + * ------ ------ + * EXP1 EXP1 * * Needs custom cable: * @@ -249,15 +249,15 @@ /** * FYSETC TFT TFT81050 display pinout * - * Board Display - * ------ ------ - * 5V | 1 2 | GND (SPI1-MISO) MISO | 1 2 | SCK (SPI1-SCK) - * (FREE) PB7 | 3 4 | PB8 (LCD_CS) (PA9) MOD_RESET | 3 4 | SD_CS (PA10) - * (FREE) PB9 | 5 6 | PA10 (SD_CS) (PB8) LCD_CS | 5 6 | MOSI (SPI1-MOSI) - * RESET | 7 8 | PA9 (MOD_RESET) (PB5) SD_DET | 7 8 | RESET - * (BEEPER) PB6 | 9 10 | PB5 (SD_DET) GND | 9 10 | 5V - * ------ ------ - * EXP1 EXP1 + * Board Display + * ------ ------ + * (SD_DET) PB5 |10 9 | PB6 (BEEPER) 5V |10 9 | GND + * (MOD_RESET) PA9 | 8 7 | RESET (RESET) | 8 7 | (SD_DET) + * (SD_CS) PA10 6 5 | PB9 (MOSI) | 6 5 | (LCD_CS) + * (LCD_CS) PB8 | 4 3 | PB7 (SD_CS) | 4 3 | (MOD_RESET) + * GND | 2 1 | 5V (SCK) | 2 1 | (MISO) + * ------ ------ + * EXP1 EXP1 * * Needs custom cable: * diff --git a/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_V1_1.h b/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_V1_1.h index a6cc5ffa60..a92de805f7 100644 --- a/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_V1_1.h +++ b/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_V1_1.h @@ -98,7 +98,7 @@ * (LCD_EN) PB6 | 8 7 | PC12 (LCD_RS) (BTN_EN1) PD2 | 8 7 | PA15 (SD_SS) * (LCD_D4) PC13 6 5 | PB7 (LCD_D5) (BTN_EN2) PB8 6 5 | PB5 (MOSI) * (LCD_D6) PC15 | 4 3 | PC14 (LCD_D7) (SD_DETECT) PB9 | 4 3 | RESET - * GND | 2 1 | 5V GND | 2 1 | NC + * GND | 2 1 | 5V GND | 2 1 | -- * ------ ------ * EXP1 EXP2 */ diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h index ae54805a94..5251c8547b 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h @@ -167,7 +167,7 @@ * PB10 | 8 7 | PE8 * PB14 6 5 | PB13 * PB12 | 4 3 | PB15 - * GND | 2 1 | 5V + * GND | 2 1 | 5V * ------ * EXP1 */ @@ -191,7 +191,7 @@ * PB10 | 8 7 | ? * PA6 6 5 | PA5 * PA4 | 4 3 | PA7 - * GND | 2 1 | 5V + * GND | 2 1 | 5V * ------ * EXP1 */ diff --git a/Marlin/src/pins/stm32f1/pins_FLY_MINI.h b/Marlin/src/pins/stm32f1/pins_FLY_MINI.h index e4c741eae7..bfddf051f6 100644 --- a/Marlin/src/pins/stm32f1/pins_FLY_MINI.h +++ b/Marlin/src/pins/stm32f1/pins_FLY_MINI.h @@ -123,9 +123,9 @@ /** ------ ------ * (BEEPER) PC14 |10 9 | PC13 (BTN_ENC) (MISO) PB14 |10 9 | PB13 (SD_SCK) * (LCD_EN) PB9 | 8 7 | PB8 (LCD_RS) (BTN_EN1) PB3 | 8 7 | PB12 (SD_CS2) - * (LCD_D4) PB7 | 6 5 PB6 (LCD_D5) (BTN_EN2) PD2 | 6 5 PB15 (SD_MOSI) + * (LCD_D4) PB7 6 5 | PB6 (LCD_D5) (BTN_EN2) PD2 6 5 | PB15 (SD_MOSI) * (LCD_D6) PB5 | 4 3 | PB4 (LCD_D7) (SD_DETECT) PB11 | 4 3 | RESET - * GND | 2 1 | 5V GND | 2 1 | NC + * GND | 2 1 | 5V GND | 2 1 | -- * ------ ------ * EXP1 EXP2 */ diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h index e02d1db786..b0303861c9 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h @@ -145,7 +145,7 @@ * (LCD_EN) PA4 | 8 7 | PA5 (LCD_RS) (BTN_EN1) PB11 | 8 7 | PA15 (SD_SS) (BTN_EN1) PB11 | 8 7 | RESET * (LCD_D4) PA6 6 5 | PA7 (LCD_D5) (BTN_EN2) PB0 6 5 | PB15 (SD_MOSI) (BTN_EN2) PB0 6 5 | PA6 (LCD_D4) * (LCD_D6) PC4 | 4 3 | PC5 (LCD_D7) (SD_DETECT) PC10 | 4 3 | RESET (LCD_RS) PA5 | 4 3 | PA4 (LCD_EN) - * GND | 2 1 | 5V GND | 2 1 | NC GND | 2 1 | 5V + * GND | 2 1 | 5V GND | 2 1 | -- GND | 2 1 | 5V * ------ ------ ------ * EXP1 EXP2 "Ender-3 EXP1" */ diff --git a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h index 653ebd82a1..99de2e43e7 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h @@ -197,16 +197,16 @@ #endif /** - * -----------------------------------BTT002 V1.0---------------------------------------- - * ------ ------ | - * PA3 | 1 2 | GND 5V | 1 2 | GND | - * NRESET | 3 4 | PC4 (SD_DET) (LCD_D7) PE13 | 3 4 | PE12 (LCD_D6) | - * (MOSI) PA7 | 5 6 | PB0 (BTN_EN2) (LCD_D5) PE11 | 5 6 | PE10 (LCD_D4) | - * (SD_SS) PA4 | 7 8 | PC5 (BTN_EN1) (LCD_RS) PE8 | 7 8 | PE9 (LCD_EN) | - * (SCK) PA5 | 9 10 | PA6 (MISO) (BTN_ENC) PB1 | 9 10 | PE7 (BEEPER) | - * ------ ------ | - * EXP2 EXP1 | - * -------------------------------------------------------------------------------------- + * ---------------------------------BTT002 V1.0--------------------------------- + * ------ ------ | + * (BEEPER) PE7 |10 9 | PB1 (BTN_ENC) (MISO) PA6 |10 9 | PA5 (SCK) | + * (LCD_EN) PE9 | 8 7 | PE8 (LCD_RS) (BTN_EN1) PC5 | 8 7 | PA4 (SD_SS) | + * (LCD_D4) PE10 6 5 | PE11 (LCD_D5) (BTN_EN2) PB0 6 5 | PA7 (MOSI) | + * (LCD_D6) PE12 | 4 3 | PE13 (LCD_D7) (SD_DET) PC4 | 4 3 | RESET | + * GND | 2 1 | 5V GND | 2 1 | PA3 | + * ------ ------ | + * EXP1 EXP2 | + * ------------------------------------------------------------------------------ */ #define EXP1_03_PIN PE13 #define EXP1_04_PIN PE12 diff --git a/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h b/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h index e63b534eff..740164a197 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h @@ -184,14 +184,14 @@ #endif /** - * BTT E3 RRF - * ----- - * 5V | 1 2 | GND - * (LCD_EN) PE11 | 3 4 | PB1 (LCD_RS) - * (LCD_D4) PE10 | 5 6 PB2 (BTN_EN2) - * RESET | 7 8 | PE7 (BTN_EN1) - * (BTN_ENC) PE9 | 9 10| PE8 (BEEPER) - * ----- + * BTT E3 RRF + * ------ + * (BEEPER) PE8 |10 9 | PE9 (BTN_ENC) + * (BTN_EN1) PE7 | 8 7 | RESET + * (BTN_EN2) PB2 6 5 | PE10 (LCD_D4) + * (LCD_RS) PB1 | 4 3 | PE11 (LCD_EN) + * GND | 2 1 | 5V + * ------ * EXP1 */ @@ -244,15 +244,15 @@ /** * TFTGLCD_PANEL_SPI display pinout * - * Board Display - * ----- ----- - * 5V | 1 2 | GND (SPI1-MISO) MISO | 1 2 | SCK (SPI1-SCK) - * (FREE) PE11 | 3 4 | PB1 (LCD_CS) (PE7) LCD_CS | 3 4 | SD_CS (PB2) - * (FREE) PE10 | 5 6 | PB2 (SD_CS) (FREE) | 5 6 | MOSI (SPI1-MOSI) - * RESET | 7 8 | PE7 (MOD_RESET) (PE8) SD_DET | 7 8 | (FREE) - * (BEEPER) PE9 | 9 10| PE8 (SD_DET) GND | 9 10| 5V - * ----- ----- - * EXP1 EXP1 + * Board Display + * ------ ------ + * (SD_DET) PE8 |10 9 | PE9 (BEEPER) 5V |10 9 | GND + * (MOD_RESET) PE7 | 8 7 | RESET -- | 8 7 | (SD_DET) + * (SD_CS) PB2 6 5 | PE10 (MOSI) 6 5 | -- + * (LCD_CS) PB1 | 4 3 | PE11 (SD_CS) | 4 3 | (LCD_CS) + * GND | 2 1 | 5V (SCK) | 2 1 | (MISO) + * ------ ------ + * EXP1 EXP1 * * Needs custom cable: * @@ -293,15 +293,15 @@ /** FYSETC TFT TFT81050 display pinout * - * Board Display - * ----- ----- - * 5V | 1 2 | GND (SPI1-MISO) MISO | 1 2 | SCK (SPI1-SCK) - * (FREE) PE11 | 3 4 | PB1 (LCD_CS) (PE7) MOD_RESET | 3 4 | SD_CS (PB2) - * (FREE) PE10 | 5 6 | PB2 (SD_CS) (PB1) LCD_CS | 5 6 | MOSI (SPI1-MOSI) - * RESET | 7 8 | PE7 (MOD_RESET) (PE8) SD_DET | 7 8 | RESET - * (BEEPER) PE9 | 9 10| PE8 (SD_DET) GND | 9 10| 5V - * ----- ----- - * EXP1 EXP1 + * Board Display + * ------ ------ + * (SD_DET) PE8 |10 9 | PE9 (BEEPER) 5V |10 9 | GND + * (MOD_RESET) PE7 | 8 7 | RESET RESET | 8 7 | (SD_DET) + * (SD_CS) PB2 6 5 | PE10 (MOSI) | 6 5 | (LCD_CS) + * (LCD_CS) PB1 | 4 3 | PE11 (SD_CS) | 4 3 | (MOD_RESET) + * GND | 2 1 | 5V (SCK) | 2 1 | (MISO) + * ------ ------ + * EXP1 EXP1 * * Needs custom cable: * diff --git a/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h index dfa9d8a7b9..7db6c4922e 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h @@ -365,14 +365,14 @@ #endif /** - * ------ ------ - * NC | 1 2 | GND 5V | 1 2 | GND - * RESET | 3 4 | PB10 (SD_DETECT) (LCD_D7) PG5 | 3 4 | PG6 (LCD_D6) - * (MOSI) PB15 | 5 6 | PH10 (BTN_EN2) (LCD_D5) PG7 | 5 6 | PG8 (LCD_D4) - * (SD_SS) PB12 | 7 8 | PD10 (BTN_EN1) (LCD_RS) PA8 | 7 8 | PC10 (LCD_EN) - * (SCK) PB13 | 9 10 | PB14 (MISO) (BTN_ENC) PA15 | 9 10 | PC11 (BEEPER) - * ------ ------ - * EXP2 EXP1 + * ------ ------ + * (BEEPER) PC11 |10 9 | PA15 (BTN_ENC) (MISO) PB14 |10 9 | PB13 (SCK) + * (LCD_EN) PC10 | 8 7 | PA8 (LCD_RS) (BTN_EN1) PD10 | 8 7 | PB12 (SD_SS) + * (LCD_D4) PG8 6 5 | PG7 (LCD_D5) (BTN_EN2) PH10 6 5 | PB15 (MOSI) + * (LCD_D6) PG6 | 4 3 | PG5 (LCD_D7) (SD_DETECT) PB10 | 4 3 | RESET + * GND | 2 1 | 5V GND | 2 1 | -- + * ------ ------ + * EXP1 EXP2 */ #define EXP1_03_PIN PG5 #define EXP1_04_PIN PG6 diff --git a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h index 9db0459be9..04a7d9e0b4 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h @@ -330,7 +330,7 @@ * (LCD_EN) PE9 | 8 7 | PE10 (LCD_RS) (BTN_EN1) PB2 | 8 7 | PA4 (SD_SS) * (LCD_D4) PE12 6 5 | PE13 (LCD_D5) (BTN_EN2) PB1 6 5 | PA7 (MOSI) * (LCD_D6) PE14 | 4 3 | PE15 (LCD_D7) (SD_DETECT) PC15 | 4 3 | RESET - * GND | 2 1 | 5V GND | 2 1 | NC + * GND | 2 1 | 5V GND | 2 1 | -- * ------ ------ * EXP1 EXP2 */ @@ -379,14 +379,14 @@ #if ENABLED(BTT_MOTOR_EXPANSION) /** - * ------ ------ - * NC | 1 2 | GND NC | 1 2 | GND - * NC | 3 4 | M1EN M2EN | 3 4 | M3EN - * M1STP | 5 6 M1DIR M1RX | 5 6 M1DIAG - * M2DIR | 7 8 | M2STP M2RX | 7 8 | M2DIAG - * M3DIR | 9 10 | M3STP M3RX | 9 10 | M3DIAG - * ------ ------ - * EXP2 EXP1 + * ------ ------ + * M3DIAG |10 9 | M3RX M3STP |10 9 | M3DIR + * M2DIAG | 8 7 | M2RX M2STP | 8 7 | M2DIR + * M1DIAG 6 5 | M1RX M1DIR 6 5 | M1STP + * M3EN | 4 3 | M2EN M1EN | 4 3 | -- + * GND | 2 1 | -- GND | 2 1 | -- + * ------ ------ + * EXP1 EXP2 */ // M1 on Driver Expansion Module @@ -534,9 +534,9 @@ * (ESP-CS) PB12 | 10 | | 7 | PB15 (ESP-MOSI) * 3.3V | 11 | | 6 | PB14 (ESP-MISO) * (ESP-IO0) PD7 | 12 | | 5 | PB13 (ESP-CLK) - * (ESP-IO4) PD10 | 13 | | 4 | NC - * NC | 14 | | 3 | PE15 (ESP-EN) - * (ESP-RX) PD8 | 15 | | 2 | NC + * (ESP-IO4) PD10 | 13 | | 4 | -- + * -- | 14 | | 3 | PE15 (ESP-EN) + * (ESP-RX) PD8 | 15 | | 2 | -- * (ESP-TX) PD9 | 16 | | 1 | PE14 (ESP-RST) * ------- * WIFI diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h index 1a1ac4ec21..5e424d4105 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h @@ -317,7 +317,7 @@ * (LCD_EN) PD11 | 8 7 | PD10 (LCD_RS) (BTN_EN1) PG10 | 8 7 | PB12 (SD_SS) * (LCD_D4) PG2 6 5 | PG3 (LCD_D5) (BTN_EN2) PF11 6 5 | PB15 (MOSI) * (LCD_D6) PG6 | 4 3 | PG7 (LCD_D7) (SD_DETECT) PF12 | 4 3 | RESET - * GND | 2 1 | 5V GND | 2 1 | NC + * GND | 2 1 | 5V GND | 2 1 | -- * ------ ------ * EXP1 EXP2 */ @@ -367,8 +367,8 @@ #if ENABLED(BTT_MOTOR_EXPANSION) /** ----- ----- - * NC | . . | GND NC | . . | GND - * NC | . . | M1EN M2EN | . . | M3EN + * -- | . . | GND -- | . . | GND + * -- | . . | M1EN M2EN | . . | M3EN * M1STP | . . M1DIR M1RX | . . M1DIAG * M2DIR | . . | M2STP M2RX | . . | M2DIAG * M3DIR | . . | M3STP M3RX | . . | M3DIAG @@ -466,13 +466,13 @@ * * The WYH_L12864 connector plug: * - * BEFORE AFTER - * ______ ______ - * GND | 1 2 | 5V 5V | 1 2 | GND - * CS | 3 4 | BTN_EN2 CS | 3 4 | BTN_EN2 - * SID | 5 6 BTN_EN1 SID | 5 6 BTN_EN1 - * SCK | 7 8 | BTN_ENC SCK | 7 8 | BTN_ENC - * MOSI | 9 10 | MOSI | 9 10 | + * BEFORE AFTER + * ------ ------ + * -- |10 9 | MOSI -- |10 9 | MOSI + * BTN_ENC | 8 7 | SCK BTN_ENC | 8 7 | SCK + * BTN_EN1 | 6 5 SID BTN_EN1 | 6 5 SID + * BTN_EN2 | 4 3 | CS BTN_EN2 | 4 3 | CS + * 5V | 2 1 | GND GND | 2 1 | 5V * ------ ------ * LCD LCD */ @@ -550,12 +550,12 @@ // /** - * ----- - * TX | 1 2 | GND Enable PG1 // Must be high for module to run - * Enable | 3 4 | GPIO2 Reset PG0 // active low, probably OK to leave floating - * Reset | 5 6 | GPIO0 GPIO2 PF15 // must be high (ESP3D software configures this with a pullup so OK to leave as floating) - * 3.3V | 7 8 | RX GPIO0 PF14 // Leave as unused (ESP3D software configures this with a pullup so OK to leave as floating) - * ----- + * ------ + * RX | 8 7 | 3.3V GPIO0 PF14 ... Leave as unused (ESP3D software configures this with a pullup so OK to leave as floating) + * GPIO0 | 6 5 | Reset GPIO2 PF15 ... must be high (ESP3D software configures this with a pullup so OK to leave as floating) + * GPIO2 | 4 3 | Enable Reset PG0 ... active low, probably OK to leave floating + * GND | 2 1 | TX Enable PG1 ... Must be high for module to run + * ------ * W1 */ #define ESP_WIFI_MODULE_COM 6 // Must also set either SERIAL_PORT or SERIAL_PORT_2 to this diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h index 6d23bc8b20..079d6dcccc 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h @@ -333,14 +333,14 @@ #endif /** - * ------ ------ - * NC | 1 2 | GND 5V | 1 2 | GND - * RESET | 3 4 | PC4 (SD_DETECT) (LCD_D7) PE13 | 3 4 | PE12 (LCD_D6) - * (MOSI) PA7 | 5 6 PB2 (BTN_EN2) (LCD_D5) PE11 | 5 6 PE10 (LCD_D4) - * (SD_SS) PA4 | 7 8 | PE7 (BTN_EN1) (LCD_RS) PE9 | 7 8 | PB1 (LCD_EN) - * (SCK) PA5 | 9 10 | PA6 (MISO) (BTN_ENC) PB0 | 9 10 | PC5 (BEEPER) - * ------ ------ - * EXP2 EXP1 + * ------ ------ + * (BEEPER) PC5 |10 9 | PB0 (BTN_ENC) (MISO) PA6 |10 9 | PA5 (SCK) + * (LCD_EN) PB1 | 8 7 | PE9 (LCD_RS) (BTN_EN1) PE7 | 8 7 | PA4 (SD_SS) + * (LCD_D4) PE10 | 6 5 PE11 (LCD_D5) (BTN_EN2) PB2 | 6 5 PA7 (MOSI) + * (LCD_D6) PE12 | 4 3 | PE13 (LCD_D7) (SD_DETECT) PC4 | 4 3 | RESET + * GND | 2 1 | 5V GND | 2 1 | -- + * ------ ------ + * EXP1 EXP2 */ #define EXP1_03_PIN PE13 #define EXP1_04_PIN PE12 @@ -379,8 +379,8 @@ #if ENABLED(BTT_MOTOR_EXPANSION) /** ----- ----- - * NC | . . | GND NC | . . | GND - * NC | . . | M1EN M2EN | . . | M3EN + * -- | . . | GND -- | . . | GND + * -- | . . | M1EN M2EN | . . | M3EN * M1STP | . . M1DIR M1RX | . . M1DIAG * M2DIR | . . | M2STP M2RX | . . | M2DIAG * M3DIR | . . | M3STP M3RX | . . | M3DIAG @@ -562,9 +562,9 @@ * (ESP-CS) PB12 | 10 | | 7 | PB15 (ESP-MOSI) * 3.3V | 11 | | 6 | PB14 (ESP-MISO) * (ESP-IO0) PB10 | 12 | | 5 | PB13 (ESP-CLK) - * (ESP-IO4) PB11 | 13 | | 4 | NC - * NC | 14 | | 3 | 3.3V (ESP-EN) - * (ESP-RX) PD8 | 15 | | 2 | NC + * (ESP-IO4) PB11 | 13 | | 4 | -- + * -- | 14 | | 3 | 3.3V (ESP-EN) + * (ESP-RX) PD8 | 15 | | 2 | -- * (ESP-TX) PD9 | 16 | | 1 | PC14 (ESP-RST) * ------- * WIFI diff --git a/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h b/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h index af316cf4b1..514fad4b89 100644 --- a/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h +++ b/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h @@ -181,7 +181,7 @@ * PE14 | 8 7 | PE12 PC5 | 8 7 | PF11 * PE10 6 5 | PE9 PC4 6 5 | PB15 * PE8 | 4 3 | PE7 PB2 | 4 3 | RESET - * GND | 2 1 | 5V GND | 2 1 | NC + * GND | 2 1 | 5V GND | 2 1 | -- * ------ ------ * EXP1 EXP2 */ diff --git a/Marlin/src/pins/stm32f4/pins_FYSETC_CHEETAH_V20.h b/Marlin/src/pins/stm32f4/pins_FYSETC_CHEETAH_V20.h index 054da62754..29aff20ffd 100644 --- a/Marlin/src/pins/stm32f4/pins_FYSETC_CHEETAH_V20.h +++ b/Marlin/src/pins/stm32f4/pins_FYSETC_CHEETAH_V20.h @@ -139,26 +139,26 @@ #endif /** - * ----- ----- - * 5V | 1 2 | GND 5V | 1 2 | GND - * RESET | 3 4 | PC3 (SD_DETECT) (LCD_D7) PB7 | 3 4 | PB6 (LCD_D6) - * (SD_MOSI) PA7 5 6 | PC11 (BTN_EN2) (LCD_D5) PB14 5 6 | PB13 (LCD_D4) - * (SD_SS) PA4 | 7 8 | PC10 (BTN_EN1) (LCD_RS) PB12 | 7 8 | PB15 (LCD_EN) - * (SD_SCK) PA5 | 9 10| PA6 (SD_MISO) (BTN_ENC) PC12 | 9 10| PC9 (BEEPER) - * ----- ----- - * EXP2 EXP1 + * ------ ------ + * (SD_MISO) PA6 |10 9 | PA5 (SD_SCK) (BEEPER) PC9 |10 9 | PC12 (BTN_ENC) + * (BTN_EN1) PC10 | 8 7 | PA4 (SD_SS) (LCD_EN) PB15 | 8 7 | PB12 (LCD_RS) + * (BTN_EN2) PC11 6 5 | PA7 (SD_MOSI) (LCD_D4) PB13 6 5 | PB14 (LCD_D5) + * (SD_DETECT) PC3 | 4 3 | RESET (LCD_D6) PB6 | 4 3 | PB7 (LCD_D7) + * GND | 2 1 | 5V GND | 2 1 | 5V + * ------ ------ + * EXP2 EXP1 */ /** -* ----- -* (BEEPER) PC9 | 1 2 | PC12 (BTN_ENC) -* (BTN_EN1) PC10 | 3 4 | PB14 (LCD_D5/MISO) -* (BTN_EN2) PC11 5 6 | PB13 (LCD_D4/SCK) -* (LCD_RS) PB12 | 7 8 | PB15 (LCD_EN/MOSI) -* GND | 9 10| 5V -* ----- -* EXP3 -*/ + * ------ + * 5V |10 9 | GND + * (LCD_EN/MOSI) PB15 | 8 7 | PB12 (LCD_RS) + * (LCD_D4/SCK) PB13 6 5 | PC11 (BTN_EN2) + * (LCD_D5/MISO) PB14 | 4 3 | PC10 (BTN_EN1) + * (BTN_ENC) PC12 | 2 1 | PC9 (BEEPER) + * ------ + * EXP3 + */ #define EXP1_03_PIN PB7 #define EXP1_04_PIN PB6 diff --git a/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h b/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h index 85071034c2..0e0266f1a4 100644 --- a/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h +++ b/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h @@ -203,7 +203,7 @@ * PC11 | 8 7 | PD2 PC6 | 8 7 | PA4 * PC10 6 5 | PC12 PC7 6 5 | PA7 * PD0 | 4 3 | PD1 PB10 | 4 3 | RESET - * GND | 2 1 | 5V GND | 2 1 | 5V + * GND | 2 1 | 5V GND | 2 1 | 5V * ------ ------ * EXP1 EXP2 */ diff --git a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h index 161884c322..0e960a17e2 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h @@ -239,7 +239,7 @@ * (LCD_EN) PE11 | 8 7 | PD10 (LCD_RS) (BTN_EN1) PE9 | 8 7 | PA4 (SPI1 CS) * (LCD_D4) PD9 6 5 | PD8 (LCD_D5) (BTN_EN2) PE8 6 5 | PA7 (SPI1 MOSI) * (LCD_D6) PE15 | 4 3 | PE7 (LCD_D7) (SPI1_RS) PB11 | 4 3 | RESET - * GND | 2 1 | 5V GND | 2 1 | 3.3V + * GND | 2 1 | 5V GND | 2 1 | 3.3V * ------ ------ * EXP1 EXP2 */ @@ -261,25 +261,26 @@ #define EXP2_09_PIN PA5 #define EXP2_10_PIN PA6 -#ifndef SDCARD_CONNECTION - #define SDCARD_CONNECTION ONBOARD -#endif - -#if SD_CONNECTION_IS(ONBOARD) - #define ENABLE_SPI3 - #define SD_SS_PIN -1 - #define SDSS PC9 - #define SD_SCK_PIN PC10 - #define SD_MISO_PIN PC11 - #define SD_MOSI_PIN PC12 - #define SD_DETECT_PIN PC4 // SD_DETECT_PIN doesn't work with NO_SD_HOST_DRIVE disabled -#elif SD_CONNECTION_IS(LCD) - #define ENABLE_SPI1 - #define SDSS EXP2_07_PIN - #define SD_SCK_PIN EXP2_09_PIN - #define SD_MISO_PIN EXP2_10_PIN - #define SD_MOSI_PIN EXP2_05_PIN - #define SD_DETECT_PIN EXP2_04_PIN +#if ENABLED(SDSUPPORT) + #ifndef SDCARD_CONNECTION + #define SDCARD_CONNECTION ONBOARD + #endif + #if SD_CONNECTION_IS(ONBOARD) + #define ENABLE_SPI3 + #define SD_SS_PIN -1 + #define SDSS PC9 + #define SD_SCK_PIN PC10 + #define SD_MISO_PIN PC11 + #define SD_MOSI_PIN PC12 + #define SD_DETECT_PIN PC4 // SD_DETECT_PIN doesn't work with NO_SD_HOST_DRIVE disabled + #elif SD_CONNECTION_IS(LCD) + #define ENABLE_SPI1 + #define SDSS EXP2_07_PIN + #define SD_SCK_PIN EXP2_09_PIN + #define SD_MISO_PIN EXP2_10_PIN + #define SD_MOSI_PIN EXP2_05_PIN + #define SD_DETECT_PIN EXP2_04_PIN + #endif #endif #if ANY(TFT_COLOR_UI, TFT_CLASSIC_UI) diff --git a/Marlin/src/pins/stm32f4/pins_TH3D_EZBOARD_V2.h b/Marlin/src/pins/stm32f4/pins_TH3D_EZBOARD_V2.h index 6368142c34..bd4798209e 100644 --- a/Marlin/src/pins/stm32f4/pins_TH3D_EZBOARD_V2.h +++ b/Marlin/src/pins/stm32f4/pins_TH3D_EZBOARD_V2.h @@ -184,12 +184,12 @@ // /** - * ______ - * 5V | 1 2 | GND - * PB15 | 3 4 | PB12 - * PB13 | 5 6 PC5 - * ---- | 7 8 | PC4 - * PB0 | 9 10 | PA14 + * ------ + * PA14 |10 9 | PB0 + * PC4 | 8 7 | -- + * PC5 | 6 5 PB13 + * PB12 | 4 3 | PB15 + * GND | 2 1 | 5V * ------ * EXP1 * @@ -209,12 +209,12 @@ #define EXP1_10_PIN PA14 #if ENABLED(CR10_STOCKDISPLAY) - /** ______ - * 5V | 1 2 | GND - * LCD_EN | 3 4 | LCD_RS - * LCD_D4 | 5 6 EN2 - * RESET | 7 8 | EN1 - * ENC | 9 10 | BEEPER + /** ------ + * BEEPER |10 9 | ENC + * EN1 | 8 7 | RESET + * EN2 | 6 5 LCD_D4 + * LCD_RS | 4 3 | LCD_EN + * GND | 2 1 | 5V * ------ */ #ifdef DISABLE_JTAGSWD @@ -230,12 +230,12 @@ #define BOARD_ST7920_DELAY_3 750 #elif ENABLED(MKS_MINI_12864) - /** ______ - * 5V | 1 2 | GND - * SPI-MOSI | 3 4 | SPI-CS - * A0 | 5 6 EN2 - * -- | 7 8 | EN1 - * ENC | 9 10 | SPI-SCK + /** ------ + * SCK |10 9 | ENC + * EN1 | 8 7 | -- + * EN2 | 6 5 A0 + * CS | 4 3 | MOSI + * GND | 2 1 | 5V * ------ */ #define DOGLCD_CS EXP1_04_PIN diff --git a/Marlin/src/pins/stm32f7/pins_NUCLEO_F767ZI.h b/Marlin/src/pins/stm32f7/pins_NUCLEO_F767ZI.h index 75c7217163..48f986e2ca 100644 --- a/Marlin/src/pins/stm32f7/pins_NUCLEO_F767ZI.h +++ b/Marlin/src/pins/stm32f7/pins_NUCLEO_F767ZI.h @@ -69,7 +69,7 @@ * (X_DIR) PB15 | · · | PB9 (X_CS) * (LCD_D4) PB13 | · · | AVDD * _CN8_ PB12 | · · | GND - * NC | · · | PC8 (HEATER_0) PA15 | · · | PA5 (SCLK) + * -- | · · | PC8 (HEATER_0) PA15 | · · | PA5 (SCLK) * IOREF | · · | PC9 (BEEPER) PC7 | · · | PA6 (MISO) * RESET | · · | PC10 (SERVO1_PIN) PB5 | · · | PA7 (MOSI) * +3.3V | · · | PC11 (HEATER_BED) PB3 | · · | PD14 (SD_DETECT) @@ -86,7 +86,7 @@ * PF3 | · · | PD4 PF4 | · · | PF15 * PF5 | · · | PD3 (E_STEP) PB6 | · · | PG14 (E_EN) * PF10 | · · | GND (E_DIR) PB2 | · · | PG9 (E_CS) - * NC | · · | PE2 GND | · · | PE8 + * -- | · · | PE2 GND | · · | PE8 * PA7 | · · | PE4 PD13 | · · | PE7 * PF2 | · · | PE5 PD12 | · · | GND * (Y_STEP) PF1 | · · | PE6 (Y_EN) (Z_STEP) PD11 | · · | PE10 (Z_EN) 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 cec1a838fc..7cbf9f9d58 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 @@ -144,28 +144,28 @@ /** * SKR Mini E3 V3.0 - * ------ - * 5V | 1 2 | GND - * (LCD_EN) PD6 | 3 4 | PB8 (LCD_RS) - * (LCD_D4) PB9 | 5 6 PA10 (BTN_EN2) - * RESET | 7 8 | PA9 (BTN_EN1) - * (BTN_ENC) PA15 | 9 10 | PB5 (BEEPER) - * ------ - * EXP1 + * ------ + * (BEEPER) PB5 |10 9 | PA15 (BTN_ENC) + * (BTN_EN1) PA9 | 8 7 | RESET + * (BTN_EN2) PA10 6 5 | PB9 (LCD_D4) + * (LCD_RS) PB8 | 4 3 | PD6 (LCD_EN) + * GND | 2 1 | 5V + * ------ + * EXP1 */ #define EXP1_09_PIN PA15 #define EXP1_03_PIN PD6 #if EITHER(DWIN_CREALITY_LCD, IS_DWIN_MARLINUI) /** - * ------ ------ ------ - * VCC | 1 2 | GND VCC | 1 2 | GND GND | 2 1 | VCC - * A | 3 4 | B A | 3 4 | B B | 4 3 | A - * | 5 6 TX BEEP | 5 6 ENT ENT | 6 5 | BEEP - * | 7 8 | RX TX | 7 8 | RX RX | 8 7 | TX - * BEEP | 9 10 | ENT | 9 10 | | 10 9 | - * ------ ------ ------ - * EXP1 DWIN DWIN (plug) + * ------ ------ ------ + * (ENT) |10 9 | (BEEP) |10 9 | |10 9 | + * (RX) | 8 7 | (RX) | 8 7 | (TX) RX | 8 7 | TX + * (TX) 6 5 | (ENT) 6 5 | (BEEP) ENT | 6 5 | BEEP + * (B) | 4 3 | (A) (B) | 4 3 | (A) B | 4 3 | A + * GND | 2 1 | (VCC) GND | 2 1 | VCC GND | 2 1 | VCC + * ------ ------ ------ + * EXP1 DWIN DWIN (plug) * * All pins are labeled as printed on DWIN PCB. Connect TX-TX, A-A and so on. */ @@ -226,15 +226,15 @@ /** * TFTGLCD_PANEL_SPI display pinout * - * Board Display - * ------ ------ - * 5V | 1 2 | GND (SPI1-MISO) MISO | 1 2 | SCK (SPI1-SCK) - * (FREE) PB7 | 3 4 | PB8 (LCD_CS) (PA9) LCD_CS | 3 4 | SD_CS (PA10) - * (FREE) PB9 | 5 6 | PA10 (SD_CS) (FREE) | 5 6 | MOSI (SPI1-MOSI) - * RESET | 7 8 | PA9 (MOD_RESET) (PB5) SD_DET | 7 8 | (FREE) - * (BEEPER) PB6 | 9 10 | PB5 (SD_DET) GND | 9 10 | 5V - * ------ ------ - * EXP1 EXP1 + * Board Display + * ------ ------ + * (BEEPER) PB6 |10 9 | PB5 (SD_DET) 5V |10 9 | GND + * RESET | 8 7 | PA9 (MOD_RESET) -- | 8 7 | (SD_DET) + * PB9 6 5 | PA10 (SD_CS) (MOSI) | 6 5 | -- + * PB7 | 4 3 | PB8 (LCD_CS) (SD_CS) | 4 3 | (LCD_CS) + * GND | 2 1 | 5V (SCK) | 2 1 | (MISO) + * ------ ------ + * EXP1 EXP1 * * Needs custom cable: * @@ -269,15 +269,15 @@ /** * FYSETC TFT TFT81050 display pinout * - * Board Display - * ------ ------ - * 5V | 1 2 | GND (SPI1-MISO) MISO | 1 2 | SCK (SPI1-SCK) - * (FREE) PB7 | 3 4 | PB8 (LCD_CS) (PA9) MOD_RESET | 3 4 | SD_CS (PA10) - * (FREE) PB9 | 5 6 | PA10 (SD_CS) (PB8) LCD_CS | 5 6 | MOSI (SPI1-MOSI) - * RESET | 7 8 | PA9 (MOD_RESET) (PB5) SD_DET | 7 8 | RESET - * (BEEPER) PB6 | 9 10 | PB5 (SD_DET) GND | 9 10 | 5V - * ------ ------ - * EXP1 EXP1 + * Board Display + * ------ ------ + * (SD_DET) PB5 |10 9 | PB6 (BEEPER) 5V |10 9 | GND + * (MOD_RESET) PA9 | 8 7 | RESET (RESET) | 8 7 | (SD_DET) + * (SD_CS) PA10 6 5 | PB9 (FREE) (MOSI) | 6 5 | (LCD_CS) + * (LCD_CS) PB8 | 4 3 | PB7 (FREE) (SD_CS) | 4 3 | (MOD_RESET) + * 5V | 2 1 | GND (SCK) | 2 1 | (MISO) + * ------ ------ + * EXP1 EXP1 * * Needs custom cable: * From d58daaa42c8e238b3e1eba4041ca5bcfa497c61f Mon Sep 17 00:00:00 2001 From: Miguel Risco-Castillo Date: Tue, 28 Dec 2021 00:23:50 -0500 Subject: [PATCH 283/532] =?UTF-8?q?=F0=9F=9A=B8=20DWIN=20Enhanced=20improv?= =?UTF-8?q?e,=20fix,=20and=20extend=20(#23240)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Offset icon change to show mesh leveling status - Reset extruder position when enter to Move menu - New live end-stop diagnostic page - Editable firmware retracts settings for Tune and filament settings menu - Print Statistics page accessible from the Advanced Settings menu - Reset printer draws the boot image - Adds individual axes homing menu - Adds probe deploy/stow to Probe Settings menu - Updates lock screen - Rebuilds main buttons to support text caption in other languages - Increases probe offset limits to 60 mm - Fix M303 PID variable update - Fix Resume/Pause button update - Fix redraw of print done - Fix very large file name bug - Fix bug in bed manual leveling --- Marlin/src/gcode/lcd/M0_M1.cpp | 1 + Marlin/src/gcode/temp/M303.cpp | 11 +- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 698 ++++++++++-------- Marlin/src/lcd/e3v2/enhanced/dwin.h | 91 +-- Marlin/src/lcd/e3v2/enhanced/dwin_defines.h | 92 +++ Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp | 2 +- Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h | 2 +- Marlin/src/lcd/e3v2/enhanced/dwin_popup.cpp | 55 ++ Marlin/src/lcd/e3v2/enhanced/dwin_popup.h | 62 ++ Marlin/src/lcd/e3v2/enhanced/dwinui.cpp | 3 +- Marlin/src/lcd/e3v2/enhanced/dwinui.h | 51 +- Marlin/src/lcd/e3v2/enhanced/endstop_diag.cpp | 109 +++ Marlin/src/lcd/e3v2/enhanced/endstop_diag.h | 37 + Marlin/src/lcd/e3v2/enhanced/lockscreen.cpp | 7 +- Marlin/src/lcd/e3v2/enhanced/lockscreen.h | 7 +- Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp | 22 +- Marlin/src/lcd/e3v2/enhanced/meshviewer.h | 22 +- Marlin/src/lcd/e3v2/enhanced/printstats.cpp | 76 ++ Marlin/src/lcd/e3v2/enhanced/printstats.h | 37 + Marlin/src/lcd/language/language_an.h | 2 +- Marlin/src/lcd/language/language_ca.h | 2 +- Marlin/src/lcd/language/language_cz.h | 10 +- Marlin/src/lcd/language/language_da.h | 2 +- Marlin/src/lcd/language/language_de.h | 2 +- Marlin/src/lcd/language/language_en.h | 12 +- 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_nl.h | 2 +- Marlin/src/lcd/language/language_pl.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 | 74 +- 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 | 74 +- 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 +- 44 files changed, 1071 insertions(+), 526 deletions(-) create mode 100644 Marlin/src/lcd/e3v2/enhanced/dwin_defines.h create mode 100644 Marlin/src/lcd/e3v2/enhanced/dwin_popup.cpp create mode 100644 Marlin/src/lcd/e3v2/enhanced/dwin_popup.h create mode 100644 Marlin/src/lcd/e3v2/enhanced/endstop_diag.cpp create mode 100644 Marlin/src/lcd/e3v2/enhanced/endstop_diag.h create mode 100644 Marlin/src/lcd/e3v2/enhanced/printstats.cpp create mode 100644 Marlin/src/lcd/e3v2/enhanced/printstats.h diff --git a/Marlin/src/gcode/lcd/M0_M1.cpp b/Marlin/src/gcode/lcd/M0_M1.cpp index 6e3b84c020..6a93861407 100644 --- a/Marlin/src/gcode/lcd/M0_M1.cpp +++ b/Marlin/src/gcode/lcd/M0_M1.cpp @@ -36,6 +36,7 @@ #elif ENABLED(EXTENSIBLE_UI) #include "../../lcd/extui/ui_api.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) + #include "../../lcd/e3v2/enhanced/dwin_popup.h" #include "../../lcd/e3v2/enhanced/dwin.h" #endif diff --git a/Marlin/src/gcode/temp/M303.cpp b/Marlin/src/gcode/temp/M303.cpp index f823aefbed..a43575933b 100644 --- a/Marlin/src/gcode/temp/M303.cpp +++ b/Marlin/src/gcode/temp/M303.cpp @@ -77,10 +77,17 @@ void GcodeSuite::M303() { return; } - const celsius_t temp = parser.celsiusval('S', default_temp); - const int c = parser.intval('C', 5); + const bool seenC = parser.seenval('C'); + const int c = seenC ? parser.value_int() : 5; + const bool seenS = parser.seenval('S'); + const celsius_t temp = seenS ? parser.value_celsius() : default_temp; const bool u = parser.boolval('U'); + #if ENABLED(DWIN_CREALITY_LCD_ENHANCED) + if (seenC) HMI_data.PidCycles = c; + if (seenS) { if (hid == H_BED) HMI_data.BedPidT = temp; else HMI_data.HotendPidT = temp; } + #endif + #if DISABLED(BUSY_WHILE_HEATING) KEEPALIVE_STATE(NOT_BUSY); #endif diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index d1a9ba7077..64a85b4b23 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -23,8 +23,8 @@ /** * DWIN UI Enhanced implementation * Author: Miguel A. Risco-Castillo - * Version: 3.7.1 - * Date: 2021/11/09 + * Version: 3.9.1 + * Date: 2021/11/21 */ #include "../../../inc/MarlinConfigPre.h" @@ -32,6 +32,7 @@ #if ENABLED(DWIN_CREALITY_LCD_ENHANCED) #include "dwin.h" +#include "dwin_popup.h" #include "../../fontutils.h" #include "../../marlinui.h" @@ -78,10 +79,18 @@ #include "../../../feature/powerloss.h" #endif +#if HAS_ESDIAG + #include "endstop_diag.h" +#endif + #if HAS_MESH #include "meshviewer.h" #endif +#if ENABLED(PRINTCOUNTER) + #include "printstats.h" +#endif + #include #include #include @@ -236,9 +245,12 @@ MenuClass *MaxJerkMenu = nullptr; MenuClass *StepsMenu = nullptr; MenuClass *HotendPIDMenu = nullptr; MenuClass *BedPIDMenu = nullptr; -#if EITHER(HAS_BED_PROBE, BABYSTEPPING) +#if HAS_BED_PROBE MenuClass *ZOffsetWizMenu = nullptr; #endif +#if ENABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU) + MenuClass *HomingMenu = nullptr; +#endif // Updatable menuitems pointers MenuItemClass *HotendTargetItem = nullptr; @@ -270,13 +282,23 @@ void HMI_ToggleLanguage() { #endif } +//----------------------------------------------------------------------------- +// Main Buttons +//----------------------------------------------------------------------------- + typedef struct { uint16_t x, y[2], w, h; } text_info_t; -void ICON_Button(const bool here, const int iconid, const frame_rect_t &ico, const text_info_t (&txt)[2]) { - const bool cn = HMI_IsChinese(); - DWIN_ICON_Show(true, false, false, ICON, iconid + here, ico.x, ico.y); - if (here) DWIN_Draw_Rectangle(0, HMI_data.Highlight_Color, ico.x, ico.y, ico.x + ico.w - 1, ico.y + ico.h - 1); - DWIN_Frame_AreaCopy(1, txt[cn].x, txt[cn].y[here], txt[cn].x + txt[cn].w - 1, txt[cn].y[here] + txt[cn].h - 1, ico.x + (ico.w - txt[cn].w) / 2, (ico.y + ico.h - 28) - txt[cn].h/2); +void ICON_Button(const bool selected, const int iconid, const frame_rect_t &ico, const text_info_t (&txt), FSTR_P caption) { + DWIN_ICON_Show(true, false, false, ICON, iconid + selected, ico.x, ico.y); + if (selected) DWINUI::Draw_Box(0, HMI_data.Highlight_Color, ico); + if (HMI_IsChinese()) { + DWIN_Frame_AreaCopy(1, txt.x, txt.y[selected], txt.x + txt.w - 1, txt.y[selected] + txt.h - 1, ico.x + (ico.w - txt.w) / 2, (ico.y + ico.h - 28) - txt.h/2); + } + else { + const uint16_t x = ico.x + (ico.w - strlen_P(caption)*DWINUI::fontWidth()) / 2, + y = (ico.y + ico.h - 28) - DWINUI::fontHeight() / 2; + DWINUI::Draw_String(x, y, caption); + } } // @@ -284,11 +306,8 @@ void ICON_Button(const bool here, const int iconid, const frame_rect_t &ico, con // void ICON_Print() { constexpr frame_rect_t ico = { 17, 110, 110, 100 }; - constexpr text_info_t txt[2] = { - { 1, { 417, 449 }, 30, 14 }, - { 1, { 405, 447 }, 27, 15 } - }; - ICON_Button(select_page.now == PAGE_PRINT, ICON_Print_0, ico, txt); + constexpr text_info_t txt = { 1, { 405, 447 }, 27, 15 }; + ICON_Button(select_page.now == PAGE_PRINT, ICON_Print_0, ico, txt, GET_TEXT_F(MSG_BUTTON_PRINT)); } // @@ -296,11 +315,8 @@ void ICON_Print() { // void ICON_Prepare() { constexpr frame_rect_t ico = { 145, 110, 110, 100 }; - constexpr text_info_t txt[2] = { - { 33, { 417, 449 }, 51, 14 }, - { 31, { 405, 447 }, 27, 15 } - }; - ICON_Button(select_page.now == PAGE_PREPARE, ICON_Prepare_0, ico, txt); + constexpr text_info_t txt = { 31, { 405, 447 }, 27, 15 }; + ICON_Button(select_page.now == PAGE_PREPARE, ICON_Prepare_0, ico, txt, GET_TEXT_F(MSG_PREPARE)); } // @@ -308,11 +324,8 @@ void ICON_Prepare() { // void ICON_Control() { constexpr frame_rect_t ico = { 17, 226, 110, 100 }; - constexpr text_info_t txt[2] = { - { 85, { 417, 449 }, 46, 14 }, - { 61, { 405, 447 }, 27, 15 } - }; - ICON_Button(select_page.now == PAGE_CONTROL, ICON_Control_0, ico, txt); + constexpr text_info_t txt = { 61, { 405, 447 }, 27, 15 }; + ICON_Button(select_page.now == PAGE_CONTROL, ICON_Control_0, ico, txt, GET_TEXT_F(MSG_CONTROL)); } // @@ -320,11 +333,8 @@ void ICON_Control() { // void ICON_StartInfo() { constexpr frame_rect_t ico = { 145, 226, 110, 100 }; - constexpr text_info_t txt[2] = { - { 133, { 417, 449 }, 23, 14 }, - { 91, { 405, 447 }, 27, 15 } - }; - ICON_Button(select_page.now == PAGE_INFO_LEVELING, ICON_Info_0, ico, txt); + constexpr text_info_t txt = { 91, { 405, 447 }, 27, 15 }; + ICON_Button(select_page.now == PAGE_INFO_LEVELING, ICON_Info_0, ico, txt, GET_TEXT_F(MSG_BUTTON_INFO)); } // @@ -332,11 +342,8 @@ void ICON_StartInfo() { // void ICON_Leveling() { constexpr frame_rect_t ico = { 145, 226, 110, 100 }; - constexpr text_info_t txt[2] = { - { 88, { 433, 464 }, 36, 14 }, - { 211, { 405, 447 }, 27, 15 } - }; - ICON_Button(select_page.now == PAGE_INFO_LEVELING, ICON_Leveling_0, ico, txt); + constexpr text_info_t txt = { 211, { 405, 447 }, 27, 15 }; + ICON_Button(select_page.now == PAGE_INFO_LEVELING, ICON_Leveling_0, ico, txt, GET_TEXT_F(MSG_BUTTON_LEVEL)); } // @@ -344,11 +351,8 @@ void ICON_Leveling() { // void ICON_Tune() { constexpr frame_rect_t ico = { 8, 232, 80, 100 }; - constexpr text_info_t txt[2] = { - { 0, { 433, 464 }, 32, 14 }, - { 121, { 405, 447 }, 27, 15 } - }; - ICON_Button(select_print.now == PRINT_SETUP, ICON_Setup_0, ico, txt); + constexpr text_info_t txt = { 121, { 405, 447 }, 27, 15 }; + ICON_Button(select_print.now == PRINT_SETUP, ICON_Setup_0, ico, txt, GET_TEXT_F(MSG_TUNE)); } // @@ -356,11 +360,8 @@ void ICON_Tune() { // void ICON_Pause() { constexpr frame_rect_t ico = { 96, 232, 80, 100 }; - constexpr text_info_t txt[2] = { - { 157, { 417, 449 }, 39, 14 }, - { 181, { 405, 447 }, 27, 15 } - }; - ICON_Button(select_print.now == PRINT_PAUSE_RESUME, ICON_Pause_0, ico, txt); + constexpr text_info_t txt = { 181, { 405, 447 }, 27, 15 }; + ICON_Button(select_print.now == PRINT_PAUSE_RESUME, ICON_Pause_0, ico, txt, GET_TEXT_F(MSG_BUTTON_PAUSE)); } // @@ -368,11 +369,8 @@ void ICON_Pause() { // void ICON_Resume() { constexpr frame_rect_t ico = { 96, 232, 80, 100 }; - constexpr text_info_t txt[2] = { - { 33, { 433, 464 }, 53, 14 }, - { 1, { 405, 447 }, 27, 15 } - }; - ICON_Button(select_print.now == PRINT_PAUSE_RESUME, ICON_Continue_0, ico, txt); + constexpr text_info_t txt = { 1, { 405, 447 }, 27, 15 }; + ICON_Button(select_print.now == PRINT_PAUSE_RESUME, ICON_Continue_0, ico, txt, GET_TEXT_F(MSG_BUTTON_RESUME)); } // @@ -380,13 +378,14 @@ void ICON_Resume() { // void ICON_Stop() { constexpr frame_rect_t ico = { 184, 232, 80, 100 }; - constexpr text_info_t txt[2] = { - { 196, { 417, 449 }, 29, 14 }, - { 151, { 405, 447 }, 27, 12 } - }; - ICON_Button(select_print.now == PRINT_STOP, ICON_Stop_0, ico, txt); + constexpr text_info_t txt = { 151, { 405, 447 }, 27, 12 }; + ICON_Button(select_print.now == PRINT_STOP, ICON_Stop_0, ico, txt, GET_TEXT_F(MSG_BUTTON_STOP)); } +//----------------------------------------------------------------------------- +// Drawing routines +//----------------------------------------------------------------------------- + void Draw_Menu_Cursor(const int8_t line) { DWIN_Draw_Rectangle(1, HMI_data.Cursor_color, 0, MBASE(line) - 18, 14, MBASE(line + 1) - 20); } @@ -422,10 +421,10 @@ void Erase_Menu_Text(const uint8_t line) { } void Draw_Menu_Line(const uint8_t line, const uint8_t icon=0, const char * const label=nullptr, bool more=false) { + if (icon) DWINUI::Draw_Icon(icon, ICOX, MBASE(line) - 3); if (label) DWINUI::Draw_String(LBLX, MBASE(line) - 1, (char*)label); - if (icon) DWINUI::Draw_Icon(icon, 26, MBASE(line) - 3); - if (more) DWINUI::Draw_Icon(ICON_More, 226, MBASE(line) - 3); - DWIN_Draw_Line(HMI_data.SplitLine_Color, 16, MBASE(line) + 33, 256, MBASE(line) + 33); + if (more) DWINUI::Draw_Icon(ICON_More, VALX + 16, MBASE(line) - 3); + DWIN_Draw_HLine(HMI_data.SplitLine_Color, 16, MYPOS(line + 1), 240); } void Draw_Chkb_Line(const uint8_t line, const bool checked) { @@ -469,50 +468,21 @@ inline bool Apply_Encoder(const EncoderState &encoder_diffState, T &valref) { return encoder_diffState == ENCODER_DIFF_ENTER; } -// -// Draw Popup Windows -// - -inline void Draw_Popup_Bkgd_60() { - DWIN_Draw_Rectangle(1, HMI_data.PopupBg_color, 14, 60, 258, 330); - DWIN_Draw_Rectangle(0, HMI_data.Highlight_Color, 14, 60, 258, 330); -} - -inline void Draw_Popup_Bkgd_105() { - DWIN_Draw_Rectangle(1, HMI_data.PopupBg_color, 14, 105, 258, 374); - DWIN_Draw_Rectangle(0, HMI_data.Highlight_Color, 14, 105, 258, 374); -} - -void Clear_Popup_Area() { - DWIN_Draw_Rectangle(1, HMI_data.Background_Color, 0, 31, DWIN_WIDTH, DWIN_HEIGHT); -} - -void DWIN_Draw_Popup1(const uint8_t icon) { +//PopUps +void Popup_window_PauseOrStop() { + if (HMI_IsChinese()) { DWINUI::ClearMenuArea(); - Draw_Popup_Bkgd_60(); - if (icon) DWINUI::Draw_Icon(icon, 101, 105); -} -void DWIN_Draw_Popup2(FSTR_P const fmsg2, uint8_t button) { - if (fmsg2) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 240, fmsg2); - if (button) DWINUI::Draw_Icon(button, 86, 280); -} - -void DWIN_Draw_Popup(const uint8_t icon, const char * const cmsg1, FSTR_P const fmsg2, uint8_t button) { - DWIN_Draw_Popup1(icon); - if (cmsg1) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 210, cmsg1); - DWIN_Draw_Popup2(fmsg2, button); -} - -void DWIN_Draw_Popup(const uint8_t icon, FSTR_P const fmsg1, FSTR_P const fmsg2, uint8_t button) { - DWIN_Draw_Popup1(icon); - if (fmsg1) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 210, fmsg1); - DWIN_Draw_Popup2(fmsg2, button); -} - -void DWIN_Popup_Continue(const uint8_t icon, FSTR_P const fmsg1, FSTR_P const fmsg2) { - HMI_SaveProcessID(WaitResponse); - DWIN_Draw_Popup(icon, fmsg1, fmsg2, ICON_Continue_E); // Button Continue + Draw_Popup_Bkgd(); + if (select_print.now == PRINT_PAUSE_RESUME) DWIN_Frame_AreaCopy(1, 237, 338, 269, 356, 98, 150); + else if (select_print.now == PRINT_STOP) DWIN_Frame_AreaCopy(1, 221, 320, 253, 336, 98, 150); + DWIN_Frame_AreaCopy(1, 220, 304, 264, 319, 130, 150); + DWINUI::Draw_Icon(ICON_Confirm_C, 26, 280); + DWINUI::Draw_Icon(ICON_Cancel_C, 146, 280); + Draw_Select_Highlight(true); DWIN_UpdateLCD(); + } + else + DWIN_Popup_ConfirmCancel(ICON_BLTouch, select_print.now == PRINT_PAUSE_RESUME ? GET_TEXT_F(MSG_PAUSE_PRINT) : GET_TEXT_F(MSG_STOP_PRINT)); } #if HAS_HOTEND @@ -521,7 +491,7 @@ void DWIN_Popup_Continue(const uint8_t icon, FSTR_P const fmsg1, FSTR_P const fm if (HMI_IsChinese()) { HMI_SaveProcessID(WaitResponse); DWINUI::ClearMenuArea(); - Draw_Popup_Bkgd_60(); + Draw_Popup_Bkgd(); DWINUI::Draw_Icon(ICON_TempTooLow, 102, 105); DWIN_Frame_AreaCopy(1, 103, 371, 136, 386, 69, 240); DWIN_Frame_AreaCopy(1, 170, 371, 270, 386, 102, 240); @@ -534,79 +504,25 @@ void DWIN_Popup_Continue(const uint8_t icon, FSTR_P const fmsg1, FSTR_P const fm #endif -void Popup_Window_Resume() { - Clear_Popup_Area(); - Draw_Popup_Bkgd_105(); - if (HMI_IsChinese()) { - DWIN_Frame_AreaCopy(1, 160, 338, 235, 354, 98, 135); - DWIN_Frame_AreaCopy(1, 103, 321, 271, 335, 52, 192); - DWINUI::Draw_Icon(ICON_Cancel_C, 26, 307); - DWINUI::Draw_Icon(ICON_Continue_C, 146, 307); - } - else { - DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 115, F("Continue Print")); - DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 192, F("It looks like the last")); - DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 212, F("file was interrupted.")); - DWINUI::Draw_Icon(ICON_Cancel_E, 26, 307); - DWINUI::Draw_Icon(ICON_Continue_E, 146, 307); - } -} - -void Draw_Select_Highlight(const bool sel) { - HMI_flag.select_flag = sel; - const uint16_t c1 = sel ? HMI_data.Highlight_Color : HMI_data.PopupBg_color, - c2 = sel ? HMI_data.PopupBg_color : HMI_data.Highlight_Color; - DWIN_Draw_Rectangle(0, c1, 25, 279, 126, 318); - DWIN_Draw_Rectangle(0, c1, 24, 278, 127, 319); - DWIN_Draw_Rectangle(0, c2, 145, 279, 246, 318); - DWIN_Draw_Rectangle(0, c2, 144, 278, 247, 319); -} - -void Popup_window_PauseOrStop() { - if (HMI_IsChinese()) { - DWINUI::ClearMenuArea(); - Draw_Popup_Bkgd_60(); - if (select_print.now == PRINT_PAUSE_RESUME) DWIN_Frame_AreaCopy(1, 237, 338, 269, 356, 98, 150); - else if (select_print.now == PRINT_STOP) DWIN_Frame_AreaCopy(1, 221, 320, 253, 336, 98, 150); - DWIN_Frame_AreaCopy(1, 220, 304, 264, 319, 130, 150); - DWINUI::Draw_Icon(ICON_Confirm_C, 26, 280); - DWINUI::Draw_Icon(ICON_Cancel_C, 146, 280); - } - else { - DWIN_Draw_Popup(ICON_BLTouch, F("Please confirm"), select_print.now == PRINT_PAUSE_RESUME ? GET_TEXT_F(MSG_PAUSE_PRINT) : GET_TEXT_F(MSG_STOP_PRINT)); - DWINUI::Draw_Icon(ICON_Confirm_E, 26, 280); - DWINUI::Draw_Icon(ICON_Cancel_E, 146, 280); - } - Draw_Select_Highlight(true); - DWIN_UpdateLCD(); -} - #if HAS_HOTEND || HAS_HEATED_BED void DWIN_Popup_Temperature(const bool toohigh) { - Clear_Popup_Area(); - Draw_Popup_Bkgd_105(); + DWINUI::ClearMenuArea(); + Draw_Popup_Bkgd(); + if (HMI_IsChinese()) { if (toohigh) { DWINUI::Draw_Icon(ICON_TempTooHigh, 102, 165); - if (HMI_IsChinese()) { DWIN_Frame_AreaCopy(1, 103, 371, 237, 386, 52, 285); DWIN_Frame_AreaCopy(1, 151, 389, 185, 402, 187, 285); DWIN_Frame_AreaCopy(1, 189, 389, 271, 402, 95, 310); } else { - DWINUI::Draw_String(HMI_data.PopupTxt_Color, 36, 300, F("Nozzle or Bed temperature")); - DWINUI::Draw_String(HMI_data.PopupTxt_Color, 92, 300, F("is too high")); - } - } - else { - DWINUI::Draw_Icon(ICON_TempTooLow, 102, 165); - if (HMI_IsChinese()) { + DWINUI::Draw_Icon(ICON_TempTooLow, 102, 165); DWIN_Frame_AreaCopy(1, 103, 371, 270, 386, 52, 285); DWIN_Frame_AreaCopy(1, 189, 389, 271, 402, 95, 310); } - else { - DWINUI::Draw_String(HMI_data.PopupTxt_Color, 36, 300, F("Nozzle or Bed temperature")); - DWINUI::Draw_String(HMI_data.PopupTxt_Color, 92, 300, F("is too low")); - } + } + else { + DWIN_Draw_Popup(toohigh ? ICON_TempTooHigh : ICON_TempTooLow, F("Nozzle or Bed temperature"), toohigh ? F("is too high") : F("is too low")); } } #endif @@ -642,7 +558,7 @@ void DWIN_CheckStatusMessage() { }; void DWIN_DrawStatusMessage() { - const uint8_t max_status_chars = DWIN_WIDTH / DWINUI::fontWidth(DWINUI::font); + const uint8_t max_status_chars = DWIN_WIDTH / DWINUI::fontWidth(); #if ENABLED(STATUS_MESSAGE_SCROLLING) @@ -693,12 +609,10 @@ void DWIN_DrawStatusMessage() { void Draw_Print_Labels() { if (HMI_IsChinese()) { - Title.FrameCopy(30, 1, 42, 14); // "Printing" DWIN_Frame_AreaCopy(1, 0, 72, 63, 86, 41, 173); // Printing Time DWIN_Frame_AreaCopy(1, 65, 72, 128, 86, 176, 173); // Remain } else { - Title.ShowCaption(GET_TEXT(MSG_PRINTING)); DWINUI::Draw_String( 46, 173, F("Print Time")); DWINUI::Draw_String(181, 173, F("Remain")); } @@ -732,27 +646,30 @@ void ICON_ResumeOrPause() { } void Draw_PrintProcess() { + if (HMI_IsChinese()) + Title.FrameCopy(30, 1, 42, 14); // "Printing" + else + Title.ShowCaption(GET_TEXT_F(MSG_PRINTING)); DWINUI::ClearMenuArea(); - Draw_Print_Labels(); - - ICON_Tune(); - ICON_ResumeOrPause(); - ICON_Stop(); - DWIN_Print_Header(sdprint ? card.longest_filename() : nullptr); - + Draw_Print_Labels(); DWINUI::Draw_Icon(ICON_PrintTime, 15, 173); DWINUI::Draw_Icon(ICON_RemainTime, 150, 171); - Draw_Print_ProgressBar(); Draw_Print_ProgressElapsed(); Draw_Print_ProgressRemain(); - + ICON_Tune(); + ICON_ResumeOrPause(); + ICON_Stop(); DWIN_UpdateLCD(); } void Goto_PrintProcess() { - if (checkkey == PrintProcess) return; + if (checkkey == PrintProcess) { + ICON_ResumeOrPause(); + DWIN_UpdateLCD(); + return; + } checkkey = PrintProcess; Draw_PrintProcess(); } @@ -762,30 +679,27 @@ void Draw_PrintDone() { _percent_done = 100; _remain_time = 0; + Title.ShowCaption(GET_TEXT_F(MSG_PRINT_DONE)); DWINUI::ClearMenuArea(); DWIN_Print_Header(nullptr); + Draw_Print_ProgressBar(); Draw_Print_Labels(); DWINUI::Draw_Icon(ICON_PrintTime, 15, 173); DWINUI::Draw_Icon(ICON_RemainTime, 150, 171); - Draw_Print_ProgressBar(); Draw_Print_ProgressElapsed(); Draw_Print_ProgressRemain(); - // show print done confirm - DWIN_Draw_Rectangle(1, HMI_data.Background_Color, 0, 240, DWIN_WIDTH - 1, STATUS_Y - 1); - DWINUI::Draw_Icon(HMI_IsChinese() ? ICON_Confirm_C : ICON_Confirm_E, 86, 283); + DWINUI::Draw_Icon(HMI_IsChinese() ? ICON_Confirm_C : ICON_Confirm_E, 86, 273); + DWIN_UpdateLCD(); } void Draw_Main_Menu() { DWINUI::ClearMenuArea(); - if (HMI_IsChinese()) Title.FrameCopy(2, 2, 26, 13); // "Home" etc else Title.ShowCaption(MACHINE_NAME); - DWINUI::Draw_Icon(ICON_LOGO, 71, 52); // CREALITY logo - ICON_Print(); ICON_Prepare(); ICON_Control(); @@ -917,6 +831,18 @@ void update_variable() { DWINUI::Draw_Signed_Float(DWIN_FONT_STAT, HMI_data.Indicator_Color, HMI_data.Background_Color, 2, 2, 210, 417, _offset); } + #if HAS_MESH + static bool _leveling_active = false; + if (_leveling_active != planner.leveling_active) { + _leveling_active = planner.leveling_active; + DWIN_Draw_Box(1, HMI_data.Background_Color, 186, 416, 20, 20); + if (_leveling_active) + DWINUI::Draw_Icon(ICON_SetZOffset, 186, 416); + else + DWINUI::Draw_Icon(ICON_Zoffset, 187, 416); + } + #endif + _draw_xyz_position(false); } @@ -933,14 +859,15 @@ void update_variable() { #endif void make_name_without_ext(char *dst, char *src, size_t maxlen=MENU_CHAR_LIMIT) { - char * const name = card.longest_filename(); - size_t pos = strlen(name); // index of ending nul + size_t pos = strlen(src); // index of ending nul // For files, remove the extension // which may be .gcode, .gco, or .g if (!card.flag.filenameIsDir) while (pos && src[pos] != '.') pos--; // find last '.' (stop at 0) + if (!pos) pos = strlen(src); // pos = 0 ('.' not found) restore pos + size_t len = pos; // nul or '.' if (len > maxlen) { // Keep the name short pos = len = maxlen; // move nul down @@ -1083,11 +1010,11 @@ void HMI_SDCardUpdate() { if (DWIN_lcd_sd_status != card.isMounted()) { DWIN_lcd_sd_status = card.isMounted(); //SERIAL_ECHOLNPGM("HMI_SDCardUpdate: ", DWIN_lcd_sd_status); - if (DWIN_lcd_sd_status) { + if (DWIN_lcd_sd_status) { // Media inserted if (checkkey == SelectFile) Redraw_SD_List(); } - else { + else { // Media removed // clean file icon if (checkkey == SelectFile) { Redraw_SD_List(); @@ -1140,7 +1067,7 @@ void Draw_Status_Area(const bool with_update) { #endif #if HAS_ZOFFSET_ITEM - DWINUI::Draw_Icon(ICON_Zoffset, 187, 416); + DWINUI::Draw_Icon(planner.leveling_active ? ICON_SetZOffset : ICON_Zoffset, 187, 416); #endif DWINUI::Draw_Signed_Float(DWIN_FONT_STAT, HMI_data.Indicator_Color, HMI_data.Background_Color, 2, 2, 210, 417, BABY_Z_VAR); @@ -1188,7 +1115,7 @@ void Draw_Info_Menu() { DWINUI::Draw_CenteredString(268, F(CORP_WEBSITE)); LOOP_L_N(i, 3) { - DWINUI::Draw_Icon(ICON_PrintSize + i, 26, 99 + i * 73); + DWINUI::Draw_Icon(ICON_PrintSize + i, ICOX, 99 + i * 73); DWIN_Draw_HLine(HMI_data.SplitLine_Color, 16, MBASE(2) + i * 73, 240); } @@ -1244,7 +1171,7 @@ void HMI_MainMenu() { queue.inject(F("G28Z\nG29")); // Force to get the current Z home position #else last_checkkey = MainMenu; - Goto_InfoMenu(); + Goto_Info_Menu(); #endif break; } @@ -1477,7 +1404,7 @@ void HMI_PauseOrStop() { #ifdef ACTION_ON_CANCEL hostui.cancel(); #endif - DWIN_Draw_Popup(ICON_BLTouch, F("Stopping...") , F("Please wait until done.")); + DWIN_Draw_Popup(ICON_BLTouch, F("Stopping..."), F("Please wait until done.")); } else Goto_PrintProcess(); // cancel stop @@ -1507,6 +1434,12 @@ void Draw_Main_Area() { case PrintProcess: Draw_PrintProcess(); break; case PrintDone: Draw_PrintDone(); break; case Info: Draw_Info_Menu(); break; + #if HAS_ESDIAG + case ESDiagProcess: Draw_EndStopDiag(); break; + #endif + #if ENABLED(PRINTCOUNTER) + case PrintStatsProcess: Draw_PrintStats(); break; + #endif case PauseOrStop: Popup_window_PauseOrStop(); break; #if ENABLED(ADVANCED_PAUSE_FEATURE) case FilamentPurge: Draw_Popup_FilamentPurge(); break; @@ -1524,6 +1457,7 @@ void Draw_Main_Area() { void HMI_ReturnScreen() { checkkey = last_checkkey; + wait_for_user = false; Draw_Main_Area(); return; } @@ -1532,7 +1466,6 @@ void HMI_Popup() { EncoderState encoder_diffState = get_encoder_state(); if (encoder_diffState == ENCODER_DIFF_NO) return; if (encoder_diffState == ENCODER_DIFF_ENTER) { - wait_for_user = false; HMI_ReturnScreen(); } } @@ -1563,6 +1496,15 @@ void EachMomentUpdate() { if (ELAPSED(ms, next_var_update_ms)) { next_var_update_ms = ms + DWIN_VAR_UPDATE_INTERVAL; update_variable(); + switch (checkkey) { + #if HAS_ESDIAG + case ESDiagProcess: + ESDiag.Update(); + break; + #endif + default: + break; + } } if (ELAPSED(ms, next_status_update_ms)) { @@ -1643,61 +1585,70 @@ void EachMomentUpdate() { #if ENABLED(POWER_LOSS_RECOVERY) else if (DWIN_lcd_sd_status && recovery.dwin_flag) { // resume print before power off - static bool recovery_flag = false; - - recovery.dwin_flag = false; - recovery_flag = true; - - auto update_selection = [&](const bool sel) { - HMI_flag.select_flag = sel; - const uint16_t c1 = sel ? HMI_data.PopupBg_color : HMI_data.Highlight_Color; - DWIN_Draw_Rectangle(0, c1, 25, 306, 126, 345); - DWIN_Draw_Rectangle(0, c1, 24, 305, 127, 346); - const uint16_t c2 = sel ? HMI_data.Highlight_Color : HMI_data.PopupBg_color; - DWIN_Draw_Rectangle(0, c2, 145, 306, 246, 345); - DWIN_Draw_Rectangle(0, c2, 144, 305, 247, 346); - }; - - Popup_Window_Resume(); - update_selection(true); - - // TODO: Get the name of the current file from someplace - // - //(void)recovery.interrupted_file_exists(); - SdFile *dir = nullptr; - const char * const filename = card.diveToFile(true, dir, recovery.info.sd_filename); - card.selectFileByName(filename); - DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 252, card.longest_filename()); - DWIN_UpdateLCD(); - - while (recovery_flag) { - EncoderState encoder_diffState = Encoder_ReceiveAnalyze(); - if (encoder_diffState != ENCODER_DIFF_NO) { - if (encoder_diffState == ENCODER_DIFF_ENTER) { - recovery_flag = false; - if (HMI_flag.select_flag) break; - TERN_(POWER_LOSS_RECOVERY, queue.inject(F("M1000C"))); - return HMI_StartFrame(true); - } - else - update_selection(encoder_diffState == ENCODER_DIFF_CW); - - DWIN_UpdateLCD(); - } - watchdog_refresh(); - } - - select_print.set(PRINT_SETUP); - queue.inject(F("M1000")); - sdprint = true; - Goto_PrintProcess(); - Draw_Status_Area(true); + Goto_PowerLossRecovery(); } #endif // POWER_LOSS_RECOVERY DWIN_UpdateLCD(); } +#if ENABLED(POWER_LOSS_RECOVERY) + void Popup_PowerLossRecovery() { + DWINUI::ClearMenuArea(); + Draw_Popup_Bkgd(); + if (HMI_IsChinese()) { + DWIN_Frame_AreaCopy(1, 160, 338, 235, 354, 98, 115); + DWIN_Frame_AreaCopy(1, 103, 321, 271, 335, 52, 167); + DWINUI::Draw_Icon(ICON_Cancel_C, 26, 280); + DWINUI::Draw_Icon(ICON_Continue_C, 146, 280); + } + else { + DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 70, GET_TEXT_F(MSG_OUTAGE_RECOVERY)); + DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 147, F("It looks like the last")); + DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 167, F("file was interrupted.")); + DWINUI::Draw_Icon(ICON_Cancel_E, 26, 280); + DWINUI::Draw_Icon(ICON_Continue_E, 146, 280); + } + SdFile *dir = nullptr; + const char * const filename = card.diveToFile(true, dir, recovery.info.sd_filename); + card.selectFileByName(filename); + DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 207, card.longest_filename()); + Draw_Select_Highlight(HMI_flag.select_flag); + DWIN_UpdateLCD(); + } + + void Goto_PowerLossRecovery() { + recovery.dwin_flag = false; + LCD_MESSAGE_F("Recovery from power loss"); + HMI_flag.select_flag = false; + Popup_PowerLossRecovery(); + last_checkkey = MainMenu; + checkkey = PwrlossRec; + } + + void HMI_PowerlossRecovery() { + EncoderState encoder_diffState = get_encoder_state(); + if (encoder_diffState == ENCODER_DIFF_NO) return; + if (encoder_diffState == ENCODER_DIFF_ENTER) { + if (HMI_flag.select_flag) { + queue.inject(F("M1000C")); + select_page.reset(); + Goto_Main_Menu(); + } + else { + select_print.set(PRINT_SETUP); + queue.inject(F("M1000")); + sdprint = true; + Goto_PrintProcess(); + } + } + else + Draw_Select_Highlight(encoder_diffState != ENCODER_DIFF_CW); + DWIN_UpdateLCD(); + } +#endif // POWER_LOSS_RECOVERY + + void DWIN_HandleScreen() { switch (checkkey) { case MainMenu: HMI_MainMenu(); break; @@ -1720,18 +1671,31 @@ void DWIN_HandleScreen() { #endif case NothingToDo: break; case Locked: HMI_LockScreen(); break; + #if HAS_ESDIAG + case ESDiagProcess: HMI_Popup(); break; + #endif + #if ENABLED(PRINTCOUNTER) + case PrintStatsProcess: HMI_Popup(); break; + #endif default: break; } } +bool IDisPopUp() { // If ID is popup... + return (checkkey == NothingToDo) || + (checkkey == WaitResponse) || + (checkkey == Info) || + (checkkey == Homing) || + (checkkey == Leveling) || + TERN_(HAS_ESDIAG, (checkkey == ESDiagProcess) ||) + TERN_(PRINTCOUNTER, (checkkey == PrintStatsProcess) ||) + (checkkey == PauseOrStop) || + (checkkey == FilamentPurge); +} + void HMI_SaveProcessID(const uint8_t id) { if (checkkey != id) { - if ((checkkey != NothingToDo) && - (checkkey != WaitResponse) && - (checkkey != Homing) && - (checkkey != Leveling) && - (checkkey != PauseOrStop) && - (checkkey != FilamentPurge)) last_checkkey = checkkey; // if not a popup + if (!IDisPopUp()) last_checkkey = checkkey; // if previous is not a popup checkkey = id; } } @@ -1811,7 +1775,7 @@ void DWIN_PidTuning(pidresult_t result) { void DWIN_Print_Header(const char *text = nullptr) { static char headertxt[31] = ""; // Print header text - if (text != nullptr) { + if (text) { const int8_t size = _MIN((unsigned) 30, strlen_P(text)); LOOP_L_N(i, size) headertxt[i] = text[i]; headertxt[size] = '\0'; @@ -1929,8 +1893,8 @@ void MarlinUI::kill_screen(FSTR_P const lcd_error, FSTR_P const lcd_component) { void DWIN_RebootScreen() { DWIN_Frame_Clear(Color_Bg_Black); - DWINUI::Draw_Icon(ICON_LOGO, 71, 150); // CREALITY logo - DWINUI::Draw_CenteredString(Color_White, 200, F("Please wait until reboot.")); + DWIN_JPG_ShowAndCache(0); + DWINUI::Draw_CenteredString(Color_White, 220, F("Please wait until reboot. ")); DWIN_UpdateLCD(); delay(500); } @@ -2012,29 +1976,47 @@ void DWIN_Redraw_screen() { MeshViewer.Draw(); } } -#endif +#endif // HAS_MESH + +void DWIN_LockScreen() { + if (checkkey != Locked) { + lockScreen.rprocess = checkkey; + checkkey = Locked; + lockScreen.init(); + } +} + +void DWIN_UnLockScreen() { + if (checkkey == Locked) { + checkkey = lockScreen.rprocess; + Draw_Main_Area(); + } +} void HMI_LockScreen() { EncoderState encoder_diffState = get_encoder_state(); if (encoder_diffState == ENCODER_DIFF_NO) return; lockScreen.onEncoder(encoder_diffState); - if (lockScreen.isUnlocked()) { - if (CurrentMenu == AdvancedSettings) - Draw_AdvancedSettings_Menu(); - else - Draw_Tune_Menu(); + if (lockScreen.isUnlocked()) DWIN_UnLockScreen(); +} + +#if HAS_ESDIAG + void Draw_EndStopDiag() { + HMI_SaveProcessID(ESDiagProcess); + ESDiag.Draw(); } -} +#endif -void DWIN_LockScreen(const bool flag) { - HMI_flag.lock_flag = flag; - checkkey = Locked; - lockScreen.init(); -} +#if ENABLED(PRINTCOUNTER) + void Draw_PrintStats() { + HMI_SaveProcessID(PrintStatsProcess); + PrintStats.Draw(); + } +#endif -// -// NEW MENU SUBSYSTEM ========================================================= -// +//============================================================================= +// NEW MENU SUBSYSTEM +//============================================================================= // On click functions @@ -2152,15 +2134,31 @@ void RebootPrinter() { HAL_reboot(); } -void Goto_InfoMenu(){ - checkkey = Info; +void Goto_Info_Menu(){ + HMI_SaveProcessID(Info); Draw_Info_Menu(); } +void Goto_Move_Menu() { + #if HAS_HOTEND + gcode.process_subcommands_now(F("G92E0")); // reset extruder position + planner.synchronize(); + #endif + Draw_Move_Menu(); +} + void DisableMotors() { queue.inject(F("M84")); } +void AutoLev() { queue.inject(F("G28Z\nG29")); } // Force to get the current Z home position + void AutoHome() { queue.inject_P(G28_STR); } +void HomeX() { queue.inject(F("G28X")); } + +void HomeY() { queue.inject(F("G28Y")); } + +void HomeZ() { queue.inject(F("G28Z")); } + void SetHome() { // Apply workspace offset, making the current position 0,0,0 queue.inject(F("G92 X0 Y0 Z0")); @@ -2285,8 +2283,6 @@ void SetPID(celsius_t t, heater_id_t h) { } #endif -void Goto_LockScreen() { DWIN_LockScreen(true); } - #if HAS_HOME_OFFSET void ApplyHomeOffset() { set_home_offset(HMI_value.axis, HMI_value.Value / MINUNITMULT); } void SetHomeOffsetX() { HMI_value.axis = X_AXIS; SetPFloatOnClick(-50, 50, UNITFDIGITS, ApplyHomeOffset); } @@ -2295,13 +2291,15 @@ void Goto_LockScreen() { DWIN_LockScreen(true); } #endif #if HAS_BED_PROBE - void SetProbeOffsetX() { SetPFloatOnClick(-50, 50, UNITFDIGITS); } - void SetProbeOffsetY() { SetPFloatOnClick(-50, 50, UNITFDIGITS); } + void SetProbeOffsetX() { SetPFloatOnClick(-60, 60, UNITFDIGITS); } + void SetProbeOffsetY() { SetPFloatOnClick(-60, 60, UNITFDIGITS); } void SetProbeOffsetZ() { SetPFloatOnClick(-10, 10, 2); } void ProbeTest() { LCD_MESSAGE(MSG_M48_TEST); queue.inject(F("G28O\nM48 P10")); } + void ProbeStow() { probe.stow(); } + void ProbeDeploy() { probe.deploy(); } #endif #if HAS_FILAMENT_SENSOR @@ -2409,6 +2407,8 @@ void SetFlow() { SetPIntOnClick(MIN_PRINT_FLOW, MAX_PRINT_FLOW, ApplyFlow); } void LevBed(uint8_t point) { char cmd[100] = ""; #if HAS_ONESTEP_LEVELING + static bool inLev = false; + if (inLev) return; char str_1[6] = "", str_2[6] = "", str_3[6] = ""; #define fmt "X:%s, Y:%s, Z:%s" float xpos = 0, ypos = 0, zval = 0; @@ -2444,8 +2444,10 @@ void LevBed(uint8_t point) { #if HAS_ONESTEP_LEVELING planner.synchronize(); + probe.stow(); gcode.process_subcommands_now(F("M420S0\nG28O")); planner.synchronize(); + inLev = true; zval = probe.probe_at_point(xpos, ypos, PROBE_PT_STOW); sprintf_P(cmd, PSTR(fmt), dtostrf(xpos, 1, 1, str_1), @@ -2453,6 +2455,7 @@ void LevBed(uint8_t point) { dtostrf(zval, 1, 2, str_3) ); ui.set_status(cmd); + inLev = false; #else planner.synchronize(); sprintf_P(cmd, PSTR(fmt), xpos, ypos); @@ -2572,6 +2575,13 @@ void SetStepsZ() { HMI_value.axis = Z_AXIS, SetPFloatOnClick( MIN_STEP, MAX_STEP } #endif +#if ENABLED(FWRETRACT) + void SetRetractLength() { SetPFloatOnClick( 0, 10, UNITFDIGITS); }; + void SetRetractSpeed() { SetPFloatOnClick( 1, 90, UNITFDIGITS); }; + void SetZRaise() { SetPFloatOnClick( 0, 2, 2); }; + void SetRecoverSpeed() { SetPFloatOnClick( 1, 90, UNITFDIGITS); }; +#endif + // Menuitem Drawing functions ================================================= void onDrawMenuItem(MenuItemClass* menuitem, int8_t line) { @@ -2745,7 +2755,9 @@ void onDrawLanguage(MenuItemClass* menuitem, int8_t line) { void onDrawPwrLossR(MenuItemClass* menuitem, int8_t line) { onDrawChkbMenu(menuitem, line, recovery.enabled); } #endif -void onDrawEnableSound(MenuItemClass* menuitem, int8_t line) { onDrawChkbMenu(menuitem, line, ui.buzzer_enabled); } +#if ENABLED(SOUND_MENU_ITEM) + void onDrawEnableSound(MenuItemClass* menuitem, int8_t line) { onDrawChkbMenu(menuitem, line, ui.buzzer_enabled); } +#endif void onDrawSelColorItem(MenuItemClass* menuitem, int8_t line) { const uint16_t color = *(uint16_t*)static_cast(menuitem)->value; @@ -3025,9 +3037,12 @@ void onDrawStepsZ(MenuItemClass* menuitem, int8_t line) { void HMI_Menu() { EncoderState encoder_diffState = get_encoder_state(); if (encoder_diffState == ENCODER_DIFF_NO) return; - if (encoder_diffState == ENCODER_DIFF_ENTER) { - if (CurrentMenu != nullptr) CurrentMenu->onClick(); - } else if (CurrentMenu != nullptr) CurrentMenu->onScroll(encoder_diffState == ENCODER_DIFF_CW); + if (CurrentMenu) { + if (encoder_diffState == ENCODER_DIFF_ENTER) + CurrentMenu->onClick(); + else + CurrentMenu->onScroll(encoder_diffState == ENCODER_DIFF_CW); + } } // Get an integer value using the encoder without draw anything @@ -3079,8 +3094,8 @@ void HMI_SetInt() { int8_t val = HMI_GetInt(HMI_value.MinValue, HMI_value.MaxValue); switch (val) { case 0: return; break; - case 1: if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate(); break; - case 2: if (HMI_value.Apply != nullptr) HMI_value.Apply(); break; + case 1: if (HMI_value.LiveUpdate) HMI_value.LiveUpdate(); break; + case 2: if (HMI_value.Apply) HMI_value.Apply(); break; } } @@ -3089,8 +3104,8 @@ void HMI_SetIntNoDraw() { int8_t val = HMI_GetIntNoDraw(HMI_value.MinValue, HMI_value.MaxValue); switch (val) { case 0: return; break; - case 1: if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate(); break; - case 2: if (HMI_value.Apply != nullptr) HMI_value.Apply(); break; + case 1: if (HMI_value.LiveUpdate) HMI_value.LiveUpdate(); break; + case 2: if (HMI_value.Apply) HMI_value.Apply(); break; } } @@ -3099,8 +3114,8 @@ void HMI_SetPInt() { int8_t val = HMI_GetInt(HMI_value.MinValue, HMI_value.MaxValue); switch (val) { case 0: return; - case 1: if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate(); break; - case 2: *HMI_value.P_Int = HMI_value.Value; if (HMI_value.Apply != nullptr) HMI_value.Apply(); break; + case 1: if (HMI_value.LiveUpdate) HMI_value.LiveUpdate(); break; + case 2: *HMI_value.P_Int = HMI_value.Value; if (HMI_value.Apply) HMI_value.Apply(); break; } } @@ -3133,8 +3148,8 @@ void HMI_SetFloat() { const int8_t val = HMI_GetFloat(HMI_value.dp, HMI_value.MinValue, HMI_value.MaxValue); switch (val) { case 0: return; - case 1: if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate(); break; - case 2: if (HMI_value.Apply != nullptr) HMI_value.Apply(); break; + case 1: if (HMI_value.LiveUpdate) HMI_value.LiveUpdate(); break; + case 2: if (HMI_value.Apply) HMI_value.Apply(); break; } } @@ -3143,8 +3158,8 @@ void HMI_SetPFloat() { const int8_t val = HMI_GetFloat(HMI_value.dp, HMI_value.MinValue, HMI_value.MaxValue); switch (val) { case 0: return; - case 1: if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate(); break; - case 2: *HMI_value.P_Float = HMI_value.Value / POW(10, HMI_value.dp); if (HMI_value.Apply != nullptr) HMI_value.Apply(); break; + case 1: if (HMI_value.LiveUpdate) HMI_value.LiveUpdate(); break; + case 2: *HMI_value.P_Float = HMI_value.Value / POW(10, HMI_value.dp); if (HMI_value.Apply) HMI_value.Apply(); break; } } @@ -3159,7 +3174,7 @@ void SetMenuTitle(frame_rect_t cn, const __FlashStringHelper* fstr) { void Draw_Prepare_Menu() { checkkey = Menu; - if (PrepareMenu == nullptr) PrepareMenu = new MenuClass(); + if (!PrepareMenu) PrepareMenu = new MenuClass(); if (CurrentMenu != PrepareMenu) { CurrentMenu = PrepareMenu; SetMenuTitle({133, 1, 28, 13}, GET_TEXT_F(MSG_PREPARE)); @@ -3168,16 +3183,22 @@ void Draw_Prepare_Menu() { #if ENABLED(ADVANCED_PAUSE_FEATURE) ADDMENUITEM(ICON_FilMan, GET_TEXT_F(MSG_FILAMENT_MAN), onDrawSubMenu, Draw_FilamentMan_Menu); #endif - ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_MOVE_AXIS), onDrawMoveSubMenu, Draw_Move_Menu); + ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_MOVE_AXIS), onDrawMoveSubMenu, Goto_Move_Menu); ADDMENUITEM(ICON_LevBed, GET_TEXT_F(MSG_BED_LEVELING), onDrawSubMenu, Draw_LevBedCorners_Menu); ADDMENUITEM(ICON_CloseMotor, GET_TEXT_F(MSG_DISABLE_STEPPERS), onDrawDisableMotors, DisableMotors); - ADDMENUITEM(ICON_Homing, GET_TEXT_F(MSG_AUTO_HOME), onDrawAutoHome, AutoHome); + #if ENABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU) + ADDMENUITEM(ICON_Homing, GET_TEXT_F(MSG_HOMING), onDrawSubMenu, Draw_Homing_Menu); + #else + ADDMENUITEM(ICON_Homing, GET_TEXT_F(MSG_AUTO_HOME), onDrawAutoHome, AutoHome); + #endif #if ENABLED(MESH_BED_LEVELING) ADDMENUITEM(ICON_ManualMesh, GET_TEXT_F(MSG_MANUAL_MESH), onDrawSubMenu, Draw_ManualMesh_Menu); #endif #if HAS_ZOFFSET_ITEM - #if EITHER(HAS_BED_PROBE, BABYSTEPPING) + #if HAS_BED_PROBE ADDMENUITEM(ICON_SetZOffset, GET_TEXT_F(MSG_PROBE_WIZARD), onDrawSubMenu, Draw_ZOffsetWiz_Menu); + #elif ENABLED(BABYSTEPPING) + ADDMENUITEM_P(ICON_Zoffset, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetZOffset, &BABY_Z_VAR); #else ADDMENUITEM(ICON_SetHome, GET_TEXT_F(MSG_SET_HOME_OFFSETS), onDrawHomeOffset, SetHome); #endif @@ -3200,7 +3221,7 @@ void Draw_Prepare_Menu() { void Draw_LevBedCorners_Menu() { DWINUI::ClearMenuArea(); checkkey = Menu; - if (LevBedMenu == nullptr) LevBedMenu = new MenuClass(); + if (!LevBedMenu) LevBedMenu = new MenuClass(); if (CurrentMenu != LevBedMenu) { CurrentMenu = LevBedMenu; SetMenuTitle({0}, GET_TEXT_F(MSG_BED_TRAMMING)); // TODO: Chinese, English "Bed Tramming" JPG @@ -3217,7 +3238,7 @@ void Draw_LevBedCorners_Menu() { void Draw_Control_Menu() { checkkey = Menu; - if (ControlMenu == nullptr) ControlMenu = new MenuClass(); + if (!ControlMenu) ControlMenu = new MenuClass(); if (CurrentMenu != ControlMenu) { CurrentMenu = ControlMenu; SetMenuTitle({103, 1, 28, 14}, GET_TEXT_F(MSG_CONTROL)); @@ -3232,18 +3253,18 @@ void Draw_Control_Menu() { #endif ADDMENUITEM(ICON_Reboot, GET_TEXT_F(MSG_RESET_PRINTER), onDrawMenuItem, RebootPrinter); ADDMENUITEM(ICON_AdvSet, GET_TEXT_F(MSG_ADVANCED_SETTINGS), onDrawSubMenu, Draw_AdvancedSettings_Menu); - ADDMENUITEM(ICON_Info, GET_TEXT_F(MSG_INFO_SCREEN), onDrawInfoSubMenu, Goto_InfoMenu); + ADDMENUITEM(ICON_Info, GET_TEXT_F(MSG_INFO_SCREEN), onDrawInfoSubMenu, Goto_Info_Menu); } CurrentMenu->draw(); } void Draw_AdvancedSettings_Menu() { checkkey = Menu; - if (AdvancedSettings == nullptr) AdvancedSettings = new MenuClass(); + if (!AdvancedSettings) AdvancedSettings = new MenuClass(); if (CurrentMenu != AdvancedSettings) { CurrentMenu = AdvancedSettings; SetMenuTitle({0}, GET_TEXT_F(MSG_ADVANCED_SETTINGS)); // TODO: Chinese, English "Advanced Settings" JPG - DWINUI::MenuItemsPrepare(12); + DWINUI::MenuItemsPrepare(15); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu); #if HAS_HOME_OFFSET ADDMENUITEM(ICON_HomeOffset, GET_TEXT_F(MSG_SET_HOME_OFFSETS), onDrawSubMenu, Draw_HomeOffset_Menu); @@ -3273,14 +3294,21 @@ void Draw_AdvancedSettings_Menu() { #if HAS_MESH ADDMENUITEM(ICON_MeshViewer, GET_TEXT_F(MSG_MESH_VIEW), onDrawSubMenu, DWIN_MeshViewer); #endif - ADDMENUITEM(ICON_Lock, F("Lock Screen"), onDrawMenuItem, Goto_LockScreen); + #if HAS_ESDIAG + ADDMENUITEM(ICON_ESDiag, F("End-stops diag."), onDrawSubMenu, Draw_EndStopDiag); + #endif + #if ENABLED(PRINTCOUNTER) + ADDMENUITEM(ICON_PrintStats, GET_TEXT_F(MSG_INFO_STATS_MENU), onDrawSubMenu, Draw_PrintStats); + ADDMENUITEM(ICON_PrintStatsReset, GET_TEXT_F(MSG_INFO_PRINT_COUNT_RESET), onDrawSubMenu, PrintStats.Reset); + #endif + ADDMENUITEM(ICON_Lock, F("Lock Screen"), onDrawMenuItem, DWIN_LockScreen); } CurrentMenu->draw(); } void Draw_Move_Menu() { checkkey = Menu; - if (MoveMenu == nullptr) MoveMenu = new MenuClass(); + if (!MoveMenu) MoveMenu = new MenuClass(); if (CurrentMenu != MoveMenu) { CurrentMenu = MoveMenu; SetMenuTitle({192, 1, 42, 14}, GET_TEXT_F(MSG_MOVE_AXIS)); @@ -3294,13 +3322,13 @@ void Draw_Move_Menu() { #endif } CurrentMenu->draw(); - if (!all_axes_trusted()) LCD_MESSAGE_F("WARNING: position is unknown"); + if (!all_axes_trusted()) LCD_MESSAGE_F("WARNING: current position is unknown, home axes"); } #if HAS_HOME_OFFSET void Draw_HomeOffset_Menu() { checkkey = Menu; - if (HomeOffMenu == nullptr) HomeOffMenu = new MenuClass(); + if (!HomeOffMenu) HomeOffMenu = new MenuClass(); if (CurrentMenu != HomeOffMenu) { CurrentMenu = HomeOffMenu; SetMenuTitle({0}, GET_TEXT_F(MSG_SET_HOME_OFFSETS)); // TODO: Chinese, English "Set Home Offsets" JPG @@ -3317,16 +3345,18 @@ void Draw_Move_Menu() { #if HAS_BED_PROBE void Draw_ProbeSet_Menu() { checkkey = Menu; - if (ProbeSetMenu == nullptr) ProbeSetMenu = new MenuClass(); + if (!ProbeSetMenu) ProbeSetMenu = new MenuClass(); if (CurrentMenu != ProbeSetMenu) { CurrentMenu = ProbeSetMenu; SetMenuTitle({0}, GET_TEXT_F(MSG_ZPROBE_SETTINGS)); // TODO: Chinese, English "Probe Settings" JPG - DWINUI::MenuItemsPrepare(5); + DWINUI::MenuItemsPrepare(7); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu); ADDMENUITEM_P(ICON_ProbeOffsetX, GET_TEXT_F(MSG_ZPROBE_XOFFSET), onDrawPFloatMenu, SetProbeOffsetX, &probe.offset.x); ADDMENUITEM_P(ICON_ProbeOffsetY, GET_TEXT_F(MSG_ZPROBE_YOFFSET), onDrawPFloatMenu, SetProbeOffsetY, &probe.offset.y); ADDMENUITEM_P(ICON_ProbeOffsetZ, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetProbeOffsetZ, &probe.offset.z); ADDMENUITEM(ICON_ProbeTest, GET_TEXT_F(MSG_M48_TEST), onDrawMenuItem, ProbeTest); + ADDMENUITEM(ICON_ProbeStow, GET_TEXT_F(MSG_MANUAL_STOW), onDrawMenuItem, ProbeStow); + ADDMENUITEM(ICON_ProbeDeploy, GET_TEXT_F(MSG_MANUAL_DEPLOY), onDrawMenuItem, ProbeDeploy); } CurrentMenu->draw(); } @@ -3335,11 +3365,11 @@ void Draw_Move_Menu() { #if HAS_FILAMENT_SENSOR void Draw_FilSet_Menu() { checkkey = Menu; - if (FilSetMenu == nullptr) FilSetMenu = new MenuClass(); + if (!FilSetMenu) FilSetMenu = new MenuClass(); if (CurrentMenu != FilSetMenu) { CurrentMenu = FilSetMenu; CurrentMenu->MenuTitle.SetCaption(GET_TEXT_F(MSG_FILAMENT_SET)); - DWINUI::MenuItemsPrepare(6); + DWINUI::MenuItemsPrepare(10); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu); #if HAS_FILAMENT_SENSOR ADDMENUITEM(ICON_Runout, GET_TEXT_F(MSG_RUNOUT_ENABLE), onDrawRunoutEnable, SetRunoutEnable); @@ -3354,6 +3384,12 @@ void Draw_Move_Menu() { ADDMENUITEM_P(ICON_FilLoad, GET_TEXT_F(MSG_FILAMENT_LOAD), onDrawPFloatMenu, SetFilLoad, &fc_settings[0].load_length); ADDMENUITEM_P(ICON_FilUnload, GET_TEXT_F(MSG_FILAMENT_UNLOAD), onDrawPFloatMenu, SetFilUnload, &fc_settings[0].unload_length); #endif + #if ENABLED(FWRETRACT) + ADDMENUITEM_P(ICON_FWRetLength, GET_TEXT_F(MSG_CONTROL_RETRACT), onDrawPFloatMenu, SetRetractLength, &fwretract.settings.retract_length); + ADDMENUITEM_P(ICON_FWRetSpeed, GET_TEXT_F(MSG_SINGLENOZZLE_RETRACT_SPEED), onDrawPFloatMenu, SetRetractSpeed, &fwretract.settings.retract_feedrate_mm_s); + ADDMENUITEM_P(ICON_FWRetZRaise, GET_TEXT_F(MSG_CONTROL_RETRACT_ZHOP), onDrawPFloat2Menu, SetZRaise, &fwretract.settings.retract_zraise); + ADDMENUITEM_P(ICON_FWRecSpeed, GET_TEXT_F(MSG_SINGLENOZZLE_UNRETRACT_SPEED), onDrawPFloatMenu, SetRecoverSpeed, &fwretract.settings.retract_recover_feedrate_mm_s); + #endif } CurrentMenu->draw(); } @@ -3361,7 +3397,7 @@ void Draw_Move_Menu() { void Draw_SelectColors_Menu() { checkkey = Menu; - if (SelectColorMenu == nullptr) SelectColorMenu = new MenuClass(); + if (!SelectColorMenu) SelectColorMenu = new MenuClass(); if (CurrentMenu != SelectColorMenu) { CurrentMenu = SelectColorMenu; SetMenuTitle({0}, F("Select Colors")); // TODO: Chinese, English "Select Color" JPG @@ -3392,7 +3428,7 @@ void Draw_SelectColors_Menu() { void Draw_GetColor_Menu() { checkkey = Menu; - if (GetColorMenu == nullptr) GetColorMenu = new MenuClass(); + if (!GetColorMenu) GetColorMenu = new MenuClass(); if (CurrentMenu != GetColorMenu) { CurrentMenu = GetColorMenu; SetMenuTitle({0}, F("Get Color")); // TODO: Chinese, English "Get Color" JPG @@ -3409,11 +3445,11 @@ void Draw_GetColor_Menu() { void Draw_Tune_Menu() { checkkey = Menu; - if (TuneMenu == nullptr) TuneMenu = new MenuClass(); + if (!TuneMenu) TuneMenu = new MenuClass(); if (CurrentMenu != TuneMenu) { CurrentMenu = TuneMenu; SetMenuTitle({73, 2, 28, 12}, GET_TEXT_F(MSG_TUNE)); // TODO: Chinese, English "Tune" JPG - DWINUI::MenuItemsPrepare(10); + DWINUI::MenuItemsPrepare(14); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_PrintProcess); ADDMENUITEM_P(ICON_Speed, GET_TEXT_F(MSG_SPEED), onDrawSpeedItem, SetSpeed, &feedrate_percentage); #if HAS_HOTEND @@ -3428,11 +3464,17 @@ void Draw_Tune_Menu() { #if HAS_ZOFFSET_ITEM && EITHER(HAS_BED_PROBE, BABYSTEPPING) ADDMENUITEM_P(ICON_Zoffset, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), onDrawZOffset, SetZOffset, &BABY_Z_VAR); #endif + #if ENABLED(FWRETRACT) + ADDMENUITEM_P(ICON_FWRetLength, GET_TEXT_F(MSG_CONTROL_RETRACT), onDrawPFloatMenu, SetRetractLength, &fwretract.settings.retract_length); + ADDMENUITEM_P(ICON_FWRetSpeed, GET_TEXT_F(MSG_SINGLENOZZLE_RETRACT_SPEED), onDrawPFloatMenu, SetRetractSpeed, &fwretract.settings.retract_feedrate_mm_s); + ADDMENUITEM_P(ICON_FWRetZRaise, GET_TEXT_F(MSG_CONTROL_RETRACT_ZHOP), onDrawPFloat2Menu, SetZRaise, &fwretract.settings.retract_zraise); + ADDMENUITEM_P(ICON_FWRecSpeed, GET_TEXT_F(MSG_SINGLENOZZLE_UNRETRACT_SPEED), onDrawPFloatMenu, SetRecoverSpeed, &fwretract.settings.retract_recover_feedrate_mm_s); + #endif ADDMENUITEM_P(ICON_Flow, GET_TEXT_F(MSG_FLOW), onDrawPIntMenu, SetFlow, &planner.flow_percentage[0]); #if ENABLED(ADVANCED_PAUSE_FEATURE) ADDMENUITEM(ICON_FilMan, GET_TEXT_F(MSG_FILAMENTCHANGE), onDrawMenuItem, ChangeFilament); #endif - ADDMENUITEM(ICON_Lock, F("Lock Screen"), onDrawMenuItem, Goto_LockScreen); + ADDMENUITEM(ICON_Lock, F("Lock Screen"), onDrawMenuItem, DWIN_LockScreen); #if HAS_LCD_BRIGHTNESS ADDMENUITEM_P(ICON_Brightness, F("LCD Brightness"), onDrawPInt8Menu, SetBrightness, &ui.brightness); #endif @@ -3442,7 +3484,7 @@ void Draw_Tune_Menu() { void Draw_Motion_Menu() { checkkey = Menu; - if (MotionMenu == nullptr) MotionMenu = new MenuClass(); + if (!MotionMenu) MotionMenu = new MenuClass(); if (CurrentMenu != MotionMenu) { CurrentMenu = MotionMenu; SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_MOTION)); // TODO: Chinese, English "Motion" JPG @@ -3462,7 +3504,7 @@ void Draw_Motion_Menu() { #if ENABLED(ADVANCED_PAUSE_FEATURE) void Draw_FilamentMan_Menu() { checkkey = Menu; - if (FilamentMenu == nullptr) FilamentMenu = new MenuClass(); + if (!FilamentMenu) FilamentMenu = new MenuClass(); if (CurrentMenu != FilamentMenu) { CurrentMenu = FilamentMenu; SetMenuTitle({0}, GET_TEXT_F(MSG_FILAMENT_MAN)); // TODO: Chinese, English "Filament Management" JPG @@ -3482,7 +3524,7 @@ void Draw_Motion_Menu() { #if ENABLED(MESH_BED_LEVELING) void Draw_ManualMesh_Menu() { checkkey = Menu; - if (ManualMesh == nullptr) ManualMesh = new MenuClass(); + if (!ManualMesh) ManualMesh = new MenuClass(); if (CurrentMenu != ManualMesh) { CurrentMenu = ManualMesh; SetMenuTitle({0}, GET_TEXT_F(MSG_MANUAL_MESH)); // TODO: Chinese, English "Manual Mesh Leveling" JPG @@ -3525,20 +3567,20 @@ void Draw_Motion_Menu() { void Draw_Preheat1_Menu() { HMI_value.Preheat = 0; - if (PreheatMenu == nullptr) PreheatMenu = new MenuClass(); + if (!PreheatMenu) PreheatMenu = new MenuClass(); Draw_Preheat_Menu({59, 16, 81, 14}, F(PREHEAT_1_LABEL " Preheat Settings")); // TODO: English "PLA Settings" JPG } void Draw_Preheat2_Menu() { HMI_value.Preheat = 1; - if (PreheatMenu == nullptr) PreheatMenu = new MenuClass(); + if (!PreheatMenu) PreheatMenu = new MenuClass(); Draw_Preheat_Menu({142, 16, 82, 14}, F(PREHEAT_2_LABEL " Preheat Settings")); // TODO: English "ABS Settings" JPG } #ifdef PREHEAT_3_LABEL void Draw_Preheat3_Menu() { HMI_value.Preheat = 2; - if (PreheatMenu == nullptr) PreheatMenu = new MenuClass(); + if (!PreheatMenu) PreheatMenu = new MenuClass(); #define PREHEAT_3_TITLE PREHEAT_3_LABEL " Preheat Set." Draw_Preheat_Menu({0}, F(PREHEAT_3_TITLE)); // TODO: Chinese, English "Custom Preheat Settings" JPG } @@ -3548,7 +3590,7 @@ void Draw_Motion_Menu() { void Draw_Temperature_Menu() { checkkey = Menu; - if (TemperatureMenu == nullptr) TemperatureMenu = new MenuClass(); + if (!TemperatureMenu) TemperatureMenu = new MenuClass(); if (CurrentMenu != TemperatureMenu) { CurrentMenu = TemperatureMenu; SetMenuTitle({236, 2, 28, 12}, GET_TEXT_F(MSG_TEMPERATURE)); @@ -3576,7 +3618,7 @@ void Draw_Temperature_Menu() { void Draw_MaxSpeed_Menu() { checkkey = Menu; - if (MaxSpeedMenu == nullptr) MaxSpeedMenu = new MenuClass(); + if (!MaxSpeedMenu) MaxSpeedMenu = new MenuClass(); if (CurrentMenu != MaxSpeedMenu) { CurrentMenu = MaxSpeedMenu; SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_MAXSPEED)); @@ -3594,7 +3636,7 @@ void Draw_MaxSpeed_Menu() { void Draw_MaxAccel_Menu() { checkkey = Menu; - if (MaxAccelMenu == nullptr) MaxAccelMenu = new MenuClass(); + if (!MaxAccelMenu) MaxAccelMenu = new MenuClass(); if (CurrentMenu != MaxAccelMenu) { CurrentMenu = MaxAccelMenu; SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_ACCELERATION)); @@ -3613,7 +3655,7 @@ void Draw_MaxAccel_Menu() { #if HAS_CLASSIC_JERK void Draw_MaxJerk_Menu() { checkkey = Menu; - if (MaxJerkMenu == nullptr) MaxJerkMenu = new MenuClass(); + if (!MaxJerkMenu) MaxJerkMenu = new MenuClass(); if (CurrentMenu != MaxJerkMenu) { CurrentMenu = MaxJerkMenu; SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_JERK)); @@ -3632,7 +3674,7 @@ void Draw_MaxAccel_Menu() { void Draw_Steps_Menu() { checkkey = Menu; - if (StepsMenu == nullptr) StepsMenu = new MenuClass(); + if (!StepsMenu) StepsMenu = new MenuClass(); if (CurrentMenu != StepsMenu) { CurrentMenu = StepsMenu; SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_STEPS_PER_MM)); @@ -3651,7 +3693,7 @@ void Draw_Steps_Menu() { #if HAS_HOTEND void Draw_HotendPID_Menu() { checkkey = Menu; - if (HotendPIDMenu == nullptr) HotendPIDMenu = new MenuClass(); + if (!HotendPIDMenu) HotendPIDMenu = new MenuClass(); if (CurrentMenu != HotendPIDMenu) { CurrentMenu = HotendPIDMenu; CurrentMenu->MenuTitle.SetCaption(F("Hotend PID Settings")); @@ -3674,7 +3716,7 @@ void Draw_Steps_Menu() { #if HAS_HEATED_BED void Draw_BedPID_Menu() { checkkey = Menu; - if (BedPIDMenu == nullptr) BedPIDMenu = new MenuClass(); + if (!BedPIDMenu) BedPIDMenu = new MenuClass(); if (CurrentMenu != BedPIDMenu) { CurrentMenu = BedPIDMenu; CurrentMenu->MenuTitle.SetCaption(F("Bed PID Settings")); @@ -3694,10 +3736,10 @@ void Draw_Steps_Menu() { } #endif -#if EITHER(HAS_BED_PROBE, BABYSTEPPING) +#if HAS_BED_PROBE void Draw_ZOffsetWiz_Menu() { checkkey = Menu; - if (ZOffsetWizMenu == nullptr) ZOffsetWizMenu = new MenuClass(); + if (!ZOffsetWizMenu) ZOffsetWizMenu = new MenuClass(); if (CurrentMenu != ZOffsetWizMenu) { CurrentMenu = ZOffsetWizMenu; CurrentMenu->MenuTitle.SetCaption(GET_TEXT_F(MSG_PROBE_WIZARD)); @@ -3712,4 +3754,22 @@ void Draw_Steps_Menu() { } #endif +#if ENABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU) + void Draw_Homing_Menu() { + checkkey = Menu; + if (!HomingMenu) HomingMenu = new MenuClass(); + if (CurrentMenu != HomingMenu) { + CurrentMenu = HomingMenu; + CurrentMenu->MenuTitle.SetCaption(GET_TEXT_F(MSG_HOMING)); + DWINUI::MenuItemsPrepare(5); + ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_Prepare_Menu); + ADDMENUITEM(ICON_Homing, GET_TEXT_F(MSG_AUTO_HOME), onDrawMenuItem, AutoHome); + ADDMENUITEM(ICON_HomeX, GET_TEXT_F(MSG_AUTO_HOME_X), onDrawMenuItem, HomeX); + ADDMENUITEM(ICON_HomeY, GET_TEXT_F(MSG_AUTO_HOME_Y), onDrawMenuItem, HomeY); + ADDMENUITEM(ICON_HomeZ, GET_TEXT_F(MSG_AUTO_HOME_Z), onDrawMenuItem, HomeZ); + } + CurrentMenu->draw(); + } +#endif + #endif // DWIN_CREALITY_LCD_ENHANCED diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.h b/Marlin/src/lcd/e3v2/enhanced/dwin.h index 05b81c1019..773c9c7bdf 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.h @@ -24,8 +24,8 @@ /** * DWIN UI Enhanced implementation * Author: Miguel A. Risco-Castillo - * Version: 3.7.1 - * Date: 2021/11/09 + * Version: 3.9.1 + * Date: 2021/11/21 */ #include "../../../inc/MarlinConfigPre.h" @@ -45,7 +45,7 @@ #define HAS_ZOFFSET_ITEM 1 #endif -static constexpr size_t eeprom_data_size = 64; +#include "dwin_defines.h" enum processID : uint8_t { // Process ID @@ -59,11 +59,16 @@ enum processID : uint8_t { SelectFile, PrintProcess, PrintDone, + PwrlossRec, + Reboot, Info, // Popup Windows Homing, Leveling, + PidProcess, + ESDiagProcess, + PrintStatsProcess, PauseOrStop, FilamentPurge, WaitResponse, @@ -97,39 +102,6 @@ typedef struct { void (*LiveUpdate)() = nullptr; // Auxiliar live update function } HMI_value_t; -typedef struct { - uint16_t Background_Color = Def_Background_Color; - uint16_t Cursor_color = Def_Cursor_color; - uint16_t TitleBg_color = Def_TitleBg_color; - uint16_t TitleTxt_color = Def_TitleTxt_color; - uint16_t Text_Color = Def_Text_Color; - uint16_t Selected_Color = Def_Selected_Color; - uint16_t SplitLine_Color = Def_SplitLine_Color; - uint16_t Highlight_Color = Def_Highlight_Color; - uint16_t StatusBg_Color = Def_StatusBg_Color; - uint16_t StatusTxt_Color = Def_StatusTxt_Color; - uint16_t PopupBg_color = Def_PopupBg_color; - uint16_t PopupTxt_Color = Def_PopupTxt_Color; - uint16_t AlertBg_Color = Def_AlertBg_Color; - uint16_t AlertTxt_Color = Def_AlertTxt_Color; - uint16_t PercentTxt_Color = Def_PercentTxt_Color; - uint16_t Barfill_Color = Def_Barfill_Color; - uint16_t Indicator_Color = Def_Indicator_Color; - uint16_t Coordinate_Color = Def_Coordinate_Color; - #if HAS_PREHEAT - #ifdef PREHEAT_1_TEMP_HOTEND - int16_t HotendPidT = PREHEAT_1_TEMP_HOTEND; - int16_t PidCycles = 10; - #endif - #ifdef PREHEAT_1_TEMP_BED - int16_t BedPidT = PREHEAT_1_TEMP_BED; - #endif - #endif - #if ENABLED(PREVENT_COLD_EXTRUSION) - int16_t ExtMinT = EXTRUDE_MINTEMP; - #endif -} HMI_data_t; - typedef struct { uint8_t language; bool pause_flag:1; // printing is paused @@ -138,15 +110,24 @@ typedef struct { bool select_flag:1; // Popup button selected bool home_flag:1; // homing in course bool heat_flag:1; // 0: heating done 1: during heating - bool lock_flag:1; // 0: lock called from AdvSet 1: lock called from Tune } HMI_flag_t; extern HMI_value_t HMI_value; extern HMI_flag_t HMI_flag; -extern HMI_data_t HMI_data; extern uint8_t checkkey; extern millis_t dwin_heat_time; +// Popups +#if HAS_HOTEND || HAS_HEATED_BED + void DWIN_Popup_Temperature(const bool toohigh); +#endif +#if HAS_HOTEND + void Popup_Window_ETempTooLow(); +#endif +#if ENABLED(POWER_LOSS_RECOVERY) + void Popup_PowerLossRecovery(); +#endif + // SD Card void HMI_SDCardInit(); void HMI_SDCardUpdate(); @@ -154,8 +135,8 @@ void HMI_SDCardUpdate(); // Other void Goto_PrintProcess(); void Goto_Main_Menu(); -void Goto_InfoMenu(); -void Draw_Select_Highlight(const bool sel); +void Goto_Info_Menu(); +void Goto_PowerLossRecovery(); void Draw_Status_Area(const bool with_update); // Status Area void Draw_Main_Area(); // Redraw main area; void DWIN_Redraw_screen(); // Redraw all screen elements @@ -204,11 +185,18 @@ void DWIN_RebootScreen(); #endif // Utility and extensions +void DWIN_LockScreen(); +void DWIN_UnLockScreen(); void HMI_LockScreen(); -void DWIN_LockScreen(const bool flag = true); #if HAS_MESH void DWIN_MeshViewer(); #endif +#if HAS_ESDIAG + void Draw_EndStopDiag(); +#endif +#if ENABLED(PRINTCOUNTER) + void Draw_PrintStats(); +#endif // HMI user control functions void HMI_Menu(); @@ -262,23 +250,6 @@ void Draw_Steps_Menu(); #if EITHER(HAS_BED_PROBE, BABYSTEPPING) void Draw_ZOffsetWiz_Menu(); #endif - -// Popup windows - -void DWIN_Draw_Popup(const uint8_t icon, const char * const cmsg1, FSTR_P const fmsg2, uint8_t button=0); -void DWIN_Draw_Popup(const uint8_t icon, FSTR_P const fmsg1=nullptr, FSTR_P const fmsg2=nullptr, uint8_t button=0); - -template -void DWIN_Popup_Confirm(const uint8_t icon, T amsg1, U amsg2) { - HMI_SaveProcessID(WaitResponse); - DWIN_Draw_Popup(icon, amsg1, amsg2, ICON_Confirm_E); // Button Confirm - DWIN_UpdateLCD(); -} - -#if HAS_HOTEND || HAS_HEATED_BED - void DWIN_Popup_Temperature(const bool toohigh); +#if ENABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU) + void Draw_Homing_Menu(); #endif -#if HAS_HOTEND - void Popup_Window_ETempTooLow(); -#endif -void Popup_Window_Resume(); diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_defines.h b/Marlin/src/lcd/e3v2/enhanced/dwin_defines.h new file mode 100644 index 0000000000..b92d3d3b85 --- /dev/null +++ b/Marlin/src/lcd/e3v2/enhanced/dwin_defines.h @@ -0,0 +1,92 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 + +/** + * DWIN general defines and data structs + * Author: Miguel A. Risco-Castillo + * Version: 3.9.1 + * Date: 2021/11/21 + */ + +#include "../../../core/types.h" +#include "../common/dwin_color.h" + +#define Def_Background_Color RGB( 1, 12, 8) +#define Def_Cursor_color RGB(20, 49, 31) +#define Def_TitleBg_color RGB( 0, 23, 16) +#define Def_TitleTxt_color Color_White +#define Def_Text_Color Color_White +#define Def_Selected_Color Select_Color +#define Def_SplitLine_Color RGB( 0, 23, 16) +#define Def_Highlight_Color Color_White +#define Def_StatusBg_Color RGB( 0, 23, 16) +#define Def_StatusTxt_Color Color_Yellow +#define Def_PopupBg_color Color_Bg_Window +#define Def_PopupTxt_Color Popup_Text_Color +#define Def_AlertBg_Color Color_Bg_Red +#define Def_AlertTxt_Color Color_Yellow +#define Def_PercentTxt_Color Percent_Color +#define Def_Barfill_Color BarFill_Color +#define Def_Indicator_Color Color_White +#define Def_Coordinate_Color Color_White + +#define HAS_ESDIAG 1 +#define DEFAULT_LCD_BRIGHTNESS 127 + +typedef struct { +// Color settings + uint16_t Background_Color = Def_Background_Color; + uint16_t Cursor_color = Def_Cursor_color; + uint16_t TitleBg_color = Def_TitleBg_color; + uint16_t TitleTxt_color = Def_TitleTxt_color; + uint16_t Text_Color = Def_Text_Color; + uint16_t Selected_Color = Def_Selected_Color; + uint16_t SplitLine_Color = Def_SplitLine_Color; + uint16_t Highlight_Color = Def_Highlight_Color; + uint16_t StatusBg_Color = Def_StatusBg_Color; + uint16_t StatusTxt_Color = Def_StatusTxt_Color; + uint16_t PopupBg_color = Def_PopupBg_color; + uint16_t PopupTxt_Color = Def_PopupTxt_Color; + uint16_t AlertBg_Color = Def_AlertBg_Color; + uint16_t AlertTxt_Color = Def_AlertTxt_Color; + uint16_t PercentTxt_Color = Def_PercentTxt_Color; + uint16_t Barfill_Color = Def_Barfill_Color; + uint16_t Indicator_Color = Def_Indicator_Color; + uint16_t Coordinate_Color = Def_Coordinate_Color; +// + #if defined(PREHEAT_1_TEMP_HOTEND) && HAS_HOTEND + int16_t HotendPidT = PREHEAT_1_TEMP_HOTEND; + #endif + #if defined(PREHEAT_1_TEMP_BED) && HAS_HEATED_BED + int16_t BedPidT = PREHEAT_1_TEMP_BED; + #endif + #if ANY(HAS_HOTEND, HAS_HEATED_BED) + int16_t PidCycles = 10; + #endif + #if ENABLED(PREVENT_COLD_EXTRUSION) + int16_t ExtMinT = EXTRUDE_MINTEMP; + #endif +} HMI_data_t; + +static constexpr size_t eeprom_data_size = 64; +extern HMI_data_t HMI_data; diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp index 681b318a15..83cbc20718 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp @@ -23,7 +23,7 @@ /** * DWIN UI Enhanced implementation * Author: Miguel A. Risco-Castillo - * Version: 3.7.1 + * Version: 3.8.1 * Date: 2021/11/09 */ diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h b/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h index 43cb098b91..fc1b6d6756 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h @@ -24,7 +24,7 @@ /** * DWIN UI Enhanced implementation * Author: Miguel A. Risco-Castillo - * Version: 3.7.1 + * Version: 3.8.1 * Date: 2021/11/09 */ diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_popup.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin_popup.cpp new file mode 100644 index 0000000000..89909e5c27 --- /dev/null +++ b/Marlin/src/lcd/e3v2/enhanced/dwin_popup.cpp @@ -0,0 +1,55 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 . + * + */ + +/** + * DWIN UI Enhanced implementation + * Author: Miguel A. Risco-Castillo + * Version: 3.8.1 + * Date: 2021/11/06 + */ + +#include "dwin.h" +#include "dwin_popup.h" + +void Draw_Select_Highlight(const bool sel) { + HMI_flag.select_flag = sel; + const uint16_t c1 = sel ? HMI_data.Highlight_Color : HMI_data.PopupBg_color, + c2 = sel ? HMI_data.PopupBg_color : HMI_data.Highlight_Color; + DWIN_Draw_Rectangle(0, c1, 25, 279, 126, 318); + DWIN_Draw_Rectangle(0, c1, 24, 278, 127, 319); + DWIN_Draw_Rectangle(0, c2, 145, 279, 246, 318); + DWIN_Draw_Rectangle(0, c2, 144, 278, 247, 319); +} + +void DWIN_Popup_Continue(const uint8_t icon, FSTR_P const fmsg1, FSTR_P const fmsg2) { + HMI_SaveProcessID(WaitResponse); + DWIN_Draw_Popup(icon, fmsg1, fmsg2, ICON_Continue_E); // Button Continue + DWIN_UpdateLCD(); +} + +void DWIN_Popup_ConfirmCancel(const uint8_t icon, FSTR_P const fmsg2) { + DWIN_Draw_Popup(ICON_BLTouch, F("Please confirm"), fmsg2); + DWINUI::Draw_Icon(ICON_Confirm_E, 26, 280); + DWINUI::Draw_Icon(ICON_Cancel_E, 146, 280); + Draw_Select_Highlight(true); + DWIN_UpdateLCD(); +} diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_popup.h b/Marlin/src/lcd/e3v2/enhanced/dwin_popup.h new file mode 100644 index 0000000000..65784a8c9f --- /dev/null +++ b/Marlin/src/lcd/e3v2/enhanced/dwin_popup.h @@ -0,0 +1,62 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 + +/** + * DWIN UI Enhanced implementation + * Author: Miguel A. Risco-Castillo + * Version: 3.8.1 + * Date: 2021/11/06 + */ + +#include "dwinui.h" +#include "dwin.h" + +// Popup windows + +void Draw_Select_Highlight(const bool sel); + +inline void Draw_Popup_Bkgd() { + DWIN_Draw_Rectangle(1, HMI_data.PopupBg_color, 14, 60, 258, 330); + DWIN_Draw_Rectangle(0, HMI_data.Highlight_Color, 14, 60, 258, 330); +} + +template +void DWIN_Draw_Popup(const uint8_t icon, T amsg1=nullptr, U amsg2=nullptr, uint8_t button=0) { + DWINUI::ClearMenuArea(); + Draw_Popup_Bkgd(); + if (icon) DWINUI::Draw_Icon(icon, 101, 105); + if (amsg1) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 210, amsg1); + if (amsg2) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 240, amsg2); + if (button) DWINUI::Draw_Icon(button, 86, 280); +} + +template +void DWIN_Popup_Confirm(const uint8_t icon, T amsg1, U amsg2) { + HMI_SaveProcessID(WaitResponse); + DWIN_Draw_Popup(icon, amsg1, amsg2, ICON_Confirm_E); // Button Confirm + DWIN_UpdateLCD(); +} + +void DWIN_Popup_Continue(const uint8_t icon, FSTR_P const fmsg1, FSTR_P const fmsg2); + +void DWIN_Popup_ConfirmCancel(const uint8_t icon, FSTR_P const fmsg2); diff --git a/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp b/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp index 52b7c3b521..5017253740 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp @@ -23,7 +23,7 @@ /** * DWIN UI Enhanced implementation * Author: Miguel A. Risco-Castillo - * Version: 3.7.1 + * Version: 3.8.1 * Date: 2021/11/09 */ @@ -34,6 +34,7 @@ #include "../../../inc/MarlinConfig.h" #include "dwin_lcd.h" #include "dwinui.h" +#include "dwin_defines.h" //#define DEBUG_OUT 1 #include "../../../core/debug_out.h" diff --git a/Marlin/src/lcd/e3v2/enhanced/dwinui.h b/Marlin/src/lcd/e3v2/enhanced/dwinui.h index 9a717da80d..c222b3aeb9 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwinui.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwinui.h @@ -24,8 +24,8 @@ /** * DWIN UI Enhanced implementation * Author: Miguel A. Risco-Castillo - * Version: 3.7.1 - * Date: 2021/11/09 + * Version: 3.9.1 + * Date: 2021/11/21 */ #include "dwin_lcd.h" @@ -38,12 +38,20 @@ #define ICON_Cancel ICON_StockConfiguration #define ICON_CustomPreheat ICON_SetEndTemp #define ICON_Error ICON_TempTooHigh +#define ICON_ESDiag ICON_Info #define ICON_ExtrudeMinT ICON_HotendTemp #define ICON_FilLoad ICON_WriteEEPROM #define ICON_FilMan ICON_ResumeEEPROM #define ICON_FilSet ICON_ResumeEEPROM #define ICON_FilUnload ICON_ReadEEPROM #define ICON_Flow ICON_StepE +#define ICON_FWRetLength ICON_StepE +#define ICON_FWRetSpeed ICON_Setspeed +#define ICON_FWRetZRaise ICON_MoveZ +#define ICON_FWRecSpeed ICON_Setspeed +#define ICON_HomeX ICON_MoveX +#define ICON_HomeY ICON_MoveY +#define ICON_HomeZ ICON_MoveZ #define ICON_LevBed ICON_SetEndTemp #define ICON_Lock ICON_Cool #define ICON_ManualMesh ICON_HotendTemp @@ -52,9 +60,14 @@ #define ICON_MeshViewer ICON_HotendTemp #define ICON_MoveZ0 ICON_HotendTemp #define ICON_Park ICON_Motion +#define ICON_PIDbed ICON_SetBedTemp #define ICON_PIDcycles ICON_ResumeEEPROM #define ICON_PIDValue ICON_Contact +#define ICON_PrintStats ICON_PrintTime +#define ICON_PrintStatsReset ICON_RemainTime +#define ICON_ProbeDeploy ICON_SetEndTemp #define ICON_ProbeSet ICON_SetEndTemp +#define ICON_ProbeStow ICON_SetEndTemp #define ICON_ProbeTest ICON_SetEndTemp #define ICON_Pwrlossr ICON_Motion #define ICON_Reboot ICON_ResumeEEPROM @@ -63,25 +76,11 @@ #define ICON_SetCustomPreheat ICON_SetEndTemp #define ICON_Sound ICON_Cool -// Default UI Colors -#define Def_Background_Color Color_Bg_Black -#define Def_Cursor_color Rectangle_Color -#define Def_TitleBg_color Color_Bg_Blue -#define Def_TitleTxt_color Color_White -#define Def_Text_Color Color_White -#define Def_Selected_Color Select_Color -#define Def_SplitLine_Color Line_Color -#define Def_Highlight_Color Color_White -#define Def_StatusBg_Color RGB(0,20,20) -#define Def_StatusTxt_Color Color_Yellow -#define Def_PopupBg_color Color_Bg_Window -#define Def_PopupTxt_Color Popup_Text_Color -#define Def_AlertBg_Color Color_Bg_Red -#define Def_AlertTxt_Color Color_Yellow -#define Def_PercentTxt_Color Percent_Color -#define Def_Barfill_Color BarFill_Color -#define Def_Indicator_Color Color_White -#define Def_Coordinate_Color Color_White +// Extended and default UI Colors +#define Color_Black 0 +#define Color_Green RGB(0,63,0) +#define Color_Aqua RGB(0,63,31) +#define Color_Blue RGB(0,0,31) // UI element defines and constants #define DWIN_FONT_MENU font8x16 @@ -197,9 +196,11 @@ namespace DWINUI { // Get font character width uint8_t fontWidth(uint8_t cfont); + inline uint8_t fontWidth() { return fontWidth(font); }; // Get font character height uint8_t fontHeight(uint8_t cfont); + inline uint8_t fontHeight() { return fontHeight(font); }; // Get screen x coordinates from text column uint16_t ColToX(uint8_t col); @@ -412,6 +413,14 @@ namespace DWINUI { Draw_CenteredString(false, font, textcolor, backcolor, y, title); } + // Draw a box + // mode: 0=frame, 1=fill, 2=XOR fill + // color: Rectangle color + // frame: Box coordinates and size + inline void Draw_Box(uint8_t mode, uint16_t color, frame_rect_t frame) { + DWIN_Draw_Box(mode, color, frame.x, frame.y, frame.w, frame.h); + } + // Draw a circle // Color: circle color // x: abscissa of the center of the circle diff --git a/Marlin/src/lcd/e3v2/enhanced/endstop_diag.cpp b/Marlin/src/lcd/e3v2/enhanced/endstop_diag.cpp new file mode 100644 index 0000000000..0f982c3a36 --- /dev/null +++ b/Marlin/src/lcd/e3v2/enhanced/endstop_diag.cpp @@ -0,0 +1,109 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 . + * + */ + +/** + * DWIN End Stops diagnostic page + * Author: Miguel A. Risco-Castillo + * Version: 1.0 + * Date: 2021/11/06 + */ + +#include "../../../inc/MarlinConfigPre.h" +#include "dwin_defines.h" + +#if BOTH(DWIN_CREALITY_LCD_ENHANCED, HAS_ESDIAG) + +#include "endstop_diag.h" + +#include "../../../core/types.h" +#include "../../marlinui.h" +#include "dwin_lcd.h" +#include "dwinui.h" +#include "dwin_popup.h" +#include "dwin.h" + +#if HAS_FILAMENT_SENSOR + #include "../../../feature/runout.h" +#endif + +#if HAS_BED_PROBE + #include "../../../module/probe.h" +#endif + +ESDiagClass ESDiag; + +void draw_es_label(FSTR_P const flabel=nullptr) { + DWINUI::cursor.x = 40; + if (flabel) DWINUI::Draw_String(F(flabel)); + DWINUI::Draw_String(F(": ")); + DWINUI::MoveBy(0, 25); +} + +void draw_es_state(const bool is_hit) { + const uint8_t LM = 130; + DWINUI::cursor.x = LM; + DWIN_Draw_Rectangle(1, HMI_data.PopupBg_color, LM, DWINUI::cursor.y, LM + 100, DWINUI::cursor.y + 20); + is_hit ? DWINUI::Draw_String(RGB(31,31,16), F(STR_ENDSTOP_HIT)) : DWINUI::Draw_String(RGB(16,63,16), F(STR_ENDSTOP_OPEN)); + DWINUI::MoveBy(0, 25); +} + +void ESDiagClass::Draw() { + Title.ShowCaption(F("End-stops Diagnostic")); + DWINUI::ClearMenuArea(); + Draw_Popup_Bkgd(); + DWINUI::Draw_Icon(ICON_Continue_E, 86, 250); + DWINUI::cursor.y = 80; + #define ES_LABEL(S) draw_es_label(F(STR_##S)) + #if HAS_X_MIN + ES_LABEL(X_MIN); + #endif + #if HAS_Y_MIN + ES_LABEL(Y_MIN); + #endif + #if HAS_Z_MIN + ES_LABEL(Z_MIN); + #endif + #if HAS_FILAMENT_SENSOR + draw_es_label(F(STR_FILAMENT)); + #endif + Update(); +} + +void ESDiagClass::Update() { + DWINUI::cursor.y = 80; + #define ES_REPORT(S) draw_es_state(READ(S##_PIN) != S##_ENDSTOP_INVERTING) + #if HAS_X_MIN + ES_REPORT(X_MIN); + #endif + #if HAS_Y_MIN + ES_REPORT(Y_MIN); + #endif + #if HAS_Z_MIN + ES_REPORT(Z_MIN); + #endif + #if HAS_FILAMENT_SENSOR + draw_es_state(READ(FIL_RUNOUT1_PIN) != FIL_RUNOUT1_STATE); + #endif + DWIN_UpdateLCD(); +} + +#endif // DWIN_CREALITY_LCD_ENHANCED && HAS_MESH diff --git a/Marlin/src/lcd/e3v2/enhanced/endstop_diag.h b/Marlin/src/lcd/e3v2/enhanced/endstop_diag.h new file mode 100644 index 0000000000..1864b95723 --- /dev/null +++ b/Marlin/src/lcd/e3v2/enhanced/endstop_diag.h @@ -0,0 +1,37 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 + +/** + * DWIN End Stops diagnostic page + * Author: Miguel A. Risco-Castillo + * Version: 1.0 + * Date: 2021/11/06 + */ + +class ESDiagClass { +public: + void Draw(); + void Update(); +}; + +extern ESDiagClass ESDiag; diff --git a/Marlin/src/lcd/e3v2/enhanced/lockscreen.cpp b/Marlin/src/lcd/e3v2/enhanced/lockscreen.cpp index ca772184f1..8dc84dcc46 100644 --- a/Marlin/src/lcd/e3v2/enhanced/lockscreen.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/lockscreen.cpp @@ -21,10 +21,10 @@ */ /** - * DWIN UI Enhanced implementation + * Lock screen implementation for DWIN UI Enhanced implementation * Author: Miguel A. Risco-Castillo - * Version: 3.6.3 - * Date: 2021/09/08 + * Version: 2.1 + * Date: 2021/11/09 */ #include "../../../inc/MarlinConfigPre.h" @@ -41,6 +41,7 @@ LockScreenClass lockScreen; uint8_t LockScreenClass::lock_pos = 0; bool LockScreenClass::unlocked = false; +uint8_t LockScreenClass::rprocess = 0; void LockScreenClass::init() { lock_pos = 0; diff --git a/Marlin/src/lcd/e3v2/enhanced/lockscreen.h b/Marlin/src/lcd/e3v2/enhanced/lockscreen.h index f0c4c1fde8..f44ca418f1 100644 --- a/Marlin/src/lcd/e3v2/enhanced/lockscreen.h +++ b/Marlin/src/lcd/e3v2/enhanced/lockscreen.h @@ -22,10 +22,10 @@ #pragma once /** - * DWIN UI Enhanced implementation + * Lock screen implementation for DWIN UI Enhanced implementation * Author: Miguel A. Risco-Castillo - * Version: 3.6.3 - * Date: 2021/09/08 + * Version: 2.1 + * Date: 2021/11/09 */ #include "../common/encoder.h" @@ -36,6 +36,7 @@ private: static bool unlocked; static uint8_t lock_pos; public: + static uint8_t rprocess; static void init(); static void onEncoder(EncoderState encoder_diffState); static void draw(); diff --git a/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp b/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp index 3824d63b2b..1ecbbff0aa 100644 --- a/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp @@ -1,12 +1,13 @@ /** - * DWIN Mesh Viewer - * Author: Miguel A. Risco-Castillo - * version: 3.8.1 - * Date: 2021/11/06 + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the License, or + * 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, @@ -14,11 +15,18 @@ * 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 Lesser General Public License + * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ +/** + * DWIN Mesh Viewer + * Author: Miguel A. Risco-Castillo + * Version: 3.8.1 + * Date: 2021/11/06 + */ + #include "../../../inc/MarlinConfigPre.h" #if BOTH(DWIN_CREALITY_LCD_ENHANCED, HAS_MESH) diff --git a/Marlin/src/lcd/e3v2/enhanced/meshviewer.h b/Marlin/src/lcd/e3v2/enhanced/meshviewer.h index 0ba6ae2d7d..6e7fe6fd82 100644 --- a/Marlin/src/lcd/e3v2/enhanced/meshviewer.h +++ b/Marlin/src/lcd/e3v2/enhanced/meshviewer.h @@ -1,12 +1,13 @@ /** - * DWIN Mesh Viewer - * Author: Miguel A. Risco-Castillo - * Version: 3.8.1 - * Date: 2021/11/06 + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the License, or + * 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, @@ -14,12 +15,19 @@ * 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 Lesser General Public License + * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #pragma once +/** + * DWIN Mesh Viewer + * Author: Miguel A. Risco-Castillo + * Version: 3.8.1 + * Date: 2021/11/06 + */ + class MeshViewerClass { public: void Draw(); diff --git a/Marlin/src/lcd/e3v2/enhanced/printstats.cpp b/Marlin/src/lcd/e3v2/enhanced/printstats.cpp new file mode 100644 index 0000000000..54205363be --- /dev/null +++ b/Marlin/src/lcd/e3v2/enhanced/printstats.cpp @@ -0,0 +1,76 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 . + * + */ + +/** + * DWIN Print Stats page + * Author: Miguel A. Risco-Castillo + * Version: 1.0 + * Date: 2021/11/21 + */ + +#include "../../../inc/MarlinConfigPre.h" + +#if BOTH(DWIN_CREALITY_LCD_ENHANCED, PRINTCOUNTER) + +#include "printstats.h" + +#include "../../../core/types.h" +#include "../../marlinui.h" +#include "../../../module/printcounter.h" +#include "dwin_lcd.h" +#include "dwinui.h" +#include "dwin_popup.h" +#include "dwin.h" + +PrintStatsClass PrintStats; + +void PrintStatsClass::Draw() { + char buf[50] = ""; + char str[30] = ""; + constexpr int8_t MRG = 30; + + Title.ShowCaption(GET_TEXT_F(MSG_INFO_STATS_MENU)); + DWINUI::ClearMenuArea(); + Draw_Popup_Bkgd(); + DWINUI::Draw_Icon(ICON_Continue_E, 86, 250); + printStatistics ps = print_job_timer.getStats(); + + sprintf_P(buf, PSTR("%s: %i"), GET_TEXT(MSG_INFO_PRINT_COUNT), ps.totalPrints); + DWINUI::Draw_String(MRG, 80, buf); + sprintf_P(buf, PSTR("%s: %i"), GET_TEXT(MSG_INFO_COMPLETED_PRINTS), ps.finishedPrints); + DWINUI::Draw_String(MRG, 100, buf); + duration_t(print_job_timer.getStats().printTime).toDigital(str, true); + sprintf_P(buf, PSTR("%s: %s"), GET_TEXT(MSG_INFO_PRINT_TIME), str); + DWINUI::Draw_String(MRG, 120, buf); + duration_t(print_job_timer.getStats().longestPrint).toDigital(str, true); + sprintf_P(buf, PSTR("%s: %s"), GET_TEXT(MSG_INFO_PRINT_LONGEST), str); + DWINUI::Draw_String(MRG, 140, buf); + sprintf_P(buf, PSTR("%s: %s m"), GET_TEXT(MSG_INFO_PRINT_FILAMENT), dtostrf(ps.filamentUsed / 1000, 1, 2, str)); + DWINUI::Draw_String(MRG, 160, buf); +} + +void PrintStatsClass::Reset() { + print_job_timer.initStats(); + HMI_AudioFeedback(); +} + +#endif // DWIN_CREALITY_LCD_ENHANCED && PRINTCOUNTER diff --git a/Marlin/src/lcd/e3v2/enhanced/printstats.h b/Marlin/src/lcd/e3v2/enhanced/printstats.h new file mode 100644 index 0000000000..5f62a4c268 --- /dev/null +++ b/Marlin/src/lcd/e3v2/enhanced/printstats.h @@ -0,0 +1,37 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 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 + +/** + * DWIN Print Stats page + * Author: Miguel A. Risco-Castillo + * Version: 1.0 + * Date: 2021/11/21 + */ + +class PrintStatsClass { +public: + void Draw(); + static void Reset(); +}; + +extern PrintStatsClass PrintStats; diff --git a/Marlin/src/lcd/language/language_an.h b/Marlin/src/lcd/language/language_an.h index 8e4ff0e95c..02d4455331 100644 --- a/Marlin/src/lcd/language/language_an.h +++ b/Marlin/src/lcd/language/language_an.h @@ -195,7 +195,7 @@ namespace Language_an { LSTR MSG_INFO_PROTOCOL = _UxGT("Protocolo"); LSTR MSG_CASE_LIGHT = _UxGT("Luz"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Conteo de impresion"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Tiempo total d'imp."); diff --git a/Marlin/src/lcd/language/language_ca.h b/Marlin/src/lcd/language/language_ca.h index 6fba76a552..d70e6051b5 100644 --- a/Marlin/src/lcd/language/language_ca.h +++ b/Marlin/src/lcd/language/language_ca.h @@ -183,7 +183,7 @@ namespace Language_ca { LSTR MSG_INFO_PROTOCOL = _UxGT("Protocol"); LSTR MSG_CASE_LIGHT = _UxGT("Llum"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Total impressions"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Acabades"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Temps imprimint"); diff --git a/Marlin/src/lcd/language/language_cz.h b/Marlin/src/lcd/language/language_cz.h index 596591e0f6..20c8686a24 100644 --- a/Marlin/src/lcd/language/language_cz.h +++ b/Marlin/src/lcd/language/language_cz.h @@ -60,7 +60,7 @@ namespace Language_cz { LSTR MSG_RUN_AUTO_FILES = _UxGT("Autostart"); LSTR MSG_DISABLE_STEPPERS = _UxGT("Uvolnit motory"); LSTR MSG_DEBUG_MENU = _UxGT("Nabídka ladění"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test ukaz. průběhu"); #else LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test uk. průběhu"); @@ -421,12 +421,12 @@ namespace Language_cz { LSTR MSG_PLEASE_RESET = _UxGT("Proveďte reset"); LSTR MSG_HEATING = _UxGT("Zahřívání..."); LSTR MSG_COOLING = _UxGT("Chlazení..."); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_BED_HEATING = _UxGT("Zahřívání podložky"); #else LSTR MSG_BED_HEATING = _UxGT("Zahřívání podl."); #endif - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_BED_COOLING = _UxGT("Chlazení podložky"); #else LSTR MSG_BED_COOLING = _UxGT("Chlazení podl."); @@ -465,7 +465,7 @@ namespace Language_cz { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jas světla"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("NESPRÁVNÁ TISKÁRNA"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Počet tisků"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Dokončeno"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Celkový čas"); @@ -535,7 +535,7 @@ namespace Language_cz { LSTR MSG_CYCLE_MIX = _UxGT("Střídat mix"); LSTR MSG_GRADIENT_MIX = _UxGT("Přechod mix"); LSTR MSG_REVERSE_GRADIENT = _UxGT("Opačný přechod"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktivní V-nástroj"); LSTR MSG_START_VTOOL = _UxGT("Spustit V-nástroj"); LSTR MSG_END_VTOOL = _UxGT("Ukončit V-nástroj"); diff --git a/Marlin/src/lcd/language/language_da.h b/Marlin/src/lcd/language/language_da.h index e032605578..b3644a754c 100644 --- a/Marlin/src/lcd/language/language_da.h +++ b/Marlin/src/lcd/language/language_da.h @@ -156,7 +156,7 @@ namespace Language_da { LSTR MSG_INFO_BOARD_MENU = _UxGT("Kort Info"); LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistors"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Ant. Prints"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Færdige"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Total print tid"); diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h index 00f759a83a..5ac0f1487b 100644 --- a/Marlin/src/lcd/language/language_de.h +++ b/Marlin/src/lcd/language/language_de.h @@ -491,7 +491,7 @@ namespace Language_de { LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Falscher Drucker"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Gesamte Drucke"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Komplette Drucke"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Gesamte Druckzeit"); diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 1d8861b2c7..c8660cd1c8 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -75,6 +75,9 @@ namespace Language_en { LSTR MSG_HOMING = _UxGT("Homing"); LSTR MSG_AUTO_HOME = _UxGT("Auto Home"); LSTR MSG_AUTO_HOME_A = _UxGT("Home @"); + LSTR MSG_AUTO_HOME_X = _UxGT("Home X"); + LSTR MSG_AUTO_HOME_Y = _UxGT("Home Y"); + LSTR MSG_AUTO_HOME_Z = _UxGT("Home Z"); LSTR MSG_FILAMENT_SET = _UxGT("Filament Settings"); LSTR MSG_FILAMENT_MAN = _UxGT("Filament Management"); LSTR MSG_LEVBED_FL = _UxGT("Front Left"); @@ -83,6 +86,7 @@ namespace Language_en { LSTR MSG_LEVBED_BL = _UxGT("Back Left"); LSTR MSG_LEVBED_BR = _UxGT("Back Right"); LSTR MSG_MANUAL_MESH = _UxGT("Manual Mesh"); + LSTR MSG_AUTO_MESH = _UxGT("Auto Build Mesh"); LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-Align"); LSTR MSG_ITERATION = _UxGT("G34 Iteration: %i"); LSTR MSG_DECREASING_ACCURACY = _UxGT("Accuracy Decreasing!"); @@ -426,6 +430,11 @@ namespace Language_en { LSTR MSG_BUTTON_BACK = _UxGT("Back"); LSTR MSG_BUTTON_PROCEED = _UxGT("Proceed"); LSTR MSG_BUTTON_SKIP = _UxGT("Skip"); + LSTR MSG_BUTTON_INFO = _UxGT("Info"); + LSTR MSG_BUTTON_LEVEL = _UxGT("Level"); + LSTR MSG_BUTTON_PAUSE = _UxGT("Pause"); + LSTR MSG_BUTTON_RESUME = _UxGT("Resume"); + LSTR MSG_BUTTON_ADVANCED = _UxGT("Advanced"); LSTR MSG_PAUSING = _UxGT("Pausing..."); LSTR MSG_PAUSE_PRINT = _UxGT("Pause Print"); LSTR MSG_RESUME_PRINT = _UxGT("Resume Print"); @@ -577,7 +586,8 @@ namespace Language_en { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Light Brightness"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("INCORRECT PRINTER"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 + LSTR MSG_INFO_PRINT_COUNT_RESET = _UxGT("Reset Print Count"); LSTR MSG_INFO_PRINT_COUNT = _UxGT("Print Count"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completed"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Total Print Time"); diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h index 9c593215bb..1dbc7faf70 100644 --- a/Marlin/src/lcd/language/language_es.h +++ b/Marlin/src/lcd/language/language_es.h @@ -463,7 +463,7 @@ namespace Language_es { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Brillo cabina"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Impresora incorrecta"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Cont. de impresión"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Tiempo total de imp."); diff --git a/Marlin/src/lcd/language/language_eu.h b/Marlin/src/lcd/language/language_eu.h index adc812f6ff..ad6a4f3071 100644 --- a/Marlin/src/lcd/language/language_eu.h +++ b/Marlin/src/lcd/language/language_eu.h @@ -280,7 +280,7 @@ namespace Language_eu { LSTR MSG_INFO_PROTOCOL = _UxGT("Protokoloa"); LSTR MSG_CASE_LIGHT = _UxGT("Kabina Argia"); LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Argiaren Distira"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Inprim. Zenbaketa"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Burututa"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Inprim. denbora"); diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h index e9c55ed401..d72578d8d6 100644 --- a/Marlin/src/lcd/language/language_fr.h +++ b/Marlin/src/lcd/language/language_fr.h @@ -504,7 +504,7 @@ namespace Language_fr { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Luminosité"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Imprimante incorrecte"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Nbre impressions"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Terminées"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Tps impr. total"); diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h index 1f3acf5f09..3026e761c4 100644 --- a/Marlin/src/lcd/language/language_gl.h +++ b/Marlin/src/lcd/language/language_gl.h @@ -479,7 +479,7 @@ namespace Language_gl { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Brillo Luces"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("IMPRESORA INCORRECTA"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Total Impresións"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Tempo Total Imp."); diff --git a/Marlin/src/lcd/language/language_hr.h b/Marlin/src/lcd/language/language_hr.h index 23be8abbb1..78db2ad660 100644 --- a/Marlin/src/lcd/language/language_hr.h +++ b/Marlin/src/lcd/language/language_hr.h @@ -137,7 +137,7 @@ namespace Language_hr { LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Neispravan pisač"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Broj printova"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Završeni"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Ukupno printanja"); diff --git a/Marlin/src/lcd/language/language_hu.h b/Marlin/src/lcd/language/language_hu.h index 204091f5d5..cfe7af5897 100644 --- a/Marlin/src/lcd/language/language_hu.h +++ b/Marlin/src/lcd/language/language_hu.h @@ -553,7 +553,7 @@ namespace Language_hu { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Fényerösség"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("HELYTELEN NYOMTATÓ"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Nyomtatás számláló"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Befejezett"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Összes nyomtatási idö"); diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index 780f4e9743..e0ae0e62a4 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -562,7 +562,7 @@ namespace Language_it { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Luminosità Luci"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("STAMPANTE ERRATA"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Contat. stampa"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completati"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Tempo totale"); diff --git a/Marlin/src/lcd/language/language_nl.h b/Marlin/src/lcd/language/language_nl.h index 42df92b880..e55ed9fea7 100644 --- a/Marlin/src/lcd/language/language_nl.h +++ b/Marlin/src/lcd/language/language_nl.h @@ -180,7 +180,7 @@ namespace Language_nl { LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Onjuiste printer"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Printed Aantal"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Totaal Voltooid"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Totale Printtijd"); diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h index bf94feea54..7c012f46df 100644 --- a/Marlin/src/lcd/language/language_pl.h +++ b/Marlin/src/lcd/language/language_pl.h @@ -430,7 +430,7 @@ namespace Language_pl { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jasność oświetlenia"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Niepoprawna drukarka"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Wydrukowano"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Ukończono"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Czas druku"); diff --git a/Marlin/src/lcd/language/language_pt_br.h b/Marlin/src/lcd/language/language_pt_br.h index c66f717f9d..0c44145e00 100644 --- a/Marlin/src/lcd/language/language_pt_br.h +++ b/Marlin/src/lcd/language/language_pt_br.h @@ -400,7 +400,7 @@ namespace Language_pt_br { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Intensidade Brilho"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Impressora Incorreta"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Total de Impressões"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Realizadas"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Tempo de Impressão"); diff --git a/Marlin/src/lcd/language/language_ro.h b/Marlin/src/lcd/language/language_ro.h index fee63dc2ad..29cdc51c80 100644 --- a/Marlin/src/lcd/language/language_ro.h +++ b/Marlin/src/lcd/language/language_ro.h @@ -486,7 +486,7 @@ namespace Language_ro { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Light Brightness"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("INCORRECT PRINTER"); -#if LCD_WIDTH >= 20 +#if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Total Printuri"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completat"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Timp Imprimare Total"); diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h index 495410500a..774636f1ed 100644 --- a/Marlin/src/lcd/language/language_ru.h +++ b/Marlin/src/lcd/language/language_ru.h @@ -43,7 +43,7 @@ namespace Language_ru { LSTR MSG_MEDIA_INSERTED = _UxGT("SD карта вставлена"); LSTR MSG_MEDIA_REMOVED = _UxGT("SD карта извлечена"); LSTR MSG_MEDIA_WAITING = _UxGT("Вставьте SD карту"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Сбой инициализации SD"); #else LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Сбой инициализ. SD"); @@ -51,7 +51,7 @@ namespace Language_ru { LSTR MSG_MEDIA_READ_ERROR = _UxGT("Ошибка считывания"); LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB диск удалён"); LSTR MSG_MEDIA_USB_FAILED = _UxGT("Ошибка USB диска"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переполнение вызова"); #else LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переполн. вызова"); @@ -81,7 +81,7 @@ namespace Language_ru { LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Следующая точка"); LSTR MSG_LEVEL_BED_DONE = _UxGT("Выравнивание готово!"); LSTR MSG_Z_FADE_HEIGHT = _UxGT("Высота спада"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_SET_HOME_OFFSETS = _UxGT("Установ. смещения дома"); LSTR MSG_HOME_OFFSET_X = _UxGT("Смещение дома X"); LSTR MSG_HOME_OFFSET_Y = _UxGT("Смещение дома Y"); @@ -101,7 +101,7 @@ namespace Language_ru { LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Смещения применены"); LSTR MSG_SET_ORIGIN = _UxGT("Установить ноль"); LSTR MSG_SELECT_ORIGIN = _UxGT("Выберите ноль"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_LAST_VALUE_SP = _UxGT("Последнее знач. "); #else LSTR MSG_LAST_VALUE_SP = _UxGT("Послед. знач. "); @@ -127,7 +127,7 @@ namespace Language_ru { LSTR MSG_COOLDOWN = _UxGT("Охлаждение"); LSTR MSG_CUTTER_FREQUENCY = _UxGT("Частота"); LSTR MSG_LASER_MENU = _UxGT("Управление лазером"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_SPINDLE_MENU = _UxGT("Управление шпинделем"); LSTR MSG_LASER_TOGGLE = _UxGT("Переключить лазер"); LSTR MSG_SPINDLE_TOGGLE = _UxGT("Переключ.шпиндель"); @@ -161,7 +161,7 @@ namespace Language_ru { LSTR MSG_LEVEL_BED = _UxGT("Выровнять стол"); LSTR MSG_BED_TRAMMING = _UxGT("Выровнять углы"); LSTR MSG_NEXT_CORNER = _UxGT("Следующий угол"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Вверх до срабатыв. зонда"); LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Углы в норме. Вырав.стола"); #else @@ -170,7 +170,7 @@ namespace Language_ru { #endif LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Хорошие точки: "); LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Последняя Z: "); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_MESH_EDITOR = _UxGT("Смещение по Z"); LSTR MSG_EDITING_STOPPED = _UxGT("Правка сетки окончена"); #else @@ -205,7 +205,7 @@ namespace Language_ru { LSTR MSG_UBL_LEVEL_BED = _UxGT("Настройка UBL"); LSTR MSG_LCD_TILTING_MESH = _UxGT("Точка разворота"); LSTR MSG_UBL_MANUAL_MESH = _UxGT("Ручной ввод сетки"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_UBL_BC_INSERT = _UxGT("Разместить шайбу,измерить"); LSTR MSG_UBL_BC_REMOVE = _UxGT("Убрать и замерить стол"); #else @@ -219,7 +219,7 @@ namespace Language_ru { LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Деактивировать UBL"); LSTR MSG_UBL_MESH_EDIT = _UxGT("Редактор сеток"); LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Править свою сетку"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Температура стола"); LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Температура стола"); LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Температура сопла"); @@ -237,7 +237,7 @@ namespace Language_ru { LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Точная правка сетки"); LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Построить сетку"); LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Построить сетку $"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Построить холодную сетку"); #else LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Строить холод.сетку"); @@ -245,7 +245,7 @@ namespace Language_ru { LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Правка высоты сетки"); LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Высота"); LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Проверить сетку"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Проверить сетку $"); LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Проверить свою сетку"); #else @@ -261,7 +261,7 @@ namespace Language_ru { LSTR MSG_G26_LEAVING = _UxGT("Выйти из G26"); LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Продолжить сетку"); LSTR MSG_UBL_MESH_LEVELING = _UxGT("Выравнивание сетки"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-х точечное выравнивание"); #else LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-точечное выравн."); @@ -273,7 +273,7 @@ namespace Language_ru { LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Вывести карту сетки"); LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Вывести на хост"); LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Вывести в CSV"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Сохранить сетку снаружи"); LSTR MSG_UBL_INFO_UBL = _UxGT("Вывод информации UBL"); LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Кол-во заполнителя"); @@ -323,7 +323,7 @@ namespace Language_ru { LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Свет по умолчанию"); LSTR MSG_LED_CHANNEL_N = _UxGT("Канал ="); LSTR MSG_LEDS2 = _UxGT("Свет #2"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_NEO2_PRESETS = _UxGT("Свет #2 предустановки"); #else LSTR MSG_NEO2_PRESETS = _UxGT("Свет #2 предустан."); @@ -360,7 +360,7 @@ namespace Language_ru { LSTR MSG_NOZZLE_STANDBY = _UxGT("Сопло ожидает"); LSTR MSG_BED = _UxGT("Стол, ") LCD_STR_DEGREE "C"; LSTR MSG_CHAMBER = _UxGT("Камера,") LCD_STR_DEGREE "C"; - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_COOLER = _UxGT("Охлаждение лазера"); LSTR MSG_COOLER_TOGGLE = _UxGT("Переключ. охлажд."); LSTR MSG_FLOWMETER_SAFETY = _UxGT("Безопасн. потока"); @@ -408,7 +408,7 @@ namespace Language_ru { LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-рывок"); LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-рывок"); LSTR MSG_VE_JERK = _UxGT("Ve-рывок"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_JUNCTION_DEVIATION = _UxGT("Отклонение узла"); #else LSTR MSG_JUNCTION_DEVIATION = _UxGT("Отклон. узла"); @@ -452,7 +452,7 @@ namespace Language_ru { LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E в мм") SUPERSCRIPT_THREE; LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E огран.,мм") SUPERSCRIPT_THREE; LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E огран. *"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_FILAMENT_DIAM = _UxGT("Диам. филамента"); LSTR MSG_FILAMENT_DIAM_E = _UxGT("Диам. филамента *"); #else @@ -466,7 +466,7 @@ namespace Language_ru { LSTR MSG_CONTRAST = _UxGT("Контраст экрана"); LSTR MSG_STORE_EEPROM = _UxGT("Сохранить настройки"); LSTR MSG_LOAD_EEPROM = _UxGT("Загрузить настройки"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_RESTORE_DEFAULTS = _UxGT("На базовые параметры"); LSTR MSG_INIT_EEPROM = _UxGT("Инициализация EEPROM"); #else @@ -520,7 +520,7 @@ namespace Language_ru { LSTR MSG_NO_MOVE = _UxGT("Нет движения."); LSTR MSG_KILLED = _UxGT("УБИТО. "); LSTR MSG_STOPPED = _UxGT("ОСТАНОВЛЕНО. "); - #if LCD_WIDTH > 21 + #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("Возврат смены, мм"); @@ -539,7 +539,7 @@ namespace Language_ru { LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Возврат V"); LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Поменять длины"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Поменять дополнительно"); #else LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Поменять дополнит."); @@ -548,7 +548,7 @@ namespace Language_ru { LSTR MSG_TOOL_CHANGE = _UxGT("Смена сопел"); LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Поднятие по Z"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Начальная скор."); LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Скорость втягив."); #else @@ -568,7 +568,7 @@ namespace Language_ru { LSTR MSG_FILAMENTCHANGE = _UxGT("Смена филамента"); LSTR MSG_FILAMENTCHANGE_E = _UxGT("Смена филамента *"); LSTR MSG_FILAMENTLOAD = _UxGT("Загрузить филамент"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_FILAMENTLOAD_E = _UxGT("Загрузить филамент *"); LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Выгрузить филамент *"); #else @@ -606,7 +606,7 @@ namespace Language_ru { LSTR MSG_ZPROBE_XOFFSET = _UxGT("Смещение X"); LSTR MSG_ZPROBE_YOFFSET = _UxGT("Смещение Y"); LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Смещение Z"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Двигать сопло к столу"); #else LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Двиг. сопло к столу"); @@ -650,7 +650,7 @@ namespace Language_ru { LSTR MSG_DELTA_SETTINGS = _UxGT("Настройки Delta"); LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Авто калибровка"); LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Высота Delta"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Зондировать Z-смещения"); #else LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Зондир. Z-смещения"); @@ -660,7 +660,7 @@ namespace Language_ru { LSTR MSG_DELTA_RADIUS = _UxGT("Радиус"); LSTR MSG_INFO_MENU = _UxGT("О принтере"); LSTR MSG_INFO_PRINTER_MENU = _UxGT("Данные принтера"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_3POINT_LEVELING = _UxGT("3-точечное выравнивание"); LSTR MSG_LINEAR_LEVELING = _UxGT("Линейное выравнивание"); LSTR MSG_BILINEAR_LEVELING = _UxGT("Билинейное выравнивание"); @@ -671,7 +671,7 @@ namespace Language_ru { #endif LSTR MSG_UBL_LEVELING = _UxGT("Управление UBL"); LSTR MSG_MESH_LEVELING = _UxGT("Выравнивание сетки"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_MESH_DONE = _UxGT("Зондирование выполнено"); #else LSTR MSG_MESH_DONE = _UxGT("Зондиров. выполнено"); @@ -683,7 +683,7 @@ namespace Language_ru { LSTR MSG_INFO_EXTRUDERS = _UxGT("Экструдеры"); LSTR MSG_INFO_BAUDRATE = _UxGT("Скорость,БОД"); LSTR MSG_INFO_PROTOCOL = _UxGT("Протокол"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Контроль утечки Т: Выкл"); LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Контроль утечки Т: Вкл"); LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Время простоя хотенда"); @@ -696,7 +696,7 @@ namespace Language_ru { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Яркость подсветки"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Неверный принтер"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Счётчик печати"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Общее время печати"); LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Наидольшее задание"); @@ -730,7 +730,7 @@ namespace Language_ru { LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Выдавить ещё"); LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Возобновить печать"); LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Сопла: "); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_RUNOUT_SENSOR = _UxGT("Датчик оконч. филамента"); #else LSTR MSG_RUNOUT_SENSOR = _UxGT("Датчик оконч.филам."); @@ -741,7 +741,7 @@ namespace Language_ru { LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ВЫБИРЕТЕ ФИЛАМЕНТ"); LSTR MSG_MMU2_MENU = _UxGT("Настройки MMU"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Обновить прошивку MMU!"); #else LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Обнови прошивку MMU"); @@ -756,7 +756,7 @@ namespace Language_ru { LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Извлечь филамент ~"); LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Выгрузить филамент"); LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Загрузка %i..."); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Извлечение филамента..."); #else LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Извлеч.филамента..."); @@ -768,7 +768,7 @@ namespace Language_ru { LSTR MSG_MMU2_RESETTING = _UxGT("Перезапуск MMU..."); LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Удалите и нажмите"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_MIX = _UxGT("Смешивание"); #else LSTR MSG_MIX = _UxGT("Смешив."); @@ -780,7 +780,7 @@ namespace Language_ru { LSTR MSG_CYCLE_MIX = _UxGT("Цикличное смешивание"); LSTR MSG_GRADIENT_MIX = _UxGT("Градиент смешивания"); LSTR MSG_REVERSE_GRADIENT = _UxGT("Сменить градиент"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_TOGGLE_MIX = _UxGT("Переключить смешивание"); LSTR MSG_ACTIVE_VTOOL = _UxGT("Активация В-инструм."); LSTR MSG_START_VTOOL = _UxGT("Начало В-инструмента"); @@ -808,7 +808,7 @@ namespace Language_ru { LSTR MSG_SNAKE = _UxGT("Змейка"); LSTR MSG_MAZE = _UxGT("Лабиринт"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_BAD_PAGE = _UxGT("Плохой индекс страницы"); LSTR MSG_BAD_PAGE_SPEED = _UxGT("Плохая скорость страницы"); #else @@ -824,7 +824,7 @@ namespace Language_ru { LSTR MSG_REMOVE_PASSWORD = _UxGT("Удалить пароль"); LSTR MSG_PASSWORD_SET = _UxGT("Пароль это "); LSTR MSG_START_OVER = _UxGT("Старт через"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Запомни для сохранения!"); #else LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Запомни, сохрани!"); @@ -875,7 +875,7 @@ namespace Language_ru { LSTR MSG_LEVEL_X_AXIS = _UxGT("Уровень оси X"); LSTR MSG_AUTO_CALIBRATE = _UxGT("Авто калибровка"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_HEATER_TIMEOUT = _UxGT("Время нагревателя вышло"); #else LSTR MSG_HEATER_TIMEOUT = _UxGT("Время нагрев. вышло"); @@ -884,7 +884,7 @@ namespace Language_ru { LSTR MSG_REHEATING = _UxGT("Нагрев..."); LSTR MSG_PROBE_WIZARD = _UxGT("Мастер Z-зонда"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Зондиров. контр. точки Z"); LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Движение к точке зондиров."); #else diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h index 9ab08f2766..275fea3081 100644 --- a/Marlin/src/lcd/language/language_sk.h +++ b/Marlin/src/lcd/language/language_sk.h @@ -575,7 +575,7 @@ namespace Language_sk { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jas svetla"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Nesprávna tlačiareň"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Počet tlačí"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Dokončené"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Celkový čas"); diff --git a/Marlin/src/lcd/language/language_sv.h b/Marlin/src/lcd/language/language_sv.h index 69161d6b55..d4c03d0d61 100644 --- a/Marlin/src/lcd/language/language_sv.h +++ b/Marlin/src/lcd/language/language_sv.h @@ -523,7 +523,7 @@ namespace Language_sv { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Ljus ljusstyrka"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("INKORREKT SKRIVARE"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Utskriftsantal"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Färdiga"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Total Utskriftstid"); diff --git a/Marlin/src/lcd/language/language_tr.h b/Marlin/src/lcd/language/language_tr.h index 4c2bbfa0dc..447ea9d5bf 100644 --- a/Marlin/src/lcd/language/language_tr.h +++ b/Marlin/src/lcd/language/language_tr.h @@ -456,7 +456,7 @@ namespace Language_tr { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Aydınlatma Parlaklğı"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Yanlış Yazıcı"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 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"); diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h index 23110b5e4d..798351c67e 100644 --- a/Marlin/src/lcd/language/language_uk.h +++ b/Marlin/src/lcd/language/language_uk.h @@ -44,7 +44,7 @@ namespace Language_uk { LSTR MSG_MEDIA_INSERTED = _UxGT("SD-картка вставлена"); LSTR MSG_MEDIA_REMOVED = _UxGT("SD-картка видалена"); LSTR MSG_MEDIA_WAITING = _UxGT("Вставте SD-картку"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Збій ініціалізації SD"); #else LSTR MSG_MEDIA_INIT_FAIL = _UxGT("Збій ініціаліз. SD"); @@ -52,7 +52,7 @@ namespace Language_uk { LSTR MSG_MEDIA_READ_ERROR = _UxGT("Помилка зчитування"); LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB диск видалений"); LSTR MSG_MEDIA_USB_FAILED = _UxGT("Помилка USB диску"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переповнення виклику"); LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Програмні кінцевики"); #else @@ -83,7 +83,7 @@ namespace Language_uk { LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Наступна точка"); LSTR MSG_LEVEL_BED_DONE = _UxGT("Завершено!"); LSTR MSG_Z_FADE_HEIGHT = _UxGT("Висота спаду"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_SET_HOME_OFFSETS = _UxGT("Встанов. зміщення дому"); LSTR MSG_HOME_OFFSET_X = _UxGT("Зміщення дому X"); LSTR MSG_HOME_OFFSET_Y = _UxGT("Зміщення дому Y"); @@ -103,7 +103,7 @@ namespace Language_uk { LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Зміщення прийняті"); LSTR MSG_SET_ORIGIN = _UxGT("Встановити нуль"); LSTR MSG_SELECT_ORIGIN = _UxGT("Оберіть нуль"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_LAST_VALUE_SP = _UxGT("Останнє значення "); #else LSTR MSG_LAST_VALUE_SP = _UxGT("Останнє знач. "); @@ -131,7 +131,7 @@ namespace Language_uk { LSTR MSG_CUTTER_FREQUENCY = _UxGT("Частота"); LSTR MSG_LASER_MENU = _UxGT("Керування лазером"); LSTR MSG_SPINDLE_MENU = _UxGT("Керування шпінделем"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_LASER_POWER = _UxGT("Потужність лазера"); LSTR MSG_SPINDLE_TOGGLE = _UxGT("Перемкн. шпіндель"); LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Перемкнути вакуум"); @@ -162,7 +162,7 @@ namespace Language_uk { LSTR MSG_BED_LEVELING = _UxGT("Вирівнювання столу"); LSTR MSG_LEVEL_BED = _UxGT("Вирівняти стіл"); LSTR MSG_BED_TRAMMING = _UxGT("Вирівняти кути"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Вгору до спрацюв. зонду"); LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Кути в межах. Вирів.столу"); #else @@ -172,7 +172,7 @@ namespace Language_uk { LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Хороші точки: "); LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Остання Z: "); LSTR MSG_NEXT_CORNER = _UxGT("Наступний кут"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_MESH_EDITOR = _UxGT("Зміщення по Z"); #else LSTR MSG_MESH_EDITOR = _UxGT("Зміщення Z"); @@ -205,7 +205,7 @@ namespace Language_uk { LSTR MSG_UBL_TOOLS = _UxGT("Інструменти UBL"); LSTR MSG_UBL_LEVEL_BED = _UxGT("Налаштування UBL"); LSTR MSG_LCD_TILTING_MESH = _UxGT("Точка нахилу"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_UBL_MANUAL_MESH = _UxGT("Ручне введення сітки"); LSTR MSG_UBL_BC_INSERT = _UxGT("Розмістити шайбу і вимір."); #else @@ -214,7 +214,7 @@ namespace Language_uk { #endif LSTR MSG_UBL_MESH_WIZARD = _UxGT("Майстер сіток UBL"); LSTR MSG_UBL_BC_INSERT2 = _UxGT("Вимірювання"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_UBL_BC_REMOVE = _UxGT("Видалити і виміряти стіл"); #else LSTR MSG_UBL_BC_REMOVE = _UxGT("Видали і вимір. стіл"); @@ -226,7 +226,7 @@ namespace Language_uk { 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"; - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Редагувати свою сітку"); LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Точне редагування сітки"); LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Будувати свою сітку"); @@ -256,7 +256,7 @@ namespace Language_uk { LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Продовжити сітку"); LSTR MSG_UBL_MESH_LEVELING = _UxGT("Вирівнювання сітки"); LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-точкове вирівн."); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Вирівнювання растру"); #else LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Вирівнюв. растру"); @@ -269,7 +269,7 @@ namespace Language_uk { LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Вивести в CSV"); LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Зберегти зовні"); LSTR MSG_UBL_INFO_UBL = _UxGT("Інформація по UBL"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Обсяг заповнюв."); #else LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Обсяг заповн."); @@ -279,7 +279,7 @@ namespace Language_uk { LSTR MSG_UBL_FILLIN_MESH = _UxGT("Заповнити сітку"); LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Анулювати все"); LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Анулювати найближчу"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Точно налаштувати все"); LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Точно налашт.найближчу"); #else @@ -308,7 +308,7 @@ namespace Language_uk { LSTR MSG_LED_CONTROL = _UxGT("Керування світлом"); LSTR MSG_LEDS = _UxGT("Підсвітка"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_LED_PRESETS = _UxGT("Передустановки світла"); #else LSTR MSG_LED_PRESETS = _UxGT("Передустан. світла"); @@ -324,7 +324,7 @@ namespace Language_uk { LSTR MSG_SET_LEDS_DEFAULT = _UxGT("За умовчанням"); LSTR MSG_LED_CHANNEL_N = _UxGT("Канал ="); LSTR MSG_LEDS2 = _UxGT("Світло #2"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_NEO2_PRESETS = _UxGT("Передустановка світла #2"); #else LSTR MSG_NEO2_PRESETS = _UxGT("Передуст. світла #2"); @@ -361,7 +361,7 @@ namespace Language_uk { LSTR MSG_NOZZLE_STANDBY = _UxGT("Сопло очікує"); LSTR MSG_BED = _UxGT("Стіл, ") LCD_STR_DEGREE "C"; LSTR MSG_CHAMBER = _UxGT("Камера,") LCD_STR_DEGREE "C"; - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_COOLER = _UxGT("Охолодження лазеру"); LSTR MSG_COOLER_TOGGLE = _UxGT("Перемк. охолодж."); #else @@ -372,7 +372,7 @@ namespace Language_uk { LSTR MSG_LASER = _UxGT("Лазер"); LSTR MSG_FAN_SPEED = _UxGT("Швидк. вент."); LSTR MSG_FAN_SPEED_N = _UxGT("Швидк. вент. ~"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_STORED_FAN_N = _UxGT("Збереж.швидк.вент. ~"); LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Дод. швидк. вент. ~"); #else @@ -413,7 +413,7 @@ namespace Language_uk { LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-ривок"); LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-ривок"); LSTR MSG_VE_JERK = _UxGT("Ve-ривок"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_JUNCTION_DEVIATION = _UxGT("Відхилення вузла"); #else LSTR MSG_JUNCTION_DEVIATION = _UxGT("Відхил.вузла"); @@ -428,7 +428,7 @@ namespace Language_uk { LSTR MSG_VMAX_E = _UxGT("Швидк.макс ") LCD_STR_E; LSTR MSG_VMAX_EN = _UxGT("Швидк.макс *"); LSTR MSG_VMIN = _UxGT("Швидк. мін"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_VTRAV_MIN = _UxGT("Переміщення мін"); #else LSTR MSG_VTRAV_MIN = _UxGT("Переміщ. мін"); @@ -471,7 +471,7 @@ namespace Language_uk { LSTR MSG_STORE_EEPROM = _UxGT("Зберегти в EEPROM"); LSTR MSG_LOAD_EEPROM = _UxGT("Зчитати з EEPROM"); LSTR MSG_RESTORE_DEFAULTS = _UxGT("На базові параметри"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_INIT_EEPROM = _UxGT("Ініціалізація EEPROM"); #else LSTR MSG_INIT_EEPROM = _UxGT("Ініціаліз. EEPROM"); @@ -525,7 +525,7 @@ namespace Language_uk { LSTR MSG_NO_MOVE = _UxGT("Немає руху."); LSTR MSG_KILLED = _UxGT("ПЕРЕРВАНО. "); LSTR MSG_STOPPED = _UxGT("ЗУПИНЕНО. "); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_CONTROL_RETRACT = _UxGT("Втягування, мм"); LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Зміна втягув.,мм"); LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Повернення, мм"); @@ -547,7 +547,7 @@ namespace Language_uk { LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Очистити довжину"); LSTR MSG_TOOL_CHANGE = _UxGT("Зміна сопла"); LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Підняти по Z"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Початк.швидкість"); LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Швидкість втягув."); #else @@ -556,7 +556,7 @@ namespace Language_uk { #endif LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Паркувати голову"); LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Відновити швидкість"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Оберти вентилятора"); LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Час вентилятора"); #else @@ -621,7 +621,7 @@ namespace Language_uk { LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("ВИТІК ТЕПЛА СТОЛУ"); LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ВИТІК ТЕПЛА КАМЕРИ"); LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("ВИТІК ОХОЛОДЖЕННЯ"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_COOLING_FAILED = _UxGT("ОХОЛОДЖЕННЯ НЕ ВДАЛОСЬ"); #else LSTR MSG_COOLING_FAILED = _UxGT("ОХОЛОДЖ. НЕ ВДАЛОСЬ"); @@ -638,7 +638,7 @@ namespace Language_uk { LSTR MSG_BED_HEATING = _UxGT("Нагрів столу..."); LSTR MSG_PROBE_HEATING = _UxGT("Нагрів зонду..."); LSTR MSG_CHAMBER_HEATING = _UxGT("Нагрів камери..."); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_BED_COOLING = _UxGT("Охолодження столу..."); LSTR MSG_PROBE_COOLING = _UxGT("Охолодження зонду..."); LSTR MSG_CHAMBER_COOLING = _UxGT("Охолодження камери..."); @@ -665,7 +665,7 @@ namespace Language_uk { LSTR MSG_INFO_MENU = _UxGT("Про принтер"); LSTR MSG_INFO_PRINTER_MENU = _UxGT("Дані принтера"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_3POINT_LEVELING = _UxGT("3-точкове вирівнювання"); LSTR MSG_LINEAR_LEVELING = _UxGT("Лінійне вирівнювання"); LSTR MSG_BILINEAR_LEVELING = _UxGT("Білінійне вирівнювання"); @@ -676,7 +676,7 @@ namespace Language_uk { #endif LSTR MSG_UBL_LEVELING = _UxGT("UBL"); LSTR MSG_MESH_LEVELING = _UxGT("Вирівнювання сітки"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_MESH_DONE = _UxGT("Зондування сітки виконано"); #else LSTR MSG_MESH_DONE = _UxGT("Зондування виконано"); @@ -688,7 +688,7 @@ namespace Language_uk { LSTR MSG_INFO_EXTRUDERS = _UxGT("Екструдери"); LSTR MSG_INFO_BAUDRATE = _UxGT("Бод"); LSTR MSG_INFO_PROTOCOL = _UxGT("Протокол"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Контроль витіку ") LCD_STR_THERMOMETER _UxGT(" Вимк"); LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Контроль витіку ") LCD_STR_THERMOMETER _UxGT(" Увімк"); LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Час простою хотенду"); @@ -704,7 +704,7 @@ namespace Language_uk { LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Завершено"); LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Екструдовано"); - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Кількість друків"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Весь час друку"); LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Найдовший час"); @@ -731,7 +731,7 @@ namespace Language_uk { LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("ЗУПИНКА ДРУКУ"); LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ЗАВАНТАЖИТИ ПРУТОК"); LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("ВИВАНТАЖИТИ ПРУТОК"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ПАРАМЕТРИ ПРОДОВЖЕННЯ:"); #else LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ПАРАМ.ПРОДОВЖЕННЯ:"); @@ -739,7 +739,7 @@ namespace Language_uk { LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Видавити ще"); LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Відновити друк"); LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Сопло: "); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_RUNOUT_SENSOR = _UxGT("Датчик закінчення прутка"); LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Відстань закінч.,мм"); #else @@ -757,7 +757,7 @@ namespace Language_uk { LSTR MSG_MMU2_RESUMING = _UxGT("MMU Продовження..."); LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU Завантажити"); LSTR MSG_MMU2_LOAD_ALL = _UxGT("MMU Завантажити все"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Завантажити в сопло"); #else LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Завант. в сопло"); @@ -774,7 +774,7 @@ namespace Language_uk { LSTR MSG_MMU2_RESETTING = _UxGT("MMU Перезапуск..."); LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Видаліть, натисніть"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_MIX = _UxGT("Змішування"); #else LSTR MSG_MIX = _UxGT("Змішув."); @@ -783,7 +783,7 @@ namespace Language_uk { LSTR MSG_MIXER = _UxGT("Змішувач"); LSTR MSG_GRADIENT = _UxGT("Градієнт"); LSTR MSG_FULL_GRADIENT = _UxGT("Повний градієнт"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_TOGGLE_MIX = _UxGT("Переключити змішування"); #else LSTR MSG_TOGGLE_MIX = _UxGT("Переключ.змішування"); @@ -792,7 +792,7 @@ namespace Language_uk { LSTR MSG_GRADIENT_MIX = _UxGT("Градієнт змішування"); LSTR MSG_REVERSE_GRADIENT = _UxGT("Змінити градієнт"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_ACTIVE_VTOOL = _UxGT("Активація В-інструменту"); LSTR MSG_GRADIENT_ALIAS = _UxGT("Псевдонім В-інструменту"); LSTR MSG_RESET_VTOOLS = _UxGT("Зкидання В-інструментів"); @@ -815,7 +815,7 @@ namespace Language_uk { LSTR MSG_MAZE = _UxGT("Лабіринт"); LSTR MSG_BAD_PAGE = _UxGT("Погана сторінка"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_BAD_PAGE_SPEED = _UxGT("Погана швидкість стор."); #else LSTR MSG_BAD_PAGE_SPEED = _UxGT("Погана швидк. стор."); @@ -888,7 +888,7 @@ namespace Language_uk { LSTR MSG_REHEATING = _UxGT("Нагрівання..."); LSTR MSG_PROBE_WIZARD = _UxGT("Майстер Z-зонда"); - #if LCD_WIDTH > 21 + #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Зондув. контрольної точки Z"); LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Рух до точки зондування"); #else diff --git a/Marlin/src/lcd/language/language_vi.h b/Marlin/src/lcd/language/language_vi.h index ae0babbf8b..a419ddee56 100644 --- a/Marlin/src/lcd/language/language_vi.h +++ b/Marlin/src/lcd/language/language_vi.h @@ -383,7 +383,7 @@ namespace Language_vi { LSTR MSG_INFO_PROTOCOL = _UxGT("Giao Thức"); // Protocol LSTR MSG_CASE_LIGHT = _UxGT("Đèn Khuông"); // Case light LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Độ Sáng"); // Light Brightness - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("Số In"); // Print Count LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Đã hoàn thành"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Tổng số thời gian in"); // Total print time diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h index d61634e431..e641f235e6 100644 --- a/Marlin/src/lcd/language/language_zh_CN.h +++ b/Marlin/src/lcd/language/language_zh_CN.h @@ -489,7 +489,7 @@ namespace Language_zh_CN { LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("打印机不正确"); // "The printer is incorrect" - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("打印计数"); // "Print Count" LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("完成了"); // "Completed" LSTR MSG_INFO_PRINT_TIME = _UxGT("总打印时间"); // "Total print time" diff --git a/Marlin/src/lcd/language/language_zh_TW.h b/Marlin/src/lcd/language/language_zh_TW.h index 7680721b00..f168679e4a 100644 --- a/Marlin/src/lcd/language/language_zh_TW.h +++ b/Marlin/src/lcd/language/language_zh_TW.h @@ -437,7 +437,7 @@ namespace Language_zh_TW { LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("燈亮度"); // "Light BRIGHTNESS" LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("打印機不正確"); // "The printer is incorrect" - #if LCD_WIDTH >= 20 + #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_INFO_PRINT_COUNT = _UxGT("列印計數"); // "Print Count" LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("已完成"); // "Completed" LSTR MSG_INFO_PRINT_TIME = _UxGT("總列印時間"); // "Total print time" From 2351b0df849db3a5efb964413574420e988545b3 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 28 Dec 2021 05:02:40 -0600 Subject: [PATCH 284/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Add?= =?UTF-8?q?=20AXIS=5FCOLLISION=20to=20catch=20broken=20parameters?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/types.h | 2 ++ Marlin/src/gcode/config/M200-M205.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Marlin/src/core/types.h b/Marlin/src/core/types.h index 9a5b64c22e..d589abfc1a 100644 --- a/Marlin/src/core/types.h +++ b/Marlin/src/core/types.h @@ -64,6 +64,8 @@ struct IF { typedef L type; }; #define GANG_ITEM_E(N) #endif +#define AXIS_COLLISION(L) (AXIS4_NAME == L || AXIS5_NAME == L || AXIS6_NAME == L) + // // Enumerated axis indices // diff --git a/Marlin/src/gcode/config/M200-M205.cpp b/Marlin/src/gcode/config/M200-M205.cpp index 7b7ce5e10d..b26a2fe28b 100644 --- a/Marlin/src/gcode/config/M200-M205.cpp +++ b/Marlin/src/gcode/config/M200-M205.cpp @@ -253,7 +253,7 @@ void GcodeSuite::M205() { 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 - #if HAS_CLASSIC_JERK && (AXIS4_NAME == 'J' || AXIS5_NAME == 'J' || AXIS6_NAME == 'J') + #if HAS_CLASSIC_JERK && AXIS_COLLISION('J') #error "Can't set_max_jerk for 'J' axis because 'J' is used for Junction Deviation." #endif if (parser.seenval('J')) { From 02b4e48c6df1604d3de09cbef072f685fe956e92 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 28 Dec 2021 05:43:10 -0600 Subject: [PATCH 285/532] =?UTF-8?q?=F0=9F=9A=B8=20Refine=20stepper-driver-?= =?UTF-8?q?related=20G-codes=20(#23372)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/tmc_util.h | 43 ++-------- Marlin/src/gcode/feature/L6470/M906.cpp | 86 +++++++++---------- Marlin/src/gcode/feature/trinamic/M569.cpp | 47 +++++----- Marlin/src/gcode/feature/trinamic/M906.cpp | 81 +++++++++-------- .../src/gcode/feature/trinamic/M911-M914.cpp | 83 ++++++++++++------ Marlin/src/gcode/gcode.cpp | 2 +- Marlin/src/gcode/gcode.h | 2 +- Marlin/src/module/stepper/trinamic.h | 6 -- 8 files changed, 170 insertions(+), 180 deletions(-) diff --git a/Marlin/src/feature/tmc_util.h b/Marlin/src/feature/tmc_util.h index 1f7d5cf1a5..2da425170f 100644 --- a/Marlin/src/feature/tmc_util.h +++ b/Marlin/src/feature/tmc_util.h @@ -45,6 +45,12 @@ constexpr uint16_t _tmc_thrs(const uint16_t msteps, const uint32_t thrs, const u return 12650000UL * msteps / (256 * thrs * spmm); } +typedef struct { + uint8_t toff; + int8_t hend; + uint8_t hstrt; +} chopper_timing_t; + template class TMCStorage { protected: @@ -297,43 +303,6 @@ class TMCMarlin : public TMC266 sgt_max = 63; }; -template -void tmc_print_current(TMC &st) { - st.printLabel(); - SERIAL_ECHOLNPGM(" driver current: ", st.getMilliamps()); -} - -#if ENABLED(MONITOR_DRIVER_STATUS) - template - void tmc_report_otpw(TMC &st) { - st.printLabel(); - SERIAL_ECHOPGM(" temperature prewarn triggered: "); - serialprint_truefalse(st.getOTPW()); - SERIAL_EOL(); - } - template - void tmc_clear_otpw(TMC &st) { - st.clear_otpw(); - st.printLabel(); - SERIAL_ECHOLNPGM(" prewarn flag cleared"); - } -#endif -#if ENABLED(HYBRID_THRESHOLD) - template - void tmc_print_pwmthrs(TMC &st) { - st.printLabel(); - SERIAL_ECHOLNPGM(" stealthChop max speed: ", st.get_pwm_thrs()); - } -#endif -#if USE_SENSORLESS - template - void tmc_print_sgt(TMC &st) { - st.printLabel(); - SERIAL_ECHOPGM(" homing sensitivity: "); - SERIAL_PRINTLN(st.homing_threshold(), PrintBase::Dec); - } -#endif - void monitor_tmc_drivers(); void test_tmc_connection(LOGICAL_AXIS_DECL(const bool, true)); diff --git a/Marlin/src/gcode/feature/L6470/M906.cpp b/Marlin/src/gcode/feature/L6470/M906.cpp index d058ce5501..9283cdb945 100644 --- a/Marlin/src/gcode/feature/L6470/M906.cpp +++ b/Marlin/src/gcode/feature/L6470/M906.cpp @@ -202,12 +202,11 @@ void L64XX_report_current(L64XX &motor, const L64XX_axis_t axis) { * On L6474 this sets the TVAL register (same address). * * I - select which driver(s) to change on multi-driver axis - * 0 - (default) all drivers on the axis or E0 - * 1 - monitor only X, Y, Z or E1 - * 2 - monitor only X2, Y2, Z2 or E2 - * 3 - monitor only Z3 or E3 - * 4 - monitor only Z4 or E4 - * 5 - monitor only E5 + * (default) all drivers on the axis + * 0 - monitor only the first XYZ... driver + * 1 - monitor only X2, Y2, Z2 + * 2 - monitor only Z3 + * 3 - monitor only Z4 * Xxxx, Yxxx, Zxxx, Exxx - axis to change (optional) * L6474 - current in mA (4A max) * All others - 0-255 @@ -227,8 +226,10 @@ void GcodeSuite::M906() { uint8_t report_current = true; - #if HAS_L64XX - const uint8_t index = parser.byteval('I'); + #if AXIS_IS_L64XX(X2) || AXIS_IS_L64XX(Y2) || AXIS_IS_L64XX(Z2) || AXIS_IS_L64XX(Z3) || AXIS_IS_L64XX(Z4) + const int8_t index = parser.byteval('I', -1); + #else + constexpr int8_t index = -1; #endif LOOP_LOGICAL_AXES(i) if (uint16_t value = parser.intval(axis_codes[i])) { @@ -243,20 +244,20 @@ void GcodeSuite::M906() { switch (i) { case X_AXIS: #if AXIS_IS_L64XX(X) - if (index == 0) L6470_SET_KVAL_HOLD(X); + if (index < 0 || index == 0) L6470_SET_KVAL_HOLD(X); #endif #if AXIS_IS_L64XX(X2) - if (index == 1) L6470_SET_KVAL_HOLD(X2); + if (index < 0 || index == 1) L6470_SET_KVAL_HOLD(X2); #endif break; #if HAS_Y_AXIS case Y_AXIS: #if AXIS_IS_L64XX(Y) - if (index == 0) L6470_SET_KVAL_HOLD(Y); + if (index < 0 || index == 0) L6470_SET_KVAL_HOLD(Y); #endif #if AXIS_IS_L64XX(Y2) - if (index == 1) L6470_SET_KVAL_HOLD(Y2); + if (index < 0 || index == 1) L6470_SET_KVAL_HOLD(Y2); #endif break; #endif @@ -264,50 +265,47 @@ void GcodeSuite::M906() { #if HAS_Z_AXIS case Z_AXIS: #if AXIS_IS_L64XX(Z) - if (index == 0) L6470_SET_KVAL_HOLD(Z); + if (index < 0 || index == 0) L6470_SET_KVAL_HOLD(Z); #endif #if AXIS_IS_L64XX(Z2) - if (index == 1) L6470_SET_KVAL_HOLD(Z2); + if (index < 0 || index == 1) L6470_SET_KVAL_HOLD(Z2); #endif #if AXIS_IS_L64XX(Z3) - if (index == 2) L6470_SET_KVAL_HOLD(Z3); + if (index < 0 || index == 2) L6470_SET_KVAL_HOLD(Z3); #endif #if AXIS_DRIVER_TYPE_Z4(L6470) - if (index == 3) L6470_SET_KVAL_HOLD(Z4); + if (index < 0 || index == 3) L6470_SET_KVAL_HOLD(Z4); #endif break; #endif #if E_STEPPERS case E_AXIS: { - const int8_t target_e_stepper = get_target_e_stepper_from_command(0); - if (target_e_stepper < 0) return; - switch (target_e_stepper) { - #if AXIS_IS_L64XX(E0) - case 0: L6470_SET_KVAL_HOLD(E0); break; - #endif - #if AXIS_IS_L64XX(E1) - case 1: L6470_SET_KVAL_HOLD(E1); break; - #endif - #if AXIS_IS_L64XX(E2) - case 2: L6470_SET_KVAL_HOLD(E2); break; - #endif - #if AXIS_IS_L64XX(E3) - case 3: L6470_SET_KVAL_HOLD(E3); break; - #endif - #if AXIS_IS_L64XX(E4) - case 4: L6470_SET_KVAL_HOLD(E4); break; - #endif - #if AXIS_IS_L64XX(E5) - case 5: L6470_SET_KVAL_HOLD(E5); break; - #endif - #if AXIS_IS_L64XX(E6) - case 6: L6470_SET_KVAL_HOLD(E6); break; - #endif - #if AXIS_IS_L64XX(E7) - case 7: L6470_SET_KVAL_HOLD(E7); break; - #endif - } + const int8_t eindex = get_target_e_stepper_from_command(); + #if AXIS_IS_L64XX(E0) + if (eindex < 0 || eindex == 0) L6470_SET_KVAL_HOLD(E0); + #endif + #if AXIS_IS_L64XX(E1) + if (eindex < 0 || eindex == 1) L6470_SET_KVAL_HOLD(E1); + #endif + #if AXIS_IS_L64XX(E2) + if (eindex < 0 || eindex == 2) L6470_SET_KVAL_HOLD(E2); + #endif + #if AXIS_IS_L64XX(E3) + if (eindex < 0 || eindex == 3) L6470_SET_KVAL_HOLD(E3); + #endif + #if AXIS_IS_L64XX(E4) + if (eindex < 0 || eindex == 4) L6470_SET_KVAL_HOLD(E4); + #endif + #if AXIS_IS_L64XX(E5) + if (eindex < 0 || eindex == 5) L6470_SET_KVAL_HOLD(E5); + #endif + #if AXIS_IS_L64XX(E6) + if (eindex < 0 || eindex == 6) L6470_SET_KVAL_HOLD(E6); + #endif + #if AXIS_IS_L64XX(E7) + if (eindex < 0 || eindex == 7) L6470_SET_KVAL_HOLD(E7); + #endif } break; #endif } diff --git a/Marlin/src/gcode/feature/trinamic/M569.cpp b/Marlin/src/gcode/feature/trinamic/M569.cpp index cb33d46d25..ad1d20e8cb 100644 --- a/Marlin/src/gcode/feature/trinamic/M569.cpp +++ b/Marlin/src/gcode/feature/trinamic/M569.cpp @@ -40,35 +40,35 @@ void tmc_set_stealthChop(TMC &st, const bool enable) { st.refresh_stepping_mode(); } -static void set_stealth_status(const bool enable, const int8_t target_e_stepper) { +static void set_stealth_status(const bool enable, const int8_t eindex) { #define TMC_SET_STEALTH(Q) tmc_set_stealthChop(stepper##Q, enable) - #if X_HAS_STEALTHCHOP || Y_HAS_STEALTHCHOP || Z_HAS_STEALTHCHOP \ - || I_HAS_STEALTHCHOP || J_HAS_STEALTHCHOP || K_HAS_STEALTHCHOP \ - || X2_HAS_STEALTHCHOP || Y2_HAS_STEALTHCHOP || Z2_HAS_STEALTHCHOP || Z3_HAS_STEALTHCHOP || Z4_HAS_STEALTHCHOP - const uint8_t index = parser.byteval('I'); + #if X2_HAS_STEALTHCHOP || Y2_HAS_STEALTHCHOP || Z2_HAS_STEALTHCHOP || Z3_HAS_STEALTHCHOP || Z4_HAS_STEALTHCHOP + const int8_t index = parser.byteval('I', -1); + #else + constexpr int8_t index = -1; #endif LOOP_LOGICAL_AXES(i) if (parser.seen(axis_codes[i])) { switch (i) { case X_AXIS: - TERN_(X_HAS_STEALTHCHOP, if (index == 0) TMC_SET_STEALTH(X)); - TERN_(X2_HAS_STEALTHCHOP, if (index == 1) TMC_SET_STEALTH(X2)); + TERN_(X_HAS_STEALTHCHOP, if (index < 0 || index == 0) TMC_SET_STEALTH(X)); + TERN_(X2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_STEALTH(X2)); break; #if HAS_Y_AXIS case Y_AXIS: - TERN_(Y_HAS_STEALTHCHOP, if (index == 0) TMC_SET_STEALTH(Y)); - TERN_(Y2_HAS_STEALTHCHOP, if (index == 1) TMC_SET_STEALTH(Y2)); + TERN_(Y_HAS_STEALTHCHOP, if (index < 0 || index == 0) TMC_SET_STEALTH(Y)); + TERN_(Y2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_STEALTH(Y2)); break; #endif #if HAS_Z_AXIS case Z_AXIS: - TERN_(Z_HAS_STEALTHCHOP, if (index == 0) TMC_SET_STEALTH(Z)); - TERN_(Z2_HAS_STEALTHCHOP, if (index == 1) TMC_SET_STEALTH(Z2)); - TERN_(Z3_HAS_STEALTHCHOP, if (index == 2) TMC_SET_STEALTH(Z3)); - TERN_(Z4_HAS_STEALTHCHOP, if (index == 3) TMC_SET_STEALTH(Z4)); + TERN_(Z_HAS_STEALTHCHOP, if (index < 0 || index == 0) TMC_SET_STEALTH(Z)); + TERN_(Z2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_STEALTH(Z2)); + TERN_(Z3_HAS_STEALTHCHOP, if (index < 0 || index == 2) TMC_SET_STEALTH(Z3)); + TERN_(Z4_HAS_STEALTHCHOP, if (index < 0 || index == 3) TMC_SET_STEALTH(Z4)); break; #endif @@ -84,17 +84,14 @@ static void set_stealth_status(const bool enable, const int8_t target_e_stepper) #if E_STEPPERS case E_AXIS: { - if (target_e_stepper < 0) return; - switch (target_e_stepper) { - TERN_(E0_HAS_STEALTHCHOP, case 0: TMC_SET_STEALTH(E0); break;) - TERN_(E1_HAS_STEALTHCHOP, case 1: TMC_SET_STEALTH(E1); break;) - TERN_(E2_HAS_STEALTHCHOP, case 2: TMC_SET_STEALTH(E2); break;) - TERN_(E3_HAS_STEALTHCHOP, case 3: TMC_SET_STEALTH(E3); break;) - TERN_(E4_HAS_STEALTHCHOP, case 4: TMC_SET_STEALTH(E4); break;) - TERN_(E5_HAS_STEALTHCHOP, case 5: TMC_SET_STEALTH(E5); break;) - TERN_(E6_HAS_STEALTHCHOP, case 6: TMC_SET_STEALTH(E6); break;) - TERN_(E7_HAS_STEALTHCHOP, case 7: TMC_SET_STEALTH(E7); break;) - } + TERN_(E0_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 0) TMC_SET_STEALTH(E0)); + TERN_(E1_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 1) TMC_SET_STEALTH(E1)); + TERN_(E2_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 2) TMC_SET_STEALTH(E2)); + TERN_(E3_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 3) TMC_SET_STEALTH(E3)); + TERN_(E4_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 4) TMC_SET_STEALTH(E4)); + TERN_(E5_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 5) TMC_SET_STEALTH(E5)); + TERN_(E6_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 6) TMC_SET_STEALTH(E6)); + TERN_(E7_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 7) TMC_SET_STEALTH(E7)); } break; #endif } @@ -133,7 +130,7 @@ static void say_stealth_status() { */ void GcodeSuite::M569() { if (parser.seen('S')) - set_stealth_status(parser.value_bool(), get_target_e_stepper_from_command(0)); + set_stealth_status(parser.value_bool(), get_target_e_stepper_from_command()); else say_stealth_status(); } diff --git a/Marlin/src/gcode/feature/trinamic/M906.cpp b/Marlin/src/gcode/feature/trinamic/M906.cpp index f28718c831..300b8beb09 100644 --- a/Marlin/src/gcode/feature/trinamic/M906.cpp +++ b/Marlin/src/gcode/feature/trinamic/M906.cpp @@ -28,6 +28,12 @@ #include "../../../feature/tmc_util.h" #include "../../../module/stepper/indirection.h" +template +static void tmc_print_current(TMC &st) { + st.printLabel(); + SERIAL_ECHOLNPGM(" driver current: ", st.getMilliamps()); +} + /** * M906: Set motor current in milliamps. * @@ -48,8 +54,10 @@ void GcodeSuite::M906() { bool report = true; - #if AXIS_IS_TMC(X) || AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3) || AXIS_IS_TMC(Z4) || AXIS_IS_TMC(I) || AXIS_IS_TMC(J) || AXIS_IS_TMC(K) - const uint8_t index = parser.byteval('I'); + #if AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3) || AXIS_IS_TMC(Z4) + const int8_t index = parser.byteval('I', -1); + #else + constexpr int8_t index = -1; #endif LOOP_LOGICAL_AXES(i) if (uint16_t value = parser.intval(axis_codes[i])) { @@ -57,20 +65,20 @@ void GcodeSuite::M906() { switch (i) { case X_AXIS: #if AXIS_IS_TMC(X) - if (index == 0) TMC_SET_CURRENT(X); + if (index < 0 || index == 0) TMC_SET_CURRENT(X); #endif #if AXIS_IS_TMC(X2) - if (index == 1) TMC_SET_CURRENT(X2); + if (index < 0 || index == 1) TMC_SET_CURRENT(X2); #endif break; #if HAS_Y_AXIS case Y_AXIS: #if AXIS_IS_TMC(Y) - if (index == 0) TMC_SET_CURRENT(Y); + if (index < 0 || index == 0) TMC_SET_CURRENT(Y); #endif #if AXIS_IS_TMC(Y2) - if (index == 1) TMC_SET_CURRENT(Y2); + if (index < 0 || index == 1) TMC_SET_CURRENT(Y2); #endif break; #endif @@ -78,16 +86,16 @@ void GcodeSuite::M906() { #if HAS_Z_AXIS case Z_AXIS: #if AXIS_IS_TMC(Z) - if (index == 0) TMC_SET_CURRENT(Z); + if (index < 0 || index == 0) TMC_SET_CURRENT(Z); #endif #if AXIS_IS_TMC(Z2) - if (index == 1) TMC_SET_CURRENT(Z2); + if (index < 0 || index == 1) TMC_SET_CURRENT(Z2); #endif #if AXIS_IS_TMC(Z3) - if (index == 2) TMC_SET_CURRENT(Z3); + if (index < 0 || index == 2) TMC_SET_CURRENT(Z3); #endif #if AXIS_IS_TMC(Z4) - if (index == 3) TMC_SET_CURRENT(Z4); + if (index < 0 || index == 3) TMC_SET_CURRENT(Z4); #endif break; #endif @@ -104,34 +112,31 @@ void GcodeSuite::M906() { #if E_STEPPERS case E_AXIS: { - const int8_t target_e_stepper = get_target_e_stepper_from_command(0); - if (target_e_stepper < 0) return; - switch (target_e_stepper) { - #if AXIS_IS_TMC(E0) - case 0: TMC_SET_CURRENT(E0); break; - #endif - #if AXIS_IS_TMC(E1) - case 1: TMC_SET_CURRENT(E1); break; - #endif - #if AXIS_IS_TMC(E2) - case 2: TMC_SET_CURRENT(E2); break; - #endif - #if AXIS_IS_TMC(E3) - case 3: TMC_SET_CURRENT(E3); break; - #endif - #if AXIS_IS_TMC(E4) - case 4: TMC_SET_CURRENT(E4); break; - #endif - #if AXIS_IS_TMC(E5) - case 5: TMC_SET_CURRENT(E5); break; - #endif - #if AXIS_IS_TMC(E6) - case 6: TMC_SET_CURRENT(E6); break; - #endif - #if AXIS_IS_TMC(E7) - case 7: TMC_SET_CURRENT(E7); break; - #endif - } + const int8_t eindex = get_target_e_stepper_from_command(); + #if AXIS_IS_TMC(E0) + if (eindex < 0 || eindex == 0) TMC_SET_CURRENT(E0); + #endif + #if AXIS_IS_TMC(E1) + if (eindex < 0 || eindex == 1) TMC_SET_CURRENT(E1); + #endif + #if AXIS_IS_TMC(E2) + if (eindex < 0 || eindex == 2) TMC_SET_CURRENT(E2); + #endif + #if AXIS_IS_TMC(E3) + if (eindex < 0 || eindex == 3) TMC_SET_CURRENT(E3); + #endif + #if AXIS_IS_TMC(E4) + if (eindex < 0 || eindex == 4) TMC_SET_CURRENT(E4); + #endif + #if AXIS_IS_TMC(E5) + if (eindex < 0 || eindex == 5) TMC_SET_CURRENT(E5); + #endif + #if AXIS_IS_TMC(E6) + if (eindex < 0 || eindex == 6) TMC_SET_CURRENT(E6); + #endif + #if AXIS_IS_TMC(E7) + if (eindex < 0 || eindex == 7) TMC_SET_CURRENT(E7); + #endif } break; #endif } diff --git a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp index 3f83558fd4..32a2d25e77 100644 --- a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp +++ b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp @@ -62,6 +62,21 @@ #error "MONITOR_DRIVER_STATUS requires at least one TMC2130, 2160, 2208, 2209, 2660, 5130, or 5160." #endif + template + static void tmc_report_otpw(TMC &st) { + st.printLabel(); + SERIAL_ECHOPGM(" temperature prewarn triggered: "); + serialprint_truefalse(st.getOTPW()); + SERIAL_EOL(); + } + + template + static void tmc_clear_otpw(TMC &st) { + st.clear_otpw(); + st.printLabel(); + SERIAL_ECHOLNPGM(" prewarn flag cleared"); + } + /** * M911: Report TMC stepper driver overtemperature pre-warn flag * This flag is held by the library, persisting until cleared by M912 @@ -223,11 +238,17 @@ #endif // MONITOR_DRIVER_STATUS -/** - * M913: Set HYBRID_THRESHOLD speed. - */ #if ENABLED(HYBRID_THRESHOLD) + template + static void tmc_print_pwmthrs(TMC &st) { + st.printLabel(); + SERIAL_ECHOLNPGM(" stealthChop max speed: ", st.get_pwm_thrs()); + } + + /** + * M913: Set HYBRID_THRESHOLD speed. + */ void GcodeSuite::M913() { #define TMC_SAY_PWMTHRS(A,Q) tmc_print_pwmthrs(stepper##Q) #define TMC_SET_PWMTHRS(A,Q) stepper##Q.set_pwm_thrs(value) @@ -235,19 +256,21 @@ #define TMC_SET_PWMTHRS_E(E) stepperE##E.set_pwm_thrs(value) bool report = true; - #if AXIS_IS_TMC(X) || AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3) || AXIS_IS_TMC(Z4) || AXIS_IS_TMC(I) || AXIS_IS_TMC(J) || AXIS_IS_TMC(K) - const uint8_t index = parser.byteval('I'); + #if AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3) || AXIS_IS_TMC(Z4) + const int8_t index = parser.byteval('I', -1); + #else + constexpr int8_t index = -1; #endif LOOP_LOGICAL_AXES(i) if (int32_t value = parser.longval(axis_codes[i])) { report = false; switch (i) { case X_AXIS: - TERN_(X_HAS_STEALTHCHOP, if (index < 2) TMC_SET_PWMTHRS(X,X)); - TERN_(X2_HAS_STEALTHCHOP, if (!(index & 1)) TMC_SET_PWMTHRS(X,X2)); + TERN_(X_HAS_STEALTHCHOP, if (index < 0 || index == 0) TMC_SET_PWMTHRS(X,X)); + TERN_(X2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_PWMTHRS(X,X2)); break; case Y_AXIS: - TERN_(Y_HAS_STEALTHCHOP, if (index < 2) TMC_SET_PWMTHRS(Y,Y)); - TERN_(Y2_HAS_STEALTHCHOP, if (!(index & 1)) TMC_SET_PWMTHRS(Y,Y2)); + TERN_(Y_HAS_STEALTHCHOP, if (index < 0 || index == 0) TMC_SET_PWMTHRS(Y,Y)); + TERN_(Y2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_PWMTHRS(Y,Y2)); break; #if I_HAS_STEALTHCHOP @@ -261,25 +284,22 @@ #endif case Z_AXIS: - TERN_(Z_HAS_STEALTHCHOP, if (index < 2) TMC_SET_PWMTHRS(Z,Z)); - TERN_(Z2_HAS_STEALTHCHOP, if (index == 0 || index == 2) TMC_SET_PWMTHRS(Z,Z2)); - TERN_(Z3_HAS_STEALTHCHOP, if (index == 0 || index == 3) TMC_SET_PWMTHRS(Z,Z3)); - TERN_(Z4_HAS_STEALTHCHOP, if (index == 0 || index == 4) TMC_SET_PWMTHRS(Z,Z4)); + TERN_(Z_HAS_STEALTHCHOP, if (index < 0 || index == 0) TMC_SET_PWMTHRS(Z,Z)); + TERN_(Z2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_PWMTHRS(Z,Z2)); + TERN_(Z3_HAS_STEALTHCHOP, if (index < 0 || index == 2) TMC_SET_PWMTHRS(Z,Z3)); + TERN_(Z4_HAS_STEALTHCHOP, if (index < 0 || index == 3) TMC_SET_PWMTHRS(Z,Z4)); break; #if E_STEPPERS case E_AXIS: { - const int8_t target_e_stepper = get_target_e_stepper_from_command(0); - if (target_e_stepper < 0) return; - switch (target_e_stepper) { - TERN_(E0_HAS_STEALTHCHOP, case 0: TMC_SET_PWMTHRS_E(0); break;) - TERN_(E1_HAS_STEALTHCHOP, case 1: TMC_SET_PWMTHRS_E(1); break;) - TERN_(E2_HAS_STEALTHCHOP, case 2: TMC_SET_PWMTHRS_E(2); break;) - TERN_(E3_HAS_STEALTHCHOP, case 3: TMC_SET_PWMTHRS_E(3); break;) - TERN_(E4_HAS_STEALTHCHOP, case 4: TMC_SET_PWMTHRS_E(4); break;) - TERN_(E5_HAS_STEALTHCHOP, case 5: TMC_SET_PWMTHRS_E(5); break;) - TERN_(E6_HAS_STEALTHCHOP, case 6: TMC_SET_PWMTHRS_E(6); break;) - TERN_(E7_HAS_STEALTHCHOP, case 7: TMC_SET_PWMTHRS_E(7); break;) - } + const int8_t eindex = get_target_e_stepper_from_command(); + TERN_(E0_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 0) TMC_SET_PWMTHRS_E(0)); + TERN_(E1_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 1) TMC_SET_PWMTHRS_E(1)); + TERN_(E2_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 2) TMC_SET_PWMTHRS_E(2)); + TERN_(E3_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 3) TMC_SET_PWMTHRS_E(3)); + TERN_(E4_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 4) TMC_SET_PWMTHRS_E(4)); + TERN_(E5_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 5) TMC_SET_PWMTHRS_E(5)); + TERN_(E6_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 6) TMC_SET_PWMTHRS_E(6)); + TERN_(E7_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 7) TMC_SET_PWMTHRS_E(7)); } break; #endif // E_STEPPERS } @@ -407,11 +427,18 @@ #endif // HYBRID_THRESHOLD -/** - * M914: Set StallGuard sensitivity. - */ #if USE_SENSORLESS + template + static void tmc_print_sgt(TMC &st) { + st.printLabel(); + SERIAL_ECHOPGM(" homing sensitivity: "); + SERIAL_PRINTLN(st.homing_threshold(), PrintBase::Dec); + } + + /** + * M914: Set StallGuard sensitivity. + */ void GcodeSuite::M914() { bool report = true; diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index c05ac5494d..d3d8f335df 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -159,7 +159,7 @@ int8_t GcodeSuite::get_target_e_stepper_from_command(const int8_t dval/*=-1*/) { } /** - * Set XYZIJKE destination and feedrate from the current GCode command + * Set XYZ...E destination and feedrate from the current GCode command * * - Set destination from included axis codes * - Set to current for missing axis codes diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index bbfb31a3fe..262237d14c 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -284,7 +284,7 @@ * M871 - Print/reset/clear first layer temperature offset values. (Requires PTC_PROBE, PTC_BED, or PTC_HOTEND) * M876 - Handle Prompt Response. (Requires HOST_PROMPT_SUPPORT and not EMERGENCY_PARSER) * M900 - Get or Set Linear Advance K-factor. (Requires LIN_ADVANCE) - * M906 - Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given. (Requires at least one _DRIVER_TYPE defined as TMC2130/2160/5130/5160/2208/2209/2660 or L6470) + * M906 - Set or get motor current in milliamps using axis codes XYZE, etc. Report values if no axis codes given. (Requires at least one _DRIVER_TYPE defined as TMC2130/2160/5130/5160/2208/2209/2660 or L6470) * M907 - Set digital trimpot motor current using axis codes. (Requires a board with digital trimpots) * M908 - Control digital trimpot directly. (Requires HAS_MOTOR_CURRENT_DAC or DIGIPOTSS_PIN) * M909 - Print digipot/DAC current value. (Requires HAS_MOTOR_CURRENT_DAC) diff --git a/Marlin/src/module/stepper/trinamic.h b/Marlin/src/module/stepper/trinamic.h index 0a956a70b3..9ed9bdf407 100644 --- a/Marlin/src/module/stepper/trinamic.h +++ b/Marlin/src/module/stepper/trinamic.h @@ -74,12 +74,6 @@ #define TMC_CLASS_E(N) TMC_CLASS(E##N, E) #endif -typedef struct { - uint8_t toff; - int8_t hend; - uint8_t hstrt; -} chopper_timing_t; - #ifndef CHOPPER_TIMING_X #define CHOPPER_TIMING_X CHOPPER_TIMING #endif From 13ce5aa1ed4ab4f8fc01f7ff6f7ad7884fc28ea9 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 21 Dec 2021 22:15:48 -0600 Subject: [PATCH 286/532] =?UTF-8?q?=F0=9F=8E=A8=20Misc.=20cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/DUE/MarlinSerialUSB.cpp | 2 +- Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp | 2 +- Marlin/src/feature/encoder_i2c.cpp | 8 +- Marlin/src/feature/tmc_util.cpp | 8 +- Marlin/src/gcode/calibrate/G425.cpp | 2 +- Marlin/src/gcode/feature/pause/M600.cpp | 6 +- Marlin/src/gcode/feature/pause/M701_M702.cpp | 12 +-- .../src/gcode/feature/power_monitor/M430.cpp | 4 +- .../lcd/extui/anycubic_chiron/chiron_tft.cpp | 2 +- .../generic/files_screen.cpp | 2 +- Marlin/src/sd/Sd2Card.cpp | 83 ++++++++++--------- .../sd/usb_flashdrive/lib-uhs2/usbhost.cpp | 2 +- buildroot/web-ui/data/www/webmarlin-class.js | 20 ++--- 13 files changed, 75 insertions(+), 78 deletions(-) diff --git a/Marlin/src/HAL/DUE/MarlinSerialUSB.cpp b/Marlin/src/HAL/DUE/MarlinSerialUSB.cpp index 67c597da80..8de2dc7924 100644 --- a/Marlin/src/HAL/DUE/MarlinSerialUSB.cpp +++ b/Marlin/src/HAL/DUE/MarlinSerialUSB.cpp @@ -41,7 +41,7 @@ extern "C" { int udi_cdc_getc(); bool udi_cdc_is_tx_ready(); int udi_cdc_putc(int value); -}; +} // Pending character static int pending_char = -1; diff --git a/Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp b/Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp index 3dcbbaecd2..34cc256b30 100644 --- a/Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp +++ b/Marlin/src/HAL/DUE/usb/sd_mmc_spi_mem.cpp @@ -10,7 +10,7 @@ #include "../../../sd/cardreader.h" extern "C" { -#include "sd_mmc_spi_mem.h" + #include "sd_mmc_spi_mem.h" } #define SD_MMC_BLOCK_SIZE 512 diff --git a/Marlin/src/feature/encoder_i2c.cpp b/Marlin/src/feature/encoder_i2c.cpp index 87e611f86c..2ccd686a99 100644 --- a/Marlin/src/feature/encoder_i2c.cpp +++ b/Marlin/src/feature/encoder_i2c.cpp @@ -756,7 +756,7 @@ int8_t I2CPositionEncodersMgr::parse() { if (!parser.has_value()) { SERIAL_ECHOLNPGM("?A seen, but no address specified! [30-200]"); return I2CPE_PARSE_ERR; - }; + } I2CPE_addr = parser.value_byte(); if (!WITHIN(I2CPE_addr, 30, 200)) { // reserve the first 30 and last 55 @@ -775,7 +775,7 @@ int8_t I2CPositionEncodersMgr::parse() { if (!parser.has_value()) { SERIAL_ECHOLNPGM("?I seen, but no index specified! [0-", I2CPE_ENCODER_CNT - 1, "]"); return I2CPE_PARSE_ERR; - }; + } I2CPE_idx = parser.value_byte(); if (I2CPE_idx >= I2CPE_ENCODER_CNT) { @@ -791,7 +791,7 @@ int8_t I2CPositionEncodersMgr::parse() { I2CPE_anyaxis = parser.seen_axis(); return I2CPE_PARSE_OK; -}; +} /** * M860: Report the position(s) of position encoder module(s). @@ -934,7 +934,7 @@ void I2CPositionEncodersMgr::M864() { if (!parser.has_value()) { SERIAL_ECHOLNPGM("?S seen, but no address specified! [30-200]"); return; - }; + } newAddress = parser.value_byte(); if (!WITHIN(newAddress, 30, 200)) { diff --git a/Marlin/src/feature/tmc_util.cpp b/Marlin/src/feature/tmc_util.cpp index 82c10e6e8e..e793b4cf22 100644 --- a/Marlin/src/feature/tmc_util.cpp +++ b/Marlin/src/feature/tmc_util.cpp @@ -472,12 +472,8 @@ void tmc_set_report_interval(const uint16_t update_interval) { if ((report_tmc_status_interval = update_interval)) SERIAL_ECHOLNPGM("axis:pwm_scale" - #if HAS_STEALTHCHOP - "/curr_scale" - #endif - #if HAS_STALLGUARD - "/mech_load" - #endif + TERN_(HAS_STEALTHCHOP, "/curr_scale") + TERN_(HAS_STALLGUARD, "/mech_load") "|flags|warncount" ); } diff --git a/Marlin/src/gcode/calibrate/G425.cpp b/Marlin/src/gcode/calibrate/G425.cpp index 88c906f493..31e0bb2587 100644 --- a/Marlin/src/gcode/calibrate/G425.cpp +++ b/Marlin/src/gcode/calibrate/G425.cpp @@ -666,7 +666,7 @@ inline void calibrate_all_toolheads(measurements_t &m, const float uncertainty) * 1) For each nozzle, touch top and sides of object to determine object position and * nozzle offsets. Do a fast but rough search over a wider area. * 2) With the first nozzle, touch top and sides of object to determine backlash values - * for all axis (if BACKLASH_GCODE is enabled) + * for all axes (if BACKLASH_GCODE is enabled) * 3) For each nozzle, touch top and sides of object slowly to determine precise * position of object. Adjust coordinate system and nozzle offsets so probed object * location corresponds to known object location with a high degree of precision. diff --git a/Marlin/src/gcode/feature/pause/M600.cpp b/Marlin/src/gcode/feature/pause/M600.cpp index 665967ca56..febb946bef 100644 --- a/Marlin/src/gcode/feature/pause/M600.cpp +++ b/Marlin/src/gcode/feature/pause/M600.cpp @@ -67,13 +67,13 @@ void GcodeSuite::M600() { #if ENABLED(MIXING_EXTRUDER) - const int8_t target_e_stepper = get_target_e_stepper_from_command(); - if (target_e_stepper < 0) return; + const int8_t eindex = get_target_e_stepper_from_command(); + if (eindex < 0) return; const uint8_t old_mixing_tool = mixer.get_current_vtool(); mixer.T(MIXER_DIRECT_SET_TOOL); - MIXER_STEPPER_LOOP(i) mixer.set_collector(i, i == uint8_t(target_e_stepper) ? 1.0 : 0.0); + MIXER_STEPPER_LOOP(i) mixer.set_collector(i, i == uint8_t(eindex) ? 1.0 : 0.0); mixer.normalize(); const int8_t target_extruder = active_extruder; diff --git a/Marlin/src/gcode/feature/pause/M701_M702.cpp b/Marlin/src/gcode/feature/pause/M701_M702.cpp index 21e389a5f2..135b3d384e 100644 --- a/Marlin/src/gcode/feature/pause/M701_M702.cpp +++ b/Marlin/src/gcode/feature/pause/M701_M702.cpp @@ -60,13 +60,13 @@ void GcodeSuite::M701() { if (TERN0(NO_MOTION_BEFORE_HOMING, axes_should_home())) park_point.z = 0; #if ENABLED(MIXING_EXTRUDER) - const int8_t target_e_stepper = get_target_e_stepper_from_command(); - if (target_e_stepper < 0) return; + const int8_t eindex = get_target_e_stepper_from_command(); + if (eindex < 0) return; const uint8_t old_mixing_tool = mixer.get_current_vtool(); mixer.T(MIXER_DIRECT_SET_TOOL); - MIXER_STEPPER_LOOP(i) mixer.set_collector(i, (i == (uint8_t)target_e_stepper) ? 1.0 : 0.0); + MIXER_STEPPER_LOOP(i) mixer.set_collector(i, i == uint8_t(eindex) ? 1.0 : 0.0); mixer.normalize(); const int8_t target_extruder = active_extruder; @@ -165,10 +165,10 @@ void GcodeSuite::M702() { #endif if (seenT) { - const int8_t target_e_stepper = get_target_e_stepper_from_command(); - if (target_e_stepper < 0) return; + const int8_t eindex = get_target_e_stepper_from_command(); + if (eindex < 0) return; mixer.T(MIXER_DIRECT_SET_TOOL); - MIXER_STEPPER_LOOP(i) mixer.set_collector(i, (i == (uint8_t)target_e_stepper) ? 1.0 : 0.0); + MIXER_STEPPER_LOOP(i) mixer.set_collector(i, i == uint8_t(eindex) ? 1.0 : 0.0); mixer.normalize(); } diff --git a/Marlin/src/gcode/feature/power_monitor/M430.cpp b/Marlin/src/gcode/feature/power_monitor/M430.cpp index 642a75d061..0f3bb40914 100644 --- a/Marlin/src/gcode/feature/power_monitor/M430.cpp +++ b/Marlin/src/gcode/feature/power_monitor/M430.cpp @@ -53,9 +53,7 @@ void GcodeSuite::M430() { SERIAL_ECHOLNPGM( #if ENABLED(POWER_MONITOR_CURRENT) "Current: ", power_monitor.getAmps(), "A" - #if ENABLED(POWER_MONITOR_VOLTAGE) - " " - #endif + TERN_(POWER_MONITOR_VOLTAGE, " ") #endif #if ENABLED(POWER_MONITOR_VOLTAGE) "Voltage: ", power_monitor.getVolts(), "V" diff --git a/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp b/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp index 6db5972fa7..c56d8aa7fb 100644 --- a/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp +++ b/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp @@ -366,7 +366,7 @@ int8_t ChironTFT::FindToken(char c) { #endif return pos; } - } while(++pos < command_len); + } while (++pos < command_len); #if ACDEBUG(AC_INFO) SERIAL_ECHOLNPGM("Not found: ", c); #endif diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/files_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/files_screen.cpp index 5076e58adf..6f428fa174 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/files_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/files_screen.cpp @@ -77,7 +77,7 @@ const char *FilesScreen::getSelectedFilename(bool shortName) { } void FilesScreen::drawSelectedFile() { - if(mydata.selected_tag == 0xFF) return; + if (mydata.selected_tag == 0xFF) return; FileList files; files.seek(getSelectedFileIndex(), true); mydata.flags.is_dir = files.isDir(); diff --git a/Marlin/src/sd/Sd2Card.cpp b/Marlin/src/sd/Sd2Card.cpp index a81932d494..3402bfaee3 100644 --- a/Marlin/src/sd/Sd2Card.cpp +++ b/Marlin/src/sd/Sd2Card.cpp @@ -392,50 +392,51 @@ bool DiskIODriver_SPI_SD::readData(uint8_t *dst) { #if ENABLED(SD_CHECK_AND_RETRY) #ifdef FAST_CRC - static const uint16_t crctab16[] PROGMEM = { - 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, - 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, - 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, - 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, - 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, - 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, - 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, - 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, - 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, - 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, - 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, - 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, - 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, - 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, - 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, - 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, - 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, - 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, - 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, - 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, - 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, - 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, - 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, - 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, - 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, - 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, - 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, - 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, - 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, - 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, - 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, - 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 - }; + static const uint16_t crctab16[] PROGMEM = { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, + 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, + 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, + 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, + 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, + 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, + 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, + 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, + 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, + 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, + 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, + 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, + 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, + 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, + 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, + 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, + 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, + 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, + 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, + 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, + 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, + 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, + 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0 + }; // faster CRC-CCITT // uses the x^16,x^12,x^5,x^1 polynomial. - static uint16_t CRC_CCITT(const uint8_t *data, size_t n) { - uint16_t crc = 0; - for (size_t i = 0; i < n; i++) { - crc = pgm_read_word(&crctab16[(crc >> 8 ^ data[i]) & 0xFF]) ^ (crc << 8); + static uint16_t CRC_CCITT(const uint8_t *data, size_t n) { + uint16_t crc = 0; + for (size_t i = 0; i < n; i++) + crc = pgm_read_word(&crctab16[(crc >> 8 ^ data[i]) & 0xFF]) ^ (crc << 8); + return crc; } - return crc; - } + #else + // slower CRC-CCITT // uses the x^16,x^12,x^5,x^1 polynomial. static uint16_t CRC_CCITT(const uint8_t *data, size_t n) { @@ -449,7 +450,9 @@ bool DiskIODriver_SPI_SD::readData(uint8_t *dst) { } return crc; } + #endif + #endif // SD_CHECK_AND_RETRY bool DiskIODriver_SPI_SD::readData(uint8_t *dst, const uint16_t count) { diff --git a/Marlin/src/sd/usb_flashdrive/lib-uhs2/usbhost.cpp b/Marlin/src/sd/usb_flashdrive/lib-uhs2/usbhost.cpp index a1a3b7d50e..9ff9cd77bc 100644 --- a/Marlin/src/sd/usb_flashdrive/lib-uhs2/usbhost.cpp +++ b/Marlin/src/sd/usb_flashdrive/lib-uhs2/usbhost.cpp @@ -47,7 +47,7 @@ void MAX3421e::regWr(uint8_t reg, uint8_t data) { spiSend(reg | 0x02); spiSend(data); ncs(); -}; +} // multiple-byte write // return a pointer to memory position after last written diff --git a/buildroot/web-ui/data/www/webmarlin-class.js b/buildroot/web-ui/data/www/webmarlin-class.js index 393fd88eef..2cfc4cbfba 100644 --- a/buildroot/web-ui/data/www/webmarlin-class.js +++ b/buildroot/web-ui/data/www/webmarlin-class.js @@ -349,18 +349,18 @@ class jsLog { var wmGCommands = { CustomCmd : new wmGCommandItem('',null,null,'Custom command'), - MoveFw : new wmGCommandItem('G1','Y{0}',10,'Move forward on Y axis'), - MoveBw : new wmGCommandItem('G1','Y-{0}',10,'Move backward on Y axis'), - MoveSx : new wmGCommandItem('G1','X{0}',10,'Move left on X axis'), - MoveDx : new wmGCommandItem('G1','X-{0}',10,'Move right on X axis'), - MoveUp : new wmGCommandItem('G1','Z{0}',10,'Move up on Z axis'), - MoveDw : new wmGCommandItem('G1','Z-{0}',10,'Move down on Z axis'), + MoveFw : new wmGCommandItem('G1','Y{0}',10,'Move Y forward'), + MoveBw : new wmGCommandItem('G1','Y-{0}',10,'Move Y backward'), + MoveSx : new wmGCommandItem('G1','X{0}',10,'Move X left'), + MoveDx : new wmGCommandItem('G1','X-{0}',10,'Move X right'), + MoveUp : new wmGCommandItem('G1','Z{0}',10,'Move Z up'), + MoveDw : new wmGCommandItem('G1','Z-{0}',10,'Move Z down'), FillRetrive : new wmGCommandItem('G10',null,null,'Retract filament'), FillExtrude : new wmGCommandItem('GYYYY',null,null,'Extrude filament'), - MoveHome : new wmGCommandItem('G28',null,null,'Go home on all axis'), - MoveHomeX : new wmGCommandItem('G28','X',null,'Go home on X axis'), - MoveHomeY : new wmGCommandItem('G28','Y',null,'Go home on Y axis'), - MoveHomeZ : new wmGCommandItem('G28','Z',null,'Go home on Z axis'), + MoveHome : new wmGCommandItem('G28',null,null,'Home all axes'), + MoveHomeX : new wmGCommandItem('G28','X',null,'Home X axis'), + MoveHomeY : new wmGCommandItem('G28','Y',null,'Home Y axis'), + MoveHomeZ : new wmGCommandItem('G28','Z',null,'Home Z axis'), StepEnable : new wmGCommandItem('M17','{0}','E X Y Z','Enable stepper'), StepEnableAll : new wmGCommandItem('M17',null,null,'Enable all steppers'), StepDisable : new wmGCommandItem('M18','{0}','E X Y Z','Disable stepper'), From 33fa3aba107eb9b4bb1f90a83d6d81a437ed0347 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 28 Dec 2021 06:02:50 -0600 Subject: [PATCH 287/532] =?UTF-8?q?=F0=9F=A9=BA=20Check=20some=20axis-para?= =?UTF-8?q?meter=20collisions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/feature/L6470/M906.cpp | 4 ++++ Marlin/src/gcode/feature/trinamic/M569.cpp | 4 ++++ Marlin/src/gcode/motion/G5.cpp | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/Marlin/src/gcode/feature/L6470/M906.cpp b/Marlin/src/gcode/feature/L6470/M906.cpp index 9283cdb945..67d11493ab 100644 --- a/Marlin/src/gcode/feature/L6470/M906.cpp +++ b/Marlin/src/gcode/feature/L6470/M906.cpp @@ -24,6 +24,10 @@ #if HAS_L64XX +#if AXIS_COLLISION('I') + #error "M906 parameter collision with axis name." +#endif + #include "../../gcode.h" #include "../../../libs/L64XX/L64XX_Marlin.h" #include "../../../module/stepper/indirection.h" diff --git a/Marlin/src/gcode/feature/trinamic/M569.cpp b/Marlin/src/gcode/feature/trinamic/M569.cpp index ad1d20e8cb..3f4b0c6372 100644 --- a/Marlin/src/gcode/feature/trinamic/M569.cpp +++ b/Marlin/src/gcode/feature/trinamic/M569.cpp @@ -24,6 +24,10 @@ #if HAS_STEALTHCHOP +#if AXIS_COLLISION('I') + #error "M569 parameter collision with axis name." +#endif + #include "../../gcode.h" #include "../../../feature/tmc_util.h" #include "../../../module/stepper/indirection.h" diff --git a/Marlin/src/gcode/motion/G5.cpp b/Marlin/src/gcode/motion/G5.cpp index 2c98fae845..316a59b650 100644 --- a/Marlin/src/gcode/motion/G5.cpp +++ b/Marlin/src/gcode/motion/G5.cpp @@ -24,6 +24,10 @@ #if ENABLED(BEZIER_CURVE_SUPPORT) +#if AXIS_COLLISION('I') || AXIS_COLLISION('J') + #error "G5 parameter collision with axis name." +#endif + #include "../../module/motion.h" #include "../../module/planner_bezier.h" From 6fb2d8a25f096d084348a6f6930f515d947474d4 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 28 Dec 2021 02:57:24 -0600 Subject: [PATCH 288/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Rem?= =?UTF-8?q?ove=20extraneous=20'inline'=20hints?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/AVR/MarlinSerial.h | 2 +- Marlin/src/HAL/DUE/MarlinSerial.h | 2 +- Marlin/src/HAL/LPC1768/include/SPI.h | 2 +- Marlin/src/HAL/LPC1768/tft/xpt2046.h | 4 +- Marlin/src/HAL/NATIVE_SIM/tft/xpt2046.h | 4 +- Marlin/src/HAL/STM32/tft/xpt2046.h | 4 +- Marlin/src/HAL/STM32F1/SPI.h | 2 +- Marlin/src/HAL/STM32F1/pinsDebug.h | 14 +- Marlin/src/HAL/STM32F1/tft/xpt2046.h | 4 +- Marlin/src/HAL/shared/eeprom_api.h | 6 +- Marlin/src/core/macros.h | 16 +- Marlin/src/core/serial_hook.h | 2 +- Marlin/src/feature/babystep.h | 6 +- Marlin/src/feature/backlash.h | 10 +- .../feature/bedlevel/mbl/mesh_bed_leveling.h | 10 +- Marlin/src/feature/bedlevel/ubl/ubl.h | 22 +-- Marlin/src/feature/bltouch.h | 2 +- Marlin/src/feature/cancel_object.h | 8 +- Marlin/src/feature/caselight.h | 4 +- Marlin/src/feature/controllerfan.h | 6 +- Marlin/src/feature/fancheck.h | 8 +- Marlin/src/feature/filwidth.h | 16 +- Marlin/src/feature/host_actions.h | 4 +- Marlin/src/feature/leds/leds.h | 52 +++--- Marlin/src/feature/leds/neopixel.h | 28 ++-- Marlin/src/feature/leds/printer_event_leds.h | 16 +- Marlin/src/feature/max7219.h | 6 +- Marlin/src/feature/mixing.h | 10 +- Marlin/src/feature/mmu/mmu2.h | 12 +- Marlin/src/feature/power.h | 2 +- Marlin/src/feature/powerloss.h | 22 +-- Marlin/src/feature/probe_temp_comp.h | 6 +- Marlin/src/feature/repeat.h | 4 +- Marlin/src/feature/runout.h | 54 +++---- Marlin/src/feature/spindle_laser.h | 42 ++--- Marlin/src/feature/twibus.h | 8 +- Marlin/src/gcode/gcode.h | 18 +-- Marlin/src/gcode/parser.h | 118 +++++++------- Marlin/src/gcode/queue.h | 14 +- Marlin/src/lcd/e3v2/enhanced/lockscreen.h | 2 +- Marlin/src/lcd/e3v2/marlinui/dwin_string.h | 16 +- Marlin/src/lcd/extui/dgus/DGUSDisplay.h | 4 +- .../lcd/extui/dgus/fysetc/DGUSScreenHandler.h | 12 +- .../extui/dgus/hiprecy/DGUSScreenHandler.h | 12 +- .../lcd/extui/dgus/mks/DGUSScreenHandler.h | 12 +- .../lcd/extui/dgus/origin/DGUSScreenHandler.h | 12 +- .../src/lcd/extui/dgus_reloaded/DGUSDisplay.h | 2 +- .../src/lcd/extui/ftdi_eve_touch_ui/compat.h | 4 +- .../ftdi_eve_touch_ui/ftdi_eve_lib/compat.h | 28 ++-- .../ftdi_eve_lib/extended/sound_list.h | 4 +- Marlin/src/lcd/extui/mks_ui/SPIFlashStorage.h | 4 +- Marlin/src/lcd/marlinui.h | 62 ++++---- Marlin/src/lcd/menu/menu.h | 4 +- Marlin/src/lcd/menu/menu_item.h | 26 +-- Marlin/src/lcd/tft/tft.h | 32 ++-- Marlin/src/lcd/tft/tft_string.h | 8 +- Marlin/src/lcd/tft/touch.h | 4 +- Marlin/src/libs/L64XX/L64XX_Marlin.h | 4 +- Marlin/src/libs/buzzer.h | 4 +- Marlin/src/libs/stopwatch.h | 4 +- Marlin/src/module/endstops.h | 4 +- Marlin/src/module/planner.h | 20 +-- Marlin/src/module/printcounter.h | 6 +- Marlin/src/module/settings.h | 2 +- Marlin/src/module/stepper.h | 24 +-- Marlin/src/module/temperature.h | 150 +++++++++--------- Marlin/src/sd/cardreader.h | 38 ++--- 67 files changed, 537 insertions(+), 537 deletions(-) diff --git a/Marlin/src/HAL/AVR/MarlinSerial.h b/Marlin/src/HAL/AVR/MarlinSerial.h index 0565c7b9db..84c5ddd297 100644 --- a/Marlin/src/HAL/AVR/MarlinSerial.h +++ b/Marlin/src/HAL/AVR/MarlinSerial.h @@ -217,7 +217,7 @@ #endif enum { HasEmergencyParser = Cfg::EMERGENCYPARSER }; - static inline bool emergency_parser_enabled() { return Cfg::EMERGENCYPARSER; } + static bool emergency_parser_enabled() { return Cfg::EMERGENCYPARSER; } FORCE_INLINE static uint8_t dropped() { return Cfg::DROPPED_RX ? rx_dropped_bytes : 0; } FORCE_INLINE static uint8_t buffer_overruns() { return Cfg::RX_OVERRUNS ? rx_buffer_overruns : 0; } diff --git a/Marlin/src/HAL/DUE/MarlinSerial.h b/Marlin/src/HAL/DUE/MarlinSerial.h index 4a62e2834f..5a61bffee0 100644 --- a/Marlin/src/HAL/DUE/MarlinSerial.h +++ b/Marlin/src/HAL/DUE/MarlinSerial.h @@ -118,7 +118,7 @@ public: static size_t write(const uint8_t c); static void flushTX(); - static inline bool emergency_parser_enabled() { return Cfg::EMERGENCYPARSER; } + static bool emergency_parser_enabled() { return Cfg::EMERGENCYPARSER; } FORCE_INLINE static uint8_t dropped() { return Cfg::DROPPED_RX ? rx_dropped_bytes : 0; } FORCE_INLINE static uint8_t buffer_overruns() { return Cfg::RX_OVERRUNS ? rx_buffer_overruns : 0; } diff --git a/Marlin/src/HAL/LPC1768/include/SPI.h b/Marlin/src/HAL/LPC1768/include/SPI.h index ecd91f6a3b..24f4759315 100644 --- a/Marlin/src/HAL/LPC1768/include/SPI.h +++ b/Marlin/src/HAL/LPC1768/include/SPI.h @@ -77,7 +77,7 @@ public: //uint32_t spiRate() const { return spi_speed; } - static inline uint32_t spiRate2Clock(uint32_t spiRate) { + static uint32_t spiRate2Clock(uint32_t spiRate) { uint32_t Marlin_speed[7]; // CPSR is always 2 Marlin_speed[0] = 8333333; //(SCR: 2) desired: 8,000,000 actual: 8,333,333 +4.2% SPI_FULL_SPEED Marlin_speed[1] = 4166667; //(SCR: 5) desired: 4,000,000 actual: 4,166,667 +4.2% SPI_HALF_SPEED diff --git a/Marlin/src/HAL/LPC1768/tft/xpt2046.h b/Marlin/src/HAL/LPC1768/tft/xpt2046.h index aba0799e44..7c456cf00e 100644 --- a/Marlin/src/HAL/LPC1768/tft/xpt2046.h +++ b/Marlin/src/HAL/LPC1768/tft/xpt2046.h @@ -65,8 +65,8 @@ private: static uint16_t getRawData(const XPTCoordinate coordinate); static bool isTouched(); - static inline void DataTransferBegin() { WRITE(TOUCH_CS_PIN, LOW); }; - static inline void DataTransferEnd() { WRITE(TOUCH_CS_PIN, HIGH); }; + static void DataTransferBegin() { WRITE(TOUCH_CS_PIN, LOW); }; + static void DataTransferEnd() { WRITE(TOUCH_CS_PIN, HIGH); }; #if ENABLED(TOUCH_BUTTONS_HW_SPI) static uint16_t HardwareIO(uint16_t data); #endif diff --git a/Marlin/src/HAL/NATIVE_SIM/tft/xpt2046.h b/Marlin/src/HAL/NATIVE_SIM/tft/xpt2046.h index 9ef1816c7b..b131853643 100644 --- a/Marlin/src/HAL/NATIVE_SIM/tft/xpt2046.h +++ b/Marlin/src/HAL/NATIVE_SIM/tft/xpt2046.h @@ -62,8 +62,8 @@ private: static uint16_t getRawData(const XPTCoordinate coordinate); static bool isTouched(); - static inline void DataTransferBegin(); - static inline void DataTransferEnd(); + static void DataTransferBegin(); + static void DataTransferEnd(); #if ENABLED(TOUCH_BUTTONS_HW_SPI) static uint16_t HardwareIO(uint16_t data); #endif diff --git a/Marlin/src/HAL/STM32/tft/xpt2046.h b/Marlin/src/HAL/STM32/tft/xpt2046.h index 2cff3e29d0..71de6b0025 100644 --- a/Marlin/src/HAL/STM32/tft/xpt2046.h +++ b/Marlin/src/HAL/STM32/tft/xpt2046.h @@ -69,8 +69,8 @@ private: static uint16_t getRawData(const XPTCoordinate coordinate); static bool isTouched(); - static inline void DataTransferBegin() { if (SPIx.Instance) { HAL_SPI_Init(&SPIx); } WRITE(TOUCH_CS_PIN, LOW); }; - static inline void DataTransferEnd() { WRITE(TOUCH_CS_PIN, HIGH); }; + static void DataTransferBegin() { if (SPIx.Instance) { HAL_SPI_Init(&SPIx); } WRITE(TOUCH_CS_PIN, LOW); }; + static void DataTransferEnd() { WRITE(TOUCH_CS_PIN, HIGH); }; static uint16_t HardwareIO(uint16_t data); static uint16_t SoftwareIO(uint16_t data); static uint16_t IO(uint16_t data = 0) { return SPIx.Instance ? HardwareIO(data) : SoftwareIO(data); } diff --git a/Marlin/src/HAL/STM32F1/SPI.h b/Marlin/src/HAL/STM32F1/SPI.h index 2467432e07..92f4226301 100644 --- a/Marlin/src/HAL/STM32F1/SPI.h +++ b/Marlin/src/HAL/STM32F1/SPI.h @@ -417,7 +417,7 @@ private: /** * @brief Wait until TXE (tx empty) flag is set and BSY (busy) flag unset. */ -static inline void waitSpiTxEnd(spi_dev *spi_d) { +static void waitSpiTxEnd(spi_dev *spi_d) { while (spi_is_tx_empty(spi_d) == 0) { /* nada */ } // wait until TXE=1 while (spi_is_busy(spi_d) != 0) { /* nada */ } // wait until BSY=0 } diff --git a/Marlin/src/HAL/STM32F1/pinsDebug.h b/Marlin/src/HAL/STM32F1/pinsDebug.h index 27f4b6732b..7828479658 100644 --- a/Marlin/src/HAL/STM32F1/pinsDebug.h +++ b/Marlin/src/HAL/STM32F1/pinsDebug.h @@ -54,11 +54,11 @@ extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS]; #define M43_NEVER_TOUCH(Q) (Q >= 9 && Q <= 12) // SERIAL/USB pins PA9(TX) PA10(RX) #endif -static inline int8_t get_pin_mode(pin_t pin) { +static int8_t get_pin_mode(pin_t pin) { return VALID_PIN(pin) ? _GET_MODE(pin) : -1; } -static inline pin_t DIGITAL_PIN_TO_ANALOG_PIN(pin_t pin) { +static pin_t DIGITAL_PIN_TO_ANALOG_PIN(pin_t pin) { if (!VALID_PIN(pin)) return -1; int8_t adc_channel = int8_t(PIN_MAP[pin].adc_channel); #ifdef NUM_ANALOG_INPUTS @@ -67,7 +67,7 @@ static inline pin_t DIGITAL_PIN_TO_ANALOG_PIN(pin_t pin) { return pin_t(adc_channel); } -static inline bool IS_ANALOG(pin_t pin) { +static bool IS_ANALOG(pin_t pin) { if (!VALID_PIN(pin)) return false; if (PIN_MAP[pin].adc_channel != ADCx) { #ifdef NUM_ANALOG_INPUTS @@ -78,11 +78,11 @@ static inline bool IS_ANALOG(pin_t pin) { return false; } -static inline bool GET_PINMODE(const pin_t pin) { +static bool GET_PINMODE(const pin_t pin) { return VALID_PIN(pin) && !IS_INPUT(pin); } -static inline bool GET_ARRAY_IS_DIGITAL(const int16_t array_pin) { +static bool GET_ARRAY_IS_DIGITAL(const int16_t array_pin) { const pin_t pin = GET_ARRAY_PIN(array_pin); return (!IS_ANALOG(pin) #ifdef NUM_ANALOG_INPUTS @@ -93,7 +93,7 @@ static inline bool GET_ARRAY_IS_DIGITAL(const int16_t array_pin) { #include "../../inc/MarlinConfig.h" // Allow pins/pins.h to set density -static inline void pwm_details(const pin_t pin) { +static void pwm_details(const pin_t pin) { if (PWM_PIN(pin)) { timer_dev * const tdev = PIN_MAP[pin].timer_device; const uint8_t channel = PIN_MAP[pin].timer_channel; @@ -113,7 +113,7 @@ static inline void pwm_details(const pin_t pin) { } } -static inline void print_port(pin_t pin) { +static void print_port(pin_t pin) { const char port = 'A' + char(pin >> 4); // pin div 16 const int16_t gbit = PIN_MAP[pin].gpio_bit; char buffer[8]; diff --git a/Marlin/src/HAL/STM32F1/tft/xpt2046.h b/Marlin/src/HAL/STM32F1/tft/xpt2046.h index aba0799e44..7c456cf00e 100644 --- a/Marlin/src/HAL/STM32F1/tft/xpt2046.h +++ b/Marlin/src/HAL/STM32F1/tft/xpt2046.h @@ -65,8 +65,8 @@ private: static uint16_t getRawData(const XPTCoordinate coordinate); static bool isTouched(); - static inline void DataTransferBegin() { WRITE(TOUCH_CS_PIN, LOW); }; - static inline void DataTransferEnd() { WRITE(TOUCH_CS_PIN, HIGH); }; + static void DataTransferBegin() { WRITE(TOUCH_CS_PIN, LOW); }; + static void DataTransferEnd() { WRITE(TOUCH_CS_PIN, HIGH); }; #if ENABLED(TOUCH_BUTTONS_HW_SPI) static uint16_t HardwareIO(uint16_t data); #endif diff --git a/Marlin/src/HAL/shared/eeprom_api.h b/Marlin/src/HAL/shared/eeprom_api.h index 1f38639930..cd744f82dc 100644 --- a/Marlin/src/HAL/shared/eeprom_api.h +++ b/Marlin/src/HAL/shared/eeprom_api.h @@ -49,7 +49,7 @@ public: // Write one or more bytes of data // Return 'true' on write error - static inline bool write_data(const int pos, const uint8_t *value, const size_t size=sizeof(uint8_t)) { + static bool write_data(const int pos, const uint8_t *value, const size_t size=sizeof(uint8_t)) { int data_pos = pos; uint16_t crc = 0; return write_data(data_pos, value, size, &crc); @@ -57,11 +57,11 @@ public: // Write a single byte of data // Return 'true' on write error - static inline bool write_data(const int pos, const uint8_t value) { return write_data(pos, &value); } + static bool write_data(const int pos, const uint8_t value) { return write_data(pos, &value); } // Read one or more bytes of data // Return 'true' on read error - static inline bool read_data(const int pos, uint8_t *value, const size_t size=1) { + static bool read_data(const int pos, uint8_t *value, const size_t size=1) { int data_pos = pos; uint16_t crc = 0; return read_data(data_pos, value, size, &crc); diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h index 62675d1319..34fc3bc410 100644 --- a/Marlin/src/core/macros.h +++ b/Marlin/src/core/macros.h @@ -131,13 +131,13 @@ #ifdef __cplusplus // C++11 solution that is standards compliant. - template static inline constexpr void NOLESS(V& v, const N n) { + template static constexpr void NOLESS(V& v, const N n) { if (n > v) v = n; } - template static inline constexpr void NOMORE(V& v, const N n) { + template static constexpr void NOMORE(V& v, const N n) { if (n < v) v = n; } - template static inline constexpr void LIMIT(V& v, const N1 n1, const N2 n2) { + template static constexpr void LIMIT(V& v, const N1 n1, const N2 n2) { if (n1 > v) v = n1; else if (n2 < v) v = n2; } @@ -366,7 +366,7 @@ #undef ABS #ifdef __cplusplus - template static inline constexpr const T ABS(const T v) { return v >= 0 ? v : -v; } + template static constexpr const T ABS(const T v) { return v >= 0 ? v : -v; } #else #define ABS(a) ({__typeof__(a) _a = (a); _a >= 0 ? _a : -_a;}) #endif @@ -409,14 +409,14 @@ extern "C++" { // C++11 solution that is standards compliant. Return type is deduced automatically - template static inline constexpr auto _MIN(const L lhs, const R rhs) -> decltype(lhs + rhs) { + template static constexpr auto _MIN(const L lhs, const R rhs) -> decltype(lhs + rhs) { return lhs < rhs ? lhs : rhs; } - template static inline constexpr auto _MAX(const L lhs, const R rhs) -> decltype(lhs + rhs) { + template static constexpr auto _MAX(const L lhs, const R rhs) -> decltype(lhs + rhs) { return lhs > rhs ? lhs : rhs; } - template static inline constexpr const T _MIN(T V, Ts... Vs) { return _MIN(V, _MIN(Vs...)); } - template static inline constexpr const T _MAX(T V, Ts... Vs) { return _MAX(V, _MAX(Vs...)); } + template static constexpr const T _MIN(T V, Ts... Vs) { return _MIN(V, _MIN(Vs...)); } + template static constexpr const T _MAX(T V, Ts... Vs) { return _MAX(V, _MAX(Vs...)); } } diff --git a/Marlin/src/core/serial_hook.h b/Marlin/src/core/serial_hook.h index 2019b389e4..9b9fa8fa38 100644 --- a/Marlin/src/core/serial_hook.h +++ b/Marlin/src/core/serial_hook.h @@ -37,7 +37,7 @@ public: inline constexpr bool enabled(const SerialMask PortMask) const { return mask & PortMask.mask; } inline constexpr SerialMask combine(const SerialMask other) const { return SerialMask(mask | other.mask); } inline constexpr SerialMask operator<< (const int offset) const { return SerialMask(mask << offset); } - static inline SerialMask from(const serial_index_t index) { + static SerialMask from(const serial_index_t index) { if (index.valid()) return SerialMask(_BV(index.index)); return SerialMask(0); // A invalid index mean no output } diff --git a/Marlin/src/feature/babystep.h b/Marlin/src/feature/babystep.h index f8037678ca..5693afb4fc 100644 --- a/Marlin/src/feature/babystep.h +++ b/Marlin/src/feature/babystep.h @@ -54,7 +54,7 @@ public: #if ENABLED(BABYSTEP_DISPLAY_TOTAL) static int16_t axis_total[BS_TOTAL_IND(Z_AXIS) + 1]; // Total babysteps since G28 - static inline void reset_total(const AxisEnum axis) { + static void reset_total(const AxisEnum axis) { if (TERN1(BABYSTEP_XY, axis == Z_AXIS)) axis_total[BS_TOTAL_IND(axis)] = 0; } @@ -63,7 +63,7 @@ public: static void add_steps(const AxisEnum axis, const int16_t distance); static void add_mm(const AxisEnum axis, const_float_t mm); - static inline bool has_steps() { + static bool has_steps() { return steps[BS_AXIS_IND(X_AXIS)] || steps[BS_AXIS_IND(Y_AXIS)] || steps[BS_AXIS_IND(Z_AXIS)]; } @@ -71,7 +71,7 @@ public: // Called by the Temperature or Stepper ISR to // apply accumulated babysteps to the axes. // - static inline void task() { + static void task() { LOOP_LE_N(i, BS_AXIS_IND(Z_AXIS)) step_axis(BS_AXIS(i)); } diff --git a/Marlin/src/feature/backlash.h b/Marlin/src/feature/backlash.h index 4d4e294038..17504cc781 100644 --- a/Marlin/src/feature/backlash.h +++ b/Marlin/src/feature/backlash.h @@ -35,8 +35,8 @@ public: static float smoothing_mm; #endif - static inline void set_correction(const_float_t v) { correction = _MAX(0, _MIN(1.0, v)) * all_on; } - static inline float get_correction() { return float(ui8_to_percent(correction)) / 100.0f; } + static void set_correction(const_float_t v) { correction = _MAX(0, _MIN(1.0, v)) * all_on; } + static float get_correction() { return float(ui8_to_percent(correction)) / 100.0f; } #else static constexpr uint8_t correction = (BACKLASH_CORRECTION) * 0xFF; static const xyz_float_t distance_mm; @@ -53,7 +53,7 @@ public: static void measure_with_probe(); #endif - static inline float get_measurement(const AxisEnum a) { + static float get_measurement(const AxisEnum a) { UNUSED(a); // Return the measurement averaged over all readings return TERN(MEASURE_BACKLASH_WHEN_PROBING @@ -62,12 +62,12 @@ public: ); } - static inline bool has_measurement(const AxisEnum a) { + static bool has_measurement(const AxisEnum a) { UNUSED(a); return TERN0(MEASURE_BACKLASH_WHEN_PROBING, measured_count[a] > 0); } - static inline bool has_any_measurement() { + static bool has_any_measurement() { return has_measurement(X_AXIS) || has_measurement(Y_AXIS) || has_measurement(Z_AXIS); } diff --git a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h index cc54695771..06fae16c21 100644 --- a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h +++ b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h @@ -58,7 +58,7 @@ public: static void set_z(const int8_t px, const int8_t py, const_float_t z) { z_values[px][py] = z; } - static inline void zigzag(const int8_t index, int8_t &px, int8_t &py) { + static void zigzag(const int8_t index, int8_t &px, int8_t &py) { px = index % (GRID_MAX_POINTS_X); py = index / (GRID_MAX_POINTS_X); if (py & 1) px = (GRID_MAX_POINTS_X) - 1 - px; // Zig zag @@ -78,10 +78,10 @@ public: int8_t cy = (y - (MESH_MIN_Y)) * RECIPROCAL(MESH_Y_DIST); return constrain(cy, 0, GRID_MAX_CELLS_Y - 1); } - static inline xy_int8_t cell_indexes(const_float_t x, const_float_t y) { + static xy_int8_t cell_indexes(const_float_t x, const_float_t y) { return { cell_index_x(x), cell_index_y(y) }; } - static inline xy_int8_t cell_indexes(const xy_pos_t &xy) { return cell_indexes(xy.x, xy.y); } + static xy_int8_t cell_indexes(const xy_pos_t &xy) { return cell_indexes(xy.x, xy.y); } static int8_t probe_index_x(const_float_t x) { int8_t px = (x - (MESH_MIN_X) + 0.5f * (MESH_X_DIST)) * RECIPROCAL(MESH_X_DIST); @@ -91,10 +91,10 @@ public: int8_t py = (y - (MESH_MIN_Y) + 0.5f * (MESH_Y_DIST)) * RECIPROCAL(MESH_Y_DIST); return WITHIN(py, 0, (GRID_MAX_POINTS_Y) - 1) ? py : -1; } - static inline xy_int8_t probe_indexes(const_float_t x, const_float_t y) { + static xy_int8_t probe_indexes(const_float_t x, const_float_t y) { return { probe_index_x(x), probe_index_y(y) }; } - static inline xy_int8_t probe_indexes(const xy_pos_t &xy) { return probe_indexes(xy.x, xy.y); } + static xy_int8_t probe_indexes(const xy_pos_t &xy) { return probe_indexes(xy.x, xy.y); } static float calc_z0(const_float_t a0, const_float_t a1, const_float_t z1, const_float_t a2, const_float_t z2) { const float delta_z = (z2 - z1) / (a2 - a1), diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.h b/Marlin/src/feature/bedlevel/ubl/ubl.h index ffabadd990..73581504b7 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.h +++ b/Marlin/src/feature/bedlevel/ubl/ubl.h @@ -80,7 +80,7 @@ private: static void tilt_mesh_based_on_3pts(const_float_t z1, const_float_t z2, const_float_t z3); static void tilt_mesh_based_on_probed_grid(const bool do_ubl_mesh_map); static bool smart_fill_one(const uint8_t x, const uint8_t y, const int8_t xdir, const int8_t ydir); - static inline bool smart_fill_one(const xy_uint8_t &pos, const xy_uint8_t &dir) { + static bool smart_fill_one(const xy_uint8_t &pos, const xy_uint8_t &dir) { return smart_fill_one(pos.x, pos.y, dir.x, dir.y); } static void smart_fill_mesh(); @@ -124,7 +124,7 @@ public: static bool lcd_map_control; static void steppers_were_disabled(); #else - static inline void steppers_were_disabled() {} + static void steppers_were_disabled() {} #endif static volatile int16_t encoder_diff; // Volatile because buttons may change it at interrupt time @@ -157,10 +157,10 @@ public: return constrain(cell_index_y_raw(y), 0, GRID_MAX_CELLS_Y - 1); } - static inline xy_int8_t cell_indexes(const_float_t x, const_float_t y) { + static xy_int8_t cell_indexes(const_float_t x, const_float_t y) { return { cell_index_x(x), cell_index_y(y) }; } - static inline xy_int8_t cell_indexes(const xy_pos_t &xy) { return cell_indexes(xy.x, xy.y); } + static xy_int8_t cell_indexes(const xy_pos_t &xy) { return cell_indexes(xy.x, xy.y); } static int8_t closest_x_index(const_float_t x) { const int8_t px = (x - (MESH_MIN_X) + (MESH_X_DIST) * 0.5) * RECIPROCAL(MESH_X_DIST); @@ -170,7 +170,7 @@ public: const int8_t py = (y - (MESH_MIN_Y) + (MESH_Y_DIST) * 0.5) * RECIPROCAL(MESH_Y_DIST); return WITHIN(py, 0, (GRID_MAX_POINTS_Y) - 1) ? py : -1; } - static inline xy_int8_t closest_indexes(const xy_pos_t &xy) { + static xy_int8_t closest_indexes(const xy_pos_t &xy) { return { closest_x_index(xy.x), closest_y_index(xy.y) }; } @@ -203,7 +203,7 @@ public: * z_correction_for_x_on_horizontal_mesh_line is an optimization for * the case where the printer is making a vertical line that only crosses horizontal mesh lines. */ - static inline float z_correction_for_x_on_horizontal_mesh_line(const_float_t rx0, const int x1_i, const int yi) { + static float z_correction_for_x_on_horizontal_mesh_line(const_float_t rx0, const int x1_i, const int yi) { if (!WITHIN(x1_i, 0, (GRID_MAX_POINTS_X) - 1) || !WITHIN(yi, 0, (GRID_MAX_POINTS_Y) - 1)) { if (DEBUGGING(LEVELING)) { @@ -226,7 +226,7 @@ public: // // See comments above for z_correction_for_x_on_horizontal_mesh_line // - static inline float z_correction_for_y_on_vertical_mesh_line(const_float_t ry0, const int xi, const int y1_i) { + static float z_correction_for_y_on_vertical_mesh_line(const_float_t ry0, const int xi, const int y1_i) { if (!WITHIN(xi, 0, (GRID_MAX_POINTS_X) - 1) || !WITHIN(y1_i, 0, (GRID_MAX_POINTS_Y) - 1)) { if (DEBUGGING(LEVELING)) { @@ -285,12 +285,12 @@ public: return z0; } - static inline float get_z_correction(const xy_pos_t &pos) { return get_z_correction(pos.x, pos.y); } + static float get_z_correction(const xy_pos_t &pos) { return get_z_correction(pos.x, pos.y); } - static inline float mesh_index_to_xpos(const uint8_t i) { + static float mesh_index_to_xpos(const uint8_t i) { return i < (GRID_MAX_POINTS_X) ? pgm_read_float(&_mesh_index_to_xpos[i]) : MESH_MIN_X + i * (MESH_X_DIST); } - static inline float mesh_index_to_ypos(const uint8_t i) { + static float mesh_index_to_ypos(const uint8_t i) { return i < (GRID_MAX_POINTS_Y) ? pgm_read_float(&_mesh_index_to_ypos[i]) : MESH_MIN_Y + i * (MESH_Y_DIST); } @@ -300,7 +300,7 @@ public: static void line_to_destination_cartesian(const_feedRate_t scaled_fr_mm_s, const uint8_t e); #endif - static inline bool mesh_is_valid() { + static bool mesh_is_valid() { GRID_LOOP(x, y) if (isnan(z_values[x][y])) return false; return true; } diff --git a/Marlin/src/feature/bltouch.h b/Marlin/src/feature/bltouch.h index ae3ab66300..fa857bb96a 100644 --- a/Marlin/src/feature/bltouch.h +++ b/Marlin/src/feature/bltouch.h @@ -76,7 +76,7 @@ public: static constexpr bool high_speed_mode = false; #endif - static inline float z_extra_clearance() { return high_speed_mode ? 7 : 0; } + static float z_extra_clearance() { return high_speed_mode ? 7 : 0; } // DEPLOY and STOW are wrapped for error handling - these are used by homing and by probing static bool deploy() { return deploy_proc(); } diff --git a/Marlin/src/feature/cancel_object.h b/Marlin/src/feature/cancel_object.h index 1d2d77f203..62548a3719 100644 --- a/Marlin/src/feature/cancel_object.h +++ b/Marlin/src/feature/cancel_object.h @@ -32,10 +32,10 @@ public: static void cancel_object(const int8_t obj); static void uncancel_object(const int8_t obj); static void report(); - static inline bool is_canceled(const int8_t obj) { return TEST(canceled, obj); } - static inline void clear_active_object() { set_active_object(-1); } - static inline void cancel_active_object() { cancel_object(active_object); } - static inline void reset() { canceled = 0x0000; object_count = 0; clear_active_object(); } + static bool is_canceled(const int8_t obj) { return TEST(canceled, obj); } + static void clear_active_object() { set_active_object(-1); } + static void cancel_active_object() { cancel_object(active_object); } + static void reset() { canceled = 0x0000; object_count = 0; clear_active_object(); } }; extern CancelObject cancelable; diff --git a/Marlin/src/feature/caselight.h b/Marlin/src/feature/caselight.h index b2e82f9b83..2e85b59ef9 100644 --- a/Marlin/src/feature/caselight.h +++ b/Marlin/src/feature/caselight.h @@ -49,8 +49,8 @@ public: } static void update(const bool sflag); - static inline void update_brightness() { update(false); } - static inline void update_enabled() { update(true); } + static void update_brightness() { update(false); } + static void update_enabled() { update(true); } #if ENABLED(CASE_LIGHT_IS_COLOR_LED) private: diff --git a/Marlin/src/feature/controllerfan.h b/Marlin/src/feature/controllerfan.h index 55f2d5cfc7..55eb2359b0 100644 --- a/Marlin/src/feature/controllerfan.h +++ b/Marlin/src/feature/controllerfan.h @@ -60,9 +60,9 @@ class ControllerFan { #else static const controllerFan_settings_t &settings; #endif - static inline bool state() { return speed > 0; } - static inline void init() { reset(); } - static inline void reset() { TERN_(CONTROLLER_FAN_EDITABLE, settings = controllerFan_defaults); } + static bool state() { return speed > 0; } + static void init() { reset(); } + static void reset() { TERN_(CONTROLLER_FAN_EDITABLE, settings = controllerFan_defaults); } static void setup(); static void update(); }; diff --git a/Marlin/src/feature/fancheck.h b/Marlin/src/feature/fancheck.h index 6e8038b498..c8665a0e96 100644 --- a/Marlin/src/feature/fancheck.h +++ b/Marlin/src/feature/fancheck.h @@ -56,7 +56,7 @@ class FanCheck { static uint8_t rps[TACHO_COUNT]; static TachoError error; - static inline void report_speed_error(uint8_t fan); + static void report_speed_error(uint8_t fan); public: @@ -67,11 +67,11 @@ class FanCheck { static void compute_speed(uint16_t elapsedTime); static void print_fan_states(); #if HAS_PWMFANCHECK - static inline void toggle_measuring() { measuring = !measuring; } - static inline bool is_measuring() { return measuring; } + static void toggle_measuring() { measuring = !measuring; } + static bool is_measuring() { return measuring; } #endif - static inline void check_deferred_error() { + static void check_deferred_error() { if (error == TachoError::DETECTED) { error = TachoError::REPORTED; TERN(PARK_HEAD_ON_PAUSE, queue.inject(F("M125")), kill(GET_TEXT_F(MSG_FAN_SPEED_FAULT))); diff --git a/Marlin/src/feature/filwidth.h b/Marlin/src/feature/filwidth.h index e63d3d719f..e234380e98 100644 --- a/Marlin/src/feature/filwidth.h +++ b/Marlin/src/feature/filwidth.h @@ -41,9 +41,9 @@ public: FilamentWidthSensor() { init(); } static void init(); - static inline void enable(const bool ena) { enabled = ena; } + static void enable(const bool ena) { enabled = ena; } - static inline void set_delay_cm(const uint8_t cm) { + static void set_delay_cm(const uint8_t cm) { meas_delay_cm = _MIN(cm, MAX_MEASUREMENT_DELAY); } @@ -67,18 +67,18 @@ public: } // Convert raw measurement to mm - static inline float raw_to_mm(const uint16_t v) { return v * 5.0f * RECIPROCAL(float(MAX_RAW_THERMISTOR_VALUE)); } - static inline float raw_to_mm() { return raw_to_mm(raw); } + static float raw_to_mm(const uint16_t v) { return v * 5.0f * RECIPROCAL(float(MAX_RAW_THERMISTOR_VALUE)); } + static float raw_to_mm() { return raw_to_mm(raw); } // A scaled reading is ready // Divide to get to 0-16384 range since we used 1/128 IIR filter approach - static inline void reading_ready() { raw = accum >> 10; } + static void reading_ready() { raw = accum >> 10; } // Update mm from the raw measurement - static inline void update_measured_mm() { measured_mm = raw_to_mm(); } + static void update_measured_mm() { measured_mm = raw_to_mm(); } // Update ring buffer used to delay filament measurements - static inline void advance_e(const_float_t e_move) { + static void advance_e(const_float_t e_move) { // Increment counters with the E distance e_count += e_move; @@ -106,7 +106,7 @@ public: } // Dynamically set the volumetric multiplier based on the delayed width measurement. - static inline void update_volumetric() { + static void update_volumetric() { if (enabled) { int8_t read_index = index_r - meas_delay_cm; if (read_index < 0) read_index += MMD_CM; // Loop around buffer if needed diff --git a/Marlin/src/feature/host_actions.h b/Marlin/src/feature/host_actions.h index 45379afc29..78a7821eba 100644 --- a/Marlin/src/feature/host_actions.h +++ b/Marlin/src/feature/host_actions.h @@ -97,7 +97,7 @@ class HostUI { static void handle_response(const uint8_t response); static void notify_P(PGM_P const message); - static inline void notify(FSTR_P const fmsg) { notify_P(FTOP(fmsg)); } + static void notify(FSTR_P const fmsg) { notify_P(FTOP(fmsg)); } static void notify(const char * const message); static void prompt_begin(const PromptReason reason, FSTR_P const fstr, const char extra_char='\0'); @@ -105,7 +105,7 @@ class HostUI { static void prompt_end(); static void prompt_do(const PromptReason reason, FSTR_P const pstr, FSTR_P const btn1=nullptr, FSTR_P const btn2=nullptr); static void prompt_do(const PromptReason reason, FSTR_P const pstr, const char extra_char, FSTR_P const btn1=nullptr, FSTR_P const btn2=nullptr); - static inline void prompt_open(const PromptReason reason, FSTR_P const pstr, FSTR_P const btn1=nullptr, FSTR_P const btn2=nullptr) { + static void prompt_open(const PromptReason reason, FSTR_P const pstr, FSTR_P const btn1=nullptr, FSTR_P const btn2=nullptr) { if (host_prompt_reason == PROMPT_NOT_DEFINED) prompt_do(reason, pstr, btn1, btn2); } diff --git a/Marlin/src/feature/leds/leds.h b/Marlin/src/feature/leds/leds.h index 74964b51a8..7110a9ba82 100644 --- a/Marlin/src/feature/leds/leds.h +++ b/Marlin/src/feature/leds/leds.h @@ -118,7 +118,7 @@ public: OPTARG(NEOPIXEL_IS_SEQUENTIAL, bool isSequence=false) ); - static inline void set_color(uint8_t r, uint8_t g, uint8_t b + static void set_color(uint8_t r, uint8_t g, uint8_t b OPTARG(HAS_WHITE_LED, uint8_t w=0) OPTARG(NEOPIXEL_LED, uint8_t i=NEOPIXEL_BRIGHTNESS) OPTARG(NEOPIXEL_IS_SEQUENTIAL, bool isSequence=false) @@ -126,23 +126,23 @@ public: set_color(LEDColor(r, g, b OPTARG(HAS_WHITE_LED, w) OPTARG(NEOPIXEL_LED, i)) OPTARG(NEOPIXEL_IS_SEQUENTIAL, isSequence)); } - static inline void set_off() { set_color(LEDColorOff()); } - static inline void set_green() { set_color(LEDColorGreen()); } - static inline void set_white() { set_color(LEDColorWhite()); } + static void set_off() { set_color(LEDColorOff()); } + static void set_green() { set_color(LEDColorGreen()); } + static void set_white() { set_color(LEDColorWhite()); } #if ENABLED(LED_COLOR_PRESETS) static const LEDColor defaultLEDColor; - static inline void set_default() { set_color(defaultLEDColor); } - static inline void set_red() { set_color(LEDColorRed()); } - static inline void set_orange() { set_color(LEDColorOrange()); } - static inline void set_yellow() { set_color(LEDColorYellow()); } - static inline void set_blue() { set_color(LEDColorBlue()); } - static inline void set_indigo() { set_color(LEDColorIndigo()); } - static inline void set_violet() { set_color(LEDColorViolet()); } + static void set_default() { set_color(defaultLEDColor); } + static void set_red() { set_color(LEDColorRed()); } + static void set_orange() { set_color(LEDColorOrange()); } + static void set_yellow() { set_color(LEDColorYellow()); } + static void set_blue() { set_color(LEDColorBlue()); } + static void set_indigo() { set_color(LEDColorIndigo()); } + static void set_violet() { set_color(LEDColorViolet()); } #endif #if ENABLED(PRINTER_EVENT_LEDS) - static inline LEDColor get_color() { return lights_on ? color : LEDColorOff(); } + static LEDColor get_color() { return lights_on ? color : LEDColorOff(); } #endif #if ANY(LED_CONTROL_MENU, PRINTER_EVENT_LEDS, CASE_LIGHT_IS_COLOR_LED) @@ -154,14 +154,14 @@ public: static void toggle(); // swap "off" with color #endif #if EITHER(LED_CONTROL_MENU, CASE_LIGHT_USE_RGB_LED) - static inline void update() { set_color(color); } + static void update() { set_color(color); } #endif #ifdef LED_BACKLIGHT_TIMEOUT private: static millis_t led_off_time; public: - static inline void reset_timeout(const millis_t &ms) { + static void reset_timeout(const millis_t &ms) { led_off_time = ms + LED_BACKLIGHT_TIMEOUT; if (!lights_on) update(); } @@ -181,7 +181,7 @@ extern LEDLights leds; static void set_color(const LEDColor &color); - static inline void set_color(uint8_t r, uint8_t g, uint8_t b + static void set_color(uint8_t r, uint8_t g, uint8_t b OPTARG(HAS_WHITE_LED, uint8_t w=0) OPTARG(NEOPIXEL_LED, uint8_t i=NEOPIXEL_BRIGHTNESS) ) { @@ -191,26 +191,26 @@ extern LEDLights leds; )); } - static inline void set_off() { set_color(LEDColorOff()); } - static inline void set_green() { set_color(LEDColorGreen()); } - static inline void set_white() { set_color(LEDColorWhite()); } + static void set_off() { set_color(LEDColorOff()); } + static void set_green() { set_color(LEDColorGreen()); } + static void set_white() { set_color(LEDColorWhite()); } #if ENABLED(NEO2_COLOR_PRESETS) static const LEDColor defaultLEDColor; - static inline void set_default() { set_color(defaultLEDColor); } - static inline void set_red() { set_color(LEDColorRed()); } - static inline void set_orange() { set_color(LEDColorOrange()); } - static inline void set_yellow() { set_color(LEDColorYellow()); } - static inline void set_blue() { set_color(LEDColorBlue()); } - static inline void set_indigo() { set_color(LEDColorIndigo()); } - static inline void set_violet() { set_color(LEDColorViolet()); } + static void set_default() { set_color(defaultLEDColor); } + static void set_red() { set_color(LEDColorRed()); } + static void set_orange() { set_color(LEDColorOrange()); } + static void set_yellow() { set_color(LEDColorYellow()); } + static void set_blue() { set_color(LEDColorBlue()); } + static void set_indigo() { set_color(LEDColorIndigo()); } + static void set_violet() { set_color(LEDColorViolet()); } #endif #if ENABLED(NEOPIXEL2_SEPARATE) static LEDColor color; // last non-off color static bool lights_on; // the last set color was "on" static void toggle(); // swap "off" with color - static inline void update() { set_color(color); } + static void update() { set_color(color); } #endif }; diff --git a/Marlin/src/feature/leds/neopixel.h b/Marlin/src/feature/leds/neopixel.h index 814ae9c8d8..ae75316b8f 100644 --- a/Marlin/src/feature/leds/neopixel.h +++ b/Marlin/src/feature/leds/neopixel.h @@ -94,12 +94,12 @@ public: static void reset_background_color(); #endif - static inline void begin() { + static void begin() { adaneo1.begin(); TERN_(CONJOINED_NEOPIXEL, adaneo2.begin()); } - static inline void set_pixel_color(const uint16_t n, const uint32_t c) { + static void set_pixel_color(const uint16_t n, const uint32_t c) { #if ENABLED(NEOPIXEL2_INSERIES) if (n >= NEOPIXEL_PIXELS) adaneo2.setPixelColor(n - (NEOPIXEL_PIXELS), c); else adaneo1.setPixelColor(n, c); @@ -109,12 +109,12 @@ public: #endif } - static inline void set_brightness(const uint8_t b) { + static void set_brightness(const uint8_t b) { adaneo1.setBrightness(b); TERN_(CONJOINED_NEOPIXEL, adaneo2.setBrightness(b)); } - static inline void show() { + static void show() { // Some platforms cannot maintain PWM output when NeoPixel disables interrupts for long durations. TERN_(HAS_PAUSE_SERVO_OUTPUT, PAUSE_SERVO_OUTPUT()); adaneo1.show(); @@ -130,11 +130,11 @@ public: } // Accessors - static inline uint16_t pixels() { return adaneo1.numPixels() * TERN1(NEOPIXEL2_INSERIES, 2); } + static uint16_t pixels() { return adaneo1.numPixels() * TERN1(NEOPIXEL2_INSERIES, 2); } - static inline uint8_t brightness() { return adaneo1.getBrightness(); } + static uint8_t brightness() { return adaneo1.getBrightness(); } - static inline uint32_t Color(uint8_t r, uint8_t g, uint8_t b OPTARG(HAS_WHITE_LED, uint8_t w)) { + static uint32_t Color(uint8_t r, uint8_t g, uint8_t b OPTARG(HAS_WHITE_LED, uint8_t w)) { return adaneo1.Color(r, g, b OPTARG(HAS_WHITE_LED, w)); } }; @@ -165,18 +165,18 @@ extern Marlin_NeoPixel neo; static void set_color(const uint32_t c); - static inline void begin() { adaneo.begin(); } - static inline void set_pixel_color(const uint16_t n, const uint32_t c) { adaneo.setPixelColor(n, c); } - static inline void set_brightness(const uint8_t b) { adaneo.setBrightness(b); } - static inline void show() { + static void begin() { adaneo.begin(); } + static void set_pixel_color(const uint16_t n, const uint32_t c) { adaneo.setPixelColor(n, c); } + static void set_brightness(const uint8_t b) { adaneo.setBrightness(b); } + static void show() { adaneo.show(); adaneo.setPin(NEOPIXEL2_PIN); } // Accessors - static inline uint16_t pixels() { return adaneo.numPixels();} - static inline uint8_t brightness() { return adaneo.getBrightness(); } - static inline uint32_t Color(uint8_t r, uint8_t g, uint8_t b OPTARG(HAS_WHITE_LED2, uint8_t w)) { + static uint16_t pixels() { return adaneo.numPixels();} + static uint8_t brightness() { return adaneo.getBrightness(); } + static uint32_t Color(uint8_t r, uint8_t g, uint8_t b OPTARG(HAS_WHITE_LED2, uint8_t w)) { return adaneo.Color(r, g, b OPTARG(HAS_WHITE_LED2, w)); } }; diff --git a/Marlin/src/feature/leds/printer_event_leds.h b/Marlin/src/feature/leds/printer_event_leds.h index b2201433d8..2a4342e8f5 100644 --- a/Marlin/src/feature/leds/printer_event_leds.h +++ b/Marlin/src/feature/leds/printer_event_leds.h @@ -36,32 +36,32 @@ private: static bool leds_off_after_print; #endif - static inline void set_done() { TERN(LED_COLOR_PRESETS, leds.set_default(), leds.set_off()); } + static void set_done() { TERN(LED_COLOR_PRESETS, leds.set_default(), leds.set_off()); } public: #if HAS_TEMP_HOTEND - static inline LEDColor onHotendHeatingStart() { old_intensity = 0; return leds.get_color(); } + static LEDColor onHotendHeatingStart() { old_intensity = 0; return leds.get_color(); } static void onHotendHeating(const celsius_t start, const celsius_t current, const celsius_t target); #endif #if HAS_HEATED_BED - static inline LEDColor onBedHeatingStart() { old_intensity = 127; return leds.get_color(); } + static LEDColor onBedHeatingStart() { old_intensity = 127; return leds.get_color(); } static void onBedHeating(const celsius_t start, const celsius_t current, const celsius_t target); #endif #if HAS_HEATED_CHAMBER - static inline LEDColor onChamberHeatingStart() { old_intensity = 127; return leds.get_color(); } + static LEDColor onChamberHeatingStart() { old_intensity = 127; return leds.get_color(); } static void onChamberHeating(const celsius_t start, const celsius_t current, const celsius_t target); #endif #if HAS_TEMP_HOTEND || HAS_HEATED_BED || HAS_HEATED_CHAMBER - static inline void onHeatingDone() { leds.set_white(); } - static inline void onPidTuningDone(LEDColor c) { leds.set_color(c); } + static void onHeatingDone() { leds.set_white(); } + static void onPidTuningDone(LEDColor c) { leds.set_color(c); } #endif #if ENABLED(SDSUPPORT) - static inline void onPrintCompleted() { + static void onPrintCompleted() { leds.set_green(); #if HAS_LEDS_OFF_FLAG leds_off_after_print = true; @@ -71,7 +71,7 @@ public: #endif } - static inline void onResumeAfterWait() { + static void onResumeAfterWait() { #if HAS_LEDS_OFF_FLAG if (leds_off_after_print) { set_done(); diff --git a/Marlin/src/feature/max7219.h b/Marlin/src/feature/max7219.h index c25fef1730..809bda6d4b 100644 --- a/Marlin/src/feature/max7219.h +++ b/Marlin/src/feature/max7219.h @@ -88,13 +88,13 @@ public: static void send(const uint8_t reg, const uint8_t data); // Refresh all units - static inline void refresh() { for (uint8_t i = 0; i < 8; i++) refresh_line(i); } + static void refresh() { for (uint8_t i = 0; i < 8; i++) refresh_line(i); } // Suspend / resume updates to the LED unit // Use these methods to speed up multiple changes // or to apply updates from interrupt context. - static inline void suspend() { suspended++; } - static inline void resume() { suspended--; suspended |= 0x80; } + static void suspend() { suspended++; } + static void resume() { suspended--; suspended |= 0x80; } // Update a single native line on all units static void refresh_line(const uint8_t line); diff --git a/Marlin/src/feature/mixing.h b/Marlin/src/feature/mixing.h index f700c7b65b..85d52d69c8 100644 --- a/Marlin/src/feature/mixing.h +++ b/Marlin/src/feature/mixing.h @@ -126,7 +126,7 @@ class Mixer { static mixer_perc_t mix[MIXING_STEPPERS]; // Scratch array for the Mix in proportion to 100 - static inline void copy_mix_to_color(mixer_comp_t (&tcolor)[MIXING_STEPPERS]) { + static void copy_mix_to_color(mixer_comp_t (&tcolor)[MIXING_STEPPERS]) { // Scale each component to the largest one in terms of COLOR_A_MASK // So the largest component will be COLOR_A_MASK and the other will be in proportion to it const float scale = (COLOR_A_MASK) * RECIPROCAL(_MAX( @@ -145,7 +145,7 @@ class Mixer { #endif } - static inline void update_mix_from_vtool(const uint8_t j=selected_vtool) { + static void update_mix_from_vtool(const uint8_t j=selected_vtool) { float ctot = 0; MIXER_STEPPER_LOOP(i) ctot += color[j][i]; //MIXER_STEPPER_LOOP(i) mix[i] = 100.0f * color[j][i] / ctot; @@ -165,7 +165,7 @@ class Mixer { #if HAS_DUAL_MIXING // Update the virtual tool from an edited mix - static inline void update_vtool_from_mix() { + static void update_vtool_from_mix() { copy_mix_to_color(color[selected_vtool]); TERN_(GRADIENT_MIX, refresh_gradient()); // MIXER_STEPPER_LOOP(i) collector[i] = mix[i]; @@ -182,7 +182,7 @@ class Mixer { // Update the current mix from the gradient for a given Z static void update_gradient_for_z(const_float_t z); static void update_gradient_for_planner_z(); - static inline void gradient_control(const_float_t z) { + static void gradient_control(const_float_t z) { if (gradient.enabled) { if (z >= gradient.end_z) T(gradient.end_vtool); @@ -191,7 +191,7 @@ class Mixer { } } - static inline void update_mix_from_gradient() { + static void update_mix_from_gradient() { float ctot = 0; MIXER_STEPPER_LOOP(i) ctot += gradient.color[i]; MIXER_STEPPER_LOOP(i) mix[i] = (mixer_perc_t)CEIL(100.0f * gradient.color[i] / ctot); diff --git a/Marlin/src/feature/mmu/mmu2.h b/Marlin/src/feature/mmu/mmu2.h index 9574e2217f..7d3d9ec4df 100644 --- a/Marlin/src/feature/mmu/mmu2.h +++ b/Marlin/src/feature/mmu/mmu2.h @@ -43,7 +43,7 @@ public: static void init(); static void reset(); - static inline bool enabled() { return _enabled; } + static bool enabled() { return _enabled; } static void mmu_loop(); static void tool_change(const uint8_t index); static void tool_change(const char *special); @@ -57,10 +57,10 @@ public: static bool eject_filament(const uint8_t index, const bool recover); private: - static inline bool rx_str(FSTR_P fstr); - static inline void tx_str(FSTR_P fstr); - static inline void tx_printf(FSTR_P ffmt, const int argument); - static inline void tx_printf(FSTR_P ffmt, const int argument1, const int argument2); + static bool rx_str(FSTR_P fstr); + static void tx_str(FSTR_P fstr); + static void tx_printf(FSTR_P ffmt, const int argument); + static void tx_printf(FSTR_P ffmt, const int argument1, const int argument2); static void clear_rx_buffer(); static bool rx_ok(); @@ -99,7 +99,7 @@ private: static millis_t prev_request, prev_P0_request; static char rx_buffer[MMU_RX_SIZE], tx_buffer[MMU_TX_SIZE]; - static inline void set_runout_valid(const bool valid) { + static void set_runout_valid(const bool valid) { finda_runout_valid = valid; #if HAS_FILAMENT_SENSOR if (valid) runout.reset(); diff --git a/Marlin/src/feature/power.h b/Marlin/src/feature/power.h index 7f5a97e6df..42c2c84942 100644 --- a/Marlin/src/feature/power.h +++ b/Marlin/src/feature/power.h @@ -40,7 +40,7 @@ class Power { #if ENABLED(AUTO_POWER_CONTROL) && POWER_OFF_DELAY > 0 static void power_off_soon(); #else - static inline void power_off_soon() { power_off(); } + static void power_off_soon() { power_off(); } #endif #if ENABLED(AUTO_POWER_CONTROL) diff --git a/Marlin/src/feature/powerloss.h b/Marlin/src/feature/powerloss.h index 76cb398af2..50abad9222 100644 --- a/Marlin/src/feature/powerloss.h +++ b/Marlin/src/feature/powerloss.h @@ -152,7 +152,7 @@ class PrintJobRecovery { static void init(); static void prepare(); - static inline void setup() { + static void setup() { #if PIN_EXISTS(POWER_LOSS) #if ENABLED(POWER_LOSS_PULLUP) SET_INPUT_PULLUP(POWER_LOSS_PIN); @@ -165,28 +165,28 @@ class PrintJobRecovery { } // Track each command's file offsets - static inline uint32_t command_sdpos() { return sdpos[queue_index_r]; } - static inline void commit_sdpos(const uint8_t index_w) { sdpos[index_w] = cmd_sdpos; } + static uint32_t command_sdpos() { return sdpos[queue_index_r]; } + static void commit_sdpos(const uint8_t index_w) { sdpos[index_w] = cmd_sdpos; } static bool enabled; static void enable(const bool onoff); static void changed(); - static inline bool exists() { return card.jobRecoverFileExists(); } - static inline void open(const bool read) { card.openJobRecoveryFile(read); } - static inline void close() { file.close(); } + static bool exists() { return card.jobRecoverFileExists(); } + static void open(const bool read) { card.openJobRecoveryFile(read); } + static void close() { file.close(); } static void check(); static void resume(); static void purge(); - static inline void cancel() { purge(); IF_DISABLED(NO_SD_AUTOSTART, card.autofile_begin()); } + static void cancel() { purge(); IF_DISABLED(NO_SD_AUTOSTART, card.autofile_begin()); } static void load(); static void save(const bool force=ENABLED(SAVE_EACH_CMD_MODE), const float zraise=POWER_LOSS_ZRAISE, const bool raised=false); #if PIN_EXISTS(POWER_LOSS) - static inline void outage() { + static void outage() { static constexpr uint8_t OUTAGE_THRESHOLD = 3; static uint8_t outage_counter = 0; if (enabled && READ(POWER_LOSS_PIN) == POWER_LOSS_STATE) { @@ -199,14 +199,14 @@ class PrintJobRecovery { #endif // The referenced file exists - static inline bool interrupted_file_exists() { return card.fileExists(info.sd_filename); } + static bool interrupted_file_exists() { return card.fileExists(info.sd_filename); } - static inline bool valid() { return info.valid() && interrupted_file_exists(); } + static bool valid() { return info.valid() && interrupted_file_exists(); } #if ENABLED(DEBUG_POWER_LOSS_RECOVERY) static void debug(FSTR_P const prefix); #else - static inline void debug(FSTR_P const) {} + static void debug(FSTR_P const) {} #endif private: diff --git a/Marlin/src/feature/probe_temp_comp.h b/Marlin/src/feature/probe_temp_comp.h index 4579f2187c..1db7d04e89 100644 --- a/Marlin/src/feature/probe_temp_comp.h +++ b/Marlin/src/feature/probe_temp_comp.h @@ -74,11 +74,11 @@ class ProbeTempComp { static int16_t z_offsets_hotend[PTC_HOTEND_COUNT]; // (µm) #endif - static inline void reset_index() { calib_idx = 0; }; - static inline uint8_t get_index() { return calib_idx; } + static void reset_index() { calib_idx = 0; }; + static uint8_t get_index() { return calib_idx; } static void reset(); static void clear_offsets(const TempSensorID tsi); - static inline void clear_all_offsets() { + static void clear_all_offsets() { TERN_(PTC_PROBE, clear_offsets(TSI_PROBE)); TERN_(PTC_BED, clear_offsets(TSI_BED)); TERN_(PTC_HOTEND, clear_offsets(TSI_EXT)); diff --git a/Marlin/src/feature/repeat.h b/Marlin/src/feature/repeat.h index 0f4d9425b7..fc11e4a9e2 100644 --- a/Marlin/src/feature/repeat.h +++ b/Marlin/src/feature/repeat.h @@ -38,8 +38,8 @@ private: static repeat_marker_t marker[MAX_REPEAT_NESTING]; static uint8_t index; public: - static inline void reset() { index = 0; } - static inline bool is_active() { + static void reset() { index = 0; } + static bool is_active() { LOOP_L_N(i, index) if (marker[i].counter) return true; return false; } diff --git a/Marlin/src/feature/runout.h b/Marlin/src/feature/runout.h index 8065e51555..e74d857a79 100644 --- a/Marlin/src/feature/runout.h +++ b/Marlin/src/feature/runout.h @@ -83,30 +83,30 @@ class TFilamentMonitor : public FilamentMonitorBase { static sensor_t sensor; public: - static inline void setup() { + static void setup() { sensor.setup(); reset(); } - static inline void reset() { + static void reset() { filament_ran_out = false; response.reset(); } // Call this method when filament is present, // so the response can reset its counter. - static inline void filament_present(const uint8_t extruder) { + static void filament_present(const uint8_t extruder) { response.filament_present(extruder); } #if HAS_FILAMENT_RUNOUT_DISTANCE - static inline float& runout_distance() { return response.runout_distance_mm; } - static inline void set_runout_distance(const_float_t mm) { response.runout_distance_mm = mm; } + static float& runout_distance() { return response.runout_distance_mm; } + static void set_runout_distance(const_float_t mm) { response.runout_distance_mm = mm; } #endif // Handle a block completion. RunoutResponseDelayed uses this to // add up the length of filament moved while the filament is out. - static inline void block_completed(const block_t * const b) { + static void block_completed(const block_t * const b) { if (enabled) { response.block_completed(b); sensor.block_completed(b); @@ -114,7 +114,7 @@ class TFilamentMonitor : public FilamentMonitorBase { } // Give the response a chance to update its counter. - static inline void run() { + static void run() { if (enabled && !filament_ran_out && (printingIsActive() || did_pause_print)) { TERN_(HAS_FILAMENT_RUNOUT_DISTANCE, cli()); // Prevent RunoutResponseDelayed::block_completed from accumulating here response.run(); @@ -168,12 +168,12 @@ class FilamentSensorBase { * Called by FilamentSensorSwitch::run when filament is detected. * Called by FilamentSensorEncoder::block_completed when motion is detected. */ - static inline void filament_present(const uint8_t extruder) { + static void filament_present(const uint8_t extruder) { runout.filament_present(extruder); // ...which calls response.filament_present(extruder) } public: - static inline void setup() { + static void setup() { #define _INIT_RUNOUT_PIN(P,S,U,D) do{ if (ENABLED(U)) SET_INPUT_PULLUP(P); else if (ENABLED(D)) SET_INPUT_PULLDOWN(P); else SET_INPUT(P); }while(0) #define INIT_RUNOUT_PIN(N) _INIT_RUNOUT_PIN(FIL_RUNOUT##N##_PIN, FIL_RUNOUT##N##_STATE, FIL_RUNOUT##N##_PULLUP, FIL_RUNOUT##N##_PULLDOWN) #if NUM_RUNOUT_SENSORS >= 1 @@ -205,14 +205,14 @@ class FilamentSensorBase { } // Return a bitmask of runout pin states - static inline uint8_t poll_runout_pins() { + static uint8_t poll_runout_pins() { #define _OR_RUNOUT(N) | (READ(FIL_RUNOUT##N##_PIN) ? _BV((N) - 1) : 0) return (0 REPEAT_1(NUM_RUNOUT_SENSORS, _OR_RUNOUT)); #undef _OR_RUNOUT } // Return a bitmask of runout flag states (1 bits always indicates runout) - static inline uint8_t poll_runout_states() { + static uint8_t poll_runout_states() { return poll_runout_pins() ^ uint8_t(0 #if NUM_RUNOUT_SENSORS >= 1 | (FIL_RUNOUT1_STATE ? 0 : _BV(1 - 1)) @@ -254,7 +254,7 @@ class FilamentSensorBase { private: static uint8_t motion_detected; - static inline void poll_motion_sensor() { + static void poll_motion_sensor() { static uint8_t old_state; const uint8_t new_state = poll_runout_pins(), change = old_state ^ new_state; @@ -273,7 +273,7 @@ class FilamentSensorBase { } public: - static inline void block_completed(const block_t * const b) { + static void block_completed(const block_t * const b) { // If the sensor wheel has moved since the last call to // this method reset the runout counter for the extruder. if (TEST(motion_detected, b->extruder)) @@ -283,7 +283,7 @@ class FilamentSensorBase { motion_detected = 0; } - static inline void run() { poll_motion_sensor(); } + static void run() { poll_motion_sensor(); } }; #else @@ -294,7 +294,7 @@ class FilamentSensorBase { */ class FilamentSensorSwitch : public FilamentSensorBase { private: - static inline bool poll_runout_state(const uint8_t extruder) { + static bool poll_runout_state(const uint8_t extruder) { const uint8_t runout_states = poll_runout_states(); #if MULTI_FILAMENT_SENSOR if ( !TERN0(DUAL_X_CARRIAGE, idex_is_duplicating()) @@ -307,9 +307,9 @@ class FilamentSensorBase { } public: - static inline void block_completed(const block_t * const) {} + static void block_completed(const block_t * const) {} - static inline void run() { + static void run() { LOOP_L_N(s, NUM_RUNOUT_SENSORS) { const bool out = poll_runout_state(s); if (!out) filament_present(s); @@ -341,11 +341,11 @@ class FilamentSensorBase { public: static float runout_distance_mm; - static inline void reset() { + static void reset() { LOOP_L_N(i, NUM_RUNOUT_SENSORS) filament_present(i); } - static inline void run() { + static void run() { #if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG) static millis_t t = 0; const millis_t ms = millis(); @@ -358,17 +358,17 @@ class FilamentSensorBase { #endif } - static inline uint8_t has_run_out() { + static uint8_t has_run_out() { uint8_t runout_flags = 0; LOOP_L_N(i, NUM_RUNOUT_SENSORS) if (runout_mm_countdown[i] < 0) SBI(runout_flags, i); return runout_flags; } - static inline void filament_present(const uint8_t extruder) { + static void filament_present(const uint8_t extruder) { runout_mm_countdown[extruder] = runout_distance_mm; } - static inline void block_completed(const block_t * const b) { + static void block_completed(const block_t * const b) { if (b->steps.x || b->steps.y || b->steps.z || did_pause_print) { // Allow pause purge move to re-trigger runout state // Only trigger on extrusion with XYZ movement to allow filament change and retract/recover. const uint8_t e = b->extruder; @@ -389,23 +389,23 @@ class FilamentSensorBase { static int8_t runout_count[NUM_RUNOUT_SENSORS]; public: - static inline void reset() { + static void reset() { LOOP_L_N(i, NUM_RUNOUT_SENSORS) filament_present(i); } - static inline void run() { + static void run() { LOOP_L_N(i, NUM_RUNOUT_SENSORS) if (runout_count[i] >= 0) runout_count[i]--; } - static inline uint8_t has_run_out() { + static uint8_t has_run_out() { uint8_t runout_flags = 0; LOOP_L_N(i, NUM_RUNOUT_SENSORS) if (runout_count[i] < 0) SBI(runout_flags, i); return runout_flags; } - static inline void block_completed(const block_t * const) { } + static void block_completed(const block_t * const) { } - static inline void filament_present(const uint8_t extruder) { + static void filament_present(const uint8_t extruder) { runout_count[extruder] = runout_threshold; } }; diff --git a/Marlin/src/feature/spindle_laser.h b/Marlin/src/feature/spindle_laser.h index 95d60ae486..7a8cd2c830 100644 --- a/Marlin/src/feature/spindle_laser.h +++ b/Marlin/src/feature/spindle_laser.h @@ -103,12 +103,12 @@ public: static void init(); #if ENABLED(MARLIN_DEV_MODE) - static inline void refresh_frequency() { set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), frequency); } + static void refresh_frequency() { set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), frequency); } #endif // Modifying this function should update everywhere - static inline bool enabled(const cutter_power_t opwr) { return opwr > 0; } - static inline bool enabled() { return enabled(power); } + static bool enabled(const cutter_power_t opwr) { return opwr > 0; } + static bool enabled() { return enabled(power); } static void apply_power(const uint8_t inpow); @@ -124,13 +124,13 @@ public: public: static void set_ocr(const uint8_t ocr); - static inline void ocr_set_power(const uint8_t ocr) { power = ocr; set_ocr(ocr); } + static void ocr_set_power(const uint8_t ocr) { power = ocr; set_ocr(ocr); } static void ocr_off(); /** * Update output for power->OCR translation */ - static inline uint8_t upower_to_ocr(const cutter_power_t upwr) { + static uint8_t upower_to_ocr(const cutter_power_t upwr) { return uint8_t( #if CUTTER_UNIT_IS(PWM255) upwr @@ -145,11 +145,11 @@ public: /** * Correct power to configured range */ - static inline cutter_power_t power_to_range(const cutter_power_t pwr) { + static cutter_power_t power_to_range(const cutter_power_t pwr) { return power_to_range(pwr, _CUTTER_POWER(CUTTER_POWER_UNIT)); } - static inline cutter_power_t power_to_range(const cutter_power_t pwr, const uint8_t pwrUnit) { + static cutter_power_t power_to_range(const cutter_power_t pwr, const uint8_t pwrUnit) { static constexpr float min_pct = TERN(CUTTER_POWER_RELATIVE, 0, TERN(SPINDLE_FEATURE, round(100.0f * (SPEED_POWER_MIN) / (SPEED_POWER_MAX)), SPEED_POWER_MIN)), max_pct = TERN(SPINDLE_FEATURE, 100, SPEED_POWER_MAX); @@ -188,7 +188,7 @@ public: * Enable/Disable spindle/laser * @param enable true = enable; false = disable */ - static inline void set_enabled(const bool enable) { + static void set_enabled(const bool enable) { uint8_t value = 0; if (enable) { #if ENABLED(SPINDLE_LASER_USE_PWM) @@ -203,14 +203,14 @@ public: set_power(value); } - static inline void disable() { isReady = false; set_enabled(false); } + static void disable() { isReady = false; set_enabled(false); } /** * Wait for spindle to spin up or spin down * * @param on true = state to on; false = state to off. */ - static inline void power_delay(const bool on) { + static void power_delay(const bool on) { #if DISABLED(LASER_POWER_INLINE) safe_delay(on ? SPINDLE_LASER_POWERUP_DELAY : SPINDLE_LASER_POWERDOWN_DELAY); #endif @@ -220,7 +220,7 @@ public: static void set_reverse(const bool reverse); static bool is_reverse() { return READ(SPINDLE_DIR_PIN) == SPINDLE_INVERT_DIR; } #else - static inline void set_reverse(const bool) {} + static void set_reverse(const bool) {} static bool is_reverse() { return false; } #endif @@ -228,7 +228,7 @@ public: static void air_evac_enable(); // Turn On Cutter Vacuum or Laser Blower motor static void air_evac_disable(); // Turn Off Cutter Vacuum or Laser Blower motor static void air_evac_toggle(); // Toggle Cutter Vacuum or Laser Blower motor - static inline bool air_evac_state() { // Get current state + static bool air_evac_state() { // Get current state return (READ(AIR_EVACUATION_PIN) == AIR_EVACUATION_ACTIVE); } #endif @@ -237,13 +237,13 @@ public: static void air_assist_enable(); // Turn on air assist static void air_assist_disable(); // Turn off air assist static void air_assist_toggle(); // Toggle air assist - static inline bool air_assist_state() { // Get current state + static bool air_assist_state() { // Get current state return (READ(AIR_ASSIST_PIN) == AIR_ASSIST_ACTIVE); } #endif #if HAS_LCD_MENU - static inline void enable_with_dir(const bool reverse) { + static void enable_with_dir(const bool reverse) { isReady = true; const uint8_t ocr = TERN(SPINDLE_LASER_USE_PWM, upower_to_ocr(menuPower), 255); if (menuPower) @@ -259,7 +259,7 @@ public: FORCE_INLINE static void enable_same_dir() { enable_with_dir(is_reverse()); } #if ENABLED(SPINDLE_LASER_USE_PWM) - static inline void update_from_mpower() { + static void update_from_mpower() { if (isReady) power = upower_to_ocr(menuPower); unitPower = menuPower; } @@ -271,7 +271,7 @@ public: * Also fires with any PWM power that was previous set * If not set defaults to 80% power */ - static inline void test_fire_pulse() { + static void test_fire_pulse() { TERN_(USE_BEEPER, buzzer.tone(30, 3000)); enable_forward(); // Turn Laser on (Spindle speak but same funct) delay(testPulse); // Delay for time set by user in pulse ms menu screen. @@ -288,7 +288,7 @@ public: */ // Force disengage planner power control - static inline void inline_disable() { + static void inline_disable() { isReady = false; unitPower = 0; planner.laser_inline.status.isPlanned = false; @@ -297,7 +297,7 @@ public: } // Inline modes of all other functions; all enable planner inline power control - static inline void set_inline_enabled(const bool enable) { + static void set_inline_enabled(const bool enable) { if (enable) inline_power(255); else { @@ -326,10 +326,10 @@ public: #endif } - static inline void inline_direction(const bool) { /* never */ } + static void inline_direction(const bool) { /* never */ } #if ENABLED(SPINDLE_LASER_USE_PWM) - static inline void inline_ocr_power(const uint8_t ocrpwr) { + static void inline_ocr_power(const uint8_t ocrpwr) { isReady = ocrpwr > 0; planner.laser_inline.status.isEnabled = ocrpwr > 0; planner.laser_inline.power = ocrpwr; @@ -337,7 +337,7 @@ public: #endif #endif // LASER_POWER_INLINE - static inline void kill() { + static void kill() { TERN_(LASER_POWER_INLINE, inline_disable()); disable(); } diff --git a/Marlin/src/feature/twibus.h b/Marlin/src/feature/twibus.h index d2c7270303..806e2a147a 100644 --- a/Marlin/src/feature/twibus.h +++ b/Marlin/src/feature/twibus.h @@ -244,11 +244,11 @@ class TWIBus { static void debug(FSTR_P const func, char c); static void debug(FSTR_P const func, char adr[]); #else - static inline void debug(FSTR_P const, uint32_t) {} - static inline void debug(FSTR_P const, char) {} - static inline void debug(FSTR_P const, char[]) {} + static void debug(FSTR_P const, uint32_t) {} + static void debug(FSTR_P const, char) {} + static void debug(FSTR_P const, char[]) {} #endif - static inline void debug(FSTR_P const func, uint8_t v) { debug(func, (uint32_t)v); } + static void debug(FSTR_P const func, uint8_t v) { debug(func, (uint32_t)v); } }; extern TWIBus i2c; diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 262237d14c..92c1459a32 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -349,7 +349,7 @@ public: static axis_bits_t axis_relative; - static inline bool axis_is_relative(const AxisEnum a) { + static bool axis_is_relative(const AxisEnum a) { #if HAS_EXTRUDERS if (a == E_AXIS) { if (TEST(axis_relative, E_MODE_REL)) return true; @@ -358,7 +358,7 @@ public: #endif return TEST(axis_relative, a); } - static inline void set_relative_mode(const bool rel) { + static void set_relative_mode(const bool rel) { axis_relative = rel ? (0 LOGICAL_AXIS_GANG( | _BV(REL_E), | _BV(REL_X), | _BV(REL_Y), | _BV(REL_Z), @@ -366,11 +366,11 @@ public: )) : 0; } #if HAS_EXTRUDERS - static inline void set_e_relative() { + static void set_e_relative() { CBI(axis_relative, E_MODE_ABS); SBI(axis_relative, E_MODE_REL); } - static inline void set_e_absolute() { + static void set_e_absolute() { CBI(axis_relative, E_MODE_REL); SBI(axis_relative, E_MODE_ABS); } @@ -403,7 +403,7 @@ public: static void report_echo_start(const bool forReplay); static void report_heading(const bool forReplay, FSTR_P const fstr, const bool eol=true); - static inline void report_heading_etc(const bool forReplay, FSTR_P const fstr, const bool eol=true) { + static void report_heading_etc(const bool forReplay, FSTR_P const fstr, const bool eol=true) { report_heading(forReplay, fstr, eol); report_echo_start(forReplay); } @@ -420,20 +420,20 @@ public: static void process_subcommands_now(FSTR_P fgcode); static void process_subcommands_now(char * gcode); - static inline void home_all_axes(const bool keep_leveling=false) { + static void home_all_axes(const bool keep_leveling=false) { process_subcommands_now(keep_leveling ? FPSTR(G28_STR) : TERN(CAN_SET_LEVELING_AFTER_G28, F("G28L0"), FPSTR(G28_STR))); } #if EITHER(HAS_AUTO_REPORTING, HOST_KEEPALIVE_FEATURE) static bool autoreport_paused; - static inline bool set_autoreport_paused(const bool p) { + static bool set_autoreport_paused(const bool p) { const bool was = autoreport_paused; autoreport_paused = p; return was; } #else static constexpr bool autoreport_paused = false; - static inline bool set_autoreport_paused(const bool) { return false; } + static bool set_autoreport_paused(const bool) { return false; } #endif #if ENABLED(HOST_KEEPALIVE_FEATURE) @@ -453,7 +453,7 @@ public: static uint8_t host_keepalive_interval; static void host_keepalive(); - static inline bool host_keepalive_is_paused() { return busy_state >= PAUSED_FOR_USER; } + static bool host_keepalive_is_paused() { return busy_state >= PAUSED_FOR_USER; } #define KEEPALIVE_STATE(N) REMEMBER(_KA_, gcode.busy_state, gcode.N) #else diff --git a/Marlin/src/gcode/parser.h b/Marlin/src/gcode/parser.h index 83fda54836..bd08467298 100644 --- a/Marlin/src/gcode/parser.h +++ b/Marlin/src/gcode/parser.h @@ -126,7 +126,7 @@ public: } // Set the flag and pointer for a parameter - static inline void set(const char c, char * const ptr) { + static void set(const char c, char * const ptr) { const uint8_t ind = LETTER_BIT(c); if (ind >= COUNT(param)) return; // Only A-Z SBI32(codebits, ind); // parameter exists @@ -142,7 +142,7 @@ public: // Code seen bit was set. If not found, value_ptr is unchanged. // This allows "if (seen('A')||seen('B'))" to use the last-found value. - static inline bool seen(const char c) { + static bool seen(const char c) { const uint8_t ind = LETTER_BIT(c); if (ind >= COUNT(param)) return false; // Only A-Z const bool b = TEST32(codebits, ind); @@ -183,7 +183,7 @@ public: } #endif - static inline bool seen_any() { return !!codebits; } + static bool seen_any() { return !!codebits; } FORCE_INLINE static bool seen_test(const char c) { return TEST32(codebits, LETTER_BIT(c)); } @@ -204,19 +204,19 @@ public: // Code is found in the string. If not found, value_ptr is unchanged. // This allows "if (seen('A')||seen('B'))" to use the last-found value. - static inline bool seen(const char c) { + static bool seen(const char c) { char *p = strgchr(command_args, c); const bool b = !!p; if (b) value_ptr = valid_number(&p[1]) ? &p[1] : nullptr; return b; } - static inline bool seen_any() { return *command_args == '\0'; } + static bool seen_any() { return *command_args == '\0'; } FORCE_INLINE static bool seen_test(const char c) { return (bool)strgchr(command_args, c); } // At least one of a list of code letters was seen - static inline bool seen(const char * const str) { + static bool seen(const char * const str) { for (uint8_t i = 0; const char c = str[i]; i++) if (seen_test(c)) return true; return false; @@ -225,7 +225,7 @@ public: #endif // !FASTER_GCODE_PARSER // Seen any axis parameter - static inline bool seen_axis() { return seen(LOGICAL_AXES_STRING); } + static bool seen_axis() { return seen(LOGICAL_AXES_STRING); } #if ENABLED(GCODE_QUOTED_STRINGS) static char* unescape_string(char* &src); @@ -243,19 +243,19 @@ public: #endif // Test whether the parsed command matches the input - static inline bool is_command(const char ltr, const uint16_t num) { return command_letter == ltr && codenum == num; } + static bool is_command(const char ltr, const uint16_t num) { return command_letter == ltr && codenum == num; } // The code value pointer was set FORCE_INLINE static bool has_value() { return !!value_ptr; } // Seen a parameter with a value - static inline bool seenval(const char c) { return seen(c) && has_value(); } + static bool seenval(const char c) { return seen(c) && has_value(); } // The value as a string - static inline char* value_string() { return value_ptr; } + static char* value_string() { return value_ptr; } // Float removes 'E' to prevent scientific notation interpretation - static inline float value_float() { + static float value_float() { if (value_ptr) { char *e = value_ptr; for (;;) { @@ -275,31 +275,31 @@ public: } // Code value as a long or ulong - static inline int32_t value_long() { return value_ptr ? strtol(value_ptr, nullptr, 10) : 0L; } - static inline uint32_t value_ulong() { return value_ptr ? strtoul(value_ptr, nullptr, 10) : 0UL; } + static int32_t value_long() { return value_ptr ? strtol(value_ptr, nullptr, 10) : 0L; } + static uint32_t value_ulong() { return value_ptr ? strtoul(value_ptr, nullptr, 10) : 0UL; } // Code value for use as time - static inline millis_t value_millis() { return value_ulong(); } - static inline millis_t value_millis_from_seconds() { return (millis_t)SEC_TO_MS(value_float()); } + static millis_t value_millis() { return value_ulong(); } + static millis_t value_millis_from_seconds() { return (millis_t)SEC_TO_MS(value_float()); } // Reduce to fewer bits - static inline int16_t value_int() { return (int16_t)value_long(); } - static inline uint16_t value_ushort() { return (uint16_t)value_long(); } - static inline uint8_t value_byte() { return (uint8_t)constrain(value_long(), 0, 255); } + static int16_t value_int() { return (int16_t)value_long(); } + static uint16_t value_ushort() { return (uint16_t)value_long(); } + static uint8_t value_byte() { return (uint8_t)constrain(value_long(), 0, 255); } // Bool is true with no value or non-zero - static inline bool value_bool() { return !has_value() || !!value_byte(); } + static bool value_bool() { return !has_value() || !!value_byte(); } // Units modes: Inches, Fahrenheit, Kelvin #if ENABLED(INCH_MODE_SUPPORT) - static inline float mm_to_linear_unit(const_float_t mm) { return mm / linear_unit_factor; } - static inline float mm_to_volumetric_unit(const_float_t mm) { return mm / (volumetric_enabled ? volumetric_unit_factor : linear_unit_factor); } + static float mm_to_linear_unit(const_float_t mm) { return mm / linear_unit_factor; } + static float mm_to_volumetric_unit(const_float_t mm) { return mm / (volumetric_enabled ? volumetric_unit_factor : linear_unit_factor); } // Init linear units by constructor GCodeParser() { set_input_linear_units(LINEARUNIT_MM); } - static inline void set_input_linear_units(const LinearUnit units) { + static void set_input_linear_units(const LinearUnit units) { switch (units) { default: case LINEARUNIT_MM: linear_unit_factor = 1.0f; break; @@ -308,7 +308,7 @@ public: volumetric_unit_factor = POW(linear_unit_factor, 3); } - static inline float axis_unit_factor(const AxisEnum axis) { + static float axis_unit_factor(const AxisEnum axis) { return ( #if HAS_EXTRUDERS axis >= E_AXIS && volumetric_enabled ? volumetric_unit_factor : linear_unit_factor @@ -318,46 +318,46 @@ public: ); } - static inline float linear_value_to_mm(const_float_t v) { return v * linear_unit_factor; } - static inline float axis_value_to_mm(const AxisEnum axis, const float v) { return v * axis_unit_factor(axis); } - static inline float per_axis_value(const AxisEnum axis, const float v) { return v / axis_unit_factor(axis); } + static float linear_value_to_mm(const_float_t v) { return v * linear_unit_factor; } + static float axis_value_to_mm(const AxisEnum axis, const float v) { return v * axis_unit_factor(axis); } + static float per_axis_value(const AxisEnum axis, const float v) { return v / axis_unit_factor(axis); } #else - static inline float mm_to_linear_unit(const_float_t mm) { return mm; } - static inline float mm_to_volumetric_unit(const_float_t mm) { return mm; } + static float mm_to_linear_unit(const_float_t mm) { return mm; } + static float mm_to_volumetric_unit(const_float_t mm) { return mm; } - static inline float linear_value_to_mm(const_float_t v) { return v; } - static inline float axis_value_to_mm(const AxisEnum, const float v) { return v; } - static inline float per_axis_value(const AxisEnum, const float v) { return v; } + static float linear_value_to_mm(const_float_t v) { return v; } + static float axis_value_to_mm(const AxisEnum, const float v) { return v; } + static float per_axis_value(const AxisEnum, const float v) { return v; } #endif - static inline bool using_inch_units() { return mm_to_linear_unit(1.0f) != 1.0f; } + static bool using_inch_units() { return mm_to_linear_unit(1.0f) != 1.0f; } #define IN_TO_MM(I) ((I) * 25.4f) #define MM_TO_IN(M) ((M) / 25.4f) #define LINEAR_UNIT(V) parser.mm_to_linear_unit(V) #define VOLUMETRIC_UNIT(V) parser.mm_to_volumetric_unit(V) - static inline float value_linear_units() { return linear_value_to_mm(value_float()); } - static inline float value_axis_units(const AxisEnum axis) { return axis_value_to_mm(axis, value_float()); } - static inline float value_per_axis_units(const AxisEnum axis) { return per_axis_value(axis, value_float()); } + static float value_linear_units() { return linear_value_to_mm(value_float()); } + static float value_axis_units(const AxisEnum axis) { return axis_value_to_mm(axis, value_float()); } + static float value_per_axis_units(const AxisEnum axis) { return per_axis_value(axis, value_float()); } #if ENABLED(TEMPERATURE_UNITS_SUPPORT) - static inline void set_input_temp_units(const TempUnit units) { input_temp_units = units; } + static void set_input_temp_units(const TempUnit units) { input_temp_units = units; } - static inline char temp_units_code() { + static char temp_units_code() { return input_temp_units == TEMPUNIT_K ? 'K' : input_temp_units == TEMPUNIT_F ? 'F' : 'C'; } - static inline FSTR_P temp_units_name() { + static FSTR_P temp_units_name() { return input_temp_units == TEMPUNIT_K ? F("Kelvin") : input_temp_units == TEMPUNIT_F ? F("Fahrenheit") : F("Celsius"); } #if HAS_LCD_MENU && DISABLED(DISABLE_M503) - static inline float to_temp_units(celsius_t c) { + static float to_temp_units(celsius_t c) { switch (input_temp_units) { default: case TEMPUNIT_C: return c; @@ -368,7 +368,7 @@ public: #endif // HAS_LCD_MENU && !DISABLE_M503 - static inline celsius_t value_celsius() { + static celsius_t value_celsius() { float f = value_float(); switch (input_temp_units) { default: @@ -379,7 +379,7 @@ public: return LROUND(f); } - static inline celsius_t value_celsius_diff() { + static celsius_t value_celsius_diff() { float f = value_float(); switch (input_temp_units) { default: @@ -392,35 +392,35 @@ public: #else // !TEMPERATURE_UNITS_SUPPORT - static inline float to_temp_units(int16_t c) { return (float)c; } + static float to_temp_units(int16_t c) { return (float)c; } - static inline celsius_t value_celsius() { return value_int(); } - static inline celsius_t value_celsius_diff() { return value_int(); } + static celsius_t value_celsius() { return value_int(); } + static celsius_t value_celsius_diff() { return value_int(); } #endif // !TEMPERATURE_UNITS_SUPPORT - static inline feedRate_t value_feedrate() { return MMM_TO_MMS(value_linear_units()); } + static feedRate_t value_feedrate() { return MMM_TO_MMS(value_linear_units()); } void unknown_command_warning(); // Provide simple value accessors with default option - static inline char* stringval(const char c, char * const dval=nullptr) { return seenval(c) ? value_string() : dval; } - static inline float floatval(const char c, const float dval=0.0) { return seenval(c) ? value_float() : dval; } - static inline bool boolval(const char c, const bool dval=false) { return seenval(c) ? value_bool() : (seen(c) ? true : dval); } - static inline uint8_t byteval(const char c, const uint8_t dval=0) { return seenval(c) ? value_byte() : dval; } - static inline int16_t intval(const char c, const int16_t dval=0) { return seenval(c) ? value_int() : dval; } - static inline uint16_t ushortval(const char c, const uint16_t dval=0) { return seenval(c) ? value_ushort() : dval; } - static inline int32_t longval(const char c, const int32_t dval=0) { return seenval(c) ? value_long() : dval; } - static inline uint32_t ulongval(const char c, const uint32_t dval=0) { return seenval(c) ? value_ulong() : dval; } - static inline float linearval(const char c, const float dval=0) { return seenval(c) ? value_linear_units() : dval; } - static inline float axisunitsval(const char c, const AxisEnum a, const float dval=0) + static char* stringval(const char c, char * const dval=nullptr) { return seenval(c) ? value_string() : dval; } + static float floatval(const char c, const float dval=0.0) { return seenval(c) ? value_float() : dval; } + static bool boolval(const char c, const bool dval=false) { return seenval(c) ? value_bool() : (seen(c) ? true : dval); } + static uint8_t byteval(const char c, const uint8_t dval=0) { return seenval(c) ? value_byte() : dval; } + static int16_t intval(const char c, const int16_t dval=0) { return seenval(c) ? value_int() : dval; } + static uint16_t ushortval(const char c, const uint16_t dval=0) { return seenval(c) ? value_ushort() : dval; } + static int32_t longval(const char c, const int32_t dval=0) { return seenval(c) ? value_long() : dval; } + static uint32_t ulongval(const char c, const uint32_t dval=0) { return seenval(c) ? value_ulong() : dval; } + static float linearval(const char c, const float dval=0) { return seenval(c) ? value_linear_units() : dval; } + static float axisunitsval(const char c, const AxisEnum a, const float dval=0) { return seenval(c) ? value_axis_units(a) : dval; } - static inline celsius_t celsiusval(const char c, const celsius_t dval=0) { return seenval(c) ? value_celsius() : dval; } - static inline feedRate_t feedrateval(const char c, const feedRate_t dval=0) { return seenval(c) ? value_feedrate() : dval; } + static celsius_t celsiusval(const char c, const celsius_t dval=0) { return seenval(c) ? value_celsius() : dval; } + static feedRate_t feedrateval(const char c, const feedRate_t dval=0) { return seenval(c) ? value_feedrate() : dval; } #if ENABLED(MARLIN_DEV_MODE) - static inline uint8_t* hex_adr_val(const char c, uint8_t * const dval=nullptr) { + static uint8_t* hex_adr_val(const char c, uint8_t * const dval=nullptr) { if (!seen(c) || *value_ptr != 'x') return dval; uint8_t *out = nullptr; for (char *vp = value_ptr + 1; HEXCHR(*vp) >= 0; vp++) @@ -428,7 +428,7 @@ public: return out; } - static inline uint16_t hex_val(const char c, uint16_t const dval=0) { + static uint16_t hex_val(const char c, uint16_t const dval=0) { if (!seen(c) || *value_ptr != 'x') return dval; uint16_t out = 0; for (char *vp = value_ptr + 1; HEXCHR(*vp) >= 0; vp++) diff --git a/Marlin/src/gcode/queue.h b/Marlin/src/gcode/queue.h index 82e2a7a0e4..1a2baaa6bb 100644 --- a/Marlin/src/gcode/queue.h +++ b/Marlin/src/gcode/queue.h @@ -126,14 +126,14 @@ public: * Don't inject comments or use leading spaces! * Aborts the current PROGMEM queue so only use for one or two commands. */ - static inline void inject_P(PGM_P const pgcode) { injected_commands_P = pgcode; } - static inline void inject(FSTR_P const fgcode) { inject_P(FTOP(fgcode)); } + static void inject_P(PGM_P const pgcode) { injected_commands_P = pgcode; } + static void inject(FSTR_P const fgcode) { inject_P(FTOP(fgcode)); } /** * Enqueue command(s) to run from SRAM. Drained by process_injected_command(). * Aborts the current SRAM queue so only use for one or two commands. */ - static inline void inject(const char * const gcode) { + static void inject(const char * const gcode) { strncpy(injected_commands, gcode, sizeof(injected_commands) - 1); } @@ -158,7 +158,7 @@ public: * Enqueue from program memory and return only when commands are actually enqueued */ static void enqueue_now_P(PGM_P const pcmd); - static inline void enqueue_now(FSTR_P const fcmd) { enqueue_now_P(FTOP(fcmd)); } + static void enqueue_now(FSTR_P const fcmd) { enqueue_now_P(FTOP(fcmd)); } /** * Check whether there are any commands yet to be executed @@ -192,7 +192,7 @@ public: * P Planner space remaining * B Block queue space remaining */ - static inline void ok_to_send() { ring_buffer.ok_to_send(); } + static void ok_to_send() { ring_buffer.ok_to_send(); } /** * Clear the serial line and request a resend of @@ -203,7 +203,7 @@ public: /** * (Re)Set the current line number for the last received command */ - static inline void set_current_line_number(long n) { serial_state[ring_buffer.command_port().index].last_N = n; } + static void set_current_line_number(long n) { serial_state[ring_buffer.command_port().index].last_N = n; } #if ENABLED(BUFFER_MONITORING) @@ -237,7 +237,7 @@ public: static void auto_report_buffer_statistics(); - static inline void set_auto_report_interval(uint8_t v) { + static void set_auto_report_interval(uint8_t v) { NOMORE(v, 60); auto_buffer_report_interval = v; next_buffer_report_ms = millis() + 1000UL * v; diff --git a/Marlin/src/lcd/e3v2/enhanced/lockscreen.h b/Marlin/src/lcd/e3v2/enhanced/lockscreen.h index f44ca418f1..a51c82f34e 100644 --- a/Marlin/src/lcd/e3v2/enhanced/lockscreen.h +++ b/Marlin/src/lcd/e3v2/enhanced/lockscreen.h @@ -40,7 +40,7 @@ public: static void init(); static void onEncoder(EncoderState encoder_diffState); static void draw(); - static inline bool isUnlocked() { return unlocked; } + static bool isUnlocked() { return unlocked; } }; extern LockScreenClass lockScreen; diff --git a/Marlin/src/lcd/e3v2/marlinui/dwin_string.h b/Marlin/src/lcd/e3v2/marlinui/dwin_string.h index 30af387bdc..64676dddfd 100644 --- a/Marlin/src/lcd/e3v2/marlinui/dwin_string.h +++ b/Marlin/src/lcd/e3v2/marlinui/dwin_string.h @@ -55,7 +55,7 @@ class DWIN_String { //static font_t *font() { return font_header; }; //static uint16_t font_height() { return font_header->FontAscent - font_header->FontDescent; } //static glyph_t *glyph(uint8_t character) { return glyphs[character] ?: glyphs[0x3F]; } /* Use '?' for unknown glyphs */ - //static inline glyph_t *glyph(uint8_t *character) { return glyph(*character); } + //static glyph_t *glyph(uint8_t *character) { return glyph(*character); } static void set(); //static void add(uint8_t character) { add_character(character); eol(); } @@ -65,10 +65,10 @@ class DWIN_String { static void set(uint8_t *string) { set(); add(string); } static void set(wchar_t character) { set(); add(character); } static void set(uint8_t *string, int8_t index, const char *itemString=nullptr) { set(); add(string, index, (uint8_t *)itemString); } - static inline void set(FSTR_P fstring) { set((uint8_t *)fstring); } - static inline void set(const char *string) { set((uint8_t *)string); } - static inline void set(const char *string, int8_t index, const char *itemString=nullptr) { set((uint8_t *)string, index, itemString); } - static inline void add(const char *string) { add((uint8_t *)string); } + static void set(FSTR_P fstring) { set((uint8_t *)fstring); } + static void set(const char *string) { set((uint8_t *)string); } + static void set(const char *string, int8_t index, const char *itemString=nullptr) { set((uint8_t *)string, index, itemString); } + static void add(const char *string) { add((uint8_t *)string); } static void trim(const uint8_t character=0x20); static void rtrim(const uint8_t character=0x20); @@ -76,9 +76,9 @@ class DWIN_String { static void truncate(uint8_t maxlen) { if (len > maxlen) { len = maxlen; eol(); } } - static inline uint8_t length() { return len; } - static inline uint16_t width() { return span; } - static inline uint8_t *string() { return data; } + static uint8_t length() { return len; } + static uint16_t width() { return span; } + static uint8_t *string() { return data; } static uint16_t center(uint16_t width) { return span > width ? 0 : (width - span) / 2; } }; diff --git a/Marlin/src/lcd/extui/dgus/DGUSDisplay.h b/Marlin/src/lcd/extui/dgus/DGUSDisplay.h index e486a00145..3040225d07 100644 --- a/Marlin/src/lcd/extui/dgus/DGUSDisplay.h +++ b/Marlin/src/lcd/extui/dgus/DGUSDisplay.h @@ -95,14 +95,14 @@ public: // Checks two things: Can we confirm the presence of the display and has we initialized it. // (both boils down that the display answered to our chatting) - static inline bool isInitialized() { return Initialized; } + static bool isInitialized() { return Initialized; } private: static void WriteHeader(uint16_t adr, uint8_t cmd, uint8_t payloadlen); static void WritePGM(const char str[], uint8_t len); static void ProcessRx(); - static inline uint16_t swap16(const uint16_t value) { return (value & 0xFFU) << 8U | (value >> 8U); } + static uint16_t swap16(const uint16_t value) { return (value & 0xFFU) << 8U | (value >> 8U); } static rx_datagram_state_t rx_datagram_state; static uint8_t rx_datagram_len; static bool Initialized, no_reentrance; diff --git a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h index bb0bd2bd3b..d4fdf1d27e 100644 --- a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h @@ -38,10 +38,10 @@ public: // Send all 4 strings that are displayed on the infoscreen, confirmation screen and kill screen // The bools specifying whether the strings are in RAM or FLASH. static void sendinfoscreen(const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); - static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { + static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), line3, line4, l1inflash, l2inflash, l3inflash, liinflash); } - static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { + static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), FTOP(line3), FTOP(line4), l1inflash, l2inflash, l3inflash, liinflash); } @@ -213,13 +213,13 @@ public: } // Force an update of all VP on the current screen. - static inline void ForceCompleteUpdate() { update_ptr = 0; ScreenComplete = false; } + static void ForceCompleteUpdate() { update_ptr = 0; ScreenComplete = false; } // Has all VPs sent to the screen - static inline bool IsScreenComplete() { return ScreenComplete; } + static bool IsScreenComplete() { return ScreenComplete; } - static inline DGUSLCD_Screens getCurrentScreen() { return current_screen; } + static DGUSLCD_Screens getCurrentScreen() { return current_screen; } - static inline void SetupConfirmAction( void (*f)()) { confirm_action_cb = f; } + static void SetupConfirmAction( void (*f)()) { confirm_action_cb = f; } private: static DGUSLCD_Screens current_screen; //< currently on screen diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h index bb0bd2bd3b..d4fdf1d27e 100644 --- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h @@ -38,10 +38,10 @@ public: // Send all 4 strings that are displayed on the infoscreen, confirmation screen and kill screen // The bools specifying whether the strings are in RAM or FLASH. static void sendinfoscreen(const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); - static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { + static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), line3, line4, l1inflash, l2inflash, l3inflash, liinflash); } - static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { + static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), FTOP(line3), FTOP(line4), l1inflash, l2inflash, l3inflash, liinflash); } @@ -213,13 +213,13 @@ public: } // Force an update of all VP on the current screen. - static inline void ForceCompleteUpdate() { update_ptr = 0; ScreenComplete = false; } + static void ForceCompleteUpdate() { update_ptr = 0; ScreenComplete = false; } // Has all VPs sent to the screen - static inline bool IsScreenComplete() { return ScreenComplete; } + static bool IsScreenComplete() { return ScreenComplete; } - static inline DGUSLCD_Screens getCurrentScreen() { return current_screen; } + static DGUSLCD_Screens getCurrentScreen() { return current_screen; } - static inline void SetupConfirmAction( void (*f)()) { confirm_action_cb = f; } + static void SetupConfirmAction( void (*f)()) { confirm_action_cb = f; } private: static DGUSLCD_Screens current_screen; //< currently on screen diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h index 0c80cd260e..2e6c8af985 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h @@ -38,10 +38,10 @@ public: // Send all 4 strings that are displayed on the infoscreen, confirmation screen and kill screen // The bools specifying whether the strings are in RAM or FLASH. static void sendinfoscreen(const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); - static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { + static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), line3, line4, l1inflash, l2inflash, l3inflash, liinflash); } - static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { + static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), FTOP(line3), FTOP(line4), l1inflash, l2inflash, l3inflash, liinflash); } @@ -280,13 +280,13 @@ public: } // Force an update of all VP on the current screen. - static inline void ForceCompleteUpdate() { update_ptr = 0; ScreenComplete = false; } + static void ForceCompleteUpdate() { update_ptr = 0; ScreenComplete = false; } // Has all VPs sent to the screen - static inline bool IsScreenComplete() { return ScreenComplete; } + static bool IsScreenComplete() { return ScreenComplete; } - static inline DGUSLCD_Screens getCurrentScreen() { return current_screen; } + static DGUSLCD_Screens getCurrentScreen() { return current_screen; } - static inline void SetupConfirmAction( void (*f)()) { confirm_action_cb = f; } + static void SetupConfirmAction( void (*f)()) { confirm_action_cb = f; } private: static DGUSLCD_Screens current_screen; //< currently on screen diff --git a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h index bb0bd2bd3b..d4fdf1d27e 100644 --- a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h @@ -38,10 +38,10 @@ public: // Send all 4 strings that are displayed on the infoscreen, confirmation screen and kill screen // The bools specifying whether the strings are in RAM or FLASH. static void sendinfoscreen(const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); - static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { + static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), line3, line4, l1inflash, l2inflash, l3inflash, liinflash); } - static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { + static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), FTOP(line3), FTOP(line4), l1inflash, l2inflash, l3inflash, liinflash); } @@ -213,13 +213,13 @@ public: } // Force an update of all VP on the current screen. - static inline void ForceCompleteUpdate() { update_ptr = 0; ScreenComplete = false; } + static void ForceCompleteUpdate() { update_ptr = 0; ScreenComplete = false; } // Has all VPs sent to the screen - static inline bool IsScreenComplete() { return ScreenComplete; } + static bool IsScreenComplete() { return ScreenComplete; } - static inline DGUSLCD_Screens getCurrentScreen() { return current_screen; } + static DGUSLCD_Screens getCurrentScreen() { return current_screen; } - static inline void SetupConfirmAction( void (*f)()) { confirm_action_cb = f; } + static void SetupConfirmAction( void (*f)()) { confirm_action_cb = f; } private: static DGUSLCD_Screens current_screen; //< currently on screen diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h index 265e2fe584..332108d81a 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h @@ -98,7 +98,7 @@ public: // Checks two things: Can we confirm the presence of the display and has we initialized it. // (both boils down that the display answered to our chatting) - static inline bool IsInitialized() { + static bool IsInitialized() { return initialized; } diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/compat.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/compat.h index 3b63b0fd5b..afb380aa90 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/compat.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/compat.h @@ -43,8 +43,8 @@ #define min(a,b) ((a)<(b)?(a):(b)) #else namespace UI { - static inline uint32_t safe_millis() { return millis(); } - static inline void yield() {} + static uint32_t safe_millis() { return millis(); } + static void yield() {} }; #endif diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/compat.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/compat.h index b8e687147b..da911c772d 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/compat.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/compat.h @@ -40,13 +40,13 @@ template struct port_pin { typedef port_t port; - static inline void set_high() {port::port() = (port::port() | bits);} - static inline void set_low() {port::port() = (port::port() & (~bits));} - static inline void set_input() {port::ddr() = (port::ddr() & (~bits));} - static inline void set_input_pullup() {set_input(); set_high();} - static inline void set_output() {port::ddr() = (port::ddr() | bits);} - static inline uint8_t read() {return port::pin() & bits;} - static inline void write(bool v) {if (v) set_high(); else set_low();} + static void set_high() {port::port() = (port::port() | bits);} + static void set_low() {port::port() = (port::port() & (~bits));} + static void set_input() {port::ddr() = (port::ddr() & (~bits));} + static void set_input_pullup() {set_input(); set_high();} + static void set_output() {port::ddr() = (port::ddr() | bits);} + static uint8_t read() {return port::pin() & bits;} + static void write(bool v) {if (v) set_high(); else set_low();} }; #define MAKE_AVR_PORT_PINS(ID) \ @@ -109,13 +109,13 @@ template struct arduino_digital_pin { static constexpr uint8_t pin = p; - static inline void set_high() {digitalWrite(p, HIGH);} - static inline void set_low() {digitalWrite(p, LOW);} - static inline void set_input() {pinMode(p, INPUT);} - static inline void set_input_pullup() {pinMode(p, INPUT_PULLUP);} - static inline void set_output() {pinMode(p, OUTPUT);} - static inline uint8_t read() {return digitalRead(p);} - static inline void write(bool v) {digitalWrite(p, v ? HIGH : LOW);} + static void set_high() {digitalWrite(p, HIGH);} + static void set_low() {digitalWrite(p, LOW);} + static void set_input() {pinMode(p, INPUT);} + static void set_input_pullup() {pinMode(p, INPUT_PULLUP);} + static void set_output() {pinMode(p, OUTPUT);} + static uint8_t read() {return digitalRead(p);} + static void write(bool v) {digitalWrite(p, v ? HIGH : LOW);} }; #define MAKE_ARDUINO_PINS(ID) typedef arduino_digital_pin ARDUINO_DIGITAL_##ID; diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/sound_list.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/sound_list.h index 2ddab1b818..b204f04743 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/sound_list.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/sound_list.h @@ -29,10 +29,10 @@ class SoundList { } list[]; public: static const uint8_t n; - static inline const char* name(uint8_t val) { + static const char* name(uint8_t val) { return (const char* ) pgm_read_ptr_far(&list[val].name); } - static inline FTDI::SoundPlayer::sound_t* data(uint8_t val) { + static FTDI::SoundPlayer::sound_t* data(uint8_t val) { return (FTDI::SoundPlayer::sound_t*) pgm_read_ptr_far(&list[val].data); } }; diff --git a/Marlin/src/lcd/extui/mks_ui/SPIFlashStorage.h b/Marlin/src/lcd/extui/mks_ui/SPIFlashStorage.h index 4683ff9351..72394286ac 100644 --- a/Marlin/src/lcd/extui/mks_ui/SPIFlashStorage.h +++ b/Marlin/src/lcd/extui/mks_ui/SPIFlashStorage.h @@ -96,12 +96,12 @@ private: static uint8_t m_pageData[SPI_FLASH_PageSize]; static uint32_t m_currentPage; static uint16_t m_pageDataUsed; - static inline uint16_t pageDataFree() { return SPI_FLASH_PageSize - m_pageDataUsed; } + static uint16_t pageDataFree() { return SPI_FLASH_PageSize - m_pageDataUsed; } static uint32_t m_startAddress; #if HAS_SPI_FLASH_COMPRESSION static uint8_t m_compressedData[SPI_FLASH_PageSize]; static uint16_t m_compressedDataUsed; - static inline uint16_t compressedDataFree() { return SPI_FLASH_PageSize - m_compressedDataUsed; } + static uint16_t compressedDataFree() { return SPI_FLASH_PageSize - m_compressedDataUsed; } #endif }; diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index 7014040097..e9aa0a6da5 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -274,8 +274,8 @@ public: static bool detected(); static void init_lcd(); #else - static inline bool detected() { return true; } - static inline void init_lcd() {} + static bool detected() { return true; } + static void init_lcd() {} #endif #if HAS_PRINT_PROGRESS @@ -294,7 +294,7 @@ public: static void set_progress_done() { progress_override = (PROGRESS_MASK + 1U) + 100U * (PROGRESS_SCALE); } static void progress_reset() { if (progress_override & (PROGRESS_MASK + 1U)) set_progress(0); } #if ENABLED(SHOW_REMAINING_TIME) - static inline uint32_t _calculated_remaining_time() { + static uint32_t _calculated_remaining_time() { const duration_t elapsed = print_job_timer.duration(); const progress_t progress = _get_progress(); return progress ? elapsed.value * (100 * (PROGRESS_SCALE) - progress) / progress : 0; @@ -342,12 +342,12 @@ public: static bool has_status(); static void reset_status(const bool no_welcome=false); static void set_alert_status(FSTR_P const fstr); - static inline void reset_alert_level() { alert_level = 0; } + static void reset_alert_level() { alert_level = 0; } #else static constexpr bool has_status() { return false; } - static inline void reset_status(const bool=false) {} - static inline void set_alert_status(FSTR_P const) {} - static inline void reset_alert_level() {} + static void reset_status(const bool=false) {} + static void set_alert_status(FSTR_P const) {} + static void reset_alert_level() {} #endif static void set_status(const char * const cstr, const bool persist=false); @@ -360,7 +360,7 @@ public: static void draw_status_message(const bool blink); #endif #else - static inline void kill_screen(FSTR_P const, FSTR_P const) {} + static void kill_screen(FSTR_P const, FSTR_P const) {} #endif #if HAS_DISPLAY @@ -444,7 +444,7 @@ public: #if HAS_BUZZER static void completion_feedback(const bool good=true); #else - static inline void completion_feedback(const bool=true) { TERN_(HAS_TOUCH_SLEEP, wakeup_screen()); } + static void completion_feedback(const bool=true) { TERN_(HAS_TOUCH_SLEEP, wakeup_screen()); } #endif #if ENABLED(ADVANCED_PAUSE_FEATURE) @@ -479,9 +479,9 @@ public: #else // No LCD - static inline void init() {} - static inline void update() {} - static inline void return_to_status() {} + static void init() {} + static void update() {} + static void return_to_status() {} #endif @@ -500,17 +500,17 @@ public: static preheat_t material_preset[PREHEAT_COUNT]; static PGM_P get_preheat_label(const uint8_t m); static void apply_preheat(const uint8_t m, const uint8_t pmask, const uint8_t e=active_extruder); - static inline void preheat_set_fan(const uint8_t m) { TERN_(HAS_FAN, apply_preheat(m, PM_FAN)); } - static inline void preheat_hotend(const uint8_t m, const uint8_t e=active_extruder) { TERN_(HAS_HOTEND, apply_preheat(m, PM_HOTEND)); } - static inline void preheat_hotend_and_fan(const uint8_t m, const uint8_t e=active_extruder) { preheat_hotend(m, e); preheat_set_fan(m); } - static inline void preheat_bed(const uint8_t m) { TERN_(HAS_HEATED_BED, apply_preheat(m, PM_BED)); } - static inline void preheat_all(const uint8_t m) { apply_preheat(m, 0xFF); } + static void preheat_set_fan(const uint8_t m) { TERN_(HAS_FAN, apply_preheat(m, PM_FAN)); } + static void preheat_hotend(const uint8_t m, const uint8_t e=active_extruder) { TERN_(HAS_HOTEND, apply_preheat(m, PM_HOTEND)); } + static void preheat_hotend_and_fan(const uint8_t m, const uint8_t e=active_extruder) { preheat_hotend(m, e); preheat_set_fan(m); } + static void preheat_bed(const uint8_t m) { TERN_(HAS_HEATED_BED, apply_preheat(m, PM_BED)); } + static void preheat_all(const uint8_t m) { apply_preheat(m, 0xFF); } #endif #if SCREENS_CAN_TIME_OUT - static inline void reset_status_timeout(const millis_t ms) { return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS; } + static void reset_status_timeout(const millis_t ms) { return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS; } #else - static inline void reset_status_timeout(const millis_t) {} + static void reset_status_timeout(const millis_t) {} #endif #if HAS_LCD_MENU @@ -548,11 +548,11 @@ public: // goto_previous_screen and go_back may also be used as menu item callbacks static void _goto_previous_screen(TERN_(TURBO_BACK_MENU_ITEM, const bool is_back)); - static inline void goto_previous_screen() { _goto_previous_screen(TERN_(TURBO_BACK_MENU_ITEM, false)); } - static inline void go_back() { _goto_previous_screen(TERN_(TURBO_BACK_MENU_ITEM, true)); } + static void goto_previous_screen() { _goto_previous_screen(TERN_(TURBO_BACK_MENU_ITEM, false)); } + static void go_back() { _goto_previous_screen(TERN_(TURBO_BACK_MENU_ITEM, true)); } static void return_to_status(); - static inline bool on_status_screen() { return currentScreen == status_screen; } + static bool on_status_screen() { return currentScreen == status_screen; } FORCE_INLINE static void run_current_screen() { (*currentScreen)(); } #if ENABLED(LIGHTWEIGHT_UI) @@ -567,7 +567,7 @@ public: TERN(SCREENS_CAN_TIME_OUT, defer_return_to_status = defer, UNUSED(defer)); } - static inline void goto_previous_screen_no_defer() { + static void goto_previous_screen_no_defer() { defer_status_screen(false); goto_previous_screen(); } @@ -599,20 +599,20 @@ public: #if EITHER(HAS_LCD_MENU, EXTENSIBLE_UI) static bool lcd_clicked; - static inline bool use_click() { + static bool use_click() { const bool click = lcd_clicked; lcd_clicked = false; return click; } #else static constexpr bool lcd_clicked = false; - static inline bool use_click() { return false; } + static bool use_click() { return false; } #endif #if ENABLED(ADVANCED_PAUSE_FEATURE) && ANY(HAS_LCD_MENU, EXTENSIBLE_UI, DWIN_CREALITY_LCD_ENHANCED, DWIN_CREALITY_LCD_JYERSUI) static void pause_show_message(const PauseMessage message, const PauseMode mode=PAUSE_MODE_SAME, const uint8_t extruder=active_extruder); #else - static inline void _pause_show_message() {} + static void _pause_show_message() {} #define pause_show_message(...) _pause_show_message() #endif @@ -631,9 +631,9 @@ public: #endif #if DISABLED(EEPROM_AUTO_INIT) static void eeprom_alert(const uint8_t msgid); - static inline void eeprom_alert_crc() { eeprom_alert(0); } - static inline void eeprom_alert_index() { eeprom_alert(1); } - static inline void eeprom_alert_version() { eeprom_alert(2); } + static void eeprom_alert_crc() { eeprom_alert(0); } + static void eeprom_alert_index() { eeprom_alert(1); } + static void eeprom_alert_version() { eeprom_alert(2); } #endif #endif @@ -674,7 +674,7 @@ public: #endif static void update_buttons(); - static inline bool button_pressed() { return BUTTON_CLICK() || TERN(TOUCH_SCREEN, touch_pressed(), false); } + static bool button_pressed() { return BUTTON_CLICK() || TERN(TOUCH_SCREEN, touch_pressed(), false); } #if EITHER(AUTO_BED_LEVELING_UBL, G26_MESH_VALIDATION) static void wait_for_release(); #endif @@ -705,7 +705,7 @@ public: #else - static inline void update_buttons() {} + static void update_buttons() {} #endif diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h index 048dab9b73..72826262f4 100644 --- a/Marlin/src/lcd/menu/menu.h +++ b/Marlin/src/lcd/menu/menu.h @@ -109,7 +109,7 @@ class MenuItem_confirm : public MenuItemBase { selectFunc_t yesFunc, selectFunc_t noFunc, PGM_P const pref, const char * const string=nullptr, PGM_P const suff=nullptr ); - static inline void select_screen( + static void select_screen( PGM_P const yes, PGM_P const no, selectFunc_t yesFunc, selectFunc_t noFunc, PGM_P const pref, FSTR_P const string, PGM_P const suff=nullptr @@ -178,7 +178,7 @@ class MenuEditItemBase : public MenuItemBase { static void draw_edit_screen(PGM_P const pstr, const char * const value); // This method is for the current menu item - static inline void draw_edit_screen(const char * const value) { draw_edit_screen(editLabel, value); } + static void draw_edit_screen(const char * const value) { draw_edit_screen(editLabel, value); } }; #if ENABLED(SDSUPPORT) diff --git a/Marlin/src/lcd/menu/menu_item.h b/Marlin/src/lcd/menu/menu_item.h index 624b9b303d..1834b56a88 100644 --- a/Marlin/src/lcd/menu/menu_item.h +++ b/Marlin/src/lcd/menu/menu_item.h @@ -39,14 +39,14 @@ class MenuItem_submenu : public MenuItemBase { FORCE_INLINE static void draw(const bool sel, const uint8_t row, PGM_P const pstr, ...) { _draw(sel, row, pstr, '>', LCD_STR_ARROW_RIGHT[0]); } - static inline void action(PGM_P const, const screenFunc_t func) { ui.push_current_screen(); ui.goto_screen(func); } + static void action(PGM_P const, const screenFunc_t func) { ui.push_current_screen(); ui.goto_screen(func); } }; // Any menu item that invokes an immediate action class MenuItem_button : public MenuItemBase { public: // Button-y Items are selectable lines with no other indicator - static inline void draw(const bool sel, const uint8_t row, PGM_P const pstr, ...) { + static void draw(const bool sel, const uint8_t row, PGM_P const pstr, ...) { _draw(sel, row, pstr, '>', ' '); } }; @@ -54,8 +54,8 @@ class MenuItem_button : public MenuItemBase { // ACTION_ITEM(LABEL, FUNC) class MenuItem_function : public MenuItem_button { public: - //static inline void action(PGM_P const, const uint8_t, const menuAction_t func) { (*func)(); }; - static inline void action(PGM_P const, const menuAction_t func) { if (func) (*func)(); }; + //static void action(PGM_P const, const uint8_t, const menuAction_t func) { (*func)(); }; + static void action(PGM_P const, const menuAction_t func) { if (func) (*func)(); }; }; // GCODES_ITEM(LABEL, GCODES) @@ -65,7 +65,7 @@ class MenuItem_gcode : public MenuItem_button { _draw(sel, row, pstr, '>', ' '); } static void action(PGM_P const, PGM_P const pgcode) { queue.inject(FPSTR(pgcode)); } - static inline void action(PGM_P const pstr, const uint8_t, PGM_P const pgcode) { action(pstr, pgcode); } + static void action(PGM_P const pstr, const uint8_t, PGM_P const pgcode) { action(pstr, pgcode); } }; //////////////////////////////////////////// @@ -77,8 +77,8 @@ template class TMenuEditItem : MenuEditItemBase { private: typedef typename NAME::type_t type_t; - static inline float scale(const_float_t value) { return NAME::scale(value); } - static inline float unscale(const_float_t value) { return NAME::unscale(value); } + static float scale(const_float_t value) { return NAME::scale(value); } + static float unscale(const_float_t value) { return NAME::unscale(value); } static const char* to_string(const int32_t value) { return NAME::strfunc(unscale(value)); } static void load(void *ptr, const int32_t value) { *((type_t*)ptr) = unscale(value); } public: @@ -117,9 +117,9 @@ class TMenuEditItem : MenuEditItemBase { * * struct MenuEditItemInfo_percent { * typedef uint8_t type_t; - * static inline float scale(const_float_t value) { return value * (100.f/255.f) +0.5f; } - * static inline float unscale(const_float_t value) { return value / (100.f/255.f) +0.5f; } - * static inline const char* strfunc(const_float_t value) { return ui8tostr4pctrj(_DOFIX(uint8_t,value)); } + * static float scale(const_float_t value) { return value * (100.f/255.f) +0.5f; } + * static float unscale(const_float_t value) { return value / (100.f/255.f) +0.5f; } + * static const char* strfunc(const_float_t value) { return ui8tostr4pctrj(_DOFIX(uint8_t,value)); } * }; * typedef TMenuEditItem MenuItem_percent */ @@ -128,9 +128,9 @@ class TMenuEditItem : MenuEditItemBase { #define DEFINE_MENU_EDIT_ITEM_TYPE(NAME, TYPE, STRFUNC, SCALE, ETC...) \ struct MenuEditItemInfo_##NAME { \ typedef TYPE type_t; \ - static inline float scale(const_float_t value) { return value * (SCALE) ETC; } \ - static inline float unscale(const_float_t value) { return value / (SCALE) ETC; } \ - static inline const char* strfunc(const_float_t value) { return STRFUNC(_DOFIX(TYPE,value)); } \ + static float scale(const_float_t value) { return value * (SCALE) ETC; } \ + static float unscale(const_float_t value) { return value / (SCALE) ETC; } \ + static const char* strfunc(const_float_t value) { return STRFUNC(_DOFIX(TYPE,value)); } \ }; \ typedef TMenuEditItem MenuItem_##NAME diff --git a/Marlin/src/lcd/tft/tft.h b/Marlin/src/lcd/tft/tft.h index 1576518b4b..435e7c30bf 100644 --- a/Marlin/src/lcd/tft/tft.h +++ b/Marlin/src/lcd/tft/tft.h @@ -81,24 +81,24 @@ class TFT { static uint16_t buffer[TFT_BUFFER_SIZE]; static void init(); - static inline void set_font(const uint8_t *Font) { string.set_font(Font); } - static inline void add_glyphs(const uint8_t *Font) { string.add_glyphs(Font); } + static void set_font(const uint8_t *Font) { string.set_font(Font); } + static void add_glyphs(const uint8_t *Font) { string.add_glyphs(Font); } - static inline bool is_busy() { return io.isBusy(); } - static inline void abort() { io.Abort(); } - static inline void write_multiple(uint16_t Data, uint16_t Count) { io.WriteMultiple(Data, Count); } - static inline void write_sequence(uint16_t *Data, uint16_t Count) { io.WriteSequence(Data, Count); } - static inline void set_window(uint16_t Xmin, uint16_t Ymin, uint16_t Xmax, uint16_t Ymax) { io.set_window(Xmin, Ymin, Xmax, Ymax); } + static bool is_busy() { return io.isBusy(); } + static void abort() { io.Abort(); } + static void write_multiple(uint16_t Data, uint16_t Count) { io.WriteMultiple(Data, Count); } + static void write_sequence(uint16_t *Data, uint16_t Count) { io.WriteSequence(Data, Count); } + static void set_window(uint16_t Xmin, uint16_t Ymin, uint16_t Xmax, uint16_t Ymax) { io.set_window(Xmin, Ymin, Xmax, Ymax); } - static inline void fill(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) { queue.fill(x, y, width, height, color); } - static inline void canvas(uint16_t x, uint16_t y, uint16_t width, uint16_t height) { queue.canvas(x, y, width, height); } - static inline void set_background(uint16_t color) { queue.set_background(color); } - static inline void add_text(uint16_t x, uint16_t y, uint16_t color, TFT_String tft_string, uint16_t maxWidth = 0) { queue.add_text(x, y, color, tft_string.string(), maxWidth); } - static inline void add_text(uint16_t x, uint16_t y, uint16_t color, const char *string, uint16_t maxWidth = 0) { queue.add_text(x, y, color, (uint8_t *)string, maxWidth); } - static inline void add_image(int16_t x, int16_t y, MarlinImage image, uint16_t *colors) { queue.add_image(x, y, image, colors); } - static inline void add_image(int16_t x, int16_t y, MarlinImage image, uint16_t color_main = COLOR_WHITE, uint16_t color_background = COLOR_BACKGROUND, uint16_t color_shadow = COLOR_BLACK) { queue.add_image(x, y, image, color_main, color_background, color_shadow); } - static inline void add_bar(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) { queue.add_bar(x, y, width, height, color); } - static inline void add_rectangle(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) { queue.add_rectangle(x, y, width, height, color); } + static void fill(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) { queue.fill(x, y, width, height, color); } + static void canvas(uint16_t x, uint16_t y, uint16_t width, uint16_t height) { queue.canvas(x, y, width, height); } + static void set_background(uint16_t color) { queue.set_background(color); } + static void add_text(uint16_t x, uint16_t y, uint16_t color, TFT_String tft_string, uint16_t maxWidth = 0) { queue.add_text(x, y, color, tft_string.string(), maxWidth); } + static void add_text(uint16_t x, uint16_t y, uint16_t color, const char *string, uint16_t maxWidth = 0) { queue.add_text(x, y, color, (uint8_t *)string, maxWidth); } + static void add_image(int16_t x, int16_t y, MarlinImage image, uint16_t *colors) { queue.add_image(x, y, image, colors); } + static void add_image(int16_t x, int16_t y, MarlinImage image, uint16_t color_main = COLOR_WHITE, uint16_t color_background = COLOR_BACKGROUND, uint16_t color_shadow = COLOR_BLACK) { queue.add_image(x, y, image, color_main, color_background, color_shadow); } + static void add_bar(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) { queue.add_bar(x, y, width, height, color); } + static void add_rectangle(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color) { queue.add_rectangle(x, y, width, height, color); } static void draw_edit_screen_buttons(); }; diff --git a/Marlin/src/lcd/tft/tft_string.h b/Marlin/src/lcd/tft/tft_string.h index 133889d9ae..e486c2ee91 100644 --- a/Marlin/src/lcd/tft/tft_string.h +++ b/Marlin/src/lcd/tft/tft_string.h @@ -81,7 +81,7 @@ class TFT_String { static font_t *font() { return font_header; }; static uint16_t font_height() { return font_header->FontAscent - font_header->FontDescent; } static glyph_t *glyph(uint8_t character) { return glyphs[character] ?: glyphs[0x3F]; } /* Use '?' for unknown glyphs */ - static inline glyph_t *glyph(uint8_t *character) { return glyph(*character); } + static glyph_t *glyph(uint8_t *character) { return glyph(*character); } static void set(); static void add(uint8_t character) { add_character(character); eol(); } @@ -89,9 +89,9 @@ class TFT_String { static void add(uint8_t *string, int8_t index, uint8_t *itemString=nullptr); static void set(uint8_t *string) { set(); add(string); }; static void set(uint8_t *string, int8_t index, const char *itemString=nullptr) { set(); add(string, index, (uint8_t *)itemString); }; - static inline void set(const char *string) { set((uint8_t *)string); } - static inline void set(const char *string, int8_t index, const char *itemString=nullptr) { set((uint8_t *)string, index, itemString); } - static inline void add(const char *string) { add((uint8_t *)string); } + static void set(const char *string) { set((uint8_t *)string); } + static void set(const char *string, int8_t index, const char *itemString=nullptr) { set((uint8_t *)string, index, itemString); } + static void add(const char *string) { add((uint8_t *)string); } static void trim(uint8_t character=0x20); static void rtrim(uint8_t character=0x20); diff --git a/Marlin/src/lcd/tft/touch.h b/Marlin/src/lcd/tft/touch.h index 238453f765..6021a840b6 100644 --- a/Marlin/src/lcd/tft/touch.h +++ b/Marlin/src/lcd/tft/touch.h @@ -106,7 +106,7 @@ class Touch { static millis_t last_touch_ms, time_to_hold, repeat_delay, touch_time; static TouchControlType touch_control_type; - static inline bool get_point(int16_t *x, int16_t *y); + static bool get_point(int16_t *x, int16_t *y); static void touch(touch_control_t *control); static void hold(touch_control_t *control, millis_t delay = 0); @@ -126,7 +126,7 @@ class Touch { static void enable() { enabled = true; } #if HAS_TOUCH_SLEEP static millis_t next_sleep_ms; - static inline bool isSleeping() { return next_sleep_ms == TSLP_SLEEPING; } + static bool isSleeping() { return next_sleep_ms == TSLP_SLEEPING; } static void sleepTimeout(); static void wakeUp(); #endif diff --git a/Marlin/src/libs/L64XX/L64XX_Marlin.h b/Marlin/src/libs/L64XX/L64XX_Marlin.h index e11d8e872e..de7c0d6057 100644 --- a/Marlin/src/libs/L64XX/L64XX_Marlin.h +++ b/Marlin/src/libs/L64XX/L64XX_Marlin.h @@ -118,11 +118,11 @@ public: #if ENABLED(MONITOR_L6470_DRIVER_STATUS) static bool monitor_paused; - static inline void pause_monitor(const bool p) { monitor_paused = p; } + static void pause_monitor(const bool p) { monitor_paused = p; } static void monitor_update(L64XX_axis_t stepper_index); static void monitor_driver(); #else - static inline void pause_monitor(const bool) {} + static void pause_monitor(const bool) {} #endif //protected: diff --git a/Marlin/src/libs/buzzer.h b/Marlin/src/libs/buzzer.h index 21b69002ff..db5e3ee4ca 100644 --- a/Marlin/src/libs/buzzer.h +++ b/Marlin/src/libs/buzzer.h @@ -77,7 +77,7 @@ * @brief Resets the state of the class * @details Brings the class state to a known one. */ - static inline void reset() { + static void reset() { off(); state.endtime = 0; } @@ -86,7 +86,7 @@ /** * @brief Init Buzzer */ - static inline void init() { + static void init() { SET_OUTPUT(BEEPER_PIN); reset(); } diff --git a/Marlin/src/libs/stopwatch.h b/Marlin/src/libs/stopwatch.h index fe5101a5be..829d510050 100644 --- a/Marlin/src/libs/stopwatch.h +++ b/Marlin/src/libs/stopwatch.h @@ -53,7 +53,7 @@ class Stopwatch { * @return true on success */ static bool stop(); - static inline bool abort() { return stop(); } // Alias by default + static bool abort() { return stop(); } // Alias by default /** * @brief Pause the stopwatch @@ -114,7 +114,7 @@ class Stopwatch { #else - static inline void debug(FSTR_P const) {} + static void debug(FSTR_P const) {} #endif }; diff --git a/Marlin/src/module/endstops.h b/Marlin/src/module/endstops.h index a35966a98c..e1ee933e83 100644 --- a/Marlin/src/module/endstops.h +++ b/Marlin/src/module/endstops.h @@ -136,7 +136,7 @@ class Endstops { return enabled || TERN0(HAS_BED_PROBE, z_probe_enabled); } - static inline bool global_enabled() { return enabled_globally; } + static bool global_enabled() { return enabled_globally; } /** * Periodic call to poll endstops if required. Called from temperature ISR @@ -168,7 +168,7 @@ class Endstops { ; } - static inline bool probe_switch_activated() { + static bool probe_switch_activated() { return (true #if ENABLED(PROBE_ACTIVATION_SWITCH) && READ(PROBE_ACTIVATION_SWITCH_PIN) == PROBE_ACTIVATION_SWITCH_STATE diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index 69e3f035ba..380c35755c 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -431,15 +431,15 @@ class Planner { static int8_t xy_freq_limit_hz; // Minimum XY frequency setting static float xy_freq_min_speed_factor; // Minimum speed factor setting static int32_t xy_freq_min_interval_us; // Minimum segment time based on xy_freq_limit_hz - static inline void refresh_frequency_limit() { + static void refresh_frequency_limit() { //xy_freq_min_interval_us = xy_freq_limit_hz ?: LROUND(1000000.0f / xy_freq_limit_hz); if (xy_freq_limit_hz) xy_freq_min_interval_us = LROUND(1000000.0f / xy_freq_limit_hz); } - static inline void set_min_speed_factor_u8(const uint8_t v255) { + static void set_min_speed_factor_u8(const uint8_t v255) { xy_freq_min_speed_factor = float(ui8_to_percent(v255)) / 100; } - static inline void set_frequency_limit(const uint8_t hz) { + static void set_frequency_limit(const uint8_t hz) { xy_freq_limit_hz = constrain(hz, 0, 100); refresh_frequency_limit(); } @@ -508,7 +508,7 @@ class Planner { #if HAS_CLASSIC_JERK static void set_max_jerk(const AxisEnum axis, float inMaxJerkMMS); #else - static inline void set_max_jerk(const AxisEnum, const_float_t) {} + static void set_max_jerk(const AxisEnum, const_float_t) {} #endif #if HAS_EXTRUDERS @@ -516,7 +516,7 @@ class Planner { e_factor[e] = flow_percentage[e] * 0.01f * TERN(NO_VOLUMETRICS, 1.0f, volumetric_multiplier[e]); } - static inline void set_flow(const uint8_t e, const int16_t flow) { + static void set_flow(const uint8_t e, const int16_t flow) { flow_percentage[e] = flow; refresh_e_factor(e); } @@ -539,7 +539,7 @@ class Planner { #if ENABLED(FILAMENT_WIDTH_SENSOR) void apply_filament_width_sensor(const int8_t encoded_ratio); - static inline float volumetric_percent(const bool vol) { + static float volumetric_percent(const bool vol) { return 100.0f * (vol ? volumetric_area_nominal / volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM] : volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM] @@ -588,7 +588,7 @@ class Planner { * Returns 1.0 if planner.z_fade_height is 0.0. * Returns 0.0 if Z is past the specified 'Fade Height'. */ - static inline float fade_scaling_factor_for_z(const_float_t rz) { + static float fade_scaling_factor_for_z(const_float_t rz) { static float z_fade_factor = 1; if (!z_fade_height) return 1; if (rz >= z_fade_height) return 0; @@ -838,7 +838,7 @@ class Planner { */ static float get_axis_position_mm(const AxisEnum axis); - static inline abce_pos_t get_axis_positions_mm() { + static abce_pos_t get_axis_positions_mm() { const abce_pos_t out = LOGICAL_AXIS_ARRAY( get_axis_position_mm(E_AXIS), get_axis_position_mm(A_AXIS), get_axis_position_mm(B_AXIS), get_axis_position_mm(C_AXIS), @@ -870,7 +870,7 @@ class Planner { static float triggered_position_mm(const AxisEnum axis); // Blocks are queued, or we're running out moves, or the closed loop controller is waiting - static inline bool busy() { + static bool busy() { return (has_blocks_queued() || cleaning_buffer_counter || TERN0(EXTERNAL_CLOSED_LOOP_CONTROLLER, CLOSED_LOOP_WAITING()) ); @@ -938,7 +938,7 @@ class Planner { #if ENABLED(AUTOTEMP_PROPORTIONAL) static void _autotemp_update_from_hotend(); #else - static inline void _autotemp_update_from_hotend() {} + static void _autotemp_update_from_hotend() {} #endif #endif diff --git a/Marlin/src/module/printcounter.h b/Marlin/src/module/printcounter.h index 4deae45a65..931d14ded6 100644 --- a/Marlin/src/module/printcounter.h +++ b/Marlin/src/module/printcounter.h @@ -112,7 +112,7 @@ class PrintCounter: public Stopwatch { /** * @brief Initialize the print counter */ - static inline void init() { + static void init() { super::init(); loadStats(); } @@ -176,8 +176,8 @@ class PrintCounter: public Stopwatch { */ static bool start(); static bool _stop(const bool completed); - static inline bool stop() { return _stop(true); } - static inline bool abort() { return _stop(false); } + static bool stop() { return _stop(true); } + static bool abort() { return _stop(false); } static void reset(); diff --git a/Marlin/src/module/settings.h b/Marlin/src/module/settings.h index 967d49c073..a8fca60baa 100644 --- a/Marlin/src/module/settings.h +++ b/Marlin/src/module/settings.h @@ -59,7 +59,7 @@ class MarlinSettings { static bool load(); // Return 'true' if data was loaded ok static bool validate(); // Return 'true' if EEPROM data is ok - static inline void first_load() { + static void first_load() { static bool loaded = false; if (!loaded && load()) loaded = true; } diff --git a/Marlin/src/module/stepper.h b/Marlin/src/module/stepper.h index f170dd4104..6b190889cd 100644 --- a/Marlin/src/module/stepper.h +++ b/Marlin/src/module/stepper.h @@ -457,11 +457,11 @@ class Stepper { // The stepper subsystem goes to sleep when it runs out of things to execute. // Call this to notify the subsystem that it is time to go to work. - static inline void wake_up() { ENABLE_STEPPER_DRIVER_INTERRUPT(); } + static void wake_up() { ENABLE_STEPPER_DRIVER_INTERRUPT(); } - static inline bool is_awake() { return STEPPER_ISR_ENABLED(); } + static bool is_awake() { return STEPPER_ISR_ENABLED(); } - static inline bool suspend() { + static bool suspend() { const bool awake = is_awake(); if (awake) DISABLE_STEPPER_DRIVER_INTERRUPT(); return awake; @@ -564,7 +564,7 @@ class Stepper { FORCE_INLINE static void set_z4_lock(const bool state) { locked_Z4_motor = state; } #endif #endif - static inline void set_all_z_lock(const bool lock, const int8_t except=-1) { + static void set_all_z_lock(const bool lock, const int8_t except=-1) { set_z1_lock(lock ^ (except == 0)); set_z2_lock(lock ^ (except == 1)); #if NUM_Z_STEPPER_DRIVERS >= 3 @@ -586,16 +586,16 @@ class Stepper { static axis_flags_t axis_enabled; // Axis stepper(s) ENABLED states - static inline bool axis_is_enabled(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) { + static bool axis_is_enabled(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) { return TEST(axis_enabled.bits, INDEX_OF_AXIS(axis, eindex)); } - static inline void mark_axis_enabled(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) { + static void mark_axis_enabled(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) { SBI(axis_enabled.bits, INDEX_OF_AXIS(axis, eindex)); } - static inline void mark_axis_disabled(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) { + static void mark_axis_disabled(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) { CBI(axis_enabled.bits, INDEX_OF_AXIS(axis, eindex)); } - static inline bool can_axis_disable(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) { + static bool can_axis_disable(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) { return !any_enable_overlap() || !(axis_enabled.bits & enable_overlap[INDEX_OF_AXIS(axis, eindex)]); } @@ -608,10 +608,10 @@ class Stepper { static void enable_e_steppers(); static void disable_e_steppers(); #else - static inline void enable_extruder() {} - static inline bool disable_extruder() { return true; } - static inline void enable_e_steppers() {} - static inline void disable_e_steppers() {} + static void enable_extruder() {} + static bool disable_extruder() { return true; } + static void enable_e_steppers() {} + static void disable_e_steppers() {} #endif #define ENABLE_EXTRUDER(N) enable_extruder(E_TERN_(N)) diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index 0e4302938e..1ca0f3e88c 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -359,7 +359,7 @@ class Temperature { #if HAS_HOTEND static hotend_info_t temp_hotend[HOTENDS]; static const celsius_t hotend_maxtemp[HOTENDS]; - static inline celsius_t hotend_max_target(const uint8_t e) { return hotend_maxtemp[e] - (HOTEND_OVERSHOOT); } + static celsius_t hotend_max_target(const uint8_t e) { return hotend_maxtemp[e] - (HOTEND_OVERSHOOT); } #endif #if HAS_HEATED_BED static bed_info_t temp_bed; @@ -402,16 +402,16 @@ class Temperature { #if ENABLED(PREVENT_COLD_EXTRUSION) static bool allow_cold_extrude; static celsius_t extrude_min_temp; - static inline bool tooCold(const celsius_t temp) { return allow_cold_extrude ? false : temp < extrude_min_temp - (TEMP_WINDOW); } - static inline bool tooColdToExtrude(const uint8_t E_NAME) { return tooCold(wholeDegHotend(HOTEND_INDEX)); } - static inline bool targetTooColdToExtrude(const uint8_t E_NAME) { return tooCold(degTargetHotend(HOTEND_INDEX)); } + static bool tooCold(const celsius_t temp) { return allow_cold_extrude ? false : temp < extrude_min_temp - (TEMP_WINDOW); } + static bool tooColdToExtrude(const uint8_t E_NAME) { return tooCold(wholeDegHotend(HOTEND_INDEX)); } + static bool targetTooColdToExtrude(const uint8_t E_NAME) { return tooCold(degTargetHotend(HOTEND_INDEX)); } #else - static inline bool tooColdToExtrude(const uint8_t) { return false; } - static inline bool targetTooColdToExtrude(const uint8_t) { return false; } + static bool tooColdToExtrude(const uint8_t) { return false; } + static bool targetTooColdToExtrude(const uint8_t) { return false; } #endif - static inline bool hotEnoughToExtrude(const uint8_t e) { return !tooColdToExtrude(e); } - static inline bool targetHotEnoughToExtrude(const uint8_t e) { return !targetTooColdToExtrude(e); } + static bool hotEnoughToExtrude(const uint8_t e) { return !tooColdToExtrude(e); } + static bool targetHotEnoughToExtrude(const uint8_t e) { return !targetTooColdToExtrude(e); } #if EITHER(SINGLENOZZLE_STANDBY_TEMP, SINGLENOZZLE_STANDBY_FAN) #if ENABLED(SINGLENOZZLE_STANDBY_TEMP) @@ -449,7 +449,7 @@ class Temperature { }; // Convert the given heater_id_t to idle array index - static inline IdleIndex idle_index_for_id(const int8_t heater_id) { + static IdleIndex idle_index_for_id(const int8_t heater_id) { TERN_(HAS_HEATED_BED, if (heater_id == H_BED) return IDLE_INDEX_BED); return (IdleIndex)_MAX(heater_id, 0); } @@ -525,7 +525,7 @@ class Temperature { #if HAS_FAN_LOGIC static millis_t fan_update_ms; - static inline void manage_extruder_fans(millis_t ms) { + static void manage_extruder_fans(millis_t ms) { if (ELAPSED(ms, fan_update_ms)) { // only need to check fan state very infrequently const millis_t next_ms = ms + fan_update_interval_ms; #if HAS_PWMFANCHECK @@ -566,25 +566,25 @@ class Temperature { static void M305_report(const uint8_t t_index, const bool forReplay=true); static void reset_user_thermistors(); static celsius_float_t user_thermistor_to_deg_c(const uint8_t t_index, const int16_t raw); - static inline bool set_pull_up_res(int8_t t_index, float value) { + static bool set_pull_up_res(int8_t t_index, float value) { //if (!WITHIN(t_index, 0, USER_THERMISTORS - 1)) return false; if (!WITHIN(value, 1, 1000000)) return false; user_thermistor[t_index].series_res = value; return true; } - static inline bool set_res25(int8_t t_index, float value) { + static bool set_res25(int8_t t_index, float value) { if (!WITHIN(value, 1, 10000000)) return false; user_thermistor[t_index].res_25 = value; user_thermistor[t_index].pre_calc = true; return true; } - static inline bool set_beta(int8_t t_index, float value) { + static bool set_beta(int8_t t_index, float value) { if (!WITHIN(value, 1, 1000000)) return false; user_thermistor[t_index].beta = value; user_thermistor[t_index].pre_calc = true; return true; } - static inline bool set_sh_coeff(int8_t t_index, float value) { + static bool set_sh_coeff(int8_t t_index, float value) { if (!WITHIN(value, -0.01f, 0.01f)) return false; user_thermistor[t_index].sh_c_coeff = value; user_thermistor[t_index].pre_calc = true; @@ -634,18 +634,18 @@ class Temperature { static uint8_t fan_speed_scaler[FAN_COUNT]; #endif - static inline uint8_t scaledFanSpeed(const uint8_t fan, const uint8_t fs) { + static uint8_t scaledFanSpeed(const uint8_t fan, const uint8_t fs) { UNUSED(fan); // Potentially unused! return (fs * uint16_t(TERN(ADAPTIVE_FAN_SLOWING, fan_speed_scaler[fan], 128))) >> 7; } - static inline uint8_t scaledFanSpeed(const uint8_t fan) { + static uint8_t scaledFanSpeed(const uint8_t fan) { return scaledFanSpeed(fan, fan_speed[fan]); } static constexpr inline uint8_t pwmToPercent(const uint8_t speed) { return ui8_to_percent(speed); } - static inline uint8_t fanSpeedPercent(const uint8_t fan) { return ui8_to_percent(fan_speed[fan]); } - static inline uint8_t scaledFanSpeedPercent(const uint8_t fan) { return ui8_to_percent(scaledFanSpeed(fan)); } + static uint8_t fanSpeedPercent(const uint8_t fan) { return ui8_to_percent(fan_speed[fan]); } + static uint8_t scaledFanSpeedPercent(const uint8_t fan) { return ui8_to_percent(scaledFanSpeed(fan)); } #if ENABLED(EXTRA_FAN_SPEED) typedef struct { uint8_t saved, speed; } extra_fan_t; @@ -659,7 +659,7 @@ class Temperature { #endif // HAS_FAN - static inline void zero_fan_speeds() { + static void zero_fan_speeds() { #if HAS_FAN FANS_LOOP(i) set_fan_speed(i, 0); #endif @@ -680,13 +680,13 @@ class Temperature { * Preheating hotends */ #if MILLISECONDS_PREHEAT_TIME > 0 - static inline bool is_preheating(const uint8_t E_NAME) { + static bool is_preheating(const uint8_t E_NAME) { return preheat_end_time[HOTEND_INDEX] && PENDING(millis(), preheat_end_time[HOTEND_INDEX]); } - static inline void start_preheat_time(const uint8_t E_NAME) { + static void start_preheat_time(const uint8_t E_NAME) { preheat_end_time[HOTEND_INDEX] = millis() + MILLISECONDS_PREHEAT_TIME; } - static inline void reset_preheat_time(const uint8_t E_NAME) { + static void reset_preheat_time(const uint8_t E_NAME) { preheat_end_time[HOTEND_INDEX] = 0; } #else @@ -697,21 +697,21 @@ class Temperature { //inline so that there is no performance decrease. //deg=degreeCelsius - static inline celsius_float_t degHotend(const uint8_t E_NAME) { + static celsius_float_t degHotend(const uint8_t E_NAME) { return TERN0(HAS_HOTEND, temp_hotend[HOTEND_INDEX].celsius); } - static inline celsius_t wholeDegHotend(const uint8_t E_NAME) { + static celsius_t wholeDegHotend(const uint8_t E_NAME) { return TERN0(HAS_HOTEND, static_cast(temp_hotend[HOTEND_INDEX].celsius + 0.5f)); } #if ENABLED(SHOW_TEMP_ADC_VALUES) - static inline int16_t rawHotendTemp(const uint8_t E_NAME) { + static int16_t rawHotendTemp(const uint8_t E_NAME) { return TERN0(HAS_HOTEND, temp_hotend[HOTEND_INDEX].raw); } #endif - static inline celsius_t degTargetHotend(const uint8_t E_NAME) { + static celsius_t degTargetHotend(const uint8_t E_NAME) { return TERN0(HAS_HOTEND, temp_hotend[HOTEND_INDEX].target); } @@ -730,11 +730,11 @@ class Temperature { start_watching_hotend(ee); } - static inline bool isHeatingHotend(const uint8_t E_NAME) { + static bool isHeatingHotend(const uint8_t E_NAME) { return temp_hotend[HOTEND_INDEX].target > temp_hotend[HOTEND_INDEX].celsius; } - static inline bool isCoolingHotend(const uint8_t E_NAME) { + static bool isCoolingHotend(const uint8_t E_NAME) { return temp_hotend[HOTEND_INDEX].target < temp_hotend[HOTEND_INDEX].celsius; } @@ -748,16 +748,16 @@ class Temperature { #endif #endif - static inline bool still_heating(const uint8_t e) { + static bool still_heating(const uint8_t e) { return degTargetHotend(e) > TEMP_HYSTERESIS && ABS(wholeDegHotend(e) - degTargetHotend(e)) > TEMP_HYSTERESIS; } - static inline bool degHotendNear(const uint8_t e, const celsius_t temp) { + static bool degHotendNear(const uint8_t e, const celsius_t temp) { return ABS(wholeDegHotend(e) - temp) < (TEMP_HYSTERESIS); } // Start watching a Hotend to make sure it's really heating up - static inline void start_watching_hotend(const uint8_t E_NAME) { + static void start_watching_hotend(const uint8_t E_NAME) { UNUSED(HOTEND_INDEX); #if WATCH_HOTENDS watch_hotend[HOTEND_INDEX].restart(degHotend(HOTEND_INDEX), degTargetHotend(HOTEND_INDEX)); @@ -769,16 +769,16 @@ class Temperature { #if HAS_HEATED_BED #if ENABLED(SHOW_TEMP_ADC_VALUES) - static inline int16_t rawBedTemp() { return temp_bed.raw; } + static int16_t rawBedTemp() { return temp_bed.raw; } #endif - static inline celsius_float_t degBed() { return temp_bed.celsius; } - static inline celsius_t wholeDegBed() { return static_cast(degBed() + 0.5f); } - static inline celsius_t degTargetBed() { return temp_bed.target; } - static inline bool isHeatingBed() { return temp_bed.target > temp_bed.celsius; } - static inline bool isCoolingBed() { return temp_bed.target < temp_bed.celsius; } + static celsius_float_t degBed() { return temp_bed.celsius; } + static celsius_t wholeDegBed() { return static_cast(degBed() + 0.5f); } + static celsius_t degTargetBed() { return temp_bed.target; } + static bool isHeatingBed() { return temp_bed.target > temp_bed.celsius; } + static bool isCoolingBed() { return temp_bed.target < temp_bed.celsius; } // Start watching the Bed to make sure it's really heating up - static inline void start_watching_bed() { TERN_(WATCH_BED, watch_bed.restart(degBed(), degTargetBed())); } + static void start_watching_bed() { TERN_(WATCH_BED, watch_bed.restart(degBed(), degTargetBed())); } static void setTargetBed(const celsius_t celsius) { TERN_(AUTO_POWER_CONTROL, if (celsius) powerManager.power_on()); @@ -792,7 +792,7 @@ class Temperature { static void wait_for_bed_heating(); - static inline bool degBedNear(const celsius_t temp) { + static bool degBedNear(const celsius_t temp) { return ABS(wholeDegBed() - temp) < (TEMP_BED_HYSTERESIS); } @@ -800,25 +800,25 @@ class Temperature { #if HAS_TEMP_PROBE #if ENABLED(SHOW_TEMP_ADC_VALUES) - static inline int16_t rawProbeTemp() { return temp_probe.raw; } + static int16_t rawProbeTemp() { return temp_probe.raw; } #endif - static inline celsius_float_t degProbe() { return temp_probe.celsius; } - static inline celsius_t wholeDegProbe() { return static_cast(degProbe() + 0.5f); } - static inline bool isProbeBelowTemp(const celsius_t target_temp) { return wholeDegProbe() < target_temp; } - static inline bool isProbeAboveTemp(const celsius_t target_temp) { return wholeDegProbe() > target_temp; } + static celsius_float_t degProbe() { return temp_probe.celsius; } + static celsius_t wholeDegProbe() { return static_cast(degProbe() + 0.5f); } + static bool isProbeBelowTemp(const celsius_t target_temp) { return wholeDegProbe() < target_temp; } + static bool isProbeAboveTemp(const celsius_t target_temp) { return wholeDegProbe() > target_temp; } static bool wait_for_probe(const celsius_t target_temp, bool no_wait_for_cooling=true); #endif #if HAS_TEMP_CHAMBER #if ENABLED(SHOW_TEMP_ADC_VALUES) - static inline int16_t rawChamberTemp() { return temp_chamber.raw; } + static int16_t rawChamberTemp() { return temp_chamber.raw; } #endif - static inline celsius_float_t degChamber() { return temp_chamber.celsius; } - static inline celsius_t wholeDegChamber() { return static_cast(degChamber() + 0.5f); } + static celsius_float_t degChamber() { return temp_chamber.celsius; } + static celsius_t wholeDegChamber() { return static_cast(degChamber() + 0.5f); } #if HAS_HEATED_CHAMBER - static inline celsius_t degTargetChamber() { return temp_chamber.target; } - static inline bool isHeatingChamber() { return temp_chamber.target > temp_chamber.celsius; } - static inline bool isCoolingChamber() { return temp_chamber.target < temp_chamber.celsius; } + static celsius_t degTargetChamber() { return temp_chamber.target; } + static bool isHeatingChamber() { return temp_chamber.target > temp_chamber.celsius; } + static bool isCoolingChamber() { return temp_chamber.target < temp_chamber.celsius; } static bool wait_for_chamber(const bool no_wait_for_cooling=true); #endif #endif @@ -829,49 +829,49 @@ class Temperature { start_watching_chamber(); } // Start watching the Chamber to make sure it's really heating up - static inline void start_watching_chamber() { TERN_(WATCH_CHAMBER, watch_chamber.restart(degChamber(), degTargetChamber())); } + static void start_watching_chamber() { TERN_(WATCH_CHAMBER, watch_chamber.restart(degChamber(), degTargetChamber())); } #endif #if HAS_TEMP_COOLER #if ENABLED(SHOW_TEMP_ADC_VALUES) - static inline int16_t rawCoolerTemp() { return temp_cooler.raw; } + static int16_t rawCoolerTemp() { return temp_cooler.raw; } #endif - static inline celsius_float_t degCooler() { return temp_cooler.celsius; } - static inline celsius_t wholeDegCooler() { return static_cast(temp_cooler.celsius + 0.5f); } + static celsius_float_t degCooler() { return temp_cooler.celsius; } + static celsius_t wholeDegCooler() { return static_cast(temp_cooler.celsius + 0.5f); } #if HAS_COOLER - static inline celsius_t degTargetCooler() { return temp_cooler.target; } - static inline bool isLaserHeating() { return temp_cooler.target > temp_cooler.celsius; } - static inline bool isLaserCooling() { return temp_cooler.target < temp_cooler.celsius; } + static celsius_t degTargetCooler() { return temp_cooler.target; } + static bool isLaserHeating() { return temp_cooler.target > temp_cooler.celsius; } + static bool isLaserCooling() { return temp_cooler.target < temp_cooler.celsius; } static bool wait_for_cooler(const bool no_wait_for_cooling=true); #endif #endif #if HAS_TEMP_BOARD #if ENABLED(SHOW_TEMP_ADC_VALUES) - static inline int16_t rawBoardTemp() { return temp_board.raw; } + static int16_t rawBoardTemp() { return temp_board.raw; } #endif - static inline celsius_float_t degBoard() { return temp_board.celsius; } - static inline celsius_t wholeDegBoard() { return static_cast(temp_board.celsius + 0.5f); } + static celsius_float_t degBoard() { return temp_board.celsius; } + static celsius_t wholeDegBoard() { return static_cast(temp_board.celsius + 0.5f); } #endif #if HAS_TEMP_REDUNDANT #if ENABLED(SHOW_TEMP_ADC_VALUES) - static inline int16_t rawRedundantTemp() { return temp_redundant.raw; } - static inline int16_t rawRedundanTargetTemp() { return (*temp_redundant.target).raw; } + static int16_t rawRedundantTemp() { return temp_redundant.raw; } + static int16_t rawRedundanTargetTemp() { return (*temp_redundant.target).raw; } #endif - static inline celsius_float_t degRedundant() { return temp_redundant.celsius; } - static inline celsius_float_t degRedundantTarget() { return (*temp_redundant.target).celsius; } - static inline celsius_t wholeDegRedundant() { return static_cast(temp_redundant.celsius + 0.5f); } - static inline celsius_t wholeDegRedundantTarget() { return static_cast((*temp_redundant.target).celsius + 0.5f); } + static celsius_float_t degRedundant() { return temp_redundant.celsius; } + static celsius_float_t degRedundantTarget() { return (*temp_redundant.target).celsius; } + static celsius_t wholeDegRedundant() { return static_cast(temp_redundant.celsius + 0.5f); } + static celsius_t wholeDegRedundantTarget() { return static_cast((*temp_redundant.target).celsius + 0.5f); } #endif #if HAS_COOLER - static inline void setTargetCooler(const celsius_t celsius) { + static void setTargetCooler(const celsius_t celsius) { temp_cooler.target = constrain(celsius, COOLER_MIN_TARGET, COOLER_MAX_TARGET); start_watching_cooler(); } // Start watching the Cooler to make sure it's really cooling down - static inline void start_watching_cooler() { TERN_(WATCH_COOLER, watch_cooler.restart(degCooler(), degTargetCooler())); } + static void start_watching_cooler() { TERN_(WATCH_COOLER, watch_cooler.restart(degCooler(), degTargetCooler())); } #endif /** @@ -887,7 +887,7 @@ class Temperature { /** * Cooldown, as from the LCD. Disables all heaters and fans. */ - static inline void cooldown() { + static void cooldown() { zero_fan_speeds(); disable_all_heaters(); } @@ -921,7 +921,7 @@ class Temperature { * Update the temp manager when PID values change */ #if ENABLED(PIDTEMP) - static inline void updatePID() { + static void updatePID() { TERN_(PID_EXTRUSION_SCALING, last_e_position = 0); } #endif @@ -934,13 +934,13 @@ class Temperature { #if HEATER_IDLE_HANDLER - static inline void reset_hotend_idle_timer(const uint8_t E_NAME) { + static void reset_hotend_idle_timer(const uint8_t E_NAME) { heater_idle[HOTEND_INDEX].reset(); start_watching_hotend(HOTEND_INDEX); } #if HAS_HEATED_BED - static inline void reset_bed_idle_timer() { + static void reset_bed_idle_timer() { heater_idle[IDLE_INDEX_BED].reset(); start_watching_bed(); } @@ -961,7 +961,7 @@ class Temperature { #if HAS_HOTEND && HAS_STATUS_MESSAGE static void set_heating_message(const uint8_t e); #else - static inline void set_heating_message(const uint8_t) {} + static void set_heating_message(const uint8_t) {} #endif #if HAS_LCD_MENU && HAS_TEMPERATURE @@ -974,7 +974,7 @@ class Temperature { static volatile bool raw_temps_ready; static void update_raw_temperatures(); static void updateTemperaturesFromRawValues(); - static inline bool updateTemperaturesIfReady() { + static bool updateTemperaturesIfReady() { if (!raw_temps_ready) return false; updateTemperaturesFromRawValues(); raw_temps_ready = false; @@ -1028,7 +1028,7 @@ class Temperature { }; // Convert the given heater_id_t to runaway state array index - static inline RunawayIndex runaway_index_for_id(const int8_t heater_id) { + static RunawayIndex runaway_index_for_id(const int8_t heater_id) { TERN_(HAS_THERMALLY_PROTECTED_CHAMBER, if (heater_id == H_CHAMBER) return RUNAWAY_IND_CHAMBER); TERN_(HAS_THERMALLY_PROTECTED_CHAMBER, if (heater_id == H_COOLER) return RUNAWAY_IND_COOLER); TERN_(HAS_THERMALLY_PROTECTED_BED, if (heater_id == H_BED) return RUNAWAY_IND_BED); diff --git a/Marlin/src/sd/cardreader.h b/Marlin/src/sd/cardreader.h index 53e1a7ffc3..97e9bba867 100644 --- a/Marlin/src/sd/cardreader.h +++ b/Marlin/src/sd/cardreader.h @@ -115,7 +115,7 @@ public: static void mount(); static void release(); - static inline bool isMounted() { return flag.mounted; } + static bool isMounted() { return flag.mounted; } // Handle media insert/remove static void manage_media(); @@ -128,7 +128,7 @@ public: static uint8_t autofile_index; // Next auto#.g index to run, plus one. Ignored by autofile_check when zero. static void autofile_begin(); // Begin check. Called automatically after boot-up. static bool autofile_check(); // Check for the next auto-start file and run it. - static inline void autofile_cancel() { autofile_index = 0; } + static void autofile_cancel() { autofile_index = 0; } #endif // Basic file ops @@ -138,7 +138,7 @@ public: static bool fileExists(const char * const name); static void removeFile(const char * const name); - static inline char* longest_filename() { return longFilename[0] ? longFilename : filename; } + static char* longest_filename() { return longFilename[0] ? longFilename : filename; } #if ENABLED(LONG_FILENAME_HOST_SUPPORT) static void printLongPath(char * const path); // Used by M33 #endif @@ -163,18 +163,18 @@ public: static void endFilePrintNow(TERN_(SD_RESORT, const bool re_sort=false)); static void abortFilePrintNow(TERN_(SD_RESORT, const bool re_sort=false)); static void fileHasFinished(); - static inline void abortFilePrintSoon() { flag.abort_sd_printing = isFileOpen(); } - static inline void pauseSDPrint() { flag.sdprinting = false; } - static inline bool isPrinting() { return flag.sdprinting; } - static inline bool isPaused() { return isFileOpen() && !isPrinting(); } + static void abortFilePrintSoon() { flag.abort_sd_printing = isFileOpen(); } + static void pauseSDPrint() { flag.sdprinting = false; } + static bool isPrinting() { return flag.sdprinting; } + static bool isPaused() { return isFileOpen() && !isPrinting(); } #if HAS_PRINT_PROGRESS_PERMYRIAD - static inline uint16_t permyriadDone() { + static uint16_t permyriadDone() { if (flag.sdprintdone) return 10000; if (isFileOpen() && filesize) return sdpos / ((filesize + 9999) / 10000); return 0; } #endif - static inline uint8_t percentDone() { + static uint8_t percentDone() { if (flag.sdprintdone) return 100; if (isFileOpen() && filesize) return sdpos / ((filesize + 99) / 100); return 0; @@ -213,20 +213,20 @@ public: #endif // Current Working Dir - Set by cd, cdup, cdroot, and diveToFile(true, ...) - static inline char* getWorkDirName() { workDir.getDosName(filename); return filename; } - static inline SdFile& getWorkDir() { return workDir.isOpen() ? workDir : root; } + static char* getWorkDirName() { workDir.getDosName(filename); return filename; } + static SdFile& getWorkDir() { return workDir.isOpen() ? workDir : root; } // Print File stats - static inline uint32_t getFileSize() { return filesize; } - static inline uint32_t getIndex() { return sdpos; } - static inline bool isFileOpen() { return isMounted() && file.isOpen(); } - static inline bool eof() { return getIndex() >= getFileSize(); } + static uint32_t getFileSize() { return filesize; } + static uint32_t getIndex() { return sdpos; } + static bool isFileOpen() { return isMounted() && file.isOpen(); } + static bool eof() { return getIndex() >= getFileSize(); } // File data operations - static inline int16_t get() { int16_t out = (int16_t)file.read(); sdpos = file.curPosition(); return out; } - static inline int16_t read(void *buf, uint16_t nbyte) { return file.isOpen() ? file.read(buf, nbyte) : -1; } - static inline int16_t write(void *buf, uint16_t nbyte) { return file.isOpen() ? file.write(buf, nbyte) : -1; } - static inline void setIndex(const uint32_t index) { file.seekSet((sdpos = index)); } + static int16_t get() { int16_t out = (int16_t)file.read(); sdpos = file.curPosition(); return out; } + static int16_t read(void *buf, uint16_t nbyte) { return file.isOpen() ? file.read(buf, nbyte) : -1; } + static int16_t write(void *buf, uint16_t nbyte) { return file.isOpen() ? file.write(buf, nbyte) : -1; } + static void setIndex(const uint32_t index) { file.seekSet((sdpos = index)); } // TODO: rename to diskIODriver() static DiskIODriver* diskIODriver() { return driver; } From f3b8b0b5b94cbd96bb3cdb48625942b14e17babc Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 28 Dec 2021 18:29:05 -0600 Subject: [PATCH 289/532] =?UTF-8?q?=F0=9F=9A=9A=20Rename=20L6470=20G-code?= =?UTF-8?q?=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/feature/L6470/{M916-918.cpp => M916-M918.cpp} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Marlin/src/gcode/feature/L6470/{M916-918.cpp => M916-M918.cpp} (100%) diff --git a/Marlin/src/gcode/feature/L6470/M916-918.cpp b/Marlin/src/gcode/feature/L6470/M916-M918.cpp similarity index 100% rename from Marlin/src/gcode/feature/L6470/M916-918.cpp rename to Marlin/src/gcode/feature/L6470/M916-M918.cpp From 6d1eaa0efaef69b383e7b0f9fe3a53468f17f245 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 29 Dec 2021 01:05:01 +0000 Subject: [PATCH 290/532] [cron] Bump distribution date (2021-12-29) --- 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 ca2fb62834..8afd313616 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 "2021-12-28" +//#define STRING_DISTRIBUTION_DATE "2021-12-29" /** * 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 c2963ee832..13154d0d19 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 "2021-12-28" + #define STRING_DISTRIBUTION_DATE "2021-12-29" #endif /** From 16a1a55ceaa6717eae7d075e2d6d685ce25896ed Mon Sep 17 00:00:00 2001 From: Lefteris Garyfalakis <46350667+lefterisgar@users.noreply.github.com> Date: Wed, 29 Dec 2021 05:22:01 +0200 Subject: [PATCH 291/532] =?UTF-8?q?=F0=9F=8E=A8=20E3V2=20corner=20leveling?= =?UTF-8?q?=20=3D>=20tramming=20(#23375)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 48 +++++++++++++-------------- Marlin/src/lcd/e3v2/enhanced/dwin.h | 2 +- Marlin/src/lcd/e3v2/enhanced/dwinui.h | 2 +- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index 64a85b4b23..080b6f170a 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -216,7 +216,7 @@ static bool sdprint = false; // New menu system pointers MenuClass *PrepareMenu = nullptr; -MenuClass *LevBedMenu = nullptr; +MenuClass *TrammingMenu = nullptr; MenuClass *MoveMenu = nullptr; MenuClass *ControlMenu = nullptr; MenuClass *AdvancedSettings = nullptr; @@ -1703,8 +1703,8 @@ void HMI_SaveProcessID(const uint8_t id) { void DWIN_StartHoming() { HMI_flag.home_flag = true; HMI_SaveProcessID(Homing); - Title.ShowCaption(F("Axis Homing")); - DWIN_Draw_Popup(ICON_BLTouch, F("Axis Homing"), F("Please wait until done.")); + Title.ShowCaption(GET_TEXT_F(MSG_LEVEL_BED_HOMING)); + DWIN_Draw_Popup(ICON_BLTouch, GET_TEXT_F(MSG_LEVEL_BED_HOMING), F("Please wait until done.")); } void DWIN_CompletedHoming() { @@ -1719,7 +1719,7 @@ void DWIN_CompletedHoming() { void DWIN_MeshLevelingStart() { #if HAS_ONESTEP_LEVELING HMI_SaveProcessID(Leveling); - Title.ShowCaption(F("Bed Leveling")); + Title.ShowCaption(GET_TEXT_F(MSG_BED_LEVELING)); DWIN_Draw_Popup(ICON_AutoLeveling, GET_TEXT_F(MSG_BED_LEVELING), F("Please wait until done.")); #elif ENABLED(MESH_BED_LEVELING) Draw_ManualMesh_Menu(); @@ -2403,18 +2403,16 @@ void SetSpeed() { SetPIntOnClick(MIN_PRINT_SPEED, MAX_PRINT_SPEED); } void ApplyFlow() { planner.refresh_e_factor(0); } void SetFlow() { SetPIntOnClick(MIN_PRINT_FLOW, MAX_PRINT_FLOW, ApplyFlow); } -// Leveling Bed Corners -void LevBed(uint8_t point) { +// Bed Tramming +void Tram(uint8_t point) { char cmd[100] = ""; #if HAS_ONESTEP_LEVELING static bool inLev = false; if (inLev) return; char str_1[6] = "", str_2[6] = "", str_3[6] = ""; - #define fmt "X:%s, Y:%s, Z:%s" float xpos = 0, ypos = 0, zval = 0; float margin = PROBING_MARGIN; #else - #define fmt "M420S0\nG28O\nG90\nG0Z5F300\nG0X%iY%iF5000\nG0Z0F300" int16_t xpos = 0, ypos = 0; int16_t margin = 30; #endif @@ -2449,7 +2447,7 @@ void LevBed(uint8_t point) { planner.synchronize(); inLev = true; zval = probe.probe_at_point(xpos, ypos, PROBE_PT_STOW); - sprintf_P(cmd, PSTR(fmt), + sprintf_P(cmd, PSTR("X:%s, Y:%s, Z:%s"), dtostrf(xpos, 1, 1, str_1), dtostrf(ypos, 1, 1, str_2), dtostrf(zval, 1, 2, str_3) @@ -2458,16 +2456,16 @@ void LevBed(uint8_t point) { inLev = false; #else planner.synchronize(); - sprintf_P(cmd, PSTR(fmt), xpos, ypos); + sprintf_P(cmd, PSTR("M420S0\nG28O\nG90\nG0Z5F300\nG0X%iY%iF5000\nG0Z0F300"), xpos, ypos); queue.inject(cmd); #endif } -void LevBedFL() { LevBed(0); } -void LevBedFR() { LevBed(1); } -void LevBedBR() { LevBed(2); } -void LevBedBL() { LevBed(3); } -void LevBedC () { LevBed(4); } +void TramFL() { Tram(0); } +void TramFR() { Tram(1); } +void TramBR() { Tram(2); } +void TramBL() { Tram(3); } +void TramC () { Tram(4); } #if ENABLED(MESH_BED_LEVELING) @@ -3184,7 +3182,7 @@ void Draw_Prepare_Menu() { ADDMENUITEM(ICON_FilMan, GET_TEXT_F(MSG_FILAMENT_MAN), onDrawSubMenu, Draw_FilamentMan_Menu); #endif ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_MOVE_AXIS), onDrawMoveSubMenu, Goto_Move_Menu); - ADDMENUITEM(ICON_LevBed, GET_TEXT_F(MSG_BED_LEVELING), onDrawSubMenu, Draw_LevBedCorners_Menu); + ADDMENUITEM(ICON_Tram, GET_TEXT_F(MSG_BED_TRAMMING), onDrawSubMenu, Draw_Tramming_Menu); ADDMENUITEM(ICON_CloseMotor, GET_TEXT_F(MSG_DISABLE_STEPPERS), onDrawDisableMotors, DisableMotors); #if ENABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU) ADDMENUITEM(ICON_Homing, GET_TEXT_F(MSG_HOMING), onDrawSubMenu, Draw_Homing_Menu); @@ -3218,20 +3216,20 @@ void Draw_Prepare_Menu() { CurrentMenu->draw(); } -void Draw_LevBedCorners_Menu() { +void Draw_Tramming_Menu() { DWINUI::ClearMenuArea(); checkkey = Menu; - if (!LevBedMenu) LevBedMenu = new MenuClass(); - if (CurrentMenu != LevBedMenu) { - CurrentMenu = LevBedMenu; + if (!TrammingMenu) TrammingMenu = new MenuClass(); + if (CurrentMenu != TrammingMenu) { + CurrentMenu = TrammingMenu; SetMenuTitle({0}, GET_TEXT_F(MSG_BED_TRAMMING)); // TODO: Chinese, English "Bed Tramming" JPG DWINUI::MenuItemsPrepare(6); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu); - ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_FL), onDrawMenuItem, LevBedFL); - ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_FR), onDrawMenuItem, LevBedFR); - ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_BR), onDrawMenuItem, LevBedBR); - ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_BL), onDrawMenuItem, LevBedBL); - ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_C ), onDrawMenuItem, LevBedC ); + ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_FL), onDrawMenuItem, TramFL); + ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_FR), onDrawMenuItem, TramFR); + ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_BR), onDrawMenuItem, TramBR); + ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_BL), onDrawMenuItem, TramBL); + ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_C ), onDrawMenuItem, TramC ); } CurrentMenu->draw(); } diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.h b/Marlin/src/lcd/e3v2/enhanced/dwin.h index 773c9c7bdf..f377732b41 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.h @@ -211,7 +211,7 @@ void Draw_Control_Menu(); void Draw_AdvancedSettings_Menu(); void Draw_Prepare_Menu(); void Draw_Move_Menu(); -void Draw_LevBedCorners_Menu(); +void Draw_Tramming_Menu(); #if HAS_HOME_OFFSET void Draw_HomeOffset_Menu(); #endif diff --git a/Marlin/src/lcd/e3v2/enhanced/dwinui.h b/Marlin/src/lcd/e3v2/enhanced/dwinui.h index c222b3aeb9..c92014e84f 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwinui.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwinui.h @@ -52,7 +52,7 @@ #define ICON_HomeX ICON_MoveX #define ICON_HomeY ICON_MoveY #define ICON_HomeZ ICON_MoveZ -#define ICON_LevBed ICON_SetEndTemp +#define ICON_Tram ICON_SetEndTemp #define ICON_Lock ICON_Cool #define ICON_ManualMesh ICON_HotendTemp #define ICON_MeshNext ICON_Axis From 755c10d3030ed18762e05b1f86396237bca8dfbf Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 29 Dec 2021 03:41:28 -0600 Subject: [PATCH 292/532] =?UTF-8?q?=F0=9F=8E=A8=20Simplify=20some=20debug?= =?UTF-8?q?=20echos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/lcd/extui/dgus/DGUSScreenHandler.cpp | 8 ++--- .../extui/dgus/fysetc/DGUSScreenHandler.cpp | 2 +- .../lcd/extui/dgus/fysetc/DGUSScreenHandler.h | 2 +- .../extui/dgus/hiprecy/DGUSScreenHandler.cpp | 2 +- .../extui/dgus/hiprecy/DGUSScreenHandler.h | 2 +- .../lcd/extui/dgus/mks/DGUSScreenHandler.cpp | 36 +++++++++---------- .../lcd/extui/dgus/mks/DGUSScreenHandler.h | 2 +- .../extui/dgus/origin/DGUSScreenHandler.cpp | 2 +- .../lcd/extui/dgus/origin/DGUSScreenHandler.h | 2 +- 9 files changed, 29 insertions(+), 29 deletions(-) diff --git a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp index 2b00fd16f8..70bcca1859 100644 --- a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp @@ -508,9 +508,9 @@ void DGUSScreenHandler::HandleStepPerMMChanged(DGUS_VP_Variable &var, void *val_ case VP_Z_STEP_PER_MM: axis = ExtUI::axis_t::Z; break; default: return; } - DEBUG_ECHOLNPAIR_F("value:", value); + DEBUG_ECHOLNPGM("value:", value); ExtUI::setAxisSteps_per_mm(value, axis); - DEBUG_ECHOLNPAIR_F("value_set:", ExtUI::getAxisSteps_per_mm(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 return; } @@ -531,9 +531,9 @@ void DGUSScreenHandler::HandleStepPerMMExtruderChanged(DGUS_VP_Variable &var, vo #endif #endif } - DEBUG_ECHOLNPAIR_F("value:", value); + DEBUG_ECHOLNPGM("value:", value); ExtUI::setAxisSteps_per_mm(value, extruder); - DEBUG_ECHOLNPAIR_F("value_set:", ExtUI::getAxisSteps_per_mm(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 } diff --git a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp index 750acece1c..eba4b153f1 100644 --- a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp @@ -268,7 +268,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) { #endif } - DEBUG_ECHOLNPAIR_F("V3:", newvalue); + 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 diff --git a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h index d4fdf1d27e..dfc1e9ea7d 100644 --- a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h @@ -206,7 +206,7 @@ public: static void DGUSLCD_SendFloatAsIntValueToDisplay(DGUS_VP_Variable &var) { if (var.memadr) { float f = *(float *)var.memadr; - DEBUG_ECHOLNPAIR_F(" >> ", f, 6); + DEBUG_ECHOLNPGM(" >> ", f, 6); f *= cpow(10, decimals); dgusdisplay.WriteVariable(var.VP, (int16_t)f); } diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp index 79a3cb9103..88b3255b66 100644 --- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp @@ -268,7 +268,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) { #endif } - DEBUG_ECHOLNPAIR_F("V3:", newvalue); + 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 diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h index d4fdf1d27e..dfc1e9ea7d 100644 --- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h @@ -206,7 +206,7 @@ public: static void DGUSLCD_SendFloatAsIntValueToDisplay(DGUS_VP_Variable &var) { if (var.memadr) { float f = *(float *)var.memadr; - DEBUG_ECHOLNPAIR_F(" >> ", f, 6); + DEBUG_ECHOLNPGM(" >> ", f, 6); f *= cpow(10, decimals); dgusdisplay.WriteVariable(var.VP, (int16_t)f); } diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp index 0e2a971fd1..8054181353 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp @@ -93,7 +93,7 @@ void DGUSScreenHandler::DGUSLCD_SendFanToDisplay(DGUS_VP_Variable &var) { void DGUSScreenHandler::DGUSLCD_SendBabyStepToDisplay_MKS(DGUS_VP_Variable &var) { float value = current_position.z; - DEBUG_ECHOLNPAIR_F(" >> ", value, 6); + DEBUG_ECHOLNPGM(" >> ", value, 6); value *= cpow(10, 2); dgusdisplay.WriteVariable(VP_SD_Print_Baby, (uint16_t)value); } @@ -399,7 +399,7 @@ void DGUSScreenHandler::GetOffsetValue(DGUS_VP_Variable &var, void *val_ptr) { #if HAS_BED_PROBE int32_t value = swap32(*(int32_t *)val_ptr); float Offset = value / 100.0f; - DEBUG_ECHOLNPAIR_F("\nget int6 offset >> ", value, 6); + DEBUG_ECHOLNPGM("\nget int6 offset >> ", value, 6); #endif switch (var.VP) { @@ -909,7 +909,7 @@ void DGUSScreenHandler::HandleChangeLevelPoint_MKS(DGUS_VP_Variable &var, void * DEBUG_ECHOLNPGM("HandleChangeLevelPoint_MKS"); const int16_t value_raw = swap16(*(int16_t*)val_ptr); - DEBUG_ECHOLNPAIR_F("value_raw:", value_raw); + DEBUG_ECHOLNPGM("value_raw:", value_raw); *(int16_t*)var.memadr = value_raw; @@ -924,7 +924,7 @@ void DGUSScreenHandler::HandleStepPerMMChanged_MKS(DGUS_VP_Variable &var, void * const float value = (float)value_raw; DEBUG_ECHOLNPGM("value_raw:", value_raw); - DEBUG_ECHOLNPAIR_F("value:", value); + DEBUG_ECHOLNPGM("value:", value); ExtUI::axis_t axis; switch (var.VP) { @@ -934,7 +934,7 @@ void DGUSScreenHandler::HandleStepPerMMChanged_MKS(DGUS_VP_Variable &var, void * case VP_Z_STEP_PER_MM: axis = ExtUI::axis_t::Z; break; } ExtUI::setAxisSteps_per_mm(value, axis); - DEBUG_ECHOLNPAIR_F("value_set:", ExtUI::getAxisSteps_per_mm(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 } @@ -946,7 +946,7 @@ void DGUSScreenHandler::HandleStepPerMMExtruderChanged_MKS(DGUS_VP_Variable &var const float value = (float)value_raw; DEBUG_ECHOLNPGM("value_raw:", value_raw); - DEBUG_ECHOLNPAIR_F("value:", value); + DEBUG_ECHOLNPGM("value:", value); ExtUI::extruder_t extruder; switch (var.VP) { @@ -959,7 +959,7 @@ void DGUSScreenHandler::HandleStepPerMMExtruderChanged_MKS(DGUS_VP_Variable &var #endif } ExtUI::setAxisSteps_per_mm(value, extruder); - DEBUG_ECHOLNPAIR_F("value_set:", ExtUI::getAxisSteps_per_mm(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 } @@ -971,7 +971,7 @@ void DGUSScreenHandler::HandleMaxSpeedChange_MKS(DGUS_VP_Variable &var, void *va const float value = (float)value_raw; DEBUG_ECHOLNPGM("value_raw:", value_raw); - DEBUG_ECHOLNPAIR_F("value:", value); + DEBUG_ECHOLNPGM("value:", value); ExtUI::axis_t axis; switch (var.VP) { @@ -981,7 +981,7 @@ void DGUSScreenHandler::HandleMaxSpeedChange_MKS(DGUS_VP_Variable &var, void *va default: return; } ExtUI::setAxisMaxFeedrate_mm_s(value, axis); - DEBUG_ECHOLNPAIR_F("value_set:", ExtUI::getAxisMaxFeedrate_mm_s(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 } @@ -993,7 +993,7 @@ void DGUSScreenHandler::HandleExtruderMaxSpeedChange_MKS(DGUS_VP_Variable &var, const float value = (float)value_raw; DEBUG_ECHOLNPGM("value_raw:", value_raw); - DEBUG_ECHOLNPAIR_F("value:", value); + DEBUG_ECHOLNPGM("value:", value); ExtUI::extruder_t extruder; switch (var.VP) { @@ -1006,7 +1006,7 @@ void DGUSScreenHandler::HandleExtruderMaxSpeedChange_MKS(DGUS_VP_Variable &var, case VP_E1_MAX_SPEED: extruder = ExtUI::extruder_t::E1; break; } ExtUI::setAxisMaxFeedrate_mm_s(value, extruder); - DEBUG_ECHOLNPAIR_F("value_set:", ExtUI::getAxisMaxFeedrate_mm_s(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 } @@ -1018,7 +1018,7 @@ void DGUSScreenHandler::HandleMaxAccChange_MKS(DGUS_VP_Variable &var, void *val_ const float value = (float)value_raw; DEBUG_ECHOLNPGM("value_raw:", value_raw); - DEBUG_ECHOLNPAIR_F("value:", value); + DEBUG_ECHOLNPGM("value:", value); ExtUI::axis_t axis; switch (var.VP) { @@ -1028,7 +1028,7 @@ void DGUSScreenHandler::HandleMaxAccChange_MKS(DGUS_VP_Variable &var, void *val_ case VP_Z_ACC_MAX_SPEED: axis = ExtUI::axis_t::Z; break; } ExtUI::setAxisMaxAcceleration_mm_s2(value, axis); - DEBUG_ECHOLNPAIR_F("value_set:", ExtUI::getAxisMaxAcceleration_mm_s2(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 } @@ -1049,9 +1049,9 @@ void DGUSScreenHandler::HandleExtruderAccChange_MKS(DGUS_VP_Variable &var, void case VP_E1_ACC_MAX_SPEED: extruder = ExtUI::extruder_t::E1; settings.load(); break; #endif } - DEBUG_ECHOLNPAIR_F("value:", value); + DEBUG_ECHOLNPGM("value:", value); ExtUI::setAxisMaxAcceleration_mm_s2(value, extruder); - DEBUG_ECHOLNPAIR_F("value_set:", ExtUI::getAxisMaxAcceleration_mm_s2(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 } @@ -1115,7 +1115,7 @@ void DGUSScreenHandler::HandleAccChange_MKS(DGUS_VP_Variable &var, void *val_ptr #endif } - DEBUG_ECHOLNPAIR_F("V3:", newvalue); + DEBUG_ECHOLNPGM("V3:", newvalue); *(float *)var.memadr = newvalue; settings.save(); @@ -1175,7 +1175,7 @@ void DGUSScreenHandler::GetManualFilament(DGUS_VP_Variable &var, void *val_ptr) float value = (float)value_len; - DEBUG_ECHOLNPAIR_F("Get Filament len value:", value); + DEBUG_ECHOLNPGM("Get Filament len value:", value); distanceFilament = value; skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel @@ -1186,7 +1186,7 @@ void DGUSScreenHandler::GetManualFilamentSpeed(DGUS_VP_Variable &var, void *val_ uint16_t value_len = swap16(*(uint16_t*)val_ptr); - DEBUG_ECHOLNPAIR_F("filamentSpeed_mm_s value:", value_len); + DEBUG_ECHOLNPGM("filamentSpeed_mm_s value:", value_len); filamentSpeed_mm_s = value_len; diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h index 2e6c8af985..ee423b7bb9 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h @@ -273,7 +273,7 @@ public: static void DGUSLCD_SendFloatAsIntValueToDisplay(DGUS_VP_Variable &var) { if (var.memadr) { float f = *(float *)var.memadr; - DEBUG_ECHOLNPAIR_F(" >> ", f, 6); + DEBUG_ECHOLNPGM(" >> ", f, 6); f *= cpow(10, decimals); dgusdisplay.WriteVariable(var.VP, (int16_t)f); } diff --git a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp index b77c92b7eb..fb08fbf849 100644 --- a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp @@ -268,7 +268,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) { #endif } - DEBUG_ECHOLNPAIR_F("V3:", newvalue); + 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 diff --git a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h index d4fdf1d27e..dfc1e9ea7d 100644 --- a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h @@ -206,7 +206,7 @@ public: static void DGUSLCD_SendFloatAsIntValueToDisplay(DGUS_VP_Variable &var) { if (var.memadr) { float f = *(float *)var.memadr; - DEBUG_ECHOLNPAIR_F(" >> ", f, 6); + DEBUG_ECHOLNPGM(" >> ", f, 6); f *= cpow(10, decimals); dgusdisplay.WriteVariable(var.VP, (int16_t)f); } From 88a6e5b691d61eb93d573e4e79aea3bf5e0b4501 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 29 Dec 2021 04:17:41 -0600 Subject: [PATCH 293/532] =?UTF-8?q?=F0=9F=A9=BA=20Assert=20FAN=5FSOFT=5FPW?= =?UTF-8?q?M=20where=20required=20(#23383)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/SanityCheck.h | 8 ++++++-- Marlin/src/pins/mega/pins_MEGACONTROLLER.h | 2 +- Marlin/src/pins/stm32f1/pins_BEAST.h | 2 +- Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h | 2 +- Marlin/src/pins/stm32f1/pins_CHITU3D.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V4.h | 4 +--- Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h | 2 +- .../src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h | 7 ++++--- Marlin/src/pins/stm32f1/pins_FLY_MINI.h | 10 ++++++---- Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h | 18 ++++++++++++------ Marlin/src/pins/stm32f1/pins_STM3R_MINI.h | 2 +- Marlin/src/pins/stm32f1/pins_TRIGORILLA_PRO.h | 4 +++- Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h | 6 ++++-- Marlin/src/pins/stm32f4/pins_INDEX_REV03.h | 2 +- Marlin/src/pins/stm32f4/pins_RUMBA32_common.h | 2 +- buildroot/tests/STM32F103RET6_creality | 2 +- buildroot/tests/STM32F103RE_btt_USB | 2 +- buildroot/tests/rumba32 | 5 +++-- 19 files changed, 50 insertions(+), 34 deletions(-) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 50191dd201..3261149668 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2008,8 +2008,12 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #endif #endif -#if HAS_FAN0 && CONTROLLER_FAN_PIN == FAN_PIN - #error "You cannot set CONTROLLER_FAN_PIN equal to FAN_PIN." +#if HAS_FAN0 + #if CONTROLLER_FAN_PIN == FAN_PIN + #error "You cannot set CONTROLLER_FAN_PIN equal to FAN_PIN." + #elif ENABLED(FAN_SOFT_PWM_REQUIRED) && DISABLED(FAN_SOFT_PWM) + #error "FAN_SOFT_PWM is required. Enable it to continue." + #endif #endif #if ENABLED(USE_CONTROLLER_FAN) diff --git a/Marlin/src/pins/mega/pins_MEGACONTROLLER.h b/Marlin/src/pins/mega/pins_MEGACONTROLLER.h index 69c60b29ec..0af37bb217 100644 --- a/Marlin/src/pins/mega/pins_MEGACONTROLLER.h +++ b/Marlin/src/pins/mega/pins_MEGACONTROLLER.h @@ -121,7 +121,7 @@ #define CONTROLLER_FAN_PIN FAN2_PIN #endif -#define FAN_SOFT_PWM +#define FAN_SOFT_PWM_REQUIRED // // Misc. Functions diff --git a/Marlin/src/pins/stm32f1/pins_BEAST.h b/Marlin/src/pins/stm32f1/pins_BEAST.h index 2ace47822e..d494b29c14 100644 --- a/Marlin/src/pins/stm32f1/pins_BEAST.h +++ b/Marlin/src/pins/stm32f1/pins_BEAST.h @@ -93,7 +93,7 @@ #define FAN_PIN PB10 #endif -#define FAN_SOFT_PWM +#define FAN_SOFT_PWM_REQUIRED // // Temperature Sensors diff --git a/Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h b/Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h index 570d102c47..7b8abb1300 100644 --- a/Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h +++ b/Marlin/src/pins/stm32f1/pins_BTT_SKR_CR6.h @@ -113,7 +113,7 @@ #define HEATER_BED_PIN PC9 // HOT BED #define FAN_PIN PC6 // FAN -#define FAN_SOFT_PWM +#define FAN_SOFT_PWM_REQUIRED #define CONTROLLER_FAN_PIN PC7 diff --git a/Marlin/src/pins/stm32f1/pins_CHITU3D.h b/Marlin/src/pins/stm32f1/pins_CHITU3D.h index 2d33fb9f2c..7d30d6efad 100644 --- a/Marlin/src/pins/stm32f1/pins_CHITU3D.h +++ b/Marlin/src/pins/stm32f1/pins_CHITU3D.h @@ -87,7 +87,7 @@ #define FAN_PIN PG14 // MAIN BOARD FAN #endif -#define FAN_SOFT_PWM +#define FAN_SOFT_PWM_REQUIRED // // Temperature Sensors diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h index bf2a55fc7b..cb7e784751 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h @@ -143,9 +143,7 @@ #ifndef FAN_PIN #define FAN_PIN PA0 // FAN #endif -#if PIN_EXISTS(FAN) - #define FAN_SOFT_PWM -#endif +#define FAN_SOFT_PWM_REQUIRED // // SD Card diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h index 5251c8547b..4941949f81 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h @@ -144,7 +144,7 @@ #define HEATER_BED_PIN PA1 // HOT BED #define FAN_PIN PA2 // FAN -#define FAN_SOFT_PWM +#define FAN_SOFT_PWM_REQUIRED // // SD Card diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h index 023fca21ce..85d279872d 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V45x.h @@ -97,7 +97,7 @@ // Heaters / Fans // -#define FAN_SOFT_PWM +#define FAN_SOFT_PWM_REQUIRED // // SD Card diff --git a/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h b/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h index fea5b00b50..0682bfd736 100644 --- a/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h +++ b/Marlin/src/pins/stm32f1/pins_ERYONE_ERY32_MINI.h @@ -38,10 +38,9 @@ //#define DISABLE_DEBUG #define DISABLE_JTAG //#define ENABLE_SPI3 -#define FLASH_EEPROM_EMULATION -#define FAN_SOFT_PWM -#if ENABLED(FLASH_EEPROM_EMULATION) +#if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION) + #define FLASH_EEPROM_EMULATION #define EEPROM_PAGE_SIZE (0x800U) // 2KB #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL) #define MARLIN_EEPROM_SIZE (EEPROM_PAGE_SIZE) @@ -118,6 +117,8 @@ #endif #endif +#define FAN_SOFT_PWM_REQUIRED + // // Misc. Functions // diff --git a/Marlin/src/pins/stm32f1/pins_FLY_MINI.h b/Marlin/src/pins/stm32f1/pins_FLY_MINI.h index bfddf051f6..5468d0b4bd 100644 --- a/Marlin/src/pins/stm32f1/pins_FLY_MINI.h +++ b/Marlin/src/pins/stm32f1/pins_FLY_MINI.h @@ -30,10 +30,12 @@ // // Flash EEPROM Emulation // -#define FLASH_EEPROM_EMULATION -#define EEPROM_PAGE_SIZE 0x800 // 2KB -#define EEPROM_START_ADDRESS (0x8000000 + 256 * 1024 - 2 * EEPROM_PAGE_SIZE) // 256K firmware space -#define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE +#if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION) + #define FLASH_EEPROM_EMULATION + #define EEPROM_PAGE_SIZE 0x800 // 2KB + #define EEPROM_START_ADDRESS (0x8000000 + 256 * 1024 - 2 * EEPROM_PAGE_SIZE) // 256K firmware space + #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE +#endif // // Servos diff --git a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h index 15c6955a83..ca5ae45b3b 100644 --- a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h +++ b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h @@ -90,13 +90,19 @@ #define FAN_PIN PA15 // pin 77 (4cm Fan) #ifdef MAPLE_STM32F1 - #define FAN_SOFT_PWM // Required to avoid issues with heating or STLink - #define FAN_MIN_PWM 35 // Fan will not start in 1-30 range - #define FAN_MAX_PWM 255 + #define FAN_SOFT_PWM_REQUIRED + #if ENABLED(FAN_SOFT_PWM) && FAN_MIN_PWM < 35 // Required to avoid issues with heating or STLink + #error "FAN_MIN_PWM must be 35 or higher." // Fan will not start in 1-30 range + #endif +#elif ENABLED(FAST_PWM_FAN) + #if FAST_PWM_FAN_FREQUENCY != 31400 // Default 1000 is noisy, max 65K (uint16) + #error "FAST_PWM_FAN_FREQUENCY must be set to 31400." + #endif + #if FAN_MIN_PWM < 5 + #error "FAN_MIN_PWM must be 5 or higher." + #endif #else - #define FAST_PWM_FAN // STM32 Variant allow TIMER2 Hardware PWM - #define FAN_MIN_PWM 5 - #define FAN_MAX_PWM 255 + #error "FAST_PWM_FAN required to allow TIMER2 Hardware PWM." #endif //#define BEEPER_PIN PD13 // pin 60 (Servo PWM output 5V/GND on Board V0G+) made for BL-Touch sensor diff --git a/Marlin/src/pins/stm32f1/pins_STM3R_MINI.h b/Marlin/src/pins/stm32f1/pins_STM3R_MINI.h index 7171de919d..e189fc3f97 100644 --- a/Marlin/src/pins/stm32f1/pins_STM3R_MINI.h +++ b/Marlin/src/pins/stm32f1/pins_STM3R_MINI.h @@ -91,7 +91,7 @@ #endif #define FAN1_PIN PD13 -#define FAN_SOFT_PWM +#define FAN_SOFT_PWM_REQUIRED // // Temperature Sensors diff --git a/Marlin/src/pins/stm32f1/pins_TRIGORILLA_PRO.h b/Marlin/src/pins/stm32f1/pins_TRIGORILLA_PRO.h index bf38955127..6c7e7cbbfa 100644 --- a/Marlin/src/pins/stm32f1/pins_TRIGORILLA_PRO.h +++ b/Marlin/src/pins/stm32f1/pins_TRIGORILLA_PRO.h @@ -45,7 +45,9 @@ // // EEPROM // -#define FLASH_EEPROM_EMULATION +#if NO_EEPROM_SELECTED + #define FLASH_EEPROM_EMULATION +#endif #if ENABLED(FLASH_EEPROM_EMULATION) // SoC Flash (framework-arduinoststm32-maple/STM32F1/libraries/EEPROM/EEPROM.h) #define EEPROM_START_ADDRESS (0x8000000UL + (512 * 1024) - 2 * EEPROM_PAGE_SIZE) diff --git a/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h b/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h index 4cf9768fbe..6d5928e86d 100644 --- a/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h +++ b/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h @@ -29,8 +29,10 @@ #define BOARD_INFO_NAME "Artillery Ruby" -#define FLASH_EEPROM_EMULATION -//#define I2C_EEPROM +#if NO_EEPROM_SELECTED + #define FLASH_EEPROM_EMULATION + //#define I2C_EEPROM +#endif //#define E2END 0xFFF // 4KB #define HAL_TIMER_RATE F_CPU diff --git a/Marlin/src/pins/stm32f4/pins_INDEX_REV03.h b/Marlin/src/pins/stm32f4/pins_INDEX_REV03.h index 8560a04375..a9828c5bda 100644 --- a/Marlin/src/pins/stm32f4/pins_INDEX_REV03.h +++ b/Marlin/src/pins/stm32f4/pins_INDEX_REV03.h @@ -119,7 +119,7 @@ #define FAN2_PIN PE4 #define FAN3_PIN PE5 -#define FAN_SOFT_PWM +#define FAN_SOFT_PWM_REQUIRED // Neopixel Rings #define NEOPIXEL_PIN PC7 diff --git a/Marlin/src/pins/stm32f4/pins_RUMBA32_common.h b/Marlin/src/pins/stm32f4/pins_RUMBA32_common.h index cf7c9ed8a6..873a4d4ad3 100644 --- a/Marlin/src/pins/stm32f4/pins_RUMBA32_common.h +++ b/Marlin/src/pins/stm32f4/pins_RUMBA32_common.h @@ -35,7 +35,7 @@ // Use soft PWM for fans - PWM is not working properly when paired with STM32 Arduino Core v1.7.0 // This can be removed when Core version is updated and PWM behaviour is fixed. -#define FAN_SOFT_PWM +#define FAN_SOFT_PWM_REQUIRED // // Configure Timers diff --git a/buildroot/tests/STM32F103RET6_creality b/buildroot/tests/STM32F103RET6_creality index ca7573cf16..8eda5f801d 100755 --- a/buildroot/tests/STM32F103RET6_creality +++ b/buildroot/tests/STM32F103RET6_creality @@ -30,7 +30,7 @@ exec_test $1 $2 "Ender 3 v2 with MarlinUI" "$3" restore_configs opt_set MOTHERBOARD BOARD_CREALITY_V452 SERIAL_PORT 1 opt_disable NOZZLE_TO_PROBE_OFFSET -opt_enable NOZZLE_AS_PROBE Z_SAFE_HOMING Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN \ +opt_enable NOZZLE_AS_PROBE Z_SAFE_HOMING Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN FAN_SOFT_PWM \ PROBE_ACTIVATION_SWITCH PROBE_TARE PROBE_TARE_ONLY_WHILE_INACTIVE exec_test $1 $2 "Creality V4.5.2 PROBE_ACTIVATION_SWITCH, Probe Tare" "$3" diff --git a/buildroot/tests/STM32F103RE_btt_USB b/buildroot/tests/STM32F103RE_btt_USB index c63a90e436..7b264ea283 100755 --- a/buildroot/tests/STM32F103RE_btt_USB +++ b/buildroot/tests/STM32F103RE_btt_USB @@ -15,7 +15,7 @@ exec_test $1 $2 "BigTreeTech SKR E3 DIP v1.0 - Basic Configuration" "$3" restore_configs opt_set MOTHERBOARD BOARD_BTT_SKR_CR6 SERIAL_PORT -1 SERIAL_PORT_2 2 TEMP_SENSOR_BED 1 -opt_enable CR10_STOCKDISPLAY \ +opt_enable CR10_STOCKDISPLAY FAN_SOFT_PWM \ NOZZLE_AS_PROBE Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN Z_SAFE_HOMING \ PROBE_ACTIVATION_SWITCH PROBE_TARE PROBE_TARE_ONLY_WHILE_INACTIVE \ PROBING_HEATERS_OFF PREHEAT_BEFORE_PROBING diff --git a/buildroot/tests/rumba32 b/buildroot/tests/rumba32 index f26af33610..833769d0b9 100755 --- a/buildroot/tests/rumba32 +++ b/buildroot/tests/rumba32 @@ -11,7 +11,7 @@ restore_configs opt_set MOTHERBOARD BOARD_RUMBA32_V1_0 SERIAL_PORT -1 \ TEMP_SENSOR_BED 1 X_DRIVER_TYPE TMC2130 opt_disable PIDTEMP -opt_enable PIDTEMPBED +opt_enable PIDTEMPBED FAN_SOFT_PWM opt_disable THERMAL_PROTECTION_BED exec_test $1 $2 "RUMBA32 V1.0 with TMC2130, PID Bed, and bed thermal protection disabled" "$3" @@ -19,12 +19,13 @@ exec_test $1 $2 "RUMBA32 V1.0 with TMC2130, PID Bed, and bed thermal protection restore_configs opt_set MOTHERBOARD BOARD_RUMBA32_V1_1 SERIAL_PORT -1 \ TEMP_SENSOR_BED 1 X_DRIVER_TYPE TMC2130 Y_DRIVER_TYPE TMC2208 -opt_enable PIDTEMPBED EEPROM_SETTINGS EEPROM_CHITCHAT REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER +opt_enable PIDTEMPBED FAN_SOFT_PWM EEPROM_SETTINGS EEPROM_CHITCHAT REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER exec_test $1 $2 "RUMBA32 V1.1 with TMC2130, TMC2208, PID Bed, EEPROM settings, and graphic LCD controller" "$3" # Build examples restore_configs opt_set MOTHERBOARD BOARD_RUMBA32_MKS SERIAL_PORT -1 X_DRIVER_TYPE TMC2130 Y_DRIVER_TYPE TMC2208 +opt_enable FAN_SOFT_PWM exec_test $1 $2 "RUMBA32 MKS Default Config with Mixed TMC Drivers" "$3" # cleanup From 9edddd18ad96bf4b91b09179c99b57601fd7bf0d Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 30 Dec 2021 01:05:16 +0000 Subject: [PATCH 294/532] [cron] Bump distribution date (2021-12-30) --- 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 8afd313616..e8278bfa11 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 "2021-12-29" +//#define STRING_DISTRIBUTION_DATE "2021-12-30" /** * 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 13154d0d19..42d0c3174b 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 "2021-12-29" + #define STRING_DISTRIBUTION_DATE "2021-12-30" #endif /** From 6e8c67151148bc02fe52accb2e059015ff1b95e3 Mon Sep 17 00:00:00 2001 From: GHGiampy <83699429+GHGiampy@users.noreply.github.com> Date: Thu, 30 Dec 2021 05:37:07 +0100 Subject: [PATCH 295/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20Enhanced=20UI=20ma?= =?UTF-8?q?x=20E=20speed=20(#23387)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index 080b6f170a..4e730d04e7 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -3626,7 +3626,7 @@ void Draw_MaxSpeed_Menu() { ADDMENUITEM_P(ICON_MaxSpeedY, GET_TEXT_F(MSG_MAXSPEED_Y), onDrawMaxSpeedY, SetMaxSpeedY, &planner.settings.max_feedrate_mm_s[Y_AXIS]); ADDMENUITEM_P(ICON_MaxSpeedZ, GET_TEXT_F(MSG_MAXSPEED_Z), onDrawMaxSpeedZ, SetMaxSpeedZ, &planner.settings.max_feedrate_mm_s[Z_AXIS]); #if HAS_HOTEND - ADDMENUITEM_P(ICON_MaxSpeedE, GET_TEXT_F(MSG_MAXSPEED_E), onDrawMaxSpeedE, SetMaxSpeedE, &planner.settings.max_feedrate_mm_s[Z_AXIS]); + ADDMENUITEM_P(ICON_MaxSpeedE, GET_TEXT_F(MSG_MAXSPEED_E), onDrawMaxSpeedE, SetMaxSpeedE, &planner.settings.max_feedrate_mm_s[E_AXIS]); #endif } CurrentMenu->draw(); From 67521bdd01a5b26fbe5e82bc57b642c6ea3dcdd9 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Thu, 30 Dec 2021 20:35:22 +1300 Subject: [PATCH 296/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20RRW=20Keypad=20&?= =?UTF-8?q?=20Zonestar=20buttons=20(#23388)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/buttons.h | 64 +++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/Marlin/src/lcd/buttons.h b/Marlin/src/lcd/buttons.h index 6d028e9bc6..429fb971ec 100644 --- a/Marlin/src/lcd/buttons.h +++ b/Marlin/src/lcd/buttons.h @@ -45,36 +45,6 @@ #define ENCODER_PHASE_3 1 #endif -#if IS_RRW_KEYPAD - #define BTN_OFFSET 0 // Bit offset into buttons for shift register values - - #define BLEN_KEYPAD_F3 0 - #define BLEN_KEYPAD_F2 1 - #define BLEN_KEYPAD_F1 2 - #define BLEN_KEYPAD_DOWN 3 - #define BLEN_KEYPAD_RIGHT 4 - #define BLEN_KEYPAD_MIDDLE 5 - #define BLEN_KEYPAD_UP 6 - #define BLEN_KEYPAD_LEFT 7 - - #define EN_KEYPAD_F1 _BV(BTN_OFFSET + BLEN_KEYPAD_F1) - #define EN_KEYPAD_F2 _BV(BTN_OFFSET + BLEN_KEYPAD_F2) - #define EN_KEYPAD_F3 _BV(BTN_OFFSET + BLEN_KEYPAD_F3) - #define EN_KEYPAD_DOWN _BV(BTN_OFFSET + BLEN_KEYPAD_DOWN) - #define EN_KEYPAD_RIGHT _BV(BTN_OFFSET + BLEN_KEYPAD_RIGHT) - #define EN_KEYPAD_MIDDLE _BV(BTN_OFFSET + BLEN_KEYPAD_MIDDLE) - #define EN_KEYPAD_UP _BV(BTN_OFFSET + BLEN_KEYPAD_UP) - #define EN_KEYPAD_LEFT _BV(BTN_OFFSET + BLEN_KEYPAD_LEFT) - - #define RRK(B) (keypad_buttons & (B)) - - #ifdef EN_C - #define BUTTON_CLICK() ((buttons & EN_C) || RRK(EN_KEYPAD_MIDDLE)) - #else - #define BUTTON_CLICK() RRK(EN_KEYPAD_MIDDLE) - #endif -#endif - #if EITHER(HAS_DIGITAL_BUTTONS, HAS_DWIN_E3V2) // Wheel spin pins where BA is 00, 10, 11, 01 (1 bit always changes) #define BLEN_A 0 @@ -141,7 +111,39 @@ #define B_ST _BV(BL_ST) #ifndef BUTTON_CLICK - #define BUTTON_CLICK() (buttons & (B_MI|B_ST)) + #if EN_C + #define BUTTON_CLICK() (buttons & (B_MI|B_ST)) + #endif + #endif +#endif + +#if IS_RRW_KEYPAD + #define BTN_OFFSET 0 // Bit offset into buttons for shift register values + + #define BLEN_KEYPAD_F3 0 + #define BLEN_KEYPAD_F2 1 + #define BLEN_KEYPAD_F1 2 + #define BLEN_KEYPAD_DOWN 3 + #define BLEN_KEYPAD_RIGHT 4 + #define BLEN_KEYPAD_MIDDLE 5 + #define BLEN_KEYPAD_UP 6 + #define BLEN_KEYPAD_LEFT 7 + + #define EN_KEYPAD_F1 _BV(BTN_OFFSET + BLEN_KEYPAD_F1) + #define EN_KEYPAD_F2 _BV(BTN_OFFSET + BLEN_KEYPAD_F2) + #define EN_KEYPAD_F3 _BV(BTN_OFFSET + BLEN_KEYPAD_F3) + #define EN_KEYPAD_DOWN _BV(BTN_OFFSET + BLEN_KEYPAD_DOWN) + #define EN_KEYPAD_RIGHT _BV(BTN_OFFSET + BLEN_KEYPAD_RIGHT) + #define EN_KEYPAD_MIDDLE _BV(BTN_OFFSET + BLEN_KEYPAD_MIDDLE) + #define EN_KEYPAD_UP _BV(BTN_OFFSET + BLEN_KEYPAD_UP) + #define EN_KEYPAD_LEFT _BV(BTN_OFFSET + BLEN_KEYPAD_LEFT) + + #define RRK(B) (keypad_buttons & (B)) + + #ifdef EN_C + #define BUTTON_CLICK() ((buttons & EN_C) || RRK(EN_KEYPAD_MIDDLE)) + #else + #define BUTTON_CLICK() RRK(EN_KEYPAD_MIDDLE) #endif #endif From c1410020abd71ace9a5cf84eedc637d2c41983c5 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 31 Dec 2021 01:07:37 +0000 Subject: [PATCH 297/532] [cron] Bump distribution date (2021-12-31) --- 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 e8278bfa11..97775ef280 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 "2021-12-30" +//#define STRING_DISTRIBUTION_DATE "2021-12-31" /** * 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 42d0c3174b..9f865bf5b5 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 "2021-12-30" + #define STRING_DISTRIBUTION_DATE "2021-12-31" #endif /** From ff46d7cae274375eba82a278ca70fe0da016f778 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 31 Dec 2021 01:43:25 -0600 Subject: [PATCH 298/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20"no=20T=20param"?= =?UTF-8?q?=20handling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/feature/L6470/M906.cpp | 2 +- Marlin/src/gcode/feature/trinamic/M569.cpp | 2 +- Marlin/src/gcode/feature/trinamic/M906.cpp | 2 +- Marlin/src/gcode/feature/trinamic/M911-M914.cpp | 2 +- Marlin/src/gcode/gcode.cpp | 1 + 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Marlin/src/gcode/feature/L6470/M906.cpp b/Marlin/src/gcode/feature/L6470/M906.cpp index 67d11493ab..ae4a46dce6 100644 --- a/Marlin/src/gcode/feature/L6470/M906.cpp +++ b/Marlin/src/gcode/feature/L6470/M906.cpp @@ -285,7 +285,7 @@ void GcodeSuite::M906() { #if E_STEPPERS case E_AXIS: { - const int8_t eindex = get_target_e_stepper_from_command(); + const int8_t eindex = get_target_e_stepper_from_command(-2); #if AXIS_IS_L64XX(E0) if (eindex < 0 || eindex == 0) L6470_SET_KVAL_HOLD(E0); #endif diff --git a/Marlin/src/gcode/feature/trinamic/M569.cpp b/Marlin/src/gcode/feature/trinamic/M569.cpp index 3f4b0c6372..7bfedf8c72 100644 --- a/Marlin/src/gcode/feature/trinamic/M569.cpp +++ b/Marlin/src/gcode/feature/trinamic/M569.cpp @@ -134,7 +134,7 @@ static void say_stealth_status() { */ void GcodeSuite::M569() { if (parser.seen('S')) - set_stealth_status(parser.value_bool(), get_target_e_stepper_from_command()); + set_stealth_status(parser.value_bool(), get_target_e_stepper_from_command(-2)); else say_stealth_status(); } diff --git a/Marlin/src/gcode/feature/trinamic/M906.cpp b/Marlin/src/gcode/feature/trinamic/M906.cpp index 300b8beb09..788389ed61 100644 --- a/Marlin/src/gcode/feature/trinamic/M906.cpp +++ b/Marlin/src/gcode/feature/trinamic/M906.cpp @@ -112,7 +112,7 @@ void GcodeSuite::M906() { #if E_STEPPERS case E_AXIS: { - const int8_t eindex = get_target_e_stepper_from_command(); + const int8_t eindex = get_target_e_stepper_from_command(-2); #if AXIS_IS_TMC(E0) if (eindex < 0 || eindex == 0) TMC_SET_CURRENT(E0); #endif diff --git a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp index 32a2d25e77..37dd9479ab 100644 --- a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp +++ b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp @@ -291,7 +291,7 @@ break; #if E_STEPPERS case E_AXIS: { - const int8_t eindex = get_target_e_stepper_from_command(); + const int8_t eindex = get_target_e_stepper_from_command(-2); TERN_(E0_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 0) TMC_SET_PWMTHRS_E(0)); TERN_(E1_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 1) TMC_SET_PWMTHRS_E(1)); TERN_(E2_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 2) TMC_SET_PWMTHRS_E(2)); diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index d3d8f335df..2f031b3b74 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -148,6 +148,7 @@ int8_t GcodeSuite::get_target_extruder_from_command() { int8_t GcodeSuite::get_target_e_stepper_from_command(const int8_t dval/*=-1*/) { const int8_t e = parser.intval('T', dval); if (WITHIN(e, 0, E_STEPPERS - 1)) return e; + if (dval == -2) return dval; SERIAL_ECHO_START(); SERIAL_CHAR('M'); SERIAL_ECHO(parser.codenum); From ead693b1a4fe1c5e74b42e4ac6afd5a47bbbde29 Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Fri, 31 Dec 2021 15:22:49 +0700 Subject: [PATCH 299/532] =?UTF-8?q?=F0=9F=94=A7=20DWIN=5FMARLINUI=20sanity?= =?UTF-8?q?=20checks=20(#23399)?= 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 3261149668..4cd16d4484 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -824,7 +824,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "LCD_PROGRESS_BAR requires SDSUPPORT or LCD_SET_PROGRESS_MANUALLY." #elif NONE(HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL) #error "LCD_PROGRESS_BAR only applies to HD44780 character LCD and TFTGLCD_PANEL_(SPI|I2C)." - #elif HAS_MARLINUI_U8GLIB + #elif HAS_MARLINUI_U8GLIB || IS_DWIN_MARLINUI #error "LCD_PROGRESS_BAR does not apply to graphical displays." #elif ENABLED(FILAMENT_LCD_DISPLAY) #error "LCD_PROGRESS_BAR and FILAMENT_LCD_DISPLAY are not fully compatible. Comment out this line to use both." @@ -3695,7 +3695,7 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #error "COOLANT_FLOOD requires COOLANT_FLOOD_PIN to be defined." #endif -#if NONE(HAS_MARLINUI_U8GLIB, EXTENSIBLE_UI) && ENABLED(PRINT_PROGRESS_SHOW_DECIMALS) +#if NONE(HAS_MARLINUI_U8GLIB, EXTENSIBLE_UI, IS_DWIN_MARLINUI) && ENABLED(PRINT_PROGRESS_SHOW_DECIMALS) #error "PRINT_PROGRESS_SHOW_DECIMALS currently requires a Graphical LCD." #endif From b07887687ed96645b3e67ae2586c8198575a3e5d Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 31 Dec 2021 07:42:07 -0600 Subject: [PATCH 300/532] =?UTF-8?q?=F0=9F=9A=91=EF=B8=8F=20Fix=20thermal?= =?UTF-8?q?=20conditionals,=20structure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Conditionals_post.h | 8 +++---- Marlin/src/module/temperature.cpp | 34 ++++++++++++++---------------- Marlin/src/module/temperature.h | 10 ++++----- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index a5c9d20eda..e1e82c40f2 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -2549,13 +2549,13 @@ #endif // Thermal protection -#if BOTH(HAS_HEATED_BED, THERMAL_PROTECTION_BED) - #define HAS_THERMALLY_PROTECTED_BED 1 +#if !HAS_HEATED_BED + #undef THERMAL_PROTECTION_BED #endif #if ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0 #define WATCH_HOTENDS 1 #endif -#if HAS_THERMALLY_PROTECTED_BED && WATCH_BED_TEMP_PERIOD > 0 +#if ENABLED(THERMAL_PROTECTION_BED) && WATCH_BED_TEMP_PERIOD > 0 #define WATCH_BED 1 #endif #if BOTH(HAS_HEATED_CHAMBER, THERMAL_PROTECTION_CHAMBER) && WATCH_CHAMBER_TEMP_PERIOD > 0 @@ -2567,7 +2567,7 @@ #if (ENABLED(THERMAL_PROTECTION_HOTENDS) || !EXTRUDERS) \ && (ENABLED(THERMAL_PROTECTION_BED) || !HAS_HEATED_BED) \ && (ENABLED(THERMAL_PROTECTION_CHAMBER) || !HAS_HEATED_CHAMBER) \ - && (ENABLED(THERMAL_PROTECTION_COOLER) || !HAS_COOLER) + && (ENABLED(THERMAL_PROTECTION_COOLER) || !HAS_COOLER) #define THERMALLY_SAFE 1 #endif diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index dccdc55034..c5c4b3524b 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -1444,7 +1444,7 @@ void Temperature::manage_heater() { TERN_(HEATER_IDLE_HANDLER, heater_idle[IDLE_INDEX_BED].update(ms)); - #if HAS_THERMALLY_PROTECTED_BED + #if ENABLED(THERMAL_PROTECTION_BED) tr_state_machine[RUNAWAY_IND_BED].run(temp_bed.celsius, temp_bed.target, H_BED, THERMAL_PROTECTION_BED_PERIOD, THERMAL_PROTECTION_BED_HYSTERESIS); #endif @@ -2570,20 +2570,14 @@ void Temperature::init() { ); */ - #if HEATER_IDLE_HANDLER - // If the heater idle timeout expires, restart - if (heater_idle[idle_index].timed_out) { - state = TRInactive; - running_temp = 0; - } - else - #endif - { - // If the target temperature changes, restart - if (running_temp != target) { - running_temp = target; - state = target > 0 ? TRFirstHeating : TRInactive; - } + // If the heater idle timeout expires, restart + if (TERN0(HEATER_IDLE_HANDLER, heater_idle[idle_index].timed_out)) { + state = TRInactive; + running_temp = 0; + } + else if (running_temp != target) { // If the target temperature changes, restart + running_temp = target; + state = target > 0 ? TRFirstHeating : TRInactive; } switch (state) { @@ -2596,7 +2590,7 @@ void Temperature::init() { state = TRStable; // While the temperature is stable watch for a bad temperature - case TRStable: + case TRStable: { #if ENABLED(ADAPTIVE_FAN_SLOWING) if (adaptive_fan_slowing && heater_id >= 0) { @@ -2614,13 +2608,17 @@ void Temperature::init() { } #endif + const millis_t now = millis(); + if (current >= running_temp - hysteresis_degc) { - timer = millis() + SEC_TO_MS(period_seconds); + timer = now + SEC_TO_MS(period_seconds); break; } - else if (PENDING(millis(), timer)) break; + else if (PENDING(now, timer)) break; state = TRRunaway; + } // fall through + case TRRunaway: TERN_(HAS_DWIN_E3V2_BASIC, DWIN_Popup_Temperature(0)); _temp_error(heater_id, FPSTR(str_t_thermal_runaway), GET_TEXT_F(MSG_THERMAL_RUNAWAY)); diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index 1ca0f3e88c..5661668204 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -1009,7 +1009,7 @@ class Temperature { static void min_temp_error(const heater_id_t e); static void max_temp_error(const heater_id_t e); - #define HAS_THERMAL_PROTECTION ANY(THERMAL_PROTECTION_HOTENDS, THERMAL_PROTECTION_CHAMBER, HAS_THERMALLY_PROTECTED_BED, THERMAL_PROTECTION_COOLER) + #define HAS_THERMAL_PROTECTION ANY(THERMAL_PROTECTION_HOTENDS, THERMAL_PROTECTION_CHAMBER, THERMAL_PROTECTION_BED, THERMAL_PROTECTION_COOLER) #if HAS_THERMAL_PROTECTION @@ -1021,7 +1021,7 @@ class Temperature { REPEAT(HOTENDS, _RUNAWAY_IND_E) #undef _RUNAWAY_IND_E #endif - OPTARG(HAS_THERMALLY_PROTECTED_BED, RUNAWAY_IND_BED) + OPTARG(THERMAL_PROTECTION_BED, RUNAWAY_IND_BED) OPTARG(THERMAL_PROTECTION_CHAMBER, RUNAWAY_IND_CHAMBER) OPTARG(THERMAL_PROTECTION_COOLER, RUNAWAY_IND_COOLER) , NR_HEATER_RUNAWAY @@ -1029,9 +1029,9 @@ class Temperature { // Convert the given heater_id_t to runaway state array index static RunawayIndex runaway_index_for_id(const int8_t heater_id) { - TERN_(HAS_THERMALLY_PROTECTED_CHAMBER, if (heater_id == H_CHAMBER) return RUNAWAY_IND_CHAMBER); - TERN_(HAS_THERMALLY_PROTECTED_CHAMBER, if (heater_id == H_COOLER) return RUNAWAY_IND_COOLER); - TERN_(HAS_THERMALLY_PROTECTED_BED, if (heater_id == H_BED) return RUNAWAY_IND_BED); + TERN_(THERMAL_PROTECTION_CHAMBER, if (heater_id == H_CHAMBER) return RUNAWAY_IND_CHAMBER); + TERN_(THERMAL_PROTECTION_COOLER, if (heater_id == H_COOLER) return RUNAWAY_IND_COOLER); + TERN_(THERMAL_PROTECTION_BED, if (heater_id == H_BED) return RUNAWAY_IND_BED); return (RunawayIndex)_MAX(heater_id, 0); } From 61828492559f7a4f8d832f75cb262d64f813bdbe Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Fri, 31 Dec 2021 12:32:28 -0800 Subject: [PATCH 301/532] Do not warn about CONFIGURATION_EMBEDDING if it wasn't enabled (#23408) Warnings.cpp was warning about `CONFIGURATION_EMBEDDING` on AVR boards even if it wasn't enabled. Check the status of the feature before auto-disabling and warning about it. --- Marlin/src/inc/Conditionals_adv.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index 9864b8715c..8c6e79f36a 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -1006,7 +1006,7 @@ #endif // AVR are (usually) too limited in resources to store the configuration into the binary -#if !defined(FORCE_CONFIG_EMBED) && (defined(__AVR__) || DISABLED(SDSUPPORT) || EITHER(SDCARD_READONLY, DISABLE_M503)) +#if ENABLED(CONFIGURATION_EMBEDDING) && !defined(FORCE_CONFIG_EMBED) && (defined(__AVR__) || DISABLED(SDSUPPORT) || EITHER(SDCARD_READONLY, DISABLE_M503)) #undef CONFIGURATION_EMBEDDING #define CANNOT_EMBED_CONFIGURATION defined(__AVR__) #endif From 4de84031d84c9b92a7ce5c8df48b15682e51acdb Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 1 Jan 2022 01:08:17 +0000 Subject: [PATCH 302/532] [cron] Bump distribution date (2022-01-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 97775ef280..33244880e3 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 "2021-12-31" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 9f865bf5b5..3aa887a524 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 "2021-12-31" + #define STRING_DISTRIBUTION_DATE "2022-01-01" #endif /** From 63f71d85f2af5c9a352a4fca9b3c1acb1a5f4746 Mon Sep 17 00:00:00 2001 From: John Lagonikas <39417467+zeleps@users.noreply.github.com> Date: Sun, 2 Jan 2022 02:18:07 +0200 Subject: [PATCH 303/532] =?UTF-8?q?=E2=9C=A8=20Temperature=20variance=20mo?= =?UTF-8?q?nitor=20(#23373)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 4 ++ Marlin/src/core/language.h | 1 + Marlin/src/inc/Conditionals_post.h | 3 ++ Marlin/src/lcd/language/language_el.h | 1 + Marlin/src/lcd/language/language_en.h | 1 + Marlin/src/module/temperature.cpp | 55 +++++++++++++++++++++++---- Marlin/src/module/temperature.h | 8 +++- 7 files changed, 64 insertions(+), 9 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 2410d8b903..76ab869bf7 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -349,6 +349,10 @@ #define WATCH_COOLER_TEMP_INCREASE 3 // Degrees Celsius #endif +#if ANY(THERMAL_PROTECTION_HOTENDS, THERMAL_PROTECTION_BED, THERMAL_PROTECTION_CHAMBER, THERMAL_PROTECTION_COOLER) + #define THERMAL_PROTECTION_VARIANCE_MONITOR // Detect a sensor malfunction preventing temperature updates +#endif + #if ENABLED(PIDTEMP) // Add an experimental additional term to the heater power, proportional to the extrusion speed. // A well-chosen Kc value should add just enough power to melt the increased material volume. diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h index 0a6870af26..707296b357 100644 --- a/Marlin/src/core/language.h +++ b/Marlin/src/core/language.h @@ -240,6 +240,7 @@ #define STR_REDUNDANCY "Heater switched off. Temperature difference between temp sensors is too high !" #define STR_T_HEATING_FAILED "Heating failed" #define STR_T_THERMAL_RUNAWAY "Thermal Runaway" +#define STR_T_MALFUNCTION "Thermal Malfunction" #define STR_T_MAXTEMP "MAXTEMP triggered" #define STR_T_MINTEMP "MINTEMP triggered" #define STR_ERR_PROBING_FAILED "Probing Failed" diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index e1e82c40f2..9ed25a6114 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -2564,6 +2564,9 @@ #if BOTH(HAS_COOLER, THERMAL_PROTECTION_COOLER) && WATCH_COOLER_TEMP_PERIOD > 0 #define WATCH_COOLER 1 #endif +#if NONE(THERMAL_PROTECTION_HOTENDS, THERMAL_PROTECTION_CHAMBER, THERMAL_PROTECTION_BED, THERMAL_PROTECTION_COOLER) + #undef THERMAL_PROTECTION_VARIANCE_MONITOR +#endif #if (ENABLED(THERMAL_PROTECTION_HOTENDS) || !EXTRUDERS) \ && (ENABLED(THERMAL_PROTECTION_BED) || !HAS_HEATED_BED) \ && (ENABLED(THERMAL_PROTECTION_CHAMBER) || !HAS_HEATED_CHAMBER) \ diff --git a/Marlin/src/lcd/language/language_el.h b/Marlin/src/lcd/language/language_el.h index 567706180c..265e02c0ef 100644 --- a/Marlin/src/lcd/language/language_el.h +++ b/Marlin/src/lcd/language/language_el.h @@ -202,6 +202,7 @@ namespace Language_el { LSTR MSG_HEATING_FAILED_LCD = _UxGT("Αποτυχία θέρμανσης"); LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ"); LSTR MSG_THERMAL_RUNAWAY = _UxGT("ΘΕΡΜΙΚΗ ΔΙΑΦΥΓΗ"); + LSTR MSG_TEMP_MALFUNCTION = _UxGT("ΘΕΡΜΙΚΗ ΔΥΣΛΕΙΤΟΥΡΓΙΑ"); LSTR MSG_ERR_MAXTEMP = _UxGT("ΠΕΡΙΤΤΗ ΘΕΡΜΟΚΡΑΣΙΑ"); LSTR MSG_ERR_MINTEMP = _UxGT("ΑΝΕΠΑΡΚΗΣ ΘΕΡΜΟΚΡΑΣΙΑ"); LSTR MSG_HALTED = _UxGT("Εκτυπωτής διεκόπη"); diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index c8660cd1c8..f1beb62e07 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -533,6 +533,7 @@ namespace Language_en { LSTR MSG_HEATING_FAILED_LCD = _UxGT("Heating Failed"); LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: REDUNDANT TEMP"); LSTR MSG_THERMAL_RUNAWAY = _UxGT("THERMAL RUNAWAY"); + LSTR MSG_TEMP_MALFUNCTION = _UxGT("TEMP MALFUNCTION"); LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("BED THERMAL RUNAWAY"); LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("CHAMBER T. RUNAWAY"); LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("Cooler Runaway"); diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index c5c4b3524b..f7d53b6da7 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -196,6 +196,7 @@ Temperature thermalManager; PGMSTR(str_t_thermal_runaway, STR_T_THERMAL_RUNAWAY); +PGMSTR(str_t_temp_malfunction, STR_T_MALFUNCTION); PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED); /** @@ -2570,14 +2571,30 @@ void Temperature::init() { ); */ - // If the heater idle timeout expires, restart - if (TERN0(HEATER_IDLE_HANDLER, heater_idle[idle_index].timed_out)) { - state = TRInactive; - running_temp = 0; - } - else if (running_temp != target) { // If the target temperature changes, restart - running_temp = target; - state = target > 0 ? TRFirstHeating : TRInactive; + #if ENABLED(THERMAL_PROTECTION_VARIANCE_MONITOR) + if (state == TRMalfunction) { // temperature invariance may continue, regardless of heater state + variance += ABS(current - last_temp); // no need for detection window now, a single change in variance is enough + last_temp = current; + if (!NEAR_ZERO(variance)) { + variance_timer = millis() + SEC_TO_MS(period_seconds); + variance = 0.0; + state = TRStable; // resume from where we detected the problem + } + } + #endif + + if (TERN1(THERMAL_PROTECTION_VARIANCE_MONITOR, state != TRMalfunction)) { + // If the heater idle timeout expires, restart + if (TERN0(HEATER_IDLE_HANDLER, heater_idle[idle_index].timed_out)) { + state = TRInactive; + running_temp = 0; + TERN_(THERMAL_PROTECTION_VARIANCE_MONITOR, variance_timer = 0); + } + else if (running_temp != target) { // If the target temperature changes, restart + running_temp = target; + state = target > 0 ? TRFirstHeating : TRInactive; + TERN_(THERMAL_PROTECTION_VARIANCE_MONITOR, variance_timer = 0); + } } switch (state) { @@ -2610,6 +2627,22 @@ void Temperature::init() { const millis_t now = millis(); + #if ENABLED(THERMAL_PROTECTION_VARIANCE_MONITOR) + if (PENDING(now, variance_timer)) { + variance += ABS(current - last_temp); + last_temp = current; + } + else { + if (NEAR_ZERO(variance) && variance_timer) { // valid variance monitoring window + state = TRMalfunction; + break; + } + variance_timer = now + SEC_TO_MS(period_seconds); + variance = 0.0; + last_temp = current; + } + #endif + if (current >= running_temp - hysteresis_degc) { timer = now + SEC_TO_MS(period_seconds); break; @@ -2622,6 +2655,12 @@ void Temperature::init() { case TRRunaway: TERN_(HAS_DWIN_E3V2_BASIC, DWIN_Popup_Temperature(0)); _temp_error(heater_id, FPSTR(str_t_thermal_runaway), GET_TEXT_F(MSG_THERMAL_RUNAWAY)); + + #if ENABLED(THERMAL_PROTECTION_VARIANCE_MONITOR) + case TRMalfunction: + TERN_(HAS_DWIN_E3V2_BASIC, DWIN_Popup_Temperature(0)); + _temp_error(heater_id, FPSTR(str_t_temp_malfunction), GET_TEXT_F(MSG_TEMP_MALFUNCTION)); + #endif } } diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index 5661668204..e3515f0db8 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -1035,12 +1035,18 @@ class Temperature { return (RunawayIndex)_MAX(heater_id, 0); } - enum TRState : char { TRInactive, TRFirstHeating, TRStable, TRRunaway }; + enum TRState : char { TRInactive, TRFirstHeating, TRStable, TRRunaway + OPTARG(THERMAL_PROTECTION_VARIANCE_MONITOR, TRMalfunction) + }; typedef struct { millis_t timer = 0; TRState state = TRInactive; float running_temp; + #if ENABLED(THERMAL_PROTECTION_VARIANCE_MONITOR) + millis_t variance_timer = 0; + celsius_float_t last_temp = 0.0, variance = 0.0; + #endif void run(const_celsius_float_t current, const_celsius_float_t target, const heater_id_t heater_id, const uint16_t period_seconds, const celsius_t hysteresis_degc); } tr_state_machine_t; From 08aacb822a7f49199939a5c66639adfc356b55fe Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 2 Jan 2022 01:09:36 +0000 Subject: [PATCH 304/532] [cron] Bump distribution date (2022-01-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 33244880e3..ae674efded 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 "2022-01-01" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 3aa887a524..6707e7ec50 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 "2022-01-01" + #define STRING_DISTRIBUTION_DATE "2022-01-02" #endif /** From 09ccaa5051df5b0580d99d0284fe657c474ccf38 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 1 Jan 2022 20:01:24 -0600 Subject: [PATCH 305/532] =?UTF-8?q?=F0=9F=94=A8=20Add=20.vscode/extensions?= =?UTF-8?q?.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 7 ++----- .vscode/extensions.json | 8 ++++++++ 2 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 .vscode/extensions.json diff --git a/.gitignore b/.gitignore index 72fd117bd2..191dd65ed9 100755 --- a/.gitignore +++ b/.gitignore @@ -141,11 +141,8 @@ __vm/ vc-fileutils.settings # Visual Studio Code -.vscode -.vscode/.browse.c_cpp.db* -.vscode/c_cpp_properties.json -.vscode/launch.json -.vscode/*.db +.vscode/* +!.vscode/extensions.json #Simulation imgui.ini diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000000..7226831cb1 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "marlinfirmware.auto-build", + "platformio.platformio-ide" + ] +} From 6fbfeb68010e63c76b545e2c27aeb48ee73be68b Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 1 Jan 2022 22:54:27 -0600 Subject: [PATCH 306/532] =?UTF-8?q?=E2=9C=A8=20M919=20:=20Chopper=20Timing?= =?UTF-8?q?=20(#23400)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 3 + Marlin/src/feature/tmc_util.h | 114 +++++--- Marlin/src/gcode/feature/trinamic/M906.cpp | 24 +- .../src/gcode/feature/trinamic/M911-M914.cpp | 38 ++- Marlin/src/gcode/feature/trinamic/M919.cpp | 266 ++++++++++++++++++ Marlin/src/gcode/gcode.cpp | 1 + Marlin/src/gcode/gcode.h | 2 + Marlin/src/inc/Conditionals_post.h | 16 +- ini/features.ini | 2 +- platformio.ini | 1 + 10 files changed, 387 insertions(+), 80 deletions(-) create mode 100644 Marlin/src/gcode/feature/trinamic/M919.cpp diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 76ab869bf7..16c5587f9c 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -2979,6 +2979,9 @@ //#define CHOPPER_TIMING_Z2 CHOPPER_TIMING_Z //#define CHOPPER_TIMING_Z3 CHOPPER_TIMING_Z //#define CHOPPER_TIMING_Z4 CHOPPER_TIMING_Z + //#define CHOPPER_TIMING_I CHOPPER_TIMING + //#define CHOPPER_TIMING_J CHOPPER_TIMING + //#define CHOPPER_TIMING_K CHOPPER_TIMING //#define CHOPPER_TIMING_E CHOPPER_TIMING // For Extruders (override below) //#define CHOPPER_TIMING_E1 CHOPPER_TIMING_E //#define CHOPPER_TIMING_E2 CHOPPER_TIMING_E diff --git a/Marlin/src/feature/tmc_util.h b/Marlin/src/feature/tmc_util.h index 2da425170f..44cde9c763 100644 --- a/Marlin/src/feature/tmc_util.h +++ b/Marlin/src/feature/tmc_util.h @@ -64,13 +64,13 @@ class TMCStorage { uint8_t otpw_count = 0, error_count = 0; bool flag_otpw = false; - inline bool getOTPW() { return flag_otpw; } - inline void clear_otpw() { flag_otpw = 0; } + bool getOTPW() { return flag_otpw; } + void clear_otpw() { flag_otpw = 0; } #endif - inline uint16_t getMilliamps() { return val_mA; } + uint16_t getMilliamps() { return val_mA; } - inline void printLabel() { + void printLabel() { SERIAL_CHAR(AXIS_LETTER); if (DRIVER_ID > '0') SERIAL_CHAR(DRIVER_ID); } @@ -97,25 +97,31 @@ class TMCMarlin : public TMC, public TMCStorage { TMCMarlin(const uint16_t CS, const float RS, const uint16_t pinMOSI, const uint16_t pinMISO, const uint16_t pinSCK, const uint8_t axis_chain_index) : TMC(CS, RS, pinMOSI, pinMISO, pinSCK, axis_chain_index) {} - inline uint16_t rms_current() { return TMC::rms_current(); } - inline void rms_current(uint16_t mA) { + uint16_t rms_current() { return TMC::rms_current(); } + void rms_current(uint16_t mA) { this->val_mA = mA; TMC::rms_current(mA); } - inline void rms_current(const uint16_t mA, const float mult) { + void rms_current(const uint16_t mA, const float mult) { this->val_mA = mA; TMC::rms_current(mA, mult); } - inline uint16_t get_microstep_counter() { return TMC::MSCNT(); } + uint16_t get_microstep_counter() { return TMC::MSCNT(); } #if HAS_STEALTHCHOP - inline bool get_stealthChop() { return this->en_pwm_mode(); } - inline bool get_stored_stealthChop() { return this->stored.stealthChop_enabled; } - inline void refresh_stepping_mode() { this->en_pwm_mode(this->stored.stealthChop_enabled); } - inline void set_stealthChop(const bool stch) { this->stored.stealthChop_enabled = stch; refresh_stepping_mode(); } - inline bool toggle_stepping_mode() { set_stealthChop(!this->stored.stealthChop_enabled); return get_stealthChop(); } + bool get_stealthChop() { return this->en_pwm_mode(); } + bool get_stored_stealthChop() { return this->stored.stealthChop_enabled; } + void refresh_stepping_mode() { this->en_pwm_mode(this->stored.stealthChop_enabled); } + void set_stealthChop(const bool stch) { this->stored.stealthChop_enabled = stch; refresh_stepping_mode(); } + bool toggle_stepping_mode() { set_stealthChop(!this->stored.stealthChop_enabled); return get_stealthChop(); } #endif + void set_chopper_times(const chopper_timing_t &ct) { + TMC::toff(ct.toff); + TMC::hysteresis_end(ct.hend); + TMC::hysteresis_start(ct.hstrt); + } + #if ENABLED(HYBRID_THRESHOLD) uint32_t get_pwm_thrs() { return _tmc_thrs(this->microsteps(), this->TPWMTHRS(), planner.settings.axis_steps_per_mm[AXIS_ID]); @@ -127,7 +133,7 @@ class TMCMarlin : public TMC, public TMCStorage { #endif #if USE_SENSORLESS - inline int16_t homing_threshold() { return TMC::sgt(); } + int16_t homing_threshold() { return TMC::sgt(); } void homing_threshold(int16_t sgt_val) { sgt_val = (int16_t)constrain(sgt_val, sgt_min, sgt_max); TMC::sgt(sgt_val); @@ -139,13 +145,13 @@ class TMCMarlin : public TMC, public TMCStorage { #endif #if HAS_LCD_MENU - inline void refresh_stepper_current() { rms_current(this->val_mA); } + void refresh_stepper_current() { rms_current(this->val_mA); } #if ENABLED(HYBRID_THRESHOLD) - inline void refresh_hybrid_thrs() { set_pwm_thrs(this->stored.hybrid_thrs); } + void refresh_hybrid_thrs() { set_pwm_thrs(this->stored.hybrid_thrs); } #endif #if USE_SENSORLESS - inline void refresh_homing_thrs() { homing_threshold(this->stored.homing_thrs); } + void refresh_homing_thrs() { homing_threshold(this->stored.homing_thrs); } #endif #endif @@ -167,24 +173,30 @@ class TMCMarlin : public TMC220 {} uint16_t rms_current() { return TMC2208Stepper::rms_current(); } - inline void rms_current(const uint16_t mA) { + void rms_current(const uint16_t mA) { this->val_mA = mA; TMC2208Stepper::rms_current(mA); } - inline void rms_current(const uint16_t mA, const float mult) { + void rms_current(const uint16_t mA, const float mult) { this->val_mA = mA; TMC2208Stepper::rms_current(mA, mult); } - inline uint16_t get_microstep_counter() { return TMC2208Stepper::MSCNT(); } + uint16_t get_microstep_counter() { return TMC2208Stepper::MSCNT(); } #if HAS_STEALTHCHOP - inline bool get_stealthChop() { return !this->en_spreadCycle(); } - inline bool get_stored_stealthChop() { return this->stored.stealthChop_enabled; } - inline void refresh_stepping_mode() { this->en_spreadCycle(!this->stored.stealthChop_enabled); } - inline void set_stealthChop(const bool stch) { this->stored.stealthChop_enabled = stch; refresh_stepping_mode(); } - inline bool toggle_stepping_mode() { set_stealthChop(!this->stored.stealthChop_enabled); return get_stealthChop(); } + bool get_stealthChop() { return !this->en_spreadCycle(); } + bool get_stored_stealthChop() { return this->stored.stealthChop_enabled; } + void refresh_stepping_mode() { this->en_spreadCycle(!this->stored.stealthChop_enabled); } + void set_stealthChop(const bool stch) { this->stored.stealthChop_enabled = stch; refresh_stepping_mode(); } + bool toggle_stepping_mode() { set_stealthChop(!this->stored.stealthChop_enabled); return get_stealthChop(); } #endif + void set_chopper_times(const chopper_timing_t &ct) { + TMC2208Stepper::toff(ct.toff); + TMC2208Stepper::hysteresis_end(ct.hend); + TMC2208Stepper::hysteresis_start(ct.hstrt); + } + #if ENABLED(HYBRID_THRESHOLD) uint32_t get_pwm_thrs() { return _tmc_thrs(this->microsteps(), this->TPWMTHRS(), planner.settings.axis_steps_per_mm[AXIS_ID]); @@ -196,10 +208,10 @@ class TMCMarlin : public TMC220 #endif #if HAS_LCD_MENU - inline void refresh_stepper_current() { rms_current(this->val_mA); } + void refresh_stepper_current() { rms_current(this->val_mA); } #if ENABLED(HYBRID_THRESHOLD) - inline void refresh_hybrid_thrs() { set_pwm_thrs(this->stored.hybrid_thrs); } + void refresh_hybrid_thrs() { set_pwm_thrs(this->stored.hybrid_thrs); } #endif #endif }; @@ -215,24 +227,30 @@ class TMCMarlin : public TMC220 {} uint8_t get_address() { return slave_address; } uint16_t rms_current() { return TMC2209Stepper::rms_current(); } - inline void rms_current(const uint16_t mA) { + void rms_current(const uint16_t mA) { this->val_mA = mA; TMC2209Stepper::rms_current(mA); } - inline void rms_current(const uint16_t mA, const float mult) { + void rms_current(const uint16_t mA, const float mult) { this->val_mA = mA; TMC2209Stepper::rms_current(mA, mult); } - inline uint16_t get_microstep_counter() { return TMC2209Stepper::MSCNT(); } + uint16_t get_microstep_counter() { return TMC2209Stepper::MSCNT(); } #if HAS_STEALTHCHOP - inline bool get_stealthChop() { return !this->en_spreadCycle(); } - inline bool get_stored_stealthChop() { return this->stored.stealthChop_enabled; } - inline void refresh_stepping_mode() { this->en_spreadCycle(!this->stored.stealthChop_enabled); } - inline void set_stealthChop(const bool stch) { this->stored.stealthChop_enabled = stch; refresh_stepping_mode(); } - inline bool toggle_stepping_mode() { set_stealthChop(!this->stored.stealthChop_enabled); return get_stealthChop(); } + bool get_stealthChop() { return !this->en_spreadCycle(); } + bool get_stored_stealthChop() { return this->stored.stealthChop_enabled; } + void refresh_stepping_mode() { this->en_spreadCycle(!this->stored.stealthChop_enabled); } + void set_stealthChop(const bool stch) { this->stored.stealthChop_enabled = stch; refresh_stepping_mode(); } + bool toggle_stepping_mode() { set_stealthChop(!this->stored.stealthChop_enabled); return get_stealthChop(); } #endif + void set_chopper_times(const chopper_timing_t &ct) { + TMC2209Stepper::toff(ct.toff); + TMC2209Stepper::hysteresis_end(ct.hend); + TMC2209Stepper::hysteresis_start(ct.hstrt); + } + #if ENABLED(HYBRID_THRESHOLD) uint32_t get_pwm_thrs() { return _tmc_thrs(this->microsteps(), this->TPWMTHRS(), planner.settings.axis_steps_per_mm[AXIS_ID]); @@ -243,7 +261,7 @@ class TMCMarlin : public TMC220 } #endif #if USE_SENSORLESS - inline int16_t homing_threshold() { return TMC2209Stepper::SGTHRS(); } + int16_t homing_threshold() { return TMC2209Stepper::SGTHRS(); } void homing_threshold(int16_t sgt_val) { sgt_val = (int16_t)constrain(sgt_val, sgt_min, sgt_max); TMC2209Stepper::SGTHRS(sgt_val); @@ -252,13 +270,13 @@ class TMCMarlin : public TMC220 #endif #if HAS_LCD_MENU - inline void refresh_stepper_current() { rms_current(this->val_mA); } + void refresh_stepper_current() { rms_current(this->val_mA); } #if ENABLED(HYBRID_THRESHOLD) - inline void refresh_hybrid_thrs() { set_pwm_thrs(this->stored.hybrid_thrs); } + void refresh_hybrid_thrs() { set_pwm_thrs(this->stored.hybrid_thrs); } #endif #if USE_SENSORLESS - inline void refresh_homing_thrs() { homing_threshold(this->stored.homing_thrs); } + void refresh_homing_thrs() { homing_threshold(this->stored.homing_thrs); } #endif #endif @@ -275,15 +293,21 @@ class TMCMarlin : public TMC266 TMCMarlin(const uint16_t CS, const float RS, const uint16_t pinMOSI, const uint16_t pinMISO, const uint16_t pinSCK, const uint8_t) : TMC2660Stepper(CS, RS, pinMOSI, pinMISO, pinSCK) {} - inline uint16_t rms_current() { return TMC2660Stepper::rms_current(); } - inline void rms_current(const uint16_t mA) { + uint16_t rms_current() { return TMC2660Stepper::rms_current(); } + void rms_current(const uint16_t mA) { this->val_mA = mA; TMC2660Stepper::rms_current(mA); } - inline uint16_t get_microstep_counter() { return TMC2660Stepper::mstep(); } + uint16_t get_microstep_counter() { return TMC2660Stepper::mstep(); } + + void set_chopper_times(const chopper_timing_t &ct) { + TMC2660Stepper::toff(ct.toff); + TMC2660Stepper::hysteresis_end(ct.hend); + TMC2660Stepper::hysteresis_start(ct.hstrt); + } #if USE_SENSORLESS - inline int16_t homing_threshold() { return TMC2660Stepper::sgt(); } + int16_t homing_threshold() { return TMC2660Stepper::sgt(); } void homing_threshold(int16_t sgt_val) { sgt_val = (int16_t)constrain(sgt_val, sgt_min, sgt_max); TMC2660Stepper::sgt(sgt_val); @@ -292,10 +316,10 @@ class TMCMarlin : public TMC266 #endif #if HAS_LCD_MENU - inline void refresh_stepper_current() { rms_current(this->val_mA); } + void refresh_stepper_current() { rms_current(this->val_mA); } #if USE_SENSORLESS - inline void refresh_homing_thrs() { homing_threshold(this->stored.homing_thrs); } + void refresh_homing_thrs() { homing_threshold(this->stored.homing_thrs); } #endif #endif diff --git a/Marlin/src/gcode/feature/trinamic/M906.cpp b/Marlin/src/gcode/feature/trinamic/M906.cpp index 788389ed61..92d2210645 100644 --- a/Marlin/src/gcode/feature/trinamic/M906.cpp +++ b/Marlin/src/gcode/feature/trinamic/M906.cpp @@ -63,16 +63,18 @@ void GcodeSuite::M906() { LOOP_LOGICAL_AXES(i) if (uint16_t value = parser.intval(axis_codes[i])) { report = false; switch (i) { - case X_AXIS: - #if AXIS_IS_TMC(X) - if (index < 0 || index == 0) TMC_SET_CURRENT(X); - #endif - #if AXIS_IS_TMC(X2) - if (index < 0 || index == 1) TMC_SET_CURRENT(X2); - #endif - break; + #if AXIS_IS_TMC(X) || AXIS_IS_TMC(X2) + case X_AXIS: + #if AXIS_IS_TMC(X) + if (index < 0 || index == 0) TMC_SET_CURRENT(X); + #endif + #if AXIS_IS_TMC(X2) + if (index < 0 || index == 1) TMC_SET_CURRENT(X2); + #endif + break; + #endif - #if HAS_Y_AXIS + #if AXIS_IS_TMC(Y) || AXIS_IS_TMC(Y2) case Y_AXIS: #if AXIS_IS_TMC(Y) if (index < 0 || index == 0) TMC_SET_CURRENT(Y); @@ -83,7 +85,7 @@ void GcodeSuite::M906() { break; #endif - #if HAS_Z_AXIS + #if AXIS_IS_TMC(Z) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3) || AXIS_IS_TMC(Z4) case Z_AXIS: #if AXIS_IS_TMC(Z) if (index < 0 || index == 0) TMC_SET_CURRENT(Z); @@ -110,7 +112,7 @@ void GcodeSuite::M906() { case K_AXIS: TMC_SET_CURRENT(K); break; #endif - #if E_STEPPERS + #if AXIS_IS_TMC(E0) || AXIS_IS_TMC(E1) || AXIS_IS_TMC(E2) || AXIS_IS_TMC(E3) || AXIS_IS_TMC(E4) || AXIS_IS_TMC(E5) || AXIS_IS_TMC(E6) || AXIS_IS_TMC(E7) case E_AXIS: { const int8_t eindex = get_target_e_stepper_from_command(-2); #if AXIS_IS_TMC(E0) diff --git a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp index 37dd9479ab..6aeb9c3d9d 100644 --- a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp +++ b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp @@ -264,14 +264,28 @@ LOOP_LOGICAL_AXES(i) if (int32_t value = parser.longval(axis_codes[i])) { report = false; switch (i) { - case X_AXIS: - TERN_(X_HAS_STEALTHCHOP, if (index < 0 || index == 0) TMC_SET_PWMTHRS(X,X)); - TERN_(X2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_PWMTHRS(X,X2)); - break; - case Y_AXIS: - TERN_(Y_HAS_STEALTHCHOP, if (index < 0 || index == 0) TMC_SET_PWMTHRS(Y,Y)); - TERN_(Y2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_PWMTHRS(Y,Y2)); - break; + #if X_HAS_STEALTHCHOP || X2_HAS_STEALTHCHOP + case X_AXIS: + TERN_(X_HAS_STEALTHCHOP, if (index < 0 || index == 0) TMC_SET_PWMTHRS(X,X)); + TERN_(X2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_PWMTHRS(X,X2)); + break; + #endif + + #if Y_HAS_STEALTHCHOP || Y2_HAS_STEALTHCHOP + case Y_AXIS: + TERN_(Y_HAS_STEALTHCHOP, if (index < 0 || index == 0) TMC_SET_PWMTHRS(Y,Y)); + TERN_(Y2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_PWMTHRS(Y,Y2)); + break; + #endif + + #if Z_HAS_STEALTHCHOP || Z2_HAS_STEALTHCHOP || Z3_HAS_STEALTHCHOP || Z4_HAS_STEALTHCHOP + case Z_AXIS: + TERN_(Z_HAS_STEALTHCHOP, if (index < 0 || index == 0) TMC_SET_PWMTHRS(Z,Z)); + TERN_(Z2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_PWMTHRS(Z,Z2)); + TERN_(Z3_HAS_STEALTHCHOP, if (index < 0 || index == 2) TMC_SET_PWMTHRS(Z,Z3)); + TERN_(Z4_HAS_STEALTHCHOP, if (index < 0 || index == 3) TMC_SET_PWMTHRS(Z,Z4)); + break; + #endif #if I_HAS_STEALTHCHOP case I_AXIS: TMC_SET_PWMTHRS(I,I); break; @@ -283,13 +297,7 @@ case K_AXIS: TMC_SET_PWMTHRS(K,K); break; #endif - case Z_AXIS: - TERN_(Z_HAS_STEALTHCHOP, if (index < 0 || index == 0) TMC_SET_PWMTHRS(Z,Z)); - TERN_(Z2_HAS_STEALTHCHOP, if (index < 0 || index == 1) TMC_SET_PWMTHRS(Z,Z2)); - TERN_(Z3_HAS_STEALTHCHOP, if (index < 0 || index == 2) TMC_SET_PWMTHRS(Z,Z3)); - TERN_(Z4_HAS_STEALTHCHOP, if (index < 0 || index == 3) TMC_SET_PWMTHRS(Z,Z4)); - break; - #if E_STEPPERS + #if E0_HAS_STEALTHCHOP || E1_HAS_STEALTHCHOP || E2_HAS_STEALTHCHOP || E3_HAS_STEALTHCHOP || E4_HAS_STEALTHCHOP || E5_HAS_STEALTHCHOP || E6_HAS_STEALTHCHOP || E7_HAS_STEALTHCHOP case E_AXIS: { const int8_t eindex = get_target_e_stepper_from_command(-2); TERN_(E0_HAS_STEALTHCHOP, if (eindex < 0 || eindex == 0) TMC_SET_PWMTHRS_E(0)); diff --git a/Marlin/src/gcode/feature/trinamic/M919.cpp b/Marlin/src/gcode/feature/trinamic/M919.cpp new file mode 100644 index 0000000000..4dce28f0ae --- /dev/null +++ b/Marlin/src/gcode/feature/trinamic/M919.cpp @@ -0,0 +1,266 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include "../../../inc/MarlinConfig.h" + +#if HAS_TRINAMIC_CONFIG + +#if AXIS_COLLISION('I') + #error "M919 parameter collision with axis name." +#endif + +#include "../../gcode.h" +#include "../../../feature/tmc_util.h" +#include "../../../module/stepper/indirection.h" + +#define DEBUG_OUT ENABLED(MARLIN_DEV_MODE) +#include "../../../core/debug_out.h" + +template +static void tmc_print_chopper_time(TMC &st) { + st.printLabel(); + SERIAL_ECHOLNPGM(" chopper .toff: ", st.toff(), + " .hend: ", st.hysteresis_end(), + " .hstrt: ", st.hysteresis_start()); +} + +/** + * M919: Set TMC stepper driver chopper times + * + * Parameters: + * XYZ...E - Selected axes + * I[index] - Axis sub-index (Omit for all XYZ steppers, 1 for X2, Y2, Z2; 2 for Z3; 3 for Z4) + * T[index] - Extruder index (Zero-based. Omit for all extruders.) + * O - time-off [ 1..15] + * P - hysteresis_end [-3..12] + * S - hysteresis_start [ 1...8] + * + * With no parameters report chopper times for all axes + */ +void GcodeSuite::M919() { + bool err = false; + + int8_t toff = int8_t(parser.intval('O', -127)); + if (toff != -127) { + if (WITHIN(toff, 1, 15)) + DEBUG_ECHOLNPGM(".toff: ", toff); + else { + SERIAL_ECHOLNPGM("?O out of range (1..15)"); + err = true; + } + } + + int8_t hend = int8_t(parser.intval('P', -127)); + if (hend != -127) { + if (WITHIN(hend, -3, 12)) + DEBUG_ECHOLNPGM(".hend: ", hend); + else { + SERIAL_ECHOLNPGM("?P out of range (-3..12)"); + err = true; + } + } + + int8_t hstrt = int8_t(parser.intval('S', -127)); + if (hstrt != -127) { + if (WITHIN(hstrt, 1, 8)) + DEBUG_ECHOLNPGM(".hstrt: ", hstrt); + else { + SERIAL_ECHOLNPGM("?S out of range (1..8)"); + err = true; + } + } + + if (err) return; + + #if AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3) || AXIS_IS_TMC(Z4) + const int8_t index = parser.byteval('I'); + #else + constexpr int8_t index = -1; + #endif + + auto make_chopper_timing = [](chopper_timing_t bct, const int8_t toff, const int8_t hend, const int8_t hstrt) { + chopper_timing_t uct = bct; + if (toff != -127) uct.toff = toff; + if (hend != -127) uct.hend = hend; + if (hstrt != -127) uct.hstrt = hstrt; + return uct; + }; + + #define TMC_SET_CHOPPER_TIME(Q) stepper##Q.set_chopper_times(make_chopper_timing(CHOPPER_TIMING_##Q, toff, hend, hstrt)) + + #if AXIS_IS_TMC(E0) || AXIS_IS_TMC(E1) || AXIS_IS_TMC(E2) || AXIS_IS_TMC(E3) || AXIS_IS_TMC(E4) || AXIS_IS_TMC(E5) || AXIS_IS_TMC(E6) || AXIS_IS_TMC(E7) + #define HAS_E_CHOPPER 1 + int8_t eindex = -1; + #endif + bool report = true; + LOOP_LOGICAL_AXES(i) if (parser.seen_test(axis_codes[i])) { + report = false; + + // Get the chopper timing for the specified axis and index + switch (i) { + default: // A specified axis isn't Trinamic + SERIAL_ECHOLNPGM("?Axis ", AS_CHAR(axis_codes[i]), " has no TMC drivers."); + break; + + #if AXIS_IS_TMC(X) || AXIS_IS_TMC(X2) + case X_AXIS: + #if AXIS_IS_TMC(X) + if (index <= 0) TMC_SET_CHOPPER_TIME(X); + #endif + #if AXIS_IS_TMC(X2) + if (index < 0 || index == 1) TMC_SET_CHOPPER_TIME(X2); + #endif + break; + #endif + + #if AXIS_IS_TMC(Y) || AXIS_IS_TMC(Y2) + case Y_AXIS: + #if AXIS_IS_TMC(Y) + if (index <= 0) TMC_SET_CHOPPER_TIME(Y); + #endif + #if AXIS_IS_TMC(Y2) + if (index < 0 || index == 1) TMC_SET_CHOPPER_TIME(Y2); + #endif + break; + #endif + + #if AXIS_IS_TMC(Z) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3) || AXIS_IS_TMC(Z4) + case Z_AXIS: + #if AXIS_IS_TMC(Z) + if (index <= 0) TMC_SET_CHOPPER_TIME(Z); + #endif + #if AXIS_IS_TMC(Z2) + if (index < 0 || index == 1) TMC_SET_CHOPPER_TIME(Z2); + #endif + #if AXIS_IS_TMC(Z3) + if (index < 0 || index == 2) TMC_SET_CHOPPER_TIME(Z3); + #endif + #if AXIS_IS_TMC(Z4) + if (index < 0 || index == 3) TMC_SET_CHOPPER_TIME(Z4); + #endif + break; + #endif + + #if AXIS_IS_TMC(I) + case I_AXIS: TMC_SET_CHOPPER_TIME(I); break; + #endif + #if AXIS_IS_TMC(J) + case J_AXIS: TMC_SET_CHOPPER_TIME(J); break; + #endif + #if AXIS_IS_TMC(K) + case K_AXIS: TMC_SET_CHOPPER_TIME(K); break; + #endif + + #if HAS_E_CHOPPER + case E_AXIS: { + #if AXIS_IS_TMC(E0) + if (eindex <= 0) TMC_SET_CHOPPER_TIME(E0); + #endif + #if AXIS_IS_TMC(E1) + if (eindex < 0 || eindex == 1) TMC_SET_CHOPPER_TIME(E1); + #endif + #if AXIS_IS_TMC(E2) + if (eindex < 0 || eindex == 2) TMC_SET_CHOPPER_TIME(E2); + #endif + #if AXIS_IS_TMC(E3) + if (eindex < 0 || eindex == 3) TMC_SET_CHOPPER_TIME(E3); + #endif + #if AXIS_IS_TMC(E4) + if (eindex < 0 || eindex == 4) TMC_SET_CHOPPER_TIME(E4); + #endif + #if AXIS_IS_TMC(E5) + if (eindex < 0 || eindex == 5) TMC_SET_CHOPPER_TIME(E5); + #endif + #if AXIS_IS_TMC(E6) + if (eindex < 0 || eindex == 6) TMC_SET_CHOPPER_TIME(E6); + #endif + #if AXIS_IS_TMC(E7) + if (eindex < 0 || eindex == 7) TMC_SET_CHOPPER_TIME(E7); + #endif + } break; + #endif + } + } + + if (report) { + #define TMC_SAY_CHOPPER_TIME(Q) tmc_print_chopper_time(stepper##Q) + #if AXIS_IS_TMC(X) + TMC_SAY_CHOPPER_TIME(X); + #endif + #if AXIS_IS_TMC(X2) + TMC_SAY_CHOPPER_TIME(X2); + #endif + #if AXIS_IS_TMC(Y) + TMC_SAY_CHOPPER_TIME(Y); + #endif + #if AXIS_IS_TMC(Y2) + TMC_SAY_CHOPPER_TIME(Y2); + #endif + #if AXIS_IS_TMC(Z) + TMC_SAY_CHOPPER_TIME(Z); + #endif + #if AXIS_IS_TMC(Z2) + TMC_SAY_CHOPPER_TIME(Z2); + #endif + #if AXIS_IS_TMC(Z3) + TMC_SAY_CHOPPER_TIME(Z3); + #endif + #if AXIS_IS_TMC(Z4) + TMC_SAY_CHOPPER_TIME(Z4); + #endif + #if AXIS_IS_TMC(I) + TMC_SAY_CHOPPER_TIME(I); + #endif + #if AXIS_IS_TMC(J) + TMC_SAY_CHOPPER_TIME(J); + #endif + #if AXIS_IS_TMC(K) + TMC_SAY_CHOPPER_TIME(K); + #endif + #if AXIS_IS_TMC(E0) + TMC_SAY_CHOPPER_TIME(E0); + #endif + #if AXIS_IS_TMC(E1) + TMC_SAY_CHOPPER_TIME(E1); + #endif + #if AXIS_IS_TMC(E2) + TMC_SAY_CHOPPER_TIME(E2); + #endif + #if AXIS_IS_TMC(E3) + TMC_SAY_CHOPPER_TIME(E3); + #endif + #if AXIS_IS_TMC(E4) + TMC_SAY_CHOPPER_TIME(E4); + #endif + #if AXIS_IS_TMC(E5) + TMC_SAY_CHOPPER_TIME(E5); + #endif + #if AXIS_IS_TMC(E6) + TMC_SAY_CHOPPER_TIME(E6); + #endif + #if AXIS_IS_TMC(E7) + TMC_SAY_CHOPPER_TIME(E7); + #endif + } +} + +#endif // HAS_TRINAMIC_CONFIG diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 2f031b3b74..c365f8a67b 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -971,6 +971,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) { #if USE_SENSORLESS case 914: M914(); break; // M914: Set StallGuard sensitivity. #endif + case 919: M919(); break; // M919: Set stepper Chopper Times #endif #if HAS_L64XX diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 92c1459a32..78dd0bc680 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -296,6 +296,7 @@ * M916 - L6470 tuning: Increase KVAL_HOLD until thermal warning. (Requires at least one _DRIVER_TYPE L6470) * M917 - L6470 tuning: Find minimum current thresholds. (Requires at least one _DRIVER_TYPE L6470) * M918 - L6470 tuning: Increase speed until max or error. (Requires at least one _DRIVER_TYPE L6470) + * M919 - Get or Set motor Chopper Times (time_off, hysteresis_end, hysteresis_start) using axis codes XYZE, etc. If no parameters are given, report. (Requires at least one _DRIVER_TYPE defined as TMC2130/2160/5130/5160/2208/2209/2660) * M951 - Set Magnetic Parking Extruder parameters. (Requires MAGNETIC_PARKING_EXTRUDER) * M3426 - Read MCP3426 ADC over I2C. (Requires HAS_MCP3426_ADC) * M7219 - Control Max7219 Matrix LEDs. (Requires MAX7219_GCODE) @@ -1140,6 +1141,7 @@ private: static void M914(); static void M914_report(const bool forReplay=true); #endif + static void M919(); #endif #if HAS_L64XX diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 9ed25a6114..477309ad81 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -2395,28 +2395,28 @@ // ADC Temp Sensors (Thermistor or Thermocouple with amplifier ADC interface) // #define HAS_ADC_TEST(P) (PIN_EXISTS(TEMP_##P) && TEMP_SENSOR_##P != 0 && NONE(TEMP_SENSOR_##P##_IS_MAX_TC, TEMP_SENSOR_##P##_IS_DUMMY)) -#if HAS_ADC_TEST(0) +#if HOTENDS > 0 && HAS_ADC_TEST(0) #define HAS_TEMP_ADC_0 1 #endif -#if HAS_ADC_TEST(1) +#if HOTENDS > 1 && HAS_ADC_TEST(1) #define HAS_TEMP_ADC_1 1 #endif -#if HAS_ADC_TEST(2) +#if HOTENDS > 2 && HAS_ADC_TEST(2) #define HAS_TEMP_ADC_2 1 #endif -#if HAS_ADC_TEST(3) +#if HOTENDS > 3 && HAS_ADC_TEST(3) #define HAS_TEMP_ADC_3 1 #endif -#if HAS_ADC_TEST(4) +#if HOTENDS > 4 && HAS_ADC_TEST(4) #define HAS_TEMP_ADC_4 1 #endif -#if HAS_ADC_TEST(5) +#if HOTENDS > 5 && HAS_ADC_TEST(5) #define HAS_TEMP_ADC_5 1 #endif -#if HAS_ADC_TEST(6) +#if HOTENDS > 6 && HAS_ADC_TEST(6) #define HAS_TEMP_ADC_6 1 #endif -#if HAS_ADC_TEST(7) +#if HOTENDS > 7 && HAS_ADC_TEST(7) #define HAS_TEMP_ADC_7 1 #endif #if HAS_ADC_TEST(BED) diff --git a/ini/features.ini b/ini/features.ini index 5f69fcca25..eb3be400b1 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -18,7 +18,7 @@ POSTMORTEM_DEBUGGING = src_filter=+ + + + + + src_filter=+ + + + + + HAS_STEALTHCHOP = src_filter=+ SR_LCD_3W_NL = SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip HAS_MOTOR_CURRENT_I2C = SlowSoftI2CMaster diff --git a/platformio.ini b/platformio.ini index 74ac012f19..e1db73a4bd 100644 --- a/platformio.ini +++ b/platformio.ini @@ -204,6 +204,7 @@ default_src_filter = + - - + - - - + - - - - From cb96f9d6c0f61e7a1d17b8b1983173035379491c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20H=C3=B6rmann?= Date: Sun, 2 Jan 2022 06:46:55 +0100 Subject: [PATCH 307/532] =?UTF-8?q?=F0=9F=94=A8=20Upload=20to=20Optiboot?= =?UTF-8?q?=20at=20115200=20(#23403)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ini/avr.ini | 45 ++++++++++----------------------------------- ini/teensy.ini | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 35 deletions(-) diff --git a/ini/avr.ini b/ini/avr.ini index e4d64de712..92dd8f0cdb 100644 --- a/ini/avr.ini +++ b/ini/avr.ini @@ -106,14 +106,6 @@ extends = common_avr8 board = sanguino_atmega1284p board_upload.maximum_size = 126976 -# -# Melzi and clones (ATmega1284p) -# -[env:melzi] -platform = atmelavr -extends = env:sanguino1284p -upload_speed = 57600 - # # Sanguinololu (ATmega1284p stock bootloader with tuned flags) # @@ -123,15 +115,21 @@ build_flags = ${common.build_flags} -fno-tree-scev-cprop -fno-split-wide-types - [env:sanguino1284p_optimized] platform = atmelavr -extends = env:melzi +extends = env:sanguino1284p build_flags = ${tuned_1284p.build_flags} # -# Melzi and clones (alias for sanguino1284p_optimized) +# Melzi and clones (ATmega1284p) # +[env:melzi] +platform = atmelavr +extends = env:sanguino1284p +upload_speed = 57600 + [env:melzi_optimized] -platform = atmelavr -extends = env:sanguino1284p_optimized +platform = atmelavr +extends = env:sanguino1284p_optimized +upload_speed = 57600 # # Melzi and clones (Optiboot bootloader) @@ -150,26 +148,3 @@ board_upload.maximum_size = 130048 platform = atmelavr extends = env:melzi_optiboot build_flags = ${tuned_1284p.build_flags} - -# -# AT90USB1286 boards using CDC bootloader -# - BRAINWAVE -# - BRAINWAVE_PRO -# - SAV_MKI -# - TEENSYLU -# -[env:at90usb1286_cdc] -platform = teensy -extends = common_avr8 -board = marlin_at90usb1286 -lib_ignore = ${env:common_avr8.lib_ignore}, Teensy_ADC, NativeEthernet - -# -# AT90USB1286 boards using DFU bootloader -# - Printrboard -# - Printrboard Rev.F -# - ? 5DPRINT ? -# -[env:at90usb1286_dfu] -platform = teensy -extends = env:at90usb1286_cdc diff --git a/ini/teensy.ini b/ini/teensy.ini index ef1ad766bc..f3e5fd0260 100644 --- a/ini/teensy.ini +++ b/ini/teensy.ini @@ -9,6 +9,24 @@ # # ################################# +# +# AT90USB1286 boards using CDC bootloader +# e.g., BRAINWAVE, BRAINWAVE_PRO, SAV_MKI, TEENSYLU +# +[env:at90usb1286_cdc] +platform = teensy +extends = common_avr8 +board = marlin_at90usb1286 +lib_ignore = ${env:common_avr8.lib_ignore}, Teensy_ADC, NativeEthernet + +# +# AT90USB1286 boards using DFU bootloader +# e.g., Printrboard, Printrboard Rev.F, 5DPRINT +# +[env:at90usb1286_dfu] +platform = teensy +extends = env:at90usb1286_cdc + # # Teensy++ 2.0 # From e37fe8566787cc006f70babb39e84226020d5e70 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Sun, 2 Jan 2022 00:19:10 -0800 Subject: [PATCH 308/532] =?UTF-8?q?=F0=9F=94=A7=20Update=20deprecated=20au?= =?UTF-8?q?to=5Fbuild.py=20(#23427)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/vscode/auto_build.py | 227 +++++++++++++-------------- 1 file changed, 106 insertions(+), 121 deletions(-) diff --git a/buildroot/share/vscode/auto_build.py b/buildroot/share/vscode/auto_build.py index ac8432729f..5bd769478e 100644 --- a/buildroot/share/vscode/auto_build.py +++ b/buildroot/share/vscode/auto_build.py @@ -72,7 +72,7 @@ from __future__ import print_function from __future__ import division -import sys,os +import sys,os,re pwd = os.getcwd() # make sure we're executing from the correct directory level pwd = pwd.replace('\\', '/') @@ -123,7 +123,7 @@ from datetime import datetime, date, time # ########################################################################################## -def get_answer(board_name, cpu_label_txt, cpu_a_txt, cpu_b_txt): +def get_answer(board_name, question_txt, options, default_value=1): if python_ver == 2: import Tkinter as tk @@ -151,10 +151,10 @@ def get_answer(board_name, cpu_label_txt, cpu_a_txt, cpu_b_txt): root_get_answer.protocol("WM_DELETE_WINDOW", disable_event) root_get_answer.resizable(False, False) - root_get_answer.radio_state = 1 # declare variables used by TK and enable + root_get_answer.radio_state = default_value # declare variables used by TK and enable global get_answer_val - get_answer_val = 2 # return get_answer_val, set default to match radio_state default + get_answer_val = default_value # return get_answer_val, set default to match radio_state default radio_state = tk.IntVar() radio_state.set(get_answer_val) @@ -162,35 +162,27 @@ def get_answer(board_name, cpu_label_txt, cpu_a_txt, cpu_b_txt): l1 = tk.Label(text=board_name, fg="light green", bg="dark green", font="default 14 bold").grid(row=0, columnspan=2, sticky='EW', ipadx=2, ipady=2) - l2 = tk.Label(text=cpu_label_txt).grid(row=1, pady=4, columnspan=2, sticky='EW') + l2 = tk.Label(text=question_txt).grid(row=1, pady=4, columnspan=2, sticky='EW') - b4 = tk.Radiobutton( - text=cpu_a_txt, - fg="black", - bg="lightgray", - relief=tk.SUNKEN, - selectcolor="green", - variable=radio_state, - value=1, - indicatoron=0, - command=CPU_exit_3 - ).grid(row=2, pady=1, ipady=2, ipadx=10, columnspan=2) + buttons = [] - b5 = tk.Radiobutton( - text=cpu_b_txt, - fg="black", - bg="lightgray", - relief=tk.SUNKEN, - selectcolor="green", - variable=radio_state, - value=2, - indicatoron=0, - command=CPU_exit_3 - ).grid(row=3, pady=1, ipady=2, ipadx=10, columnspan=2) # use same variable but inverted so they will track + for index, val in enumerate(options): + buttons.append( + tk.Radiobutton( + text=val, + fg="black", + bg="lightgray", + relief=tk.SUNKEN, + selectcolor="green", + variable=radio_state, + value=index + 1, + indicatoron=0, + command=CPU_exit_3 + ).grid(row=index + 2, pady=1, ipady=2, ipadx=10, columnspan=2)) - b6 = tk.Button(text="Cancel", fg="red", command=kill_session).grid(row=4, column=0, padx=4, pady=4, ipadx=2, ipady=2) + b6 = tk.Button(text="Cancel", fg="red", command=kill_session).grid(row=(2 + len(options)), column=0, padx=4, pady=4, ipadx=2, ipady=2) - b7 = tk.Button(text="Continue", fg="green", command=got_answer).grid(row=4, column=1, padx=4, pady=4, ipadx=2, ipady=2) + b7 = tk.Button(text="Continue", fg="green", command=got_answer).grid(row=(2 + len(options)), column=1, padx=4, pady=4, ipadx=2, ipady=2) def got_answer_(): root_get_answer.destroy() @@ -485,6 +477,11 @@ def get_env_from_line(line, start_position): return env, next_position +def invalid_board(): + print('ERROR - invalid board') + print(board_name) + raise SystemExit(0) # quit if unable to find board + # scan pins.h for board name and return the environment(s) found def get_starting_env(board_name_full, version): # get environment starting point @@ -496,48 +493,26 @@ def get_starting_env(board_name_full, version): with open(path, 'r') as myfile: pins_h = myfile.read() - env_A = '' - env_B = '' - env_C = '' - board_name = board_name_full[6:] # only use the part after "BOARD_" since we're searching the pins.h file pins_h = pins_h.split('\n') - environment = '' - board_line = '' - cpu_A = '' - cpu_B = '' - i = 0 list_start_found = False - for lines in pins_h: - i = i + 1 # i is always one ahead of the index into pins_h - if 0 < lines.find("Unknown MOTHERBOARD value set in Configuration.h"): - break # no more - if 0 < lines.find('1280'): + possible_envs = None + for i, line in enumerate(pins_h): + if 0 < line.find("Unknown MOTHERBOARD value set in Configuration.h"): + invalid_board(); + if list_start_found == False and 0 < line.find('1280'): list_start_found = True - if list_start_found == False: # skip lines until find start of CPU list + elif list_start_found == False: # skip lines until find start of CPU list continue - board = lines.find(board_name) - comment_start = lines.find('// ') - cpu_A_loc = comment_start - cpu_B_loc = 0 - if board > 0: # need to look at the next line for environment info - cpu_line = pins_h[i] - comment_start = cpu_line.find('// ') - env_A, next_position = get_env_from_line(cpu_line, comment_start) # get name of environment & start of search for next - env_B, next_position = get_env_from_line(cpu_line, next_position) # get next environment, if it exists - env_C, next_position = get_env_from_line(cpu_line, next_position) # get next environment, if it exists + + # Use a regex to find the board. Make sure it is surrounded by separators so the full boardname + # will be matched, even if multiple exist in a single MB macro. This avoids problems with boards + # such as MALYAN_M200 and MALYAN_M200_V2 where one board is a substring of the other. + if re.search(r'MB.*[\(, ]' + board_name + r'[, \)]', line): + # need to look at the next line for environment info + possible_envs = re.findall(r'env:([^ ]+)', pins_h[i + 1]) break - return env_A, env_B, env_C - - -# Scan input string for CPUs that users may need to select from -# return: CPU name -def get_CPU_name(environment): - CPU_list = ('1280', '2560', '644', '1284', 'LPC1768', 'DUE') - CPU_name = '' - for CPU in CPU_list: - if 0 < environment.find(CPU): - return CPU + return possible_envs # get environment to be used for the build @@ -549,71 +524,81 @@ def get_env(board_name, ver_Marlin): print(board_name) raise SystemExit(0) # no environment so quit - def invalid_board(): - print('ERROR - invalid board') - print(board_name) - raise SystemExit(0) # quit if unable to find board + possible_envs = get_starting_env(board_name, ver_Marlin) - CPU_question = (('1280', '2560', '1280 or 2560 CPU?'), ('644', '1284', '644 or 1284 CPU?')) + if not possible_envs: + no_environment() - if 0 < board_name.find('MELZI'): - get_answer( - board_name, " Which flavor of Melzi? ", "Melzi (Optiboot bootloader)", "Melzi " - ) + # Proceed to ask questions based on the available environments to filter down to a smaller list. + # If more then one remains after this filtering the user will be prompted to choose between + # all remaining options. + + # Filter selection based on CPU choice + CPU_questions = [ + {'options':['1280', '2560'], 'text':'1280 or 2560 CPU?', 'default':2}, + {'options':['644', '1284'], 'text':'644 or 1284 CPU?', 'default':2}, + {'options':['STM32F103RC', 'STM32F103RE'], 'text':'MCU Type?', 'default':1}] + + for question in CPU_questions: + if any(question['options'][0] in env for env in possible_envs) and any(question['options'][1] in env for env in possible_envs): + get_answer(board_name, question['text'], [question['options'][0], question['options'][1]], question['default']) + possible_envs = [env for env in possible_envs if question['options'][get_answer_val - 1] in env] + + # Choose which STM32 framework to use, if both are available + if [env for env in possible_envs if '_maple' in env] and [env for env in possible_envs if '_maple' not in env]: + get_answer(board_name, 'Which STM32 Framework should be used?', ['ST STM32 (Preferred)', 'Maple (Deprecated)']) if 1 == get_answer_val: - target_env = 'melzi_optiboot' + possible_envs = [env for env in possible_envs if '_maple' not in env] else: - target_env = 'melzi' - else: - env_A, env_B, env_C = get_starting_env(board_name, ver_Marlin) + possible_envs = [env for env in possible_envs if '_maple' in env] - if env_A == '': - no_environment() - if env_B == '': - return env_A # only one environment so finished + # Both USB and non-USB STM32 options exist, filter based on these + if any('STM32F103R' in env for env in possible_envs) and any('_USB' in env for env in possible_envs) and any('_USB' not in env for env in possible_envs): + get_answer(board_name, 'USB Support?', ['USB', 'No USB']) + if 1 == get_answer_val: + possible_envs = [env for env in possible_envs if '_USB' in env] + else: + possible_envs = [env for env in possible_envs if '_USB' not in env] - CPU_A = get_CPU_name(env_A) - CPU_B = get_CPU_name(env_B) + if not possible_envs: + no_environment() + if len(possible_envs) == 1: + return possible_envs[0] # only one environment so finished - for item in CPU_question: - if CPU_A == item[0]: - get_answer(board_name, item[2], item[0], item[1]) - if 2 == get_answer_val: - target_env = env_B - else: - target_env = env_A - return target_env + target_env = None - if env_A == 'LPC1768': - if build_type == 'traceback' or (build_type == 'clean' and get_build_last() == 'LPC1768_debug_and_upload'): - target_env = 'LPC1768_debug_and_upload' - else: - target_env = 'LPC1768' - elif env_A == 'DUE': - target_env = 'DUE' - if build_type == 'traceback' or (build_type == 'clean' and get_build_last() == 'DUE_debug'): - target_env = 'DUE_debug' - elif env_B == 'DUE_USB': - get_answer(board_name, 'DUE Download Port?', '(Native) USB port', 'Programming port') - if 1 == get_answer_val: - target_env = 'DUE_USB' - else: - target_env = 'DUE' - elif env_A == 'STM32F103RC_btt' or env_A == 'STM32F103RE_btt': - if env_A == 'STM32F103RE_btt': - get_answer(board_name, 'MCU Type?', 'STM32F103RC', 'STM32F103RE') - if 1 == get_answer_val: - env_A = 'STM32F103RC_btt' - target_env = env_A - if env_A == 'STM32F103RC_btt': - get_answer(board_name, 'RCT6 Flash Size?', '512K', '256K') - if 1 == get_answer_val: - target_env += '_512K' - get_answer(board_name, 'USB Support?', 'USB', 'No USB') + # A few environments require special behavior + if 'LPC1768' in possible_envs: + if build_type == 'traceback' or (build_type == 'clean' and get_build_last() == 'LPC1768_debug_and_upload'): + target_env = 'LPC1768_debug_and_upload' + else: + target_env = 'LPC1768' + elif 'DUE' in possible_envs: + target_env = 'DUE' + if build_type == 'traceback' or (build_type == 'clean' and get_build_last() == 'DUE_debug'): + target_env = 'DUE_debug' + elif 'DUE_USB' in possible_envs: + get_answer(board_name, 'DUE Download Port?', ['(Native) USB port', 'Programming port']) if 1 == get_answer_val: - target_env += '_USB' - else: - invalid_board() + target_env = 'DUE_USB' + else: + target_env = 'DUE' + else: + options = possible_envs + # Perform some substitutions for environment names which follow a consistent + # naming pattern and are very commonly used. This is fragile code, and replacements + # should only be made here for stable environments unlikely to change often. + for i, option in enumerate(options): + if 'melzi' in option: + options[i] = 'Melzi' + elif 'sanguino1284p' in option: + options[i] = 'sanguino1284p' + if 'optiboot' in option: + options[i] = options[i] + ' (Optiboot Bootloader)' + if 'optimized' in option: + options[i] = options[i] + ' (Optimized for Size)' + get_answer(board_name, 'Which environment?', options) + target_env = possible_envs[get_answer_val - 1] if build_type == 'traceback' and target_env != 'LPC1768_debug_and_upload' and target_env != 'DUE_debug' and Marlin_ver == 2: print("ERROR - this board isn't setup for traceback") From d007c1b835847ab21d5f9668300d5131713c84dc Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Sun, 2 Jan 2022 02:23:55 -0600 Subject: [PATCH 309/532] =?UTF-8?q?=F0=9F=94=A7=20Normal=20FET=20layout=20?= =?UTF-8?q?with=20Spindle/Laser=20(#23409)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/mega/pins_HJC2560C_REV2.h | 2 +- Marlin/src/pins/pins.h | 2 +- Marlin/src/pins/ramps/pins_TT_OSCAR.h | 2 +- Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h | 2 +- Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Marlin/src/pins/mega/pins_HJC2560C_REV2.h b/Marlin/src/pins/mega/pins_HJC2560C_REV2.h index dcf25da070..73d4bac472 100644 --- a/Marlin/src/pins/mega/pins_HJC2560C_REV2.h +++ b/Marlin/src/pins/mega/pins_HJC2560C_REV2.h @@ -112,7 +112,7 @@ // // M3/M4/M5 - Spindle/Laser Control // -#if EITHER(SPINDLE_FEATURE, LASER_FEATURE) +#if HAS_CUTTER #define SPINDLE_DIR_PIN 16 #define SPINDLE_LASER_ENA_PIN 17 // Pin should have a pullup! #define SPINDLE_LASER_PWM_PIN 9 // Hardware PWM diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 0f0f42508d..1cb9462de4 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -45,7 +45,7 @@ #define FET_ORDER_EFF 1 #elif MB(RAMPS_13_EEF, RAMPS_14_EEF, RAMPS_PLUS_EEF, RAMPS_14_RE_ARM_EEF, RAMPS_SMART_EEF, RAMPS_DUO_EEF, RAMPS4DUE_EEF) #define FET_ORDER_EEF 1 -#elif MB(RAMPS_13_SF, RAMPS_14_SF, RAMPS_PLUS_SF, RAMPS_14_RE_ARM_SF, RAMPS_SMART_SF, RAMPS_DUO_SF, RAMPS4DUE_SF) || EITHER(SPINDLE_FEATURE, LASER_FEATURE) +#elif MB(RAMPS_13_SF, RAMPS_14_SF, RAMPS_PLUS_SF, RAMPS_14_RE_ARM_SF, RAMPS_SMART_SF, RAMPS_DUO_SF, RAMPS4DUE_SF) #define FET_ORDER_SF 1 #elif HAS_MULTI_HOTEND && TEMP_SENSOR_BED #define FET_ORDER_EEB 1 diff --git a/Marlin/src/pins/ramps/pins_TT_OSCAR.h b/Marlin/src/pins/ramps/pins_TT_OSCAR.h index 01769fbff0..a07892914e 100644 --- a/Marlin/src/pins/ramps/pins_TT_OSCAR.h +++ b/Marlin/src/pins/ramps/pins_TT_OSCAR.h @@ -226,7 +226,7 @@ // // M3/M4/M5 - Spindle/Laser Control // -#if EITHER(SPINDLE_FEATURE, LASER_FEATURE) && !PIN_EXISTS(SPINDLE_LASER_ENA) +#if HAS_CUTTER && !PIN_EXISTS(SPINDLE_LASER_ENA) #if !NUM_SERVOS // Prefer the servo connector #define SPINDLE_LASER_ENA_PIN 4 // Pullup or pulldown! #define SPINDLE_LASER_PWM_PIN 6 // Hardware PWM diff --git a/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h b/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h index 02f4a6e985..ba9cc350a8 100644 --- a/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h +++ b/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h @@ -135,7 +135,7 @@ #define LCD_BACKLIGHT_PIN 17 // LCD backlight LED #endif -#if NONE(SPINDLE_FEATURE, LASER_FEATURE) && ENABLED(SANGUINOLOLU_V_1_2) && !BOTH(IS_ULTRA_LCD, IS_NEWPANEL) // try to use IO Header +#if !HAS_CUTTER && ENABLED(SANGUINOLOLU_V_1_2) && !BOTH(IS_ULTRA_LCD, IS_NEWPANEL) // try to use IO Header #define CASE_LIGHT_PIN 4 // Hardware PWM - see if IO Header is available #endif diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h index 079d6dcccc..4f5ed6c1b4 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h @@ -253,7 +253,7 @@ #define FAN_PIN PB7 // Fan0 #endif -#if EITHER(SPINDLE_FEATURE, LASER_FEATURE) +#if HAS_CUTTER #ifndef SPINDLE_LASER_PWM_PIN #define SPINDLE_LASER_PWM_PIN PB5 #endif From 91909163ee0eb19920309a4ad9042d9240201fa4 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 2 Jan 2022 09:22:06 -0600 Subject: [PATCH 310/532] =?UTF-8?q?=F0=9F=9A=A8=20Fix=20M906=20warning?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/feature/L6470/M906.cpp | 26 +++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/Marlin/src/gcode/feature/L6470/M906.cpp b/Marlin/src/gcode/feature/L6470/M906.cpp index ae4a46dce6..f55405b798 100644 --- a/Marlin/src/gcode/feature/L6470/M906.cpp +++ b/Marlin/src/gcode/feature/L6470/M906.cpp @@ -246,16 +246,18 @@ void GcodeSuite::M906() { } switch (i) { - case X_AXIS: - #if AXIS_IS_L64XX(X) - if (index < 0 || index == 0) L6470_SET_KVAL_HOLD(X); - #endif - #if AXIS_IS_L64XX(X2) - if (index < 0 || index == 1) L6470_SET_KVAL_HOLD(X2); - #endif - break; + #if AXIS_IS_L64XX(X) || AXIS_IS_L64XX(X2) + case X_AXIS: + #if AXIS_IS_L64XX(X) + if (index < 0 || index == 0) L6470_SET_KVAL_HOLD(X); + #endif + #if AXIS_IS_L64XX(X2) + if (index < 0 || index == 1) L6470_SET_KVAL_HOLD(X2); + #endif + break; + #endif - #if HAS_Y_AXIS + #if AXIS_IS_L64XX(Y) || AXIS_IS_L64XX(Y2) case Y_AXIS: #if AXIS_IS_L64XX(Y) if (index < 0 || index == 0) L6470_SET_KVAL_HOLD(Y); @@ -266,7 +268,7 @@ void GcodeSuite::M906() { break; #endif - #if HAS_Z_AXIS + #if AXIS_IS_L64XX(Z) || AXIS_IS_L64XX(Z2) || AXIS_IS_L64XX(Z3) || AXIS_IS_L64XX(Z4) case Z_AXIS: #if AXIS_IS_L64XX(Z) if (index < 0 || index == 0) L6470_SET_KVAL_HOLD(Z); @@ -277,13 +279,13 @@ void GcodeSuite::M906() { #if AXIS_IS_L64XX(Z3) if (index < 0 || index == 2) L6470_SET_KVAL_HOLD(Z3); #endif - #if AXIS_DRIVER_TYPE_Z4(L6470) + #if AXIS_IS_L64XX(Z4) if (index < 0 || index == 3) L6470_SET_KVAL_HOLD(Z4); #endif break; #endif - #if E_STEPPERS + #if AXIS_IS_L64XX(E0) || AXIS_IS_L64XX(E1) || AXIS_IS_L64XX(E2) || AXIS_IS_L64XX(E3) || AXIS_IS_L64XX(E4) || AXIS_IS_L64XX(E5) || AXIS_IS_L64XX(E6) || AXIS_IS_L64XX(E7) case E_AXIS: { const int8_t eindex = get_target_e_stepper_from_command(-2); #if AXIS_IS_L64XX(E0) From e65c12cf96a226019a7456099078ee5cb03f9a49 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 2 Jan 2022 09:22:36 -0600 Subject: [PATCH 311/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20App?= =?UTF-8?q?ly=20axis=20conditionals?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/language.h | 6 +- Marlin/src/core/types.h | 16 ++-- Marlin/src/gcode/calibrate/G28.cpp | 12 +-- Marlin/src/gcode/calibrate/G425.cpp | 28 +++---- .../src/gcode/feature/trinamic/M911-M914.cpp | 8 +- Marlin/src/inc/Conditionals_LCD.h | 22 +++++- Marlin/src/inc/Conditionals_adv.h | 6 -- Marlin/src/inc/Conditionals_post.h | 44 +++++------ Marlin/src/inc/SanityCheck.h | 74 +++++++++---------- Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp | 6 +- Marlin/src/lcd/extui/nextion/nextion_tft.cpp | 17 ++--- Marlin/src/lcd/menu/menu_backlash.cpp | 6 +- Marlin/src/lcd/menu/menu_motion.cpp | 24 +++--- Marlin/src/libs/L64XX/L64XX_Marlin.cpp | 6 +- Marlin/src/module/endstops.cpp | 6 +- Marlin/src/module/motion.cpp | 30 ++++---- Marlin/src/module/motion.h | 18 ++--- Marlin/src/module/planner.cpp | 32 ++++---- Marlin/src/module/settings.cpp | 6 +- Marlin/src/module/stepper.cpp | 16 ++-- Marlin/src/module/stepper/indirection.h | 12 +-- Marlin/src/module/stepper/trinamic.h | 6 +- Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h | 2 +- Marlin/src/pins/pins_postprocess.h | 16 ++-- Marlin/src/pins/rambo/pins_EINSY_RETRO.h | 10 +-- Marlin/src/pins/sam/pins_RURAMPS4D_11.h | 4 - Marlin/src/pins/sam/pins_RURAMPS4D_13.h | 9 +-- Marlin/src/pins/sensitive_pins.h | 6 +- Marlin/src/pins/stm32f7/pins_REMRAM_V1.h | 3 +- 29 files changed, 220 insertions(+), 231 deletions(-) diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h index 707296b357..c1f2e7e31c 100644 --- a/Marlin/src/core/language.h +++ b/Marlin/src/core/language.h @@ -369,7 +369,7 @@ #define LCD_STR_E STR_E // Extra Axis and Endstop Names -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #if AXIS4_NAME == 'A' #define AXIS4_STR "A" #define STR_I_MIN "a_min" @@ -403,7 +403,7 @@ #define AXIS4_STR "" #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #if AXIS5_NAME == 'A' #define AXIS5_STR "A" #define STR_J_MIN "a_min" @@ -437,7 +437,7 @@ #define AXIS5_STR "" #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #if AXIS6_NAME == 'A' #define AXIS6_STR "A" #define STR_K_MIN "a_min" diff --git a/Marlin/src/core/types.h b/Marlin/src/core/types.h index d589abfc1a..e5d95d81ec 100644 --- a/Marlin/src/core/types.h +++ b/Marlin/src/core/types.h @@ -98,10 +98,10 @@ enum AxisEnum : uint8_t { // A, B, and C are for DELTA, SCARA, etc. , A_AXIS = X_AXIS - #if LINEAR_AXES >= 2 + #if HAS_Y_AXIS , B_AXIS = Y_AXIS #endif - #if LINEAR_AXES >= 3 + #if HAS_Z_AXIS , C_AXIS = Z_AXIS #endif @@ -408,13 +408,13 @@ struct XYZval { FI void set(const T (&arr)[DISTINCT_AXES]) { LINEAR_AXIS_CODE(x = arr[0], y = arr[1], z = arr[2], i = arr[3], j = arr[4], k = arr[5]); } #endif #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS FI void set(const T px, const T py, const T pz) { x = px; y = py; z = pz; } #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS FI void set(const T px, const T py, const T pz, const T pi) { x = px; y = py; z = pz; i = pi; } #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS FI void set(const T px, const T py, const T pz, const T pi, const T pj) { x = px; y = py; z = pz; i = pi; j = pj; } #endif @@ -549,13 +549,13 @@ struct XYZEval { FI void set(const XYZval pxyz, const T pe) { set(pxyz); e = pe; } FI void set(LOGICAL_AXIS_ARGS(const T)) { LOGICAL_AXIS_CODE(_e = e, a = x, b = y, c = z, u = i, v = j, w = k); } #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS FI void set(const T px, const T py, const T pz) { x = px; y = py; z = pz; } #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS FI void set(const T px, const T py, const T pz, const T pi) { x = px; y = py; z = pz; i = pi; } #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS FI void set(const T px, const T py, const T pz, const T pi, const T pj) { x = px; y = py; z = pz; i = pi; j = pj; } #endif diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 8743c0d895..421220e410 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -441,15 +441,9 @@ void GcodeSuite::G28() { } #endif - #if LINEAR_AXES >= 4 - if (doI) homeaxis(I_AXIS); - #endif - #if LINEAR_AXES >= 5 - if (doJ) homeaxis(J_AXIS); - #endif - #if LINEAR_AXES >= 6 - if (doK) homeaxis(K_AXIS); - #endif + TERN_(HAS_I_AXIS, if (doI) homeaxis(I_AXIS)); + TERN_(HAS_J_AXIS, if (doJ) homeaxis(J_AXIS)); + TERN_(HAS_K_AXIS, if (doK) homeaxis(K_AXIS)); sync_plan_position(); diff --git a/Marlin/src/gcode/calibrate/G425.cpp b/Marlin/src/gcode/calibrate/G425.cpp index 31e0bb2587..9d630ba1e2 100644 --- a/Marlin/src/gcode/calibrate/G425.cpp +++ b/Marlin/src/gcode/calibrate/G425.cpp @@ -73,16 +73,16 @@ #if BOTH(CALIBRATION_MEASURE_LEFT, CALIBRATION_MEASURE_RIGHT) #define HAS_X_CENTER 1 #endif -#if HAS_Y_AXIS && BOTH(CALIBRATION_MEASURE_FRONT, CALIBRATION_MEASURE_BACK) +#if ALL(HAS_Y_AXIS, CALIBRATION_MEASURE_FRONT, CALIBRATION_MEASURE_BACK) #define HAS_Y_CENTER 1 #endif -#if LINEAR_AXES >= 4 && BOTH(CALIBRATION_MEASURE_IMIN, CALIBRATION_MEASURE_IMAX) +#if ALL(HAS_I_AXIS, CALIBRATION_MEASURE_IMIN, CALIBRATION_MEASURE_IMAX) #define HAS_I_CENTER 1 #endif -#if LINEAR_AXES >= 5 && BOTH(CALIBRATION_MEASURE_JMIN, CALIBRATION_MEASURE_JMAX) +#if ALL(HAS_J_AXIS, CALIBRATION_MEASURE_JMIN, CALIBRATION_MEASURE_JMAX) #define HAS_J_CENTER 1 #endif -#if LINEAR_AXES >= 6 && BOTH(CALIBRATION_MEASURE_KMIN, CALIBRATION_MEASURE_KMAX) +#if ALL(HAS_K_AXIS, CALIBRATION_MEASURE_KMIN, CALIBRATION_MEASURE_KMAX) #define HAS_K_CENTER 1 #endif @@ -246,7 +246,7 @@ inline void probe_side(measurements_t &m, const float uncertainty, const side_t case RIGHT: dir = -1; case LEFT: axis = X_AXIS; break; #endif - #if LINEAR_AXES >= 2 && AXIS_CAN_CALIBRATE(Y) + #if HAS_Y_AXIS && AXIS_CAN_CALIBRATE(Y) case BACK: dir = -1; case FRONT: axis = Y_AXIS; break; #endif @@ -258,15 +258,15 @@ inline void probe_side(measurements_t &m, const float uncertainty, const side_t return; } #endif - #if LINEAR_AXES >= 4 && AXIS_CAN_CALIBRATE(I) + #if HAS_I_AXIS && AXIS_CAN_CALIBRATE(I) case IMINIMUM: dir = -1; case IMAXIMUM: axis = I_AXIS; break; #endif - #if LINEAR_AXES >= 5 && AXIS_CAN_CALIBRATE(J) + #if HAS_J_AXIS && AXIS_CAN_CALIBRATE(J) case JMINIMUM: dir = -1; case JMAXIMUM: axis = J_AXIS; break; #endif - #if LINEAR_AXES >= 6 && AXIS_CAN_CALIBRATE(K) + #if HAS_K_AXIS && AXIS_CAN_CALIBRATE(K) case KMINIMUM: dir = -1; case KMAXIMUM: axis = K_AXIS; break; #endif @@ -370,7 +370,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { SERIAL_ECHOLNPGM(" Back: ", m.obj_side[BACK]); #endif #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS #if ENABLED(CALIBRATION_MEASURE_IMIN) SERIAL_ECHOLNPGM(" " STR_I_MIN ": ", m.obj_side[IMINIMUM]); #endif @@ -378,7 +378,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { SERIAL_ECHOLNPGM(" " STR_I_MAX ": ", m.obj_side[IMAXIMUM]); #endif #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS #if ENABLED(CALIBRATION_MEASURE_JMIN) SERIAL_ECHOLNPGM(" " STR_J_MIN ": ", m.obj_side[JMINIMUM]); #endif @@ -386,7 +386,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { SERIAL_ECHOLNPGM(" " STR_J_MAX ": ", m.obj_side[JMAXIMUM]); #endif #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS #if ENABLED(CALIBRATION_MEASURE_KMIN) SERIAL_ECHOLNPGM(" " STR_K_MIN ": ", m.obj_side[KMINIMUM]); #endif @@ -439,7 +439,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z) SERIAL_ECHOLNPGM(" Top: ", m.backlash[TOP]); #endif - #if LINEAR_AXES >= 4 && AXIS_CAN_CALIBRATE(I) + #if HAS_I_AXIS && AXIS_CAN_CALIBRATE(I) #if ENABLED(CALIBRATION_MEASURE_IMIN) SERIAL_ECHOLNPGM(" " STR_I_MIN ": ", m.backlash[IMINIMUM]); #endif @@ -447,7 +447,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { SERIAL_ECHOLNPGM(" " STR_I_MAX ": ", m.backlash[IMAXIMUM]); #endif #endif - #if LINEAR_AXES >= 5 && AXIS_CAN_CALIBRATE(J) + #if HAS_J_AXIS && AXIS_CAN_CALIBRATE(J) #if ENABLED(CALIBRATION_MEASURE_JMIN) SERIAL_ECHOLNPGM(" " STR_J_MIN ": ", m.backlash[JMINIMUM]); #endif @@ -455,7 +455,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { SERIAL_ECHOLNPGM(" " STR_J_MAX ": ", m.backlash[JMAXIMUM]); #endif #endif - #if LINEAR_AXES >= 6 && AXIS_CAN_CALIBRATE(K) + #if HAS_K_AXIS && AXIS_CAN_CALIBRATE(K) #if ENABLED(CALIBRATION_MEASURE_KMIN) SERIAL_ECHOLNPGM(" " STR_K_MIN ": ", m.backlash[KMINIMUM]); #endif diff --git a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp index 6aeb9c3d9d..628ae40f48 100644 --- a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp +++ b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp @@ -38,19 +38,19 @@ #if M91x_USE(X) || M91x_USE(X2) #define M91x_SOME_X 1 #endif - #if LINEAR_AXES >= 2 && (M91x_USE(Y) || M91x_USE(Y2)) + #if HAS_Y_AXIS && (M91x_USE(Y) || M91x_USE(Y2)) #define M91x_SOME_Y 1 #endif #if HAS_Z_AXIS && (M91x_USE(Z) || M91x_USE(Z2) || M91x_USE(Z3) || M91x_USE(Z4)) #define M91x_SOME_Z 1 #endif - #if LINEAR_AXES >= 4 && M91x_USE(I) + #if HAS_I_AXIS && M91x_USE(I) #define M91x_USE_I 1 #endif - #if LINEAR_AXES >= 5 && M91x_USE(J) + #if HAS_J_AXIS && M91x_USE(J) #define M91x_USE_J 1 #endif - #if LINEAR_AXES >= 6 && M91x_USE(K) + #if HAS_K_AXIS && M91x_USE(K) #define M91x_USE_K 1 #endif diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index 803a182654..53c1bb302a 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -693,6 +693,15 @@ #define HAS_Y_AXIS 1 #if LINEAR_AXES >= XYZ #define HAS_Z_AXIS 1 + #if LINEAR_AXES >= 4 + #define HAS_I_AXIS 1 + #if LINEAR_AXES >= 5 + #define HAS_J_AXIS 1 + #if LINEAR_AXES >= 6 + #define HAS_K_AXIS 1 + #endif + #endif + #endif #endif #endif @@ -926,6 +935,11 @@ #elif X_HOME_DIR < 0 #define X_HOME_TO_MIN 1 #endif +#if X2_HOME_DIR > 0 + #define X2_HOME_TO_MAX 1 +#elif X2_HOME_DIR < 0 + #define X2_HOME_TO_MIN 1 +#endif #if Y_HOME_DIR > 0 #define Y_HOME_TO_MAX 1 #elif Y_HOME_DIR < 0 @@ -1215,13 +1229,13 @@ #if HAS_Z_AXIS && !defined(INVERT_Z_DIR) #define INVERT_Z_DIR false #endif -#if LINEAR_AXES >= 4 && !defined(INVERT_I_DIR) +#if HAS_I_AXIS && !defined(INVERT_I_DIR) #define INVERT_I_DIR false #endif -#if LINEAR_AXES >= 5 && !defined(INVERT_J_DIR) +#if HAS_J_AXIS && !defined(INVERT_J_DIR) #define INVERT_J_DIR false #endif -#if LINEAR_AXES >= 6 && !defined(INVERT_K_DIR) +#if HAS_K_AXIS && !defined(INVERT_K_DIR) #define INVERT_K_DIR false #endif #if HAS_EXTRUDERS && !defined(INVERT_E_DIR) @@ -1411,7 +1425,7 @@ #endif #endif -#if ANY(USE_XMIN_PLUG, USE_YMIN_PLUG, USE_ZMIN_PLUG, USE_XMAX_PLUG, USE_YMAX_PLUG, USE_ZMAX_PLUG) +#if X_HOME_DIR || (HAS_Y_AXIS && Y_HOME_DIR) || (HAS_Z_AXIS && Z_HOME_DIR) || (HAS_I_AXIS && I_HOME_DIR) || (HAS_J_AXIS && J_HOME_DIR) || (HAS_K_AXIS && K_HOME_DIR) #define HAS_ENDSTOPS 1 #define COORDINATE_OKAY(N,L,H) WITHIN(N,L,H) #else diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index 8c6e79f36a..2db80f9955 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -823,12 +823,6 @@ #define POLL_JOG #endif -#if X2_HOME_DIR > 0 - #define X2_HOME_TO_MAX 1 -#elif X2_HOME_DIR < 0 - #define X2_HOME_TO_MIN 1 -#endif - #ifndef HOMING_BUMP_MM #define HOMING_BUMP_MM { 0, 0, 0 } #endif diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 477309ad81..08130d31b7 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -97,13 +97,13 @@ #else #undef CONTROLLER_FAN_USE_Z_ONLY #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #define I_MAX_LENGTH (I_MAX_POS - (I_MIN_POS)) #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #define J_MAX_LENGTH (J_MAX_POS - (J_MIN_POS)) #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #define K_MAX_LENGTH (K_MAX_POS - (K_MIN_POS)) #endif @@ -114,13 +114,13 @@ #if HAS_Y_AXIS && !defined(Y_BED_SIZE) #define Y_BED_SIZE Y_MAX_LENGTH #endif -#if LINEAR_AXES >= 4 && !defined(I_BED_SIZE) +#if HAS_I_AXIS && !defined(I_BED_SIZE) #define I_BED_SIZE I_MAX_LENGTH #endif -#if LINEAR_AXES >= 5 && !defined(J_BED_SIZE) +#if HAS_J_AXIS && !defined(J_BED_SIZE) #define J_BED_SIZE J_MAX_LENGTH #endif -#if LINEAR_AXES >= 6 && !defined(K_BED_SIZE) +#if HAS_K_AXIS && !defined(K_BED_SIZE) #define K_BED_SIZE K_MAX_LENGTH #endif @@ -134,13 +134,13 @@ #if HAS_Y_AXIS #define _Y_HALF_BED ((Y_BED_SIZE) / 2) #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #define _I_HALF_IMAX ((I_BED_SIZE) / 2) #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #define _J_HALF_JMAX ((J_BED_SIZE) / 2) #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #define _K_HALF_KMAX ((K_BED_SIZE) / 2) #endif @@ -149,13 +149,13 @@ #define Y_CENTER TERN(BED_CENTER_AT_0_0, 0, _Y_HALF_BED) #define XY_CENTER { X_CENTER, Y_CENTER } #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #define I_CENTER TERN(BED_CENTER_AT_0_0, 0, _I_HALF_BED) #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #define J_CENTER TERN(BED_CENTER_AT_0_0, 0, _J_HALF_BED) #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #define K_CENTER TERN(BED_CENTER_AT_0_0, 0, _K_HALF_BED) #endif @@ -166,15 +166,15 @@ #define Y_MIN_BED (Y_CENTER - _Y_HALF_BED) #define Y_MAX_BED (Y_MIN_BED + Y_BED_SIZE) #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #define I_MINIM (I_CENTER - _I_HALF_BED_SIZE) #define I_MAXIM (I_MINIM + I_BED_SIZE) #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #define J_MINIM (J_CENTER - _J_HALF_BED_SIZE) #define J_MAXIM (J_MINIM + J_BED_SIZE) #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #define K_MINIM (K_CENTER - _K_HALF_BED_SIZE) #define K_MAXIM (K_MINIM + K_BED_SIZE) #endif @@ -253,21 +253,21 @@ #define Z_HOME_POS TERN(Z_HOME_TO_MIN, Z_MIN_POS, Z_MAX_POS) #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #ifdef MANUAL_I_HOME_POS #define I_HOME_POS MANUAL_I_HOME_POS #else #define I_HOME_POS TERN(I_HOME_TO_MIN, I_MIN_POS, I_MAX_POS) #endif #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #ifdef MANUAL_J_HOME_POS #define J_HOME_POS MANUAL_J_HOME_POS #else #define J_HOME_POS TERN(J_HOME_TO_MIN, J_MIN_POS, J_MAX_POS) #endif #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #ifdef MANUAL_K_HOME_POS #define K_HOME_POS MANUAL_K_HOME_POS #else @@ -745,7 +745,7 @@ #define LIB_INTERNAL_MAX31865 1 #endif -#endif //HAS_MAX_TC +#endif // HAS_MAX_TC /** * X_DUAL_ENDSTOPS endstop reassignment @@ -1620,7 +1620,7 @@ #endif #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #if PIN_EXISTS(I_ENABLE) || AXIS_IS_L64XX(I) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(I)) #define HAS_I_ENABLE 1 #endif @@ -1640,7 +1640,7 @@ #undef DISABLE_INACTIVE_I #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #if PIN_EXISTS(J_ENABLE) || AXIS_IS_L64XX(J) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(J)) #define HAS_J_ENABLE 1 #endif @@ -1660,7 +1660,7 @@ #undef DISABLE_INACTIVE_J #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #if PIN_EXISTS(K_ENABLE) || AXIS_IS_L64XX(K) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(K)) #define HAS_K_ENABLE 1 #endif diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 4cd16d4484..f884046a96 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1416,7 +1416,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS /** * Allow only extra axis codes that do not conflict with G-code parameter names */ -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #if AXIS4_NAME != 'A' && AXIS4_NAME != 'B' && AXIS4_NAME != 'C' && AXIS4_NAME != 'U' && AXIS4_NAME != 'V' && AXIS4_NAME != 'W' #error "AXIS4_NAME can only be one of 'A', 'B', 'C', 'U', 'V', or 'W'." #elif !defined(I_MIN_POS) || !defined(I_MAX_POS) @@ -1427,7 +1427,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "I_ENABLE_ON is required for your I driver with LINEAR_AXES >= 4." #endif #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #if AXIS5_NAME == AXIS4_NAME #error "AXIS5_NAME must be unique." #elif AXIS5_NAME != 'A' && AXIS5_NAME != 'B' && AXIS5_NAME != 'C' && AXIS5_NAME != 'U' && AXIS5_NAME != 'V' && AXIS5_NAME != 'W' @@ -1440,7 +1440,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "J_ENABLE_ON is required for your J driver with LINEAR_AXES >= 5." #endif #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #if AXIS6_NAME == AXIS5_NAME || AXIS6_NAME == AXIS4_NAME #error "AXIS6_NAME must be unique." #elif AXIS6_NAME != 'A' && AXIS6_NAME != 'B' && AXIS6_NAME != 'C' && AXIS6_NAME != 'U' && AXIS6_NAME != 'V' && AXIS6_NAME != 'W' @@ -2412,13 +2412,13 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #if _AXIS_PLUG_UNUSED_TEST(Z) #error "You must enable USE_ZMIN_PLUG or USE_ZMAX_PLUG." #endif - #if LINEAR_AXES >= 4 && _AXIS_PLUG_UNUSED_TEST(I) + #if HAS_I_AXIS && _AXIS_PLUG_UNUSED_TEST(I) #error "You must enable USE_IMIN_PLUG or USE_IMAX_PLUG." #endif - #if LINEAR_AXES >= 5 && _AXIS_PLUG_UNUSED_TEST(J) + #if HAS_J_AXIS && _AXIS_PLUG_UNUSED_TEST(J) #error "You must enable USE_JMIN_PLUG or USE_JMAX_PLUG." #endif - #if LINEAR_AXES >= 6 && _AXIS_PLUG_UNUSED_TEST(K) + #if HAS_K_AXIS && _AXIS_PLUG_UNUSED_TEST(K) #error "You must enable USE_KMIN_PLUG or USE_KMAX_PLUG." #endif @@ -2432,17 +2432,17 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "Enable USE_YMIN_PLUG when homing Y to MIN." #elif Y_HOME_TO_MAX && DISABLED(USE_YMAX_PLUG) #error "Enable USE_YMAX_PLUG when homing Y to MAX." - #elif LINEAR_AXES >= 4 && I_HOME_TO_MIN && DISABLED(USE_IMIN_PLUG) + #elif HAS_I_AXIS && I_HOME_TO_MIN && DISABLED(USE_IMIN_PLUG) #error "Enable USE_IMIN_PLUG when homing I to MIN." - #elif LINEAR_AXES >= 4 && I_HOME_TO_MAX && DISABLED(USE_IMAX_PLUG) + #elif HAS_I_AXIS && I_HOME_TO_MAX && DISABLED(USE_IMAX_PLUG) #error "Enable USE_IMAX_PLUG when homing I to MAX." - #elif LINEAR_AXES >= 5 && J_HOME_TO_MIN && DISABLED(USE_JMIN_PLUG) + #elif HAS_J_AXIS && J_HOME_TO_MIN && DISABLED(USE_JMIN_PLUG) #error "Enable USE_JMIN_PLUG when homing J to MIN." - #elif LINEAR_AXES >= 5 && J_HOME_TO_MAX && DISABLED(USE_JMAX_PLUG) + #elif HAS_J_AXIS && J_HOME_TO_MAX && DISABLED(USE_JMAX_PLUG) #error "Enable USE_JMAX_PLUG when homing J to MAX." - #elif LINEAR_AXES >= 6 && K_HOME_TO_MIN && DISABLED(USE_KMIN_PLUG) + #elif HAS_K_AXIS && K_HOME_TO_MIN && DISABLED(USE_KMIN_PLUG) #error "Enable USE_KMIN_PLUG when homing K to MIN." - #elif LINEAR_AXES >= 6 && K_HOME_TO_MAX && DISABLED(USE_KMAX_PLUG) + #elif HAS_K_AXIS && K_HOME_TO_MAX && DISABLED(USE_KMAX_PLUG) #error "Enable USE_KMAX_PLUG when homing K to MAX." #endif #endif @@ -2967,11 +2967,11 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "TMC2208 or TMC2209 on E6 requires E6_HARDWARE_SERIAL or E6_SERIAL_(RX|TX)_PIN." #elif INVALID_TMC_UART(E7) #error "TMC2208 or TMC2209 on E7 requires E7_HARDWARE_SERIAL or E7_SERIAL_(RX|TX)_PIN." -#elif LINEAR_AXES >= 4 && INVALID_TMC_UART(I) +#elif HAS_I_AXIS && INVALID_TMC_UART(I) #error "TMC2208 or TMC2209 on I requires I_HARDWARE_SERIAL or I_SERIAL_(RX|TX)_PIN." -#elif LINEAR_AXES >= 5 && INVALID_TMC_UART(J) +#elif HAS_J_AXIS && INVALID_TMC_UART(J) #error "TMC2208 or TMC2209 on J requires J_HARDWARE_SERIAL or J_SERIAL_(RX|TX)_PIN." -#elif LINEAR_AXES >= 6 && INVALID_TMC_UART(K) +#elif HAS_K_AXIS && INVALID_TMC_UART(K) #error "TMC2208 or TMC2209 on K requires K_HARDWARE_SERIAL or K_SERIAL_(RX|TX)_PIN." #endif #undef INVALID_TMC_UART @@ -3057,11 +3057,11 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS INVALID_TMC_MS(E6) #elif !TMC_MICROSTEP_IS_VALID(E7) INVALID_TMC_MS(E7) -#elif LINEAR_AXES >= 4 && !TMC_MICROSTEP_IS_VALID(I) +#elif HAS_I_AXIS && !TMC_MICROSTEP_IS_VALID(I) INVALID_TMC_MS(I) -#elif LINEAR_AXES >= 5 && !TMC_MICROSTEP_IS_VALID(J) +#elif HAS_J_AXIS && !TMC_MICROSTEP_IS_VALID(J) INVALID_TMC_MS(J) -#elif LINEAR_AXES >= 6 && !TMC_MICROSTEP_IS_VALID(K) +#elif HAS_K_AXIS && !TMC_MICROSTEP_IS_VALID(K) INVALID_TMC_MS(K) #endif #undef INVALID_TMC_MS @@ -3083,13 +3083,13 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #define X_ENDSTOP_INVERTING !AXIS_DRIVER_TYPE(X,TMC2209) #define Y_ENDSTOP_INVERTING !AXIS_DRIVER_TYPE(Y,TMC2209) #define Z_ENDSTOP_INVERTING !AXIS_DRIVER_TYPE(Z,TMC2209) - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS #define I_ENDSTOP_INVERTING !AXIS_DRIVER_TYPE(I,TMC2209) #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS #define J_ENDSTOP_INVERTING !AXIS_DRIVER_TYPE(J,TMC2209) #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS #define K_ENDSTOP_INVERTING !AXIS_DRIVER_TYPE(K,TMC2209) #endif @@ -3106,17 +3106,17 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMIN (or ENDSTOPPULLUPS) when homing to Z_MIN." #elif Z_SENSORLESS && Z_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_ZMAX) #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMAX (or ENDSTOPPULLUPS) when homing to Z_MAX." - #elif LINEAR_AXES >= 4 && I_SENSORLESS && I_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_IMIN) + #elif ALL(HAS_I_AXIS, I_SENSORLESS, I_HOME_TO_MIN) && DISABLED(ENDSTOPPULLUP_IMIN) #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_IMIN (or ENDSTOPPULLUPS) when homing to I_MIN." - #elif LINEAR_AXES >= 4 && I_SENSORLESS && I_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_IMAX) + #elif ALL(HAS_I_AXIS, I_SENSORLESS, I_HOME_TO_MAX) && DISABLED(ENDSTOPPULLUP_IMAX) #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_IMAX (or ENDSTOPPULLUPS) when homing to I_MAX." - #elif LINEAR_AXES >= 5 && J_SENSORLESS && J_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_JMIN) + #elif ALL(HAS_J_AXIS, J_SENSORLESS, J_HOME_TO_MIN) && DISABLED(ENDSTOPPULLUP_JMIN) #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_JMIN (or ENDSTOPPULLUPS) when homing to J_MIN." - #elif LINEAR_AXES >= 5 && J_SENSORLESS && J_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_JMAX) + #elif ALL(HAS_J_AXIS, J_SENSORLESS, J_HOME_TO_MAX) && DISABLED(ENDSTOPPULLUP_JMAX) #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_JMAX (or ENDSTOPPULLUPS) when homing to J_MAX." - #elif LINEAR_AXES >= 6 && K_SENSORLESS && K_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_KMIN) + #elif ALL(HAS_K_AXIS, K_SENSORLESS, K_HOME_TO_MIN) && DISABLED(ENDSTOPPULLUP_KMIN) #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_KMIN (or ENDSTOPPULLUPS) when homing to K_MIN." - #elif LINEAR_AXES >= 6 && K_SENSORLESS && K_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_KMAX) + #elif ALL(HAS_K_AXIS, K_SENSORLESS, K_HOME_TO_MAX) && DISABLED(ENDSTOPPULLUP_KMAX) #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_KMAX (or ENDSTOPPULLUPS) when homing to K_MAX." #endif #endif @@ -3162,37 +3162,37 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #else #error "SENSORLESS_HOMING requires Z_MAX_ENDSTOP_INVERTING = false when homing TMC2209 to Z_MAX." #endif - #elif LINEAR_AXES >= 4 && I_SENSORLESS && I_HOME_TO_MIN && I_MIN_ENDSTOP_INVERTING != I_ENDSTOP_INVERTING + #elif ALL(HAS_I_AXIS, I_SENSORLESS, I_HOME_TO_MIN) && I_MIN_ENDSTOP_INVERTING != I_ENDSTOP_INVERTING #if I_ENDSTOP_INVERTING #error "SENSORLESS_HOMING requires I_MIN_ENDSTOP_INVERTING = true when homing to I_MIN." #else #error "SENSORLESS_HOMING requires I_MIN_ENDSTOP_INVERTING = false when homing TMC2209 to I_MIN." #endif - #elif LINEAR_AXES >= 4 && I_SENSORLESS && I_HOME_TO_MAX && I_MAX_ENDSTOP_INVERTING != I_ENDSTOP_INVERTING + #elif ALL(HAS_I_AXIS, I_SENSORLESS, I_HOME_TO_MAX) && I_MAX_ENDSTOP_INVERTING != I_ENDSTOP_INVERTING #if I_ENDSTOP_INVERTING #error "SENSORLESS_HOMING requires I_MAX_ENDSTOP_INVERTING = true when homing to I_MAX." #else #error "SENSORLESS_HOMING requires I_MAX_ENDSTOP_INVERTING = false when homing TMC2209 to I_MAX." #endif - #elif LINEAR_AXES >= 5 && J_SENSORLESS && J_HOME_TO_MIN && J_MIN_ENDSTOP_INVERTING != J_ENDSTOP_INVERTING + #elif ALL(HAS_J_AXIS, J_SENSORLESS, J_HOME_TO_MIN) && J_MIN_ENDSTOP_INVERTING != J_ENDSTOP_INVERTING #if J_ENDSTOP_INVERTING #error "SENSORLESS_HOMING requires J_MIN_ENDSTOP_INVERTING = true when homing to J_MIN." #else #error "SENSORLESS_HOMING requires J_MIN_ENDSTOP_INVERTING = false when homing TMC2209 to J_MIN." #endif - #elif LINEAR_AXES >= 5 && J_SENSORLESS && J_HOME_TO_MAX && J_MAX_ENDSTOP_INVERTING != J_ENDSTOP_INVERTING + #elif ALL(HAS_J_AXIS, J_SENSORLESS, J_HOME_TO_MAX) && J_MAX_ENDSTOP_INVERTING != J_ENDSTOP_INVERTING #if J_ENDSTOP_INVERTING #error "SENSORLESS_HOMING requires J_MAX_ENDSTOP_INVERTING = true when homing to J_MAX." #else #error "SENSORLESS_HOMING requires J_MAX_ENDSTOP_INVERTING = false when homing TMC2209 to J_MAX." #endif - #elif LINEAR_AXES >= 6 && K_SENSORLESS && K_HOME_TO_MIN && K_MIN_ENDSTOP_INVERTING != K_ENDSTOP_INVERTING + #elif ALL(HAS_K_AXIS, K_SENSORLESS, K_HOME_TO_MIN) && K_MIN_ENDSTOP_INVERTING != K_ENDSTOP_INVERTING #if K_ENDSTOP_INVERTING #error "SENSORLESS_HOMING requires K_MIN_ENDSTOP_INVERTING = true when homing to K_MIN." #else #error "SENSORLESS_HOMING requires K_MIN_ENDSTOP_INVERTING = false when homing TMC2209 to K_MIN." #endif - #elif LINEAR_AXES >= 6 && K_SENSORLESS && K_HOME_TO_MAX && K_MAX_ENDSTOP_INVERTING != K_ENDSTOP_INVERTING + #elif ALL(HAS_K_AXIS, K_SENSORLESS, K_HOME_TO_MAX) && K_MAX_ENDSTOP_INVERTING != K_ENDSTOP_INVERTING #if K_ENDSTOP_INVERTING #error "SENSORLESS_HOMING requires K_MAX_ENDSTOP_INVERTING = true when homing to K_MAX." #else @@ -3316,7 +3316,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS /** * L64XX requirement */ -#if HAS_L64XX && LINEAR_AXES >= 4 +#if HAS_L64XX && HAS_I_AXIS #error "L64XX requires LINEAR_AXES 3. Homing with L64XX is not yet implemented for LINEAR_AXES > 3." #endif @@ -3791,17 +3791,17 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #if _BAD_DRIVER(Z) #error "Z_DRIVER_TYPE is not recognized." #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #if _BAD_DRIVER(I) #error "I_DRIVER_TYPE is not recognized." #endif #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #if _BAD_DRIVER(J) #error "J_DRIVER_TYPE is not recognized." #endif #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #if _BAD_DRIVER(K) #error "K_DRIVER_TYPE is not recognized." #endif diff --git a/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp b/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp index 4305462162..a14fa4d1df 100644 --- a/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp +++ b/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp @@ -45,7 +45,7 @@ #if PIN_EXISTS(MT_DET_2) bool mt_det2_sta; #endif - #if HAS_X_MIN || HAS_X_MAX + #if X_HOME_DIR bool endstopx1_sta; #else constexpr static bool endstopx1_sta = true; @@ -55,7 +55,7 @@ #else constexpr static bool endstopx2_sta = true; #endif - #if HAS_Y_MIN || HAS_Y_MAX + #if HAS_Y_AXIS && Y_HOME_DIR bool endstopy1_sta; #else constexpr static bool endstopy1_sta = true; @@ -65,7 +65,7 @@ #else constexpr static bool endstopy2_sta = true; #endif - #if HAS_Z_MIN || HAS_Z_MAX + #if HAS_Z_AXIS && Z_HOME_DIR bool endstopz1_sta; #else constexpr static bool endstopz1_sta = true; diff --git a/Marlin/src/lcd/extui/nextion/nextion_tft.cpp b/Marlin/src/lcd/extui/nextion/nextion_tft.cpp index 2c1bde245c..92349659eb 100644 --- a/Marlin/src/lcd/extui/nextion/nextion_tft.cpp +++ b/Marlin/src/lcd/extui/nextion/nextion_tft.cpp @@ -430,25 +430,24 @@ void NextionTFT::PanelInfo(uint8_t req) { break; case 36: // Endstop Info - #if HAS_X_MIN + #if X_HOME_TO_MIN SEND_VALasTXT("x1", READ(X_MIN_PIN) != X_MIN_ENDSTOP_INVERTING ? "triggered" : "open"); - #endif - #if HAS_X_MAX + #elif X_HOME_TO_MAX SEND_VALasTXT("x2", READ(X_MAX_PIN) != X_MAX_ENDSTOP_INVERTING ? "triggered" : "open"); #endif - #if HAS_Y_MIN + #if Y_HOME_TO_MIN SEND_VALasTXT("y1", READ(Y_MIN_PIN) != Y_MIN_ENDSTOP_INVERTING ? "triggered" : "open"); + #elif Y_HOME_TO_MAX + SEND_VALasTXT("y2", READ(X_MAX_PIN) != Y_MAX_ENDSTOP_INVERTING ? "triggered" : "open"); #endif - #if HAS_Z_MIN + #if Z_HOME_TO_MIN SEND_VALasTXT("z1", READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING ? "triggered" : "open"); - #endif - #if HAS_Z_MAX + #elif Z_HOME_TO_MAX SEND_VALasTXT("z2", READ(Z_MAX_PIN) != Z_MAX_ENDSTOP_INVERTING ? "triggered" : "open"); #endif #if HAS_Z2_MIN SEND_VALasTXT("z2", READ(Z2_MIN_PIN) != Z2_MIN_ENDSTOP_INVERTING ? "triggered" : "open"); - #endif - #if HAS_Z2_MAX + #elif HAS_Z2_MAX SEND_VALasTXT("z2", READ(Z2_MAX_PIN) != Z2_MAX_ENDSTOP_INVERTING ? "triggered" : "open"); #endif #if HAS_BED_PROBE diff --git a/Marlin/src/lcd/menu/menu_backlash.cpp b/Marlin/src/lcd/menu/menu_backlash.cpp index ad276e11c0..28be1ca9cf 100644 --- a/Marlin/src/lcd/menu/menu_backlash.cpp +++ b/Marlin/src/lcd/menu/menu_backlash.cpp @@ -51,13 +51,13 @@ void menu_backlash() { #if HAS_Z_AXIS && _CAN_CALI(C) EDIT_BACKLASH_DISTANCE(C); #endif - #if LINEAR_AXES >= 4 && _CAN_CALI(I) + #if HAS_I_AXIS && _CAN_CALI(I) EDIT_BACKLASH_DISTANCE(I); #endif - #if LINEAR_AXES >= 5 && _CAN_CALI(J) + #if HAS_J_AXIS && _CAN_CALI(J) EDIT_BACKLASH_DISTANCE(J); #endif - #if LINEAR_AXES >= 6 && _CAN_CALI(K) + #if HAS_K_AXIS && _CAN_CALI(K) EDIT_BACKLASH_DISTANCE(K); #endif diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp index 29a908ac33..344b94e2e9 100644 --- a/Marlin/src/lcd/menu/menu_motion.cpp +++ b/Marlin/src/lcd/menu/menu_motion.cpp @@ -97,13 +97,13 @@ void lcd_move_x() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_X), X_AXIS); } #if HAS_Z_AXIS void lcd_move_z() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_Z), Z_AXIS); } #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS void lcd_move_i() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_I), I_AXIS); } #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS void lcd_move_j() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_J), J_AXIS); } #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS void lcd_move_k() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_K), K_AXIS); } #endif @@ -254,13 +254,13 @@ void menu_move() { #if HAS_Z_AXIS SUBMENU(MSG_MOVE_Z, []{ _menu_move_distance(Z_AXIS, lcd_move_z); }); #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS SUBMENU(MSG_MOVE_I, []{ _menu_move_distance(I_AXIS, lcd_move_i); }); #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS SUBMENU(MSG_MOVE_J, []{ _menu_move_distance(J_AXIS, lcd_move_j); }); #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS SUBMENU(MSG_MOVE_K, []{ _menu_move_distance(K_AXIS, lcd_move_k); }); #endif } @@ -345,13 +345,13 @@ void menu_move() { #if HAS_Z_AXIS GCODES_ITEM_N(Z_AXIS, MSG_AUTO_HOME_A, PSTR("G28Z")); #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS GCODES_ITEM_N(I_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS4_STR)); #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS GCODES_ITEM_N(J_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS5_STR)); #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS GCODES_ITEM_N(K_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS6_STR)); #endif @@ -398,13 +398,13 @@ void menu_motion() { #if HAS_Z_AXIS GCODES_ITEM_N(Z_AXIS, MSG_AUTO_HOME_A, PSTR("G28Z")); #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS GCODES_ITEM_N(I_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS4_STR)); #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS GCODES_ITEM_N(J_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS5_STR)); #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS GCODES_ITEM_N(K_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS6_STR)); #endif #endif diff --git a/Marlin/src/libs/L64XX/L64XX_Marlin.cpp b/Marlin/src/libs/L64XX/L64XX_Marlin.cpp index 6f80652ce5..dea2e3fc2d 100644 --- a/Marlin/src/libs/L64XX/L64XX_Marlin.cpp +++ b/Marlin/src/libs/L64XX/L64XX_Marlin.cpp @@ -497,7 +497,7 @@ uint8_t L64XX_Marlin::get_user_input(uint8_t &driver_count, L64XX_axis_t axis_in } break; #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS case AXIS4_NAME: { position_min = I_center - displacement; position_max = I_center + displacement; @@ -509,7 +509,7 @@ uint8_t L64XX_Marlin::get_user_input(uint8_t &driver_count, L64XX_axis_t axis_in } break; #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS case AXIS5_NAME: { position_min = J_center - displacement; position_max = J_center + displacement; @@ -521,7 +521,7 @@ uint8_t L64XX_Marlin::get_user_input(uint8_t &driver_count, L64XX_axis_t axis_in } break; #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS case AXIS6_NAME: { position_min = K_center - displacement; position_max = K_center + displacement; diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index 7a2cefdd4c..50ee33b3c0 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -1059,7 +1059,7 @@ void Endstops::update() { } #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS if (stepper.axis_is_moving(I_AXIS)) { if (stepper.motor_direction(I_AXIS_HEAD)) { // -direction #if HAS_I_MIN || (I_SPI_SENSORLESS && I_HOME_TO_MIN) @@ -1074,7 +1074,7 @@ void Endstops::update() { } #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS if (stepper.axis_is_moving(J_AXIS)) { if (stepper.motor_direction(J_AXIS_HEAD)) { // -direction #if HAS_J_MIN || (J_SPI_SENSORLESS && J_HOME_TO_MIN) @@ -1089,7 +1089,7 @@ void Endstops::update() { } #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS if (stepper.axis_is_moving(K_AXIS)) { if (stepper.motor_direction(K_AXIS_HEAD)) { // -direction #if HAS_K_MIN || (K_SPI_SENSORLESS && K_HOME_TO_MIN) diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 2248c52d85..a77f395fb4 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -603,7 +603,7 @@ void do_blocking_move_to_x(const_float_t rx, const_feedRate_t fr_mm_s/*=0.0*/) { } #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS void do_blocking_move_to_i(const_float_t ri, const_feedRate_t fr_mm_s/*=0.0*/) { do_blocking_move_to_xyz_i(current_position, ri, fr_mm_s); } @@ -615,7 +615,7 @@ void do_blocking_move_to_x(const_float_t rx, const_feedRate_t fr_mm_s/*=0.0*/) { } #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS void do_blocking_move_to_j(const_float_t rj, const_feedRate_t fr_mm_s/*=0.0*/) { do_blocking_move_to_xyzi_j(current_position, rj, fr_mm_s); } @@ -627,7 +627,7 @@ void do_blocking_move_to_x(const_float_t rx, const_feedRate_t fr_mm_s/*=0.0*/) { } #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS void do_blocking_move_to_k(const_float_t rk, const_feedRate_t fr_mm_s/*=0.0*/) { do_blocking_move_to_xyzij_k(current_position, rk, fr_mm_s); } @@ -839,7 +839,7 @@ void restore_feedrate_and_scaling() { #endif } #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS if (axis_was_homed(I_AXIS)) { #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_I) NOLESS(target.i, soft_endstop.min.i); @@ -849,7 +849,7 @@ void restore_feedrate_and_scaling() { #endif } #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS if (axis_was_homed(J_AXIS)) { #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_J) NOLESS(target.j, soft_endstop.min.j); @@ -859,7 +859,7 @@ void restore_feedrate_and_scaling() { #endif } #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS if (axis_was_homed(K_AXIS)) { #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_K) NOLESS(target.k, soft_endstop.min.k); @@ -1417,13 +1417,13 @@ void prepare_line_to_destination() { #if HAS_Z_AXIS case Z_AXIS: if (ENABLED(Z_SPI_SENSORLESS)) endstops.tmc_spi_homing.z = true; break; #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS case I_AXIS: if (ENABLED(I_SPI_SENSORLESS)) endstops.tmc_spi_homing.i = true; break; #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS case J_AXIS: if (ENABLED(J_SPI_SENSORLESS)) endstops.tmc_spi_homing.j = true; break; #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS case K_AXIS: if (ENABLED(K_SPI_SENSORLESS)) endstops.tmc_spi_homing.k = true; break; #endif default: break; @@ -1494,13 +1494,13 @@ void prepare_line_to_destination() { #if HAS_Z_AXIS case Z_AXIS: if (ENABLED(Z_SPI_SENSORLESS)) endstops.tmc_spi_homing.z = false; break; #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS case I_AXIS: if (ENABLED(I_SPI_SENSORLESS)) endstops.tmc_spi_homing.i = false; break; #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS case J_AXIS: if (ENABLED(J_SPI_SENSORLESS)) endstops.tmc_spi_homing.j = false; break; #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS case K_AXIS: if (ENABLED(K_SPI_SENSORLESS)) endstops.tmc_spi_homing.k = false; break; #endif default: break; @@ -1821,13 +1821,13 @@ void prepare_line_to_destination() { case X_AXIS: es = X_ENDSTOP; break; case Y_AXIS: es = Y_ENDSTOP; break; case Z_AXIS: es = Z_ENDSTOP; break; - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS case I_AXIS: es = I_ENDSTOP; break; #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS case J_AXIS: es = J_ENDSTOP; break; #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS case K_AXIS: es = K_ENDSTOP; break; #endif } diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 50df5675e6..9fe61aad33 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -180,19 +180,19 @@ inline float home_bump_mm(const AxisEnum axis) { TERN_(MAX_SOFTWARE_ENDSTOP_Z, amax = max.z); break; #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS case I_AXIS: TERN_(MIN_SOFTWARE_ENDSTOP_I, amin = min.i); TERN_(MIN_SOFTWARE_ENDSTOP_I, amax = max.i); break; #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS case J_AXIS: TERN_(MIN_SOFTWARE_ENDSTOP_J, amin = min.j); TERN_(MIN_SOFTWARE_ENDSTOP_J, amax = max.j); break; #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS case K_AXIS: TERN_(MIN_SOFTWARE_ENDSTOP_K, amin = min.k); TERN_(MIN_SOFTWARE_ENDSTOP_K, amax = max.k); @@ -333,15 +333,15 @@ void do_blocking_move_to_x(const_float_t rx, const_feedRate_t fr_mm_s=0.0f); #if HAS_Z_AXIS void do_blocking_move_to_z(const_float_t rz, const_feedRate_t fr_mm_s=0.0f); #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS void do_blocking_move_to_i(const_float_t ri, const_feedRate_t fr_mm_s=0.0f); void do_blocking_move_to_xyz_i(const xyze_pos_t &raw, const_float_t i, const_feedRate_t fr_mm_s=0.0f); #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS void do_blocking_move_to_j(const_float_t rj, const_feedRate_t fr_mm_s=0.0f); void do_blocking_move_to_xyzi_j(const xyze_pos_t &raw, const_float_t j, const_feedRate_t fr_mm_s=0.0f); #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS void do_blocking_move_to_k(const_float_t rk, const_feedRate_t fr_mm_s=0.0f); void do_blocking_move_to_xyzij_k(const xyze_pos_t &raw, const_float_t k, const_feedRate_t fr_mm_s=0.0f); #endif @@ -476,15 +476,15 @@ void home_if_needed(const bool keeplev=false); #define LOGICAL_Z_POSITION(POS) NATIVE_TO_LOGICAL(POS, Z_AXIS) #define RAW_Z_POSITION(POS) LOGICAL_TO_NATIVE(POS, Z_AXIS) #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #define LOGICAL_I_POSITION(POS) NATIVE_TO_LOGICAL(POS, I_AXIS) #define RAW_I_POSITION(POS) LOGICAL_TO_NATIVE(POS, I_AXIS) #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #define LOGICAL_J_POSITION(POS) NATIVE_TO_LOGICAL(POS, J_AXIS) #define RAW_J_POSITION(POS) LOGICAL_TO_NATIVE(POS, J_AXIS) #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #define LOGICAL_K_POSITION(POS) NATIVE_TO_LOGICAL(POS, K_AXIS) #define RAW_K_POSITION(POS) LOGICAL_TO_NATIVE(POS, K_AXIS) #endif diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 45ccdd1702..4c86c06efe 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1866,13 +1866,13 @@ bool Planner::_populate_block(block_t * const block, bool split_move, " A:", target.a, " (", da, " steps)" " B:", target.b, " (", db, " steps)" " C:", target.c, " (", dc, " steps)" - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS " " AXIS4_STR ":", target.i, " (", di, " steps)" #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS " " AXIS5_STR ":", target.j, " (", dj, " steps)" #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS " " AXIS6_STR ":", target.k, " (", dk, " steps)" #endif #if HAS_EXTRUDERS @@ -1939,13 +1939,13 @@ bool Planner::_populate_block(block_t * const block, bool split_move, if (db + dc < 0) SBI(dm, B_AXIS); // Motor B direction if (CORESIGN(db - dc) < 0) SBI(dm, C_AXIS); // Motor C direction #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS if (di < 0) SBI(dm, I_AXIS); #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS if (dj < 0) SBI(dm, J_AXIS); #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS if (dk < 0) SBI(dm, K_AXIS); #endif #elif ENABLED(MARKFORGED_XY) @@ -2041,13 +2041,13 @@ bool Planner::_populate_block(block_t * const block, bool split_move, steps_dist_mm.b = (db + dc) * mm_per_step[B_AXIS]; steps_dist_mm.c = CORESIGN(db - dc) * mm_per_step[C_AXIS]; #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS steps_dist_mm.i = di * mm_per_step[I_AXIS]; #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS steps_dist_mm.j = dj * mm_per_step[J_AXIS]; #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS steps_dist_mm.k = dk * mm_per_step[K_AXIS]; #endif #elif ENABLED(MARKFORGED_XY) @@ -2104,7 +2104,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, ) #elif ENABLED(FOAMCUTTER_XYUV) // Return the largest distance move from either X/Y or I/J plane - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS _MAX(sq(steps_dist_mm.x) + sq(steps_dist_mm.y), sq(steps_dist_mm.i) + sq(steps_dist_mm.j)) #else sq(steps_dist_mm.x) + sq(steps_dist_mm.y) @@ -2197,13 +2197,13 @@ bool Planner::_populate_block(block_t * const block, bool split_move, ); #endif #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS if (block->steps.i) stepper.enable_axis(I_AXIS); #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS if (block->steps.j) stepper.enable_axis(J_AXIS); #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS if (block->steps.k) stepper.enable_axis(K_AXIS); #endif #endif @@ -2949,17 +2949,17 @@ bool Planner::buffer_segment(const abce_pos_t &abce SERIAL_ECHOPGM(" (", position.z, "->", target.z); SERIAL_CHAR(')'); #endif - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS SERIAL_ECHOPGM_P(SP_I_LBL, abce.i); SERIAL_ECHOPGM(" (", position.i, "->", target.i); SERIAL_CHAR(')'); #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS SERIAL_ECHOPGM_P(SP_J_LBL, abce.j); SERIAL_ECHOPGM(" (", position.j, "->", target.j); SERIAL_CHAR(')'); #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS SERIAL_ECHOPGM_P(SP_K_LBL, abce.k); SERIAL_ECHOPGM(" (", position.k, "->", target.k); SERIAL_CHAR(')'); diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 5fda608e38..a152575454 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -2712,13 +2712,13 @@ void MarlinSettings::reset() { #if HAS_Z_AXIS && !defined(DEFAULT_ZJERK) #define DEFAULT_ZJERK 0 #endif - #if LINEAR_AXES >= 4 && !defined(DEFAULT_IJERK) + #if HAS_I_AXIS && !defined(DEFAULT_IJERK) #define DEFAULT_IJERK 0 #endif - #if LINEAR_AXES >= 5 && !defined(DEFAULT_JJERK) + #if HAS_J_AXIS && !defined(DEFAULT_JJERK) #define DEFAULT_JJERK 0 #endif - #if LINEAR_AXES >= 6 && !defined(DEFAULT_KJERK) + #if HAS_K_AXIS && !defined(DEFAULT_KJERK) #define DEFAULT_KJERK 0 #endif planner.max_jerk.set( diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index c100051f98..b61f36bbb4 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -435,15 +435,15 @@ xyze_int8_t Stepper::count_direction{0}; #define Z_APPLY_STEP(v,Q) Z_STEP_WRITE(v) #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #define I_APPLY_DIR(v,Q) I_DIR_WRITE(v) #define I_APPLY_STEP(v,Q) I_STEP_WRITE(v) #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #define J_APPLY_DIR(v,Q) J_DIR_WRITE(v) #define J_APPLY_STEP(v,Q) J_STEP_WRITE(v) #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #define K_APPLY_DIR(v,Q) K_DIR_WRITE(v) #define K_APPLY_STEP(v,Q) K_STEP_WRITE(v) #endif @@ -1688,7 +1688,7 @@ void Stepper::pulse_phase_isr() { const bool is_page = IS_PAGE(current_block); #if ENABLED(DIRECT_STEPPING) - // TODO (DerAndere): Add support for LINEAR_AXES >= 4 + // TODO (DerAndere): Add support for HAS_I_AXIS if (is_page) { #if STEPPER_PAGE_FORMAT == SP_4x4D_128 @@ -1929,7 +1929,7 @@ uint32_t Stepper::block_phase_isr() { // If current block is finished, reset pointer and finalize state if (step_events_completed >= step_event_count) { #if ENABLED(DIRECT_STEPPING) - // TODO (DerAndere): Add support for LINEAR_AXES >= 4 + // TODO (DerAndere): Add support for HAS_I_AXIS #if STEPPER_PAGE_FORMAT == SP_4x4D_128 #define PAGE_SEGMENT_UPDATE_POS(AXIS) \ count_position[_AXIS(AXIS)] += page_step_state.bd[_AXIS(AXIS)] - 128 * 7; @@ -3184,13 +3184,13 @@ void Stepper::report_positions() { } break; - #if LINEAR_AXES >= 4 + #if HAS_I_AXIS case I_AXIS: BABYSTEP_AXIS(I, 0, direction); break; #endif - #if LINEAR_AXES >= 5 + #if HAS_J_AXIS case J_AXIS: BABYSTEP_AXIS(J, 0, direction); break; #endif - #if LINEAR_AXES >= 6 + #if HAS_K_AXIS case K_AXIS: BABYSTEP_AXIS(K, 0, direction); break; #endif diff --git a/Marlin/src/module/stepper/indirection.h b/Marlin/src/module/stepper/indirection.h index 93b765d7a5..7aea677534 100644 --- a/Marlin/src/module/stepper/indirection.h +++ b/Marlin/src/module/stepper/indirection.h @@ -206,7 +206,7 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset #endif // I Stepper -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #ifndef I_ENABLE_INIT #define I_ENABLE_INIT() SET_OUTPUT(I_ENABLE_PIN) #define I_ENABLE_WRITE(STATE) WRITE(I_ENABLE_PIN,STATE) @@ -225,7 +225,7 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset #endif // J Stepper -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #ifndef J_ENABLE_INIT #define J_ENABLE_INIT() SET_OUTPUT(J_ENABLE_PIN) #define J_ENABLE_WRITE(STATE) WRITE(J_ENABLE_PIN,STATE) @@ -244,7 +244,7 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset #endif // K Stepper -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #ifndef K_ENABLE_INIT #define K_ENABLE_INIT() SET_OUTPUT(K_ENABLE_PIN) #define K_ENABLE_WRITE(STATE) WRITE(K_ENABLE_PIN,STATE) @@ -895,21 +895,21 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset #define Z_RESET() #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #define ENABLE_AXIS_I() if (SHOULD_ENABLE(i)) { ENABLE_STEPPER_I(); AFTER_CHANGE(i, true); } #define DISABLE_AXIS_I() if (SHOULD_DISABLE(i)) { DISABLE_STEPPER_I(); AFTER_CHANGE(i, false); set_axis_untrusted(I_AXIS); } #else #define ENABLE_AXIS_I() NOOP #define DISABLE_AXIS_I() NOOP #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #define ENABLE_AXIS_J() if (SHOULD_ENABLE(j)) { ENABLE_STEPPER_J(); AFTER_CHANGE(j, true); } #define DISABLE_AXIS_J() if (SHOULD_DISABLE(j)) { DISABLE_STEPPER_J(); AFTER_CHANGE(j, false); set_axis_untrusted(J_AXIS); } #else #define ENABLE_AXIS_J() NOOP #define DISABLE_AXIS_J() NOOP #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #define ENABLE_AXIS_K() if (SHOULD_ENABLE(k)) { ENABLE_STEPPER_K(); AFTER_CHANGE(k, true); } #define DISABLE_AXIS_K() if (SHOULD_DISABLE(k)) { DISABLE_STEPPER_K(); AFTER_CHANGE(k, false); set_axis_untrusted(K_AXIS); } #else diff --git a/Marlin/src/module/stepper/trinamic.h b/Marlin/src/module/stepper/trinamic.h index 9ed9bdf407..dd3a64240f 100644 --- a/Marlin/src/module/stepper/trinamic.h +++ b/Marlin/src/module/stepper/trinamic.h @@ -83,13 +83,13 @@ #if HAS_Z_AXIS && !defined(CHOPPER_TIMING_Z) #define CHOPPER_TIMING_Z CHOPPER_TIMING #endif -#if LINEAR_AXES >= 4 && !defined(CHOPPER_TIMING_I) +#if HAS_I_AXIS && !defined(CHOPPER_TIMING_I) #define CHOPPER_TIMING_I CHOPPER_TIMING #endif -#if LINEAR_AXES >= 5 && !defined(CHOPPER_TIMING_J) +#if HAS_J_AXIS && !defined(CHOPPER_TIMING_J) #define CHOPPER_TIMING_J CHOPPER_TIMING #endif -#if LINEAR_AXES >= 6 && !defined(CHOPPER_TIMING_K) +#if HAS_K_AXIS && !defined(CHOPPER_TIMING_K) #define CHOPPER_TIMING_K CHOPPER_TIMING #endif #if HAS_EXTRUDERS && !defined(CHOPPER_TIMING_E) diff --git a/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h b/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h index 934b74cbb1..bf214761d3 100644 --- a/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h +++ b/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h @@ -228,7 +228,7 @@ #define PS_ON_PIN P2_12 // (12) -#if !defined(TEMP_0_CS_PIN) && DISABLED(USE_ZMAX_PLUG) +#if !defined(TEMP_0_CS_PIN) && !(HAS_Z_AXIS && Z_HOME_DIR) #define TEMP_0_CS_PIN P1_28 #endif diff --git a/Marlin/src/pins/pins_postprocess.h b/Marlin/src/pins/pins_postprocess.h index fe8c4c6c41..aa1def0b40 100644 --- a/Marlin/src/pins/pins_postprocess.h +++ b/Marlin/src/pins/pins_postprocess.h @@ -477,7 +477,7 @@ #endif #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #ifdef I_STOP_PIN #if I_HOME_TO_MIN #define I_MIN_PIN I_STOP_PIN @@ -500,7 +500,7 @@ #undef I_MAX_PIN #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #ifdef J_STOP_PIN #if J_HOME_TO_MIN #define J_MIN_PIN J_STOP_PIN @@ -523,7 +523,7 @@ #undef J_MAX_PIN #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #ifdef K_STOP_PIN #if K_HOME_TO_MIN #define K_MIN_PIN K_STOP_PIN @@ -1027,12 +1027,12 @@ #endif // The I axis, if any, should be the next open extruder port -#if LINEAR_AXES >= 4 && !defined(I_DIAG_PIN) && !defined(I_STEP_PIN) && !PIN_EXISTS(I_CS_PIN) +#if HAS_I_AXIS && !defined(I_DIAG_PIN) && !defined(I_STEP_PIN) && !PIN_EXISTS(I_CS_PIN) #define J_E_INDEX INCREMENT(I_E_INDEX) #else #define J_E_INDEX I_E_INDEX #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #ifndef I_STEP_PIN #define I_STEP_PIN _EPIN(I_E_INDEX, STEP) #define I_DIR_PIN _EPIN(I_E_INDEX, DIR) @@ -1112,12 +1112,12 @@ #endif // The J axis, if any, should be the next open extruder port -#if LINEAR_AXES >= 5 && !defined(J_DIAG_PIN) && !defined(J_STEP_PIN) && !PIN_EXISTS(J_CS_PIN) +#if HAS_J_AXIS && !defined(J_DIAG_PIN) && !defined(J_STEP_PIN) && !PIN_EXISTS(J_CS_PIN) #define K_E_INDEX INCREMENT(J_E_INDEX) #else #define K_E_INDEX J_E_INDEX #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #ifndef J_STEP_PIN #define J_STEP_PIN _EPIN(J_E_INDEX, STEP) #define J_DIR_PIN _EPIN(J_E_INDEX, DIR) @@ -1197,7 +1197,7 @@ #endif // The K axis, if any, should be the next open extruder port -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #ifndef K_STEP_PIN #define K_STEP_PIN _EPIN(K_E_INDEX, STEP) #define K_DIR_PIN _EPIN(K_E_INDEX, DIR) diff --git a/Marlin/src/pins/rambo/pins_EINSY_RETRO.h b/Marlin/src/pins/rambo/pins_EINSY_RETRO.h index 45c09ae33e..165475dae8 100644 --- a/Marlin/src/pins/rambo/pins_EINSY_RETRO.h +++ b/Marlin/src/pins/rambo/pins_EINSY_RETRO.h @@ -55,7 +55,6 @@ #define X_MIN_PIN 12 // X- #define Y_MIN_PIN 11 // Y- - #define Z_MIN_PIN 10 // Z- #define X_MAX_PIN 81 // X+ #define Y_MAX_PIN 57 // Y+ @@ -78,15 +77,16 @@ #endif #if ENABLED(BLTOUCH) - #define Z_MIN_PIN 11 // Y-MIN - #define SERVO0_PIN 10 // Z-MIN - #else - #define Z_MIN_PIN 10 + #define Z_MIN_PIN 11 // Y- + #define SERVO0_PIN 10 // Z- #endif #endif #define Z_MAX_PIN 7 +#ifndef Z_MIN_PIN 7 + #define Z_MIN_PIN 10 // Z- +#endif // // Z Probe (when not Z_MIN_PIN) diff --git a/Marlin/src/pins/sam/pins_RURAMPS4D_11.h b/Marlin/src/pins/sam/pins_RURAMPS4D_11.h index 65ecd37e62..4bdadd8082 100644 --- a/Marlin/src/pins/sam/pins_RURAMPS4D_11.h +++ b/Marlin/src/pins/sam/pins_RURAMPS4D_11.h @@ -117,10 +117,6 @@ //#define E3_MS2_PIN ? //#define E3_MS3_PIN ? -#if USES_Z_MIN_PROBE_PIN - #define Z_MIN_PROBE_PIN 49 -#endif - #ifndef FIL_RUNOUT_PIN #define FIL_RUNOUT_PIN Y_MIN_PIN #endif diff --git a/Marlin/src/pins/sam/pins_RURAMPS4D_13.h b/Marlin/src/pins/sam/pins_RURAMPS4D_13.h index 76a2d5a398..5273cbcd0e 100644 --- a/Marlin/src/pins/sam/pins_RURAMPS4D_13.h +++ b/Marlin/src/pins/sam/pins_RURAMPS4D_13.h @@ -53,13 +53,6 @@ #define Z_MIN_PIN 47 #define Z_MAX_PIN 43 -// -// Z Probe (when not Z_MIN_PIN) -// -#ifndef Z_MIN_PROBE_PIN - #define Z_MIN_PROBE_PIN 49 -#endif - // // Steppers // @@ -105,7 +98,7 @@ #define E2_CS_PIN 61 #endif -#if USES_Z_MIN_PROBE_PIN +#ifndef Z_MIN_PROBE_PIN #define Z_MIN_PROBE_PIN 49 #endif diff --git a/Marlin/src/pins/sensitive_pins.h b/Marlin/src/pins/sensitive_pins.h index 5f2bd0467e..f9911cc863 100644 --- a/Marlin/src/pins/sensitive_pins.h +++ b/Marlin/src/pins/sensitive_pins.h @@ -155,7 +155,7 @@ #endif -#if LINEAR_AXES >= 4 +#if HAS_I_AXIS #if PIN_EXISTS(I_MIN) #define _I_MIN I_MIN_PIN, @@ -201,7 +201,7 @@ #endif -#if LINEAR_AXES >= 5 +#if HAS_J_AXIS #if PIN_EXISTS(J_MIN) #define _J_MIN J_MIN_PIN, @@ -247,7 +247,7 @@ #endif -#if LINEAR_AXES >= 6 +#if HAS_K_AXIS #if PIN_EXISTS(K_MIN) #define _K_MIN K_MIN_PIN, diff --git a/Marlin/src/pins/stm32f7/pins_REMRAM_V1.h b/Marlin/src/pins/stm32f7/pins_REMRAM_V1.h index 486c10e711..5bfc2551ac 100644 --- a/Marlin/src/pins/stm32f7/pins_REMRAM_V1.h +++ b/Marlin/src/pins/stm32f7/pins_REMRAM_V1.h @@ -44,14 +44,13 @@ #define X_MAX_PIN 59 #define Y_MIN_PIN 60 #define Y_MAX_PIN 61 - #define Z_MIN_PIN 62 #define Z_MAX_PIN 63 #else #define X_STOP_PIN 36 #define Y_STOP_PIN 39 - #define Z_MIN_PIN 62 #define Z_MAX_PIN 42 #endif +#define Z_MIN_PIN 62 // // Z Probe (when not Z_MIN_PIN) From 397c751d55340f9f8fcd0a3b328b89cb1a6c16bc Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 3 Jan 2022 01:06:21 +0000 Subject: [PATCH 312/532] [cron] Bump distribution date (2022-01-03) --- 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 ae674efded..1279caef59 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 "2022-01-02" +//#define STRING_DISTRIBUTION_DATE "2022-01-03" /** * 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 6707e7ec50..d01fd0f543 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 "2022-01-02" + #define STRING_DISTRIBUTION_DATE "2022-01-03" #endif /** From 6fd48a98815cb9a0b549a94b5a80f6e0da369c53 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Sun, 2 Jan 2022 19:17:19 -0800 Subject: [PATCH 313/532] =?UTF-8?q?=F0=9F=92=9A=20Fix=20Teensy=20CI=20test?= =?UTF-8?q?=20(#23433)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/tests/teensy31 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildroot/tests/teensy31 b/buildroot/tests/teensy31 index 10dde2be99..7465a67fdd 100755 --- a/buildroot/tests/teensy31 +++ b/buildroot/tests/teensy31 @@ -14,7 +14,7 @@ exec_test $1 $2 "Teensy3.1 with default config" "$3" # Zero endstops, as with a CNC # restore_configs -opt_set MOTHERBOARD BOARD_TEENSY31_32 +opt_set MOTHERBOARD BOARD_TEENSY31_32 X_HOME_DIR 0 Y_HOME_DIR 0 Z_HOME_DIR 0 opt_disable USE_XMIN_PLUG USE_YMIN_PLUG USE_ZMIN_PLUG exec_test $1 $2 "Teensy3.1 with Zero Endstops" "$3" From 554a2fc84a5cd67cc9b0be8b01551a9eca3925bf Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Sun, 2 Jan 2022 21:27:22 -0800 Subject: [PATCH 314/532] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Assert=20newer=20G?= =?UTF-8?q?CC=20in=20PIO=20via=20atmelavr@~3.4=20(#23432)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ini/avr.ini | 15 +---------- ini/due.ini | 3 --- ini/esp32.ini | 3 --- ini/lpc176x.ini | 2 -- ini/native.ini | 5 ---- ini/stm32f0.ini | 3 --- ini/stm32f1-maple.ini | 30 ---------------------- ini/stm32f1.ini | 32 +---------------------- ini/stm32f4.ini | 47 ---------------------------------- ini/stm32f7.ini | 2 -- ini/stm32g0.ini | 24 +++++++++--------- ini/stm32h7.ini | 1 - ini/teensy.ini | 59 +++++++++++++++++++++++++------------------ 13 files changed, 49 insertions(+), 177 deletions(-) diff --git a/ini/avr.ini b/ini/avr.ini index 92dd8f0cdb..b13596afe1 100644 --- a/ini/avr.ini +++ b/ini/avr.ini @@ -13,6 +13,7 @@ # AVR (8-bit) Common Environment values # [common_avr8] +platform = atmelavr@~3.4 build_flags = ${common.build_flags} -Wl,--relax board_build.f_cpu = 16000000L src_filter = ${common.default_src_filter} + @@ -21,7 +22,6 @@ src_filter = ${common.default_src_filter} + # ATmega2560 # [env:mega2560] -platform = atmelavr extends = common_avr8 board = megaatmega2560 @@ -33,7 +33,6 @@ board = megaatmega2560 # BOARD_EINSTART_S # [env:mega2560ext] -platform = atmelavr extends = env:mega2560 board_build.variant = MARLIN_MEGA_EXTENDED extra_scripts = ${common.extra_scripts} @@ -43,7 +42,6 @@ extra_scripts = ${common.extra_scripts} # ATmega1280 # [env:mega1280] -platform = atmelavr extends = common_avr8 board = megaatmega1280 @@ -61,7 +59,6 @@ build_flags = ${common.build_flags} -fno-tree-scev-cprop -fno-split-wide # MightyBoard ATmega1280 # [env:MightyBoard1280] -platform = atmelavr extends = mega_extended_optimized board = megaatmega1280 @@ -69,7 +66,6 @@ board = megaatmega1280 # MightyBoard ATmega2560 # [env:MightyBoard2560] -platform = atmelavr extends = mega_extended_optimized board = megaatmega2560 @@ -77,7 +73,6 @@ board = megaatmega2560 # RAMBo # [env:rambo] -platform = atmelavr extends = common_avr8 board = reprap_rambo @@ -85,7 +80,6 @@ board = reprap_rambo # FYSETC F6 V1.3 / V1.4 # [env:FYSETC_F6] -platform = atmelavr extends = common_avr8 board = fysetc_f6_13 @@ -93,7 +87,6 @@ board = fysetc_f6_13 # Sanguinololu (ATmega644p) # [env:sanguino644p] -platform = atmelavr extends = common_avr8 board = sanguino_atmega644p @@ -101,7 +94,6 @@ board = sanguino_atmega644p # Sanguinololu (ATmega1284p) # [env:sanguino1284p] -platform = atmelavr extends = common_avr8 board = sanguino_atmega1284p board_upload.maximum_size = 126976 @@ -114,7 +106,6 @@ board_upload.maximum_size = 126976 build_flags = ${common.build_flags} -fno-tree-scev-cprop -fno-split-wide-types -Wl,--relax -mcall-prologues [env:sanguino1284p_optimized] -platform = atmelavr extends = env:sanguino1284p build_flags = ${tuned_1284p.build_flags} @@ -122,12 +113,10 @@ build_flags = ${tuned_1284p.build_flags} # Melzi and clones (ATmega1284p) # [env:melzi] -platform = atmelavr extends = env:sanguino1284p upload_speed = 57600 [env:melzi_optimized] -platform = atmelavr extends = env:sanguino1284p_optimized upload_speed = 57600 @@ -135,7 +124,6 @@ upload_speed = 57600 # Melzi and clones (Optiboot bootloader) # [env:melzi_optiboot] -platform = atmelavr extends = common_avr8 board = sanguino_atmega1284p upload_speed = 115200 @@ -145,6 +133,5 @@ board_upload.maximum_size = 130048 # Melzi and clones (Zonestar Melzi2 with tuned flags) # [env:melzi_optiboot_optimized] -platform = atmelavr extends = env:melzi_optiboot build_flags = ${tuned_1284p.build_flags} diff --git a/ini/due.ini b/ini/due.ini index 9123af8cdc..28b6838307 100644 --- a/ini/due.ini +++ b/ini/due.ini @@ -21,7 +21,6 @@ board = due src_filter = ${common.default_src_filter} + + [env:DUE_USB] -platform = atmelsam extends = env:DUE board = dueUSB @@ -29,7 +28,6 @@ board = dueUSB # Archim SAM # [common_DUE_archim] -platform = atmelsam extends = env:DUE board = marlin_archim build_flags = ${common.build_flags} @@ -39,5 +37,4 @@ extra_scripts = ${common.extra_scripts} Marlin/src/HAL/DUE/upload_extra_script.py [env:DUE_archim] -platform = ${common_DUE_archim.platform} extends = common_DUE_archim diff --git a/ini/esp32.ini b/ini/esp32.ini index 0815486cc9..4ac6b96f5c 100644 --- a/ini/esp32.ini +++ b/ini/esp32.ini @@ -24,12 +24,10 @@ monitor_speed = 250000 #board_build.flash_mode = qio [env:FYSETC_E4] -platform = espressif32@2.1.0 extends = env:esp32 board_build.partitions = default_16MB.csv [env:PANDA] -platform = espressif32@2.1.0 extends = env:esp32 build_flags = ${env:esp32.build_flags} -DUSE_ESP32_EXIO -DUSE_ESP32_TASK_WDT lib_deps = ${common.lib_deps} @@ -40,5 +38,4 @@ monitor_speed = 115200 [env:mks_tinybee] extends = env:esp32 -platform = espressif32@2.1.0 board_build.partitions = default_8MB.csv diff --git a/ini/lpc176x.ini b/ini/lpc176x.ini index 3c5f43764b..95f5637a5d 100644 --- a/ini/lpc176x.ini +++ b/ini/lpc176x.ini @@ -34,11 +34,9 @@ build_flags = ${common.build_flags} -DU8G_HAL_LINKS -IMarlin/src/HAL/LPC17 # NXP LPC176x ARM Cortex-M3 # [env:LPC1768] -platform = ${common_LPC.platform} extends = common_LPC board = nxp_lpc1768 [env:LPC1769] -platform = ${common_LPC.platform} extends = common_LPC board = nxp_lpc1769 diff --git a/ini/native.ini b/ini/native.ini index fe5fe3a5d0..5355284992 100644 --- a/ini/native.ini +++ b/ini/native.ini @@ -52,12 +52,10 @@ extends = simulator_common build_flags = ${simulator_common.build_flags} -ldl -lpthread -lSDL2 -lSDL2_net -lGL [env:simulator_linux_debug] -platform = ${simulator_linux.platform} extends = simulator_linux build_type = debug [env:simulator_linux_release] -platform = ${simulator_linux.platform} extends = simulator_linux build_type = release build_flags = ${simulator_linux.build_flags} ${simulator_linux.release_flags} @@ -92,13 +90,11 @@ build_flags = -lSDL2 [env:simulator_macos_debug] -platform = ${env:simulator_linux_release.platform} extends = env:simulator_linux_debug build_flags = ${env:simulator_linux_debug.build_flags} ${simulator_macos.build_flags} -ggdb -Og -D_THREAD_SAFE build_unflags = ${simulator_macos.build_unflags} [env:simulator_macos_release] -platform = ${env:simulator_linux_release.platform} extends = env:simulator_linux_release build_flags = ${env:simulator_linux_release.build_flags} ${simulator_macos.build_flags} build_unflags = ${simulator_macos.build_unflags} @@ -110,7 +106,6 @@ build_unflags = ${simulator_macos.build_unflags} # pacman -S --needed base-devel mingw-w64-x86_64-toolchain mingw64/mingw-w64-x86_64-glm mingw64/mingw-w64-x86_64-SDL2 mingw64/mingw-w64-x86_64-SDL2_net mingw-w64-x86_64-dlfcn # [env:simulator_windows] -platform = ${simulator_common.platform} extends = simulator_common src_build_flags = ${simulator_common.src_build_flags} -fpermissive build_flags = ${simulator_common.build_flags} ${simulator_common.debug_build_flags} -IC:\\msys64\\mingw64\\include\\SDL2 -fno-stack-protector -Wl,-subsystem,windows -ldl -lmingw32 -lSDL2main -lSDL2 -lSDL2_net -lopengl32 -lssp diff --git a/ini/stm32f0.ini b/ini/stm32f0.ini index 4559f115bd..d6251344c3 100644 --- a/ini/stm32f0.ini +++ b/ini/stm32f0.ini @@ -23,7 +23,6 @@ # Malyan M200 v2 (STM32F070RB) # [env:STM32F070RB_malyan] -platform = ${common_stm32.platform} extends = common_stm32 board = marlin_malyanM200v2 build_flags = ${common_stm32.build_flags} -DHAL_PCD_MODULE_ENABLED @@ -34,7 +33,6 @@ build_flags = ${common_stm32.build_flags} -DHAL_PCD_MODULE_ENABLED # Malyan M200 v2 (STM32F070CB) # [env:STM32F070CB_malyan] -platform = ${common_stm32.platform} extends = common_stm32 board = malyanm200_f070cb build_flags = ${common_stm32.build_flags} @@ -45,7 +43,6 @@ build_flags = ${common_stm32.build_flags} # Malyan M300 (STM32F070CB) # [env:malyan_M300] -platform = ${common_stm32.platform} extends = common_stm32 board = malyanm300_f070cb build_flags = ${common_stm32.build_flags} diff --git a/ini/stm32f1-maple.ini b/ini/stm32f1-maple.ini index 969bb815da..878ccd6f7c 100644 --- a/ini/stm32f1-maple.ini +++ b/ini/stm32f1-maple.ini @@ -42,7 +42,6 @@ extra_scripts = ${common.extra_scripts} # STM32F103RC # [common_STM32F103RC_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = genericSTM32F103RC monitor_speed = 115200 @@ -51,7 +50,6 @@ monitor_speed = 115200 # MEEB_3DP (STM32F103RCT6 with 512K) # [env:STM32F103RC_meeb] -platform = ${common_stm32f1.platform} extends = common_STM32F103RC_maple board = marlin_MEEB_3DP build_flags = ${common_stm32f1.build_flags} @@ -75,7 +73,6 @@ upload_protocol = dfu # FYSETC STM32F103RC # [env:STM32F103RC_fysetc_maple] -platform = ${common_stm32f1.platform} extends = common_STM32F103RC_maple extra_scripts = ${common_stm32f1.extra_scripts} buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py @@ -91,7 +88,6 @@ upload_protocol = serial # STM32F103RC_btt_USB_maple ......... RCT6 with 256K (USB mass storage) # [env:STM32F103RC_btt_maple] -platform = ${common_stm32f1.platform} extends = common_STM32F103RC_maple board_build.address = 0x08007000 board_build.ldscript = STM32F103RC_SKR_MINI_256K.ld @@ -102,7 +98,6 @@ build_flags = ${common_stm32f1.build_flags} monitor_speed = 115200 [env:STM32F103RC_btt_USB_maple] -platform = ${common_stm32f1.platform} extends = env:STM32F103RC_btt_maple build_flags = ${env:STM32F103RC_btt_maple.build_flags} -DUSE_USB_COMPOSITE lib_deps = ${env:STM32F103RC_btt_maple.lib_deps} @@ -112,7 +107,6 @@ lib_deps = ${env:STM32F103RC_btt_maple.lib_deps} # Generic STM32F103RE environment # [env:STM32F103RE_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = genericSTM32F103RE monitor_speed = 115200 @@ -121,7 +115,6 @@ monitor_speed = 115200 # Creality (STM32F103RET6) # [env:STM32F103RET6_creality_maple] -platform = ${common_stm32f1.platform} extends = env:STM32F103RE_maple build_flags = ${common_stm32f1.build_flags} -DTEMP_TIMER_CHAN=4 board_build.address = 0x08007000 @@ -139,7 +132,6 @@ upload_protocol = jlink # STM32F103RE_btt_USB_maple ......... RET6 (USB mass storage) # [env:STM32F103RE_btt_maple] -platform = ${common_stm32f1.platform} extends = env:STM32F103RE_maple board_build.address = 0x08007000 board_build.ldscript = STM32F103RE_SKR_MINI_512K.ld @@ -150,7 +142,6 @@ debug_tool = stlink upload_protocol = stlink [env:STM32F103RE_btt_USB_maple] -platform = ${common_stm32f1.platform} extends = env:STM32F103RE_btt_maple build_flags = ${env:STM32F103RE_btt_maple.build_flags} -DUSE_USB_COMPOSITE lib_deps = ${common_stm32f1.lib_deps} @@ -160,7 +151,6 @@ lib_deps = ${common_stm32f1.lib_deps} # Geeetech GTM32 (STM32F103VET6) # [env:STM32F103VE_GTM32] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = genericSTM32F103VE build_flags = ${common_stm32f1.build_flags} @@ -174,7 +164,6 @@ upload_protocol = serial # Longer 3D board in Alfawise U20 (STM32F103VET6) # [env:STM32F103VE_longer_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = genericSTM32F103VE board_build.address = 0x08010000 @@ -191,7 +180,6 @@ build_unflags = ${common_stm32f1.build_unflags} # MKS Robin Mini (STM32F103VET6) # [env:mks_robin_mini_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = genericSTM32F103VE extra_scripts = ${common_stm32f1.extra_scripts} @@ -203,7 +191,6 @@ build_flags = ${common_stm32f1.build_flags} # MKS Robin Nano (STM32F103VET6) # [env:mks_robin_nano35_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = genericSTM32F103VE extra_scripts = ${common_stm32f1.extra_scripts} @@ -217,7 +204,6 @@ upload_protocol = jlink # MKS Robin (STM32F103ZET6) # [env:mks_robin_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = genericSTM32F103ZE extra_scripts = ${common_stm32f1.extra_scripts} @@ -229,7 +215,6 @@ build_flags = ${common_stm32f1.build_flags} # MKS Robin Pro (STM32F103ZET6) # [env:mks_robin_pro_maple] -platform = ${common_stm32f1.platform} extends = env:mks_robin_maple extra_scripts = ${common_stm32f1.extra_scripts} buildroot/share/PlatformIO/scripts/mks_robin_pro.py @@ -238,7 +223,6 @@ extra_scripts = ${common_stm32f1.extra_scripts} # TRIGORILLA PRO (STM32F103ZET6) # [env:trigorilla_pro_maple] -platform = ${common_stm32f1.platform} extends = env:mks_robin_maple extra_scripts = ${common_stm32f1.extra_scripts} @@ -247,7 +231,6 @@ extra_scripts = ${common_stm32f1.extra_scripts} # MKS Robin E3 with TMC2209 # [env:mks_robin_e3_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = genericSTM32F103RC extra_scripts = ${common_stm32f1.extra_scripts} @@ -260,7 +243,6 @@ build_flags = ${common_stm32f1.build_flags} # - LVGL UI # [env:mks_robin_e3p_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = genericSTM32F103VE extra_scripts = ${common_stm32f1.extra_scripts} @@ -274,7 +256,6 @@ upload_protocol = jlink # MKS Robin Lite/Lite2 (STM32F103RCT6) # [env:mks_robin_lite_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = genericSTM32F103RC extra_scripts = ${common_stm32f1.extra_scripts} @@ -284,7 +265,6 @@ extra_scripts = ${common_stm32f1.extra_scripts} # MKS ROBIN LITE3 (STM32F103RCT6) # [env:mks_robin_lite3_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = genericSTM32F103RC extra_scripts = ${common_stm32f1.extra_scripts} @@ -294,7 +274,6 @@ extra_scripts = ${common_stm32f1.extra_scripts} # JGAurora A5S A1 (STM32F103ZET6) # [env:jgaurora_a5s_a1_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = genericSTM32F103ZE board_build.address = 0x0800A000 @@ -309,7 +288,6 @@ build_flags = ${common_stm32f1.build_flags} # Malyan M200 (STM32F103CB) # [env:STM32F103CB_malyan_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = marlin_malyanM200 build_flags = ${common_stm32f1.build_flags} @@ -322,7 +300,6 @@ lib_ignore = ${common_stm32f1.lib_ignore} # Chitu boards like Tronxy X5s (STM32F103ZET6) # [env:chitu_f103_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = marlin_CHITU_F103 extra_scripts = ${common_stm32f1.extra_scripts} @@ -338,7 +315,6 @@ build_unflags = ${common_stm32f1.build_unflags} # Use this target if G28 or G29 are always failing. # [env:chitu_v5_gpio_init_maple] -platform = ${common_stm32f1.platform} extends = env:chitu_f103_maple build_flags = ${env:chitu_f103_maple.build_flags} -DCHITU_V5_Z_MIN_BUGFIX @@ -346,7 +322,6 @@ build_flags = ${env:chitu_f103_maple.build_flags} -DCHITU_V5_Z_MIN_BUGFIX # FLYmaker FLY Mini (STM32F103RCT6) # [env:FLY_MINI_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = genericSTM32F103RC board_build.address = 0x08005000 @@ -364,7 +339,6 @@ build_flags = ${common_stm32f1.build_flags} # STM32F103VE_ZM3E4V2_USB_maple ......... VET6 with 512K # [ZONESTAR_ZM3E_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 platform_packages = tool-stm32duino board_build.address = 0x08005000 @@ -380,20 +354,17 @@ lib_deps = ${common_stm32f1.lib_deps} lib_ignore = Adafruit NeoPixel, SPI, SailfishLCD, SailfishRGB_LED, SlowSoftI2CMaster, TMCStepper [env:STM32F103RC_ZM3E2_USB_maple] -platform = ${ZONESTAR_ZM3E_maple.platform} extends = ZONESTAR_ZM3E_maple board = genericSTM32F103RC board_build.ldscript = ZONESTAR_ZM3E_256K.ld [env:STM32F103VC_ZM3E4_USB_maple] -platform = ${ZONESTAR_ZM3E_maple.platform} extends = ZONESTAR_ZM3E_maple board = genericSTM32F103VC board_build.ldscript = ZONESTAR_ZM3E_256K.ld build_flags = ${ZONESTAR_ZM3E_maple.build_flags} -DTONE_TIMER=1 -DTONE_CHANNEL=2 [env:STM32F103VE_ZM3E4V2_USB_maple] -platform = ${ZONESTAR_ZM3E_maple.platform} extends = ZONESTAR_ZM3E_maple board = genericSTM32F103VE board_build.ldscript = ZONESTAR_ZM3E_512K.ld @@ -404,7 +375,6 @@ board_upload.maximum_size = 499712 # ERYONE ERY32 Mini (STM32F103VET6) # [env:ERYONE_ERY32_MINI_maple] -platform = ${common_stm32f1.platform} extends = common_stm32f1 board = genericSTM32F103VE build_flags = ${common_stm32f1.build_flags} diff --git a/ini/stm32f1.ini b/ini/stm32f1.ini index a2cd1b0f58..939f51ffbf 100644 --- a/ini/stm32f1.ini +++ b/ini/stm32f1.ini @@ -30,7 +30,6 @@ monitor_speed = 115200 # STM32F103RE # [env:STM32F103RE] -platform = ${common_stm32.platform} extends = common_stm32 board = genericSTM32F103RE monitor_speed = 115200 @@ -39,7 +38,6 @@ monitor_speed = 115200 # STM32F103VE # [env:STM32F103VE] -platform = ${common_stm32.platform} extends = common_stm32 board = genericSTM32F103VE monitor_speed = 115200 @@ -48,7 +46,6 @@ monitor_speed = 115200 # STM32F103ZE # [env:STM32F103ZE] -platform = ${common_stm32.platform} extends = common_stm32 board = genericSTM32F103ZE monitor_speed = 115200 @@ -60,7 +57,6 @@ monitor_speed = 115200 # STM32F103RC_btt_USB ......... RCT6 with 256K (USB mass storage) # [env:STM32F103RC_btt] -platform = ${common_stm32.platform} extends = common_STM32F103RC_variant build_flags = ${common_STM32F103RC_variant.build_flags} -DTIMER_SERVO=TIM5 @@ -68,7 +64,6 @@ board_build.offset = 0x7000 board_upload.offset_address = 0x08007000 [env:STM32F103RC_btt_USB] -platform = ${common_stm32.platform} extends = env:STM32F103RC_btt platform_packages = ${stm_flash_drive.platform_packages} build_flags = ${env:STM32F103RC_btt.build_flags} @@ -83,7 +78,6 @@ build_unflags = ${common_stm32.build_unflags} -DUSBD_USE_CDC # Uses HAL STM32 to support Marlin UI for TFT screen with optional touch panel # [env:mks_robin] -platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F103ZE board_build.variant = MARLIN_F103Zx @@ -98,7 +92,6 @@ build_unflags = ${stm32_variant.build_unflags} # MKS Robin E3/E3D (STM32F103RCT6) with TMC2209 # [env:mks_robin_e3] -platform = ${common_stm32.platform} extends = common_STM32F103RC_variant board_build.encrypt = Robin_e3.bin board_build.offset = 0x5000 @@ -114,7 +107,6 @@ debug_tool = stlink # Creality (STM32F103RET6) # [env:STM32F103RET6_creality] -platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F103RE board_build.variant = MARLIN_F103Rx @@ -139,7 +131,6 @@ upload_protocol = jlink # STM32F103RE_btt_USB ......... RET6 (USB mass storage) # [env:STM32F103RE_btt] -platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F103RE board_build.variant = MARLIN_F103Rx @@ -154,7 +145,6 @@ debug_tool = jlink upload_protocol = jlink [env:STM32F103RE_btt_USB] -platform = ${common_stm32.platform} extends = env:STM32F103RE_btt platform_packages = ${stm_flash_drive.platform_packages} build_flags = ${env:STM32F103RE_btt.build_flags} @@ -167,7 +157,6 @@ build_unflags = ${stm32_variant.build_unflags} -DUSBD_USE_CDC # board Hispeedv1 # [env:flsun_hispeedv1] -platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F103VE board_build.variant = MARLIN_F103Vx @@ -184,7 +173,6 @@ build_unflags = ${stm32_variant.build_unflags} # MKS Robin Nano V1.2 and V2 # [env:mks_robin_nano35] -platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F103VE board_build.variant = MARLIN_F103Vx @@ -203,7 +191,6 @@ upload_protocol = jlink # Mingda MPX_ARM_MINI # [env:mingda_mpx_arm_mini] -platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F103ZE board_build.variant = MARLIN_F103Zx @@ -217,7 +204,6 @@ build_unflags = ${stm32_variant.build_unflags} # Malyan M200 (STM32F103CB) # [env:STM32F103CB_malyan] -platform = ${common_stm32.platform} extends = common_stm32 board = malyanm200_f103cb build_flags = ${common_stm32.build_flags} @@ -229,7 +215,6 @@ src_filter = ${common.default_src_filter} + # FLYmaker FLY Mini (STM32F103RCT6) # [env:FLY_MINI] -platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F103RC board_build.variant = MARLIN_F103Rx @@ -241,7 +226,6 @@ build_flags = ${stm32_variant.build_flags} -DSS_TIMER=4 # MKS Robin Mini (STM32F103VET6) # [env:mks_robin_mini] -platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F103VE board_build.variant = MARLIN_F103Vx @@ -255,7 +239,6 @@ build_flags = ${stm32_variant.build_flags} # MKS Robin Lite/Lite2 (STM32F103RCT6) # [env:mks_robin_lite] -platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F103RC board_build.variant = MARLIN_F103Rx @@ -267,7 +250,6 @@ board_upload.offset_address = 0x08005000 # MKS ROBIN LITE3 (STM32F103RCT6) # [env:mks_robin_lite3] -platform = ${common_stm32.platform} extends = env:mks_robin_lite board_build.encrypt = mksLite3.bin @@ -275,7 +257,6 @@ board_build.encrypt = mksLite3.bin # MKS Robin Pro (STM32F103ZET6) # [env:mks_robin_pro] -platform = ${common_stm32.platform} extends = env:mks_robin board_build.encrypt = Robin_pro.bin @@ -284,7 +265,6 @@ board_build.encrypt = Robin_pro.bin # - LVGL UI # [env:mks_robin_e3p] -platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F103VE board_build.variant = MARLIN_F103Vx @@ -301,7 +281,6 @@ upload_protocol = jlink # JGAurora A5S A1 (STM32F103ZET6) # [env:jgaurora_a5s_a1] -platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F103ZE board_build.variant = MARLIN_F103Zx @@ -317,7 +296,6 @@ extra_scripts = ${stm32_variant.extra_scripts} # FYSETC STM32F103RC # [env:STM32F103RC_fysetc] -platform = ${common_stm32.platform} extends = common_STM32F103RC_variant extra_scripts = ${common_STM32F103RC_variant.extra_scripts} buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py @@ -329,10 +307,9 @@ upload_protocol = serial # Longer 3D board in Alfawise U20 (STM32F103VET6) # [env:STM32F103VE_longer] -platform = ${common_stm32.platform} +extends = stm32_variant lib_deps = ${common.lib_deps} https://github.com/tpruvot/STM32_Servo_OpenDrain/archive/2.0.zip -extends = stm32_variant board = genericSTM32F103VE board_build.variant = MARLIN_F103VE_LONGER board_build.rename = project.bin @@ -348,7 +325,6 @@ debug_tool = stlink # TRIGORILLA PRO (STM32F103ZET6) # [env:trigorilla_pro] -platform = ${stm32_variant.platform} extends = stm32_variant board = genericSTM32F103ZE board_build.variant = MARLIN_F103Zx @@ -361,7 +337,6 @@ build_unflags = ${stm32_variant.build_unflags} # Chitu boards like Tronxy X5s (STM32F103ZET6) # [env:chitu_f103] -platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F103ZE board_build.variant = MARLIN_F103Zx @@ -377,7 +352,6 @@ extra_scripts = ${stm32_variant.extra_scripts} # Use this target if G28 or G29 are always failing. # [env:chitu_v5_gpio_init] -platform = ${common_stm32.platform} extends = env:chitu_f103 build_flags = ${env:chitu_f103.build_flags} -DCHITU_V5_Z_MIN_BUGFIX @@ -389,7 +363,6 @@ build_flags = ${env:chitu_f103.build_flags} -DCHITU_V5_Z_MIN_BUGFIX # STM32F103VE_ZM3E4V2_USB ......... VET6 with 512K # [ZONESTAR_ZM3E] -platform = ${common_stm32.platform} extends = stm32_variant platform_packages = ${stm_flash_drive.platform_packages} board_upload.offset_address = 0x08005000 @@ -401,20 +374,17 @@ build_flags = ${common_stm32.build_flags} build_unflags = ${stm32_variant.build_unflags} -DUSBD_USE_CDC [env:STM32F103RC_ZM3E2_USB] -platform = ${ZONESTAR_ZM3E.platform} extends = ZONESTAR_ZM3E board = genericSTM32F103RC board_build.variant = MARLIN_F103Rx [env:STM32F103VC_ZM3E4_USB] -platform = ${ZONESTAR_ZM3E.platform} extends = ZONESTAR_ZM3E board = genericSTM32F103VC board_build.variant = MARLIN_F103Vx build_flags = ${ZONESTAR_ZM3E.build_flags} -DTIMER_TONE=TIM1 [env:STM32F103VE_ZM3E4V2_USB] -platform = ${ZONESTAR_ZM3E.platform} extends = ZONESTAR_ZM3E board = genericSTM32F103VE board_build.variant = MARLIN_F103Vx diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index d7c80cf0e9..1c3d9a8892 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -23,7 +23,6 @@ # ARMED (STM32) # [env:ARMED] -platform = ${common_stm32.platform} extends = common_stm32 board = armed_v1 build_flags = ${common_stm32.build_flags} @@ -34,7 +33,6 @@ build_flags = ${common_stm32.build_flags} # 'STEVAL-3DP001V1' STM32F401VE board - https://www.st.com/en/evaluation-tools/steval-3dp001v1.html # [env:STM32F401VE_STEVAL] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_STEVAL_STM32F401VE build_flags = ${stm32_variant.build_flags} @@ -45,7 +43,6 @@ build_flags = ${stm32_variant.build_flags} # STM32F401RC # [env:FYSETC_CHEETAH_V20] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_FYSETC_CHEETAH_V20 board_build.offset = 0x8000 @@ -55,7 +52,6 @@ build_flags = ${stm32_variant.build_flags} -DSTM32F401xC # FLYF407ZG # [env:FLYF407ZG] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_STM32F407ZGT6 board_build.variant = MARLIN_FLY_F407ZG @@ -66,7 +62,6 @@ upload_protocol = dfu # FYSETC S6 (STM32F446RET6 ARM Cortex-M4) # [env:FYSETC_S6] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_fysetc_s6 board_build.offset = 0x10000 @@ -80,7 +75,6 @@ upload_command = dfu-util -a 0 -s 0x08010000:leave -D "$SOURCE" # FYSETC S6 new bootloader # [env:FYSETC_S6_8000] -platform = ${common_stm32.platform} extends = env:FYSETC_S6 board = marlin_fysetc_s6 board_build.offset = 0x8000 @@ -93,7 +87,6 @@ upload_command = dfu-util -a 0 -s 0x08008000:leave -D "$SOURCE" # Shield - https://github.com/jmz52/Hardware # [env:STM32F407VE_black] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_blackSTM32F407VET6 build_flags = ${stm32_variant.build_flags} @@ -103,7 +96,6 @@ build_flags = ${stm32_variant.build_flags} # STM32F407VET6 Index Mobo Rev 03 # [env:Index_Mobo_Rev03] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_index_mobo_rev03 build_flags = ${stm32_variant.build_flags} @@ -117,7 +109,6 @@ extra_scripts = ${stm32_variant.extra_scripts} # Comment out board_build.offset = 0x10000 if you don't plan to use OpenBLT/flashing directly to 0x08000000. # [env:Anet_ET4_OpenBLT] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_STM32F407VGT6_CCM board_build.variant = MARLIN_F4x7Vx @@ -137,7 +128,6 @@ upload_protocol = jlink # BigTreeTech SKR Pro (STM32F407ZGT6 ARM Cortex-M4) # [env:BIGTREE_SKR_PRO] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_BigTree_SKR_Pro board_build.offset = 0x8000 @@ -149,7 +139,6 @@ upload_protocol = stlink # BigTreeTech SKR Pro (STM32F407ZGT6 ARM Cortex-M4) with USB Flash Drive Support # [env:BIGTREE_SKR_PRO_usb_flash_drive] -platform = ${common_stm32.platform} extends = env:BIGTREE_SKR_PRO platform_packages = ${stm_flash_drive.platform_packages} build_flags = ${stm_flash_drive.build_flags} -DSTM32F407_5ZX @@ -159,7 +148,6 @@ build_unflags = ${env:BIGTREE_SKR_PRO.build_unflags} -DUSBCON -DUSBD_USE_CDC # BigTreeTech E3 RRF (STM32F407VGT6 ARM Cortex-M4) # [env:BIGTREE_E3_RRF] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_STM32F407VGT6_CCM board_build.variant = MARLIN_BIGTREE_E3_RRF @@ -173,7 +161,6 @@ build_flags = ${stm32_variant.build_flags} # Bigtreetech GTR V1.0 (STM32F407IGT6 ARM Cortex-M4) # [env:BIGTREE_GTR_V1_0] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_BigTree_GTR_v1 board_build.offset = 0x8000 @@ -183,7 +170,6 @@ build_flags = ${stm32_variant.build_flags} -DSTM32F407IX # Bigtreetech GTR V1.0 (STM32F407IGT6 ARM Cortex-M4) with USB Flash Drive Support # [env:BIGTREE_GTR_V1_0_usb_flash_drive] -platform = ${common_stm32.platform} extends = env:BIGTREE_GTR_V1_0 platform_packages = ${stm_flash_drive.platform_packages} build_flags = ${stm_flash_drive.build_flags} -DSTM32F407IX @@ -193,7 +179,6 @@ build_unflags = ${env:BIGTREE_GTR_V1_0.build_unflags} -DUSBCON -DUSBD_USE_CD # BigTreeTech BTT002 V1.0 (STM32F407VGT6 ARM Cortex-M4) # [env:BIGTREE_BTT002] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_BigTree_BTT002 board_build.offset = 0x8000 @@ -208,7 +193,6 @@ build_flags = ${stm32_variant.build_flags} # BigTreeTech BTT002 V1.x with 512k of flash (STM32F407VET6 ARM Cortex-M4) # [env:BIGTREE_BTT002_VET6] -platform = ${env:BIGTREE_BTT002.platform} extends = env:BIGTREE_BTT002 board = marlin_BigTree_BTT002_VET6 @@ -216,7 +200,6 @@ board = marlin_BigTree_BTT002_VET6 # BigTreeTech SKR V2.0 (STM32F407VGT6 ARM Cortex-M4) with USB Flash Drive Support # [env:BIGTREE_SKR_2] -platform = ${common_stm32.platform} extends = stm32_variant platform_packages = ${stm_flash_drive.platform_packages} board = marlin_STM32F407VGT6_CCM @@ -234,13 +217,11 @@ upload_protocol = stlink # BigTreeTech SKR V2.0 (STM32F407VGT6 ARM Cortex-M4) with USB Media Share Support # [env:BIGTREE_SKR_2_USB] -platform = ${common_stm32.platform} extends = env:BIGTREE_SKR_2 build_flags = ${env:BIGTREE_SKR_2.build_flags} -DUSBD_USE_CDC_MSC build_unflags = ${env:BIGTREE_SKR_2.build_unflags} -DUSBD_USE_CDC [env:BIGTREE_SKR_2_USB_debug] -platform = ${common_stm32.platform} extends = env:BIGTREE_SKR_2_USB build_flags = ${env:BIGTREE_SKR_2_USB.build_flags} -O0 build_unflags = ${env:BIGTREE_SKR_2_USB.build_unflags} -Os -NDEBUG @@ -249,7 +230,6 @@ build_unflags = ${env:BIGTREE_SKR_2_USB.build_unflags} -Os -NDEBUG # Bigtreetech SKR V2.0 F429 (STM32F429VGT6 ARM Cortex-M4) with USB Flash Drive Support # [env:BIGTREE_SKR_2_F429] -platform = ${common_stm32.platform} extends = stm32_variant platform_packages = ${stm_flash_drive.platform_packages} board = marlin_STM32F429VGT6 @@ -267,13 +247,11 @@ upload_protocol = stlink # BigTreeTech SKR V2.0 F429 (STM32F429VGT6 ARM Cortex-M4) with USB Media Share Support # [env:BIGTREE_SKR_2_F429_USB] -platform = ${common_stm32.platform} extends = env:BIGTREE_SKR_2_F429 build_flags = ${env:BIGTREE_SKR_2_F429.build_flags} -DUSBD_USE_CDC_MSC build_unflags = ${env:BIGTREE_SKR_2_F429.build_unflags} -DUSBD_USE_CDC [env:BIGTREE_SKR_2_F429_USB_debug] -platform = ${common_stm32.platform} extends = env:BIGTREE_SKR_2_F429_USB build_flags = ${env:BIGTREE_SKR_2_F429_USB.build_flags} -O0 build_unflags = ${env:BIGTREE_SKR_2_F429_USB.build_unflags} -Os -NDEBUG @@ -282,7 +260,6 @@ build_unflags = ${env:BIGTREE_SKR_2_F429_USB.build_unflags} -Os -NDEBUG # BigTreeTech Octopus V1.0/1.1 / Octopus Pro V1.0 (STM32F446ZET6 ARM Cortex-M4) # [env:BIGTREE_OCTOPUS_V1] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_BigTree_Octopus_v1 board_build.offset = 0x8000 @@ -293,7 +270,6 @@ build_flags = ${stm32_variant.build_flags} # BigTreeTech Octopus V1.0/1.1 / Octopus Pro V1.0 (STM32F446ZET6 ARM Cortex-M4) with USB Flash Drive Support # [env:BIGTREE_OCTOPUS_V1_USB] -platform = ${common_stm32.platform} extends = env:BIGTREE_OCTOPUS_V1 platform_packages = ${stm_flash_drive.platform_packages} build_unflags = -DUSBD_USE_CDC @@ -307,7 +283,6 @@ build_flags = ${stm_flash_drive.build_flags} # BigTreeTech Octopus Pro V1.0 (STM32F429ZGT6 ARM Cortex-M4) # [env:BIGTREE_OCTOPUS_PRO_V1_F429] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_BigTree_Octopus_Pro_v1_F429 board_build.offset = 0x8000 @@ -318,7 +293,6 @@ build_flags = ${stm32_variant.build_flags} # BigTreeTech Octopus Pro V1.0 (STM32F429ZGT6 ARM Cortex-M4) with USB Flash Drive Support # [env:BIGTREE_OCTOPUS_PRO_V1_F429_USB] -platform = ${common_stm32.platform} extends = env:BIGTREE_OCTOPUS_PRO_V1_F429 platform_packages = ${stm_flash_drive.platform_packages} build_unflags = -DUSBD_USE_CDC @@ -332,7 +306,6 @@ build_flags = ${stm_flash_drive.build_flags} # Lerdge base # [lerdge_common] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_STM32F407ZGT6 board_build.variant = MARLIN_LERDGE @@ -349,7 +322,6 @@ extra_scripts = ${common_stm32.extra_scripts} # Lerdge X (STM32F407VE) # [env:LERDGEX] -platform = ${lerdge_common.platform} extends = lerdge_common board_build.encrypt = Lerdge_X_firmware_force.bin @@ -357,7 +329,6 @@ board_build.encrypt = Lerdge_X_firmware_force.bin # Lerdge X with USB Flash Drive Support # [env:LERDGEX_usb_flash_drive] -platform = ${env:LERDGEX.platform} extends = env:LERDGEX platform_packages = ${stm_flash_drive.platform_packages} build_flags = ${stm_flash_drive.build_flags} ${lerdge_common.build_flags} @@ -366,7 +337,6 @@ build_flags = ${stm_flash_drive.build_flags} ${lerdge_common.build_flags} # Lerdge S (STM32F407ZG) # [env:LERDGES] -platform = ${lerdge_common.platform} extends = lerdge_common board_build.encrypt = Lerdge_firmware_force.bin @@ -374,7 +344,6 @@ board_build.encrypt = Lerdge_firmware_force.bin # Lerdge S with USB Flash Drive Support # [env:LERDGES_usb_flash_drive] -platform = ${env:LERDGES.platform} extends = env:LERDGES platform_packages = ${stm_flash_drive.platform_packages} build_flags = ${stm_flash_drive.build_flags} ${lerdge_common.build_flags} @@ -383,7 +352,6 @@ build_flags = ${stm_flash_drive.build_flags} ${lerdge_common.build_flags} # Lerdge K (STM32F407ZG) # [env:LERDGEK] -platform = ${lerdge_common.platform} extends = lerdge_common board_build.encrypt = Lerdge_K_firmware_force.bin build_flags = ${lerdge_common.build_flags} -DLERDGEK @@ -392,7 +360,6 @@ build_flags = ${lerdge_common.build_flags} -DLERDGEK # Lerdge K with USB Flash Drive Support # [env:LERDGEK_usb_flash_drive] -platform = ${env:LERDGEK.platform} extends = env:LERDGEK platform_packages = ${stm_flash_drive.platform_packages} build_flags = ${stm_flash_drive.build_flags} ${lerdge_common.build_flags} @@ -401,7 +368,6 @@ build_flags = ${stm_flash_drive.build_flags} ${lerdge_common.build_flags} # RUMBA32 # [env:rumba32] -platform = ${common_stm32.platform} extends = stm32_variant board = rumba32_f446ve board_build.variant = MARLIN_F446VE @@ -418,7 +384,6 @@ upload_protocol = dfu # MKS Robin Pro V2 # [env:mks_robin_pro2] -platform = ${common_stm32.platform} extends = stm32_variant platform_packages = ${stm_flash_drive.platform_packages} board = genericSTM32F407VET6 @@ -440,7 +405,6 @@ build_flags = -DPIN_WIRE_SCL=PB6 -DPIN_WIRE_SDA=PB7 # MKS Robin Nano V3 # [env:mks_robin_nano_v3] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_STM32F407VGT6_CCM board_build.variant = MARLIN_F4x7Vx @@ -457,7 +421,6 @@ upload_protocol = jlink # Currently, using a STM32duino fork, until USB Host get merged # [env:mks_robin_nano_v3_usb_flash_drive] -platform = ${common_stm32.platform} extends = env:mks_robin_nano_v3 platform_packages = ${stm_flash_drive.platform_packages} build_flags = ${stm_flash_drive.build_flags} ${stm32f4_I2C1.build_flags} @@ -471,7 +434,6 @@ build_flags = ${stm_flash_drive.build_flags} ${stm32f4_I2C1.build_flags} # Currently, using a STM32duino fork, until USB Host and USB Device MSC get merged # [env:mks_robin_nano_v3_usb_flash_drive_msc] -platform = ${common_stm32.platform} extends = env:mks_robin_nano_v3_usb_flash_drive build_flags = ${env:mks_robin_nano_v3_usb_flash_drive.build_flags} -DUSBD_USE_CDC_MSC @@ -482,7 +444,6 @@ build_unflags = -DUSBD_USE_CDC # 5 TMC2209 uart mode on board # [env:mks_eagle] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_STM32F407VGT6_CCM board_build.variant = MARLIN_F4x7Vx @@ -500,7 +461,6 @@ upload_protocol = jlink # Currently, using a STM32duino fork, until USB Host get merged # [env:mks_eagle_usb_flash_drive] -platform = ${common_stm32.platform} extends = env:mks_eagle platform_packages = ${stm_flash_drive.platform_packages} build_flags = ${stm_flash_drive.build_flags} ${stm32f4_I2C1.build_flags} @@ -514,7 +474,6 @@ build_flags = ${stm_flash_drive.build_flags} ${stm32f4_I2C1.build_flags} # Currently, using a STM32duino fork, until USB Host and USB Device MSC get merged # [env:mks_eagle_usb_flash_drive_msc] -platform = ${common_stm32.platform} extends = env:mks_eagle_usb_flash_drive build_flags = ${env:mks_eagle_usb_flash_drive.build_flags} -DUSBD_USE_CDC_MSC @@ -530,7 +489,6 @@ build_flags = -DPIN_WIRE_SCL=PB8 -DPIN_WIRE_SDA=PB9 # MKS Monster8 # [env:mks_monster8] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_STM32F407VGT6_CCM board_build.variant = MARLIN_F4x7Vx @@ -548,7 +506,6 @@ upload_protocol = jlink # Currently, using a STM32duino fork, until USB Host get merged # [env:mks_monster8_usb_flash_drive] -platform = ${common_stm32.platform} extends = env:mks_monster8 platform_packages = ${stm_flash_drive.platform_packages} build_flags = ${stm_flash_drive.build_flags} ${stm32f4_I2C1_CAN.build_flags} @@ -562,7 +519,6 @@ build_flags = ${stm_flash_drive.build_flags} ${stm32f4_I2C1_CAN.build_flag # Currently, using a STM32duino fork, until USB Host and USB Device MSC get merged # [env:mks_monster8_usb_flash_drive_msc] -platform = ${common_stm32.platform} extends = env:mks_monster8_usb_flash_drive build_flags = ${env:mks_monster8_usb_flash_drive.build_flags} -DUSBD_USE_CDC_MSC @@ -572,7 +528,6 @@ build_unflags = -DUSBD_USE_CDC # TH3D EZBoard v2.0 (STM32F405RGT6 ARM Cortex-M4) # [env:TH3D_EZBoard_V2] -platform = ${common_stm32.platform} extends = stm32_variant board = genericSTM32F405RG board_build.variant = MARLIN_TH3D_EZBOARD_V2 @@ -588,7 +543,6 @@ upload_protocol = stlink # - MKS Robin Nano-S V1.3 (STM32F407VET6) 4 TMC2225 + 1 Pololu Plug # [env:mks_robin_nano_v1_3_f4] -platform = ${common_stm32.platform} extends = stm32_variant board = marlin_STM32F407VGT6_CCM board_build.variant = MARLIN_F4x7Vx @@ -610,7 +564,6 @@ upload_protocol = jlink # Artillery Ruby # [env:Artillery_Ruby] -platform = ${common_stm32.platform} extends = common_stm32 board = marlin_Artillery_Ruby build_flags = ${common_stm32.build_flags} diff --git a/ini/stm32f7.ini b/ini/stm32f7.ini index 200740589b..62755c846d 100644 --- a/ini/stm32f7.ini +++ b/ini/stm32f7.ini @@ -25,7 +25,6 @@ # being readily available based on STM32F7 MCUs # [env:NUCLEO_F767ZI] -platform = ${common_stm32.platform} extends = common_stm32 board = nucleo_f767zi build_flags = ${common_stm32.build_flags} -DTIMER_SERIAL=TIM9 @@ -34,6 +33,5 @@ build_flags = ${common_stm32.build_flags} -DTIMER_SERIAL=TIM9 # REMRAM_V1 # [env:REMRAM_V1] -platform = ${common_stm32.platform} extends = common_stm32 board = remram_v1 diff --git a/ini/stm32g0.ini b/ini/stm32g0.ini index 99f167a4df..171945ffe2 100644 --- a/ini/stm32g0.ini +++ b/ini/stm32g0.ini @@ -23,17 +23,17 @@ # BigTree SKR mini E3 V3.0 (STM32G0B1RET6 ARM Cortex-M0+) # [env:STM32G0B1RE_btt] -platform = ststm32@~14.1.0 -platform_packages = framework-arduinoststm32@https://github.com/stm32duino/Arduino_Core_STM32/archive/main.zip -extends = stm32_variant -board = marlin_STM32G0B1RE +extends = stm32_variant +platform = ststm32@~14.1.0 +platform_packages = framework-arduinoststm32@https://github.com/stm32duino/Arduino_Core_STM32/archive/main.zip +board = marlin_STM32G0B1RE board_build.offset = 0x2000 board_upload.offset_address = 0x08002000 -build_flags = ${stm32_variant.build_flags} - -DADC_RESOLUTION=12 - -DPIN_SERIAL4_RX=PC_11 -DPIN_SERIAL4_TX=PC_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 +build_flags = ${stm32_variant.build_flags} + -DADC_RESOLUTION=12 + -DPIN_SERIAL4_RX=PC_11 -DPIN_SERIAL4_TX=PC_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 diff --git a/ini/stm32h7.ini b/ini/stm32h7.ini index 16d1067e52..b0cb10866c 100644 --- a/ini/stm32h7.ini +++ b/ini/stm32h7.ini @@ -23,7 +23,6 @@ # BigTreeTech SKR SE BX (STM32H743IIT6 ARM Cortex-M7) # [env:BTT_SKR_SE_BX] -platform = ${common_stm32.platform} extends = stm32_variant platform_packages = framework-arduinoststm32@https://github.com/thisiskeithb/Arduino_Core_STM32/archive/biqu-bx-workaround.zip board = marlin_BTT_SKR_SE_BX diff --git a/ini/teensy.ini b/ini/teensy.ini index f3e5fd0260..ab0617b5b7 100644 --- a/ini/teensy.ini +++ b/ini/teensy.ini @@ -9,61 +9,72 @@ # # ################################# +# +# Teensy AVR +# +[teensy_avr] +platform = teensy +platform_packages = toolchain-atmelavr@~1.70300.0 +extends = common_avr8 +lib_ignore = ${env:common_avr8.lib_ignore}, NativeEthernet + # # AT90USB1286 boards using CDC bootloader # e.g., BRAINWAVE, BRAINWAVE_PRO, SAV_MKI, TEENSYLU # [env:at90usb1286_cdc] -platform = teensy -extends = common_avr8 +extends = teensy_avr board = marlin_at90usb1286 -lib_ignore = ${env:common_avr8.lib_ignore}, Teensy_ADC, NativeEthernet +lib_ignore = ${teensy_avr.lib_ignore}, Teensy_ADC # # AT90USB1286 boards using DFU bootloader # e.g., Printrboard, Printrboard Rev.F, 5DPRINT # [env:at90usb1286_dfu] -platform = teensy -extends = env:at90usb1286_cdc +extends = env:at90usb1286_cdc # # Teensy++ 2.0 # [env:teensy20] -platform = teensy -extends = common_avr8 -board = teensy2pp -lib_ignore = ${env:common_avr8.lib_ignore}, NativeEthernet +extends = teensy_avr +board = teensy2pp + +# +# Teensy 3.x - 4.x +# +[teensy_arm] +platform = teensy@~4.12.0 +src_filter = ${common.default_src_filter} +lib_ignore = NativeEthernet # # Teensy 3.1 / 3.2 (ARM Cortex-M4) # [env:teensy31] -platform = teensy@~4.12.0 -board = teensy31 -src_filter = ${common.default_src_filter} + -lib_ignore = NativeEthernet +extends = teensy_arm +board = teensy31 +src_filter = ${teensy_arm.src_filter} + # # Teensy 3.5 / 3.6 (ARM Cortex-M4) # [env:teensy35] -platform = teensy@~4.12.0 -board = teensy35 -src_filter = ${common.default_src_filter} + -lib_ignore = NativeEthernet +extends = teensy_arm +board = teensy35 +src_filter = ${teensy_arm.src_filter} + [env:teensy36] -platform = teensy@~4.12.0 -board = teensy36 -src_filter = ${common.default_src_filter} + -lib_ignore = NativeEthernet +extends = teensy_arm +board = teensy36 +src_filter = ${teensy_arm.src_filter} + # # Teensy 4.0 / 4.1 (ARM Cortex-M7) # [env:teensy41] -platform = teensy@~4.12.0 -board = teensy41 -src_filter = ${common.default_src_filter} + +extends = teensy_arm +board = teensy41 +src_filter = ${teensy_arm.src_filter} + +lib_ignore = From 90fc120182d97c27340632469335a64fcc782c16 Mon Sep 17 00:00:00 2001 From: hwmland <12407423+hwmland@users.noreply.github.com> Date: Mon, 3 Jan 2022 06:54:12 +0100 Subject: [PATCH 315/532] =?UTF-8?q?=F0=9F=A9=B9=20RAMPS=20FET=20order=20ov?= =?UTF-8?q?erridable,=20E=20+=20Laser=20(#23428)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/pins.h | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 1cb9462de4..0d24ee6696 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -37,24 +37,28 @@ #define MAX_E_STEPPERS 8 -#if MB(RAMPS_13_EFB, RAMPS_14_EFB, RAMPS_PLUS_EFB, RAMPS_14_RE_ARM_EFB, RAMPS_SMART_EFB, RAMPS_DUO_EFB, RAMPS4DUE_EFB) - #define FET_ORDER_EFB 1 -#elif MB(RAMPS_13_EEB, RAMPS_14_EEB, RAMPS_PLUS_EEB, RAMPS_14_RE_ARM_EEB, RAMPS_SMART_EEB, RAMPS_DUO_EEB, RAMPS4DUE_EEB) - #define FET_ORDER_EEB 1 -#elif MB(RAMPS_13_EFF, RAMPS_14_EFF, RAMPS_PLUS_EFF, RAMPS_14_RE_ARM_EFF, RAMPS_SMART_EFF, RAMPS_DUO_EFF, RAMPS4DUE_EFF) - #define FET_ORDER_EFF 1 -#elif MB(RAMPS_13_EEF, RAMPS_14_EEF, RAMPS_PLUS_EEF, RAMPS_14_RE_ARM_EEF, RAMPS_SMART_EEF, RAMPS_DUO_EEF, RAMPS4DUE_EEF) - #define FET_ORDER_EEF 1 -#elif MB(RAMPS_13_SF, RAMPS_14_SF, RAMPS_PLUS_SF, RAMPS_14_RE_ARM_SF, RAMPS_SMART_SF, RAMPS_DUO_SF, RAMPS4DUE_SF) - #define FET_ORDER_SF 1 -#elif HAS_MULTI_HOTEND && TEMP_SENSOR_BED - #define FET_ORDER_EEB 1 -#elif HAS_MULTI_HOTEND - #define FET_ORDER_EEF 1 -#elif TEMP_SENSOR_BED - #define FET_ORDER_EFB 1 -#else - #define FET_ORDER_EFF 1 +#if NONE(FET_ORDER_EEF, FET_ORDER_EEB, FET_ORDER_EFF, FET_ORDER_EFB, FET_ORDER_SF) + #if MB(RAMPS_13_EFB, RAMPS_14_EFB, RAMPS_PLUS_EFB, RAMPS_14_RE_ARM_EFB, RAMPS_SMART_EFB, RAMPS_DUO_EFB, RAMPS4DUE_EFB) + #define FET_ORDER_EFB 1 + #elif MB(RAMPS_13_EEB, RAMPS_14_EEB, RAMPS_PLUS_EEB, RAMPS_14_RE_ARM_EEB, RAMPS_SMART_EEB, RAMPS_DUO_EEB, RAMPS4DUE_EEB) + #define FET_ORDER_EEB 1 + #elif MB(RAMPS_13_EFF, RAMPS_14_EFF, RAMPS_PLUS_EFF, RAMPS_14_RE_ARM_EFF, RAMPS_SMART_EFF, RAMPS_DUO_EFF, RAMPS4DUE_EFF) + #define FET_ORDER_EFF 1 + #elif MB(RAMPS_13_EEF, RAMPS_14_EEF, RAMPS_PLUS_EEF, RAMPS_14_RE_ARM_EEF, RAMPS_SMART_EEF, RAMPS_DUO_EEF, RAMPS4DUE_EEF) + #define FET_ORDER_EEF 1 + #elif MB(RAMPS_13_SF, RAMPS_14_SF, RAMPS_PLUS_SF, RAMPS_14_RE_ARM_SF, RAMPS_SMART_SF, RAMPS_DUO_SF, RAMPS4DUE_SF) + #define FET_ORDER_SF 1 + #elif HAS_MULTI_HOTEND || (HAS_EXTRUDERS && HAS_CUTTER) + #if TEMP_SENSOR_BED + #define FET_ORDER_EEB 1 + #else + #define FET_ORDER_EEF 1 + #endif + #elif TEMP_SENSOR_BED + #define FET_ORDER_EFB 1 + #else + #define FET_ORDER_EFF 1 + #endif #endif #if !(BOTH(IS_ULTRA_LCD, IS_NEWPANEL) && ANY(PANEL_ONE, VIKI2, miniVIKI, WYH_L12864, MINIPANEL, REPRAPWORLD_KEYPAD)) From b8a376a28af8fd4d850f6a2080f5643593eec722 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 3 Jan 2022 09:18:10 -0600 Subject: [PATCH 316/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20RADDS+RRD=20encode?= =?UTF-8?q?r=20button?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/sam/pins_RADDS.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/pins/sam/pins_RADDS.h b/Marlin/src/pins/sam/pins_RADDS.h index 7a865b4ad8..da176f4447 100644 --- a/Marlin/src/pins/sam/pins_RADDS.h +++ b/Marlin/src/pins/sam/pins_RADDS.h @@ -286,7 +286,7 @@ #endif // SPARK_FULL_GRAPHICS #if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) - #define BTN_ENC_EN LCD_PINS_D7 // Detect the presence of the encoder + #define BTN_ENC_EN 47 // Detect the presence of the encoder #endif #endif // HAS_WIRED_LCD From 9a194826e3e424e404e95443976f1bdfb1d2b245 Mon Sep 17 00:00:00 2001 From: John Lagonikas <39417467+zeleps@users.noreply.github.com> Date: Mon, 3 Jan 2022 18:11:39 +0200 Subject: [PATCH 317/532] =?UTF-8?q?=E2=9C=A8=20M81=20D=20/=20S=20-=20Power?= =?UTF-8?q?-off=20Delay=20(#23396)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration.h | 11 +++-- Marlin/src/MarlinCore.cpp | 4 ++ Marlin/src/feature/power.cpp | 70 +++++++++++++++++++++------ Marlin/src/feature/power.h | 40 ++++++++++----- Marlin/src/gcode/control/M80_M81.cpp | 30 +++++++++--- Marlin/src/inc/SanityCheck.h | 2 + Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 4 +- Marlin/src/module/temperature.h | 7 ++- buildroot/tests/rambo | 4 +- 9 files changed, 130 insertions(+), 42 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 236c6a8a54..c66c8eff95 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -374,6 +374,9 @@ //#define PSU_DEFAULT_OFF // Keep power off until enabled directly with M80 //#define PSU_POWERUP_DELAY 250 // (ms) Delay for the PSU to warm up to full power + //#define POWER_OFF_TIMER // Enable M81 D to power off after a delay + //#define POWER_OFF_WAIT_FOR_COOLDOWN // Enable M81 S to power off only after cooldown + //#define PSU_POWERUP_GCODE "M355 S1" // G-code to run after power-on (e.g., case light on) //#define PSU_POWEROFF_GCODE "M355 S0" // G-code to run before power-off (e.g., case light off) @@ -384,12 +387,14 @@ #define AUTO_POWER_CONTROLLERFAN #define AUTO_POWER_CHAMBER_FAN #define AUTO_POWER_COOLER_FAN - //#define AUTO_POWER_E_TEMP 50 // (°C) Turn on PSU if any extruder is over this temperature - //#define AUTO_POWER_CHAMBER_TEMP 30 // (°C) Turn on PSU if the chamber is over this temperature - //#define AUTO_POWER_COOLER_TEMP 26 // (°C) Turn on PSU if the cooler is over this temperature #define POWER_TIMEOUT 30 // (s) Turn off power if the machine is idle for this duration //#define POWER_OFF_DELAY 60 // (s) Delay of poweroff after M81 command. Useful to let fans run for extra time. #endif + #if EITHER(AUTO_POWER_CONTROL, POWER_OFF_WAIT_FOR_COOLDOWN) + //#define AUTO_POWER_E_TEMP 50 // (°C) PSU on if any extruder is over this temperature + //#define AUTO_POWER_CHAMBER_TEMP 30 // (°C) PSU on if the chamber is over this temperature + //#define AUTO_POWER_COOLER_TEMP 26 // (°C) PSU on if the cooler is over this temperature + #endif #endif //=========================================================================== diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 16cd43443c..2c29030669 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -1652,6 +1652,10 @@ void loop() { queue.advance(); + #if EITHER(POWER_OFF_TIMER, POWER_OFF_WAIT_FOR_COOLDOWN) + powerManager.checkAutoPowerOff(); + #endif + endstops.event_handler(); TERN_(HAS_TFT_LVGL_UI, printer_state_polling()); diff --git a/Marlin/src/feature/power.cpp b/Marlin/src/feature/power.cpp index fabe35b989..480cb91a91 100644 --- a/Marlin/src/feature/power.cpp +++ b/Marlin/src/feature/power.cpp @@ -27,7 +27,9 @@ #include "../inc/MarlinConfig.h" #include "power.h" +#include "../module/planner.h" #include "../module/stepper.h" +#include "../module/temperature.h" #include "../MarlinCore.h" #if ENABLED(PS_OFF_SOUND) @@ -75,6 +77,10 @@ void Power::power_on() { if (psu_on) return; + #if EITHER(POWER_OFF_TIMER, POWER_OFF_WAIT_FOR_COOLDOWN) + cancelAutoPowerOff(); + #endif + OUT_WRITE(PS_ON_PIN, PSU_ACTIVE_STATE); psu_on = true; safe_delay(PSU_POWERUP_DELAY); @@ -89,7 +95,6 @@ void Power::power_on() { /** * Power off if the power is currently on. * Processes any PSU_POWEROFF_GCODE and makes a PS_OFF_SOUND if enabled. - * */ void Power::power_off() { if (!psu_on) return; @@ -104,8 +109,56 @@ void Power::power_off() { OUT_WRITE(PS_ON_PIN, !PSU_ACTIVE_STATE); psu_on = false; + + #if EITHER(POWER_OFF_TIMER, POWER_OFF_WAIT_FOR_COOLDOWN) + cancelAutoPowerOff(); + #endif } +#if EITHER(AUTO_POWER_CONTROL, POWER_OFF_WAIT_FOR_COOLDOWN) + + bool Power::is_cooling_needed() { + #if HAS_HOTEND && AUTO_POWER_E_TEMP + HOTEND_LOOP() if (thermalManager.degHotend(e) >= (AUTO_POWER_E_TEMP)) return true; + #endif + + #if HAS_HEATED_CHAMBER && AUTO_POWER_CHAMBER_TEMP + if (thermalManager.degChamber() >= (AUTO_POWER_CHAMBER_TEMP)) return true; + #endif + + #if HAS_COOLER && AUTO_POWER_COOLER_TEMP + if (thermalManager.degCooler() >= (AUTO_POWER_COOLER_TEMP)) return true; + #endif + + return false; + } + +#endif + +#if EITHER(POWER_OFF_TIMER, POWER_OFF_WAIT_FOR_COOLDOWN) + + #if ENABLED(POWER_OFF_TIMER) + millis_t Power::power_off_time = 0; + void Power::setPowerOffTimer(const millis_t delay_ms) { power_off_time = millis() + delay_ms; } + #endif + + #if ENABLED(POWER_OFF_WAIT_FOR_COOLDOWN) + bool Power::power_off_on_cooldown = false; + void Power::setPowerOffOnCooldown(const bool ena) { power_off_on_cooldown = ena; } + #endif + + void Power::cancelAutoPowerOff() { + TERN_(POWER_OFF_TIMER, power_off_time = 0); + TERN_(POWER_OFF_WAIT_FOR_COOLDOWN, power_off_on_cooldown = false); + } + + void Power::checkAutoPowerOff() { + if (TERN0(POWER_OFF_WAIT_FOR_COOLDOWN, power_off_on_cooldown && is_cooling_needed())) return; + if (TERN0(POWER_OFF_TIMER, power_off_time && PENDING(millis(), power_off_time))) return; + power_off(); + } + +#endif // POWER_OFF_TIMER || POWER_OFF_WAIT_FOR_COOLDOWN #if ENABLED(AUTO_POWER_CONTROL) @@ -149,19 +202,7 @@ void Power::power_off() { if (TERN0(HAS_HEATED_BED, thermalManager.degTargetBed() > 0 || thermalManager.temp_bed.soft_pwm_amount > 0)) return true; - #if HAS_HOTEND && AUTO_POWER_E_TEMP - HOTEND_LOOP() if (thermalManager.degHotend(e) >= (AUTO_POWER_E_TEMP)) return true; - #endif - - #if HAS_HEATED_CHAMBER && AUTO_POWER_CHAMBER_TEMP - if (thermalManager.degChamber() >= (AUTO_POWER_CHAMBER_TEMP)) return true; - #endif - - #if HAS_COOLER && AUTO_POWER_COOLER_TEMP - if (thermalManager.degCooler() >= (AUTO_POWER_COOLER_TEMP)) return true; - #endif - - return false; + return is_cooling_needed(); } /** @@ -193,7 +234,6 @@ void Power::power_off() { /** * Power off with a delay. Power off is triggered by check() after the delay. - * */ void Power::power_off_soon() { lastPowerOn = millis() - SEC_TO_MS(POWER_TIMEOUT) + SEC_TO_MS(POWER_OFF_DELAY); diff --git a/Marlin/src/feature/power.h b/Marlin/src/feature/power.h index 42c2c84942..38f7ed6ce7 100644 --- a/Marlin/src/feature/power.h +++ b/Marlin/src/feature/power.h @@ -36,21 +36,37 @@ class Power { static void init(); static void power_on(); static void power_off(); + + #if EITHER(POWER_OFF_TIMER, POWER_OFF_WAIT_FOR_COOLDOWN) + #if ENABLED(POWER_OFF_TIMER) + static millis_t power_off_time; + static void setPowerOffTimer(const millis_t delay_ms); + #endif + #if ENABLED(POWER_OFF_WAIT_FOR_COOLDOWN) + static bool power_off_on_cooldown; + static void setPowerOffOnCooldown(const bool ena); + #endif + static void cancelAutoPowerOff(); + static void checkAutoPowerOff(); + #endif - #if ENABLED(AUTO_POWER_CONTROL) && POWER_OFF_DELAY > 0 - static void power_off_soon(); - #else - static void power_off_soon() { power_off(); } - #endif + #if ENABLED(AUTO_POWER_CONTROL) && POWER_OFF_DELAY > 0 + static void power_off_soon(); + #else + static void power_off_soon() { power_off(); } + #endif - #if ENABLED(AUTO_POWER_CONTROL) - static void check(const bool pause); + #if ENABLED(AUTO_POWER_CONTROL) + static void check(const bool pause); - private: - static millis_t lastPowerOn; - static bool is_power_needed(); - - #endif + private: + static millis_t lastPowerOn; + static bool is_power_needed(); + static bool is_cooling_needed(); + #elif ENABLED(POWER_OFF_WAIT_FOR_COOLDOWN) + private: + static bool is_cooling_needed(); + #endif }; extern Power powerManager; diff --git a/Marlin/src/gcode/control/M80_M81.cpp b/Marlin/src/gcode/control/M80_M81.cpp index b8be9daa40..dc9b09c4e1 100644 --- a/Marlin/src/gcode/control/M80_M81.cpp +++ b/Marlin/src/gcode/control/M80_M81.cpp @@ -79,13 +79,31 @@ void GcodeSuite::M81() { print_job_timer.stop(); - #if HAS_FAN - #if ENABLED(PROBING_FANS_OFF) - thermalManager.fans_paused = false; - ZERO(thermalManager.saved_fan_speed); - #endif + #if BOTH(HAS_FAN, PROBING_FANS_OFF) + thermalManager.fans_paused = false; + ZERO(thermalManager.saved_fan_speed); #endif + LCD_MESSAGE_F(MACHINE_NAME " " STR_OFF "."); + + bool delayed_power_off = false; + + #if ENABLED(POWER_OFF_TIMER) + if (parser.seenval('D')) { + delayed_power_off = true; + powerManager.setPowerOffTimer(SEC_TO_MS(parser.value_ushort())); + } + #endif + + #if ENABLED(POWER_OFF_WAIT_FOR_COOLDOWN) + if (parser.boolval('S')) { + delayed_power_off = true; + powerManager.setPowerOffOnCooldown(true); + } + #endif + + if (delayed_power_off) return; + safe_delay(1000); // Wait 1 second before switching off #if HAS_SUICIDE @@ -93,6 +111,4 @@ void GcodeSuite::M81() { #elif ENABLED(PSU_CONTROL) powerManager.power_off_soon(); #endif - - LCD_MESSAGE_F(MACHINE_NAME " " STR_OFF "."); } diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index f884046a96..06e0dfbb42 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -3577,6 +3577,8 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #error "PSU_CONTROL requires PS_ON_PIN." #elif POWER_OFF_DELAY < 0 #error "POWER_OFF_DELAY must be a positive value." + #elif ENABLED(POWER_OFF_WAIT_FOR_COOLDOWN) && !(defined(AUTO_POWER_E_TEMP) || defined(AUTO_POWER_CHAMBER_TEMP) || defined(AUTO_POWER_COOLER_TEMP)) + #error "POWER_OFF_WAIT_FOR_COOLDOWN requires AUTO_POWER_E_TEMP, AUTO_POWER_CHAMBER_TEMP, and/or AUTO_POWER_COOLER_TEMP." #endif #endif diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index 4e730d04e7..3612fb6bd1 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -481,7 +481,7 @@ void Popup_window_PauseOrStop() { Draw_Select_Highlight(true); DWIN_UpdateLCD(); } - else + else DWIN_Popup_ConfirmCancel(ICON_BLTouch, select_print.now == PRINT_PAUSE_RESUME ? GET_TEXT_F(MSG_PAUSE_PRINT) : GET_TEXT_F(MSG_STOP_PRINT)); } @@ -2015,7 +2015,7 @@ void HMI_LockScreen() { #endif //============================================================================= -// NEW MENU SUBSYSTEM +// NEW MENU SUBSYSTEM //============================================================================= // On click functions diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index e3515f0db8..089694ab4a 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -993,7 +993,12 @@ class Temperature { static int16_t read_max_tc(TERN_(HAS_MULTI_MAX_TC, const uint8_t hindex=0)); #endif - static void update_autofans(); + #if HAS_AUTO_FAN + #if ENABLED(POWER_OFF_WAIT_FOR_COOLDOWN) + static bool autofans_on; + #endif + static void update_autofans(); + #endif #if HAS_HOTEND static float get_pid_output_hotend(const uint8_t e); diff --git a/buildroot/tests/rambo b/buildroot/tests/rambo index a54c04eeb2..92e8bc2b5f 100755 --- a/buildroot/tests/rambo +++ b/buildroot/tests/rambo @@ -14,7 +14,7 @@ opt_set MOTHERBOARD BOARD_RAMBO \ EXTRUDERS 2 TEMP_SENSOR_0 -2 TEMP_SENSOR_1 1 TEMP_SENSOR_BED 2 \ TEMP_SENSOR_PROBE 1 TEMP_PROBE_PIN 12 \ TEMP_SENSOR_CHAMBER 3 TEMP_CHAMBER_PIN 3 HEATER_CHAMBER_PIN 45 \ - GRID_MAX_POINTS_X 16 \ + GRID_MAX_POINTS_X 16 AUTO_POWER_E_TEMP 80 \ FANMUX0_PIN 53 opt_disable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN USE_WATCHDOG opt_enable USE_ZMAX_PLUG REPRAP_DISCOUNT_SMART_CONTROLLER LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TEST \ @@ -32,7 +32,7 @@ opt_enable USE_ZMAX_PLUG REPRAP_DISCOUNT_SMART_CONTROLLER LCD_PROGRESS_BAR LCD_P SKEW_CORRECTION SKEW_CORRECTION_FOR_Z SKEW_CORRECTION_GCODE \ BACKLASH_COMPENSATION BACKLASH_GCODE BAUD_RATE_GCODE BEZIER_CURVE_SUPPORT \ FWRETRACT ARC_P_CIRCLES CNC_WORKSPACE_PLANES CNC_COORDINATE_SYSTEMS \ - PSU_CONTROL PS_OFF_CONFIRM PS_OFF_SOUND AUTO_POWER_CONTROL \ + PSU_CONTROL PS_OFF_CONFIRM PS_OFF_SOUND POWER_OFF_WAIT_FOR_COOLDOWN \ POWER_LOSS_RECOVERY POWER_LOSS_PIN POWER_LOSS_STATE POWER_LOSS_RECOVER_ZHOME POWER_LOSS_ZHOME_POS \ SLOW_PWM_HEATERS THERMAL_PROTECTION_CHAMBER LIN_ADVANCE EXTRA_LIN_ADVANCE_K \ HOST_ACTION_COMMANDS HOST_PROMPT_SUPPORT PINS_DEBUGGING MAX7219_DEBUG M114_DETAIL From e1ab7f3b751103296a0e8601b22b1ce22a90112b Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 4 Jan 2022 01:07:15 +0000 Subject: [PATCH 318/532] [cron] Bump distribution date (2022-01-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 1279caef59..ce9d3387ed 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 "2022-01-03" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 d01fd0f543..6a7295463a 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 "2022-01-03" + #define STRING_DISTRIBUTION_DATE "2022-01-04" #endif /** From e379a46639b76d551ae99a55d288b944d2e22031 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 5 Jan 2022 01:09:13 +0000 Subject: [PATCH 319/532] [cron] Bump distribution date (2022-01-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 ce9d3387ed..78afe004fc 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 "2022-01-04" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 6a7295463a..65ce6f7ff3 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 "2022-01-04" + #define STRING_DISTRIBUTION_DATE "2022-01-05" #endif /** From cc919ae8999635dc45e3852f1d2a07fd15784d48 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 5 Jan 2022 01:52:02 -0600 Subject: [PATCH 320/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20strlen=5FP=20param?= =?UTF-8?q?eter=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #23447 --- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index 3612fb6bd1..5b5ae7d228 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -295,7 +295,7 @@ void ICON_Button(const bool selected, const int iconid, const frame_rect_t &ico, DWIN_Frame_AreaCopy(1, txt.x, txt.y[selected], txt.x + txt.w - 1, txt.y[selected] + txt.h - 1, ico.x + (ico.w - txt.w) / 2, (ico.y + ico.h - 28) - txt.h/2); } else { - const uint16_t x = ico.x + (ico.w - strlen_P(caption)*DWINUI::fontWidth()) / 2, + const uint16_t x = ico.x + (ico.w - strlen_P(FTOP(caption)) * DWINUI::fontWidth()) / 2, y = (ico.y + ico.h - 28) - DWINUI::fontHeight() / 2; DWINUI::Draw_String(x, y, caption); } From c55b66becea10c795ad271681a365925e0d62628 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 5 Jan 2022 01:48:18 -0600 Subject: [PATCH 321/532] =?UTF-8?q?=F0=9F=94=A8=20Strip=20CR=20in=20mftest?= =?UTF-8?q?=20>=20awk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/bin/mftest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildroot/bin/mftest b/buildroot/bin/mftest index 9a58ba9cfc..77e53ff9ac 100755 --- a/buildroot/bin/mftest +++ b/buildroot/bin/mftest @@ -150,7 +150,7 @@ if ((AUTO_BUILD)); then *) SYS='uni' ;; esac echo ; echo -n "Auto " ; ((AUTO_BUILD == 2)) && echo "Upload..." || echo "Build..." - MB=$( grep -E "^\s*#define MOTHERBOARD" Marlin/Configuration.h | awk '{ print $3 }' | $SED 's/BOARD_//' ) + MB=$( grep -E "^\s*#define MOTHERBOARD" Marlin/Configuration.h | awk '{ print $3 }' | $SED 's/BOARD_//;s/\r//' ) [[ -z $MB ]] && { echo "Error - Can't read MOTHERBOARD setting." ; exit 1 ; } BLINE=$( grep -E "define\s+BOARD_$MB\b" Marlin/src/core/boards.h ) BNUM=$( $SED -E 's/^.+BOARD_[^ ]+ +([0-9]+).+$/\1/' <<<"$BLINE" ) From 1fe07bf3652c67c2266b2d70c4562c1b94244f02 Mon Sep 17 00:00:00 2001 From: John Lagonikas <39417467+zeleps@users.noreply.github.com> Date: Wed, 5 Jan 2022 13:57:32 +0200 Subject: [PATCH 322/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20M80,=201s=20delay?= =?UTF-8?q?=20(#23455)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/power.cpp | 1 + Marlin/src/gcode/control/M80_M81.cpp | 11 +++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Marlin/src/feature/power.cpp b/Marlin/src/feature/power.cpp index 480cb91a91..0e4d5452e4 100644 --- a/Marlin/src/feature/power.cpp +++ b/Marlin/src/feature/power.cpp @@ -153,6 +153,7 @@ void Power::power_off() { } void Power::checkAutoPowerOff() { + if (TERN1(POWER_OFF_TIMER, !power_off_time) && TERN1(POWER_OFF_WAIT_FOR_COOLDOWN, !power_off_on_cooldown)) return; if (TERN0(POWER_OFF_WAIT_FOR_COOLDOWN, power_off_on_cooldown && is_cooling_needed())) return; if (TERN0(POWER_OFF_TIMER, power_off_time && PENDING(millis(), power_off_time))) return; power_off(); diff --git a/Marlin/src/gcode/control/M80_M81.cpp b/Marlin/src/gcode/control/M80_M81.cpp index dc9b09c4e1..cbb3c85f40 100644 --- a/Marlin/src/gcode/control/M80_M81.cpp +++ b/Marlin/src/gcode/control/M80_M81.cpp @@ -84,14 +84,19 @@ void GcodeSuite::M81() { ZERO(thermalManager.saved_fan_speed); #endif + safe_delay(1000); // Wait 1 second before switching off + LCD_MESSAGE_F(MACHINE_NAME " " STR_OFF "."); bool delayed_power_off = false; #if ENABLED(POWER_OFF_TIMER) if (parser.seenval('D')) { - delayed_power_off = true; - powerManager.setPowerOffTimer(SEC_TO_MS(parser.value_ushort())); + uint16_t delay = parser.value_ushort(); + if (delay > 1) { // skip already observed 1s delay + delayed_power_off = true; + powerManager.setPowerOffTimer(SEC_TO_MS(delay - 1)); + } } #endif @@ -104,8 +109,6 @@ void GcodeSuite::M81() { if (delayed_power_off) return; - safe_delay(1000); // Wait 1 second before switching off - #if HAS_SUICIDE suicide(); #elif ENABLED(PSU_CONTROL) From 4ceba981b1557ce72b1789cec983e098bb0bc9bf Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Wed, 5 Jan 2022 06:14:40 -0600 Subject: [PATCH 323/532] =?UTF-8?q?=F0=9F=90=9B=20Define=20required=20ends?= =?UTF-8?q?top=20enums=20(#23425)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/endstops.h | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/Marlin/src/module/endstops.h b/Marlin/src/module/endstops.h index e1ee933e83..82a44cf95b 100644 --- a/Marlin/src/module/endstops.h +++ b/Marlin/src/module/endstops.h @@ -47,16 +47,26 @@ enum EndstopEnum : char { _ES_ITEM(HAS_K_MAX, K_MAX) // Extra Endstops for XYZ - _ES_ITEM(HAS_X2_MIN, X2_MIN) - _ES_ITEM(HAS_X2_MAX, X2_MAX) - _ES_ITEM(HAS_Y2_MIN, Y2_MIN) - _ES_ITEM(HAS_Y2_MAX, Y2_MAX) - _ES_ITEM(HAS_Z2_MIN, Z2_MIN) - _ES_ITEM(HAS_Z2_MAX, Z2_MAX) - _ES_ITEM(HAS_Z3_MIN, Z3_MIN) - _ES_ITEM(HAS_Z3_MAX, Z3_MAX) - _ES_ITEM(HAS_Z4_MIN, Z4_MIN) - _ES_ITEM(HAS_Z4_MAX, Z4_MAX) + #if ENABLED(X_DUAL_ENDSTOPS) + _ES_ITEM(HAS_X_MIN, X2_MIN) + _ES_ITEM(HAS_X_MAX, X2_MAX) + #endif + #if ENABLED(Y_DUAL_ENDSTOPS) + _ES_ITEM(HAS_Y_MIN, Y2_MIN) + _ES_ITEM(HAS_Y_MAX, Y2_MAX) + #endif + #if ENABLED(Z_MULTI_ENDSTOPS) + _ES_ITEM(HAS_Z_MIN, Z2_MIN) + _ES_ITEM(HAS_Z_MAX, Z2_MAX) + #if NUM_Z_STEPPER_DRIVERS >= 3 + _ES_ITEM(HAS_Z_MIN, Z3_MIN) + _ES_ITEM(HAS_Z_MAX, Z3_MAX) + #endif + #if NUM_Z_STEPPER_DRIVERS >= 4 + _ES_ITEM(HAS_Z_MIN, Z4_MIN) + _ES_ITEM(HAS_Z_MAX, Z4_MAX) + #endif + #endif // Bed Probe state is distinct or shared with Z_MIN (i.e., when the probe is the only Z endstop) #if !HAS_DELTA_SENSORLESS_PROBING From 9140016e0264b731b074e6d04f286f1e8c23a29e Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 5 Jan 2022 11:44:22 -0600 Subject: [PATCH 324/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20X2=5FHOME=5FTO=5F*?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Conditionals_LCD.h | 5 ----- Marlin/src/inc/Conditionals_adv.h | 6 ++++++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index 53c1bb302a..d49a917842 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -935,11 +935,6 @@ #elif X_HOME_DIR < 0 #define X_HOME_TO_MIN 1 #endif -#if X2_HOME_DIR > 0 - #define X2_HOME_TO_MAX 1 -#elif X2_HOME_DIR < 0 - #define X2_HOME_TO_MIN 1 -#endif #if Y_HOME_DIR > 0 #define Y_HOME_TO_MAX 1 #elif Y_HOME_DIR < 0 diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index 2db80f9955..8c6e79f36a 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -823,6 +823,12 @@ #define POLL_JOG #endif +#if X2_HOME_DIR > 0 + #define X2_HOME_TO_MAX 1 +#elif X2_HOME_DIR < 0 + #define X2_HOME_TO_MIN 1 +#endif + #ifndef HOMING_BUMP_MM #define HOMING_BUMP_MM { 0, 0, 0 } #endif From 15936d32f5acb19d0a625e8974e53d77ebf487a8 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 6 Jan 2022 01:13:30 +0000 Subject: [PATCH 325/532] [cron] Bump distribution date (2022-01-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 78afe004fc..c356855a5a 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 "2022-01-05" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 65ce6f7ff3..845210871a 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 "2022-01-05" + #define STRING_DISTRIBUTION_DATE "2022-01-06" #endif /** From 8e490e84be80ef9eb4e1f9de08939e1126c1c23d Mon Sep 17 00:00:00 2001 From: Kyle Hu Date: Thu, 6 Jan 2022 15:54:04 +0800 Subject: [PATCH 326/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Artillery=20Ruby?= =?UTF-8?q?=20(startup=20code,=20build=20flags)=20(#23446)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - .../variants/MARLIN_ARTILLERY_RUBY/startup.S | 124 ++++++++++++++++++ ini/stm32f4.ini | 1 + 3 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/startup.S diff --git a/.gitignore b/.gitignore index 191dd65ed9..0b852d7673 100755 --- a/.gitignore +++ b/.gitignore @@ -41,7 +41,6 @@ applet/ *.rej *.bak *.idea -*.s *.i *.ii *.swp diff --git a/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/startup.S b/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/startup.S new file mode 100644 index 0000000000..81999dda6a --- /dev/null +++ b/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/startup.S @@ -0,0 +1,124 @@ + /** + ****************************************************************************** + * @file startup_stm32f401xc.s + * @author MCD Application Team + * @version V2.4.2 + * @date 13-November-2015 + * @brief STM32F401xCxx Devices vector table for GCC based toolchains. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M4 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2015 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + + .syntax unified + .cpu cortex-m4 + .fpu softvfp + .thumb + +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None + */ + + .section .text.Reset_Handler + .globl Reset_Handler + .type Reset_Handler, %function +Reset_Handler: +/* Check for magic code at the end of SRAM to detemine whether to jump to DFU */ + ldr r0, =0x2000FFF0 // End of SRAM for your CPU + ldr r1, =0xDEADBEEF + ldr r2, [r0, #0] + str r0, [r0, #0] // Invalidate + cmp r2, r1 + beq Jump_To_DFU + +/* Original Reset_Handler code */ + ldr sp, =_estack /* set stack pointer */ + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + bx lr + +Jump_To_DFU: + ldr r0, =0x40023844 // RCC_APB2ENR + ldr r1, =0x00004000 // ENABLE SYSCFG CLOCK + str r1, [r0, #0] + ldr r0, =0x40013800 // SYSCFG_MEMRMP + ldr r1, =0x00000001 // MAP ROM AT ZERO + str r1, [r0, #0] + ldr r0, =0x1FFF0000 // ROM BASE + ldr sp, [r0, #0] // SP @ +0 + ldr r0, [r0, #4] // PC @ +4 + bx r0 +.size Reset_Handler, .-Reset_Handler + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index 1c3d9a8892..f721f3075d 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -570,5 +570,6 @@ build_flags = ${common_stm32.build_flags} -DSTM32F401xC -DTARGET_STM32F4 -DDISABLE_GENERIC_SERIALUSB -DARDUINO_ARCH_STM32 -DUSBD_USE_CDC_COMPOSITE -DUSE_USB_FS -DUSB_PRODUCT=\"Artillery_3D_Printer\" + -DFLASH_DATA_SECTOR=1U -DFLASH_BASE_ADDRESS=0x08004000 extra_scripts = ${common_stm32.extra_scripts} pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py From 1bd921d6a69412686fa4b31c4c1e5710de9840cf Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 6 Jan 2022 05:07:47 -0600 Subject: [PATCH 327/532] =?UTF-8?q?=F0=9F=8E=A8=20Misc.=20cleanup,=20comme?= =?UTF-8?q?nts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration.h | 2 +- Marlin/src/feature/easythreed_ui.cpp | 10 +++--- Marlin/src/feature/power.h | 2 +- Marlin/src/gcode/bedlevel/abl/G29.cpp | 6 ++++ Marlin/src/lcd/e3v2/creality/dwin.cpp | 5 ++- Marlin/src/lcd/touch/touch_buttons.cpp | 2 +- Marlin/src/module/endstops.cpp | 15 +++++---- Marlin/src/module/stepper.cpp | 10 ++---- Marlin/src/sd/cardreader.cpp | 43 +++++++++----------------- Marlin/src/sd/cardreader.h | 3 +- 10 files changed, 45 insertions(+), 53 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index c66c8eff95..a0dae83593 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -390,7 +390,7 @@ #define POWER_TIMEOUT 30 // (s) Turn off power if the machine is idle for this duration //#define POWER_OFF_DELAY 60 // (s) Delay of poweroff after M81 command. Useful to let fans run for extra time. #endif - #if EITHER(AUTO_POWER_CONTROL, POWER_OFF_WAIT_FOR_COOLDOWN) + #if EITHER(AUTO_POWER_CONTROL, POWER_OFF_WAIT_FOR_COOLDOWN) //#define AUTO_POWER_E_TEMP 50 // (°C) PSU on if any extruder is over this temperature //#define AUTO_POWER_CHAMBER_TEMP 30 // (°C) PSU on if the chamber is over this temperature //#define AUTO_POWER_COOLER_TEMP 26 // (°C) PSU on if the cooler is over this temperature diff --git a/Marlin/src/feature/easythreed_ui.cpp b/Marlin/src/feature/easythreed_ui.cpp index 9f8af03947..b15daffc09 100644 --- a/Marlin/src/feature/easythreed_ui.cpp +++ b/Marlin/src/feature/easythreed_ui.cpp @@ -194,11 +194,11 @@ void EasythreedUI::printButton() { print_key_flag = PF_START; return; // Bail out } - card.ls(); // List all files to serial output - const uint16_t filecnt = card.countFilesInWorkDir(); // Count printable files in cwd - if (filecnt == 0) return; // None are printable? - card.selectFileByIndex(filecnt); // Select the last file according to current sort options - card.openAndPrintFile(card.filename); // Start printing it + card.ls(); // List all files to serial output + const uint16_t filecnt = card.countFilesInWorkDir(); // Count printable files in cwd + if (filecnt == 0) return; // None are printable? + card.selectFileByIndex(filecnt); // Select the last file according to current sort options + card.openAndPrintFile(card.filename); // Start printing it break; } case PF_PAUSE: { // Pause printing (not currently firing) diff --git a/Marlin/src/feature/power.h b/Marlin/src/feature/power.h index 38f7ed6ce7..9ecd832afc 100644 --- a/Marlin/src/feature/power.h +++ b/Marlin/src/feature/power.h @@ -36,7 +36,7 @@ class Power { static void init(); static void power_on(); static void power_off(); - + #if EITHER(POWER_OFF_TIMER, POWER_OFF_WAIT_FOR_COOLDOWN) #if ENABLED(POWER_OFF_TIMER) static millis_t power_off_time; diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 6765ec86a6..eea5d4a7f2 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -290,6 +290,9 @@ G29_TYPE GcodeSuite::G29() { ry = RAW_Y_POSITION(parser.linearval('Y', NAN)); int8_t i = parser.byteval('I', -1), j = parser.byteval('J', -1); + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" + if (!isnan(rx) && !isnan(ry)) { // Get nearest i / j from rx / ry i = (rx - bilinear_start.x + 0.5 * abl.gridSpacing.x) / abl.gridSpacing.x; @@ -297,6 +300,9 @@ G29_TYPE GcodeSuite::G29() { LIMIT(i, 0, (GRID_MAX_POINTS_X) - 1); LIMIT(j, 0, (GRID_MAX_POINTS_Y) - 1); } + + #pragma GCC diagnostic pop + if (WITHIN(i, 0, (GRID_MAX_POINTS_X) - 1) && WITHIN(j, 0, (GRID_MAX_POINTS_Y) - 1)) { set_bed_leveling_enabled(false); z_values[i][j] = rz; diff --git a/Marlin/src/lcd/e3v2/creality/dwin.cpp b/Marlin/src/lcd/e3v2/creality/dwin.cpp index adf8f3771f..3eed9650c1 100644 --- a/Marlin/src/lcd/e3v2/creality/dwin.cpp +++ b/Marlin/src/lcd/e3v2/creality/dwin.cpp @@ -2760,7 +2760,10 @@ void HMI_Prepare() { #endif #if HAS_HOTEND || HAS_HEATED_BED - case PREPARE_CASE_COOL: thermalManager.cooldown(); break; + case PREPARE_CASE_COOL: + thermalManager.cooldown(); + ui.reset_status(); + break; #endif case PREPARE_CASE_LANG: diff --git a/Marlin/src/lcd/touch/touch_buttons.cpp b/Marlin/src/lcd/touch/touch_buttons.cpp index c15bb08281..dcdc7def86 100644 --- a/Marlin/src/lcd/touch/touch_buttons.cpp +++ b/Marlin/src/lcd/touch/touch_buttons.cpp @@ -79,7 +79,7 @@ uint8_t TouchButtons::read_buttons() { #if ENABLED(TOUCH_SCREEN_CALIBRATION) const calibrationState state = touch_calibration.get_calibration_state(); - if (state >= CALIBRATION_TOP_LEFT && state <= CALIBRATION_BOTTOM_RIGHT) { + if (WITHIN(state, CALIBRATION_TOP_LEFT, CALIBRATION_BOTTOM_RIGHT)) { if (touch_calibration.handleTouch(x, y)) ui.refresh(); return 0; } diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index 50ee33b3c0..b9c5aebf39 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -593,9 +593,6 @@ void _O2 Endstops::report_states() { } // Endstops::report_states -// The following routines are called from an ISR context. It could be the temperature ISR, the -// endstop ISR or the Stepper ISR. - #if HAS_DELTA_SENSORLESS_PROBING #define __ENDSTOP(AXIS, ...) AXIS ##_MAX #define _ENDSTOP_PIN(AXIS, ...) AXIS ##_MAX_PIN @@ -607,13 +604,18 @@ void _O2 Endstops::report_states() { #endif #define _ENDSTOP(AXIS, MINMAX) __ENDSTOP(AXIS, MINMAX) -// Check endstops - Could be called from Temperature ISR! +/** + * Called from interrupt context by the Endstop ISR or Stepper ISR! + * Read endstops to get their current states, register hits for all + * axes moving in the direction of their endstops, and abort moves. + */ void Endstops::update() { - #if !ENDSTOP_NOISE_THRESHOLD - if (!abort_enabled()) return; + #if !ENDSTOP_NOISE_THRESHOLD // If not debouncing... + if (!abort_enabled()) return; // ...and not enabled, exit. #endif + // Macros to update / copy the live_state #define UPDATE_ENDSTOP_BIT(AXIS, MINMAX) SET_BIT_TO(live_state, _ENDSTOP(AXIS, MINMAX), (READ(_ENDSTOP_PIN(AXIS, MINMAX)) != _ENDSTOP_INVERTING(AXIS, MINMAX))) #define COPY_LIVE_STATE(SRC_BIT, DST_BIT) SET_BIT_TO(live_state, DST_BIT, TEST(live_state, SRC_BIT)) @@ -1107,6 +1109,7 @@ void Endstops::update() { #if ENABLED(SPI_ENDSTOPS) + // Called from idle() to read Trinamic stall states bool Endstops::tmc_spi_homing_check() { bool hit = false; #if X_SPI_SENSORLESS diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index b61f36bbb4..9a1c8278ba 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -2346,13 +2346,9 @@ uint32_t Stepper::block_phase_isr() { #endif #endif // LASER_POWER_INLINE - // At this point, we must ensure the movement about to execute isn't - // trying to force the head against a limit switch. If using interrupt- - // driven change detection, and already against a limit then no call to - // the endstop_triggered method will be done and the movement will be - // done against the endstop. So, check the limits here: If the movement - // is against the limits, the block will be marked as to be killed, and - // on the next call to this ISR, will be discarded. + // If the endstop is already pressed, endstop interrupts won't invoke + // endstop_triggered and the move will grind. So check here for a + // triggered endstop, which marks the block for discard on the next ISR. endstops.update(); #if ENABLED(Z_LATE_ENABLE) diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index da6e84c759..66c08b6455 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -271,9 +271,8 @@ void CardReader::selectByName(SdFile dir, const char * const match) { * good addition. */ void CardReader::printListing( - SdFile parent + SdFile parent, const char * const prepend OPTARG(LONG_FILENAME_HOST_SUPPORT, const bool includeLongNames/*=false*/) - , const char * const prepend/*=nullptr*/ OPTARG(LONG_FILENAME_HOST_SUPPORT, const char * const prependLong/*=nullptr*/) ) { dir_t p; @@ -283,61 +282,47 @@ void CardReader::printListing( size_t lenPrepend = prepend ? strlen(prepend) + 1 : 0; // Allocate enough stack space for the full path including / separator char path[lenPrepend + FILENAME_LENGTH]; - if (prepend) { - strcpy(path, prepend); - path[lenPrepend - 1] = '/'; - } + if (prepend) { strcpy(path, prepend); path[lenPrepend - 1] = '/'; } char* dosFilename = path + lenPrepend; createFilename(dosFilename, p); // Get a new directory object using the full path // and dive recursively into it. SdFile child; // child.close() in destructor - if (child.open(&parent, dosFilename, O_READ)) + if (child.open(&parent, dosFilename, O_READ)) { #if ENABLED(LONG_FILENAME_HOST_SUPPORT) if (includeLongNames) { size_t lenPrependLong = prependLong ? strlen(prependLong) + 1 : 0; // Allocate enough stack space for the full long path including / separator char pathLong[lenPrependLong + strlen(longFilename) + 1]; - if (prependLong) { - strcpy(pathLong, prependLong); - pathLong[lenPrependLong - 1] = '/'; - } + if (prependLong) { strcpy(pathLong, prependLong); pathLong[lenPrependLong - 1] = '/'; } strcpy(pathLong + lenPrependLong, longFilename); - printListing(child, true, path, pathLong); + printListing(child, path, true, pathLong); } else - printListing(child, false, path); + printListing(child, path); #else printListing(child, path); #endif + } else { SERIAL_ECHO_MSG(STR_SD_CANT_OPEN_SUBDIR, dosFilename); return; } } else if (is_dir_or_gcode(p)) { - if (prepend) { - SERIAL_ECHO(prepend); - SERIAL_CHAR('/'); - } + if (prepend) { SERIAL_ECHO(prepend); SERIAL_CHAR('/'); } SERIAL_ECHO(createFilename(filename, p)); SERIAL_CHAR(' '); + SERIAL_ECHO(p.fileSize); #if ENABLED(LONG_FILENAME_HOST_SUPPORT) - if (!includeLongNames) - #endif - SERIAL_ECHOLN(p.fileSize); - #if ENABLED(LONG_FILENAME_HOST_SUPPORT) - else { - SERIAL_ECHO(p.fileSize); + if (includeLongNames) { SERIAL_CHAR(' '); - if (prependLong) { - SERIAL_ECHO(prependLong); - SERIAL_CHAR('/'); - } - SERIAL_ECHOLN(longFilename[0] ? longFilename : "???"); + if (prependLong) { SERIAL_ECHO(prependLong); SERIAL_CHAR('/'); } + SERIAL_ECHO(longFilename[0] ? longFilename : "???"); } #endif + SERIAL_EOL(); } } } @@ -348,7 +333,7 @@ void CardReader::printListing( void CardReader::ls(TERN_(LONG_FILENAME_HOST_SUPPORT, bool includeLongNames/*=false*/)) { if (flag.mounted) { root.rewind(); - printListing(root OPTARG(LONG_FILENAME_HOST_SUPPORT, includeLongNames)); + printListing(root, nullptr OPTARG(LONG_FILENAME_HOST_SUPPORT, includeLongNames)); } } diff --git a/Marlin/src/sd/cardreader.h b/Marlin/src/sd/cardreader.h index 97e9bba867..8761f57de5 100644 --- a/Marlin/src/sd/cardreader.h +++ b/Marlin/src/sd/cardreader.h @@ -336,9 +336,8 @@ private: static void selectByIndex(SdFile dir, const uint8_t index); static void selectByName(SdFile dir, const char * const match); static void printListing( - SdFile parent + SdFile parent, const char * const prepend OPTARG(LONG_FILENAME_HOST_SUPPORT, const bool includeLongNames=false) - , const char * const prepend=nullptr OPTARG(LONG_FILENAME_HOST_SUPPORT, const char * const prependLong=nullptr) ); From e99d95b7707f04bc28513322dad88eeb0d45778e Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Thu, 6 Jan 2022 06:26:12 -0500 Subject: [PATCH 328/532] =?UTF-8?q?=F0=9F=93=BA=20Tune=20ULTI=5FCONTROLLER?= =?UTF-8?q?=20encoder,=20enable=20PCA9632=20(#23461)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Conditionals_LCD.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index d49a917842..4386964744 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -207,8 +207,11 @@ #define IS_ULTIPANEL 1 #define U8GLIB_SSD1309 #define LCD_RESET_PIN LCD_PINS_D6 // This controller need a reset pin - #define ENCODER_PULSES_PER_STEP 2 - #define ENCODER_STEPS_PER_MENU_ITEM 2 + #define ENCODER_PULSES_PER_STEP 4 + #define ENCODER_STEPS_PER_MENU_ITEM 1 + #ifndef PCA9632 + #define PCA9632 + #endif #elif ENABLED(MAKEBOARD_MINI_2_LINE_DISPLAY_1602) From 4d28c9d12bbed7c742f94f7367348e3c4d36dcc2 Mon Sep 17 00:00:00 2001 From: Lefteris Garyfalakis <46350667+lefterisgar@users.noreply.github.com> Date: Thu, 6 Jan 2022 13:30:41 +0200 Subject: [PATCH 329/532] =?UTF-8?q?=F0=9F=8C=90=20Localize=20E3V2=20Enhanc?= =?UTF-8?q?ed=20UI=20(#23424)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 50 ++++++++++----------- Marlin/src/lcd/e3v2/enhanced/printstats.cpp | 10 ++--- Marlin/src/lcd/language/language_en.h | 25 ++++++++++- 3 files changed, 53 insertions(+), 32 deletions(-) diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index 5b5ae7d228..294d09956a 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -499,7 +499,7 @@ void Popup_window_PauseOrStop() { DWIN_UpdateLCD(); } else - DWIN_Popup_Confirm(ICON_TempTooLow, F("Nozzle is too cold"), F("Preheat the hotend")); + DWIN_Popup_Confirm(ICON_TempTooLow, GET_TEXT_F(MSG_HOTEND_TOO_COLD), GET_TEXT_F(MSG_PLEASE_PREHEAT)); } #endif @@ -613,8 +613,8 @@ void Draw_Print_Labels() { DWIN_Frame_AreaCopy(1, 65, 72, 128, 86, 176, 173); // Remain } else { - DWINUI::Draw_String( 46, 173, F("Print Time")); - DWINUI::Draw_String(181, 173, F("Remain")); + DWINUI::Draw_String( 46, 173, GET_TEXT_F(MSG_INFO_PRINT_TIME)); + DWINUI::Draw_String(181, 173, GET_TEXT_F(MSG_REMAINING_TIME)); } } @@ -984,7 +984,7 @@ void Redraw_SD_List() { } else { DWIN_Draw_Rectangle(1, HMI_data.AlertBg_Color, 10, MBASE(3) - 10, DWIN_WIDTH - 10, MBASE(4)); - DWINUI::Draw_CenteredString(font16x32, HMI_data.AlertTxt_Color, MBASE(3), F("No Media")); + DWINUI::Draw_CenteredString(font16x32, HMI_data.AlertTxt_Color, MBASE(3), GET_TEXT_F(MSG_MEDIA_NOT_INSERTED)); } } @@ -1404,7 +1404,7 @@ void HMI_PauseOrStop() { #ifdef ACTION_ON_CANCEL hostui.cancel(); #endif - DWIN_Draw_Popup(ICON_BLTouch, F("Stopping..."), F("Please wait until done.")); + DWIN_Draw_Popup(ICON_BLTouch, GET_TEXT_F(MSG_STOPPING), GET_TEXT_F(MSG_PLEASE_WAIT)); } else Goto_PrintProcess(); // cancel stop @@ -1619,7 +1619,7 @@ void EachMomentUpdate() { void Goto_PowerLossRecovery() { recovery.dwin_flag = false; - LCD_MESSAGE_F("Recovery from power loss"); + LCD_MESSAGE_F(GET_TEXT_F(MSG_CONTINUE_PRINT_JOB)); HMI_flag.select_flag = false; Popup_PowerLossRecovery(); last_checkkey = MainMenu; @@ -1704,7 +1704,7 @@ void DWIN_StartHoming() { HMI_flag.home_flag = true; HMI_SaveProcessID(Homing); Title.ShowCaption(GET_TEXT_F(MSG_LEVEL_BED_HOMING)); - DWIN_Draw_Popup(ICON_BLTouch, GET_TEXT_F(MSG_LEVEL_BED_HOMING), F("Please wait until done.")); + DWIN_Draw_Popup(ICON_BLTouch, GET_TEXT_F(MSG_LEVEL_BED_HOMING), GET_TEXT_F(MSG_PLEASE_WAIT)); } void DWIN_CompletedHoming() { @@ -1720,7 +1720,7 @@ void DWIN_MeshLevelingStart() { #if HAS_ONESTEP_LEVELING HMI_SaveProcessID(Leveling); Title.ShowCaption(GET_TEXT_F(MSG_BED_LEVELING)); - DWIN_Draw_Popup(ICON_AutoLeveling, GET_TEXT_F(MSG_BED_LEVELING), F("Please wait until done.")); + DWIN_Draw_Popup(ICON_AutoLeveling, GET_TEXT_F(MSG_BED_LEVELING), GET_TEXT_F(MSG_PLEASE_WAIT)); #elif ENABLED(MESH_BED_LEVELING) Draw_ManualMesh_Menu(); #endif @@ -1894,7 +1894,7 @@ void MarlinUI::kill_screen(FSTR_P const lcd_error, FSTR_P const lcd_component) { void DWIN_RebootScreen() { DWIN_Frame_Clear(Color_Bg_Black); DWIN_JPG_ShowAndCache(0); - DWINUI::Draw_CenteredString(Color_White, 220, F("Please wait until reboot. ")); + DWINUI::Draw_CenteredString(Color_White, 220, GET_TEXT_F(MSG_PLEASE_WAIT_REBOOT)); DWIN_UpdateLCD(); delay(500); } @@ -1908,7 +1908,7 @@ void DWIN_Redraw_screen() { void DWIN_Popup_Pause(FSTR_P const fmsg, uint8_t button = 0) { HMI_SaveProcessID(button ? WaitResponse : NothingToDo); - DWIN_Draw_Popup(ICON_BLTouch, F("Advanced Pause"), fmsg, button); + DWIN_Draw_Popup(ICON_BLTouch, GET_TEXT_F(MSG_ADVANCED_PAUSE), fmsg, button); ui.reset_status(true); } @@ -1918,7 +1918,7 @@ void DWIN_Redraw_screen() { case PAUSE_MESSAGE_CHANGING: DWIN_Popup_Pause(GET_TEXT_F(MSG_FILAMENT_CHANGE_INIT)); break; case PAUSE_MESSAGE_UNLOAD: DWIN_Popup_Pause(GET_TEXT_F(MSG_FILAMENT_CHANGE_UNLOAD)); break; case PAUSE_MESSAGE_WAITING: DWIN_Popup_Pause(GET_TEXT_F(MSG_ADVANCED_PAUSE_WAITING), ICON_Continue_E); break; - case PAUSE_MESSAGE_INSERT: DWIN_Popup_Continue(ICON_BLTouch, F("Advanced Pause"), GET_TEXT_F(MSG_FILAMENT_CHANGE_INSERT)); break; + case PAUSE_MESSAGE_INSERT: DWIN_Popup_Continue(ICON_BLTouch, GET_TEXT_F(MSG_ADVANCED_PAUSE), GET_TEXT_F(MSG_FILAMENT_CHANGE_INSERT)); break; case PAUSE_MESSAGE_LOAD: DWIN_Popup_Pause(GET_TEXT_F(MSG_FILAMENT_CHANGE_LOAD)); break; case PAUSE_MESSAGE_PURGE: DWIN_Popup_Pause(GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE)); break; case PAUSE_MESSAGE_OPTION: DWIN_Popup_FilamentPurge(); break; @@ -1931,7 +1931,7 @@ void DWIN_Redraw_screen() { } void Draw_Popup_FilamentPurge() { - DWIN_Draw_Popup(ICON_BLTouch, F("Advanced Pause"), F("Purge or Continue?")); + DWIN_Draw_Popup(ICON_BLTouch, GET_TEXT_F(MSG_ADVANCED_PAUSE), F("Purge or Continue?")); DWINUI::Draw_Icon(ICON_Confirm_E, 26, 280); DWINUI::Draw_Icon(ICON_Continue_E, 146, 280); Draw_Select_Highlight(true); @@ -1970,7 +1970,7 @@ void DWIN_Redraw_screen() { #if HAS_MESH void DWIN_MeshViewer() { if (!leveling_is_valid()) - DWIN_Popup_Continue(ICON_BLTouch, F("Mesh viewer"), F("No valid mesh")); + DWIN_Popup_Continue(ICON_BLTouch, GET_TEXT_F(MSG_MESH_VIEWER), GET_TEXT_F(MSG_NO_VALID_MESH)); else { HMI_SaveProcessID(WaitResponse); MeshViewer.Draw(); @@ -2354,7 +2354,7 @@ void DWIN_ApplyColor() { DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color); Draw_Status_Area(false); Draw_SelectColors_Menu(); - LCD_MESSAGE_F("Colors applied"); + LCD_MESSAGE_F(GET_TEXT_F(MSG_COLORS_APPLIED)); } void SetSpeed() { SetPIntOnClick(MIN_PRINT_SPEED, MAX_PRINT_SPEED); } @@ -3211,7 +3211,7 @@ void Draw_Prepare_Menu() { #endif #endif ADDMENUITEM(ICON_Cool, GET_TEXT_F(MSG_COOLDOWN), onDrawCooldown, DoCoolDown); - ADDMENUITEM(ICON_Language, PSTR("UI Language"), onDrawLanguage, SetLanguage); + ADDMENUITEM(ICON_Language, PSTR(GET_TEXT_F(MSG_UI_LANGUAGE)), onDrawLanguage, SetLanguage); } CurrentMenu->draw(); } @@ -3285,9 +3285,9 @@ void Draw_AdvancedSettings_Menu() { #if HAS_LCD_BRIGHTNESS ADDMENUITEM_P(ICON_Brightness, GET_TEXT_F(MSG_BRIGHTNESS), onDrawPInt8Menu, SetBrightness, &ui.brightness); #endif - ADDMENUITEM(ICON_Scolor, F("Select Colors"), onDrawSubMenu, Draw_SelectColors_Menu); + ADDMENUITEM(ICON_Scolor, GET_TEXT_F(MSG_COLORS_SELECT), onDrawSubMenu, Draw_SelectColors_Menu); #if ENABLED(SOUND_MENU_ITEM) - ADDMENUITEM(ICON_Sound, F("Enable Sound"), onDrawEnableSound, SetEnableSound); + ADDMENUITEM(ICON_Sound, GET_TEXT_F(MSG_SOUND_ENABLE), onDrawEnableSound, SetEnableSound); #endif #if HAS_MESH ADDMENUITEM(ICON_MeshViewer, GET_TEXT_F(MSG_MESH_VIEW), onDrawSubMenu, DWIN_MeshViewer); @@ -3299,7 +3299,7 @@ void Draw_AdvancedSettings_Menu() { ADDMENUITEM(ICON_PrintStats, GET_TEXT_F(MSG_INFO_STATS_MENU), onDrawSubMenu, Draw_PrintStats); ADDMENUITEM(ICON_PrintStatsReset, GET_TEXT_F(MSG_INFO_PRINT_COUNT_RESET), onDrawSubMenu, PrintStats.Reset); #endif - ADDMENUITEM(ICON_Lock, F("Lock Screen"), onDrawMenuItem, DWIN_LockScreen); + ADDMENUITEM(ICON_Lock, GET_TEXT_F(MSG_LOCKSCREEN), onDrawMenuItem, DWIN_LockScreen); } CurrentMenu->draw(); } @@ -3398,7 +3398,7 @@ void Draw_SelectColors_Menu() { if (!SelectColorMenu) SelectColorMenu = new MenuClass(); if (CurrentMenu != SelectColorMenu) { CurrentMenu = SelectColorMenu; - SetMenuTitle({0}, F("Select Colors")); // TODO: Chinese, English "Select Color" JPG + SetMenuTitle({0}, GET_TEXT_F(MSG_COLORS_SELECT)); // TODO: Chinese, English "Select Color" JPG DWINUI::MenuItemsPrepare(20); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu); ADDMENUITEM(ICON_StockConfiguration, GET_TEXT_F(MSG_RESTORE_DEFAULTS), onDrawMenuItem, RestoreDefaultsColors); @@ -3429,13 +3429,13 @@ void Draw_GetColor_Menu() { if (!GetColorMenu) GetColorMenu = new MenuClass(); if (CurrentMenu != GetColorMenu) { CurrentMenu = GetColorMenu; - SetMenuTitle({0}, F("Get Color")); // TODO: Chinese, English "Get Color" JPG + SetMenuTitle({0}, GET_TEXT_F(MSG_COLORS_GET)); // TODO: Chinese, English "Get Color" JPG DWINUI::MenuItemsPrepare(5); ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, DWIN_ApplyColor); ADDMENUITEM(ICON_Cancel, GET_TEXT_F(MSG_BUTTON_CANCEL), onDrawMenuItem, Draw_SelectColors_Menu); - ADDMENUITEM(0, "Red", onDrawGetColorItem, SetRGBColor); - ADDMENUITEM(1, "Green", onDrawGetColorItem, SetRGBColor); - ADDMENUITEM(2, "Blue", onDrawGetColorItem, SetRGBColor); + ADDMENUITEM(0, GET_TEXT_F(MSG_COLORS_RED), onDrawGetColorItem, SetRGBColor); + ADDMENUITEM(1, GET_TEXT_F(MSG_COLORS_GREEN), onDrawGetColorItem, SetRGBColor); + ADDMENUITEM(2, GET_TEXT_F(MSG_COLORS_BLUE), onDrawGetColorItem, SetRGBColor); } CurrentMenu->draw(); DWIN_Draw_Rectangle(1, *HMI_value.P_Int, 20, 315, DWIN_WIDTH - 20, 335); @@ -3472,9 +3472,9 @@ void Draw_Tune_Menu() { #if ENABLED(ADVANCED_PAUSE_FEATURE) ADDMENUITEM(ICON_FilMan, GET_TEXT_F(MSG_FILAMENTCHANGE), onDrawMenuItem, ChangeFilament); #endif - ADDMENUITEM(ICON_Lock, F("Lock Screen"), onDrawMenuItem, DWIN_LockScreen); + ADDMENUITEM(ICON_Lock, GET_TEXT_F(MSG_LOCKSCREEN), onDrawMenuItem, DWIN_LockScreen); #if HAS_LCD_BRIGHTNESS - ADDMENUITEM_P(ICON_Brightness, F("LCD Brightness"), onDrawPInt8Menu, SetBrightness, &ui.brightness); + ADDMENUITEM_P(ICON_Brightness, GET_TEXT_F(MSG_BRIGHTNESS), onDrawPInt8Menu, SetBrightness, &ui.brightness); #endif } CurrentMenu->draw(); diff --git a/Marlin/src/lcd/e3v2/enhanced/printstats.cpp b/Marlin/src/lcd/e3v2/enhanced/printstats.cpp index 54205363be..a32d698b96 100644 --- a/Marlin/src/lcd/e3v2/enhanced/printstats.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/printstats.cpp @@ -54,17 +54,17 @@ void PrintStatsClass::Draw() { DWINUI::Draw_Icon(ICON_Continue_E, 86, 250); printStatistics ps = print_job_timer.getStats(); - sprintf_P(buf, PSTR("%s: %i"), GET_TEXT(MSG_INFO_PRINT_COUNT), ps.totalPrints); + sprintf_P(buf, PSTR(S_FMT ": %i"), GET_TEXT(MSG_INFO_PRINT_COUNT), ps.totalPrints); DWINUI::Draw_String(MRG, 80, buf); - sprintf_P(buf, PSTR("%s: %i"), GET_TEXT(MSG_INFO_COMPLETED_PRINTS), ps.finishedPrints); + sprintf_P(buf, PSTR(S_FMT ": %i"), GET_TEXT(MSG_INFO_COMPLETED_PRINTS), ps.finishedPrints); DWINUI::Draw_String(MRG, 100, buf); duration_t(print_job_timer.getStats().printTime).toDigital(str, true); - sprintf_P(buf, PSTR("%s: %s"), GET_TEXT(MSG_INFO_PRINT_TIME), str); + sprintf_P(buf, PSTR(S_FMT ": %s"), GET_TEXT(MSG_INFO_PRINT_TIME), str); DWINUI::Draw_String(MRG, 120, buf); duration_t(print_job_timer.getStats().longestPrint).toDigital(str, true); - sprintf_P(buf, PSTR("%s: %s"), GET_TEXT(MSG_INFO_PRINT_LONGEST), str); + sprintf_P(buf, PSTR(S_FMT ": %s"), GET_TEXT(MSG_INFO_PRINT_LONGEST), str); DWINUI::Draw_String(MRG, 140, buf); - sprintf_P(buf, PSTR("%s: %s m"), GET_TEXT(MSG_INFO_PRINT_FILAMENT), dtostrf(ps.filamentUsed / 1000, 1, 2, str)); + sprintf_P(buf, PSTR(S_FMT ": %s m"), GET_TEXT(MSG_INFO_PRINT_FILAMENT), dtostrf(ps.filamentUsed / 1000, 1, 2, str)); DWINUI::Draw_String(MRG, 160, buf); } diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index f1beb62e07..08370d3a2f 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -157,9 +157,11 @@ namespace Language_en { LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Last Z: "); LSTR MSG_NEXT_CORNER = _UxGT("Next Corner"); LSTR MSG_MESH_EDITOR = _UxGT("Mesh Editor"); + LSTR MSG_MESH_VIEWER = _UxGT("Mesh Viewer"); LSTR MSG_EDIT_MESH = _UxGT("Edit Mesh"); LSTR MSG_MESH_VIEW = _UxGT("View Mesh"); LSTR MSG_EDITING_STOPPED = _UxGT("Mesh Editing Stopped"); + LSTR MSG_NO_VALID_MESH = _UxGT("No valid mesh"); LSTR MSG_PROBING_POINT = _UxGT("Probing Point"); LSTR MSG_MESH_X = _UxGT("Index X"); LSTR MSG_MESH_Y = _UxGT("Index Y"); @@ -437,6 +439,7 @@ namespace Language_en { LSTR MSG_BUTTON_ADVANCED = _UxGT("Advanced"); LSTR MSG_PAUSING = _UxGT("Pausing..."); LSTR MSG_PAUSE_PRINT = _UxGT("Pause Print"); + LSTR MSG_ADVANCED_PAUSE = _UxGT("Advanced Pause"); LSTR MSG_RESUME_PRINT = _UxGT("Resume Print"); LSTR MSG_HOST_START_PRINT = _UxGT("Start Host Print"); LSTR MSG_STOP_PRINT = _UxGT("Stop Print"); @@ -445,12 +448,14 @@ namespace Language_en { LSTR MSG_CANCEL_OBJECT = _UxGT("Cancel Object"); LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancel Object ="); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Power Outage"); + LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Continue Print Job"); LSTR MSG_MEDIA_MENU = _UxGT("Print from ") MEDIA_TYPE_EN; LSTR MSG_NO_MEDIA = _UxGT("No ") MEDIA_TYPE_EN; LSTR MSG_DWELL = _UxGT("Sleep..."); LSTR MSG_USERWAIT = _UxGT("Click to Resume..."); LSTR MSG_PRINT_PAUSED = _UxGT("Print Paused"); LSTR MSG_PRINTING = _UxGT("Printing..."); + LSTR MSG_STOPPING = _UxGT("Stopping..."); LSTR MSG_PRINT_ABORTED = _UxGT("Print Aborted"); LSTR MSG_PRINT_DONE = _UxGT("Print Done"); LSTR MSG_NO_MOVE = _UxGT("No Move."); @@ -541,6 +546,7 @@ namespace Language_en { LSTR MSG_ERR_MAXTEMP = _UxGT("Err: MAXTEMP"); LSTR MSG_ERR_MINTEMP = _UxGT("Err: MINTEMP"); LSTR MSG_HALTED = _UxGT("PRINTER HALTED"); + LSTR MSG_PLEASE_WAIT = _UxGT("Please wait..."); LSTR MSG_PLEASE_RESET = _UxGT("Please Reset"); LSTR MSG_PREHEATING = _UxGT("Preheating..."); LSTR MSG_HEATING = _UxGT("Heating..."); @@ -588,20 +594,35 @@ namespace Language_en { LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("INCORRECT PRINTER"); #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 + LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("No media inserted."); + LSTR MSG_REMAINING_TIME = _UxGT("Remaining time"); + LSTR MSG_PLEASE_WAIT_REBOOT = _UxGT("Please wait until reboot. "); + LSTR MSG_PLEASE_PREHEAT = _UxGT("Please preheat the hot end."); LSTR MSG_INFO_PRINT_COUNT_RESET = _UxGT("Reset Print Count"); LSTR MSG_INFO_PRINT_COUNT = _UxGT("Print Count"); - LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completed"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Total Print Time"); LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Longest Job Time"); LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded Total"); + LSTR MSG_COLORS_GET = _UxGT("Get Color"); + LSTR MSG_COLORS_SELECT = _UxGT("Select Colors"); + LSTR MSG_COLORS_APPLIED = _UxGT("Colors applied"); + LSTR MSG_COLORS_RED = _UxGT("Red"); + LSTR MSG_COLORS_GREEN = _UxGT("Green"); + LSTR MSG_COLORS_BLUE = _UxGT("Blue"); + LSTR MSG_UI_LANGUAGE = _UxGT("UI Language"); + LSTR MSG_SOUND_ENABLE = _UxGT("Enable sound"); + LSTR MSG_LOCKSCREEN = _UxGT("Lock Screen"); #else + LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("No Media"); + LSTR MSG_PLEASE_PREHEAT = _UxGT("Please Preheat"); LSTR MSG_INFO_PRINT_COUNT = _UxGT("Prints"); - LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completed"); + LSTR MSG_REMAINING_TIME = _UxGT("Remaining"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Total"); LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Longest"); LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded"); #endif + LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completed"); LSTR MSG_INFO_MIN_TEMP = _UxGT("Min Temp"); LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Temp"); LSTR MSG_INFO_PSU = _UxGT("PSU"); From 73624133c9eec397c5030b6d17ef82a29cc5007f Mon Sep 17 00:00:00 2001 From: jdegenstein Date: Thu, 6 Jan 2022 19:03:02 -0600 Subject: [PATCH 330/532] =?UTF-8?q?=F0=9F=93=8C=20LCD=5FFOR=5FMELZI=20for?= =?UTF-8?q?=20BTT=20E3=20RRF=20(#23453)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h | 48 ++++++++++++++++++++--- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h b/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h index 740164a197..554b2704c7 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h @@ -197,11 +197,11 @@ #if HAS_WIRED_LCD - #if ENABLED(CR10_STOCKDISPLAY) + #if EITHER(CR10_STOCKDISPLAY, LCD_FOR_MELZI) #define BEEPER_PIN PE8 - #define BTN_ENC PE9 + #define BTN_ENC PE9 #define BTN_EN1 PE7 #define BTN_EN2 PB2 @@ -209,6 +209,40 @@ #define LCD_PINS_ENABLE PE11 #define LCD_PINS_D4 PE10 + #if ENABLED(LCD_FOR_MELZI) + + #error "CAUTION! LCD_FOR_MELZI requires wiring modifications. See 'pins_BTT_E3_RRF.h' for details. Comment out this line to continue." + + /** LCD_FOR_MELZI display pinout + * + * BTT E3 RRF Display Ribbon + * ------ ------ + * (BEEPER) PE8 |10 9 | PE9 (BTN_ENC) GND |10 9 | 5V + * (BTN_EN1) PE7 | 8 7 | RESET BEEPER | 8 7 | ESTOP (RESET) + * (BTN_EN2) PB2 6 5 | PE10 (LCD_D4) (BTN_ENC) ENC_BTN | 6 5 | LCD_SCLK (LCD_D4) + * (LCD_RS) PB1 | 4 3 | PE11 (LCD_EN) (BTN_EN2) ENC_A | 4 3 | LCD_DATA (LCD_EN) + * GND | 2 1 | 5V (BTN_EN1) ENC_B | 2 1 | LCD_CS (LCD_RS) + * ------ ------ + * EXP1 Ribbon + * + * Needs custom cable: + * + * Board Adapter Display Ribbon (coming from display) + * + * EXP1-1 ----------- EXP1-9 + * EXP1-2 ----------- EXP1-10 + * EXP1-3 ----------- EXP1-3 + * EXP1-4 ----------- EXP1-1 + * EXP1-5 ----------- EXP1-5 + * EXP1-6 ----------- EXP1-4 + * EXP1-7 ----------- EXP1-7 + * EXP1-8 ----------- EXP1-8 + * EXP1-9 ----------- EXP1-6 + * EXP1-10 ----------- EXP1-8 + */ + + #endif + #elif ENABLED(ZONESTAR_LCD) // ANET A8 LCD Controller - Must convert to 3.3V - CONNECTING TO 5V WILL DAMAGE THE BOARD! #error "CAUTION! ZONESTAR_LCD requires wiring modifications. See 'pins_BTT_E3_RRF.h' for details. Comment out this line to continue." @@ -275,11 +309,15 @@ #endif #else - #error "Only CR10_STOCKDISPLAY, ZONESTAR_LCD, ENDER2_STOCKDISPLAY, MKS_MINI_12864, and TFTGLCD_PANEL_(SPI|I2C) are currently supported on the BTT_E3_RRF." + #error "Only CR10_STOCKDISPLAY, ZONESTAR_LCD, ENDER2_STOCKDISPLAY, MKS_MINI_12864, LCD_FOR_MELZI, and TFTGLCD_PANEL_(SPI|I2C) are currently supported on the BTT_E3_RRF." #endif // Alter timing for graphical display - #if IS_U8GLIB_ST7920 + #if ENABLED(LCD_FOR_MELZI) // LCD_FOR_MELZI default timing is too fast. This works but may be reduced. + #define BOARD_ST7920_DELAY_1 200 + #define BOARD_ST7920_DELAY_2 400 + #define BOARD_ST7920_DELAY_3 1200 + #elif IS_U8GLIB_ST7920 #define BOARD_ST7920_DELAY_1 96 #define BOARD_ST7920_DELAY_2 48 #define BOARD_ST7920_DELAY_3 600 @@ -306,7 +344,7 @@ * Needs custom cable: * * Board Adapter Display - * _________ + * * EXP1-1 ----------- EXP1-10 * EXP1-2 ----------- EXP1-9 * SPI1-4 ----------- EXP1-6 From 3eb794d6d5d80f5d1bf17d94ae3af29eb9263763 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 7 Jan 2022 01:13:26 +0000 Subject: [PATCH 331/532] [cron] Bump distribution date (2022-01-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 c356855a5a..bba2eda104 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 "2022-01-06" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 845210871a..ec1bc89507 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 "2022-01-06" + #define STRING_DISTRIBUTION_DATE "2022-01-07" #endif /** From 9564d684844fd9032eb5cec68825b7a70441e78a Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 8 Jan 2022 01:06:56 +0000 Subject: [PATCH 332/532] [cron] Bump distribution date (2022-01-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 bba2eda104..ae5519e87d 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 "2022-01-07" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 ec1bc89507..a761b0955a 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 "2022-01-07" + #define STRING_DISTRIBUTION_DATE "2022-01-08" #endif /** From 3949142214e2aae9a9f23dae811d94811fd140e1 Mon Sep 17 00:00:00 2001 From: ClockeNessMnstr Date: Sat, 8 Jan 2022 15:09:25 -0500 Subject: [PATCH 333/532] =?UTF-8?q?=F0=9F=9A=B8=20Do=20G34=20"Z=20Backoff"?= =?UTF-8?q?=20at=20full=20current?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/calibrate/G34.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Marlin/src/gcode/calibrate/G34.cpp b/Marlin/src/gcode/calibrate/G34.cpp index 98a0bdef88..ea5d5fa150 100644 --- a/Marlin/src/gcode/calibrate/G34.cpp +++ b/Marlin/src/gcode/calibrate/G34.cpp @@ -114,10 +114,6 @@ void GcodeSuite::G34() { if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Final Z Move"); do_blocking_move_to_z(zgrind, MMM_TO_MMS(GANTRY_CALIBRATION_FEEDRATE)); - // Back off end plate, back to normal motion range - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Z Backoff"); - do_blocking_move_to_z(zpounce, MMM_TO_MMS(GANTRY_CALIBRATION_FEEDRATE)); - #if _REDUCE_CURRENT // Reset current to original values if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Restore Current"); @@ -146,6 +142,10 @@ void GcodeSuite::G34() { #endif #endif + // Back off end plate, back to normal motion range + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Z Backoff"); + do_blocking_move_to_z(zpounce, MMM_TO_MMS(GANTRY_CALIBRATION_FEEDRATE)); + #ifdef GANTRY_CALIBRATION_COMMANDS_POST if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Running Post Commands"); process_subcommands_now(F(GANTRY_CALIBRATION_COMMANDS_POST)); From 5a9755e5bbfdbacf74fda85baf9334a309570da2 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 9 Jan 2022 01:10:43 +0000 Subject: [PATCH 334/532] [cron] Bump distribution date (2022-01-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 ae5519e87d..8d30265209 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 "2022-01-08" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 a761b0955a..e571b342a0 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 "2022-01-08" + #define STRING_DISTRIBUTION_DATE "2022-01-09" #endif /** From 54f218e348f2da18d02512fba9ba4b1cc3e454e7 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 9 Jan 2022 01:06:19 -0600 Subject: [PATCH 335/532] =?UTF-8?q?=F0=9F=94=A8=20Get=20FIRMWARE=5FBIN=20f?= =?UTF-8?q?rom=20env?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/PlatformIO/scripts/marlin.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/buildroot/share/PlatformIO/scripts/marlin.py b/buildroot/share/PlatformIO/scripts/marlin.py index 2114a05fb3..8ac36b7d59 100644 --- a/buildroot/share/PlatformIO/scripts/marlin.py +++ b/buildroot/share/PlatformIO/scripts/marlin.py @@ -49,13 +49,8 @@ def encrypt_mks(source, target, env, new_name): key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E] # If FIRMWARE_BIN is defined by config, override all - import re - patt = re.compile("^\\s*#define\\s+FIRMWARE_BIN\\s+\"?(.+)\"?") - with open(join("Marlin", "Configuration.h"), encoding="utf-8") as f: - for line in f: - m = patt.search(line) - if m != None: - new_name = m.group(1) + mf = env["MARLIN_FEATURES"] + if "FIRMWARE_BIN" in mf: new_name = mf["FIRMWARE_BIN"] fwpath = target[0].path fwfile = open(fwpath, "rb") From 1363b439462af4fac2e9e3a8801abde5981575cf Mon Sep 17 00:00:00 2001 From: GHGiampy <83699429+GHGiampy@users.noreply.github.com> Date: Sun, 9 Jan 2022 08:14:03 +0100 Subject: [PATCH 336/532] =?UTF-8?q?=E2=9C=A8=20Firmware=20Upload=20via=20B?= =?UTF-8?q?inary=20Transfer=20(#23462)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 5 + Marlin/src/gcode/sd/M20.cpp | 8 +- Marlin/src/pins/pins.h | 16 +- Marlin/src/sd/cardreader.cpp | 39 +- Marlin/src/sd/cardreader.h | 11 +- .../share/scripts/MarlinBinaryProtocol.py | 434 ++++++++++++++++++ buildroot/share/scripts/upload.py | 274 +++++++++++ ini/stm32f1.ini | 7 +- 8 files changed, 770 insertions(+), 24 deletions(-) create mode 100644 buildroot/share/scripts/MarlinBinaryProtocol.py create mode 100644 buildroot/share/scripts/upload.py diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 16c5587f9c..d49d2d00b9 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1621,6 +1621,11 @@ // Add an optimized binary file transfer mode, initiated with 'M28 B1' //#define BINARY_FILE_TRANSFER + #if ENABLED(BINARY_FILE_TRANSFER) + // Include extra facilities (e.g., 'M20 F') supporting firmware upload via BINARY_FILE_TRANSFER + //#define CUSTOM_FIRMWARE_UPLOAD + #endif + /** * Set this option to one of the following (or the board's defaults apply): * diff --git a/Marlin/src/gcode/sd/M20.cpp b/Marlin/src/gcode/sd/M20.cpp index 5731838338..c640309be8 100644 --- a/Marlin/src/gcode/sd/M20.cpp +++ b/Marlin/src/gcode/sd/M20.cpp @@ -33,7 +33,13 @@ void GcodeSuite::M20() { if (card.flag.mounted) { SERIAL_ECHOLNPGM(STR_BEGIN_FILE_LIST); - card.ls(TERN_(LONG_FILENAME_HOST_SUPPORT, parser.boolval('L'))); + card.ls( + TERN_(CUSTOM_FIRMWARE_UPLOAD, parser.boolval('F')) + #if BOTH(CUSTOM_FIRMWARE_UPLOAD, LONG_FILENAME_HOST_SUPPORT) + , + #endif + TERN_(LONG_FILENAME_HOST_SUPPORT, parser.boolval('L')) + ); SERIAL_ECHOLNPGM(STR_END_FILE_LIST); } else diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 0d24ee6696..7ca78677e9 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -558,21 +558,21 @@ #elif MB(CHITU3D_V9) #include "stm32f1/pins_CHITU3D_V9.h" // STM32F1 env:chitu_f103 env:chitu_f103_maple #elif MB(CREALITY_V4) - #include "stm32f1/pins_CREALITY_V4.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple + #include "stm32f1/pins_CREALITY_V4.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer env:STM32F103RET6_creality_maple #elif MB(CREALITY_V4210) - #include "stm32f1/pins_CREALITY_V4210.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple + #include "stm32f1/pins_CREALITY_V4210.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer env:STM32F103RET6_creality_maple #elif MB(CREALITY_V423) - #include "stm32f1/pins_CREALITY_V423.h" // STM32F1 env:STM32F103RET6_creality + #include "stm32f1/pins_CREALITY_V423.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer #elif MB(CREALITY_V427) - #include "stm32f1/pins_CREALITY_V427.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple + #include "stm32f1/pins_CREALITY_V427.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer env:STM32F103RET6_creality_maple #elif MB(CREALITY_V431, CREALITY_V431_A, CREALITY_V431_B, CREALITY_V431_C, CREALITY_V431_D) - #include "stm32f1/pins_CREALITY_V431.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple + #include "stm32f1/pins_CREALITY_V431.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer env:STM32F103RET6_creality_maple #elif MB(CREALITY_V452) - #include "stm32f1/pins_CREALITY_V452.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple + #include "stm32f1/pins_CREALITY_V452.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer env:STM32F103RET6_creality_maple #elif MB(CREALITY_V453) - #include "stm32f1/pins_CREALITY_V453.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple + #include "stm32f1/pins_CREALITY_V453.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer env:STM32F103RET6_creality_maple #elif MB(CREALITY_V24S1) - #include "stm32f1/pins_CREALITY_V24S1.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_maple + #include "stm32f1/pins_CREALITY_V24S1.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer env:STM32F103RET6_creality_maple #elif MB(TRIGORILLA_PRO) #include "stm32f1/pins_TRIGORILLA_PRO.h" // STM32F1 env:trigorilla_pro env:trigorilla_pro_maple #elif MB(FLY_MINI) diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 66c08b6455..25f9d7d802 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -195,11 +195,15 @@ char *createFilename(char * const buffer, const dir_t &p) { } // -// Return 'true' if the item is a folder or G-code file +// Return 'true' if the item is something Marlin can read // -bool CardReader::is_dir_or_gcode(const dir_t &p) { +bool CardReader::is_visible_entity(const dir_t &p OPTARG(CUSTOM_FIRMWARE_UPLOAD, bool onlyBin/*=false*/)) { //uint8_t pn0 = p.name[0]; + #if DISABLED(CUSTOM_FIRMWARE_UPLOAD) + constexpr bool onlyBin = false; + #endif + if ( (p.attributes & DIR_ATT_HIDDEN) // Hidden by attribute // When readDir() > 0 these must be false: //|| pn0 == DIR_NAME_FREE || pn0 == DIR_NAME_DELETED // Clear or Deleted entry @@ -211,7 +215,11 @@ bool CardReader::is_dir_or_gcode(const dir_t &p) { return ( flag.filenameIsDir // All Directories are ok - || (p.name[8] == 'G' && p.name[9] != '~') // Non-backup *.G* files are accepted + || (!onlyBin && p.name[8] == 'G' + && p.name[9] != '~') // Non-backup *.G* files are accepted + || ( onlyBin && p.name[8] == 'B' + && p.name[9] == 'I' + && p.name[10] == 'N') // BIN files are accepted ); } @@ -222,7 +230,7 @@ int CardReader::countItems(SdFile dir) { dir_t p; int c = 0; while (dir.readDir(&p, longFilename) > 0) - c += is_dir_or_gcode(p); + c += is_visible_entity(p); #if ALL(SDCARD_SORT_ALPHA, SDSORT_USES_RAM, SDSORT_CACHE_NAMES) nrFiles = c; @@ -237,7 +245,7 @@ int CardReader::countItems(SdFile dir) { void CardReader::selectByIndex(SdFile dir, const uint8_t index) { dir_t p; for (uint8_t cnt = 0; dir.readDir(&p, longFilename) > 0;) { - if (is_dir_or_gcode(p)) { + if (is_visible_entity(p)) { if (cnt == index) { createFilename(filename, p); return; // 0 based index @@ -253,7 +261,7 @@ void CardReader::selectByIndex(SdFile dir, const uint8_t index) { void CardReader::selectByName(SdFile dir, const char * const match) { dir_t p; for (uint8_t cnt = 0; dir.readDir(&p, longFilename) > 0; cnt++) { - if (is_dir_or_gcode(p)) { + if (is_visible_entity(p)) { createFilename(filename, p); if (strcasecmp(match, filename) == 0) return; } @@ -272,6 +280,7 @@ void CardReader::selectByName(SdFile dir, const char * const match) { */ void CardReader::printListing( SdFile parent, const char * const prepend + OPTARG(CUSTOM_FIRMWARE_UPLOAD, bool onlyBin/*=false*/) OPTARG(LONG_FILENAME_HOST_SUPPORT, const bool includeLongNames/*=false*/) OPTARG(LONG_FILENAME_HOST_SUPPORT, const char * const prependLong/*=nullptr*/) ) { @@ -297,12 +306,12 @@ void CardReader::printListing( char pathLong[lenPrependLong + strlen(longFilename) + 1]; if (prependLong) { strcpy(pathLong, prependLong); pathLong[lenPrependLong - 1] = '/'; } strcpy(pathLong + lenPrependLong, longFilename); - printListing(child, path, true, pathLong); + printListing(child, path OPTARG(CUSTOM_FIRMWARE_UPLOAD, onlyBin), true, pathLong); } else - printListing(child, path); + printListing(child, path OPTARG(CUSTOM_FIRMWARE_UPLOAD, onlyBin)); #else - printListing(child, path); + printListing(child, path OPTARG(CUSTOM_FIRMWARE_UPLOAD, onlyBin)); #endif } else { @@ -310,7 +319,7 @@ void CardReader::printListing( return; } } - else if (is_dir_or_gcode(p)) { + else if (is_visible_entity(p OPTARG(CUSTOM_FIRMWARE_UPLOAD, onlyBin))) { if (prepend) { SERIAL_ECHO(prepend); SERIAL_CHAR('/'); } SERIAL_ECHO(createFilename(filename, p)); SERIAL_CHAR(' '); @@ -330,10 +339,16 @@ void CardReader::printListing( // // List all files on the SD card // -void CardReader::ls(TERN_(LONG_FILENAME_HOST_SUPPORT, bool includeLongNames/*=false*/)) { +void CardReader::ls( + TERN_(CUSTOM_FIRMWARE_UPLOAD, const bool onlyBin/*=false*/) + #if BOTH(CUSTOM_FIRMWARE_UPLOAD, LONG_FILENAME_HOST_SUPPORT) + , + #endif + TERN_(LONG_FILENAME_HOST_SUPPORT, const bool includeLongNames/*=false*/) +) { if (flag.mounted) { root.rewind(); - printListing(root, nullptr OPTARG(LONG_FILENAME_HOST_SUPPORT, includeLongNames)); + printListing(root, nullptr OPTARG(CUSTOM_FIRMWARE_UPLOAD, onlyBin) OPTARG(LONG_FILENAME_HOST_SUPPORT, includeLongNames)); } } diff --git a/Marlin/src/sd/cardreader.h b/Marlin/src/sd/cardreader.h index 8761f57de5..2b3dcd00fb 100644 --- a/Marlin/src/sd/cardreader.h +++ b/Marlin/src/sd/cardreader.h @@ -204,7 +204,13 @@ public: FORCE_INLINE static void getfilename_sorted(const uint16_t nr) { selectFileByIndex(nr); } #endif - static void ls(TERN_(LONG_FILENAME_HOST_SUPPORT, bool includeLongNames=false)); + static void ls( + TERN_(CUSTOM_FIRMWARE_UPLOAD, const bool onlyBin=false) + #if BOTH(CUSTOM_FIRMWARE_UPLOAD, LONG_FILENAME_HOST_SUPPORT) + , + #endif + TERN_(LONG_FILENAME_HOST_SUPPORT, const bool includeLongNames=false) + ); #if ENABLED(POWER_LOSS_RECOVERY) static bool jobRecoverFileExists(); @@ -331,12 +337,13 @@ private: // // Directory items // - static bool is_dir_or_gcode(const dir_t &p); + static bool is_visible_entity(const dir_t &p OPTARG(CUSTOM_FIRMWARE_UPLOAD, const bool onlyBin=false)); static int countItems(SdFile dir); static void selectByIndex(SdFile dir, const uint8_t index); static void selectByName(SdFile dir, const char * const match); static void printListing( SdFile parent, const char * const prepend + OPTARG(CUSTOM_FIRMWARE_UPLOAD, const bool onlyBin=false) OPTARG(LONG_FILENAME_HOST_SUPPORT, const bool includeLongNames=false) OPTARG(LONG_FILENAME_HOST_SUPPORT, const char * const prependLong=nullptr) ); diff --git a/buildroot/share/scripts/MarlinBinaryProtocol.py b/buildroot/share/scripts/MarlinBinaryProtocol.py new file mode 100644 index 0000000000..4887ad9919 --- /dev/null +++ b/buildroot/share/scripts/MarlinBinaryProtocol.py @@ -0,0 +1,434 @@ +# +# MarlinBinaryProtocol.py +# Supporting Firmware upload via USB/Serial, saving to the attached media. +# +import serial +import math +import time +from collections import deque +import threading +import sys +import datetime +import random +try: + import heatshrink + heatshrink_exists = True +except ImportError: + heatshrink_exists = False + + +def millis(): + return time.perf_counter() * 1000 + +class TimeOut(object): + def __init__(self, milliseconds): + self.duration = milliseconds + self.reset() + + def reset(self): + self.endtime = millis() + self.duration + + def timedout(self): + return millis() > self.endtime + +class ReadTimeout(Exception): + pass +class FatalError(Exception): + pass +class SycronisationError(Exception): + pass +class PayloadOverflow(Exception): + pass +class ConnectionLost(Exception): + pass + +class Protocol(object): + device = None + baud = None + max_block_size = 0 + port = None + block_size = 0 + + packet_transit = None + packet_status = None + packet_ping = None + + errors = 0 + packet_buffer = None + simulate_errors = 0 + sync = 0 + connected = False + syncronised = False + worker_thread = None + + response_timeout = 1000 + + applications = [] + responses = deque() + + def __init__(self, device, baud, bsize, simerr, timeout): + print("pySerial Version:", serial.VERSION) + self.port = serial.Serial(device, baudrate = baud, write_timeout = 0, timeout = 1) + self.device = device + self.baud = baud + self.block_size = int(bsize) + self.simulate_errors = max(min(simerr, 1.0), 0.0); + self.connected = True + self.response_timeout = timeout + + self.register(['ok', 'rs', 'ss', 'fe'], self.process_input) + + self.worker_thread = threading.Thread(target=Protocol.receive_worker, args=(self,)) + self.worker_thread.start() + + def receive_worker(self): + while self.port.in_waiting: + self.port.reset_input_buffer() + + def dispatch(data): + for tokens, callback in self.applications: + for token in tokens: + if token == data[:len(token)]: + callback((token, data[len(token):])) + return + + def reconnect(): + print("Reconnecting..") + self.port.close() + for x in range(10): + try: + if self.connected: + self.port = serial.Serial(self.device, baudrate = self.baud, write_timeout = 0, timeout = 1) + return + else: + print("Connection closed") + return + except: + time.sleep(1) + raise ConnectionLost() + + while self.connected: + try: + data = self.port.readline().decode('utf8').rstrip() + if len(data): + #print(data) + dispatch(data) + except OSError: + reconnect() + except UnicodeDecodeError: + # dodgy client output or datastream corruption + self.port.reset_input_buffer() + + def shutdown(self): + self.connected = False + self.worker_thread.join() + self.port.close() + + def process_input(self, data): + #print(data) + self.responses.append(data) + + def register(self, tokens, callback): + self.applications.append((tokens, callback)) + + def send(self, protocol, packet_type, data = bytearray()): + self.packet_transit = self.build_packet(protocol, packet_type, data) + self.packet_status = 0 + self.transmit_attempt = 0 + + timeout = TimeOut(self.response_timeout * 20) + while self.packet_status == 0: + try: + if timeout.timedout(): + raise ConnectionLost() + self.transmit_packet(self.packet_transit) + self.await_response() + except ReadTimeout: + self.errors += 1 + #print("Packetloss detected..") + self.packet_transit = None + + def await_response(self): + timeout = TimeOut(self.response_timeout) + while not len(self.responses): + time.sleep(0.00001) + if timeout.timedout(): + raise ReadTimeout() + + while len(self.responses): + token, data = self.responses.popleft() + switch = {'ok' : self.response_ok, 'rs': self.response_resend, 'ss' : self.response_stream_sync, 'fe' : self.response_fatal_error} + switch[token](data) + + def send_ascii(self, data, send_and_forget = False): + self.packet_transit = bytearray(data, "utf8") + b'\n' + self.packet_status = 0 + self.transmit_attempt = 0 + + timeout = TimeOut(self.response_timeout * 20) + while self.packet_status == 0: + try: + if timeout.timedout(): + return + self.port.write(self.packet_transit) + if send_and_forget: + self.packet_status = 1 + else: + self.await_response_ascii() + except ReadTimeout: + self.errors += 1 + #print("Packetloss detected..") + except serial.serialutil.SerialException: + return + self.packet_transit = None + + def await_response_ascii(self): + timeout = TimeOut(self.response_timeout) + while not len(self.responses): + time.sleep(0.00001) + if timeout.timedout(): + raise ReadTimeout() + token, data = self.responses.popleft() + self.packet_status = 1 + + def corrupt_array(self, data): + rid = random.randint(0, len(data) - 1) + data[rid] ^= 0xAA + return data + + def transmit_packet(self, packet): + packet = bytearray(packet) + if(self.simulate_errors > 0 and random.random() > (1.0 - self.simulate_errors)): + if random.random() > 0.9: + #random data drop + start = random.randint(0, len(packet)) + end = start + random.randint(1, 10) + packet = packet[:start] + packet[end:] + #print("Dropping {0} bytes".format(end - start)) + else: + #random corruption + packet = self.corrupt_array(packet) + #print("Single byte corruption") + self.port.write(packet) + self.transmit_attempt += 1 + + def build_packet(self, protocol, packet_type, data = bytearray()): + PACKET_TOKEN = 0xB5AD + + if len(data) > self.max_block_size: + raise PayloadOverflow() + + packet_buffer = bytearray() + + packet_buffer += self.pack_int8(self.sync) # 8bit sync id + packet_buffer += self.pack_int4_2(protocol, packet_type) # 4 bit protocol id, 4 bit packet type + packet_buffer += self.pack_int16(len(data)) # 16bit packet length + packet_buffer += self.pack_int16(self.build_checksum(packet_buffer)) # 16bit header checksum + + if len(data): + packet_buffer += data + packet_buffer += self.pack_int16(self.build_checksum(packet_buffer)) + + packet_buffer = self.pack_int16(PACKET_TOKEN) + packet_buffer # 16bit start token, not included in checksum + return packet_buffer + + # checksum 16 fletchers + def checksum(self, cs, value): + cs_low = (((cs & 0xFF) + value) % 255); + return ((((cs >> 8) + cs_low) % 255) << 8) | cs_low; + + def build_checksum(self, buffer): + cs = 0 + for b in buffer: + cs = self.checksum(cs, b) + return cs + + def pack_int32(self, value): + return value.to_bytes(4, byteorder='little') + + def pack_int16(self, value): + return value.to_bytes(2, byteorder='little') + + def pack_int8(self, value): + return value.to_bytes(1, byteorder='little') + + def pack_int4_2(self, vh, vl): + value = ((vh & 0xF) << 4) | (vl & 0xF) + return value.to_bytes(1, byteorder='little') + + def connect(self): + print("Connecting: Switching Marlin to Binary Protocol...") + self.send_ascii("M28B1") + self.send(0, 1) + + def disconnect(self): + self.send(0, 2) + self.syncronised = False + + def response_ok(self, data): + try: + packet_id = int(data); + except ValueError: + return + if packet_id != self.sync: + raise SycronisationError() + self.sync = (self.sync + 1) % 256 + self.packet_status = 1 + + def response_resend(self, data): + packet_id = int(data); + self.errors += 1 + if not self.syncronised: + print("Retrying syncronisation") + elif packet_id != self.sync: + raise SycronisationError() + + def response_stream_sync(self, data): + sync, max_block_size, protocol_version = data.split(',') + self.sync = int(sync) + self.max_block_size = int(max_block_size) + self.block_size = self.max_block_size if self.max_block_size < self.block_size else self.block_size + self.protocol_version = protocol_version + self.packet_status = 1 + self.syncronised = True + print("Connection synced [{0}], binary protocol version {1}, {2} byte payload buffer".format(self.sync, self.protocol_version, self.max_block_size)) + + def response_fatal_error(self, data): + raise FatalError() + + +class FileTransferProtocol(object): + protocol_id = 1 + + class Packet(object): + QUERY = 0 + OPEN = 1 + CLOSE = 2 + WRITE = 3 + ABORT = 4 + + responses = deque() + def __init__(self, protocol, timeout = None): + protocol.register(['PFT:success', 'PFT:version:', 'PFT:fail', 'PFT:busy', 'PFT:ioerror', 'PTF:invalid'], self.process_input) + self.protocol = protocol + self.response_timeout = timeout or protocol.response_timeout + + def process_input(self, data): + #print(data) + self.responses.append(data) + + def await_response(self, timeout = None): + timeout = TimeOut(timeout or self.response_timeout) + while not len(self.responses): + time.sleep(0.0001) + if timeout.timedout(): + raise ReadTimeout() + + return self.responses.popleft() + + def connect(self): + self.protocol.send(FileTransferProtocol.protocol_id, FileTransferProtocol.Packet.QUERY); + + token, data = self.await_response() + if token != 'PFT:version:': + return False + + self.version, _, compression = data.split(':') + if compression != 'none': + algorithm, window, lookahead = compression.split(',') + self.compression = {'algorithm': algorithm, 'window': int(window), 'lookahead': int(lookahead)} + else: + self.compression = {'algorithm': 'none'} + + print("File Transfer version: {0}, compression: {1}".format(self.version, self.compression['algorithm'])) + + def open(self, filename, compression, dummy): + payload = b'\1' if dummy else b'\0' # dummy transfer + payload += b'\1' if compression else b'\0' # payload compression + payload += bytearray(filename, 'utf8') + b'\0'# target filename + null terminator + + timeout = TimeOut(5000) + token = None + self.protocol.send(FileTransferProtocol.protocol_id, FileTransferProtocol.Packet.OPEN, payload); + while token != 'PFT:success' and not timeout.timedout(): + try: + token, data = self.await_response(1000) + if token == 'PFT:success': + print(filename,"opened") + return + elif token == 'PFT:busy': + print("Broken transfer detected, purging") + self.abort() + time.sleep(0.1) + self.protocol.send(FileTransferProtocol.protocol_id, FileTransferProtocol.Packet.OPEN, payload); + timeout.reset() + elif token == 'PFT:fail': + raise Exception("Can not open file on client") + except ReadTimeout: + pass + raise ReadTimeout() + + def write(self, data): + self.protocol.send(FileTransferProtocol.protocol_id, FileTransferProtocol.Packet.WRITE, data); + + def close(self): + self.protocol.send(FileTransferProtocol.protocol_id, FileTransferProtocol.Packet.CLOSE); + token, data = self.await_response(1000) + if token == 'PFT:success': + print("File closed") + return + elif token == 'PFT:ioerror': + print("Client storage device IO error") + elif token == 'PFT:invalid': + print("No open file") + + def abort(self): + self.protocol.send(FileTransferProtocol.protocol_id, FileTransferProtocol.Packet.ABORT); + token, data = self.await_response() + if token == 'PFT:success': + print("Transfer Aborted") + + def copy(self, filename, dest_filename, compression, dummy): + self.connect() + + compression_support = heatshrink_exists and self.compression['algorithm'] == 'heatshrink' and compression + if compression and (not heatshrink_exists or not self.compression['algorithm'] == 'heatshrink'): + print("Compression not supported by client") + #compression_support = False + + data = open(filename, "rb").read() + filesize = len(data) + + self.open(dest_filename, compression_support, dummy) + + block_size = self.protocol.block_size + if compression_support: + data = heatshrink.encode(data, window_sz2=self.compression['window'], lookahead_sz2=self.compression['lookahead']) + + cratio = filesize / len(data) + + blocks = math.floor((len(data) + block_size - 1) / block_size) + kibs = 0 + dump_pctg = 0 + start_time = millis() + for i in range(blocks): + start = block_size * i + end = start + block_size + self.write(data[start:end]) + kibs = (( (i+1) * block_size) / 1024) / (millis() + 1 - start_time) * 1000 + if (i / blocks) >= dump_pctg: + print("\r{0:2.2f}% {1:4.2f}KiB/s {2} Errors: {3}".format((i / blocks) * 100, kibs, "[{0:4.2f}KiB/s]".format(kibs * cratio) if compression_support else "", self.protocol.errors), end='') + dump_pctg += 0.1 + print("\r{0:2.2f}% {1:4.2f}KiB/s {2} Errors: {3}".format(100, kibs, "[{0:4.2f}KiB/s]".format(kibs * cratio) if compression_support else "", self.protocol.errors)) # no one likes transfers finishing at 99.8% + + self.close() + print("Transfer complete") + + +class EchoProtocol(object): + def __init__(self, protocol): + protocol.register(['echo:'], self.process_input) + self.protocol = protocol + + def process_input(self, data): + print(data) diff --git a/buildroot/share/scripts/upload.py b/buildroot/share/scripts/upload.py new file mode 100644 index 0000000000..4a152067a4 --- /dev/null +++ b/buildroot/share/scripts/upload.py @@ -0,0 +1,274 @@ +import argparse +import sys +import os +import time +import random +import serial + +Import("env") + +# Needed (only) for compression, but there are problems with pip install heatshrink +#try: +# import heatshrink +#except ImportError: +# # Install heatshrink +# print("Installing 'heatshrink' python module...") +# env.Execute(env.subst("$PYTHONEXE -m pip install heatshrink")) +# +# Not tested: If it's safe to install python libraries in PIO python try: +# env.Execute(env.subst("$PYTHONEXE -m pip install https://github.com/p3p/pyheatshrink/releases/download/0.3.3/pyheatshrink-pip.zip")) + +import MarlinBinaryProtocol + +# Internal debug flag +Debug = False + +#-----------------# +# Upload Callback # +#-----------------# +def Upload(source, target, env): + + #------------------# + # Marlin functions # + #------------------# + def _GetMarlinEnv(marlinEnv, feature): + if not marlinEnv: return None + return marlinEnv[feature] if feature in marlinEnv else None + + #----------------# + # Port functions # + #----------------# + def _GetUploadPort(env): + if Debug: print('Autodetecting upload port...') + env.AutodetectUploadPort(env) + port = env.subst('$UPLOAD_PORT') + if not port: + raise Exception('Error detecting the upload port.') + if Debug: print('OK') + return port + + #-------------------------# + # Simple serial functions # + #-------------------------# + def _Send(data): + if Debug: print(f'>> {data}') + strdata = bytearray(data, 'utf8') + b'\n' + port.write(strdata) + time.sleep(0.010) + + def _Recv(): + clean_responses = [] + responses = port.readlines() + for Resp in responses: + # Test: suppress invaid chars (coming from debug info) + try: + clean_response = Resp.decode('utf8').rstrip().lstrip() + clean_responses.append(clean_response) + except: + pass + if Debug: print(f'<< {clean_response}') + return clean_responses + + #------------------# + # SDCard functions # + #------------------# + def _CheckSDCard(): + if Debug: print('Checking SD card...') + _Send('M21') + Responses = _Recv() + if len(Responses) < 1 or not any('SD card ok' in r for r in Responses): + raise Exception('Error accessing SD card') + if Debug: print('SD Card OK') + return True + + #----------------# + # File functions # + #----------------# + def _GetFirmwareFiles(): + if Debug: print('Get firmware files...') + _Send('M20 F') + Responses = _Recv() + if len(Responses) < 3 or not any('file list' in r for r in Responses): + raise Exception('Error getting firmware files') + if Debug: print('OK') + return Responses + + def _FilterFirmwareFiles(FirmwareList): + Firmwares = [] + for FWFile in FirmwareList: + if not '/' in FWFile and '.BIN' in FWFile: + idx = FWFile.index('.BIN') + Firmwares.append(FWFile[:idx+4]) + return Firmwares + + def _RemoveFirmwareFile(FirmwareFile): + _Send(f'M30 /{FirmwareFile}') + Responses = _Recv() + Removed = len(Responses) >= 1 and any('File deleted' in r for r in Responses) + if not Removed: + raise Exception(f"Firmware file '{FirmwareFile}' not removed") + return Removed + + + #---------------------# + # Callback Entrypoint # + #---------------------# + port = None + protocol = None + filetransfer = None + + # Get Marlin evironment vars + MarlinEnv = env['MARLIN_FEATURES'] + marlin_pioenv = _GetMarlinEnv(MarlinEnv, 'PIOENV') + marlin_motherboard = _GetMarlinEnv(MarlinEnv, 'MOTHERBOARD') + marlin_board_info_name = _GetMarlinEnv(MarlinEnv, 'BOARD_INFO_NAME') + marlin_board_custom_build_flags = _GetMarlinEnv(MarlinEnv, 'BOARD_CUSTOM_BUILD_FLAGS') + marlin_firmware_bin = _GetMarlinEnv(MarlinEnv, 'FIRMWARE_BIN') + marlin_custom_firmware_upload = _GetMarlinEnv(MarlinEnv, 'CUSTOM_FIRMWARE_UPLOAD') is not None + marlin_short_build_version = _GetMarlinEnv(MarlinEnv, 'SHORT_BUILD_VERSION') + marlin_string_config_h_author = _GetMarlinEnv(MarlinEnv, 'STRING_CONFIG_H_AUTHOR') + + # Get firmware upload params + upload_firmware_source_name = str(source[0]) # Source firmware filename + upload_speed = env['UPLOAD_SPEED'] if 'UPLOAD_SPEED' in env else 115200 + # baud rate of serial connection + upload_port = _GetUploadPort(env) # Serial port to use + + # Set local upload params + upload_firmware_target_name = os.path.basename(upload_firmware_source_name) # WARNING! Need rework on "binary_stream" to allow filename > 8.3 + # Target firmware filename + upload_timeout = 1000 # Communication timout, lossy/slow connections need higher values + upload_blocksize = 512 # Transfer block size. 512 = Autodetect + upload_compression = True # Enable compression + upload_error_ratio = 0 # Simulated corruption ratio + upload_test = False # Benchmark the serial link without storing the file + upload_reset = True # Trigger a soft reset for firmware update after the upload + + # Set local upload params based on board type to change script behavior + # "upload_delete_old_bins": delete all *.bin files in the root of SD Card + upload_delete_old_bins = marlin_motherboard in ['BOARD_CREALITY_V4', 'BOARD_CREALITY_V4210', 'BOARD_CREALITY_V423', 'BOARD_CREALITY_V427', + 'BOARD_CREALITY_V431', 'BOARD_CREALITY_V452', 'BOARD_CREALITY_V453', 'BOARD_CREALITY_V24S1'] + try: + + # Start upload job + print(f"Uploading firmware '{os.path.basename(upload_firmware_target_name)}' to '{marlin_motherboard}' via '{upload_port}'") + + # Dump some debug info + if Debug: + print('Upload using:') + print('---- Marlin --------------------') + print(f' PIOENV : {marlin_pioenv}') + print(f' SHORT_BUILD_VERSION : {marlin_short_build_version}') + print(f' STRING_CONFIG_H_AUTHOR : {marlin_string_config_h_author}') + print(f' MOTHERBOARD : {marlin_motherboard}') + print(f' BOARD_INFO_NAME : {marlin_board_info_name}') + print(f' CUSTOM_BUILD_FLAGS : {marlin_board_custom_build_flags}') + print(f' FIRMWARE_BIN : {marlin_firmware_bin}') + print(f' CUSTOM_FIRMWARE_UPLOAD : {marlin_custom_firmware_upload}') + print('---- Upload parameters ---------') + print(f' Source : {upload_firmware_source_name}') + print(f' Target : {upload_firmware_target_name}') + print(f' Port : {upload_port} @ {upload_speed} baudrate') + print(f' Timeout : {upload_timeout}') + print(f' Block size : {upload_blocksize}') + print(f' Compression : {upload_compression}') + print(f' Error ratio : {upload_error_ratio}') + print(f' Test : {upload_test}') + print(f' Reset : {upload_reset}') + print('--------------------------------') + + # Custom implementations based on board parameters + + # Delete all *.bin files on the root of SD Card (if flagged) + if upload_delete_old_bins: + # CUSTOM_FIRMWARE_UPLOAD is needed for this feature + if not marlin_custom_firmware_upload: + raise Exception(f"CUSTOM_FIRMWARE_UPLOAD must be enabled in 'Configuration_adv.h' for '{marlin_motherboard}'") + + # Generate a new 8.3 random filename + # This board remember the last firmware filename and doesn't allow to flash from that filename + upload_firmware_target_name = f"fw-{''.join(random.choices('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', k=5))}.BIN" + print(f"Board {marlin_motherboard}: Overriding firmware filename to '{upload_firmware_target_name}'") + + # Init serial port + port = serial.Serial(upload_port, baudrate = upload_speed, write_timeout = 0, timeout = 0.1) + port.reset_input_buffer() + + # Check SD card status + _CheckSDCard() + + # Get firmware files + FirmwareFiles = _GetFirmwareFiles() + if Debug: + for FirmwareFile in FirmwareFiles: + print(f'Found: {FirmwareFile}') + + # Get all 1st level firmware files (to remove) + OldFirmwareFiles = _FilterFirmwareFiles(FirmwareFiles[1:len(FirmwareFiles)-2]) # Skip header and footers of list + if len(OldFirmwareFiles) == 0: + print('No old firmware files to delete') + else: + print(f"Remove {len(OldFirmwareFiles)} old firmware file{'s' if len(OldFirmwareFiles) != 1 else ''}:") + for OldFirmwareFile in OldFirmwareFiles: + print(f" -Removing- '{OldFirmwareFile}'...") + print(' OK' if _RemoveFirmwareFile(OldFirmwareFile) else ' Error!') + + # Close serial + port.close() + + # Cleanup completed + if Debug: print('Cleanup completed') + + # WARNING! The serial port must be closed here because the serial transfer that follow needs it! + + # Upload firmware file + if Debug: print(f"Copy '{upload_firmware_source_name}' --> '{upload_firmware_target_name}'") + protocol = MarlinBinaryProtocol.Protocol(upload_port, upload_speed, upload_blocksize, float(upload_error_ratio), int(upload_timeout)) + #echologger = MarlinBinaryProtocol.EchoProtocol(protocol) + protocol.connect() + filetransfer = MarlinBinaryProtocol.FileTransferProtocol(protocol) + filetransfer.copy(upload_firmware_source_name, upload_firmware_target_name, upload_compression, upload_test) + protocol.disconnect() + + # Notify upload completed + protocol.send_ascii('M117 Firmware uploaded') + + # Remount SD card + print('Wait for SD card release...') + time.sleep(1) + print('Remount SD card') + protocol.send_ascii('M21') + + # Trigger firmware update + if upload_reset: + print('Trigger firmware update...') + protocol.send_ascii('M997', True) + + protocol: protocol.shutdown() + print('Firmware update completed') + + except KeyboardInterrupt: + if port: port.close() + if filetransfer: filetransfer.abort() + if protocol: protocol.shutdown() + raise + + except serial.SerialException as se: + if port: port.close() + print(f'Serial excepion: {se}') + raise Exception(se) + + except MarlinBinaryProtocol.FatalError: + if port: port.close() + if protocol: protocol.shutdown() + print('Too many retries, Abort') + raise + + except: + if port: port.close() + if protocol: protocol.shutdown() + print('Firmware not updated') + raise + +# Attach custom upload callback +env.Replace(UPLOADCMD=Upload) diff --git a/ini/stm32f1.ini b/ini/stm32f1.ini index 939f51ffbf..a0957dbaec 100644 --- a/ini/stm32f1.ini +++ b/ini/stm32f1.ini @@ -100,7 +100,6 @@ build_flags = ${common_STM32F103RC_variant.build_flags} -DTIMER_SERVO=TIM5 -DDEFAULT_SPI=3 build_unflags = ${common_STM32F103RC_variant.build_unflags} -DUSBCON -DUSBD_USE_CDC -monitor_speed = 115200 debug_tool = stlink # @@ -124,6 +123,12 @@ monitor_speed = 115200 debug_tool = jlink upload_protocol = jlink +[env:STM32F103RET6_creality_xfer] +extends = env:STM32F103RET6_creality +extra_scripts = ${env:STM32F103RET6_creality.extra_scripts} + pre:buildroot/share/scripts/upload.py +upload_protocol = custom + # # BigTree SKR Mini E3 V2.0 & DIP / SKR CR6 (STM32F103RET6 ARM Cortex-M3) # From 0026430835eb4d707cc3d14e44c887e0ad9f39ed Mon Sep 17 00:00:00 2001 From: Miguel Risco-Castillo Date: Sun, 9 Jan 2022 02:24:56 -0500 Subject: [PATCH 337/532] =?UTF-8?q?=F0=9F=A9=B9=20Reset=20DWIN=20CrealityU?= =?UTF-8?q?I=20print=20progress=20on=20start=20(#23481)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/creality/dwin.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Marlin/src/lcd/e3v2/creality/dwin.cpp b/Marlin/src/lcd/e3v2/creality/dwin.cpp index 3eed9650c1..03f08ac184 100644 --- a/Marlin/src/lcd/e3v2/creality/dwin.cpp +++ b/Marlin/src/lcd/e3v2/creality/dwin.cpp @@ -1754,7 +1754,7 @@ void update_variable() { if (_new_hotend_target) Draw_Stat_Int(25 + 4 * STAT_CHR_W + 6, 384, _hotendtarget); - static int16_t _flow = planner.flow_percentage[0]; + static int16_t _flow = 0; if (_flow != planner.flow_percentage[0]) { _flow = planner.flow_percentage[0]; Draw_Stat_Int(116 + 2 * STAT_CHR_W, 417, _flow); @@ -1768,7 +1768,7 @@ void update_variable() { Draw_Stat_Int(25 + 4 * STAT_CHR_W + 6, 417, _bedtarget); #endif - static int16_t _feedrate = 100; + static int16_t _feedrate = 0; if (_feedrate != feedrate_percentage) { _feedrate = feedrate_percentage; Draw_Stat_Int(116 + 2 * STAT_CHR_W, 384, _feedrate); @@ -2269,6 +2269,8 @@ void HMI_SelectFile() { // thermalManager.fan_speed[i] = 255; #endif + _card_percent = 0; + _remain_time = 0; Goto_PrintProcess(); } } @@ -4176,10 +4178,7 @@ void EachMomentUpdate() { } #if ENABLED(POWER_LOSS_RECOVERY) else if (DWIN_lcd_sd_status && recovery.dwin_flag) { // resume print before power off - static bool recovery_flag = false; - recovery.dwin_flag = false; - recovery_flag = true; auto update_selection = [&](const bool sel) { HMI_flag.select_flag = sel; @@ -4199,6 +4198,7 @@ void EachMomentUpdate() { DWIN_Draw_String(true, font8x16, Popup_Text_Color, Color_Bg_Window, npos, 252, name); DWIN_UpdateLCD(); + bool recovery_flag = true; while (recovery_flag) { EncoderState encoder_diffState = Encoder_ReceiveAnalyze(); if (encoder_diffState != ENCODER_DIFF_NO) { From e0d19f9f419bd6150324672872a2314e98ee5e6b Mon Sep 17 00:00:00 2001 From: Miguel Risco-Castillo Date: Sun, 9 Jan 2022 02:29:36 -0500 Subject: [PATCH 338/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20EEPROM=5FINIT=5FNO?= =?UTF-8?q?W=20build=20hash=20test=20(#23479)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/settings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index a152575454..750aab74fd 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -1584,7 +1584,7 @@ void MarlinSettings::postprocess() { #if ENABLED(EEPROM_INIT_NOW) uint32_t stored_hash; EEPROM_READ_ALWAYS(stored_hash); - if (stored_hash != build_hash) { EEPROM_FINISH(); return true; } + if (stored_hash != build_hash) { EEPROM_FINISH(); return false; } #endif uint16_t stored_crc; From 6ce0c682bb0ab96dcb3e1d6720c5cc0ff66dad9a Mon Sep 17 00:00:00 2001 From: Miguel Risco-Castillo Date: Sun, 9 Jan 2022 03:37:09 -0500 Subject: [PATCH 339/532] =?UTF-8?q?=F0=9F=9A=B8=20BLTouch=20HS=20menu=20it?= =?UTF-8?q?em=20for=20DWIN=20Enhanced=20UI=20(#23480)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 391 ++++++++++++++------------ Marlin/src/lcd/e3v2/enhanced/dwinui.h | 5 +- 2 files changed, 208 insertions(+), 188 deletions(-) diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index 294d09956a..f12f981b72 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -71,6 +71,10 @@ #include "../../../module/probe.h" #endif +#ifdef BLTOUCH_HS_MODE + #include "../../../feature/bltouch.h" +#endif + #if EITHER(BABYSTEP_ZPROBE_OFFSET, JUST_BABYSTEP) #include "../../../feature/babystep.h" #endif @@ -2300,6 +2304,14 @@ void SetPID(celsius_t t, heater_id_t h) { } void ProbeStow() { probe.stow(); } void ProbeDeploy() { probe.deploy(); } + + #ifdef BLTOUCH_HS_MODE + void SetHSMode() { + bltouch.high_speed_mode = !bltouch.high_speed_mode; + Draw_Chkb_Line(CurrentMenu->line(), bltouch.high_speed_mode); + DWIN_UpdateLCD(); + } + #endif #endif #if HAS_FILAMENT_SENSOR @@ -2757,6 +2769,10 @@ void onDrawLanguage(MenuItemClass* menuitem, int8_t line) { void onDrawEnableSound(MenuItemClass* menuitem, int8_t line) { onDrawChkbMenu(menuitem, line, ui.buzzer_enabled); } #endif +#ifdef BLTOUCH_HS_MODE + void onDrawHSMode(MenuItemClass* menuitem, int8_t line) { onDrawChkbMenu(menuitem, line, bltouch.high_speed_mode); } +#endif + void onDrawSelColorItem(MenuItemClass* menuitem, int8_t line) { const uint16_t color = *(uint16_t*)static_cast(menuitem)->value; DWIN_Draw_Rectangle(0, HMI_data.Highlight_Color, ICOX + 1, MBASE(line) - 1 + 1, ICOX + 18, MBASE(line) - 1 + 18); @@ -3177,41 +3193,41 @@ void Draw_Prepare_Menu() { CurrentMenu = PrepareMenu; SetMenuTitle({133, 1, 28, 13}, GET_TEXT_F(MSG_PREPARE)); DWINUI::MenuItemsPrepare(13); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu); #if ENABLED(ADVANCED_PAUSE_FEATURE) - ADDMENUITEM(ICON_FilMan, GET_TEXT_F(MSG_FILAMENT_MAN), onDrawSubMenu, Draw_FilamentMan_Menu); + MENU_ITEM(ICON_FilMan, GET_TEXT_F(MSG_FILAMENT_MAN), onDrawSubMenu, Draw_FilamentMan_Menu); #endif - ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_MOVE_AXIS), onDrawMoveSubMenu, Goto_Move_Menu); - ADDMENUITEM(ICON_Tram, GET_TEXT_F(MSG_BED_TRAMMING), onDrawSubMenu, Draw_Tramming_Menu); - ADDMENUITEM(ICON_CloseMotor, GET_TEXT_F(MSG_DISABLE_STEPPERS), onDrawDisableMotors, DisableMotors); + MENU_ITEM(ICON_Axis, GET_TEXT_F(MSG_MOVE_AXIS), onDrawMoveSubMenu, Goto_Move_Menu); + MENU_ITEM(ICON_Tram, GET_TEXT_F(MSG_BED_TRAMMING), onDrawSubMenu, Draw_Tramming_Menu); + MENU_ITEM(ICON_CloseMotor, GET_TEXT_F(MSG_DISABLE_STEPPERS), onDrawDisableMotors, DisableMotors); #if ENABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU) - ADDMENUITEM(ICON_Homing, GET_TEXT_F(MSG_HOMING), onDrawSubMenu, Draw_Homing_Menu); + MENU_ITEM(ICON_Homing, GET_TEXT_F(MSG_HOMING), onDrawSubMenu, Draw_Homing_Menu); #else - ADDMENUITEM(ICON_Homing, GET_TEXT_F(MSG_AUTO_HOME), onDrawAutoHome, AutoHome); + MENU_ITEM(ICON_Homing, GET_TEXT_F(MSG_AUTO_HOME), onDrawAutoHome, AutoHome); #endif #if ENABLED(MESH_BED_LEVELING) - ADDMENUITEM(ICON_ManualMesh, GET_TEXT_F(MSG_MANUAL_MESH), onDrawSubMenu, Draw_ManualMesh_Menu); + MENU_ITEM(ICON_ManualMesh, GET_TEXT_F(MSG_MANUAL_MESH), onDrawSubMenu, Draw_ManualMesh_Menu); #endif #if HAS_ZOFFSET_ITEM #if HAS_BED_PROBE - ADDMENUITEM(ICON_SetZOffset, GET_TEXT_F(MSG_PROBE_WIZARD), onDrawSubMenu, Draw_ZOffsetWiz_Menu); + MENU_ITEM(ICON_SetZOffset, GET_TEXT_F(MSG_PROBE_WIZARD), onDrawSubMenu, Draw_ZOffsetWiz_Menu); #elif ENABLED(BABYSTEPPING) - ADDMENUITEM_P(ICON_Zoffset, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetZOffset, &BABY_Z_VAR); + EDIT_ITEM(ICON_Zoffset, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetZOffset, &BABY_Z_VAR); #else - ADDMENUITEM(ICON_SetHome, GET_TEXT_F(MSG_SET_HOME_OFFSETS), onDrawHomeOffset, SetHome); + MENU_ITEM(ICON_SetHome, GET_TEXT_F(MSG_SET_HOME_OFFSETS), onDrawHomeOffset, SetHome); #endif #endif #if HAS_PREHEAT - ADDMENUITEM(ICON_PLAPreheat, GET_TEXT_F(MSG_PREHEAT_1), onDrawPreheat1, DoPreheat0); + MENU_ITEM(ICON_PLAPreheat, GET_TEXT_F(MSG_PREHEAT_1), onDrawPreheat1, DoPreheat0); #if PREHEAT_COUNT > 1 - ADDMENUITEM(ICON_ABSPreheat, PSTR("Preheat " PREHEAT_2_LABEL), onDrawPreheat2, DoPreheat1); + MENU_ITEM(ICON_ABSPreheat, PSTR("Preheat " PREHEAT_2_LABEL), onDrawPreheat2, DoPreheat1); #endif #if PREHEAT_COUNT > 2 - ADDMENUITEM(ICON_CustomPreheat, GET_TEXT_F(MSG_PREHEAT_CUSTOM), onDrawMenuItem, DoPreheat2); + MENU_ITEM(ICON_CustomPreheat, GET_TEXT_F(MSG_PREHEAT_CUSTOM), onDrawMenuItem, DoPreheat2); #endif #endif - ADDMENUITEM(ICON_Cool, GET_TEXT_F(MSG_COOLDOWN), onDrawCooldown, DoCoolDown); - ADDMENUITEM(ICON_Language, PSTR(GET_TEXT_F(MSG_UI_LANGUAGE)), onDrawLanguage, SetLanguage); + MENU_ITEM(ICON_Cool, GET_TEXT_F(MSG_COOLDOWN), onDrawCooldown, DoCoolDown); + MENU_ITEM(ICON_Language, PSTR(GET_TEXT_F(MSG_UI_LANGUAGE)), onDrawLanguage, SetLanguage); } CurrentMenu->draw(); } @@ -3224,12 +3240,12 @@ void Draw_Tramming_Menu() { CurrentMenu = TrammingMenu; SetMenuTitle({0}, GET_TEXT_F(MSG_BED_TRAMMING)); // TODO: Chinese, English "Bed Tramming" JPG DWINUI::MenuItemsPrepare(6); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu); - ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_FL), onDrawMenuItem, TramFL); - ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_FR), onDrawMenuItem, TramFR); - ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_BR), onDrawMenuItem, TramBR); - ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_BL), onDrawMenuItem, TramBL); - ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_C ), onDrawMenuItem, TramC ); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu); + MENU_ITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_FL), onDrawMenuItem, TramFL); + MENU_ITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_FR), onDrawMenuItem, TramFR); + MENU_ITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_BR), onDrawMenuItem, TramBR); + MENU_ITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_BL), onDrawMenuItem, TramBL); + MENU_ITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_C ), onDrawMenuItem, TramC ); } CurrentMenu->draw(); } @@ -3241,17 +3257,17 @@ void Draw_Control_Menu() { CurrentMenu = ControlMenu; SetMenuTitle({103, 1, 28, 14}, GET_TEXT_F(MSG_CONTROL)); DWINUI::MenuItemsPrepare(9); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu); - ADDMENUITEM(ICON_Temperature, GET_TEXT_F(MSG_TEMPERATURE), onDrawTempSubMenu, Draw_Temperature_Menu); - ADDMENUITEM(ICON_Motion, GET_TEXT_F(MSG_MOTION), onDrawMotionSubMenu, Draw_Motion_Menu); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu); + MENU_ITEM(ICON_Temperature, GET_TEXT_F(MSG_TEMPERATURE), onDrawTempSubMenu, Draw_Temperature_Menu); + MENU_ITEM(ICON_Motion, GET_TEXT_F(MSG_MOTION), onDrawMotionSubMenu, Draw_Motion_Menu); #if ENABLED(EEPROM_SETTINGS) - ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT_F(MSG_STORE_EEPROM), onDrawWriteEeprom, WriteEeprom); - ADDMENUITEM(ICON_ReadEEPROM, GET_TEXT_F(MSG_LOAD_EEPROM), onDrawReadEeprom, ReadEeprom); - ADDMENUITEM(ICON_ResumeEEPROM, GET_TEXT_F(MSG_RESTORE_DEFAULTS), onDrawResetEeprom, ResetEeprom); + MENU_ITEM(ICON_WriteEEPROM, GET_TEXT_F(MSG_STORE_EEPROM), onDrawWriteEeprom, WriteEeprom); + MENU_ITEM(ICON_ReadEEPROM, GET_TEXT_F(MSG_LOAD_EEPROM), onDrawReadEeprom, ReadEeprom); + MENU_ITEM(ICON_ResumeEEPROM, GET_TEXT_F(MSG_RESTORE_DEFAULTS), onDrawResetEeprom, ResetEeprom); #endif - ADDMENUITEM(ICON_Reboot, GET_TEXT_F(MSG_RESET_PRINTER), onDrawMenuItem, RebootPrinter); - ADDMENUITEM(ICON_AdvSet, GET_TEXT_F(MSG_ADVANCED_SETTINGS), onDrawSubMenu, Draw_AdvancedSettings_Menu); - ADDMENUITEM(ICON_Info, GET_TEXT_F(MSG_INFO_SCREEN), onDrawInfoSubMenu, Goto_Info_Menu); + MENU_ITEM(ICON_Reboot, GET_TEXT_F(MSG_RESET_PRINTER), onDrawMenuItem, RebootPrinter); + MENU_ITEM(ICON_AdvSet, GET_TEXT_F(MSG_ADVANCED_SETTINGS), onDrawSubMenu, Draw_AdvancedSettings_Menu); + MENU_ITEM(ICON_Info, GET_TEXT_F(MSG_INFO_SCREEN), onDrawInfoSubMenu, Goto_Info_Menu); } CurrentMenu->draw(); } @@ -3263,43 +3279,43 @@ void Draw_AdvancedSettings_Menu() { CurrentMenu = AdvancedSettings; SetMenuTitle({0}, GET_TEXT_F(MSG_ADVANCED_SETTINGS)); // TODO: Chinese, English "Advanced Settings" JPG DWINUI::MenuItemsPrepare(15); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu); #if HAS_HOME_OFFSET - ADDMENUITEM(ICON_HomeOffset, GET_TEXT_F(MSG_SET_HOME_OFFSETS), onDrawSubMenu, Draw_HomeOffset_Menu); + MENU_ITEM(ICON_HomeOffset, GET_TEXT_F(MSG_SET_HOME_OFFSETS), onDrawSubMenu, Draw_HomeOffset_Menu); #endif #if HAS_BED_PROBE - ADDMENUITEM(ICON_ProbeSet, GET_TEXT_F(MSG_ZPROBE_SETTINGS), onDrawSubMenu, Draw_ProbeSet_Menu); + MENU_ITEM(ICON_ProbeSet, GET_TEXT_F(MSG_ZPROBE_SETTINGS), onDrawSubMenu, Draw_ProbeSet_Menu); #endif #if HAS_HOTEND - ADDMENUITEM(ICON_PIDNozzle, F("Hotend PID Settings"), onDrawSubMenu, Draw_HotendPID_Menu); + MENU_ITEM(ICON_PIDNozzle, F("Hotend PID Settings"), onDrawSubMenu, Draw_HotendPID_Menu); #endif #if HAS_HEATED_BED - ADDMENUITEM(ICON_PIDbed, F("Bed PID Settings"), onDrawSubMenu, Draw_BedPID_Menu); + MENU_ITEM(ICON_PIDbed, F("Bed PID Settings"), onDrawSubMenu, Draw_BedPID_Menu); #endif #if HAS_FILAMENT_SENSOR - ADDMENUITEM(ICON_FilSet, GET_TEXT_F(MSG_FILAMENT_SET), onDrawSubMenu, Draw_FilSet_Menu); + MENU_ITEM(ICON_FilSet, GET_TEXT_F(MSG_FILAMENT_SET), onDrawSubMenu, Draw_FilSet_Menu); #endif #if ENABLED(POWER_LOSS_RECOVERY) - ADDMENUITEM(ICON_Pwrlossr, GET_TEXT_F(MSG_OUTAGE_RECOVERY), onDrawPwrLossR, SetPwrLossr); + MENU_ITEM(ICON_Pwrlossr, GET_TEXT_F(MSG_OUTAGE_RECOVERY), onDrawPwrLossR, SetPwrLossr); #endif #if HAS_LCD_BRIGHTNESS - ADDMENUITEM_P(ICON_Brightness, GET_TEXT_F(MSG_BRIGHTNESS), onDrawPInt8Menu, SetBrightness, &ui.brightness); + EDIT_ITEM(ICON_Brightness, GET_TEXT_F(MSG_BRIGHTNESS), onDrawPInt8Menu, SetBrightness, &ui.brightness); #endif - ADDMENUITEM(ICON_Scolor, GET_TEXT_F(MSG_COLORS_SELECT), onDrawSubMenu, Draw_SelectColors_Menu); + MENU_ITEM(ICON_Scolor, GET_TEXT_F(MSG_COLORS_SELECT), onDrawSubMenu, Draw_SelectColors_Menu); #if ENABLED(SOUND_MENU_ITEM) - ADDMENUITEM(ICON_Sound, GET_TEXT_F(MSG_SOUND_ENABLE), onDrawEnableSound, SetEnableSound); + MENU_ITEM(ICON_Sound, GET_TEXT_F(MSG_SOUND_ENABLE), onDrawEnableSound, SetEnableSound); #endif #if HAS_MESH - ADDMENUITEM(ICON_MeshViewer, GET_TEXT_F(MSG_MESH_VIEW), onDrawSubMenu, DWIN_MeshViewer); + MENU_ITEM(ICON_MeshViewer, GET_TEXT_F(MSG_MESH_VIEW), onDrawSubMenu, DWIN_MeshViewer); #endif #if HAS_ESDIAG - ADDMENUITEM(ICON_ESDiag, F("End-stops diag."), onDrawSubMenu, Draw_EndStopDiag); + MENU_ITEM(ICON_ESDiag, F("End-stops diag."), onDrawSubMenu, Draw_EndStopDiag); #endif #if ENABLED(PRINTCOUNTER) - ADDMENUITEM(ICON_PrintStats, GET_TEXT_F(MSG_INFO_STATS_MENU), onDrawSubMenu, Draw_PrintStats); - ADDMENUITEM(ICON_PrintStatsReset, GET_TEXT_F(MSG_INFO_PRINT_COUNT_RESET), onDrawSubMenu, PrintStats.Reset); + MENU_ITEM(ICON_PrintStats, GET_TEXT_F(MSG_INFO_STATS_MENU), onDrawSubMenu, Draw_PrintStats); + MENU_ITEM(ICON_PrintStatsReset, GET_TEXT_F(MSG_INFO_PRINT_COUNT_RESET), onDrawSubMenu, PrintStats.Reset); #endif - ADDMENUITEM(ICON_Lock, GET_TEXT_F(MSG_LOCKSCREEN), onDrawMenuItem, DWIN_LockScreen); + MENU_ITEM(ICON_Lock, GET_TEXT_F(MSG_LOCKSCREEN), onDrawMenuItem, DWIN_LockScreen); } CurrentMenu->draw(); } @@ -3311,12 +3327,12 @@ void Draw_Move_Menu() { CurrentMenu = MoveMenu; SetMenuTitle({192, 1, 42, 14}, GET_TEXT_F(MSG_MOVE_AXIS)); DWINUI::MenuItemsPrepare(5); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu); - ADDMENUITEM_P(ICON_MoveX, GET_TEXT_F(MSG_MOVE_X), onDrawMoveX, SetMoveX, ¤t_position.x); - ADDMENUITEM_P(ICON_MoveY, GET_TEXT_F(MSG_MOVE_Y), onDrawMoveY, SetMoveY, ¤t_position.y); - ADDMENUITEM_P(ICON_MoveZ, GET_TEXT_F(MSG_MOVE_Z), onDrawMoveZ, SetMoveZ, ¤t_position.z); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu); + EDIT_ITEM(ICON_MoveX, GET_TEXT_F(MSG_MOVE_X), onDrawMoveX, SetMoveX, ¤t_position.x); + EDIT_ITEM(ICON_MoveY, GET_TEXT_F(MSG_MOVE_Y), onDrawMoveY, SetMoveY, ¤t_position.y); + EDIT_ITEM(ICON_MoveZ, GET_TEXT_F(MSG_MOVE_Z), onDrawMoveZ, SetMoveZ, ¤t_position.z); #if HAS_HOTEND - ADDMENUITEM_P(ICON_Extruder, GET_TEXT_F(MSG_MOVE_E), onDrawMoveE, SetMoveE, ¤t_position.e); + EDIT_ITEM(ICON_Extruder, GET_TEXT_F(MSG_MOVE_E), onDrawMoveE, SetMoveE, ¤t_position.e); #endif } CurrentMenu->draw(); @@ -3331,10 +3347,10 @@ void Draw_Move_Menu() { CurrentMenu = HomeOffMenu; SetMenuTitle({0}, GET_TEXT_F(MSG_SET_HOME_OFFSETS)); // TODO: Chinese, English "Set Home Offsets" JPG DWINUI::MenuItemsPrepare(4); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu); - ADDMENUITEM_P(ICON_HomeOffsetX, GET_TEXT_F(MSG_HOME_OFFSET_X), onDrawPFloatMenu, SetHomeOffsetX, &home_offset[X_AXIS]); - ADDMENUITEM_P(ICON_HomeOffsetY, GET_TEXT_F(MSG_HOME_OFFSET_Y), onDrawPFloatMenu, SetHomeOffsetY, &home_offset[Y_AXIS]); - ADDMENUITEM_P(ICON_HomeOffsetZ, GET_TEXT_F(MSG_HOME_OFFSET_Z), onDrawPFloatMenu, SetHomeOffsetZ, &home_offset[Z_AXIS]); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu); + EDIT_ITEM(ICON_HomeOffsetX, GET_TEXT_F(MSG_HOME_OFFSET_X), onDrawPFloatMenu, SetHomeOffsetX, &home_offset[X_AXIS]); + EDIT_ITEM(ICON_HomeOffsetY, GET_TEXT_F(MSG_HOME_OFFSET_Y), onDrawPFloatMenu, SetHomeOffsetY, &home_offset[Y_AXIS]); + EDIT_ITEM(ICON_HomeOffsetZ, GET_TEXT_F(MSG_HOME_OFFSET_Z), onDrawPFloatMenu, SetHomeOffsetZ, &home_offset[Z_AXIS]); } CurrentMenu->draw(); } @@ -3347,14 +3363,17 @@ void Draw_Move_Menu() { if (CurrentMenu != ProbeSetMenu) { CurrentMenu = ProbeSetMenu; SetMenuTitle({0}, GET_TEXT_F(MSG_ZPROBE_SETTINGS)); // TODO: Chinese, English "Probe Settings" JPG - DWINUI::MenuItemsPrepare(7); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu); - ADDMENUITEM_P(ICON_ProbeOffsetX, GET_TEXT_F(MSG_ZPROBE_XOFFSET), onDrawPFloatMenu, SetProbeOffsetX, &probe.offset.x); - ADDMENUITEM_P(ICON_ProbeOffsetY, GET_TEXT_F(MSG_ZPROBE_YOFFSET), onDrawPFloatMenu, SetProbeOffsetY, &probe.offset.y); - ADDMENUITEM_P(ICON_ProbeOffsetZ, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetProbeOffsetZ, &probe.offset.z); - ADDMENUITEM(ICON_ProbeTest, GET_TEXT_F(MSG_M48_TEST), onDrawMenuItem, ProbeTest); - ADDMENUITEM(ICON_ProbeStow, GET_TEXT_F(MSG_MANUAL_STOW), onDrawMenuItem, ProbeStow); - ADDMENUITEM(ICON_ProbeDeploy, GET_TEXT_F(MSG_MANUAL_DEPLOY), onDrawMenuItem, ProbeDeploy); + DWINUI::MenuItemsPrepare(8); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu); + EDIT_ITEM(ICON_ProbeOffsetX, GET_TEXT_F(MSG_ZPROBE_XOFFSET), onDrawPFloatMenu, SetProbeOffsetX, &probe.offset.x); + EDIT_ITEM(ICON_ProbeOffsetY, GET_TEXT_F(MSG_ZPROBE_YOFFSET), onDrawPFloatMenu, SetProbeOffsetY, &probe.offset.y); + EDIT_ITEM(ICON_ProbeOffsetZ, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetProbeOffsetZ, &probe.offset.z); + #ifdef BLTOUCH_HS_MODE + MENU_ITEM(ICON_HSMode, F("Enable HS mode"), onDrawHSMode, SetHSMode); + #endif + MENU_ITEM(ICON_ProbeTest, GET_TEXT_F(MSG_M48_TEST), onDrawMenuItem, ProbeTest); + MENU_ITEM(ICON_ProbeStow, GET_TEXT_F(MSG_MANUAL_STOW), onDrawMenuItem, ProbeStow); + MENU_ITEM(ICON_ProbeDeploy, GET_TEXT_F(MSG_MANUAL_DEPLOY), onDrawMenuItem, ProbeDeploy); } CurrentMenu->draw(); } @@ -3368,25 +3387,25 @@ void Draw_Move_Menu() { CurrentMenu = FilSetMenu; CurrentMenu->MenuTitle.SetCaption(GET_TEXT_F(MSG_FILAMENT_SET)); DWINUI::MenuItemsPrepare(10); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu); #if HAS_FILAMENT_SENSOR - ADDMENUITEM(ICON_Runout, GET_TEXT_F(MSG_RUNOUT_ENABLE), onDrawRunoutEnable, SetRunoutEnable); + MENU_ITEM(ICON_Runout, GET_TEXT_F(MSG_RUNOUT_ENABLE), onDrawRunoutEnable, SetRunoutEnable); #endif #if HAS_FILAMENT_RUNOUT_DISTANCE - ADDMENUITEM_P(ICON_Runout, F("Runout Distance"), onDrawPFloatMenu, SetRunoutDistance, &runout.runout_distance()); + EDIT_ITEM(ICON_Runout, F("Runout Distance"), onDrawPFloatMenu, SetRunoutDistance, &runout.runout_distance()); #endif #if ENABLED(PREVENT_COLD_EXTRUSION) - ADDMENUITEM_P(ICON_ExtrudeMinT, F("Extrude Min Temp."), onDrawPIntMenu, SetExtMinT, &HMI_data.ExtMinT); + EDIT_ITEM(ICON_ExtrudeMinT, F("Extrude Min Temp."), onDrawPIntMenu, SetExtMinT, &HMI_data.ExtMinT); #endif #if ENABLED(ADVANCED_PAUSE_FEATURE) - ADDMENUITEM_P(ICON_FilLoad, GET_TEXT_F(MSG_FILAMENT_LOAD), onDrawPFloatMenu, SetFilLoad, &fc_settings[0].load_length); - ADDMENUITEM_P(ICON_FilUnload, GET_TEXT_F(MSG_FILAMENT_UNLOAD), onDrawPFloatMenu, SetFilUnload, &fc_settings[0].unload_length); + EDIT_ITEM(ICON_FilLoad, GET_TEXT_F(MSG_FILAMENT_LOAD), onDrawPFloatMenu, SetFilLoad, &fc_settings[0].load_length); + EDIT_ITEM(ICON_FilUnload, GET_TEXT_F(MSG_FILAMENT_UNLOAD), onDrawPFloatMenu, SetFilUnload, &fc_settings[0].unload_length); #endif #if ENABLED(FWRETRACT) - ADDMENUITEM_P(ICON_FWRetLength, GET_TEXT_F(MSG_CONTROL_RETRACT), onDrawPFloatMenu, SetRetractLength, &fwretract.settings.retract_length); - ADDMENUITEM_P(ICON_FWRetSpeed, GET_TEXT_F(MSG_SINGLENOZZLE_RETRACT_SPEED), onDrawPFloatMenu, SetRetractSpeed, &fwretract.settings.retract_feedrate_mm_s); - ADDMENUITEM_P(ICON_FWRetZRaise, GET_TEXT_F(MSG_CONTROL_RETRACT_ZHOP), onDrawPFloat2Menu, SetZRaise, &fwretract.settings.retract_zraise); - ADDMENUITEM_P(ICON_FWRecSpeed, GET_TEXT_F(MSG_SINGLENOZZLE_UNRETRACT_SPEED), onDrawPFloatMenu, SetRecoverSpeed, &fwretract.settings.retract_recover_feedrate_mm_s); + EDIT_ITEM(ICON_FWRetLength, GET_TEXT_F(MSG_CONTROL_RETRACT), onDrawPFloatMenu, SetRetractLength, &fwretract.settings.retract_length); + EDIT_ITEM(ICON_FWRetSpeed, GET_TEXT_F(MSG_SINGLENOZZLE_RETRACT_SPEED), onDrawPFloatMenu, SetRetractSpeed, &fwretract.settings.retract_feedrate_mm_s); + EDIT_ITEM(ICON_FWRetZRaise, GET_TEXT_F(MSG_CONTROL_RETRACT_ZHOP), onDrawPFloat2Menu, SetZRaise, &fwretract.settings.retract_zraise); + EDIT_ITEM(ICON_FWRecSpeed, GET_TEXT_F(MSG_SINGLENOZZLE_UNRETRACT_SPEED), onDrawPFloatMenu, SetRecoverSpeed, &fwretract.settings.retract_recover_feedrate_mm_s); #endif } CurrentMenu->draw(); @@ -3400,26 +3419,26 @@ void Draw_SelectColors_Menu() { CurrentMenu = SelectColorMenu; SetMenuTitle({0}, GET_TEXT_F(MSG_COLORS_SELECT)); // TODO: Chinese, English "Select Color" JPG DWINUI::MenuItemsPrepare(20); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu); - ADDMENUITEM(ICON_StockConfiguration, GET_TEXT_F(MSG_RESTORE_DEFAULTS), onDrawMenuItem, RestoreDefaultsColors); - ADDMENUITEM_P(0, "Screen Background", onDrawSelColorItem, SelColor, &HMI_data.Background_Color); - ADDMENUITEM_P(0, "Cursor", onDrawSelColorItem, SelColor, &HMI_data.Cursor_color); - ADDMENUITEM_P(0, "Title Background", onDrawSelColorItem, SelColor, &HMI_data.TitleBg_color); - ADDMENUITEM_P(0, "Title Text", onDrawSelColorItem, SelColor, &HMI_data.TitleTxt_color); - ADDMENUITEM_P(0, "Text", onDrawSelColorItem, SelColor, &HMI_data.Text_Color); - ADDMENUITEM_P(0, "Selected", onDrawSelColorItem, SelColor, &HMI_data.Selected_Color); - ADDMENUITEM_P(0, "Split Line", onDrawSelColorItem, SelColor, &HMI_data.SplitLine_Color); - ADDMENUITEM_P(0, "Highlight", onDrawSelColorItem, SelColor, &HMI_data.Highlight_Color); - ADDMENUITEM_P(0, "Status Background", onDrawSelColorItem, SelColor, &HMI_data.StatusBg_Color); - ADDMENUITEM_P(0, "Status Text", onDrawSelColorItem, SelColor, &HMI_data.StatusTxt_Color); - ADDMENUITEM_P(0, "Popup Background", onDrawSelColorItem, SelColor, &HMI_data.PopupBg_color); - ADDMENUITEM_P(0, "Popup Text", onDrawSelColorItem, SelColor, &HMI_data.PopupTxt_Color); - ADDMENUITEM_P(0, "Alert Background", onDrawSelColorItem, SelColor, &HMI_data.AlertBg_Color); - ADDMENUITEM_P(0, "Alert Text", onDrawSelColorItem, SelColor, &HMI_data.AlertTxt_Color); - ADDMENUITEM_P(0, "Percent Text", onDrawSelColorItem, SelColor, &HMI_data.PercentTxt_Color); - ADDMENUITEM_P(0, "Bar Fill", onDrawSelColorItem, SelColor, &HMI_data.Barfill_Color); - ADDMENUITEM_P(0, "Indicator value", onDrawSelColorItem, SelColor, &HMI_data.Indicator_Color); - ADDMENUITEM_P(0, "Coordinate value", onDrawSelColorItem, SelColor, &HMI_data.Coordinate_Color); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu); + MENU_ITEM(ICON_StockConfiguration, GET_TEXT_F(MSG_RESTORE_DEFAULTS), onDrawMenuItem, RestoreDefaultsColors); + EDIT_ITEM(0, "Screen Background", onDrawSelColorItem, SelColor, &HMI_data.Background_Color); + EDIT_ITEM(0, "Cursor", onDrawSelColorItem, SelColor, &HMI_data.Cursor_color); + EDIT_ITEM(0, "Title Background", onDrawSelColorItem, SelColor, &HMI_data.TitleBg_color); + EDIT_ITEM(0, "Title Text", onDrawSelColorItem, SelColor, &HMI_data.TitleTxt_color); + EDIT_ITEM(0, "Text", onDrawSelColorItem, SelColor, &HMI_data.Text_Color); + EDIT_ITEM(0, "Selected", onDrawSelColorItem, SelColor, &HMI_data.Selected_Color); + EDIT_ITEM(0, "Split Line", onDrawSelColorItem, SelColor, &HMI_data.SplitLine_Color); + EDIT_ITEM(0, "Highlight", onDrawSelColorItem, SelColor, &HMI_data.Highlight_Color); + EDIT_ITEM(0, "Status Background", onDrawSelColorItem, SelColor, &HMI_data.StatusBg_Color); + EDIT_ITEM(0, "Status Text", onDrawSelColorItem, SelColor, &HMI_data.StatusTxt_Color); + EDIT_ITEM(0, "Popup Background", onDrawSelColorItem, SelColor, &HMI_data.PopupBg_color); + EDIT_ITEM(0, "Popup Text", onDrawSelColorItem, SelColor, &HMI_data.PopupTxt_Color); + EDIT_ITEM(0, "Alert Background", onDrawSelColorItem, SelColor, &HMI_data.AlertBg_Color); + EDIT_ITEM(0, "Alert Text", onDrawSelColorItem, SelColor, &HMI_data.AlertTxt_Color); + EDIT_ITEM(0, "Percent Text", onDrawSelColorItem, SelColor, &HMI_data.PercentTxt_Color); + EDIT_ITEM(0, "Bar Fill", onDrawSelColorItem, SelColor, &HMI_data.Barfill_Color); + EDIT_ITEM(0, "Indicator value", onDrawSelColorItem, SelColor, &HMI_data.Indicator_Color); + EDIT_ITEM(0, "Coordinate value", onDrawSelColorItem, SelColor, &HMI_data.Coordinate_Color); } CurrentMenu->draw(); } @@ -3431,11 +3450,11 @@ void Draw_GetColor_Menu() { CurrentMenu = GetColorMenu; SetMenuTitle({0}, GET_TEXT_F(MSG_COLORS_GET)); // TODO: Chinese, English "Get Color" JPG DWINUI::MenuItemsPrepare(5); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, DWIN_ApplyColor); - ADDMENUITEM(ICON_Cancel, GET_TEXT_F(MSG_BUTTON_CANCEL), onDrawMenuItem, Draw_SelectColors_Menu); - ADDMENUITEM(0, GET_TEXT_F(MSG_COLORS_RED), onDrawGetColorItem, SetRGBColor); - ADDMENUITEM(1, GET_TEXT_F(MSG_COLORS_GREEN), onDrawGetColorItem, SetRGBColor); - ADDMENUITEM(2, GET_TEXT_F(MSG_COLORS_BLUE), onDrawGetColorItem, SetRGBColor); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, DWIN_ApplyColor); + MENU_ITEM(ICON_Cancel, GET_TEXT_F(MSG_BUTTON_CANCEL), onDrawMenuItem, Draw_SelectColors_Menu); + MENU_ITEM(0, GET_TEXT_F(MSG_COLORS_RED), onDrawGetColorItem, SetRGBColor); + MENU_ITEM(1, GET_TEXT_F(MSG_COLORS_GREEN), onDrawGetColorItem, SetRGBColor); + MENU_ITEM(2, GET_TEXT_F(MSG_COLORS_BLUE), onDrawGetColorItem, SetRGBColor); } CurrentMenu->draw(); DWIN_Draw_Rectangle(1, *HMI_value.P_Int, 20, 315, DWIN_WIDTH - 20, 335); @@ -3448,33 +3467,33 @@ void Draw_Tune_Menu() { CurrentMenu = TuneMenu; SetMenuTitle({73, 2, 28, 12}, GET_TEXT_F(MSG_TUNE)); // TODO: Chinese, English "Tune" JPG DWINUI::MenuItemsPrepare(14); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_PrintProcess); - ADDMENUITEM_P(ICON_Speed, GET_TEXT_F(MSG_SPEED), onDrawSpeedItem, SetSpeed, &feedrate_percentage); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_PrintProcess); + EDIT_ITEM(ICON_Speed, GET_TEXT_F(MSG_SPEED), onDrawSpeedItem, SetSpeed, &feedrate_percentage); #if HAS_HOTEND - HotendTargetItem = ADDMENUITEM_P(ICON_HotendTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_HOTEND), onDrawHotendTemp, SetHotendTemp, &thermalManager.temp_hotend[0].target); + HotendTargetItem = EDIT_ITEM(ICON_HotendTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_HOTEND), onDrawHotendTemp, SetHotendTemp, &thermalManager.temp_hotend[0].target); #endif #if HAS_HEATED_BED - BedTargetItem = ADDMENUITEM_P(ICON_BedTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_BED), onDrawBedTemp, SetBedTemp, &thermalManager.temp_bed.target); + BedTargetItem = EDIT_ITEM(ICON_BedTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_BED), onDrawBedTemp, SetBedTemp, &thermalManager.temp_bed.target); #endif #if HAS_FAN - FanSpeedItem = ADDMENUITEM_P(ICON_FanSpeed, GET_TEXT_F(MSG_FAN_SPEED), onDrawFanSpeed, SetFanSpeed, &thermalManager.fan_speed[0]); + FanSpeedItem = EDIT_ITEM(ICON_FanSpeed, GET_TEXT_F(MSG_FAN_SPEED), onDrawFanSpeed, SetFanSpeed, &thermalManager.fan_speed[0]); #endif #if HAS_ZOFFSET_ITEM && EITHER(HAS_BED_PROBE, BABYSTEPPING) - ADDMENUITEM_P(ICON_Zoffset, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), onDrawZOffset, SetZOffset, &BABY_Z_VAR); + EDIT_ITEM(ICON_Zoffset, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), onDrawZOffset, SetZOffset, &BABY_Z_VAR); #endif #if ENABLED(FWRETRACT) - ADDMENUITEM_P(ICON_FWRetLength, GET_TEXT_F(MSG_CONTROL_RETRACT), onDrawPFloatMenu, SetRetractLength, &fwretract.settings.retract_length); - ADDMENUITEM_P(ICON_FWRetSpeed, GET_TEXT_F(MSG_SINGLENOZZLE_RETRACT_SPEED), onDrawPFloatMenu, SetRetractSpeed, &fwretract.settings.retract_feedrate_mm_s); - ADDMENUITEM_P(ICON_FWRetZRaise, GET_TEXT_F(MSG_CONTROL_RETRACT_ZHOP), onDrawPFloat2Menu, SetZRaise, &fwretract.settings.retract_zraise); - ADDMENUITEM_P(ICON_FWRecSpeed, GET_TEXT_F(MSG_SINGLENOZZLE_UNRETRACT_SPEED), onDrawPFloatMenu, SetRecoverSpeed, &fwretract.settings.retract_recover_feedrate_mm_s); + EDIT_ITEM(ICON_FWRetLength, GET_TEXT_F(MSG_CONTROL_RETRACT), onDrawPFloatMenu, SetRetractLength, &fwretract.settings.retract_length); + EDIT_ITEM(ICON_FWRetSpeed, GET_TEXT_F(MSG_SINGLENOZZLE_RETRACT_SPEED), onDrawPFloatMenu, SetRetractSpeed, &fwretract.settings.retract_feedrate_mm_s); + EDIT_ITEM(ICON_FWRetZRaise, GET_TEXT_F(MSG_CONTROL_RETRACT_ZHOP), onDrawPFloat2Menu, SetZRaise, &fwretract.settings.retract_zraise); + EDIT_ITEM(ICON_FWRecSpeed, GET_TEXT_F(MSG_SINGLENOZZLE_UNRETRACT_SPEED), onDrawPFloatMenu, SetRecoverSpeed, &fwretract.settings.retract_recover_feedrate_mm_s); #endif - ADDMENUITEM_P(ICON_Flow, GET_TEXT_F(MSG_FLOW), onDrawPIntMenu, SetFlow, &planner.flow_percentage[0]); + EDIT_ITEM(ICON_Flow, GET_TEXT_F(MSG_FLOW), onDrawPIntMenu, SetFlow, &planner.flow_percentage[0]); #if ENABLED(ADVANCED_PAUSE_FEATURE) - ADDMENUITEM(ICON_FilMan, GET_TEXT_F(MSG_FILAMENTCHANGE), onDrawMenuItem, ChangeFilament); + MENU_ITEM(ICON_FilMan, GET_TEXT_F(MSG_FILAMENTCHANGE), onDrawMenuItem, ChangeFilament); #endif - ADDMENUITEM(ICON_Lock, GET_TEXT_F(MSG_LOCKSCREEN), onDrawMenuItem, DWIN_LockScreen); + MENU_ITEM(ICON_Lock, GET_TEXT_F(MSG_LOCKSCREEN), onDrawMenuItem, DWIN_LockScreen); #if HAS_LCD_BRIGHTNESS - ADDMENUITEM_P(ICON_Brightness, GET_TEXT_F(MSG_BRIGHTNESS), onDrawPInt8Menu, SetBrightness, &ui.brightness); + EDIT_ITEM(ICON_Brightness, GET_TEXT_F(MSG_BRIGHTNESS), onDrawPInt8Menu, SetBrightness, &ui.brightness); #endif } CurrentMenu->draw(); @@ -3487,14 +3506,14 @@ void Draw_Motion_Menu() { CurrentMenu = MotionMenu; SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_MOTION)); // TODO: Chinese, English "Motion" JPG DWINUI::MenuItemsPrepare(6); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu); - ADDMENUITEM(ICON_MaxSpeed, GET_TEXT_F(MSG_SPEED), onDrawSpeed, Draw_MaxSpeed_Menu); - ADDMENUITEM(ICON_MaxAccelerated, GET_TEXT_F(MSG_ACCELERATION), onDrawAcc, Draw_MaxAccel_Menu); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu); + MENU_ITEM(ICON_MaxSpeed, GET_TEXT_F(MSG_SPEED), onDrawSpeed, Draw_MaxSpeed_Menu); + MENU_ITEM(ICON_MaxAccelerated, GET_TEXT_F(MSG_ACCELERATION), onDrawAcc, Draw_MaxAccel_Menu); #if HAS_CLASSIC_JERK - ADDMENUITEM(ICON_MaxJerk, GET_TEXT_F(MSG_JERK), onDrawJerk, Draw_MaxJerk_Menu); + MENU_ITEM(ICON_MaxJerk, GET_TEXT_F(MSG_JERK), onDrawJerk, Draw_MaxJerk_Menu); #endif - ADDMENUITEM(ICON_Step, GET_TEXT_F(MSG_STEPS_PER_MM), onDrawSteps, Draw_Steps_Menu); - ADDMENUITEM_P(ICON_Flow, GET_TEXT_F(MSG_FLOW), onDrawPIntMenu, SetFlow, &planner.flow_percentage[0]); + MENU_ITEM(ICON_Step, GET_TEXT_F(MSG_STEPS_PER_MM), onDrawSteps, Draw_Steps_Menu); + EDIT_ITEM(ICON_Flow, GET_TEXT_F(MSG_FLOW), onDrawPIntMenu, SetFlow, &planner.flow_percentage[0]); } CurrentMenu->draw(); } @@ -3507,12 +3526,12 @@ void Draw_Motion_Menu() { CurrentMenu = FilamentMenu; SetMenuTitle({0}, GET_TEXT_F(MSG_FILAMENT_MAN)); // TODO: Chinese, English "Filament Management" JPG DWINUI::MenuItemsPrepare(5); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu); - ADDMENUITEM(ICON_Park, GET_TEXT_F(MSG_FILAMENT_PARK_ENABLED), onDrawMenuItem, ParkHead); - ADDMENUITEM(ICON_FilMan, GET_TEXT_F(MSG_FILAMENTCHANGE), onDrawMenuItem, ChangeFilament); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu); + MENU_ITEM(ICON_Park, GET_TEXT_F(MSG_FILAMENT_PARK_ENABLED), onDrawMenuItem, ParkHead); + MENU_ITEM(ICON_FilMan, GET_TEXT_F(MSG_FILAMENTCHANGE), onDrawMenuItem, ChangeFilament); #if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES) - ADDMENUITEM(ICON_FilUnload, GET_TEXT_F(MSG_FILAMENTUNLOAD), onDrawMenuItem, UnloadFilament); - ADDMENUITEM(ICON_FilLoad, GET_TEXT_F(MSG_FILAMENTLOAD), onDrawMenuItem, LoadFilament); + MENU_ITEM(ICON_FilUnload, GET_TEXT_F(MSG_FILAMENTUNLOAD), onDrawMenuItem, UnloadFilament); + MENU_ITEM(ICON_FilLoad, GET_TEXT_F(MSG_FILAMENTLOAD), onDrawMenuItem, LoadFilament); #endif } CurrentMenu->draw(); @@ -3527,12 +3546,12 @@ void Draw_Motion_Menu() { CurrentMenu = ManualMesh; SetMenuTitle({0}, GET_TEXT_F(MSG_MANUAL_MESH)); // TODO: Chinese, English "Manual Mesh Leveling" JPG DWINUI::MenuItemsPrepare(6); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu); - ADDMENUITEM(ICON_ManualMesh, GET_TEXT_F(MSG_LEVEL_BED), onDrawMenuItem, ManualMeshStart); - MMeshMoveZItem = ADDMENUITEM_P(ICON_Zoffset, GET_TEXT_F(MSG_MOVE_Z), onDrawMMeshMoveZ, SetMMeshMoveZ, ¤t_position.z); - ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_UBL_CONTINUE_MESH), onDrawMenuItem, ManualMeshContinue); - ADDMENUITEM(ICON_MeshViewer, GET_TEXT_F(MSG_MESH_VIEW), onDrawSubMenu, DWIN_MeshViewer); - ADDMENUITEM(ICON_MeshSave, GET_TEXT_F(MSG_UBL_SAVE_MESH), onDrawMenuItem, ManualMeshSave); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu); + MENU_ITEM(ICON_ManualMesh, GET_TEXT_F(MSG_LEVEL_BED), onDrawMenuItem, ManualMeshStart); + MMeshMoveZItem = EDIT_ITEM(ICON_Zoffset, GET_TEXT_F(MSG_MOVE_Z), onDrawMMeshMoveZ, SetMMeshMoveZ, ¤t_position.z); + MENU_ITEM(ICON_Axis, GET_TEXT_F(MSG_UBL_CONTINUE_MESH), onDrawMenuItem, ManualMeshContinue); + MENU_ITEM(ICON_MeshViewer, GET_TEXT_F(MSG_MESH_VIEW), onDrawSubMenu, DWIN_MeshViewer); + MENU_ITEM(ICON_MeshSave, GET_TEXT_F(MSG_UBL_SAVE_MESH), onDrawMenuItem, ManualMeshSave); } CurrentMenu->draw(); } @@ -3546,18 +3565,18 @@ void Draw_Motion_Menu() { CurrentMenu = PreheatMenu; SetMenuTitle(cn, fstr); DWINUI::MenuItemsPrepare(5); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Temperature_Menu); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Temperature_Menu); #if HAS_HOTEND - ADDMENUITEM_P(ICON_SetEndTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_HOTEND), onDrawSetPreheatHotend, SetPreheatEndTemp, &ui.material_preset[HMI_value.Preheat].hotend_temp); + EDIT_ITEM(ICON_SetEndTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_HOTEND), onDrawSetPreheatHotend, SetPreheatEndTemp, &ui.material_preset[HMI_value.Preheat].hotend_temp); #endif #if HAS_HEATED_BED - ADDMENUITEM_P(ICON_SetBedTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_BED), onDrawSetPreheatBed, SetPreheatBedTemp, &ui.material_preset[HMI_value.Preheat].bed_temp); + EDIT_ITEM(ICON_SetBedTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_BED), onDrawSetPreheatBed, SetPreheatBedTemp, &ui.material_preset[HMI_value.Preheat].bed_temp); #endif #if HAS_FAN - ADDMENUITEM_P(ICON_FanSpeed, GET_TEXT_F(MSG_FAN_SPEED), onDrawSetPreheatFan, SetPreheatFanSpeed, &ui.material_preset[HMI_value.Preheat].fan_speed); + EDIT_ITEM(ICON_FanSpeed, GET_TEXT_F(MSG_FAN_SPEED), onDrawSetPreheatFan, SetPreheatFanSpeed, &ui.material_preset[HMI_value.Preheat].fan_speed); #endif #if ENABLED(EEPROM_SETTINGS) - ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT_F(MSG_STORE_EEPROM), onDrawWriteEeprom, WriteEeprom); + MENU_ITEM(ICON_WriteEEPROM, GET_TEXT_F(MSG_STORE_EEPROM), onDrawWriteEeprom, WriteEeprom); #endif } CurrentMenu->draw(); @@ -3593,21 +3612,21 @@ void Draw_Temperature_Menu() { CurrentMenu = TemperatureMenu; SetMenuTitle({236, 2, 28, 12}, GET_TEXT_F(MSG_TEMPERATURE)); DWINUI::MenuItemsPrepare(7); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu); #if HAS_HOTEND - HotendTargetItem = ADDMENUITEM_P(ICON_SetEndTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_HOTEND), onDrawHotendTemp, SetHotendTemp, &thermalManager.temp_hotend[0].target); + HotendTargetItem = EDIT_ITEM(ICON_SetEndTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_HOTEND), onDrawHotendTemp, SetHotendTemp, &thermalManager.temp_hotend[0].target); #endif #if HAS_HEATED_BED - BedTargetItem = ADDMENUITEM_P(ICON_SetBedTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_BED), onDrawBedTemp, SetBedTemp, &thermalManager.temp_bed.target); + BedTargetItem = EDIT_ITEM(ICON_SetBedTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_BED), onDrawBedTemp, SetBedTemp, &thermalManager.temp_bed.target); #endif #if HAS_FAN - FanSpeedItem = ADDMENUITEM_P(ICON_FanSpeed, GET_TEXT_F(MSG_FAN_SPEED), onDrawFanSpeed, SetFanSpeed, &thermalManager.fan_speed[0]); + FanSpeedItem = EDIT_ITEM(ICON_FanSpeed, GET_TEXT_F(MSG_FAN_SPEED), onDrawFanSpeed, SetFanSpeed, &thermalManager.fan_speed[0]); #endif #if HAS_HOTEND - ADDMENUITEM(ICON_SetPLAPreheat, F(PREHEAT_1_LABEL " Preheat Settings"), onDrawPLAPreheatSubMenu, Draw_Preheat1_Menu); - ADDMENUITEM(ICON_SetABSPreheat, F(PREHEAT_2_LABEL " Preheat Settings"), onDrawABSPreheatSubMenu, Draw_Preheat2_Menu); + MENU_ITEM(ICON_SetPLAPreheat, F(PREHEAT_1_LABEL " Preheat Settings"), onDrawPLAPreheatSubMenu, Draw_Preheat1_Menu); + MENU_ITEM(ICON_SetABSPreheat, F(PREHEAT_2_LABEL " Preheat Settings"), onDrawABSPreheatSubMenu, Draw_Preheat2_Menu); #ifdef PREHEAT_3_LABEL - ADDMENUITEM(ICON_SetCustomPreheat, PREHEAT_3_TITLE, onDrawSubMenu, Draw_Preheat3_Menu); + MENU_ITEM(ICON_SetCustomPreheat, PREHEAT_3_TITLE, onDrawSubMenu, Draw_Preheat3_Menu); #endif #endif } @@ -3621,12 +3640,12 @@ void Draw_MaxSpeed_Menu() { CurrentMenu = MaxSpeedMenu; SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_MAXSPEED)); DWINUI::MenuItemsPrepare(5); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu); - ADDMENUITEM_P(ICON_MaxSpeedX, GET_TEXT_F(MSG_MAXSPEED_X), onDrawMaxSpeedX, SetMaxSpeedX, &planner.settings.max_feedrate_mm_s[X_AXIS]); - ADDMENUITEM_P(ICON_MaxSpeedY, GET_TEXT_F(MSG_MAXSPEED_Y), onDrawMaxSpeedY, SetMaxSpeedY, &planner.settings.max_feedrate_mm_s[Y_AXIS]); - ADDMENUITEM_P(ICON_MaxSpeedZ, GET_TEXT_F(MSG_MAXSPEED_Z), onDrawMaxSpeedZ, SetMaxSpeedZ, &planner.settings.max_feedrate_mm_s[Z_AXIS]); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu); + EDIT_ITEM(ICON_MaxSpeedX, GET_TEXT_F(MSG_MAXSPEED_X), onDrawMaxSpeedX, SetMaxSpeedX, &planner.settings.max_feedrate_mm_s[X_AXIS]); + EDIT_ITEM(ICON_MaxSpeedY, GET_TEXT_F(MSG_MAXSPEED_Y), onDrawMaxSpeedY, SetMaxSpeedY, &planner.settings.max_feedrate_mm_s[Y_AXIS]); + EDIT_ITEM(ICON_MaxSpeedZ, GET_TEXT_F(MSG_MAXSPEED_Z), onDrawMaxSpeedZ, SetMaxSpeedZ, &planner.settings.max_feedrate_mm_s[Z_AXIS]); #if HAS_HOTEND - ADDMENUITEM_P(ICON_MaxSpeedE, GET_TEXT_F(MSG_MAXSPEED_E), onDrawMaxSpeedE, SetMaxSpeedE, &planner.settings.max_feedrate_mm_s[E_AXIS]); + EDIT_ITEM(ICON_MaxSpeedE, GET_TEXT_F(MSG_MAXSPEED_E), onDrawMaxSpeedE, SetMaxSpeedE, &planner.settings.max_feedrate_mm_s[E_AXIS]); #endif } CurrentMenu->draw(); @@ -3639,12 +3658,12 @@ void Draw_MaxAccel_Menu() { CurrentMenu = MaxAccelMenu; SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_ACCELERATION)); DWINUI::MenuItemsPrepare(5); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu); - ADDMENUITEM_P(ICON_MaxAccX, GET_TEXT_F(MSG_AMAX_A), onDrawMaxAccelX, SetMaxAccelX, &planner.settings.max_acceleration_mm_per_s2[X_AXIS]); - ADDMENUITEM_P(ICON_MaxAccY, GET_TEXT_F(MSG_AMAX_B), onDrawMaxAccelY, SetMaxAccelY, &planner.settings.max_acceleration_mm_per_s2[Y_AXIS]); - ADDMENUITEM_P(ICON_MaxAccZ, GET_TEXT_F(MSG_AMAX_C), onDrawMaxAccelZ, SetMaxAccelZ, &planner.settings.max_acceleration_mm_per_s2[Z_AXIS]); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu); + EDIT_ITEM(ICON_MaxAccX, GET_TEXT_F(MSG_AMAX_A), onDrawMaxAccelX, SetMaxAccelX, &planner.settings.max_acceleration_mm_per_s2[X_AXIS]); + EDIT_ITEM(ICON_MaxAccY, GET_TEXT_F(MSG_AMAX_B), onDrawMaxAccelY, SetMaxAccelY, &planner.settings.max_acceleration_mm_per_s2[Y_AXIS]); + EDIT_ITEM(ICON_MaxAccZ, GET_TEXT_F(MSG_AMAX_C), onDrawMaxAccelZ, SetMaxAccelZ, &planner.settings.max_acceleration_mm_per_s2[Z_AXIS]); #if HAS_HOTEND - ADDMENUITEM_P(ICON_MaxAccE, GET_TEXT_F(MSG_AMAX_E), onDrawMaxAccelE, SetMaxAccelE, &planner.settings.max_acceleration_mm_per_s2[E_AXIS]); + EDIT_ITEM(ICON_MaxAccE, GET_TEXT_F(MSG_AMAX_E), onDrawMaxAccelE, SetMaxAccelE, &planner.settings.max_acceleration_mm_per_s2[E_AXIS]); #endif } CurrentMenu->draw(); @@ -3658,12 +3677,12 @@ void Draw_MaxAccel_Menu() { CurrentMenu = MaxJerkMenu; SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_JERK)); DWINUI::MenuItemsPrepare(5); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu); - ADDMENUITEM_P(ICON_MaxSpeedJerkX, GET_TEXT_F(MSG_VA_JERK), onDrawMaxJerkX, SetMaxJerkX, &planner.max_jerk[X_AXIS]); - ADDMENUITEM_P(ICON_MaxSpeedJerkY, GET_TEXT_F(MSG_VB_JERK), onDrawMaxJerkY, SetMaxJerkY, &planner.max_jerk[Y_AXIS]); - ADDMENUITEM_P(ICON_MaxSpeedJerkZ, GET_TEXT_F(MSG_VC_JERK), onDrawMaxJerkZ, SetMaxJerkZ, &planner.max_jerk[Z_AXIS]); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu); + EDIT_ITEM(ICON_MaxSpeedJerkX, GET_TEXT_F(MSG_VA_JERK), onDrawMaxJerkX, SetMaxJerkX, &planner.max_jerk[X_AXIS]); + EDIT_ITEM(ICON_MaxSpeedJerkY, GET_TEXT_F(MSG_VB_JERK), onDrawMaxJerkY, SetMaxJerkY, &planner.max_jerk[Y_AXIS]); + EDIT_ITEM(ICON_MaxSpeedJerkZ, GET_TEXT_F(MSG_VC_JERK), onDrawMaxJerkZ, SetMaxJerkZ, &planner.max_jerk[Z_AXIS]); #if HAS_HOTEND - ADDMENUITEM_P(ICON_MaxSpeedJerkE, GET_TEXT_F(MSG_VE_JERK), onDrawMaxJerkE, SetMaxJerkE, &planner.max_jerk[E_AXIS]); + EDIT_ITEM(ICON_MaxSpeedJerkE, GET_TEXT_F(MSG_VE_JERK), onDrawMaxJerkE, SetMaxJerkE, &planner.max_jerk[E_AXIS]); #endif } CurrentMenu->draw(); @@ -3677,12 +3696,12 @@ void Draw_Steps_Menu() { CurrentMenu = StepsMenu; SetMenuTitle({1, 16, 28, 13}, GET_TEXT_F(MSG_STEPS_PER_MM)); DWINUI::MenuItemsPrepare(5); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu); - ADDMENUITEM_P(ICON_StepX, GET_TEXT_F(MSG_A_STEPS), onDrawStepsX, SetStepsX, &planner.settings.axis_steps_per_mm[X_AXIS]); - ADDMENUITEM_P(ICON_StepY, GET_TEXT_F(MSG_B_STEPS), onDrawStepsY, SetStepsY, &planner.settings.axis_steps_per_mm[Y_AXIS]); - ADDMENUITEM_P(ICON_StepZ, GET_TEXT_F(MSG_C_STEPS), onDrawStepsZ, SetStepsZ, &planner.settings.axis_steps_per_mm[Z_AXIS]); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu); + EDIT_ITEM(ICON_StepX, GET_TEXT_F(MSG_A_STEPS), onDrawStepsX, SetStepsX, &planner.settings.axis_steps_per_mm[X_AXIS]); + EDIT_ITEM(ICON_StepY, GET_TEXT_F(MSG_B_STEPS), onDrawStepsY, SetStepsY, &planner.settings.axis_steps_per_mm[Y_AXIS]); + EDIT_ITEM(ICON_StepZ, GET_TEXT_F(MSG_C_STEPS), onDrawStepsZ, SetStepsZ, &planner.settings.axis_steps_per_mm[Z_AXIS]); #if HAS_HOTEND - ADDMENUITEM_P(ICON_StepE, GET_TEXT_F(MSG_E_STEPS), onDrawStepsE, SetStepsE, &planner.settings.axis_steps_per_mm[E_AXIS]); + EDIT_ITEM(ICON_StepE, GET_TEXT_F(MSG_E_STEPS), onDrawStepsE, SetStepsE, &planner.settings.axis_steps_per_mm[E_AXIS]); #endif } CurrentMenu->draw(); @@ -3696,15 +3715,15 @@ void Draw_Steps_Menu() { CurrentMenu = HotendPIDMenu; CurrentMenu->MenuTitle.SetCaption(F("Hotend PID Settings")); DWINUI::MenuItemsPrepare(8); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu); - ADDMENUITEM(ICON_PIDNozzle, F("Hotend PID"), onDrawMenuItem, HotendPID); - ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KP), onDrawPFloat2Menu, SetKp, &thermalManager.temp_hotend[0].pid.Kp); - ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KI), onDrawPIDi, SetKi, &thermalManager.temp_hotend[0].pid.Ki); - ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KD), onDrawPIDd, SetKd, &thermalManager.temp_hotend[0].pid.Kd); - ADDMENUITEM_P(ICON_Temperature, GET_TEXT_F(MSG_TEMPERATURE), onDrawPIntMenu, SetHotendPidT, &HMI_data.HotendPidT); - ADDMENUITEM_P(ICON_PIDcycles, GET_TEXT_F(MSG_PID_CYCLE), onDrawPIntMenu, SetPidCycles, &HMI_data.PidCycles); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu); + MENU_ITEM(ICON_PIDNozzle, F("Hotend PID"), onDrawMenuItem, HotendPID); + EDIT_ITEM(ICON_PIDValue, F("Set" STR_KP), onDrawPFloat2Menu, SetKp, &thermalManager.temp_hotend[0].pid.Kp); + EDIT_ITEM(ICON_PIDValue, F("Set" STR_KI), onDrawPIDi, SetKi, &thermalManager.temp_hotend[0].pid.Ki); + EDIT_ITEM(ICON_PIDValue, F("Set" STR_KD), onDrawPIDd, SetKd, &thermalManager.temp_hotend[0].pid.Kd); + EDIT_ITEM(ICON_Temperature, GET_TEXT_F(MSG_TEMPERATURE), onDrawPIntMenu, SetHotendPidT, &HMI_data.HotendPidT); + EDIT_ITEM(ICON_PIDcycles, GET_TEXT_F(MSG_PID_CYCLE), onDrawPIntMenu, SetPidCycles, &HMI_data.PidCycles); #if ENABLED(EEPROM_SETTINGS) - ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT_F(MSG_STORE_EEPROM), onDrawMenuItem, WriteEeprom); + MENU_ITEM(ICON_WriteEEPROM, GET_TEXT_F(MSG_STORE_EEPROM), onDrawMenuItem, WriteEeprom); #endif } CurrentMenu->draw(); @@ -3719,15 +3738,15 @@ void Draw_Steps_Menu() { CurrentMenu = BedPIDMenu; CurrentMenu->MenuTitle.SetCaption(F("Bed PID Settings")); DWINUI::MenuItemsPrepare(8); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu); - ADDMENUITEM(ICON_PIDNozzle, F("Bed PID"), onDrawMenuItem,BedPID); - ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KP), onDrawPFloat2Menu, SetKp, &thermalManager.temp_bed.pid.Kp); - ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KI), onDrawPIDi, SetKi, &thermalManager.temp_bed.pid.Ki); - ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KD), onDrawPIDd, SetKd, &thermalManager.temp_bed.pid.Kd); - ADDMENUITEM_P(ICON_Temperature, GET_TEXT_F(MSG_TEMPERATURE), onDrawPIntMenu, SetBedPidT, &HMI_data.BedPidT); - ADDMENUITEM_P(ICON_PIDcycles, GET_TEXT_F(MSG_PID_CYCLE), onDrawPIntMenu, SetPidCycles, &HMI_data.PidCycles); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu); + MENU_ITEM(ICON_PIDNozzle, F("Bed PID"), onDrawMenuItem,BedPID); + EDIT_ITEM(ICON_PIDValue, F("Set" STR_KP), onDrawPFloat2Menu, SetKp, &thermalManager.temp_bed.pid.Kp); + EDIT_ITEM(ICON_PIDValue, F("Set" STR_KI), onDrawPIDi, SetKi, &thermalManager.temp_bed.pid.Ki); + EDIT_ITEM(ICON_PIDValue, F("Set" STR_KD), onDrawPIDd, SetKd, &thermalManager.temp_bed.pid.Kd); + EDIT_ITEM(ICON_Temperature, GET_TEXT_F(MSG_TEMPERATURE), onDrawPIntMenu, SetBedPidT, &HMI_data.BedPidT); + EDIT_ITEM(ICON_PIDcycles, GET_TEXT_F(MSG_PID_CYCLE), onDrawPIntMenu, SetPidCycles, &HMI_data.PidCycles); #if ENABLED(EEPROM_SETTINGS) - ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT_F(MSG_STORE_EEPROM), onDrawMenuItem, WriteEeprom); + MENU_ITEM(ICON_WriteEEPROM, GET_TEXT_F(MSG_STORE_EEPROM), onDrawMenuItem, WriteEeprom); #endif } CurrentMenu->draw(); @@ -3742,10 +3761,10 @@ void Draw_Steps_Menu() { CurrentMenu = ZOffsetWizMenu; CurrentMenu->MenuTitle.SetCaption(GET_TEXT_F(MSG_PROBE_WIZARD)); DWINUI::MenuItemsPrepare(4); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_Prepare_Menu); - ADDMENUITEM(ICON_Homing, GET_TEXT_F(MSG_AUTO_HOME), onDrawMenuItem, AutoHome); - ADDMENUITEM(ICON_MoveZ0, F("Move Z to Home"), onDrawMenuItem, SetMoveZto0); - ADDMENUITEM_P(ICON_Zoffset, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetZOffset, &BABY_Z_VAR); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_Prepare_Menu); + MENU_ITEM(ICON_Homing, GET_TEXT_F(MSG_AUTO_HOME), onDrawMenuItem, AutoHome); + MENU_ITEM(ICON_MoveZ0, F("Move Z to Home"), onDrawMenuItem, SetMoveZto0); + EDIT_ITEM(ICON_Zoffset, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetZOffset, &BABY_Z_VAR); } CurrentMenu->draw(); if (!axis_is_trusted(Z_AXIS)) LCD_MESSAGE_F("WARNING: Z position unknown, move Z to home"); @@ -3760,11 +3779,11 @@ void Draw_Steps_Menu() { CurrentMenu = HomingMenu; CurrentMenu->MenuTitle.SetCaption(GET_TEXT_F(MSG_HOMING)); DWINUI::MenuItemsPrepare(5); - ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_Prepare_Menu); - ADDMENUITEM(ICON_Homing, GET_TEXT_F(MSG_AUTO_HOME), onDrawMenuItem, AutoHome); - ADDMENUITEM(ICON_HomeX, GET_TEXT_F(MSG_AUTO_HOME_X), onDrawMenuItem, HomeX); - ADDMENUITEM(ICON_HomeY, GET_TEXT_F(MSG_AUTO_HOME_Y), onDrawMenuItem, HomeY); - ADDMENUITEM(ICON_HomeZ, GET_TEXT_F(MSG_AUTO_HOME_Z), onDrawMenuItem, HomeZ); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_Prepare_Menu); + MENU_ITEM(ICON_Homing, GET_TEXT_F(MSG_AUTO_HOME), onDrawMenuItem, AutoHome); + MENU_ITEM(ICON_HomeX, GET_TEXT_F(MSG_AUTO_HOME_X), onDrawMenuItem, HomeX); + MENU_ITEM(ICON_HomeY, GET_TEXT_F(MSG_AUTO_HOME_Y), onDrawMenuItem, HomeY); + MENU_ITEM(ICON_HomeZ, GET_TEXT_F(MSG_AUTO_HOME_Z), onDrawMenuItem, HomeZ); } CurrentMenu->draw(); } diff --git a/Marlin/src/lcd/e3v2/enhanced/dwinui.h b/Marlin/src/lcd/e3v2/enhanced/dwinui.h index c92014e84f..cb7720834c 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwinui.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwinui.h @@ -52,6 +52,7 @@ #define ICON_HomeX ICON_MoveX #define ICON_HomeY ICON_MoveY #define ICON_HomeZ ICON_MoveZ +#define ICON_HSMode ICON_StockConfiguration #define ICON_Tram ICON_SetEndTemp #define ICON_Lock ICON_Cool #define ICON_ManualMesh ICON_HotendTemp @@ -110,8 +111,8 @@ constexpr uint16_t TITLE_HEIGHT = 30, // Title bar heig #define MBASE(L) (MYPOS(L) + CAPOFF) // Create and add a MenuItem object to the menu array -#define ADDMENUITEM(V...) DWINUI::MenuItemsAdd(new MenuItemClass(V)) -#define ADDMENUITEM_P(V...) DWINUI::MenuItemsAdd(new MenuItemPtrClass(V)) +#define MENU_ITEM(V...) DWINUI::MenuItemsAdd(new MenuItemClass(V)) +#define EDIT_ITEM(V...) DWINUI::MenuItemsAdd(new MenuItemPtrClass(V)) typedef struct { uint16_t left, top, right, bottom; } rect_t; typedef struct { uint16_t x, y, w, h; } frame_rect_t; From 75d1f975a8623f73ddeb194dffd81ae257c70b35 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 9 Jan 2022 03:48:17 -0600 Subject: [PATCH 340/532] =?UTF-8?q?=F0=9F=94=A8=20Rename=20(not=20copy)=20?= =?UTF-8?q?with=20board=5Fbuild.rename?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/PlatformIO/scripts/offset_and_rename.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/buildroot/share/PlatformIO/scripts/offset_and_rename.py b/buildroot/share/PlatformIO/scripts/offset_and_rename.py index 00803b722e..581a06e91e 100644 --- a/buildroot/share/PlatformIO/scripts/offset_and_rename.py +++ b/buildroot/share/PlatformIO/scripts/offset_and_rename.py @@ -57,7 +57,6 @@ if pioutil.is_pio_build(): def rename_target(source, target, env): firmware = os.path.join(target[0].dir.path, board.get("build.rename")) - import shutil - shutil.copy(target[0].path, firmware) + os.rename(target[0].path, firmware) marlin.add_post_action(rename_target) From 27d252c80b679c98e429d0250af51727a1768f55 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sun, 9 Jan 2022 10:49:39 +0100 Subject: [PATCH 341/532] =?UTF-8?q?=F0=9F=93=8C=20Improve=20Longer3D=20fan?= =?UTF-8?q?=20PWM=20(#23477)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h | 23 +++++++++++----------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h index ca5ae45b3b..59fdc4a3c9 100644 --- a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h +++ b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h @@ -89,20 +89,19 @@ #define HEATER_BED_PIN PA8 // pin 67 (Hot Bed Mosfet) #define FAN_PIN PA15 // pin 77 (4cm Fan) -#ifdef MAPLE_STM32F1 + +#if TERN(MAPLE_STM32F1, ENABLED(FAN_SOFT_PWM), ENABLED(FAST_PWM_FAN)) && FAN_MIN_PWM < 5 // Required to avoid issues with heating or STLink + #error "FAN_MIN_PWM must be 5 or higher." // Fan will not start in 1-30 range +#endif + +#if defined(MAPLE_STM32F1) || DISABLED(FAST_PWM_FAN) // STM32 HAL required to allow TIMER2 Hardware PWM #define FAN_SOFT_PWM_REQUIRED - #if ENABLED(FAN_SOFT_PWM) && FAN_MIN_PWM < 35 // Required to avoid issues with heating or STLink - #error "FAN_MIN_PWM must be 35 or higher." // Fan will not start in 1-30 range - #endif -#elif ENABLED(FAST_PWM_FAN) - #if FAST_PWM_FAN_FREQUENCY != 31400 // Default 1000 is noisy, max 65K (uint16) - #error "FAST_PWM_FAN_FREQUENCY must be set to 31400." - #endif - #if FAN_MIN_PWM < 5 - #error "FAN_MIN_PWM must be 5 or higher." - #endif #else - #error "FAST_PWM_FAN required to allow TIMER2 Hardware PWM." + #if FAST_PWM_FAN_FREQUENCY <= 1000 // Default 1000 is noisy, max 65K (uint16) + #error "FAST_PWM_FAN_FREQUENCY must be greater than 1000." + #elif FAST_PWM_FAN_FREQUENCY > 65535 + #error "FAST_PWM_FAN_FREQUENCY must be less than 65536." + #endif #endif //#define BEEPER_PIN PD13 // pin 60 (Servo PWM output 5V/GND on Board V0G+) made for BL-Touch sensor From 797859cf55cac781c8bb4b04eeeb4dd484b75ec6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Morav=C4=8D=C3=ADk?= Date: Sun, 9 Jan 2022 10:51:16 +0100 Subject: [PATCH 342/532] =?UTF-8?q?=F0=9F=8C=90=20Update=20Slovak=20langua?= =?UTF-8?q?ge=20(#23475)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/language/language_sk.h | 49 ++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h index 275fea3081..db694e2242 100644 --- a/Marlin/src/lcd/language/language_sk.h +++ b/Marlin/src/lcd/language/language_sk.h @@ -72,12 +72,10 @@ namespace Language_sk { LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test uk. priebehu"); LSTR MSG_HOMING = _UxGT("Parkovanie"); LSTR MSG_AUTO_HOME = _UxGT("Domovská pozícia"); + LSTR MSG_AUTO_HOME_A = _UxGT("Domov os @"); LSTR MSG_AUTO_HOME_X = _UxGT("Domov os X"); LSTR MSG_AUTO_HOME_Y = _UxGT("Domov os Y"); LSTR MSG_AUTO_HOME_Z = _UxGT("Domov os Z"); - LSTR MSG_AUTO_HOME_I = _UxGT("Domov os ") LCD_STR_I; - LSTR MSG_AUTO_HOME_J = _UxGT("Domov os ") LCD_STR_J; - LSTR MSG_AUTO_HOME_K = _UxGT("Domov os ") LCD_STR_K; LSTR MSG_FILAMENT_SET = _UxGT("Nastav. filamentu"); LSTR MSG_FILAMENT_MAN = _UxGT("Správa filamentu"); LSTR MSG_LEVBED_FL = _UxGT("Ľavý predný"); @@ -86,6 +84,7 @@ namespace Language_sk { LSTR MSG_LEVBED_BL = _UxGT("Ľavý zadný"); LSTR MSG_LEVBED_BR = _UxGT("Pravý zadný"); LSTR MSG_MANUAL_MESH = _UxGT("Ručná mriežka"); + LSTR MSG_AUTO_MESH = _UxGT("Automat. mriežka"); LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto-zarovn. Z"); LSTR MSG_ITERATION = _UxGT("Iterácia G34: %i"); LSTR MSG_DECREASING_ACCURACY = _UxGT("Klesajúca presnosť!"); @@ -156,8 +155,11 @@ namespace Language_sk { LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Posl. Z: "); LSTR MSG_NEXT_CORNER = _UxGT("Ďalší roh"); LSTR MSG_MESH_EDITOR = _UxGT("Editor sieťe bodov"); + LSTR MSG_MESH_VIEWER = _UxGT("Zobraz. sieťe bodov"); LSTR MSG_EDIT_MESH = _UxGT("Upraviť sieť bodov"); + LSTR MSG_MESH_VIEW = _UxGT("Zobraz. sieť bodov"); LSTR MSG_EDITING_STOPPED = _UxGT("Koniec úprav siete"); + LSTR MSG_NO_VALID_MESH = _UxGT("Neplatná sieť bodov"); LSTR MSG_PROBING_POINT = _UxGT("Skúšam bod"); LSTR MSG_MESH_X = _UxGT("Index X"); LSTR MSG_MESH_Y = _UxGT("Index Y"); @@ -397,6 +399,7 @@ namespace Language_sk { LSTR MSG_ADVANCE_K = _UxGT("K pre posun"); LSTR MSG_ADVANCE_K_E = _UxGT("K pre posun *"); LSTR MSG_CONTRAST = _UxGT("Kontrast LCD"); + LSTR MSG_BRIGHTNESS = _UxGT("Jas LCD"); LSTR MSG_STORE_EEPROM = _UxGT("Uložiť nastavenie"); LSTR MSG_LOAD_EEPROM = _UxGT("Načítať nastavenie"); LSTR MSG_RESTORE_DEFAULTS = _UxGT("Obnoviť nastavenie"); @@ -427,8 +430,14 @@ namespace Language_sk { LSTR MSG_BUTTON_BACK = _UxGT("Naspäť"); LSTR MSG_BUTTON_PROCEED = _UxGT("Pokračovať"); LSTR MSG_BUTTON_SKIP = _UxGT("Preskočiť"); + LSTR MSG_BUTTON_INFO = _UxGT("Informácie"); + LSTR MSG_BUTTON_LEVEL = _UxGT("Vyrovnať"); + LSTR MSG_BUTTON_PAUSE = _UxGT("Pauza"); + LSTR MSG_BUTTON_RESUME = _UxGT("Obnoviť"); + LSTR MSG_BUTTON_ADVANCED = _UxGT("Pokročilé"); LSTR MSG_PAUSING = _UxGT("Pozastavujem..."); LSTR MSG_PAUSE_PRINT = _UxGT("Pozastaviť tlač"); + LSTR MSG_ADVANCED_PAUSE = _UxGT("Pokročil. pauza"); LSTR MSG_RESUME_PRINT = _UxGT("Obnoviť tlač"); LSTR MSG_HOST_START_PRINT = _UxGT("Spustiť z hosta"); LSTR MSG_STOP_PRINT = _UxGT("Zastaviť tlač"); @@ -437,12 +446,14 @@ namespace Language_sk { LSTR MSG_CANCEL_OBJECT = _UxGT("Zrušiť objekt"); LSTR MSG_CANCEL_OBJECT_N = _UxGT("Zrušiť objekt ="); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Obnova po výp. nap."); + LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Pokračovať v úlohe"); LSTR MSG_MEDIA_MENU = _UxGT("Tlačiť z SD"); LSTR MSG_NO_MEDIA = _UxGT("Žiadna SD karta"); LSTR MSG_DWELL = _UxGT("Spím..."); LSTR MSG_USERWAIT = _UxGT("Pokrač. kliknutím..."); LSTR MSG_PRINT_PAUSED = _UxGT("Tlač pozastavená"); LSTR MSG_PRINTING = _UxGT("Tlačím..."); + LSTR MSG_STOPPING = _UxGT("Zastavujem..."); LSTR MSG_PRINT_ABORTED = _UxGT("Tlač zrušená"); LSTR MSG_PRINT_DONE = _UxGT("Tlač dokončená"); LSTR MSG_NO_MOVE = _UxGT("Žiadny pohyb."); @@ -492,6 +503,7 @@ namespace Language_sk { LSTR MSG_BLTOUCH_STOW = _UxGT("Zasunúť"); LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Vysunúť"); LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Režim SW"); + LSTR MSG_BLTOUCH_SPEED_MODE = _UxGT("Vysoká rýchl."); LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Režim 5V"); LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Režim OD"); LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Ulož. režim"); @@ -524,6 +536,7 @@ namespace Language_sk { LSTR MSG_HEATING_FAILED_LCD = _UxGT("Chyba ohrevu"); LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Chyba: REDUND. TEP."); LSTR MSG_THERMAL_RUNAWAY = _UxGT("TEPLOTNÝ SKOK"); + LSTR MSG_TEMP_MALFUNCTION = _UxGT("TEPLOTNÁ PORUCHA"); LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("TEPLOTNÝ SKOK PODL."); LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("TEPLOTNÝ SKOK KOMO."); LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("TEPLOTNÝ SKOK CHLAD."); @@ -531,7 +544,9 @@ namespace Language_sk { LSTR MSG_ERR_MAXTEMP = _UxGT("Chyba: MAXTEMP"); LSTR MSG_ERR_MINTEMP = _UxGT("Chyba: MINTEMP"); LSTR MSG_HALTED = _UxGT("TLAČIAREŇ ZASTAVENÁ"); + LSTR MSG_PLEASE_WAIT = _UxGT("Čakajte prosím..."); LSTR MSG_PLEASE_RESET = _UxGT("Reštartuje ju"); + LSTR MSG_PREHEATING = _UxGT("Zahrievanie..."); LSTR MSG_HEATING = _UxGT("Ohrev..."); LSTR MSG_COOLING = _UxGT("Ochladzovanie..."); LSTR MSG_BED_HEATING = _UxGT("Ohrev podložky..."); @@ -570,25 +585,42 @@ namespace Language_sk { LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Tepl. ochrana: VYP"); LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Tepl. ochrana: ZAP"); LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Vypr.čas nečinnosti"); + LSTR MSG_FAN_SPEED_FAULT = _UxGT("Chyba rýchl. vent."); LSTR MSG_CASE_LIGHT = _UxGT("Osvetlenie"); LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jas svetla"); LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Nesprávna tlačiareň"); #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 + LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("Nie je vložená karta."); + LSTR MSG_REMAINING_TIME = _UxGT("Zostávajúci čas"); + LSTR MSG_PLEASE_WAIT_REBOOT = _UxGT("Prosím čakajte do reštartu. "); + LSTR MSG_PLEASE_PREHEAT = _UxGT("Prosím zahrejte hotend."); + LSTR MSG_INFO_PRINT_COUNT_RESET = _UxGT("Vynulovať počítadlo"); LSTR MSG_INFO_PRINT_COUNT = _UxGT("Počet tlačí"); - LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Dokončené"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Celkový čas"); LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Najdlhšia tlač"); LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Celkom vytlačené"); + LSTR MSG_COLORS_GET = _UxGT("Zvoliť farbu"); + LSTR MSG_COLORS_SELECT = _UxGT("Zvoliť farby"); + LSTR MSG_COLORS_APPLIED = _UxGT("Farby aplikované"); + LSTR MSG_COLORS_RED = _UxGT("Červená"); + LSTR MSG_COLORS_GREEN = _UxGT("Zelená"); + LSTR MSG_COLORS_BLUE = _UxGT("Modrá"); + LSTR MSG_UI_LANGUAGE = _UxGT("Jazyk rozhrania"); + LSTR MSG_SOUND_ENABLE = _UxGT("Povoliť zvuky"); + LSTR MSG_LOCKSCREEN = _UxGT("Uzamknúť obrazovku"); #else + LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("Žiadna karta"); + LSTR MSG_PLEASE_PREHEAT = _UxGT("Prosím zahrejte"); LSTR MSG_INFO_PRINT_COUNT = _UxGT("Tlače"); - LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Hotovo"); + LSTR MSG_REMAINING_TIME = _UxGT("Zostávajúci"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Čas"); LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Najdlhšia"); LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Vytlačené"); #endif + LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Dokončené"); LSTR MSG_INFO_MIN_TEMP = _UxGT("Teplota min"); LSTR MSG_INFO_MAX_TEMP = _UxGT("Teplota max"); LSTR MSG_INFO_PSU = _UxGT("Nap. zdroj"); @@ -613,6 +645,7 @@ namespace Language_sk { LSTR MSG_RUNOUT_SENSOR = _UxGT("Senzor filamentu"); LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Vzd. mm fil. senz."); LSTR MSG_RUNOUT_ENABLE = _UxGT("Zapnúť senzor"); + LSTR MSG_FANCHECK = _UxGT("Kontrola rýchl."); LSTR MSG_KILL_HOMING_FAILED = _UxGT("Parkovanie zlyhalo"); LSTR MSG_LCD_PROBING_FAILED = _UxGT("Kalibrácia zlyhala"); @@ -732,6 +765,10 @@ namespace Language_sk { LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Referencia Z"); LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Presúvam na pozíciu"); + LSTR MSG_XATC = _UxGT("Sprievodca X-Twist"); + LSTR MSG_XATC_DONE = _UxGT("Spriev. X-Twist dokonč.!"); + LSTR MSG_XATC_UPDATE_Z_OFFSET = _UxGT("Aktual. ofset sondy Z na "); + LSTR MSG_SOUND = _UxGT("Zvuk"); LSTR MSG_TOP_LEFT = _UxGT("Ľavý horný"); @@ -745,4 +782,6 @@ namespace Language_sk { LSTR MSG_SD_CARD = _UxGT("SD karta"); LSTR MSG_USB_DISK = _UxGT("USB disk"); + + LSTR MSG_HOST_SHUTDOWN = _UxGT("Vypnúť hosta"); } From 13adcd5c08b7065a32f59d00c17c9bc3a351429c Mon Sep 17 00:00:00 2001 From: David Ross Smith <5095074+DragRedSim@users.noreply.github.com> Date: Fri, 7 Jan 2022 22:44:44 +1100 Subject: [PATCH 343/532] =?UTF-8?q?=F0=9F=9A=91=EF=B8=8F=20Fix=20preheat?= =?UTF-8?q?=20target=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes Jyers/Marlin#1651 --- Marlin/src/lcd/marlinui.cpp | 8 ++++---- Marlin/src/lcd/marlinui.h | 18 ++++++++---------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 5cf3e66826..7b3e267310 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -150,10 +150,10 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; void MarlinUI::apply_preheat(const uint8_t m, const uint8_t pmask, const uint8_t e/*=active_extruder*/) { const preheat_t &pre = material_preset[m]; - TERN_(HAS_HOTEND, if (TEST(pmask, PM_HOTEND)) thermalManager.setTargetHotend(pre.hotend_temp, e)); - TERN_(HAS_HEATED_BED, if (TEST(pmask, PM_BED)) thermalManager.setTargetBed(pre.bed_temp)); - //TERN_(HAS_HEATED_CHAMBER, if (TEST(pmask, PM_CHAMBER)) thermalManager.setTargetBed(pre.chamber_temp)); - TERN_(HAS_FAN, if (TEST(pmask, PM_FAN)) thermalManager.set_fan_speed(0, pre.fan_speed)); + 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_FAN, if (TEST(pmask, PT_FAN)) thermalManager.set_fan_speed(0, pre.fan_speed)); } #endif diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index e9aa0a6da5..f409970e42 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -496,22 +496,20 @@ public: #endif #if HAS_PREHEAT - enum PreheatMask : uint8_t { PM_HOTEND = _BV(0), PM_BED = _BV(1), PM_FAN = _BV(2), PM_CHAMBER = _BV(3) }; + enum PreheatTarget : uint8_t { PT_HOTEND, PT_BED, PT_FAN, PT_CHAMBER, PT_ALL = 0xFF }; static preheat_t material_preset[PREHEAT_COUNT]; static PGM_P get_preheat_label(const uint8_t m); static void apply_preheat(const uint8_t m, const uint8_t pmask, const uint8_t e=active_extruder); - static void preheat_set_fan(const uint8_t m) { TERN_(HAS_FAN, apply_preheat(m, PM_FAN)); } - static void preheat_hotend(const uint8_t m, const uint8_t e=active_extruder) { TERN_(HAS_HOTEND, apply_preheat(m, PM_HOTEND)); } + static void preheat_set_fan(const uint8_t m) { TERN_(HAS_FAN, apply_preheat(m, _BV(PT_FAN))); } + static void preheat_hotend(const uint8_t m, const uint8_t e=active_extruder) { TERN_(HAS_HOTEND, apply_preheat(m, _BV(PT_HOTEND))); } static void preheat_hotend_and_fan(const uint8_t m, const uint8_t e=active_extruder) { preheat_hotend(m, e); preheat_set_fan(m); } - static void preheat_bed(const uint8_t m) { TERN_(HAS_HEATED_BED, apply_preheat(m, PM_BED)); } - static void preheat_all(const uint8_t m) { apply_preheat(m, 0xFF); } + static void preheat_bed(const uint8_t m) { TERN_(HAS_HEATED_BED, apply_preheat(m, _BV(PT_BED))); } + static void preheat_all(const uint8_t m) { apply_preheat(m, PT_ALL); } #endif - #if SCREENS_CAN_TIME_OUT - static void reset_status_timeout(const millis_t ms) { return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS; } - #else - static void reset_status_timeout(const millis_t) {} - #endif + static void reset_status_timeout(const millis_t ms) { + TERN(SCREENS_CAN_TIME_OUT, return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS, UNUSED(ms)); + } #if HAS_LCD_MENU From 80128ae456318cde87e1c6374215b14b8b6c0879 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 9 Jan 2022 04:39:15 -0600 Subject: [PATCH 344/532] =?UTF-8?q?=F0=9F=8C=90=20Update=20auto=20home=20a?= =?UTF-8?q?xis=20strings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/language/language_fr.h | 4 +--- Marlin/src/lcd/language/language_hu.h | 4 +--- Marlin/src/lcd/language/language_it.h | 4 +--- Marlin/src/lcd/language/language_ru.h | 4 +--- Marlin/src/lcd/language/language_uk.h | 4 +--- 5 files changed, 5 insertions(+), 15 deletions(-) diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h index d72578d8d6..41ab9ebaf1 100644 --- a/Marlin/src/lcd/language/language_fr.h +++ b/Marlin/src/lcd/language/language_fr.h @@ -58,12 +58,10 @@ namespace Language_fr { 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_HOME_I = _UxGT("Origine ") LCD_STR_I _UxGT(" auto"); - LSTR MSG_AUTO_HOME_J = _UxGT("Origine ") LCD_STR_J _UxGT(" auto"); - LSTR MSG_AUTO_HOME_K = _UxGT("Origine ") LCD_STR_K _UxGT(" 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"); diff --git a/Marlin/src/lcd/language/language_hu.h b/Marlin/src/lcd/language/language_hu.h index cfe7af5897..8b5e786303 100644 --- a/Marlin/src/lcd/language/language_hu.h +++ b/Marlin/src/lcd/language/language_hu.h @@ -62,12 +62,10 @@ namespace Language_hu { LSTR MSG_DEBUG_MENU = _UxGT("Hiba Menü"); LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Haladás sáv teszt"); LSTR MSG_AUTO_HOME = _UxGT("X-Y-Z auto kezdöpont"); + LSTR MSG_AUTO_HOME_A = _UxGT("Kezdö @"); LSTR MSG_AUTO_HOME_X = _UxGT("X kezdöpont"); LSTR MSG_AUTO_HOME_Y = _UxGT("Y kezdöpont"); LSTR MSG_AUTO_HOME_Z = _UxGT("Z kezdöpont"); - LSTR MSG_AUTO_HOME_I = _UxGT("Kezdö ") LCD_STR_I; - LSTR MSG_AUTO_HOME_J = _UxGT("Kezdö ") LCD_STR_J; - LSTR MSG_AUTO_HOME_K = _UxGT("Kezdö ") LCD_STR_K; LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-igazítás"); LSTR MSG_ITERATION = _UxGT("G34 Ismétlés: %i"); LSTR MSG_DECREASING_ACCURACY = _UxGT("Pontosság csökken!"); diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index e0ae0e62a4..1c36a5de21 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -68,12 +68,10 @@ namespace Language_it { LSTR MSG_DEBUG_MENU = _UxGT("Menu di debug"); LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test barra avanzam."); LSTR MSG_AUTO_HOME = _UxGT("Auto Home"); + LSTR MSG_AUTO_HOME_A = _UxGT("Home @"); LSTR MSG_AUTO_HOME_X = _UxGT("Home X"); LSTR MSG_AUTO_HOME_Y = _UxGT("Home Y"); LSTR MSG_AUTO_HOME_Z = _UxGT("Home Z"); - LSTR MSG_AUTO_HOME_I = _UxGT("Home ") LCD_STR_I; - LSTR MSG_AUTO_HOME_J = _UxGT("Home ") LCD_STR_J; - LSTR MSG_AUTO_HOME_K = _UxGT("Home ") LCD_STR_K; LSTR MSG_AUTO_Z_ALIGN = _UxGT("Allineam.automat. Z"); LSTR MSG_ITERATION = _UxGT("Iterazione G34: %i"); LSTR MSG_DECREASING_ACCURACY = _UxGT("Precisione in calo!"); diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h index 774636f1ed..5e3d0f2fac 100644 --- a/Marlin/src/lcd/language/language_ru.h +++ b/Marlin/src/lcd/language/language_ru.h @@ -66,12 +66,10 @@ namespace Language_ru { LSTR MSG_DEBUG_MENU = _UxGT("Меню отладки"); LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Тест индикатора"); LSTR MSG_AUTO_HOME = _UxGT("Парковка XYZ"); + LSTR MSG_AUTO_HOME_A = _UxGT("Парковка @"); LSTR MSG_AUTO_HOME_X = _UxGT("Парковка X"); LSTR MSG_AUTO_HOME_Y = _UxGT("Парковка Y"); LSTR MSG_AUTO_HOME_Z = _UxGT("Парковка Z"); - LSTR MSG_AUTO_HOME_I = _UxGT("Парковка ") LCD_STR_I; - LSTR MSG_AUTO_HOME_J = _UxGT("Парковка ") LCD_STR_J; - LSTR MSG_AUTO_HOME_K = _UxGT("Парковка ") LCD_STR_K; LSTR MSG_AUTO_Z_ALIGN = _UxGT("Авто Z-выравнивание"); LSTR MSG_ITERATION = _UxGT("G34 Итерация: %i"); LSTR MSG_DECREASING_ACCURACY = _UxGT("Уменьшение точности!"); diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h index 798351c67e..028e48bb41 100644 --- a/Marlin/src/lcd/language/language_uk.h +++ b/Marlin/src/lcd/language/language_uk.h @@ -68,12 +68,10 @@ namespace Language_uk { LSTR MSG_DEBUG_MENU = _UxGT("Меню Debug"); LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Тест лінії прогр."); LSTR MSG_AUTO_HOME = _UxGT("Авто паркування"); + LSTR MSG_AUTO_HOME_A = _UxGT("Паркування @"); LSTR MSG_AUTO_HOME_X = _UxGT("Паркування X"); LSTR MSG_AUTO_HOME_Y = _UxGT("Паркування Y"); LSTR MSG_AUTO_HOME_Z = _UxGT("Паркування Z"); - LSTR MSG_AUTO_HOME_I = _UxGT("Паркування ") LCD_STR_I; - LSTR MSG_AUTO_HOME_J = _UxGT("Паркування ") LCD_STR_J; - LSTR MSG_AUTO_HOME_K = _UxGT("Паркування ") LCD_STR_K; LSTR MSG_AUTO_Z_ALIGN = _UxGT("Авто Z-вирівнювання"); LSTR MSG_ITERATION = _UxGT("G34 Ітерація: %i"); LSTR MSG_DECREASING_ACCURACY = _UxGT("Зменьшення точності!"); From 0dfc17ca607640c62f4e53ed7bf39d3782773fe6 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 10 Jan 2022 01:06:10 +0000 Subject: [PATCH 345/532] [cron] Bump distribution date (2022-01-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 8d30265209..8feb7385b8 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 "2022-01-09" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 e571b342a0..75ffed6533 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 "2022-01-09" + #define STRING_DISTRIBUTION_DATE "2022-01-10" #endif /** From a719020348e121245ba2ec6c5e60149c661241a0 Mon Sep 17 00:00:00 2001 From: DerAndere <26200979+DerAndere1@users.noreply.github.com> Date: Mon, 10 Jan 2022 09:44:16 +0100 Subject: [PATCH 346/532] =?UTF-8?q?=F0=9F=9A=B8=20Include=20extra=20axes?= =?UTF-8?q?=20in=20position=20report=20(#23490)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/motion.cpp | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index a77f395fb4..23084c48fb 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -217,9 +217,7 @@ void report_real_position() { xyze_pos_t npos = LOGICAL_AXIS_ARRAY( planner.get_axis_position_mm(E_AXIS), cartes.x, cartes.y, cartes.z, - planner.get_axis_position_mm(I_AXIS), - planner.get_axis_position_mm(J_AXIS), - planner.get_axis_position_mm(K_AXIS) + cartes.i, cartes.j, cartes.k ); TERN_(HAS_POSITION_MODIFIERS, planner.unapply_modifiers(npos, true)); @@ -263,27 +261,23 @@ void report_current_position_projected() { * Output the current position (processed) to serial while moving */ void report_current_position_moving() { - get_cartesian_from_steppers(); const xyz_pos_t lpos = cartes.asLogical(); - SERIAL_ECHOPGM( - "X:", lpos.x - #if HAS_Y_AXIS - , " Y:", lpos.y - #endif - #if HAS_Z_AXIS - , " Z:", lpos.z - #endif - #if HAS_EXTRUDERS - , " E:", current_position.e - #endif + + SERIAL_ECHOPGM_P( + LIST_N(DOUBLE(LOGICAL_AXES), + SP_E_LBL, current_position.e, + X_LBL, lpos.x, + SP_Y_LBL, lpos.y, + SP_Z_LBL, lpos.z, + SP_I_LBL, lpos.i, + SP_J_LBL, lpos.j, + SP_K_LBL, lpos.k + ) ); stepper.report_positions(); - #if IS_SCARA - scara_report_positions(); - #endif - + TERN_(IS_SCARA, scara_report_positions()); report_current_grblstate_moving(); } From 9665a4434cee0386fa2a63a058b6f2598943ee98 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 10 Jan 2022 02:51:34 -0600 Subject: [PATCH 347/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Few?= =?UTF-8?q?er=20string=20macros?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/language.h | 107 ++++++++---------- Marlin/src/core/serial.cpp | 8 +- Marlin/src/core/types.h | 2 +- Marlin/src/gcode/calibrate/G28.cpp | 6 +- Marlin/src/gcode/feature/pause/G61.cpp | 2 +- Marlin/src/gcode/motion/G0_G1.cpp | 2 +- Marlin/src/gcode/motion/M290.cpp | 2 +- .../generic/max_acceleration_screen.cpp | 8 +- .../generic/max_velocity_screen.cpp | 8 +- .../generic/temperature_screen.cpp | 8 +- Marlin/src/lcd/language/language_an.h | 26 ++--- Marlin/src/lcd/language/language_bg.h | 12 +- Marlin/src/lcd/language/language_ca.h | 12 +- Marlin/src/lcd/language/language_cz.h | 64 +++++------ Marlin/src/lcd/language/language_da.h | 12 +- Marlin/src/lcd/language/language_de.h | 66 +++++------ Marlin/src/lcd/language/language_el.h | 52 ++++----- Marlin/src/lcd/language/language_el_gr.h | 52 ++++----- Marlin/src/lcd/language/language_en.h | 102 ++++++++--------- Marlin/src/lcd/language/language_es.h | 64 +++++------ Marlin/src/lcd/language/language_eu.h | 36 +++--- Marlin/src/lcd/language/language_fr.h | 82 +++++++------- Marlin/src/lcd/language/language_gl.h | 64 +++++------ Marlin/src/lcd/language/language_hu.h | 82 +++++++------- Marlin/src/lcd/language/language_it.h | 82 +++++++------- Marlin/src/lcd/language/language_jp_kana.h | 44 +++---- Marlin/src/lcd/language/language_pl.h | 36 +++--- Marlin/src/lcd/language/language_pt.h | 12 +- Marlin/src/lcd/language/language_pt_br.h | 24 ++-- Marlin/src/lcd/language/language_ro.h | 64 +++++------ Marlin/src/lcd/language/language_ru.h | 88 +++++++------- Marlin/src/lcd/language/language_sk.h | 90 +++++++-------- Marlin/src/lcd/language/language_sv.h | 64 +++++------ Marlin/src/lcd/language/language_tr.h | 64 +++++------ Marlin/src/lcd/language/language_uk.h | 88 +++++++------- Marlin/src/lcd/language/language_vi.h | 64 +++++------ Marlin/src/lcd/language/language_zh_CN.h | 64 +++++------ Marlin/src/lcd/language/language_zh_TW.h | 64 +++++------ Marlin/src/lcd/menu/menu_advanced.cpp | 4 +- Marlin/src/lcd/menu/menu_info.cpp | 16 +-- Marlin/src/lcd/menu/menu_motion.cpp | 12 +- Marlin/src/lcd/menu/menu_tmc.cpp | 54 ++++----- Marlin/src/libs/L64XX/L64XX_Marlin.cpp | 2 +- Marlin/src/module/motion.cpp | 6 +- Marlin/src/module/planner.cpp | 6 +- Marlin/src/module/temperature.cpp | 4 +- 46 files changed, 910 insertions(+), 921 deletions(-) diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h index c1f2e7e31c..a540c9c771 100644 --- a/Marlin/src/core/language.h +++ b/Marlin/src/core/language.h @@ -341,9 +341,6 @@ #define STR_X "X" #define STR_Y "Y" #define STR_Z "Z" -#define STR_I AXIS4_STR -#define STR_J AXIS5_STR -#define STR_K AXIS6_STR #define STR_E "E" #if IS_KINEMATIC #define STR_A "A" @@ -360,115 +357,107 @@ #define STR_Z3 "Z3" #define STR_Z4 "Z4" -#define LCD_STR_A STR_A -#define LCD_STR_B STR_B -#define LCD_STR_C STR_C -#define LCD_STR_I STR_I -#define LCD_STR_J STR_J -#define LCD_STR_K STR_K -#define LCD_STR_E STR_E - // Extra Axis and Endstop Names #if HAS_I_AXIS #if AXIS4_NAME == 'A' - #define AXIS4_STR "A" + #define STR_I "A" #define STR_I_MIN "a_min" #define STR_I_MAX "a_max" #elif AXIS4_NAME == 'B' - #define AXIS4_STR "B" + #define STR_I "B" #define STR_I_MIN "b_min" #define STR_I_MAX "b_max" #elif AXIS4_NAME == 'C' - #define AXIS4_STR "C" + #define STR_I "C" #define STR_I_MIN "c_min" #define STR_I_MAX "c_max" #elif AXIS4_NAME == 'U' - #define AXIS4_STR "U" + #define STR_I "U" #define STR_I_MIN "u_min" #define STR_I_MAX "u_max" #elif AXIS4_NAME == 'V' - #define AXIS4_STR "V" + #define STR_I "V" #define STR_I_MIN "v_min" #define STR_I_MAX "v_max" #elif AXIS4_NAME == 'W' - #define AXIS4_STR "W" + #define STR_I "W" #define STR_I_MIN "w_min" #define STR_I_MAX "w_max" #else - #define AXIS4_STR "A" + #define STR_I "A" #define STR_I_MIN "a_min" #define STR_I_MAX "a_max" #endif #else - #define AXIS4_STR "" + #define STR_I "" #endif #if HAS_J_AXIS #if AXIS5_NAME == 'A' - #define AXIS5_STR "A" + #define STR_J "A" #define STR_J_MIN "a_min" #define STR_J_MAX "a_max" #elif AXIS5_NAME == 'B' - #define AXIS5_STR "B" + #define STR_J "B" #define STR_J_MIN "b_min" #define STR_J_MAX "b_max" #elif AXIS5_NAME == 'C' - #define AXIS5_STR "C" + #define STR_J "C" #define STR_J_MIN "c_min" #define STR_J_MAX "c_max" #elif AXIS5_NAME == 'U' - #define AXIS5_STR "U" + #define STR_J "U" #define STR_J_MIN "u_min" #define STR_J_MAX "u_max" #elif AXIS5_NAME == 'V' - #define AXIS5_STR "V" + #define STR_J "V" #define STR_J_MIN "v_min" #define STR_J_MAX "v_max" #elif AXIS5_NAME == 'W' - #define AXIS5_STR "W" + #define STR_J "W" #define STR_J_MIN "w_min" #define STR_J_MAX "w_max" #else - #define AXIS5_STR "B" + #define STR_J "B" #define STR_J_MIN "b_min" #define STR_J_MAX "b_max" #endif #else - #define AXIS5_STR "" + #define STR_J "" #endif #if HAS_K_AXIS #if AXIS6_NAME == 'A' - #define AXIS6_STR "A" + #define STR_K "A" #define STR_K_MIN "a_min" #define STR_K_MAX "a_max" #elif AXIS6_NAME == 'B' - #define AXIS6_STR "B" + #define STR_K "B" #define STR_K_MIN "b_min" #define STR_K_MAX "b_max" #elif AXIS6_NAME == 'C' - #define AXIS6_STR "C" + #define STR_K "C" #define STR_K_MIN "c_min" #define STR_K_MAX "c_max" #elif AXIS6_NAME == 'U' - #define AXIS6_STR "U" + #define STR_K "U" #define STR_K_MIN "u_min" #define STR_K_MAX "u_max" #elif AXIS6_NAME == 'V' - #define AXIS6_STR "V" + #define STR_K "V" #define STR_K_MIN "v_min" #define STR_K_MAX "v_max" #elif AXIS6_NAME == 'W' - #define AXIS6_STR "W" + #define STR_K "W" #define STR_K_MIN "w_min" #define STR_K_MAX "w_max" #else - #define AXIS6_STR "C" + #define STR_K "C" #define STR_K_MIN "c_min" #define STR_K_MAX "c_max" #endif #else - #define AXIS6_STR "" + #define STR_K "" #endif #if EITHER(HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL) @@ -519,34 +508,34 @@ */ #if ENABLED(NUMBER_TOOLS_FROM_0) #define LCD_FIRST_TOOL 0 - #define LCD_STR_N0 "0" - #define LCD_STR_N1 "1" - #define LCD_STR_N2 "2" - #define LCD_STR_N3 "3" - #define LCD_STR_N4 "4" - #define LCD_STR_N5 "5" - #define LCD_STR_N6 "6" - #define LCD_STR_N7 "7" + #define STR_N0 "0" + #define STR_N1 "1" + #define STR_N2 "2" + #define STR_N3 "3" + #define STR_N4 "4" + #define STR_N5 "5" + #define STR_N6 "6" + #define STR_N7 "7" #else #define LCD_FIRST_TOOL 1 - #define LCD_STR_N0 "1" - #define LCD_STR_N1 "2" - #define LCD_STR_N2 "3" - #define LCD_STR_N3 "4" - #define LCD_STR_N4 "5" - #define LCD_STR_N5 "6" - #define LCD_STR_N6 "7" - #define LCD_STR_N7 "8" + #define STR_N0 "1" + #define STR_N1 "2" + #define STR_N2 "3" + #define STR_N3 "4" + #define STR_N4 "5" + #define STR_N5 "6" + #define STR_N6 "7" + #define STR_N7 "8" #endif -#define LCD_STR_E0 "E" LCD_STR_N0 -#define LCD_STR_E1 "E" LCD_STR_N1 -#define LCD_STR_E2 "E" LCD_STR_N2 -#define LCD_STR_E3 "E" LCD_STR_N3 -#define LCD_STR_E4 "E" LCD_STR_N4 -#define LCD_STR_E5 "E" LCD_STR_N5 -#define LCD_STR_E6 "E" LCD_STR_N6 -#define LCD_STR_E7 "E" LCD_STR_N7 +#define STR_E0 STR_E STR_N0 +#define STR_E1 STR_E STR_N1 +#define STR_E2 STR_E STR_N2 +#define STR_E3 STR_E STR_N3 +#define STR_E4 STR_E STR_N4 +#define STR_E5 STR_E STR_N5 +#define STR_E6 STR_E STR_N6 +#define STR_E7 STR_E STR_N7 // Include localized LCD Menu Messages diff --git a/Marlin/src/core/serial.cpp b/Marlin/src/core/serial.cpp index 9cd862df70..2b1ae1f1fe 100644 --- a/Marlin/src/core/serial.cpp +++ b/Marlin/src/core/serial.cpp @@ -36,10 +36,10 @@ PGMSTR(X_LBL, "X:"); PGMSTR(Y_LBL, "Y:"); PGMSTR(Z_LBL, "Z:"); PGMST PGMSTR(SP_A_STR, " A"); PGMSTR(SP_B_STR, " B"); PGMSTR(SP_C_STR, " C"); PGMSTR(SP_X_STR, " X"); PGMSTR(SP_Y_STR, " Y"); PGMSTR(SP_Z_STR, " Z"); PGMSTR(SP_E_STR, " E"); PGMSTR(SP_X_LBL, " X:"); PGMSTR(SP_Y_LBL, " Y:"); PGMSTR(SP_Z_LBL, " Z:"); PGMSTR(SP_E_LBL, " E:"); -PGMSTR(I_STR, AXIS4_STR); PGMSTR(J_STR, AXIS5_STR); PGMSTR(K_STR, AXIS6_STR); -PGMSTR(I_LBL, AXIS4_STR ":"); PGMSTR(J_LBL, AXIS5_STR ":"); PGMSTR(K_LBL, AXIS6_STR ":"); -PGMSTR(SP_I_STR, " " AXIS4_STR); PGMSTR(SP_J_STR, " " AXIS5_STR); PGMSTR(SP_K_STR, " " AXIS6_STR); -PGMSTR(SP_I_LBL, " " AXIS4_STR ":"); PGMSTR(SP_J_LBL, " " AXIS5_STR ":"); PGMSTR(SP_K_LBL, " " AXIS6_STR ":"); +PGMSTR(I_STR, STR_I); PGMSTR(J_STR, STR_J); PGMSTR(K_STR, STR_K); +PGMSTR(I_LBL, STR_I ":"); PGMSTR(J_LBL, STR_J ":"); PGMSTR(K_LBL, STR_K ":"); +PGMSTR(SP_I_STR, " " STR_I); PGMSTR(SP_J_STR, " " STR_J); PGMSTR(SP_K_STR, " " STR_K); +PGMSTR(SP_I_LBL, " " STR_I ":"); PGMSTR(SP_J_LBL, " " STR_J ":"); PGMSTR(SP_K_LBL, " " STR_K ":"); // Hook Meatpack if it's enabled on the first leaf #if ENABLED(MEATPACK_ON_SERIAL_PORT_1) diff --git a/Marlin/src/core/types.h b/Marlin/src/core/types.h index e5d95d81ec..aee25a0dff 100644 --- a/Marlin/src/core/types.h +++ b/Marlin/src/core/types.h @@ -52,7 +52,7 @@ struct IF { typedef L type; }; #define LOGICAL_AXIS_ELEM(O) LOGICAL_AXIS_LIST(O.e, O.x, O.y, O.z, O.i, O.j, O.k) #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) -#define LOGICAL_AXES_STRING LOGICAL_AXIS_GANG("E", "X", "Y", "Z", AXIS4_STR, AXIS5_STR, AXIS6_STR) +#define LOGICAL_AXES_STRING LOGICAL_AXIS_GANG("E", "X", "Y", "Z", STR_I, STR_J, STR_K) #if HAS_EXTRUDERS #define LIST_ITEM_E(N) , N diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 421220e410..bd651cd7d8 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -293,17 +293,17 @@ void GcodeSuite::G28() { #if HAS_CURRENT_HOME(I) const int16_t tmc_save_current_I = stepperI.getMilliamps(); stepperI.rms_current(I_CURRENT_HOME); - if (DEBUGGING(LEVELING)) debug_current(F(AXIS4_STR), tmc_save_current_I, I_CURRENT_HOME); + if (DEBUGGING(LEVELING)) debug_current(F(STR_I), tmc_save_current_I, I_CURRENT_HOME); #endif #if HAS_CURRENT_HOME(J) const int16_t tmc_save_current_J = stepperJ.getMilliamps(); stepperJ.rms_current(J_CURRENT_HOME); - if (DEBUGGING(LEVELING)) debug_current(F(AXIS5_STR), tmc_save_current_J, J_CURRENT_HOME); + if (DEBUGGING(LEVELING)) debug_current(F(STR_J), tmc_save_current_J, J_CURRENT_HOME); #endif #if HAS_CURRENT_HOME(K) const int16_t tmc_save_current_K = stepperK.getMilliamps(); stepperK.rms_current(K_CURRENT_HOME); - if (DEBUGGING(LEVELING)) debug_current(F(AXIS6_STR), tmc_save_current_K, K_CURRENT_HOME); + if (DEBUGGING(LEVELING)) debug_current(F(STR_K), tmc_save_current_K, K_CURRENT_HOME); #endif #if HAS_CURRENT_HOME(Z) && ENABLED(DELTA) const int16_t tmc_save_current_Z = stepperZ.getMilliamps(); diff --git a/Marlin/src/gcode/feature/pause/G61.cpp b/Marlin/src/gcode/feature/pause/G61.cpp index f3e5a2ab38..18667501e4 100644 --- a/Marlin/src/gcode/feature/pause/G61.cpp +++ b/Marlin/src/gcode/feature/pause/G61.cpp @@ -68,7 +68,7 @@ void GcodeSuite::G61(void) { SYNC_E(stored_position[slot].e); } else { - if (parser.seen(LINEAR_AXIS_GANG("X", "Y", "Z", AXIS4_STR, AXIS5_STR, AXIS6_STR))) { + if (parser.seen(LINEAR_AXIS_GANG("X", "Y", "Z", STR_I, STR_J, STR_K))) { DEBUG_ECHOPGM(STR_RESTORING_POS " S", slot); LOOP_LINEAR_AXES(i) { destination[i] = parser.seen(AXIS_CHAR(i)) diff --git a/Marlin/src/gcode/motion/G0_G1.cpp b/Marlin/src/gcode/motion/G0_G1.cpp index cc6979b74c..493fd00da1 100644 --- a/Marlin/src/gcode/motion/G0_G1.cpp +++ b/Marlin/src/gcode/motion/G0_G1.cpp @@ -89,7 +89,7 @@ void GcodeSuite::G0_G1(TERN_(HAS_FAST_MOVES, const bool fast_move/*=false*/)) { 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(LINEAR_AXIS_GANG("X", "Y", "Z", AXIS4_STR, AXIS5_STR, AXIS6_STR)) + && !parser.seen(LINEAR_AXIS_GANG("X", "Y", "Z", STR_I, STR_J, STR_K)) ) { const float echange = destination.e - current_position.e; // Is this a retract or recover move? diff --git a/Marlin/src/gcode/motion/M290.cpp b/Marlin/src/gcode/motion/M290.cpp index 747ddd64de..f3d7b7c8dc 100644 --- a/Marlin/src/gcode/motion/M290.cpp +++ b/Marlin/src/gcode/motion/M290.cpp @@ -87,7 +87,7 @@ void GcodeSuite::M290() { } #endif - if (!parser.seen(LINEAR_AXIS_GANG("X", "Y", "Z", AXIS4_STR, AXIS5_STR, AXIS6_STR)) || parser.seen('R')) { + if (!parser.seen(LINEAR_AXIS_GANG("X", "Y", "Z", STR_I, STR_J, STR_K)) || parser.seen('R')) { SERIAL_ECHO_START(); #if ENABLED(BABYSTEP_ZPROBE_OFFSET) diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/max_acceleration_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/max_acceleration_screen.cpp index be3a244380..228bc5f96b 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/max_acceleration_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/max_acceleration_screen.cpp @@ -41,13 +41,13 @@ void MaxAccelerationScreen::onRedraw(draw_mode_t what) { w.color(e_axis).adjuster( 8, GET_TEXT_F(MSG_AMAX_E), getAxisMaxAcceleration_mm_s2(E0) ); #elif DISTINCT_E > 1 w.heading(GET_TEXT_F(MSG_AMAX_E)); - w.color(e_axis).adjuster( 8, F(LCD_STR_E0), getAxisMaxAcceleration_mm_s2(E0) ); - w.color(e_axis).adjuster(10, F(LCD_STR_E1), getAxisMaxAcceleration_mm_s2(E1) ); + w.color(e_axis).adjuster( 8, F(STR_E0), getAxisMaxAcceleration_mm_s2(E0) ); + w.color(e_axis).adjuster(10, F(STR_E1), getAxisMaxAcceleration_mm_s2(E1) ); #if DISTINCT_E > 2 - w.color(e_axis).adjuster(12, F(LCD_STR_E2), getAxisMaxAcceleration_mm_s2(E2) ); + w.color(e_axis).adjuster(12, F(STR_E2), getAxisMaxAcceleration_mm_s2(E2) ); #endif #if DISTINCT_E > 3 - w.color(e_axis).adjuster(14, F(LCD_STR_E3), getAxisMaxAcceleration_mm_s2(E3) ); + w.color(e_axis).adjuster(14, F(STR_E3), getAxisMaxAcceleration_mm_s2(E3) ); #endif #endif w.increments(); 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 bca533c94f..65dc947b7b 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 @@ -42,13 +42,13 @@ void MaxVelocityScreen::onRedraw(draw_mode_t what) { w.color(e_axis) .adjuster( 8, GET_TEXT_F(MSG_VMAX_E), getAxisMaxFeedrate_mm_s(E0) ); #elif HAS_MULTI_EXTRUDER w.heading(GET_TEXT_F(MSG_VMAX_E)); - w.color(e_axis) .adjuster( 8, F(LCD_STR_E0), getAxisMaxFeedrate_mm_s(E0) ); - w.color(e_axis) .adjuster( 10, F(LCD_STR_E1), getAxisMaxFeedrate_mm_s(E1) ); + w.color(e_axis) .adjuster( 8, F(STR_E0), getAxisMaxFeedrate_mm_s(E0) ); + w.color(e_axis) .adjuster( 10, F(STR_E1), getAxisMaxFeedrate_mm_s(E1) ); #if EXTRUDERS > 2 - w.color(e_axis).adjuster( 12, F(LCD_STR_E2), getAxisMaxFeedrate_mm_s(E2) ); + w.color(e_axis).adjuster( 12, F(STR_E2), getAxisMaxFeedrate_mm_s(E2) ); #endif #if EXTRUDERS > 3 - w.color(e_axis).adjuster( 14, F(LCD_STR_E3), getAxisMaxFeedrate_mm_s(E3) ); + w.color(e_axis).adjuster( 14, F(STR_E3), getAxisMaxFeedrate_mm_s(E3) ); #endif #endif w.increments(); diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/temperature_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/temperature_screen.cpp index ee53a82bee..2dbf2d9f06 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/temperature_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/temperature_screen.cpp @@ -50,13 +50,13 @@ void TemperatureScreen::onRedraw(draw_mode_t what) { #elif HOTENDS == 1 w.adjuster( 2, GET_TEXT_F(MSG_NOZZLE), getTargetTemp_celsius(E0)); #else - w.adjuster( 2, F(LCD_STR_E0), getTargetTemp_celsius(E0)); - w.adjuster( 4, F(LCD_STR_E1), getTargetTemp_celsius(E1)); + w.adjuster( 2, F(STR_E0), getTargetTemp_celsius(E0)); + w.adjuster( 4, F(STR_E1), getTargetTemp_celsius(E1)); #if HOTENDS > 2 - w.adjuster( 6, F(LCD_STR_E2), getTargetTemp_celsius(E2)); + w.adjuster( 6, F(STR_E2), getTargetTemp_celsius(E2)); #endif #if HOTENDS > 3 - w.adjuster( 8, F(LCD_STR_E3), getTargetTemp_celsius(E3)); + w.adjuster( 8, F(STR_E3), getTargetTemp_celsius(E3)); #endif #endif #endif diff --git a/Marlin/src/lcd/language/language_an.h b/Marlin/src/lcd/language/language_an.h index 02d4455331..1ebe138687 100644 --- a/Marlin/src/lcd/language/language_an.h +++ b/Marlin/src/lcd/language/language_an.h @@ -107,23 +107,23 @@ namespace Language_an { LSTR MSG_ACC = _UxGT("Aceleracion"); LSTR MSG_VTRAV_MIN = _UxGT("Vel. viache min"); LSTR MSG_ACCELERATION = _UxGT("Accel"); - LSTR MSG_AMAX_A = _UxGT("Acel. max ") LCD_STR_A; - LSTR MSG_AMAX_B = _UxGT("Acel. max ") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("Acel. max ") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("Acel. max ") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("Acel. max ") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("Acel. max ") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("Acel. max ") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("Acel. max ") STR_A; + LSTR MSG_AMAX_B = _UxGT("Acel. max ") STR_B; + LSTR MSG_AMAX_C = _UxGT("Acel. max ") STR_C; + LSTR MSG_AMAX_I = _UxGT("Acel. max ") STR_I; + LSTR MSG_AMAX_J = _UxGT("Acel. max ") STR_J; + LSTR MSG_AMAX_K = _UxGT("Acel. max ") STR_K; + LSTR MSG_AMAX_E = _UxGT("Acel. max ") STR_E; LSTR MSG_AMAX_EN = _UxGT("Acel. max *"); LSTR MSG_A_RETRACT = _UxGT("Acel. retrac."); LSTR MSG_A_TRAVEL = _UxGT("Acel. Viaje"); LSTR MSG_STEPS_PER_MM = _UxGT("Trangos/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" trangos/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" trangos/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" trangos/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" trangos/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" trangos/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" trangos/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" trangos/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" trangos/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" trangos/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" trangos/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" trangos/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" trangos/mm"); LSTR MSG_E_STEPS = _UxGT("E trangos/mm"); LSTR MSG_EN_STEPS = _UxGT("* trangos/mm"); LSTR MSG_TEMPERATURE = _UxGT("Temperatura"); diff --git a/Marlin/src/lcd/language/language_bg.h b/Marlin/src/lcd/language/language_bg.h index 05209f7718..3137228c2d 100644 --- a/Marlin/src/lcd/language/language_bg.h +++ b/Marlin/src/lcd/language/language_bg.h @@ -99,12 +99,12 @@ namespace Language_bg { LSTR MSG_A_RETRACT = _UxGT("A-откат"); LSTR MSG_A_TRAVEL = _UxGT("A-travel"); LSTR MSG_STEPS_PER_MM = _UxGT("Стъпки/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" стъпки/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" стъпки/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" стъпки/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" стъпки/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" стъпки/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" стъпки/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" стъпки/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" стъпки/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" стъпки/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" стъпки/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" стъпки/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" стъпки/mm"); LSTR MSG_E_STEPS = _UxGT("E стъпки/mm"); LSTR MSG_EN_STEPS = _UxGT("* стъпки/mm"); LSTR MSG_TEMPERATURE = _UxGT("Температура"); diff --git a/Marlin/src/lcd/language/language_ca.h b/Marlin/src/lcd/language/language_ca.h index d70e6051b5..0e16c1a1fa 100644 --- a/Marlin/src/lcd/language/language_ca.h +++ b/Marlin/src/lcd/language/language_ca.h @@ -105,12 +105,12 @@ namespace Language_ca { LSTR MSG_A_RETRACT = _UxGT("Accel. retracc"); LSTR MSG_A_TRAVEL = _UxGT("Accel. Viatge"); LSTR MSG_STEPS_PER_MM = _UxGT("Passos/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" passos/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" passos/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" passos/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" passos/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" passos/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" passos/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" passos/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" passos/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" passos/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" passos/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" passos/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" passos/mm"); LSTR MSG_E_STEPS = _UxGT("Epassos/mm"); LSTR MSG_EN_STEPS = _UxGT("*passos/mm"); LSTR MSG_TEMPERATURE = _UxGT("Temperatura"); diff --git a/Marlin/src/lcd/language/language_cz.h b/Marlin/src/lcd/language/language_cz.h index 20c8686a24..6f5d8445af 100644 --- a/Marlin/src/lcd/language/language_cz.h +++ b/Marlin/src/lcd/language/language_cz.h @@ -267,43 +267,43 @@ namespace Language_cz { LSTR MSG_SELECT_E = _UxGT("Vybrat *"); LSTR MSG_ACC = _UxGT("Zrychl"); LSTR MSG_JERK = _UxGT("Jerk"); - LSTR MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk"); - LSTR MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk"); - LSTR MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk"); - LSTR MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk"); - LSTR MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk"); - LSTR MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk"); + LSTR MSG_VA_JERK = _UxGT("Max ") STR_A _UxGT(" Jerk"); + LSTR MSG_VB_JERK = _UxGT("Max ") STR_B _UxGT(" Jerk"); + LSTR MSG_VC_JERK = _UxGT("Max ") STR_C _UxGT(" Jerk"); + LSTR MSG_VI_JERK = _UxGT("Max ") STR_I _UxGT(" Jerk"); + LSTR MSG_VJ_JERK = _UxGT("Max ") STR_J _UxGT(" Jerk"); + LSTR MSG_VK_JERK = _UxGT("Max ") STR_K _UxGT(" Jerk"); LSTR MSG_VE_JERK = _UxGT("Max E Jerk"); LSTR MSG_JUNCTION_DEVIATION = _UxGT("Odchylka spoje"); LSTR MSG_VELOCITY = _UxGT("Rychlost"); - LSTR MSG_VMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Rychlost"); - LSTR MSG_VMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Rychlost"); - LSTR MSG_VMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Rychlost"); - LSTR MSG_VMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Rychlost"); - LSTR MSG_VMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Rychlost"); - LSTR MSG_VMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Rychlost"); - LSTR MSG_VMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Rychlost"); + LSTR MSG_VMAX_A = _UxGT("Max ") STR_A _UxGT(" Rychlost"); + LSTR MSG_VMAX_B = _UxGT("Max ") STR_B _UxGT(" Rychlost"); + LSTR MSG_VMAX_C = _UxGT("Max ") STR_C _UxGT(" Rychlost"); + LSTR MSG_VMAX_I = _UxGT("Max ") STR_I _UxGT(" Rychlost"); + LSTR MSG_VMAX_J = _UxGT("Max ") STR_J _UxGT(" Rychlost"); + LSTR MSG_VMAX_K = _UxGT("Max ") STR_K _UxGT(" Rychlost"); + LSTR MSG_VMAX_E = _UxGT("Max ") STR_E _UxGT(" Rychlost"); LSTR MSG_VMAX_EN = _UxGT("Max * Rychlost"); LSTR MSG_VMIN = _UxGT("Vmin"); LSTR MSG_VTRAV_MIN = _UxGT("VTrav Min"); LSTR MSG_ACCELERATION = _UxGT("Akcelerace"); - LSTR MSG_AMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Akcel"); - LSTR MSG_AMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Akcel"); - LSTR MSG_AMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Akcel"); - LSTR MSG_AMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Akcel"); - LSTR MSG_AMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Akcel"); - LSTR MSG_AMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Akcel"); - LSTR MSG_AMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Akcel"); + LSTR MSG_AMAX_A = _UxGT("Max ") STR_A _UxGT(" Akcel"); + LSTR MSG_AMAX_B = _UxGT("Max ") STR_B _UxGT(" Akcel"); + LSTR MSG_AMAX_C = _UxGT("Max ") STR_C _UxGT(" Akcel"); + LSTR MSG_AMAX_I = _UxGT("Max ") STR_I _UxGT(" Akcel"); + LSTR MSG_AMAX_J = _UxGT("Max ") STR_J _UxGT(" Akcel"); + LSTR MSG_AMAX_K = _UxGT("Max ") STR_K _UxGT(" Akcel"); + LSTR MSG_AMAX_E = _UxGT("Max ") STR_E _UxGT(" Akcel"); LSTR MSG_AMAX_EN = _UxGT("Max * Akcel"); LSTR MSG_A_RETRACT = _UxGT("A-retrakt"); LSTR MSG_A_TRAVEL = _UxGT("A-přejezd"); LSTR MSG_STEPS_PER_MM = _UxGT("Kroků/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" kroků/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" kroků/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" kroků/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" kroků/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" kroků/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" kroků/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" kroků/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" kroků/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" kroků/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" kroků/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" kroků/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" kroků/mm"); LSTR MSG_E_STEPS = _UxGT("E kroků/mm"); LSTR MSG_EN_STEPS = _UxGT("* kroků/mm"); LSTR MSG_TEMPERATURE = _UxGT("Teplota"); @@ -483,12 +483,12 @@ namespace Language_cz { LSTR MSG_INFO_MAX_TEMP = _UxGT("Teplota max"); LSTR MSG_INFO_PSU = _UxGT("Nap. zdroj"); LSTR MSG_DRIVE_STRENGTH = _UxGT("Buzení motorů"); - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Motor %"); - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Motor %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Motor %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Motor %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Motor %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Motor %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" Motor %"); + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" Motor %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" Motor %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" Motor %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" Motor %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" Motor %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E Motor %"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC uložit EEPROM"); LSTR MSG_ERROR_TMC = _UxGT("TMC CHYBA SPOJENÍ"); diff --git a/Marlin/src/lcd/language/language_da.h b/Marlin/src/lcd/language/language_da.h index b3644a754c..b022720b5c 100644 --- a/Marlin/src/lcd/language/language_da.h +++ b/Marlin/src/lcd/language/language_da.h @@ -173,12 +173,12 @@ namespace Language_da { LSTR MSG_INFO_PSU = _UxGT("Strømfors."); LSTR MSG_DRIVE_STRENGTH = _UxGT("Driv Styrke"); - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driv %"); - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driv %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driv %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driv %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driv %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driv %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" Driv %"); + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" Driv %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" Driv %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" Driv %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" Driv %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" Driv %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E Driv %"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Skriv"); diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h index 5ac0f1487b..6a5f504e91 100644 --- a/Marlin/src/lcd/language/language_de.h +++ b/Marlin/src/lcd/language/language_de.h @@ -269,47 +269,47 @@ namespace Language_de { LSTR MSG_SELECT_E = _UxGT("Auswählen *"); LSTR MSG_ACC = _UxGT("Beschleunigung"); LSTR MSG_JERK = _UxGT("Jerk"); - LSTR MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk"); - LSTR MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk"); - LSTR MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk"); - LSTR MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk"); - LSTR MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk"); - LSTR MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk"); + LSTR MSG_VA_JERK = _UxGT("Max ") STR_A _UxGT(" Jerk"); + LSTR MSG_VB_JERK = _UxGT("Max ") STR_B _UxGT(" Jerk"); + LSTR MSG_VC_JERK = _UxGT("Max ") STR_C _UxGT(" Jerk"); + LSTR MSG_VI_JERK = _UxGT("Max ") STR_I _UxGT(" Jerk"); + LSTR MSG_VJ_JERK = _UxGT("Max ") STR_J _UxGT(" Jerk"); + LSTR MSG_VK_JERK = _UxGT("Max ") STR_K _UxGT(" Jerk"); LSTR MSG_VE_JERK = _UxGT("Max E Jerk"); LSTR MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev"); LSTR MSG_VELOCITY = _UxGT("Geschwindigkeit"); - LSTR MSG_VMAX_A = _UxGT("V max ") LCD_STR_A; - LSTR MSG_VMAX_B = _UxGT("V max ") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("V max ") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("V max ") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("V max ") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("V max ") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("V max ") LCD_STR_E; + LSTR MSG_VMAX_A = _UxGT("V max ") STR_A; + LSTR MSG_VMAX_B = _UxGT("V max ") STR_B; + LSTR MSG_VMAX_C = _UxGT("V max ") STR_C; + LSTR MSG_VMAX_I = _UxGT("V max ") STR_I; + LSTR MSG_VMAX_J = _UxGT("V max ") STR_J; + LSTR MSG_VMAX_K = _UxGT("V max ") STR_K; + LSTR MSG_VMAX_E = _UxGT("V max ") STR_E; LSTR MSG_VMAX_EN = _UxGT("V max *"); LSTR MSG_VMIN = _UxGT("V min "); LSTR MSG_VTRAV_MIN = _UxGT("V min Leerfahrt"); LSTR MSG_ACCELERATION = _UxGT("Beschleunigung"); LSTR MSG_AMAX = _UxGT("A max "); // space intentional - LSTR MSG_AMAX_A = _UxGT("A max ") LCD_STR_A; - LSTR MSG_AMAX_B = _UxGT("A max ") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("A max ") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("A max ") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("A max ") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("A max ") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("A max ") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("A max ") STR_A; + LSTR MSG_AMAX_B = _UxGT("A max ") STR_B; + LSTR MSG_AMAX_C = _UxGT("A max ") STR_C; + LSTR MSG_AMAX_I = _UxGT("A max ") STR_I; + LSTR MSG_AMAX_J = _UxGT("A max ") STR_J; + LSTR MSG_AMAX_K = _UxGT("A max ") STR_K; + LSTR MSG_AMAX_E = _UxGT("A max ") STR_E; LSTR MSG_AMAX_EN = _UxGT("A max *"); LSTR MSG_A_RETRACT = _UxGT("A Einzug"); LSTR MSG_A_TRAVEL = _UxGT("A Leerfahrt"); LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("max. Frequenz"); LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("min. Vorschub"); LSTR MSG_STEPS_PER_MM = _UxGT("Steps/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" Steps/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" Steps/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" Steps/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" Steps/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" Steps/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" Steps/mm"); - LSTR MSG_E_STEPS = LCD_STR_E _UxGT(" Steps/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" Steps/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" Steps/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" Steps/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" Steps/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" Steps/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" Steps/mm"); + LSTR MSG_E_STEPS = STR_E _UxGT(" Steps/mm"); LSTR MSG_EN_STEPS = _UxGT("* Steps/mm"); LSTR MSG_TEMPERATURE = _UxGT("Temperatur"); LSTR MSG_MOTION = _UxGT("Bewegung"); @@ -509,12 +509,12 @@ namespace Language_de { LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Temp"); LSTR MSG_INFO_PSU = _UxGT("Netzteil"); LSTR MSG_DRIVE_STRENGTH = _UxGT("Motorleistung"); - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Treiber %"); - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Treiber %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Treiber %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Treiber %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Treiber %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Treiber %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" Treiber %"); + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" Treiber %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" Treiber %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" Treiber %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" Treiber %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" Treiber %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E Treiber %"); LSTR MSG_ERROR_TMC = _UxGT("TMC Verbindungsfehler"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Werte speichern"); diff --git a/Marlin/src/lcd/language/language_el.h b/Marlin/src/lcd/language/language_el.h index 265e02c0ef..f3cd7ef278 100644 --- a/Marlin/src/lcd/language/language_el.h +++ b/Marlin/src/lcd/language/language_el.h @@ -117,41 +117,41 @@ namespace Language_el { LSTR MSG_LCD_ON = _UxGT("Ενεργοποιημένο"); LSTR MSG_LCD_OFF = _UxGT("Απενεργοποιημένο"); LSTR MSG_ACC = _UxGT("Επιτάχυνση"); - LSTR MSG_VA_JERK = _UxGT("Vαντίδραση ") LCD_STR_A; - LSTR MSG_VB_JERK = _UxGT("Vαντίδραση ") LCD_STR_B; - LSTR MSG_VC_JERK = _UxGT("Vαντίδραση ") LCD_STR_C; - LSTR MSG_VI_JERK = _UxGT("Vαντίδραση ") LCD_STR_I; - LSTR MSG_VJ_JERK = _UxGT("Vαντίδραση ") LCD_STR_J; - LSTR MSG_VK_JERK = _UxGT("Vαντίδραση ") LCD_STR_K; + LSTR MSG_VA_JERK = _UxGT("Vαντίδραση ") STR_A; + LSTR MSG_VB_JERK = _UxGT("Vαντίδραση ") STR_B; + LSTR MSG_VC_JERK = _UxGT("Vαντίδραση ") STR_C; + LSTR MSG_VI_JERK = _UxGT("Vαντίδραση ") STR_I; + LSTR MSG_VJ_JERK = _UxGT("Vαντίδραση ") STR_J; + LSTR MSG_VK_JERK = _UxGT("Vαντίδραση ") STR_K; LSTR MSG_VE_JERK = _UxGT("Vαντίδραση E"); - LSTR MSG_VMAX_A = _UxGT("V Μέγιστο") LCD_STR_A; - LSTR MSG_VMAX_B = _UxGT("V Μέγιστο") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("V Μέγιστο") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("V Μέγιστο") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("V Μέγιστο") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("V Μέγιστο") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("V Μέγιστο") LCD_STR_E; + LSTR MSG_VMAX_A = _UxGT("V Μέγιστο") STR_A; + LSTR MSG_VMAX_B = _UxGT("V Μέγιστο") STR_B; + LSTR MSG_VMAX_C = _UxGT("V Μέγιστο") STR_C; + LSTR MSG_VMAX_I = _UxGT("V Μέγιστο") STR_I; + LSTR MSG_VMAX_J = _UxGT("V Μέγιστο") STR_J; + LSTR MSG_VMAX_K = _UxGT("V Μέγιστο") STR_K; + LSTR MSG_VMAX_E = _UxGT("V Μέγιστο") STR_E; LSTR MSG_VMAX_EN = _UxGT("V Μέγιστο *"); LSTR MSG_VMIN = _UxGT("V Ελάχιστο"); LSTR MSG_VTRAV_MIN = _UxGT("Vελάχ. μετατόπιση"); LSTR MSG_ACCELERATION = _UxGT("Accel"); - LSTR MSG_AMAX_A = _UxGT("Aμεγ ") LCD_STR_A; - LSTR MSG_AMAX_B = _UxGT("Aμεγ ") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("Aμεγ ") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("Aμεγ ") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("Aμεγ ") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("Aμεγ ") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("Aμεγ ") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("Aμεγ ") STR_A; + LSTR MSG_AMAX_B = _UxGT("Aμεγ ") STR_B; + LSTR MSG_AMAX_C = _UxGT("Aμεγ ") STR_C; + LSTR MSG_AMAX_I = _UxGT("Aμεγ ") STR_I; + LSTR MSG_AMAX_J = _UxGT("Aμεγ ") STR_J; + LSTR MSG_AMAX_K = _UxGT("Aμεγ ") STR_K; + LSTR MSG_AMAX_E = _UxGT("Aμεγ ") STR_E; LSTR MSG_AMAX_EN = _UxGT("Aμεγ *"); LSTR MSG_A_RETRACT = _UxGT("Α-ανάσυρση"); LSTR MSG_A_TRAVEL = _UxGT("Α-μετατόπιση"); LSTR MSG_STEPS_PER_MM = _UxGT("Bήματα ανά μμ"); - LSTR MSG_A_STEPS = _UxGT("Bήματα ") LCD_STR_A _UxGT(" ανά μμ"); - LSTR MSG_B_STEPS = _UxGT("Bήματα ") LCD_STR_B _UxGT(" ανά μμ"); - LSTR MSG_C_STEPS = _UxGT("Bήματα ") LCD_STR_C _UxGT(" ανά μμ"); - LSTR MSG_I_STEPS = _UxGT("Bήματα ") LCD_STR_I _UxGT(" ανά μμ"); - LSTR MSG_J_STEPS = _UxGT("Bήματα ") LCD_STR_J _UxGT(" ανά μμ"); - LSTR MSG_K_STEPS = _UxGT("Bήματα ") LCD_STR_K _UxGT(" ανά μμ"); + LSTR MSG_A_STEPS = _UxGT("Bήματα ") STR_A _UxGT(" ανά μμ"); + LSTR MSG_B_STEPS = _UxGT("Bήματα ") STR_B _UxGT(" ανά μμ"); + LSTR MSG_C_STEPS = _UxGT("Bήματα ") STR_C _UxGT(" ανά μμ"); + LSTR MSG_I_STEPS = _UxGT("Bήματα ") STR_I _UxGT(" ανά μμ"); + LSTR MSG_J_STEPS = _UxGT("Bήματα ") STR_J _UxGT(" ανά μμ"); + LSTR MSG_K_STEPS = _UxGT("Bήματα ") STR_K _UxGT(" ανά μμ"); LSTR MSG_E_STEPS = _UxGT("Bήματα Ε ανά μμ"); LSTR MSG_EN_STEPS = _UxGT("Bήματα * ανά μμ"); LSTR MSG_TEMPERATURE = _UxGT("Θερμοκρασία"); diff --git a/Marlin/src/lcd/language/language_el_gr.h b/Marlin/src/lcd/language/language_el_gr.h index 53e3ee3b94..d8c7cae38d 100644 --- a/Marlin/src/lcd/language/language_el_gr.h +++ b/Marlin/src/lcd/language/language_el_gr.h @@ -107,41 +107,41 @@ namespace Language_el_gr { LSTR MSG_LCD_OFF = _UxGT("Απενεργοποιημένο"); LSTR MSG_ACC = _UxGT("Επιτάχυνση"); LSTR MSG_JERK = _UxGT("Vαντίδραση"); - LSTR MSG_VA_JERK = _UxGT("Vαντίδραση ") LCD_STR_A; - LSTR MSG_VB_JERK = _UxGT("Vαντίδραση ") LCD_STR_B; - LSTR MSG_VC_JERK = _UxGT("Vαντίδραση ") LCD_STR_C; - LSTR MSG_VI_JERK = _UxGT("Vαντίδραση ") LCD_STR_I; - LSTR MSG_VJ_JERK = _UxGT("Vαντίδραση ") LCD_STR_J; - LSTR MSG_VK_JERK = _UxGT("Vαντίδραση ") LCD_STR_K; + LSTR MSG_VA_JERK = _UxGT("Vαντίδραση ") STR_A; + LSTR MSG_VB_JERK = _UxGT("Vαντίδραση ") STR_B; + LSTR MSG_VC_JERK = _UxGT("Vαντίδραση ") STR_C; + LSTR MSG_VI_JERK = _UxGT("Vαντίδραση ") STR_I; + LSTR MSG_VJ_JERK = _UxGT("Vαντίδραση ") STR_J; + LSTR MSG_VK_JERK = _UxGT("Vαντίδραση ") STR_K; LSTR MSG_VE_JERK = _UxGT("Vαντίδραση E"); - LSTR MSG_VMAX_A = _UxGT("Vμεγ ") LCD_STR_A; - LSTR MSG_VMAX_B = _UxGT("Vμεγ ") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("Vμεγ ") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("Vμεγ ") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("Vμεγ ") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("Vμεγ ") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("Vμεγ ") LCD_STR_E; + LSTR MSG_VMAX_A = _UxGT("Vμεγ ") STR_A; + LSTR MSG_VMAX_B = _UxGT("Vμεγ ") STR_B; + LSTR MSG_VMAX_C = _UxGT("Vμεγ ") STR_C; + LSTR MSG_VMAX_I = _UxGT("Vμεγ ") STR_I; + LSTR MSG_VMAX_J = _UxGT("Vμεγ ") STR_J; + LSTR MSG_VMAX_K = _UxGT("Vμεγ ") STR_K; + LSTR MSG_VMAX_E = _UxGT("Vμεγ ") STR_E; LSTR MSG_VMAX_EN = _UxGT("Vμεγ *"); LSTR MSG_VMIN = _UxGT("Vελαχ"); LSTR MSG_VTRAV_MIN = _UxGT("Vελάχ. μετατόπιση"); LSTR MSG_ACCELERATION = _UxGT("Accel"); - LSTR MSG_AMAX_A = _UxGT("Aμεγ ") LCD_STR_A; - LSTR MSG_AMAX_B = _UxGT("Aμεγ ") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("Aμεγ ") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("Aμεγ ") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("Aμεγ ") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("Aμεγ ") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("Aμεγ ") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("Aμεγ ") STR_A; + LSTR MSG_AMAX_B = _UxGT("Aμεγ ") STR_B; + LSTR MSG_AMAX_C = _UxGT("Aμεγ ") STR_C; + LSTR MSG_AMAX_I = _UxGT("Aμεγ ") STR_I; + LSTR MSG_AMAX_J = _UxGT("Aμεγ ") STR_J; + LSTR MSG_AMAX_K = _UxGT("Aμεγ ") STR_K; + LSTR MSG_AMAX_E = _UxGT("Aμεγ ") STR_E; LSTR MSG_AMAX_EN = _UxGT("Aμεγ *"); LSTR MSG_A_RETRACT = _UxGT("Α-ανάσυρση"); LSTR MSG_A_TRAVEL = _UxGT("Α-μετατόπιση"); LSTR MSG_STEPS_PER_MM = _UxGT("Bήματα ανά μμ"); - LSTR MSG_A_STEPS = _UxGT("Bήματα ") LCD_STR_A _UxGT(" ανά μμ"); - LSTR MSG_B_STEPS = _UxGT("Bήματα ") LCD_STR_B _UxGT(" ανά μμ"); - LSTR MSG_C_STEPS = _UxGT("Bήματα ") LCD_STR_C _UxGT(" ανά μμ"); - LSTR MSG_I_STEPS = _UxGT("Bήματα ") LCD_STR_I _UxGT(" ανά μμ"); - LSTR MSG_J_STEPS = _UxGT("Bήματα ") LCD_STR_J _UxGT(" ανά μμ"); - LSTR MSG_K_STEPS = _UxGT("Bήματα ") LCD_STR_K _UxGT(" ανά μμ"); + LSTR MSG_A_STEPS = _UxGT("Bήματα ") STR_A _UxGT(" ανά μμ"); + LSTR MSG_B_STEPS = _UxGT("Bήματα ") STR_B _UxGT(" ανά μμ"); + LSTR MSG_C_STEPS = _UxGT("Bήματα ") STR_C _UxGT(" ανά μμ"); + LSTR MSG_I_STEPS = _UxGT("Bήματα ") STR_I _UxGT(" ανά μμ"); + LSTR MSG_J_STEPS = _UxGT("Bήματα ") STR_J _UxGT(" ανά μμ"); + LSTR MSG_K_STEPS = _UxGT("Bήματα ") STR_K _UxGT(" ανά μμ"); LSTR MSG_E_STEPS = _UxGT("Bήματα Ε ανά μμ"); LSTR MSG_EN_STEPS = _UxGT("Bήματα * ανά μμ"); LSTR MSG_TEMPERATURE = _UxGT("Θερμοκρασία"); diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 08370d3a2f..12430ed4c0 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -100,9 +100,9 @@ namespace Language_en { LSTR MSG_HOME_OFFSET_X = _UxGT("Home Offset X"); LSTR MSG_HOME_OFFSET_Y = _UxGT("Home Offset Y"); LSTR MSG_HOME_OFFSET_Z = _UxGT("Home Offset Z"); - LSTR MSG_HOME_OFFSET_I = _UxGT("Home Offset ") LCD_STR_I; - LSTR MSG_HOME_OFFSET_J = _UxGT("Home Offset ") LCD_STR_J; - LSTR MSG_HOME_OFFSET_K = _UxGT("Home Offset ") LCD_STR_K; + LSTR MSG_HOME_OFFSET_I = _UxGT("Home Offset ") STR_I; + LSTR MSG_HOME_OFFSET_J = _UxGT("Home Offset ") STR_J; + LSTR MSG_HOME_OFFSET_K = _UxGT("Home Offset ") STR_K; LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets Applied"); LSTR MSG_SET_ORIGIN = _UxGT("Set Origin"); LSTR MSG_TRAMMING_WIZARD = _UxGT("Tramming Wizard"); @@ -284,9 +284,9 @@ namespace Language_en { LSTR MSG_MOVE_X = _UxGT("Move X"); // Used by draw_edit_screen LSTR MSG_MOVE_Y = _UxGT("Move Y"); LSTR MSG_MOVE_Z = _UxGT("Move Z"); - LSTR MSG_MOVE_I = _UxGT("Move ") LCD_STR_I; - LSTR MSG_MOVE_J = _UxGT("Move ") LCD_STR_J; - LSTR MSG_MOVE_K = _UxGT("Move ") LCD_STR_K; + LSTR MSG_MOVE_I = _UxGT("Move ") STR_I; + LSTR MSG_MOVE_J = _UxGT("Move ") STR_J; + LSTR MSG_MOVE_K = _UxGT("Move ") STR_K; LSTR MSG_MOVE_E = _UxGT("Move Extruder"); LSTR MSG_MOVE_EN = _UxGT("Move E*"); LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hotend too cold"); @@ -301,10 +301,10 @@ namespace Language_en { LSTR MSG_MOVE_1IN = _UxGT("Move 1.0in"); LSTR MSG_SPEED = _UxGT("Speed"); LSTR MSG_MAXSPEED = _UxGT("Max Speed (mm/s)"); - LSTR MSG_MAXSPEED_X = _UxGT("Max ") LCD_STR_A _UxGT(" Speed"); - LSTR MSG_MAXSPEED_Y = _UxGT("Max ") LCD_STR_B _UxGT(" Speed"); - LSTR MSG_MAXSPEED_Z = _UxGT("Max ") LCD_STR_C _UxGT(" Speed"); - LSTR MSG_MAXSPEED_E = _UxGT("Max ") LCD_STR_E _UxGT(" Speed"); + LSTR MSG_MAXSPEED_X = _UxGT("Max ") STR_A _UxGT(" Speed"); + LSTR MSG_MAXSPEED_Y = _UxGT("Max ") STR_B _UxGT(" Speed"); + LSTR MSG_MAXSPEED_Z = _UxGT("Max ") STR_C _UxGT(" Speed"); + LSTR MSG_MAXSPEED_E = _UxGT("Max ") STR_E _UxGT(" Speed"); LSTR MSG_MAXSPEED_A = _UxGT("Max @ Speed"); LSTR MSG_BED_Z = _UxGT("Bed Z"); LSTR MSG_NOZZLE = _UxGT("Nozzle"); @@ -347,45 +347,45 @@ namespace Language_en { LSTR MSG_SELECT_E = _UxGT("Select *"); LSTR MSG_ACC = _UxGT("Accel"); LSTR MSG_JERK = _UxGT("Jerk"); - LSTR MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk"); - LSTR MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk"); - LSTR MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk"); - LSTR MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk"); - LSTR MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk"); - LSTR MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk"); + LSTR MSG_VA_JERK = _UxGT("Max ") STR_A _UxGT(" Jerk"); + LSTR MSG_VB_JERK = _UxGT("Max ") STR_B _UxGT(" Jerk"); + LSTR MSG_VC_JERK = _UxGT("Max ") STR_C _UxGT(" Jerk"); + LSTR MSG_VI_JERK = _UxGT("Max ") STR_I _UxGT(" Jerk"); + LSTR MSG_VJ_JERK = _UxGT("Max ") STR_J _UxGT(" Jerk"); + LSTR MSG_VK_JERK = _UxGT("Max ") STR_K _UxGT(" Jerk"); LSTR MSG_VE_JERK = _UxGT("Max E Jerk"); LSTR MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev"); LSTR MSG_VELOCITY = _UxGT("Velocity"); - LSTR MSG_VMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Vel"); - LSTR MSG_VMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Vel"); - LSTR MSG_VMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Vel"); - LSTR MSG_VMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Vel"); - LSTR MSG_VMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Vel"); - LSTR MSG_VMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Vel"); - LSTR MSG_VMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Vel"); + LSTR MSG_VMAX_A = _UxGT("Max ") STR_A _UxGT(" Vel"); + LSTR MSG_VMAX_B = _UxGT("Max ") STR_B _UxGT(" Vel"); + LSTR MSG_VMAX_C = _UxGT("Max ") STR_C _UxGT(" Vel"); + LSTR MSG_VMAX_I = _UxGT("Max ") STR_I _UxGT(" Vel"); + LSTR MSG_VMAX_J = _UxGT("Max ") STR_J _UxGT(" Vel"); + LSTR MSG_VMAX_K = _UxGT("Max ") STR_K _UxGT(" Vel"); + LSTR MSG_VMAX_E = _UxGT("Max ") STR_E _UxGT(" Vel"); LSTR MSG_VMAX_EN = _UxGT("Max * Vel"); LSTR MSG_VMIN = _UxGT("Min Velocity"); LSTR MSG_VTRAV_MIN = _UxGT("Min Travel Vel"); LSTR MSG_ACCELERATION = _UxGT("Acceleration"); - LSTR MSG_AMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Accel"); - LSTR MSG_AMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Accel"); - LSTR MSG_AMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Accel"); - LSTR MSG_AMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Accel"); - LSTR MSG_AMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Accel"); - LSTR MSG_AMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Accel"); - LSTR MSG_AMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Accel"); + LSTR MSG_AMAX_A = _UxGT("Max ") STR_A _UxGT(" Accel"); + LSTR MSG_AMAX_B = _UxGT("Max ") STR_B _UxGT(" Accel"); + LSTR MSG_AMAX_C = _UxGT("Max ") STR_C _UxGT(" Accel"); + LSTR MSG_AMAX_I = _UxGT("Max ") STR_I _UxGT(" Accel"); + LSTR MSG_AMAX_J = _UxGT("Max ") STR_J _UxGT(" Accel"); + LSTR MSG_AMAX_K = _UxGT("Max ") STR_K _UxGT(" Accel"); + LSTR MSG_AMAX_E = _UxGT("Max ") STR_E _UxGT(" Accel"); LSTR MSG_AMAX_EN = _UxGT("Max * Accel"); LSTR MSG_A_RETRACT = _UxGT("Retract Accel"); LSTR MSG_A_TRAVEL = _UxGT("Travel Accel"); LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("XY Freq Limit"); LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Min FR Factor"); LSTR MSG_STEPS_PER_MM = _UxGT("Steps/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" Steps/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" Steps/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" Steps/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" Steps/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" Steps/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" Steps/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" Steps/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" Steps/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" Steps/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" Steps/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" Steps/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" Steps/mm"); LSTR MSG_E_STEPS = _UxGT("E steps/mm"); LSTR MSG_EN_STEPS = _UxGT("* Steps/mm"); LSTR MSG_TEMPERATURE = _UxGT("Temperature"); @@ -530,9 +530,9 @@ namespace Language_en { LSTR MSG_BABYSTEP_X = _UxGT("Babystep X"); LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y"); LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z"); - LSTR MSG_BABYSTEP_I = _UxGT("Babystep ") LCD_STR_I; - LSTR MSG_BABYSTEP_J = _UxGT("Babystep ") LCD_STR_J; - LSTR MSG_BABYSTEP_K = _UxGT("Babystep ") LCD_STR_K; + LSTR MSG_BABYSTEP_I = _UxGT("Babystep ") STR_I; + LSTR MSG_BABYSTEP_J = _UxGT("Babystep ") STR_J; + LSTR MSG_BABYSTEP_K = _UxGT("Babystep ") STR_K; LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total"); LSTR MSG_ENDSTOP_ABORT = _UxGT("Endstop Abort"); LSTR MSG_HEATING_FAILED_LCD = _UxGT("Heating Failed"); @@ -627,12 +627,12 @@ namespace Language_en { LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Temp"); LSTR MSG_INFO_PSU = _UxGT("PSU"); LSTR MSG_DRIVE_STRENGTH = _UxGT("Drive Strength"); - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" Driver %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E Driver %"); LSTR MSG_ERROR_TMC = _UxGT("TMC CONNECTION ERROR"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Write"); @@ -802,12 +802,12 @@ namespace Language_en { LSTR MSG_PID_C_E = _UxGT("PID-C *"); LSTR MSG_PID_F = _UxGT("PID-F"); LSTR MSG_PID_F_E = _UxGT("PID-F *"); - LSTR MSG_BACKLASH_A = LCD_STR_A; - LSTR MSG_BACKLASH_B = LCD_STR_B; - LSTR MSG_BACKLASH_C = LCD_STR_C; - LSTR MSG_BACKLASH_I = LCD_STR_I; - LSTR MSG_BACKLASH_J = LCD_STR_J; - LSTR MSG_BACKLASH_K = LCD_STR_K; + LSTR MSG_BACKLASH_A = STR_A; + LSTR MSG_BACKLASH_B = STR_B; + LSTR MSG_BACKLASH_C = STR_C; + LSTR MSG_BACKLASH_I = STR_I; + LSTR MSG_BACKLASH_J = STR_J; + LSTR MSG_BACKLASH_K = STR_K; } #if FAN_COUNT == 1 diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h index 1dbc7faf70..6e2c82533e 100644 --- a/Marlin/src/lcd/language/language_es.h +++ b/Marlin/src/lcd/language/language_es.h @@ -268,43 +268,43 @@ namespace Language_es { LSTR MSG_SELECT_E = _UxGT("Seleccionar *"); LSTR MSG_ACC = _UxGT("Aceleración"); LSTR MSG_JERK = _UxGT("Jerk"); - LSTR MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk"); - LSTR MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk"); - LSTR MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk"); - LSTR MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk"); - LSTR MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk"); - LSTR MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk"); + LSTR MSG_VA_JERK = _UxGT("Max ") STR_A _UxGT(" Jerk"); + LSTR MSG_VB_JERK = _UxGT("Max ") STR_B _UxGT(" Jerk"); + LSTR MSG_VC_JERK = _UxGT("Max ") STR_C _UxGT(" Jerk"); + LSTR MSG_VI_JERK = _UxGT("Max ") STR_I _UxGT(" Jerk"); + LSTR MSG_VJ_JERK = _UxGT("Max ") STR_J _UxGT(" Jerk"); + LSTR MSG_VK_JERK = _UxGT("Max ") STR_K _UxGT(" Jerk"); LSTR MSG_VE_JERK = _UxGT("Max E Jerk"); LSTR MSG_JUNCTION_DEVIATION = _UxGT("Desvi. Unión"); LSTR MSG_VELOCITY = _UxGT("Velocidad"); - LSTR MSG_VMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Vel"); - LSTR MSG_VMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Vel"); - LSTR MSG_VMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Vel"); - LSTR MSG_VMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Vel"); - LSTR MSG_VMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Vel"); - LSTR MSG_VMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Vel"); - LSTR MSG_VMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Vel"); + LSTR MSG_VMAX_A = _UxGT("Max ") STR_A _UxGT(" Vel"); + LSTR MSG_VMAX_B = _UxGT("Max ") STR_B _UxGT(" Vel"); + LSTR MSG_VMAX_C = _UxGT("Max ") STR_C _UxGT(" Vel"); + LSTR MSG_VMAX_I = _UxGT("Max ") STR_I _UxGT(" Vel"); + LSTR MSG_VMAX_J = _UxGT("Max ") STR_J _UxGT(" Vel"); + LSTR MSG_VMAX_K = _UxGT("Max ") STR_K _UxGT(" Vel"); + LSTR MSG_VMAX_E = _UxGT("Max ") STR_E _UxGT(" Vel"); LSTR MSG_VMAX_EN = _UxGT("Max * Vel"); LSTR MSG_VMIN = _UxGT("Vmin"); LSTR MSG_VTRAV_MIN = _UxGT("Vel. viaje min"); LSTR MSG_ACCELERATION = _UxGT("Acceleración"); - LSTR MSG_AMAX_A = _UxGT("Acel. max") LCD_STR_A; - LSTR MSG_AMAX_B = _UxGT("Acel. max") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("Acel. max") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("Acel. max") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("Acel. max") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("Acel. max") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("Acel. max") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("Acel. max") STR_A; + LSTR MSG_AMAX_B = _UxGT("Acel. max") STR_B; + LSTR MSG_AMAX_C = _UxGT("Acel. max") STR_C; + LSTR MSG_AMAX_I = _UxGT("Acel. max") STR_I; + LSTR MSG_AMAX_J = _UxGT("Acel. max") STR_J; + LSTR MSG_AMAX_K = _UxGT("Acel. max") STR_K; + LSTR MSG_AMAX_E = _UxGT("Acel. max") STR_E; LSTR MSG_AMAX_EN = _UxGT("Acel. max *"); LSTR MSG_A_RETRACT = _UxGT("Acel. retrac."); LSTR MSG_A_TRAVEL = _UxGT("Acel. Viaje"); LSTR MSG_STEPS_PER_MM = _UxGT("Pasos/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" pasos/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" pasos/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" pasos/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" pasos/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" pasos/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" pasos/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" pasos/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" pasos/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" pasos/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" pasos/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" pasos/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" pasos/mm"); LSTR MSG_E_STEPS = _UxGT("E pasos/mm"); LSTR MSG_EN_STEPS = _UxGT("* pasos/mm"); LSTR MSG_TEMPERATURE = _UxGT("Temperatura"); @@ -481,12 +481,12 @@ namespace Language_es { LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp. Máxima"); LSTR MSG_INFO_PSU = _UxGT("F. Aliment."); LSTR MSG_DRIVE_STRENGTH = _UxGT("Fuerza de empuje"); - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" Driver %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E Driver %"); LSTR MSG_ERROR_TMC = _UxGT("ERROR CONEX. TMC"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Escribe DAC EEPROM"); diff --git a/Marlin/src/lcd/language/language_eu.h b/Marlin/src/lcd/language/language_eu.h index ad6a4f3071..5742fa8f6f 100644 --- a/Marlin/src/lcd/language/language_eu.h +++ b/Marlin/src/lcd/language/language_eu.h @@ -164,23 +164,23 @@ namespace Language_eu { LSTR MSG_SELECT_E = _UxGT("Aukeratu *"); LSTR MSG_ACC = _UxGT("Azelerazioa"); LSTR MSG_JERK = _UxGT("Astindua"); - LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-astindua"); - LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-astindua"); - LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-astindua"); - LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-astindua"); - LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-astindua"); - LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-astindua"); + LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT("-astindua"); + LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT("-astindua"); + LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT("-astindua"); + LSTR MSG_VI_JERK = _UxGT("V") STR_I _UxGT("-astindua"); + LSTR MSG_VJ_JERK = _UxGT("V") STR_J _UxGT("-astindua"); + LSTR MSG_VK_JERK = _UxGT("V") STR_K _UxGT("-astindua"); LSTR MSG_VE_JERK = _UxGT("Ve-astindua"); LSTR MSG_VTRAV_MIN = _UxGT("VBidaia min"); LSTR MSG_A_RETRACT = _UxGT("A-retrakt"); LSTR MSG_A_TRAVEL = _UxGT("A-bidaia"); LSTR MSG_STEPS_PER_MM = _UxGT("Pausoak/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" pausoak/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" pausoak/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" pausoak/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" pausoak/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" pausoak/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" pausoak/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" pausoak/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" pausoak/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" pausoak/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" pausoak/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" pausoak/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" pausoak/mm"); LSTR MSG_E_STEPS = _UxGT("E pausoak/mm"); LSTR MSG_EN_STEPS = _UxGT("* pausoak/mm"); LSTR MSG_TEMPERATURE = _UxGT("Tenperatura"); @@ -297,12 +297,12 @@ namespace Language_eu { LSTR MSG_INFO_MAX_TEMP = _UxGT("Tenp. Maximoa"); LSTR MSG_INFO_PSU = _UxGT("Elikadura-iturria"); LSTR MSG_DRIVE_STRENGTH = _UxGT("Driver-aren potentzia"); - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" Driver %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E Driver %"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Idatzi DAC EEPROM"); LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("HARIZPIA ALDATU"); diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h index 41ab9ebaf1..6b2d56b1bf 100644 --- a/Marlin/src/lcd/language/language_fr.h +++ b/Marlin/src/lcd/language/language_fr.h @@ -72,9 +72,9 @@ namespace Language_fr { LSTR MSG_HOME_OFFSET_X = _UxGT("Décal. origine X"); LSTR MSG_HOME_OFFSET_Y = _UxGT("Décal. origine Y"); LSTR MSG_HOME_OFFSET_Z = _UxGT("Décal. origine Z"); - LSTR MSG_HOME_OFFSET_I = _UxGT("Décal. origine ") LCD_STR_I; - LSTR MSG_HOME_OFFSET_J = _UxGT("Décal. origine ") LCD_STR_J; - LSTR MSG_HOME_OFFSET_K = _UxGT("Décal. origine ") LCD_STR_K; + LSTR MSG_HOME_OFFSET_I = _UxGT("Décal. origine ") STR_I; + LSTR MSG_HOME_OFFSET_J = _UxGT("Décal. origine ") STR_J; + LSTR MSG_HOME_OFFSET_K = _UxGT("Décal. origine ") STR_K; LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Décalages appliqués"); LSTR MSG_SET_ORIGIN = _UxGT("Régler origine"); LSTR MSG_TRAMMING_WIZARD = _UxGT("Assistant Molettes"); @@ -234,9 +234,9 @@ namespace Language_fr { LSTR MSG_MOVE_X = _UxGT("Déplacer X"); LSTR MSG_MOVE_Y = _UxGT("Déplacer Y"); LSTR MSG_MOVE_Z = _UxGT("Déplacer Z"); - LSTR MSG_MOVE_I = _UxGT("Déplacer ") LCD_STR_I; - LSTR MSG_MOVE_J = _UxGT("Déplacer ") LCD_STR_J; - LSTR MSG_MOVE_K = _UxGT("Déplacer ") LCD_STR_K; + LSTR MSG_MOVE_I = _UxGT("Déplacer ") STR_I; + LSTR MSG_MOVE_J = _UxGT("Déplacer ") STR_J; + LSTR MSG_MOVE_K = _UxGT("Déplacer ") STR_K; LSTR MSG_MOVE_E = _UxGT("Extruder"); LSTR MSG_MOVE_EN = _UxGT("Extruder *"); LSTR MSG_HOTEND_TOO_COLD = _UxGT("Buse trop froide"); @@ -280,45 +280,45 @@ namespace Language_fr { LSTR MSG_SELECT_E = _UxGT("Sélectionner *"); LSTR MSG_ACC = _UxGT("Accélération"); LSTR MSG_JERK = _UxGT("Jerk"); - LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT(" jerk"); - LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT(" jerk"); - LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT(" jerk"); - LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT(" jerk"); - LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT(" jerk"); - LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _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_VI_JERK = _UxGT("V") STR_I _UxGT(" jerk"); + LSTR MSG_VJ_JERK = _UxGT("V") STR_J _UxGT(" jerk"); + LSTR MSG_VK_JERK = _UxGT("V") STR_K _UxGT(" jerk"); LSTR MSG_VE_JERK = _UxGT("Ve jerk"); LSTR MSG_VELOCITY = _UxGT("Vélocité"); - LSTR MSG_VMAX_A = _UxGT("Vit. Max ") LCD_STR_A; - LSTR MSG_VMAX_B = _UxGT("Vit. Max ") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("Vit. Max ") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("Vit. Max ") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("Vit. Max ") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("Vit. Max ") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("Vit. Max ") LCD_STR_E; + 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_I = _UxGT("Vit. Max ") STR_I; + LSTR MSG_VMAX_J = _UxGT("Vit. Max ") STR_J; + LSTR MSG_VMAX_K = _UxGT("Vit. Max ") STR_K; + LSTR MSG_VMAX_E = _UxGT("Vit. Max ") STR_E; LSTR MSG_VMAX_EN = _UxGT("Vit. Max *"); LSTR MSG_JUNCTION_DEVIATION = _UxGT("Déviat. jonct."); LSTR MSG_VMIN = _UxGT("Vit. Min"); LSTR MSG_VTRAV_MIN = _UxGT("Vmin course"); LSTR MSG_ACCELERATION = _UxGT("Accélération"); - LSTR MSG_AMAX_A = _UxGT("Max Accél. ") LCD_STR_A; - LSTR MSG_AMAX_B = _UxGT("Max Accél. ") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("Max Accél. ") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("Max Accél. ") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("Max Accél. ") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("Max Accél. ") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("Max Accél. ") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("Max Accél. ") STR_A; + LSTR MSG_AMAX_B = _UxGT("Max Accél. ") STR_B; + LSTR MSG_AMAX_C = _UxGT("Max Accél. ") STR_C; + LSTR MSG_AMAX_I = _UxGT("Max Accél. ") STR_I; + LSTR MSG_AMAX_J = _UxGT("Max Accél. ") STR_J; + LSTR MSG_AMAX_K = _UxGT("Max Accél. ") STR_K; + LSTR MSG_AMAX_E = _UxGT("Max Accél. ") STR_E; LSTR MSG_AMAX_EN = _UxGT("Max Accél. *"); LSTR MSG_A_RETRACT = _UxGT("Acc.rétraction"); LSTR MSG_A_TRAVEL = _UxGT("Acc.course"); LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Fréquence max"); LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Vitesse min"); LSTR MSG_STEPS_PER_MM = _UxGT("Pas/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" pas/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" pas/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" pas/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" pas/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" pas/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _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_I_STEPS = STR_I _UxGT(" pas/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" pas/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" pas/mm"); LSTR MSG_E_STEPS = _UxGT("E pas/mm"); LSTR MSG_EN_STEPS = _UxGT("* pas/mm"); LSTR MSG_TEMPERATURE = _UxGT("Température"); @@ -442,9 +442,9 @@ namespace Language_fr { LSTR MSG_BABYSTEP_X = _UxGT("Babystep X"); LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y"); LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z"); - LSTR MSG_BABYSTEP_I = _UxGT("Babystep ") LCD_STR_I; - LSTR MSG_BABYSTEP_J = _UxGT("Babystep ") LCD_STR_J; - LSTR MSG_BABYSTEP_K = _UxGT("Babystep ") LCD_STR_K; + LSTR MSG_BABYSTEP_I = _UxGT("Babystep ") STR_I; + LSTR MSG_BABYSTEP_J = _UxGT("Babystep ") STR_J; + LSTR MSG_BABYSTEP_K = _UxGT("Babystep ") STR_K; LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total"); LSTR MSG_ENDSTOP_ABORT = _UxGT("Butée abandon"); LSTR MSG_HEATING_FAILED_LCD = _UxGT("Err de chauffe"); @@ -520,12 +520,12 @@ namespace Language_fr { 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_A = _UxGT("Driver ") LCD_STR_A _UxGT(" %"); - LSTR MSG_DAC_PERCENT_B = _UxGT("Driver ") LCD_STR_B _UxGT(" %"); - LSTR MSG_DAC_PERCENT_C = _UxGT("Driver ") LCD_STR_C _UxGT(" %"); - LSTR MSG_DAC_PERCENT_I = _UxGT("Driver ") LCD_STR_I _UxGT(" %"); - LSTR MSG_DAC_PERCENT_J = _UxGT("Driver ") LCD_STR_J _UxGT(" %"); - LSTR MSG_DAC_PERCENT_K = _UxGT("Driver ") LCD_STR_K _UxGT(" %"); + LSTR MSG_DAC_PERCENT_A = _UxGT("Driver ") STR_A _UxGT(" %"); + LSTR MSG_DAC_PERCENT_B = _UxGT("Driver ") STR_B _UxGT(" %"); + LSTR MSG_DAC_PERCENT_C = _UxGT("Driver ") STR_C _UxGT(" %"); + LSTR MSG_DAC_PERCENT_I = _UxGT("Driver ") STR_I _UxGT(" %"); + LSTR MSG_DAC_PERCENT_J = _UxGT("Driver ") STR_J _UxGT(" %"); + LSTR MSG_DAC_PERCENT_K = _UxGT("Driver ") STR_K _UxGT(" %"); LSTR MSG_DAC_PERCENT_E = _UxGT("Driver E %"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM sauv."); LSTR MSG_ERROR_TMC = _UxGT("ERREUR CONNEXION TMC"); diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h index 3026e761c4..731f89cad4 100644 --- a/Marlin/src/lcd/language/language_gl.h +++ b/Marlin/src/lcd/language/language_gl.h @@ -269,45 +269,45 @@ namespace Language_gl { LSTR MSG_SELECT_E = _UxGT("Escolla *"); LSTR MSG_ACC = _UxGT("Acel"); LSTR MSG_JERK = _UxGT("Jerk"); - LSTR MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk"); - LSTR MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk"); - LSTR MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk"); - LSTR MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk"); - LSTR MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk"); - LSTR MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk"); + LSTR MSG_VA_JERK = _UxGT("Max ") STR_A _UxGT(" Jerk"); + LSTR MSG_VB_JERK = _UxGT("Max ") STR_B _UxGT(" Jerk"); + LSTR MSG_VC_JERK = _UxGT("Max ") STR_C _UxGT(" Jerk"); + LSTR MSG_VI_JERK = _UxGT("Max ") STR_I _UxGT(" Jerk"); + LSTR MSG_VJ_JERK = _UxGT("Max ") STR_J _UxGT(" Jerk"); + LSTR MSG_VK_JERK = _UxGT("Max ") STR_K _UxGT(" Jerk"); LSTR MSG_VE_JERK = _UxGT("Max E Jerk"); LSTR MSG_JUNCTION_DEVIATION = _UxGT("Desvío Unión"); LSTR MSG_VELOCITY = _UxGT("Velocidade"); - LSTR MSG_VMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Vel"); - LSTR MSG_VMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Vel"); - LSTR MSG_VMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Vel"); - LSTR MSG_VMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Vel"); - LSTR MSG_VMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Vel"); - LSTR MSG_VMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Vel"); - LSTR MSG_VMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Vel"); + LSTR MSG_VMAX_A = _UxGT("Max ") STR_A _UxGT(" Vel"); + LSTR MSG_VMAX_B = _UxGT("Max ") STR_B _UxGT(" Vel"); + LSTR MSG_VMAX_C = _UxGT("Max ") STR_C _UxGT(" Vel"); + LSTR MSG_VMAX_I = _UxGT("Max ") STR_I _UxGT(" Vel"); + LSTR MSG_VMAX_J = _UxGT("Max ") STR_J _UxGT(" Vel"); + LSTR MSG_VMAX_K = _UxGT("Max ") STR_K _UxGT(" Vel"); + LSTR MSG_VMAX_E = _UxGT("Max ") STR_E _UxGT(" Vel"); LSTR MSG_VMAX_EN = _UxGT("Max * Vel"); LSTR MSG_VMIN = _UxGT("Vmin"); LSTR MSG_VTRAV_MIN = _UxGT("V-viaxe min"); LSTR MSG_ACCELERATION = _UxGT("Aceleración"); - LSTR MSG_AMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Accel"); - LSTR MSG_AMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Accel"); - LSTR MSG_AMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Accel"); - LSTR MSG_AMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Accel"); - LSTR MSG_AMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Accel"); - LSTR MSG_AMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Accel"); - LSTR MSG_AMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Accel"); + LSTR MSG_AMAX_A = _UxGT("Max ") STR_A _UxGT(" Accel"); + LSTR MSG_AMAX_B = _UxGT("Max ") STR_B _UxGT(" Accel"); + LSTR MSG_AMAX_C = _UxGT("Max ") STR_C _UxGT(" Accel"); + LSTR MSG_AMAX_I = _UxGT("Max ") STR_I _UxGT(" Accel"); + LSTR MSG_AMAX_J = _UxGT("Max ") STR_J _UxGT(" Accel"); + LSTR MSG_AMAX_K = _UxGT("Max ") STR_K _UxGT(" Accel"); + LSTR MSG_AMAX_E = _UxGT("Max ") STR_E _UxGT(" Accel"); LSTR MSG_AMAX_EN = _UxGT("Max * Accel"); LSTR MSG_A_RETRACT = _UxGT("A-retrac."); LSTR MSG_A_TRAVEL = _UxGT("A-viaxe"); LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Frecuencia max"); LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Avance min"); LSTR MSG_STEPS_PER_MM = _UxGT("Pasos/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" pasos/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" pasos/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" pasos/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" pasos/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" pasos/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" pasos/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" pasos/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" pasos/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" pasos/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" pasos/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" pasos/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" pasos/mm"); LSTR MSG_E_STEPS = _UxGT("E pasos/mm"); LSTR MSG_EN_STEPS = _UxGT("* pasos/mm"); LSTR MSG_TEMPERATURE = _UxGT("Temperatura"); @@ -497,12 +497,12 @@ namespace Language_gl { LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp Máx"); LSTR MSG_INFO_PSU = _UxGT("Fonte Alimentación"); LSTR MSG_DRIVE_STRENGTH = _UxGT("Forza do Motor"); - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" Driver %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E Driver %"); LSTR MSG_ERROR_TMC = _UxGT("ERRO CONEX. TMC"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Escribe DAC EEPROM"); diff --git a/Marlin/src/lcd/language/language_hu.h b/Marlin/src/lcd/language/language_hu.h index 8b5e786303..341d1b467d 100644 --- a/Marlin/src/lcd/language/language_hu.h +++ b/Marlin/src/lcd/language/language_hu.h @@ -79,9 +79,9 @@ namespace Language_hu { LSTR MSG_HOME_OFFSET_X = _UxGT("X Kezdö eltol."); LSTR MSG_HOME_OFFSET_Y = _UxGT("Y Kezdö eltol."); LSTR MSG_HOME_OFFSET_Z = _UxGT("Z Kezdö eltol."); - LSTR MSG_HOME_OFFSET_I = _UxGT("Kezdö eltol. ") LCD_STR_I; - LSTR MSG_HOME_OFFSET_J = _UxGT("Kezdö eltol. ") LCD_STR_J; - LSTR MSG_HOME_OFFSET_K = _UxGT("Kezdö eltol. ") LCD_STR_K; + LSTR MSG_HOME_OFFSET_I = _UxGT("Kezdö eltol. ") STR_I; + LSTR MSG_HOME_OFFSET_J = _UxGT("Kezdö eltol. ") STR_J; + LSTR MSG_HOME_OFFSET_K = _UxGT("Kezdö eltol. ") STR_K; LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Eltolás beállítva."); LSTR MSG_SET_ORIGIN = _UxGT("Eredeti Be"); LSTR MSG_TRAMMING_WIZARD = _UxGT("Elektromos varázsló"); @@ -260,9 +260,9 @@ namespace Language_hu { LSTR MSG_MOVE_X = _UxGT("X mozgás"); LSTR MSG_MOVE_Y = _UxGT("Y mozgás"); LSTR MSG_MOVE_Z = _UxGT("Z mozgás"); - LSTR MSG_MOVE_I = _UxGT("Mozgás ") LCD_STR_I; - LSTR MSG_MOVE_J = _UxGT("Mozgás ") LCD_STR_J; - LSTR MSG_MOVE_K = _UxGT("Mozgás ") LCD_STR_K; + LSTR MSG_MOVE_I = _UxGT("Mozgás ") STR_I; + LSTR MSG_MOVE_J = _UxGT("Mozgás ") STR_J; + LSTR MSG_MOVE_K = _UxGT("Mozgás ") STR_K; LSTR MSG_MOVE_E = _UxGT("Adagoló"); LSTR MSG_MOVE_EN = _UxGT("Adagoló *"); LSTR MSG_HOTEND_TOO_COLD = _UxGT("A fej túl hideg"); @@ -317,45 +317,45 @@ namespace Language_hu { LSTR MSG_SELECT_E = _UxGT("Kiválaszt *"); LSTR MSG_ACC = _UxGT("Gyorsítás"); LSTR MSG_JERK = _UxGT("Rántás"); - LSTR MSG_VA_JERK = _UxGT("Seb.") LCD_STR_A _UxGT("-Rántás"); - LSTR MSG_VB_JERK = _UxGT("Seb.") LCD_STR_B _UxGT("-Rántás"); - LSTR MSG_VC_JERK = _UxGT("Seb.") LCD_STR_C _UxGT("-Rántás"); - LSTR MSG_VI_JERK = _UxGT("Seb.") LCD_STR_I _UxGT("-Rántás"); - LSTR MSG_VJ_JERK = _UxGT("Seb.") LCD_STR_J _UxGT("-Rántás"); - LSTR MSG_VK_JERK = _UxGT("Seb.") LCD_STR_K _UxGT("-Rántás"); + LSTR MSG_VA_JERK = _UxGT("Seb.") STR_A _UxGT("-Rántás"); + LSTR MSG_VB_JERK = _UxGT("Seb.") STR_B _UxGT("-Rántás"); + LSTR MSG_VC_JERK = _UxGT("Seb.") STR_C _UxGT("-Rántás"); + LSTR MSG_VI_JERK = _UxGT("Seb.") STR_I _UxGT("-Rántás"); + LSTR MSG_VJ_JERK = _UxGT("Seb.") STR_J _UxGT("-Rántás"); + LSTR MSG_VK_JERK = _UxGT("Seb.") STR_K _UxGT("-Rántás"); LSTR MSG_VE_JERK = _UxGT("E ránt. seb."); LSTR MSG_JUNCTION_DEVIATION = _UxGT("Csomopont eltérés"); LSTR MSG_VELOCITY = _UxGT("Sebesség"); - LSTR MSG_VMAX_A = _UxGT("Max Seb. ") LCD_STR_A; - LSTR MSG_VMAX_B = _UxGT("Max Seb. ") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("Max Seb. ") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("Max Seb. ") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("Max Seb. ") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("Max Seb. ") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("Max Seb. ") LCD_STR_E; + LSTR MSG_VMAX_A = _UxGT("Max Seb. ") STR_A; + LSTR MSG_VMAX_B = _UxGT("Max Seb. ") STR_B; + LSTR MSG_VMAX_C = _UxGT("Max Seb. ") STR_C; + LSTR MSG_VMAX_I = _UxGT("Max Seb. ") STR_I; + LSTR MSG_VMAX_J = _UxGT("Max Seb. ") STR_J; + LSTR MSG_VMAX_K = _UxGT("Max Seb. ") STR_K; + LSTR MSG_VMAX_E = _UxGT("Max Seb. ") STR_E; LSTR MSG_VMAX_EN = _UxGT("Max sebesség *"); LSTR MSG_VMIN = _UxGT("Min sebesség"); LSTR MSG_VTRAV_MIN = _UxGT("Min utazó.seb."); LSTR MSG_ACCELERATION = _UxGT("Gyorsulás"); - LSTR MSG_AMAX_A = _UxGT("Max gyors. ") LCD_STR_A; - LSTR MSG_AMAX_B = _UxGT("Max gyors. ") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("Max gyors. ") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("Max gyors. ") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("Max gyors. ") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("Max gyors. ") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("Max gyors. ") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("Max gyors. ") STR_A; + LSTR MSG_AMAX_B = _UxGT("Max gyors. ") STR_B; + LSTR MSG_AMAX_C = _UxGT("Max gyors. ") STR_C; + LSTR MSG_AMAX_I = _UxGT("Max gyors. ") STR_I; + LSTR MSG_AMAX_J = _UxGT("Max gyors. ") STR_J; + LSTR MSG_AMAX_K = _UxGT("Max gyors. ") STR_K; + LSTR MSG_AMAX_E = _UxGT("Max gyors. ") STR_E; LSTR MSG_AMAX_EN = _UxGT("Max gyorsulás *"); LSTR MSG_A_RETRACT = _UxGT("Visszahúzás"); LSTR MSG_A_TRAVEL = _UxGT("Utazás"); LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Max frekvencia"); LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Min elötolás"); LSTR MSG_STEPS_PER_MM = _UxGT("Lépés/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" Lépés/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" Lépés/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" Lépés/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" Lépés/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" Lépés/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" Lépés/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" Lépés/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" Lépés/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" Lépés/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" Lépés/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" Lépés/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" Lépés/mm"); LSTR MSG_E_STEPS = _UxGT("E lépés/mm"); LSTR MSG_EN_STEPS = _UxGT("*Lépés/mm"); LSTR MSG_TEMPERATURE = _UxGT("Höfok"); @@ -489,9 +489,9 @@ namespace Language_hu { LSTR MSG_BABYSTEP_X = _UxGT("Mikrolépés X"); LSTR MSG_BABYSTEP_Y = _UxGT("Mikrolépés Y"); LSTR MSG_BABYSTEP_Z = _UxGT("Mikrolépés Z"); - LSTR MSG_BABYSTEP_I = _UxGT("Mikrolépés ") LCD_STR_I; - LSTR MSG_BABYSTEP_J = _UxGT("Mikrolépés ") LCD_STR_J; - LSTR MSG_BABYSTEP_K = _UxGT("Mikrolépés ") LCD_STR_K; + LSTR MSG_BABYSTEP_I = _UxGT("Mikrolépés ") STR_I; + LSTR MSG_BABYSTEP_J = _UxGT("Mikrolépés ") STR_J; + LSTR MSG_BABYSTEP_K = _UxGT("Mikrolépés ") STR_K; LSTR MSG_BABYSTEP_TOTAL = _UxGT("Teljes"); LSTR MSG_ENDSTOP_ABORT = _UxGT("Végállás megszakítva!"); LSTR MSG_HEATING_FAILED_LCD = _UxGT("Fütés hiba!"); @@ -569,12 +569,12 @@ namespace Language_hu { LSTR MSG_INFO_MAX_TEMP = _UxGT("Max höfok"); LSTR MSG_INFO_PSU = _UxGT("PSU"); LSTR MSG_DRIVE_STRENGTH = _UxGT("Meghajtási erö"); - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Meghajtó %"); - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Meghajtó %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Meghajtó %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Meghajtó %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Meghajtó %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Meghajtó %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" Meghajtó %"); + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" Meghajtó %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" Meghajtó %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" Meghajtó %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" Meghajtó %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" Meghajtó %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E meghajtó %"); LSTR MSG_ERROR_TMC = _UxGT("TMC CSATLAKOZÁSI HIBA"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM írása"); diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index 1c36a5de21..431b1d01b7 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -85,9 +85,9 @@ namespace Language_it { LSTR MSG_HOME_OFFSET_X = _UxGT("Offset home X"); LSTR MSG_HOME_OFFSET_Y = _UxGT("Offset home Y"); LSTR MSG_HOME_OFFSET_Z = _UxGT("Offset home Z"); - LSTR MSG_HOME_OFFSET_I = _UxGT("Offset home ") LCD_STR_I; - LSTR MSG_HOME_OFFSET_J = _UxGT("Offset home ") LCD_STR_J; - LSTR MSG_HOME_OFFSET_K = _UxGT("Offset home ") LCD_STR_K; + LSTR MSG_HOME_OFFSET_I = _UxGT("Offset home ") STR_I; + LSTR MSG_HOME_OFFSET_J = _UxGT("Offset home ") STR_J; + LSTR MSG_HOME_OFFSET_K = _UxGT("Offset home ") STR_K; LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offset applicato"); LSTR MSG_SET_ORIGIN = _UxGT("Imposta Origine"); LSTR MSG_TRAMMING_WIZARD = _UxGT("Wizard Tramming"); @@ -268,9 +268,9 @@ namespace Language_it { LSTR MSG_MOVE_X = _UxGT("Muovi X"); LSTR MSG_MOVE_Y = _UxGT("Muovi Y"); LSTR MSG_MOVE_Z = _UxGT("Muovi Z"); - LSTR MSG_MOVE_I = _UxGT("Muovi ") LCD_STR_I; - LSTR MSG_MOVE_J = _UxGT("Muovi ") LCD_STR_J; - LSTR MSG_MOVE_K = _UxGT("Muovi ") LCD_STR_K; + LSTR MSG_MOVE_I = _UxGT("Muovi ") STR_I; + LSTR MSG_MOVE_J = _UxGT("Muovi ") STR_J; + LSTR MSG_MOVE_K = _UxGT("Muovi ") STR_K; LSTR MSG_MOVE_E = _UxGT("Estrusore"); LSTR MSG_MOVE_EN = _UxGT("Estrusore *"); LSTR MSG_HOTEND_TOO_COLD = _UxGT("Ugello freddo"); @@ -325,45 +325,45 @@ namespace Language_it { LSTR MSG_SELECT_E = _UxGT("Seleziona *"); LSTR MSG_ACC = _UxGT("Accel"); LSTR MSG_JERK = _UxGT("Jerk"); - LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-jerk"); - LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-jerk"); - LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-jerk"); - LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-jerk"); - LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-jerk"); - LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _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_VI_JERK = _UxGT("V") STR_I _UxGT("-jerk"); + LSTR MSG_VJ_JERK = _UxGT("V") STR_J _UxGT("-jerk"); + LSTR MSG_VK_JERK = _UxGT("V") STR_K _UxGT("-jerk"); LSTR MSG_VE_JERK = _UxGT("Ve-jerk"); LSTR MSG_JUNCTION_DEVIATION = _UxGT("Deviaz. giunzioni"); LSTR MSG_VELOCITY = _UxGT("Velocità"); - LSTR MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A; - LSTR MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("Vmax ") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("Vmax ") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("Vmax ") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E; + LSTR MSG_VMAX_A = _UxGT("Vmax ") STR_A; + LSTR MSG_VMAX_B = _UxGT("Vmax ") STR_B; + LSTR MSG_VMAX_C = _UxGT("Vmax ") STR_C; + LSTR MSG_VMAX_I = _UxGT("Vmax ") STR_I; + LSTR MSG_VMAX_J = _UxGT("Vmax ") STR_J; + LSTR MSG_VMAX_K = _UxGT("Vmax ") STR_K; + LSTR MSG_VMAX_E = _UxGT("Vmax ") STR_E; LSTR MSG_VMAX_EN = _UxGT("Vmax *"); LSTR MSG_VMIN = _UxGT("Vmin"); LSTR MSG_VTRAV_MIN = _UxGT("VTrav min"); LSTR MSG_ACCELERATION = _UxGT("Accelerazione"); - LSTR MSG_AMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Accel"); - LSTR MSG_AMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Accel"); - LSTR MSG_AMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Accel"); - LSTR MSG_AMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Accel"); - LSTR MSG_AMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Accel"); - LSTR MSG_AMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Accel"); - LSTR MSG_AMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Accel"); + LSTR MSG_AMAX_A = _UxGT("Max ") STR_A _UxGT(" Accel"); + LSTR MSG_AMAX_B = _UxGT("Max ") STR_B _UxGT(" Accel"); + LSTR MSG_AMAX_C = _UxGT("Max ") STR_C _UxGT(" Accel"); + LSTR MSG_AMAX_I = _UxGT("Max ") STR_I _UxGT(" Accel"); + LSTR MSG_AMAX_J = _UxGT("Max ") STR_J _UxGT(" Accel"); + LSTR MSG_AMAX_K = _UxGT("Max ") STR_K _UxGT(" Accel"); + LSTR MSG_AMAX_E = _UxGT("Max ") STR_E _UxGT(" Accel"); LSTR MSG_AMAX_EN = _UxGT("Max * Accel"); LSTR MSG_A_RETRACT = _UxGT("A-Ritrazione"); LSTR MSG_A_TRAVEL = _UxGT("A-Spostamento"); LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Frequenza max"); LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Feed min"); LSTR MSG_STEPS_PER_MM = _UxGT("Passi/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" passi/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" passi/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" passi/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" passi/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" passi/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" passi/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" passi/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" passi/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" passi/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" passi/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" passi/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" passi/mm"); LSTR MSG_E_STEPS = _UxGT("E passi/mm"); LSTR MSG_EN_STEPS = _UxGT("* passi/mm"); LSTR MSG_TEMPERATURE = _UxGT("Temperatura"); @@ -497,9 +497,9 @@ namespace Language_it { LSTR MSG_BABYSTEP_X = _UxGT("Babystep X"); LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y"); LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z"); - LSTR MSG_BABYSTEP_I = _UxGT("Babystep ") LCD_STR_I; - LSTR MSG_BABYSTEP_J = _UxGT("Babystep ") LCD_STR_J; - LSTR MSG_BABYSTEP_K = _UxGT("Babystep ") LCD_STR_K; + LSTR MSG_BABYSTEP_I = _UxGT("Babystep ") STR_I; + LSTR MSG_BABYSTEP_J = _UxGT("Babystep ") STR_J; + LSTR MSG_BABYSTEP_K = _UxGT("Babystep ") STR_K; LSTR MSG_BABYSTEP_TOTAL = _UxGT("Totali"); LSTR MSG_ENDSTOP_ABORT = _UxGT("Interrompi se FC"); LSTR MSG_HEATING_FAILED_LCD = _UxGT("Risc.Fallito"); // Max 12 characters @@ -577,12 +577,12 @@ namespace Language_it { LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp max"); LSTR MSG_INFO_PSU = _UxGT("Alimentatore"); LSTR MSG_DRIVE_STRENGTH = _UxGT("Potenza Drive"); - LSTR MSG_DAC_PERCENT_A = _UxGT("Driver ") LCD_STR_A _UxGT(" %"); - LSTR MSG_DAC_PERCENT_B = _UxGT("Driver ") LCD_STR_B _UxGT(" %"); - LSTR MSG_DAC_PERCENT_C = _UxGT("Driver ") LCD_STR_C _UxGT(" %"); - LSTR MSG_DAC_PERCENT_I = _UxGT("Driver ") LCD_STR_I _UxGT(" %"); - LSTR MSG_DAC_PERCENT_J = _UxGT("Driver ") LCD_STR_J _UxGT(" %"); - LSTR MSG_DAC_PERCENT_K = _UxGT("Driver ") LCD_STR_K _UxGT(" %"); + LSTR MSG_DAC_PERCENT_A = _UxGT("Driver ") STR_A _UxGT(" %"); + LSTR MSG_DAC_PERCENT_B = _UxGT("Driver ") STR_B _UxGT(" %"); + LSTR MSG_DAC_PERCENT_C = _UxGT("Driver ") STR_C _UxGT(" %"); + LSTR MSG_DAC_PERCENT_I = _UxGT("Driver ") STR_I _UxGT(" %"); + LSTR MSG_DAC_PERCENT_J = _UxGT("Driver ") STR_J _UxGT(" %"); + LSTR MSG_DAC_PERCENT_K = _UxGT("Driver ") STR_K _UxGT(" %"); LSTR MSG_DAC_PERCENT_E = _UxGT("Driver E %"); LSTR MSG_ERROR_TMC = _UxGT("ERR.CONNESSIONE TMC"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Scrivi DAC EEPROM"); diff --git a/Marlin/src/lcd/language/language_jp_kana.h b/Marlin/src/lcd/language/language_jp_kana.h index 16e605cc25..3a876a07e3 100644 --- a/Marlin/src/lcd/language/language_jp_kana.h +++ b/Marlin/src/lcd/language/language_jp_kana.h @@ -116,23 +116,23 @@ namespace Language_jp_kana { LSTR MSG_SELECT_E = _UxGT("センタク *"); LSTR MSG_ACC = _UxGT("カソクド mm/s") SUPERSCRIPT_TWO; // "Accel" LSTR MSG_JERK = _UxGT("ヤクドウ mm/s"); // "Jerk" - LSTR MSG_VA_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_A; // "Va-jerk" - LSTR MSG_VB_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_B; // "Vb-jerk" - LSTR MSG_VC_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_C; // "Vc-jerk" - LSTR MSG_VI_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_I; // "Va-jerk" - LSTR MSG_VJ_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_J; // "Vb-jerk" - LSTR MSG_VK_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_K; // "Vc-jerk" - LSTR MSG_A_STEPS = LCD_STR_A _UxGT("ステップ/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT("ステップ/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT("ステップ/mm"); + LSTR MSG_VA_JERK = _UxGT("ジク ヤクドウ mm/s") STR_A; // "Va-jerk" + LSTR MSG_VB_JERK = _UxGT("ジク ヤクドウ mm/s") STR_B; // "Vb-jerk" + LSTR MSG_VC_JERK = _UxGT("ジク ヤクドウ mm/s") STR_C; // "Vc-jerk" + LSTR MSG_VI_JERK = _UxGT("ジク ヤクドウ mm/s") STR_I; // "Va-jerk" + LSTR MSG_VJ_JERK = _UxGT("ジク ヤクドウ mm/s") STR_J; // "Vb-jerk" + LSTR MSG_VK_JERK = _UxGT("ジク ヤクドウ mm/s") STR_K; // "Vc-jerk" + LSTR MSG_A_STEPS = STR_A _UxGT("ステップ/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT("ステップ/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT("ステップ/mm"); LSTR MSG_VE_JERK = _UxGT("エクストルーダー ヤクド"); // "Ve-jerk" - LSTR MSG_VMAX_A = _UxGT("サイダイオクリソクド ") LCD_STR_A; // "Vmax A" - LSTR MSG_VMAX_B = _UxGT("サイダイオクリソクド ") LCD_STR_B; // "Vmax B" - LSTR MSG_VMAX_C = _UxGT("サイダイオクリソクド ") LCD_STR_C; // "Vmax C" - LSTR MSG_VMAX_I = _UxGT("サイダイオクリソクド ") LCD_STR_I; // "Vmax I" - LSTR MSG_VMAX_J = _UxGT("サイダイオクリソクド ") LCD_STR_J; // "Vmax J" - LSTR MSG_VMAX_K = _UxGT("サイダイオクリソクド ") LCD_STR_K; // "Vmax K" - LSTR MSG_VMAX_E = _UxGT("サイダイオクリソクド ") LCD_STR_E; // "Vmax E" + LSTR MSG_VMAX_A = _UxGT("サイダイオクリソクド ") STR_A; // "Vmax A" + LSTR MSG_VMAX_B = _UxGT("サイダイオクリソクド ") STR_B; // "Vmax B" + LSTR MSG_VMAX_C = _UxGT("サイダイオクリソクド ") STR_C; // "Vmax C" + LSTR MSG_VMAX_I = _UxGT("サイダイオクリソクド ") STR_I; // "Vmax I" + LSTR MSG_VMAX_J = _UxGT("サイダイオクリソクド ") STR_J; // "Vmax J" + LSTR MSG_VMAX_K = _UxGT("サイダイオクリソクド ") STR_K; // "Vmax K" + LSTR MSG_VMAX_E = _UxGT("サイダイオクリソクド ") STR_E; // "Vmax E" LSTR MSG_VMAX_EN = _UxGT("サイダイオクリソクド *"); // "Vmax E1" LSTR MSG_VMIN = _UxGT("サイショウオクリソクド"); // "Vmin" LSTR MSG_VTRAV_MIN = _UxGT("サイショウイドウソクド"); // "VTrav min" @@ -217,12 +217,12 @@ namespace Language_jp_kana { LSTR MSG_INFO_MAX_TEMP = _UxGT("セッテイサイコウオン"); // "Max Temp" LSTR MSG_INFO_PSU = _UxGT("デンゲンシュベツ"); // "Power Supply" LSTR MSG_DRIVE_STRENGTH = _UxGT("モータークドウリョク"); // "Drive Strength" - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" DACシュツリョク %"); // "X Driver %" - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" DACシュツリョク %"); // "Y Driver %" - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" DACシュツリョク %"); // "Z Driver %" - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" DACシュツリョク %"); // "I Driver %" - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" DACシュツリョク %"); // "J Driver %" - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" DACシュツリョク %"); // "K Driver %" + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" DACシュツリョク %"); // "X Driver %" + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" DACシュツリョク %"); // "Y Driver %" + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" DACシュツリョク %"); // "Z Driver %" + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" DACシュツリョク %"); // "I Driver %" + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" DACシュツリョク %"); // "J Driver %" + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" DACシュツリョク %"); // "K Driver %" LSTR MSG_DAC_PERCENT_E = _UxGT("E DACシュツリョク %"); // "E Driver %" LSTR MSG_DAC_EEPROM_WRITE = _UxGT("EEPROMヘホゾン"); // "Store memory" LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("イチジテイシ"); diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h index 7c012f46df..47c89e9e32 100644 --- a/Marlin/src/lcd/language/language_pl.h +++ b/Marlin/src/lcd/language/language_pl.h @@ -274,12 +274,12 @@ namespace Language_pl { LSTR MSG_SELECT_E = _UxGT("Wybierz *"); LSTR MSG_ACC = _UxGT("Przyspieszenie"); LSTR MSG_JERK = _UxGT("Zryw"); - LSTR MSG_VA_JERK = _UxGT("Zryw V") LCD_STR_A; - LSTR MSG_VB_JERK = _UxGT("Zryw V") LCD_STR_B; - LSTR MSG_VC_JERK = _UxGT("Zryw V") LCD_STR_C; - LSTR MSG_VI_JERK = _UxGT("Zryw V") LCD_STR_I; - LSTR MSG_VJ_JERK = _UxGT("Zryw V") LCD_STR_J; - LSTR MSG_VK_JERK = _UxGT("Zryw V") LCD_STR_K; + LSTR MSG_VA_JERK = _UxGT("Zryw V") STR_A; + LSTR MSG_VB_JERK = _UxGT("Zryw V") STR_B; + LSTR MSG_VC_JERK = _UxGT("Zryw V") STR_C; + LSTR MSG_VI_JERK = _UxGT("Zryw V") STR_I; + LSTR MSG_VJ_JERK = _UxGT("Zryw V") STR_J; + LSTR MSG_VK_JERK = _UxGT("Zryw V") STR_K; LSTR MSG_VE_JERK = _UxGT("Zryw Ve"); LSTR MSG_VELOCITY = _UxGT("Prędkość (V)"); @@ -290,12 +290,12 @@ namespace Language_pl { LSTR MSG_A_TRAVEL = _UxGT("A-przesuń."); LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Częstotliwość max"); LSTR MSG_STEPS_PER_MM = _UxGT("kroki/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" kroki/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" kroki/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" kroki/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" kroki/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" kroki/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" kroki/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" kroki/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" kroki/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" kroki/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" kroki/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" kroki/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" kroki/mm"); LSTR MSG_E_STEPS = _UxGT("E kroki/mm"); LSTR MSG_EN_STEPS = _UxGT("* kroki/mm"); LSTR MSG_TEMPERATURE = _UxGT("Temperatura"); @@ -446,12 +446,12 @@ namespace Language_pl { LSTR MSG_INFO_PSU = _UxGT("Zasilacz"); LSTR MSG_DRIVE_STRENGTH = _UxGT("Siła silnika"); - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Siła %"); - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Siła %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Siła %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Siła %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Siła %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Siła %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" Siła %"); + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" Siła %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" Siła %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" Siła %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" Siła %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" Siła %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E Siła %"); LSTR MSG_ERROR_TMC = _UxGT("TMC BŁĄD POŁĄCZENIA"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Zapisz DAC EEPROM"); diff --git a/Marlin/src/lcd/language/language_pt.h b/Marlin/src/lcd/language/language_pt.h index 524c2c97d8..f73fe1f1b4 100644 --- a/Marlin/src/lcd/language/language_pt.h +++ b/Marlin/src/lcd/language/language_pt.h @@ -102,12 +102,12 @@ namespace Language_pt { LSTR MSG_A_RETRACT = _UxGT("A-retracção"); LSTR MSG_A_TRAVEL = _UxGT("A-movimento"); LSTR MSG_STEPS_PER_MM = _UxGT("Passo/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" passo/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" passo/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" passo/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" passo/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" passo/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" passo/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" passo/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" passo/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" passo/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" passo/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" passo/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" passo/mm"); LSTR MSG_E_STEPS = _UxGT("E passo/mm"); LSTR MSG_EN_STEPS = _UxGT("* passo/mm"); LSTR MSG_TEMPERATURE = _UxGT("Temperatura"); diff --git a/Marlin/src/lcd/language/language_pt_br.h b/Marlin/src/lcd/language/language_pt_br.h index 0c44145e00..8d8c65f63d 100644 --- a/Marlin/src/lcd/language/language_pt_br.h +++ b/Marlin/src/lcd/language/language_pt_br.h @@ -240,12 +240,12 @@ namespace Language_pt_br { LSTR MSG_SELECT_E = _UxGT("Selecionar *"); LSTR MSG_ACC = _UxGT("Acel."); LSTR MSG_JERK = _UxGT("Arrancada"); - LSTR MSG_VA_JERK = _UxGT("arrancada V") LCD_STR_A; - LSTR MSG_VB_JERK = _UxGT("arrancada V") LCD_STR_B; - LSTR MSG_VC_JERK = _UxGT("arrancada V") LCD_STR_C; - LSTR MSG_VI_JERK = _UxGT("arrancada V") LCD_STR_I; - LSTR MSG_VJ_JERK = _UxGT("arrancada V") LCD_STR_J; - LSTR MSG_VK_JERK = _UxGT("arrancada V") LCD_STR_K; + LSTR MSG_VA_JERK = _UxGT("arrancada V") STR_A; + LSTR MSG_VB_JERK = _UxGT("arrancada V") STR_B; + LSTR MSG_VC_JERK = _UxGT("arrancada V") STR_C; + LSTR MSG_VI_JERK = _UxGT("arrancada V") STR_I; + LSTR MSG_VJ_JERK = _UxGT("arrancada V") STR_J; + LSTR MSG_VK_JERK = _UxGT("arrancada V") STR_K; LSTR MSG_VE_JERK = _UxGT("arrancada VE"); LSTR MSG_JUNCTION_DEVIATION = _UxGT("Desv. Junção"); LSTR MSG_VELOCITY = _UxGT("Velocidade"); @@ -254,12 +254,12 @@ namespace Language_pt_br { LSTR MSG_A_RETRACT = _UxGT("Retrair A"); LSTR MSG_A_TRAVEL = _UxGT("Movimento A"); LSTR MSG_STEPS_PER_MM = _UxGT("Passo/mm"); - LSTR MSG_A_STEPS = _UxGT("Passo ") LCD_STR_A _UxGT("/mm"); - LSTR MSG_B_STEPS = _UxGT("Passo ") LCD_STR_B _UxGT("/mm"); - LSTR MSG_C_STEPS = _UxGT("Passo ") LCD_STR_C _UxGT("/mm"); - LSTR MSG_I_STEPS = _UxGT("Passo ") LCD_STR_I _UxGT("/mm"); - LSTR MSG_J_STEPS = _UxGT("Passo ") LCD_STR_J _UxGT("/mm"); - LSTR MSG_K_STEPS = _UxGT("Passo ") LCD_STR_K _UxGT("/mm"); + LSTR MSG_A_STEPS = _UxGT("Passo ") STR_A _UxGT("/mm"); + LSTR MSG_B_STEPS = _UxGT("Passo ") STR_B _UxGT("/mm"); + LSTR MSG_C_STEPS = _UxGT("Passo ") STR_C _UxGT("/mm"); + LSTR MSG_I_STEPS = _UxGT("Passo ") STR_I _UxGT("/mm"); + LSTR MSG_J_STEPS = _UxGT("Passo ") STR_J _UxGT("/mm"); + LSTR MSG_K_STEPS = _UxGT("Passo ") STR_K _UxGT("/mm"); LSTR MSG_E_STEPS = _UxGT("E/mm"); LSTR MSG_EN_STEPS = _UxGT("*/mm"); LSTR MSG_TEMPERATURE = _UxGT("Temperatura"); diff --git a/Marlin/src/lcd/language/language_ro.h b/Marlin/src/lcd/language/language_ro.h index 29cdc51c80..f51179829a 100644 --- a/Marlin/src/lcd/language/language_ro.h +++ b/Marlin/src/lcd/language/language_ro.h @@ -268,45 +268,45 @@ namespace Language_ro { LSTR MSG_SELECT_E = _UxGT("Select *"); LSTR MSG_ACC = _UxGT("Accel"); LSTR MSG_JERK = _UxGT("Jerk"); - LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-Jerk"); - LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-Jerk"); - LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-Jerk"); - LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-Jerk"); - LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-Jerk"); - LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _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_VI_JERK = _UxGT("V") STR_I _UxGT("-Jerk"); + LSTR MSG_VJ_JERK = _UxGT("V") STR_J _UxGT("-Jerk"); + LSTR MSG_VK_JERK = _UxGT("V") STR_K _UxGT("-Jerk"); LSTR MSG_VE_JERK = _UxGT("Ve-Jerk"); LSTR MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev"); LSTR MSG_VELOCITY = _UxGT("Velocity"); - LSTR MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A; - LSTR MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("Vmax ") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("Vmax ") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("Vmax ") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E; + LSTR MSG_VMAX_A = _UxGT("Vmax ") STR_A; + LSTR MSG_VMAX_B = _UxGT("Vmax ") STR_B; + LSTR MSG_VMAX_C = _UxGT("Vmax ") STR_C; + LSTR MSG_VMAX_I = _UxGT("Vmax ") STR_I; + LSTR MSG_VMAX_J = _UxGT("Vmax ") STR_J; + LSTR MSG_VMAX_K = _UxGT("Vmax ") STR_K; + LSTR MSG_VMAX_E = _UxGT("Vmax ") STR_E; LSTR MSG_VMAX_EN = _UxGT("Vmax *"); LSTR MSG_VMIN = _UxGT("Vmin"); LSTR MSG_VTRAV_MIN = _UxGT("VTrav Min"); LSTR MSG_ACCELERATION = _UxGT("Acceleration"); - LSTR MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A; - LSTR MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("Amax ") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("Amax ") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("Amax ") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("Amax ") STR_A; + LSTR MSG_AMAX_B = _UxGT("Amax ") STR_B; + LSTR MSG_AMAX_C = _UxGT("Amax ") STR_C; + LSTR MSG_AMAX_I = _UxGT("Amax ") STR_I; + LSTR MSG_AMAX_J = _UxGT("Amax ") STR_J; + LSTR MSG_AMAX_K = _UxGT("Amax ") STR_K; + LSTR MSG_AMAX_E = _UxGT("Amax ") STR_E; LSTR MSG_AMAX_EN = _UxGT("Amax *"); LSTR MSG_A_RETRACT = _UxGT("A-Retract"); LSTR MSG_A_TRAVEL = _UxGT("A-Travel"); LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Frequency max"); LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Feed min"); LSTR MSG_STEPS_PER_MM = _UxGT("Steps/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" steps/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" steps/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" steps/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" steps/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" steps/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" steps/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" steps/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" steps/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" steps/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" steps/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" steps/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" steps/mm"); LSTR MSG_E_STEPS = _UxGT("Esteps/mm"); LSTR MSG_EN_STEPS = _UxGT("*steps/mm"); LSTR MSG_TEMPERATURE = _UxGT("Temperature"); @@ -504,12 +504,12 @@ namespace Language_ro { LSTR MSG_INFO_MAX_TEMP = _UxGT("Temperatura Maxima"); LSTR MSG_INFO_PSU = _UxGT("PSU"); LSTR MSG_DRIVE_STRENGTH = _UxGT("Drive Strength"); - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" Driver %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E Driver %"); LSTR MSG_ERROR_TMC = _UxGT("TMC CONNECTION ERROR"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Write"); diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h index 5e3d0f2fac..d6b5bbfbdf 100644 --- a/Marlin/src/lcd/language/language_ru.h +++ b/Marlin/src/lcd/language/language_ru.h @@ -84,17 +84,17 @@ namespace Language_ru { LSTR MSG_HOME_OFFSET_X = _UxGT("Смещение дома X"); LSTR MSG_HOME_OFFSET_Y = _UxGT("Смещение дома Y"); LSTR MSG_HOME_OFFSET_Z = _UxGT("Смещение дома Z"); - LSTR MSG_HOME_OFFSET_I = _UxGT("Смещение дома ") LCD_STR_I; - LSTR MSG_HOME_OFFSET_J = _UxGT("Смещение дома ") LCD_STR_J; - LSTR MSG_HOME_OFFSET_K = _UxGT("Смещение дома ") LCD_STR_K; + LSTR MSG_HOME_OFFSET_I = _UxGT("Смещение дома ") STR_I; + LSTR MSG_HOME_OFFSET_J = _UxGT("Смещение дома ") STR_J; + LSTR MSG_HOME_OFFSET_K = _UxGT("Смещение дома ") STR_K; #else LSTR MSG_SET_HOME_OFFSETS = _UxGT("Установ.смещ.дома"); LSTR MSG_HOME_OFFSET_X = _UxGT("Смещ. дома X"); LSTR MSG_HOME_OFFSET_Y = _UxGT("Смещ. дома Y"); LSTR MSG_HOME_OFFSET_Z = _UxGT("Смещ. дома Z"); - LSTR MSG_HOME_OFFSET_I = _UxGT("Смещ. дома ") LCD_STR_I; - LSTR MSG_HOME_OFFSET_J = _UxGT("Смещ. дома ") LCD_STR_J; - LSTR MSG_HOME_OFFSET_K = _UxGT("Смещ. дома ") LCD_STR_K; + LSTR MSG_HOME_OFFSET_I = _UxGT("Смещ. дома ") STR_I; + LSTR MSG_HOME_OFFSET_J = _UxGT("Смещ. дома ") STR_J; + LSTR MSG_HOME_OFFSET_K = _UxGT("Смещ. дома ") STR_K; #endif LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Смещения применены"); LSTR MSG_SET_ORIGIN = _UxGT("Установить ноль"); @@ -339,9 +339,9 @@ namespace Language_ru { LSTR MSG_MOVE_X = _UxGT("Движение по X"); LSTR MSG_MOVE_Y = _UxGT("Движение по Y"); LSTR MSG_MOVE_Z = _UxGT("Движение по Z"); - LSTR MSG_MOVE_I = _UxGT("Движение по ") LCD_STR_I; - LSTR MSG_MOVE_J = _UxGT("Движение по ") LCD_STR_J; - LSTR MSG_MOVE_K = _UxGT("Движение по ") LCD_STR_K; + LSTR MSG_MOVE_I = _UxGT("Движение по ") STR_I; + LSTR MSG_MOVE_J = _UxGT("Движение по ") STR_J; + LSTR MSG_MOVE_K = _UxGT("Движение по ") STR_K; LSTR MSG_MOVE_E = _UxGT("Экструдер"); LSTR MSG_MOVE_EN = _UxGT("Экструдер *"); LSTR MSG_HOTEND_TOO_COLD = _UxGT("Сопло не нагрето"); @@ -399,12 +399,12 @@ namespace Language_ru { LSTR MSG_SELECT_E = _UxGT("Выбор *"); LSTR MSG_ACC = _UxGT("Ускорение"); LSTR MSG_JERK = _UxGT("Рывок"); - LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-рывок"); - LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-рывок"); - LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-рывок"); - LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-рывок"); - LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-рывок"); - LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-рывок"); + LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT("-рывок"); + LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT("-рывок"); + LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT("-рывок"); + LSTR MSG_VI_JERK = _UxGT("V") STR_I _UxGT("-рывок"); + LSTR MSG_VJ_JERK = _UxGT("V") STR_J _UxGT("-рывок"); + LSTR MSG_VK_JERK = _UxGT("V") STR_K _UxGT("-рывок"); LSTR MSG_VE_JERK = _UxGT("Ve-рывок"); #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_JUNCTION_DEVIATION = _UxGT("Отклонение узла"); @@ -412,36 +412,36 @@ namespace Language_ru { LSTR MSG_JUNCTION_DEVIATION = _UxGT("Отклон. узла"); #endif LSTR MSG_VELOCITY = _UxGT("Скорость, мм/с"); - LSTR MSG_VMAX_A = _UxGT("Скор.макс ") LCD_STR_A; - LSTR MSG_VMAX_B = _UxGT("Скор.макс ") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("Скор.макс ") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("Скор.макс ") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("Скор.макс ") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("Скор.макс ") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("Скор.макс ") LCD_STR_E; + LSTR MSG_VMAX_A = _UxGT("Скор.макс ") STR_A; + LSTR MSG_VMAX_B = _UxGT("Скор.макс ") STR_B; + LSTR MSG_VMAX_C = _UxGT("Скор.макс ") STR_C; + LSTR MSG_VMAX_I = _UxGT("Скор.макс ") STR_I; + LSTR MSG_VMAX_J = _UxGT("Скор.макс ") STR_J; + LSTR MSG_VMAX_K = _UxGT("Скор.макс ") STR_K; + LSTR MSG_VMAX_E = _UxGT("Скор.макс ") STR_E; LSTR MSG_VMAX_EN = _UxGT("Скор.макс *"); LSTR MSG_VMIN = _UxGT("Скор.мин"); LSTR MSG_VTRAV_MIN = _UxGT("Перемещение мин"); LSTR MSG_ACCELERATION = _UxGT("Ускорение, мм/с2"); - LSTR MSG_AMAX_A = _UxGT("Ускор.макс ") LCD_STR_A; - LSTR MSG_AMAX_B = _UxGT("Ускор.макс ") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("Ускор.макс ") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("Ускор.макс ") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("Ускор.макс ") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("Ускор.макс ") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("Ускор.макс ") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("Ускор.макс ") STR_A; + LSTR MSG_AMAX_B = _UxGT("Ускор.макс ") STR_B; + LSTR MSG_AMAX_C = _UxGT("Ускор.макс ") STR_C; + LSTR MSG_AMAX_I = _UxGT("Ускор.макс ") STR_I; + LSTR MSG_AMAX_J = _UxGT("Ускор.макс ") STR_J; + LSTR MSG_AMAX_K = _UxGT("Ускор.макс ") STR_K; + LSTR MSG_AMAX_E = _UxGT("Ускор.макс ") STR_E; LSTR MSG_AMAX_EN = _UxGT("Ускор.макс *"); LSTR MSG_A_RETRACT = _UxGT("Ускор.втягив."); LSTR MSG_A_TRAVEL = _UxGT("Ускор.путеш."); LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Частота макс."); LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Подача мин."); LSTR MSG_STEPS_PER_MM = _UxGT("Шагов/мм"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" шаг/мм"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" шаг/мм"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" шаг/мм"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" шаг/мм"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" шаг/мм"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" шаг/мм"); + LSTR MSG_A_STEPS = STR_A _UxGT(" шаг/мм"); + LSTR MSG_B_STEPS = STR_B _UxGT(" шаг/мм"); + LSTR MSG_C_STEPS = STR_C _UxGT(" шаг/мм"); + LSTR MSG_I_STEPS = STR_I _UxGT(" шаг/мм"); + LSTR MSG_J_STEPS = STR_J _UxGT(" шаг/мм"); + LSTR MSG_K_STEPS = STR_K _UxGT(" шаг/мм"); LSTR MSG_E_STEPS = _UxGT("E шаг/мм"); LSTR MSG_EN_STEPS = _UxGT("* шаг/мм"); LSTR MSG_TEMPERATURE = _UxGT("Температура"); @@ -612,9 +612,9 @@ namespace Language_ru { LSTR MSG_BABYSTEP_X = _UxGT("Микрошаг X"); LSTR MSG_BABYSTEP_Y = _UxGT("Микрошаг Y"); LSTR MSG_BABYSTEP_Z = _UxGT("Микрошаг Z"); - LSTR MSG_BABYSTEP_I = _UxGT("Микрошаг ") LCD_STR_I; - LSTR MSG_BABYSTEP_J = _UxGT("Микрошаг ") LCD_STR_J; - LSTR MSG_BABYSTEP_K = _UxGT("Микрошаг ") LCD_STR_K; + LSTR MSG_BABYSTEP_I = _UxGT("Микрошаг ") STR_I; + LSTR MSG_BABYSTEP_J = _UxGT("Микрошаг ") STR_J; + LSTR MSG_BABYSTEP_K = _UxGT("Микрошаг ") STR_K; LSTR MSG_BABYSTEP_TOTAL = _UxGT("Сумарно"); LSTR MSG_ENDSTOP_ABORT = _UxGT("Сработал концевик"); LSTR MSG_HEATING_FAILED_LCD = _UxGT("Разогрев не удался"); @@ -711,12 +711,12 @@ namespace Language_ru { LSTR MSG_INFO_MAX_TEMP = _UxGT("Макс. ") LCD_STR_THERMOMETER; LSTR MSG_INFO_PSU = _UxGT("БП"); LSTR MSG_DRIVE_STRENGTH = _UxGT("Сила привода"); - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Привод, %"); - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Привод, %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Привод, %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Привод, %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Привод, %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Привод, %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" Привод, %"); + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" Привод, %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" Привод, %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" Привод, %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" Привод, %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" Привод, %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E Привод, %"); LSTR MSG_ERROR_TMC = _UxGT("СБОЙ СВЯЗИ С TMC"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Запись DAC в EEPROM"); diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h index db694e2242..64e298cb15 100644 --- a/Marlin/src/lcd/language/language_sk.h +++ b/Marlin/src/lcd/language/language_sk.h @@ -98,9 +98,9 @@ namespace Language_sk { LSTR MSG_HOME_OFFSET_X = _UxGT("X Ofset"); LSTR MSG_HOME_OFFSET_Y = _UxGT("Y Ofset"); LSTR MSG_HOME_OFFSET_Z = _UxGT("Z Ofset"); - LSTR MSG_HOME_OFFSET_I = LCD_STR_I _UxGT(" Ofset"); - LSTR MSG_HOME_OFFSET_J = LCD_STR_J _UxGT(" Ofset"); - LSTR MSG_HOME_OFFSET_K = LCD_STR_K _UxGT(" Ofset"); + LSTR MSG_HOME_OFFSET_I = STR_I _UxGT(" Ofset"); + LSTR MSG_HOME_OFFSET_J = STR_J _UxGT(" Ofset"); + LSTR MSG_HOME_OFFSET_K = STR_K _UxGT(" Ofset"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofsety nastavené"); LSTR MSG_SET_ORIGIN = _UxGT("Nastaviť začiatok"); LSTR MSG_TRAMMING_WIZARD = _UxGT("Spriev. vyrovn."); @@ -282,9 +282,9 @@ namespace Language_sk { LSTR MSG_MOVE_X = _UxGT("Posunúť X"); LSTR MSG_MOVE_Y = _UxGT("Posunúť Y"); LSTR MSG_MOVE_Z = _UxGT("Posunúť Z"); - LSTR MSG_MOVE_I = _UxGT("Posunúť ") LCD_STR_I; - LSTR MSG_MOVE_J = _UxGT("Posunúť ") LCD_STR_J; - LSTR MSG_MOVE_K = _UxGT("Posunúť ") LCD_STR_K; + LSTR MSG_MOVE_I = _UxGT("Posunúť ") STR_I; + LSTR MSG_MOVE_J = _UxGT("Posunúť ") STR_J; + LSTR MSG_MOVE_K = _UxGT("Posunúť ") STR_K; LSTR MSG_MOVE_E = _UxGT("Extrudér"); LSTR MSG_MOVE_EN = _UxGT("Extrudér *"); LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hotend je studený"); @@ -299,10 +299,10 @@ namespace Language_sk { LSTR MSG_MOVE_1IN = _UxGT("Posunúť o 1,0in"); LSTR MSG_SPEED = _UxGT("Rýchlosť"); LSTR MSG_MAXSPEED = _UxGT("Max rýchl. (mm/s)"); - LSTR MSG_MAXSPEED_X = _UxGT("Max rýchl. ") LCD_STR_A; - LSTR MSG_MAXSPEED_Y = _UxGT("Max rýchl. ") LCD_STR_B; - LSTR MSG_MAXSPEED_Z = _UxGT("Max rýchl. ") LCD_STR_C; - LSTR MSG_MAXSPEED_E = _UxGT("Max rýchl. ") LCD_STR_E; + LSTR MSG_MAXSPEED_X = _UxGT("Max rýchl. ") STR_A; + LSTR MSG_MAXSPEED_Y = _UxGT("Max rýchl. ") STR_B; + LSTR MSG_MAXSPEED_Z = _UxGT("Max rýchl. ") STR_C; + LSTR MSG_MAXSPEED_E = _UxGT("Max rýchl. ") STR_E; LSTR MSG_MAXSPEED_A = _UxGT("Max rýchl. @"); LSTR MSG_BED_Z = _UxGT("Výška podl."); LSTR MSG_NOZZLE = _UxGT("Tryska"); @@ -345,45 +345,45 @@ namespace Language_sk { LSTR MSG_SELECT_E = _UxGT("Vybrať *"); LSTR MSG_ACC = _UxGT("Zrýchlenie"); LSTR MSG_JERK = _UxGT("Skok"); - LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-skok"); - LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-skok"); - LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-skok"); - LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-skok"); - LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-skok"); - LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-skok"); + LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT("-skok"); + LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT("-skok"); + LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT("-skok"); + LSTR MSG_VI_JERK = _UxGT("V") STR_I _UxGT("-skok"); + LSTR MSG_VJ_JERK = _UxGT("V") STR_J _UxGT("-skok"); + LSTR MSG_VK_JERK = _UxGT("V") STR_K _UxGT("-skok"); LSTR MSG_VE_JERK = _UxGT("Ve-skok"); LSTR MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev"); LSTR MSG_VELOCITY = _UxGT("Rýchlosť"); - LSTR MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A; - LSTR MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("Vmax ") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("Vmax ") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("Vmax ") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E; + LSTR MSG_VMAX_A = _UxGT("Vmax ") STR_A; + LSTR MSG_VMAX_B = _UxGT("Vmax ") STR_B; + LSTR MSG_VMAX_C = _UxGT("Vmax ") STR_C; + LSTR MSG_VMAX_I = _UxGT("Vmax ") STR_I; + LSTR MSG_VMAX_J = _UxGT("Vmax ") STR_J; + LSTR MSG_VMAX_K = _UxGT("Vmax ") STR_K; + LSTR MSG_VMAX_E = _UxGT("Vmax ") STR_E; LSTR MSG_VMAX_EN = _UxGT("Vmax *"); LSTR MSG_VMIN = _UxGT("Vmin"); LSTR MSG_VTRAV_MIN = _UxGT("VPrej Min"); LSTR MSG_ACCELERATION = _UxGT("Akcelerácia"); - LSTR MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A; - LSTR MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("Amax ") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("Amax ") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("Amax ") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("Amax ") STR_A; + LSTR MSG_AMAX_B = _UxGT("Amax ") STR_B; + LSTR MSG_AMAX_C = _UxGT("Amax ") STR_C; + LSTR MSG_AMAX_I = _UxGT("Amax ") STR_I; + LSTR MSG_AMAX_J = _UxGT("Amax ") STR_J; + LSTR MSG_AMAX_K = _UxGT("Amax ") STR_K; + LSTR MSG_AMAX_E = _UxGT("Amax ") STR_E; LSTR MSG_AMAX_EN = _UxGT("Amax *"); LSTR MSG_A_RETRACT = _UxGT("A-retrakt"); LSTR MSG_A_TRAVEL = _UxGT("A-prejazd"); LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Max. frekvencia"); LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Min. posun"); LSTR MSG_STEPS_PER_MM = _UxGT("Kroky/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" krokov/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" krokov/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" krokov/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" krokov/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" krokov/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" krokov/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" krokov/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" krokov/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" krokov/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" krokov/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" krokov/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" krokov/mm"); LSTR MSG_E_STEPS = _UxGT("Ekrokov/mm"); LSTR MSG_EN_STEPS = _UxGT("*krokov/mm"); LSTR MSG_TEMPERATURE = _UxGT("Teplota"); @@ -528,9 +528,9 @@ namespace Language_sk { LSTR MSG_BABYSTEP_X = _UxGT("Babystep X"); LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y"); LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z"); - LSTR MSG_BABYSTEP_I = _UxGT("Babystep ") LCD_STR_I; - LSTR MSG_BABYSTEP_J = _UxGT("Babystep ") LCD_STR_J; - LSTR MSG_BABYSTEP_K = _UxGT("Babystep ") LCD_STR_K; + LSTR MSG_BABYSTEP_I = _UxGT("Babystep ") STR_I; + LSTR MSG_BABYSTEP_J = _UxGT("Babystep ") STR_J; + LSTR MSG_BABYSTEP_K = _UxGT("Babystep ") STR_K; LSTR MSG_BABYSTEP_TOTAL = _UxGT("Celkom"); LSTR MSG_ENDSTOP_ABORT = _UxGT("Zastavenie Endstop"); LSTR MSG_HEATING_FAILED_LCD = _UxGT("Chyba ohrevu"); @@ -625,12 +625,12 @@ namespace Language_sk { LSTR MSG_INFO_MAX_TEMP = _UxGT("Teplota max"); LSTR MSG_INFO_PSU = _UxGT("Nap. zdroj"); LSTR MSG_DRIVE_STRENGTH = _UxGT("Budenie motorov"); - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Motor %"); - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Motor %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Motor %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Motor %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Motor %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Motor %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" Motor %"); + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" Motor %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" Motor %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" Motor %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" Motor %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" Motor %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E Motor %"); LSTR MSG_ERROR_TMC = _UxGT("CHYBA KOMUNIKÁ. TMC"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Uložiť do EEPROM"); diff --git a/Marlin/src/lcd/language/language_sv.h b/Marlin/src/lcd/language/language_sv.h index d4c03d0d61..744fb7e3e6 100644 --- a/Marlin/src/lcd/language/language_sv.h +++ b/Marlin/src/lcd/language/language_sv.h @@ -298,45 +298,45 @@ namespace Language_sv { LSTR MSG_SELECT_E = _UxGT("Välj *"); LSTR MSG_ACC = _UxGT("Accel"); LSTR MSG_JERK = _UxGT("Ryck"); - LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-Ryck"); - LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-Ryck"); - LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-Ryck"); - LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-Ryck"); - LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-Ryck"); - LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-Ryck"); + LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT("-Ryck"); + LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT("-Ryck"); + LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT("-Ryck"); + LSTR MSG_VI_JERK = _UxGT("V") STR_I _UxGT("-Ryck"); + LSTR MSG_VJ_JERK = _UxGT("V") STR_J _UxGT("-Ryck"); + LSTR MSG_VK_JERK = _UxGT("V") STR_K _UxGT("-Ryck"); LSTR MSG_VE_JERK = _UxGT("Ve-Ryck"); LSTR MSG_JUNCTION_DEVIATION = _UxGT("Knutpunkt Avv"); LSTR MSG_VELOCITY = _UxGT("Hastighet"); - LSTR MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A; - LSTR MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("Vmax ") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("Vmax ") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("Vmax ") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E; + LSTR MSG_VMAX_A = _UxGT("Vmax ") STR_A; + LSTR MSG_VMAX_B = _UxGT("Vmax ") STR_B; + LSTR MSG_VMAX_C = _UxGT("Vmax ") STR_C; + LSTR MSG_VMAX_I = _UxGT("Vmax ") STR_I; + LSTR MSG_VMAX_J = _UxGT("Vmax ") STR_J; + LSTR MSG_VMAX_K = _UxGT("Vmax ") STR_K; + LSTR MSG_VMAX_E = _UxGT("Vmax ") STR_E; LSTR MSG_VMAX_EN = _UxGT("Vmax *"); LSTR MSG_VMIN = _UxGT("Vmin"); LSTR MSG_VTRAV_MIN = _UxGT("VTrav Min"); LSTR MSG_ACCELERATION = _UxGT("Acceleration"); - LSTR MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A; - LSTR MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("Amax ") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("Amax ") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("Amax ") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("Amax ") STR_A; + LSTR MSG_AMAX_B = _UxGT("Amax ") STR_B; + LSTR MSG_AMAX_C = _UxGT("Amax ") STR_C; + LSTR MSG_AMAX_I = _UxGT("Amax ") STR_I; + LSTR MSG_AMAX_J = _UxGT("Amax ") STR_J; + LSTR MSG_AMAX_K = _UxGT("Amax ") STR_K; + LSTR MSG_AMAX_E = _UxGT("Amax ") STR_E; LSTR MSG_AMAX_EN = _UxGT("Amax *"); LSTR MSG_A_RETRACT = _UxGT("A-Dra tillbaka"); LSTR MSG_A_TRAVEL = _UxGT("A-Färdas"); LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Frekvens max"); LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Flöde min"); LSTR MSG_STEPS_PER_MM = _UxGT("Steg/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" Steg/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" Steg/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" Steg/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" Steg/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" Steg/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" Steg/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" Steg/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" Steg/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" Steg/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" Steg/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" Steg/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" Steg/mm"); LSTR MSG_E_STEPS = _UxGT("E Steg/mm"); LSTR MSG_EN_STEPS = _UxGT("* Steg/mm"); LSTR MSG_TEMPERATURE = _UxGT("Temperatur"); @@ -541,12 +541,12 @@ namespace Language_sv { LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Temp"); LSTR MSG_INFO_PSU = _UxGT("PSU"); LSTR MSG_DRIVE_STRENGTH = _UxGT("Driv Styrka"); - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" Driver %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" Driver %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E Driver %"); LSTR MSG_ERROR_TMC = _UxGT("TMC KOPPLNINGSFEL"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Skriv"); diff --git a/Marlin/src/lcd/language/language_tr.h b/Marlin/src/lcd/language/language_tr.h index 447ea9d5bf..8a1864c966 100644 --- a/Marlin/src/lcd/language/language_tr.h +++ b/Marlin/src/lcd/language/language_tr.h @@ -261,43 +261,43 @@ namespace Language_tr { LSTR MSG_ACC = _UxGT("İvme"); LSTR MSG_JERK = _UxGT("Sarsım"); - LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-Sarsım"); - LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-Sarsım"); - LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-Sarsım"); - LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-Sarsım"); - LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-Sarsım"); - LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _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_VI_JERK = _UxGT("V") STR_I _UxGT("-Sarsım"); + LSTR MSG_VJ_JERK = _UxGT("V") STR_J _UxGT("-Sarsım"); + LSTR MSG_VK_JERK = _UxGT("V") STR_K _UxGT("-Sarsım"); LSTR MSG_VE_JERK = _UxGT("Ve-Sarsım"); LSTR MSG_JUNCTION_DEVIATION = _UxGT("Jonksiyon Sapması"); LSTR MSG_VELOCITY = _UxGT("Hız Vektörü"); - LSTR MSG_VMAX_A = _UxGT("HızVektör.max ") LCD_STR_A; - LSTR MSG_VMAX_B = _UxGT("HızVektör.max ") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("HızVektör.max ") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("HızVektör.max ") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("HızVektör.max ") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("HızVektör.max ") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("HızVektör.max ") LCD_STR_E; + 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_I = _UxGT("HızVektör.max ") STR_I; + LSTR MSG_VMAX_J = _UxGT("HızVektör.max ") STR_J; + LSTR MSG_VMAX_K = _UxGT("HızVektör.max ") STR_K; + LSTR MSG_VMAX_E = _UxGT("HızVektör.max ") STR_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_ACCELERATION = _UxGT("Ivme"); - LSTR MSG_AMAX_A = _UxGT("Max. ivme ") LCD_STR_A; - LSTR MSG_AMAX_B = _UxGT("Max. ivme ") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("Max. ivme ") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("Max. ivme ") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("Max. ivme ") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("Max. ivme ") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("Max. ivme ") LCD_STR_E; + 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_I = _UxGT("Max. ivme ") STR_I; + LSTR MSG_AMAX_J = _UxGT("Max. ivme ") STR_J; + LSTR MSG_AMAX_K = _UxGT("Max. ivme ") STR_K; + LSTR MSG_AMAX_E = _UxGT("Max. ivme ") STR_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_STEPS_PER_MM = _UxGT("Adım/mm"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" adım/mm"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" adım/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" adım/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" adım/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" adım/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" adım/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" adım/mm"); + LSTR MSG_B_STEPS = STR_B _UxGT(" adım/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" adım/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" adım/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" adım/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" adım/mm"); LSTR MSG_E_STEPS = _UxGT("E adım/mm"); LSTR MSG_EN_STEPS = _UxGT("* adım/mm"); LSTR MSG_TEMPERATURE = _UxGT("Sıcaklık"); @@ -474,12 +474,12 @@ namespace Language_tr { LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Sıc."); LSTR MSG_INFO_PSU = _UxGT("Güç Kaynağı"); LSTR MSG_DRIVE_STRENGTH = _UxGT("Sürücü Gücü"); - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Sürücü %"); - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Sürücü %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Sürücü %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Sürücü %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Sürücü %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Sürücü %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" Sürücü %"); + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" Sürücü %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" Sürücü %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" Sürücü %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" Sürücü %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" Sürücü %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E Sürücü %"); LSTR MSG_ERROR_TMC = _UxGT("TMC BAĞLANTI HATASI"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Yaz"); diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h index 028e48bb41..7afc2e031c 100644 --- a/Marlin/src/lcd/language/language_uk.h +++ b/Marlin/src/lcd/language/language_uk.h @@ -86,17 +86,17 @@ namespace Language_uk { LSTR MSG_HOME_OFFSET_X = _UxGT("Зміщення дому X"); LSTR MSG_HOME_OFFSET_Y = _UxGT("Зміщення дому Y"); LSTR MSG_HOME_OFFSET_Z = _UxGT("Зміщення дому Z"); - LSTR MSG_HOME_OFFSET_I = _UxGT("Зміщення дому ") LCD_STR_I; - LSTR MSG_HOME_OFFSET_J = _UxGT("Зміщення дому ") LCD_STR_J; - LSTR MSG_HOME_OFFSET_K = _UxGT("Зміщення дому ") LCD_STR_K; + LSTR MSG_HOME_OFFSET_I = _UxGT("Зміщення дому ") STR_I; + LSTR MSG_HOME_OFFSET_J = _UxGT("Зміщення дому ") STR_J; + LSTR MSG_HOME_OFFSET_K = _UxGT("Зміщення дому ") STR_K; #else LSTR MSG_SET_HOME_OFFSETS = _UxGT("Встан. зміщ. дому"); LSTR MSG_HOME_OFFSET_X = _UxGT("Зміщ. дому X"); LSTR MSG_HOME_OFFSET_Y = _UxGT("Зміщ. дому Y"); LSTR MSG_HOME_OFFSET_Z = _UxGT("Зміщ. дому Z"); - LSTR MSG_HOME_OFFSET_I = _UxGT("Зміщ. дому ") LCD_STR_I; - LSTR MSG_HOME_OFFSET_J = _UxGT("Зміщ. дому ") LCD_STR_J; - LSTR MSG_HOME_OFFSET_K = _UxGT("Зміщ. дому ") LCD_STR_K; + LSTR MSG_HOME_OFFSET_I = _UxGT("Зміщ. дому ") STR_I; + LSTR MSG_HOME_OFFSET_J = _UxGT("Зміщ. дому ") STR_J; + LSTR MSG_HOME_OFFSET_K = _UxGT("Зміщ. дому ") STR_K; #endif LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Зміщення прийняті"); LSTR MSG_SET_ORIGIN = _UxGT("Встановити нуль"); @@ -340,9 +340,9 @@ namespace Language_uk { LSTR MSG_MOVE_X = _UxGT("Рух по X"); LSTR MSG_MOVE_Y = _UxGT("Рух по Y"); LSTR MSG_MOVE_Z = _UxGT("Рух по Z"); - LSTR MSG_MOVE_I = _UxGT("Рух по ") LCD_STR_I; - LSTR MSG_MOVE_J = _UxGT("Рух по ") LCD_STR_J; - LSTR MSG_MOVE_K = _UxGT("Рух по ") LCD_STR_K; + LSTR MSG_MOVE_I = _UxGT("Рух по ") STR_I; + LSTR MSG_MOVE_J = _UxGT("Рух по ") STR_J; + LSTR MSG_MOVE_K = _UxGT("Рух по ") STR_K; LSTR MSG_MOVE_E = _UxGT("Екструдер"); LSTR MSG_MOVE_EN = _UxGT("Екструдер *"); LSTR MSG_HOTEND_TOO_COLD = _UxGT("Сопло дуже холодне"); @@ -404,12 +404,12 @@ namespace Language_uk { LSTR MSG_SELECT_E = _UxGT("Вибрати *"); LSTR MSG_ACC = _UxGT("Прискорорення"); LSTR MSG_JERK = _UxGT("Ривок"); - LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-ривок"); - LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-ривок"); - LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-ривок"); - LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-ривок"); - LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-ривок"); - LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-ривок"); + LSTR MSG_VA_JERK = _UxGT("V") STR_A _UxGT("-ривок"); + LSTR MSG_VB_JERK = _UxGT("V") STR_B _UxGT("-ривок"); + LSTR MSG_VC_JERK = _UxGT("V") STR_C _UxGT("-ривок"); + LSTR MSG_VI_JERK = _UxGT("V") STR_I _UxGT("-ривок"); + LSTR MSG_VJ_JERK = _UxGT("V") STR_J _UxGT("-ривок"); + LSTR MSG_VK_JERK = _UxGT("V") STR_K _UxGT("-ривок"); LSTR MSG_VE_JERK = _UxGT("Ve-ривок"); #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 LSTR MSG_JUNCTION_DEVIATION = _UxGT("Відхилення вузла"); @@ -417,13 +417,13 @@ namespace Language_uk { LSTR MSG_JUNCTION_DEVIATION = _UxGT("Відхил.вузла"); #endif LSTR MSG_VELOCITY = _UxGT("Швидкість, мм/с"); - LSTR MSG_VMAX_A = _UxGT("Швидк.макс ") LCD_STR_A; - LSTR MSG_VMAX_B = _UxGT("Швидк.макс ") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("Швидк.макс ") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("Швидк.макс ") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("Швидк.макс ") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("Швидк.макс ") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("Швидк.макс ") LCD_STR_E; + LSTR MSG_VMAX_A = _UxGT("Швидк.макс ") STR_A; + LSTR MSG_VMAX_B = _UxGT("Швидк.макс ") STR_B; + LSTR MSG_VMAX_C = _UxGT("Швидк.макс ") STR_C; + LSTR MSG_VMAX_I = _UxGT("Швидк.макс ") STR_I; + LSTR MSG_VMAX_J = _UxGT("Швидк.макс ") STR_J; + LSTR MSG_VMAX_K = _UxGT("Швидк.макс ") STR_K; + LSTR MSG_VMAX_E = _UxGT("Швидк.макс ") STR_E; LSTR MSG_VMAX_EN = _UxGT("Швидк.макс *"); LSTR MSG_VMIN = _UxGT("Швидк. мін"); #if LCD_WIDTH > 21 || HAS_DWIN_E3V2 @@ -432,25 +432,25 @@ namespace Language_uk { LSTR MSG_VTRAV_MIN = _UxGT("Переміщ. мін"); #endif LSTR MSG_ACCELERATION = _UxGT("Прискорення, мм/с2"); - LSTR MSG_AMAX_A = _UxGT("Приск.макс ") LCD_STR_A; - LSTR MSG_AMAX_B = _UxGT("Приск.макс ") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("Приск.макс ") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("Приск.макс ") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("Приск.макс ") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("Приск.макс ") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("Приск.макс ") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("Приск.макс ") STR_A; + LSTR MSG_AMAX_B = _UxGT("Приск.макс ") STR_B; + LSTR MSG_AMAX_C = _UxGT("Приск.макс ") STR_C; + LSTR MSG_AMAX_I = _UxGT("Приск.макс ") STR_I; + LSTR MSG_AMAX_J = _UxGT("Приск.макс ") STR_J; + LSTR MSG_AMAX_K = _UxGT("Приск.макс ") STR_K; + LSTR MSG_AMAX_E = _UxGT("Приск.макс ") STR_E; LSTR MSG_AMAX_EN = _UxGT("Приск.макс *"); LSTR MSG_A_RETRACT = _UxGT("Приск.втягув."); LSTR MSG_A_TRAVEL = _UxGT("Приск.переміщ."); LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Частота макс."); LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Подача мін."); LSTR MSG_STEPS_PER_MM = _UxGT("Кроків на мм"); - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" кроків/мм"); - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" кроків/мм"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" кроків/мм"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" кроків/мм"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" кроків/мм"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" кроків/мм"); + LSTR MSG_A_STEPS = STR_A _UxGT(" кроків/мм"); + LSTR MSG_B_STEPS = STR_B _UxGT(" кроків/мм"); + LSTR MSG_C_STEPS = STR_C _UxGT(" кроків/мм"); + LSTR MSG_I_STEPS = STR_I _UxGT(" кроків/мм"); + LSTR MSG_J_STEPS = STR_J _UxGT(" кроків/мм"); + LSTR MSG_K_STEPS = STR_K _UxGT(" кроків/мм"); LSTR MSG_E_STEPS = _UxGT("E кроків/мм"); LSTR MSG_EN_STEPS = _UxGT("* кроків/мм"); LSTR MSG_TEMPERATURE = _UxGT("Температура"); @@ -608,9 +608,9 @@ namespace Language_uk { LSTR MSG_BABYSTEP_X = _UxGT("Мікрокрок X"); LSTR MSG_BABYSTEP_Y = _UxGT("Мікрокрок Y"); LSTR MSG_BABYSTEP_Z = _UxGT("Мікрокрок Z"); - LSTR MSG_BABYSTEP_I = _UxGT("Мікрокрок ") LCD_STR_I; - LSTR MSG_BABYSTEP_J = _UxGT("Мікрокрок ") LCD_STR_J; - LSTR MSG_BABYSTEP_K = _UxGT("Мікрокрок ") LCD_STR_K; + LSTR MSG_BABYSTEP_I = _UxGT("Мікрокрок ") STR_I; + LSTR MSG_BABYSTEP_J = _UxGT("Мікрокрок ") STR_J; + LSTR MSG_BABYSTEP_K = _UxGT("Мікрокрок ") STR_K; LSTR MSG_BABYSTEP_TOTAL = _UxGT("Сумарно"); LSTR MSG_ENDSTOP_ABORT = _UxGT("Кінцевик спрацював"); LSTR MSG_HEATING_FAILED_LCD = _UxGT("Збій нагріву"); @@ -716,12 +716,12 @@ namespace Language_uk { LSTR MSG_INFO_MAX_TEMP = _UxGT("Макс. ") LCD_STR_THERMOMETER; LSTR MSG_INFO_PSU = _UxGT("Блок жив-ня"); LSTR MSG_DRIVE_STRENGTH = _UxGT("Сила мотору"); - LSTR MSG_DAC_PERCENT_A = _UxGT("Драйвер ") LCD_STR_A _UxGT(", %"); - LSTR MSG_DAC_PERCENT_B = _UxGT("Драйвер ") LCD_STR_B _UxGT(", %"); - LSTR MSG_DAC_PERCENT_C = _UxGT("Драйвер ") LCD_STR_C _UxGT(", %"); - LSTR MSG_DAC_PERCENT_I = _UxGT("Драйвер ") LCD_STR_I _UxGT(", %"); - LSTR MSG_DAC_PERCENT_J = _UxGT("Драйвер ") LCD_STR_J _UxGT(", %"); - LSTR MSG_DAC_PERCENT_K = _UxGT("Драйвер ") LCD_STR_K _UxGT(", %"); + LSTR MSG_DAC_PERCENT_A = _UxGT("Драйвер ") STR_A _UxGT(", %"); + LSTR MSG_DAC_PERCENT_B = _UxGT("Драйвер ") STR_B _UxGT(", %"); + LSTR MSG_DAC_PERCENT_C = _UxGT("Драйвер ") STR_C _UxGT(", %"); + LSTR MSG_DAC_PERCENT_I = _UxGT("Драйвер ") STR_I _UxGT(", %"); + LSTR MSG_DAC_PERCENT_J = _UxGT("Драйвер ") STR_J _UxGT(", %"); + LSTR MSG_DAC_PERCENT_K = _UxGT("Драйвер ") STR_K _UxGT(", %"); LSTR MSG_DAC_PERCENT_E = _UxGT("Драйвер E, %"); LSTR MSG_ERROR_TMC = _UxGT("ЗБІЙ ЗВ'ЯЗКУ З TMC"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Запис ЦАП у EEPROM"); diff --git a/Marlin/src/lcd/language/language_vi.h b/Marlin/src/lcd/language/language_vi.h index a419ddee56..879ccdeae7 100644 --- a/Marlin/src/lcd/language/language_vi.h +++ b/Marlin/src/lcd/language/language_vi.h @@ -228,43 +228,43 @@ namespace Language_vi { LSTR MSG_SELECT_E = _UxGT("Lựa *"); LSTR MSG_ACC = _UxGT("Tăng Tốc"); LSTR MSG_JERK = _UxGT("Giật"); - LSTR MSG_VA_JERK = _UxGT("Giật-V") LCD_STR_A; - LSTR MSG_VB_JERK = _UxGT("Giật-V") LCD_STR_B; - LSTR MSG_VC_JERK = _UxGT("Giật-V") LCD_STR_C; - LSTR MSG_VI_JERK = _UxGT("Giật-V") LCD_STR_I; - LSTR MSG_VJ_JERK = _UxGT("Giật-V") LCD_STR_J; - LSTR MSG_VK_JERK = _UxGT("Giật-V") LCD_STR_K; + LSTR MSG_VA_JERK = _UxGT("Giật-V") STR_A; + LSTR MSG_VB_JERK = _UxGT("Giật-V") STR_B; + LSTR MSG_VC_JERK = _UxGT("Giật-V") STR_C; + LSTR MSG_VI_JERK = _UxGT("Giật-V") STR_I; + LSTR MSG_VJ_JERK = _UxGT("Giật-V") STR_J; + LSTR MSG_VK_JERK = _UxGT("Giật-V") STR_K; LSTR MSG_VE_JERK = _UxGT("Giật-Ve"); LSTR MSG_JUNCTION_DEVIATION = _UxGT("Độ Lệch Chỗ Giao"); // Junction Dev LSTR MSG_VELOCITY = _UxGT("Vận tốc"); // velocity - LSTR MSG_VMAX_A = _UxGT("Vđa") LCD_STR_A; // Vmax - LSTR MSG_VMAX_B = _UxGT("Vđa") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("Vđa") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("Vđa") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("Vđa") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("Vđa") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("Vđa") LCD_STR_E; + LSTR MSG_VMAX_A = _UxGT("Vđa") STR_A; // Vmax + LSTR MSG_VMAX_B = _UxGT("Vđa") STR_B; + LSTR MSG_VMAX_C = _UxGT("Vđa") STR_C; + LSTR MSG_VMAX_I = _UxGT("Vđa") STR_I; + LSTR MSG_VMAX_J = _UxGT("Vđa") STR_J; + LSTR MSG_VMAX_K = _UxGT("Vđa") STR_K; + LSTR MSG_VMAX_E = _UxGT("Vđa") STR_E; LSTR MSG_VMAX_EN = _UxGT("Vđa *"); LSTR MSG_VMIN = _UxGT("Vthiểu"); // Vmin LSTR MSG_VTRAV_MIN = _UxGT("Vchuyển thiểu"); // VTrav min LSTR MSG_ACCELERATION = _UxGT("Sự tăng tốc"); // Acceleration - LSTR MSG_AMAX_A = _UxGT("Tăng tốc ca") LCD_STR_A; // Amax - LSTR MSG_AMAX_B = _UxGT("Tăng tốc ca") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("Tăng tốc ca") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("Tăng tốc ca") LCD_STR_I; // Amax - LSTR MSG_AMAX_J = _UxGT("Tăng tốc ca") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("Tăng tốc ca") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("Tăng tốc ca") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("Tăng tốc ca") STR_A; // Amax + LSTR MSG_AMAX_B = _UxGT("Tăng tốc ca") STR_B; + LSTR MSG_AMAX_C = _UxGT("Tăng tốc ca") STR_C; + LSTR MSG_AMAX_I = _UxGT("Tăng tốc ca") STR_I; // Amax + LSTR MSG_AMAX_J = _UxGT("Tăng tốc ca") STR_J; + LSTR MSG_AMAX_K = _UxGT("Tăng tốc ca") STR_K; + LSTR MSG_AMAX_E = _UxGT("Tăng tốc ca") STR_E; LSTR MSG_AMAX_EN = _UxGT("Tăng tốc ca *"); LSTR MSG_A_RETRACT = _UxGT("TT-Rút"); // A-retract LSTR MSG_A_TRAVEL = _UxGT("TT-Chuyển"); // A-travel LSTR MSG_STEPS_PER_MM = _UxGT("Bước/mm"); // Steps - LSTR MSG_A_STEPS = _UxGT("Bước") LCD_STR_A _UxGT("/mm"); // Steps/mm - LSTR MSG_B_STEPS = _UxGT("Bước") LCD_STR_B _UxGT("/mm"); - LSTR MSG_C_STEPS = _UxGT("Bước") LCD_STR_C _UxGT("/mm"); - LSTR MSG_I_STEPS = _UxGT("Bước") LCD_STR_I _UxGT("/mm"); // Steps/mm - LSTR MSG_J_STEPS = _UxGT("Bước") LCD_STR_J _UxGT("/mm"); - LSTR MSG_K_STEPS = _UxGT("Bước") LCD_STR_K _UxGT("/mm"); + LSTR MSG_A_STEPS = _UxGT("Bước") STR_A _UxGT("/mm"); // Steps/mm + LSTR MSG_B_STEPS = _UxGT("Bước") STR_B _UxGT("/mm"); + LSTR MSG_C_STEPS = _UxGT("Bước") STR_C _UxGT("/mm"); + LSTR MSG_I_STEPS = _UxGT("Bước") STR_I _UxGT("/mm"); // Steps/mm + LSTR MSG_J_STEPS = _UxGT("Bước") STR_J _UxGT("/mm"); + LSTR MSG_K_STEPS = _UxGT("Bước") STR_K _UxGT("/mm"); LSTR MSG_E_STEPS = _UxGT("BướcE/mm"); LSTR MSG_EN_STEPS = _UxGT("Bước */mm"); LSTR MSG_TEMPERATURE = _UxGT("Nhiệt độ"); // Temperature @@ -400,12 +400,12 @@ namespace Language_vi { LSTR MSG_INFO_MAX_TEMP = _UxGT("Nhiệt độ tối đa"); // Max temp LSTR MSG_INFO_PSU = _UxGT("Bộ nguồn"); // PSU LSTR MSG_DRIVE_STRENGTH = _UxGT("Sức mạnh ổ đĩa"); // Drive Strength - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" % trình điều khiển"); // X Driver % - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" % trình điều khiển"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" % trình điều khiển"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" % trình điều khiển"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" % trình điều khiển"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" % trình điều khiển"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" % trình điều khiển"); // X Driver % + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" % trình điều khiển"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" % trình điều khiển"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" % trình điều khiển"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" % trình điều khiển"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" % trình điều khiển"); LSTR MSG_DAC_PERCENT_E = _UxGT("E % trình điều khiển"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Ghi DAC EEPROM"); // DAC EEPROM Write LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("In tạm dừng"); // PRINT PAUSED diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h index e641f235e6..7f0ca874d6 100644 --- a/Marlin/src/lcd/language/language_zh_CN.h +++ b/Marlin/src/lcd/language/language_zh_CN.h @@ -267,45 +267,45 @@ namespace Language_zh_CN { LSTR MSG_SELECT_E = _UxGT("选择 *"); LSTR MSG_ACC = _UxGT("加速度"); // "Accel" acceleration LSTR MSG_JERK = _UxGT("抖动速率"); // "Jerk" - LSTR MSG_VA_JERK = _UxGT("轴抖动速率") LCD_STR_A; // "Va-jerk" - LSTR MSG_VB_JERK = _UxGT("轴抖动速率") LCD_STR_B; // "Vb-jerk" - LSTR MSG_VC_JERK = _UxGT("轴抖动速率") LCD_STR_C; // "Vc-jerk" - LSTR MSG_VI_JERK = _UxGT("轴抖动速率") LCD_STR_I; // "Vi-jerk" - LSTR MSG_VJ_JERK = _UxGT("轴抖动速率") LCD_STR_J; // "Vj-jerk" - LSTR MSG_VK_JERK = _UxGT("轴抖动速率") LCD_STR_K; // "Vk-jerk" + LSTR MSG_VA_JERK = _UxGT("轴抖动速率") STR_A; // "Va-jerk" + LSTR MSG_VB_JERK = _UxGT("轴抖动速率") STR_B; // "Vb-jerk" + LSTR MSG_VC_JERK = _UxGT("轴抖动速率") STR_C; // "Vc-jerk" + LSTR MSG_VI_JERK = _UxGT("轴抖动速率") STR_I; // "Vi-jerk" + LSTR MSG_VJ_JERK = _UxGT("轴抖动速率") STR_J; // "Vj-jerk" + LSTR MSG_VK_JERK = _UxGT("轴抖动速率") STR_K; // "Vk-jerk" LSTR MSG_VE_JERK = _UxGT("挤出机抖动速率"); // "Ve-jerk" LSTR MSG_JUNCTION_DEVIATION = _UxGT("接点差"); LSTR MSG_VELOCITY = _UxGT("速度"); // "Velocity" - LSTR MSG_VMAX_A = _UxGT("最大进料速率") LCD_STR_A; // "Vmax " max_feedrate_mm_s - LSTR MSG_VMAX_B = _UxGT("最大进料速率") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("最大进料速率") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("最大进料速率") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("最大进料速率") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("最大进料速率") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("最大进料速率") LCD_STR_E; + LSTR MSG_VMAX_A = _UxGT("最大进料速率") STR_A; // "Vmax " max_feedrate_mm_s + LSTR MSG_VMAX_B = _UxGT("最大进料速率") STR_B; + LSTR MSG_VMAX_C = _UxGT("最大进料速率") STR_C; + LSTR MSG_VMAX_I = _UxGT("最大进料速率") STR_I; + LSTR MSG_VMAX_J = _UxGT("最大进料速率") STR_J; + LSTR MSG_VMAX_K = _UxGT("最大进料速率") STR_K; + LSTR MSG_VMAX_E = _UxGT("最大进料速率") STR_E; LSTR MSG_VMAX_EN = _UxGT("最大进料速率 *"); LSTR MSG_VMIN = _UxGT("最小进料速率"); // "Vmin" min_feedrate_mm_s LSTR MSG_VTRAV_MIN = _UxGT("最小移动速率"); // "VTrav min" min_travel_feedrate_mm_s, (target) speed of the move LSTR MSG_ACCELERATION = _UxGT("加速度"); // "Acceleration" - LSTR MSG_AMAX_A = _UxGT("最大打印加速度") LCD_STR_A; // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves - LSTR MSG_AMAX_B = _UxGT("最大打印加速度") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("最大打印加速度") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("最大打印加速度") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("最大打印加速度") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("最大打印加速度") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("最大打印加速度") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("最大打印加速度") STR_A; // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves + LSTR MSG_AMAX_B = _UxGT("最大打印加速度") STR_B; + LSTR MSG_AMAX_C = _UxGT("最大打印加速度") STR_C; + LSTR MSG_AMAX_I = _UxGT("最大打印加速度") STR_I; + LSTR MSG_AMAX_J = _UxGT("最大打印加速度") STR_J; + LSTR MSG_AMAX_K = _UxGT("最大打印加速度") STR_K; + LSTR MSG_AMAX_E = _UxGT("最大打印加速度") STR_E; LSTR MSG_AMAX_EN = _UxGT("最大打印加速度 *"); LSTR MSG_A_RETRACT = _UxGT("收进加速度"); // "A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts LSTR MSG_A_TRAVEL = _UxGT("非打印移动加速度"); // "A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("频率最大"); LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("进给速度"); LSTR MSG_STEPS_PER_MM = _UxGT("轴步数/mm"); // "Steps/mm" axis_steps_per_mm, axis steps-per-unit G92 - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" 步数/mm"); // "Asteps/mm" - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" 步数/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" 步数/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" 步数/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" 步数/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" 步数/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" 步数/mm"); // "Asteps/mm" + LSTR MSG_B_STEPS = STR_B _UxGT(" 步数/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" 步数/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" 步数/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" 步数/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" 步数/mm"); LSTR MSG_E_STEPS = _UxGT("E 步数/mm"); // "Esteps/mm" LSTR MSG_EN_STEPS = _UxGT("* 步数/mm"); LSTR MSG_TEMPERATURE = _UxGT("温度"); // "Temperature" @@ -507,12 +507,12 @@ namespace Language_zh_CN { LSTR MSG_INFO_MAX_TEMP = _UxGT("最高温度"); // "Max Temp" LSTR MSG_INFO_PSU = _UxGT("电源供应"); // "Power Supply" LSTR MSG_DRIVE_STRENGTH = _UxGT("驱动力度"); // "Drive Strength" - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" 驱动 %"); // "X Driver %" - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" 驱动 %"); - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" 驱动 %"); - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" 驱动 %"); - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" 驱动 %"); - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" 驱动 %"); + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" 驱动 %"); // "X Driver %" + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" 驱动 %"); + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" 驱动 %"); + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" 驱动 %"); + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" 驱动 %"); + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" 驱动 %"); LSTR MSG_DAC_PERCENT_E = _UxGT("E 驱动 %"); // "E Driver %" LSTR MSG_ERROR_TMC = _UxGT("TMC 连接错误"); LSTR MSG_DAC_EEPROM_WRITE = _UxGT("保存驱动设置"); // "DAC EEPROM Write" diff --git a/Marlin/src/lcd/language/language_zh_TW.h b/Marlin/src/lcd/language/language_zh_TW.h index f168679e4a..6c91cc1fec 100644 --- a/Marlin/src/lcd/language/language_zh_TW.h +++ b/Marlin/src/lcd/language/language_zh_TW.h @@ -252,43 +252,43 @@ namespace Language_zh_TW { LSTR MSG_SELECT_E = _UxGT("選擇 *"); LSTR MSG_ACC = _UxGT("加速度"); // "Accel" acceleration LSTR MSG_JERK = _UxGT("抖動速率"); // "Jerk" - LSTR MSG_VA_JERK = _UxGT("軸抖動速率") LCD_STR_A; // "Va-jerk" - LSTR MSG_VB_JERK = _UxGT("軸抖動速率") LCD_STR_B; - LSTR MSG_VC_JERK = _UxGT("軸抖動速率") LCD_STR_C; - LSTR MSG_VI_JERK = _UxGT("軸抖動速率") LCD_STR_I; - LSTR MSG_VJ_JERK = _UxGT("軸抖動速率") LCD_STR_J; - LSTR MSG_VK_JERK = _UxGT("軸抖動速率") LCD_STR_K; + LSTR MSG_VA_JERK = _UxGT("軸抖動速率") STR_A; // "Va-jerk" + LSTR MSG_VB_JERK = _UxGT("軸抖動速率") STR_B; + LSTR MSG_VC_JERK = _UxGT("軸抖動速率") STR_C; + LSTR MSG_VI_JERK = _UxGT("軸抖動速率") STR_I; + LSTR MSG_VJ_JERK = _UxGT("軸抖動速率") STR_J; + LSTR MSG_VK_JERK = _UxGT("軸抖動速率") STR_K; LSTR MSG_VE_JERK = _UxGT("擠出機抖動速率"); LSTR MSG_VELOCITY = _UxGT("速度"); // "Velocity" - LSTR MSG_VMAX_A = _UxGT("最大進料速率") LCD_STR_A; // "Vmax " max_feedrate_mm_s - LSTR MSG_VMAX_B = _UxGT("最大進料速率") LCD_STR_B; - LSTR MSG_VMAX_C = _UxGT("最大進料速率") LCD_STR_C; - LSTR MSG_VMAX_I = _UxGT("最大進料速率") LCD_STR_I; - LSTR MSG_VMAX_J = _UxGT("最大進料速率") LCD_STR_J; - LSTR MSG_VMAX_K = _UxGT("最大進料速率") LCD_STR_K; - LSTR MSG_VMAX_E = _UxGT("最大進料速率") LCD_STR_E; + LSTR MSG_VMAX_A = _UxGT("最大進料速率") STR_A; // "Vmax " max_feedrate_mm_s + LSTR MSG_VMAX_B = _UxGT("最大進料速率") STR_B; + LSTR MSG_VMAX_C = _UxGT("最大進料速率") STR_C; + LSTR MSG_VMAX_I = _UxGT("最大進料速率") STR_I; + LSTR MSG_VMAX_J = _UxGT("最大進料速率") STR_J; + LSTR MSG_VMAX_K = _UxGT("最大進料速率") STR_K; + LSTR MSG_VMAX_E = _UxGT("最大進料速率") STR_E; LSTR MSG_VMAX_EN = _UxGT("最大進料速率 *"); // "Vmax " max_feedrate_mm_s LSTR MSG_VMIN = _UxGT("最小進料速率"); // "Vmin" min_feedrate_mm_s LSTR MSG_VTRAV_MIN = _UxGT("最小移動速率"); // "VTrav min" min_travel_feedrate_mm_s, (target) speed of the move LSTR MSG_ACCELERATION = _UxGT("加速度"); // "Acceleration" - LSTR MSG_AMAX_A = _UxGT("最大列印加速度") LCD_STR_A; // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves - LSTR MSG_AMAX_B = _UxGT("最大列印加速度") LCD_STR_B; - LSTR MSG_AMAX_C = _UxGT("最大列印加速度") LCD_STR_C; - LSTR MSG_AMAX_I = _UxGT("最大列印加速度") LCD_STR_I; - LSTR MSG_AMAX_J = _UxGT("最大列印加速度") LCD_STR_J; - LSTR MSG_AMAX_K = _UxGT("最大列印加速度") LCD_STR_K; - LSTR MSG_AMAX_E = _UxGT("最大列印加速度") LCD_STR_E; + LSTR MSG_AMAX_A = _UxGT("最大列印加速度") STR_A; // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves + LSTR MSG_AMAX_B = _UxGT("最大列印加速度") STR_B; + LSTR MSG_AMAX_C = _UxGT("最大列印加速度") STR_C; + LSTR MSG_AMAX_I = _UxGT("最大列印加速度") STR_I; + LSTR MSG_AMAX_J = _UxGT("最大列印加速度") STR_J; + LSTR MSG_AMAX_K = _UxGT("最大列印加速度") STR_K; + LSTR MSG_AMAX_E = _UxGT("最大列印加速度") STR_E; LSTR MSG_AMAX_EN = _UxGT("最大列印加速度 *"); // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves LSTR MSG_A_RETRACT = _UxGT("回縮加速度"); // "A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts LSTR MSG_A_TRAVEL = _UxGT("非列印移動加速度"); // "A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves LSTR MSG_STEPS_PER_MM = _UxGT("軸步數/mm"); // "Steps/mm" axis_steps_per_mm, axis steps-per-unit G92 - LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" 軸步數/mm"); // "Asteps/mm" axis_steps_per_mm, axis steps-per-unit G92 - LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" 軸步數/mm"); - LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" 軸步數/mm"); - LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" 軸步數/mm"); - LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" 軸步數/mm"); - LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" 軸步數/mm"); + LSTR MSG_A_STEPS = STR_A _UxGT(" 軸步數/mm"); // "Asteps/mm" axis_steps_per_mm, axis steps-per-unit G92 + LSTR MSG_B_STEPS = STR_B _UxGT(" 軸步數/mm"); + LSTR MSG_C_STEPS = STR_C _UxGT(" 軸步數/mm"); + LSTR MSG_I_STEPS = STR_I _UxGT(" 軸步數/mm"); + LSTR MSG_J_STEPS = STR_J _UxGT(" 軸步數/mm"); + LSTR MSG_K_STEPS = STR_K _UxGT(" 軸步數/mm"); LSTR MSG_E_STEPS = _UxGT("擠出機步數/mm"); // "Esteps/mm" LSTR MSG_EN_STEPS = _UxGT("擠出機~步數/mm"); LSTR MSG_TEMPERATURE = _UxGT("溫度"); // "Temperature" @@ -455,12 +455,12 @@ namespace Language_zh_TW { LSTR MSG_INFO_MAX_TEMP = _UxGT("最高溫度"); // "Max Temp" LSTR MSG_INFO_PSU = _UxGT("電源供應"); // "Power Supply" LSTR MSG_DRIVE_STRENGTH = _UxGT("驅動力度"); // "Drive Strength" - LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" 驅動 %"); // X Driver % - LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" 驅動 %"); // Y Driver % - LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" 驅動 %"); // Z Driver % - LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" 驅動 %"); // I Driver % - LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" 驅動 %"); // J Driver % - LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" 驅動 %"); // K Driver % + LSTR MSG_DAC_PERCENT_A = STR_A _UxGT(" 驅動 %"); // X Driver % + LSTR MSG_DAC_PERCENT_B = STR_B _UxGT(" 驅動 %"); // Y Driver % + LSTR MSG_DAC_PERCENT_C = STR_C _UxGT(" 驅動 %"); // Z Driver % + LSTR MSG_DAC_PERCENT_I = STR_I _UxGT(" 驅動 %"); // I Driver % + LSTR MSG_DAC_PERCENT_J = STR_J _UxGT(" 驅動 %"); // J Driver % + LSTR MSG_DAC_PERCENT_K = STR_K _UxGT(" 驅動 %"); // K Driver % LSTR MSG_DAC_PERCENT_E = _UxGT("E 驅動 %"); //E Driver % LSTR MSG_ERROR_TMC = _UxGT("TMC連接錯誤"); // "TMC CONNECTION ERROR" LSTR MSG_DAC_EEPROM_WRITE = _UxGT("保存驅動設置"); // "DAC EEPROM Write" diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp index a5b4455d6f..5a1cedfbac 100644 --- a/Marlin/src/lcd/menu/menu_advanced.cpp +++ b/Marlin/src/lcd/menu/menu_advanced.cpp @@ -84,10 +84,10 @@ void menu_backlash(); BACK_ITEM(MSG_ADVANCED_SETTINGS); #define EDIT_CURRENT_PWM(LABEL,I) EDIT_ITEM_P(long5, PSTR(LABEL), &stepper.motor_current_setting[I], 100, 2000, stepper.refresh_motor_power) #if ANY_PIN(MOTOR_CURRENT_PWM_XY, MOTOR_CURRENT_PWM_X, MOTOR_CURRENT_PWM_Y) - EDIT_CURRENT_PWM(STR_X STR_Y, 0); + EDIT_CURRENT_PWM(STR_A STR_B, 0); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_Z) - EDIT_CURRENT_PWM(STR_Z, 1); + EDIT_CURRENT_PWM(STR_C, 1); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_E) EDIT_CURRENT_PWM(STR_E, 2); diff --git a/Marlin/src/lcd/menu/menu_info.cpp b/Marlin/src/lcd/menu/menu_info.cpp index 388aebb744..11027e7f95 100644 --- a/Marlin/src/lcd/menu/menu_info.cpp +++ b/Marlin/src/lcd/menu/menu_info.cpp @@ -103,7 +103,7 @@ void menu_info_thermistors() { #if HAS_EXTRUDERS #define THERMISTOR_ID TEMP_SENSOR_0 #include "../thermistornames.h" - STATIC_ITEM_P(PSTR(LCD_STR_E0 ": " THERMISTOR_NAME), SS_INVERT); + STATIC_ITEM_P(PSTR(STR_E0 ": " THERMISTOR_NAME), SS_INVERT); PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_0_MINTEMP), SS_LEFT); PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_0_MAXTEMP), SS_LEFT); STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); @@ -113,7 +113,7 @@ void menu_info_thermistors() { #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_1 #include "../thermistornames.h" - STATIC_ITEM_P(PSTR(LCD_STR_E1 ": " THERMISTOR_NAME), SS_INVERT); + STATIC_ITEM_P(PSTR(STR_E1 ": " THERMISTOR_NAME), SS_INVERT); PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_1_MINTEMP), SS_LEFT); PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_1_MAXTEMP), SS_LEFT); STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); @@ -123,7 +123,7 @@ void menu_info_thermistors() { #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_2 #include "../thermistornames.h" - STATIC_ITEM_P(PSTR(LCD_STR_E2 ": " THERMISTOR_NAME), SS_INVERT); + STATIC_ITEM_P(PSTR(STR_E2 ": " THERMISTOR_NAME), SS_INVERT); PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_2_MINTEMP), SS_LEFT); PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_2_MAXTEMP), SS_LEFT); STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); @@ -133,7 +133,7 @@ void menu_info_thermistors() { #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_3 #include "../thermistornames.h" - STATIC_ITEM_P(PSTR(LCD_STR_E3 ": " THERMISTOR_NAME), SS_INVERT); + STATIC_ITEM_P(PSTR(STR_E3 ": " THERMISTOR_NAME), SS_INVERT); PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_3_MINTEMP), SS_LEFT); PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_3_MAXTEMP), SS_LEFT); STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); @@ -143,7 +143,7 @@ void menu_info_thermistors() { #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_4 #include "../thermistornames.h" - STATIC_ITEM_P(PSTR(LCD_STR_E4 ": " THERMISTOR_NAME), SS_INVERT); + STATIC_ITEM_P(PSTR(STR_E4 ": " THERMISTOR_NAME), SS_INVERT); PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_4_MINTEMP), SS_LEFT); PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_4_MAXTEMP), SS_LEFT); STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); @@ -153,7 +153,7 @@ void menu_info_thermistors() { #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_5 #include "../thermistornames.h" - STATIC_ITEM_P(PSTR(LCD_STR_E5 ": " THERMISTOR_NAME), SS_INVERT); + STATIC_ITEM_P(PSTR(STR_E5 ": " THERMISTOR_NAME), SS_INVERT); PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_5_MINTEMP), SS_LEFT); PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_5_MAXTEMP), SS_LEFT); STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); @@ -163,7 +163,7 @@ void menu_info_thermistors() { #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_6 #include "../thermistornames.h" - STATIC_ITEM_P(PSTR(LCD_STR_E6 ": " THERMISTOR_NAME), SS_INVERT); + STATIC_ITEM_P(PSTR(STR_E6 ": " THERMISTOR_NAME), SS_INVERT); PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_6_MINTEMP), SS_LEFT); PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_6_MAXTEMP), SS_LEFT); STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); @@ -173,7 +173,7 @@ void menu_info_thermistors() { #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_7 #include "../thermistornames.h" - STATIC_ITEM_P(PSTR(LCD_STR_E7 ": " THERMISTOR_NAME), SS_INVERT); + STATIC_ITEM_P(PSTR(STR_E7 ": " THERMISTOR_NAME), SS_INVERT); PSTRING_ITEM(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_7_MINTEMP), SS_LEFT); PSTRING_ITEM(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_7_MAXTEMP), SS_LEFT); STATIC_ITEM(TERN(WATCH_HOTENDS, MSG_INFO_RUNAWAY_ON, MSG_INFO_RUNAWAY_OFF), SS_LEFT); diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp index 344b94e2e9..d463436021 100644 --- a/Marlin/src/lcd/menu/menu_motion.cpp +++ b/Marlin/src/lcd/menu/menu_motion.cpp @@ -346,13 +346,13 @@ void menu_move() { GCODES_ITEM_N(Z_AXIS, MSG_AUTO_HOME_A, PSTR("G28Z")); #endif #if HAS_I_AXIS - GCODES_ITEM_N(I_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS4_STR)); + GCODES_ITEM_N(I_AXIS, MSG_AUTO_HOME_A, PSTR("G28" STR_I)); #endif #if HAS_J_AXIS - GCODES_ITEM_N(J_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS5_STR)); + GCODES_ITEM_N(J_AXIS, MSG_AUTO_HOME_A, PSTR("G28" STR_J)); #endif #if HAS_K_AXIS - GCODES_ITEM_N(K_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS6_STR)); + GCODES_ITEM_N(K_AXIS, MSG_AUTO_HOME_A, PSTR("G28" STR_K)); #endif END_MENU(); @@ -399,13 +399,13 @@ void menu_motion() { GCODES_ITEM_N(Z_AXIS, MSG_AUTO_HOME_A, PSTR("G28Z")); #endif #if HAS_I_AXIS - GCODES_ITEM_N(I_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS4_STR)); + GCODES_ITEM_N(I_AXIS, MSG_AUTO_HOME_A, PSTR("G28" STR_I)); #endif #if HAS_J_AXIS - GCODES_ITEM_N(J_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS5_STR)); + GCODES_ITEM_N(J_AXIS, MSG_AUTO_HOME_A, PSTR("G28" STR_J)); #endif #if HAS_K_AXIS - GCODES_ITEM_N(K_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS6_STR)); + GCODES_ITEM_N(K_AXIS, MSG_AUTO_HOME_A, PSTR("G28" STR_K)); #endif #endif #endif diff --git a/Marlin/src/lcd/menu/menu_tmc.cpp b/Marlin/src/lcd/menu/menu_tmc.cpp index ad7d632058..be6289d851 100644 --- a/Marlin/src/lcd/menu/menu_tmc.cpp +++ b/Marlin/src/lcd/menu/menu_tmc.cpp @@ -38,13 +38,13 @@ void menu_tmc_current() { START_MENU(); BACK_ITEM(MSG_TMC_DRIVERS); #if AXIS_IS_TMC(X) - TMC_EDIT_STORED_I_RMS(X, STR_X); + TMC_EDIT_STORED_I_RMS(X, STR_A); #endif #if AXIS_IS_TMC(Y) - TMC_EDIT_STORED_I_RMS(Y, STR_Y); + TMC_EDIT_STORED_I_RMS(Y, STR_B); #endif #if AXIS_IS_TMC(Z) - TMC_EDIT_STORED_I_RMS(Z, STR_Z); + TMC_EDIT_STORED_I_RMS(Z, STR_C); #endif #if AXIS_IS_TMC(X2) TMC_EDIT_STORED_I_RMS(X2, STR_X2); @@ -62,28 +62,28 @@ void menu_tmc_current() { TMC_EDIT_STORED_I_RMS(Z4, STR_Z4); #endif #if AXIS_IS_TMC(E0) - TMC_EDIT_STORED_I_RMS(E0, LCD_STR_E0); + TMC_EDIT_STORED_I_RMS(E0, STR_E0); #endif #if AXIS_IS_TMC(E1) - TMC_EDIT_STORED_I_RMS(E1, LCD_STR_E1); + TMC_EDIT_STORED_I_RMS(E1, STR_E1); #endif #if AXIS_IS_TMC(E2) - TMC_EDIT_STORED_I_RMS(E2, LCD_STR_E2); + TMC_EDIT_STORED_I_RMS(E2, STR_E2); #endif #if AXIS_IS_TMC(E3) - TMC_EDIT_STORED_I_RMS(E3, LCD_STR_E3); + TMC_EDIT_STORED_I_RMS(E3, STR_E3); #endif #if AXIS_IS_TMC(E4) - TMC_EDIT_STORED_I_RMS(E4, LCD_STR_E4); + TMC_EDIT_STORED_I_RMS(E4, STR_E4); #endif #if AXIS_IS_TMC(E5) - TMC_EDIT_STORED_I_RMS(E5, LCD_STR_E5); + TMC_EDIT_STORED_I_RMS(E5, STR_E5); #endif #if AXIS_IS_TMC(E6) - TMC_EDIT_STORED_I_RMS(E6, LCD_STR_E6); + TMC_EDIT_STORED_I_RMS(E6, STR_E6); #endif #if AXIS_IS_TMC(E7) - TMC_EDIT_STORED_I_RMS(E7, LCD_STR_E7); + TMC_EDIT_STORED_I_RMS(E7, STR_E7); #endif END_MENU(); } @@ -103,14 +103,14 @@ void menu_tmc_current() { TERN_(Z2_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(Z2, STR_Z2)); TERN_(Z3_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(Z3, STR_Z3)); TERN_(Z4_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(Z4, STR_Z4)); - TERN_(E0_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E0, LCD_STR_E0)); - TERN_(E1_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E1, LCD_STR_E1)); - TERN_(E2_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E2, LCD_STR_E2)); - TERN_(E3_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E3, LCD_STR_E3)); - TERN_(E4_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E4, LCD_STR_E4)); - TERN_(E5_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E5, LCD_STR_E5)); - TERN_(E6_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E6, LCD_STR_E6)); - TERN_(E7_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E7, LCD_STR_E7)); + TERN_(E0_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E0, STR_E0)); + TERN_(E1_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E1, STR_E1)); + TERN_(E2_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E2, STR_E2)); + TERN_(E3_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E3, STR_E3)); + TERN_(E4_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E4, STR_E4)); + TERN_(E5_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E5, STR_E5)); + TERN_(E6_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E6, STR_E6)); + TERN_(E7_HAS_STEALTHCHOP, TMC_EDIT_STORED_HYBRID_THRS(E7, STR_E7)); END_MENU(); } @@ -155,14 +155,14 @@ void menu_tmc_current() { TERN_(Z2_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(Z2, STR_Z2)); TERN_(Z3_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(Z3, STR_Z3)); TERN_(Z4_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(Z4, STR_Z4)); - TERN_(E0_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E0, LCD_STR_E0)); - TERN_(E1_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E1, LCD_STR_E1)); - TERN_(E2_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E2, LCD_STR_E2)); - TERN_(E3_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E3, LCD_STR_E3)); - TERN_(E4_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E4, LCD_STR_E4)); - TERN_(E5_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E5, LCD_STR_E5)); - TERN_(E6_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E6, LCD_STR_E6)); - TERN_(E7_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E7, LCD_STR_E7)); + TERN_(E0_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E0, STR_E0)); + TERN_(E1_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E1, STR_E1)); + TERN_(E2_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E2, STR_E2)); + TERN_(E3_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E3, STR_E3)); + TERN_(E4_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E4, STR_E4)); + TERN_(E5_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E5, STR_E5)); + TERN_(E6_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E6, STR_E6)); + TERN_(E7_HAS_STEALTHCHOP, TMC_EDIT_STEP_MODE(E7, STR_E7)); END_MENU(); } diff --git a/Marlin/src/libs/L64XX/L64XX_Marlin.cpp b/Marlin/src/libs/L64XX/L64XX_Marlin.cpp index dea2e3fc2d..a8c2695630 100644 --- a/Marlin/src/libs/L64XX/L64XX_Marlin.cpp +++ b/Marlin/src/libs/L64XX/L64XX_Marlin.cpp @@ -39,7 +39,7 @@ L64XX_Marlin L64xxManager; static const char LINEAR_AXIS_LIST( str_X[] PROGMEM = "X ", str_Y[] PROGMEM = "Y ", str_Z[] PROGMEM = "Z ", - str_I[] PROGMEM = AXIS4_STR " ", str_J[] PROGMEM = AXIS5_STR " ", str_K[] PROGMEM = AXIS6_STR " " + str_I[] PROGMEM = STR_I " ", str_J[] PROGMEM = STR_J " ", str_K[] PROGMEM = STR_K " " ), str_X2[] PROGMEM = "X2", str_Y2[] PROGMEM = "Y2", str_Z2[] PROGMEM = "Z2", str_Z3[] PROGMEM = "Z3", str_Z4[] PROGMEM = "Z4", diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 23084c48fb..be08ba6ef0 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -1317,9 +1317,9 @@ void prepare_line_to_destination() { TEST(axis_bits, X_AXIS) ? "X" : "", TEST(axis_bits, Y_AXIS) ? "Y" : "", TEST(axis_bits, Z_AXIS) ? "Z" : "", - TEST(axis_bits, I_AXIS) ? AXIS4_STR : "", - TEST(axis_bits, J_AXIS) ? AXIS5_STR : "", - TEST(axis_bits, K_AXIS) ? AXIS6_STR : "" + TEST(axis_bits, I_AXIS) ? STR_I : "", + TEST(axis_bits, J_AXIS) ? STR_J : "", + TEST(axis_bits, K_AXIS) ? STR_K : "" ) ); SERIAL_ECHO_START(); diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 4c86c06efe..17d279cfa5 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1867,13 +1867,13 @@ bool Planner::_populate_block(block_t * const block, bool split_move, " B:", target.b, " (", db, " steps)" " C:", target.c, " (", dc, " steps)" #if HAS_I_AXIS - " " AXIS4_STR ":", target.i, " (", di, " steps)" + " " STR_I ":", target.i, " (", di, " steps)" #endif #if HAS_J_AXIS - " " AXIS5_STR ":", target.j, " (", dj, " steps)" + " " STR_J ":", target.j, " (", dj, " steps)" #endif #if HAS_K_AXIS - " " AXIS6_STR ":", target.k, " (", dk, " steps)" + " " STR_K ":", target.k, " (", dk, " steps)" #endif #if HAS_EXTRUDERS " E:", target.e, " (", de, " steps)" diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index f7d53b6da7..c3cd4f10d6 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -219,8 +219,8 @@ PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED); #else #define _COOLER_FSTR(h) #endif -#define _E_FSTR(h,N) ((HOTENDS) > N && (h) == N) ? F(LCD_STR_E##N) : -#define HEATER_FSTR(h) _BED_FSTR(h) _CHAMBER_FSTR(h) _COOLER_FSTR(h) _E_FSTR(h,1) _E_FSTR(h,2) _E_FSTR(h,3) _E_FSTR(h,4) _E_FSTR(h,5) F(LCD_STR_E0) +#define _E_FSTR(h,N) ((HOTENDS) > N && (h) == N) ? F(STR_E##N) : +#define HEATER_FSTR(h) _BED_FSTR(h) _CHAMBER_FSTR(h) _COOLER_FSTR(h) _E_FSTR(h,1) _E_FSTR(h,2) _E_FSTR(h,3) _E_FSTR(h,4) _E_FSTR(h,5) _E_FSTR(h,6) _E_FSTR(h,7) F(STR_E0) // // Initialize MAX TC objects/SPI From 08b659747191d3b234c39e81546d845d31d49852 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 10 Jan 2022 04:49:03 -0600 Subject: [PATCH 348/532] =?UTF-8?q?=F0=9F=8E=A8=20Followup=20to=20#23462?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/scripts/upload.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/buildroot/share/scripts/upload.py b/buildroot/share/scripts/upload.py index 4a152067a4..bfce4ea49d 100644 --- a/buildroot/share/scripts/upload.py +++ b/buildroot/share/scripts/upload.py @@ -14,7 +14,7 @@ Import("env") # # Install heatshrink # print("Installing 'heatshrink' python module...") # env.Execute(env.subst("$PYTHONEXE -m pip install heatshrink")) -# +# # Not tested: If it's safe to install python libraries in PIO python try: # env.Execute(env.subst("$PYTHONEXE -m pip install https://github.com/p3p/pyheatshrink/releases/download/0.3.3/pyheatshrink-pip.zip")) @@ -92,7 +92,7 @@ def Upload(source, target, env): raise Exception('Error getting firmware files') if Debug: print('OK') return Responses - + def _FilterFirmwareFiles(FirmwareList): Firmwares = [] for FWFile in FirmwareList: @@ -185,7 +185,7 @@ def Upload(source, target, env): if not marlin_custom_firmware_upload: raise Exception(f"CUSTOM_FIRMWARE_UPLOAD must be enabled in 'Configuration_adv.h' for '{marlin_motherboard}'") - # Generate a new 8.3 random filename + # Generate a new 8.3 random filename # This board remember the last firmware filename and doesn't allow to flash from that filename upload_firmware_target_name = f"fw-{''.join(random.choices('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', k=5))}.BIN" print(f"Board {marlin_motherboard}: Overriding firmware filename to '{upload_firmware_target_name}'") @@ -196,13 +196,13 @@ def Upload(source, target, env): # Check SD card status _CheckSDCard() - + # Get firmware files FirmwareFiles = _GetFirmwareFiles() if Debug: for FirmwareFile in FirmwareFiles: print(f'Found: {FirmwareFile}') - + # Get all 1st level firmware files (to remove) OldFirmwareFiles = _FilterFirmwareFiles(FirmwareFiles[1:len(FirmwareFiles)-2]) # Skip header and footers of list if len(OldFirmwareFiles) == 0: @@ -220,7 +220,7 @@ def Upload(source, target, env): if Debug: print('Cleanup completed') # WARNING! The serial port must be closed here because the serial transfer that follow needs it! - + # Upload firmware file if Debug: print(f"Copy '{upload_firmware_source_name}' --> '{upload_firmware_target_name}'") protocol = MarlinBinaryProtocol.Protocol(upload_port, upload_speed, upload_blocksize, float(upload_error_ratio), int(upload_timeout)) From 224b6e5af9250e92671ad3ee35bb10cd79b819ef Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 10 Jan 2022 05:34:16 -0600 Subject: [PATCH 349/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20some=20logical=20a?= =?UTF-8?q?xis=20usage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/feature/pause/G60.cpp | 9 ++++++--- Marlin/src/lcd/marlinui.cpp | 2 +- Marlin/src/module/motion.cpp | 6 ++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Marlin/src/gcode/feature/pause/G60.cpp b/Marlin/src/gcode/feature/pause/G60.cpp index 4c7190091c..d4770577a6 100644 --- a/Marlin/src/gcode/feature/pause/G60.cpp +++ b/Marlin/src/gcode/feature/pause/G60.cpp @@ -47,13 +47,16 @@ void GcodeSuite::G60() { SBI(saved_slots[slot >> 3], slot & 0x07); #if ENABLED(SAVED_POSITIONS_DEBUG) + { DEBUG_ECHOPGM(STR_SAVED_POS " S", slot); const xyze_pos_t &pos = stored_position[slot]; DEBUG_ECHOLNPAIR_F_P( - LIST_N(DOUBLE(LOGICAL_AXES), SP_E_STR, pos.e, - PSTR(" : X"), pos.x, SP_Y_STR, pos.y, SP_Z_STR, pos.z, - SP_I_STR, pos.i, SP_J_STR, pos.j, SP_K_STR, pos.k) + LIST_N(DOUBLE(LINEAR_AXES), PSTR(" : X"), pos.x, SP_Y_STR, pos.y, SP_Z_STR, pos.z, SP_I_STR, pos.i, SP_J_STR, pos.j, SP_K_STR, pos.k) + #if HAS_EXTRUDERS + , SP_E_STR, pos.e + #endif ); + } #endif } diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 7b3e267310..ab132216c8 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -771,7 +771,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; // Add a manual move to the queue? if (axis != NO_AXIS_ENUM && ELAPSED(millis(), start_time) && !planner.is_full()) { - const feedRate_t fr_mm_s = (axis <= LOGICAL_AXES) ? manual_feedrate_mm_s[axis] : XY_PROBE_FEEDRATE_MM_S; + const feedRate_t fr_mm_s = (axis < LOGICAL_AXES) ? manual_feedrate_mm_s[axis] : XY_PROBE_FEEDRATE_MM_S; #if IS_KINEMATIC diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index be08ba6ef0..a9c2ad6a7a 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -265,8 +265,7 @@ void report_current_position_projected() { const xyz_pos_t lpos = cartes.asLogical(); SERIAL_ECHOPGM_P( - LIST_N(DOUBLE(LOGICAL_AXES), - SP_E_LBL, current_position.e, + LIST_N(DOUBLE(LINEAR_AXES), X_LBL, lpos.x, SP_Y_LBL, lpos.y, SP_Z_LBL, lpos.z, @@ -274,6 +273,9 @@ void report_current_position_projected() { SP_J_LBL, lpos.j, SP_K_LBL, lpos.k ) + #if HAS_EXTRUDERS + , SP_E_LBL, current_position.e + #endif ); stepper.report_positions(); From 2ded50ba3fcbc6fec77a1697e9e846fcb6c68f66 Mon Sep 17 00:00:00 2001 From: mistic100 Date: Sat, 8 Jan 2022 10:51:21 +0100 Subject: [PATCH 350/532] =?UTF-8?q?=F0=9F=9A=B8=20Wait=20for=20cooldown=20?= =?UTF-8?q?in=20MarlinUI=20power-off=20(#23476)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/marlinui.cpp | 8 +++++--- Marlin/src/lcd/marlinui.h | 2 +- Marlin/src/lcd/menu/menu_main.cpp | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index ab132216c8..d22b11f9bd 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -1553,11 +1553,13 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; TERN_(HAS_LCD_MENU, return_to_status()); } - #if BOTH(PSU_CONTROL, PS_OFF_CONFIRM) + #if BOTH(HAS_LCD_MENU, PSU_CONTROL) + void MarlinUI::poweroff() { - queue.inject(F("M81")); - goto_previous_screen(); + queue.inject(F("M81" TERN_(POWER_OFF_WAIT_FOR_COOLDOWN, "S"))); + return_to_status(); } + #endif void MarlinUI::flow_fault() { diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index f409970e42..8134780999 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -373,7 +373,7 @@ public: static void resume_print(); static void flow_fault(); - #if BOTH(PSU_CONTROL, PS_OFF_CONFIRM) + #if BOTH(HAS_LCD_MENU, PSU_CONTROL) static void poweroff(); #endif diff --git a/Marlin/src/lcd/menu/menu_main.cpp b/Marlin/src/lcd/menu/menu_main.cpp index 6e66188c02..f7e974a864 100644 --- a/Marlin/src/lcd/menu/menu_main.cpp +++ b/Marlin/src/lcd/menu/menu_main.cpp @@ -380,7 +380,7 @@ void menu_main() { GET_TEXT(MSG_SWITCH_PS_OFF), (const char *)nullptr, PSTR("?") ); #else - GCODES_ITEM(MSG_SWITCH_PS_OFF, PSTR("M81")); + ACTION_ITEM(MSG_SWITCH_PS_OFF, ui.poweroff); #endif else GCODES_ITEM(MSG_SWITCH_PS_ON, PSTR("M80")); From 476028d4766f282a9164d1fe7493c635e73fe696 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 11 Jan 2022 01:09:12 +0000 Subject: [PATCH 351/532] [cron] Bump distribution date (2022-01-11) --- 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 8feb7385b8..4a1146051c 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 "2022-01-10" +//#define STRING_DISTRIBUTION_DATE "2022-01-11" /** * 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 75ffed6533..377593c2c4 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 "2022-01-10" + #define STRING_DISTRIBUTION_DATE "2022-01-11" #endif /** From 02b29c0fecd1d68226cd64d660bb409e6f131f9e Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 10 Jan 2022 19:49:03 -0600 Subject: [PATCH 352/532] =?UTF-8?q?=F0=9F=93=9D=20kHz=20=3D>=20KHz?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 8 ++++---- Marlin/src/HAL/DUE/HAL_SPI.cpp | 6 +++--- Marlin/src/HAL/DUE/timers.cpp | 2 +- Marlin/src/HAL/DUE/usb/genclk.h | 6 +++--- Marlin/src/HAL/DUE/usb/osc.h | 12 ++++++------ Marlin/src/HAL/DUE/usb/sysclk.h | 6 +++--- Marlin/src/HAL/DUE/watchdog.cpp | 2 +- Marlin/src/HAL/ESP32/i2s.cpp | 2 +- Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.c | 2 +- Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.h | 2 +- Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.cpp | 2 +- Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.h | 2 +- Marlin/src/HAL/STM32/timers.h | 2 +- Marlin/src/HAL/STM32F1/timers.cpp | 2 +- Marlin/src/HAL/TEENSY31_32/timers.h | 2 +- Marlin/src/HAL/TEENSY35_36/timers.h | 2 +- Marlin/src/HAL/shared/HAL_SPI.h | 6 +++--- Marlin/src/feature/digipot/digipot_mcp4451.cpp | 2 +- Marlin/src/module/planner.cpp | 2 +- Marlin/src/module/planner.h | 2 +- 20 files changed, 36 insertions(+), 36 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index d49d2d00b9..569ff1bf08 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -561,7 +561,7 @@ * FAST_PWM_FAN_FREQUENCY * Set this to your desired frequency. * For AVR, if left undefined this defaults to F = F_CPU/(2*255*1) - * i.e., F = 31.4kHz on 16MHz microcontrollers or F = 39.2kHz on 20MHz microcontrollers. + * i.e., F = 31.4KHz on 16MHz microcontrollers or F = 39.2KHz on 20MHz microcontrollers. * For non AVR, if left undefined this defaults to F = 1Khz. * This F value is only to protect the hardware from an absence of configuration * and not to complete it when users are not aware that the frequency must be specifically set to support the target board. @@ -1179,7 +1179,7 @@ /** * Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies - * below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible + * below 1KHz (for AVR) or 10KHz (for ARM), where aliasing between axes in multi-axis moves causes audible * vibration and surface artifacts. The algorithm adapts to provide the best possible step smoothing at the * lowest stepping frequencies. */ @@ -3419,14 +3419,14 @@ /** * PHOTO_PULSES_US may need adjustment depending on board and camera model. - * Pin must be running at 48.4kHz. + * Pin must be running at 48.4KHz. * Be sure to use a PHOTOGRAPH_PIN which can rise and fall quick enough. * (e.g., MKS SBase temp sensor pin was too slow, so used P1.23 on J8.) * * Example pulse data for Nikon: https://bit.ly/2FKD0Aq * IR Wiring: https://git.io/JvJf7 */ - //#define PHOTO_PULSES_US { 2000, 27850, 400, 1580, 400, 3580, 400 } // (µs) Durations for each 48.4kHz oscillation + //#define PHOTO_PULSES_US { 2000, 27850, 400, 1580, 400, 3580, 400 } // (µs) Durations for each 48.4KHz oscillation #ifdef PHOTO_PULSES_US #define PHOTO_PULSE_DELAY_US 13 // (µs) Approximate duration of each HIGH and LOW pulse in the oscillation #endif diff --git a/Marlin/src/HAL/DUE/HAL_SPI.cpp b/Marlin/src/HAL/DUE/HAL_SPI.cpp index c5e8f2433d..2b613a45ba 100644 --- a/Marlin/src/HAL/DUE/HAL_SPI.cpp +++ b/Marlin/src/HAL/DUE/HAL_SPI.cpp @@ -491,9 +491,9 @@ * 1 : 4 - 5 MHz * 2 : 2 - 2.5 MHz * 3 : 1 - 1.25 MHz - * 4 : 500 - 625 kHz - * 5 : 250 - 312 kHz - * 6 : 125 - 156 kHz + * 4 : 500 - 625 KHz + * 5 : 250 - 312 KHz + * 6 : 125 - 156 KHz */ void spiInit(uint8_t spiRate) { switch (spiRate) { diff --git a/Marlin/src/HAL/DUE/timers.cpp b/Marlin/src/HAL/DUE/timers.cpp index a7bf7fbd6d..6555edece3 100644 --- a/Marlin/src/HAL/DUE/timers.cpp +++ b/Marlin/src/HAL/DUE/timers.cpp @@ -62,7 +62,7 @@ const tTimerConfig timer_config[NUM_HARDWARE_TIMERS] = { Timer_clock1: Prescaler 2 -> 42MHz Timer_clock2: Prescaler 8 -> 10.5MHz Timer_clock3: Prescaler 32 -> 2.625MHz - Timer_clock4: Prescaler 128 -> 656.25kHz + Timer_clock4: Prescaler 128 -> 656.25KHz */ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { diff --git a/Marlin/src/HAL/DUE/usb/genclk.h b/Marlin/src/HAL/DUE/usb/genclk.h index cde03bc0d1..9831701f83 100644 --- a/Marlin/src/HAL/DUE/usb/genclk.h +++ b/Marlin/src/HAL/DUE/usb/genclk.h @@ -74,9 +74,9 @@ extern "C" { //@{ enum genclk_source { - GENCLK_PCK_SRC_SLCK_RC = 0, //!< Internal 32kHz RC oscillator as PCK source clock - GENCLK_PCK_SRC_SLCK_XTAL = 1, //!< External 32kHz crystal oscillator as PCK source clock - GENCLK_PCK_SRC_SLCK_BYPASS = 2, //!< External 32kHz bypass oscillator as PCK source clock + GENCLK_PCK_SRC_SLCK_RC = 0, //!< Internal 32KHz RC oscillator as PCK source clock + GENCLK_PCK_SRC_SLCK_XTAL = 1, //!< External 32KHz crystal oscillator as PCK source clock + GENCLK_PCK_SRC_SLCK_BYPASS = 2, //!< External 32KHz bypass oscillator as PCK source clock GENCLK_PCK_SRC_MAINCK_4M_RC = 3, //!< Internal 4MHz RC oscillator as PCK source clock GENCLK_PCK_SRC_MAINCK_8M_RC = 4, //!< Internal 8MHz RC oscillator as PCK source clock GENCLK_PCK_SRC_MAINCK_12M_RC = 5, //!< Internal 12MHz RC oscillator as PCK source clock diff --git a/Marlin/src/HAL/DUE/usb/osc.h b/Marlin/src/HAL/DUE/usb/osc.h index 953bcbbed1..06f59c676a 100644 --- a/Marlin/src/HAL/DUE/usb/osc.h +++ b/Marlin/src/HAL/DUE/usb/osc.h @@ -93,9 +93,9 @@ extern "C" { //! \name Oscillator identifiers //@{ -#define OSC_SLCK_32K_RC 0 //!< Internal 32kHz RC oscillator. -#define OSC_SLCK_32K_XTAL 1 //!< External 32kHz crystal oscillator. -#define OSC_SLCK_32K_BYPASS 2 //!< External 32kHz bypass oscillator. +#define OSC_SLCK_32K_RC 0 //!< Internal 32KHz RC oscillator. +#define OSC_SLCK_32K_XTAL 1 //!< External 32KHz crystal oscillator. +#define OSC_SLCK_32K_BYPASS 2 //!< External 32KHz bypass oscillator. #define OSC_MAINCK_4M_RC 3 //!< Internal 4MHz RC oscillator. #define OSC_MAINCK_8M_RC 4 //!< Internal 8MHz RC oscillator. #define OSC_MAINCK_12M_RC 5 //!< Internal 12MHz RC oscillator. @@ -105,9 +105,9 @@ extern "C" { //! \name Oscillator clock speed in hertz //@{ -#define OSC_SLCK_32K_RC_HZ CHIP_FREQ_SLCK_RC //!< Internal 32kHz RC oscillator. -#define OSC_SLCK_32K_XTAL_HZ BOARD_FREQ_SLCK_XTAL //!< External 32kHz crystal oscillator. -#define OSC_SLCK_32K_BYPASS_HZ BOARD_FREQ_SLCK_BYPASS //!< External 32kHz bypass oscillator. +#define OSC_SLCK_32K_RC_HZ CHIP_FREQ_SLCK_RC //!< Internal 32KHz RC oscillator. +#define OSC_SLCK_32K_XTAL_HZ BOARD_FREQ_SLCK_XTAL //!< External 32KHz crystal oscillator. +#define OSC_SLCK_32K_BYPASS_HZ BOARD_FREQ_SLCK_BYPASS //!< External 32KHz bypass oscillator. #define OSC_MAINCK_4M_RC_HZ CHIP_FREQ_MAINCK_RC_4MHZ //!< Internal 4MHz RC oscillator. #define OSC_MAINCK_8M_RC_HZ CHIP_FREQ_MAINCK_RC_8MHZ //!< Internal 8MHz RC oscillator. #define OSC_MAINCK_12M_RC_HZ CHIP_FREQ_MAINCK_RC_12MHZ //!< Internal 12MHz RC oscillator. diff --git a/Marlin/src/HAL/DUE/usb/sysclk.h b/Marlin/src/HAL/DUE/usb/sysclk.h index 16db8c86d3..4398cc0fc9 100644 --- a/Marlin/src/HAL/DUE/usb/sysclk.h +++ b/Marlin/src/HAL/DUE/usb/sysclk.h @@ -156,9 +156,9 @@ extern "C" { //! \name Master Clock Sources (MCK) //@{ -#define SYSCLK_SRC_SLCK_RC 0 //!< Internal 32kHz RC oscillator as master source clock -#define SYSCLK_SRC_SLCK_XTAL 1 //!< External 32kHz crystal oscillator as master source clock -#define SYSCLK_SRC_SLCK_BYPASS 2 //!< External 32kHz bypass oscillator as master source clock +#define SYSCLK_SRC_SLCK_RC 0 //!< Internal 32KHz RC oscillator as master source clock +#define SYSCLK_SRC_SLCK_XTAL 1 //!< External 32KHz crystal oscillator as master source clock +#define SYSCLK_SRC_SLCK_BYPASS 2 //!< External 32KHz bypass oscillator as master source clock #define SYSCLK_SRC_MAINCK_4M_RC 3 //!< Internal 4MHz RC oscillator as master source clock #define SYSCLK_SRC_MAINCK_8M_RC 4 //!< Internal 8MHz RC oscillator as master source clock #define SYSCLK_SRC_MAINCK_12M_RC 5 //!< Internal 12MHz RC oscillator as master source clock diff --git a/Marlin/src/HAL/DUE/watchdog.cpp b/Marlin/src/HAL/DUE/watchdog.cpp index e144db8291..6cbf39d1d1 100644 --- a/Marlin/src/HAL/DUE/watchdog.cpp +++ b/Marlin/src/HAL/DUE/watchdog.cpp @@ -39,7 +39,7 @@ void watchdogSetup() { uint32_t timeout = TERN(WATCHDOG_DURATION_8S, 8000, 4000); // Calculate timeout value in WDT counter ticks: This assumes - // the slow clock is running at 32.768 kHz watchdog + // the slow clock is running at 32.768 KHz watchdog // frequency is therefore 32768 / 128 = 256 Hz timeout = (timeout << 8) / 1000; if (timeout == 0) diff --git a/Marlin/src/HAL/ESP32/i2s.cpp b/Marlin/src/HAL/ESP32/i2s.cpp index 3e77b65836..e9f418689e 100644 --- a/Marlin/src/HAL/ESP32/i2s.cpp +++ b/Marlin/src/HAL/ESP32/i2s.cpp @@ -176,7 +176,7 @@ int i2s_init() { * * fwclk = fbclk / 32 * - * for fwclk = 250kHz (4µS pulse time) + * for fwclk = 250KHz (4µS pulse time) * N = 10 * M = 20 */ diff --git a/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.c b/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.c index 466fc80203..bb203cf8d4 100644 --- a/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.c +++ b/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.c @@ -26,7 +26,7 @@ * These are based on the LPC1768 pinMode, digitalRead & digitalWrite routines. * * Couldn't just call exact copies because the overhead killed the LCD update speed - * With an intermediate level the softspi was running in the 10-20kHz range which + * With an intermediate level the softspi was running in the 10-20KHz range which * resulted in using about about 25% of the CPU's time. */ diff --git a/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.h b/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.h index d60d93dadd..4661202e8a 100644 --- a/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.h +++ b/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.h @@ -27,7 +27,7 @@ * These are based on the LPC1768 pinMode, digitalRead & digitalWrite routines. * * Couldn't just call exact copies because the overhead killed the LCD update speed - * With an intermediate level the softspi was running in the 10-20kHz range which + * With an intermediate level the softspi was running in the 10-20KHz range which * resulted in using about about 25% of the CPU's time. */ diff --git a/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.cpp b/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.cpp index 3b5acc1656..69ea291724 100644 --- a/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.cpp +++ b/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.cpp @@ -26,7 +26,7 @@ * These are based on the LPC1768 pinMode, digitalRead & digitalWrite routines. * * Couldn't just call exact copies because the overhead killed the LCD update speed - * With an intermediate level the softspi was running in the 10-20kHz range which + * With an intermediate level the softspi was running in the 10-20KHz range which * resulted in using about about 25% of the CPU's time. */ diff --git a/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.h b/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.h index c27c84e8c3..3c959cd491 100644 --- a/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.h +++ b/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.h @@ -27,7 +27,7 @@ * These are based on the LPC1768 pinMode, digitalRead & digitalWrite routines. * * Couldn't just call exact copies because the overhead killed the LCD update speed - * With an intermediate level the softspi was running in the 10-20kHz range which + * With an intermediate level the softspi was running in the 10-20KHz range which * resulted in using about about 25% of the CPU's time. */ diff --git a/Marlin/src/HAL/STM32/timers.h b/Marlin/src/HAL/STM32/timers.h index aad543229e..37512da959 100644 --- a/Marlin/src/HAL/STM32/timers.h +++ b/Marlin/src/HAL/STM32/timers.h @@ -48,7 +48,7 @@ #define TIMER_INDEX_(T) TIMER##T##_INDEX // TIMER#_INDEX enums (timer_index_t) depend on TIM#_BASE defines. #define TIMER_INDEX(T) TIMER_INDEX_(T) // Convert Timer ID to HardwareTimer_Handle index. -#define TEMP_TIMER_FREQUENCY 1000 // Temperature::isr() is expected to be called at around 1kHz +#define TEMP_TIMER_FREQUENCY 1000 // Temperature::isr() is expected to be called at around 1KHz // TODO: get rid of manual rate/prescale/ticks/cycles taken for procedures in stepper.cpp #define STEPPER_TIMER_RATE 2000000 // 2 Mhz diff --git a/Marlin/src/HAL/STM32F1/timers.cpp b/Marlin/src/HAL/STM32F1/timers.cpp index 112c730b9a..f00ac9e3fb 100644 --- a/Marlin/src/HAL/STM32F1/timers.cpp +++ b/Marlin/src/HAL/STM32F1/timers.cpp @@ -40,7 +40,7 @@ * Timer_clock1: Prescaler 2 -> 36 MHz * Timer_clock2: Prescaler 8 -> 9 MHz * Timer_clock3: Prescaler 32 -> 2.25 MHz - * Timer_clock4: Prescaler 128 -> 562.5 kHz + * Timer_clock4: Prescaler 128 -> 562.5 KHz */ /** diff --git a/Marlin/src/HAL/TEENSY31_32/timers.h b/Marlin/src/HAL/TEENSY31_32/timers.h index 3b073d63ab..85381ea481 100644 --- a/Marlin/src/HAL/TEENSY31_32/timers.h +++ b/Marlin/src/HAL/TEENSY31_32/timers.h @@ -41,7 +41,7 @@ typedef uint32_t hal_timer_t; #define FTM0_TIMER_PRESCALE_BITS 0b011 #define FTM1_TIMER_PRESCALE_BITS 0b010 -#define FTM0_TIMER_RATE (F_BUS / (FTM0_TIMER_PRESCALE)) // 60MHz / 8 = 7500kHz +#define FTM0_TIMER_RATE (F_BUS / (FTM0_TIMER_PRESCALE)) // 60MHz / 8 = 7500KHz #define FTM1_TIMER_RATE (F_BUS / (FTM1_TIMER_PRESCALE)) // 60MHz / 4 = 15MHz #define HAL_TIMER_RATE (FTM0_TIMER_RATE) diff --git a/Marlin/src/HAL/TEENSY35_36/timers.h b/Marlin/src/HAL/TEENSY35_36/timers.h index 6c342bbe0d..63ec5e4895 100644 --- a/Marlin/src/HAL/TEENSY35_36/timers.h +++ b/Marlin/src/HAL/TEENSY35_36/timers.h @@ -40,7 +40,7 @@ typedef uint32_t hal_timer_t; #define FTM0_TIMER_PRESCALE_BITS 0b011 #define FTM1_TIMER_PRESCALE_BITS 0b010 -#define FTM0_TIMER_RATE (F_BUS / FTM0_TIMER_PRESCALE) // 60MHz / 8 = 7500kHz +#define FTM0_TIMER_RATE (F_BUS / FTM0_TIMER_PRESCALE) // 60MHz / 8 = 7500KHz #define FTM1_TIMER_RATE (F_BUS / FTM1_TIMER_PRESCALE) // 60MHz / 4 = 15MHz #define HAL_TIMER_RATE (FTM0_TIMER_RATE) diff --git a/Marlin/src/HAL/shared/HAL_SPI.h b/Marlin/src/HAL/shared/HAL_SPI.h index 6611f9ec4e..50a2bf9df2 100644 --- a/Marlin/src/HAL/shared/HAL_SPI.h +++ b/Marlin/src/HAL/shared/HAL_SPI.h @@ -38,9 +38,9 @@ * 1 : 4 - 5 MHz * 2 : 2 - 2.5 MHz * 3 : 1 - 1.25 MHz - * 4 : 500 - 625 kHz - * 5 : 250 - 312 kHz - * 6 : 125 - 156 kHz + * 4 : 500 - 625 KHz + * 5 : 250 - 312 KHz + * 6 : 125 - 156 KHz * * On AVR, actual speed is F_CPU/2^(1 + index). * On other platforms, speed should be in range given above where possible. diff --git a/Marlin/src/feature/digipot/digipot_mcp4451.cpp b/Marlin/src/feature/digipot/digipot_mcp4451.cpp index ba5ecdad05..f59e0aae80 100644 --- a/Marlin/src/feature/digipot/digipot_mcp4451.cpp +++ b/Marlin/src/feature/digipot/digipot_mcp4451.cpp @@ -82,7 +82,7 @@ void DigipotI2C::set_current(const uint8_t channel, const float current) { void DigipotI2C::init() { #if MB(MKS_SBASE) - configure_i2c(16); // Set clock_option to 16 ensure I2C is initialized at 400kHz + configure_i2c(16); // Set clock_option to 16 ensure I2C is initialized at 400KHz #else Wire.begin(); #endif diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 17d279cfa5..1f10aba01b 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -2495,7 +2495,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, if (extruder_advance_K[active_extruder] * block->e_D_ratio * block->acceleration * 2 < SQRT(block->nominal_speed_sqr) * block->e_D_ratio) SERIAL_ECHOLNPGM("More than 2 steps per eISR loop executed."); if (block->advance_speed < 200) - SERIAL_ECHOLNPGM("eISR running at > 10kHz."); + SERIAL_ECHOLNPGM("eISR running at > 10KHz."); #endif } #endif diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index 380c35755c..b83c445260 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -883,7 +883,7 @@ class Planner { static void finish_and_disable(); // Periodic handler to manage the cleaning buffer counter - // Called from the Temperature ISR at ~1kHz + // Called from the Temperature ISR at ~1KHz static void isr() { if (cleaning_buffer_counter) --cleaning_buffer_counter; } /** From 07bffdf4bc451ad95ba0f5c196d7c3c9adcaf1cd Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 10 Jan 2022 19:49:54 -0600 Subject: [PATCH 353/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Adj?= =?UTF-8?q?ust=20FastIO=20AVR=20timer=20enums,=20macros?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/AVR/HAL.h | 2 +- Marlin/src/HAL/AVR/fast_pwm.cpp | 148 ++++++++++++++++------------ Marlin/src/HAL/AVR/fastio.h | 43 +++----- Marlin/src/HAL/LPC1768/HAL.h | 2 +- Marlin/src/HAL/LPC1768/fast_pwm.cpp | 2 +- Marlin/src/HAL/STM32/HAL.h | 2 +- Marlin/src/HAL/STM32/fast_pwm.cpp | 2 +- Marlin/src/HAL/STM32F1/HAL.h | 2 +- Marlin/src/HAL/STM32F1/fast_pwm.cpp | 2 +- 9 files changed, 105 insertions(+), 100 deletions(-) diff --git a/Marlin/src/HAL/AVR/HAL.h b/Marlin/src/HAL/AVR/HAL.h index 2217f239d6..451ed1ee9f 100644 --- a/Marlin/src/HAL/AVR/HAL.h +++ b/Marlin/src/HAL/AVR/HAL.h @@ -217,7 +217,7 @@ inline void HAL_adc_init() { * NOTE that the frequency is applied to all pins on the timer (Ex OC3A, OC3B and OC3B) * NOTE that there are limitations, particularly if using TIMER2. (see Configuration_adv.h -> FAST FAN PWM Settings) */ -void set_pwm_frequency(const pin_t pin, int f_desired); +void set_pwm_frequency(const pin_t pin, const uint16_t f_desired); /** * set_pwm_duty diff --git a/Marlin/src/HAL/AVR/fast_pwm.cpp b/Marlin/src/HAL/AVR/fast_pwm.cpp index 804e5fad30..9c6d6f5514 100644 --- a/Marlin/src/HAL/AVR/fast_pwm.cpp +++ b/Marlin/src/HAL/AVR/fast_pwm.cpp @@ -34,6 +34,24 @@ struct Timer { uint8_t q; // the timer output [0->2] (A->C) }; +// Macros for the Timer structure +#define _SET_WGMnQ(TCCRnQ, V) do{ \ + *(TCCRnQ)[0] = (*(TCCRnQ)[0] & ~(0x3 << 0)) | (( int(V) & 0x3) << 0); \ + *(TCCRnQ)[1] = (*(TCCRnQ)[1] & ~(0x3 << 3)) | (((int(V) >> 2) & 0x3) << 3); \ + }while(0) + +// Set TCCR CS bits +#define _SET_CSn(TCCRnQ, V) (*(TCCRnQ)[1] = (*(TCCRnQ[1]) & ~(0x7 << 0)) | ((int(V) & 0x7) << 0)) + +// Set TCCR COM bits +#define _SET_COMnQ(TCCRnQ, Q, V) (*(TCCRnQ)[0] = (*(TCCRnQ)[0] & ~(0x3 << (6-2*(Q)))) | (int(V) << (6-2*(Q)))) + +// Set OCRnQ register +#define _SET_OCRnQ(OCRnQ, Q, V) (*(OCRnQ)[Q] = int(V) & 0xFFFF) + +// Set ICRn register (one per timer) +#define _SET_ICRn(ICRn, V) (*(ICRn) = int(V) & 0xFFFF) + /** * get_pwm_timer * Get the timer information and register of the provided pin. @@ -42,115 +60,119 @@ struct Timer { */ Timer get_pwm_timer(const pin_t pin) { uint8_t q = 0; + switch (digitalPinToTimer(pin)) { // Protect reserved timers (TIMER0 & TIMER1) #ifdef TCCR0A - #if !AVR_AT90USB1286_FAMILY - case TIMER0A: - #endif + IF_DISABLED(AVR_AT90USB1286_FAMILY, case TIMER0A:) case TIMER0B: #endif #ifdef TCCR1A case TIMER1A: case TIMER1B: #endif - break; - #if HAS_TCCR2 || defined(TCCR2A) - #if HAS_TCCR2 - case TIMER2: { + + break; + + #if HAS_TCCR2 + case TIMER2: { + Timer timer = { + { &TCCR2, nullptr, nullptr }, + { (uint16_t*)&OCR2, nullptr, nullptr }, + nullptr, + 2, 0 + }; + return timer; + } + #elif defined(TCCR2A) + #if ENABLED(USE_OCR2A_AS_TOP) + case TIMER2A: break; // protect TIMER2A + case TIMER2B: { Timer timer = { - /*TCCRnQ*/ { &TCCR2, nullptr, nullptr }, - /*OCRnQ*/ { (uint16_t*)&OCR2, nullptr, nullptr }, - /*ICRn*/ nullptr, - /*n, q*/ 2, 0 + { &TCCR2A, &TCCR2B, nullptr }, + { (uint16_t*)&OCR2A, (uint16_t*)&OCR2B, nullptr }, + nullptr, + 2, 1 }; + return timer; + } + #else + case TIMER2B: ++q; + case TIMER2A: { + Timer timer = { + { &TCCR2A, &TCCR2B, nullptr }, + { (uint16_t*)&OCR2A, (uint16_t*)&OCR2B, nullptr }, + nullptr, + 2, q + }; + return timer; } - #elif defined(TCCR2A) - #if ENABLED(USE_OCR2A_AS_TOP) - case TIMER2A: break; // protect TIMER2A - case TIMER2B: { - Timer timer = { - /*TCCRnQ*/ { &TCCR2A, &TCCR2B, nullptr }, - /*OCRnQ*/ { (uint16_t*)&OCR2A, (uint16_t*)&OCR2B, nullptr }, - /*ICRn*/ nullptr, - /*n, q*/ 2, 1 - }; - return timer; - } - #else - case TIMER2B: ++q; - case TIMER2A: { - Timer timer = { - /*TCCRnQ*/ { &TCCR2A, &TCCR2B, nullptr }, - /*OCRnQ*/ { (uint16_t*)&OCR2A, (uint16_t*)&OCR2B, nullptr }, - /*ICRn*/ nullptr, - 2, q - }; - return timer; - } - #endif #endif #endif + #ifdef OCR3C - case TIMER3C: ++q; - case TIMER3B: ++q; + case TIMER3C: ++q; + case TIMER3B: ++q; case TIMER3A: { Timer timer = { - /*TCCRnQ*/ { &TCCR3A, &TCCR3B, &TCCR3C }, - /*OCRnQ*/ { &OCR3A, &OCR3B, &OCR3C }, - /*ICRn*/ &ICR3, - /*n, q*/ 3, q + { &TCCR3A, &TCCR3B, &TCCR3C }, + { &OCR3A, &OCR3B, &OCR3C }, + &ICR3, + 3, q }; return timer; } #elif defined(OCR3B) - case TIMER3B: ++q; + case TIMER3B: ++q; case TIMER3A: { Timer timer = { - /*TCCRnQ*/ { &TCCR3A, &TCCR3B, nullptr }, - /*OCRnQ*/ { &OCR3A, &OCR3B, nullptr }, - /*ICRn*/ &ICR3, - /*n, q*/ 3, q + { &TCCR3A, &TCCR3B, nullptr }, + { &OCR3A, &OCR3B, nullptr }, + &ICR3, + 3, q }; return timer; } #endif + #ifdef TCCR4A - case TIMER4C: ++q; - case TIMER4B: ++q; + case TIMER4C: ++q; + case TIMER4B: ++q; case TIMER4A: { Timer timer = { - /*TCCRnQ*/ { &TCCR4A, &TCCR4B, &TCCR4C }, - /*OCRnQ*/ { &OCR4A, &OCR4B, &OCR4C }, - /*ICRn*/ &ICR4, - /*n, q*/ 4, q + { &TCCR4A, &TCCR4B, &TCCR4C }, + { &OCR4A, &OCR4B, &OCR4C }, + &ICR4, + 4, q }; return timer; } #endif + #ifdef TCCR5A - case TIMER5C: ++q; - case TIMER5B: ++q; + case TIMER5C: ++q; + case TIMER5B: ++q; case TIMER5A: { Timer timer = { - /*TCCRnQ*/ { &TCCR5A, &TCCR5B, &TCCR5C }, - /*OCRnQ*/ { &OCR5A, &OCR5B, &OCR5C }, - /*ICRn*/ &ICR5, - /*n, q*/ 5, q + { &TCCR5A, &TCCR5B, &TCCR5C }, + { &OCR5A, &OCR5B, &OCR5C }, + &ICR5, + 5, q }; return timer; } #endif } + Timer timer = { - /*TCCRnQ*/ { nullptr, nullptr, nullptr }, - /*OCRnQ*/ { nullptr, nullptr, nullptr }, - /*ICRn*/ nullptr, - 0, 0 + { nullptr, nullptr, nullptr }, + { nullptr, nullptr, nullptr }, + nullptr, + 0, 0 }; return timer; } -void set_pwm_frequency(const pin_t pin, int f_desired) { +void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { Timer timer = get_pwm_timer(pin); if (timer.n == 0) return; // Don't proceed if protected timer or not recognized uint16_t size; diff --git a/Marlin/src/HAL/AVR/fastio.h b/Marlin/src/HAL/AVR/fastio.h index db6e598b86..51d3b311ee 100644 --- a/Marlin/src/HAL/AVR/fastio.h +++ b/Marlin/src/HAL/AVR/fastio.h @@ -118,7 +118,7 @@ */ // Waveform Generation Modes -enum WaveGenMode : char { +enum WaveGenMode : uint8_t { WGM_NORMAL, // 0 WGM_PWM_PC_8, // 1 WGM_PWM_PC_9, // 2 @@ -138,19 +138,19 @@ enum WaveGenMode : char { }; // Wavefore Generation Modes (Timer 2 only) -enum WaveGenMode2 : char { - WGM2_NORMAL, // 0 - WGM2_PWM_PC, // 1 - WGM2_CTC_OCR2A, // 2 - WGM2_FAST_PWM, // 3 - WGM2_reserved_1, // 4 - WGM2_PWM_PC_OCR2A, // 5 - WGM2_reserved_2, // 6 - WGM2_FAST_PWM_OCR2A, // 7 +enum WaveGenMode2 : uint8_t { + WGM2_NORMAL, // 0 + WGM2_PWM_PC, // 1 + WGM2_CTC_OCR2A, // 2 + WGM2_FAST_PWM, // 3 + WGM2_reserved_1, // 4 + WGM2_PWM_PC_OCR2A, // 5 + WGM2_reserved_2, // 6 + WGM2_FAST_PWM_OCR2A, // 7 }; // Compare Modes -enum CompareMode : char { +enum CompareMode : uint8_t { COM_NORMAL, // 0 COM_TOGGLE, // 1 Non-PWM: OCnx ... Both PWM (WGM 9,11,14,15): OCnA only ... else NORMAL COM_CLEAR_SET, // 2 Non-PWM: OCnx ... Fast PWM: OCnx/Bottom ... PF-FC: OCnx Up/Down @@ -158,7 +158,7 @@ enum CompareMode : char { }; // Clock Sources -enum ClockSource : char { +enum ClockSource : uint8_t { CS_NONE, // 0 CS_PRESCALER_1, // 1 CS_PRESCALER_8, // 2 @@ -170,7 +170,7 @@ enum ClockSource : char { }; // Clock Sources (Timer 2 only) -enum ClockSource2 : char { +enum ClockSource2 : uint8_t { CS2_NONE, // 0 CS2_PRESCALER_1, // 1 CS2_PRESCALER_8, // 2 @@ -203,11 +203,6 @@ enum ClockSource2 : char { TCCR##T##B = (TCCR##T##B & ~(0x3 << WGM##T##2)) | (((int(V) >> 2) & 0x3) << WGM##T##2); \ }while(0) #define SET_WGM(T,V) _SET_WGM(T,WGM_##V) -// Runtime (see set_pwm_frequency): -#define _SET_WGMnQ(TCCRnQ, V) do{ \ - *(TCCRnQ)[0] = (*(TCCRnQ)[0] & ~(0x3 << 0)) | (( int(V) & 0x3) << 0); \ - *(TCCRnQ)[1] = (*(TCCRnQ)[1] & ~(0x3 << 3)) | (((int(V) >> 2) & 0x3) << 3); \ - }while(0) // Set Clock Select bits // Ex: SET_CS3(PRESCALER_64); @@ -235,8 +230,6 @@ enum ClockSource2 : char { #define SET_CS4(V) _SET_CS4(CS_##V) #define SET_CS5(V) _SET_CS5(CS_##V) #define SET_CS(T,V) SET_CS##T(V) -// Runtime (see set_pwm_frequency) -#define _SET_CSn(TCCRnQ, V) (*(TCCRnQ)[1] = (*(TCCRnQ[1]) & ~(0x7 << 0)) | ((int(V) & 0x7) << 0)) // Set Compare Mode bits // Ex: SET_COMS(4,CLEAR_SET,CLEAR_SET,CLEAR_SET); @@ -246,16 +239,6 @@ enum ClockSource2 : char { #define SET_COMB(T,V) SET_COM(T,B,V) #define SET_COMC(T,V) SET_COM(T,C,V) #define SET_COMS(T,V1,V2,V3) do{ SET_COMA(T,V1); SET_COMB(T,V2); SET_COMC(T,V3); }while(0) -// Runtime (see set_pwm_duty) -#define _SET_COMnQ(TCCRnQ, Q, V) (*(TCCRnQ)[0] = (*(TCCRnQ)[0] & ~(0x3 << (6-2*(Q)))) | (int(V) << (6-2*(Q)))) - -// Set OCRnQ register -// Runtime (see set_pwm_duty): -#define _SET_OCRnQ(OCRnQ, Q, V) (*(OCRnQ)[Q] = int(V) & 0xFFFF) - -// Set ICRn register (one per timer) -// Runtime (see set_pwm_frequency) -#define _SET_ICRn(ICRn, V) (*(ICRn) = int(V) & 0xFFFF) // Set Noise Canceler bit // Ex: SET_ICNC(2,1) diff --git a/Marlin/src/HAL/LPC1768/HAL.h b/Marlin/src/HAL/LPC1768/HAL.h index 348ea6b21a..f5e4326983 100644 --- a/Marlin/src/HAL/LPC1768/HAL.h +++ b/Marlin/src/HAL/LPC1768/HAL.h @@ -206,7 +206,7 @@ void flashFirmware(const int16_t); * All Hardware PWM pins run at the same frequency and all * Software PWM pins run at the same frequency */ -void set_pwm_frequency(const pin_t pin, int f_desired); +void set_pwm_frequency(const pin_t pin, const uint16_t f_desired); /** * set_pwm_duty diff --git a/Marlin/src/HAL/LPC1768/fast_pwm.cpp b/Marlin/src/HAL/LPC1768/fast_pwm.cpp index eae0e36b0b..d760cd0fd0 100644 --- a/Marlin/src/HAL/LPC1768/fast_pwm.cpp +++ b/Marlin/src/HAL/LPC1768/fast_pwm.cpp @@ -32,7 +32,7 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 #if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM - void set_pwm_frequency(const pin_t pin, int f_desired) { + void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { LPC176x::pwm_set_frequency(pin, f_desired); } diff --git a/Marlin/src/HAL/STM32/HAL.h b/Marlin/src/HAL/STM32/HAL.h index adaf14223f..9429bb7e7c 100644 --- a/Marlin/src/HAL/STM32/HAL.h +++ b/Marlin/src/HAL/STM32/HAL.h @@ -231,7 +231,7 @@ extern volatile uint32_t systick_uptime_millis; * Set the frequency of the timer corresponding to the provided pin * All Timer PWM pins run at the same frequency */ -void set_pwm_frequency(const pin_t pin, int f_desired); +void set_pwm_frequency(const pin_t pin, const uint16_t f_desired); /** * set_pwm_duty diff --git a/Marlin/src/HAL/STM32/fast_pwm.cpp b/Marlin/src/HAL/STM32/fast_pwm.cpp index b1bea5ce20..f661e11350 100644 --- a/Marlin/src/HAL/STM32/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32/fast_pwm.cpp @@ -56,7 +56,7 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 if (previousMode != TIMER_OUTPUT_COMPARE_PWM1) HT->resume(); } -void set_pwm_frequency(const pin_t pin, int f_desired) { +void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer const PinName pin_name = digitalPinToPinName(pin); TIM_TypeDef * const Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance diff --git a/Marlin/src/HAL/STM32F1/HAL.h b/Marlin/src/HAL/STM32F1/HAL.h index 153cfe8ac8..a766babe15 100644 --- a/Marlin/src/HAL/STM32F1/HAL.h +++ b/Marlin/src/HAL/STM32F1/HAL.h @@ -274,7 +274,7 @@ void flashFirmware(const int16_t); * Set the frequency of the timer corresponding to the provided pin * All Timer PWM pins run at the same frequency */ -void set_pwm_frequency(const pin_t pin, int f_desired); +void set_pwm_frequency(const pin_t pin, const uint16_t f_desired); /** * set_pwm_duty diff --git a/Marlin/src/HAL/STM32F1/fast_pwm.cpp b/Marlin/src/HAL/STM32F1/fast_pwm.cpp index 98d56bc5e9..c783dda606 100644 --- a/Marlin/src/HAL/STM32F1/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32F1/fast_pwm.cpp @@ -51,7 +51,7 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 timer_set_mode(timer, channel, TIMER_PWM); // PWM Output Mode } -void set_pwm_frequency(const pin_t pin, int f_desired) { +void 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); From ab797a0995ffafb85de6b7b09db2bb1ea67ee978 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 10 Jan 2022 20:29:09 -0600 Subject: [PATCH 354/532] =?UTF-8?q?=F0=9F=8E=A8=20Misc.=20spindle/laser=20?= =?UTF-8?q?adjustments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/AVR/inc/SanityCheck.h | 2 +- Marlin/src/HAL/LPC1768/fast_pwm.cpp | 10 +++------- Marlin/src/feature/spindle_laser.cpp | 8 +++----- Marlin/src/lcd/menu/menu_spindle_laser.cpp | 2 +- 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/Marlin/src/HAL/AVR/inc/SanityCheck.h b/Marlin/src/HAL/AVR/inc/SanityCheck.h index 2f80d1fee1..331d0b0464 100644 --- a/Marlin/src/HAL/AVR/inc/SanityCheck.h +++ b/Marlin/src/HAL/AVR/inc/SanityCheck.h @@ -42,7 +42,7 @@ #elif NUM_SERVOS > 0 && defined(_useTimer3) && (WITHIN(SPINDLE_LASER_PWM_PIN, 2, 3) || SPINDLE_LASER_PWM_PIN == 5) #error "Counter/Timer for SPINDLE_LASER_PWM_PIN is used by the servo system." #endif -#elif defined(SPINDLE_LASER_FREQUENCY) +#elif SPINDLE_LASER_FREQUENCY #error "SPINDLE_LASER_FREQUENCY requires SPINDLE_LASER_USE_PWM." #endif diff --git a/Marlin/src/HAL/LPC1768/fast_pwm.cpp b/Marlin/src/HAL/LPC1768/fast_pwm.cpp index d760cd0fd0..ece115aa01 100644 --- a/Marlin/src/HAL/LPC1768/fast_pwm.cpp +++ b/Marlin/src/HAL/LPC1768/fast_pwm.cpp @@ -30,12 +30,8 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 LPC176x::pwm_write_ratio(pin, invert ? 1.0f - (float)v / v_size : (float)v / v_size); // map 1-254 onto PWM range } -#if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM - - void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { - LPC176x::pwm_set_frequency(pin, f_desired); - } - -#endif +void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { + LPC176x::pwm_set_frequency(pin, f_desired); +} #endif // TARGET_LPC1768 diff --git a/Marlin/src/feature/spindle_laser.cpp b/Marlin/src/feature/spindle_laser.cpp index cde2b47d90..9ca7cb948e 100644 --- a/Marlin/src/feature/spindle_laser.cpp +++ b/Marlin/src/feature/spindle_laser.cpp @@ -68,7 +68,7 @@ void SpindleLaser::init() { SET_PWM(SPINDLE_LASER_PWM_PIN); set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // Set to lowest speed #endif - #if ENABLED(HAL_CAN_SET_PWM_FREQ) && defined(SPINDLE_LASER_FREQUENCY) + #if ENABLED(HAL_CAN_SET_PWM_FREQ) && SPINDLE_LASER_FREQUENCY set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_FREQUENCY); TERN_(MARLIN_DEV_MODE, frequency = SPINDLE_LASER_FREQUENCY); #endif @@ -78,9 +78,7 @@ void SpindleLaser::init() { #if ENABLED(AIR_ASSIST) OUT_WRITE(AIR_ASSIST_PIN, !AIR_ASSIST_ACTIVE); // Init Air Assist OFF #endif - #if ENABLED(I2C_AMMETER) - ammeter.init(); // Init I2C Ammeter - #endif + TERN_(I2C_AMMETER, ammeter.init()); // Init I2C Ammeter } #if ENABLED(SPINDLE_LASER_USE_PWM) @@ -90,7 +88,7 @@ void SpindleLaser::init() { * @param ocr Power value */ void SpindleLaser::_set_ocr(const uint8_t ocr) { - #if NEEDS_HARDWARE_PWM && SPINDLE_LASER_FREQUENCY + #if ENABLED(HAL_CAN_SET_PWM_FREQ) && SPINDLE_LASER_FREQUENCY set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), TERN(MARLIN_DEV_MODE, frequency, SPINDLE_LASER_FREQUENCY)); #endif set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF); diff --git a/Marlin/src/lcd/menu/menu_spindle_laser.cpp b/Marlin/src/lcd/menu/menu_spindle_laser.cpp index 26f555ad62..ca3d6f66a6 100644 --- a/Marlin/src/lcd/menu/menu_spindle_laser.cpp +++ b/Marlin/src/lcd/menu/menu_spindle_laser.cpp @@ -74,7 +74,7 @@ ACTION_ITEM(MSG_LASER_FIRE_PULSE, cutter.test_fire_pulse); #endif - #if BOTH(MARLIN_DEV_MODE, HAL_CAN_SET_PWM_FREQ) && defined(SPINDLE_LASER_FREQUENCY) + #if BOTH(MARLIN_DEV_MODE, HAL_CAN_SET_PWM_FREQ) && SPINDLE_LASER_FREQUENCY EDIT_ITEM_FAST(CUTTER_MENU_FREQUENCY_TYPE, MSG_CUTTER_FREQUENCY, &cutter.frequency, 2000, 80000, cutter.refresh_frequency); #endif From 89f13913066341995aab4f7ab62e5d69f9e50bef Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 12 Jan 2022 01:07:56 +0000 Subject: [PATCH 355/532] [cron] Bump distribution date (2022-01-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 4a1146051c..ea25e2e176 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 "2022-01-11" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 377593c2c4..aa2adacb00 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 "2022-01-11" + #define STRING_DISTRIBUTION_DATE "2022-01-12" #endif /** From 24d1d3eb5cc4e7415e77393d35e40fb4124bc672 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 12 Jan 2022 09:47:22 -0600 Subject: [PATCH 356/532] =?UTF-8?q?=F0=9F=92=A1=20Misc.=20cleanup,=20comme?= =?UTF-8?q?nts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/ESP32/HAL.h | 2 +- Marlin/src/gcode/feature/pause/G61.cpp | 2 +- Marlin/src/lcd/TFTGLCD/lcdprint_TFTGLCD.cpp | 4 ++-- Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp | 2 +- Marlin/src/lcd/dogm/status_screen_DOGM.cpp | 2 +- .../extui/anycubic_i3mega/anycubic_i3mega_lcd.cpp | 2 +- Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp | 6 +++--- Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h | 8 ++++---- Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp | 13 +++++-------- Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.h | 10 +++++----- Marlin/src/libs/W25Qxx.cpp | 6 +++--- Marlin/src/libs/W25Qxx.h | 6 +++--- 12 files changed, 30 insertions(+), 33 deletions(-) diff --git a/Marlin/src/HAL/ESP32/HAL.h b/Marlin/src/HAL/ESP32/HAL.h index 8473e3c4e4..78eebc8d82 100644 --- a/Marlin/src/HAL/ESP32/HAL.h +++ b/Marlin/src/HAL/ESP32/HAL.h @@ -139,7 +139,7 @@ inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, // Enable hooks into idle and setup for HAL #define HAL_IDLETASK 1 -#define BOARD_INIT() HAL_init_board(); +#define BOARD_INIT() HAL_init_board() void HAL_idletask(); inline void HAL_init() {} void HAL_init_board(); diff --git a/Marlin/src/gcode/feature/pause/G61.cpp b/Marlin/src/gcode/feature/pause/G61.cpp index 18667501e4..e0e1983a25 100644 --- a/Marlin/src/gcode/feature/pause/G61.cpp +++ b/Marlin/src/gcode/feature/pause/G61.cpp @@ -41,7 +41,7 @@ * * If XYZE are not given, default restore uses the smart blocking move. */ -void GcodeSuite::G61(void) { +void GcodeSuite::G61() { const uint8_t slot = parser.byteval('S'); diff --git a/Marlin/src/lcd/TFTGLCD/lcdprint_TFTGLCD.cpp b/Marlin/src/lcd/TFTGLCD/lcdprint_TFTGLCD.cpp index 106ce76138..d0cf5795d2 100644 --- a/Marlin/src/lcd/TFTGLCD/lcdprint_TFTGLCD.cpp +++ b/Marlin/src/lcd/TFTGLCD/lcdprint_TFTGLCD.cpp @@ -45,7 +45,7 @@ #include -int lcd_glyph_height(void) { return 1; } +int lcd_glyph_height() { return 1; } typedef struct _TFTGLCD_charmap_t { wchar_t uchar; // the unicode char @@ -1119,7 +1119,7 @@ int lcd_put_u8str_max_P(PGM_P utf8_pstr, pixel_len_t max_length) { return 0; } - int test_TFTGLCD_charmap_all(void) { + int test_TFTGLCD_charmap_all() { int flg_error = 0; if (test_TFTGLCD_charmap(g_TFTGLCD_charmap_device, COUNT(g_TFTGLCD_charmap_device), "g_TFTGLCD_charmap_device", 0) < 0) { flg_error = 1; diff --git a/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp b/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp index 420bd7cd66..e9d3c73302 100644 --- a/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp +++ b/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp @@ -265,7 +265,7 @@ void TFTGLCD::setContrast(uint16_t contrast) { extern volatile int8_t encoderDiff; // Read buttons and encoder states -uint8_t MarlinUI::read_slow_buttons(void) { +uint8_t MarlinUI::read_slow_buttons() { if (!PanelDetected) return 0; #if ENABLED(TFTGLCD_PANEL_SPI) uint8_t b = 0; diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp index 52554e5df8..aabca82fde 100644 --- a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp +++ b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp @@ -57,7 +57,7 @@ #include "../../feature/cooler.h" #endif -#if ENABLED(I2C_AMMETER) +#if DO_DRAW_AMMETER #include "../../feature/ammeter.h" #endif 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 98534ba65f..729d4547a8 100644 --- a/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.cpp +++ b/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.cpp @@ -63,7 +63,7 @@ char AnycubicTFTClass::SelectedDirectory[30]; char AnycubicTFTClass::SelectedFile[FILENAME_LENGTH]; // Serial helpers -static void sendNewLine(void) { LCD_SERIAL.write('\r'); LCD_SERIAL.write('\n'); } +static void sendNewLine() { LCD_SERIAL.write('\r'); LCD_SERIAL.write('\n'); } static void send(const char *str) { LCD_SERIAL.print(str); } static void send_P(PGM_P str) { while (const char c = pgm_read_byte(str++)) diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp index 8054181353..695f50852b 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp @@ -1459,7 +1459,7 @@ void DGUSScreenHandler::LanguagePInit() { } } -void DGUSScreenHandler::DGUS_ExtrudeLoadInit(void) { +void DGUSScreenHandler::DGUS_ExtrudeLoadInit() { ex_filament.ex_length = distanceFilament; ex_filament.ex_load_unload_flag = 0; ex_filament.ex_need_time = filamentSpeed_mm_s; @@ -1469,7 +1469,7 @@ void DGUSScreenHandler::DGUS_ExtrudeLoadInit(void) { ex_filament.ex_tick_start = 0; } -void DGUSScreenHandler::DGUS_RunoutInit(void) { +void DGUSScreenHandler::DGUS_RunoutInit() { #if PIN_EXISTS(MT_DET_1) SET_INPUT_PULLUP(MT_DET_1_PIN); #endif @@ -1479,7 +1479,7 @@ void DGUSScreenHandler::DGUS_RunoutInit(void) { runout_mks.runout_status = UNRUNOUT_STATUS; } -void DGUSScreenHandler::DGUS_Runout_Idle(void) { +void DGUSScreenHandler::DGUS_Runout_Idle() { #if ENABLED(DGUS_MKS_RUNOUT_SENSOR) // scanf runout pin switch (runout_mks.runout_status) { diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h index ee423b7bb9..ce557e738f 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h @@ -94,10 +94,10 @@ public: static void DGUS_LanguageDisplay(uint8_t var); static void TMC_ChangeConfig(DGUS_VP_Variable &var, void *val_ptr); static void GetTurnOffCtrl(DGUS_VP_Variable &var, void *val_ptr); - static void LanguagePInit(void); - static void DGUS_Runout_Idle(void); - static void DGUS_RunoutInit(void); - static void DGUS_ExtrudeLoadInit(void); + static void LanguagePInit(); + static void DGUS_Runout_Idle(); + static void DGUS_RunoutInit(); + static void DGUS_ExtrudeLoadInit(); static void LCD_BLK_Adjust(DGUS_VP_Variable &var, void *val_ptr); static void SD_FileBack(DGUS_VP_Variable &var, void *val_ptr); diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp index 1d97902c71..c03f655fba 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp @@ -313,7 +313,7 @@ void DGUSDisplay::ProcessRx() { gcode.reset_stepper_timeout(); if (!vp.size) { - DEBUG_ECHOLN(); + DEBUG_EOL(); vp.rx_handler(vp, nullptr); rx_datagram_state = DGUS_IDLE; @@ -325,18 +325,15 @@ void DGUSDisplay::ProcessRx() { memset(buffer, 0, vp.size); for (uint8_t i = 0; i < dlen; i++) { - if (i >= vp.size) { - break; - } + if (i >= vp.size) break; - if (i + 1 < dlen && tmp[i + 3] == 0xFF && tmp[i + 4] == 0xFF) { + if (i + 1 < dlen && tmp[i + 3] == 0xFF && tmp[i + 4] == 0xFF) break; - } buffer[i] = tmp[i + 3]; } - DEBUG_ECHOLN(); + DEBUG_EOL(); vp.rx_handler(vp, buffer); rx_datagram_state = DGUS_IDLE; @@ -349,7 +346,7 @@ void DGUSDisplay::ProcessRx() { break; } - DEBUG_ECHOLN(); + DEBUG_EOL(); vp.rx_handler(vp, &tmp[3]); rx_datagram_state = DGUS_IDLE; diff --git a/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.h b/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.h index cf32bad396..a7281fed4a 100644 --- a/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.h +++ b/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.h @@ -39,17 +39,17 @@ class WifiSerial { void begin(uint32_t baud); void begin(uint32_t baud, uint8_t config); void end(); - int available(void); - int read(void); + int available(); + int read(); int write(uint8_t); // Interrupt handlers static int _tx_complete_irq(serial_t *obj); static void _rx_complete_irq(serial_t *obj); - void flush(void); - bool isHalfDuplex(void) const; - void enableHalfDuplexRx(void); + void flush(); + bool isHalfDuplex() const; + void enableHalfDuplexRx(); private: void setRx(uint32_t _rx); diff --git a/Marlin/src/libs/W25Qxx.cpp b/Marlin/src/libs/W25Qxx.cpp index b458a7c965..033402d04a 100644 --- a/Marlin/src/libs/W25Qxx.cpp +++ b/Marlin/src/libs/W25Qxx.cpp @@ -133,7 +133,7 @@ uint16_t W25QXXFlash::W25QXX_ReadID(void) { return Temp; } -void W25QXXFlash::SPI_FLASH_WriteEnable(void) { +void W25QXXFlash::SPI_FLASH_WriteEnable() { // Select the FLASH: Chip Select low SPI_FLASH_CS_L(); // Send "Write Enable" instruction @@ -151,7 +151,7 @@ void W25QXXFlash::SPI_FLASH_WriteEnable(void) { * Output : None * Return : None *******************************************************************************/ -void W25QXXFlash::SPI_FLASH_WaitForWriteEnd(void) { +void W25QXXFlash::SPI_FLASH_WaitForWriteEnd() { uint8_t FLASH_Status = 0; // Select the FLASH: Chip Select low @@ -216,7 +216,7 @@ void W25QXXFlash::SPI_FLASH_BlockErase(uint32_t BlockAddr) { * Output : None * Return : None *******************************************************************************/ -void W25QXXFlash::SPI_FLASH_BulkErase(void) { +void W25QXXFlash::SPI_FLASH_BulkErase() { // Send write enable instruction SPI_FLASH_WriteEnable(); diff --git a/Marlin/src/libs/W25Qxx.h b/Marlin/src/libs/W25Qxx.h index 1133af2e74..778463477d 100644 --- a/Marlin/src/libs/W25Qxx.h +++ b/Marlin/src/libs/W25Qxx.h @@ -61,11 +61,11 @@ public: static void spi_flash_Send(uint8_t b); static void spi_flash_SendBlock(uint8_t token, const uint8_t *buf); static uint16_t W25QXX_ReadID(void); - static void SPI_FLASH_WriteEnable(void); - static void SPI_FLASH_WaitForWriteEnd(void); + static void SPI_FLASH_WriteEnable(); + static void SPI_FLASH_WaitForWriteEnd(); static void SPI_FLASH_SectorErase(uint32_t SectorAddr); static void SPI_FLASH_BlockErase(uint32_t BlockAddr); - static void SPI_FLASH_BulkErase(void); + static void SPI_FLASH_BulkErase(); static void SPI_FLASH_PageWrite(uint8_t *pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite); static void SPI_FLASH_BufferWrite(uint8_t *pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite); static void SPI_FLASH_BufferRead(uint8_t *pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead); From 84ed7499546c3631643bb85ed29d21f7d3e27b99 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 12 Jan 2022 09:41:51 -0600 Subject: [PATCH 357/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Mov?= =?UTF-8?q?e=20PB0=20init=20for=20MKS=5FROBIN=5FNANO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lcd/extui/mks_ui/tft_lvgl_configuration.cpp | 4 ---- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h | 4 ++++ .../pins/stm32f1/pins_MKS_ROBIN_NANO_common.h | 17 ++++++++--------- 3 files changed, 12 insertions(+), 13 deletions(-) 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 837d7470d6..f960bdc63c 100644 --- a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp +++ b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp @@ -127,10 +127,6 @@ void tft_lvgl_init() { watchdog_refresh(); // LVGL init takes time - #if MB(MKS_ROBIN_NANO) - OUT_WRITE(PB0, LOW); // HE1 - #endif - // Init TFT first! SPI_TFT.spi_init(SPI_FULL_SPEED); SPI_TFT.LCD_init(); diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h index c729274c54..2d70e72347 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h @@ -45,3 +45,7 @@ //#define LED_PIN PB2 #include "pins_MKS_ROBIN_NANO_common.h" + +#if HAS_TFT_LVGL_UI && FAN1_PIN != PB0 && HEATER_1_PIN != PB0 + #define BOARD_INIT OUT_WRITE(PB0, LOW) +#endif diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h index c1d0e591e9..859529c2c3 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h @@ -98,15 +98,6 @@ #ifndef HEATER_0_PIN #define HEATER_0_PIN PC3 #endif -#if HOTENDS == 1 && DISABLED(HEATERS_PARALLEL) - #ifndef FAN1_PIN - #define FAN1_PIN PB0 - #endif -#else - #ifndef HEATER_1_PIN - #define HEATER_1_PIN PB0 - #endif -#endif #ifndef FAN_PIN #define FAN_PIN PB1 // FAN #endif @@ -114,6 +105,14 @@ #define HEATER_BED_PIN PA0 #endif +#if HOTENDS == 1 && DISABLED(HEATERS_PARALLEL) + #ifndef FAN1_PIN + #define FAN1_PIN PB0 + #endif +#elif !defined(HEATER_1_PIN) + #define HEATER_1_PIN PB0 +#endif + // // Power Supply Control // From a058a8a8b224de5e0878cc009e76a5578350b734 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Thu, 13 Jan 2022 04:53:36 +1300 Subject: [PATCH 358/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Arduino=20build=20?= =?UTF-8?q?issues=20(#23510)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/enhanced/dwin_popup.cpp | 6 ++++++ Marlin/src/module/probe.h | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_popup.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin_popup.cpp index 89909e5c27..cf1ab8c0ad 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin_popup.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin_popup.cpp @@ -27,6 +27,10 @@ * Date: 2021/11/06 */ +#include "../../../inc/MarlinConfigPre.h" + +#if ENABLED(DWIN_CREALITY_LCD_ENHANCED) + #include "dwin.h" #include "dwin_popup.h" @@ -53,3 +57,5 @@ void DWIN_Popup_ConfirmCancel(const uint8_t icon, FSTR_P const fmsg2) { Draw_Select_Highlight(true); DWIN_UpdateLCD(); } + +#endif // DWIN_CREALITY_LCD_ENHANCED diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index 3c97afcb89..d9c50b0125 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -212,14 +212,14 @@ public: // constexpr helpers used in build-time static_asserts, relying on default probe offsets. class build_time { - static constexpr xyz_pos_t default_probe_xyz_offset = + static constexpr xyz_pos_t default_probe_xyz_offset = xyz_pos_t( #if HAS_BED_PROBE NOZZLE_TO_PROBE_OFFSET #else { 0 } #endif - ; - static constexpr xy_pos_t default_probe_xy_offset = { default_probe_xyz_offset.x, default_probe_xyz_offset.y }; + ); + static constexpr xy_pos_t default_probe_xy_offset = xy_pos_t({ default_probe_xyz_offset.x, default_probe_xyz_offset.y }); public: static constexpr bool can_reach(float x, float y) { From 3d79b55c15d26c4181b66d831fca457fb167bc7f Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Thu, 13 Jan 2022 04:57:36 +1300 Subject: [PATCH 359/532] =?UTF-8?q?=F0=9F=9A=91=EF=B8=8F=20Fix=20M105=20re?= =?UTF-8?q?gression=20(#23505)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #23504 --- Marlin/src/module/temperature.cpp | 2 +- Marlin/src/module/temperature.h | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index c3cd4f10d6..0305e5e98e 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -3630,7 +3630,7 @@ void Temperature::isr() { OPTARG(HAS_TEMP_REDUNDANT, const bool include_r/*=false*/) ) { #if HAS_TEMP_HOTEND - print_heater_state(H_E0, degHotend(target_extruder), degTargetHotend(target_extruder) OPTARG(SHOW_TEMP_ADC_VALUES, rawHotendTemp(target_extruder))); + print_heater_state(H_NONE, degHotend(target_extruder), degTargetHotend(target_extruder) OPTARG(SHOW_TEMP_ADC_VALUES, rawHotendTemp(target_extruder))); #endif #if HAS_HEATED_BED print_heater_state(H_BED, degBed(), degTargetBed() OPTARG(SHOW_TEMP_ADC_VALUES, rawBedTemp())); diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index 089694ab4a..5affcf740d 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -56,7 +56,8 @@ typedef enum : int8_t { H_BOARD = HID_BOARD, H_CHAMBER = HID_CHAMBER, H_BED = HID_BED, - H_E0 = HID_E0, H_E1, H_E2, H_E3, H_E4, H_E5, H_E6, H_E7 + H_E0 = HID_E0, H_E1, H_E2, H_E3, H_E4, H_E5, H_E6, H_E7, + H_NONE = -128 } heater_id_t; // PID storage From e16813d713f51bb5c563eb83ecb5e32c0053e16a Mon Sep 17 00:00:00 2001 From: Jim Watson Date: Wed, 12 Jan 2022 16:13:21 +0000 Subject: [PATCH 360/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20SHOW=5FREMAINING?= =?UTF-8?q?=5FTIME=20compile=20(#23503)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/marlinui.h | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index 8134780999..c2b26b6f47 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -293,20 +293,20 @@ public: static void set_progress(const progress_t p) { progress_override = _MIN(p, 100U * (PROGRESS_SCALE)); } static void set_progress_done() { progress_override = (PROGRESS_MASK + 1U) + 100U * (PROGRESS_SCALE); } static void progress_reset() { if (progress_override & (PROGRESS_MASK + 1U)) set_progress(0); } - #if ENABLED(SHOW_REMAINING_TIME) - static uint32_t _calculated_remaining_time() { - const duration_t elapsed = print_job_timer.duration(); - const progress_t progress = _get_progress(); - return progress ? elapsed.value * (100 * (PROGRESS_SCALE) - progress) / progress : 0; - } - #if ENABLED(USE_M73_REMAINING_TIME) - static uint32_t remaining_time; - FORCE_INLINE static void set_remaining_time(const uint32_t r) { remaining_time = r; } - FORCE_INLINE static uint32_t get_remaining_time() { return remaining_time ?: _calculated_remaining_time(); } - FORCE_INLINE static void reset_remaining_time() { set_remaining_time(0); } - #else - FORCE_INLINE static uint32_t get_remaining_time() { return _calculated_remaining_time(); } - #endif + #endif + #if ENABLED(SHOW_REMAINING_TIME) + static uint32_t _calculated_remaining_time() { + const duration_t elapsed = print_job_timer.duration(); + const progress_t progress = _get_progress(); + return progress ? elapsed.value * (100 * (PROGRESS_SCALE) - progress) / progress : 0; + } + #if ENABLED(USE_M73_REMAINING_TIME) + static uint32_t remaining_time; + FORCE_INLINE static void set_remaining_time(const uint32_t r) { remaining_time = r; } + FORCE_INLINE static uint32_t get_remaining_time() { return remaining_time ?: _calculated_remaining_time(); } + FORCE_INLINE static void reset_remaining_time() { set_remaining_time(0); } + #else + FORCE_INLINE static uint32_t get_remaining_time() { return _calculated_remaining_time(); } #endif #endif static progress_t _get_progress(); From 9086082c1f3f0b36311395d459559015576fdadf Mon Sep 17 00:00:00 2001 From: Lefteris Garyfalakis <46350667+lefterisgar@users.noreply.github.com> Date: Wed, 12 Jan 2022 18:22:00 +0200 Subject: [PATCH 361/532] =?UTF-8?q?=F0=9F=9A=B8=20Fix=20E3V2=20Enhanced=20?= =?UTF-8?q?UI=20time=20labels=20(#23502)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/language/language_en.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 12430ed4c0..bb69aad432 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -456,6 +456,7 @@ namespace Language_en { LSTR MSG_PRINT_PAUSED = _UxGT("Print Paused"); LSTR MSG_PRINTING = _UxGT("Printing..."); LSTR MSG_STOPPING = _UxGT("Stopping..."); + LSTR MSG_REMAINING_TIME = _UxGT("Remaining"); LSTR MSG_PRINT_ABORTED = _UxGT("Print Aborted"); LSTR MSG_PRINT_DONE = _UxGT("Print Done"); LSTR MSG_NO_MOVE = _UxGT("No Move."); @@ -595,12 +596,11 @@ namespace Language_en { #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("No media inserted."); - LSTR MSG_REMAINING_TIME = _UxGT("Remaining time"); LSTR MSG_PLEASE_WAIT_REBOOT = _UxGT("Please wait until reboot. "); LSTR MSG_PLEASE_PREHEAT = _UxGT("Please preheat the hot end."); LSTR MSG_INFO_PRINT_COUNT_RESET = _UxGT("Reset Print Count"); LSTR MSG_INFO_PRINT_COUNT = _UxGT("Print Count"); - LSTR MSG_INFO_PRINT_TIME = _UxGT("Total Print Time"); + LSTR MSG_INFO_PRINT_TIME = _UxGT("Print Time"); LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Longest Job Time"); LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded Total"); LSTR MSG_COLORS_GET = _UxGT("Get Color"); @@ -616,7 +616,6 @@ namespace Language_en { LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("No Media"); LSTR MSG_PLEASE_PREHEAT = _UxGT("Please Preheat"); LSTR MSG_INFO_PRINT_COUNT = _UxGT("Prints"); - LSTR MSG_REMAINING_TIME = _UxGT("Remaining"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Total"); LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Longest"); LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded"); From 3e2a38b653b1d8479b7b38447d5fdff51ea9947f Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Wed, 12 Jan 2022 08:24:56 -0800 Subject: [PATCH 362/532] =?UTF-8?q?=F0=9F=93=9D=20KHz=20=3D>=20kHz=20(#235?= =?UTF-8?q?12)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 12 ++++++------ Marlin/src/HAL/AVR/fastio.cpp | 4 ++-- Marlin/src/HAL/DUE/HAL_SPI.cpp | 6 +++--- Marlin/src/HAL/DUE/fastio/G2_PWM.cpp | 2 +- Marlin/src/HAL/DUE/pinsDebug.h | 2 +- Marlin/src/HAL/DUE/timers.cpp | 2 +- Marlin/src/HAL/DUE/usb/genclk.h | 6 +++--- Marlin/src/HAL/DUE/usb/osc.h | 12 ++++++------ Marlin/src/HAL/DUE/usb/sysclk.h | 6 +++--- Marlin/src/HAL/DUE/watchdog.cpp | 2 +- Marlin/src/HAL/ESP32/i2s.cpp | 2 +- Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.c | 2 +- Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.h | 2 +- Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.cpp | 2 +- Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.h | 2 +- Marlin/src/HAL/SAMD51/timers.cpp | 2 +- Marlin/src/HAL/STM32/sdio.cpp | 2 +- Marlin/src/HAL/STM32/timers.h | 2 +- Marlin/src/HAL/STM32F1/timers.cpp | 2 +- Marlin/src/HAL/TEENSY31_32/timers.h | 2 +- Marlin/src/HAL/TEENSY35_36/timers.h | 2 +- Marlin/src/HAL/shared/HAL_SPI.h | 6 +++--- Marlin/src/feature/digipot/digipot_mcp4451.cpp | 2 +- Marlin/src/gcode/config/M672.cpp | 2 +- Marlin/src/gcode/control/M3-M5.cpp | 2 +- Marlin/src/module/endstops.cpp | 4 ++-- Marlin/src/module/planner.cpp | 2 +- Marlin/src/module/planner.h | 2 +- Marlin/src/module/temperature.cpp | 6 +++--- .../variants/MARLIN_F103VE_LONGER/hal_conf_custom.h | 2 +- 30 files changed, 52 insertions(+), 52 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 569ff1bf08..cf54cff991 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -561,7 +561,7 @@ * FAST_PWM_FAN_FREQUENCY * Set this to your desired frequency. * For AVR, if left undefined this defaults to F = F_CPU/(2*255*1) - * i.e., F = 31.4KHz on 16MHz microcontrollers or F = 39.2KHz on 20MHz microcontrollers. + * i.e., F = 31.4kHz on 16MHz microcontrollers or F = 39.2kHz on 20MHz microcontrollers. * For non AVR, if left undefined this defaults to F = 1Khz. * This F value is only to protect the hardware from an absence of configuration * and not to complete it when users are not aware that the frequency must be specifically set to support the target board. @@ -571,8 +571,8 @@ * * USE_OCR2A_AS_TOP [undefined by default] * Boards that use TIMER2 for PWM have limitations resulting in only a few possible frequencies on TIMER2: - * 16MHz MCUs: [62.5KHz, 31.4KHz (default), 7.8KHz, 3.92KHz, 1.95KHz, 977Hz, 488Hz, 244Hz, 60Hz, 122Hz, 30Hz] - * 20MHz MCUs: [78.1KHz, 39.2KHz (default), 9.77KHz, 4.9KHz, 2.44KHz, 1.22KHz, 610Hz, 305Hz, 153Hz, 76Hz, 38Hz] + * 16MHz MCUs: [62.5kHz, 31.4kHz (default), 7.8kHz, 3.92kHz, 1.95kHz, 977Hz, 488Hz, 244Hz, 60Hz, 122Hz, 30Hz] + * 20MHz MCUs: [78.1kHz, 39.2kHz (default), 9.77kHz, 4.9kHz, 2.44kHz, 1.22kHz, 610Hz, 305Hz, 153Hz, 76Hz, 38Hz] * A greater range can be achieved by enabling USE_OCR2A_AS_TOP. But note that this option blocks the use of * PWM on pin OC2A. Only use this option if you don't need PWM on 0C2A. (Check your schematic.) * USE_OCR2A_AS_TOP sacrifices duty cycle control resolution to achieve this broader range of frequencies. @@ -1179,7 +1179,7 @@ /** * Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies - * below 1KHz (for AVR) or 10KHz (for ARM), where aliasing between axes in multi-axis moves causes audible + * below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible * vibration and surface artifacts. The algorithm adapts to provide the best possible step smoothing at the * lowest stepping frequencies. */ @@ -3419,14 +3419,14 @@ /** * PHOTO_PULSES_US may need adjustment depending on board and camera model. - * Pin must be running at 48.4KHz. + * Pin must be running at 48.4kHz. * Be sure to use a PHOTOGRAPH_PIN which can rise and fall quick enough. * (e.g., MKS SBase temp sensor pin was too slow, so used P1.23 on J8.) * * Example pulse data for Nikon: https://bit.ly/2FKD0Aq * IR Wiring: https://git.io/JvJf7 */ - //#define PHOTO_PULSES_US { 2000, 27850, 400, 1580, 400, 3580, 400 } // (µs) Durations for each 48.4KHz oscillation + //#define PHOTO_PULSES_US { 2000, 27850, 400, 1580, 400, 3580, 400 } // (µs) Durations for each 48.4kHz oscillation #ifdef PHOTO_PULSES_US #define PHOTO_PULSE_DELAY_US 13 // (µs) Approximate duration of each HIGH and LOW pulse in the oscillation #endif diff --git a/Marlin/src/HAL/AVR/fastio.cpp b/Marlin/src/HAL/AVR/fastio.cpp index 8af3ef805e..5083893ae3 100644 --- a/Marlin/src/HAL/AVR/fastio.cpp +++ b/Marlin/src/HAL/AVR/fastio.cpp @@ -245,7 +245,7 @@ uint16_t set_pwm_frequency_hz(const_float_t hz, const float dca, const float dcb float count = 0; if (hz > 0 && (dca || dcb || dcc)) { count = float(F_CPU) / hz; // 1x prescaler, TOP for 16MHz base freq. - uint16_t prescaler; // Range of 30.5Hz (65535) 64.5KHz (>31) + uint16_t prescaler; // Range of 30.5Hz (65535) 64.5kHz (>31) if (count >= 255. * 256.) { prescaler = 1024; SET_CS(5, PRESCALER_1024); } else if (count >= 255. * 64.) { prescaler = 256; SET_CS(5, PRESCALER_256); } @@ -277,7 +277,7 @@ uint16_t set_pwm_frequency_hz(const_float_t hz, const float dca, const float dcb // Restore the default for Timer 5 SET_WGM(5, PWM_PC_8); // PWM 8-bit (Phase Correct) SET_COMS(5, NORMAL, NORMAL, NORMAL); // Do nothing - SET_CS(5, PRESCALER_64); // 16MHz / 64 = 250KHz + SET_CS(5, PRESCALER_64); // 16MHz / 64 = 250kHz OCR5A = OCR5B = OCR5C = 0; } return round(count); diff --git a/Marlin/src/HAL/DUE/HAL_SPI.cpp b/Marlin/src/HAL/DUE/HAL_SPI.cpp index 2b613a45ba..c5e8f2433d 100644 --- a/Marlin/src/HAL/DUE/HAL_SPI.cpp +++ b/Marlin/src/HAL/DUE/HAL_SPI.cpp @@ -491,9 +491,9 @@ * 1 : 4 - 5 MHz * 2 : 2 - 2.5 MHz * 3 : 1 - 1.25 MHz - * 4 : 500 - 625 KHz - * 5 : 250 - 312 KHz - * 6 : 125 - 156 KHz + * 4 : 500 - 625 kHz + * 5 : 250 - 312 kHz + * 6 : 125 - 156 kHz */ void spiInit(uint8_t spiRate) { switch (spiRate) { diff --git a/Marlin/src/HAL/DUE/fastio/G2_PWM.cpp b/Marlin/src/HAL/DUE/fastio/G2_PWM.cpp index d9fbabce21..800915ff69 100644 --- a/Marlin/src/HAL/DUE/fastio/G2_PWM.cpp +++ b/Marlin/src/HAL/DUE/fastio/G2_PWM.cpp @@ -25,7 +25,7 @@ * is NOT used to directly toggle pins. The ISR writes to the pin assigned to * that interrupt. * - * All PWMs use the same repetition rate. The G2 needs about 10KHz min in order to + * All PWMs use the same repetition rate. The G2 needs about 10kHz min in order to * not have obvious ripple on the Vref signals. * * The data structures are setup to minimize the computation done by the ISR which diff --git a/Marlin/src/HAL/DUE/pinsDebug.h b/Marlin/src/HAL/DUE/pinsDebug.h index f01c53c8ce..6c08585974 100644 --- a/Marlin/src/HAL/DUE/pinsDebug.h +++ b/Marlin/src/HAL/DUE/pinsDebug.h @@ -53,7 +53,7 @@ * The net result is that both the g_pinStatus[pin] array and the PIO_OSR register * needs to be looked at when determining if a pin is an input or an output. * - * b) Due has only pins 6, 7, 8 & 9 enabled for PWMs. FYI - they run at 1KHz + * b) Due has only pins 6, 7, 8 & 9 enabled for PWMs. FYI - they run at 1kHz * * c) NUM_DIGITAL_PINS does not include the analog pins * diff --git a/Marlin/src/HAL/DUE/timers.cpp b/Marlin/src/HAL/DUE/timers.cpp index 6555edece3..a7bf7fbd6d 100644 --- a/Marlin/src/HAL/DUE/timers.cpp +++ b/Marlin/src/HAL/DUE/timers.cpp @@ -62,7 +62,7 @@ const tTimerConfig timer_config[NUM_HARDWARE_TIMERS] = { Timer_clock1: Prescaler 2 -> 42MHz Timer_clock2: Prescaler 8 -> 10.5MHz Timer_clock3: Prescaler 32 -> 2.625MHz - Timer_clock4: Prescaler 128 -> 656.25KHz + Timer_clock4: Prescaler 128 -> 656.25kHz */ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { diff --git a/Marlin/src/HAL/DUE/usb/genclk.h b/Marlin/src/HAL/DUE/usb/genclk.h index 9831701f83..cde03bc0d1 100644 --- a/Marlin/src/HAL/DUE/usb/genclk.h +++ b/Marlin/src/HAL/DUE/usb/genclk.h @@ -74,9 +74,9 @@ extern "C" { //@{ enum genclk_source { - GENCLK_PCK_SRC_SLCK_RC = 0, //!< Internal 32KHz RC oscillator as PCK source clock - GENCLK_PCK_SRC_SLCK_XTAL = 1, //!< External 32KHz crystal oscillator as PCK source clock - GENCLK_PCK_SRC_SLCK_BYPASS = 2, //!< External 32KHz bypass oscillator as PCK source clock + GENCLK_PCK_SRC_SLCK_RC = 0, //!< Internal 32kHz RC oscillator as PCK source clock + GENCLK_PCK_SRC_SLCK_XTAL = 1, //!< External 32kHz crystal oscillator as PCK source clock + GENCLK_PCK_SRC_SLCK_BYPASS = 2, //!< External 32kHz bypass oscillator as PCK source clock GENCLK_PCK_SRC_MAINCK_4M_RC = 3, //!< Internal 4MHz RC oscillator as PCK source clock GENCLK_PCK_SRC_MAINCK_8M_RC = 4, //!< Internal 8MHz RC oscillator as PCK source clock GENCLK_PCK_SRC_MAINCK_12M_RC = 5, //!< Internal 12MHz RC oscillator as PCK source clock diff --git a/Marlin/src/HAL/DUE/usb/osc.h b/Marlin/src/HAL/DUE/usb/osc.h index 06f59c676a..953bcbbed1 100644 --- a/Marlin/src/HAL/DUE/usb/osc.h +++ b/Marlin/src/HAL/DUE/usb/osc.h @@ -93,9 +93,9 @@ extern "C" { //! \name Oscillator identifiers //@{ -#define OSC_SLCK_32K_RC 0 //!< Internal 32KHz RC oscillator. -#define OSC_SLCK_32K_XTAL 1 //!< External 32KHz crystal oscillator. -#define OSC_SLCK_32K_BYPASS 2 //!< External 32KHz bypass oscillator. +#define OSC_SLCK_32K_RC 0 //!< Internal 32kHz RC oscillator. +#define OSC_SLCK_32K_XTAL 1 //!< External 32kHz crystal oscillator. +#define OSC_SLCK_32K_BYPASS 2 //!< External 32kHz bypass oscillator. #define OSC_MAINCK_4M_RC 3 //!< Internal 4MHz RC oscillator. #define OSC_MAINCK_8M_RC 4 //!< Internal 8MHz RC oscillator. #define OSC_MAINCK_12M_RC 5 //!< Internal 12MHz RC oscillator. @@ -105,9 +105,9 @@ extern "C" { //! \name Oscillator clock speed in hertz //@{ -#define OSC_SLCK_32K_RC_HZ CHIP_FREQ_SLCK_RC //!< Internal 32KHz RC oscillator. -#define OSC_SLCK_32K_XTAL_HZ BOARD_FREQ_SLCK_XTAL //!< External 32KHz crystal oscillator. -#define OSC_SLCK_32K_BYPASS_HZ BOARD_FREQ_SLCK_BYPASS //!< External 32KHz bypass oscillator. +#define OSC_SLCK_32K_RC_HZ CHIP_FREQ_SLCK_RC //!< Internal 32kHz RC oscillator. +#define OSC_SLCK_32K_XTAL_HZ BOARD_FREQ_SLCK_XTAL //!< External 32kHz crystal oscillator. +#define OSC_SLCK_32K_BYPASS_HZ BOARD_FREQ_SLCK_BYPASS //!< External 32kHz bypass oscillator. #define OSC_MAINCK_4M_RC_HZ CHIP_FREQ_MAINCK_RC_4MHZ //!< Internal 4MHz RC oscillator. #define OSC_MAINCK_8M_RC_HZ CHIP_FREQ_MAINCK_RC_8MHZ //!< Internal 8MHz RC oscillator. #define OSC_MAINCK_12M_RC_HZ CHIP_FREQ_MAINCK_RC_12MHZ //!< Internal 12MHz RC oscillator. diff --git a/Marlin/src/HAL/DUE/usb/sysclk.h b/Marlin/src/HAL/DUE/usb/sysclk.h index 4398cc0fc9..16db8c86d3 100644 --- a/Marlin/src/HAL/DUE/usb/sysclk.h +++ b/Marlin/src/HAL/DUE/usb/sysclk.h @@ -156,9 +156,9 @@ extern "C" { //! \name Master Clock Sources (MCK) //@{ -#define SYSCLK_SRC_SLCK_RC 0 //!< Internal 32KHz RC oscillator as master source clock -#define SYSCLK_SRC_SLCK_XTAL 1 //!< External 32KHz crystal oscillator as master source clock -#define SYSCLK_SRC_SLCK_BYPASS 2 //!< External 32KHz bypass oscillator as master source clock +#define SYSCLK_SRC_SLCK_RC 0 //!< Internal 32kHz RC oscillator as master source clock +#define SYSCLK_SRC_SLCK_XTAL 1 //!< External 32kHz crystal oscillator as master source clock +#define SYSCLK_SRC_SLCK_BYPASS 2 //!< External 32kHz bypass oscillator as master source clock #define SYSCLK_SRC_MAINCK_4M_RC 3 //!< Internal 4MHz RC oscillator as master source clock #define SYSCLK_SRC_MAINCK_8M_RC 4 //!< Internal 8MHz RC oscillator as master source clock #define SYSCLK_SRC_MAINCK_12M_RC 5 //!< Internal 12MHz RC oscillator as master source clock diff --git a/Marlin/src/HAL/DUE/watchdog.cpp b/Marlin/src/HAL/DUE/watchdog.cpp index 6cbf39d1d1..e144db8291 100644 --- a/Marlin/src/HAL/DUE/watchdog.cpp +++ b/Marlin/src/HAL/DUE/watchdog.cpp @@ -39,7 +39,7 @@ void watchdogSetup() { uint32_t timeout = TERN(WATCHDOG_DURATION_8S, 8000, 4000); // Calculate timeout value in WDT counter ticks: This assumes - // the slow clock is running at 32.768 KHz watchdog + // the slow clock is running at 32.768 kHz watchdog // frequency is therefore 32768 / 128 = 256 Hz timeout = (timeout << 8) / 1000; if (timeout == 0) diff --git a/Marlin/src/HAL/ESP32/i2s.cpp b/Marlin/src/HAL/ESP32/i2s.cpp index e9f418689e..3e77b65836 100644 --- a/Marlin/src/HAL/ESP32/i2s.cpp +++ b/Marlin/src/HAL/ESP32/i2s.cpp @@ -176,7 +176,7 @@ int i2s_init() { * * fwclk = fbclk / 32 * - * for fwclk = 250KHz (4µS pulse time) + * for fwclk = 250kHz (4µS pulse time) * N = 10 * M = 20 */ diff --git a/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.c b/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.c index bb203cf8d4..466fc80203 100644 --- a/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.c +++ b/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.c @@ -26,7 +26,7 @@ * These are based on the LPC1768 pinMode, digitalRead & digitalWrite routines. * * Couldn't just call exact copies because the overhead killed the LCD update speed - * With an intermediate level the softspi was running in the 10-20KHz range which + * With an intermediate level the softspi was running in the 10-20kHz range which * resulted in using about about 25% of the CPU's time. */ diff --git a/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.h b/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.h index 4661202e8a..d60d93dadd 100644 --- a/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.h +++ b/Marlin/src/HAL/LPC1768/u8g/LCD_pin_routines.h @@ -27,7 +27,7 @@ * These are based on the LPC1768 pinMode, digitalRead & digitalWrite routines. * * Couldn't just call exact copies because the overhead killed the LCD update speed - * With an intermediate level the softspi was running in the 10-20KHz range which + * With an intermediate level the softspi was running in the 10-20kHz range which * resulted in using about about 25% of the CPU's time. */ diff --git a/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.cpp b/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.cpp index 69ea291724..3b5acc1656 100644 --- a/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.cpp +++ b/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.cpp @@ -26,7 +26,7 @@ * These are based on the LPC1768 pinMode, digitalRead & digitalWrite routines. * * Couldn't just call exact copies because the overhead killed the LCD update speed - * With an intermediate level the softspi was running in the 10-20KHz range which + * With an intermediate level the softspi was running in the 10-20kHz range which * resulted in using about about 25% of the CPU's time. */ diff --git a/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.h b/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.h index 3c959cd491..c27c84e8c3 100644 --- a/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.h +++ b/Marlin/src/HAL/NATIVE_SIM/u8g/LCD_pin_routines.h @@ -27,7 +27,7 @@ * These are based on the LPC1768 pinMode, digitalRead & digitalWrite routines. * * Couldn't just call exact copies because the overhead killed the LCD update speed - * With an intermediate level the softspi was running in the 10-20KHz range which + * With an intermediate level the softspi was running in the 10-20kHz range which * resulted in using about about 25% of the CPU's time. */ diff --git a/Marlin/src/HAL/SAMD51/timers.cpp b/Marlin/src/HAL/SAMD51/timers.cpp index ce13dd231e..1ad0e36073 100644 --- a/Marlin/src/HAL/SAMD51/timers.cpp +++ b/Marlin/src/HAL/SAMD51/timers.cpp @@ -79,7 +79,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { rtc->MODE0.INTENCLR.reg = RTC_MODE0_INTENCLR_CMP0; // RTC clock setup - OSC32KCTRL->RTCCTRL.reg = OSC32KCTRL_RTCCTRL_RTCSEL_XOSC32K; // External 32.768KHz oscillator + OSC32KCTRL->RTCCTRL.reg = OSC32KCTRL_RTCCTRL_RTCSEL_XOSC32K; // External 32.768kHz oscillator // Stop timer, just in case, to be able to reconfigure it rtc->MODE0.CTRLA.bit.ENABLE = false; diff --git a/Marlin/src/HAL/STM32/sdio.cpp b/Marlin/src/HAL/STM32/sdio.cpp index 18b4434dfa..0af5f9040e 100644 --- a/Marlin/src/HAL/STM32/sdio.cpp +++ b/Marlin/src/HAL/STM32/sdio.cpp @@ -59,7 +59,7 @@ DMA_HandleTypeDef hdma_sdio; /* SDIO_INIT_CLK_DIV is 118 SDIO clock frequency is 48MHz / (TRANSFER_CLOCK_DIV + 2) - SDIO init clock frequency should not exceed 400KHz = 48MHz / (118 + 2) + SDIO init clock frequency should not exceed 400kHz = 48MHz / (118 + 2) Default TRANSFER_CLOCK_DIV is 2 (118 / 40) Default SDIO clock frequency is 48MHz / (2 + 2) = 12 MHz diff --git a/Marlin/src/HAL/STM32/timers.h b/Marlin/src/HAL/STM32/timers.h index 37512da959..aad543229e 100644 --- a/Marlin/src/HAL/STM32/timers.h +++ b/Marlin/src/HAL/STM32/timers.h @@ -48,7 +48,7 @@ #define TIMER_INDEX_(T) TIMER##T##_INDEX // TIMER#_INDEX enums (timer_index_t) depend on TIM#_BASE defines. #define TIMER_INDEX(T) TIMER_INDEX_(T) // Convert Timer ID to HardwareTimer_Handle index. -#define TEMP_TIMER_FREQUENCY 1000 // Temperature::isr() is expected to be called at around 1KHz +#define TEMP_TIMER_FREQUENCY 1000 // Temperature::isr() is expected to be called at around 1kHz // TODO: get rid of manual rate/prescale/ticks/cycles taken for procedures in stepper.cpp #define STEPPER_TIMER_RATE 2000000 // 2 Mhz diff --git a/Marlin/src/HAL/STM32F1/timers.cpp b/Marlin/src/HAL/STM32F1/timers.cpp index f00ac9e3fb..112c730b9a 100644 --- a/Marlin/src/HAL/STM32F1/timers.cpp +++ b/Marlin/src/HAL/STM32F1/timers.cpp @@ -40,7 +40,7 @@ * Timer_clock1: Prescaler 2 -> 36 MHz * Timer_clock2: Prescaler 8 -> 9 MHz * Timer_clock3: Prescaler 32 -> 2.25 MHz - * Timer_clock4: Prescaler 128 -> 562.5 KHz + * Timer_clock4: Prescaler 128 -> 562.5 kHz */ /** diff --git a/Marlin/src/HAL/TEENSY31_32/timers.h b/Marlin/src/HAL/TEENSY31_32/timers.h index 85381ea481..3b073d63ab 100644 --- a/Marlin/src/HAL/TEENSY31_32/timers.h +++ b/Marlin/src/HAL/TEENSY31_32/timers.h @@ -41,7 +41,7 @@ typedef uint32_t hal_timer_t; #define FTM0_TIMER_PRESCALE_BITS 0b011 #define FTM1_TIMER_PRESCALE_BITS 0b010 -#define FTM0_TIMER_RATE (F_BUS / (FTM0_TIMER_PRESCALE)) // 60MHz / 8 = 7500KHz +#define FTM0_TIMER_RATE (F_BUS / (FTM0_TIMER_PRESCALE)) // 60MHz / 8 = 7500kHz #define FTM1_TIMER_RATE (F_BUS / (FTM1_TIMER_PRESCALE)) // 60MHz / 4 = 15MHz #define HAL_TIMER_RATE (FTM0_TIMER_RATE) diff --git a/Marlin/src/HAL/TEENSY35_36/timers.h b/Marlin/src/HAL/TEENSY35_36/timers.h index 63ec5e4895..6c342bbe0d 100644 --- a/Marlin/src/HAL/TEENSY35_36/timers.h +++ b/Marlin/src/HAL/TEENSY35_36/timers.h @@ -40,7 +40,7 @@ typedef uint32_t hal_timer_t; #define FTM0_TIMER_PRESCALE_BITS 0b011 #define FTM1_TIMER_PRESCALE_BITS 0b010 -#define FTM0_TIMER_RATE (F_BUS / FTM0_TIMER_PRESCALE) // 60MHz / 8 = 7500KHz +#define FTM0_TIMER_RATE (F_BUS / FTM0_TIMER_PRESCALE) // 60MHz / 8 = 7500kHz #define FTM1_TIMER_RATE (F_BUS / FTM1_TIMER_PRESCALE) // 60MHz / 4 = 15MHz #define HAL_TIMER_RATE (FTM0_TIMER_RATE) diff --git a/Marlin/src/HAL/shared/HAL_SPI.h b/Marlin/src/HAL/shared/HAL_SPI.h index 50a2bf9df2..6611f9ec4e 100644 --- a/Marlin/src/HAL/shared/HAL_SPI.h +++ b/Marlin/src/HAL/shared/HAL_SPI.h @@ -38,9 +38,9 @@ * 1 : 4 - 5 MHz * 2 : 2 - 2.5 MHz * 3 : 1 - 1.25 MHz - * 4 : 500 - 625 KHz - * 5 : 250 - 312 KHz - * 6 : 125 - 156 KHz + * 4 : 500 - 625 kHz + * 5 : 250 - 312 kHz + * 6 : 125 - 156 kHz * * On AVR, actual speed is F_CPU/2^(1 + index). * On other platforms, speed should be in range given above where possible. diff --git a/Marlin/src/feature/digipot/digipot_mcp4451.cpp b/Marlin/src/feature/digipot/digipot_mcp4451.cpp index f59e0aae80..ba5ecdad05 100644 --- a/Marlin/src/feature/digipot/digipot_mcp4451.cpp +++ b/Marlin/src/feature/digipot/digipot_mcp4451.cpp @@ -82,7 +82,7 @@ void DigipotI2C::set_current(const uint8_t channel, const float current) { void DigipotI2C::init() { #if MB(MKS_SBASE) - configure_i2c(16); // Set clock_option to 16 ensure I2C is initialized at 400KHz + configure_i2c(16); // Set clock_option to 16 ensure I2C is initialized at 400kHz #else Wire.begin(); #endif diff --git a/Marlin/src/gcode/config/M672.cpp b/Marlin/src/gcode/config/M672.cpp index af74230516..257b49471f 100644 --- a/Marlin/src/gcode/config/M672.cpp +++ b/Marlin/src/gcode/config/M672.cpp @@ -53,7 +53,7 @@ // b7 b6 b5 b4 ~b4 ... hi bits, NOT last bit // b3 b2 b1 b0 ~b0 ... lo bits, NOT last bit // -void M672_send(uint8_t b) { // bit rate requirement: 1KHz +/- 30% +void M672_send(uint8_t b) { // bit rate requirement: 1kHz +/- 30% LOOP_L_N(bits, 14) { switch (bits) { default: { OUT_WRITE(SMART_EFFECTOR_MOD_PIN, !!(b & 0x80)); b <<= 1; break; } // send bit, shift next into place diff --git a/Marlin/src/gcode/control/M3-M5.cpp b/Marlin/src/gcode/control/M3-M5.cpp index ddbbc4ab68..2cf22e81ce 100644 --- a/Marlin/src/gcode/control/M3-M5.cpp +++ b/Marlin/src/gcode/control/M3-M5.cpp @@ -43,7 +43,7 @@ * * If no PWM pin is defined then M3/M4 just turns it on. * - * At least 12.8KHz (50Hz * 256) is needed for Spindle PWM. + * At least 12.8kHz (50Hz * 256) is needed for Spindle PWM. * Hardware PWM is required on AVR. ISRs are too slow. * * NOTE: WGM for timers 3, 4, and 5 must be either Mode 1 or Mode 5. diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index b9c5aebf39..939dd6d537 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -352,7 +352,7 @@ void Endstops::init() { } // Endstops::init -// Called at ~1KHz from Temperature ISR: Poll endstop state if required +// Called at ~1kHz from Temperature ISR: Poll endstop state if required void Endstops::poll() { TERN_(PINS_DEBUGGING, run_monitor()); // Report changes in endstop status @@ -403,7 +403,7 @@ void Endstops::not_homing() { void Endstops::resync() { if (!abort_enabled()) return; // If endstops/probes are disabled the loop below can hang - // Wait for Temperature ISR to run at least once (runs at 1KHz) + // Wait for Temperature ISR to run at least once (runs at 1kHz) TERN(ENDSTOP_INTERRUPTS_FEATURE, update(), safe_delay(2)); while (TERN0(ENDSTOP_NOISE_THRESHOLD, endstop_poll_count)) safe_delay(1); } diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 1f10aba01b..17d279cfa5 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -2495,7 +2495,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, if (extruder_advance_K[active_extruder] * block->e_D_ratio * block->acceleration * 2 < SQRT(block->nominal_speed_sqr) * block->e_D_ratio) SERIAL_ECHOLNPGM("More than 2 steps per eISR loop executed."); if (block->advance_speed < 200) - SERIAL_ECHOLNPGM("eISR running at > 10KHz."); + SERIAL_ECHOLNPGM("eISR running at > 10kHz."); #endif } #endif diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index b83c445260..380c35755c 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -883,7 +883,7 @@ class Planner { static void finish_and_disable(); // Periodic handler to manage the cleaning buffer counter - // Called from the Temperature ISR at ~1KHz + // Called from the Temperature ISR at ~1kHz static void isr() { if (cleaning_buffer_counter) --cleaning_buffer_counter; } /** diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 0305e5e98e..bb1768054e 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -3046,8 +3046,8 @@ public: }; /** - * Handle various ~1KHz tasks associated with temperature - * - Heater PWM (~1KHz with scaler) + * Handle various ~1kHz tasks associated with temperature + * - Heater PWM (~1kHz with scaler) * - LCD Button polling (~500Hz) * - Start / Read one ADC sensor * - Advance Babysteps @@ -3549,7 +3549,7 @@ void Temperature::isr() { adc_sensor_state = next_sensor_state; // - // Additional ~1KHz Tasks + // Additional ~1kHz Tasks // #if ENABLED(BABYSTEPPING) && DISABLED(INTEGRATED_BABYSTEPPING) diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F103VE_LONGER/hal_conf_custom.h b/buildroot/share/PlatformIO/variants/MARLIN_F103VE_LONGER/hal_conf_custom.h index 3a6b7037ad..3440343ffa 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_F103VE_LONGER/hal_conf_custom.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_F103VE_LONGER/hal_conf_custom.h @@ -118,7 +118,7 @@ extern "C" { #endif #ifndef LSE_STARTUP_TIMEOUT - #define LSE_STARTUP_TIMEOUT 50U // No 32.7KHz LSE on this board, reduced to avoid delays + #define LSE_STARTUP_TIMEOUT 50U // No 32.7kHz LSE on this board, reduced to avoid delays #endif /* Tip: To avoid modifying this file each time you need to use different HSE, From 2cfde39ecac13eb75f8ce933d2116d1b75db3e4b Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Wed, 12 Jan 2022 17:28:53 -0600 Subject: [PATCH 363/532] =?UTF-8?q?=F0=9F=90=9B=20Fix,=20improve=20PWM=20o?= =?UTF-8?q?n=20AVR=20(#23463)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/AVR/HAL.cpp | 2 + Marlin/src/HAL/AVR/HAL.h | 7 + Marlin/src/HAL/AVR/fast_pwm.cpp | 259 +++++++++++------------------- Marlin/src/HAL/AVR/fastio.cpp | 2 +- Marlin/src/inc/Conditionals_adv.h | 5 - Marlin/src/module/stepper.cpp | 41 ++--- Marlin/src/module/stepper.h | 4 + 7 files changed, 131 insertions(+), 189 deletions(-) diff --git a/Marlin/src/HAL/AVR/HAL.cpp b/Marlin/src/HAL/AVR/HAL.cpp index d7bf2a6f6f..666802725b 100644 --- a/Marlin/src/HAL/AVR/HAL.cpp +++ b/Marlin/src/HAL/AVR/HAL.cpp @@ -75,6 +75,8 @@ void HAL_init() { #if HAS_SERVO_3 INIT_SERVO(3); #endif + + init_pwm_timers(); // Init user timers to default frequency - 1000HZ } void HAL_reboot() { diff --git a/Marlin/src/HAL/AVR/HAL.h b/Marlin/src/HAL/AVR/HAL.h index 451ed1ee9f..f5cbcc9d51 100644 --- a/Marlin/src/HAL/AVR/HAL.h +++ b/Marlin/src/HAL/AVR/HAL.h @@ -207,6 +207,7 @@ inline void HAL_adc_init() { #define strtof strtod #define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment +#define PWM_FREQUENCY 1000 // Default PWM frequency when set_pwm_duty() is called without set_pwm_frequency() /** * set_pwm_frequency @@ -226,3 +227,9 @@ void set_pwm_frequency(const pin_t pin, const uint16_t f_desired); * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] */ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); + +/* + * init_pwm_timers + * sets the default frequency for timers 2-5 to 1000HZ + */ +void init_pwm_timers(); diff --git a/Marlin/src/HAL/AVR/fast_pwm.cpp b/Marlin/src/HAL/AVR/fast_pwm.cpp index 9c6d6f5514..071f008e89 100644 --- a/Marlin/src/HAL/AVR/fast_pwm.cpp +++ b/Marlin/src/HAL/AVR/fast_pwm.cpp @@ -21,10 +21,7 @@ */ #ifdef __AVR__ -#include "../../inc/MarlinConfigPre.h" -#include "HAL.h" - -#if NEEDS_HARDWARE_PWM // Specific meta-flag for features that mandate PWM +#include "../../inc/MarlinConfig.h" struct Timer { volatile uint8_t* TCCRnQ[3]; // max 3 TCCR registers per timer @@ -32,6 +29,8 @@ struct Timer { volatile uint16_t* ICRn; // max 1 ICR register per timer uint8_t n; // the timer number [0->5] uint8_t q; // the timer output [0->2] (A->C) + bool isPWM; // True if pin is a "hardware timer" + bool isProtected; // True if timer is protected }; // Macros for the Timer structure @@ -53,16 +52,13 @@ struct Timer { #define _SET_ICRn(ICRn, V) (*(ICRn) = int(V) & 0xFFFF) /** - * get_pwm_timer - * Get the timer information and register of the provided pin. - * Return a Timer struct containing this information. - * Used by set_pwm_frequency, set_pwm_duty + * Return a Timer struct describing a pin's timer. */ Timer get_pwm_timer(const pin_t pin) { + uint8_t q = 0; switch (digitalPinToTimer(pin)) { - // Protect reserved timers (TIMER0 & TIMER1) #ifdef TCCR0A IF_DISABLED(AVR_AT90USB1286_FAMILY, case TIMER0A:) case TIMER0B: @@ -71,212 +67,147 @@ Timer get_pwm_timer(const pin_t pin) { case TIMER1A: case TIMER1B: #endif - break; + break; // Protect reserved timers (TIMER0 & TIMER1) #if HAS_TCCR2 - case TIMER2: { - Timer timer = { - { &TCCR2, nullptr, nullptr }, - { (uint16_t*)&OCR2, nullptr, nullptr }, - nullptr, - 2, 0 - }; - return timer; - } + case TIMER2: + return Timer({ { &TCCR2, nullptr, nullptr }, { (uint16_t*)&OCR2, nullptr, nullptr }, nullptr, 2, 0, true, false }); + #elif ENABLED(USE_OCR2A_AS_TOP) + case TIMER2A: break; // protect TIMER2A since its OCR is used by TIMER2B + case TIMER2B: + return Timer({ { &TCCR2A, &TCCR2B, nullptr }, { (uint16_t*)&OCR2A, (uint16_t*)&OCR2B, nullptr }, nullptr, 2, 1, true, false }); #elif defined(TCCR2A) - #if ENABLED(USE_OCR2A_AS_TOP) - case TIMER2A: break; // protect TIMER2A - case TIMER2B: { - Timer timer = { - { &TCCR2A, &TCCR2B, nullptr }, - { (uint16_t*)&OCR2A, (uint16_t*)&OCR2B, nullptr }, - nullptr, - 2, 1 - }; - return timer; - } - #else - case TIMER2B: ++q; - case TIMER2A: { - Timer timer = { - { &TCCR2A, &TCCR2B, nullptr }, - { (uint16_t*)&OCR2A, (uint16_t*)&OCR2B, nullptr }, - nullptr, - 2, q - }; - return timer; - } - #endif + case TIMER2B: ++q; case TIMER2A: + return Timer({ { &TCCR2A, &TCCR2B, nullptr }, { (uint16_t*)&OCR2A, (uint16_t*)&OCR2B, nullptr }, nullptr, 2, q, true, false }); #endif #ifdef OCR3C - case TIMER3C: ++q; - case TIMER3B: ++q; - case TIMER3A: { - Timer timer = { - { &TCCR3A, &TCCR3B, &TCCR3C }, - { &OCR3A, &OCR3B, &OCR3C }, - &ICR3, - 3, q - }; - return timer; - } + case TIMER3C: ++q; case TIMER3B: ++q; case TIMER3A: + return Timer({ { &TCCR3A, &TCCR3B, &TCCR3C }, { &OCR3A, &OCR3B, &OCR3C }, &ICR3, 3, q, true, false }); #elif defined(OCR3B) - case TIMER3B: ++q; - case TIMER3A: { - Timer timer = { - { &TCCR3A, &TCCR3B, nullptr }, - { &OCR3A, &OCR3B, nullptr }, - &ICR3, - 3, q - }; - return timer; - } + case TIMER3B: ++q; case TIMER3A: + return Timer({ { &TCCR3A, &TCCR3B, nullptr }, { &OCR3A, &OCR3B, nullptr }, &ICR3, 3, q, true, false }); #endif #ifdef TCCR4A - case TIMER4C: ++q; - case TIMER4B: ++q; - case TIMER4A: { - Timer timer = { - { &TCCR4A, &TCCR4B, &TCCR4C }, - { &OCR4A, &OCR4B, &OCR4C }, - &ICR4, - 4, q - }; - return timer; - } + case TIMER4C: ++q; case TIMER4B: ++q; case TIMER4A: + return Timer({ { &TCCR4A, &TCCR4B, &TCCR4C }, { &OCR4A, &OCR4B, &OCR4C }, &ICR4, 4, q, true, false }); #endif #ifdef TCCR5A - case TIMER5C: ++q; - case TIMER5B: ++q; - case TIMER5A: { - Timer timer = { - { &TCCR5A, &TCCR5B, &TCCR5C }, - { &OCR5A, &OCR5B, &OCR5C }, - &ICR5, - 5, q - }; - return timer; - } + case TIMER5C: ++q; case TIMER5B: ++q; case TIMER5A: + return Timer({ { &TCCR5A, &TCCR5B, &TCCR5C }, { &OCR5A, &OCR5B, &OCR5C }, &ICR5, 5, q, true, false }); #endif } - Timer timer = { - { nullptr, nullptr, nullptr }, - { nullptr, nullptr, nullptr }, - nullptr, - 0, 0 - }; - return timer; + return Timer(); } void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { Timer timer = get_pwm_timer(pin); - if (timer.n == 0) return; // Don't proceed if protected timer or not recognized - uint16_t size; - if (timer.n == 2) size = 255; else size = 65535; + if (timer.isProtected || !timer.isPWM) return; // Don't proceed if protected timer or not recognized - uint16_t res = 255; // resolution (TOP value) - uint8_t j = 0; // prescaler index - uint8_t wgm = 1; // waveform generation mode + const bool is_timer2 = timer.n == 2; + const uint16_t maxtop = is_timer2 ? 0xFF : 0xFFFF; + + uint16_t res = 0xFF; // resolution (TOP value) + uint8_t j = CS_NONE; // prescaler index + uint8_t wgm = WGM_PWM_PC_8; // waveform generation mode // Calculating the prescaler and resolution to use to achieve closest frequency if (f_desired != 0) { - int f = (F_CPU) / (2 * 1024 * size) + 1; // Initialize frequency as lowest (non-zero) achievable - uint16_t prescaler[] = { 0, 1, 8, /*TIMER2 ONLY*/32, 64, /*TIMER2 ONLY*/128, 256, 1024 }; + 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) - // loop over prescaler values - LOOP_S_L_N(i, 1, 8) { - uint16_t res_temp_fast = 255, res_temp_phase_correct = 255; - if (timer.n == 2) { - // No resolution calculation for TIMER2 unless enabled USE_OCR2A_AS_TOP - #if ENABLED(USE_OCR2A_AS_TOP) - const uint16_t rtf = (F_CPU) / (prescaler[i] * f_desired); - res_temp_fast = rtf - 1; - res_temp_phase_correct = rtf / 2; + LOOP_L_N(i, COUNT(prescaler)) { // Loop through all prescaler values + const uint16_t p = prescaler[i]; + 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; + #else + res_fast_temp = res_pc_temp = maxtop; #endif } else { - // Skip TIMER2 specific prescalers when not TIMER2 - if (i == 3 || i == 5) continue; - const uint16_t rtf = (F_CPU) / (prescaler[i] * f_desired); - res_temp_fast = rtf - 1; - res_temp_phase_correct = rtf / 2; + if (p == 32 || p == 128) continue; // Skip TIMER2 specific prescalers when not TIMER2 + const uint16_t rft = (F_CPU) / (p * f_desired); + res_fast_temp = rft - 1; + res_pc_temp = rft / 2; } - LIMIT(res_temp_fast, 1U, size); - LIMIT(res_temp_phase_correct, 1U, size); + LIMIT(res_fast_temp, 1U, maxtop); + LIMIT(res_pc_temp, 1U, maxtop); + // Calculate frequencies of test prescaler and resolution values - const int f_temp_fast = (F_CPU) / (prescaler[i] * (1 + res_temp_fast)), - f_temp_phase_correct = (F_CPU) / (2 * prescaler[i] * res_temp_phase_correct), - f_diff = ABS(f - f_desired), - f_fast_diff = ABS(f_temp_fast - f_desired), - f_phase_diff = ABS(f_temp_phase_correct - f_desired); + const uint32_t f_diff = _MAX(f, f_desired) - _MIN(f, f_desired), + f_fast_temp = (F_CPU) / (p * (1 + res_fast_temp)), + f_fast_diff = _MAX(f_fast_temp, f_desired) - _MIN(f_fast_temp, f_desired), + f_pc_temp = (F_CPU) / (2 * p * res_pc_temp), + f_pc_diff = _MAX(f_pc_temp, f_desired) - _MIN(f_pc_temp, f_desired); - // If FAST values are closest to desired f - if (f_fast_diff < f_diff && f_fast_diff <= f_phase_diff) { - // Remember this combination - f = f_temp_fast; - res = res_temp_fast; - j = i; + 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 - if (timer.n == 2) - wgm = TERN(USE_OCR2A_AS_TOP, WGM2_FAST_PWM_OCR2A, WGM2_FAST_PWM); - else - wgm = WGM_FAST_PWM_ICRn; + 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; } - // If PHASE CORRECT values are closes to desired f - else if (f_phase_diff < f_diff) { - f = f_temp_phase_correct; - res = res_temp_phase_correct; - j = i; + else if (f_pc_diff < f_diff) { // PHASE CORRECT values are closes to desired f // Set the Wave Generation Mode to PWM PHASE CORRECT - if (timer.n == 2) - wgm = TERN(USE_OCR2A_AS_TOP, WGM2_PWM_PC_OCR2A, WGM2_FAST_PWM); - else - wgm = WGM_PWM_PC_ICRn; + 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; } } } + _SET_WGMnQ(timer.TCCRnQ, wgm); _SET_CSn(timer.TCCRnQ, j); - if (timer.n == 2) { - TERN_(USE_OCR2A_AS_TOP, _SET_OCRnQ(timer.OCRnQ, 0, res)); // Set OCR2A value (TOP) = res + if (is_timer2) { + TERN_(USE_OCR2A_AS_TOP, _SET_OCRnQ(timer.OCRnQ, 0, res)); // Set OCR2A value (TOP) = res } else - _SET_ICRn(timer.ICRn, res); // Set ICRn value (TOP) = res + _SET_ICRn(timer.ICRn, res); // Set ICRn value (TOP) = res } -#endif // NEEDS_HARDWARE_PWM - void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { - #if NEEDS_HARDWARE_PWM - - // If v is 0 or v_size (max), digitalWrite to LOW or HIGH. - // Note that digitalWrite also disables pwm output for us (sets COM bit to 0) - if (v == 0) - digitalWrite(pin, invert); - else if (v == v_size) - digitalWrite(pin, !invert); - else { - Timer timer = get_pwm_timer(pin); - if (timer.n == 0) return; // Don't proceed if protected timer or not recognized - // Set compare output mode to CLEAR -> SET or SET -> CLEAR (if inverted) - _SET_COMnQ(timer.TCCRnQ, timer.q TERN_(HAS_TCCR2, + (timer.q == 2)), COM_CLEAR_SET + invert); // COM20 is on bit 4 of TCCR2, so +1 for q==2 + // If v is 0 or v_size (max), digitalWrite to LOW or HIGH. + // Note that digitalWrite also disables pwm output for us (sets COM bit to 0) + if (v == 0) + digitalWrite(pin, invert); + else if (v == v_size) + digitalWrite(pin, !invert); + else { + Timer timer = get_pwm_timer(pin); + if (timer.isProtected) return; // Leave protected timer unchanged + if (timer.isPWM) { + _SET_COMnQ(timer.TCCRnQ, SUM_TERN(HAS_TCCR2, timer.q, timer.q == 2), COM_CLEAR_SET + invert); // COM20 is on bit 4 of TCCR2, so +1 for q==2 const uint16_t top = timer.n == 2 ? TERN(USE_OCR2A_AS_TOP, *timer.OCRnQ[0], 255) : *timer.ICRn; _SET_OCRnQ(timer.OCRnQ, timer.q, uint16_t(uint32_t(v) * top / v_size)); // Scale 8/16-bit v to top value } + else + digitalWrite(pin, v < 128 ? LOW : HIGH); + } +} - #else +void init_pwm_timers() { + // Init some timer frequencies to a default 1KHz + const pin_t pwm_pin[] = { + #ifdef __AVR_ATmega2560__ + 10, 5, 6, 46 + #elif defined(__AVR_ATmega1280__) + 12, 31 + #elif defined(__AVR_ATmega644__) || defined(__AVR_ATmega1284__) + 15, 6 + #elif defined(__AVR_AT90USB1286__) || defined(__AVR_mega64) || defined(__AVR_mega128) + 16, 24 + #endif + }; - analogWrite(pin, v); - UNUSED(v_size); - UNUSED(invert); - - #endif + LOOP_L_N(i, COUNT(pwm_pin)) + set_pwm_frequency(pwm_pin[i], 1000); } #endif // __AVR__ diff --git a/Marlin/src/HAL/AVR/fastio.cpp b/Marlin/src/HAL/AVR/fastio.cpp index 5083893ae3..5c6ef18915 100644 --- a/Marlin/src/HAL/AVR/fastio.cpp +++ b/Marlin/src/HAL/AVR/fastio.cpp @@ -257,7 +257,7 @@ uint16_t set_pwm_frequency_hz(const_float_t hz, const float dca, const float dcb const float pwm_top = round(count); // Get the rounded count ICR5 = (uint16_t)pwm_top - 1; // Subtract 1 for TOP - OCR5A = pwm_top * ABS(dca); // Update and scale DCs + OCR5A = pwm_top * ABS(dca); // Update and scale DCs OCR5B = pwm_top * ABS(dcb); OCR5C = pwm_top * ABS(dcc); _SET_COM(5, A, dca ? (dca < 0 ? COM_SET_CLEAR : COM_CLEAR_SET) : COM_NORMAL); // Set compare modes diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index 8c6e79f36a..f2a316d833 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -677,11 +677,6 @@ #define CUTTER_UNIT_IS(V) (_CUTTER_POWER(CUTTER_POWER_UNIT) == _CUTTER_POWER(V)) #endif -// Add features that need hardware PWM here -#if ANY(FAST_PWM_FAN, SPINDLE_LASER_USE_PWM) - #define NEEDS_HARDWARE_PWM 1 -#endif - #if !defined(__AVR__) || !defined(USBCON) // Define constants and variables for buffering serial data. // Use only 0 or powers of 2 greater than 1 diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 9a1c8278ba..0221f4c8be 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -3257,33 +3257,33 @@ void Stepper::report_positions() { #elif HAS_MOTOR_CURRENT_PWM - #define _WRITE_CURRENT_PWM(P) set_pwm_duty(pin_t(MOTOR_CURRENT_PWM_## P ##_PIN), 255L * current / (MOTOR_CURRENT_PWM_RANGE)) + #define _WRITE_CURRENT_PWM_DUTY(P) set_pwm_duty(pin_t(MOTOR_CURRENT_PWM_## P ##_PIN), 255L * current / (MOTOR_CURRENT_PWM_RANGE)) switch (driver) { case 0: #if PIN_EXISTS(MOTOR_CURRENT_PWM_X) - _WRITE_CURRENT_PWM(X); + _WRITE_CURRENT_PWM_DUTY(X); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_Y) - _WRITE_CURRENT_PWM(Y); + _WRITE_CURRENT_PWM_DUTY(Y); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_XY) - _WRITE_CURRENT_PWM(XY); + _WRITE_CURRENT_PWM_DUTY(XY); #endif break; case 1: #if PIN_EXISTS(MOTOR_CURRENT_PWM_Z) - _WRITE_CURRENT_PWM(Z); + _WRITE_CURRENT_PWM_DUTY(Z); #endif break; case 2: #if PIN_EXISTS(MOTOR_CURRENT_PWM_E) - _WRITE_CURRENT_PWM(E); + _WRITE_CURRENT_PWM_DUTY(E); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_E0) - _WRITE_CURRENT_PWM(E0); + _WRITE_CURRENT_PWM_DUTY(E0); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_E1) - _WRITE_CURRENT_PWM(E1); + _WRITE_CURRENT_PWM_DUTY(E1); #endif break; } @@ -3302,34 +3302,37 @@ void Stepper::report_positions() { #elif HAS_MOTOR_CURRENT_PWM + #ifdef __SAM3X8E__ + #define _RESET_CURRENT_PWM_FREQ(P) NOOP + #else + #define _RESET_CURRENT_PWM_FREQ(P) set_pwm_frequency(pin_t(P), MOTOR_CURRENT_PWM_FREQUENCY) + #endif + #define INIT_CURRENT_PWM(P) do{ SET_PWM(MOTOR_CURRENT_PWM_## P ##_PIN); _RESET_CURRENT_PWM_FREQ(MOTOR_CURRENT_PWM_## P ##_PIN); }while(0) + #if PIN_EXISTS(MOTOR_CURRENT_PWM_X) - SET_PWM(MOTOR_CURRENT_PWM_X_PIN); + INIT_CURRENT_PWM(X); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_Y) - SET_PWM(MOTOR_CURRENT_PWM_Y_PIN); + INIT_CURRENT_PWM(Y); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_XY) - SET_PWM(MOTOR_CURRENT_PWM_XY_PIN); + INIT_CURRENT_PWM(XY); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_Z) - SET_PWM(MOTOR_CURRENT_PWM_Z_PIN); + INIT_CURRENT_PWM(Z); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_E) - SET_PWM(MOTOR_CURRENT_PWM_E_PIN); + INIT_CURRENT_PWM(E); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_E0) - SET_PWM(MOTOR_CURRENT_PWM_E0_PIN); + INIT_CURRENT_PWM(E0); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_E1) - SET_PWM(MOTOR_CURRENT_PWM_E1_PIN); + INIT_CURRENT_PWM(E1); #endif refresh_motor_power(); - // Set Timer5 to 31khz so the PWM of the motor power is as constant as possible. (removes a buzzing noise) - #ifdef __AVR__ - SET_CS5(PRESCALER_1); - #endif #endif } diff --git a/Marlin/src/module/stepper.h b/Marlin/src/module/stepper.h index 6b190889cd..7967e58c35 100644 --- a/Marlin/src/module/stepper.h +++ b/Marlin/src/module/stepper.h @@ -317,6 +317,10 @@ class Stepper { #ifndef PWM_MOTOR_CURRENT #define PWM_MOTOR_CURRENT DEFAULT_PWM_MOTOR_CURRENT #endif + #ifndef MOTOR_CURRENT_PWM_FREQUENCY + #define MOTOR_CURRENT_PWM_FREQUENCY 31400 + #endif + #define MOTOR_CURRENT_COUNT LINEAR_AXES #elif HAS_MOTOR_CURRENT_SPI static constexpr uint32_t digipot_count[] = DIGIPOT_MOTOR_CURRENT; From 498b4b34406ffa41f912867b56cec2ce5d41bd16 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 13 Jan 2022 01:10:52 +0000 Subject: [PATCH 364/532] [cron] Bump distribution date (2022-01-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 ea25e2e176..ab3e86c07e 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 "2022-01-12" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 aa2adacb00..e7583e7170 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 "2022-01-12" + #define STRING_DISTRIBUTION_DATE "2022-01-13" #endif /** From 70d3607f560c75277e46e2590316f557434f58af Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 14 Jan 2022 01:09:42 +0000 Subject: [PATCH 365/532] [cron] Bump distribution date (2022-01-14) --- 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 ab3e86c07e..f6dba845eb 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 "2022-01-13" +//#define STRING_DISTRIBUTION_DATE "2022-01-14" /** * 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 e7583e7170..4f59cf5f8b 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 "2022-01-13" + #define STRING_DISTRIBUTION_DATE "2022-01-14" #endif /** From 40481947fc1f11a01235c5c55333a4437fc45c5f Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 14 Jan 2022 03:14:13 -0600 Subject: [PATCH 366/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Mis?= =?UTF-8?q?c.=20updates=20for=20extra=20axes=20(#23521)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 6 +- Marlin/src/HAL/AVR/endstop_interrupts.h | 1 + Marlin/src/core/language.h | 28 ++---- Marlin/src/feature/direct_stepping.cpp | 10 +-- Marlin/src/feature/direct_stepping.h | 12 +-- Marlin/src/feature/tmc_util.cpp | 2 - Marlin/src/gcode/calibrate/G28.cpp | 29 ++++-- Marlin/src/gcode/calibrate/G425.cpp | 18 ++-- Marlin/src/gcode/calibrate/M425.cpp | 2 +- Marlin/src/gcode/config/M200-M205.cpp | 9 +- Marlin/src/gcode/config/M217.cpp | 39 +++++++- Marlin/src/gcode/config/M92.cpp | 2 +- .../src/gcode/feature/digipot/M907-M910.cpp | 6 +- Marlin/src/gcode/feature/pause/M125.cpp | 15 +++- Marlin/src/gcode/feature/pause/M600.cpp | 18 ++-- Marlin/src/gcode/feature/trinamic/M906.cpp | 3 + Marlin/src/gcode/geometry/G92.cpp | 8 +- Marlin/src/inc/Conditionals_post.h | 1 + Marlin/src/inc/SanityCheck.h | 35 +++----- Marlin/src/module/endstops.cpp | 2 +- Marlin/src/module/motion.cpp | 88 ++++++++++++------- Marlin/src/module/planner.cpp | 30 ++----- Marlin/src/module/probe.cpp | 5 +- Marlin/src/module/stepper.cpp | 84 +++++++++--------- Marlin/src/module/stepper.h | 1 - Marlin/src/pins/pinsDebug_list.h | 18 ++++ Marlin/src/pins/pins_postprocess.h | 22 +++-- 27 files changed, 289 insertions(+), 205 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index cf54cff991..dae41f814f 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -3224,7 +3224,7 @@ #define Z4_SLEW_RATE 1 #endif - #if AXIS_DRIVER_TYPE_I(L6470) + #if AXIS_IS_L64XX(I) #define I_MICROSTEPS 128 #define I_OVERCURRENT 2000 #define I_STALLCURRENT 1500 @@ -3233,7 +3233,7 @@ #define I_SLEW_RATE 1 #endif - #if AXIS_DRIVER_TYPE_J(L6470) + #if AXIS_IS_L64XX(J) #define J_MICROSTEPS 128 #define J_OVERCURRENT 2000 #define J_STALLCURRENT 1500 @@ -3242,7 +3242,7 @@ #define J_SLEW_RATE 1 #endif - #if AXIS_DRIVER_TYPE_K(L6470) + #if AXIS_IS_L64XX(K) #define K_MICROSTEPS 128 #define K_OVERCURRENT 2000 #define K_STALLCURRENT 1500 diff --git a/Marlin/src/HAL/AVR/endstop_interrupts.h b/Marlin/src/HAL/AVR/endstop_interrupts.h index 50f29c3356..0ce8574c53 100644 --- a/Marlin/src/HAL/AVR/endstop_interrupts.h +++ b/Marlin/src/HAL/AVR/endstop_interrupts.h @@ -301,5 +301,6 @@ void setup_endstop_interrupts() { pciSetup(Z_MIN_PROBE_PIN); #endif #endif + // If we arrive here without raising an assertion, each pin has either an EXT-interrupt or a PCI. } diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h index a540c9c771..929992a62f 100644 --- a/Marlin/src/core/language.h +++ b/Marlin/src/core/language.h @@ -384,20 +384,14 @@ #define STR_I_MIN "w_min" #define STR_I_MAX "w_max" #else - #define STR_I "A" - #define STR_I_MIN "a_min" - #define STR_I_MAX "a_max" + #error "AXIS4_NAME can only be one of 'A', 'B', 'C', 'U', 'V', or 'W'." #endif #else #define STR_I "" #endif #if HAS_J_AXIS - #if AXIS5_NAME == 'A' - #define STR_J "A" - #define STR_J_MIN "a_min" - #define STR_J_MAX "a_max" - #elif AXIS5_NAME == 'B' + #if AXIS5_NAME == 'B' #define STR_J "B" #define STR_J_MIN "b_min" #define STR_J_MAX "b_max" @@ -418,24 +412,14 @@ #define STR_J_MIN "w_min" #define STR_J_MAX "w_max" #else - #define STR_J "B" - #define STR_J_MIN "b_min" - #define STR_J_MAX "b_max" + #error "AXIS5_NAME can only be one of 'B', 'C', 'U', 'V', or 'W'." #endif #else #define STR_J "" #endif #if HAS_K_AXIS - #if AXIS6_NAME == 'A' - #define STR_K "A" - #define STR_K_MIN "a_min" - #define STR_K_MAX "a_max" - #elif AXIS6_NAME == 'B' - #define STR_K "B" - #define STR_K_MIN "b_min" - #define STR_K_MAX "b_max" - #elif AXIS6_NAME == 'C' + #if AXIS6_NAME == 'C' #define STR_K "C" #define STR_K_MIN "c_min" #define STR_K_MAX "c_max" @@ -452,9 +436,7 @@ #define STR_K_MIN "w_min" #define STR_K_MAX "w_max" #else - #define STR_K "C" - #define STR_K_MIN "c_min" - #define STR_K_MAX "c_max" + #error "AXIS6_NAME can only be one of 'C', 'U', 'V', or 'W'." #endif #else #define STR_K "" diff --git a/Marlin/src/feature/direct_stepping.cpp b/Marlin/src/feature/direct_stepping.cpp index b8ef04fcd9..052e79de41 100644 --- a/Marlin/src/feature/direct_stepping.cpp +++ b/Marlin/src/feature/direct_stepping.cpp @@ -52,13 +52,13 @@ namespace DirectStepping { volatile bool SerialPageManager::fatal_error; template - volatile PageState SerialPageManager::page_states[Cfg::NUM_PAGES]; + volatile PageState SerialPageManager::page_states[Cfg::PAGE_COUNT]; template volatile bool SerialPageManager::page_states_dirty; template - uint8_t SerialPageManager::pages[Cfg::NUM_PAGES][Cfg::PAGE_SIZE]; + uint8_t SerialPageManager::pages[Cfg::PAGE_COUNT][Cfg::PAGE_SIZE]; template uint8_t SerialPageManager::checksum; @@ -74,7 +74,7 @@ namespace DirectStepping { template void SerialPageManager::init() { - for (int i = 0 ; i < Cfg::NUM_PAGES ; i++) + for (int i = 0 ; i < Cfg::PAGE_COUNT ; i++) page_states[i] = PageState::FREE; fatal_error = false; @@ -183,10 +183,10 @@ namespace DirectStepping { SERIAL_CHAR(Cfg::CONTROL_CHAR); constexpr int state_bits = 2; - constexpr int n_bytes = Cfg::NUM_PAGES >> state_bits; + constexpr int n_bytes = Cfg::PAGE_COUNT >> state_bits; volatile uint8_t bits_b[n_bytes] = { 0 }; - for (page_idx_t i = 0 ; i < Cfg::NUM_PAGES ; i++) { + for (page_idx_t i = 0 ; i < Cfg::PAGE_COUNT ; i++) { bits_b[i >> state_bits] |= page_states[i] << ((i * state_bits) & 0x7); } diff --git a/Marlin/src/feature/direct_stepping.h b/Marlin/src/feature/direct_stepping.h index b3007731cd..962310281e 100644 --- a/Marlin/src/feature/direct_stepping.h +++ b/Marlin/src/feature/direct_stepping.h @@ -68,10 +68,10 @@ namespace DirectStepping { static State state; static volatile bool fatal_error; - static volatile PageState page_states[Cfg::NUM_PAGES]; + static volatile PageState page_states[Cfg::PAGE_COUNT]; static volatile bool page_states_dirty; - static uint8_t pages[Cfg::NUM_PAGES][Cfg::PAGE_SIZE]; + static uint8_t pages[Cfg::PAGE_COUNT][Cfg::PAGE_SIZE]; static uint8_t checksum; static write_byte_idx_t write_byte_idx; static page_idx_t write_page_idx; @@ -87,8 +87,8 @@ namespace DirectStepping { struct config_t { static constexpr char CONTROL_CHAR = '!'; - static constexpr int NUM_PAGES = num_pages; - static constexpr int NUM_AXES = num_axes; + static constexpr int PAGE_COUNT = num_pages; + static constexpr int AXIS_COUNT = num_axes; static constexpr int BITS_SEGMENT = bits_segment; static constexpr int DIRECTIONAL = dir ? 1 : 0; static constexpr int SEGMENTS = segments; @@ -96,10 +96,10 @@ namespace DirectStepping { static constexpr int NUM_SEGMENTS = _BV(BITS_SEGMENT); static constexpr int SEGMENT_STEPS = _BV(BITS_SEGMENT - DIRECTIONAL) - 1; static constexpr int TOTAL_STEPS = SEGMENT_STEPS * SEGMENTS; - static constexpr int PAGE_SIZE = (NUM_AXES * BITS_SEGMENT * SEGMENTS) / 8; + 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<(NUM_PAGES>256), uint16_t, uint8_t>::type page_idx_t; + typedef typename TypeSelector<(PAGE_COUNT>256), uint16_t, uint8_t>::type page_idx_t; }; template diff --git a/Marlin/src/feature/tmc_util.cpp b/Marlin/src/feature/tmc_util.cpp index e793b4cf22..934c0b7264 100644 --- a/Marlin/src/feature/tmc_util.cpp +++ b/Marlin/src/feature/tmc_util.cpp @@ -421,12 +421,10 @@ if (monitor_tmc_driver(stepperI, need_update_error_counters, need_debug_reporting)) step_current_down(stepperI); #endif - #if AXIS_IS_TMC(J) if (monitor_tmc_driver(stepperJ, need_update_error_counters, need_debug_reporting)) step_current_down(stepperJ); #endif - #if AXIS_IS_TMC(K) if (monitor_tmc_driver(stepperK, need_update_error_counters, need_debug_reporting)) step_current_down(stepperK); diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index bd651cd7d8..cda71a1c10 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -262,7 +262,7 @@ void GcodeSuite::G28() { reset_stepper_timeout(); #define HAS_CURRENT_HOME(N) (defined(N##_CURRENT_HOME) && N##_CURRENT_HOME != N##_CURRENT) - #if HAS_CURRENT_HOME(X) || HAS_CURRENT_HOME(X2) || HAS_CURRENT_HOME(Y) || HAS_CURRENT_HOME(Y2) || HAS_CURRENT_HOME(I) || HAS_CURRENT_HOME(J) || HAS_CURRENT_HOME(K) || (ENABLED(DELTA) && HAS_CURRENT_HOME(Z)) + #if HAS_CURRENT_HOME(X) || HAS_CURRENT_HOME(X2) || HAS_CURRENT_HOME(Y) || HAS_CURRENT_HOME(Y2) || (ENABLED(DELTA) && HAS_CURRENT_HOME(Z)) || HAS_CURRENT_HOME(I) || HAS_CURRENT_HOME(J) || HAS_CURRENT_HOME(K) #define HAS_HOMING_CURRENT 1 #endif @@ -273,22 +273,22 @@ void GcodeSuite::G28() { #if HAS_CURRENT_HOME(X) const int16_t tmc_save_current_X = stepperX.getMilliamps(); stepperX.rms_current(X_CURRENT_HOME); - if (DEBUGGING(LEVELING)) debug_current(F("X"), tmc_save_current_X, X_CURRENT_HOME); + if (DEBUGGING(LEVELING)) debug_current(F(STR_X), tmc_save_current_X, X_CURRENT_HOME); #endif #if HAS_CURRENT_HOME(X2) const int16_t tmc_save_current_X2 = stepperX2.getMilliamps(); stepperX2.rms_current(X2_CURRENT_HOME); - if (DEBUGGING(LEVELING)) debug_current(F("X2"), tmc_save_current_X2, X2_CURRENT_HOME); + if (DEBUGGING(LEVELING)) debug_current(F(STR_X2), tmc_save_current_X2, X2_CURRENT_HOME); #endif #if HAS_CURRENT_HOME(Y) const int16_t tmc_save_current_Y = stepperY.getMilliamps(); stepperY.rms_current(Y_CURRENT_HOME); - if (DEBUGGING(LEVELING)) debug_current(F("Y"), tmc_save_current_Y, Y_CURRENT_HOME); + if (DEBUGGING(LEVELING)) debug_current(F(STR_Y), tmc_save_current_Y, Y_CURRENT_HOME); #endif #if HAS_CURRENT_HOME(Y2) const int16_t tmc_save_current_Y2 = stepperY2.getMilliamps(); stepperY2.rms_current(Y2_CURRENT_HOME); - if (DEBUGGING(LEVELING)) debug_current(F("Y2"), tmc_save_current_Y2, Y2_CURRENT_HOME); + if (DEBUGGING(LEVELING)) debug_current(F(STR_Y2), tmc_save_current_Y2, Y2_CURRENT_HOME); #endif #if HAS_CURRENT_HOME(I) const int16_t tmc_save_current_I = stepperI.getMilliamps(); @@ -308,7 +308,22 @@ void GcodeSuite::G28() { #if HAS_CURRENT_HOME(Z) && ENABLED(DELTA) const int16_t tmc_save_current_Z = stepperZ.getMilliamps(); stepperZ.rms_current(Z_CURRENT_HOME); - if (DEBUGGING(LEVELING)) debug_current(F("Z"), tmc_save_current_Z, Z_CURRENT_HOME); + if (DEBUGGING(LEVELING)) debug_current(F(STR_Z), tmc_save_current_Z, Z_CURRENT_HOME); + #endif + #if HAS_CURRENT_HOME(I) + const int16_t tmc_save_current_I = stepperI.getMilliamps(); + stepperI.rms_current(I_CURRENT_HOME); + if (DEBUGGING(LEVELING)) debug_current(F(STR_I), tmc_save_current_I, I_CURRENT_HOME); + #endif + #if HAS_CURRENT_HOME(J) + const int16_t tmc_save_current_J = stepperJ.getMilliamps(); + stepperJ.rms_current(J_CURRENT_HOME); + if (DEBUGGING(LEVELING)) debug_current(F(STR_J), tmc_save_current_J, J_CURRENT_HOME); + #endif + #if HAS_CURRENT_HOME(K) + const int16_t tmc_save_current_K = stepperK.getMilliamps(); + stepperK.rms_current(K_CURRENT_HOME); + if (DEBUGGING(LEVELING)) debug_current(F(STR_K), tmc_save_current_K, K_CURRENT_HOME); #endif #endif @@ -361,7 +376,7 @@ void GcodeSuite::G28() { homeX = needX || parser.seen_test('X'), homeY = needY || parser.seen_test('Y'), homeZZ = homeZ, - homeI = needI || parser.seen_test(AXIS4_NAME), homeJ = needJ || parser.seen_test(AXIS5_NAME), homeK = needK || parser.seen_test(AXIS6_NAME), + homeI = needI || parser.seen_test(AXIS4_NAME), homeJ = needJ || parser.seen_test(AXIS5_NAME), homeK = needK || parser.seen_test(AXIS6_NAME) ), home_all = LINEAR_AXIS_GANG( // Home-all if all or none are flagged homeX == homeX, && homeY == homeX, && homeZ == homeX, diff --git a/Marlin/src/gcode/calibrate/G425.cpp b/Marlin/src/gcode/calibrate/G425.cpp index 9d630ba1e2..906f8cc419 100644 --- a/Marlin/src/gcode/calibrate/G425.cpp +++ b/Marlin/src/gcode/calibrate/G425.cpp @@ -241,14 +241,15 @@ inline void probe_side(measurements_t &m, const float uncertainty, const side_t park_above_object(m, uncertainty); + #define _ACASE(N,A,B) case A: dir = -1; case B: axis = N##_AXIS; break + #define _PCASE(N) _ACASE(N, N##MINIMUM, N##MAXIMUM) + switch (side) { #if AXIS_CAN_CALIBRATE(X) - case RIGHT: dir = -1; - case LEFT: axis = X_AXIS; break; + _ACASE(X, RIGHT, LEFT); #endif #if HAS_Y_AXIS && AXIS_CAN_CALIBRATE(Y) - case BACK: dir = -1; - case FRONT: axis = Y_AXIS; break; + _ACASE(Y, BACK, FRONT); #endif #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z) case TOP: { @@ -259,16 +260,13 @@ inline void probe_side(measurements_t &m, const float uncertainty, const side_t } #endif #if HAS_I_AXIS && AXIS_CAN_CALIBRATE(I) - case IMINIMUM: dir = -1; - case IMAXIMUM: axis = I_AXIS; break; + _PCASE(I); #endif #if HAS_J_AXIS && AXIS_CAN_CALIBRATE(J) - case JMINIMUM: dir = -1; - case JMAXIMUM: axis = J_AXIS; break; + _PCASE(J); #endif #if HAS_K_AXIS && AXIS_CAN_CALIBRATE(K) - case KMINIMUM: dir = -1; - case KMAXIMUM: axis = K_AXIS; break; + _PCASE(K); #endif default: return; } diff --git a/Marlin/src/gcode/calibrate/M425.cpp b/Marlin/src/gcode/calibrate/M425.cpp index 190af0f71b..2d36e0d410 100644 --- a/Marlin/src/gcode/calibrate/M425.cpp +++ b/Marlin/src/gcode/calibrate/M425.cpp @@ -55,7 +55,7 @@ void GcodeSuite::M425() { case Z_AXIS: return AXIS_CAN_CALIBRATE(Z), case I_AXIS: return AXIS_CAN_CALIBRATE(I), case J_AXIS: return AXIS_CAN_CALIBRATE(J), - case K_AXIS: return AXIS_CAN_CALIBRATE(K), + case K_AXIS: return AXIS_CAN_CALIBRATE(K) ); } }; diff --git a/Marlin/src/gcode/config/M200-M205.cpp b/Marlin/src/gcode/config/M200-M205.cpp index b26a2fe28b..9490e3c625 100644 --- a/Marlin/src/gcode/config/M200-M205.cpp +++ b/Marlin/src/gcode/config/M200-M205.cpp @@ -288,8 +288,13 @@ void GcodeSuite::M205_report(const bool forReplay/*=true*/) { report_heading_etc(forReplay, F( "Advanced (B S T" TERN_(HAS_JUNCTION_DEVIATION, " J") - TERN_(HAS_CLASSIC_JERK, " X Y Z") - TERN_(HAS_CLASSIC_E_JERK, " E") + #if HAS_CLASSIC_JERK + LINEAR_AXIS_GANG( + " X", " Y", " Z", + " " STR_I "", " " STR_J "", " " STR_K "" + ) + #endif + TERN_(HAS_CLASSIC_E_JERK, " E") ")" )); SERIAL_ECHOLNPGM_P( diff --git a/Marlin/src/gcode/config/M217.cpp b/Marlin/src/gcode/config/M217.cpp index 7576272a48..344adc34e3 100644 --- a/Marlin/src/gcode/config/M217.cpp +++ b/Marlin/src/gcode/config/M217.cpp @@ -50,6 +50,9 @@ * W[linear] 0/1 Enable park & Z Raise * X[linear] Park X (Requires TOOLCHANGE_PARK) * Y[linear] Park Y (Requires TOOLCHANGE_PARK) + * I[linear] Park I (Requires TOOLCHANGE_PARK and LINEAR_AXES >= 4) + * J[linear] Park J (Requires TOOLCHANGE_PARK and LINEAR_AXES >= 5) + * K[linear] Park K (Requires TOOLCHANGE_PARK and LINEAR_AXES >= 6) * Z[linear] Z Raise * F[linear] Fan Speed 0-255 * G[linear/s] Fan time @@ -88,10 +91,23 @@ void GcodeSuite::M217() { #if ENABLED(TOOLCHANGE_PARK) if (parser.seenval('W')) { toolchange_settings.enable_park = parser.value_linear_units(); } if (parser.seenval('X')) { const int16_t v = parser.value_linear_units(); toolchange_settings.change_point.x = constrain(v, X_MIN_POS, X_MAX_POS); } - if (parser.seenval('Y')) { const int16_t v = parser.value_linear_units(); toolchange_settings.change_point.y = constrain(v, Y_MIN_POS, Y_MAX_POS); } + #if HAS_Y_AXIS + if (parser.seenval('Y')) { const int16_t v = parser.value_linear_units(); toolchange_settings.change_point.y = constrain(v, Y_MIN_POS, Y_MAX_POS); } + #endif + #if HAS_I_AXIS + if (parser.seenval('I')) { const int16_t v = parser.value_linear_units(); toolchange_settings.change_point.i = constrain(v, I_MIN_POS, I_MAX_POS); } + #endif + #if HAS_J_AXIS + if (parser.seenval('J')) { const int16_t v = parser.value_linear_units(); toolchange_settings.change_point.j = constrain(v, J_MIN_POS, J_MAX_POS); } + #endif + #if HAS_K_AXIS + if (parser.seenval('K')) { const int16_t v = parser.value_linear_units(); toolchange_settings.change_point.k = constrain(v, K_MIN_POS, K_MAX_POS); } + #endif #endif - if (parser.seenval('Z')) { toolchange_settings.z_raise = parser.value_linear_units(); } + #if HAS_Z_AXIS + if (parser.seenval('Z')) { toolchange_settings.z_raise = parser.value_linear_units(); } + #endif #if ENABLED(TOOLCHANGE_MIGRATION_FEATURE) migration.target = 0; // 0 = disabled @@ -151,9 +167,24 @@ void GcodeSuite::M217_report(const bool forReplay/*=true*/) { #endif #if ENABLED(TOOLCHANGE_PARK) + { SERIAL_ECHOPGM(" W", LINEAR_UNIT(toolchange_settings.enable_park)); - SERIAL_ECHOPGM_P(SP_X_STR, LINEAR_UNIT(toolchange_settings.change_point.x)); - SERIAL_ECHOPGM_P(SP_Y_STR, LINEAR_UNIT(toolchange_settings.change_point.y)); + SERIAL_ECHOPGM_P( + SP_X_STR, LINEAR_UNIT(toolchange_settings.change_point.x) + #if HAS_Y_AXIS + , SP_Y_STR, LINEAR_UNIT(toolchange_settings.change_point.y) + #endif + #if HAS_I_AXIS + , SP_I_STR, LINEAR_UNIT(toolchange_settings.change_point.i) + #endif + #if HAS_J_AXIS + , SP_J_STR, LINEAR_UNIT(toolchange_settings.change_point.j) + #endif + #if HAS_K_AXIS + , SP_K_STR, LINEAR_UNIT(toolchange_settings.change_point.k) + #endif + ); + } #endif #if ENABLED(TOOLCHANGE_FS_PRIME_FIRST_USED) diff --git a/Marlin/src/gcode/config/M92.cpp b/Marlin/src/gcode/config/M92.cpp index 54fe698f97..8f527919fd 100644 --- a/Marlin/src/gcode/config/M92.cpp +++ b/Marlin/src/gcode/config/M92.cpp @@ -24,7 +24,7 @@ #include "../../module/planner.h" /** - * M92: Set axis steps-per-unit for one or more axes, X, Y, Z, and E. + * M92: Set axis steps-per-unit for one or more axes, X, Y, Z, [I, [J, [K]]] and E. * (Follows the same syntax as G92) * * With multiple extruders use T to specify which one. diff --git a/Marlin/src/gcode/feature/digipot/M907-M910.cpp b/Marlin/src/gcode/feature/digipot/M907-M910.cpp index 757cffd473..95adde3ea5 100644 --- a/Marlin/src/gcode/feature/digipot/M907-M910.cpp +++ b/Marlin/src/gcode/feature/digipot/M907-M910.cpp @@ -39,7 +39,9 @@ #endif /** - * M907: Set digital trimpot motor current using axis codes X, Y, Z, E, B, S + * M907: Set digital trimpot motor current using axis codes X [Y] [Z] [E] + * B - Special case for 4th (E) axis + * S - Special case to set first 3 axes */ void GcodeSuite::M907() { #if HAS_MOTOR_CURRENT_SPI @@ -75,7 +77,7 @@ void GcodeSuite::M907() { if (parser.seenval('E')) stepper.set_digipot_current(2, parser.value_int()); #endif - #endif + #endif // HAS_MOTOR_CURRENT_PWM #if HAS_MOTOR_CURRENT_I2C // this one uses actual amps in floating point diff --git a/Marlin/src/gcode/feature/pause/M125.cpp b/Marlin/src/gcode/feature/pause/M125.cpp index bc31e1225d..46ec6c552c 100644 --- a/Marlin/src/gcode/feature/pause/M125.cpp +++ b/Marlin/src/gcode/feature/pause/M125.cpp @@ -49,6 +49,9 @@ * L = Override retract Length * X = Override park position X * Y = Override park position Y + * A = Override park position A (requires AXIS*_NAME 'A') + * B = Override park position B (requires AXIS*_NAME 'B') + * C = Override park position C (requires AXIS*_NAME 'C') * Z = Override Z raise * * With an LCD menu: @@ -60,9 +63,15 @@ void GcodeSuite::M125() { xyz_pos_t park_point = NOZZLE_PARK_POINT; - // Move XY axes to filament change position or given position - if (parser.seenval('X')) park_point.x = RAW_X_POSITION(parser.linearval('X')); - if (parser.seenval('Y')) park_point.y = RAW_X_POSITION(parser.linearval('Y')); + // Move to filament change position or given position + LINEAR_AXIS_CODE( + if (parser.seenval('X')) park_point.x = RAW_X_POSITION(parser.linearval('X')), + if (parser.seenval('Y')) park_point.y = RAW_Y_POSITION(parser.linearval('Y')), + NOOP, + if (parser.seenval(AXIS4_NAME)) park_point.i = RAW_I_POSITION(parser.linearval(AXIS4_NAME)), + if (parser.seenval(AXIS5_NAME)) park_point.j = RAW_J_POSITION(parser.linearval(AXIS5_NAME)), + if (parser.seenval(AXIS6_NAME)) park_point.k = RAW_K_POSITION(parser.linearval(AXIS6_NAME)) + ); // Lift Z axis if (parser.seenval('Z')) park_point.z = parser.linearval('Z'); diff --git a/Marlin/src/gcode/feature/pause/M600.cpp b/Marlin/src/gcode/feature/pause/M600.cpp index febb946bef..edb06aa947 100644 --- a/Marlin/src/gcode/feature/pause/M600.cpp +++ b/Marlin/src/gcode/feature/pause/M600.cpp @@ -101,10 +101,8 @@ void GcodeSuite::M600() { if (standardM600) ui.pause_show_message(PAUSE_MESSAGE_CHANGING, PAUSE_MODE_PAUSE_PRINT, target_extruder); - #if ENABLED(HOME_BEFORE_FILAMENT_CHANGE) - // If needed, home before parking for filament change - home_if_needed(true); - #endif + // If needed, home before parking for filament change + TERN_(HOME_BEFORE_FILAMENT_CHANGE, home_if_needed(true)); #if HAS_MULTI_EXTRUDER // Change toolhead if specified @@ -118,12 +116,18 @@ void GcodeSuite::M600() { xyz_pos_t park_point NOZZLE_PARK_POINT; - // Lift Z axis + // Lift Z axis first if (parser.seenval('Z')) park_point.z = parser.linearval('Z'); // Move XY axes to filament change position or given position - if (parser.seenval('X')) park_point.x = parser.linearval('X'); - if (parser.seenval('Y')) park_point.y = parser.linearval('Y'); + LINEAR_AXIS_CODE( + if (parser.seenval('X')) park_point.x = parser.linearval('X'), + if (parser.seenval('Y')) park_point.y = parser.linearval('Y'), + NOOP, + if (parser.seenval(AXIS4_NAME)) park_point.i = parser.linearval(AXIS4_NAME); + if (parser.seenval(AXIS5_NAME)) park_point.j = parser.linearval(AXIS5_NAME); + if (parser.seenval(AXIS6_NAME)) park_point.k = parser.linearval(AXIS6_NAME); + ); #if HAS_HOTEND_OFFSET && NONE(DUAL_X_CARRIAGE, DELTA) park_point += hotend_offset[active_extruder]; diff --git a/Marlin/src/gcode/feature/trinamic/M906.cpp b/Marlin/src/gcode/feature/trinamic/M906.cpp index 92d2210645..164ff00179 100644 --- a/Marlin/src/gcode/feature/trinamic/M906.cpp +++ b/Marlin/src/gcode/feature/trinamic/M906.cpp @@ -41,6 +41,9 @@ static void tmc_print_current(TMC &st) { * X[current] - Set mA current for X driver(s) * Y[current] - Set mA current for Y driver(s) * Z[current] - Set mA current for Z driver(s) + * A[current] - Set mA current for A driver(s) (Requires AXIS*_NAME 'A') + * B[current] - Set mA current for B driver(s) (Requires AXIS*_NAME 'B') + * C[current] - Set mA current for C driver(s) (Requires AXIS*_NAME 'C') * E[current] - Set mA current for E driver(s) * * I[index] - Axis sub-index (Omit or 0 for X, Y, Z; 1 for X2, Y2, Z2; 2 for Z3; 3 for Z4.) diff --git a/Marlin/src/gcode/geometry/G92.cpp b/Marlin/src/gcode/geometry/G92.cpp index 990236c0e8..3c49fe2a26 100644 --- a/Marlin/src/gcode/geometry/G92.cpp +++ b/Marlin/src/gcode/geometry/G92.cpp @@ -29,7 +29,7 @@ #endif /** - * G92: Set the Current Position to the given X Y Z E values. + * G92: Set the Current Position to the given X [Y [Z [A [B [C [E]]]]]] values. * * Behind the scenes the G92 command may modify the Current Position * or the Position Shift depending on settings and sub-commands. @@ -37,14 +37,14 @@ * Since E has no Workspace Offset, it is always set directly. * * Without Workspace Offsets (e.g., with NO_WORKSPACE_OFFSETS): - * G92 : Set NATIVE Current Position to the given X Y Z E. + * G92 : Set NATIVE Current Position to the given X [Y [Z [A [B [C [E]]]]]]. * * Using Workspace Offsets (default Marlin behavior): - * G92 : Modify Workspace Offsets so the reported position shows the given X Y Z E. + * G92 : Modify Workspace Offsets so the reported position shows the given X [Y [Z [A [B [C [E]]]]]]. * G92.1 : Zero XYZ Workspace Offsets (so the reported position = the native position). * * With POWER_LOSS_RECOVERY: - * G92.9 : Set NATIVE Current Position to the given X Y Z E. + * G92.9 : Set NATIVE Current Position to the given X [Y [Z [A [B [C [E]]]]]]. */ void GcodeSuite::G92() { diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 08130d31b7..6d2a0e1f7d 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -2214,6 +2214,7 @@ #define TMC_UART_IS(A,N) (defined(A##_HARDWARE_SERIAL) && (CAT(HW_,A##_HARDWARE_SERIAL) == HW_Serial##N || CAT(HW_,A##_HARDWARE_SERIAL) == HW_MSerial##N)) #define ANY_SERIAL_IS(N) ( CONF_SERIAL_IS(N) \ || TMC_UART_IS(X, N) || TMC_UART_IS(Y , N) || TMC_UART_IS(Z , N) \ + || TMC_UART_IS(I, N) || TMC_UART_IS(J , N) || TMC_UART_IS(K , N) \ || TMC_UART_IS(X2, N) || TMC_UART_IS(Y2, N) || TMC_UART_IS(Z2, N) || TMC_UART_IS(Z3, N) || TMC_UART_IS(Z4, N) \ || TMC_UART_IS(E0, N) || TMC_UART_IS(E1, N) || TMC_UART_IS(E2, N) || TMC_UART_IS(E3, N) || TMC_UART_IS(E4, N) ) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 06e0dfbb42..f44ef43f09 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -791,6 +791,12 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "Enable only one of ENDSTOPPULLUP_Y_MAX or ENDSTOPPULLDOWN_Y_MAX." #elif BOTH(ENDSTOPPULLUP_ZMAX, ENDSTOPPULLDOWN_ZMAX) #error "Enable only one of ENDSTOPPULLUP_Z_MAX or ENDSTOPPULLDOWN_Z_MAX." +#elif BOTH(ENDSTOPPULLUP_IMAX, ENDSTOPPULLDOWN_IMAX) + #error "Enable only one of ENDSTOPPULLUP_I_MAX or ENDSTOPPULLDOWN_I_MAX." +#elif BOTH(ENDSTOPPULLUP_JMAX, ENDSTOPPULLDOWN_JMAX) + #error "Enable only one of ENDSTOPPULLUP_J_MAX or ENDSTOPPULLDOWN_J_MAX." +#elif BOTH(ENDSTOPPULLUP_KMAX, ENDSTOPPULLDOWN_KMAX) + #error "Enable only one of ENDSTOPPULLUP_K_MAX or ENDSTOPPULLDOWN_K_MAX." #elif BOTH(ENDSTOPPULLUP_XMIN, ENDSTOPPULLDOWN_XMIN) #error "Enable only one of ENDSTOPPULLUP_X_MIN or ENDSTOPPULLDOWN_X_MIN." #elif BOTH(ENDSTOPPULLUP_YMIN, ENDSTOPPULLDOWN_YMIN) @@ -1417,9 +1423,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS * Allow only extra axis codes that do not conflict with G-code parameter names */ #if HAS_I_AXIS - #if AXIS4_NAME != 'A' && AXIS4_NAME != 'B' && AXIS4_NAME != 'C' && AXIS4_NAME != 'U' && AXIS4_NAME != 'V' && AXIS4_NAME != 'W' - #error "AXIS4_NAME can only be one of 'A', 'B', 'C', 'U', 'V', or 'W'." - #elif !defined(I_MIN_POS) || !defined(I_MAX_POS) + #if !defined(I_MIN_POS) || !defined(I_MAX_POS) #error "I_MIN_POS and I_MAX_POS are required with LINEAR_AXES >= 4." #elif !defined(I_HOME_DIR) #error "I_HOME_DIR is required with LINEAR_AXES >= 4." @@ -1430,8 +1434,6 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #if HAS_J_AXIS #if AXIS5_NAME == AXIS4_NAME #error "AXIS5_NAME must be unique." - #elif AXIS5_NAME != 'A' && AXIS5_NAME != 'B' && AXIS5_NAME != 'C' && AXIS5_NAME != 'U' && AXIS5_NAME != 'V' && AXIS5_NAME != 'W' - #error "AXIS5_NAME can only be one of 'A', 'B', 'C', 'U', 'V', or 'W'." #elif !defined(J_MIN_POS) || !defined(J_MAX_POS) #error "J_MIN_POS and J_MAX_POS are required with LINEAR_AXES >= 5." #elif !defined(J_HOME_DIR) @@ -1443,8 +1445,6 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #if HAS_K_AXIS #if AXIS6_NAME == AXIS5_NAME || AXIS6_NAME == AXIS4_NAME #error "AXIS6_NAME must be unique." - #elif AXIS6_NAME != 'A' && AXIS6_NAME != 'B' && AXIS6_NAME != 'C' && AXIS6_NAME != 'U' && AXIS6_NAME != 'V' && AXIS6_NAME != 'W' - #error "AXIS6_NAME can only be one of 'A', 'B', 'C', 'U', 'V', or 'W'." #elif !defined(K_MIN_POS) || !defined(K_MAX_POS) #error "K_MIN_POS and K_MAX_POS are required with LINEAR_AXES >= 6." #elif !defined(K_HOME_DIR) @@ -3317,7 +3317,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS * L64XX requirement */ #if HAS_L64XX && HAS_I_AXIS - #error "L64XX requires LINEAR_AXES 3. Homing with L64XX is not yet implemented for LINEAR_AXES > 3." + #error "L64XX requires LINEAR_AXES <= 3. Homing with L64XX is not yet implemented for LINEAR_AXES > 3." #endif /** @@ -3793,22 +3793,15 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #if _BAD_DRIVER(Z) #error "Z_DRIVER_TYPE is not recognized." #endif -#if HAS_I_AXIS - #if _BAD_DRIVER(I) - #error "I_DRIVER_TYPE is not recognized." - #endif +#if _BAD_DRIVER(I) + #error "I_DRIVER_TYPE is not recognized." #endif -#if HAS_J_AXIS - #if _BAD_DRIVER(J) - #error "J_DRIVER_TYPE is not recognized." - #endif +#if _BAD_DRIVER(J) + #error "J_DRIVER_TYPE is not recognized." #endif -#if HAS_K_AXIS - #if _BAD_DRIVER(K) - #error "K_DRIVER_TYPE is not recognized." - #endif +#if _BAD_DRIVER(K) + #error "K_DRIVER_TYPE is not recognized." #endif - #if _BAD_DRIVER(X2) #error "X2_DRIVER_TYPE is not recognized." #endif diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index 939dd6d537..bce27dc88a 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -558,7 +558,7 @@ void _O2 Endstops::report_states() { #if HAS_J_MAX ES_REPORT(J_MAX); #endif - #if HAS_K_MIN + #if HAS_K_MIN ES_REPORT(K_MIN); #endif #if HAS_K_MAX diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index a9c2ad6a7a..51f0681a15 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -467,8 +467,8 @@ void _internal_move_to_destination(const_feedRate_t fr_mm_s/*=0.0f*/ } /** - * Plan a move to (X, Y, Z, [I, [J, [K]]]) and set the current_position - * Plan a move to (X, Y, Z) with separation of Z from other components. + * Plan a move to (X, Y, Z, [I, [J, [K...]]]) and set the current_position + * Plan a move to (X, Y, Z, [I, [J, [K...]]]) with separation of Z from other components. * * - If Z is moving up, the Z move is done before XY, etc. * - If Z is moving down, the Z move is done after XY, etc. @@ -484,6 +484,15 @@ void do_blocking_move_to(LINEAR_AXIS_ARGS(const float), const_feedRate_t fr_mm_s #if HAS_Z_AXIS const feedRate_t z_feedrate = fr_mm_s ?: homing_feedrate(Z_AXIS); #endif + #if HAS_I_AXIS + const feedRate_t i_feedrate = fr_mm_s ?: homing_feedrate(I_AXIS); + #endif + #if HAS_J_AXIS + const feedRate_t j_feedrate = fr_mm_s ?: homing_feedrate(J_AXIS); + #endif + #if HAS_K_AXIS + const feedRate_t k_feedrate = fr_mm_s ?: homing_feedrate(K_AXIS); + #endif #if IS_KINEMATIC if (!position_is_reachable(x, y)) return; @@ -498,8 +507,8 @@ void do_blocking_move_to(LINEAR_AXIS_ARGS(const float), const_feedRate_t fr_mm_s // when in the danger zone if (current_position.z > delta_clip_start_height) { - if (z > delta_clip_start_height) { // staying in the danger zone - destination.set(x, y, z); // move directly (uninterpolated) + if (z > delta_clip_start_height) { // staying in the danger zone + destination.set(x, y, z); // move directly (uninterpolated) prepare_internal_fast_move_to_destination(); // set current_position from destination if (DEBUGGING(LEVELING)) DEBUG_POS("danger zone move", current_position); return; @@ -509,7 +518,7 @@ void do_blocking_move_to(LINEAR_AXIS_ARGS(const float), const_feedRate_t fr_mm_s if (DEBUGGING(LEVELING)) DEBUG_POS("zone border move", current_position); } - if (z > current_position.z) { // raising? + if (z > current_position.z) { // raising? destination.z = z; prepare_internal_fast_move_to_destination(z_feedrate); // set current_position from destination if (DEBUGGING(LEVELING)) DEBUG_POS("z raise move", current_position); @@ -519,7 +528,7 @@ void do_blocking_move_to(LINEAR_AXIS_ARGS(const float), const_feedRate_t fr_mm_s prepare_internal_move_to_destination(); // set current_position from destination if (DEBUGGING(LEVELING)) DEBUG_POS("xy move", current_position); - if (z < current_position.z) { // lowering? + if (z < current_position.z) { // lowering? destination.z = z; prepare_internal_fast_move_to_destination(z_feedrate); // set current_position from destination if (DEBUGGING(LEVELING)) DEBUG_POS("z lower move", current_position); @@ -528,39 +537,32 @@ void do_blocking_move_to(LINEAR_AXIS_ARGS(const float), const_feedRate_t fr_mm_s #elif IS_SCARA // If Z needs to raise, do it before moving XY - if (destination.z < z) { - destination.z = z; - prepare_internal_fast_move_to_destination(z_feedrate); - } + if (destination.z < z) { destination.z = z; prepare_internal_fast_move_to_destination(z_feedrate); } - destination.set(x, y); - prepare_internal_fast_move_to_destination(xy_feedrate); + destination.set(x, y); prepare_internal_fast_move_to_destination(xy_feedrate); // If Z needs to lower, do it after moving XY - if (destination.z > z) { - destination.z = z; - prepare_internal_fast_move_to_destination(z_feedrate); - } + if (destination.z > z) { destination.z = z; prepare_internal_fast_move_to_destination(z_feedrate); } #else - #if HAS_Z_AXIS - // If Z needs to raise, do it before moving XY - if (current_position.z < z) { - current_position.z = z; - line_to_current_position(z_feedrate); - } + #if HAS_Z_AXIS // If Z needs to raise, do it before moving XY + if (current_position.z < z) { current_position.z = z; line_to_current_position(z_feedrate); } #endif - current_position.set(x, y); - line_to_current_position(xy_feedrate); + current_position.set(x, y); line_to_current_position(xy_feedrate); - #if HAS_Z_AXIS - // If Z needs to lower, do it after moving XY - if (current_position.z > z) { - current_position.z = z; - line_to_current_position(z_feedrate); - } + #if HAS_I_AXIS + current_position.i = i; line_to_current_position(i_feedrate); + #endif + #if HAS_J_AXIS + current_position.j = j; line_to_current_position(j_feedrate); + #endif + #if HAS_K_AXIS + current_position.k = k; line_to_current_position(k_feedrate); + #endif + #if HAS_Z_AXIS // If Z needs to lower, do it after moving XY... + if (current_position.z > z) { current_position.z = z; line_to_current_position(z_feedrate); } #endif #endif @@ -1402,6 +1404,15 @@ void prepare_line_to_destination() { #endif break; #endif + #if I_SENSORLESS + case I_AXIS: stealth_states.i = tmc_enable_stallguard(stepperI); break; + #endif + #if J_SENSORLESS + case J_AXIS: stealth_states.j = tmc_enable_stallguard(stepperJ); break; + #endif + #if K_SENSORLESS + case K_AXIS: stealth_states.k = tmc_enable_stallguard(stepperK); break; + #endif } #if ENABLED(SPI_ENDSTOPS) @@ -1479,6 +1490,15 @@ void prepare_line_to_destination() { #endif break; #endif + #if I_SENSORLESS + case I_AXIS: tmc_disable_stallguard(stepperI, enable_stealth.i); break; + #endif + #if J_SENSORLESS + case J_AXIS: tmc_disable_stallguard(stepperJ, enable_stealth.j); break; + #endif + #if K_SENSORLESS + case K_AXIS: tmc_disable_stallguard(stepperK, enable_stealth.k); break; + #endif } #if ENABLED(SPI_ENDSTOPS) @@ -1815,8 +1835,12 @@ void prepare_line_to_destination() { switch (axis) { default: case X_AXIS: es = X_ENDSTOP; break; - case Y_AXIS: es = Y_ENDSTOP; break; - case Z_AXIS: es = Z_ENDSTOP; break; + #if HAS_Y_AXIS + case Y_AXIS: es = Y_ENDSTOP; break; + #endif + #if HAS_Z_AXIS + case Z_AXIS: es = Z_ENDSTOP; break; + #endif #if HAS_I_AXIS case I_AXIS: es = I_ENDSTOP; break; #endif diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 17d279cfa5..6979fa6a80 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -2041,15 +2041,9 @@ bool Planner::_populate_block(block_t * const block, bool split_move, steps_dist_mm.b = (db + dc) * mm_per_step[B_AXIS]; steps_dist_mm.c = CORESIGN(db - dc) * mm_per_step[C_AXIS]; #endif - #if HAS_I_AXIS - steps_dist_mm.i = di * mm_per_step[I_AXIS]; - #endif - #if HAS_J_AXIS - steps_dist_mm.j = dj * mm_per_step[J_AXIS]; - #endif - #if HAS_K_AXIS - steps_dist_mm.k = dk * mm_per_step[K_AXIS]; - #endif + TERN_(HAS_I_AXIS, steps_dist_mm.i = di * mm_per_step[I_AXIS]); + TERN_(HAS_J_AXIS, steps_dist_mm.j = dj * mm_per_step[J_AXIS]); + TERN_(HAS_K_AXIS, steps_dist_mm.k = dk * mm_per_step[K_AXIS]); #elif ENABLED(MARKFORGED_XY) steps_dist_mm.a = (da - db) * mm_per_step[A_AXIS]; steps_dist_mm.b = db * mm_per_step[B_AXIS]; @@ -2197,15 +2191,9 @@ bool Planner::_populate_block(block_t * const block, bool split_move, ); #endif #if ANY(CORE_IS_XY, MARKFORGED_XY, MARKFORGED_YX) - #if HAS_I_AXIS - if (block->steps.i) stepper.enable_axis(I_AXIS); - #endif - #if HAS_J_AXIS - if (block->steps.j) stepper.enable_axis(J_AXIS); - #endif - #if HAS_K_AXIS - if (block->steps.k) stepper.enable_axis(K_AXIS); - #endif + TERN_(HAS_I_AXIS, if (block->steps.i) stepper.enable_axis(I_AXIS)); + TERN_(HAS_J_AXIS, if (block->steps.j) stepper.enable_axis(J_AXIS)); + TERN_(HAS_K_AXIS, if (block->steps.k) stepper.enable_axis(K_AXIS)); #endif // Enable extruder(s) @@ -2260,7 +2248,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, // Slow down when the buffer starts to empty, rather than wait at the corner for a buffer refill #if EITHER(SLOWDOWN, HAS_WIRED_LCD) || defined(XY_FREQUENCY_LIMIT) - // Segment time im micro seconds + // Segment time in microseconds int32_t segment_time_us = LROUND(1000000.0f / inverse_secs); #endif @@ -2419,7 +2407,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, accel = CEIL((esteps ? settings.acceleration : settings.travel_acceleration) * steps_per_mm); #if ENABLED(LIN_ADVANCE) - + // Linear advance is currently not ready for HAS_I_AXIS #define MAX_E_JERK(N) TERN(HAS_LINEAR_E_JERK, max_e_jerk[E_INDEX_N(N)], max_jerk.e) /** @@ -2939,7 +2927,7 @@ bool Planner::buffer_segment(const abce_pos_t &abce SERIAL_ECHOPGM_P(SP_Y_LBL, abce.b); #endif SERIAL_ECHOPGM(" (", position.y, "->", target.y); - #if LINEAR_AXES >= ABC + #if HAS_Z_AXIS #if ENABLED(DELTA) SERIAL_ECHOPGM(") C:", abce.c); #else diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index d1f3eee207..cc3851597b 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -787,7 +787,10 @@ float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRai #endif // On delta keep Z below clip height or do_blocking_move_to will abort - xyz_pos_t npos = { rx, ry, TERN(DELTA, _MIN(delta_clip_start_height, current_position.z), current_position.z) }; + xyz_pos_t npos = LINEAR_AXIS_ARRAY( + rx, ry, TERN(DELTA, _MIN(delta_clip_start_height, current_position.z), current_position.z), + current_position.i, current_position.j, current_position.k + ); if (!can_reach(npos, probe_relative)) { if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Position Not Reachable"); return NAN; diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 0221f4c8be..ae8a1ef078 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -522,7 +522,7 @@ bool Stepper::disable_axis(const AxisEnum axis) { } } - bool Stepper::disable_extruder(E_TERN_(const uint8_t eindex)) { + bool Stepper::disable_extruder(E_TERN_(const uint8_t eindex/*=0*/)) { IF_DISABLED(HAS_MULTI_EXTRUDER, constexpr uint8_t eindex = 0); mark_axis_disabled(E_AXIS E_OPTARG(eindex)); const bool can_disable = can_axis_disable(E_AXIS E_OPTARG(eindex)); @@ -1688,7 +1688,7 @@ void Stepper::pulse_phase_isr() { const bool is_page = IS_PAGE(current_block); #if ENABLED(DIRECT_STEPPING) - // TODO (DerAndere): Add support for HAS_I_AXIS + // Direct stepping is currently not ready for HAS_I_AXIS if (is_page) { #if STEPPER_PAGE_FORMAT == SP_4x4D_128 @@ -1929,7 +1929,7 @@ uint32_t Stepper::block_phase_isr() { // If current block is finished, reset pointer and finalize state if (step_events_completed >= step_event_count) { #if ENABLED(DIRECT_STEPPING) - // TODO (DerAndere): Add support for HAS_I_AXIS + // Direct stepping is currently not ready for HAS_I_AXIS #if STEPPER_PAGE_FORMAT == SP_4x4D_128 #define PAGE_SEGMENT_UPDATE_POS(AXIS) \ count_position[_AXIS(AXIS)] += page_step_state.bd[_AXIS(AXIS)] - 128 * 7; @@ -3352,113 +3352,115 @@ void Stepper::report_positions() { void Stepper::microstep_init() { #if HAS_X_MS_PINS - SET_OUTPUT(X_MS1_PIN); - SET_OUTPUT(X_MS2_PIN); + SET_OUTPUT(X_MS1_PIN); SET_OUTPUT(X_MS2_PIN); #if PIN_EXISTS(X_MS3) SET_OUTPUT(X_MS3_PIN); #endif #endif #if HAS_X2_MS_PINS - SET_OUTPUT(X2_MS1_PIN); - SET_OUTPUT(X2_MS2_PIN); + SET_OUTPUT(X2_MS1_PIN); SET_OUTPUT(X2_MS2_PIN); #if PIN_EXISTS(X2_MS3) SET_OUTPUT(X2_MS3_PIN); #endif #endif #if HAS_Y_MS_PINS - SET_OUTPUT(Y_MS1_PIN); - SET_OUTPUT(Y_MS2_PIN); + SET_OUTPUT(Y_MS1_PIN); SET_OUTPUT(Y_MS2_PIN); #if PIN_EXISTS(Y_MS3) SET_OUTPUT(Y_MS3_PIN); #endif #endif #if HAS_Y2_MS_PINS - SET_OUTPUT(Y2_MS1_PIN); - SET_OUTPUT(Y2_MS2_PIN); + SET_OUTPUT(Y2_MS1_PIN); SET_OUTPUT(Y2_MS2_PIN); #if PIN_EXISTS(Y2_MS3) SET_OUTPUT(Y2_MS3_PIN); #endif #endif #if HAS_Z_MS_PINS - SET_OUTPUT(Z_MS1_PIN); - SET_OUTPUT(Z_MS2_PIN); + SET_OUTPUT(Z_MS1_PIN); SET_OUTPUT(Z_MS2_PIN); #if PIN_EXISTS(Z_MS3) SET_OUTPUT(Z_MS3_PIN); #endif #endif #if HAS_Z2_MS_PINS - SET_OUTPUT(Z2_MS1_PIN); - SET_OUTPUT(Z2_MS2_PIN); + SET_OUTPUT(Z2_MS1_PIN); SET_OUTPUT(Z2_MS2_PIN); #if PIN_EXISTS(Z2_MS3) SET_OUTPUT(Z2_MS3_PIN); #endif #endif #if HAS_Z3_MS_PINS - SET_OUTPUT(Z3_MS1_PIN); - SET_OUTPUT(Z3_MS2_PIN); + SET_OUTPUT(Z3_MS1_PIN); SET_OUTPUT(Z3_MS2_PIN); #if PIN_EXISTS(Z3_MS3) SET_OUTPUT(Z3_MS3_PIN); #endif #endif #if HAS_Z4_MS_PINS - SET_OUTPUT(Z4_MS1_PIN); - SET_OUTPUT(Z4_MS2_PIN); + SET_OUTPUT(Z4_MS1_PIN); SET_OUTPUT(Z4_MS2_PIN); #if PIN_EXISTS(Z4_MS3) SET_OUTPUT(Z4_MS3_PIN); #endif #endif + #if HAS_I_MS_PINS + SET_OUTPUT(I_MS1_PIN); SET_OUTPUT(I_MS2_PIN); + #if PIN_EXISTS(I_MS3) + SET_OUTPUT(I_MS3_PIN); + #endif + #endif + #if HAS_J_MS_PINS + SET_OUTPUT(J_MS1_PIN); SET_OUTPUT(J_MS2_PIN); + #if PIN_EXISTS(J_MS3) + SET_OUTPUT(J_MS3_PIN); + #endif + #endif + #if HAS_K_MS_PINS + SET_OUTPUT(K_MS1_PIN); SET_OUTPUT(K_MS2_PIN); + #if PIN_EXISTS(K_MS3) + SET_OUTPUT(K_MS3_PIN); + #endif + #endif #if HAS_E0_MS_PINS - SET_OUTPUT(E0_MS1_PIN); - SET_OUTPUT(E0_MS2_PIN); + SET_OUTPUT(E0_MS1_PIN); SET_OUTPUT(E0_MS2_PIN); #if PIN_EXISTS(E0_MS3) SET_OUTPUT(E0_MS3_PIN); #endif #endif #if HAS_E1_MS_PINS - SET_OUTPUT(E1_MS1_PIN); - SET_OUTPUT(E1_MS2_PIN); + SET_OUTPUT(E1_MS1_PIN); SET_OUTPUT(E1_MS2_PIN); #if PIN_EXISTS(E1_MS3) SET_OUTPUT(E1_MS3_PIN); #endif #endif #if HAS_E2_MS_PINS - SET_OUTPUT(E2_MS1_PIN); - SET_OUTPUT(E2_MS2_PIN); + SET_OUTPUT(E2_MS1_PIN); SET_OUTPUT(E2_MS2_PIN); #if PIN_EXISTS(E2_MS3) SET_OUTPUT(E2_MS3_PIN); #endif #endif #if HAS_E3_MS_PINS - SET_OUTPUT(E3_MS1_PIN); - SET_OUTPUT(E3_MS2_PIN); + SET_OUTPUT(E3_MS1_PIN); SET_OUTPUT(E3_MS2_PIN); #if PIN_EXISTS(E3_MS3) SET_OUTPUT(E3_MS3_PIN); #endif #endif #if HAS_E4_MS_PINS - SET_OUTPUT(E4_MS1_PIN); - SET_OUTPUT(E4_MS2_PIN); + SET_OUTPUT(E4_MS1_PIN); SET_OUTPUT(E4_MS2_PIN); #if PIN_EXISTS(E4_MS3) SET_OUTPUT(E4_MS3_PIN); #endif #endif #if HAS_E5_MS_PINS - SET_OUTPUT(E5_MS1_PIN); - SET_OUTPUT(E5_MS2_PIN); + SET_OUTPUT(E5_MS1_PIN); SET_OUTPUT(E5_MS2_PIN); #if PIN_EXISTS(E5_MS3) SET_OUTPUT(E5_MS3_PIN); #endif #endif #if HAS_E6_MS_PINS - SET_OUTPUT(E6_MS1_PIN); - SET_OUTPUT(E6_MS2_PIN); + SET_OUTPUT(E6_MS1_PIN); SET_OUTPUT(E6_MS2_PIN); #if PIN_EXISTS(E6_MS3) SET_OUTPUT(E6_MS3_PIN); #endif #endif #if HAS_E7_MS_PINS - SET_OUTPUT(E7_MS1_PIN); - SET_OUTPUT(E7_MS2_PIN); + SET_OUTPUT(E7_MS1_PIN); SET_OUTPUT(E7_MS2_PIN); #if PIN_EXISTS(E7_MS3) SET_OUTPUT(E7_MS3_PIN); #endif @@ -3531,13 +3533,13 @@ void Stepper::report_positions() { #if HAS_E7_MS_PINS case 10: WRITE(E7_MS1_PIN, ms1); break; #endif - #if HAS_I_MICROSTEPS + #if HAS_I_MS_PINS case 11: WRITE(I_MS1_PIN, ms1); break #endif - #if HAS_J_MICROSTEPS + #if HAS_J_MS_PINS case 12: WRITE(J_MS1_PIN, ms1); break #endif - #if HAS_K_MICROSTEPS + #if HAS_K_MS_PINS case 13: WRITE(K_MS1_PIN, ms1); break #endif } @@ -3602,13 +3604,13 @@ void Stepper::report_positions() { #if HAS_E7_MS_PINS case 10: WRITE(E7_MS2_PIN, ms2); break; #endif - #if HAS_I_M_PINS + #if HAS_I_MS_PINS case 11: WRITE(I_MS2_PIN, ms2); break #endif - #if HAS_J_M_PINS + #if HAS_J_MS_PINS case 12: WRITE(J_MS2_PIN, ms2); break #endif - #if HAS_K_M_PINS + #if HAS_K_MS_PINS case 13: WRITE(K_MS2_PIN, ms2); break #endif } diff --git a/Marlin/src/module/stepper.h b/Marlin/src/module/stepper.h index 7967e58c35..99aa714ca0 100644 --- a/Marlin/src/module/stepper.h +++ b/Marlin/src/module/stepper.h @@ -320,7 +320,6 @@ class Stepper { #ifndef MOTOR_CURRENT_PWM_FREQUENCY #define MOTOR_CURRENT_PWM_FREQUENCY 31400 #endif - #define MOTOR_CURRENT_COUNT LINEAR_AXES #elif HAS_MOTOR_CURRENT_SPI static constexpr uint32_t digipot_count[] = DIGIPOT_MOTOR_CURRENT; diff --git a/Marlin/src/pins/pinsDebug_list.h b/Marlin/src/pins/pinsDebug_list.h index dc0d5225db..599ce319af 100644 --- a/Marlin/src/pins/pinsDebug_list.h +++ b/Marlin/src/pins/pinsDebug_list.h @@ -1601,6 +1601,24 @@ #if PIN_EXISTS(Z4_SERIAL_RX) REPORT_NAME_DIGITAL(__LINE__, Z4_SERIAL_RX_PIN) #endif +#if PIN_EXISTS(I_SERIAL_TX) + REPORT_NAME_DIGITAL(__LINE__, I_SERIAL_TX_PIN) +#endif +#if PIN_EXISTS(I_SERIAL_RX) + REPORT_NAME_DIGITAL(__LINE__, I_SERIAL_RX_PIN) +#endif +#if PIN_EXISTS(J_SERIAL_TX) + REPORT_NAME_DIGITAL(__LINE__, J_SERIAL_TX_PIN) +#endif +#if PIN_EXISTS(J_SERIAL_RX) + REPORT_NAME_DIGITAL(__LINE__, J_SERIAL_RX_PIN) +#endif +#if PIN_EXISTS(K_SERIAL_TX) + REPORT_NAME_DIGITAL(__LINE__, K_SERIAL_TX_PIN) +#endif +#if PIN_EXISTS(K_SERIAL_RX) + REPORT_NAME_DIGITAL(__LINE__, K_SERIAL_RX_PIN) +#endif #if PIN_EXISTS(E0_DIAG) REPORT_NAME_DIGITAL(__LINE__, E0_DIAG_PIN) #endif diff --git a/Marlin/src/pins/pins_postprocess.h b/Marlin/src/pins/pins_postprocess.h index aa1def0b40..aabe0da858 100644 --- a/Marlin/src/pins/pins_postprocess.h +++ b/Marlin/src/pins/pins_postprocess.h @@ -546,6 +546,7 @@ #undef K_MAX_PIN #endif +// Filament Sensor first pin alias #if HAS_FILAMENT_SENSOR #define FIL_RUNOUT1_PIN FIL_RUNOUT_PIN // Filament Sensor first pin alias #else @@ -598,12 +599,13 @@ #define X2_E_INDEX E_STEPPERS #endif -// The X2 axis, if any, should be the next open extruder port #if HAS_X2_STEPPER && !defined(X2_DIAG_PIN) && !defined(X2_STEP_PIN) && !PIN_EXISTS(X2_CS_PIN) #define Y2_E_INDEX INCREMENT(X2_E_INDEX) #else #define Y2_E_INDEX X2_E_INDEX #endif + +// The X2 axis, if any, should be the next open extruder port #if HAS_X2_STEPPER #ifndef X2_STEP_PIN #define X2_STEP_PIN _EPIN(X2_E_INDEX, STEP) @@ -686,12 +688,13 @@ #define X2_MS3_PIN -1 #endif -// The Y2 axis, if any, should be the next open extruder port #if ENABLED(Y_DUAL_STEPPER_DRIVERS) && !defined(Y2_DIAG_PIN) && !defined(Y2_STEP_PIN) && !PIN_EXISTS(Y2_CS_PIN) #define Z2_E_INDEX INCREMENT(Y2_E_INDEX) #else #define Z2_E_INDEX Y2_E_INDEX #endif + +// The Y2 axis, if any, should be the next open extruder port #if ENABLED(Y_DUAL_STEPPER_DRIVERS) #ifndef Y2_STEP_PIN #define Y2_STEP_PIN _EPIN(Y2_E_INDEX, STEP) @@ -771,12 +774,13 @@ #define Y2_MS3_PIN -1 #endif -// The Z2 axis, if any, should be the next open extruder port #if NUM_Z_STEPPER_DRIVERS >= 2 && !defined(Z2_DIAG_PIN) && !defined(Z2_STEP_PIN) && !PIN_EXISTS(Z2_CS_PIN) #define Z3_E_INDEX INCREMENT(Z2_E_INDEX) #else #define Z3_E_INDEX Z2_E_INDEX #endif + +// The Z2 axis, if any, should be the next open extruder port #if NUM_Z_STEPPER_DRIVERS >= 2 #ifndef Z2_STEP_PIN #define Z2_STEP_PIN _EPIN(Z2_E_INDEX, STEP) @@ -856,12 +860,13 @@ #define Z2_MS3_PIN -1 #endif -// The Z3 axis, if any, should be the next open extruder port #if NUM_Z_STEPPER_DRIVERS >= 3 && !defined(Z3_DIAG_PIN) && !defined(Z3_STEP_PIN) && !PIN_EXISTS(Z3_CS_PIN) #define Z4_E_INDEX INCREMENT(Z3_E_INDEX) #else #define Z4_E_INDEX Z3_E_INDEX #endif + +// The Z3 axis, if any, should be the next open extruder port #if NUM_Z_STEPPER_DRIVERS >= 3 #ifndef Z3_STEP_PIN #define Z3_STEP_PIN _EPIN(Z3_E_INDEX, STEP) @@ -941,12 +946,13 @@ #define Z3_MS3_PIN -1 #endif -// The Z4 axis, if any, should be the next open extruder port #if NUM_Z_STEPPER_DRIVERS >= 4 && !defined(Z4_DIAG_PIN) && !defined(Z4_STEP_PIN) && !PIN_EXISTS(Z4_CS_PIN) #define I_E_INDEX INCREMENT(Z4_E_INDEX) #else #define I_E_INDEX Z4_E_INDEX #endif + +// The Z4 axis, if any, should be the next open extruder port #if NUM_Z_STEPPER_DRIVERS >= 4 #ifndef Z4_STEP_PIN #define Z4_STEP_PIN _EPIN(Z4_E_INDEX, STEP) @@ -1026,12 +1032,13 @@ #define Z4_MS3_PIN -1 #endif -// The I axis, if any, should be the next open extruder port #if HAS_I_AXIS && !defined(I_DIAG_PIN) && !defined(I_STEP_PIN) && !PIN_EXISTS(I_CS_PIN) #define J_E_INDEX INCREMENT(I_E_INDEX) #else #define J_E_INDEX I_E_INDEX #endif + +// The I axis, if any, should be the next open extruder port #if HAS_I_AXIS #ifndef I_STEP_PIN #define I_STEP_PIN _EPIN(I_E_INDEX, STEP) @@ -1111,12 +1118,13 @@ #define I_MS3_PIN -1 #endif -// The J axis, if any, should be the next open extruder port #if HAS_J_AXIS && !defined(J_DIAG_PIN) && !defined(J_STEP_PIN) && !PIN_EXISTS(J_CS_PIN) #define K_E_INDEX INCREMENT(J_E_INDEX) #else #define K_E_INDEX J_E_INDEX #endif + +// The J axis, if any, should be the next open extruder port #if HAS_J_AXIS #ifndef J_STEP_PIN #define J_STEP_PIN _EPIN(J_E_INDEX, STEP) From 7bc9d15514f1c9b55dfb0cb5a0a5a13666f96a33 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 14 Jan 2022 03:43:14 -0600 Subject: [PATCH 367/532] =?UTF-8?q?=F0=9F=A9=B9=20Followup=20to=20extra=20?= =?UTF-8?q?axes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/feature/pause/M600.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Marlin/src/gcode/feature/pause/M600.cpp b/Marlin/src/gcode/feature/pause/M600.cpp index edb06aa947..1679c90687 100644 --- a/Marlin/src/gcode/feature/pause/M600.cpp +++ b/Marlin/src/gcode/feature/pause/M600.cpp @@ -116,17 +116,14 @@ void GcodeSuite::M600() { xyz_pos_t park_point NOZZLE_PARK_POINT; - // Lift Z axis first - if (parser.seenval('Z')) park_point.z = parser.linearval('Z'); - // Move XY axes to filament change position or given position LINEAR_AXIS_CODE( if (parser.seenval('X')) park_point.x = parser.linearval('X'), if (parser.seenval('Y')) park_point.y = parser.linearval('Y'), - NOOP, - if (parser.seenval(AXIS4_NAME)) park_point.i = parser.linearval(AXIS4_NAME); - if (parser.seenval(AXIS5_NAME)) park_point.j = parser.linearval(AXIS5_NAME); - if (parser.seenval(AXIS6_NAME)) park_point.k = parser.linearval(AXIS6_NAME); + if (parser.seenval('Z')) park_point.z = parser.linearval('Z'), // Lift Z axis + if (parser.seenval(AXIS4_NAME)) park_point.i = parser.linearval(AXIS4_NAME), + if (parser.seenval(AXIS5_NAME)) park_point.j = parser.linearval(AXIS5_NAME), + if (parser.seenval(AXIS6_NAME)) park_point.k = parser.linearval(AXIS6_NAME) ); #if HAS_HOTEND_OFFSET && NONE(DUAL_X_CARRIAGE, DELTA) From d225445ab1ff1d600063b71cafeb78f8fd435985 Mon Sep 17 00:00:00 2001 From: George Fu Date: Fri, 14 Jan 2022 18:10:35 +0800 Subject: [PATCH 368/532] =?UTF-8?q?=F0=9F=94=A8=20Set=20upload=5Fcommand?= =?UTF-8?q?=20for=20CHEETAH=20v20=20(#23515)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ini/stm32f4.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index f721f3075d..93f42123fa 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -47,6 +47,7 @@ extends = stm32_variant board = marlin_FYSETC_CHEETAH_V20 board_build.offset = 0x8000 build_flags = ${stm32_variant.build_flags} -DSTM32F401xC +upload_command = dfu-util -a 0 -s 0x08008000:leave -D "$SOURCE" # # FLYF407ZG From 80e978ec8a9043d98dac76835c9d7c31ad9864cc Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 14 Jan 2022 06:16:14 -0600 Subject: [PATCH 369/532] =?UTF-8?q?=F0=9F=94=A7=20Skip=20unused=20axis=20n?= =?UTF-8?q?ames?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Conditionals_post.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 6d2a0e1f7d..3a2a6f2711 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -78,13 +78,13 @@ /** * Axis lengths and center */ -#ifndef AXIS4_NAME +#if HAS_I_AXIS && !defined(AXIS4_NAME) #define AXIS4_NAME 'A' #endif -#ifndef AXIS5_NAME +#if HAS_J_AXIS && !defined(AXIS5_NAME) #define AXIS5_NAME 'B' #endif -#ifndef AXIS6_NAME +#if HAS_K_AXIS && !defined(AXIS6_NAME) #define AXIS6_NAME 'C' #endif From da8e21f1a67ecc887e0d2ed6bc1d893f4253deb8 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 15 Jan 2022 01:06:49 +0000 Subject: [PATCH 370/532] [cron] Bump distribution date (2022-01-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 f6dba845eb..79fe3afe0d 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 "2022-01-14" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 4f59cf5f8b..a9392979c0 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 "2022-01-14" + #define STRING_DISTRIBUTION_DATE "2022-01-15" #endif /** From 213b5d0d38340b78844c71a8ba52003b29a18c98 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 16 Jan 2022 01:11:43 +0000 Subject: [PATCH 371/532] [cron] Bump distribution date (2022-01-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 79fe3afe0d..28b4b15c35 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 "2022-01-15" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 a9392979c0..1ecb5c9dad 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 "2022-01-15" + #define STRING_DISTRIBUTION_DATE "2022-01-16" #endif /** From 09909512d721b41fcd1fbb85bfe2fbc138990eff Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Sat, 15 Jan 2022 23:05:53 -0600 Subject: [PATCH 372/532] =?UTF-8?q?=F0=9F=90=9B=20Fix,=20improve=20PWM=20o?= =?UTF-8?q?n=20AVR=20(#23520)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/AVR/fast_pwm.cpp | 23 ++++++++++++++++------- Marlin/src/module/planner.cpp | 16 +++++++++------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Marlin/src/HAL/AVR/fast_pwm.cpp b/Marlin/src/HAL/AVR/fast_pwm.cpp index 071f008e89..af96fb9e18 100644 --- a/Marlin/src/HAL/AVR/fast_pwm.cpp +++ b/Marlin/src/HAL/AVR/fast_pwm.cpp @@ -61,7 +61,6 @@ Timer get_pwm_timer(const pin_t pin) { switch (digitalPinToTimer(pin)) { #ifdef TCCR0A IF_DISABLED(AVR_AT90USB1286_FAMILY, case TIMER0A:) - case TIMER0B: #endif #ifdef TCCR1A case TIMER1A: case TIMER1B: @@ -69,11 +68,16 @@ Timer get_pwm_timer(const pin_t pin) { break; // Protect reserved timers (TIMER0 & TIMER1) + #ifdef TCCR0A + case TIMER0B: // Protected timer, but allow setting the duty cycle on OCR0B for pin D4 only + return Timer({ { &TCCR0A, nullptr, nullptr }, { (uint16_t*)&OCR0B, nullptr, nullptr }, nullptr, 0, 0, true, true }); + #endif + #if HAS_TCCR2 case TIMER2: return Timer({ { &TCCR2, nullptr, nullptr }, { (uint16_t*)&OCR2, nullptr, nullptr }, nullptr, 2, 0, true, false }); #elif ENABLED(USE_OCR2A_AS_TOP) - case TIMER2A: break; // protect TIMER2A since its OCR is used by TIMER2B + case TIMER2A: break; // Protect TIMER2A since its OCR is used by TIMER2B case TIMER2B: return Timer({ { &TCCR2A, &TCCR2B, nullptr }, { (uint16_t*)&OCR2A, (uint16_t*)&OCR2B, nullptr }, nullptr, 2, 1, true, false }); #elif defined(TCCR2A) @@ -174,18 +178,23 @@ void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { // If v is 0 or v_size (max), digitalWrite to LOW or HIGH. - // Note that digitalWrite also disables pwm output for us (sets COM bit to 0) + // Note that digitalWrite also disables PWM output for us (sets COM bit to 0) if (v == 0) digitalWrite(pin, invert); else if (v == v_size) digitalWrite(pin, !invert); else { Timer timer = get_pwm_timer(pin); - if (timer.isProtected) return; // Leave protected timer unchanged if (timer.isPWM) { - _SET_COMnQ(timer.TCCRnQ, SUM_TERN(HAS_TCCR2, timer.q, timer.q == 2), COM_CLEAR_SET + invert); // COM20 is on bit 4 of TCCR2, so +1 for q==2 - const uint16_t top = timer.n == 2 ? TERN(USE_OCR2A_AS_TOP, *timer.OCRnQ[0], 255) : *timer.ICRn; - _SET_OCRnQ(timer.OCRnQ, timer.q, uint16_t(uint32_t(v) * top / v_size)); // Scale 8/16-bit v to top value + if (timer.n == 0) { + TCCR0A |= _BV(COM0B1); // Only allow a TIMER0B select and OCR0B duty update for pin D4 outputs no frequency changes are permited. + OCR0B = v; + } + else if (!timer.isProtected) { + const uint16_t top = timer.n == 2 ? TERN(USE_OCR2A_AS_TOP, *timer.OCRnQ[0], 255) : *timer.ICRn; + _SET_COMnQ(timer.TCCRnQ, SUM_TERN(HAS_TCCR2, timer.q, timer.q == 2), COM_CLEAR_SET + invert); // COM20 is on bit 4 of TCCR2, so +1 for q==2 + _SET_OCRnQ(timer.OCRnQ, timer.q, uint16_t(uint32_t(v) * top / v_size)); // Scale 8/16-bit v to top value + } } else digitalWrite(pin, v < 128 ? LOW : HIGH); diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 6979fa6a80..aae997c48a 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1244,10 +1244,6 @@ void Planner::recalculate() { recalculate_trapezoids(); } -#if HAS_FAN && DISABLED(LASER_SYNCHRONOUS_M106_M107) - #define HAS_TAIL_FAN_SPEED 1 -#endif - /** * Apply fan speeds */ @@ -1308,8 +1304,9 @@ void Planner::check_axes_activity() { xyze_bool_t axis_active = { false }; #endif - #if HAS_TAIL_FAN_SPEED - static uint8_t tail_fan_speed[FAN_COUNT] = ARRAY_N_1(FAN_COUNT, 255); + #if HAS_FAN && DISABLED(LASER_SYNCHRONOUS_M106_M107) + #define HAS_TAIL_FAN_SPEED 1 + static uint8_t tail_fan_speed[FAN_COUNT] = ARRAY_N_1(FAN_COUNT, 128); bool fans_need_update = false; #endif @@ -1395,7 +1392,12 @@ void Planner::check_axes_activity() { // Update Fan speeds // Only if synchronous M106/M107 is disabled // - TERN_(HAS_TAIL_FAN_SPEED, if (fans_need_update) sync_fan_speeds(tail_fan_speed)); + #if HAS_TAIL_FAN_SPEED + if (fans_need_update) { + sync_fan_speeds(tail_fan_speed); + fans_need_update = false; + } + #endif TERN_(AUTOTEMP, autotemp_task()); From c79174e862f30d2a1e808c2cfc40bd8a8e819166 Mon Sep 17 00:00:00 2001 From: Sola <42537573+solawc@users.noreply.github.com> Date: Sun, 16 Jan 2022 13:07:37 +0800 Subject: [PATCH 373/532] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20SPI+DMA+interrupt?= =?UTF-8?q?=20method=20(STM32=20/=20MKS=20UI)=20(#23464)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/STM32/tft/tft_spi.cpp | 24 +++++++++ Marlin/src/HAL/STM32/tft/tft_spi.h | 18 +++++-- Marlin/src/lcd/extui/mks_ui/draw_ui.cpp | 5 +- .../extui/mks_ui/tft_lvgl_configuration.cpp | 52 +++++++++++++++++-- .../lcd/extui/mks_ui/tft_lvgl_configuration.h | 2 + Marlin/src/lcd/tft_io/tft_io.h | 5 ++ Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h | 4 ++ .../stm32f4/pins_MKS_ROBIN_NANO_V3_common.h | 12 +++-- 8 files changed, 110 insertions(+), 12 deletions(-) diff --git a/Marlin/src/HAL/STM32/tft/tft_spi.cpp b/Marlin/src/HAL/STM32/tft/tft_spi.cpp index 4ad35cee8b..2e18c8a64c 100644 --- a/Marlin/src/HAL/STM32/tft/tft_spi.cpp +++ b/Marlin/src/HAL/STM32/tft/tft_spi.cpp @@ -242,5 +242,29 @@ void TFT_SPI::TransmitDMA(uint32_t MemoryIncrease, uint16_t *Data, uint16_t Coun Abort(); } +#if ENABLED(USE_SPI_DMA_TC) + + void TFT_SPI::TransmitDMA_IT(uint32_t MemoryIncrease, uint16_t *Data, uint16_t Count) { + + DMAtx.Init.MemInc = MemoryIncrease; + HAL_DMA_Init(&DMAtx); + + if (TFT_MISO_PIN == TFT_MOSI_PIN) + SPI_1LINE_TX(&SPIx); + + DataTransferBegin(); + + HAL_NVIC_SetPriority(DMA2_Stream3_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA2_Stream3_IRQn); + HAL_DMA_Start_IT(&DMAtx, (uint32_t)Data, (uint32_t)&(SPIx.Instance->DR), Count); + __HAL_SPI_ENABLE(&SPIx); + + SET_BIT(SPIx.Instance->CR2, SPI_CR2_TXDMAEN); // Enable Tx DMA Request + } + + extern "C" void DMA2_Stream3_IRQHandler(void) { HAL_DMA_IRQHandler(&TFT_SPI::DMAtx); } + +#endif + #endif // HAS_SPI_TFT #endif // HAL_STM32 diff --git a/Marlin/src/HAL/STM32/tft/tft_spi.h b/Marlin/src/HAL/STM32/tft/tft_spi.h index 667b5f366b..de051e2294 100644 --- a/Marlin/src/HAL/STM32/tft/tft_spi.h +++ b/Marlin/src/HAL/STM32/tft/tft_spi.h @@ -36,20 +36,25 @@ #define LCD_READ_ID4 0xD3 // Read display identification information (0xD3 on ILI9341) #endif -#define DATASIZE_8BIT SPI_DATASIZE_8BIT -#define DATASIZE_16BIT SPI_DATASIZE_16BIT -#define TFT_IO_DRIVER TFT_SPI +#define DATASIZE_8BIT SPI_DATASIZE_8BIT +#define DATASIZE_16BIT SPI_DATASIZE_16BIT +#define TFT_IO_DRIVER TFT_SPI class TFT_SPI { private: static SPI_HandleTypeDef SPIx; - static DMA_HandleTypeDef DMAtx; + static uint32_t ReadID(uint16_t Reg); static void Transmit(uint16_t Data); static void TransmitDMA(uint32_t MemoryIncrease, uint16_t *Data, uint16_t Count); + #if ENABLED(USE_SPI_DMA_TC) + static void TransmitDMA_IT(uint32_t MemoryIncrease, uint16_t *Data, uint16_t Count); + #endif public: + static DMA_HandleTypeDef DMAtx; + static void Init(); static uint32_t GetID(); static bool isBusy(); @@ -63,6 +68,11 @@ public: static void WriteReg(uint16_t Reg) { WRITE(TFT_A0_PIN, LOW); Transmit(Reg); WRITE(TFT_A0_PIN, HIGH); } static void WriteSequence(uint16_t *Data, uint16_t Count) { TransmitDMA(DMA_MINC_ENABLE, Data, Count); } + + #if ENABLED(USE_SPI_DMA_TC) + static void WriteSequenceIT(uint16_t *Data, uint16_t Count) { TransmitDMA_IT(DMA_MINC_ENABLE, Data, Count); } + #endif + static void WriteMultiple(uint16_t Color, uint16_t Count) { static uint16_t Data; Data = Color; TransmitDMA(DMA_MINC_DISABLE, &Data, Count); } static void WriteMultiple(uint16_t Color, uint32_t Count) { static uint16_t Data; Data = Color; diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp index 66b2deda66..aa6fe5e063 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp @@ -1331,7 +1331,6 @@ void lv_screen_menu_item_onoff_update(lv_obj_t *btn, const bool curValue) { lv_label_set_text((lv_obj_t*)btn->child_ll.head, curValue ? machine_menu.enable : machine_menu.disable); } - #if ENABLED(SDSUPPORT) void sd_detection() { @@ -1360,7 +1359,9 @@ void print_time_count() { } void LV_TASK_HANDLER() { - lv_task_handler(); + + if (TERN1(USE_SPI_DMA_TC, !get_lcd_dma_lock())) + lv_task_handler(); #if BOTH(MKS_TEST, SDSUPPORT) if (mks_test_flag == 0x1E) mks_hardware_test(); 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 f960bdc63c..82b209593e 100644 --- a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp +++ b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp @@ -133,6 +133,27 @@ void tft_lvgl_init() { watchdog_refresh(); // LVGL init takes time + #if ENABLED(USB_FLASH_DRIVE_SUPPORT) + uint16_t usb_flash_loop = 1000; + #if ENABLED(MULTI_VOLUME) && !HAS_SD_HOST_DRIVE + SET_INPUT_PULLUP(SD_DETECT_PIN); + if (READ(SD_DETECT_PIN) == LOW) card.changeMedia(&card.media_driver_sdcard); + else card.changeMedia(&card.media_driver_usbFlash); + #endif + do { + card.media_driver_usbFlash.idle(); + watchdog_refresh(); + delay(2); + } while (!card.media_driver_usbFlash.isInserted() && usb_flash_loop--); + card.mount(); + #elif HAS_LOGO_IN_FLASH + delay(1000); + watchdog_refresh(); + delay(1000); + #endif + + watchdog_refresh(); // LVGL init takes time + #if ENABLED(SDSUPPORT) UpdateAssets(); watchdog_refresh(); // LVGL init takes time @@ -231,19 +252,44 @@ void tft_lvgl_init() { #endif } +static lv_disp_drv_t* disp_drv_p; + +#if ENABLED(USE_SPI_DMA_TC) + bool lcd_dma_trans_lock = false; +#endif + +void dmc_tc_handler(struct __DMA_HandleTypeDef * hdma) { + #if ENABLED(USE_SPI_DMA_TC) + lv_disp_flush_ready(disp_drv_p); + lcd_dma_trans_lock = false; + TFT_SPI::Abort(); + #endif +} + void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * color_p) { uint16_t width = area->x2 - area->x1 + 1, height = area->y2 - area->y1 + 1; + TERN_(USE_SPI_DMA_TC, disp_drv_p = disp); + SPI_TFT.setWindow((uint16_t)area->x1, (uint16_t)area->y1, width, height); - SPI_TFT.tftio.WriteSequence((uint16_t*)color_p, width * height); - - lv_disp_flush_ready(disp); // Indicate you are ready with the flushing + #if ENABLED(USE_SPI_DMA_TC) + lcd_dma_trans_lock = true; + SPI_TFT.tftio.WriteSequenceIT((uint16_t*)color_p, width * height); + TFT_SPI::DMAtx.XferCpltCallback = dmc_tc_handler; + #else + SPI_TFT.tftio.WriteSequence((uint16_t*)color_p, width * height); + lv_disp_flush_ready(disp_drv_p); // Indicate you are ready with the flushing + #endif W25QXX.init(SPI_QUARTER_SPEED); } +#if ENABLED(USE_SPI_DMA_TC) + bool get_lcd_dma_lock() { return lcd_dma_trans_lock; } +#endif + void lv_fill_rect(lv_coord_t x1, lv_coord_t y1, lv_coord_t x2, lv_coord_t y2, lv_color_t bk_color) { uint16_t width, height; width = x2 - x1 + 1; diff --git a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.h b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.h index 0790d8323c..0368140b28 100644 --- a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.h +++ b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.h @@ -64,6 +64,8 @@ lv_fs_res_t sd_tell_cb(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p); void lv_fill_rect(lv_coord_t x1, lv_coord_t y1, lv_coord_t x2, lv_coord_t y2, lv_color_t bk_color); +bool get_lcd_dma_lock(); + #ifdef __cplusplus } /* C-declarations for C++ */ #endif diff --git a/Marlin/src/lcd/tft_io/tft_io.h b/Marlin/src/lcd/tft_io/tft_io.h index 65602240d6..50b921cd2a 100644 --- a/Marlin/src/lcd/tft_io/tft_io.h +++ b/Marlin/src/lcd/tft_io/tft_io.h @@ -121,6 +121,11 @@ public: inline static void WriteReg(uint16_t Reg) { io.WriteReg(Reg); }; inline static void WriteSequence(uint16_t *Data, uint16_t Count) { io.WriteSequence(Data, Count); }; + + #if ENABLED(USE_SPI_DMA_TC) + inline static void WriteSequenceIT(uint16_t *Data, uint16_t Count) { io.WriteSequenceIT(Data, Count); }; + #endif + // static void WriteMultiple(uint16_t Color, uint16_t Count) { static uint16_t Data; Data = Color; TransmitDMA(DMA_MINC_DISABLE, &Data, Count); } inline static void WriteMultiple(uint16_t Color, uint32_t Count) { io.WriteMultiple(Color, Count); }; diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h index 2d70e72347..ce033d4013 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h @@ -44,6 +44,10 @@ //#define LED_PIN PB2 +#if HAS_TFT_LVGL_UI + #define BOARD_INIT OUT_WRITE(PB0, LOW) +#endif + #include "pins_MKS_ROBIN_NANO_common.h" #if HAS_TFT_LVGL_UI && FAN1_PIN != PB0 && HEATER_1_PIN != PB0 diff --git a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h index bbf162bb0d..2c191946cd 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h @@ -366,9 +366,15 @@ #endif // HAS_WIRED_LCD +#if HAS_TFT_LVGL_UI + #define USE_SPI_DMA_TC +#endif + #if ANY(TFT_COLOR_UI, TFT_LVGL_UI, TFT_CLASSIC_UI, HAS_WIRED_LCD) #define BEEPER_PIN EXP1_10_PIN - #define BTN_EN1 EXP2_08_PIN - #define BTN_EN2 EXP2_06_PIN - #define BTN_ENC EXP1_09_PIN + #if DISABLED(USE_SPI_DMA_TC) + #define BTN_EN1 EXP2_08_PIN + #define BTN_EN2 EXP2_06_PIN + #define BTN_ENC EXP1_09_PIN + #endif #endif From cc87695ae716df12002c89cc015ffe01ee43a4cd Mon Sep 17 00:00:00 2001 From: "A. Herlas" <45262264+protektwar@users.noreply.github.com> Date: Sun, 16 Jan 2022 06:08:31 +0100 Subject: [PATCH 374/532] =?UTF-8?q?=E2=9C=A8=20Z=20Offset=20Wizard=20for?= =?UTF-8?q?=20TFT=5FLVGL=5FUI=20(English)=20(#23489)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 55 +++-- .../lcd/extui/mks_ui/draw_level_settings.cpp | 11 +- Marlin/src/lcd/extui/mks_ui/draw_ui.cpp | 14 ++ Marlin/src/lcd/extui/mks_ui/draw_ui.h | 2 + .../lcd/extui/mks_ui/draw_z_offset_wizard.cpp | 228 ++++++++++++++++++ .../lcd/extui/mks_ui/draw_z_offset_wizard.h | 36 +++ Marlin/src/lcd/extui/mks_ui/tft_Language_en.h | 3 + .../lcd/extui/mks_ui/tft_multi_language.cpp | 14 +- .../src/lcd/extui/mks_ui/tft_multi_language.h | 5 + Marlin/src/lcd/menu/menu_probe_offset.cpp | 10 +- Marlin/src/module/probe.h | 8 + 11 files changed, 343 insertions(+), 43 deletions(-) create mode 100644 Marlin/src/lcd/extui/mks_ui/draw_z_offset_wizard.cpp create mode 100644 Marlin/src/lcd/extui/mks_ui/draw_z_offset_wizard.h diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index dae41f814f..0bcd41fd52 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1280,37 +1280,36 @@ #define FEEDRATE_CHANGE_BEEP_FREQUENCY 440 #endif +#if HAS_BED_PROBE && EITHER(HAS_LCD_MENU, HAS_TFT_LVGL_UI) + //#define PROBE_OFFSET_WIZARD // Add a Probe Z Offset calibration option to the LCD menu + #if ENABLED(PROBE_OFFSET_WIZARD) + /** + * Enable to init the Probe Z-Offset when starting the Wizard. + * Use a height slightly above the estimated nozzle-to-probe Z offset. + * For example, with an offset of -5, consider a starting height of -4. + */ + //#define PROBE_OFFSET_WIZARD_START_Z -4.0 + + // Set a convenient position to do the calibration (probing point and nozzle/bed-distance) + //#define PROBE_OFFSET_WIZARD_XY_POS { X_CENTER, Y_CENTER } + #endif +#endif + #if HAS_LCD_MENU // Add Probe Z Offset calibration to the Z Probe Offsets menu - #if HAS_BED_PROBE - //#define PROBE_OFFSET_WIZARD - #if ENABLED(PROBE_OFFSET_WIZARD) - // - // Enable to init the Probe Z-Offset when starting the Wizard. - // Use a height slightly above the estimated nozzle-to-probe Z offset. - // For example, with an offset of -5, consider a starting height of -4. - // - //#define PROBE_OFFSET_WIZARD_START_Z -4.0 - - // Set a convenient position to do the calibration (probing point and nozzle/bed-distance) - //#define PROBE_OFFSET_WIZARD_XY_POS { X_CENTER, Y_CENTER } - #endif - - #if ENABLED(AUTO_BED_LEVELING_BILINEAR) - // Add a calibration procedure in the Probe Offsets menu - // to compensate for twist in the X-axis. - //#define X_AXIS_TWIST_COMPENSATION - #if ENABLED(X_AXIS_TWIST_COMPENSATION) - /** - * Enable to init the Probe Z-Offset when starting the Wizard. - * Use a height slightly above the estimated nozzle-to-probe Z offset. - * For example, with an offset of -5, consider a starting height of -4. - */ - #define XATC_START_Z 0.0 - #define XATC_MAX_POINTS 3 // Number of points to probe in the wizard - #define XATC_Y_POSITION Y_CENTER // (mm) Y position to probe - #endif + #if BOTH(HAS_BED_PROBE, AUTO_BED_LEVELING_BILINEAR) + // Add calibration in the Probe Offsets menu to compensate for X-axis twist. + //#define X_AXIS_TWIST_COMPENSATION + #if ENABLED(X_AXIS_TWIST_COMPENSATION) + /** + * Enable to init the Probe Z-Offset when starting the Wizard. + * Use a height slightly above the estimated nozzle-to-probe Z offset. + * For example, with an offset of -5, consider a starting height of -4. + */ + #define XATC_START_Z 0.0 + #define XATC_MAX_POINTS 3 // Number of points to probe in the wizard + #define XATC_Y_POSITION Y_CENTER // (mm) Y position to probe #endif #endif diff --git a/Marlin/src/lcd/extui/mks_ui/draw_level_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_level_settings.cpp index 93d34a8578..aee5573283 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_level_settings.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_level_settings.cpp @@ -36,7 +36,8 @@ enum { ID_LEVEL_RETURN = 1, ID_LEVEL_POSITION, ID_LEVEL_COMMAND, - ID_LEVEL_ZOFFSET + ID_LEVEL_ZOFFSET, + ID_Z_OFFSET_WIZARD }; static void event_handler(lv_obj_t *obj, lv_event_t event) { @@ -57,6 +58,11 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) { case ID_LEVEL_ZOFFSET: lv_draw_auto_level_offset_settings(); break; + #if ENABLED(PROBE_OFFSET_WIZARD) + case ID_Z_OFFSET_WIZARD: + lv_draw_z_offset_wizard(); + break; + #endif #endif } } @@ -67,6 +73,9 @@ void lv_draw_level_settings() { lv_screen_menu_item(scr, machine_menu.LevelingAutoCommandConf, PARA_UI_POS_X, PARA_UI_POS_Y * 2, event_handler, ID_LEVEL_COMMAND, 1); #if HAS_BED_PROBE lv_screen_menu_item(scr, machine_menu.LevelingAutoZoffsetConf, PARA_UI_POS_X, PARA_UI_POS_Y * 3, event_handler, ID_LEVEL_ZOFFSET, 2); + #if ENABLED(PROBE_OFFSET_WIZARD) + lv_screen_menu_item(scr, machine_menu.LevelingZoffsetWizard, PARA_UI_POS_X, PARA_UI_POS_Y * 4, event_handler, ID_Z_OFFSET_WIZARD, 3); + #endif #endif lv_big_button_create(scr, "F:/bmp_back70x40.bin", common_menu.text_back, PARA_UI_BACK_POS_X + 10, PARA_UI_BACK_POS_Y, event_handler, ID_LEVEL_RETURN, true); } diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp index aa6fe5e063..d3f192e44f 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp @@ -456,6 +456,10 @@ char *getDispText(int index) { } break; case MOVE_MOTOR_UI: strcpy(public_buf_l, move_menu.title); break; + + #if ENABLED(PROBE_OFFSET_WIZARD) + case Z_OFFSET_WIZARD_UI: break; + #endif case OPERATE_UI: switch (disp_state_stack._disp_state[disp_state_stack._disp_index]) { IF_DISABLED(TFT35, case OPERATE_UI: case PAUSE_UI:) @@ -785,6 +789,10 @@ void GUI_RefreshPage() { case MOVE_MOTOR_UI: break; + #if ENABLED(PROBE_OFFSET_WIZARD) + case Z_OFFSET_WIZARD_UI: break; + #endif + #if ENABLED(MKS_WIFI_MODULE) case WIFI_UI: if (temps_update_flag) { @@ -885,6 +893,9 @@ void clear_cur_ui() { case PRINT_FILE_UI: lv_clear_print_file(); break; case PRINTING_UI: lv_clear_printing(); break; case MOVE_MOTOR_UI: lv_clear_move_motor(); break; + #if ENABLED(PROBE_OFFSET_WIZARD) + case Z_OFFSET_WIZARD_UI: lv_clear_z_offset_wizard(); break; + #endif case OPERATE_UI: lv_clear_operation(); break; case PAUSE_UI: break; case EXTRUSION_UI: lv_clear_extrusion(); break; @@ -993,6 +1004,9 @@ void draw_return_ui() { break; case MOVE_MOTOR_UI: lv_draw_move_motor(); break; + #if ENABLED(PROBE_OFFSET_WIZARD) + case Z_OFFSET_WIZARD_UI: lv_draw_z_offset_wizard(); break; + #endif case OPERATE_UI: lv_draw_operation(); break; case PAUSE_UI: break; case EXTRUSION_UI: lv_draw_extrusion(); break; diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.h b/Marlin/src/lcd/extui/mks_ui/draw_ui.h index 950386f878..798e662220 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ui.h +++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.h @@ -69,6 +69,7 @@ #include "draw_max_feedrate_settings.h" #include "draw_tmc_step_mode_settings.h" #include "draw_level_settings.h" +#include "draw_z_offset_wizard.h" #include "draw_tramming_pos_settings.h" #include "draw_auto_level_offset_settings.h" #include "draw_filament_change.h" @@ -266,6 +267,7 @@ typedef enum { PRINT_FILE_UI, PRINTING_UI, MOVE_MOTOR_UI, + Z_OFFSET_WIZARD_UI, OPERATE_UI, PAUSE_UI, EXTRUSION_UI, diff --git a/Marlin/src/lcd/extui/mks_ui/draw_z_offset_wizard.cpp b/Marlin/src/lcd/extui/mks_ui/draw_z_offset_wizard.cpp new file mode 100644 index 0000000000..d95efd862b --- /dev/null +++ b/Marlin/src/lcd/extui/mks_ui/draw_z_offset_wizard.cpp @@ -0,0 +1,228 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2022 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include "../../../inc/MarlinConfigPre.h" + +#if BOTH(HAS_TFT_LVGL_UI, PROBE_OFFSET_WIZARD) + +#include "draw_ui.h" +#include + +#include "../../../gcode/queue.h" +#include "../../../module/motion.h" + +#include "../../../module/planner.h" +#include "../../../inc/MarlinConfig.h" +#include "../../../module/probe.h" + +#if HAS_LEVELING + #include "../../../feature/bedlevel/bedlevel.h" + bool leveling_was_active; +#endif + +extern lv_group_t *g; +static lv_obj_t *scr; + +static lv_obj_t *labelV, *buttonV, *labelP; +static lv_obj_t *labelP_z_offset_ref; +static lv_task_t *updatePosTask; +static char cur_label = 'Z'; +static float cur_pos = 0; +static float cur_OffsetPos = 0; + +// Global storage +float z_offset_backup, calculated_z_offset, z_offset_ref; + +enum { + ID_M_Z_P = 1, + ID_M_Z_N, + ID_M_STEP, + ID_M_SAVE, + ID_M_RETURN +}; + +void disp_cur_wizard_pos() { + char str_1[18]; + sprintf_P(public_buf_l, PSTR("%c:%s mm"), cur_label, dtostrf(cur_pos, 1, 3, str_1)); + if (labelP) lv_label_set_text(labelP, public_buf_l); + + sprintf_P(public_buf_l, PSTR("%c Offset:%s mm"), cur_label, dtostrf(cur_OffsetPos, 1, 3, str_1)); + if (labelP_z_offset_ref) lv_label_set_text(labelP_z_offset_ref, public_buf_l); +} + +static void event_handler(lv_obj_t *obj, lv_event_t event) { + char str_1[16]; + if (event != LV_EVENT_RELEASED) return; + //lv_clear_z_offset_wizard(); + if (!queue.ring_buffer.full(3)) { + bool do_inject = true; + float dist = uiCfg.move_dist; + switch (obj->mks_obj_id) { + case ID_M_Z_N: dist *= -1; case ID_M_Z_P: cur_label = 'Z'; break; + default: do_inject = false; + } + if (do_inject) { + sprintf_P(public_buf_l, PSTR("G91\nG1 %c%s F%d\nG90"), cur_label, dtostrf(dist, 1, 3, str_1), uiCfg.moveSpeed); + queue.inject(public_buf_l); + //calculated_z_offset = probe.offset.z + current_position.z - z_offset_ref; + disp_cur_wizard_pos(); + } + } + + switch (obj->mks_obj_id) { + case ID_M_STEP: + if (ABS((int)(10 * uiCfg.move_dist)) == 10) + uiCfg.move_dist = 0.025; + else if (ABS((int)(1000 * uiCfg.move_dist)) == 25) + uiCfg.move_dist = 0.1; + else + uiCfg.move_dist *= 10.0f; + disp_move_wizard_dist(); + break; + case ID_M_SAVE: + current_position.z = z_offset_ref; // Set Z to z_offset_ref, as we can expect it is at probe height + probe.offset.z = calculated_z_offset; + sync_plan_position(); + // Raise Z as if it was homed + do_z_clearance(Z_POST_CLEARANCE); + watchdog_refresh(); + draw_return_ui(); + return; + case ID_M_RETURN: + probe.offset.z = z_offset_backup; + SET_SOFT_ENDSTOP_LOOSE(false); + TERN_(HAS_LEVELING, set_bed_leveling_enabled(leveling_was_active)); + #if HOMING_Z_WITH_PROBE && defined(PROBE_OFFSET_WIZARD_START_Z) + set_axis_never_homed(Z_AXIS); // On cancel the Z position needs correction + queue.inject_P(PSTR("G28Z")); + #else // Otherwise do a Z clearance move like after Homing + do_z_clearance(Z_POST_CLEARANCE); + #endif + watchdog_refresh(); + draw_return_ui(); + return; + } + disp_cur_wizard_pos(); +} + +void refresh_wizard_pos(lv_task_t *) { + switch (cur_label) { + case 'Z': + cur_pos = current_position.z; + calculated_z_offset = probe.offset.z + current_position.z - z_offset_ref; + cur_OffsetPos = calculated_z_offset; + break; + default: return; + } + disp_cur_wizard_pos(); +} + +void lv_draw_z_offset_wizard() { + + set_all_unhomed(); + + // Store probe.offset.z for Case: Cancel + z_offset_backup = probe.offset.z; + + #ifdef PROBE_OFFSET_WIZARD_START_Z + probe.offset.z = PROBE_OFFSET_WIZARD_START_Z; + #endif + + // Store Bed-Leveling-State and disable + #if HAS_LEVELING + leveling_was_active = planner.leveling_active; + set_bed_leveling_enabled(leveling_was_active); + #endif + + queue.inject_P(PSTR("G28")); + + z_offset_ref = 0; // Set Z Value for Wizard Position to 0 + calculated_z_offset = probe.offset.z + current_position.z - z_offset_ref; + cur_OffsetPos = calculated_z_offset; + + scr = lv_screen_create(Z_OFFSET_WIZARD_UI, machine_menu.LevelingZoffsetTitle); + + lv_obj_t *buttonXI = lv_big_button_create(scr, "F:/bmp_zAdd.bin", move_menu.z_add, INTERVAL_V, titleHeight, event_handler, ID_M_Z_P); + lv_obj_clear_protect(buttonXI, LV_PROTECT_FOLLOW); + lv_big_button_create(scr, "F:/bmp_zDec.bin", move_menu.z_dec, INTERVAL_V * 3, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_M_Z_N); + + // button with image and label changed dynamically by disp_move_dist + buttonV = lv_imgbtn_create(scr, nullptr, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight, event_handler, ID_M_STEP); + labelV = lv_label_create_empty(buttonV); + #if HAS_ROTARY_ENCODER + if (gCfgItems.encoder_enable) lv_group_add_obj(g, buttonV); + #endif + + // save and back + lv_big_button_create(scr, "F:/bmp_return.bin", common_menu.text_save, BTN_X_PIXEL * 2 + INTERVAL_V * 3, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_M_SAVE); + // cancel and back + lv_big_button_create(scr, "F:/bmp_return.bin", common_menu.text_back, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_M_RETURN); + + // We need to patch the title to leave some space on the right for displaying the status + lv_obj_t * z_offset_ref_title = lv_obj_get_child_back(scr, nullptr); + if (z_offset_ref_title != nullptr) lv_obj_set_width(z_offset_ref_title, (int)(TFT_WIDTH / 2) - 101); + labelP_z_offset_ref = lv_label_create(scr, (int)(TFT_WIDTH / 2) - 80, (int)(TFT_HEIGHT/2)-20, "Z Offset:0.0mm"); + + // We need to patch the Z Offset to leave some space in the middle for displaying the status + lv_obj_t * title= lv_obj_get_child_back(scr, nullptr); + if (title != nullptr) lv_obj_set_width(title, TFT_WIDTH - 101); + labelP = lv_label_create(scr, TFT_WIDTH - 100, TITLE_YPOS, "Z:0.0mm"); + + if (labelP != nullptr) + updatePosTask = lv_task_create(refresh_wizard_pos, 300, LV_TASK_PRIO_LOWEST, 0); + + disp_move_wizard_dist(); + disp_cur_wizard_pos(); +} + +void disp_move_wizard_dist() { + if ((int)(1000 * uiCfg.move_dist) == 25) + lv_imgbtn_set_src_both(buttonV, "F:/bmp_step_move0_1.bin"); + else if ((int)(10 * uiCfg.move_dist) == 1) + lv_imgbtn_set_src_both(buttonV, "F:/bmp_step_move1.bin"); + else if ((int)(10 * uiCfg.move_dist) == 10) + lv_imgbtn_set_src_both(buttonV, "F:/bmp_step_move10.bin"); + + if (gCfgItems.multiple_language) { + if ((int)(1000 * uiCfg.move_dist) == 25) { + lv_label_set_text(labelV, move_menu.step_0025mm); + lv_obj_align(labelV, buttonV, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET); + } + else if ((int)(10 * uiCfg.move_dist) == 1) { + lv_label_set_text(labelV, move_menu.step_01mm); + lv_obj_align(labelV, buttonV, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET); + } + else if ((int)(10 * uiCfg.move_dist) == 10) { + lv_label_set_text(labelV, move_menu.step_1mm); + lv_obj_align(labelV, buttonV, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET); + } + } +} + +void lv_clear_z_offset_wizard() { + #if HAS_ROTARY_ENCODER + if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g); + #endif + lv_obj_del(scr); +} + +#endif // HAS_TFT_LVGL_UI && PROBE_OFFSET_WIZARD diff --git a/Marlin/src/lcd/extui/mks_ui/draw_z_offset_wizard.h b/Marlin/src/lcd/extui/mks_ui/draw_z_offset_wizard.h new file mode 100644 index 0000000000..47a3d69c46 --- /dev/null +++ b/Marlin/src/lcd/extui/mks_ui/draw_z_offset_wizard.h @@ -0,0 +1,36 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2022 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +#ifdef __cplusplus + extern "C" { /* C-declarations for C++ */ +#endif + +void lv_draw_z_offset_wizard(); +void refresh_wizard_pos(); +void disp_cur_wizard_pos(); +void disp_move_wizard_dist(); +void lv_clear_z_offset_wizard(); + +#ifdef __cplusplus + } /* C-declarations for C++ */ +#endif diff --git a/Marlin/src/lcd/extui/mks_ui/tft_Language_en.h b/Marlin/src/lcd/extui/mks_ui/tft_Language_en.h index a41864eec4..5195986e35 100644 --- a/Marlin/src/lcd/extui/mks_ui/tft_Language_en.h +++ b/Marlin/src/lcd/extui/mks_ui/tft_Language_en.h @@ -103,6 +103,8 @@ #define LEVELING_AUTO_COMMAND_EN "AutoLeveling command settings" #define LEVELING_AUTO_ZOFFSET_EN "Nozzle-to-probe offsets settings" +#define LEVELING_ZOFFSET_TITLE_EN "Machine Settings>Z Offset Wizard" + #define LEVELING_PARA_CONF_TITLE_EN "leveling setting" #define AUTO_LEVELING_ENABLE_EN "Enable auto leveling" #define BLTOUCH_LEVELING_ENABLE_EN "Enable BLTouch" @@ -293,6 +295,7 @@ #define CLOSE_TEXT_EN "Close" #define BACK_TEXT_EN "Back" +#define SAVE_TEXT_EN "Save" #define TOOL_PREHEAT_EN "Preheat" #define TOOL_EXTRUDE_EN "Extrusion" diff --git a/Marlin/src/lcd/extui/mks_ui/tft_multi_language.cpp b/Marlin/src/lcd/extui/mks_ui/tft_multi_language.cpp index c69ccf6587..6e9c37b016 100644 --- a/Marlin/src/lcd/extui/mks_ui/tft_multi_language.cpp +++ b/Marlin/src/lcd/extui/mks_ui/tft_multi_language.cpp @@ -578,6 +578,8 @@ void machine_setting_disp() { machine_menu.OutLength = FILAMENT_OUT_LENGTH_EN; machine_menu.OutSpeed = FILAMENT_OUT_SPEED_EN; + machine_menu.LevelingZoffsetTitle = LEVELING_ZOFFSET_TITLE_EN; + machine_menu.LevelingParaConfTitle = LEVELING_CONF_TITLE_EN; machine_menu.LevelingParaConf = LEVELING_PARA_CONF_EN; machine_menu.TrammingPosConf = TRAMMING_POS_EN; @@ -767,11 +769,12 @@ void disp_language_init() { move_menu.z_add = AXIS_Z_ADD_TEXT; move_menu.z_dec = AXIS_Z_DEC_TEXT; - move_menu.step_001mm = TEXT_001MM; - move_menu.step_005mm = TEXT_005MM; - move_menu.step_01mm = TEXT_01MM; - move_menu.step_1mm = TEXT_1MM; - move_menu.step_10mm = TEXT_10MM; + move_menu.step_001mm = TEXT_001MM; + move_menu.step_0025mm = TEXT_0025MM; + move_menu.step_005mm = TEXT_005MM; + move_menu.step_01mm = TEXT_01MM; + move_menu.step_1mm = TEXT_1MM; + move_menu.step_10mm = TEXT_10MM; home_menu.home_x = HOME_X_TEXT; home_menu.home_y = HOME_Y_TEXT; @@ -1346,6 +1349,7 @@ void disp_language_init() { case LANG_ENGLISH: common_menu.dialog_confirm_title = TITLE_DIALOG_CONFIRM_EN; common_menu.text_back = BACK_TEXT_EN; + common_menu.text_save = SAVE_TEXT_EN; common_menu.close_machine_tips = DIALOG_CLOSE_MACHINE_EN; common_menu.unbind_printer_tips = DIALOG_UNBIND_PRINTER_EN; common_menu.print_special_title = PRINTING_OTHER_LANGUGE; diff --git a/Marlin/src/lcd/extui/mks_ui/tft_multi_language.h b/Marlin/src/lcd/extui/mks_ui/tft_multi_language.h index 0d0285f322..2a5135dded 100644 --- a/Marlin/src/lcd/extui/mks_ui/tft_multi_language.h +++ b/Marlin/src/lcd/extui/mks_ui/tft_multi_language.h @@ -101,6 +101,8 @@ typedef struct machine_common_disp { const char *OutLength; const char *OutSpeed; + const char *LevelingZoffsetTitle; + const char *LevelingParaConfTitle; const char *LevelingParaConf; const char *TrammingPosConf; @@ -294,6 +296,7 @@ extern machine_common_def machine_menu; typedef struct common_menu_disp { const char *text_back; + const char *text_save; const char *dialog_confirm_title; const char *close_machine_tips; const char *unbind_printer_tips; @@ -355,6 +358,7 @@ typedef struct move_menu_disp { const char *z_add; const char *z_dec; const char *step_001mm; + const char *step_0025mm; const char *step_005mm; const char *step_01mm; const char *step_1mm; @@ -777,6 +781,7 @@ extern eeprom_def eeprom_menu; #define AXIS_Z_ADD_TEXT "Z+" #define AXIS_Z_DEC_TEXT "Z-" #define TEXT_001MM "0.01 mm" +#define TEXT_0025MM "0.025 mm" #define TEXT_005MM "0.05 mm" #define TEXT_01MM "0.1 mm" #define TEXT_1MM "1 mm" diff --git a/Marlin/src/lcd/menu/menu_probe_offset.cpp b/Marlin/src/lcd/menu/menu_probe_offset.cpp index add7395533..ae785fa641 100644 --- a/Marlin/src/lcd/menu/menu_probe_offset.cpp +++ b/Marlin/src/lcd/menu/menu_probe_offset.cpp @@ -45,15 +45,7 @@ void _goto_manual_move_z(const_float_t); float z_offset_backup, calculated_z_offset, z_offset_ref; inline void z_clearance_move() { - do_z_clearance( - #ifdef Z_AFTER_HOMING - Z_AFTER_HOMING - #elif defined(Z_HOMING_HEIGHT) - Z_HOMING_HEIGHT - #else - 10 - #endif - ); + do_z_clearance(Z_POST_CLEARANCE); } void set_offset_and_go_back(const_float_t z) { diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index d9c50b0125..752e83f467 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -45,6 +45,14 @@ #define PROBE_TRIGGERED() (READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING) #endif +#ifdef Z_AFTER_HOMING + #define Z_POST_CLEARANCE Z_AFTER_HOMING +#elif defined(Z_HOMING_HEIGHT) + #define Z_POST_CLEARANCE Z_HOMING_HEIGHT +#else + #define Z_POST_CLEARANCE 10 +#endif + #if ENABLED(PREHEAT_BEFORE_LEVELING) #ifndef LEVELING_NOZZLE_TEMP #define LEVELING_NOZZLE_TEMP 0 From 9778b67e84b1ff022669b7327a297d6cd44d4ed2 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 15 Jan 2022 23:17:39 -0600 Subject: [PATCH 375/532] =?UTF-8?q?=F0=9F=A9=B9=20Fan=20speed=20followup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/planner.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index aae997c48a..8d8f44dc78 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1392,12 +1392,7 @@ void Planner::check_axes_activity() { // Update Fan speeds // Only if synchronous M106/M107 is disabled // - #if HAS_TAIL_FAN_SPEED - if (fans_need_update) { - sync_fan_speeds(tail_fan_speed); - fans_need_update = false; - } - #endif + TERN_(HAS_TAIL_FAN_SPEED, if (fans_need_update) sync_fan_speeds(tail_fan_speed)); TERN_(AUTOTEMP, autotemp_task()); From 3315ff8856fba816f73abb3164393136ebe9062b Mon Sep 17 00:00:00 2001 From: Taylor Talkington Date: Mon, 17 Jan 2022 00:34:50 -0500 Subject: [PATCH 376/532] =?UTF-8?q?=F0=9F=92=84=20MarlinUI+DOGM=20leveled?= =?UTF-8?q?=20bed=20bitmaps=20(#23539)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/dogm/status/bed.h | 29 ++++++++++++++++++++++ Marlin/src/lcd/dogm/status_screen_DOGM.cpp | 12 ++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/Marlin/src/lcd/dogm/status/bed.h b/Marlin/src/lcd/dogm/status/bed.h index 175a50e341..27f5617ef7 100644 --- a/Marlin/src/lcd/dogm/status/bed.h +++ b/Marlin/src/lcd/dogm/status/bed.h @@ -42,6 +42,18 @@ B00000011,B11111111,B11111111 }; + #if HAS_LEVELING + const unsigned char status_bed_leveled_bmp[] PROGMEM = { + B11111111,B11111111,B11001110, + B01000000,B00100000,B00100100, + B00100000,B00010000,B00010000, + B00011111,B11111111,B11111000, + B00001000,B00000100,B00000100, + B00100100,B00000010,B00000010, + B01110011,B11111111,B11111111 + }; + #endif + const unsigned char status_bed_on_bmp[] PROGMEM = { B00000010,B00100010,B00000000, B00000100,B01000100,B00000000, @@ -57,6 +69,23 @@ B00000011,B11111111,B11111111 }; + #if HAS_LEVELING + const unsigned char status_bed_leveled_on_bmp[] PROGMEM = { + B00000010,B00100010,B00000000, + B00000100,B01000100,B00000000, + B00000100,B01000100,B00000000, + B00000010,B00100010,B00000000, + B00000001,B00010001,B00000000, + B11111111,B11111111,B11001110, + B01000000,B10101000,B10100100, + B00100001,B00010001,B00010000, + B00011111,B11111111,B11111000, + B00001000,B00000100,B00000100, + B00100100,B00000010,B00000010, + B01110011,B11111111,B11111111 + }; + #endif + #else #define STATUS_BED_WIDTH 21 diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp index aabca82fde..cac8ffd6ac 100644 --- a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp +++ b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp @@ -49,6 +49,10 @@ #include "../../module/planner.h" #endif +#if HAS_LEVELING + #include "../../module/planner.h" +#endif + #if HAS_CUTTER #include "../../feature/spindle_laser.h" #endif @@ -602,7 +606,13 @@ void MarlinUI::draw_status_screen() { #if DO_DRAW_BED && DISABLED(STATUS_COMBINE_HEATERS) #if ANIM_BED - #define BED_BITMAP(S) ((S) ? status_bed_on_bmp : status_bed_bmp) + #if BOTH(HAS_LEVELING, STATUS_ALT_BED_BITMAP) + #define BED_BITMAP(S) ((S) \ + ? (planner.leveling_active ? status_bed_leveled_on_bmp : status_bed_on_bmp) \ + : (planner.leveling_active ? status_bed_leveled_bmp : status_bed_bmp)) + #else + #define BED_BITMAP(S) ((S) ? status_bed_on_bmp : status_bed_bmp) + #endif #else #define BED_BITMAP(S) status_bed_bmp #endif From 6cfa011c10198f730c8621994212fc828bd6814e Mon Sep 17 00:00:00 2001 From: Miguel Risco-Castillo Date: Mon, 17 Jan 2022 00:36:03 -0500 Subject: [PATCH 377/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20PLR=20for=20E3V2?= =?UTF-8?q?=20Enhanced=20UI=20(#23543)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index f12f981b72..484aa392f0 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -1445,6 +1445,9 @@ void Draw_Main_Area() { case PrintStatsProcess: Draw_PrintStats(); break; #endif case PauseOrStop: Popup_window_PauseOrStop(); break; + #if ENABLED(POWER_LOSS_RECOVERY) + case PwrlossRec: Popup_PowerLossRecovery(); break; + #endif #if ENABLED(ADVANCED_PAUSE_FEATURE) case FilamentPurge: Draw_Popup_FilamentPurge(); break; #endif @@ -1589,7 +1592,7 @@ void EachMomentUpdate() { #if ENABLED(POWER_LOSS_RECOVERY) else if (DWIN_lcd_sd_status && recovery.dwin_flag) { // resume print before power off - Goto_PowerLossRecovery(); + return Goto_PowerLossRecovery(); } #endif // POWER_LOSS_RECOVERY @@ -1675,6 +1678,9 @@ void DWIN_HandleScreen() { #endif case NothingToDo: break; case Locked: HMI_LockScreen(); break; + #if ENABLED(POWER_LOSS_RECOVERY) + case PwrlossRec: HMI_PowerlossRecovery(); break; + #endif #if HAS_ESDIAG case ESDiagProcess: HMI_Popup(); break; #endif From af93dbfb4f94a7e50c5f0eae2b0a7e911706e5c5 Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Mon, 17 Jan 2022 00:39:09 -0500 Subject: [PATCH 378/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Ultimain=202=20E-a?= =?UTF-8?q?utofan=20pin=20mapping=20(#23466)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/temperature.cpp | 10 ---------- Marlin/src/pins/ramps/pins_ULTIMAIN_2.h | 2 +- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index bb1768054e..07f72b570a 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -888,16 +888,6 @@ int16_t Temperature::getHeaterPower(const heater_id_t heater_id) { HOTEND_LOOP() { if (temp_hotend[e].celsius >= EXTRUDER_AUTO_FAN_TEMPERATURE) { SBI(fanState, pgm_read_byte(&fanBit[e])); - #if MOTHERBOARD == BOARD_ULTIMAIN_2 - // For the UM2 the head fan is connected to PJ6, which does not have an Arduino PIN definition. So use direct register access. - // https://github.com/Ultimaker/Ultimaker2Marlin/blob/master/Marlin/temperature.cpp#L553 - SBI(DDRJ, 6); SBI(PORTJ, 6); - #endif - } - else { - #if MOTHERBOARD == BOARD_ULTIMAIN_2 - SBI(DDRJ, 6); CBI(PORTJ, 6); - #endif } } diff --git a/Marlin/src/pins/ramps/pins_ULTIMAIN_2.h b/Marlin/src/pins/ramps/pins_ULTIMAIN_2.h index 9823d4cf4b..128f1974e0 100644 --- a/Marlin/src/pins/ramps/pins_ULTIMAIN_2.h +++ b/Marlin/src/pins/ramps/pins_ULTIMAIN_2.h @@ -98,7 +98,7 @@ #endif #ifndef E0_AUTO_FAN_PIN - #define E0_AUTO_FAN_PIN 69 + #define E0_AUTO_FAN_PIN 77 #endif // From 9285b6b9edcb42d38736a08785371204aea56501 Mon Sep 17 00:00:00 2001 From: zerkix <97692157+zerkix@users.noreply.github.com> Date: Mon, 17 Jan 2022 07:05:31 +0100 Subject: [PATCH 379/532] =?UTF-8?q?=F0=9F=90=9B=20Finish=20and=20organize?= =?UTF-8?q?=20temp=20sensors=20(#23519)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/HAL/ESP32/HAL.cpp | 2 + Marlin/src/HAL/SAMD51/HAL.cpp | 42 ++-- Marlin/src/HAL/STM32F1/HAL.cpp | 233 +++++------------- Marlin/src/core/macros.h | 2 + Marlin/src/inc/Conditionals_adv.h | 6 +- Marlin/src/inc/Conditionals_post.h | 14 +- .../lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp | 12 +- Marlin/src/module/temperature.cpp | 8 +- Marlin/src/module/temperature.h | 22 +- Marlin/src/module/thermistor/thermistors.h | 16 +- Marlin/src/pins/pinsDebug_list.h | 16 +- 11 files changed, 144 insertions(+), 229 deletions(-) diff --git a/Marlin/src/HAL/ESP32/HAL.cpp b/Marlin/src/HAL/ESP32/HAL.cpp index 810e386894..499582b8c1 100644 --- a/Marlin/src/HAL/ESP32/HAL.cpp +++ b/Marlin/src/HAL/ESP32/HAL.cpp @@ -211,7 +211,9 @@ void HAL_adc_init() { TERN_(HAS_TEMP_ADC_7, adc3_set_attenuation(get_channel(TEMP_7_PIN), ADC_ATTEN_11db)); TERN_(HAS_HEATED_BED, adc1_set_attenuation(get_channel(TEMP_BED_PIN), ADC_ATTEN_11db)); TERN_(HAS_TEMP_CHAMBER, adc1_set_attenuation(get_channel(TEMP_CHAMBER_PIN), ADC_ATTEN_11db)); + TERN_(HAS_TEMP_PROBE, adc1_set_attenuation(get_channel(TEMP_PROBE_PIN), ADC_ATTEN_11db)); TERN_(HAS_TEMP_COOLER, adc1_set_attenuation(get_channel(TEMP_COOLER_PIN), ADC_ATTEN_11db)); + TERN_(HAS_TEMP_BOARD, adc1_set_attenuation(get_channel(TEMP_BOARD_PIN), ADC_ATTEN_11db)); TERN_(FILAMENT_WIDTH_SENSOR, adc1_set_attenuation(get_channel(FILWIDTH_PIN), ADC_ATTEN_11db)); // Note that adc2 is shared with the WiFi module, which has higher priority, so the conversion may fail. diff --git a/Marlin/src/HAL/SAMD51/HAL.cpp b/Marlin/src/HAL/SAMD51/HAL.cpp index 8baad31bc7..a5febad83b 100644 --- a/Marlin/src/HAL/SAMD51/HAL.cpp +++ b/Marlin/src/HAL/SAMD51/HAL.cpp @@ -54,20 +54,22 @@ #define GET_TEMP_5_ADC() TERN(HAS_TEMP_ADC_5, PIN_TO_ADC(TEMP_5_PIN), -1) #define GET_TEMP_6_ADC() TERN(HAS_TEMP_ADC_6, PIN_TO_ADC(TEMP_6_PIN), -1) #define GET_TEMP_7_ADC() TERN(HAS_TEMP_ADC_7, PIN_TO_ADC(TEMP_7_PIN), -1) -#define GET_PROBE_ADC() TERN(HAS_TEMP_PROBE, PIN_TO_ADC(TEMP_PROBE_PIN), -1) #define GET_BED_ADC() TERN(HAS_TEMP_ADC_BED, PIN_TO_ADC(TEMP_BED_PIN), -1) #define GET_CHAMBER_ADC() TERN(HAS_TEMP_ADC_CHAMBER, PIN_TO_ADC(TEMP_CHAMBER_PIN), -1) +#define GET_PROBE_ADC() TERN(HAS_TEMP_ADC_PROBE, PIN_TO_ADC(TEMP_PROBE_PIN), -1) #define GET_COOLER_ADC() TERN(HAS_TEMP_ADC_COOLER, PIN_TO_ADC(TEMP_COOLER_PIN), -1) +#define GET_BOARD_ADC() TERN(HAS_TEMP_ADC_BOARD, PIN_TO_ADC(TEMP_BOARD_PIN), -1) #define GET_FILAMENT_WIDTH_ADC() TERN(FILAMENT_WIDTH_SENSOR, PIN_TO_ADC(FILWIDTH_PIN), -1) #define GET_BUTTONS_ADC() TERN(HAS_ADC_BUTTONS, PIN_TO_ADC(ADC_KEYPAD_PIN), -1) #define IS_ADC_REQUIRED(n) ( \ GET_TEMP_0_ADC() == n || GET_TEMP_1_ADC() == n || GET_TEMP_2_ADC() == n || GET_TEMP_3_ADC() == n \ || GET_TEMP_4_ADC() == n || GET_TEMP_5_ADC() == n || GET_TEMP_6_ADC() == n || GET_TEMP_7_ADC() == n \ - || GET_PROBE_ADC() == n \ || GET_BED_ADC() == n \ || GET_CHAMBER_ADC() == n \ + || GET_PROBE_ADC() == n \ || GET_COOLER_ADC() == n \ + || GET_BOARD_ADC() == n \ || GET_FILAMENT_WIDTH_ADC() == n \ || GET_BUTTONS_ADC() == n \ ) @@ -137,18 +139,21 @@ uint16_t HAL_adc_result; #if GET_TEMP_7_ADC() == 0 TEMP_7_PIN, #endif - #if GET_PROBE_ADC() == 0 - TEMP_PROBE_PIN, - #endif #if GET_BED_ADC() == 0 TEMP_BED_PIN, #endif #if GET_CHAMBER_ADC() == 0 TEMP_CHAMBER_PIN, #endif + #if GET_PROBE_ADC() == 0 + TEMP_PROBE_PIN, + #endif #if GET_COOLER_ADC() == 0 TEMP_COOLER_PIN, #endif + #if GET_BOARD_ADC() == 0 + TEMP_BOARD_PIN, + #endif #if GET_FILAMENT_WIDTH_ADC() == 0 FILWIDTH_PIN, #endif @@ -180,18 +185,21 @@ uint16_t HAL_adc_result; #if GET_TEMP_7_ADC() == 1 TEMP_7_PIN, #endif - #if GET_PROBE_ADC() == 1 - TEMP_PROBE_PIN, - #endif #if GET_BED_ADC() == 1 TEMP_BED_PIN, #endif #if GET_CHAMBER_ADC() == 1 TEMP_CHAMBER_PIN, #endif + #if GET_PROBE_ADC() == 1 + TEMP_PROBE_PIN, + #endif #if GET_COOLER_ADC() == 1 TEMP_COOLER_PIN, #endif + #if GET_BOARD_ADC() == 1 + TEMP_BOARD_PIN, + #endif #if GET_FILAMENT_WIDTH_ADC() == 1 FILWIDTH_PIN, #endif @@ -231,18 +239,21 @@ uint16_t HAL_adc_result; #if GET_TEMP_7_ADC() == 0 { PIN_TO_INPUTCTRL(TEMP_7_PIN) }, #endif - #if GET_PROBE_ADC() == 0 - { PIN_TO_INPUTCTRL(TEMP_PROBE_PIN) }, - #endif #if GET_BED_ADC() == 0 { PIN_TO_INPUTCTRL(TEMP_BED_PIN) }, #endif #if GET_CHAMBER_ADC() == 0 { PIN_TO_INPUTCTRL(TEMP_CHAMBER_PIN) }, #endif + #if GET_PROBE_ADC() == 0 + { PIN_TO_INPUTCTRL(TEMP_PROBE_PIN) }, + #endif #if GET_COOLER_ADC() == 0 { PIN_TO_INPUTCTRL(TEMP_COOLER_PIN) }, #endif + #if GET_BOARD_ADC() == 0 + { PIN_TO_INPUTCTRL(TEMP_BOARD_PIN) }, + #endif #if GET_FILAMENT_WIDTH_ADC() == 0 { PIN_TO_INPUTCTRL(FILWIDTH_PIN) }, #endif @@ -283,18 +294,21 @@ uint16_t HAL_adc_result; #if GET_TEMP_7_ADC() == 1 { PIN_TO_INPUTCTRL(TEMP_7_PIN) }, #endif - #if GET_PROBE_ADC() == 1 - { PIN_TO_INPUTCTRL(TEMP_PROBE_PIN) }, - #endif #if GET_BED_ADC() == 1 { PIN_TO_INPUTCTRL(TEMP_BED_PIN) }, #endif #if GET_CHAMBER_ADC() == 1 { PIN_TO_INPUTCTRL(TEMP_CHAMBER_PIN) }, #endif + #if GET_PROBE_ADC() == 1 + { PIN_TO_INPUTCTRL(TEMP_PROBE_PIN) }, + #endif #if GET_COOLER_ADC() == 1 { PIN_TO_INPUTCTRL(TEMP_COOLER_PIN) }, #endif + #if GET_BOARD_ADC() == 1 + { PIN_TO_INPUTCTRL(TEMP_BOARD_PIN) }, + #endif #if GET_FILAMENT_WIDTH_ADC() == 1 { PIN_TO_INPUTCTRL(FILWIDTH_PIN) }, #endif diff --git a/Marlin/src/HAL/STM32F1/HAL.cpp b/Marlin/src/HAL/STM32F1/HAL.cpp index f29b305361..a0486da5b0 100644 --- a/Marlin/src/HAL/STM32F1/HAL.cpp +++ b/Marlin/src/HAL/STM32F1/HAL.cpp @@ -120,123 +120,49 @@ uint16_t HAL_adc_result; STM32ADC adc(ADC1); const uint8_t adc_pins[] = { - #if HAS_TEMP_ADC_0 - TEMP_0_PIN, - #endif - #if HAS_TEMP_ADC_PROBE - TEMP_PROBE_PIN, - #endif - #if HAS_HEATED_BED - TEMP_BED_PIN, - #endif - #if HAS_TEMP_CHAMBER - TEMP_CHAMBER_PIN, - #endif - #if HAS_TEMP_COOLER - TEMP_COOLER_PIN, - #endif - #if HAS_TEMP_ADC_1 - TEMP_1_PIN, - #endif - #if HAS_TEMP_ADC_2 - TEMP_2_PIN, - #endif - #if HAS_TEMP_ADC_3 - TEMP_3_PIN, - #endif - #if HAS_TEMP_ADC_4 - TEMP_4_PIN, - #endif - #if HAS_TEMP_ADC_5 - TEMP_5_PIN, - #endif - #if HAS_TEMP_ADC_6 - TEMP_6_PIN, - #endif - #if HAS_TEMP_ADC_7 - TEMP_7_PIN, - #endif - #if ENABLED(FILAMENT_WIDTH_SENSOR) - FILWIDTH_PIN, - #endif - #if HAS_ADC_BUTTONS - ADC_KEYPAD_PIN, - #endif - #if HAS_JOY_ADC_X - JOY_X_PIN, - #endif - #if HAS_JOY_ADC_Y - JOY_Y_PIN, - #endif - #if HAS_JOY_ADC_Z - JOY_Z_PIN, - #endif - #if ENABLED(POWER_MONITOR_CURRENT) - POWER_MONITOR_CURRENT_PIN, - #endif - #if ENABLED(POWER_MONITOR_VOLTAGE) - POWER_MONITOR_VOLTAGE_PIN, - #endif + OPTITEM(HAS_TEMP_ADC_0, TEMP_0_PIN) + OPTITEM(HAS_TEMP_ADC_1, TEMP_1_PIN) + OPTITEM(HAS_TEMP_ADC_2, TEMP_2_PIN) + OPTITEM(HAS_TEMP_ADC_3, TEMP_3_PIN) + OPTITEM(HAS_TEMP_ADC_4, TEMP_4_PIN) + OPTITEM(HAS_TEMP_ADC_5, TEMP_5_PIN) + OPTITEM(HAS_TEMP_ADC_6, TEMP_6_PIN) + OPTITEM(HAS_TEMP_ADC_7, TEMP_7_PIN) + OPTITEM(HAS_HEATED_BED, TEMP_BED_PIN) + OPTITEM(HAS_TEMP_CHAMBER, TEMP_CHAMBER_PIN) + OPTITEM(HAS_TEMP_ADC_PROBE, TEMP_PROBE_PIN) + OPTITEM(HAS_TEMP_COOLER, TEMP_COOLER_PIN) + OPTITEM(HAS_TEMP_BOARD, TEMP_BOARD_PIN) + OPTITEM(FILAMENT_WIDTH_SENSOR, FILWIDTH_PIN) + OPTITEM(HAS_ADC_BUTTONS, ADC_KEYPAD_PIN) + OPTITEM(HAS_JOY_ADC_X, JOY_X_PIN) + OPTITEM(HAS_JOY_ADC_Y, JOY_Y_PIN) + OPTITEM(HAS_JOY_ADC_Z, JOY_Z_PIN) + OPTITEM(POWER_MONITOR_CURRENT, POWER_MONITOR_CURRENT_PIN) + OPTITEM(POWER_MONITOR_VOLTAGE, POWER_MONITOR_VOLTAGE_PIN) }; enum TempPinIndex : char { - #if HAS_TEMP_ADC_0 - TEMP_0, - #endif - #if HAS_TEMP_ADC_PROBE - TEMP_PROBE, - #endif - #if HAS_HEATED_BED - TEMP_BED, - #endif - #if HAS_TEMP_CHAMBER - TEMP_CHAMBER, - #endif - #if HAS_TEMP_COOLER - TEMP_COOLER_PIN, - #endif - #if HAS_TEMP_ADC_1 - TEMP_1, - #endif - #if HAS_TEMP_ADC_2 - TEMP_2, - #endif - #if HAS_TEMP_ADC_3 - TEMP_3, - #endif - #if HAS_TEMP_ADC_4 - TEMP_4, - #endif - #if HAS_TEMP_ADC_5 - TEMP_5, - #endif - #if HAS_TEMP_ADC_6 - TEMP_6, - #endif - #if HAS_TEMP_ADC_7 - TEMP_7, - #endif - #if ENABLED(FILAMENT_WIDTH_SENSOR) - FILWIDTH, - #endif - #if HAS_ADC_BUTTONS - ADC_KEY, - #endif - #if HAS_JOY_ADC_X - JOY_X, - #endif - #if HAS_JOY_ADC_Y - JOY_Y, - #endif - #if HAS_JOY_ADC_Z - JOY_Z, - #endif - #if ENABLED(POWER_MONITOR_CURRENT) - POWERMON_CURRENT, - #endif - #if ENABLED(POWER_MONITOR_VOLTAGE) - POWERMON_VOLTS, - #endif + OPTITEM(HAS_TEMP_ADC_0, TEMP_0) + OPTITEM(HAS_TEMP_ADC_1, TEMP_1) + OPTITEM(HAS_TEMP_ADC_2, TEMP_2) + OPTITEM(HAS_TEMP_ADC_3, TEMP_3) + OPTITEM(HAS_TEMP_ADC_4, TEMP_4) + OPTITEM(HAS_TEMP_ADC_5, TEMP_5) + OPTITEM(HAS_TEMP_ADC_6, TEMP_6) + OPTITEM(HAS_TEMP_ADC_7, TEMP_7) + OPTITEM(HAS_HEATED_BED, TEMP_BED) + OPTITEM(HAS_TEMP_CHAMBER, TEMP_CHAMBER) + OPTITEM(HAS_TEMP_ADC_PROBE, TEMP_PROBE) + OPTITEM(HAS_TEMP_COOLER, TEMP_COOLER) + OPTITEM(HAS_TEMP_BOARD, TEMP_BOARD) + OPTITEM(FILAMENT_WIDTH_SENSOR, FILWIDTH) + OPTITEM(HAS_ADC_BUTTONS, ADC_KEY) + OPTITEM(HAS_JOY_ADC_X, JOY_X) + OPTITEM(HAS_JOY_ADC_Y, JOY_Y) + OPTITEM(HAS_JOY_ADC_Z, JOY_Z) + OPTITEM(POWER_MONITOR_CURRENT, POWERMON_CURRENT) + OPTITEM(POWER_MONITOR_VOLTAGE, POWERMON_VOLTS) ADC_PIN_COUNT }; @@ -375,67 +301,32 @@ void HAL_adc_init() { } void HAL_adc_start_conversion(const uint8_t adc_pin) { + #define __TCASE(N,I) case N: pin_index = I; break; + #define _TCASE(C,N,I) TERN_(C, __TCASE(N, I)) //TEMP_PINS pin_index; TempPinIndex pin_index; switch (adc_pin) { default: return; - #if HAS_TEMP_ADC_0 - case TEMP_0_PIN: pin_index = TEMP_0; break; - #endif - #if HAS_TEMP_ADC_PROBE - case TEMP_PROBE_PIN: pin_index = TEMP_PROBE; break; - #endif - #if HAS_HEATED_BED - case TEMP_BED_PIN: pin_index = TEMP_BED; break; - #endif - #if HAS_TEMP_CHAMBER - case TEMP_CHAMBER_PIN: pin_index = TEMP_CHAMBER; break; - #endif - #if HAS_TEMP_COOLER - case TEMP_COOLER_PIN: pin_index = TEMP_COOLER; break; - #endif - #if HAS_TEMP_ADC_1 - case TEMP_1_PIN: pin_index = TEMP_1; break; - #endif - #if HAS_TEMP_ADC_2 - case TEMP_2_PIN: pin_index = TEMP_2; break; - #endif - #if HAS_TEMP_ADC_3 - case TEMP_3_PIN: pin_index = TEMP_3; break; - #endif - #if HAS_TEMP_ADC_4 - case TEMP_4_PIN: pin_index = TEMP_4; break; - #endif - #if HAS_TEMP_ADC_5 - case TEMP_5_PIN: pin_index = TEMP_5; break; - #endif - #if HAS_TEMP_ADC_6 - case TEMP_6_PIN: pin_index = TEMP_6; break; - #endif - #if HAS_TEMP_ADC_7 - case TEMP_7_PIN: pin_index = TEMP_7; break; - #endif - #if HAS_JOY_ADC_X - case JOY_X_PIN: pin_index = JOY_X; break; - #endif - #if HAS_JOY_ADC_Y - case JOY_Y_PIN: pin_index = JOY_Y; break; - #endif - #if HAS_JOY_ADC_Z - case JOY_Z_PIN: pin_index = JOY_Z; break; - #endif - #if ENABLED(FILAMENT_WIDTH_SENSOR) - case FILWIDTH_PIN: pin_index = FILWIDTH; break; - #endif - #if HAS_ADC_BUTTONS - case ADC_KEYPAD_PIN: pin_index = ADC_KEY; break; - #endif - #if ENABLED(POWER_MONITOR_CURRENT) - case POWER_MONITOR_CURRENT_PIN: pin_index = POWERMON_CURRENT; break; - #endif - #if ENABLED(POWER_MONITOR_VOLTAGE) - case POWER_MONITOR_VOLTAGE_PIN: pin_index = POWERMON_VOLTS; break; - #endif + _TCASE(HAS_TEMP_ADC_0, TEMP_0_PIN, TEMP_0) + _TCASE(HAS_TEMP_ADC_1, TEMP_1_PIN, TEMP_1) + _TCASE(HAS_TEMP_ADC_2, TEMP_2_PIN, TEMP_2) + _TCASE(HAS_TEMP_ADC_3, TEMP_3_PIN, TEMP_3) + _TCASE(HAS_TEMP_ADC_4, TEMP_4_PIN, TEMP_4) + _TCASE(HAS_TEMP_ADC_5, TEMP_5_PIN, TEMP_5) + _TCASE(HAS_TEMP_ADC_6, TEMP_6_PIN, TEMP_6) + _TCASE(HAS_TEMP_ADC_7, TEMP_7_PIN, TEMP_7) + _TCASE(HAS_HEATED_BED, TEMP_BED_PIN, TEMP_BED) + _TCASE(HAS_TEMP_CHAMBER, TEMP_CHAMBER_PIN, TEMP_CHAMBER) + _TCASE(HAS_TEMP_ADC_PROBE, TEMP_PROBE_PIN, TEMP_PROBE) + _TCASE(HAS_TEMP_COOLER, TEMP_COOLER_PIN, TEMP_COOLER) + _TCASE(HAS_TEMP_BOARD, TEMP_BOARD_PIN, TEMP_BOARD) + _TCASE(HAS_JOY_ADC_X, JOY_X_PIN, JOY_X) + _TCASE(HAS_JOY_ADC_Y, JOY_Y_PIN, JOY_Y) + _TCASE(HAS_JOY_ADC_Z, JOY_Z_PIN, JOY_Z) + _TCASE(FILAMENT_WIDTH_SENSOR, FILWIDTH_PIN, FILWIDTH) + _TCASE(HAS_ADC_BUTTONS, ADC_KEYPAD_PIN, ADC_KEY) + _TCASE(POWER_MONITOR_CURRENT, POWER_MONITOR_CURRENT_PIN, POWERMON_CURRENT) + _TCASE(POWER_MONITOR_VOLTAGE, POWER_MONITOR_VOLTAGE_PIN, POWERMON_VOLTS) } HAL_adc_result = HAL_adc_results[(int)pin_index] >> (12 - HAL_ADC_RESOLUTION); // shift out unused bits } diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h index 34fc3bc410..31808586cf 100644 --- a/Marlin/src/core/macros.h +++ b/Marlin/src/core/macros.h @@ -235,6 +235,8 @@ #define __TERN(T,V...) ___TERN(_CAT(_NO,T),V) // Prepend '_NO' to get '_NOT_0' or '_NOT_1' #define ___TERN(P,V...) THIRD(P,V) // If first argument has a comma, A. Else B. +#define _OPTITEM(A...) A, +#define OPTITEM(O,A...) TERN_(O,DEFER4(_OPTITEM)(A)) #define _OPTARG(A...) , A #define OPTARG(O,A...) TERN_(O,DEFER4(_OPTARG)(A)) #define _OPTCODE(A) A; diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index f2a316d833..9c3fe6bfd3 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -118,9 +118,9 @@ // Temperature sensor IDs #define HID_REDUNDANT -6 -#define HID_COOLER -5 -#define HID_PROBE -4 -#define HID_BOARD -3 +#define HID_BOARD -5 +#define HID_COOLER -4 +#define HID_PROBE -3 #define HID_CHAMBER -2 #define HID_BED -1 #define HID_E0 0 diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 3a2a6f2711..5d3ac7a690 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -507,7 +507,13 @@ #ifndef TEMP_SENSOR_REDUNDANT_MAX_DIFF #define TEMP_SENSOR_REDUNDANT_MAX_DIFF 10 #endif - #if REDUNDANT_TEMP_MATCH(SOURCE, COOLER) + #if REDUNDANT_TEMP_MATCH(SOURCE, BOARD) + #if !PIN_EXISTS(TEMP_BOARD) + #error "TEMP_SENSOR_REDUNDANT_SOURCE set to BOARD requires TEMP_BOARD_PIN." + #else + #define TEMP_REDUNDANT_PIN TEMP_BOARD_PIN + #endif + #elif REDUNDANT_TEMP_MATCH(SOURCE, COOLER) #if !PIN_EXISTS(TEMP_COOLER) #error "TEMP_SENSOR_REDUNDANT_SOURCE set to COOLER requires TEMP_COOLER_PIN." #else @@ -2446,12 +2452,12 @@ #if HAS_TEMP(BED) #define HAS_TEMP_BED 1 #endif -#if HAS_TEMP(PROBE) - #define HAS_TEMP_PROBE 1 -#endif #if HAS_TEMP(CHAMBER) #define HAS_TEMP_CHAMBER 1 #endif +#if HAS_TEMP(PROBE) + #define HAS_TEMP_PROBE 1 +#endif #if HAS_TEMP(COOLER) #define HAS_TEMP_COOLER 1 #endif diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp index f3f361f84e..4c850183da 100644 --- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp +++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp @@ -222,12 +222,12 @@ const uint16_t VPList_SDPrintTune[] PROGMEM = { }; const uint16_t VPList_StepPerMM[] PROGMEM = { - VP_X_STEP_PER_MM - , VP_Y_STEP_PER_MM - , VP_Z_STEP_PER_MM - OPTARG(HAS_HOTEND, VP_E0_STEP_PER_MM) - OPTARG(HAS_MULTI_HOTEND, VP_E1_STEP_PER_MM) - , 0x0000 + VP_X_STEP_PER_MM, + VP_Y_STEP_PER_MM, + VP_Z_STEP_PER_MM, + OPTITEM(HAS_HOTEND, VP_E0_STEP_PER_MM) + OPTITEM(HAS_MULTI_HOTEND, VP_E1_STEP_PER_MM) + 0x0000 }; const uint16_t VPList_PIDE0[] PROGMEM = { diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 07f72b570a..c9107a9b1c 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -2361,12 +2361,12 @@ void Temperature::init() { #if HAS_TEMP_ADC_CHAMBER HAL_ANALOG_SELECT(TEMP_CHAMBER_PIN); #endif - #if HAS_TEMP_ADC_COOLER - HAL_ANALOG_SELECT(TEMP_COOLER_PIN); - #endif #if HAS_TEMP_ADC_PROBE HAL_ANALOG_SELECT(TEMP_PROBE_PIN); #endif + #if HAS_TEMP_ADC_COOLER + HAL_ANALOG_SELECT(TEMP_COOLER_PIN); + #endif #if HAS_TEMP_ADC_BOARD HAL_ANALOG_SELECT(TEMP_BOARD_PIN); #endif @@ -2948,8 +2948,8 @@ void Temperature::update_raw_temperatures() { TERN_(HAS_TEMP_ADC_BED, temp_bed.update()); TERN_(HAS_TEMP_ADC_CHAMBER, temp_chamber.update()); TERN_(HAS_TEMP_ADC_PROBE, temp_probe.update()); - TERN_(HAS_TEMP_ADC_BOARD, temp_board.update()); TERN_(HAS_TEMP_ADC_COOLER, temp_cooler.update()); + TERN_(HAS_TEMP_ADC_BOARD, temp_board.update()); TERN_(HAS_JOY_ADC_X, joystick.x.update()); TERN_(HAS_JOY_ADC_Y, joystick.y.update()); diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index 5affcf740d..ade1d480b2 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -231,9 +231,6 @@ struct PIDHeaterInfo : public HeaterInfo { typedef heater_info_t bed_info_t; #endif #endif -#if HAS_TEMP_PROBE - typedef temp_info_t probe_info_t; -#endif #if HAS_HEATED_CHAMBER #if ENABLED(PIDTEMPCHAMBER) typedef struct PIDHeaterInfo chamber_info_t; @@ -243,12 +240,15 @@ struct PIDHeaterInfo : public HeaterInfo { #elif HAS_TEMP_CHAMBER typedef temp_info_t chamber_info_t; #endif -#if HAS_TEMP_BOARD - typedef temp_info_t board_info_t; +#if HAS_TEMP_PROBE + typedef temp_info_t probe_info_t; #endif #if EITHER(HAS_COOLER, HAS_TEMP_COOLER) typedef heater_info_t cooler_info_t; #endif +#if HAS_TEMP_BOARD + typedef temp_info_t board_info_t; +#endif // Heater watch handling template @@ -318,12 +318,12 @@ typedef struct { int16_t raw_min, raw_max; celsius_t mintemp, maxtemp; } temp_ra #if TEMP_SENSOR_BED_IS_CUSTOM CTI_BED, #endif - #if TEMP_SENSOR_PROBE_IS_CUSTOM - CTI_PROBE, - #endif #if TEMP_SENSOR_CHAMBER_IS_CUSTOM CTI_CHAMBER, #endif + #if TEMP_SENSOR_PROBE_IS_CUSTOM + CTI_PROBE, + #endif #if TEMP_SENSOR_COOLER_IS_CUSTOM CTI_COOLER, #endif @@ -599,12 +599,12 @@ class Temperature { #if HAS_HEATED_BED static celsius_float_t analog_to_celsius_bed(const int16_t raw); #endif - #if HAS_TEMP_PROBE - static celsius_float_t analog_to_celsius_probe(const int16_t raw); - #endif #if HAS_TEMP_CHAMBER static celsius_float_t analog_to_celsius_chamber(const int16_t raw); #endif + #if HAS_TEMP_PROBE + static celsius_float_t analog_to_celsius_probe(const int16_t raw); + #endif #if HAS_TEMP_COOLER static celsius_float_t analog_to_celsius_cooler(const int16_t raw); #endif diff --git a/Marlin/src/module/thermistor/thermistors.h b/Marlin/src/module/thermistor/thermistors.h index 85f4449636..002beea5b5 100644 --- a/Marlin/src/module/thermistor/thermistors.h +++ b/Marlin/src/module/thermistor/thermistors.h @@ -283,13 +283,6 @@ typedef struct { int16_t value; celsius_t celsius; } temp_entry_t; #define TEMPTABLE_CHAMBER_LEN 0 #endif -#if TEMP_SENSOR_COOLER > 0 - #define TEMPTABLE_COOLER TT_NAME(TEMP_SENSOR_COOLER) - #define TEMPTABLE_COOLER_LEN COUNT(TEMPTABLE_COOLER) -#else - #define TEMPTABLE_COOLER_LEN 0 -#endif - #if TEMP_SENSOR_PROBE > 0 #define TEMPTABLE_PROBE TT_NAME(TEMP_SENSOR_PROBE) #define TEMPTABLE_PROBE_LEN COUNT(TEMPTABLE_PROBE) @@ -297,6 +290,13 @@ typedef struct { int16_t value; celsius_t celsius; } temp_entry_t; #define TEMPTABLE_PROBE_LEN 0 #endif +#if TEMP_SENSOR_COOLER > 0 + #define TEMPTABLE_COOLER TT_NAME(TEMP_SENSOR_COOLER) + #define TEMPTABLE_COOLER_LEN COUNT(TEMPTABLE_COOLER) +#else + #define TEMPTABLE_COOLER_LEN 0 +#endif + #if TEMP_SENSOR_BOARD > 0 #define TEMPTABLE_BOARD TT_NAME(TEMP_SENSOR_BOARD) #define TEMPTABLE_BOARD_LEN COUNT(TEMPTABLE_BOARD) @@ -316,8 +316,8 @@ static_assert(255 > TEMPTABLE_0_LEN || 255 > TEMPTABLE_1_LEN || 255 > TEMPTABLE_ || 255 > TEMPTABLE_4_LEN || 255 > TEMPTABLE_5_LEN || 255 > TEMPTABLE_6_LEN || 255 > TEMPTABLE_7_LEN || 255 > TEMPTABLE_BED_LEN || 255 > TEMPTABLE_CHAMBER_LEN - || 255 > TEMPTABLE_COOLER_LEN || 255 > TEMPTABLE_PROBE_LEN + || 255 > TEMPTABLE_COOLER_LEN || 255 > TEMPTABLE_BOARD_LEN || 255 > TEMPTABLE_REDUNDANT_LEN , "Temperature conversion tables over 255 entries need special consideration." diff --git a/Marlin/src/pins/pinsDebug_list.h b/Marlin/src/pins/pinsDebug_list.h index 599ce319af..2328a826ef 100644 --- a/Marlin/src/pins/pinsDebug_list.h +++ b/Marlin/src/pins/pinsDebug_list.h @@ -141,24 +141,24 @@ REPORT_NAME_ANALOG(__LINE__, TEMP_BED_PIN) #endif #endif -#if PIN_EXISTS(TEMP_BOARD) - #if ANALOG_OK(TEMP_BOARD_PIN) - REPORT_NAME_ANALOG(__LINE__, TEMP_BOARD_PIN) - #endif -#endif #if PIN_EXISTS(TEMP_CHAMBER) #if ANALOG_OK(TEMP_CHAMBER_PIN) REPORT_NAME_ANALOG(__LINE__, TEMP_CHAMBER_PIN) #endif #endif +#if PIN_EXISTS(TEMP_PROBE) + #if ANALOG_OK(TEMP_PROBE_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_PROBE_PIN) + #endif +#endif #if PIN_EXISTS(TEMP_COOLER) #if ANALOG_OK(TEMP_COOLER_PIN) REPORT_NAME_ANALOG(__LINE__, TEMP_COOLER_PIN) #endif #endif -#if PIN_EXISTS(TEMP_PROBE) - #if ANALOG_OK(TEMP_PROBE_PIN) - REPORT_NAME_ANALOG(__LINE__, TEMP_PROBE_PIN) +#if PIN_EXISTS(TEMP_BOARD) + #if ANALOG_OK(TEMP_BOARD_PIN) + REPORT_NAME_ANALOG(__LINE__, TEMP_BOARD_PIN) #endif #endif #if PIN_EXISTS(ADC_KEYPAD) From b9eef9ffb43248256c82fc88df7096aafaf45d1b Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 17 Jan 2022 12:13:17 +0000 Subject: [PATCH 380/532] [cron] Bump distribution date (2022-01-17) --- 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 28b4b15c35..1bd366a473 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 "2022-01-16" +//#define STRING_DISTRIBUTION_DATE "2022-01-17" /** * 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 1ecb5c9dad..7d4356232c 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 "2022-01-16" + #define STRING_DISTRIBUTION_DATE "2022-01-17" #endif /** From 830d728ec174271c96042f5864efb99300cf8927 Mon Sep 17 00:00:00 2001 From: John Lagonikas <39417467+zeleps@users.noreply.github.com> Date: Mon, 17 Jan 2022 14:56:25 +0200 Subject: [PATCH 381/532] =?UTF-8?q?=F0=9F=9A=B8=20Suppressible=20pin=20war?= =?UTF-8?q?nings=20(#23530)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/inc/Warnings.cpp | 948 ++++++++++++++++++------------------ 1 file changed, 477 insertions(+), 471 deletions(-) diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index c2fe42ae82..684ab82d00 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -59,474 +59,478 @@ #warning "Your Configuration provides no method to acquire user feedback!" #endif -#if AUTO_ASSIGNED_X2_STEPPER - #warning "Auto-assigned X2 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs." -#endif -#if AUTO_ASSIGNED_X2_MS1 - #warning "Auto-assigned X2_MS1_PIN to an unused En_MS1_PIN." -#endif -#if AUTO_ASSIGNED_X2_MS2 - #warning "Auto-assigned X2_MS2_PIN to an unused En_MS2_PIN." -#endif -#if AUTO_ASSIGNED_X2_MS3 - #warning "Auto-assigned X2_MS3_PIN to an unused En_MS3_PIN." -#endif -#if AUTO_ASSIGNED_X2_CS - #warning "Auto-assigned X2_CS_PIN to an unused En_CS_PIN." -#endif -#if AUTO_ASSIGNED_X2_DIAG - #if X2_USE_ENDSTOP == _XMIN_ - #warning "Auto-assigned X2_DIAG_PIN to X_MIN_PIN." - #elif X2_USE_ENDSTOP == _XMAX_ - #warning "Auto-assigned X2_DIAG_PIN to X_MAX_PIN." - #elif X2_USE_ENDSTOP == _XSTOP_ - #warning "Auto-assigned X2_DIAG_PIN to X_STOP_PIN." - #elif X2_USE_ENDSTOP == _YMIN_ - #warning "Auto-assigned X2_DIAG_PIN to Y_MIN_PIN." - #elif X2_USE_ENDSTOP == _YMAX_ - #warning "Auto-assigned X2_DIAG_PIN to Y_MAX_PIN." - #elif X2_USE_ENDSTOP == _YSTOP_ - #warning "Auto-assigned X2_DIAG_PIN to Y_STOP_PIN." - #elif X2_USE_ENDSTOP == _ZMIN_ - #warning "Auto-assigned X2_DIAG_PIN to Z_MIN_PIN." - #elif X2_USE_ENDSTOP == _ZMAX_ - #warning "Auto-assigned X2_DIAG_PIN to Z_MAX_PIN." - #elif X2_USE_ENDSTOP == _ZSTOP_ - #warning "Auto-assigned X2_DIAG_PIN to Z_STOP_PIN." - #elif X2_USE_ENDSTOP == _XDIAG_ - #warning "Auto-assigned X2_DIAG_PIN to X_DIAG_PIN." - #elif X2_USE_ENDSTOP == _YDIAG_ - #warning "Auto-assigned X2_DIAG_PIN to Y_DIAG_PIN." - #elif X2_USE_ENDSTOP == _ZDIAG_ - #warning "Auto-assigned X2_DIAG_PIN to Z_DIAG_PIN." - #elif X2_USE_ENDSTOP == _E0DIAG_ - #warning "Auto-assigned X2_DIAG_PIN to E0_DIAG_PIN." - #elif X2_USE_ENDSTOP == _E1DIAG_ - #warning "Auto-assigned X2_DIAG_PIN to E1_DIAG_PIN." - #elif X2_USE_ENDSTOP == _E2DIAG_ - #warning "Auto-assigned X2_DIAG_PIN to E2_DIAG_PIN." - #elif X2_USE_ENDSTOP == _E3DIAG_ - #warning "Auto-assigned X2_DIAG_PIN to E3_DIAG_PIN." - #elif X2_USE_ENDSTOP == _E4DIAG_ - #warning "Auto-assigned X2_DIAG_PIN to E4_DIAG_PIN." - #elif X2_USE_ENDSTOP == _E5DIAG_ - #warning "Auto-assigned X2_DIAG_PIN to E5_DIAG_PIN." - #elif X2_USE_ENDSTOP == _E6DIAG_ - #warning "Auto-assigned X2_DIAG_PIN to E6_DIAG_PIN." - #elif X2_USE_ENDSTOP == _E7DIAG_ - #warning "Auto-assigned X2_DIAG_PIN to E7_DIAG_PIN." - #endif -#endif -#if AUTO_ASSIGNED_Y2_STEPPER - #warning "Auto-assigned Y2 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs." -#endif -#if AUTO_ASSIGNED_Y2_MS1 - #warning "Auto-assigned Y2_MS1_PIN to an unused En_MS1_PIN." -#endif -#if AUTO_ASSIGNED_Y2_MS2 - #warning "Auto-assigned Y2_MS2_PIN to an unused En_MS2_PIN." -#endif -#if AUTO_ASSIGNED_Y2_MS3 - #warning "Auto-assigned Y2_MS3_PIN to an unused En_MS3_PIN." -#endif -#if AUTO_ASSIGNED_Y2_CS - #warning "Auto-assigned Y2_CS_PIN to an unused En_CS_PIN." -#endif -#if AUTO_ASSIGNED_Y2_DIAG - #if Y2_USE_ENDSTOP == _XMIN_ - #warning "Auto-assigned Y2_DIAG_PIN to X_MIN_PIN." - #elif Y2_USE_ENDSTOP == _XMAX_ - #warning "Auto-assigned Y2_DIAG_PIN to X_MAX_PIN." - #elif Y2_USE_ENDSTOP == _XSTOP_ - #warning "Auto-assigned Y2_DIAG_PIN to X_STOP_PIN." - #elif Y2_USE_ENDSTOP == _YMIN_ - #warning "Auto-assigned Y2_DIAG_PIN to Y_MIN_PIN." - #elif Y2_USE_ENDSTOP == _YMAX_ - #warning "Auto-assigned Y2_DIAG_PIN to Y_MAX_PIN." - #elif Y2_USE_ENDSTOP == _YSTOP_ - #warning "Auto-assigned Y2_DIAG_PIN to Y_STOP_PIN." - #elif Y2_USE_ENDSTOP == _ZMIN_ - #warning "Auto-assigned Y2_DIAG_PIN to Z_MIN_PIN." - #elif Y2_USE_ENDSTOP == _ZMAX_ - #warning "Auto-assigned Y2_DIAG_PIN to Z_MAX_PIN." - #elif Y2_USE_ENDSTOP == _ZSTOP_ - #warning "Auto-assigned Y2_DIAG_PIN to Z_STOP_PIN." - #elif Y2_USE_ENDSTOP == _XDIAG_ - #warning "Auto-assigned Y2_DIAG_PIN to X_DIAG_PIN." - #elif Y2_USE_ENDSTOP == _YDIAG_ - #warning "Auto-assigned Y2_DIAG_PIN to Y_DIAG_PIN." - #elif Y2_USE_ENDSTOP == _ZDIAG_ - #warning "Auto-assigned Y2_DIAG_PIN to Z_DIAG_PIN." - #elif Y2_USE_ENDSTOP == _E0DIAG_ - #warning "Auto-assigned Y2_DIAG_PIN to E0_DIAG_PIN." - #elif Y2_USE_ENDSTOP == _E1DIAG_ - #warning "Auto-assigned Y2_DIAG_PIN to E1_DIAG_PIN." - #elif Y2_USE_ENDSTOP == _E2DIAG_ - #warning "Auto-assigned Y2_DIAG_PIN to E2_DIAG_PIN." - #elif Y2_USE_ENDSTOP == _E3DIAG_ - #warning "Auto-assigned Y2_DIAG_PIN to E3_DIAG_PIN." - #elif Y2_USE_ENDSTOP == _E4DIAG_ - #warning "Auto-assigned Y2_DIAG_PIN to E4_DIAG_PIN." - #elif Y2_USE_ENDSTOP == _E5DIAG_ - #warning "Auto-assigned Y2_DIAG_PIN to E5_DIAG_PIN." - #elif Y2_USE_ENDSTOP == _E6DIAG_ - #warning "Auto-assigned Y2_DIAG_PIN to E6_DIAG_PIN." - #elif Y2_USE_ENDSTOP == _E7DIAG_ - #warning "Auto-assigned Y2_DIAG_PIN to E7_DIAG_PIN." - #endif -#endif -#if AUTO_ASSIGNED_Z2_STEPPER - #warning "Auto-assigned Z2 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs." -#endif -#if AUTO_ASSIGNED_Z2_MS1 - #warning "Auto-assigned Z2_MS1_PIN to an unused En_MS1_PIN." -#endif -#if AUTO_ASSIGNED_Z2_MS2 - #warning "Auto-assigned Z2_MS2_PIN to an unused En_MS2_PIN." -#endif -#if AUTO_ASSIGNED_Z2_MS3 - #warning "Auto-assigned Z2_MS3_PIN to an unused En_MS3_PIN." -#endif -#if AUTO_ASSIGNED_Z2_CS - #warning "Auto-assigned Z2_CS_PIN to an unused En_CS_PIN." -#endif -#if AUTO_ASSIGNED_Z2_DIAG - #if Z2_USE_ENDSTOP == _XMIN_ - #warning "Auto-assigned Z2_DIAG_PIN to X_MIN_PIN." - #elif Z2_USE_ENDSTOP == _XMAX_ - #warning "Auto-assigned Z2_DIAG_PIN to X_MAX_PIN." - #elif Z2_USE_ENDSTOP == _XSTOP_ - #warning "Auto-assigned Z2_DIAG_PIN to X_STOP_PIN." - #elif Z2_USE_ENDSTOP == _YMIN_ - #warning "Auto-assigned Z2_DIAG_PIN to Y_MIN_PIN." - #elif Z2_USE_ENDSTOP == _YMAX_ - #warning "Auto-assigned Z2_DIAG_PIN to Y_MAX_PIN." - #elif Z2_USE_ENDSTOP == _YSTOP_ - #warning "Auto-assigned Z2_DIAG_PIN to Y_STOP_PIN." - #elif Z2_USE_ENDSTOP == _ZMIN_ - #warning "Auto-assigned Z2_DIAG_PIN to Z_MIN_PIN." - #elif Z2_USE_ENDSTOP == _ZMAX_ - #warning "Auto-assigned Z2_DIAG_PIN to Z_MAX_PIN." - #elif Z2_USE_ENDSTOP == _ZSTOP_ - #warning "Auto-assigned Z2_DIAG_PIN to Z_STOP_PIN." - #elif Z2_USE_ENDSTOP == _XDIAG_ - #warning "Auto-assigned Z2_DIAG_PIN to X_DIAG_PIN." - #elif Z2_USE_ENDSTOP == _YDIAG_ - #warning "Auto-assigned Z2_DIAG_PIN to Y_DIAG_PIN." - #elif Z2_USE_ENDSTOP == _ZDIAG_ - #warning "Auto-assigned Z2_DIAG_PIN to Z_DIAG_PIN." - #elif Z2_USE_ENDSTOP == _E0DIAG_ - #warning "Auto-assigned Z2_DIAG_PIN to E0_DIAG_PIN." - #elif Z2_USE_ENDSTOP == _E1DIAG_ - #warning "Auto-assigned Z2_DIAG_PIN to E1_DIAG_PIN." - #elif Z2_USE_ENDSTOP == _E2DIAG_ - #warning "Auto-assigned Z2_DIAG_PIN to E2_DIAG_PIN." - #elif Z2_USE_ENDSTOP == _E3DIAG_ - #warning "Auto-assigned Z2_DIAG_PIN to E3_DIAG_PIN." - #elif Z2_USE_ENDSTOP == _E4DIAG_ - #warning "Auto-assigned Z2_DIAG_PIN to E4_DIAG_PIN." - #elif Z2_USE_ENDSTOP == _E5DIAG_ - #warning "Auto-assigned Z2_DIAG_PIN to E5_DIAG_PIN." - #elif Z2_USE_ENDSTOP == _E6DIAG_ - #warning "Auto-assigned Z2_DIAG_PIN to E6_DIAG_PIN." - #elif Z2_USE_ENDSTOP == _E7DIAG_ - #warning "Auto-assigned Z2_DIAG_PIN to E7_DIAG_PIN." - #endif -#endif -#if AUTO_ASSIGNED_Z3_STEPPER - #warning "Auto-assigned Z3 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs." -#endif -#if AUTO_ASSIGNED_Z3_CS - #warning "Auto-assigned Z3_CS_PIN to an unused En_CS_PIN." -#endif -#if AUTO_ASSIGNED_Z3_MS1 - #warning "Auto-assigned Z3_MS1_PIN to an unused En_MS1_PIN." -#endif -#if AUTO_ASSIGNED_Z3_MS2 - #warning "Auto-assigned Z3_MS2_PIN to an unused En_MS2_PIN." -#endif -#if AUTO_ASSIGNED_Z3_MS3 - #warning "Auto-assigned Z3_MS3_PIN to an unused En_MS3_PIN." -#endif -#if AUTO_ASSIGNED_Z3_DIAG - #if Z3_USE_ENDSTOP == _XMIN_ - #warning "Auto-assigned Z3_DIAG_PIN to X_MIN_PIN." - #elif Z3_USE_ENDSTOP == _XMAX_ - #warning "Auto-assigned Z3_DIAG_PIN to X_MAX_PIN." - #elif Z3_USE_ENDSTOP == _XSTOP_ - #warning "Auto-assigned Z3_DIAG_PIN to X_STOP_PIN." - #elif Z3_USE_ENDSTOP == _YMIN_ - #warning "Auto-assigned Z3_DIAG_PIN to Y_MIN_PIN." - #elif Z3_USE_ENDSTOP == _YMAX_ - #warning "Auto-assigned Z3_DIAG_PIN to Y_MAX_PIN." - #elif Z3_USE_ENDSTOP == _YSTOP_ - #warning "Auto-assigned Z3_DIAG_PIN to Y_STOP_PIN." - #elif Z3_USE_ENDSTOP == _ZMIN_ - #warning "Auto-assigned Z3_DIAG_PIN to Z_MIN_PIN." - #elif Z3_USE_ENDSTOP == _ZMAX_ - #warning "Auto-assigned Z3_DIAG_PIN to Z_MAX_PIN." - #elif Z3_USE_ENDSTOP == _ZSTOP_ - #warning "Auto-assigned Z3_DIAG_PIN to Z_STOP_PIN." - #elif Z3_USE_ENDSTOP == _XDIAG_ - #warning "Auto-assigned Z3_DIAG_PIN to X_DIAG_PIN." - #elif Z3_USE_ENDSTOP == _YDIAG_ - #warning "Auto-assigned Z3_DIAG_PIN to Y_DIAG_PIN." - #elif Z3_USE_ENDSTOP == _ZDIAG_ - #warning "Auto-assigned Z3_DIAG_PIN to Z_DIAG_PIN." - #elif Z3_USE_ENDSTOP == _E0DIAG_ - #warning "Auto-assigned Z3_DIAG_PIN to E0_DIAG_PIN." - #elif Z3_USE_ENDSTOP == _E1DIAG_ - #warning "Auto-assigned Z3_DIAG_PIN to E1_DIAG_PIN." - #elif Z3_USE_ENDSTOP == _E2DIAG_ - #warning "Auto-assigned Z3_DIAG_PIN to E2_DIAG_PIN." - #elif Z3_USE_ENDSTOP == _E3DIAG_ - #warning "Auto-assigned Z3_DIAG_PIN to E3_DIAG_PIN." - #elif Z3_USE_ENDSTOP == _E4DIAG_ - #warning "Auto-assigned Z3_DIAG_PIN to E4_DIAG_PIN." - #elif Z3_USE_ENDSTOP == _E5DIAG_ - #warning "Auto-assigned Z3_DIAG_PIN to E5_DIAG_PIN." - #elif Z3_USE_ENDSTOP == _E6DIAG_ - #warning "Auto-assigned Z3_DIAG_PIN to E6_DIAG_PIN." - #elif Z3_USE_ENDSTOP == _E7DIAG_ - #warning "Auto-assigned Z3_DIAG_PIN to E7_DIAG_PIN." - #endif -#endif -#if AUTO_ASSIGNED_Z4_STEPPER - #warning "Auto-assigned Z4 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs." -#endif -#if AUTO_ASSIGNED_Z4_CS - #warning "Auto-assigned Z4_CS_PIN to an unused En_CS_PIN." -#endif -#if AUTO_ASSIGNED_Z4_MS1 - #warning "Auto-assigned Z4_MS1_PIN to an unused En_MS1_PIN." -#endif -#if AUTO_ASSIGNED_Z4_MS2 - #warning "Auto-assigned Z4_MS2_PIN to an unused En_MS2_PIN." -#endif -#if AUTO_ASSIGNED_Z4_MS3 - #warning "Auto-assigned Z4_MS3_PIN to an unused En_MS3_PIN." -#endif -#if AUTO_ASSIGNED_Z4_DIAG - #if Z4_USE_ENDSTOP == _XMIN_ - #warning "Auto-assigned Z4_DIAG_PIN to X_MIN_PIN." - #elif Z4_USE_ENDSTOP == _XMAX_ - #warning "Auto-assigned Z4_DIAG_PIN to X_MAX_PIN." - #elif Z4_USE_ENDSTOP == _XSTOP_ - #warning "Auto-assigned Z4_DIAG_PIN to X_STOP_PIN." - #elif Z4_USE_ENDSTOP == _YMIN_ - #warning "Auto-assigned Z4_DIAG_PIN to Y_MIN_PIN." - #elif Z4_USE_ENDSTOP == _YMAX_ - #warning "Auto-assigned Z4_DIAG_PIN to Y_MAX_PIN." - #elif Z4_USE_ENDSTOP == _YSTOP_ - #warning "Auto-assigned Z4_DIAG_PIN to Y_STOP_PIN." - #elif Z4_USE_ENDSTOP == _ZMIN_ - #warning "Auto-assigned Z4_DIAG_PIN to Z_MIN_PIN." - #elif Z4_USE_ENDSTOP == _ZMAX_ - #warning "Auto-assigned Z4_DIAG_PIN to Z_MAX_PIN." - #elif Z4_USE_ENDSTOP == _ZSTOP_ - #warning "Auto-assigned Z4_DIAG_PIN to Z_STOP_PIN." - #elif Z4_USE_ENDSTOP == _XDIAG_ - #warning "Auto-assigned Z4_DIAG_PIN to X_DIAG_PIN." - #elif Z4_USE_ENDSTOP == _YDIAG_ - #warning "Auto-assigned Z4_DIAG_PIN to Y_DIAG_PIN." - #elif Z4_USE_ENDSTOP == _ZDIAG_ - #warning "Auto-assigned Z4_DIAG_PIN to Z_DIAG_PIN." - #elif Z4_USE_ENDSTOP == _E0DIAG_ - #warning "Auto-assigned Z4_DIAG_PIN to E0_DIAG_PIN." - #elif Z4_USE_ENDSTOP == _E1DIAG_ - #warning "Auto-assigned Z4_DIAG_PIN to E1_DIAG_PIN." - #elif Z4_USE_ENDSTOP == _E2DIAG_ - #warning "Auto-assigned Z4_DIAG_PIN to E2_DIAG_PIN." - #elif Z4_USE_ENDSTOP == _E3DIAG_ - #warning "Auto-assigned Z4_DIAG_PIN to E3_DIAG_PIN." - #elif Z4_USE_ENDSTOP == _E4DIAG_ - #warning "Auto-assigned Z4_DIAG_PIN to E4_DIAG_PIN." - #elif Z4_USE_ENDSTOP == _E5DIAG_ - #warning "Auto-assigned Z4_DIAG_PIN to E5_DIAG_PIN." - #elif Z4_USE_ENDSTOP == _E6DIAG_ - #warning "Auto-assigned Z4_DIAG_PIN to E6_DIAG_PIN." - #elif Z4_USE_ENDSTOP == _E7DIAG_ - #warning "Auto-assigned Z4_DIAG_PIN to E7_DIAG_PIN." - #endif -#endif -#if AUTO_ASSIGNED_I_STEPPER - #warning "Auto-assigned I STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs." -#endif -#if AUTO_ASSIGNED_I_CS - #warning "Auto-assigned I_CS_PIN to an unused En_CS_PIN." -#endif -#if AUTO_ASSIGNED_I_MS1 - #warning "Auto-assigned I_MS1_PIN to an unused En_MS1_PIN." -#endif -#if AUTO_ASSIGNED_I_MS2 - #warning "Auto-assigned I_MS2_PIN to an unused En_MS2_PIN." -#endif -#if AUTO_ASSIGNED_I_MS3 - #warning "Auto-assigned I_MS3_PIN to an unused En_MS3_PIN." -#endif -#if AUTO_ASSIGNED_I_DIAG - #if I_USE_ENDSTOP == _XMIN_ - #warning "Auto-assigned I_DIAG_PIN to X_MIN_PIN." - #elif I_USE_ENDSTOP == _XMAX_ - #warning "Auto-assigned I_DIAG_PIN to X_MAX_PIN." - #elif I_USE_ENDSTOP == _XSTOP_ - #warning "Auto-assigned I_DIAG_PIN to X_STOP_PIN." - #elif I_USE_ENDSTOP == _YMIN_ - #warning "Auto-assigned I_DIAG_PIN to Y_MIN_PIN." - #elif I_USE_ENDSTOP == _YMAX_ - #warning "Auto-assigned I_DIAG_PIN to Y_MAX_PIN." - #elif I_USE_ENDSTOP == _YSTOP_ - #warning "Auto-assigned I_DIAG_PIN to Y_STOP_PIN." - #elif I_USE_ENDSTOP == _ZMIN_ - #warning "Auto-assigned I_DIAG_PIN to Z_MIN_PIN." - #elif I_USE_ENDSTOP == _ZMAX_ - #warning "Auto-assigned I_DIAG_PIN to Z_MAX_PIN." - #elif I_USE_ENDSTOP == _ZSTOP_ - #warning "Auto-assigned I_DIAG_PIN to Z_STOP_PIN." - #elif I_USE_ENDSTOP == _XDIAG_ - #warning "Auto-assigned I_DIAG_PIN to X_DIAG_PIN." - #elif I_USE_ENDSTOP == _YDIAG_ - #warning "Auto-assigned I_DIAG_PIN to Y_DIAG_PIN." - #elif I_USE_ENDSTOP == _ZDIAG_ - #warning "Auto-assigned I_DIAG_PIN to Z_DIAG_PIN." - #elif I_USE_ENDSTOP == _E0DIAG_ - #warning "Auto-assigned I_DIAG_PIN to E0_DIAG_PIN." - #elif I_USE_ENDSTOP == _E1DIAG_ - #warning "Auto-assigned I_DIAG_PIN to E1_DIAG_PIN." - #elif I_USE_ENDSTOP == _E2DIAG_ - #warning "Auto-assigned I_DIAG_PIN to E2_DIAG_PIN." - #elif I_USE_ENDSTOP == _E3DIAG_ - #warning "Auto-assigned I_DIAG_PIN to E3_DIAG_PIN." - #elif I_USE_ENDSTOP == _E4DIAG_ - #warning "Auto-assigned I_DIAG_PIN to E4_DIAG_PIN." - #elif I_USE_ENDSTOP == _E5DIAG_ - #warning "Auto-assigned I_DIAG_PIN to E5_DIAG_PIN." - #elif I_USE_ENDSTOP == _E6DIAG_ - #warning "Auto-assigned I_DIAG_PIN to E6_DIAG_PIN." - #elif I_USE_ENDSTOP == _E7DIAG_ - #warning "Auto-assigned I_DIAG_PIN to E7_DIAG_PIN." - #endif -#endif -#if AUTO_ASSIGNED_J_STEPPER - #warning "Auto-assigned J STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs." -#endif -#if AUTO_ASSIGNED_J_CS - #warning "Auto-assigned J_CS_PIN to an unused En_CS_PIN." -#endif -#if AUTO_ASSIGNED_J_MS1 - #warning "Auto-assigned J_MS1_PIN to an unused En_MS1_PIN." -#endif -#if AUTO_ASSIGNED_J_MS2 - #warning "Auto-assigned J_MS2_PIN to an unused En_MS2_PIN." -#endif -#if AUTO_ASSIGNED_J_MS3 - #warning "Auto-assigned J_MS3_PIN to an unused En_MS3_PIN." -#endif -#if AUTO_ASSIGNED_J_DIAG - #if J_USE_ENDSTOP == _XMIN_ - #warning "Auto-assigned J_DIAG_PIN to X_MIN_PIN." - #elif J_USE_ENDSTOP == _XMAX_ - #warning "Auto-assigned J_DIAG_PIN to X_MAX_PIN." - #elif J_USE_ENDSTOP == _XSTOP_ - #warning "Auto-assigned J_DIAG_PIN to X_STOP_PIN." - #elif J_USE_ENDSTOP == _YMIN_ - #warning "Auto-assigned J_DIAG_PIN to Y_MIN_PIN." - #elif J_USE_ENDSTOP == _YMAX_ - #warning "Auto-assigned J_DIAG_PIN to Y_MAX_PIN." - #elif J_USE_ENDSTOP == _YSTOP_ - #warning "Auto-assigned J_DIAG_PIN to Y_STOP_PIN." - #elif J_USE_ENDSTOP == _ZMIN_ - #warning "Auto-assigned J_DIAG_PIN to Z_MIN_PIN." - #elif J_USE_ENDSTOP == _ZMAX_ - #warning "Auto-assigned J_DIAG_PIN to Z_MAX_PIN." - #elif J_USE_ENDSTOP == _ZSTOP_ - #warning "Auto-assigned J_DIAG_PIN to Z_STOP_PIN." - #elif J_USE_ENDSTOP == _XDIAG_ - #warning "Auto-assigned J_DIAG_PIN to X_DIAG_PIN." - #elif J_USE_ENDSTOP == _YDIAG_ - #warning "Auto-assigned J_DIAG_PIN to Y_DIAG_PIN." - #elif J_USE_ENDSTOP == _ZDIAG_ - #warning "Auto-assigned J_DIAG_PIN to Z_DIAG_PIN." - #elif J_USE_ENDSTOP == _E0DIAG_ - #warning "Auto-assigned J_DIAG_PIN to E0_DIAG_PIN." - #elif J_USE_ENDSTOP == _E1DIAG_ - #warning "Auto-assigned J_DIAG_PIN to E1_DIAG_PIN." - #elif J_USE_ENDSTOP == _E2DIAG_ - #warning "Auto-assigned J_DIAG_PIN to E2_DIAG_PIN." - #elif J_USE_ENDSTOP == _E3DIAG_ - #warning "Auto-assigned J_DIAG_PIN to E3_DIAG_PIN." - #elif J_USE_ENDSTOP == _E4DIAG_ - #warning "Auto-assigned J_DIAG_PIN to E4_DIAG_PIN." - #elif J_USE_ENDSTOP == _E5DIAG_ - #warning "Auto-assigned J_DIAG_PIN to E5_DIAG_PIN." - #elif J_USE_ENDSTOP == _E6DIAG_ - #warning "Auto-assigned J_DIAG_PIN to E6_DIAG_PIN." - #elif J_USE_ENDSTOP == _E7DIAG_ - #warning "Auto-assigned J_DIAG_PIN to E7_DIAG_PIN." - #endif -#endif -#if AUTO_ASSIGNED_K_STEPPER - #warning "Auto-assigned K STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs." -#endif -#if AUTO_ASSIGNED_K_CS - #warning "Auto-assigned K_CS_PIN to an unused En_CS_PIN." -#endif -#if AUTO_ASSIGNED_K_MS1 - #warning "Auto-assigned K_MS1_PIN to an unused En_MS1_PIN." -#endif -#if AUTO_ASSIGNED_K_MS2 - #warning "Auto-assigned K_MS2_PIN to an unused En_MS2_PIN." -#endif -#if AUTO_ASSIGNED_K_MS3 - #warning "Auto-assigned K_MS3_PIN to an unused En_MS3_PIN." -#endif -#if AUTO_ASSIGNED_K_DIAG - #if K_USE_ENDSTOP == _XMIN_ - #warning "Auto-assigned K_DIAG_PIN to X_MIN_PIN." - #elif K_USE_ENDSTOP == _XMAX_ - #warning "Auto-assigned K_DIAG_PIN to X_MAX_PIN." - #elif K_USE_ENDSTOP == _XSTOP_ - #warning "Auto-assigned K_DIAG_PIN to X_STOP_PIN." - #elif K_USE_ENDSTOP == _YMIN_ - #warning "Auto-assigned K_DIAG_PIN to Y_MIN_PIN." - #elif K_USE_ENDSTOP == _YMAX_ - #warning "Auto-assigned K_DIAG_PIN to Y_MAX_PIN." - #elif K_USE_ENDSTOP == _YSTOP_ - #warning "Auto-assigned K_DIAG_PIN to Y_STOP_PIN." - #elif K_USE_ENDSTOP == _ZMIN_ - #warning "Auto-assigned K_DIAG_PIN to Z_MIN_PIN." - #elif K_USE_ENDSTOP == _ZMAX_ - #warning "Auto-assigned K_DIAG_PIN to Z_MAX_PIN." - #elif K_USE_ENDSTOP == _ZSTOP_ - #warning "Auto-assigned K_DIAG_PIN to Z_STOP_PIN." - #elif K_USE_ENDSTOP == _XDIAG_ - #warning "Auto-assigned K_DIAG_PIN to X_DIAG_PIN." - #elif K_USE_ENDSTOP == _YDIAG_ - #warning "Auto-assigned K_DIAG_PIN to Y_DIAG_PIN." - #elif K_USE_ENDSTOP == _ZDIAG_ - #warning "Auto-assigned K_DIAG_PIN to Z_DIAG_PIN." - #elif K_USE_ENDSTOP == _E0DIAG_ - #warning "Auto-assigned K_DIAG_PIN to E0_DIAG_PIN." - #elif K_USE_ENDSTOP == _E1DIAG_ - #warning "Auto-assigned K_DIAG_PIN to E1_DIAG_PIN." - #elif K_USE_ENDSTOP == _E2DIAG_ - #warning "Auto-assigned K_DIAG_PIN to E2_DIAG_PIN." - #elif K_USE_ENDSTOP == _E3DIAG_ - #warning "Auto-assigned K_DIAG_PIN to E3_DIAG_PIN." - #elif K_USE_ENDSTOP == _E4DIAG_ - #warning "Auto-assigned K_DIAG_PIN to E4_DIAG_PIN." - #elif K_USE_ENDSTOP == _E5DIAG_ - #warning "Auto-assigned K_DIAG_PIN to E5_DIAG_PIN." - #elif K_USE_ENDSTOP == _E6DIAG_ - #warning "Auto-assigned K_DIAG_PIN to E6_DIAG_PIN." - #elif K_USE_ENDSTOP == _E7DIAG_ - #warning "Auto-assigned K_DIAG_PIN to E7_DIAG_PIN." - #endif -#endif +#ifndef NO_AUTO_ASSIGN_WARNING -#if ENABLED(CHAMBER_FAN) && !defined(CHAMBER_FAN_INDEX) - #warning "Auto-assigned CHAMBER_FAN_INDEX to the first free FAN pin." -#endif + #if AUTO_ASSIGNED_X2_STEPPER + #warning "Note: Auto-assigned X2 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_X2_MS1 + #warning "Note: Auto-assigned X2_MS1_PIN to an unused En_MS1_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_X2_MS2 + #warning "Note: Auto-assigned X2_MS2_PIN to an unused En_MS2_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_X2_MS3 + #warning "Note: Auto-assigned X2_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_X2_CS + #warning "Note: Auto-assigned X2_CS_PIN to an unused En_CS_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_X2_DIAG + #if X2_USE_ENDSTOP == _XMIN_ + #warning "Note: Auto-assigned X2_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _XMAX_ + #warning "Note: Auto-assigned X2_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _XSTOP_ + #warning "Note: Auto-assigned X2_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _YMIN_ + #warning "Note: Auto-assigned X2_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _YMAX_ + #warning "Note: Auto-assigned X2_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _YSTOP_ + #warning "Note: Auto-assigned X2_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _ZMIN_ + #warning "Note: Auto-assigned X2_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _ZMAX_ + #warning "Note: Auto-assigned X2_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _ZSTOP_ + #warning "Note: Auto-assigned X2_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _XDIAG_ + #warning "Note: Auto-assigned X2_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _YDIAG_ + #warning "Note: Auto-assigned X2_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _ZDIAG_ + #warning "Note: Auto-assigned X2_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _E0DIAG_ + #warning "Note: Auto-assigned X2_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _E1DIAG_ + #warning "Note: Auto-assigned X2_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _E2DIAG_ + #warning "Note: Auto-assigned X2_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _E3DIAG_ + #warning "Note: Auto-assigned X2_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _E4DIAG_ + #warning "Note: Auto-assigned X2_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _E5DIAG_ + #warning "Note: Auto-assigned X2_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _E6DIAG_ + #warning "Note: Auto-assigned X2_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif X2_USE_ENDSTOP == _E7DIAG_ + #warning "Note: Auto-assigned X2_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #endif + #if AUTO_ASSIGNED_Y2_STEPPER + #warning "Note: Auto-assigned Y2 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Y2_MS1 + #warning "Note: Auto-assigned Y2_MS1_PIN to an unused En_MS1_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Y2_MS2 + #warning "Note: Auto-assigned Y2_MS2_PIN to an unused En_MS2_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Y2_MS3 + #warning "Note: Auto-assigned Y2_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Y2_CS + #warning "Note: Auto-assigned Y2_CS_PIN to an unused En_CS_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Y2_DIAG + #if Y2_USE_ENDSTOP == _XMIN_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _XMAX_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _XSTOP_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _YMIN_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _YMAX_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _YSTOP_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _ZMIN_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _ZMAX_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _ZSTOP_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _XDIAG_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _YDIAG_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _ZDIAG_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _E0DIAG_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _E1DIAG_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _E2DIAG_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _E3DIAG_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _E4DIAG_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _E5DIAG_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _E6DIAG_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Y2_USE_ENDSTOP == _E7DIAG_ + #warning "Note: Auto-assigned Y2_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #endif + #if AUTO_ASSIGNED_Z2_STEPPER + #warning "Note: Auto-assigned Z2 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z2_MS1 + #warning "Note: Auto-assigned Z2_MS1_PIN to an unused En_MS1_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z2_MS2 + #warning "Note: Auto-assigned Z2_MS2_PIN to an unused En_MS2_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z2_MS3 + #warning "Note: Auto-assigned Z2_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z2_CS + #warning "Note: Auto-assigned Z2_CS_PIN to an unused En_CS_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z2_DIAG + #if Z2_USE_ENDSTOP == _XMIN_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _XMAX_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _XSTOP_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _YMIN_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _YMAX_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _YSTOP_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _ZMIN_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _ZMAX_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _ZSTOP_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _XDIAG_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _YDIAG_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _ZDIAG_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _E0DIAG_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _E1DIAG_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _E2DIAG_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _E3DIAG_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _E4DIAG_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _E5DIAG_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _E6DIAG_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z2_USE_ENDSTOP == _E7DIAG_ + #warning "Note: Auto-assigned Z2_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #endif + #if AUTO_ASSIGNED_Z3_STEPPER + #warning "Note: Auto-assigned Z3 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z3_CS + #warning "Note: Auto-assigned Z3_CS_PIN to an unused En_CS_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z3_MS1 + #warning "Note: Auto-assigned Z3_MS1_PIN to an unused En_MS1_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z3_MS2 + #warning "Note: Auto-assigned Z3_MS2_PIN to an unused En_MS2_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z3_MS3 + #warning "Note: Auto-assigned Z3_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z3_DIAG + #if Z3_USE_ENDSTOP == _XMIN_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _XMAX_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _XSTOP_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _YMIN_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _YMAX_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _YSTOP_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _ZMIN_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _ZMAX_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _ZSTOP_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _XDIAG_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _YDIAG_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _ZDIAG_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _E0DIAG_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _E1DIAG_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _E2DIAG_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _E3DIAG_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _E4DIAG_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _E5DIAG_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _E6DIAG_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z3_USE_ENDSTOP == _E7DIAG_ + #warning "Note: Auto-assigned Z3_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #endif + #if AUTO_ASSIGNED_Z4_STEPPER + #warning "Note: Auto-assigned Z4 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z4_CS + #warning "Note: Auto-assigned Z4_CS_PIN to an unused En_CS_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z4_MS1 + #warning "Note: Auto-assigned Z4_MS1_PIN to an unused En_MS1_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z4_MS2 + #warning "Note: Auto-assigned Z4_MS2_PIN to an unused En_MS2_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z4_MS3 + #warning "Note: Auto-assigned Z4_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_Z4_DIAG + #if Z4_USE_ENDSTOP == _XMIN_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _XMAX_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _XSTOP_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _YMIN_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _YMAX_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _YSTOP_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _ZMIN_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _ZMAX_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _ZSTOP_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _XDIAG_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _YDIAG_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _ZDIAG_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _E0DIAG_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _E1DIAG_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _E2DIAG_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _E3DIAG_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _E4DIAG_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _E5DIAG_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _E6DIAG_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif Z4_USE_ENDSTOP == _E7DIAG_ + #warning "Note: Auto-assigned Z4_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #endif + #if AUTO_ASSIGNED_I_STEPPER + #warning "Note: Auto-assigned I STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_I_CS + #warning "Note: Auto-assigned I_CS_PIN to an unused En_CS_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_I_MS1 + #warning "Note: Auto-assigned I_MS1_PIN to an unused En_MS1_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_I_MS2 + #warning "Note: Auto-assigned I_MS2_PIN to an unused En_MS2_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_I_MS3 + #warning "Note: Auto-assigned I_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_I_DIAG + #if I_USE_ENDSTOP == _XMIN_ + #warning "Note: Auto-assigned I_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _XMAX_ + #warning "Note: Auto-assigned I_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _XSTOP_ + #warning "Note: Auto-assigned I_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _YMIN_ + #warning "Note: Auto-assigned I_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _YMAX_ + #warning "Note: Auto-assigned I_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _YSTOP_ + #warning "Note: Auto-assigned I_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _ZMIN_ + #warning "Note: Auto-assigned I_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _ZMAX_ + #warning "Note: Auto-assigned I_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _ZSTOP_ + #warning "Note: Auto-assigned I_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _XDIAG_ + #warning "Note: Auto-assigned I_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _YDIAG_ + #warning "Note: Auto-assigned I_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _ZDIAG_ + #warning "Note: Auto-assigned I_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _E0DIAG_ + #warning "Note: Auto-assigned I_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _E1DIAG_ + #warning "Note: Auto-assigned I_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _E2DIAG_ + #warning "Note: Auto-assigned I_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _E3DIAG_ + #warning "Note: Auto-assigned I_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _E4DIAG_ + #warning "Note: Auto-assigned I_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _E5DIAG_ + #warning "Note: Auto-assigned I_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _E6DIAG_ + #warning "Note: Auto-assigned I_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif I_USE_ENDSTOP == _E7DIAG_ + #warning "Note: Auto-assigned I_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #endif + #if AUTO_ASSIGNED_J_STEPPER + #warning "Note: Auto-assigned J STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_J_CS + #warning "Note: Auto-assigned J_CS_PIN to an unused En_CS_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_J_MS1 + #warning "Note: Auto-assigned J_MS1_PIN to an unused En_MS1_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_J_MS2 + #warning "Note: Auto-assigned J_MS2_PIN to an unused En_MS2_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_J_MS3 + #warning "Note: Auto-assigned J_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_J_DIAG + #if J_USE_ENDSTOP == _XMIN_ + #warning "Note: Auto-assigned J_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _XMAX_ + #warning "Note: Auto-assigned J_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _XSTOP_ + #warning "Note: Auto-assigned J_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _YMIN_ + #warning "Note: Auto-assigned J_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _YMAX_ + #warning "Note: Auto-assigned J_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _YSTOP_ + #warning "Note: Auto-assigned J_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _ZMIN_ + #warning "Note: Auto-assigned J_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _ZMAX_ + #warning "Note: Auto-assigned J_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _ZSTOP_ + #warning "Note: Auto-assigned J_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _XDIAG_ + #warning "Note: Auto-assigned J_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _YDIAG_ + #warning "Note: Auto-assigned J_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _ZDIAG_ + #warning "Note: Auto-assigned J_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _E0DIAG_ + #warning "Note: Auto-assigned J_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _E1DIAG_ + #warning "Note: Auto-assigned J_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _E2DIAG_ + #warning "Note: Auto-assigned J_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _E3DIAG_ + #warning "Note: Auto-assigned J_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _E4DIAG_ + #warning "Note: Auto-assigned J_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _E5DIAG_ + #warning "Note: Auto-assigned J_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _E6DIAG_ + #warning "Note: Auto-assigned J_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif J_USE_ENDSTOP == _E7DIAG_ + #warning "Note: Auto-assigned J_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #endif + #if AUTO_ASSIGNED_K_STEPPER + #warning "Note: Auto-assigned K STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_K_CS + #warning "Note: Auto-assigned K_CS_PIN to an unused En_CS_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_K_MS1 + #warning "Note: Auto-assigned K_MS1_PIN to an unused En_MS1_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_K_MS2 + #warning "Note: Auto-assigned K_MS2_PIN to an unused En_MS2_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_K_MS3 + #warning "Note: Auto-assigned K_MS3_PIN to an unused En_MS3_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #if AUTO_ASSIGNED_K_DIAG + #if K_USE_ENDSTOP == _XMIN_ + #warning "Note: Auto-assigned K_DIAG_PIN to X_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _XMAX_ + #warning "Note: Auto-assigned K_DIAG_PIN to X_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _XSTOP_ + #warning "Note: Auto-assigned K_DIAG_PIN to X_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _YMIN_ + #warning "Note: Auto-assigned K_DIAG_PIN to Y_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _YMAX_ + #warning "Note: Auto-assigned K_DIAG_PIN to Y_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _YSTOP_ + #warning "Note: Auto-assigned K_DIAG_PIN to Y_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _ZMIN_ + #warning "Note: Auto-assigned K_DIAG_PIN to Z_MIN_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _ZMAX_ + #warning "Note: Auto-assigned K_DIAG_PIN to Z_MAX_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _ZSTOP_ + #warning "Note: Auto-assigned K_DIAG_PIN to Z_STOP_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _XDIAG_ + #warning "Note: Auto-assigned K_DIAG_PIN to X_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _YDIAG_ + #warning "Note: Auto-assigned K_DIAG_PIN to Y_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _ZDIAG_ + #warning "Note: Auto-assigned K_DIAG_PIN to Z_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _E0DIAG_ + #warning "Note: Auto-assigned K_DIAG_PIN to E0_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _E1DIAG_ + #warning "Note: Auto-assigned K_DIAG_PIN to E1_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _E2DIAG_ + #warning "Note: Auto-assigned K_DIAG_PIN to E2_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _E3DIAG_ + #warning "Note: Auto-assigned K_DIAG_PIN to E3_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _E4DIAG_ + #warning "Note: Auto-assigned K_DIAG_PIN to E4_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _E5DIAG_ + #warning "Note: Auto-assigned K_DIAG_PIN to E5_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _E6DIAG_ + #warning "Note: Auto-assigned K_DIAG_PIN to E6_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #elif K_USE_ENDSTOP == _E7DIAG_ + #warning "Note: Auto-assigned K_DIAG_PIN to E7_DIAG_PIN. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + #endif + + #if ENABLED(CHAMBER_FAN) && !defined(CHAMBER_FAN_INDEX) + #warning "Note: Auto-assigned CHAMBER_FAN_INDEX to the first free FAN pin. (Define NO_AUTO_ASSIGN_WARNING to suppress this warning.)" + #endif + +#endif // !NO_AUTO_ASSIGN_WARNING #if IS_LEGACY_TFT #warning "Don't forget to update your TFT settings in Configuration.h." @@ -544,10 +548,12 @@ // // Warn users of potential endstop/DIAG pin conflicts to prevent homing issues when not using sensorless homing // -#if !USE_SENSORLESS && ENABLED(USES_DIAG_JUMPERS) - #warning "Motherboard DIAG jumpers must be removed when SENSORLESS_HOMING is disabled." -#elif !USE_SENSORLESS && ENABLED(USES_DIAG_PINS) - #warning "Driver DIAG pins must be physically removed unless SENSORLESS_HOMING is enabled. (See https://bit.ly/2ZPRlt0)" +#if NONE(USE_SENSORLESS, DIAG_JUMPERS_REMOVED) + #if ENABLED(USES_DIAG_JUMPERS) + #warning "Motherboard DIAG jumpers must be removed when SENSORLESS_HOMING is disabled. (Define DIAG_JUMPERS_REMOVED to suppress this warning.)" + #elif ENABLED(USES_DIAG_PINS) + #warning "Driver DIAG pins must be physically removed unless SENSORLESS_HOMING is enabled. (See https://bit.ly/2ZPRlt0) (Define DIAG_JUMPERS_REMOVED to suppress this warning.)" + #endif #endif #if CANNOT_EMBED_CONFIGURATION From d8f73997b68da57454471b3b63056ce067cca10b Mon Sep 17 00:00:00 2001 From: Taylor Talkington Date: Mon, 17 Jan 2022 08:07:45 -0500 Subject: [PATCH 382/532] =?UTF-8?q?=F0=9F=92=84=20Improve=20Ender3=20v2=20?= =?UTF-8?q?DWIN=20MarlinUI=20(#23369)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/lcd/e3v2/marlinui/dwin_lcd.h | 2 + Marlin/src/lcd/e3v2/marlinui/ui_common.cpp | 3 - .../lcd/e3v2/marlinui/ui_status_480x272.cpp | 264 ++++--- Marlin/src/lcd/marlinui.cpp | 1 + Marlin/src/lcd/marlinui.h | 1 + buildroot/share/dwin/bin/DWIN_ICO.py | 342 +++++++++ buildroot/share/dwin/bin/LICENSE | 674 ++++++++++++++++++ buildroot/share/dwin/bin/README.md | 92 +++ buildroot/share/dwin/bin/makeIco.py | 53 ++ buildroot/share/dwin/bin/splitIco.py | 52 ++ .../share/dwin/icons-2/000-ICON_BootLogo.jpg | Bin 0 -> 16062 bytes .../icons-2/001-ICON_OpenSourceFirmware.jpg | Bin 0 -> 3206 bytes .../share/dwin/icons-2/002-ICON_GitHub.jpg | Bin 0 -> 3399 bytes .../share/dwin/icons-2/003-ICON_Website.jpg | Bin 0 -> 2049 bytes .../share/dwin/icons-2/004-ICON_Copyright.jpg | Bin 0 -> 1951 bytes .../dwin/icons-3/000-ICON_LOGO_Marlin.jpg | Bin 0 -> 9089 bytes .../share/dwin/icons-3/001-ICON_HotendOff.jpg | Bin 0 -> 3140 bytes .../share/dwin/icons-3/002-ICON_HotendOn.jpg | Bin 0 -> 3000 bytes .../share/dwin/icons-3/003-ICON_BedOff.jpg | Bin 0 -> 1798 bytes .../share/dwin/icons-3/004-ICON_BedOn.jpg | Bin 0 -> 3600 bytes .../share/dwin/icons-3/005-ICON_Fan0.jpg | Bin 0 -> 5003 bytes .../share/dwin/icons-3/006-ICON_Fan1.jpg | Bin 0 -> 4933 bytes .../share/dwin/icons-3/007-ICON_Fan2.jpg | Bin 0 -> 5035 bytes .../share/dwin/icons-3/008-ICON_Fan3.jpg | Bin 0 -> 4977 bytes .../share/dwin/icons-3/009-ICON_Halted.jpg | Bin 0 -> 10236 bytes .../share/dwin/icons-3/010-ICON_Question.jpg | Bin 0 -> 12319 bytes .../share/dwin/icons-3/011-ICON_Alert.jpg | Bin 0 -> 8217 bytes .../share/dwin/icons-3/012-ICON_RotateCW.jpg | Bin 0 -> 3291 bytes .../share/dwin/icons-3/013-ICON_RotateCCW.jpg | Bin 0 -> 3300 bytes .../share/dwin/icons-3/014-ICON_UpArrow.jpg | Bin 0 -> 1998 bytes .../share/dwin/icons-3/015-ICON_DownArrow.jpg | Bin 0 -> 1994 bytes .../dwin/icons-6/000-ICON_LOGO_Creality.jpg | Bin 0 -> 4258 bytes .../share/dwin/icons-6/001-ICON_Print_0.jpg | Bin 0 -> 3756 bytes .../share/dwin/icons-6/002-ICON_Print_1.jpg | Bin 0 -> 3754 bytes .../share/dwin/icons-6/003-ICON_Prepare_0.jpg | Bin 0 -> 3603 bytes .../share/dwin/icons-6/004-ICON_Prepare_1.jpg | Bin 0 -> 3616 bytes .../share/dwin/icons-6/005-ICON_Control_0.jpg | Bin 0 -> 4158 bytes .../share/dwin/icons-6/006-ICON_Control_1.jpg | Bin 0 -> 4157 bytes .../dwin/icons-6/007-ICON_Leveling_0.jpg | Bin 0 -> 3480 bytes .../dwin/icons-6/008-ICON_Leveling_1.jpg | Bin 0 -> 3474 bytes .../dwin/icons-6/009-ICON_HotendTemp.jpg | Bin 0 -> 1671 bytes .../share/dwin/icons-6/010-ICON_BedTemp.jpg | Bin 0 -> 1655 bytes .../share/dwin/icons-6/011-ICON_Speed.jpg | Bin 0 -> 1706 bytes .../share/dwin/icons-6/012-ICON_Zoffset.jpg | Bin 0 -> 1654 bytes .../share/dwin/icons-6/013-ICON_Back.jpg | Bin 0 -> 1594 bytes .../share/dwin/icons-6/014-ICON_File.jpg | Bin 0 -> 1852 bytes .../share/dwin/icons-6/015-ICON_PrintTime.jpg | Bin 0 -> 1759 bytes .../dwin/icons-6/016-ICON_RemainTime.jpg | Bin 0 -> 1703 bytes .../share/dwin/icons-6/017-ICON_Setup_0.jpg | Bin 0 -> 3990 bytes .../share/dwin/icons-6/018-ICON_Setup_1.jpg | Bin 0 -> 3981 bytes .../share/dwin/icons-6/019-ICON_Pause_0.jpg | Bin 0 -> 3592 bytes .../share/dwin/icons-6/020-ICON_Pause_1.jpg | Bin 0 -> 3583 bytes .../dwin/icons-6/021-ICON_Continue_0.jpg | Bin 0 -> 3657 bytes .../dwin/icons-6/022-ICON_Continue_1.jpg | Bin 0 -> 3656 bytes .../share/dwin/icons-6/023-ICON_Stop_0.jpg | Bin 0 -> 3490 bytes .../share/dwin/icons-6/024-ICON_Stop_1.jpg | Bin 0 -> 3482 bytes buildroot/share/dwin/icons-6/025-ICON_Bar.jpg | Bin 0 -> 6315 bytes .../share/dwin/icons-6/026-ICON_More.jpg | Bin 0 -> 1612 bytes .../share/dwin/icons-6/027-ICON_Axis.jpg | Bin 0 -> 1905 bytes .../dwin/icons-6/028-ICON_CloseMotor.jpg | Bin 0 -> 1945 bytes .../share/dwin/icons-6/029-ICON_Homing.jpg | Bin 0 -> 1920 bytes .../share/dwin/icons-6/030-ICON_SetHome.jpg | Bin 0 -> 1881 bytes .../dwin/icons-6/031-ICON_PLAPreheat.jpg | Bin 0 -> 1745 bytes .../dwin/icons-6/032-ICON_ABSPreheat.jpg | Bin 0 -> 1743 bytes .../share/dwin/icons-6/033-ICON_Cool.jpg | Bin 0 -> 1843 bytes .../share/dwin/icons-6/034-ICON_Language.jpg | Bin 0 -> 1960 bytes .../share/dwin/icons-6/035-ICON_MoveX.jpg | Bin 0 -> 1871 bytes .../share/dwin/icons-6/036-ICON_MoveY.jpg | Bin 0 -> 1874 bytes .../share/dwin/icons-6/037-ICON_MoveZ.jpg | Bin 0 -> 1820 bytes .../share/dwin/icons-6/038-ICON_Extruder.jpg | Bin 0 -> 1692 bytes .../dwin/icons-6/040-ICON_Temperature.jpg | Bin 0 -> 1821 bytes .../share/dwin/icons-6/041-ICON_Motion.jpg | Bin 0 -> 1906 bytes .../dwin/icons-6/042-ICON_WriteEEPROM.jpg | Bin 0 -> 1812 bytes .../dwin/icons-6/043-ICON_ReadEEPROM.jpg | Bin 0 -> 1876 bytes .../dwin/icons-6/044-ICON_ResumeEEPROM.jpg | Bin 0 -> 1940 bytes .../share/dwin/icons-6/045-ICON_Info.jpg | Bin 0 -> 1679 bytes .../dwin/icons-6/046-ICON_SetEndTemp.jpg | Bin 0 -> 1808 bytes .../dwin/icons-6/047-ICON_SetBedTemp.jpg | Bin 0 -> 1712 bytes .../share/dwin/icons-6/048-ICON_FanSpeed.jpg | Bin 0 -> 1787 bytes .../dwin/icons-6/049-ICON_SetPLAPreheat.jpg | Bin 0 -> 1782 bytes .../dwin/icons-6/050-ICON_SetABSPreheat.jpg | Bin 0 -> 1785 bytes .../share/dwin/icons-6/051-ICON_MaxSpeed.jpg | Bin 0 -> 1718 bytes .../dwin/icons-6/052-ICON_MaxAccelerated.jpg | Bin 0 -> 1768 bytes .../share/dwin/icons-6/053-ICON_MaxJerk.jpg | Bin 0 -> 1756 bytes .../share/dwin/icons-6/054-ICON_Step.jpg | Bin 0 -> 1816 bytes .../share/dwin/icons-6/055-ICON_PrintSize.jpg | Bin 0 -> 1898 bytes .../share/dwin/icons-6/056-ICON_Version.jpg | Bin 0 -> 1957 bytes .../share/dwin/icons-6/057-ICON_Contact.jpg | Bin 0 -> 1862 bytes .../icons-6/058-ICON_StockConfiguraton.jpg | Bin 0 -> 1624 bytes .../share/dwin/icons-6/059-ICON_MaxSpeedX.jpg | Bin 0 -> 1896 bytes .../share/dwin/icons-6/060-ICON_MaxSpeedY.jpg | Bin 0 -> 1891 bytes .../share/dwin/icons-6/061-ICON_MaxSpeedZ.jpg | Bin 0 -> 1901 bytes .../share/dwin/icons-6/062-ICON_MaxSpeedE.jpg | Bin 0 -> 1888 bytes .../share/dwin/icons-6/063-ICON_MaxAccX.jpg | Bin 0 -> 1929 bytes .../share/dwin/icons-6/064-ICON_MaxAccY.jpg | Bin 0 -> 1924 bytes .../share/dwin/icons-6/065-ICON_MaxAccZ.jpg | Bin 0 -> 1934 bytes .../share/dwin/icons-6/066-ICON_MaxAccE.jpg | Bin 0 -> 1933 bytes .../dwin/icons-6/067-ICON_MaxSpeedJerkX.jpg | Bin 0 -> 1936 bytes .../dwin/icons-6/068-ICON_MaxSpeedJerkY.jpg | Bin 0 -> 1938 bytes .../dwin/icons-6/069-ICON_MaxSpeedJerkZ.jpg | Bin 0 -> 1943 bytes .../dwin/icons-6/070-ICON_MaxSpeedJerkE.jpg | Bin 0 -> 1934 bytes .../share/dwin/icons-6/071-ICON_StepX.jpg | Bin 0 -> 1976 bytes .../share/dwin/icons-6/072-ICON_StepY.jpg | Bin 0 -> 1979 bytes .../share/dwin/icons-6/073-ICON_StepZ.jpg | Bin 0 -> 1984 bytes .../share/dwin/icons-6/074-ICON_StepE.jpg | Bin 0 -> 1979 bytes .../share/dwin/icons-6/075-ICON_Setspeed.jpg | Bin 0 -> 1748 bytes .../dwin/icons-6/076-ICON_SetZOffset.jpg | Bin 0 -> 1881 bytes .../share/dwin/icons-6/077-ICON_Rectangle.jpg | Bin 0 -> 1142 bytes .../share/dwin/icons-6/078-ICON_BLTouch.jpg | Bin 0 -> 2016 bytes .../dwin/icons-6/079-ICON_TempTooLow.jpg | Bin 0 -> 2058 bytes .../dwin/icons-6/080-ICON_AutoLeveling.jpg | Bin 0 -> 2110 bytes .../dwin/icons-6/081-ICON_TempTooHigh.jpg | Bin 0 -> 2137 bytes .../share/dwin/icons-6/082-ICON_NoTips_C.jpg | Bin 0 -> 2529 bytes .../share/dwin/icons-6/083-ICON_NoTips_E.jpg | Bin 0 -> 2784 bytes .../dwin/icons-6/084-ICON_Continue_C.jpg | Bin 0 -> 3376 bytes .../dwin/icons-6/085-ICON_Continue_E.jpg | Bin 0 -> 3029 bytes .../share/dwin/icons-6/086-ICON_Cancel_C.jpg | Bin 0 -> 1988 bytes .../share/dwin/icons-6/087-ICON_Cancel_E.jpg | Bin 0 -> 2170 bytes .../share/dwin/icons-6/088-ICON_Confirm_C.jpg | Bin 0 -> 2471 bytes .../share/dwin/icons-6/089-ICON_Confirm_E.jpg | Bin 0 -> 2841 bytes .../share/dwin/icons-6/090-ICON_Info_0.jpg | Bin 0 -> 3469 bytes .../share/dwin/icons-6/091-ICON_Info_1.jpg | Bin 0 -> 3465 bytes buildroot/share/dwin/icons-svg/alert.svg | 85 +++ .../share/dwin/icons-svg/bed_flat_old.svg | 72 ++ .../share/dwin/icons-svg/bed_flat_on.svg | 91 +++ .../share/dwin/icons-svg/bed_leveled_off.svg | 83 +++ .../share/dwin/icons-svg/bed_leveled_on.svg | 103 +++ buildroot/share/dwin/icons-svg/bed_off.svg | 64 ++ buildroot/share/dwin/icons-svg/bed_on.svg | 84 +++ buildroot/share/dwin/icons-svg/bedline.svg | 64 ++ buildroot/share/dwin/icons-svg/down_arrow.svg | 112 +++ buildroot/share/dwin/icons-svg/fan.svg | 155 ++++ buildroot/share/dwin/icons-svg/halted.svg | 83 +++ buildroot/share/dwin/icons-svg/hotend_off.svg | 114 +++ buildroot/share/dwin/icons-svg/hotend_on.svg | 114 +++ buildroot/share/dwin/icons-svg/question.svg | 75 ++ buildroot/share/dwin/icons-svg/rotate_ccw.svg | 99 +++ buildroot/share/dwin/icons-svg/rotate_cw.svg | 98 +++ buildroot/share/dwin/icons-svg/up_arrow.svg | 112 +++ buildroot/share/dwin/make_jpgs.sh | 31 + 140 files changed, 3024 insertions(+), 99 deletions(-) create mode 100644 buildroot/share/dwin/bin/DWIN_ICO.py create mode 100644 buildroot/share/dwin/bin/LICENSE create mode 100644 buildroot/share/dwin/bin/README.md create mode 100755 buildroot/share/dwin/bin/makeIco.py create mode 100755 buildroot/share/dwin/bin/splitIco.py create mode 100644 buildroot/share/dwin/icons-2/000-ICON_BootLogo.jpg create mode 100644 buildroot/share/dwin/icons-2/001-ICON_OpenSourceFirmware.jpg create mode 100644 buildroot/share/dwin/icons-2/002-ICON_GitHub.jpg create mode 100644 buildroot/share/dwin/icons-2/003-ICON_Website.jpg create mode 100644 buildroot/share/dwin/icons-2/004-ICON_Copyright.jpg create mode 100644 buildroot/share/dwin/icons-3/000-ICON_LOGO_Marlin.jpg create mode 100644 buildroot/share/dwin/icons-3/001-ICON_HotendOff.jpg create mode 100644 buildroot/share/dwin/icons-3/002-ICON_HotendOn.jpg create mode 100644 buildroot/share/dwin/icons-3/003-ICON_BedOff.jpg create mode 100644 buildroot/share/dwin/icons-3/004-ICON_BedOn.jpg create mode 100644 buildroot/share/dwin/icons-3/005-ICON_Fan0.jpg create mode 100644 buildroot/share/dwin/icons-3/006-ICON_Fan1.jpg create mode 100644 buildroot/share/dwin/icons-3/007-ICON_Fan2.jpg create mode 100644 buildroot/share/dwin/icons-3/008-ICON_Fan3.jpg create mode 100644 buildroot/share/dwin/icons-3/009-ICON_Halted.jpg create mode 100644 buildroot/share/dwin/icons-3/010-ICON_Question.jpg create mode 100644 buildroot/share/dwin/icons-3/011-ICON_Alert.jpg create mode 100644 buildroot/share/dwin/icons-3/012-ICON_RotateCW.jpg create mode 100644 buildroot/share/dwin/icons-3/013-ICON_RotateCCW.jpg create mode 100644 buildroot/share/dwin/icons-3/014-ICON_UpArrow.jpg create mode 100644 buildroot/share/dwin/icons-3/015-ICON_DownArrow.jpg create mode 100644 buildroot/share/dwin/icons-6/000-ICON_LOGO_Creality.jpg create mode 100644 buildroot/share/dwin/icons-6/001-ICON_Print_0.jpg create mode 100644 buildroot/share/dwin/icons-6/002-ICON_Print_1.jpg create mode 100644 buildroot/share/dwin/icons-6/003-ICON_Prepare_0.jpg create mode 100644 buildroot/share/dwin/icons-6/004-ICON_Prepare_1.jpg create mode 100644 buildroot/share/dwin/icons-6/005-ICON_Control_0.jpg create mode 100644 buildroot/share/dwin/icons-6/006-ICON_Control_1.jpg create mode 100644 buildroot/share/dwin/icons-6/007-ICON_Leveling_0.jpg create mode 100644 buildroot/share/dwin/icons-6/008-ICON_Leveling_1.jpg create mode 100644 buildroot/share/dwin/icons-6/009-ICON_HotendTemp.jpg create mode 100644 buildroot/share/dwin/icons-6/010-ICON_BedTemp.jpg create mode 100644 buildroot/share/dwin/icons-6/011-ICON_Speed.jpg create mode 100644 buildroot/share/dwin/icons-6/012-ICON_Zoffset.jpg create mode 100644 buildroot/share/dwin/icons-6/013-ICON_Back.jpg create mode 100644 buildroot/share/dwin/icons-6/014-ICON_File.jpg create mode 100644 buildroot/share/dwin/icons-6/015-ICON_PrintTime.jpg create mode 100644 buildroot/share/dwin/icons-6/016-ICON_RemainTime.jpg create mode 100644 buildroot/share/dwin/icons-6/017-ICON_Setup_0.jpg create mode 100644 buildroot/share/dwin/icons-6/018-ICON_Setup_1.jpg create mode 100644 buildroot/share/dwin/icons-6/019-ICON_Pause_0.jpg create mode 100644 buildroot/share/dwin/icons-6/020-ICON_Pause_1.jpg create mode 100644 buildroot/share/dwin/icons-6/021-ICON_Continue_0.jpg create mode 100644 buildroot/share/dwin/icons-6/022-ICON_Continue_1.jpg create mode 100644 buildroot/share/dwin/icons-6/023-ICON_Stop_0.jpg create mode 100644 buildroot/share/dwin/icons-6/024-ICON_Stop_1.jpg create mode 100644 buildroot/share/dwin/icons-6/025-ICON_Bar.jpg create mode 100644 buildroot/share/dwin/icons-6/026-ICON_More.jpg create mode 100644 buildroot/share/dwin/icons-6/027-ICON_Axis.jpg create mode 100644 buildroot/share/dwin/icons-6/028-ICON_CloseMotor.jpg create mode 100644 buildroot/share/dwin/icons-6/029-ICON_Homing.jpg create mode 100644 buildroot/share/dwin/icons-6/030-ICON_SetHome.jpg create mode 100644 buildroot/share/dwin/icons-6/031-ICON_PLAPreheat.jpg create mode 100644 buildroot/share/dwin/icons-6/032-ICON_ABSPreheat.jpg create mode 100644 buildroot/share/dwin/icons-6/033-ICON_Cool.jpg create mode 100644 buildroot/share/dwin/icons-6/034-ICON_Language.jpg create mode 100644 buildroot/share/dwin/icons-6/035-ICON_MoveX.jpg create mode 100644 buildroot/share/dwin/icons-6/036-ICON_MoveY.jpg create mode 100644 buildroot/share/dwin/icons-6/037-ICON_MoveZ.jpg create mode 100644 buildroot/share/dwin/icons-6/038-ICON_Extruder.jpg create mode 100644 buildroot/share/dwin/icons-6/040-ICON_Temperature.jpg create mode 100644 buildroot/share/dwin/icons-6/041-ICON_Motion.jpg create mode 100644 buildroot/share/dwin/icons-6/042-ICON_WriteEEPROM.jpg create mode 100644 buildroot/share/dwin/icons-6/043-ICON_ReadEEPROM.jpg create mode 100644 buildroot/share/dwin/icons-6/044-ICON_ResumeEEPROM.jpg create mode 100644 buildroot/share/dwin/icons-6/045-ICON_Info.jpg create mode 100644 buildroot/share/dwin/icons-6/046-ICON_SetEndTemp.jpg create mode 100644 buildroot/share/dwin/icons-6/047-ICON_SetBedTemp.jpg create mode 100644 buildroot/share/dwin/icons-6/048-ICON_FanSpeed.jpg create mode 100644 buildroot/share/dwin/icons-6/049-ICON_SetPLAPreheat.jpg create mode 100644 buildroot/share/dwin/icons-6/050-ICON_SetABSPreheat.jpg create mode 100644 buildroot/share/dwin/icons-6/051-ICON_MaxSpeed.jpg create mode 100644 buildroot/share/dwin/icons-6/052-ICON_MaxAccelerated.jpg create mode 100644 buildroot/share/dwin/icons-6/053-ICON_MaxJerk.jpg create mode 100644 buildroot/share/dwin/icons-6/054-ICON_Step.jpg create mode 100644 buildroot/share/dwin/icons-6/055-ICON_PrintSize.jpg create mode 100644 buildroot/share/dwin/icons-6/056-ICON_Version.jpg create mode 100644 buildroot/share/dwin/icons-6/057-ICON_Contact.jpg create mode 100644 buildroot/share/dwin/icons-6/058-ICON_StockConfiguraton.jpg create mode 100644 buildroot/share/dwin/icons-6/059-ICON_MaxSpeedX.jpg create mode 100644 buildroot/share/dwin/icons-6/060-ICON_MaxSpeedY.jpg create mode 100644 buildroot/share/dwin/icons-6/061-ICON_MaxSpeedZ.jpg create mode 100644 buildroot/share/dwin/icons-6/062-ICON_MaxSpeedE.jpg create mode 100644 buildroot/share/dwin/icons-6/063-ICON_MaxAccX.jpg create mode 100644 buildroot/share/dwin/icons-6/064-ICON_MaxAccY.jpg create mode 100644 buildroot/share/dwin/icons-6/065-ICON_MaxAccZ.jpg create mode 100644 buildroot/share/dwin/icons-6/066-ICON_MaxAccE.jpg create mode 100644 buildroot/share/dwin/icons-6/067-ICON_MaxSpeedJerkX.jpg create mode 100644 buildroot/share/dwin/icons-6/068-ICON_MaxSpeedJerkY.jpg create mode 100644 buildroot/share/dwin/icons-6/069-ICON_MaxSpeedJerkZ.jpg create mode 100644 buildroot/share/dwin/icons-6/070-ICON_MaxSpeedJerkE.jpg create mode 100644 buildroot/share/dwin/icons-6/071-ICON_StepX.jpg create mode 100644 buildroot/share/dwin/icons-6/072-ICON_StepY.jpg create mode 100644 buildroot/share/dwin/icons-6/073-ICON_StepZ.jpg create mode 100644 buildroot/share/dwin/icons-6/074-ICON_StepE.jpg create mode 100644 buildroot/share/dwin/icons-6/075-ICON_Setspeed.jpg create mode 100644 buildroot/share/dwin/icons-6/076-ICON_SetZOffset.jpg create mode 100644 buildroot/share/dwin/icons-6/077-ICON_Rectangle.jpg create mode 100644 buildroot/share/dwin/icons-6/078-ICON_BLTouch.jpg create mode 100644 buildroot/share/dwin/icons-6/079-ICON_TempTooLow.jpg create mode 100644 buildroot/share/dwin/icons-6/080-ICON_AutoLeveling.jpg create mode 100644 buildroot/share/dwin/icons-6/081-ICON_TempTooHigh.jpg create mode 100644 buildroot/share/dwin/icons-6/082-ICON_NoTips_C.jpg create mode 100644 buildroot/share/dwin/icons-6/083-ICON_NoTips_E.jpg create mode 100644 buildroot/share/dwin/icons-6/084-ICON_Continue_C.jpg create mode 100644 buildroot/share/dwin/icons-6/085-ICON_Continue_E.jpg create mode 100644 buildroot/share/dwin/icons-6/086-ICON_Cancel_C.jpg create mode 100644 buildroot/share/dwin/icons-6/087-ICON_Cancel_E.jpg create mode 100644 buildroot/share/dwin/icons-6/088-ICON_Confirm_C.jpg create mode 100644 buildroot/share/dwin/icons-6/089-ICON_Confirm_E.jpg create mode 100644 buildroot/share/dwin/icons-6/090-ICON_Info_0.jpg create mode 100644 buildroot/share/dwin/icons-6/091-ICON_Info_1.jpg create mode 100644 buildroot/share/dwin/icons-svg/alert.svg create mode 100644 buildroot/share/dwin/icons-svg/bed_flat_old.svg create mode 100644 buildroot/share/dwin/icons-svg/bed_flat_on.svg create mode 100644 buildroot/share/dwin/icons-svg/bed_leveled_off.svg create mode 100644 buildroot/share/dwin/icons-svg/bed_leveled_on.svg create mode 100644 buildroot/share/dwin/icons-svg/bed_off.svg create mode 100644 buildroot/share/dwin/icons-svg/bed_on.svg create mode 100644 buildroot/share/dwin/icons-svg/bedline.svg create mode 100644 buildroot/share/dwin/icons-svg/down_arrow.svg create mode 100644 buildroot/share/dwin/icons-svg/fan.svg create mode 100644 buildroot/share/dwin/icons-svg/halted.svg create mode 100644 buildroot/share/dwin/icons-svg/hotend_off.svg create mode 100644 buildroot/share/dwin/icons-svg/hotend_on.svg create mode 100644 buildroot/share/dwin/icons-svg/question.svg create mode 100644 buildroot/share/dwin/icons-svg/rotate_ccw.svg create mode 100644 buildroot/share/dwin/icons-svg/rotate_cw.svg create mode 100644 buildroot/share/dwin/icons-svg/up_arrow.svg create mode 100755 buildroot/share/dwin/make_jpgs.sh diff --git a/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.h b/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.h index 3e80a0103e..dc6c79bd2d 100644 --- a/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.h +++ b/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.h @@ -64,6 +64,8 @@ #define ICON_UpArrow 14 #define ICON_DownArrow 15 #define ICON_BedLine 16 +#define ICON_BedLevelOff 17 +#define ICON_BedLevelOn 18 #include "../common/dwin_font.h" diff --git a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp index 126700185b..b6093784a8 100644 --- a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp +++ b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp @@ -81,9 +81,6 @@ bool MarlinUI::detected() { return true; } // Initialize or re-initialize the LCD void MarlinUI::init_lcd() { DWIN_Startup(); - - // Load the assets JPG (currently just the status screen 'icon') - DWIN_JPG_CacheTo1(DWIN_MarlinUI_Assets); } // This LCD should clear where it will draw anew diff --git a/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp b/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp index 306e9044f7..c2948048c1 100644 --- a/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp +++ b/Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp @@ -37,6 +37,7 @@ #include "../../../module/motion.h" #include "../../../module/temperature.h" #include "../../../module/printcounter.h" +#include "../../../module/planner.h" #if ENABLED(SDSUPPORT) #include "../../../libs/duration_t.h" @@ -46,8 +47,13 @@ #include "../../../MarlinCore.h" // for printingIsActive #endif -#define STATUS_HEATERS_X 15 -#define STATUS_HEATERS_Y 56 +#if ENABLED(DWIN_MARLINUI_PORTRAIT) + #define STATUS_HEATERS_X 15 + #define STATUS_HEATERS_Y 56 +#else + #define STATUS_HEATERS_X 154 + #define STATUS_HEATERS_Y 10 +#endif #define STATUS_HEATERS_XSPACE 64 #define STATUS_FAN_WIDTH 48 #define STATUS_FAN_HEIGHT 48 @@ -61,35 +67,63 @@ // Homed and known, display constantly. // FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const bool blink, const uint16_t x, const uint16_t y) { - uint8_t vallen = utf8_strlen(value); - if (!ui.did_first_redraw) { - dwin_string.set(); - dwin_string.add('X' + axis); - DWIN_Draw_String(true, font16x32, Color_IconBlue, Color_Bg_Black, x + (vallen * 14 - 14) / 2, y + 2, S(dwin_string.string())); - } + #if ENABLED(DWIN_MARLINUI_PORTRAIT) - dwin_string.set(); - if (blink) - dwin_string.add(value); - else { - if (!TEST(axis_homed, axis)) - while (const char c = *value++) dwin_string.add(c <= '.' ? c : '?'); - else { - #if NONE(HOME_AFTER_DEACTIVATE, DISABLE_REDUCED_ACCURACY_WARNING) - if (!TEST(axis_trusted, axis)) - dwin_string.add(TERN1(DWIN_MARLINUI_PORTRAIT, axis == Z_AXIS) ? PSTR(" ") : PSTR(" ")); - else - #endif - dwin_string.add(value); + uint8_t vallen = utf8_strlen(value); + if (!ui.did_first_redraw) { + dwin_string.set(); + dwin_string.add('X' + axis); + DWIN_Draw_String(true, font16x32, Color_IconBlue, Color_Bg_Black, x + (vallen * 14 - 14) / 2, y + 2, S(dwin_string.string())); } - } - // For E_TOTAL there may be some characters to cover up - if (BOTH(DWIN_MARLINUI_PORTRAIT, LCD_SHOW_E_TOTAL) && axis == X_AXIS) - dwin_string.add(" "); + dwin_string.set(); + if (blink) + dwin_string.add(value); + else if (!TEST(axis_homed, axis)) + while (const char c = *value++) dwin_string.add(c <= '.' ? c : '?'); + else if (NONE(HOME_AFTER_DEACTIVATE, DISABLE_REDUCED_ACCURACY_WARNING) && !TEST(axis_trusted, axis)) + dwin_string.add(TERN1(DWIN_MARLINUI_PORTRAIT, axis == Z_AXIS) ? PSTR(" ") : PSTR(" ")); + else + dwin_string.add(value); - DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, x, y + 32, S(dwin_string.string())); + // For E_TOTAL there may be some characters to cover up + if (BOTH(DWIN_MARLINUI_PORTRAIT, LCD_SHOW_E_TOTAL) && axis == X_AXIS) + dwin_string.add(" "); + + DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, x, y + 32, S(dwin_string.string())); + + #else // !DWIN_MARLINUI_PORTRAIT + + if (!ui.did_first_redraw || ui.old_is_printing != print_job_timer.isRunning()) { + dwin_string.set(); + dwin_string.add('X' + axis); + DWIN_Draw_String(true, font16x32, Color_IconBlue, Color_Bg_Black, x, y, S(dwin_string.string())); + } + + dwin_string.set(); + if (blink) + dwin_string.add(value); + else { + if (!TEST(axis_homed, axis)) + while (const char c = *value++) dwin_string.add(c <= '.' ? c : '?'); + else { + #if NONE(HOME_AFTER_DEACTIVATE, DISABLE_REDUCED_ACCURACY_WARNING) + if (!TEST(axis_trusted, axis)) + dwin_string.add(TERN1(DWIN_MARLINUI_PORTRAIT, axis == Z_AXIS) ? PSTR(" ") : PSTR(" ")); + else + #endif + dwin_string.add(value); + } + } + + // For E_TOTAL there may be some characters to cover up + if (ENABLED(LCD_SHOW_E_TOTAL) && (!ui.did_first_redraw || ui.old_is_printing != print_job_timer.isRunning()) && axis == X_AXIS) + dwin_string.add(" "); + + DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, x + 32, y + 4, S(dwin_string.string())); + + #endif // !DWIN_MARLINUI_PORTRAIT } #if ENABLED(LCD_SHOW_E_TOTAL) @@ -97,20 +131,36 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const FORCE_INLINE void _draw_e_value(const_float_t value, const uint16_t x, const uint16_t y) { const uint8_t scale = value >= 100000.0f ? 10 : 1; // show cm after 99,999mm - if (!ui.did_first_redraw) { - // Extra spaces so we don't have to clear the 'Y' label separately - dwin_string.set("E "); - DWIN_Draw_String(true, font16x32, Color_IconBlue, Color_Bg_Black, x + (4 * 14 / 2) - 7, y + 2, S(dwin_string.string())); - } + #if ENABLED(DWIN_MARLINUI_PORTRAIT) - dwin_string.set(ui16tostr5rj(value / scale)); - DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, x, y + 32, S(dwin_string.string())); + if (!ui.did_first_redraw) { + // Extra spaces to erase previous value + dwin_string.set("E "); + DWIN_Draw_String(true, font16x32, Color_IconBlue, Color_Bg_Black, x + (4 * 14 / 2) - 7, y + 2, S(dwin_string.string())); + } - // Extra spaces so we don't have to clear out the Y value separately - DWIN_Draw_String(true, font14x28, Color_IconBlue, Color_Bg_Black, x + (5 * 14), y + 32, S(scale == 1 ? "mm " : "cm ")); + dwin_string.set(ui16tostr5rj(value / scale)); + DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, x, y + 32, S(dwin_string.string())); + + // Extra spaces to erase previous value + DWIN_Draw_String(true, font14x28, Color_IconBlue, Color_Bg_Black, x + (5 * 14), y + 32, S(scale == 1 ? "mm " : "cm ")); + + #else // !DWIN_MARLINUI_PORTRAIT + + if (!ui.did_first_redraw || ui.old_is_printing != print_job_timer.isRunning()) { + dwin_string.set("E "); + DWIN_Draw_String(true, font16x32, Color_IconBlue, Color_Bg_Black, x, y, S(dwin_string.string())); + } + + dwin_string.set(ui16tostr5rj(value / scale)); + DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, x + 32, y + 4, S(dwin_string.string())); + + DWIN_Draw_String(true, font14x28, Color_IconBlue, Color_Bg_Black, x + (32 + 70), y + 4, S(scale == 1 ? "mm " : "cm ")); + + #endif // !DWIN_MARLINUI_PORTRAIT } -#endif +#endif // LCD_SHOW_E_TOTAL // // Fan Icon and Percentage @@ -126,6 +176,7 @@ FORCE_INLINE void _draw_fan_status(const uint16_t x, const uint16_t y) { DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, x, y + STATUS_FAN_HEIGHT, S(dwin_string.string())); } else { + DWIN_ICON_AnimationControl(0x0000); // disable all icon animations (this is the only one) DWIN_ICON_Show(ICON, ICON_Fan0, x + fanx, y); dwin_string.set(PSTR(" ")); DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, x, y + STATUS_FAN_HEIGHT, S(dwin_string.string())); @@ -153,18 +204,35 @@ FORCE_INLINE void _draw_heater_status(const heater_id_t heater, const uint16_t x #if HAS_HEATED_BED static celsius_t old_bed_temp = 500, old_bed_target = 500; static bool old_bed_on = false; + #if HAS_LEVELING + static bool old_leveling_on = false; + #endif #endif #if HAS_HOTEND && HAS_HEATED_BED const bool isBed = heater < 0; - const float tc = (isBed ? thermalManager.degBed() : thermalManager.degHotend(heater)), - tt = (isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater)); - const uint8_t ta = isBed ? thermalManager.isHeatingBed() : thermalManager.isHeatingHotend(heater); - const bool c_draw = tc != (isBed ? old_bed_temp : old_temp[heater]), - t_draw = tt != (isBed ? old_bed_target : old_target[heater]), - i_draw = ta != (isBed ? old_bed_on : old_on[heater]); - if (isBed) { old_bed_temp = tc; old_bed_target = tt; old_bed_on = ta; } - else { old_temp[heater] = tc; old_target[heater] = tt; old_on[heater] = ta; } + const float tc = isBed ? thermalManager.degBed() : thermalManager.degHotend(heater), + tt = isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater); + const bool ta = isBed ? thermalManager.isHeatingBed() : thermalManager.isHeatingHotend(heater); + + bool c_draw = tc != (isBed ? old_bed_temp : old_temp[heater]), + t_draw = tt != (isBed ? old_bed_target : old_target[heater]), + i_draw = ta != (isBed ? old_bed_on : old_on[heater]); + + if (isBed) { + #if HAS_LEVELING + if (!i_draw && planner.leveling_active != old_leveling_on) i_draw = true; + old_leveling_on = planner.leveling_active; + #endif + old_bed_temp = tc; + old_bed_target = tt; + old_bed_on = ta; + } + else { + old_temp[heater] = tc; + old_target[heater] = tt; + old_on[heater] = ta; + } #elif HAS_HOTEND constexpr bool isBed = false; const float tc = thermalManager.degHotend(heater), tt = thermalManager.degTargetHotend(heater); @@ -175,7 +243,11 @@ FORCE_INLINE void _draw_heater_status(const heater_id_t heater, const uint16_t x constexpr bool isBed = true; const float tc = thermalManager.degBed(), tt = thermalManager.degTargetBed(); const uint8_t ta = thermalManager.isHeatingBed(); - const bool c_draw = tc != old_temp[heater], t_draw = tt != old_target[heater], i_draw = ta != old_on[heater]; + bool c_draw = tc != old_temp[heater], t_draw = tt != old_target[heater], i_draw = ta != old_on[heater]; + #if HAS_LEVELING + if (!idraw && planner.leveling_active != old_leveling_on) i_draw = true; + old_leveling_on = tl; + #endif old_bed_temp = tc; old_bed_target = tt; old_bed_on = ta; #endif @@ -185,8 +257,10 @@ FORCE_INLINE void _draw_heater_status(const heater_id_t heater, const uint16_t x DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, x, y, S(dwin_string.string())); } - if (!ui.did_first_redraw || i_draw) - DWIN_ICON_Show(ICON, (isBed ? ICON_BedOff : ICON_HotendOff) + ta, x, y + STATUS_CHR_HEIGHT + 2); + if (!ui.did_first_redraw || i_draw){ + const uint8_t ico = isBed ? (TERN0(HAS_LEVELING, planner.leveling_active) ? ICON_BedLevelOff : ICON_BedOff) : ICON_HotendOff; + DWIN_ICON_Show(ICON, ico + ta, x, y + STATUS_CHR_HEIGHT + 2); + } if (!ui.did_first_redraw || c_draw) { dwin_string.set(i16tostr3rj(tc + 0.5)); @@ -220,14 +294,22 @@ void MarlinUI::draw_status_screen() { // Logo/Status Icon #define STATUS_LOGO_WIDTH 128 #define STATUS_LOGO_HEIGHT 40 - DWIN_ICON_Show(ICON, ICON_LOGO_Marlin, (LCD_PIXEL_WIDTH - (STATUS_LOGO_WIDTH)) / 2, ((STATUS_HEATERS_Y - 4) - (STATUS_LOGO_HEIGHT)) / 2); + DWIN_ICON_Show(ICON, ICON_LOGO_Marlin, + #if ENABLED(DWIN_MARLINUI_PORTRAIT) + (LCD_PIXEL_WIDTH - (STATUS_LOGO_WIDTH)) / 2, ((STATUS_HEATERS_Y - 4) - (STATUS_LOGO_HEIGHT)) / 2 + #else + 5, 42 + #endif + ); // Draw a frame around the x/y/z values - #if ENABLED(DWIN_MARLINUI_PORTRAIT) - DWIN_Draw_Rectangle(0, Select_Color, 0, 193, LCD_PIXEL_WIDTH, 260); - #else - //DWIN_Draw_Rectangle(0, Select_Color, LCD_PIXEL_WIDTH - 106, 50, LCD_PIXEL_WIDTH - 1, 230); - #endif + DWIN_Draw_Rectangle(0, Select_Color, + #if ENABLED(DWIN_MARLINUI_PORTRAIT) + 0, 193, LCD_PIXEL_WIDTH, 260 + #else + 0, 115, LCD_PIXEL_WIDTH - 1, 152 + #endif + ); } uint16_t hx = STATUS_HEATERS_X; @@ -244,33 +326,22 @@ void MarlinUI::draw_status_screen() { #endif #if HAS_FAN - // Fan display, pinned to the right side - #if ENABLED(DWIN_MARLINUI_PORTRAIT) - _draw_fan_status(LCD_PIXEL_WIDTH - STATUS_CHR_WIDTH * 4, STATUS_FAN_Y); - #else - _draw_fan_status(212, STATUS_FAN_Y); - #endif + _draw_fan_status(LCD_PIXEL_WIDTH - STATUS_CHR_WIDTH * 5, STATUS_FAN_Y); #endif // Axis values const xyz_pos_t lpos = current_position.asLogical(); const bool show_e_total = TERN0(LCD_SHOW_E_TOTAL, printingIsActive()); UNUSED(show_e_total); - #if ENABLED(DWIN_MARLINUI_PORTRAIT) - constexpr int16_t cpy = 195; - if (show_e_total) { - TERN_(LCD_SHOW_E_TOTAL, _draw_e_value(e_move_accumulator, 6, cpy)); - } - else { - _draw_axis_value(X_AXIS, ftostr4sign(lpos.x), blink, 6, cpy); - TERN_(HAS_Y_AXIS, _draw_axis_value(Y_AXIS, ftostr4sign(lpos.y), blink, 95, cpy)); - } - TERN_(HAS_Z_AXIS, _draw_axis_value(Z_AXIS, ftostr52sp(lpos.z), blink, 165, cpy)); - #else - constexpr int16_t cpx = LCD_PIXEL_WIDTH - 104; - _draw_axis_value(X_AXIS, ftostr52sp(lpos.x), blink, cpx, STATUS_HEATERS_Y); - TERN_(HAS_Y_AXIS, _draw_axis_value(Y_AXIS, ftostr52sp(lpos.y), blink, cpx, STATUS_HEATERS_Y + 59)); - TERN_(HAS_Z_AXIS, _draw_axis_value(Z_AXIS, ftostr52sp(lpos.z), blink, cpx, STATUS_HEATERS_Y + 118)); - #endif + + constexpr int16_t cpy = TERN(DWIN_MARLINUI_PORTRAIT, 195, 117); + if (show_e_total) { + TERN_(LCD_SHOW_E_TOTAL, _draw_e_value(e_move_accumulator, TERN(DWIN_MARLINUI_PORTRAIT, 6, 75), cpy)); + } + else { + _draw_axis_value(X_AXIS, ftostr4sign(lpos.x), blink, TERN(DWIN_MARLINUI_PORTRAIT, 6, 75), cpy); + TERN_(HAS_Y_AXIS, _draw_axis_value(Y_AXIS, ftostr4sign(lpos.y), blink, TERN(DWIN_MARLINUI_PORTRAIT, 95, 184), cpy)); + } + TERN_(HAS_Z_AXIS, _draw_axis_value(Z_AXIS, ftostr52sp(lpos.z), blink, TERN(DWIN_MARLINUI_PORTRAIT, 165, 300), cpy)); // Feedrate static uint16_t old_fp = 0; @@ -278,9 +349,9 @@ void MarlinUI::draw_status_screen() { old_fp = feedrate_percentage; _draw_feedrate_status(i16tostr3rj(feedrate_percentage), #if ENABLED(DWIN_MARLINUI_PORTRAIT) - 5, 290 + 5, 290 #else - 294, STATUS_HEATERS_Y + 14, 195 #endif ); } @@ -317,25 +388,23 @@ void MarlinUI::draw_status_screen() { time.toDigital(buffer); dwin_string.set(" "); dwin_string.add(buffer); - DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, 280, 100, S(dwin_string.string())); + DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, 230, 170, S(dwin_string.string())); - #if ENABLED(LCD_SHOW_E_TOTAL) - if (show_e_total && TERN1(SHOW_REMAINING_TIME, !blink)) { // if SHOW_REMAINING_TIME is also - const uint8_t escale = e_move_accumulator >= 100000.0f ? 10 : 1; // show cm after 99,000mm - - DWIN_Draw_String(true, font14x28, Color_IconBlue, Color_Bg_Black, 249, 135, S("E")); - dwin_string.set(ui16tostr5rj(e_move_accumulator * escale)); - DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, 263, 135, S(dwin_string.string())); - DWIN_Draw_String(true, font14x28, Color_IconBlue, Color_Bg_Black, 333, 135, S(escale==1 ? "mm" : "cm")); - } - #endif #if ENABLED(SHOW_REMAINING_TIME) - if (!show_e_total || blink) { - DWIN_Draw_String(true, font14x28, Color_IconBlue, Color_Bg_Black, 249, 135, S(" R ")); + if (print_job_timer.isRunning()) { time = get_remaining_time(); - time.toDigital(buffer); - dwin_string.set(buffer); - DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, 291, 135, S(dwin_string.string())); + DWIN_Draw_String(true, font14x28, Color_IconBlue, Color_Bg_Black, 336, 170, S(" R ")); + if (print_job_timer.isPaused() && blink) + dwin_string.set(" "); + else { + time.toDigital(buffer); + dwin_string.set(buffer); + } + DWIN_Draw_String(true, font14x28, Color_White, Color_Bg_Black, 378, 170, S(dwin_string.string())); + } + else if (!ui.did_first_redraw || ui.old_is_printing != print_job_timer.isRunning()) { + dwin_string.set(" "); + DWIN_Draw_String(true, font14x28, Color_IconBlue, Color_Bg_Black, 336, 170, S(dwin_string.string())); } #endif #endif @@ -343,9 +412,11 @@ void MarlinUI::draw_status_screen() { // // Progress Bar // - constexpr int16_t pb_margin = 5, pb_left = pb_margin, pb_height = 60, - pb_right = LCD_PIXEL_WIDTH - TERN(DWIN_MARLINUI_PORTRAIT, 0, 107) - pb_margin, - pb_bottom = TERN(DWIN_MARLINUI_PORTRAIT, 410, 230), + constexpr int16_t pb_margin = 5, + pb_left = pb_margin + TERN(DWIN_MARLINUI_PORTRAIT, 0, 90), + pb_height = TERN(DWIN_MARLINUI_PORTRAIT, 60, 20), + pb_right = LCD_PIXEL_WIDTH - pb_margin, + pb_bottom = TERN(DWIN_MARLINUI_PORTRAIT, 410, 220), pb_top = pb_bottom - pb_height, pb_width = pb_right - pb_left; @@ -385,6 +456,7 @@ void MarlinUI::draw_status_screen() { draw_status_message(blink); ui.did_first_redraw = true; + ui.old_is_printing = print_job_timer.isRunning(); } #endif // IS_DWIN_MARLINUI diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index d22b11f9bd..2a576f647b 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -244,6 +244,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; #if IS_DWIN_MARLINUI bool MarlinUI::did_first_redraw; + bool MarlinUI::old_is_printing; #endif // Encoder Handling diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index c2b26b6f47..dcf74b9e27 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -468,6 +468,7 @@ public: #if IS_DWIN_MARLINUI static bool did_first_redraw; + static bool old_is_printing; #endif #if EITHER(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY) diff --git a/buildroot/share/dwin/bin/DWIN_ICO.py b/buildroot/share/dwin/bin/DWIN_ICO.py new file mode 100644 index 0000000000..8ac680c61e --- /dev/null +++ b/buildroot/share/dwin/bin/DWIN_ICO.py @@ -0,0 +1,342 @@ +# DWIN_ICO +# - Dissect and create DWIN .ico files for their LCD displays. +# +# Copyright (c) 2020 Brent Burton +# +# 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 . +#---------------------------------------------------------------- +# +# This is not a normal Microsoft .ICO file, but it has a similar +# structure for containing a number of icon images. Each icon is +# a small JPG file. +# +# The file has a directory header containing fixed-length +# records, and each record points to its data at an offset later +# in the file. +# +# The directory entries are 16 bytes each, and the entire +# directory is 4KB (0 - 0x1000). This supports 256 entries. +# +# Multibyte values are in Big Endian format. +# +# Header: (offset 0x0) +# W H offset ?? len ?? ?? +# Entry 0: xxxx xxxx 00001000 xx 10a2 00 00000000 +# Entry 1: xxxx xxxx 000020a2 xx 0eac 00 00000000 +# Entry 2: xxxx xxxx 00002f4e xx 0eaa 00 00000000 +# ... +# 0x00001000: ffd8 ffe1 0018 ... jpeg exif and data follow .. ffd9 +# 0x000020a2: ffd8 ffe1 ... +# ...rest of ICO entries' data... +# +# Header structure: +# Offset Len What +# 0 2 width +# 2 2 height +# 4 4 file byte position from SEEK_BEG +# 8 3 length of data +# 11 5 ??? all zeroes +# +# Other notes: +# * The index of each icon corresponds to the Icon number in dwin.h +# * One exception is number 39: that header entry is blank, and dwin.h +# does not define a name for 39. This is specially handled to +# prevent reordering stock icons. + +import os +import struct +from PIL import Image + +def getJpegResolution(jpegFile): + """Returns a 2-tuple containing the jpegFile's (width, height). + """ + img = Image.open(jpegFile) + return img.size + +class DWIN_ICO_File(): + def __init__(self): + self.entries = [] # list of header entries + + def splitFile(self, filename, outDir): + if not filename[-4:].lower() == '.ico': + raise RuntimeError('Input file must end in .ico') + + with open(filename, 'rb') as infile: + self._parseHeader(infile) + self._splitEntryData(infile, outDir) + + return + + def _parseHeader(self, infile): + maxEntries = 256 + count = 0 + validEntries = 0 + while count < maxEntries: + rawBytes = infile.read(16) + entry = Entry() + entry.parseRawData(rawBytes) + # check that it is valid: is offset nonzero? + # Special case: treat 39 as valid + if (entry.offset > 0) or (count == 39): + validEntries += 1 + self.entries.append(entry) + count += 1 + return + + def _splitEntryData(self, infile, outDir): + print('Splitting Entry Data...') + if 0 == len(self.entries): + raise RuntimeError('.ico file is not loaded yet') + + # check for output dir: + if not os.path.exists(outDir): + os.mkdir(outDir) + + # keep a count + count = 0 + for entry in self.entries: + # Skip any empty entries. (Special handling of 39.) + if entry.length == 0: + count += 1 + continue + # Seek file position, read length bytes, and write to new output file. + print('%02d: offset: 0x%06x len: 0x%04x width: %d height: %d' % + (count, entry.offset, entry.length, entry.width, entry.height)) + outfilename = os.path.join(outDir, + '%03d-%s.jpg' % (count, _iconNames[count])) + with open(outfilename, 'wb') as outfile: + infile.seek(entry.offset) + blob = infile.read(entry.length) + outfile.write(blob) + print('Wrote %d bytes to %s' % (entry.length, outfilename)) + + count += 1 + return + + def createFile(self, iconDir, filename): + '''Create a new .ico file from the contents of iconDir. + + The contents of iconDir are processed to get image + resolution, and a new entry is created for each. + + Each filename must have a leading number followed by a + dash, which is the icon index. E.g., "071-ICON_StepX.jpg". + ''' + self.entries = [Entry() for i in range(0,256)] + # 1. Scan icon directory and record all valid files + print('Scanning icon directory', iconDir) + count = 0 + for dirEntry in os.scandir(iconDir): + if not dirEntry.is_file(): + print('...Ignoring', dirEntry.path) + continue + # process each file: + try: + index = int(dirEntry.name[0:3]) + if (index < 0) or (index > 255): + print('...Ignoring invalid index on', dirEntry.path) + continue + #dirEntry.path is iconDir/name + w,h = getJpegResolution(dirEntry.path) + length = dirEntry.stat().st_size + e = self.entries[index] + e.width = w + e.height = h + e.length = length + e.filename = dirEntry.path + count += 1 + except Exception as e: + print('Whoops: ', e) + pass + print('...Scanned %d icon files' % (count)) + + # 2. Scan over valid header entries and update offsets + self._updateHeaderOffsets() + + # 3. Write out header to .ico file, the append each icon file + self._combineAndWriteIcoFile(filename) + print('Scanning done. %d icons included.' % (count)) + + def _updateHeaderOffsets(self): + """Iterate over all header entries and update their offsets. + """ + offset = 256 * 16 + for i in range(0,256): + e = self.entries[i] + if e.length == 0: + continue + e.offset = offset + offset += e.length + #print('%03d: (%d x %d) len=%d off=%d' % + # (i, e.width, e.height, e.length, e.offset)) + return + + def _combineAndWriteIcoFile(self, filename): + """Write out final .ico file. + All header entries are updated, so write out + the final header contents, and concat each icon + file to the .ico. + """ + with open(filename, 'wb') as outfile: + # 1. Write header directory + for e in self.entries: + outfile.write( e.serialize() ) + if outfile.tell() != 4096: + raise RuntimeError('Header directory write failed. Not 4096 bytes') + # 2. For each entry, concat the icon file data + for e in self.entries: + if 0 == e.length: continue + guts = self._getFileContents(e.filename, e.length) + outfile.write(guts) + return + + def _getFileContents(self, filename, length): + """Read contents of filename, and return bytes""" + with open(filename, 'rb') as infile: + contents = infile.read(length) + if len(contents) != length: + raise RuntimeError('Failed to read contents of', filename) + return contents + +class Entry(): + '''Entry objects record resolution and size information + about each icon stored in an ICO file. + ''' + __slots__ = ('width', 'height', 'offset', 'length', 'filename') + + def __init__(self, w=0, h=0, length=0, offset=0): + self.width = w + self.height = h + self.offset = offset + self.length = length + self.filename = None + + def parseRawData(self, rawEntryBytes): + if len(rawEntryBytes) != 16: + raise RuntimeError('Entry: data must be 16 bytes long') + + # Split data into bigendian fields + (w, h, off, len3, len21, b1,b2,b3,b4,b5) = \ + struct.unpack('>HHLBHBBBBB', rawEntryBytes) + self.width = w + self.height = h + self.offset = off + self.length = len3 * 65536 + len21 + return + + def serialize(self): + """Convert this Entry's information into a 16-byte + .ico directory entry record. Return bytes object. + """ + len21 = self.length % 65536 + len3 = self.length // 65536 + rawdata = struct.pack('>HHLBHBBBBB', self.width, self.height, + self.offset, len3, len21, + 0, 0, 0, 0, 0) + return rawdata + +_iconNames = { + 0 : 'ICON_LOGO', + 1 : 'ICON_Print_0', + 2 : 'ICON_Print_1', + 3 : 'ICON_Prepare_0', + 4 : 'ICON_Prepare_1', + 5 : 'ICON_Control_0', + 6 : 'ICON_Control_1', + 7 : 'ICON_Leveling_0', + 8 : 'ICON_Leveling_1', + 9 : 'ICON_HotendTemp', + 10 : 'ICON_BedTemp', + 11 : 'ICON_Speed', + 12 : 'ICON_Zoffset', + 13 : 'ICON_Back', + 14 : 'ICON_File', + 15 : 'ICON_PrintTime', + 16 : 'ICON_RemainTime', + 17 : 'ICON_Setup_0', + 18 : 'ICON_Setup_1', + 19 : 'ICON_Pause_0', + 20 : 'ICON_Pause_1', + 21 : 'ICON_Continue_0', + 22 : 'ICON_Continue_1', + 23 : 'ICON_Stop_0', + 24 : 'ICON_Stop_1', + 25 : 'ICON_Bar', + 26 : 'ICON_More', + 27 : 'ICON_Axis', + 28 : 'ICON_CloseMotor', + 29 : 'ICON_Homing', + 30 : 'ICON_SetHome', + 31 : 'ICON_PLAPreheat', + 32 : 'ICON_ABSPreheat', + 33 : 'ICON_Cool', + 34 : 'ICON_Language', + 35 : 'ICON_MoveX', + 36 : 'ICON_MoveY', + 37 : 'ICON_MoveZ', + 38 : 'ICON_Extruder', + # no 39 + 40 : 'ICON_Temperature', + 41 : 'ICON_Motion', + 42 : 'ICON_WriteEEPROM', + 43 : 'ICON_ReadEEPROM', + 44 : 'ICON_ResumeEEPROM', + 45 : 'ICON_Info', + 46 : 'ICON_SetEndTemp', + 47 : 'ICON_SetBedTemp', + 48 : 'ICON_FanSpeed', + 49 : 'ICON_SetPLAPreheat', + 50 : 'ICON_SetABSPreheat', + 51 : 'ICON_MaxSpeed', + 52 : 'ICON_MaxAccelerated', + 53 : 'ICON_MaxJerk', + 54 : 'ICON_Step', + 55 : 'ICON_PrintSize', + 56 : 'ICON_Version', + 57 : 'ICON_Contact', + 58 : 'ICON_StockConfiguraton', + 59 : 'ICON_MaxSpeedX', + 60 : 'ICON_MaxSpeedY', + 61 : 'ICON_MaxSpeedZ', + 62 : 'ICON_MaxSpeedE', + 63 : 'ICON_MaxAccX', + 64 : 'ICON_MaxAccY', + 65 : 'ICON_MaxAccZ', + 66 : 'ICON_MaxAccE', + 67 : 'ICON_MaxSpeedJerkX', + 68 : 'ICON_MaxSpeedJerkY', + 69 : 'ICON_MaxSpeedJerkZ', + 70 : 'ICON_MaxSpeedJerkE', + 71 : 'ICON_StepX', + 72 : 'ICON_StepY', + 73 : 'ICON_StepZ', + 74 : 'ICON_StepE', + 75 : 'ICON_Setspeed', + 76 : 'ICON_SetZOffset', + 77 : 'ICON_Rectangle', + 78 : 'ICON_BLTouch', + 79 : 'ICON_TempTooLow', + 80 : 'ICON_AutoLeveling', + 81 : 'ICON_TempTooHigh', + 82 : 'ICON_NoTips_C', + 83 : 'ICON_NoTips_E', + 84 : 'ICON_Continue_C', + 85 : 'ICON_Continue_E', + 86 : 'ICON_Cancel_C', + 87 : 'ICON_Cancel_E', + 88 : 'ICON_Confirm_C', + 89 : 'ICON_Confirm_E', + 90 : 'ICON_Info_0', + 91 : 'ICON_Info_1' + } diff --git a/buildroot/share/dwin/bin/LICENSE b/buildroot/share/dwin/bin/LICENSE new file mode 100644 index 0000000000..f288702d2f --- /dev/null +++ b/buildroot/share/dwin/bin/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/buildroot/share/dwin/bin/README.md b/buildroot/share/dwin/bin/README.md new file mode 100644 index 0000000000..9d513bc0c8 --- /dev/null +++ b/buildroot/share/dwin/bin/README.md @@ -0,0 +1,92 @@ +# DWIN Icon Tools + +Tools for processing `.ICO` files used by DWIN displays. + +## Introduction + +The DWIN LCDs that come with the Creality Ender 3 v2 and other 3D printers contain image and container files stored on them which are used to draw various the UI elements. + +Standard `.JPG` files can be installed for things like the boot screen, and `.ICO` files can contain several images within a structured file format. + +## DWIN Banks + +Each JPEG and ICO file starts with a number that tells DWIN which bank it should be stored in. Each numbered bank is 32K in size, so a single JPEG or ICO file can be up to 32kB before it starts to overwrite the next bank. For example, if the file loaded into bank 0 is over 32K, the next file should be numbered "2" so it loads into bank 2. The limit to the total size of all files installed on the display is usually 512KB, corresponding to 16 banks. All JPEG images, ICO containers, and fonts must fit into this space, so you may need to apply a lot of JPEG compression. + +## The Tools + +This folder includes two useful scripts, one to convert JPEG images into ICO files and another to extract JPEGs from ICO files. + +### splitIco.py + +The `splitIco.py` script reads an ICO file and extracts the component JPEG images, saving them in a new folder. Each icon is named by its index in the ICO, also using symbol names from Marlin's `dwin.h` header file for the display. + +### makeIco.py + +The `makeIco.py` script reads all the images in a folder and combines them into a single `.ICO` file. + +## Dependencies + +These tools are written in Python 3 using the [Pillow image library](https://pillow.readthedocs.io/en/latest/index.html). + +## Credits + +Created by Brent Burton [[@b-pub](https://github.com/b-pub)] + +## License + +These tools are provided under the GPL 3 license. See the `LICENSE` file for details. + +# Usage & Dependencies + +These tools must be run from a terminal with access to an installed Python 3 and the Pillow image library. + +Pillow is most easily installed with pip: + + python3 -m pip install pillow + +## Examples + +These tools process an `.ICO` file that you specify. The safest method is to create a folder and copy your `.ICO` file there. For example: + + $ mkdir hackicons + $ cp 9.ICO hackicons + $ cd hackicons + +The following explanations will refer back to this layout. + +### `splitIco.py` - Split the ICO archive + +If you want to edit the individual icons stored in an ICO file (or add more images) you'll first need to extract all the images from the archive using `splitIco.py`. + +**Usage:** `splitIco.py #.ICO foldername`. + +**Example:** + +In this example we're extracting the constituent JPEG files from `9.ICO` and storing them in a folder named `icons`. As each file is extracted the script reports its index number, byte offset, size, dimensions, and filename: + + $ cd buildroot/share/dwin + $ ./bin/splitIco.py 9.ICO icons-9 + Splitting 9.ICO into dir icons + Splitting Entry Data... + 00: offset: 0x001000 len: 0x10a2 width: 130 height: 17 + Wrote 4258 bytes to icons/000-ICON_LOGO.jpg + 01: offset: 0x0020a2 len: 0x0eac width: 110 height: 100 + Wrote 3756 bytes to icons/001-ICON_Print_0.jpg + 02: offset: 0x002f4e len: 0x0eaa width: 110 height: 100 + Wrote 3754 bytes to icons/002-ICON_Print_1.jpg + ... + 91: offset: 0x0345fc len: 0x0d89 width: 110 height: 100 + Wrote 3465 bytes to icons/091-ICON_Info_1.jpg + +Once the individual JPEG files have been saved they can be edited using common graphics applications like Photoshop. JPEG files are inherently lossy and will usually contain ugly artifacts, so cleanup may be needed before they are re-exported. Keep the limits of bank size in mind when exporting images and try to find the best balance between compressed size and image quality. + +### `makeIco.py` - Combine JPEGs into `ICO` archive + +After editing images you'll create a new `9.ICO` archive with `makeIco.py` like so: + + $ cd buildroot/share/dwin + $ ./bin/makeIco.py icons-3 3.ICO + Making .ico file '3.ICO' from contents of 'icons-3' + Scanning icon directory icons-3 + ...Scanned 16 icon files + Scanning done. 16 icons included. diff --git a/buildroot/share/dwin/bin/makeIco.py b/buildroot/share/dwin/bin/makeIco.py new file mode 100755 index 0000000000..274082acee --- /dev/null +++ b/buildroot/share/dwin/bin/makeIco.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +# +# Make a DWIN .ico file from a directory of JPEG icon files. +# +# Copyright (c) 2020 Brent Burton +# +# 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 . +#---------------------------------------------------------------- + +import os +import os.path +import argparse +import DWIN_ICO + +version = '2.0.7' + +#---------------- +if __name__ == '__main__': + try: + parser = argparse.ArgumentParser(description='Make .ico from JPEG files') + parser.add_argument('iconDir', type=str, nargs=1, + help='name of directory containing icon JPGs') + parser.add_argument('filename', type=str, nargs=1, + help='name of new .ico file to create') + args = parser.parse_args() + + filename = args.filename[0] + iconDir = args.iconDir[0] + + if os.path.isfile(filename): + raise RuntimeError("ICO file '%s' already exists." % (filename)) + + if not os.path.exists(iconDir): + raise RuntimeError("Icon directory '%s' doesn't exist." % (iconDir)) + + print("Making .ico file '%s' from contents of '%s'" % (filename, iconDir)) + ico = DWIN_ICO.DWIN_ICO_File() + ico.createFile(iconDir, filename) + + except Exception as e: + print('Error: ', e) + diff --git a/buildroot/share/dwin/bin/splitIco.py b/buildroot/share/dwin/bin/splitIco.py new file mode 100755 index 0000000000..ce6ba89749 --- /dev/null +++ b/buildroot/share/dwin/bin/splitIco.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +# +# Split a DWIN .ico file into separate images. +# +# Copyright (c) 2020 Brent Burton +# +# 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 . +#---------------------------------------------------------------- + +import os +import os.path +import argparse +import DWIN_ICO + +version = '2.0.7' + +#---------------- +if __name__ == '__main__': + try: + parser = argparse.ArgumentParser(description='Split .ico into JPEG files') + parser.add_argument('filename', type=str, nargs=1, + help='name of input .ico file to split') + parser.add_argument('outputDir', type=str, nargs=1, + help='name of output directory to create') + args = parser.parse_args() + + filename = args.filename[0] + outputDir = args.outputDir[0] + + if not os.path.isfile(filename): + raise RuntimeError("ICO file '%s' doesn't exist" % (filename)) + + if os.path.exists(outputDir): + raise RuntimeError("Output directory '%s' already exists." % (outputDir)) + + print('Splitting %s into dir %s' % (filename, outputDir)) + ico = DWIN_ICO.DWIN_ICO_File() + ico.splitFile(filename, outputDir) + + except Exception as e: + print('Error: ', e) diff --git a/buildroot/share/dwin/icons-2/000-ICON_BootLogo.jpg b/buildroot/share/dwin/icons-2/000-ICON_BootLogo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ca4d1cf55cc09425773afbbaa034dd44e023152 GIT binary patch literal 16062 zcmb8W1yo#3vnV$r~bME=?dH241*V}vT-K$quSJmz=>F%oiF#E6qc&RL}BoBD<J=j^KL;Z-&zo1TI3>Aw1ck-K z#27fF<)uXA`9;Nq|3UHu8yg$%1s)YXK9w-jD<ivjPR0$u_>KLfma0>DK3 z&Exu+la0fm0Avu+#^2_9U{t&Brlbt?%leN}pD@#!;@y8j|F^FH=Sr$`47BWnM5Hil zce%hWdm6{bdQGc|IyLC;5^C&B72o_7h!P>zKxVpO&>DiCUY>`laVnApI2L;K9Ke$9b=~B< z)nmHg<#{}u@=}Ul=JIvaiO@NBqsc9dyu5#lW}ccX2;S*L5eKVKcwWlyrD7jw zou~PU)C=0z2AOm6%-|Qq_Kmm|NY8^|hpGB!ozg8gZyACz1-F$*-S&&}Xo98{e5ElS z0E~ubp@I2__rJyofn72_7SbSmUAbU4BrvT_4M-yJJYeUEhV1v9i51r=*uZNXa#63IdJ@*(Cndyg$vD#WWD`iKj1}Ubz%@2t4GN3p~N!B2#5vz84AVfVO4du zy0WuQE=XoAi`=A>!P9YcxBSi&lf1w{#+;#&(3j3#LGB?%jnuZ)7WN&}GcGy>E6-X> zR+44u#kG~VDY&QU`{}{KtT{hMLW%`E-0BZiqz~D?xpk2Ho_oP>Ozl(6nP5qGJ=RVV zuFJSP-NVEQeU_;p%ig!Ep`=4rh1Joxd`G_+U;ZCQh{*_ob)9oCx*(AH2IxGkEyvLU85)9SRAIX;e12^^$sq#TkV2jG2R7abVBdL~$#bY~*J zp6q4aurZ>=D8mZ|FG2a?FjH;(FZT1P1wG$@=WmRv3~@ z&??ro+1(2Xf!K@VlZh-NSm0b6IN5X z``JjcG>X;q`73QXYQ{D$OY6Rf!fZ;?j4Ff`5Xh1X<<`u@f0h>gh}(Uu1F4R;g01!& z!aUy>%5(CKaE(ySq%sayw}lU!HWKI;mG-t`CmnKsaC+P0i;>v9+$3=}$Qk>SVDB8u zvD^LXwjpOq<&dkipbm;Mt5d6*H+*q#s^@Q1@6IXur~T4!eyI(`@)uk%ThPcccm4p# zt=_~GI?Nt?00>dqE~fS&jNbb`>qO?J74|g}N_)%oB@u3T%f3v}>9KzmUBE2I=aeKE zD_lYGjQOWCzCG6qy_7VHe*U(wpc?m%*eVDmZqw+EuyiS! zn0E!!W&g;$KQ^PsuUx~Q5 zxTg5;wf*;eIV}P3-mL0}1Pt!c;^Zp4||R zy!8?n{S-a?j;do)k(a)0vwv}+Ichs;#qoDRi9$;<_h4!(PrRX_U?=H8e!aH%SAL!| zw-p*j`(^!EW40J}bN$`*>W1oEKkn3I;tzEuc4dZ%Yt`OIckhA`x>?bk{v#20{XspA z`H64a6!_u5K@h;OI;B+Q6ApVj3qjob^X6d)^$RqxOt0i3t)D3;cx=G}y1iqyw$iPQrdVyjaURec#mWiu_>5r=4UeNqml|n0Vi& z&v(ov3_L$5gNRkU7=TMB{IjU~A3pYp1MDz0O=L?)Tk##nh_kN{o8Bd7deUY036)k3 zo76;cb>_0?-4f1XHD#Y7)%u9DABn%)oSz9rkJ;S7blKO{{xrr$pl^{?k@mvb0eWDl zb5xa1eT?;oPIL}A${(J)>_zqlyO*Ty27acoqb4P#2Nh2XG33|72bRp*x`)hd!8)c! z_$=;Qpmp`B;^lG$&vdRt6J)2G@Cwn{UoSptLk|(0PbCu`R@fz%Il4fdN^KVF8qQiJ z-E2#p-(>F@OQSW_CVqvVqKq`gIkQH%_o$>_f_1T!Y-&V@!TbiUj-IX(`cEd`PXA5S zN{ewb-7d6^DAJd6QnK5YMDs9lK1; zdU%yB?^fBz?;^e1*b`OQXEMl_x z{lrw!hmXNNb2IaeP9dssBBonmQ+{oOQUmmT*n+<`L zoQT);&sO`KI)&U{K2{1U9su^?$BtRiAKo5sHLo=nm+93L))$w`TH7m^11UOCp1j6o zMTOwzYWcPC<|ckiJ#4p?5wk*SVWBoz-8UWoZPgu6J+bnD!5*;czloEMM>Vl)B0GvLI3PjWX1s(^yaV18&Nn7Vur#}tY^+Z zK9=M@KU3JRYHfLeSC<;S4fJL;vu1L#0WnCMYb0{{Ztqr`nG%5<(1B$7oCY2KsB+QU z)@*WbG$zh(w?>)H^}iX`RaY7pNdEri>zB+w?F#$@T@YP1)seM=!S%QY!0dQhmHlq1 z&eB5OoO#|;>n1yUmQ04RGZ!D~g$nzNI1zp*w${8#W=SlMAsRNTZ5C#Pb}R|piEx2H zmsdmq1*)w^tvaaNoA}Wwr>@HjTMw5$f7d}Srf$FCg4#7z9f9z$>ZKYwDYk?ykeVcv z#7DfDr^zTUq{&E1@wZUc?2l_;e!XMYDU2r#B#Ov~J=+ilF5A~}{GIdp(&iD^|89?3 z&eNZ9i3-BiFfh4e?NxRt9Eyz9_-~R>?HH)3HDBbh`_bwB$lA{pJW>Qpt-R2ArpOd) zwT5Pln}U1?J$>YR;kqBb(wYq{Ht^yHfE}{f=;#%<@FDqGyjG^1m$S*Rzqe;wEV#=| zZ(OCJ{v%-7NFJb9kPCQwO zx|5^7yW{xf*Di5btwCznN*vg{5ZV8;-!g4RviZk^l!B__kjx7=en|0?Fti+KcTSi? z^bFy!lCZ!h=5j%iw#?qsPqh9vnhyX1labmI{%m{mfLqXw^2F

i&0@Yd4}Xw_5QkHo+o}$kY(k24a-pS8MoB02PXas8bdQnb4m_Dk=ZREZ{Z@ z`BS;O10w~Mg;2!2;{!Z%21YQ5?s!(#2Fa^ZsqRyWpoVcJDN}KF2!7Ni)aT5e^@p~} zh*lwxVeN__LI zjd^5qZtWYMqS>>rqVd*kNDwaN;SMhm$+_|$`3kw9c5)%lI{A1Q7|m+g1OSGv7Ug6+ z9;6u$vKItDrB`Pxb)zhYzpVFk^V=W+Po^1M*Fxlc624m&2H!?7l=9mP^RjAt_$6A> zkdr91ypQqHa50ior`wRKc;&hVH=b2%siHxTCbrQ<(cy$?v&ur3TsW3CCxUPs4;C4> zy)UzAnAOYXOafG{m8SwD#4e?;KThv!^{Zch8o^sAX?&j8I zx`cI|tUa>X`vYF)>D*erP%JmVm9#Wdvt~9itu-Y)3@eV-S_%MRV9nZgR@#__s+9vh z=6{GuOIKjlQ})5n;)^p@;Xn*S@hJDS3j;(=iI1)ptUG7dA2v0mq%Yi+>pxl`61rJg z!RVz=u+l*PduJ@HRcH*hRT;3=`?><+0@Vi`Con0zZw_QpIciU|AdIjF=AJ4LaZ~Hy z`E5o$f0~HA)R`$rUk#yCPJdfeFILS*;#uK+o0>pIW7S8(nkHBs9Bm$U8#||?<>#35 zCkzJznewJciMXZ)NuX0mv-t!I6JhG16fzDI>6Mdr*{;=WG6&U-chhpXtC(H zzBV^FTyNu!b(4c;FSg_#KAgjZR0eXA%&L7$>cUs_wE|B=NP-1sTn*y>>B^sP7E4Oc zctDX=x)?uE671I=U8@|oeXVuNwV_;55(GV<2t_KXGiMvC8Tox-3n3o7qgg{yDd*Is zdtAL-cyynsjCn?!B`#^VFJ`pyDUAPC$QLF0=Za)LBIngL;N&3XHao~zcPqTwx@Sco zvJcOg|C;xu@#kNpBLYsQDmPgr^IX<4&r~n3iTF`t)E=!1H4n*` z{CO`k?F=`{Kr5 zt65xe@pcacYsk_31A)Yz1onam_b1}XlDw>;#{Tvomnv6r=gdYuw7zr2Lmo-iwHgzC8Wz39Cg7SQgJ2!4wZSe;S z@_6C4rG;{W(nxzIM$xkLnf_+Z_@tt?>&;ZFkigm5?UwLb2t)4ogfepBet9;IoKgK< z0$uuCtP=wey-TlnDI`o)x~V3AG)6RrO~?+x%O!q{LcMVmalb5Q^7u}bGAzU+wi<_` zhPo{68cE8r6stPvI)tv@MYbEeo_10y$0c6@#W_q*vPjPxhdZwINVu?0D#fEo;dkrc zEE6kv$XqwBCzzVEs37$LKmv)ba$Chl&5P=mLrIqSjpU9JKca*s2gYvabR=riPwtQJ z>6i4T98t?kTymNvJCKlWvFSK`OtRYbdgUHfpBLU$CRVCNb6lyijIcKCL5htn!PnYl ztJ0p->v^% zFMey_UnGzIX8_ax8^He+!+!$28m%!B@iQf!PXY;3b<}n}V?*51E$T++uouqQQy$Q@ zM`jJj57JX!n9+Hd@LY&-zi6i%&~r>pPHmuTphXx5W& z;k3gkK@MD-cdKjSn@q4d=y<>EZlATa75myTm7<4&v&i&C*ec7TPg~@g8J)go+&Q9hP>FPqVmL?7D%d!RB6M-*7r-Ua zclR(i)K+zYiTUg@;4=82{en~a2R2NqPo|k)Fu2Yd+O=)e+$BzMi0I21f3&pc{Gr>} zPU9V(r@=a|3!%=CD%1n_6ig4Zs0|1`9W=GfyiYXQ#VW*bj4@maua{yw^N8$u?2A`+meYVqV_sNz}pS=fO zJODo4^NWL%nmAaB?Th0&(*`nMxh^mFlHo0Qu&D*Hj={_RLf|Bf&A@bT-xs^AN=_e6 z-|wn~XEpHH`_YbJ1nfV%s-U){mJ>DKImm5vT-W3%_v10q|8#GwtP54mlmAmj*Px+2 z{mz4UAKwo3I$=SbaLKxD}eBsN4PTGw`c+^FZ#V2LKfc2e}k>zn;I# zjS70be74=WXMU0x^tsJr>H*+VdFTEB@Zitif^d}A#o%Q()h!K>=_&#|K}bO~sr?mq zedDo;(CHZt(}~jW4IFc$tseuF&nt8VV=4EN3YIHqYx(%zzEwL@wcAo0eprrF-0&Jfd@boq^2=|OWNN9 zoQ*4Q{8wImJS9 z)^PELJ=J`(Fl@gr_u#d0*I4f1Fz5X8veXj`0kR}TOTbp1xKXn)_d*oOrfi*sCm6jZ z+PJlp3O+YZBw#X|-C>C+Orwv3W)gF8fhqQ(nI0mhm1^^Fj;EmLH+`$E&B+JvQw{qq zMPs8cYxmgIjGKi?jZ4A=zNJCvjRhgl(mf_BOpL)3`d5Zdt;=mg_>ei^D zll7~WZ88xVInRG5nW5T;A;K25noaDYpvgoByi0JPJPL4-7DMFTxdG1kl?6%aQ?J4=l}5 z0?}eVi+|^`L>?H9kFhq0*;q zacUG8p6a;zWBWrvy&UBjl^=&h`+@Nyfu}8Fhu?1M_l|H2BI`oHa-pzPj5_@jh;z() zA!qel5L;K1ZPE-U_eC6=i+sEnX=Akk!`n$U>tf*AHy48S*=&fXg7(z(BBq6Sr8_Cq zS0*Ye#!+BKnToNxByoEj-%g@?arU&;->O>3BA2Iq#w`lbyNHVL-T536 zWxivw5#vZ^H%vEcU4d!7v+C!40}WCV$r+f}*fW(YGlnqg;{Cx!?&ygm*4 zKK>WEWWhD+TqM7i3{4DmJ)K{zGxn#^Gcu+Go>#V!FNVZjqMxNpKLFf*pHm1*BphCQ ztejU~DYkW(3-3Mv>Syj7LmIPwpK1k&o(VW7^{pIx zLUQv48U}1GRPqzkjbOA=T1_@z0yLk`5^UP4I|7x(QaWMc8Ex*q^x$D3H!D`vQsjKp zGxz8W-Y%{W9Oo-#mlAmVSpnjw2>K2^f{&U& zk!L-%P&w%Cm8x@0puWd#CT@TiV?A010SF`O{A|Kd-cO&o=#a3bX>Z~mCpddVVfeN8 zmGjwwzvcmVNKPMsF$9$d{g*YQ#|JYx&C9=Xj0#v0 z47G2jBd5+?HMAuPir)3j3MHiyYSe@MN= zEvvR6ZdxqUkJqftO59wu^dRk~#Q;AuoFd*bD`sa4J1ER|A{7F+ZIC2llNeM~$-1L{C#NvO^_64cQBN1s1NrhF0D_aP z0YC9kBDn~gd4E}-`NQAa_f&1rQ!u^?tr7ob$5r&`or}!vuMk_V@>-W!wg-T0+l!yD zM;#RK$2~G7)Td2`R++jJH?8>f6AUcF}v^JZiHno02& zBBs15sW4qL-W)l3=IWQe(RMOwJoQ_i=)K(_sJyZ54Rwd#ggW!fWt#C;S~Dbix`LB- z((+GklY7My<&-kT#VJQmY<)_H60dhawDm5foAg}czq)196-}YDsDMG|eoGJGO}^DerbJ$l?z$j6ZxW;Jj1Z9%^$1vt5tWO29tZq0_?bzD>kDjyY;F0lF_ zQa)V4x@Hy(!D*xxLnEWL=yDMn?-nny?Uv}Xcn708gbr}ZkVRn%dK1=qY=fcmF{rhf zGV}od3ZhObbGKgV>O%)EJ*)>FYHQd!MEI z;o|t{2dtRx#-*v-*DD#jl=Djyv@$q5Q-j9lfAG;_X|y!PwQh>X!TVv&;v2P&7kU;_ zb7}=yb3vd*w!z{(yj43f%6rHq2R^1hy67NAkg5e#{OZ8`PvoF-1rxZ?C24p9@#(KY}(HX<2}|>Z(hO95b*y_^oXGlhh0` z_Z-wH#lEYSmTy+jI&mc@ZrCppBL|#_A3B<`>}OGsr(%L>W2Q(j22I?0;5orGX;{v6Q;b+2 zOh|XQd6i>1g!z)lxdMcZvsnAfna5kFbLH^nW$kVua)hhq_7ddkl`1j{`UT-?_J06e zyzkPn8D#0lz#zYX-$!vh0I=6@H$3W92BH=OlJ5^$+ugYkQ=6t(4}jw0>&+wU=6Kl= ztX_pe)4EwEJ6jqdDx477>rY>X+A`fe8Pg3;9k&(d19~)E zhsWcdmq4^*MHGrHvm!dI&E<%Ee*BiCGf_8BiLWMmvZ~r%Si*HHDPUZEikH&T((rNP zQQB0#miZg~xKtTOMa0?&?{73W_)1TGw1;bf20){@e|togE5`AR6_{trxp!}}6~!1= z^8l?e`APF*ZzK+f@;#7vcSUA%e4Fs0SBP=BU%@NpA`aZHlWaXE-kZmtY9;xBDh`sk ztnF@jT9wcAV$u-zFE z9=g5JPxO^{+VeP9STRSO+0M=YY)hX|JQoa7iLUo8BW>2SFu~6{8^u+1?!_N5yhxw) zzrUkw3-0<$j<{nz2Qxc|kvk#riLy;00mfF1VFE`O@GyDkL1;0jsZ<5IoAL*upm)BuCHbQUKlv z-PNnpJ5T5T<#rB0xHvRuX_^0u8(`_lS^Fz+7sq_uFH^QcT$`f);@8JknI9F|`CcT( z4$&&{7oA_rWQe|+;FTaKGPP?Ai(*52dvU(dwoGjW;X_%)8DVNBI)$x6);?JrIlb1) zxNky+&$*0_zTSXfaAFQ|I?)549ghb9?y}a^NCY$rfh5IcW0R>V`X39b=0MT1W%FrAHOyWl0@e=bZc1Lg%AuS~#3R{ETW*^7(GsvC*+!ia5{*im_oLW8R&pu;)mG{AS3BAaBe#cNy zd`DrrrVM(TdQvQ-zoy?ucwnaac<-cQBH0Fg}RK1Qbf(AMiUwc&P;t1qRUi zk+8wg!xiSgwMvwynOFvsFM@_@)mJX4%@XqGSh#%CU3lppW0zpj+r%4Zy(a#f$2jwS z_x&Vehyb(R>}AK!10ed*D*2IpGha^rPvw}?yN{4OT0G}u{b#aB89T1ZR0EmnL-XyBW}BE-8~VeguOLhXGu#^5bfnK5hGTMUJAI)$VVqY6TK_djSgy`sUMq zI!}+!{$QmS9U3)v|Gl%-dZxQpBFT*k;pMshQwaM!@yO`Cf>K|NZ3L66H7E`4a8(Fj*5 zXl0mmhItwN8Au-N0!c2YVo!dgPNl26ai4>pZz&HHVT~SGgzJgUgdd;7IoQ;YxhZu{ zC9SzVD>H4zZL7(tEq|-Op6Ctn<_%6QpEN&;t!IeR**f{L!A<*?T$R&BjLQCvXq!mp zlzvlMmhZRsJF~|LqV7Md`J$=0#&zXf99!zs)5+S8^G|n~WBcsO7S@U;6r6%iilr2{ zn|R3Y)?3^?4(%PhCMd~LT|PQcH)V`w$NfnY`w=7)9h3g_kIF7CRuKzh(f5{tE#DA-Nvg2z&M!Z>scrlcl~2( zjZVl04Y$%M_obq@sVjH_=UYmpTR-uBBAmJ7$Cq8x+&q1lfX)=ZiW3)NZMoh~($36& z-uQ&|9OdQ*KWWO|)V5l1;HIK^4(QmXct4*0-m{5X4#!}f<8ba#HinodRX6)o0|Z=5 z)fJxA57bpBaYl=MjiL{}aNA9(-#0#9fX%XRZCo|-tiLswL5U92I0O(JeD3iy*mP^T&8RwDTS@a=y zeYJ)aGG1f(J2*jJS$Pii02q)wp+T`o*hnPah}Y;Sm`mxqHR#IT{ar)zYF;$tv|U|k zB_+Q8STgSI!?&uOlSUQjwiqS;xbN0He;J^(nGt7NyjxjM;b6ZYqHttM)gQO}#JML7 zCV%#5r|XslyH8ze?-ir!jRMraWSV^SV}3ks!%P2Bw!Cqtwo5@9Sw_(eg0Bu9UX*zT zHfcrhw+34-_z$RwO+NrK&ou474ci{oa>^s*;gImUG$XrNTH?4xSC+Blm;q`vcPPJ* zn+$1lfKv+hxB^2Gj|484u+YAW@WG&6jECV&@h*S(fVg=PmCuLLqD5;*OTf99Hwm?} zTN!Q?ndhQR_p-kBaPT??mX}yXbbb*Fx$9Q*7o5!I+A?Kh4(j)2<7!+i$+(>f8K*Bs z92T2^R2@a)bgL6y){)TpeoN}|^6~-{5Xc$q_$|(JqOQ3sL==X8rzQBcwM<17iGH7U z>ZA#s>kgnWs)e&I`SYZU=ZWJ^kr<y$V+h>~NU(K?z%{EE#2N*kQW&~WKWIuEv zzwEA`>pcK$C8d)jUb@gS?gJ6Fv68X_%YVw=A{Q4PIXEwnODr7Ms<|jVkjPjZO}fA{ zdJ&+AnsDb^8Gu%fm+f>pV+A~){GFnwnbRyZrq`A$7=iK-MC#oPdne> z^%s4?w#fnko6#{dX&u}eax%Ipjn~E(K1Ol5@E;o$Gn6LScz%Qf7yLgPC-#yar4wb> z*QIvLVV(*vtFTWfX=_LoXZ{)OeLaieYVrx@f5>L-SLS{m;!znUG#(1W!%S8iU#l)U z5~rKb%z0WOpqwb2^Ylv+0~ZU%hoh7aCRm(m9Stv)P4Er1I9G2&($uunik2e)s5Bm*1rhGKk z>D(5(3bPI13TlZ_7?q?*{Z}p>lLjB3guW}`Lydsf@~wE2@S&if<%lD_ z&;5tO5^Z}BYK(2vISn<@*o^zE;WGxIx>j-QT~3@FgLZu|3k7|E(TcQQ)*8e2^=@pA zcRk>o@w}I)3GUU1Ehw4x zb@+OfT4yg3vwyEf!N&)uhXrIAxE(9_>3H6e>acp%vqhlya@9|oG&je=#fozB@H2ns z!$7&DGDK+f9~K?ntvp?JciPPPwg6*h5v%i9w085d-tPa}E?BtxcT_wWnp(ba?wN{t zoOZdpFG9@|3RQ7BPVXp<7-36ETbH7nPLfbApX0MIl6^~JM_3#m!Sul!A1CpPtFKx5 z(-kFu6Pz#TNG$_Q7l zi^ZO2ma0PeC$EE^dpNP%>H&xAp!!oXIiS+V)b%KKo~%{*T|*(O9+aHb!k;D{6pyph zB8AV(DU0I&k?xpGMa%H9Ee2y87Hj=xJyDFFMF9u`|M0J5nyP?(62B&UK~w!)y1D?2 z#W}=dC+DSQn!$JTe%{Hnjy0P>hZ6?(Hl$y0M^oHdCie2&Vbm5iT)pcl)!A7q@|g7y zr!KAVp09|eys}spb^#~m4zcp1N;{q0OkcA)XHf_+lkgxu@2iV=3oHBaC&t=QYt#LiaS;+OAO)Xo+&c(EN7;dMRo>NcyjfupF z&?ueWNQ^_7KcDKe4d7WL<=84FxDfYk!mU=l633J zQ<;pIAsKRQR9)6!LiG2S2um2x5MFlr)clXp`)FliOIo^ed z68e^(H!6nHKMe-q_}_+=7CYnw9V7uB0BFO+G**uRsHhKCG{!MoYV%V|Y3Jp;rM9^Y z-=6;v3$A+#TI0m#TPChgoHAySJC^4!tnKVr0lg}PTYXzbI%IQt-o5ySozY8sj5js9 zY}~{%Z$eRJr>kqs70qd`5`hsL0aC+w=0D{xsB7Eu(|}{Ywxgxmey=t6QHtlRqW0%BuadBAN%WvqU9+Sr+^Y}#}baML^u35}&T zl%%h}-TI`UT2f!bF^Kr?JZXarzsoG(Y|*h^w${^6tMoRnxk(o1$rV%&DZ9y5l?=(B zBpyji{3V{l5VZgtCHbWJQ%jxYl-HTVMruti7PXTfm@%@hQuXIsqM;qhr2CO;Ru+;C z#ZRJj6j)98ZWm?Hgs9uA9S{W-fcY_tE9AgLz35?D=*6;i;U?&Y=(p+Oq9Z7VZB%Tr`?3HZqkm6htbF3aD2gbcMzdFA)GMi@R-@p5KI! ziFCcj+sXbZaDm=xU-CPgaOva1a_PhQLr+yF$*lwMWw3UJKgWl2hU591 zuf6u}VuH$DHzvN%Ko|A4kB=RVe-x}&<#n*IwTxEzuHPX837Z-$_k<5Z|F6KR>USFq zrCsc)7T>;lCmJ3yy1m<%u4 z^F5eRi<4(X0#74tQZ4;sOQ%l}FjHe}yXFultEoD*r5O}Dk8tR1$z%9XOi!xHDy#I$ z`QqYvfNmJe{{FTbQPE#q5r$F*=R}VJR9y8gxpm?n#OcjY;R(ft`j?;c;~N`Lsnexa zhpp)PG!&F6ouuUe|3d)g7Vs?`7VhEOdAjJRR?s-5-Tnonj}O(HEWU3YtoNJLJ}D?v zDJr$ZAVc_1>l9nnzu;ug;6w}oZCq-3yT`apmE0_7gP<-fSVx$;4p#EVpIKUJZM}(G)(Lz$Q9*`rKSA?^X`UQa zCSmzWdFEPMavoIs!ppvmT`JV(THWuMrPX%2=x7RY2pFN%$LI>1C+nAB|bVbRy1Hr~0st620h^|M@==^r5$Bo(I&v{YD9} znrCqa+H;{Y>K0Z73UA^vCIip}&Bo58x zXS*HjVT(kktk=B$XvDWPX;@viJ8xe+-!Jp+HWKa2kwNMKz3P@2uDubMgcHb{k!U@`YHz+Z(VEKhUtDxp{{zdHhf`s}yDEZwfp_y%PgtxsY& zb75VU?GCXnZF{f(^KGx_1)SD@Njq*xWG85^>NYdoOXlx-M;HQ*Eoh;M4Gl39j#pC2v=<3e>4z$TO#dDLQ3H#b;{JO zuu!60LRX|{jqe^eMN<+l5Yfmz1uVgPEcqWxkU-48${1pqDrO^LZPGWr7A^+j+N3NP z7HU7-i?~f0`P;w~lYO)6)UCl-XOp{wkAFZYgZS2KnLOY!#f*)8mXYMhFDpy+KB;3y zbERxNOGBdBFx^#WIm#xTf2Sfmnqe}ctbWSv7oR=8?eG<5Q$J5hwnB1-Eycd`O?B6Y zAIZ&`ZHJP3c}A2#Ci8uGtT?ycOO>YF*AY?MwOKhMmbstX;qT?yJCraF{qsn}j_s1MNrfokexSsbjb7ErUz|x#5o0YEeN9sqBwOU#w%=pat_6P@ zVOn1Cs$?pB(vQEjQu{WtM7frhN##wKaC}j@6E}fs@>d4@C6~z`Ueu(d2(YfMe;$!m zO5GJHcZVq1+btsv8YiLs_a4CS?C(U0yn7w7U*i4BmZ?Mcq_3iq-hUFyN9YRJlUH!e zjJdD;UROIdk*KNJ_dJi!Hx=pt(}lMgCrYo~gE_{QMm)Tmbr)@r_E65h@LiYBrX)DN z8lYFPtW(>DTkk)^UjMgQ`d=%G5O_&Jijq1T#C4xlBqd+dLNSn48K3)8-Bg9i5YOuK zn_yAl8&cgMHc=$68mMr3H*!kT>_8A8LfLQ`zuT}<-jr60^c&-|ThJ`osS1ECCFUD_TqIoieglL>a!ZFo8Ri8l=73GQ+#`yM}wwrgy-rNp! zZ3LT>;W>DIbR3RJu`&efRrubp;V|XUM$X21Zhcbx^7@K=sqbjH#4sG}gh#+Oa=jL4 mr9H@3Bi3d}b4g=8!jS6Bt!bcGy0LLG`)&1q`z06;bN>%MBH)w& literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-2/001-ICON_OpenSourceFirmware.jpg b/buildroot/share/dwin/icons-2/001-ICON_OpenSourceFirmware.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2c43da314b1524e9448c77fa25fad845c365fbf GIT binary patch literal 3206 zcmbu4cRbXOAICrL%#55>vMwe0hO+lbHX$TiiHvMnk-de?rN2%7 zFN432FWLbJB|r~UfJq<#2topekX&>DYybcPfk}XWML|hU1tz-!x`cP>FX2A|Uk17q z896Bhn34oU#ln1zk%{3tziKC5{2;-r&kwXiy*L_xx#TQ0aIO)>_pcZalQU@%p$TDY~E z-!N3AZ==nau(%^`J z-r?)Y;>tW%d5P4WZ0;~tQCp6^#KMq+{_~slcvMczgm0|1NtU>>a8$=&iQ0t4Zwb?| z11NtIkJR3Cd-f)Hv#9`yL7;TB7dRZ3B8a7z+QCPZ&M=%8WNnDiz-g5-T*lGQkeq@- zUcE%~`%>Zj>xCnzcj>N&>pk`K2?0V&xKK`=>2r?VpKDW@E#Um;0>cvGTjf$U#nd}x zQ?pFo;d@+2k(GXIsd{25u_#7!&BP%*DM|<`5QizJ9!5y>tI&?d-~KYxO}awU@PRq{ z>h-Hvk32`I*vMRbCNN$$J93Mqh!S?QC7ggcK4G8bOI_JtjanTqpOo;tY_P3Ug zDBY@L>|W&z14K@c3~nO#O}N)^_`S3H9<(27ye`ET%QY?IpCgkStq#5qqoRcPL5w$K3l-O1;Wi z(v0FacVs*mXvV{i#Ed6>843w?9Zj7h7DTaa%crBUM9cit^5VVPcVT0++~(W0;a9j~ zC5>P>C2Yr@QfABhekSCGFExurA~gOhlSoxc#+}-A+J%Y@hI}1|e5WbS94n}Ng?4BZ z563*~1H9EjzG%?b?8OaGmHeM<6J93N2M~*YSsx zn4$<>b((xd!2wyBOhjwBf^P~LSx5`7HACi7AD{5t*C0RAKL0@LsOfL+3#YSl++bN> zy2+WwZK3k<8p^=T`H`t-L-?^FX!yL(3aAc4K<2)Iw(l>fEg^Dq1M5s}sowNInpg5S zHeAyj@8Z`$Hy}H$i~BhV*t1OXTR7$Sma+6=9!{2-1-iX&5rv3-$rm9yE@bgF+oZx@ zqfs1PlVP8h`)7!0BOG7u$3ss$?h2dCP8%fH&zR=mSMDYx-I&-A*M>y~?k?(SST3|m znxA;Y-Vn&$wh1lEY7VWIoOBj`edgNeiOd^2DE_IqD|r0NR@J%zjvI=e%{1EGHyaD? z;^+PrNdrS! zKO;nmU6Fbp`JsDY%q`jkhzO@!Hf`Xbin4UX8ObcS3qNGM&jmT|ud2Q=l*bgl=|PZ5 ztx4Zk2$EMJ^@Q%3%VzmMD|N=15gc2nUbxviP{n?;NxYS02m>+5zDTDMVsg4|^k@rG zPu;GL98X5rJ4_BPVBjhQ$-P^T&VP?Q> zX&L7+(=Qa|3u90MVcLq^^M5j1r7PGh@WDA5{1q04FM!*cO=OF`#9zL_MJ2EARBV5) zZd_1)!pNz{J4QLW<5dU4j7uN0_D%tCcN_L7Mg+OrCzPe+C+RvSZfg3K-G~oilv>G) z-4O8@1-uq%uBoRkncr&z3Ei5dXwPnf3|Z0+hU_QXvsi{ew6P&Awc*&bR~DbYM}oMb z?G?2y^TZglOpa|^%8hkrRQd*;rpE8+0&S-AMe}Z}TBB!IvWKj1VubkB*9+1e?@?)l z-g@jhLg$}|Clow3=k**St$Khb&)vT#LE+r+FpqKIm(aTp-+w3sV$7_UbH{6OKF7(# zc;Bth?X)ndQqI}U9Fv2i>{na1vjN}{s&hIk-!`1h>5uNHzbr7a@n~yq;fW|#0h4uV zJJ6s~r*L!8DFf{_KR3TEy&%$_L-U0)3zyOp3tK9)W**6}2zl>Sk2A#%0Zw0Y%;4DiAHUFmlNPiB#f+I=JIS5C{exPR8|V+I85sUNsnt>W1OGsd zrYqN3K9SiE`|j(>wMAImo=oSjh8B^i^Jwbzw$u~v@w4~4_zR$5ZB}SYA7(n=6V{ry zBlM8@`|*&5M6#}tmp!kk`8scwiEnuwNV}PkT1RcyMQ$oy`;r%qt?iUBte{!g&LK`= zPstzX?c#omra22=?T0?Vw?3+EKEP6pv^0z?HzAXXh-E6{W8C`|U7o0lE8NUADkR<- z*?tYH5qPi_zWg?rDosQxtjf_fW=CyQ{g1m18=z(|vTeYKp(8KbXN|gBh=@znR^`Sa zzWe%ib?RAzj5B{ijbw=;Aez4G9&q*!C2Jw1{M)k#g=N*%dGe{idYPhCu3 z6|m8sy_+lAYx>gH0{N*(46yW1?m)I#IRw`Hk>9Ur(^-~304Ku|x6txwqemP>!nyZh zD9EiMBNPWl`;B4bE&OZ`pJ7YxWt*PW&$ZSb*R2|S3a|>|#M({=c&Fx=A6)=QgQKCD zKQ2FR9?!C7veLtJ-%`Bvi3>QEiGIG?%I#=DdX_fG)#9&eIruy<8Sx`HZH+5o5nmd} zd6OVtc04O}`tjT)vWo#}J8fJN~Fn#41G&f;l9IMlw6F&CP=a``?D)H8%=o zrQ4suO{kW{h>zX3p304oiHS{VC&X{g((Go*9ee$11vB>z%W#VC~e1|cdd|INuM#l^&b09P90TL1t6 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-2/002-ICON_GitHub.jpg b/buildroot/share/dwin/icons-2/002-ICON_GitHub.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0be90fa9bd943b3b4e59a1f4c04bcc34ad5aa666 GIT binary patch literal 3399 zcmb7ES6Gvavi%d1&|?xpK$?^QTZ%#`Dm8RM4^==A1QetrRYZD`CcQ~hX;P#rf=Uqt zk!lECqy#|}P`dP!eeU<&`+V2TJgqfrW?trO@@yVJ=x7o&0T2iT*ii#Gn*r1S8Zh|Z zqyj=sC><0Efj}8(X<>9s3`|Un42+D-a1??Wj)XHZA}|Of3!0UcmFXNCI|j{;LbIa( zH3893dmvDHD3l(}%*c%Xf8(qJK+*wBKoboJ34oCx8YJkf8{h%}FbzNh0{#~e7>EW6 zfNANdtOx=CgF)1tsoVdL1O%oY07IexK1o^@ej-{0XU{62Dn-?DfT&K?v;Pk?5C9AX z!Kj=R5}>-!fT7f){jY%Pg9IRaC`lEfH&o6 zQf11(-{rkr(t)Sh%c(Pf?OG9M#b)Ljwy{dZN!SA${6LA%Qf21eCy#T5-v;%puLYWw zd^Qie7g?wKpr^lqX*F4VJKoj;d;B>bjac5L}P>fAn z%cJx`5`%x0X^Z=_WVS3qD#ewN5$IOskXTS*3Q&9-jWI8YuEZM=fE+LZSw$EUltRf9 z^EVkg7?6-s9Y{E~g8&gWlFTvHLx$&BjZWS@46rhA>bYKXDKB_@t?#arUuv;DK3{bc zqT5M;L=NvB5wb}A%f>36MBIHhB|EO%ypVm&;t~_T;q}S&=v2(2t;a**`C(dHHwzMpt@p zUw$|p@!-RAtag+t{ygV*>viclq1a9r(Q6_ollrt?a)=sQ#;p}*f>CM;Z=N?)PG>#? zv>x%m4`E|Z{4PRRu|aPnKcMb={{85b(4SE9w4*rl0ya%JvqJO8VUG9Eer2bufIQ(C zHr9Oeq8d#^i(qDfI!?6o9~;PnE3}CVEk4S;_sz!HL)29mbU3B1e!}w$jNc9@XK!g~ z*2XcIHmhrTnHS#=&#n zJ92>K5-04DYL{OGKcr->0*OyW_eBgh-v{+HkLG-S6QY>aHP%AF8R=~sy}JBvGuSv| zpCsUU6{xU5+N~f4oq(jooo6CjKjg$!)2pr+S{p3N?L6Ol znBh{LWw3FX5u;if?_Zx^ZPm~qs^K0aA%gJU>%1U-w0TR*yZ*+XBfsj`0}%{3y#>qF zUfUhavCj7dhf(;FrMN(8X+>Vw&dnmc@DK3)9SPG#*P?5jnL%?np-2^PCQTEVjvA)jjMDh4YY%gvF( zk*<6B)sc4nT*@0gcCr-A7xV7oG)+0r5<8G8b@}*Y z{qX0NJD#q-({}00tLM9!h54o4c@t-TRrPC`@d8876Vp_Cm?-OoF2Mq260AEVK?4J9 zKB2LXiZ{(-K6KD$eav(cLlpAzD$&oqJ~}(DQw1mE^9L(rJ-kJj^6(*Q?=g>2U0Po_HV!YQ8McH&?eh23xbV zLM>>I}G_&r;x}^a$q54y9aB7A`}&i*1cVDj&(bkk_!!SBycMJ&Jub#gpSTZKX8XMmw6y&%C*h&IcR*yM0` zH9*Tb@irUZZ9QA_VD>f5%OVRt3{~>e$(M+s%Yl`-YMx&U;?~Ubjxf%SIpUU@%Y+05{h>H&+ zWQBVB*Hl-U^@KmvkQY#PsB`x?lxGWjGA$Bsl-Bts>44Pg#%haJdk>?bF+1so7Hye6 zBZfoQTpX(3O}vlBEG2x+yE^8O`b|TulI=0Fdn0&9_E<5j=2GOT(Y*^q6h4f=@8JAP zBcOW&o#d9Y_zr23`MkmWJ zJ(_!H$#ZVJ@zOh`F#>+8B`6Y6Z!Whj@j51BlylHp^nEO8O z!?xG!q+1&cqL*ml&s)-^x2kJQCtdWhC2qX<;yL5*rOyS0`>fJR@*_WNOPchJ&D1M5 zt2^wOvQVC~6Y}(*Yr1cpOZ9cc5^&-jRHbVCDZHy3A!>ry*T5v;j@|Ap3jPVn#nUywm@W-1XLl zT;iw4_6T{p3*aYA()=h10{arRQ?JNmys7#ysdA&=)|w+-T>90}rb4!(`1!^D)`BA* zv98cEPwGv7iuSW z_jDKjn)Kfsnef^oo4!iZj!bVhAgf!|O{*fp031L=TYEouH|ya5+AjM_N*ae4N2N?T zKUe|Hd8~cJt>&{8p<)@eo}N4gt!dTC;6&B@k(#T~)U{ZV!iX7$O5R@@w_`0!3x+Ri zN5YV=S6XAt+~0YCPW;%swxg&IHx)*h30$}F7>fzhbp~ko0fc|yW_+BVzX$!AK9AMU zetXQdqB-{^GXnX=1+kU>%H1gK3pGc6zBWp8lMRyW!X6ni)7EdJU&HV4dQQCe&9+z( zeq~F}O&GrY{&9cI?Yi%jCr&(z1^efkoUg&p0O%pN*H;B?qGgJsy(jg~;c1r3VQPoi5HRuJ$R#@la&!iQPDmQIn!@J!n z6*gWG49Rw$9h1S{Mz|5)s6>?i(nfHu)cDH~liYibudRM@;(Dc*CPVl7E}VMI9yM(E z3%@z>^HdyFwj5w7_%uU_uU(x&(y^yVNWdv`dHjVfO;O(?-B- ze&m+o@V&W~qo1p-AyAD=$f^hV`;{U?Q}%rNB~k0)$+Q1h%RRa5L&n_sd?T+LrBJW8 zT^~4`^A=aI52+W^-ZD60Hf(){E=6h8wlBv$@i$7#Cru9%ctE~5xTD2?Ye)qA8sZu(mY_)>k||Uw6}MJP zTa%(qqEIP6OkfE04G5tj2u;Cb@s$4?t4{zT3cvvo2pAE76JZDm3sVd49rU1fdj(yKvpcCV7#_i`kK*BRr+t1+S^Z!FoUDmT$w~tHW`fT~~p~ z?-U=d=VHhr!pq}>Ti4!66I5aGyy)8{Olv3mPPtwOn1-;c-wB;u}fs{Wo;U^ChDm#znfmY02eUm%O^ zEjeZM4>J=z$r+Xiq)N5H6dRkTYxUZ;qVj3LxWu^FneoL`-@O6uA)nDWKAY)0P%?2r zBclp%Gl7FaZm-hDq0zV$Z|Y>}XhTcNY;)QHdcU)d&`$hlK`=+uY`SBVB@_x4WX-sE zk+o7&(f513Sxd`>$X%f8r0V0v=Alhzj9TXWuG7+UvV|(h;WW(5ue`)0LHZg`?>mX%A?V_V0v7hdm`BrLod;5nH_!Oix;qiuf<@TJg zp|>bZKiSwQNO*5neu~d`cvh0I)wO2b@quzdVttjBPVDphEBmX4*-IyTDp)peh;dTS z3I9U3m)}S=XeZtLKO^SvH_*kWE4LRy&Kpx9cW-AyLz>xE&yHa;^?lj5Wc|}x>>Pu;#PrP?pHqhQT--mdU2i` z=%z2oRuKDUGuP%NoKO^EI>Vm3SH^`1_`%)<(qH?>$9j1E)|IFDOs27*PtY-~nD6K> zot0ICiK5AkbV2XqDM3!ccx6ar>j5vn$5m5@70p~Lr^&u(-m(R+1+Q)i9Y0F zy+YHB6OCB;zjGS3v*=)SWzaX(v}}~@D2xhkI30WUbTt0Hxwzmq+lWXgNXqdp9Z_Yc z4xI?$`P>BZinR6RV*Gm+gBROLi#qK7k$I?kW{#s%x;Tw4*n4{4v0IX7Yn~5!b-$ar zxV$(aPv|*uso;y;G-`dm_%xTw46eI2#Squ_Y5_T^gPzgZYzeQstLXdd?imle^5p*8 zb1`M?{X+*P1Ic>p7=*$Q|04c0)I1-%e%(d=K;n*^dl0la>jN*wCDf$fIyovx!gq z`7^kFVPhET89!x$!il|j6rXg5Pa@_zq5Y`m-vhcargXn6S6>X{%x$Y8&B*$Hb>3*O zoWZsgNR~Kfx27+?`8iNFIQK^VSK8-Xtei;{d@T7YYeMui*yKf*`Ai8{zP}ahc=}3G zZ0VDk;$$l;m7D(17eGj^{FOAYOc52T)y%cK2QFreST1we*rw#SD*j@ literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-2/004-ICON_Copyright.jpg b/buildroot/share/dwin/icons-2/004-ICON_Copyright.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a3691d68c24479271fbdcdc55d742abe6f85117d GIT binary patch literal 1951 zcmbu4X*k=77RLXHC9zAW)*3@?BVsqCN^6N5LG6MWTP-EDl-NSr(Yjr%Rf$Te)?Q+% zed}0C`=BGLwHs>RGL($i8NDCwhkHNHdp@1_eb4WC>0cS3uYjgT(+K5D4%(8{l*j zF#W#$BYlVbBf$6L(+&Uz1$Y562M7j$VIU3|=(HP<0st@vzySjOD=uyhP6z;o@}8wC z!e=Q60C9rB0OUUn4o)x^HwXfQi--c}#N?rJ7ZsGWbla8v)t#kd$GyM_H z9(lTx|8n9>6-{w{4Q!pjuY{J`FSaGtEo?`xAuiYkmZPGmjjjjf3HlWck+hEARQka^ zV!W-3??#nH{>N-=;H6vvVoGeXeOC{OONDZXV+VDUizV|R$DS!QQ4MJEDUBTrxyp1w z(xE7)>ZR>BG2?go))sOF+OJjP*B3QiXeGXsj?9*!GSp`wjX}tVnA*y}hVtrFb2w4Tk&THXffxR$m5c>H8) z-H%{hq6T*Lx*Q{12>>bu=?`WTrlmS#?l3_eOz3=42hlsklN!$X*wV-xe^pEgz;Ab7y8lM97>Q zdk}Stn-R>(LA)v#apG4ENoJ)_TeRQiTJ0FlJy$T%wZQt2&3DsT3hvx};}yNKtRP!b z-UPbiA+p7GCA?1xEFq>VFJ4u%cdcN+eFZ4z06Bip#-%CNfjJ!-@QLa7w_s(Xo3K`h^ z#%7i6b291kxEf2o8?d_?c2enHuR9-F735%*U%)f1#c^#&KV?S7GKtYKnQS z)72Vlz-k>Ld6DQCt3Ots8*>|pXGCJue-N~}y>NX+#$g?a$?BU;f;^-Bs|LxVYB=8h!6i@+WuFR@;o7w?6$?4pJQGyyw_V)bdYL# zFDJgDoOOO(lVQrSsMMo>xVR>fs<*LBi_OCkjN)h1_a!T1jYf@TLe^?K8`g~{kB{r1 z?^O|5GrQ(cfjp{anm#NBJ@*ImBo#F=Zh$B)x>H}0eLc^lwpZeXi^7UMBhSA5X%^i5 zgkqo)DvYR#H*t4Q3cTmkJAr2;W~Gy_h12^N4#{c*ilgmc-tHb#I2G`_u}A$-FQq2i zFFoQ7qBJAZ~r&R+7gUUTj4@@H~$< zDzcR=s3;d&=0%LPD)N(~=NkCBr#}rC?)z|G;K#0Reogge{nj<0CFqYtz^8wDm>V4C zR?_F=Cht2qH-EcwNRVGDdB5{&lW@8}2fKSKXU+qcv56KVs8zW9qFxo?CA24rb2&z7 zsk1*%t~`$2+=d&kSlOp1I-CLqQ0%~UW(n#q>CoLMrEO;uNMo&z_||1E2VvDe;YxJ3 zqDYrY9e5%X_2fwCbo_7nH%s3D literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-3/000-ICON_LOGO_Marlin.jpg b/buildroot/share/dwin/icons-3/000-ICON_LOGO_Marlin.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3e81f2284f15fbeec1ab8cb8b3ab0bc182a5298 GIT binary patch literal 9089 zcmbuAWmFVe`0j^B1OZ_P>7ilh4wY_^p$4R+k&-SEP^5M8&%EGz)gKMU}%2vGcY_dlwC zP5ws){~mtm1dtN~xBwwISmXd~ax5HjtOqoJ0RX_l#rbF2|62q&_=JxDctp6^|Fkv9 z004X}Y;0VDM?|FmTY`m+gNuhx03alP`iO#(1xO<#34u<_>$>}VN=!@tMg`&&w)72e zXd0)cW#tf;()aL8s;O`6>iL(2_5ZT)@d*B5{p0xWDEj38w6OuW*f<0v#Q2Z@q2XX* z{~s0w3ng{hBOwV0^wSiO3dAZYZ|Rd*-!MK+!^SSG>+T(%^sTX*Q{2v@rb$oV%GTb? zH@U0l_+bG+jDz*hZE?r}F9B=9J{U<+6Fn}B@Vi7>Q5)113;0LdBCbK$q!(k=>tg;3 zpaNnU!Sj^I&W?}G`DxwZriQxB3T8ZW`PS)|K8)CcoYH6>ZFEACY1a#T1T{#vC$!C` z?$zY7)p9mkj9gfBa$F5R9XxuTO=~x3*c*8XZ!MXTe)a%hV+&nNB4PF$0ZZY>8%vk7 zv$_AW!HHAh8*qh03*!a$CshJ1Es^=H1N{j<0Y^|bJ1ndpQX(OL`1Qh=5_BkunR)c=^gYYj`UN5{(HbEz+HEd$8*(w75|m@~ z_glsD0N1?K*yzL92f*a@;{f{03VFI3a)5lc!i9}<>}2?xZ=# ze&yb?zyEG76Tn52Nj%S%@96}tC+X0Jn?FVp_wgV5?4`z%ODQ|K|`3O&Y=#G zhH<%LCxl@M#W3rJM20xI|9084B34+u)hXg#5F+$n);}eS_Ye!EqqD30u)L|#P@(LZ zQyK|F_Ek;&$=CANtgM!gaq+~cuAMtu)1aZxe}DK^@Mfj~IO3T~UJ65$M)kB#ruZhS zyvmw&npxi+Q2T1LK3zYu5%A~zl(YWus9Z}@74U+PGN`8x zTuLAW^2iGUi}eiG(&Az!kYm~jb0F!kA_xke@aaod*v!*ky(Z>P8c_m|^Os=SMce zp+~xl`0t${#|H%@Y)T?;DiwPJGm`M?_$@Bdpz$LmQLr&<5v}EG2`|xxi?jTpXEI%^ zU&(}K^bHISlL<$U@ELrz=#^~JHhO_07`!iV z{hfJ5z6H0lE$qhtn>HT5@%Q3PB6>f-8=FA|N}TTlodBGbNn=#__|aiIO9OfNd<$l7 zrX)$MMJ)Nv4E*DUl9JNOZ#|S5vSD%g2+^#v?4vfNdixp}-l48vyck5}q^ftw)QPQjS7rdjX zY#h(YcMOPGbb_G2|EO3b)EfoCfq#2`bMyu_tv8p`5!8|d22=~nZ5l})qlDxXwR5Iq z39&!T-c(L)NxZD?bK~U(O8y8K086e_C+nFGHupRGnEo1!oK;Wr@AWgKiR3nqU8{zG z5OMnO_q^c?R1W~&$r|?y;Jy!H*92VKL;Be8J6hCChv%sl8wi+cDMXAY`oqDAqv4c#2lUSg|TvK5?-G=Pw$_mIo^K zr`>eLD2Ul8g!_}RCBB%JC;_LX*0GxtEu>9r3B^wy@ViI#(*f0=Y8elQ@!(zx9VUQ2 zB@)?*VQ7VMxh)+fV$SMfi(X0es99Uf22+j5)}fJ8ypu$#z%!eljdbAY&l=C~h6}=7 z={le{#$vFagKyzwd8ySNLstSkOLZoX4R9=4Z5DQ_vwboy1(Y4t)cFNBLihfn4!_Vg zUfRR_P6sX*3F--~)gXx#G1==`vmf6Roo=ItbjXXn1`+<{=CQ=;G>whWdTVGP*-jyh z+>lTeNoIq|_K6U7&|v3?Dl{QmaPUWtziH#2>e^y`rCeSa$2G>s#|lw)`S|>Ta@VR- zv~Ma>0cg7^JJGb4Fh^MFiDM%}*4ixsji8e|blzu}W1DOPDeZn?i}F6!boAA%DQk=& z7^1h$RUk{|1+&Hukc@CI#DgVzK+3`;K%jBio64kj-IM!zGi6~KoZ9?tWcQA8Xn}Pu z64vZy3na7eS9xZ#fBxfP0Jd~FjMxb@ctEQcJ+`#rQ{{Y5@aTaTJ{V5Pq)X>HZYg-PAycB_w zbX#)ghxA8E_$er9n0+)0m09s<;tPZsBr(=E_zQR(I#|87&UyWMT@#65hIolB@4 z$%K-mTXwiGJhoRO`}>VKl|zEvmf_LyiU)J`Tc+~&kOPPMe76| zT|*U=VOH8(uF^tps;aPS_z>+%fE za3tcJS1E*qfjAP@@iZCz0I2IM+VcIfE=)@S8gd_$vU&djv|u{hm9$#bt`rZF8(OWh z;6%z$udideo2<$MG$Fb$wl7FDqwKvYR%lhAmPec7s zMX_Qjj~&mZjjlzI9I9W*P$2562o7!{YJ|6T=`5n;*KTjCR~^Bb6Hz?eV~cnmaNKg`cvtiQzwH7S8`fSxqoTdto716GFef>3 zYQBO|S<^U7>(9m4s$OWEMm?Lu4-A-f)4`s~G%%#r_L)!)+9fNEce>(`+Bz@P+W!mx zTj9WPpWqnd$@w{3@>$yG4DfA!r)43Zl8E&l+SyZIP^ixxbR{p3v66zQRaVku`1{{b z)sR6vM07_}aE+DGHJdh_WYDgZc%KWq|MJhdpD#(MG6e{W=9%oGn9xm z{>&wDYNtRybjLpB8uUyI@E26{O#jXKw8QIKEb*1}ptHs`B%?4<*ee7L!z$@GQ z8zX?#?9iOg$!Xe*HQpQz9~&P4n?ZN}tKLVRdNCL;zf5Hx#n@l^V`j70(TmS)T6E|b z@e&L+KE4V~o?yXz$X>-nfo!C-?0hXsn;JAvD~iL{D!m(QI!0^3eyb_P znS`iv=W7=WBDt(t)*fcaMnwLBYC5-6Z6a+TTs`$%@AN`@0g1`Up@-XO{bsRyL%B`m zq1CJ4nVhlHthDpot}cz=M9T1YL(nL?@rcDD({ggcED(KMq|8&3CVI(g&A?Ny1f>@S>JLPBoyowAQtPeXQF zesWE`|63frHG5dzOMToh?-Fqb@e`bJteCv!MQysG`qOVxg|3mkMd#JrJq&AJsJ|1o z+DxnRpMpl(4oQqgTXnTFwCku(PqRMrEXWQU9tQeza|;Q~ z&$z_~QDSu&iGduWeFlZ&U6p17cdzM9j92MlJFSMD`FP8=K5A|@*EY`98#iyd*^s<+ znrx4>d3b`GYKbA$FtVp?%mpOE`sXxNp($qu4d67h8YiKJ8MQRVOYR=U_`)=7dP%`{ zNMu?XgHo;5c3rQCjRsFMB$PT9e_kRRr*&5bpKj2LhU?~0hW&_9joi@S%)yBZOi{g8 z#vY_>_zpCVMT-jr&d7IjNkT+~ynbM}DQ{k7Ed<$=yEbSKbeCBUHz6`X^g7(-4jx3; zKb*E_)FYl3iyEJV&iIk6r*M)HUxK9|a!Dzd_n&Gf686rPL^x_wsqntM#Uv=v^E&z$ zL)p~x6M@6DYdLu+4KxjgGr>7P9cwVZlD49*TmHAl%lCton;JG@YYcXM`|*pfwNl>3 zmUO}QQ%DzeV8UZ19|zE8%=T~1v9U@ST=IDkQq2*C8t-s>?Y6{Ts}&$nAxxH6d=(r6w>Oj#Eum)^X+D%<0+9(}kaSA`hj-q5v}3Q2-LTWC4) z$T)8iV=9CbX(4(jPk*bufGO@3koM{`JvHU6QI-+vwuSG^FiT_<-W>PErE+*Z6w->_bTKyuo=BDrklH z@d>YHkiC4jIpVgm_IuyguQ$D;ga-i)nq6&>T316|nxsZ4qqdma67}M|Fm8FIz-!2JwHYjaxk-maVLn{?}K()Sh*zGZHWEOqrG##}Y69l>+ z_rFG_T1V2LZCzqXrfqn;X2eX_TV)3&j4@HF&ZWje30x8CLhRZRJSw`@z&nh?u$8&- zn6cd2X#8U~nvC5VJ|~WWa7~FSQgzvRSnS7R92DhK8 zax0r4Gjd01lBY1q==JUDzeEO^424P29N9_YKAF&0VyP@ZoD>+B4$k9OKf)Cs^Dob9 z8^4jlt{m9$E><+>c7D701UOUKeE^SB>r*62qItynE<-pq79>@{x)8bPE)`Ug8t(`r zdQ|y%YkXmA>hu@Gh#wPAoy@>DH8;jflHZSE1f@%>H6vCHrhNzm>q{wmk`_}$2_v)f zkn2mbD>+xvSTw=mSlnu`&(-`F8wv)IAz_|@SOBLI%eMaxUj|^^ZuH(&s ztk+(sh!P5Q(jRWc_kV@%x3M1p#ipni&u#6#C-b0#EuN%HTM*DJJOCPx9{_T{?khp} zXRmjTaaf`rR|C_oz4PMEEJP1 zVS|Dvs2AeN)CEq-+sgVYu>qyJe-tkF_0ucn-^jgTrB*PeaHAfWIqZ!SQQxZw`|OxH z;cUua&LzVwk7?8vw}iW9A?zySMd+<5x8s%94KwcLsnXdh1f4TbRBv}YY(i=(YuYf* ztTu6!=_vX~F7FG$?z0Ph^rdJoV^H(YBl*GQsn*c=m$}U5e7CIPLgWG(z^S*~TcBWFJXyy24FuXZ~tht#LbKYla&a70O7n;aaYC ztme56ay9&C23_VD9nzwLvPEy-IyZWAQh4(!^P?`f^%qUUpTp9*A=3j7gYtO1`i$A% zRj*vWDnr8y|CBLU=Tm7&;lC$WUU*5qwa}JLxA;d>mgA+Fuf+w*KAa8RLX72yeCPH6 zz!^6LemOd~&!_9v%{P#Vn2X;#8nCxtKpnjg0RHF~&no5AiqICUw4(MErt;S6D?NIo z2%44@1I6}E?3U&k3uZ)nJc=DG#a3iLWi%C$adqapLVqwd&iHCS^-HZ>v`rtAyJIxI zn+t~xS{b&LCkci^7vc{|paSp6@yo+hw)^&Pf*Yo`s!-l{+nR1A#AH-oqd*5#E()|W z;H*3cij4a?{v9ZY(^L98>|$5@ECLzi!2A95_UIc^tH|+YT=4Ek>gxiLHC+$eV`I;2 zPo%||(S*CHdld--D-*Ns8Ey1T6_Ev}P*!EuiaF~Ny;6?M1#rv0%5(;HrBvY1I9tD{w?!1O1POFY)qSk*@Ob^}%4*<8r(Q!NEDgb-r2@(f zvk5KsZ?-IGMlk}&51W*CfzIoGf_rC4h<^gDNY~$7%=!2 z+8P|ygFh+OmenF(Ys4hI?ax(fta(hs;-#pnBCN^Yn_^Tr(~{@?-M zZZYq0hy%KB1f5x4-^#bs+C}zs$`C2A^qFsmbxPt}CWn>#1&w|cr-KRoc)rBSJ+EaO z#@OU;>2;A~tP2aP{O(}@jgL$5Fd&9;@-VB|bEiB_+0ue@KABx;11*_m?rTv~CF?z1 z3&JWZ#+~)BRjP78I&yO`5IX2MYtJ?-dOV^7{_y<6nuES&+t&L!xgTdM;#_%7CCqEN zMMos1Y)Es;!Mip0rtfLBZjmBU1EES8P*+VsK5__x)_1ba(y^+ZRCJf-jllcVU$M9ut3+(CIf$5twg9NSgnle&i@F&)gdm zJzHnAizRT|J+W~2`gP{8{wikXgzfc-mCZnF9ZDmeHe*_ltArLOsU^}*RIF6<|KU!pa zVjP(!be2iJS|`}Uz(rmK{%ws5d7ZN6zCos$B*EsF{q7w^e|>q@T&>Ox@l$iBb}rS# z=BH1Obqn(dSc@a+;610aM=k=W^*LcJAESj&&TXMJAx%t2dq`qBSfiji;*vy9wEG=; zRhE*eqH3cN|;g{!3q@;wxotRup=0c*Wt1wd0B^1 zPdlEtM<1EO`5+nrCnjtD;6j*nEL=!s+n`{2gYMaE%aI2{O!_!JX2Ih&TrE?83N=fq z%NhGAL*wpqK94)eo_y@#`R02k#!XL1g_5$t?q(nSll;$RaH_9VywK6RGR=;7S8T z6vHWsjfv$-G~YIOS(*o8v*ry5rU#pMn0}~r&Q`H=`(&1~DgEb&_}!~4!n#`NBtqRe zR;&^y6RGdc4mLCns9=~X=j#`uhR$LwLn-H9bH`!AcRxSdV%kztKPc8QOm2e|IC%N3 zddZ3<6NM?2h!}cFSbyyuy%mm*CJtqpS=3nAn^737sm%=Ah))()%$nhjIWKpV+M5vr z25=^E5{c1X=H*vJyndCn(r}T0x1t!v#8&FS8r?E_+&7)Isd6PXG;R<$?H42%zPwIE zTVwiBQM##rUnC(`O!?XK<)hWZlX7M zlenhRl~cdnd8FkCGRS=A=GdSPSRL2oZU(wI0Gh|c0BMz8?^#hv*)?O!W{%&z+cXXo z1MuFuH{BQ_0S|l)^k=pNO5b@uRRz+vgSLR1oUwjiRDG8PaSuI z(XkctQ@({JbxhfaH907R(Dy_v{kFmW=eUihgKs@@$;L3`Tf+;6l&3C6l_6X+P2P)LjTN|JCev2kGt-hwh`z=r90Pf5fUZS3`=$avAamacs7y`7S?DhNb z0a6)IrMxx6cy>g00+=FGy3q|M{qSNTPc90#{}^|wS8=v`45NBG(5dy>-XwQ-Um zkST<%ebKr?Du7lr0EA3!G1LjclR^Uk^k7Yftt;FxP#tM+Q^!kVK6D_g^}s>|XsKpb zKx7YPO+;j@i%M;39U*3BK*VaGMFqE8 z|4oB3n=V&|5}`s!*=36Nq}q zdZZPdfdM2&$-tbfoW-Nc>4i&C%wIj>?m^Scv!ZO)Quo5)GNn%+Xn6xA z0|?a@>Cc=(_0x7zEW!s_zgPkxoeW>n{s0}+PQwuhW@Y@`d^~|gO~zt`sPqb1p0l4- z4cZ`}>d6xkwP6ofV`fBPQxEnZ{Ry#h@XaZax{o2AH91Z9Xs*8qVIN2+UM35z0(XCy F|6j_;6t@5X literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-3/001-ICON_HotendOff.jpg b/buildroot/share/dwin/icons-3/001-ICON_HotendOff.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08e18413ec0f46015131c1a92cc5726826f9459a GIT binary patch literal 3140 zcmbu5XIGPn7KPssx}pROU5bP-1OoyJ2pUv+7ZRHEjzo%5q$>)7R4I|rL8S!(gf3N- zUX@N5gb@U(GL(d#%f0u*{D9f#(^-3;XRmc=Q?z-2T}MM(0|0>l!0v1S+6$INzX+I~fe}Q<#0)?}nOw-2BqWqx$NB;paG6D2p24=c5Q}(P841nlC zV1S9`>@{blV9*%}V1jUna9)CPi^^c^aU;xJJXc_1CP{BcX=LF1SuY&~3;|Stztb0O z?tfcpD?iuUt(7yX1fB!M z>vDfItQeOKG)|CN2*%;!=HC5$6Fs^->O1Q`oMJL?9hCCaRsAx(*;dQGz}7iYGJzNx zdg+PB)yBd44-oH3(@2dN#CXL8zF+2=(GOnPnaUzqFCG$t(5Dj1wuh{dG$87y(8yDf zlgUIHaOM5UWzV)RQ6L(Svi$7GqwRFoCvn_tBw$D`BR5;VOD=BNY6~GW`p8jb;+gw{ zjosnB+?hJL-P7tg8qn5zXt1c#_?QMPVxGM(QJMY{9*|2#Jr(M@Sw4wBRguEefCl{O zWyjz~;=uax?|z%c^h`+$xV09&i;m$hRF<>z*!LGO5M*tX_=9NlmBAqnFgfL_2yR zsfX(miNZs(n+lKQDf~Tal<&)Y2JpRKx&04%7eD&@A&f^|No;993lKyu8qnuOQMn?? z01)S5zvqUsqfFM5T0?dXMb~%OH-|fX)?T2KNsvMSW)**=2cr~2D&EZ~K`kX&BVPdL zvsA6h2(s%v_05jf0m=stHjP>^$d}}To>;ap<_p|n^P%%PT6Q1QVuYPu!FA|@lR9k& z_oc;u;5^_s;y^u`=>CZ}-;lysXd`*z1jFYu@~~uldi|n~{d0e9=**XSMH*lgS#2!E z*yQ7-YV_^|GWgTUk&VsHxL`!gCEZxCS3v(dPob!Vev+pjDUaXG*<#ukFY?Xu;UFm~ zg^+oDV{l;OP>_?kH(|gU z6)|E|<-&EoX6p{5r~ML;az#f?C)6QCZMgeE_DRff@HuQ4nM`g7R8r=`MDqqqE}{J< zk=L9+$QyZ)-Y#Hq8G2Pgmy6P4tdm2C#{!a_%}W}ckAz}(rXJQyy}m8Te2shv-ToD^ z_w5fJk#)xs2J=d_Holi0RSu1^C;6V+zh3#f&1I8^30Ve0Io;$0p#%3c=@tikZGO;? zIbZhZbYXQYtHXo_TAXu@!-1U&4;IU8DZ=8Zu7Q_)#G8a>J*>(QUdmCKQSr&E7RV;= zJW&00w`uh#30;WxMG~uir@_1F{pOW}Z|XmCtc^EN#J@sX_e-TmiPRc)l4kMr{p%6# zYqeM0jvHG2ob7I>?isx!+)*GDD*ULb7J3-Yv9(Ta63FG0-%3GPHrGy>XGM@4=|9^x z?2B;j?n3+FmN@%-6{illwfYQO1K zPE4ihDl(QrH$;i@t)|+nIQYBEv({TJ(ST>kK1%vFw`6Mj6cpd<>WEmEt4m$J-h1N$ zbAP<7RjAHF)VKQud@#}E-U0ct4UZ`WBy?>#*x40b)?giEv70eISx$;hlo8bGDWasO zo~N7V;%PGcva|n`Esv1+G3=CDB)-UZD6Py*QK-Y3g&tAN(J~xirN$E~bOrR48QVT& z@nfzP+{8A?IjhhDJIUG+?r;^S-IIw7!tllVbQ#=5HGj~1?yES!)|awc-m`Zt23gP5 zAWR)q#%Ar6HD+f})?`f_O2=KAG_GiSsxlCq?yAN0TvK}ohr=D0;3%b{_qm3aD2mMs z#)&YT@=a=~Kq^DbQ+B`gyhUaMh7$X-56n8kg=+6Y^kis2sF&rcKvZ{5D-F09QRHW6 zaF;@C;&E@pDGerk>-A#a9pBVdO;KLqRdD;323uE2u!<~b^+_T6?=%E~Km>@W(I zI>NWCokl+!q*weNCT7Ffl*lW~p<5Gc|A)?fo~uBHr>sYuqcsiiJp4ZRtv)HN9LIRi z6Yci#{2RtQ_=7}Tr4}n3u3`5o3?34Y%gJY>-o5?NR517QOu6Z{-)gqB!g~A8oDPJ=t^GPI1uSu+$$wiF(hN5ky!q@t$edTDHuf8C9nnrwUE#o4-VZLasWh_8O*z~cvg}YpFREWj< z!uV`;p(^lnvqJWQfWEdf`3`V+{M7NH;ok}?HJ*_3W|v+oO1(Tcj{IQHNtN_HmR{+| zZNuTgYHy`-B!>5k@R2J5e zh+RQuflLA?C_9HBuM&Hapl*Vg<7CFqR*a-%%Y&tTryvsa>F;ICD;B;{DoX=_D}Byq z+4_bf8b6?g8G@uFefpX$rI)(8?NVl)*~J{O=Gv}VRleCX(2*L#QQV#D6)pWR*%{M$ zYSh;>=RYa9G1wo1t%v6HWyOA^tJXg`u+Ujw^v<&jzt`W67#iDuz9Y*)cTVGt<1ZRu z<3DV|ky&AxR#AO&p|S-7|Wlpsg>g!+vGN7gKBlzT)pMuKfO@fnj0J6U00y2 zrWhsiGx%1HyGH37-F&Vq8Ca7F6RlXas%OO?7w5ma$j63|GaWkwU7>C;Wxc?@9tw2W4m{1T*5NP{40@T2TIw7DJ7$~ zcc^VG;KBXN6LtA3{*wW_P8N#UlX;kldYgtJPg&vOfy8Wc7;l%u_^DV+jkW~TIazlD zbVs`EJ`G5iPKq3=uih#*qbqXTHZAG;7*tGdN}_u3CB#uH+e}ro3IQG@uysY0HL+;& zwvT7;R{ZHhTxdQKUvA{k@nk(tU*37)$#7@h9^&mDO!`C@wc>5y&TCRmkxw5?kNQlm zoGKz#Cr<>c4HU$5-#U^_L022fi6N1&zx?G4wNTTn{T|n>>;5d1QGg%0u4T7M+uBpI zX5_7AxCEWLZ+Gco&3zW*<8CI)N*p9hr03-Nx{VAJS*j=%1YMU9^CO^(ag#&~Rvv}| d=KC>Yl|0expz!FEq>0=mL82eZpvaas{T~1yp}+tD literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-3/002-ICON_HotendOn.jpg b/buildroot/share/dwin/icons-3/002-ICON_HotendOn.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b501bd6d99517b552879f664d4afd9a9ef249cc GIT binary patch literal 3000 zcmbu9dpy&N8^^!fTxL>@NDRj%hbZROh=W{;*|yKMj*3a9|u5D**y!$A-@XtxWH1pqJ@0s{Ue7*te9SVVBoR6n?9 zg25mNL~!q(UxEmL1wlf>P(WPbkO&MeDUHn-R7CET%7Flo02uNw3?L{36@kFO0>XRt z@x77%kibI!6#YX2ge9PG@k5f*B8nK-r^LY_DWv)C7_e_|BQP8S2TTE*{H&$Q13ssm z+7WVe?8t?M+{_+&?7Qhz)M1`C*|%1gW__kBN!6aA%1A>=i1si{=^km23ZfkSib5|8{2S>MDUK;4u+p2_j>k5pvUK- z;S=erThwxa0Z!dY7+;S^<|vVH=SrJ}5cCBxtTFaauFzQ2ooX8m^yi%NLsb`~R)ofm zdz%t7I&TC8pF4LyMO~7_?dYdISBYRn$fTTTQWs_xoxAM_b$n~;lV|)>Ka{g#tMxs4 z;>V}eh##91t>iO5z;(F1I9HNZT+r zmECgK5IOMWWa}d8zCzf#WwdE&OV+dr=}zE0`8{6NYkX~cQPEt$XyRoI)!nHyVxdhQ zdDJ{iqbRR*RXwp$KpFhlH)-_$7UYxC_>Svo#Jqwy5x%E& z{T=VI{Thb*Jxo$kEyhUBx14<|Vp`*%&o|N|S&|6j-uca=o7@=!@8rqCVbUGc zh8py@_?`20ZcfkJ(DCg8Z;%WX0`m{kzSKEI41DfjZf7E_cR=OYVF=~rn^8=oZpyjX zoLCHjZf$+|5|7sOqK46@1|@mepZy4jBA?z#o-=2<<+^jxF0PSUu0`mMmG3Xq-!)5o z4j+o^!=6wLNBCBI%wa%CEAfLCDi1(Xj%~Bo&UiFV+Vkgy!wO8k{m>L7g=dtz)eoc& z#i(ttYxl!YIwBu+lW3d$r18WQwOC)Xq^$Hpa(~&0OvcJK*WKa52QJ5}wrZ!a>+3OQ z2aoH_k0f%Bif%eFrjlfF`J?Ksmuw24CaW;9Zc8{LrhGVO;FN-+#Z^fkJ(31~6%%zF zA!gq+?^Taaoi#_*-_%mmFj}jAGLRVlF<%N=Q>-#9#b0KkcBZB}iH)~jo2*ag&*MoL z_6FDM)#=uXq8WMJmm^wA`nt4W)+8FYq`&&Ci_jG5urO~i_iXfTO0t`pp-R)&k!uQ{ zg9`aA`YU8P_XK?2+Q7ALpNaYibW(L$Ib)Tfj0 z=2$J&m4z?DV@89<%ul2B;^b?|&Viq5urlma*kOa5D6Qi~BIhr-H>!>Wz{-TLs}++Q z11L?M$I4pr&&q3rV^>^~SANEPIpDdGkPb}8Vs?Qy^h54CS5N9)#1|(i?<)}&OuH3r zD7i%IZBBY?=KRBlnh-qQ!DUdWjrF}95qk8K>*?oHq(tj4+PW^DuFwGq+|+D$NyPTR zBsTm_MUos+lsF&c@h{!0agBsh{@nk}A|OXfiz)mkl}~W+7ut3U=8XtAs(0TrpJiy# z=6(z}j3gW2VOkj2?ANUa4IHy3+T{r~m}5bdhkiJvwoJFsRPBRP($hc99Hk2hTVQ0W zHX=%IQJys(mv(a`PWe{tYbv{juG}1ULS@i1N>cEapJ$+1m)S$K6)t5MqoR3J%F0Z1 z*3jDW>C$_>EfZ09>QLQ)v_6rB!{*pYcISl+6LyGsPfFhsW{D+tG+%97vUILI)0~EP zA`uY<(ul~=rK#SPSMw8Pp#_&tnRNcR+m&5bCmYhfAUntD>2Y-c7svT;6xnM(hQ z10m$f>$52{_QBGR#@@xP-H{f#Dj<$$YH~9=UVnneP&l7FGwD~ie%i@ljhKZE?+3Hv zor2~@7uU17GJ!?s6q40SF(c>l3kG45SMS^L>| zRKpG=cHrxwk*EiR(wvRcY~#K$y(iTWbsB;hfnbK(8xoeEZTTm&jHlGP=a1aQ3wT%8 ziW-3QDs1b)$Hpj>XuID%i3CT4NQ~FH2%5Vj5{u zNHNS(5nCn@{rBUw%;rmgjrX>fvCS<0QcYEXiz#W|bM2jc$kxRt7kLw`GUqVoNA%x{ z25z*8&LW4JoBd!r4!-@btlX->8h^Ez%EbMKZr7zLwUF2Tm>%ALwmyx2>u#Ywip6$U z&3g4A%558`((od3^XR=kr*BLVKdPR^m=@uDOZ0rkA6@Uuoju?4iTdkt<*{9aW(#GW%ljAIOFW` zQs3Z;+`|n$nw03abe50WA(yotmiWG@EU-Dt#VBkaM(6b5@>m{qPF17E8G`|AShnl|j z#D2)Emde*gYlid~iY&UH4N?F@zxCkdvh241!qwE3;O(uyFu!mr5eas@dv`Kikm;k_ z;^wkMnW=8g6mp)o6=86szRh1;Rxn@8oT?x{>{e4FQpWgSOUu{${-@r@mGMo8li!+K z3Q19(Wgia>p)E?zc>75$O73H0uhl4L(-0k6^hp}uU-7Lf{z_2(@ajVc+v0n*FL)PO zPpBR57OH9j>AfzltciDlgZVYu#3bKN3dsReE^XXvcU$oO_qF?9r-_4qTCHEpsvo&d z)pVg&g>d~^Xf5$q2Q#`>KNG5QX>RCe4YfGn!exc5>3(E?bC`78M~)ODI&|-O=RM(h z4ZUw}3F9RgEEOQWKh-VAuowD1f8i5nUyU#}4s#wjGQ@P)na}kwFn^Yl^XpS+iJru= z+o|nV2V`Wm9HU%uUXFO7bxsp=v@z_e)QXy=S-d-cR(X2wf{{s{kSzH3!&KvYcRvH_;P{)D)7z=AMW(d}BPsJdM# zQq`ura*=ar| literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-3/003-ICON_BedOff.jpg b/buildroot/share/dwin/icons-3/003-ICON_BedOff.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db9b546b3303407c834c974c99f2780ed4086817 GIT binary patch literal 1798 zcmbu4YgCen7KXnM5YW`XQ9LA?3YtpVQJUj~WtkVmG{OsL+Br2|%1lZVopP)cFL|6K z5zO&cnaWbrwD5-JI3r%uQZ(m5s07C!-K&Tq< z2dRTFI7AJB+@>1uK>+|9go3bbs)v3T2!X=X;0OST)=}5B_5VT-gEjHv3vLY!kLs%c zoXQ8P{onjMfdC;Y0*X{kzeKB+K_L)0Lj4bMfGQ8I^M$U74A2R&0xViJ8RyuwbbN~3txhB&PqG&2rKJjxc zM62g|5&xRJH)}xp3cKIulzr#Y9JI?MSx_Ue);7O$g5Ja4sn;F#E|PgJ>^WzeKnnjp zzQsT6gtkNc)tE#2uCC3K?XmgITaA5Fx<$U&%7y-@`l8H7iCT+~M6g4#n@u$+BN)Qb zyX}y(1a@%2k=*ujB3`zYFF{@520n0!xRvns-H-a*bw3)b*~$djY}1nFR@i1Tjb|Mf(UJ7T zu^+E{%ephaPR61N*iH2xvtFtl6SnSyZ{v2}EG@@*Rg?9ozIt@MY`R|7v6oi761%e{ z6=6CSdFcg!E3T95UUXHrF~n?$yX?JP@A(ea}dNq}(ar=D{o0 z7O$PIpU0GM9Fe#QCthcrNF(Fha;7s^Js3PEjl*f)`D~3NH@@PNr314%cTL8LtcQV5 z{(EDpb+C54H0;%zRQn5!i!*b6kg9k(`W$LyaLnc^FKN8HcD4T0(bG-OIO(0o%{#i=TNs3o zrw1KMEMq4#qcS`b9Z3T}OS15}lH7*|KD3%8UHOy9k&zP1T@&inop0j91HSIa@IUXy z)EtXC&@m@iIwTUE-*9GzxpW%z|PCZk4hhbA_UJ$o>)ae0Kj%q^uMT+E%1qxnT7pC zzI4)h0tn0mKK0+ElU!yNRyGK5iWkZ!$uE^AAdS$swHq3iF|c7w0$eAxOb{>x&;@oF z0A1|Nc@N{zD+cRBC6vs1PQ9T#_oSfEqSGT6MR!+v{UVR`LSl`*T~CLNcX-(Z)c_x* zWafI+UKf*{yjZ9mcVw2{z*4{@zwS&b}^w~Dh=9Lw&b<%pC6UXYj05aw6!9P)}GO2`j ziON$JJnl~JT>ogqgE)Afz7%QNe^Dmt-J9V?2}bO}wIkCd+1Wi@7i*1uZ)D2&-y}u? z-F)w;gV9nZ27ru-F_RQR#>iOvR9sikc_ab?5$!vA*`r0EBsaQv=ArgfHk1gWu^IahvcG&=#91xiW>p@|fQJB^kg^xJL)7MfzJ+`&`l*)P` z(!kFh0(zv+)n{Q9ZJ=i)b6Ex{WniOZV54o8ZexF%TY38FL^}!ZX^c%Afe2 zi%8w)F+@VXg!1pwzH6Zk-!HZ^fWL7wF-{9@L0{glDeEN}f0p#5U^Kx>X>H=$?WaRZJqK zJH<4`DL7@40o(y0<=oOIS+J=sksaAS{>#*1I8`*On1x97XUl+yYAuh`8|x52Uy&kf z);F@Y$UI9mWb)M%1jKbTFZ~?fUiOfG%xhsKbhG(x-KNq^aI=_ogD$FbU;oa%QG%;q zi162;=n4L3*Ha}ZoKL8x=;-+a7LGN(>WKqNg?WBqZ8N?mzM?o&P#XQWcW{}#NOj2C zF5QeGc=T*Q6as8noehE?e< zdUx-j1S93sKDIvvYrSOj6NF7$D%ryv`z}4&@6ak!A&y*MUS3#lJ|}YH(DvF(Hs^l5 z{oxxXe6=3@N=BIM37+k)7y50&tc#9?gKRwHCqYZ^%O@7Qy*g5wEMR^|K8J6{dZh(k zv8ust8yuIp8Z(nG6iAx4K?}L*w+1>D>->YPCVp7j*6u%itJ}S6U62g#VF0q>gZ@VE zO>N zTy?MZ^0D{cb5LL^SCb~czUQiX5?U>`r|g4BMn#@jtZTVt#ScBtRpy7;sPy0gC*Q=7 zE?WUk_;dWnOQ}Mj0u2|R`HE{^V+DkMzc&?UG=1N~7CjWA@C;z0uOs5TO^=4)T9{)C z*_|&jKDsQ4eE!QG%-Y){e7kx7neCbE)S7wiS+5_^!yvQ9pErLOSdP}sfH;CyS3JB- zoY$4h#d||85(1qsHJaY0)J?NCgAs`@Hfy68fVMWPI4^2+|L)A)(6yP;)r|uMxBDMG zgMv+Ol5eYWc0KaeQn2yLxV6#VsfhS#*2Wq9Yf=RgH!AnGF-x>RgiM=$g>CXyOPVqj z!QnY^odzqC9w{Wj@6$zI#MpTl1EA&b75j6no0;hw!aRd{{BN>JbODcVE% zh|x&DavSgU8;rHChlQzSg4fIbG~ZNA)$=<@5PU6}eYiT(SoLT5=BR_-!* z)x_e?j897QO7hp)E2Ca5L%L;ws|pA2gg5ZVO6Qb$e-%2HK_D=SU23*K{uH=64)JKR$c7gP-;|r zXY8EQ=NutBytGoKHL(!ZRkTo_zrW!@LRwRy^16Ur3N3gS6S z$49v^;V`bX0)_9mZ5{(0r%R@qad&9P zHzs#eg!}s+$L?*^CQp49Gqh}WY&|2mbx)Omo!u6PB@akXFXMC_s!0laR>h8^T!SWC z=tg;>rpoe5%vS~IlTc2#T~PVTYO>h}RBK$X<{9q+ooVlRxhr`c=j|zFyW}^18M#ZC zE_hyB%tX9!(aRejls758g6iR!rg5Q~UNU~W-yG_a3gESYNIKn(C)cW0&Yw1ZSN6w9 z+fQ@zqpMY(kd`GB0d0<$A8Con)%cq za(Lr~vh!kF|7dQytlVyEz3pGN9Oa)fS)tD)awt}t=q5u+w()OPuLjq{F1_Du-8>z z;=-G62`@h^IX z-8xtq2dPGr<&afak`m?^Z|Xwfr?sqV_?<1@Olog~-W!0D=ZX#FISVqSRjeIk5SD-V zu0P-8pw#9R5G|(oeYm&(Asc$!=XID|^?#G0=>K!(f&V#?FAiJW!6JoP_7Mr+^u5)W zjCi*^0OoLkVpN|d-gd?}MWk{relgUh9@VXb(5ei4jHHG~aLYb1*CqToT$)=txw_(8 zy5>-&t#MCL1|WXRY=7*>*6ZX$Y=SNBk9~dcELwtnclPJnG;|D)r~e#VbI@&eI{DJ7 zHt6U92C$~Kd*<->>@ezhvTeEQC=6ZUdc5ItxYyRO9JX~#j<99`gO67(G5{?4m&5Vf zOQV$$A>`wS=&4^i_ZfgwTWQ47`(GIm^;L9v27p%Qo%~##P4IEIN!5t%GrTT0DwRs;K@}3T#^9L zzoY*Ne@Xr)g1?h5y8uiy02zP`IgklJ#snm10$%n2xB&oi;NSjVP}9)T0f6M!u7Vz57tgEq zkrT>79#4fkvK4X*a@wcoG;NZ*8nayiI9HpdT~W+KKd~p|UaM&~{B}WNW&V0tQhD-< zyJRCbW#%-fmq(TQYYmuLGd~ug>6|1S!xQgTo|hzq1CI6>L70BpqvsAVeC+w3Gc`PK6TJ7!kk^5bU6S+}1G91Wti~SM+toFpIVA3uDk1b!jWuKxsE&*)kzh9YuJOk{?nC=Mk z<=F@mgPUk6HdhL{v2+n7mw<;*Yl2-&6@O;+moYvLcf0V zTDgLK+XufwZNGQsn~Ux2sl|H3JoMqTdTHB6#i80AOvUc!v`u2IK8b@oHD6)%pg8Fw z*Ju%P*geIuUA2XC899JU-LTQ&c1b!rOJzSasj`@eq>OIDJFeNT^}rHF*=P+7Bg~jY z*6CMPd#wcfAxUq#a9HQq{hF3dTnD$=@TNs%N`7=P9A*nFaHsoF+8lvfphj z3SgL(7$d|At@`m5JVR!syXq=8URNod^y)G^ #xj?eKleLL%@8FK1aOXF{3m#?&D zGEHgXYHB=3)0|qOeeC~lFMXls&1+mEuGtywjrPw@S<{~G>dPbq8s#+8o#%*)OS?Ew ziIq^3FD8pn$Bs9AXjP3Y{33}peMcIa$eUmL0kUHY!xuk4lxtgZg}!Tb8_lW6j%FExuDHmGQe-=-{4nGa^O+(PhT zSZf~V@-k3*4aP#_Wwp#@?fL~_Emc<6rob8N-yug5f|IRBnlIIrd*4s=y_|M?CCW@j z93nDKC-Kw8-VZY;D4DJE1y6&U4(3HUl3Or+Rz3IRGY&nKF99t>Tju$QqKrG*iIwK4 zjv|CX7tsRA)5s-}isFks@_M9n!?K%2s>Ejc6k;c!sMTj>H!g6l_{f0LdvS zO=wG>_DFaLY34+4ldd87_glx{drocUSy_Gaot}d4^Oxby&H}m$aLzu9VcZZhskJ$} z`^lYBGMxl*qsq-<_qjh!(g>g3LGGF{Si6)~G;@8o1ZCfBHtY6p--|4+Ah}X1>QkJ- zK%D$rwde%{OhM@DZp*3NBm7Z;;0VWHY|NX!Dmw;g8+A1aTH%(UvqK&YEmlMAPD2tn zu&*Y17T+%ng&0bP@$@v-Ma98?syD4~i6f9@osABT@#3`nDdJCGm}nk+P5B)X!`iS1W@K&i_I2R|QUgq2?c(lvNA zycw#-DE}l|;R#GB>GkZri@Zh^Ii7~CF?G(rXpr=MZh}Y=<|R(}fYBB^!bFQF-E9(6 zm7NJN97jLF^H~uk+6B5*>Yi;+mG3LP9;idb><4Z~Tg~99>%ZauEK`hdV{dO3TZkLKa`j>-PYOVp z*}Mc1D9!FFd7CHBJp&8dH-dnw`a|#;x7C-NrhUXp6E+woFyE-&U0{!kQX&ma;E4>% zgOJE)O+2CN&)$c*SzOPv8vpc_SQ&8v6<6>ntv1P@DZxH|miy1+iTWLwEmavWg5}^F zVR4Gq#_U*F+Qc=%Z({uPpN`2vex*j!`nDIwp9h#J1SR$`LlkI(4P9eS#=(mB16CfS}GEH1&~em-#?EEktrz%VJ?x z6#28{*M?tkCP(FF_PnK*lZOPK5h$VYNU&qbkYeKTpdTC^rPP1Tv8#a`;b7jQ@0h4> zJDe1I;*GVS#9S&L&Jo>o^7e$3>c}EgZVm4#t7Z= zxz7HX{mjyf-Uob`Y!XOmIjk4E=luX^-!ex zqu(@nX`C6M89{DU0lKD>&lCo})HI?4WMUr=_SRdK|A|zrjKju;_wsTb3vLe%@iNeN zIebAy^7_#$c6L(v3mb|H=fT$>&)pKK5*3Q0Pae}VD|d%?)CJc@1MdVBF;HcH6!2P- zHw;U}bACGH`CWPmcpLO^q4rxNnre9D#U6W3s6avu=KNzxXRQy(4>f%)J;%Zm#XVTa z_C$NcL4Z(ASJhOK8FXLd_|?|EyUO!&Fb67ZX8EU?$^u~vdJ8P;Q}JKz;7XW07s#3g z_#Jjm`GyM9pqm0<0))J~(5V)eit4}b2q_{KXgHXMsSmnW52g2o9A-^$QV+Wjb0 zh4npQ7dW}3v?s&u><7H(6C~5_=%P`3IRd*K718;5J2RQslfOpE+Zfl+r; zm#K^3&5r{~r`vQ&Y+XbC8-woqG7-p&(e$6auwZjK^ObH!g~Wo{N}2T$TVpc>ni9Xv zndRx3;+~xDtGc3!Coc$AA)XwheUN!<1O?2aDXT0yUvly?Vbm<9A^!+Kjqj9pxh zj%}>D6c#nvHAF>1LUt&>SlN$|0?v9k?!ZCb(0az1la1WI0X;g^)}N?S5tY=N(UIvN z!TB&$ghjNPCSM#V?z4b6{ky#@d4J^1?bL*8m&nfWt_MLxu_)*RiTF)L*O{(s>oWJ3 zZwl7Nkw=<)GwbJcLJzUop0katxk^{Bov6gM<<}Yqbl(dpD{dPT87~Q@_t6{s?!^dp z%DkHz_DS8Z58gJO%kt?PI0M~E(lS@jF7?@YMWC_|Mb`N|5(KSo^89)IcK^C5=K5%_>?&v+0?tyEs@mF=+7T+K6r`@#)A=So% zk^o&2U*6o>BDgv!xy9^3Z{Hm$!BA?eRfl#%tk&D>>ipKJ=S(e?XGcw9ZP>)!E49Vc z8^`{Bhl)m!W7=pwGpjA6{Z-p{ON2m+ziK;)Z(M*r6p*IOYN`Id_Cst~J6k$BHd7U2 z*%O)kNi7J@Y-phPXG19kCl(j~Y4zRm5yl=;_Cr%Y+9`_&p^0;MroHBBrTctp&ZNG6 zR`;pi5UY%r#%+j(-vT?`+IV4rM8YbZcO0qMmg;#hBp>zIHmJ!bqq`R!b|{fL2Ne_p z=W4Yytkc7-qHq#eS;!5UMOvq|o9-Yaw^|?mrp>K1 zvDomf#gkRSG-p(iVp?^u+4M;kzMx@F2Ws_U3AWz7=y6rqiu~mCfC`ELB|9A0o7pIs z#c$iS(niDGN!iv)s`BMqlbg2xmJ-A6UK0-asc`x2< z*wO>fgzlj{D#htqQ7~Jo(3C7{iZ|z`KW94ww_b}~N1sib{4|KGw!XI3q>q9CwUF{= zZpi>t==EqPqg+I6iXr+l)?1K^B*`$2^x<6NMI2_LcQblsIhijX@i%**=vKWPkM+}#_sg5b$`hwAXx!q-DEM_KIwOK1Cm_`8 z%_gPYxsla})|fH0d%mPzGU&%#1f0ukE697X4)Kcfc&_E!YCkSqLC{*C5BeauaZUrR z@LaljE@3)ww9rYYKF*Z6F-GP1Ygz>CrSIN~&#=;B0e^uAyTSY^Ot) zWcXj(*)*y@8~4|CehWIVyt189ufiFJiiFypzUhHG@9R>mUDagIm5jL`HsVS3z(^lR zo_w-mtA~D_O76?x?*`py;mK9C=$pE!GHXa8i;x;DM)QM1#po%>9&Onr|NRnRehF{{ zv7kcqj&C`i^aKT@Nf#ph=v26*5zkeqR9-~c*X?@;HXy?JqD&Jj;Bsa($B4IB9rcvl zJqY2PR3tx+hrVtW)pB!_Q2N-9@PkFqcMg-MBpuZ9XZjF|bzfnt+byzC`}OVi#BRc# zP7v=pEjCZ2E&qvkqwcw1EnLcZF5(i9sN0@SH>;kaHohEM(cfR?tkbx$uYdP_{g(fk zzweE{MX}}m?8c9wVlAAdwVqYp2X_BP=!^ccRaZ-$AL?ja)gUc&c-)&An#A;o<96xV zNnYAelk-t585fH&6u=z=$qZ3Zp)qFN%{ZAg-BMhhfGEwq|KL^aB&~Lkg&h+a*8IY= zw^EfH4tsWWC;DCYTEyeTv$Bcrir2Z+BxO#jxZd0f8|Eg%|L313=*Yc3%XKr3ulmhI V?letUL>Ln%^9Akx$ol2X{{a*uH8B7H literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-3/006-ICON_Fan1.jpg b/buildroot/share/dwin/icons-3/006-ICON_Fan1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8111a3db74854ff5412d5f436b400bd81981e1bd GIT binary patch literal 4933 zcmbuC_fr#0*M>tc0*`1wr3a8v(OtU= zid?@sUHycNlAPjdyAl-{IRzy(4J|8xnT3r`;08O0U+!ND*%jj|$A2l*v{W>70E&N8 zfSIoVWE7O-5!7m#7ol+~aG$#DphhyVtPD-<&YGvF>@p9J{3 zMJS%V`G?2vYtD)H4?p@Res3{}1)bz`abo1CMiSuGhACHzgxP26l0w(EM~)X_xa>hZ z5MLwcqi&NEH_Mmt8ugpkKUy0hZ>-H}g?%p=rDnr9H#Nl{+wH!}0n=VViVyB4@Kzl| zV1vr8j4F1)IA)v1j`ByGNpgB&^qyhiRrM5_Rh(p9_5_PU1m})PB?Jj-& zq#ieTf_cAvq#51!V$@3PAD$7{$`ZoYxf$K;dq~1xPSs&}Gwv^v?Lp%+vG=pKmwSr` zdhdq`;A}HQ-OPs1>0xlaE7Ei!xG-+FfOg}I-y9EbfI%VQVwp!?%u}kz_*};6ozflR zo$1x}&la~A-q_^Y?_PG&Rag)i!rXe}IW{O}3FdVQJL+&#AVykpDQ@;wR<##j0YjSc z5X$_9lXH_VU=Trl@55m)i(1awgr%>TP#t>dX}1r2AP>I8Ge{#Qvz>4(|1GYZ@WMm0 z-nU5a``b@Kl-lqLHLglO+hWtQ0`y;rog_K@frxGU?x4JQs&1pw^-to%Q%zYp%sLYD zy1nNS2O4iEV6BcMKzCC11j>*nP+w&(ac|smbnn{J8$0Ig+Vl0szQtH_d7a=AR?{%^ z_EFB9(CIGi34fDUa;mj>>aHzcYz+3%eJ%gY#JE^%VZR*C*Ut&_3&v^px|lXOUxIB9 z-I<3CFnct>_U*>0M~iu~^nbz#XpWi%d4(rfVADS)fw|V-$v!>|bvF2?Tl0=lUWtto zfV$Y0TJzvzoPcI_auxs_LTXlIW1Lmh68vi&uepc$!$33^&D0mTDH6avD|8#M}@la-Vmue#SUajOZ z$E!!=-@0{z3YE3dPnLfmk97-##_2O7$;-66W-j|!7D9rliio;0e{t#eQo@*wJ4H8$KtA;z=5>U^2r9!!Q|a)(qR;#L9CAUb#lD73cb$=C_TL za&KJ@tQZ$OD#d-47v%38OlKu~SG0Gj_HR@$Sao38%D*~?aT819tsf_eUeD5vn-p&k z@{+^tFWdg~85$H%){Rz@Cb09le>bYS35r{}-_dIN_x9MIDl_T33(!GgrsLy{q`*FI zb}$i@b*5Z}xdt$`|UtT3b#%9q!Ow{3gJN9h$>->bnm|r++-cqBZ z1k4aH5OfiOjCiW7eL2x@7HNq#`OYR7T{qlm-;QE7mPUlDr>gbpt{HpY2$?Q1T_9gz zRh9I?ubI~y*37yl`HBz^?+2x$Lo<&MRLWlXw!!zaGi3MShKVmHE)gBd&(tA>LN|&Z z+H5BHmR3Hoq&rtWd9ITRrh+(%YWHwsd);)BwM0zN;B z&1=;2Qs3=*)CqmzD1IKfv03HOEZf>D)3XF`H7o7in;y|hm&#epXH@c?1E+ezK0?>OyBdd7M0N>ENm#H(+}A5e9)pL zN7V`ZZRKu!km)D(6NfWV22e{>N-K{s$RPPV-+>Xuav!Oa_R{qy0PjF;ZjAiS>GXrO z2ax7<{cQXF-&+l*4Xh%Ome?86veWcA?tS_G56hVUr#-F}Jp3vF4Q7&c0)Ulu2I>|rRM z0-xst`N|$hvsKwW@ZW&ote$A>O;*R^ z<4{~}5$^=rKX&6ZyX&GQ8S<5OjmYllDul<5gKhB0HVY*7onZfhzPT`AZ|2%_xO6mRn%j8)u zuzgYO-9|PgsnA2)TYhRS8qR|G__LhtF{b)nmwmgi0I!S511_U${34BtmKIF}N_8aUodU;M&VP};zp{X>X>L=@3D_ZigCV#D&uhrzxJDY( zuji|P&@&$x7~7uQmh$jf9VlRdWqGC3zqoW!|otq*5(=n;H;ulG5V94$*3qBEziRQL7> z5Ed9l$1-IW zU-StwlrRbuQ581VDqC?O+!lVpg5hSZus~++DD?DGV_OY#Sl~~Fn zj@8}aQ^`32w<$1hp+}H@1nmZq1W-F1ltOkG^&UJ$`rLTYycLSdC=&D?m8VSZIl@2- z8Qo5NZ?SxI9w&f*hxyfta&qYS$=zy*@}V*p{G!ZO6-c00&~b<~R@>FP7R!R#Mo!q2 zE$A4!$aSvmCpa#%H99s?4JvhqPRG7WaBh5umgjC&*A~@cc;ltx_S#tYZ5GaLtbulm z*P&~9B}6Mbc#JkECN1TGvRBjqB*}Toe_yfee;ORqzz(3N;Sn4nxph_+^O2UGTSz(vsW5#h1w&JM zrdnGYbEQAv^YArF;;f2u>En%4Qg-xZ(ej5w76nkns}uMBCVyCH(gn|54W}&9G}+ZN z=eiF>ll|ZYsbd#QVMC6m1?CAR&?OU_xt z%)dXT$Lwaw{Ql0)buPHbF>tdq5k^Z1ZJgKz9)``g0LhunP&-NY8&pF5Vu@ytv%_Ux z3Jh&AcCIHls}+l}(|A>XnNE>-W#}m{^)x%!Rhkd=C)!%^j?F3)Oz5R+bXLLUOu%K- zdM>V~F+0WeSXWrov6(5fJnk*f$AX?RsP7m<9mxofbRYo)nw-iFM21gA{8QABEsfc) z9}IuWTdc=pTNgsWh`M{xkKLhf&5}uqir3hw zhJa}XWA2xxQ@qy#!5Ybl*6O3-&0W_%aLZY%2zc!FfP~8Np1Y@LNwStzdk zdRofNR#Axn1DCMxkUyJEiy=?`g1)GNN>ENPA0AW1uj`-4q5|2%xA}ZdCcun)fjk$R z5A=R};9=){(S^?ZZ|f=y*%o@e#lWKAtD1t<3Y*>7y6lahGnh)B^$Jg%h_Ez$XxXtb z`A|ELQ!2zynf_=c64w@m$kmDM{7WhSL2raIP^1WLd*~J+(h>mczucV5TkX{v{zdl( z_}!5HZI4@sNzB99L5k|avzymVXKt72rs1}?;d5Oojv*q;l!IqA;Y!LSI6I>t@}jDg z+0*`7jO_X6po4qCal#2zXYNM?oeP*+K;I|I4j!(JfY+nT7ZisjnORq%BV1h@o3jhHgQ+YY6E^dZ?kL8v)5-0L1|T2_*&) zQC@tWwVprlp8MsVwa?x6%U)}*eeTxoz5vM7mDQ91SXfv9>-z(^Lje^3b^ovWNAmw7 z`1km3001Ne2m^$1uz&z;AQlb~>uv-<4*+1}+@pa16#)@G;R9?u;(L&X41k4;1Hi(; z#m4zBet*Hk$08u4AOcbW$f?;V*=ae%?k5?r0NDR{{>K8qC%_{F;NW5r-J|^XA7W!; z;oP@)|DCy?#l^!15|C2>C|L=q*hECBLG1DhVzzhd01}*gG9V5RAP4w$2l(Sue*syP zX7}*n?0Y9sP&T{e=D{kIHUiNS$5nN)O5Jg)O7SsqCftxZTAk2jBC8ElWki4#liRx7 zB#4EYAqkQ}kNRwFIieNG+M?!|G#*M(t{TfRsR-i~#}zrU&yOLy4(Vk1&!2%Ei|F3W zykX2>^UWUd58yRaZCOS!e#nWbHJc#JWPL-OcD6z~L9MtT&DXi7@dv&#jNY2~W9A(B3%vTV)m{FQcBhDmJBotV@Ik zn?Ns$kxc4U!=6bLCg-KhcdDBueRvcT##D;_S(Uz)I1>Kssy`k{?bI4IZq#7}{anIX zO*nUpE;)sc)DcVp3qm7fb7(Z`J_;j{Dm}S7$snS%T+5#RFD+n=ZC|L-i8aI79Y8~+ z_bk5c!wU-bO*smY-x!`y2h>kJp{;JdE^CqPv)hyp;h-LHRp(!wuFEDj=SJoZ3EUl( zyf?hJjyWgpK!nuE7KYwy!Et{@V!nFZR=&W;EKrEk zO<+kDmCPa}7CC)*#g$^4xQ~oG0lFzQl+H0JNpfV`nBNAH4?hf~&E?6B`B>d`NI%9e zCf(>*p0^dAh_h*xXj1c3ySojC zBtl_(KB{0q!2%mm>mHW;b!w~%pF!_6bFt@rl_Bv6b`(-xz88)4jNsqYK>&(4A2tze1?=^wy0iixM>eTfc?4N`6MyPi#QQ4 zx@q#b`!9@{k~eO2$OzPcnH}uEOrlhvNS+DN1DutU+=tyen?!1>u+HwPrU+DW^iN&D zBYFykV4oiSFSKs*lA#Ucc&y%9Q%r+^JvAkMMjG zK9wiji(?>4Nktf(;FLO1rCQw`X8kt}+BoMc<}*n)OY-B~W6!%sG7>RNb)S1EMsWd)Q;RQKh_NQ9hnC=|r1QgIrQmR(s#)qLj|6 zFeMew`GWA%&&d+`@#i)9V$9s{Q3DHL0;f(0evW&DS(QWL(bTKeP2t+?o+Ol&_*b8NW?11g!h+4qzYxDRTH-t$k`!;p%bhJjrgAe2or&p8>0?Sq?QPEM#s5I5AO(sg#pdYGN z9~8&;_>t}X@r|x#Z3*55Kmvge$JbT2JKni}VzaQ~s)cEtKQcH7^(Q$U1`zwiE{G$o3P)MaugO0{ZKr~ zW|xM5sEz(vMfS_7Sd2Sz))p!C0IH<0Fxx?%m)!v$yj8VK1|+PEk0j^o@^N{VIFXVU z07$g_x}A#tyTQtVUc(fvR(UL-q+uTlzn_Y`z8yCj+>hHfYMBiC$Q1kjnq)p zHu$$^ljLskRw5f!tsR_cz(Yh+D0@-;cjx!=-|OJkM-qQYSGbgWcBiN|#?~Ywe>Uz5 z;692dW=vTAy`!&PZ1!#gT=euX1>7}ZArZ>uq&TV4e9^G;j3LBSd@|-a*9gs|DDR-r zbcI&}t^AONO2wI)H`yoM>Nqbw2Q$stzNa3`9xW%@iOpIj)1IW!H3!m?;sq4!{SC{- zZjol4Hk3nV**HWh=cz_x7)TYP>L@!!tp-z^)fhwG1;d)p0uXjRfJ$nst1)J>8i zOwVBTp_{?Zw#E)&r1|hJA()gR*e#BCEM;kYxs=6c*0Lmf4!%B|lw$8#W@q=2!wFB2 z(ran6A|J@&_)xyuZqLfmCkDX%vT)j9+4nhE?NN+vo)Ohg%&VV%?$|IKBD0yu7xU~W z`+D+Ql6c63r2-x@^}yI5D08VV6APNh?WnE3yV=B^m8V7G>h^pMTy)V8xeO7D9~Vsc z{DVy4yS2~2M!T`x;jnHu@l(w%sQNBuGneA<5}$d!oX#BPrx%NrZl4QkKLp5Sz6ktg zo@)4=c07l7@`O`rYS~ZvhxWcKY*XDLxvj&vnG;4KVeC91N<@)Ll@p*j(liG=AI}Ii zrL$6&GS}eUh0AEub!~WO2BoL8jXv(X853-D?WP@m9bnF)a9znM(|fJ#^fe_YJx32o zX(_fpW#@emhwQFBZyaS?eRD6+%;b5*nF|@zpTKT{pIsnzXd3(Z0h;`rlbp?Ps(Hvv zLH;JqSJcpFHX+L-YUk7#J^=nLgEEeopb{6|=8t>0QCbITR=19mia-9!Iz0cx{wHlw z-F~2cr9}I24r!t7X}?v6F}&Lbl+|TLErcg!GLJAF*Wx#!TiJTZu~QXvu})nKuj$MA zh_IS4CT+o3P}tE>y&T9#Oe;HUTwnfLtM#8Ge2t5;iphC$&7uyx)Zj4U+^LL`{wh|5 z)?rtHu6q2A*Vds@VYAU!5R@_@Mtgm)-oY`2aEMO=tQ8y?H2p?q0#{cYUP~2ac?P7~ zQDgpOibWVe(+)<#@b2wLAnlLFsCFSsVF9qNIrJTVB_cgf3Yd>Jzu;I|^|NlG{MeA4 zvm)`jeD8}~Y6Ds`BdcMm842G_e&w+x4$W585l4Ie<<4$}ZCjGqUEDlxnlEtQe)$~& zu}EqohFc-%TJ2mVZ4yMoW)n7vO@xSs7@9aN5yi|x!eVU#UPBwlDpbaPYOY4AjhuD&M;Vng`br*-X`a&JOLO zHtl5T%Cj?LqxeQhb2$`Y9N$-Ig4H^+%EzerJzW1LztQQjmB@N5w{{g=hmIpDOdutM zaJ9)IW;?-+U8s|B5q{#TLBKL@97&Vry^+d?xdZTlX{%g=UIkeyfvn?}Klyfw6KUoq zPkjmjzK-npk}jtAlCpd-jd<+rr->g;+0sH8!^xk(ca7V%%X9(jPBFH-c!}=zFFrxL z-pX^Z$!qH|z}>9y1{0Ueg|!3xvwYbrH&rK!AaXG9dMxSu+TrIefoVhdNY&Ry;ph$* zQ?qSB#XuUE1Pmt68PCukROH34L+>G}q-P~^tkZ_xt#Sj2s2 z&^Sq;qJQW-6~5#o)klJEen;IqmngYGngpwyJ5y}ElKByl{vUUFHh#r8{I^Q#s$4Va z617rzz?>~7*R?QUXT{74ZOlweGBj8Eo6_@fG9Zs3UX>wipiln~u&d$r3c=Hpl5|E7 zU#MEovi4tUi{-~j?xtKKNliu0jLi*GhCGi=VkJ#f~GMXw}%MdVqkRT9>mSaTTsL~I54DqZC5f&vr(8VYdR84TMp28+ zPVOd!7X?&JtpF{ru#HVGh0^0R*||CRxtbj$EmdUrW*d6w@3p*r6Mw9qTc4R6%hvXo z;ai#@VHx8BC}B_Gs77%0VB(cDH=XnLBt;=6xxif6jj5!wK8CaT_6b;pM$)CB;QHG5 z8;6bqFvYO64CR%LdOXbv8i!jpH1DK$A04=pKE>ytI}x0}ZlQnqaoeA_c8kPi{Ygc^ zaGd#)dYLUty@-CdAk*LEri}w;9RctR#_IJGM9><1=88tP@N3D#w&>mrF8!GzDWQ(; z8u{6X$@OMkdySHO9@k(GNVxp*^a{GSH=gRwEs)`_G z-kBxeKTPteiB zFTd9IBGitwb~{ozhAtP3BN^wOqekJr8SaTb5nQ)xkVCwQ=`3MUz_r%EQ0x~kxN81z z@0!d0<|z%uJbel8h-#JxdP;l|Ev*dGNhykcQdU}xhVHc%GYeytaqg5}i07c(M>K3& zyF$ZuEQhy3=|vbT)N^5NQhQ?;1>|mg#l`g5HgkADJfN^h$E$Z^r-{!cmSd{(N({KL z>f@g5d$qfw%Jv);gfSlJjHrrBww7?E*V=JNYGZGh>bh@x%w`D} z*Tl!rRaVJv4+m3O&FHXQP|VtW{0<%Ep%#<~~zp@#bil4YrIER(W#7cAYhr#j~T%vM7iRPn9rW%r^e$SqM zzXo|eGbuNL!A~|#s@rE0S*E)sq*dg0B|Z8*`@3YQX03wWy__Fo;#w;5dVa+p@+vC? z^`cWfZCZ;ggGQO|X8$i*x7^g|HJu|jQ}^-Hm88m}n4#`$S{wq$TETZ|`35+^z353V zAjM2b(3ihM-&&=JX&F&<^nzZiuC+xk+Bak=RQ$9P2$Lm`V7=-`C`1ajSh1rv)kq%s zu9M7GjrQ&q%Dd$F#}n2AbSxjEa0@sYf62m#VF)c#N*ZUl;KJcuIH=Z{yNBe!%zZH(~ wO(R_q)0-K3>}H_!wC%HyEBCfMm*aTm@wrzY-Ed#XzaUH^3M&hx2)aZ5AO9{ylK=n! literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-3/008-ICON_Fan3.jpg b/buildroot/share/dwin/icons-3/008-ICON_Fan3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba0cae54b012ae7d6edb4fba89aa56b7ed927dd9 GIT binary patch literal 4977 zcmbuC^;;9(`^GoAVRVS-=*}UXqeB=SI@l-~U2g>iMN+4Nkv0VK}vhA2{QqJWTe-d zgoN~eWKt3`ata_N6$>?pl?}jro1YylaBbuT0wf=R z*S-GAB&5LWAP_Sp3*a^@m`#?7Ut3P#Y5_n;dYuF!1pzbxzpnt7!P^?_hhqu2d}@Ds z9&<~NeMPz3!U0ruRHk5u@<`3Pf}F>;wG*Hg;o8m~*K?tda>;mir)WBpH@zsga(~&Zb991Ij|ZzC=mvoEU||Oz z1AjfSM0Ur|$eO*Kk8kQp1O{BlUfdMAS?E~WEV5A37V*;DdjB=;!JzikG-2Gxk$)L^ zlkg(dRg0D_+Vu-D(-atgUr^9N8?E+8F5nB_8cG4>(Ts+ed{y^|yP3b2Iyrv@u-iVmG0!Yk;`Q%etUzYf3 z!o9LKpkLtmo9mM$Xe%$W$?%-y^5LjaGr7hI$6j~hr?1loa~@?WN4Ivd!hL-?vbQk( zGa9VYTZ*u;+gySd`%4Fo(~z~-Q^s)rcB`sd1Tnm#I<@Vb115(O2}ZUA@YSeevJ*rK zljov{Mp%ci;G0S#dTQ{}pxMJGFX2QzXDv+}O{8h#HrX_Eh<84XQkKRO0F~2}j}P{G z)jA&b%d(l5-R~8Wn>B1DooS%QA;)h0oRh0mFO*)BClv`kr}}5#QDD%X-THf!ZKTLHK3gXtvz?M1otW^%JEEYj9nmZQaqGdB7i$+6 zR*u8g2jj1|@QQ7r1X)A=@23noeU}wCDr0D2iYE0X`=Nez^Pv#FcxOn)!i0Cr$I>Mz zq{?*7o=WctM3aC0azwvN7ZN3N1;E5|nK`ifPUu$ZIyceM`@0NJ^nOdo@NJt09T7x1t2Z#N+hec{(HhCx4$JKF&g)2BF`5DO9IZzlZa@RfyF z;hx4R7;flL72$Un(raKyj{X}Fk~y|Ok_xLt0 z;wF+!#}mo|27YCeCkmLF8g*joXNy~>Ae3ej^kH8g#~Ha38f)>1vG%P&T>(}m&8|9t z4rtb{rC5fjH!rPLM`qnkdtyF(^TcFk>zEN9v^lrP!^W>DvUU){JG3rOII7>o#&3MY zA5!!1dyIZ;*)oSsUesv4EJtzYAvs#m2vy0^DfZ!Jya0&;D=|zoL(rcwwS6$Z8ErJh z!nkQ=ALo;ecGauILQJKqUfYjBT66RWxV{hZwl1cn*1(h7_XV=XL7f@icyL7PG*X`YGp0{;aKib%Ni{ z>$>@dv9U9l3V2z(`ly}7x-BRU;yB&g;^pxz<s)W%Gs!-c z&`wX^-Ou;UyVJNEox?P5Jo^#QmXY_su>5g)w+7;V_svJacWVe(e(MYA(zS~x>t^Ap z&me^;4ky*ZmO*=ydIy?{X5Tk_J^eO@R1a>AQBYLbq+Akvg{+Kya^u89mvoQF-tF4& zk=MOY>M*KTyk{FpvskqEgDEaRu}v~{y1OWEGB>Zv(f;k5jc;@a>g}7POv;AkFlQ;_ z?RC59$IlGF?F{;^_UJd}RWVLoIHjk0ZS204hCAAZ^f5-p+VD>SAG~vbO@!0(f&0Yx z7`ap7A9J8w9t~3XAguKz{=iiZ*D^9n7ra0-ob$D+D2$yw-&=(vLeFv3d4FlaV{tq; z=%`Hkw$^TlLxWyR09lp9rhPIZf>xb(<8q{byjR6lmT#lS^i2}<`CCsTirB4x=!4iwV{1#hocP~?I=#)3c4U`d4-+<;D`xI z$uPq&?dp{l|b zy8u)vyHK}JU29(&xWUkY?c?O8a+oEfa`$wG?1f#DI1NrpaMgALS$9ffJ11ZX8~gS+ zaJUw%*<3525|gyYyTyNAm;fglD6v+aj9(0CWk6}=-T<;+TJ z+pys}Uh+uTgvg+N=Lo$g9`iNvGdD((D_mF;TG2A4IcNmzmf{A7!fzSa_Rh?t*{V_F z9NLLis96I@4i+`NTP&{V`|i=ptho0}{8Ml0m~00KYPnGTFB$173;lQNz4p2T-GtZy zcl_l!$JraS7q0-SFdiJICYMsO8A{n?D9CHcIn*Ws_32w|ZVpT=yl*Q?=n*FwY`HfZ#4Jshq4V$(K*CwBXa%Ot#$j}Cj?NKcw+B$WG z!oN8N9|dCmRYm$BP~TZ)TRc}#T!8u3*A@5R1Dk_pE*sL#*rr4foA;Fb=?lyH-Wxq3 zib=&Go%wCvChu&6K#B>T{I63CWA-+KA^>7UzB(G|;IMRrP6~JSG&Kypu9D23wox)8MY&?{Cn$490)RlW4DQS*vRFC3#-!!~J@% zL=lvjS3Z)_oLy5LiqCtWVx3+!Qjz-E;=YQITC9l$zs4Xl%ZuC%h1Qluamj#(1NMFQ zdp2mI4u`|Xv<^m49+873!qY>@Yyuw<%x`+Z;#cK!^5zKbdeUP#f578MhfH#mEzs_f zR=r;j7J`ab+K`o?kGNb%f(7M&%}y0Wx*xai@!H(g(5n+_G-G^-sufgrN)-2(^`XFV z%Sovj!K}Yq4(1DtawTc#mekE8xlwy#3UAB>uAi9ND6fNeZRoa?5JE;xN9d;;=_P$p zJ0*exWKS|->t}@poexWFl$Tk2vbFZ2%j>s3UF?kfWIHI(?U5%%3=c(S-g9ZCXo|8p zCc8V2HuDJXKQ0a_EiU!_&VO8k*bVd@`<;|$E+Ebhd}^OpIU>lf5a@QJ@V`ilr^9$)!~`B$G)Q< zN^3!Gq0^n-?1ds7^N*NMZeA&wYi?pADG_2gYhAnZ6tY3V2}UbhnsG!Jhmhq>Z0l## zmav<#@5@k?BDdL;*F5bghv>YzKG(0QmmdAcG3ZwyT@j^{)!^X7uDCI!l)fnNfL$OS zB1Y-tG;~&PHiR#Ojj6+g*pdmN&l{3c3J=SXG6QzF0+#{f!xGc6rb1vuLVF|-_#CCjfGlz)MtRtix zg4=UmFrU$yP1h-ChJKQ;4;2-LrIq$dR)uThe;e=q3^LDh-}TML@)n(P8PAam{#*_T z^?>MLT%rRpXbQ)oq<4ajuc}ocjXY*@Y;(2(=+s_#=)A_yZi>0MlXlT99+jHZ=c+BW z!R2$=aGu;T52*B3U=OVAh!{$2TFp#u(-Nc2!0y|i!#iMUq22Itg*AcFq}m# zcY;k(60-YY0P8cDj?HP%C{2V8{Nkr$h!DXBl5?Zl9-deb86Yi-Wwche1d8uPES1!V zYLy+cuM8|M@~6IF94 z(Wep?)m#^(md<+o`kVY8jHv$shOVvYab{+j?>wFLc7UTfpTGf7tw0l_BHW-nVavXbUZ^+UW~jrwnQwCdqQkhj8A6y{0*`0tJm!!oyqhP){ZFuSIIK^w(* zdu`|%w8pg(o>~d9SX%jO(0&`S%(@0GJxJ;rw9E{;N`FBsE3v*`G=lDinyR0u-@OJc zSH7Jb^EGJ4>aw7JLF)wjt{V9lv{Mgwi}me`o<~#P&Ic|nya>~2Mi4rw8y3^vHgPB3 zZffixi9|>(7FGErH#Z#djQX|gwc@|^tc(@dl}^k}>>`X-rC;0%463iB`vLA1x5s@_ zwL_97XL~sDB-L)>uIG^-XPFgPS@3%S{m^BsHFbgT$0A>E6VnCJ(m#wGzsqjUF{#9c^0C=uf1*WdG>QR{7xc6+b>5 zrTUcnTlnq+Hmm9t)cf)1m1SAB8F`jrM?u*Ma~Hy>YX2R~lJfY*{h5z@_|Qs4injx_ z67JGi_wb2~FowbR0(L%K16|lk7nVH;&>n6PdW_yQmMD4dhFgo5&nly>LY>Z2#J4#) zZ|Je;Cr^BExK~o-EGU^b+6Guf5TVR^D@^YrPbfWcKOIXbz6b_d>>HUmhi8!o%?DTj z(xHQ0AOoF8P(e734!PxUO8ELYDK!|f<02d8QMM7|CjW+MqHmpJ&Zw%{&&5uXDI2j< zIkZ^t9x@%w(pU2fqpWR}Bi(q;Ev(SN!zdG>---3dmBdyQRnMzzu6Wzf;C2NkKP*d{ z;YZCo{Qv$1ep2fvN>ot;sfsNL(^P{m6nd>1wP%@j(X+!Y4;+LMY6m9A0o?WK>#c>L_p|%Z22F{JmynBA#a~ zufyz{4^l^Kwa+0=U#@cUi}37Soeq`{4^HuEbA@o3ZUQu0M1?F3?FMb)QO%tFp|`8P z{jC8sooL0}6t8x+loo9k8+<|t8c|*;zEvzlp*SjUza;A!w@^F%OM%9%OX3-Ag(9-1 zGoz7t4^}suaxxQ?%`e9cBhyt8wLCIRpmo^wk+Oc*_NG~|Kx(Ru@`2B#-IFH*kvCm) zhg*)&i8=FpFL(JWHq;pt#li_)i){>bn~7FK)S$YHxC&@~5QVfRFn!3oEUGLr{$ZeR za{a(D-!2mK!V83#?$7GfV*HSE3pozu=$FreL_aCql>27BFYx-b0ccl` z(-d<)okc$)af^7T&b%DRID8>A0zM%IXaqk~rT|KV=+{NuC&jPLhh{5Q!sFtj= z-!dAk3vz?pPKDWu7h?hjMQf1CFn(x}EBv@I!?hn%UyhOKL)Uz|`(0ZzidlWQqiI_k zHy)1vr*(J+onYbAk|ERIFPf9NarQ5#hYpG!$P?`;cy<~_mm@OdfEBzE1MUe{#&>oH z)Obj19A&>QHp`0rpu9bM?>0%!_w9Xb#?!EkQh`zrr-jnoO0Uz}-tR5m55q}id}z9$ l1jz)#{%7C!!*)J~m!0S4!7gAD8UWPABQFC$KmY(tUM|4%B0%b8_Ftoa z2>Gu`czOD{3jjp>hfzofKmZ~T0SSok3j1pyK*K;sMnd?94wV;!5D@_{Gc*irw13$0V$i>I z;G*GClC1KeNerZg`!YKmS?FpE`d1!Csz&eZXI11YL6Z@Qsg)gq;JkENvY| zGDbW#wNZ+vz90WqB>V@Gf7U&}sIE$SRVuam4E-S?A6285tjSOo9%dz*3IZ6fgrQyJ z0yFz?h(||9m^``Z-D(s@G(1)!OKkJ$sX1!IGt2AvK5Gm4 zJ{OSeG`3f8)>r*_JQidwd+?x|+jus1((}{c2|WJ{nDVD+)AnEKJuC=xk{uvyyKduq zjHQH}2F?x$bYk2(-6>i>1LRMAkF+oRuHJ3N{U;qq3B z2K0&txt=<|L!&(JAI#fm)q~%q>&$Wu0GUnpX8; zNtWpLo~Lb!hO#0g@8AD(asEtp_Y!Pv5MTwR%*Pd8W4YbS`ktUBHzeKTuLn!MUsIG~ zbX(fnZ@8DO>(}X0t(`vD<=PjUwuYL7G~=tv9lW}T*59Tf>eG7$ym=zOcsQFAo><@_ z;iu`@Fr71XLGFnn^c#z~Ku$4dH?`olrWw8&J|y*o4eo2THofUtPTw7LwHi4Qld7eX zlcNn0jojk>F%Mvj7x=0*lglZOO541RYqY8Deev(+Ye$wyB%A2WW(S z@G$-yg~hCnKyIz_iR?kZu2rWkOjr-2d6a^q^i@+i*e?~6qeM`tXBpYEYJriDh;ek9w3+rj zJ#Fv{IN5<#y z8Amo<`V6%z{GD=GQvJn7|R zX?|o75O|a6SQfHe>|r7or;xVY(dhl|_Dnra%R83t9GWVn0?tp7OTYCSWu2=SHp`@S zmO<=u%UPJ$@7!+Z+{mM+{Cw2g(nKW)hPaxLZ)W`{4uLBU!En&e$##r?Pd0 zr-k4*)zHow^D8CabD}Gc=v_kAtbtthM;dt!qFnj-tT$p(Qa{2*Rf`>3Du$~d$)rXd zy0&EtUB`i(Ou>TvJ6v_H%!3f~KU!ky*CdmDCX?t!_v!Sx6uj1YiK{$y@ z%^#{qJs6wKa~FhXy+w)&bLUF%F@OUY`ozLHJF40x3!PTsZwK12&P{X!_hCF0bWZ6N%VE^RV|#&WvJ*I!m4bLsnHAk zQn%b#U6-WmYpuG|nm&R5GCv;9LTG0T%0Q)QTCc)4t&P&Wq=K*__=4p)cQp zGE(1Rd&zS9*MZ6p<>tj`OsOb6W_`kN#1wjYI%YZ?392~0M+ESo655xpyf6J0a&p$C z3CZs1>FLqY(Fb@3Wd8QL(hWjYh2?#A7`%Gbr-VgAp9i^=Kf;15do1J>7%&*j%uDc9 zO8QYXM@**)nnU{f2C3sh)ih3$R()wu7EQxD)`i#h7F-v2 zC|hiV(lnIp;fT!%A*skGYa8I>ornjL$<0WDh`vd-?Otagg1tVPW&KE9qB7IHdg>9T5Jewi4iNa_1b;B}^&d3Am*OHh2{HiQJXgUf?t-LFLkLdT zr09rCOG=Bq+2mZk$;e{$kZV-Wp-fy6we1Hp0dX6`NA>Tj}X=AKRu8cvTR`5%l&Mpy3$>P0>(}70}39joJeqzpRWCQzJL13clLF#4Qi^(yTHUq!CJE6 zvGWnff}zKXKTg~mgp2x~mdWn~S;8|)xNM=E)CLx??b^`z(czM}w)2yWlSUASYBLy! z@Nn(+^#j;1G_0?!=L#s9CeWwX2)k(43=o(ZGK0{UDz%a|k$CR7Il1iZ0~z|7i(O}O z)>G9lELEy%LN;nYHLndleOxK#C<}k=-!gSDXsjnrRZTNhlW+WFkl>2Fnck?;$0vPm zG1HYnJQn&mxk~2y6L#p?J35#Z(Uxh+w%z!BtCPJPYYFy=&f?U^`A5lyYonR5(Isar z>m@gOJU^>Jg@wdOPo%ae|1qlE;(ZIbn4>wn?^sh)#g`bl*ygY8IT7aUdK(`d1bh`E zN*MCf5Lakba)rX^Ia<51^m^0CGu>+caM}@9+$e>~HmJLYy)!fQ#8ttc(9fSjsmDBbWv;%S^EV0S9h)8*Gujlj)ox%S82|X|Myc8( zQ`OND*msU$BmdzcwbO?nMo$#D(M2*#!ugg}JZW+FqKAbZn_hTUWq0kTApZpTK&UoN zm$20{n9&)IA0jiW6b}p`SXCO=9khB{OUJ8Lv8N8K z1T_T4Mg%~cw|M5F$-UuO0ZS&EYx;Z#enTyrHoK7}SQkMTE2-*iYJCLnbvOhzN(V38 zs(PEO6u3mhFvd^PfP3in!u;#z?DDR;B-QOdxh(j!4p_6V9x+q&BVHXl9=D)u#;0gB zbqY=jr)AO~!X*PP56CyU9o~ne=o(}%sI^3IUPl@eu88|fUs!+Kil`rV1#K=1K*>hW zr<0E$Rr?J@;IW;`Z=VzB4@*Dm=0%W%JbhXbCVr#I5gbQkEoWso4=(7A(Sc=X&~X`{ zxEY2Uj!dxk|LJudwv7F{4wFox5ISUIRMuqwp;0XF-+aEemki86!+=G7CB${bjLt|0 zq>>WTaETT$Sh)eo`=w{B<+PJwy44Z$9{oiunj9ZV*36~}5mBwWrXf0cEnB!VvHFb_ zy=XrOrb-FEGX7s91MmMSFc7llFOcg@X`3~Mld$P}V`^+RSP&Igu78*@<))*@L&4+X zn*K^lKVW5=q&y~WGi;rj+)1vW5oXrtE$e+#ro=28Rfo;$V8Oe_!mN4W#OV_n^w!5g zlZN9<*T+gXT4QFt068V|Uxr-2^JRpSjr2RaqQ_m@iTXI3^mNjZWE zw=VrhHfkAC>-<*ZeXbZJO12DD9Z2i=WwQI_s1+UEW#}95lf~xr6mE_fVc~RVgIg@f zuGpw?vcd4x-YsBezs9gGlD=ax8LI_|%WdXESE~|ikSO6AbjcLAdzrq$^Uyt2XV|*T z&(6qpH&aJ)4B8cfb8}Z&_z~V+X>Oy{NdL`By|pLe0}jV;Ax{A9SJ!ttjZ~M!OQ*Af zOk8qPdUthhTEuoB%d&1yd7bxt!RwdhH`Pu1IM0BMrgC(r8zV?R`7@xV8NS_g)%N8f z=Ib5Cdt-<=rs2zBdrr4|{5(R`&zLhWV5Y-iQAqA(gQ)26YZw{cljt3dw2whMQd$Os z;B!Z+W3{OmDb(dWsjw5Eu9P}3Ms_fJ-4LZ{GaI)L)BcZMPX>=#x6q0ZLtqe<$2+6f>I~ymd4F$txmJNzX%&w_Vtw#O_JFUTn#JE{61~m5+zy0Ydh!ycK zEgw$r)dgK{ubc@dk@hF$il=IR2+8VWJgmf$9Av-v?yN;`jFeOH=TcQkLyOOB?OijI z>@6UZNqE+Vw@)D+Ac72$X#@pxOg2=sUpqu8vMt zO0&P^Ykw3CZjbSvl*4 zIM};mjiNxWJ?Dn-gE$-Hx^xbv>q^<$bozf{N>J?Vg!A1vZE>G}=R+{&yZxH^F?%oz zpyRPmQ)fl0s7b>(a$Te&^XXKyXiGnA&Gh4`H##m%#m|HJolvQ1*|b8 zuOL^BB@g_8-&SZS`~pVZo&gs%tJS40SObCdkSFx}S-#2FNJru*Hx**wCvMX9+?%co z;q$E^IME7meNasPqldWjQ>Nj@J<_*_YD&o_*xzH{$KPJ!`oJqISK>M&wrux1$D``E z>!FVC&X2NTCcgB)(b0)a(Yxw2>c17}tjyH;jhs-L59X^ht^43(c5Q^*$E1AGt+*bp zL`xxW8e6M_sZ3%tdWg(o9o0P>*$h5l1?F}D|DyWAjTMB+e={hDjxJV)y1#=uv7gD? z|Lo-|>95IEd2FPi7iZ9@Wh?S1Vd=?DqrP=@AuX53&2g2gX1nB39~ZWmskt4&ACEcb zqaLeNlR`A>Rp)!BA$3`o2I&UH!Qt`Z?Olb~?`#Bpk?MZ0< z+3HtcZCvF-BcwbI1a8RZNmp+<;pk~#mecW~Ow`c901)jPuVMcUXz37j?~Jj(TAW^m zzbRp~xCu0BeHZX`7>gt1wfQXr+9;Il3vF8^z?1XxYEom zbhU5!CZ{TL!lYqDoMl_nbZEZ0U1b=?>)%F{t$uS}rBtND zS3-jm+xMte|9C@r1$6%de;WJ!42YPR{0@_vaB7JQdh#Uw3x7kMegbQJ26T)2ZnskB z1(f{hB(R<`?w9h{d6(txWsqv{1iyo%TK5pqGC;R6 zWIF#gRbNv;IazryHs7HGA#Y7du+&MMF1I9@bp10CI(J_$m!=YehZ(JH0kD=HU^kfB+>A z&f4WS_J*+w%RU%={1bRdG3x}pb49#9c!q&fTE4a-e)#?CEeMgC#wbn2nK!nk~@m#mF2f;p`QW?24el@H?zGT@XkRT)~m@6+s!o0W%3idF*t*m}mu@?1xa-xFkqG&3*60=o1v8~m0eb#wM%qhP6gT$GWR3?_^ZoBr7v@PuYGwYoi&H<=>oU3iy zU&C~-j)m&qUhuEP=1klLE!$sPUMnOn`H3(3#|3hM;Z@T8iQKr|Ru2Bv!$4DIC-gz+ zrDr7);XD?24$HjWSs1 ziA*_s*CR(4dfO36l^3W=gAuxVi!OZiL@}W_ue1-bdRZ4#T?h=rNdfzUEK0dTv3D~z zKT!s`z7EJghg@O zMdJs&>uS4v64Zr2%rl(;`UeYvKJl~QZLh82XFxeuJCD^f;H~uCe&E_8Z_B_HD)FtM zSh!R4!P4LR(&M1tFG-(wjmRetI+E5NG^*KNs?b5I0s9cNQ>u6uIC2Xf;Sp#+J_b8F z`gYxa>N1DVt1=~V1&;87&?MzlY$pV9X^9~L;DFIgk? zFjczx5Aggf>pQdeEDB{9zo2T*>T^)mdWAr~SvFl*PoA7YPu_%}|LaQ;wzNK!Qy-#` zuhLiHsO>wb<;6AO((}6}ev6hnIDYd$tRC1S)1BLE+bq&QR%=ndc1rTZePzv;(mtpx z;>k(+G4;f#Zs=ex6Q0~(XGYg1V*>hW#<*v`Iky`_y31LV#b}-1s4eWmM)J4Kr|#}b ziy+03eHdv54V0#37?^|?VP-lvB&C*_s4Uml_II+H{b(sM@RD5SXGXPF-#4}sZqW*M z8y8XgReO*3A-NjLrbiXVg~+%`ujym-=h>pYo6iW+&bY<{A_H8OtIFZx-VIm;1r+H< zniLuYa$q20dz|AyZqBF#d8m#Q%`i*D0zOkn?fus3!KH`Y@8K&yr)s!>xsZK*XCI4E z*cw4g&Q1nX<%HY21MF({F(d!4{b%;vUD3dB3)YxnK{506Ax`+Qt79iR6uocKDUcE{ zFryXrwBtm*jM?T?IvS&c++3yhq;_jEOV`H!_S30fW)6{c;!+;@_2&WUKnpk598Ljm zHe}_FAeHm4+x3t^F0=i&>?~_mP>c?(6Z={z(nQsUKX_YL%cpJ+dFEnWheCu)_x*9E zP=ciMfT(Osw%cvRCf1z8(OeXVTf3w2hAuWXlq%#`tBHKxytj!|644S(koVC%i3Uy3 zX;ERC-K$F1@qVH?V~##zL1FxL1>f(?q$0nOfn?J>H~?wl9H!OQwlzk1tki^EK~p{K%Nz<17}BUZ#Lf2vhR#=Rzc zaj4^zTH3XN)n_G#xzh3otoEJHtZjQL7ID;JS4FE1-iFa9V(Y@U-mEjbNn9|qWP<%G zw>HrAD&;AJD5r%@!_U=L@1Y{S@fv?FJ%05i-hcaQUZ$DaP1a|@VUV*m5Q81lF>ob* zBKZDO(kNDzuv~{HtcS1TcsBJ541wEE{o7KZ_D4J1^T|4nXlBHZmD!~*j&e>C)|Vn4 zjM62FC^mr((eMi@QhCMf(hx zU#Hrs#c~}H#pA+N?Tvzsf)f4CK&@D+6QcRjQ=)z{*4xqRr2ktdApAc$0oJ#s`@d(aS)_pO-no}YxiHq-y&=lx7qSA3=S#A{1Y$}g^$Hm6%L)rFc z^!TbZ>(oYn#;3gx4InK=r_JQHWJ}k=&CLH6A*Q4}EMVLfbF)+plwr7i)J6ub){e8@H9nVeayw!dq zY^m9VL+5Dbx!r`?-lm#vuuU<(`qH5=BJ&x+3M^_0L*sLCtlF*?IgnE4&e+L6;&nfq z?euicd7M`uDhGVTHZc+q5+=2~AsBM=kLG1ztRdvE8T>9%p#AyGU{JXLmd5tPTI2sK zPS4cUM?cMTL}7ZzzNvPjw(p47S*%S4`hLmZ60ut2tlECQ_0WT4ec|`|qu*oSU(C~V zx5wFe<$*=zn!RXJ&hI<#m$Ix%+*NL})*ggJD@LW;>#F;w>u-Dum)hd1r(TntC3IiD zhBXU3!s81>iMch$y}z_2!Hfqs8h2rfErt~pv?l{l0(JYYmKey1(WmWU`Y%Zry+bxg zca&*c+2~u=EvS_?WWB$kj{{lKqvT$OBdlD0$~VoiE+4O^UI~+Htmu1$~U#T;#>PAHVxKf0S~5TYffR;av|k_I7*9y*5BxiLGk$qL{c^r43Hn(20_FDO3up zqX;*B+YqLwY0%@UExo0=*#|Ao7J};Qk{AqXL@+XYp@WN32ZYo;!@txTB_80IishNl zQ2qV|)=V{~FX#CPi&kiK$=YinL?`vW<5`}ty#TGY?1)~n~9$6S56v73X%L|#i_7T@OtNT z{Wtko`bff&Ly_=?3&j@<%BjEVql~IC!JRLP4vt0$KE(N8qD~_zsmC0G8=X%5Qm)U4 zj!POKuDJiE!=fi${*xhFA8yUkXUBIdX;b^DM@cX3$H;bRt%@eHUU6mEj2Qz83Xm&R zbYaNZaKz26y~+L*^{NDM$koqp$-u#QSjG08LWR7evNd63a*I@~TyuGm!MH?mB7b%a z;r_>PiecrfD+_(4Y9C?zBMXj?15<1ctb`={bLaI(f&In!SvsWLnVaxpD+!Qogk&B{ zSZ|2wRj4e?KK-@0e)ln{WRuZ%U}Qn;n8R>Se}^#pf*i?CW+1++kB3@Y0zvHeeMmqG z#swRHzRiqTnQkQ;8;v&1*L?>Jv%*_&=?kL!fle{Cq~EOQP)NWIqNhrNgxiiow`Qwb z%s+}En?Dt5UZ8#RO;nX5iq6O(aPw)mYWvodK5Aejgg?vXmLXOz{*GCKTzSG}l%3fS zkEACUn32O|fQiX=HIlRfyBNHB)QC+Eo1oy*gKUv3ZQ z-N}mBl276Ek}PnwA{OF|V1#FY4gL@ie>5>eDKRS%e@JP9_+%ccG_#gFVt-GtZQmYu*cLzUvLkupp1$wlfGqpcoD-7L=DC2~y^M3eZt15?~p&7xbbC3wo<4Fw%gwBJG1HE;CvUj5!Nrh3#Eij}O|{?9pG^fecV&CEa1& z=v@wZRk;gaS^I8xYNq5?8WRQHf;G;*;`)|@_xF5tSoIYjO=enDh9q8Ufh{o7J);lu zWRpqE_C0yYaC{4{b2CRpCtmh9)NlA3UYcMEi!K`zrmDJfbgigf!9^dQ!~VbS_0rHd`3jG_|@z4Yay4Ua<$i z`(VyZ$Aiqn#U&EhcsnrtuO8%UGBVnlnrL0%-gJ&4FkRJVfZzcfM(3yKV!Or;P0(t@ zNe)r@`L{x7G3`_9R;^O$?ZoXf#|SJSX|+~RKZ zp{oelLqK%kT|<$xk{t%JjFtBfdp5TEMT*H2>Pac*h|HIBev#kQ;jEg!YQvHae4gy8 z<^Kh^3;zyW?$7@XxUjr18MKcM{{-$US*i^G&!ZsI=CegbrG}hgoZM}BvA@i+;3B3J zW)N6jWPi>4?DEWgQZfXwQNJ5dgzO9Q-vnv?j*ZY{=qDSh8T>Y^VC6kg3~#i)wtrIn zyuj_recRpLj;3LbA}CWN3ZJboGDEA-2DJXIsIpP$HlZcEyK-LnS93Gso@H(( zF@;1SP@8xE!wHdF9O5t4JCwYf;pso#)GP{b`l>gs41Iq6BxexHHjn`B{0>q{fGa(m ziM@A1v-$^J_Vw*rl`^M7N=4>;M0D_Q4UVkgW^?&DH^QFK&N6uKV+M)t(~ z;a&)W95(%RKIvhdlEwrr8u{9U8X8Uha2C4j%CKMUOJ!Aw(;VJC#G<7*YaT8ya{^@~En z42zE;qkF_=M3!F#SQ$rcroqfkW}xnUu0eCtg#I5hZ}+gV?~EURPM_PI@l{buo+M*LKiX zehooj#uqY#-)a%}5zQLW%Bi5BP ztJb7-h)r`q?@P|5KmELaXb8q1HAxyeHfXnqBX1WHZ6c^u#M6v> z$@{3NSYOo=O|==@hb~7UIbR{U2=@iGOkjC<&%nms`d)rGGKy_u2!aCIWz_9pR7n{r zR%+lk}(hn$H9i$lu`A3qeUqeXgL8BH8kjnsE65S`XApiVi0 z$NsGTukesBGJ<~(*E;`Iyn6XF;l(S^WgwD=+Sr<-1)%9VAQ;=ikxy+96Vi0_|5 z?c4r-9V?!-ayN@xa@cqVe5BtLm$IYW%%Z5AeCVchpgn8w|76qYJ$*ZNQso>tVhp65 z`XqJ9U;8BAy+1}d3cQ*UCzbsVDX9NRA-(P1hkceGX5X|b7qc+NGDWScr`wJyz;13aJ0AFHXBL3(ob-n%VaQd2tS$L3?1?jQ`>hBpn%^92y?TW?RopJB?x++|2N}IwekP} literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-3/010-ICON_Question.jpg b/buildroot/share/dwin/icons-3/010-ICON_Question.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8d0cddaa8eb9d42025e770b620b328a57477609 GIT binary patch literal 12319 zcmbt)^;c9;+xAe>NINvbAdPfM_t4#-(k-0|N;3=tGr&mKP(w;LNDhs3qm)Q0AR!2T zJn#3c_aAuoS?7nn&ULPR*1gxd&%Uqw`nUA&8-QF>4Xg&h!U6zZJzRi)s{rMP+5c_) zhvfgp@bLD(&j1R7|9lh<76kyC0t<%%>)!x?0RX`HA8Nq=4niVg{71O|c_=^*z{17G z!g;uHA5aenTx=Y?M_Bj-gcOtjA}VT{r);!O*hPUtA|S;FJTn#m8w>A&?ti%ec#m*! zAK=(T|KU@3SQrZj8|M)Y9v(gp-UA8?8wVGU0`Q3PsSrK^mEvn3YJ(4K?7~WLL%YJd zUP2lXUqs(2El63^C~|u9-wJ>P=V1v7914IuAUDD=N%?oEsLOAc#o#ZDuXb3tkFSeP z4-M7>yWoQwQD!H-GZyNMB;y)7yp*Sqg4F zFM5e@gl1VQZ_Op+S)oPy!+GjcIr*1_m6hgmxIwaY{{ZoZbM77e_qTfuaj7?xLSMUO z8Wh$X&tO772O{9~ZM5YPq6ii*iof%XmadaEL*Nx@#aZ+-sh5X*(hj@7eAL4O1)!%ggwyVXa{?x{45J&KB zml*Px(RAUKX3WDluc#$IdBc#z$wqo#57g;A2n@Gfv?5)5t&6tb8-y-uL7mg$M-CnX z?-lOfA8cq@S58XN+!1g^WIx`LFD)C3I1Nf!GjI9_Q1yMHZ!4zyVZ7@%Lz8m*fbq7n zBOz9xfAR z1^bIX`9|Z1LuWYYf1S5V-c_oDf`%$)yazc3)w=3xzL=n%%}qtXA-`2VBx#$E=~7nh zaIu1jCn-BOp_@F%d@EM?p+8553YN1?@7gNtd7fFx)>kx3zxo<;$itR|{;@5^5@y0D zbk5?QF;Aa0swuWzQ68JCr$?)*v;iqTmHMr(SDIRKwT?A?fDD^HwOYBVr!}32iD3dQG0DufEa14%?3G zY^la+Ve4i-E|b#5g&+fk(1qz3ShaI4SZS^t zR?y<8^jjM5WY6TK8LD49WAxXE8eXR%+%1w_c1U^e21=CkHJV69t9r{$;@9NJz2B_` zhL{mt#3ij>8J;Xn(|PVcKb|<~ae_x{E$cF zc7(})WgtVlT;2+{J%?Mr?X~Z8bZ{!O%fM5zQV?vo7Y_OKL$UWCAUR{dVlsg(J%FTa7vsH+3xNq7gC*2&Q290qut8U9FrcrScmSL^GHmxn>K;< ztLoW>3R)y;=mXP*GFhYiKYk12AeB?7m^Hexj$IBtS*zY%;m>iTLLu z@fJo)2Bq{E{eFIxI-}V^(D@XbGKnBci*IJMmmR|OMPvj78;y@I$&EL`O%eT_Qh-p< zCj_Mc01gN}R=`0hR=Lf=-APs!v)4SvD^pl#TYX6O>C0B%1tm!fXGdaBP2i9yA7A9l zL@)kyj_K(JzE>JNX1u{!9;|G2q<)A4^`N}1v?(pc&KI7s&d7k+n)T(sBC^uG41m+_ zLv(c2_dq=BWv<<51?-a13bW8`4?*IElUGwZZtOTb7sZc8euUHMn&D)eS~Fg#0(dj~ zw|?q$m*rY}HH4YQXe_OIhqMhm4%*o`Z>3`ZTf;Pl%lNu7-%0KB?nF~|%jlSulh{-X zD#_4~yk|7T8_Q1Z4s$+I?l`VT_6M{rH=obUd~Ehes`i4pXT(Jf#H%|r4t!cEtf0Gg z8*8xQax1pLHtCH2rn=7`N6(kG>{%ZrV=tq=9uzbsVCE(QaVz&fTC=-N;cD~ z+fqv4B;3!ff}~m1)s5KPbu4fl*4uV{|9Y0wy=|Y;m^WnXD@A6!*5tLscVc;-Pm|>@ zr+8-k30BcQ8bwPNBy#tg zB%Uz1!a2#``ZEQe#r(&!`OiD-!i1W494sEYc?BOPHm+DWDq)Uv=$z(H-;kH(fJrHY zESFZ_)@8avg}0x#JhJ>6;w4yzQ3gLfFpW57Tb-Ruj5w+|_bBD--EBC@V%RzOV2t9B z^~`>wb~H6m6=@hmr9a z{SL!E$~VhNaT`xQ+5V!gZL+T}D6ei;GxSX8;ZIAOZ#ql>D(itwFBYuU`Xr0X-P~3C zc8zpMoQi@A6j(Ie`C1Z1h$3NVy5TAmJd>(S+>ww^8AQfSL6h(qbT)guk8_fh^DM9u z<5fCiFn}4ABf(Qfe#Rt_?HG8W*|Ej1qoEGLWo&td*-R6ewnS0}Qd%6=o4PcAveUfK zL2)O%nrTh9m^v;eaDj!}2~++UUpiZn&_|?BrO69fgGGR8|EctNOMkz24|!?#Kln!V(yp#0aMqt zn!z;IHKip?1as^czxSmW2FIL2{4kJF``~|o zx-tYargT6kddQ6_QCK;Vdbp5Ymx`{o7Ps0ZiIi|4z;b#Io2Nf9r(%F;0a83H!~J;G z;1YcBIbdqy{hhj8+YHZ*B2{o5R1I^?^%okkvhk9AtdKrS&+Nvk=5&Y@%WGGj_2LP0 z`BEQWnC&5z>8stQk4w?ekijQ*4Zu<3m<|@x8bW@1xM#`RN^HL9rWmO-PC1Ydy=Yuf zq|dDU(+f#@G_{ijrP#p{{-<+!MZ~+NipliZ-*WN?o?#^c&=>lm{LZEjv?iW(cl z=mTy-Zu82%2T5TY~ZkJSFe|nS*II*(k-9s1cT4zwS0X>PNP>#HI+!QJ} zub0c|cAYE?1?TG5U+H^!&)8_5@UCyA?-v}m1b+dYbOVHk}#1{ZqXwP$wcXa*m$2;Zh+xh5_H!j35SwSvU zIY45UZf4aa)pBc!Y0h*n#{PPxUjZ) zR3RT#)1Oa)FT3*JOf4aYAbEY$;x`-E&Fjs}f4Nn&2<%i_y}+(JWT{;pTdc5E+|w@6 zEAGwE_zG8Uw|z&|7QVhiQ%jG(91=K_Qpwb*m#id0@Be~^6}Jco468=_jk4Z}7uNDL z-SA^qTA>Wx3;>@^T<5MOM<+}h@PK`INzt{7g{nksv}`g?tBk;O&iA$;oeO!uyRa)P}$Ze!am&#^CF&Ntp|@>X6tcE1)hzVW&&8#%06;b0k} z1W=gCOXWIcS|Aq2Z9;q4gRn>Jvp|wATp@HKk7yRM{{h;cc;)7<9QM4Sc~d54 z#sFJr?G3pGKFO({vr;JS$_jPq*RwDqt+(Wnc0iO?lmgj9Xmgo&8%>8ll_)~Yyr?y! zg?v)K@a4M+Jd;V+{;(WxVyHnMP*3qq3*c{D{&Zw;Bv$)vn#cR`EZp~x>g%Am-$s;C zNILuWZCvQBm+-9sf0=$GKX|fHS+wzN&_ItbMGrSYR7B~R`qLN{KFqvWsg@DmUWr0I zQo~A%#G0MK!X2w4`OO`(5C)XPl{QWe*Uf#I4X-?FFM*_%gIk8%u|JpQ>@4p(> zUcTsc2jyZz9*a0t+}YPyY_}{fFsp^7Gd3cot=;M{#-*_}CB@YhXr#7DyT_@On|)qp zFn7iEFf<(Kr2RzYk6LdO+wYgnl`$q*d0`gP-IG)jOtYMD@v;)YGifE|1k*p~bNfDC z%JDmC8*!kS9K$?_wf^^|rffZaI*76VuB3B5^?`?s7x~Y{_3ub&*ACC+-^93RQNha( zUd7RTevnLBdYd`88o**uc~Cvf5q}GJuH}hwaE+LV_=-d+AHT_Sc%(~ivQVG!+_J1X z!E;)@<$l&-q4K7?#j^6ZALcrUH9f8a%gU{Ut9gy;G0zG5+aBpao1@-`xcKdBt9<;h zTL{WlUrNj%prc5O#B+7st$4xCi|*&fWihyu3(v}H=Zhci=lL9Uael?5UQ=JXbN`{m z$2lb|DA_FMb)b$xAhMF&m)?j(XXw+GX03&?W5`$%#*(*0)f}b&)7cQWU@3sxZ$uJ4 zw54KZ3&pzp6LmnQctM}2MF&w&YDZC=NJm`&s_|`t98R+5t6&5;17FbB&gG zUQNS3TL=D5=)c$I*sHHMpIZrNe)~Xv;iAeM@)Y=<`+$4y##~8~X>?$KS8K zwSH^Z8TSuB|1Bc(OyoYL|F9Cc`;nD37(JwOHNwElCBO+jNbDZ6c3Zpl6MyG~yG-DA zC=kLqP{}x^popJS4IJ_1+vZgh*^OPraW(ll@v}+XkqUSqA$Gs)M1{9?ZC>fN1u3oj zh|jIAJ!=9UzFXrT{ynQXnvNU?Q!}m-DuM6)e9N#s#a=Q(@ds2bt^K*eL>4A z6ZT1%j1FqNJ>JLrw%i`AgO1FDMaKqpxvl0e<45(z zW^1L_(j(kRLd*7Umpt{rko|q`srb=P{fyh58^_|KIHW2y>6Ch)`Yl36e`Cdg!g@(^ za(q^cHV1@7?TfofM*N5vnb?=aQZ$_0qkk;zn`A|7(`UnKn%Ee3>vicHp1w`|H0A!Q zyg=jdU}x?4fV6`tJ`kFPh7!XKdpykBv^kbv`pPX(HBJ<~&|Lna_~}&}f4{G(V(aCE zhp^%5H*|IEyet#{idNO9^+Rq~PZKp*(u%Zu)F==4Un$NH)%^jhNqBmn=jy72(mq%c z&c*tcJCIDr_a<2s+ltdU;KbC^H25G8@C>+|t@XL1V~Gxrrmn6=*(4kRm%1VnJ)hvl zfCXm>17?W0;;i4st@$ikTO}GcEVsUn%>ttLw;)8pY%m~etQZ9NIzdU5+JMy<#x-ri zoOW@Z+VYL10#Z{=~E*;)<4QnuC&iwkVxdGIU^&GidxD51OmYpc+)5|>%D9BE(Q!C(%F@Jm`~zGDRr?%g`*spb71~aERazfB?&s~^ zTz!<}XeWt#w9j1zxSpUl&ge~W6O0P|6%p{6fiZ%C1^+lAN}g8cG*Ys&p+E1f^kjpD zM;J11X->AT=6gc**MQu4$9WbkU7{64E=$T<@u4cAn zYF^*Q(Zc$mQ~T0$>Jcl~uGLCUGaj%!o(^eWo~C8F)p&5q=mGF`TFR(0AOO0F)Zl=* zWE8`tM;OQ|e)Oi@5zw!^fH2(Sq+2_ESxc#E{P6n9sl3=D@FBlVWGH+5!qOO9wDlXY zRb70>BuDUdr+X07ox^X_*>G;()0}SGzp+~DWLk$nd3-%V+6&pTKp?R-=B|e{A$HQE zj*tpD<&*EW$_11D0lXGkdd5-21|+^8ZaL;C%jUs6@6=Gq>vRRtC1-IOzGR?BgABok z+&oS2O9L2Yt%)Qa`@8o1cDJ{I=va~*6O@-*E7Ei}wk}=x-n(e+PtuqC&!3YOmiI4k z^WX8dtM~J0;BPBE{*!WX)r+&_3cEGu*&-a!RaqyWr1bv>V4pVw!In;bq?6jKrW5Au zwY=SotJ$jsPWnOLxh|sZKiCY`qaI%glG5!bWxISzTD|lWu z(=PkQrS&RJ`cn0$#urFPi|}eIR+wCmj~H?;XVU@!euPo#o>-iiS zn+cr0FbzqQY_M#RT@YiXIaP(#uQLeBG%#4Jl!sQ8Lj@I{h99M19LfRPgNQtl<85B} z1!2^Fu4BSs`^`Y;|41Y5KS+dkh^Ya1tlO}s@B0YEnLrK19CP)8MbJ^xQ(W@1FS8_~ zG3|$yTAn3Zrb79YU`C-4zIu>>N)o7kcodGI=XOS@+tE-^(>mGF7*lEha>L()0oY(x zz#}kc3V_TZ^^4m|D1X@NBft8_JfjQVDk+<)As{I-VSw;+L*}7TmE#p^C*+aHvKsIF zC5r+j*IYMf+`O}aq3#rmUbIUXGd_8id-Y@gRojv7U?sA?Ik=>#{W4DL`CT=3577kK zbimY*Nj=?biN7VXEY}Nf5;ONtjQz%FXPt!R*NtKnNtvh~H(pPY>K)a1zh!o8*Xk2a z3TO^fWjC93@?3mDV`g)>B10j(KrEYQ%T}UOZu(kftYl<-LKDtH_%bp9584VYMSy~_ zMbg{1wOewwk!hk5TDzlJUp-N^oi-=wU_G$1vYvr=o3*=}!zPT#&4tpfqP-%)ijWZu zni*a)agsU1>GU3&Vh0(h6*qM7sKui)A7W*qZm0op7l`nVGadFS?aZj1|2;PN9Mb8f zgX}>&krHH}nF^g6Drh7os{9Q+NS`tg3LFPMd-AexLL&2(+q6`jMx1p{hu-|_j*sh4 zI_~uBtaxfVe0fO!blwxydK;s|&Tsp{NLtn?k)Fp1Lio7cJhWn7ub;%nxYE&vzw>NHh0dL?Vui~c zPVXrX4$BlVE?iZwD$?yS8YMg6dfbu@&{`WdQ=^e+520kR)>kP738$L-*(= zg>u}wTJMgc_Lw8oaBlWv=HAUYkAsuv!S_)wyBCNRVos^xqK&dKOjyHzR|r|UUo>*` zSQr#VhP8xW_y06}tR|9UPj|C?oO3y4wf8U;!wnqqfR?x zc|)h4U+^|x`;br1W^sZ2|F;axmXDqHA1lG;zsPF0VHtQu*jqU}(`|KyerA6@Xn;=N zTCZhjqheI5->O*%;|kvWiy%(J&Fe_@-Elyak70h|MP?!+049n)*T?Td3nXKaI%)uORrmf;eNPS`ZeF;;P^ z(x%w3kXoTFyTxKBZHYp$U0}WaoD`-qPXY`3EW1c_v)a z!Tju3GFeTbNgiKfD(4x8gv>vXfk!Ob@-{E=*Q4wM8C04439^&l85>=j@vqzHR`NZa zU$A_E$1XbNRNw$dWekGS=MVn@sw)sQk;rVSjpr9ZPF&zfxD~f{((pFWHN$?;TTOwL zjpcK}ZYKB5^1G)GTUxF6?h`fpz74a#OmP$sQyBAk#~YOJwwvb>psUcXEb=_TR4Avo zcmIc^nNac*MUa_6PNC~$u-@0$W16W>-NQ)QZCZER<;D)2^oRTp+vY*D+`jP zJVEQB`q*Bp`$6rwS+&g{(9B}{g2iV}m=k{e8J>60t1{~)z8v&dD7uxyGbBiAjKu!Q z6Y6nS*1t(nM;j64IER());YqR&gZ4-?JV~R@;c^=d=GjU)@Zlz&l(AfJP(beSU!WuB*B9yvT?{ZMkRl zIUD(!JPi$vwUP03gTsH04M?P|{mJ*&@I@V7Ze%^ODE$w=im+<_vcN;<)7V4s0>`}d zXu{8T_LlZfg*b>?tmCAy)%-`0B#zKhhP$e+b*t3yqF?e>6CsF@WOL4$zdh~sLR#rU zy7RvDNJ#SuuUN%DfHPWiRp(?~HK2KZ$TwY7f++X^?etO*6l?57b(w~!!oqcbq(hye z1rkPs*#cpzvL@4zPdDTNTe70_vdl^J4P=71&8*k`7$ypg=2zWkpu)yL)M9%T82-n0 zj*O27HD7c%xEvqv3^gQtq%`S*t2ZjzM#nkN0WvBc(V%S64$EQKzLh^{89H0H8fs}a zi!Jl_BJR4>bY9{&`DM3nBkSPLt-rcK#V0DHnU*3LOHJNSUo2Q)zTgAyL?V!R>HM#% zWrUP~rrxK)F4T1_1m4z>m`tgMip$aZBIhvI{b29qH1&|EBBLK_AD!5hXIMYE8RSkJ z-n86TJE$-@%qu->*+8xOj7=KDLY5Zy?67*>*|*+YO@F2#Kk($Rk?AYXmC4AJ;Twk1 z?b2rbUhCBWkLRuhg~*zs3M9qdRjBLCo`D$SJZJOls{w-`~c8L3)R+3(w zd;7Xi-MgYH{6K((R2gq4V!$g@sk^zsVErL_SM+1n)-7b1LO0JKA|2RmgMe5&lQ2L# z=$YNL$45#cGO4P)YZS)_;|rdE@y$}h66piP3Uw84*M?_D;6y;r29F_R)}h68-OI!` zoXCygolLrkkwoUN&4eYcF(E8tT2{AWA+StcKjlY+nfbQCeC`rYGMe2={Zv^&!N&}` z!jNLG?!ol{0RKlYKZhy5Wl%>!=X zUqZO>k}Jv0Z*tWiw~K@)`0vufw|BIo9Enj)X-TC+{k)i00%4&ll<7b>p;alaP)E6Z zfg!VX{zL~|%Sqw$>(NSII|*NT2EgNSuCp72T$Y7@D#REXv2CdLCkLkf4*)^$ozLBz z#zm~QHVn(E4_gX&cRVX^A6QW*^g_oz+cvk1{WTVj`M7E$R3Mw)BgYE%`Ry7PFja;N$+h-o0`A~IyOVWfdsF*3I zzao%}+dE?~WL8HOC9aE1-}|?ram>hH-=%5tGE(a7V|($QfM!m4qsRPn%gch<5sC!R+*bj zjlzSJG-lyIhQXXxc$N>JTDg{f@H*tBm9TUe{!CMj%Gd;2=8&PHaX;c5ZCdZp0hKvx ziVj&Gn*9r<^kJ*;>8x3_m}g#C980(_rpA?OmNR15)`a+qqvTKsLCJCV>MDLS`I6-6 zgVh25mDAgMaXQ!HLc&d_t)K7>r6}*0F0L=sexY4{N@!}j^z4(yamMNCS;+`uFwYi4 zSRzGDw&Clmbb(HwoEEaBx=x`N`ny?N%gF-^BuIVm=W>8U-g~UGxs9-F>6gFk%bL5k zRQAY4BQ7CE&eqLyI^SwfY`^t{d&xBrstc1uL^&T3m!I~iBqThMGmo|3;5@pf-6XB= zvs~-m>1w@1tsHMR64`#aQomEiL#)0kZ^GP-w0O!Bi+P$%N|$Zbt#~F&K+=BIk}7MX zdo$*VrCf#%8ds0&44P=Q4Y!Q?j+gX5c@RB!srS@_)KGsCLJ$W!im`NNv z?Bhv-#)FK!ROW4=c=7wdd(a#ofFA|=D98?P$liGm@#L|4PNBkNz2GGm^WE%Bq=jPX zmHvLJuuS{U#SMC-rfUb~^2MP{t*A)g2k+uEQEwtwS~r^t#E^#Tgp#U7m4Nsvgg!FhJ~C~--x+8Np?^jx*7PnxD(VA_j+eDGrN)X)q`nB+K#sq- z_d_~gM=y6l)Y(2pA1wEE?l*J$Xm)DH&DT*cMbAkk+w|z=z^(<$84Zm9y*gsX+XUJ! zOTyg}0VyWannW7wB&*gxzPRSgK|FpV7Vx1+$!UC5ec7qZo1E02z!P6?S1dr;f|32uoF;98?&geP8FS1-dnqm(YnG)`K7M!SQKr60e0E>TmbkoQ z@{axe!ucQOcZBn6j3oZ!KJa?Q7+xwK3P2uK|0jR{G@o()$S6UxFF%HGUrn}-;B>A+ z$@>#M2l$)NQfAckvt!i1v_Mq7Y+5AKFI4%22YR=W+~k!QkXPaKm)QS`*f`h(cp9vc zShy6C1TyjL=|0(ILcy>YP_{8tXd^YEhYvP+0DCif71A1nfH|GAFEUk0H@KDprO|xN^ zLF{CrwYqUJ5pQ8VtZ|_Lf!KAcE^F1FEByOq-f)CZ7!V>sjHrG{YwY?`uaSiG+^FDU znU06KDK0C&Rc^#D;}j>ru1E%GWg=xqnqQby|7Me^p%7YH(uYNcTLQ*&XbaKyUNO} z-~|(%k8FGp1eZ5LIu@7rL6C&go;P8rU0&64u&aPn^`I5+eXpjHqK-$f=6pZ!Cx`C7){JtS+>0 zgWElTPJLlU3QhNF>`dkAu~mL5+`TI#s^Hszv`ST>?7~4NlZImz_o8v^Oo_ekbBPY|wdT2v z=T}w%h*_094x7`rFtt_6%`tV$()E-Z;N;nym)%3DoMj|oif81dk&w^gL3@a z1UG*cS)E+`xC!Y2Ua4gZ%~l(Nkr-|28A~Ea-uv;U@t3fsXlxauGJ1Uxp z=NZ@2J^&!@74XN>H*;m|c-E??g;4}TS<39NQHEE649cE`q$nUpfCFin;F$NIiH8)2 zIAxi+av&{$orp1ZWC#ep)X{+$A84QiOAr6o9EtTFumiwJ0r&#^=h!aJ4=_xlTF!sf zw(a1hRU1DS z8fri26Zbj>{|x;nc}4#D)3Na+w%SU{{6``gbGsSgfh_FbD|gRjZU6zI8yT)%$!bXt zXT6fV)ZDknomRis{0a3|8}$VYS>3{~{?VY4Eez zdJQo3nQA`Q!86R47n02VIJ2twt60@QoqzL-DQ^)|s)pJ%H? zH^=pmFRJWQ^!4nel=~$&e3MmIdmaa8=jf0yR4h7?5jZy4*;&WH#d&yw+i+1T;L~cBki>JZ3k=L&nz@TIac69_=90>dZv# zXYz;fPs=Z63z^@Dn$A%Y?_GPDL}u;n-P?+{7^A%paCGtiTIe1;$`5Kq&0#@^)G!&} z8r9qFjn#IyL}A3LQ@Uxo6~(!-a0!2bN7EU?By^g76*5*1tsB%--#p?tB0VeQ#l$6n zfc~b;sEkWl#S2^}W0(b-7uR~qpKoV!(f;gTBE=M?sn(y2TAH8MS$~)b?FhzYcYRe! zYP~P38UX(XI8_^N=W4#O8swB3z3mj(;Ua=0l zU8fr*E_WU{{i)$DOE0BU9qZAImLl!(#lQa*Wp_UpAf3f+F)7$tC!}8=zad=OX*(%+ z?_Sa_6nQfB1EBxzv2b`nk`>rLy`Eh~w{y~_JNJp)wm8n9 z3=zVL;qwCf6e%7l#r(ex#ikAUeJh#I?KCnZ2YjL38Zt8F-)|bZ$fJOX^pT_^SsQ+93e;hhw@&Et; literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-3/011-ICON_Alert.jpg b/buildroot/share/dwin/icons-3/011-ICON_Alert.jpg new file mode 100644 index 0000000000000000000000000000000000000000..603648e864333acdd8c65b888ee8666f3d7eab4a GIT binary patch literal 8217 zcmbuDWmp_RwuT3n;BLVQ4#5Tp5`r`Mz~B-*$PhGv!6JBY7&N%MPGBHNg1fr~4G`R& zOLp(>v-kep>i$vv)aldR)&0Ho^?8_i_yr&WDXJ&}P*4DX*N+?EVICm&c=X@3ze)bP z43B3&v;l~*|K1cD3NZkc7zK?O<)H&W4?qE+qM|*H1OC-;a51sav7ex#VLXmY69G`r zQP9u<=&0yVaQ=p%p`fB;U;?m+v2jR9ammP;m<1@QSrRA&gO>q6?Mrdgk{i-}vf zzVrH<|1mKN`eXioWd{JTFfg%k(a>>F|6X667=VI?ijIbXfr^Dg{5J>%6%8GO7=VdI zLdqn7jl=xPf{cPiP@CM9S{D2J>`OJV7hI@l@5LbN5WZ2CQj$>jYch-EH86v z8c~yK#vg1yXb^8`%P4E1)f1Lx^-mj$PF~OjS3S|PCx>&IVbg?3L4ZBXwo-?;ZUSu! zUrDB&PRi0SkqU+lXDQir_qaffz;*jSPM;<>v?w4Ok;3W_h$BJ7dqT%piEFz|d!zK2 z<1U|EA|_idV)>DmUvvl`!9DJMproD;cj%^X+<=ic$;)1iKeu6 zo5iE=#yQ{9#uOGGvH{zlos*Wvv3yTJ5<%mSrI>7L1ypLsAwQxU+~qyE_Qls_TzZfd_51ViIe7l}#(C}!BTw*W1ny!gDsyKRE!?F1kzzK@-DAI@I zIplfu6r1kPOo!?uv8d+_Eh`Oa6F_^pysdss&W6JEIkwSD9mleiNW}p8-&jX?P&=<| zZ^c(*@&boJJi9hN!dX~)eWCVCpH{f_2D>&?Tw6OenAXgGtODEBo{!@Rx8pzmcc-g! z4%$?+X!^73xzV!KQ%_5vW@6Ws--`@Eo-`jyx9}m0>Cg>Q>~j0{EGy=#l+fyy3I`D( zmD2-ZyS_|(`|RtO~i~I+m0-HCemwGIT6JmID4NwA6-A=RDZCgseK8 ze>GN7WW8*z%Ow3G8G4vS!rxQUyQ9d@G_Pq<>gwdCxL$7XYg)FF9;@D!%$I;y#GsvK zsq1ANmpHxh=r)V8L$>kpduC>24Y|JN(iBZPc;M`!Xl#c-qXfbwD5U3{oWIx$0mTpX zMYT^ccO5iIb%pZIUUJFMF=8r@Fn(+2bmhQ?);*K7zGC~U>vsCKC`aga@ze8jF4lpiMUYYBs#$tNO4wrLcoW9O0HC*^Hgi+uWFJt zxY~HtTuD86S=RzDon?}5mHcf@IB^l5Mts#9P>zjob)}Q)wIe9?H(wYD zCJcOx38uUmY}Cu?6i`amct7s?rsgh5-`c?|wp#re^(IJHleHqt=>xJI-u~VCfOEP> z`!@??cM6OkqeDDe1k(gX$X&iCU${hzu^1PIj-zZ}$?set)?Q2?Piws!tz`HrInUQV z{8x9wl~vYaw{#Y-J?ov;2umDtF%!RI=edavLwnJyt)i}-?1>+iN4s7*IJq95kwu{@ z;J!dOPhW;&oF#k#xzjiWLmH$dbDeQ5Dh#pCeeEugRyfbsylx=<1avQP$C*Ij)0B5rQX&i8tkc^#ecf&)m2cH)Z*p_4 z;Gxw+#33Srj7?1>pE&1mzeIOP z{edacnM~f(0=iI&R-spgJQ;ATCN>Fyn7;He*zwa8nqJNw$XK5%H_BxZ+1z%}k5UKa zozz%8|3xt;DtUTAy*Z;=g^TJXgBR0(XdKmJL_{-+)$;DBr*S06R92a@Ar8 ztt=-%0BIXFc3(G%O!4a)>wJ)Sd+xAbh&IoAyBOKpUbJoi-FRM3(L~$nj@ze2GuFkL z7IthU6QSa6_qB#brqxhGrpG1IcvhH zU)&WvHQy|Z%O|oU{6s6aZZ`?sPn;&FfWK!?q2W|CVL6rQASLUF?~+^0E5v!8rovO` z852Shqx(vm@k!j<;gr4QpG}kR^`FY0c}|!r-kpg|0Iw`&mNgi_6}e0Jy9=iMxdpwp z`_6d3WCB`dV<)H zq!!Rd*}2txk^yIXzrvDN^WT(3`Ck8pY5AKc_M4ORApc@82wd?svLb!)75;ptr1pio z3%7dpu%Hvo3f;CYg+c@;SErTTbSy1%MUT3f7kQ9(uBxLqgaIkPPv6Z9y~)42hnI+B z@z^zrgDf{`tib6J6m$^joLOC1zQE)Y(>YItl;=~WfZymZ(z5N@>Db%dG6gQ9ZU-Js zh_mXeBjB&of6%mgli<0!dBgU9DlFxG#!t+|Mu>6U;`5L?^89Bgj?5hL%s8ZcMKOskS*Rzf)t%ua;ZhCx^L8}ld zdiH3GI;K-yD^G2%Y!Pj#Kx=Il2G*SkdEesTbJavMap8Efid#)nM^Te9^#Ss5xN}a+ zzd5Q=mQXkIlA9;jkta8Y28vA=Cm>okX9&e-G~`fLzWMMdN3d@%JH1l?xq^Gvg&`tt z>nEy-$5m}2561|{RXK_E*%Q`2HvNV&Pvh*I9(mCM#@OQHEez8!mrT`s+|)OrSglqK!>_h84u^(AyT{loD$ ziR#05dR5JGXKBvWp~tUgBa!7!9da<4ev{Q9Z5An`R=&W*9g75Iy<&J(}hbS54^OErL0VNy8 zlXbGyFa`}DrAj_Cujc#r!Q=ZBPva~^AD0Vj1h|y7M1)RxUr0Ps4Ex|`TO^$Qy6#4e$wrh3|+bR_>#@kZ2D zdz7=WkKJLPVRpbihAX@m-5y#auY$uRV3He)STaZyKKesZtkngnMN z6#ee`=#5=cgk9Vo7QhoDn4D8~LOP zZ5U)bjo4Q-lWGa6H(!g zyH2JWJP!aS6i|H%z*FqIxzk->S?3mE!?r;W1R~Pj_HKte<rG3SiRu;^e3IVvzJ`ZEq{wqR z*M=y+Oci5@@Yb0FB8dLiTXF|sjwul%5ezT0qBEA}3hvmg?&nT(+{mA@OS|dD&{s?X zBJrZ#PI*MSK{f;N9PmYXa#z+e)R@>RM(6@AoY*c4!>0C1i;DeVO<9wFAol7YYX6qD zN-E_6U=H+OlGY^LUd767&$OFxuK%P|KfjqlpP7H@1zX&`xbm)@TvaA*xmH|2&Q3k+ zKl%epVhL-U_e;bCy|o=|;k}=3dbd&^0xengn5erooy(~lZTPg@r~5fzu>QU!xw!yw z*pU<(vu`(kXQr(z)#+(vtFumC*;Y>>MD>+|XJ#W($yte+t16s5F}Y^(0tZX>hl{+z zl>NE#q)`Q=Qla2gMv-Skt4?&9U_@Mwm*B4+XSE&+Q52}FR#?lhUnQ_H)P;;A!r1T= znj1BEDsoVAF1JT>l3N7?*>VEC_r$V6Mra?nAJVE<4!b$gEYfWYQz%5?@L5KFBhOdt zDXpc|-~C)w$zu<7;JTiuAWa%@mY=^-^~8jic%$*y^@)S5Y;mo?<`EPWC4MS7MUzHW zB|9dCx`y$@AVw@X6>myt2Wb@P3R3f57Py`*>oUy+#*4wlpgMDcMMY70>v8zcpQ4Vz zcOBbZYg}oB&(IlolH7R}LM{3%#Cy@6Mhj3JA8m!L_XH&o6~xKk%2i}>2A6QEZmijP zYc$J#;VhSm7QG3H$^JT=_L&dBw#n&=ojd0Jv;>AP4bq*%A49@BgzG|b@M~<9@;LGa z!Tvl57ZwxWGB$JaWu&8~SvD_;I5(y9Pgh)DEaGmLKB8*}fyN@Z)~Gg7kds9Yg-Os` z>?<9O{1l$d6dSq@^QLK|0ewdycXHc&lOlfKzP#@I@2@1ZOtm>|nojVlX5@GZk7%Gc zbiwSHX{x;0c~98t0;7wocKlQ}HB(sEI40TYl22+cTO6dMe!%=%uA=#iJ>G`v`WBXU zkDsdVE{nGc9Gq9yZng%}x9aElXC|DSCv8fi)iSsZEV0|}DHpnw?=~(Qq;)O(v)8Xn zy|fByp8+1W3@*098oolCh})ZDrTx@Psv!ZX8FSFn`DZH4ckl1Sji-}5{P98YH4Lt_ zV;v0rD)D3KYMgypuDXXo6DIx25%O-m*dy-S0}yvA90ILNvAl43Jj&$|0ff|SMn(v{ z)4u$5@~vwJ_DV~$pe0M+I*n0y?w~ABzSzi<1)?OdzV`Tf8U*ev|3g`_G1`%f!Cd&7 zVX*H2b|^<8Eui*?pm2fiCCkss&b{JZu6#(}O1Ueb&`w~p`}meO2~|h#1?}{exb{!Y zt({7l^1*(1iOsvO&GDRWbBTk!IPSrfq3wyAhB2eYgsi@UVs%$*kyCLej`o(@Mj*}n zYvLXJ&@(i$sD1Zwco(mn30(Rb#<&45uEG+^3e)8G>}o{p!e43&N-FL@83N=R-O$pr(@BTQ zfXg>!o+@{)`q(*<+w#jpyFguX#rfs*X!Y7=Ls~?RZB)~G+3xX4t!*;-c;6~h=#z4} zN;66t1I`hXTm|-(%J~`@NCa#Tr06s_R_~RWt`)PJT&)+QEGrh(B-VXJ`*!!93P%Qw zRqz&btp=V=YiwWF9hK%G_nNhcLHZ-*AD5;xvBY$XU_LeBcA~w7=$eutSeS|h4-`7<0 zx``ufIzS}#pNqYUYnDamgGfS?#)*6RaB!ij=RtKfPb@4X#GDYX-={6Vf92@@J=2l2 z+OS<4#gU;@iSdBy;jtPH)RYnBZVKTi+THsCJzHX;)Cp?%?0AO&5ex&C4cf#Sp7ZRft(*A`~cwo-KW^0R5@BBtQZOku6xsG?2$t1>Ij7Ws

6eUp_xTT+)#RVio-L7kOMszd@(G9Esi$%IWKz=E{yzzvM2tc@;g)4;E9-9fp2O( zr$L-tsX9kCMct9E$2D+Yed!HeAbT$_>8L?d6k*8t-aS*4g$MJQ?%JcBUv-O=rQPVt zxQdhXAA-LCr8?EHAIIfUeYtptfLH1jY;p~1Ahpe|;40Cou#SY>(8}Qc_nXvFBXW5E zSRal%evPZx)CqsI&SqknT2wiEwtgKSQK}o^_E=0l-n~o>_=7XSexFjc{HubvysoJv zU?5XHU^zAHuBmdBa_HsSRlv^b17J-g4Es_lV6(ea^WLkwwIda3W#<=t^>noLG6{U& zuhFT`_y7pecmP-{-L0>U@EiTI)Oq}*!hciwNe6^l8<<}DO^UPWHX`3dI>c}?I($rF z=p`>p!j#2y66A8@)c&b^Q!S#OHC3=NHz>0n2%~f4UnmRUU7xEGX9x{e zwLwK+N_Dw71iD)<&*BQ?#ZPS%TAu7*SxX=Cyszgo6XF+;l>H@5%0WwQB4c)PQvPYqf|y zC#G%g=lrbR63DftE1k|?D=e0kkmLKE8(v#34=DX!StF}*oqK-w1btD`iss9)@L5&% z4U>)%Pp0O8ns1mqXK!Mv&U_|9I&?kNIo&?E=%zaU&B28Ac+vg(_N3$Na;avlP7(he zUVDPWq<(XbN8$3^?QgAV(%_%QHXKl4!xUJwRtyrna+K-9$~*ifVeuykQ7ocx z#P6LzJIiKij$G;kfKYY4fxsml`p3>OYNR=5Yr+Au#(}U!_|Yc6t5y!%FHr7Z>eYsE z$9#?N?wfT8d8W8ER9=BsnDN?qDe?0M9=GwWgg)aa2~1HG=PV$?HBSPG@=C_=w+UJ@ z<}b7jA4{3D$jg#{)EStqkil(JHe}2T0r@ph$e`a@k)v_$(WzndPkPq7qT!&jfcg#Z5gsYh(p8;rtV`0W|vVDNy($z(EsynbR?u~|i zk#%4j0oULolNsxo;t*N9^+ZL-q|PAOA0S=-bdabgQlSw~d)^axJ?!Xyn~8xq@h&P0 zrK`qf517Al=8qkzqKm&OaB$YJ!!A~~WEvYMYjA6R+ zmEMIA1FlHD0x`|d5)6eDfj9*EQ7ROPLnr!|%NF9AY0R`=`?;C85cS`($mTy^z2VfR z+f~uja-E@%um56y4(ev>6Y`=~h|;v86Fx0ff*1oupf8YdWy)(B$O@Qhb%I!qUc{5_ zXdG?4^s3cV7Q{;(s?k^TQV|t4a%di^vRNM0Y&JPn)f$`+$sRQ`$LoV z(a2|(9{##X%6vWXf(1AGWO+<%-KM?$t~MMXFm8fVLSU2(o*B-t@cM^@@Hm+*lHfK5 z7ZN9d>!wEkXG>x|qDQwUw}zG)FHe4_3!U6Mi{BPh03YJI|s4Ci~R?H{}sdSP2sPOiQ!fKYgp?pkp5pGM~C~{GhZ%G8kg&juDn6v z`{K8kza`DYr^kG%5mGO?>I_By*pq*}J@2`syU>(U(7M}pJp1nY05I}rxoZu00Km!~ z09t3mm(R~cFE+yh3%j`@@j)-ERf-S`85x%isL9~s4c zlWP&yU6!_UFq|n)uC{jFa5RiFd~z~O7qFaJ|3achL~J=sXEfpTTlWd-!CA|0#NzjI z$K|nwZmG6o=i;leo(I4mv6X@S_n!Bj_c(QJo_iSw-J zCw%lf_Z;IxM93xZE^K!q?6gi{OEFa^)(I~LB7Tk+v697w5XX(x#l?Z06n-!svoo+u z=}chjK$r=&z`a-pn2_p`{gR7X$NHgnBC)Gv-cX>nF4}}K%{c~-SE5JB@4inNJM;5G zw;N7BRoAy~%Lv+;TkjE0s$+jnsabNZ*r1uxE0yjviy6esHjWoeGRBcN z{QVi6HBNQ@A_2Hsyul1g90>Q3U?~InP3`e?LJB9R+K*D>CW6O|T)qd#!4YnG?$F-^ S>pUgX0J5@$OPQAsv;PBeD|jOS literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-3/012-ICON_RotateCW.jpg b/buildroot/share/dwin/icons-3/012-ICON_RotateCW.jpg new file mode 100644 index 0000000000000000000000000000000000000000..36f404b9c963676c0e541ce35eab20525eca96c5 GIT binary patch literal 3291 zcmbu7X*|@87RUc%tRY4r%TNs|rb0~CvhQ(`eTlJT7t=h*k|;4_Fk=^agh|ZUhsZv5 zA+lzvFv&7xO^LalH}~H6_jk^l^EtosJ?F(?OfkLyyheJ4dH@In04^s1FlGSllj{G| zKal^Aa5Bwk10d{xEFcR8K>#KQ2n+!+Isp*?00ZEE&i#+rIlyeESXfV*lDq(j1z=+O zuLBHXVrF4wV+S}Od}q$`U%Vi9VuONCJWSyKWw5cbGqZr0IKU@u_{lmZ5SaNSPe}g= z!~|w$0azhyd}l6PWIrnh)6_EOchyD)F+KrYCmbdS7y{e|zAyl)UNX0^nt~7U2LmX% zHMWzhkR8V>G{l^ID8HdJ_>r;(pDhK|VTO94|6WK4) zir+DXO6)gSzUN!8C&KvOhdVZx9*{gOq$*Oo zKlHYrr-uf9tO%C6=SEqq5{;+EMDoL?kN1!&FX-|UpXAXqEf=suM-g)h$}{TLLok2z z6tO>CS783rV4^X%t`5gFzdnS8!5s=jc%WZ~YCyu7OV&^tv*FldaCqsm?9FiBKF)<}YcaXdQwc}F8N@wn# z8Xhvuhw{PK9A}7a`euoxoc6xbs!ug?+I}qP{@nlIUz}mP_RhA`-3?KNNH}dTrXLvw zjk31(Xd!URay`?*fMcY)ae)mEaOUUEJsUFz;dt>{mI=t!a0kN8=t&y6+s&&51Lxk6`O2kBF_3vO3-9lneV#IWS7B?4Vdpi z>m`(ran|)Nzu@#l5*n7>+!{N;Z@aL>09eQ=W#WNfFe9mS^qnBtYu&$_dKb19+mlxH zrmE6kz5*(-9pv0}ta{-{hVcPc+R^fqGN-iqZQ+TRZzE&(h6|e_%W;uiqWCJB)82r@ zilRb!e@vy&>R)Mgx#O1W{#0eWTZ_)2FRbzMJ?ZX2Ej@!|8)u!#-NPvVqfD*QVQlYA zzjKx%RyL^X~M~%_>bLI?&;mFq9#+G0E}k>0u9= zg`FNb&j_%nG0rm7?^zRp_aml;WA5^;vbWS4l0K5o3&)kk?gN@zfIagQg>h_t@WK1Xkt zjQ4NK7`lDl&7}NBcL6Tc(;flJ7HkpO6RC=Q>wIlDX}DGU(VrB0Y(`{P>W*v6Lz{Wl zgpXXSDYJa1NEfFuOwlMTMC4p`js+-DB&T~!gcXcL-8GUCa#x%PCVE6SY;hPxa6M7g zPCv+CE&-lY*m`lk!pRYQhVlF^g7aB;AN6)V>~$;8BdhX{A+<8s<>4MyeJ+Mu5eIA6 zPyWc6n;iCNYlY`(@+if{C){QL{Z9C|_N!_Xir!c{J~0zzsuSFinzI;DoV@;dyL)Ag zbx%utZLx0YK4_$r0_TC|4W}n9XwB!-|5Vv0IrGqjTW*nZkJ)DRcS<*8FTgoExb|LbvQM!7TTb49@TgKzl> zlssVLY*qJHF`d+l`obIE`bFioURHM?%?yZ?l#ZAfkb?LfD9ctiW$e=#dp4~;1;Nog z$N8!7e8_!4U*twNXI$?Mgvw5(CXNF8rD{St)fU$ya6a#Ok_fl-6gTsRTdDekm6p|> z0KfYVDh`m;5SK!o;jgc7#s2MyF)$vyjGooT&=r&xUBXqpQO44>dhs zKWA%N-0O(C&ab|iuHEMtWPa^WV9Db?n4o!H>2b%R+~uHI{><}VQ}e{S9K|FVs%1~61MH9f_)_t!^20FYt!z!sOS2I(jzNA zDkIJF=hw4LxNpG??HA+8v!^r-iW9{py@~>3_1YY>juUyy464aatM|q{eC46ok+jUP z&4~6#ircnXxLjw6-ePx(b-NfBt^{_;y-EaeF()>F)?>77jlMng7&SZ_fW&&_M*A&u zZBfFi9ktU!^|_Iw$I*trl|KNjU9rB!4=69VS3%vJW5VmRQ6Az-$wuUK%+CoFRYDzeltF-xUJ&;Q_n!v znASke@}jC97mb&25ShF=!V&9^bz1P1vj*ZRPAa>hULRX0Taj}OYw8b8Hbu9KR^FX)=06+9{1H=xLE2s^;n&FZH&usO9v@VpjpY>?P8d>GvN(|Q)?(z7(T^18Sf zEkJVzA9U8BBp)&WvbU>+p#-1d=<|q&GDLOFmk!hPdM-Qf26@jQzCKKE|I!2Z8cB;v z=gcG^^@8)q5-Y0<8p1)O=FJd2v`;(s#TO%QBSoa+#Miy9YTxu$@#<5H_^aLwKeQxtI_qLY90bDrv(<1;Sb3|pyRfjKUF9OPz5=zEvwk|9rf}HD{5`N z+A}x&$@aaQK!fPc%$yC2{bV4$w^}5bHr#xtC5(RCMOD#{Gb&)|NZ|8<-i6hbB7(Z7 zecDrfxg}!1MNj$AMDK&V0|9sYks*RW6@ezcie1=IZm4;eWR-b?P!&>{de+2R`a^2( zCE-dEdJ)OvjZRcO4Zh+1t41ZL`cb6SDjnLaefpA>1ESCl?(ScjqBYa!5Vkp`L2X77 VsM;cYNSw0Dy`~W#{|d(RzX8=F_8|ZO literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-3/013-ICON_RotateCCW.jpg b/buildroot/share/dwin/icons-3/013-ICON_RotateCCW.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3dc443c193ccd5c9da1e759c6914a7e5df7db50e GIT binary patch literal 3300 zcmbtUc{J4R`~Hl5iHt2OB39c9VR5VAA&Wn|xFWXYD0-NXpZcx^=t4Q6bi$XF&N z4B6g9lF5=}-+tcr{J!UW|Nmak{m*l*>%OjYpZht_>F3jVfaA7-kpTb#0f5`t0ZwNC z-Lu>OhJQ@{H;1$C(>DN^36KNiXhC3r1`MJFgHGQ8f&f4Z(9i<^1tw-%7J3H8Gg6EL z0MP?9XEg2EJpX_eL_>GRF#*hAPA+bq%c5thi=ZN z1{x5J1uq;6&x!K6HMeC;Y!~@i=HX)W!|U4foS)%x=iBZ`Sk_Ic8anLirAPR^C|MQ$ z{4q$y1RfBWfnl=uGRNB_W6yIr6jd|`hQ!eM(q)1qaHKN9j{}ES`YEUn>$BGKB2tA7 zmIg8W(tedml+Xgsm>mweA7e15UO^5>o(kg~5vAzNHCdXF`le@X?8~WT%b_9eaOdUu zz`!cMT*Ux)Te%RDNoBzJpzf2KuJZcNkH1woN$r@R=3z=r@(Z}(hrQFot|goWE9FK? z%we|8Jl_o8X!+s1-9Bi7y_;gdsU9zFI?Sk%{c2;#Mddj5`W5t!gYRE8(E+AD_^Pi- z{&YiR6za&LIizJZAl`7FO;MjO(kNnK()KDWB}-U9>Ez(oN@7RGdxf8WhzuV>`UNIa z9mxkoA#?OK+1d3(%p-SEUKv)?%Wq3J-6hR=tODo)3* zbi2=!G^e1^G(Pcqv7IGINy$g#5@*PTE;L!t*{;)n zQ~zYtKjP27AjhVkcQ+y3tTBx)nG-*`fP%Gb2c<yWejv6e=J5p}RCalI({DXBx zZhC!K?ccj9HXmF|54xrNdDmu;C`t*hCxUF`;VX{RTq`#4x_Sy2E!(0~r1>)*yO9vp zh`;oyxg#%Jo*7nT^B@|8d}@D0voMzZ9GP_560tuRxRk$cOQ)wet;i1-znQHK13cxiHQRhCzi&B^R0ap=uz=VvGl28HxqVK<4+*i-dBErolu~3Kw)&D)D(Rhs z%qsW-N^5m}C|win#R3vzLu_RsDf1*aSA#}w^TE*=nxTRa+vc5vZ>OnV7JqOZ*NC=} zux*$csq$)_v~v0@au1<2k?bMLUcWhGshjX?xWs1ASgrIL#7Nxr&ZYe-oS1WJW0vbh zFOBXuheb>~{nlgBG#fd!?~&K{xE5ar6Q!3fRi7*zj#(0KcVb_R6sxDi3nE%~?r5~C zzYML`Trjqi{r5>i8&82Mjm&ZQA{2vJntksGkD)q?2!$5V&*~}J^O5C@%D+%qg{r&V zR}A)_PWN10aHWD??Ca{hP79WCO(j}eS`pe52x#k0w#+zH=E4HMuv+ctL91hXdaA(# zk!1T5OHb9UQ-C`8-nMoLkG(a$&+Kpds73cyYp_*e<>P|-&AA=~T7O4SxJL$;5FHD>ZgrG0s*+p%~f4scp@Ij2;X|Qo37QBC@IH8_)+@2rPJN07`7Ewv)o~* zH#NG3jE-RyFu&Xt-n8CMq)a)+T{COc$twPav&mWCK;LRB(Z*XR98|DZdTV|yfl6oZ zAW624VLDy2Z?}y7jP9RAUyIEuQj3odyd*rCb?J9gJ?Y?e|B`GTgW8~=N7r@MV5&$b zk2J!6V)a4nsHgIYa<}%X&?BU}^w!zhVE?Wy+`h$os;oS&8A&25ED#Q~M%txi+4QCo zBVPFqs#tQ=kwNS?A?WN($va^7{;YaL7v(+8JBE?`2~JXg487hk5c)eUBlf-+Z z%K_(Lnt*KH`_w9rvsVzWTX;Cj3Ds-$2(@36(InK?%?aGicq||{lq^pd^q3Ow7HiZ_ z-H;Aj4^E8`g7sW|tv>PKp(DzTdoPXURndxcVwX4P=;4#!-anI)6d?v?<HtY<>1Bdov-+#-9?>HghvP55-1J@zs%vH#)@Pnq*~6&U5XzI1S9Bxh zuf}302Nj!j)M7=knPY$Li{fH+&nv=uCt6%E4a08tEB#~cQimo+6+6Hqi~7siT|o|k zJYJ6c^2CE9N6*fs0t+knG9;xOOIN5W>~Op^Hnr8JKu#wGs5@9*uO0$3?X1(MlB(TZ^H&9)rb#b=4_CNRw_XGy(FVNRj5@8u-*BmBk14(5e|1?kBzK}Vq*Sf#^lS4zLPnn<{-#>SQ4 zUUkbGjc2oo{npoOXHY0BrAIk+Atw(Gv((FBz8GFZ`U|Q(Y{U5Oq*CkH<$%4(ups`5 zsF%iReMthb**aGfm{N(*TJk3OZu&z?{`(~lJnSry;jnZsoSgt?Bd9KCh?g@`4E=V8MWl)Y6 z!GEnjBD zkI8pia79?|-vx-ZkJH*u`v@T_%hmpHY324)z^Me%dJ42?{CS4F@VOxfT1;KtftPLfNcq)WJ zZY&d|di+;cr|@k6 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-3/014-ICON_UpArrow.jpg b/buildroot/share/dwin/icons-3/014-ICON_UpArrow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26b08ca10c13af9d7ead1aedaa1794c575469396 GIT binary patch literal 1998 zcmbtUcU02}68CsK`w7?n^I31s8Fy?gKe-kHDVeKX%TZ{EysXShqiQOENR=K&B10DO54 zaOVL#UiA0u2g%=K;8k;J089|j2lV+sFaQh#@xegcK0p=#0bsr#?f%dBgrNdLf?yt~ zaTEYSz+f;4!uMAK1kA?|1qlFxLK1LEv&a^hl(Y;lQI1Cd;{QJu0T7rUDkucup*lQ0 zFo+Kff&N#BrwHK(pfCZrpoFB7l(7k(LRF5uFKxh`14MaRU>F|^um(!G03x`*kbw|) zWSo|0)$|BSv!?bEe^tqu&l7DjSzAfzt_S`+jO2R-mh^OAcHq zb`(iy7*HEw-kX}iJb?Pj>6sCzqIP=AkW*VXYGcH3IA$I8WTto-+b8ZU&CI1+y=U($ zdm#&&Y_%ychnBo_u0taR`*mTe=ToQI*DE6~B1fw=)vq=hX}8(3E$pkFhDSX6q|%&z z1w%jjXng^Tr0|A<#w7R&Pc#%> zj}laqI?(t!q=nbc<<rvkbl2){5l2 z=N?^tw^kWDJJ)<2G7f)gpjL+G$FOXQi!QJ^v=ft zDOeY((GQdVg*deGfkq@v!xOOCI#`-hBD~eil)YcJB77c-KmKLZMC6ehBS139)3K*P zZ!jBsKXe40pfi`GJnZC}R?2?p5X)|LfcG(f#w|RH4cQpLP#0P^GANUtXNn1FTDPAK zXB$jB2^l9(w4+DKN?KK(=oC9)hGp=~w_UqT0(AjZqotF1zkSi26<@s+wTF&h7{Ib! zkI>8r<--+HS?#yp1T`hiVg!3a9jAV3dr)xfu|Pqlo_Y3iQCwJf)8oa0gW;CO>L(wl zk$kSRLH^+{b#tpT^K3l_l)^9`bdiPdn`DUoZx_D7vnlZ&#GPrUj{5KGjY#kDR=PWg zl-bZBChKTkhg7^(ab`AB`gjq=J`45yK_gO8xtq+Qt`2IIl`pfC0*nEgia>Yv1k$soG+QTg_&A-Np?yufur77&wBAmKXoz~{> zf|@yvkx0dqp}Eo{S=AZDDLTdGaiR-7DIma5gPv{^jX`im6Y)k@ld&07?`Blf%KJT0 za2-67O}`G?G#tu&m?N5iEsTP30gpe%{CE4qrctN+OpPo`$=U+(v#a2q&3C)<$hm+1 zB5W&}H8JaX4C0u=-d|e#9eTvqzszsK>G#gL`uy^U^W*WcS3{rc`W-)6D2>xp!cjaF zQb#>LKHNKWP>oB#s5&Hod%N2+nL}yUO z5kGFb5)oQvM!%9C{eCxy<|PfIcblQNfj@>v&N#n#L+@<`il6I-SLQ` z?F=fD*s!%5!}^6|Z0&X%{r!03Ju35{!?HFw(tO(Hub)xpd~3cQv*XifzIa#BUHzS! zm>Z+R1MXUNM)l?Ee}rwnCB9vNI+Vtz4-1R?&@~R|Qg*9Tl{Yu;sQ)nrone@AmZwf6 z+D~p>lNC}Y78(Z+h&}Wd_n#qM{>f|H(2B7I`|KKhnwVMNG_PwWwc=Tj=6}SNk~+7+ zu{O#W$|Kw)L%6Pld&!l2rguh9i?0vm8cF4hB>RNT;p-MhIK!w`Y-mNzzTVKE& XSUi!PF{24%a{*+{1>SFc$({WZv=w#4 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-3/015-ICON_DownArrow.jpg b/buildroot/share/dwin/icons-3/015-ICON_DownArrow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5587a3f7f2db15067db737a4e44d3e528ea2f80e GIT binary patch literal 1994 zcmbtQc{tmN7X2lJXaxziRgofTQA-%Dt-RL6-l~q&PEi^vM2FhV5IVM&l2BXe60~DU zMmDOXQZltZyDHPME2>%(OQ}h}@4ffE|L5Gl?sv{T_ug|be((;EalqPR0T2iP{DlP^ zOakYH-9N)OlYizQoIYp=;84H-Fc1O30WcgS0tX%NfTI8i0E0z<|AWXOu!NX6R7j#^ z0FWpc3`0jPv5Le4ab1(#P4>Qsd9f*{|1{vX6aV2Bu0LR84=3fF-_ zB481y$bS@I5s)YZ5QB>&pt4B0Bgain6B$hTsC2`FH-My21cr;i0V|;D08qwvmTay& zH*c$jnrqZ;o)o0wQ~i#FcZ|Bsl$4@Q@Ae}4iMI8IvyVK{D=H1@kiFcH!PG*mWmXu> zlpd}EB_ws+<(A*0o^EX@Rj(oHPt;6sRJ5HVeLnjtSQHDm_VF9Mu2#1{V9TA{{s^1E zA__s-u$(QJ(9WiY%BuzKg!08Ma@kb3E| zOE>QF@e&fs@yquJ8u8|YB6rXkwn=c82cJc?ez2}Z`ZCNZrSTKG}0=T6!kB}X2)N8;WeC_o;n@TrH^>an^&j3r{hNN-U`Mj z($*UB^-iC$g=TRsF^-xV&0^5!ZM|Wxs4{%@x1=Vle(_@$`C3`l?b=?8vRSt6- z<#7HmWF~FNcjrrZ!{kTh(jM`*j*Wg9)P0RQj_T17z4^g>Nn%Cps&c}8K2la0c-gf`FGhTYF6*8M)veS+aAJzxtkDvsCTsYcEQZn-;IEB~$z(mAsSx?7D`*^|4LK zRXx<`vX;UrueQQb51H3Dy5+6;nZ-&Kw#5(h%?f5h5+llgs~C^lXRv7YFWxig5I57H zxlk)vN^M?Y`y{_L%>PYSmMY9%hSV4!x{WMgBx^PQHQvf;{GvpUp$=551&S$S`NPKK z6Ut4xNqYBTp1-r>3D4B+9zHzI942Ki*qs@QI8p6NwS9S%(DLXB`xuwp#>OaFkk2kl>7p(LrYBq}JC;@JfZX41-l8RcZgr*J>pihb8Rl z>eB1{HOKE7(ZS~Gl_&?SLz2zpYA;J7i!kRV8d8dFi5l6+TdMN>d`@wf@noGosz+1E zUzE-6*D4_4P&!hu{%nujGeZ}QM;f0aw`BLx9(K`D>pE-A?+tFAY)~^?pS$1dyJ3gt zXAI92viJ`jp*BY8HZn zYK<#3zS>*~wFzXP4Hv4j`zQ%%k&kNF@l)*bzNLn8h&1;i@z7kxzpZ&teIt*c!3uQq zepoJkYtp^vD|pAiUxw|E4G6%+Te(uw)-_we;LKx<`p7q{Xfy7nm6fcf8S7=%oqjB3d z%ORg&ysuUBD_a33zx}CbeLYIyG+g)M8!QS1H5eI}&Mdy8??HW4NXF&-Fj>ZFaQt!B z`CCq75lfaMkt;9WRS`T-sy>6s$Hw7adDR>1_Jn?&%H7{^Oy zbLOS1s%0tMg;Vb^!%>^rw+CaHV!{5NoH>;Y;>vuhCO$;95sk5sv*~PTHKFJyuH6_N z?h%hx=|$mC)?7^8FU8j!`KgqaE| zAR99liIf$70&$3=Qf-(%W6~;l#t@i~?Wi|UR!z}Cj+J?t-)FHgWArV@qNz9|Ix5Ju zX8W>F;_l9Mm(;We9x|DF4#B}w1x>^R*|4iIR26mn)#daQ6D)+XTG&nSOO&o|@?{d5 YKA@YN=^z;z{7(4-+6z~PZ#bCv8z)p*1poj5 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/000-ICON_LOGO_Creality.jpg b/buildroot/share/dwin/icons-6/000-ICON_LOGO_Creality.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ceb758a881a87dd5e7b0c979f088568a1b6f64e GIT binary patch literal 4258 zcmaJ>c|6ox8~@FWF+0GgTegs8T!bP* zLegSORD?DvEiSTT%MIlnz1{BpLb646S(&FG8&2a?!xxbM;dKMML3eJ5JV=6hR{YGRQJGW zVG%ey3Ug2ckJUPWz-nM{Xbl`1qp7ZeA!r;VXyOq+faFGFQ9TJZCT2fkacBC-ABPGF z2|$^YNg&u_Z`-(>^YHnhL<{hz{tc47WBv<)qg8N~9Saoy#& z$^HZ)i$-BHS$0gO?_X84@?x@?fnH311d+I1H64VC1D!!-h6Jj9=a9(+3q~ND!tkJ3 znCK(9DkwUgN-)M~6HPU+I4ssg3xhE=!kZcsiJB&wIz(eER@+$fFRlsGBgl`&VE@IX z{>|0-SMGK@`1x}qo6uPFU>eno#q>jbKQ@8>@40CItKJVT_1|+j_^(_vHyQNy<^JQc z|61a9(6;%rb-9zD%}--+JD$aD?X7uW*Y}16sJFRK2(kWlKpfD&8^dCDvUH-qZbsG@g0SE)p5Rfnc76w6tL0g?b z=l8?_$lreez8x@r2$UBDK)!!JH+W$?pb#EDun+)1!8{NUOh6R+eG>$R@IZNCTy;J< z5m6m@qgYVW!C)h6Bvw<4Eq*;j3PZ`LcfU3yAK0K^LX92P#yQ}RdFDt+3Ugyac_92d z_ys^elmKC_mYfJL3}X~vO{vGSL<6-C?)dG_Akz4nrWVINy41D-ZpW7RlwouJ?vQ+@ zy|^T9>jfal%@r&R5e5tZxfw!5zwZ~iI-G}GoZKdTw-uv0V843!2224$R*NVS$tXLQJiR#V_SrjWL$ssELwR|WvtsovBs(eUt<&yT9-EIo zcv~`SjvgDj?iMiTfGdBOeYKFpvA$l`yDL&UWCGsOd&cvsLxmEsn_2wyjySlpK3iE| zPXyodDyTLhrJzFqz5D=0ov@!8c5ey<@k-g}*1pKo(B+6%5&Bce}304;~mw8kcUq|jd0%SIxV01v3)LPGO zj*a*05ltH#g+MjiF;Z4p8ElG_XyHFdmv%~S$wkdgwff1(arU&m9v;p{#;_~qudQs} zogUD|Lh=3ii_;Yi95haKOs#HN2Afr4bLK*HxlO_E=-J`>$TDTpe6h})cwyP5AS9t~ z6)j<;E%=Kg3E8QTXyhdUS&b7B`D(#er*nSEu!xb`h9g$0w|7QYvsJWKm2t2GLuD7G z-LD>Y>}fe!jgpu-Fl+9b?}=$SC&ha_k#>&1NT+j9aWuQn#mItZ+~rL2k;20v30OB2 z!Vb|HW8WdR-+~m@d#qALNLFNnoa1!6Jhnm1lf#5UJg3US{Hs|vI-cKTmLBW&Bne-_Bb-?LVRo$&L}Km?$?P|REB8?v;1wf zRN;jbVSzv3xk?`|0)!#UIr@B+{?41-h1BZsU}-|!=;~P`+Z0q%w25cwk*X|t_OL$% z^YVcFc{6;hRY2ZhglX701Fe%D{9#Uj$?P7tMx6R^kU>(-+od3~Xr86(VaaMcC%wVF z0Yh;<3IgEx=72#jp7MKx&-r=NUNFhEO}Gd-tE`dnajym$Bj0h_XuOeK9|c(knnYv? z+V4}5;MJIkbjNtTqbBa0Fs`0d1dJLdIGt<-{VAn|E!@Zd=)oo!Y*w^@qJ&d^w)HxjedFwDL7`?9e;@M{BLkLzmN{K7<`Y zrA$_A0Sf-jg@exK6hFYfDVt=XFm{Ft97Inv`ci3o1cIdibH>vMM z;{d9h&(lncC;~T0SYR3q@bLrf3SNkIPBACMrDN(D`ilZ{;-vCYaLb13*EbK{)?Y)v zDjc1ws!maPsa8AS6%*uh!uh&Ip^J&O^|=i@3HdDZ2_0o#A!OBtD6iQrx#)B1E(L?+eg<3u&7nzUfjWv;r& znB+H+4eJ6@&k5=R7HQdw(%T_o#@3u;Wlob_AN0MdCqFfz8L z{GLtw)swPTRd+1&8yWdpLMox@X?Cvg(pNgwf&6;6Wutjl6ZH7(J}lPdxDgu1TA300 zyPA)^)2e&_jhr7Vtj>=}d8qWE{?DgzGjtNVNd+mB?m_yJ^gw+i5!s;@KUEB38EHqP2^CsN}pgZ~)%+&I^CJg9UPN0hU69Jl#JKZGrF zC_jz0sCt%nMlEEQbcVH+;QQptnDbfqme^=L(K`oSC-VCn9nW4goe~AI^$l|ismz-( zZ^md3Pfs2at|UFE&48B%n;H^Z<3IrlFev_^1;|3F2RyIo8NrzD_94lXxNYFEG>Me7 z<|n(nj%OS4WBr+Gp<;QpU;yw~f}3AO16B#UZKYa55^_nMgXJS7L`CHwMe~5Ah3HQF z7LZo**0&|AD8c>QUGVLdV{%>mGW)##EZgI^b68i$r`GIOmQf9KSMZ}E{PC9fvP2Mk z#JNW$k^iR7E^q}l{zheNtYT-ex#oFd`>z5CAU@2oPwD#kt2G&N=m%E}G!N(H#mEA;=$|E?x!vev ze9~DeNSt1I-XbPuykTwGtJ>&tI>84RZCEd4=$+pEfyY0we4`IfjH{Wo92soYUN6rY zUySf>T*1O_y`Cs8JRP_sde_NsKJYo@3Hmp6MZc%V?6OjuR^CtM=ebH9?<>M8QLS{c z_L$vo+3%n}f)*lp3*7~SWnprHv4Ej1x}wzh%54=?_-)-cxkCM$Un(pID13Ls2+BaW!=T=SjNdny;@nDgap;pTXY z!A|9fOj#+@*|&a+xQKSQ=9v47Imel~D>k3j)vdx5yQP~tSjoK(AbK+I>dg+z-J^nG zGxr+ehrS(bzGaencLTl}r0Z*7r}^|i_!c0x$uU!ygm^2g~*u#}9` z&my$K?LR4&llKKzJXtHRE8HxCeoAvP`fw>O?|9YomRoU=(8hu8wo|VjJ-8QnF|9j? d64dGP`-q@Hdg1w;XB}5gm|PI>+=$wG{vQq1^9}$2 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/001-ICON_Print_0.jpg b/buildroot/share/dwin/icons-6/001-ICON_Print_0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8729a753c180bddaaa42b8cb2dabab946ec0e69d GIT binary patch literal 3756 zcmcgsS3r~568=MIg1Dj-5wFD1q=qDbNhn^5V1%F`h!kNX2^b;?DKuGOU0_j)ilH~n zvh?Coq#99IL_m5|s(^wbMVcTjH@J)Xu|pLgsC0NfEU>;jYNje)@^3{5UO)VIp zf7IU_??xsvA?Jx6B#Hrawx$*eArTCq_BuE%oVN+_0_pfAI`Q-+D_gfqWH&Scdeji2 z?~n2K^7bM!@eqHnixdXN-vIhq9K*A>j$u&9XBQ^f0BW=q6>=7L3SvT~6Cpa9x*Be9 zZ3N^9S`)6Tg+^$rLl9c<0ELP7*Pt-uw-ro@3^zK-n@OTlAX|#~^Hd+E z0hE{NUr+Gz{v!L2wfe>phx>O|FR!fve3oS}ZHQm<{YPPjZGblsWM|N#s#W3#KdH)YADEIdlH2}^<$`f=HPG`EQP_uQ{0GH zQv)bZMUzA#V2t2Krbar*BM5}4HXMG;$QX?>L+c>nygkAUi9&31O{s1^UPKCWn@jl0 zMSYjMH4a|hyvU|RI?0zvFr!nwAfKO&A$>m=o$u=X%_V$47v1l2VZ3BuTh0BZ+1p3F z3EDEhj4p5UW%!8{-o(>+qs^TGc6}aLfbfv_34yr%KqvtE0zRI_$H!ZF%U=NVfqCF9 z{96DEe1^~#guh^m&hr)kg9U^H_yxYX`Qq~L2KON#E({O=3K%2~@QH)K;vnu5;4bew z=gERWU;hGxgm;L51i}2G0-&wCZ?6DBAwB^Rm|u7|00@Bjc^Qcc3H-$b@qzgT1ck)+ z2=CZ?2o5!}rp2&}Z6qY6MDULg#&r4EF6o4Q4!p=bM=-ybC_i|cCk{TuF90_ZwBA!H z^Z`%164PGNu{Xo^cS&~f$Q%?wcVpN|{U#wTY{DXN`+%LieE7t{;=oa$Gt}$qA7AtS z#yYX0w%Zxa1+>nhJiF5NC!DLzBBp|y4$MiRK1|v>mabWR=iL#;GAmX?;ca<&UzELP3CW)RBt0(7Uo}ic zWGXkr#Loku3_5fL*xRC{<-zkI+V zn&N|{smjau4(^)^2aPks&ul1iQeWqqHz?YhbKI`=cblI}4wiUSXY}H^qN};G3zKZc zR6M?LiXx*W$y!j^_Ak^fTHIM+5|!Uzdc| zsHWD(c&uB@m88{wxShjZT8~A%Tr0;fAC-kB6BvDFPDsDm!BPr6tFckU zD($0rhVAi(+s)C;cAi-YsQLLoFRp~*>Kgy7aCgaSTDaadby$7-^Q_tzC`P58cJ0Z` za)%iDcV^i`vsLDPl`mLi^C%tnR17j@AY6 zH-T&GDZY4IgJe_Xfur4=ji-5O?Jwu2*UbK`IJF)quXca()lh8Jto(D!e!5C?&8eUh z%_RUR zI1w$WliIlcKHUkkT4OshmCOZNJuyQK$XV z4!gY6PL2z(tnn3loOI6ntbWK;Ye8z%Pp2NxmNd`xru#Q0%0=L(QlBU&46VJXPRM|! zSZl{zOaXbRwPV|&>naVB$U_NJ4fcZTA`cGe<{3JsTlP3Ota&r*V4_+7De%PMTOVs+q3fE-w^Bq3$-{mMXU>+HKC3>Jwff0-S?YDPOYP~r^~=K_0$Pjl_|i|M zb}!DGcMp&Y-`G#|&5s_#v_&)3JJusP2cjL3^XsWUzZShs+2HW%th{fDHb5$JPnbA2 z|C;PCsNF`7oY!E|pfpLvpSSBQl^xP4n?2vVK(+6ek%W-jQA z8hJ5IqVdln@~(-UaeB*I>*~5r#J0X zf4ftZWPLqJL(5~OY15V?KI(F{t(~2mOCdPc`TAZa)=<{j%2qBdtvCBEwEUWTdp(_j zH%DdE3lfKA&?<=qj@?piPd}YEm9>de&4;27iB-@m7s?3iy0`HyrtxPAeRMk<-wm^h z_YLIT%2ccniXh>KU!=GPAfMsjN|WAKo7^{nI_?aP-AL z!xHP%Z7dGx{~>? zBIs|dXy!`R9J|249Ix2@SOr|R2{O@#L9)0?r$uB^`0?4E!wyVi6ZfBPy2^|s2c!M!(T4|4aY z<#roEFAMTV??uhZk|9pTDM|MC2pVrc3=ZJ#_s^w;F1VAHG@1=dVwHUf`PfT z&4WGalTzoi^>Eb&(b{8*eFaV#19Li;dTx+UHJ*ggI*_hN+)ugxi7L6i6T8PE;(Gb5 zMWy!OL1ANy(Gxa3p~pUm2MXL-t$%go#zW5hag91wkxz{dy8@T@zE6IXkb~ETwRUJ1krT7**yPXuj>`-?ttPqV uB=!8Pg8{@E(!jzxZRHb%Wp9E<^KTrQxf$6 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/002-ICON_Print_1.jpg b/buildroot/share/dwin/icons-6/002-ICON_Print_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f89841ad1c80552ec4e41355701b98da1d43ce2f GIT binary patch literal 3754 zcmcgsX&{tq8-5vE`O+Ceq?*Q(C1zt}jwKAjnPf}$kC~ytEM~?Y&XQAEOT%O@YX~7* zDrvDV*>_HslM)?-EXRDKlR7_6=jV6*c;08ZuKT{9`@Wx-Gst-b95f0fc>sW^sWKo0 zd^y@LQAfRDTF005j0@anlP#Bm%9q1?H818&$8wQ1ZqAdRKkq}KS zH3S;2g;YNQLBbK5Ft{cRfl`GdFmN;mr3Lv6DAyaE;DNEi8h`f1UFkqSUn(FVKrH~J zMx}eg5L#MVFgOy1M5=Nbs*E5C(=AYy!jRpyfF&~UbP|n8qEa9`7Tw&beoP%GH`2eZ zK&E{$`;WQ$8xe>5cPg2@lYmcV8B8nU*LeTYFvBK@Mub@r8B{+yp2(%k?ucm^Lpsro zNu}FRsXn_|JbQu4q%tm0X%IuhovfXNDB6)I1Zn_7>5~SB!P5 zNCb>NTpg={!orbAtU3Z=q_2fVqYMlTkcI|uBpQLn?rO1AydRlJVeV=PU$uyDYIoX! zOyhdS66qv=BEgtWB||=48$?{0BBXlMGR zb-9Z#%}=CoJD$#MZO#H9@~L3~!V~Tj;^B+{mjIqG;N{MEdATEZ_zNIj5EtBmZwDa$ zPY~RJ&=>5;xomzAh+mMOkNZ z`Ue1n1O)f;fcW?D@(J_s0K6cs_FT_g9*9pwNZ_+e9$ql$7#}}EU%*nd zT<{M!-=D7E?&=o9XW3*+yjn!k%NVvorS;GQ;*yy+2%KTyKOk;QU=SG40~(zC)46f{ z1MF^=$k;85;7WaQMGETDE9)9f_XE^?) z=0$(cO8eDepAv39MmC9N;V>V0Bl-c9@7z@}n-ZzL-_x;N`7dl3u{PD)BUrR(xCbaSw? zMfc)VT$ip|XR?i>N`4K)VTc@ia^S!oHmZ39(WH@mWt;;W`^ z=4a}wEGzqZM%tGRcrdRrQa&VBGU9WN$|X1-S&2RVz7OWS5iYJ@uRqu(?`m?~h3S2U zDSvu7o|N}9>F&8D*cGtfk6*GYnq};?S|#h!AO1{tayv!hfkETjM2*Qq!tX!O72l7t zyz8|p)ezDsQ$6X%lG?J{RR;SCfoU2Sh?SMc&h9@GZ`nNR@<_Z)#4wX=RWy9Wq&Ij$ui6Wq)7z0GFyhAQ%X)Y-x^Cg# zFBH?`mzI~Mu1g*@BPDO&Nbft`xe%VG(H?!*Y&4k?sl-U!)8_`;^9QB&$wQND+6N>D z80-%Y&rW+d3LA-L1$9?XAc`3=hwh>u4bIO6Z{B)(e@OvX{wB(I*p|&4?R7AWQ>ksa zY*J#L3#TY@fQNPDORIXrVVOTq%0wd{M9jfA;i;LmkvQ0Ip-J`0MWfqsiEU$>0X`$C z`DJB4-^dGPRWCL}cI(5J)ZG}G_Tb4GMx*_jV95Z%PRRaGoMGDYO38`Y->oL90~ytt z>UFT3%F`U+Krkv|wV}IXD9^K8$4snEh6M*xRf7R^J(u z)r;G69qaG8zD9Pf^bc$eTz+mhhF8*+?$F7fS?JlWp^S|dE?k4D7C!duh}vA6UkWFW zoJHgvQuek_m@5uLW2$UkjmC3;PS32X`a<=n-I@W{hOexZR-9BC4}7CrJGV0AmnqR{ zdGEFFIp@&rSfc*GwAQF>k}JFWNps-`|6?LqVJW_RQ{Gj7IGl?BOG*Dw(v3vw4Z3Gk zzcE;B&F;w`ru<2|Sa-M|9kOIPWeq)2I3XdAw(Uw?DT1HLyHaKi7R?A*^j~s`jr2R! zZPZQRR}YJ{;G?M4kFX!TQIS&qZQ>`pXTSEDv|2}LB%Z4)R=b(=iutS}w$ZlPz~l`( zM#Z1l?oQR6CnTkm*Hp=)#T^D8Q%)8kNK*}7Cn|KlJ2B@caECQr-XgqcoS<8gJt~j( zcCe6YT@a(i%JdKPHJ3kFtMrslh-p%ZZ%nP8w}=#4u%sS0sbA4vrCKHj}6tT5Io92De8FZsAv_278>_OI!mM zo2K4wsJ}#d_d3i@TDr@b|G1lEn15*-C8O;8IefwF2x?9zVOz!EUdFtn-u%L|+6Jlf zMJ3%#Yvu6=@4iok-He=Qdjm0Z6-#$OHbzQU4AF-Udc>ukkeNAsUv@^=!RO8W$a11r zl{HU6LIP21hZV6moskbS}^rI z{ffJquJp&mwfft-U-!bN7Hp|FBq-!A%dya7O;a6~-IpboD(P}%<*#p$4>V%%Bj?pu*Q&CeMwd4dx5C~YIeCB4Loq{-zAVl*%UwRgzb(x!5_ykAg>ehhv!Xmf*dLLDjO^r{ck$v=mIZ9g96PuUhQm|K}{ zZVsXt>}Tl(jjNdcDOZ>t9JTT6ZU{x&C^c#JplDCCe)e-SuD!6Y} z^Dw2Y=q1dYj*;&t+nXrJX@1WP5@`q)YfsAStySM>ihe9u|Hs8WY`ZN|_~nWeOw7&v zjvh)J9(S_YzffX!P21wQa~Ii5OKYYWW9&`!&3#Ccfx_M~yT9uRo>BcZ1#0f28Rkr` zymXyrYIe3u^z>ssqgjLQPy$Wt#jLATNV~QkyCNfW_3To5VO6YZC}C=&>)31I-zp~T z%;M(J#(IOJpbg0emt|bt6K|KzceiJ>Z$4bSh)2Z~S>cnmaFTt!vEePvf}4ka3^(}L zI(}h2++l5kxL>KYrz|GLEZ^FzH!b*DpUZXmtIW&OE(7Wf4s7x1CgKZ}d~ww5q-dsm zFx{{UH%I+>N$ZLSefT(XrAEoXLNnOZOs(|dfHX!uO{zWl74F=h`3|+Icjc13yYy|f zr3(UWr4i8ECujPU-^!BG6cvT(H^YSrQYW&Jt9Y-Y9$-u7=XYWjXAVPlAJzZkdz3TuKk@wzSpWb4 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/003-ICON_Prepare_0.jpg b/buildroot/share/dwin/icons-6/003-ICON_Prepare_0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2722fa4352db527a5a002e6e2ed1994e4f26e584 GIT binary patch literal 3603 zcmcgsc|6ox8~=^TlDcVIMMj z<|=>~@EwA20A}n%q6GjDU>&&Z2mpd1D9VG&^~Rx442~+1%ygxwl9+UqKhYb7R#ig* zx(5E<(C}S$Z2$Jg89u-`$2^!^CdY&64L34cxiu~LUOOs-%=F{z`^vGj#F;ZVTq1)+F*nvj zfKgPbR5H#Gt%g?9!hkSVN25&)wT#sb4NcLST3AgjQ&UruRjx6UF}?|#!-J>i`q})edCgUUJLrCTohOgYUOc%c)~h#IIOqoPK1 z?EY%2l8DZ}p5U8Y^@nQHN!UzOZO#Qs{oHJBUuRyBC}ylqJ9WBl(0WGK1Y6U0DO)SG z-!}-I`(k_E`buuo#Os2XA&V&;ZuU@hRmn68j#N6j+|lB8{C>Wg?c;XOV_AfHq9R6ofw4_-ATN8 zKPvoa&_EwfB6)kZQz5;TxlgSQ*rnYIm(RA0<6l!hb>~x2a7MX>U;5Fb z!R1eQ2SctXT68Wg43@VPlsK|r1{0h9FnIDRG|slkQP$J3xivF*kn}#}ih~`#t)M;$@$ViR;jwDGStMM4$C@`iI3R1OSF2Vzud5ylRomR z>=*5}wyQcXJ4OSoa`hBCuD4cg`@&KRdq6OWXw2Rd($6n>7aF4x%J2Bk>O){eFf{?& zaeb5a^JT5MuP0^)#9O>5V0kZyrpJ zZZIk9NQ^7qYlFo)1!k7ht!C}CwE=DxWPWhW4VL`%?bcFD}7Toc3~S^0KobZMPoi!w1!_~?t$z0Ivg?igS+J# z_u+WAqEe5>Ywm*bd9%ou$?H1~M<|tEt`yF%y5!~=?6>&&^upEPFSR4$U8kN8{V4$A zPr92fN%};zT)VH9gU~i;STBpkl2x)k^tU-XPXs-6qLlse@%a6WLvF}?r=0rTX-Vvj zT^{(jBI~5f#fTCAOG#AZE}9NQWWv^hdGtjDH_-UKvIc5=AW@e#xGWv50~?aE@3`T# z$!@4@L@K$gA;&HZls4h1@?l#ge1r%?t2i?>?sPr7^=@oHg0`)$Qhzy&W~rh~;$>ka z?7DvAWCxAto-NykTMVg9*6Ynn4C~9Pb##3Fz?{HW+&nC=z>$iI^&0gGsedQIXTzgR>cCDL_c$Cp2v?kzrQ&7$-$5GWFW`=15LU zK>Lmpq=NYbYF#jjbW2C;0`j)bf9y5#y7xL#>wW0K&9V46V^dd;vZqNdQ@hwxeenDn4w_4-S0@*T$A_=W zRY!+xR$FSi{&0s|bA$iscHe8=-2v&Q5(Vkvc~?cKtcVxSx-MOgIXG-auUtlEf=$aY zoaaf76gxgOa2kMc%1;Fi;eGU2qw!W!qoBia?z=F3o z%E<$^@dJ#?!0rN%4u@EpwI?iMgIoGp^{K-#_pIg2LN6~^Df4N}-uCV@6o z;(}%s2T~Ekd7619z~}9Jutq_Bgvi@i<{`RmHhsg+RKq=&l)A07(NFmM;>?sZdgEdh ztpi~e_o_H=Quwyhe(}h ziL+Fd3`I)C&1BW!0_-o{pMrWry=-3GJY}X9(`u^@@` z{Am6AnkUOs&2N0X;GItWgo%sMJ5@cwTfS3hjw>;>AUOL=CY8@EYvijuuAAt7S@>-B z*{HfrK)|a>JKy^7YMqh~iwEYmM+*SOEUjzt5390$W~B7nKT@a47sHwFa$adEO9$Uw zl|DYvJ+KrjVgo5b_-8R+3{q}+4exKjm zjNB7wd)>HoM+l;`JzjJ^lQp3gu2Y!q> z)z(%Ay9imUruLN670&em=j2*(7b19duJR$o!vsIX{x<%2Be6@XrG*YQWV3G#`FK() z&Mxk){<{il%N}XPz?2EQME{sqk97GXfjtr%`zIgq#_sWpZ^?ZjS?S|RHsuFm8O<+s{Lxm9XfxP<);|SUVk_ttsoQMGc#8fyrdxj mn)gvQDIKE5%Mx{Dy^;^TLp-^F-`kgxp0#$S|A%29==mSNtG*Qg literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/004-ICON_Prepare_1.jpg b/buildroot/share/dwin/icons-6/004-ICON_Prepare_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..627082b6fb31578b5fbd88cdfee06d740b7f8df5 GIT binary patch literal 3616 zcmcgsXFyZg623ISwF06d216(cE`(47g2>Vh5R?#95Y`t$zy#7mZ@Y^M8c{)7L{RCV zfJ&86b`>E65Gm5jqbeO~DlIR#qW)O-=bInr&OI~VH*@C999{=+0N8Kli+2M61VRN6 z1HK7w5)e1_!g}}t0)Q}o+YtbG147V?3Dr`V;c$qe|BMb7(k3RqJqyMPlHX!G#pr4?U*VSrlkSa z(NlvRQ`ghb`WdXD4%30E>p)?es_HPf`Z2hs9{7tu_|a&tZg7;T`IlJyKLf~@L;3jl zsQGBBk!kKwn4X>M#r?wjMX(XOtoMzGb24+9d#2^6CE=X4HIo+UENKrDH-cU#E}@ASl4e@ z*blKA?LegPBb(xAcyFAmIgLyNe?B%G|HE92%znuC1?&35T#U?rh=uZ#fo@#xcbC1n z#qXdE^=s?$f4(+9j>PYH8o#x9)4+F5cn#Bd`(c0zw(#AMMzMH zFZ@M#Lxe;=i|B@keU%M3-&;gTNJLabSmZm)SC@ZRcz*)oVt^|^5)u#x1jPk}#07X& zz$5;g3yAQ!zdZqB!XjI?{v;}}jla2J`ep&P2nh1SiwW-r01+W!0YPCQQIWsRd;=dQ zDlQ?mRZ?yb%*b{xMB^uFBq~Z%YM-5gqWyk;OaTEA5#cRcgm-;`hzr6bgoL-qX-JBQ z8vPEDnzh9=Ywn4B(v+McMt$(t-huaj$eY-O=C^2>qFoF2@w$NRLIV8Mg~S0vVALrn zJ^Z`WzEgKuROyBtcAredVFICU2#%kfycJqTsV;m{ccw8q{8hapVw~BOQV`pTsX0h( zKYd9~1r=>-?vjPDK%H5(dG0#5D~rU@&A67keSq_;3K~|SR0#U5q1GSNa?>Ni*cla| zRgyj#;P&4vO9efM32|n2O5T>F(Rv<<=x}@aoZ;wEhOYW9A3!wkKMt!N8NbBas zxLj_^RutzjOA_RBS4vK_CfVntHdO4Qrr!(oPN*=(CLh1|_7E%ZXs%9in)ztA!pNGF zy#=D9M&ME&JW|Y3U;OsYt^Fj>Au(#mHd)8y7;$7uGD2=?RGw6Bauor){Ed zgD%zQpd;09Ma8U79NT+iO11CmnR|ya?k@x#`n1-YM_zgxN>yL(^m}=m2kg#Lsj(zL zY@HTC+Y43Q-5`cNZfXMyJfMB;eZ-r## z12LY%)*tZrvvL6`o_Cgb0LYH*9eUdX$K6Zyqu-Uu_9;$#wbTt>$V2>^K9}+K$^6+K zvj$H3;jjT#`BeCA&ZXmH_cw1v8uTCndXP;?=RST^oX2K%oy^R>-qQN6PnYV93zM}g zM2I^eB!-VA?(kCM;dybpJFASNwp`a<5f%XfatxEWua!kk;zkEc%t^r>QHIkfF*=H3VDJMY=w zdXY(u>%mv|5-+0mq-H6ZyAVpDS#MY&m0>e?7uPXb^kVIgzP$+{4;7buhigJs^QyIb zWNMjx4io7m3`j0_upbM2-G#X$HDzBk zSVK_Fam=VzcyP^shozRXr9)r9fIZW?m-Hak{oeYY+*y@#cYj^TE=4KXcGUbXxv&0ToK9CaE& z&-waHn@tsDvLeQ#>-A4O-}qJQOP?=|%&ryQR zr6paelv0k>;~V2a@^yY~&baxGKx=JOmU5N}B6T!2F=A;c>gev#idXYXr=C(Oq&d06 z+cP554{lRxxN7pGBRDX%#@n&krWI^~NqrFOM6Cf)#f&A=lub?Dlol5A&}_{^^j$q* z=o}A73F%r_f>v0s8&m0vB2){h_WYZ2Inurp5?y(A9nZ)bk(ZAWpKm@~1f)4au~tHc z9Kysao0Zhr5<#RlQV#Je@xcRel5_7<#?I3!uQF#6>c`0J+#+4C_8Z`#up@pu4(}he z_OUOIqn_@4I&-a#obOytC{}RznOpd-P>gHYnF)?g97CP4lt+k*-&3yXmaQCcCveeG zgvLRO6G1F`Th<+Y&`8)}Uudi>^J>0Tn-d|ZLFKm>mO17HkFF87LiboDC(*E}smZqB z=xzeaI>Kxg5{r-UXwXx6IQ(Ai0<-UcQ&sh%8e~3yaS~iw_sbk9#NN>Ga@9Z|doVk` zT=E%;RhkpOMAUAiU3g}AxIL-t=~UAPV$bl!SzFYR*U5?{u!DZ1cdRJVn5Ph@Fsa;L z>sJ5xPuhDk8tI-jhjg5mn=LV_*PM(Ij-3l*{Cj(*c79|I&7W?Y%-E$8WCM~dvAj+9 zb=21$+0F*F&c0Opcw;HpsR~=z;;xtyK83sYiA>!+^vT{xtG0V^9{*sf9oa9}0=Kuh z6UfceC*r1c`}^;>_y!+^1}HU)=e>Iy<9aqm>&c9ALc-%w=ttsBa%PX=sW%ns=#|S8 zoyRFOmsKy1m6=0S$YhXgNpq2{)=G>e;?QD9+QjMwxx?davP?9_Px4Ng&$@P;eLu6` zJp_|6Ro5>k7ViSg6H|=SsC+whMa;Or5^LG z6wite^kr73rqy446$QaT7Ea^63q_@O@p(vv)YPn6Jp;==vyaUAwcyaMj&lZ}()9Am z6zwHh+dQGH;=A_w3pj2Y>BQr1;*pygDWIs;2&G^vqr*$$kFJ>AemAjxd%eBm-0X6~ z#07H!**TEO&Q>ViouM(dpCoX zR_i=j{!)Ksj$fQd>`7K={yV8xZAPCSQD=0S?8nI@&m!wz=qSSGsQ@JgAJXnsvQDA4Jr{4{#7pW)6e7nOH;Ytnba}~4?EyT zEa}e4+GZRbqrj=Z+7*6Hj>OFU(Bly0kui zhe#@Q8qKDn7MQfKQ&Fipa#wmfN4f|Ig2ny(o%sCX7Iu^L6W9y{$nHx%(qNhP)GatY zK9V@(=cpK+!SLtU!d$k5sEp-}5~8b=~*<-0%Iq@3YjkGytr%3}qYw z09#uf00#VxrBMJ*38MLh0b&3|w7nMqmIlBWA097&gu(c8(VkxHgLE{F&BBCw24Jvg zJq%!M8XDk9^P}^S2kG7ne==&Kss@E*c#%;q22?$2fCb%$VH3`wJBIIYqJ{g>h+ZgD z6Qpq{DU=n!qVqhFp)969mlR4yeREC{&6l?^DC9Q^&yS2UUyh1&rP?Dc*c>|208P-P zVfArHLn0bW&?DmXHzRR+SVN4SAqI=r)x(nX2qZia`4>>4XdJIYq+JxNzha42WYk}W z3JD28hv3m{jyDENBoZ-tI1CP_D`Mz!!~A)kp}PKDweKD%bS{m<2;ec;{>WvIo(I`M zJTgj@>A#P_3i#pnA8Yj!kxKpFR2FNw0N>nldAsO;=lhS2xlUmLbj&U~mmS2R(M5E% zWpMz>faYDBradHZ6!n_vd}r zdi|{>{8GEz4y*uCWD1?b2&Q{kao8;6w_}qSzs?2!OMic9y?&jG{x7u{Q8Jk2hx^mR z{=OyZpylb0))g&&G(X*6)bSiqYcGuhtG_iY;B`;*3W+TVf#ZPK4}e575J)tNhJOPL z0*fFTAj<$lzd>Rdupd~Ki`Y;w7%BmUK!39Qp#1O2(menU1H1r#uoxTw!NtIEv86g7 zUG$!dfuUl5e*pkVafuaTAP5w;QcPrnfPc2Z#Gv95Ac!PbMx=r)XD=dr(}F~6KxBl& z5VES0Sd^T(gZvs#^%ZataT#LbQ0OI{&Cq61D zS*k)Y58x=BT+E}6$nB<R@YN_Sr5PS8tMwV((NDL_ zY=Kou@Xh=Q1B^0B{)Lj1d`#B8TvTz>fa&_)zQB=)-Zevtp-aHdl#NHp7QS*3bFs5x z-tlkT>KBPM#M+j{XaHnqJ=5A;cNgsFk*QGm(xW91gEI zpHNRn7`UMo)R3=kKg+vy<>#{L%I{T?pOwmlJI+ZHU_(dxP0L`{a^WaWUP8?#=R`8k zU2|kG(l)(Nqc zoluDR*)1ECd*0k^XpM^>dTe?)ZQ7*f6gfLgp_yo?8moHF!~G4L)LT6v{tUY=wBp!> zn2sj>=>qk46J{T6!atX9F}d*YYEv4APZR9BY(MPeWGZr{eaVj7nVs!r!_*9IBeJL&t9& zYYvwv@N<27k6gQ{NvS_}Y!;j3PjkH!eQ8j!J6}&a9(Cffq?l`4Ws=Fj>+`-rr-Rb-v# zZE`+QNjOs?nAknrPE#I9L{gs|zN&A6`!lUnYLA5Y(FT2I+0ILhpL;&BUwOrQf_%@H zSnsm)bVFu%ZE@}%svz^=v6lQ)%#Jp=V|XOvpl$_Wa@e8T*4EUEG7vmlSEEd0&tf7b z(`i1|^R5W`$nzNUA>p;BrbdzZIStIN#m%bPefYxOBdSAB);^yLxx{cbB;IUZF+caN z+K%*Cc5Zl^j!h>QbN;rO=Hs+&pCn;yPqf@nTb z=zSw<)=R)sPOGI0>yQ$gu(iK|WcY6T#}XyN%Wv2BE%Le;*Sou`EVCx5 zXNe0|RJFxxUHEl^N`tuBW^T#7D*eL7qdNFPLAzH^=_prDZg)KKSa)~lBs-@wKBGxN zefsOZ-}qM)uDTuS=Eo!|F?|w)FRX<aNC`F>1*GAOFzW#Gk#Mw_-0Kf-QwL*VB6 z`*K*5jAAGqX2a-Xc(|>lz>ZzG<_-L-*_DYsab$^eR}f(x+LwOXzbeU)Wt# zLr8R3KZn~t+~%Wo=SyEDzjo;C=GtAI>y5Y6`b_E}R}9gx>rrsIjVktz=Mea*b3~~>f~(>c z6|EpxQdwL^l*RSz4N9DXoW3S+(lA9cKmlx>bOq72+XUm{?XA~0*i&)k5lKmqr7|CeR+{!LlsNaryJFJK{x^qo>UBFi8;SSc@(`@&(|6ZSE1$qd z&z7)Jfm3kl{fb5h{H7`P;V0msFV9vbPQ^WV+0Ru$=;3sCYL#)c|7?6dFHcm~ey{n$ z`|Hu@s&Kwv3%gP|P-v1ou=erwZo@mqZp>$S`UrWtC+`GjvTx81%}Qw6HLzb8S8&;uX>`|EnKKOA za%x-5GJM^QfE9%+pXc zC-Lk9KxDkj@eya2j3Rbp$SA*^5auH6&E`Cp0{}7r=%zJ%9!Iywu%(q33p``84AfJ1 za%@RrT{?uq_cK5J$Jf+4!gsMCXI4v=VJ)Dl9uBbWuhP=zEWdPa;$oB4axdq?XdToU z!Ipi@?ndNS>6Hjx8~l#t6B;; z3yR|#-)F~6MK9rPKtbfw-6psc{#sC7`aMxNVYd8;(a-H5t9k7YaF2d3Lu{^pbPJ zy1M;df~HQvoO9vfEH1e{x`h~VqCNN%Km_#G0Vs%B{$?Owb5~VPbT>cNucvGS%(w4u z@2yR-%-h4eA=Q;h!?Q}BNyY0kM~e-rnWtF2W8)>7>+B!uS!bh754EN2f1kmBFg*BG sJ+`yM9kNio7N`Ka{s6(^w3h(MPwon!$_|Hrxbgn_F8u$tV3xZ71xiJy?f?J) literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/006-ICON_Control_1.jpg b/buildroot/share/dwin/icons-6/006-ICON_Control_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a813b655e2b2fc60f561cbc3789808d85522070 GIT binary patch literal 4157 zcmc&#c|4SD7k*|2!`q4qDaKGK%x0Zo62l;&qVdYs7-Kgx#+phgg&4ydlBJRgX_ADH ztqfyrQTF9URESV2+kC_Ow*2w+{rg>i+`sdj`&`#K_j%59Km1PqARuiV;^_teW@dW; zQQ#-|6M(o;AjSJQ00M*r?xO&}AA}%10sm16|TP*rWb+> z@n!f@1IVxtUmu!3E(8x>6~_te6*m$NTMY^D#={L(vcmqfI0z%qnN*l2LQ9Q;*1*8D zu?Vyl3X9QDg<()=Z6rz?iB?xbp>ZfJoH`cvFW`b~OjkGDVI$(dxdcym_`in=4h}{H zt0U-4cO)8%#UfD{BnG1g&7GfK^%lfWy?E_5N33f1BeBD)KPZpB~7hPzB+ND`Wo8=>8sb28=*h>6#8q+18WhN)Ptmy~?q$z?sqf1IRQA)yxPF z7pNdSJza5FB2n8&TOEzT7-^u<#s)el10s>AsZBtsV~Co@I^VfQbV{Hvl@{=w>-v+6 z`7L*49DEsq%tlnEXAsqu$fWziR*#MI{B125;&1i-<+}d97SwOKNI@~km6!X=%l_^X zOwfw?V{`=%KZc)56HGi)Fxvb{VEyXA0pt=nt&W1<}F~h%i)GNcfkXA0hwS;8z3UqJS$vgMh>Vus8@J4&v7WiGuGO zBm@D0eqI4$5FzLv!Xl#JH7j1|uUi0ENLU0aDh7gV6tGr`7p#y~E*JnoRyV~Z6ePva z2JlUXHe(c(q{IdOm8tj*nr-Y0PN_H9xh$3Rqj(Y`XfjuzjGN ziiVB@vG<+C3(<9le>-IeLr9Eu&%DQ%^YCBsA@} zQf-sfc~q4g9OQi>)ek$-UEp%Kb*)jjTc*;nw>gtXz6|N_>K;iu)Na`IkfJVTl-|5A z`eup_oNzsleI(qaP-v2{>8`7)5MkjyZ*R4e{M#CBUe&t~GmUMDYyECC6i*V#Lyn|_ zIWNS2Vl(Ic{;fe&3FYPc!N-BEge~;fwPIaSS1Ro?mYoMpL>OO{5pIplSD)tFU!OoiXgXY8bMGB}ZM-}Cj=wp5u5oEdq1ErF0=Wt*4&VVu)6#_J?1uH~G`fxYg%RQ^Zv>%3SDp8@;Tea_t_x^NK(00^bBe}5LKHz_U2xaQwLEuiMO?K+*&_;gf(t> zzFsEEhm~?0SI{~a&T$#hacV}JT2kho>}#D`wmDy+zkQ$xRkmYIiQ3PAz!vy)hYuI5fqqiLom#5kG{D2G_eUyhu%4{K7=sdUU@-jY)(+Hj#f zUWR65yW14r?|Nq=w$ajAToS#eKq|MV(yK>{56nMH9$!-(zJ9bwE;D`p)LlAz=;}y? z{Xpe9-6nIG#q-m}8d&Q4UB|XQSicSurF=BL%rxp3R8U_bioH)Ib(KnPFZqDApbKXn zdfNQaML%nM-lfsoRniOQ@f;r!oq9PZyQ~>Yi^VHxPe+mBUxzJt2&Zo&%5~3K@ajvd zeWn^RCj$SJYQ0KopN`Se_ZHnB96PQJ6Q#ae>*XJuMLwd^6Gk}vF5g;9`fGn;#~zQ@ zBkT6xHe?p6-EH^Z@!8Nn{-Mv%9H)Q>d(y1BER)4)&Xzb? zKPT^`@zH`AD}st77cZ;%=Avnqa=(~&%6wt1#apAm`Gxtk(a%HfOydUp>1^^jvT++H z&+Fy8fPyy98*1HWjwuqCD_W7(N6Mv0IP>S%TJnea03Ue#5$VJ@%|?v-SxnsKXv3zH zL|%Igez_aAhtr|WiSnB6<2vVuLD2DXA;XD7G8N~WmxBTy6b7k>yCFm~qdzHRR3Ylc zIK(dc5f{=VNC8%dx$7!geRg8Q+unmuZfi#~PW3!T8FY3&n5XM~Zqh99+!h;h!X~f5 zp3LpMP)x+c)k>-8cYWe2gw`*b^_^cL4f^zmuv0&f^1Wu)v>(V+lz^78qu^P)pQQYO z2%EBR9Uf-QEU_LL9zC^>#fv_Bs&X_3efi;NoF=Hn#$wh)j!^6Hl(*<;jn=9$F)Jr+ z3v;VB-hO4gzt+0B{)+|}m;rh{coD|Y^-XJzf9&SAe(lv_bx-~!fr%A$@uP_EnUAEF zE^Cfl)^3SwEqi0Miy;Mp#@>>6M#4JA6c#42j@-zPF!}*IXlyyO3D0bC4{}1}#x$Bd zwBgu$)KdSx>h)4&ui5Q<OaO7T*c@l0l$D9-^fHI-1F z@GxM!&3D+ccLo|8)NkR{t4Z|JYCxl5^8PwG3Nh>12W&E@zRB(XAWw8}^}*SDJDg9t zP|UoVZ8xe_BqxuM%9>Y9YmS{8s~*`XS^f?EEwChQF4FJK<2|;!yoX;|VrvNKb-`zGr`s!v4^JUt#9JTtzP zsm2Emm3h10sT@#hO1^#_0KEf1uFL9mpUR16``HKhz~=ikO{ssG?J8BedhWi1;f+0G zKmX_|dJ#KZSUHsGIa8q*3u~koLcY%I_-OI=v-{VeuZMabQ4|zj5Ol;u@HVN(_<&M6 zLodY6H%o>h-w^U{In5#1Nv7dL?-sHINB3MEN>=dOryybdc3pjGJ=c4zW(e$O)TNdg z%AF{R2YBZ4d_&r9Zi8RAP~m&G!A1Yx3&Yb#VVyfKi*1t2l9Ef@n}ORU!M*Dr`{jgW z-M3R&Igh6ZyWNt_X)m>OJA2M4*K9tEO3fpo7qSXudDBa@H+!9*JxkT!FimQCgBL0> zXIzc@(x806a9?dah$$)^4fVO_II#JI_m`#dsDZdhy+D$YK^(&XoEZ+y6wc^W$22^0 z=1B$OWV$M^rfUFW}(jM zrrh>xtoqN4rp8eyV(%cGBd$1iP zQ7TAiROyw?p~&DGU#m`9!>8ccQ!o3gj3fX4&=X(mMC^Sxc7>H~&3)0}(?{=`*%W71 zXs^(uswO9T6sffXxj2^>QHnDlao~NoBO+$5kURNYI%21`k@sJ{1BVkV&`ik_jEL&3iC&@0#1Ebni#WCH4q|ourr= z%jUyY+k7QWYl37_%xeF1tglaYo1Mor=*c!MUSb{1;FKKnHKg*I#Gr0L>8{)q37O8l zpo1kebO}vD;+1_fWuL>@z8u4EYkJ&hpPQFwGw^KJO0@CbeRVMM*$wo2C{Zv9B!xK* zR-2jR19@d7rKdIff|tmzC#5WUYJoRE^)Vny9DMUW_-6Y4jGmwjt&1I87py{zt=y!; zor5(=bq#51!Q={#;JVZcd+o%^9jm`o-?(g9lzFD+R>b4e%FlRJlZ`zkL5!0(Be`XF nV!qfOe6o4)qG(#Xj&THZQC<6jv*ys9nA%^v^Z&7(`Cb13+P2X| literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/007-ICON_Leveling_0.jpg b/buildroot/share/dwin/icons-6/007-ICON_Leveling_0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34d12c62f52174b07dab5b295fdd692c0fe4378b GIT binary patch literal 3480 zcmcgsdpy(o8~-x5(@Fg%m!yuFN))rXkMWXiOfAfvcMR{@#Cl_Iy8|=ly=3&+|N=iMmAnz;;YH z%?|)@I2}L^_yW-c07i$910w(lKuWyr0RWcTGzJPfU0wx+&?qRVyAfU=&$6NV)9fPIROiSeF678SvKa+x zWeKqeM~2f`bSjqw38x1!ILL4m^piMJY_Dy@ppZ{4+&~o6dMzsCDBclb!(>w-Mta7& zWVj&$Vq&HTH`X^p7#@Hi^x-BjeG?emKvy4*)Hg;Nm_a@RDvrjc_#p{s?B`hGFBJ6i zrNY9(^ui4EnCufUxS5$5OdkP5AaunZx||3GmlUqc;ApNZps5@(o5teOm<-68BFUE- z!bL&Fnf`SJI%`ArZ)^3HBOd?Hu5|iZ0Y1rcxCH8#eE(LM;}XH5!U$9jGlWg1irqEW z$SkA{n@Zv`*)B|G(0Uae{h3@Q$Dhf9*x0O9%@nfFoyMRr!#LWXICwk~$KY^D3^Emm zMnT0YdNdjZX${AsF-9hE1OjachhwbGFs6nWYa^__A;!ee8f~)9MKj4EbSi_p&ZT_e zBEHF88wWZ|92rez(?Y2fESpJ(e7ZK0_RU<3vES7D%%yxg7yWN?Vd7+9Yt8+t+3Q>4 z30gBZMpyi?G5l19c;eaO(H2bsTRsgeKzS&BLK32GAP$h&fTY-xloYSxo#K~wY!*bEZq0|tQsD_}70kkaulX?<-O zC^yb8J@9_g={jAnK&t<;!{E=~WedCy`C2EgsND2ryr3;fctcxaK%5Sc^N@7{{{j^%pSH=18 zeC67lR*QPC2+&!WeP;gbx2$sd%)}|l=HP{QUJXj;huAwK9S*-f`>r&dhs|{xP~>Y= z3%);?qJ!h{{IFPU;i5_*)4ro?rU_}-?ETWD0^gvZYTD+0pvU!Wx=dMUOP*mH-qi?; zsnO8+swS#FH1jik`8|`2>3MZ4qCA;r8(?gARm&Tdc(%r)_e6HG-HgX@P>&C^Zuj+J zC-BG(&CHj`bn~FhG{dEx#gSSbtd`tj?G@6{d_%i&KQp*w;I{GLuh-k6{0G`@T+b8i zQeh*nO;nes^W)m4u&ZHmHE%l^epWX0Wb)a8ImJyk*^f0GLiWcL?lY62MeJMTVcw3R zJyITx2&y<~7R(`{yX#Xdj=gWD!#!!Rdb#mE5oNVg=sQ`K`hy$e2;zcJ`~6I%>&+_L zQ!#BmD>g-XZ|6Og8pGcEo2REH(pTUu=+ngw)&5!)1TB23+jtJuw_(aZ@Z_C(f0V`d z4pdI#tqS_QR)+6~l(L!pBX*U#uvXeadqsp&5w~=jA4q@pI1JX1U0!)$;PwTc*LfPt zMG&oJbS$2k$soGNUY)`ooN~_^;#qX!ezr*aS-5qZ9mxtLM=#zZUwTnP4!1`e2L^-X zotk@KL$CSct;1O*K`Y8HjV(|`3fs$mbDQXPIqS-GEueeerI+@4hEQ0(3cqahM`}>A zTfU~(6K9x7k3Z^X%zEDXCRfqD&kw53dPT3(GvsgcHv+%2M1nKGBfd=E(TbI(!FXMv zR{;MygFhKvy+s7He~fuS^J);P(K`7w6TFA_M0q64E;<8mp*-`fui-@BEYIy;;FkE! zN=Vw`{R0j8mj|2+5)AU-C8kwr4<2|Db;r*|7Y`lk%JTe(H+#0+I;}Sz8sy=apX4>! z*4jRBRjB;v-<_S4tJ@NehbUa(JI8gnx4YKyayvAh&K0V~zsfe|y~6vYJ#DAqlq;o( zpkCwNc+;}CMLWtK>*!SY^NoyB!-X6ZywkR?POWz&dFhFCBJ7L zy42m}?C67%STZ(ZU;+XI^Rqfmc_m${PMbBlhZcBR?pO>zlYeKV+`Lq=kRik(atm{~ zwE5g}^TeivF^lX|?0EW_8h6M|9-p>wAz82^N}>=&e*Fr(drrICo_HVfxnDaow>e1L`w_n(T~h?8*f!o3 z>`S|w$^-@6-}+wre0mwSX^_!dPAKS0MGSHC3Jh~x7DEXoIx;g!@3#w!Y7ri^qx07G zqlHYIQG%xZ+0otU^@9wa3zp`j8g-LGeOOcU<~Z?>ib-N}+~5toQvs=DQFR{iYt3Ya zb~i7N)?wvrQJ6&iaeYMmbTg;S!#}bMpZ+?3j=OKXq3cYI&6X&11GV+X!6w^d;5(b_ z&kyf}ws@%Sn}f;gWvdQv8T#!AyE<3|wCLQ?5$tye@u|oSNlou2iU2uVIBt<%Ry;D7 z6Fo~DM5*8Di=bd*m^=GFs!d9MoZHrZ^~tijLc;85>&go&m4}tyIlbh@`6BwgkAcd& zey$IA!RY^8GK5pgPsBVLD_&&)7>>AM$pxNeAIIEC+Maq{Q65aW0#GN~&# zw8GSPFwdj(cHY<={Xw*DDF$t(x85rWmSyS{Uh4you>BFnA7C8CmHYcojE>P=heup5 zdU^AUh47f1qnQB=Kj@N=!0LtN600%m@@_cgPPjv!(1bAU+~}(?@9UKmrZ_qlI8)cNw{HK7RHVGlk^|l@ zGA!Ma%X|PonW+%fIVTWyy7iunaCV8g*f#q-KSafv-hER$#_Hs1eG>5lYZiGOl@)ud zX_(=Lo;sBEL16xK{aD$bn-)qL){o+js5hqUTmYW8+Lc9FIK1+ULdzaoN-m#XVyx0@ zjk^Pkq6!NrWDiVa$uvEq+X_cIe(dc81`~Q;r^<6uGxl8~bM?@TSj?`~Sf#BQlv|5k z3t1Ny3cB}aUk>xBj24s&OU!GA>wBPgJo(sDewEF4y?4~k?w!4IYGUb1TpIH3sAYoM z8+W~17Z_3XH$yS`ILD5bF7C$Dh;R!5(+RIA=T`%X&bp|oi@_HIIHzlWkWF4d6pZfg zF^0MHrEOC_7$7a Ox9eT~fBb?(FaHY|?10_? literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/008-ICON_Leveling_1.jpg b/buildroot/share/dwin/icons-6/008-ICON_Leveling_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f75e3720043c0c1d4e9add7af2e9bcae051aa9bf GIT binary patch literal 3474 zcmcgsc|6qVAOAA0>}Df3WgMl_%$RXcCW}GF4jHV-5o2hW%gksT{p#07TS`KRQCb>z zq+AoKRgNMIhB6{Y^>QbcCC6{r*#6k|&)@rx=lgj+&*%NQp3n1Ld$l$QDBFY+0|CI^ z{s15a{Ef8rc;eIq29I6ik z%q_xce)tdq6YNh2B2rLV)76i)z{CKQmb(#FA4{_)oFpEJq!U~s9bNH}A$YR@EsMio z^KfK1nMNis{lMX55`}>bM`>+1M+)V2HB1Y2Mu6c63~Cr1PY{}Guajv= zYdXP?Nu|3|sie&=9z98AQW+3@^EJ`QA>Ffy7zC!Qh%*wU$F@J884;>;*60d1Tfb(`6eNUj z5nBgHd;^l}klMmJU1%*10*OnCi-~`AvSsq`!rBu+Rtg9JC?FA8KvY%)BrCG^3@8x3 zb5T){$lreeKysV7gqW1HFy6+=S4R?3V&bA8Ns(qf1xTW(>NxyRm%Atc=iSkmvA+kDL@Y$WNN>(`SwO-(RVVXiyS-=9Ag&JUmN&FM! zpsz`*?Dw56B_q2tcnDxaUTjk}oF*&!9N2b?ek51rk@vq0}4&1->!C9gwM96UHxIzcdq0tDN14?dx4cXmjqh;(}K@l_;@y0qvmj+ zsm0>ij@p$6MT>h)5(c>n?=@~XH#N{}0xj#C;EU)1AH5Yrb9?9el{>O<>X`Pj{q{Il zjD4DlatuXTsg#Q0znW`B8b(PpKJur8UwcuX&J7$Y3aD0{n9g=3=A>g$Di@RkyS{3R zai4Yss|`O1L7*1ZlFNziZF{U*m#wYh{WT@q$AWcj_D(tM0=Z-ENz~x-J@6B z!)IQb93;+}ot$$lo8aY?Y1TA%)}|&LkEw0wcz9cI_5Nk-Jg+|2&c@9X2@{LdnOFmQ zjUClos@NYMlPG-3a67MeSb6ps-%Tz*_3(bjFulm~eI_j(pPZjveB^k?Ca-E)m-=Q; zyxO9BGM_G+=q-&ha+~z7&3&&?C_6mUk^&W6oO$OzGQ9s#Vy3UdsHejpQECg<&Ytmb zI`tWAnKT{P!BTI~`=y6#CoR)mBA=BpYM*HoTe)i$f18IONr$*jpP3A~pFttoH}j6#?)qOV{H>J~rQfiF6Jm?gdmi28R|qI~$6A3pmLKKGkvj6v^XgajZAFv$ty~^LIt3 z=--Qf*Y9(X%uk$1uQ9$a?nb&KO~$Fmdn;6t^E=7=?29^Ht6oX8DLJ=efn4c#6>5I4 zp;$jQwuCH~!}0B>^tHBd6AZ5xx8j%+MQloPar$Wf9cqdI&t9xl6cDZp+BmtDXT(xT zg-QzCxN2{+{7F?Ayxj5j?&orsu(vpQe0s4$5UVZ)(zCD5wcD^b?(kd>>s;;Iz9iif zeZR5em0yg=C*lfyiKY*Exv!QnPy5#ZR<*L@_Cp7Hzi$M$PLC<=qSLBP|G3|usnXcq z%#n42Ywm|uB(tM2nCIvur|n?}7Fr%dKQ`1Q_o;Ys=@v80|6ppn9NYx`o>StBX-&<2 z+ClV6%A0)m$;JW{G}&$JdO>DTm>#b3gJo%c>AhTTQIZ1#H(DCv1pn3l#g$Juhmp|S z#AKa0XBAp|Q&Tez0Y5hT5jNDHT*#wkFo^|5Q;_0;s$p;LaSUK#(Y+Z=BMTB!z*th>Mu(^w3E; z+n^QQp_TB==@KNgyppSm^44DS6=ET@JhT|5LWP-2Z?me zgP1R9%HE20a86LHF&AGNN`VEDPa$*)^->0P9bZ)Cj85-At249)#Pm@;qJ4kT-B&Qr zv*#>HJ$-ohkLMMYfiU`;n#>&!6ghm`9CXFfMBaN3gI#r_v)VVFm+xB+Czd?XT)j8N zjgooFK-6JIyl`V~p3il2c{rz0mT2k2Y5m6MPA`J7Jl?2c_hYQ|!}*12gN2N!&rUO< z>6>+wTR@iabsq+nE@H+HG&5R$`E1tuuF?e7tg{z8a)IptVU(-nVfRSciE*~;N6Uty zzPpq*v)iVLwS2SFIKpH5p`_q4S5KW}rBa=E@8Qo9P=3t!KQZ}*!Lh|9KMM-yD_+N| zy3n>Ri+E-%^VIhES`7v(gi=_2nKL;P<>cT-8BWT}cmXMn?GDI`J{qD{k@G$fmNmYA zl{@#c+okD0Scm8j)_dz?5Hs-~FTIm|x^nf$&x#3uEQc*N*uCw!Bzzflq1DGdf+v;@ z`mc0(_PpfVKN}&nG>-k8>*V5_ol9ful=zr885Rzsj5Nn~XGFF=nu&UIENQIrF1hu7 z#rQx+diH!yW<|Q}ExRZ4lO6JpHOkijf(t?o1!(q8WD!VX*`R4-O~3CMZ;IosOyIHJN_lpyd- zb3Lu%^I;!zdH1NS!X@8`g*8Ac!fr+V+&n~k{Lfz(8wNgxJo_~Irji;zpV`+xKhM_< z4Q7#7Zg8>I?0DPrfe+hzd=(pA@8{lO|6nlcz3pI_*XUtE+-za0%hZ*ED~IllCd<^s z=N{c`x5R^lp>nPPN$W}cJl=q4lfx;AzxXHLF_dkaJC>?G+xJQ5^r+clOC+b!e8K#Z zOu`5F7d6r@qp`q?(Z*=XY~Q8b8gSmlL-iI&f%jdCIh`lI*yf_1h#VPfxv2i*W~~3m J*JADU{{V2Be@XxV literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/009-ICON_HotendTemp.jpg b/buildroot/share/dwin/icons-6/009-ICON_HotendTemp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0bf1437c646d026ee3df5e16fcc65f6144cadfb2 GIT binary patch literal 1671 zcmaJ=drVVT96tB_DYr7$AnpDWAIl;Z0I43w11MVTB2E{5coY|(%={DywXLnjDm__{lIQgA(zVG|} z&N;smIUnfmVm_&(Z_x0vExgygQDS3>%z%U^D`Xmct33I$gf~*tYLxo zDEvZ5V06>Nee}5RM6Go{Jfc|e)rBJHn;{i~}5mc5C7oaj&38GO# z-vlbdlrqtKJjt19u7L@FT#3jOaUz0hAQeodtcl7AZoO)89X`(%=>el*8n~qab3sk} z9OuctvAu_;eUmtQXI1KR=G@8>(J_YAEet(DQmsiFEb4GV9-du!`s~1wZN<7Tmj{|m zr#^k5sB`(sUDm{_HQ`Wp;<49BjdHxX_F#8e(dB{F?>7gkcQ!2DvEcKs?kbrT{FRjV zUcyt4{%~k3=I?z<*;E$pK5%3G)G5~|37hlVF5>svu06eFDK*g1z5iv_X4^U?TsPCc zd&a!nOO95$yB_^mQ84!Y;R~hQM{`_D-q@TvTQT#KG^JxcDlcv9DIC{wFI0TZFnw>s z)_3hE_EuMsS*?33J6HF8hBn;j(%{p$+NQb_jmLy8bwMb3fc&EV#y@H7+AXe8)!T2U zafXw2vPR%X1_U=_(Rr*`?`P-_#PQBuqe(8e=@{O+=_Z-~V z+R~N1puVQUdl}pJ@1*SOJx!=WdogFxcZ=(sD{MdKk$+VFPLy;`9P?x2lfTdj%I)Fj zMOAGpc0Bo<_0H=h<g|4^;aNS(+JW@c$vRenv@2ft9{~ zUa?+cN`6wRUUGh}ennz|zM-ChK7);YML}Y6c4~=2Qfhi;o~_dR-TRdkGE;1o!cBb* zd<&dYGcrA@ic*8C{6dnevXd=Sl&_Q3Q(W~w5=#5%__*n4QdyVXR8GDRC#&1Ub(Seeo?xG?WUP)qwZeFo6%mkOz;^d;tf|AVqJOz-6iAnjTCALaHmqNUdTL3o}Ygi#E^!3HB zG&dI%0AOQ_OM+4n?!{_waY$uBs(w&vaeir0aw<@{GDvfQm2**QVo82cNPd0}EEEGW z@=NlIGx7@*oSi|TW}%=Fo|%`DUtX*U*5m7I<(XGpl9-pA>gi&u1T;l2Gc(1?($&qx z!ot$U$jHUS(9qSF|+YBuXjBvmNWHB)TNgx3M%uLKc03=vIfSDBx z*g=2;4nW$0s#%$tS=m`xSdnDlO7JuOA7BvVU=U&uVrCR%U=n0x7G(T?grS~+fteAJ z{edhFPA-rO(S+F=~y0b!_Y1l^yo* z@t=H&d(Iha3@3VBxv`=v+tc&X&7GppXF4}E&2y#?DbXG?jJmU zF1v5ey$@%c7#miHCOO=mlGT*(%3OVJu*H0pohRZxh?lUqy6`OcGSlcs0_(Tk+r;+w z9h)x0pSb2$(4+YE*?nudd$N-2+aI}EJ1kB4Y@;sS zee!Poms_@GCcCq9D!oPD+L&!hixv}HGWY4E_4P|0oqoD<>DD{Ump7W2B;SzOuIrc1 z7ZkYZxz$pS23L<_#^&X7{nJt(KQ7{#mp;wRZY`tgk;uiLwyh8>T{->qpSXI(1E*U% z1*ZA*U%%pz&AeWDdXQv+6!&%|?u&WP1HZqVw(ITBOJ81{JO3%~)$NWCHww3joNR4h z;_B|Z)`FjJbBD>L&_l}#?`+qS-OH*W^N2}S=HBj|g}0ACd9~@OZ5cyggT>CUBU2rw z?fkS(&A#vR{qu#VIF3J7^e>sXFWs_nwgbzA3$y3M76tH2&ExaSzEB$dZ^r(`JKTTD if7gHW{<*yQsh`td*m>Xmu~csVgY_aSv>#3Ve-i*zHX2s| literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/011-ICON_Speed.jpg b/buildroot/share/dwin/icons-6/011-ICON_Speed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..387c166566b72257cbca8cd39c46ceee6d9653c0 GIT binary patch literal 1706 zcmaJ=c~BEq9Dd8@AaXT;%6QOaH43rGW;Y38QzJ(fN;*x2kcxELaYC}n0?DqM#RNPm z>gbdar$Y~{Iy$5(9;IXJ(Rxs^^p7gonW{b1b{uM*ibD}!B~|baApki`L!+& zTS;r(tQQNqI1Jb7Ft9i`$hq7#w18C7s~DdJy?^#RiZC7vT5h!K?3|UZVu~Ahx~$<< zr@NuXO?uGWCCK8SIq2oQwBSO5-ddmE9JHWOakCglrZE(WrU*3_G(S=mS#B>utSnC> zMs2pnjT;EWL~8MD9Z48oKnNXf!gMAK*K2gRS(k0rlgJoQu^R7LX?9RWW3|MQ1sz*d zAP~?7^jel*h2bPgVmbmN2#uJb@z?tVS5V{g&l^{uXuq3hIDuh(NJP<9$<_%LRCM}y z30`hO_L+P2M55jP|EXSYWCNnIe!)Rc`hBLb-&xPmn1lASb-bGv)8|FVoY~6LE`jBp zEL%IiizQX8!1}9L4zXGzyOx7wmNPyN8}MgEId;3*=JN|KpPRN(7F1NxGK|M;%Fi(t zWK$H8O_*@JFrU;DrUGNWo)RSrDIGP=rC4{Jm-Y$cT+bx8a7u2Z9lV@anWA}S4ecr7 zSuYY@wwamQOTmdwfdlph!5;y5eA>`Dvfn@x0jD;X#lX zZCK#x60Z;xz6rK~mERjkgkjkV{$YgSPtXwWrD5gzQDB_<61jDdYB2~y_ zii9{tTtZT!h@_-w(%2{d@#tyZ#3YnK$Qav-$lmLQ6%hHHm z6i|$q2xsKG2+2@sBU;I)=%uTZ9jVjXF7y>_Y6%%+Gr~7OJPe5jVI{}~m*mZ~+9uh2 za#>u`o_oC&^V5qmhPU1$w_TY1BDG^yXg7yD-n{TlTj5d@Zrf0z`Mdexd#XMM1eGPI zhKdbMi^yBD_8#ZI?M5oAxO-Dxme%=I+}rCMtHerV&?bM0}P9y}oMX&H>d)>yoMZmP2ForX0g zI8*(~_x9!Hixmyd=S$13wcO1)Jsd9|xl{UZWoO06-kaBMAG@;li;DDCbI&igcKp%t zPG%`uEh`HN zqquhF@_#~WuLd_(ABssR+P?XSYvkvy?Yi!cyxtF9cJ6`_4W&Dq3XZN-4~9N2ID2NW zT2;abjk6ZjH=j@)>KSaZ<_c>PuGWTnV5^#HQf1hJbMg*krcpXsvMQ@uQC#0Ut7dLf z>w?!0YVtwsp2Gtj9oQwq=Nr0L3~xQX;%rm5>ru{)JHOAbNT0L5bGN;vVVMcvmVWn9 z;M8p0ucIjo>lTC-_L2*}TT*`e)+m2t|CbK7eD?XJohQlM%l=i!_v^xA{cUSnm@g5p-J42K)2DZLXea39_swy-%8 zGAEe1FfyZKahcPNxHue%8!9R=5F+5BnF9o}ff^@~xMjw%g}LsoQgDg*`{T{?KJWAU zJ79B3V-p5ih90k!OY69E4xj1@@|Z^bZH)VoQp zfYN(72J^Xj%&0eDU~P(zcYBH{2`QioY1W4R*4%<3G-*R~O-_T8w^K#*hH`;=tvoBo zQ(o*LNHk>~veswyF+4*_Zp6owu%gvxLj&Sg*;d>biUdNWVjG&OWJR_*U5K3%D8!^s zPVg9$aKudLjmZWAPl`uygVBr`%$PAT!C3D z_3FKedQK?Bj08bo1{}lj1UVu>EMq0NFM$3PUo{j8AfS9KvtBpshN78DlF!d@f4O#iCn4Rq2%ybh0I&+0_B!CA&28i zf?aeKaS|sMaXezTD_yf7t8!_UsDaa*fxT&*pm2qHrIkSTj=-m{VA#e;5 zxVDv^y%zJVdQ)6-_F62naxu9WOnKZV9y{ogCrB};M_1lV4?o4q6EDc4?Y|Eq0s{-k zR{0A-{vq%#fTp36EtN`M<>fJ86)Zzu)Cyot0HF%PrlHW~XblW&LN#j56DQLl&o=z6 zKpO@kK_m=mfl3R(TFBo4Dgc0?neQ)KVc~N^A=&wVZ%C*nYykivkV*}Q2ag~Xtk#5t zf-r65!tkhM%W^x}5xpqGOnj^bkWwnF2}(m+6<8h#t5Y>0#)VNR9-5Z8BKk%DAebko zS7~7_NC5};R5i8rPfGfT=8}QQ+RJaKNY#bn$v@h2(pDOlzSO4~YF{BNSu|4D5Vf`a zN;e9YwcdQxHnjJhyPanb{BmYu!$eF+xCu_hUrqbB= z&!4Z^(*45HYlSBlGG2%&KBfHHOs}?pU_0H^0YK-*TvW^N$C6 zL4AKuwhxceqEja$@nYc4b!&o&0bCRaE7k)xs#j6 ze#$#Fa(wBf?lbH$q2XBPz0dBB9n9K(I7+>LfiK&Viw=IXtKqx9&gh4uu6O5{U31^B zwvlAjd&IpvdgyY~*IkS5%x(N3nK;$t8(zO{&fc~ICezWl=Ja0D%R_~HCrd5;?RM2zZgSKPi> fU*Y@vVs3BC^53`X91F_*pz<72wdR_-!hhpG8+8u9 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/013-ICON_Back.jpg b/buildroot/share/dwin/icons-6/013-ICON_Back.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ffb646b396ecf6e564ca4f1a79c5a40a82a86fe GIT binary patch literal 1594 zcmex=+JW@c$vRenv@2ft9{~ zUa?+cN`6wRUUGh}ennz|zM-ChK7);YML}Y6c4~=2Qfhi;o~_dR-TRdkGE;1o!cBb* zd<&dYGcrA@ic*8C{6dnevXd=Sl&_Q3Q(W~w5=#5%__*n4QdyVXR8GDRC#&1Ub(Seeo?xG?WUP)qwZeFo6%mkOz;^d;tf|AVqJOz-6iAnjTCALaHmqNUdTL3o}Ygi#E^!3HB zG&dI%0AOQ_OM+4n?!{_waY$uBs(w&vaeir0aw<@{GDvfQm2**QVo82cNPd0}EEEGW z@=NlIGx7@*oSi|TW}%=Fo|%`DUtX*U*5m7I<(XGpl9-pA>gi&u1T;l2Gc(1?(8So( z(ZbQ($k@Qr(9qS<$ms$-v1Krq?AuximL5uLPzy1)F|+YBuXjBvmNWHB)TNgx3M%uLKc03=vIfSDBx z*g=2;4nW$0s#%$tS=m`xSdnDlO7JuOA7BvVU=U#tVP+I$U=n0x7G(T?grN!OK2}8b z2eLRBSlQUQ7#SIuffxy}uyU}m3otOSu&}Z)F~g)7nV4BbSlKuPg@i@f8I;606~zr5 z1C0e47=a#QVdjJxz{nuTB*enXEUai4DC(GKG;yI)lCg*iJIDW93_L*7m;{*x8SEL( z#?gXj~xMZ5O0=7yCYH~kuI_r!H}$F$nupfA<08hhHJxY$DdQUyHD^D#GR z%zjcT;=$u$qOHZW_wme`Dtp?U&t*uSS}MF;WA3T@Ua=C5AJkZuajFzD9RJ)NtZ(>T z?9%cup~jaAj^9_!ajQD6xO`{!YTk&_mX`KyDy>4Vq_#yr`#SS&aYLT^g`*#T{jT*t z`6KSp+C#T2TbDFVNt%^&BfLoLPPKVp=4Gco$!C@4QqwXyI{S(xPZnxk(Nb{`Tl<~y z@O6G)+sD>3w>sM|P*+eX`PlPv&%@iQJb?<9S?)fm$6ZrC9$BTbLB>A*;N__OyFT31 zkmdgEWU}Cd=#^Utoj*=_45TmQ;>^#0|e)xXM5ZfBQMm)+%XR%zRdj^52Vg*%?Ny}QtS Zt>gH1Z@aoPcZ;%D`@{RvXPKC1X&U!UrsGny z%v7v`3steBR2ZjK8L(1H6{*W$(JFOCs)*Z+ML}ze3zhT*0sSF|i<7UL6 zwIV{k00Gep99FHq03$g%EZ<~N@CIAkcpQ^K!CM-s5ooLln9-C}YQq+new3jvEzrvi zyah3wXb0*rTg@1$%@mUG6yqq5lyd1$&aaV!_LQ}D(vRa{)m zFBbE0TRtL`%jJkbgos2DR73<(Vj;DT2n!KBuAsySz0G7LO}K^QQq<~jJE`DNmA<}$ z**YQn&R)G0sL{MX)NFP&U{sbM)3G=8zEhaUD6wKlI!54jn;xUWgI#1Rnqb4UByP*V z@xt*grWtV(Cycn2laS!*S`;UIsmWr%i-|d-9E}E5TL@BX(PL_*f=8+FO(p{>6f2{o ziLykISRfY)RdG==dAv#~j#8#C6A;-Cf32u~NQm$(p%vLJ160@0B zVunN;Zsv?$8#PT{i*i!EF|J|KT4bt8xd>GZ;(FY-9(&wHO_0l+7+q>JG5nZ?ns^&E z+RgzmZFFFP;W+h$AZHIK1JDF$ltrUaE491^OoJ&<3*7~nF$#AVm=kc(sb~faGu#<; z##<*7A@4Vw#{r88{D2<}u>g$)!7Rvm64ZU z&ZN^kp|L|6%z)@_?tsPi_45y4a(RJ4y5P;C^tGzcx-et;l<6!0=v2v5eBdz#L}SB% z<;$h}33&{Ex41R&mHJvkKc;sW3#<3bVihaF4&_ zR5@FpZ_sS%R@2W0jqrDPT|0dQqkkmvPWzme+e?Jct(56_p`=dJdN%DYdXw({x} z?hFq$)FA7tXs!>>A=!VJ=(_uolcm^N7YbjhN*srbdL7p!; z*spBumOA8GybVr|3G zmW9DX#Kup5b%Jk$w-0x>FG=d>Z}~p&bHxK`?d;r3GdsQZiyDPNGi%Q^uWLEl+?l!K zr>n`UGIjPj{hwLwO+|LaUr^G%n%g1CO&=cE752yym_?g++tib|IDUO{W@W~`dA3td z(Aieeo1I?ry!Y0zgOX#t^-qi7XTz<%W%jz^6ZMTX$b;jCo3E~J{8F)}|5^L#)VsXx d>uWxc$7EPmd0yTf5O^^&b@{=+Tf3ay{{#JPWHkT) literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/015-ICON_PrintTime.jpg b/buildroot/share/dwin/icons-6/015-ICON_PrintTime.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b7bfdbaf124e081e4f9a8f6bf59ea2bef1017c5 GIT binary patch literal 1759 zcmaJ=Yfuwc6uz4fL9C7m@@NXWEI36p*=!I(R-+RMp{T)tAck6}d90GgWY^6?0<^R< zYOPeAfM8okiy}%b)fpaY1&fa=QXGGX)+ac%)tLf@=?fAT>1>1c29YKLUJJp3zbOAmGQka{zGP=c2g`L*XcDvy1g6(m;rf zq!o4QDHIb+P_S^ZlhPY41Opq0^=6v_dE9&kfz2ibk{z#+Xs9G2*Zf`~O{^?T%QO~R zjB*pQcoDqNi94;7m0gpur5?@2?i9%Ar5p~2 z*byft>Gdckm&;L!6qQOvY=p>OU}N-7krn@cjJJ(r~5q$E$*65*I^v&}?0>~p*vjRsG(*%`gfNTjM12&*DCn@u<-!Q?U- zrk2J@yijIiE18 zY0?UNuZ^20u0=JW-YC~JVJ%qlgj|#@2K7AdxW^uIu@mGmeWS~6e8W%J*omjv(RTNP zY2JYarnBr9g4}n(W&ruXVJ!}aUD@RoxEwAEcJcFo%k#qDg8&~qbT*pD}Gse5|?pbNIf5kh#xX(1=CX{6Wq3;rvUJhs!#;@Zx6OH|mDC zSX0UuHx6}HU2My0*{q}&gx4$+pP1W~Tq3+x*?CP+mJ(W89UVMtmh0W+@xe>l17~LJ zKrb)+$+AD;`HfX&<@K|E{d7-6Q?cSlr1+WRWzo5RqeR1kG$^Z~Mt1x!s=v1(|K6S# zb97U(nL5qiGj2Z$eo?r$_1?il+f52~R}KJfDN~Ho3C8s;%mmTbt4w ziIi=9eVq>uSL~e9$ES-{YQ9=Mq@284I3n0mSt+om#cnZNz0zZjZECEs9XwpQ`k1y+ ze6lq)wS&QW462*PR$26bYmoD0v--E{imAfBXpZW+Ybx*e{`B+KCrI8-c?3_FSGTrj zUfQ4koV`_DUY2-zMEG%eb|)K8wkpyNt>`_o;c=!E>z6zo zP!ybpMv|h29icr>PQR?ZGt7(>oEoy+wC!6|UUj;vJyCORvvT95@DFQ6X>;!!FNp~I oI{bRsv6Pt7+Gs%~?21`FqavrheHv1NUWV(0F%d0++3wr_0ix|k2LJ#7 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/016-ICON_RemainTime.jpg b/buildroot/share/dwin/icons-6/016-ICON_RemainTime.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad958d31af678b6f903d3f23d75a2e4340494f62 GIT binary patch literal 1703 zcmaJ=eNYr-7=Q2fPO!9GDCR=4WzkgNZg1~Sj$Q9$;J&0d6Qgi6nK|wjS>bNi+eHri zXmSck1RN(!!?G;1XSrWs1oW|v0vMG(5 z@nQiNi{TnA224o-*5%HlcqE%zO8d;{-Nv6$g!Y)x%vnyYleJK}^xR@U^>*>R40my! zoA97Xa}ZO240u^D#k-JzH{ZvR0W%sjC&gGwV<-}&@Ofr5S*nUGbk0XCjGsbgX%f_K z+@M2@ga%L05;{XXqSN9=Ol!n&y;_Tt+5}QhAcH`~YJN`+xxi{4tR?Qu=-{CW3kx-c zdJW@Wis1x7U|Jof)2T&Mt*=cZDvW>j?1(6oot+AS76k!;oJ zwFHjak_o%fX2Fd{tHollTI_})t(9>Xcqt!0r1gwwZDVSsaqzNYWh>>US5O|ipYbBW zW0UmQy`+rkH>mZD-HT;REhaXDNk4bg&mKyN6C{PhqbqKPhoAC^6Ym#CTet&W2o5ap z92K9COy~d~0@*O+VkDP~tGGM?B!@(Zi$VgV3?f8A=rAO?$W}s-GDN9Rj`}i8d3GQi z1#l=(0Tm>JfgF}WuuM1(d;mZ)*~t3`AS86W;yEz|jZOlf7#A`L$P`k;&=4Pz$rZ|R zA#i9|IEY4HdU-r7GGxk8QW=2dkRlonQ;tjj;49%Wm>`PfFa(1n(DilHj_ObTFeJ9n zZu!ZW>IemtRyAdUeTu8&)e6&AMzz+!oy$rgB3rM&_g!htz4ZgjuDt(!zrJo|JB2&2WOR8GJ0((Gs_P4({%ek zMTrmpJYHM-DU}`}fci_H>!06vZ9r2uwU(}{X{_sgFgMb~s7@|+U&@)y3bvDyR{zj6b2M=ah_>%b@9vNsUcc}0(w-~TD?zIIRf z@~|IR?{@z!0o26w{r7EsO+(YZfr&iKZhoBFJw*c@sXt?I++Lbqb%oa-A;a^JA#b%+ zN9l=n_W_A(1X&rp96fHk%ui)txuB1IMQ&G` z)|Pf2#IHG~Uq)khHN`i!$F-V0H&>r@?yo;lcXeg>vW~W_6?^z|rjlRYIn-bEAo1$d aO$W+!25#%`mFmdyXcN3`N35Ytxb#1b-!%UK literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/017-ICON_Setup_0.jpg b/buildroot/share/dwin/icons-6/017-ICON_Setup_0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92fdc079c6198aba12abc9c8fd95a32a77fb2fb9 GIT binary patch literal 3990 zcmbVOc|6oxAO6jZF@wU43cYBIC4@0!88eI}V-4A_r3EuXgPCDwL`jwq%9f?YD2Y(0 z5aJ3^*0w7}X`v`g|CD$AdyO<^%Gk$#~VthNpY zFgA@0^`ivSxF~;GAe~7xYVDgfKb8ND_M0oG7TTbYsw{RSGwlgf?H973JyRgtB0bH@Yzj?4S6UH= z5-r#?KQ4>y#$tv1*hQy3EG~<)hZTyluvpnOLzLQYbS9M*!BJn;I5-e(nH;VklR~p4 zlh6VeZ91Jw#Nx;}Jwq%Gr>jH2VlB}S)y@bR=2#z2sgXa~7xe*rJGR+tvT`7xX!t)3xHkt<>|oJnr za;S=@?pJ@U%Eq;i{EXQ%PC67D@Wo5B`!_LTXN5g@qSzOagwy7u&ad=l>&Z`NRgcaT zs-SH0EWmxUgTkian`E0x>K4CfmowMft9MyBtyPDmpG5)C5)`HTiBxIb7yj1V0^3N6#^+Qo} z$FCI|x2_rP>XbBm<+Ewa+xnKx24APb4Z_Pef@$S8-Ai%_wAg;7cI2i%mZdiACbc(6 zv<{fnMQb>(p8ZT=WpC1K9-Zl(H=Q^XYReJc@Wn^k1#|p`IpHHd;8d!Ns1rgbE(#V_ zk#Dr|kv^2@tb4MHj6B%BKCyx6@jfTb`&}B5La<4WTT+Hzjj8&4$+-EEnx}kR_35Gh z_h>#)Qv2{&$X@oKTDc`s&ZFYIB0qGT%#c13b>0GIw$mBA{dtPvBH_Yp-CMV^N4a9~c(iBV zs0bg(>g{NnTbtU{M49(UjPe|wUC6O-PYr90Wk2*hZrXvB+tz>#4)EQ?&P%^OWW?)g zs2NnPdK!Y@o!E}JeqeGw5OmLRV(-!2)?4=tUwy&W=u5e9#ZB$Jf2N%u#^Z6+P~-iI zfeww%Y`W=INOW8H^G}CIGaQGXNCgG?+^$h}6fEU|ZHxhGO;2ZZ>ELHRfS+*ndF06G z99p}k)$efQI{$k+``S7PK_lwOgGdESQ{_@MJRZOUhP)!hj-}A0q|clN?#Ifj9S=T4 zs~qY<9l9ufz_6y_g-7H2Cxx1O)2sCGL$@-PzJ{^y@#2IPirTmBKU7nrpcrgz#N1(U zw5EwYRZrD2ipR&A){n_FrXM(r19jhS>gabW^iLKcZyPpB41$iO1qUS+c%HBiP==dQ zQWt|+!oo8B@TY@%GxVO~a~?P}D!bTLIrFNdev`!yGX}Fx+ z-6<7k#uGnJdI&(yyj<%2TJg03X*+WG(bC-v<8?MP*ojL!q6?yeF8gjirzy9VwR>;z zE9)_nkQ=gzoe@vYVT@BZv(F;8|9KyKz)}(%3XT>0SQrtVx9{jNs$#BSMV<9}yJGe2 zROSr{zO|ReU=I0BP1~o;9#mL**81D_%Uav`$|sfM;xIIV^`^0cJUSt5woaO-r&1!Z zUfoD$WOGOw>S%FIe`flBQnKA_vTLu&oR+^a6d?#L6#8I(7bn_7JrD};i?prI&Rf5nPw_g1;*h3nPt#~@eb*b<7b{epER2K^K7nd zN57u<2@V*iyshty(~Azgehi88S$OEJ?FUOfaJ2vCA3o8Ac;2ZR<@iK)=F`1yMK`i( z?oa7euMXSXE7f>^huZ^jD>6Mgifum)ITCN< zv-8Qbxxv{D^Xtbp;@9X~S=&=%a%|fbyypA?jlI)nW@66aJqb@wG_nT=+ZBoB|OfHS12o66$b2UuquYm?uPdkSvMSXhTYXe7^zI_wQZ z4+5O8^IGGrS)Io3mY0RR&bo7CE~+RMVBN{Pu6XGdS8pi}b09xJ#|o==`65r82P7rm zkf!qT+I(eAw&bq+_WnrN^_d#*`_t4HuNlU{G1uxD`8kdeeWGse8+tW%iE2EUk{ma; zfOTg}Dm24h0TwNb_1yZIygy2=7Enapb=QbVolHTU$nL`%w{EF?OOmaf)qm+dp2-`@ z>O^$aQSQ!NdY>QSPb)^7W{?aN}B2DtOO)@?Cm>KeBzMMGy@w0?WHJ@uL5whEDWa2#u z1jC!13Szk0m%|D+ZI4^R-XwMG@Y0?h2*jLI#U^&9v3#o+v@$=b+7g^H((~8@6B5Yj ziFvQ`9`JERqN>_gYY#>hMQSo4AS|EV#}14Llsol2+La zWmb#n`sHo#b}G8!r~x!$rt#MuU^_9Yf(heO&`zI$gW ULbl8Khxh3JJWl_QMhk!Fzx3csf&c&j literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/018-ICON_Setup_1.jpg b/buildroot/share/dwin/icons-6/018-ICON_Setup_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c6793452182947a859ec71fc2fee5530610261a GIT binary patch literal 3981 zcmb7Gc|6ox8~@D=29=sDS&}ibhA}g?nJmRvuiZ?RbY0BIHcQMf5^)P7*|MY>SF{k7 zs9Ypc$mL3j?Ab37WhXT6=-#^b{k(7Q=ktF5IG^*J^L)S0bIy6r`5bOHcNmZ~WBL06 zfR&XRAPD>o?t1`+XZi$&10aBpH|!1o++hgPkHMhhkVtBXrWc9kP1f|GQIISzIufO+ zg#-+YS#&R-Kr#dFO+M~VHAH-PREvQ7lME3qI<{K2bW^gQzvanbvhzthg3rl7A1n!B zYy>x8;aC(ph0O4RvnWB-5FE=8@kJcR>u(Js5%4cAj6g%g;jO4}S6c_TDJ_@`*U{9~ z@Ih&#;d)q2l&%&Qt*s76YoYXzT6#znMnemQ)6&IZu<*Zt;6)22`Qn`L=6}WFS%!$e z78Mp2rWuCOqy-;GqOe#jQVWelqcwOQ8X@6Sh8IhN8lv!30Z$I`3HGNm{ApD9mZFz8 zjma=X@G|{#2^9J_+5fs%|8TUm{ok$>%GL&akqu!uk^j#3zY2#C!s%qB6FG#&4E7=O z+!eOSbew50*^5C7CeUa>Uw6^LkH(;d_|fQaQ`4+0&6e&yn6K1>Rk z%J|A9{ms??E_bUOD0E(AJUQ4uluR-YrcvNumW}iOel9xS)%%M}`hG6D-{m5C$so55 z_aBG-b%<9%TitJ^%QL^h}#F81wh{b=Jmi}UdwC# z1OyD>f!FYD0mAV!7 zJ8^q~?Ywwk7z73w0}IG2#luQ4t%S2S2rp5=Z2Z%&h8VV-*m+gcwapje`xx{*M~0x2xGDnE$3IC$PvTT+pBAbO3(DI(efm{G+!01}$yXkypZiR==t@xz z36p&MTe|LKbx>?2Z$`|u?PP>?v~PaR1kLW1YRbb6!>}f| zsPMMAOVDWf!94vTkxMy|0fT9VFXuLt)zv54b?UbfQ`0H9Mt#|K=@H1#T3VP_(Mw3aXW-lwm;sWoc*)lPL&wVt42_)_Ffna7f zmAL8=FMj>c3NTaJLC$%<`hdW=ANs=;yN@xZ$ApRJdt|TPjOu6ERt;Z0r*`r1qCIi3 z_0a+06&-#Y3UjFmzdOoQ{6^D!=o^Nu`$7`V2W!cWSfn%(YcjpQqA|UDQ78bV zV3#Yw9Iwq;y}Ntw#?*;SGi#>#8U-o&dwK;V4f?rz_lxF~HI3zK70-LAi?lt=Nr}u) z>vtO;jLYc0IJ)~f+FC?0h<@Vgk^1<2gOLkzC4Qlch{TA&)(h8uB&aLwM!5byBE$t8 zUymGH+;NU`%5%m%w&6ClGTd6pt3iM05SFI?L+(bLg43)(a)6P+X6+P*|7LgspMFc5 zr&KvxeZWJnLDaXUZ}=5L)%v8m)WgN1jqJy9BF_NkFr8So%TaM(Y5m&$%xiANY+{Oe z?`dzysXFFhL}G6|)uT_;FW_kF{rz@uF7Uu=V5%N;iP-m>vAmw0{~TCkcqCSAU}}#B zcGIq7Q6*OMZC1X`@!oqoW99lo#`1(MH0w3%bx>0|H`1Z3g)WbH+PQuYThEr|teq-9 zi@e9ZD?XSce78n>ZZjS>zy-P{j!PSNt&fc7VZqytMxF&m*7fux=Xsr)YQd?_7nZ2{ zPKW74#u&vliWR*pU60vr*tBre|A~pXnYiPUJz=q#8R7L~Z(f1BlBiSycxThdmU^4RYF`Lg~WppH_wq60VAOrcaNV&x7cyBI{8tUqvq*z`OMg-3{EayMl z27O=TTQ0CZrBQyf!@|Kb0p_wa-RUUd|Iq?PCbwFxwrGg-b{qFJ&*_1xfg8r-rNY!jZ zcbXJ<8&z`GQOJcGV!000>y?{K*7QXD`9%rNoJBRZ{7nc=q}@d}`T1>|u9d{3;Js6; z%+~aUJY$J%2joj3kr($2*e&mfGUnuG%g3Gew7+($W?zwP52xmrT9>u*n!MBF3k|uN z)xpEa{j-(pF0~_X6~_acRjZZjuV`CkhL%p$CE*MQYM07^*K<;wc%iE+c&owWn?J{N zQ|bKzY^ZTT$=t@BN9rWI>?kg9w`!@*XAo&Mx>NRZOHIe3ZPe7S_@Q3eKG&+kHH=SP z;hB3g8H$0d7Dag7O)jv!0)3#y78F!rv)Ng-eS^xLqB?c@vunoOQ|5(1+&eJ z)QmLo2y3n&ah`#S4Fo5Cml*f&~JJ1f<}vBeyEAKf9? zl!kPQnmupIJc5~i{vPw2{ms@Zr$)<0kIJc6i}wfF^%uSyd-(ZPK~Lq38FSLa+K)up zW~FrSXAPW53grC7>UigkgrOJCi4|#icElNvnGAt<7RT|C`O6U;P_0g8+t2L4Y3$Mwft}#CveA_DG#Nz$G}2T(fVMx<_bdNYg2tWCFA@7KjT(VipTr_k91-#30qY%s4#utFST;PRb4S$S+ z$3ok)3~5#e<UgUYAvbpv|NM32Y|B_I-n5NbRyUtlEED{OMb4{F`} z^WTy9!SgNlVhVg*+#ya<+0*% zyVGay-wHhL`ZUw#8MyurZ%d{9OFO!>gr_zJNhb_4S#K(@E9(a)E93<|f3msf_-g0x zRb9!iSKMcwE_>i8^*^=5lWw1fO?oRj!_~WMMk(3eNuMo>*WGj`gQ_g zgvx-j0_jJJQk0Cw;R>te1go*RhU{`>#aA1}-8yS0%#VEJdrdcofLpH!Y^Sf@HEpsB z?p&L1voGmXAFS$Ph6d%7M>e&4-y5r}mA&a;@{@Le?HTHl=393BEAf+eeFo$*Sw=&; z9jvOjJGh8(Ou3^-C_64SVLwRSt@Ozs_eXwtS}|O!VLb=SSdL*Uo~g0FlEiSaZ=gNg zXFb#=ql<)wkNz|kS<(=mUQAhi!3C1T>=)mfv>zwB#^$?pxi=+hixj!V2bS76_Y$2+ zv8Rc}5*JS-tPk{Xdc&E_N=-Q<*=a_}vTw_Vz}nL4HT1jw zk#AqgM78bMr!iZ>u`1s{cKf6VdCVi&aZXwpP$ix M`Hq)$ literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/019-ICON_Pause_0.jpg b/buildroot/share/dwin/icons-6/019-ICON_Pause_0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f6e83110965fd56b0366cbed7c0a52524a60922 GIT binary patch literal 3592 zcmbtWc|4Tc8-HgtB8;+R$rv|V%s$3UBpI?zWhuEKV`gM*GiJsbLI|OT7NX5o*%Mj2 zDTzwmipp}^MC3+A+G~D8>-~Ig_n+VQkMlXtIp6Pdp7XrVIq#A5OCAC0wozPv0B~?H z1`xmxNS*;mdN?a68UO)M>G1CWAbAAA28cv_8WtNW#4y=BKMsb)3&BP)`B*##hXpLG zqWDZ!5J!aa<80-ITB4t~oQZ8!m3`xpVoEoQAdD<+6VWuvWDqAa3l zQ6c;gj);kh3JDGs(xNQU^Ui6~{@gGYjhd&3f-KS2bE~2@G1jAOcmfWJj4?B1;YkD( zg^IzO;iv?X35tNjQ?NJ+7Ed(A;b}NC8j*_n3bb@J0o$MEO1JyEmejIDf8A7MWF#h% zh~WvgV)0Ze6^kQa2?SFq!&Dd@Dq=>Nh6?q*d7yKIECH7<;_^aKa~_#~yl{~vS{mt> zErjsDyZzT({X}Fi{+k*SGM9jPw?dIC=SRH%>R9L=&F5fUIYM5zfW?v0_2$HUnvHQ9v@|6GnX}Ul%WSVl+BA28qI4M44OlzP{a&naUAHDXsH(r zm&>N%33zKdQJQojj*7?ITCZMBA)1@hZAo|%-Hbq?eACi-tnd&{sOX!P{X~7t+e?92pA%Tw1Lh60-J}- z91!0zCzrBe5C}{L28I1J^PTeF9Z5TYL;!4HJp_aVz(^1T36fj{%B1HU1c5?++yHQPHI;A#V9`?#;gYM2LP`SUHn5m^QDe!Xr?!)u)g=|Hi*t5+` z+blBn`=A>RpeZS@+|!EwHXqzzn;fPJ()~+T9xTj*rY~OQ3`ZI*tc@_>jr~oOOTWCV z?5-c5XTj(=&s{nlS(Y2vn@W;x5JG>y4tVFks5hg4g3?f{=;`XsRL{pANxTiUFRD>% zNbEf1V*P4=Lt>6M#X%th+4HecbRlkVqQLbKL80_UlBNyk_EcQM(bmD^`}KQ5Mpg}7 z8~bz$l9S!1-7uvv%X>qfg&#ijI<;wk8b7(L-KOB7{Tcn)M&+5!so3IV)qr8WeI|Ex z_K$-`Y!P9OGTuGZc5ZCP2Z;dl_KjN&{&PUnyL7J61+zMo-BRZ_g73|en?M4>kl za?Z71V`HOZpy)Wf&1WdlTq({#L940k-gC1jgTLVO0H(6-=j=B zH<;j*>mEYg9-_FSW36?wcVXX(y*;`6vxf`~%QH$Su7x`d6Ly{{e)djr?{rs^Rxfzr z!|Vk-mphIpat7)OwYn0lRg)GT&9>d-;o3Z31J$0m?I!P%on3Xx_Z{$tiy7g)El+Qi zS}Vuv6@pvY_OSzrSq;}w3T5pr#(|#tZeegjm6tYfUKsfw5A;?BMcep zHk`Ly*?6$!f$a@sumcmdP(6D%1ECHp@heKAc( z%8eBxJb2sxjwIVP`Va}56N4DV_*V)!gP1NXxnFHz?74Vc^%42J8S%8bk9%8Y+uP^b z;zRxfpU8Br#uiT4OU(W0u;g45`=VVb5lB6vas~%5dmI?Hi=cBbKuca`KxO4b3H!LP zSQ%tN>o_hS-D$n%YWm~eU5Dw>YYv)x_8eF{O-{@TUft6%z8-R*%I+=&CR6*)0Dq>X6BtyK>~mtwzF(;B1Ybz9lA<Hql$J=0(-b86CTKF(n6d91ei`%)5F_<)*9O zvFwhR#3c70PRW9F*Bl$u?pghBQ4djhaeK5 z=G`Wp#|Q~96|qma;pvxln5K>;;6E6?5_g=bC{SFO4iV|#);YeEk2K&z` z=4vi)6jUe%+`12m4SDbA3kKA7|DB95H}gfp$2-8sIu%<_QHX<2a&1?R$E#mN?kdd% zDTR9>DJNzlBu@pQyW#Y z3#N8|nMK84pMN7Bn#n)L-xd5xMjRp>^3cw%pWfe_+@51vQqZz`m3TVA#kpJkxNbq7 zJbczLwSkN4Olj)qc)olev99OZtHvq0E#f0a_|NN`TQlD=5AXvw?bI2-MKo0ZVay_I z6JL4#O#8fnd0mBtccHI2?dp|ku8^#jSoeZ6z*o?S<6e}rsa7?#h==afslx%_nEj_ke0%7j|kqGnTT1r zPj9!)*kckifmdmdx%%pvs#{1V*A#%1u{%=Fs2;hx{b>$aqAZnj}vT-9-xY4cLC%DG%8 z&vaK)iJ8w?haBIfmCZx%z51Pl`8zLGSzNz8F}V3^{Zk2WC2Eb)+Z`W|*Cfqen?ABz zld*n(>S^$JOxkltYQTpi`y$^7K-NqDS70G`Kaq+#QImjLU27@HP-R=hVPG-k|IQvaD5?(4ap>v^B|zVF}fd7j_%Ua$0lbQsWZieUu- zfQySMpaA@UbOL}oM$*G#0T2L{P5S|WbQppO5ej(}42B~>2QavSOf;R##>52hFgP?8 z1K6yJ;RVpcm_kG#GnmD(MgHefGZMjK*dl!`X;>Q1ff>SD8^>pQ#kqUa5Ht)ObKkn5}L>leisciQA27Iv<2tAoU^8H6+fp;vAiSc9#xRHE1Q%2XH7xO3% zd}e@<%lGDT!@upKM+jHQ6@+kk2nUDxT_Yh@`m#6-ZnVJUi-ty{xNro*01ln$;%JMM zxu97r1_g(8AY0m767UvSG7jftMlh2A`GMxEbHsZ^&DXd@Tg8!x8S1se$xmf&Ci;*RRnLpg04*T1btb*o; z-%D5a@V)q%99hNlWu+~B11$bhumIz#>+Unq`XVLiP2*e|jk;k7o3R)sU=q z%pTzHiR-?9n`Yv!(PPx#0S_aBqAiBG<{a>V78IqAucdm#NQSdhA8hSr+gnxfS#A$5 zv=7%WYabhJh(oDh*a9gR-A3hmD{_oF*rTh(m;am#lzZ+U zLJ7Nv3V$**rY2WZDA|8LCrRr9lL*#&0(PpgsshC(4tBKNE{G+io5aLR0fR!r{!s>P zg~NTrtd*z}=iZ^G%Dc|>thcFGZOu%Ij)2^ZvY?7)QuM|>d_~?{=w;$5%P!m7Q#n)C zX+xFb50_f5oyst@oX~L>vlq1L_c!a;HH}y=-g?N#1&^6bgXXAx+MgZ2uQUJctZCOv zn!ESY0Z|Lj7`!BFxb7z5iC;Z6y+bQ^+?hO`)=fOWq(j?0Z-}nGFp%u#)}DrkK75zM z+gjCd;_zG7xO`M)CC=~`?_q3ifvE5P4|3iLm3U> z74o>J%1%f3gy^R{)HY*+l;NOd*_K4RdX*Yc)w!Z)8%~ylRa`Q4O%BLP^h$Nvp?{>v zp}b=u`*Z{lL4;lN@orZs#EmTqF_;7!UvOQ6pHYu#Y}Kh8+1m3EUG$2uPfv4)m-bv` z@Fwk^Dza@`Pw!k-rTod%yVT)jg@n2}+Ue!-M%lSu8srgZ>QkH6)Z|&@iAKk_FZ(|h zm0F+C?#OxS*B3HIwQF(>xuolrQe2onx$0S{6ll5fgimz8yV;^`d$Xv1Hq|&v+)?}1 z=GJ=F&Qi1Y8-7bQxL07_7G1N*R5QK7ab3UPsqu~s9fHEf-)+-<$ICY{4p4B2rF92M z;jP=fE&l>PNJth_bK)6ywZJfx^szUz9wQ;srN;pua(K^a7ipD z=2NFwynnI@;}aL@dZMs-tIA@7k~G)|@RG3Ys-U-JCyg&2 z+TlyJxi^NAn;cNle!Pe$8aE~FOZ@H8d?Bc>ygGK{)KG$~4j4y1HeFhp8CbR>L$pGF z?@W2zCu@~B(VF8%xctl3h0m8VGh6bUV$-;KGkm{ti;kBTz{tj@%UB-_gXjhC_lj*R z2fA)77x|SAoO^sgfNQ5DjOM$&`fEYexO>|4j0=Y9g@z|?idsCkuJhHuJY-wQ3 zGQ#3X-z$$-=@vmHj-R{qo^5;E5#Yb_bNmjyk?O+eslv%(*jT0{ulVzY(Oro*dlH9w zTFpMYjM!+`n=~J$E*DyiTxIvguwZ1$N%g<_}iQz;yp; z^G`W#6ai7W*iW_%%Yxa~zj~8C@U#!+QYaz8A=D0KT#^yAW#Pfg z3q?J*?2w~7ttyFyMyp8YhYvj%ST9mfkQ`(5A2-g*nVnF%y(#PZY_nthGO=ql=B}B+ zc<_T-^^~a1W+y0{L|Ln=(_^FnY4x5xK_F$$L9A(>hvr2kugj-d1h2_YHA(vFu0~Kc z{D%3fTT*~eoO&&SzG@P>4Qp@AzXEHZvCXuuSzvQD;l~_WmDEyy|7>&8(!{+S=}~WR zYQbX6pDr1yE~<6dJI2r71$j%znHp@?+1=J?ag%>kRsNd%_UhwHvL+=q8=ZQnj|$SB z1&YpS>e6b@sLuA~aEZ3H5%1p=P;L(0!rSPGTXF3Q>%#Rnt;xFac6FUWLFl35m5PT- zHkkDrIno_34WU|ZBs>?i*Zv;;jyt4Q(6%Cz^q5ADNa7a@B&@XZmWbtUzUtZa%INj_ zS#PYI5`&{=&$z`IvZ#$u8WN1M&JHG=%TV$OE&UInV{qN}>u$HpGY!aPEy|0|UhEV{ zY$2Y=_Vse0Y%$yUhu_n_UC2A^#vL8%_I!G}<)_0#>k78}sB9KbELW<*RTvT?9_13_ zdM4Vby&~@lXFoQyME`?#;$V+ULio5%nw|eO+6wV)Ww>&xD6d5cfL|Rc`JDRpKBwqd z;v2nJorpY*Yt_?9l8k^u&wB!wd6~+NU)Jur9uC$LWLgxyE^O~(p!CJXYEDm7uCI!Y zs57iyo3p2{!V^!e#8XQLLaGJ%tdDnnoIm^e+tr`eAhC5uChh8lM-I^L2AzAn&o#E- z>}z@Ds1-U@dgc6q5Gzx{+Rd}|2NWfW@k==ysF%y7K;DClRz^eent^)5xi#bH$R+o5 z_uli=!cdQo=E)c27B-i4?!DEj5S6V|S4O_#gS~_YrU{}^CR~q&t91+ z4s97a>9x%w@=Qycc}6JuxMTmvIZ^k~hn%t(MO&l*OJ&Yi)bg?`TKK>+ytB=+%wsg4 za8{?OgBy?XR~J~_ocpV>^_C9A|gs58r&#r zsVPNi@rx2sH=?2_gjVw#Zp-~Y&+Yd-|IhP%&U2Q}=Y8LE&U?=Hi2KFEz2k8TV%U-Am`add%MvN%+j0RpQ_M(bl> zhIj-Ti^5~{cfc?xv>_5@h(zn@qR<2smY|1+eFa?NjYA0~xLMhJ^(AQ;!@o|7&*vlf zdI%OL42j0$@kkT~iNWYf7`ogzCXW=W%j9Z)vtUK#k~uUskH%ucmMoG&SkXLVxFpiQ zr@&x;H~X(^^$((>j$43}6z z&}b9_8f}R+x51+^dMG>^ZEbF$kG8b7wzRR-x7Np67+8GMTCvE{3@VfNO-uQq#r#ye zlnxBG#IqHZLyMtOY&a|iY@eiZx(K|_}o3}y%;bk zSHEvm$fTz$_w64^$X1 z_c)C<(JK#`UPV7k?C7otJUXAx^m;0F7(0xrk{3WlwzO5btxq+~?TB_ky(b&H0v;u` z-Bwt+It{wdR*(h6TJ(veNNEui9?gnqyv1xiwdJRzSOeRE12fEtk7$Z}DY6#d}9@B8hbQHI#Vz zw8t$}p&1>I@3R$J1rT)n$M~Fe)kOuWgB{14wO8zD7X$Xl`O1lxq2rZmhtj2+p`z{0 zjOHUn=Bi4UhF^S)4de?wOcMG1w@`W7P_Up>eXsT2V_x2q0%qBNs7bkn{r5d=R~j}X zU%ktO<;13OgSuiKK2_{^@^-g#WFr5d2^zcWVeD~>hzqI1`oampnPd0;PC1A!JO55U zY*Kpkb&JMa%4T=^PREke-;9*pyLA<%v!AUmnp9WpQGG~mb!gI;+HoK$YvN*IoX%U_ zwk$Q%gg$;7wpcXTDC3?!q>{T=BkF_==z88?HB{%D4ZQM8I??tq+eUJ~5Piqh>jQUf zRXqD)^MSdPpn%V9uNxY(OeQp@ty?zT)xULz@mvf#WDcXDza?jSECZKb*1JVmk#P{OQRF#Limq5~x{tqhl=m5{ zo!8tN)e^+QSXynEGdxvufD9doC^8jRgvG}@I`nQhp>nyXh!Wpy-g&0lljs+*oDucv z%Ikc*+8)|FG)TAc?&ZJiyK7Qm*7As&ZIa-C{}5HvJ9v-v;#hB7?o+}D>4Q|uUqfR$ z&&L~wTh0|YJ0R6D%07=BHq1}noq`GqTngsTUb0sUi2Y(To>9Dhc7BJ^fV%SWDPz5{ zusPkt#Zy@!Ax3F_L49|Rd@;21W#?WQl2u1}_vK%A{u2CtL=5aftAB)?IfoSk+*yA^ z(0_L49T+lsc2=bio%jhc<*e;9t%9mACALiLeBF2oHFN(_uBI(5(8)ggC2>_JRX(cy z=62VyU_I5r%(|zS3RjKXhzdpoJ_v0qo65h{@kiHhz_o~LK7<#-^Yz32o0<$MS@Ff8 z*;;{bTp4IFV13D`!^dqeXq(%fop&`9T1VEDGCWnskB;eCFA5!u0JMqO%({Sj#z6;wZuA@4owI}}KL@hhi zaIs5g6ZS(Nf=Z6!BtGPcixQVV-}~*c@82cp5IEZw>>tq{@j3XQls+b2aJp(CoO1!Wzq28 z>|VJ{1iRgI{nA4#9Q;$KtFk8HA#31}Wb0*6b~o^DTAiBy480K=G5geph`ro6#`zcS z#O*GA{ZsmRzdt#tEZVF|9=PM0M`;nB(P^(Ht%BJopfdBXr5$>1Se?K>UlLY4W>I)h z5G0?15?GN~$tdG}2$#OVu5|$qa~qy`U&K`A7*x-h$_>@8t;}A}fNGqz(^586E8Akl z(H=>hI9%PJGkdUy;lIz=*2ie$j_}t&mI1qGV?>bi5&KirOGOM51h#oWt3Bt?#QEyw z-}5?YDOsZ{bIP(62Q^w8PB-CmHuhw#vMxm+@@qdTxeIn`JYY}6>!i!=AecS1gJ^%b zsU?L~6F#Z#w!eK<^s77Wde2Z~mcX&uIYe=FN%Qom`j@I4# zb+PQ)g{qX%bB_WQ&tR_X$%)x2pQ-^Gm{+(-A3D-iCqLd6GQ?~nRz2f3bX&KQ>wUTX z6+x%GqmSnqUVA&Q&m3o9OBMqf&5Ln~TIhQ+i!aQYD$_?Rgq9P#Z|@Qor}|zDS#A1( zdZ4xZgQ=#|?bZdiQNf-40_irVSMu0Y=O|sczSjt>=K2;$r<@;T=XO=+vw+;Q!0UYn zTwbi9->%cSe_&EY1OVyD>Gi#!d-QlZEY#DY%L~_x!In^pn&l(q%R%kgqcSJX*e@uR ze|-mOL&HB-ehp+NjnLVe@tyiF@2CIsnEL-UlEef5 E1+kvgZ2$lO literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/022-ICON_Continue_1.jpg b/buildroot/share/dwin/icons-6/022-ICON_Continue_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c8c78f38fa3e075cf2b9d40e24fe310bfbda200 GIT binary patch literal 3656 zcmbVOc{tSDAO4P+L6j^-8^%m2$t>24ElXq#4YE~ZW-u{}nUO8Bb`zyWlTx&ZY)Qu2 zYAZrqOR|+HQ%c03M9puwE%!dp?f&t5|2WS%=lj0z=X1{aobPi4J%S-%&CXD=F929u zZw17GUl5D|G8VyvfG_|AK!npC03a9wqx@McIu?bZGLd*9&4+{}&?u--JROBWqEUdM zNhlpp2q3XwJ|sUf)d)Uu=K&l>CK|!rbnMagbaRqFc~>}tv?tsFM+grf=o8^4#xTQB zY$%0JA+hkVP)Z<`i48S^FPUS7{l#e%9JWMZ1sK6i7o)=V+B?F`X$%rf2dS$;z-Vj2 z^z@M!U9`TY_BNO%8l#6o>!C1O8fXj_t&7#thkXZJ7>z;n#X4J9evc&_8Nt6VDkLNX z8KQ-xG5k;%eSLitS`($IsUc)&FvF-Ue5eMMiTL4QL1GdZWIBsXqrw&)@jkR*mJwW- z>0e8r(0|(g>t6khXm9`DR0?Hr1D0%=EN9ZMeE-#$i3_8XP|hSKEto+d3F(MMF&%5p zAmLdw298Dx{IQFU{xlYi=})7>%*_{fZ98m>8<|R^g)r5YH1_sbYbuk4rxHlk7DjNP z3zAGGVlil4OFau6JxwjNJ_fVX)YMeR!d!djPE&K8otm1KIzO})G(s?iL}mTZ5`Ss8 z|5m$L4ivgDvIU7jK13o~GH4Xo(z3DS-{+$9TfgsG;_q|O{jC-yOa`@hxPLqBA5+2# zTI~KTUE$zo@sp^+if0H*TQCktEfp+4tQKA&kf0xk2S7g|BJ7EX2wP$E7r-K5A%qQN z5n$*N#1o8wv(P#h?)A-@g2${C7uC4akTCM8FXYk^w|yKwue=pdLsU-g6KH z4Eps40K`BLaS737l28x`00aN{Bq}Bjf0tj=3LYIUf5ikURii*jItH{bN z!F_Z^q4&n(k?zfk<3sHns=4k92JdqNcllKhj0-6N7)!4sJmJ4R_W{VM_PQ)kc&W4{gm4xSyJ- z)lqO#dKf(%G8z%MBIu>Xy7!ltBc5S#oNRToSoUQJ+)7y7usA$#b`D13KNh8U z{D47zU6{_{mK2A!yfb+1=xzqHFvay)C2P-MmDKp150T}wNu{kgMVDMV;)@S<$_PEX zn8vqk+n5bdJ(&vUet$&t1O3T`yAFC4xciYI)1-4Y9PyZkf2P!2t!dqQefD03tUu#H zzP(It?nzl%076o~GS+%nrPbg_a6!-Y{?2lx?npHb{i)xc4+|5n2j*NFqI@RujqS!w zQwek$_eFZ%C3^krhRB)tTbs(VbJ|X)SjC^tOm7g`rHV0Zs2hu!^jy(`_lLMk2>|7? z0I_kEv9tkXOb(wz3ayLiyop|Dau5IyFE@H^ajFj5>DKIXX5qqaj>c4l>vf-#&ZjpP z&RLN-JI-P2MtZ(JWcjvNm6x~kZhh)!hI;Gl>rKg`raq-VT_68gUOk{`W=;A2(`y;d z9ulubdAfZUJgj2VMlY>=@?@^WBX3ImK^FQEuBTc_Dn3d|UWx9m{#<^*x~SPWPpvrb z`cXKFiI5B{J!Se5(ImZ@SQe;(x>t_8%jM4Yw5-+eLifC?(eOatSe9Ip(yn-rfi5~f-aQ`0FbOKPc^Mh0y5ZY~r;{IgxbMfwcbn*nLD~y3?#<6v ztMf*4hN`&dcH5zpHRTN_wliT98E+p}%V1jWe^rU1hE4lE@p?O`d>YSd{1W6cJF>^v z^@#Jc!FStdRS}H|eiYm&trM4!w#-hkI))DoXU}^IfNsBvkcIVm4|)#WF7o`=_Qdm| znCX-|xCdG9A9XW8eY|&!`e(^O3fa#rHK_3>yZ>Z!^PYo_Cls@I4BQ`PyQl_RJWnb^ zvaM?G`|4LH87lOf-lgyJi_9Ci=Q`F_^}>XETP@!$kCiZpd6?#3dR1gwi#M-#&@QQr zr;(TPn3jS$yXso8EZfYsRYmIdu$)O>zCKs0&$nCvxa24SYc9dUB#T`3O?Ew|W)vXr zwA0`1ismCGoRll=n>3oaZC~?a)2Q`9pF2O#?fUv?LOpI~`V#GPkgHoId+=u2)k(F> zGxe{gRB$hzk@u_HWA(7i#?gd0oocDRJ1~!q&1*@fX^CZ?XHec6 zZpA5hdbuZy95!sV3MTJ126-uSY_#`fN9|6xDfCatd2f|ue^Rjq&C9|z+cmdpR+ZAY zU6em+YP&P*rJAu3?u9;-W3ExHqX`0_;Kth3WeL9Wl^S`Y&gbyOM>lJBfIOa)!0o5n zpa(V?Za%X`(dwSTL1vS$pZne!^K^`8pI19G`tIpDFI2I+v};iBiGyS8fT_TS&mSv? zRC%cp*0&+wR4?4ntxgzFtr7rT-UX%+M`pN%&*|?qI^knQ=WBwJ*L^rY!dA%=Jsy-K zDX;B~fOo3xx&CGFAm?1G>gH3qDK1g_+Y;>(E05`VgfDCloA%Upu~{L?_uI`MdKwVc z>(DT}xpIERlZFAsPG)~qfbnH6mmay?y)gOSXo6L_XO`$yGx9#RVI%%pSeIclAH`AX z%BT0=RKJ4FYkPaY!lObdzvF^YvH&pgwJ2~Y@1-XtH&ryqwipyNQ?fbQv8&{Bj4Wfm z?bnRGZi1_HE6*DJ6|x0kf1spGd1ec9N%;&kUW;^vfjK=Umk&ds!(bUTP`- z84Q*(lQ3!FHy1r^P2&R#` zmL!m2_e#MwDEeI|Rjwzle!U8$J0dvk4PjOLQM&X>g=xew{sxJ(BBQu>hZ@-~KQ zdGx9N-WqEIIcS}9^w_)@v3yn`f87h)5DGKe=nU~zif&cy@`l%?ZyIx4%}U(qtVl1nG1MoN~C)()?E8#n)EM@4SpYmSEkju!{@8q<98N;*aWoZTCdYp|)=kFw!{ zN?VDfoVu%GaAZpp!k{SY{#JB^p065xM#YPReMd2JE}o87W{hk{CYF};{o-54w3}D{{!hH?uIPJc4`_0IaO` z0erxBuonTSStv0m5&!{QoM8_DU{67i0W20BgG5r9Y6L%;FG-C^qaY&)bRL`r5Hbz4a{uKyLG=|?%jFXwg*H|12i}<>z@bGZ8 za1AvY!yk##)6+w$qmgK|DuB5!V$W%XCI8%8`V{41CqB2)l!+;NTWdxmhEhmW*0$E~yB7UJ z?PfVp=$y!ABnCN*uo4%gi^*zjxS80F)2#0~{bAC;*0nAW#sy6-eUTa}YNO z^!)_@_&{8|{5y8?a0VfNn*cyOynNik0BAE=ZZHqziwFdUZ~@#rP+mUyT_|G$jNeJr z@g$-`WQU2S7?eW>@o;hRfFWN(fB+~MA`j!@=HcaVPdbL|;(LAL4gxKjtl-2DiDi!h z0vsk73V{NK!1U=xlB+es5tfiHA4R&wEQRkzktjZ7qx+q?#fwk7*uF#f$pn3Q8ck$H`s?6EMSB$ex`72_E~Kc)gT zeZ2iiV!g(a+IU$L_s^7Of|IzI!ifw0(#oMtCb3B=NsWc(lyuC!m`_XyRJ!u7m&Nxk?+ZngGba&j?F^iU&uFA;O1})!cF7yP7ZjyKK zt!kBzIOoT+ff}UFoJP`eOZ(nTncw@KrLT~&O}-(z&jF zp(mRv|4pImGh~NI4N`RlR)rU zq_WLgUuSgh)N<)W>}`85)#8z(!#>6V7s|(UyiPjqQhEp0+(A{KDi-`^apo}n?FPm> z{1(3VuI?l`Bi|}pkm3Isp(5)|x<9Nvdx2MFBgf%=qUprm#3M`ohlH&RT0*_Uk34u< zA1i!&(N}wF%`IZNc0t{@5LM@{rYoDAVv!UIRtLktI z$#ONyJe#IZh>ELGEf{#305R7a!y3BQuXhDr?t3I4YVxMI9@2G?4Yd9mU!rFG&ag%^ zWW;}Qo~LzcbXA7L8x+-=WIVGw_nbl3NY*dSYc`DawKf^E)~AXk1)>rxQ|*#U6XHSm zap<^n^3%EDV%Hb*9WNsrt)V{&b>W<<>&0a=@+&{q6@(WSy$HNi3`+dirEQpf%JM@| z8$P`tfAdm%%D*qFYp!0ab0QTfE)+=qaz6N3Ylpc0!3y46OwF z6@wAE^lMZ*DOTko-v7}+@}kYfd#y@6}r5`>sZNz{P+iNQItr!esGHls@x;u49}~uG;m|Iea#25htNIe-Onu) z67q$QtypgG9g4qepfXRcHRN}_Ea!FvcfE|}Dpn`IbtO8Y&FjRy(BylO_c<-CXcwirbLC)r4}_Afu;2uo3#qRzBN9ipkre)%T_%UpwhZU0aq%4d7FG`ZC2O!#4M359@pq&ZEI5z^|hjT z6*rxK=}z~|jgjxa#>~lltT1kuU^(w~NINuahPW1{-NQU*)bH(n>YSQsPm3) zR(Pd8dH1N4So;bfQ>z21Z13KLYlje#wb`BXe!5=Uwv(Iq~&B(tRa>b>sL+9px z-Z=AQ*%Ly8UYe(`6sEpRyG^fodcLsTVnl8xWA4s`YkKllCENgFg&dBVo2c|v$fQl+ z^m>wplwNn-wmFx-aGzhfEkEgxs&`n?)?dYB;Q^N1``Eyq6p*yw;EJn%exUaW(cAsV zeGF~GMB5sBUm^A2K)c&x;}7)3i_cY`AfVbB_-1j$WT&Y4PC=37KNlL7FN`ClI`c#8 z?7i!VXdh-zv5#)~!u_*M)4BbHFYBaji(+cf*8_$Otm3k-t>@1AkS>~EonqmNy19E4 zgMO3Yo@}XFludcosU}L}?Xpd+c-Bra z{z&~&l~GA-YgIy@XF_a^NSe5ea)78xUf{74fSc5^S`{W+dB-vdS*kHJGBJx;GK3Z(i72~@tf`3X zloUdV*Y=jRMI_rtMM~uxm3qJHdVBx*?my1;oO7Q0ex7sAbIx^^o-VxrWOnjtUI1Wi ztpSJvzpyk3!0PXGV{AcA3609bkfMtO6&EF22O;2=p9rY99iX3|l75(|Y!YNG%n zQ$CAC_Mvj&p43A$hB4wlHFptk8pRmltV_@)uq>$FG^;>1bx)wJBRSBAjHMt)~{;@E<@3qOmDnI3nKiM=U|l81Z9K{{H?* ze;p)~eF%ldVzDS~3<`tM5_o8F0vKEpUyH#}T2a7LIb=4C#icPB@MT4kCzHoDMhG(f zz63h!r|duO)!!TmgnxIX)0a2kn=FS*r2fkHAB8!N0W2ztNaZkjY%*2guCz>M;Vjrx z5|_z#WHNnMcG2FO$z^i9nJl=4#qzEhz}1{-3<}eqqyCLUAmFSS94?7Lrds2T5dsw? zjYh$t(HJxaZ-K?=Xk*dnoo42G+Lm~IeSNI1r8Y(fgJ0p|nPeWF%HXbWDZjX8zvV8M z1Dz#^jHj|`N2nA_Hj@tjwrm{j_qpi*R__Ow^7~v2e#=D(l0hvW?%xi3Wk^s#%jVD0 z6?A?UKb0YI7E^wA2rr0zf|@B(Q{p1g)U?4zLhd06_y;1{nGc zBFhl{iDkOL8wv(PMW7Jq-)4Tg{JXJK2f#!D3SbWg!2lr`2n+))H2~)Y_Z$QTfquOJ zfCva8EGj0xY9--cQzF8mASh%l09wu#0ulMa0tta308|(zBC5E~j3l)l?YTkB;RM3` zmXf#(OyCR>hJZyN;O{yh044-hl!8EoMbKt`CrIl=XB@5+Bi3)g5ZOv`Co`A&fYo4- zAVDw;Fa_SB4wMBcXR5%|BJsNs4pOJ%@hhF86kb_>^SWt==ND!qjrtF?oZE z3*lGA2Q&m(p!EJTqk7s*{A*Oh3MVr@Ud6`sBr$e(yzOyN_jv-0OFrwaTr{%a`~}n! z6z3Lv3!Qaz(IcAuHGZyh2(VAXk<{E>d_+E-@3kouTEG5Od{}>}?USzS;fn)x1DS2$ zl5;`l-~qaMQ87X1YKE?$U3~ptvJC<%E2=5biCbTaqBDu|E&QfXsVRibV#=%>nPM0{ z8+vy9A>6Hn9-wRxTbx`X9_TN%Se*TspT42C(=q6)?uYA)#9c{SP*C$3`MR|tHJcP( z94s12)eQ+UnjDs66U*OVuI>sIg5&V9aVDcdme17Jkb}~PamD!ky?O5mQBVHVMFCvSvs5Dek)xTTq(t#Sk>H2)Fqu0IU^JNdik4y59>bB(|=X{#D z=mM_a=S^pQ@brFW$05bRh}x~m@Gv$MU2(*7Xe@3c(`LR+Pqg{1 zVit1sDpPD{c7eL<`t=C_F@pzD$T+EisD9z}{fr5>>3vV#I%@lQ6-nX7Z92F;CGXT; zU-KyKOVLrF9#am>sT}|4j^h=y4bYlLQyOtPl9D~hxU!nW&E53@y1{>(vwhOgspWV= zhQHg%)FmQzEcaPe?w3LTb!^5W)+e#D#^IJ``N(|h{TkoFn=fU(wpGG1v>NC%T4`LS z^Mvs++qCGZo;?LIi?Y;w;vw+GlqKMmi;>4}VIT7@U5Ua$7q z$5a(-CFc}cw2Ev;D&`Z^^6aHA{FQL{acv?uTsp09qQ$u%6*67JtJ1r4vD(JHAa7{Y zon7x0d(+J+?PGX;IZn|e3G>5DfmDsa~vD4eQ+gkug8fI)nl`Yq*-e7 z{;TstF@~C-bKpaYYkB_`z#B4mH5~F-r)HGkJ}|BQ^m;`*Gf`x6TZy5 zx>ObO(8OwDPh7{_a@`4+;HIv)hb3p?56W)2W~}0K1Zk*I`*{3Q%IKx6$ZPwr3hT_q z`-a?Fqts)*H{9|4@(qpRnG8KKNNlr1PsdBuBr3&PR`?7njq63aN}6;@gt+z$cNIsx z9$DAW8M~Q@|9rxIWISpWuKKV(-?CKf%@Ojbc~7BjeToP-0Ml3pL$`)%#NKtPp7*Mr z9DBA!sQz)>NRC|vY7K7RR}G!vQLA~Crn)fuzQFF+xien!P&J9?=!KKD4|EOpW@n;e zj>%kUO|Lfc@*EIL9Wp!9yerS+sP?79+zVZGyQueru0@t7(|X!xiX*mQwiY2nfPCbn zQ=T1Rc=dwpp3TjqSw;HR0o4)dk(SqAuANL`H25uay`PDjle=9YnNFKu0<<(j$CaDj z&7OX#j#sG24#BG*%NfvoL(4Z6b4uBatP8s5>TJ*J$X|Z;q|L%#S9s*Nu?E{qw5vGU z0dJC2he9)R%y?yu$#q-v@|&j%)SqNHMcglwMG@P#K2|3qwmeG6dbW-d!Ls4sXuH+5 z{oUEZLWv^*aYc*ST9K1GCM!adEk+6)sr0_tugK+jpT{Gs! z+n}aT)6IihPgxI3@zJJ^cB=?C%!h7l`(pp)3Hpy+au4=aEMlwL$TL~@{aGl3HYdgh zo+V8)Wlu;{e1GPL0rfd-Z%n5#e(Y3CLSyXxfsOQ%{{Ga-05a3f)9cxI=yX-0Csq}y zz2;)y+$;O+`%ISa(;=s{vMWT_JqSmoz=sSNcq;G?At|f!oW1N7i=3_DwX*$0gZ}bD z1HUN$^6TUZ1z~1-nW{(TBkwd3=>*U@KFPhOkF=AJ5eCgaK5T7T(VcNKCbO#qm#5L9 zv(FR#(kugSCDExl@5h$+M`j*v%6@0`P9tUuWM_%+jzoThPjFrF&!{p}Aja;6g8XF3FX$d@;_Pf(j+9F&oP9icGM94O_$;=pIEuv&g7-d&TG`7)Vrx4li z7Hif}DnwDT6y8zy-ShnM-0%70_qmpH&ULQuIo~ta?7iNb1q6&keZ2s{)Knf|0sbR< zp8#&7AP-y^zyL7PmmL9MZx*cVLnafol$G&;N^YJ6cdU{J!CyJlji?M)Qc(tu>xL5D zJaAYt)E(>Xi`RyIZfb!+eLb~d_DBmA3!)*`$MR2%loxfXrAzpM;{{!$_1v|;-Dr$WzIprM8Y5*CV7QdjhVt0ABo zC?&YM3JRfi6pB!RYbdK|D8p41Rp44G>RPHO=-&dPpGNZZ(y}%>@%LHunKtb2ONE4l zD21ph5lG(3a1;uqtb$NRAQb5uih*HxvRkMkK2Y)>4@THP50WpD>`TBy_dU9~6N1Rv zFnXlFui#Jo7XQDhzyCe}zuX3rt+D@!_kTJL#Do#C%GTIGLJ-LVOIMfN zHzsNslCW-M0trJPoc{+!v=4zy2=pNkp@xS0sA)oF?S1i{gpfeFUp5vNTBi6wvK!t5 zYigtoqkB>E_4U+3B2-Z-hNu$=B+?iTH`b?v4mZ#@M5-97p3p?7>;GeGMDPgm$KuKV z*n0l4)mQmf+x>FzC(=(g!jgQ0v7RSL1b^tSYis%bdn`u(>hEt`&wq^tW&E$U%Jg8A z_mlfy$^K`FUP1fAKc!2b{3(7co?h`JdTH;i0Gz)H7VvDPQ;1=20*C<^{s@RZ0)gmX z`scTRL14PjKaBeVhWrxdePQ_{`{s0Q2p9}uhA=|@Yv+&3|3BDk1-MxNK41;Zzzu-7 z8Nl2OdmX?-004o&bl-nk0GN>h0)Uv9Sq?A&ATU7R`?E!#GB85+x3~a+kr4t0K^P#6 zZ2S8RATT304}=Mj;N|0o!w%^mwsJ!lNJ<5$s$rO;-3`^P?|66)Nh58sG8)|b#`Ie< zfti?pJEvQ7^Dsgr;Jo^7Fh2f(R|t2e=)wmEm+x3nB-^Y>1FDBsZ9Iyk)QqI}#sPLP zJu+@EH=qmboNU75l5ehUl%uMeoz~5YPiK2r50M|d)R%G*povi=vrHMI3XC3hzmfD< z@pF`MFOAQ0i!_7vD%NuS5LpMm`rCamQUDr zL`wH5v%3 zrOO+Yx`dOCKgw$FN#!KtSyP}3h&tD((+xlP04Y7}Q4k=Rs;9D8Chs*7Edl=|kuhJu&&rxt>?wQTkOpgGDSEL-x1*v(MQdZ7soE@;Qb+T#cLSrpj25zoo zAiNmRi#dq+u4<5|3B&~FNVVil__K_NYvSb+B+&D=AO2Yr!eX_%U~M{s|{;Z zXMR;}Cnw|x)CVqqIRLJAH~Jk=2I|+Uh~2 zrm|drgz8dS!Q9&>qhyC$_Q{-;>Zu8_h9yTd6Zl9zt!)f9W~86VOt)9L#`KE$LiUEEpF&4 zP4%(FgH9#G1!70k?wZd77Cb?-%fix znou(3#CDLUsa-?*O@Q_7n!@`{;<9to<{kA4??PwF9#g5R6`;FcSx~ zO7p^*X1~r_MRMXwGZ-E0@5+$QREWsV_K0F+rUG$PxAbcA0?Z7Zb$d?m(?;&)A-v)T zY0GTqSwHE%3zI?7Ubu!G?kmv_%S7QP#A|*L+B)lcS0#EOa;F%3RTkmmP9{{jF+Uy| z?HHxB9b#E2(yt=T1sihJWe-5pwy)a`=J2~0SrBZ_B%nX~-`3P)yaP>>=1H9a-JyU* zOf*x@FbO<+c&ql#-6Lzz#1}SB^77LD!xT>^v(JY#wC9Ph@@nrq+|R&-`Lp`+g=Qj~ zHnn{EK@jjYk)DA=+U{KOz^q#E2&aNIFXvMs+H?`ksG@MVOs z`$qnZLedcXdRv|;Ik zbs+aM@OI)?22d4Q-+rKO#9gb%61WUn_?DR0s)bI6b8WZyxZf^t>oPrH;Oa1AVD+Xv zt3<8VJay>fH=ZkgSn2lthE_()E0rSM(g$0G&1 zUg$bxQG6i9jZOpHz?HDBOi*8f^DJBB%oCg~)6kVSwkIkQjYaJJB+#U6VYtbf(p^@f z9H57l1@ssVWtl{6jLip$QuH(+CaOY&;^qiPZ)C43G~+djmr0WbUi{vh-cpo`= zAi!Af?{?<+dHvf^ed8m?=HB+{1BT5?X~?oE{-%r~o1#~`mX^gzTLbY!^3P2fDRA?G zC<;9Zj9PjT%n%2oHfrikI*6db3snXj^Ud$r=xMyVd?9CvJlo#**SxK;-`J@OB(wEy zesmT&C-o{CfM5|IzyQs~vfs=wAOAEnCC++$<$UiM`j3jjnDd(ExBPYcfx zp#ynSOE<@BhE}-bcu;!0M$z0+UV!8faro>)HjZyUi$y~kLS;by#-*z`fzjj#-6E;q5x5U0^e?(mWi#6pd{~lnC%D=YJ zaxK#1{nDFE8lBAYeB?wnUH!2IKJ`|Zl-yZ)lAwOy3Qx8zlc=t%NBsnk`GB-ZHsvC7 zN_h4&J7*_-&r|jtbMi`=pI9FGDZ;}l`%uWU)g%-+6XtuXNe#h`YSm+&0ZC9Elw7Ug z@ayk797dJ2LL}W-s)qAOk`eW=r#m;aL3f2 z3dtvx$|XEpRe*DJjO^SGr&!!O_k{OYxc(K%nmae!X!R_5X5L^>Y9yBmS;Tq|aCm+3 zuB36#Kz}4M+HrZTMzycxZj_=)wOapJ>O0QGxTqSuAXzqE)`z^z-K&WWj3xS`vMjPM zn+h*=KU`*enRRHUTqlC0$?uzFR&2c!=+lR20lp>}Zk3o1H*7 zzbLL@KYP^RdEW5K;#Q_S)NiO6HL@ygR9-MkfRLjy??M`{f!kz)h79o_;q*xk7zmkXB6u}9>mQh zQSc$@!<|ryHzH+xk|G<<(xKIU7!!U?rcbfJpDG`0vF;VdI)P6fDA_U?=7ak$!ek=I zjVcLAULD+`aPIytA~8eMNG3Ma-{T<+^WFnllJ77W5Ozq0GuzL8dBDwC&+~n4p!_nL z3uLqKS1$kqp#WGOpatYbhVowFATXtAjZ=RXe_?atk10n&U2r0tIL_VBp=U(pz!d(~6%H(D{WH~=CSQL|zgtcD1-tS30>gdo@VKry*r1>`A1-mlY zES4iGL6V*`=&kmlqN~<2LBfebv}9hzbS>5K16C5t6Jcx@TjlKW_f6Md3Pw-dhsIa? z=rU+_EHb+kpjccT6}`P)8!VdtD#dd6P4E}YXx)QW$Sh~EPM=X5&#kR)X@~Bpbp?_U z_@xEc61%hY^=CJ*8L#X*dvDzcbNIwIem$q=*uy_i9a;nU$*`rJwHt*%+$FEofXg~I%7;y)q@V8kKZZ#c82quFdn*cjP z#F^I{?Dz<7pL1DN#wsmRqAdC#euDba9F!jXN!}9g+Rr(DTc6wSWhB!-aJl&(dh|%l zNDY&1ZNrOwYv(Q`FtYQo_)N(l&86p74Z8u!O$wV4+*n7%T9BtBANC9!%M+f_(zy4yxS^&zSe_ABD9t{~F#r#nm(# zgsW{1k*fpS(jeXG$XF8W2sZZpKG zFHd7E8oJ&io|qv#(5w4Up`aQ@2dC8*TDZ1dETi4V>OlL}4>g66{}U z!*;|3CDxhk$YO+bOQ4R#$Mbhi(ue(Uv#vc`BW`9K=Y3DGP`vTHOx!Po&OatATIah6OGq)*ob#*pPxiR| zc5@)KO7#Bta**!P5a;c$rz*wIxXOlo%#%vqx}vPjis^DW<8}bblv#6IX%9G+znW|% zhOOQbd@{gFb}L3fmWSU2<4`N&rLP0X2ui=Z&p?Ubx(iKl$c>nz-SVwp0I zTM#-o`*kRW{C+t{?0&n#c1#u>AodZ<+VjI^6>Qk`=6)% zf6Nc>yweW<-gW4MZc$9?lu8nrGw_;=&vF_=?`Vxk&86<+Roxp3q=5jQ#hskMJs|F$ zQeNb16Nu@Hg)a*`ZT2o#`bD-^x1j=M7wn60Uqv>AJ9(dJ?&{*|hD06ew0|TNkET@U zgc={z=8d7eQJDz)Xf30)_9-S+NO75veD>_~OV2hA)-P9yR(AjO=E+E(i)r<{s9bTg=Lx&95c{CT__Y+PmEwYslbvu^u*xV z;+1{3gs=4+zt;xvm8kR45rVKN1zii;mbQE@z(x>W-tr0HTbfa#gR+2v? zPcHNdHHj)s^|zSsQsQVzE%{G@bzC)Jty|?-TJHwus*z8*L1pH8R z<~0>;OQw73v* zBCI4+=l*j6Qh018dum*kXJA3#@$l8;F{qY8?)VD!MOqlMbPcX+wb`ZJt#DI4XKbO9 zP`;9KS0#rt(lEoa-v9BpePVJw<gZVwphqCfSI^zHcXD$j2u Wzu5zx?*TTu_cFIHz4)H8H}-#Hi`xwV literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/026-ICON_More.jpg b/buildroot/share/dwin/icons-6/026-ICON_More.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ee088a7f221e94c265d3d1524b7c1ab6f8e5df6 GIT binary patch literal 1612 zcmaJ=drVVT7(chSFE(@(S{_?6FBcOY(%#-aX+vpR3Zc_3%0po>nSESrE$zMBUZmi3 z%*`+t-@Lzl z$eg4P3)(3Rm&q}ZZwyj)rQaoLY-5Jp7L)F*U z%j%Ufl3t79I-L%aD=>vZ$}*&Z20vpDO8tS1n1h7~IB5^Xct}4IakM+gI>vyqojy2% zkD9T4=v~br+H8-e`h1ZKh}s62Qew8>hZ+aU8z=%RB?4p}?Ic)wMnp{M3u(g6kaRgo z*2HdcxtnCjfSaU{!otX{WGYgsv=*(xY{o4yt%Y>f`3OG~)4FE0nt8R6aqv-WWeY)j))TH` zn)D&jW9vQh_oAHFZ(8e`zZccKT8wQ5i~QUw5XS z!Ov}-3EST-FA@|dC-(NA-c{iMIsEfxi)t$;weR4bi#yhoWezsg-c$4M_gGK$NtOuO zpm+YbnSZ*oeMomWaOVE@SrOPAek8U|ziG?0s$aWXjaOP`~^2fzA&)v<6M`!PQ%*mdJXH zEj>g{cYn$+X|nG2k8UMe`?9dj|8j4HPTsk`p?S++M@q&e)K9+R^?jP1*IvXo9$9?+ zjZ>|ap@N%dlfIFR?Brg4Z^KiW;!oN~L)a6yUpO&t{BzIOe@mNx`|4u;rY%>Pu>pTv r)oa@hRJ%T1Ak&ofGCPi~9I4y7x3<*!?PvT0#gl6$5~_~(gopnFUE%Vm literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/027-ICON_Axis.jpg b/buildroot/share/dwin/icons-6/027-ICON_Axis.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2eb19a0011eeae5d2ecd293d50724b966d81bcc7 GIT binary patch literal 1905 zcmaJ=Yfuwc6uz5eNmObLA~Z zRIySkB9#g=q9CJEM`%@0M|@PIXni5r5p=|niXc7)M4E1p*AMagap&A~&-a~k?mgGq zY;6ZK11!3D0D^)R0~Q#A^*LZGQZz{$00bD6I~o9MI~`3VNuwA=4Q8%dOT^(^4WUOZ zY9oqqc_{Gpw;0u$B%DOz@C2Pf!s$M9j)Um563%L&lBYDv@kHJ7bQ2z)zA{3So}>|J zIsSf#uSIOp8}&G;MlAaE2D8{A;S7n3Dcj~oIml25nIz#zZCQ~hWf&qSOgJLsdULb16xDG=3Mt`Gm40YJ zZyc5V=v|EqR4P9ms@K~tU`WcU{Od6aDceRm?Vz~)dlY}XP zAl8rEVpt+U66Qq0h{)x(Tk}B{uGSf}M4EZg5J#yL2N}$y+MvOM6cP@l!qw@t;sCxZ zP=xU?zR*j6VF6O9LLiVzy#i&_1IRpuf)TEQ(4^>b13ALgj&b=Da&60|)S-a|+Vj*Gf~>6|8$hF=Q5KCxt<>@XbQ+xkwJ>a;!$V-&z#4^(PDR6XI?RL_ z@VJxFkWU-d^MK6)j=+%)u>p+@(btEI_zf2wrPC1_X#q)u6 zaLvKPo+q7u$+_*`lD$o16k>LYBeM-*-y@rSmka$Q5>dy9A9qAU0O8hdADc-_hEXsvF{Z;cn$ zb*jak4$=V8r#kD4DapX}{% ztX`UOq2^fYF`W}9Dk5^vPSK?UQ*J-rG%0IS2Sc_i@d_F`=Z8*XfxPCHUOz9*=vHd) z?!XA{V8fk!rdLy{;9kt@Z;v;>c#~ArP+hsge&2)ARY?8cTB*x&hu;)a-v>{=@uIIY zqsw)${Zwl0jd+91>6>S5owfYCvrp}-49<%vd#G0(lHv=_P77oBDB@V9$Yut6L-e4Xigy4MOi zBhNNH+RrYjh)miN`hvT$+rag|^yJCs@cZp|E|-NrUNJzt8yMWzR4;sUl`MZ(*-M^Y z^RrMuUmWtQsIceHf;u1d!$W>eG121CRk=F-+5E=3Dc)Q29*2h9Ef1)hQj~GV7;P$O zsgTsX%>C3FG`d9ky)lc?+L7tQX2!M>cR{~(^Ai+uu)AC>#)ib3EjSOMRHEP%-)xs>M z4-A4rOj@Zt3Be#4lBh!YjJ~ty8IVfBXDsuV_(-%uM5$VkszahvKaG*6Cds)9Mo2Ie zWa63BS~Y@6A(MI?s^^*bj6rc8Zd=_j0~!p$lK6};YgTBvWC;FZ2>L9HE; z{oq->7buZ@JXEc=9>Aci9*aUo>;0gxJ|;zrz)^@^W6;SFJlxAl*7AfpM2cy2F&fRf z;Zt0q)Lk&n` zPNRkf+vcgpu7x|M-Vj$Yb}eCJa$&p}*m}9|UG}gGpCGF_GP?L?WcU#jpLiWU+Lm76 zI5@CCQH4Jtg5?g_3g^ zudjfO%&V3_<;MLP6`vSmV5hb8+NVBplhhm(i2M(~D15l*kbSA`>Me?KcA-)sEiWNU zLW?MO2x_yRhVJ)RTC>OOm{ zvTmE&cJ`)y2R|#NELh*}8Ym-odS#`uyw`V^&q%ECy|6vAJ{xYRejsr@-$HS;06!(o z+`NrGp>;}R#?_E{H`7|nTms5gZrZ0hxpY-ji;{R85`AA)ar7iSjf>&xNfJm+ljhohilTh1Og z*0(?YBDm}??B@r?XHI}KivMo5-pPH^`{qGc{iOQ*Uv(|!%G%RtgvV{^azkXvv#XuP zZp{1&efv7L@YcZ$xAuARActpx8x2WuNSh1iP)$$%t*}JLqWRYX>|WlxT%hQQZH&I3 znJ4}?+E<@;WT3J*=y^g-KsJ9(>wyjEGW~By0@u8C9&m3e`Yx-@R9MWqh_0HPscege zl2G%F3;WVt#p#HBe2-)3n+?0OzbuV=vv%O`Of+P1NTld()dLS?<+W!!)lM&7Tx+bK We7=0{KP!@-#>YSP=<3>TY55TmjGExuz?U+3<9C(SfPgG0VyUgBo7FT3sR|U zqFAh>pp?24p)jqY6qkY)iX9i~h@wS0Wl*c2QnaAsLi&PiKg93HopaCozVDoS-?^q+ zrhecYW>lvD5E0=EXkZ4WM}RKLRHo+u5}*+2wE&px3+p*1%M#uw;~}#563U zLdQawY!(PwZqzB1=_n2-qp51Gh%tPol>w_&BF5?f8C#|cMbp&bxq4Kd8y&CAO;-w3 zjOD>_kWpyV=rkybWgKbCk)l23LMkN zW7vkNTZ~D=aLkZ~>EO^%^R4k=@6~Fp3d=V5OlV{>VT9IzE3`^9LLy=iE=;vrB@9C( zd>%*2<^%+C5hP43mU4Lf04_(&6>zu+H*iWT!IYUAREtk(RWn*-POW(yG&-WP1l6mv zP?c1VY2b-t3)OS>5*9Y6-=tPGXD?yWIkhaJ8J79y&idI?DPn@m;q>Sdo9W?4wZz2h ziP1Ja0ShJu7O2{YCqy#!f^C2_4Kfjt$;3)5Zvl}Z0>nZw1ENmA(hS-(%yNQFg&?XW zl|r5MWt#H-z|;olG++U~6Y@K?5EPXGbd}M9gub6GX@YqRkNLWXQvo0uZqs)q-Ph8LP;s z3E?_8ZgpbB$xVL(8=@MS4$;AKuyfphq_JW|{(NZnKYXjEWp>i4x-z?bwY*DK9}twW zxFN98S4>LMWY9o18RQk(M9SBVHFnGNZktB$$^GTtr7N|Op>+3;oJJScMn7Z*L`Zv( z#27t%5kN)h30AABafwUloAYDGevfUq)$nTNy??JgiAwQUl{WU-k9S;?<$X^dH$|WA zh)lr4%M*@W-o5^4!uo4IuR&x?QU2ig);=0@TFaUcjo62cqEmGL0!qVy!e{k#=K7GKU()(pYidHIJ zhomS+ex-Fbhn_vNZ=Z_m;!~~YA%MK6s37ezz zW#!?uwZ}p#LtI_jZ&DbHMd6D*KWzKC!E5t_*mI}GmiP3Ppxx-ksDZx(POr`lS=7%r z0ZYy215OWLk0!k->+E{=`b3;dl$YHV(fGsM#wShN2YJ8zG*Z?3to%waCu(o@@y$Cw zhT?|`E`(gG&bk`ibL4XOAYzdez3L#}1lEZLUOc$)H7`K0LeN&)MfR>P*f*$u+Q~lb zeW0VL%DN-fTeQE~-+fp(w4(jN7UvxUQQNIwFnR9t+CA&u)O;o4jaEK(iQnRL{!;U@ rmV&|OsoRn9>JnG{`QKdkyGyDAX)+DOFjB0ZK*E)mky*PxE;Oq=v%{ug(^QwC4?EF zA<$ft$fVI}5Q7pjX|lDL$RuVAi;HmE=4LaX;SfWXm?5!cg%-_(t6>x;Sz&Q|)!wq6{g4o;uCWkBH2t)xwXao#An;uRR#mOQ@a^X8MW27mg(a16e zuuy$En=2Fw*&H65$7A9VOe{}pP@0%p%zIQphF~haT4zwBTF9oTOht1HVg_F6+ZHss zG1+(C)r3H~{QaRCjqL)4Widk>GG6aHg)v2*4q?Y37@DJ3A$YjAjjR(%^@!4d>J=!O zJ$j2V8K?opGEf~PmD+AC82Ttdt%Xq|HhY*Omy05`m_eykA(1jM16N_G)v$=qiIDPx z!+1PCU&7^vOCMsTFuQLYSCKr8PI&B57d}BYb8K|+&DiiGT72U5_-I?7 z0mtEi1#lz&g$UMrpa>AgK*TK~5nu7;El5NX4tycoK%xx8-UjLzY;-)DLLyP@DP+oo zld+KZ8`efZqXIghlL$0Gq!CCog0&fJ2Y^T#|NgjT?_furGF`y<>;wRrOd%2- zC?h9C62*?-Otz=F&|RruI>XybqVg&74M%p&n3aCWfd&Xfyc-gA>PS3+Msy~*kbxJM zL8sW+OO{WMRThM$dP}#*tx*;Fzz2MhgMQY#U>b>lS4g6PP;kZQTI!l7?o_m&Nm_jP zQCL%7ce5q;ZbcrmE_#0qXJCqxgdTUvqqtS}YZKMoZJzT(%NCDgif`4Qms&7g&o&Rz zwU|MElKDhdtJ!hRP^{?s>%}!OSVizv_?N`hgFR_ySRrGJa<%`>qO06wVT?0*8j95d*@SSY%>RVw-OH%*GMks zpAj{ka=Y7uR6BuTFikmp~ro(8?$^@$^*p@6>eFX=|>w^FLISUg5`up zFSiPE3iR?}%SNSN_O<%E_peK)&h$&t1#jN}outuePxpdNm%*S#9aOyZYRxVT^*wlD zz+I$-HTE#FTM1n%-{#c4T=VMG#fOhhc7I&ibuv>JSb%o8e)URldsl*+FLREf;kVq5 zWo7e-VI@&+3rz9RMRGxKSh-L0k42>|>o)GqU#{!jY;>$W=U=_(>-ZJUcK=j$-S)$7 z2^XTyXR4_MYoeM#ZlR~Sgj4eOz&hO@GtVzG=X4y;eDZX~KCJc0%lst)wF76*R;KN3 z`Z8q8hPk|+ypG>F9oJF5=72^cJm_^*B-`ADPZ-LSU H);s?LiaLdi literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/031-ICON_PLAPreheat.jpg b/buildroot/share/dwin/icons-6/031-ICON_PLAPreheat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b8eb5857d6ca93ed643c2d66942c6b731ada656 GIT binary patch literal 1745 zcmaJ=eM}Q)9DdttX+?Av5u5{eT+x8oUazGsSFNtC2xN3d(ZRy ze((GKUjNVj0Wd$q=XL>Lu`B^%FbV%3Kw_?Rlve{D5OB-u0Pqh$Xc^1WIu!LVa+{N~ z6LJSdqCOjqVsZrvmZ$k>o1>gyVLMUk_UMr(-=0HYw^NT4s;vquolcawSJrrmH8nW} zj+$}@?nKg7z{`C)A4!u0YlD5{W)GwD>5-thj*A1!C;|s5Y`GpW2C~9M);u_!@)EFG zu8}#g6eX<1<(Ni+D^r%jN(H7x64bxsU>sgI&AKTM9B{PRsY+IlaFxE= z0!fE#Uwc+lh*s;HsU#UVfS@hIt|lhyeXTK5P)!r)YJ#CEy$*t-O9NtBm+mEOEafer zsLd0nm{&%z6jMggaC&;+)KcNZLbu0BRWV6Hjn%5Nco^2^aS#@>9^qW%ZnsmHp)i|O z%2bU~tx;iEhS6v=nayh4sK~^W=9G-o39XrORFZ^;ozOZbwc2U5fp#EiF0+~Ny0;L{ zOfN;k!ENi@)7O$Rt>3uTIejhaX|*U<3>vuHDVII5#C1?047Dyd2{k|A;X2;SwYL8; zm>q0b;5^SgA)fyZXaKwr_*}&2b0asr0>pYGak3n+Z_M+ zN6i~A3`pAYGp+Yq2NPC3-g_80c)1O?>M<(0f(`G~K3^8yV9W+{S{^@p`d{~#ku_1- zpW{d0%Zpm1N-8YwT5pKW27ku&&MP~4{e9`Om<5I<_SS};VPdPny8W$d`*WK1#tvuC zc)l-58s6w4o-03Ajtw1dv&>rMsZ0DMday8YYkm7Zdx;?jmvq+6&+X5B+I73QC+_8D zGNS9n*vr#@A6x8lt(9eEF7>6Q9)HoX|7Oc?-?&DPyFcv87$~A1o>_S3?!q|DLg}Mb z<@?MZoI>=M->JJ=_jPMn$!D>(56;Cpar{o=kCWwfeVNKYP+=lCl~E&Hx(I1 znwn2qcda~_gyp-Ait-y2N4;QH>-WQJ$SuRL^d6>fGTz_RfsZA}#Q;4NymeA04`r^!O zBZ=#Jk32eiX7^1-w~et}6`ntRFZRY&&setPRy`cZk>iQ-** zwtw-vA8a^t&ksyb#x4zBjXBjk(sEa;*l{;^F?k{ad%B@`aBP28^X2ZZHV&(AP*6lq UR)^}l>;IlL+Qmza@A_~54~lRyX#fBK literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/032-ICON_ABSPreheat.jpg b/buildroot/share/dwin/icons-6/032-ICON_ABSPreheat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..274604d2f92b46cc581a629b4d4cd8e9a6e2212e GIT binary patch literal 1743 zcmaJ=Yfuwc6u#NbhWHpY^6*h>mrX^mB)fSLvJxedM59JYKxh%`g$C^g##Qq=7m!xHvAY(x(_-C+^85W# zze37*3vii6qrnL|E|*IpH=AKf zdTueZkYO2LA>%tONwaBX42&Lu{O7ZGU>G#=OT5voTPzBNzutP zM!70QA(I(&I-^Qq)T!l4gW6zJr^+IF)h<>%&&qV^^fPp-~DWX#&0g?y=^Hpy2?Hj+bHl7=cBO#OiDdx5q`@ zvu2G5HG{z%4-&y5Fd1CSuiw20{de!-$N3dR4wKuwr#-WN%szzn&e(%pom-QWxMR0g zYT34`Xu$n01ge=?F-ZDp`BSm5ZP*~!l_$i>9Jcy^GV9sI8OIiun3wJui_AW_jb2jI zLTHyObJh;uIciMo^7xZ)VoIGAyOWHKSsEW>OFUOnQI}xPtP51uEFUZe7@U^!m#4RcRkfhKj5SV&3|7gQghLor3iT((z%zW%X$dw~t%s%Ic1!TFQ^8 zYp#!*b@o>Csx9M(KHl{GvekG0q~BOupduHo`01~8hK3(6cBPhuz?7TXBl!<4zOn?( z<>=8}_gznZf9=+#mX-@_2voJS*>6nUslRdggQ+X8cEI!BJD;0YSFip2vrVt3%~Quh z%7dopL&dsxHdY11!VP7Qj5YH{7X&L>6|L>?>gFf@&eKgf$;NjLr##Icj(=<0uCeCpmN}JMiW&^xY>0bcZ0yKu`f$heKdkBG<{b&^X1{+{MCm(%i9^P% z-tM1utKFwa-+PP(V(rbmaWhYBOcc~6CDme*!RU7Ww_WjV&%Ss#X$fAr>ywY_${R0Q zN2pSRaT}0$)0+LJfnS1Hs01RmJX?PW-(P*Epz-e^7pm0s(cAOw=Nf9;qZN52TUX6T z8kbt{1rAJ|duZadig{#yQ=4VqKUothPk+a#_9bq9>i0e(V-v`)ADD}fpR=noJ4-vi TIyEW;ib#A~vJNR1hkpAHdSxuI literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/033-ICON_Cool.jpg b/buildroot/share/dwin/icons-6/033-ICON_Cool.jpg new file mode 100644 index 0000000000000000000000000000000000000000..014e6f5dcbabcbee31662d8ed1f2f728c81f318a GIT binary patch literal 1843 zcmaJ=Yfuwc6u!ykh3^0gma6N5R;^@{Kmth#7?aRO3?&eh`p#pKfXT*9cslh}s*b3| zT3!`##4=PtVZb^vicsZYMJyGi8lfFjusRB31;N*(8w9j7;`iguxo5xcJLld#*KyO) z2|N`k##jK9$_0Q0-oo(+u;q#Rgj7HQG%~#c07oZ;#@TEZF^Zb49IXM@VH`bfLQ}LB zl*i$sASfioqSYs0Hdu$PH<~3#@7WpzHX0ZJ7L^vR(WfQoMFu1! z7!FDirPG8dDvGmRqf5XF`tL8Q*AaEvMfmf-{j3phewJrrUkLNLya1FNfb#r&xjZpfDE1S@4D(PA^=X4vVd)!~UY2|{-I<_IRs zsO@|2>K&p=^Xi=VG9B#v{akvGR$(*+q2+vz?G#l__>--^&N+njBtv0P$k16F6gmmE;jRvtiR3Y^j z@Iv_lp&yT@kOl_w{T1>6nKY0qk_C#mBU(AGPc&g>+lbaMs^xRX)H=t(WFafdF~XRH z8A1u%1P>isY#h56`IvsgTEm#V@DyWeQL-7-`E%d-*&``(f}G*#=#rb!;m6G6#1rIb zJ9@yRp@9X4TJi}|9JfI_pp1e_MpP=flFJ)FREPw*(42tiLtr|=8ii9%vgr^+XVPi( zcfO2LJ{&k|0hv!E_n+V^gTE z5Dm=cxw%UbIzz41O`XQvzc|ucruW%+gulJQ@4y^|hrm1FAJa)GFNIk|zF9oZC|k$-vJy@<5pj4O1(ik*dSDyUOd_bSRXQ>lXz7POpM zT9SM}d`VGO?N7@pR_?#W&)6TcheKbrLqO!K86NGY)#pl|dhKrRwx9PBZ<_UKRK!Pp zKR)=mEmys7x+*)f{f1_3o$E6@zm-*KjgNb5k8PgwXnRg;K@wiy?ADxHdnO)6 z&sldCh1`W+ce4^p!g!}n475~vYJ3)V)wtWY=DUA&siUN^zwC_XK~v_@0SispI3ak~ zK;&Z2E?7v?sG z>kuE0!Z3N&Ng7o>b=;b5E)^a3CNsMC%~&4sOKF-ix668zRU&BGWZwvjmLTm#iz@Uj z@|=f956rse642V6{pae{`oHpG^XfX*5##qXX=3hNT2NC~(NQ2?_+oAYvS`x$)*bL; z=A^TwtqC(I-zvSn4rG__Nh>RFU_9(qNI%Z2YKal9G3FPebuj~brMo-pqoaG!?I(LN z+xn_4jny5h_UCCaZqJC$U3k2Hu%Iorw=%Jk_?&!0)66n?K;P}fhfBSn zF5%(+BiC1*z7}xv;L^c;VRxQyYC9Jq`7A4>Z_1%tMfKi)Jh-x!Ke6{zkIkO(iodxc zD8Tv@JgQGFd^zrXr}g5KUcY~TKY)pbbJ73+ literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/034-ICON_Language.jpg b/buildroot/share/dwin/icons-6/034-ICON_Language.jpg new file mode 100644 index 0000000000000000000000000000000000000000..055b4c1ae8e6bd17d5cee0c393dcf8f297fc669c GIT binary patch literal 1960 zcmaJ=c~BEq7=Oto1U!%+mx7&jK|FwL4oFCbfH?>t#?lx;Y#j~B8dgX)WCIC~XthqQ zf~^N2h@w^<0d>??#CjBkqKK$?jDvN?)}!hO74V{3G2I}boe_V3ym{|?-|zPw?|aU6 z=N%9b@4y!Ukd!nHxP$j_b^^9CSD%#+Xn;YP=Ki${EUkV?mR@W? z;$q<#hs0sBm@u0Tc9^owq{Jab`o$&G-epD+xZlN=B}HVesPJ5M3alWk7#zhBM(BBw zd{`vr@Pu43KQbKVb9o|^D?)jK2rf^;6-oqRcmN0$&1zUA(I`~|v8a<287Rtbw{z?Q z4q-K-Jh51ea``BqA3=FUkojht&JkfIg9jCq7^%1778_2OVV9yVgUGc>5h~MnC73Kj zvLEf$2aam>r(I1ZR|EQGNt*_HpYKP7No~FbLp2yl2Qc4j@g@fY;iJYfYL<)E^ zew0Ya`@wR-eF!c(<;{d3CX2~nesDA7 z^68E9G+?^}AK(Mg*nrNaL2R1yH?SE1Iz)T_{{djR)7?BqP|*PNe>22%^P;L5!GPS{ z2Cv*`Y`QlzmcjI8`S|&}gW!OPGDHyKq2p)#Sd6JAk7ENs@gOE+hJs=jH0rlvmrK!0}oTXZvQE~I{nrR#!6w~ zBF?nnj%bhZg-!Rq<|E=x?Q_MtaGj>;tYUX+vSNJ|ykSIji`;ikqN>0?hujrilJ_LN zF(-)I9e>oP?Z}mF5B%rjqCFBJSu;7xW6e5wPV3Zjm&&mVkFudrlVYj^yG}apt@&=N zeV_j^>8ec66WL+-Maf#`=}`^E$yxq^$sw8L_C8qmrN+DOGO;NvIk^3A%Z(?MXGYq{1Cj(~La_1Yno|=x zPEM<2g%xDQ^z_{Byqa6fo&R>FWNdT&zMGquiP|?gZsZmGdf*k|vmvdwZMoOFg#1!v z#eT+dzZRqA30mjgmS9x*FCgwzq#GA@O{9CLUUS@dnr>@B5EAleUA=Jb)iXyDi*6n< zw-$!1J&(xu&zz8dW!~-%?=je(+p%`l{if3R9kF@{1iq~Ze{=M)RHV+*#5;DIgI@KR z^T+9Xa}qiQzS`!1TVnW^Qp3ikgd9DN&%$f8UiRj-vDyt)-AOqOH~mmrh$U(@gj ze#!KU+IrsP@9~q{w|0cxCSP{5cD!yV*)r`|(8MN{q2h37ZSua?i+3!pzT5Lvl)dI( z(VhC|Y4V5di%ST2{l zsg|}QcMli$?(EG|2aTRYQ%+5{Ruvt~Sem`Y2^^2pp7t5yx&%qxPEh_=LA____Rhe) e=MFq;YW$aBRHp(UmHGoJn1sy=Xp$^NdJZ4}GVcBi09!8!R$-V<0K-}XORhvy5S9Yfz(%2#YZ4^;!1t*XT zh45LNU^br{I1l2oIUz7R1m^IVY>t2(Ea35>G0^dBdS$90UJ^Z)3%?2JV@+jeXS1?- zEL5KcbNGBd%;v&eE)$Pn8gjIl+{n}#7~={O#Guftb(k8}LUu)Y3Yvup>3F5DTF~ew zWZyWe*8*j-w})yp_5qB_8nAd|vfeie8xnJL2po?X&@8B|JWRoGU>USsFx(jdPWg+@LAB_I1$c@XQiKuU>;F zqxGl;8f{ykp1Kz9lzL-a<Cq%H_1RDWi0z}**67ds1UV%g;;lK~F9VE&q9POY^z)r`bDI^lbkwT`t z_GKdE?S`!p(5S!#xR3}mK%@~!G=l9c*a85NM3{X40FbC;2d8O-|GS9}cw)kP0Fdz# zNMzC&g-9Y(XtSIh90@K|;N`m5%|k@zGQ8cL@Eio9y&I>oNCJ^Iiv+x!$s7^IK~5LD ziHkNvg)Wd_jq@Q7H&+bOr#`0?x~Oy)K0F-6E}KCU#^d9e!lRYqI#vrbz$YN zOAct&8CMI3e|%D&<}EGVRn1i7N(#^U|04aS$n^R2J>s&1M6QEMaXi1_(aSBa$7ore z?b9{{t&2ZIoNcA;qw9o>hK$=G&iZoAn)a?U&F9{K(UiC3D~1n}E7I?-G(R0W=~%mW zZsBCuFWz5GGjM#ara|LGUPLRTLPT9lObwF0$)i!GL&x^k%I@8-JmcL+nzrdczp z29o^6?%BR;AKmXcb?@;!^_Fxbciw^Ie7)PIg`J37NuKi$ad%oe!#AsjOf&i`u}kpJ z(Y0N!yRTAW=UO(j^A2r3Tt=lpXScQvUDsFzhyP06w6ZDSh^Lv@y*n6xSg*(YBd)xmvoq_L+BD;SGd5^UKZn0;L(!loC17e zL=NlCTfL$Vx0PXcE!I6JntK*qn_bN;+Cfz=`K}>0k-D#==$)K{Uf<6gO4j^2u*vU4 zO~S&?w&gJeo9}Z{EAo!T-fA)5FMZCifxt|(HDY%}+XG=?-Of|@MsmMwYVD|~{wH(z zr{80SSC5Pw`SPkMtuvW3bXRONoi6qX=<^JRgXfP(ul-i=VnMA&_3x^Z;fif1Uwkqr z|Kj!s3+itBKJNTtV^(+E-ukw|xe>MOC;f~YYYXN3KP~r9UH71McF#kIFED*3N0@g}> z;iyb2R$IrZmWs6M6xu=2suZn^4;;~0G@~$$2#AU(R?`jga601ml|Xn;YbQvh(vI@nN-0t5`b79n|`Du`@IVQfrR1tyUExo3OJFr_Mqnvl#xsZ{ zVmMUJ7s-Tjv1AS`7K%az!cc)IgeMd!gfc~l93BLh>Si{kE8;cLgT1Jok~?^)yu3Vq zUI-sIuM&vla=Ab#7Kp_>s)A?9$4I@EhgkxL6f}s%U`7cN#WC2Ws87RlNF|qY`t}GW zVp#UQclA!8PWRzblgV`f1F{w}9vSibUSUgOK7k105euGUHXu}apo>f>)Mi9a;^ssg zUp;h-OEPd0w`AZ1tX8{jZ7w`(8HyS4JWKEZN2gQ7Vir=58IV|wl1r)ZQPil=L`4as zR5GntDhm;bv?`TWCZ4O(ie=i6xhi#tc8IIN4LK$RBZs)g5pMLTT-P|52&%INF{8PN zG1`oq;DKW+(9yl9N7WnT8b|k{8I>!b%m`dR_nn_Tl%gic6%LOswHY3M1fwS2OpUg) z3ydEaSYWKDo)FDx10{eq3_2Cj>C{RsZvoLE3e>`I0b&k-B13-spBkvyo))=N6do1n$X{H+;Vlg}bU@#~T z5Oa`1hZsy6$J5Qrdx8%O1h4~r$B4LoDshw~hy!R4jYTQw_IIoeXT)hmZ0Bv@PWhm7AP$HG_UDb&Rd1s6Co%V2Fxbkb`yVC0SU~=Hwalab z{Osn+iJBQO#~Tie6T&41wq}L>X5O?5H~)_C-pegDLtsnNf?%eQ*R_jwbv99s@}70XCi~0;EKC_ z*7e+`Jtt#4$0@c}E;s<@6i-{^X)E1ZSnKobLhI#U-^8yA?@~+l6VKziFKwE{t3Bb~ z#UyXU9MPKhqi^b__xtr?P0KPJ$NEcuXuaKVDf9EJ8}Lk9hZb8QKW|>XdrorCSLIlf z7iw%<$46tb?^aA{Ob&%l-Tr8Se@Rtm?#|-LJ2s$Qay1h2F?4cF>Eh zCsXc7_47QRE32%2j>37ND}8ES{=!EiJlfFfcv$qI_4m-apJsw5Df2JJWjtwz3eOdt zJGG>H{Y1}~z7JSateUc|$L?P$esS&Y{Z@8r{o^P7w(Q#9!hJ779u@nO`AcfgOV1GU zv4NY*HV1!sb|dV*F%s{rOlZL}>!MpZsoM^JdaYjJ%h=r_2@8AJ$D5thXG^Z;o} zJy~W+jnfgL)4o1!=HTYZ(s9cp)>Ur*`i5xHU+vkV?4MVq2CdIYsCd=1Hn1bYk`R>i zu(m39O{c@*I8ek5YAl+;-p30tVWzdm(laMjdi|@LDLrCHnAY*2F6B_uny;K zd9><|pgb;NWydt}YhFyC?Vo*CNAJ#<-sML#9<0ng-r3rP=@z;dMBH!gAu=~w{mXkQ zemr>MOv~>43Uf?tIO@FhAEE1f AEC2ui literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/037-ICON_MoveZ.jpg b/buildroot/share/dwin/icons-6/037-ICON_MoveZ.jpg new file mode 100644 index 0000000000000000000000000000000000000000..487d6e4e4436a05c8931814f6bdd217184f40968 GIT binary patch literal 1820 zcmaJ=Yfuwc6uz5HNbofTQLBPoqYN+e4k1|y8WI>$6M0!$?WiGHAV9KfvPb}H$4W;l zVig&r;wToaq86)Ds8fVu6<<`T777v_Q4tX}Djm_PkZzENoe{qucg{WceBU|u+;g3+ z&fDOl2%9kpfT*ZIzyc$1J_2lYhCVF|K!8rUmjU3s4f9h-l0f-PSeW` zoOxkLs13E52opx?5SuC8Y(;Gf&VV>d*)BJqgA9a_X$p?gl@<9^6OE{F3x)*qq+GpF zB0@ssJfTz|7fI$IB7rc3F9_ia#aw|96-ZIB92o?M%4RVnp|R@7!Ccf%!5O?%W@aWY zQ_RCH$$X()F6RqGe36JtMR2WIW>RP4nys^j6x5hiZ!r?25jP_)MO`AEK`J;@rEjlb zB8Fw(+pBj1HJT5HnoO<+49Hr^SZt);_X=C%vj~hIi&^muiyouGXSv7(sAax2E6(qEflKCPVxajAjF#X$=_QXf$Y)*-GlndMrw<;7}?&qtSq>!zChB zh)N&|mWqYK2&F7oEsTg%%cZgirC2Tz4RO`DKEs5W$sw*`gex4C>lz0WL1k8B7ULSs z5NW|p$iTHx9# z2sD_^aD&*M6TK!)X0iZhmTtED6gGfh8r=<|!-KLAo8}4A!A#CXp)$scQWA+JlXR=Y zoo!$om7B(f*X=@4_3;I;&Y&8|vJC~#gk#a^%`}d5+_U+zZB{H6Ve4+pR{rtKf$?`E7-hcKM zm3_`O79HIL9@yv}r3KcrH9ax;GdBj6r>;!wE^K`HWV7+|o8OCc(AN1UF9huQJCGQc zAGhs_cFUn_xm(HjQ%&yn&B0K8xm(gnx5-4F&kP0mtNmQdsRJ*HyVIE^@R^H5*V6U- zZX77^6s&(N&9Ci|%z3zOZb^&-_bZz0cKqh@@+;i-uCM7dVWtxt^Ol`H?OoF3s0ezn zrKF;+!{2&$W2(V?O&hmMnXq{GGS9H+;=J>|vg&Q6FB7wid>xvFM5E*%cWLpe($q!G zZ}RK=T7N$JVrf}48tZ#Ca))3Et*Ib4+M}b4rr6tJn#0X$Se9P4dO?+M{`jI&=?!L6 z%hBk=vLjY-H!z`o!#By5c5{FFFBdBUTm7CT{oCSQrFEO3zI$=*5m_6Jt xQ~#x9>Y|>E)3G@y+wb7mu(>B3Q)}e@xwofUUT0(H#La(&2K6V0#yoRg{}1V&YO4SM literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/038-ICON_Extruder.jpg b/buildroot/share/dwin/icons-6/038-ICON_Extruder.jpg new file mode 100644 index 0000000000000000000000000000000000000000..155b9a58576d83b82bce168280b0872d4c294d41 GIT binary patch literal 1692 zcmaJ=c~BE)6#tUVLF6(JJjQETJX#CcY`DzUR6`bOlsHP_Sw|=CE@TI?8+I2GXlnd@x))Pj9LOO%j>Wk3cLQg|5v!CnY;i=r1tQC85qC~hOI zCpi!5cX?4vZ$QEP1%9uKETlzvBVE9-X5@C`83bl1GqNh(Zm@f;w3}H}&eM+arB1TE zkTg-qg4f{re%$ZzdT7xF`#nXhfcwozm>ieRp)iWT;S{mZj95Zd;nntKu$AL!I9;ES zLSkt~IMbxZG7KhTS~6@jV40{P6U9a?6z*9}|kRehvp32Abh@7EXl4nMSn)3O4 zdS9xZ;|oyCWHO-!BWg6JNEs(+QJ>NVjGi z31cRPWm_!sa-(#G@BY6ts4On6}d z)ht~hS+EmS0{MtR(g{*XPe`FugiNVYhE1hXt0UBEl}0meoJJG%yvZO4QYw@hl}ZyG zsfmn^jgc%iHk>r{ihAljj~nrV%|IIgbU+8mv_P(vL0VbxoFoj$A=&8t2SBA(C?hm7 zNig(m7*fg8yk|fBrkQOWey#w)3O-J|ks8`}o^Tdwt?qCkP z&ZcQwLq|DVa~mS|Uz1l_+c&q?K0Z82_wR;|0?@@Ww>s0aHuu^3z{&l}hT10clkThM z(YrVL9yPZYCr>$4Z?D!}oxJzQX^y(wH;(;Xe|h(NTWf0bDv7sAH2ISGokOL6?!74c zbwYspyl3jSO+m0SBbTYY&}Ca0Fz+H(L<`Pc*Kcc1|I7_8d2l_?e6)0+XZ4Zz)-zuR zj;1A{X$^y~zuV-x@XLn&6_2v3n*Q;c@;Z;=Wb*mbiH%R%J1_aTDdd2mWyZ=md+uNF zwtH%7lM}9d@K#pf)jP$vChtp~y3RS!9Oam?2T>oiw`H8r-AZf@ME+%E7xvWbI1c%C z2>pAu48+VtFHEF}@nsd)ax=`gXWxrIezSa&!|6Vou&wQG`O-CY?P_}Y7wq&K$;E+F z-3hIQ=uaKnk93V&F?&|(^wJ{1-S*~js;+|Hw(#7B-Pn|Cryd-u7_8FUv!({L`LmK{ zb*TRoLjbNS}(P>I{4dvkkBjY literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/040-ICON_Temperature.jpg b/buildroot/share/dwin/icons-6/040-ICON_Temperature.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eaea25bbd88154c2ebb3e50991d3da78fd7991cc GIT binary patch literal 1821 zcmaJ=Yfuwc6uz5H2wJOzM8P_>%i<$Y$!5bdk!KQ85h4;^T2nP73t1uAkSr#EGuYZz z$Kq54i$oDoJ5{MV9i>uVNG*1XQ(u5pe3j~e^3aivk1~Vl26_DuzaMwbJ@hM8?5oq@_CM0(1E zIdm2b7l|V{Eq@Ly@5nIyVZ9b7w`Csh1)O%1R)iqOc%6 z9wI@)r6N2`ER}>TKqO*39219QcyN#ymx;qPL)fSStDa!O{oQ1XOkpK-G-XYr zsJxLbE;Uj#WiwJ1M4@nZEdmi{l4b*Cw*?Gw)M{CR*+%QkdLls?g)%B4k~GK^%6N%f zF2^OI!EzjrkCUq8QYEfX%9T<{oIF%9!c|iG0uy1TN4SPDu4F>4dmKy_CbN>Tl4}Wr z%1W7#p=-;?32TW{O{h1_HB4NKctS456oa`Rcidx-xR?oYo1>%4Y(|HlFf$WxWk%ce z1WX+oSYSBMd?Cnn8+-|%QLq?`#bQ=wc>|aQGhi0B8!%@GTsJ&N;ifau92n+sIc(0j zlhKfO8?N(!=LrNr07E>$;z2MEa{V@3*x3IEVDcocCj%79-eG30N5NBo5LA7 zfmkrdo9)5%>&wmv&G_6{8nsZoOd1&1y2acYps@pGIe69cTvfRh9SFQ=VPc#x_Py37R zi-ML@*?V^TmtS&(t(kdgyZlh8*S@XL`WL%S-dfWh+H^rE`KE76$X0Y?ecgw?+nkMs zQ|CEF)wQp#lrLZ2dZyN{dS17oDO3INA#rrJfV1~-f|rM(ajFm7(NbR%5&di-B}}S2 zm*#IZ+po83`gG)j*s{eZ(N}-h7N2%b5~h}?m+ufxk*9!wQWh)Kms8zF-<4k+7}(_O zytm8n#om0sr*L0h37Wx$R(2dW4fcIqZCP~uSo+;X2b$J@kT<`q>cUR8a>|_QM;kh4 zrSIs3Z|*iWZ?E-zWK!XDn1w-P>5iw`E1)~x^TtSbJfSQ^mjAsxIgPYjfOC0S8uN~xNYf)~DD z%->{Fs*HTp60kq|c4|fC4?bA)>~)?UFK4|Dw_iAQB<3S~^y{lTZ(P6LK9IAdtK^sd zpBwUu_V5(bw2^ZMDoXBEo+zoAd^izni@ZNmdQ6bKJ*%?owCavs@aSOtWwZBz?1#Ij zudeS|alC(3UHbhK#Z<2_hF)7uoVwcm?TwJgzL=vw&h~2ZQEH8t-UV8E>xw^XIGNnl xt1&!i8z_63*qHfGedx2h8}h&ZtLJ$`ZGGCRpH`o#*gPkdpIAz4yi?-3^*?kZU*7-# literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/041-ICON_Motion.jpg b/buildroot/share/dwin/icons-6/041-ICON_Motion.jpg new file mode 100644 index 0000000000000000000000000000000000000000..472a6354e43d81743bdffdf8eb4928cbe69fd8a1 GIT binary patch literal 1906 zcmaJ=Yfuwc6u!wOJnEwcqfu*RSr`#9*=)kYq{IjW1T;khNKvO4k`+?SZYCQbP^^kt z1O`;pnS$c@LY~1vOBIXwLR3(!PXsDH@KJ3=M6IQarW*?A5ApkP=iIa3_nmX^o@>2j zy$2=*nRP1w2o0SH9Kd^6{{kFEk|r?~FaV2AF9E=M4?+`6CW9132}+>Wl5w~|L+Vkp z+JIsLAqxEDW`kOjh@0RzJYGl0kmtXiKwzC#hD3WSg-Sypo}dd!GvX0xUq@=v5;YPn zBA)~MnWbjEL64i%uvx#7prmFQGGH#HV_O2s>0tW7s7$05r@46K70-4 zC4zk=0?bD!5qZsmMMBIM75bu>m@mYnLLaGE0uKVAs~NQ`q$)-5U@dwlLk16(l9D1w z5erCTJc>yq5>zNcMIt`U;8UrDNp0p6l9o>-pdjx6 zNw8StEe^o2Ab-hh2^K8z5()jWfIwd?U`VSVHA#A$Fb!$7@3medYHj17H_(+8xKWpk zYlDrX9v(QhR5x-j*oc0ETJ6Zah(^?+bTg>!=YH_Bhf?$e*}~z`r8mRFj}!F78|l%u zc7w440}He#=_kanc7XMOF$^XhF`4vAFaHB#LNw@wWdp<>fV~Y4!?4L|HXDN2_G}jW zgD=CBPY2eMfa3tTfD17=fXQJ%9EP<4WC6g0-amgja&Tm_KV#5Y#)oM;d%$*JjicEP zEH=a%k}#MYCy2#m+u4twFwp_HAg(+tz|p^2lp%JT%%Kl$M>hp6;BeT(X?pQ(2 z?u+gbeO-&^_QWhJx&n{+0>U7#1nssp@C+fNA#O1%_2(W1 zDYvGhH& zg4>HmSM%7J$g<;;*HoO4z9gI=>Ox0HYfWZdN8#3M8(z$hIBH+AM+MwR@fy9YAiqvl zyeoaj&L?lDWhfqV48jXBiuzH{E47N6d5 zadA-WvZ5V_PsPT{ey;LyJkpw`toJ;=xy+Nd)Z(F)HIhlL{q9dR{c-kwLd`8t{|D9E z!w-(BkI1S>y?e9O=ic&~3e}YJU6bt`HYxsIm%r`wwe`QW^;v$8T1V)vdR-22L1xd3 zdgC5+2I`CL)F1BitdDiR`m8#p7B8-Nw!LhhM^=B#)TVeWd8^D)C=I#go9?uEYFSAH z@91KM&^MuX46BJdm$&9FQTwebw|FzQxNMx_;`r{FYeaSp^D`d&f46bg4Yv)sSKC+cSDy`e*X_PnnxB_GyFOx* z6)Y$U&a2FBC{%hc%TKNfKP~U+u!5KT>@W4+^9~%?f1*0;)oBaW(%W`3cJkKpXQe%e zOH|{#y2ZQzOrEHUC)n`?cf+5-Q<`1dxAlgPUw4Pt({{P?`j!>v%fmWvL>enF i)XUUT9`agoso=1@mHW0%e!%HOd1=3E_D)lmwe3G?50dl% literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/042-ICON_WriteEEPROM.jpg b/buildroot/share/dwin/icons-6/042-ICON_WriteEEPROM.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a4dd5b9296c40e0f7044421ace29a1e1342c007 GIT binary patch literal 1812 zcmaJ=Yfuwc6u!xB5>!M3!TPA<60j9YvUy`7fq^6lXb{jA2A_GX5W{9e5+I^hRJ2pA zmZ>P%S{WWqbIZ&S4ZHe zU1LW1TpkL-Bkg95&WPC%EtYOD$=MHnImbo}dO15qtmdiB3M|7An`gn6=OwJrE4q)rp9LuwaOoE8*z) zA^{R6uyc zbA?>Ol8*AFQYp$4paKDhWN@q-O*W04W3mR0Iw&!#&SEgz41@{sIBK*+woT3^JAHKo z+&pIc#=Clrs8+w7isPOO7`Calp-FWhG`Y ziM~^{p`^cIYFLqY;?)Z*zjW}a^fxI zXuJD?&+xzk{dw{UQQR(204QUik`a|kuH^Cx5EUXpF0cm>Z5Rv>yvE>>lWZCU(HJzC z_S%;*%G(3?dBF4nEWm;&Oh9E)AST7_0H2cY9HNZBe*h*yFnuxwQ2(C=bh0Eo9RL`n zK~$JAqM$-BjY4O5F@615Gl2g)0a5(GnUl6%5NOMFK}GqzogW(c%i?hfEhR-`f^CWr*xZO+hxoj<6K826W=d&^zijF2LFadZ2R zaV4y{&v8dU&_AJ;!|hiR6$``#8ij9VQm8bV6YDU0FM6EESeD8voPuYx#F6GM^iJk9Xm2@R?Mw^wGUj z-5UzaW-UHk>GRE0?{$KY=ChWF%HZa5!L2WSn%!V+x<@~+HwY78^ zezK*lt?BNu{gQ}l?B|<@TGwT(ViO%_{rm?`o$Vh|*Ys3mR3AA?zx!xOJf76k z(~)BGmfS+)mmg(8ig0e-7r|LX@%8uq(5||8^hNd6D^edgC@W}=xuoRx65pNgp2)Xk zSJz%|>^YOr*>WvIpK^YnGJh-eNZIdGVt=-%+C8mvo=3|u~yK&??}C~d0KU| zD|D+@nyW~gvdGzsG5Wi6nz7F1n=}XR=e6mKgN=JQ4Nd+Bf3CZ{G(Ev7sjuEWyS=-} zIy=mHc}hnMF;yDv)K1>1x*+muzJsS1-@{^(Nzx-ir+XYf)(5p&o!p8wtG85#Gz9l+VsBoE^zY3+-nq?KhsN)(dEU@!bvb@&xzbv? qa>{!A;j=URCr!nJy=+%nN94n;DFc6cVDfGW;G)%kz~YzTJ>02VWZWEzb+0fOKLhC-=L#~7$qgP0UL zgvDSYV0oxXr$E)15l+X}t8gLx@8)(otWpZ;NkKBEOeexJRZ#_cETLeP94%0zd?h_J z1YT|um^3;KW>ml?O%`qtn1u9kaRFgl-3T2X4>78R^e}5yI9V18i?n(S4q^lcpsYYP z%;hs!!Aw3o&>vm!Fy6cj2Te9N@rAQaoDP;NY~~Vg><6Q|F59Y zP07BrS2F@-vR8*{G}Z=;%NmUF*mS)w6*kE8br=$l8MHZi6eGgDtz?}*q{kFStzNFx zW=(c6HdAZV8ZxyySR}G`jR!AIQsGK%p22UNBa;avxWTBvQA{Eh(g_uYN~IJ82XXkU zpx`ie5GR<$iU*At^{ zc?ez`A6TF~O?)AeWdLjeq$!XIi%cd~V)-8s86rR|Hda8CaoAa5KLsnDh^9ag#g1Y_ znQ<}|@@m6!8c^+l8*qb2R6wSZAS%gn9+Zt2HvRtraIm$rCjp2=n&~8b6dPv%AUm=R zWDiXoks%ur)rCSFy1D~551JQ?9;RRymwV555TS2V0f`LRLKMhpBAi4ed$~Y>?__V{coIN~aCIk!Z9rz&Xw;))|1Zhw7=6U@LeYpu8 z?|Ak9_5gYo*?+43LbV@xe|N(HGkD&7PEj|SRxL(Pc{si>M>%`0@{zw@xJFs0j2;f` z>8f$y#9nbd@j;N+5RdGW<(%SN`NOAPOdO4BSXg>xxK6}17t%{phVDrkdGne!Hm*zS z+&wDFx{B`{=z8+lN$x&Bm8XK6_Aw1<2e+SJ5z+AGd7Ai{=nk#E$di?IrJGwif+j9a z-7v>lwV=Ej8>tb+txsL-tN8LAsLjXU#My9E2wKbDQk_{{bPpQk0e^&SSQH#ugh&^ zqnGwpJBoUCbvp*8M3%BXQb3Wufl|f2oy`MFY0A3%N^Hn3z;0J;#X?_aXE-_AoIY56 zqe)tDs1KiaM4sT&aLdb)yhmNMt#suUw-mJEySJ(ao=11TH}oK6^yd^+Q(kKoUK4O| zj28BMzXg2qFeEg|X06lh*FRBBU*n0nhujvW{!XoSticesy4#Z@Ief z#X29x*3w#9+cNz(zdSAJsvXR$$s0^s>k%S6-sO4V&hKZDLxt*^khr5~lZVnTw~P$6 zjm9^(SKM++bi4WayD`1$giwa@;;~=H7I70pj+f9(ZHS#tkuVmYz}>gVy=TC`K%=M` zYfk&(F23n%t08ot^KoVS+M}BS*S?_MyxhCdKmYry?0+941=rin=8>{xyYEUjS^ED2 DCYE&& literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/044-ICON_ResumeEEPROM.jpg b/buildroot/share/dwin/icons-6/044-ICON_ResumeEEPROM.jpg new file mode 100644 index 0000000000000000000000000000000000000000..840bac57286160038a403837ee36b6afbe7c271f GIT binary patch literal 1940 zcmaJ=X;4#F6uwCaBviy8n}YW7P+25-B!nfAh#?6BLMTF1+;BqjGy#$qlOQ0JYEg=| zb*x*dV+*3PGsSU4r7Biq8N{I?D63Uea6mzUx>X^4LAD>__v6mF=brC7=bn46vDMfG z97U)TUg7G<^36o`sX@CICaQAuuj9nx|q1S7;2%^?8q;f1CWymlUk}B08 zOolfC0)tXDQduIZhvLz#N;MCD@kb2|DdjwPt*_WytP!9JW#|qq8nYu(BHNKD!Q+=oNl9U( z_%JZ-R)opna1d`6!eY_!2)Zs!t(T_K)jHP+1tF@FX_Xqi5>rDaMQJ>itmnaar5~@L z(oD*JvRBgr#p2J0s#K;1jLGWs(dbmYpA^D*lBC#tyI>5GFyyEg}(L@#P~(L=p~sF*AWg9)pDmlu4NAcr=+rB3qEn z$kR?HLq2a9uL2qc*aBM;fd+^)0*OX28bCGxL=s`@{{ujw63OP4c(&d(No2xYGjj`?jjf$M1-LA7aHR5G=P_x3fFGHgnOTfW5NJdjk{NJe&L#7u!M1kh z+hCUcuAj6Ht4^GWcNJI|+rcbcmPjMfKoEGk^j=*$;{-L?{!;p~{Aa6cly*aFHW%6U z#2sF7Q2#QIdmVuy7Tuz%Boa~5yeN6$4S}UsZsCsw%*w~^a%Y8T1>0jt@yo`SO&)*K zL0)v6nj&otg|fcgs9NAt?U8VfQ!P2qJKN?Jcro7b~B@}@?yc86+Lmz zxw8Vr2Dib|qBPe>4YT(5^wF281|R;$J3BA4|GCfpf>#|4@7gfNV&2JhcdNDEur&jN zFT+20mAtY3>a`KX#?*J$*7W}O^UZzVR~aO5MCOz28^YzD8TUM!@0XT|mz2g780_7b zh7TugOQ?v-@~EhSgbU4WZxb7tM~8assX^lYcO!M}cTP1@`V_~9dS%T$5zLTAL-rGg z57(|;NoUXQ&x?sk=IIunYOuc&o9(c0j;K%l;ZAzWtE@{EhUjAz7kU{7j;SB`b+#6d z)HM`E*c3z?PVGE!{BE}$E#Is3&+>(e_3@OQhNtmlQ;hKDF+U?tZ|L>Hb}Ut4$d zsS6`<&()k9GcuhV>d^JJEn$0cUGuP&M^a1nL7?%Bx<+lKQVLr#H-~LL{ZDMQ|M`pW zFRgKGX^T95$FY;wQdQlj-c&P)4s3LPKbrMmLF8y0Te3Wt^(aC!3^TebYunpv&W|{~ ze<+Fby4AXNRz_*bWv?qJZ$t6Hf0v+TasG?y2Gb7JJ0<>L-J#0ssByM?-4gS3UDGh< z$WZr<`J=5F50-KgGOGAJF7+KYg24^twZ$#ZtooYTGoPTFic5G#ke=?+A9-Zo-F5d= zw=Z06?|pNBuWnCYr>1Q5(2Iev%eo+!;4S6MBvCb6@;IB}Sb=nWO$r#|r0vb1l)UVc Rbe5d+stm9?ce%#c_CLbQrBMI? literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/045-ICON_Info.jpg b/buildroot/share/dwin/icons-6/045-ICON_Info.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34e63e587a1c07c0efbe4291b4ebf1907d585e75 GIT binary patch literal 1679 zcmex=+JW@c$vRenv@2ft9{~ zUa?+cN`6wRUUGh}ennz|zM-ChK7);YML}Y6c4~=2Qfhi;o~_dR-TRdkGE;1o!cBb* zd<&dYGcrA@ic*8C{6dnevXd=Sl&_Q3Q(W~w5=#5%__*n4QdyVXR8GDRC#&1Ub(Seeo?xG?WUP)qwZeFo6%mkOz;^d;tf|AVqJOz-6iAnjTCALaHmqNUdTL3o}Ygi#E^!3HB zG&dI%0AOQ_OM+4n?!{_waY$uBs(w&vaeir0aw<@{GDvfQm2**QVo82cNPd0}EEEGW z@=NlIGx7@*oSi|TW}%=Fo|%`DUtX*U*5m7I<(XGpl9-pA>gi&u1T;l2Gc(1?%*4Xn z+{Mts$kf=((9qS<(Za;p!qvhAXn>^&kPXx8lAm0fo0?Yw)0=|OYl%}YC^_U70Bv?j zEy^rQO>ryA&s6|>+bR>cTg-5p2i2Q`+b!le_38s1qYsK)q{xN|0aFl&2~WB}4m|Ov z<^fZD5in{0f5*TFPOuCq2Y^|K@&9dx76wK*U;?t3n1CdZfBk8y6!`lo45&nU#f|gH3>effeWk7Pt;ZCT12^VKxRqAyIZk5l%xTaSq3YCV~u% zOstHoZ0s--7zLRa6or^s3>^c7S=kZ`8%0Dp79Lb8Y7%4re~W#!=WcR zIaAIwYs{#4`gCc^R3*cUxq*R)r*msqdCl@vVzWGx_<~h~qmMi7^gA2VhUu~lGwlRq z=FBe3oqnevJ4$3y0OOv?OKjzpuE}@pGx+%Wi`SK3e~(;WF8R~2;?%wBZ$GVj=YBi7 ztM}0Lf+?rkR8OrqI!DH*%RPDP6o-zfPWrwM7d!u)pOTum!|3n!=t3^$Sy90?2U=w& zuQ1rz?RzGA?XCkJs(sl_@4_aV{K)2L=X&@icE`=F*A-8g#kls`Ji4*_oupY|*`Lqh z-kTyf&kQ{+70h(@ob!amF%CERgF4z5JiPDwC^e;+JFM_dblKxu$0m4aJ@%L}?}qOc z|6^&q$DbJ3U6zW8a!_dN+G1qoy-jlebiOdJ=TFWlKN9Pn7rCG3_94A@;q0Puwv}eQ z2fl_Fbj(+op;Bm8>sOrqvitp=bN<{jBM&%j(_N_^6gTUKiQK1TyXuse&E3rtXFc>h zu~V&+L1Gv0z5J!MH2CA~?|znflfG2RKGAfYtG&Me6l2A* K$Lst5-vj_KUm}wL literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/046-ICON_SetEndTemp.jpg b/buildroot/share/dwin/icons-6/046-ICON_SetEndTemp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..33f50041836c0c6a19356f8f8103e51ad864c591 GIT binary patch literal 1808 zcmaJ=c~BEq7=N2h44x$rL~3!CMJ^@T-CU3;SO`HPrd0@s?NlZtD`X(qxLF_^T2XXR zTTv`UsW^^Ttq0Tt#(JO@I$EcWjDU*QD3w-56daE#RMQP|*ctKn$D8kc@B96}?|tuk z&g;&5V2Z|JUIKttI|I0Z5jeYnASTC{l@B1mW!+x@;JgQ8nG9o7VVKn}Hkhb%Qf#Cw zn8RSh2r-U<*>fB=gE5O_kaRM`Y>hyBPM$##vnc{ik?U}sO-*K+;|gdpvEVbku^`K+ zG@)}Mk=YKF!(y|Li~(_2vaNQNBLW=|SFyIsjiJau2$L0oM!B*gsk#M-nxaWWE>?() zgiL~jDaC{WS4w1|hy*9XFgy$+q#~S9;R=;hi3|c|v(cs{s)U%>!CdSv0v)_mUS6I! zPb#M942)1Jl^8C;BoYxDA+qON8G}P)wfhe##E^C)ZMHFH%8IxY4e3-46M?dozP*CQ zHZ1$zUcD2j(|tJ9VsSNKK-SJAkR$cJSJ=c=$;xJMlC-+Rn#d z(!jt1(^>WlLC%|?1VF>!uoj2IuI%y_Fb8JAE?gI2-T?S6xDCTaXQO#A%;WR8ymwB9 zLq2Rc&jNuP5CS0#2>?d`!2-zH1j+$`p^@*;TKuu&+#uEo{m(sy5A)pI0pM~uJgz%` zkO6UEt|xB{U*G}!gkElhZ1R-eg-g+BY2x&f0C}LoJHuy9P-Xbo5TyV>FyscoTzH5o zV7b7Li1J_s78+1t@unyI=mdY~4KRVNh$DanU=H}sDhSYQfVZpQVGO819^7gos59htX{=xJJEfF=gN7O%mIlk~>y^5`j_Is#UN zZ!F?;yL)y{Zgzqj6<&6_RXA~b9I}ro{tM-n)b03rhR0RozT$g{Q>PwZe5&=lFsz~M za7EA9-1H<(ie}3m{UwudX;)W&vTo0YX~72%KlEM~nnJE#r}3K*=$o3=G;7(c^0KY> z7ij}zP+5{_NhN?HuZ%l%4f=NT8RN6Q4Zk#LFC@}l8>&Pqb?4Pz<5xhBM6m9k@@ONu z5c>XU`_b^*H)Ce^Hf9xji}6<|*;`m}tUS}&v3ULSe{WvtFKchh-JPcSJTf%*a9&M{ z<%eX(w=ga!t^L43kNY)pe4Ov8bN=zdMX_a_HJ(bttn3Uv0j_VntDOJI%1PBT>sp#C zTiVW_)JASX&Na^4wMFk=wR`pPyG13B|8AXr-`7_sTQlRh+;Vbqwf3i4pSla)L}~B* z*3Kl8Bf03%Z}n~Cnb*`;&XyJk4uA4hr-+`tWfV=ha8IZl%%t`#S1ti&9_Iw_GpXUb^;0 z-ApH#aJt|`?X~LE22NLZOQ93&T7K=pvvTaw_}jIf{OZ2Oi?13k?N!{l)YzZb-QV#b i_1MPc)UxKt(?$J#e?Iy853IGO@a3wOXQ5v@+y4XP(N*IB literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/047-ICON_SetBedTemp.jpg b/buildroot/share/dwin/icons-6/047-ICON_SetBedTemp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..09e5072ab9b4e69a5ca2d17ce6eb83abd720e81b GIT binary patch literal 1712 zcmaJ=c~BEq7=N1sVo^&_3-uV+g@RBwn}d*KA!TwgW^6nFZ>;86AjIruHo+twgLt6h z;L%#6^{9+h2dfGwY?>qK; zp&vpwK!U+%F9g77OalVYkI-!()R$Tvet-ZTbk74Ibc0J2dps_ZAZWM9Y-22x$jUeg zpV>u7L}CJDW&2!atAp~O7OKcjtFb$uHejgTrp9K=O=6QvM-|&AFJ-B`rBm~*OC45~ z4amng8*3{hbM-krx!_HW^)%)6dPQED zh+&HeiAtp+#8N^k#bE^Q_R}7-52xLUy$X8DZDs8)kDZ~>u%g+*lzP+{tn^t6PFJ7o zb7wUm&}4dXsM8r9Kt$H<$))=1eXg)O-|wP`T*}RqvQ`R)Cx*!`QpZwe55wj&%;MfD zPA_IWjJud|p*mf7YD#qCY&&gZyzbNp$7CXnwA*8*t&~x(#-NJGZnu#+N`u0nlj)@L z^c;!Apwa5Z8LAAKLS|4ZHCm0lm#b&2rA~_W^m1+eT>YTj@H#kMFteUw?Moh*AKgV&-RluN*3i15!H@UweeaD&2T-|E6k-||y5+;|qQcIbC7JhHIB zb{ak*B-9Sp0HhBbXmL33gvT>*Ia~;M@WSBoBZv+|(1$P`M)SE`el(xQAMm9wHd*5-mWW7x|w%8i^8cVgZ2laRkGADF}zl z6Y`^?LEOj@f(cmSsQ99US0x%*UQ+s+*Ir4^s7Tqa9HN5x5ZD~T8$bg>-UJO_VvdWN zQLY^kjY%z`AHh(Vlq2K{K{m)6)>uu()$h4xNO?CnWgXi+k5eW)7C67?{j0lgR%y`G zN_^kwkLRP-54X}|JB2H|t}lAp&}nXZ$5HJMBp0_lC>&RZmc*AGNG@aVtLj~y>#qbi zCu=9Qiq^*N-Fre(gV&jEiAEvX^9teB$0zF^1nqws^4jES-iMugB=d?AcQ!Q-+u!=; zcMl4ij^|%sgWHtI8Z9W8mJ$q(KdQ+}OE_NhcHOM;ZJ8YTor1e#J8WNcZ{NIi!kpHL zA;9z2p8BNL_;iOjrtCz)@}0p)Z(ZDXWEbf_HG9@I)t2u!e$;%mvhDCed3&R=)|o2P z-Ky-mRc%=pduV-m;)qHCz=|zx-3hr}Y|DQ32;TMbu9}(iON>e7RpS(7%+`{l%PeQF zEIyo6NKt52JiY>_|N5ak;No=~OaS!yd4Lbb;k^T3ZJsr^06>7lxR(Rq9b{wKH0@Mi80i+8ZIp!&S}6zS zF*`9_D8j&^Xphru%_V5WLS)%VC3?T56-DeeC7LERhzw2*k!_DFbP*|qMw7KL*DAN6 z(TkBq9)-u@bP%)|@iB?}O-2#>@>kr*BkF2WTenIb}ti~wb_xonw=WNqw7F6O30N1Dpd&ll!L z2q{+`RG!O9FyWy-vQwdP5oVflnJ8-Y z=oAyPDVlO;Q%*#q@l7oXnUiKGZB)K{?l8w-Q0PfFZ6>XRUaLeI6`|d3Q^ZEe`@o9K|XVAb(zc9@)IPp@h)byz4t)i z@WKLH8}o!9@2{W~Kx1Gr7K_E4%<&v-7MlTcaC~5Mhr#oKKL#J2iRQA|TppLhec{Vk z$g2%+8-V#h00e9Z1}qq2!;rTfY-HX!8ybKA0PrEMe*gqn|M&Xw0GH310sx2Y$7ORz z2@s3Tfw_JlXeuw5KT9xex<4uo!BwFe2@D_>(~KW98VkX!S$Gf^usMFJsRCY-85K{P z9=2wEy_)as1+OvbSTGv~(cri1r)T%cDv$MciuZ0lBP=+*^ujlx#BNqZ)vc_lDv$%Lg0h$|%XmcvGxT@QxaHMb9!ehQ?@kL#+R(J@@$Eea zZ)Qoh){D`3UvGnqHr*QI-$liB=4S#5Ta3y83v6Bi<^#aQF zyEJ_A&v~l0nEC0;>zpRjz}}MGrK0mcc6k2mow>qf5*(tXyW{)%-ZL6H{wQmx4T+5j z`>Ov7UFFWk^<5dK@{7wiEhrNptKPaAKYP-N9fzN7{OM#*-yI5^?jyjK!(TEZaMSO<~AMSjFKgh{!!hw8f{zl39WKkCN}Esvf?C|`bsYl<`o(B z4a!@W=>BT;knVO!Px?OR2d$OWn>#PRd2)5_Kj&8VJl>yn&7D)vJF@Pbq4;A<0uMCz zeb{`#-HKHv;0ed!oLyBZ|8}3Anf|n*d-+g&(S{{;twk>QMr#c|_;%`@IhKJ3Et9U! zvOL@TXxI9SPggFi`%JcF&x*#S&2v*>ZBxjhAJzr0to|kGqPnVP@ab94Io?1i>+OUi N6&^`@uf^)U@*j7!O6dRq literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/049-ICON_SetPLAPreheat.jpg b/buildroot/share/dwin/icons-6/049-ICON_SetPLAPreheat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f69c6f454e1985298e99d1dec6a742964e0bbd33 GIT binary patch literal 1782 zcmaJ=c~BE)6#qhQ&L#wE)#|c90b8<3Ac=`a3JC#}XrRG^!Kpb`l0vd!vos0nhzc?- z_OMheRi_{nt*tkV3U#2OPN%I~PcQeBqS0Ays$0W2^no#FA&NF5_y6Q8WWhzhMQK)vsLP`T%@Id$C`3FoqT5k zAH(wzp-d)21R_KviYFuD9c~+;cg5Qrk>d<1)M3OecEW<$ATOidfE5!8n5^_!3s(CC z?Mr9%T%bnt|Djf^cK|+G2a%0V*85Uoht6$Bk!;j~72`&f43G4J?Q$iK>In?jVOZh# z6t!lIz#L}G4k?x1sm+CAmsxBk%;|{pVKf?fhRs3fZALUhrGQBmzQtmaOH-7o5_L+7 zNFquW3R9D10`XjBqD&xEiBlx9M9DZ-g&B*jsEruMnkKQzDY4#lu-eJYDipW8kDAmt zW`%rh%PmvaBAb$L3~QRYmgFh12w4o`z1-(6d)!5CkXM~pUDB9Xe$+;8JWj5*=MD(= zEi5p#lTV1^xdO_7--J*}jY=a=DveI_3Y|gs34_68vY1Q;o9*waFpF$=5;1vL9R3;7h1&sZpkX?k*8GsYP<%Kihuvb~aYy%!yRc{ifz7aEx z7ySI8(QEuVAg&QEIQ#0Dz5V=LMp#Gn)aM||qnbW^@p4q8>N`x}GhONJh+@8_4 zcgIK#+8;*auFYn{H#@fETOf8GT6&?MvC|aY9Y7fk8O&?V!-@U!$uO!OvkB_Yx zG}i=Gt>~M#Hm_}FP0P~*lAGAEfySV$#^I&|J^WVajMMhs0&#;DZZ3C=25#whTnN5_ zAE}FN{IIoqb-~dbGb8JKb1+ZVsXvZ@h_ce~o;0X@xU;&Zil??LzMdA%o?bC;qbRKN zTv}rHmJ?=CbnI`3&Oxi#fu)&_Sn+JriT)amHbcgFJlxV4b2ar%NmF@J%=XNc`+8R{ za4nxF8qiGRyOgC8m;SHs^?SI_iR;+(JD-Oiva_f)OR+elD{&&`J zS=W<*n<4R<2hP9ObYRk16G@g%cT4P#n=ik~?f2-?$f6x7af`t$8 z&vMvxn(b2c^0jFv&jgJy1())_zn;*23Ei9}%zAh^RMXLNH9ts_{t)iJxMNA#qNlI5 z?9YER>ruu*-J!^~rN)beG1a3T(}^zhihXc%Ti=Xh4_+VYU61rNNuLb9d-ms%!ld5& duAV(3id{ob${QB_sy$WJT+mv1TVeF{{s(ZMXAYVHxNiPMMyw0V+4Xq#i|X-Dk&x#l0|}pqmII~ zBZV0i6_05>h_)i7Q*YXeN6XYWSWyR&dZ3kRRm7`WiA^_=LuaJ#kKOORdB5K~zTfA) z?Ck_2Q=R5T0BE(bfDZ=EdmjijMaF^>00A}=&IG{Q31j&*ZBt^H)gdvMs60|)q%4@z zV8d{U6a!O}oHm28fTWQ;a?9H|k&BIZ z9DyV#B)D9vAmSz?gcMJ}qzM=<6H9TWRIZdMkUm41YIf5irCyWPSBvpfXx~u9#l@0h znS`=0#&Cr~fk_FBAjC|D*imAo4NkGu5!KJ2Ast4$*+!cwE8=4`N;Jy^*NX{eP;(;#+{9)EB{zK1EZGe9DHX)xNDIA`^4WRufh1nB>RkbV{w&K^v?_Qmav+42#5UHYqg;M1qXK z2|`XJ;CO1XB2}i*Xb8DN7AI3DDir-#4P`8{kXE`MYZ}DLhQ#{hV6ickHKg6Vlr*K; zDGTBsTWKD;7wM3EeOS}bz2HM)F{T;Jce!s|c7KRbkncDkUB(#@KWSwYZ)c?K?FJ!! z!2(kg^MoL82Ur7G0|qlEn9Y1)Hizvq4wvIME|2zuKf7=}4)j)2P* z1P2NNgF{0Y3k~%r_5FfgdvD_gJZ}>a@_`75U`Pm9LI@T@-qWBG02T}lzJCBXJT{jv zfFSU87-q3K&@cde{j%7+J_IuY7h;7C7m7xN1C;k3e_Rw!=tt(Q-(`wVjS({GFq_BY z^cR4HtS|r%$CI-RJ>zzKhw9mdtB5EOXGGpk*{<=?-YX!8smc<A<| zIQw+-QsOi8rO2ZlpFL00C0(5D>ismNcz9NNcJ~G~vNye2Gt z%@XLAAi7>ymf1ORRY8Qje0#%(wJFh1uVj#PI|#7^42r+t zdF1qNUgP{5g;w{KmY&ve^?!+O({Yy!*w#ByAj+K$tcvYnrhojcospAY)>k({G8L(1NEUh}#bQ3vrM*9BP{ob43@Ar=H zec_AY4v=CBki`HL6wClZFk;~zATj!J*BSr;E*mZaAlw0Cr3~ZMVVK7!w>v2ZA;&2< z7O;CUrCfo5oVN00V>*McIXQ;#mlEL0SF4MZtvDW{3K<*(WBau=?3 zqItPUPCyrMd))+MM*{AZ9-l6tN2B68_8bXgC=!J*E19aDgG3bV4$9ByQMS^@Ex5hI zvd^5=6Trg4|A)HWkpV(BLojvG+7@*bBD;i4aJE6ow>#BY|KE6g~mo0e}NTBkvyoz5wD1 zMGyp@4)Xw)&q)9P=5zTFZ-@bLU`gUwwgVtd5=>I&qpIY}IaWuyFhv3Y4-#;=f?=qH zlL!MAGsixbi}EUK4kq1RrLxu@k{ZI7K`fh%BY`C#58PN5a=)3|x$FG?imRPdK4{!J zWu4U#jLQi9)m@7eSWp!B)2^X8+tb7+H{QMn&ES)^i>;PENm{LR9MgMio$b!OJH4}a zs#LS){xgjp=vS}s{MIAy*ymd7-tXGc{(aJmhZntZX?j9UgB<0dA{lzj@{{oIW=`IQ zEi+FY@8~zZ7c5v9y3HxNVK3V}aVp&#N@(viO}G}n$C0F+R5zplL<4+lUKrp5Vi{F@ zE+aUxa-23f_PLd=eD%s zw&lV6d5%MyFHQTjX8xYN^N1I0*k#e91DbP-s=6xYuHNu@b!__L%JP`?ZRwvad`qes zpQ^uLU;bcPHZ^OKPnReCsa(B0v37-JiRhQp3$``h^lqM+IJMq# zK^S965pJ)lGcW1dhHR}jhGwT|-aWNkU6WR{_(-T&8&T7eZN-sM?zqS+CDRG^8Cz#C%Dj zQMgQmNacK?L?9O}OF%>dp%fEHF=0}oK&TK%6iISq0w|r$ZrZBI*6Jp5(UuaOIF!@r zkTQASV(S0dryO)6+{htY1fQD%}ryo!c=vXoMybfvG3 zV6{!jzO`4c1?u(xA8NIF8{m_5P}%r&y>AtE@=vKjRzxTcwFkpum@K9jEH=vrHk-ro=Wy6uZa@H+8}ud^5CpN9 zEH0bP4G!c62G0tiF>97DXyOy}%6gMGWqG;)><>agD8zt)AIyMYhNm0s0t_0{?;ikv zx&Yb(z2Rgrm~3b^01%tWgt(Kx7=94U3}vx7bLNJHgJ?8D$cr&-KPt-3PZH1bhXG*u zF(D4bnviF}esdroj5f?=s<*S&lib5Zq;bni;5*F_12SIdBKNy063Jl_Ht<_>} zJ^B9CRuPrjxi2B)^xB%m^-rEZi@D5M%v`Xs=+-cr92}w>?mp)R2cU#g#am*WaAa2i z=hV}R(Vh*_@ZCHMQ*!}6o6PB|9 zX;iL#c4&1;* z@XDUQ__1k~(M7Dm_^9-~2`f$}cBuRA{_#!aI}IJkN^p1Yk!TO-BcE*gt^Rs$pp@Ty zyw~j%9NKUWsNr4`Z_RUMBTj#;kMjRu|kG8vLa>_E?-asTVii+Z@4 z-QFT;8(UX!>+(xyT7+Oserep+Fx2*deZOhk5z#LGF}dzQEw@?MbRzXq`MW}yt$WNm z)*;<<_2!^Bk03&L)))K%chrJwKR4bgi;OXC>u&EKN?&;VMbp_uw4AEp#NumAu6 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/053-ICON_MaxJerk.jpg b/buildroot/share/dwin/icons-6/053-ICON_MaxJerk.jpg new file mode 100644 index 0000000000000000000000000000000000000000..119df1a03d640da7a8df0627c27e160b0a05a6e7 GIT binary patch literal 1756 zcmaJ=c~BE)6#q7xg8+gl0i}a=S-|lko81sXQUZn?iW)@Z?07UJi)3Q5AqgZzwAcaZ z2&15OEViBMU{R}eDk@g(L2W&zmsmPn7KI`shee&Kl|gH|iGVsIeShq}_vZKez4yKE zeV$HFADFFn84CbNOChoA^CpX3=8~g6aT)D<(-?~QAP$opRd}l+x!QC@N!dt5EQpWQ z<8cHckqYp5p_GVQj1WRxf(a!UE{YZ6GGV+-Bt<3+rK{Nt1+om4W}+4y$9Zr4 zty8kEoYf0Jt@i(+X0vwyK3TgXgM8laD~0WurB)KlAnjDKO;6JBC@O(h%_lmp+X`|kcbmBlUx<0FE*1F$0XM<#T5ys<$Bk_Y^5u!NSm>Q zG-zy;8Sx!kW}Lnk)wFsOT*I`z5b9~U7~Kr!z1$Zrdoo3Dkk_4BT{@Ure$qm3yp3LM z&nO7;Ei5p!&`${R+yE7TF=a6A!A$xKGg(ZpvDhr1vDqAsABV%{a{c|e+`yL&f?=4& zWO3PS?u-C#z>MG^+Jb|9pow4Lv*=~sROD#^JU_q(d>G;Z1`mRHkmmau#GQ+hM+AOk1r7RMdAelsWg+_@#yO5*yCm7n5wkoLu0#G{eY zeVpGCVA0`%hl1Jt@8aXz^Zja6wU?H5j4TQg6U+O!zm{?59nVd?zc;Y7qq4mMeXu!c zp0=z!A|o_9h(zw!2S+7raIF{W{fYA2gRMbZ^W*+mG8ez>0i9ddoY(GryohM+u0MNq z^itQJ^@A7OL#EU3oVS^N>TZ9UKKH=qPu)NN(Keh`wB?JVjTe^ve*3Vw_I-C}&%W)+ zjRnE_sIe;}H`ef}?saF0RZ*6&JNRc>$A-dIG~fR6Pz+aC~ z&1`wI_U_{@_^oT2vyEq}w)VQ6NrtwPJ@>C^-J0y?Tb}nQFHYTA2s68yA z!ib7>1Z{OZ5wu{XSdnREs;%QtRM1h7;s_Nxl|w{Cryl7ha_Efo_s8z{-oD>^zxVci z_Evi*m>zAT)&QVV%>%Ar9QIzoS7zxla{vTbj5{6xdnb(QtyU9`qDG5QOVH`0P)8e3 zo7RM4LJEv3c5m<*&AtAotZLODcXoQGHTQ5EUQewD1F_6 z!8DfkowIr)P_6#|P=moS0B2f@bvZe%_nnC?i8&?`T~1o)EVGVe!u=d%6Rt3mS}Sc% zr0I2|Q;gTsR@$PcO^8C_m|6rfH;FP5bhahH$x*9umC<6=8g-;fDHAYRgcL>KF=1GY zC^S?q4vkh~ShQRkBbLTULgbhvTC9-7M2~Wnv@Xj)8m*&TVw}5hLat*S3?`2~XbAKBU48v>| zo5$hsCcE+6CVP4?@bq*BjlA4nTW|BmEPDgsy8<8J14De^!iQi!WWUG=gBXn8e*n0y zFwfzF-*mD$FpE0{07fjtWsiP=m=^e6Y!2}D@#RjPBNr_6o92og6icS_0p!BOGLlDP zA-)Ud1+%~$xle-Do9!zQFI=BqGO+W9W-+XCt({>$@X@is zqs!8&n%t&dKOEH7^5l|g-l>T6&f`1o&rx2C)q497Oc|`GptrX|bNFm^U&370d&L>9 zFUhU3J%3i6NSzrd@%ZM--!AwkN2;hB_ceY8u5}jFUb>k)V{@iC?)Uokzw*vKs$3T2 zcC3p|F#gt^&<6WgugGmaRO!ohmj^7iKz{Iof?4FD=Q9rl3^j$6QY$8DCGOgny4bGG zw!XW!dJ3C{_MBO{I&eeFnpH;@eGrv+v9`~U(h-*t?h|gfrSCYM`cIASL!xeFo#olu zlK1tE?O(shdzzBfln`G&P_g+%ldND^6I3JE6xZP^NlW;3HC41f`fmLc15r|uXsb=y z*1y*`xU3o1-%xJcwQGkfsB4%Rttrv+MWvrzD9C8XpZ}!E;)hhs&0FOmzZQA5TpUq7 z%hx#En!TihoP2Uq)%w(S{_ysX7YxKsztev_V9=$rGgp0ZNhP*)``P}E8soY8p)DoB zQx6w*^|j91Tj+EAtHiCWF3pyFf2hFi^r;gYR-QcOp~9Lgykbk!28VZVoA&cPFBOu} z{UyAAimXNVk~;t3#O>5OrPm+u8~2681^Ee!>9pjgsG^>>LfPZUmVb8=TMElN2fOOJ zG#Ba{hMJ2WCI+%!yb5GBdfCD3ClBK_x!x&fGcNDmU3T=!j)5DB>-oE0t#0lwhI;cl zE`(LqSa!xg|8e7`Wl2wE)vES<<-Ll=M3b0@Bbw)1HbHFT;}EWxP=&Q{Pw*0ZVJl3X$Ss$wL$3zW@`$2E@Pr+WdEMN M;thp=d|_|<5Bm^qc>n+a literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/055-ICON_PrintSize.jpg b/buildroot/share/dwin/icons-6/055-ICON_PrintSize.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f08d5f1f92ca938c1a811604246d9e9c14a4a20 GIT binary patch literal 1898 zcmaJ=X;f236rSW|6Ty-oxKLs%u}JH}vFQtC`yqZm=G?h+zwh3;bI10;)&|DP z%o;TS;o;tZ0R~~~08BJPnYtX10EKXW1%Ry$LQ+g7y$C^cMvg*-Ct(~Vu0_lWJ;LK~ z5fBt&)+>~$mUp^cl z3WW%lkMQ|EM1+rVxz408`{<05`xQ{ks5EHwCJnBG?TU&dJi{br6P5md1+9KS z_M^QT5*QKj=}@iK-hf_NqbV92toNhB#@OY042i~!c!oiV5#f{VWW7jgz!WCj5R2n! z{asv;f}3z-3a*ExQhV0|Vb6scoeIw~di8Q5B1GXjqe-DtV&SNmO{j1*8kLBT`bmU- zQk3uKFW~WH5(yVYLuGtP058BlAWRV0&qZ-%h8EMA`njq>u54JYeH^rUA~T8^G?|zx z%z$g*-fN3A!`BiztX>~iHGD17VYvuV3}S!WA&=efA|}Xg4va3b85n*{M@+nd7;W22 zFsgT8fvSf1LL}QG@HHR}fJ|6qGO-fN|A5F40b-%p0a1HFw}UYNJDrH8LJ*ZsrBH{Q z41|2zu+;!21B?cvArcdinIwowvRwwn0Fa@^p} zQtvM*+rMbew!-U<4dwfb?#{}U2kpn-^E5g2doQ%dT&SD?ms@1j*BdVx)7rWPn=^}V>?&=#WU;2Pex1%t^@z%&UuSid{B6a#^?9LtKYaY2F^*MKp)wUh)N- zymGDvl{xhkUMsxUN`6$y!B)mEq;H^lzUKx(_@1*>dtdpc!xn4Q(xlVr&mvo`+SC!r zT>tp3$K)>q&iS8XR^}OJZf{tcu%U28S+4P>zOrY54LBsU^UppzQCq?Cjw;#uI%q`u zx_OM91t%4e-`$-x*700J@(r+|9 z$#bhWC9=x5cI^($kua`%Ol_HyePp^D#aeo5^|%wRY1L9!@1niUL6Id7Zsxhauz}t3 zeIF7(gmhFODjV3;QC##aYt8B(t$TOA32VD;bdT9_^`A+9w!~Dt7x*>5Q2%u014DkB8d0|A7QhQ6q1db1!5>5KC9NZ zBi1QGt5p$E+cH>n6kkoO}0N*DY5g z@QrYolL64_0s$YqhwEP;(57RlO92D0>GXU6T#YQmL{T;+f>`ZhgONzW#Ta2h90nVL ziX{k`qITE}SSn6INqCCcs)E~2R=|+isDkGN>m_=d1~-|fIZ1q`b9y}HOvMyNSUnY* z;!rv)HVaM}AcrN*YF9c`aJRXVj@@YlhPo+KstOKsSB2*4V<8Pe;!vH$nwBaO+*IBjH4EqbSddk&SEnJLZ;5))(! zf+`dWL?T6`QW4D%*_T==gF|Gs3ws^3xE&+SHp)y`A-AI;iAbkZFx~0@N3huXY(IKe z9}xBWPg5-x_XTv@+Nn7FeZLe78ogSL&>G%3#HComK_YE@HFUsFZ3Ya*aeDE)A9k zp=d-{c(6jQl}Z(I85*HbM1=QhwFH)K!L3xU*7#nl=~wF>2aAoati?%l25yWb2@BMH zY^AyXUKIWM^=OU#_Y&5x7NMI#+&}k&pWU0HC&(T4jV`_E8-CnMPdrJFwyPBk?jBfR zJVQSrhN~W|1dKi~>4?dsS9jKyg0F(9p`O^`90Gs<6gU&KOO!N3GHkUJmX7e~)Hn&&8 zUizn5UOFAB={DKE9|lXuu3Z-d4>QGclO}02Z6aWpg+^ZVUm_tpKCZFj_NX zNggcqHf-VYehp6&`aG>}Br#VV7(^Fm3RnW523K*#X4BYRrsz!vHfW~_6AoHZd@k0& zE6Tr3Yvg3C_#^n_?%S+MQ0#0qh}53ls%U#Fb=W(_@> z?lb6#_=0YK=#_0<^F`KC6N;}bDqpxaf3ok|#B-zXH!U0N7nRo%FyC}&=(tfsCWjv_ z^KMSEs~vAkn|X<4heK|3>1>x@_$3UVm7ZI9?qEy3?a&eLnp}VNO{oVxc{BtHR&9M0otPHxr;OUsZX7W1(#!Uv%oD!C2e!?z zk8`?0*O<`QcSoL>L$-nMH2^0tB+sH*q4DQhgREk6)dd#|*;tg*e}cg0$d zJ9P<*YhwZ%ZXGH(`6{DecD1f5DGQsqcwS}m+`y-Gu;@;G$euUw40~e7 zR&L%j}6ArghWNdDpco?BMzpz7d#=6R z-UB=%EgCfdF)<4P1&qVq52(_7Wo{wB0RraE0Knb@!8s7BU7P5vk;~d)xs8q z9%eIHFjx|9(JPd>h>4bkWNUOn`m@^K=roN=NKfU-STel?$tTK3QqaRq|Ez z@TIgR7J)^p*CHkb&7#fI83h(0-6<}>Y=;}B)0`ouTp?ZL$Vy9-CD0_O0ip4jAq*uu zm_rNYGua_5J}3Ai8i&OWg;}96o6BIa1*{MOmrol39m{4=sReRr)JQIDC!~*D%4{|> z&0HpG$cEW`J|AXrU=D|YMKFwoI+Mb}&>8(k6{Lt!Y0&6R8dOJfC@Qkhe3OulRr>A< zTK$;pdwVq@P$v6us8;J}fK%3Jk|X2wzE{|oT&PE2IbuZf4N3$H_j8c-0*L`pm{3D9 zisp@WF(C&vp~f6kPm@R-T??ZHrD}94)NEYfs^En$=Djc`?y*TSEa3uDE=j>nzw*rP6Nf*j`9=wh3(;YW1X#2c{D zwm${aodXM0b=Vie**ifoz>NWqS$I6QV#_-~cnAZw5FCJrPLLg-jKM+2qKObhBohh5 z2`6JAA2#fDfJy-#zyrcj0iKG3s5tv&uonObH~#%Gi$rlDJ8PZjC6S4gnE>F)L=t}L z=mDOHg9siZGKK2qK5Gu3b7p(G%=2T5io{Brbbh%ykcu&g6lkjJD8rH24RW8yRuDXh zvq&P&?1QK3+vtbW(c64w@eE8e)n7Ciss0J6OUOv4JpQz0q{2V3M*wx_9!MY5fL z#tF|~&kb02WACCF%~#uR_9+6~HR8hsMW?HX8M3(8J>sK#*X$wy{AJf5w@~>`O3cZw zp8UH{7xpny$Q44v;reuBH;&gLcA>cNt=$#syylfBF36v+J~q&x>D`r_*s%p--kHZM zXY)0OBK(efFW$HQe0NYrcFGK-W_dzg+tHe6g{^swI=nE%-EEK%RA16^qZGQPPFvIq zL_J7VIVC>e_B~<4ifyLEo((y}P4{;`Va+W&YF@>2UzYTvFZ@qSarTw7D66)s>AvbDUL_e{So`}b>yNyS zHcn$lFt~DCZ+fGMCEwzn8IwO%E�@l5=u&K zm$p@M8wZ;nyqdE4)_&$o{E=>Hgg=xU{f#f>@$1{4)-n|*OSF9_8mxoQfmfqk4!M=j zK6dG+&kI{ayt3ZJ4g8Eo?l_w$@$rfK;g-A0wy*NaKNB}R;{URo=Zd?6Z&*_op(9Vf z70?!_SV~s6{C)AUcfxRH)2fG=^1IQ$cYF2i{<^(F{$|l%a}x`Z!bh7vF*L1ZD(`ju zIyC)N^}2%UZurz(%k#1z|+ML(nonCd__>g1u-e3OGjgfiV4%EX{H|?NZ@Sk<@+sxGFh}K&5{iL$q m;q1nJ8`SeJ-rHWVZ&{_slboT}eBL?F49|s>>Mz6Xcm4-V>Taq4 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/058-ICON_StockConfiguraton.jpg b/buildroot/share/dwin/icons-6/058-ICON_StockConfiguraton.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e2b6fedbe13d70828d9edfd21ff5c0e95272e7a GIT binary patch literal 1624 zcmaJ=eN0nV6u+;prPU2WZRuQb?D>ExZtZIeZFw&i2K|V{l^__HfQ$Wj(xxA;zCPB1 z+kz7&j%DJU+rR}>B7=VxNS4frV~oIzb6*;nQ!!4aamy4x<|a$*y4y;DKg8c3H|L&v ze!p|hz2`=MiCzKA&0+Ue07^>M01=o+^ac={>K&d2fB-&pR|62ef)Xx{3s3~%4=Qa= z#!f38jE@N00)$$rBEZ_haKPs9&>Uu`>)d_=erxC}9CJGjc$LO2jmCzWcQiqz!2fN4}}J)zPQ>Rg3NO{sKLE{V+ohuK)?R;t`&nau@v27I=u zP$;AfMWa?Q54Z|~IsdAS;ksn}d(G$*(w#!>I1{ak|Uoad5@a%1D*3&6}KnsvWQ zJ1s2Z!{TjI?!{}-Evh%mbuM0ueo-y~iy>lAQbQg3r^-j z9&bcPfLH{iK#C$_z!M{=7>SO7HUN0&{P%~JXer7UA^;H}3*AD5hYFJTsQ{pS5l@hu zIO7SD5Eu`{%OujYr*4WNKTq3bJjo8 zY44dD7!llC|0i<%HR_u+9W^x-IiLS`c~9H3cf2m&%;}>C&Cgw1#Wr>>n>n!W+mn%9 z!}klm`}e}d-MWEIp5g~`=|TBYNq_6%3D+Qd+R|R|VY}r07Gw6lzgG7hv3y*Se&qWX z^T+o7+La`FFr13?;prA#PhB@(dbBk4?)8lI)S(aF=1(3g$yz5#&29>#8hh$^tFY%C zZp-b|A8@s7Gc|Ch$CK`~i!7M@_}3@4?KQV!^i=r|XqoQ`frJc?IDvCO4Nnen~AL2K2@0@$@`Mz`Rx#wE% zSbKqcv`L)>KwO+JV1Nl&`v6mBQ0AHe1yITDWB{zaFp@(MS}}rPdago+XQEssu0c!+ zEyCyW5D*q_(khg>D8b4^v(=b{{iO9Ao26Ds*sB8NJh@hi=BQ)yb?A!xrHRV?T%}0G z4qwO$Gl@+atp+6&ER!Y=(~C_K_K3Kcv~Al6n>FG><3q`C^u*qmTRhBqG7Bd=)TuIoYmogfS zT%(YS>#`BPNF+jd0z@F-kRBYp86y-X4yN}SQ;?y0rB1CS)HuenDJn8?10i9PnZCb* zMmsM1(OP}rD3^cQRim*LU_@3=B%l-depFbWXx5@g0;~KYA}t6aXL5QE7=lTV6V(QoHUhd0jB(iLq&E$QX>=Nu z_QA=x%cl)%8(=bkGjN6}OaL({Fq2|!2W0?2FlFNZ13+g$v?=x!3V_Km0Xm@BQ5iD; zfN6F#m^OAqfv8N_nP%tcfOmxSuUk$DNkmdvddw>*A12Wl3}E!peut!*f+Lswd4RZEH%FiWdm?ibDu zlf>4a`|`#*Z{Objd&C#=!gv=*ekcn1r#&gcWam}1dDnM7{b%~5+QsSW;rlHOXS+9M ztWaN@<{C94ZM|(qpi@kw(IIZ@1w>#MUVj7kQxtm(|_aEJ=ODzpK&h)@yqp2;@ zHd+Yd(I)DKOSfMAT9B7x!M?fq>~Pf3PI2{X_1j|p!ibqC+uNWH`cA(;y6bbREQ$7F_v6aVi>W1l z8=0m?2W5t5UGwe#bc2tQ3ybSAo+VYfhWkD4`1VUpxwI9(u~+`8xAAcNrfcSHhmVAo zT&>P7TKN1zD0SE~{Y|G#Dqd5qsTmyJ<5tyl)>Ts6rS0f*ypr1W8Izu61w#!3t$AnO z8S9ayg9DVskxQ9@8y8gsm|7<+Gn}u;F4p8>B+>hdh=raQ#U94b!~NwF*&KDT3Awhs%+Nr YR?nk{-mXf!?f+&?({-PI3vTWCA2hvu)Bpeg literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/060-ICON_MaxSpeedY.jpg b/buildroot/share/dwin/icons-6/060-ICON_MaxSpeedY.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c3b3cc7ce18f4bdc64e26a25c9e43a2546ef087f GIT binary patch literal 1891 zcmaJ=c~BEq9DX^LO9mStq9C{gTNKH$2_z(PG$e6A1r?}J?~p8zfn-B=Apvy?j)R2? zG#-c@kJ5Ue7F!3A0n5=A0Y$`m3+RYN9Z*0zqLo_H4RZL0_|5E_-+TM}zTfxW`#sAY zOAnZ>Flmwih>Y|Dc3=vYXMiEkP^D%83ZRqAYXGqH(6}iCp_g#EI-H|aV~Hq7g=x7a zrJjp$cw7)1X3{HFsVD&_qRARv2y5tk0}IxuLs;>FQM@R<3{BBQWE;@f?C3aEcB)FO zW`%{q!6u1GtJk805;kembhyM6!Wt8okg;`{%Yw&Jh}004)LIozh*}BDFart)a)fLZ z62ON=Vh$qYiTMHkFrSBrxI7UT5wLlPgeQ~;#PB#+WHp02NfIMpGG2?Eg|NmqWi%Q& zMga#iBy$n5Sj^?|xqLpG%wXeLIznk;>u{e51v!eV3>rP5!E~@yQJIKk5Fsqm>ANjx z^^>w6JgfH-qoO{Zs?}N#U`!S#V$dnS9~8#pvh*l72F0-qg9;_neXL}?L}oyh1ZIfC zu(XL&T$zFq7@mUZVVTT&YC-UVc#Tet8S#Z%zqXtbT zs$OEiwD8!rC7S8I2&dH>=c=doBAS-VCCzZHm;2sjPb`rgWDO@ppUWfD{}qEg9`9NvLOrI8>9x)n5N47OI-O~OhivmqJ{vW4i- zdw(WVJ|0*a0mBZs0#_P^0jLZLjX|+AfdbMWM45X30N7C>8(Vt^3I))}Zwj^mvZ333 z0sv`%PNhKOe<)NMgYF910B0BGEL%HosgD~H&R4Po^XD)Cpwl7J@?g@cNG^E&E?NL9R zyAER}_~6msUT2uSSu-NGuDIcSbtbeg zv}Rj%*rGv~YaU)N`-j3l75JSrKDf3&_QiqX;M`NuU*8(>=v^AI?bL!Vm*ronHSSs% zJ6Dhq_)GUpmyEW*33giU%@SBnmm%}$Idgh#d<#3gV+sokv#XI~pxkc%jup&^O6NS- ztG^2yY3VW-jn4c+`nba1KeP0@S!4ko=C|us6jyG(yQBA~ulb+*MiTtbeTJ0! zUZ}C}P4awtd9}ch3Fpch5C- znFfJFkU^OMKxn8dumrO(Jp@dNPM(woD1b&Te+GbQ5JD0OLL)>FHO`hPuy~X$$5euj{2_@iobc<3gV*PuzfdwlSB387glq1!M(L`lPx)zN{Ul%D)Pm&81 zEWg#TuR&-~X;dg7gAJ-=H7+!WSd-#HGBz(GEO;`7ND{FE%)7!d()F+y)1t5^+sj?f z_29wY0yfu+Bj9(-9&TS?TK| zs5CROZ|&6^iBjpiQ&lQ+114p0A{?Eq_pQQsWSRy=!ciR4Y2_%H?rbJ&gkmi!BQR|w zh9ysTaeX32V0a>?fyH8T*L>iW(Mq)f)8n5^a->pWs2V3^YB?Gz5wS=Wwo<7OdT}IV zr-OMsPtQOuHz>fz+lLp(4de!JxDuYXhj^MR!Q?s>swSqnidimyPOjMwDh;`_1l1~2 zQAMy8Q^AwR7Aohig)^t#6jw2KE!;V|2w4nbzT7u1dwPj3c4GR>Frb7^&L8sB* z_%oC8?!eRtn3li>*gzB}pfV{ClVWND`DA_c+2>D2mQ*@p-h2uLK;$=bUphGlhN`}IuF6Kfsuq?pZ zhQ2|@v$fduH7n()oqb>-!*mBMgeYWT5EJ-;*5bQfEz({g`*^*+`LE)(k-OP3qcQa- zSmH1j>tB0r`yctKPRPqm@N2W;w`40n&&bFN11ao3o6iN=dR#ePb+9OGmkTq$$gZ5b z)K}DMyuR~h)k@cUBR#}n>Gm6%<##e!?;kh;2AB>Gargs(x;*y0Jf9pJ z?W*g%m^z$a8aL8je=W*ZyXw^LN_Y@m%O$Eeal%I~tV>1aWo=n~*OjH4 z2HHDp2DA^3T@Cx=6|064Skzh%`%22>?uEuRL$zBE*|)dt=d~0rhEL}3|Fd_ldHS;C z3w>#Ib*fl#>RCgPQ}y$M|8mHnYsd1C zJg34%6pHo0b{wthJ1y`y>F-)nOWNx`bNyHdW$!a!dC}?RonuiSF6^#_6KQ$bbc+m} zm-P&ErH@CQGJ&}5bq>aW;mXzjjARwua@4wf)I!@C&3`;Ww&hxHrC-9iOP_k?qzLx# zcdZ`J_FD8}b;Hx*+?-WzZFWPx4HcIkZ2fUf|F*dC)4>zLAGhClY-PYrV6T1Atpsdj z=*xQF=is|h$Iv>Y_4$zJ)qNN4>7&=yWKBHDe7L9SjB#67fqgM2PlmSY7^!P3~! literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/062-ICON_MaxSpeedE.jpg b/buildroot/share/dwin/icons-6/062-ICON_MaxSpeedE.jpg new file mode 100644 index 0000000000000000000000000000000000000000..519f1b448c84021fff252a8e10ed9bf583145b73 GIT binary patch literal 1888 zcmaJ=c~BEq9DbWkASwkSLBK(c3!*UOgn+CZh9n@xAOaq=3Wj8XosewE1_@Xd9dD{N zib$cNPOFZzARP}5&w*+MsaC*>1zJ$1cu;KdMs2!54*w9pnSJwnZ@=&R{oZ@OXKAx^ z16R2TPX!<<$_FsP7%Y8&CCgH2asUMA)beKlSh`_;y3wdd`FtJ8Q>uv+jHe>Be3Meo z7xDyr5FBRGD^(iI$VtJ{a9s%U`0Pc5gR4W3WnzUup_gLm_<~#m7M~lFpvu*#g49S@ zC@0v2nzVW?W>j)a+6*0unnI8vbCim$%Y1}0L@{bY5Q#M_XSpJlBP9$NN6ZW0s)YU` zPGAsE7$67|`TKH20%0Iu5Xcw$aRowD5PPU|f2N_1H47lEi6FQF7QJF$y8AA}N(sx_X z>PKxqcvkNb6^f5jwOZ=|4B3*#IBcxm4;qsRIeLsAhmk~oeGPRg&>p*569JLfMBjj zESCj}#Nu$FP%e=K`itb@a=AnhE)+zF#Uol7p~})?I^&2|J*K4$#?e~aL93@S%P<4J z8dFCY2rXx5+bBMME#h(ghPCSPYY7-v%cqLrTQB#$%N|*xI>;K1wk|apZGKEgb-aOU zZA(9}A8J^jzC=AC$kGlr0caF7Dx%S-ks96sroj}bfo=uN7=o=8%u!h76q^CV3|j`B z@!p?N%EtrCCBR|=HekaL3(!~)%z`XGf$ad$U})_91HhaBF>EJ75P+#~47Pw_LuWct zbS9l{Gb({-EZB+8X4u$HcAmlnGd)~{5=0d4x50CQ8w&tBY{P&VBR&v|HdzSM!Ayx0 zo3U6aa<3^1OS7Xzcl8X{b-(LZ3Qx zs%ma&OktVr#>Sq0%rX6Z(S}`>4L+5QEblyrt(o_dkR8R?l3NQKkIvt_?eeGjajx4V zx7Ikl>Kzoz87t18)$KigqS&5Z61z$A#5vEM<^e+6qdng{SflLNZ;lL5*W7D%l5k`H zffhQzgRFM9#NJTNkKZn-jgP;6MDb`U#vN$cvDpvJ6C!t4O#y4tl3sY6n!2*L=IiSR zZ{GJ@O1eRx^w$+$_$I3UuL82`#mUx(Ps`nV#nshU&-Zn|p5~&v9qiw?rV@91o!eGf zy-1@WdjI?Lzyoo4XGVEsBHD?EpQ!xmw9`P<9o4{H+kjPvmOHN+h^joc`Ip;xNn%&) zE&s0cqa{MWe1`A**uy=^j;^lzzI={qXBXcp(r?ijCy%P%uyab2I!Yxu*nTg$7rCdPv6bDscsBZsv+Rp# zJ0=qI=5tk9XSTQhDV$Y$8bFzoZtV61vdBEWK&SlnEn#IX^*se-cU4X7dPUBbr5gLYq-z>&ZLeL1 z!{FNWPq-}m)rp1Nrkr&yE=Ts|7p~uTLv*#zY+qYC9dVdM{FaZkNEekKyH`qeg9dH9msi>h}7M%;hU)5C#Ex=;)BgMj|8|l1KuIXmxxH zqEJQ4Lo8NAK(SUURYa*pt0;DgVny%?O09yeQmoc7-B2F>5YNos`R?6w&iCDWziYi^ zeE{4-EE+Wc;o&}j21a3h2I$gN%G69i0%T%&2>{jyFq&dA=|w22GqU6=T!FEaxE8g@ z^(cqMMnOQJMK4#TVkSg^t_7R5+IhjI}!F>`2BX0w@P z_G96O6(~n26ryY{%H{eJ3}0iW&Lp?^>WrSl4pPjhG-&iD4X#6Mj&cRQ$|PnImHxj4 zt$xJzgJ<;~Q6~F1Rjaifz@V+s6oZY{`$1!4T&5mFV=yDW%Amvux~EO77fB45+=LtA za6E1J6r)pc6K+hw^@v1bJGHrpcY;Qz!p+86gBqDk6s|Lx{DlVWaOK0DBsB9Ek*A;u{4OqS%pXjsOtZ zAqp8D`a^<6MPkfLsM~oag+w~7ds@G|vzHfly}Gu-P?hiHy745NKU&7PGN9>1+zEQf7%4S8$J%IO)1XIJQW4ef)VUw7i4&EW;?Kcqo?f6)Y&AJO(a-1FhMe+2yUxbppT2e(lDV zi^ihyN2`0E={mIaJ=!vHvPc$H6ZvcL<2rwL*M`y@W%-jgJ)8FKSR477N8OQH*RC>k z_1lRLYl`>GjOmY!=*cYqWzm#tkH@vmq4wW;6?Ny*q04ukb$E*p7eg7L>Z=zSrL<@U zjk>VD?C$B>mWn*6zcH82iI_2GesuYtv)5U+Diztg=wbKxJ6~7JgWZCK750uxBu(#v zr+{Z0a;gd)&z#)*!`iN{?kn6g2Qz(Elyr~VwPIHuw^>wneBo)!%f%rsJN#D)X2cID z?!XCOxLowPK}o*aocNtxHzQdvwYE~=At&Fv;n4)-TMquJ=X(c zzJ8bg(mr-crf^$eL(kJ>hqhEJD11UwH>a!HcYg9DJuC5L*Uh(ms)B!B({H{hTeR*z zRz7Ldyz?YRZcfr>$Dd9)4xm}}xXHEd@2R{bhSys)zvbuqFX~GQ+aF{%_$C}E-Fl>G z_4vJ;FITR0+nv}Bb@%k;s+V~bbR7M5@`Hr_lgkJ8+}(CNPwUWn&*L?H&ROdD3%RP* z53|D*e@r^@`@VTEcK6(8&AivFPIAAa(G`coRcSSO-JSEd^)=--9hMBpU(4J3k5}iK IJFM;h0Yw;+u>b%7 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/064-ICON_MaxAccY.jpg b/buildroot/share/dwin/icons-6/064-ICON_MaxAccY.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a163314560cf2101c522785e0cf3ebff3f906a9 GIT binary patch literal 1924 zcmaJ=eKeF=7{Bvnq@)qb9;bbc2$^~39cD0*n4vT~5sF22$IOd2X5KL~7^1SLU2JVf zZG^~?=%}@ONICl0oU^v9=L2Kz zg7yA7EDnIcKxbeK7NH*j3{i?KF&&Tqm2gJ_pnpn%6SP{D0EU$swp5PCqHGzifOS$8 zjIcQ{@bb~Aq_RX*3&o=Gn9`g1>iR7vgvq^`;XDaPq7tGB*p3V}8k(^yOqP)-^OQ4v zwnAPyfli@Ppjs)UQzR)h0-ZN=R$M^X1~<%vW<#`z-b`OZRwzOe3<+^H3h~%{mJD&@ zLhhbygwOHhy177H4&n}T++oC(#X$rdzQENJngf%_rk2MELPP;`xrm)NbM8`UX=&^< zS2nJWhY?RtPng4nxm*?z!P2BFwNf2Rsj-_^5TP2G8dGU8TnQNzrLlO5)|*LG`u++E z)q?B?d$lA`BKdfzLSbmYtgJ>Gf-ctkL19f;x(bCuPz|1t$M zJZZj*!3nq)*CgO7NGLRP%>!}_$CPqBP2)7nkw^rAN{v>kl%atlZziF_#xS|SmE-T> z$M<#T@^~Ty@%Q!M@P&TvLXQA9gwNx<@#eWAT$Z9hmD+i(e39$1EY~m&3KfxAgsQPr zR34zl70~Rp1=#Yn@Rrq^g}*EpCW?U#kGtft=Uv1E8O(*zB{mDgk1C0YR}-VH ze+gF44lIy26JLm=?*>NzX#r%yB9n=gSl)v|rVt<&ssR+*Ea(OpFTg-2qG=QgjZUM| zmYghveB97C1BNlM02UMy1CSXc3WKC?0eJvWNQ>W}u;|7sOh_a^rY!Z+$wpL~@fsqS zMkmv#^JgS7QLUvBongM#!fKr{VA}d}?KWont+#fwU%>!?N+D>pd3_RtY;H@T0>pQ% z1#LIi(ny+|eS#Ts($#7mUH=fQA_^fhC=B2OTJP9+)c4hNYM(@J-uIbIq#K25oayHW zai!RSK6{fbMQ*Ei%cza(LLaP|9_|BS9K+|yK7 z=2MyEpmZ&5MYFA}ZW z)2gX!72@7Bt2Lcr;_@J8v7m$9G~PTYeWZR zjOjbiR8iZ`wpW)0S+t%(T*Wk(ZNU{|j$qupZfonQkhG4tb0#$fj;L|psg1sv*%$da zU<>cib6Whx%;vLGnDhNS`$0z^i?6CD>x54GrKgLW`b~0Wk%e{A@)e@JtFS8r6^DNIm>O**=)#+)7F9Y4shO0 zmDe`u!DOT!^k?|l^jxrFwYS6dv>|NpPVL*C-|WUG>}n^yDoM?E{dlXgj*vH5y}P{H zHb-qc5;K|l_&JQf5MWK##XdH-n;QSy5IoSI>K^cj6@LC+K%$2E%cgx3*zMuFD@V6A zc}}0}I=%f_>hOrs)SemE>6=w=D*2UB!haj@yc3Dx?6JDot_@S=yB}QprdF_Nu%*6d v`sAU_15rL9z literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/065-ICON_MaxAccZ.jpg b/buildroot/share/dwin/icons-6/065-ICON_MaxAccZ.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23255ce0e591fcccf003ec52339bc53122fec042 GIT binary patch literal 1934 zcmaJ=X;4#F6uvJDiPk!X1jMPrBaxzL@{$k;N!d4n5*i^^6hve4fPl#hc@YA#$mnQw ztbkixQ0syVBX&_?L`92jMS+4WDvK4ZAQXja8Bvs`FDT0o@%wS-+;h+OopaAU*L=_X z5ZDEoH1Pn0hPnVc7>D^OU<9sJC8q-jPzd*O0L%}`NTSiGmm-J`=PA|LYLutKw1`Qm zM+7`R0z7?8dZj8EHNvaW1dYy%-GAvS8`h}3*h}4He3?D~P1J;B7|^JU2!$#mStU`k zeY{~$lhmZuYf+;THfh)BaH+|QJt8h8Y>OLV!y_TaWG}X#B`X{)lfwa+0fpUo?p&2X zB!tBhp1_?i5sDVVLcTzZ@WqJ0mCF}M`R-Cz3H%;xBAY=SFO3WgexHljd9mMLDlILI zm*&dD3<-!pB9S0`AtDrVi3l#9t}`l4Tpi9CRR~0Jl|iF7YA_vaQB)0%fv~hibK!28_t!#z=I$-VX}nigZ1SM4~vh)}TU(aE^tnmj)P6r4chI zFl^0e7v+hV5yKNPJsc2V>6!;TZ>dJ7#?tWlBOIAb8mhyMN}UP~4fJ9YDm;xwEp_F4 zxcQ5N+=Om!fdWC0pC3O^5+oG4@q;D7e1E=plpBbt)@o6mag?hb=ekeIwTy#SPh<{6 z4VqL`9c;j~@W{2Ln#pT%omB5VS3P+xqDi?3Q4C^v+zF38>LMn{Vvdb2u^AhFR7Xs_ zff#LbADBKeut0r{_(G7m4QvF^7)XRgA`vUGyaSm;CO|9{3&_+F&@7;j!9pjZsbn&h zMx{_EoQ#Eh+%R7Q3_4%|78zmy5(6SLAoH)_n~}oC|33iqDYU5&1W4qGP8!LILZ#0D zfXGgwQbx}p5>c&<6^&udWZBN71Gb}|kTW;e-)@%3X$k`X3WYi`nnAL5Br_>M;K!ma zwo>M@g*GV#J8UCqGtI4F8ktDSATxjuc&yq!ds&L2M~a=bIeS8I)H5|-v76k03-!wf zvMRz0mux8dBR?V>Wmh3~m24^mmFs%T;@Y2yV%v)QI*ldyb6q$#3tk;}v%li~SoYvS z3-i^Ro0(}2&UlW9>boIHzJ5d30$&dh&mlvcwxUB`dgp@V{f&LXyXmd|XTGg++F7_e zXm)vRtt;>Hw3cIGKd+d5llIeX7v1QecbAy8h(_UMQ{@8H(zyaV3d zzNix^AwQRy8LOVNYF3x_&#Brs+uGk6TRC4}KlgIy0#-w7f*_|c)v0e~X$v(&CC;`br{!1aGxsdiT8#qY23ift(?raBA&Ut?=wO*j z5vu4&QADjX;?}y2MO?srL6KUdwtyR>g0_gF!njb=mk8(&@%wS+-gD3QopaAU*ZH@z z8Tdup^-BPlI&~~yfe&!D0glqDNlgb3pi}N70G!P*rn6X#QVb)^T(y==!MPgJfZ5eX zjL+p^U{a*rsMe(779<5hbHh|Tl~IA~^iv!re3oNIqQ;S`k!aD# z2xO97YBv}SxJ8ZF4a*6$)GkBa;!q}8OssqjD-*(g<*aJ7XrC6eUw z-Y&-JNDFD!kw!$JaCL105I7U@%gdmAFa20@ucv zNCV=&wp8DLEuwz)dbryDYYFR@i&4d3uE+i8v3p(A1i6-dqf2f2h94)Wi8oQB?Q92w z-2)4>r>QRlIh#NZfcikARx}!ADf1pM4W>XDx(hJF4WuFOTlFb70}2bv%K=VvEAFjZB|IbPh7+tEP7*K?vvqEELah==Ja zN?6nVx0he!7g~Hb>y+|!o+Ey>Ej-@Us^3voI@>yK^)!x>_04T$R5rH$UQf9(&p9DDQje z0d@6P?!0-L#U8OgsffNTs!}s!XVq|XT-jF@aCjl31^7gE{gF}eRS>!MC~t1T5nfgNHqE9jCCaDKMV!~7p{axqk-G~8pIWn0gjOoqGdlr ztJq#p4ZXc1ZJoysxjxn&a*Arbl~8K=D9D+zv=qvPJTmy0js+k@Y-v974z(c5^Y9H zX6&lhUo@_mxh;K~`I)a5*|n)C#+J08tS+iOdF=gkv1j1KLuki1&;N?E=B>ya|8M;A Jx8FJ&{s&Xtn1=uW literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/067-ICON_MaxSpeedJerkX.jpg b/buildroot/share/dwin/icons-6/067-ICON_MaxSpeedJerkX.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c316c750b58cbb87b50e938651e249524afb005b GIT binary patch literal 1936 zcmaJ=X;4#F6uvJnfnco?7ExiwmxrJNSzbuMq((~;5R@Qd%IZ`@@{kmh7m`2%S}AVh z0%}=Qa4Qy!b<}|trv`1sWssp_i~E8yf{IuLv9@3p(-#WJ5ApkP=iGD8_nmXkJ=cEA z{s2r4w`kG;h>8jTbnqVbXMiEgQf1@-2vA9PG641mFelw)(u+78osq3n6R9{`MQAw| zrJjSaxg0QOo<*-zW#A?x6Wm_b7#$QBk+#FlL6N}_Q-&A~b7Vyl<*|sAFyM%Q9l}y! zd>#@iWMd&*A&(z~@VHngha1Ylf>~Tl#0?Pz3y~q9WHy63O%x}K7|KQN#OTna%w{v& z9Ly#RD>#@?DCBT?93GEFMzD-II+N1E(iwe+6=b+kWzgtN8bXIS6qTt&mPw3~mHvMP zt$sxIgS{FRD3^acRI7C~U{Ka*io@U6`$1u&B1eyN;&3C8Wl-T{xUYk(7fB7c(nJ^( z1hI0si?Qj1i7=)UdPFL9bZs^=GeM(M6K3PAL5^H5iqaWPN}URil8I4Lg{{%3MWF%# zU&fR2c>+NMhJ}ZP@gx$dOe&G`L&60@LFh17MyRs1xXv`pRlny7#^gH2L8~V-%W#7x z8&^jd2rV*rZINc|T6kmX4RO_D*AhG?mqQlAaXjv*#~yZ(6XY;QMwi@-3_q?TC*DAg zw!Irn7#vujt|z|`WWNj6184*k(xOnvm0bP@Oo2&|3)KObHV9`2=p%5@$!Ho3)0}Bk z+NhI}kdGVodcdFq58weq3_xK(Faxq*0EOf~hoSfX9{?AM6MY;6C=__K*U1^sAu7!k z0N9BJQ)slILkg7!G2CD$XLk?JNp!&ULVdBY3Z9E3HF)wA1^`qljY6e54@E-^iW?Jl zrvfa@gXZa^{1$c2=fzE0Tq7y+E%vhC0prP9C=8eZ=7EPxw(VVJ?GB$3-}YIXAz$6! z8RlJ5{zFprch|m%-+8D>`AwB?F`Rh&5ckg6@!C~>HAmeg{@mC-*=-v1>AeJV@T?Rh zQV|i5aAn7}JPt3e&kk(v{cmim&C_NW^Y}jWkSaQTZfb2*J-oC4$vw7WQ!8Y%J~@@s zFgJm<;PlTBBu*;~KPuU#b$z*Ioqzq>^rtR4Qw_UQSm#Rx#Xc=mW`V>UZd?_dUza@n z_R>PU(ql)`INAJH^h)T+3->>KH+EAh)7-imFtBUju~( z7;fNfVMlUb<9+6xhSOz7pAYPz8*?uknWb+kwt8RbJN3BF+_mhA&YY4~m>{S-*?78F zwWj^Yt~Z?aGFk@Oto{yi)LUYV7Z}lk|Irt*iUC}LDJ=1M7V~lQV)yJpS9x21* z#WB9zFPh$-=*S6t*RZP^C~OP%oO~Tk|H>}{qb$10Xq-qF^tOI& z&1>1$JQ4c})pyyV(2}Gx?^Erlh(!_fga6cQ!wtuR){3fHi^5k|mZg;`8rhJ%1bMt!y>2Tz(Yml8^zQv>J0IHkuMR4@mSv literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/068-ICON_MaxSpeedJerkY.jpg b/buildroot/share/dwin/icons-6/068-ICON_MaxSpeedJerkY.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7cda895033b1fd4aab35285009224d93ad4263b GIT binary patch literal 1938 zcmaJ=X;c$e6n>M*21nGe2rktzs0UFpnS=mIj2H+sp`s8`S*kS42q7esCWDD`tQ#sQ z;9lITSgIV4yPiT(K}Ffrsnc$&d1OF$gcV0bypSLr7A!zQ z#XKy8FBSw(L+6y=Aam@tTsN%$cWp&01_m&#_<&y%PX(LK4Sos8RaDZAayvkQ5I zH4VkYVlm1WpaMY<6%k}xU?w$=AhXTCS3!Z>bXJ3fG!SOQrKr&oS)`0hRr>AW?ZmQ{yS;r=eNMG|SnH6&q8Ac)M~ zF2Zz;TIepojBc=8VE4gAr=l4!%wRF-j1Nxw zLOyLcs{n@$yn#0iaR7}2!5qk04e|k?!SBC6WwG68Om_$Z5aUBPiwPh)gFP4kn8|=? z%w7&eV{klSI+Nw)?K6Z8M*DL8G5H=rgjVP_lmh^r&Y;ohtR5wZL-QOBd(i^Iysr8$pAeoUy;rDcIFx)AHUw(d9o^KNICkvY(wORuFY@W`fI9|S zQP7(FckOSZZ~roPYUBL>E|cY_)5PoQyRMurcw$WIG)iBjUN_rQ<`v8q{Zv+a>e;o* zuan5G&hzG)%4n~(^^?Q&c`wJ_KHvlgE9{D!b$N-o3AB@`!`J663AnlmsVnWssMCPC`9Ky$Nf99`tOH(|=g7uD86$oJy2 z#?wv^^04cyAOknmG{!3%k`-PM=Jj%laHV_7z50rZOHD-=1COt&5B_&iYUX%VV9k1r zHfx&VxNm*yU{7Pl%84t~5%j0kO2hS)c_WiYC@o8NEkDuBT$*h-*EwQUz^*MoShBp> zZ3%msLKQcp?5(nfeWne~ExN!<9p^sOi=NAf<}!D~Q{|UYXvsj72C{ zf?*r0>oc-bObe7HmE1kdko^+=u; zl%n4AO|5T(`_|C;=~Nhcxf4%*R;>^!JXFe#7J-HO^b;&_m-x^zy{Vb#+)(@E*5>DM~9E#Jbr zc)m9KP|K+|Qc2^h_Pgabe$*T({W7Pt{6WP1Ol5vUWSF*Gc93%?WQRv}Qq`5AZO<+c RS06q8d0(<}m++|b*8h}OlsNzZ literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/069-ICON_MaxSpeedJerkZ.jpg b/buildroot/share/dwin/icons-6/069-ICON_MaxSpeedJerkZ.jpg new file mode 100644 index 0000000000000000000000000000000000000000..be450cd460ac69baeb096607fecc8e2f95790a49 GIT binary patch literal 1943 zcmaJ=X;4#F6uwzmL?MU>Q_)ATtdf@m0!d0(Llh*k2<}Ql@`M1%i&-GxQltzzh=a1& zvIvzyYo?%Bpn_CEkrphpidqptL_o(8wY1ven!cbcKg93Ho%7E7zVDoS@45P3{SdGT z)=IYn5E9}FjKK`_V}Qcfh?CL)4iK^QCIIw91UNyhR&ZfhuA+$~XdFTlqcT`4Qosxv z9R@yrT7^iQgs7o7Bwi}#QJ*!pP$8*=M_tbn(uIm3Btg0=U5TtsUlT1(PZDz^R6k$H zN6Xd96f#6Dg0!+^xr(dhQ76s0SZqkcRA`c-PU2Am3{{~G!U!k`RU#0J=H)JCcrqbx z4vpbO=P*52KukKr8>V~13=elYgG=|~dT^i*pkmdOlI`3mzTiVG?2AYJu&LD4R9dPB z4OPa&3=W3_)0r@n>5ehnRcUgyNb4?FIZQe55tUdeRj8$?95OhH;!us6N5wjQzXh3M z+V-PoHH#<|ewr$i84h65R;7+YX8Qf8u_`)EfxuCS3e_mZ2u61>h!xx*B_dLz%4if# zo;t;d1XPWx5>N#c6l6FxHsrisDwm+CDwj!(P{<9DtJEU77zyF?sF({)DwS}(Jp<@` zwl|&0VhI?G-~bLgFqrKT$QIB8Sq$t7rnG!itdSvd^^{gJqh-vgHH?EyfmP-sN@)rr z5hzg^G`VfAbk1J9g6H)6pq0$oi0-k^YTZje_NRu!!z<3%4ImRXt2qYsC zku>YiH09HQz7_J8eV;I3mf| z0ssP;M8K1$G&nqoVo4y9jTTxhvNi_xi>VHbfMd)+lQ<7s3IIeR2~RMZa>7yYmiB~& zM8F8JB2meai;P5j4>O~z7oQ2tcPP;J0W$&)YmGnwexT!fJ9bNWe-5+eLh6N4%g*uN zGfT5dbQ`md-H2Itr1FwU=5dG4L;i7HqWv}xt+VJB^ukthitNtrsslf0w)S@&Pu^=E zX`_n`4T^m0yL|QFyQ=Wvr=#QjyN-6hxvGHr3L)ra&NU}6UrFCvl;k70H@`cg^2wmh z%PkG2|7;-=UzD({&$xQ_E&n?wBX|cnQA6HFE;|vK-F7L5V&mu%`Z5=H;}p7G;k}w) z>UOxgJ~Mxw{i^-%E?Q--4UJ_w8y}Bi-@n*say2f2xYjPWM0Vy?dmg!mF+&_}yC7xjUYTO*J=v z2_FAd@U|Tpef=CqK7We+1pJbyAb%(E4_C)8`e7U3~w3sUJu`F6= z7g|#3RPNkmQHxypoKln=)X?gZWqW<#tZm2Ozbk5ML3C4SY2$(dfIC?vfI?oyaaMwy z;fdFN5sm|~Y{#&$n#QjWjM^rJhY@csJxNxynLZ%>^>bN%qfc1)(7v%nZlzWgW-dQE zT#wO&FTEGG{&i-}KI0dx=mvPF%gDXljk>yWvoc$grk>7_EB^M`lrEdvSYhLu&4)(X zu4IstYuTA$Spn3_$c%!#NVB#!W8W$`=bLudSl6Kf&sF(u&KkUMIfU=IN(R1c;+uAv z9`wdKKRBM^JJyjHzR*SYM0WPu-KUy$JM$VU3N{W_nbT|E6b_rlY)I$i`aQojn5hT# z&-B0=qxbAc>?@i#;eWn2y0f`1NcVhecyg1=d1i69pZOBy?J;v{fB56}vH#jy0=A?U zKXHoC`4_~T5-k%3KKf%crD>&|o2sEY=b+Bo_6z6w;UmZiZIN5E<`M6J?&&`9qgTGF z2o;#tFYF!B^zn+#de;(LDX_{{g3Kn3Dhi literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/070-ICON_MaxSpeedJerkE.jpg b/buildroot/share/dwin/icons-6/070-ICON_MaxSpeedJerkE.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3c926b85651935a5e5f4b0d1fd1d4302349f613b GIT binary patch literal 1934 zcmaJ=X;4#F6u!yJg18J}Q4kA{2QDDw<%JMTAV?sgf`qb-po7woJSD{B#Uwz$k*cLA zVznSGYN-pZRa%R6r&LO*)RnP9l^qmh#t|5)Qelee3$pk_{C?ay_uTV+=iGD8H9sDa1THt}WSuZnkIRjOKAs>p zPINIkl`s;9R6+-bhFZF|3|^9;(kh8egXb7WCKHBh4Mw?Efrm>(2&uwWsgy#09#7)W z=X1G!eqk6U6$^M_9DzTNBbM^{d@+Via3zEyU4v_l6I|sK*LPa3WgIj*GP4BNt1@t9 zn4ZwUW7ig{rmuxFt=>3SIejhIv|N-d2DLoyJC8l#A}7dVPL3|QnH+vxOHRC=9Bp$y zm@_u8Kv_+GA&R*Lj_5T5wL1kE3Qvj6;z3XK#ffa>Dw*dfR z&><>g;*dh6vuq(6gK1~)FxLvW%|qNV@lkHbj1*rd763FFoeDAO<4P13)z%HNqXA58 zPe&Mq4$K(&wu;!f^SB{J?)%KmU=~>ll?AcDa?l;Or!@Igztm|}M?i-@U-`OMEUS^l zm)Ar;^E$gSMo#-Jwy^t87+cS&oncFth*>?|@_4PUqCtb82 zY^Bj&9rT-9;T72IF}Q21bQ2>jow1HldNL;O_nKWS$3>nI!@DW>liKfeYQM?nC%CUx z(LLsd6tYIQdxEs8nrxcx{LioAs$O?TUh65h;TN6soaq!r-yWOXTwES@{7QB35h@bw zi2b5oH|$&+utt6J;JuEfA4~kpd$~@@S07eX`KW_58*;vW6KA;A!b`jQL*otUlLF^| z9ZE_D4moFtMmVK8tf4Mvr17tF*H^#vt32Q2V4d=1OnF_=X_oa)J9*xzIVU3zc}vCK ziE`_tvas9x=VV*~>p8Bg{v+H!dvyAdhXXtMZYwi<+ic0{MjMY&Y{9Wy_(kiMQ>X2; z=SuAsEn3wUJh&@t&4ULNY;QcYOzt;YG{`^J>nc#Si*?Yx!OSW~yUhE>iNeM+EjxeW z8Rr*yU)c7v$Fra@@<{kXTb`pPpPlRbRep(QS*=?hkXXMQ$m_{+iE*zzzH}vI=eD&- zDvO7oQ`i%ZHSGkA^`8)7S6Gn9Ud z^NSmXF16eVdbqZss;;^IX8FMV-u;O=5u3j7DihaL#u8!jgA3fb1-ryDO(Wu`4 z@q_4VhEevzC68~l_NkF$Y0|u?TRzKr4yX<-jOcI6{v_qu=A(~Ba`u)sET|6RyM(r7 z&hBk$`upρCP>=S^xk5 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/071-ICON_StepX.jpg b/buildroot/share/dwin/icons-6/071-ICON_StepX.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1015b82185f1a126f222893c0df32cc2f09b05c GIT binary patch literal 1976 zcmaJ=X;c$e6n@E&kknQUOJq~WfF3t8StKE&krD!m7(_%+P&CV+Lrf;jB(kXI^t4)0 zidH~Tv;wwTMUNtADej6}MXR_Aih@NeqEtO-i%U9*fc_A_AMf0E-~I0W-hKDkZ`zxH zS9k`V0zhQsNWcLfU~dCFwM}o#1PtIpyAuJhH$ljJtJQ)ch?x><4TKI8>IoB)p|v1l zp$GxvLNY8`y%Dp*I&2g2K`BTG(ug#cFl;_PF^j~eWktv7vy6I$K@c(? z9+!b;m@FpDs)aL53(ORnp%gfiqqOaCBLdhNVl^rSp^mEX3{4CiMvxdBB$Nf}#bYF} zTp<+8L<-56(Xd1$mLnoLB9;b<#HdJyN)>Py1avjhkb=glBf4tQJEfrOQt9dG!gQ&S zAm<@sg+hUdB#1;3NJj)xnP#gtBhXCwcV|#zl%B*bR-7=yj*MCzVY4a)w9@xiFj;!i zezI2|1!^>(4>g$_4REHVtg+Y!y`M}>#bsJBBo?Cx8>z?WaDNBcf`*Zp)=H3Z1hJsI zi!t*FD?!aCEO1zuqiezN@C4j!AkwK3PL4){Mw%(B)~v@O)k*=KMTp}DR3r_O%fe-H zNsvq|7Keuht7URkSXh``5~`Aj6`|c+HKDheFtfFrYxuwo?v?8p2a|=atj0)uA!djm z2@~wRHj4MIC8*bYU0g%&T4cR)5n2r5c-)U3yW2%iki+a5U3$|q{Fs@Zc#1k0SlKKy?GI9&D@POTq1T{&!4e*hpht-F)0Yg;&UgA*g-hd!)E)Osuz-6+TP**gA$8-Zj#G#P83yUrAoGMXy z@CRt~(*j)W_25g0L2H6|AOy5jnNjYR_~ai2cQ&^s9-&e;gcRg&sn-)o{$$T&!xgwz!W-BSxsJc?M|+IWgsl6^bp zL1Av`)~wY^$)bs}cRtp(1qYf@JaFAkyrS}YK>vKv@u0C^0nOY=(lc92PTz0HZ`c;> z8vO!36PY-xeRL~}q2AZ82`{>{u+dh&xBkK7q}??O`U?FZKkx6eo-f^Wi@&SPr5^p} zm%m?D+g@*fS$Z`RtvGt+a6;b3D->}ox8JA@wWt2d;oep}TYllRyy@oK`&DP7r^b;; z?#i63p)V7{+bj0n^=TI=GN~Un2JGig&5K`Il{DSGN^@ur>FeL{EQ@5$o3^BUR8h&b zTGib(n^Xnl>w?QZ>XY~#xK9CayHVgXqrPsR&a3D=d)P4J!pWNUm2*QPq=SDJdhOCr zgq6IrKZW~VRh8utrSIy>QfkfzCAY1UCi++!UwzBf?VLV2anB=qDp*(J+H=y@J?yO6 z?i;n=%D;BiXgFMX&J*uAV{4pH`{&nVN2+x`vs>hGxig!lkh=p$`l6g7n4=!bo#1zS zhM(NKx#-TT#Pfda!;IFn=jF-GsSLNy3+w8apRFF0ufNo+*Yn+)F4sNCtS*T!+i{Pz zaOTEWk^b*0J33;YY)wJ=#W95~TT*sd{>eNiwS$e^hs`hEEDpy0i!W~T7LHCB;kkY1 z;2V#l;tzl&X}KN0R;}{LSLj+Q=2Tt!Eut*y?ZNc+-}!fSBiDAWP|P}#x^`3Trl+=x z6FB0u6)lTeR=e0i%bX!k*Uv7Sw*Fad-r$g}JX19u@nZ9Zw!63ey&Chv2PHj;LM91q z#hr@!d#}*aIuGuir0O+q&DONki=E!f2Yv@_9^^$GttlS=T3RV@+!h@@Oc$ybR3F)} yMdf))NtPB5_*ZUuw~L~D`z-z=4hi3%I_E^Jwln5Ud3op9{3kHVRZ~YIMP_JwN literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/072-ICON_StepY.jpg b/buildroot/share/dwin/icons-6/072-ICON_StepY.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9bb3e6e6beb79f8acf54eccfda0bf8ae7c1cfa34 GIT binary patch literal 1979 zcmaJ=X;c$e6n@!*S|Ex->ox`~$dXCI5)z3qB%qN-5d|tmX-GyHA(@cHBp?=-x*Mv3 z8_)`BKt((js3>lSY5@d5#?uJ^*qcajiou{2z_3QoQmC+Ggr&sPuvwvnIV?5| z!bE1RLYayfpk!nLsu41u*PLWRs7lC;50fn9$;2`RvM}8O zn8WAuVKx`$aszNifZn1pD9iyGy=Sk36wxbnsMdgD8pz?ONXCo?ArtTP!x7ZlKHE>; z)kj3R{PR?`+HnEhwt7Ph(%1JbCTJJ4J zr(gz5pMq&2iNtYhp^#5Js!?Gk{e*6fTrQAl^ah1SiO8fvCho#QQI&wrjpXqoczkYf z2#3Ro5Qj!`#ZnGi%H#3^LvWW~trSxl)riK>t5x-D#RF;`%z`cYHsD<%nV8_q>=x6t)@CkB+eWQzS`i39T;1jRIN8A1kICl>$ zP@Te`5W(IERscdDh7#r; zu%7}9I&cGSBmx5v83Yo8U_T930ze}4KYu);(VYf$_xf>`MyFC-aViz>kJig4lE{Ri z!zff5!)-VnFh{s^!aY64i4}*ug1>ZP00N0XB~yvL_5=oTC<%w))M81t{tE1 zabgyGvSP}RO*@!$bQ$BvwXQqPQi|E5yxT5U6&LLsJ!PJ4yLNd(Le%-M<(}Eqz8g&s z*UhMTn`tb>VukLzBC2$E^JlhYMnID9J40Pcj3_P4S|%{OZe4wly~97tYqGJdSj4`0nDNQyE?rAb}*_?=%?Tj#{Y-~%^jxf&BJ3hNM?rF})g^?*5UW z$`_qSV&9f_7S+oH6-kfo?Y|)Z_fF$Ko|20#x)&B^t;u<@q9fh<%DCi3<3n$seSG(G zl!*Il&JBKgq%$u6!Q2)a%u3&^+E#p#8+A2)C2!8wGW7M&4}Rk*mZxsEl`b58&?mp> zs6lF-Uc}hDv3|LiZ0n9_CwgpwYu&sU%Zy67$4Z!Rc*Sv(bpMUcLRxF~-dT}}zMKtE zcGsvimn@dmiLx+tcI%scSv2$G@_mI`TXkr7e+?Rj-8gv4E=+CX6N*6lIYCI>9txPLy<`>e8-=^2wHhaH_Lc0U)`wCaLb;JX$Fn8UE&alngpk+}`mh#beWS@7ng5 z(+3TkL{CIX3-dI2+gj&}qPI2|&#$aDhqbJ?gO*y$t7Gp)&LdC6mb|4##rfr~t&h!l z@}JEwt0bx1FAHsZFilo)NY?~6wkCQS_q@Mb^YYFh?9f-Xlck&U>RKwxS`z=(muG~E z*R7x7_m{uf+Ya&;uR0pj7E^G}n)uV}cRuTKC{-g*Wb!J0(5_dW@md>pEd86%J^A^+ zzZ=!2%`7Z6L@o_}V&aMpT(Pps?4W2{`YkrUscF^3F8=f96%zxq9;+VKUz+N#isxMm yni~G9q&zOL!49a;#x`3uN=43g)+)EexaO|$wy}F$>IS>)s?Ms;QHvYxxBmxO^R0gX literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/073-ICON_StepZ.jpg b/buildroot/share/dwin/icons-6/073-ICON_StepZ.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78dce2a36933d6f986f21027cdb263d23326ec59 GIT binary patch literal 1984 zcmaJ=X;c$e6n@ztfC~{Ys0d>~R5Z&ZK%7Wwk%&eNAfS|`+K>#AU@~Je2oV*i3j(4? zC>A|p6^pHHU2rKBHxS`ySv=x`0xne4qooLP(5lsRf`I%GzaQ`1ci;WKd*6NcnQxoh zf%E(nO*{Z{xffu9k1%%vmMlq?XaW>KC*9EinA>Um1cJaNe7@euQ>w8zl&8XU{1he5 zhj{`%@SB^0D^-ao0mY#!HF_!M`I!qGNTZf=B7GDB1s;GVXcn$Dpy6wSBUEb>Rfw81 z_Y24`MUtY!bts{PQgo~IMoEg4(=RR|ZHt@Ff%-#;L@CGLk`?+&5efxh1{Ct)`EpgT zw-6E|JlI!&2)$=PLIEu13&ea_#1+62fv-e_Km*{A*$nDHF`CcY@E^0Q79yGy^&DrRj6Dh<&Y{ojYcgI2xkZS z_T-M$hC}v4kt6qP=jU- zstz<@I;j8J63vLUhyq8{8{n!(u0=2+mroYMw><8!#~yT%6J#-mMwi?S4L_Kz#M{wPDV3mG=?>U z&KPzw6!Lk)TnSiA;0PRP6c(VeC^Qzud$4d=pwbwWaSn7VYnG!E6L7|}=eavif&G=G9zHe`Sb#zUOuE&OJcUIa2d2O@2Rg&b zpEJ*CiBjk|p1nFh!^7I#0!Gm&WK}d4m<#HH?{+TTw!ibn`L41!;;#Z*#*O1qt@yXa zIezPvvx`KMsU9_mDBC-%13uBQwS8Mt%SD-|fNNiMal_qKlgs%pwMd`XV4oNyH`#fX z<4%k)uU=06%XjxG8dH}^JhOApZ!E=Jn==TPN!F#6SrgmRY4wbR(WA7D)wf^Phc5fU z;C9rm=uLZU`L@IPzxNn_oiXvS)M-s|ICMNnn|Z@#hA7x++WKy9JjUy;o}9VH)V*o% zO>UGUy#>k3?rnM$`Rrg*=8{E8@fWV2i_D9>Zp12c$IjecSJRPW(}wh9Hq_2(Z+`c% z>~ipu2m?PiJEz7Wx8Rzw^S83vGxcL!T^@Q~;m-d~T~K_?PJ2MS^m=dWjyt0>MxUC# zx#rxlhM5cRX8Ta=U#lK@Xaksz6<+kTJdwg88y^p;C!UuLBq`6no| zqju`!#pTOObD{LNE?M;^)7BWdpC* zyrj8;F>~6vJ*|nmlH-EdQm;zg72D_nSy^9$U2xOkQxg+pVa0uN-_s$tmfD2>nPVHM z2njAk5Wh+Ey!$raF!4Ddnw6)|KIHM7AKcovk~p4(H2zF~&+gR*KWlrhum;@aZMB*>*s0=Ona{M`)_$#+Q}^! z3efjedG~7YozdB)@78Oy&GILI=R7|mJ*)q*u#U~mdw0%Gtu4OLTDIYBhT^4rM04Lb z!yoHz73{6s+m&>68WUcf)t=hEgKh?oR!r&o{_9`D3wx^b+*T~&v{q>XpYLnvyx->T z+#~1g2$>YtIAh-9UNcxQC)V|eb~0uAklM?9$y`UG(1N)vG&2 zyU+Ita10)2H^Hgq=^l?MvEfG}L@j1u)#Y|`JI`H-9rns}j9FIlV$rO*UT#~)yG_I2 MtafeM_>=k0|4X^ClK=n! literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/074-ICON_StepE.jpg b/buildroot/share/dwin/icons-6/074-ICON_StepE.jpg new file mode 100644 index 0000000000000000000000000000000000000000..58eaff565032860f0ba11c2cccaa8f965aa5298a GIT binary patch literal 1979 zcmaJ=X;4#F6u#L=5U>Uk!KM0mpdvyx5J)s&ARsA?vRT=R4aq|iNnT8XB#785)e6;4 zQK7aXR%fsUWyT6ql~Jf|LBt}W0)ohnf-A+MfSSHUwjbj6Al07N2JKmk)QJ_b}_igb$s-~bVG#{gjLBrub7IyH~URB0I!8Jd7Fq^Odqm#CR+ z28#(+`{~sZ=@vu>B_NySDn9(IyaI;gGCsUqk+v>UnzlvCmBD_# z&}uzTuT(1$odnV=lT})to)4Ro^Dx`wX2Os;M7M)j_G((7Sp4BorP9;@b6Tw~9GTMl-o)BSgBoFmBU&^?BSo-qClguC3(z1E9jb{$ z(d3CPh9;ppRGWmVp@0BW*L)zCjdGO?P1P7uaJKHue7jpjZ-TnYB)Lk|`FXIRIelNCZ52 z`~*)Rl5FiP$T%vE4&b@=6ekBuw!fo5a@Kj}JSxBua27-okuV;OqvCA|z>!TPSqNY| zI>(YNUC$Wxy;ErBFAZuM@ThZ=*F52JNT?`Ek~X5uG*~iEj*ezzo8-Czouj% z>5s_l%RMm}?d46;Hx$*vn_*?gpPpG;))7A2W_NRkaR1XaxIX*~i`vn~tIeSoV#nA$ zdDVf}UbPpM2sV7;_c4Q>nDdKDk+CB_%sI!~Lt&A7SP^kN@>hmq7PI9~ssziche&UBBQ9&-6QdvcB(9wA-m;HlFui?y^iM7Q}xx^l#~L3h0!* zyehtauD~@u*}2@;vHnJB7(M%BPHok|pz_D0h^Pn~f9Z2|YMQ*n^-4Z17vxjB*R>yl zD6?1rJy)LO7awcVUOy?w1csyE%&*USunK&+xMTTmOS|tG_*T$pSpnR6?eFjh^q{iy z_k%ap2$C1|I~YM@#^pBGw&Jk*@{Er5!Xrg3y}h&ro;&|JOw$_PR_wKYJ5c+2_mX0I zKU_waj=t{CYL}07XSL5y(>LU#zz&c%|^EuJ=JM*qP>&^0=$)_uVHE+&;rxdgr@BR-f CEV7;e literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/075-ICON_Setspeed.jpg b/buildroot/share/dwin/icons-6/075-ICON_Setspeed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94b808f716a24c444918d3919e909e90ee413fb7 GIT binary patch literal 1748 zcmaJ=c~BE)6#v3*E-ncogwf)Hr+%H?MUAryWe~B`~BYW zz0ZHy-w(t_FIfygUS0|ifN}HR0U|@0tz;$O0GJII0O0S3FbBiX8VqxJBvw0BL`ZCu z6Z2YWOeT?HAT!HLTWuu-gA@_VNS7A9*LDg;NV^tYkYSRVXg%Q|b1U7%{K~g1w#pJ4 zZb!4`Aeml`*GW4G#)^2ID_kCpSBnP4HS9SM#!w^(VM?@Ub|5RV&{TlvDK~*+NR(+d zS-Koi;S!lrip$ee5xG>R!lWuprbv^@G*YETfg>Y^vf14BVvX65Gm?w-wCG4v6%`ed z3WbDnFT-Rwj$=|eCYPtNh&0bi7i0CNxjc!Z3I@VsbCWbfQZ6K*Xf2}37%j?H`n&}v zJtq6gS-k)>nf@Q@bOr_xl=U!XV!Ym03VSRoX#z779;(c3BUpH1fJ|%jZo; zU9Oa8%VfrEwNa;28&yhawu+5s7)H4U%2wtiT+ArfKF-aUkQ-PBC(ULy5N@)Zu;;ib zClYL1Lrz?ad_uhuu6^QK6cchWwiqmMxi4JyXo%gQz;SGKS!Znd2^YKZZg#c(cR^%u zVS&A!eL@_6FQ@|{V+OG&2xh+!%!LES<#B_?x;74mq( zh%jMT#H2{pCQS;0Mtn5uN-6kc@qSFg=~WUr#hsfTBO zi~06CRY|Wud%DeOtvUBsenV^@q@d5Qn11L)d|bTbv&$Cs$BSz_SO0W%W>>q0R3sNl6UdmoQ{$pW9_@G@rWL^xG9}-`+d= zrmf|^-m3bemi@a5;~E-?iVXF4v4iiozyrB4YVnzRyl%J3@nCt>pyTqT?Q3E&EHyECW1%v3Q+apaQFL?DrT1DRMeCjU752q@in?xQ?oeD)Z|_)m zvsL%B`GK^7Xj{5-aJr<)dQCj{hiQh0yB)8!4cA}4wxjX;8}nKo4R4bi+gkH=`#zpx zL)Q`CZoKmC&_i2RkteKK8_&85ZvVKJiF+(K^!K`mJA(sQd}-s<`L3RWOyf}P(q7-j phrYAPx2sO|RL`$!zSS}3arKR>S=|qZhpvY_8m>xHZMONZ{0rX)+DOFjB0ZK*E)mky*PxE;Oq=v%{ug(^QwC4?EF zA<$ft$fVI}5Q7pjX|lDL$RuVAi;HmE=4LaX;SfWXm?5!cg%-_(t6>x;Sz&Q|)!wq6{g4o;uCWkBH2t)xwXao#An;uRR#mOQ@a^X8MW27mg(a16e zuuy$En=2Fw*&H65$7A9VOe{}pP@0%p%zIQphF~haT4zwBTF9oTOht1HVg_F6+ZHss zG1+(C)r3H~{QaRCjqL)4Widk>GG6aHg)v2*4q?Y37@DJ3A$YjAjjR(%^@!4d>J=!O zJ$j2V8K?opGEf~PmD+AC82Ttdt%Xq|HhY*Omy05`m_eykA(1jM16N_G)v$=qiIDPx z!+1PCU&7^vOCMsTFuQLYSCKr8PI&B57d}BYb8K|+&DiiGT72U5_-I?7 z0mtEi1#lz&g$UMrpa>AgK*TK~5nu7;El5NX4tycoK%xx8-UjLzY;-)DLLyP@DP+oo zld+KZ8`efZqXIghlL$0Gq!CCog0&fJ2Y^T#|NgjT?_furGF`y<>;wRrOd%2- zC?h9C62*?-Otz=F&|RruI>XybqVg&74M%p&n3aCWfd&Xfyc-gA>PS3+Msy~*kbxJM zL8sW+OO{WMRThM$dP}#*tx*;Fzz2MhgMQY#U>b>lS4g6PP;kZQTI!l7?o_m&Nm_jP zQCL%7ce5q;ZbcrmE_#0qXJCqxgdTUvqqtS}YZKMoZJzT(%NCDgif`4Qms&7g&o&Rz zwU|MElKDhdtJ!hRP^{?s>%}!OSVizv_?N`hgFR_ySRrGJa<%`>qO06wVT?0*8j95d*@SSY%>RVw-OH%*GMks zpAj{ka=Y7uR6BuTFikmp~ro(8?$^@$^*p@6>eFX=|>w^FLISUg5`up zFSiPE3iR?}%SNSN_O<%E_peK)&h$&t1#jN}outuePxpdNm%*S#9aOyZYRxVT^*wlD zz+I$-HTE#FTM1n%-{#c4T=VMG#fOhhc7I&ibuv>JSb%o8e)URldsl*+FLREf;kVq5 zWo7e-VI@&+3rz9RMRGxKSh-L0k42>|>o)GqU#{!jY;>$W=U=_(>-ZJUcK=j$-S)$7 z2^XTyXR4_MYoeM#ZlR~Sgj4eOz&hO@GtVzG=X4y;eDZX~KCJc0%lst)wF76*R;KN3 z`Z8q8hPk|+ypG>F9oJF5=72^cJm_^*B-`ADPZ-LSU H);s?LiaLdi literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/077-ICON_Rectangle.jpg b/buildroot/share/dwin/icons-6/077-ICON_Rectangle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3069eccd504847de5704c53d7e29472b5c07b05f GIT binary patch literal 1142 zcmaJ=O>fgc5M9TK8YEQV8^@J<0YtpE(|oK|QzdpQB4JdON=4jUd)rv4y_UTpZY2Z< zeh_yK^uSNxz{ja~1V6#7-NdO%(|1_S&dz%?J3E_y&o9BlohU^IFHnqZ0iH<0Y9 zH#q|WsB`xl0P;%_jTws#grZb&eR@O`kA^67W27l60$bZz?0OTz;1M|qB2)hR`HKt# z-;@tKj_Sk~83)hL6Y}c(<$-rT@vtv%KZ9GDk%e(cma z($hs3_r{dbbWCGtSw+|S@X=uq`E-^(E;){4jG~mekw-?hDRUJi2z&!~Ep0fohI*%m zHEn0mx78jVwuig@LAPULyx`i@n}#G}3$DN9S}VE5ID|3JY?CB-OZ?r0hOoT05v;BS zuhg4!{nfP$R&o(91{IHc?XedwK0$?9jV|9*!%reU@d+R8{0~?!2Nw7j{0j;BFYplv z6>8k7)%ePnD~L6bgD>?0Vxz=bfo6q*&Z8Tm*jQ`S8`n;%kh_ii0!U4;3D!kH0yRkx xB_aO`Uhu+}zrVDaJkt%=y$3fvK>E*<{{;6%flG@L*an}zy{mtyWZvgL{sEzwA0_|* literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/078-ICON_BLTouch.jpg b/buildroot/share/dwin/icons-6/078-ICON_BLTouch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3234d45aa12f9c909b935e13022bdeec8569220 GIT binary patch literal 2016 zcmaJ=3s6&M7XI@n0^)NC-qWT?7hfyPXNi6(S}#j|(JP z+C^nxP_bHRtD;3*i`!K?j3A0DMR#p<#g3w`HmEDsWw$N5VqL8Ek-b6CcE;_wb7%hl z%=ex1oyQ-(93BJQT)$%(0A_OrhyhP5JONn78e4S$&;XNi&j%np#*kK#q+2VMx_lC= zov6SiHo__OTisGbB9nrwY`@!TtHw#F0T4WZt0k3l8uk_-@ zD_<_Lt*o|b>~Qu1D9f+)JKav4v_gL83YSmo*TK`lwbVJ{mcr09gsj%V`bbu&+)@Y` z2rmvPB`UEEQJ|1oBSBO$4XVh5P#L0@%G6RsE|wu$nMy0yKr;qY*}V2;+9IQACKq+n z!81kG)zwMryUwSuT2 zbugv$Q3+1B#qv1tQ@iDKM(UbI`^X~viHxVBeI)@mE-k`+M2**mQ*hxdnd;pyCyD?m zHCiKKt8wBk(rnbhlt*HB*tM7%lPNHzLTN-*2$HMMkzw*&wLz1kLUJ)wt(fJST|Uz4 zvf;B_#}lsn7r9!47q^mxw}c>8%ucVciXaJJ72$>qhRC!qD80<#vJ-VaQKY>yYH_cl z7Pp(cgcF+XkJj-N4N4SIW2nKTG$O``ehk&9^=gG0)9ckH49$UOxb~;i{)lUo{a>z> z5+jWa_b0=ibx|7>IX+%p>hgH`aTm4mUTU?&w?X{$!UFpc^@M2QQLq-U;^N}s zY#u9t#d|)P%}#zEPL3EXUQ(&_KQ|hi#Y+5DA~z|Co6Mm; zLGt|h$%0IQ01^l?v2-D2=@_aMi^WP*r^7Iv?&o}ccnGj!Kn^f7XfU9&XbcuD{8z9M z&}e``{ZEWZXGGEF&;XtBQ!jM|G-lL1Kx5FE^cZGT)FVa&$6}@;i`jbA>S=(BHp>$? z<#3{Q9TToe8mm}++{OZQI$$#9%wf#tpt0zwh@QRJ%J4Mw9D~tKyCy4+GdTuhI0Ry; ztaKKG1+u||d&bh3lF%{!wg=<)Y}e(hS}jYt!ThP7)!m+sxu?674F`L6-qd`+`F6`I zOOIydUj1{%fxz9o!H4=a+)w30JW;6UU93BmoK)nc`A>8IDV|h_{yrL5k2Z~??u%Wr zmdfb2C7U)RD!;jTYB6!-_XaV4{criZwY~decukDu=gs?b;EYUIeDIDou$_DS(4l{y z+giHida>iz*YZESu*xqW1OF&B{P`7_Tg(M@0{jsJYy05c!f81uXSQ!hcIQJvmPr> zkNS>1R(g3^0r$S@cK?EXHE-yIQ%8w!>Ne<)pty_&ga#F}U$n>yULUOyw+R+fKT6Bi9y z4~f25om4k4N_MO6nld+h1_84MWGw3DF9}U?_>Iq5&-q7_^%uPGLD=`19bDgt?t(@A-dj?tm!MpnRPLTLO z&(&V2j8&j(SncZi<=$+i-UNX`4T37njf~8;n>6LT)+TVyvsDA%OaIWUV zwPfRsgSR^U+iS16%uV-WcZ50({oM1Ko9YKTPRhqC>Q9Wkx#16m{R|oVWKHxIQQIoZ z#a`FOqnQlbWqC-GKey;oYz*{ACuWK&F8N`!y`}A)G~a6p^YlpB`HMS>*eNagbE z!#U-@SySCaD|3ByOkY=9=~sk!G4wv{>pMmF2a1}EuBqiw#k&@bdigDr5!Sr;^aK8f zpX7cURD1sNv2b!p7;x0dsGu=7XKy>eDO*E5fB|FA`i)95;A!}pdkao+JI74vCusY$tW=-6Y_vSiw~5p zx}r)a%bbh|gW|s5$CM!>)Bl8HJ zmNfDm8Z#f|3HTsB(P7qT4TKHOBR1+y3gm~cIuKZ|Qy}ZaYJu9UBJ%aAr556y()28C zsX;5#A&CiayhH9VnvH}_13QcbCac_`K&FDrsdu-TkHAwdHiH6Dy0gOB>eaA{v=FeE zhjF!NtPqyScqk^231eemp#YWe1rk0g;tEi?0F#Sk@H7xAn?<)lo{6VS=b}yuWV)#0 z;$mL0h(}sB@==*g#uo_rLLry(;95&eHjRU8vT|l3;Dl9c(VK00(geFBYVt_CO@UBK ze=5OfR;ynJeq*FH~Ck&a+QV9*hotjNfyjZZ*@LtBdz(Q8CI#>(~`oG>+~iaS!|7Rw|81CVbK>6 zx)cj(gs1u=*S|r7Scu`63dh7aio5koV?`=lsS>8(lGx-VRE11)b#JJBnk)IgTs|d+ z?;h^YhCO4VHpu<@dUdJ8>*Xg*)W%z=)pk7s-ct(;bmyo~2y*p<9f0NK<>l?g_V#86 zvwT>=O9R>Lz@YW0LMl}#e#uw5&H>h3kOb1`5CUi{h|Yps=Rq}q zAPCT***^ea&>H)W&zRYfWhP+&tuME{&WQa8lA-mL)mMDeo9T@wkG6b zk$+WEW*4Wf(`ntlETAW^JeJ7<5ChPe9&={mL4XxTLzV0`nnHxWt*Wl6Q}{Tq%TL9? zU3Y*drH96%vp^zv@f1&vjyAqu+5O=}3Hroy@Lu&=Pi_4N*`4d8-!O@r2fyjh?q2WB zc$qO0by6fNIWcgcp}cS)FriJkebGhHkeC0%_lUhKcD@&{W?fk#yeL_zw9Kue2=NH%68P?#J%DGgSd35j*59B~ z;F2IGo4oQOV|>$*jdb|SvDC)KibiKsL0EI`=!Fye;`Z57?Xq33c4r&++}Qc~k%PBx zoaR1U&|dT7HAP}n&bwQ_?2XXB4Y)zgNk;Ws?2_F0Yo}Dwf6M#s#r)P5kss3iJ4@qr zo8@uH_JhMKTliYj@qv_tKlR;oZuy)4*y4oi;hPq6|NL!Xck0ev0adv@qsAh&8NJiz z0s)nWxcf6l1-sFcs%tWNujuONG28Dy3H!pr7^aVJJ+|4PzpQSjb?0b0B1RHhPQuaa zJ}v0<^gjIT)YeOW9;Sc%cSn9id3w``@r#9Pwf_-3eR<5lJa2yc$#dF*!*_wf6!A&k z?Vib^oZs9Z?V4DXoO&zjopgKnSiIzc{??V~=W(C;-8o#ja^4S_9<6^}920W(lqtNR zIZ#~rzD#_?$0%CS-c-<7_Gx#>au*)h z{eD4(u^)eojepf&?ei!ot`R>|Q_xg)`NzMnG?9i6uZ|{E)~{}*3)q*7wzv6TZD0Q2 zj%4NFeyDCNXf&jr8D;p0;k))sPOxv?`K3ii?+^5z?1jAQUo_7@^A>tM*lrIPSv{7O zGw?MOUK9FV)xV+|a{Sxh4FR`HyPh3yYjw)^8NS};rA94 zd)9fg>iJ(>;Cy%M*sAPRJ|_<7ck`a52Oknb_E&4mw#AO#yYgiL!7XFfeAXH=mG$;)nCtA7X3Q0&H3Q0hz0&-DUOCQW-2r(oRk{|&eizrn= zilD%%l%i5lEXYEoSglsDxD?q{E4m1@KozUB;-i$><)dMGKB^;!E#ik)`^fO7rsVdwNiv6a3fifdI_4UUYl(|rHA*2U{b`LJwcXNct#!?M8%?q3OB%2BHpXY^QD!V^#4-#D6nCf1gYn+|bt0=H&PFK3 z6d77nXNr)D5ZuC0s+B?kix(Is<#V}G4v)1{~GOqekh)58*pby|V2SAtrn#4?TE*7nY^MGfk0 zs50DuY2n%a2-UCQz-5aCVd8L{16yk49~#OPi=`|HpU1~9LIaRFtnxLr&tdV}{|}al zlVMti`^vEAP51^`)fcOaA6_g!s>3(lfUmY?3^>g$EKpv?KOuspALIdO(V|68i^xt+ zBjbai)gbEmlA z50$cH35DuMrNUIIU!WHa7q37Lmrkd1IU-SDph)y88rLnC0b~!vAc90d01+aPAcEx^ za1a0z0hgD506?-K+7cEJX6>(-2}F_&uyqDRB7tDDz;1!vpLYZzAVD_E*fHc#8NxZ} znx0!Cj&juyAu*6n!PuzXj$0s;gQkz_j$!CL|#;<8XSnG_?-EkV+cH??tWZa$T_ zyGW##KJW&KfDB)6rX^lGu!!PAt>>W$Y3vasZj2<3Zm{M0pe54T- zWLD)*u20=xVXo^wDwU@XP%dS+H9^oSQ0@6;h32!Eb;+>>zcgxFiXJ8BOF!X9r`O(? zy87U)_$N^1L;bs3Zts)_J$Lh?O_&_C?T_pJ$yF5`-j~Nl6N^KThk470UU@XruiWQ! zMas6Oq3WzWyAw7$7Y5o!m1bpo#BYC6dUEDy^e#mUub~`N_|zNj2=}i4pzK$9GgExM za_Xw6sh4~`^eIcbg0tz?gibN@k5CgaMD)x>;Ufu%fA0n zx1zRfV7ce;HT$l^bsA4qRG)D|bM4k0(Ma*TP+x08+@81+enUgn-(wP|KKtU{aE@8Z zUHp05=9PX&Z=HI4E>`Tk?{t3l0pA)6_~MxM#}*4n{D|tSt*O7eQE~K2k5FXnZ{Tmf z!;c!iY_flPY{yxLI6+PM&HAr)b#3Yn0S7YyXZ@K<`sl;RG*;KPBAYc2$8LOA@J&g2 zlHf|~=OBOc&u8mHoD6G8&Hewrz9*Jd^iHU%=XOOg{GQt3$n}}<3csyg-djkdqUM!i zpYOv0iv8q{%0goQMR08`(fy|K*7CLPdxIzoy8P;Y>!}NBW_#2k9XnR+CH|}B&{!{j zyDI$qO?yV}H{~b&bp9T8DoXUB=3vEFe>6UQue~Y-DjzHV+rU5eWAFP+pk*JG_SRn{ zxQ}NCaj0?0r?w2P=<$M`)~v)_uHB~mG?7#AgXfYmunc64&f0wL_kUY@6)v~eg+q>OY^e(H<54JBI8N6S1HB&#B`E7K~SjVGa{Mp+!Lb*s OW2~<;O7JlJ{7AP>pCMa7>9*neN_Jt$}oGfLr#6m<_3bx_pVFF|!FGxUJ1wlqz z6sST6kV+|1TeW2oP(cMbt(N7eP(Tor&8dviNyo7rJe|x71?`-}^#12R=l}12zk9#C zyk{M?P66xQFl$l)ATn|z-~hZ3>mz_5%YxH$033kF)I7`LzOz$HH#G z&~j4Q+1d1L4qb2D#b61ALI#t~V6$nM1r5#7nUrRl4)tB}AVW~ts4^$r?2&kQX#owMJue3dILo&wRKBCc`Z((Q|YtO*KOrp zW{Vg#yAf5GQLm*e)kmaRg#(W*k#fX5F;B*l+4u`2VLU0H$>9k2Jg%6}g_g0ZRdQd( zO8zgFfstX@n)|zEuc)vIvK^m~E_Qi7{D=;lcq2C2)&;RqPYOS;v6_V2!J* ztD7sy&5cAR5{P79PZG(~7xM7%^zeZE$-Y#oFWKLp&g3xZ{vjb^v2Fj4;D|(`yNA2i z+O=Mu?%1Mw`uKQKSyZYYmC6dC`C~#05d?8KoFKs}aIx5W6(BeO5+D-9L4X|r2NH1B z9-smMKpZA7{r~{p9>m$bgsHHH->E^s4v({U18|_7o&C#>_Kv^3;Q%|3fTylu#jszs zS7zolD#|$G(%M^)#Ft3=N7qz7n$pxgEj`fe$0gXXpuGdQ;uQxF?5Hg98Zbs#+X!Xm zm3B$GrFaWF#X1H!gP3OmNB}~C{RPyl?T+IC>gtiZNpYF(9$^(7Kcwvt+}l)KoPRF! zq*LMF$FBAYis1t$5Xvzmm$!t?vK4^>MeQ#y=hI zjEp^*k6Twq{lMD|I+oVProX?nH}+?#kGAOFWl!B7 zSEf8PN4)!{=JDQZ||7f)?U~;AJs3cEB^|U!r>k(=l@(ugFJ7Gsfa-bxQ=_^i*N(#&$cxA06A@~S<_uIq5Qw7Gt zImKmldtpT%dDywyb@b-Kab9+)bn(iL{~Wt9G@AVLMxzz@3U+qs8pLrM;)AFgYOd=u zX7=tJ8h$)+z3Y5QMmxSVJ+Br|M&eUk?p}QK^=MZ`Ld!Yc{kQKVO~Y+pBB1x>fv6rM z$?3>YRZBiEy11nRY$dgZlSz0aF z5!O=S60i6~8?jiEcrm~{Q}S$ve5&p2*2)AVXV3iKeEdEgyiF-`#^oOSXb7*(-4uOE zdYULIuRp=NHtY5Hn&t4!R0sN~CckBo^sPGQ3aK{$^}4JxBshoM^mktHqMn~iTAUa@ zS^Q15Ve-fBFk$vHMfp2VntKL+rJeuRnNhEORc~!^D|(!?+i&q{z(|hIELD{lGZ~)a l5F^VjosfC3&^Iz)796JC2 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/082-ICON_NoTips_C.jpg b/buildroot/share/dwin/icons-6/082-ICON_NoTips_C.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b55706060c8bf390c00d7eed531be8a0afee4ccc GIT binary patch literal 2529 zcmaJ>dpMM78-K@`K{<^gDmBJ=?3_%)%w+OegCrdsL$YJ$#hB*M9L%U}>!M8*pGXZY z6&(~g<d46O^#UT#=M36reSVtZ1Q3%D_OG zekg%2`Xu|ez52q@-~a!+^7)zu%*#ro0pRC+|5jKMlqdoT0iZ-E6SG0c-C9Ey(LKc= zODYrx357csy0|4yC>2WLgd()3r>1LEv_mLYz!AzNj`JLUf4Z+gB4r8Kpf8hwfmHBZ zE{E>zMW#_n-_j^d5|c#o@}SX3UR2LDR0`FbMk0HAFL0Scwu}!7qzhcmXRgOrxtej{ zi=fC%P|QsLIo@I+A3a|-o%{7%T)(RKk<0mdF4V7b2~aWw&EM=CSDAUwt5sWoF7<#(+E8wn7R*01++c^4(;ID&ged|=pgm< z7A?}#)Bh`Aa5x;HjnG3P^$Zs4EjBPRgkWSe@AUDb|H1kz?~|o&1W>ww9l(LZP=FQ+ z21miv%|H_L&fzfF=N|w7Xd`tHTCflJ;vA;Q*H}{r46cQQAwF>6+Au8y51(;<*j8o9qLLdG z5xqRqx%)XT<@Nfn%IXb{S-oaYjT8CPQCIIz_lC;Hawj@}#wH!EtVq5(J*#MQ&-x{O zc3GkF~i3`d)#!)j&Yr5^GY#Bv`vo(DxQV^ zc=TP=nKzw2D!7ZHPYiW-_&ZY8%)^OR*(iNNIX`9yXm(W8W~; z`zKaWv1{3C`KFhxJ5{mkWVh1gbMAGr{BCZ_GxD@V`B=3IzBc!E5l3XWHSCW^CyaT? z#y4BOt2R$7ci7Z(SyuR@z`N$|_R)qu3qLgw-lPUz?#`Mj5YCRQ3ay^nG!|qVPbOlC zc6XN;e=9N$Pa8ioT)j% z9X6{d8QROaoI0ReP=9{;Ge?1{HTXs65au@z%$<(Bt9~|j4C zqu)9kkbIEu!V6bfB-xiHHiYBWEvt(EF7LrwB3!Y*M@bbXT^V^Yk?rPD?{;cO$6!9GlcVgugs=Et~6+iWy4nBDIUnOBj@xIn&=%yIp}-+EA)}CD>oRv z+nj0?A{xQfO-zrz$Ppx5U00ODGbnW!^^Cn=eBz!{aeVpew?{TdQLvPIS-KT0zxME| zr?l(sAKJ#Uk^mbX{Pkb_0skAeDn%*#owAQ77hQXH1{pH-mqrYP<%nm#_dVL?-+?L)f z%e=uO#U0$Qw7nf;@0#0qG>$HTCn_2gY`--b9uy*A|Zm*Nr z7gX2$6LVQ>%jP?+Lsh>H=9qT$4C4atUOMk~COH%DdoJmshf0;-nH_Z8rMKIhZGJl5 r>ak3z%vWKo%hW*Fl(_i6x;fKDdtMA|ZSee|pK1tSSUxo0N!{~5yK2uq literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/083-ICON_NoTips_E.jpg b/buildroot/share/dwin/icons-6/083-ICON_NoTips_E.jpg new file mode 100644 index 0000000000000000000000000000000000000000..470b88a52664651c164450d16c27578f02b23703 GIT binary patch literal 2784 zcmaJ>2{@G78~?^Eb{a~O7=y?%i($r0$sJ}CHCeKilri&RXl9rhj3PI!NJOMXi#FLC zrQ2T09wk{qxhd5x)aakfE#`jQmfQ2({_k_1?>p}~@9+06=RHT!t#}6LGo`#R0C0D= z0#tzSq8I|uj95-o0ssRL(6Sc*D4xOb5fVu>4UZRyacr(I6vT0ae7uw$jVIy=cwmXM zG@8wc0wtJGFq|iF!oItD6N}+-ov;B8ECMUq6^!65-y{N8Z(8Nc*%Za0at95I#wJONi2FJ3f*VXqlAs{jiDE*ypil+Z9Z z8m71lBt!RH2@Zq7zCQs7BuohfS5|=*r{((w0GkeZ763!Q5K1sO5`fQa!eL5K3IJM1 zclI1Ttf?~5u4Ws3S&7+T4Ms6+RTdC$HL-`6Hr^Z*(Vi4q!)2AqKx z7vC=RdY}pXFm#d|C;RJN3Xn(5$yK_wAB<^BdWJH}H~v-{bvN?)jige?ZFmR&T-jl7 zlObtWT!~=~@ffeRsXCLdxxDemG`Xzz?WCT0(S=9M9$oy0 ze}!4(JDIib)6}(1VcPV4%#}$XCxEybM=v*j5^S@jL#>eh*OZH=#j)t|kD~s=ag&WD zmPd?3Hff|;ao$=RTuwVE(u~2q`GYf7rDkCam}(w5mO?2?O$`ep|q5{y7PGe znf(5xZDLdY#fSGTNe1oLIkVxqM{7=o7CaF!;_hIFs}@|`ze>9@7R6{vrNZSU`<}ng zqp@x#NvdzF-P2z&zuG4i(fX`Wy}q%r@f7Fq6{q5JuG{+b`Fbwz>HF^q2IU)H)|QoK z_dJfIlEPuxg-rDaL9@=n0=+eh%QqW#U7S|2!`nzJox;a?>Ri>StB`+kx8GOP60@W;Cepebq2adk3h556?S0*{ zu7*rvnr=}m-uy|Z-)NS1NJrK7NjgctQEm}-x!_}?NnhI;N~Ydxae<+Awn28U-o8!0 zsI|yH7k2+OksU~ivES=)Ds;|Bq`|GS{Z$+4#3rHha)Zmk-1gvImW{-7?8}^1sYf)(7Qmq@S1f&=PL)JDA+SnbxF=(5f_ z&^KX6(nrMV>Zys2NVdn}0PL78;q)&>W@M9&*Idc2*`<42r8%HiWx!y3<(-tZ16dE9 zNa?1twpszQrfY?MElFZKv3(BMe!;{VOMQQvfl=WUJM{Z`kwBC&_?Xu(icT(`#E$P3uSWfQnjHG6j}i{;im;ys2> zcG9&TKK1pxs+viW@3l=04Y0_6l)A?JqJ&wX3YK(K=Ev<##Fh`wcgJL8oz!i0>o%?C zbRR^G7&)YX(wqvD^hIILpk{WI&B>;@WtVQ&8TKsyFfebxxmR<0Vano$g)%y2eZ6}~ zZ)j*)?9{AhTrXvH`C!7kUuk{G@-xZWx6GE!l>FGB2X z6osPS7t`^`HC`(7~w|s zqiL1AC$gNi1ovD!?guT##Hzd)#tsB14y;}Nu?>#09Gf3_Y$Lj^rGpZDNmP>S7wYBz zBBPjo+}^T>JqzEzb#3XE{__+^hClgT;jIyG4f*Q^tx0~emp pc=2cPP-mgV>)okE`%#09uckalrfA1APN05`_;KXS?95g?{u}4~Lf-%Y literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/084-ICON_Continue_C.jpg b/buildroot/share/dwin/icons-6/084-ICON_Continue_C.jpg new file mode 100644 index 0000000000000000000000000000000000000000..718fd59591a4c8890ad43e90517cea7615906c2a GIT binary patch literal 3376 zcmaJ>2|SeB8~(;%?E97*##oA&)zVDEgt69SNz6pHnZcx48Y3E8TwQf5kwVTzq=bZ0-p7%NLdC#}{boDi$W*fl>1OP`z zLqH7pZmSc3JTZ(Kau@&s!h&TN09btuMg;SC92^3{3WfXA*a37nmCZy%_;U~_I1&Ni z2@xEBY6zVN4WI`xSQfAkwe>J4gJuEqG$kQP92;zF;vy_y>*P4Wcx@R0gRZ;qLM&ibYf+(Ok_*&^&80(4;bz8ElnEMY zj)kMlkXW>d5fqI?nIn+q2o%N`iNYbxa2PD~i@^lZxU@i=8`17dEWykI_GMGy;o7JCvm9zVGbSPMh|6&ajA5HyUrSzgR|k% z{dsJzJDYvrYZhIC**tb=Fq;Flv02O7R_JC=28+fH4>efFkVrU3Rw&P(MWs6uEnor` zID!1SRS<61f&b@IYHpp|IGw?K|&BwF*!g8y!L>= zLXh>(LST@v2p}r2ps1t`gXk!uto*z6&Z&3^;s|6533Q7}uCsuIc%b8!R#(=d>nt~PPvJ@vdZcJAO!{qRD$IJ0x)@NzGkU#m%)$Q9=?WJ z7VbTD*8_-torlx=)OXXrYK2;5lQ~X(c4cu%+Flkhg?}v`kDN)0p|qZb3c(yN;5M&J zcafx-oLZO8mIF;C&^t#q@q`|RJyzPW9km51)m`P8^MOw8arMoiWBIJSMFnG*2ZqHH z5|z;_mI?U|^B>FHOApE^@f|nvmGRN9Oq|9nyUKvSJ_zlMD)dcRB$cLvq2=4F1|gdR z+2NO3M2D;@vfO>*VN*f=Px$PUw0AeA<(;gZOeS~!p&h8FA~}>9#_B)NkigGts^r?d zd%5LI+i1ad-50U;6SvN3X-LyQK74+@G_Y-~L&@tjTDjD%@Z+J9Ona-g5n0XWg07Rs@f%As;YPBj;_|}`CezmnN9?nMm^Q?m~AjC z*C_G1`QG?jg5>^yJ-5BA2Yn`cDZc27KGpYR?r3f)Yc~{6P*K`}uW3(gAa+j8zG>Ro zSbO3cFcgxZ>NOC%qhYs}Uvo0n#{(_5!%HvW=(4QB7Eh;=XMx9SM&682J?Xb4=R-8E zqU8BExlTnPo2;G3#`hy+OxkWdy=pO}iV1v+Hnd*MXb^59XQfy`9P1xm`|~r)=tg>s z^WcyIh1iySF@GDsq`N4uD9KiR!&K29xoqEENrBAg?Hk574pdF`)8~9>r8&!Y;#~;S z9Rvp|ExI{oVlGXI)HbXGwIW& zMF;erCQiZPcjfHCYJ}WmX>Am=c_|=15(1HO{7$7F^MS1zN%hN-}4=J zPX@J6!hdUdD}QsbY}v`BJdWY#=$b5|>2{;@Q%`RFlUiB#R*k`!PX13+ts6u0bK{g8 z$~gnWo-=hud(KL)0=8X256RUoH`P?NtRQ1p$?a&0l!DomR35iwrr3VpwVsfVc;l(u)9fwfZcoOelTK-jOJBwA zNUct^sJ>1(wy!5YI6c2DA2}!%c@04p$Bop*~3H_NLrDd2rbq zi!$((Dpu8D_Rq&hW1rQ-n9s$lJq`_2ULNblox{UFnzyWEy%7o1xL{WkTKIJPA^cIj zu_u*_a0Etz;2D_EmU40-W7hnzPdTkg=;$mtEBo@Ylg`INotrC)nlg^?MKNcjuVHI` zvTH}y)5aFOF`4`-HOnrSJrB}cR1w2lJhlNRsA;e9u8g8!>7(7cU}u6%j@4-m9ei6 zQ#DoPwdclt8?zVAmuj=S!=4&d` zH_d=zSaR!l$+;}GA>qc3r517*_Q~dj75@ECPcXQ2(x<_-h6A?L! z!5}jJJ>fm&=&YJ}DkTy!iO~7P4SGZ6I;tM~z4SxxwbxVLC!Lf`@|n*_ec{JWkW zZ(|lt)LhtlQ{qvIE z1yMAl+TzqDF4T7FmBSf88~_Nlx>iV+(5B?2^{rAZB|crf-OkW+zY^0q{PY?Hih=3t z7rZ?ClzF%K(%v?=`=Xk!j55;f>$f44ZA1fhfcidB9Y4lRJgK2gotH6higQ)F2l&p1 zYoWZr6=!t8MdRK3{0w#lqYN(}NFytCUCokRsT#JP@OBgG>NSo-dF{0l)RwkiBav>Q&7YpE%ouv8PAf6k_ks(I3GgUb?V6Qu5GW?Fot1XE~I)w@aO|KD*xc$M?;dIq!SU%$%8#_sd5BU599PC;+&) ztOwx0H^?Ueq`jEIi2*OrLB->FLL8mR4`JaLd@eqk9)Ty~2zX$V zb#w%s!C{F|A*?-Yo)!94eG?kRW?G^B$nFI92pVfI+c{Ri+8XPzjSuj-{}y(4Qw26%~bx z+JNH=_TY&W3I$If;YlQ{!UHRe;fd(cSe_8`MZumWWC++1A~v6gT2Q2i@Wmo4v?9|_ zQ{YB?mHpSX`irBx`~P?4au*h0QC2AOVSUT@UxkI+Vj@_0AC{0W7BE-}cgzAgf=Uyx z=pw#g8=oKkWfi^l@@Pr~dkHK=Ww?Zpa zaBMb{N+4Je?96FIvOUp(NOZ8JknPOu9BggvC=`c;s}A{4}n7f_$wfa76hvJLZC3{0$@t8MJOpL zE5ntQl@JIO6$C=oC zV2EM}Kx!>jT18x@?2Wc1(UUQXAYc##3{?U_Kgol@01~oF3rh61r7wl;OGA_Fe3D<6 z^@QA@Et3xdY7j*xNC*4M^2(Q9(juS$Io*|-EdkBKgdEQtEJQGz4t|7 z_%db<*`zB!dftYyYBD$pdHq0JJ2&Z4MrPHqpEEE;zPTjp;s%GweGT~u#51_>)@aIZsYg;y*7tm(QH2w_o!|wcW&PV<8mt^aA5^iqQuhmOKT5I4}U8b;le$c+T{cS0Hf}C1~GaV=$ zZ(CkAwAVRutGznDLCd81e*Z7A%d``!ciE6sZ}__D=Hf>SbDR1yES9`MF&IU9ga(*2 zS3TPzN3Nw0znk_o~RBR`Bvl{T#=QSDWp|9dhk*B&+CfJQKac z3=5?!&E3#yHP^uk(;1jzg(uypIw>Zlh5(z@a6HJq&QiK&oD z87!qU2q7~r9@y#g7+*t4#C+grPt>}E`mQbh&9i^y+|iqv&v6)Pro&Uw%HX!V1nnB9 zw*Kiq))$oM9T|Jt(HvXU+93%x;FeUD=PVf;6tDEROqnuz(MT&S;fzMl^+i^SHq&x{ zZM>3*uHj0${k;kg@-C+2Q^M_5%n>b z4e$4+;CroC?wZAD1f-krSVj#lJth0ccT_#z{XseCY^L8SyBwpkgL{s&mVU@j`wx6< z4D)hpp7gD{6JwnGqTl7o^mP7Q0xZl4Ak1Iyc$zh{ zPnXH$z`FVN%DZ6 z>s1X}GZOCV#hG;WNk4?*B{%Q<9#=ncZQ@mzUTtlK-{rjDYOn1-Iu%!p!YDaznW#)l zTo**Tb;kmB6>HFMp1jl-`|M%-8dvzCcAt*%^0d?N%%d0TkK{J3!5ggbf?P&LU5FkY zX&WWRQS|)Zp?Xdk8W_-@hqMpYM(RaQHZ;zrH)py>#@PvJQQ$gI5W2&{8WA71_ zSe50pk=|#U5-0DzG_3EMskbN`nhm;rcQ)JE)+yOQ-OG(w>}a27p^{u+l6mR?(e+6I zraVbE_ua|;Z~OLz-FrdFmZ_*kMjmip0bKZ1mN$LQG@!dW`~A!e8SB?}WspK1O6Ub& z3RF2ZRkG8iLM3qdiVENlXX~pislC}w8gQdS`dL&lCQ#PNoqANGVql_qF}biCX}_d7 z1ujJ+!ZHIos#qSs*u+e!sxQ5|C1wy&?6q&*pZgJIBgCGw8FOwDs^MB1SowaRWOO5b z1Ls(P%x!5*4yo+mmfa7A#9y8JP~tJ9I2G=o|~HIt~(Oh*vRPUjdjaF&oCKXlFs0Poa|(q UvWC^W#p(Zi3O~P(iSmK}0pVrKTL1t6 literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/086-ICON_Cancel_C.jpg b/buildroot/share/dwin/icons-6/086-ICON_Cancel_C.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af203f5081076fe7cbcdf4a51946d77665a47814 GIT binary patch literal 1988 zcmaJ>c~BEq7=N2h0>O9$q$(a=7OHaPf&j@7nLr3q4JtyxD%Fr(C4^){vM~Y2w%&*$ zqoXJuSWzm62a2Mo2;x=hQLS=TQAQDOlwz&U*mQ${I+gzZ*nQvI@AvzT_r0|>+1kL! z2&-m308vriz!7|a?J3~M&1!8rfB>D^o(_Pm4dx}2q(Q>t=}lY}MkL`}HKF5KRR*4b z%jbcRP^&?u*5V|RgfGzOrD*5LY8266QZ!zqF5_9zTdD@b}{jB>X^$zZmHSN<}kb^CdBIMQ<$1lA^suSu7T=#h*(U z7w`mPv6#mf@`OS^%EQl;t|wJiKfTGLPeG2G)JBbg)DU{auBb{P%%l{hGJRiy&d@LW z*lIA6f$hXwa><%HU-!}Vkz7yG~sACPMw2c3b6EXR$Sg*c`# z5;~-(Y>8&zT*L$F^>VR+bCC_m z(lf9CtD&wCWcvdw2ef{`)C#6kPngc2+reNmdcb5lI5;{uFj*`oCl-tSDIgez8FU7V z$z%;4#2Pes=nx7+hxR!2zS!@rPkH^8tp;!$!FYhd5C_mW5X^yW=fENWL4XEBAN~M< z&UB!`jtuBMKKcOJGad#YI?bL8&Efqg7^2Y`fXQ)oaj0E39F@De`^$tLN55DY#IZ}; zi|yBdI5c->8T>+!CJeK+05%nu#(_B?6r3w>c%y)!A8Y3EN3xkPv}9V#qSo!+sqWNH zYW9SScOJwpay`yEa%J1WgvPU?A^S_mpLef0OfO)@bhm_=5*llLSeJrRijJF3)Q`%p zID25L^5=A8^~=kN$rX2UyQ23eI-gunUB7hJnJR2)UE_Ur%$OIll6=7{_FZqog1vOb zE1#|1Df(meIlf6swq*Zi{AOTcZeX=VhL10bIqjKOkB6`(zL{ltZe(`W>C9`-<`_fLTF#3z8;kR9 zeg(Dejto)m$klx5ea#Gx9?m&<+XXAgajz|I8pP7>2$(955X#fmwTZ4iei#{AJiE4X zpRsgw(S_fq)Q;J=h3)kHjn?kAnJTJFu>MiTp}?VTM0?(z)X|CFsc+AYMGNMo$cC?< zH&-%s^*8=V^jbtQW>@icxmvzr)Hp@Zo62YDmRFabSi71Qm!Ijnldo96L788EpV{eF zuFCgnRv&7Jt}u_C&?#8%d2Cj3CN!em2OSr@bnm-Ue`ni3eAl0+i)e1Hw-X9k8>bv- znl*dU^zD?f z*}#dqt6SfN{PSB&*_<0pn6~rC>#E?`rf_OpHoi!TihR90yK_-oNnDD#AnoGA=i+yv zDls5QLownF= zw65Z>xf@pKO_60g=Z^CXzNDhDAKJh;HmBjjDD>-f3Fl-NT->r=R;H(f=6BR@X0>)q zT$?V;LFd#(?hI6|M#(qSIh*nxhi%-GQJVj{>emi&{HC~eLvDNHCN`51s_D!y6ql|1 K&$aNeHUA4eW4Lwz literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/087-ICON_Cancel_E.jpg b/buildroot/share/dwin/icons-6/087-ICON_Cancel_E.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db1642e00c59e0ab5044af1d86adaffcc0062ac9 GIT binary patch literal 2170 zcmaJ>c~}z%7N5z4gdm84)}m-OCMyDkBojHm0AwDwAEF&mNno>yWNtVghTta?E7Qpz4yJ}?;Z2r zID4FTfPgrgZan}EW}J#AzGbY%ou7p$Dr#pVn!NI#*rCfkxbp&8;r<18xrN} z4OwcTh7q-dzSt(Rp#~H&E9o{gTW=EC#0)pN2-jV1HiPaCF=vSx(XOoYbXhVz7BeDr z9*ZBYh8J?_0wD|LbA;T5VRSAB7O*)2HXISofkhm?C_+dd7Y3fqs97&sA&DQ)gV#H2Rr3}zjsr@I)HD$HUQ zGw@2sT0jkxw0}6OR{~|S{~wB?t^v4dP39HI%Xl_yS>M44229z)CQ+1x57c39RNN7M>F8S_jmC zXOakcq6{rP6sgEy|93$6+a=+*$-?52$KTg8brjO5YdC^5)YDxTSz1_*^^8rQ7B$s z6pHt61%x2TgXlpaktjaXDARm=r{m)5>kb-!d5>AY#Z6kyR)FdW1OXZdqyhvg2vI?2 z8;}oxWAgGBK=gn}Ao+K00CW{R0|1Ex5F&UGA`Xzppv-R z@@=L-WI4QM=36t+(2p}0)H5ladqV9`?i8#_88$LMJYuWhHtoB0%_#IAk!KVEzju)t z3BKEcB*u!R6@sWD;hfz~^`DnrZ~}*lXf^9=3ywFUqVw~c^PZR4L#;`fzXTU1Ri)qR z^gF$0?#8o6_SWUJ&uM7)d%)_Lc{wOG!K=`JXk(|bSMFlGA`=f4PAN!>Y(275oxKC-!?+;PLEZtJgVtV&w&Lv!eRQ5#qXD{7yo z!q22HOrZ^1Lypy~!_aB0w0f>2r$Tyl-jMmjVEX**I-4(EYCFGX2;X&``>r}T6?0a zxb9uq2pOy0*|N6Jk!;_jrOiJ*{GVqZ9OFrP7Y^rEz4&>1SWmY3y{9#eDr>-vVYOv- zX{2`f`=^gu(H2E7Z)z3?({8hiZ^$z&;%;1H1mquD`mb`%J{IQK7@VbrFPpZNGe%_&R?^ z>pES>t=n10*J_U_dIzf{(EiHH`?E{@=8#V|7fy*_VDL!M;{kHuL-|?^ZUlbTLx3Phw?lN z_6}*k4q3EuqtA~I|GC$HU!_Vqa|pA@9Q|LRFgc@9zj}JR!f)gv;dWp4Fz1Z#pK|tB zs(7?=W_5++U&WyX_R>RT*1nNdRs2+||NVCd`edh?svn#}50+Q{y%GtW9Tehi6+0fP iXLsH&@GL1EPLLL%CmL5JzjC%?XY9J?vAs@n_Wlpn)e)@# literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/088-ICON_Confirm_C.jpg b/buildroot/share/dwin/icons-6/088-ICON_Confirm_C.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f441efb82cbd36c3b0d03b7d8e01d0ae32985ee GIT binary patch literal 2471 zcmaJ>d010d7Jn}r39|GFrGgb=pvWTG!;%u#5Cx6HDog!Zvpgg~7Lou7bV?CK5IPD) zWJGb?s)+0`2pJVEBLXUF6(WcoJ}DLvtrgMMYUTw&@%w7eA20WuoZs*K&b{YegWfO( zEDO;{5&~pwie>Pd3AcIBz7Rno^v|j^y&@Yat$oG~ZNa zW+pk4L6$4GP-s3rJ`^gQLZ^Em86GOFOfArO$W)FC3|v?xQc4tRiCjiBG75z9bTx;B zD1F_6RPl!PPxoq3BA@@)sZyzN1LkN|>PYyl-ajQ)MQar>B@$N2)0H9^Nq01Y73^Ro zEKtjp(Qg_q5gf|pkPsHK zL?UMMLcDoYZx)NirEzJrkiZ}=jp-di3-M+Ic~QN2+yyLGE=rfeGW7yh{1)r^UaWB( zqza@m7gkC#U@=cAmlEgNW=r0$h4Eg#d93*TTA1&}QV=l|W`5&{_-n+Oro}mkX@PIQQMuQN5f#ZIw!=){^h{i6msIZ_{eDq1pW0D7Y!$(=oMMKR}x zT?(xmW5=x>%Z}bJL{HFTZh6Ivsz#t9JKbK3gKezjn>+N1jLRoyzxtzjedsjm>V=rA zw+W~{RbRIAw%y2Ue;IXlD7i}h#i8lhOm^iDQ_m8VQx(-!Ueh%LdcU@tBQC-eJAJjJ zcIp7Wa5mfY+|aa6H!kV(?Cl@@mtDm14JX%49ZqP_ZGX(`dfxQYGoqsvRMPrgAl+*; zt~+n}VVjxXtDmee&zinoaDO1_+S9(+`uL&yqb&x2U!tnrSPK`pAFMw`MR~;-05OAc z@9y0z@rggiGw@v(8<{flaA|Lf&aaO?X4?#xfThI{iGT7{W&f{BI31Jy&DREB4NUzz zX^&NXY}A=0AdbrYF0A!S+bP#w1p(WeNtS~hWV8k6RfL0|tADV={ofT6>G4(n=xJlD zvY9~ng0_Se4kNWmGk;GYpC6f#CeMB*4S5thF_~fWv>nFrYSLHj&j`DiZ^{c*Inrr< zeoeN5_Dc*=$%TCO!5^icv<~>viIr=+OOM*rhczuex@QSLH*-wu8i$(Lr+EV%qocE1 zBk%o^(bl?mifuEf-(fSY-My>65m2ui_Dx*B!J0ksJ{XSTSi3d+gmO?AEV-(>+SbyMqPFuSmhq@;CZ{vL;BdhLqdE}Nu8E6ZeJ0k zeBNyyXKT_to1$|$7M1eC{q)*YcF*T42CF;6My;x{>{e^aTN)#`2fr+nP85#wB7D!Z zk2*Uw9oad_R-EX3c=`${$Tlq` zgavg3STe~ZU|r88%bo4}^cRY&*LSee5BN2>F1k_?%9*%hvbvs|Ee+Yylwp%TcfE4k zDgkhj8g*o&y&Yt>6uYZ@X;*=nE>&wkR_h<`ZNJ|pW8~Dmk+!m#jumFd#Xe!VN8Iq3 zXl%tdRh@0Iyyn}Hd}sYvouoG2{x!pWPTrV2XDuqYNGt576-Vse0hizWA%cInA-4WjlZwmA zjj7srx#E)&&8+~B@d4INRN{H!*AM|JESd4Fd{|zXo%hjk!MXA+oex*{fX>T$%hv+S zi+$1}libvs`%he+ot)TkIk2X{?*ZyE=X2+ox^~>7CX0R`yas|3b(f0^G#Kw(mY`i{H2$ H!>#`VsArrs literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/089-ICON_Confirm_E.jpg b/buildroot/share/dwin/icons-6/089-ICON_Confirm_E.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f424b67ea7c0860166632aadb36ece5ddb943fa GIT binary patch literal 2841 zcmaJ?X;_oj68=IGLf9h|i7bYIYz^616AcK2R0;@<6eOr6n-H>+ge6d1kXiy-1rgj8 zuM1KT5upNtilQQTsagR86;!s8qQn+aP;&#WeV%&f$M>C?Gw(Yy=gc`r+pB#DSchcr z)&oFjs5@W)d=%}U0D_vz<|_aY0MVJF06_Z?j7yTsC1e~aVY3m?+AQ^B$%7TTahW{uF6~)&CcYrNgQ;5 zKWbS9IYTHBa^*}^hEO1qkuxahd2+IDJZHwCQS&ZxJ_Q{(7ZtTSA_^5OmU2grOb3ary!Q=u*~$Ky_)qB?kcrJqIv^upsaoCOTzvArV?ex40bSIC;C( z(^9JfjKR8y2rvQ&0A@wm!VTYsqnQ>4d#J6>2)r`)qXO7YJ0GXM-d~dS0@1(F7PDj< z+q&JH(XB_jhFlI%_jVeG52aVreoGGvNnB_(5^-77E6oNTh5ib-haUODi_S2-H*%r- z!FW0|p>g3G#k%-~PEHBbgS*`^cvn3w;0@2~q!NQ7vIlF6MPY(6*B8HxMfP;$H|*7% zsS$sV3mQyYx(0D`7s92zufQ+!%jVF|$rFzj4IG{VLkb@MrLpL`##jK$AK5Pj-N2m5 zGBgUX!5%?E@5F>#9~#hH?HV1m`O(X2D7lTn0r#Ia2d*EgF6wB(Ne{NIi>gaxr`<8bQLjvzguCG(V*85;C+nP^Ai`KjRvdl$8jZ)5(3w#?PM%8L3wukTr$3Z<#O)a%&N6mxeyUnAx-x%pUhBYa!Gj$dabBTU9z?Uu7Cff-a>{rAt=4)* zB(Gn9>AB1M1*giK>L#Shr%y%ISTdtWE2gei<)Y92u)KOeO5;sH#vQ4$+_qD4R!agb<8C8 z^km<-J+YTw|5tR8#)Z9ZxW+Vp0NvcCGG6$FwS9I*-D8H*ED7YgqlVwDQ&Z<+($! z;k<+uCJvO#jb}CpNFL9`{oQfT_wSp&6<_eCVG5`gP(zi@)puiuqxY23V4{wMNxt6} zxCO%Xlub&5O-jkuKea&DjJj+szjTzPScqZ-FY2)WZoGWl&n~c>WtUtzySRpzjluje zJ!|*v?4h;^U(ply`>g7Qn$y1`6%X$nPtVT{*mEYuBMhBFfY1=kD{+#$ zS4#JdUKu7YDRTr zRaN)yNMU!>DmQwxp?TNokQ2$hR#TVrlY@U{*+M8?wVDNn^2_-`+eSHbp1P?+k8rEBx)!MGI?(Znoos zhXS80kNQbt#a;{L-3m&B9 z@QZD~&TP)@{ey71xOBpkOO zOlhIp=?C35{?ypX4Epy6o-^K@%>+puADh=%UsY09vZgPFp+1&)CZ(5WSHy0;eJf|z-t@%Ec*=-^kn{Se3m$XHU=vJq kaGBM!&Spmvvh;9c%XqV*yTz@@z5SDy903PojV)6xHNq%JOPzLEh=w2s6XaE62M3|bu zjYF^@6gq{(!ox!-fm9|o1cz7>$BOHV-6#Zn3Bn4%Au6#1Z7y*OhxoQA zHk+-@*3+gjd{Jl&27}VkMd|8li4j^%4wZ!u(V{Yu%L*1GCV@ewv&b|md{GhaO$%b- z5MociE`dV-F8i;s`Ww*R{(nO$l*Irn$ue1vq#yqNt1#1vLnomeNlaQ0gFq6)k&9$H z)|^4YvuF$_8ZB@+iu?R%EE>~~Mu(f5FGg)AT+@|ICDPc;ElV7Gd#nwW$-+|!BpVAH zLad@qCKIs+yLam7nHlKnVK9bhw56GuzK)@V+0NZoR%ncYm6^pd*Mdd}qL8SpWiIgt zSMR6X#dM(1#WP!w8026Q(TYK%z?YVdCI8$PouBG`;}U=F3;L&Al-L>6;^zKsvzNQX z8MIjap1R`3_v9y0#Tm~Kr?zMukX=exfLJ9yLLiXl5^5>)~6 zD*z%u1%u=P33(7$9we#;u8Pk&2nquIxB-9_AgH7i3<4H+N-P#X3?d1JN`WL+10XPD z(H}7M>*yj-Uc3w`)inxevlaUhYw_N&qbGECBTveUu@VweU>Iy!2(*Y*g`&;&>?@eYaB!Eb`rnN+7i=1QR zqk*8*6q9Cc@WBS(46ZS+;aKCKKd$WNxqi}lnA$woxi2=8Ji+aAw?n#DX7hWdwNWrA7Py}fqt7Krzcg|_<}#Dy z#eSpSIlL;==R|A`;fV76@%nm$r)L#g*3`2-3{r6?&zam9oaR#5B6A7z_cd6xDUu|$AZ|KXhXC#?PI;<%53>Cj~C`R{$&2j`Pi!7zpLc%1 zuzpi}o^3{AdtAfvK7n=|-#JhqWY?xdU`H>`s;u3xzEhnwJ|Ey4(u2^rd90B?37*?? zFZRJ}x^8#ZM}~Sg-2vOjys@r%^Ox5gmK}GU&{c_TP;nJkZQMN*K0a4O3?BPqsE5RG z$R%V?dhCWx3Z6W72tZ0kMlc<1oWoMC3i(C2qh5`CuhH$^g;537SNu87K{*qST?A%S zas81zLnGhbfR0%s4D-{_p)ReOvl@gv@3{6#<}HY94t7XG&qiqaS}}D&WukIzL2~}a zH`9l1P#%_6KdaeDIj$MiA-Pc_=A%^zl5qG)bM+bv?~6KDF_rkS&Ae8$8piRo!nFMj zqx8U}u`-uZLyl*_$k0f*tIlQP#3_Aw;WHpzMYu20sXpMU!1^-!=-yX#{?Aw7DQ`+=R@6nOTn2)GAY$a$Nr@uW`GqGddJ%971#X86o|e(oQC-c!n8=<%ZJ zuCS0dO#$|=;Ir``ytelq*Y9RTPx3jOyLlKDBaWFCSF1;E`roh?_aE z2<+|oJ(HFdgUv=4w!Ge?R?^?FJ^0g^=B&Cv`!vZqlk~&_q5eWX*{vt@O#H#Th%3K3 z^509&>*zhI3Y-BN)52l2b>aS zj;K40vK8k&d4&~{y#|kX4<--Il$B{t&RiN<8Fc{j*44h5#P2Qh!iLp)yWRxF1r#}_U62Ks@hl>$rJGFKIJ91w#~GiKG9Y@ zml%21OR4DqD(%87?L`@(e2%xtcuw>4DU%Bg)N^wlfAv;3VoXnqfC=s1S{WbTLv<(F z+M60;R6y|)sA8F{%Nj1}=SF&`p_PMW&Bp4}3ysM^g`FQBC}RaB8@#=f3tFW#n%Wim z4uztq%69qPon_N+Ywe#7)YjwP4rmV-zA?Bilh$=oz#SX?h|^s-sHMDZG!@DHBi6@Y zJld^1pW<12{v~gHM^y1INEhxp%`A_BOIvue^O>_-^5-*z6hk2mf)9D%TgHo~oW+;$ zJ^$40VhgIY#s&mrsY3_&qwtGf~$qRymI{) zQ*mR?CeZxMkNCFaN2$4$E_Ye@@R~Z=*NvAo2=!e#ec=8l=)Pj1^=A(C`inO9K1pz! ze%OZ9#c9Z<13GDOvw^LZ0p$W-e38tR zM^^u0m|a2ntcvc-w`|(ngo=j+xjuIEx6?FFau`EY^l=yL2Rs_G$(yG2+Jm+JU>c>@$i6qYlxw# zplyR{^5Imi1F>Zl(S_X~8!N*Q#$!YGt4khF_G|g`x5}6uvtjbTRKMti+BSvTagw=e zUWuXH$K})cCQgPOoWS)-glAndvY0FgP% RVfmik%lF&=Wk62U^ literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-6/091-ICON_Info_1.jpg b/buildroot/share/dwin/icons-6/091-ICON_Info_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cde9c0b064e25ace2783184bcdbc4d807d0e62af GIT binary patch literal 3465 zcmcIlc|6ox8~=^LaHZ@--8w5ZL(LkaJktj z%gB=bO$cMBbjc9Ol4aiErtbZGZts8Z^T+v}bAI3N^E~G{-*XOYfHeU~7zcW~0f3pA z0>A@&HP##;Xyk|W4gx>`Cwtlw09X@XmXlSNd#CRh75x%tH1zl z-9R!1>y4*DUGeUoL>=jcr*+a$Pn?dl9RjU_CL7{CJWmBv@IM8c+hBveu}GY>?n$V2 zAS#eRCg5opXduCdNJRzeNbfpFvHLsIFlp#6gyyXyt-li$YLB*r8j>h@C_-672@6+O zg=!*|;TkGPRdq$EstQ~arlJXht0}3#Q7RfJH6--2NwcF-aBe7TBa_du*drb3&x;BO z2v81CQzlW|VQ?f82~$ypsj4cm5lYk`A`KI$M5M~>c`(9Lu@p}-&67lg?s&wwlKf~o z((FwCS^|Om#qGb=>Tf_a`hP zqYNo{42?vwA(4Fcs%Ys!qLHW`Br?>{aHnco&|`LwuAD!LIG zYuwxr2oD6p&CC1Ucf7p&{%IgE7|g}V#mmjj%g@Kl$A4fy+YTJq1%3YP`)l-1-j@-J z4hZr9IDiNS2?88~Ag~~a)d(c8&pC(_4ElNl06ZL=+`J$z2p9wcICh$^#ti|nljaZr z*dGv>gA2^{*WVqWAbTB2xUQtO!+N%4GVUW%2aei#Y$QeNWC%DLG0)^q_q zXz%y;BQs}_dIFp~v3D9LdwZPfAm1UAqitvJI?Ah5JhwMAU&r~O6+8ey9NE}iz?l|7 zh>~kt#tP+SCnw)yX3&b2BzyC66`9M#qvI(`cb~T>SQ1VUdP3$@&~Z!BLYlew)Z`YQ z$fygQ2rf_aw(c_rF`jpeejr!>XE3KFJ#SU?_Ik5>uh8!r$BG)0Y)c!wQ}b%`LppTT z7Jl%J?~;s)yxxR`9)7H=BwO;dc`QOP;#H@+#S5*T=_>rJd;hkN5qfRSa-p0BprY=i zxgW2&ZM5L*wR$)lGCEIx7uUon?J#$E>0-oeGDDPXSQs+eZ;=O4VKvX{)UW4`Ih<;= z8MzX3c9;dEG@Pzii}#~S!$N{QM}xVVV;YB&~}#SC=Rb^89PMU<#;l3e3Q?91rLWCHbY2jMOv z|J)s8CEE=0-X3vgj}K{^$7K9m>gn3%9jx*{iKL?SL%buOp9bbKH6R>87&zp&E19<>!I z|9s!IUsA9esS=N(r-e*!@+Qd-KaVibt$Y9!K6OkOI&~B7YrfSMlo)y0?gi?gb%Be5 zau)i})B7nUjSDE-tWMOXGpsF|@9f<9fQu8OT8)`BSVh%Iq4T~hKp+b_x9>?g{&h%x zeQ0|G$Bg`&_61yf);Wc|QTbS@l(91u|D9=tKo6Q1_6t9dm1rAY9saZ7C zt{1FnwYzH=_pyM%3tKj02#Y(no?Uw|T*fpGxaNc_Sg+b@7|E($o};MIW4r|HGuu{R z<>b&qSy{euM?y$tubE>vN`!wwx2(6fP;AT5CryXSdmuU)<33i+^ch)N+UW$r8E^Yq zo8dmg(Yo9FxhILRmPO^Q=MJ@Mr@9FJt81a#5Pp*AotW2R?~C0=`0O2824&3yyi=NE zw! zYuiqjhIWcxXkl0Ard8z=9p|@nyF!=e?s;#29Yk!f07=2lLT^UDI$Q2ym7zQeb&4`L z-KKPj`YP)DSZe}P$bmd6bUf6^eNy$Quv=tt^rj&JlbZ9XDl4>dMDqKv&DbSd!y7t% zZxKOmWIB0NwTJg|iQEg~l7MO0d5UECe&0Jq!k?}(ihG3QA;Z%}h19Fw4!qPjI#BE- zi>Ld?F&UFxa}uf>!;O4)!A{$)Q!n*r`Ft|+uXI@1ABbCA|MBpp%)W(9uHe4S*x*>A zQk+ZGV(wwlaC`mF7o@oEs^1Id%DdRX~vx>OH_iby1N!`6Gy;nfJ71ItJ z@ynx>#L(qiGj-<7*bnpLfyix(bsnoEXYb0z|{AU5t#j*7gZO-X| zkQov8QJhg$wq!Khi>S@sx?hnI*0GwIR!7C9%=v2AajD?F(?aj_W1Aats$HmRFRF(Ao#nz1Ce^oe9~|ZiucZ`|3DS zZmbA3g5co@3K7jWKCK|kGkQDELrJGCB#OR~Fyd1oMLh6q(Yy)Ks5WE)Dp1 z%6CbA9ItGuXkl&}tPmMzIsi+}Y#HW}TB+EIyNswRlFLUOEAIrre*ApVAf zYh!+SVfw&&QA|t>R#Ng+G$0bX{M`-u-pj#$-L36=7Cm$=qx7(*_4mU#I5JhfzWo1( I9*8ygU(%eKsQ>@~ literal 0 HcmV?d00001 diff --git a/buildroot/share/dwin/icons-svg/alert.svg b/buildroot/share/dwin/icons-svg/alert.svg new file mode 100644 index 0000000000..e98bd58bd8 --- /dev/null +++ b/buildroot/share/dwin/icons-svg/alert.svg @@ -0,0 +1,85 @@ + + + + + + + + image/svg+xml + + + + + + + + ! + + diff --git a/buildroot/share/dwin/icons-svg/bed_flat_old.svg b/buildroot/share/dwin/icons-svg/bed_flat_old.svg new file mode 100644 index 0000000000..e4b860bc71 --- /dev/null +++ b/buildroot/share/dwin/icons-svg/bed_flat_old.svg @@ -0,0 +1,72 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/buildroot/share/dwin/icons-svg/bed_flat_on.svg b/buildroot/share/dwin/icons-svg/bed_flat_on.svg new file mode 100644 index 0000000000..a87b0c0ff0 --- /dev/null +++ b/buildroot/share/dwin/icons-svg/bed_flat_on.svg @@ -0,0 +1,91 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/buildroot/share/dwin/icons-svg/bed_leveled_off.svg b/buildroot/share/dwin/icons-svg/bed_leveled_off.svg new file mode 100644 index 0000000000..161b8d11d4 --- /dev/null +++ b/buildroot/share/dwin/icons-svg/bed_leveled_off.svg @@ -0,0 +1,83 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/buildroot/share/dwin/icons-svg/bed_leveled_on.svg b/buildroot/share/dwin/icons-svg/bed_leveled_on.svg new file mode 100644 index 0000000000..bda0c77a9e --- /dev/null +++ b/buildroot/share/dwin/icons-svg/bed_leveled_on.svg @@ -0,0 +1,103 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/buildroot/share/dwin/icons-svg/bed_off.svg b/buildroot/share/dwin/icons-svg/bed_off.svg new file mode 100644 index 0000000000..936710e49b --- /dev/null +++ b/buildroot/share/dwin/icons-svg/bed_off.svg @@ -0,0 +1,64 @@ + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/buildroot/share/dwin/icons-svg/bed_on.svg b/buildroot/share/dwin/icons-svg/bed_on.svg new file mode 100644 index 0000000000..61218e57a6 --- /dev/null +++ b/buildroot/share/dwin/icons-svg/bed_on.svg @@ -0,0 +1,84 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/buildroot/share/dwin/icons-svg/bedline.svg b/buildroot/share/dwin/icons-svg/bedline.svg new file mode 100644 index 0000000000..51670b7a19 --- /dev/null +++ b/buildroot/share/dwin/icons-svg/bedline.svg @@ -0,0 +1,64 @@ + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/buildroot/share/dwin/icons-svg/down_arrow.svg b/buildroot/share/dwin/icons-svg/down_arrow.svg new file mode 100644 index 0000000000..9c1d07efe0 --- /dev/null +++ b/buildroot/share/dwin/icons-svg/down_arrow.svg @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/buildroot/share/dwin/icons-svg/fan.svg b/buildroot/share/dwin/icons-svg/fan.svg new file mode 100644 index 0000000000..0040f26b6b --- /dev/null +++ b/buildroot/share/dwin/icons-svg/fan.svg @@ -0,0 +1,155 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/buildroot/share/dwin/icons-svg/halted.svg b/buildroot/share/dwin/icons-svg/halted.svg new file mode 100644 index 0000000000..38a78384bc --- /dev/null +++ b/buildroot/share/dwin/icons-svg/halted.svg @@ -0,0 +1,83 @@ + + + + + + + + image/svg+xml + + + + + + + + X + + diff --git a/buildroot/share/dwin/icons-svg/hotend_off.svg b/buildroot/share/dwin/icons-svg/hotend_off.svg new file mode 100644 index 0000000000..14da6a23eb --- /dev/null +++ b/buildroot/share/dwin/icons-svg/hotend_off.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/buildroot/share/dwin/icons-svg/hotend_on.svg b/buildroot/share/dwin/icons-svg/hotend_on.svg new file mode 100644 index 0000000000..f112ba186b --- /dev/null +++ b/buildroot/share/dwin/icons-svg/hotend_on.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/buildroot/share/dwin/icons-svg/question.svg b/buildroot/share/dwin/icons-svg/question.svg new file mode 100644 index 0000000000..8d8849ca4e --- /dev/null +++ b/buildroot/share/dwin/icons-svg/question.svg @@ -0,0 +1,75 @@ + + + + + + + + image/svg+xml + + + + + + + + ? + + diff --git a/buildroot/share/dwin/icons-svg/rotate_ccw.svg b/buildroot/share/dwin/icons-svg/rotate_ccw.svg new file mode 100644 index 0000000000..8b007725c6 --- /dev/null +++ b/buildroot/share/dwin/icons-svg/rotate_ccw.svg @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/buildroot/share/dwin/icons-svg/rotate_cw.svg b/buildroot/share/dwin/icons-svg/rotate_cw.svg new file mode 100644 index 0000000000..446ad519ec --- /dev/null +++ b/buildroot/share/dwin/icons-svg/rotate_cw.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/buildroot/share/dwin/icons-svg/up_arrow.svg b/buildroot/share/dwin/icons-svg/up_arrow.svg new file mode 100644 index 0000000000..bc20be2693 --- /dev/null +++ b/buildroot/share/dwin/icons-svg/up_arrow.svg @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/buildroot/share/dwin/make_jpgs.sh b/buildroot/share/dwin/make_jpgs.sh new file mode 100755 index 0000000000..0acace7388 --- /dev/null +++ b/buildroot/share/dwin/make_jpgs.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +mkdir -p icons-3 + +convert -size 48x36 -background "#080808" -quality 100 -sampling-factor 4:4:4 ./icons-svg/hotend_off.svg ./icons-3/001-ICON_HotendOff.jpg +convert -size 48x36 -background "#080808" -quality 100 -sampling-factor 4:4:4 ./icons-svg/hotend_on.svg ./icons-3/002-ICON_HotendOn.jpg + +convert -size 48x36 -background "#080808" -quality 100 -sampling-factor 4:4:4 ./icons-svg/bed_off.svg ./icons-3/003-ICON_BedOff.jpg +convert -size 48x36 -background "#080808" -quality 100 -sampling-factor 4:4:4 ./icons-svg/bed_on.svg ./icons-3/004-ICON_BedOn.jpg + +convert -size 48x48 -background "#080808" -quality 100 -sampling-factor 4:4:4 ./icons-svg/fan.svg ./icons-3/005-ICON_Fan0.jpg +convert -size 48x48 -background "#080808" -quality 100 -sampling-factor 4:4:4 -distort SRT 22.5 ./icons-svg/fan.svg ./icons-3/006-ICON_Fan1.jpg +convert -size 48x48 -background "#080808" -quality 100 -sampling-factor 4:4:4 -distort SRT 45 ./icons-svg/fan.svg ./icons-3/007-ICON_Fan2.jpg +convert -size 48x48 -background "#080808" -quality 100 -sampling-factor 4:4:4 -distort SRT 67.5 ./icons-svg/fan.svg ./icons-3/008-ICON_Fan3.jpg + +convert -size 96x96 -background "#333e44" -quality 100 -sampling-factor 4:4:4 ./icons-svg/halted.svg ./icons-3/009-ICON_Halted.jpg +convert -size 96x96 -background "#333e44" -quality 100 -sampling-factor 4:4:4 ./icons-svg/question.svg ./icons-3/010-ICON_Question.jpg +convert -size 96x96 -background "#333e44" -quality 100 -sampling-factor 4:4:4 ./icons-svg/alert.svg ./icons-3/011-ICON_Alert.jpg + +convert -size 48x48 -background "#080808" -quality 100 -sampling-factor 4:4:4 ./icons-svg/rotate_cw.svg ./icons-3/012-ICON_RotateCW.jpg +convert -size 48x48 -background "#080808" -quality 100 -sampling-factor 4:4:4 ./icons-svg/rotate_ccw.svg ./icons-3/013-ICON_RotateCCW.jpg +convert -size 48x48 -background "#080808" -quality 100 -sampling-factor 4:4:4 ./icons-svg/up_arrow.svg ./icons-3/014-ICON_UpArrow.jpg +convert -size 48x48 -background "#080808" -quality 100 -sampling-factor 4:4:4 ./icons-svg/down_arrow.svg ./icons-3/015-ICON_DownArrow.jpg + +convert -size 48x8 -background "#080808" -quality 100 -sampling-factor 4:4:4 ./icons-svg/bedline.svg ./icons-3/016-ICON_Bedline.jpg + +convert -size 48x36 -background "#080808" -quality 100 -sampling-factor 4:4:4 ./icons-svg/bed_leveled_off.svg ./icons-3/017-ICON_BedLeveledOff.jpg +convert -size 48x36 -background "#080808" -quality 100 -sampling-factor 4:4:4 ./icons-svg/bed_leveled_on.svg ./icons-3/018-ICON_BedLeveledOn.jpg + +rm 3.ICO +./bin/makeIco.py icons-3 3.ICO From 0c0ba6db7d7d4a968e621f55050e5903ccd2f53c Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 18 Jan 2022 00:21:03 +0000 Subject: [PATCH 383/532] [cron] Bump distribution date (2022-01-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 1bd366a473..7670da707c 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 "2022-01-17" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 7d4356232c..07c49cae10 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 "2022-01-17" + #define STRING_DISTRIBUTION_DATE "2022-01-18" #endif /** From 1e246d65ad160d0a33d598046374f3910d8e4084 Mon Sep 17 00:00:00 2001 From: GHGiampy <83699429+GHGiampy@users.noreply.github.com> Date: Tue, 18 Jan 2022 07:56:11 +0100 Subject: [PATCH 384/532] =?UTF-8?q?=E2=9C=A8=20Long=20filename=20open/crea?= =?UTF-8?q?te/write=20(#23526)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/Configuration_adv.h | 28 +- Marlin/src/gcode/eeprom/M500-M504.cpp | 2 + Marlin/src/gcode/host/M115.cpp | 8 +- Marlin/src/sd/SdBaseFile.cpp | 584 ++++++++++++++++++++++---- Marlin/src/sd/SdBaseFile.h | 22 +- Marlin/src/sd/cardreader.cpp | 6 +- buildroot/share/scripts/upload.py | 78 ++-- buildroot/tests/mega2560 | 2 +- 8 files changed, 582 insertions(+), 148 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 0bcd41fd52..ba396431c9 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1525,33 +1525,23 @@ // LCD's font must contain the characters. Check your selected LCD language. //#define UTF_FILENAME_SUPPORT - // This allows hosts to request long names for files and folders with M33 - //#define LONG_FILENAME_HOST_SUPPORT + //#define LONG_FILENAME_HOST_SUPPORT // Get the long filename of a file/folder with 'M33 ' and list long filenames with 'M20 L' + //#define LONG_FILENAME_WRITE_SUPPORT // Create / delete files with long filenames via M28, M30, and Binary Transfer Protocol - // Enable this option to scroll long filenames in the SD card menu - //#define SCROLL_LONG_FILENAMES + //#define SCROLL_LONG_FILENAMES // Scroll long filenames in the SD card menu - // Leave the heaters on after Stop Print (not recommended!) - //#define SD_ABORT_NO_COOLDOWN + //#define SD_ABORT_NO_COOLDOWN // Leave the heaters on after Stop Print (not recommended!) /** - * This option allows you to abort SD printing when any endstop is triggered. - * This feature must be enabled with "M540 S1" or from the LCD menu. - * To have any effect, endstops must be enabled during SD printing. + * Abort SD printing when any endstop is triggered. + * This feature is enabled with 'M540 S1' or from the LCD menu. + * Endstops must be activated for this option to work. */ //#define SD_ABORT_ON_ENDSTOP_HIT - /** - * This option makes it easier to print the same SD Card file again. - * On print completion the LCD Menu will open with the file selected. - * You can just click to start the print, or navigate elsewhere. - */ - //#define SD_REPRINT_LAST_SELECTED_FILE + //#define SD_REPRINT_LAST_SELECTED_FILE // On print completion open the LCD Menu and select the same file - /** - * Auto-report SdCard status with M27 S - */ - //#define AUTO_REPORT_SD_STATUS + //#define AUTO_REPORT_SD_STATUS // Auto-report media status with 'M27 S' /** * Support for USB thumb drives using an Arduino USB Host Shield or diff --git a/Marlin/src/gcode/eeprom/M500-M504.cpp b/Marlin/src/gcode/eeprom/M500-M504.cpp index a1f295ebde..412d003355 100644 --- a/Marlin/src/gcode/eeprom/M500-M504.cpp +++ b/Marlin/src/gcode/eeprom/M500-M504.cpp @@ -56,6 +56,8 @@ void GcodeSuite::M502() { /** * M503: print settings currently in memory * + * S : Include / exclude header comments in the output. (Default: S1) + * * With CONFIGURATION_EMBEDDING: * C : Save the full Marlin configuration to SD Card as "mc.zip" */ diff --git a/Marlin/src/gcode/host/M115.cpp b/Marlin/src/gcode/host/M115.cpp index 08943ed5f2..45e0061a5b 100644 --- a/Marlin/src/gcode/host/M115.cpp +++ b/Marlin/src/gcode/host/M115.cpp @@ -154,6 +154,12 @@ void GcodeSuite::M115() { // LONG_FILENAME_HOST_SUPPORT (M33) cap_line(F("LONG_FILENAME"), ENABLED(LONG_FILENAME_HOST_SUPPORT)); + // LONG_FILENAME_WRITE_SUPPORT (M23, M28, M30...) + cap_line(F("LFN_WRITE"), ENABLED(LONG_FILENAME_WRITE_SUPPORT)); + + // CUSTOM_FIRMWARE_UPLOAD (M20 F) + cap_line(F("CUSTOM_FIRMWARE_UPLOAD"), ENABLED(CUSTOM_FIRMWARE_UPLOAD)); + // EXTENDED_M20 (M20 L) cap_line(F("EXTENDED_M20"), ENABLED(LONG_FILENAME_HOST_SUPPORT)); @@ -179,7 +185,7 @@ void GcodeSuite::M115() { cap_line(F("MEATPACK"), SERIAL_IMPL.has_feature(port, SerialFeature::MeatPack)); // CONFIG_EXPORT - cap_line(F("CONFIG_EXPORT"), ENABLED(CONFIG_EMBED_AND_SAVE_TO_SD)); + cap_line(F("CONFIG_EXPORT"), ENABLED(CONFIGURATION_EMBEDDING)); // Machine Geometry #if ENABLED(M115_GEOMETRY_REPORT) diff --git a/Marlin/src/sd/SdBaseFile.cpp b/Marlin/src/sd/SdBaseFile.cpp index b357495a3e..64d0ad68bd 100644 --- a/Marlin/src/sd/SdBaseFile.cpp +++ b/Marlin/src/sd/SdBaseFile.cpp @@ -89,6 +89,7 @@ bool SdBaseFile::addDirCluster() { } // cache a file's directory entry +// cache the current "dirBlock_" and return the entry at index "dirIndex_" // return pointer to cached entry or null for failure dir_t* SdBaseFile::cacheDirEntry(uint8_t action) { if (!vol_->cacheRawBlock(dirBlock_, action)) return nullptr; @@ -384,6 +385,20 @@ int8_t SdBaseFile::lsPrintNext(uint8_t flags, uint8_t indent) { return DIR_IS_FILE(&dir) ? 1 : 2; } +/** + * Calculate a checksum for an 8.3 filename + * + * \param name The 8.3 file name to calculate + * + * \return The checksum byte + */ +uint8_t lfn_checksum(const uint8_t *name) { + uint8_t sum = 0; + for (uint8_t i = 11; i; i--) + sum = ((sum & 1) << 7) + (sum >> 1) + *name++; + return sum; +} + // Format directory name field from a 8.3 name string bool SdBaseFile::make83Name(const char *str, uint8_t *name, const char **ptr) { uint8_t n = 7, // Max index until a dot is found @@ -430,6 +445,10 @@ bool SdBaseFile::mkdir(SdBaseFile *parent, const char *path, bool pFlag) { SdBaseFile *sub = &dir1; SdBaseFile *start = parent; + #if ENABLED(LONG_FILENAME_WRITE_SUPPORT) + uint8_t dlname[LONG_FILENAME_LENGTH]; + #endif + if (!parent || isOpen()) return false; if (*path == '/') { @@ -439,28 +458,31 @@ bool SdBaseFile::mkdir(SdBaseFile *parent, const char *path, bool pFlag) { parent = &dir2; } } - while (1) { - if (!make83Name(path, dname, &path)) return false; + + for (;;) { + if (!TERN(LONG_FILENAME_WRITE_SUPPORT, parsePath(path, dname, dlname, &path), make83Name(path, dname, &path))) return false; while (*path == '/') path++; if (!*path) break; - if (!sub->open(parent, dname, O_READ)) { - if (!pFlag || !sub->mkdir(parent, dname)) + if (!sub->open(parent, dname OPTARG(LONG_FILENAME_WRITE_SUPPORT, dlname), O_READ)) { + if (!pFlag || !sub->mkdir(parent, dname OPTARG(LONG_FILENAME_WRITE_SUPPORT, dlname))) return false; } if (parent != start) parent->close(); parent = sub; sub = parent != &dir1 ? &dir1 : &dir2; } - return mkdir(parent, dname); + return mkdir(parent, dname OPTARG(LONG_FILENAME_WRITE_SUPPORT, dlname)); } -bool SdBaseFile::mkdir(SdBaseFile *parent, const uint8_t dname[11]) { +bool SdBaseFile::mkdir(SdBaseFile *parent, const uint8_t dname[11] + OPTARG(LONG_FILENAME_WRITE_SUPPORT, const uint8_t dlname[LONG_FILENAME_LENGTH]) +) { if (ENABLED(SDCARD_READONLY)) return false; if (!parent->isDir()) return false; // create a normal file - if (!open(parent, dname, O_CREAT | O_EXCL | O_RDWR)) return false; + if (!open(parent, dname OPTARG(LONG_FILENAME_WRITE_SUPPORT, dlname), O_CREAT | O_EXCL | O_RDWR)) return false; // convert file to directory flags_ = O_READ; @@ -578,6 +600,10 @@ bool SdBaseFile::open(SdBaseFile *dirFile, const char *path, uint8_t oflag) { SdBaseFile dir1, dir2; SdBaseFile *parent = dirFile, *sub = &dir1; + #if ENABLED(LONG_FILENAME_WRITE_SUPPORT) + uint8_t dlname[LONG_FILENAME_LENGTH]; + #endif + if (!dirFile || isOpen()) return false; if (*path == '/') { // Path starts with '/' @@ -589,90 +615,244 @@ bool SdBaseFile::open(SdBaseFile *dirFile, const char *path, uint8_t oflag) { } for (;;) { - if (!make83Name(path, dname, &path)) return false; + if (!TERN(LONG_FILENAME_WRITE_SUPPORT, parsePath(path, dname, dlname, &path), make83Name(path, dname, &path))) return false; while (*path == '/') path++; if (!*path) break; - if (!sub->open(parent, dname, O_READ)) return false; + if (TERN0(LONG_FILENAME_WRITE_SUPPORT, !sub->open(parent, dname, dlname, O_READ))) return false; if (parent != dirFile) parent->close(); parent = sub; sub = parent != &dir1 ? &dir1 : &dir2; } - return open(parent, dname, oflag); + return open(parent, dname OPTARG(LONG_FILENAME_WRITE_SUPPORT, dlname), oflag); } -// open with filename in dname -bool SdBaseFile::open(SdBaseFile *dirFile, const uint8_t dname[11], uint8_t oflag) { +// open with filename in dname and long filename in dlname +bool SdBaseFile::open(SdBaseFile *dirFile, const uint8_t dname[11] + OPTARG(LONG_FILENAME_WRITE_SUPPORT, const uint8_t dlname[LONG_FILENAME_LENGTH]) + , uint8_t oflag +) { bool emptyFound = false, fileFound = false; - uint8_t index; + uint8_t index = 0; dir_t *p; + #if ENABLED(LONG_FILENAME_WRITE_SUPPORT) + // LFN - Long File Name support + const bool useLFN = dlname[0] != 0; + bool lfnFileFound = false; + vfat_t *pvFat; + uint8_t emptyCount = 0, + emptyIndex = 0, + reqEntriesNum = useLFN ? getLFNEntriesNum((char*)dlname) + 1 : 1, + lfnNameLength = useLFN ? strlen((char*)dlname) : 0, + lfnName[LONG_FILENAME_LENGTH], + lfnSequenceNumber = 0, + lfnChecksum = 0; + #endif + + // Rewind this dir vol_ = dirFile->vol_; - dirFile->rewind(); + // search for file - while (dirFile->curPosition_ < dirFile->fileSize_) { - index = 0xF & (dirFile->curPosition_ >> 5); - p = dirFile->readDirCache(); - if (!p) return false; + // Get absolute index position + index = (dirFile->curPosition_ >> 5) IF_DISABLED(LONG_FILENAME_WRITE_SUPPORT, & 0x0F); + // Get next entry + if (!(p = dirFile->readDirCache())) return false; + + // Check empty status: Is entry empty? if (p->name[0] == DIR_NAME_FREE || p->name[0] == DIR_NAME_DELETED) { - // remember first empty slot + // Count the contiguous available entries in which (eventually) fit the new dir entry, if it's a write operation if (!emptyFound) { - dirBlock_ = dirFile->vol_->cacheBlockNumber(); - dirIndex_ = index; - emptyFound = true; + #if ENABLED(LONG_FILENAME_WRITE_SUPPORT) + if (emptyCount == 0) emptyIndex = index; + // Incr empty entries counter + // If found the required empty entries, mark it + if (++emptyCount == reqEntriesNum) { + dirBlock_ = dirFile->vol_->cacheBlockNumber(); + dirIndex_ = index & 0xF; + emptyFound = true; + } + #else + dirBlock_ = dirFile->vol_->cacheBlockNumber(); + dirIndex_ = index; + emptyFound = true; + #endif } - // done if no entries follow + // Done if no entries follow if (p->name[0] == DIR_NAME_FREE) break; } - else if (!memcmp(dname, p->name, 11)) { - fileFound = true; - break; + else { // Entry not empty + #if ENABLED(LONG_FILENAME_WRITE_SUPPORT) + // Reset empty counter + if (!emptyFound) emptyCount = 0; + // Search for SFN or LFN? + if (!useLFN) { + // Check using SFN: file found? + if (!memcmp(dname, p->name, 11)) { + fileFound = true; + break; + } + } + else { + // Check using LFN: LFN not found? continue search for LFN + if (!lfnFileFound) { + // Is this dir a LFN? + if (isDirLFN(p)) { + // Get VFat dir entry + pvFat = (vfat_t *) p; + // Get checksum from the last entry of the sequence + if (pvFat->sequenceNumber & 0x40) lfnChecksum = pvFat->checksum; + // Get LFN sequence number + lfnSequenceNumber = pvFat->sequenceNumber & 0x1F; + if WITHIN(lfnSequenceNumber, 1, reqEntriesNum) { + // Check checksum for all other entries with the starting checksum fetched before + if (lfnChecksum == pvFat->checksum) { + // Set chunk of LFN from VFAT entry into lfnName + getLFNName(pvFat, (char *)lfnName, lfnSequenceNumber); + // LFN found? + if (!strncasecmp((char*)dlname, (char*)lfnName, lfnNameLength)) lfnFileFound = true; + } + } + } + } + else { // Complete LFN found, check for related SFN + // Check if only the SFN checksum match because the filename may be different due to different truncation methods + if (!isDirLFN(p) && (lfnChecksum == lfn_checksum(p->name))) { + fileFound = true; + break; + } + else lfnFileFound = false; // SFN not valid for the LFN found, reset LFN FileFound + } + } + #else + + if (!memcmp(dname, p->name, 11)) { + fileFound = true; + break; + } + + #endif // LONG_FILENAME_WRITE_SUPPORT } } + if (fileFound) { // don't open existing file if O_EXCL if (oflag & O_EXCL) return false; + TERN_(LONG_FILENAME_WRITE_SUPPORT, index &= 0xF); } else { // don't create unless O_CREAT and O_WRITE if ((oflag & (O_CREAT | O_WRITE)) != (O_CREAT | O_WRITE)) return false; - if (emptyFound) { - index = dirIndex_; - p = cacheDirEntry(SdVolume::CACHE_FOR_WRITE); - if (!p) return false; - } - else { - if (dirFile->type_ == FAT_FILE_TYPE_ROOT_FIXED) return false; - // add and zero cluster for dirFile - first cluster is in cache for write - if (!dirFile->addDirCluster()) return false; + #if ENABLED(LONG_FILENAME_WRITE_SUPPORT) - // use first entry in cluster - p = dirFile->vol_->cache()->dir; - index = 0; - } - // initialize as empty file - memset(p, 0, sizeof(*p)); - memcpy(p->name, dname, 11); + // Use bookmark index if found empty entries + if (emptyFound) index = emptyIndex; - // set timestamps - if (dateTime_) { - // call user date/time function - dateTime_(&p->creationDate, &p->creationTime); - } - else { - // use default date/time - p->creationDate = FAT_DEFAULT_DATE; - p->creationTime = FAT_DEFAULT_TIME; - } - p->lastAccessDate = p->creationDate; - p->lastWriteDate = p->creationDate; - p->lastWriteTime = p->creationTime; + // Make room for needed entries + while (emptyCount < reqEntriesNum) { + p = dirFile->readDirCache(); + if (!p) break; + emptyCount++; + } + while (emptyCount < reqEntriesNum) { + if (dirFile->type_ == FAT_FILE_TYPE_ROOT_FIXED) return false; + // add and zero cluster for dirFile - first cluster is in cache for write + if (!dirFile->addDirCluster()) return false; + emptyCount += dirFile->vol_->blocksPerCluster() * 16; + } + + // Move to 1st entry to write + if (!dirFile->seekSet(32 * index)) return false; + + // Dir entries write loop: [LFN] + SFN(1) + LOOP_L_N(dirWriteIdx, reqEntriesNum) { + index = (dirFile->curPosition_ / 32) & 0xF; + p = dirFile->readDirCache(); + // LFN or SFN Entry? + if (dirWriteIdx < reqEntriesNum - 1) { + // Write LFN Entries + pvFat = (vfat_t *) p; + // initialize as empty file + memset(pvFat, 0, sizeof(*pvFat)); + lfnSequenceNumber = (reqEntriesNum - dirWriteIdx - 1) & 0x1F; + pvFat->attributes = DIR_ATT_LONG_NAME; + pvFat->checksum = lfn_checksum(dname); + // Set sequence number and mark as last LFN entry if it's the 1st loop + pvFat->sequenceNumber = lfnSequenceNumber | (dirWriteIdx == 0 ? 0x40 : 0); + // Set LFN name block + setLFNName(pvFat, (char*)dlname, lfnSequenceNumber); + } + else { + // Write SFN Entry + // initialize as empty file + memset(p, 0, sizeof(*p)); + memcpy(p->name, dname, 11); + + // set timestamps + if (dateTime_) { + // call user date/time function + dateTime_(&p->creationDate, &p->creationTime); + } + else { + // use default date/time + p->creationDate = FAT_DEFAULT_DATE; + p->creationTime = FAT_DEFAULT_TIME; + } + p->lastAccessDate = p->creationDate; + p->lastWriteDate = p->creationDate; + p->lastWriteTime = p->creationTime; + } + + // write entry to SD + dirFile->vol_->cacheSetDirty(); + if (!dirFile->vol_->cacheFlush()) return false; + } + + #else // !LONG_FILENAME_WRITE_SUPPORT + + if (emptyFound) { + index = dirIndex_; + p = cacheDirEntry(SdVolume::CACHE_FOR_WRITE); + if (!p) return false; + } + else { + if (dirFile->type_ == FAT_FILE_TYPE_ROOT_FIXED) return false; + + // add and zero cluster for dirFile - first cluster is in cache for write + if (!dirFile->addDirCluster()) return false; + + // use first entry in cluster + p = dirFile->vol_->cache()->dir; + index = 0; + } + + // initialize as empty file + memset(p, 0, sizeof(*p)); + memcpy(p->name, dname, 11); + + // set timestamps + if (dateTime_) { + // call user date/time function + dateTime_(&p->creationDate, &p->creationTime); + } + else { + // use default date/time + p->creationDate = FAT_DEFAULT_DATE; + p->creationTime = FAT_DEFAULT_TIME; + } + + p->lastAccessDate = p->creationDate; + p->lastWriteDate = p->creationDate; + p->lastWriteTime = p->creationTime; + + // write entry to SD + if (!dirFile->vol_->cacheFlush()) return false; + + #endif // !LONG_FILENAME_WRITE_SUPPORT - // write entry to SD - if (!dirFile->vol_->cacheFlush()) return false; } // open entry in cache return openCachedEntry(index, oflag); @@ -808,6 +988,191 @@ bool SdBaseFile::openNext(SdBaseFile *dirFile, uint8_t oflag) { return false; } +#if ENABLED(LONG_FILENAME_WRITE_SUPPORT) + + /** + * Check if dir is a long file name entry (LFN) + * + * \param[in] dir Parent of this directory will be opened. Must not be root. + * \return true if the dir is a long file name entry (LFN) + */ + bool SdBaseFile::isDirLFN(const dir_t* dir) { + if (DIR_IS_LONG_NAME(dir)) { + vfat_t *VFAT = (vfat_t*)dir; + // Sanity-check the VFAT entry. The first cluster is always set to zero. And the sequence number should be higher than 0 + if ((VFAT->firstClusterLow == 0) && WITHIN((VFAT->sequenceNumber & 0x1F), 1, MAX_VFAT_ENTRIES)) return true; + } + return false; + } + + /** + * Check if dirname string is a long file name (LFN) + * + * \param[in] dirname The string to check + * \return true if the dirname is a long file name (LFN) + * \return false if the dirname is a short file name 8.3 (SFN) + */ + bool SdBaseFile::isDirNameLFN(const char *dirname) { + uint8_t length = strlen(dirname); + uint8_t idx = length; + bool dotFound = false; + if (idx > 12) return true; // LFN due to filename length > 12 ("filename.ext") + // Check dot(s) position + while (idx) { + if (dirname[--idx] == '.') { + if (!dotFound) { + // Last dot (extension) is allowed only + // in position [1..8] from start or [0..3] from end for SFN else it's a LFN + // A filename starting with "." is a LFN (eg. ".file" ->in SFN-> "file~1 ") + // A filename ending with "." is a SFN (if length <= 9) (eg. "file." ->in SFN-> "file ") + if (idx > 8 || idx == 0 || (length - idx - 1) > 3) return true; // LFN due to dot extension position + dotFound = true; + } + else { + // Found another dot, is a LFN + return true; + } + } + } + // If no dots found, the filename must be of max 8 characters + if ((!dotFound) && length > 8) return true; // LFN due to max filename (without extension) length + return false; + } + + /** + * Parse path and return 8.3 format and LFN filenames (if the parsed path is a LFN) + * The SFN is without dot ("FILENAMEEXT") + * The LFN is complete ("Filename.ext") + */ + bool SdBaseFile::parsePath(const char *path, uint8_t *name, uint8_t *lname, const char **ptrNextPath) { + // Init randomizer for SFN generation + randomSeed(millis()); + // Parse the LFN + uint8_t ilfn = 0; + bool lastDotFound = false; + const char *pLastDot = 0; + const char *lfnpath = path; + uint8_t c; + + while (*lfnpath && *lfnpath != '/') { + if (ilfn == LONG_FILENAME_LENGTH - 1) return false; // Name too long + c = *lfnpath++; // Get char and advance + // Fail for illegal characters + PGM_P p = PSTR("|<>^+=?/[];:,*\"\\"); + while (uint8_t b = pgm_read_byte(p++)) if (b == c) return false; // Check reserved characters + if (c < 0x20 || c == 0x7F) return false; // Check non-printable characters + if (c == '.' && (lfnpath - 1) > path) { // Skip dot '.' check in 1st position + // Save last dot pointer (skip if starts with '.') + pLastDot = lfnpath - 1; + lastDotFound = true; + } + lname[ilfn++] = c; // Set LFN character + } + // Terminate LFN + lname[ilfn] = 0; + + // Parse/generate 8.3 SFN. Will take + // until 8 characters for the filename part + // until 3 characters for the extension part (if exists) + // Add 4 more characters if name part < 3 + // Add '~cnt' characters if it's a LFN + const bool isLFN = isDirNameLFN((char*)lname); + + uint8_t n = isLFN ? 5 : 7, // Max index for each component of the file: + // starting with 7 or 5 (if LFN) + // switch to 10 for extension if the last dot is found + i = 11; + while (i) name[--i] = ' '; // Set whole FILENAMEEXT to spaces + while (*path && *path != '/') { + c = *path++; // Get char and advance + // Skip spaces and dots (if it's not the last dot) + if (c == ' ') continue; + if (c == '.' && (!lastDotFound || (lastDotFound && path < pLastDot))) continue; + // Fail for illegal characters + PGM_P p = PSTR("|<>^+=?/[];:,*\"\\"); + while (uint8_t b = pgm_read_byte(p++)) if (b == c) return false; // Check reserved characters + if (c < 0x21 || c == 0x7F) return false; // Check non-printable characters + // Is last dot? + if (c == '.') { + // Switch to extension part + n = 10; + i = 8; + } + // If in valid range add the character + else if (i <= n) // Check size for 8.3 format + name[i++] = c + (WITHIN(c, 'a', 'z') ? 'A' - 'a' : 0); // Uppercase required for 8.3 name + } + // If it's a LFN then the SFN always need: + // - A minimal of 3 characters (otherwise 4 chars are added) + // - The '~cnt' at the end + if (isLFN) { + // Get the 1st free character + uint8_t iFree = 0; + while (1) if (name[iFree++] == ' ' || iFree == 11) break; + iFree--; + // Check minimal length + if (iFree < 3) { + // Append 4 extra characters + name[iFree++] = random(0,24) + 'A'; name[iFree++] = random(0,24) + 'A'; + name[iFree++] = random(0,24) + 'A'; name[iFree++] = random(0,24) + 'A'; + } + // Append '~cnt' characters + if (iFree > 5) iFree = 5; // Force the append in the last 3 characters of name part + name[iFree++] = '~'; + name[iFree++] = random(1,9) + '0'; + name[iFree++] = random(1,9) + '0'; + } + + // Check if LFN is needed + if (!isLFN) lname[0] = 0; // Zero LFN + *ptrNextPath = path; // Set passed pointer to the end + return name[0] != ' '; // Return true if any name was set + } + + /** + * Get the LFN filename block from a dir. Get the block in lname at startOffset + */ + void SdBaseFile::getLFNName(vfat_t *pFatDir, char *lname, uint8_t sequenceNumber) { + uint8_t startOffset = (sequenceNumber - 1) * FILENAME_LENGTH; + LOOP_L_N(i, FILENAME_LENGTH) { + const uint16_t utf16_ch = (i >= 11) ? pFatDir->name3[i - 11] : (i >= 5) ? pFatDir->name2[i - 5] : pFatDir->name1[i]; + #if ENABLED(UTF_FILENAME_SUPPORT) + // We can't reconvert to UTF-8 here as UTF-8 is variable-size encoding, but joining LFN blocks + // needs static bytes addressing. So here just store full UTF-16LE words to re-convert later. + uint16_t idx = (startOffset + i) * 2; // This is fixed as FAT LFN always contain UTF-16LE encoding + longFilename[idx] = utf16_ch & 0xFF; + longFilename[idx + 1] = (utf16_ch >> 8) & 0xFF; + #else + // Replace all multibyte characters to '_' + lname[startOffset + i] = (utf16_ch > 0xFF) ? '_' : (utf16_ch & 0xFF); + #endif + } + } + + /** + * Set the LFN filename block lname to a dir. Put the block based on sequence number + */ + void SdBaseFile::setLFNName(vfat_t *pFatDir, char *lname, uint8_t sequenceNumber) { + uint8_t startOffset = (sequenceNumber - 1) * FILENAME_LENGTH; + uint8_t nameLength = strlen(lname); + LOOP_L_N(i, FILENAME_LENGTH) { + uint16_t ch = 0; + if ((startOffset + i) < nameLength) + ch = lname[startOffset + i]; + else if ((startOffset + i) > nameLength) + ch = 0xFFFF; + // Set char + if (i < 5) + pFatDir->name1[i] = ch; + else if (i < 11) + pFatDir->name2[i - 5] = ch; + else + pFatDir->name3[i - 11] = ch; + } + } + +#endif // LONG_FILENAME_WRITE_SUPPORT + #if 0 /** * Open a directory's parent directory. @@ -1049,20 +1414,6 @@ int16_t SdBaseFile::read(void *buf, uint16_t nbyte) { return nbyte; } -/** - * Calculate a checksum for an 8.3 filename - * - * \param name The 8.3 file name to calculate - * - * \return The checksum byte - */ -uint8_t lfn_checksum(const uint8_t *name) { - uint8_t sum = 0; - for (uint8_t i = 11; i; i--) - sum = ((sum & 1) << 7) + (sum >> 1) + *name++; - return sum; -} - /** * Read the next entry in a directory. * @@ -1110,30 +1461,40 @@ int8_t SdBaseFile::readDir(dir_t *dir, char *longFilename) { if (VFAT->firstClusterLow == 0) { const uint8_t seq = VFAT->sequenceNumber & 0x1F; if (WITHIN(seq, 1, MAX_VFAT_ENTRIES)) { - n = (seq - 1) * (FILENAME_LENGTH); - if (n == 0) { + if (seq == 1) { checksum = VFAT->checksum; checksum_error = 0; } else if (checksum != VFAT->checksum) // orphan detected checksum_error = 1; - LOOP_L_N(i, FILENAME_LENGTH) { - const uint16_t utf16_ch = (i >= 11) ? VFAT->name3[i - 11] : (i >= 5) ? VFAT->name2[i - 5] : VFAT->name1[i]; - #if ENABLED(UTF_FILENAME_SUPPORT) - // We can't reconvert to UTF-8 here as UTF-8 is variable-size encoding, but joining LFN blocks - // needs static bytes addressing. So here just store full UTF-16LE words to re-convert later. - uint16_t idx = (n + i) * 2; // This is fixed as FAT LFN always contain UTF-16LE encoding - longFilename[idx] = utf16_ch & 0xFF; - longFilename[idx + 1] = (utf16_ch >> 8) & 0xFF; - #else - // Replace all multibyte characters to '_' - longFilename[n + i] = (utf16_ch > 0xFF) ? '_' : (utf16_ch & 0xFF); - #endif - } + #if ENABLED(LONG_FILENAME_WRITE_SUPPORT) + + getLFNName(VFAT, longFilename, seq); // Get chunk of LFN from VFAT entry + + #else // !LONG_FILENAME_WRITE_SUPPORT + + n = (seq - 1) * (FILENAME_LENGTH); + + LOOP_L_N(i, FILENAME_LENGTH) { + const uint16_t utf16_ch = (i >= 11) ? VFAT->name3[i - 11] : (i >= 5) ? VFAT->name2[i - 5] : VFAT->name1[i]; + #if ENABLED(UTF_FILENAME_SUPPORT) + // We can't reconvert to UTF-8 here as UTF-8 is variable-size encoding, but joining LFN blocks + // needs static bytes addressing. So here just store full UTF-16LE words to re-convert later. + uint16_t idx = (n + i) * 2; // This is fixed as FAT LFN always contain UTF-16LE encoding + longFilename[idx] = utf16_ch & 0xFF; + longFilename[idx + 1] = (utf16_ch >> 8) & 0xFF; + #else + // Replace all multibyte characters to '_' + longFilename[n + i] = (utf16_ch > 0xFF) ? '_' : (utf16_ch & 0xFF); + #endif + } + + #endif // !LONG_FILENAME_WRITE_SUPPORT + // If this VFAT entry is the last one, add a NUL terminator at the end of the string if (VFAT->sequenceNumber & 0x40) - longFilename[(n + FILENAME_LENGTH) * LONG_FILENAME_CHARSIZE] = '\0'; + longFilename[LONG_FILENAME_CHARSIZE * TERN(LONG_FILENAME_WRITE_SUPPORT, seq * FILENAME_LENGTH, (n + FILENAME_LENGTH))] = '\0'; } } } @@ -1227,6 +1588,11 @@ bool SdBaseFile::remove() { dir_t *d = cacheDirEntry(SdVolume::CACHE_FOR_WRITE); if (!d) return false; + #if ENABLED(LONG_FILENAME_WRITE_SUPPORT) + // get SFN checksum before name rewrite (needed for LFN deletion) + const uint8_t sfn_checksum = lfn_checksum(d->name); + #endif + // mark entry deleted d->name[0] = DIR_NAME_DELETED; @@ -1234,8 +1600,48 @@ bool SdBaseFile::remove() { type_ = FAT_FILE_TYPE_CLOSED; // write entry to SD - return vol_->cacheFlush(); - return true; + #if DISABLED(LONG_FILENAME_WRITE_SUPPORT) + + return vol_->cacheFlush(); + + #else // LONG_FILENAME_WRITE_SUPPORT + + flags_ = 0; + + if (!vol_->cacheFlush()) return false; + + // Check if the entry has a LFN + bool lastEntry = false; + // loop back to search for any LFN entries related to this file + LOOP_S_LE_N(sequenceNumber, 1, MAX_VFAT_ENTRIES) { + dirIndex_ = (dirIndex_ - 1) & 0xF; + if (dirBlock_ == 0) break; + if (dirIndex_ == 0xF) dirBlock_--; + dir_t *dir = cacheDirEntry(SdVolume::CACHE_FOR_WRITE); + if (!dir) return false; + + // check for valid LFN: not deleted, not top dirs (".", ".."), must be a LFN + if (dir->name[0] == DIR_NAME_DELETED || dir->name[0] == '.' || !isDirLFN(dir)) break; + // check coherent LFN: checksum and sequenceNumber must match + vfat_t* dirlfn = (vfat_t*) dir; + if (dirlfn->checksum != sfn_checksum || (dirlfn->sequenceNumber & 0x1F) != sequenceNumber) break; // orphan entry + // is last entry of LFN ? + lastEntry = (dirlfn->sequenceNumber & 0x40); + // mark as deleted + dirlfn->sequenceNumber = DIR_NAME_DELETED; + // Flush to SD + if (!vol_->cacheFlush()) return false; + // exit on last entry of LFN deleted + if (lastEntry) break; + } + + // Restore current index + //if (!seekSet(32UL * dirIndex_)) return false; + //dirIndex_ += prevDirIndex; + + return true; + + #endif // LONG_FILENAME_WRITE_SUPPORT } /** diff --git a/Marlin/src/sd/SdBaseFile.h b/Marlin/src/sd/SdBaseFile.h index 342edefb70..bda44c6bd5 100644 --- a/Marlin/src/sd/SdBaseFile.h +++ b/Marlin/src/sd/SdBaseFile.h @@ -377,8 +377,26 @@ class SdBaseFile { dir_t* cacheDirEntry(uint8_t action); int8_t lsPrintNext(uint8_t flags, uint8_t indent); static bool make83Name(const char *str, uint8_t *name, const char **ptr); - bool mkdir(SdBaseFile *parent, const uint8_t dname[11]); - bool open(SdBaseFile *dirFile, const uint8_t dname[11], uint8_t oflag); + bool mkdir(SdBaseFile *parent, const uint8_t dname[11] + OPTARG(LONG_FILENAME_WRITE_SUPPORT, const uint8_t dlname[LONG_FILENAME_LENGTH]) + ); + bool open(SdBaseFile *dirFile, const uint8_t dname[11] + OPTARG(LONG_FILENAME_WRITE_SUPPORT, const uint8_t dlname[LONG_FILENAME_LENGTH]) + , uint8_t oflag + ); bool openCachedEntry(uint8_t cacheIndex, uint8_t oflags); dir_t* readDirCache(); + + // Long Filename create/write support + #if ENABLED(LONG_FILENAME_WRITE_SUPPORT) + static bool isDirLFN(const dir_t* dir); + static bool isDirNameLFN(const char *dirname); + static bool parsePath(const char *str, uint8_t *name, uint8_t *lname, const char **ptr); + /** + * Return the number of entries needed in the FAT for this LFN + */ + static inline uint8_t getLFNEntriesNum(const char *lname) { return (strlen(lname) + 12) / 13; } + static void getLFNName(vfat_t *vFatDir, char *lname, uint8_t startOffset); + static void setLFNName(vfat_t *vFatDir, char *lname, uint8_t lfnSequenceNumber); + #endif }; diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 25f9d7d802..8c1d08a460 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -328,7 +328,7 @@ void CardReader::printListing( if (includeLongNames) { SERIAL_CHAR(' '); if (prependLong) { SERIAL_ECHO(prependLong); SERIAL_CHAR('/'); } - SERIAL_ECHO(longFilename[0] ? longFilename : "???"); + SERIAL_ECHO(longFilename[0] ? longFilename : filename); } #endif SERIAL_EOL(); @@ -385,9 +385,9 @@ void CardReader::ls( diveDir.rewind(); selectByName(diveDir, segment); - // Print /LongNamePart to serial output + // Print /LongNamePart to serial output or the short name if not available SERIAL_CHAR('/'); - SERIAL_ECHO(longFilename[0] ? longFilename : "???"); + SERIAL_ECHO(longFilename[0] ? longFilename : filename); // If the filename was printed then that's it if (!flag.filenameIsDir) break; diff --git a/buildroot/share/scripts/upload.py b/buildroot/share/scripts/upload.py index bfce4ea49d..ceb0db4f10 100644 --- a/buildroot/share/scripts/upload.py +++ b/buildroot/share/scripts/upload.py @@ -84,21 +84,26 @@ def Upload(source, target, env): #----------------# # File functions # #----------------# - def _GetFirmwareFiles(): + def _GetFirmwareFiles(UseLongFilenames): if Debug: print('Get firmware files...') - _Send('M20 F') + _Send(f"M20 F{'L' if UseLongFilenames else ''}") Responses = _Recv() if len(Responses) < 3 or not any('file list' in r for r in Responses): raise Exception('Error getting firmware files') if Debug: print('OK') return Responses - def _FilterFirmwareFiles(FirmwareList): + def _FilterFirmwareFiles(FirmwareList, UseLongFilenames): Firmwares = [] for FWFile in FirmwareList: - if not '/' in FWFile and '.BIN' in FWFile: - idx = FWFile.index('.BIN') - Firmwares.append(FWFile[:idx+4]) + # For long filenames take the 3rd column of the firmwares list + if UseLongFilenames: + Space = 0 + Space = FWFile.find(' ') + if Space >= 0: Space = FWFile.find(' ', Space + 1) + if Space >= 0: FWFile = FWFile[Space + 1:] + if not '/' in FWFile and '.BIN' in FWFile.upper(): + Firmwares.append(FWFile[:FWFile.upper().index('.BIN') + 4]) return Firmwares def _RemoveFirmwareFile(FirmwareFile): @@ -124,6 +129,8 @@ def Upload(source, target, env): marlin_board_info_name = _GetMarlinEnv(MarlinEnv, 'BOARD_INFO_NAME') marlin_board_custom_build_flags = _GetMarlinEnv(MarlinEnv, 'BOARD_CUSTOM_BUILD_FLAGS') marlin_firmware_bin = _GetMarlinEnv(MarlinEnv, 'FIRMWARE_BIN') + marlin_long_filename_host_support = _GetMarlinEnv(MarlinEnv, 'LONG_FILENAME_HOST_SUPPORT') is not None + marlin_longname_write = _GetMarlinEnv(MarlinEnv, 'LONG_FILENAME_WRITE_SUPPORT') is not None marlin_custom_firmware_upload = _GetMarlinEnv(MarlinEnv, 'CUSTOM_FIRMWARE_UPLOAD') is not None marlin_short_build_version = _GetMarlinEnv(MarlinEnv, 'SHORT_BUILD_VERSION') marlin_string_config_h_author = _GetMarlinEnv(MarlinEnv, 'STRING_CONFIG_H_AUTHOR') @@ -148,6 +155,10 @@ def Upload(source, target, env): # "upload_delete_old_bins": delete all *.bin files in the root of SD Card upload_delete_old_bins = marlin_motherboard in ['BOARD_CREALITY_V4', 'BOARD_CREALITY_V4210', 'BOARD_CREALITY_V423', 'BOARD_CREALITY_V427', 'BOARD_CREALITY_V431', 'BOARD_CREALITY_V452', 'BOARD_CREALITY_V453', 'BOARD_CREALITY_V24S1'] + # "upload_random_name": generate a random 8.3 firmware filename to upload + upload_random_filename = marlin_motherboard in ['BOARD_CREALITY_V4', 'BOARD_CREALITY_V4210', 'BOARD_CREALITY_V423', 'BOARD_CREALITY_V427', + 'BOARD_CREALITY_V431', 'BOARD_CREALITY_V452', 'BOARD_CREALITY_V453', 'BOARD_CREALITY_V24S1'] and not marlin_long_filename_host_support + try: # Start upload job @@ -156,28 +167,34 @@ def Upload(source, target, env): # Dump some debug info if Debug: print('Upload using:') - print('---- Marlin --------------------') - print(f' PIOENV : {marlin_pioenv}') - print(f' SHORT_BUILD_VERSION : {marlin_short_build_version}') - print(f' STRING_CONFIG_H_AUTHOR : {marlin_string_config_h_author}') - print(f' MOTHERBOARD : {marlin_motherboard}') - print(f' BOARD_INFO_NAME : {marlin_board_info_name}') - print(f' CUSTOM_BUILD_FLAGS : {marlin_board_custom_build_flags}') - print(f' FIRMWARE_BIN : {marlin_firmware_bin}') - print(f' CUSTOM_FIRMWARE_UPLOAD : {marlin_custom_firmware_upload}') - print('---- Upload parameters ---------') - print(f' Source : {upload_firmware_source_name}') - print(f' Target : {upload_firmware_target_name}') - print(f' Port : {upload_port} @ {upload_speed} baudrate') - print(f' Timeout : {upload_timeout}') - print(f' Block size : {upload_blocksize}') - print(f' Compression : {upload_compression}') - print(f' Error ratio : {upload_error_ratio}') - print(f' Test : {upload_test}') - print(f' Reset : {upload_reset}') - print('--------------------------------') + print('---- Marlin -----------------------------------') + print(f' PIOENV : {marlin_pioenv}') + print(f' SHORT_BUILD_VERSION : {marlin_short_build_version}') + print(f' STRING_CONFIG_H_AUTHOR : {marlin_string_config_h_author}') + print(f' MOTHERBOARD : {marlin_motherboard}') + print(f' BOARD_INFO_NAME : {marlin_board_info_name}') + print(f' CUSTOM_BUILD_FLAGS : {marlin_board_custom_build_flags}') + print(f' FIRMWARE_BIN : {marlin_firmware_bin}') + print(f' LONG_FILENAME_HOST_SUPPORT : {marlin_long_filename_host_support}') + print(f' LONG_FILENAME_WRITE_SUPPORT : {marlin_longname_write}') + print(f' CUSTOM_FIRMWARE_UPLOAD : {marlin_custom_firmware_upload}') + print('---- Upload parameters ------------------------') + print(f' Source : {upload_firmware_source_name}') + print(f' Target : {upload_firmware_target_name}') + print(f' Port : {upload_port} @ {upload_speed} baudrate') + print(f' Timeout : {upload_timeout}') + print(f' Block size : {upload_blocksize}') + print(f' Compression : {upload_compression}') + print(f' Error ratio : {upload_error_ratio}') + print(f' Test : {upload_test}') + print(f' Reset : {upload_reset}') + print('-----------------------------------------------') # Custom implementations based on board parameters + # Generate a new 8.3 random filename + if upload_random_filename: + upload_firmware_target_name = f"fw-{''.join(random.choices('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', k=5))}.BIN" + print(f"Board {marlin_motherboard}: Overriding firmware filename to '{upload_firmware_target_name}'") # Delete all *.bin files on the root of SD Card (if flagged) if upload_delete_old_bins: @@ -185,11 +202,6 @@ def Upload(source, target, env): if not marlin_custom_firmware_upload: raise Exception(f"CUSTOM_FIRMWARE_UPLOAD must be enabled in 'Configuration_adv.h' for '{marlin_motherboard}'") - # Generate a new 8.3 random filename - # This board remember the last firmware filename and doesn't allow to flash from that filename - upload_firmware_target_name = f"fw-{''.join(random.choices('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', k=5))}.BIN" - print(f"Board {marlin_motherboard}: Overriding firmware filename to '{upload_firmware_target_name}'") - # Init serial port port = serial.Serial(upload_port, baudrate = upload_speed, write_timeout = 0, timeout = 0.1) port.reset_input_buffer() @@ -198,13 +210,13 @@ def Upload(source, target, env): _CheckSDCard() # Get firmware files - FirmwareFiles = _GetFirmwareFiles() + FirmwareFiles = _GetFirmwareFiles(marlin_long_filename_host_support) if Debug: for FirmwareFile in FirmwareFiles: print(f'Found: {FirmwareFile}') # Get all 1st level firmware files (to remove) - OldFirmwareFiles = _FilterFirmwareFiles(FirmwareFiles[1:len(FirmwareFiles)-2]) # Skip header and footers of list + OldFirmwareFiles = _FilterFirmwareFiles(FirmwareFiles[1:len(FirmwareFiles)-2], marlin_long_filename_host_support) # Skip header and footers of list if len(OldFirmwareFiles) == 0: print('No old firmware files to delete') else: diff --git a/buildroot/tests/mega2560 b/buildroot/tests/mega2560 index bf3290b9d0..5ae9a2dbcf 100755 --- a/buildroot/tests/mega2560 +++ b/buildroot/tests/mega2560 @@ -35,7 +35,7 @@ opt_set MOTHERBOARD BOARD_AZTEEG_X3_PRO LCD_LANGUAGE jp_kana 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 REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER LIGHTWEIGHT_UI SHOW_CUSTOM_BOOTSCREEN BOOT_MARLIN_LOGO_SMALL \ LCD_SET_PROGRESS_MANUALLY PRINT_PROGRESS_SHOW_DECIMALS SHOW_REMAINING_TIME STATUS_MESSAGE_SCROLLING SCROLL_LONG_FILENAMES \ - SDSUPPORT SDCARD_SORT_ALPHA NO_SD_AUTOSTART USB_FLASH_DRIVE_SUPPORT CANCEL_OBJECTS \ + SDSUPPORT LONG_FILENAME_WRITE_SUPPORT SDCARD_SORT_ALPHA NO_SD_AUTOSTART USB_FLASH_DRIVE_SUPPORT CANCEL_OBJECTS \ Z_PROBE_SLED AUTO_BED_LEVELING_UBL UBL_HILBERT_CURVE RESTORE_LEVELING_AFTER_G28 DEBUG_LEVELING_FEATURE G26_MESH_VALIDATION ENABLE_LEVELING_FADE_HEIGHT \ EEPROM_SETTINGS EEPROM_CHITCHAT GCODE_MACROS CUSTOM_MENU_MAIN \ MULTI_NOZZLE_DUPLICATION CLASSIC_JERK LIN_ADVANCE QUICK_HOME \ From 8c83ddd201284a70794d9b37d53b58756b58803b Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Tue, 18 Jan 2022 00:30:52 -0800 Subject: [PATCH 385/532] =?UTF-8?q?=F0=9F=94=A8=20Suppressible=20CONFIGURA?= =?UTF-8?q?TION=5FEMBEDDING=20warning=20(#23545)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Warnings.cpp | 8 ++++---- buildroot/share/PlatformIO/scripts/signature.py | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index 684ab82d00..0d6f9bb134 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -548,11 +548,11 @@ // // Warn users of potential endstop/DIAG pin conflicts to prevent homing issues when not using sensorless homing // -#if NONE(USE_SENSORLESS, DIAG_JUMPERS_REMOVED) - #if ENABLED(USES_DIAG_JUMPERS) +#if !USE_SENSORLESS + #if ENABLED(USES_DIAG_JUMPERS) && DISABLED(DIAG_JUMPERS_REMOVED) #warning "Motherboard DIAG jumpers must be removed when SENSORLESS_HOMING is disabled. (Define DIAG_JUMPERS_REMOVED to suppress this warning.)" - #elif ENABLED(USES_DIAG_PINS) - #warning "Driver DIAG pins must be physically removed unless SENSORLESS_HOMING is enabled. (See https://bit.ly/2ZPRlt0) (Define DIAG_JUMPERS_REMOVED to suppress this warning.)" + #elif ENABLED(USES_DIAG_PINS) && DISABLED(DIAG_PINS_REMOVED) + #warning "Driver DIAG pins must be physically removed unless SENSORLESS_HOMING is enabled. (See https://bit.ly/2ZPRlt0) (Define DIAG_PINS_REMOVED to suppress this warning.)" #endif #endif diff --git a/buildroot/share/PlatformIO/scripts/signature.py b/buildroot/share/PlatformIO/scripts/signature.py index 654e3ea677..593f9580b3 100644 --- a/buildroot/share/PlatformIO/scripts/signature.py +++ b/buildroot/share/PlatformIO/scripts/signature.py @@ -163,7 +163,9 @@ def compute_build_signature(env): # Generate a C source file for storing this array with open('Marlin/src/mczip.h','wb') as result_file: - result_file.write(b'#warning "Generated file \'mc.zip\' is embedded"\n') + result_file.write(b'#ifndef NO_CONFIGURATION_EMBEDDING_WARNING\n') + result_file.write(b' #warning "Generated file \'mc.zip\' is embedded (Define NO_CONFIGURATION_EMBEDDING_WARNING to suppress this warning.)"\n') + result_file.write(b'#endif\n') result_file.write(b'const unsigned char mc_zip[] PROGMEM = {\n ') count = 0 for b in open(os.path.join(build_dir, 'mc.zip'), 'rb').read(): From e2446dc5610382c72d502cd3410b46f9801bb131 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 18 Jan 2022 03:01:09 -0600 Subject: [PATCH 386/532] =?UTF-8?q?=F0=9F=92=A5=20Generalize=20extra=20deb?= =?UTF-8?q?ugging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/language.h | 2 +- Marlin/src/gcode/control/M111.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h index 929992a62f..c53ebdfbf8 100644 --- a/Marlin/src/core/language.h +++ b/Marlin/src/core/language.h @@ -254,7 +254,7 @@ #define STR_DEBUG_ERRORS "ERRORS" #define STR_DEBUG_DRYRUN "DRYRUN" #define STR_DEBUG_COMMUNICATION "COMMUNICATION" -#define STR_DEBUG_LEVELING "LEVELING" +#define STR_DEBUG_DETAIL "DETAIL" #define STR_PRINTER_LOCKED "Printer locked! (Unlock with M511 or LCD)" #define STR_WRONG_PASSWORD "Incorrect Password" diff --git a/Marlin/src/gcode/control/M111.cpp b/Marlin/src/gcode/control/M111.cpp index 08c39b762e..d6aeb77410 100644 --- a/Marlin/src/gcode/control/M111.cpp +++ b/Marlin/src/gcode/control/M111.cpp @@ -34,12 +34,12 @@ void GcodeSuite::M111() { static PGMSTR(str_debug_8, STR_DEBUG_DRYRUN); static PGMSTR(str_debug_16, STR_DEBUG_COMMUNICATION); #if ENABLED(DEBUG_LEVELING_FEATURE) - static PGMSTR(str_debug_lvl, STR_DEBUG_LEVELING); + static PGMSTR(str_debug_detail, STR_DEBUG_DETAIL); #endif static PGM_P const debug_strings[] PROGMEM = { str_debug_1, str_debug_2, str_debug_4, str_debug_8, str_debug_16, - TERN_(DEBUG_LEVELING_FEATURE, str_debug_lvl) + TERN_(DEBUG_LEVELING_FEATURE, str_debug_detail) }; SERIAL_ECHO_START(); From df69d7227379eccb260ef6f2b9a9db724c39fe84 Mon Sep 17 00:00:00 2001 From: Salvatore Bramante Date: Tue, 18 Jan 2022 10:09:06 +0100 Subject: [PATCH 387/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Octopus=20v1.x=20p?= =?UTF-8?q?robe=20pin=20(#23548)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h | 4 ++++ Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h | 6 +----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h index fd367e87c0..dd8812fe2a 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_PRO_V1_0.h @@ -37,4 +37,8 @@ #define TEMP_0_PIN PF4 // TH0 #endif +#if !defined(Z_MIN_PROBE_PIN) && DISABLED(BLTOUCH) + #define Z_MIN_PROBE_PIN PC5 // Probe (Proximity switch) port +#endif + #include "pins_BTT_OCTOPUS_V1_common.h" diff --git a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h index 04a7d9e0b4..8652a815c2 100644 --- a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h +++ b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h @@ -61,11 +61,7 @@ // Z Probe (when not Z_MIN_PIN) // #ifndef Z_MIN_PROBE_PIN - #if ENABLED(BLTOUCH) - #define Z_MIN_PROBE_PIN PB7 - #else - #define Z_MIN_PROBE_PIN PC5 // Probe (Proximity switch) port - #endif + #define Z_MIN_PROBE_PIN PB7 #endif // From e9ef609b076736031f80ca12860ebee7d34bfe9f Mon Sep 17 00:00:00 2001 From: Fahad Alduraibi Date: Tue, 18 Jan 2022 12:16:39 +0300 Subject: [PATCH 388/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20RAMPS=201.4=20Plus?= =?UTF-8?q?=20EXP=20headers=20(#23523)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/ramps/pins_RAMPS_PLUS.h | 48 +++++++++++++++++-------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/Marlin/src/pins/ramps/pins_RAMPS_PLUS.h b/Marlin/src/pins/ramps/pins_RAMPS_PLUS.h index a69572dee7..0c554c353f 100644 --- a/Marlin/src/pins/ramps/pins_RAMPS_PLUS.h +++ b/Marlin/src/pins/ramps/pins_RAMPS_PLUS.h @@ -23,10 +23,6 @@ /** * Arduino Mega with RAMPS v1.4Plus, also known as 3DYMY version, pin assignments - * The differences to the RAMPS v1.4 are: - * - Swap heater E0 with E1 - * - Swap pins 8 and 10. Bed/Fan/Hotend as labeled on the board are on pins 8/9/10. - * - Change pins 16->42, 17->44 and 29->53 used for display. * * Applies to the following boards: * @@ -35,6 +31,11 @@ * RAMPS_PLUS_EFF (Extruder, Fan, Fan) * RAMPS_PLUS_EEF (Extruder, Extruder, Fan) * RAMPS_PLUS_SF (Spindle, Controller Fan) + * + * Differences from RAMPS v1.4: + * - Swap heater E0 with E1 + * - Swap pins 8 and 10. Bed/Fan/Hotend as labeled on the board are on pins 8/9/10. + * - Change EXP1/2 pins */ #include "env_validate.h" @@ -62,15 +63,32 @@ #define E1_ENABLE_PIN 24 #define E1_CS_PIN -1 -#include "pins_RAMPS.h" +/** 3DYMY Expansion Headers + * ------ ------ + * 37 |10 9 | 35 (MISO) 50 |10 9 | 52 (SCK) + * 31 | 8 7 | 41 29 | 8 7 | 53 + * 33 6 5 | 23 25 6 5 | 51 (MOSI) + * 42 | 4 3 | 44 49 | 4 3 | 27 + * GND | 2 1 | 5V GND | 2 1 | -- + * ------ ------ + * EXP1 EXP2 + */ +#define EXP1_03_PIN 44 +#define EXP1_04_PIN 42 +#define EXP1_05_PIN 23 +#define EXP1_06_PIN 33 +#define EXP1_07_PIN 41 +#define EXP1_08_PIN 31 +#define EXP1_09_PIN 35 +#define EXP1_10_PIN 37 -#if IS_ULTRA_LCD && NONE(REPRAPWORLD_GRAPHICAL_LCD, CR10_STOCKDISPLAY) && !BOTH(IS_NEWPANEL, PANEL_ONE) - #if DISABLED(MKS_12864OLED) || ENABLED(MKS_12864OLED_SSD1306) - #undef LCD_PINS_RS - #define LCD_PINS_RS 42 // 3DYMY boards pin 16 -> 42 - #undef LCD_PINS_ENABLE - #define LCD_PINS_ENABLE 44 // 3DYMY boards pin 17 -> 44 - #endif - #undef LCD_PINS_D7 - #define LCD_PINS_D7 53 // 3DYMY boards pin 29 -> 53 -#endif +#define EXP2_03_PIN 27 +#define EXP2_04_PIN 49 +#define EXP2_05_PIN 51 +#define EXP2_06_PIN 25 +#define EXP2_07_PIN 53 +#define EXP2_08_PIN 29 +#define EXP2_09_PIN 52 +#define EXP2_10_PIN 50 + +#include "pins_RAMPS.h" From 18e1128f70136ef81aadd29622ddf3577d9739ab Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 18 Jan 2022 03:18:37 -0600 Subject: [PATCH 389/532] =?UTF-8?q?=F0=9F=93=8C=20RAMPS=20AUX=201-2=20head?= =?UTF-8?q?ers=20(#23544)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/ramps/pins_RAMPS.h | 110 +++++++++++++++++------------ 1 file changed, 65 insertions(+), 45 deletions(-) diff --git a/Marlin/src/pins/ramps/pins_RAMPS.h b/Marlin/src/pins/ramps/pins_RAMPS.h index 121fb1b045..d647ec491b 100644 --- a/Marlin/src/pins/ramps/pins_RAMPS.h +++ b/Marlin/src/pins/ramps/pins_RAMPS.h @@ -422,6 +422,28 @@ #define E_MUX2_PIN 44 // E1_CS_PIN #endif +// +// AUX1 : 5V GND D2 D1 +// 5V GND A3 A4 + +#define AUX1_05_PIN 57 // (A3) +#define AUX1_06_PIN 2 +#define AUX1_07_PIN 58 // (A4) +#define AUX1_08_PIN 1 + +// +// AUX2 : GND A9 D40 D42 A11 +// VCC A5 A10 D44 A12 + +#define AUX2_03_PIN 59 // (A5) +#define AUX2_04_PIN 63 // (A9) +#define AUX2_05_PIN 64 // (A10) +#define AUX2_06_PIN 40 +#define AUX2_07_PIN 44 +#define AUX2_08_PIN 42 +#define AUX2_09_PIN 66 // (A12) +#define AUX2_10_PIN 65 // (A11) + // // AUX3 : GND D52 D50 5V // NC D53 D51 D49 @@ -507,12 +529,12 @@ #elif BOTH(IS_NEWPANEL, PANEL_ONE) - #define LCD_PINS_RS 40 - #define LCD_PINS_ENABLE 42 - #define LCD_PINS_D4 65 - #define LCD_PINS_D5 66 - #define LCD_PINS_D6 44 - #define LCD_PINS_D7 64 + #define LCD_PINS_RS AUX2_06_PIN + #define LCD_PINS_ENABLE AUX2_08_PIN + #define LCD_PINS_D4 AUX2_10_PIN + #define LCD_PINS_D5 AUX2_09_PIN + #define LCD_PINS_D6 AUX2_07_PIN + #define LCD_PINS_D7 AUX2_05_PIN #elif ENABLED(TFTGLCD_PANEL_SPI) @@ -533,12 +555,12 @@ #elif ENABLED(ZONESTAR_LCD) #error "CAUTION! ZONESTAR_LCD on RAMPS requires wiring modifications. It plugs into AUX2 but GND and 5V need to be swapped. Comment out this line to continue." - #define LCD_PINS_RS 64 - #define LCD_PINS_ENABLE 44 - #define LCD_PINS_D4 63 - #define LCD_PINS_D5 40 - #define LCD_PINS_D6 42 - #define LCD_PINS_D7 65 + #define LCD_PINS_RS AUX2_05_PIN + #define LCD_PINS_ENABLE AUX2_07_PIN + #define LCD_PINS_D4 AUX2_04_PIN + #define LCD_PINS_D5 AUX2_06_PIN + #define LCD_PINS_D6 AUX2_08_PIN + #define LCD_PINS_D7 AUX2_10_PIN #else @@ -570,8 +592,8 @@ // Buttons attached to a shift register // Not wired yet //#define SHIFT_CLK_PIN 38 - //#define SHIFT_LD_PIN 42 - //#define SHIFT_OUT_PIN 40 + //#define SHIFT_LD_PIN AUX2_08_PIN + //#define SHIFT_OUT_PIN AUX2_06_PIN //#define SHIFT_EN_PIN EXP1_08_PIN #endif @@ -612,10 +634,10 @@ #elif ENABLED(REPRAPWORLD_GRAPHICAL_LCD) - #define BTN_EN1 64 - #define BTN_EN2 59 - #define BTN_ENC 63 - #define SD_DETECT_PIN 42 + #define BTN_EN1 AUX2_05_PIN + #define BTN_EN2 AUX2_03_PIN + #define BTN_ENC AUX2_04_PIN + #define SD_DETECT_PIN AUX2_08_PIN #elif ENABLED(LCD_I2C_PANELOLU2) @@ -627,8 +649,8 @@ #elif ENABLED(LCD_I2C_VIKI) - #define BTN_EN1 40 // https://files.panucatt.com/datasheets/viki_wiring_diagram.pdf explains 40/42. - #define BTN_EN2 42 + #define BTN_EN1 AUX2_06_PIN // https://files.panucatt.com/datasheets/viki_wiring_diagram.pdf explains AUX2-06 and AUX2-08. + #define BTN_EN2 AUX2_08_PIN #define BTN_ENC -1 #define LCD_SDSS SDSS @@ -636,17 +658,17 @@ #elif ANY(VIKI2, miniVIKI) - #define DOGLCD_CS 45 - #define DOGLCD_A0 44 + #define DOGLCD_CS AUX4_05_PIN + #define DOGLCD_A0 AUX2_07_PIN #define LCD_SCREEN_ROT_180 #define BEEPER_PIN EXP2_06_PIN - #define STAT_LED_RED_PIN 32 + #define STAT_LED_RED_PIN AUX4_03_PIN #define STAT_LED_BLUE_PIN EXP1_09_PIN #define BTN_EN1 22 #define BTN_EN2 7 - #define BTN_ENC 39 + #define BTN_ENC AUX4_08_PIN #define SD_DETECT_PIN -1 // Pin 49 for display SD interface, 72 for easy adapter board #define KILL_PIN EXP2_08_PIN @@ -723,19 +745,18 @@ #elif ENABLED(MINIPANEL) - #define BEEPER_PIN 42 - // not connected to a pin - #define LCD_BACKLIGHT_PIN 65 // backlight LED on A11/D65 + #define BEEPER_PIN AUX2_08_PIN + #define LCD_BACKLIGHT_PIN AUX2_10_PIN - #define DOGLCD_A0 44 - #define DOGLCD_CS 66 + #define DOGLCD_A0 AUX2_07_PIN + #define DOGLCD_CS AUX2_09_PIN - #define BTN_EN1 40 - #define BTN_EN2 63 - #define BTN_ENC 59 + #define BTN_EN1 AUX2_06_PIN + #define BTN_EN2 AUX2_04_PIN + #define BTN_ENC AUX2_03_PIN - #define SD_DETECT_PIN EXP2_04_PIN - #define KILL_PIN 64 + #define SD_DETECT_PIN AUX3_07_PIN + #define KILL_PIN AUX2_05_PIN #elif ENABLED(ZONESTAR_LCD) @@ -764,11 +785,10 @@ #define BEEPER_PIN EXP2_06_PIN - // Buttons are directly attached to AUX-2 - #if ENABLED(PANEL_ONE) - #define BTN_EN1 59 // AUX2 PIN 3 - #define BTN_EN2 63 // AUX2 PIN 4 - #define BTN_ENC EXP2_04_PIN + #if ENABLED(PANEL_ONE) // Buttons connect directly to AUX-2 + #define BTN_EN1 AUX2_03_PIN + #define BTN_EN2 AUX2_04_PIN + #define BTN_ENC AUX3_07_PIN #else #define BTN_EN1 EXP1_10_PIN #define BTN_EN2 EXP1_09_PIN @@ -781,17 +801,17 @@ #endif // HAS_WIRED_LCD #if IS_RRW_KEYPAD && !HAS_ADC_BUTTONS - #define SHIFT_OUT_PIN 40 - #define SHIFT_CLK_PIN 44 - #define SHIFT_LD_PIN 42 + #define SHIFT_OUT_PIN AUX2_06_PIN + #define SHIFT_CLK_PIN AUX2_07_PIN + #define SHIFT_LD_PIN AUX2_08_PIN #ifndef BTN_EN1 - #define BTN_EN1 64 + #define BTN_EN1 AUX2_05_PIN #endif #ifndef BTN_EN2 - #define BTN_EN2 59 + #define BTN_EN2 AUX2_03_PIN #endif #ifndef BTN_ENC - #define BTN_ENC 63 + #define BTN_ENC AUX2_04_PIN #endif #endif From 383afd79bc54ce6c07a3ad0ec8d968600ebbf372 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 19 Jan 2022 00:18:14 +0000 Subject: [PATCH 390/532] [cron] Bump distribution date (2022-01-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 7670da707c..bda58cb415 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 "2022-01-18" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 07c49cae10..15dc979f37 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 "2022-01-18" + #define STRING_DISTRIBUTION_DATE "2022-01-19" #endif /** From 0aea3ae058b0aa453268768114664b0ff9272604 Mon Sep 17 00:00:00 2001 From: John Lagonikas <39417467+zeleps@users.noreply.github.com> Date: Wed, 19 Jan 2022 10:13:47 +0200 Subject: [PATCH 391/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20conditional=20M81?= =?UTF-8?q?=20suicide=20(#23549)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/language.h | 2 ++ Marlin/src/feature/power.cpp | 10 +++++++--- Marlin/src/gcode/control/M80_M81.cpp | 5 ++++- Marlin/src/libs/MAX31865.cpp | 4 ++-- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h | 4 +++- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h | 4 +++- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_PRO.h | 4 +++- .../src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h | 4 +++- 8 files changed, 27 insertions(+), 10 deletions(-) diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h index c53ebdfbf8..8e0784f70d 100644 --- a/Marlin/src/core/language.h +++ b/Marlin/src/core/language.h @@ -105,6 +105,7 @@ #define STR_ENQUEUEING "enqueueing \"" #define STR_POWERUP "PowerUp" +#define STR_POWEROFF "PowerOff" #define STR_EXTERNAL_RESET " External Reset" #define STR_BROWNOUT_RESET " Brown out Reset" #define STR_WATCHDOG_RESET " Watchdog Reset" @@ -306,6 +307,7 @@ #define STR_Z_PROBE_OFFSET "Z-Probe Offset" #define STR_TEMPERATURE_UNITS "Temperature Units" #define STR_USER_THERMISTORS "User thermistors" +#define STR_DELAYED_POWEROFF "Delayed poweroff" // // Endstop Names used by Endstops::report_states diff --git a/Marlin/src/feature/power.cpp b/Marlin/src/feature/power.cpp index 0e4d5452e4..c2ed169aa8 100644 --- a/Marlin/src/feature/power.cpp +++ b/Marlin/src/feature/power.cpp @@ -24,7 +24,9 @@ * power.cpp - power control */ -#include "../inc/MarlinConfig.h" +#include "../inc/MarlinConfigPre.h" + +#if EITHER(PSU_CONTROL, AUTO_POWER_CONTROL) #include "power.h" #include "../module/planner.h" @@ -40,8 +42,6 @@ #include "../gcode/gcode.h" #endif -#if EITHER(PSU_CONTROL, AUTO_POWER_CONTROL) - Power powerManager; bool Power::psu_on; @@ -97,6 +97,10 @@ void Power::power_on() { * Processes any PSU_POWEROFF_GCODE and makes a PS_OFF_SOUND if enabled. */ void Power::power_off() { + SERIAL_ECHOLNPGM(STR_POWEROFF); + + TERN_(HAS_SUICIDE, suicide()); + if (!psu_on) return; #ifdef PSU_POWEROFF_GCODE diff --git a/Marlin/src/gcode/control/M80_M81.cpp b/Marlin/src/gcode/control/M80_M81.cpp index cbb3c85f40..6a3788c4a9 100644 --- a/Marlin/src/gcode/control/M80_M81.cpp +++ b/Marlin/src/gcode/control/M80_M81.cpp @@ -107,7 +107,10 @@ void GcodeSuite::M81() { } #endif - if (delayed_power_off) return; + if (delayed_power_off) { + SERIAL_ECHOLNPGM(STR_DELAYED_POWEROFF); + return; + } #if HAS_SUICIDE suicide(); diff --git a/Marlin/src/libs/MAX31865.cpp b/Marlin/src/libs/MAX31865.cpp index 6cc8ffca39..1cafbe5f17 100644 --- a/Marlin/src/libs/MAX31865.cpp +++ b/Marlin/src/libs/MAX31865.cpp @@ -300,14 +300,14 @@ uint16_t MAX31865::readRaw() { enableBias(); nextEventStamp = millis() + 11; // wait at least 11msec before enabling 1shot nextEvent = SETUP_1_SHOT_MODE; - DEBUG_ECHOLN("MAX31865 bias voltage enabled"); + DEBUG_ECHOLNPGM("MAX31865 bias voltage enabled"); break; case SETUP_1_SHOT_MODE: oneShot(); nextEventStamp = millis() + 65; // wait at least 65msec before reading RTD register nextEvent = READ_RTD_REG; - DEBUG_ECHOLN("MAX31865 1 shot mode enabled"); + DEBUG_ECHOLNPGM("MAX31865 1 shot mode enabled"); break; case READ_RTD_REG: { diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h index 592d585982..5fdd37b104 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h @@ -193,7 +193,9 @@ // #if ENABLED(MKS_PWC) #if ENABLED(TFT_LVGL_UI) - #undef PSU_CONTROL + #if ENABLED(PSU_CONTROL) + #error "PSU_CONTROL is incompatible with MKS_PWC plus TFT_LVGL_UI." + #endif #undef MKS_PWC #define SUICIDE_PIN PB2 #define SUICIDE_PIN_STATE LOW diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h index 859529c2c3..e057e13c25 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_common.h @@ -118,7 +118,9 @@ // #if ENABLED(MKS_PWC) #if ENABLED(TFT_LVGL_UI) - #undef PSU_CONTROL + #if ENABLED(PSU_CONTROL) + #error "PSU_CONTROL is incompatible with MKS_PWC plus TFT_LVGL_UI." + #endif #undef MKS_PWC #define SUICIDE_PIN PB2 #define SUICIDE_PIN_STATE LOW diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_PRO.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_PRO.h index a738a4faa2..53f207adb7 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_PRO.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_PRO.h @@ -185,7 +185,9 @@ // #if ENABLED(MKS_PWC) #if ENABLED(TFT_LVGL_UI) - #undef PSU_CONTROL + #if ENABLED(PSU_CONTROL) + #error "PSU_CONTROL is incompatible with MKS_PWC plus TFT_LVGL_UI." + #endif #undef MKS_PWC #define SUICIDE_PIN PG11 #define SUICIDE_PIN_STATE LOW diff --git a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h index 2c191946cd..5b2c1b0f43 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h @@ -165,7 +165,9 @@ // #if ENABLED(MKS_PWC) #if ENABLED(TFT_LVGL_UI) - #undef PSU_CONTROL + #if ENABLED(PSU_CONTROL) + #error "PSU_CONTROL is incompatible with MKS_PWC plus TFT_LVGL_UI." + #endif #undef MKS_PWC #define SUICIDE_PIN PB2 #define SUICIDE_PIN_STATE LOW From fd595aa01bcd139352055f4dca771c193aa35d14 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 19 Jan 2022 02:20:32 -0600 Subject: [PATCH 392/532] =?UTF-8?q?=F0=9F=8E=A8=20Misc.=20style=20and=20cl?= =?UTF-8?q?eanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/common/dwin_api.cpp | 2 +- Marlin/src/module/settings.cpp | 4 +--- Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h | 2 +- Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h | 2 +- Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_common.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V4.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h | 2 +- 7 files changed, 7 insertions(+), 9 deletions(-) diff --git a/Marlin/src/lcd/e3v2/common/dwin_api.cpp b/Marlin/src/lcd/e3v2/common/dwin_api.cpp index d89b22a7aa..f6780bba6c 100644 --- a/Marlin/src/lcd/e3v2/common/dwin_api.cpp +++ b/Marlin/src/lcd/e3v2/common/dwin_api.cpp @@ -21,7 +21,7 @@ */ #include "../../../inc/MarlinConfigPre.h" -#if EITHER(HAS_DWIN_E3V2, IS_DWIN_MARLINUI) +#if HAS_DWIN_E3V2 || IS_DWIN_MARLINUI #include "dwin_api.h" #include "dwin_set.h" diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 750aab74fd..baab8b6dec 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -1990,9 +1990,7 @@ void MarlinSettings::postprocess() { _FIELD_TEST(lcd_contrast); uint8_t lcd_contrast; EEPROM_READ(lcd_contrast); - if (!validating) { - TERN_(HAS_LCD_CONTRAST, ui.set_contrast(lcd_contrast)); - } + TERN_(HAS_LCD_CONTRAST, if (!validating) ui.set_contrast(lcd_contrast)); } // diff --git a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h index 03a0360b6e..df6ae8c017 100644 --- a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h +++ b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h @@ -272,7 +272,7 @@ #define EXP2_09_PIN P0_15 #define EXP2_10_PIN P0_17 -#if EITHER(HAS_DWIN_E3V2, IS_DWIN_MARLINUI) +#if HAS_DWIN_E3V2 || IS_DWIN_MARLINUI // RET6 DWIN ENCODER LCD #define BTN_ENC EXP1_06_PIN diff --git a/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h b/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h index 0916138361..56ee7fa732 100644 --- a/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h +++ b/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h @@ -203,7 +203,7 @@ #define EXP1_09_PIN P0_16 #define EXP1_10_PIN P2_08 -#if EITHER(HAS_DWIN_E3V2, IS_DWIN_MARLINUI) +#if HAS_DWIN_E3V2 || IS_DWIN_MARLINUI #error "Ender-3 V2 display requires a custom cable with TX = P0_15, RX = P0_16. Comment out this line to continue." /** 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 bbf38e414f..a8ba9049ef 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 @@ -136,7 +136,7 @@ #define EXP1_3 PB7 #endif -#if EITHER(HAS_DWIN_E3V2, IS_DWIN_MARLINUI) +#if HAS_DWIN_E3V2 || IS_DWIN_MARLINUI /** * ------ ------ ------ * (ENT) |10 9 | (BEEP) |10 9 | |10 9 | diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h index cb7e784751..dea20642b1 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h @@ -187,7 +187,7 @@ #error "Define RET6_12864_LCD or VET6_12864_LCD to select pins for CR10_STOCKDISPLAY with the Creality V4 controller." #endif -#elif EITHER(HAS_DWIN_E3V2, IS_DWIN_MARLINUI) +#elif HAS_DWIN_E3V2 || IS_DWIN_MARLINUI // RET6 DWIN ENCODER LCD #define BTN_ENC PB14 diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h index 4941949f81..6ec5de4ba3 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h @@ -216,7 +216,7 @@ #define BTN_EN1 EXP1_08_PIN #define BTN_EN2 EXP1_06_PIN -#elif EITHER(HAS_DWIN_E3V2, IS_DWIN_MARLINUI) +#elif HAS_DWIN_E3V2 || IS_DWIN_MARLINUI // RET6 DWIN ENCODER LCD #define BTN_ENC PB14 From 5179f55bf9147a52cb63281a04c99ac79c9e3143 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 19 Jan 2022 03:27:10 -0600 Subject: [PATCH 393/532] =?UTF-8?q?=F0=9F=8E=A8=20LCD=5FSCREEN=5FROT=5F*?= =?UTF-8?q?=20=3D>=20LCD=5FSCREEN=5FROTATE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/SanityCheck.h | 10 ++++++-- Marlin/src/lcd/dogm/marlinui_DOGM.cpp | 10 +++++--- Marlin/src/pins/linux/pins_RAMPS_LINUX.h | 19 +++++---------- Marlin/src/pins/lpc1768/pins_MKS_SBASE.h | 6 +---- Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h | 10 +++----- Marlin/src/pins/lpc1769/pins_AZTEEG_X5_MINI.h | 10 +++----- Marlin/src/pins/mega/pins_CNCONTROLS_12.h | 3 ++- Marlin/src/pins/mega/pins_MEGACONTROLLER.h | 9 +++----- Marlin/src/pins/rambo/pins_RAMBO.h | 3 ++- Marlin/src/pins/rambo/pins_SCOOVO_X9H.h | 5 ++-- Marlin/src/pins/ramps/pins_K8800.h | 3 +-- Marlin/src/pins/ramps/pins_RAMPS.h | 7 ++---- Marlin/src/pins/ramps/pins_TT_OSCAR.h | 23 +++++++------------ Marlin/src/pins/samd/pins_RAMPS_144.h | 19 +++++---------- .../src/pins/sanguino/pins_SANGUINOLOLU_11.h | 6 +---- Marlin/src/pins/stm32f1/pins_CHITU3D.h | 11 ++++----- Marlin/src/pins/stm32f1/pins_FYSETC_AIO_II.h | 4 +--- Marlin/src/pins/stm32f1/pins_FYSETC_CHEETAH.h | 4 +--- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h | 2 +- .../pins/stm32f1/pins_MKS_ROBIN_E3_common.h | 2 +- .../src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h | 2 +- Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h | 2 +- .../stm32f4/pins_MKS_ROBIN_NANO_V3_common.h | 2 +- Marlin/src/pins/teensy2/pins_PRINTRBOARD.h | 3 ++- .../src/pins/teensy2/pins_PRINTRBOARD_REVF.h | 3 ++- 25 files changed, 72 insertions(+), 106 deletions(-) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index f44ef43f09..a9744a09c0 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -601,6 +601,12 @@ #error "PROBE_TEMP_COMPENSATION is now set using the PTC_PROBE, PTC_BED, PTC_HOTEND options." #elif defined(BTC_PROBE_TEMP) #error "BTC_PROBE_TEMP is now PTC_PROBE_TEMP." +#elif defined(LCD_SCREEN_ROT_90) + #error "LCD_SCREEN_ROT_90 is now LCD_SCREEN_ROTATE with a value of 90." +#elif defined(LCD_SCREEN_ROT_180) + #error "LCD_SCREEN_ROT_180 is now LCD_SCREEN_ROTATE with a value of 180." +#elif defined(LCD_SCREEN_ROT_270) + #error "LCD_SCREEN_ROT_270 is now LCD_SCREEN_ROTATE with a value of 270." #endif #if MB(DUE3DOM_MINI) && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD) @@ -2758,8 +2764,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "Please enable only one of TFT_INTERFACE_SPI or TFT_INTERFACE_SPI." #endif -#if MANY(LCD_SCREEN_ROT_0, LCD_SCREEN_ROT_90, LCD_SCREEN_ROT_180, LCD_SCREEN_ROT_270) - #error "Please enable only one LCD_SCREEN_ROT_* option: 0, 90, 180, or 270." +#if defined(LCD_SCREEN_ROTATE) && LCD_SCREEN_ROTATE != 0 && LCD_SCREEN_ROTATE != 90 && LCD_SCREEN_ROTATE != 180 && LCD_SCREEN_ROTATE != 270 + #error "LCD_SCREEN_ROTATE must be 0, 90, 180, or 270." #endif #if MANY(TFT_RES_320x240, TFT_RES_480x272, TFT_RES_480x320, TFT_RES_1024x600) diff --git a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp index 59c74148ad..82c9b9a340 100644 --- a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp +++ b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp @@ -294,9 +294,13 @@ void MarlinUI::init_lcd() { TERN_(HAS_LCD_CONTRAST, refresh_contrast()); - TERN_(LCD_SCREEN_ROT_90, u8g.setRot90()); - TERN_(LCD_SCREEN_ROT_180, u8g.setRot180()); - TERN_(LCD_SCREEN_ROT_270, u8g.setRot270()); + #if LCD_SCREEN_ROTATE == 90 + u8g.setRot90(); + #elif LCD_SCREEN_ROTATE == 180 + u8g.setRot180(); + #elif LCD_SCREEN_ROTATE == 270 + u8g.setRot270(); + #endif update_language_font(); } diff --git a/Marlin/src/pins/linux/pins_RAMPS_LINUX.h b/Marlin/src/pins/linux/pins_RAMPS_LINUX.h index acf2d31cf6..372f967652 100644 --- a/Marlin/src/pins/linux/pins_RAMPS_LINUX.h +++ b/Marlin/src/pins/linux/pins_RAMPS_LINUX.h @@ -584,7 +584,6 @@ #define DOGLCD_CS 45 #define DOGLCD_A0 44 - #define LCD_SCREEN_ROT_180 #define BEEPER_PIN 33 #define STAT_LED_RED_PIN 32 @@ -597,6 +596,8 @@ #define SD_DETECT_PIN -1 // Pin 49 for display sd interface, 72 for easy adapter board #define KILL_PIN 31 + #define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) #define DOGLCD_CS 29 @@ -618,12 +619,6 @@ #define DOGLCD_A0 27 #define DOGLCD_CS 25 - // GLCD features - // Uncomment screen orientation - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 - #define BEEPER_PIN 37 // not connected to a pin #define LCD_BACKLIGHT_PIN 65 // backlight LED on A11/D65 @@ -635,6 +630,8 @@ #define SD_DETECT_PIN 49 #define KILL_PIN 64 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #elif ENABLED(MINIPANEL) #define BEEPER_PIN 42 @@ -644,12 +641,6 @@ #define DOGLCD_A0 44 #define DOGLCD_CS 66 - // GLCD features - // Uncomment screen orientation - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 - #define BTN_EN1 40 #define BTN_EN2 63 #define BTN_ENC 59 @@ -657,6 +648,8 @@ #define SD_DETECT_PIN 49 #define KILL_PIN 64 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #elif ENABLED(ZONESTAR_LCD) #define ADC_KEYPAD_PIN 12 diff --git a/Marlin/src/pins/lpc1768/pins_MKS_SBASE.h b/Marlin/src/pins/lpc1768/pins_MKS_SBASE.h index 406e65d295..7f9e530f3c 100644 --- a/Marlin/src/pins/lpc1768/pins_MKS_SBASE.h +++ b/Marlin/src/pins/lpc1768/pins_MKS_SBASE.h @@ -278,11 +278,7 @@ #endif #elif ENABLED(MINIPANEL) - // GLCD features - // Uncomment screen orientation - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #endif #endif // HAS_WIRED_LCD diff --git a/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h b/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h index bf214761d3..ee9d0e8c7a 100644 --- a/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h +++ b/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h @@ -348,8 +348,6 @@ #endif #if ANY(VIKI2, miniVIKI) - //#define LCD_SCREEN_ROT_180 - #define DOGLCD_CS P0_16 // (16) #define DOGLCD_A0 P2_06 // (59) J3-8 & AUX-2 #define DOGLCD_SCK SD_SCK_PIN @@ -358,6 +356,8 @@ #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 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #else #if ENABLED(FYSETC_MINI_12864) @@ -406,11 +406,7 @@ #endif #if ENABLED(MINIPANEL) - // GLCD features - // Uncomment screen orientation - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #endif #endif // HAS_WIRED_LCD diff --git a/Marlin/src/pins/lpc1769/pins_AZTEEG_X5_MINI.h b/Marlin/src/pins/lpc1769/pins_AZTEEG_X5_MINI.h index f3ecebde46..4fbc19eed8 100644 --- a/Marlin/src/pins/lpc1769/pins_AZTEEG_X5_MINI.h +++ b/Marlin/src/pins/lpc1769/pins_AZTEEG_X5_MINI.h @@ -155,8 +155,6 @@ #endif #if ANY(VIKI2, miniVIKI) - //#define LCD_SCREEN_ROT_180 - #define BEEPER_PIN P1_30 // (37) may change if cable changes #define DOGLCD_CS P0_26 // (63) J5-3 & AUX-2 #define DOGLCD_SCK SD_SCK_PIN @@ -164,6 +162,8 @@ #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 + + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #else #if IS_ULTIPANEL #define LCD_PINS_D5 P1_17 // (71) ENET_MDIO @@ -180,11 +180,7 @@ #endif #if ENABLED(MINIPANEL) - // GLCD features - // Uncomment screen orientation - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #endif #endif diff --git a/Marlin/src/pins/mega/pins_CNCONTROLS_12.h b/Marlin/src/pins/mega/pins_CNCONTROLS_12.h index f1200e0901..137650eeed 100644 --- a/Marlin/src/pins/mega/pins_CNCONTROLS_12.h +++ b/Marlin/src/pins/mega/pins_CNCONTROLS_12.h @@ -147,7 +147,6 @@ #define DOGLCD_CS 35 #define DOGLCD_MOSI 48 #define DOGLCD_SCK 49 -#define LCD_SCREEN_ROT_180 // The encoder and click button #define BTN_EN1 36 @@ -164,3 +163,5 @@ #define STAT_LED_BLUE_PIN -1 #define STAT_LED_RED_PIN 10 // TOOL_0_PWM_PIN + +#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 diff --git a/Marlin/src/pins/mega/pins_MEGACONTROLLER.h b/Marlin/src/pins/mega/pins_MEGACONTROLLER.h index 0af37bb217..dc9fa52af8 100644 --- a/Marlin/src/pins/mega/pins_MEGACONTROLLER.h +++ b/Marlin/src/pins/mega/pins_MEGACONTROLLER.h @@ -139,17 +139,12 @@ #if ENABLED(MINIPANEL) #define BEEPER_PIN 46 - // Pins for DOGM SPI LCD Support + #define DOGLCD_A0 47 #define DOGLCD_CS 45 #define LCD_BACKLIGHT_PIN 44 // backlight LED on PA3 #define KILL_PIN 12 - // GLCD features - // Uncomment screen orientation - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 #define BTN_EN1 48 #define BTN_EN2 11 @@ -157,6 +152,8 @@ #define SD_DETECT_PIN 49 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #endif // MINIPANEL // diff --git a/Marlin/src/pins/rambo/pins_RAMBO.h b/Marlin/src/pins/rambo/pins_RAMBO.h index 41e59c1b22..f27bced623 100644 --- a/Marlin/src/pins/rambo/pins_RAMBO.h +++ b/Marlin/src/pins/rambo/pins_RAMBO.h @@ -214,7 +214,6 @@ #define DOGLCD_A0 70 #define DOGLCD_CS 71 - #define LCD_SCREEN_ROT_180 #define BTN_EN1 85 #define BTN_EN2 84 @@ -225,6 +224,8 @@ #define STAT_LED_RED_PIN 22 #define STAT_LED_BLUE_PIN 32 + #define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #else // !VIKI2 && !miniVIKI #define BEEPER_PIN 79 // AUX-4 diff --git a/Marlin/src/pins/rambo/pins_SCOOVO_X9H.h b/Marlin/src/pins/rambo/pins_SCOOVO_X9H.h index c2a691a3b7..4c2645e64b 100644 --- a/Marlin/src/pins/rambo/pins_SCOOVO_X9H.h +++ b/Marlin/src/pins/rambo/pins_SCOOVO_X9H.h @@ -148,10 +148,11 @@ // Pins for DOGM SPI LCD Support #define DOGLCD_A0 70 #define DOGLCD_CS 71 - #define LCD_SCREEN_ROT_180 #define SD_DETECT_PIN -1 // Pin 72 if using easy adapter board #define STAT_LED_RED_PIN 22 #define STAT_LED_BLUE_PIN 32 -#endif // VIKI2/miniVIKI + + #define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 +#endif diff --git a/Marlin/src/pins/ramps/pins_K8800.h b/Marlin/src/pins/ramps/pins_K8800.h index 9bc74943b4..653d317629 100644 --- a/Marlin/src/pins/ramps/pins_K8800.h +++ b/Marlin/src/pins/ramps/pins_K8800.h @@ -30,8 +30,6 @@ #define BOARD_INFO_NAME "K8800" #define DEFAULT_MACHINE_NAME "Vertex Delta" -//#define LCD_SCREEN_ROT_180 - // // Limit Switches // @@ -110,6 +108,7 @@ #define LCD_CONTRAST_MIN 0 #define LCD_CONTRAST_MAX 100 #define DEFAULT_LCD_CONTRAST 30 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #if IS_NEWPANEL #define BTN_EN1 17 diff --git a/Marlin/src/pins/ramps/pins_RAMPS.h b/Marlin/src/pins/ramps/pins_RAMPS.h index d647ec491b..94e6ccdcbe 100644 --- a/Marlin/src/pins/ramps/pins_RAMPS.h +++ b/Marlin/src/pins/ramps/pins_RAMPS.h @@ -513,10 +513,7 @@ #if HAS_WIRED_LCD - // Uncomment screen orientation - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 // // LCD Display output pins @@ -660,7 +657,7 @@ #define DOGLCD_CS AUX4_05_PIN #define DOGLCD_A0 AUX2_07_PIN - #define LCD_SCREEN_ROT_180 + #define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #define BEEPER_PIN EXP2_06_PIN #define STAT_LED_RED_PIN AUX4_03_PIN diff --git a/Marlin/src/pins/ramps/pins_TT_OSCAR.h b/Marlin/src/pins/ramps/pins_TT_OSCAR.h index a07892914e..277b1af2de 100644 --- a/Marlin/src/pins/ramps/pins_TT_OSCAR.h +++ b/Marlin/src/pins/ramps/pins_TT_OSCAR.h @@ -402,7 +402,6 @@ #define DOGLCD_CS 45 #define DOGLCD_A0 44 - #define LCD_SCREEN_ROT_180 #define BEEPER_PIN 33 #define STAT_LED_RED_PIN 32 @@ -416,6 +415,8 @@ #define SD_DETECT_PIN -1 // Pin 49 for display SD interface, 72 for easy adapter board //#define KILL_PIN 31 + #define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) #define DOGLCD_CS 29 @@ -437,13 +438,6 @@ #define DOGLCD_A0 27 #define DOGLCD_CS 25 - // GLCD features - //#define LCD_CONTRAST_INIT 190 - // Uncomment screen orientation - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 - #define BEEPER_PIN 37 #define LCD_BACKLIGHT_PIN 65 // backlight LED on A11/D65 @@ -455,6 +449,9 @@ #define SD_DETECT_PIN 49 //#define KILL_PIN 64 + //#define LCD_CONTRAST_INIT 190 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #elif ENABLED(MINIPANEL) #define BEEPER_PIN 42 @@ -464,13 +461,6 @@ #define DOGLCD_A0 44 #define DOGLCD_CS 66 - // GLCD features - //#define LCD_CONTRAST_INIT 190 - // Uncomment screen orientation - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 - #define BTN_EN1 40 #define BTN_EN2 63 #define BTN_ENC 59 @@ -479,6 +469,9 @@ #define SD_DETECT_PIN 49 //#define KILL_PIN 64 + //#define LCD_CONTRAST_INIT 190 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #else // Beeper on AUX-4 diff --git a/Marlin/src/pins/samd/pins_RAMPS_144.h b/Marlin/src/pins/samd/pins_RAMPS_144.h index 449ae0273e..406162c089 100644 --- a/Marlin/src/pins/samd/pins_RAMPS_144.h +++ b/Marlin/src/pins/samd/pins_RAMPS_144.h @@ -413,7 +413,6 @@ // TO TEST //#define DOGLCD_CS 45 //#define DOGLCD_A0 44 - //#define LCD_SCREEN_ROT_180 //#define BEEPER_PIN 33 //#define STAT_LED_RED_PIN 32 @@ -426,6 +425,8 @@ //#define SD_DETECT_PIN -1 // Pin 49 for display SD interface, 72 for easy adapter board //#define KILL_PIN 31 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) // TO TEST @@ -460,18 +461,14 @@ //#define DOGLCD_A0 27 //#define DOGLCD_CS 25 - // GLCD features - // Uncomment screen orientation - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 - // not connected to a pin //#define LCD_BACKLIGHT_PIN 57 // backlight LED on A11/D? (Mega/Due:65 - AGCM4:57) //#define BTN_EN1 31 //#define BTN_EN2 33 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #elif ENABLED(FYSETC_MINI_12864) // From https://wiki.fysetc.com/Mini12864_Panel/?fbclid=IwAR1FyjuNdVOOy9_xzky3qqo_WeM5h-4gpRnnWhQr_O1Ef3h0AFnFXmCehK8 @@ -518,12 +515,6 @@ //#define DOGLCD_A0 44 //#define DOGLCD_CS 58 // Mega/Due:66 - AGCM4:58 - // GLCD features - // Uncomment screen orientation - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 - //#define BTN_EN1 40 //#define BTN_EN2 55 // Mega/Due:63 - AGCM4:55 //#define BTN_ENC 72 // Mega/Due:59 - AGCM4:72 @@ -531,6 +522,8 @@ //#define SD_DETECT_PIN 49 //#define KILL_PIN 56 // Mega/Due:64 - AGCM4:56 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #elif ENABLED(ZONESTAR_LCD) // TO TEST diff --git a/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h b/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h index ba9cc350a8..8471d1c7f5 100644 --- a/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h +++ b/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h @@ -207,11 +207,7 @@ #endif - // Uncomment screen orientation - //#define LCD_SCREEN_ROT_0 - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #elif ENABLED(ZONESTAR_LCD) // For the Tronxy Melzi boards diff --git a/Marlin/src/pins/stm32f1/pins_CHITU3D.h b/Marlin/src/pins/stm32f1/pins_CHITU3D.h index 7d30d6efad..1f56e59a23 100644 --- a/Marlin/src/pins/stm32f1/pins_CHITU3D.h +++ b/Marlin/src/pins/stm32f1/pins_CHITU3D.h @@ -178,7 +178,6 @@ // Pins for DOGM SPI LCD Support #define DOGLCD_A0 PC12 // 44 #define DOGLCD_CS PC13 // 45 - #define LCD_SCREEN_ROT_180 #define BTN_EN1 PB6 // 22 #define BTN_EN2 PA7 // 7 @@ -192,6 +191,8 @@ #define STAT_LED_RED_PIN PC0 // 32 #define STAT_LED_BLUE_PIN PC3 // 35 + #define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) #define BTN_EN1 PC3 // 35 #define BTN_EN2 PC5 // 37 @@ -214,11 +215,7 @@ #define SDSS PD5 // 53 #define KILL_PIN PE0 // 64 - // GLCD features - // Uncomment screen orientation - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 + // The encoder and click button #define BTN_EN1 PC8 // 40 #define BTN_EN2 PD15 // 63 @@ -226,6 +223,8 @@ // not connected to a pin #define SD_DETECT_PIN PD1 // 49 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #else // Beeper on AUX-4 diff --git a/Marlin/src/pins/stm32f1/pins_FYSETC_AIO_II.h b/Marlin/src/pins/stm32f1/pins_FYSETC_AIO_II.h index 7ffe67c4f8..de91db22d5 100644 --- a/Marlin/src/pins/stm32f1/pins_FYSETC_AIO_II.h +++ b/Marlin/src/pins/stm32f1/pins_FYSETC_AIO_II.h @@ -166,9 +166,7 @@ #endif //#define LCD_CONTRAST_INIT 190 - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #endif diff --git a/Marlin/src/pins/stm32f1/pins_FYSETC_CHEETAH.h b/Marlin/src/pins/stm32f1/pins_FYSETC_CHEETAH.h index 0c2f2fc5db..e0f906bf9e 100644 --- a/Marlin/src/pins/stm32f1/pins_FYSETC_CHEETAH.h +++ b/Marlin/src/pins/stm32f1/pins_FYSETC_CHEETAH.h @@ -163,13 +163,11 @@ #define DOGLCD_CS EXP1_04_PIN #define DOGLCD_SCK EXP1_05_PIN #define DOGLCD_MOSI EXP1_03_PIN - //#define LCD_SCREEN_ROT_90 - //#define LCD_SCREEN_ROT_180 - //#define LCD_SCREEN_ROT_270 #if EITHER(FYSETC_MINI_12864, U8GLIB_ST7920) #define FORCE_SOFT_SPI #endif + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #endif #define LCD_PINS_RS EXP1_04_PIN // CS -- SOFT SPI for ENDER3 LCD diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h index a51f28bf95..11d42ca6de 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h @@ -326,7 +326,7 @@ #if SD_CONNECTION_IS(ONBOARD) #define FORCE_SOFT_SPI #endif - //#define LCD_SCREEN_ROT_180 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #else // !MKS_MINI_12864 diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h index b0303861c9..14591eb781 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h @@ -207,7 +207,7 @@ #define DOGLCD_SCK EXP2_09_PIN #define FORCE_SOFT_SPI #define SOFTWARE_SPI - //#define LCD_SCREEN_ROT_180 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #else diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h index 5fdd37b104..40ce442e6c 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h @@ -352,7 +352,7 @@ #if SD_CONNECTION_IS(ONBOARD) #define FORCE_SOFT_SPI #endif - //#define LCD_SCREEN_ROT_180 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #else // !MKS_MINI_12864 diff --git a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h index 0e960a17e2..6e9e0e4b4f 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h @@ -363,7 +363,7 @@ #if SD_CONNECTION_IS(ONBOARD) #define FORCE_SOFT_SPI #endif - //#define LCD_SCREEN_ROT_180 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #else diff --git a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h index 5b2c1b0f43..b892affe68 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h @@ -349,7 +349,7 @@ #if SD_CONNECTION_IS(ONBOARD) #define FORCE_SOFT_SPI #endif - //#define LCD_SCREEN_ROT_180 + //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #else // !MKS_MINI_12864 diff --git a/Marlin/src/pins/teensy2/pins_PRINTRBOARD.h b/Marlin/src/pins/teensy2/pins_PRINTRBOARD.h index cb038fe737..c813287866 100644 --- a/Marlin/src/pins/teensy2/pins_PRINTRBOARD.h +++ b/Marlin/src/pins/teensy2/pins_PRINTRBOARD.h @@ -135,7 +135,6 @@ #define DOGLCD_A0 40 // F2 JP2-2 #define DOGLCD_CS 41 // F3 JP2-4 - #define LCD_SCREEN_ROT_180 #define BTN_EN1 2 // D2 TX1 JP2-5 #define BTN_EN2 3 // D3 RX1 JP2-7 @@ -146,6 +145,8 @@ #define STAT_LED_RED_PIN 12 // C2 JP11-14 #define STAT_LED_BLUE_PIN 10 // C0 JP11-12 + #define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #elif ENABLED(LCD_I2C_PANELOLU2) #define BTN_EN1 3 // D3 RX1 JP2-7 diff --git a/Marlin/src/pins/teensy2/pins_PRINTRBOARD_REVF.h b/Marlin/src/pins/teensy2/pins_PRINTRBOARD_REVF.h index 76b98ccbeb..1ac953c89f 100644 --- a/Marlin/src/pins/teensy2/pins_PRINTRBOARD_REVF.h +++ b/Marlin/src/pins/teensy2/pins_PRINTRBOARD_REVF.h @@ -212,7 +212,6 @@ #define BEEPER_PIN 8 // E0 JP11-10 #define DOGLCD_A0 40 // F2 JP2-2 #define DOGLCD_CS 41 // F3 JP2-4 - #define LCD_SCREEN_ROT_180 #define BTN_EN1 2 // D2 TX1 JP2-5 #define BTN_EN2 3 // D3 RX1 JP2-7 @@ -223,6 +222,8 @@ #define STAT_LED_RED_PIN 12 // C2 JP11-14 #define STAT_LED_BLUE_PIN 10 // C0 JP11-12 + #define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 + #elif ENABLED(MINIPANEL) #if DISABLED(USE_INTERNAL_SD) From 0f2ba5b92b24ee990ae07d8c3364def38a45567f Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 15 Feb 2021 04:10:17 -0600 Subject: [PATCH 394/532] =?UTF-8?q?=F0=9F=93=9D=20Tweak=20G26=20Q=20descri?= =?UTF-8?q?ption?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/bedlevel/G26.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/gcode/bedlevel/G26.cpp b/Marlin/src/gcode/bedlevel/G26.cpp index 728771d580..941861f044 100644 --- a/Marlin/src/gcode/bedlevel/G26.cpp +++ b/Marlin/src/gcode/bedlevel/G26.cpp @@ -71,8 +71,8 @@ * pliers while holding the LCD Click wheel in a depressed state. If you do not have * an LCD, you must specify a value if you use P. * - * Q # Multiplier Retraction Multiplier. Normally not needed. Retraction defaults to 1.0mm and - * un-retraction is at 1.2mm These numbers will be scaled by the specified amount + * Q # Multiplier Retraction Multiplier. (Normally not needed.) During G26 retraction will use the length + * specified by this parameter (1mm by default). Recover will be 1.2x the retract distance. * * R # Repeat Prints the number of patterns given as a parameter, starting at the current location. * If a parameter isn't given, every point will be printed unless G26 is interrupted. From a963c5f9f3530ecc0e20cbf7c50a1902c8d4598e Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 19 Jan 2022 05:11:06 -0600 Subject: [PATCH 395/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20Robin=20Nano=20BOA?= =?UTF-8?q?RD=5FINIT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h index ce033d4013..2d70e72347 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h @@ -44,10 +44,6 @@ //#define LED_PIN PB2 -#if HAS_TFT_LVGL_UI - #define BOARD_INIT OUT_WRITE(PB0, LOW) -#endif - #include "pins_MKS_ROBIN_NANO_common.h" #if HAS_TFT_LVGL_UI && FAN1_PIN != PB0 && HEATER_1_PIN != PB0 From 4686dc4c81e4807d13b85c5c99b47abbae64d835 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 19 Jan 2022 05:12:03 -0600 Subject: [PATCH 396/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Add?= =?UTF-8?q?=20chmod=20to=20mfprep?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/git/mfprep | 1 + 1 file changed, 1 insertion(+) diff --git a/buildroot/share/git/mfprep b/buildroot/share/git/mfprep index 7a8e05ee31..b329d7d8c5 100755 --- a/buildroot/share/git/mfprep +++ b/buildroot/share/git/mfprep @@ -60,5 +60,6 @@ cat "$LOGB" | while read line; do fi done mv "$TMPF" "$SCRF" +chmod ug+x "$SCRF" open "$TMPDIR" From 56f065db057fea421892d4da4aee7f003704ee89 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 20 Jan 2022 00:21:26 +0000 Subject: [PATCH 397/532] [cron] Bump distribution date (2022-01-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 bda58cb415..4d3121cec1 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 "2022-01-19" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 15dc979f37..85d6f1dc03 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 "2022-01-19" + #define STRING_DISTRIBUTION_DATE "2022-01-20" #endif /** From 900bcbeecaff4e44d12234e409c76dae4a94d9ad Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 19 Jan 2022 18:33:19 -0600 Subject: [PATCH 398/532] =?UTF-8?q?=F0=9F=A9=B9=20BOARD=5FINIT=20followup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h index 2d70e72347..115058a19f 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h @@ -47,5 +47,5 @@ #include "pins_MKS_ROBIN_NANO_common.h" #if HAS_TFT_LVGL_UI && FAN1_PIN != PB0 && HEATER_1_PIN != PB0 - #define BOARD_INIT OUT_WRITE(PB0, LOW) + #define BOARD_INIT() OUT_WRITE(PB0, LOW) #endif From 7415c3879004c74282bc689b428173af41d9df40 Mon Sep 17 00:00:00 2001 From: John Lagonikas <39417467+zeleps@users.noreply.github.com> Date: Thu, 20 Jan 2022 13:58:36 +0200 Subject: [PATCH 399/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20power.h=20compile?= =?UTF-8?q?=20(#23573)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/power.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/feature/power.h b/Marlin/src/feature/power.h index 9ecd832afc..839366ca60 100644 --- a/Marlin/src/feature/power.h +++ b/Marlin/src/feature/power.h @@ -25,7 +25,7 @@ * power.h - power control */ -#if ENABLED(AUTO_POWER_CONTROL) +#if EITHER(AUTO_POWER_CONTROL, POWER_OFF_TIMER) #include "../core/millis_t.h" #endif From 37ee9a47ab11baa7503336a3f0a3f83211459868 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 21 Jan 2022 00:17:50 +0000 Subject: [PATCH 400/532] [cron] Bump distribution date (2022-01-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 4d3121cec1..60f145ab24 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 "2022-01-20" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 85d6f1dc03..8c98d3bb51 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 "2022-01-20" + #define STRING_DISTRIBUTION_DATE "2022-01-21" #endif /** From d5f2334140e6f8ead29d3648b371547ebe72c7aa Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 22 Jan 2022 10:14:47 -0600 Subject: [PATCH 401/532] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Adjust=20LCD=20ini?= =?UTF-8?q?t,=20contrast=20default,=20settings=20load?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/LPC1768/inc/SanityCheck.h | 2 +- Marlin/src/MarlinCore.cpp | 24 ++- Marlin/src/gcode/lcd/M250.cpp | 2 +- Marlin/src/inc/Conditionals_LCD.h | 2 +- Marlin/src/inc/Conditionals_post.h | 11 +- Marlin/src/inc/Warnings.cpp | 4 + Marlin/src/lcd/e3v2/creality/dwin.cpp | 3 + Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 3 + Marlin/src/lcd/e3v2/jyersui/dwin.cpp | 2 +- Marlin/src/lcd/e3v2/marlinui/ui_common.cpp | 4 +- Marlin/src/lcd/extui/ui_api.cpp | 2 +- Marlin/src/lcd/marlinui.cpp | 149 +++++++++--------- Marlin/src/lcd/marlinui.h | 29 ++-- Marlin/src/lcd/menu/menu_configuration.cpp | 2 +- Marlin/src/module/settings.cpp | 44 ++---- Marlin/src/pins/mega/pins_GT2560_REV_A.h | 2 +- Marlin/src/pins/mega/pins_HJC2560C_REV2.h | 2 +- Marlin/src/pins/ramps/pins_K8800.h | 2 +- Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h | 2 +- 19 files changed, 137 insertions(+), 154 deletions(-) diff --git a/Marlin/src/HAL/LPC1768/inc/SanityCheck.h b/Marlin/src/HAL/LPC1768/inc/SanityCheck.h index 3ea054589e..8265d58a6e 100644 --- a/Marlin/src/HAL/LPC1768/inc/SanityCheck.h +++ b/Marlin/src/HAL/LPC1768/inc/SanityCheck.h @@ -113,7 +113,7 @@ static_assert(DISABLED(BAUD_RATE_GCODE), "BAUD_RATE_GCODE is not yet supported o #define _IS_RX1_1 IS_RX1 #if IS_TX1(TMC_SW_SCK) #error "Serial port pins (1) conflict with other pins!" - #elif HAS_WIRED_LCD + #elif HAS_ROTARY_ENCODER #if IS_TX1(BTN_EN2) || IS_RX1(BTN_EN1) #error "Serial port pins (1) conflict with Encoder Buttons!" #elif ANY_TX(1, SD_SCK_PIN, LCD_PINS_D4, DOGLCD_SCK, LCD_RESET_PIN, LCD_PINS_RS, SHIFT_CLK_PIN) \ diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 2c29030669..d0065655f1 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -1294,16 +1294,7 @@ void setup() { // UI must be initialized before EEPROM // (because EEPROM code calls the UI). - #if HAS_DWIN_E3V2_BASIC - SETUP_RUN(DWIN_Startup()); - #else - SETUP_RUN(ui.init()); - #if BOTH(HAS_WIRED_LCD, SHOW_BOOTSCREEN) - SETUP_RUN(ui.show_bootscreen()); - const millis_t bootscreen_ms = millis(); - #endif - SETUP_RUN(ui.reset_status()); // Load welcome message early. (Retained if no errors exist.) - #endif + SETUP_RUN(ui.init()); #if PIN_EXISTS(SAFE_POWER) #if HAS_DRIVER_SAFE_POWER_PROTECT @@ -1314,10 +1305,6 @@ void setup() { #endif #endif - #if ENABLED(PROBE_TARE) - SETUP_RUN(probe.tare_init()); - #endif - #if BOTH(SDSUPPORT, SDCARD_EEPROM_EMULATION) SETUP_RUN(card.mount()); // Mount media with settings before first_load #endif @@ -1325,6 +1312,15 @@ void setup() { SETUP_RUN(settings.first_load()); // Load data from EEPROM if available (or use defaults) // This also updates variables in the planner, elsewhere + #if BOTH(HAS_WIRED_LCD, SHOW_BOOTSCREEN) + SETUP_RUN(ui.show_bootscreen()); + const millis_t bootscreen_ms = millis(); + #endif + + #if ENABLED(PROBE_TARE) + SETUP_RUN(probe.tare_init()); + #endif + #if HAS_ETHERNET SETUP_RUN(ethernet.init()); #endif diff --git a/Marlin/src/gcode/lcd/M250.cpp b/Marlin/src/gcode/lcd/M250.cpp index 25e4232788..58b6dac872 100644 --- a/Marlin/src/gcode/lcd/M250.cpp +++ b/Marlin/src/gcode/lcd/M250.cpp @@ -31,7 +31,7 @@ * M250: Read and optionally set the LCD contrast */ void GcodeSuite::M250() { - if (parser.seenval('C')) + if (LCD_CONTRAST_MIN < LCD_CONTRAST_MAX && parser.seenval('C')) ui.set_contrast(parser.value_byte()); else M250_report(); diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index 4386964744..2daa15d0d3 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -237,7 +237,7 @@ #define LCD_HEIGHT 10 // Character lines #define LCD_CONTRAST_MIN 127 #define LCD_CONTRAST_MAX 255 - #define DEFAULT_LCD_CONTRAST 250 + #define LCD_CONTRAST_DEFAULT 250 #define CONVERT_TO_EXT_ASCII // Use extended 128-255 symbols from ASCII table. // At this time present conversion only for cyrillic - bg, ru and uk languages. // First 7 ASCII symbols in panel font must be replaced with Marlin's special symbols. diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 5d3ac7a690..734676559c 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -376,7 +376,6 @@ #elif EITHER(MKS_MINI_12864_V3, BTT_MINI_12864_V1) #define _LCD_CONTRAST_MIN 255 #define _LCD_CONTRAST_INIT 255 - #define _LCD_CONTRAST_MAX 255 #elif ENABLED(FYSETC_MINI_12864) #define _LCD_CONTRAST_INIT 220 #elif ENABLED(ULTI_CONTROLLER) @@ -389,18 +388,12 @@ #elif ENABLED(ZONESTAR_12864OLED) #define _LCD_CONTRAST_MIN 64 #define _LCD_CONTRAST_INIT 128 - #define _LCD_CONTRAST_MAX 255 #elif IS_TFTGLCD_PANEL - #define _LCD_CONTRAST_MIN 0 #define _LCD_CONTRAST_INIT 250 - #define _LCD_CONTRAST_MAX 255 #endif #ifdef _LCD_CONTRAST_INIT #define HAS_LCD_CONTRAST 1 -#endif - -#if HAS_LCD_CONTRAST #ifndef LCD_CONTRAST_MIN #ifdef _LCD_CONTRAST_MIN #define LCD_CONTRAST_MIN _LCD_CONTRAST_MIN @@ -420,8 +413,8 @@ #define LCD_CONTRAST_MAX 63 // ST7567 6-bits contrast #endif #endif - #ifndef DEFAULT_LCD_CONTRAST - #define DEFAULT_LCD_CONTRAST LCD_CONTRAST_INIT + #ifndef LCD_CONTRAST_DEFAULT + #define LCD_CONTRAST_DEFAULT LCD_CONTRAST_INIT #endif #endif diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index 0d6f9bb134..e1b4a1f9a8 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -559,3 +559,7 @@ #if CANNOT_EMBED_CONFIGURATION #warning "Disabled CONFIGURATION_EMBEDDING because the target usually has less flash storage. Define FORCE_CONFIG_EMBED to override." #endif + +#if HAS_LCD_CONTRAST && LCD_CONTRAST_MIN >= LCD_CONTRAST_MAX + #warning "Contrast cannot be changed when LCD_CONTRAST_MIN >= LCD_CONTRAST_MAX." +#endif diff --git a/Marlin/src/lcd/e3v2/creality/dwin.cpp b/Marlin/src/lcd/e3v2/creality/dwin.cpp index 03f08ac184..f17d97cc7c 100644 --- a/Marlin/src/lcd/e3v2/creality/dwin.cpp +++ b/Marlin/src/lcd/e3v2/creality/dwin.cpp @@ -1834,6 +1834,9 @@ void make_name_without_ext(char *dst, char *src, size_t maxlen=MENU_CHAR_LIMIT) void HMI_SDCardInit() { card.cdroot(); } +// Initialize or re-initialize the LCD +void MarlinUI::init_lcd() { DWIN_Startup(); } + void MarlinUI::refresh() { /* Nothing to see here */ } #if HAS_LCD_BRIGHTNESS diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index 484aa392f0..64e90c361e 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -888,6 +888,9 @@ void make_name_without_ext(char *dst, char *src, size_t maxlen=MENU_CHAR_LIMIT) void HMI_SDCardInit() { card.cdroot(); } +// Initialize or re-initialize the LCD +void MarlinUI::init_lcd() { DWIN_Startup(); } + void MarlinUI::refresh() { /* Nothing to see here */ } #if HAS_LCD_BRIGHTNESS diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp index eea464dcfd..1356c0e475 100644 --- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp @@ -4980,7 +4980,7 @@ void CrealityDWINClass::Reset_Settings() { Redraw_Screen(); } -void MarlinUI::init() { +void MarlinUI::init_lcd() { delay(800); SERIAL_ECHOPGM("\nDWIN handshake "); if (DWIN_Handshake()) SERIAL_ECHOLNPGM("ok."); else SERIAL_ECHOLNPGM("error."); diff --git a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp index b6093784a8..dbf2f7717c 100644 --- a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp +++ b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp @@ -79,9 +79,7 @@ void MarlinUI::set_font(const uint8_t font_nr) { bool MarlinUI::detected() { return true; } // Initialize or re-initialize the LCD -void MarlinUI::init_lcd() { - DWIN_Startup(); -} +void MarlinUI::init_lcd() { DWIN_Startup(); } // This LCD should clear where it will draw anew void MarlinUI::clear_lcd() { diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index 54e7db55c2..f2763c893f 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -1144,7 +1144,7 @@ namespace ExtUI { // At the moment we hook into MarlinUI methods, but this could be cleaned up in the future -void MarlinUI::init() { ExtUI::onStartup(); } +void MarlinUI::init_lcd() { ExtUI::onStartup(); } void MarlinUI::update() { ExtUI::onIdle(); } diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 2a576f647b..c068082c09 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -43,7 +43,6 @@ MarlinUI ui; #if HAS_DISPLAY #include "../gcode/queue.h" #include "fontutils.h" - #include "../sd/cardreader.h" #endif #if ENABLED(DWIN_CREALITY_LCD) @@ -176,6 +175,77 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; #endif +// Encoder Handling +#if HAS_ENCODER_ACTION + uint32_t MarlinUI::encoderPosition; + volatile int8_t encoderDiff; // Updated in update_buttons, added to encoderPosition every LCD update +#endif + +void MarlinUI::init() { + + init_lcd(); + + #if HAS_DIGITAL_BUTTONS + #if BUTTON_EXISTS(EN1) + SET_INPUT_PULLUP(BTN_EN1); + #endif + #if BUTTON_EXISTS(EN2) + SET_INPUT_PULLUP(BTN_EN2); + #endif + #if BUTTON_EXISTS(ENC) + SET_INPUT_PULLUP(BTN_ENC); + #endif + #if BUTTON_EXISTS(ENC_EN) + SET_INPUT_PULLUP(BTN_ENC_EN); + #endif + #if BUTTON_EXISTS(BACK) + SET_INPUT_PULLUP(BTN_BACK); + #endif + #if BUTTON_EXISTS(UP) + SET_INPUT(BTN_UP); + #endif + #if BUTTON_EXISTS(DWN) + SET_INPUT(BTN_DWN); + #endif + #if BUTTON_EXISTS(LFT) + SET_INPUT(BTN_LFT); + #endif + #if BUTTON_EXISTS(RT) + SET_INPUT(BTN_RT); + #endif + #endif + + #if HAS_SHIFT_ENCODER + + #if ENABLED(SR_LCD_2W_NL) // Non latching 2 wire shift register + + SET_OUTPUT(SR_DATA_PIN); + SET_OUTPUT(SR_CLK_PIN); + + #elif PIN_EXISTS(SHIFT_CLK) + + SET_OUTPUT(SHIFT_CLK_PIN); + OUT_WRITE(SHIFT_LD_PIN, HIGH); + #if PIN_EXISTS(SHIFT_EN) + OUT_WRITE(SHIFT_EN_PIN, LOW); + #endif + SET_INPUT_PULLUP(SHIFT_OUT_PIN); + + #endif + + #endif // HAS_SHIFT_ENCODER + + #if BOTH(HAS_ENCODER_ACTION, HAS_SLOW_BUTTONS) + slow_buttons = 0; + #endif + + update_buttons(); + + TERN_(HAS_ENCODER_ACTION, encoderDiff = 0); + + reset_status(); // Set welcome message +} + #if HAS_WIRED_LCD #if HAS_MARLINUI_U8GLIB @@ -184,8 +254,6 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; #include "lcdprint.h" - #include "../sd/cardreader.h" - #include "../module/temperature.h" #include "../module/planner.h" #include "../module/motion.h" @@ -247,16 +315,8 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; bool MarlinUI::old_is_printing; #endif - // Encoder Handling - #if HAS_ENCODER_ACTION - uint32_t MarlinUI::encoderPosition; - volatile int8_t encoderDiff; // Updated in update_buttons, added to encoderPosition every LCD update - #endif - #if ENABLED(SDSUPPORT) - #include "../sd/cardreader.h" - #if MARLINUI_SCROLL_NAME uint8_t MarlinUI::filename_scroll_pos, MarlinUI::filename_scroll_max; #endif @@ -393,69 +453,6 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; #endif // HAS_LCD_MENU - void MarlinUI::init() { - - init_lcd(); - - #if HAS_DIGITAL_BUTTONS - #if BUTTON_EXISTS(EN1) - SET_INPUT_PULLUP(BTN_EN1); - #endif - #if BUTTON_EXISTS(EN2) - SET_INPUT_PULLUP(BTN_EN2); - #endif - #if BUTTON_EXISTS(ENC) - SET_INPUT_PULLUP(BTN_ENC); - #endif - #if BUTTON_EXISTS(ENC_EN) - SET_INPUT_PULLUP(BTN_ENC_EN); - #endif - #if BUTTON_EXISTS(BACK) - SET_INPUT_PULLUP(BTN_BACK); - #endif - #if BUTTON_EXISTS(UP) - SET_INPUT(BTN_UP); - #endif - #if BUTTON_EXISTS(DWN) - SET_INPUT(BTN_DWN); - #endif - #if BUTTON_EXISTS(LFT) - SET_INPUT(BTN_LFT); - #endif - #if BUTTON_EXISTS(RT) - SET_INPUT(BTN_RT); - #endif - #endif - - #if HAS_SHIFT_ENCODER - - #if ENABLED(SR_LCD_2W_NL) // Non latching 2 wire shift register - - SET_OUTPUT(SR_DATA_PIN); - SET_OUTPUT(SR_CLK_PIN); - - #elif PIN_EXISTS(SHIFT_CLK) - - SET_OUTPUT(SHIFT_CLK_PIN); - OUT_WRITE(SHIFT_LD_PIN, HIGH); - #if PIN_EXISTS(SHIFT_EN) - OUT_WRITE(SHIFT_EN_PIN, LOW); - #endif - SET_INPUT_PULLUP(SHIFT_OUT_PIN); - - #endif - - #endif // HAS_SHIFT_ENCODER - - #if BOTH(HAS_ENCODER_ACTION, HAS_SLOW_BUTTONS) - slow_buttons = 0; - #endif - - update_buttons(); - - TERN_(HAS_ENCODER_ACTION, encoderDiff = 0); - } - //////////////////////////////////////////// ///////////// Keypad Handling ////////////// //////////////////////////////////////////// @@ -629,9 +626,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; next_filament_display = millis() + 5000UL; // Show status message for 5s #endif goto_screen(menu_main); - #if DISABLED(NO_LCD_REINIT) - init_lcd(); // May revive the LCD if static electricity killed it - #endif + IF_DISABLED(NO_LCD_REINIT, init_lcd()); // May revive the LCD if static electricity killed it return; } diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index dcf74b9e27..3217d3531b 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -21,6 +21,7 @@ */ #pragma once +#include "../sd/cardreader.h" #include "../module/motion.h" #include "buttons.h" @@ -30,10 +31,6 @@ #include "../libs/buzzer.h" #endif -#if ENABLED(SDSUPPORT) - #include "../sd/cardreader.h" -#endif - #if ENABLED(TOUCH_SCREEN_CALIBRATION) #include "tft_io/touch_calibration.h" #endif @@ -204,6 +201,20 @@ public: TERN_(HAS_LCD_MENU, currentScreen = status_screen); } + static void init(); + + #if HAS_DISPLAY || HAS_DWIN_E3V2 + static void init_lcd(); + #else + static void init_lcd() {} + #endif + + #if HAS_WIRED_LCD + static bool detected(); + #else + static bool detected() { return true; } + #endif + #if HAS_MULTI_LANGUAGE static uint8_t language; static void set_language(const uint8_t lang); @@ -270,14 +281,6 @@ public: } #endif - #if HAS_WIRED_LCD - static bool detected(); - static void init_lcd(); - #else - static bool detected() { return true; } - static void init_lcd() {} - #endif - #if HAS_PRINT_PROGRESS #if HAS_PRINT_PROGRESS_PERMYRIAD typedef uint16_t progress_t; @@ -365,7 +368,6 @@ public: #if HAS_DISPLAY - static void init(); static void update(); static void abort_print(); @@ -480,7 +482,6 @@ public: #else // No LCD - static void init() {} static void update() {} static void return_to_status() {} diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 4cd43e787a..7642c76710 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -538,7 +538,7 @@ void menu_configuration() { #if HAS_LCD_BRIGHTNESS EDIT_ITEM_FAST(uint8, MSG_BRIGHTNESS, &ui.brightness, LCD_BRIGHTNESS_MIN, LCD_BRIGHTNESS_MAX, ui.refresh_brightness, true); #endif - #if HAS_LCD_CONTRAST + #if HAS_LCD_CONTRAST && LCD_CONTRAST_MIN < LCD_CONTRAST_MAX EDIT_ITEM_FAST(uint8, MSG_CONTRAST, &ui.contrast, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX, ui.refresh_contrast, true); #endif #if ENABLED(FWRETRACT) diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index baab8b6dec..90bb9f6d6e 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -1965,8 +1965,10 @@ void MarlinSettings::postprocess() { // #if HAS_USER_THERMISTORS { + user_thermistor_t user_thermistor[USER_THERMISTORS]; _FIELD_TEST(user_thermistor); - EEPROM_READ(thermalManager.user_thermistor); + EEPROM_READ(user_thermistor); + if (!validating) COPY(thermalManager.user_thermistor, user_thermistor); } #endif @@ -1974,13 +1976,10 @@ void MarlinSettings::postprocess() { // Power monitor // { - #if HAS_POWER_MONITOR - uint8_t &power_monitor_flags = power_monitor.flags; - #else - uint8_t power_monitor_flags; - #endif + uint8_t power_monitor_flags; _FIELD_TEST(power_monitor_flags); EEPROM_READ(power_monitor_flags); + TERN_(HAS_POWER_MONITOR, if (!validating) power_monitor.flags = power_monitor_flags); } // @@ -1997,7 +1996,6 @@ void MarlinSettings::postprocess() { // LCD Brightness // { - _FIELD_TEST(lcd_brightness); uint8_t lcd_brightness; EEPROM_READ(lcd_brightness); TERN_(HAS_LCD_BRIGHTNESS, if (!validating) ui.set_brightness(lcd_brightness)); @@ -2007,45 +2005,37 @@ void MarlinSettings::postprocess() { // Controller Fan // { + controllerFan_settings_t cfs = { 0 }; _FIELD_TEST(controllerFan_settings); - #if ENABLED(CONTROLLER_FAN_EDITABLE) - const controllerFan_settings_t &cfs = controllerFan.settings; - #else - controllerFan_settings_t cfs = { 0 }; - #endif EEPROM_READ(cfs); + TERN_(CONTROLLER_FAN_EDITABLE, if (!validating) controllerFan.settings = cfs); } // // Power-Loss Recovery // { + bool recovery_enabled; _FIELD_TEST(recovery_enabled); - #if ENABLED(POWER_LOSS_RECOVERY) - const bool &recovery_enabled = recovery.enabled; - #else - bool recovery_enabled; - #endif EEPROM_READ(recovery_enabled); + TERN_(POWER_LOSS_RECOVERY, if (!validating) recovery.enabled = recovery_enabled); } // // Firmware Retraction // { + fwretract_settings_t fwretract_settings; + bool autoretract_enabled; _FIELD_TEST(fwretract_settings); + EEPROM_READ(fwretract_settings); + EEPROM_READ(autoretract_enabled); #if ENABLED(FWRETRACT) - EEPROM_READ(fwretract.settings); - #else - fwretract_settings_t fwretract_settings; - EEPROM_READ(fwretract_settings); - #endif - #if BOTH(FWRETRACT, FWRETRACT_AUTORETRACT) - EEPROM_READ(fwretract.autoretract_enabled); - #else - bool autoretract_enabled; - EEPROM_READ(autoretract_enabled); + if (!validating) { + fwretract.settings = fwretract_settings; + TERN_(FWRETRACT_AUTORETRACT, fwretract.autoretract_enabled = autoretract_enabled); + } #endif } diff --git a/Marlin/src/pins/mega/pins_GT2560_REV_A.h b/Marlin/src/pins/mega/pins_GT2560_REV_A.h index 1adf8d3079..ecd341984b 100644 --- a/Marlin/src/pins/mega/pins_GT2560_REV_A.h +++ b/Marlin/src/pins/mega/pins_GT2560_REV_A.h @@ -127,7 +127,7 @@ #define LCD_RESET_PIN 16 - #define DEFAULT_LCD_CONTRAST 220 + #define LCD_CONTRAST_DEFAULT 220 #define LCD_BACKLIGHT_PIN -1 #else diff --git a/Marlin/src/pins/mega/pins_HJC2560C_REV2.h b/Marlin/src/pins/mega/pins_HJC2560C_REV2.h index 73d4bac472..5c3b1dc9f6 100644 --- a/Marlin/src/pins/mega/pins_HJC2560C_REV2.h +++ b/Marlin/src/pins/mega/pins_HJC2560C_REV2.h @@ -134,7 +134,7 @@ #if ENABLED(HJC_LCD_SMART_CONTROLLER) #define LCD_BACKLIGHT_PIN 5 // LCD_Backlight //#ifndef LCD_CONTRAST_PIN - // #define LCD_CONTRAST_PIN 5 // LCD_Contrast + // #define LCD_CONTRAST_PIN 5 // LCD_Contrast //#endif #ifndef FIL_RUNOUT_PIN #define FIL_RUNOUT_PIN 24 // Filament runout diff --git a/Marlin/src/pins/ramps/pins_K8800.h b/Marlin/src/pins/ramps/pins_K8800.h index 653d317629..5cc4b4323a 100644 --- a/Marlin/src/pins/ramps/pins_K8800.h +++ b/Marlin/src/pins/ramps/pins_K8800.h @@ -107,7 +107,7 @@ #define LCD_CONTRAST_MIN 0 #define LCD_CONTRAST_MAX 100 - #define DEFAULT_LCD_CONTRAST 30 + #define LCD_CONTRAST_DEFAULT 30 //#define LCD_SCREEN_ROTATE 180 // 0, 90, 180, 270 #if IS_NEWPANEL diff --git a/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h b/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h index 6d5928e86d..e6d7c3c20c 100644 --- a/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h +++ b/Marlin/src/pins/stm32f4/pins_ARTILLERY_RUBY.h @@ -157,7 +157,7 @@ #define NEOPIXEL_PIN PB9 #endif - #define DEFAULT_LCD_CONTRAST 255 + #define LCD_CONTRAST_DEFAULT 255 #else #define LCD_PINS_RS PC15 #define LCD_PINS_ENABLE PB6 From f6e8622360609d95464d256be5717db090191583 Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Sat, 22 Jan 2022 10:16:41 -0600 Subject: [PATCH 402/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20LCD=20contrast/bri?= =?UTF-8?q?ghtness=20init=20(#23567)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/inc/Conditionals_post.h | 1 + Marlin/src/lcd/marlinui.cpp | 3 +-- Marlin/src/module/settings.cpp | 14 +++++++++----- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 734676559c..2f06fe255a 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -377,6 +377,7 @@ #define _LCD_CONTRAST_MIN 255 #define _LCD_CONTRAST_INIT 255 #elif ENABLED(FYSETC_MINI_12864) + #define _LCD_CONTRAST_MIN 180 #define _LCD_CONTRAST_INIT 220 #elif ENABLED(ULTI_CONTROLLER) #define _LCD_CONTRAST_INIT 127 diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index c068082c09..7b9dc468e4 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -96,8 +96,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; #endif #if HAS_LCD_CONTRAST - uint8_t MarlinUI::contrast; // Initialized by settings.load() - + uint8_t MarlinUI::contrast = LCD_CONTRAST_DEFAULT; // Initialized by settings.load() void MarlinUI::set_contrast(const uint8_t value) { contrast = constrain(value, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX); _set_contrast(); diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 90bb9f6d6e..b737d41c2d 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -578,6 +578,9 @@ void MarlinSettings::postprocess() { update_software_endstops((AxisEnum)i); } + TERN_(HAS_LCD_CONTRAST, ui.refresh_contrast()); + TERN_(HAS_LCD_BRIGHTNESS, ui.refresh_brightness()); + TERN_(ENABLE_LEVELING_FADE_HEIGHT, set_z_fade_height(new_z_fade_height, false)); // false = no report TERN_(AUTO_BED_LEVELING_BILINEAR, refresh_bed_level()); @@ -1986,10 +1989,10 @@ void MarlinSettings::postprocess() { // LCD Contrast // { - _FIELD_TEST(lcd_contrast); uint8_t lcd_contrast; + _FIELD_TEST(lcd_contrast); EEPROM_READ(lcd_contrast); - TERN_(HAS_LCD_CONTRAST, if (!validating) ui.set_contrast(lcd_contrast)); + TERN_(HAS_LCD_CONTRAST, if (!validating) ui.contrast = lcd_contrast); } // @@ -1997,8 +2000,9 @@ void MarlinSettings::postprocess() { // { uint8_t lcd_brightness; + _FIELD_TEST(lcd_brightness); EEPROM_READ(lcd_brightness); - TERN_(HAS_LCD_BRIGHTNESS, if (!validating) ui.set_brightness(lcd_brightness)); + TERN_(HAS_LCD_BRIGHTNESS, if (!validating) ui.brightness = lcd_brightness); } // @@ -3018,12 +3022,12 @@ void MarlinSettings::reset() { // // LCD Contrast // - TERN_(HAS_LCD_CONTRAST, ui.set_contrast(DEFAULT_LCD_CONTRAST)); + TERN_(HAS_LCD_CONTRAST, ui.contrast = LCD_CONTRAST_DEFAULT); // // LCD Brightness // - TERN_(HAS_LCD_BRIGHTNESS, ui.set_brightness(DEFAULT_LCD_BRIGHTNESS)); + TERN_(HAS_LCD_BRIGHTNESS, ui.brightness = DEFAULT_LCD_BRIGHTNESS); // // Controller Fan From 8169253a7d41e9cc3cd0693b2ad1edce0c4c204e Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 22 Jan 2022 10:19:26 -0600 Subject: [PATCH 403/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Fix?= =?UTF-8?q?=20up=20some=20AUX=20/=20EXP=20pins=20(#23577)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/esp32/pins_MKS_TINYBEE.h | 6 +- Marlin/src/pins/esp32/pins_PANDA_common.h | 56 +++++-- Marlin/src/pins/mega/pins_LEAPFROG_XEED2015.h | 2 +- Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h | 2 +- Marlin/src/pins/ramps/pins_RAMPS.h | 150 +++++++++++------- Marlin/src/pins/sanguino/pins_ZMIB_V2.h | 78 ++++----- Marlin/src/pins/stm32f1/pins_GTM32_MINI.h | 2 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN.h | 2 +- Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h | 4 +- .../pins/stm32f1/pins_MKS_ROBIN_E3_common.h | 5 +- .../src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h | 4 +- Marlin/src/pins/stm32f1/pins_ZM3E2_V1_0.h | 2 +- Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h | 4 +- .../stm32f4/pins_MKS_ROBIN_NANO_V3_common.h | 4 +- 14 files changed, 196 insertions(+), 125 deletions(-) diff --git a/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h b/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h index 5cae63d31a..122dad2146 100644 --- a/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h +++ b/Marlin/src/pins/esp32/pins_MKS_TINYBEE.h @@ -120,7 +120,7 @@ #define SD_MISO_PIN 19 #define SD_SCK_PIN 18 #define SDSS 5 -#define SD_DETECT_PIN 34 // IO34 default is SD_DET signal(Jump to SDDET) +#define SD_DETECT_PIN 34 // IO34 default is SD_DET signal (Jump to SDDET) #define USES_SHARED_SPI // SPI is shared by SD card with TMC SPI drivers /** @@ -177,9 +177,9 @@ #elif ENABLED(MKS_MINI_12864_V3) + #define LCD_PINS_DC EXP1_07_PIN #define DOGLCD_CS EXP1_08_PIN - #define DOGLCD_A0 EXP1_07_PIN - #define LCD_PINS_DC DOGLCD_A0 + #define DOGLCD_A0 LCD_PINS_DC #define LCD_BACKLIGHT_PIN -1 #define LCD_RESET_PIN EXP1_06_PIN #define NEOPIXEL_PIN EXP1_05_PIN diff --git a/Marlin/src/pins/esp32/pins_PANDA_common.h b/Marlin/src/pins/esp32/pins_PANDA_common.h index 81862fbd55..7deeca3f62 100644 --- a/Marlin/src/pins/esp32/pins_PANDA_common.h +++ b/Marlin/src/pins/esp32/pins_PANDA_common.h @@ -62,6 +62,13 @@ #define TEMP_0_PIN 39 // Analog Input #define TEMP_BED_PIN 36 // Analog Input +#if ENABLED(MAX31856_PANDAPI) + #define MAX31856_CLK_PIN 29 + #define MAX31856_MISO_PIN 24 + #define MAX31856_MOSI_PIN 28 + #define MAX31856_CS_PIN 27 +#endif + // // Heaters / Fans // @@ -74,25 +81,48 @@ #define E0_AUTO_FAN_PIN 120 // FAN2 #endif +/** ------ ------ + * (MISO 19?) |10 9 | (18 SCK?) (BEEPER) 129 |10 9 | 12 (^ENC) + * (EN1) 33 | 8 7 | (5 SDSS?) (EN) 26 | 8 7 | 27 (RS) + * (EN2) 32 6 5 | (23 MOSI?) (D4) 14 | 6 5 -- + * (SDDET 2?) | 4 3 | (RESET) -- | 4 3 | -- + * -- | 2 1 | -- (GND) | 2 1 | (5V) + * ------ ------ + * EXP2 EXP1 + */ +#define EXP1_06_PIN 14 +#define EXP1_07_PIN 27 +#define EXP1_08_PIN 26 +#define EXP1_09_PIN 12 +#define EXP1_10_PIN 129 + +#define EXP2_04_PIN 2 // ? +#define EXP2_05_PIN 23 // ? +#define EXP2_06_PIN 32 +#define EXP2_07_PIN 5 // ? +#define EXP2_08_PIN 33 +#define EXP2_09_PIN 18 // ? +#define EXP2_10_PIN 19 // ? + // -// SD card +// SD Card // #if ENABLED(SDSUPPORT) - #define SD_MOSI_PIN 23 - #define SD_MISO_PIN 19 - #define SD_SCK_PIN 18 - #define SDSS 5 - #define SD_DETECT_PIN 2 + #define SD_MOSI_PIN EXP2_05_PIN + #define SD_MISO_PIN EXP2_10_PIN + #define SD_SCK_PIN EXP2_09_PIN + #define SDSS EXP2_07_PIN + #define SD_DETECT_PIN EXP2_04_PIN #endif #if HAS_WIRED_LCD - #define BEEPER_PIN 129 - #define BTN_ENC 12 + #define BEEPER_PIN EXP1_10_PIN - #define BTN_EN1 33 - #define BTN_EN2 32 + #define BTN_ENC EXP1_09_PIN + #define BTN_EN1 EXP2_08_PIN + #define BTN_EN2 EXP2_06_PIN - #define LCD_PINS_RS 27 - #define LCD_PINS_ENABLE 26 - #define LCD_PINS_D4 14 + #define LCD_PINS_RS EXP1_07_PIN + #define LCD_PINS_ENABLE EXP1_08_PIN + #define LCD_PINS_D4 EXP1_06_PIN #endif diff --git a/Marlin/src/pins/mega/pins_LEAPFROG_XEED2015.h b/Marlin/src/pins/mega/pins_LEAPFROG_XEED2015.h index af5cfd6a2e..4a32472949 100644 --- a/Marlin/src/pins/mega/pins_LEAPFROG_XEED2015.h +++ b/Marlin/src/pins/mega/pins_LEAPFROG_XEED2015.h @@ -84,7 +84,7 @@ #define E1_ENABLE_PIN 33 // -// Filament runout +// Filament Runout Sensor // #define FIL_RUNOUT_PIN 42 // ROT2 Connector #define FIL_RUNOUT2_PIN 44 // ROT1 Connector diff --git a/Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h b/Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h index d5122e46a9..eb92ab5cd0 100644 --- a/Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h +++ b/Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h @@ -69,7 +69,7 @@ #endif // -// Filament Runout Pins +// Filament Runout Sensor // #ifndef FIL_RUNOUT_PIN #define FIL_RUNOUT_PIN 49 diff --git a/Marlin/src/pins/ramps/pins_RAMPS.h b/Marlin/src/pins/ramps/pins_RAMPS.h index 94e6ccdcbe..70da23af73 100644 --- a/Marlin/src/pins/ramps/pins_RAMPS.h +++ b/Marlin/src/pins/ramps/pins_RAMPS.h @@ -120,14 +120,14 @@ #define X_DIR_PIN 55 #define X_ENABLE_PIN 38 #ifndef X_CS_PIN - #define X_CS_PIN AUX3_03_PIN + #define X_CS_PIN 53 #endif #define Y_STEP_PIN 60 #define Y_DIR_PIN 61 #define Y_ENABLE_PIN 56 #ifndef Y_CS_PIN - #define Y_CS_PIN AUX3_07_PIN + #define Y_CS_PIN 49 #endif #ifndef Z_STEP_PIN @@ -241,7 +241,7 @@ // Misc. Functions // #ifndef SDSS - #define SDSS AUX3_03_PIN + #define SDSS AUX3_06_PIN #endif #define LED_PIN 13 @@ -423,18 +423,22 @@ #endif // -// AUX1 : 5V GND D2 D1 -// 5V GND A3 A4 - +// AUX1 5V GND D2 D1 +// 2 4 6 8 +// 1 3 5 7 +// 5V GND A3 A4 +// #define AUX1_05_PIN 57 // (A3) #define AUX1_06_PIN 2 #define AUX1_07_PIN 58 // (A4) #define AUX1_08_PIN 1 // -// AUX2 : GND A9 D40 D42 A11 -// VCC A5 A10 D44 A12 - +// AUX2 GND A9 D40 D42 A11 +// 2 4 6 8 10 +// 1 3 5 7 9 +// VCC A5 A10 D44 A12 +// #define AUX2_03_PIN 59 // (A5) #define AUX2_04_PIN 63 // (A9) #define AUX2_05_PIN 64 // (A10) @@ -445,19 +449,20 @@ #define AUX2_10_PIN 65 // (A11) // -// AUX3 : GND D52 D50 5V -// NC D53 D51 D49 - -#define AUX3_03_PIN 53 -#define AUX3_04_PIN 52 -#define AUX3_05_PIN 51 -#define AUX3_06_PIN 50 -#define AUX3_07_PIN 49 +// AUX3 GND D52 D50 5V +// 7 5 3 1 +// 8 6 4 2 +// NC D53 D51 D49 +// +#define AUX3_02_PIN 49 +#define AUX3_03_PIN 50 +#define AUX3_04_PIN 51 +#define AUX3_05_PIN 52 +#define AUX3_06_PIN 53 // -// AUX4 : D16 D17 D23 D25 D27 D29 D31 D33 D35 D37 D39 D41 D43 D45 D47 D32 GND 5V +// AUX4 5V GND D32 D47 D45 D43 D41 D39 D37 D35 D33 D31 D29 D27 D25 D23 D17 D16 // - #define AUX4_03_PIN 32 #define AUX4_04_PIN 47 #define AUX4_05_PIN 45 @@ -476,35 +481,69 @@ #define AUX4_18_PIN 16 /** - * LCD adapter. NOTE: These come in two variants. The socket keys can be + * LCD adapters come in different variants. The socket keys can be * on either side, and may be backwards on some boards / displays. - * ------ ------ - * D37 |10 9 | D35 (MISO) D50 |10 9 | D52 (SCK) - * D17 | 8 7 | D16 D31 | 8 7 | D53 - * D23 6 5 D25 D33 6 5 D51 (MOSI) - * D27 | 4 3 | D29 D49 | 4 3 | D41 - * GND | 2 1 | 5V GND | 2 1 | -- - * ------ ------ - * EXP1 EXP2 */ #ifndef EXP1_03_PIN + #define EXP1_03_PIN AUX4_13_PIN #define EXP1_04_PIN AUX4_14_PIN #define EXP1_05_PIN AUX4_15_PIN #define EXP1_06_PIN AUX4_16_PIN #define EXP1_07_PIN AUX4_18_PIN #define EXP1_08_PIN AUX4_17_PIN - #define EXP1_09_PIN AUX4_10_PIN - #define EXP1_10_PIN AUX4_09_PIN - #define EXP2_03_PIN AUX4_07_PIN - #define EXP2_04_PIN AUX3_07_PIN - #define EXP2_05_PIN AUX3_05_PIN - #define EXP2_06_PIN AUX4_11_PIN - #define EXP2_07_PIN AUX3_03_PIN - #define EXP2_08_PIN AUX4_12_PIN - #define EXP2_09_PIN AUX3_04_PIN - #define EXP2_10_PIN AUX3_06_PIN + #define EXP2_04_PIN AUX3_02_PIN + #define EXP2_05_PIN AUX3_04_PIN + #define EXP2_07_PIN AUX3_06_PIN + #define EXP2_09_PIN AUX3_05_PIN + #define EXP2_10_PIN AUX3_03_PIN + + #if ENABLED(G3D_PANEL) + /** Gadgets3D Smart Adapter + * ------ ------ + * 4-11 |10 9 | 4-12 (MISO) 3-03 |10 9 | 3-05 (SCK) + * 4-17 | 8 7 | 4-18 4-10 | 8 7 | 3-06 + * 4-16 6 5 | 4-15 4-09 6 5 | 3-04 (MOSI) + * 4-14 | 4 3 | 4-13 3-02 | 4 3 | 4-07 + * (GND) 4-02 | 2 1 | 4-01 (5V) -- | 2 1 | -- + * ------ ------ + * EXP1 EXP2 + */ + #define EXP1_09_PIN AUX4_12_PIN + #define EXP1_10_PIN AUX4_11_PIN + + #define EXP2_03_PIN AUX4_07_PIN + #define EXP2_06_PIN AUX4_09_PIN + #define EXP2_08_PIN AUX4_10_PIN + + #else + + /** Smart Adapter (c) RRD + * ------ ------ + * 4-09 |10 9 | 4-10 (MISO) 3-03 |10 9 | 3-05 (SCK) + * 4-17 | 8 7 | 4-18 4-12 | 8 7 | 3-06 + * 4-16 6 5 | 4-15 4-11 6 5 | 3-04 (MOSI) + * 4-14 | 4 3 | 4-13 3-02 | 4 3 | 4-07 + * (GND) 3-07 | 2 1 | 3-01 (5V) (GND) 3-07 | 2 1 | -- + * ------ ------ + * EXP1 EXP2 + */ + #define EXP1_09_PIN AUX4_10_PIN + #define EXP1_10_PIN AUX4_09_PIN + + #if BOTH(TOUCH_UI_FTDI_EVE, LCD_FYSETC_TFT81050) + #define EXP2_03_PIN -1 // RESET + #define EXP2_06_PIN AUX4_12_PIN + #define EXP2_08_PIN AUX4_11_PIN + #else + #define EXP2_03_PIN AUX4_07_PIN + #define EXP2_06_PIN AUX4_11_PIN + #define EXP2_08_PIN AUX4_12_PIN + #endif + + #endif + #endif ////////////////////////// @@ -752,7 +791,7 @@ #define BTN_EN2 AUX2_04_PIN #define BTN_ENC AUX2_03_PIN - #define SD_DETECT_PIN AUX3_07_PIN + #define SD_DETECT_PIN AUX3_02_PIN #define KILL_PIN AUX2_05_PIN #elif ENABLED(ZONESTAR_LCD) @@ -765,14 +804,14 @@ #elif ENABLED(G3D_PANEL) - #define BEEPER_PIN EXP2_06_PIN + #define BEEPER_PIN EXP1_10_PIN #define SD_DETECT_PIN EXP2_04_PIN #define KILL_PIN EXP2_03_PIN - #define BTN_EN1 EXP1_10_PIN - #define BTN_EN2 EXP1_09_PIN - #define BTN_ENC EXP2_08_PIN + #define BTN_EN1 EXP2_06_PIN + #define BTN_EN2 EXP2_08_PIN + #define BTN_ENC EXP1_09_PIN #elif IS_TFTGLCD_PANEL @@ -785,7 +824,7 @@ #if ENABLED(PANEL_ONE) // Buttons connect directly to AUX-2 #define BTN_EN1 AUX2_03_PIN #define BTN_EN2 AUX2_04_PIN - #define BTN_ENC AUX3_07_PIN + #define BTN_ENC AUX3_02_PIN #else #define BTN_EN1 EXP1_10_PIN #define BTN_EN2 EXP1_09_PIN @@ -819,15 +858,15 @@ /** * FYSETC TFT-81050 display pinout * - * Board Display - * ------ ------ - * GND |10 9 | -- 5V |10 9 | GND - * (SD_DET) 49 | 8 7 | RESET RESET | 8 7 | (SD_DET) - * (BTN_EN1) 31 6 5 | 51 (MOSI) (MOSI) 6 5 | (LCD_CS) - * (BTN_EN2) 33 | 4 3 | 53 (SD_CS) (SD_CS) | 4 3 | (MOD_RESET) - * (MISO) 50 | 2 1 | 52 (SCK) (SCK) | 2 1 | (MISO) - * ------ ------ - * EXP2 EXP1 + * Board Display + * ------ ------ + * (MISO) 50 |10 9 | 52 (SCK) 5V |10 9 | GND + * (BTN_EN2) 33 | 8 7 | 53 (SD_CS) RESET | 8 7 | (SD_DET) + * (BTN_EN1) 31 6 5 | 51 (MOSI) (MOSI) 6 5 | (LCD_CS) + * (SD_DET) 49 | 4 3 | RESET (SD_CS) | 4 3 | (MOD_RESET) + * GND | 2 1 | -- (SCK) | 2 1 | (MISO) + * ------ ------ + * EXP2 * * Needs custom cable: * @@ -852,6 +891,7 @@ #define SD_DETECT_PIN EXP2_04_PIN - #define CLCD_MOD_RESET EXP2_08_PIN - #define CLCD_SPI_CS EXP2_06_PIN + #define CLCD_MOD_RESET EXP2_06_PIN + #define CLCD_SPI_CS EXP2_08_PIN + #endif // TOUCH_UI_FTDI_EVE && LCD_FYSETC_TFT81050 diff --git a/Marlin/src/pins/sanguino/pins_ZMIB_V2.h b/Marlin/src/pins/sanguino/pins_ZMIB_V2.h index cb2dec1600..0a8143c376 100644 --- a/Marlin/src/pins/sanguino/pins_ZMIB_V2.h +++ b/Marlin/src/pins/sanguino/pins_ZMIB_V2.h @@ -146,7 +146,7 @@ #define FAN1_PIN -1 // -//filament run out sensor +// Filament Runout Sensor // #if EITHER(Z6S_ZFAULT, Z6BS_ZFAULT) #define FIL_RUNOUT_PIN 13 @@ -162,32 +162,38 @@ #endif #define SD_DETECT_PIN -1 -/*=================================================== - * ZMIB Version 1 - EXP1 Connector - * MOSI(D5) TX1(D11) ENA(D12) ENC(D29/A2) 5V - * SCK(D7) RX1(D10) SCS(D4) ENB(D2) GND - *=================================================== - * ZMIB Version 2 - EXP1 Connector - * MOSI(D5) TX1(D11) ENA(D12) ENC(D29/A2) 5V - * SCK(D7) RX1(D10) SCS(D3) ENB(D2) GND - *=================================================== - * LCD 128x64 - *==================================================*/ +/** EXP1 + * ------ + * (MOSI) D5 |10 9 | D7 (SCK) + * (CS) D11 | 8 7 | D10 (DC/D4) + * (EN2) D12 6 5 | D4 or D3 (EN/RS) + * (ENC) D29 | 4 3 | D2 (EN1) + * (GND) | 2 1 | (5V) + * ------ + */ +#define EXP1_03_PIN 2 +#define EXP1_04_PIN 29 +#ifndef IS_ZMIB_V2 + #define EXP1_05_PIN 4 // ZMIB V1 +#else + #define EXP1_05_PIN 3 // ZMIB V2 +#endif +#define EXP1_06_PIN 12 +#define EXP1_07_PIN 10 +#define EXP1_08_PIN 11 +#define EXP1_09_PIN 7 +#define EXP1_10_PIN 5 #if ENABLED(ZONESTAR_12864LCD) // // LCD 128x64 // - #define LCDSCREEN_NAME "ZONESTAR_12864LCD" + #define LCDSCREEN_NAME "ZONESTAR_12864LCD" #define FORCE_SOFT_SPI - //#define LCD_SDSS 11 - #define LCD_PINS_RS 11 // ST7920_CS_PIN LCD_PIN_RS (PIN4 of LCD module) - #ifdef IS_ZMIB_V2 - #define LCD_PINS_ENABLE 3 // ST7920_DAT_PIN LCD_PIN_R/W (PIN5 of LCD module) - #else - #define LCD_PINS_ENABLE 4 // ST7920_DAT_PIN LCD_PIN_R/W (PIN5 of LCD module) - #endif - #define LCD_PINS_D4 10 // ST7920_CLK_PIN LCD_PIN_ENABLE (PIN6 of LCD module) + //#define LCD_SDSS EXP1_08_PIN + #define LCD_PINS_RS EXP1_08_PIN // ST7920_CS_PIN (LCD module pin 4) + #define LCD_PINS_ENABLE EXP1_05_PIN // ST7920_DAT_PIN (LCD module pin 5) + #define LCD_PINS_D4 EXP1_07_PIN // ST7920_CLK_PIN (LCD module pin 6) #define BOARD_ST7920_DELAY_1 DELAY_2_NOP #define BOARD_ST7920_DELAY_2 DELAY_2_NOP @@ -199,34 +205,28 @@ // #define LCDSCREEN_NAME "ZONESTAR 12864OLED" #define FORCE_SOFT_SPI - #ifdef IS_ZMIB_V2 - #define LCD_PINS_RS 3 // RESET - #else - #define LCD_PINS_RS 4 // RESET - #endif - #define LCD_PINS_DC 10 // DC - #define DOGLCD_CS 11 // CS + #define LCD_PINS_RS EXP1_05_PIN + #define LCD_PINS_DC EXP1_07_PIN + #define DOGLCD_CS EXP1_08_PIN + #if ENABLED(OLED_HW_IIC) #error "Oops! can't choose HW IIC for ZMIB board!!" - #elif ENABLED(OLED_HW_SPI) - // HW SPI - #define DOGLCD_A0 LCD_PINS_DC // A0 = DC #else - // SW SPI - #define DOGLCD_A0 LCD_PINS_DC // A0 = DC - #define DOGLCD_MOSI AVR_MOSI_PIN // SDA - #define DOGLCD_SCK AVR_SCK_PIN // SCK + #define DOGLCD_A0 LCD_PINS_DC + #if DISABLED(OLED_HW_SPI) + #define DOGLCD_MOSI AVR_MOSI_PIN // Software SPI + #define DOGLCD_SCK AVR_SCK_PIN + #endif #endif - #endif // // All the above are also RRDSC with rotary encoder // #if IS_RRD_SC - #define BTN_EN1 2 - #define BTN_EN2 12 - #define BTN_ENC 29 + #define BTN_EN1 EXP1_03_PIN + #define BTN_EN2 EXP1_06_PIN + #define BTN_ENC EXP1_04_PIN #define BEEPER_PIN -1 #define KILL_PIN -1 #endif diff --git a/Marlin/src/pins/stm32f1/pins_GTM32_MINI.h b/Marlin/src/pins/stm32f1/pins_GTM32_MINI.h index 520764a503..03547381c0 100644 --- a/Marlin/src/pins/stm32f1/pins_GTM32_MINI.h +++ b/Marlin/src/pins/stm32f1/pins_GTM32_MINI.h @@ -186,7 +186,7 @@ #ifdef GTM32_PRO_VB_USE_LCD_BEEPER // This is pin 32 on J2 FFC40 and pin, goes to the beeper // on Geeetech's version of RepRapDiscount Smart Controller - // (e.g. on Rostock 301) + // (e.g., on Rostock 301) #define BEEPER_PIN PE12 #else // This is the beeper on the board itself diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN.h index 29baeba934..150c18d79a 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN.h @@ -125,7 +125,7 @@ //#define TEMP_0_CS_PIN PE6 // TC2 - CS2 // -// Filament runout sensor +// Filament Runout Sensor // #define FIL_RUNOUT_PIN PF11 // MT_DET diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h index 11d42ca6de..88c5d5f53c 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3P.h @@ -315,9 +315,9 @@ #endif #elif ENABLED(FYSETC_MINI_12864_2_1) + #define LCD_PINS_DC PC6 #define DOGLCD_CS PD13 - #define DOGLCD_A0 PC6 - #define LCD_PINS_DC DOGLCD_A0 + #define DOGLCD_A0 DOGLCD_A0 #define LCD_BACKLIGHT_PIN -1 #define LCD_RESET_PIN PE14 #define NEOPIXEL_PIN PE15 diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h index 14591eb781..a1a822a9c2 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h @@ -197,9 +197,10 @@ #define DOGLCD_MOSI EXP2_05_PIN #elif ENABLED(FYSETC_MINI_12864_2_1) + + #define LCD_PINS_DC EXP1_07_PIN #define DOGLCD_CS EXP1_08_PIN - #define DOGLCD_A0 EXP1_07_PIN - #define LCD_PINS_DC DOGLCD_A0 + #define DOGLCD_A0 LCD_PINS_DC #define LCD_BACKLIGHT_PIN -1 #define LCD_RESET_PIN EXP1_06_PIN #define NEOPIXEL_PIN EXP1_05_PIN diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h index 40ce442e6c..07ee8c4fa0 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h @@ -341,9 +341,9 @@ #endif #elif ENABLED(FYSETC_MINI_12864_2_1) + #define LCD_PINS_DC PC6 #define DOGLCD_CS PD13 - #define DOGLCD_A0 PC6 - #define LCD_PINS_DC DOGLCD_A0 + #define DOGLCD_A0 DOGLCD_A0 #define LCD_BACKLIGHT_PIN -1 #define LCD_RESET_PIN PE14 #define NEOPIXEL_PIN PE15 diff --git a/Marlin/src/pins/stm32f1/pins_ZM3E2_V1_0.h b/Marlin/src/pins/stm32f1/pins_ZM3E2_V1_0.h index ba948bc479..b1e5f77d0e 100644 --- a/Marlin/src/pins/stm32f1/pins_ZM3E2_V1_0.h +++ b/Marlin/src/pins/stm32f1/pins_ZM3E2_V1_0.h @@ -224,7 +224,7 @@ #define LCD_PINS_RS EXP1_05_PIN // = LCD_RESET_PIN #define LCD_PINS_DC EXP1_07_PIN // DC #define DOGLCD_CS EXP1_08_PIN // CS - #define DOGLCD_A0 LCD_PINS_DC // A0 = DC + #define DOGLCD_A0 LCD_PINS_DC #define DOGLCD_MOSI EXP1_10_PIN // SDA #define DOGLCD_SCK EXP1_09_PIN // SCK // Encoder diff --git a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h index 6e9e0e4b4f..af71f0d562 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_MONSTER8.h @@ -352,9 +352,9 @@ #elif ENABLED(FYSETC_MINI_12864_2_1) + #define LCD_PINS_DC EXP1_07_PIN #define DOGLCD_CS EXP1_08_PIN - #define DOGLCD_A0 EXP1_07_PIN - #define LCD_PINS_DC DOGLCD_A0 + #define DOGLCD_A0 LCD_PINS_DC #define LCD_BACKLIGHT_PIN -1 #define LCD_RESET_PIN EXP1_06_PIN #define NEOPIXEL_PIN EXP1_05_PIN diff --git a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h index b892affe68..dee6923076 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h @@ -338,9 +338,9 @@ //#undef SHOW_BOOTSCREEN #elif ENABLED(FYSETC_MINI_12864_2_1) + #define LCD_PINS_DC EXP1_07_PIN #define DOGLCD_CS EXP1_08_PIN - #define DOGLCD_A0 EXP1_07_PIN - #define LCD_PINS_DC DOGLCD_A0 + #define DOGLCD_A0 LCD_PINS_DC #define LCD_BACKLIGHT_PIN -1 #define LCD_RESET_PIN EXP1_06_PIN #define NEOPIXEL_PIN EXP1_05_PIN From 02b01c773eb59b3495bf4e6ec7f71f1d4d97a4e1 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 22 Jan 2022 18:04:48 +0000 Subject: [PATCH 404/532] [cron] Bump distribution date (2022-01-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 60f145ab24..87f076ea42 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 "2022-01-21" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 8c98d3bb51..47ae8cf72d 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 "2022-01-21" + #define STRING_DISTRIBUTION_DATE "2022-01-22" #endif /** From f6ea8d11857b92a31edd17a5d9e46b55fcd59bf9 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Tue, 25 Jan 2022 00:09:53 -0800 Subject: [PATCH 405/532] =?UTF-8?q?=F0=9F=94=A8=20Creality=20RCT6=20(256K)?= =?UTF-8?q?=20variants=20(#23599)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- .github/workflows/test-builds.yml | 4 +- Marlin/src/core/boards.h | 110 +++++++++--------- Marlin/src/pins/pins.h | 16 +-- ...F103RET6_creality => STM32F103RE_creality} | 2 +- ini/stm32f1-maple.ini | 2 +- ini/stm32f1.ini | 36 +++++- 6 files changed, 97 insertions(+), 73 deletions(-) rename buildroot/tests/{STM32F103RET6_creality => STM32F103RE_creality} (97%) diff --git a/.github/workflows/test-builds.yml b/.github/workflows/test-builds.yml index f5ce466d90..e37f532402 100644 --- a/.github/workflows/test-builds.yml +++ b/.github/workflows/test-builds.yml @@ -66,7 +66,7 @@ jobs: - mks_robin_lite_maple - mks_robin_pro_maple #- mks_robin_nano35_maple - #- STM32F103RET6_creality_maple + #- STM32F103RE_creality_maple - STM32F103VE_ZM3E4V2_USB_maple # STM32 (ST) Environments @@ -75,7 +75,7 @@ jobs: #- STM32F103RC_btt_USB - STM32F103RE_btt - STM32F103RE_btt_USB - - STM32F103RET6_creality + - STM32F103RE_creality - STM32F103VE_longer - STM32F407VE_black - STM32F401VE_STEVAL diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index aee9b3c492..6d294ddcc2 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -300,26 +300,26 @@ #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 // STM32C8T6 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 // STM32F103VET6 controller -#define BOARD_GTM32_MINI 4006 // STM32F103VET6 controller -#define BOARD_GTM32_MINI_A30 4007 // STM32F103VET6 controller -#define BOARD_GTM32_REV_B 4008 // STM32F103VET6 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 (STM32F103RET6) -#define BOARD_MKS_ROBIN 4011 // MKS Robin (STM32F103ZET6) -#define BOARD_MKS_ROBIN_MINI 4012 // MKS Robin Mini (STM32F103VET6) -#define BOARD_MKS_ROBIN_NANO 4013 // MKS Robin Nano (STM32F103VET6) -#define BOARD_MKS_ROBIN_NANO_V2 4014 // MKS Robin Nano V2 (STM32F103VET6) -#define BOARD_MKS_ROBIN_LITE 4015 // MKS Robin Lite/Lite2 (STM32F103RCT6) -#define BOARD_MKS_ROBIN_LITE3 4016 // MKS Robin Lite3 (STM32F103RCT6) -#define BOARD_MKS_ROBIN_PRO 4017 // MKS Robin Pro (STM32F103ZET6) -#define BOARD_MKS_ROBIN_E3 4018 // MKS Robin E3 (STM32F103RCT6) -#define BOARD_MKS_ROBIN_E3_V1_1 4019 // MKS Robin E3 V1.1 (STM32F103RCT6) -#define BOARD_MKS_ROBIN_E3D 4020 // MKS Robin E3D (STM32F103RCT6) -#define BOARD_MKS_ROBIN_E3D_V1_1 4021 // MKS Robin E3D V1.1 (STM32F103RCT6) -#define BOARD_MKS_ROBIN_E3P 4022 // MKS Robin E3p (STM32F103VET6) +#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_SKR_MINI_V1_1 4023 // BigTreeTech SKR Mini v1.1 (STM32F103RC) #define BOARD_BTT_SKR_MINI_E3_V1_0 4024 // BigTreeTech SKR Mini E3 (STM32F103RC) #define BOARD_BTT_SKR_MINI_E3_V1_2 4025 // BigTreeTech SKR Mini E3 V1.2 (STM32F103RC) @@ -328,11 +328,11 @@ #define BOARD_BTT_SKR_MINI_MZ_V1_0 4028 // BigTreeTech SKR Mini MZ V1.0 (STM32F103RC) #define BOARD_BTT_SKR_E3_DIP 4029 // BigTreeTech SKR E3 DIP V1.0 (STM32F103RC / STM32F103RE) #define BOARD_BTT_SKR_CR6 4030 // BigTreeTech SKR CR6 v1.0 (STM32F103RE) -#define BOARD_JGAURORA_A5S_A1 4031 // JGAurora A5S A1 (STM32F103ZET6) +#define BOARD_JGAURORA_A5S_A1 4031 // JGAurora A5S A1 (STM32F103ZE) #define BOARD_FYSETC_AIO_II 4032 // FYSETC AIO_II #define BOARD_FYSETC_CHEETAH 4033 // FYSETC Cheetah #define BOARD_FYSETC_CHEETAH_V12 4034 // FYSETC Cheetah V1.2 -#define BOARD_LONGER3D_LK 4035 // Alfawise U20/U20+/U30 (Longer3D LK1/2) / STM32F103VET6 +#define BOARD_LONGER3D_LK 4035 // Alfawise U20/U20+/U30 (Longer3D LK1/2) / STM32F103VE #define BOARD_CCROBOT_MEEB_3DP 4036 // ccrobot-online.com MEEB_3DP (STM32F103RC) #define BOARD_CHITU3D_V5 4037 // Chitu3D TronXY X5SA V5 Board #define BOARD_CHITU3D_V6 4038 // Chitu3D TronXY X5SA V6 Board @@ -349,16 +349,16 @@ #define BOARD_CREALITY_V452 4049 // Creality v4.5.2 (STM32F103RE) #define BOARD_CREALITY_V453 4050 // Creality v4.5.3 (STM32F103RE) #define BOARD_CREALITY_V24S1 4051 // Creality v2.4.S1 (STM32F103RE) v101 as found in the Ender 7 -#define BOARD_TRIGORILLA_PRO 4052 // Trigorilla Pro (STM32F103ZET6) -#define BOARD_FLY_MINI 4053 // FLYmaker FLY MINI (STM32F103RCT6) -#define BOARD_FLSUN_HISPEED 4054 // FLSUN HiSpeedV1 (STM32F103VET6) -#define BOARD_BEAST 4055 // STM32F103RET6 Libmaple-based controller -#define BOARD_MINGDA_MPX_ARM_MINI 4056 // STM32F103ZET6 Mingda MD-16 -#define BOARD_GTM32_PRO_VD 4057 // STM32F103VET6 controller -#define BOARD_ZONESTAR_ZM3E2 4058 // Zonestar ZM3E2 (STM32F103RCT6) -#define BOARD_ZONESTAR_ZM3E4 4059 // Zonestar ZM3E4 V1 (STM32F103VCT6) -#define BOARD_ZONESTAR_ZM3E4V2 4060 // Zonestar ZM3E4 V2 (STM32F103VCT6) -#define BOARD_ERYONE_ERY32_MINI 4061 // Eryone Ery32 mini (STM32F103VET6) +#define BOARD_TRIGORILLA_PRO 4052 // Trigorilla Pro (STM32F103ZE) +#define BOARD_FLY_MINI 4053 // FLYmaker FLY MINI (STM32F103RC) +#define BOARD_FLSUN_HISPEED 4054 // FLSUN HiSpeedV1 (STM32F103VE) +#define BOARD_BEAST 4055 // STM32F103RE Libmaple-based controller +#define BOARD_MINGDA_MPX_ARM_MINI 4056 // STM32F103ZE Mingda MD-16 +#define BOARD_GTM32_PRO_VD 4057 // STM32F103VE controller +#define BOARD_ZONESTAR_ZM3E2 4058 // Zonestar ZM3E2 (STM32F103RC) +#define BOARD_ZONESTAR_ZM3E4 4059 // Zonestar ZM3E4 V1 (STM32F103VC) +#define BOARD_ZONESTAR_ZM3E4V2 4060 // Zonestar ZM3E4 V2 (STM32F103VC) +#define BOARD_ERYONE_ERY32_MINI 4061 // Eryone Ery32 mini (STM32F103VE) // // ARM Cortex-M4F @@ -372,44 +372,44 @@ // #define BOARD_ARMED 4200 // Arm'ed STM32F4-based controller -#define BOARD_RUMBA32_V1_0 4201 // RUMBA32 STM32F446VET6 based controller from Aus3D -#define BOARD_RUMBA32_V1_1 4202 // RUMBA32 STM32F446VET6 based controller from Aus3D -#define BOARD_RUMBA32_MKS 4203 // RUMBA32 STM32F446VET6 based controller from Makerbase -#define BOARD_RUMBA32_BTT 4204 // RUMBA32 STM32F446VET6 based controller from BIGTREETECH +#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_STEVAL_3DP001V1 4207 // STEVAL-3DP001V1 3D PRINTER BOARD -#define BOARD_BTT_SKR_PRO_V1_1 4208 // BigTreeTech SKR Pro v1.1 (STM32F407ZGT6) -#define BOARD_BTT_SKR_PRO_V1_2 4209 // BigTreeTech SKR Pro v1.2 (STM32F407ZGT6) -#define BOARD_BTT_BTT002_V1_0 4210 // BigTreeTech BTT002 v1.0 (STM32F407VGT6) -#define BOARD_BTT_E3_RRF 4211 // BigTreeTech E3 RRF (STM32F407VGT6) -#define BOARD_BTT_SKR_V2_0_REV_A 4212 // BigTreeTech SKR v2.0 Rev A (STM32F407VGT6) -#define BOARD_BTT_SKR_V2_0_REV_B 4213 // BigTreeTech SKR v2.0 Rev B (STM32F407VGT6/STM32F429VGT6) +#define BOARD_BTT_SKR_PRO_V1_1 4208 // BigTreeTech SKR Pro v1.1 (STM32F407ZG) +#define BOARD_BTT_SKR_PRO_V1_2 4209 // BigTreeTech SKR Pro v1.2 (STM32F407ZG) +#define BOARD_BTT_BTT002_V1_0 4210 // BigTreeTech BTT002 v1.0 (STM32F407VG) +#define BOARD_BTT_E3_RRF 4211 // BigTreeTech E3 RRF (STM32F407VG) +#define BOARD_BTT_SKR_V2_0_REV_A 4212 // BigTreeTech SKR v2.0 Rev A (STM32F407VG) +#define BOARD_BTT_SKR_V2_0_REV_B 4213 // BigTreeTech SKR v2.0 Rev B (STM32F407VG/STM32F429VG) #define BOARD_BTT_GTR_V1_0 4214 // BigTreeTech GTR v1.0 (STM32F407IGT) -#define BOARD_BTT_OCTOPUS_V1_0 4215 // BigTreeTech Octopus v1.0 (STM32F446ZET6) -#define BOARD_BTT_OCTOPUS_V1_1 4216 // BigTreeTech Octopus v1.1 (STM32F446ZET6) -#define BOARD_BTT_OCTOPUS_PRO_V1_0 4217 // BigTreeTech Octopus Pro v1.0 (STM32F446ZET6/STM32F429ZGT6) +#define BOARD_BTT_OCTOPUS_V1_0 4215 // BigTreeTech Octopus v1.0 (STM32F446ZE) +#define BOARD_BTT_OCTOPUS_V1_1 4216 // BigTreeTech Octopus v1.1 (STM32F446ZE) +#define BOARD_BTT_OCTOPUS_PRO_V1_0 4217 // BigTreeTech Octopus Pro v1.0 (STM32F446ZE/STM32F429ZG) #define BOARD_LERDGE_K 4218 // Lerdge K (STM32F407ZG) #define BOARD_LERDGE_S 4219 // Lerdge S (STM32F407VE) #define BOARD_LERDGE_X 4220 // Lerdge X (STM32F407VE) -#define BOARD_VAKE403D 4221 // VAkE 403D (STM32F446VET6) -#define BOARD_FYSETC_S6 4222 // FYSETC S6 (STM32F446VET6) -#define BOARD_FYSETC_S6_V2_0 4223 // FYSETC S6 v2.0 (STM32F446VET6) -#define BOARD_FYSETC_SPIDER 4224 // FYSETC Spider (STM32F446VET6) +#define BOARD_VAKE403D 4221 // VAkE 403D (STM32F446VE) +#define BOARD_FYSETC_S6 4222 // FYSETC S6 (STM32F446VE) +#define BOARD_FYSETC_S6_V2_0 4223 // FYSETC S6 v2.0 (STM32F446VE) +#define BOARD_FYSETC_SPIDER 4224 // FYSETC Spider (STM32F446VE) #define BOARD_FLYF407ZG 4225 // FLYmaker FLYF407ZG (STM32F407ZG) #define BOARD_MKS_ROBIN2 4226 // MKS_ROBIN2 (STM32F407ZE) #define BOARD_MKS_ROBIN_PRO_V2 4227 // MKS Robin Pro V2 (STM32F407VE) #define BOARD_MKS_ROBIN_NANO_V3 4228 // MKS Robin Nano V3 (STM32F407VG) -#define BOARD_MKS_MONSTER8 4229 // MKS Monster8 (STM32F407VGT6) -#define BOARD_ANET_ET4 4230 // ANET ET4 V1.x (STM32F407VGT6) -#define BOARD_ANET_ET4P 4231 // ANET ET4P V1.x (STM32F407VGT6) +#define BOARD_MKS_MONSTER8 4229 // MKS Monster8 (STM32F407VG) +#define BOARD_ANET_ET4 4230 // ANET ET4 V1.x (STM32F407VG) +#define BOARD_ANET_ET4P 4231 // ANET ET4P V1.x (STM32F407VG) #define BOARD_FYSETC_CHEETAH_V20 4232 // FYSETC Cheetah V2.0 #define BOARD_TH3D_EZBOARD_V2 4233 // TH3D EZBoard v2.0 -#define BOARD_INDEX_REV03 4234 // Index PnP Controller REV03 (STM32F407VET6/VGT6) -#define BOARD_MKS_ROBIN_NANO_V1_3_F4 4235 // MKS Robin Nano V1.3 and MKS Robin Nano-S V1.3 (STM32F407VET6) -#define BOARD_MKS_EAGLE 4236 // MKS Eagle (STM32F407VET6) -#define BOARD_ARTILLERY_RUBY 4237 // Artillery Ruby (STM32F401RCT6) -#define BOARD_FYSETC_SPIDER_V2_2 4238 // FYSETC Spider V2.2 (STM32F446VET6) +#define BOARD_INDEX_REV03 4234 // Index PnP Controller REV03 (STM32F407VE/VG) +#define BOARD_MKS_ROBIN_NANO_V1_3_F4 4235 // MKS Robin Nano V1.3 and MKS Robin Nano-S V1.3 (STM32F407VE) +#define BOARD_MKS_EAGLE 4236 // MKS Eagle (STM32F407VE) +#define BOARD_ARTILLERY_RUBY 4237 // Artillery Ruby (STM32F401RC) +#define BOARD_FYSETC_SPIDER_V2_2 4238 // FYSETC Spider V2.2 (STM32F446VE) // // ARM Cortex M7 diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 7ca78677e9..858a00524f 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -558,21 +558,21 @@ #elif MB(CHITU3D_V9) #include "stm32f1/pins_CHITU3D_V9.h" // STM32F1 env:chitu_f103 env:chitu_f103_maple #elif MB(CREALITY_V4) - #include "stm32f1/pins_CREALITY_V4.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer env:STM32F103RET6_creality_maple + #include "stm32f1/pins_CREALITY_V4.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(CREALITY_V4210) - #include "stm32f1/pins_CREALITY_V4210.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer env:STM32F103RET6_creality_maple + #include "stm32f1/pins_CREALITY_V4210.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(CREALITY_V423) - #include "stm32f1/pins_CREALITY_V423.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer + #include "stm32f1/pins_CREALITY_V423.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer #elif MB(CREALITY_V427) - #include "stm32f1/pins_CREALITY_V427.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer env:STM32F103RET6_creality_maple + #include "stm32f1/pins_CREALITY_V427.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(CREALITY_V431, CREALITY_V431_A, CREALITY_V431_B, CREALITY_V431_C, CREALITY_V431_D) - #include "stm32f1/pins_CREALITY_V431.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer env:STM32F103RET6_creality_maple + #include "stm32f1/pins_CREALITY_V431.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(CREALITY_V452) - #include "stm32f1/pins_CREALITY_V452.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer env:STM32F103RET6_creality_maple + #include "stm32f1/pins_CREALITY_V452.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(CREALITY_V453) - #include "stm32f1/pins_CREALITY_V453.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer env:STM32F103RET6_creality_maple + #include "stm32f1/pins_CREALITY_V453.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(CREALITY_V24S1) - #include "stm32f1/pins_CREALITY_V24S1.h" // STM32F1 env:STM32F103RET6_creality env:STM32F103RET6_creality_xfer env:STM32F103RET6_creality_maple + #include "stm32f1/pins_CREALITY_V24S1.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(TRIGORILLA_PRO) #include "stm32f1/pins_TRIGORILLA_PRO.h" // STM32F1 env:trigorilla_pro env:trigorilla_pro_maple #elif MB(FLY_MINI) diff --git a/buildroot/tests/STM32F103RET6_creality b/buildroot/tests/STM32F103RE_creality similarity index 97% rename from buildroot/tests/STM32F103RET6_creality rename to buildroot/tests/STM32F103RE_creality index 8eda5f801d..27fc26f0a0 100755 --- a/buildroot/tests/STM32F103RET6_creality +++ b/buildroot/tests/STM32F103RE_creality @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Build tests for STM32F103RET6_creality +# Build tests for STM32F103RE_creality # # exit on first failure diff --git a/ini/stm32f1-maple.ini b/ini/stm32f1-maple.ini index 878ccd6f7c..774c3b2efb 100644 --- a/ini/stm32f1-maple.ini +++ b/ini/stm32f1-maple.ini @@ -114,7 +114,7 @@ monitor_speed = 115200 # # Creality (STM32F103RET6) # -[env:STM32F103RET6_creality_maple] +[env:STM32F103RE_creality_maple] extends = env:STM32F103RE_maple build_flags = ${common_stm32f1.build_flags} -DTEMP_TIMER_CHAN=4 board_build.address = 0x08007000 diff --git a/ini/stm32f1.ini b/ini/stm32f1.ini index a0957dbaec..07b75e4e94 100644 --- a/ini/stm32f1.ini +++ b/ini/stm32f1.ini @@ -103,11 +103,10 @@ build_unflags = ${common_STM32F103RC_variant.build_unflags} debug_tool = stlink # -# Creality (STM32F103RET6) +# Creality (STM32F103Rx) # -[env:STM32F103RET6_creality] +[STM32F103Rx_creality] extends = stm32_variant -board = genericSTM32F103RE board_build.variant = MARLIN_F103Rx board_build.offset = 0x7000 board_upload.offset_address = 0x08007000 @@ -123,12 +122,37 @@ monitor_speed = 115200 debug_tool = jlink upload_protocol = jlink -[env:STM32F103RET6_creality_xfer] -extends = env:STM32F103RET6_creality -extra_scripts = ${env:STM32F103RET6_creality.extra_scripts} +# +# Custom upload to SD via Marlin with Binary Protocol +# +[STM32F103Rx_creality_xfer] +extends = STM32F103Rx_creality +extra_scripts = ${STM32F103Rx_creality.extra_scripts} pre:buildroot/share/scripts/upload.py upload_protocol = custom +# +# Creality 512K (STM32F103RE) +# +[env:STM32F103RE_creality] +extends = STM32F103Rx_creality +board = genericSTM32F103RE + +[env:STM32F103RE_creality_xfer] +extends = STM32F103Rx_creality_xfer +board = genericSTM32F103RE + +# +# Creality 256K (STM32F103RC) +# +[env:STM32F103RC_creality] +extends = STM32F103Rx_creality +board = genericSTM32F103RC + +[env:STM32F103RC_creality_xfer] +extends = STM32F103Rx_creality_xfer +board = genericSTM32F103RC + # # BigTree SKR Mini E3 V2.0 & DIP / SKR CR6 (STM32F103RET6 ARM Cortex-M3) # From 539a893694533cd94ed58288242556febc3ba643 Mon Sep 17 00:00:00 2001 From: DejitaruJin Date: Tue, 25 Jan 2022 03:52:23 -0500 Subject: [PATCH 406/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20DWIN=20float=20deb?= =?UTF-8?q?ugging=20(#23601)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h | 2 +- Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h | 2 +- Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp | 4 ++-- Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h | 2 +- Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h index dfc1e9ea7d..d4fdf1d27e 100644 --- a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h @@ -206,7 +206,7 @@ public: static void DGUSLCD_SendFloatAsIntValueToDisplay(DGUS_VP_Variable &var) { if (var.memadr) { float f = *(float *)var.memadr; - DEBUG_ECHOLNPGM(" >> ", f, 6); + DEBUG_ECHOLNPAIR_F(" >> ", f, 6); f *= cpow(10, decimals); dgusdisplay.WriteVariable(var.VP, (int16_t)f); } diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h index dfc1e9ea7d..d4fdf1d27e 100644 --- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h @@ -206,7 +206,7 @@ public: static void DGUSLCD_SendFloatAsIntValueToDisplay(DGUS_VP_Variable &var) { if (var.memadr) { float f = *(float *)var.memadr; - DEBUG_ECHOLNPGM(" >> ", f, 6); + DEBUG_ECHOLNPAIR_F(" >> ", f, 6); f *= cpow(10, decimals); dgusdisplay.WriteVariable(var.VP, (int16_t)f); } diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp index 695f50852b..0457a06d04 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp @@ -93,7 +93,7 @@ void DGUSScreenHandler::DGUSLCD_SendFanToDisplay(DGUS_VP_Variable &var) { void DGUSScreenHandler::DGUSLCD_SendBabyStepToDisplay_MKS(DGUS_VP_Variable &var) { float value = current_position.z; - DEBUG_ECHOLNPGM(" >> ", value, 6); + DEBUG_ECHOLNPAIR_F(" >> ", value, 6); value *= cpow(10, 2); dgusdisplay.WriteVariable(VP_SD_Print_Baby, (uint16_t)value); } @@ -756,7 +756,7 @@ 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.length); + DEBUG_ECHOLNPGM("QUEUE LEN:", queue.ring_buffer.length); if (!print_job_timer.isPaused() && !queue.ring_buffer.empty()) return; diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h index ce557e738f..05a4b47b17 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h @@ -273,7 +273,7 @@ public: static void DGUSLCD_SendFloatAsIntValueToDisplay(DGUS_VP_Variable &var) { if (var.memadr) { float f = *(float *)var.memadr; - DEBUG_ECHOLNPGM(" >> ", f, 6); + DEBUG_ECHOLNPAIR_F(" >> ", f, 6); f *= cpow(10, decimals); dgusdisplay.WriteVariable(var.VP, (int16_t)f); } diff --git a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h index dfc1e9ea7d..d4fdf1d27e 100644 --- a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h @@ -206,7 +206,7 @@ public: static void DGUSLCD_SendFloatAsIntValueToDisplay(DGUS_VP_Variable &var) { if (var.memadr) { float f = *(float *)var.memadr; - DEBUG_ECHOLNPGM(" >> ", f, 6); + DEBUG_ECHOLNPAIR_F(" >> ", f, 6); f *= cpow(10, decimals); dgusdisplay.WriteVariable(var.VP, (int16_t)f); } From 7f97ba9cdb17a82e9aed5eb4c64a1bdf2f419e81 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Tue, 25 Jan 2022 01:25:19 -0800 Subject: [PATCH 407/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Creality=20DWIN=20?= =?UTF-8?q?LCD=20with=20SKR=20Mini=20E3=20V3=20(#23593)?= 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 2daa15d0d3..1200d18dd0 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -509,7 +509,7 @@ #if HAS_DWIN_E3V2 || IS_DWIN_MARLINUI #define SERIAL_CATCHALL 0 #ifndef LCD_SERIAL_PORT - #if MB(BTT_SKR_MINI_E3_V1_0, BTT_SKR_MINI_E3_V1_2, BTT_SKR_MINI_E3_V2_0, BTT_SKR_E3_TURBO) + #if MB(BTT_SKR_MINI_E3_V1_0, BTT_SKR_MINI_E3_V1_2, BTT_SKR_MINI_E3_V2_0, BTT_SKR_MINI_E3_V3_0, BTT_SKR_E3_TURBO) #define LCD_SERIAL_PORT 1 #else #define LCD_SERIAL_PORT 3 // Creality 4.x board From 8badf2d71ff52e0952bb98df25bb8fcb25eda9da Mon Sep 17 00:00:00 2001 From: Lars Date: Tue, 25 Jan 2022 10:30:45 +0100 Subject: [PATCH 408/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20DGUS=5FReloaded=20?= =?UTF-8?q?G-code=20execution=20(#23592)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lcd/extui/dgus_reloaded/DGUSDisplay.cpp | 7 ++- .../src/lcd/extui/dgus_reloaded/DGUSDisplay.h | 3 + .../extui/dgus_reloaded/DGUSScreenHandler.cpp | 59 +++++++------------ 3 files changed, 29 insertions(+), 40 deletions(-) diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp index c03f655fba..15b3f5adcd 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.cpp @@ -57,7 +57,7 @@ void DGUSDisplay::Loop() { void DGUSDisplay::Init() { LCD_SERIAL.begin(LCD_BAUDRATE); - Read(DGUS_VERSION, 1); + ReadVersions(); } void DGUSDisplay::Read(uint16_t addr, uint8_t size) { @@ -158,6 +158,11 @@ void DGUSDisplay::WriteStringPGM(uint16_t addr, const void* data_ptr, uint8_t si } } +void DGUSDisplay::ReadVersions() { + if (gui_version != 0 && os_version != 0) return; + Read(DGUS_VERSION, 1); +} + void DGUSDisplay::SwitchScreen(DGUS_Screen screen) { DEBUG_ECHOLNPGM("SwitchScreen ", (uint8_t)screen); const uint8_t command[] = { 0x5A, 0x01, 0x00, (uint8_t)screen }; diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h index 332108d81a..fa5bf30396 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSDisplay.h @@ -69,6 +69,9 @@ public: // Until now I did not need to actively read from the display. That's why there is no ReadVariable // (I extensively use the auto upload of the display) + // Read GUI and OS version from screen + static void ReadVersions(); + // Force display into another screen. static void SwitchScreen(DGUS_Screen screen); // Play sounds using the display speaker. diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp index 17e7a38445..6388e1683d 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp @@ -100,37 +100,37 @@ void DGUSScreenHandler::Loop() { if (new_screen != DGUS_Screen::BOOT) { const DGUS_Screen screen = new_screen; new_screen = DGUS_Screen::BOOT; - - if (current_screen == screen) { + if (current_screen == screen) TriggerFullUpdate(); - } - else { + else MoveToScreen(screen); - } return; } if (!booted && ELAPSED(ms, 3000)) { booted = true; - if (current_screen == DGUS_Screen::BOOT) { + dgus_display.ReadVersions(); + + if (current_screen == DGUS_Screen::BOOT) MoveToScreen(DGUS_Screen::HOME); - } + return; } if (ELAPSED(ms, next_event_ms) || full_update) { next_event_ms = ms + DGUS_UPDATE_INTERVAL_MS; - if (!SendScreenVPData(current_screen, full_update)) { + if (!SendScreenVPData(current_screen, full_update)) DEBUG_ECHOLNPGM("SendScreenVPData failed"); - } + return; } if (current_screen == DGUS_Screen::WAIT && ((wait_continue && !wait_for_user) - || (!wait_continue && IsPrinterIdle()))) { + || (!wait_continue && IsPrinterIdle())) + ) { MoveToScreen(wait_return_screen, true); return; } @@ -151,7 +151,6 @@ void DGUSScreenHandler::Loop() { if (eeprom_save > 0 && ELAPSED(ms, eeprom_save) && IsPrinterIdle()) { eeprom_save = 0; - queue.enqueue_now_P(DGUS_CMD_EEPROM_SAVE); return; } @@ -187,7 +186,6 @@ void DGUSScreenHandler::SettingsReset() { if (!settings_ready) { settings_ready = true; - Ready(); } @@ -225,9 +223,8 @@ void DGUSScreenHandler::LoadSettings(const char *buff) { } void DGUSScreenHandler::ConfigurationStoreWritten(bool success) { - if (!success) { + if (!success) SetStatusMessage(F("EEPROM write failed")); - } } void DGUSScreenHandler::ConfigurationStoreRead(bool success) { @@ -236,7 +233,6 @@ void DGUSScreenHandler::ConfigurationStoreRead(bool success) { } else if (!settings_ready) { settings_ready = true; - Ready(); } } @@ -245,33 +241,25 @@ void DGUSScreenHandler::PlayTone(const uint16_t frequency, const uint16_t durati UNUSED(duration); if (frequency >= 1 && frequency <= 255) { - if (duration >= 1 && duration <= 255) { + if (duration >= 1 && duration <= 255) dgus_display.PlaySound((uint8_t)frequency, (uint8_t)duration); - } - else { + else dgus_display.PlaySound((uint8_t)frequency); - } } } void DGUSScreenHandler::MeshUpdate(const int8_t xpos, const int8_t ypos) { if (current_screen != DGUS_Screen::LEVELING_PROBING) { - if (current_screen == DGUS_Screen::LEVELING_AUTOMATIC) { + if (current_screen == DGUS_Screen::LEVELING_AUTOMATIC) TriggerFullUpdate(); - } - return; } uint8_t point = ypos * GRID_MAX_POINTS_X + xpos; probing_icons[point < 16 ? 0 : 1] |= (1U << (point % 16)); - if (xpos >= GRID_MAX_POINTS_X - 1 - && ypos >= GRID_MAX_POINTS_Y - 1 - && !ExtUI::getMeshValid()) { - probing_icons[0] = 0; - probing_icons[1] = 0; - } + if (xpos >= GRID_MAX_POINTS_X - 1 && ypos >= GRID_MAX_POINTS_Y - 1 && !ExtUI::getMeshValid()) + probing_icons[0] = probing_icons[1] = 0; TriggerFullUpdate(); } @@ -282,15 +270,12 @@ void DGUSScreenHandler::PrintTimerStarted() { void DGUSScreenHandler::PrintTimerPaused() { dgus_display.PlaySound(3); - TriggerFullUpdate(); } void DGUSScreenHandler::PrintTimerStopped() { - if (current_screen != DGUS_Screen::PRINT_STATUS - && current_screen != DGUS_Screen::PRINT_ADJUST) { + if (current_screen != DGUS_Screen::PRINT_STATUS && current_screen != DGUS_Screen::PRINT_ADJUST) return; - } dgus_display.PlaySound(3); @@ -309,23 +294,19 @@ void DGUSScreenHandler::FilamentRunout(const ExtUI::extruder_t extruder) { #if ENABLED(SDSUPPORT) void DGUSScreenHandler::SDCardInserted() { - if (current_screen == DGUS_Screen::HOME) { + if (current_screen == DGUS_Screen::HOME) TriggerScreenChange(DGUS_Screen::PRINT); - } } void DGUSScreenHandler::SDCardRemoved() { - if (current_screen == DGUS_Screen::PRINT) { + if (current_screen == DGUS_Screen::PRINT) TriggerScreenChange(DGUS_Screen::HOME); - } } void DGUSScreenHandler::SDCardError() { SetStatusMessage(GET_TEXT_F(MSG_MEDIA_READ_ERROR)); - - if (current_screen == DGUS_Screen::PRINT) { + if (current_screen == DGUS_Screen::PRINT) TriggerScreenChange(DGUS_Screen::HOME); - } } #endif // SDSUPPORT From 5b9afdfb25f16dbe421b3ea051ef2b7eacc89ba3 Mon Sep 17 00:00:00 2001 From: Timofey Titovets Date: Tue, 25 Jan 2022 12:36:09 +0300 Subject: [PATCH 409/532] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20Tuned=20Thermistor?= =?UTF-8?q?=2066=20(T-D500)=20(#23585)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/thermistor/thermistor_66.h | 109 +++++++++++++++---- 1 file changed, 88 insertions(+), 21 deletions(-) diff --git a/Marlin/src/module/thermistor/thermistor_66.h b/Marlin/src/module/thermistor/thermistor_66.h index 3b057ac696..07cb297679 100644 --- a/Marlin/src/module/thermistor/thermistor_66.h +++ b/Marlin/src/module/thermistor/thermistor_66.h @@ -27,27 +27,94 @@ constexpr temp_entry_t temptable_66[] PROGMEM = { { OV( 17.9), 500 }, { OV( 21.7), 480 }, { OV( 26.6), 460 }, - { OV( 33.1), 440 }, - { OV( 41.0), 420 }, - { OV( 52.3), 400 }, - { OV( 67.7), 380 }, - { OV( 86.5), 360 }, - { OV( 112.0), 340 }, - { OV( 147.2), 320 }, - { OV( 194.0), 300 }, - { OV( 254.3), 280 }, - { OV( 330.2), 260 }, - { OV( 427.9), 240 }, - { OV( 533.4), 220 }, - { OV( 646.5), 200 }, - { OV( 754.4), 180 }, - { OV( 844.3), 160 }, - { OV( 911.7), 140 }, - { OV( 958.6), 120 }, - { OV( 988.8), 100 }, + { OV( 34.0), 430 }, + { OV( 36.0), 426 }, + { OV( 37.0), 422 }, + { OV( 38.0), 418 }, + { OV( 40.4), 414 }, + { OV( 43.0), 410 }, + { OV( 45.6), 406 }, + { OV( 48.0), 402 }, + { OV( 50.6), 398 }, + { OV( 53.0), 394 }, + { OV( 56.0), 390 }, + { OV( 58.0), 386 }, + { OV( 61.0), 382 }, + { OV( 64.0), 378 }, + { OV( 68.0), 374 }, + { OV( 72.0), 370 }, + { OV( 75.0), 366 }, + { OV( 79.0), 362 }, + { OV( 83.0), 358 }, + { OV( 88.0), 354 }, + { OV( 93.0), 350 }, + { OV( 97.0), 346 }, + { OV( 103.0), 342 }, + { OV( 109.0), 338 }, + { OV( 115.0), 334 }, + { OV( 121.0), 330 }, + { OV( 128.0), 326 }, + { OV( 135.0), 322 }, + { OV( 143.0), 318 }, + { OV( 151.0), 314 }, + { OV( 160.0), 310 }, + { OV( 168.0), 306 }, + { OV( 177.0), 302 }, + { OV( 188.0), 298 }, + { OV( 198.0), 294 }, + { OV( 209.0), 290 }, + { OV( 222.0), 286 }, + { OV( 235.0), 282 }, + { OV( 248.0), 278 }, + { OV( 262.0), 274 }, + { OV( 276.0), 270 }, + { OV( 291.0), 266 }, + { OV( 306.0), 262 }, + { OV( 323.0), 258 }, + { OV( 340.0), 254 }, + { OV( 357.0), 250 }, + { OV( 378.0), 246 }, + { OV( 397.0), 242 }, + { OV( 417.0), 238 }, + { OV( 437.0), 234 }, + { OV( 458.0), 230 }, + { OV( 481.0), 226 }, + { OV( 502.0), 222 }, + { OV( 525.0), 218 }, + { OV( 547.0), 214 }, + { OV( 570.0), 210 }, + { OV( 594.0), 206 }, + { OV( 615.0), 202 }, + { OV( 637.0), 198 }, + { OV( 660.0), 194 }, + { OV( 683.0), 190 }, + { OV( 705.0), 186 }, + { OV( 727.0), 182 }, + { OV( 747.0), 178 }, + { OV( 767.0), 174 }, + { OV( 787.0), 170 }, + { OV( 805.0), 166 }, + { OV( 822.0), 162 }, + { OV( 839.0), 158 }, + { OV( 854.0), 154 }, + { OV( 870.0), 150 }, + { OV( 883.0), 146 }, + { OV( 898.0), 142 }, + { OV( 909.0), 138 }, + { OV( 919.0), 134 }, + { OV( 931.0), 130 }, + { OV( 940.0), 126 }, + { OV( 949.0), 122 }, + { OV( 957.0), 118 }, + { OV( 964.0), 114 }, + { OV( 971.0), 110 }, + { OV( 977.0), 106 }, + { OV( 982.0), 102 }, + { OV( 997.0), 93 }, + { OV(1002.2), 86 }, { OV(1006.6), 80 }, { OV(1015.8), 60 }, - { OV(1021.3), 30 }, - { OV( 1022), 25 }, - { OV( 1023), 20 } + { OV(1019.8), 36 }, + { OV(1020.9), 23 }, + { OV(1022.0), -1 } }; From 231150ab771c1b4e59ddcd077777f7cfd580e148 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 25 Jan 2022 12:11:56 +0000 Subject: [PATCH 410/532] [cron] Bump distribution date (2022-01-25) --- 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 87f076ea42..967ee3bf31 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 "2022-01-22" +//#define STRING_DISTRIBUTION_DATE "2022-01-25" /** * 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 47ae8cf72d..137f51de24 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 "2022-01-22" + #define STRING_DISTRIBUTION_DATE "2022-01-25" #endif /** From ab46b7e2f298826a5512569d6e79bb59a7a6b8ea Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 25 Jan 2022 15:33:03 -0600 Subject: [PATCH 411/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20HAS?= =?UTF-8?q?=5FMARLINUI=5FMENU,=20HAS=5FMANUAL=5FMOVE=5FMENU?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 8 +-- Marlin/src/MarlinCore.cpp | 4 +- Marlin/src/feature/bedlevel/ubl/ubl.h | 2 +- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 24 +++---- Marlin/src/feature/password/password.cpp | 4 +- Marlin/src/feature/password/password.h | 2 +- Marlin/src/feature/pause.cpp | 6 +- Marlin/src/feature/power_monitor.cpp | 2 +- Marlin/src/feature/spindle_laser.h | 4 +- Marlin/src/feature/tmc_util.cpp | 2 +- Marlin/src/feature/tmc_util.h | 20 +++--- Marlin/src/gcode/bedlevel/G26.cpp | 22 +++---- Marlin/src/gcode/control/M80_M81.cpp | 2 +- Marlin/src/gcode/feature/pause/M125.cpp | 2 +- Marlin/src/gcode/feature/powerloss/M1000.cpp | 6 +- Marlin/src/gcode/lcd/M0_M1.cpp | 6 +- Marlin/src/gcode/parser.h | 4 +- Marlin/src/gcode/queue.cpp | 2 +- Marlin/src/gcode/sd/M1001.cpp | 2 +- Marlin/src/inc/Conditionals_LCD.h | 6 +- Marlin/src/inc/Conditionals_post.h | 8 +-- Marlin/src/inc/SanityCheck.h | 16 ++--- Marlin/src/lcd/HD44780/marlinui_HD44780.cpp | 8 +-- Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp | 4 +- Marlin/src/lcd/dogm/marlinui_DOGM.cpp | 4 +- Marlin/src/lcd/e3v2/marlinui/ui_common.cpp | 4 +- Marlin/src/lcd/extui/mks_ui/wifi_module.cpp | 2 +- Marlin/src/lcd/extui/ui_api.h | 2 +- Marlin/src/lcd/marlinui.cpp | 64 +++++++++---------- Marlin/src/lcd/marlinui.h | 30 ++++----- Marlin/src/lcd/menu/menu.cpp | 6 +- Marlin/src/lcd/menu/menu_advanced.cpp | 4 +- Marlin/src/lcd/menu/menu_backlash.cpp | 4 +- Marlin/src/lcd/menu/menu_bed_corners.cpp | 4 +- Marlin/src/lcd/menu/menu_cancelobject.cpp | 4 +- Marlin/src/lcd/menu/menu_configuration.cpp | 4 +- Marlin/src/lcd/menu/menu_delta_calibrate.cpp | 4 +- Marlin/src/lcd/menu/menu_filament.cpp | 4 +- Marlin/src/lcd/menu/menu_info.cpp | 4 +- Marlin/src/lcd/menu/menu_job_recovery.cpp | 4 +- Marlin/src/lcd/menu/menu_led.cpp | 4 +- Marlin/src/lcd/menu/menu_main.cpp | 4 +- Marlin/src/lcd/menu/menu_media.cpp | 4 +- Marlin/src/lcd/menu/menu_mixer.cpp | 4 +- Marlin/src/lcd/menu/menu_mmu2.cpp | 4 +- Marlin/src/lcd/menu/menu_motion.cpp | 4 +- Marlin/src/lcd/menu/menu_password.cpp | 4 +- Marlin/src/lcd/menu/menu_power_monitor.cpp | 4 +- Marlin/src/lcd/menu/menu_spindle_laser.cpp | 4 +- Marlin/src/lcd/menu/menu_temperature.cpp | 4 +- Marlin/src/lcd/menu/menu_tmc.cpp | 2 +- Marlin/src/lcd/menu/menu_touch_screen.cpp | 2 +- Marlin/src/lcd/menu/menu_tramming.cpp | 4 +- Marlin/src/lcd/menu/menu_tune.cpp | 4 +- Marlin/src/lcd/menu/menu_ubl.cpp | 4 +- Marlin/src/lcd/tft/ui_1024x600.cpp | 4 +- Marlin/src/lcd/tft/ui_320x240.cpp | 4 +- Marlin/src/lcd/tft/ui_480x320.cpp | 4 +- Marlin/src/module/temperature.cpp | 4 +- Marlin/src/module/temperature.h | 4 +- Marlin/src/module/tool_change.cpp | 4 +- .../PlatformIO/scripts/common-dependencies.h | 2 +- ini/features.ini | 2 +- 63 files changed, 201 insertions(+), 197 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index ba396431c9..9091a6bdd0 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1257,7 +1257,7 @@ // @section lcd -#if ANY(HAS_LCD_MENU, EXTENSIBLE_UI, HAS_DWIN_E3V2) +#if HAS_MANUAL_MOVE_MENU #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 2*60 } // (mm/min) Feedrates for manual moves along X, Y, Z, E from panel #define FINE_MANUAL_MOVE 0.025 // (mm) Smallest manual move (< 0.1mm) applying to Z on most machines #if IS_ULTIPANEL @@ -1280,7 +1280,7 @@ #define FEEDRATE_CHANGE_BEEP_FREQUENCY 440 #endif -#if HAS_BED_PROBE && EITHER(HAS_LCD_MENU, HAS_TFT_LVGL_UI) +#if HAS_BED_PROBE && EITHER(HAS_MARLINUI_MENU, HAS_TFT_LVGL_UI) //#define PROBE_OFFSET_WIZARD // Add a Probe Z Offset calibration option to the LCD menu #if ENABLED(PROBE_OFFSET_WIZARD) /** @@ -1295,7 +1295,7 @@ #endif #endif -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU // Add Probe Z Offset calibration to the Z Probe Offsets menu #if BOTH(HAS_BED_PROBE, AUTO_BED_LEVELING_BILINEAR) @@ -1351,7 +1351,7 @@ // Insert a menu for preheating at the top level to allow for quick access //#define PREHEAT_SHORTCUT_MENU_ITEM -#endif // HAS_LCD_MENU +#endif // HAS_MARLINUI_MENU #if ANY(HAS_DISPLAY, DWIN_CREALITY_LCD_ENHANCED, DWIN_CREALITY_LCD_JYERSUI) //#define SOUND_MENU_ITEM // Add a mute option to the LCD menu diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index d0065655f1..e34c0d6c3c 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -506,7 +506,7 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) { next_cub_ms_##N = ms + CUB_DEBOUNCE_DELAY_##N; \ CODE; \ queue.inject(F(BUTTON##N##_GCODE)); \ - TERN_(HAS_LCD_MENU, ui.quick_feedback()); \ + TERN_(HAS_MARLINUI_MENU, ui.quick_feedback()); \ } \ } \ }while(0) @@ -1611,7 +1611,7 @@ void setup() { SETUP_RUN(password.lock_machine()); // Will not proceed until correct password provided #endif - #if BOTH(HAS_LCD_MENU, TOUCH_SCREEN_CALIBRATION) && EITHER(TFT_CLASSIC_UI, TFT_COLOR_UI) + #if BOTH(HAS_MARLINUI_MENU, TOUCH_SCREEN_CALIBRATION) && EITHER(TFT_CLASSIC_UI, TFT_COLOR_UI) SETUP_RUN(ui.check_touch_calibration()); #endif diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.h b/Marlin/src/feature/bedlevel/ubl/ubl.h index 73581504b7..f117c1af65 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.h +++ b/Marlin/src/feature/bedlevel/ubl/ubl.h @@ -120,7 +120,7 @@ public: static const float _mesh_index_to_xpos[GRID_MAX_POINTS_X], _mesh_index_to_ypos[GRID_MAX_POINTS_Y]; - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU static bool lcd_map_control; static void steppers_were_disabled(); #else diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index df83923fef..15395bcc8d 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -57,7 +57,7 @@ #define UBL_G29_P31 -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU bool unified_bed_leveling::lcd_map_control = false; @@ -443,7 +443,7 @@ void unified_bed_leveling::G29() { #endif // HAS_BED_PROBE case 2: { - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU // // Manually Probe Mesh in areas that can't be reached by the probe // @@ -555,7 +555,7 @@ void unified_bed_leveling::G29() { } case 4: // Fine Tune (i.e., Edit) the Mesh - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU fine_tune_mesh(param.XY_pos, parser.seen_test('T')); #else SERIAL_ECHOLNPGM("?P4 is only available when an LCD is present."); @@ -646,7 +646,7 @@ void unified_bed_leveling::G29() { LEAVE: - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU ui.reset_alert_level(); ui.quick_feedback(); ui.reset_status(); @@ -725,7 +725,7 @@ void unified_bed_leveling::shift_mesh_height() { void unified_bed_leveling::probe_entire_mesh(const xy_pos_t &nearby, const bool do_ubl_mesh_map, const bool stow_probe, const bool do_furthest) { probe.deploy(); // Deploy before ui.capture() to allow for PAUSE_BEFORE_DEPLOY_STOW - TERN_(HAS_LCD_MENU, ui.capture()); + TERN_(HAS_MARLINUI_MENU, ui.capture()); save_ubl_active_state_and_disable(); // No bed level correction so only raw data is obtained uint8_t count = GRID_MAX_POINTS; @@ -739,7 +739,7 @@ void unified_bed_leveling::shift_mesh_height() { SERIAL_ECHOLNPGM("Probing mesh point ", point_num, "/", GRID_MAX_POINTS, "."); TERN_(HAS_STATUS_MESSAGE, ui.status_printf(0, F(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), point_num, int(GRID_MAX_POINTS))); - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU if (ui.button_pressed()) { ui.quick_feedback(false); // Preserve button state for click-and-hold SERIAL_ECHOLNPGM("\nMesh only partially populated.\n"); @@ -774,9 +774,9 @@ void unified_bed_leveling::shift_mesh_height() { TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(best.pos, ExtUI::G29_FINISH)); // Release UI during stow to allow for PAUSE_BEFORE_DEPLOY_STOW - TERN_(HAS_LCD_MENU, ui.release()); + TERN_(HAS_MARLINUI_MENU, ui.release()); probe.stow(); - TERN_(HAS_LCD_MENU, ui.capture()); + TERN_(HAS_MARLINUI_MENU, ui.capture()); probe.move_z_after_probing(); @@ -791,7 +791,7 @@ void unified_bed_leveling::shift_mesh_height() { #endif // HAS_BED_PROBE void set_message_with_feedback(FSTR_P const fstr) { - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU ui.set_status(fstr); ui.quick_feedback(); #else @@ -799,7 +799,7 @@ void set_message_with_feedback(FSTR_P const fstr) { #endif } -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU typedef void (*clickFunc_t)(); @@ -1070,7 +1070,7 @@ void set_message_with_feedback(FSTR_P const fstr) { ui.return_to_status(); } -#endif // HAS_LCD_MENU +#endif // HAS_MARLINUI_MENU /** * Parse and validate most G29 parameters, store for use by G29 functions. @@ -1210,7 +1210,7 @@ void unified_bed_leveling::save_ubl_active_state_and_disable() { } void unified_bed_leveling::restore_ubl_active_state_and_leave() { - TERN_(HAS_LCD_MENU, ui.release()); + TERN_(HAS_MARLINUI_MENU, ui.release()); #if ENABLED(UBL_DEVEL_DEBUGGING) if (--ubl_state_recursion_chk) { SERIAL_ECHOLNPGM("restore_ubl_active_state_and_leave() called too many times."); diff --git a/Marlin/src/feature/password/password.cpp b/Marlin/src/feature/password/password.cpp index 4e841c243c..1d376cc586 100644 --- a/Marlin/src/feature/password/password.cpp +++ b/Marlin/src/feature/password/password.cpp @@ -40,7 +40,7 @@ uint32_t Password::value, Password::value_entry; // void Password::lock_machine() { is_locked = true; - TERN_(HAS_LCD_MENU, authenticate_user(ui.status_screen, screen_password_entry)); + TERN_(HAS_MARLINUI_MENU, authenticate_user(ui.status_screen, screen_password_entry)); } // @@ -55,7 +55,7 @@ void Password::authentication_check() { is_locked = true; SERIAL_ECHOLNPGM(STR_WRONG_PASSWORD); } - TERN_(HAS_LCD_MENU, authentication_done()); + TERN_(HAS_MARLINUI_MENU, authentication_done()); } #endif // PASSWORD_FEATURE diff --git a/Marlin/src/feature/password/password.h b/Marlin/src/feature/password/password.h index 829d222e20..208765b212 100644 --- a/Marlin/src/feature/password/password.h +++ b/Marlin/src/feature/password/password.h @@ -33,7 +33,7 @@ public: static void lock_machine(); static void authentication_check(); - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU static void access_menu_password(); static void authentication_done(); static void media_gatekeeper(); diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index 191c0e4b08..08f540f2ee 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -97,7 +97,7 @@ fil_change_settings_t fc_settings[EXTRUDERS]; #if HAS_BUZZER static void impatient_beep(const int8_t max_beep_count, const bool restart=false) { - if (TERN0(HAS_LCD_MENU, pause_mode == PAUSE_MODE_PAUSE_PRINT)) return; + if (TERN0(HAS_MARLINUI_MENU, pause_mode == PAUSE_MODE_PAUSE_PRINT)) return; static millis_t next_buzz = 0; static int8_t runout_beep = 0; @@ -277,7 +277,7 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load // Show "Purge More" / "Resume" menu and wait for reply KEEPALIVE_STATE(PAUSED_FOR_USER); wait_for_user = false; - #if EITHER(HAS_LCD_MENU, DWIN_CREALITY_LCD_ENHANCED) + #if EITHER(HAS_MARLINUI_MENU, DWIN_CREALITY_LCD_ENHANCED) ui.pause_show_message(PAUSE_MESSAGE_OPTION); // Also sets PAUSE_RESPONSE_WAIT_FOR #else pause_menu_response = PAUSE_RESPONSE_WAIT_FOR; @@ -691,7 +691,7 @@ void resume_print(const_float_t slow_load_length/*=0*/, const_float_t fast_load_ TERN_(HAS_FILAMENT_SENSOR, runout.reset()); TERN_(HAS_STATUS_MESSAGE, ui.reset_status()); - TERN_(HAS_LCD_MENU, ui.return_to_status()); + TERN_(HAS_MARLINUI_MENU, ui.return_to_status()); TERN_(DWIN_CREALITY_LCD_ENHANCED, HMI_ReturnScreen()); } diff --git a/Marlin/src/feature/power_monitor.cpp b/Marlin/src/feature/power_monitor.cpp index 1937a54102..504f1ea48e 100644 --- a/Marlin/src/feature/power_monitor.cpp +++ b/Marlin/src/feature/power_monitor.cpp @@ -26,7 +26,7 @@ #include "power_monitor.h" -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #include "../lcd/marlinui.h" #include "../lcd/lcdprint.h" #endif diff --git a/Marlin/src/feature/spindle_laser.h b/Marlin/src/feature/spindle_laser.h index 7a8cd2c830..89e11fca08 100644 --- a/Marlin/src/feature/spindle_laser.h +++ b/Marlin/src/feature/spindle_laser.h @@ -242,7 +242,7 @@ public: } #endif - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU static void enable_with_dir(const bool reverse) { isReady = true; const uint8_t ocr = TERN(SPINDLE_LASER_USE_PWM, upower_to_ocr(menuPower), 255); @@ -279,7 +279,7 @@ public: } #endif - #endif // HAS_LCD_MENU + #endif // HAS_MARLINUI_MENU #if ENABLED(LASER_POWER_INLINE) /** diff --git a/Marlin/src/feature/tmc_util.cpp b/Marlin/src/feature/tmc_util.cpp index 934c0b7264..cf3fa3b7b0 100644 --- a/Marlin/src/feature/tmc_util.cpp +++ b/Marlin/src/feature/tmc_util.cpp @@ -40,7 +40,7 @@ #endif #endif -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #include "../module/stepper.h" #endif diff --git a/Marlin/src/feature/tmc_util.h b/Marlin/src/feature/tmc_util.h index 44cde9c763..892d33768b 100644 --- a/Marlin/src/feature/tmc_util.h +++ b/Marlin/src/feature/tmc_util.h @@ -128,7 +128,7 @@ class TMCMarlin : public TMC, public TMCStorage { } void set_pwm_thrs(const uint32_t thrs) { TMC::TPWMTHRS(_tmc_thrs(this->microsteps(), thrs, planner.settings.axis_steps_per_mm[AXIS_ID])); - TERN_(HAS_LCD_MENU, this->stored.hybrid_thrs = thrs); + TERN_(HAS_MARLINUI_MENU, this->stored.hybrid_thrs = thrs); } #endif @@ -137,14 +137,14 @@ class TMCMarlin : public TMC, public TMCStorage { void homing_threshold(int16_t sgt_val) { sgt_val = (int16_t)constrain(sgt_val, sgt_min, sgt_max); TMC::sgt(sgt_val); - TERN_(HAS_LCD_MENU, this->stored.homing_thrs = sgt_val); + TERN_(HAS_MARLINUI_MENU, this->stored.homing_thrs = sgt_val); } #if ENABLED(SPI_ENDSTOPS) bool test_stall_status(); #endif #endif - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU void refresh_stepper_current() { rms_current(this->val_mA); } #if ENABLED(HYBRID_THRESHOLD) @@ -203,11 +203,11 @@ class TMCMarlin : public TMC220 } void set_pwm_thrs(const uint32_t thrs) { TMC2208Stepper::TPWMTHRS(_tmc_thrs(this->microsteps(), thrs, planner.settings.axis_steps_per_mm[AXIS_ID])); - TERN_(HAS_LCD_MENU, this->stored.hybrid_thrs = thrs); + TERN_(HAS_MARLINUI_MENU, this->stored.hybrid_thrs = thrs); } #endif - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU void refresh_stepper_current() { rms_current(this->val_mA); } #if ENABLED(HYBRID_THRESHOLD) @@ -257,7 +257,7 @@ class TMCMarlin : public TMC220 } void set_pwm_thrs(const uint32_t thrs) { TMC2209Stepper::TPWMTHRS(_tmc_thrs(this->microsteps(), thrs, planner.settings.axis_steps_per_mm[AXIS_ID])); - TERN_(HAS_LCD_MENU, this->stored.hybrid_thrs = thrs); + TERN_(HAS_MARLINUI_MENU, this->stored.hybrid_thrs = thrs); } #endif #if USE_SENSORLESS @@ -265,11 +265,11 @@ class TMCMarlin : public TMC220 void homing_threshold(int16_t sgt_val) { sgt_val = (int16_t)constrain(sgt_val, sgt_min, sgt_max); TMC2209Stepper::SGTHRS(sgt_val); - TERN_(HAS_LCD_MENU, this->stored.homing_thrs = sgt_val); + TERN_(HAS_MARLINUI_MENU, this->stored.homing_thrs = sgt_val); } #endif - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU void refresh_stepper_current() { rms_current(this->val_mA); } #if ENABLED(HYBRID_THRESHOLD) @@ -311,11 +311,11 @@ class TMCMarlin : public TMC266 void homing_threshold(int16_t sgt_val) { sgt_val = (int16_t)constrain(sgt_val, sgt_min, sgt_max); TMC2660Stepper::sgt(sgt_val); - TERN_(HAS_LCD_MENU, this->stored.homing_thrs = sgt_val); + TERN_(HAS_MARLINUI_MENU, this->stored.homing_thrs = sgt_val); } #endif - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU void refresh_stepper_current() { rms_current(this->val_mA); } #if USE_SENSORLESS diff --git a/Marlin/src/gcode/bedlevel/G26.cpp b/Marlin/src/gcode/bedlevel/G26.cpp index 941861f044..6691d6c9ab 100644 --- a/Marlin/src/gcode/bedlevel/G26.cpp +++ b/Marlin/src/gcode/bedlevel/G26.cpp @@ -156,7 +156,7 @@ constexpr float g26_e_axis_feedrate = 0.025; static MeshFlags circle_flags; float g26_random_deviation = 0.0; -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU /** * If the LCD is clicked, cancel, wait for release, return true @@ -164,7 +164,7 @@ float g26_random_deviation = 0.0; bool user_canceled() { if (!ui.button_pressed()) return false; // Return if the button isn't pressed ui.set_status(GET_TEXT_F(MSG_G26_CANCELED), 99); - TERN_(HAS_LCD_MENU, ui.quick_feedback()); + TERN_(HAS_MARLINUI_MENU, ui.quick_feedback()); ui.wait_for_release(); return true; } @@ -325,7 +325,7 @@ typedef struct { #if HAS_WIRED_LCD ui.set_status(GET_TEXT_F(MSG_G26_HEATING_BED), 99); ui.quick_feedback(); - TERN_(HAS_LCD_MENU, ui.capture()); + TERN_(HAS_MARLINUI_MENU, ui.capture()); #endif thermalManager.setTargetBed(bed_temp); @@ -365,7 +365,7 @@ typedef struct { bool prime_nozzle() { const feedRate_t fr_slow_e = planner.settings.max_feedrate_mm_s[E_AXIS] / 15.0f; - #if HAS_LCD_MENU && !HAS_TOUCH_BUTTONS // ui.button_pressed issue with touchscreen + #if HAS_MARLINUI_MENU && !HAS_TOUCH_BUTTONS // ui.button_pressed issue with touchscreen #if ENABLED(PREVENT_LENGTHY_EXTRUDE) float Total_Prime = 0.0; #endif @@ -579,7 +579,7 @@ void GcodeSuite::G26() { if (parser.seen('P')) { if (!parser.has_value()) { - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU g26.prime_flag = -1; #else SERIAL_ECHOLNPGM("?Prime length must be specified when not using an LCD."); @@ -638,7 +638,7 @@ void GcodeSuite::G26() { // Get repeat from 'R', otherwise do one full circuit int16_t g26_repeats; - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU g26_repeats = parser.intval('R', GRID_MAX_POINTS + 1); #else if (parser.seen('R')) @@ -699,7 +699,7 @@ void GcodeSuite::G26() { move_to(destination, 0.0); move_to(destination, g26.ooze_amount); - TERN_(HAS_LCD_MENU, ui.capture()); + TERN_(HAS_MARLINUI_MENU, ui.capture()); #if DISABLED(ARC_SUPPORT) @@ -795,7 +795,7 @@ void GcodeSuite::G26() { destination = current_position; } - if (TERN0(HAS_LCD_MENU, user_canceled())) goto LEAVE; // Check if the user wants to stop the Mesh Validation + if (TERN0(HAS_MARLINUI_MENU, user_canceled())) goto LEAVE; // Check if the user wants to stop the Mesh Validation #else // !ARC_SUPPORT @@ -819,7 +819,7 @@ void GcodeSuite::G26() { for (int8_t ind = start_ind; ind <= end_ind; ind++) { - if (TERN0(HAS_LCD_MENU, user_canceled())) goto LEAVE; // Check if the user wants to stop the Mesh Validation + if (TERN0(HAS_MARLINUI_MENU, user_canceled())) goto LEAVE; // Check if the user wants to stop the Mesh Validation xyz_float_t p = { circle.x + _COS(ind ), circle.y + _SIN(ind ), g26.layer_height }, q = { circle.x + _COS(ind + 1), circle.y + _SIN(ind + 1), g26.layer_height }; @@ -846,7 +846,7 @@ void GcodeSuite::G26() { g26.connect_neighbor_with_line(location.pos, 0, 1); planner.synchronize(); TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(location.pos, ExtUI::G26_POINT_FINISH)); - if (TERN0(HAS_LCD_MENU, user_canceled())) goto LEAVE; + if (TERN0(HAS_MARLINUI_MENU, user_canceled())) goto LEAVE; } SERIAL_FLUSH(); // Prevent host M105 buffer overrun. @@ -866,7 +866,7 @@ void GcodeSuite::G26() { planner.calculate_volumetric_multipliers(); #endif - TERN_(HAS_LCD_MENU, ui.release()); // Give back control of the LCD + TERN_(HAS_MARLINUI_MENU, ui.release()); // Give back control of the LCD if (!g26.keep_heaters_on) { TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(0)); diff --git a/Marlin/src/gcode/control/M80_M81.cpp b/Marlin/src/gcode/control/M80_M81.cpp index 6a3788c4a9..90b25e7ed3 100644 --- a/Marlin/src/gcode/control/M80_M81.cpp +++ b/Marlin/src/gcode/control/M80_M81.cpp @@ -63,7 +63,7 @@ OUT_WRITE(SUICIDE_PIN, !SUICIDE_PIN_STATE); #endif - TERN_(HAS_LCD_MENU, ui.reset_status()); + TERN_(HAS_MARLINUI_MENU, ui.reset_status()); } #endif // PSU_CONTROL diff --git a/Marlin/src/gcode/feature/pause/M125.cpp b/Marlin/src/gcode/feature/pause/M125.cpp index 46ec6c552c..940e1b369b 100644 --- a/Marlin/src/gcode/feature/pause/M125.cpp +++ b/Marlin/src/gcode/feature/pause/M125.cpp @@ -85,7 +85,7 @@ void GcodeSuite::M125() { ui.pause_show_message(PAUSE_MESSAGE_PARKING, PAUSE_MODE_PAUSE_PRINT); // If possible, show an LCD prompt with the 'P' flag - const bool show_lcd = TERN0(HAS_LCD_MENU, parser.boolval('P')); + const bool show_lcd = TERN0(HAS_MARLINUI_MENU, parser.boolval('P')); if (pause_print(retract, park_point, show_lcd, 0)) { if (ENABLED(EXTENSIBLE_UI) || BOTH(EMERGENCY_PARSER, HOST_PROMPT_SUPPORT) || !sd_printing || show_lcd) { diff --git a/Marlin/src/gcode/feature/powerloss/M1000.cpp b/Marlin/src/gcode/feature/powerloss/M1000.cpp index c086ca842c..b7fa45e2d0 100644 --- a/Marlin/src/gcode/feature/powerloss/M1000.cpp +++ b/Marlin/src/gcode/feature/powerloss/M1000.cpp @@ -54,7 +54,7 @@ inline void plr_error(FSTR_P const prefix) { #endif } -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU void lcd_power_loss_recovery_cancel(); #endif @@ -67,7 +67,7 @@ void GcodeSuite::M1000() { if (recovery.valid()) { if (parser.seen_test('S')) { - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU ui.goto_screen(menu_job_recovery); #elif HAS_DWIN_E3V2_BASIC recovery.dwin_flag = true; @@ -80,7 +80,7 @@ void GcodeSuite::M1000() { #endif } else if (parser.seen_test('C')) { - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU lcd_power_loss_recovery_cancel(); #else recovery.cancel(); diff --git a/Marlin/src/gcode/lcd/M0_M1.cpp b/Marlin/src/gcode/lcd/M0_M1.cpp index 6a93861407..2bf3c94f1c 100644 --- a/Marlin/src/gcode/lcd/M0_M1.cpp +++ b/Marlin/src/gcode/lcd/M0_M1.cpp @@ -31,7 +31,7 @@ #include "../../module/planner.h" // for synchronize() #include "../../MarlinCore.h" // for wait_for_user_response() -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #include "../../lcd/marlinui.h" #elif ENABLED(EXTENSIBLE_UI) #include "../../lcd/extui/ui_api.h" @@ -55,7 +55,7 @@ void GcodeSuite::M0_M1() { planner.synchronize(); - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU if (parser.string_arg) ui.set_status(parser.string_arg, true); @@ -89,7 +89,7 @@ void GcodeSuite::M0_M1() { TERN_(HAS_RESUME_CONTINUE, wait_for_user_response(ms)); - TERN_(HAS_LCD_MENU, ui.reset_status()); + TERN_(HAS_MARLINUI_MENU, ui.reset_status()); } #endif // HAS_RESUME_CONTINUE diff --git a/Marlin/src/gcode/parser.h b/Marlin/src/gcode/parser.h index bd08467298..1487c083ec 100644 --- a/Marlin/src/gcode/parser.h +++ b/Marlin/src/gcode/parser.h @@ -355,7 +355,7 @@ public: return input_temp_units == TEMPUNIT_K ? F("Kelvin") : input_temp_units == TEMPUNIT_F ? F("Fahrenheit") : F("Celsius"); } - #if HAS_LCD_MENU && DISABLED(DISABLE_M503) + #if HAS_MARLINUI_MENU && DISABLED(DISABLE_M503) static float to_temp_units(celsius_t c) { switch (input_temp_units) { @@ -366,7 +366,7 @@ public: } } - #endif // HAS_LCD_MENU && !DISABLE_M503 + #endif // HAS_MARLINUI_MENU && !DISABLE_M503 static celsius_t value_celsius() { float f = value_float(); diff --git a/Marlin/src/gcode/queue.cpp b/Marlin/src/gcode/queue.cpp index cc52a3bb9e..2250cd3b74 100644 --- a/Marlin/src/gcode/queue.cpp +++ b/Marlin/src/gcode/queue.cpp @@ -522,7 +522,7 @@ void GCodeQueue::get_serial_commands() { #if DISABLED(EMERGENCY_PARSER) // Process critical commands early if (command[0] == 'M') switch (command[3]) { - case '8': if (command[2] == '0' && command[1] == '1') { wait_for_heatup = false; TERN_(HAS_LCD_MENU, wait_for_user = false); } break; + case '8': if (command[2] == '0' && command[1] == '1') { wait_for_heatup = false; TERN_(HAS_MARLINUI_MENU, wait_for_user = false); } break; case '2': if (command[2] == '1' && command[1] == '1') kill(FPSTR(M112_KILL_STR), nullptr, true); break; case '0': if (command[1] == '4' && command[2] == '1') quickstop_stepper(); break; } diff --git a/Marlin/src/gcode/sd/M1001.cpp b/Marlin/src/gcode/sd/M1001.cpp index 417f3747c1..ad549946f0 100644 --- a/Marlin/src/gcode/sd/M1001.cpp +++ b/Marlin/src/gcode/sd/M1001.cpp @@ -98,7 +98,7 @@ void GcodeSuite::M1001() { printerEventLEDs.onPrintCompleted(); TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_PRINT_DONE))); TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_PRINT_DONE), FPSTR(CONTINUE_STR))); - TERN_(HAS_RESUME_CONTINUE, wait_for_user_response(SEC_TO_MS(TERN(HAS_LCD_MENU, PE_LEDS_COMPLETED_TIME, 30)))); + TERN_(HAS_RESUME_CONTINUE, wait_for_user_response(SEC_TO_MS(TERN(HAS_MARLINUI_MENU, PE_LEDS_COMPLETED_TIME, 30)))); printerEventLEDs.onResumeAfterWait(); } #endif diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index 1200d18dd0..825898f882 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -542,7 +542,11 @@ #endif #if IS_ULTIPANEL && DISABLED(NO_LCD_MENUS) - #define HAS_LCD_MENU 1 + #define HAS_MARLINUI_MENU 1 +#endif + +#if ANY(HAS_MARLINUI_MENU, EXTENSIBLE_UI, HAS_DWIN_E3V2) + #define HAS_MANUAL_MOVE_MENU 1 #endif #if ANY(HAS_MARLINUI_U8GLIB, EXTENSIBLE_UI, HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL, IS_DWIN_MARLINUI, DWIN_CREALITY_LCD_JYERSUI) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 2f06fe255a..37f0a5cbe5 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -437,7 +437,7 @@ // Set SD_DETECT_STATE based on hardware if not overridden #if PIN_EXISTS(SD_DETECT) && !defined(SD_DETECT_STATE) - #if BOTH(HAS_LCD_MENU, ELB_FULL_GRAPHIC_CONTROLLER) && (SD_CONNECTION_IS(LCD) || !defined(SDCARD_CONNECTION)) + #if BOTH(HAS_MARLINUI_MENU, ELB_FULL_GRAPHIC_CONTROLLER) && (SD_CONNECTION_IS(LCD) || !defined(SDCARD_CONNECTION)) #define SD_DETECT_STATE HIGH #else #define SD_DETECT_STATE LOW @@ -3052,7 +3052,7 @@ #define HAS_TEMPERATURE 1 #endif -#if HAS_TEMPERATURE && EITHER(HAS_LCD_MENU, HAS_DWIN_E3V2) +#if HAS_TEMPERATURE && EITHER(HAS_MARLINUI_MENU, HAS_DWIN_E3V2) #ifdef PREHEAT_6_LABEL #define PREHEAT_COUNT 6 #elif defined(PREHEAT_5_LABEL) @@ -3177,7 +3177,7 @@ * Advanced Pause - Filament Change */ #if ENABLED(ADVANCED_PAUSE_FEATURE) - #if ANY(HAS_LCD_MENU, EXTENSIBLE_UI, DWIN_CREALITY_LCD_ENHANCED, DWIN_CREALITY_LCD_JYERSUI) || BOTH(EMERGENCY_PARSER, HOST_PROMPT_SUPPORT) + #if ANY(HAS_MARLINUI_MENU, EXTENSIBLE_UI, DWIN_CREALITY_LCD_ENHANCED, DWIN_CREALITY_LCD_JYERSUI) || BOTH(EMERGENCY_PARSER, HOST_PROMPT_SUPPORT) #define M600_PURGE_MORE_RESUMABLE 1 #endif #ifndef FILAMENT_CHANGE_SLOW_LOAD_LENGTH @@ -3407,7 +3407,7 @@ #endif #endif -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU // LCD timeout to status screen default is 15s #ifndef LCD_TIMEOUT_TO_STATUS #define LCD_TIMEOUT_TO_STATUS 15000 diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index a9744a09c0..7b14ef495b 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -851,7 +851,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "USE_M73_REMAINING_TIME requires LCD_SET_PROGRESS_MANUALLY" #endif -#if !HAS_LCD_MENU && ENABLED(SD_REPRINT_LAST_SELECTED_FILE) +#if !HAS_MARLINUI_MENU && ENABLED(SD_REPRINT_LAST_SELECTED_FILE) #error "SD_REPRINT_LAST_SELECTED_FILE currently requires a Marlin-native LCD menu." #endif @@ -874,7 +874,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS /** * SD Card Settings */ -#if ALL(SDSUPPORT, ELB_FULL_GRAPHIC_CONTROLLER, HAS_LCD_MENU) && PIN_EXISTS(SD_DETECT) && SD_DETECT_STATE != HIGH && (SD_CONNECTION_IS(LCD) || !defined(SDCARD_CONNECTION)) +#if ALL(SDSUPPORT, ELB_FULL_GRAPHIC_CONTROLLER, HAS_MARLINUI_MENU) && PIN_EXISTS(SD_DETECT) && SD_DETECT_STATE != HIGH && (SD_CONNECTION_IS(LCD) || !defined(SDCARD_CONNECTION)) #error "SD_DETECT_STATE must be set HIGH for SD on the ELB_FULL_GRAPHIC_CONTROLLER." #endif @@ -1081,9 +1081,9 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "PRUSA_MMU2S requires FILAMENT_RUNOUT_SENSOR. Enable it to continue." #elif ENABLED(MMU_EXTRUDER_SENSOR) && DISABLED(FILAMENT_RUNOUT_SENSOR) #error "MMU_EXTRUDER_SENSOR requires FILAMENT_RUNOUT_SENSOR. Enable it to continue." - #elif ENABLED(MMU_EXTRUDER_SENSOR) && !HAS_LCD_MENU + #elif ENABLED(MMU_EXTRUDER_SENSOR) && !HAS_MARLINUI_MENU #error "MMU_EXTRUDER_SENSOR requires an LCD supporting MarlinUI." - #elif ENABLED(MMU2_MENUS) && !HAS_LCD_MENU + #elif ENABLED(MMU2_MENUS) && !HAS_MARLINUI_MENU #error "MMU2_MENUS requires an LCD supporting MarlinUI." #elif DISABLED(ADVANCED_PAUSE_FEATURE) static_assert(nullptr == strstr(MMU2_FILAMENT_RUNOUT_SCRIPT, "M600"), "ADVANCED_PAUSE_FEATURE is required to use M600 with PRUSA_MMU2(S) / HAS_EXTENDABLE_MMU(S)."); @@ -1479,9 +1479,9 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "You probably want to use Max Endstops for DELTA!" #elif ENABLED(ENABLE_LEVELING_FADE_HEIGHT) && DISABLED(AUTO_BED_LEVELING_BILINEAR) && !UBL_SEGMENTED #error "ENABLE_LEVELING_FADE_HEIGHT on DELTA requires AUTO_BED_LEVELING_BILINEAR or AUTO_BED_LEVELING_UBL." - #elif ENABLED(DELTA_AUTO_CALIBRATION) && !(HAS_BED_PROBE || HAS_LCD_MENU) + #elif ENABLED(DELTA_AUTO_CALIBRATION) && !(HAS_BED_PROBE || HAS_MARLINUI_MENU) #error "DELTA_AUTO_CALIBRATION requires a probe or LCD Controller." - #elif ENABLED(DELTA_CALIBRATION_MENU) && !HAS_LCD_MENU + #elif ENABLED(DELTA_CALIBRATION_MENU) && !HAS_MARLINUI_MENU #error "DELTA_CALIBRATION_MENU requires an LCD Controller." #elif ABL_USES_GRID #if ((GRID_MAX_POINTS_X) & 1) == 0 || ((GRID_MAX_POINTS_Y) & 1) == 0 @@ -1820,7 +1820,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS * LCD_BED_LEVELING requirements */ #if ENABLED(LCD_BED_LEVELING) - #if NONE(HAS_LCD_MENU, DWIN_CREALITY_LCD, DWIN_CREALITY_LCD_ENHANCED) + #if NONE(HAS_MARLINUI_MENU, DWIN_CREALITY_LCD, DWIN_CREALITY_LCD_ENHANCED) #error "LCD_BED_LEVELING is not supported by the selected LCD controller." #elif !(ENABLED(MESH_BED_LEVELING) || HAS_ABL_NOT_UBL) #error "LCD_BED_LEVELING requires MESH_BED_LEVELING or AUTO_BED_LEVELING." @@ -3743,7 +3743,7 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); * Sanity Check for Password Feature */ #if ENABLED(PASSWORD_FEATURE) - #if NONE(HAS_LCD_MENU, PASSWORD_UNLOCK_GCODE, PASSWORD_CHANGE_GCODE) + #if NONE(HAS_MARLINUI_MENU, PASSWORD_UNLOCK_GCODE, PASSWORD_CHANGE_GCODE) #error "Without PASSWORD_UNLOCK_GCODE, PASSWORD_CHANGE_GCODE, or a supported LCD there's no way to unlock the printer or set a password." #elif DISABLED(EEPROM_SETTINGS) #warning "PASSWORD_FEATURE settings will be lost on power-off without EEPROM_SETTINGS." diff --git a/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp b/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp index b450c9c10f..26344da412 100644 --- a/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp +++ b/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp @@ -284,7 +284,7 @@ void MarlinUI::set_custom_characters(const HD44780CharSet screen_charset/*=CHARS #endif // LCD_PROGRESS_BAR - #if BOTH(SDSUPPORT, HAS_LCD_MENU) + #if BOTH(SDSUPPORT, HAS_MARLINUI_MENU) // CHARSET_MENU const static PROGMEM byte refresh[8] = { @@ -334,7 +334,7 @@ void MarlinUI::set_custom_characters(const HD44780CharSet screen_charset/*=CHARS #endif { createChar_P(LCD_STR_UPLEVEL[0], uplevel); - #if BOTH(SDSUPPORT, HAS_LCD_MENU) + #if BOTH(SDSUPPORT, HAS_MARLINUI_MENU) // SD Card sub-menu special characters createChar_P(LCD_STR_REFRESH[0], refresh); createChar_P(LCD_STR_FOLDER[0], folder); @@ -1051,7 +1051,7 @@ void MarlinUI::draw_status_screen() { draw_status_message(blink); } -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #include "../menu/menu.h" @@ -1584,6 +1584,6 @@ void MarlinUI::draw_status_screen() { #endif // AUTO_BED_LEVELING_UBL -#endif // HAS_LCD_MENU +#endif // HAS_MARLINUI_MENU #endif // HAS_MARLINUI_HD44780 diff --git a/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp b/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp index e9d3c73302..fef313e761 100644 --- a/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp +++ b/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp @@ -922,7 +922,7 @@ void MarlinUI::draw_status_screen() { lcd.print_screen(); } -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #include "../menu/menu.h" @@ -1084,6 +1084,6 @@ void MarlinUI::draw_status_screen() { #endif // AUTO_BED_LEVELING_UBL -#endif // HAS_LCD_MENU +#endif // HAS_MARLINUI_MENU #endif // IS_TFTGLCD_PANEL diff --git a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp index 82c9b9a340..a1540e754f 100644 --- a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp +++ b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp @@ -353,7 +353,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop #endif -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #include "../menu/menu.h" @@ -744,6 +744,6 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop #endif // BABYSTEP_ZPROBE_GFX_OVERLAY || MESH_EDIT_GFX_OVERLAY -#endif // HAS_LCD_MENU +#endif // HAS_MARLINUI_MENU #endif // HAS_MARLINUI_U8GLIB diff --git a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp index dbf2f7717c..8b0a700828 100644 --- a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp +++ b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp @@ -253,7 +253,7 @@ void MarlinUI::draw_status_message(const bool blink) { void MarlinUI::_set_brightness() { DWIN_LCD_Brightness(backlight ? brightness : 0); } #endif -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #include "../../menu/menu.h" @@ -581,6 +581,6 @@ void MarlinUI::draw_status_message(const bool blink) { #endif // BABYSTEP_ZPROBE_GFX_OVERLAY || MESH_EDIT_GFX_OVERLAY -#endif // HAS_LCD_MENU +#endif // HAS_MARLINUI_MENU #endif // IS_DWIN_MARLINUI diff --git a/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp b/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp index cc8458ce43..df90321c89 100644 --- a/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp +++ b/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp @@ -2028,7 +2028,7 @@ void get_wifi_commands() { // Process critical commands early if (strcmp_P(command, PSTR("M108")) == 0) { wait_for_heatup = false; - TERN_(HAS_LCD_MENU, wait_for_user = false); + TERN_(HAS_MARLINUI_MENU, wait_for_user = false); } if (strcmp_P(command, PSTR("M112")) == 0) kill(FPSTR(M112_KILL_STR), nullptr, true); if (strcmp_P(command, PSTR("M410")) == 0) quickstop_stepper(); diff --git a/Marlin/src/lcd/extui/ui_api.h b/Marlin/src/lcd/extui/ui_api.h index 04a298ba58..59b509981b 100644 --- a/Marlin/src/lcd/extui/ui_api.h +++ b/Marlin/src/lcd/extui/ui_api.h @@ -196,7 +196,7 @@ namespace ExtUI { #endif inline void simulateUserClick() { - #if ANY(HAS_LCD_MENU, EXTENSIBLE_UI, DWIN_CREALITY_LCD_JYERSUI) + #if ANY(HAS_MARLINUI_MENU, EXTENSIBLE_UI, DWIN_CREALITY_LCD_JYERSUI) ui.lcd_clicked = true; #endif } diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 7b9dc468e4..f2fce1c8cd 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -155,7 +155,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; } #endif -#if EITHER(HAS_LCD_MENU, EXTENSIBLE_UI) +#if EITHER(HAS_MARLINUI_MENU, EXTENSIBLE_UI) bool MarlinUI::lcd_clicked; #endif @@ -257,7 +257,7 @@ void MarlinUI::init() { #include "../module/planner.h" #include "../module/motion.h" - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU #include "../module/settings.h" #endif @@ -348,7 +348,7 @@ void MarlinUI::init() { #endif - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU #include "menu/menu.h" screenFunc_t MarlinUI::currentScreen; // Initialized in CTOR @@ -450,7 +450,7 @@ void MarlinUI::init() { #endif // !HAS_GRAPHICAL_TFT - #endif // HAS_LCD_MENU + #endif // HAS_MARLINUI_MENU //////////////////////////////////////////// ///////////// Keypad Handling ////////////// @@ -460,7 +460,7 @@ void MarlinUI::init() { volatile uint8_t MarlinUI::keypad_buttons; - #if HAS_LCD_MENU && !HAS_ADC_BUTTONS + #if HAS_MARLINUI_MENU && !HAS_ADC_BUTTONS void lcd_move_x(); void lcd_move_y(); @@ -487,7 +487,7 @@ void MarlinUI::init() { if (keypad_buttons) { #if HAS_ENCODER_ACTION refresh(LCDVIEW_REDRAW_NOW); - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU if (encoderDirection == -(ENCODERBASE)) { // HAS_ADC_BUTTONS forces REVERSE_MENU_DIRECTION, so this indicates menu navigation if (RRK(EN_KEYPAD_UP)) encoderPosition += ENCODER_STEPS_PER_MENU_ITEM; else if (RRK(EN_KEYPAD_DOWN)) encoderPosition -= ENCODER_STEPS_PER_MENU_ITEM; @@ -497,7 +497,7 @@ void MarlinUI::init() { else #endif { - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU if (RRK(EN_KEYPAD_UP)) encoderPosition -= epps; else if (RRK(EN_KEYPAD_DOWN)) encoderPosition += epps; else if (RRK(EN_KEYPAD_LEFT)) { MenuItem_back::action(); quick_feedback(); } @@ -528,7 +528,7 @@ void MarlinUI::init() { const bool homed = all_axes_homed(); - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU if (RRK(EN_KEYPAD_MIDDLE)) goto_screen(menu_move); @@ -547,7 +547,7 @@ void MarlinUI::init() { if (RRK(EN_KEYPAD_UP)) _reprapworld_keypad_move(Y_AXIS, -1); } - #endif // HAS_LCD_MENU + #endif // HAS_MARLINUI_MENU if (!homed && RRK(EN_KEYPAD_F1)) queue.inject_P(G28_STR); return true; @@ -575,7 +575,7 @@ void MarlinUI::init() { void MarlinUI::status_screen() { - TERN_(HAS_LCD_MENU, ENCODER_RATE_MULTIPLY(false)); + TERN_(HAS_MARLINUI_MENU, ENCODER_RATE_MULTIPLY(false)); #if BASIC_PROGRESS_BAR @@ -619,7 +619,7 @@ void MarlinUI::init() { #endif // BASIC_PROGRESS_BAR - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU if (use_click()) { #if BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT) next_filament_display = millis() + 5000UL; // Show status message for 5s @@ -673,7 +673,7 @@ void MarlinUI::init() { void MarlinUI::kill_screen(FSTR_P const lcd_error, FSTR_P const lcd_component) { init(); status_printf(1, F(S_FMT ": " S_FMT), FTOP(lcd_error), FTOP(lcd_component)); - TERN_(HAS_LCD_MENU, return_to_status()); + TERN_(HAS_MARLINUI_MENU, return_to_status()); // RED ALERT. RED ALERT. #ifdef LED_BACKLIGHT_TIMEOUT @@ -701,7 +701,7 @@ void MarlinUI::init() { void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) { TERN_(HAS_TOUCH_SLEEP, wakeup_screen()); // Wake up the TFT with most buttons - TERN_(HAS_LCD_MENU, refresh()); + TERN_(HAS_MARLINUI_MENU, refresh()); #if HAS_ENCODER_ACTION if (clear_buttons) buttons = 0; @@ -712,9 +712,9 @@ void MarlinUI::init() { #if HAS_CHIRP chirp(); // Buzz and wait. Is the delay needed for buttons to settle? - #if BOTH(HAS_LCD_MENU, USE_BEEPER) + #if BOTH(HAS_MARLINUI_MENU, USE_BEEPER) for (int8_t i = 5; i--;) { buzzer.tick(); delay(2); } - #elif HAS_LCD_MENU + #elif HAS_MARLINUI_MENU delay(10); #endif #endif @@ -724,7 +724,7 @@ void MarlinUI::init() { /////////////// Manual Move //////////////// //////////////////////////////////////////// - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU ManualMove MarlinUI::manual_move{}; @@ -836,7 +836,7 @@ void MarlinUI::init() { #endif - #endif // HAS_LCD_MENU + #endif // HAS_MARLINUI_MENU /** * Update the LCD, read encoder buttons, etc. @@ -887,7 +887,7 @@ void MarlinUI::init() { leds.update_timeout(powerManager.psu_on); #endif - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU // Handle any queued Move Axis motion manual_move.task(); @@ -942,7 +942,7 @@ void MarlinUI::init() { goto_previous_screen(); } - #endif // HAS_LCD_MENU + #endif // HAS_MARLINUI_MENU if (ELAPSED(ms, next_lcd_update_ms) || TERN0(HAS_MARLINUI_U8GLIB, drawing_screen)) { @@ -989,7 +989,7 @@ void MarlinUI::init() { if (encoderPastThreshold || lcd_clicked) { if (encoderPastThreshold && TERN1(IS_TFTGLCD_PANEL, !external_control)) { - #if BOTH(HAS_LCD_MENU, ENCODER_RATE_MULTIPLIER) + #if BOTH(HAS_MARLINUI_MENU, ENCODER_RATE_MULTIPLIER) int32_t encoderMultiplier = 1; @@ -1049,7 +1049,7 @@ void MarlinUI::init() { refresh(LCDVIEW_REDRAW_NOW); } - #if BOTH(HAS_LCD_MENU, SCROLL_LONG_FILENAMES) + #if BOTH(HAS_MARLINUI_MENU, SCROLL_LONG_FILENAMES) // If scrolling of long file names is enabled and we are in the sd card menu, // cause a refresh to occur until all the text has scrolled into view. if (currentScreen == menu_media && !lcd_status_update_delay--) { @@ -1120,7 +1120,7 @@ void MarlinUI::init() { #endif - TERN_(HAS_LCD_MENU, lcd_clicked = false); + TERN_(HAS_MARLINUI_MENU, lcd_clicked = false); // Keeping track of the longest time for an individual LCD update. // Used to do screen throttling when the planner starts to fill up. @@ -1334,7 +1334,7 @@ void MarlinUI::init() { case ENCODER_PHASE_2: ENCODER_SPIN(ENCODER_PHASE_1, ENCODER_PHASE_3); break; case ENCODER_PHASE_3: ENCODER_SPIN(ENCODER_PHASE_2, ENCODER_PHASE_0); break; } - #if BOTH(HAS_LCD_MENU, AUTO_BED_LEVELING_UBL) + #if BOTH(HAS_MARLINUI_MENU, AUTO_BED_LEVELING_UBL) external_encoder(); #endif lastEncoderBits = enc; @@ -1460,7 +1460,7 @@ void MarlinUI::init() { void MarlinUI::set_alert_status(FSTR_P const fstr) { set_status(fstr, 1); TERN_(HAS_TOUCH_SLEEP, wakeup_screen()); - TERN_(HAS_LCD_MENU, return_to_status()); + TERN_(HAS_MARLINUI_MENU, return_to_status()); } #include @@ -1545,10 +1545,10 @@ void MarlinUI::init() { IF_DISABLED(SDSUPPORT, print_job_timer.stop()); TERN_(HOST_PROMPT_SUPPORT, hostui.prompt_open(PROMPT_INFO, F("UI Aborted"), FPSTR(DISMISS_STR))); LCD_MESSAGE(MSG_PRINT_ABORTED); - TERN_(HAS_LCD_MENU, return_to_status()); + TERN_(HAS_MARLINUI_MENU, return_to_status()); } - #if BOTH(HAS_LCD_MENU, PSU_CONTROL) + #if BOTH(HAS_MARLINUI_MENU, PSU_CONTROL) void MarlinUI::poweroff() { queue.inject(F("M81" TERN_(POWER_OFF_WAIT_FOR_COOLDOWN, "S"))); @@ -1560,11 +1560,11 @@ void MarlinUI::init() { void MarlinUI::flow_fault() { LCD_ALERTMESSAGE(MSG_FLOWMETER_FAULT); TERN_(HAS_BUZZER, buzz(1000, 440)); - TERN_(HAS_LCD_MENU, return_to_status()); + TERN_(HAS_MARLINUI_MENU, return_to_status()); } void MarlinUI::pause_print() { - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU synchronize(GET_TEXT(MSG_PAUSING)); defer_status_screen(); #endif @@ -1686,7 +1686,7 @@ void MarlinUI::init() { ExtUI::onMediaRemoved(); #elif PIN_EXISTS(SD_DETECT) LCD_MESSAGE(MSG_MEDIA_REMOVED); - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU if (!defer_return_to_status) return_to_status(); #endif #endif @@ -1712,7 +1712,7 @@ void MarlinUI::init() { #endif // SDSUPPORT -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU void MarlinUI::reset_settings() { settings.reset(); completion_feedback(); @@ -1768,7 +1768,7 @@ void MarlinUI::init() { #if ENABLED(EEPROM_SETTINGS) - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU void MarlinUI::init_eeprom() { const bool good = settings.init_eeprom(); completion_feedback(good); @@ -1796,7 +1796,7 @@ void MarlinUI::init() { } void MarlinUI::eeprom_alert(const uint8_t msgid) { - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU editable.uint8 = msgid; goto_screen([]{ PGM_P const restore_msg = GET_TEXT(MSG_INIT_EEPROM); diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index 3217d3531b..273abbe54a 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -35,7 +35,7 @@ #include "tft_io/touch_calibration.h" #endif -#if ANY(HAS_LCD_MENU, ULTIPANEL_FEEDMULTIPLY, SOFT_RESET_ON_KILL) +#if ANY(HAS_MARLINUI_MENU, ULTIPANEL_FEEDMULTIPLY, SOFT_RESET_ON_KILL) #define HAS_ENCODER_ACTION 1 #endif @@ -51,7 +51,7 @@ #include "../module/printcounter.h" #endif -#if ENABLED(ADVANCED_PAUSE_FEATURE) && ANY(HAS_LCD_MENU, EXTENSIBLE_UI, HAS_DWIN_E3V2) +#if ENABLED(ADVANCED_PAUSE_FEATURE) #include "../feature/pause.h" #endif @@ -77,7 +77,7 @@ uint8_t get_ADC_keyValue(); #endif - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU #include "lcdprint.h" @@ -90,7 +90,7 @@ typedef void (*screenFunc_t)(); typedef void (*menuAction_t)(); - #endif // HAS_LCD_MENU + #endif // HAS_MARLINUI_MENU #endif // HAS_WIRED_LCD @@ -126,7 +126,7 @@ } preheat_t; #endif -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU // Manual Movement class class ManualMove { @@ -198,7 +198,7 @@ class MarlinUI { public: MarlinUI() { - TERN_(HAS_LCD_MENU, currentScreen = status_screen); + TERN_(HAS_MARLINUI_MENU, currentScreen = status_screen); } static void init(); @@ -245,7 +245,7 @@ public: // LCD implementations static void clear_lcd(); - #if BOTH(HAS_LCD_MENU, TOUCH_SCREEN_CALIBRATION) + #if BOTH(HAS_MARLINUI_MENU, TOUCH_SCREEN_CALIBRATION) static void check_touch_calibration() { if (touch_calibration.need_calibration()) currentScreen = touch_calibration_screen; } @@ -375,7 +375,7 @@ public: static void resume_print(); static void flow_fault(); - #if BOTH(HAS_LCD_MENU, PSU_CONTROL) + #if BOTH(HAS_MARLINUI_MENU, PSU_CONTROL) static void poweroff(); #endif @@ -488,7 +488,7 @@ public: #endif #if ENABLED(SDSUPPORT) - #if BOTH(SCROLL_LONG_FILENAMES, HAS_LCD_MENU) + #if BOTH(SCROLL_LONG_FILENAMES, HAS_MARLINUI_MENU) #define MARLINUI_SCROLL_NAME 1 #endif #if MARLINUI_SCROLL_NAME @@ -513,7 +513,7 @@ public: TERN(SCREENS_CAN_TIME_OUT, return_to_status_ms = ms + LCD_TIMEOUT_TO_STATUS, UNUSED(ms)); } - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU #if HAS_TOUCH_BUTTONS static uint8_t touch_buttons; @@ -597,7 +597,7 @@ public: #endif - #if EITHER(HAS_LCD_MENU, EXTENSIBLE_UI) + #if EITHER(HAS_MARLINUI_MENU, EXTENSIBLE_UI) static bool lcd_clicked; static bool use_click() { const bool click = lcd_clicked; @@ -609,7 +609,7 @@ public: static bool use_click() { return false; } #endif - #if ENABLED(ADVANCED_PAUSE_FEATURE) && ANY(HAS_LCD_MENU, EXTENSIBLE_UI, DWIN_CREALITY_LCD_ENHANCED, DWIN_CREALITY_LCD_JYERSUI) + #if ENABLED(ADVANCED_PAUSE_FEATURE) && ANY(HAS_MARLINUI_MENU, EXTENSIBLE_UI, DWIN_CREALITY_LCD_ENHANCED, DWIN_CREALITY_LCD_JYERSUI) static void pause_show_message(const PauseMessage message, const PauseMode mode=PAUSE_MODE_SAME, const uint8_t extruder=active_extruder); #else static void _pause_show_message() {} @@ -619,12 +619,12 @@ public: // // EEPROM: Reset / Init / Load / Store // - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU static void reset_settings(); #endif #if ENABLED(EEPROM_SETTINGS) - #if HAS_LCD_MENU + #if HAS_MARLINUI_MENU static void init_eeprom(); static void load_settings(); static void store_settings(); @@ -650,7 +650,7 @@ public: // // Block interaction while under external control // - #if HAS_LCD_MENU && EITHER(AUTO_BED_LEVELING_UBL, G26_MESH_VALIDATION) + #if HAS_MARLINUI_MENU && EITHER(AUTO_BED_LEVELING_UBL, G26_MESH_VALIDATION) static bool external_control; FORCE_INLINE static void capture() { external_control = true; } FORCE_INLINE static void release() { external_control = false; } diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp index 9337cf4774..01b845da6e 100644 --- a/Marlin/src/lcd/menu/menu.cpp +++ b/Marlin/src/lcd/menu/menu.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfigPre.h" -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #include "menu.h" #include "../../module/planner.h" @@ -220,7 +220,7 @@ void MarlinUI::goto_screen(screenFunc_t screen, const uint16_t encoder/*=0*/, co screen_changed = true; TERN_(HAS_MARLINUI_U8GLIB, drawing_screen = false); - TERN_(HAS_LCD_MENU, encoder_direction_normal()); + TERN_(HAS_MARLINUI_MENU, encoder_direction_normal()); set_selection(false); } @@ -378,4 +378,4 @@ void MenuItem_confirm::select_screen( } } -#endif // HAS_LCD_MENU +#endif // HAS_MARLINUI_MENU diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp index 5a1cedfbac..d2c9b30c04 100644 --- a/Marlin/src/lcd/menu/menu_advanced.cpp +++ b/Marlin/src/lcd/menu/menu_advanced.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #include "menu_item.h" #include "../../module/planner.h" @@ -653,4 +653,4 @@ void menu_advanced_settings() { END_MENU(); } -#endif // HAS_LCD_MENU +#endif // HAS_MARLINUI_MENU diff --git a/Marlin/src/lcd/menu/menu_backlash.cpp b/Marlin/src/lcd/menu/menu_backlash.cpp index 28be1ca9cf..5776234f72 100644 --- a/Marlin/src/lcd/menu/menu_backlash.cpp +++ b/Marlin/src/lcd/menu/menu_backlash.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_LCD_MENU, BACKLASH_GCODE) +#if BOTH(HAS_MARLINUI_MENU, BACKLASH_GCODE) #include "menu_item.h" @@ -68,4 +68,4 @@ void menu_backlash() { END_MENU(); } -#endif // HAS_LCD_MENU && BACKLASH_GCODE +#endif // HAS_MARLINUI_MENU && BACKLASH_GCODE diff --git a/Marlin/src/lcd/menu/menu_bed_corners.cpp b/Marlin/src/lcd/menu/menu_bed_corners.cpp index 38a074eb01..7a0f2eaa49 100644 --- a/Marlin/src/lcd/menu/menu_bed_corners.cpp +++ b/Marlin/src/lcd/menu/menu_bed_corners.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_LCD_MENU, LEVEL_BED_CORNERS) +#if BOTH(HAS_MARLINUI_MENU, LEVEL_BED_CORNERS) #include "menu_item.h" #include "../../module/motion.h" @@ -362,4 +362,4 @@ void _lcd_level_bed_corners() { ui.goto_screen(_lcd_level_bed_corners_homing); } -#endif // HAS_LCD_MENU && LEVEL_BED_CORNERS +#endif // HAS_MARLINUI_MENU && LEVEL_BED_CORNERS diff --git a/Marlin/src/lcd/menu/menu_cancelobject.cpp b/Marlin/src/lcd/menu/menu_cancelobject.cpp index f2a06ecf6a..8db698d300 100644 --- a/Marlin/src/lcd/menu/menu_cancelobject.cpp +++ b/Marlin/src/lcd/menu/menu_cancelobject.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_LCD_MENU, CANCEL_OBJECTS) +#if BOTH(HAS_MARLINUI_MENU, CANCEL_OBJECTS) #include "menu_item.h" #include "menu_addon.h" @@ -71,4 +71,4 @@ void menu_cancelobject() { END_MENU(); } -#endif // HAS_LCD_MENU && CANCEL_OBJECTS +#endif // HAS_MARLINUI_MENU && CANCEL_OBJECTS diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 7642c76710..33e43b08eb 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #include "menu_item.h" @@ -577,4 +577,4 @@ void menu_configuration() { END_MENU(); } -#endif // HAS_LCD_MENU +#endif // HAS_MARLINUI_MENU diff --git a/Marlin/src/lcd/menu/menu_delta_calibrate.cpp b/Marlin/src/lcd/menu/menu_delta_calibrate.cpp index ea627f69e7..f491c5b576 100644 --- a/Marlin/src/lcd/menu/menu_delta_calibrate.cpp +++ b/Marlin/src/lcd/menu/menu_delta_calibrate.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if HAS_LCD_MENU && EITHER(DELTA_CALIBRATION_MENU, DELTA_AUTO_CALIBRATION) +#if HAS_MARLINUI_MENU && EITHER(DELTA_CALIBRATION_MENU, DELTA_AUTO_CALIBRATION) #include "menu_item.h" #include "../../module/delta.h" @@ -151,4 +151,4 @@ void menu_delta_calibrate() { END_MENU(); } -#endif // HAS_LCD_MENU && (DELTA_CALIBRATION_MENU || DELTA_AUTO_CALIBRATION) +#endif // HAS_MARLINUI_MENU && (DELTA_CALIBRATION_MENU || DELTA_AUTO_CALIBRATION) diff --git a/Marlin/src/lcd/menu/menu_filament.cpp b/Marlin/src/lcd/menu/menu_filament.cpp index e7365744e9..9f432c405c 100644 --- a/Marlin/src/lcd/menu/menu_filament.cpp +++ b/Marlin/src/lcd/menu/menu_filament.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_LCD_MENU, ADVANCED_PAUSE_FEATURE) +#if BOTH(HAS_MARLINUI_MENU, ADVANCED_PAUSE_FEATURE) #include "menu_item.h" #include "../../module/temperature.h" @@ -342,4 +342,4 @@ void MarlinUI::pause_show_message( ui.return_to_status(); } -#endif // HAS_LCD_MENU && ADVANCED_PAUSE_FEATURE +#endif // HAS_MARLINUI_MENU && ADVANCED_PAUSE_FEATURE diff --git a/Marlin/src/lcd/menu/menu_info.cpp b/Marlin/src/lcd/menu/menu_info.cpp index 11027e7f95..3a23cf0048 100644 --- a/Marlin/src/lcd/menu/menu_info.cpp +++ b/Marlin/src/lcd/menu/menu_info.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_LCD_MENU, LCD_INFO_MENU) +#if BOTH(HAS_MARLINUI_MENU, LCD_INFO_MENU) #include "menu_item.h" @@ -317,4 +317,4 @@ void menu_info() { END_MENU(); } -#endif // HAS_LCD_MENU && LCD_INFO_MENU +#endif // HAS_MARLINUI_MENU && LCD_INFO_MENU diff --git a/Marlin/src/lcd/menu/menu_job_recovery.cpp b/Marlin/src/lcd/menu/menu_job_recovery.cpp index 963806b1d6..6329c58397 100644 --- a/Marlin/src/lcd/menu/menu_job_recovery.cpp +++ b/Marlin/src/lcd/menu/menu_job_recovery.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_LCD_MENU, POWER_LOSS_RECOVERY) +#if BOTH(HAS_MARLINUI_MENU, POWER_LOSS_RECOVERY) #include "menu_item.h" #include "../../gcode/queue.h" @@ -54,4 +54,4 @@ void menu_job_recovery() { END_MENU(); } -#endif // HAS_LCD_MENU && POWER_LOSS_RECOVERY +#endif // HAS_MARLINUI_MENU && POWER_LOSS_RECOVERY diff --git a/Marlin/src/lcd/menu/menu_led.cpp b/Marlin/src/lcd/menu/menu_led.cpp index 3261ecc658..0c08f6fa94 100644 --- a/Marlin/src/lcd/menu/menu_led.cpp +++ b/Marlin/src/lcd/menu/menu_led.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if HAS_LCD_MENU && EITHER(LED_CONTROL_MENU, CASE_LIGHT_MENU) +#if HAS_MARLINUI_MENU && EITHER(LED_CONTROL_MENU, CASE_LIGHT_MENU) #include "menu_item.h" @@ -169,4 +169,4 @@ void menu_led() { END_MENU(); } -#endif // HAS_LCD_MENU && LED_CONTROL_MENU +#endif // HAS_MARLINUI_MENU && LED_CONTROL_MENU diff --git a/Marlin/src/lcd/menu/menu_main.cpp b/Marlin/src/lcd/menu/menu_main.cpp index f7e974a864..a156535895 100644 --- a/Marlin/src/lcd/menu/menu_main.cpp +++ b/Marlin/src/lcd/menu/menu_main.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #include "menu_item.h" #include "../../module/temperature.h" @@ -461,4 +461,4 @@ void menu_main() { END_MENU(); } -#endif // HAS_LCD_MENU +#endif // HAS_MARLINUI_MENU diff --git a/Marlin/src/lcd/menu/menu_media.cpp b/Marlin/src/lcd/menu/menu_media.cpp index 4ce0a396d4..db1baa9bee 100644 --- a/Marlin/src/lcd/menu/menu_media.cpp +++ b/Marlin/src/lcd/menu/menu_media.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_LCD_MENU, SDSUPPORT) +#if BOTH(HAS_MARLINUI_MENU, SDSUPPORT) #include "menu_item.h" #include "../../sd/cardreader.h" @@ -161,4 +161,4 @@ void menu_media() { TERN(MULTI_VOLUME, menu_media_select, menu_media_filelist)(); } -#endif // HAS_LCD_MENU && SDSUPPORT +#endif // HAS_MARLINUI_MENU && SDSUPPORT diff --git a/Marlin/src/lcd/menu/menu_mixer.cpp b/Marlin/src/lcd/menu/menu_mixer.cpp index be4363574b..f91f62ef83 100644 --- a/Marlin/src/lcd/menu/menu_mixer.cpp +++ b/Marlin/src/lcd/menu/menu_mixer.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_LCD_MENU, MIXING_EXTRUDER) +#if BOTH(HAS_MARLINUI_MENU, MIXING_EXTRUDER) #include "menu_item.h" #include "menu_addon.h" @@ -275,4 +275,4 @@ void menu_mixer() { END_MENU(); } -#endif // HAS_LCD_MENU && MIXING_EXTRUDER +#endif // HAS_MARLINUI_MENU && MIXING_EXTRUDER diff --git a/Marlin/src/lcd/menu/menu_mmu2.cpp b/Marlin/src/lcd/menu/menu_mmu2.cpp index 99e5c06245..4f3728b74e 100644 --- a/Marlin/src/lcd/menu/menu_mmu2.cpp +++ b/Marlin/src/lcd/menu/menu_mmu2.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfig.h" -#if BOTH(HAS_LCD_MENU, MMU2_MENUS) +#if BOTH(HAS_MARLINUI_MENU, MMU2_MENUS) #include "../../MarlinCore.h" #include "../../feature/mmu/mmu2.h" @@ -167,4 +167,4 @@ uint8_t mmu2_choose_filament() { return feeder_index; } -#endif // HAS_LCD_MENU && MMU2_MENUS +#endif // HAS_MARLINUI_MENU && MMU2_MENUS diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp index d463436021..0a446b1349 100644 --- a/Marlin/src/lcd/menu/menu_motion.cpp +++ b/Marlin/src/lcd/menu/menu_motion.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #define LARGE_AREA_TEST ((X_BED_SIZE) >= 1000 || (Y_BED_SIZE) >= 1000 || (Z_MAX_POS) >= 1000) @@ -477,4 +477,4 @@ void menu_motion() { END_MENU(); } -#endif // HAS_LCD_MENU +#endif // HAS_MARLINUI_MENU diff --git a/Marlin/src/lcd/menu/menu_password.cpp b/Marlin/src/lcd/menu/menu_password.cpp index d3a35abff2..32059103b3 100644 --- a/Marlin/src/lcd/menu/menu_password.cpp +++ b/Marlin/src/lcd/menu/menu_password.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_LCD_MENU, PASSWORD_FEATURE) +#if BOTH(HAS_MARLINUI_MENU, PASSWORD_FEATURE) #include "../../feature/password/password.h" @@ -184,4 +184,4 @@ void Password::menu_password() { END_MENU(); } -#endif // HAS_LCD_MENU && PASSWORD_FEATURE +#endif // HAS_MARLINUI_MENU && PASSWORD_FEATURE diff --git a/Marlin/src/lcd/menu/menu_power_monitor.cpp b/Marlin/src/lcd/menu/menu_power_monitor.cpp index b43327f63b..3cd9909e5c 100644 --- a/Marlin/src/lcd/menu/menu_power_monitor.cpp +++ b/Marlin/src/lcd/menu/menu_power_monitor.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if HAS_LCD_MENU && HAS_POWER_MONITOR +#if HAS_MARLINUI_MENU && HAS_POWER_MONITOR #include "menu_item.h" #include "../../feature/power_monitor.h" @@ -59,4 +59,4 @@ void menu_power_monitor() { END_MENU(); } -#endif // HAS_LCD_MENU && HAS_POWER_MONITOR +#endif // HAS_MARLINUI_MENU && HAS_POWER_MONITOR diff --git a/Marlin/src/lcd/menu/menu_spindle_laser.cpp b/Marlin/src/lcd/menu/menu_spindle_laser.cpp index ca3d6f66a6..306d3d6c57 100644 --- a/Marlin/src/lcd/menu/menu_spindle_laser.cpp +++ b/Marlin/src/lcd/menu/menu_spindle_laser.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfig.h" -#if HAS_LCD_MENU && HAS_CUTTER +#if HAS_MARLINUI_MENU && HAS_CUTTER #include "menu_item.h" @@ -81,4 +81,4 @@ END_MENU(); } -#endif // HAS_LCD_MENU && HAS_CUTTER +#endif // HAS_MARLINUI_MENU && HAS_CUTTER diff --git a/Marlin/src/lcd/menu/menu_temperature.cpp b/Marlin/src/lcd/menu/menu_temperature.cpp index 0e36884858..fb539f006c 100644 --- a/Marlin/src/lcd/menu/menu_temperature.cpp +++ b/Marlin/src/lcd/menu/menu_temperature.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfig.h" -#if HAS_LCD_MENU && HAS_TEMPERATURE +#if HAS_MARLINUI_MENU && HAS_TEMPERATURE #include "menu_item.h" #include "../../module/temperature.h" @@ -307,4 +307,4 @@ void menu_temperature() { #endif -#endif // HAS_LCD_MENU && HAS_TEMPERATURE +#endif // HAS_MARLINUI_MENU && HAS_TEMPERATURE diff --git a/Marlin/src/lcd/menu/menu_tmc.cpp b/Marlin/src/lcd/menu/menu_tmc.cpp index be6289d851..7e206e8d79 100644 --- a/Marlin/src/lcd/menu/menu_tmc.cpp +++ b/Marlin/src/lcd/menu/menu_tmc.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if HAS_LCD_MENU && HAS_TRINAMIC_CONFIG +#if HAS_MARLINUI_MENU && HAS_TRINAMIC_CONFIG #include "menu_item.h" #include "../../module/stepper/indirection.h" diff --git a/Marlin/src/lcd/menu/menu_touch_screen.cpp b/Marlin/src/lcd/menu/menu_touch_screen.cpp index 5fc4b584d5..130308dadf 100644 --- a/Marlin/src/lcd/menu/menu_touch_screen.cpp +++ b/Marlin/src/lcd/menu/menu_touch_screen.cpp @@ -22,7 +22,7 @@ #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_LCD_MENU, TOUCH_SCREEN_CALIBRATION) +#if BOTH(HAS_MARLINUI_MENU, TOUCH_SCREEN_CALIBRATION) #include "menu_item.h" #include "../marlinui.h" diff --git a/Marlin/src/lcd/menu/menu_tramming.cpp b/Marlin/src/lcd/menu/menu_tramming.cpp index 4033421b56..7c241e09ec 100644 --- a/Marlin/src/lcd/menu/menu_tramming.cpp +++ b/Marlin/src/lcd/menu/menu_tramming.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_LCD_MENU, ASSISTED_TRAMMING_WIZARD) +#if BOTH(HAS_MARLINUI_MENU, ASSISTED_TRAMMING_WIZARD) #include "menu_item.h" @@ -109,4 +109,4 @@ void goto_tramming_wizard() { }); } -#endif // HAS_LCD_MENU && ASSISTED_TRAMMING_WIZARD +#endif // HAS_MARLINUI_MENU && ASSISTED_TRAMMING_WIZARD diff --git a/Marlin/src/lcd/menu/menu_tune.cpp b/Marlin/src/lcd/menu/menu_tune.cpp index b3f078d7a0..854f36985f 100644 --- a/Marlin/src/lcd/menu/menu_tune.cpp +++ b/Marlin/src/lcd/menu/menu_tune.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #include "menu_item.h" #include "../../module/motion.h" @@ -236,4 +236,4 @@ void menu_tune() { END_MENU(); } -#endif // HAS_LCD_MENU +#endif // HAS_MARLINUI_MENU diff --git a/Marlin/src/lcd/menu/menu_ubl.cpp b/Marlin/src/lcd/menu/menu_ubl.cpp index a08eceed77..c7ffd414cb 100644 --- a/Marlin/src/lcd/menu/menu_ubl.cpp +++ b/Marlin/src/lcd/menu/menu_ubl.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if BOTH(HAS_LCD_MENU, AUTO_BED_LEVELING_UBL) +#if BOTH(HAS_MARLINUI_MENU, AUTO_BED_LEVELING_UBL) #include "menu_item.h" #include "../../gcode/gcode.h" @@ -684,4 +684,4 @@ void _lcd_ubl_level_bed() { END_MENU(); } -#endif // HAS_LCD_MENU && AUTO_BED_LEVELING_UBL +#endif // HAS_MARLINUI_MENU && AUTO_BED_LEVELING_UBL diff --git a/Marlin/src/lcd/tft/ui_1024x600.cpp b/Marlin/src/lcd/tft/ui_1024x600.cpp index 160f8c29f3..7c3d04345f 100644 --- a/Marlin/src/lcd/tft/ui_1024x600.cpp +++ b/Marlin/src/lcd/tft/ui_1024x600.cpp @@ -596,9 +596,9 @@ MotionAxisState motionAxisState; static void quick_feedback() { #if HAS_CHIRP ui.chirp(); // Buzz and wait. Is the delay needed for buttons to settle? - #if BOTH(HAS_LCD_MENU, USE_BEEPER) + #if BOTH(HAS_MARLINUI_MENU, USE_BEEPER) for (int8_t i = 5; i--;) { buzzer.tick(); delay(2); } - #elif HAS_LCD_MENU + #elif HAS_MARLINUI_MENU delay(10); #endif #endif diff --git a/Marlin/src/lcd/tft/ui_320x240.cpp b/Marlin/src/lcd/tft/ui_320x240.cpp index d85a917983..5447e7d33e 100644 --- a/Marlin/src/lcd/tft/ui_320x240.cpp +++ b/Marlin/src/lcd/tft/ui_320x240.cpp @@ -578,9 +578,9 @@ MotionAxisState motionAxisState; static void quick_feedback() { #if HAS_CHIRP ui.chirp(); // Buzz and wait. Is the delay needed for buttons to settle? - #if BOTH(HAS_LCD_MENU, USE_BEEPER) + #if BOTH(HAS_MARLINUI_MENU, USE_BEEPER) for (int8_t i = 5; i--;) { buzzer.tick(); delay(2); } - #elif HAS_LCD_MENU + #elif HAS_MARLINUI_MENU delay(10); #endif #endif diff --git a/Marlin/src/lcd/tft/ui_480x320.cpp b/Marlin/src/lcd/tft/ui_480x320.cpp index ff14a9d588..286879a6e0 100644 --- a/Marlin/src/lcd/tft/ui_480x320.cpp +++ b/Marlin/src/lcd/tft/ui_480x320.cpp @@ -583,9 +583,9 @@ MotionAxisState motionAxisState; static void quick_feedback() { #if HAS_CHIRP ui.chirp(); // Buzz and wait. Is the delay needed for buttons to settle? - #if BOTH(HAS_LCD_MENU, USE_BEEPER) + #if BOTH(HAS_MARLINUI_MENU, USE_BEEPER) for (int8_t i = 5; i--;) { buzzer.tick(); delay(2); } - #elif HAS_LCD_MENU + #elif HAS_MARLINUI_MENU delay(10); #endif #endif diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index c9107a9b1c..e59a9f49cb 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -3786,7 +3786,7 @@ void Temperature::isr() { #if G26_CLICK_CAN_CANCEL if (click_to_cancel && ui.use_click()) { wait_for_heatup = false; - TERN_(HAS_LCD_MENU, ui.quick_feedback()); + TERN_(HAS_MARLINUI_MENU, ui.quick_feedback()); } #endif @@ -3920,7 +3920,7 @@ void Temperature::isr() { #if G26_CLICK_CAN_CANCEL if (click_to_cancel && ui.use_click()) { wait_for_heatup = false; - TERN_(HAS_LCD_MENU, ui.quick_feedback()); + TERN_(HAS_MARLINUI_MENU, ui.quick_feedback()); } #endif diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index ade1d480b2..eb2f4337c0 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -186,7 +186,7 @@ enum ADCSensorState : char { #define unscalePID_d(d) ( float(d) * PID_dT ) #endif -#if ENABLED(G26_MESH_VALIDATION) && EITHER(HAS_LCD_MENU, EXTENSIBLE_UI) +#if ENABLED(G26_MESH_VALIDATION) && EITHER(HAS_MARLINUI_MENU, EXTENSIBLE_UI) #define G26_CLICK_CAN_CANCEL 1 #endif @@ -965,7 +965,7 @@ class Temperature { static void set_heating_message(const uint8_t) {} #endif - #if HAS_LCD_MENU && HAS_TEMPERATURE + #if HAS_MARLINUI_MENU && HAS_TEMPERATURE static void lcd_preheat(const uint8_t e, const int8_t indh, const int8_t indb); #endif diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp index 285b4cba84..f2767f2b5b 100644 --- a/Marlin/src/module/tool_change.cpp +++ b/Marlin/src/module/tool_change.cpp @@ -89,7 +89,7 @@ #include "../feature/mmu/mmu2.h" #endif -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #include "../lcd/marlinui.h" #endif @@ -1027,7 +1027,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) { DEBUG_ECHOLNPGM("No move (not homed)"); } - TERN_(HAS_LCD_MENU, if (!no_move) ui.update()); + TERN_(HAS_MARLINUI_MENU, if (!no_move) ui.update()); #if ENABLED(DUAL_X_CARRIAGE) const bool idex_full_control = dual_x_carriage_mode == DXC_FULL_CONTROL_MODE; diff --git a/buildroot/share/PlatformIO/scripts/common-dependencies.h b/buildroot/share/PlatformIO/scripts/common-dependencies.h index a88e708467..f004c54adb 100644 --- a/buildroot/share/PlatformIO/scripts/common-dependencies.h +++ b/buildroot/share/PlatformIO/scripts/common-dependencies.h @@ -53,7 +53,7 @@ #define HAS_SMART_EFF_MOD #endif -#if HAS_LCD_MENU +#if HAS_MARLINUI_MENU #if ENABLED(BACKLASH_GCODE) #define HAS_MENU_BACKLASH #endif diff --git a/ini/features.ini b/ini/features.ini index eb3be400b1..a1f80500e5 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -52,7 +52,7 @@ IS_DWIN_MARLINUI = src_filter=+ HAS_GRAPHICAL_TFT = src_filter=+ IS_TFTGLCD_PANEL = src_filter=+ HAS_TOUCH_BUTTONS = src_filter=+ -HAS_LCD_MENU = src_filter=+ +HAS_MARLINUI_MENU = src_filter=+ HAS_GAMES = src_filter=+ MARLIN_BRICKOUT = src_filter=+ MARLIN_INVADERS = src_filter=+ From 7af8e23254006a61588307f792519d4ecaddd598 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 25 Jan 2022 17:19:20 -0600 Subject: [PATCH 412/532] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Fix=20MKS=20enum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.h | 2 +- Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.h b/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.h index 407782f559..9ec2304a36 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.h +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.h @@ -100,7 +100,7 @@ extern EX_FILAMENT_DEF ex_filament; typedef enum { UNRUNOUT_STATUS, RUNOUT_STATUS, - RUNOUT_WAITTING_STATUS, + RUNOUT_WAITING_STATUS, RUNOUT_BEGIN_STATUS, } RUNOUT_MKS_STATUS_DEF; diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp index 0457a06d04..88f26ab42d 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp @@ -195,7 +195,7 @@ void DGUSScreenHandler::DGUSLCD_SendTMCStepValue(DGUS_VP_Variable &var) { case 0: { // Resume auto cs = getCurrentScreen(); - if (runout_mks.runout_status != RUNOUT_WAITTING_STATUS && runout_mks.runout_status != UNRUNOUT_STATUS) { + if (runout_mks.runout_status != RUNOUT_WAITING_STATUS && runout_mks.runout_status != UNRUNOUT_STATUS) { if (cs == MKSLCD_SCREEN_PRINT || cs == MKSLCD_SCREEN_PAUSE) GotoScreen(MKSLCD_SCREEN_PAUSE); return; @@ -1501,10 +1501,10 @@ void DGUSScreenHandler::DGUS_Runout_Idle() { case RUNOUT_BEGIN_STATUS: if (READ(MT_DET_1_PIN) != MT_DET_PIN_STATE) - runout_mks.runout_status = RUNOUT_WAITTING_STATUS; + runout_mks.runout_status = RUNOUT_WAITING_STATUS; break; - case RUNOUT_WAITTING_STATUS: + case RUNOUT_WAITING_STATUS: if (READ(MT_DET_1_PIN) == MT_DET_PIN_STATE) runout_mks.runout_status = RUNOUT_BEGIN_STATUS; break; From b44263eb5babaa379cb425da3ccb2a2b008504e3 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Wed, 26 Jan 2022 13:08:15 +1300 Subject: [PATCH 413/532] =?UTF-8?q?=E2=9C=85=20FYSETC=20TFT81050=20CI=20Te?= =?UTF-8?q?st=20(#23604)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lcd/extui/ftdi_eve_touch_ui/language/language_en.h | 1 - buildroot/tests/FYSETC_S6 | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) 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 f79f788d8d..83e762430c 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 @@ -116,7 +116,6 @@ namespace Language_en { PROGMEM Language_Str MSG_LOAD_FILAMENT = u8"Load/Extrude"; PROGMEM Language_Str MSG_MOMENTARY = u8"Momentary"; PROGMEM Language_Str MSG_CONTINUOUS = u8"Continuous"; - PROGMEM Language_Str MSG_PLEASE_WAIT = u8"Please wait..."; PROGMEM Language_Str MSG_PRINT_MENU = u8"Print Menu"; PROGMEM Language_Str MSG_FINE_MOTION = u8"Fine motion"; PROGMEM Language_Str MSG_ENABLE_MEDIA = u8"Enable Media"; diff --git a/buildroot/tests/FYSETC_S6 b/buildroot/tests/FYSETC_S6 index 4794e11354..6d67800d77 100755 --- a/buildroot/tests/FYSETC_S6 +++ b/buildroot/tests/FYSETC_S6 @@ -13,5 +13,13 @@ opt_enable MEATPACK_ON_SERIAL_PORT_1 opt_set Y_DRIVER_TYPE TMC2209 Z_DRIVER_TYPE TMC2130 exec_test $1 $2 "FYSETC S6 Example" "$3" +# +# Build with the default configurations with FYSETC TFT81050 +# +restore_configs +opt_set MOTHERBOARD BOARD_FYSETC_S6_V2_0 SERIAL_PORT 1 +opt_enable TOUCH_UI_FTDI_EVE LCD_FYSETC_TFT81050 S6_TFT_PINMAP +exec_test $1 $2 "FYSETC S6 2 with LCD FYSETC TFT81050" "$3" + # cleanup restore_configs From 91c7db027f3cecabc2708bcd3ec9254c70b38e8b Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 25 Jan 2022 18:33:30 -0600 Subject: [PATCH 414/532] =?UTF-8?q?=E2=9C=A8=20BOARD=5FCREALITY=5FV24S1=5F?= =?UTF-8?q?301=20(#23620)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Miguel Risco-Castillo --- Marlin/src/core/boards.h | 21 +++--- Marlin/src/inc/Conditionals_LCD.h | 2 + Marlin/src/pins/pins.h | 2 + .../pins/stm32f1/pins_CREALITY_V24S1_301.h | 66 +++++++++++++++++++ Marlin/src/pins/stm32f1/pins_CREALITY_V4.h | 4 +- 5 files changed, 84 insertions(+), 11 deletions(-) create mode 100644 Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 6d294ddcc2..bcedc2059e 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -349,16 +349,17 @@ #define BOARD_CREALITY_V452 4049 // Creality v4.5.2 (STM32F103RE) #define BOARD_CREALITY_V453 4050 // Creality v4.5.3 (STM32F103RE) #define BOARD_CREALITY_V24S1 4051 // Creality v2.4.S1 (STM32F103RE) v101 as found in the Ender 7 -#define BOARD_TRIGORILLA_PRO 4052 // Trigorilla Pro (STM32F103ZE) -#define BOARD_FLY_MINI 4053 // FLYmaker FLY MINI (STM32F103RC) -#define BOARD_FLSUN_HISPEED 4054 // FLSUN HiSpeedV1 (STM32F103VE) -#define BOARD_BEAST 4055 // STM32F103RE Libmaple-based controller -#define BOARD_MINGDA_MPX_ARM_MINI 4056 // STM32F103ZE Mingda MD-16 -#define BOARD_GTM32_PRO_VD 4057 // STM32F103VE controller -#define BOARD_ZONESTAR_ZM3E2 4058 // Zonestar ZM3E2 (STM32F103RC) -#define BOARD_ZONESTAR_ZM3E4 4059 // Zonestar ZM3E4 V1 (STM32F103VC) -#define BOARD_ZONESTAR_ZM3E4V2 4060 // Zonestar ZM3E4 V2 (STM32F103VC) -#define BOARD_ERYONE_ERY32_MINI 4061 // Eryone Ery32 mini (STM32F103VE) +#define BOARD_CREALITY_V24S1_301 4052 // Creality v2.4.S1_301 (STM32F103RCT) as found in the Ender 3 S1 +#define BOARD_TRIGORILLA_PRO 4053 // Trigorilla Pro (STM32F103ZE) +#define BOARD_FLY_MINI 4054 // FLYmaker FLY MINI (STM32F103RC) +#define BOARD_FLSUN_HISPEED 4055 // FLSUN HiSpeedV1 (STM32F103VE) +#define BOARD_BEAST 4056 // STM32F103RE Libmaple-based controller +#define BOARD_MINGDA_MPX_ARM_MINI 4057 // STM32F103ZE Mingda MD-16 +#define BOARD_GTM32_PRO_VD 4058 // STM32F103VE controller +#define BOARD_ZONESTAR_ZM3E2 4059 // Zonestar ZM3E2 (STM32F103RC) +#define BOARD_ZONESTAR_ZM3E4 4060 // Zonestar ZM3E4 V1 (STM32F103VC) +#define BOARD_ZONESTAR_ZM3E4V2 4061 // Zonestar ZM3E4 V2 (STM32F103VC) +#define BOARD_ERYONE_ERY32_MINI 4062 // Eryone Ery32 mini (STM32F103VE) // // ARM Cortex-M4F diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index 825898f882..d044a0e681 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -511,6 +511,8 @@ #ifndef LCD_SERIAL_PORT #if MB(BTT_SKR_MINI_E3_V1_0, BTT_SKR_MINI_E3_V1_2, BTT_SKR_MINI_E3_V2_0, BTT_SKR_MINI_E3_V3_0, BTT_SKR_E3_TURBO) #define LCD_SERIAL_PORT 1 + #elif MB(CREALITY_V24S1_301) + #define LCD_SERIAL_PORT 2 // Creality Ender3S1 board #else #define LCD_SERIAL_PORT 3 // Creality 4.x board #endif diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 858a00524f..4521f6836e 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -573,6 +573,8 @@ #include "stm32f1/pins_CREALITY_V453.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(CREALITY_V24S1) #include "stm32f1/pins_CREALITY_V24S1.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple +#elif MB(CREALITY_V24S1_301) + #include "stm32f1/pins_CREALITY_V24S1_301.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(TRIGORILLA_PRO) #include "stm32f1/pins_TRIGORILLA_PRO.h" // STM32F1 env:trigorilla_pro env:trigorilla_pro_maple #elif MB(FLY_MINI) diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h new file mode 100644 index 0000000000..336754bc1a --- /dev/null +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h @@ -0,0 +1,66 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2022 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 + +/** + * Creality V24S1_301 (STM32F103RCT) board pin assignments as found on Ender 3 S1 + */ + +#include "env_validate.h" + +#if HAS_MULTI_HOTEND || E_STEPPERS > 1 + #error "Creality V4 only supports one hotend / E-stepper. Comment out this line to continue." +#endif + +#define BOARD_INFO_NAME "Creality V24S1-301" +#define DEFAULT_MACHINE_NAME "Ender 3 S1" + +// +// Servos +// +#if !defined(SERVO0_PIN) && !defined(HAS_PIN_27_BOARD) + #define SERVO0_PIN PC13 // BLTouch OUT +#endif + +// +// Limit Switches +// +#define Z_STOP_PIN PC14 + +#ifndef Z_MIN_PROBE_PIN + #define Z_MIN_PROBE_PIN PC14 // BLTouch IN +#endif + +// +// Filament Runout Sensor +// +#ifndef FIL_RUNOUT_PIN + #define FIL_RUNOUT_PIN PC15 // "Pulled-high" +#endif + +// +// Heaters / Fans +// +#define HEATER_BED_PIN PA7 // HOT BED +#define FAN1_PIN PC0 // extruder fan + +#include "pins_CREALITY_V4.h" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h index dea20642b1..3ed6888c38 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h @@ -72,7 +72,9 @@ // #define X_STOP_PIN PA5 #define Y_STOP_PIN PA6 -#define Z_STOP_PIN PA7 +#ifndef Z_STOP_PIN + #define Z_STOP_PIN PA7 +#endif #ifndef Z_MIN_PROBE_PIN #define Z_MIN_PROBE_PIN PB1 // BLTouch IN From 9eab577765b8aee8b42dc7da11c83f942bde5a5b Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 26 Jan 2022 02:01:35 +0000 Subject: [PATCH 415/532] [cron] Bump distribution date (2022-01-26) --- 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 967ee3bf31..350e98a0d5 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 "2022-01-25" +//#define STRING_DISTRIBUTION_DATE "2022-01-26" /** * 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 137f51de24..de4aa1dc59 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 "2022-01-25" + #define STRING_DISTRIBUTION_DATE "2022-01-26" #endif /** From 5b35f3a95582a477e879be5cc7d1406a42d3e740 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Wed, 26 Jan 2022 10:33:10 -0800 Subject: [PATCH 416/532] =?UTF-8?q?=F0=9F=9A=B8=20Better=20"Bed=20Tramming?= =?UTF-8?q?=20Done"=20dialog=20(#23616)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/lcd/HD44780/marlinui_HD44780.cpp | 12 ++++++++---- Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp | 12 ++++++++---- Marlin/src/lcd/dogm/marlinui_DOGM.cpp | 4 ++-- Marlin/src/lcd/e3v2/marlinui/ui_common.cpp | 4 ++-- Marlin/src/lcd/language/language_fr.h | 2 +- Marlin/src/lcd/menu/menu.cpp | 3 ++- Marlin/src/lcd/menu/menu_bed_corners.cpp | 10 ++++++---- Marlin/src/lcd/tft/ui_320x240.cpp | 4 ++-- Marlin/src/lcd/tft/ui_480x320.cpp | 4 ++-- 9 files changed, 33 insertions(+), 22 deletions(-) diff --git a/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp b/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp index 26344da412..db4bd4e19e 100644 --- a/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp +++ b/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp @@ -1117,10 +1117,14 @@ void MarlinUI::draw_status_screen() { // The Select Screen presents a prompt and two "buttons" void MenuItem_confirm::draw_select_screen(PGM_P const yes, PGM_P const no, const bool yesno, PGM_P const pref, const char * const string/*=nullptr*/, PGM_P const suff/*=nullptr*/) { ui.draw_select_screen_prompt(pref, string, suff); - SETCURSOR(0, LCD_HEIGHT - 1); - lcd_put_wchar(yesno ? ' ' : '['); lcd_put_u8str_P(no); lcd_put_wchar(yesno ? ' ' : ']'); - SETCURSOR_RJ(utf8_strlen_P(yes) + 2, LCD_HEIGHT - 1); - lcd_put_wchar(yesno ? '[' : ' '); lcd_put_u8str_P(yes); lcd_put_wchar(yesno ? ']' : ' '); + if (no) { + SETCURSOR(0, LCD_HEIGHT - 1); + lcd_put_wchar(yesno ? ' ' : '['); lcd_put_u8str_P(no); lcd_put_wchar(yesno ? ' ' : ']'); + } + if (yes) { + SETCURSOR_RJ(utf8_strlen_P(yes) + 2, LCD_HEIGHT - 1); + lcd_put_wchar(yesno ? '[' : ' '); lcd_put_u8str_P(yes); lcd_put_wchar(yesno ? ']' : ' '); + } } #if ENABLED(SDSUPPORT) diff --git a/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp b/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp index fef313e761..0745397f4f 100644 --- a/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp +++ b/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp @@ -1003,11 +1003,15 @@ void MarlinUI::draw_status_screen() { void MenuItem_confirm::draw_select_screen(PGM_P const yes, PGM_P const no, const bool yesno, PGM_P const pref, const char * const string, PGM_P const suff) { if (!PanelDetected) return; ui.draw_select_screen_prompt(pref, string, suff); - lcd.setCursor(0, MIDDLE_Y); lcd.write(COLOR_EDIT); - lcd.write(yesno ? ' ' : '['); lcd_put_u8str_P(no); lcd.write(yesno ? ' ' : ']'); - lcd.setCursor(LCD_WIDTH - utf8_strlen_P(yes) - 3, MIDDLE_Y); - lcd.write(yesno ? '[' : ' '); lcd_put_u8str_P(yes); lcd.write(yesno ? ']' : ' '); + if (no) { + lcd.setCursor(0, MIDDLE_Y); + lcd.write(yesno ? ' ' : '['); lcd_put_u8str_P(no); lcd.write(yesno ? ' ' : ']'); + } + if (yes) { + lcd.setCursor(LCD_WIDTH - utf8_strlen_P(yes) - 3, MIDDLE_Y); + lcd.write(yesno ? '[' : ' '); lcd_put_u8str_P(yes); lcd.write(yesno ? ']' : ' '); + } lcd.print_line(); } diff --git a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp index a1540e754f..aafc4d8803 100644 --- a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp +++ b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp @@ -519,8 +519,8 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop void MenuItem_confirm::draw_select_screen(PGM_P const yes, PGM_P const no, const bool yesno, PGM_P const pref, const char * const string/*=nullptr*/, PGM_P const suff/*=nullptr*/) { ui.draw_select_screen_prompt(pref, string, suff); - draw_boxed_string(1, LCD_HEIGHT - 1, no, !yesno); - draw_boxed_string(LCD_WIDTH - (utf8_strlen_P(yes) * (USE_WIDE_GLYPH ? 2 : 1) + 1), LCD_HEIGHT - 1, yes, yesno); + if (no) draw_boxed_string(1, LCD_HEIGHT - 1, no, !yesno); + if (yes) draw_boxed_string(LCD_WIDTH - (utf8_strlen_P(yes) * (USE_WIDE_GLYPH ? 2 : 1) + 1), LCD_HEIGHT - 1, yes, yesno); } #if ENABLED(SDSUPPORT) diff --git a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp index 8b0a700828..f49d06d396 100644 --- a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp +++ b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp @@ -437,8 +437,8 @@ void MarlinUI::draw_status_message(const bool blink) { dwin_font.solid = false; dwin_font.fg = Color_White; ui.draw_select_screen_prompt(pref, string, suff); - draw_boxed_string(false, no, !yesno); - draw_boxed_string(true, yes, yesno); + if (no) draw_boxed_string(false, no, !yesno); + if (yes) draw_boxed_string(true, yes, yesno); } #if ENABLED(SDSUPPORT) diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h index 6b2d56b1bf..2eb64fc2c2 100644 --- a/Marlin/src/lcd/language/language_fr.h +++ b/Marlin/src/lcd/language/language_fr.h @@ -111,7 +111,7 @@ namespace Language_fr { 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'à la sonde"); - LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Coins dans la tolérance. Niveau lit "); + LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Coins dans la tolérance. 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"); diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp index 01b845da6e..2dca6c1b82 100644 --- a/Marlin/src/lcd/menu/menu.cpp +++ b/Marlin/src/lcd/menu/menu.cpp @@ -368,7 +368,8 @@ void MenuItem_confirm::select_screen( PGM_P const pref, const char * const string/*=nullptr*/, PGM_P const suff/*=nullptr*/ ) { ui.defer_status_screen(); - const bool ui_selection = ui.update_selection(), got_click = ui.use_click(); + const bool ui_selection = !yes ? false : !no || ui.update_selection(), + got_click = ui.use_click(); if (got_click || ui.should_draw()) { draw_select_screen(yes, no, ui_selection, pref, string, suff); if (got_click) { diff --git a/Marlin/src/lcd/menu/menu_bed_corners.cpp b/Marlin/src/lcd/menu/menu_bed_corners.cpp index 7a0f2eaa49..e3f5c460ed 100644 --- a/Marlin/src/lcd/menu/menu_bed_corners.cpp +++ b/Marlin/src/lcd/menu/menu_bed_corners.cpp @@ -207,11 +207,13 @@ static void _lcd_level_bed_corners_get_next_position() { void _lcd_draw_level_prompt() { if (!ui.should_draw()) return; - MenuItem_confirm::confirm_screen( - []{ queue.inject(TERN(HAS_LEVELING, F("G29N"), FPSTR(G28_STR))); ui.return_to_status(); } - , ui.goto_previous_screen_no_defer + MenuItem_confirm::select_screen( + GET_TEXT(TERN(HAS_LEVELING, MSG_BUTTON_LEVEL, MSG_BUTTON_DONE)), + TERN(HAS_LEVELING, GET_TEXT(MSG_BUTTON_BACK), nullptr) + , []{ queue.inject(TERN(HAS_LEVELING, F("G29N"), FPSTR(G28_STR))); ui.return_to_status(); } + , TERN(HAS_LEVELING, ui.goto_previous_screen_no_defer, []{}) , GET_TEXT(MSG_BED_TRAMMING_IN_RANGE) - , (const char*)nullptr, PSTR("?") + , (const char*)nullptr, NUL_STR ); } diff --git a/Marlin/src/lcd/tft/ui_320x240.cpp b/Marlin/src/lcd/tft/ui_320x240.cpp index 5447e7d33e..812a035947 100644 --- a/Marlin/src/lcd/tft/ui_320x240.cpp +++ b/Marlin/src/lcd/tft/ui_320x240.cpp @@ -440,8 +440,8 @@ void MenuItem_confirm::draw_select_screen(PGM_P const yes, PGM_P const no, const tft.add_text(tft_string.center(TFT_WIDTH), MENU_TEXT_Y_OFFSET, COLOR_MENU_TEXT, tft_string); } #if ENABLED(TOUCH_SCREEN) - add_control(48, TFT_HEIGHT - 64, CANCEL, imgCancel, true, yesno ? HALF(COLOR_CONTROL_CANCEL) : COLOR_CONTROL_CANCEL); - add_control(208, TFT_HEIGHT - 64, CONFIRM, imgConfirm, true, yesno ? COLOR_CONTROL_CONFIRM : HALF(COLOR_CONTROL_CONFIRM)); + if (no) add_control( 48, TFT_HEIGHT - 64, CANCEL, imgCancel, true, yesno ? HALF(COLOR_CONTROL_CANCEL) : COLOR_CONTROL_CANCEL); + if (yes) add_control(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 286879a6e0..f142dbbc06 100644 --- a/Marlin/src/lcd/tft/ui_480x320.cpp +++ b/Marlin/src/lcd/tft/ui_480x320.cpp @@ -445,8 +445,8 @@ void MenuItem_confirm::draw_select_screen(PGM_P const yes, PGM_P const no, const tft.add_text(tft_string.center(TFT_WIDTH), 0, COLOR_MENU_TEXT, tft_string); } #if ENABLED(TOUCH_SCREEN) - add_control(88, TFT_HEIGHT - 64, CANCEL, imgCancel, true, yesno ? HALF(COLOR_CONTROL_CANCEL) : COLOR_CONTROL_CANCEL); - add_control(328, TFT_HEIGHT - 64, CONFIRM, imgConfirm, true, yesno ? COLOR_CONTROL_CONFIRM : HALF(COLOR_CONTROL_CONFIRM)); + if (no) add_control( 88, TFT_HEIGHT - 64, CANCEL, imgCancel, true, yesno ? HALF(COLOR_CONTROL_CANCEL) : COLOR_CONTROL_CANCEL); + if (yes) add_control(328, TFT_HEIGHT - 64, CONFIRM, imgConfirm, true, yesno ? COLOR_CONTROL_CONFIRM : HALF(COLOR_CONTROL_CONFIRM)); #endif } From 9c1eaafe8804bd36d1d9874069e1626bc4b02002 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 26 Jan 2022 13:40:29 -0600 Subject: [PATCH 417/532] =?UTF-8?q?=F0=9F=93=9D=20Update=20Creality=204.2.?= =?UTF-8?q?2=20driver=20warning?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Warnings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index e1b4a1f9a8..f2b2339729 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -538,7 +538,7 @@ // Ender 3 Pro (but, apparently all Creality 4.2.2 boards) #if ENABLED(EMIT_CREALITY_422_WARNING) || MB(CREALITY_V4) - #warning "Creality 4.2.2 boards may have A4988 or TMC2208_STANDALONE drivers. Check your board and make sure to select the correct DRIVER_TYPE!" + #warning "Creality 4.2.2 boards come with a variety of stepper drivers. Check the board label and set the correct *_DRIVER_TYPE! (C=HR4988, E=A4988, A=TMC2208, B=TMC2209, H=TMC2225)." #endif #if HOMING_Z_WITH_PROBE && IS_CARTESIAN && DISABLED(Z_SAFE_HOMING) From 7fb65309aa7b1c9bd740ef4c5d4a03a0bc0891ef Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Wed, 26 Jan 2022 14:01:22 -0600 Subject: [PATCH 418/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20SPI=20DMA=20and=20?= =?UTF-8?q?default=20mode=20(#23627)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Followup to #23464 --- Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp | 2 +- Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) 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 82b209593e..6e852a7487 100644 --- a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp +++ b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp @@ -270,7 +270,7 @@ void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * co uint16_t width = area->x2 - area->x1 + 1, height = area->y2 - area->y1 + 1; - TERN_(USE_SPI_DMA_TC, disp_drv_p = disp); + disp_drv_p = disp; SPI_TFT.setWindow((uint16_t)area->x1, (uint16_t)area->y1, width, height); diff --git a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h index dee6923076..032ce41bcb 100644 --- a/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h +++ b/Marlin/src/pins/stm32f4/pins_MKS_ROBIN_NANO_V3_common.h @@ -369,7 +369,8 @@ #endif // HAS_WIRED_LCD #if HAS_TFT_LVGL_UI - #define USE_SPI_DMA_TC + // Enable SPI DMA, this requires button pins, thus no buttons. Default is DISABLED. + //#define USE_SPI_DMA_TC #endif #if ANY(TFT_COLOR_UI, TFT_LVGL_UI, TFT_CLASSIC_UI, HAS_WIRED_LCD) From 7b12f985d32ca106dc7c5c89598d5f4c77e64a74 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 27 Jan 2022 00:18:30 +0000 Subject: [PATCH 419/532] [cron] Bump distribution date (2022-01-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 350e98a0d5..50b9872f5c 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 "2022-01-26" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 de4aa1dc59..101f61ffd9 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 "2022-01-26" + #define STRING_DISTRIBUTION_DATE "2022-01-27" #endif /** From afdaa1796463fbb3ba87c425c865c749a0773033 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 27 Jan 2022 07:05:26 -0600 Subject: [PATCH 420/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Sim?= =?UTF-8?q?plify=20Fast=20PWM=20timer=20macros?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/AVR/fast_pwm.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Marlin/src/HAL/AVR/fast_pwm.cpp b/Marlin/src/HAL/AVR/fast_pwm.cpp index af96fb9e18..aa5abf53f3 100644 --- a/Marlin/src/HAL/AVR/fast_pwm.cpp +++ b/Marlin/src/HAL/AVR/fast_pwm.cpp @@ -34,27 +34,27 @@ struct Timer { }; // Macros for the Timer structure -#define _SET_WGMnQ(TCCRnQ, V) do{ \ - *(TCCRnQ)[0] = (*(TCCRnQ)[0] & ~(0x3 << 0)) | (( int(V) & 0x3) << 0); \ - *(TCCRnQ)[1] = (*(TCCRnQ)[1] & ~(0x3 << 3)) | (((int(V) >> 2) & 0x3) << 3); \ +#define _SET_WGMnQ(T, V) do{ \ + *(T.TCCRnQ)[0] = (*(T.TCCRnQ)[0] & ~(0x3 << 0)) | (( int(V) & 0x3) << 0); \ + *(T.TCCRnQ)[1] = (*(T.TCCRnQ)[1] & ~(0x3 << 3)) | (((int(V) >> 2) & 0x3) << 3); \ }while(0) // Set TCCR CS bits -#define _SET_CSn(TCCRnQ, V) (*(TCCRnQ)[1] = (*(TCCRnQ[1]) & ~(0x7 << 0)) | ((int(V) & 0x7) << 0)) +#define _SET_CSn(T, V) (*(T.TCCRnQ)[1] = (*(T.TCCRnQ[1]) & ~(0x7 << 0)) | ((int(V) & 0x7) << 0)) // Set TCCR COM bits -#define _SET_COMnQ(TCCRnQ, Q, V) (*(TCCRnQ)[0] = (*(TCCRnQ)[0] & ~(0x3 << (6-2*(Q)))) | (int(V) << (6-2*(Q)))) +#define _SET_COMnQ(T, Q, V) (*(T.TCCRnQ)[0] = (*(T.TCCRnQ)[0] & ~(0x3 << (6-2*(Q)))) | (int(V) << (6-2*(Q)))) // Set OCRnQ register -#define _SET_OCRnQ(OCRnQ, Q, V) (*(OCRnQ)[Q] = int(V) & 0xFFFF) +#define _SET_OCRnQ(T, Q, V) (*(T.OCRnQ)[Q] = int(V) & 0xFFFF) // Set ICRn register (one per timer) -#define _SET_ICRn(ICRn, V) (*(ICRn) = int(V) & 0xFFFF) +#define _SET_ICRn(T, V) (*(T.ICRn) = int(V) & 0xFFFF) /** * Return a Timer struct describing a pin's timer. */ -Timer get_pwm_timer(const pin_t pin) { +const Timer get_pwm_timer(const pin_t pin) { uint8_t q = 0; @@ -108,7 +108,7 @@ Timer get_pwm_timer(const pin_t pin) { } void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { - Timer timer = get_pwm_timer(pin); + 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; @@ -166,14 +166,14 @@ void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { } } - _SET_WGMnQ(timer.TCCRnQ, wgm); - _SET_CSn(timer.TCCRnQ, j); + _SET_WGMnQ(timer, wgm); + _SET_CSn(timer, j); if (is_timer2) { - TERN_(USE_OCR2A_AS_TOP, _SET_OCRnQ(timer.OCRnQ, 0, res)); // Set OCR2A value (TOP) = res + TERN_(USE_OCR2A_AS_TOP, _SET_OCRnQ(timer, 0, res)); // Set OCR2A value (TOP) = res } else - _SET_ICRn(timer.ICRn, res); // Set ICRn value (TOP) = res + _SET_ICRn(timer, res); // Set ICRn value (TOP) = res } void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { @@ -184,7 +184,7 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 else if (v == v_size) digitalWrite(pin, !invert); else { - Timer timer = get_pwm_timer(pin); + const Timer timer = get_pwm_timer(pin); if (timer.isPWM) { if (timer.n == 0) { TCCR0A |= _BV(COM0B1); // Only allow a TIMER0B select and OCR0B duty update for pin D4 outputs no frequency changes are permited. @@ -192,8 +192,8 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 } else if (!timer.isProtected) { const uint16_t top = timer.n == 2 ? TERN(USE_OCR2A_AS_TOP, *timer.OCRnQ[0], 255) : *timer.ICRn; - _SET_COMnQ(timer.TCCRnQ, SUM_TERN(HAS_TCCR2, timer.q, timer.q == 2), COM_CLEAR_SET + invert); // COM20 is on bit 4 of TCCR2, so +1 for q==2 - _SET_OCRnQ(timer.OCRnQ, timer.q, uint16_t(uint32_t(v) * top / v_size)); // Scale 8/16-bit v to top value + _SET_COMnQ(timer, SUM_TERN(HAS_TCCR2, timer.q, timer.q == 2), COM_CLEAR_SET + invert); // COM20 is on bit 4 of TCCR2, so +1 for q==2 + _SET_OCRnQ(timer, timer.q, uint16_t(uint32_t(v) * top / v_size)); // Scale 8/16-bit v to top value } } else From 79fea49868e871b18e9b2d39191dc0317a0ce2e1 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 28 Jan 2022 00:18:24 +0000 Subject: [PATCH 421/532] [cron] Bump distribution date (2022-01-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 50b9872f5c..1284c9d08e 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 "2022-01-27" +//#define STRING_DISTRIBUTION_DATE "2022-01-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 101f61ffd9..9eb3d81845 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 "2022-01-27" + #define STRING_DISTRIBUTION_DATE "2022-01-28" #endif /** From 566b26a72e923290dbb193263ed2ef794d2c433a Mon Sep 17 00:00:00 2001 From: Timothy Hoogland Date: Sun, 30 Jan 2022 05:26:37 -0600 Subject: [PATCH 422/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20EZBoard=20V2=20tim?= =?UTF-8?q?er=20conflict=20(#23648)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/variant.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/variant.h index ec6e498b21..2fee15ba3b 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/variant.h @@ -104,7 +104,7 @@ extern "C" { // Timer Definitions // Use TIM6/TIM7 when possible as servo and tone don't need GPIO output pin #define TIMER_TONE TIM5 -#define TIMER_SERVO TIM7 +#define TIMER_SERVO TIM4 // UART Definitions // Define here Serial instance number to map on Serial generic name From 127a3ad8311d9a42ff9abf582e3cd3331cfc3a06 Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Sun, 30 Jan 2022 05:31:56 -0600 Subject: [PATCH 423/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20AVR=20644/1284=20T?= =?UTF-8?q?imer=20/=20PWM=20conflicts=20(#23629)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/AVR/HAL_SPI.cpp | 20 +++++++++----------- Marlin/src/HAL/AVR/fast_pwm.cpp | 8 ++++---- Marlin/src/HAL/AVR/timers.h | 22 +++++++++++----------- 3 files changed, 24 insertions(+), 26 deletions(-) diff --git a/Marlin/src/HAL/AVR/HAL_SPI.cpp b/Marlin/src/HAL/AVR/HAL_SPI.cpp index 8784bb07b3..dc98f2f79e 100644 --- a/Marlin/src/HAL/AVR/HAL_SPI.cpp +++ b/Marlin/src/HAL/AVR/HAL_SPI.cpp @@ -35,22 +35,20 @@ void spiBegin() { #if PIN_EXISTS(SD_SS) - OUT_WRITE(SD_SS_PIN, HIGH); + // Do not init HIGH for boards with pin 4 used as Fans or Heaters or otherwise, not likely to have multiple SPI devices anyway. + #if defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) || defined(__AVR_ATmega1284P__) + // SS must be in output mode even it is not chip select + SET_OUTPUT(SD_SS_PIN); + #else + // set SS high - may be chip select for another SPI device + OUT_WRITE(SD_SS_PIN, HIGH); + #endif #endif SET_OUTPUT(SD_SCK_PIN); SET_INPUT(SD_MISO_PIN); SET_OUTPUT(SD_MOSI_PIN); - #if DISABLED(SOFTWARE_SPI) - // SS must be in output mode even it is not chip select - //SET_OUTPUT(SD_SS_PIN); - // set SS high - may be chip select for another SPI device - //#if SET_SPI_SS_HIGH - //WRITE(SD_SS_PIN, HIGH); - //#endif - // set a default rate - spiInit(1); - #endif + IF_DISABLED(SOFTWARE_SPI, spiInit(SPI_HALF_SPEED)); } #if NONE(SOFTWARE_SPI, FORCE_SOFT_SPI) diff --git a/Marlin/src/HAL/AVR/fast_pwm.cpp b/Marlin/src/HAL/AVR/fast_pwm.cpp index aa5abf53f3..f8201d028e 100644 --- a/Marlin/src/HAL/AVR/fast_pwm.cpp +++ b/Marlin/src/HAL/AVR/fast_pwm.cpp @@ -70,7 +70,7 @@ const Timer get_pwm_timer(const pin_t pin) { #ifdef TCCR0A case TIMER0B: // Protected timer, but allow setting the duty cycle on OCR0B for pin D4 only - return Timer({ { &TCCR0A, nullptr, nullptr }, { (uint16_t*)&OCR0B, nullptr, nullptr }, nullptr, 0, 0, true, true }); + return Timer({ { &TCCR0A, nullptr, nullptr }, { (uint16_t*)&OCR0A, (uint16_t*)&OCR0B, nullptr }, nullptr, 0, 1, true, true }); #endif #if HAS_TCCR2 @@ -187,8 +187,8 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 const Timer timer = get_pwm_timer(pin); if (timer.isPWM) { if (timer.n == 0) { - TCCR0A |= _BV(COM0B1); // Only allow a TIMER0B select and OCR0B duty update for pin D4 outputs no frequency changes are permited. - OCR0B = v; + _SET_COMnQ(timer, timer.q, COM_CLEAR_SET); // Only allow a TIMER0B select... + _SET_OCRnQ(timer, timer.q, v); // ...and OCR0B duty update. For output pin D4 no frequency changes are permitted. } else if (!timer.isProtected) { const uint16_t top = timer.n == 2 ? TERN(USE_OCR2A_AS_TOP, *timer.OCRnQ[0], 255) : *timer.ICRn; @@ -197,7 +197,7 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 } } else - digitalWrite(pin, v < 128 ? LOW : HIGH); + digitalWrite(pin, v < v_size / 2 ? LOW : HIGH); } } diff --git a/Marlin/src/HAL/AVR/timers.h b/Marlin/src/HAL/AVR/timers.h index 36b04eae0d..ba3c4acd29 100644 --- a/Marlin/src/HAL/AVR/timers.h +++ b/Marlin/src/HAL/AVR/timers.h @@ -58,9 +58,9 @@ typedef uint16_t hal_timer_t; #define DISABLE_STEPPER_DRIVER_INTERRUPT() CBI(TIMSK1, OCIE1A) #define STEPPER_ISR_ENABLED() TEST(TIMSK1, OCIE1A) -#define ENABLE_TEMPERATURE_INTERRUPT() SBI(TIMSK0, OCIE0B) -#define DISABLE_TEMPERATURE_INTERRUPT() CBI(TIMSK0, OCIE0B) -#define TEMPERATURE_ISR_ENABLED() TEST(TIMSK0, OCIE0B) +#define ENABLE_TEMPERATURE_INTERRUPT() SBI(TIMSK0, OCIE0A) +#define DISABLE_TEMPERATURE_INTERRUPT() CBI(TIMSK0, OCIE0A) +#define TEMPERATURE_ISR_ENABLED() TEST(TIMSK0, OCIE0A) FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) { switch (timer_num) { @@ -87,7 +87,7 @@ FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) { case MF_TIMER_TEMP: // Use timer0 for temperature measurement // Interleave temperature interrupt with millies interrupt - OCR0B = 128; + OCR0A = 128; break; } } @@ -180,7 +180,7 @@ void TIMER1_COMPA_vect() { \ : \ : [timsk0] "i" ((uint16_t)&TIMSK0), \ [timsk1] "i" ((uint16_t)&TIMSK1), \ - [msk0] "M" ((uint8_t)(1< Date: Mon, 31 Jan 2022 00:34:03 +1300 Subject: [PATCH 424/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20FYSETC=20S6,=20S6?= =?UTF-8?q?=20V2=20Serial=20RX=20pins=20(#23642)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32f4/pins_FYSETC_S6.h | 2 +- Marlin/src/pins/stm32f4/pins_FYSETC_S6_V2_0.h | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h b/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h index 0e0266f1a4..dfcb4217c9 100644 --- a/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h +++ b/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h @@ -128,7 +128,7 @@ #define Y_SERIAL_TX_PIN PE14 #endif #ifndef Y_SERIAL_RX_PIN - #define Y_SERIAL_RX_PIN PC4 + #define Y_SERIAL_RX_PIN PE13 #endif #ifndef Z_SERIAL_TX_PIN #define Z_SERIAL_TX_PIN PD11 diff --git a/Marlin/src/pins/stm32f4/pins_FYSETC_S6_V2_0.h b/Marlin/src/pins/stm32f4/pins_FYSETC_S6_V2_0.h index 6f1c9be8f5..a9ce1383d8 100644 --- a/Marlin/src/pins/stm32f4/pins_FYSETC_S6_V2_0.h +++ b/Marlin/src/pins/stm32f4/pins_FYSETC_S6_V2_0.h @@ -39,11 +39,17 @@ #if HAS_TMC_UART #define X_SERIAL_TX_PIN PE8 + #define X_SERIAL_RX_PIN PE8 #define Y_SERIAL_TX_PIN PC4 + #define Y_SERIAL_RX_PIN PC4 #define Z_SERIAL_TX_PIN PD12 + #define Z_SERIAL_RX_PIN PD12 #define E0_SERIAL_TX_PIN PA15 + #define E0_SERIAL_RX_PIN PA15 #define E1_SERIAL_TX_PIN PC5 + #define E1_SERIAL_RX_PIN PC5 #define E2_SERIAL_TX_PIN PE0 + #define E2_SERIAL_RX_PIN PE0 #endif // From a1cfb15e402841b99aec0244288b79855b403362 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 30 Jan 2022 12:26:01 +0000 Subject: [PATCH 425/532] [cron] Bump distribution date (2022-01-30) --- 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 1284c9d08e..b647175622 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 "2022-01-28" +//#define STRING_DISTRIBUTION_DATE "2022-01-30" /** * 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 9eb3d81845..905a16412f 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 "2022-01-28" + #define STRING_DISTRIBUTION_DATE "2022-01-30" #endif /** From 59dbf27385febae978093bbdc37f4b97c586d4d6 Mon Sep 17 00:00:00 2001 From: Timothy Hoogland Date: Mon, 31 Jan 2022 14:02:07 -0600 Subject: [PATCH 426/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20EZBoard=20V2=20Env?= =?UTF-8?q?ironment=20for=20OpenBLT=20(#23659)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ini/stm32f4.ini | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index 93f42123fa..c7d70dd01d 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -532,11 +532,14 @@ build_unflags = -DUSBD_USE_CDC extends = stm32_variant board = genericSTM32F405RG board_build.variant = MARLIN_TH3D_EZBOARD_V2 +board_build.encrypt = firmware.bin board_build.offset = 0xC000 board_upload.offset_address = 0x0800C000 build_flags = ${stm32_variant.build_flags} -DHSE_VALUE=12000000U -O0 debug_tool = stlink upload_protocol = stlink +extra_scripts = ${stm32_variant.extra_scripts} + buildroot/share/PlatformIO/scripts/openblt.py # # BOARD_MKS_ROBIN_NANO_V1_3_F4 From c61a692e7f57869a7071ee87da898b5db14cdd59 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 1 Feb 2022 00:19:16 +0000 Subject: [PATCH 427/532] [cron] Bump distribution date (2022-02-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 b647175622..4a2eb6696d 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 "2022-01-30" +//#define STRING_DISTRIBUTION_DATE "2022-02-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 905a16412f..1293c1ec6e 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 "2022-01-30" + #define STRING_DISTRIBUTION_DATE "2022-02-01" #endif /** From b637617deb1e3c65539b5a540eb75b20b508d29d Mon Sep 17 00:00:00 2001 From: Maeyanie Date: Tue, 1 Feb 2022 18:27:14 -0500 Subject: [PATCH 428/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20M852=20report=20(#?= =?UTF-8?q?23660)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/calibrate/M852.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/gcode/calibrate/M852.cpp b/Marlin/src/gcode/calibrate/M852.cpp index b24a449652..6c661dcd61 100644 --- a/Marlin/src/gcode/calibrate/M852.cpp +++ b/Marlin/src/gcode/calibrate/M852.cpp @@ -93,7 +93,7 @@ void GcodeSuite::M852() { void GcodeSuite::M852_report(const bool forReplay/*=true*/) { report_heading_etc(forReplay, F(STR_SKEW_FACTOR)); - SERIAL_ECHOPAIR_F(" M851 I", planner.skew_factor.xy, 6); + SERIAL_ECHOPAIR_F(" M852 I", planner.skew_factor.xy, 6); #if ENABLED(SKEW_CORRECTION_FOR_Z) SERIAL_ECHOPAIR_F(" J", planner.skew_factor.xz, 6); SERIAL_ECHOPAIR_F(" K", planner.skew_factor.yz, 6); From 1d35bb5d337a5300bdd03312aa804e46b0455987 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 1 Feb 2022 17:28:29 -0600 Subject: [PATCH 429/532] =?UTF-8?q?=F0=9F=94=A7=20Board=20temp=20sensor=20?= =?UTF-8?q?check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/SanityCheck.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 7b14ef495b..a8eb7614ff 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2294,6 +2294,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "CONTROLLER_FAN_MIN_BOARD_TEMP requires TEMP_SENSOR_BOARD." #endif +#if TEMP_SENSOR_BOARD && !PIN_EXISTS(TEMP_BOARD) + #error "TEMP_SENSOR_BOARD requires TEMP_BOARD_PIN." +#endif + #if ENABLED(LASER_COOLANT_FLOW_METER) && !(PIN_EXISTS(FLOWMETER) && ENABLED(LASER_FEATURE)) #error "LASER_COOLANT_FLOW_METER requires FLOWMETER_PIN and LASER_FEATURE." #endif From f07fc7e96f512f4900619049761f75d28f9e0403 Mon Sep 17 00:00:00 2001 From: GHGiampy <83699429+GHGiampy@users.noreply.github.com> Date: Wed, 2 Feb 2022 00:35:38 +0100 Subject: [PATCH 430/532] =?UTF-8?q?=F0=9F=9A=B8=20Case=20Light,=20LED=20me?= =?UTF-8?q?nus=20for=20E3V2=20DWIN=20Enhanced=20UI=20(#23590)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration.h | 5 +- Marlin/Configuration_adv.h | 54 ++++---- Marlin/src/feature/caselight.cpp | 12 +- Marlin/src/feature/caselight.h | 4 - Marlin/src/feature/leds/leds.cpp | 12 +- Marlin/src/feature/leds/leds.h | 4 +- Marlin/src/feature/leds/neopixel.h | 4 +- Marlin/src/inc/Conditionals_LCD.h | 41 ++---- Marlin/src/inc/Conditionals_adv.h | 10 +- Marlin/src/inc/SanityCheck.h | 39 +++--- Marlin/src/inc/Warnings.cpp | 17 +++ Marlin/src/lcd/e3v2/enhanced/dwin.cpp | 131 +++++++++++++++++++- Marlin/src/lcd/e3v2/enhanced/dwin.h | 6 + Marlin/src/lcd/e3v2/enhanced/dwin_defines.h | 28 ++++- Marlin/src/lcd/e3v2/enhanced/dwinui.h | 2 + Marlin/src/lcd/language/language_en.h | 1 + Marlin/src/lcd/marlinui.cpp | 14 +-- buildroot/tests/DUE | 2 +- buildroot/tests/LPC1768 | 4 +- 19 files changed, 278 insertions(+), 112 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index a0dae83593..a6a11cb9fe 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -371,8 +371,9 @@ //#define PS_OFF_SOUND // Beep 1s when power off #define PSU_ACTIVE_STATE LOW // Set 'LOW' for ATX, 'HIGH' for X-Box - //#define PSU_DEFAULT_OFF // Keep power off until enabled directly with M80 - //#define PSU_POWERUP_DELAY 250 // (ms) Delay for the PSU to warm up to full power + //#define PSU_DEFAULT_OFF // Keep power off until enabled directly with M80 + //#define PSU_POWERUP_DELAY 250 // (ms) Delay for the PSU to warm up to full power + //#define LED_POWEROFF_TIMEOUT 10000 // (ms) Turn off LEDs after power-off, with this amount of delay //#define POWER_OFF_TIMER // Enable M81 D to power off after a delay //#define POWER_OFF_WAIT_FOR_COOLDOWN // Enable M81 S to power off only after cooldown diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 9091a6bdd0..35e8044355 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1297,7 +1297,6 @@ #if HAS_MARLINUI_MENU - // Add Probe Z Offset calibration to the Z Probe Offsets menu #if BOTH(HAS_BED_PROBE, AUTO_BED_LEVELING_BILINEAR) // Add calibration in the Probe Offsets menu to compensate for X-axis twist. //#define X_AXIS_TWIST_COMPENSATION @@ -1322,32 +1321,6 @@ // BACK menu items keep the highlight at the top //#define TURBO_BACK_MENU_ITEM - /** - * LED Control Menu - * Add LED Control to the LCD menu - */ - //#define LED_CONTROL_MENU - #if ENABLED(LED_CONTROL_MENU) - #define LED_COLOR_PRESETS // Enable the Preset Color menu option - //#define NEO2_COLOR_PRESETS // Enable a second NeoPixel Preset Color menu option - #if ENABLED(LED_COLOR_PRESETS) - #define LED_USER_PRESET_RED 255 // User defined RED value - #define LED_USER_PRESET_GREEN 128 // User defined GREEN value - #define LED_USER_PRESET_BLUE 0 // User defined BLUE value - #define LED_USER_PRESET_WHITE 255 // User defined WHITE value - #define LED_USER_PRESET_BRIGHTNESS 255 // User defined intensity - //#define LED_USER_PRESET_STARTUP // Have the printer display the user preset color on startup - #endif - #if ENABLED(NEO2_COLOR_PRESETS) - #define NEO2_USER_PRESET_RED 255 // User defined RED value - #define NEO2_USER_PRESET_GREEN 128 // User defined GREEN value - #define NEO2_USER_PRESET_BLUE 0 // User defined BLUE value - #define NEO2_USER_PRESET_WHITE 255 // User defined WHITE value - #define NEO2_USER_PRESET_BRIGHTNESS 255 // User defined intensity - //#define NEO2_USER_PRESET_STARTUP // Have the printer display the user preset color on startup for the second strip - #endif - #endif - // Insert a menu for preheating at the top level to allow for quick access //#define PREHEAT_SHORTCUT_MENU_ITEM @@ -1379,6 +1352,33 @@ // Show the E position (filament used) during printing //#define LCD_SHOW_E_TOTAL + + /** + * LED Control Menu + * Add LED Control to the LCD menu + */ + //#define LED_CONTROL_MENU + #if ENABLED(LED_CONTROL_MENU) + #define LED_COLOR_PRESETS // Enable the Preset Color menu option + //#define NEO2_COLOR_PRESETS // Enable a second NeoPixel Preset Color menu option + #if ENABLED(LED_COLOR_PRESETS) + #define LED_USER_PRESET_RED 255 // User defined RED value + #define LED_USER_PRESET_GREEN 128 // User defined GREEN value + #define LED_USER_PRESET_BLUE 0 // User defined BLUE value + #define LED_USER_PRESET_WHITE 255 // User defined WHITE value + #define LED_USER_PRESET_BRIGHTNESS 255 // User defined intensity + //#define LED_USER_PRESET_STARTUP // Have the printer display the user preset color on startup + #endif + #if ENABLED(NEO2_COLOR_PRESETS) + #define NEO2_USER_PRESET_RED 255 // User defined RED value + #define NEO2_USER_PRESET_GREEN 128 // User defined GREEN value + #define NEO2_USER_PRESET_BLUE 0 // User defined BLUE value + #define NEO2_USER_PRESET_WHITE 255 // User defined WHITE value + #define NEO2_USER_PRESET_BRIGHTNESS 255 // User defined intensity + //#define NEO2_USER_PRESET_STARTUP // Have the printer display the user preset color on startup for the second strip + #endif + #endif + #endif // LCD Print Progress options diff --git a/Marlin/src/feature/caselight.cpp b/Marlin/src/feature/caselight.cpp index 59832fd6ed..57b2d0f83c 100644 --- a/Marlin/src/feature/caselight.cpp +++ b/Marlin/src/feature/caselight.cpp @@ -64,7 +64,17 @@ void CaseLight::update(const bool sflag) { #endif #if CASE_LIGHT_IS_COLOR_LED - leds.set_color(LEDColor(color.r, color.g, color.b OPTARG(HAS_WHITE_LED, color.w) OPTARG(NEOPIXEL_LED, n10ct))); + #if ENABLED(CASE_LIGHT_USE_NEOPIXEL) + if (on) + // Use current color of (NeoPixel) leds and new brightness level + leds.set_color(LEDColor(leds.color.r, leds.color.g, leds.color.b OPTARG(HAS_WHITE_LED, leds.color.w) OPTARG(NEOPIXEL_LED, n10ct))); + else + // Switch off leds + leds.set_off(); + #else + // Use CaseLight color (CASE_LIGHT_DEFAULT_COLOR) and new brightness level + leds.set_color(LEDColor(color.r, color.g, color.b OPTARG(HAS_WHITE_LED, color.w) OPTARG(NEOPIXEL_LED, n10ct))); + #endif #else // !CASE_LIGHT_IS_COLOR_LED #if CASELIGHT_USES_BRIGHTNESS diff --git a/Marlin/src/feature/caselight.h b/Marlin/src/feature/caselight.h index 2e85b59ef9..17e1222acb 100644 --- a/Marlin/src/feature/caselight.h +++ b/Marlin/src/feature/caselight.h @@ -27,10 +27,6 @@ #include "leds/leds.h" // for LEDColor #endif -#if NONE(CASE_LIGHT_NO_BRIGHTNESS, CASE_LIGHT_IS_COLOR_LED) || ENABLED(CASE_LIGHT_USE_NEOPIXEL) - #define CASELIGHT_USES_BRIGHTNESS 1 -#endif - class CaseLight { public: static bool on; diff --git a/Marlin/src/feature/leds/leds.cpp b/Marlin/src/feature/leds/leds.cpp index 17d790b8cc..715f51f442 100644 --- a/Marlin/src/feature/leds/leds.cpp +++ b/Marlin/src/feature/leds/leds.cpp @@ -42,7 +42,7 @@ #include "pca9533.h" #endif -#if ENABLED(CASE_LIGHT_USE_RGB_LED) +#if EITHER(CASE_LIGHT_USE_RGB_LED, CASE_LIGHT_USE_NEOPIXEL) #include "../../feature/caselight.h" #endif @@ -95,6 +95,10 @@ void LEDLights::set_color(const LEDColor &incol #endif #endif + #if BOTH(CASE_LIGHT_MENU, CASE_LIGHT_USE_NEOPIXEL) + // Update brightness only if caselight is ON or switching leds off + if (caselight.on || incol.is_off()) + #endif neo.set_brightness(incol.i); #if ENABLED(NEOPIXEL_IS_SEQUENTIAL) @@ -106,6 +110,10 @@ void LEDLights::set_color(const LEDColor &incol } #endif + #if BOTH(CASE_LIGHT_MENU, CASE_LIGHT_USE_NEOPIXEL) + // Update color only if caselight is ON or switching leds off + if (caselight.on || incol.is_off()) + #endif neo.set_color(neocolor); #endif @@ -150,7 +158,7 @@ void LEDLights::set_color(const LEDColor &incol void LEDLights::toggle() { if (lights_on) set_off(); else update(); } #endif -#ifdef LED_BACKLIGHT_TIMEOUT +#if LED_POWEROFF_TIMEOUT > 0 millis_t LEDLights::led_off_time; // = 0 diff --git a/Marlin/src/feature/leds/leds.h b/Marlin/src/feature/leds/leds.h index 7110a9ba82..bce9052424 100644 --- a/Marlin/src/feature/leds/leds.h +++ b/Marlin/src/feature/leds/leds.h @@ -157,12 +157,12 @@ public: static void update() { set_color(color); } #endif - #ifdef LED_BACKLIGHT_TIMEOUT + #if LED_POWEROFF_TIMEOUT > 0 private: static millis_t led_off_time; public: static void reset_timeout(const millis_t &ms) { - led_off_time = ms + LED_BACKLIGHT_TIMEOUT; + led_off_time = ms + LED_POWEROFF_TIMEOUT; if (!lights_on) update(); } static void update_timeout(const bool power_on); diff --git a/Marlin/src/feature/leds/neopixel.h b/Marlin/src/feature/leds/neopixel.h index ae75316b8f..1a38ed1a19 100644 --- a/Marlin/src/feature/leds/neopixel.h +++ b/Marlin/src/feature/leds/neopixel.h @@ -25,8 +25,6 @@ * NeoPixel support */ -#define MAX_NEOPIXELS 127 - #ifndef _NEOPIXEL_INCLUDE_ #error "Always include 'leds.h' and not 'neopixel.h' directly." #endif @@ -68,7 +66,7 @@ // Types // ------------------------ -typedef IF<(MAX_NEOPIXELS > 127), int16_t, int8_t>::type pixel_index_t; +typedef IF<(TERN0(NEOPIXEL_LED, NEOPIXEL_PIXELS > 127)), int16_t, int8_t>::type pixel_index_t; // ------------------------ // Classes diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index d044a0e681..5444841db3 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -78,8 +78,8 @@ // This helps to implement HAS_ADC_BUTTONS menus #define REVERSE_MENU_DIRECTION - #define ENCODER_PULSES_PER_STEP 1 - #define ENCODER_STEPS_PER_MENU_ITEM 1 + #define STD_ENCODER_PULSES_PER_STEP 1 + #define STD_ENCODER_STEPS_PER_MENU_ITEM 1 #define ENCODER_FEEDRATE_DEADZONE 2 #elif ENABLED(ZONESTAR_12864LCD) @@ -97,7 +97,7 @@ #elif ENABLED(RADDS_DISPLAY) #define IS_ULTIPANEL 1 - #define ENCODER_PULSES_PER_STEP 2 + #define STD_ENCODER_PULSES_PER_STEP 2 #elif ANY(miniVIKI, VIKI2, WYH_L12864, ELB_FULL_GRAPHIC_CONTROLLER, AZSMZ_12864) @@ -158,44 +158,19 @@ #define IS_RRD_SC 1 #define U8GLIB_SH1106 - #define LED_CONTROL_MENU - #define NEOPIXEL_LED - #undef NEOPIXEL_TYPE - #define NEOPIXEL_TYPE NEO_RGB - #if NEOPIXEL_PIXELS < 3 - #undef NEOPIXELS_PIXELS - #define NEOPIXEL_PIXELS 3 - #endif #ifndef NEOPIXEL_BRIGHTNESS #define NEOPIXEL_BRIGHTNESS 127 #endif - #if ENABLED(PSU_CONTROL) - #define LED_BACKLIGHT_TIMEOUT 10000 - #endif - #elif ANY(FYSETC_MINI_12864_X_X, FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0, FYSETC_MINI_12864_2_1, FYSETC_GENERIC_12864_1_1) #define FYSETC_MINI_12864 #define DOGLCD #define IS_ULTIPANEL 1 #define LED_COLORS_REDUCE_GREEN - #if ENABLED(PSU_CONTROL) && EITHER(FYSETC_MINI_12864_2_0, FYSETC_MINI_12864_2_1) - #define LED_BACKLIGHT_TIMEOUT 10000 - #endif // Require LED backlighting enabled - #if EITHER(FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0) - #define RGB_LED - #elif ENABLED(FYSETC_MINI_12864_2_1) - #define LED_CONTROL_MENU - #define NEOPIXEL_LED - #undef NEOPIXEL_TYPE - #define NEOPIXEL_TYPE NEO_RGB - #if NEOPIXEL_PIXELS < 3 - #undef NEOPIXELS_PIXELS - #define NEOPIXEL_PIXELS 3 - #endif + #if ENABLED(FYSETC_MINI_12864_2_1) #ifndef NEOPIXEL_BRIGHTNESS #define NEOPIXEL_BRIGHTNESS 127 #endif @@ -207,8 +182,8 @@ #define IS_ULTIPANEL 1 #define U8GLIB_SSD1309 #define LCD_RESET_PIN LCD_PINS_D6 // This controller need a reset pin - #define ENCODER_PULSES_PER_STEP 4 - #define ENCODER_STEPS_PER_MENU_ITEM 1 + #define STD_ENCODER_PULSES_PER_STEP 4 + #define STD_ENCODER_STEPS_PER_MENU_ITEM 1 #ifndef PCA9632 #define PCA9632 #endif @@ -305,8 +280,8 @@ #define PCA9632_BUZZER #define PCA9632_BUZZER_DATA { 0x09, 0x02 } - #define ENCODER_PULSES_PER_STEP 1 // Overlord uses buttons - #define ENCODER_STEPS_PER_MENU_ITEM 1 + #define STD_ENCODER_PULSES_PER_STEP 1 // Overlord uses buttons + #define STD_ENCODER_STEPS_PER_MENU_ITEM 1 #endif // 128x64 I2C OLED LCDs - SSD1306/SSD1309/SH1106 diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index 9c3fe6bfd3..7b628d448e 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -618,6 +618,8 @@ #if ANY(BLINKM, RGB_LED, RGBW_LED, PCA9632, PCA9533, NEOPIXEL_LED) #define HAS_COLOR_LEDS 1 +#else + #undef LED_POWEROFF_TIMEOUT #endif #if ALL(HAS_RESUME_CONTINUE, PRINTER_EVENT_LEDS, SDSUPPORT) #define HAS_LEDS_OFF_FLAG 1 @@ -738,9 +740,6 @@ #endif #if EITHER(FYSETC_MINI_12864_2_1, FYSETC_242_OLED_12864) - #define LED_CONTROL_MENU - #define LED_USER_PRESET_STARTUP - #define LED_COLOR_PRESETS #ifndef LED_USER_PRESET_GREEN #define LED_USER_PRESET_GREEN 128 #endif @@ -981,6 +980,11 @@ #endif #endif +// Flags for Case Light having a brightness property +#if ENABLED(CASE_LIGHT_ENABLE) && (NONE(CASE_LIGHT_NO_BRIGHTNESS, CASE_LIGHT_IS_COLOR_LED) || ENABLED(CASE_LIGHT_USE_NEOPIXEL)) + #define CASELIGHT_USES_BRIGHTNESS 1 +#endif + // Flag whether least_squares_fit.cpp is used #if ANY(AUTO_BED_LEVELING_UBL, AUTO_BED_LEVELING_LINEAR, Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) #define NEED_LSF 1 diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index a8eb7614ff..7598dc3287 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2334,17 +2334,31 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #endif /** - * LED Control Menu + * FYSETC LCD Requirements */ -#if ENABLED(LED_CONTROL_MENU) && !HAS_COLOR_LEDS - #error "LED_CONTROL_MENU requires BLINKM, RGB_LED, RGBW_LED, PCA9533, PCA9632, or NEOPIXEL_LED." +#if EITHER(FYSETC_242_OLED_12864, FYSETC_MINI_12864_2_1) + #ifndef NEO_RGB + #define NEO_RGB 123 + #define FAUX_RGB 1 + #endif + #if defined(NEOPIXEL_TYPE) && NEOPIXEL_TYPE != NEO_RGB + #error "Your FYSETC Mini Panel requires NEOPIXEL_TYPE to be NEO_RGB." + #elif defined(NEOPIXEL_PIXELS) && NEOPIXEL_PIXELS < 3 + #error "Your FYSETC Mini Panel requires NEOPIXEL_PIXELS >= 3." + #endif + #if FAUX_RGB + #undef NEO_RGB + #undef FAUX_RGB + #endif +#elif EITHER(FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0) && !DISABLED(RGB_LED) + #error "Your FYSETC Mini Panel requires RGB_LED." #endif /** - * LED Backlight Timeout + * LED Control Menu requirements */ -#if defined(LED_BACKLIGHT_TIMEOUT) && !(ENABLED(PSU_CONTROL) && ANY(FYSETC_MINI_12864_2_0, FYSETC_MINI_12864_2_1, FYSETC_242_OLED_12864)) - #error "LED_BACKLIGHT_TIMEOUT requires a FYSETC Mini Panel and a Power Switch." +#if ENABLED(LED_CONTROL_MENU) && !HAS_COLOR_LEDS + #error "LED_CONTROL_MENU requires BLINKM, RGB_LED, RGBW_LED, PCA9533, PCA9632, or NEOPIXEL_LED." #endif /** @@ -2887,15 +2901,6 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #endif #endif -/** - * FYSETC Mini 12864 RGB backlighting required - */ -#if EITHER(FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0) && DISABLED(RGB_LED) - #error "RGB_LED is required for FYSETC_MINI_12864 1.2 and 2.0." -#elif EITHER(FYSETC_MINI_12864_2_0, FYSETC_MINI_12864_2_1) && DISABLED(LED_USER_PRESET_STARTUP) - #error "LED_USER_PRESET_STARTUP is required for FYSETC_MINI_12864 2.x displays." -#endif - /** * Check existing CS pins against enabled TMC SPI drivers. */ @@ -3415,8 +3420,8 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #error "A very large BLOCK_BUFFER_SIZE is not needed and takes longer to drain the buffer on pause / cancel." #endif -#if ENABLED(LED_CONTROL_MENU) && !IS_ULTIPANEL - #error "LED_CONTROL_MENU requires an LCD controller." +#if ENABLED(LED_CONTROL_MENU) && NONE(HAS_MARLINUI_MENU, DWIN_CREALITY_LCD_ENHANCED) + #error "LED_CONTROL_MENU requires an LCD controller that implements the menu." #endif #if ENABLED(CASE_LIGHT_USE_NEOPIXEL) && DISABLED(NEOPIXEL_LED) diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index f2b2339729..2fcff5fad9 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -563,3 +563,20 @@ #if HAS_LCD_CONTRAST && LCD_CONTRAST_MIN >= LCD_CONTRAST_MAX #warning "Contrast cannot be changed when LCD_CONTRAST_MIN >= LCD_CONTRAST_MAX." #endif + +/** + * FYSETC backlighting + */ +#if EITHER(FYSETC_242_OLED_12864, FYSETC_MINI_12864_2_1) && !ALL(NEOPIXEL_LED, LED_CONTROL_MENU, LED_USER_PRESET_STARTUP, LED_COLOR_PRESETS) + #warning "Your FYSETC Mini Panel works best with NEOPIXEL_LED, LED_CONTROL_MENU, LED_USER_PRESET_STARTUP, and LED_COLOR_PRESETS." +#endif + +#if EITHER(FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0) && DISABLED(RGB_LED) + #warning "Your FYSETC Mini Panel works best with RGB_LED." +#elif EITHER(FYSETC_MINI_12864_2_0, FYSETC_MINI_12864_2_1) && DISABLED(LED_USER_PRESET_STARTUP) + #warning "Your FYSETC Mini Panel works best with LED_USER_PRESET_STARTUP." +#endif + +#if EITHER(FYSETC_242_OLED_12864, FYSETC_MINI_12864) && BOTH(PSU_CONTROL, HAS_COLOR_LEDS) && !LED_POWEROFF_TIMEOUT + #warning "Your FYSETC display with PSU_CONTROL works best with LED_POWEROFF_TIMEOUT." +#endif diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp index 64e90c361e..58885e1c21 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp @@ -95,6 +95,14 @@ #include "printstats.h" #endif +#if ENABLED(CASE_LIGHT_MENU) + #include "../../../feature/caselight.h" +#endif + +#if ENABLED(LED_CONTROL_MENU) + #include "../../../feature/leds/leds.h" +#endif + #include #include #include @@ -249,6 +257,12 @@ MenuClass *MaxJerkMenu = nullptr; MenuClass *StepsMenu = nullptr; MenuClass *HotendPIDMenu = nullptr; MenuClass *BedPIDMenu = nullptr; +#if ENABLED(CASELIGHT_USES_BRIGHTNESS) + MenuClass *CaseLightMenu = nullptr; +#endif +#if ENABLED(LED_CONTROL_MENU) + MenuClass *LedControlMenu = nullptr; +#endif #if HAS_BED_PROBE MenuClass *ZOffsetWizMenu = nullptr; #endif @@ -991,7 +1005,7 @@ void Redraw_SD_List() { } else { DWIN_Draw_Rectangle(1, HMI_data.AlertBg_Color, 10, MBASE(3) - 10, DWIN_WIDTH - 10, MBASE(4)); - DWINUI::Draw_CenteredString(font16x32, HMI_data.AlertTxt_Color, MBASE(3), GET_TEXT_F(MSG_MEDIA_NOT_INSERTED)); + DWINUI::Draw_CenteredString(font12x24, HMI_data.AlertTxt_Color, MBASE(3), GET_TEXT_F(MSG_MEDIA_NOT_INSERTED)); } } @@ -1891,12 +1905,22 @@ void DWIN_StoreSettings(char *buff) { } void DWIN_LoadSettings(const char *buff) { - memcpy(&HMI_data, buff, _MIN(sizeof(HMI_data), eeprom_data_size)); + // (void *)-> Avoid Warning when save data different from uintX_t in HMI_data_t struct + memcpy((void *)&HMI_data, buff, _MIN(sizeof(HMI_data), eeprom_data_size)); dwin_zoffset = TERN0(HAS_BED_PROBE, probe.offset.z); if (HMI_data.Text_Color == HMI_data.Background_Color) DWIN_SetColorDefaults(); DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color); TERN_(PREVENT_COLD_EXTRUSION, ApplyExtMinT()); feedrate_percentage = 100; + #if BOTH(CASE_LIGHT_MENU, CASELIGHT_USES_BRIGHTNESS) + // Apply Case light brightness + caselight.brightness = HMI_data.CaseLight_Brightness; + caselight.update_brightness(); + #endif + #if BOTH(LED_CONTROL_MENU, HAS_COLOR_LEDS) + // Apply Led Color + leds.set_color(HMI_data.Led_Color); + #endif } void MarlinUI::kill_screen(FSTR_P const lcd_error, FSTR_P const lcd_component) { @@ -2288,6 +2312,41 @@ void SetPID(celsius_t t, heater_id_t h) { void SetBrightness() { SetIntOnClick(LCD_BRIGHTNESS_MIN, LCD_BRIGHTNESS_MAX, ui.brightness, nullptr, LiveBrightness); } #endif +#if ENABLED(CASE_LIGHT_MENU) + void SetCaseLight() { + caselight.on = !caselight.on; + caselight.update_enabled(); + Draw_Chkb_Line(CurrentMenu->line(), caselight.on); + DWIN_UpdateLCD(); + } + #if ENABLED(CASELIGHT_USES_BRIGHTNESS) + void LiveCaseLightBrightness() { HMI_data.CaseLight_Brightness = caselight.brightness = HMI_value.Value; caselight.update_brightness(); } + void SetCaseLightBrightness() { SetIntOnClick(0, 255, caselight.brightness, nullptr, LiveCaseLightBrightness); } + #endif +#endif + +#if ENABLED(LED_CONTROL_MENU) + #if !BOTH(CASE_LIGHT_MENU, CASE_LIGHT_USE_NEOPIXEL) + void SetLedStatus() { + leds.toggle(); + Draw_Chkb_Line(CurrentMenu->line(), leds.lights_on); + DWIN_UpdateLCD(); + } + #endif + #if ENABLED(HAS_COLOR_LEDS) + void LiveLedColorR() { leds.color.r = HMI_value.Value; HMI_data.Led_Color = leds.color; leds.update(); } + void SetLedColorR() { SetIntOnClick(0, 255, leds.color.r, nullptr, LiveLedColorR); } + void LiveLedColorG() { leds.color.g = HMI_value.Value; HMI_data.Led_Color = leds.color; leds.update(); } + void SetLedColorG() { SetIntOnClick(0, 255, leds.color.g, nullptr, LiveLedColorG); } + void LiveLedColorB() { leds.color.b = HMI_value.Value; HMI_data.Led_Color = leds.color; leds.update(); } + void SetLedColorB() { SetIntOnClick(0, 255, leds.color.b, nullptr, LiveLedColorB); } + #if HAS_WHITE_LED + void LiveLedColorW() { leds.color.w = HMI_value.Value; HMI_data.Led_Color = leds.color; leds.update(); } + void SetLedColorW() { SetIntOnClick(0, 255, leds.color.w, nullptr, LiveLedColorW); } + #endif + #endif +#endif + #if ENABLED(SOUND_MENU_ITEM) void SetEnableSound() { ui.buzzer_enabled = !ui.buzzer_enabled; @@ -2774,6 +2833,16 @@ void onDrawLanguage(MenuItemClass* menuitem, int8_t line) { void onDrawPwrLossR(MenuItemClass* menuitem, int8_t line) { onDrawChkbMenu(menuitem, line, recovery.enabled); } #endif +#if ENABLED(CASE_LIGHT_MENU) + void onDrawCaseLight(MenuItemClass* menuitem, int8_t line) { onDrawChkbMenu(menuitem, line, caselight.on); } +#endif + +#if ENABLED(LED_CONTROL_MENU) + #if !BOTH(CASE_LIGHT_MENU, CASE_LIGHT_USE_NEOPIXEL) + void onDrawLedStatus(MenuItemClass* menuitem, int8_t line) { onDrawChkbMenu(menuitem, line, leds.lights_on); } + #endif +#endif + #if ENABLED(SOUND_MENU_ITEM) void onDrawEnableSound(MenuItemClass* menuitem, int8_t line) { onDrawChkbMenu(menuitem, line, ui.buzzer_enabled); } #endif @@ -3265,8 +3334,18 @@ void Draw_Control_Menu() { if (CurrentMenu != ControlMenu) { CurrentMenu = ControlMenu; SetMenuTitle({103, 1, 28, 14}, GET_TEXT_F(MSG_CONTROL)); - DWINUI::MenuItemsPrepare(9); + DWINUI::MenuItemsPrepare(11); MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu); + #if ENABLED(CASE_LIGHT_MENU) + #if ENABLED(CASELIGHT_USES_BRIGHTNESS) + MENU_ITEM(ICON_CaseLight, GET_TEXT_F(MSG_CASE_LIGHT), onDrawSubMenu, Draw_CaseLight_Menu); + #else + MENU_ITEM(ICON_CaseLight, GET_TEXT_F(MSG_CASE_LIGHT), onDrawCaseLight, SetCaseLight); + #endif + #endif + #if ENABLED(LED_CONTROL_MENU) + MENU_ITEM(ICON_LedControl, GET_TEXT_F(MSG_LED_CONTROL), onDrawSubMenu, Draw_LedControl_Menu); + #endif MENU_ITEM(ICON_Temperature, GET_TEXT_F(MSG_TEMPERATURE), onDrawTempSubMenu, Draw_Temperature_Menu); MENU_ITEM(ICON_Motion, GET_TEXT_F(MSG_MOTION), onDrawMotionSubMenu, Draw_Motion_Menu); #if ENABLED(EEPROM_SETTINGS) @@ -3469,6 +3548,47 @@ void Draw_GetColor_Menu() { DWIN_Draw_Rectangle(1, *HMI_value.P_Int, 20, 315, DWIN_WIDTH - 20, 335); } +#if BOTH(CASE_LIGHT_MENU, CASELIGHT_USES_BRIGHTNESS) + void Draw_CaseLight_Menu() { + checkkey = Menu; + if (!CaseLightMenu) CaseLightMenu = new MenuClass(); + if (CurrentMenu != CaseLightMenu) { + CurrentMenu = CaseLightMenu; + SetMenuTitle({0}, GET_TEXT_F(MSG_CASE_LIGHT)); // TODO: Chinese, English "Case Light" JPG + DWINUI::MenuItemsPrepare(3); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu); + MENU_ITEM(ICON_CaseLight, GET_TEXT_F(MSG_CASE_LIGHT), onDrawCaseLight, SetCaseLight); + EDIT_ITEM(ICON_Brightness, GET_TEXT_F(MSG_CASE_LIGHT_BRIGHTNESS), onDrawPInt8Menu, SetCaseLightBrightness, &caselight.brightness); + } + CurrentMenu->draw(); + } +#endif + +#if ENABLED(LED_CONTROL_MENU) + void Draw_LedControl_Menu() { + checkkey = Menu; + if (!LedControlMenu) LedControlMenu = new MenuClass(); + if (CurrentMenu != LedControlMenu) { + CurrentMenu = LedControlMenu; + SetMenuTitle({0}, GET_TEXT_F(MSG_LED_CONTROL)); // TODO: Chinese, English "LED Control" JPG + DWINUI::MenuItemsPrepare(6); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu); + #if !BOTH(CASE_LIGHT_MENU, CASE_LIGHT_USE_NEOPIXEL) + MENU_ITEM(ICON_LedControl, GET_TEXT_F(MSG_LEDS), onDrawLedStatus, SetLedStatus); + #endif + #if (HAS_COLOR_LEDS) + EDIT_ITEM(ICON_LedControl, GET_TEXT_F(MSG_COLORS_RED), onDrawPInt8Menu, SetLedColorR, &leds.color.r); + EDIT_ITEM(ICON_LedControl, GET_TEXT_F(MSG_COLORS_GREEN), onDrawPInt8Menu, SetLedColorG, &leds.color.g); + EDIT_ITEM(ICON_LedControl, GET_TEXT_F(MSG_COLORS_BLUE), onDrawPInt8Menu, SetLedColorB, &leds.color.b); + #if ENABLED(HAS_WHITE_LED) + EDIT_ITEM(ICON_LedControl, GET_TEXT_F(MSG_COLORS_WHITE), onDrawPInt8Menu, SetLedColorW, &leds.color.w); + #endif + #endif + } + CurrentMenu->draw(); + } +#endif + void Draw_Tune_Menu() { checkkey = Menu; if (!TuneMenu) TuneMenu = new MenuClass(); @@ -3477,6 +3597,11 @@ void Draw_Tune_Menu() { SetMenuTitle({73, 2, 28, 12}, GET_TEXT_F(MSG_TUNE)); // TODO: Chinese, English "Tune" JPG DWINUI::MenuItemsPrepare(14); MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_PrintProcess); + #if ENABLED(CASE_LIGHT_MENU) + MENU_ITEM(ICON_CaseLight, GET_TEXT_F(MSG_CASE_LIGHT), onDrawCaseLight, SetCaseLight); + #elif ENABLED(LED_CONTROL_MENU) && DISABLED(CASE_LIGHT_USE_NEOPIXEL) + MENU_ITEM(ICON_LedControl, GET_TEXT_F(MSG_LEDS), onDrawLedStatus, SetLedStatus); + #endif EDIT_ITEM(ICON_Speed, GET_TEXT_F(MSG_SPEED), onDrawSpeedItem, SetSpeed, &feedrate_percentage); #if HAS_HOTEND HotendTargetItem = EDIT_ITEM(ICON_HotendTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_HOTEND), onDrawHotendTemp, SetHotendTemp, &thermalManager.temp_hotend[0].target); diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.h b/Marlin/src/lcd/e3v2/enhanced/dwin.h index f377732b41..bbbe00aa9f 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwin.h @@ -223,6 +223,12 @@ void Draw_Tramming_Menu(); #endif void Draw_SelectColors_Menu(); void Draw_GetColor_Menu(); +#if BOTH(CASE_LIGHT_MENU, CASELIGHT_USES_BRIGHTNESS) + void Draw_CaseLight_Menu(); +#endif +#if ENABLED(LED_CONTROL_MENU) + void Draw_LedControl_Menu(); +#endif void Draw_Tune_Menu(); void Draw_Motion_Menu(); #if ENABLED(ADVANCED_PAUSE_FEATURE) diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_defines.h b/Marlin/src/lcd/e3v2/enhanced/dwin_defines.h index b92d3d3b85..907177ab32 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwin_defines.h @@ -30,6 +30,9 @@ #include "../../../core/types.h" #include "../common/dwin_color.h" +#if ENABLED(LED_CONTROL_MENU) + #include "../../../feature/leds/leds.h" +#endif #define Def_Background_Color RGB( 1, 12, 8) #define Def_Cursor_color RGB(20, 49, 31) @@ -53,8 +56,15 @@ #define HAS_ESDIAG 1 #define DEFAULT_LCD_BRIGHTNESS 127 +#if ENABLED(LED_CONTROL_MENU, HAS_COLOR_LEDS) + #define Def_Leds_Color LEDColorWhite() +#endif +#if ENABLED(CASELIGHT_USES_BRIGHTNESS) + #define Def_CaseLight_Brightness 255 +#endif + typedef struct { -// Color settings + // Color settings uint16_t Background_Color = Def_Background_Color; uint16_t Cursor_color = Def_Cursor_color; uint16_t TitleBg_color = Def_TitleBg_color; @@ -73,19 +83,27 @@ typedef struct { uint16_t Barfill_Color = Def_Barfill_Color; uint16_t Indicator_Color = Def_Indicator_Color; uint16_t Coordinate_Color = Def_Coordinate_Color; -// - #if defined(PREHEAT_1_TEMP_HOTEND) && HAS_HOTEND + // Temperatures + #if HAS_HOTEND && defined(PREHEAT_1_TEMP_HOTEND) int16_t HotendPidT = PREHEAT_1_TEMP_HOTEND; #endif - #if defined(PREHEAT_1_TEMP_BED) && HAS_HEATED_BED + #if HAS_HEATED_BED && defined(PREHEAT_1_TEMP_BED) int16_t BedPidT = PREHEAT_1_TEMP_BED; #endif - #if ANY(HAS_HOTEND, HAS_HEATED_BED) + #if HAS_HOTEND || HAS_HEATED_BED int16_t PidCycles = 10; #endif #if ENABLED(PREVENT_COLD_EXTRUSION) int16_t ExtMinT = EXTRUDE_MINTEMP; #endif + // Led + #if BOTH(LED_CONTROL_MENU, HAS_COLOR_LEDS) + LEDColor Led_Color = Def_Leds_Color; + #endif + // Case Light + #if ENABLED(CASELIGHT_USES_BRIGHTNESS) + uint8_t CaseLight_Brightness = Def_CaseLight_Brightness; + #endif } HMI_data_t; static constexpr size_t eeprom_data_size = 64; diff --git a/Marlin/src/lcd/e3v2/enhanced/dwinui.h b/Marlin/src/lcd/e3v2/enhanced/dwinui.h index cb7720834c..4f0dadc909 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwinui.h +++ b/Marlin/src/lcd/e3v2/enhanced/dwinui.h @@ -76,6 +76,8 @@ #define ICON_Scolor ICON_MaxSpeed #define ICON_SetCustomPreheat ICON_SetEndTemp #define ICON_Sound ICON_Cool +#define ICON_CaseLight ICON_Motion +#define ICON_LedControl ICON_Motion // Extended and default UI Colors #define Color_Black 0 diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index bb69aad432..d8d161701f 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -609,6 +609,7 @@ namespace Language_en { LSTR MSG_COLORS_RED = _UxGT("Red"); LSTR MSG_COLORS_GREEN = _UxGT("Green"); LSTR MSG_COLORS_BLUE = _UxGT("Blue"); + LSTR MSG_COLORS_WHITE = _UxGT("White"); LSTR MSG_UI_LANGUAGE = _UxGT("UI Language"); LSTR MSG_SOUND_ENABLE = _UxGT("Enable sound"); LSTR MSG_LOCKSCREEN = _UxGT("Lock Screen"); diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index f2fce1c8cd..dd90fba41b 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -24,7 +24,7 @@ #include "../MarlinCore.h" // for printingIsPaused -#ifdef LED_BACKLIGHT_TIMEOUT +#if LED_POWEROFF_TIMEOUT > 0 || BOTH(HAS_WIRED_LCD, PRINTER_EVENT_LEDS) #include "../feature/leds/leds.h" #endif @@ -277,7 +277,7 @@ void MarlinUI::init() { #include "../feature/power_monitor.h" #endif - #if ENABLED(PSU_CONTROL) && defined(LED_BACKLIGHT_TIMEOUT) + #if LED_POWEROFF_TIMEOUT > 0 #include "../feature/power.h" #endif @@ -676,7 +676,7 @@ void MarlinUI::init() { TERN_(HAS_MARLINUI_MENU, return_to_status()); // RED ALERT. RED ALERT. - #ifdef LED_BACKLIGHT_TIMEOUT + #if ENABLED(PRINTER_EVENT_LEDS) leds.set_color(LEDColorRed()); #ifdef NEOPIXEL_BKGD_INDEX_FIRST neo.set_background_color(255, 0, 0, 0); @@ -883,7 +883,7 @@ void MarlinUI::init() { static uint16_t max_display_update_time = 0; millis_t ms = millis(); - #if ENABLED(PSU_CONTROL) && defined(LED_BACKLIGHT_TIMEOUT) + #if LED_POWEROFF_TIMEOUT > 0 leds.update_timeout(powerManager.psu_on); #endif @@ -1034,7 +1034,7 @@ void MarlinUI::init() { refresh(LCDVIEW_REDRAW_NOW); - #if ENABLED(PSU_CONTROL) && defined(LED_BACKLIGHT_TIMEOUT) + #if LED_POWEROFF_TIMEOUT > 0 if (!powerManager.psu_on) leds.reset_timeout(ms); #endif } @@ -1699,13 +1699,13 @@ void MarlinUI::init() { refresh(); - #if HAS_WIRED_LCD || defined(LED_BACKLIGHT_TIMEOUT) + #if HAS_WIRED_LCD || LED_POWEROFF_TIMEOUT > 0 const millis_t ms = millis(); #endif TERN_(HAS_WIRED_LCD, next_lcd_update_ms = ms + LCD_UPDATE_INTERVAL); // Delay LCD update for SD activity - #ifdef LED_BACKLIGHT_TIMEOUT + #if LED_POWEROFF_TIMEOUT > 0 leds.reset_timeout(ms); #endif } diff --git a/buildroot/tests/DUE b/buildroot/tests/DUE index 37678501e4..5810b73bdc 100755 --- a/buildroot/tests/DUE +++ b/buildroot/tests/DUE @@ -17,7 +17,7 @@ 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 \ EEPROM_SETTINGS SDSUPPORT BINARY_FILE_TRANSFER \ - BLINKM PCA9533 PCA9632 RGB_LED RGB_LED_R_PIN RGB_LED_G_PIN RGB_LED_B_PIN LED_CONTROL_MENU \ + BLINKM PCA9533 PCA9632 RGB_LED RGB_LED_R_PIN RGB_LED_G_PIN RGB_LED_B_PIN \ NEOPIXEL_LED NEOPIXEL_PIN CASE_LIGHT_ENABLE CASE_LIGHT_USE_NEOPIXEL CASE_LIGHT_USE_RGB_LED CASE_LIGHT_MENU \ NOZZLE_PARK_FEATURE ADVANCED_PAUSE_FEATURE FILAMENT_RUNOUT_DISTANCE_MM FILAMENT_RUNOUT_SENSOR \ AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \ diff --git a/buildroot/tests/LPC1768 b/buildroot/tests/LPC1768 index 92ba286693..9fb7479d99 100755 --- a/buildroot/tests/LPC1768 +++ b/buildroot/tests/LPC1768 @@ -14,8 +14,8 @@ set -e #exec_test $1 $2 "Default Configuration" "$3" restore_configs -opt_set MOTHERBOARD BOARD_RAMPS_14_RE_ARM_EFB SERIAL_PORT_3 3 \ - NEOPIXEL_TYPE NEO_GRB 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_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 exec_test $1 $2 "ReARM EFB VIKI2, SDSUPPORT, 2 Serial ports (USB CDC + UART0), NeoPixel" "$3" From e4658c321fb722470889796ae76930a067d59f33 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 2 Feb 2022 00:20:21 +0000 Subject: [PATCH 431/532] [cron] Bump distribution date (2022-02-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 4a2eb6696d..8950b0a38b 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 "2022-02-01" +//#define STRING_DISTRIBUTION_DATE "2022-02-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 1293c1ec6e..916bba56ad 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 "2022-02-01" + #define STRING_DISTRIBUTION_DATE "2022-02-02" #endif /** From 1636325b722f9618a9b65719d39c464bc7a3465d Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Sat, 5 Feb 2022 05:24:38 +1300 Subject: [PATCH 432/532] =?UTF-8?q?=F0=9F=90=9B=20Creality=20v4=20cleanup,?= =?UTF-8?q?=20pin=20correction=20(#23666)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/boards.h | 47 +++++++++++----------- Marlin/src/pins/pins.h | 4 +- Marlin/src/pins/stm32f1/pins_CREALITY_V4.h | 2 - 3 files changed, 26 insertions(+), 27 deletions(-) diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index bcedc2059e..8d3a53258a 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -337,29 +337,30 @@ #define BOARD_CHITU3D_V5 4037 // Chitu3D TronXY X5SA V5 Board #define BOARD_CHITU3D_V6 4038 // Chitu3D TronXY X5SA V6 Board #define BOARD_CHITU3D_V9 4039 // Chitu3D TronXY X5SA V9 Board -#define BOARD_CREALITY_V4 4040 // Creality v4.x (STM32F103RE) -#define BOARD_CREALITY_V423 4041 // Creality v4.2.3 (STM32F103RE) -#define BOARD_CREALITY_V427 4042 // Creality v4.2.7 (STM32F103RE) -#define BOARD_CREALITY_V4210 4043 // Creality v4.2.10 (STM32F103RE) as found in the CR-30 -#define BOARD_CREALITY_V431 4044 // Creality v4.3.1 (STM32F103RE) -#define BOARD_CREALITY_V431_A 4045 // Creality v4.3.1a (STM32F103RE) -#define BOARD_CREALITY_V431_B 4046 // Creality v4.3.1b (STM32F103RE) -#define BOARD_CREALITY_V431_C 4047 // Creality v4.3.1c (STM32F103RE) -#define BOARD_CREALITY_V431_D 4048 // Creality v4.3.1d (STM32F103RE) -#define BOARD_CREALITY_V452 4049 // Creality v4.5.2 (STM32F103RE) -#define BOARD_CREALITY_V453 4050 // Creality v4.5.3 (STM32F103RE) -#define BOARD_CREALITY_V24S1 4051 // Creality v2.4.S1 (STM32F103RE) v101 as found in the Ender 7 -#define BOARD_CREALITY_V24S1_301 4052 // Creality v2.4.S1_301 (STM32F103RCT) as found in the Ender 3 S1 -#define BOARD_TRIGORILLA_PRO 4053 // Trigorilla Pro (STM32F103ZE) -#define BOARD_FLY_MINI 4054 // FLYmaker FLY MINI (STM32F103RC) -#define BOARD_FLSUN_HISPEED 4055 // FLSUN HiSpeedV1 (STM32F103VE) -#define BOARD_BEAST 4056 // STM32F103RE Libmaple-based controller -#define BOARD_MINGDA_MPX_ARM_MINI 4057 // STM32F103ZE Mingda MD-16 -#define BOARD_GTM32_PRO_VD 4058 // STM32F103VE controller -#define BOARD_ZONESTAR_ZM3E2 4059 // Zonestar ZM3E2 (STM32F103RC) -#define BOARD_ZONESTAR_ZM3E4 4060 // Zonestar ZM3E4 V1 (STM32F103VC) -#define BOARD_ZONESTAR_ZM3E4V2 4061 // Zonestar ZM3E4 V2 (STM32F103VC) -#define BOARD_ERYONE_ERY32_MINI 4062 // Eryone Ery32 mini (STM32F103VE) +#define BOARD_CREALITY_V4 4040 // Creality v4.x (STM32F103RC / STM32F103RE) +#define BOARD_CREALITY_V422 4041 // Creality v4.2.2 (STM32F103RC / STM32F103RE) +#define BOARD_CREALITY_V423 4042 // Creality v4.2.3 (STM32F103RC / STM32F103RE) +#define BOARD_CREALITY_V427 4043 // Creality v4.2.7 (STM32F103RC / STM32F103RE) +#define BOARD_CREALITY_V4210 4044 // Creality v4.2.10 (STM32F103RC / STM32F103RE) as found in the CR-30 +#define BOARD_CREALITY_V431 4045 // Creality v4.3.1 (STM32F103RC / STM32F103RE) +#define BOARD_CREALITY_V431_A 4046 // Creality v4.3.1a (STM32F103RC / STM32F103RE) +#define BOARD_CREALITY_V431_B 4047 // Creality v4.3.1b (STM32F103RC / STM32F103RE) +#define BOARD_CREALITY_V431_C 4048 // Creality v4.3.1c (STM32F103RC / STM32F103RE) +#define BOARD_CREALITY_V431_D 4049 // Creality v4.3.1d (STM32F103RC / STM32F103RE) +#define BOARD_CREALITY_V452 4050 // Creality v4.5.2 (STM32F103RC / STM32F103RE) +#define BOARD_CREALITY_V453 4051 // Creality v4.5.3 (STM32F103RC / STM32F103RE) +#define BOARD_CREALITY_V24S1 4052 // Creality v2.4.S1 (STM32F103RC / STM32F103RE) v101 as found in the Ender 7 +#define BOARD_CREALITY_V24S1_301 4053 // Creality v2.4.S1_301 (STM32F103RC / STM32F103RE) as found in the Ender 3 S1 +#define BOARD_TRIGORILLA_PRO 4054 // Trigorilla Pro (STM32F103ZE) +#define BOARD_FLY_MINI 4055 // FLYmaker FLY MINI (STM32F103RC) +#define BOARD_FLSUN_HISPEED 4056 // FLSUN HiSpeedV1 (STM32F103VE) +#define BOARD_BEAST 4057 // STM32F103RE Libmaple-based controller +#define BOARD_MINGDA_MPX_ARM_MINI 4058 // STM32F103ZE Mingda MD-16 +#define BOARD_GTM32_PRO_VD 4059 // STM32F103VE controller +#define BOARD_ZONESTAR_ZM3E2 4060 // Zonestar ZM3E2 (STM32F103RC) +#define BOARD_ZONESTAR_ZM3E4 4061 // Zonestar ZM3E4 V1 (STM32F103VC) +#define BOARD_ZONESTAR_ZM3E4V2 4062 // Zonestar ZM3E4 V2 (STM32F103VC) +#define BOARD_ERYONE_ERY32_MINI 4063 // Eryone Ery32 mini (STM32F103VE) // // ARM Cortex-M4F diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 4521f6836e..07acd0b122 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -557,12 +557,12 @@ #include "stm32f1/pins_CHITU3D_V6.h" // STM32F1 env:chitu_f103 env:chitu_f103_maple #elif MB(CHITU3D_V9) #include "stm32f1/pins_CHITU3D_V9.h" // STM32F1 env:chitu_f103 env:chitu_f103_maple -#elif MB(CREALITY_V4) +#elif MB(CREALITY_V4, CREALITY_V422) #include "stm32f1/pins_CREALITY_V4.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(CREALITY_V4210) #include "stm32f1/pins_CREALITY_V4210.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(CREALITY_V423) - #include "stm32f1/pins_CREALITY_V423.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer + #include "stm32f1/pins_CREALITY_V423.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer #elif MB(CREALITY_V427) #include "stm32f1/pins_CREALITY_V427.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(CREALITY_V431, CREALITY_V431_A, CREALITY_V431_B, CREALITY_V431_C, CREALITY_V431_D) diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h index 3ed6888c38..6122206d6a 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h @@ -152,8 +152,6 @@ // #define SD_DETECT_PIN PC7 #define SDCARD_CONNECTION ONBOARD -#define ONBOARD_SPI_DEVICE 1 -#define ONBOARD_SD_CS_PIN PA4 // SDSS #define SDIO_SUPPORT #define NO_SD_HOST_DRIVE // This board's SD is only seen by the printer From 8e8409ed67ba99fef35d21d09b2618e0859f3895 Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Fri, 4 Feb 2022 10:45:34 -0600 Subject: [PATCH 433/532] =?UTF-8?q?=F0=9F=94=A7=20Sanity-check=20AVR=20D9?= =?UTF-8?q?=20Fan=20PWM=20/=20SPEAKER=20Timer2=20(#23672)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/AVR/inc/SanityCheck.h | 10 +++++++++- Marlin/src/inc/SanityCheck.h | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Marlin/src/HAL/AVR/inc/SanityCheck.h b/Marlin/src/HAL/AVR/inc/SanityCheck.h index 331d0b0464..5c1f01a8f4 100644 --- a/Marlin/src/HAL/AVR/inc/SanityCheck.h +++ b/Marlin/src/HAL/AVR/inc/SanityCheck.h @@ -29,7 +29,15 @@ * Checks for FAST PWM */ #if ALL(FAST_PWM_FAN, USE_OCR2A_AS_TOP, HAS_TCCR2) - #error "USE_OCR2A_AS_TOP does not apply to devices with a single output TIMER2" + #error "USE_OCR2A_AS_TOP does not apply to devices with a single output TIMER2." +#endif + +/** + * Checks for SOFT PWM + */ +#if HAS_FAN0 && FAN_PIN == 9 && DISABLED(FAN_SOFT_PWM) && ENABLED(SPEAKER) + #error "FAN_PIN 9 Hardware PWM uses Timer 2 which conflicts with Arduino AVR Tone Timer (for SPEAKER)." + #error "Disable SPEAKER or enable FAN_SOFT_PWM." #endif /** diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 7598dc3287..85070c7558 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2018,7 +2018,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #if CONTROLLER_FAN_PIN == FAN_PIN #error "You cannot set CONTROLLER_FAN_PIN equal to FAN_PIN." #elif ENABLED(FAN_SOFT_PWM_REQUIRED) && DISABLED(FAN_SOFT_PWM) - #error "FAN_SOFT_PWM is required. Enable it to continue." + #error "FAN_SOFT_PWM is required for your board. Enable it to continue." #endif #endif From d5d3f28bfe0c58a35fab181fe09d81dc23561919 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 4 Feb 2022 18:04:39 +0000 Subject: [PATCH 434/532] [cron] Bump distribution date (2022-02-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 8950b0a38b..1b3c902da6 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 "2022-02-02" +//#define STRING_DISTRIBUTION_DATE "2022-02-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 916bba56ad..a73b6b1a46 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 "2022-02-02" + #define STRING_DISTRIBUTION_DATE "2022-02-04" #endif /** From f2a83bc245939e9041e542ade1f651fa80ddf224 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 4 Feb 2022 12:39:30 -0600 Subject: [PATCH 435/532] =?UTF-8?q?=F0=9F=92=A1=20Comment=20variant=20time?= =?UTF-8?q?rs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/STM32/timers.cpp | 4 ++-- .../variants/MARLIN_ARTILLERY_RUBY/variant.h | 4 ++-- .../variants/MARLIN_BIGTREE_BTT002/variant.h | 6 +++--- .../variants/MARLIN_BIGTREE_E3_RRF/variant.h | 6 +++--- .../variants/MARLIN_BIGTREE_GTR_V1/variant.h | 6 +++--- .../MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.h | 6 +++--- .../variants/MARLIN_BIGTREE_OCTOPUS_V1/variant.h | 6 +++--- .../variants/MARLIN_BIGTREE_SKR_PRO_11/variant.h | 6 +++--- .../PlatformIO/variants/MARLIN_BTT_SKR_SE_BX/variant.h | 6 +++--- .../share/PlatformIO/variants/MARLIN_F103Rx/variant.h | 4 ++-- .../PlatformIO/variants/MARLIN_F103VE_LONGER/variant.h | 6 +++--- .../share/PlatformIO/variants/MARLIN_F103Vx/variant.h | 4 ++-- .../share/PlatformIO/variants/MARLIN_F103Zx/variant.h | 4 ++-- .../share/PlatformIO/variants/MARLIN_F407VE/variant.h | 4 ++-- .../share/PlatformIO/variants/MARLIN_F446VE/variant.h | 6 +++--- .../share/PlatformIO/variants/MARLIN_F4x7Vx/variant.h | 6 +++--- .../PlatformIO/variants/MARLIN_FLY_F407ZG/variant.h | 4 ++-- .../variants/MARLIN_FYSETC_CHEETAH_V20/variant.h | 10 ++++------ .../PlatformIO/variants/MARLIN_FYSETC_S6/variant.h | 6 +++--- .../share/PlatformIO/variants/MARLIN_LERDGE/variant.h | 2 +- .../variants/MARLIN_TH3D_EZBOARD_V2/variant.h | 4 ++-- 21 files changed, 54 insertions(+), 56 deletions(-) diff --git a/Marlin/src/HAL/STM32/timers.cpp b/Marlin/src/HAL/STM32/timers.cpp index fe27ca1016..a1e3372bbb 100644 --- a/Marlin/src/HAL/STM32/timers.cpp +++ b/Marlin/src/HAL/STM32/timers.cpp @@ -74,10 +74,10 @@ #define MCU_STEP_TIMER 4 #define MCU_TEMP_TIMER 2 #elif defined(STM32F401xC) || defined(STM32F401xE) - #define MCU_STEP_TIMER 9 + #define MCU_STEP_TIMER 9 // STM32F401 has no TIM6, TIM7, or TIM8 #define MCU_TEMP_TIMER 10 #elif defined(STM32F4xx) || defined(STM32F7xx) || defined(STM32H7xx) - #define MCU_STEP_TIMER 6 // STM32F401 has no TIM6, TIM7, or TIM8 + #define MCU_STEP_TIMER 6 #define MCU_TEMP_TIMER 14 // TIM7 is consumed by Software Serial if used. #endif diff --git a/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/variant.h index 0c66ae89b8..ca7a53d782 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_ARTILLERY_RUBY/variant.h @@ -107,8 +107,8 @@ extern "C" { // TIM9 - STEP_TIMER // TIM10 - TEMP_TIMER // TIM11 - -#define TIMER_SERVO TIM2 -#define TIMER_TONE TIM5 +#define TIMER_SERVO TIM2 // TIMER_SERVO must be defined in this file +#define TIMER_TONE TIM5 // TIMER_TONE must be defined in this file // UART Definitions #define SERIAL_UART_INSTANCE 1 diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_BTT002/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_BTT002/variant.h index 5657450100..068d0b9ee5 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_BTT002/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_BTT002/variant.h @@ -245,9 +245,9 @@ extern "C" { // Timer Definitions // Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c -#define TIMER_TONE TIM7 -#define TIMER_SERVO TIM5 -#define TIMER_SERIAL TIM2 +#define TIMER_TONE TIM7 // TIMER_TONE must be defined in this file +#define TIMER_SERVO TIM5 // TIMER_SERVO must be defined in this file +#define TIMER_SERIAL TIM2 // TIMER_SERIAL must be defined in this file // UART Definitions // Define here Serial instance number to map on Serial generic name diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_E3_RRF/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_E3_RRF/variant.h index 646d635679..edc1c91c53 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_E3_RRF/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_E3_RRF/variant.h @@ -245,9 +245,9 @@ extern "C" { // Timer Definitions // Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c -#define TIMER_TONE TIM7 -#define TIMER_SERVO TIM5 -#define TIMER_SERIAL TIM8 +#define TIMER_TONE TIM7 // TIMER_TONE must be defined in this file +#define TIMER_SERVO TIM5 // TIMER_SERVO must be defined in this file +#define TIMER_SERIAL TIM8 // TIMER_SERIAL must be defined in this file // UART Definitions // Define here Serial instance number to map on Serial generic name 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 41e4641102..2c70693991 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_GTR_V1/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_GTR_V1/variant.h @@ -255,9 +255,9 @@ extern "C" { // Timer Definitions // Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c -#define TIMER_TONE TIM10 -#define TIMER_SERVO TIM5 -#define TIMER_SERIAL TIM7 +#define TIMER_TONE TIM10 // TIMER_TONE must be defined in this file +#define TIMER_SERVO TIM5 // TIMER_SERVO must be defined in this file +#define TIMER_SERIAL TIM7 // TIMER_SERIAL must be defined in this file // UART Definitions //#define ENABLE_HWSERIAL1 done automatically by the #define SERIAL_UART_INSTANCE below diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.h index 0147ece0ab..1870e77929 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_PRO_V1_F429/variant.h @@ -165,9 +165,9 @@ extern "C" { // Timer Definitions // Do not use timer used by PWM pin. See PinMap_PWM. -#define TIMER_TONE TIM6 -#define TIMER_SERVO TIM5 -#define TIMER_SERIAL TIM7 +#define TIMER_TONE TIM6 // TIMER_TONE must be defined in this file +#define TIMER_SERVO TIM5 // TIMER_SERVO must be defined in this file +#define TIMER_SERIAL TIM7 // TIMER_SERIAL must be defined in this file // UART Definitions //#define SERIAL_UART_INSTANCE 1 // Connected to EXP3 header diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_V1/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_V1/variant.h index f512a311e3..424538b395 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_V1/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_OCTOPUS_V1/variant.h @@ -165,9 +165,9 @@ extern "C" { // Timer Definitions // Do not use timer used by PWM pin. See PinMap_PWM. -#define TIMER_TONE TIM6 -#define TIMER_SERVO TIM5 -#define TIMER_SERIAL TIM7 +#define TIMER_TONE TIM6 // TIMER_TONE must be defined in this file +#define TIMER_SERVO TIM5 // TIMER_SERVO must be defined in this file +#define TIMER_SERIAL TIM7 // TIMER_SERIAL must be defined in this file // UART Definitions //#define SERIAL_UART_INSTANCE 1 // Connected to EXP3 header 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 11ebf561f3..b5cf0bad9d 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 @@ -255,9 +255,9 @@ extern "C" { // Timer Definitions // Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c -#define TIMER_TONE TIM2 -#define TIMER_SERVO TIM5 // Only 1 Servo PIN on SKR-PRO, so use the same timer as defined in PeripheralPins -#define TIMER_SERIAL TIM7 +#define TIMER_TONE TIM2 // TIMER_TONE must be defined in this file +#define TIMER_SERVO TIM5 // Only 1 Servo PIN on SKR-PRO, so use the same timer as defined in PeripheralPins +#define TIMER_SERIAL TIM7 // TIMER_SERIAL must be defined in this file // UART Definitions //#define ENABLE_HWSERIAL1 done automatically by the #define SERIAL_UART_INSTANCE below diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BTT_SKR_SE_BX/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_BTT_SKR_SE_BX/variant.h index 74f29514a8..285ad662e0 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_BTT_SKR_SE_BX/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_BTT_SKR_SE_BX/variant.h @@ -157,9 +157,9 @@ extern "C" { // Timer Definitions // Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c -#define TIMER_TONE TIM2 -#define TIMER_SERVO TIM5 -#define TIMER_SERIAL TIM7 +#define TIMER_TONE TIM2 // TIMER_TONE must be defined in this file +#define TIMER_SERVO TIM5 // TIMER_SERVO must be defined in this file +#define TIMER_SERIAL TIM7 // TIMER_SERIAL must be defined in this file // UART1 for TFT port #define ENABLE_HWSERIAL1 diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F103Rx/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_F103Rx/variant.h index 333bb02e5a..8f17d052bb 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_F103Rx/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_F103Rx/variant.h @@ -126,10 +126,10 @@ extern "C" { // Timer Definitions #ifndef TIMER_TONE - #define TIMER_TONE TIM3 + #define TIMER_TONE TIM3 // TIMER_TONE must be defined in this file #endif #ifndef TIMER_SERVO - #define TIMER_SERVO TIM2 + #define TIMER_SERVO TIM2 // TIMER_SERVO must be defined in this file #endif // UART Definitions diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F103VE_LONGER/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_F103VE_LONGER/variant.h index 56ae719077..e64272745b 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_F103VE_LONGER/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_F103VE_LONGER/variant.h @@ -121,9 +121,9 @@ extern "C" { #define TEMP_TIMER 3 // Leave TIMER 4 for TFT backlight PWM or Servo freq... #define STEP_TIMER 5 -#define TIMER_TONE TIM6 -#define TIMER_SERVO TIM7 -#define TIMER_SERIAL TIM8 +#define TIMER_TONE TIM6 // TIMER_TONE must be defined in this file +#define TIMER_SERVO TIM7 // TIMER_SERVO must be defined in this file +#define TIMER_SERIAL TIM8 // TIMER_SERIAL must be defined in this file // UART Definitions // Define here Serial instance number to map on Serial generic name diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F103Vx/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_F103Vx/variant.h index 496d8817a1..e01d67fd59 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_F103Vx/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_F103Vx/variant.h @@ -133,10 +133,10 @@ extern "C" { // Timer Definitions (optional) // Use TIM6/TIM7 when possible as servo and tone don't need GPIO output pin #ifndef TIMER_TONE - #define TIMER_TONE TIM6 + #define TIMER_TONE TIM6 // TIMER_TONE must be defined in this file #endif #ifndef TIMER_SERVO - #define TIMER_SERVO TIM7 + #define TIMER_SERVO TIM7 // TIMER_SERVO must be defined in this file #endif // UART Definitions diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F103Zx/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_F103Zx/variant.h index fb878f8b78..330a7efbf8 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_F103Zx/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_F103Zx/variant.h @@ -177,8 +177,8 @@ extern "C" { // Timer Definitions (optional) // Use TIM6/TIM7 when possible as servo and tone don't need GPIO output pin -#define TIMER_TONE TIM6 -#define TIMER_SERVO TIM7 +#define TIMER_TONE TIM6 // TIMER_TONE must be defined in this file +#define TIMER_SERVO TIM7 // TIMER_SERVO must be defined in this file // UART Definitions // Define here Serial instance number to map on Serial generic name diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F407VE/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_F407VE/variant.h index 3eed147309..df8bf064fc 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_F407VE/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_F407VE/variant.h @@ -299,10 +299,10 @@ extern "C" { // Timer Definitions // Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c -#define TIMER_TONE TIM6 +#define TIMER_TONE TIM6 // TIMER_TONE must be defined in this file // Do not use basic timer: OC is required -#define TIMER_SERVO TIM2 //TODO: advanced-control timers don't work +#define TIMER_SERVO TIM2 // TODO: advanced-control timers don't work // UART Definitions // Define here Serial instance number to map on Serial generic name diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F446VE/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_F446VE/variant.h index f00cc5f612..855616f66b 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_F446VE/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_F446VE/variant.h @@ -134,15 +134,15 @@ extern "C" { // Timer Definitions // Use TIM6/TIM7 when possible as servo and tone don't need GPIO output pin #ifndef TIMER_TONE -#define TIMER_TONE TIM6 + #define TIMER_TONE TIM6 // TIMER_TONE must be defined in this file #endif #ifndef TIMER_SERVO -#define TIMER_SERVO TIM7 + #define TIMER_SERVO TIM7 // TIMER_SERVO must be defined in this file #endif #ifndef TIMER_SERIAL -#define TIMER_SERIAL TIM9 + #define TIMER_SERIAL TIM9 // TIMER_SERIAL must be defined in this file #endif // UART Definitions diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F4x7Vx/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_F4x7Vx/variant.h index 94fa79c065..ba145d058c 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_F4x7Vx/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_F4x7Vx/variant.h @@ -153,13 +153,13 @@ extern "C" { // Timer Definitions // Use TIM6/TIM7 when possible as servo and tone don't need GPIO output pin #ifndef TIMER_TONE - #define TIMER_TONE TIM6 + #define TIMER_TONE TIM6 // TIMER_TONE must be defined in this file #endif #ifndef TIMER_SERVO - #define TIMER_SERVO TIM7 + #define TIMER_SERVO TIM7 // TIMER_SERVO must be defined in this file #endif #ifndef TIMER_SERIAL - #define TIMER_SERIAL TIM5 + #define TIMER_SERIAL TIM5 // TIMER_SERIAL must be defined in this file #endif // UART Definitions diff --git a/buildroot/share/PlatformIO/variants/MARLIN_FLY_F407ZG/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_FLY_F407ZG/variant.h index fd9a5c7741..2bfce85e21 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_FLY_F407ZG/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_FLY_F407ZG/variant.h @@ -185,10 +185,10 @@ extern "C" { // Timer Definitions // Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c -#define TIMER_TONE TIM6 +#define TIMER_TONE TIM6 // TIMER_TONE must be defined in this file // Do not use basic timer: OC is required -#define TIMER_SERVO TIM1 //TODO: advanced-control timers don't work +#define TIMER_SERVO TIM1 // TODO: advanced-control timers don't work // UART Definitions // Define here Serial instance number to map on Serial generic name 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 bcd5aa378e..d4982113a0 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_CHEETAH_V20/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_CHEETAH_V20/variant.h @@ -93,17 +93,15 @@ extern "C" { #define PIN_SPI_MISO PA6 #define PIN_SPI_SCK PA5 - // Timer Definitions -#define TIMER_TONE TIM2 -#define TIMER_SERVO TIM5 -#define TIMER_SERIAL TIM11 +#define TIMER_TONE TIM2 // TIMER_TONE must be defined in this file +#define TIMER_SERVO TIM5 // TIMER_SERVO must be defined in this file +#define TIMER_SERIAL TIM11 // TIMER_SERIAL must be defined in this file // UART Definitions //#define ENABLE_HWSERIAL1 done automatically by the #define SERIAL_UART_INSTANCE below #define ENABLE_HWSERIAL2 - // Define here Serial instance number to map on Serial generic name (if not already used by SerialUSB) #define SERIAL_UART_INSTANCE 1 //1 for Serial = Serial1 (USART1) @@ -148,4 +146,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_S6/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_S6/variant.h index 4bd5b63dfe..4f77dc688f 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_S6/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_FYSETC_S6/variant.h @@ -133,9 +133,9 @@ extern "C" { // Timer Definitions // Do not use timer used by PWM pin. See PinMap_PWM. -#define TIMER_TONE TIM6 -#define TIMER_SERVO TIM5 -#define TIMER_SERIAL TIM7 +#define TIMER_TONE TIM6 // TIMER_TONE must be defined in this file +#define TIMER_SERVO TIM5 // TIMER_SERVO must be defined in this file +#define TIMER_SERIAL TIM7 // TIMER_SERIAL must be defined in this file // UART Definitions //#define SERIAL_UART_INSTANCE 1 // Connected to EXP3 header diff --git a/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/variant.h index d82f000655..e7bc7c0bc1 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/variant.h @@ -183,7 +183,7 @@ extern "C" { // Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c // FANs may require PWM timers 3 10 11 13 // The LED/RGB connectors timer 4 -// Beware: STEP_TIMER default is 6 and TEMP_TIMER 14 for the F407 +// Beware: MCU_TIMER_STEP default is 6 and MCU_TIMER_TEMP 14 for the F407 #ifndef TIMER_TONE #define TIMER_TONE TIM8 // TIM3 or TIM8 for SPEAKER compat on the lerdge K (PC6) #endif // TIM4 for that on the Lerdge S (PD11) diff --git a/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/variant.h index 2fee15ba3b..30c3d95349 100644 --- a/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/variant.h +++ b/buildroot/share/PlatformIO/variants/MARLIN_TH3D_EZBOARD_V2/variant.h @@ -103,8 +103,8 @@ extern "C" { // Timer Definitions // Use TIM6/TIM7 when possible as servo and tone don't need GPIO output pin -#define TIMER_TONE TIM5 -#define TIMER_SERVO TIM4 +#define TIMER_TONE TIM5 // TIMER_TONE must be defined in this file +#define TIMER_SERVO TIM4 // TIMER_SERVO must be defined in this file // UART Definitions // Define here Serial instance number to map on Serial generic name From 71d54dab3c9fb7765d55d5cf2806a652879e8b67 Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Fri, 4 Feb 2022 13:33:52 -0600 Subject: [PATCH 436/532] =?UTF-8?q?=F0=9F=8D=BB=20STM32=20set=5Fpwm=5Fduty?= =?UTF-8?q?=20"on/off"=20for=20digital=20pins=20(#23665)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/STM32/fast_pwm.cpp | 45 ++++++++++--------- Marlin/src/HAL/STM32F1/fast_pwm.cpp | 21 +++++---- .../variant_MARLIN_STM32G0B1RE.h | 4 +- 3 files changed, 39 insertions(+), 31 deletions(-) diff --git a/Marlin/src/HAL/STM32/fast_pwm.cpp b/Marlin/src/HAL/STM32/fast_pwm.cpp index f661e11350..590c9dbe3d 100644 --- a/Marlin/src/HAL/STM32/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32/fast_pwm.cpp @@ -30,30 +30,35 @@ static uint16_t timer_freq[TIMER_NUM]; void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { - if (!PWM_PIN(pin)) return; // Don't proceed if no hardware timer - const PinName pin_name = digitalPinToPinName(pin); - TIM_TypeDef * const Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); + const uint16_t duty = invert ? v_size - v : v; + if (PWM_PIN(pin)) { + const PinName pin_name = digitalPinToPinName(pin); + TIM_TypeDef * const Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); - const timer_index_t index = get_timer_index(Instance); - const bool needs_freq = (HardwareTimer_Handle[index] == nullptr); - if (needs_freq) // A new instance must be set to the default frequency of PWM_FREQUENCY - HardwareTimer_Handle[index]->__this = new HardwareTimer((TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM)); + const timer_index_t index = get_timer_index(Instance); + const bool needs_freq = (HardwareTimer_Handle[index] == nullptr); + if (needs_freq) // A new instance must be set to the default frequency of PWM_FREQUENCY + HardwareTimer_Handle[index]->__this = new HardwareTimer((TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM)); - HardwareTimer * const HT = (HardwareTimer *)(HardwareTimer_Handle[index]->__this); - const uint32_t channel = STM_PIN_CHANNEL(pinmap_function(pin_name, PinMap_PWM)); - const TimerModes_t previousMode = HT->getMode(channel); - if (previousMode != TIMER_OUTPUT_COMPARE_PWM1) - HT->setMode(channel, TIMER_OUTPUT_COMPARE_PWM1, pin); + HardwareTimer * const HT = (HardwareTimer *)(HardwareTimer_Handle[index]->__this); + const uint32_t channel = STM_PIN_CHANNEL(pinmap_function(pin_name, PinMap_PWM)); + const TimerModes_t previousMode = HT->getMode(channel); + if (previousMode != TIMER_OUTPUT_COMPARE_PWM1) + HT->setMode(channel, TIMER_OUTPUT_COMPARE_PWM1, pin); - if (needs_freq && timer_freq[index] == 0) // If the timer is unconfigured and no freq is set then default PWM_FREQUENCY - set_pwm_frequency(pin_name, PWM_FREQUENCY); // Set the frequency and save the value to the assigned index no. + if (needs_freq && timer_freq[index] == 0) // If the timer is unconfigured and no freq is set then default PWM_FREQUENCY + set_pwm_frequency(pin_name, PWM_FREQUENCY); // Set the frequency and save the value to the assigned index no. - // Note the resolution is sticky here, the input can be upto 16 bits and that would require RESOLUTION_16B_COMPARE_FORMAT (16) - // If such a need were to manifest then we would need to calc the resolution based on the v_size parameter and add code for it. - const uint16_t value = invert ? v_size - v : v; - HT->setCaptureCompare(channel, value, RESOLUTION_8B_COMPARE_FORMAT); // Sets the duty, the calc is done in the library :) - pinmap_pinout(pin_name, PinMap_PWM); // Make sure the pin output state is set. - if (previousMode != TIMER_OUTPUT_COMPARE_PWM1) HT->resume(); + // Note the resolution is sticky here, the input can be upto 16 bits and that would require RESOLUTION_16B_COMPARE_FORMAT (16) + // If such a need were to manifest then we would need to calc the resolution based on the v_size parameter and add code for it. + HT->setCaptureCompare(channel, duty, RESOLUTION_8B_COMPARE_FORMAT); // Set the duty, the calc is done in the library :) + pinmap_pinout(pin_name, PinMap_PWM); // Make sure the pin output state is set. + if (previousMode != TIMER_OUTPUT_COMPARE_PWM1) HT->resume(); + } + else { + pinMode(pin, OUTPUT); + digitalWrite(pin, duty < v_size / 2 ? LOW : HIGH); + } } void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { diff --git a/Marlin/src/HAL/STM32F1/fast_pwm.cpp b/Marlin/src/HAL/STM32F1/fast_pwm.cpp index c783dda606..13411d9af0 100644 --- a/Marlin/src/HAL/STM32F1/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32F1/fast_pwm.cpp @@ -39,16 +39,19 @@ inline uint8_t timer_and_index_for_pin(const pin_t pin, timer_dev **timer_ptr) { } void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { - if (!PWM_PIN(pin)) return; - - timer_dev *timer; UNUSED(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; const uint16_t duty = invert ? v_size - v : v; - timer_set_compare(timer, channel, duty); - timer_set_mode(timer, channel, TIMER_PWM); // PWM Output Mode + if (PWM_PIN(pin)) { + timer_dev *timer; UNUSED(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; + timer_set_compare(timer, channel, duty); + timer_set_mode(timer, channel, TIMER_PWM); // PWM Output Mode + } + else { + pinMode(pin, OUTPUT); + digitalWrite(pin, duty < v_size / 2 ? LOW : HIGH); + } } void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { diff --git a/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h b/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h index 65aff2ce27..9cb3d45a0d 100644 --- a/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h +++ b/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h @@ -150,10 +150,10 @@ // Timer Definitions // Use TIM6/TIM7 when possible as servo and tone don't need GPIO output pin #ifndef TIMER_TONE - #define TIMER_TONE TIM6 + #define TIMER_TONE TIM6 // TIMER_TONE must be defined in this file #endif #ifndef TIMER_SERVO - #define TIMER_SERVO TIM7 + #define TIMER_SERVO TIM7 // TIMER_SERVO must be defined in this file #endif // UART Definitions From 7ef9e6df9838060961499b9de06ef3feb8d38ff6 Mon Sep 17 00:00:00 2001 From: Bob Kuhn Date: Fri, 4 Feb 2022 13:34:48 -0600 Subject: [PATCH 437/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20RUMBA=20+=20MKS=20?= =?UTF-8?q?Mini12864=20Neopixel=20pin=20(#23646)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/ramps/pins_RUMBA.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/pins/ramps/pins_RUMBA.h b/Marlin/src/pins/ramps/pins_RUMBA.h index d8e2dd0971..7d17bf2e12 100644 --- a/Marlin/src/pins/ramps/pins_RUMBA.h +++ b/Marlin/src/pins/ramps/pins_RUMBA.h @@ -220,7 +220,7 @@ #define RGB_LED_B_PIN 40 #endif #elif ENABLED(FYSETC_MINI_12864_2_1) - #define NEOPIXEL_PIN 25 + #define NEOPIXEL_PIN 38 #endif #else From a1ffd59931ee28cddae4871706c771d816f0e4ae Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 4 Feb 2022 15:49:39 -0600 Subject: [PATCH 438/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Rel?= =?UTF-8?q?ocate=20a=20variant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/PlatformIO/boards/marlin_STM32G0B1RE.json | 2 +- .../variants/{STM32G0xx => }/MARLIN_G0B1RE/PeripheralPins.c | 0 .../variants/{STM32G0xx => }/MARLIN_G0B1RE/PinNamesVar.h | 0 .../variants/{STM32G0xx => }/MARLIN_G0B1RE/ldscript.ld | 0 .../MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.cpp | 0 .../{STM32G0xx => }/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h | 0 6 files changed, 1 insertion(+), 1 deletion(-) rename buildroot/share/PlatformIO/variants/{STM32G0xx => }/MARLIN_G0B1RE/PeripheralPins.c (100%) rename buildroot/share/PlatformIO/variants/{STM32G0xx => }/MARLIN_G0B1RE/PinNamesVar.h (100%) rename buildroot/share/PlatformIO/variants/{STM32G0xx => }/MARLIN_G0B1RE/ldscript.ld (100%) rename buildroot/share/PlatformIO/variants/{STM32G0xx => }/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.cpp (100%) rename buildroot/share/PlatformIO/variants/{STM32G0xx => }/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h (100%) diff --git a/buildroot/share/PlatformIO/boards/marlin_STM32G0B1RE.json b/buildroot/share/PlatformIO/boards/marlin_STM32G0B1RE.json index 86f632f53b..28c3451b4c 100644 --- a/buildroot/share/PlatformIO/boards/marlin_STM32G0B1RE.json +++ b/buildroot/share/PlatformIO/boards/marlin_STM32G0B1RE.json @@ -9,7 +9,7 @@ }, "mcu": "stm32g0b1ret6", "product_line": "STM32G0B1xx", - "variant": "STM32G0xx/MARLIN_G0B1RE" + "variant": "MARLIN_G0B1RE" }, "debug": { "default_tools": [ diff --git a/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/PeripheralPins.c b/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/PeripheralPins.c similarity index 100% rename from buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/PeripheralPins.c rename to buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/PeripheralPins.c diff --git a/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/PinNamesVar.h b/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/PinNamesVar.h similarity index 100% rename from buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/PinNamesVar.h rename to buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/PinNamesVar.h diff --git a/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/ldscript.ld b/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/ldscript.ld similarity index 100% rename from buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/ldscript.ld rename to buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/ldscript.ld diff --git a/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.cpp b/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.cpp similarity index 100% rename from buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.cpp rename to buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.cpp diff --git a/buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h b/buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h similarity index 100% rename from buildroot/share/PlatformIO/variants/STM32G0xx/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h rename to buildroot/share/PlatformIO/variants/MARLIN_G0B1RE/variant_MARLIN_STM32G0B1RE.h From 076d8e83ea4247b75a90e71bcb80dc3f8e01a458 Mon Sep 17 00:00:00 2001 From: Bones <97494397+SidSkiba@users.noreply.github.com> Date: Fri, 4 Feb 2022 14:52:57 -0700 Subject: [PATCH 439/532] =?UTF-8?q?=E2=9C=A8=20Add=20ZRIB=20v53,=20patch?= =?UTF-8?q?=20G35=20Z=20drop,=20related=20issues=20(#23636)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration.h | 3 + Marlin/src/core/boards.h | 1 + Marlin/src/gcode/bedlevel/G35.cpp | 4 +- Marlin/src/lcd/marlinui.cpp | 3 +- Marlin/src/lcd/thermistornames.h | 4 + Marlin/src/module/thermistor/thermistor_504.h | 93 ++++ Marlin/src/module/thermistor/thermistor_505.h | 82 +++ Marlin/src/module/thermistor/thermistors.h | 6 + Marlin/src/pins/pins.h | 2 + Marlin/src/pins/ramps/pins_ZRIB_V52.h | 216 ++++---- Marlin/src/pins/ramps/pins_ZRIB_V53.h | 511 ++++++++++++++++++ Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h | 2 +- 12 files changed, 816 insertions(+), 111 deletions(-) create mode 100644 Marlin/src/module/thermistor/thermistor_504.h create mode 100644 Marlin/src/module/thermistor/thermistor_505.h create mode 100644 Marlin/src/pins/ramps/pins_ZRIB_V53.h diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index a6a11cb9fe..d3c36ad485 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -437,6 +437,9 @@ * 5 : 100kΩ ATC Semitec 104GT-2/104NT-4-R025H42G - Used in ParCan, J-Head, and E3D, SliceEngineering 300°C * 501 : 100kΩ Zonestar - Tronxy X3A * 502 : 100kΩ Zonestar - used by hot bed in Zonestar Průša P802M + * 503 : 100kΩ Zonestar (Z8XM2) Heated Bed thermistor + * 504 : 100kΩ Zonestar P802QR2 (Part# QWG-104F-B3950) Hotend Thermistor + * 505 : 100kΩ Zonestar P802QR2 (Part# QWG-104F-3950) Bed Thermistor * 512 : 100kΩ RPW-Ultra hotend * 6 : 100kΩ EPCOS - Not as accurate as table #1 (created using a fluke thermocouple) * 7 : 100kΩ Honeywell 135-104LAG-J01 diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 8d3a53258a..a5460d7b1d 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -115,6 +115,7 @@ #define BOARD_RAMPS_S_12_EFFB 1159 // Ramps S 1.2 by Sakul.cz (Power outputs: Hotend, Fan0, Fan1, Bed) #define BOARD_LONGER3D_LK1_PRO 1160 // Longer LK1 PRO / Alfawise U20 Pro (PRO version) #define BOARD_LONGER3D_LKx_PRO 1161 // Longer LKx PRO / Alfawise Uxx Pro (PRO version) +#define BOARD_ZRIB_V53 1162 // Zonestar zrib V5.3 (Chinese RAMPS replica) // // RAMBo and derivatives diff --git a/Marlin/src/gcode/bedlevel/G35.cpp b/Marlin/src/gcode/bedlevel/G35.cpp index 8cabb92382..4dd1323a6c 100644 --- a/Marlin/src/gcode/bedlevel/G35.cpp +++ b/Marlin/src/gcode/bedlevel/G35.cpp @@ -106,7 +106,9 @@ void GcodeSuite::G35() { // In BLTOUCH HS mode, the probe travels in a deployed state. // Users of G35 might have a badly misaligned bed, so raise Z by the // length of the deployed pin (BLTOUCH stroke < 7mm) - do_blocking_move_to_z(Z_CLEARANCE_BETWEEN_PROBES + TERN0(BLTOUCH, bltouch.z_extra_clearance())); + + // Unsure if this is even required. The probe seems to lift correctly after probe done. + do_blocking_move_to_z(SUM_TERN(BLTOUCH, Z_CLEARANCE_BETWEEN_PROBES, bltouch.z_extra_clearance())); const float z_probed_height = probe.probe_at_point(tramming_points[i], PROBE_PT_RAISE, 0, true); if (isnan(z_probed_height)) { diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index dd90fba41b..fdb6df1808 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -704,7 +704,8 @@ void MarlinUI::init() { TERN_(HAS_MARLINUI_MENU, refresh()); #if HAS_ENCODER_ACTION - if (clear_buttons) buttons = 0; + if (clear_buttons) + TERN_(HAS_ADC_BUTTONS, keypad_buttons =) buttons = 0; next_button_update_ms = millis() + 500; #else UNUSED(clear_buttons); diff --git a/Marlin/src/lcd/thermistornames.h b/Marlin/src/lcd/thermistornames.h index 4f6dd23ece..2571efe075 100644 --- a/Marlin/src/lcd/thermistornames.h +++ b/Marlin/src/lcd/thermistornames.h @@ -70,6 +70,10 @@ #define THERMISTOR_NAME "Zonestar (P802M Hot Bed)" #elif THERMISTOR_ID == 503 #define THERMISTOR_NAME "Zonestar (Z8XM2 Bed)" +#elif THERMISTOR_ID == 504 + #define THERMISTOR_NAME "Zonestar (P802QR2 Hot End)" +#elif THERMISTOR_ID == 505 + #define THERMISTOR_NAME "Zonestar (P802QR2 Bed)" #elif THERMISTOR_ID == 512 #define THERMISTOR_NAME "RPW-Ultra" #elif THERMISTOR_ID == 6 diff --git a/Marlin/src/module/thermistor/thermistor_504.h b/Marlin/src/module/thermistor/thermistor_504.h new file mode 100644 index 0000000000..61ce3ae135 --- /dev/null +++ b/Marlin/src/module/thermistor/thermistor_504.h @@ -0,0 +1,93 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (C) 2022 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 + +// QWG 104F B3950 thermistor +constexpr temp_entry_t temptable_504[] PROGMEM = { + { OV( 15), 330 }, + { OV( 17), 315 }, + { OV( 19), 300 }, + { OV( 20), 295 }, + { OV( 21), 290 }, + { OV( 23), 285 }, + { OV( 25), 280 }, + { OV( 27), 275 }, + { OV( 28), 270 }, + { OV( 31), 265 }, + { OV( 33), 260 }, + { OV( 35), 255 }, + { OV( 38), 250 }, + { OV( 41), 245 }, + { OV( 44), 240 }, + { OV( 48), 235 }, + { OV( 52), 230 }, + { OV( 56), 225 }, + { OV( 61), 220 }, + { OV( 66), 215 }, + { OV( 78), 210 }, + { OV( 92), 205 }, + { OV( 100), 200 }, + { OV( 109), 195 }, + { OV( 120), 190 }, + { OV( 143), 185 }, + { OV( 148), 180 }, + { OV( 156), 175 }, + { OV( 171), 170 }, + { OV( 187), 165 }, + { OV( 205), 160 }, + { OV( 224), 155 }, + { OV( 268), 150 }, + { OV( 293), 145 }, + { OV( 320), 140 }, + { OV( 348), 135 }, + { OV( 379), 130 }, + { OV( 411), 125 }, + { OV( 445), 120 }, + { OV( 480), 115 }, + { OV( 516), 110 }, + { OV( 553), 105 }, + { OV( 591), 100 }, + { OV( 628), 95 }, + { OV( 665), 90 }, + { OV( 702), 85 }, + { OV( 737), 80 }, + { OV( 770), 75 }, + { OV( 801), 70 }, + { OV( 830), 65 }, + { OV( 857), 60 }, + { OV( 881), 55 }, + { OV( 903), 50 }, + { OV( 922), 45 }, + { OV( 939), 40 }, + { OV( 954), 35 }, + { OV( 966), 30 }, + { OV( 977), 25 }, + { OV( 985), 23 }, + { OV( 993), 20 }, + { OV( 999), 18 }, + { OV(1004), 15 }, + { OV(1008), 12 }, + { OV(1012), 8 }, + { OV(1016), 5 }, + { OV(1020), 0 }, + { OV(1023), -5 } +}; diff --git a/Marlin/src/module/thermistor/thermistor_505.h b/Marlin/src/module/thermistor/thermistor_505.h new file mode 100644 index 0000000000..6c94b0e1b4 --- /dev/null +++ b/Marlin/src/module/thermistor/thermistor_505.h @@ -0,0 +1,82 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (C) 2022 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 + +// ZONESTAR hotbed QWG-104F-3950 thermistor +constexpr temp_entry_t temptable_505[] PROGMEM = { + { OV( 1), 938 }, + { OV( 8), 320 }, + { OV( 16), 300 }, + { OV( 27), 290 }, + { OV( 36), 272 }, + { OV( 47), 258 }, + { OV( 56), 248 }, + { OV( 68), 245 }, + { OV( 78), 237 }, + { OV( 89), 228 }, + { OV( 99), 221 }, + { OV( 110), 215 }, + { OV( 120), 209 }, + { OV( 131), 204 }, + { OV( 141), 199 }, + { OV( 151), 195 }, + { OV( 161), 190 }, + { OV( 171), 187 }, + { OV( 181), 183 }, + { OV( 201), 179 }, + { OV( 221), 170 }, + { OV( 251), 165 }, + { OV( 261), 160 }, + { OV( 321), 150 }, + { OV( 361), 144 }, + { OV( 401), 140 }, + { OV( 421), 133 }, + { OV( 451), 130 }, + { OV( 551), 120 }, + { OV( 571), 117 }, + { OV( 596), 110 }, + { OV( 626), 105 }, + { OV( 666), 100 }, + { OV( 677), 95 }, + { OV( 697), 90 }, + { OV( 717), 85 }, + { OV( 727), 79 }, + { OV( 750), 72 }, + { OV( 789), 69 }, + { OV( 819), 65 }, + { OV( 861), 57 }, + { OV( 870), 55 }, + { OV( 881), 51 }, + { OV( 911), 45 }, + { OV( 922), 39 }, + { OV( 968), 28 }, + { OV( 977), 25 }, + { OV( 985), 23 }, + { OV( 993), 20 }, + { OV( 999), 18 }, + { OV(1004), 15 }, + { OV(1008), 12 }, + { OV(1012), 8 }, + { OV(1016), 5 }, + { OV(1020), 0 }, + { OV(1023), -5 } +}; diff --git a/Marlin/src/module/thermistor/thermistors.h b/Marlin/src/module/thermistor/thermistors.h index 002beea5b5..3d9ef5062d 100644 --- a/Marlin/src/module/thermistor/thermistors.h +++ b/Marlin/src/module/thermistor/thermistors.h @@ -78,6 +78,12 @@ typedef struct { int16_t value; celsius_t celsius; } temp_entry_t; #if ANY_THERMISTOR_IS(503) // Zonestar (Z8XM2) Heated Bed thermistor #include "thermistor_503.h" #endif +#if ANY_THERMISTOR_IS(504) // Zonestar (P802QR2 Hot End) thermistors + #include "thermistor_504.h" +#endif +#if ANY_THERMISTOR_IS(505) // Zonestar (P802QR2 Bed) thermistor + #include "thermistor_505.h" +#endif #if ANY_THERMISTOR_IS(512) // 100k thermistor in RPW-Ultra hotend, Pull-up = 4.7 kOhm, "unknown model" #include "thermistor_512.h" #endif diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 07acd0b122..8c69bccc2e 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -123,6 +123,8 @@ #include "ramps/pins_ZRIB_V20.h" // ATmega2560, ATmega1280 env:mega2560 env:mega1280 #elif MB(ZRIB_V52) #include "ramps/pins_ZRIB_V52.h" // ATmega2560, ATmega1280 env:mega2560 env:mega1280 +#elif MB(ZRIB_V53) + #include "ramps/pins_ZRIB_V53.h" // ATmega2560, ATmega1280 env:mega2560 env:mega1280 #elif MB(FELIX2) #include "ramps/pins_FELIX2.h" // ATmega2560, ATmega1280 env:mega2560 env:mega1280 #elif MB(RIGIDBOARD) diff --git a/Marlin/src/pins/ramps/pins_ZRIB_V52.h b/Marlin/src/pins/ramps/pins_ZRIB_V52.h index 27f043914f..002b9dbef5 100644 --- a/Marlin/src/pins/ramps/pins_ZRIB_V52.h +++ b/Marlin/src/pins/ramps/pins_ZRIB_V52.h @@ -49,111 +49,111 @@ #include "pins_MKS_BASE_common.h" // ... RAMPS -/* - Available connectors on MKS BASE v1.4 (Basically same as ZRIB V5.2) - - ======= - | GND | - |-----| E0 - | 10 | (10) PB4 ** Pin23 ** PWM10 - |-----| - | GND | - |-----| E1 - | 7 | ( 7) PH4 ** Pin16 ** PWM7 - |-----| - | GND | - |-----| FAN - | 9 | ( 9) PH6 ** Pin18 ** PWM9 - ======= - - ======= - | GND | - |-----| Heated Bed - | 8 | ( 8) PH5 ** Pin17 ** PWM8 - ======= - - ========== - | 12-24V | - |--------| Power - | GND | - ========== - - XS3 Connector - ================= - | 65 | GND | 5V | (65) PK3 ** Pin86 ** A11 - |----|-----|----| - | 66 | GND | 5V | (66) PK4 ** Pin85 ** A12 - ================= - - Servos Connector - ================= - | 11 | GND | 5V | (11) PB5 ** Pin24 ** PWM11 - |----|-----|----| - | 12 | GND | 5V | (12) PB6 ** Pin25 ** PWM12 - ================= - - ICSP - ================= - | 5V | 51 | GND | (51) PB2 ** Pin21 ** SPI_MOSI - |----|----|-----| - | 50 | 52 | RST | (50) PB3 ** Pin22 ** SPI_MISO - ================= (52) PB1 ** Pin20 ** SPI_SCK - - XS6/AUX-1 Connector - ====================== - | 5V | GND | NC | 20 | (20) PD1 ** Pin44 ** I2C_SDA - |----|-----|----|----| - | 50 | 51 | 52 | 21 | (50) PB3 ** Pin22 ** SPI_MISO - ====================== (51) PB2 ** Pin21 ** SPI_MOSI - (52) PB1 ** Pin20 ** SPI_SCK - (21) PD0 ** Pin43 ** I2C_SCL - - Temperature - ================================== - | GND | 69 | GND | 68 | GND | 67 | - ================================== - (69) PK7 ** Pin82 ** A15 - (68) PK6 ** Pin83 ** A14 - (67) PK5 ** Pin84 ** A13 - - Limit Switches - ============ - | 2 | GND | X+ ( 2) PE4 ** Pin6 ** PWM2 - |----|-----| - | 3 | GND | X- ( 3) PE5 ** Pin7 ** PWM3 - |----|-----| - | 15 | GND | Y+ (15) PJ0 ** Pin63 ** USART3_RX - |----|-----| - | 14 | GND | Y- (14) PJ1 ** Pin64 ** USART3_TX - |----|-----| - | 19 | GND | Z+ (19) PD2 ** Pin45 ** USART1_RX - |----|-----| - | 18 | GND | Z- (18) PD3 ** Pin46 ** USART1_TX - ============ - - EXP1 - ============ - | 37 | 35 | (37) PC0 ** Pin53 ** D37 - |-----|----| (35) PC2 ** Pin55 ** D35 - | 17 | 16 | (17) PH0 ** Pin12 ** USART2_RX - |-----|----| (16) PH1 ** Pin13 ** USART2_TX - | 23 | 25 | (23) PA1 ** Pin77 ** D23 - |-----|----| (25) PA3 ** Pin75 ** D25 - | 27 | 29 | (27) PA5 ** Pin73 ** D27 - |-----|----| (29) PA7 ** Pin71 ** D29 - | GND | 5V | - ============ - - EXP2 - ============ - | 50 | 52 | (50) PB3 ** Pin22 ** SPI_MISO - |-----|----| (52) PB1 ** Pin20 ** SPI_SCK - | 31 | 53 | (31) PC6 ** Pin59 ** D31 - |-----|----| (53) PB0 ** Pin19 ** SPI_SS - | 33 | 51 | (33) PC4 ** Pin57 ** D33 - |-----|----| (51) PB2 ** Pin21 ** SPI_MOSI - | 49 | 41 | (49) PL0 ** Pin35 ** D49 - |-----|----| (41) PG0 ** Pin51 ** D41 - | GND | NC | - ============ -*/ +/** + * Available connectors on MKS BASE v1.4 (Basically same as ZRIB V5.2) + * + * ======= + * | GND | + * |-----| E0 + * | 10 | (10) PB4 ** Pin23 ** PWM10 + * |-----| + * | GND | + * |-----| E1 + * | 7 | ( 7) PH4 ** Pin16 ** PWM7 + * |-----| + * | GND | + * |-----| FAN + * | 9 | ( 9) PH6 ** Pin18 ** PWM9 + * ======= + * + * ======= + * | GND | + * |-----| Heated Bed + * | 8 | ( 8) PH5 ** Pin17 ** PWM8 + * ======= + * + * ========== + * | 12-24V | + * |--------| Power + * | GND | + * ========== + * + * XS3 Connector + * ================= + * | 65 | GND | 5V | (65) PK3 ** Pin86 ** A11 + * |----|-----|----| + * | 66 | GND | 5V | (66) PK4 ** Pin85 ** A12 + * ================= + * + * Servos Connector + * ================= + * | 11 | GND | 5V | (11) PB5 ** Pin24 ** PWM11 + * |----|-----|----| + * | 12 | GND | 5V | (12) PB6 ** Pin25 ** PWM12 + * ================= + * + * ICSP + * ================= + * | 5V | 51 | GND | (51) PB2 ** Pin21 ** SPI_MOSI + * |----|----|-----| + * | 50 | 52 | RST | (50) PB3 ** Pin22 ** SPI_MISO + * ================= (52) PB1 ** Pin20 ** SPI_SCK + * + * XS6/AUX-1 Connector + * ====================== + * | 5V | GND | NC | 20 | (20) PD1 ** Pin44 ** I2C_SDA + * |----|-----|----|----| + * | 50 | 51 | 52 | 21 | (50) PB3 ** Pin22 ** SPI_MISO + * ====================== (51) PB2 ** Pin21 ** SPI_MOSI + * (52) PB1 ** Pin20 ** SPI_SCK + * (21) PD0 ** Pin43 ** I2C_SCL + * + * Temperature + * ================================== + * | GND | 69 | GND | 68 | GND | 67 | + * ================================== + * (69) PK7 ** Pin82 ** A15 + * (68) PK6 ** Pin83 ** A14 + * (67) PK5 ** Pin84 ** A13 + * + * Limit Switches + * ============ + * | 2 | GND | X+ ( 2) PE4 ** Pin6 ** PWM2 + * |----|-----| + * | 3 | GND | X- ( 3) PE5 ** Pin7 ** PWM3 + * |----|-----| + * | 15 | GND | Y+ (15) PJ0 ** Pin63 ** USART3_RX + * |----|-----| + * | 14 | GND | Y- (14) PJ1 ** Pin64 ** USART3_TX + * |----|-----| + * | 19 | GND | Z+ (19) PD2 ** Pin45 ** USART1_RX + * |----|-----| + * | 18 | GND | Z- (18) PD3 ** Pin46 ** USART1_TX + * ============ + * + * EXP1 + * ============ + * | 37 | 35 | (37) PC0 ** Pin53 ** D37 + * |-----|----| (35) PC2 ** Pin55 ** D35 + * | 17 | 16 | (17) PH0 ** Pin12 ** USART2_RX + * |-----|----| (16) PH1 ** Pin13 ** USART2_TX + * | 23 | 25 | (23) PA1 ** Pin77 ** D23 + * |-----|----| (25) PA3 ** Pin75 ** D25 + * | 27 | 29 | (27) PA5 ** Pin73 ** D27 + * |-----|----| (29) PA7 ** Pin71 ** D29 + * | GND | 5V | + * ============ + * + * EXP2 + * ============ + * | 50 | 52 | (50) PB3 ** Pin22 ** SPI_MISO + * |-----|----| (52) PB1 ** Pin20 ** SPI_SCK + * | 31 | 53 | (31) PC6 ** Pin59 ** D31 + * |-----|----| (53) PB0 ** Pin19 ** SPI_SS + * | 33 | 51 | (33) PC4 ** Pin57 ** D33 + * |-----|----| (51) PB2 ** Pin21 ** SPI_MOSI + * | 49 | 41 | (49) PL0 ** Pin35 ** D49 + * |-----|----| (41) PG0 ** Pin51 ** D41 + * | GND | NC | + * ============ + */ diff --git a/Marlin/src/pins/ramps/pins_ZRIB_V53.h b/Marlin/src/pins/ramps/pins_ZRIB_V53.h new file mode 100644 index 0000000000..6cbc0351ba --- /dev/null +++ b/Marlin/src/pins/ramps/pins_ZRIB_V53.h @@ -0,0 +1,511 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2022 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 + +/** + * ZRIB V5.3 Based on MKS BASE v1.4 with A4982 stepper drivers and digital micro-stepping + */ + +#include "env_validate.h" + +#if HOTENDS > 2 + #error "ZRIB V5.3 only supports up to 2 hotends. Comment out this line to continue." +#elif E_STEPPERS > 3 + #error "ZRIB V5.3 only supports up to 3 E-steppers. Comment out this line to continue." +#endif + +#define BOARD_INFO_NAME "ZRIB V5.3" + +// +// PIN 12 Connector +// +#define PIN_12_PIN 12 + +// +// XS1 Connector +// +#define XS1_01_PIN 42 +#define XS1_03_PIN 43 +#define XS1_05_PIN 44 +#define XS1_07_PIN 45 +#define XS1_08_PIN 47 + +// +// XS6 Connector +// +#define XS6_01_PIN 20 +#define XS6_03_PIN 52 +#define XS6_05_PIN 51 +#define XS6_07_PIN 50 +#define XS6_08_PIN 21 + +// +// Servos / XS3 Connector +// +#ifndef SERVO0_PIN + #define SERVO0_PIN 11 // Analog Output +#endif +#ifndef SERVO1_PIN + #define SERVO1_PIN 12 // Analog Output +#endif + +// +// Limit Switches +// +#ifndef X_STOP_PIN + #ifndef X_MIN_PIN + #define X_MIN_PIN 3 + #endif + #ifndef X_MAX_PIN + #define X_MAX_PIN 2 + #endif +#endif +#ifndef Y_STOP_PIN + #ifndef Y_MIN_PIN + #define Y_MIN_PIN 14 + #endif + #ifndef Y_MAX_PIN + #define Y_MAX_PIN 15 + #endif +#endif +#ifndef Z_STOP_PIN + #ifndef Z_MIN_PIN + #define Z_MIN_PIN 18 + #endif + #ifndef Z_MAX_PIN + #define Z_MAX_PIN 19 + #endif +#endif + +// +// Z Probe (when not Z_MIN_PIN) +// +#ifndef Z_MIN_PROBE_PIN + #define Z_MIN_PROBE_PIN 19 +#endif + +// +// Steppers +// +#define X_STEP_PIN 54 +#define X_DIR_PIN 55 +#define X_ENABLE_PIN 38 + +#define Y_STEP_PIN 60 +#define Y_DIR_PIN 61 +#define Y_ENABLE_PIN 56 + +#define Z_STEP_PIN 46 +#define Z_DIR_PIN 48 +#define Z_ENABLE_PIN 62 + +#if NUM_Z_STEPPER_DRIVERS == 2 + #define Z2_STEP_PIN 26 // E0 connector + #define Z2_DIR_PIN 28 + #define Z2_ENABLE_PIN 24 + + #define E0_STEP_PIN 36 // E1 connector + #define E0_DIR_PIN 34 + #define E0_ENABLE_PIN 30 + + #define E1_STEP_PIN 4 // E2 connector + #define E1_DIR_PIN 5 + #define E1_ENABLE_PIN 22 +#else + #define E0_STEP_PIN 26 + #define E0_DIR_PIN 28 + #define E0_ENABLE_PIN 24 + + #define E1_STEP_PIN 36 + #define E1_DIR_PIN 34 + #define E1_ENABLE_PIN 30 + + #define E2_STEP_PIN 4 + #define E2_DIR_PIN 5 + #define E2_ENABLE_PIN 22 +#endif + +// +// Temperature Sensors +// +#ifndef TEMP_0_PIN + #define TEMP_0_PIN 13 // Analog Input +#endif +#ifndef TEMP_1_PIN + #define TEMP_1_PIN 15 // Analog Input +#endif +#ifndef TEMP_BED_PIN + #define TEMP_BED_PIN 14 // Analog Input +#endif + +// +// Heaters / Fans Connectors +// + +#define HEATER_0_PIN 10 +#define HEATER_1_PIN 7 +#define FAN_PIN 9 +#define HEATER_BED_PIN 8 +#define FAN1_PIN 6 + +// +// Misc. Functions +// +#ifndef SDSS + #define SDSS 53 +#endif + +#define LED_PIN 13 + +#ifndef FIL_RUNOUT_PIN + #define FIL_RUNOUT_PIN XS1_01_PIN +#endif + +#ifndef PS_ON_PIN + #define PS_ON_PIN XS1_03_PIN +#endif + +#if HAS_TMC_UART + /** + * TMC2209 stepper drivers + * + * Hardware serial communication ports. + * If undefined software serial is used according to the pins below + * + * Serial2 -- AUX-4 Pin 18 (D16 TX2) and AUX-4 Pin 17 (D17 RX2) + * Serial1 -- Pins D18 and D19 are used for Z-MIN and Z-MAX + */ + //#define X_HARDWARE_SERIAL Serial1 + //#define X2_HARDWARE_SERIAL Serial1 + //#define Y_HARDWARE_SERIAL Serial1 + //#define Y2_HARDWARE_SERIAL Serial1 + //#define Z_HARDWARE_SERIAL Serial1 + //#define Z2_HARDWARE_SERIAL Serial1 + //#define E0_HARDWARE_SERIAL Serial1 + //#define E1_HARDWARE_SERIAL Serial1 + //#define E2_HARDWARE_SERIAL Serial1 + //#define E3_HARDWARE_SERIAL Serial1 + //#define E4_HARDWARE_SERIAL Serial1 + + #ifndef X_SERIAL_TX_PIN + #define X_SERIAL_TX_PIN XS1_08_PIN + #endif + #ifndef X_SERIAL_RX_PIN + #define X_SERIAL_RX_PIN PIN_12_PIN + #endif + #ifndef X2_SERIAL_TX_PIN + #define X2_SERIAL_TX_PIN -1 + #endif + #ifndef X2_SERIAL_RX_PIN + #define X2_SERIAL_RX_PIN -1 + #endif + + #ifndef Y_SERIAL_TX_PIN + #define Y_SERIAL_TX_PIN XS1_08_PIN + #endif + #ifndef Y_SERIAL_RX_PIN + #define Y_SERIAL_RX_PIN PIN_12_PIN + #endif + #ifndef Y2_SERIAL_TX_PIN + #define Y2_SERIAL_TX_PIN -1 + #endif + #ifndef Y2_SERIAL_RX_PIN + #define Y2_SERIAL_RX_PIN -1 + #endif + + #ifndef Z_SERIAL_TX_PIN + #define Z_SERIAL_TX_PIN XS1_08_PIN + #endif + #ifndef Z_SERIAL_RX_PIN + #define Z_SERIAL_RX_PIN PIN_12_PIN + #endif + #ifndef Z2_SERIAL_TX_PIN + #define Z2_SERIAL_TX_PIN XS1_08_PIN + #endif + #ifndef Z2_SERIAL_RX_PIN + #define Z2_SERIAL_RX_PIN PIN_12_PIN + #endif + + #ifndef E0_SERIAL_TX_PIN + #define E0_SERIAL_TX_PIN -1 + #endif + #ifndef E0_SERIAL_RX_PIN + #define E0_SERIAL_RX_PIN -1 + #endif + #ifndef E1_SERIAL_TX_PIN + #define E1_SERIAL_TX_PIN -1 + #endif + #ifndef E1_SERIAL_RX_PIN + #define E1_SERIAL_RX_PIN -1 + #endif + #ifndef E2_SERIAL_TX_PIN + #define E2_SERIAL_TX_PIN -1 + #endif + #ifndef E2_SERIAL_RX_PIN + #define E2_SERIAL_RX_PIN -1 + #endif + #ifndef E3_SERIAL_TX_PIN + #define E3_SERIAL_TX_PIN -1 + #endif + #ifndef E3_SERIAL_RX_PIN + #define E3_SERIAL_RX_PIN -1 + #endif + #ifndef E4_SERIAL_TX_PIN + #define E4_SERIAL_TX_PIN -1 + #endif + #ifndef E4_SERIAL_RX_PIN + #define E4_SERIAL_RX_PIN -1 + #endif + #ifndef E5_SERIAL_TX_PIN + #define E5_SERIAL_TX_PIN -1 + #endif + #ifndef E5_SERIAL_RX_PIN + #define E5_SERIAL_RX_PIN -1 + #endif + #ifndef E6_SERIAL_TX_PIN + #define E6_SERIAL_TX_PIN -1 + #endif + #ifndef E6_SERIAL_RX_PIN + #define E6_SERIAL_RX_PIN -1 + #endif + #ifndef E7_SERIAL_TX_PIN + #define E7_SERIAL_TX_PIN -1 + #endif + #ifndef E7_SERIAL_RX_PIN + #define E7_SERIAL_RX_PIN -1 + #endif +#endif + +/** + * LCD adapter. NOTE: These come in two variants. The socket keys can be + * on either side, and may be backwards on some displays. + * ------ ------ + * D37 |10 9 | D35 (MISO) D50 |10 9 | D52 (SCK) + * D17 | 8 7 | D16 D31 | 8 7 | D53 + * D23 6 5 D25 D33 6 5 D51 (MOSI) + * D27 | 4 3 | D29 D49 | 4 3 | D41 + * GND | 2 1 | 5V GND | 2 1 | -- + * ------ ------ + * EXP1 EXP2 + */ + +#ifndef EXP1_03_PIN + #define EXP1_03_PIN 29 + #define EXP1_04_PIN 27 + #define EXP1_05_PIN 25 + #define EXP1_06_PIN 23 + #define EXP1_07_PIN 16 + #define EXP1_08_PIN 17 + #define EXP1_09_PIN 35 + #define EXP1_10_PIN 37 + + #define EXP2_03_PIN 41 + #define EXP2_04_PIN 49 + #define EXP2_05_PIN XS6_05_PIN + #define EXP2_06_PIN 33 + #define EXP2_07_PIN 53 + #define EXP2_08_PIN 31 + #define EXP2_09_PIN XS6_03_PIN + #define EXP2_10_PIN XS6_07_PIN +#endif + +////////////////////////// +// LCDs and Controllers // +////////////////////////// + +#if ENABLED(ZONESTAR_12864LCD) + #define LCDSCREEN_NAME "ZONESTAR LCD12864" + #define LCD_SDSS 16 + #define LCD_PINS_RS 16 // ST7920_CS_PIN LCD_PIN_RS (PIN4 of LCD module) + #define LCD_PINS_ENABLE 23 // ST7920_DAT_PIN LCD_PIN_R/W (PIN5 of LCD module) + #define LCD_PINS_D4 17 // ST7920_CLK_PIN LCD_PIN_ENABLE (PIN6 of LCD module) + #define BTN_EN2 25 + #define BTN_EN1 27 + #define BTN_ENC 29 + #define BEEPER_PIN 37 + #define KILL_PIN 35 +#elif ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) + #define LCDSCREEN_NAME "Reprap LCD12864" + // Use EXP1 & EXP2 connector + #define LCD_PINS_RS 16 // ST7920_CS_PIN LCD_PIN_RS + #define LCD_PINS_ENABLE 17 // ST7920_DAT_PIN LCD_PIN_ENABLE + #define LCD_PINS_D4 23 // ST7920_CLK_PIN LCD_PIN_R/W + #define BTN_EN1 31 + #define BTN_EN2 33 + #define BTN_ENC 35 + #define BEEPER_PIN 37 + #define KILL_PIN 41 +#endif + +//================================================================================ +// OLED 128x64 +//================================================================================ + +#if EITHER(ZONESTAR_12864OLED, ZONESTAR_12864OLED_SSD1306) + #define LCDSCREEN_NAME "ZONESTAR 12864OLED" + #define LCD_SDSS 16 + #define LCD_PINS_RS 23 // RESET Pull low for 1s to init + #define LCD_PINS_DC 17 + #define DOGLCD_CS 16 // CS + #define BTN_EN2 25 + #define BTN_EN1 27 + #define BTN_ENC 29 + #define BEEPER_PIN -1 + #define KILL_PIN -1 + #if EITHER(OLED_HW_IIC, OLED_HW_SPI) + #error "Oops! You must choose SW SPI for ZRIB V53 board and connect the OLED screen to EXP1 connector." + #else // SW_SPI + #define DOGLCD_A0 LCD_PINS_DC + #define DOGLCD_MOSI 35 // SDA + #define DOGLCD_SCK 37 // SCK + #endif +#endif // OLED 128x64 + +//================================================================================ +// LCD 2004 KEYPAD +//================================================================================ + +#if ENABLED(ZONESTAR_LCD) + #define LCDSCREEN_NAME "LCD2004 ADCKEY" + #define LCD_PINS_RS EXP1_07_PIN + #define LCD_PINS_ENABLE EXP1_08_PIN + #define LCD_PINS_D4 EXP1_06_PIN + #define LCD_PINS_D5 EXP1_05_PIN + #define LCD_PINS_D6 EXP1_04_PIN + #define LCD_PINS_D7 EXP1_03_PIN + #define ADC_KEYPAD_PIN 10 // A10 for ADCKEY + #define BEEPER_PIN EXP1_10_PIN +#endif + +/** + * ZRIB V5.3 Main Board + * + * Available connectors on ZRIB V5.3 + * + * ======= + * | GND | + * |-----| E0 + * | 10 | (10) PB4 ** Pin23 ** PWM10 + * |-----| + * | GND | + * |-----| E1 + * | 7 | ( 7) PH4 ** Pin16 ** PWM7 + * |-----| + * | GND | + * |-----| FAN + * | 9 | ( 9) PH6 ** Pin18 ** PWM9 + * ======= + * ======= + * | GND | + * |-----| Heated Bed + * | 8 | ( 8) PH5 ** Pin17 ** PWM8 + * ======= + * ========== + * | 12-24V | + * |--------| Power + * | GND | + * ========== + * XS3 Connector + * ================= + * | 65 | GND | 5V | (65) PK3 ** Pin86 ** A11 + * |----|-----|----| + * | 66 | GND | 5V | (66) PK4 ** Pin85 ** A12 + * ================= + * XS3/Servos Connector + * ================= + * | 11 | GND | 5V | (11) PB5 ** Pin24 ** PWM11 + * |----|-----|----| + * | 12 | GND | 5V | (12) PB6 ** Pin25 ** PWM12 + * ================= + * ICSP + * ================= + * | 5V | 51 | GND | (51) PB2 ** Pin21 ** SPI_MOSI + * |----|----|-----| + * | 50 | 52 | RST | (50) PB3 ** Pin22 ** SPI_MISO + * ================= (52) PB1 ** Pin20 ** SPI_SCK + * XS6 Connector + * ====================== + * | 5V | GND | NC | 20 | (20) PD1 ** Pin44 ** I2C_SDA + * |----|-----|----|----| + * | 50 | 51 | 52 | 21 | (50) PB3 ** Pin22 ** SPI_MISO + * ====================== (51) PB2 ** Pin21 ** SPI_MOSI + * (52) PB1 ** Pin20 ** SPI_SCK + * (21) PD0 ** Pin43 ** I2C_SCL + * XS1 Connector + * ====================== + * | 5V | GND | NC | 47 | (47) PL2 ** Pin37 ** D47 + * |----|-----|----|----| + * | 42 | 43 | 44 | 45 | (45) PL4 ** Pin39 ** D45 + * ====================== (44) PL5 ** Pin40 ** D44 + * (43) PL6 ** Pin41 ** D43 + * (42) PL7 ** Pin42 ** D42 + * Temperature + * ================================== + * | GND | 69 | GND | 68 | GND | 67 | + * ================================== + * (69) PK7 ** Pin82 ** A15 + * (68) PK6 ** Pin83 ** A14 + * (67) PK5 ** Pin84 ** A13 + * Limit Switches + * ============ + * | 2 | GND | X+ ( 2) PE4 ** Pin6 ** PWM2 + * |----|-----| + * | 3 | GND | X- ( 3) PE5 ** Pin7 ** PWM3 + * |----|-----| + * | 15 | GND | Y+ (15) PJ0 ** Pin63 ** USART3_RX + * |----|-----| + * | 14 | GND | Y- (14) PJ1 ** Pin64 ** USART3_TX + * |----|-----| + * | 19 | GND | Z+ (19) PD2 ** Pin45 ** USART1_RX + * |----|-----| + * | 18 | GND | Z- (18) PD3 ** Pin46 ** USART1_TX + * ============ + * EXP1 + * ============ + * | 37 | 35 | (37) PC0 ** Pin53 ** D37 + * |-----|----| (35) PC2 ** Pin55 ** D35 + * | 17 | 16 | (17) PH0 ** Pin12 ** USART2_RX + * |-----|----| (16) PH1 ** Pin13 ** USART2_TX + * | 23 | 25 | (23) PA1 ** Pin77 ** D23 + * |-----|----| (25) PA3 ** Pin75 ** D25 + * | 27 | 29 | (27) PA5 ** Pin73 ** D27 + * |-----|----| (29) PA7 ** Pin71 ** D29 + * | GND | 5V | + * ============ + * EXP2 + * ============ + * | 50 | 52 | (50) PB3 ** Pin22 ** SPI_MISO + * |-----|----| (52) PB1 ** Pin20 ** SPI_SCK + * | 31 | 53 | (31) PC6 ** Pin59 ** D31 + * |-----|----| (53) PB0 ** Pin19 ** SPI_SS + * | 33 | 51 | (33) PC4 ** Pin57 ** D33 + * |-----|----| (51) PB2 ** Pin21 ** SPI_MOSI + * | 49 | 41 | (49) PL0 ** Pin35 ** D49 + * |-----|----| (41) PG0 ** Pin51 ** D41 + * | GND | NC | + * ============ + * + * PIN 12 + * ====== + * | 12 | (12) PB6 ** Pin25 ** D12 + * ====== +*/ diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h index 6ec5de4ba3..0cc3393ebc 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h @@ -1,6 +1,6 @@ /** * Marlin 3D Printer Firmware - * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * Copyright (C) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] * * Based on Sprinter and grbl. * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm From d99d0c8a10b2d0ee540e115b15eef24a71028863 Mon Sep 17 00:00:00 2001 From: Bruno Henrique de Paula Date: Fri, 4 Feb 2022 18:57:43 -0300 Subject: [PATCH 440/532] =?UTF-8?q?=F0=9F=93=8C=20Distinct=20BOARD=5FCREAL?= =?UTF-8?q?ITY=5FV422=20(#23674)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/pins.h | 4 ++- Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h | 2 +- .../pins/stm32f1/pins_CREALITY_V24S1_301.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V4.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V422.h | 31 +++++++++++++++++++ Marlin/src/pins/stm32f1/pins_CREALITY_V423.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V427.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V431.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V452.h | 2 +- Marlin/src/pins/stm32f1/pins_CREALITY_V453.h | 2 +- buildroot/share/scripts/upload.py | 10 +++--- 12 files changed, 49 insertions(+), 14 deletions(-) create mode 100644 Marlin/src/pins/stm32f1/pins_CREALITY_V422.h diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 8c69bccc2e..54a7c3c610 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -559,10 +559,12 @@ #include "stm32f1/pins_CHITU3D_V6.h" // STM32F1 env:chitu_f103 env:chitu_f103_maple #elif MB(CHITU3D_V9) #include "stm32f1/pins_CHITU3D_V9.h" // STM32F1 env:chitu_f103 env:chitu_f103_maple -#elif MB(CREALITY_V4, CREALITY_V422) +#elif MB(CREALITY_V4) #include "stm32f1/pins_CREALITY_V4.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(CREALITY_V4210) #include "stm32f1/pins_CREALITY_V4210.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple +#elif MB(CREALITY_V422) + #include "stm32f1/pins_CREALITY_V422.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer env:STM32F103RE_creality_maple #elif MB(CREALITY_V423) #include "stm32f1/pins_CREALITY_V423.h" // STM32F1 env:STM32F103RE_creality env:STM32F103RE_creality_xfer env:STM32F103RC_creality env:STM32F103RC_creality_xfer #elif MB(CREALITY_V427) diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h index ffd7baa00c..9d7e0f695b 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1.h @@ -22,7 +22,7 @@ #pragma once /** - * Creality v2.4.S1 (STM32F103RE) v101 as found in the Ender 7 board pin assignments + * Creality v2.4.S1 (STM32F103RE / STM32F103RC) v101 as found in the Ender 7 board pin assignments */ #define BOARD_INFO_NAME "Creality v2.4.S1 V101" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h index 336754bc1a..8616a8fb34 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V24S1_301.h @@ -22,7 +22,7 @@ #pragma once /** - * Creality V24S1_301 (STM32F103RCT) board pin assignments as found on Ender 3 S1 + * Creality V24S1_301 (STM32F103RE / STM32F103RC) board pin assignments as found on Ender 3 S1 */ #include "env_validate.h" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h index 6122206d6a..d6d4966241 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4.h @@ -22,7 +22,7 @@ #pragma once /** - * Creality 4.2.x (STM32F103RET6) board pin assignments + * Creality 4.2.x (STM32F103RE / STM32F103RC) board pin assignments */ #include "env_validate.h" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h index 0cc3393ebc..7bf34441bc 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V4210.h @@ -22,7 +22,7 @@ #pragma once /** - * CREALITY 4.2.10 (STM32F103) board pin assignments + * CREALITY 4.2.10 (STM32F103RE / STM32F103RC) board pin assignments */ #include "env_validate.h" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V422.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V422.h new file mode 100644 index 0000000000..5499adb076 --- /dev/null +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V422.h @@ -0,0 +1,31 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2022 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 + +/** + * CREALITY v4.2.2 (STM32F103RE / STM32F103RC) board pin assignments + */ + +#define BOARD_INFO_NAME "Creality v4.2.2" +#define DEFAULT_MACHINE_NAME "Creality3D" + +#include "pins_CREALITY_V4.h" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V423.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V423.h index 186051c1fc..c174b0e56e 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V423.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V423.h @@ -22,7 +22,7 @@ #pragma once /** - * CREALITY v4.2.3 (STM32F103) board pin assignments + * CREALITY v4.2.3 (STM32F103RE / STM32F103RC) board pin assignments */ #define BOARD_INFO_NAME "Creality v4.2.3" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V427.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V427.h index c327abee77..077f4c73a6 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V427.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V427.h @@ -22,7 +22,7 @@ #pragma once /** - * CREALITY v4.2.7 (STM32F103) board pin assignments + * CREALITY v4.2.7 (STM32F103RE / STM32F103RC) board pin assignments */ #define BOARD_INFO_NAME "Creality v4.2.7" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V431.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V431.h index 2f1f2ffb41..9226b537d9 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V431.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V431.h @@ -22,7 +22,7 @@ #pragma once /** - * CREALITY v4.3.1 (STM32F103) board pin assignments + * CREALITY v4.3.1 (STM32F103RE / STM32F103RC) board pin assignments */ #define BOARD_INFO_NAME "Creality v4.3.1" diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h index 9b6862d99b..ced64e2a89 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V452.h @@ -22,7 +22,7 @@ #pragma once /** - * Creality v4.5.2 (STM32F103RET6) board pin assignments + * Creality v4.5.2 (STM32F103RE / STM32F103RC) board pin assignments */ #if HAS_MULTI_HOTEND || E_STEPPERS > 1 diff --git a/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h b/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h index fd3ea93c32..e7296d1ed0 100644 --- a/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h +++ b/Marlin/src/pins/stm32f1/pins_CREALITY_V453.h @@ -22,7 +22,7 @@ #pragma once /** - * Creality v4.5.3 (STM32F103RET6) board pin assignments + * Creality v4.5.3 (STM32F103RE / STM32F103RC) board pin assignments */ #if HAS_MULTI_HOTEND || E_STEPPERS > 1 diff --git a/buildroot/share/scripts/upload.py b/buildroot/share/scripts/upload.py index ceb0db4f10..f6b25396ad 100644 --- a/buildroot/share/scripts/upload.py +++ b/buildroot/share/scripts/upload.py @@ -153,11 +153,13 @@ def Upload(source, target, env): # Set local upload params based on board type to change script behavior # "upload_delete_old_bins": delete all *.bin files in the root of SD Card - upload_delete_old_bins = marlin_motherboard in ['BOARD_CREALITY_V4', 'BOARD_CREALITY_V4210', 'BOARD_CREALITY_V423', 'BOARD_CREALITY_V427', - 'BOARD_CREALITY_V431', 'BOARD_CREALITY_V452', 'BOARD_CREALITY_V453', 'BOARD_CREALITY_V24S1'] + upload_delete_old_bins = marlin_motherboard in ['BOARD_CREALITY_V4', 'BOARD_CREALITY_V4210', 'BOARD_CREALITY_V422', 'BOARD_CREALITY_V423', + 'BOARD_CREALITY_V427', 'BOARD_CREALITY_V431', 'BOARD_CREALITY_V452', 'BOARD_CREALITY_V453', + 'BOARD_CREALITY_V24S1'] # "upload_random_name": generate a random 8.3 firmware filename to upload - upload_random_filename = marlin_motherboard in ['BOARD_CREALITY_V4', 'BOARD_CREALITY_V4210', 'BOARD_CREALITY_V423', 'BOARD_CREALITY_V427', - 'BOARD_CREALITY_V431', 'BOARD_CREALITY_V452', 'BOARD_CREALITY_V453', 'BOARD_CREALITY_V24S1'] and not marlin_long_filename_host_support + upload_random_filename = marlin_motherboard in ['BOARD_CREALITY_V4', 'BOARD_CREALITY_V4210', 'BOARD_CREALITY_V422', 'BOARD_CREALITY_V423', + 'BOARD_CREALITY_V427', 'BOARD_CREALITY_V431', 'BOARD_CREALITY_V452', 'BOARD_CREALITY_V453', + 'BOARD_CREALITY_V24S1'] and not marlin_long_filename_host_support try: From f2973ebd5f3ed0a2a00dd2d931246d713d7c3dd9 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 5 Feb 2022 00:15:43 +0000 Subject: [PATCH 441/532] [cron] Bump distribution date (2022-02-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 1b3c902da6..05d03d225d 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 "2022-02-04" +//#define STRING_DISTRIBUTION_DATE "2022-02-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 a73b6b1a46..49601ff7aa 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 "2022-02-04" + #define STRING_DISTRIBUTION_DATE "2022-02-05" #endif /** From f61f8e30224017d1f4369ffbd72b07bdf5284a9d Mon Sep 17 00:00:00 2001 From: Kelroy Date: Sat, 5 Feb 2022 01:40:35 +0100 Subject: [PATCH 442/532] =?UTF-8?q?=E2=9C=A8=20SAMD51=20Bricolemon=20/=20B?= =?UTF-8?q?ricolemon=20Lite=20boards=20(#23658)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/boards.h | 2 + Marlin/src/pins/pins.h | 4 + .../src/pins/samd/pins_BRICOLEMON_LITE_V1_0.h | 616 ++++++++++++++++ Marlin/src/pins/samd/pins_BRICOLEMON_V1_0.h | 676 ++++++++++++++++++ 4 files changed, 1298 insertions(+) create mode 100644 Marlin/src/pins/samd/pins_BRICOLEMON_LITE_V1_0.h create mode 100644 Marlin/src/pins/samd/pins_BRICOLEMON_V1_0.h diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index a5460d7b1d..21c0eaaf30 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -443,6 +443,8 @@ // #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 // // Custom board diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 54a7c3c610..4ba97a77a7 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -730,6 +730,10 @@ #elif MB(AGCM4_RAMPS_144) #include "samd/pins_RAMPS_144.h" // SAMD51 env:SAMD51_grandcentral_m4 +#elif MB(BRICOLEMON_V1_0) + #include "samd/pins_BRICOLEMON_V1_0.h" // SAMD51 env:SAMD51_grandcentral_m4 +#elif MB(BRICOLEMON_LITE_V1_0) + #include "samd/pins_BRICOLEMON_LITE_V1_0.h" // SAMD51 env:SAMD51_grandcentral_m4 // // Custom board (with custom PIO env) diff --git a/Marlin/src/pins/samd/pins_BRICOLEMON_LITE_V1_0.h b/Marlin/src/pins/samd/pins_BRICOLEMON_LITE_V1_0.h new file mode 100644 index 0000000000..1e0efcf0b2 --- /dev/null +++ b/Marlin/src/pins/samd/pins_BRICOLEMON_LITE_V1_0.h @@ -0,0 +1,616 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2022 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 + +/** + * BRICOLEMON LITE Board. Based on atsamd51 (AGCM4), bootloader and credits by ADAFRUIT. + * This board its a 3.3V LOGIC Board, following the ADAFRUIT example, all of the board is open source. + * Schematic: Refer to the Bricolemon + * 3DSTEP: https://github.com/bricogeek/bricolemon/blob/master/Documentacion/Bricolemon%20Lite/LC_BG_002_PCB_V1I4.step + * PinDemux: https://github.com/bricogeek/bricolemon/blob/master/Documentacion/Bricolemon/PinDEMUX.xlsx + * + * NOTE: We need the Serial port on the -1 to make it work!!. Remember to change it on configuration.h #define SERIAL_PORT -1 + */ + +#if NOT_TARGET(ARDUINO_GRAND_CENTRAL_M4) + #error "Oops! Select 'Adafruit Grand Central M4' in 'Tools > Board.'" +#endif + +#ifndef BOARD_INFO_NAME + #define BOARD_INFO_NAME "BRICOLEMON LITE V1.0" // , Lemoncrest & BricoGeek collaboration. +#endif + +/** + * EEPROM EMULATION: Works with some bugs already, but the board needs an I2C EEPROM memory soldered on. + */ +//#define FLASH_EEPROM_EMULATION +#define I2C_EEPROM // EEPROM on I2C-0 +#define MARLIN_EEPROM_SIZE 0x70000 // 512K (CAT24C512) + +// This is another option to emulate an EEPROM, but it's more efficient to not lose the data in the first place. +//#define SDCARD_EEPROM_EMULATION + +// +// BLTOUCH PIN: This pin is the signal pin for the BLTOUCH sensor. +// +#define SERVO0_PIN 33 // BLTouch PWM + +// +// Limit Switches +// +#define X_STOP_PIN 10 +#define Y_STOP_PIN 11 +#define Z_STOP_PIN 12 + +// +// Z Probe (when not Z_MIN_PIN) +// +#ifndef Z_MIN_PROBE_PIN + #define Z_MIN_PROBE_PIN 12 +#endif + +// +// Steppers +// +#define X_STEP_PIN 3 +#define X_DIR_PIN 22 +#define X_ENABLE_PIN 26 + +#define Y_STEP_PIN 4 +#define Y_DIR_PIN 23 +#define Y_ENABLE_PIN 27 + +#define Z_STEP_PIN 5 +#define Z_DIR_PIN 24 +#define Z_ENABLE_PIN 28 + +#define E0_STEP_PIN 2 +#define E0_DIR_PIN 25 +#define E0_ENABLE_PIN 29 + +// Filament runout. You may choose to use this pin for some other purpose. It's a normal GPIO that can be configured as I/O. +// For example, a switch to detect any kind of behavior, Power supply pin .... etc. +#define FIL_RUNOUT_PIN 32 + +// +// Temperature Sensors +// +#define TEMP_0_PIN 1 +#define TEMP_BED_PIN 3 + +// +// Heaters / Fans +// +#define HEATER_0_PIN 6 +#define HEATER_BED_PIN 7 +#define FAN_PIN 8 +#define FAN1_PIN 9 + +// +// LCD / Controller +// + +/** + * Bricolemon Expansion connectors + * + * ------ ------ + * VCC | 1 2 | GND KILL | 1 2 | GND + * LCD7 | 3 4 | LCDD6 RESET | 3 4 | SD_DETECT + * LCD5 | 5 6 LCDD4 MOSI | 5 6 BTN_EN1 + * LCDRS | 7 8 | LCDDE SS | 7 8 | BTN_EN2 + * BTN_ENCODER | 9 10 | BEEPER SCLK | 9 10 | MISO + * ------ ------ + * EXP1 EXP2 + * + *- This extra connector is for a serial display like the MKS TFT. + * MKS TFT + * ------ + * RX0 | . . | NC + * TX0 | . . NC + * GND | . . GND + * 5B | . . | 5V + * ------ + * + *- Special mapping of EXP1 to EXP3 to work with Ender displays. + * + * Enable CR10_STOCKDISPLAY in Configuration.h and connect EXP1 to the display EXP3 with this mapping. + * ------ + * VCC | 1 2 | GND + * LCDDE | 3 4 | LCDRS + * LCDD4 | 5 6 BTN_EN2 + * RESET | 7 8 | BTN_EN1 + * BTN_ENCODER | 9 10 | BEEPER + * ------ + * + *- Digital pinout reference of the Bricolemon for advanced users/configurations. + * + * ------ ------ + * VCC | 1 2 | GND D49 | 1 2 | GND + * D39 | 3 4 | D38 RST | 3 4 | D44 + * D37 | 5 6 D36 D51 | 5 6 D42 + * D34 | 7 8 | D35 D53 | 7 8 | D43 + * D40 | 9 10 | D41 D52 | 9 10 | D50 + * ------ ------ + * EXP1 EXP2 + * + *- Pin table overview + * LCD--- SPI--- + * LCD4 36 MISO 50 + * LCD5 37 SS 53 + * LCD6 38 SCKL 52 + * LCD7 39 MOSI 51 + * LCDRS 34 BEEPER + * LCDDE 35 BEEP 41 + * ENCODER--- SD-CARD--- + * BTN_EN1 42 + * BTN_EN2 43 SD_DETECT 44 + * BTN_ENCODER 40 KILL_PIN 49 + */ + +#define EXP1_03_PIN 39 +#define EXP1_04_PIN 38 +#define EXP1_05_PIN 37 +#define EXP1_06_PIN 36 +#define EXP1_07_PIN 34 +#define EXP1_08_PIN 35 +#define EXP1_09_PIN 40 +#define EXP1_10_PIN 41 + +#define EXP2_01_PIN 49 +#define EXP2_04_PIN 44 +#define EXP2_05_PIN 51 +#define EXP2_06_PIN 42 +#define EXP2_07_PIN 53 +#define EXP2_08_PIN 43 +#define EXP2_09_PIN 52 +#define EXP2_10_PIN 50 + +#if ENABLED(CR10_STOCKDISPLAY) + #define EXP3_03_PIN EXP1_03_PIN + #define EXP3_04_PIN EXP1_04_PIN + #define EXP3_05_PIN EXP1_05_PIN + #define EXP3_06_PIN EXP1_06_PIN + #define EXP3_07_PIN EXP1_07_PIN + #define EXP3_08_PIN EXP1_08_PIN + #define EXP3_09_PIN EXP1_09_PIN + #define EXP3_10_PIN EXP1_10_PIN +#endif + +/************************************/ +/***** Configurations Section ******/ +/************************************/ + +/** + * This section starts with the pins_RAMPS_144.h as example, after if you need any new + * display, you could use normal duponts and connect it with with the scheme showed before. + * Tested: + * - Ender 3 Old display (Character LCD) + * - Ender 3 New Serial DWING Display + * - Reprap Display + * - Ender 5 New Serial Display + * - Any Reprap character display like + */ + +#if HAS_WIRED_LCD + + // + // LCD Display output pins + // + #if HAS_DWIN_E3V2 || IS_DWIN_MARLINUI + + #if LCD_SERIAL_PORT != 1 + #error "LCD_SERIAL_PORT should be 1 for this display." + #endif + + // DWIN Encoder + #define BTN_ENC EXP1_09_PIN + #define BTN_EN1 EXP1_08_PIN + #define BTN_EN2 EXP1_07_PIN + + #ifndef BEEPER_PIN + #define BEEPER_PIN EXP1_10_PIN + #undef SPEAKER + #endif + + #elif ENABLED(REPRAPWORLD_GRAPHICAL_LCD) + + // TO TEST + //#define LCD_PINS_RS EXP2_01_PIN // CS chip select /SS chip slave select + //#define LCD_PINS_ENABLE EXP2_05_PIN // SID (MOSI) + //#define LCD_PINS_D4 EXP2_09_PIN // SCK (CLK) clock + + #elif BOTH(IS_NEWPANEL, PANEL_ONE) + + // TO TEST + //#define LCD_PINS_RS EXP1_09_PIN + //#define LCD_PINS_ENABLE EXP2_06_PIN + //#define LCD_PINS_D4 57 // Mega/Due:65 - AGCM4:57 + //#define LCD_PINS_D5 58 // Mega/Due:66 - AGCM4:58 + //#define LCD_PINS_D6 EXP2_04_PIN + //#define LCD_PINS_D7 56 // Mega/Due:64 - AGCM4:56 + + #else + + #if ENABLED(CR10_STOCKDISPLAY) + + // TO TEST + #define LCD_PINS_RS EXP3_04_PIN + #define LCD_PINS_ENABLE EXP3_03_PIN + #define LCD_PINS_D4 EXP3_05_PIN + + #if !IS_NEWPANEL + // TO TEST + //#define BEEPER_PIN EXP3_05_PIN + #endif + + #elif ENABLED(ZONESTAR_LCD) + + // TO TEST + //#define LCD_PINS_RS 56 // Mega/Due:64 - AGCM4:56 + //#define LCD_PINS_ENABLE EXP2_04_PIN + //#define LCD_PINS_D4 55 // Mega/Due:63 - AGCM4:55 + //#define LCD_PINS_D5 EXP1_09_PIN + //#define LCD_PINS_D6 EXP2_06_PIN + //#define LCD_PINS_D7 57 // Mega/Due:65 - AGCM4:57 + + #else + + #if EITHER(MKS_12864OLED, MKS_12864OLED_SSD1306) + // TO TEST + //#define LCD_PINS_DC 25 // Set as output on init + //#define LCD_PINS_RS 27 // Pull low for 1s to init + // DOGM SPI LCD Support + //#define DOGLCD_CS 16 + //#define DOGLCD_MOSI 17 + //#define DOGLCD_SCK 23 + //#define DOGLCD_A0 LCD_PINS_DC + + + #else + // Definitions for any standard Display + #define LCD_PINS_RS EXP1_07_PIN + #define LCD_PINS_ENABLE EXP1_08_PIN + #define LCD_PINS_D4 EXP1_06_PIN + #define LCD_PINS_D5 EXP1_05_PIN + #define LCD_PINS_D6 EXP1_04_PIN + #endif + + #define LCD_PINS_D7 EXP1_03_PIN + + #if !IS_NEWPANEL + #define BEEPER_PIN EXP1_10_PIN + #endif + + #endif + + #if !IS_NEWPANEL + // Buttons attached to a shift register + // Not wired yet + //#define SHIFT_CLK_PIN EXP1_04_PIN + //#define SHIFT_LD_PIN EXP2_06_PIN + //#define SHIFT_OUT_PIN EXP1_09_PIN + //#define SHIFT_EN_PIN 17 + #endif + + #endif + + // + // LCD Display input pins + // + #if IS_NEWPANEL + + #if IS_RRD_SC + + #define BEEPER_PIN EXP1_10_PIN + + #if ENABLED(CR10_STOCKDISPLAY) + // TO TEST + #define BTN_EN1 EXP3_08_PIN + #define BTN_EN2 EXP3_06_PIN + + #else + // Definitions for any standard Display + #define BTN_EN1 EXP2_06_PIN + #define BTN_EN2 EXP2_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 + + #define BTN_ENC EXP1_09_PIN + #ifndef SD_DETECT_PIN + #define SD_DETECT_PIN EXP2_04_PIN + #endif + #define KILL_PIN EXP2_01_PIN + + #if ENABLED(BQ_LCD_SMART_CONTROLLER) + //#define LCD_BACKLIGHT_PIN EXP1_03_PIN // TO TEST + #endif + + #elif ENABLED(REPRAPWORLD_GRAPHICAL_LCD) + + // TO TEST + //#define BTN_EN1 56 // Mega/Due:64 - AGCM4:56 + //#define BTN_EN2 72 // Mega/Due:59 - AGCM4:72 + //#define BTN_ENC 55 + //#define SD_DETECT_PIN EXP2_06_PIN + + #elif ENABLED(LCD_I2C_PANELOLU2) + + // TO TEST + //#define BTN_EN1 47 + //#define BTN_EN2 EXP2_08_PIN + //#define BTN_ENC 32 + //#define LCD_SDSS SDSS + //#define KILL_PIN EXP1_10_PIN + + #elif ENABLED(LCD_I2C_VIKI) + + // TO TEST + //#define BTN_EN1 EXP1_09_PIN // https://files.panucatt.com/datasheets/viki_wiring_diagram.pdf explains 40/42. + //#define BTN_EN2 EXP2_06_PIN + //#define BTN_ENC -1 + + //#define LCD_SDSS SDSS + //#define SD_DETECT_PIN EXP2_01_PIN + + #elif ANY(VIKI2, miniVIKI) + + // TO TEST + //#define DOGLCD_CS 45 + //#define DOGLCD_A0 EXP2_04_PIN + //#define LCD_SCREEN_ROT_180 + + //#define BEEPER_PIN 33 + //#define STAT_LED_RED_PIN 32 + //#define STAT_LED_BLUE_PIN EXP1_08_PIN + + //#define BTN_EN1 22 + //#define BTN_EN2 7 + //#define BTN_ENC EXP1_03_PIN + + //#define SD_DETECT_PIN -1 // Pin 49 for display SD interface, 72 for easy adapter board + //#define KILL_PIN 31 + + #elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) + + // TO TEST + //#define DOGLCD_CS 29 + //#define DOGLCD_A0 27 + + //#define BEEPER_PIN 23 + //#define LCD_BACKLIGHT_PIN 33 + + //#define BTN_EN1 EXP1_08_PIN + //#define BTN_EN2 EXP1_05_PIN + //#define BTN_ENC 31 + + //#define LCD_SDSS SDSS + //#define SD_DETECT_PIN EXP2_01_PIN + //#define KILL_PIN EXP1_10_PIN + + #elif EITHER(MKS_MINI_12864, FYSETC_MINI_12864) + + // TO TEST + //#define BEEPER_PIN EXP1_05_PIN + //#define BTN_ENC EXP1_08_PIN + //#define SD_DETECT_PIN EXP2_01_PIN + + //#ifndef KILL_PIN + // #define KILL_PIN EXP1_10_PIN + //#endif + + #if ENABLED(MKS_MINI_12864) + + // TO TEST + //#define DOGLCD_A0 27 + //#define DOGLCD_CS 25 + + // GLCD features + // Uncomment screen orientation + //#define LCD_SCREEN_ROT_90 + //#define LCD_SCREEN_ROT_180 + //#define LCD_SCREEN_ROT_270 + + // not connected to a pin + //#define LCD_BACKLIGHT_PIN 57 // backlight LED on A11/D? (Mega/Due:65 - AGCM4:57) + + //#define BTN_EN1 31 + //#define BTN_EN2 33 + + #elif ENABLED(FYSETC_MINI_12864) + + // From https://wiki.fysetc.com/Mini12864_Panel/?fbclid=IwAR1FyjuNdVOOy9_xzky3qqo_WeM5h-4gpRnnWhQr_O1Ef3h0AFnFXmCehK8 + + // TO TEST + //#define DOGLCD_A0 16 + //#define DOGLCD_CS 17 + + //#define BTN_EN1 33 + //#define BTN_EN2 31 + + //#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 23 // 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 + // TO TEST + //#define RGB_LED_R_PIN 25 + #endif + #ifndef RGB_LED_G_PIN + // TO TEST + //#define RGB_LED_G_PIN 27 + #endif + #ifndef RGB_LED_B_PIN + // TO TEST + //#define RGB_LED_B_PIN 29 + #endif + #elif ENABLED(FYSETC_MINI_12864_2_1) + // TO TEST + //#define NEOPIXEL_PIN 25 + #endif + + #endif + + #elif ENABLED(MINIPANEL) + + // TO TEST + //#define BEEPER_PIN EXP2_06_PIN + // not connected to a pin + //#define LCD_BACKLIGHT_PIN 57 // backlight LED on A11/D? (Mega/Due:65 - AGCM4:57) + + //#define DOGLCD_A0 EXP2_04_PIN + //#define DOGLCD_CS 58 // Mega/Due:66 - AGCM4:58 + + // GLCD features + // Uncomment screen orientation + //#define LCD_SCREEN_ROT_90 + //#define LCD_SCREEN_ROT_180 + //#define LCD_SCREEN_ROT_270 + + //#define BTN_EN1 EXP1_09_PIN + //#define BTN_EN2 55 // Mega/Due:63 - AGCM4:55 + //#define BTN_ENC 72 // Mega/Due:59 - AGCM4:72 + + //#define SD_DETECT_PIN EXP2_01_PIN + //#define KILL_PIN 56 // Mega/Due:64 - AGCM4:56 + + #elif ENABLED(ZONESTAR_LCD) + + // TO TEST + //#define ADC_KEYPAD_PIN 12 + + #elif ENABLED(AZSMZ_12864) + + // TO TEST + + #else + + // Beeper on AUX-4 + //#define BEEPER_PIN 33 + + // Buttons are directly attached to AUX-2 + #if IS_RRW_KEYPAD + // TO TEST + //#define SHIFT_OUT_PIN EXP1_09_PIN + //#define SHIFT_CLK_PIN EXP2_04_PIN + //#define SHIFT_LD_PIN EXP2_06_PIN + //#define BTN_EN1 56 // Mega/Due:64 - AGCM4:56 + //#define BTN_EN2 72 // Mega/Due:59 - AGCM4:72 + //#define BTN_ENC 55 // Mega/Due:63 - AGCM4:55 + #elif ENABLED(PANEL_ONE) + // TO TEST + //#define BTN_EN1 72 // AUX2 PIN 3 (Mega/Due:59 - AGCM4:72) + //#define BTN_EN2 55 // AUX2 PIN 4 (Mega/Due:63 - AGCM4:55) + //#define BTN_ENC EXP2_01_PIN // AUX3 PIN 7 + #else + // TO TEST + //#define BTN_EN1 EXP1_05_PIN + //#define BTN_EN2 EXP1_08_PIN + //#define BTN_ENC 31 + #endif + + #if ENABLED(G3D_PANEL) + // TO TEST + //#define SD_DETECT_PIN EXP2_01_PIN + //#define KILL_PIN EXP1_10_PIN + #endif + + #endif + #endif // IS_NEWPANEL + +#endif // HAS_WIRED_LCD + +// +// SD Support +// + +/** + * Bricolemon has an SD slot, but to change it to your LCD or Custom, set the option to one of the following: + * + * LCD - Use the SD drive in the external LCD controller. + * ONBOARD - Use the SD drive on the control board. + * CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file). + * + * :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ] + */ + +#ifndef SDCARD_CONNECTION + #define SDCARD_CONNECTION ONBOARD +#endif + +#if SD_CONNECTION_IS(ONBOARD) + #define SDSS 83 + #undef SD_DETECT_PIN + #define SD_DETECT_PIN 95 +#else + #define SDSS EXP2_07_PIN +#endif + +#if HAS_TMC_UART + /** + * Address for the UART Configuration of the TMC2209. Override in Configuration files. + * To test TMC2209 Steppers enable TMC_DEBUG in Configuration_adv.h and test the M122 command with voltage on the steppers. + */ + #ifndef X_SLAVE_ADDRESS + #define X_SLAVE_ADDRESS 0b00 + #endif + #ifndef Y_SLAVE_ADDRESS + #define Y_SLAVE_ADDRESS 0b01 + #endif + #ifndef Z_SLAVE_ADDRESS + #define Z_SLAVE_ADDRESS 0b10 + #endif + #ifndef E0_SLAVE_ADDRESS + #define E0_SLAVE_ADDRESS 0b11 + #endif + + /** + * TMC2208/TMC2209 stepper drivers + * It seems to work perfectly fine on Software Serial, if an advanced user wants to test, you could use the SAMD51 Serial1 and Serial 2. Be careful with the Sercom configurations. + */ + //#define X_HARDWARE_SERIAL Serial1 + //#define Y_HARDWARE_SERIAL Serial1 + //#define Z_HARDWARE_SERIAL Serial1 + //#define E0_HARDWARE_SERIAL Serial1 + + // This is the stable default value after testing, but, higher UART rates could be configured, remeber to test the Steppers with the M122 command to check if everything works. + #define TMC_BAUD_RATE 250000 + + // + // Software serial + // + #define X_SERIAL_TX_PIN 0 + #define X_SERIAL_RX_PIN 1 + + #define Y_SERIAL_TX_PIN X_SERIAL_TX_PIN + #define Y_SERIAL_RX_PIN X_SERIAL_RX_PIN + + #define Z_SERIAL_TX_PIN X_SERIAL_TX_PIN + #define Z_SERIAL_RX_PIN X_SERIAL_RX_PIN + + #define E0_SERIAL_TX_PIN X_SERIAL_TX_PIN + #define E0_SERIAL_RX_PIN X_SERIAL_RX_PIN + +#endif diff --git a/Marlin/src/pins/samd/pins_BRICOLEMON_V1_0.h b/Marlin/src/pins/samd/pins_BRICOLEMON_V1_0.h new file mode 100644 index 0000000000..2484674a90 --- /dev/null +++ b/Marlin/src/pins/samd/pins_BRICOLEMON_V1_0.h @@ -0,0 +1,676 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2022 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 + +/** + * BRICOLEMON Board. Based on ATSAMD51 (AGCM4), bootloader and credits by ADAFRUIT. + */ + +#if NOT_TARGET(ARDUINO_GRAND_CENTRAL_M4) + #error "Oops! Select 'Adafruit Grand Central M4' in 'Tools > Board.'" +#endif + +#ifndef BOARD_INFO_NAME + #define BOARD_INFO_NAME "BRICOLEMON V1.0" // , Lemoncrest & BricoGeek collaboration. +#endif + +/** + * BRICOLEMON Board. Based on atsamd51 (AGCM4), bootloader and credits by ADAFRUIT. + * This board its a 3.3V LOGIC Board, following the ADAFRUIT example, all of the board is open source. + * Schematic: https://github.com/bricogeek/bricolemon/blob/master/Documentacion/Bricolemon/EsquemaBricolemon_REVB.pdf + * 3DSTEP: https://github.com/bricogeek/bricolemon/blob/master/Documentacion/Bricolemon/BricolemonREVB.step + * PinDemux: https://github.com/bricogeek/bricolemon/blob/master/Documentacion/Bricolemon/PinDEMUX.xlsx + * + * NOTE: We need the Serial port on the -1 to make it work!!. Remember to change it on configuration.h #define SERIAL_PORT -1 + */ + +/** + * EEPROM EMULATION: Works with some bugs already, but the board needs an I2C EEPROM memory soldered on. + */ +//#define FLASH_EEPROM_EMULATION +#define I2C_EEPROM // EEPROM on I2C-0 +#define MARLIN_EEPROM_SIZE 0x70000 // 512K (CAT24C512) + +//This its another option to emulate an EEPROM, but its more efficient to dont loose the data the first One. +//#define SDCARD_EEPROM_EMULATION + +// +// BLTouch +// +#define SERVO0_PIN 33 // BLTouch PWM + +// +// Limit Switches +// +#define X_STOP_PIN 10 +#define Y_STOP_PIN 11 +#define Z_STOP_PIN 12 + +/** + * NOTE: Useful if extra TMC2209 are to be used as independent axes. + * We need to configure the new digital PIN, for this we could configure on the board the extra pin of this stepper, for example as a MIN_PIN/MAX_PIN. This pin is the D14. + */ +//#define Z2_STOP_PIN 14 +//#define X2_STOP_PIN 14 +//#define Y2_STOP_PIN 14 + +// +// Z Probe (when not Z_MIN_PIN) +// +#ifndef Z_MIN_PROBE_PIN + #define Z_MIN_PROBE_PIN 12 +#endif + +// +// Steppers +// +#define X_STEP_PIN 3 +#define X_DIR_PIN 22 +#define X_ENABLE_PIN 26 + +#define Y_STEP_PIN 4 +#define Y_DIR_PIN 23 +#define Y_ENABLE_PIN 27 + +#define Z_STEP_PIN 5 +#define Z_DIR_PIN 24 +#define Z_ENABLE_PIN 28 + +#define E0_STEP_PIN 2 +#define E0_DIR_PIN 25 +#define E0_ENABLE_PIN 29 + +#define E1_STEP_PIN 13 +#define E1_DIR_PIN 46 +#define E1_ENABLE_PIN 47 + +// Filament runout. You may choose to use this pin for some other purpose. It's a normal GPIO that can be configured as I/O. +// For example, a switch to detect any kind of behavior, Power supply pin .... etc. +#define FIL_RUNOUT_PIN 32 + +// This board have the option to use an extra TMC2209 stepper, one of the use could be as a second extruder. +#if EXTRUDERS < 2 + // TODO: Corregir aquí que cuando tenemos dos extrusores o lo que sea, utiliza los endstop que le sobran, osea los max, no hay Z2_endstop + #if NUM_Z_STEPPER_DRIVERS > 1 + #define Z2_STOP_PIN 14 + #endif +#else + // If we want to configure the extra stepper as a Extruder, we should have undef all of the extra motors. + #undef X2_DRIVER_TYPE + #undef Y2_DRIVER_TYPE + #undef Z2_DRIVER_TYPE + #undef Z3_DRIVER_TYPE + #undef Z4_DRIVER_TYPE + + // Si tenemos más de un extrusor lo que hacemos es definir el nuevo extrusor así como sus pines + // Acordarse de definir el #define TEMP_SENSOR_1, ya que este contiene el tipo de sonda del extrusor E1 + + #define FIL_RUNOUT2_PIN 14 + +#endif + +// +// Extruder / Bed +// + +// Temperature Sensors +#define TEMP_0_PIN 1 + +// You could use one of the ADC for a temp chamber if you don't use the second extruder, for example. +#if TEMP_SENSOR_CHAMBER > 0 + #define TEMP_CHAMBER_PIN 3 +#else + #define TEMP_1_PIN 3 +#endif + +#define TEMP_BED_PIN 2 + +// +// Heaters / Fans +// +#define HEATER_0_PIN 6 +#define HEATER_1_PIN 45 +#define HEATER_BED_PIN 7 + +// The board has 4 PWM fans, use and configure as desired +#define FAN_PIN 8 +#define FAN1_PIN 9 +#define FAN2_PIN 30 +#define FAN3_PIN 31 + +// +// LCD / Controller +// + +/** + * Bricolemon Expansion connectors + * + * ------ ------ + * VCC | 1 2 | GND KILL | 1 2 | GND + * LCD7 | 3 4 | LCDD6 RESET | 3 4 | SD_DETECT + * LCD5 | 5 6 LCDD4 MOSI | 5 6 BTN_EN1 + * LCDRS | 7 8 | LCDDE SS | 7 8 | BTN_EN2 + * BTN_ENCODER | 9 10 | BEEPER SCLK | 9 10 | MISO + * ------ ------ + * EXP1 EXP2 + * + *- This extra connector is for a serial display like the MKS TFT. + * MKS TFT + * ------ + * RX0 | . . | NC + * TX0 | . . NC + * GND | . . GND + * 5B | . . | 5V + * ------ + * + *- Special mapping of EXP1 to EXP3 to work with Ender displays. + * + * Enable CR10_STOCKDISPLAY in Configuration.h and connect EXP1 to the display EXP3 with this mapping. + * ------ + * VCC | 1 2 | GND + * LCDDE | 3 4 | LCDRS + * LCDD4 | 5 6 BTN_EN2 + * RESET | 7 8 | BTN_EN1 + * BTN_ENCODER | 9 10 | BEEPER + * ------ + * + *- Digital pinout reference of the Bricolemon for advanced users/configurations. + * + * ------ ------ + * VCC | 1 2 | GND D49 | 1 2 | GND + * D39 | 3 4 | D38 RST | 3 4 | D44 + * D37 | 5 6 D36 D51 | 5 6 D42 + * D34 | 7 8 | D35 D53 | 7 8 | D43 + * D40 | 9 10 | D41 D52 | 9 10 | D50 + * ------ ------ + * EXP1 EXP2 + * + *- Pin table overview + * LCD--- SPI--- + * LCD4 36 MISO 50 + * LCD5 37 SS 53 + * LCD6 38 SCKL 52 + * LCD7 39 MOSI 51 + * LCDRS 34 BEEPER + * LCDDE 35 BEEP 41 + * ENCODER--- SD-CARD--- + * BTN_EN1 42 SD_DETECT 44 + * BTN_EN2 43 KILL_PIN 49 + * BTN_ENCODER 40 + */ + +#define EXP1_03_PIN 39 +#define EXP1_04_PIN 38 +#define EXP1_05_PIN 37 +#define EXP1_06_PIN 36 +#define EXP1_07_PIN 34 +#define EXP1_08_PIN 35 +#define EXP1_09_PIN 40 +#define EXP1_10_PIN 41 + +#define EXP2_01_PIN 49 +#define EXP2_04_PIN 44 +#define EXP2_05_PIN 51 +#define EXP2_06_PIN 42 +#define EXP2_07_PIN 53 +#define EXP2_08_PIN 43 +#define EXP2_09_PIN 52 +#define EXP2_10_PIN 50 + +#if ENABLED(CR10_STOCKDISPLAY) + #define EXP3_03_PIN EXP1_03_PIN + #define EXP3_04_PIN EXP1_04_PIN + #define EXP3_05_PIN EXP1_05_PIN + #define EXP3_06_PIN EXP1_06_PIN + #define EXP3_07_PIN EXP1_07_PIN + #define EXP3_08_PIN EXP1_08_PIN + #define EXP3_09_PIN EXP1_09_PIN + #define EXP3_10_PIN EXP1_10_PIN +#endif + +/************************************/ +/***** Configurations Section ******/ +/************************************/ + +/** + * This sections starts with the pins_RAMPS_144.h as example, after if you need any new + * display, you could use normal duponts and connect it with with the scheme showed before. + * Tested: + * - Ender 3 Old display (Character LCD) + * - Ender 3 New Serial DWING Display + * - Reprap Display + * - Ender 5 New Serial Display + * - Any Reprap character display like + */ + +#if HAS_WIRED_LCD + + // + // LCD Display output pins + // + + #if HAS_DWIN_E3V2 || IS_DWIN_MARLINUI + + #if LCD_SERIAL_PORT != 1 + #error "LCD_SERIAL_PORT should be 1 for this display." + #endif + + // DWIN Encoder + #define BTN_ENC EXP1_09_PIN + #define BTN_EN1 EXP1_08_PIN + #define BTN_EN2 EXP1_07_PIN + + #ifndef BEEPER_PIN + #define BEEPER_PIN EXP1_10_PIN + #undef SPEAKER + #endif + + #elif ENABLED(REPRAPWORLD_GRAPHICAL_LCD) + + // TO TEST + //#define LCD_PINS_RS EXP2_01_PIN // CS chip select /SS chip slave select + //#define LCD_PINS_ENABLE EXP2_05_PIN // SID (MOSI) + //#define LCD_PINS_D4 EXP2_09_PIN // SCK (CLK) clock + + #elif BOTH(IS_NEWPANEL, PANEL_ONE) + + // TO TEST + //#define LCD_PINS_RS EXP1_09_PIN + //#define LCD_PINS_ENABLE EXP2_06_PIN + //#define LCD_PINS_D4 57 // Mega/Due:65 - AGCM4:57 + //#define LCD_PINS_D5 58 // Mega/Due:66 - AGCM4:58 + //#define LCD_PINS_D6 EXP2_04_PIN + //#define LCD_PINS_D7 56 // Mega/Due:64 - AGCM4:56 + + #else + + #if ENABLED(CR10_STOCKDISPLAY) + + // TO TEST + #define LCD_PINS_RS EXP3_04_PIN + #define LCD_PINS_ENABLE EXP3_03_PIN + #define LCD_PINS_D4 EXP3_05_PIN + + #if !IS_NEWPANEL + // TO TEST + //#define BEEPER_PIN EXP3_05_PIN + #endif + + #elif ENABLED(ZONESTAR_LCD) + + // TO TEST + //#define LCD_PINS_RS 56 // Mega/Due:64 - AGCM4:56 + //#define LCD_PINS_ENABLE EXP2_04_PIN + //#define LCD_PINS_D4 55 // Mega/Due:63 - AGCM4:55 + //#define LCD_PINS_D5 EXP1_09_PIN + //#define LCD_PINS_D6 EXP2_06_PIN + //#define LCD_PINS_D7 57 // Mega/Due:65 - AGCM4:57 + + #else + + #if EITHER(MKS_12864OLED, MKS_12864OLED_SSD1306) + // TO TEST + //#define LCD_PINS_DC 25 // Set as output on init + //#define LCD_PINS_RS 27 // Pull low for 1s to init + // DOGM SPI LCD Support + //#define DOGLCD_CS 16 + //#define DOGLCD_MOSI 17 + //#define DOGLCD_SCK 23 + //#define DOGLCD_A0 LCD_PINS_DC + + #else + // Definitions for any standard Display + #define LCD_PINS_RS EXP1_07_PIN + #define LCD_PINS_ENABLE EXP1_08_PIN + #define LCD_PINS_D4 EXP1_06_PIN + #define LCD_PINS_D5 EXP1_05_PIN + #define LCD_PINS_D6 EXP1_04_PIN + #endif + + #define LCD_PINS_D7 EXP1_03_PIN + + #if !IS_NEWPANEL + #define BEEPER_PIN EXP1_10_PIN + #endif + + #endif + + #if !IS_NEWPANEL + // Buttons attached to a shift register + // Not wired yet + //#define SHIFT_CLK_PIN EXP1_04_PIN + //#define SHIFT_LD_PIN EXP2_06_PIN + //#define SHIFT_OUT_PIN EXP1_09_PIN + //#define SHIFT_EN_PIN 17 + #endif + + #endif + + // + // LCD Display input pins + // + #if IS_NEWPANEL + + #if IS_RRD_SC + + #define BEEPER_PIN EXP1_10_PIN + + #if ENABLED(CR10_STOCKDISPLAY) + // TO TEST + #define BTN_EN1 EXP1_08_PIN + #define BTN_EN2 EXP1_06_PIN + #else + // Definitions fpr any standard Display + #define BTN_EN1 EXP2_06_PIN + #define BTN_EN2 EXP2_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 + + #define BTN_ENC EXP1_09_PIN + #ifndef SD_DETECT_PIN + #define SD_DETECT_PIN EXP2_04_PIN + #endif + #define KILL_PIN EXP2_01_PIN + + #if ENABLED(BQ_LCD_SMART_CONTROLLER) + //#define LCD_BACKLIGHT_PIN EXP1_03_PIN // TO TEST + #endif + + #elif ENABLED(REPRAPWORLD_GRAPHICAL_LCD) + + // TO TEST + //#define BTN_EN1 56 // Mega/Due:64 - AGCM4:56 + //#define BTN_EN2 72 // Mega/Due:59 - AGCM4:72 + //#define BTN_ENC 55 + //#define SD_DETECT_PIN EXP2_06_PIN + + #elif ENABLED(LCD_I2C_PANELOLU2) + + // TO TEST + //#define BTN_EN1 47 + //#define BTN_EN2 EXP2_08_PIN + //#define BTN_ENC 32 + //#define LCD_SDSS SDSS + //#define KILL_PIN EXP1_10_PIN + + #elif ENABLED(LCD_I2C_VIKI) + + // TO TEST + //#define BTN_EN1 EXP1_09_PIN // https://files.panucatt.com/datasheets/viki_wiring_diagram.pdf explains 40/42. + //#define BTN_EN2 EXP2_06_PIN + //#define BTN_ENC -1 + + //#define LCD_SDSS SDSS + //#define SD_DETECT_PIN EXP2_01_PIN + + #elif ANY(VIKI2, miniVIKI) + + // TO TEST + //#define DOGLCD_CS 45 + //#define DOGLCD_A0 EXP2_04_PIN + //#define LCD_SCREEN_ROT_180 + + //#define BEEPER_PIN 33 + //#define STAT_LED_RED_PIN 32 + //#define STAT_LED_BLUE_PIN EXP1_08_PIN + + //#define BTN_EN1 22 + //#define BTN_EN2 7 + //#define BTN_ENC EXP1_03_PIN + + //#define SD_DETECT_PIN -1 // Pin 49 for display SD interface, 72 for easy adapter board + //#define KILL_PIN 31 + + #elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) + + // TO TEST + //#define DOGLCD_CS 29 + //#define DOGLCD_A0 27 + + //#define BEEPER_PIN 23 + //#define LCD_BACKLIGHT_PIN 33 + + //#define BTN_EN1 EXP1_08_PIN + //#define BTN_EN2 EXP1_05_PIN + //#define BTN_ENC 31 + + //#define LCD_SDSS SDSS + //#define SD_DETECT_PIN EXP2_01_PIN + //#define KILL_PIN EXP1_10_PIN + + #elif EITHER(MKS_MINI_12864, FYSETC_MINI_12864) + + // TO TEST + //#define BEEPER_PIN EXP1_05_PIN + //#define BTN_ENC EXP1_08_PIN + //#define SD_DETECT_PIN EXP2_01_PIN + + //#ifndef KILL_PIN + // #define KILL_PIN EXP1_10_PIN + //#endif + + #if ENABLED(MKS_MINI_12864) + + // TO TEST + //#define DOGLCD_A0 27 + //#define DOGLCD_CS 25 + + // GLCD features + // Uncomment screen orientation + //#define LCD_SCREEN_ROT_90 + //#define LCD_SCREEN_ROT_180 + //#define LCD_SCREEN_ROT_270 + + // not connected to a pin + //#define LCD_BACKLIGHT_PIN 57 // backlight LED on A11/D? (Mega/Due:65 - AGCM4:57) + + //#define BTN_EN1 31 + //#define BTN_EN2 33 + + #elif ENABLED(FYSETC_MINI_12864) + + // From https://wiki.fysetc.com/Mini12864_Panel/?fbclid=IwAR1FyjuNdVOOy9_xzky3qqo_WeM5h-4gpRnnWhQr_O1Ef3h0AFnFXmCehK8 + + // TO TEST + //#define DOGLCD_A0 16 + //#define DOGLCD_CS 17 + + //#define BTN_EN1 33 + //#define BTN_EN2 31 + + //#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 23 // 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 + // TO TEST + //#define RGB_LED_R_PIN 25 + #endif + #ifndef RGB_LED_G_PIN + // TO TEST + //#define RGB_LED_G_PIN 27 + #endif + #ifndef RGB_LED_B_PIN + // TO TEST + //#define RGB_LED_B_PIN 29 + #endif + #elif ENABLED(FYSETC_MINI_12864_2_1) + // TO TEST + //#define NEOPIXEL_PIN 25 + #endif + + #endif + + #elif ENABLED(MINIPANEL) + + // TO TEST + //#define BEEPER_PIN EXP2_06_PIN + // not connected to a pin + //#define LCD_BACKLIGHT_PIN 57 // backlight LED on A11/D? (Mega/Due:65 - AGCM4:57) + + //#define DOGLCD_A0 EXP2_04_PIN + //#define DOGLCD_CS 58 // Mega/Due:66 - AGCM4:58 + + // GLCD features + // Uncomment screen orientation + //#define LCD_SCREEN_ROT_90 + //#define LCD_SCREEN_ROT_180 + //#define LCD_SCREEN_ROT_270 + + //#define BTN_EN1 EXP1_09_PIN + //#define BTN_EN2 55 // Mega/Due:63 - AGCM4:55 + //#define BTN_ENC 72 // Mega/Due:59 - AGCM4:72 + + //#define SD_DETECT_PIN EXP2_01_PIN + //#define KILL_PIN 56 // Mega/Due:64 - AGCM4:56 + + #elif ENABLED(ZONESTAR_LCD) + + // TO TEST + //#define ADC_KEYPAD_PIN 12 + + #elif ENABLED(AZSMZ_12864) + + // TO TEST + + #else + + // Beeper on AUX-4 + //#define BEEPER_PIN 33 + + // Buttons are directly attached to AUX-2 + #if IS_RRW_KEYPAD + // TO TEST + //#define SHIFT_OUT_PIN EXP1_09_PIN + //#define SHIFT_CLK_PIN EXP2_04_PIN + //#define SHIFT_LD_PIN EXP2_06_PIN + //#define BTN_EN1 56 // Mega/Due:64 - AGCM4:56 + //#define BTN_EN2 72 // Mega/Due:59 - AGCM4:72 + //#define BTN_ENC 55 // Mega/Due:63 - AGCM4:55 + #elif ENABLED(PANEL_ONE) + // TO TEST + //#define BTN_EN1 72 // AUX2 PIN 3 (Mega/Due:59 - AGCM4:72) + //#define BTN_EN2 55 // AUX2 PIN 4 (Mega/Due:63 - AGCM4:55) + //#define BTN_ENC EXP2_01_PIN // AUX3 PIN 7 + #else + // TO TEST + //#define BTN_EN1 EXP1_05_PIN + //#define BTN_EN2 EXP1_08_PIN + //#define BTN_ENC 31 + #endif + + #if ENABLED(G3D_PANEL) + // TO TEST + //#define SD_DETECT_PIN EXP2_01_PIN + //#define KILL_PIN EXP1_10_PIN + #endif + + #endif + #endif // IS_NEWPANEL + +#endif // HAS_WIRED_LCD + +// +// SD Support +// + +/** + * Bricolemon has an SD slot, but to change it to your LCD or Custom, set the option to one of the following: + * + * LCD - Use the SD drive in the external LCD controller. + * ONBOARD - Use the SD drive on the control board. + * CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file). + * + * :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ] + */ + +#ifndef SDCARD_CONNECTION + #define SDCARD_CONNECTION ONBOARD +#endif + +#if SD_CONNECTION_IS(ONBOARD) + #define SDSS 83 + #undef SD_DETECT_PIN + #define SD_DETECT_PIN 95 +#else + #define SDSS EXP2_07_PIN +#endif + +#if HAS_TMC_UART + + /** + * Address for the UART Configuration of the TMC2209. Override in Configuration files. + * To test TMC2209 Steppers enable TMC_DEBUG in Configuration_adv.h and test the M122 command with voltage on the steppers. + */ + #ifndef X_SLAVE_ADDRESS + #define X_SLAVE_ADDRESS 0b00 + #endif + #ifndef Y_SLAVE_ADDRESS + #define Y_SLAVE_ADDRESS 0b01 + #endif + #ifndef Z_SLAVE_ADDRESS + #define Z_SLAVE_ADDRESS 0b10 + #endif + #ifndef E0_SLAVE_ADDRESS + #define E0_SLAVE_ADDRESS 0b11 + #endif + #ifndef E1_SLAVE_ADDRESS + #define E1_SLAVE_ADDRESS 0b00 + #endif + + /** + * TMC2208/TMC2209 stepper drivers + * It seems to work perfectly fine on Software Serial, if an advanced user wants to test, you could use the SAMD51 Serial1 and Serial 2. Be careful with the Sercom configurations. + * Steppers 1,2,3,4 (X,Y,Z,E0) are on the Serial1, Sercom (RX = 0, TX = 1), extra stepper 5 (E1 or any axis you want) is on Serial2, Sercom (RX = 17, TX = 16) + */ + + //#define X_HARDWARE_SERIAL Serial1 + //#define Y_HARDWARE_SERIAL Serial1 + //#define Z_HARDWARE_SERIAL Serial1 + //#define E0_HARDWARE_SERIAL Serial1 + //#define E1_HARDWARE_SERIAL Serial2 + + #define TMC_BAUD_RATE 250000 + + // + // Software serial + // + #define X_SERIAL_TX_PIN 0 + #define X_SERIAL_RX_PIN 1 + + #define Y_SERIAL_TX_PIN X_SERIAL_TX_PIN + #define Y_SERIAL_RX_PIN X_SERIAL_RX_PIN + + #define Z_SERIAL_TX_PIN X_SERIAL_TX_PIN + #define Z_SERIAL_RX_PIN X_SERIAL_RX_PIN + + #define E0_SERIAL_TX_PIN X_SERIAL_TX_PIN + #define E0_SERIAL_RX_PIN X_SERIAL_RX_PIN + + #define E1_SERIAL_TX_PIN 17 + #define E1_SERIAL_RX_PIN 16 + +#endif From 1be3b8df4ac9876afd8bd7db8eab033f9e615953 Mon Sep 17 00:00:00 2001 From: Stephen Hawes Date: Fri, 4 Feb 2022 19:42:15 -0500 Subject: [PATCH 443/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20Index=20Mobo=20Rev?= =?UTF-8?q?03=20upload=20(#23676)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PlatformIO/boards/marlin_index_mobo_rev03.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/buildroot/share/PlatformIO/boards/marlin_index_mobo_rev03.json b/buildroot/share/PlatformIO/boards/marlin_index_mobo_rev03.json index c65f1dd703..ef5ebfa560 100644 --- a/buildroot/share/PlatformIO/boards/marlin_index_mobo_rev03.json +++ b/buildroot/share/PlatformIO/boards/marlin_index_mobo_rev03.json @@ -5,6 +5,10 @@ "extra_flags": "-DSTM32F407xx", "f_cpu": "168000000L", "hwids": [ + [ + "0x0483", + "0xdf11" + ], [ "0x1EAF", "0x0003" @@ -12,10 +16,6 @@ [ "0x0483", "0x3748" - ], - [ - "0x0483", - "0xdf11" ] ], "mcu": "stm32f407vet6", @@ -35,7 +35,7 @@ "disable_flushing": false, "maximum_ram_size": 131072, "maximum_size": 524288, - "protocol": "stlink", + "protocol": "dfu", "protocols": [ "stlink", "dfu", From 5439a34c4b5e5f87bdd4aebeebee3d80a776cb56 Mon Sep 17 00:00:00 2001 From: GHGiampy <83699429+GHGiampy@users.noreply.github.com> Date: Sat, 5 Feb 2022 01:44:21 +0100 Subject: [PATCH 444/532] =?UTF-8?q?=F0=9F=A9=B9=20Init=20brightness/contra?= =?UTF-8?q?st=20later=20(#23645)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/module/settings.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index b737d41c2d..ab498b7df3 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -578,9 +578,6 @@ void MarlinSettings::postprocess() { update_software_endstops((AxisEnum)i); } - TERN_(HAS_LCD_CONTRAST, ui.refresh_contrast()); - TERN_(HAS_LCD_BRIGHTNESS, ui.refresh_brightness()); - TERN_(ENABLE_LEVELING_FADE_HEIGHT, set_z_fade_height(new_z_fade_height, false)); // false = no report TERN_(AUTO_BED_LEVELING_BILINEAR, refresh_bed_level()); @@ -602,6 +599,10 @@ void MarlinSettings::postprocess() { // Various factors can change the current position if (oldpos != current_position) report_current_position(); + + // Moved as last update due to interference with Neopixel init + TERN_(HAS_LCD_CONTRAST, ui.refresh_contrast()); + TERN_(HAS_LCD_BRIGHTNESS, ui.refresh_brightness()); } #if BOTH(PRINTCOUNTER, EEPROM_SETTINGS) From 385b0c0106116d1b36d6158f81cd9269667d4040 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Sat, 5 Feb 2022 13:51:00 +1300 Subject: [PATCH 445/532] =?UTF-8?q?=F0=9F=9A=A8=20Deprecate=20Maple=20buil?= =?UTF-8?q?d=20(#23661)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Warnings.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index 2fcff5fad9..a22b33d7c9 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -580,3 +580,10 @@ #if EITHER(FYSETC_242_OLED_12864, FYSETC_MINI_12864) && BOTH(PSU_CONTROL, HAS_COLOR_LEDS) && !LED_POWEROFF_TIMEOUT #warning "Your FYSETC display with PSU_CONTROL works best with LED_POWEROFF_TIMEOUT." #endif + +/** + * Maple environent + */ +#ifdef __STM32F1__ + #warning "Maple build environments are deprecated. Please use a non-Maple build environment. Report issues to the Marlin Firmware project." +#endif From 668020777f73231f27da1c09de68b04305e10d9c Mon Sep 17 00:00:00 2001 From: Bob Kuhn Date: Fri, 4 Feb 2022 19:00:35 -0600 Subject: [PATCH 446/532] =?UTF-8?q?=F0=9F=A9=B9=20Prevent=20Z=20error=20wi?= =?UTF-8?q?th=20UBL=20+=20Park=20unscaled=20E=20move=20(#23568)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/pause.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index 08f540f2ee..147164c166 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -39,6 +39,10 @@ #include "../module/printcounter.h" #include "../module/temperature.h" +#if ENABLED(AUTO_BED_LEVELING_UBL) + #include "bedlevel/bedlevel.h" +#endif + #if ENABLED(FWRETRACT) #include "fwretract.h" #endif @@ -440,7 +444,15 @@ bool pause_print(const_float_t retract, const xyz_pos_t &park_point, const bool // Initial retract before move to filament change position if (retract && thermalManager.hotEnoughToExtrude(active_extruder)) { DEBUG_ECHOLNPGM("... retract:", retract); + + #if ENABLED(AUTO_BED_LEVELING_UBL) + const bool leveling_was_enabled = planner.leveling_active; // save leveling state + set_bed_leveling_enabled(false); // turn off leveling + #endif + unscaled_e_move(retract, PAUSE_PARK_RETRACT_FEEDRATE); + + TERN_(AUTO_BED_LEVELING_UBL, set_bed_leveling_enabled(leveling_was_enabled)); // restore leveling } // If axes don't need to home then the nozzle can park @@ -640,9 +652,16 @@ void resume_print(const_float_t slow_load_length/*=0*/, const_float_t fast_load_ prepare_internal_move_to_destination(NOZZLE_PARK_Z_FEEDRATE); } + #if ENABLED(AUTO_BED_LEVELING_UBL) + const bool leveling_was_enabled = planner.leveling_active; // save leveling state + set_bed_leveling_enabled(false); // turn off leveling + #endif + // Unretract unscaled_e_move(PAUSE_PARK_RETRACT_LENGTH, feedRate_t(PAUSE_PARK_RETRACT_FEEDRATE)); + TERN_(AUTO_BED_LEVELING_UBL, set_bed_leveling_enabled(leveling_was_enabled)); // restore leveling + // Intelligent resuming #if ENABLED(FWRETRACT) // If retracted before goto pause From 57cee04c899084454791aed925da6bea648d203f Mon Sep 17 00:00:00 2001 From: John Lagonikas <39417467+zeleps@users.noreply.github.com> Date: Sat, 5 Feb 2022 03:10:59 +0200 Subject: [PATCH 447/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20dual=20MAX31865=20?= =?UTF-8?q?initialization=20issues=20(#23496)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 29 ++-- Marlin/src/HAL/shared/Delay.h | 2 + Marlin/src/libs/MAX31865.cpp | 315 ++++++++++++++++++++-------------- Marlin/src/libs/MAX31865.h | 22 ++- 4 files changed, 216 insertions(+), 152 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 35e8044355..cf30684e89 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -138,24 +138,21 @@ #endif /** - * Configuration options for MAX Thermocouples (-2, -3, -5). - * FORCE_HW_SPI: Ignore SCK/MOSI/MISO pins and just use the CS pin & default SPI bus. - * MAX31865_WIRES: Set the number of wires for the probe connected to a MAX31865 board, 2-4. Default: 2 - * MAX31865_50HZ: Enable 50Hz filter instead of the default 60Hz. - * MAX31865_USE_READ_ERROR_DETECTION: Detects random read errors from value spikes (a 20°C difference in less than 1sec) - * MAX31865_USE_AUTO_MODE: Faster and more frequent reads than 1-shot, but bias voltage always on, slightly affecting RTD temperature. - * MAX31865_MIN_SAMPLING_TIME_MSEC: in 1-shot mode, the minimum time between subsequent reads. This reduces the effect of bias voltage by leaving the sensor unpowered for longer intervals. - * MAX31865_WIRE_OHMS: In 2-wire configurations, manually set the wire resistance for more accurate readings + * Thermocouple Options — for MAX6675 (-2), MAX31855 (-3), and MAX31865 (-5). */ -//#define TEMP_SENSOR_FORCE_HW_SPI -//#define MAX31865_SENSOR_WIRES_0 2 +//#define TEMP_SENSOR_FORCE_HW_SPI // Ignore SCK/MOSI/MISO pins; use CS and the default SPI bus. +//#define MAX31865_SENSOR_WIRES_0 2 // (2-4) Number of wires for the probe connected to a MAX31865 board. //#define MAX31865_SENSOR_WIRES_1 2 -//#define MAX31865_50HZ_FILTER -//#define MAX31865_USE_READ_ERROR_DETECTION -//#define MAX31865_USE_AUTO_MODE -//#define MAX31865_MIN_SAMPLING_TIME_MSEC 100 -//#define MAX31865_WIRE_OHMS_0 0.0f -//#define MAX31865_WIRE_OHMS_1 0.0f + +//#define MAX31865_50HZ_FILTER // Use a 50Hz filter instead of the default 60Hz. +//#define MAX31865_USE_READ_ERROR_DETECTION // Treat value spikes (20°C delta in under 1s) as read errors. + +//#define MAX31865_USE_AUTO_MODE // Read faster and more often than 1-shot; bias voltage always on; slight effect on RTD temperature. +//#define MAX31865_MIN_SAMPLING_TIME_MSEC 100 // (ms) 1-shot: minimum read interval. Reduces bias voltage effects by leaving sensor unpowered for longer intervals. +//#define MAX31865_IGNORE_INITIAL_FAULTY_READS 10 // Ignore some read faults (keeping the temperature reading) to work around a possible issue (#23439). + +//#define MAX31865_WIRE_OHMS_0 0.95f // For 2-wire, set the wire resistances for more accurate readings. +//#define MAX31865_WIRE_OHMS_1 0.0f /** * Hephestos 2 24V heated bed upgrade kit. diff --git a/Marlin/src/HAL/shared/Delay.h b/Marlin/src/HAL/shared/Delay.h index df07881f01..a6795a78ea 100644 --- a/Marlin/src/HAL/shared/Delay.h +++ b/Marlin/src/HAL/shared/Delay.h @@ -166,6 +166,8 @@ void calibrate_delay_loop(); // Delay in microseconds #define DELAY_US(x) DELAY_CYCLES((x) * ((F_CPU) / 1000000UL)) + #define DELAY_CYCLES_VAR DELAY_CYCLES + #elif defined(ESP32) || defined(__PLAT_LINUX__) || defined(__PLAT_NATIVE_SIM__) // DELAY_CYCLES specified inside platform diff --git a/Marlin/src/libs/MAX31865.cpp b/Marlin/src/libs/MAX31865.cpp index 1cafbe5f17..c042504cf8 100644 --- a/Marlin/src/libs/MAX31865.cpp +++ b/Marlin/src/libs/MAX31865.cpp @@ -50,10 +50,6 @@ #define MAX31865_MIN_SAMPLING_TIME_MSEC 0 #endif -#ifdef TARGET_LPC1768 - #include -#endif - #define DEBUG_OUT ENABLED(DEBUG_MAX31865) #include "../core/debug_out.h" @@ -151,24 +147,62 @@ void MAX31865::begin(max31865_numwires_t wires, float zero_res, float ref_res, f digitalWrite(cselPin, HIGH); if (sclkPin != TERN(LARGE_PINMAP, -1UL, 255)) - softSpiBegin(SPI_QUARTER_SPEED); // Define pin modes for Software SPI + softSpiInit(); // Define pin modes for Software SPI else { - DEBUG_ECHOLNPGM("Initializing MAX31865 Hardware SPI"); + DEBUG_ECHOLNPGM("Init MAX31865 Hardware SPI"); SPI.begin(); // Start and configure hardware SPI } initFixedFlags(wires); - clearFault(); // also initializes flags + DEBUG_ECHOLNPGM("MAX31865 Regs: CFG ", readRegister8(MAX31865_CONFIG_REG), + "|RTD ", readRegister16(MAX31865_RTDMSB_REG), + "|HTHRS ", readRegister16(MAX31865_HFAULTMSB_REG), + "|LTHRS ", readRegister16(MAX31865_LFAULTMSB_REG), + "|FLT ", readRegister8(MAX31865_FAULTSTAT_REG)); - #if DISABLED(MAX31865_USE_AUTO_MODE) // make a proper first 1 shot read to initialize _lastRead + // fault detection cycle seems to initialize the sensor better + runAutoFaultDetectionCycle(); // also initializes flags + + if (lastFault) + SERIAL_ECHOLNPGM("MAX31865 init fault ", lastFault); + + writeRegister16(MAX31865_HFAULTMSB_REG, 0xFFFF); + writeRegister16(MAX31865_LFAULTMSB_REG, 0); + + #if ENABLED(MAX31865_USE_AUTO_MODE) // make a proper first read to initialize _lastRead + + uint16_t rtd = readRegister16(MAX31865_RTDMSB_REG); + + #if MAX31865_IGNORE_INITIAL_FAULTY_READS > 0 + rtd = fixFault(rtd); + #endif + + if (rtd & 1) { + lastRead = 0xFFFF; // some invalid value + lastFault = readRegister8(MAX31865_FAULTSTAT_REG); + clearFault(); // also clears the bias voltage flag, so no further action is required + + DEBUG_ECHOLNPGM("MAX31865 read fault: ", rtd); + } + else { + DEBUG_ECHOLNPGM("RTD MSB:", (rtd >> 8), " RTD LSB:", (rtd & 0x00FF)); + lastRead = rtd; + TERN_(MAX31865_USE_READ_ERROR_DETECTION, lastReadStamp = millis()); + } + + #else enableBias(); - DELAY_US(11500); + DELAY_US(2000); // according to the datasheet, 10.5τ+1msec (see below) oneShot(); - DELAY_US(65000); + DELAY_US(63000); uint16_t rtd = readRegister16(MAX31865_RTDMSB_REG); + #if MAX31865_IGNORE_INITIAL_FAULTY_READS > 0 + rtd = fixFault(rtd); + #endif + if (rtd & 1) { lastRead = 0xFFFF; // some invalid value lastFault = readRegister8(MAX31865_FAULTSTAT_REG); @@ -189,7 +223,7 @@ void MAX31865::begin(max31865_numwires_t wires, float zero_res, float ref_res, f TERN_(MAX31865_USE_READ_ERROR_DETECTION, lastReadStamp = now); } - #endif // !MAX31865_USE_AUTO_MODE + #endif // MAX31865_USE_AUTO_MODE DEBUG_ECHOLNPGM( TERN(LARGE_PINMAP, "LARGE_PINMAP", "Regular") @@ -198,7 +232,7 @@ void MAX31865::begin(max31865_numwires_t wires, float zero_res, float ref_res, f " sclkPin: ", sclkPin, " mosiPin: ", mosiPin, " config: ", readRegister8(MAX31865_CONFIG_REG) - ); + ); } /** @@ -240,6 +274,29 @@ void MAX31865::oneShot() { setConfig(MAX31865_CONFIG_1SHOT | MAX31865_CONFIG_BIAS, 1); } +void MAX31865::runAutoFaultDetectionCycle() { + writeRegister8(MAX31865_CONFIG_REG, (stdFlags & 0x11) | 0x84 ); // cfg reg = 100X010Xb + DELAY_US(600); + for (int i = 0; i < 10 && (readRegister8(MAX31865_CONFIG_REG) & 0xC) > 0; i++) DELAY_US(100); // Fault det completes when bits 2 and 3 are zero (or after 10 tries) + readFault(); + clearFault(); +} + +/** + * Set a value in the configuration register. + * + * @param config 8-bit value for the config item + * @param enable whether to enable or disable the value + */ +void MAX31865::setConfig(uint8_t config, bool enable) { + uint8_t t = stdFlags; + if (enable) + t |= config; + else + t &= ~config; + writeRegister8(MAX31865_CONFIG_REG, t); +} + /** * Initialize standard flags with flags that will not change during operation (Hz, polling mode and no. of wires) * @@ -249,12 +306,59 @@ void MAX31865::initFixedFlags(max31865_numwires_t wires) { // set config-defined flags (same for all sensors) stdFlags = TERN(MAX31865_50HZ_FILTER, MAX31865_CONFIG_FILT50HZ, MAX31865_CONFIG_FILT60HZ) | - TERN(MAX31865_USE_AUTO_MODE, MAX31865_CONFIG_MODEAUTO | MAX31865_CONFIG_BIAS, MAX31865_CONFIG_MODEOFF); + TERN(MAX31865_USE_AUTO_MODE, MAX31865_CONFIG_MODEAUTO | MAX31865_CONFIG_BIAS, MAX31865_CONFIG_MODEOFF); if (wires == MAX31865_3WIRE) - stdFlags |= MAX31865_CONFIG_3WIRE; - else // 2 or 4 wire - stdFlags &= ~MAX31865_CONFIG_3WIRE; + stdFlags |= MAX31865_CONFIG_3WIRE; // 3 wire + else + stdFlags &= ~MAX31865_CONFIG_3WIRE; // 2 or 4 wire +} + +#if MAX31865_IGNORE_INITIAL_FAULTY_READS > 0 + + inline uint16_t MAX31865::fixFault(uint16_t rtd) { + if (!ignore_faults || !(rtd & 1)) + return rtd; + + ignore_faults--; + clearFault(); + + DEBUG_ECHOLNPGM("MAX31865 ignoring fault ", (MAX31865_IGNORE_INITIAL_FAULTY_READS) - ignore_faults); + + return rtd & ~1; // 0xFFFE + } + +#endif + +inline uint16_t MAX31865::readRawImmediate() { + uint16_t rtd = readRegister16(MAX31865_RTDMSB_REG); + DEBUG_ECHOLNPGM("MAX31865 RTD MSB:", (rtd >> 8), " LSB:", (rtd & 0x00FF)); + + #if MAX31865_IGNORE_INITIAL_FAULTY_READS > 0 + rtd = fixFault(rtd); + #endif + + if (rtd & 1) { + lastFault = readRegister8(MAX31865_FAULTSTAT_REG); + lastRead |= 1; + clearFault(); // also clears the bias voltage flag, so no further action is required + DEBUG_ECHOLNPGM("MAX31865 read fault: ", lastFault); + } + else { + TERN_(MAX31865_USE_READ_ERROR_DETECTION, const millis_t ms = millis()); + if (TERN0(MAX31865_USE_READ_ERROR_DETECTION, ABS((int)(lastRead - rtd)) > 500 && PENDING(ms, lastReadStamp + 1000))) { + // If 2 readings within 1s differ too much (~20°C) it's a read error. + lastFault = 0x01; + lastRead |= 1; + DEBUG_ECHOLNPGM("MAX31865 read error: ", rtd); + } + else { + lastRead = rtd; + TERN_(MAX31865_USE_READ_ERROR_DETECTION, lastReadStamp = ms); + } + } + + return rtd; } /** @@ -267,30 +371,13 @@ uint16_t MAX31865::readRaw() { #if ENABLED(MAX31865_USE_AUTO_MODE) - const uint16_t rtd = readRegister16(MAX31865_RTDMSB_REG); - DEBUG_ECHOLNPGM("MAX31865 RTD MSB:", (rtd >> 8), " LSB:", (rtd & 0x00FF)); - - if (rtd & 1) { - lastFault = readRegister8(MAX31865_FAULTSTAT_REG); - lastRead |= 1; - clearFault(); // also clears the bias voltage flag, so no further action is required - DEBUG_ECHOLNPGM("MAX31865 read fault: ", rtd); - } - #if ENABLED(MAX31865_USE_READ_ERROR_DETECTION) - else if (ABS(lastRead - rtd) > 500 && PENDING(millis(), lastReadStamp + 1000)) { // if two readings within a second differ too much (~20°C), consider it a read error. - lastFault = 0x01; - lastRead |= 1; - DEBUG_ECHOLNPGM("MAX31865 read error: ", rtd); - } - #endif - else { - lastRead = rtd; - TERN_(MAX31865_USE_READ_ERROR_DETECTION, lastReadStamp = millis()); - } + readRawImmediate(); #else - if (PENDING(millis(), nextEventStamp)) { + const millis_t ms = millis(); + + if (PENDING(ms, nextEventStamp)) { DEBUG_ECHOLNPGM("MAX31865 waiting for event ", nextEvent); return lastRead; } @@ -298,46 +385,26 @@ uint16_t MAX31865::readRaw() { switch (nextEvent) { case SETUP_BIAS_VOLTAGE: enableBias(); - nextEventStamp = millis() + 11; // wait at least 11msec before enabling 1shot + nextEventStamp = ms + 2; // wait at least 10.5*τ (τ = 100nF*430Ω max for PT100 / 10nF*4.3ΚΩ for PT1000 = 43μsec) + 1msec nextEvent = SETUP_1_SHOT_MODE; DEBUG_ECHOLNPGM("MAX31865 bias voltage enabled"); break; case SETUP_1_SHOT_MODE: oneShot(); - nextEventStamp = millis() + 65; // wait at least 65msec before reading RTD register + nextEventStamp = ms + TERN(MAX31865_50HZ_FILTER, 63, 52); // wait at least 52msec for 60Hz (63msec for 50Hz) before reading RTD register nextEvent = READ_RTD_REG; DEBUG_ECHOLNPGM("MAX31865 1 shot mode enabled"); break; - case READ_RTD_REG: { - const uint16_t rtd = readRegister16(MAX31865_RTDMSB_REG); - DEBUG_ECHOLNPGM("MAX31865 RTD MSB:", (rtd >> 8), " LSB:", (rtd & 0x00FF)); + case READ_RTD_REG: - if (rtd & 1) { - lastFault = readRegister8(MAX31865_FAULTSTAT_REG); - lastRead |= 1; - clearFault(); // also clears the bias voltage flag, so no further action is required - DEBUG_ECHOLNPGM("MAX31865 read fault: ", rtd); - } - #if ENABLED(MAX31865_USE_READ_ERROR_DETECTION) - else if (ABS(lastRead - rtd) > 500 && PENDING(millis(), lastReadStamp + 1000)) { // if two readings within a second differ too much (~20°C), consider it a read error. - lastFault = 0x01; - lastRead |= 1; - DEBUG_ECHOLNPGM("MAX31865 read error: ", rtd); - } - #endif - else { - lastRead = rtd; - TERN_(MAX31865_USE_READ_ERROR_DETECTION, lastReadStamp = millis()); - } - - if (!(rtd & 1)) // if clearFault() was not invoked, need to clear the bias voltage and 1-shot flags + if (!(readRawImmediate() & 1)) // if clearFault() was not invoked, need to clear the bias voltage and 1-shot flags resetFlags(); nextEvent = SETUP_BIAS_VOLTAGE; - nextEventStamp = millis() + MAX31865_MIN_SAMPLING_TIME_MSEC; // next step should not occur within less than MAX31865_MIN_SAMPLING_TIME_MSEC from the last one - } break; + nextEventStamp = ms + (MAX31865_MIN_SAMPLING_TIME_MSEC); // next step should not occur within less than MAX31865_MIN_SAMPLING_TIME_MSEC from the last one + break; } #endif @@ -411,21 +478,17 @@ float MAX31865::temperature(float rtd_res) { return temp; } -// -// private: -// - /** - * Set a value in the configuration register. - * - * @param config 8-bit value for the config item - * @param enable whether to enable or disable the value + * MAX31865 SPI Timing constants + * See MAX31865 datasheet (https://datasheets.maximintegrated.com/en/ds/MAX31865.pdf) + * All timings in nsec, minimum values. */ -void MAX31865::setConfig(uint8_t config, bool enable) { - uint8_t t = stdFlags; - if (enable) t |= config; else t &= ~config; - writeRegister8(MAX31865_CONFIG_REG, t); -} + +#define MAX31865_SPI_TIMING_TCC 400 // CS to SCLK setup +#define MAX31865_SPI_TIMING_TDC 35 // Data to SCLK setup +#define MAX31865_SPI_TIMING_TCL 100 // SCK half period +#define MAX31865_SPI_TIMING_TCCH 100 // SCK to CS hold +#define MAX31865_SPI_TIMING_TCWH 400 // CS inactive time (min) /** * Read a single byte from the specified register address. @@ -459,18 +522,10 @@ uint16_t MAX31865::readRegister16(uint8_t addr) { * @param n the number of bytes to read */ void MAX31865::readRegisterN(uint8_t addr, uint8_t buffer[], uint8_t n) { + addr &= 0x7F; // make sure top bit is not set - if (sclkPin == TERN(LARGE_PINMAP, -1UL, 255)) - SPI.beginTransaction(spiConfig); - else - digitalWrite(sclkPin, LOW); - - digitalWrite(cselPin, LOW); - - #ifdef TARGET_LPC1768 - DELAY_CYCLES(spiSpeed); - #endif + spiBeginTransaction(); spiTransfer(addr); while (n--) { @@ -478,10 +533,15 @@ void MAX31865::readRegisterN(uint8_t addr, uint8_t buffer[], uint8_t n) { buffer++; } - if (sclkPin == TERN(LARGE_PINMAP, -1UL, 255)) - SPI.endTransaction(); + spiEndTransaction(); +} - digitalWrite(cselPin, HIGH); +void MAX31865::writeRegister16(uint8_t addr, uint16_t data) { + spiBeginTransaction(); + spiTransfer(addr | 0x80); // make sure top bit is set + spiTransfer(data >> 8); + spiTransfer(data & 0xFF); + spiEndTransaction(); } /** @@ -491,22 +551,31 @@ void MAX31865::readRegisterN(uint8_t addr, uint8_t buffer[], uint8_t n) { * @param data the data to write */ void MAX31865::writeRegister8(uint8_t addr, uint8_t data) { + spiBeginTransaction(); + spiTransfer(addr | 0x80); // make sure top bit is set + spiTransfer(data); + spiEndTransaction(); +} + +void MAX31865::spiBeginTransaction() { + digitalWrite(sclkPin, LOW); // ensure CPOL0 + DELAY_NS_VAR(MAX31865_SPI_TIMING_TCWH); // ensure minimum time of CS inactivity after previous operation + digitalWrite(cselPin, LOW); + DELAY_NS_VAR(MAX31865_SPI_TIMING_TCC); + if (sclkPin == TERN(LARGE_PINMAP, -1UL, 255)) SPI.beginTransaction(spiConfig); else - digitalWrite(sclkPin, LOW); - - digitalWrite(cselPin, LOW); - - #ifdef TARGET_LPC1768 - DELAY_CYCLES(spiSpeed); - #endif - - spiTransfer(addr | 0x80); // make sure top bit is set - spiTransfer(data); + digitalWrite(sclkPin, HIGH); +} +void MAX31865::spiEndTransaction() { if (sclkPin == TERN(LARGE_PINMAP, -1UL, 255)) SPI.endTransaction(); + else + digitalWrite(sclkPin, LOW); + + DELAY_NS_VAR(MAX31865_SPI_TIMING_TCCH); digitalWrite(cselPin, HIGH); } @@ -521,42 +590,30 @@ void MAX31865::writeRegister8(uint8_t addr, uint8_t data) { * @return the 8-bit response */ uint8_t MAX31865::spiTransfer(uint8_t x) { - if (sclkPin == TERN(LARGE_PINMAP, -1UL, 255)) return SPI.transfer(x); - #ifdef TARGET_LPC1768 - - return swSpiTransfer(x, spiSpeed, sclkPin, misoPin, mosiPin); - - #else - - uint8_t reply = 0; - for (int i = 7; i >= 0; i--) { - digitalWrite(sclkPin, HIGH); DELAY_NS_VAR(spiDelay); - reply <<= 1; - digitalWrite(mosiPin, x & _BV(i)); DELAY_NS_VAR(spiDelay); - if (digitalRead(misoPin)) reply |= 1; - digitalWrite(sclkPin, LOW); DELAY_NS_VAR(spiDelay); - } - return reply; - - #endif + uint8_t reply = 0; + for (int i = 7; i >= 0; i--) { + digitalWrite(mosiPin, x & _BV(i)); + DELAY_NS_VAR(MAX31865_SPI_TIMING_TDC); + digitalWrite(sclkPin, LOW); + DELAY_NS_VAR(MAX31865_SPI_TIMING_TCL - MAX31865_SPI_TIMING_TDC); + reply <<= 1; + if (digitalRead(misoPin)) reply |= 1; + DELAY_NS_VAR(MAX31865_SPI_TIMING_TDC); + digitalWrite(sclkPin, HIGH); + DELAY_NS_VAR(MAX31865_SPI_TIMING_TCL - MAX31865_SPI_TIMING_TDC); + } + return reply; } -void MAX31865::softSpiBegin(const uint8_t spi_speed) { +void MAX31865::softSpiInit() { DEBUG_ECHOLNPGM("Initializing MAX31865 Software SPI"); - - #ifdef TARGET_LPC1768 - swSpiBegin(sclkPin, misoPin, mosiPin); - spiSpeed = swSpiInit(spi_speed, sclkPin, mosiPin); - #else - spiDelay = (100UL << spi_speed) / 3; // Calculate delay in ns. Top speed is ~10MHz, or 100ns delay between bits. - pinMode(sclkPin, OUTPUT); - digitalWrite(sclkPin, LOW); - pinMode(mosiPin, OUTPUT); - pinMode(misoPin, INPUT); - #endif + pinMode(sclkPin, OUTPUT); + digitalWrite(sclkPin, LOW); + pinMode(mosiPin, OUTPUT); + pinMode(misoPin, INPUT); } #endif // HAS_MAX31865 && !USE_ADAFRUIT_MAX31865 diff --git a/Marlin/src/libs/MAX31865.h b/Marlin/src/libs/MAX31865.h index bc7733b835..baea455485 100644 --- a/Marlin/src/libs/MAX31865.h +++ b/Marlin/src/libs/MAX31865.h @@ -101,11 +101,7 @@ private: TERN(LARGE_PINMAP, uint32_t, uint8_t) sclkPin, misoPin, mosiPin, cselPin; - #ifdef TARGET_LPC1768 - uint8_t spiSpeed; - #else - uint16_t spiDelay; - #endif + uint16_t spiDelay; float zeroRes, refRes, wireRes; @@ -121,6 +117,11 @@ private: one_shot_event_t nextEvent; #endif + #ifdef MAX31865_IGNORE_INITIAL_FAULTY_READS + uint8_t ignore_faults = MAX31865_IGNORE_INITIAL_FAULTY_READS; + uint16_t fixFault(uint16_t rtd); + #endif + uint8_t stdFlags = 0; void setConfig(uint8_t config, bool enable); @@ -130,9 +131,12 @@ private: uint16_t readRegister16(uint8_t addr); void writeRegister8(uint8_t addr, uint8_t reg); - uint8_t spiTransfer(uint8_t addr); + void writeRegister16(uint8_t addr, uint16_t reg); - void softSpiBegin(const uint8_t spi_speed); + void softSpiInit(); + void spiBeginTransaction(); + uint8_t spiTransfer(uint8_t addr); + void spiEndTransaction(); void initFixedFlags(max31865_numwires_t wires); @@ -141,6 +145,10 @@ private: void oneShot(); void resetFlags(); + uint16_t readRawImmediate(); + + void runAutoFaultDetectionCycle(); + public: #if ENABLED(LARGE_PINMAP) MAX31865(uint32_t spi_cs, uint8_t pin_mapping); From 6af5cb295c2ddd8ffcf3a07bfc920106f3f62c20 Mon Sep 17 00:00:00 2001 From: GHGiampy <83699429+GHGiampy@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:23:44 +0100 Subject: [PATCH 448/532] =?UTF-8?q?=F0=9F=94=A8=20Clean=20up=20upload.py?= =?UTF-8?q?=20(#23679)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/share/scripts/upload.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/buildroot/share/scripts/upload.py b/buildroot/share/scripts/upload.py index f6b25396ad..c7730d8f29 100644 --- a/buildroot/share/scripts/upload.py +++ b/buildroot/share/scripts/upload.py @@ -142,7 +142,7 @@ def Upload(source, target, env): upload_port = _GetUploadPort(env) # Serial port to use # Set local upload params - upload_firmware_target_name = os.path.basename(upload_firmware_source_name) # WARNING! Need rework on "binary_stream" to allow filename > 8.3 + upload_firmware_target_name = os.path.basename(upload_firmware_source_name) # Target firmware filename upload_timeout = 1000 # Communication timout, lossy/slow connections need higher values upload_blocksize = 512 # Transfer block size. 512 = Autodetect @@ -154,11 +154,11 @@ def Upload(source, target, env): # Set local upload params based on board type to change script behavior # "upload_delete_old_bins": delete all *.bin files in the root of SD Card upload_delete_old_bins = marlin_motherboard in ['BOARD_CREALITY_V4', 'BOARD_CREALITY_V4210', 'BOARD_CREALITY_V422', 'BOARD_CREALITY_V423', - 'BOARD_CREALITY_V427', 'BOARD_CREALITY_V431', 'BOARD_CREALITY_V452', 'BOARD_CREALITY_V453', + 'BOARD_CREALITY_V427', 'BOARD_CREALITY_V431', 'BOARD_CREALITY_V452', 'BOARD_CREALITY_V453', 'BOARD_CREALITY_V24S1'] # "upload_random_name": generate a random 8.3 firmware filename to upload upload_random_filename = marlin_motherboard in ['BOARD_CREALITY_V4', 'BOARD_CREALITY_V4210', 'BOARD_CREALITY_V422', 'BOARD_CREALITY_V423', - 'BOARD_CREALITY_V427', 'BOARD_CREALITY_V431', 'BOARD_CREALITY_V452', 'BOARD_CREALITY_V453', + 'BOARD_CREALITY_V427', 'BOARD_CREALITY_V431', 'BOARD_CREALITY_V452', 'BOARD_CREALITY_V453', 'BOARD_CREALITY_V24S1'] and not marlin_long_filename_host_support try: @@ -258,7 +258,7 @@ def Upload(source, target, env): print('Trigger firmware update...') protocol.send_ascii('M997', True) - protocol: protocol.shutdown() + protocol.shutdown() print('Firmware update completed') except KeyboardInterrupt: From 0564cb188f1a74dc9ecfb55b793f4225424a9ca4 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 5 Feb 2022 10:30:17 -0600 Subject: [PATCH 449/532] =?UTF-8?q?=F0=9F=9A=B8=20Enhanced=20UI=20=3D>=20P?= =?UTF-8?q?rofessional=20UI=20-=20with=20updates=20(#23624)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/MarlinCore.cpp | 2 +- Marlin/src/feature/pause.cpp | 2 +- Marlin/src/feature/runout.cpp | 2 +- Marlin/src/gcode/bedlevel/abl/G29.cpp | 2 +- Marlin/src/gcode/bedlevel/mbl/G29.cpp | 2 +- Marlin/src/gcode/bedlevel/ubl/M421.cpp | 2 +- Marlin/src/gcode/calibrate/G28.cpp | 2 +- Marlin/src/gcode/control/M997.cpp | 2 +- Marlin/src/gcode/feature/powerloss/M1000.cpp | 2 +- Marlin/src/gcode/lcd/M0_M1.cpp | 4 +- Marlin/src/gcode/lcd/M73.cpp | 2 +- Marlin/src/gcode/sd/M1001.cpp | 2 +- Marlin/src/gcode/stats/M75-M78.cpp | 2 +- Marlin/src/gcode/temp/M303.cpp | 2 +- Marlin/src/inc/Conditionals_LCD.h | 3 + Marlin/src/inc/SanityCheck.h | 2 + Marlin/src/lcd/e3v2/common/dwin_set.h | 11 +- Marlin/src/lcd/e3v2/creality/dwin.cpp | 3 - Marlin/src/lcd/e3v2/jyersui/dwin.cpp | 4 - .../src/lcd/e3v2/{enhanced => proui}/dwin.cpp | 247 +++++++++++------- .../src/lcd/e3v2/{enhanced => proui}/dwin.h | 21 +- .../e3v2/{enhanced => proui}/dwin_defines.h | 11 +- .../lcd/e3v2/{enhanced => proui}/dwin_lcd.cpp | 4 +- .../lcd/e3v2/{enhanced => proui}/dwin_lcd.h | 4 +- .../e3v2/{enhanced => proui}/dwin_popup.cpp | 12 +- .../lcd/e3v2/{enhanced => proui}/dwin_popup.h | 16 +- .../lcd/e3v2/{enhanced => proui}/dwinui.cpp | 6 +- .../src/lcd/e3v2/{enhanced => proui}/dwinui.h | 41 ++- .../e3v2/{enhanced => proui}/endstop_diag.cpp | 8 +- .../e3v2/{enhanced => proui}/endstop_diag.h | 4 +- .../e3v2/{enhanced => proui}/lockscreen.cpp | 4 +- .../lcd/e3v2/{enhanced => proui}/lockscreen.h | 4 +- .../e3v2/{enhanced => proui}/meshviewer.cpp | 10 +- .../lcd/e3v2/{enhanced => proui}/meshviewer.h | 8 +- .../e3v2/{enhanced => proui}/printstats.cpp | 8 +- .../lcd/e3v2/{enhanced => proui}/printstats.h | 8 +- Marlin/src/lcd/marlinui.cpp | 4 +- Marlin/src/lcd/marlinui.h | 6 +- Marlin/src/module/probe.cpp | 2 +- Marlin/src/module/settings.cpp | 4 +- Marlin/src/module/temperature.cpp | 2 +- Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h | 2 +- Marlin/src/sd/cardreader.cpp | 2 +- buildroot/tests/STM32F103RE_creality | 2 +- ini/features.ini | 2 +- platformio.ini | 2 +- 46 files changed, 319 insertions(+), 178 deletions(-) rename Marlin/src/lcd/e3v2/{enhanced => proui}/dwin.cpp (95%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/dwin.h (93%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/dwin_defines.h (94%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/dwin_lcd.cpp (98%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/dwin_lcd.h (96%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/dwin_popup.cpp (88%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/dwin_popup.h (83%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/dwinui.cpp (99%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/dwinui.h (92%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/endstop_diag.cpp (93%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/endstop_diag.h (90%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/lockscreen.cpp (95%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/lockscreen.h (92%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/meshviewer.cpp (94%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/meshviewer.h (87%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/printstats.cpp (94%) rename Marlin/src/lcd/e3v2/{enhanced => proui}/printstats.h (87%) diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index e34c0d6c3c..420cc5186e 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -75,7 +75,7 @@ #if ENABLED(DWIN_CREALITY_LCD) #include "lcd/e3v2/creality/dwin.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "lcd/e3v2/enhanced/dwin.h" + #include "lcd/e3v2/proui/dwin.h" #elif ENABLED(DWIN_CREALITY_LCD_JYERSUI) #include "lcd/e3v2/jyersui/dwin.h" #endif diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index 147164c166..69c25cbe33 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -58,7 +58,7 @@ #if ENABLED(EXTENSIBLE_UI) #include "../lcd/extui/ui_api.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../lcd/e3v2/enhanced/dwin.h" + #include "../lcd/e3v2/proui/dwin.h" #endif #include "../lcd/marlinui.h" diff --git a/Marlin/src/feature/runout.cpp b/Marlin/src/feature/runout.cpp index 9317e3489a..8b78b53848 100644 --- a/Marlin/src/feature/runout.cpp +++ b/Marlin/src/feature/runout.cpp @@ -69,7 +69,7 @@ bool FilamentMonitorBase::enabled = true, #if ENABLED(EXTENSIBLE_UI) #include "../lcd/extui/ui_api.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../lcd/e3v2/enhanced/dwin.h" + #include "../lcd/e3v2/proui/dwin.h" #endif void event_filament_runout(const uint8_t extruder) { diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index eea5d4a7f2..fddca22c32 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -61,7 +61,7 @@ #elif ENABLED(DWIN_CREALITY_LCD) #include "../../../lcd/e3v2/creality/dwin.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../../../lcd/e3v2/enhanced/dwin.h" + #include "../../../lcd/e3v2/proui/dwin.h" #endif #if HAS_MULTI_HOTEND diff --git a/Marlin/src/gcode/bedlevel/mbl/G29.cpp b/Marlin/src/gcode/bedlevel/mbl/G29.cpp index eec89f73ac..090c15b057 100644 --- a/Marlin/src/gcode/bedlevel/mbl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/mbl/G29.cpp @@ -41,7 +41,7 @@ #if ENABLED(EXTENSIBLE_UI) #include "../../../lcd/extui/ui_api.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../../../lcd/e3v2/enhanced/dwin.h" + #include "../../../lcd/e3v2/proui/dwin.h" #endif #define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE) diff --git a/Marlin/src/gcode/bedlevel/ubl/M421.cpp b/Marlin/src/gcode/bedlevel/ubl/M421.cpp index e6f0ef1f89..ac6f97b00a 100644 --- a/Marlin/src/gcode/bedlevel/ubl/M421.cpp +++ b/Marlin/src/gcode/bedlevel/ubl/M421.cpp @@ -34,7 +34,7 @@ #if ENABLED(EXTENSIBLE_UI) #include "../../../lcd/extui/ui_api.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../../../lcd/e3v2/enhanced/dwin.h" + #include "../../../lcd/e3v2/proui/dwin.h" #endif /** diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index cda71a1c10..48f02d2a33 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -52,7 +52,7 @@ #elif ENABLED(DWIN_CREALITY_LCD) #include "../../lcd/e3v2/creality/dwin.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../../lcd/e3v2/enhanced/dwin.h" + #include "../../lcd/e3v2/proui/dwin.h" #endif #if HAS_L64XX // set L6470 absolute position registers to counts diff --git a/Marlin/src/gcode/control/M997.cpp b/Marlin/src/gcode/control/M997.cpp index 73d795bcef..359172faad 100644 --- a/Marlin/src/gcode/control/M997.cpp +++ b/Marlin/src/gcode/control/M997.cpp @@ -25,7 +25,7 @@ #if ENABLED(PLATFORM_M997_SUPPORT) #if ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../../lcd/e3v2/enhanced/dwin.h" + #include "../../lcd/e3v2/proui/dwin.h" #endif /** diff --git a/Marlin/src/gcode/feature/powerloss/M1000.cpp b/Marlin/src/gcode/feature/powerloss/M1000.cpp index b7fa45e2d0..6fb99226ce 100644 --- a/Marlin/src/gcode/feature/powerloss/M1000.cpp +++ b/Marlin/src/gcode/feature/powerloss/M1000.cpp @@ -34,7 +34,7 @@ #elif ENABLED(DWIN_CREALITY_LCD) #include "../../../lcd/e3v2/creality/dwin.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../../../lcd/e3v2/enhanced/dwin.h" + #include "../../../lcd/e3v2/proui/dwin.h" #elif ENABLED(DWIN_CREALITY_LCD_JYERSUI) #include "../../../lcd/e3v2/jyersui/dwin.h" // Temporary fix until it can be better implemented #endif diff --git a/Marlin/src/gcode/lcd/M0_M1.cpp b/Marlin/src/gcode/lcd/M0_M1.cpp index 2bf3c94f1c..a9223dda47 100644 --- a/Marlin/src/gcode/lcd/M0_M1.cpp +++ b/Marlin/src/gcode/lcd/M0_M1.cpp @@ -36,8 +36,8 @@ #elif ENABLED(EXTENSIBLE_UI) #include "../../lcd/extui/ui_api.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../../lcd/e3v2/enhanced/dwin_popup.h" - #include "../../lcd/e3v2/enhanced/dwin.h" + #include "../../lcd/e3v2/proui/dwin_popup.h" + #include "../../lcd/e3v2/proui/dwin.h" #endif #if ENABLED(HOST_PROMPT_SUPPORT) diff --git a/Marlin/src/gcode/lcd/M73.cpp b/Marlin/src/gcode/lcd/M73.cpp index b7a9b3459e..c2c5485072 100644 --- a/Marlin/src/gcode/lcd/M73.cpp +++ b/Marlin/src/gcode/lcd/M73.cpp @@ -29,7 +29,7 @@ #include "../../sd/cardreader.h" #if ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../../lcd/e3v2/enhanced/dwin.h" + #include "../../lcd/e3v2/proui/dwin.h" #endif /** diff --git a/Marlin/src/gcode/sd/M1001.cpp b/Marlin/src/gcode/sd/M1001.cpp index ad549946f0..1579efd555 100644 --- a/Marlin/src/gcode/sd/M1001.cpp +++ b/Marlin/src/gcode/sd/M1001.cpp @@ -50,7 +50,7 @@ #if ENABLED(EXTENSIBLE_UI) #include "../../lcd/extui/ui_api.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../../lcd/e3v2/enhanced/dwin.h" + #include "../../lcd/e3v2/proui/dwin.h" #endif #if ENABLED(HOST_ACTION_COMMANDS) diff --git a/Marlin/src/gcode/stats/M75-M78.cpp b/Marlin/src/gcode/stats/M75-M78.cpp index 7d16899fd3..368edb65d9 100644 --- a/Marlin/src/gcode/stats/M75-M78.cpp +++ b/Marlin/src/gcode/stats/M75-M78.cpp @@ -30,7 +30,7 @@ #include "../../MarlinCore.h" // for startOrResumeJob #if ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../../lcd/e3v2/enhanced/dwin.h" + #include "../../lcd/e3v2/proui/dwin.h" #endif /** diff --git a/Marlin/src/gcode/temp/M303.cpp b/Marlin/src/gcode/temp/M303.cpp index a43575933b..7b56eb2d6b 100644 --- a/Marlin/src/gcode/temp/M303.cpp +++ b/Marlin/src/gcode/temp/M303.cpp @@ -31,7 +31,7 @@ #if ENABLED(EXTENSIBLE_UI) #include "../../lcd/extui/ui_api.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../../lcd/e3v2/enhanced/dwin.h" + #include "../../lcd/e3v2/proui/dwin.h" #endif /** diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index 5444841db3..f4b517dd23 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -494,6 +494,9 @@ #endif #define HAS_LCD_BRIGHTNESS 1 #define LCD_BRIGHTNESS_MAX 250 + #if ENABLED(DWIN_CREALITY_LCD_ENHANCED) + #define LCD_BRIGHTNESS_DEFAULT 127 + #endif #endif #if IS_ULTRA_LCD diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 85070c7558..1177cbcd14 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -607,6 +607,8 @@ #error "LCD_SCREEN_ROT_180 is now LCD_SCREEN_ROTATE with a value of 180." #elif defined(LCD_SCREEN_ROT_270) #error "LCD_SCREEN_ROT_270 is now LCD_SCREEN_ROTATE with a value of 270." +#elif defined(DEFAULT_LCD_BRIGHTNESS) + #error "DEFAULT_LCD_BRIGHTNESS is now LCD_BRIGHTNESS_DEFAULT." #endif #if MB(DUE3DOM_MINI) && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD) diff --git a/Marlin/src/lcd/e3v2/common/dwin_set.h b/Marlin/src/lcd/e3v2/common/dwin_set.h index 4fedd7a584..7f44386954 100644 --- a/Marlin/src/lcd/e3v2/common/dwin_set.h +++ b/Marlin/src/lcd/e3v2/common/dwin_set.h @@ -25,7 +25,16 @@ #define Language_English 1 #define Language_Chinese 2 -#define ICON 7 // Icon set file 7.ICO +//#define USE_STOCK_DWIN_SET // Use the Creality stock DWIN_SET instead of Marlin's unified DWIN_SET by The-EG & thinkyhead +#ifdef USE_STOCK_DWIN_SET + #define ICON 9 // 9.ICO +#else + #define ICON 7 // 7.ICO +#endif + +#ifndef CORP_WEBSITE + #define CORP_WEBSITE WEBSITE_URL +#endif #define ICON_LOGO 0 #define ICON_Print_0 1 diff --git a/Marlin/src/lcd/e3v2/creality/dwin.cpp b/Marlin/src/lcd/e3v2/creality/dwin.cpp index f17d97cc7c..f20260e43d 100644 --- a/Marlin/src/lcd/e3v2/creality/dwin.cpp +++ b/Marlin/src/lcd/e3v2/creality/dwin.cpp @@ -91,9 +91,6 @@ #ifndef MACHINE_SIZE #define MACHINE_SIZE STRINGIFY(X_BED_SIZE) "x" STRINGIFY(Y_BED_SIZE) "x" STRINGIFY(Z_MAX_POS) #endif -#ifndef CORP_WEBSITE - #define CORP_WEBSITE WEBSITE_URL -#endif #define PAUSE_HEAT diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp index 1356c0e475..0eedddb500 100644 --- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp @@ -82,10 +82,6 @@ #define MACHINE_SIZE STRINGIFY(X_BED_SIZE) "x" STRINGIFY(Y_BED_SIZE) "x" STRINGIFY(Z_MAX_POS) -#ifndef CORP_WEBSITE - #define CORP_WEBSITE WEBSITE_URL - #endif - #define DWIN_FONT_MENU font8x16 #define DWIN_FONT_STAT font10x20 #define DWIN_FONT_HEAD font10x20 diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp similarity index 95% rename from Marlin/src/lcd/e3v2/enhanced/dwin.cpp rename to Marlin/src/lcd/e3v2/proui/dwin.cpp index 58885e1c21..4d7f38171d 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -21,10 +21,12 @@ */ /** - * DWIN UI Enhanced implementation - * Author: Miguel A. Risco-Castillo - * Version: 3.9.1 - * Date: 2021/11/21 + * Enhanced DWIN implementation + * Author: Miguel A. Risco-Castillo (MRISCOC) + * Version: 3.11.2 + * date: 2022/01/19 + * + * Based on the original code provided by Creality under GPL */ #include "../../../inc/MarlinConfigPre.h" @@ -83,6 +85,10 @@ #include "../../../feature/powerloss.h" #endif +#if HAS_GCODE_PREVIEW + #include "gcode_preview.h" +#endif + #if HAS_ESDIAG #include "endstop_diag.h" #endif @@ -113,10 +119,6 @@ #include "lockscreen.h" -#ifndef CORP_WEBSITE - #define CORP_WEBSITE WEBSITE_URL -#endif - #define PAUSE_HEAT #define MENU_CHAR_LIMIT 24 @@ -169,7 +171,7 @@ enum SelectItem : uint8_t { PAGE_PRINT = 0, PAGE_PREPARE, PAGE_CONTROL, - PAGE_INFO_LEVELING, + PAGE_INFO_LEV_ADV, PAGE_COUNT, PRINT_SETUP = 0, @@ -310,11 +312,11 @@ void ICON_Button(const bool selected, const int iconid, const frame_rect_t &ico, DWIN_ICON_Show(true, false, false, ICON, iconid + selected, ico.x, ico.y); if (selected) DWINUI::Draw_Box(0, HMI_data.Highlight_Color, ico); if (HMI_IsChinese()) { - DWIN_Frame_AreaCopy(1, txt.x, txt.y[selected], txt.x + txt.w - 1, txt.y[selected] + txt.h - 1, ico.x + (ico.w - txt.w) / 2, (ico.y + ico.h - 28) - txt.h/2); + DWIN_Frame_AreaCopy(1, txt.x, txt.y[selected], txt.x + txt.w - 1, txt.y[selected] + txt.h - 1, ico.x + (ico.w - txt.w) / 2, (ico.y + ico.h - 25) - txt.h/2); } else { const uint16_t x = ico.x + (ico.w - strlen_P(FTOP(caption)) * DWINUI::fontWidth()) / 2, - y = (ico.y + ico.h - 28) - DWINUI::fontHeight() / 2; + y = (ico.y + ico.h - 20) - DWINUI::fontHeight() / 2; DWINUI::Draw_String(x, y, caption); } } @@ -324,7 +326,7 @@ void ICON_Button(const bool selected, const int iconid, const frame_rect_t &ico, // void ICON_Print() { constexpr frame_rect_t ico = { 17, 110, 110, 100 }; - constexpr text_info_t txt = { 1, { 405, 447 }, 27, 15 }; + constexpr text_info_t txt = { 1, { 405, TERN(USE_STOCK_DWIN_SET, 446, 447) }, 27, 15 }; ICON_Button(select_page.now == PAGE_PRINT, ICON_Print_0, ico, txt, GET_TEXT_F(MSG_BUTTON_PRINT)); } @@ -333,7 +335,7 @@ void ICON_Print() { // void ICON_Prepare() { constexpr frame_rect_t ico = { 145, 110, 110, 100 }; - constexpr text_info_t txt = { 31, { 405, 447 }, 27, 15 }; + constexpr text_info_t txt = { 31, { 405, TERN(USE_STOCK_DWIN_SET, 446, 447) }, 27, 15 }; ICON_Button(select_page.now == PAGE_PREPARE, ICON_Prepare_0, ico, txt, GET_TEXT_F(MSG_PREPARE)); } @@ -342,7 +344,7 @@ void ICON_Prepare() { // void ICON_Control() { constexpr frame_rect_t ico = { 17, 226, 110, 100 }; - constexpr text_info_t txt = { 61, { 405, 447 }, 27, 15 }; + constexpr text_info_t txt = { 61, { 405, TERN(USE_STOCK_DWIN_SET, 446, 447) }, 27, 15 }; ICON_Button(select_page.now == PAGE_CONTROL, ICON_Control_0, ico, txt, GET_TEXT_F(MSG_CONTROL)); } @@ -351,8 +353,8 @@ void ICON_Control() { // void ICON_StartInfo() { constexpr frame_rect_t ico = { 145, 226, 110, 100 }; - constexpr text_info_t txt = { 91, { 405, 447 }, 27, 15 }; - ICON_Button(select_page.now == PAGE_INFO_LEVELING, ICON_Info_0, ico, txt, GET_TEXT_F(MSG_BUTTON_INFO)); + constexpr text_info_t txt = { 91, { 405, TERN(USE_STOCK_DWIN_SET, 446, 447) }, 27, 15 }; + ICON_Button(select_page.now == PAGE_INFO_LEV_ADV, ICON_Info_0, ico, txt, GET_TEXT_F(MSG_BUTTON_INFO)); } // @@ -360,8 +362,17 @@ void ICON_StartInfo() { // void ICON_Leveling() { constexpr frame_rect_t ico = { 145, 226, 110, 100 }; - constexpr text_info_t txt = { 211, { 405, 447 }, 27, 15 }; - ICON_Button(select_page.now == PAGE_INFO_LEVELING, ICON_Leveling_0, ico, txt, GET_TEXT_F(MSG_BUTTON_LEVEL)); + constexpr text_info_t txt = { 211, { 405, TERN(USE_STOCK_DWIN_SET, 446, 447) }, 27, 15 }; + ICON_Button(select_page.now == PAGE_INFO_LEV_ADV, ICON_Leveling_0, ico, txt, GET_TEXT_F(MSG_BUTTON_LEVEL)); +} + +// +// Main Menu: "Advanced Settings" +// +void ICON_AdvSettings() { + constexpr frame_rect_t ico = { 145, 226, 110, 100 }; + constexpr text_info_t txt = { 91, { 405, TERN(USE_STOCK_DWIN_SET, 446, 447) }, 27, 15 }; + ICON_Button(select_page.now == PAGE_INFO_LEV_ADV, ICON_Info_0, ico, txt, GET_TEXT_F(MSG_BUTTON_ADVANCED)); } // @@ -369,7 +380,7 @@ void ICON_Leveling() { // void ICON_Tune() { constexpr frame_rect_t ico = { 8, 232, 80, 100 }; - constexpr text_info_t txt = { 121, { 405, 447 }, 27, 15 }; + constexpr text_info_t txt = { 121, { 405, TERN(USE_STOCK_DWIN_SET, 446, 447) }, 27, 15 }; ICON_Button(select_print.now == PRINT_SETUP, ICON_Setup_0, ico, txt, GET_TEXT_F(MSG_TUNE)); } @@ -378,7 +389,7 @@ void ICON_Tune() { // void ICON_Pause() { constexpr frame_rect_t ico = { 96, 232, 80, 100 }; - constexpr text_info_t txt = { 181, { 405, 447 }, 27, 15 }; + constexpr text_info_t txt = { 181, { 405, TERN(USE_STOCK_DWIN_SET, 446, 447) }, 27, 15 }; ICON_Button(select_print.now == PRINT_PAUSE_RESUME, ICON_Pause_0, ico, txt, GET_TEXT_F(MSG_BUTTON_PAUSE)); } @@ -387,7 +398,7 @@ void ICON_Pause() { // void ICON_Resume() { constexpr frame_rect_t ico = { 96, 232, 80, 100 }; - constexpr text_info_t txt = { 1, { 405, 447 }, 27, 15 }; + constexpr text_info_t txt = { 1, { 405, TERN(USE_STOCK_DWIN_SET, 446, 447) }, 27, 15 }; ICON_Button(select_print.now == PRINT_PAUSE_RESUME, ICON_Continue_0, ico, txt, GET_TEXT_F(MSG_BUTTON_RESUME)); } @@ -396,7 +407,7 @@ void ICON_Resume() { // void ICON_Stop() { constexpr frame_rect_t ico = { 184, 232, 80, 100 }; - constexpr text_info_t txt = { 151, { 405, 447 }, 27, 12 }; + constexpr text_info_t txt = { 151, { 405, TERN(USE_STOCK_DWIN_SET, 446, 447) }, 27, 12 }; ICON_Button(select_print.now == PRINT_STOP, ICON_Stop_0, ico, txt, GET_TEXT_F(MSG_BUTTON_STOP)); } @@ -453,18 +464,13 @@ void Draw_Menu_IntValue(uint16_t bcolor, const uint8_t line, uint8_t iNum, const DWINUI::Draw_Int(HMI_data.Text_Color, bcolor, iNum , VALX, MBASE(line) - 1, value); } -// The "Back" label is always on the first line -void Draw_Back_Label() { - if (HMI_IsChinese()) - DWIN_Frame_AreaCopy(1, 129, 72, 156, 84, LBLX, MBASE(0)); - else - DWIN_Frame_AreaCopy(1, 223, 179, 254, 189, LBLX, MBASE(0)); -} - // Draw "Back" line at the top void Draw_Back_First(const bool is_sel=true) { Draw_Menu_Line(0, ICON_Back); - Draw_Back_Label(); + if (HMI_IsChinese()) + DWIN_Frame_AreaCopy(1, 129, 72, 156, 84, LBLX, MBASE(0)); + else + DWINUI::Draw_String(LBLX, MBASE(0), GET_TEXT_F(MSG_BACK)); if (is_sel) Draw_Menu_Cursor(0); } @@ -489,15 +495,15 @@ inline bool Apply_Encoder(const EncoderState &encoder_diffState, T &valref) { //PopUps void Popup_window_PauseOrStop() { if (HMI_IsChinese()) { - DWINUI::ClearMenuArea(); + DWINUI::ClearMenuArea(); Draw_Popup_Bkgd(); if (select_print.now == PRINT_PAUSE_RESUME) DWIN_Frame_AreaCopy(1, 237, 338, 269, 356, 98, 150); else if (select_print.now == PRINT_STOP) DWIN_Frame_AreaCopy(1, 221, 320, 253, 336, 98, 150); DWIN_Frame_AreaCopy(1, 220, 304, 264, 319, 130, 150); - DWINUI::Draw_Icon(ICON_Confirm_C, 26, 280); - DWINUI::Draw_Icon(ICON_Cancel_C, 146, 280); + DWINUI::Draw_IconWB(ICON_Confirm_C, 26, 280); + DWINUI::Draw_IconWB(ICON_Cancel_C, 146, 280); Draw_Select_Highlight(true); - DWIN_UpdateLCD(); + DWIN_UpdateLCD(); } else DWIN_Popup_ConfirmCancel(ICON_BLTouch, select_print.now == PRINT_PAUSE_RESUME ? GET_TEXT_F(MSG_PAUSE_PRINT) : GET_TEXT_F(MSG_STOP_PRINT)); @@ -513,7 +519,7 @@ void Popup_window_PauseOrStop() { DWINUI::Draw_Icon(ICON_TempTooLow, 102, 105); DWIN_Frame_AreaCopy(1, 103, 371, 136, 386, 69, 240); DWIN_Frame_AreaCopy(1, 170, 371, 270, 386, 102, 240); - DWINUI::Draw_Icon(ICON_Confirm_C, 86, 280); + DWINUI::Draw_IconWB(ICON_Confirm_C, 86, 280); DWIN_UpdateLCD(); } else @@ -527,8 +533,8 @@ void Popup_window_PauseOrStop() { DWINUI::ClearMenuArea(); Draw_Popup_Bkgd(); if (HMI_IsChinese()) { - if (toohigh) { - DWINUI::Draw_Icon(ICON_TempTooHigh, 102, 165); + if (toohigh) { + DWINUI::Draw_Icon(ICON_TempTooHigh, 102, 165); DWIN_Frame_AreaCopy(1, 103, 371, 237, 386, 52, 285); DWIN_Frame_AreaCopy(1, 151, 389, 185, 402, 187, 285); DWIN_Frame_AreaCopy(1, 189, 389, 271, 402, 95, 310); @@ -637,7 +643,7 @@ void Draw_Print_Labels() { } void Draw_Print_ProgressBar() { - DWINUI::Draw_Icon(ICON_Bar, 15, 93); + DWINUI::Draw_IconWB(ICON_Bar, 15, 93); DWIN_Draw_Rectangle(1, HMI_data.Barfill_Color, 16 + _percent_done * 240 / 100, 93, 256, 113); DWINUI::Draw_Int(HMI_data.PercentTxt_Color, HMI_data.Background_Color, 3, 117, 133, _percent_done); DWINUI::Draw_String(HMI_data.PercentTxt_Color, 142, 133, F("%")); @@ -707,7 +713,7 @@ void Draw_PrintDone() { Draw_Print_ProgressElapsed(); Draw_Print_ProgressRemain(); // show print done confirm - DWINUI::Draw_Icon(HMI_IsChinese() ? ICON_Confirm_C : ICON_Confirm_E, 86, 273); + DWINUI::Draw_IconWB(HMI_IsChinese() ? ICON_Confirm_C : ICON_Confirm_E, 86, 273); DWIN_UpdateLCD(); } @@ -721,7 +727,7 @@ void Draw_Main_Menu() { ICON_Print(); ICON_Prepare(); ICON_Control(); - TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); + ICON_AdvSettings(); DWIN_UpdateLCD(); } @@ -745,11 +751,11 @@ void _update_axis_value(const AxisEnum axis, const uint16_t x, const uint16_t y, if (force || changed || draw_qmark || draw_empty) { if (blink && draw_qmark) - DWINUI::Draw_String(HMI_data.Coordinate_Color, HMI_data.Background_Color, x, y, F("--?--")); + DWINUI::Draw_String(HMI_data.Coordinate_Color, HMI_data.Background_Color, x, y, F(" - ? -")); else if (blink && draw_empty) DWINUI::Draw_String(HMI_data.Coordinate_Color, HMI_data.Background_Color, x, y, F(" ")); else - DWINUI::Draw_Signed_Float(HMI_data.Coordinate_Color, HMI_data.Background_Color, 3, 1, x, y, p); + DWINUI::Draw_Signed_Float(HMI_data.Coordinate_Color, HMI_data.Background_Color, 3, 2, x, y, p); } } @@ -911,8 +917,6 @@ void MarlinUI::refresh() { /* Nothing to see here */ } void MarlinUI::_set_brightness() { DWIN_LCD_Brightness(backlight ? brightness : 0); } #endif -#define ICON_Folder ICON_More - #if ENABLED(SCROLL_LONG_FILENAMES) char shift_name[LONG_FILENAME_LENGTH + 1]; @@ -1115,25 +1119,25 @@ void HMI_StartFrame(const bool with_update) { void Draw_Info_Menu() { DWINUI::ClearMenuArea(); Draw_Back_First(); - - DWINUI::Draw_CenteredString(122, F(MACHINE_SIZE)); - DWINUI::Draw_CenteredString(195, F(SHORT_BUILD_VERSION)); + if (HMI_IsChinese()) + Title.FrameCopy(30, 17, 28, 13); // "Info" + else + Title.ShowCaption(GET_TEXT_F(MSG_INFO_SCREEN)); if (HMI_IsChinese()) { - Title.FrameCopy(30, 17, 28, 13); // "Info" - DWIN_Frame_AreaCopy(1, 197, 149, 252, 161, 108, 102); // "Size" DWIN_Frame_AreaCopy(1, 1, 164, 56, 176, 108, 175); // "Firmware Version" DWIN_Frame_AreaCopy(1, 58, 164, 113, 176, 105, 248); // "Contact Details" + DWINUI::Draw_CenteredString(268, F(CORP_WEBSITE)); } else { - Title.ShowCaption(GET_TEXT_F(MSG_INFO_SCREEN)); - - DWIN_Frame_AreaCopy(1, 120, 150, 146, 161, 124, 102); // "Size" - DWIN_Frame_AreaCopy(1, 146, 151, 254, 161, 82, 175); // "Firmware Version" - DWIN_Frame_AreaCopy(1, 1, 164, 96, 175, 89, 248); // "Contact details" + DWINUI::Draw_CenteredString(102, F("Size")); + DWINUI::Draw_CenteredString(175, F("Firmware version")); + DWINUI::Draw_CenteredString(248, F("Build Datetime")); + DWINUI::Draw_CenteredString(268, F(STRING_DISTRIBUTION_DATE)); } - DWINUI::Draw_CenteredString(268, F(CORP_WEBSITE)); + DWINUI::Draw_CenteredString(122, F(MACHINE_SIZE)); + DWINUI::Draw_CenteredString(195, F(SHORT_BUILD_VERSION)); LOOP_L_N(i, 3) { DWINUI::Draw_Icon(ICON_PrintSize + i, ICOX, 99 + i * 73); @@ -1162,7 +1166,7 @@ void HMI_MainMenu() { case PAGE_PRINT: ICON_Print(); break; case PAGE_PREPARE: ICON_Print(); ICON_Prepare(); break; case PAGE_CONTROL: ICON_Prepare(); ICON_Control(); break; - case PAGE_INFO_LEVELING: ICON_Control(); TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break; + case PAGE_INFO_LEV_ADV: ICON_Control(); ICON_AdvSettings(); break; } } } @@ -1171,8 +1175,8 @@ void HMI_MainMenu() { switch (select_page.now) { case PAGE_PRINT: ICON_Print(); ICON_Prepare(); break; case PAGE_PREPARE: ICON_Prepare(); ICON_Control(); break; - case PAGE_CONTROL: ICON_Control(); TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break; - case PAGE_INFO_LEVELING: TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break; + case PAGE_CONTROL: ICON_Control(); ICON_AdvSettings(); break; + case PAGE_INFO_LEV_ADV: ICON_AdvSettings(); break; } } } @@ -1180,6 +1184,7 @@ void HMI_MainMenu() { switch (select_page.now) { case PAGE_PRINT: checkkey = SelectFile; + card.mount(); Draw_Print_File_Menu(); break; @@ -1187,14 +1192,7 @@ void HMI_MainMenu() { case PAGE_CONTROL: Draw_Control_Menu(); break; - case PAGE_INFO_LEVELING: - #if HAS_ONESTEP_LEVELING - queue.inject(F("G28Z\nG29")); // Force to get the current Z home position - #else - last_checkkey = MainMenu; - Goto_Info_Menu(); - #endif - break; + case PAGE_INFO_LEV_ADV: Draw_AdvancedSettings_Menu(); break; } } DWIN_UpdateLCD(); @@ -1469,6 +1467,9 @@ void Draw_Main_Area() { case FilamentPurge: Draw_Popup_FilamentPurge(); break; #endif case Locked: lockScreen.draw(); break; + #if HAS_GCODE_PREVIEW + case ConfirmToPrint: Draw_PreviewFromSD(); break; + #endif case Menu: case SetInt: case SetPInt: @@ -1496,14 +1497,12 @@ void HMI_Popup() { void HMI_Init() { HMI_SDCardInit(); - for (uint16_t t = 0; t <= 100; t += 2) { DWINUI::Draw_Icon(ICON_Bar, 15, 260); DWIN_Draw_Rectangle(1, HMI_data.Background_Color, 15 + t * 242 / 100, 260, 257, 280); DWIN_UpdateLCD(); delay(20); } - HMI_SetLanguage(); } @@ -1623,15 +1622,15 @@ void EachMomentUpdate() { if (HMI_IsChinese()) { DWIN_Frame_AreaCopy(1, 160, 338, 235, 354, 98, 115); DWIN_Frame_AreaCopy(1, 103, 321, 271, 335, 52, 167); - DWINUI::Draw_Icon(ICON_Cancel_C, 26, 280); - DWINUI::Draw_Icon(ICON_Continue_C, 146, 280); + DWINUI::Draw_IconWB(ICON_Cancel_C, 26, 280); + DWINUI::Draw_IconWB(ICON_Continue_C, 146, 280); } else { DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 70, GET_TEXT_F(MSG_OUTAGE_RECOVERY)); DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 147, F("It looks like the last")); DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 167, F("file was interrupted.")); - DWINUI::Draw_Icon(ICON_Cancel_E, 26, 280); - DWINUI::Draw_Icon(ICON_Continue_E, 146, 280); + DWINUI::Draw_IconWB(ICON_Cancel_E, 26, 280); + DWINUI::Draw_IconWB(ICON_Continue_E, 146, 280); } SdFile *dir = nullptr; const char * const filename = card.diveToFile(true, dir, recovery.info.sd_filename); @@ -1698,6 +1697,9 @@ void DWIN_HandleScreen() { #if ENABLED(POWER_LOSS_RECOVERY) case PwrlossRec: HMI_PowerlossRecovery(); break; #endif + #if HAS_GCODE_PREVIEW + case ConfirmToPrint: HMI_ConfirmToPrint(); break; + #endif #if HAS_ESDIAG case ESDiagProcess: HMI_Popup(); break; #endif @@ -1747,7 +1749,7 @@ void DWIN_MeshLevelingStart() { #if HAS_ONESTEP_LEVELING HMI_SaveProcessID(Leveling); Title.ShowCaption(GET_TEXT_F(MSG_BED_LEVELING)); - DWIN_Draw_Popup(ICON_AutoLeveling, GET_TEXT_F(MSG_BED_LEVELING), GET_TEXT_F(MSG_PLEASE_WAIT)); + DWIN_Show_Popup(ICON_AutoLeveling, GET_TEXT_F(MSG_BED_LEVELING), GET_TEXT_F(MSG_PLEASE_WAIT), ICON_Cancel_E); #elif ENABLED(MESH_BED_LEVELING) Draw_ManualMesh_Menu(); #endif @@ -1924,7 +1926,8 @@ void DWIN_LoadSettings(const char *buff) { } void MarlinUI::kill_screen(FSTR_P const lcd_error, FSTR_P const lcd_component) { - DWIN_Draw_Popup(ICON_BLTouch, lcd_error, lcd_component); + DWIN_Draw_Popup(ICON_BLTouch, F("Printer killed:"), lcd_error); + DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 270, F("Turn off the printer")); DWIN_UpdateLCD(); } @@ -1969,8 +1972,8 @@ void DWIN_Redraw_screen() { void Draw_Popup_FilamentPurge() { DWIN_Draw_Popup(ICON_BLTouch, GET_TEXT_F(MSG_ADVANCED_PAUSE), F("Purge or Continue?")); - DWINUI::Draw_Icon(ICON_Confirm_E, 26, 280); - DWINUI::Draw_Icon(ICON_Continue_E, 146, 280); + DWINUI::Draw_IconWB(ICON_Confirm_E, 26, 280); + DWINUI::Draw_IconWB(ICON_Continue_E, 146, 280); Draw_Select_Highlight(true); DWIN_UpdateLCD(); } @@ -2037,6 +2040,41 @@ void HMI_LockScreen() { if (lockScreen.isUnlocked()) DWIN_UnLockScreen(); } +#if HAS_GCODE_PREVIEW + + void HMI_ConfirmToPrint() { + EncoderState encoder_diffState = get_encoder_state(); + if (encoder_diffState == ENCODER_DIFF_NO) return; + if (encoder_diffState == ENCODER_DIFF_CW) + Draw_Select_Highlight(false); + else if (encoder_diffState == ENCODER_DIFF_CCW) + Draw_Select_Highlight(true); + else if (encoder_diffState == ENCODER_DIFF_ENTER) { + if (HMI_flag.select_flag) { // Confirm + card.openAndPrintFile(card.filename); + DWIN_Print_Started(true); + } + else { // Cancel + DWIN_ResetStatusLine(); + checkkey = SelectFile; + Draw_Print_File_Menu(); + } + } + DWIN_UpdateLCD(); + } + +#endif + +void Goto_ConfirmToPrint() { + #if HAS_GCODE_PREVIEW + HMI_SaveProcessID(ConfirmToPrint); + Draw_PreviewFromSD(); + #else + card.openAndPrintFile(card.filename); + DWIN_Print_Started(true); + #endif +} + #if HAS_ESDIAG void Draw_EndStopDiag() { HMI_SaveProcessID(ESDiagProcess); @@ -2308,8 +2346,9 @@ void SetPID(celsius_t t, heater_id_t h) { #endif #if HAS_LCD_BRIGHTNESS - void LiveBrightness() { ui.set_brightness(HMI_value.Value); } - void SetBrightness() { SetIntOnClick(LCD_BRIGHTNESS_MIN, LCD_BRIGHTNESS_MAX, ui.brightness, nullptr, LiveBrightness); } + void ApplyBrightness() { ui.set_brightness(HMI_value.Value); } + void LiveBrightness() { DWIN_LCD_Brightness(HMI_value.Value); } + void SetBrightness() { SetIntOnClick(LCD_BRIGHTNESS_MIN, LCD_BRIGHTNESS_MAX, ui.brightness, ApplyBrightness, LiveBrightness); } #endif #if ENABLED(CASE_LIGHT_MENU) @@ -2382,6 +2421,12 @@ void SetPID(celsius_t t, heater_id_t h) { #endif #endif +#if ENABLED(NOZZLE_PARK_FEATURE) + void SetParkPosX() { SetPIntOnClick(0, X_MAX_POS); } + void SetParkPosY() { SetPIntOnClick(0, Y_MAX_POS); } + void SetParkZRaise() { SetPIntOnClick(0, 50); } +#endif + #if HAS_FILAMENT_SENSOR void SetRunoutEnable() { runout.reset(); @@ -2490,9 +2535,11 @@ void Tram(uint8_t point) { static bool inLev = false; if (inLev) return; char str_1[6] = "", str_2[6] = "", str_3[6] = ""; + #define fmt "X:%s, Y:%s, Z:%s" float xpos = 0, ypos = 0, zval = 0; float margin = PROBING_MARGIN; #else + #define fmt "M420S0\nG28O\nG90\nG0Z5F300\nG0X%iY%iF5000\nG0Z0F300" int16_t xpos = 0, ypos = 0; int16_t margin = 30; #endif @@ -2527,7 +2574,7 @@ void Tram(uint8_t point) { planner.synchronize(); inLev = true; zval = probe.probe_at_point(xpos, ypos, PROBE_PT_STOW); - sprintf_P(cmd, PSTR("X:%s, Y:%s, Z:%s"), + sprintf_P(cmd, PSTR(fmt), dtostrf(xpos, 1, 1, str_1), dtostrf(ypos, 1, 1, str_2), dtostrf(zval, 1, 2, str_3) @@ -2536,7 +2583,7 @@ void Tram(uint8_t point) { inLev = false; #else planner.synchronize(); - sprintf_P(cmd, PSTR("M420S0\nG28O\nG90\nG0Z5F300\nG0X%iY%iF5000\nG0Z0F300"), xpos, ypos); + sprintf_P(cmd, PSTR(fmt), xpos, ypos); queue.inject(cmd); #endif } @@ -2957,7 +3004,7 @@ void onDrawSpeed(MenuItemClass* menuitem, int8_t line) { void onDrawMaxSpeedX(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) { menuitem->SetFrame(1, 173, 133, 228, 147); - DWIN_Frame_AreaCopy(1, 229, 133, 236, 147, LBLX + 58, MBASE(line)); // X + DWIN_Frame_AreaCopy(1, 229, 133, 236, 147, LBLX + 58, MBASE(line)); // X } onDrawPFloatMenu(menuitem, line); } @@ -2965,7 +3012,7 @@ void onDrawMaxSpeedX(MenuItemClass* menuitem, int8_t line) { void onDrawMaxSpeedY(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) { menuitem->SetFrame(1, 173, 133, 228, 147); - DWIN_Frame_AreaCopy(1, 1, 150, 7, 160, LBLX + 58, MBASE(line)); // Y + DWIN_Frame_AreaCopy(1, 1, 150, 7, 160, LBLX + 58, MBASE(line)); // Y } onDrawPFloatMenu(menuitem, line); } @@ -2973,7 +3020,7 @@ void onDrawMaxSpeedY(MenuItemClass* menuitem, int8_t line) { void onDrawMaxSpeedZ(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) { menuitem->SetFrame(1, 173, 133, 228, 147); - DWIN_Frame_AreaCopy(1, 9, 150, 16, 160, LBLX + 58, MBASE(line) + 3); // Z + DWIN_Frame_AreaCopy(1, 9, 150, 16, 160, LBLX + 58, MBASE(line) + 3); // Z } onDrawPFloatMenu(menuitem, line); } @@ -2982,7 +3029,7 @@ void onDrawMaxSpeedZ(MenuItemClass* menuitem, int8_t line) { void onDrawMaxSpeedE(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) { menuitem->SetFrame(1, 173, 133, 228, 147); - DWIN_Frame_AreaCopy(1, 18, 150, 25, 160, LBLX + 58, MBASE(line)); // E + DWIN_Frame_AreaCopy(1, 18, 150, 25, 160, LBLX + 58, MBASE(line)); // E } onDrawPFloatMenu(menuitem, line); } @@ -2991,7 +3038,7 @@ void onDrawMaxSpeedZ(MenuItemClass* menuitem, int8_t line) { void onDrawAcc(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) { menuitem->SetFrame(1, 173, 133, 200, 147); - DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line) + 1); // ...Acceleration + DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line) + 1); // ...Acceleration } onDrawSubMenu(menuitem, line); } @@ -3000,7 +3047,7 @@ void onDrawMaxAccelX(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) { menuitem->SetFrame(1, 173, 133, 200, 147); DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line)); - DWIN_Frame_AreaCopy(1, 229, 133, 236, 147, LBLX + 71, MBASE(line)); // X + DWIN_Frame_AreaCopy(1, 229, 133, 236, 147, LBLX + 71, MBASE(line)); // X } onDrawPInt32Menu(menuitem, line); } @@ -3008,8 +3055,8 @@ void onDrawMaxAccelX(MenuItemClass* menuitem, int8_t line) { void onDrawMaxAccelY(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) { menuitem->SetFrame(1, 173, 133, 200, 147); - DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line)); - DWIN_Frame_AreaCopy(1, 1, 150, 7, 160, LBLX + 71, MBASE(line)); // Y + DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line)); + DWIN_Frame_AreaCopy(1, 1, 150, 7, 160, LBLX + 71, MBASE(line)); // Y } onDrawPInt32Menu(menuitem, line); } @@ -3017,8 +3064,8 @@ void onDrawMaxAccelY(MenuItemClass* menuitem, int8_t line) { void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) { menuitem->SetFrame(1, 173, 133, 200, 147); - DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line)); - DWIN_Frame_AreaCopy(1, 9, 150, 16, 160, LBLX + 71, MBASE(line)); // Z + DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line)); + DWIN_Frame_AreaCopy(1, 9, 150, 16, 160, LBLX + 71, MBASE(line)); // Z } onDrawPInt32Menu(menuitem, line); } @@ -3027,8 +3074,8 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) { void onDrawMaxAccelE(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) { menuitem->SetFrame(1, 173, 133, 200, 147); - DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line)); - DWIN_Frame_AreaCopy(1, 18, 150, 25, 160, LBLX + 71, MBASE(line)); // E + DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line)); + DWIN_Frame_AreaCopy(1, 18, 150, 25, 160, LBLX + 71, MBASE(line)); // E } onDrawPInt32Menu(menuitem, line); } @@ -3039,7 +3086,7 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) { void onDrawJerk(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) { menuitem->SetFrame(1, 173, 133, 200, 147); - DWIN_Frame_AreaCopy(1, 1, 180, 28, 192, LBLX + 27, MBASE(line) + 1); // ... + DWIN_Frame_AreaCopy(1, 1, 180, 28, 192, LBLX + 27, MBASE(line) + 1); // ... DWIN_Frame_AreaCopy(1, 202, 133, 228, 147, LBLX + 54, MBASE(line)); // ...Jerk } onDrawSubMenu(menuitem, line); @@ -3286,6 +3333,9 @@ void Draw_Prepare_Menu() { #if ENABLED(MESH_BED_LEVELING) MENU_ITEM(ICON_ManualMesh, GET_TEXT_F(MSG_MANUAL_MESH), onDrawSubMenu, Draw_ManualMesh_Menu); #endif + #if HAS_ONESTEP_LEVELING + MENU_ITEM(ICON_Level, GET_TEXT_F(MSG_AUTO_MESH), onDrawMenuItem, AutoLev); + #endif #if HAS_ZOFFSET_ITEM #if HAS_BED_PROBE MENU_ITEM(ICON_SetZOffset, GET_TEXT_F(MSG_PROBE_WIZARD), onDrawSubMenu, Draw_ZOffsetWiz_Menu); @@ -3334,12 +3384,12 @@ void Draw_Control_Menu() { if (CurrentMenu != ControlMenu) { CurrentMenu = ControlMenu; SetMenuTitle({103, 1, 28, 14}, GET_TEXT_F(MSG_CONTROL)); - DWINUI::MenuItemsPrepare(11); + DWINUI::MenuItemsPrepare(8); MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu); #if ENABLED(CASE_LIGHT_MENU) #if ENABLED(CASELIGHT_USES_BRIGHTNESS) MENU_ITEM(ICON_CaseLight, GET_TEXT_F(MSG_CASE_LIGHT), onDrawSubMenu, Draw_CaseLight_Menu); - #else + #else MENU_ITEM(ICON_CaseLight, GET_TEXT_F(MSG_CASE_LIGHT), onDrawCaseLight, SetCaseLight); #endif #endif @@ -3354,7 +3404,6 @@ void Draw_Control_Menu() { MENU_ITEM(ICON_ResumeEEPROM, GET_TEXT_F(MSG_RESTORE_DEFAULTS), onDrawResetEeprom, ResetEeprom); #endif MENU_ITEM(ICON_Reboot, GET_TEXT_F(MSG_RESET_PRINTER), onDrawMenuItem, RebootPrinter); - MENU_ITEM(ICON_AdvSet, GET_TEXT_F(MSG_ADVANCED_SETTINGS), onDrawSubMenu, Draw_AdvancedSettings_Menu); MENU_ITEM(ICON_Info, GET_TEXT_F(MSG_INFO_SCREEN), onDrawInfoSubMenu, Goto_Info_Menu); } CurrentMenu->draw(); @@ -3367,7 +3416,7 @@ void Draw_AdvancedSettings_Menu() { CurrentMenu = AdvancedSettings; SetMenuTitle({0}, GET_TEXT_F(MSG_ADVANCED_SETTINGS)); // TODO: Chinese, English "Advanced Settings" JPG DWINUI::MenuItemsPrepare(15); - MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu); + MENU_ITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu); #if HAS_HOME_OFFSET MENU_ITEM(ICON_HomeOffset, GET_TEXT_F(MSG_SET_HOME_OFFSETS), onDrawSubMenu, Draw_HomeOffset_Menu); #endif @@ -3601,7 +3650,7 @@ void Draw_Tune_Menu() { MENU_ITEM(ICON_CaseLight, GET_TEXT_F(MSG_CASE_LIGHT), onDrawCaseLight, SetCaseLight); #elif ENABLED(LED_CONTROL_MENU) && DISABLED(CASE_LIGHT_USE_NEOPIXEL) MENU_ITEM(ICON_LedControl, GET_TEXT_F(MSG_LEDS), onDrawLedStatus, SetLedStatus); - #endif + #endif EDIT_ITEM(ICON_Speed, GET_TEXT_F(MSG_SPEED), onDrawSpeedItem, SetSpeed, &feedrate_percentage); #if HAS_HOTEND HotendTargetItem = EDIT_ITEM(ICON_HotendTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_HOTEND), onDrawHotendTemp, SetHotendTemp, &thermalManager.temp_hotend[0].target); diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h similarity index 93% rename from Marlin/src/lcd/e3v2/enhanced/dwin.h rename to Marlin/src/lcd/e3v2/proui/dwin.h index bbbe00aa9f..04ac1590eb 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -22,10 +22,12 @@ #pragma once /** - * DWIN UI Enhanced implementation - * Author: Miguel A. Risco-Castillo - * Version: 3.9.1 - * Date: 2021/11/21 + * Enhanced DWIN implementation + * Author: Miguel A. Risco-Castillo (MRISCOC) + * Version: 3.9.2 + * date: 2021/11/21 + * + * Based on the original code provided by Creality under GPL */ #include "../../../inc/MarlinConfigPre.h" @@ -62,6 +64,7 @@ enum processID : uint8_t { PwrlossRec, Reboot, Info, + ConfirmToPrint, // Popup Windows Homing, @@ -90,6 +93,8 @@ enum pidresult_t : uint8_t { typedef struct { int8_t Color[3]; // Color components + uint16_t pidgrphpoints = 0; + pidresult_t pidresult = PID_DONE; int8_t Preheat = 0; // Material Select 0: PLA, 1: ABS, 2: Custom AxisEnum axis = X_AXIS; // Axis Select int32_t MaxValue = 0; // Auxiliar max integer/scaled float value @@ -137,6 +142,7 @@ void Goto_PrintProcess(); void Goto_Main_Menu(); void Goto_Info_Menu(); void Goto_PowerLossRecovery(); +void Goto_ConfirmToPrint(); void Draw_Status_Area(const bool with_update); // Status Area void Draw_Main_Area(); // Redraw main area; void DWIN_Redraw_screen(); // Redraw all screen elements @@ -191,6 +197,9 @@ void HMI_LockScreen(); #if HAS_MESH void DWIN_MeshViewer(); #endif +#if HAS_GCODE_PREVIEW + void HMI_ConfirmToPrint(); +#endif #if HAS_ESDIAG void Draw_EndStopDiag(); #endif @@ -221,6 +230,10 @@ void Draw_Tramming_Menu(); #if HAS_FILAMENT_SENSOR void Draw_FilSet_Menu(); #endif +#if ENABLED(NOZZLE_PARK_FEATURE) + void Draw_ParkPos_Menu(); +#endif +void Draw_PhySet_Menu(); void Draw_SelectColors_Menu(); void Draw_GetColor_Menu(); #if BOTH(CASE_LIGHT_MENU, CASELIGHT_USES_BRIGHTNESS) diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_defines.h b/Marlin/src/lcd/e3v2/proui/dwin_defines.h similarity index 94% rename from Marlin/src/lcd/e3v2/enhanced/dwin_defines.h rename to Marlin/src/lcd/e3v2/proui/dwin_defines.h index 907177ab32..3dc2408f4a 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_defines.h @@ -23,11 +23,16 @@ /** * DWIN general defines and data structs - * Author: Miguel A. Risco-Castillo - * Version: 3.9.1 + * Author: Miguel A. Risco-Castillo (MRISCOC) + * Version: 3.9.2 * Date: 2021/11/21 + * + * Based on the original code provided by Creality under GPL */ +//#define NEED_HEX_PRINT 1 +//#define DEBUG_DWIN 1 + #include "../../../core/types.h" #include "../common/dwin_color.h" #if ENABLED(LED_CONTROL_MENU) @@ -53,8 +58,8 @@ #define Def_Indicator_Color Color_White #define Def_Coordinate_Color Color_White +//#define HAS_GCODE_PREVIEW 1 #define HAS_ESDIAG 1 -#define DEFAULT_LCD_BRIGHTNESS 127 #if ENABLED(LED_CONTROL_MENU, HAS_COLOR_LEDS) #define Def_Leds_Color LEDColorWhite() diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp b/Marlin/src/lcd/e3v2/proui/dwin_lcd.cpp similarity index 98% rename from Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp rename to Marlin/src/lcd/e3v2/proui/dwin_lcd.cpp index 83cbc20718..105f1aaf1c 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin_lcd.cpp @@ -22,9 +22,11 @@ /** * DWIN UI Enhanced implementation - * Author: Miguel A. Risco-Castillo + * Author: Miguel A. Risco-Castillo (MRISCOC) * Version: 3.8.1 * Date: 2021/11/09 + * + * Based on the original code provided by Creality under GPL */ #include "../../../inc/MarlinConfigPre.h" diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h b/Marlin/src/lcd/e3v2/proui/dwin_lcd.h similarity index 96% rename from Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h rename to Marlin/src/lcd/e3v2/proui/dwin_lcd.h index fc1b6d6756..623a94f09e 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_lcd.h @@ -23,9 +23,11 @@ /** * DWIN UI Enhanced implementation - * Author: Miguel A. Risco-Castillo + * Author: Miguel A. Risco-Castillo (MRISCOC) * Version: 3.8.1 * Date: 2021/11/09 + * + * Based on the original code provided by Creality under GPL */ #include "../common/dwin_api.h" diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_popup.cpp b/Marlin/src/lcd/e3v2/proui/dwin_popup.cpp similarity index 88% rename from Marlin/src/lcd/e3v2/enhanced/dwin_popup.cpp rename to Marlin/src/lcd/e3v2/proui/dwin_popup.cpp index cf1ab8c0ad..34b05328d7 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin_popup.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin_popup.cpp @@ -22,9 +22,11 @@ /** * DWIN UI Enhanced implementation - * Author: Miguel A. Risco-Castillo - * Version: 3.8.1 - * Date: 2021/11/06 + * Author: Miguel A. Risco-Castillo (MRISCOC) + * Version: 3.10.1 + * Date: 2022/01/21 + * + * Based on the original code provided by Creality under GPL */ #include "../../../inc/MarlinConfigPre.h" @@ -52,8 +54,8 @@ void DWIN_Popup_Continue(const uint8_t icon, FSTR_P const fmsg1, FSTR_P const fm void DWIN_Popup_ConfirmCancel(const uint8_t icon, FSTR_P const fmsg2) { DWIN_Draw_Popup(ICON_BLTouch, F("Please confirm"), fmsg2); - DWINUI::Draw_Icon(ICON_Confirm_E, 26, 280); - DWINUI::Draw_Icon(ICON_Cancel_E, 146, 280); + DWINUI::Draw_IconWB(ICON_Confirm_E, 26, 280); + DWINUI::Draw_IconWB(ICON_Cancel_E, 146, 280); Draw_Select_Highlight(true); DWIN_UpdateLCD(); } diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_popup.h b/Marlin/src/lcd/e3v2/proui/dwin_popup.h similarity index 83% rename from Marlin/src/lcd/e3v2/enhanced/dwin_popup.h rename to Marlin/src/lcd/e3v2/proui/dwin_popup.h index 65784a8c9f..2e952cc1b9 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwin_popup.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_popup.h @@ -23,9 +23,11 @@ /** * DWIN UI Enhanced implementation - * Author: Miguel A. Risco-Castillo - * Version: 3.8.1 - * Date: 2021/11/06 + * Author: Miguel A. Risco-Castillo (MRISCOC) + * Version: 3.10.1 + * Date: 2022/01/21 + * + * Based on the original code provided by Creality under GPL */ #include "dwinui.h" @@ -47,7 +49,13 @@ void DWIN_Draw_Popup(const uint8_t icon, T amsg1=nullptr, U amsg2=nullptr, uint8 if (icon) DWINUI::Draw_Icon(icon, 101, 105); if (amsg1) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 210, amsg1); if (amsg2) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 240, amsg2); - if (button) DWINUI::Draw_Icon(button, 86, 280); + if (button) DWINUI::Draw_IconWB(button, 86, 280); +} + +template +void DWIN_Show_Popup(const uint8_t icon, T amsg1=nullptr, U amsg2=nullptr, uint8_t button=0) { + DWIN_Draw_Popup(icon, amsg1, amsg2, button); + DWIN_UpdateLCD(); } template diff --git a/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp b/Marlin/src/lcd/e3v2/proui/dwinui.cpp similarity index 99% rename from Marlin/src/lcd/e3v2/enhanced/dwinui.cpp rename to Marlin/src/lcd/e3v2/proui/dwinui.cpp index 5017253740..d3cfc9a3e4 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwinui.cpp @@ -22,9 +22,11 @@ /** * DWIN UI Enhanced implementation - * Author: Miguel A. Risco-Castillo - * Version: 3.8.1 + * Author: Miguel A. Risco-Castillo (MRISCOC) + * Version: 3.8.2 * Date: 2021/11/09 + * + * Based on the original code provided by Creality under GPL */ #include "../../../inc/MarlinConfigPre.h" diff --git a/Marlin/src/lcd/e3v2/enhanced/dwinui.h b/Marlin/src/lcd/e3v2/proui/dwinui.h similarity index 92% rename from Marlin/src/lcd/e3v2/enhanced/dwinui.h rename to Marlin/src/lcd/e3v2/proui/dwinui.h index 4f0dadc909..595c534356 100644 --- a/Marlin/src/lcd/e3v2/enhanced/dwinui.h +++ b/Marlin/src/lcd/e3v2/proui/dwinui.h @@ -23,9 +23,11 @@ /** * DWIN UI Enhanced implementation - * Author: Miguel A. Risco-Castillo - * Version: 3.9.1 - * Date: 2021/11/21 + * Author: Miguel A. Risco-Castillo (MRISCOC) + * Version: 3.11.1 + * Date: 2022/01/19 + * + * Based on the original code provided by Creality under GPL */ #include "dwin_lcd.h" @@ -34,6 +36,10 @@ #include "../common/dwin_color.h" // Extra Icons +#define ICON_AdvSet ICON_Language +#define ICON_BedSizeX ICON_PrintSize +#define ICON_BedSizeY ICON_PrintSize +#define ICON_Binary ICON_Contact #define ICON_Brightness ICON_Motion #define ICON_Cancel ICON_StockConfiguration #define ICON_CustomPreheat ICON_SetEndTemp @@ -45,6 +51,7 @@ #define ICON_FilSet ICON_ResumeEEPROM #define ICON_FilUnload ICON_ReadEEPROM #define ICON_Flow ICON_StepE +#define ICON_Folder ICON_More #define ICON_FWRetLength ICON_StepE #define ICON_FWRetSpeed ICON_Setspeed #define ICON_FWRetZRaise ICON_MoveZ @@ -52,28 +59,49 @@ #define ICON_HomeX ICON_MoveX #define ICON_HomeY ICON_MoveY #define ICON_HomeZ ICON_MoveZ +#define ICON_HomeOffset ICON_AdvSet +#define ICON_HomeOffsetX ICON_StepX +#define ICON_HomeOffsetY ICON_StepY +#define ICON_HomeOffsetZ ICON_StepZ #define ICON_HSMode ICON_StockConfiguration +#define ICON_InvertE0 ICON_StepE #define ICON_Tram ICON_SetEndTemp +#define ICON_Level ICON_HotendTemp #define ICON_Lock ICON_Cool #define ICON_ManualMesh ICON_HotendTemp +#define ICON_MaxPosX ICON_MoveX +#define ICON_MaxPosY ICON_MoveY +#define ICON_MaxPosZ ICON_MoveZ #define ICON_MeshNext ICON_Axis +#define ICON_MeshPoints ICON_SetEndTemp #define ICON_MeshSave ICON_WriteEEPROM #define ICON_MeshViewer ICON_HotendTemp #define ICON_MoveZ0 ICON_HotendTemp #define ICON_Park ICON_Motion +#define ICON_ParkPos ICON_AdvSet +#define ICON_ParkPosX ICON_StepX +#define ICON_ParkPosY ICON_StepY +#define ICON_ParkPosZ ICON_StepZ +#define ICON_PhySet ICON_PrintSize #define ICON_PIDbed ICON_SetBedTemp #define ICON_PIDcycles ICON_ResumeEEPROM #define ICON_PIDValue ICON_Contact #define ICON_PrintStats ICON_PrintTime #define ICON_PrintStatsReset ICON_RemainTime #define ICON_ProbeDeploy ICON_SetEndTemp +#define ICON_ProbeMargin ICON_PrintSize +#define ICON_ProbeOffsetX ICON_StepX +#define ICON_ProbeOffsetY ICON_StepY +#define ICON_ProbeOffsetZ ICON_StepZ #define ICON_ProbeSet ICON_SetEndTemp #define ICON_ProbeStow ICON_SetEndTemp #define ICON_ProbeTest ICON_SetEndTemp +#define ICON_ProbeZSpeed ICON_MaxSpeedZ #define ICON_Pwrlossr ICON_Motion #define ICON_Reboot ICON_ResumeEEPROM #define ICON_Runout ICON_MaxAccE #define ICON_Scolor ICON_MaxSpeed +#define ICON_SetBaudRate ICON_Setspeed #define ICON_SetCustomPreheat ICON_SetEndTemp #define ICON_Sound ICON_Cool #define ICON_CaseLight ICON_Motion @@ -247,6 +275,13 @@ namespace DWINUI { DWIN_ICON_Show(ICON, icon, x, y); } + // Draw an Icon from the library ICON with its background + // icon: Icon ID + // x/y: Upper-left point + inline void Draw_IconWB(uint8_t icon, uint16_t x, uint16_t y) { + DWIN_ICON_Show(true, false, false, ICON, icon, x, y); + } + // Draw a positive integer // bShow: true=display background color; false=don't display background color // zeroFill: true=zero fill; false=no zero fill diff --git a/Marlin/src/lcd/e3v2/enhanced/endstop_diag.cpp b/Marlin/src/lcd/e3v2/proui/endstop_diag.cpp similarity index 93% rename from Marlin/src/lcd/e3v2/enhanced/endstop_diag.cpp rename to Marlin/src/lcd/e3v2/proui/endstop_diag.cpp index 0f982c3a36..6232c89534 100644 --- a/Marlin/src/lcd/e3v2/enhanced/endstop_diag.cpp +++ b/Marlin/src/lcd/e3v2/proui/endstop_diag.cpp @@ -22,9 +22,11 @@ /** * DWIN End Stops diagnostic page - * Author: Miguel A. Risco-Castillo - * Version: 1.0 + * Author: Miguel A. Risco-Castillo (MRISCOC) + * Version: 1.0.2 * Date: 2021/11/06 + * + * Based on the original code provided by Creality under GPL */ #include "../../../inc/MarlinConfigPre.h" @@ -106,4 +108,4 @@ void ESDiagClass::Update() { DWIN_UpdateLCD(); } -#endif // DWIN_CREALITY_LCD_ENHANCED && HAS_MESH +#endif // DWIN_CREALITY_LCD_ENHANCED && HAS_ESDIAG diff --git a/Marlin/src/lcd/e3v2/enhanced/endstop_diag.h b/Marlin/src/lcd/e3v2/proui/endstop_diag.h similarity index 90% rename from Marlin/src/lcd/e3v2/enhanced/endstop_diag.h rename to Marlin/src/lcd/e3v2/proui/endstop_diag.h index 1864b95723..4694ddb141 100644 --- a/Marlin/src/lcd/e3v2/enhanced/endstop_diag.h +++ b/Marlin/src/lcd/e3v2/proui/endstop_diag.h @@ -23,9 +23,11 @@ /** * DWIN End Stops diagnostic page - * Author: Miguel A. Risco-Castillo + * Author: Miguel A. Risco-Castillo (MRISCOC) * Version: 1.0 * Date: 2021/11/06 + * + * Based on the original code provided by Creality under GPL */ class ESDiagClass { diff --git a/Marlin/src/lcd/e3v2/enhanced/lockscreen.cpp b/Marlin/src/lcd/e3v2/proui/lockscreen.cpp similarity index 95% rename from Marlin/src/lcd/e3v2/enhanced/lockscreen.cpp rename to Marlin/src/lcd/e3v2/proui/lockscreen.cpp index 8dc84dcc46..3f8339ad48 100644 --- a/Marlin/src/lcd/e3v2/enhanced/lockscreen.cpp +++ b/Marlin/src/lcd/e3v2/proui/lockscreen.cpp @@ -22,9 +22,11 @@ /** * Lock screen implementation for DWIN UI Enhanced implementation - * Author: Miguel A. Risco-Castillo + * Author: Miguel A. Risco-Castillo (MRISCOC) * Version: 2.1 * Date: 2021/11/09 + * + * Based on the original code provided by Creality under GPL */ #include "../../../inc/MarlinConfigPre.h" diff --git a/Marlin/src/lcd/e3v2/enhanced/lockscreen.h b/Marlin/src/lcd/e3v2/proui/lockscreen.h similarity index 92% rename from Marlin/src/lcd/e3v2/enhanced/lockscreen.h rename to Marlin/src/lcd/e3v2/proui/lockscreen.h index a51c82f34e..bf2fdb3f4b 100644 --- a/Marlin/src/lcd/e3v2/enhanced/lockscreen.h +++ b/Marlin/src/lcd/e3v2/proui/lockscreen.h @@ -23,9 +23,11 @@ /** * Lock screen implementation for DWIN UI Enhanced implementation - * Author: Miguel A. Risco-Castillo + * Author: Miguel A. Risco-Castillo (MRISCOC) * Version: 2.1 * Date: 2021/11/09 + * + * Based on the original code provided by Creality under GPL */ #include "../common/encoder.h" diff --git a/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp b/Marlin/src/lcd/e3v2/proui/meshviewer.cpp similarity index 94% rename from Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp rename to Marlin/src/lcd/e3v2/proui/meshviewer.cpp index 1ecbbff0aa..0f63f77b99 100644 --- a/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp +++ b/Marlin/src/lcd/e3v2/proui/meshviewer.cpp @@ -22,9 +22,11 @@ /** * DWIN Mesh Viewer - * Author: Miguel A. Risco-Castillo - * Version: 3.8.1 - * Date: 2021/11/06 + * Author: Miguel A. Risco-Castillo (MRISCOC) + * Version: 3.9.1 + * Date: 2021/11/09 + * + * Based on the original code provided by Creality under GPL */ #include "../../../inc/MarlinConfigPre.h" @@ -56,7 +58,7 @@ void MeshViewerClass::Draw() { #define DrawMeshHLine(yp) DWIN_Draw_HLine(HMI_data.SplitLine_Color, px(0), py(yp), DWIN_WIDTH - 2 * mx) #define DrawMeshVLine(xp) DWIN_Draw_VLine(HMI_data.SplitLine_Color, px(xp), py(GRID_MAX_POINTS_Y - 1), DWIN_WIDTH - 2 * my) GRID_LOOP(x, y) { - const float v = Z_VALUES(x,y) * 100; + const float v = isnan(Z_VALUES(x,y)) ? 0 : round(Z_VALUES(x,y) * 100); zmesh[x][y] = v; NOLESS(maxz, v); NOMORE(minz, v); diff --git a/Marlin/src/lcd/e3v2/enhanced/meshviewer.h b/Marlin/src/lcd/e3v2/proui/meshviewer.h similarity index 87% rename from Marlin/src/lcd/e3v2/enhanced/meshviewer.h rename to Marlin/src/lcd/e3v2/proui/meshviewer.h index 6e7fe6fd82..acd5f0d5c4 100644 --- a/Marlin/src/lcd/e3v2/enhanced/meshviewer.h +++ b/Marlin/src/lcd/e3v2/proui/meshviewer.h @@ -23,9 +23,11 @@ /** * DWIN Mesh Viewer - * Author: Miguel A. Risco-Castillo - * Version: 3.8.1 - * Date: 2021/11/06 + * Author: Miguel A. Risco-Castillo (MRISCOC) + * Version: 3.9.1 + * Date: 2021/11/09 + * + * Based on the original code provided by Creality under GPL */ class MeshViewerClass { diff --git a/Marlin/src/lcd/e3v2/enhanced/printstats.cpp b/Marlin/src/lcd/e3v2/proui/printstats.cpp similarity index 94% rename from Marlin/src/lcd/e3v2/enhanced/printstats.cpp rename to Marlin/src/lcd/e3v2/proui/printstats.cpp index a32d698b96..ec14ebb8bf 100644 --- a/Marlin/src/lcd/e3v2/enhanced/printstats.cpp +++ b/Marlin/src/lcd/e3v2/proui/printstats.cpp @@ -22,9 +22,11 @@ /** * DWIN Print Stats page - * Author: Miguel A. Risco-Castillo - * Version: 1.0 - * Date: 2021/11/21 + * Author: Miguel A. Risco-Castillo (MRISCOC) + * Version: 1.1 + * Date: 2022/01/09 + * + * Based on the original code provided by Creality under GPL */ #include "../../../inc/MarlinConfigPre.h" diff --git a/Marlin/src/lcd/e3v2/enhanced/printstats.h b/Marlin/src/lcd/e3v2/proui/printstats.h similarity index 87% rename from Marlin/src/lcd/e3v2/enhanced/printstats.h rename to Marlin/src/lcd/e3v2/proui/printstats.h index 5f62a4c268..f17e4dc9dd 100644 --- a/Marlin/src/lcd/e3v2/enhanced/printstats.h +++ b/Marlin/src/lcd/e3v2/proui/printstats.h @@ -23,9 +23,11 @@ /** * DWIN Print Stats page - * Author: Miguel A. Risco-Castillo - * Version: 1.0 - * Date: 2021/11/21 + * Author: Miguel A. Risco-Castillo (MRISCOC) + * Version: 1.1 + * Date: 2022/01/09 + * + * Based on the original code provided by Creality under GPL */ class PrintStatsClass { diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index fdb6df1808..3d579fbc97 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -49,7 +49,7 @@ MarlinUI ui; #include "e3v2/creality/dwin.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) #include "fontutils.h" - #include "e3v2/enhanced/dwin.h" + #include "e3v2/proui/dwin.h" #elif ENABLED(DWIN_CREALITY_LCD_JYERSUI) #include "e3v2/jyersui/dwin.h" #endif @@ -104,7 +104,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; #endif #if HAS_LCD_BRIGHTNESS - uint8_t MarlinUI::brightness = DEFAULT_LCD_BRIGHTNESS; + uint8_t MarlinUI::brightness = LCD_BRIGHTNESS_DEFAULT; bool MarlinUI::backlight = true; void MarlinUI::set_brightness(const uint8_t value) { diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index 273abbe54a..5885866e5b 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -58,7 +58,7 @@ #if ENABLED(DWIN_CREALITY_LCD) #include "e3v2/creality/dwin.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "e3v2/enhanced/dwin.h" + #include "e3v2/proui/dwin.h" #endif #define START_OF_UTF8_CHAR(C) (((C) & 0xC0u) != 0x80U) @@ -263,8 +263,8 @@ public: #ifndef LCD_BRIGHTNESS_MAX #define LCD_BRIGHTNESS_MAX 255 #endif - #ifndef DEFAULT_LCD_BRIGHTNESS - #define DEFAULT_LCD_BRIGHTNESS LCD_BRIGHTNESS_MAX + #ifndef LCD_BRIGHTNESS_DEFAULT + #define LCD_BRIGHTNESS_DEFAULT LCD_BRIGHTNESS_MAX #endif static uint8_t brightness; static bool backlight; diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index cc3851597b..fdd6897192 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -80,7 +80,7 @@ #if ENABLED(EXTENSIBLE_UI) #include "../lcd/extui/ui_api.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../lcd/e3v2/enhanced/dwin.h" + #include "../lcd/e3v2/proui/dwin.h" #endif #define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE) diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index ab498b7df3..7af91568bf 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -75,7 +75,7 @@ #if ENABLED(EXTENSIBLE_UI) #include "../lcd/extui/ui_api.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../lcd/e3v2/enhanced/dwin.h" + #include "../lcd/e3v2/proui/dwin.h" #elif ENABLED(DWIN_CREALITY_LCD_JYERSUI) #include "../lcd/e3v2/jyersui/dwin.h" #endif @@ -3028,7 +3028,7 @@ void MarlinSettings::reset() { // // LCD Brightness // - TERN_(HAS_LCD_BRIGHTNESS, ui.brightness = DEFAULT_LCD_BRIGHTNESS); + TERN_(HAS_LCD_BRIGHTNESS, ui.brightness = LCD_BRIGHTNESS_DEFAULT); // // Controller Fan diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index e59a9f49cb..1716ec79dd 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -52,7 +52,7 @@ #if ENABLED(DWIN_CREALITY_LCD) #include "../lcd/e3v2/creality/dwin.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../lcd/e3v2/enhanced/dwin.h" + #include "../lcd/e3v2/proui/dwin.h" #endif #if ENABLED(EXTENSIBLE_UI) diff --git a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h index 59fdc4a3c9..ac11bd8b38 100644 --- a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h +++ b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h @@ -157,7 +157,7 @@ #if defined(TFT_BACKLIGHT_PWM) && !defined(MAPLE_STM32F1) #define HAS_LCD_BRIGHTNESS 1 - #define DEFAULT_LCD_BRIGHTNESS TFT_BACKLIGHT_PWM + #define LCD_BRIGHTNESS_DEFAULT TFT_BACKLIGHT_PWM #endif #if ENABLED(SDIO_SUPPORT) diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 8c1d08a460..9966773418 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -34,7 +34,7 @@ #if ENABLED(DWIN_CREALITY_LCD) #include "../lcd/e3v2/creality/dwin.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) - #include "../lcd/e3v2/enhanced/dwin.h" + #include "../lcd/e3v2/proui/dwin.h" #endif #include "../module/planner.h" // for synchronize diff --git a/buildroot/tests/STM32F103RE_creality b/buildroot/tests/STM32F103RE_creality index 27fc26f0a0..257616ddd1 100755 --- a/buildroot/tests/STM32F103RE_creality +++ b/buildroot/tests/STM32F103RE_creality @@ -15,7 +15,7 @@ exec_test $1 $2 "Ender 3 v2 with CrealityUI" "$3" use_example_configs "Creality/Ender-3 V2/CrealityV422/CrealityUI" opt_disable DWIN_CREALITY_LCD -opt_enable DWIN_CREALITY_LCD_ENHANCED BLTOUCH AUTO_BED_LEVELING_UBL Z_SAFE_HOMING +opt_enable DWIN_CREALITY_LCD_ENHANCED BLTOUCH AUTO_BED_LEVELING_UBL Z_SAFE_HOMING INDIVIDUAL_AXIS_HOMING_SUBMENU LCD_SET_PROGRESS_MANUALLY STATUS_MESSAGE_SCROLLING BAUD_RATE_GCODE exec_test $1 $2 "Ender 3 v2 with Enhanced UI" "$3" use_example_configs "Creality/Ender-3 V2/CrealityV422/CrealityUI" diff --git a/ini/features.ini b/ini/features.ini index a1f80500e5..720748d7f0 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -46,7 +46,7 @@ SOFT_I2C_EEPROM = SlowSoftI2CMaster, SlowSoftWire=https:/ SPI_EEPROM = src_filter=+ HAS_DWIN_E3V2|IS_DWIN_MARLINUI = src_filter=+ DWIN_CREALITY_LCD = src_filter=+ -DWIN_CREALITY_LCD_ENHANCED = src_filter=+ +DWIN_CREALITY_LCD_ENHANCED = src_filter=+ DWIN_CREALITY_LCD_JYERSUI = src_filter=+ IS_DWIN_MARLINUI = src_filter=+ HAS_GRAPHICAL_TFT = src_filter=+ diff --git a/platformio.ini b/platformio.ini index e1db73a4bd..8329cb494f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -51,7 +51,7 @@ lib_deps = default_src_filter = + - - + - - - - - - - - - - - - - + - - - - - - - - - - - From a8f3810f39cf33591aca369d174636336a707c07 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Sun, 6 Feb 2022 05:52:18 +1300 Subject: [PATCH 450/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20missing=20u8g=5Fes?= =?UTF-8?q?p32=5Fspi=20(#23562)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp | 99 +++++++++++++++++++++++ Marlin/src/lcd/dogm/HAL_LCD_com_defines.h | 5 ++ 2 files changed, 104 insertions(+) create mode 100644 Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp diff --git a/Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp b/Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp new file mode 100644 index 0000000000..e454130d43 --- /dev/null +++ b/Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp @@ -0,0 +1,99 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2022 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * Copypaste of SAMD51 HAL developed by Giuliano Zaro (AKA GMagician) + * + * 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 . + * + */ +#ifdef ARDUINO_ARCH_ESP32 + +#include "../../inc/MarlinConfigPre.h" + +#if ENABLED(FYSETC_MINI_12864_2_1) + +#include +#include "Arduino.h" +#include "../shared/HAL_SPI.h" +#include "SPI.h" + +static SPISettings spiConfig; + +#define MDOGLCD_MOSI 23 +#define MDOGLCD_SCK 18 +#define MLCD_RESET_PIN 0 +#define MLCD_PINS_DC 4 +#define MDOGLCD_CS 21 +#define MDOGLCD_A0 4 + +#ifndef LCD_SPI_SPEED + #ifdef SD_SPI_SPEED + #define LCD_SPI_SPEED SD_SPI_SPEED // Assume SPI speed shared with SD + #else + #define LCD_SPI_SPEED SPI_FULL_SPEED // Use full speed if SD speed is not supplied + #endif +#endif + +uint8_t u8g_eps_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) { + static uint8_t msgInitCount = 2; // Ignore all messages until 2nd U8G_COM_MSG_INIT + if (msgInitCount) { + if (msg == U8G_COM_MSG_INIT) msgInitCount--; + if (msgInitCount) return -1; + } + + switch (msg) { + case U8G_COM_MSG_STOP: break; + + case U8G_COM_MSG_INIT: + OUT_WRITE(MDOGLCD_CS, HIGH); + OUT_WRITE(MDOGLCD_A0, HIGH); + OUT_WRITE(MLCD_RESET_PIN, HIGH); + u8g_Delay(5); + spiBegin(); + spiInit(LCD_SPI_SPEED); + break; + + case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */ + WRITE(MDOGLCD_A0, arg_val ? HIGH : LOW); + break; + + case U8G_COM_MSG_CHIP_SELECT: /* arg_val == 0 means HIGH level of U8G_PI_CS */ + WRITE(MDOGLCD_CS, arg_val ? LOW : HIGH); + break; + + case U8G_COM_MSG_RESET: + WRITE(MLCD_RESET_PIN, arg_val); + break; + + case U8G_COM_MSG_WRITE_BYTE: + spiSend((uint8_t)arg_val); + break; + + case U8G_COM_MSG_WRITE_SEQ: + uint8_t *ptr = (uint8_t*) arg_ptr; + while (arg_val > 0) { + spiSend(*ptr++); + arg_val--; + } + break; + } + return 1; +} + +#endif // FYSETC_MINI_12864_2_1 +#endif // ARDUINO_ARCH_ESP32 diff --git a/Marlin/src/lcd/dogm/HAL_LCD_com_defines.h b/Marlin/src/lcd/dogm/HAL_LCD_com_defines.h index a30dd4ca17..e5c6524a9e 100644 --- a/Marlin/src/lcd/dogm/HAL_LCD_com_defines.h +++ b/Marlin/src/lcd/dogm/HAL_LCD_com_defines.h @@ -57,6 +57,11 @@ #define U8G_COM_HAL_SW_SPI_FN u8g_com_std_sw_spi_fn #define U8G_COM_HAL_HW_SPI_FN u8g_com_stm32duino_hw_spi_fn + #elif defined(ESP32) + + uint8_t u8g_eps_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); + #define U8G_COM_HAL_HW_SPI_FN u8g_eps_hw_spi_fn + #elif defined(__AVR__) uint8_t u8g_com_HAL_AVR_sw_sp_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); From dd4f93f90bd81eb6ea73031de05ed802dabb9d67 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 6 Feb 2022 00:23:02 +0000 Subject: [PATCH 451/532] [cron] Bump distribution date (2022-02-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 05d03d225d..1a27a0231f 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 "2022-02-05" +//#define STRING_DISTRIBUTION_DATE "2022-02-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 49601ff7aa..edd998a282 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 "2022-02-05" + #define STRING_DISTRIBUTION_DATE "2022-02-06" #endif /** From d987e23d5b47dc21e2c235969a6719c8f6673530 Mon Sep 17 00:00:00 2001 From: Bob Kuhn Date: Sun, 6 Feb 2022 08:35:18 -0600 Subject: [PATCH 452/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20init=20of=20delta?= =?UTF-8?q?=20safe=20height=20(for=20G29,=20G33,=20etc.)=20(#23622)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/MarlinCore.cpp | 4 ++++ Marlin/src/module/delta.cpp | 7 +++++++ Marlin/src/module/delta.h | 2 ++ Marlin/src/module/motion.cpp | 2 +- 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 420cc5186e..02cf6d28d3 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -1339,6 +1339,10 @@ void setup() { SETUP_RUN(endstops.init()); // Init endstops and pullups + #if ENABLED(DELTA) && !HAS_SOFTWARE_ENDSTOPS + SETUP_RUN(refresh_delta_clip_start_height()); // Init safe delta height without soft endstops + #endif + SETUP_RUN(stepper.init()); // Init stepper. This enables interrupts! #if HAS_SERVOS diff --git a/Marlin/src/module/delta.cpp b/Marlin/src/module/delta.cpp index 2a4efb47da..cd40175da4 100644 --- a/Marlin/src/module/delta.cpp +++ b/Marlin/src/module/delta.cpp @@ -63,6 +63,13 @@ abc_float_t delta_diagonal_rod_trim; float delta_safe_distance_from_top(); +void refresh_delta_clip_start_height() { + delta_clip_start_height = TERN(HAS_SOFTWARE_ENDSTOPS, + soft_endstop.max.z, + DIFF_TERN(HAS_BED_PROBE, delta_height, probe.offset.z) + ) - delta_safe_distance_from_top(); +} + /** * Recalculate factors used for delta kinematics whenever * settings have been changed (e.g., by M665). diff --git a/Marlin/src/module/delta.h b/Marlin/src/module/delta.h index f1e43c7e4c..7cd42805c9 100644 --- a/Marlin/src/module/delta.h +++ b/Marlin/src/module/delta.h @@ -82,6 +82,8 @@ void inverse_kinematics(const xyz_pos_t &raw); */ float delta_safe_distance_from_top(); +void refresh_delta_clip_start_height(); + /** * Delta Forward Kinematics * diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 51f0681a15..4b0c6aba7d 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -743,7 +743,7 @@ void restore_feedrate_and_scaling() { delta_max_radius_2 = sq(delta_max_radius); break; case Z_AXIS: - delta_clip_start_height = soft_endstop.max[axis] - delta_safe_distance_from_top(); + refresh_delta_clip_start_height(); default: break; } From 029ff158bcdb820e3ae9bbf90f5cd13da0fe8345 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 7 Feb 2022 00:19:00 +0000 Subject: [PATCH 453/532] [cron] Bump distribution date (2022-02-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 1a27a0231f..09dc97342a 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 "2022-02-06" +//#define STRING_DISTRIBUTION_DATE "2022-02-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 edd998a282..151cc40d72 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 "2022-02-06" + #define STRING_DISTRIBUTION_DATE "2022-02-07" #endif /** From a8f95e325273f04fa8dd22df8c38de88f00a8fc5 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Mon, 7 Feb 2022 15:40:14 -0500 Subject: [PATCH 454/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Gen?= =?UTF-8?q?eric=20Maple=20STM32F103RC=20envs=20for=20devs=20(#23686)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ini/stm32f1-maple.ini | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/ini/stm32f1-maple.ini b/ini/stm32f1-maple.ini index 774c3b2efb..9ea848f1b6 100644 --- a/ini/stm32f1-maple.ini +++ b/ini/stm32f1-maple.ini @@ -111,6 +111,14 @@ extends = common_stm32f1 board = genericSTM32F103RE monitor_speed = 115200 +# +# Generic STM32F103RC environment +# +[env:STM32F103RC_maple] +extends = common_stm32f1 +board = genericSTM32F103RC +monitor_speed = 115200 + # # Creality (STM32F103RET6) # @@ -125,6 +133,20 @@ extra_scripts = ${common_stm32f1.extra_scripts} debug_tool = jlink upload_protocol = jlink +# +# Creality (STM32F103RCT6) +# +[env:STM32F103RC_creality_maple] +extends = env:STM32F103RC_maple +build_flags = ${common_stm32f1.build_flags} -DTEMP_TIMER_CHAN=4 +board_build.address = 0x08007000 +board_build.ldscript = creality.ld +extra_scripts = ${common_stm32f1.extra_scripts} + pre:buildroot/share/PlatformIO/scripts/random-bin.py + buildroot/share/PlatformIO/scripts/custom_board.py +debug_tool = jlink +upload_protocol = jlink + # # BigTree SKR Mini E3 V2.0 & DIP / SKR CR6 (STM32F103RET6 ARM Cortex-M3) # From 569f867ea98b7cea729dcbd469372e8f787bb113 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Tue, 8 Feb 2022 09:49:26 +1300 Subject: [PATCH 455/532] =?UTF-8?q?=F0=9F=9A=A8=20Cleaner=20errors=20for?= =?UTF-8?q?=20renamed=20envs=20(#23690)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ini/renamed.ini | 25 +++++++++++++++++++++++++ platformio.ini | 1 + 2 files changed, 26 insertions(+) create mode 100644 ini/renamed.ini diff --git a/ini/renamed.ini b/ini/renamed.ini new file mode 100644 index 0000000000..bc1e438d60 --- /dev/null +++ b/ini/renamed.ini @@ -0,0 +1,25 @@ +# +# Marlin Firmware +# PlatformIO Configuration File +# + +################################# +# # +# Renamed Environments # +# # +################################# + +# +# List of environment names that are no longer used +# + +[env:STM32F103RET6_creality_maple] +extends = env:STM32F103RE_maple + +[env:STM32F103RET6_creality] +extends = STM32F103Rx_creality +board = genericSTM32F103RE + +[env:STM32F103RET6_creality_xfer] +extends = STM32F103Rx_creality_xfer +board = genericSTM32F103RE diff --git a/platformio.ini b/platformio.ini index 8329cb494f..3a02b5ab18 100644 --- a/platformio.ini +++ b/platformio.ini @@ -32,6 +32,7 @@ extra_configs = ini/stm32h7.ini ini/stm32g0.ini ini/teensy.ini + ini/renamed.ini # # The 'common' section applies to most Marlin builds. From 3e93def08e4a765776ae7d2b94102943cd7dae01 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Mon, 7 Feb 2022 17:22:18 -0500 Subject: [PATCH 456/532] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20Maple=20HAL=20comp?= =?UTF-8?q?ile=20errors=20(#23685)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/STM32F1/onboard_sd.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Marlin/src/HAL/STM32F1/onboard_sd.cpp b/Marlin/src/HAL/STM32F1/onboard_sd.cpp index 582ee3853d..a3d8dcb2d5 100644 --- a/Marlin/src/HAL/STM32F1/onboard_sd.cpp +++ b/Marlin/src/HAL/STM32F1/onboard_sd.cpp @@ -38,8 +38,13 @@ #define SPI_CLOCK_MAX SPI_BAUD_PCLK_DIV_2 #endif -#define CS_LOW() WRITE(ONBOARD_SD_CS_PIN, LOW) // Set OnboardSPI cs low -#define CS_HIGH() WRITE(ONBOARD_SD_CS_PIN, HIGH) // Set OnboardSPI cs high +#if PIN_EXISTS(ONBOARD_SD_CS) && ONBOARD_SD_CS_PIN != SD_SS_PIN + #define CS_LOW() WRITE(ONBOARD_SD_CS_PIN, LOW) // Set OnboardSPI cs low + #define CS_HIGH() WRITE(ONBOARD_SD_CS_PIN, HIGH) // Set OnboardSPI cs high +#else + #define CS_LOW() + #define CS_HIGH() +#endif #define FCLK_FAST() ONBOARD_SD_SPI.setClockDivider(SPI_CLOCK_MAX) #define FCLK_SLOW() ONBOARD_SD_SPI.setClockDivider(SPI_BAUD_PCLK_DIV_256) From c2fa7e594200a18856e61dcaaa8ef1a689a5121c Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Mon, 7 Feb 2022 17:24:18 -0500 Subject: [PATCH 457/532] PLR accessors for Ext UI (#23687) --- Marlin/src/lcd/extui/ui_api.cpp | 9 +++++++++ Marlin/src/lcd/extui/ui_api.h | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index f2763c893f..f44e8bf720 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -94,6 +94,10 @@ #include "../../feature/caselight.h" #endif +#if ENABLED(POWER_LOSS_RECOVERY) + #include "../../feature/powerloss.h" +#endif + #if ENABLED(BABYSTEPPING) #include "../../feature/babystep.h" #endif @@ -674,6 +678,11 @@ namespace ExtUI { #endif #endif + #if ENABLED(POWER_LOSS_RECOVERY) + bool getPowerLossRecoveryEnabled() { return recovery.enabled; } + void setPowerLossRecoveryEnabled(const bool value) { recovery.enable(value); } + #endif + #if ENABLED(LIN_ADVANCE) float getLinearAdvance_mm_mm_s(const extruder_t extruder) { return (extruder < EXTRUDERS) ? planner.extruder_advance_K[extruder - E0] : 0; diff --git a/Marlin/src/lcd/extui/ui_api.h b/Marlin/src/lcd/extui/ui_api.h index 59b509981b..6753c53740 100644 --- a/Marlin/src/lcd/extui/ui_api.h +++ b/Marlin/src/lcd/extui/ui_api.h @@ -315,6 +315,11 @@ namespace ExtUI { #endif #endif + #if ENABLED(POWER_LOSS_RECOVERY) + bool getPowerLossRecoveryEnabled(); + void setPowerLossRecoveryEnabled(const bool); + #endif + #if ENABLED(PIDTEMP) float getPIDValues_Kp(const extruder_t); float getPIDValues_Ki(const extruder_t); From 067faaceb19831c880a799e0285d0b1967192f4f Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 8 Feb 2022 00:29:22 +0000 Subject: [PATCH 458/532] [cron] Bump distribution date (2022-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 09dc97342a..497f49e284 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 "2022-02-07" +//#define STRING_DISTRIBUTION_DATE "2022-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 151cc40d72..d850015710 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 "2022-02-07" + #define STRING_DISTRIBUTION_DATE "2022-02-08" #endif /** From f84eb27c4c093ddc8db163a5d9860a234765dd12 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 8 Feb 2022 17:03:38 -0600 Subject: [PATCH 459/532] =?UTF-8?q?=F0=9F=94=A7=20Update=20MIXING=5FEXTRUD?= =?UTF-8?q?ER=20sanity=20checks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixing #23693 --- Marlin/src/inc/SanityCheck.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 1177cbcd14..79c071cf00 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1226,14 +1226,16 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "For MIXING_EXTRUDER set MIXING_STEPPERS > 1 instead of EXTRUDERS > 1." #elif MIXING_STEPPERS < 2 #error "You must set MIXING_STEPPERS >= 2 for a mixing extruder." - #elif ENABLED(FILAMENT_SENSOR) - #error "MIXING_EXTRUDER is incompatible with FILAMENT_SENSOR. Comment out this line to use it anyway." + #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 ENABLED(SINGLENOZZLE) #error "MIXING_EXTRUDER is incompatible with SINGLENOZZLE." #elif ENABLED(DISABLE_INACTIVE_EXTRUDER) #error "MIXING_EXTRUDER is incompatible with DISABLE_INACTIVE_EXTRUDER." + #elif HAS_FILAMENT_RUNOUT_DISTANCE + #error "MIXING_EXTRUDER is incompatible with FILAMENT_RUNOUT_DISTANCE_MM." #endif #endif From 7763f9385d506ef79ef81ccb48a972ab56050fb1 Mon Sep 17 00:00:00 2001 From: Taylor Talkington Date: Tue, 8 Feb 2022 18:36:06 -0500 Subject: [PATCH 460/532] =?UTF-8?q?=E2=9C=A8=20Optional=20HOST=5FSTATUS=5F?= =?UTF-8?q?NOTIFICATIONS=20(#22833)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 11 +++++++---- Marlin/src/gcode/control/M111.cpp | 8 ++++++++ Marlin/src/inc/SanityCheck.h | 6 ------ Marlin/src/inc/Warnings.cpp | 10 ++++++++++ Marlin/src/lcd/marlinui.cpp | 7 +++++-- Marlin/src/module/printcounter.cpp | 1 - Marlin/src/module/settings.cpp | 23 ++++++++++++++++++++--- Marlin/src/module/temperature.cpp | 4 ++++ buildroot/tests/rambo | 2 +- 9 files changed, 55 insertions(+), 17 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index cf30684e89..f2676828ff 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -3952,10 +3952,13 @@ */ //#define HOST_ACTION_COMMANDS #if ENABLED(HOST_ACTION_COMMANDS) - //#define HOST_PAUSE_M76 - //#define HOST_PROMPT_SUPPORT - //#define HOST_START_MENU_ITEM // Add a menu item that tells the host to start - //#define HOST_SHUTDOWN_MENU_ITEM // Add a menu item that tells the host to shut down + //#define HOST_PAUSE_M76 // Tell the host to pause in response to M76 + //#define HOST_PROMPT_SUPPORT // Initiate host prompts to get user feedback + #if ENABLED(HOST_PROMPT_SUPPORT) + //#define HOST_STATUS_NOTIFICATIONS // Send some status messages to the host as notifications + #endif + //#define HOST_START_MENU_ITEM // Add a menu item that tells the host to start + //#define HOST_SHUTDOWN_MENU_ITEM // Add a menu item that tells the host to shut down #endif /** diff --git a/Marlin/src/gcode/control/M111.cpp b/Marlin/src/gcode/control/M111.cpp index d6aeb77410..846bf70556 100644 --- a/Marlin/src/gcode/control/M111.cpp +++ b/Marlin/src/gcode/control/M111.cpp @@ -22,12 +22,20 @@ #include "../gcode.h" +#if ENABLED(HOST_ACTION_COMMANDS) + #include "../../feature/host_actions.h" +#endif + /** * M111: Set the debug level */ void GcodeSuite::M111() { if (parser.seenval('S')) marlin_debug_flags = parser.value_byte(); + #if EITHER(HOST_ACTION_COMMANDS, HOST_PROMPT_SUPPORT) + if (parser.seenval('H')) hostui.flag.bits = parser.value_byte(); + #endif + static PGMSTR(str_debug_1, STR_DEBUG_ECHO); static PGMSTR(str_debug_2, STR_DEBUG_INFO); static PGMSTR(str_debug_4, STR_DEBUG_ERRORS); diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 79c071cf00..f154592f4e 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -611,12 +611,6 @@ #error "DEFAULT_LCD_BRIGHTNESS is now LCD_BRIGHTNESS_DEFAULT." #endif -#if MB(DUE3DOM_MINI) && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD) - #warning "Onboard temperature sensor for BOARD_DUE3DOM_MINI has moved from TEMP_SENSOR_2 (TEMP_2_PIN) to TEMP_SENSOR_BOARD (TEMP_BOARD_PIN)." -#elif MB(BTT_SKR_E3_TURBO) && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD) - #warning "Onboard temperature sensor for BOARD_BTT_SKR_E3_TURBO has moved from TEMP_SENSOR_2 (TEMP_2_PIN) to TEMP_SENSOR_BOARD (TEMP_BOARD_PIN)." -#endif - constexpr float arm[] = AXIS_RELATIVE_MODES; static_assert(COUNT(arm) == LOGICAL_AXES, "AXIS_RELATIVE_MODES must contain " _LOGICAL_AXES_STR "elements."); diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index a22b33d7c9..95246343c7 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -59,6 +59,12 @@ #warning "Your Configuration provides no method to acquire user feedback!" #endif +#if MB(DUE3DOM_MINI) && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD) + #warning "Onboard temperature sensor for BOARD_DUE3DOM_MINI has moved from TEMP_SENSOR_2 (TEMP_2_PIN) to TEMP_SENSOR_BOARD (TEMP_BOARD_PIN)." +#elif MB(BTT_SKR_E3_TURBO) && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD) + #warning "Onboard temperature sensor for BOARD_BTT_SKR_E3_TURBO has moved from TEMP_SENSOR_2 (TEMP_2_PIN) to TEMP_SENSOR_BOARD (TEMP_BOARD_PIN)." +#endif + #ifndef NO_AUTO_ASSIGN_WARNING #if AUTO_ASSIGNED_X2_STEPPER @@ -541,6 +547,10 @@ #warning "Creality 4.2.2 boards come with a variety of stepper drivers. Check the board label and set the correct *_DRIVER_TYPE! (C=HR4988, E=A4988, A=TMC2208, B=TMC2209, H=TMC2225)." #endif +#if PRINTCOUNTER_SYNC + #warning "To prevent step loss, motion will pause for PRINTCOUNTER auto-save." +#endif + #if HOMING_Z_WITH_PROBE && IS_CARTESIAN && DISABLED(Z_SAFE_HOMING) #error "Z_SAFE_HOMING is recommended when homing with a probe. Enable Z_SAFE_HOMING or comment out this line to continue." #endif diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 3d579fbc97..27965c1bd4 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -1363,7 +1363,7 @@ void MarlinUI::init() { void MarlinUI::set_status(const char * const cstr, const bool persist) { if (alert_level) return; - TERN_(HOST_PROMPT_SUPPORT, hostui.notify(cstr)); + TERN_(HOST_STATUS_NOTIFICATIONS, hostui.notify(cstr)); // Here we have a problem. The message is encoded in UTF8, so // arbitrarily cutting it will be a problem. We MUST be sure @@ -1435,7 +1435,7 @@ void MarlinUI::init() { if (level < alert_level) return; alert_level = level; - TERN_(HOST_PROMPT_SUPPORT, hostui.notify(fstr)); + TERN_(HOST_STATUS_NOTIFICATIONS, hostui.notify(fstr)); // Since the message is encoded in UTF8 it must // only be cut on a character boundary. @@ -1473,6 +1473,9 @@ void MarlinUI::init() { va_start(args, FTOP(fmt)); vsnprintf_P(status_message, MAX_MESSAGE_LENGTH, FTOP(fmt), args); va_end(args); + + TERN_(HOST_STATUS_NOTIFICATIONS, hostui.notify(status_message)); + finish_status(level > 0); } diff --git a/Marlin/src/module/printcounter.cpp b/Marlin/src/module/printcounter.cpp index 27dee76715..affb608780 100644 --- a/Marlin/src/module/printcounter.cpp +++ b/Marlin/src/module/printcounter.cpp @@ -43,7 +43,6 @@ Stopwatch print_job_timer; // Global Print Job Timer instance #if PRINTCOUNTER_SYNC #include "../module/planner.h" - #warning "To prevent step loss, motion will pause for PRINTCOUNTER auto-save." #endif // Service intervals diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 7af91568bf..8c2cd8813d 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -80,6 +80,10 @@ #include "../lcd/e3v2/jyersui/dwin.h" #endif +#if ENABLED(HOST_PROMPT_SUPPORT) + #include "../feature/host_actions.h" +#endif + #if HAS_SERVOS #include "servo.h" #endif @@ -652,6 +656,10 @@ void MarlinSettings::postprocess() { #define DEBUG_OUT EITHER(EEPROM_CHITCHAT, DEBUG_LEVELING_FEATURE) #include "../core/debug_out.h" +#if BOTH(EEPROM_CHITCHAT, HOST_PROMPT_SUPPORT) + #define HOST_EEPROM_CHITCHAT 1 +#endif + #if ENABLED(EEPROM_SETTINGS) #define EEPROM_ASSERT(TST,ERR) do{ if (!(TST)) { SERIAL_ERROR_MSG(ERR); eeprom_error = true; } }while(0) @@ -1554,7 +1562,10 @@ void MarlinSettings::postprocess() { store_mesh(ubl.storage_slot); #endif - if (!eeprom_error) LCD_MESSAGE(MSG_SETTINGS_STORED); + if (!eeprom_error) { + LCD_MESSAGE(MSG_SETTINGS_STORED); + TERN_(HOST_PROMPT_SUPPORT, hostui.notify(GET_TEXT_F(MSG_SETTINGS_STORED))); + } TERN_(EXTENSIBLE_UI, ExtUI::onConfigurationStoreWritten(!eeprom_error)); @@ -1578,6 +1589,7 @@ void MarlinSettings::postprocess() { } DEBUG_ECHO_MSG("EEPROM version mismatch (EEPROM=", stored_ver, " Marlin=" EEPROM_VERSION ")"); TERN_(DWIN_CREALITY_LCD_ENHANCED, LCD_MESSAGE(MSG_ERR_EEPROM_VERSION)); + TERN_(HOST_PROMPT_SUPPORT, hostui.notify(GET_TEXT_F(MSG_ERR_EEPROM_VERSION))); IF_DISABLED(EEPROM_AUTO_INIT, ui.eeprom_alert_version()); eeprom_error = true; @@ -2468,12 +2480,14 @@ void MarlinSettings::postprocess() { eeprom_error = true; DEBUG_ERROR_MSG("EEPROM CRC mismatch - (stored) ", stored_crc, " != ", working_crc, " (calculated)!"); TERN_(DWIN_CREALITY_LCD_ENHANCED, LCD_MESSAGE(MSG_ERR_EEPROM_CRC)); + TERN_(HOST_EEPROM_CHITCHAT, hostui.notify(GET_TEXT_F(MSG_ERR_EEPROM_CRC))); IF_DISABLED(EEPROM_AUTO_INIT, ui.eeprom_alert_crc()); } else if (!validating) { DEBUG_ECHO_START(); DEBUG_ECHO(version); DEBUG_ECHOLNPGM(" stored settings retrieved (", eeprom_index - (EEPROM_OFFSET), " bytes; crc ", (uint32_t)working_crc, ")"); + TERN_(HOST_EEPROM_CHITCHAT, hostui.notify(F("Stored settings retrieved"))); } if (!validating && !eeprom_error) postprocess(); @@ -2783,7 +2797,6 @@ void MarlinSettings::reset() { #endif #endif - TERN_(EXTENSIBLE_UI, ExtUI::onFactoryReset()); TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_SetDataDefaults()); TERN_(DWIN_CREALITY_LCD_JYERSUI, CrealityDWIN.Reset_Settings()); @@ -3142,7 +3155,11 @@ void MarlinSettings::reset() { postprocess(); - DEBUG_ECHO_MSG("Hardcoded Default Settings Loaded"); + FSTR_P const hdsl = F("Hardcoded Default Settings Loaded"); + TERN_(HOST_EEPROM_CHITCHAT, hostui.notify(hdsl)); + DEBUG_ECHO_START(); DEBUG_ECHOLNF(hdsl); + + TERN_(EXTENSIBLE_UI, ExtUI::onFactoryReset()); } #if DISABLED(DISABLE_M503) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 1716ec79dd..4ccd984b0d 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -629,6 +629,7 @@ volatile bool Temperature::raw_temps_ready = false; SERIAL_ECHOLNPGM(STR_PID_TEMP_TOO_HIGH); TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_TEMP_TOO_HIGH)); TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_PidTuning(PID_TEMP_TOO_HIGH)); + TERN_(HOST_PROMPT_SUPPORT, hostui.notify(GET_TEXT_F(MSG_PID_TEMP_TOO_HIGH))); return; } @@ -719,6 +720,7 @@ volatile bool Temperature::raw_temps_ready = false; SERIAL_ECHOLNPGM(STR_PID_TEMP_TOO_HIGH); TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_TEMP_TOO_HIGH)); TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_PidTuning(PID_TEMP_TOO_HIGH)); + TERN_(HOST_PROMPT_SUPPORT, hostui.notify(GET_TEXT_F(MSG_PID_TEMP_TOO_HIGH))); break; } @@ -756,12 +758,14 @@ volatile bool Temperature::raw_temps_ready = false; TERN_(DWIN_CREALITY_LCD, DWIN_Popup_Temperature(0)); TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_PidTuning(PID_TUNING_TIMEOUT)); TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_TUNING_TIMEOUT)); + TERN_(HOST_PROMPT_SUPPORT, hostui.notify(GET_TEXT_F(MSG_PID_TIMEOUT))); SERIAL_ECHOLNPGM(STR_PID_TIMEOUT); break; } if (cycles > ncycles && cycles > 2) { SERIAL_ECHOLNPGM(STR_PID_AUTOTUNE_FINISHED); + TERN_(HOST_PROMPT_SUPPORT, hostui.notify(GET_TEXT_F(MSG_PID_AUTOTUNE_DONE))); #if EITHER(PIDTEMPBED, PIDTEMPCHAMBER) FSTR_P const estring = GHV(F("chamber"), F("bed"), FPSTR(NUL_STR)); diff --git a/buildroot/tests/rambo b/buildroot/tests/rambo index 92e8bc2b5f..e696dce96e 100755 --- a/buildroot/tests/rambo +++ b/buildroot/tests/rambo @@ -115,7 +115,7 @@ opt_set MOTHERBOARD BOARD_RAMBO \ FAN_MIN_PWM 50 FAN_KICKSTART_TIME 100 \ XY_FREQUENCY_LIMIT 15 opt_enable COREYX USE_XMAX_PLUG MIXING_EXTRUDER GRADIENT_MIX \ - BABYSTEPPING BABYSTEP_DISPLAY_TOTAL FILAMENT_LCD_DISPLAY FILAMENT_WIDTH_SENSOR \ + BABYSTEPPING BABYSTEP_DISPLAY_TOTAL FILAMENT_LCD_DISPLAY \ REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER MENU_ADDAUTOSTART SDSUPPORT SDCARD_SORT_ALPHA \ ENDSTOP_NOISE_THRESHOLD FAN_SOFT_PWM \ FIX_MOUNTED_PROBE PROBING_ESTEPPERS_OFF PROBE_OFFSET_WIZARD \ From 2d04e5733aad05a3646ebc3b37ecde25d479589d Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 8 Feb 2022 18:02:28 -0600 Subject: [PATCH 461/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Dro?= =?UTF-8?q?p=20hostui.flag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/host_actions.cpp | 8 -------- Marlin/src/feature/host_actions.h | 8 -------- Marlin/src/gcode/control/M111.cpp | 8 -------- 3 files changed, 24 deletions(-) diff --git a/Marlin/src/feature/host_actions.cpp b/Marlin/src/feature/host_actions.cpp index be7b055b55..c03a6bc597 100644 --- a/Marlin/src/feature/host_actions.cpp +++ b/Marlin/src/feature/host_actions.cpp @@ -39,10 +39,7 @@ HostUI hostui; -flag_t HostUI::flag; - void HostUI::action(FSTR_P const fstr, const bool eol) { - if (!flag.bits) return; PORT_REDIRECT(SerialMask::All); SERIAL_ECHOPGM("//action:"); SERIAL_ECHOF(fstr); @@ -96,21 +93,18 @@ void HostUI::action(FSTR_P const fstr, const bool eol) { #endif void HostUI::notify(const char * const cstr) { - if (!flag.bits) return; PORT_REDIRECT(SerialMask::All); action(F("notification "), false); SERIAL_ECHOLN(cstr); } void HostUI::notify_P(PGM_P const pstr) { - if (!flag.bits) return; PORT_REDIRECT(SerialMask::All); action(F("notification "), false); SERIAL_ECHOLNPGM_P(pstr); } void HostUI::prompt(FSTR_P const ptype, const bool eol/*=true*/) { - if (!flag.bits) return; PORT_REDIRECT(SerialMask::All); action(F("prompt_"), false); SERIAL_ECHOF(ptype); @@ -118,7 +112,6 @@ void HostUI::action(FSTR_P const fstr, const bool eol) { } void HostUI::prompt_plus(FSTR_P const ptype, FSTR_P const fstr, const char extra_char/*='\0'*/) { - if (!flag.bits) return; prompt(ptype, false); PORT_REDIRECT(SerialMask::All); SERIAL_CHAR(' '); @@ -127,7 +120,6 @@ void HostUI::action(FSTR_P const fstr, const bool eol) { SERIAL_EOL(); } void HostUI::prompt_begin(const PromptReason reason, FSTR_P const fstr, const char extra_char/*='\0'*/) { - if (!flag.bits) return; prompt_end(); host_prompt_reason = reason; prompt_plus(F("begin"), fstr, extra_char); diff --git a/Marlin/src/feature/host_actions.h b/Marlin/src/feature/host_actions.h index 78a7821eba..41d66b82ec 100644 --- a/Marlin/src/feature/host_actions.h +++ b/Marlin/src/feature/host_actions.h @@ -24,11 +24,6 @@ #include "../inc/MarlinConfigPre.h" #include "../HAL/shared/Marduino.h" -typedef union { - uint8_t bits; - struct { bool info:1, errors:1, debug:1; }; -} flag_t; - #if ENABLED(HOST_PROMPT_SUPPORT) enum PromptReason : uint8_t { @@ -45,9 +40,6 @@ typedef union { class HostUI { public: - static flag_t flag; - HostUI() { flag.bits = 0xFF; } - static void action(FSTR_P const fstr, const bool eol=true); #ifdef ACTION_ON_KILL diff --git a/Marlin/src/gcode/control/M111.cpp b/Marlin/src/gcode/control/M111.cpp index 846bf70556..d6aeb77410 100644 --- a/Marlin/src/gcode/control/M111.cpp +++ b/Marlin/src/gcode/control/M111.cpp @@ -22,20 +22,12 @@ #include "../gcode.h" -#if ENABLED(HOST_ACTION_COMMANDS) - #include "../../feature/host_actions.h" -#endif - /** * M111: Set the debug level */ void GcodeSuite::M111() { if (parser.seenval('S')) marlin_debug_flags = parser.value_byte(); - #if EITHER(HOST_ACTION_COMMANDS, HOST_PROMPT_SUPPORT) - if (parser.seenval('H')) hostui.flag.bits = parser.value_byte(); - #endif - static PGMSTR(str_debug_1, STR_DEBUG_ECHO); static PGMSTR(str_debug_2, STR_DEBUG_INFO); static PGMSTR(str_debug_4, STR_DEBUG_ERRORS); From 1e18ce6e5d919372409dd0ce0e2b9487a5a8dbdc Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 9 Feb 2022 00:23:37 +0000 Subject: [PATCH 462/532] [cron] Bump distribution date (2022-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 497f49e284..70169b6965 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 "2022-02-08" +//#define STRING_DISTRIBUTION_DATE "2022-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 d850015710..1674b4c1e0 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 "2022-02-08" + #define STRING_DISTRIBUTION_DATE "2022-02-09" #endif /** From 0a24f858f3009b358c3c0841654521146949261a Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Thu, 10 Feb 2022 05:46:53 +1300 Subject: [PATCH 463/532] =?UTF-8?q?=F0=9F=9A=B8=20Restore=20active=20tool?= =?UTF-8?q?=20after=20ABL=20G29=20(#23692)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 4 ++-- Marlin/src/gcode/bedlevel/G35.cpp | 2 +- Marlin/src/gcode/bedlevel/abl/G29.cpp | 11 ++++++++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index 15395bcc8d..023d0c5b1d 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -316,7 +316,7 @@ void unified_bed_leveling::G29() { planner.synchronize(); // Send 'N' to force homing before G29 (internal only) if (axes_should_home() || parser.seen_test('N')) gcode.home_all_axes(); - TERN_(HAS_MULTI_HOTEND, if (active_extruder) tool_change(0)); + TERN_(HAS_MULTI_HOTEND, if (active_extruder != 0) tool_change(0, true)); } // Invalidate one or more nearby mesh points, possibly all. @@ -663,7 +663,7 @@ void unified_bed_leveling::G29() { UNUSED(probe_deployed); #endif - TERN_(HAS_MULTI_HOTEND, tool_change(old_tool_index)); + TERN_(HAS_MULTI_HOTEND, if (old_tool_index != 0) tool_change(old_tool_index)); return; } diff --git a/Marlin/src/gcode/bedlevel/G35.cpp b/Marlin/src/gcode/bedlevel/G35.cpp index 4dd1323a6c..dd828bf0c8 100644 --- a/Marlin/src/gcode/bedlevel/G35.cpp +++ b/Marlin/src/gcode/bedlevel/G35.cpp @@ -155,7 +155,7 @@ void GcodeSuite::G35() { // Restore the active tool after homing #if HAS_MULTI_HOTEND - tool_change(old_tool_index, DISABLED(PARKING_EXTRUDER)); // Fetch previous toolhead if not PARKING_EXTRUDER + if (old_tool_index != 0) tool_change(old_tool_index, DISABLED(PARKING_EXTRUDER)); // Fetch previous toolhead if not PARKING_EXTRUDER #endif #if BOTH(HAS_LEVELING, RESTORE_LEVELING_AFTER_G35) diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index fddca22c32..9ec43fe49d 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -93,6 +93,10 @@ public: bool dryrun, reenable; + #if HAS_MULTI_HOTEND + uint8_t tool_index; + #endif + #if EITHER(PROBE_MANUALLY, AUTO_BED_LEVELING_LINEAR) int abl_probe_index; #endif @@ -263,7 +267,10 @@ G29_TYPE GcodeSuite::G29() { */ if (!g29_in_progress) { - TERN_(HAS_MULTI_HOTEND, if (active_extruder) tool_change(0)); + #if HAS_MULTI_HOTEND + abl.tool_index = active_extruder; + if (active_extruder != 0) tool_change(0, true); + #endif #if EITHER(PROBE_MANUALLY, AUTO_BED_LEVELING_LINEAR) abl.abl_probe_index = -1; @@ -891,6 +898,8 @@ G29_TYPE GcodeSuite::G29() { TERN_(HAS_DWIN_E3V2_BASIC, DWIN_CompletedLeveling()); + TERN_(HAS_MULTI_HOTEND, if (abl.tool_index != 0) tool_change(abl.tool_index)); + report_current_position(); TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_IDLE)); From a323d6732bf691d29ce996b6bfd11cbcc3c9f0a7 Mon Sep 17 00:00:00 2001 From: MOHAMMAD RASIM Date: Wed, 9 Feb 2022 21:29:34 +0300 Subject: [PATCH 464/532] =?UTF-8?q?=F0=9F=9A=B8=20Fix,=20Improve=20Power-L?= =?UTF-8?q?oss=20Recovery=20(#22828)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/feature/powerloss.cpp | 43 ++++++++++++++------- Marlin/src/feature/powerloss.h | 4 +- Marlin/src/gcode/calibrate/G28.cpp | 11 ++++-- Marlin/src/gcode/feature/powerloss/M413.cpp | 5 +-- Marlin/src/inc/SanityCheck.h | 2 - Marlin/src/module/planner.cpp | 6 ++- Marlin/src/module/planner.h | 3 +- Marlin/src/module/stepper.cpp | 5 ++- 8 files changed, 51 insertions(+), 28 deletions(-) diff --git a/Marlin/src/feature/powerloss.cpp b/Marlin/src/feature/powerloss.cpp index 723ec1903b..214c248d35 100644 --- a/Marlin/src/feature/powerloss.cpp +++ b/Marlin/src/feature/powerloss.cpp @@ -54,6 +54,10 @@ uint32_t PrintJobRecovery::cmd_sdpos, // = 0 #include "../module/temperature.h" #include "../core/serial.h" +#if HOMING_Z_WITH_PROBE + #include "../module/probe.h" +#endif + #if ENABLED(FWRETRACT) #include "fwretract.h" #endif @@ -178,7 +182,8 @@ void PrintJobRecovery::save(const bool force/*=false*/, const float zraise/*=POW info.valid_foot = info.valid_head; // Machine state - info.current_position = current_position; + // info.sdpos and info.current_position are pre-filled from the Stepper ISR + info.feedrate = uint16_t(MMS_TO_MMM(feedrate_mm_s)); info.zraise = zraise; info.flag.raised = raised; // Was Z raised before power-off? @@ -265,6 +270,10 @@ void PrintJobRecovery::save(const bool force/*=false*/, const float zraise/*=POW #endif +#endif // POWER_LOSS_PIN + +#if PIN_EXISTS(POWER_LOSS) || ENABLED(DEBUG_POWER_LOSS_RECOVERY) + /** * An outage was detected by a sensor pin. * - If not SD printing, let the machine turn off on its own with no "KILL" screen @@ -273,7 +282,7 @@ void PrintJobRecovery::save(const bool force/*=false*/, const float zraise/*=POW * - If backup power is available Retract E and Raise Z * - Go to the KILL screen */ - void PrintJobRecovery::_outage() { + void PrintJobRecovery::_outage(TERN_(DEBUG_POWER_LOSS_RECOVERY, const bool simulated/*=false*/)) { #if ENABLED(BACKUP_POWER_SUPPLY) static bool lock = false; if (lock) return; // No re-entrance from idle() during retract_and_lift() @@ -301,10 +310,16 @@ void PrintJobRecovery::save(const bool force/*=false*/, const float zraise/*=POW retract_and_lift(zraise); #endif - kill(GET_TEXT_F(MSG_OUTAGE_RECOVERY)); + if (TERN0(DEBUG_POWER_LOSS_RECOVERY, simulated)) { + card.fileHasFinished(); + current_position.reset(); + sync_plan_position(); + } + else + kill(GET_TEXT_F(MSG_OUTAGE_RECOVERY)); } -#endif +#endif // POWER_LOSS_PIN || DEBUG_POWER_LOSS_RECOVERY /** * Save the recovery info the recovery file @@ -390,14 +405,12 @@ void PrintJobRecovery::resume() { #if ENABLED(POWER_LOSS_RECOVER_ZHOME) && defined(POWER_LOSS_ZHOME_POS) #define HOMING_Z_DOWN 1 - #else - #define HOME_XY_ONLY 1 #endif float z_now = info.flag.raised ? z_raised : z_print; - // Reset E to 0 and set Z to the real position - #if HOME_XY_ONLY + #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); #endif @@ -409,15 +422,15 @@ void PrintJobRecovery::resume() { gcode.process_subcommands_now(cmd); } - // Home XY with no Z raise, and also home Z here if Z isn't homing down below. - gcode.process_subcommands_now(F("G28R0" TERN_(HOME_XY_ONLY, "XY"))); // No raise during G28 + // Home XY with no Z raise + gcode.process_subcommands_now(F("G28R0XY")); // No raise during G28 #endif #if HOMING_Z_DOWN // Move to a safe XY position and home Z while avoiding the print. - constexpr xy_pos_t p = POWER_LOSS_ZHOME_POS; - sprintf_P(cmd, PSTR("G1X%sY%sF1000\nG28Z"), dtostrf(p.x, 1, 3, str_1), dtostrf(p.y, 1, 3, str_2)); + 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); #endif @@ -431,7 +444,7 @@ void PrintJobRecovery::resume() { sprintf_P(cmd, PSTR("M420S%cZ%s"), '0' + (char)info.flag.leveling, dtostrf(info.fade, 1, 1, str_1)); gcode.process_subcommands_now(cmd); - #if HOME_XY_ONLY + #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); @@ -513,12 +526,12 @@ 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("G1E" STRINGIFY(POWER_LOSS_RETRACT_LEN) "F3000")); + gcode.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("G1 E%d F3000"), (POWER_LOSS_PURGE_LEN) + (POWER_LOSS_RETRACT_LEN)); + sprintf_P(cmd, PSTR("G1F3000E%d"), (POWER_LOSS_PURGE_LEN) + (POWER_LOSS_RETRACT_LEN)); gcode.process_subcommands_now(cmd); #endif diff --git a/Marlin/src/feature/powerloss.h b/Marlin/src/feature/powerloss.h index 50abad9222..4e97109bb7 100644 --- a/Marlin/src/feature/powerloss.h +++ b/Marlin/src/feature/powerloss.h @@ -216,9 +216,9 @@ class PrintJobRecovery { static void retract_and_lift(const_float_t zraise); #endif - #if PIN_EXISTS(POWER_LOSS) + #if PIN_EXISTS(POWER_LOSS) || ENABLED(DEBUG_POWER_LOSS_RECOVERY) friend class GcodeSuite; - static void _outage(); + static void _outage(TERN_(DEBUG_POWER_LOSS_RECOVERY, const bool simulated=false)); #endif }; diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 48f02d2a33..606f6ad031 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -395,9 +395,10 @@ void GcodeSuite::G28() { TERN_(HOME_Z_FIRST, if (doZ) homeaxis(Z_AXIS)); - const float z_homing_height = parser.seenval('R') ? parser.value_linear_units() : Z_HOMING_HEIGHT; + const bool seenR = parser.seenval('R'); + const float z_homing_height = seenR ? parser.value_linear_units() : Z_HOMING_HEIGHT; - if (z_homing_height && (LINEAR_AXIS_GANG(doX, || doY, || TERN0(Z_SAFE_HOMING, doZ), || doI, || doJ, || doK))) { + if (z_homing_height && (seenR || LINEAR_AXIS_GANG(doX, || doY, || TERN0(Z_SAFE_HOMING, doZ), || doI, || doJ, || doK))) { // Raise Z before homing any other axes and z is not already high enough (never lower z) if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Raise Z (before homing) by ", z_homing_height); do_z_clearance(z_homing_height); @@ -451,7 +452,11 @@ void GcodeSuite::G28() { stepper.set_separate_multi_axis(false); #endif - TERN(Z_SAFE_HOMING, home_z_safely(), homeaxis(Z_AXIS)); + #if ENABLED(Z_SAFE_HOMING) + if (TERN1(POWER_LOSS_RECOVERY, !parser.seen_test('H'))) home_z_safely(); else homeaxis(Z_AXIS); + #else + homeaxis(Z_AXIS); + #endif probe.move_z_after_homing(); } #endif diff --git a/Marlin/src/gcode/feature/powerloss/M413.cpp b/Marlin/src/gcode/feature/powerloss/M413.cpp index 0ccbfe6341..4807d3e8f9 100644 --- a/Marlin/src/gcode/feature/powerloss/M413.cpp +++ b/Marlin/src/gcode/feature/powerloss/M413.cpp @@ -48,9 +48,8 @@ void GcodeSuite::M413() { if (parser.seen_test('W')) recovery.save(true); if (parser.seen_test('P')) recovery.purge(); if (parser.seen_test('D')) recovery.debug(F("M413")); - #if PIN_EXISTS(POWER_LOSS) - if (parser.seen_test('O')) recovery._outage(); - #endif + if (parser.seen_test('O')) recovery._outage(true); + if (parser.seen_test('C')) recovery.check(); if (parser.seen_test('E')) SERIAL_ECHOF(recovery.exists() ? F("PLR Exists\n") : F("No PLR\n")); if (parser.seen_test('V')) SERIAL_ECHOF(recovery.valid() ? F("Valid\n") : F("Invalid\n")); #endif diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index f154592f4e..38c2866ca1 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -3447,8 +3447,6 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #if ENABLED(POWER_LOSS_RECOVERY) #if ENABLED(BACKUP_POWER_SUPPLY) && !PIN_EXISTS(POWER_LOSS) #error "BACKUP_POWER_SUPPLY requires a POWER_LOSS_PIN." - #elif BOTH(POWER_LOSS_RECOVER_ZHOME, Z_SAFE_HOMING) - #error "POWER_LOSS_RECOVER_ZHOME cannot be used with Z_SAFE_HOMING." #elif BOTH(POWER_LOSS_PULLUP, POWER_LOSS_PULLDOWN) #error "You can't enable POWER_LOSS_PULLUP and POWER_LOSS_PULLDOWN at the same time." #elif ENABLED(POWER_LOSS_RECOVER_ZHOME) && Z_HOME_TO_MAX diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 8d8f44dc78..f9ddcf8f13 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -2809,9 +2809,13 @@ bool Planner::_populate_block(block_t * const block, bool split_move, position = target; // Update the position + #if ENABLED(POWER_LOSS_RECOVERY) + block->sdpos = recovery.command_sdpos(); + block->start_position = position_float.asLogical(); + #endif + TERN_(HAS_POSITION_FLOAT, position_float = target_float); TERN_(GRADIENT_MIX, mixer.gradient_control(target_float.z)); - TERN_(POWER_LOSS_RECOVERY, block->sdpos = recovery.command_sdpos()); return true; // Movement was accepted diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index 380c35755c..f29604bea8 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -244,6 +244,7 @@ typedef struct block_t { #if ENABLED(POWER_LOSS_RECOVERY) uint32_t sdpos; + xyze_pos_t start_position; #endif #if ENABLED(LASER_POWER_INLINE) @@ -252,7 +253,7 @@ typedef struct block_t { } block_t; -#if ANY(LIN_ADVANCE, SCARA_FEEDRATE_SCALING, GRADIENT_MIX, LCD_SHOW_E_TOTAL) +#if ANY(LIN_ADVANCE, SCARA_FEEDRATE_SCALING, GRADIENT_MIX, LCD_SHOW_E_TOTAL, POWER_LOSS_RECOVERY) #define HAS_POSITION_FLOAT 1 #endif diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index ae8a1ef078..5da06a5e50 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -2151,7 +2151,10 @@ uint32_t Stepper::block_phase_isr() { cutter.apply_power(current_block->cutter_power); #endif - TERN_(POWER_LOSS_RECOVERY, recovery.info.sdpos = current_block->sdpos); + #if ENABLED(POWER_LOSS_RECOVERY) + recovery.info.sdpos = current_block->sdpos; + recovery.info.current_position = current_block->start_position; + #endif #if ENABLED(DIRECT_STEPPING) if (IS_PAGE(current_block)) { From ae96892612645c9b694186d463a8708fc3bce874 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 10 Feb 2022 00:20:36 +0000 Subject: [PATCH 465/532] [cron] Bump distribution date (2022-02-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 70169b6965..0831287429 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 "2022-02-09" +//#define STRING_DISTRIBUTION_DATE "2022-02-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 1674b4c1e0..3283615dc3 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 "2022-02-09" + #define STRING_DISTRIBUTION_DATE "2022-02-10" #endif /** From 191d25f917f518149756a3f29562674076d1def8 Mon Sep 17 00:00:00 2001 From: Mads Ynddal <5528170+Baekalfen@users.noreply.github.com> Date: Thu, 10 Feb 2022 18:58:36 +0100 Subject: [PATCH 466/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20XYZEval::set(XY,?= =?UTF-8?q?=20Z)=20and=20(XY,=20Z,=20E)=20(#23704)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix regression in #21953 Co-authored-by: Scott Lahteine --- Marlin/src/core/types.h | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/Marlin/src/core/types.h b/Marlin/src/core/types.h index aee25a0dff..b95b595659 100644 --- a/Marlin/src/core/types.h +++ b/Marlin/src/core/types.h @@ -536,19 +536,9 @@ struct XYZEval { // Reset all to 0 FI void reset() { LOGICAL_AXIS_GANG(e =, x =, y =, z =, i =, j =, k =) 0; } - // Setters taking struct types and arrays - FI void set(const T px) { x = px; } - FI void set(const T px, const T py) { x = px; y = py; } - FI void set(const XYval pxy) { x = pxy.x; y = pxy.y; } - FI void set(const XYZval pxyz) { set(LINEAR_AXIS_ELEM(pxyz)); } - #if HAS_Z_AXIS - FI void set(LINEAR_AXIS_ARGS(const T)) { LINEAR_AXIS_CODE(a = x, b = y, c = z, u = i, v = j, w = k); } - #endif - #if LOGICAL_AXES > LINEAR_AXES - FI void set(const XYval pxy, const T pe) { set(pxy); e = pe; } - FI void set(const XYZval pxyz, const T pe) { set(pxyz); e = pe; } - FI void set(LOGICAL_AXIS_ARGS(const T)) { LOGICAL_AXIS_CODE(_e = e, a = x, b = y, c = z, u = i, v = j, w = k); } - #endif + // Setters for some number of linear axes, not all + FI void set(const T px) { x = px; } + FI void set(const T px, const T py) { x = px; y = py; } #if HAS_I_AXIS FI void set(const T px, const T py, const T pz) { x = px; y = py; z = pz; } #endif @@ -558,6 +548,18 @@ struct XYZEval { #if HAS_K_AXIS FI void set(const T px, const T py, const T pz, const T pi, const T pj) { x = px; y = py; z = pz; i = pi; j = pj; } #endif + // Setters taking struct types and arrays + FI void set(const XYval pxy) { x = pxy.x; y = pxy.y; } + FI void set(const XYZval pxyz) { set(LINEAR_AXIS_ELEM(pxyz)); } + #if HAS_Z_AXIS + FI void set(LINEAR_AXIS_ARGS(const T)) { LINEAR_AXIS_CODE(a = x, b = y, c = z, u = i, v = j, w = k); } + #endif + FI void set(const XYval pxy, const T pz) { set(pxy); TERN_(HAS_Z_AXIS, z = pz); } + #if LOGICAL_AXES > LINEAR_AXES + FI void set(const XYval pxy, const T pz, const T pe) { set(pxy, pz); e = pe; } + FI void set(const XYZval pxyz, const T pe) { set(pxyz); e = pe; } + FI void set(LOGICAL_AXIS_ARGS(const T)) { LOGICAL_AXIS_CODE(_e = e, a = x, b = y, c = z, u = i, v = j, w = k); } + #endif // Length reduced to one dimension FI T magnitude() const { return (T)sqrtf(LOGICAL_AXIS_GANG(+ e*e, + x*x, + y*y, + z*z, + i*i, + j*j, + k*k)); } From 5520aa3a10453d9245854aeed88583f11c34cab2 Mon Sep 17 00:00:00 2001 From: espr14 Date: Thu, 10 Feb 2022 20:28:38 +0100 Subject: [PATCH 467/532] =?UTF-8?q?=F0=9F=A9=B9=20Simplify=20quick=20homin?= =?UTF-8?q?g=20feedrate=20(#23714)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/gcode/calibrate/G28.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 606f6ad031..a38c567939 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -76,10 +76,9 @@ const int x_axis_home_dir = TOOL_X_HOME_DIR(active_extruder); - const float mlx = max_length(X_AXIS), - mly = max_length(Y_AXIS), - mlratio = mlx > mly ? mly / mlx : mlx / mly, - fr_mm_s = _MIN(homing_feedrate(X_AXIS), homing_feedrate(Y_AXIS)) * SQRT(sq(mlratio) + 1.0); + // Use a higher diagonal feedrate so axes move at homing speed + const float minfr = _MIN(homing_feedrate(X_AXIS), homing_feedrate(Y_AXIS)), + fr_mm_s = HYPOT(minfr, minfr); #if ENABLED(SENSORLESS_HOMING) sensorless_t stealth_states { @@ -95,7 +94,7 @@ }; #endif - do_blocking_move_to_xy(1.5 * mlx * x_axis_home_dir, 1.5 * mly * Y_HOME_DIR, fr_mm_s); + do_blocking_move_to_xy(1.5 * max_length(X_AXIS) * x_axis_home_dir, 1.5 * max_length(Y_AXIS) * Y_HOME_DIR, fr_mm_s); endstops.validate_homing_move(); From 267a44c95cc09b6ca54c485320bdbccebe20af7a Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 10 Feb 2022 13:58:50 -0600 Subject: [PATCH 468/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Wra?= =?UTF-8?q?p=20MMU1=20pins?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/linux/pins_RAMPS_LINUX.h | 18 +++++++++-------- Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h | 10 ++++++---- Marlin/src/pins/rambo/pins_EINSY_RAMBO.h | 8 +++++--- Marlin/src/pins/rambo/pins_EINSY_RETRO.h | 8 +++++--- Marlin/src/pins/rambo/pins_MINIRAMBO.h | 10 ++++++---- Marlin/src/pins/rambo/pins_RAMBO.h | 8 +++++--- Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h | 4 +++- Marlin/src/pins/ramps/pins_RAMPS.h | 18 +++++++++-------- Marlin/src/pins/ramps/pins_RAMPS_S_12.h | 18 +++++++++-------- Marlin/src/pins/ramps/pins_TT_OSCAR.h | 20 ++++++++++--------- Marlin/src/pins/stm32f4/pins_LERDGE_S.h | 6 ++++-- Marlin/src/pins/stm32f4/pins_VAKE403D.h | 6 ++++-- 12 files changed, 79 insertions(+), 55 deletions(-) diff --git a/Marlin/src/pins/linux/pins_RAMPS_LINUX.h b/Marlin/src/pins/linux/pins_RAMPS_LINUX.h index 372f967652..e2efdfa492 100644 --- a/Marlin/src/pins/linux/pins_RAMPS_LINUX.h +++ b/Marlin/src/pins/linux/pins_RAMPS_LINUX.h @@ -234,14 +234,16 @@ // // Průša i3 MK2 Multiplexer Support // -#ifndef E_MUX0_PIN - #define E_MUX0_PIN 40 // Z_CS_PIN -#endif -#ifndef E_MUX1_PIN - #define E_MUX1_PIN 42 // E0_CS_PIN -#endif -#ifndef E_MUX2_PIN - #define E_MUX2_PIN 44 // E1_CS_PIN +#if HAS_PRUSA_MMU1 + #ifndef E_MUX0_PIN + #define E_MUX0_PIN 40 // Z_CS_PIN + #endif + #ifndef E_MUX1_PIN + #define E_MUX1_PIN 42 // E0_CS_PIN + #endif + #ifndef E_MUX2_PIN + #define E_MUX2_PIN 44 // E1_CS_PIN + #endif #endif /** diff --git a/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h b/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h index ee9d0e8c7a..b08ac536b3 100644 --- a/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h +++ b/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h @@ -258,11 +258,13 @@ // // Průša i3 MK2 Multiplexer Support // -#if SERIAL_PORT != 0 && SERIAL_PORT_2 != 0 - #define E_MUX0_PIN P0_03 // ( 0) Z_CS_PIN - #define E_MUX1_PIN P0_02 // ( 1) E0_CS_PIN +#if HAS_PRUSA_MMU1 + #if SERIAL_PORT != 0 && SERIAL_PORT_2 != 0 + #define E_MUX0_PIN P0_03 // ( 0) Z_CS_PIN + #define E_MUX1_PIN P0_02 // ( 1) E0_CS_PIN + #endif + #define E_MUX2_PIN P0_26 // (63) E1_CS_PIN #endif -#define E_MUX2_PIN P0_26 // (63) E1_CS_PIN /** * LCD / Controller diff --git a/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h b/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h index a7d1a62820..9150bf1365 100644 --- a/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h +++ b/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h @@ -163,9 +163,11 @@ // // Průša i3 MK2 Multiplexer Support // -#define E_MUX0_PIN 17 -#define E_MUX1_PIN 16 -#define E_MUX2_PIN 78 // 84 in MK2 Firmware, with BEEPER as 78 +#if HAS_PRUSA_MMU1 + #define E_MUX0_PIN 17 + #define E_MUX1_PIN 16 + #define E_MUX2_PIN 78 // 84 in MK2 Firmware, with BEEPER as 78 +#endif // // LCD / Controller diff --git a/Marlin/src/pins/rambo/pins_EINSY_RETRO.h b/Marlin/src/pins/rambo/pins_EINSY_RETRO.h index 165475dae8..8bc0a90c05 100644 --- a/Marlin/src/pins/rambo/pins_EINSY_RETRO.h +++ b/Marlin/src/pins/rambo/pins_EINSY_RETRO.h @@ -157,9 +157,11 @@ // // Průša i3 MK2 Multiplexer Support // -#define E_MUX0_PIN 17 -#define E_MUX1_PIN 16 -#define E_MUX2_PIN 78 // 84 in MK2 Firmware, with BEEPER as 78 +#if HAS_PRUSA_MMU1 + #define E_MUX0_PIN 17 + #define E_MUX1_PIN 16 + #define E_MUX2_PIN 78 // 84 in MK2 Firmware, with BEEPER as 78 +#endif // // LCD / Controller diff --git a/Marlin/src/pins/rambo/pins_MINIRAMBO.h b/Marlin/src/pins/rambo/pins_MINIRAMBO.h index ab25e2e692..31d44f2b34 100644 --- a/Marlin/src/pins/rambo/pins_MINIRAMBO.h +++ b/Marlin/src/pins/rambo/pins_MINIRAMBO.h @@ -130,10 +130,12 @@ // // Průša i3 MK2 Multiplexer Support // -#define E_MUX0_PIN 17 -#define E_MUX1_PIN 16 -#if !MB(MINIRAMBO_10A) - #define E_MUX2_PIN 78 // 84 in MK2 Firmware, with BEEPER as 78 +#if HAS_PRUSA_MMU1 + #define E_MUX0_PIN 17 + #define E_MUX1_PIN 16 + #if !MB(MINIRAMBO_10A) + #define E_MUX2_PIN 78 // 84 in MK2 Firmware, with BEEPER as 78 + #endif #endif // diff --git a/Marlin/src/pins/rambo/pins_RAMBO.h b/Marlin/src/pins/rambo/pins_RAMBO.h index f27bced623..5484b193b9 100644 --- a/Marlin/src/pins/rambo/pins_RAMBO.h +++ b/Marlin/src/pins/rambo/pins_RAMBO.h @@ -186,9 +186,11 @@ // // Průša i3 MK2 Multiplexer Support // -#define E_MUX0_PIN 17 -#define E_MUX1_PIN 16 -#define E_MUX2_PIN 84 // 84 in MK2 Firmware +#if HAS_PRUSA_MMU1 + #define E_MUX0_PIN 17 + #define E_MUX1_PIN 16 + #define E_MUX2_PIN 84 // 84 in MK2 Firmware +#endif // // LCD / Controller diff --git a/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h b/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h index 729a82b9c6..a7817c6f3a 100644 --- a/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h +++ b/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h @@ -105,7 +105,9 @@ // // Průša i3 MK2 Multiplexer Support // -#define E_MUX2_PIN -1 +#if HAS_PRUSA_MMU1 + #define E_MUX2_PIN -1 +#endif // // Misc. Functions diff --git a/Marlin/src/pins/ramps/pins_RAMPS.h b/Marlin/src/pins/ramps/pins_RAMPS.h index 70da23af73..29caaf0533 100644 --- a/Marlin/src/pins/ramps/pins_RAMPS.h +++ b/Marlin/src/pins/ramps/pins_RAMPS.h @@ -412,14 +412,16 @@ // // Průša i3 MK2 Multiplexer Support // -#ifndef E_MUX0_PIN - #define E_MUX0_PIN 40 // Z_CS_PIN -#endif -#ifndef E_MUX1_PIN - #define E_MUX1_PIN 42 // E0_CS_PIN -#endif -#ifndef E_MUX2_PIN - #define E_MUX2_PIN 44 // E1_CS_PIN +#if HAS_PRUSA_MMU1 + #ifndef E_MUX0_PIN + #define E_MUX0_PIN 40 // Z_CS_PIN + #endif + #ifndef E_MUX1_PIN + #define E_MUX1_PIN 42 // E0_CS_PIN + #endif + #ifndef E_MUX2_PIN + #define E_MUX2_PIN 44 // E1_CS_PIN + #endif #endif // diff --git a/Marlin/src/pins/ramps/pins_RAMPS_S_12.h b/Marlin/src/pins/ramps/pins_RAMPS_S_12.h index e1ba91cde8..f41573b527 100644 --- a/Marlin/src/pins/ramps/pins_RAMPS_S_12.h +++ b/Marlin/src/pins/ramps/pins_RAMPS_S_12.h @@ -233,14 +233,16 @@ // // Průša i3 MK2 Multiplexer Support // -#ifndef E_MUX0_PIN - #define E_MUX0_PIN 29 // E2_STEP_PIN -#endif -#ifndef E_MUX1_PIN - #define E_MUX1_PIN 28 // E2_DIR_PIN -#endif -#ifndef E_MUX2_PIN - #define E_MUX2_PIN 39 // E2_ENABLE_PIN +#if HAS_PRUSA_MMU1 + #ifndef E_MUX0_PIN + #define E_MUX0_PIN 29 // E2_STEP_PIN + #endif + #ifndef E_MUX1_PIN + #define E_MUX1_PIN 28 // E2_DIR_PIN + #endif + #ifndef E_MUX2_PIN + #define E_MUX2_PIN 39 // E2_ENABLE_PIN + #endif #endif ////////////////////////// diff --git a/Marlin/src/pins/ramps/pins_TT_OSCAR.h b/Marlin/src/pins/ramps/pins_TT_OSCAR.h index 277b1af2de..9d844ebcdc 100644 --- a/Marlin/src/pins/ramps/pins_TT_OSCAR.h +++ b/Marlin/src/pins/ramps/pins_TT_OSCAR.h @@ -252,15 +252,17 @@ // // Průša i3 MK2 Multiplexer Support // -//#ifndef E_MUX0_PIN -// #define E_MUX0_PIN 58 // Y_CS_PIN -//#endif -//#ifndef E_MUX1_PIN -// #define E_MUX1_PIN 53 // Z_CS_PIN -//#endif -//#ifndef E_MUX2_PIN -// #define E_MUX2_PIN 49 // En_CS_PIN -//#endif +#if 0 && HAS_PRUSA_MMU1 + #ifndef E_MUX0_PIN + #define E_MUX0_PIN 58 // Y_CS_PIN + #endif + #ifndef E_MUX1_PIN + #define E_MUX1_PIN 53 // Z_CS_PIN + #endif + #ifndef E_MUX2_PIN + #define E_MUX2_PIN 49 // En_CS_PIN + #endif +#endif ////////////////////////// // LCDs and Controllers // diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_S.h b/Marlin/src/pins/stm32f4/pins_LERDGE_S.h index c904d57a1f..e4fc97170c 100644 --- a/Marlin/src/pins/stm32f4/pins_LERDGE_S.h +++ b/Marlin/src/pins/stm32f4/pins_LERDGE_S.h @@ -133,8 +133,10 @@ // // Průša i3 MK2 Multi Material Multiplexer Support // -//#define E_MUX0_PIN -1 -//#define E_MUX1_PIN -1 +#if HAS_PRUSA_MMU1 + //#define E_MUX0_PIN -1 + //#define E_MUX1_PIN -1 +#endif // // LED / Lighting diff --git a/Marlin/src/pins/stm32f4/pins_VAKE403D.h b/Marlin/src/pins/stm32f4/pins_VAKE403D.h index bb5507b29a..c6b24f9eca 100644 --- a/Marlin/src/pins/stm32f4/pins_VAKE403D.h +++ b/Marlin/src/pins/stm32f4/pins_VAKE403D.h @@ -150,8 +150,10 @@ // // Průša i3 MK2 Multi Material Multiplexer Support // -//#define E_MUX0_PIN PG3 -//#define E_MUX1_PIN PG4 +#if HAS_PRUSA_MMU1 + //#define E_MUX0_PIN PG3 + //#define E_MUX1_PIN PG4 +#endif #define LED_PIN PB14 // Alive #define PS_ON_PIN PE0 From f2d1770cee926d4b08c7d055ed92fb828d1f53d4 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 11 Feb 2022 04:02:45 +0800 Subject: [PATCH 469/532] =?UTF-8?q?=E2=9C=A8=20Pxmalion=20Core=20i3=20(#23?= =?UTF-8?q?711)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/boards.h | 1 + Marlin/src/pins/pins.h | 2 + Marlin/src/pins/ramps/pins_PXMALION_CORE_I3.h | 86 +++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 Marlin/src/pins/ramps/pins_PXMALION_CORE_I3.h diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 21c0eaaf30..4435452005 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -116,6 +116,7 @@ #define BOARD_LONGER3D_LK1_PRO 1160 // Longer LK1 PRO / Alfawise U20 Pro (PRO version) #define BOARD_LONGER3D_LKx_PRO 1161 // Longer LKx PRO / Alfawise Uxx Pro (PRO version) #define BOARD_ZRIB_V53 1162 // Zonestar zrib V5.3 (Chinese RAMPS replica) +#define BOARD_PXMALION_CORE_I3 1163 // Pxmalion Core I3 // // RAMBo and derivatives diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 4ba97a77a7..0afff4bd42 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -201,6 +201,8 @@ #include "ramps/pins_RAMPS_S_12.h" // ATmega2560 env:mega2560 #elif MB(LONGER3D_LK1_PRO, LONGER3D_LKx_PRO) #include "ramps/pins_LONGER3D_LKx_PRO.h" // ATmega2560 env:mega2560 +#elif MB(PXMALION_CORE_I3) + #include "ramps/pins_PXMALION_CORE_I3.h" // ATmega2560 env:mega2560 // // RAMBo and derivatives diff --git a/Marlin/src/pins/ramps/pins_PXMALION_CORE_I3.h b/Marlin/src/pins/ramps/pins_PXMALION_CORE_I3.h new file mode 100644 index 0000000000..12c40c7dca --- /dev/null +++ b/Marlin/src/pins/ramps/pins_PXMALION_CORE_I3.h @@ -0,0 +1,86 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2022 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 . + * + */ + +/** + * Pxmalion Core i3 - https://github.com/Pxmalion + */ + +#include "env_validate.h" + +#ifndef BOARD_INFO_NAME + #define BOARD_INFO_NAME "Core i3" +#endif + +// +// Servos +// +#define SERVO0_PIN 51 +#define SERVO1_PIN -1 +#define SERVO2_PIN -1 +#define SERVO3_PIN -1 + +// +// Limit Switches +// +#define X_STOP_PIN 3 +#define Y_STOP_PIN 2 +#define Z_MIN_PIN 19 +#define Z_MAX_PIN 18 + +// TODO: Filament Runout Sensor +#ifndef FIL_RUNOUT_PIN + #define FIL_RUNOUT_PIN -1 +#endif + +// +// Steppers +// +#define X_CS_PIN -1 +#define Y_CS_PIN -1 +#define Z_CS_PIN -1 +#define E0_CS_PIN -1 +#define E1_CS_PIN -1 + +// +// Heaters / Fans +// +#define FET_ORDER_EFB +#ifndef MOSFET_A_PIN + #define MOSFET_A_PIN 8 +#endif +#ifndef MOSFET_B_PIN + #define MOSFET_B_PIN 7 +#endif +#ifndef MOSFET_C_PIN + #define MOSFET_C_PIN 9 +#endif + +// +// Misc. Functions +// +#ifndef FILWIDTH_PIN + #define FILWIDTH_PIN -1 // Analog Input +#endif + +#define PS_ON_PIN 11 + +#include "pins_RAMPS.h" From 3d2b2ca790d31d174e1d26e665e3c61b1a6c8996 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 10 Feb 2022 16:03:48 -0600 Subject: [PATCH 470/532] =?UTF-8?q?=F0=9F=8E=A8=20Misc.=20DGUS=20cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/extui/dgus/DGUSDisplay.cpp | 28 +++++++++++-------- Marlin/src/lcd/extui/dgus/DGUSDisplay.h | 3 ++ .../src/lcd/extui/dgus/DGUSScreenHandler.cpp | 17 ++++++----- .../extui/dgus/fysetc/DGUSScreenHandler.cpp | 2 +- .../lcd/extui/dgus/fysetc/DGUSScreenHandler.h | 6 ++-- .../extui/dgus/hiprecy/DGUSScreenHandler.cpp | 2 +- .../extui/dgus/hiprecy/DGUSScreenHandler.h | 6 ++-- .../lcd/extui/dgus/mks/DGUSScreenHandler.cpp | 4 +-- .../lcd/extui/dgus/mks/DGUSScreenHandler.h | 8 +++--- .../extui/dgus/origin/DGUSScreenHandler.cpp | 2 +- .../lcd/extui/dgus/origin/DGUSScreenHandler.h | 6 ++-- 11 files changed, 48 insertions(+), 36 deletions(-) diff --git a/Marlin/src/lcd/extui/dgus/DGUSDisplay.cpp b/Marlin/src/lcd/extui/dgus/DGUSDisplay.cpp index 262dcea364..e2f11502e7 100644 --- a/Marlin/src/lcd/extui/dgus/DGUSDisplay.cpp +++ b/Marlin/src/lcd/extui/dgus/DGUSDisplay.cpp @@ -46,6 +46,12 @@ DGUSDisplay dgusdisplay; +#ifdef DEBUG_DGUSLCD_COMM + #define DEBUGLCDCOMM_ECHOPGM DEBUG_ECHOPGM +#else + #define DEBUGLCDCOMM_ECHOPGM(...) NOOP +#endif + // Preamble... 2 Bytes, usually 0x5A 0xA5, but configurable constexpr uint8_t DGUS_HEADER1 = 0x5A; constexpr uint8_t DGUS_HEADER2 = 0xA5; @@ -154,19 +160,19 @@ void DGUSDisplay::ProcessRx() { case DGUS_IDLE: // Waiting for the first header byte receivedbyte = LCD_SERIAL.read(); - //DEBUG_ECHOPGM("< ",x); + //DEBUGLCDCOMM_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(" ",x); + //DEBUGLCDCOMM_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, ") "); + //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; @@ -178,20 +184,20 @@ 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); + //DEBUGLCDCOMM_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); + //DEBUGLCDCOMM_ECHOPGM(" ", receivedbyte); *ptmp++ = receivedbyte; } - DEBUG_ECHOPGM(" # "); + //DEBUGLCDCOMM_ECHOPGM(" # "); // mostly we'll get this: 5A A5 03 82 4F 4B -- ACK on 0x82, so discard it. if (command == DGUS_CMD_WRITEVAR && 'O' == tmp[0] && 'K' == tmp[1]) { - DEBUG_ECHOLNPGM(">"); + //DEBUGLCDCOMM_ECHOPGM(">"); rx_datagram_state = DGUS_IDLE; break; } @@ -253,16 +259,16 @@ void DGUSDisplay::loop() { rx_datagram_state_t DGUSDisplay::rx_datagram_state = DGUS_IDLE; uint8_t DGUSDisplay::rx_datagram_len = 0; -bool DGUSDisplay::Initialized = false; -bool DGUSDisplay::no_reentrance = false; +bool DGUSDisplay::Initialized = false, + DGUSDisplay::no_reentrance = false; // A SW memory barrier, to ensure GCC does not overoptimize loops #define sw_barrier() asm volatile("": : :"memory"); bool populate_VPVar(const uint16_t VP, DGUS_VP_Variable * const ramcopy) { - // DEBUG_ECHOPGM("populate_VPVar ", VP); + //DEBUG_ECHOPGM("populate_VPVar ", VP); const DGUS_VP_Variable *pvp = DGUSLCD_FindVPVar(VP); - // DEBUG_ECHOLNPGM(" pvp ", (uint16_t )pvp); + //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/DGUSDisplay.h b/Marlin/src/lcd/extui/dgus/DGUSDisplay.h index 3040225d07..17303c689b 100644 --- a/Marlin/src/lcd/extui/dgus/DGUSDisplay.h +++ b/Marlin/src/lcd/extui/dgus/DGUSDisplay.h @@ -29,6 +29,9 @@ #include // size_t +//#define DEBUG_DGUSLCD +//#define DEBUG_DGUSLCD_COMM + #if HAS_BED_PROBE #include "../../../module/probe.h" #endif diff --git a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp index 70bcca1859..9b25f8aeb1 100644 --- a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp @@ -55,14 +55,14 @@ void (*DGUSScreenHandler::confirm_action_cb)() = nullptr; #if ENABLED(SDSUPPORT) int16_t DGUSScreenHandler::top_file = 0, DGUSScreenHandler::file_to_print = 0; - static ExtUI::FileList filelist; + ExtUI::FileList filelist; #endif #if ENABLED(DGUS_FILAMENT_LOADUNLOAD) filament_data_t filament_data; #endif -void DGUSScreenHandler::sendinfoscreen(const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool l4inflash) { +void DGUSScreenHandler::sendinfoscreen(PGM_P const line1, PGM_P const line2, PGM_P const line3, PGM_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool l4inflash) { DGUS_VP_Variable ramcopy; if (populate_VPVar(VP_MSGSTR1, &ramcopy)) { ramcopy.memadr = (void*) line1; @@ -76,13 +76,15 @@ void DGUSScreenHandler::sendinfoscreen(const char *line1, const char *line2, con ramcopy.memadr = (void*) line3; l3inflash ? DGUSScreenHandler::DGUSLCD_SendStringToDisplayPGM(ramcopy) : DGUSScreenHandler::DGUSLCD_SendStringToDisplay(ramcopy); } - if (populate_VPVar(VP_MSGSTR4, &ramcopy)) { - ramcopy.memadr = (void*) line4; - l4inflash ? DGUSScreenHandler::DGUSLCD_SendStringToDisplayPGM(ramcopy) : DGUSScreenHandler::DGUSLCD_SendStringToDisplay(ramcopy); - } + #ifdef VP_MSGSTR4 + if (populate_VPVar(VP_MSGSTR4, &ramcopy)) { + ramcopy.memadr = (void*) line4; + l4inflash ? DGUSScreenHandler::DGUSLCD_SendStringToDisplayPGM(ramcopy) : DGUSScreenHandler::DGUSLCD_SendStringToDisplay(ramcopy); + } + #endif } -void DGUSScreenHandler::HandleUserConfirmationPopUp(uint16_t VP, const char *line1, const char *line2, const char *line3, const char *line4, bool l1, bool l2, bool l3, bool l4) { +void DGUSScreenHandler::HandleUserConfirmationPopUp(uint16_t VP, PGM_P const line1, PGM_P const line2, PGM_P const line3, PGM_P const line4, bool l1, bool l2, bool l3, bool l4) { if (current_screen == DGUSLCD_SCREEN_CONFIRM) // Already showing a pop up, so we need to cancel that first. PopToOldScreen(); @@ -344,6 +346,7 @@ void DGUSScreenHandler::DGUSLCD_SendHeaterStatusToDisplay(DGUS_VP_Variable &var) SetupConfirmAction(nullptr); GotoScreen(DGUSLCD_SCREEN_POPUP); } + #endif // SDSUPPORT void DGUSScreenHandler::ScreenConfirmedOK(DGUS_VP_Variable &var, void *val_ptr) { diff --git a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp index eba4b153f1..e7466bfe08 100644 --- a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp @@ -42,7 +42,7 @@ #if ENABLED(SDSUPPORT) - static ExtUI::FileList filelist; + extern ExtUI::FileList filelist; void DGUSScreenHandler::DGUSLCD_SD_FileSelected(DGUS_VP_Variable &var, void *val_ptr) { uint16_t touched_nr = (int16_t)swap16(*(uint16_t*)val_ptr) + top_file; diff --git a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h index d4fdf1d27e..0bdf06ed7d 100644 --- a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h @@ -37,15 +37,15 @@ public: // Send all 4 strings that are displayed on the infoscreen, confirmation screen and kill screen // The bools specifying whether the strings are in RAM or FLASH. - static void sendinfoscreen(const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); - static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { + static void sendinfoscreen(PGM_P const line1, PGM_P const line2, PGM_P const line3, PGM_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); + static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, PGM_P const line3, PGM_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), line3, line4, l1inflash, l2inflash, l3inflash, liinflash); } static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), FTOP(line3), FTOP(line4), l1inflash, l2inflash, l3inflash, liinflash); } - static void HandleUserConfirmationPopUp(uint16_t ConfirmVP, const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); + static void HandleUserConfirmationPopUp(uint16_t ConfirmVP, PGM_P const line1, PGM_P const line2, PGM_P const line3, PGM_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); // "M117" Message -- msg is a RAM ptr. static void setstatusmessage(const char *msg); diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp index 88b3255b66..d64ac143b0 100644 --- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp @@ -42,7 +42,7 @@ #if ENABLED(SDSUPPORT) - static ExtUI::FileList filelist; + extern ExtUI::FileList filelist; void DGUSScreenHandler::DGUSLCD_SD_FileSelected(DGUS_VP_Variable &var, void *val_ptr) { uint16_t touched_nr = (int16_t)swap16(*(uint16_t*)val_ptr) + top_file; diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h index d4fdf1d27e..0bdf06ed7d 100644 --- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h @@ -37,15 +37,15 @@ public: // Send all 4 strings that are displayed on the infoscreen, confirmation screen and kill screen // The bools specifying whether the strings are in RAM or FLASH. - static void sendinfoscreen(const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); - static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { + static void sendinfoscreen(PGM_P const line1, PGM_P const line2, PGM_P const line3, PGM_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); + static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, PGM_P const line3, PGM_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), line3, line4, l1inflash, l2inflash, l3inflash, liinflash); } static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), FTOP(line3), FTOP(line4), l1inflash, l2inflash, l3inflash, liinflash); } - static void HandleUserConfirmationPopUp(uint16_t ConfirmVP, const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); + static void HandleUserConfirmationPopUp(uint16_t ConfirmVP, PGM_P const line1, PGM_P const line2, PGM_P const line3, PGM_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); // "M117" Message -- msg is a RAM ptr. static void setstatusmessage(const char *msg); diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp index 88f26ab42d..bfa070df87 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp @@ -48,7 +48,7 @@ #endif #if ENABLED(SDSUPPORT) - static ExtUI::FileList filelist; + extern ExtUI::FileList filelist; #endif bool DGUSAutoTurnOff = false; @@ -65,7 +65,7 @@ void DGUSScreenHandler::sendinfoscreen_ch_mks(const uint16_t *line1, const uint1 dgusdisplay.WriteVariable(VP_MSGSTR4, line4, 32, true); } -void DGUSScreenHandler::sendinfoscreen_en_mks(const char *line1, const char *line2, const char *line3, const char *line4) { +void DGUSScreenHandler::sendinfoscreen_en_mks(PGM_P const line1, PGM_P const line2, PGM_P const line3, PGM_P const line4) { dgusdisplay.WriteVariable(VP_MSGSTR1, line1, 32, true); dgusdisplay.WriteVariable(VP_MSGSTR2, line2, 32, true); dgusdisplay.WriteVariable(VP_MSGSTR3, line3, 32, true); diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h index 05a4b47b17..dbd124cbe9 100644 --- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h @@ -37,19 +37,19 @@ public: // Send all 4 strings that are displayed on the infoscreen, confirmation screen and kill screen // The bools specifying whether the strings are in RAM or FLASH. - static void sendinfoscreen(const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); - static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { + static void sendinfoscreen(PGM_P const line1, PGM_P const line2, PGM_P const line3, PGM_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); + static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, PGM_P const line3, PGM_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), line3, line4, l1inflash, l2inflash, l3inflash, liinflash); } static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), FTOP(line3), FTOP(line4), l1inflash, l2inflash, l3inflash, liinflash); } - static void HandleUserConfirmationPopUp(uint16_t ConfirmVP, const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); + static void HandleUserConfirmationPopUp(uint16_t ConfirmVP, PGM_P const line1, PGM_P const line2, PGM_P const line3, PGM_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); #if 0 static void sendinfoscreen_ch_mks(const uint16_t *line1, const uint16_t *line2, const uint16_t *line3, const uint16_t *line4); - static void sendinfoscreen_en_mks(const char *line1, const char *line2, const char *line3, const char *line4) ; + static void sendinfoscreen_en_mks(PGM_P const line1, PGM_P const line2, PGM_P const line3, PGM_P const line4); static void sendinfoscreen_mks(const void *line1, const void *line2, const void *line3, const void *line4, uint16_t language); #endif diff --git a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp index fb08fbf849..aaa8b72e11 100644 --- a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp @@ -42,7 +42,7 @@ #if ENABLED(SDSUPPORT) - static ExtUI::FileList filelist; + extern ExtUI::FileList filelist; void DGUSScreenHandler::DGUSLCD_SD_FileSelected(DGUS_VP_Variable &var, void *val_ptr) { uint16_t touched_nr = (int16_t)swap16(*(uint16_t*)val_ptr) + top_file; diff --git a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h index d4fdf1d27e..0bdf06ed7d 100644 --- a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h @@ -37,15 +37,15 @@ public: // Send all 4 strings that are displayed on the infoscreen, confirmation screen and kill screen // The bools specifying whether the strings are in RAM or FLASH. - static void sendinfoscreen(const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); - static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { + static void sendinfoscreen(PGM_P const line1, PGM_P const line2, PGM_P const line3, PGM_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); + static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, PGM_P const line3, PGM_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), line3, line4, l1inflash, l2inflash, l3inflash, liinflash); } static void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) { sendinfoscreen(FTOP(line1), FTOP(line2), FTOP(line3), FTOP(line4), l1inflash, l2inflash, l3inflash, liinflash); } - static void HandleUserConfirmationPopUp(uint16_t ConfirmVP, const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); + static void HandleUserConfirmationPopUp(uint16_t ConfirmVP, PGM_P const line1, PGM_P const line2, PGM_P const line3, PGM_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); // "M117" Message -- msg is a RAM ptr. static void setstatusmessage(const char *msg); From be8f4f47f904377f44c3cf4f46b66e446136983d Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 11 Feb 2022 00:19:49 +0000 Subject: [PATCH 471/532] [cron] Bump distribution date (2022-02-11) --- 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 0831287429..8510907a3c 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 "2022-02-10" +//#define STRING_DISTRIBUTION_DATE "2022-02-11" /** * 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 3283615dc3..d44f48f599 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 "2022-02-10" + #define STRING_DISTRIBUTION_DATE "2022-02-11" #endif /** From df98bd26b33e5f80d39eb0addb64c3258ce5c09f Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 11 Feb 2022 09:36:52 -0600 Subject: [PATCH 472/532] =?UTF-8?q?=F0=9F=92=A5=20Change=20'M42=20M'=20to?= =?UTF-8?q?=20'M42=20T'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/control/M42.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/gcode/control/M42.cpp b/Marlin/src/gcode/control/M42.cpp index 77c0ccc49b..8de3226924 100644 --- a/Marlin/src/gcode/control/M42.cpp +++ b/Marlin/src/gcode/control/M42.cpp @@ -52,7 +52,7 @@ void protected_pin_err() { * S Pin status from 0 - 255 * I Flag to ignore Marlin's pin protection * - * M Pin mode: 0=INPUT 1=OUTPUT 2=INPUT_PULLUP 3=INPUT_PULLDOWN + * T Pin mode: 0=INPUT 1=OUTPUT 2=INPUT_PULLUP 3=INPUT_PULLDOWN */ void GcodeSuite::M42() { const int pin_index = PARSED_PIN_INDEX('P', GET_PIN_MAP_INDEX(LED_PIN)); @@ -63,7 +63,7 @@ void GcodeSuite::M42() { if (!parser.boolval('I') && pin_is_protected(pin)) return protected_pin_err(); bool avoidWrite = false; - if (parser.seenval('M')) { + if (parser.seenval('T')) { switch (parser.value_byte()) { case 0: pinMode(pin, INPUT); avoidWrite = true; break; case 1: pinMode(pin, OUTPUT); break; From fb86b6b3e309a6e1273b0d6cb1bcb8159a0be0dc Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Sat, 12 Feb 2022 08:39:34 +1300 Subject: [PATCH 473/532] =?UTF-8?q?=F0=9F=9A=B8=20Align=20MKS=20UI=20heate?= =?UTF-8?q?d=20bed=20status=20with=20HAS=5FMULTI=5FHOTEND=20(#23718)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/extui/mks_ui/draw_ready_print.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ready_print.cpp b/Marlin/src/lcd/extui/mks_ui/draw_ready_print.cpp index 1596944bd8..39f270840b 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ready_print.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_ready_print.cpp @@ -196,7 +196,7 @@ void lv_draw_ready_print() { buttonExt2 = lv_big_button_create(scr, "F:/bmp_ext2_state.bin", " ", 180, ICON_POS_Y, event_handler, ID_INFO_EXT); #endif #if HAS_HEATED_BED - buttonBedstate = lv_big_button_create(scr, "F:/bmp_bed_state.bin", " ", TERN(HAS_MULTI_HOTEND, 271, 210), ICON_POS_Y, event_handler, ID_INFO_BED); + buttonBedstate = lv_big_button_create(scr, "F:/bmp_bed_state.bin", " ", TERN(HAS_MULTI_HOTEND, 340, 210), ICON_POS_Y, event_handler, ID_INFO_BED); #endif TERN_(HAS_HOTEND, labelExt1 = lv_label_create_empty(scr)); From 26e4f70d7c0eec0f6d0f7ab2c3b780176d95c47f Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Sat, 12 Feb 2022 08:50:07 +1300 Subject: [PATCH 474/532] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Fix=20E3V2=20displ?= =?UTF-8?q?ay=20with=20BTT=20SKR=20Mini=20E3=20v3=20(#23719)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/stm32g0/pins_BTT_SKR_MINI_E3_V3_0.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7cbf9f9d58..2589a316b6 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 @@ -156,7 +156,7 @@ #define EXP1_09_PIN PA15 #define EXP1_03_PIN PD6 -#if EITHER(DWIN_CREALITY_LCD, IS_DWIN_MARLINUI) +#if HAS_DWIN_E3V2 || IS_DWIN_MARLINUI /** * ------ ------ ------ * (ENT) |10 9 | (BEEP) |10 9 | |10 9 | From b4d3e1da34f5a4365d35b685d2d7e97d76dedf98 Mon Sep 17 00:00:00 2001 From: John Robertson Date: Fri, 11 Feb 2022 21:04:47 +0000 Subject: [PATCH 475/532] =?UTF-8?q?=E2=9C=A8=20More=20Nozzle=20Park=20move?= =?UTF-8?q?=20options=20(#23158)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/Configuration.h | 3 +-- Marlin/src/inc/SanityCheck.h | 4 ++++ Marlin/src/libs/nozzle.cpp | 17 ++++++++++++----- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index d3c36ad485..752fd1370a 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -1913,8 +1913,7 @@ #if ENABLED(NOZZLE_PARK_FEATURE) // Specify a park position as { X, Y, Z_raise } #define NOZZLE_PARK_POINT { (X_MIN_POS + 10), (Y_MAX_POS - 10), 20 } - //#define NOZZLE_PARK_X_ONLY // X move only is required to park - //#define NOZZLE_PARK_Y_ONLY // Y move only is required to park + #define NOZZLE_PARK_MOVE 0 // Park motion: 0 = XY Move, 1 = X Only, 2 = Y Only, 3 = X before Y, 4 = Y before X #define NOZZLE_PARK_Z_RAISE_MIN 2 // (mm) Always raise Z by at least this distance #define NOZZLE_PARK_XY_FEEDRATE 100 // (mm/s) X and Y axes feedrate (also used for delta Z axis) #define NOZZLE_PARK_Z_FEEDRATE 5 // (mm/s) Z axis feedrate (not used for delta printers) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 38c2866ca1..8f6843eee9 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -609,6 +609,10 @@ #error "LCD_SCREEN_ROT_270 is now LCD_SCREEN_ROTATE with a value of 270." #elif defined(DEFAULT_LCD_BRIGHTNESS) #error "DEFAULT_LCD_BRIGHTNESS is now LCD_BRIGHTNESS_DEFAULT." +#elif defined(NOZZLE_PARK_X_ONLY) + #error "NOZZLE_PARK_X_ONLY is now NOZZLE_PARK_MOVE 1." +#elif defined(NOZZLE_PARK_Y_ONLY) + #error "NOZZLE_PARK_X_ONLY is now NOZZLE_PARK_MOVE 2." #endif constexpr float arm[] = AXIS_RELATIVE_MODES; diff --git a/Marlin/src/libs/nozzle.cpp b/Marlin/src/libs/nozzle.cpp index e277216ab4..5cd2014d7f 100644 --- a/Marlin/src/libs/nozzle.cpp +++ b/Marlin/src/libs/nozzle.cpp @@ -254,11 +254,18 @@ Nozzle nozzle; break; } - do_blocking_move_to_xy( - TERN(NOZZLE_PARK_Y_ONLY, current_position, park).x, - TERN(NOZZLE_PARK_X_ONLY, current_position, park).y, - fr_xy - ); + #ifndef NOZZLE_PARK_MOVE + #define NOZZLE_PARK_MOVE 0 + #endif + switch (NOZZLE_PARK_MOVE) { + case 0: do_blocking_move_to_xy(park, fr_xy); break; + case 1: do_blocking_move_to_x(park.x, fr_xy); break; + case 2: do_blocking_move_to_y(park.y, fr_xy); break; + case 3: do_blocking_move_to_x(park.x, fr_xy); + do_blocking_move_to_y(park.y, fr_xy); break; + case 4: do_blocking_move_to_y(park.y, fr_xy); + do_blocking_move_to_x(park.x, fr_xy); break; + } report_current_position(); } From cda46828613721c116a1fefce08cfbf1dd4cfcc2 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 12 Feb 2022 00:21:36 +0000 Subject: [PATCH 476/532] [cron] Bump distribution date (2022-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 8510907a3c..d38abd8037 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 "2022-02-11" +//#define STRING_DISTRIBUTION_DATE "2022-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 d44f48f599..a7df1f2893 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 "2022-02-11" + #define STRING_DISTRIBUTION_DATE "2022-02-12" #endif /** From cf013a7f3e8f8030e3ac092692988d4e53fd03c3 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 13 Feb 2022 12:55:00 -0600 Subject: [PATCH 477/532] =?UTF-8?q?=F0=9F=94=A7=20HAS=5FLCDPRINT=20conditi?= =?UTF-8?q?onal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Conditionals_LCD.h | 4 ++++ Marlin/src/lcd/lcdprint.cpp | 4 ++-- ini/features.ini | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index f4b517dd23..34a160fc5c 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -517,6 +517,10 @@ #define HAS_DISPLAY 1 #endif +#if HAS_WIRED_LCD && !HAS_GRAPHICAL_TFT && !IS_DWIN_MARLINUI + #define HAS_LCDPRINT 1 +#endif + #if ANY(HAS_DISPLAY, HAS_DWIN_E3V2, GLOBAL_STATUS_MESSAGE) #define HAS_STATUS_MESSAGE 1 #endif diff --git a/Marlin/src/lcd/lcdprint.cpp b/Marlin/src/lcd/lcdprint.cpp index 498b478b12..8ca0c8ee9e 100644 --- a/Marlin/src/lcd/lcdprint.cpp +++ b/Marlin/src/lcd/lcdprint.cpp @@ -26,7 +26,7 @@ #include "../inc/MarlinConfigPre.h" -#if HAS_WIRED_LCD && !HAS_GRAPHICAL_TFT && !IS_DWIN_MARLINUI +#if HAS_LCDPRINT #include "marlinui.h" #include "lcdprint.h" @@ -103,4 +103,4 @@ int calculateWidth(PGM_P const pstr) { return n * MENU_FONT_WIDTH; } -#endif // HAS_WIRED_LCD +#endif // HAS_LCDPRINT diff --git a/ini/features.ini b/ini/features.ini index 720748d7f0..43eb58a606 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -34,7 +34,7 @@ I2C_AMMETER = peterus/INA226Lib@1.1.2 USES_LIQUIDCRYSTAL = LiquidCrystal=https://github.com/MarlinFirmware/New-LiquidCrystal/archive/1.5.1.zip USES_LIQUIDCRYSTAL_I2C = marcoschwartz/LiquidCrystal_I2C@1.1.4 USES_LIQUIDTWI2 = LiquidTWI2@1.2.7 -HAS_WIRED_LCD = src_filter=+ +HAS_LCDPRINT = src_filter=+ HAS_MARLINUI_HD44780 = src_filter=+ HAS_MARLINUI_U8GLIB = U8glib-HAL@~0.5.0 src_filter=+ From e8cc050e90252d45734552ae857cf8b6cb8580d0 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 13 Feb 2022 13:12:38 -0600 Subject: [PATCH 478/532] =?UTF-8?q?=F0=9F=93=9D=20Update=20conditionals=20?= =?UTF-8?q?descriptions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Conditionals_adv.h | 2 +- Marlin/src/inc/Conditionals_post.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index 7b628d448e..82b32ba003 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -23,7 +23,7 @@ /** * Conditionals_adv.h - * Defines that depend on advanced configuration. + * Conditionals set before pins.h and which depend on Configuration_adv.h. */ #ifndef AXIS_RELATIVE_MODES diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 37f0a5cbe5..b107ad03ae 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -23,7 +23,7 @@ /** * Conditionals_post.h - * Defines that depend on configuration but are not editable. + * Internal defines that depend on Configurations and Pins but are not user-editable. */ #ifdef GITHUB_ACTIONS From 03516f05191b888b5378f0426bc86f41b6cb2d03 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Sun, 13 Feb 2022 14:44:24 -0500 Subject: [PATCH 479/532] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20No=20ui.reinit=5Fl?= =?UTF-8?q?cd=20on=20any=20ExtUI=20(#23722)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/inc/Conditionals_post.h | 4 ++-- Marlin/src/lcd/marlinui.cpp | 6 ++---- Marlin/src/lcd/marlinui.h | 2 ++ 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index b107ad03ae..fa273cd32e 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -459,8 +459,8 @@ #endif -#if ANY(HAS_GRAPHICAL_TFT, LCD_USE_DMA_FSMC, HAS_FSMC_GRAPHICAL_TFT, HAS_SPI_GRAPHICAL_TFT, IS_DWIN_MARLINUI) || !PIN_EXISTS(SD_DETECT) - #define NO_LCD_REINIT 1 // Suppress LCD re-initialization +#if PIN_EXISTS(SD_DETECT) && NONE(HAS_GRAPHICAL_TFT, LCD_USE_DMA_FSMC, HAS_FSMC_GRAPHICAL_TFT, HAS_SPI_GRAPHICAL_TFT, IS_DWIN_MARLINUI, EXTENSIBLE_UI) + #define REINIT_NOISY_LCD 1 // Have the LCD re-init on SD insertion #endif /** diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 27965c1bd4..d0cc2a25b8 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -625,7 +625,7 @@ void MarlinUI::init() { next_filament_display = millis() + 5000UL; // Show status message for 5s #endif goto_screen(menu_main); - IF_DISABLED(NO_LCD_REINIT, init_lcd()); // May revive the LCD if static electricity killed it + reinit_lcd(); // Revive a noisy shared SPI LCD return; } @@ -1697,9 +1697,7 @@ void MarlinUI::init() { } } - #if PIN_EXISTS(SD_DETECT) && DISABLED(NO_LCD_REINIT) - init_lcd(); // Revive a noisy shared SPI LCD - #endif + reinit_lcd(); // Revive a noisy shared SPI LCD refresh(); diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index 5885866e5b..17c2468737 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -209,6 +209,8 @@ public: static void init_lcd() {} #endif + static void reinit_lcd() { TERN_(REINIT_NOISY_LCD, init_lcd()); } + #if HAS_WIRED_LCD static bool detected(); #else From cd4c1be641809bb1a32f74d840b7726ad796798b Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 14 Feb 2022 00:20:02 +0000 Subject: [PATCH 480/532] [cron] Bump distribution date (2022-02-14) --- 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 d38abd8037..1cb84b9966 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 "2022-02-12" +//#define STRING_DISTRIBUTION_DATE "2022-02-14" /** * 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 a7df1f2893..51558f0cd9 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 "2022-02-12" + #define STRING_DISTRIBUTION_DATE "2022-02-14" #endif /** From aae08e9b0d7338d0f2c3ee04469165b9a087c161 Mon Sep 17 00:00:00 2001 From: Giuseppe499 Date: Tue, 15 Feb 2022 20:21:05 +0100 Subject: [PATCH 481/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20XATC=20divide-by-z?= =?UTF-8?q?ero=20(#23743)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/bedlevel/abl/x_twist.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Marlin/src/feature/bedlevel/abl/x_twist.cpp b/Marlin/src/feature/bedlevel/abl/x_twist.cpp index c4a62c3595..000c1e2294 100644 --- a/Marlin/src/feature/bedlevel/abl/x_twist.cpp +++ b/Marlin/src/feature/bedlevel/abl/x_twist.cpp @@ -49,6 +49,7 @@ void XATC::print_points() { float lerp(const_float_t t, const_float_t a, const_float_t b) { return a + t * (b - a); } float XATC::compensation(const xy_pos_t &raw) { + if (NEAR_ZERO(spacing)) return 0; float t = (raw.x - start) / spacing; int i = FLOOR(t); LIMIT(i, 0, XATC_MAX_POINTS - 2); From 98a17cd60dc51f1b22b88101b526fd7f1b3f8787 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 15 Feb 2022 15:09:09 -0600 Subject: [PATCH 482/532] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Rename=20XATC=20z?= =?UTF-8?q?=5Fvalues=20=3D>=20z=5Foffset?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/bedlevel/abl/x_twist.cpp | 10 +++++----- Marlin/src/feature/bedlevel/abl/x_twist.h | 4 ++-- Marlin/src/lcd/menu/menu_x_twist.cpp | 6 +++--- Marlin/src/module/settings.cpp | 5 +---- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/Marlin/src/feature/bedlevel/abl/x_twist.cpp b/Marlin/src/feature/bedlevel/abl/x_twist.cpp index 000c1e2294..24fdbca950 100644 --- a/Marlin/src/feature/bedlevel/abl/x_twist.cpp +++ b/Marlin/src/feature/bedlevel/abl/x_twist.cpp @@ -28,15 +28,15 @@ XATC xatc; float XATC::spacing, XATC::start; -xatc_points_t XATC::z_values; +xatc_array_t XATC::z_offset; void XATC::print_points() { SERIAL_ECHOLNPGM(" X-Twist Correction:"); LOOP_L_N(x, XATC_MAX_POINTS) { SERIAL_CHAR(' '); - if (!isnan(z_values[x])) { - if (z_values[x] >= 0) SERIAL_CHAR('+'); - SERIAL_ECHO_F(z_values[x], 3); + if (!isnan(z_offset[x])) { + if (z_offset[x] >= 0) SERIAL_CHAR('+'); + SERIAL_ECHO_F(z_offset[x], 3); } else { LOOP_L_N(i, 6) @@ -54,7 +54,7 @@ float XATC::compensation(const xy_pos_t &raw) { int i = FLOOR(t); LIMIT(i, 0, XATC_MAX_POINTS - 2); t -= i; - return lerp(t, z_values[i], z_values[i + 1]); + return lerp(t, z_offset[i], z_offset[i + 1]); } #endif // X_AXIS_TWIST_COMPENSATION diff --git a/Marlin/src/feature/bedlevel/abl/x_twist.h b/Marlin/src/feature/bedlevel/abl/x_twist.h index bbad9e73ef..9deb45a8b7 100644 --- a/Marlin/src/feature/bedlevel/abl/x_twist.h +++ b/Marlin/src/feature/bedlevel/abl/x_twist.h @@ -23,12 +23,12 @@ #include "../../../inc/MarlinConfigPre.h" -typedef float xatc_points_t[XATC_MAX_POINTS]; +typedef float xatc_array_t[XATC_MAX_POINTS]; class XATC { public: static float spacing, start; - static xatc_points_t z_values; + static xatc_array_t z_offset; static float compensation(const xy_pos_t &raw); static void print_points(); diff --git a/Marlin/src/lcd/menu/menu_x_twist.cpp b/Marlin/src/lcd/menu/menu_x_twist.cpp index 288f16603a..fab3b5ae11 100644 --- a/Marlin/src/lcd/menu/menu_x_twist.cpp +++ b/Marlin/src/lcd/menu/menu_x_twist.cpp @@ -77,7 +77,7 @@ void xatc_wizard_update_z_offset() { // void xatc_wizard_set_offset_and_go_to_next_point() { // Set Z-offset at probed point - xatc.z_values[manual_probe_index++] = probe.offset.z + current_position.z - measured_z; + xatc.z_offset[manual_probe_index++] = probe.offset.z + current_position.z - measured_z; // Go to next point ui.goto_screen(xatc_wizard_goto_next_point); } @@ -160,12 +160,12 @@ void xatc_wizard_goto_next_point() { else { // Compute the z-offset by averaging the values found with this wizard z_offset = 0; - LOOP_L_N(i, XATC_MAX_POINTS) z_offset += xatc.z_values[i]; + LOOP_L_N(i, XATC_MAX_POINTS) z_offset += xatc.z_offset[i]; z_offset /= XATC_MAX_POINTS; // Subtract the average from the values found with this wizard. // This way they are indipendent from the z-offset - LOOP_L_N(i, XATC_MAX_POINTS) xatc.z_values[i] -= z_offset; + LOOP_L_N(i, XATC_MAX_POINTS) xatc.z_offset[i] -= z_offset; ui.goto_screen(xatc_wizard_update_z_offset); } diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 8c2cd8813d..bcbe8fa985 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -863,10 +863,7 @@ void MarlinSettings::postprocess() { "Bilinear Z array is the wrong size." ); #if ENABLED(X_AXIS_TWIST_COMPENSATION) - static_assert( - sizeof(xatc.z_values) == (XATC_MAX_POINTS) * sizeof(xatc.z_values[0]), - "Z-offset mesh is the wrong size." - ); + static_assert(COUNT(xatc.z_offset) == XATC_MAX_POINTS, "XATC Z-offset mesh is the wrong size."); #endif #else const xy_pos_t bilinear_start{0}, bilinear_grid_spacing{0}; From e507aa09c51471465f6d802945c3be2459e1ee63 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 16 Feb 2022 00:19:06 +0000 Subject: [PATCH 483/532] [cron] Bump distribution date (2022-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 1cb84b9966..5c8fd4a5bc 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 "2022-02-14" +//#define STRING_DISTRIBUTION_DATE "2022-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 51558f0cd9..6d43943a8f 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 "2022-02-14" + #define STRING_DISTRIBUTION_DATE "2022-02-16" #endif /** From 5439da6775e2c1b64127480d8e6fa3106a8e7706 Mon Sep 17 00:00:00 2001 From: Simon Pilepich Date: Wed, 16 Feb 2022 13:46:09 +1100 Subject: [PATCH 484/532] =?UTF-8?q?=F0=9F=A7=91=E2=80=8D=F0=9F=92=BB=20Upd?= =?UTF-8?q?ate=20MightyBoard=20FET=20pins=20(#23728)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h | 59 ++++++++------------ 1 file changed, 22 insertions(+), 37 deletions(-) diff --git a/Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h b/Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h index eb92ab5cd0..f2a95baf01 100644 --- a/Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h +++ b/Marlin/src/pins/mega/pins_MIGHTYBOARD_REVE.h @@ -144,56 +144,41 @@ //#define TEMP_1_MOSI_PIN TEMP_0_MOSI_PIN // -// Augmentation for auto-assigning plugs -// -// Two thermocouple connectors allows for either -// 2 extruders or 1 extruder and a heated bed. -// With no heated bed, an additional 24V fan is possible. +// FET Pin Mapping - FET 1 is closest to the input power connector // -#define MOSFET_A_PIN 6 // H3 EX1_HEAT_PIN -#define MOSFET_B_PIN 11 // B5 EX2_HEAT_PIN -#define MOSFET_C_PIN 45 // L4 HBP_PIN -#define MOSFET_D_PIN 44 // L5 EXTRA_FET_PIN +#define MOSFET_1_PIN 6 // Plug EX1 Pin 1-2 -> PH3 #15 -> Logical 06 +#define MOSFET_2_PIN 7 // Plug EX1 Pin 3-4 -> PH4 #16 -> Logical 07 +#define MOSFET_3_PIN 12 // Plug EX2 1-2 -> PB5 #25 -> Logical 12 +#define MOSFET_4_PIN 11 // Plug EX2 3-4 -> PB6 #24 -> Logical 11 +#define MOSFET_5_PIN 45 // Plug HBD 1-2 -> PL4 #39 -> Logical 45 +#define MOSFET_6_PIN 13 // Plug Extra 1-2 -> PL5 #40 -> Logical 44 (FET not soldered in all boards) // // Heaters / Fans (24V) // -#define HEATER_0_PIN MOSFET_A_PIN -#if FET_ORDER_EFB // Hotend, Fan, Bed - #define HEATER_BED_PIN MOSFET_C_PIN -#elif FET_ORDER_EEF // Hotend, Hotend, Fan - #define HEATER_1_PIN MOSFET_B_PIN -#elif FET_ORDER_EEB // Hotend, Hotend, Bed - #define HEATER_1_PIN MOSFET_B_PIN - #define HEATER_BED_PIN MOSFET_C_PIN -#elif FET_ORDER_EFF // Hotend, Fan, Fan - #define FAN1_PIN MOSFET_C_PIN +#define HEATER_0_PIN MOSFET_1_PIN // EX1 +#define HEATER_1_PIN MOSFET_3_PIN // EX2 +#define HEATER_BED_PIN MOSFET_5_PIN // HBP + +// EX1 FAN (Automatic Fans are disabled by default in Configuration_adv.h - comment that out for auto fans) +#ifndef E0_AUTO_FAN_PIN + #define E0_AUTO_FAN_PIN MOSFET_2_PIN +#else + #define FAN_PIN MOSFET_2_PIN #endif - -#ifndef FAN_PIN - #if EITHER(FET_ORDER_EFB, FET_ORDER_EFF) // Hotend, Fan, Bed or Hotend, Fan, Fan - #define FAN_PIN MOSFET_B_PIN - #elif EITHER(FET_ORDER_EEF, FET_ORDER_SF) // Hotend, Hotend, Fan or Spindle, Fan - #define FAN_PIN MOSFET_C_PIN - #else - #define FAN_PIN MOSFET_D_PIN - #endif -#endif - -#ifndef FAN1_PIN - #define FAN1_PIN 7 // H4 EX1_FAN_PIN -#endif - -#ifndef CONTROLLER_FAN_PIN - #define CONTROLLER_FAN_PIN 12 // B6 EX2_FAN_PIN +// EX2 FAN (Automatic Fans are disabled by default in Configuration_adv.h - comment that out for auto fans) +#ifndef E1_AUTO_FAN_PIN + #define E1_AUTO_FAN_PIN MOSFET_4_PIN +#else + #define FAN1_PIN MOSFET_4_PIN #endif // // Misc. Functions // -#define LED_PIN 13 // B7 +#define LED_PIN MOSFET_6_PIN // B7 #define CUTOFF_RESET_PIN 16 // H1 #define CUTOFF_TEST_PIN 17 // H0 #define CUTOFF_SR_CHECK_PIN 70 // G4 (TOSC1) From 10c0b9423d5b19dc5e6f8494e79be14cf0ae6b3c Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 17 Feb 2022 00:19:04 +0000 Subject: [PATCH 485/532] [cron] Bump distribution date (2022-02-17) --- 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 5c8fd4a5bc..79f86ac74a 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 "2022-02-16" +//#define STRING_DISTRIBUTION_DATE "2022-02-17" /** * 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 6d43943a8f..ee58d529e5 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 "2022-02-16" + #define STRING_DISTRIBUTION_DATE "2022-02-17" #endif /** From 7b25b9ec5b6c731bc0e136442d61117fef7428f2 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 17 Feb 2022 14:41:56 -0600 Subject: [PATCH 486/532] =?UTF-8?q?=F0=9F=90=9B=20Patch=20Creality=20RAMPS?= =?UTF-8?q?=20FET=20/=20FAN=20pins?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improvement for multi-hotend setup by TH3D. --- Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h b/Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h index def71fefc1..21dadd60ee 100644 --- a/Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h +++ b/Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h @@ -30,9 +30,8 @@ // // Heaters / Fans // - -// Power outputs EFBF or EFBE -#define MOSFET_D_PIN 7 +#define MOSFET_B_PIN 7 // For HEATER_1_PIN ("EEF" or "EEB") +#define FAN_PIN 9 #define FIL_RUNOUT_PIN 2 #if NUM_RUNOUT_SENSORS >= 2 From 2ba1153fd8b7ca17ce94fbf13b4c21618eb1e7af Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 18 Feb 2022 00:23:00 +0000 Subject: [PATCH 487/532] [cron] Bump distribution date (2022-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 79f86ac74a..f13abf77fb 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 "2022-02-17" +//#define STRING_DISTRIBUTION_DATE "2022-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 ee58d529e5..45bf3f47a4 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 "2022-02-17" + #define STRING_DISTRIBUTION_DATE "2022-02-18" #endif /** From 3ec5bbfb13a9a6fc2af5535bed4a40ba9c2b5e94 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Fri, 18 Feb 2022 13:37:22 +1300 Subject: [PATCH 488/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20HAS=5FTMC26X=20fea?= =?UTF-8?q?ture=20path=20(#23757)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ini/features.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ini/features.ini b/ini/features.ini index 43eb58a606..c52675ff2d 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -24,7 +24,7 @@ SR_LCD_3W_NL = SailfishLCD=https://github.com/mikeshub HAS_MOTOR_CURRENT_I2C = SlowSoftI2CMaster src_filter=+ HAS_TMC26X = TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip - src_filter=+ + src_filter=+ HAS_L64XX = Arduino-L6470@0.8.0 src_filter=+ + + + LIB_INTERNAL_MAX31865 = src_filter=+ From cba8d4f401b7de5c04c96e630d497af7041f908a Mon Sep 17 00:00:00 2001 From: jefflessard Date: Thu, 17 Feb 2022 19:44:41 -0500 Subject: [PATCH 489/532] =?UTF-8?q?=F0=9F=9A=A8=20Fix=20TEMP=5FSENSOR=5FBO?= =?UTF-8?q?ARD=20warnings=20(#23754)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Warnings.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index 95246343c7..3545ee8b5d 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -59,9 +59,9 @@ #warning "Your Configuration provides no method to acquire user feedback!" #endif -#if MB(DUE3DOM_MINI) && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD) +#if MB(DUE3DOM_MINI) && PIN_EXISTS(TEMP_2) && !TEMP_SENSOR_BOARD #warning "Onboard temperature sensor for BOARD_DUE3DOM_MINI has moved from TEMP_SENSOR_2 (TEMP_2_PIN) to TEMP_SENSOR_BOARD (TEMP_BOARD_PIN)." -#elif MB(BTT_SKR_E3_TURBO) && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD) +#elif MB(BTT_SKR_E3_TURBO) && PIN_EXISTS(TEMP_2) && !TEMP_SENSOR_BOARD #warning "Onboard temperature sensor for BOARD_BTT_SKR_E3_TURBO has moved from TEMP_SENSOR_2 (TEMP_2_PIN) to TEMP_SENSOR_BOARD (TEMP_BOARD_PIN)." #endif From fee85b318eca9f410f1b49de22ee9e6f778a23ff Mon Sep 17 00:00:00 2001 From: GHGiampy <83699429+GHGiampy@users.noreply.github.com> Date: Fri, 18 Feb 2022 01:45:42 +0100 Subject: [PATCH 490/532] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Fix=20getLFNName?= =?UTF-8?q?=20parameter=20(#23752)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/sd/SdBaseFile.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/sd/SdBaseFile.cpp b/Marlin/src/sd/SdBaseFile.cpp index 64d0ad68bd..1c1e0c7d14 100644 --- a/Marlin/src/sd/SdBaseFile.cpp +++ b/Marlin/src/sd/SdBaseFile.cpp @@ -1140,8 +1140,8 @@ bool SdBaseFile::openNext(SdBaseFile *dirFile, uint8_t oflag) { // We can't reconvert to UTF-8 here as UTF-8 is variable-size encoding, but joining LFN blocks // needs static bytes addressing. So here just store full UTF-16LE words to re-convert later. uint16_t idx = (startOffset + i) * 2; // This is fixed as FAT LFN always contain UTF-16LE encoding - longFilename[idx] = utf16_ch & 0xFF; - longFilename[idx + 1] = (utf16_ch >> 8) & 0xFF; + lname[idx] = utf16_ch & 0xFF; + lname[idx + 1] = (utf16_ch >> 8) & 0xFF; #else // Replace all multibyte characters to '_' lname[startOffset + i] = (utf16_ch > 0xFF) ? '_' : (utf16_ch & 0xFF); From 44eff9a23348dcc117fd1ea9b4b1ef0b54061808 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 17 Feb 2022 18:50:31 -0600 Subject: [PATCH 491/532] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20HAL=20a?= =?UTF-8?q?s=20singleton=20(#23357)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/AVR/HAL.cpp | 38 ++-- Marlin/src/HAL/AVR/HAL.h | 198 +++++++++++--------- Marlin/src/HAL/AVR/MarlinSerial.cpp | 4 +- Marlin/src/HAL/AVR/MarlinSerial.h | 6 +- Marlin/src/HAL/AVR/fast_pwm.cpp | 6 +- Marlin/src/HAL/AVR/math.h | 4 +- Marlin/src/HAL/AVR/timers.h | 6 +- Marlin/src/HAL/DUE/HAL.cpp | 43 +---- Marlin/src/HAL/DUE/HAL.h | 135 +++++++++----- Marlin/src/HAL/DUE/MarlinSerial.cpp | 4 +- Marlin/src/HAL/DUE/Tone.cpp | 2 +- Marlin/src/HAL/DUE/timers.h | 2 +- Marlin/src/HAL/ESP32/HAL.cpp | 35 ++-- Marlin/src/HAL/ESP32/HAL.h | 144 +++++++++------ Marlin/src/HAL/ESP32/Tone.cpp | 2 +- Marlin/src/HAL/ESP32/timers.cpp | 2 +- Marlin/src/HAL/ESP32/timers.h | 6 +- Marlin/src/HAL/LINUX/HAL.cpp | 37 ++-- Marlin/src/HAL/LINUX/HAL.h | 145 +++++++++------ Marlin/src/HAL/LINUX/arduino.cpp | 4 +- Marlin/src/HAL/LINUX/include/Arduino.h | 7 +- Marlin/src/HAL/LINUX/timers.h | 4 +- Marlin/src/HAL/LPC1768/HAL.cpp | 46 +++-- Marlin/src/HAL/LPC1768/HAL.h | 159 +++++++++------- Marlin/src/HAL/LPC1768/Servo.h | 3 +- Marlin/src/HAL/LPC1768/fast_pwm.cpp | 6 +- Marlin/src/HAL/LPC1768/main.cpp | 6 +- Marlin/src/HAL/LPC1768/timers.h | 2 +- Marlin/src/HAL/NATIVE_SIM/HAL.h | 173 +++++++++++------- Marlin/src/HAL/NATIVE_SIM/timers.h | 4 +- Marlin/src/HAL/SAMD51/HAL.cpp | 229 +++++++++++++++++++----- Marlin/src/HAL/SAMD51/HAL.h | 129 ++++++++----- Marlin/src/HAL/STM32/HAL.cpp | 28 ++- Marlin/src/HAL/STM32/HAL.h | 180 +++++++++++-------- Marlin/src/HAL/STM32/HAL_SPI.cpp | 8 +- Marlin/src/HAL/STM32/eeprom_flash.cpp | 8 +- Marlin/src/HAL/STM32/fast_pwm.cpp | 4 +- Marlin/src/HAL/STM32/pinsDebug.h | 6 +- Marlin/src/HAL/STM32/timers.h | 4 +- Marlin/src/HAL/STM32F1/HAL.cpp | 183 +++++++++---------- Marlin/src/HAL/STM32F1/HAL.h | 192 +++++++++++--------- Marlin/src/HAL/STM32F1/SPI.cpp | 8 + Marlin/src/HAL/STM32F1/SPI.h | 8 - Marlin/src/HAL/STM32F1/Servo.h | 3 +- Marlin/src/HAL/STM32F1/fast_pwm.cpp | 8 +- Marlin/src/HAL/STM32F1/timers.h | 2 +- Marlin/src/HAL/TEENSY31_32/HAL.cpp | 85 ++++----- Marlin/src/HAL/TEENSY31_32/HAL.h | 130 ++++++++++---- Marlin/src/HAL/TEENSY31_32/timers.h | 2 +- Marlin/src/HAL/TEENSY35_36/HAL.cpp | 114 ++++++------ Marlin/src/HAL/TEENSY35_36/HAL.h | 132 ++++++++++---- Marlin/src/HAL/TEENSY35_36/timers.h | 2 +- Marlin/src/HAL/TEENSY40_41/HAL.cpp | 194 ++++++++++---------- Marlin/src/HAL/TEENSY40_41/HAL.h | 147 ++++++++++----- Marlin/src/HAL/TEENSY40_41/timers.h | 2 +- Marlin/src/HAL/shared/HAL.cpp | 36 ++++ Marlin/src/HAL/shared/HAL_spi_L6470.cpp | 8 +- Marlin/src/HAL/shared/math_32bit.h | 2 +- Marlin/src/MarlinCore.cpp | 48 +++-- Marlin/src/feature/caselight.cpp | 2 +- Marlin/src/feature/controllerfan.cpp | 2 +- Marlin/src/feature/e_parser.h | 4 +- Marlin/src/feature/leds/leds.cpp | 10 +- Marlin/src/feature/spindle_laser.cpp | 8 +- Marlin/src/feature/spindle_laser.h | 2 +- Marlin/src/gcode/control/M42.cpp | 4 +- Marlin/src/gcode/gcode_d.cpp | 10 +- Marlin/src/inc/MarlinConfig.h | 1 + Marlin/src/inc/SanityCheck.h | 7 + Marlin/src/lcd/dogm/marlinui_DOGM.cpp | 4 +- Marlin/src/lcd/e3v2/proui/dwin.cpp | 2 +- Marlin/src/module/endstops.cpp | 2 +- Marlin/src/module/planner.cpp | 8 +- Marlin/src/module/servo.cpp | 2 +- Marlin/src/module/servo.h | 2 +- Marlin/src/module/stepper.cpp | 26 +-- Marlin/src/module/temperature.cpp | 155 ++++++---------- ini/features.ini | 2 +- ini/native.ini | 4 +- 79 files changed, 1975 insertions(+), 1417 deletions(-) create mode 100644 Marlin/src/HAL/shared/HAL.cpp diff --git a/Marlin/src/HAL/AVR/HAL.cpp b/Marlin/src/HAL/AVR/HAL.cpp index 666802725b..7c39c5200b 100644 --- a/Marlin/src/HAL/AVR/HAL.cpp +++ b/Marlin/src/HAL/AVR/HAL.cpp @@ -36,7 +36,7 @@ // ------------------------ // Don't initialize/override variable (which would happen in .init4) -uint8_t reset_reason __attribute__((section(".noinit"))); +uint8_t MarlinHAL::reset_reason __attribute__((section(".noinit"))); // ------------------------ // Public functions @@ -45,22 +45,22 @@ uint8_t reset_reason __attribute__((section(".noinit"))); __attribute__((naked)) // Don't output function pro- and epilogue __attribute__((used)) // Output the function, even if "not used" __attribute__((section(".init3"))) // Put in an early user definable section -void HAL_save_reset_reason() { +void save_reset_reason() { #if ENABLED(OPTIBOOT_RESET_REASON) __asm__ __volatile__( A("STS %0, r2") - : "=m"(reset_reason) + : "=m"(hal.reset_reason) ); #else - reset_reason = MCUSR; + hal.reset_reason = MCUSR; #endif // Clear within 16ms since WDRF bit enables a 16ms watchdog timer -> Boot loop - MCUSR = 0; + hal.clear_reset_source(); wdt_disable(); } -void HAL_init() { +void MarlinHAL::init() { // Init Servo Pins #define INIT_SERVO(N) OUT_WRITE(SERVO##N##_PIN, LOW) #if HAS_SERVO_0 @@ -79,7 +79,7 @@ void HAL_init() { init_pwm_timers(); // Init user timers to default frequency - 1000HZ } -void HAL_reboot() { +void MarlinHAL::reboot() { #if ENABLED(USE_WATCHDOG) while (1) { /* run out the watchdog */ } #else @@ -95,20 +95,20 @@ void HAL_reboot() { #else // !SDSUPPORT -extern "C" { - extern char __bss_end; - extern char __heap_start; - extern void* __brkval; + extern "C" { + extern char __bss_end; + extern char __heap_start; + extern void* __brkval; - int freeMemory() { - int free_memory; - if ((int)__brkval == 0) - free_memory = ((int)&free_memory) - ((int)&__bss_end); - else - free_memory = ((int)&free_memory) - ((int)__brkval); - return free_memory; + int freeMemory() { + int free_memory; + if ((int)__brkval == 0) + free_memory = ((int)&free_memory) - ((int)&__bss_end); + else + free_memory = ((int)&free_memory) - ((int)__brkval); + return free_memory; + } } -} #endif // !SDSUPPORT diff --git a/Marlin/src/HAL/AVR/HAL.h b/Marlin/src/HAL/AVR/HAL.h index f5cbcc9d51..e825b4def3 100644 --- a/Marlin/src/HAL/AVR/HAL.h +++ b/Marlin/src/HAL/AVR/HAL.h @@ -74,9 +74,9 @@ #define CRITICAL_SECTION_START() unsigned char _sreg = SREG; cli() #define CRITICAL_SECTION_END() SREG = _sreg #endif -#define ISRS_ENABLED() TEST(SREG, SREG_I) -#define ENABLE_ISRS() sei() -#define DISABLE_ISRS() cli() + +#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment +#define PWM_FREQUENCY 1000 // Default PWM frequency when set_pwm_duty() is called without set_pwm_frequency() // ------------------------ // Types @@ -84,16 +84,15 @@ typedef int8_t pin_t; -#define SHARED_SERVOS HAS_SERVOS -#define HAL_SERVO_LIB Servo +#define SHARED_SERVOS HAS_SERVOS // Use shared/servos.cpp + +class Servo; +typedef Servo hal_servo_t; // ------------------------ -// Public Variables -// ------------------------ - -extern uint8_t reset_reason; - // Serial ports +// ------------------------ + #ifdef USBCON #include "../../core/serial_hook.h" typedef ForwardSerial1Class< decltype(Serial) > DefaultSerial1; @@ -142,57 +141,15 @@ extern uint8_t reset_reason; #endif #endif -// ------------------------ -// Public functions -// ------------------------ - -void HAL_init(); - -//void cli(); - -//void _delay_ms(const int delay); - -inline void HAL_clear_reset_source() { } -inline uint8_t HAL_get_reset_source() { return reset_reason; } - -void HAL_reboot(); - -#pragma GCC diagnostic push -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic ignored "-Wunused-function" -#endif - -extern "C" int freeMemory(); - -#pragma GCC diagnostic pop - +// // ADC -#ifdef DIDR2 - #define HAL_ANALOG_SELECT(ind) do{ if (ind < 8) SBI(DIDR0, ind); else SBI(DIDR2, ind & 0x07); }while(0) -#else - #define HAL_ANALOG_SELECT(ind) SBI(DIDR0, ind); -#endif - -inline void HAL_adc_init() { - ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADIF) | 0x07; - DIDR0 = 0; - #ifdef DIDR2 - DIDR2 = 0; - #endif -} - -#define SET_ADMUX_ADCSRA(ch) ADMUX = _BV(REFS0) | (ch & 0x07); SBI(ADCSRA, ADSC) -#ifdef MUX5 - #define HAL_START_ADC(ch) if (ch > 7) ADCSRB = _BV(MUX5); else ADCSRB = 0; SET_ADMUX_ADCSRA(ch) -#else - #define HAL_START_ADC(ch) ADCSRB = 0; SET_ADMUX_ADCSRA(ch) -#endif - +// #define HAL_ADC_VREF 5.0 #define HAL_ADC_RESOLUTION 10 -#define HAL_READ_ADC() ADC -#define HAL_ADC_READY() !TEST(ADCSRA, ADSC) +// +// Pin Mapping for M42, M43, M226 +// #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) @@ -206,30 +163,109 @@ inline void HAL_adc_init() { // AVR compatibility #define strtof strtod -#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment -#define PWM_FREQUENCY 1000 // Default PWM frequency when set_pwm_duty() is called without set_pwm_frequency() +// ------------------------ +// Class Utilities +// ------------------------ -/** - * set_pwm_frequency - * Sets the frequency of the timer corresponding to the provided pin - * as close as possible to the provided desired frequency. Internally - * calculates the required waveform generation mode, prescaler and - * resolution values required and sets the timer registers accordingly. - * NOTE that the frequency is applied to all pins on the timer (Ex OC3A, OC3B and OC3B) - * NOTE that there are limitations, particularly if using TIMER2. (see Configuration_adv.h -> FAST FAN PWM Settings) - */ -void set_pwm_frequency(const pin_t pin, const uint16_t f_desired); +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif -/** - * set_pwm_duty - * Set the PWM duty cycle of the provided pin to the provided value - * Optionally allows inverting the duty cycle [default = false] - * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] - */ -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); +extern "C" int freeMemory(); -/* - * init_pwm_timers - * sets the default frequency for timers 2-5 to 1000HZ - */ -void init_pwm_timers(); +#pragma GCC diagnostic pop + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static void init(); // Called early in setup() + static void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 + + // Interrupts + static bool isr_state() { return TEST(SREG, SREG_I); } + static void isr_on() { sei(); } + static void isr_off() { cli(); } + + static void delay_ms(const int ms) { _delay_ms(ms); } + + // Tasks, called from idle() + static void idletask() {} + + // Reset + static uint8_t reset_reason; + static uint8_t get_reset_source() { return reset_reason; } + static void clear_reset_source() { MCUSR = 0; } + + // Free SRAM + static int freeMemory() { return ::freeMemory(); } + + // + // ADC Methods + // + + // Called by Temperature::init once at startup + static void adc_init() { + ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADIF) | 0x07; + DIDR0 = 0; + #ifdef DIDR2 + DIDR2 = 0; + #endif + } + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const uint8_t ch) { + #ifdef DIDR2 + if (ch > 7) { SBI(DIDR2, ch & 0x07); return; } + #endif + SBI(DIDR0, ch); + } + + // Begin ADC sampling on the given channel + static void adc_start(const uint8_t ch) { + #ifdef MUX5 + ADCSRB = ch > 7 ? _BV(MUX5) : 0; + #else + ADCSRB = 0; + #endif + ADMUX = _BV(REFS0) | (ch & 0x07); + SBI(ADCSRA, ADSC); + } + + // Is the ADC ready for reading? + static bool adc_ready() { return !TEST(ADCSRA, ADSC); } + + // The current value of the ADC register + static __typeof__(ADC) adc_value() { return ADC; } + + /** + * init_pwm_timers + * Set the default frequency for timers 2-5 to 1000HZ + */ + static void init_pwm_timers(); + + /** + * Set the PWM duty cycle for the pin to the given value. + * Optionally invert the duty cycle [default = false] + * Optionally change the scale of the provided value to enable finer PWM duty control [default = 255] + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); + + /** + * Set the frequency of the timer for the given pin as close as + * possible to the provided desired frequency. Internally calculate + * the required waveform generation mode, prescaler, and resolution + * values and set timer registers accordingly. + * NOTE that the frequency is applied to all pins on the timer (Ex OC3A, OC3B and OC3B) + * NOTE that there are limitations, particularly if using TIMER2. (see Configuration_adv.h -> FAST_PWM_FAN Settings) + */ + static void set_pwm_frequency(const pin_t pin, const uint16_t f_desired); +}; diff --git a/Marlin/src/HAL/AVR/MarlinSerial.cpp b/Marlin/src/HAL/AVR/MarlinSerial.cpp index cd8bf5e690..986462437c 100644 --- a/Marlin/src/HAL/AVR/MarlinSerial.cpp +++ b/Marlin/src/HAL/AVR/MarlinSerial.cpp @@ -486,7 +486,7 @@ void MarlinSerial::write(const uint8_t c) { const uint8_t i = (tx_buffer.head + 1) & (Cfg::TX_SIZE - 1); // If global interrupts are disabled (as the result of being called from an ISR)... - if (!ISRS_ENABLED()) { + if (!hal.isr_state()) { // Make room by polling if it is possible to transmit, and do so! while (i == tx_buffer.tail) { @@ -534,7 +534,7 @@ void MarlinSerial::flushTX() { if (!_written) return; // If global interrupts are disabled (as the result of being called from an ISR)... - if (!ISRS_ENABLED()) { + if (!hal.isr_state()) { // Wait until everything was transmitted - We must do polling, as interrupts are disabled while (tx_buffer.head != tx_buffer.tail || !B_TXC) { diff --git a/Marlin/src/HAL/AVR/MarlinSerial.h b/Marlin/src/HAL/AVR/MarlinSerial.h index 84c5ddd297..7eb76000d6 100644 --- a/Marlin/src/HAL/AVR/MarlinSerial.h +++ b/Marlin/src/HAL/AVR/MarlinSerial.h @@ -191,13 +191,13 @@ rx_framing_errors; static ring_buffer_pos_t rx_max_enqueued; - static FORCE_INLINE ring_buffer_pos_t atomic_read_rx_head(); + FORCE_INLINE static ring_buffer_pos_t atomic_read_rx_head(); static volatile bool rx_tail_value_not_stable; static volatile uint16_t rx_tail_value_backup; - static FORCE_INLINE void atomic_set_rx_tail(ring_buffer_pos_t value); - static FORCE_INLINE ring_buffer_pos_t atomic_read_rx_tail(); + FORCE_INLINE static void atomic_set_rx_tail(ring_buffer_pos_t value); + FORCE_INLINE static ring_buffer_pos_t atomic_read_rx_tail(); public: FORCE_INLINE static void store_rxd_char(); diff --git a/Marlin/src/HAL/AVR/fast_pwm.cpp b/Marlin/src/HAL/AVR/fast_pwm.cpp index f8201d028e..0a384172c3 100644 --- a/Marlin/src/HAL/AVR/fast_pwm.cpp +++ b/Marlin/src/HAL/AVR/fast_pwm.cpp @@ -107,7 +107,7 @@ const Timer get_pwm_timer(const pin_t pin) { return Timer(); } -void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { +void MarlinHAL::set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { const Timer timer = get_pwm_timer(pin); if (timer.isProtected || !timer.isPWM) return; // Don't proceed if protected timer or not recognized @@ -176,7 +176,7 @@ void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { _SET_ICRn(timer, res); // Set ICRn value (TOP) = res } -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { +void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { // If v is 0 or v_size (max), digitalWrite to LOW or HIGH. // Note that digitalWrite also disables PWM output for us (sets COM bit to 0) if (v == 0) @@ -201,7 +201,7 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 } } -void init_pwm_timers() { +void MarlinHAL::init_pwm_timers() { // Init some timer frequencies to a default 1KHz const pin_t pwm_pin[] = { #ifdef __AVR_ATmega2560__ diff --git a/Marlin/src/HAL/AVR/math.h b/Marlin/src/HAL/AVR/math.h index 7ede4accc0..7dd1018ff1 100644 --- a/Marlin/src/HAL/AVR/math.h +++ b/Marlin/src/HAL/AVR/math.h @@ -35,7 +35,7 @@ // C B A is longIn1 // D C B A is longIn2 // -static FORCE_INLINE uint16_t MultiU24X32toH16(uint32_t longIn1, uint32_t longIn2) { +FORCE_INLINE static uint16_t MultiU24X32toH16(uint32_t longIn1, uint32_t longIn2) { uint8_t tmp1; uint8_t tmp2; uint16_t intRes; @@ -89,7 +89,7 @@ static FORCE_INLINE uint16_t MultiU24X32toH16(uint32_t longIn1, uint32_t longIn2 // uses: // r26 to store 0 // r27 to store the byte 1 of the 24 bit result -static FORCE_INLINE uint16_t MultiU16X8toH16(uint8_t charIn1, uint16_t intIn2) { +FORCE_INLINE static uint16_t MultiU16X8toH16(uint8_t charIn1, uint16_t intIn2) { uint8_t tmp; uint16_t intRes; __asm__ __volatile__ ( diff --git a/Marlin/src/HAL/AVR/timers.h b/Marlin/src/HAL/AVR/timers.h index ba3c4acd29..33c3880b6b 100644 --- a/Marlin/src/HAL/AVR/timers.h +++ b/Marlin/src/HAL/AVR/timers.h @@ -109,12 +109,12 @@ FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) { * (otherwise, characters will be lost due to UART overflow). * Then: Stepper, Endstops, Temperature, and -finally- all others. */ -#define HAL_timer_isr_prologue(T) -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_prologue(T) NOOP +#define HAL_timer_isr_epilogue(T) NOOP -/* 18 cycles maximum latency */ #ifndef HAL_STEP_TIMER_ISR +/* 18 cycles maximum latency */ #define HAL_STEP_TIMER_ISR() \ extern "C" void TIMER1_COMPA_vect() __attribute__ ((signal, naked, used, externally_visible)); \ extern "C" void TIMER1_COMPA_vect_bottom() asm ("TIMER1_COMPA_vect_bottom") __attribute__ ((used, externally_visible, noinline)); \ diff --git a/Marlin/src/HAL/DUE/HAL.cpp b/Marlin/src/HAL/DUE/HAL.cpp index a3985652e7..bbd13dc05a 100644 --- a/Marlin/src/HAL/DUE/HAL.cpp +++ b/Marlin/src/HAL/DUE/HAL.cpp @@ -34,7 +34,7 @@ // Public Variables // ------------------------ -uint16_t HAL_adc_result; +uint16_t MarlinHAL::adc_result; // ------------------------ // Public functions @@ -42,8 +42,7 @@ uint16_t HAL_adc_result; TERN_(POSTMORTEM_DEBUGGING, extern void install_min_serial()); -// HAL initialization task -void HAL_init() { +void MarlinHAL::init() { // Initialize the USB stack #if ENABLED(SDSUPPORT) OUT_WRITE(SDSS, HIGH); // Try to set SDSS inactive before any other SPI users start up @@ -52,21 +51,15 @@ void HAL_init() { TERN_(POSTMORTEM_DEBUGGING, install_min_serial()); // Install the min serial handler } -// HAL idle task -void HAL_idletask() { - // Perform USB stack housekeeping - usb_task_idle(); +void MarlinHAL::init_board() { + #ifdef BOARD_INIT + BOARD_INIT(); + #endif } -// Disable interrupts -void cli() { noInterrupts(); } +void MarlinHAL::idletask() { usb_task_idle(); } // Perform USB stack housekeeping -// Enable interrupts -void sei() { interrupts(); } - -void HAL_clear_reset_source() { } - -uint8_t HAL_get_reset_source() { +uint8_t MarlinHAL::get_reset_source() { switch ((RSTC->RSTC_SR >> 8) & 0x07) { case 0: return RST_POWER_ON; case 1: return RST_BACKUP; @@ -77,12 +70,7 @@ uint8_t HAL_get_reset_source() { } } -void HAL_reboot() { rstc_start_software_reset(RSTC); } - -void _delay_ms(const int delay_ms) { - // Todo: port for Due? - delay(delay_ms); -} +void MarlinHAL::reboot() { rstc_start_software_reset(RSTC); } extern "C" { extern unsigned int _ebss; // end of bss section @@ -94,19 +82,6 @@ int freeMemory() { return (int)&free_memory - (heap_end ?: (int)&_ebss); } -// ------------------------ -// ADC -// ------------------------ - -void HAL_adc_start_conversion(const uint8_t ch) { - HAL_adc_result = analogRead(ch); -} - -uint16_t HAL_adc_get_result() { - // nop - return HAL_adc_result; -} - // Forward the default serial ports #if USING_HW_SERIAL0 DefaultSerial1 MSerial0(false, Serial); diff --git a/Marlin/src/HAL/DUE/HAL.h b/Marlin/src/HAL/DUE/HAL.h index 96ab5d9808..9a02c9a0dc 100644 --- a/Marlin/src/HAL/DUE/HAL.h +++ b/Marlin/src/HAL/DUE/HAL.h @@ -38,6 +38,10 @@ #include "../../core/serial_hook.h" +// ------------------------ +// Serial ports +// ------------------------ + typedef ForwardSerial1Class< decltype(Serial) > DefaultSerial1; typedef ForwardSerial1Class< decltype(Serial1) > DefaultSerial2; typedef ForwardSerial1Class< decltype(Serial2) > DefaultSerial3; @@ -97,60 +101,38 @@ extern DefaultSerial4 MSerial3; #include "MarlinSerial.h" #include "MarlinSerialUSB.h" -// On AVR this is in math.h? -#define square(x) ((x)*(x)) +// ------------------------ +// Types +// ------------------------ typedef int8_t pin_t; -#define SHARED_SERVOS HAS_SERVOS -#define HAL_SERVO_LIB Servo +#define SHARED_SERVOS HAS_SERVOS // Use shared/servos.cpp + +class Servo; +typedef Servo hal_servo_t; // // Interrupts // -#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() -#define CRITICAL_SECTION_END() if (!primask) __enable_irq() -#define ISRS_ENABLED() (!__get_PRIMASK()) -#define ENABLE_ISRS() __enable_irq() -#define DISABLE_ISRS() __disable_irq() +#define sei() noInterrupts() +#define cli() interrupts() -void cli(); // Disable interrupts -void sei(); // Enable interrupts - -void HAL_clear_reset_source(); // clear reset reason -uint8_t HAL_get_reset_source(); // get reset reason - -void HAL_reboot(); +#define CRITICAL_SECTION_START() const bool _irqon = hal.isr_state(); hal.isr_off() +#define CRITICAL_SECTION_END() if (_irqon) hal.isr_on() // // ADC // -extern uint16_t HAL_adc_result; // result of last ADC conversion +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 #ifndef analogInputToDigitalPin #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1) #endif -#define HAL_ANALOG_SELECT(ch) - -inline void HAL_adc_init() {}//todo - -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 -#define HAL_START_ADC(ch) HAL_adc_start_conversion(ch) -#define HAL_READ_ADC() HAL_adc_result -#define HAL_ADC_READY() true - -void HAL_adc_start_conversion(const uint8_t ch); -uint16_t HAL_adc_get_result(); - // -// PWM -// -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } - -// -// Pin Map +// Pin Mapping for M42, M43, M226 // #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin @@ -159,27 +141,18 @@ inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, // // Tone // -void toneInit(); void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration=0); void noTone(const pin_t _pin); -// Enable hooks into idle and setup for HAL -#define HAL_IDLETASK 1 -void HAL_idletask(); -void HAL_init(); - -// -// Utility functions -// -void _delay_ms(const int delay); +// ------------------------ +// Class Utilities +// ------------------------ #pragma GCC diagnostic push #if GCC_VERSION <= 50000 #pragma GCC diagnostic ignored "-Wunused-function" #endif -int freeMemory(); - #pragma GCC diagnostic pop #ifdef __cplusplus @@ -189,3 +162,69 @@ char *dtostrf(double __val, signed char __width, unsigned char __prec, char *__s #ifdef __cplusplus } #endif + +// Return free RAM between end of heap (or end bss) and whatever is current +int freeMemory(); + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static void init(); // Called early in setup() + static void init_board(); // Called less early in setup() + static void reboot(); // Software reset + + // Interrupts + static bool isr_state() { return !__get_PRIMASK(); } + static void isr_on() { __enable_irq(); } + static void isr_off() { __disable_irq(); } + + static void delay_ms(const int ms) { delay(ms); } + + // Tasks, called from idle() + static void idletask(); + + // Reset + static uint8_t get_reset_source(); + static void clear_reset_source() {} + + // Free SRAM + static int freeMemory() { return ::freeMemory(); } + + // + // ADC Methods + // + + static uint16_t adc_result; + + // Called by Temperature::init once at startup + static void adc_init() {} + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const uint8_t ch) {} + + // Begin ADC sampling on the given channel + static void adc_start(const uint8_t ch) { adc_result = analogRead(ch); } + + // Is the ADC ready for reading? + static bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value() { return adc_result; } + + /** + * Set the PWM duty cycle for the pin to the given value. + * No inverting the duty cycle in this HAL. + * No changing the maximum size of the provided value to enable finer PWM duty control in this HAL. + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + +}; diff --git a/Marlin/src/HAL/DUE/MarlinSerial.cpp b/Marlin/src/HAL/DUE/MarlinSerial.cpp index fe62ff5607..638f7a1007 100644 --- a/Marlin/src/HAL/DUE/MarlinSerial.cpp +++ b/Marlin/src/HAL/DUE/MarlinSerial.cpp @@ -406,7 +406,7 @@ size_t MarlinSerial::write(const uint8_t c) { const uint8_t i = (tx_buffer.head + 1) & (Cfg::TX_SIZE - 1); // If global interrupts are disabled (as the result of being called from an ISR)... - if (!ISRS_ENABLED()) { + if (!hal.isr_state()) { // Make room by polling if it is possible to transmit, and do so! while (i == tx_buffer.tail) { @@ -454,7 +454,7 @@ void MarlinSerial::flushTX() { if (!_written) return; // If global interrupts are disabled (as the result of being called from an ISR)... - if (!ISRS_ENABLED()) { + if (!hal.isr_state()) { // Wait until everything was transmitted - We must do polling, as interrupts are disabled while (tx_buffer.head != tx_buffer.tail || !(HWUART->UART_SR & UART_SR_TXEMPTY)) { diff --git a/Marlin/src/HAL/DUE/Tone.cpp b/Marlin/src/HAL/DUE/Tone.cpp index 1ac81faaf0..4bc8142aba 100644 --- a/Marlin/src/HAL/DUE/Tone.cpp +++ b/Marlin/src/HAL/DUE/Tone.cpp @@ -35,7 +35,7 @@ static pin_t tone_pin; volatile static int32_t toggles; -void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration) { +void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration/*=0*/) { tone_pin = _pin; toggles = 2 * frequency * duration / 1000; HAL_timer_start(MF_TIMER_TONE, 2 * frequency); diff --git a/Marlin/src/HAL/DUE/timers.h b/Marlin/src/HAL/DUE/timers.h index e2932ff36f..bcfd07e268 100644 --- a/Marlin/src/HAL/DUE/timers.h +++ b/Marlin/src/HAL/DUE/timers.h @@ -125,4 +125,4 @@ FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_SR; } -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/ESP32/HAL.cpp b/Marlin/src/HAL/ESP32/HAL.cpp index 499582b8c1..adf5cecabe 100644 --- a/Marlin/src/HAL/ESP32/HAL.cpp +++ b/Marlin/src/HAL/ESP32/HAL.cpp @@ -52,7 +52,7 @@ // Externs // ------------------------ -portMUX_TYPE spinlock = portMUX_INITIALIZER_UNLOCKED; +portMUX_TYPE MarlinHAL::spinlock = portMUX_INITIALIZER_UNLOCKED; // ------------------------ // Local defines @@ -64,7 +64,7 @@ portMUX_TYPE spinlock = portMUX_INITIALIZER_UNLOCKED; // Public Variables // ------------------------ -uint16_t HAL_adc_result; +uint16_t MarlinHAL::adc_result; // ------------------------ // Private Variables @@ -95,20 +95,22 @@ volatile int numPWMUsed = 0, #endif #if ENABLED(USE_ESP32_EXIO) + HardwareSerial YSerial2(2); void Write_EXIO(uint8_t IO, uint8_t v) { - if (ISRS_ENABLED()) { - DISABLE_ISRS(); + if (hal.isr_state()) { + hal.isr_off(); YSerial2.write(0x80 | (((char)v) << 5) | (IO - 100)); - ENABLE_ISRS(); + hal.isr_on(); } else YSerial2.write(0x80 | (((char)v) << 5) | (IO - 100)); } + #endif -void HAL_init_board() { +void MarlinHAL::init_board() { #if ENABLED(USE_ESP32_TASK_WDT) esp_task_wdt_init(10, true); #endif @@ -154,27 +156,24 @@ void HAL_init_board() { #endif } -void HAL_idletask() { +void MarlinHAL::idletask() { #if BOTH(WIFISUPPORT, OTASUPPORT) OTA_handle(); #endif TERN_(ESP3D_WIFISUPPORT, esp3dlib.idletask()); } -void HAL_clear_reset_source() { } +uint8_t MarlinHAL::get_reset_source() { return rtc_get_reset_reason(1); } -uint8_t HAL_get_reset_source() { return rtc_get_reset_reason(1); } - -void HAL_reboot() { ESP.restart(); } - -void _delay_ms(int delay_ms) { delay(delay_ms); } +void MarlinHAL::reboot() { ESP.restart(); } // return free memory between end of heap (or end bss) and whatever is current -int freeMemory() { return ESP.getFreeHeap(); } +int MarlinHAL::freeMemory() { return ESP.getFreeHeap(); } // ------------------------ // ADC // ------------------------ + #define ADC1_CHANNEL(pin) ADC1_GPIO ## pin ## _CHANNEL adc1_channel_t get_channel(int pin) { @@ -196,7 +195,7 @@ void adc1_set_attenuation(adc1_channel_t chan, adc_atten_t atten) { } } -void HAL_adc_init() { +void MarlinHAL::adc_init() { // Configure ADC adc1_config_width(ADC_WIDTH_12Bit); @@ -228,11 +227,11 @@ void HAL_adc_init() { } } -void HAL_adc_start_conversion(const uint8_t adc_pin) { - const adc1_channel_t chan = get_channel(adc_pin); +void MarlinHAL::adc_start(const pin_t pin) { + const adc1_channel_t chan = get_channel(pin); uint32_t mv; esp_adc_cal_get_voltage((adc_channel_t)chan, &characteristics[attenuations[chan]], &mv); - HAL_adc_result = mv * 1023.0 / 3300.0; + adc_result = mv * 1023.0 / 3300.0; // Change the attenuation level based on the new reading adc_atten_t atten; diff --git a/Marlin/src/HAL/ESP32/HAL.h b/Marlin/src/HAL/ESP32/HAL.h index 78eebc8d82..df52e2186c 100644 --- a/Marlin/src/HAL/ESP32/HAL.h +++ b/Marlin/src/HAL/ESP32/HAL.h @@ -49,8 +49,6 @@ // Defines // ------------------------ -extern portMUX_TYPE spinlock; - #define MYSERIAL1 flushableSerial #if EITHER(WIFISUPPORT, ESP3D_WIFISUPPORT) @@ -65,9 +63,6 @@ extern portMUX_TYPE spinlock; #define CRITICAL_SECTION_START() portENTER_CRITICAL(&spinlock) #define CRITICAL_SECTION_END() portEXIT_CRITICAL(&spinlock) -#define ISRS_ENABLED() (spinlock.owner == portMUX_FREE_VAL) -#define ENABLE_ISRS() if (spinlock.owner != portMUX_FREE_VAL) portEXIT_CRITICAL(&spinlock) -#define DISABLE_ISRS() portENTER_CRITICAL(&spinlock) // ------------------------ // Types @@ -75,14 +70,8 @@ extern portMUX_TYPE spinlock; typedef int16_t pin_t; -#define HAL_SERVO_LIB Servo - -// ------------------------ -// Public Variables -// ------------------------ - -/** result of last ADC conversion */ -extern uint16_t HAL_adc_result; +class Servo; +typedef Servo hal_servo_t; // ------------------------ // Public functions @@ -91,59 +80,18 @@ extern uint16_t HAL_adc_result; // // Tone // -void toneInit(); void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration=0); void noTone(const pin_t _pin); -// clear reset reason -void HAL_clear_reset_source(); - -// reset reason -uint8_t HAL_get_reset_source(); - -void HAL_reboot(); - -void _delay_ms(int delay); - -#pragma GCC diagnostic push -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic ignored "-Wunused-function" -#endif - -int freeMemory(); - -#pragma GCC diagnostic pop - void analogWrite(pin_t pin, int value); -// ADC -#define HAL_ANALOG_SELECT(pin) - -void HAL_adc_init(); - -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_result -#define HAL_ADC_READY() true - -void HAL_adc_start_conversion(const uint8_t adc_pin); - -// PWM -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } - -// Pin Map +// +// Pin Mapping for M42, M43, M226 +// #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) -// Enable hooks into idle and setup for HAL -#define HAL_IDLETASK 1 -#define BOARD_INIT() HAL_init_board() -void HAL_idletask(); -inline void HAL_init() {} -void HAL_init_board(); - #if ENABLED(USE_ESP32_EXIO) void Write_EXIO(uint8_t IO, uint8_t v); #endif @@ -188,3 +136,85 @@ FORCE_INLINE static void DELAY_CYCLES(uint32_t x) { } } + +// ------------------------ +// Class Utilities +// ------------------------ + +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif + +int freeMemory(); + +#pragma GCC diagnostic pop + +void _delay_ms(const int ms); + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static void init() {} // Called early in setup() + static void init_board(); // Called less early in setup() + static void reboot(); // Restart the firmware + + // Interrupts + static portMUX_TYPE spinlock; + static bool isr_state() { return spinlock.owner == portMUX_FREE_VAL; } + static void isr_on() { if (spinlock.owner != portMUX_FREE_VAL) portEXIT_CRITICAL(&spinlock); } + static void isr_off() { portENTER_CRITICAL(&spinlock); } + + static void delay_ms(const int ms) { _delay_ms(ms); } + + // Tasks, called from idle() + static void idletask(); + + // Reset + static uint8_t get_reset_source(); + static void clear_reset_source() {} + + // Free SRAM + static int freeMemory(); + + // + // ADC Methods + // + + static uint16_t adc_result; + + // Called by Temperature::init once at startup + static void adc_init(); + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const pin_t pin) {} + + // Begin ADC sampling on the given channel + static void adc_start(const pin_t pin); + + // Is the ADC ready for reading? + static bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value() { return adc_result; } + + /** + * Set the PWM duty cycle for the pin to the given value. + * No inverting the duty cycle in this HAL. + * No changing the maximum size of the provided value to enable finer PWM duty control in this HAL. + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + +}; diff --git a/Marlin/src/HAL/ESP32/Tone.cpp b/Marlin/src/HAL/ESP32/Tone.cpp index 9c16cdde80..839c612b6a 100644 --- a/Marlin/src/HAL/ESP32/Tone.cpp +++ b/Marlin/src/HAL/ESP32/Tone.cpp @@ -35,7 +35,7 @@ static pin_t tone_pin; volatile static int32_t toggles; -void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration) { +void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration/*=0*/) { tone_pin = _pin; toggles = 2 * frequency * duration / 1000; HAL_timer_start(MF_TIMER_TONE, 2 * frequency); diff --git a/Marlin/src/HAL/ESP32/timers.cpp b/Marlin/src/HAL/ESP32/timers.cpp index df0065f453..c37ad2430c 100644 --- a/Marlin/src/HAL/ESP32/timers.cpp +++ b/Marlin/src/HAL/ESP32/timers.cpp @@ -81,7 +81,7 @@ void IRAM_ATTR timer_isr(void *para) { * @param timer_num timer number to initialize * @param frequency frequency of the timer */ -void HAL_timer_start(const uint8_t timer_num, uint32_t frequency) { +void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { const tTimerConfig timer = timer_config[timer_num]; timer_config_t config; diff --git a/Marlin/src/HAL/ESP32/timers.h b/Marlin/src/HAL/ESP32/timers.h index 266169848d..aa4e1551f0 100644 --- a/Marlin/src/HAL/ESP32/timers.h +++ b/Marlin/src/HAL/ESP32/timers.h @@ -127,7 +127,7 @@ extern const tTimerConfig timer_config[]; // Public functions // ------------------------ -void HAL_timer_start (const uint8_t timer_num, uint32_t frequency); +void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency); void HAL_timer_set_compare(const uint8_t timer_num, const hal_timer_t count); hal_timer_t HAL_timer_get_compare(const uint8_t timer_num); hal_timer_t HAL_timer_get_count(const uint8_t timer_num); @@ -136,5 +136,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num); void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); -#define HAL_timer_isr_prologue(T) -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_prologue(T) NOOP +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/LINUX/HAL.cpp b/Marlin/src/HAL/LINUX/HAL.cpp index 0b679170ef..db43f42eaa 100644 --- a/Marlin/src/HAL/LINUX/HAL.cpp +++ b/Marlin/src/HAL/LINUX/HAL.cpp @@ -24,6 +24,10 @@ #include "../../inc/MarlinConfig.h" #include "../shared/Delay.h" +// ------------------------ +// Serial ports +// ------------------------ + MSerialT usb_serial(TERN0(EMERGENCY_PARSER, true)); // U8glib required functions @@ -37,42 +41,21 @@ extern "C" { //************************// // return free heap space -int freeMemory() { - return 0; -} +int freeMemory() { return 0; } // ------------------------ // ADC // ------------------------ -void HAL_adc_init() { +uint8_t MarlinHAL::active_ch = 0; -} - -void HAL_adc_enable_channel(const uint8_t ch) { - -} - -uint8_t active_ch = 0; -void HAL_adc_start_conversion(const uint8_t ch) { - active_ch = ch; -} - -bool HAL_adc_finished() { - return true; -} - -uint16_t HAL_adc_get_result() { - pin_t pin = analogInputToDigitalPin(active_ch); +uint16_t MarlinHAL::adc_value() { + const pin_t pin = analogInputToDigitalPin(active_ch); if (!VALID_PIN(pin)) return 0; - uint16_t data = ((Gpio::get(pin) >> 2) & 0x3FF); + const uint16_t data = ((Gpio::get(pin) >> 2) & 0x3FF); return data; // return 10bit value as Marlin expects } -void HAL_pwm_init() { - -} - -void HAL_reboot() { /* Reset the application state and GPIO */ } +void MarlinHAL::reboot() { /* Reset the application state and GPIO */ } #endif // __PLAT_LINUX__ diff --git a/Marlin/src/HAL/LINUX/HAL.h b/Marlin/src/HAL/LINUX/HAL.h index d7d3a92b73..43899c632d 100644 --- a/Marlin/src/HAL/LINUX/HAL.h +++ b/Marlin/src/HAL/LINUX/HAL.h @@ -21,34 +21,13 @@ */ #pragma once -#define CPU_32_BIT - -#define F_CPU 100000000UL -#define SystemCoreClock F_CPU #include #include #include - #undef min #undef max - #include -void _printf (const char *format, ...); -void _putc(uint8_t c); -uint8_t _getc(); - -//extern "C" volatile uint32_t _millis; - -//arduino: Print.h -#define DEC 10 -#define HEX 16 -#define OCT 8 -#define BIN 2 -//arduino: binary.h (weird defines) -#define B01 1 -#define B10 2 - #include "hardware/Clock.h" #include "../shared/Marduino.h" @@ -58,27 +37,56 @@ uint8_t _getc(); #include "watchdog.h" #include "serial.h" -#define SHARED_SERVOS HAS_SERVOS +// ------------------------ +// Defines +// ------------------------ -extern MSerialT usb_serial; -#define MYSERIAL1 usb_serial +#define CPU_32_BIT +#define SHARED_SERVOS HAS_SERVOS // Use shared/servos.cpp + +#define F_CPU 100000000UL +#define SystemCoreClock F_CPU + +#define DELAY_CYCLES(x) Clock::delayCycles(x) #define CPU_ST7920_DELAY_1 600 #define CPU_ST7920_DELAY_2 750 #define CPU_ST7920_DELAY_3 750 +void _printf(const char *format, ...); +void _putc(uint8_t c); +uint8_t _getc(); + +//arduino: Print.h +#define DEC 10 +#define HEX 16 +#define OCT 8 +#define BIN 2 +//arduino: binary.h (weird defines) +#define B01 1 +#define B10 2 + +// ------------------------ +// Serial ports +// ------------------------ + +extern MSerialT usb_serial; +#define MYSERIAL1 usb_serial + // // Interrupts // #define CRITICAL_SECTION_START() #define CRITICAL_SECTION_END() -#define ISRS_ENABLED() -#define ENABLE_ISRS() -#define DISABLE_ISRS() -inline void HAL_init() {} +// ADC +#define HAL_ADC_VREF 5.0 +#define HAL_ADC_RESOLUTION 10 + +// ------------------------ +// Class Utilities +// ------------------------ -// Utility functions #pragma GCC diagnostic push #if GCC_VERSION <= 50000 #pragma GCC diagnostic ignored "-Wunused-function" @@ -88,29 +96,66 @@ int freeMemory(); #pragma GCC diagnostic pop -// ADC -#define HAL_ADC_VREF 5.0 -#define HAL_ADC_RESOLUTION 10 -#define HAL_ANALOG_SELECT(ch) HAL_adc_enable_channel(ch) -#define HAL_START_ADC(ch) HAL_adc_start_conversion(ch) -#define HAL_READ_ADC() HAL_adc_get_result() -#define HAL_ADC_READY() true +// ------------------------ +// MarlinHAL Class +// ------------------------ -void HAL_adc_init(); -void HAL_adc_enable_channel(const uint8_t ch); -void HAL_adc_start_conversion(const uint8_t ch); -uint16_t HAL_adc_get_result(); +class MarlinHAL { +public: -// PWM -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + // Earliest possible init, before setup() + MarlinHAL() {} -// Reset source -inline void HAL_clear_reset_source(void) {} -inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; } + static void init() {} // Called early in setup() + static void init_board() {} // Called less early in setup() + static void reboot(); // Reset the application state and GPIO -void HAL_reboot(); // Reset the application state and GPIO + // Interrupts + static bool isr_state() { return true; } + static void isr_on() {} + static void isr_off() {} -/* ---------------- Delay in cycles */ -FORCE_INLINE static void DELAY_CYCLES(uint64_t x) { - Clock::delayCycles(x); -} + static void delay_ms(const int ms) { _delay_ms(ms); } + + // Tasks, called from idle() + static void idletask() {} + + // Reset + static constexpr uint8_t reset_reason = RST_POWER_ON; + static uint8_t get_reset_source() { return reset_reason; } + static void clear_reset_source() {} + + // Free SRAM + static int freeMemory() { return ::freeMemory(); } + + // + // ADC Methods + // + + static uint8_t active_ch; + + // Called by Temperature::init once at startup + static void adc_init() {} + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const uint8_t) {} + + // Begin ADC sampling on the given channel + static void adc_start(const uint8_t ch) { active_ch = ch; } + + // Is the ADC ready for reading? + static bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value(); + + /** + * Set the PWM duty cycle for the pin to the given value. + * No option to change the resolution or invert the duty cycle. + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + + static void set_pwm_frequency(const pin_t, int) {} +}; diff --git a/Marlin/src/HAL/LINUX/arduino.cpp b/Marlin/src/HAL/LINUX/arduino.cpp index 4b56d02a38..075b4ccde2 100644 --- a/Marlin/src/HAL/LINUX/arduino.cpp +++ b/Marlin/src/HAL/LINUX/arduino.cpp @@ -31,9 +31,7 @@ void cli() { } // Disable void sei() { } // Enable // Time functions -void _delay_ms(const int delay_ms) { - delay(delay_ms); -} +void _delay_ms(const int ms) { delay(ms); } uint32_t millis() { return (uint32_t)Clock::millis(); diff --git a/Marlin/src/HAL/LINUX/include/Arduino.h b/Marlin/src/HAL/LINUX/include/Arduino.h index d4086e259a..f05aaed880 100644 --- a/Marlin/src/HAL/LINUX/include/Arduino.h +++ b/Marlin/src/HAL/LINUX/include/Arduino.h @@ -59,10 +59,9 @@ typedef uint8_t byte; #endif #define sq(v) ((v) * (v)) -#define square(v) sq(v) #define constrain(value, arg_min, arg_max) ((value) < (arg_min) ? (arg_min) :((value) > (arg_max) ? (arg_max) : (value))) -//Interrupts +// Interrupts void cli(); // Disable void sei(); // Enable void attachInterrupt(uint32_t pin, void (*callback)(), uint32_t mode); @@ -74,8 +73,8 @@ extern "C" { } // Time functions -extern "C" void delay(const int milis); -void _delay_ms(const int delay); +extern "C" void delay(const int ms); +void _delay_ms(const int ms); void delayMicroseconds(unsigned long); uint32_t millis(); diff --git a/Marlin/src/HAL/LINUX/timers.h b/Marlin/src/HAL/LINUX/timers.h index a98ceb6f39..2d2a95774c 100644 --- a/Marlin/src/HAL/LINUX/timers.h +++ b/Marlin/src/HAL/LINUX/timers.h @@ -92,5 +92,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num); void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); -#define HAL_timer_isr_prologue(T) -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_prologue(T) NOOP +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/LPC1768/HAL.cpp b/Marlin/src/HAL/LPC1768/HAL.cpp index cee9cfc5f7..541848b08a 100644 --- a/Marlin/src/HAL/LPC1768/HAL.cpp +++ b/Marlin/src/HAL/LPC1768/HAL.cpp @@ -31,7 +31,7 @@ DefaultSerial1 USBSerial(false, UsbSerial); -uint32_t HAL_adc_reading = 0; +uint32_t MarlinHAL::adc_result = 0; // U8glib required functions extern "C" { @@ -41,8 +41,6 @@ extern "C" { void u8g_Delay(uint16_t val) { delay(val); } } -//************************// - // return free heap space int freeMemory() { char stack_end; @@ -54,7 +52,27 @@ int freeMemory() { return result; } -// scan command line for code +void MarlinHAL::reboot() { NVIC_SystemReset(); } + +uint8_t MarlinHAL::get_reset_source() { + #if ENABLED(USE_WATCHDOG) + if (watchdog_timed_out()) return RST_WATCHDOG; + #endif + return RST_POWER_ON; +} + +void MarlinHAL::clear_reset_source() { + TERN_(USE_WATCHDOG, watchdog_clear_timeout_flag()); +} + +void flashFirmware(const int16_t) { + delay(500); // Give OS time to disconnect + USB_Connect(false); // USB clear connection + delay(1000); // Give OS time to notice + hal.reboot(); +} + +// For M42/M43, scan command line for pin code // return index into pin map array if found and the pin is valid. // return dval if not found or not a valid pin. int16_t PARSED_PIN_INDEX(const char code, const int16_t dval) { @@ -63,24 +81,4 @@ int16_t PARSED_PIN_INDEX(const char code, const int16_t dval) { return ind > -1 ? ind : dval; } -void flashFirmware(const int16_t) { - delay(500); // Give OS time to disconnect - USB_Connect(false); // USB clear connection - delay(1000); // Give OS time to notice - HAL_reboot(); -} - -void HAL_clear_reset_source(void) { - TERN_(USE_WATCHDOG, watchdog_clear_timeout_flag()); -} - -uint8_t HAL_get_reset_source(void) { - #if ENABLED(USE_WATCHDOG) - if (watchdog_timed_out()) return RST_WATCHDOG; - #endif - return RST_POWER_ON; -} - -void HAL_reboot() { NVIC_SystemReset(); } - #endif // TARGET_LPC1768 diff --git a/Marlin/src/HAL/LPC1768/HAL.h b/Marlin/src/HAL/LPC1768/HAL.h index f5e4326983..eefacae995 100644 --- a/Marlin/src/HAL/LPC1768/HAL.h +++ b/Marlin/src/HAL/LPC1768/HAL.h @@ -28,8 +28,6 @@ #define CPU_32_BIT -void HAL_init(); - #include #include #include @@ -47,12 +45,9 @@ extern "C" volatile uint32_t _millis; #include #include -// -// Default graphical display delays -// -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 +// ------------------------ +// Serial ports +// ------------------------ typedef ForwardSerial1Class< decltype(UsbSerial) > DefaultSerial1; extern DefaultSerial1 USBSerial; @@ -114,26 +109,12 @@ extern DefaultSerial1 USBSerial; // // Interrupts // -#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() -#define CRITICAL_SECTION_END() if (!primask) __enable_irq() -#define ISRS_ENABLED() (!__get_PRIMASK()) -#define ENABLE_ISRS() __enable_irq() -#define DISABLE_ISRS() __disable_irq() + +#define CRITICAL_SECTION_START() const bool irqon = !__get_PRIMASK(); __disable_irq() +#define CRITICAL_SECTION_END() if (irqon) __enable_irq() // -// Utility functions -// -#pragma GCC diagnostic push -#if GCC_VERSION <= 50000 - #pragma GCC diagnostic ignored "-Wunused-function" -#endif - -int freeMemory(); - -#pragma GCC diagnostic pop - -// -// ADC API +// ADC // #define ADC_MEDIAN_FILTER_SIZE (23) // Higher values increase step delay (phase shift), @@ -152,20 +133,9 @@ int freeMemory(); #define HAL_ADC_RESOLUTION 12 // 15 bit maximum, raw temperature is stored as int16_t #define HAL_ADC_FILTERED // Disable oversampling done in Marlin as ADC values already filtered in HAL -using FilteredADC = LPC176x::ADC; -extern uint32_t HAL_adc_reading; -[[gnu::always_inline]] inline void HAL_adc_start_conversion(const pin_t pin) { - HAL_adc_reading = FilteredADC::read(pin) >> (16 - HAL_ADC_RESOLUTION); // returns 16bit value, reduce to required bits -} -[[gnu::always_inline]] inline uint16_t HAL_adc_get_result() { - return HAL_adc_reading; -} - -#define HAL_adc_init() -#define HAL_ANALOG_SELECT(pin) FilteredADC::enable_channel(pin) -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_get_result() -#define HAL_ADC_READY() (true) +// +// Pin Mapping for M42, M43, M226 +// // Test whether the pin is valid constexpr bool VALID_PIN(const pin_t pin) { @@ -192,32 +162,101 @@ int16_t PARSED_PIN_INDEX(const char code, const int16_t dval); // P0.6 thru P0.9 are for the onboard SD card #define HAL_SENSITIVE_PINS P0_06, P0_07, P0_08, P0_09, -#define HAL_IDLETASK 1 -void HAL_idletask(); +// ------------------------ +// Defines +// ------------------------ #define PLATFORM_M997_SUPPORT void flashFirmware(const int16_t); #define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment -/** - * set_pwm_frequency - * Set the frequency of the timer corresponding to the provided pin - * All Hardware PWM pins run at the same frequency and all - * Software PWM pins run at the same frequency - */ -void set_pwm_frequency(const pin_t pin, const uint16_t f_desired); +// Default graphical display delays +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 -/** - * set_pwm_duty - * Set the PWM duty cycle of the provided pin to the provided value - * Optionally allows inverting the duty cycle [default = false] - * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] - */ -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); +// ------------------------ +// Class Utilities +// ------------------------ -// Reset source -void HAL_clear_reset_source(void); -uint8_t HAL_get_reset_source(void); +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif -void HAL_reboot(); +int freeMemory(); + +#pragma GCC diagnostic pop + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static void init(); // Called early in setup() + static void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 + + // Interrupts + static bool isr_state() { return !__get_PRIMASK(); } + static void isr_on() { __enable_irq(); } + static void isr_off() { __disable_irq(); } + + static void delay_ms(const int ms) { _delay_ms(ms); } + + // Tasks, called from idle() + static void idletask(); + + // Reset + static uint8_t get_reset_source(); + static void clear_reset_source(); + + // Free SRAM + static int freeMemory() { return ::freeMemory(); } + + // + // ADC Methods + // + + using FilteredADC = LPC176x::ADC; + + // Called by Temperature::init once at startup + static void adc_init() {} + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const pin_t pin) { + FilteredADC::enable_channel(pin); + } + + // Begin ADC sampling on the given pin + static uint32_t adc_result; + static void adc_start(const pin_t pin) { + adc_result = FilteredADC::read(pin) >> (16 - HAL_ADC_RESOLUTION); // returns 16bit value, reduce to required bits + } + + // Is the ADC ready for reading? + static bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value() { return uint16_t(adc_result); } + + /** + * Set the PWM duty cycle for the pin to the given value. + * Optionally invert the duty cycle [default = false] + * Optionally change the scale of the provided value to enable finer PWM duty control [default = 255] + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); + + /** + * Set the frequency of the timer corresponding to the provided pin + * All Hardware PWM pins will run at the same frequency and + * All Software PWM pins will run at the same frequency + */ + static void set_pwm_frequency(const pin_t pin, const uint16_t f_desired); +}; diff --git a/Marlin/src/HAL/LPC1768/Servo.h b/Marlin/src/HAL/LPC1768/Servo.h index eb12fd20f4..f02f503a67 100644 --- a/Marlin/src/HAL/LPC1768/Servo.h +++ b/Marlin/src/HAL/LPC1768/Servo.h @@ -65,4 +65,5 @@ class libServo: public Servo { } }; -#define HAL_SERVO_LIB libServo +class libServo; +typedef libServo hal_servo_t; diff --git a/Marlin/src/HAL/LPC1768/fast_pwm.cpp b/Marlin/src/HAL/LPC1768/fast_pwm.cpp index ece115aa01..6d2b1a9002 100644 --- a/Marlin/src/HAL/LPC1768/fast_pwm.cpp +++ b/Marlin/src/HAL/LPC1768/fast_pwm.cpp @@ -21,16 +21,16 @@ */ #ifdef TARGET_LPC1768 -#include "../../inc/MarlinConfigPre.h" +#include "../../inc/MarlinConfig.h" #include -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { +void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { if (!LPC176x::pin_is_valid(pin)) return; if (LPC176x::pwm_attach_pin(pin)) LPC176x::pwm_write_ratio(pin, invert ? 1.0f - (float)v / v_size : (float)v / v_size); // map 1-254 onto PWM range } -void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { +void MarlinHAL::set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { LPC176x::pwm_set_frequency(pin, f_desired); } diff --git a/Marlin/src/HAL/LPC1768/main.cpp b/Marlin/src/HAL/LPC1768/main.cpp index ef0dc42c78..419c99793f 100644 --- a/Marlin/src/HAL/LPC1768/main.cpp +++ b/Marlin/src/HAL/LPC1768/main.cpp @@ -48,7 +48,7 @@ void SysTick_Callback() { disk_timerproc(); } TERN_(POSTMORTEM_DEBUGGING, extern void install_min_serial()); -void HAL_init() { +void MarlinHAL::init() { // Init LEDs #if PIN_EXISTS(LED) @@ -130,7 +130,7 @@ void HAL_init() { const millis_t usb_timeout = millis() + 2000; while (!USB_Configuration && PENDING(millis(), usb_timeout)) { delay(50); - HAL_idletask(); + idletask(); #if PIN_EXISTS(LED) TOGGLE(LED_PIN); // Flash quickly during USB initialization #endif @@ -142,7 +142,7 @@ void HAL_init() { } // HAL idle task -void HAL_idletask() { +void MarlinHAL::idletask() { #if HAS_SHARED_MEDIA // If Marlin is using the SD card we need to lock it to prevent access from // a PC via USB. diff --git a/Marlin/src/HAL/LPC1768/timers.h b/Marlin/src/HAL/LPC1768/timers.h index 78e856db28..c6d7bc632e 100644 --- a/Marlin/src/HAL/LPC1768/timers.h +++ b/Marlin/src/HAL/LPC1768/timers.h @@ -170,4 +170,4 @@ FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { } } -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/NATIVE_SIM/HAL.h b/Marlin/src/HAL/NATIVE_SIM/HAL.h index 436b4b4daa..ee2e31fc7f 100644 --- a/Marlin/src/HAL/NATIVE_SIM/HAL.h +++ b/Marlin/src/HAL/NATIVE_SIM/HAL.h @@ -21,18 +21,10 @@ */ #pragma once -#define CPU_32_BIT -#define HAL_IDLETASK -void HAL_idletask(); - -#define F_CPU 100000000 -#define SystemCoreClock F_CPU #include #include - #undef min #undef max - #include #include "pinmapping.h" @@ -40,8 +32,6 @@ void _printf (const char *format, ...); void _putc(uint8_t c); uint8_t _getc(); -//extern "C" volatile uint32_t _millis; - //arduino: Print.h #define DEC 10 #define HEX 16 @@ -58,7 +48,23 @@ uint8_t _getc(); #include "watchdog.h" #include "serial.h" -#define SHARED_SERVOS HAS_SERVOS +// ------------------------ +// Defines +// ------------------------ + +#define CPU_32_BIT +#define SHARED_SERVOS HAS_SERVOS // Use shared/servos.cpp + +#define F_CPU 100000000 +#define SystemCoreClock F_CPU + +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 + +// ------------------------ +// Serial ports +// ------------------------ extern MSerialT serial_stream_0; extern MSerialT serial_stream_1; @@ -98,49 +104,19 @@ extern MSerialT serial_stream_3; #endif #endif - -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 - -// +// ------------------------ // Interrupts -// +// ------------------------ + #define CRITICAL_SECTION_START() #define CRITICAL_SECTION_END() -#define ISRS_ENABLED() -#define ENABLE_ISRS() -#define DISABLE_ISRS() - -inline void HAL_init() {} - -// Utility functions -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-function" -int freeMemory(); -#pragma GCC diagnostic pop +// ------------------------ // ADC +// ------------------------ + #define HAL_ADC_VREF 5.0 #define HAL_ADC_RESOLUTION 10 -#define HAL_ANALOG_SELECT(ch) HAL_adc_enable_channel(ch) -#define HAL_START_ADC(ch) HAL_adc_start_conversion(ch) -#define HAL_READ_ADC() HAL_adc_get_result() -#define HAL_ADC_READY() true - -void HAL_adc_init(); -void HAL_adc_enable_channel(const uint8_t ch); -void HAL_adc_start_conversion(const uint8_t ch); -uint16_t HAL_adc_get_result(); - -// PWM -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } - -// Reset source -inline void HAL_clear_reset_source(void) {} -inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; } - -void HAL_reboot(); /* ---------------- Delay in cycles */ @@ -159,29 +135,22 @@ constexpr inline std::size_t strlen_constexpr(const char* str) { // https://github.com/gcc-mirror/gcc/blob/5c7634a0e5f202935aa6c11b6ea953b8bf80a00a/libstdc%2B%2B-v3/include/bits/char_traits.h#L329 if (str != nullptr) { std::size_t i = 0; - while (str[i] != '\0') { - ++i; - } - + while (str[i] != '\0') ++i; return i; } - return 0; } constexpr inline int strncmp_constexpr(const char* lhs, const char* rhs, std::size_t count) { // https://github.com/gcc-mirror/gcc/blob/13b9cbfc32fe3ac4c81c4dd9c42d141c8fb95db4/libstdc%2B%2B-v3/include/bits/char_traits.h#L655 - if (lhs == nullptr || rhs == nullptr) { + if (lhs == nullptr || rhs == nullptr) return rhs != nullptr ? -1 : 1; - } - for (std::size_t i = 0; i < count; ++i) { - if (lhs[i] != rhs[i]) { + for (std::size_t i = 0; i < count; ++i) + if (lhs[i] != rhs[i]) return lhs[i] < rhs[i] ? -1 : 1; - } else if (lhs[i] == '\0') { + else if (lhs[i] == '\0') return 0; - } - } return 0; } @@ -193,14 +162,11 @@ constexpr inline const char* strstr_constexpr(const char* str, const char* targe do { char sc = {}; do { - if ((sc = *str++) == '\0') { - return nullptr; - } + if ((sc = *str++) == '\0') return nullptr; } while (sc != c); } while (strncmp_constexpr(str, target, len) != 0); --str; } - return str; } @@ -211,12 +177,87 @@ constexpr inline char* strstr_constexpr(char* str, const char* target) { do { char sc = {}; do { - if ((sc = *str++) == '\0') { - return nullptr; - } + if ((sc = *str++) == '\0') return nullptr; } while (sc != c); } while (strncmp_constexpr(str, target, len) != 0); --str; } return str; } + +// ------------------------ +// Class Utilities +// ------------------------ + +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif + +int freeMemory(); + +#pragma GCC diagnostic pop + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static void init() {} // Called early in setup() + static void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 + + // Interrupts + static bool isr_state() { return true; } + static void isr_on() {} + static void isr_off() {} + + static void delay_ms(const int ms) { _delay_ms(ms); } + + // Tasks, called from idle() + static void idletask(); + + // Reset + static constexpr uint8_t reset_reason = RST_POWER_ON; + static uint8_t get_reset_source() { return reset_reason; } + static void clear_reset_source() {} + + // Free SRAM + static int freeMemory() { return ::freeMemory(); } + + // + // ADC Methods + // + + static uint8_t active_ch; + + // Called by Temperature::init once at startup + static void adc_init(); + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const uint8_t ch); + + // Begin ADC sampling on the given channel + static void adc_start(const uint8_t ch); + + // Is the ADC ready for reading? + static bool adc_ready(); + + // The current value of the ADC register + static uint16_t adc_value(); + + /** + * Set the PWM duty cycle for the pin to the given value. + * No option to invert the duty cycle [default = false] + * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + +}; diff --git a/Marlin/src/HAL/NATIVE_SIM/timers.h b/Marlin/src/HAL/NATIVE_SIM/timers.h index cedfdb62d6..be38d583b6 100644 --- a/Marlin/src/HAL/NATIVE_SIM/timers.h +++ b/Marlin/src/HAL/NATIVE_SIM/timers.h @@ -87,5 +87,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num); void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); -#define HAL_timer_isr_prologue(T) -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_prologue(T) NOOP +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/SAMD51/HAL.cpp b/Marlin/src/HAL/SAMD51/HAL.cpp index a5febad83b..14b6a437dc 100644 --- a/Marlin/src/HAL/SAMD51/HAL.cpp +++ b/Marlin/src/HAL/SAMD51/HAL.cpp @@ -42,10 +42,6 @@ #endif #endif -// ------------------------ -// Local defines -// ------------------------ - #define GET_TEMP_0_ADC() TERN(HAS_TEMP_ADC_0, PIN_TO_ADC(TEMP_0_PIN), -1) #define GET_TEMP_1_ADC() TERN(HAS_TEMP_ADC_1, PIN_TO_ADC(TEMP_1_PIN), -1) #define GET_TEMP_2_ADC() TERN(HAS_TEMP_ADC_2, PIN_TO_ADC(TEMP_2_PIN), -1) @@ -61,17 +57,21 @@ #define GET_BOARD_ADC() TERN(HAS_TEMP_ADC_BOARD, PIN_TO_ADC(TEMP_BOARD_PIN), -1) #define GET_FILAMENT_WIDTH_ADC() TERN(FILAMENT_WIDTH_SENSOR, PIN_TO_ADC(FILWIDTH_PIN), -1) #define GET_BUTTONS_ADC() TERN(HAS_ADC_BUTTONS, PIN_TO_ADC(ADC_KEYPAD_PIN), -1) +#define GET_JOY_ADC_X() TERN(HAS_JOY_ADC_X, PIN_TO_ADC(JOY_X_PIN), -1) +#define GET_JOY_ADC_Y() TERN(HAS_JOY_ADC_Y, PIN_TO_ADC(JOY_Y_PIN), -1) +#define GET_JOY_ADC_Z() TERN(HAS_JOY_ADC_Z, PIN_TO_ADC(JOY_Z_PIN), -1) #define IS_ADC_REQUIRED(n) ( \ GET_TEMP_0_ADC() == n || GET_TEMP_1_ADC() == n || GET_TEMP_2_ADC() == n || GET_TEMP_3_ADC() == n \ || GET_TEMP_4_ADC() == n || GET_TEMP_5_ADC() == n || GET_TEMP_6_ADC() == n || GET_TEMP_7_ADC() == n \ - || GET_BED_ADC() == n \ - || GET_CHAMBER_ADC() == n \ - || GET_PROBE_ADC() == n \ - || GET_COOLER_ADC() == n \ - || GET_BOARD_ADC() == n \ + || GET_BED_ADC() == n \ + || GET_CHAMBER_ADC() == n \ + || GET_PROBE_ADC() == n \ + || GET_COOLER_ADC() == n \ + || GET_BOARD_ADC() == n \ || GET_FILAMENT_WIDTH_ADC() == n \ - || GET_BUTTONS_ADC() == n \ + || GET_BUTTONS_ADC() == n \ + || GET_JOY_ADC_X() == n || GET_JOY_ADC_Y() == n || GET_JOY_ADC_Z() == n \ ) #if IS_ADC_REQUIRED(0) @@ -91,6 +91,118 @@ #define DMA_IS_REQUIRED 1 #endif +enum ADCIndex { + #if GET_TEMP_0_ADC() == 0 + TEMP_0, + #endif + #if GET_TEMP_1_ADC() == 0 + TEMP_1, + #endif + #if GET_TEMP_2_ADC() == 0 + TEMP_2, + #endif + #if GET_TEMP_3_ADC() == 0 + TEMP_3, + #endif + #if GET_TEMP_4_ADC() == 0 + TEMP_4, + #endif + #if GET_TEMP_5_ADC() == 0 + TEMP_5, + #endif + #if GET_TEMP_6_ADC() == 0 + TEMP_6, + #endif + #if GET_TEMP_7_ADC() == 0 + TEMP_7, + #endif + #if GET_BED_ADC() == 0 + TEMP_BED, + #endif + #if GET_CHAMBER_ADC() == 0 + TEMP_CHAMBER, + #endif + #if GET_PROBE_ADC() == 0 + TEMP_PROBE, + #endif + #if GET_COOLER_ADC() == 0 + TEMP_COOLER, + #endif + #if GET_BOARD_ADC() == 0 + TEMP_BOARD, + #endif + #if GET_FILAMENT_WIDTH_ADC() == 0 + FILWIDTH, + #endif + #if GET_BUTTONS_ADC() == 0 + ADC_KEY, + #endif + #if GET_JOY_ADC_X() == 0 + JOY_X, + #endif + #if GET_JOY_ADC_Y() == 0 + JOY_Y, + #endif + #if GET_JOY_ADC_Z() == 0 + JOY_Z, + #endif + #if GET_TEMP_0_ADC() == 1 + TEMP_0, + #endif + #if GET_TEMP_1_ADC() == 1 + TEMP_1, + #endif + #if GET_TEMP_2_ADC() == 1 + TEMP_2, + #endif + #if GET_TEMP_3_ADC() == 1 + TEMP_3, + #endif + #if GET_TEMP_4_ADC() == 1 + TEMP_4, + #endif + #if GET_TEMP_5_ADC() == 1 + TEMP_5, + #endif + #if GET_TEMP_6_ADC() == 1 + TEMP_6, + #endif + #if GET_TEMP_7_ADC() == 1 + TEMP_7, + #endif + #if GET_BED_ADC() == 1 + TEMP_BED, + #endif + #if GET_CHAMBER_ADC() == 1 + TEMP_CHAMBER, + #endif + #if GET_PROBE_ADC() == 1 + TEMP_PROBE, + #endif + #if GET_COOLER_ADC() == 1 + TEMP_COOLER, + #endif + #if GET_BOARD_ADC() == 1 + TEMP_BOARD, + #endif + #if GET_FILAMENT_WIDTH_ADC() == 1 + FILWIDTH, + #endif + #if GET_BUTTONS_ADC() == 1 + ADC_KEY, + #endif + #if GET_JOY_ADC_X() == 1 + JOY_X, + #endif + #if GET_JOY_ADC_Y() == 1 + JOY_Y, + #endif + #if GET_JOY_ADC_Z() == 1 + JOY_Z, + #endif + ADC_COUNT +}; + // ------------------------ // Types // ------------------------ @@ -108,12 +220,10 @@ // Private Variables // ------------------------ -uint16_t HAL_adc_result; - #if ADC_IS_REQUIRED // Pins used by ADC inputs. Order must be ADC0 inputs first then ADC1 - const uint8_t adc_pins[] = { + static constexpr uint8_t adc_pins[ADC_COUNT] = { // ADC0 pins #if GET_TEMP_0_ADC() == 0 TEMP_0_PIN, @@ -160,6 +270,15 @@ uint16_t HAL_adc_result; #if GET_BUTTONS_ADC() == 0 ADC_KEYPAD_PIN, #endif + #if GET_JOY_ADC_X() == 0 + JOY_X_PIN, + #endif + #if GET_JOY_ADC_Y() == 0 + JOY_Y_PIN, + #endif + #if GET_JOY_ADC_Z() == 0 + JOY_Z_PIN, + #endif // ADC1 pins #if GET_TEMP_0_ADC() == 1 TEMP_0_PIN, @@ -206,15 +325,23 @@ uint16_t HAL_adc_result; #if GET_BUTTONS_ADC() == 1 ADC_KEYPAD_PIN, #endif + #if GET_JOY_ADC_X() == 1 + JOY_X_PIN, + #endif + #if GET_JOY_ADC_Y() == 1 + JOY_Y_PIN, + #endif + #if GET_JOY_ADC_Z() == 1 + JOY_Z_PIN, + #endif }; - uint16_t HAL_adc_results[COUNT(adc_pins)]; + static uint16_t adc_results[ADC_COUNT]; #if ADC0_IS_REQUIRED - Adafruit_ZeroDMA adc0DMAProgram, - adc0DMARead; + Adafruit_ZeroDMA adc0DMAProgram, adc0DMARead; - const HAL_DMA_DAC_Registers adc0_dma_regs_list[] = { + static constexpr HAL_DMA_DAC_Registers adc0_dma_regs_list[ADC_COUNT] = { #if GET_TEMP_0_ADC() == 0 { PIN_TO_INPUTCTRL(TEMP_0_PIN) }, #endif @@ -260,16 +387,24 @@ uint16_t HAL_adc_result; #if GET_BUTTONS_ADC() == 0 { PIN_TO_INPUTCTRL(ADC_KEYPAD_PIN) }, #endif + #if GET_JOY_ADC_X() == 0 + { PIN_TO_INPUTCTRL(JOY_X_PIN) }, + #endif + #if GET_JOY_ADC_Y() == 0 + { PIN_TO_INPUTCTRL(JOY_Y_PIN) }, + #endif + #if GET_JOY_ADC_Z() == 0 + { PIN_TO_INPUTCTRL(JOY_Z_PIN) }, + #endif }; #define ADC0_AINCOUNT COUNT(adc0_dma_regs_list) #endif // ADC0_IS_REQUIRED #if ADC1_IS_REQUIRED - Adafruit_ZeroDMA adc1DMAProgram, - adc1DMARead; + Adafruit_ZeroDMA adc1DMAProgram, adc1DMARead; - const HAL_DMA_DAC_Registers adc1_dma_regs_list[] = { + static constexpr HAL_DMA_DAC_Registers adc1_dma_regs_list[ADC_COUNT] = { #if GET_TEMP_0_ADC() == 1 { PIN_TO_INPUTCTRL(TEMP_0_PIN) }, #endif @@ -315,6 +450,15 @@ uint16_t HAL_adc_result; #if GET_BUTTONS_ADC() == 1 { PIN_TO_INPUTCTRL(ADC_KEYPAD_PIN) }, #endif + #if GET_JOY_ADC_X() == 1 + { PIN_TO_INPUTCTRL(JOY_X_PIN) }, + #endif + #if GET_JOY_ADC_Y() == 1 + { PIN_TO_INPUTCTRL(JOY_Y_PIN) }, + #endif + #if GET_JOY_ADC_Z() == 1 + { PIN_TO_INPUTCTRL(JOY_Z_PIN) }, + #endif }; #define ADC1_AINCOUNT COUNT(adc1_dma_regs_list) @@ -326,9 +470,10 @@ uint16_t HAL_adc_result; // Private functions // ------------------------ -#if DMA_IS_REQUIRED +void MarlinHAL::dma_init() { + + #if DMA_IS_REQUIRED - void dma_init() { DmacDescriptor *descriptor; #if ADC0_IS_REQUIRED @@ -357,7 +502,7 @@ uint16_t HAL_adc_result; if (adc0DMARead.allocate() == DMA_STATUS_OK) { adc0DMARead.addDescriptor( (void *)&ADC0->RESULT.reg, // SRC - &HAL_adc_results, // DEST + &adc_results, // DEST ADC0_AINCOUNT, // CNT DMA_BEAT_SIZE_HWORD, false, // SRCINC @@ -394,7 +539,7 @@ uint16_t HAL_adc_result; if (adc1DMARead.allocate() == DMA_STATUS_OK) { adc1DMARead.addDescriptor( (void *)&ADC1->RESULT.reg, // SRC - &HAL_adc_results[ADC0_AINCOUNT], // DEST + &adc_results[ADC0_AINCOUNT], // DEST ADC1_AINCOUNT, // CNT DMA_BEAT_SIZE_HWORD, false, // SRCINC @@ -407,16 +552,16 @@ uint16_t HAL_adc_result; #endif DMAC->PRICTRL0.bit.RRLVLEN0 = true; // Activate round robin for DMA channels required by ADCs - } -#endif // DMA_IS_REQUIRED + #endif // DMA_IS_REQUIRED +} // ------------------------ // Public functions // ------------------------ // HAL initialization task -void HAL_init() { +void MarlinHAL::init() { TERN_(DMA_IS_REQUIRED, dma_init()); #if ENABLED(SDSUPPORT) #if SD_CONNECTION_IS(ONBOARD) && PIN_EXISTS(SD_DETECT) @@ -426,17 +571,9 @@ void HAL_init() { #endif } -// HAL idle task -/* -void HAL_idletask() { -} -*/ - -void HAL_clear_reset_source() { } - #pragma push_macro("WDT") #undef WDT // Required to be able to use '.bit.WDT'. Compiler wrongly replace struct field with WDT define -uint8_t HAL_get_reset_source() { +uint8_t MarlinHAL::get_reset_source() { RSTC_RCAUSE_Type resetCause; resetCause.reg = REG_RSTC_RCAUSE; @@ -450,7 +587,7 @@ uint8_t HAL_get_reset_source() { } #pragma pop_macro("WDT") -void HAL_reboot() { NVIC_SystemReset(); } +void MarlinHAL::reboot() { NVIC_SystemReset(); } extern "C" { void * _sbrk(int incr); @@ -468,9 +605,11 @@ int freeMemory() { // ADC // ------------------------ -void HAL_adc_init() { +uint16_t MarlinHAL::adc_result; + +void MarlinHAL::adc_init() { #if ADC_IS_REQUIRED - memset(HAL_adc_results, 0xFF, sizeof(HAL_adc_results)); // Fill result with invalid values + memset(adc_results, 0xFF, sizeof(adc_results)); // Fill result with invalid values LOOP_L_N(pi, COUNT(adc_pins)) pinPeripheral(adc_pins[pi], PIO_ANALOG); @@ -505,17 +644,13 @@ void HAL_adc_init() { #endif // ADC_IS_REQUIRED } -void HAL_adc_start_conversion(const uint8_t adc_pin) { +void MarlinHAL::adc_start(const pin_t pin) { #if ADC_IS_REQUIRED - LOOP_L_N(pi, COUNT(adc_pins)) { - if (adc_pin == adc_pins[pi]) { - HAL_adc_result = HAL_adc_results[pi]; - return; - } - } + LOOP_L_N(pi, COUNT(adc_pins)) + if (pin == adc_pins[pi]) { adc_result = adc_results[pi]; return; } #endif - HAL_adc_result = 0xFFFF; + adc_result = 0xFFFF; } #endif // __SAMD51__ diff --git a/Marlin/src/HAL/SAMD51/HAL.h b/Marlin/src/HAL/SAMD51/HAL.h index c262752a8d..3b09a885a5 100644 --- a/Marlin/src/HAL/SAMD51/HAL.h +++ b/Marlin/src/HAL/SAMD51/HAL.h @@ -89,51 +89,30 @@ typedef int8_t pin_t; -#define SHARED_SERVOS HAS_SERVOS -#define HAL_SERVO_LIB Servo +#define SHARED_SERVOS HAS_SERVOS // Use shared/servos.cpp + +class Servo; +typedef Servo hal_servo_t; // // Interrupts // -#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() -#define CRITICAL_SECTION_END() if (!primask) __enable_irq() -#define ISRS_ENABLED() (!__get_PRIMASK()) -#define ENABLE_ISRS() __enable_irq() -#define DISABLE_ISRS() __disable_irq() +#define CRITICAL_SECTION_START() const bool irqon = !__get_PRIMASK(); __disable_irq() +#define CRITICAL_SECTION_END() if (irqon) __enable_irq() -#define cli() __disable_irq() // Disable interrupts -#define sei() __enable_irq() // Enable interrupts - -void HAL_clear_reset_source(); // clear reset reason -uint8_t HAL_get_reset_source(); // get reset reason - -void HAL_reboot(); +#define cli() __disable_irq() // Disable interrupts +#define sei() __enable_irq() // Enable interrupts // // ADC // -extern uint16_t HAL_adc_result; // Most recent ADC conversion - -#define HAL_ANALOG_SELECT(pin) - -void HAL_adc_init(); //#define HAL_ADC_FILTERED // Disable Marlin's oversampling. The HAL filters ADC values. #define HAL_ADC_VREF 3.3 #define HAL_ADC_RESOLUTION 10 // ... 12 -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_result -#define HAL_ADC_READY() true - -void HAL_adc_start_conversion(const uint8_t adc_pin); // -// PWM -// -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } - -// -// Pin Map +// Pin Mapping for M42, M43, M226 // #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin @@ -142,35 +121,93 @@ inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, // // Tone // -void toneInit(); void tone(const pin_t _pin, const unsigned int frequency, const unsigned long duration=0); void noTone(const pin_t _pin); -// Enable hooks into idle and setup for HAL -void HAL_init(); -/* -#define HAL_IDLETASK 1 -void HAL_idletask(); -*/ - -// -// Utility functions -// -FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } +// ------------------------ +// Class Utilities +// ------------------------ #pragma GCC diagnostic push #if GCC_VERSION <= 50000 #pragma GCC diagnostic ignored "-Wunused-function" #endif -int freeMemory(); - -#pragma GCC diagnostic pop - #ifdef __cplusplus extern "C" { #endif + char *dtostrf(double __val, signed char __width, unsigned char __prec, char *__s); + +extern "C" int freeMemory(); + #ifdef __cplusplus } #endif + +#pragma GCC diagnostic pop + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static void init(); // Called early in setup() + static void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 + + // Interrupts + static bool isr_state() { return !__get_PRIMASK(); } + static void isr_on() { sei(); } + static void isr_off() { cli(); } + + static void delay_ms(const int ms) { delay(ms); } + + // Tasks, called from idle() + static void idletask() {} + + // Reset + static uint8_t get_reset_source(); + static void clear_reset_source() {} + + // Free SRAM + static int freeMemory() { return ::freeMemory(); } + + // + // ADC Methods + // + + static uint16_t adc_result; + + // Called by Temperature::init once at startup + static void adc_init(); + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const uint8_t ch) {} + + // Begin ADC sampling on the given channel + static void adc_start(const pin_t pin); + + // Is the ADC ready for reading? + static bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value() { return adc_result; } + + /** + * Set the PWM duty cycle for the pin to the given value. + * No option to invert the duty cycle [default = false] + * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + +private: + static void dma_init(); +}; diff --git a/Marlin/src/HAL/STM32/HAL.cpp b/Marlin/src/HAL/STM32/HAL.cpp index 0920a72ec1..324a78316a 100644 --- a/Marlin/src/HAL/STM32/HAL.cpp +++ b/Marlin/src/HAL/STM32/HAL.cpp @@ -53,16 +53,18 @@ // Public Variables // ------------------------ -uint16_t HAL_adc_result; +uint16_t MarlinHAL::adc_result; // ------------------------ // Public functions // ------------------------ -TERN_(POSTMORTEM_DEBUGGING, extern void install_min_serial()); +#if ENABLED(POSTMORTEM_DEBUGGING) + extern void install_min_serial(); +#endif // HAL initialization task -void HAL_init() { +void MarlinHAL::init() { // Ensure F_CPU is a constant expression. // If the compiler breaks here, it means that delay code that should compute at compile time will not work. // So better safe than sorry here. @@ -103,7 +105,7 @@ void HAL_init() { } // HAL idle task -void HAL_idletask() { +void MarlinHAL::idletask() { #if HAS_SHARED_MEDIA // Stm32duino currently doesn't have a "loop/idle" method CDC_resume_receive(); @@ -111,9 +113,9 @@ void HAL_idletask() { #endif } -void HAL_clear_reset_source() { __HAL_RCC_CLEAR_RESET_FLAGS(); } +void MarlinHAL::reboot() { NVIC_SystemReset(); } -uint8_t HAL_get_reset_source() { +uint8_t MarlinHAL::get_reset_source() { return #ifdef RCC_FLAG_IWDGRST // Some sources may not exist... RESET != __HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) ? RST_WATCHDOG : @@ -137,24 +139,14 @@ uint8_t HAL_get_reset_source() { ; } -void HAL_reboot() { NVIC_SystemReset(); } - -void _delay_ms(const int delay_ms) { delay(delay_ms); } +void MarlinHAL::clear_reset_source() { __HAL_RCC_CLEAR_RESET_FLAGS(); } extern "C" { extern unsigned int _ebss; // end of bss section } -// ------------------------ -// ADC -// ------------------------ - -// TODO: Make sure this doesn't cause any delay -void HAL_adc_start_conversion(const uint8_t adc_pin) { HAL_adc_result = analogRead(adc_pin); } -uint16_t HAL_adc_get_result() { return HAL_adc_result; } - // Reset the system to initiate a firmware flash -WEAK void flashFirmware(const int16_t) { HAL_reboot(); } +WEAK void flashFirmware(const int16_t) { hal.reboot(); } // Maple Compatibility volatile uint32_t systick_uptime_millis = 0; diff --git a/Marlin/src/HAL/STM32/HAL.h b/Marlin/src/HAL/STM32/HAL.h index 9429bb7e7c..f5e8c1187d 100644 --- a/Marlin/src/HAL/STM32/HAL.h +++ b/Marlin/src/HAL/STM32/HAL.h @@ -44,9 +44,9 @@ #define CPU_ST7920_DELAY_2 40 #define CPU_ST7920_DELAY_3 340 -// -// Serial Ports -// +// ------------------------ +// Serial ports +// ------------------------ #ifdef USBCON #include #include "../../core/serial_hook.h" @@ -115,17 +115,14 @@ #define analogInputToDigitalPin(p) (p) #endif -#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() -#define CRITICAL_SECTION_END() if (!primask) __enable_irq() -#define ISRS_ENABLED() (!__get_PRIMASK()) -#define ENABLE_ISRS() __enable_irq() -#define DISABLE_ISRS() __disable_irq() +// +// Interrupts +// +#define CRITICAL_SECTION_START() const bool irqon = !__get_PRIMASK(); __disable_irq() +#define CRITICAL_SECTION_END() if (irqon) __enable_irq() #define cli() __disable_irq() #define sei() __enable_irq() -// On AVR this is in math.h? -#define square(x) ((x)*(x)) - // ------------------------ // Types // ------------------------ @@ -136,56 +133,14 @@ typedef int16_t pin_t; #endif -#define HAL_SERVO_LIB libServo +class libServo; +typedef libServo hal_servo_t; #define PAUSE_SERVO_OUTPUT() libServo::pause_all_servos() #define RESUME_SERVO_OUTPUT() libServo::resume_all_servos() // ------------------------ -// Public Variables -// ------------------------ - -// result of last ADC conversion -extern uint16_t HAL_adc_result; - -// ------------------------ -// Public functions -// ------------------------ - -// Memory related -#define __bss_end __bss_end__ - -// Enable hooks into setup for HAL -void HAL_init(); -#define HAL_IDLETASK 1 -void HAL_idletask(); - -// Clear reset reason -void HAL_clear_reset_source(); - -// Reset reason -uint8_t HAL_get_reset_source(); - -void HAL_reboot(); - -void _delay_ms(const int delay); - -extern "C" char* _sbrk(int incr); - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-function" - -static inline int freeMemory() { - volatile char top; - return &top - reinterpret_cast(_sbrk(0)); -} - -#pragma GCC diagnostic pop - -// // ADC -// - -#define HAL_ANALOG_SELECT(pin) pinMode(pin, INPUT) +// ------------------------ #ifdef ADC_RESOLUTION #define HAL_ADC_RESOLUTION ADC_RESOLUTION @@ -194,16 +149,10 @@ static inline int freeMemory() { #endif #define HAL_ADC_VREF 3.3 -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_result -#define HAL_ADC_READY() true - -inline void HAL_adc_init() { analogReadResolution(HAL_ADC_RESOLUTION); } - -void HAL_adc_start_conversion(const uint8_t adc_pin); - -uint16_t HAL_adc_get_result(); +// +// Pin Mapping for M42, M43, M226 +// #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) @@ -226,17 +175,92 @@ extern volatile uint32_t systick_uptime_millis; #define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment -/** - * set_pwm_frequency - * Set the frequency of the timer corresponding to the provided pin - * All Timer PWM pins run at the same frequency - */ -void set_pwm_frequency(const pin_t pin, const uint16_t f_desired); +// ------------------------ +// Class Utilities +// ------------------------ -/** - * set_pwm_duty - * Set the PWM duty cycle of the provided pin to the provided value - * Optionally allows inverting the duty cycle [default = false] - * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] - */ -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); +// Memory related +#define __bss_end __bss_end__ + +extern "C" char* _sbrk(int incr); + +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif + +static inline int freeMemory() { + volatile char top; + return &top - reinterpret_cast(_sbrk(0)); +} + +#pragma GCC diagnostic pop + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static void init(); // Called early in setup() + static void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 + + // Interrupts + static bool isr_state() { return !__get_PRIMASK(); } + static void isr_on() { sei(); } + static void isr_off() { cli(); } + + static void delay_ms(const int ms) { delay(ms); } + + // Tasks, called from idle() + static void idletask(); + + // Reset + static uint8_t get_reset_source(); + static void clear_reset_source(); + + // Free SRAM + static int freeMemory() { return ::freeMemory(); } + + // + // ADC Methods + // + + static uint16_t adc_result; + + // Called by Temperature::init once at startup + static void adc_init() { + analogReadResolution(HAL_ADC_RESOLUTION); + } + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const pin_t pin) { pinMode(pin, INPUT); } + + // Begin ADC sampling on the given channel + static void adc_start(const pin_t pin) { adc_result = analogRead(pin); } + + // Is the ADC ready for reading? + static bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value() { return adc_result; } + + /** + * Set the PWM duty cycle for the pin to the given value. + * Optionally invert the duty cycle [default = false] + * Optionally change the maximum size of the provided value to enable finer PWM duty control [default = 255] + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); + + /** + * Set the frequency of the timer for the given pin. + * All Timer PWM pins run at the same frequency. + */ + static void set_pwm_frequency(const pin_t pin, const uint16_t f_desired); + +}; diff --git a/Marlin/src/HAL/STM32/HAL_SPI.cpp b/Marlin/src/HAL/STM32/HAL_SPI.cpp index 8ee4761647..40d320d5e8 100644 --- a/Marlin/src/HAL/STM32/HAL_SPI.cpp +++ b/Marlin/src/HAL/STM32/HAL_SPI.cpp @@ -102,9 +102,9 @@ static SPISettings spiConfig; // Soft SPI receive byte uint8_t spiRec() { - DISABLE_ISRS(); // No interrupts during byte receive + hal.isr_off(); // No interrupts during byte receive const uint8_t data = HAL_SPI_STM32_SpiTransfer_Mode_3(0xFF); - ENABLE_ISRS(); // Enable interrupts + hal.isr_on(); // Enable interrupts return data; } @@ -116,9 +116,9 @@ static SPISettings spiConfig; // Soft SPI send byte void spiSend(uint8_t data) { - DISABLE_ISRS(); // No interrupts during byte send + hal.isr_off(); // No interrupts during byte send HAL_SPI_STM32_SpiTransfer_Mode_3(data); // Don't care what is received - ENABLE_ISRS(); // Enable interrupts + hal.isr_on(); // Enable interrupts } // Soft SPI send block diff --git a/Marlin/src/HAL/STM32/eeprom_flash.cpp b/Marlin/src/HAL/STM32/eeprom_flash.cpp index 252b057362..7c8cc8dd21 100644 --- a/Marlin/src/HAL/STM32/eeprom_flash.cpp +++ b/Marlin/src/HAL/STM32/eeprom_flash.cpp @@ -174,9 +174,9 @@ bool PersistentStore::access_finish() { UNLOCK_FLASH(); TERN_(HAS_PAUSE_SERVO_OUTPUT, PAUSE_SERVO_OUTPUT()); - DISABLE_ISRS(); + hal.isr_off(); status = HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError); - ENABLE_ISRS(); + hal.isr_on(); TERN_(HAS_PAUSE_SERVO_OUTPUT, RESUME_SERVO_OUTPUT()); if (status != HAL_OK) { DEBUG_ECHOLNPGM("HAL_FLASHEx_Erase=", status); @@ -229,9 +229,9 @@ bool PersistentStore::access_finish() { // output. Servo output still glitches with interrupts disabled, but recovers after the // erase. TERN_(HAS_PAUSE_SERVO_OUTPUT, PAUSE_SERVO_OUTPUT()); - DISABLE_ISRS(); + hal.isr_off(); eeprom_buffer_flush(); - ENABLE_ISRS(); + hal.isr_on(); TERN_(HAS_PAUSE_SERVO_OUTPUT, RESUME_SERVO_OUTPUT()); eeprom_data_written = false; diff --git a/Marlin/src/HAL/STM32/fast_pwm.cpp b/Marlin/src/HAL/STM32/fast_pwm.cpp index 590c9dbe3d..a0d8ecc612 100644 --- a/Marlin/src/HAL/STM32/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32/fast_pwm.cpp @@ -29,7 +29,7 @@ // Array to support sticky frequency sets per timer static uint16_t timer_freq[TIMER_NUM]; -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { +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)) { const PinName pin_name = digitalPinToPinName(pin); @@ -61,7 +61,7 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 } } -void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { +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 const PinName pin_name = digitalPinToPinName(pin); TIM_TypeDef * const Instance = (TIM_TypeDef *)pinmap_peripheral(pin_name, PinMap_PWM); // Get HAL timer instance diff --git a/Marlin/src/HAL/STM32/pinsDebug.h b/Marlin/src/HAL/STM32/pinsDebug.h index 73d850fc43..a7f022a0b6 100644 --- a/Marlin/src/HAL/STM32/pinsDebug.h +++ b/Marlin/src/HAL/STM32/pinsDebug.h @@ -115,7 +115,6 @@ const XrefInfo pin_xref[] PROGMEM = { #define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), DIGITAL_PIN_TO_ANALOG_PIN(pin)); SERIAL_ECHO(buffer); }while(0) #define PRINT_PORT(ANUM) port_print(ANUM) #define DIGITAL_PIN_TO_ANALOG_PIN(ANUM) -1 // will report analog pin number in the print port routine -#define GET_PIN_MAP_PIN_M43(Index) pin_xref[Index].Ard_num // x is a variable used to search pin_array #define GET_ARRAY_IS_DIGITAL(x) ((bool) pin_array[x].is_digital) @@ -123,6 +122,11 @@ const XrefInfo pin_xref[] PROGMEM = { #define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0) #define MULTI_NAME_PAD 33 // space needed to be pretty if not first name assigned to a pin +// +// Pin Mapping for M43 +// +#define GET_PIN_MAP_PIN_M43(Index) pin_xref[Index].Ard_num + #ifndef M43_NEVER_TOUCH #define _M43_NEVER_TOUCH(Index) (Index >= 9 && Index <= 12) // SERIAL/USB pins: PA9(TX) PA10(RX) PA11(USB_DM) PA12(USB_DP) #ifdef KILL_PIN diff --git a/Marlin/src/HAL/STM32/timers.h b/Marlin/src/HAL/STM32/timers.h index aad543229e..6828998198 100644 --- a/Marlin/src/HAL/STM32/timers.h +++ b/Marlin/src/HAL/STM32/timers.h @@ -116,5 +116,5 @@ FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_num, const ha } } -#define HAL_timer_isr_prologue(T) -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_prologue(T) NOOP +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/STM32F1/HAL.cpp b/Marlin/src/HAL/STM32F1/HAL.cpp index a0486da5b0..1d58b106ad 100644 --- a/Marlin/src/HAL/STM32F1/HAL.cpp +++ b/Marlin/src/HAL/STM32F1/HAL.cpp @@ -79,7 +79,7 @@ #define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ // ------------------------ -// Public Variables +// Serial ports // ------------------------ #if defined(SERIAL_USB) && !HAS_SD_HOST_DRIVE @@ -112,74 +112,37 @@ #endif #endif -uint16_t HAL_adc_result; - // ------------------------ -// Private Variables +// ADC // ------------------------ -STM32ADC adc(ADC1); -const uint8_t adc_pins[] = { - OPTITEM(HAS_TEMP_ADC_0, TEMP_0_PIN) - OPTITEM(HAS_TEMP_ADC_1, TEMP_1_PIN) - OPTITEM(HAS_TEMP_ADC_2, TEMP_2_PIN) - OPTITEM(HAS_TEMP_ADC_3, TEMP_3_PIN) - OPTITEM(HAS_TEMP_ADC_4, TEMP_4_PIN) - OPTITEM(HAS_TEMP_ADC_5, TEMP_5_PIN) - OPTITEM(HAS_TEMP_ADC_6, TEMP_6_PIN) - OPTITEM(HAS_TEMP_ADC_7, TEMP_7_PIN) - OPTITEM(HAS_HEATED_BED, TEMP_BED_PIN) - OPTITEM(HAS_TEMP_CHAMBER, TEMP_CHAMBER_PIN) - OPTITEM(HAS_TEMP_ADC_PROBE, TEMP_PROBE_PIN) - OPTITEM(HAS_TEMP_COOLER, TEMP_COOLER_PIN) - OPTITEM(HAS_TEMP_BOARD, TEMP_BOARD_PIN) - OPTITEM(FILAMENT_WIDTH_SENSOR, FILWIDTH_PIN) - OPTITEM(HAS_ADC_BUTTONS, ADC_KEYPAD_PIN) - OPTITEM(HAS_JOY_ADC_X, JOY_X_PIN) - OPTITEM(HAS_JOY_ADC_Y, JOY_Y_PIN) - OPTITEM(HAS_JOY_ADC_Z, JOY_Z_PIN) - OPTITEM(POWER_MONITOR_CURRENT, POWER_MONITOR_CURRENT_PIN) - OPTITEM(POWER_MONITOR_VOLTAGE, POWER_MONITOR_VOLTAGE_PIN) -}; +// Watch out for recursion here! Our pin_t is signed, so pass through to Arduino -> analogRead(uint8_t) -enum TempPinIndex : char { - OPTITEM(HAS_TEMP_ADC_0, TEMP_0) - OPTITEM(HAS_TEMP_ADC_1, TEMP_1) - OPTITEM(HAS_TEMP_ADC_2, TEMP_2) - OPTITEM(HAS_TEMP_ADC_3, TEMP_3) - OPTITEM(HAS_TEMP_ADC_4, TEMP_4) - OPTITEM(HAS_TEMP_ADC_5, TEMP_5) - OPTITEM(HAS_TEMP_ADC_6, TEMP_6) - OPTITEM(HAS_TEMP_ADC_7, TEMP_7) - OPTITEM(HAS_HEATED_BED, TEMP_BED) - OPTITEM(HAS_TEMP_CHAMBER, TEMP_CHAMBER) - OPTITEM(HAS_TEMP_ADC_PROBE, TEMP_PROBE) - OPTITEM(HAS_TEMP_COOLER, TEMP_COOLER) - OPTITEM(HAS_TEMP_BOARD, TEMP_BOARD) - OPTITEM(FILAMENT_WIDTH_SENSOR, FILWIDTH) - OPTITEM(HAS_ADC_BUTTONS, ADC_KEY) - OPTITEM(HAS_JOY_ADC_X, JOY_X) - OPTITEM(HAS_JOY_ADC_Y, JOY_Y) - OPTITEM(HAS_JOY_ADC_Z, JOY_Z) - OPTITEM(POWER_MONITOR_CURRENT, POWERMON_CURRENT) - OPTITEM(POWER_MONITOR_VOLTAGE, POWERMON_VOLTS) - ADC_PIN_COUNT -}; +uint16_t analogRead(const pin_t pin) { + const bool is_analog = _GET_MODE(pin) == GPIO_INPUT_ANALOG; + return is_analog ? analogRead(uint8_t(pin)) : 0; +} -uint16_t HAL_adc_results[ADC_PIN_COUNT]; +// Wrapper to maple unprotected analogWrite +void analogWrite(const pin_t pin, int pwm_val8) { + if (PWM_PIN(pin)) analogWrite(uint8_t(pin), pwm_val8); +} + +uint16_t MarlinHAL::adc_result; // ------------------------ // Private functions // ------------------------ + static void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { uint32_t reg_value; - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); /* only values 0..7 are used */ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07); // only values 0..7 are used - reg_value = SCB->AIRCR; /* read old register configuration */ - reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); /* clear bits to change */ + reg_value = SCB->AIRCR; // read old register configuration + reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk); // clear bits to change reg_value = (reg_value | ((uint32_t)0x5FA << SCB_AIRCR_VECTKEY_Pos) | - (PriorityGroupTmp << 8)); /* Insert write key & priority group */ + (PriorityGroupTmp << 8)); // Insert write key & priority group SCB->AIRCR = reg_value; } @@ -187,6 +150,8 @@ static void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { // Public functions // ------------------------ +void flashFirmware(const int16_t) { hal.reboot(); } + // // Leave PA11/PA12 intact if USBSerial is not used // @@ -206,7 +171,11 @@ static void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { TERN_(POSTMORTEM_DEBUGGING, extern void install_min_serial()); -void HAL_init() { +// ------------------------ +// MarlinHAL class +// ------------------------ + +void MarlinHAL::init() { NVIC_SetPriorityGrouping(0x3); #if PIN_EXISTS(LED) OUT_WRITE(LED_PIN, LOW); @@ -225,7 +194,7 @@ void HAL_init() { } // HAL idle task -void HAL_idletask() { +void MarlinHAL::idletask() { #if HAS_SHARED_MEDIA // If Marlin is using the SD card we need to lock it to prevent access from // a PC via USB. @@ -240,14 +209,7 @@ void HAL_idletask() { #endif } -void HAL_clear_reset_source() { } - -/** - * TODO: Check this and change or remove. - */ -uint8_t HAL_get_reset_source() { return RST_POWER_ON; } - -void _delay_ms(const int delay_ms) { delay(delay_ms); } +void MarlinHAL::reboot() { nvic_sys_reset(); } extern "C" { extern unsigned int _ebss; // end of bss section @@ -281,31 +243,76 @@ extern "C" { } */ -// ------------------------ +// // ADC -// ------------------------ +// + +enum ADCIndex : uint8_t { + OPTITEM(HAS_TEMP_ADC_0, TEMP_0) + OPTITEM(HAS_TEMP_ADC_1, TEMP_1) + OPTITEM(HAS_TEMP_ADC_2, TEMP_2) + OPTITEM(HAS_TEMP_ADC_3, TEMP_3) + OPTITEM(HAS_TEMP_ADC_4, TEMP_4) + OPTITEM(HAS_TEMP_ADC_5, TEMP_5) + OPTITEM(HAS_TEMP_ADC_6, TEMP_6) + OPTITEM(HAS_TEMP_ADC_7, TEMP_7) + OPTITEM(HAS_HEATED_BED, TEMP_BED) + OPTITEM(HAS_TEMP_CHAMBER, TEMP_CHAMBER) + OPTITEM(HAS_TEMP_ADC_PROBE, TEMP_PROBE) + OPTITEM(HAS_TEMP_COOLER, TEMP_COOLER) + OPTITEM(HAS_TEMP_BOARD, TEMP_BOARD) + OPTITEM(FILAMENT_WIDTH_SENSOR, FILWIDTH) + OPTITEM(HAS_ADC_BUTTONS, ADC_KEY) + OPTITEM(HAS_JOY_ADC_X, JOY_X) + OPTITEM(HAS_JOY_ADC_Y, JOY_Y) + OPTITEM(HAS_JOY_ADC_Z, JOY_Z) + OPTITEM(POWER_MONITOR_CURRENT, POWERMON_CURRENT) + OPTITEM(POWER_MONITOR_VOLTAGE, POWERMON_VOLTS) + ADC_COUNT +}; + +static uint16_t adc_results[ADC_COUNT]; + // Init the AD in continuous capture mode -void HAL_adc_init() { +void MarlinHAL::adc_init() { + static const uint8_t adc_pins[] = { + OPTITEM(HAS_TEMP_ADC_0, TEMP_0_PIN) + OPTITEM(HAS_TEMP_ADC_1, TEMP_1_PIN) + OPTITEM(HAS_TEMP_ADC_2, TEMP_2_PIN) + OPTITEM(HAS_TEMP_ADC_3, TEMP_3_PIN) + OPTITEM(HAS_TEMP_ADC_4, TEMP_4_PIN) + OPTITEM(HAS_TEMP_ADC_5, TEMP_5_PIN) + OPTITEM(HAS_TEMP_ADC_6, TEMP_6_PIN) + OPTITEM(HAS_TEMP_ADC_7, TEMP_7_PIN) + OPTITEM(HAS_HEATED_BED, TEMP_BED_PIN) + OPTITEM(HAS_TEMP_CHAMBER, TEMP_CHAMBER_PIN) + OPTITEM(HAS_TEMP_ADC_PROBE, TEMP_PROBE_PIN) + OPTITEM(HAS_TEMP_COOLER, TEMP_COOLER_PIN) + OPTITEM(HAS_TEMP_BOARD, TEMP_BOARD_PIN) + OPTITEM(FILAMENT_WIDTH_SENSOR, FILWIDTH_PIN) + OPTITEM(HAS_ADC_BUTTONS, ADC_KEYPAD_PIN) + OPTITEM(HAS_JOY_ADC_X, JOY_X_PIN) + OPTITEM(HAS_JOY_ADC_Y, JOY_Y_PIN) + OPTITEM(HAS_JOY_ADC_Z, JOY_Z_PIN) + OPTITEM(POWER_MONITOR_CURRENT, POWER_MONITOR_CURRENT_PIN) + OPTITEM(POWER_MONITOR_VOLTAGE, POWER_MONITOR_VOLTAGE_PIN) + }; + static STM32ADC adc(ADC1); // configure the ADC adc.calibrate(); - #if F_CPU > 72000000 - adc.setSampleRate(ADC_SMPR_71_5); // 71.5 ADC cycles - #else - adc.setSampleRate(ADC_SMPR_41_5); // 41.5 ADC cycles - #endif - adc.setPins((uint8_t *)adc_pins, ADC_PIN_COUNT); - adc.setDMA(HAL_adc_results, (uint16_t)ADC_PIN_COUNT, (uint32_t)(DMA_MINC_MODE | DMA_CIRC_MODE), nullptr); + adc.setSampleRate((F_CPU > 72000000) ? ADC_SMPR_71_5 : ADC_SMPR_41_5); // 71.5 or 41.5 ADC cycles + adc.setPins((uint8_t *)adc_pins, ADC_COUNT); + adc.setDMA(adc_results, uint16_t(ADC_COUNT), uint32_t(DMA_MINC_MODE | DMA_CIRC_MODE), nullptr); adc.setScanMode(); adc.setContinuous(); adc.startConversion(); } -void HAL_adc_start_conversion(const uint8_t adc_pin) { +void MarlinHAL::adc_start(const pin_t pin) { #define __TCASE(N,I) case N: pin_index = I; break; #define _TCASE(C,N,I) TERN_(C, __TCASE(N, I)) - //TEMP_PINS pin_index; - TempPinIndex pin_index; - switch (adc_pin) { + ADCIndex pin_index; + switch (pin) { default: return; _TCASE(HAS_TEMP_ADC_0, TEMP_0_PIN, TEMP_0) _TCASE(HAS_TEMP_ADC_1, TEMP_1_PIN, TEMP_1) @@ -328,23 +335,7 @@ void HAL_adc_start_conversion(const uint8_t adc_pin) { _TCASE(POWER_MONITOR_CURRENT, POWER_MONITOR_CURRENT_PIN, POWERMON_CURRENT) _TCASE(POWER_MONITOR_VOLTAGE, POWER_MONITOR_VOLTAGE_PIN, POWERMON_VOLTS) } - HAL_adc_result = HAL_adc_results[(int)pin_index] >> (12 - HAL_ADC_RESOLUTION); // shift out unused bits + adc_result = adc_results[(int)pin_index] >> (12 - HAL_ADC_RESOLUTION); // shift out unused bits } -uint16_t HAL_adc_get_result() { return HAL_adc_result; } - -uint16_t analogRead(pin_t pin) { - const bool is_analog = _GET_MODE(pin) == GPIO_INPUT_ANALOG; - return is_analog ? analogRead(uint8_t(pin)) : 0; -} - -// Wrapper to maple unprotected analogWrite -void analogWrite(pin_t pin, int pwm_val8) { - if (PWM_PIN(pin)) analogWrite(uint8_t(pin), pwm_val8); -} - -void HAL_reboot() { nvic_sys_reset(); } - -void flashFirmware(const int16_t) { HAL_reboot(); } - #endif // __STM32F1__ diff --git a/Marlin/src/HAL/STM32F1/HAL.h b/Marlin/src/HAL/STM32F1/HAL.h index a766babe15..8fbb43c602 100644 --- a/Marlin/src/HAL/STM32F1/HAL.h +++ b/Marlin/src/HAL/STM32F1/HAL.h @@ -66,6 +66,10 @@ #endif #endif +// ------------------------ +// Serial ports +// ------------------------ + #ifdef SERIAL_USB typedef ForwardSerial1Class< USBSerial > DefaultSerial1; extern DefaultSerial1 MSerial0; @@ -141,11 +145,6 @@ #endif #endif -// Set interrupt grouping for this MCU -void HAL_init(); -#define HAL_IDLETASK 1 -void HAL_idletask(); - /** * TODO: review this to return 1 for pins that are not analog input */ @@ -158,15 +157,7 @@ void HAL_idletask(); #define NO_COMPILE_TIME_PWM #endif -#define CRITICAL_SECTION_START() uint32_t primask = __get_primask(); (void)__iCliRetVal() -#define CRITICAL_SECTION_END() if (!primask) (void)__iSeiRetVal() -#define ISRS_ENABLED() (!__get_primask()) -#define ENABLE_ISRS() ((void)__iSeiRetVal()) -#define DISABLE_ISRS() ((void)__iCliRetVal()) - -// On AVR this is in math.h? -#define square(x) ((x)*(x)) - +// Reset Reason #define RST_POWER_ON 1 #define RST_EXTERNAL 2 #define RST_BROWN_OUT 4 @@ -182,60 +173,17 @@ void HAL_idletask(); typedef int8_t pin_t; // ------------------------ -// Public Variables +// Interrupts // ------------------------ -// Result of last ADC conversion -extern uint16_t HAL_adc_result; - -// ------------------------ -// Public functions -// ------------------------ - -// Disable interrupts +#define CRITICAL_SECTION_START() const bool irqon = !__get_primask(); (void)__iCliRetVal() +#define CRITICAL_SECTION_END() if (!primask) (void)__iSeiRetVal() #define cli() noInterrupts() - -// Enable interrupts #define sei() interrupts() -// Memory related -#define __bss_end __bss_end__ - -// Clear reset reason -void HAL_clear_reset_source(); - -// Reset reason -uint8_t HAL_get_reset_source(); - -void HAL_reboot(); - -void _delay_ms(const int delay); - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-function" - -/* -extern "C" { - int freeMemory(); -} -*/ - -extern "C" char* _sbrk(int incr); - -static inline int freeMemory() { - volatile char top; - return &top - _sbrk(0); -} - -#pragma GCC diagnostic pop - -// +// ------------------------ // ADC -// - -#define HAL_ANALOG_SELECT(pin) pinMode(pin, INPUT_ANALOG); - -void HAL_adc_init(); +// ------------------------ #ifdef ADC_RESOLUTION #define HAL_ADC_RESOLUTION ADC_RESOLUTION @@ -244,43 +192,115 @@ void HAL_adc_init(); #endif #define HAL_ADC_VREF 3.3 -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_result -#define HAL_ADC_READY() true -void HAL_adc_start_conversion(const uint8_t adc_pin); -uint16_t HAL_adc_get_result(); - -uint16_t analogRead(pin_t pin); // need HAL_ANALOG_SELECT() first -void analogWrite(pin_t pin, int pwm_val8); // PWM only! mul by 257 in maple!? +uint16_t analogRead(const pin_t pin); // need hal.adc_enable() first +void analogWrite(const pin_t pin, int pwm_val8); // PWM only! mul by 257 in maple!? +// +// Pin Mapping for M42, M43, M226 +// #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) -#define JTAG_DISABLE() afio_cfg_debug_ports(AFIO_DEBUG_SW_ONLY) +#define JTAG_DISABLE() afio_cfg_debug_ports(AFIO_DEBUG_SW_ONLY) #define JTAGSWD_DISABLE() afio_cfg_debug_ports(AFIO_DEBUG_NONE) #define PLATFORM_M997_SUPPORT void flashFirmware(const int16_t); +#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment #ifndef PWM_FREQUENCY #define PWM_FREQUENCY 1000 // Default PWM Frequency #endif -#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment -/** - * set_pwm_frequency - * Set the frequency of the timer corresponding to the provided pin - * All Timer PWM pins run at the same frequency - */ -void set_pwm_frequency(const pin_t pin, const uint16_t f_desired); +// ------------------------ +// Class Utilities +// ------------------------ -/** - * set_pwm_duty - * Set the PWM duty cycle of the provided pin to the provided value - * Optionally allows inverting the duty cycle [default = false] - * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] - * The timer must be pre-configured with set_pwm_frequency() if the default frequency is not desired. - */ -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); +// Memory related +#define __bss_end __bss_end__ + +void _delay_ms(const int ms); + +extern "C" char* _sbrk(int incr); + +#pragma GCC diagnostic push +#if GCC_VERSION <= 50000 + #pragma GCC diagnostic ignored "-Wunused-function" +#endif + +static inline int freeMemory() { + volatile char top; + return &top - _sbrk(0); +} + +#pragma GCC diagnostic pop + +// ------------------------ +// MarlinHAL Class +// ------------------------ + +class MarlinHAL { +public: + + // Earliest possible init, before setup() + MarlinHAL() {} + + static void init(); // Called early in setup() + static void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 + + // Interrupts + static bool isr_state() { return !__get_primask(); } + static void isr_on() { ((void)__iSeiRetVal()); } + static void isr_off() { ((void)__iCliRetVal()); } + + static void delay_ms(const int ms) { delay(ms); } + + // Tasks, called from idle() + static void idletask(); + + // Reset + static uint8_t get_reset_source() { return RST_POWER_ON; } + static void clear_reset_source() {} + + // Free SRAM + static int freeMemory() { return ::freeMemory(); } + + // + // ADC Methods + // + + static uint16_t adc_result; + + // Called by Temperature::init once at startup + static void adc_init(); + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const pin_t pin) { pinMode(pin, INPUT_ANALOG); } + + // Begin ADC sampling on the given channel + static void adc_start(const pin_t pin); + + // Is the ADC ready for reading? + static bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value() { return adc_result; } + + /** + * Set the PWM duty cycle for the pin to the given value. + * Optionally invert the duty cycle [default = false] + * Optionally change the maximum size of the provided value to enable finer PWM duty control [default = 255] + * The timer must be pre-configured with set_pwm_frequency() if the default frequency is not desired. + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false); + + /** + * Set the frequency of the timer for the given pin. + * All Timer PWM pins run at the same frequency. + */ + static void set_pwm_frequency(const pin_t pin, const uint16_t f_desired); + +}; diff --git a/Marlin/src/HAL/STM32F1/SPI.cpp b/Marlin/src/HAL/STM32F1/SPI.cpp index 8bfa3d236a..1ce2c7d3fd 100644 --- a/Marlin/src/HAL/STM32F1/SPI.cpp +++ b/Marlin/src/HAL/STM32F1/SPI.cpp @@ -91,6 +91,14 @@ static const spi_pins board_spi_pins[] __FLASH__ = { static void *_spi3_this; #endif +/** + * @brief Wait until TXE (tx empty) flag is set and BSY (busy) flag unset. + */ +static inline void waitSpiTxEnd(spi_dev *spi_d) { + while (spi_is_tx_empty(spi_d) == 0) { /* nada */ } // wait until TXE=1 + while (spi_is_busy(spi_d) != 0) { /* nada */ } // wait until BSY=0 +} + /** * Constructor */ diff --git a/Marlin/src/HAL/STM32F1/SPI.h b/Marlin/src/HAL/STM32F1/SPI.h index 92f4226301..13f4d5ed6c 100644 --- a/Marlin/src/HAL/STM32F1/SPI.h +++ b/Marlin/src/HAL/STM32F1/SPI.h @@ -414,12 +414,4 @@ private: */ }; -/** - * @brief Wait until TXE (tx empty) flag is set and BSY (busy) flag unset. - */ -static void waitSpiTxEnd(spi_dev *spi_d) { - while (spi_is_tx_empty(spi_d) == 0) { /* nada */ } // wait until TXE=1 - while (spi_is_busy(spi_d) != 0) { /* nada */ } // wait until BSY=0 -} - extern SPIClass SPI; diff --git a/Marlin/src/HAL/STM32F1/Servo.h b/Marlin/src/HAL/STM32F1/Servo.h index b6143de81d..745a1c93f0 100644 --- a/Marlin/src/HAL/STM32F1/Servo.h +++ b/Marlin/src/HAL/STM32F1/Servo.h @@ -35,7 +35,8 @@ #define SERVO_DEFAULT_MIN_ANGLE 0 #define SERVO_DEFAULT_MAX_ANGLE 180 -#define HAL_SERVO_LIB libServo +class libServo; +typedef libServo hal_servo_t; class libServo { public: diff --git a/Marlin/src/HAL/STM32F1/fast_pwm.cpp b/Marlin/src/HAL/STM32F1/fast_pwm.cpp index 13411d9af0..297804a3ac 100644 --- a/Marlin/src/HAL/STM32F1/fast_pwm.cpp +++ b/Marlin/src/HAL/STM32F1/fast_pwm.cpp @@ -21,11 +21,9 @@ */ #ifdef __STM32F1__ -#include "../../inc/MarlinConfigPre.h" +#include "../../inc/MarlinConfig.h" #include -#include "HAL.h" -#include "timers.h" #define NR_TIMERS TERN(STM32_XL_DENSITY, 14, 8) // Maple timers, 14 for STM32_XL_DENSITY (F/G chips), 8 for HIGH density (C D E) @@ -38,7 +36,7 @@ inline uint8_t timer_and_index_for_pin(const pin_t pin, timer_dev **timer_ptr) { return 0; } -void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255*/, const bool invert/*=false*/) { +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); @@ -54,7 +52,7 @@ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size/*=255 } } -void set_pwm_frequency(const pin_t pin, const uint16_t f_desired) { +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); diff --git a/Marlin/src/HAL/STM32F1/timers.h b/Marlin/src/HAL/STM32F1/timers.h index f9ab6d13d3..0cd807fc84 100644 --- a/Marlin/src/HAL/STM32F1/timers.h +++ b/Marlin/src/HAL/STM32F1/timers.h @@ -188,7 +188,7 @@ FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) { } } -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_epilogue(T) NOOP // No command is available in framework to turn off ARPE bit, which is turned on by default in libmaple. // Needed here to reset ARPE=0 for stepper timer diff --git a/Marlin/src/HAL/TEENSY31_32/HAL.cpp b/Marlin/src/HAL/TEENSY31_32/HAL.cpp index f08cf799e9..b923ab77b1 100644 --- a/Marlin/src/HAL/TEENSY31_32/HAL.cpp +++ b/Marlin/src/HAL/TEENSY31_32/HAL.cpp @@ -31,6 +31,10 @@ #include +// ------------------------ +// Serial ports +// ------------------------ + #define _IMPLEMENT_SERIAL(X) DefaultSerial##X MSerial##X(false, Serial##X) #define IMPLEMENT_SERIAL(X) _IMPLEMENT_SERIAL(X) #if WITHIN(SERIAL_PORT, 0, 3) @@ -40,45 +44,9 @@ #endif USBSerialType USBSerial(false, SerialUSB); -uint16_t HAL_adc_result; - -static const uint8_t pin2sc1a[] = { - 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 0, 19, 3, 31, // 0-13, we treat them as A0-A13 - 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 (A0-A9) - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, // 24-33 - 0+64, 19+64, 3+64, 31+64, // 34-37 (A10-A13) - 26, 22, 23, 27, 29, 30 // 38-43: temp. sensor, VREF_OUT, A14, bandgap, VREFH, VREFL. A14 isn't connected to anything in Teensy 3.0. -}; - -/* - // disable interrupts - void cli() { noInterrupts(); } - - // enable interrupts - void sei() { interrupts(); } -*/ - -void HAL_adc_init() { - analog_init(); - while (ADC0_SC3 & ADC_SC3_CAL) {}; // Wait for calibration to finish - NVIC_ENABLE_IRQ(IRQ_FTM1); -} - -void HAL_clear_reset_source() { } - -uint8_t HAL_get_reset_source() { - switch (RCM_SRS0) { - case 128: return RST_POWER_ON; break; - case 64: return RST_EXTERNAL; break; - case 32: return RST_WATCHDOG; break; - // case 8: return RST_LOSS_OF_LOCK; break; - // case 4: return RST_LOSS_OF_CLOCK; break; - // case 2: return RST_LOW_VOLTAGE; break; - } - return 0; -} - -void HAL_reboot() { _reboot_Teensyduino_(); } +// ------------------------ +// Class Utilities +// ------------------------ extern "C" { extern char __bss_end; @@ -95,8 +63,43 @@ extern "C" { } } -void HAL_adc_start_conversion(const uint8_t adc_pin) { ADC0_SC1A = pin2sc1a[adc_pin]; } +// ------------------------ +// MarlinHAL Class +// ------------------------ -uint16_t HAL_adc_get_result() { return ADC0_RA; } +void MarlinHAL::reboot() { _reboot_Teensyduino_(); } + +uint8_t MarlinHAL::get_reset_source() { + switch (RCM_SRS0) { + case 128: return RST_POWER_ON; break; + case 64: return RST_EXTERNAL; break; + case 32: return RST_WATCHDOG; break; + // case 8: return RST_LOSS_OF_LOCK; break; + // case 4: return RST_LOSS_OF_CLOCK; break; + // case 2: return RST_LOW_VOLTAGE; break; + } + return 0; +} + +// ADC + +void MarlinHAL::adc_init() { + analog_init(); + while (ADC0_SC3 & ADC_SC3_CAL) {}; // Wait for calibration to finish + NVIC_ENABLE_IRQ(IRQ_FTM1); +} + +void MarlinHAL::adc_start(const pin_t pin) { + static const uint8_t pin2sc1a[] = { + 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 0, 19, 3, 31, // 0-13, we treat them as A0-A13 + 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 (A0-A9) + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, // 24-33 + 0+64, 19+64, 3+64, 31+64, // 34-37 (A10-A13) + 26, 22, 23, 27, 29, 30 // 38-43: temp. sensor, VREF_OUT, A14, bandgap, VREFH, VREFL. A14 isn't connected to anything in Teensy 3.0. + }; + ADC0_SC1A = pin2sc1a[pin]; +} + +uint16_t MarlinHAL::adc_value() { return ADC0_RA; } #endif // __MK20DX256__ diff --git a/Marlin/src/HAL/TEENSY31_32/HAL.h b/Marlin/src/HAL/TEENSY31_32/HAL.h index 61d8b34604..50c0f411cf 100644 --- a/Marlin/src/HAL/TEENSY31_32/HAL.h +++ b/Marlin/src/HAL/TEENSY31_32/HAL.h @@ -36,12 +36,9 @@ #include -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 - -//#undef MOTHERBOARD -//#define MOTHERBOARD BOARD_TEENSY31_32 +// ------------------------ +// Defines +// ------------------------ #define IS_32BIT_TEENSY 1 #define IS_TEENSY_31_32 1 @@ -49,6 +46,14 @@ #define IS_TEENSY32 1 #endif +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 + +// ------------------------ +// Serial ports +// ------------------------ + #include "../../core/serial_hook.h" #define Serial0 Serial @@ -72,31 +77,44 @@ extern USBSerialType USBSerial; #error "The required SERIAL_PORT must be from 0 to 3, or -1 for Native USB." #endif -#define HAL_SERVO_LIB libServo +// ------------------------ +// Types +// ------------------------ + +class libServo; +typedef libServo hal_servo_t; typedef int8_t pin_t; +// ------------------------ +// Interrupts +// ------------------------ + +uint32_t __get_PRIMASK(void); // CMSIS +#define CRITICAL_SECTION_START() const bool irqon = !__get_PRIMASK(); __disable_irq() +#define CRITICAL_SECTION_END() if (irqon) __enable_irq() + +// ------------------------ +// ADC +// ------------------------ + #ifndef analogInputToDigitalPin #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1) #endif -#define CRITICAL_SECTION_START() uint32_t primask = __get_PRIMASK(); __disable_irq() -#define CRITICAL_SECTION_END() if (!primask) __enable_irq() -#define ISRS_ENABLED() (!__get_PRIMASK()) -#define ENABLE_ISRS() __enable_irq() -#define DISABLE_ISRS() __disable_irq() +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 -inline void HAL_init() {} +// +// Pin Mapping for M42, M43, M226 +// +#define GET_PIN_MAP_PIN(index) index +#define GET_PIN_MAP_INDEX(pin) pin +#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) -// Clear the reset reason -void HAL_clear_reset_source(); - -// Get the reason for the reset -uint8_t HAL_get_reset_source(); - -void HAL_reboot(); - -FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } +// ------------------------ +// Class Utilities +// ------------------------ #pragma GCC diagnostic push #if GCC_VERSION <= 50000 @@ -107,27 +125,63 @@ extern "C" int freeMemory(); #pragma GCC diagnostic pop -// ADC +// ------------------------ +// MarlinHAL Class +// ------------------------ -void HAL_adc_init(); +class MarlinHAL { +public: -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_get_result() -#define HAL_ADC_READY() true + // Earliest possible init, before setup() + MarlinHAL() {} -#define HAL_ANALOG_SELECT(pin) + static void init() {} // Called early in setup() + static void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 -void HAL_adc_start_conversion(const uint8_t adc_pin); -uint16_t HAL_adc_get_result(); + // Interrupts + static bool isr_state() { return !__get_PRIMASK(); } + static void isr_on() { __enable_irq(); } + static void isr_off() { __disable_irq(); } -// PWM + static void delay_ms(const int ms) { delay(ms); } -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + // Tasks, called from idle() + static void idletask() {} -// Pin Map + // Reset + static uint8_t get_reset_source(); + static void clear_reset_source() {} -#define GET_PIN_MAP_PIN(index) index -#define GET_PIN_MAP_INDEX(pin) pin -#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) + // Free SRAM + static int freeMemory() { return ::freeMemory(); } + + // + // ADC Methods + // + + // Called by Temperature::init once at startup + static void adc_init(); + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const pin_t ch) {} + + // Begin ADC sampling on the given channel + static void adc_start(const pin_t ch); + + // Is the ADC ready for reading? + static bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value(); + + /** + * Set the PWM duty cycle for the pin to the given value. + * No option to invert the duty cycle [default = false] + * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + +}; diff --git a/Marlin/src/HAL/TEENSY31_32/timers.h b/Marlin/src/HAL/TEENSY31_32/timers.h index 3b073d63ab..9fcbb6f232 100644 --- a/Marlin/src/HAL/TEENSY31_32/timers.h +++ b/Marlin/src/HAL/TEENSY31_32/timers.h @@ -110,4 +110,4 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); void HAL_timer_isr_prologue(const uint8_t timer_num); -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/TEENSY35_36/HAL.cpp b/Marlin/src/HAL/TEENSY35_36/HAL.cpp index 046c00b56e..54a5ad3855 100644 --- a/Marlin/src/HAL/TEENSY35_36/HAL.cpp +++ b/Marlin/src/HAL/TEENSY35_36/HAL.cpp @@ -31,6 +31,10 @@ #include +// ------------------------ +// Serial ports +// ------------------------ + #define _IMPLEMENT_SERIAL(X) DefaultSerial##X MSerial##X(false, Serial##X) #define IMPLEMENT_SERIAL(X) _IMPLEMENT_SERIAL(X) #if WITHIN(SERIAL_PORT, 0, 3) @@ -39,54 +43,9 @@ USBSerialType USBSerial(false, SerialUSB); -uint16_t HAL_adc_result, HAL_adc_select; - -static const uint8_t pin2sc1a[] = { - 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 3, 19+128, 14+128, 15+128, // 0-13 -> A0-A13 - 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 are A0-A9 - 255, 255, 255, 255, 255, 255, 255, // 24-30 are digital only - 14+128, 15+128, 17, 18, 4+128, 5+128, 6+128, 7+128, 17+128, // 31-39 are A12-A20 - 255, 255, 255, 255, 255, 255, 255, 255, 255, // 40-48 are digital only - 10+128, 11+128, // 49-50 are A23-A24 - 255, 255, 255, 255, 255, 255, 255, // 51-57 are digital only - 255, 255, 255, 255, 255, 255, // 58-63 (sd card pins) are digital only - 3, 19+128, // 64-65 are A10-A11 - 23, 23+128,// 66-67 are A21-A22 (DAC pins) - 1, 1+128, // 68-69 are A25-A26 (unused USB host port on Teensy 3.5) - 26, // 70 is Temperature Sensor - 18+128 // 71 is Vref -}; - -/* - // disable interrupts - void cli() { noInterrupts(); } - - // enable interrupts - void sei() { interrupts(); } -*/ - -void HAL_adc_init() { - analog_init(); - while (ADC0_SC3 & ADC_SC3_CAL) {}; // Wait for calibration to finish - while (ADC1_SC3 & ADC_SC3_CAL) {}; // Wait for calibration to finish - NVIC_ENABLE_IRQ(IRQ_FTM1); -} - -void HAL_clear_reset_source() { } - -uint8_t HAL_get_reset_source() { - switch (RCM_SRS0) { - case 128: return RST_POWER_ON; break; - case 64: return RST_EXTERNAL; break; - case 32: return RST_WATCHDOG; break; - // case 8: return RST_LOSS_OF_LOCK; break; - // case 4: return RST_LOSS_OF_CLOCK; break; - // case 2: return RST_LOW_VOLTAGE; break; - } - return 0; -} - -void HAL_reboot() { _reboot_Teensyduino_(); } +// ------------------------ +// Class Utilities +// ------------------------ extern "C" { extern char __bss_end; @@ -103,24 +62,69 @@ extern "C" { } } -void HAL_adc_start_conversion(const uint8_t adc_pin) { +// ------------------------ +// MarlinHAL Class +// ------------------------ + +void MarlinHAL::reboot() { _reboot_Teensyduino_(); } + +// Reset + +uint8_t MarlinHAL::get_reset_source() { + switch (RCM_SRS0) { + case 128: return RST_POWER_ON; break; + case 64: return RST_EXTERNAL; break; + case 32: return RST_WATCHDOG; break; + // case 8: return RST_LOSS_OF_LOCK; break; + // case 4: return RST_LOSS_OF_CLOCK; break; + // case 2: return RST_LOW_VOLTAGE; break; + } + return 0; +} + +// ADC + +int8_t MarlinHAL::adc_select; + +void MarlinHAL::adc_init() { + analog_init(); + while (ADC0_SC3 & ADC_SC3_CAL) { /* Wait for calibration to finish */ } + while (ADC1_SC3 & ADC_SC3_CAL) { /* Wait for calibration to finish */ } + NVIC_ENABLE_IRQ(IRQ_FTM1); +} + +void MarlinHAL::adc_start(const pin_t adc_pin) { + static const uint8_t pin2sc1a[] = { + 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, 3, 19+128, 14+128, 15+128, // 0-13 -> A0-A13 + 5, 14, 8, 9, 13, 12, 6, 7, 15, 4, // 14-23 are A0-A9 + 255, 255, 255, 255, 255, 255, 255, // 24-30 are digital only + 14+128, 15+128, 17, 18, 4+128, 5+128, 6+128, 7+128, 17+128, // 31-39 are A12-A20 + 255, 255, 255, 255, 255, 255, 255, 255, 255, // 40-48 are digital only + 10+128, 11+128, // 49-50 are A23-A24 + 255, 255, 255, 255, 255, 255, 255, // 51-57 are digital only + 255, 255, 255, 255, 255, 255, // 58-63 (sd card pins) are digital only + 3, 19+128, // 64-65 are A10-A11 + 23, 23+128,// 66-67 are A21-A22 (DAC pins) + 1, 1+128, // 68-69 are A25-A26 (unused USB host port on Teensy 3.5) + 26, // 70 is Temperature Sensor + 18+128 // 71 is Vref + }; const uint16_t pin = pin2sc1a[adc_pin]; if (pin == 0xFF) { - // Digital only - HAL_adc_select = -1; + adc_select = -1; // Digital only } else if (pin & 0x80) { - HAL_adc_select = 1; + adc_select = 1; ADC1_SC1A = pin & 0x7F; } else { - HAL_adc_select = 0; + adc_select = 0; ADC0_SC1A = pin; } } -uint16_t HAL_adc_get_result() { - switch (HAL_adc_select) { +uint16_t MarlinHAL::adc_value() { + switch (adc_select) { case 0: return ADC0_RA; case 1: return ADC1_RA; } diff --git a/Marlin/src/HAL/TEENSY35_36/HAL.h b/Marlin/src/HAL/TEENSY35_36/HAL.h index 892eb2d3c5..e4c57f8d1e 100644 --- a/Marlin/src/HAL/TEENSY35_36/HAL.h +++ b/Marlin/src/HAL/TEENSY35_36/HAL.h @@ -37,10 +37,6 @@ #include #include -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 - // ------------------------ // Defines // ------------------------ @@ -53,6 +49,17 @@ #define IS_TEENSY35 1 #endif +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 + +#undef sq +#define sq(x) ((x)*(x)) + +// ------------------------ +// Serial ports +// ------------------------ + #include "../../core/serial_hook.h" #define Serial0 Serial @@ -76,34 +83,43 @@ extern USBSerialType USBSerial; #error "SERIAL_PORT must be from 0 to 3, or -1 for Native USB." #endif -#define HAL_SERVO_LIB libServo +// ------------------------ +// Types +// ------------------------ + +class libServo; +typedef libServo hal_servo_t; typedef int8_t pin_t; +// ------------------------ +// Interrupts +// ------------------------ + +#define CRITICAL_SECTION_START() const bool irqon = !__get_primask(); __disable_irq() +#define CRITICAL_SECTION_END() if (irqon) __enable_irq() + +// ------------------------ +// ADC +// ------------------------ + #ifndef analogInputToDigitalPin #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1) #endif -#define CRITICAL_SECTION_START() uint32_t primask = __get_primask(); __disable_irq() -#define CRITICAL_SECTION_END() if (!primask) __enable_irq() -#define ISRS_ENABLED() (!__get_primask()) -#define ENABLE_ISRS() __enable_irq() -#define DISABLE_ISRS() __disable_irq() +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 -#undef sq -#define sq(x) ((x)*(x)) +// +// Pin Mapping for M42, M43, M226 +// +#define GET_PIN_MAP_PIN(index) index +#define GET_PIN_MAP_INDEX(pin) pin +#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) -inline void HAL_init() {} - -// Clear reset reason -void HAL_clear_reset_source(); - -// Reset reason -uint8_t HAL_get_reset_source(); - -void HAL_reboot(); - -FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } +// ------------------------ +// Class Utilities +// ------------------------ #pragma GCC diagnostic push #if GCC_VERSION <= 50000 @@ -114,27 +130,65 @@ extern "C" int freeMemory(); #pragma GCC diagnostic pop -// ADC +// ------------------------ +// MarlinHAL Class +// ------------------------ -void HAL_adc_init(); +class MarlinHAL { +public: -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_get_result() -#define HAL_ADC_READY() true + // Earliest possible init, before setup() + MarlinHAL() {} -#define HAL_ANALOG_SELECT(pin) + static void init() {} // Called early in setup() + static void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 -void HAL_adc_start_conversion(const uint8_t adc_pin); -uint16_t HAL_adc_get_result(); + // Interrupts + static bool isr_state() { return true; } + static void isr_on() { __enable_irq(); } + static void isr_off() { __disable_irq(); } -// PWM + static void delay_ms(const int ms) { delay(ms); } -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + // Tasks, called from idle() + static void idletask() {} -// Pin Map + // Reset + static uint8_t get_reset_source(); + static void clear_reset_source() {} -#define GET_PIN_MAP_PIN(index) index -#define GET_PIN_MAP_INDEX(pin) pin -#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) + // Free SRAM + static int freeMemory() { return ::freeMemory(); } + + // + // ADC Methods + // + + static int8_t adc_select; + + // Called by Temperature::init once at startup + static void adc_init(); + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const pin_t) {} + + // Begin ADC sampling on the given channel + static void adc_start(const pin_t pin); + + // Is the ADC ready for reading? + static bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value(); + + /** + * Set the PWM duty cycle for the pin to the given value. + * No option to invert the duty cycle [default = false] + * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + +}; diff --git a/Marlin/src/HAL/TEENSY35_36/timers.h b/Marlin/src/HAL/TEENSY35_36/timers.h index 6c342bbe0d..8af79d7392 100644 --- a/Marlin/src/HAL/TEENSY35_36/timers.h +++ b/Marlin/src/HAL/TEENSY35_36/timers.h @@ -109,4 +109,4 @@ void HAL_timer_disable_interrupt(const uint8_t timer_num); bool HAL_timer_interrupt_enabled(const uint8_t timer_num); void HAL_timer_isr_prologue(const uint8_t timer_num); -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/TEENSY40_41/HAL.cpp b/Marlin/src/HAL/TEENSY40_41/HAL.cpp index 270bee0dc9..68bd38f72f 100644 --- a/Marlin/src/HAL/TEENSY40_41/HAL.cpp +++ b/Marlin/src/HAL/TEENSY40_41/HAL.cpp @@ -33,6 +33,10 @@ #include "timers.h" #include +// ------------------------ +// Serial ports +// ------------------------ + #define _IMPLEMENT_SERIAL(X) DefaultSerial##X MSerial##X(false, Serial##X) #define IMPLEMENT_SERIAL(X) _IMPLEMENT_SERIAL(X) #if WITHIN(SERIAL_PORT, 0, 3) @@ -40,75 +44,42 @@ #endif USBSerialType USBSerial(false, SerialUSB); -uint16_t HAL_adc_result, HAL_adc_select; +// ------------------------ +// Class Utilities +// ------------------------ -static const uint8_t pin2sc1a[] = { - 0x07, // 0/A0 AD_B1_02 - 0x08, // 1/A1 AD_B1_03 - 0x0C, // 2/A2 AD_B1_07 - 0x0B, // 3/A3 AD_B1_06 - 0x06, // 4/A4 AD_B1_01 - 0x05, // 5/A5 AD_B1_00 - 0x0F, // 6/A6 AD_B1_10 - 0x00, // 7/A7 AD_B1_11 - 0x0D, // 8/A8 AD_B1_08 - 0x0E, // 9/A9 AD_B1_09 - 0x01, // 24/A10 AD_B0_12 - 0x02, // 25/A11 AD_B0_13 - 0x83, // 26/A12 AD_B1_14 - only on ADC2, 3 - 0x84, // 27/A13 AD_B1_15 - only on ADC2, 4 - 0x07, // 14/A0 AD_B1_02 - 0x08, // 15/A1 AD_B1_03 - 0x0C, // 16/A2 AD_B1_07 - 0x0B, // 17/A3 AD_B1_06 - 0x06, // 18/A4 AD_B1_01 - 0x05, // 19/A5 AD_B1_00 - 0x0F, // 20/A6 AD_B1_10 - 0x00, // 21/A7 AD_B1_11 - 0x0D, // 22/A8 AD_B1_08 - 0x0E, // 23/A9 AD_B1_09 - 0x01, // 24/A10 AD_B0_12 - 0x02, // 25/A11 AD_B0_13 - 0x83, // 26/A12 AD_B1_14 - only on ADC2, 3 - 0x84, // 27/A13 AD_B1_15 - only on ADC2, 4 - #ifdef ARDUINO_TEENSY41 - 0xFF, // 28 - 0xFF, // 29 - 0xFF, // 30 - 0xFF, // 31 - 0xFF, // 32 - 0xFF, // 33 - 0xFF, // 34 - 0xFF, // 35 - 0xFF, // 36 - 0xFF, // 37 - 0x81, // 38/A14 AD_B1_12 - only on ADC2, 1 - 0x82, // 39/A15 AD_B1_13 - only on ADC2, 2 - 0x09, // 40/A16 AD_B1_04 - 0x0A, // 41/A17 AD_B1_05 - #endif -}; +#define __bss_end _ebss -/* -// disable interrupts -void cli() { noInterrupts(); } +extern "C" { + extern char __bss_end; + extern char __heap_start; + extern void* __brkval; -// enable interrupts -void sei() { interrupts(); } -*/ - -void HAL_adc_init() { - analog_init(); - while (ADC1_GC & ADC_GC_CAL) ; - while (ADC2_GC & ADC_GC_CAL) ; + // Doesn't work on Teensy 4.x + uint32_t freeMemory() { + uint32_t free_memory; + free_memory = ((uint32_t)&free_memory) - (((uint32_t)__brkval) ?: ((uint32_t)&__bss_end)); + return free_memory; + } } -void HAL_clear_reset_source() { - uint32_t reset_source = SRC_SRSR; - SRC_SRSR = reset_source; +// ------------------------ +// FastIO +// ------------------------ + +bool is_output(pin_t pin) { + const struct digital_pin_bitband_and_config_table_struct *p; + p = digital_pin_to_info_PGM + pin; + return (*(p->reg + 1) & p->mask); } -uint8_t HAL_get_reset_source() { +// ------------------------ +// MarlinHAL Class +// ------------------------ + +void MarlinHAL::reboot() { _reboot_Teensyduino_(); } + +uint8_t MarlinHAL::get_reset_source() { switch (SRC_SRSR & 0xFF) { case 1: return RST_POWER_ON; break; case 2: return RST_SOFTWARE; break; @@ -121,57 +92,92 @@ uint8_t HAL_get_reset_source() { return 0; } -void HAL_reboot() { _reboot_Teensyduino_(); } - -#define __bss_end _ebss - -extern "C" { - extern char __bss_end; - extern char __heap_start; - extern void* __brkval; - - // Doesn't work on Teensy 4.x - uint32_t freeMemory() { - uint32_t free_memory; - if ((uint32_t)__brkval == 0) - free_memory = ((uint32_t)&free_memory) - ((uint32_t)&__bss_end); - else - free_memory = ((uint32_t)&free_memory) - ((uint32_t)__brkval); - return free_memory; - } +void MarlinHAL::clear_reset_source() { + uint32_t reset_source = SRC_SRSR; + SRC_SRSR = reset_source; } -void HAL_adc_start_conversion(const uint8_t adc_pin) { +// ADC + +int8_t MarlinHAL::adc_select; + +void MarlinHAL::adc_init() { + analog_init(); + while (ADC1_GC & ADC_GC_CAL) { /* wait */ } + while (ADC2_GC & ADC_GC_CAL) { /* wait */ } +} + +void MarlinHAL::adc_start(const pin_t adc_pin) { + static const uint8_t pin2sc1a[] = { + 0x07, // 0/A0 AD_B1_02 + 0x08, // 1/A1 AD_B1_03 + 0x0C, // 2/A2 AD_B1_07 + 0x0B, // 3/A3 AD_B1_06 + 0x06, // 4/A4 AD_B1_01 + 0x05, // 5/A5 AD_B1_00 + 0x0F, // 6/A6 AD_B1_10 + 0x00, // 7/A7 AD_B1_11 + 0x0D, // 8/A8 AD_B1_08 + 0x0E, // 9/A9 AD_B1_09 + 0x01, // 24/A10 AD_B0_12 + 0x02, // 25/A11 AD_B0_13 + 0x83, // 26/A12 AD_B1_14 - only on ADC2, 3 + 0x84, // 27/A13 AD_B1_15 - only on ADC2, 4 + 0x07, // 14/A0 AD_B1_02 + 0x08, // 15/A1 AD_B1_03 + 0x0C, // 16/A2 AD_B1_07 + 0x0B, // 17/A3 AD_B1_06 + 0x06, // 18/A4 AD_B1_01 + 0x05, // 19/A5 AD_B1_00 + 0x0F, // 20/A6 AD_B1_10 + 0x00, // 21/A7 AD_B1_11 + 0x0D, // 22/A8 AD_B1_08 + 0x0E, // 23/A9 AD_B1_09 + 0x01, // 24/A10 AD_B0_12 + 0x02, // 25/A11 AD_B0_13 + 0x83, // 26/A12 AD_B1_14 - only on ADC2, 3 + 0x84, // 27/A13 AD_B1_15 - only on ADC2, 4 + #ifdef ARDUINO_TEENSY41 + 0xFF, // 28 + 0xFF, // 29 + 0xFF, // 30 + 0xFF, // 31 + 0xFF, // 32 + 0xFF, // 33 + 0xFF, // 34 + 0xFF, // 35 + 0xFF, // 36 + 0xFF, // 37 + 0x81, // 38/A14 AD_B1_12 - only on ADC2, 1 + 0x82, // 39/A15 AD_B1_13 - only on ADC2, 2 + 0x09, // 40/A16 AD_B1_04 + 0x0A, // 41/A17 AD_B1_05 + #endif + }; const uint16_t pin = pin2sc1a[adc_pin]; if (pin == 0xFF) { - HAL_adc_select = -1; // Digital only + adc_select = -1; // Digital only } else if (pin & 0x80) { - HAL_adc_select = 1; + adc_select = 1; ADC2_HC0 = pin & 0x7F; } else { - HAL_adc_select = 0; + adc_select = 0; ADC1_HC0 = pin; } } -uint16_t HAL_adc_get_result() { - switch (HAL_adc_select) { +uint16_t MarlinHAL::adc_value() { + switch (adc_select) { case 0: - while (!(ADC1_HS & ADC_HS_COCO0)) ; // wait + while (!(ADC1_HS & ADC_HS_COCO0)) { /* wait */ } return ADC1_R0; case 1: - while (!(ADC2_HS & ADC_HS_COCO0)) ; // wait + while (!(ADC2_HS & ADC_HS_COCO0)) { /* wait */ } return ADC2_R0; } return 0; } -bool is_output(pin_t pin) { - const struct digital_pin_bitband_and_config_table_struct *p; - p = digital_pin_to_info_PGM + pin; - return (*(p->reg + 1) & p->mask); -} - #endif // __IMXRT1062__ diff --git a/Marlin/src/HAL/TEENSY40_41/HAL.h b/Marlin/src/HAL/TEENSY40_41/HAL.h index 2b730768a8..a21e652854 100644 --- a/Marlin/src/HAL/TEENSY40_41/HAL.h +++ b/Marlin/src/HAL/TEENSY40_41/HAL.h @@ -41,10 +41,6 @@ #include "../../feature/ethernet.h" #endif -#define CPU_ST7920_DELAY_1 600 -#define CPU_ST7920_DELAY_2 750 -#define CPU_ST7920_DELAY_3 750 - // ------------------------ // Defines // ------------------------ @@ -55,7 +51,23 @@ #define IS_TEENSY41 1 #endif +#define CPU_ST7920_DELAY_1 600 +#define CPU_ST7920_DELAY_2 750 +#define CPU_ST7920_DELAY_3 750 + +#undef sq +#define sq(x) ((x)*(x)) + +// Don't place string constants in PROGMEM +#undef PSTR +#define PSTR(str) ({static const char *data = (str); &data[0];}) + +// ------------------------ +// Serial ports +// ------------------------ + #include "../../core/serial_hook.h" + #define Serial0 Serial #define _DECLARE_SERIAL(X) \ typedef ForwardSerial1Class DefaultSerial##X; \ @@ -89,41 +101,47 @@ extern USBSerialType USBSerial; #endif #endif -#define HAL_SERVO_LIB libServo +// ------------------------ +// Types +// ------------------------ + +class libServo; +typedef libServo hal_servo_t; typedef int8_t pin_t; +// ------------------------ +// Interrupts +// ------------------------ + +#define CRITICAL_SECTION_START() const bool irqon = !__get_primask(); __disable_irq() +#define CRITICAL_SECTION_END() if (irqon) __enable_irq() + +// ------------------------ +// ADC +// ------------------------ + #ifndef analogInputToDigitalPin #define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1) #endif -#define CRITICAL_SECTION_START() uint32_t primask = __get_primask(); __disable_irq() -#define CRITICAL_SECTION_END() if (!primask) __enable_irq() -#define ISRS_ENABLED() (!__get_primask()) -#define ENABLE_ISRS() __enable_irq() -#define DISABLE_ISRS() __disable_irq() +#define HAL_ADC_VREF 3.3 +#define HAL_ADC_RESOLUTION 10 +#define HAL_ADC_FILTERED // turn off ADC oversampling -#undef sq -#define sq(x) ((x)*(x)) +// +// Pin Mapping for M42, M43, M226 +// +#define GET_PIN_MAP_PIN(index) index +#define GET_PIN_MAP_INDEX(pin) pin +#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) -// Don't place string constants in PROGMEM -#undef PSTR -#define PSTR(str) ({static const char *data = (str); &data[0];}) +// FastIO +bool is_output(pin_t pin); -// Enable hooks into idle and setup for HAL -#define HAL_IDLETASK 1 -FORCE_INLINE void HAL_idletask() {} -FORCE_INLINE void HAL_init() {} - -// Clear reset reason -void HAL_clear_reset_source(); - -// Reset reason -uint8_t HAL_get_reset_source(); - -void HAL_reboot(); - -FORCE_INLINE void _delay_ms(const int delay_ms) { delay(delay_ms); } +// ------------------------ +// Class Utilities +// ------------------------ #pragma GCC diagnostic push #if GCC_VERSION <= 50000 @@ -134,30 +152,65 @@ extern "C" uint32_t freeMemory(); #pragma GCC diagnostic pop -// ADC +// ------------------------ +// MarlinHAL Class +// ------------------------ -void HAL_adc_init(); +class MarlinHAL { +public: -#define HAL_ADC_VREF 3.3 -#define HAL_ADC_RESOLUTION 10 -#define HAL_ADC_FILTERED // turn off ADC oversampling -#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin) -#define HAL_READ_ADC() HAL_adc_get_result() -#define HAL_ADC_READY() true + // Earliest possible init, before setup() + MarlinHAL() {} -#define HAL_ANALOG_SELECT(pin) + static void init() {} // Called early in setup() + static void init_board() {} // Called less early in setup() + static void reboot(); // Restart the firmware from 0x0 -void HAL_adc_start_conversion(const uint8_t adc_pin); -uint16_t HAL_adc_get_result(); + // Interrupts + static bool isr_state() { return !__get_primask(); } + static void isr_on() { __enable_irq(); } + static void isr_off() { __disable_irq(); } -// PWM + static void delay_ms(const int ms) { delay(ms); } -inline void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { analogWrite(pin, v); } + // Tasks, called from idle() + static void idletask() {} -// Pin Map + // Reset + static uint8_t get_reset_source(); + static void clear_reset_source(); -#define GET_PIN_MAP_PIN(index) index -#define GET_PIN_MAP_INDEX(pin) pin -#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) + // Free SRAM + static int freeMemory() { return ::freeMemory(); } -bool is_output(pin_t pin); + // + // ADC Methods + // + + static int8_t adc_select; + + // Called by Temperature::init once at startup + static void adc_init(); + + // Called by Temperature::init for each sensor at startup + static void adc_enable(const pin_t pin) {} + + // Begin ADC sampling on the given channel + static void adc_start(const pin_t pin); + + // Is the ADC ready for reading? + static bool adc_ready() { return true; } + + // The current value of the ADC register + static uint16_t adc_value(); + + /** + * Set the PWM duty cycle for the pin to the given value. + * No option to invert the duty cycle [default = false] + * No option to change the scale of the provided value to enable finer PWM duty control [default = 255] + */ + static void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t=255, const bool=false) { + analogWrite(pin, v); + } + +}; diff --git a/Marlin/src/HAL/TEENSY40_41/timers.h b/Marlin/src/HAL/TEENSY40_41/timers.h index 81cf67f7bc..77fe0953d3 100644 --- a/Marlin/src/HAL/TEENSY40_41/timers.h +++ b/Marlin/src/HAL/TEENSY40_41/timers.h @@ -114,4 +114,4 @@ bool HAL_timer_interrupt_enabled(const uint8_t timer_num); void HAL_timer_isr_prologue(const uint8_t timer_num); //void HAL_timer_isr_epilogue(const uint8_t timer_num) {} -#define HAL_timer_isr_epilogue(T) +#define HAL_timer_isr_epilogue(T) NOOP diff --git a/Marlin/src/HAL/shared/HAL.cpp b/Marlin/src/HAL/shared/HAL.cpp new file mode 100644 index 0000000000..4d92aedd9a --- /dev/null +++ b/Marlin/src/HAL/shared/HAL.cpp @@ -0,0 +1,36 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2022 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 . + * + */ + +/** + * HAL/shared/HAL.cpp + */ + +#include "../../inc/MarlinConfig.h" + +MarlinHAL hal; + +#if ENABLED(SOFT_RESET_VIA_SERIAL) + + // Global for use by e_parser.h + void HAL_reboot() { hal.reboot(); } + +#endif diff --git a/Marlin/src/HAL/shared/HAL_spi_L6470.cpp b/Marlin/src/HAL/shared/HAL_spi_L6470.cpp index bd85dbe7bd..5d4ce89b27 100644 --- a/Marlin/src/HAL/shared/HAL_spi_L6470.cpp +++ b/Marlin/src/HAL/shared/HAL_spi_L6470.cpp @@ -92,9 +92,9 @@ uint8_t L64XX_Marlin::transfer_single(uint8_t data, int16_t ss_pin) { // First device in chain has data sent last extDigitalWrite(ss_pin, LOW); - DISABLE_ISRS(); // Disable interrupts during SPI transfer (can't allow partial command to chips) + hal.isr_off(); // Disable interrupts during SPI transfer (can't allow partial command to chips) const uint8_t data_out = L6470_SpiTransfer_Mode_3(data); - ENABLE_ISRS(); // Enable interrupts + hal.isr_on(); // Enable interrupts extDigitalWrite(ss_pin, HIGH); return data_out; @@ -107,9 +107,9 @@ uint8_t L64XX_Marlin::transfer_chain(uint8_t data, int16_t ss_pin, uint8_t chain extDigitalWrite(ss_pin, LOW); for (uint8_t i = L64XX::chain[0]; !L64xxManager.spi_abort && i >= 1; i--) { // Send data unless aborted - DISABLE_ISRS(); // Disable interrupts during SPI transfer (can't allow partial command to chips) + hal.isr_off(); // Disable interrupts during SPI transfer (can't allow partial command to chips) const uint8_t temp = L6470_SpiTransfer_Mode_3(uint8_t(i == chain_position ? data : dSPIN_NOP)); - ENABLE_ISRS(); // Enable interrupts + hal.isr_on(); // Enable interrupts if (i == chain_position) data_out = temp; } diff --git a/Marlin/src/HAL/shared/math_32bit.h b/Marlin/src/HAL/shared/math_32bit.h index 87e9e6406e..1fb233e3e8 100644 --- a/Marlin/src/HAL/shared/math_32bit.h +++ b/Marlin/src/HAL/shared/math_32bit.h @@ -26,6 +26,6 @@ /** * Math helper functions for 32 bit CPUs */ -static FORCE_INLINE uint32_t MultiU32X24toH32(uint32_t longIn1, uint32_t longIn2) { +FORCE_INLINE static uint32_t MultiU32X24toH32(uint32_t longIn1, uint32_t longIn2) { return ((uint64_t)longIn1 * longIn2 + 0x00800000) >> 24; } diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 02cf6d28d3..482ad95cac 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -790,7 +790,7 @@ void idle(bool no_stepper_sleep/*=false*/) { #endif // Run HAL idle tasks - TERN_(HAL_IDLETASK, HAL_idletask()); + hal.idletask(); // Check network connection TERN_(HAS_ETHERNET, ethernet.check()); @@ -929,7 +929,7 @@ void minkill(const bool steppers_off/*=false*/) { watchdog_refresh(); // Reboot the board - HAL_reboot(); + hal.reboot(); #else @@ -1041,7 +1041,7 @@ inline void tmc_standby_setup() { * • L64XX Stepper Drivers (SPI) * • Stepper Driver Reset: DISABLE * • TMC Stepper Drivers (SPI) - * • Run BOARD_INIT if defined + * • Run hal.init_board() for additional pins setup * • ESP WiFi * - Get the Reset Reason and report it * - Print startup messages and diagnostics @@ -1119,8 +1119,8 @@ void setup() { tmc_standby_setup(); // TMC Low Power Standby pins must be set early or they're not usable // Check startup - does nothing if bootloader sets MCUSR to 0 - const byte mcu = HAL_get_reset_source(); - HAL_clear_reset_source(); + const byte mcu = hal.get_reset_source(); + hal.clear_reset_source(); #if ENABLED(MARLIN_DEV_MODE) auto log_current_ms = [&](PGM_P const msg) { @@ -1181,23 +1181,20 @@ void setup() { JTAGSWD_RESET(); #endif - #if EITHER(DISABLE_DEBUG, DISABLE_JTAG) + // Disable any hardware debug to free up pins for IO + #if ENABLED(DISABLE_DEBUG) && defined(JTAGSWD_DISABLE) delay(10); - // Disable any hardware debug to free up pins for IO - #if ENABLED(DISABLE_DEBUG) && defined(JTAGSWD_DISABLE) - SETUP_LOG("JTAGSWD_DISABLE"); - JTAGSWD_DISABLE(); - #elif defined(JTAG_DISABLE) - SETUP_LOG("JTAG_DISABLE"); - JTAG_DISABLE(); - #else - #error "DISABLE_(DEBUG|JTAG) is not supported for the selected MCU/Board." - #endif + SETUP_LOG("JTAGSWD_DISABLE"); + JTAGSWD_DISABLE(); + #elif ENABLED(DISABLE_JTAG) && defined(JTAG_DISABLE) + delay(10); + SETUP_LOG("JTAG_DISABLE"); + JTAG_DISABLE(); #endif TERN_(DYNAMIC_VECTORTABLE, hook_cpu_exceptions()); // If supported, install Marlin exception handlers at runtime - SETUP_RUN(HAL_init()); + SETUP_RUN(hal.init()); // Init and disable SPI thermocouples; this is still needed #if TEMP_SENSOR_0_IS_MAX_TC || (TEMP_SENSOR_REDUNDANT_IS_MAX_TC && REDUNDANT_TEMP_MATCH(SOURCE, E0)) @@ -1243,19 +1240,16 @@ void setup() { SETUP_RUN(tmc_init_cs_pins()); #endif - #ifdef BOARD_INIT - SETUP_LOG("BOARD_INIT"); - BOARD_INIT(); - #endif + SETUP_RUN(hal.init_board()); SETUP_RUN(esp_wifi_init()); // Report Reset Reason - if (mcu & RST_POWER_ON) SERIAL_ECHOLNPGM(STR_POWERUP); - if (mcu & RST_EXTERNAL) SERIAL_ECHOLNPGM(STR_EXTERNAL_RESET); + if (mcu & RST_POWER_ON) SERIAL_ECHOLNPGM(STR_POWERUP); + if (mcu & RST_EXTERNAL) SERIAL_ECHOLNPGM(STR_EXTERNAL_RESET); if (mcu & RST_BROWN_OUT) SERIAL_ECHOLNPGM(STR_BROWNOUT_RESET); - if (mcu & RST_WATCHDOG) SERIAL_ECHOLNPGM(STR_WATCHDOG_RESET); - if (mcu & RST_SOFTWARE) SERIAL_ECHOLNPGM(STR_SOFTWARE_RESET); + if (mcu & RST_WATCHDOG) SERIAL_ECHOLNPGM(STR_WATCHDOG_RESET); + if (mcu & RST_SOFTWARE) SERIAL_ECHOLNPGM(STR_SOFTWARE_RESET); // Identify myself as Marlin x.x.x SERIAL_ECHOLNPGM("Marlin " SHORT_BUILD_VERSION); @@ -1266,7 +1260,7 @@ void setup() { ); #endif SERIAL_ECHO_MSG(" Compiled: " __DATE__); - SERIAL_ECHO_MSG(STR_FREE_MEMORY, freeMemory(), STR_PLANNER_BUFFER_BYTES, sizeof(block_t) * (BLOCK_BUFFER_SIZE)); + SERIAL_ECHO_MSG(STR_FREE_MEMORY, hal.freeMemory(), STR_PLANNER_BUFFER_BYTES, sizeof(block_t) * (BLOCK_BUFFER_SIZE)); // Some HAL need precise delay adjustment calibrate_delay_loop(); @@ -1542,7 +1536,7 @@ void setup() { #endif #if ENABLED(USE_WATCHDOG) - SETUP_RUN(watchdog_init()); // Reinit watchdog after HAL_get_reset_source call + SETUP_RUN(watchdog_init()); // Reinit watchdog after hal.get_reset_source call #endif #if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER) diff --git a/Marlin/src/feature/caselight.cpp b/Marlin/src/feature/caselight.cpp index 57b2d0f83c..eb580a6d62 100644 --- a/Marlin/src/feature/caselight.cpp +++ b/Marlin/src/feature/caselight.cpp @@ -79,7 +79,7 @@ void CaseLight::update(const bool sflag) { #if CASELIGHT_USES_BRIGHTNESS if (pin_is_pwm()) - set_pwm_duty(pin_t(CASE_LIGHT_PIN), ( + hal.set_pwm_duty(pin_t(CASE_LIGHT_PIN), ( #if CASE_LIGHT_MAX_PWM == 255 n10ct #else diff --git a/Marlin/src/feature/controllerfan.cpp b/Marlin/src/feature/controllerfan.cpp index 59ba665e11..f42bf52ae4 100644 --- a/Marlin/src/feature/controllerfan.cpp +++ b/Marlin/src/feature/controllerfan.cpp @@ -76,7 +76,7 @@ void ControllerFan::update() { thermalManager.soft_pwm_controller_speed = speed; #else if (PWM_PIN(CONTROLLER_FAN_PIN)) - set_pwm_duty(pin_t(CONTROLLER_FAN_PIN), speed); + hal.set_pwm_duty(pin_t(CONTROLLER_FAN_PIN), speed); else WRITE(CONTROLLER_FAN_PIN, speed > 0); #endif diff --git a/Marlin/src/feature/e_parser.h b/Marlin/src/feature/e_parser.h index 1dee0cf755..fda1ba144b 100644 --- a/Marlin/src/feature/e_parser.h +++ b/Marlin/src/feature/e_parser.h @@ -41,7 +41,9 @@ extern bool wait_for_user, wait_for_heatup; void quickresume_stepper(); #endif -void HAL_reboot(); +#if ENABLED(SOFT_RESET_VIA_SERIAL) + void HAL_reboot(); +#endif class EmergencyParser { diff --git a/Marlin/src/feature/leds/leds.cpp b/Marlin/src/feature/leds/leds.cpp index 715f51f442..2a53a7c884 100644 --- a/Marlin/src/feature/leds/leds.cpp +++ b/Marlin/src/feature/leds/leds.cpp @@ -129,11 +129,11 @@ void LEDLights::set_color(const LEDColor &incol // This variant uses 3-4 separate pins for the RGB(W) components. // If the pins can do PWM then their intensity will be set. - #define _UPDATE_RGBW(C,c) do { \ - if (PWM_PIN(RGB_LED_##C##_PIN)) \ - set_pwm_duty(pin_t(RGB_LED_##C##_PIN), c); \ - else \ - WRITE(RGB_LED_##C##_PIN, c ? HIGH : LOW); \ + #define _UPDATE_RGBW(C,c) do { \ + if (PWM_PIN(RGB_LED_##C##_PIN)) \ + hal.set_pwm_duty(pin_t(RGB_LED_##C##_PIN), c); \ + else \ + WRITE(RGB_LED_##C##_PIN, c ? HIGH : LOW); \ }while(0) #define UPDATE_RGBW(C,c) _UPDATE_RGBW(C, TERN1(CASE_LIGHT_USE_RGB_LED, caselight.on) ? incol.c : 0) UPDATE_RGBW(R,r); UPDATE_RGBW(G,g); UPDATE_RGBW(B,b); diff --git a/Marlin/src/feature/spindle_laser.cpp b/Marlin/src/feature/spindle_laser.cpp index 9ca7cb948e..52bb471b0f 100644 --- a/Marlin/src/feature/spindle_laser.cpp +++ b/Marlin/src/feature/spindle_laser.cpp @@ -66,10 +66,10 @@ void SpindleLaser::init() { #endif #if ENABLED(SPINDLE_LASER_USE_PWM) SET_PWM(SPINDLE_LASER_PWM_PIN); - set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // Set to lowest speed + hal.set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // Set to lowest speed #endif #if ENABLED(HAL_CAN_SET_PWM_FREQ) && SPINDLE_LASER_FREQUENCY - set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_FREQUENCY); + hal.set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_FREQUENCY); TERN_(MARLIN_DEV_MODE, frequency = SPINDLE_LASER_FREQUENCY); #endif #if ENABLED(AIR_EVACUATION) @@ -89,9 +89,9 @@ void SpindleLaser::init() { */ void SpindleLaser::_set_ocr(const uint8_t ocr) { #if ENABLED(HAL_CAN_SET_PWM_FREQ) && SPINDLE_LASER_FREQUENCY - set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), TERN(MARLIN_DEV_MODE, frequency, SPINDLE_LASER_FREQUENCY)); + hal.set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), TERN(MARLIN_DEV_MODE, frequency, SPINDLE_LASER_FREQUENCY)); #endif - set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF); + hal.set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF); } void SpindleLaser::set_ocr(const uint8_t ocr) { diff --git a/Marlin/src/feature/spindle_laser.h b/Marlin/src/feature/spindle_laser.h index 89e11fca08..e948d2d37b 100644 --- a/Marlin/src/feature/spindle_laser.h +++ b/Marlin/src/feature/spindle_laser.h @@ -103,7 +103,7 @@ public: static void init(); #if ENABLED(MARLIN_DEV_MODE) - static void refresh_frequency() { set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), frequency); } + static void refresh_frequency() { hal.set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), frequency); } #endif // Modifying this function should update everywhere diff --git a/Marlin/src/gcode/control/M42.cpp b/Marlin/src/gcode/control/M42.cpp index 8de3226924..1b3a29d100 100644 --- a/Marlin/src/gcode/control/M42.cpp +++ b/Marlin/src/gcode/control/M42.cpp @@ -126,10 +126,10 @@ void GcodeSuite::M42() { extDigitalWrite(pin, pin_status); #ifdef ARDUINO_ARCH_STM32 - // A simple I/O will be set to 0 by set_pwm_duty() + // A simple I/O will be set to 0 by hal.set_pwm_duty() if (pin_status <= 1 && !PWM_PIN(pin)) return; #endif - set_pwm_duty(pin, pin_status); + hal.set_pwm_duty(pin, pin_status); } #endif // DIRECT_PIN_CONTROL diff --git a/Marlin/src/gcode/gcode_d.cpp b/Marlin/src/gcode/gcode_d.cpp index 204455e65e..2dd1de0001 100644 --- a/Marlin/src/gcode/gcode_d.cpp +++ b/Marlin/src/gcode/gcode_d.cpp @@ -38,7 +38,7 @@ #include "../sd/cardreader.h" #include "../MarlinCore.h" // for kill -extern void dump_delay_accuracy_check(); +void dump_delay_accuracy_check(); /** * Dn: G-code for development and testing @@ -54,7 +54,7 @@ void GcodeSuite::D(const int16_t dcode) { for (;;) { /* loop forever (watchdog reset) */ } case 0: - HAL_reboot(); + hal.reboot(); break; case 10: @@ -74,7 +74,7 @@ void GcodeSuite::D(const int16_t dcode) { settings.reset(); settings.save(); #endif - HAL_reboot(); + hal.reboot(); } break; case 2: { // D2 Read / Write SRAM @@ -189,12 +189,12 @@ void GcodeSuite::D(const int16_t dcode) { SERIAL_ECHOLNPGM("(USE_WATCHDOG " TERN(USE_WATCHDOG, "ENABLED", "DISABLED") ")"); thermalManager.disable_all_heaters(); delay(1000); // Allow time to print - DISABLE_ISRS(); + hal.isr_off(); // Use a low-level delay that does not rely on interrupts to function // Do not spin forever, to avoid thermal risks if heaters are enabled and // watchdog does not work. for (int i = 10000; i--;) DELAY_US(1000UL); - ENABLE_ISRS(); + hal.isr_on(); SERIAL_ECHOLNPGM("FAILURE: Watchdog did not trigger board reset."); } break; diff --git a/Marlin/src/inc/MarlinConfig.h b/Marlin/src/inc/MarlinConfig.h index 8fdb4b9bae..505a0682eb 100644 --- a/Marlin/src/inc/MarlinConfig.h +++ b/Marlin/src/inc/MarlinConfig.h @@ -29,6 +29,7 @@ #ifndef __MARLIN_DEPS__ #include "../HAL/HAL.h" + extern MarlinHAL hal; #endif #include "../pins/pins.h" diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 8f6843eee9..9c74ce32db 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -3891,3 +3891,10 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #undef _TEST_PWM #undef _LINEAR_AXES_STR #undef _LOGICAL_AXES_STR + +// JTAG support in the HAL +#if ENABLED(DISABLE_DEBUG) && !defined(JTAGSWD_DISABLE) + #error "DISABLE_DEBUG is not supported for the selected MCU/Board." +#elif ENABLED(DISABLE_JTAG) && !defined(JTAG_DISABLE) + #error "DISABLE_JTAG is not supported for the selected MCU/Board." +#endif diff --git a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp index aafc4d8803..fc862e5439 100644 --- a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp +++ b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp @@ -282,9 +282,9 @@ void MarlinUI::init_lcd() { #if PIN_EXISTS(LCD_RESET) // Perform a clean hardware reset with needed delays OUT_WRITE(LCD_RESET_PIN, LOW); - _delay_ms(5); + hal.delay_ms(5); WRITE(LCD_RESET_PIN, HIGH); - _delay_ms(5); + hal.delay_ms(5); u8g.begin(); #endif diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 4d7f38171d..d65fa9ec79 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -2206,7 +2206,7 @@ void RebootPrinter() { thermalManager.disable_all_heaters(); planner.finish_and_disable(); DWIN_RebootScreen(); - HAL_reboot(); + hal.reboot(); } void Goto_Info_Menu(){ diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index bce27dc88a..3dd6d8aeb6 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -1348,7 +1348,7 @@ void Endstops::update() { ES_REPORT_CHANGE(K_MAX); #endif SERIAL_ECHOLNPGM("\n"); - set_pwm_duty(pin_t(LED_PIN), local_LED_status); + hal.set_pwm_duty(pin_t(LED_PIN), local_LED_status); local_LED_status ^= 255; old_live_state_local = live_state_local; } diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index f9ddcf8f13..d2e11f62fe 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -703,7 +703,7 @@ void Planner::init() { // All other 32-bit MPUs can easily do inverse using hardware division, // so we don't need to reduce precision or to use assembly language at all. // This routine, for all other archs, returns 0x100000000 / d ~= 0xFFFFFFFF / d - static FORCE_INLINE uint32_t get_period_inverse(const uint32_t d) { + FORCE_INLINE static uint32_t get_period_inverse(const uint32_t d) { return d ? 0xFFFFFFFF / d : 0xFFFFFFFF; } #endif @@ -1260,7 +1260,7 @@ void Planner::recalculate() { #if ENABLED(FAN_SOFT_PWM) #define _FAN_SET(F) thermalManager.soft_pwm_amount_fan[F] = CALC_FAN_SPEED(F); #else - #define _FAN_SET(F) set_pwm_duty(pin_t(FAN##F##_PIN), CALC_FAN_SPEED(F)); + #define _FAN_SET(F) hal.set_pwm_duty(pin_t(FAN##F##_PIN), CALC_FAN_SPEED(F)); #endif #define FAN_SET(F) do{ kickstart_fan(fan_speed, ms, F); _FAN_SET(F); }while(0) @@ -1397,8 +1397,8 @@ void Planner::check_axes_activity() { TERN_(AUTOTEMP, autotemp_task()); #if ENABLED(BARICUDA) - TERN_(HAS_HEATER_1, set_pwm_duty(pin_t(HEATER_1_PIN), tail_valve_pressure)); - TERN_(HAS_HEATER_2, set_pwm_duty(pin_t(HEATER_2_PIN), tail_e_to_p_pressure)); + TERN_(HAS_HEATER_1, hal.set_pwm_duty(pin_t(HEATER_1_PIN), tail_valve_pressure)); + TERN_(HAS_HEATER_2, hal.set_pwm_duty(pin_t(HEATER_2_PIN), tail_e_to_p_pressure)); #endif } diff --git a/Marlin/src/module/servo.cpp b/Marlin/src/module/servo.cpp index 231efe84e1..96d5ba9da8 100644 --- a/Marlin/src/module/servo.cpp +++ b/Marlin/src/module/servo.cpp @@ -30,7 +30,7 @@ #include "servo.h" -HAL_SERVO_LIB servo[NUM_SERVOS]; +hal_servo_t servo[NUM_SERVOS]; #if ENABLED(EDITABLE_SERVO_ANGLES) uint16_t servo_angles[NUM_SERVOS][2]; diff --git a/Marlin/src/module/servo.h b/Marlin/src/module/servo.h index 73dbbdddb7..cd55a317a2 100644 --- a/Marlin/src/module/servo.h +++ b/Marlin/src/module/servo.h @@ -112,5 +112,5 @@ #define MOVE_SERVO(I, P) servo[I].move(P) #define DETACH_SERVO(I) servo[I].detach() -extern HAL_SERVO_LIB servo[NUM_SERVOS]; +extern hal_servo_t servo[NUM_SERVOS]; void servo_init(); diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 5da06a5e50..a96ed3a651 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -1474,7 +1474,7 @@ void Stepper::isr() { #ifndef __AVR__ // Disable interrupts, to avoid ISR preemption while we reprogram the period // (AVR enters the ISR with global interrupts disabled, so no need to do it here) - DISABLE_ISRS(); + hal.isr_off(); #endif // Program timer compare for the maximum period, so it does NOT @@ -1492,7 +1492,7 @@ void Stepper::isr() { hal_timer_t min_ticks; do { // Enable ISRs to reduce USART processing latency - ENABLE_ISRS(); + hal.isr_on(); if (!nextMainISR) pulse_phase_isr(); // 0 = Do coordinated axes Stepper pulses @@ -1576,7 +1576,7 @@ void Stepper::isr() { * is less than the current count due to something preempting between the * read and the write of the new period value). */ - DISABLE_ISRS(); + hal.isr_off(); /** * Get the current tick value + margin @@ -1611,7 +1611,7 @@ void Stepper::isr() { HAL_timer_set_compare(MF_TIMER_STEP, hal_timer_t(next_isr_ticks)); // Don't forget to finally reenable interrupts - ENABLE_ISRS(); + hal.isr_on(); } #if MINIMUM_STEPPER_PULSE || MAXIMUM_STEPPER_RATE @@ -3260,33 +3260,33 @@ void Stepper::report_positions() { #elif HAS_MOTOR_CURRENT_PWM - #define _WRITE_CURRENT_PWM_DUTY(P) set_pwm_duty(pin_t(MOTOR_CURRENT_PWM_## P ##_PIN), 255L * current / (MOTOR_CURRENT_PWM_RANGE)) + #define _WRITE_CURRENT_PWM(P) hal.set_pwm_duty(pin_t(MOTOR_CURRENT_PWM_## P ##_PIN), 255L * current / (MOTOR_CURRENT_PWM_RANGE)) switch (driver) { case 0: #if PIN_EXISTS(MOTOR_CURRENT_PWM_X) - _WRITE_CURRENT_PWM_DUTY(X); + _WRITE_CURRENT_PWM(X); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_Y) - _WRITE_CURRENT_PWM_DUTY(Y); + _WRITE_CURRENT_PWM(Y); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_XY) - _WRITE_CURRENT_PWM_DUTY(XY); + _WRITE_CURRENT_PWM(XY); #endif break; case 1: #if PIN_EXISTS(MOTOR_CURRENT_PWM_Z) - _WRITE_CURRENT_PWM_DUTY(Z); + _WRITE_CURRENT_PWM(Z); #endif break; case 2: #if PIN_EXISTS(MOTOR_CURRENT_PWM_E) - _WRITE_CURRENT_PWM_DUTY(E); + _WRITE_CURRENT_PWM(E); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_E0) - _WRITE_CURRENT_PWM_DUTY(E0); + _WRITE_CURRENT_PWM(E0); #endif #if PIN_EXISTS(MOTOR_CURRENT_PWM_E1) - _WRITE_CURRENT_PWM_DUTY(E1); + _WRITE_CURRENT_PWM(E1); #endif break; } @@ -3308,7 +3308,7 @@ void Stepper::report_positions() { #ifdef __SAM3X8E__ #define _RESET_CURRENT_PWM_FREQ(P) NOOP #else - #define _RESET_CURRENT_PWM_FREQ(P) set_pwm_frequency(pin_t(P), MOTOR_CURRENT_PWM_FREQUENCY) + #define _RESET_CURRENT_PWM_FREQ(P) hal.set_pwm_frequency(pin_t(P), MOTOR_CURRENT_PWM_FREQUENCY) #endif #define INIT_CURRENT_PWM(P) do{ SET_PWM(MOTOR_CURRENT_PWM_## P ##_PIN); _RESET_CURRENT_PWM_FREQ(MOTOR_CURRENT_PWM_## P ##_PIN); }while(0) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 4ccd984b0d..19501bce6e 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -327,7 +327,7 @@ PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED); #define _INIT_FAN_PIN(P) do{ if (PWM_PIN(P)) SET_PWM(P); else _INIT_SOFT_FAN(P); }while(0) #endif #if ENABLED(FAST_PWM_FAN) - #define SET_FAST_PWM_FREQ(P) set_pwm_frequency(P, FAST_PWM_FAN_FREQUENCY) + #define SET_FAST_PWM_FREQ(P) hal.set_pwm_frequency(pin_t(P), FAST_PWM_FAN_FREQUENCY) #else #define SET_FAST_PWM_FREQ(P) NOOP #endif @@ -818,7 +818,7 @@ volatile bool Temperature::raw_temps_ready = false; } // Run HAL idle tasks - TERN_(HAL_IDLETASK, HAL_idletask()); + hal.idletask(); // Run UI update TERN(HAS_DWIN_E3V2_BASIC, DWIN_Update(), ui.update()); @@ -907,7 +907,7 @@ int16_t Temperature::getHeaterPower(const heater_id_t heater_id) { #define _UPDATE_AUTO_FAN(P,D,A) do{ \ if (PWM_PIN(P##_AUTO_FAN_PIN) && A < 255) \ - set_pwm_duty(pin_t(P##_AUTO_FAN_PIN), D ? A : 0); \ + hal.set_pwm_duty(pin_t(P##_AUTO_FAN_PIN), D ? A : 0); \ else \ WRITE(P##_AUTO_FAN_PIN, D); \ }while(0) @@ -2321,74 +2321,33 @@ void Temperature::init() { TERN_(HAS_MAXTC_SW_SPI, max_tc_spi.init()); - HAL_adc_init(); + hal.adc_init(); + + TERN_(HAS_TEMP_ADC_0, hal.adc_enable(TEMP_0_PIN)); + TERN_(HAS_TEMP_ADC_1, hal.adc_enable(TEMP_1_PIN)); + TERN_(HAS_TEMP_ADC_2, hal.adc_enable(TEMP_2_PIN)); + TERN_(HAS_TEMP_ADC_3, hal.adc_enable(TEMP_3_PIN)); + TERN_(HAS_TEMP_ADC_4, hal.adc_enable(TEMP_4_PIN)); + TERN_(HAS_TEMP_ADC_5, hal.adc_enable(TEMP_5_PIN)); + TERN_(HAS_TEMP_ADC_6, hal.adc_enable(TEMP_6_PIN)); + TERN_(HAS_TEMP_ADC_7, hal.adc_enable(TEMP_7_PIN)); + TERN_(HAS_JOY_ADC_X, hal.adc_enable(JOY_X_PIN)); + TERN_(HAS_JOY_ADC_Y, hal.adc_enable(JOY_Y_PIN)); + TERN_(HAS_JOY_ADC_Z, hal.adc_enable(JOY_Z_PIN)); + TERN_(HAS_TEMP_ADC_BED, hal.adc_enable(TEMP_BED_PIN)); + TERN_(HAS_TEMP_ADC_CHAMBER, hal.adc_enable(TEMP_CHAMBER_PIN)); + TERN_(HAS_TEMP_ADC_PROBE, hal.adc_enable(TEMP_PROBE_PIN)); + TERN_(HAS_TEMP_ADC_COOLER, hal.adc_enable(TEMP_COOLER_PIN)); + TERN_(HAS_TEMP_ADC_BOARD, hal.adc_enable(TEMP_BOARD_PIN)); + TERN_(HAS_TEMP_ADC_REDUNDANT, hal.adc_enable(TEMP_REDUNDANT_PIN)); + TERN_(FILAMENT_WIDTH_SENSOR, hal.adc_enable(FILWIDTH_PIN)); + TERN_(HAS_ADC_BUTTONS, hal.adc_enable(ADC_KEYPAD_PIN)); + TERN_(POWER_MONITOR_CURRENT, hal.adc_enable(POWER_MONITOR_CURRENT_PIN)); + TERN_(POWER_MONITOR_VOLTAGE, hal.adc_enable(POWER_MONITOR_VOLTAGE_PIN)); - #if HAS_TEMP_ADC_0 - HAL_ANALOG_SELECT(TEMP_0_PIN); - #endif - #if HAS_TEMP_ADC_1 - HAL_ANALOG_SELECT(TEMP_1_PIN); - #endif - #if HAS_TEMP_ADC_2 - HAL_ANALOG_SELECT(TEMP_2_PIN); - #endif - #if HAS_TEMP_ADC_3 - HAL_ANALOG_SELECT(TEMP_3_PIN); - #endif - #if HAS_TEMP_ADC_4 - HAL_ANALOG_SELECT(TEMP_4_PIN); - #endif - #if HAS_TEMP_ADC_5 - HAL_ANALOG_SELECT(TEMP_5_PIN); - #endif - #if HAS_TEMP_ADC_6 - HAL_ANALOG_SELECT(TEMP_6_PIN); - #endif - #if HAS_TEMP_ADC_7 - HAL_ANALOG_SELECT(TEMP_7_PIN); - #endif - #if HAS_JOY_ADC_X - HAL_ANALOG_SELECT(JOY_X_PIN); - #endif - #if HAS_JOY_ADC_Y - HAL_ANALOG_SELECT(JOY_Y_PIN); - #endif - #if HAS_JOY_ADC_Z - HAL_ANALOG_SELECT(JOY_Z_PIN); - #endif #if HAS_JOY_ADC_EN SET_INPUT_PULLUP(JOY_EN_PIN); #endif - #if HAS_TEMP_ADC_BED - HAL_ANALOG_SELECT(TEMP_BED_PIN); - #endif - #if HAS_TEMP_ADC_CHAMBER - HAL_ANALOG_SELECT(TEMP_CHAMBER_PIN); - #endif - #if HAS_TEMP_ADC_PROBE - HAL_ANALOG_SELECT(TEMP_PROBE_PIN); - #endif - #if HAS_TEMP_ADC_COOLER - HAL_ANALOG_SELECT(TEMP_COOLER_PIN); - #endif - #if HAS_TEMP_ADC_BOARD - HAL_ANALOG_SELECT(TEMP_BOARD_PIN); - #endif - #if HAS_TEMP_ADC_REDUNDANT - HAL_ANALOG_SELECT(TEMP_REDUNDANT_PIN); - #endif - #if ENABLED(FILAMENT_WIDTH_SENSOR) - HAL_ANALOG_SELECT(FILWIDTH_PIN); - #endif - #if HAS_ADC_BUTTONS - HAL_ANALOG_SELECT(ADC_KEYPAD_PIN); - #endif - #if ENABLED(POWER_MONITOR_CURRENT) - HAL_ANALOG_SELECT(POWER_MONITOR_CURRENT_PIN); - #endif - #if ENABLED(POWER_MONITOR_VOLTAGE) - HAL_ANALOG_SELECT(POWER_MONITOR_VOLTAGE_PIN); - #endif HAL_timer_start(MF_TIMER_TEMP, TEMP_TIMER_FREQUENCY); ENABLE_TEMPERATURE_INTERRUPT(); @@ -3364,8 +3323,8 @@ void Temperature::isr() { * This gives each ADC 0.9765ms to charge up. */ #define ACCUMULATE_ADC(obj) do{ \ - if (!HAL_ADC_READY()) next_sensor_state = adc_sensor_state; \ - else obj.sample(HAL_READ_ADC()); \ + if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; \ + else obj.sample(hal.adc_value()); \ }while(0) ADCSensorState next_sensor_state = adc_sensor_state < SensorsReady ? (ADCSensorState)(int(adc_sensor_state) + 1) : StartSampling; @@ -3397,115 +3356,115 @@ void Temperature::isr() { break; #if HAS_TEMP_ADC_0 - case PrepareTemp_0: HAL_START_ADC(TEMP_0_PIN); break; + case PrepareTemp_0: hal.adc_start(TEMP_0_PIN); break; case MeasureTemp_0: ACCUMULATE_ADC(temp_hotend[0]); break; #endif #if HAS_TEMP_ADC_BED - case PrepareTemp_BED: HAL_START_ADC(TEMP_BED_PIN); break; + case PrepareTemp_BED: hal.adc_start(TEMP_BED_PIN); break; case MeasureTemp_BED: ACCUMULATE_ADC(temp_bed); break; #endif #if HAS_TEMP_ADC_CHAMBER - case PrepareTemp_CHAMBER: HAL_START_ADC(TEMP_CHAMBER_PIN); break; + case PrepareTemp_CHAMBER: hal.adc_start(TEMP_CHAMBER_PIN); break; case MeasureTemp_CHAMBER: ACCUMULATE_ADC(temp_chamber); break; #endif #if HAS_TEMP_ADC_COOLER - case PrepareTemp_COOLER: HAL_START_ADC(TEMP_COOLER_PIN); break; + case PrepareTemp_COOLER: hal.adc_start(TEMP_COOLER_PIN); break; case MeasureTemp_COOLER: ACCUMULATE_ADC(temp_cooler); break; #endif #if HAS_TEMP_ADC_PROBE - case PrepareTemp_PROBE: HAL_START_ADC(TEMP_PROBE_PIN); break; + case PrepareTemp_PROBE: hal.adc_start(TEMP_PROBE_PIN); break; case MeasureTemp_PROBE: ACCUMULATE_ADC(temp_probe); break; #endif #if HAS_TEMP_ADC_BOARD - case PrepareTemp_BOARD: HAL_START_ADC(TEMP_BOARD_PIN); break; + case PrepareTemp_BOARD: hal.adc_start(TEMP_BOARD_PIN); break; case MeasureTemp_BOARD: ACCUMULATE_ADC(temp_board); break; #endif #if HAS_TEMP_ADC_REDUNDANT - case PrepareTemp_REDUNDANT: HAL_START_ADC(TEMP_REDUNDANT_PIN); break; + case PrepareTemp_REDUNDANT: hal.adc_start(TEMP_REDUNDANT_PIN); break; case MeasureTemp_REDUNDANT: ACCUMULATE_ADC(temp_redundant); break; #endif #if HAS_TEMP_ADC_1 - case PrepareTemp_1: HAL_START_ADC(TEMP_1_PIN); break; + case PrepareTemp_1: hal.adc_start(TEMP_1_PIN); break; case MeasureTemp_1: ACCUMULATE_ADC(temp_hotend[1]); break; #endif #if HAS_TEMP_ADC_2 - case PrepareTemp_2: HAL_START_ADC(TEMP_2_PIN); break; + case PrepareTemp_2: hal.adc_start(TEMP_2_PIN); break; case MeasureTemp_2: ACCUMULATE_ADC(temp_hotend[2]); break; #endif #if HAS_TEMP_ADC_3 - case PrepareTemp_3: HAL_START_ADC(TEMP_3_PIN); break; + case PrepareTemp_3: hal.adc_start(TEMP_3_PIN); break; case MeasureTemp_3: ACCUMULATE_ADC(temp_hotend[3]); break; #endif #if HAS_TEMP_ADC_4 - case PrepareTemp_4: HAL_START_ADC(TEMP_4_PIN); break; + case PrepareTemp_4: hal.adc_start(TEMP_4_PIN); break; case MeasureTemp_4: ACCUMULATE_ADC(temp_hotend[4]); break; #endif #if HAS_TEMP_ADC_5 - case PrepareTemp_5: HAL_START_ADC(TEMP_5_PIN); break; + case PrepareTemp_5: hal.adc_start(TEMP_5_PIN); break; case MeasureTemp_5: ACCUMULATE_ADC(temp_hotend[5]); break; #endif #if HAS_TEMP_ADC_6 - case PrepareTemp_6: HAL_START_ADC(TEMP_6_PIN); break; + case PrepareTemp_6: hal.adc_start(TEMP_6_PIN); break; case MeasureTemp_6: ACCUMULATE_ADC(temp_hotend[6]); break; #endif #if HAS_TEMP_ADC_7 - case PrepareTemp_7: HAL_START_ADC(TEMP_7_PIN); break; + case PrepareTemp_7: hal.adc_start(TEMP_7_PIN); break; case MeasureTemp_7: ACCUMULATE_ADC(temp_hotend[7]); break; #endif #if ENABLED(FILAMENT_WIDTH_SENSOR) - case Prepare_FILWIDTH: HAL_START_ADC(FILWIDTH_PIN); break; + case Prepare_FILWIDTH: hal.adc_start(FILWIDTH_PIN); break; case Measure_FILWIDTH: - if (!HAL_ADC_READY()) next_sensor_state = adc_sensor_state; // Redo this state - else filwidth.accumulate(HAL_READ_ADC()); + if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; // Redo this state + else filwidth.accumulate(hal.adc_value()); break; #endif #if ENABLED(POWER_MONITOR_CURRENT) case Prepare_POWER_MONITOR_CURRENT: - HAL_START_ADC(POWER_MONITOR_CURRENT_PIN); + hal.adc_start(POWER_MONITOR_CURRENT_PIN); break; case Measure_POWER_MONITOR_CURRENT: - if (!HAL_ADC_READY()) next_sensor_state = adc_sensor_state; // Redo this state - else power_monitor.add_current_sample(HAL_READ_ADC()); + if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; // Redo this state + else power_monitor.add_current_sample(hal.adc_value()); break; #endif #if ENABLED(POWER_MONITOR_VOLTAGE) case Prepare_POWER_MONITOR_VOLTAGE: - HAL_START_ADC(POWER_MONITOR_VOLTAGE_PIN); + hal.adc_start(POWER_MONITOR_VOLTAGE_PIN); break; case Measure_POWER_MONITOR_VOLTAGE: - if (!HAL_ADC_READY()) next_sensor_state = adc_sensor_state; // Redo this state - else power_monitor.add_voltage_sample(HAL_READ_ADC()); + if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; // Redo this state + else power_monitor.add_voltage_sample(hal.adc_value()); break; #endif #if HAS_JOY_ADC_X - case PrepareJoy_X: HAL_START_ADC(JOY_X_PIN); break; + case PrepareJoy_X: hal.adc_start(JOY_X_PIN); break; case MeasureJoy_X: ACCUMULATE_ADC(joystick.x); break; #endif #if HAS_JOY_ADC_Y - case PrepareJoy_Y: HAL_START_ADC(JOY_Y_PIN); break; + case PrepareJoy_Y: hal.adc_start(JOY_Y_PIN); break; case MeasureJoy_Y: ACCUMULATE_ADC(joystick.y); break; #endif #if HAS_JOY_ADC_Z - case PrepareJoy_Z: HAL_START_ADC(JOY_Z_PIN); break; + case PrepareJoy_Z: hal.adc_start(JOY_Z_PIN); break; case MeasureJoy_Z: ACCUMULATE_ADC(joystick.z); break; #endif @@ -3513,12 +3472,12 @@ void Temperature::isr() { #ifndef ADC_BUTTON_DEBOUNCE_DELAY #define ADC_BUTTON_DEBOUNCE_DELAY 16 #endif - case Prepare_ADC_KEY: HAL_START_ADC(ADC_KEYPAD_PIN); break; + case Prepare_ADC_KEY: hal.adc_start(ADC_KEYPAD_PIN); break; case Measure_ADC_KEY: - if (!HAL_ADC_READY()) + if (!hal.adc_ready()) next_sensor_state = adc_sensor_state; // redo this state else if (ADCKey_count < ADC_BUTTON_DEBOUNCE_DELAY) { - raw_ADCKey_value = HAL_READ_ADC(); + raw_ADCKey_value = hal.adc_value(); if (raw_ADCKey_value <= 900UL * HAL_ADC_RANGE / 1024UL) { NOMORE(current_ADCKey_raw, raw_ADCKey_value); ADCKey_count++; diff --git a/ini/features.ini b/ini/features.ini index c52675ff2d..ead3f6327b 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -233,7 +233,7 @@ HAS_SERVOS = src_filter=+ + HAS_MICROSTEPS = src_filter=+ (ESP3D_)?WIFISUPPORT = AsyncTCP, ESP Async WebServer - ESP3DLib=https://github.com/luc-github/ESP3DLib/archive/master.zip + ESP3DLib=https://github.com/luc-github/ESP3DLib/archive/master-2.0.7.zip arduinoWebSockets=links2004/WebSockets@2.3.4 luc-github/ESP32SSDP@^1.1.1 lib_ignore=ESPAsyncTCP diff --git a/ini/native.ini b/ini/native.ini index 5355284992..3d196f3436 100644 --- a/ini/native.ini +++ b/ini/native.ini @@ -34,14 +34,14 @@ src_filter = ${common.default_src_filter} + [simulator_common] 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/include -IMarlin/src/HAL/NATIVE_SIM/u8g +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 src_build_flags = -Wall -Wno-expansion-to-defined -Wcast-align release_flags = -g0 -O3 -flto debug_build_flags = -fstack-protector-strong -g -g3 -ggdb lib_compat_mode = off src_filter = ${common.default_src_filter} + lib_deps = ${common.lib_deps} - MarlinSimUI=https://github.com/p3p/MarlinSimUI/archive/master.zip + MarlinSimUI=https://github.com/p3p/MarlinSimUI/archive/0.0.2.zip Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/marlin_sim_native.zip LiquidCrystal=https://github.com/p3p/LiquidCrystal/archive/master.zip extra_scripts = ${common.extra_scripts} From 28ceb1ed0f50f474adbcfa0690c1fa751e912281 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 19 Feb 2022 00:25:05 +0000 Subject: [PATCH 492/532] [cron] Bump distribution date (2022-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 f13abf77fb..93f951117c 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 "2022-02-18" +//#define STRING_DISTRIBUTION_DATE "2022-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 45bf3f47a4..e86ab345b8 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 "2022-02-18" + #define STRING_DISTRIBUTION_DATE "2022-02-19" #endif /** From a9682f2e975e63d4ba5b4e8a9486317849a5b8b1 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Tue, 22 Feb 2022 13:31:44 +1300 Subject: [PATCH 493/532] =?UTF-8?q?=F0=9F=93=8C=20Creality=20RAMPS=20optio?= =?UTF-8?q?nal=20SD=5FDETECT=5FPIN=20(#23740)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h b/Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h index 21dadd60ee..679503e982 100644 --- a/Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h +++ b/Marlin/src/pins/ramps/pins_RAMPS_CREALITY.h @@ -39,7 +39,12 @@ #endif #ifndef SD_DETECT_PIN - #define SD_DETECT_PIN 49 // Always define onboard SD detect + #if SD_CONNECTION_IS(ONBOARD) + //#define HAS_ONBOARD_SD_DETECT // If the SD_DETECT_PIN is wired up + #endif + #if ENABLED(HAS_ONBOARD_SD_DETECT) || !SD_CONNECTION_IS(ONBOARD) + #define SD_DETECT_PIN 49 + #endif #endif #ifndef PS_ON_PIN From 8f8427ec8f69705e09ca226d9f16da6b82634439 Mon Sep 17 00:00:00 2001 From: tombrazier <68918209+tombrazier@users.noreply.github.com> Date: Tue, 22 Feb 2022 01:15:52 +0000 Subject: [PATCH 494/532] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20Apply=20PTC=20on?= =?UTF-8?q?=20all=20probing=20(#23764)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/feature/probe_temp_comp.cpp | 9 +++++++++ Marlin/src/feature/probe_temp_comp.h | 11 +++++++++-- Marlin/src/gcode/bedlevel/abl/G29.cpp | 9 --------- Marlin/src/gcode/calibrate/G76_M871.cpp | 2 ++ Marlin/src/gcode/calibrate/M48.cpp | 12 +++++++++++- Marlin/src/gcode/probe/G30.cpp | 8 ++++++++ Marlin/src/lcd/menu/menu_probe_offset.cpp | 2 +- Marlin/src/module/probe.cpp | 9 ++++++++- 8 files changed, 48 insertions(+), 14 deletions(-) diff --git a/Marlin/src/feature/probe_temp_comp.cpp b/Marlin/src/feature/probe_temp_comp.cpp index 9a975d6763..b5f636e698 100644 --- a/Marlin/src/feature/probe_temp_comp.cpp +++ b/Marlin/src/feature/probe_temp_comp.cpp @@ -28,6 +28,7 @@ #include "probe_temp_comp.h" #include +#include "../module/temperature.h" ProbeTempComp ptc; @@ -62,6 +63,7 @@ constexpr temp_calib_t ProbeTempComp::cali_info[TSI_COUNT]; uint8_t ProbeTempComp::calib_idx; // = 0 float ProbeTempComp::init_measurement; // = 0.0 +bool ProbeTempComp::enabled = true; void ProbeTempComp::reset() { TERN_(PTC_PROBE, LOOP_L_N(i, PTC_PROBE_COUNT) z_offsets_probe[i] = z_offsets_probe_default[i]); @@ -169,6 +171,13 @@ bool ProbeTempComp::finish_calibration(const TempSensorID tsi) { return true; } +void ProbeTempComp::apply_compensation(float &meas_z) { + if (!enabled) return; + TERN_(PTC_BED, compensate_measurement(TSI_BED, thermalManager.degBed(), meas_z)); + TERN_(PTC_PROBE, compensate_measurement(TSI_PROBE, thermalManager.degProbe(), meas_z)); + TERN_(PTC_HOTEND, compensate_measurement(TSI_EXT, thermalManager.degHotend(0), meas_z)); +} + void ProbeTempComp::compensate_measurement(const TempSensorID tsi, const celsius_t temp, float &meas_z) { const uint8_t measurements = cali_info[tsi].measurements; const celsius_t start_temp = cali_info[tsi].start_temp, diff --git a/Marlin/src/feature/probe_temp_comp.h b/Marlin/src/feature/probe_temp_comp.h index 1db7d04e89..42348db684 100644 --- a/Marlin/src/feature/probe_temp_comp.h +++ b/Marlin/src/feature/probe_temp_comp.h @@ -77,7 +77,6 @@ class ProbeTempComp { static void reset_index() { calib_idx = 0; }; static uint8_t get_index() { return calib_idx; } static void reset(); - static void clear_offsets(const TempSensorID tsi); static void clear_all_offsets() { TERN_(PTC_PROBE, clear_offsets(TSI_PROBE)); TERN_(PTC_BED, clear_offsets(TSI_BED)); @@ -88,10 +87,16 @@ class ProbeTempComp { static void prepare_new_calibration(const_float_t init_meas_z); static void push_back_new_measurement(const TempSensorID tsi, const_float_t meas_z); static bool finish_calibration(const TempSensorID tsi); - static void compensate_measurement(const TempSensorID tsi, const celsius_t temp, float &meas_z); + static void set_enabled(const bool ena) { enabled = ena; } + + // Apply all temperature compensation adjustments + static void apply_compensation(float &meas_z); private: static uint8_t calib_idx; + static bool enabled; + + static void clear_offsets(const TempSensorID tsi); /** * Base value. Temperature compensation values will be deltas @@ -104,6 +109,8 @@ class ProbeTempComp { * to allow generating values of higher temperatures. */ static bool linear_regression(const TempSensorID tsi, float &k, float &d); + + static void compensate_measurement(const TempSensorID tsi, const celsius_t temp, float &meas_z); }; extern ProbeTempComp ptc; diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 9ec43fe49d..24c0268b9f 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -36,11 +36,6 @@ #include "../../../module/probe.h" #include "../../queue.h" -#if HAS_PTC - #include "../../../feature/probe_temp_comp.h" - #include "../../../module/temperature.h" -#endif - #if HAS_STATUS_MESSAGE #include "../../../lcd/marlinui.h" #endif @@ -658,10 +653,6 @@ G29_TYPE GcodeSuite::G29() { break; // Breaks out of both loops } - TERN_(PTC_BED, ptc.compensate_measurement(TSI_BED, thermalManager.degBed(), abl.measured_z)); - TERN_(PTC_PROBE, ptc.compensate_measurement(TSI_PROBE, thermalManager.degProbe(), abl.measured_z)); - TERN_(PTC_HOTEND, ptc.compensate_measurement(TSI_EXT, thermalManager.degHotend(0), abl.measured_z)); - #if ENABLED(AUTO_BED_LEVELING_LINEAR) abl.mean += abl.measured_z; diff --git a/Marlin/src/gcode/calibrate/G76_M871.cpp b/Marlin/src/gcode/calibrate/G76_M871.cpp index 21bb2c7590..ad13b20306 100644 --- a/Marlin/src/gcode/calibrate/G76_M871.cpp +++ b/Marlin/src/gcode/calibrate/G76_M871.cpp @@ -109,7 +109,9 @@ static void say_failed_to_calibrate() { SERIAL_ECHOPGM("!Failed to calibra auto g76_probe = [](const TempSensorID sid, celsius_t &targ, const xy_pos_t &nozpos) { do_z_clearance(5.0); // Raise nozzle before probing + ptc.set_enabled(false); const float measured_z = probe.probe_at_point(nozpos, PROBE_PT_STOW, 0, false); // verbose=0, probe_relative=false + ptc.set_enabled(true); if (isnan(measured_z)) SERIAL_ECHOLNPGM("!Received NAN. Aborting."); else { diff --git a/Marlin/src/gcode/calibrate/M48.cpp b/Marlin/src/gcode/calibrate/M48.cpp index 913ffe30d4..8b6ea0bf1f 100644 --- a/Marlin/src/gcode/calibrate/M48.cpp +++ b/Marlin/src/gcode/calibrate/M48.cpp @@ -35,11 +35,15 @@ #include "../../module/planner.h" #endif +#if HAS_PTC + #include "../../feature/probe_temp_comp.h" +#endif + /** * M48: Z probe repeatability measurement function. * * Usage: - * M48 + * M48 * P = Number of sampled points (4-50, default 10) * X = Sample X position * Y = Sample Y position @@ -47,6 +51,7 @@ * E = Engage Z probe for each reading * L = Number of legs of movement before probe * S = Schizoid (Or Star if you prefer) + * C = Enable probe temperature compensation (0 or 1, default 1) * * This function requires the machine to be homed before invocation. */ @@ -107,6 +112,8 @@ void GcodeSuite::M48() { set_bed_leveling_enabled(false); #endif + TERN_(HAS_PTC, ptc.set_enabled(!parser.seen('C') || parser.value_bool())); + // Work with reasonable feedrates remember_feedrate_scaling_off(); @@ -269,6 +276,9 @@ void GcodeSuite::M48() { // Re-enable bed level correction if it had been on TERN_(HAS_LEVELING, set_bed_leveling_enabled(was_enabled)); + // Re-enable probe temperature correction + TERN_(HAS_PTC, ptc.set_enabled(true)); + report_current_position(); } diff --git a/Marlin/src/gcode/probe/G30.cpp b/Marlin/src/gcode/probe/G30.cpp index f4152c76e9..474f1f252a 100644 --- a/Marlin/src/gcode/probe/G30.cpp +++ b/Marlin/src/gcode/probe/G30.cpp @@ -29,6 +29,10 @@ #include "../../module/probe.h" #include "../../feature/bedlevel/bedlevel.h" +#if HAS_PTC + #include "../../feature/probe_temp_comp.h" +#endif + /** * G30: Do a single Z probe at the current XY * @@ -37,6 +41,7 @@ * X Probe X position (default current X) * Y Probe Y position (default current Y) * E Engage the probe for each probe (default 1) + * C Enable probe temperature compensation (0 or 1, default 1) */ void GcodeSuite::G30() { @@ -51,7 +56,10 @@ void GcodeSuite::G30() { remember_feedrate_scaling_off(); const ProbePtRaise raise_after = parser.boolval('E', true) ? PROBE_PT_STOW : PROBE_PT_NONE; + + TERN_(HAS_PTC, ptc.set_enabled(!parser.seen('C') || parser.value_bool())); const float measured_z = probe.probe_at_point(pos, raise_after, 1); + TERN_(HAS_PTC, ptc.set_enabled(true)); if (!isnan(measured_z)) SERIAL_ECHOLNPGM("Bed X: ", pos.x, " Y: ", pos.y, " Z: ", measured_z); diff --git a/Marlin/src/lcd/menu/menu_probe_offset.cpp b/Marlin/src/lcd/menu/menu_probe_offset.cpp index ae785fa641..79db47005d 100644 --- a/Marlin/src/lcd/menu/menu_probe_offset.cpp +++ b/Marlin/src/lcd/menu/menu_probe_offset.cpp @@ -62,7 +62,7 @@ void probe_offset_wizard_menu() { if (LCD_HEIGHT >= 4) STATIC_ITEM(MSG_MOVE_NOZZLE_TO_BED, SS_CENTER|SS_INVERT); - STATIC_ITEM_P(PSTR("Z="), SS_CENTER, ftostr42_52(current_position.z)); + STATIC_ITEM_P(PSTR("Z"), SS_CENTER, ftostr42_52(current_position.z)); STATIC_ITEM(MSG_ZPROBE_ZOFFSET, SS_LEFT, ftostr42_52(calculated_z_offset)); SUBMENU(MSG_MOVE_1MM, []{ _goto_manual_move_z( 1); }); diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index fdd6897192..95776ffda1 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -77,6 +77,10 @@ #include "servo.h" #endif +#if HAS_PTC + #include "../feature/probe_temp_comp.h" +#endif + #if ENABLED(EXTENSIBLE_UI) #include "../lcd/extui/ui_api.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) @@ -801,7 +805,10 @@ float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRai do_blocking_move_to(npos, feedRate_t(XY_PROBE_FEEDRATE_MM_S)); float measured_z = NAN; - if (!deploy()) measured_z = run_z_probe(sanity_check) + offset.z; + if (!deploy()) { + measured_z = run_z_probe(sanity_check) + offset.z; + TERN_(HAS_PTC, ptc.apply_compensation(measured_z)); + } if (!isnan(measured_z)) { const bool big_raise = raise_after == PROBE_PT_BIG_RAISE; if (big_raise || raise_after == PROBE_PT_RAISE) From 9530df4816ed409e79c7b0403613e663f0d63511 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 21 Feb 2022 19:54:03 -0600 Subject: [PATCH 495/532] =?UTF-8?q?=F0=9F=93=9D=20Update=20Toolchange=20FS?= =?UTF-8?q?=20comments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 8 ++++---- Marlin/src/libs/nozzle.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index f2676828ff..2d1b14107d 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -2417,7 +2417,7 @@ #if ENABLED(TOOLCHANGE_FILAMENT_SWAP) // Load / Unload #define TOOLCHANGE_FS_LENGTH 12 // (mm) Load / Unload length - #define TOOLCHANGE_FS_EXTRA_RESUME_LENGTH 0 // (mm) Extra length for better restart, fine tune by LCD/Gcode) + #define TOOLCHANGE_FS_EXTRA_RESUME_LENGTH 0 // (mm) Extra length for better restart. Adjust with LCD or M217 B. #define TOOLCHANGE_FS_RETRACT_SPEED (50*60) // (mm/min) (Unloading) #define TOOLCHANGE_FS_UNRETRACT_SPEED (25*60) // (mm/min) (On SINGLENOZZLE or Bowden loading must be slowed down) @@ -2431,12 +2431,12 @@ #define TOOLCHANGE_FS_FAN_SPEED 255 // 0-255 #define TOOLCHANGE_FS_FAN_TIME 10 // (seconds) - // Swap uninitialized extruder with TOOLCHANGE_FS_PRIME_SPEED for all lengths (recover + prime) + // Swap uninitialized extruder (using TOOLCHANGE_FS_PRIME_SPEED feedrate) // (May break filament if not retracted beforehand.) //#define TOOLCHANGE_FS_INIT_BEFORE_SWAP - // Prime on the first T0 (If other, TOOLCHANGE_FS_INIT_BEFORE_SWAP applied) - // Enable it (M217 V[0/1]) before printing, to avoid unwanted priming on host connect + // Prime on the first T0 (For other tools use TOOLCHANGE_FS_INIT_BEFORE_SWAP) + // Enable with M217 V1 before printing to avoid unwanted priming on host connect //#define TOOLCHANGE_FS_PRIME_FIRST_USED /** diff --git a/Marlin/src/libs/nozzle.cpp b/Marlin/src/libs/nozzle.cpp index 5cd2014d7f..4ca8fa2cae 100644 --- a/Marlin/src/libs/nozzle.cpp +++ b/Marlin/src/libs/nozzle.cpp @@ -263,7 +263,7 @@ Nozzle nozzle; case 2: do_blocking_move_to_y(park.y, fr_xy); break; case 3: do_blocking_move_to_x(park.x, fr_xy); do_blocking_move_to_y(park.y, fr_xy); break; - case 4: do_blocking_move_to_y(park.y, fr_xy); + case 4: do_blocking_move_to_y(park.y, fr_xy); do_blocking_move_to_x(park.x, fr_xy); break; } From 963049ddc39c77176e67d7eaad0d117a1e1b666a Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 21 Feb 2022 19:55:19 -0600 Subject: [PATCH 496/532] =?UTF-8?q?=E2=9C=A8=20Dyze=20Design=20PT100=20Amp?= =?UTF-8?q?lifier=20Board=20(#23760)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration.h | 1 + Marlin/src/module/thermistor/thermistor_68.h | 54 ++++++++++++++++++++ Marlin/src/module/thermistor/thermistors.h | 3 ++ 3 files changed, 58 insertions(+) create mode 100644 Marlin/src/module/thermistor/thermistor_68.h diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 752fd1370a..6f7b1bdf4a 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -459,6 +459,7 @@ * 61 : 100kΩ Formbot/Vivedino 350°C Thermistor - beta 3950 * 66 : 4.7MΩ Dyze Design High Temperature Thermistor * 67 : 500kΩ SliceEngineering 450°C Thermistor + * 68 : PT100 amplifier board from Dyze Design * 70 : 100kΩ bq Hephestos 2 * 75 : 100kΩ Generic Silicon Heat Pad with NTC100K MGB18-104F39050L32 * 2000 : 100kΩ Ultimachine Rambo TDK NTCG104LH104KT1 NTC100K motherboard Thermistor diff --git a/Marlin/src/module/thermistor/thermistor_68.h b/Marlin/src/module/thermistor/thermistor_68.h new file mode 100644 index 0000000000..270456dcb5 --- /dev/null +++ b/Marlin/src/module/thermistor/thermistor_68.h @@ -0,0 +1,54 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2022 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +#define REVERSE_TEMP_SENSOR_RANGE_68 1 + +// PT100 amplifier board from Dyze Design +const temp_entry_t temptable_68[] PROGMEM = { + { OV(273), 0 }, + { OV(294), 20 }, + { OV(315), 40 }, + { OV(336), 60 }, + { OV(356), 80 }, + { OV(376), 100 }, + { OV(396), 120 }, + { OV(416), 140 }, + { OV(436), 160 }, + { OV(455), 180 }, + { OV(474), 200 }, + { OV(494), 220 }, + { OV(513), 240 }, + { OV(531), 260 }, + { OV(550), 280 }, + { OV(568), 300 }, + { OV(587), 320 }, + { OV(605), 340 }, + { OV(623), 360 }, + { OV(641), 380 }, + { OV(658), 400 }, + { OV(676), 420 }, + { OV(693), 440 }, + { OV(710), 460 }, + { OV(727), 480 }, + { OV(744), 500 } +}; diff --git a/Marlin/src/module/thermistor/thermistors.h b/Marlin/src/module/thermistor/thermistors.h index 3d9ef5062d..9f2ebce49a 100644 --- a/Marlin/src/module/thermistor/thermistors.h +++ b/Marlin/src/module/thermistor/thermistors.h @@ -156,6 +156,9 @@ typedef struct { int16_t value; celsius_t celsius; } temp_entry_t; #if ANY_THERMISTOR_IS(67) // R25 = 500 KOhm, beta25 = 3800 K, 4.7 kOhm pull-up, SliceEngineering 450 °C Thermistor #include "thermistor_67.h" #endif +#if ANY_THERMISTOR_IS(68) // PT-100 with Dyze amplifier board + #include "thermistor_68.h" +#endif #if ANY_THERMISTOR_IS(12) // beta25 = 4700 K, R25 = 100 kOhm, Pull-up = 4.7 kOhm, "Personal calibration for Makibox hot bed" #include "thermistor_12.h" #endif From 6b96636b9b37e6d0d95699a9120afe48f4b640d0 Mon Sep 17 00:00:00 2001 From: Keith Bennett <13375512+thisiskeithb@users.noreply.github.com> Date: Mon, 21 Feb 2022 18:47:53 -0800 Subject: [PATCH 497/532] =?UTF-8?q?=F0=9F=94=A7=20Warning=20for=20MK3=5FFA?= =?UTF-8?q?N=5FPINS=20(#23727)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/Warnings.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp index 3545ee8b5d..9d7b14d763 100644 --- a/Marlin/src/inc/Warnings.cpp +++ b/Marlin/src/inc/Warnings.cpp @@ -597,3 +597,10 @@ #ifdef __STM32F1__ #warning "Maple build environments are deprecated. Please use a non-Maple build environment. Report issues to the Marlin Firmware project." #endif + +/** + * Průša MK3/S/+ fan pin reassignment + */ +#if MB(BTT_BTT002_V1_0, EINSY_RAMBO) && DISABLED(NO_MK3_FAN_PINS_WARNING) + #warning "Define MK3_FAN_PINS to swap hotend and part cooling fan pins. (Define NO_MK3_FAN_PINS_WARNING to suppress this warning.)" +#endif From 92f85e877dbfb7a9ecdb139e5f2a6473c2868c97 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 21 Feb 2022 20:50:09 -0600 Subject: [PATCH 498/532] =?UTF-8?q?=F0=9F=94=A8=20Workspace=20file=20with?= =?UTF-8?q?=20recommendation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/extensions.json | 3 +++ buildroot/share/vscode/MarlinFirmware.code-workspace | 4 ++++ 2 files changed, 7 insertions(+) create mode 100644 buildroot/share/vscode/MarlinFirmware.code-workspace diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 7226831cb1..f495d14f53 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -4,5 +4,8 @@ "recommendations": [ "marlinfirmware.auto-build", "platformio.platformio-ide" + ], + "unwantedRecommendations": [ + "ms-vscode.cpptools-extension-pack" ] } diff --git a/buildroot/share/vscode/MarlinFirmware.code-workspace b/buildroot/share/vscode/MarlinFirmware.code-workspace new file mode 100644 index 0000000000..bd433b07f0 --- /dev/null +++ b/buildroot/share/vscode/MarlinFirmware.code-workspace @@ -0,0 +1,4 @@ +{ + "folders": [ { "path": "../../.." } ], + "extensions": { "recommendations": [ "marlinfirmware.auto-build" ] } +} From f03c3677394126e72fb7c2679891a67f1efe0332 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Tue, 22 Feb 2022 16:16:57 +1300 Subject: [PATCH 499/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20TMC26X=20CS=20pins?= =?UTF-8?q?=20init=20(#23778)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/MarlinCore.cpp | 2 +- Marlin/src/core/drivers.h | 2 +- Marlin/src/feature/tmc_util.cpp | 126 ++++++++++++++++---------------- Marlin/src/feature/tmc_util.h | 4 +- ini/features.ini | 3 +- 5 files changed, 69 insertions(+), 68 deletions(-) diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 482ad95cac..81dc7db4cc 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -145,7 +145,7 @@ #include "feature/encoder_i2c.h" #endif -#if HAS_TRINAMIC_CONFIG && DISABLED(PSU_DEFAULT_OFF) +#if (HAS_TRINAMIC_CONFIG || HAS_TMC_SPI) && DISABLED(PSU_DEFAULT_OFF) #include "feature/tmc_util.h" #endif diff --git a/Marlin/src/core/drivers.h b/Marlin/src/core/drivers.h index 0a76410274..2e66cc9201 100644 --- a/Marlin/src/core/drivers.h +++ b/Marlin/src/core/drivers.h @@ -128,7 +128,7 @@ // Test for a driver that uses SPI - this allows checking whether a _CS_ pin // is considered sensitive #define AXIS_HAS_SPI(A) ( AXIS_DRIVER_TYPE(A,TMC2130) || AXIS_DRIVER_TYPE(A,TMC2160) \ - || AXIS_DRIVER_TYPE(A,TMC2660) \ + || AXIS_DRIVER_TYPE(A,TMC26X) || AXIS_DRIVER_TYPE(A,TMC2660) \ || AXIS_DRIVER_TYPE(A,TMC5130) || AXIS_DRIVER_TYPE(A,TMC5160) ) #define AXIS_HAS_UART(A) ( AXIS_DRIVER_TYPE(A,TMC2208) || AXIS_DRIVER_TYPE(A,TMC2209) ) diff --git a/Marlin/src/feature/tmc_util.cpp b/Marlin/src/feature/tmc_util.cpp index cf3fa3b7b0..c69772bebc 100644 --- a/Marlin/src/feature/tmc_util.cpp +++ b/Marlin/src/feature/tmc_util.cpp @@ -1178,69 +1178,6 @@ #endif // USE_SENSORLESS -#if HAS_TMC_SPI - #define SET_CS_PIN(st) OUT_WRITE(st##_CS_PIN, HIGH) - void tmc_init_cs_pins() { - #if AXIS_HAS_SPI(X) - SET_CS_PIN(X); - #endif - #if AXIS_HAS_SPI(Y) - SET_CS_PIN(Y); - #endif - #if AXIS_HAS_SPI(Z) - SET_CS_PIN(Z); - #endif - #if AXIS_HAS_SPI(X2) - SET_CS_PIN(X2); - #endif - #if AXIS_HAS_SPI(Y2) - SET_CS_PIN(Y2); - #endif - #if AXIS_HAS_SPI(Z2) - SET_CS_PIN(Z2); - #endif - #if AXIS_HAS_SPI(Z3) - SET_CS_PIN(Z3); - #endif - #if AXIS_HAS_SPI(Z4) - SET_CS_PIN(Z4); - #endif - #if AXIS_HAS_SPI(I) - SET_CS_PIN(I); - #endif - #if AXIS_HAS_SPI(J) - SET_CS_PIN(J); - #endif - #if AXIS_HAS_SPI(K) - SET_CS_PIN(K); - #endif - #if AXIS_HAS_SPI(E0) - SET_CS_PIN(E0); - #endif - #if AXIS_HAS_SPI(E1) - SET_CS_PIN(E1); - #endif - #if AXIS_HAS_SPI(E2) - SET_CS_PIN(E2); - #endif - #if AXIS_HAS_SPI(E3) - SET_CS_PIN(E3); - #endif - #if AXIS_HAS_SPI(E4) - SET_CS_PIN(E4); - #endif - #if AXIS_HAS_SPI(E5) - SET_CS_PIN(E5); - #endif - #if AXIS_HAS_SPI(E6) - SET_CS_PIN(E6); - #endif - #if AXIS_HAS_SPI(E7) - SET_CS_PIN(E7); - #endif - } -#endif // HAS_TMC_SPI - template static bool test_connection(TMC &st) { SERIAL_ECHOPGM("Testing "); @@ -1339,3 +1276,66 @@ void test_tmc_connection(LOGICAL_AXIS_ARGS(const bool)) { } #endif // HAS_TRINAMIC_CONFIG + +#if HAS_TMC_SPI + #define SET_CS_PIN(st) OUT_WRITE(st##_CS_PIN, HIGH) + void tmc_init_cs_pins() { + #if AXIS_HAS_SPI(X) + SET_CS_PIN(X); + #endif + #if AXIS_HAS_SPI(Y) + SET_CS_PIN(Y); + #endif + #if AXIS_HAS_SPI(Z) + SET_CS_PIN(Z); + #endif + #if AXIS_HAS_SPI(X2) + SET_CS_PIN(X2); + #endif + #if AXIS_HAS_SPI(Y2) + SET_CS_PIN(Y2); + #endif + #if AXIS_HAS_SPI(Z2) + SET_CS_PIN(Z2); + #endif + #if AXIS_HAS_SPI(Z3) + SET_CS_PIN(Z3); + #endif + #if AXIS_HAS_SPI(Z4) + SET_CS_PIN(Z4); + #endif + #if AXIS_HAS_SPI(I) + SET_CS_PIN(I); + #endif + #if AXIS_HAS_SPI(J) + SET_CS_PIN(J); + #endif + #if AXIS_HAS_SPI(K) + SET_CS_PIN(K); + #endif + #if AXIS_HAS_SPI(E0) + SET_CS_PIN(E0); + #endif + #if AXIS_HAS_SPI(E1) + SET_CS_PIN(E1); + #endif + #if AXIS_HAS_SPI(E2) + SET_CS_PIN(E2); + #endif + #if AXIS_HAS_SPI(E3) + SET_CS_PIN(E3); + #endif + #if AXIS_HAS_SPI(E4) + SET_CS_PIN(E4); + #endif + #if AXIS_HAS_SPI(E5) + SET_CS_PIN(E5); + #endif + #if AXIS_HAS_SPI(E6) + SET_CS_PIN(E6); + #endif + #if AXIS_HAS_SPI(E7) + SET_CS_PIN(E7); + #endif + } +#endif // HAS_TMC_SPI diff --git a/Marlin/src/feature/tmc_util.h b/Marlin/src/feature/tmc_util.h index 892d33768b..fc333b09dd 100644 --- a/Marlin/src/feature/tmc_util.h +++ b/Marlin/src/feature/tmc_util.h @@ -382,8 +382,8 @@ void test_tmc_connection(LOGICAL_AXIS_DECL(const bool, true)); #endif // USE_SENSORLESS +#endif // HAS_TRINAMIC_CONFIG + #if HAS_TMC_SPI void tmc_init_cs_pins(); #endif - -#endif // HAS_TRINAMIC_CONFIG diff --git a/ini/features.ini b/ini/features.ini index ead3f6327b..8ea1eb5049 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -18,7 +18,8 @@ POSTMORTEM_DEBUGGING = src_filter=+ + + + + + + + + + + + +HAS_T(RINAMIC_CONFIG|MC_SPI) = src_filter=+ HAS_STEALTHCHOP = src_filter=+ SR_LCD_3W_NL = SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip HAS_MOTOR_CURRENT_I2C = SlowSoftI2CMaster From 60c89709df2705ae7e80bbe2e9b59b56d6ee8060 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 21 Feb 2022 23:07:09 -0600 Subject: [PATCH 500/532] =?UTF-8?q?=F0=9F=90=9B=20Ibid.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ini/features.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ini/features.ini b/ini/features.ini index 8ea1eb5049..627f094e07 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -18,7 +18,7 @@ POSTMORTEM_DEBUGGING = src_filter=+ + + + + + src_filter=+ + + + + HAS_T(RINAMIC_CONFIG|MC_SPI) = src_filter=+ HAS_STEALTHCHOP = src_filter=+ SR_LCD_3W_NL = SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip From 432927df01ca0410dd5a9d00d17d7878095c2cd5 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Tue, 22 Feb 2022 06:06:52 +0000 Subject: [PATCH 501/532] [cron] Bump distribution date (2022-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 93f951117c..ee4b4a636b 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 "2022-02-19" +//#define STRING_DISTRIBUTION_DATE "2022-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 e86ab345b8..9c86aea477 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 "2022-02-19" + #define STRING_DISTRIBUTION_DATE "2022-02-22" #endif /** From 28f65301cfedf460f3a72a85fced49cbad18632f Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Thu, 24 Feb 2022 05:36:39 +1300 Subject: [PATCH 502/532] =?UTF-8?q?=F0=9F=94=A8=20More=20renamed.ini=20env?= =?UTF-8?q?s=20(#23786)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ini/renamed.ini | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/ini/renamed.ini b/ini/renamed.ini index bc1e438d60..abc8ee5c28 100644 --- a/ini/renamed.ini +++ b/ini/renamed.ini @@ -9,17 +9,41 @@ # # ################################# +# +# A platform that doesn't match anything in pins.h +# + +[renamed] +platform = native + # # List of environment names that are no longer used # [env:STM32F103RET6_creality_maple] -extends = env:STM32F103RE_maple +# Renamed to STM32F103RE_creality_maple +extends = renamed [env:STM32F103RET6_creality] -extends = STM32F103Rx_creality -board = genericSTM32F103RE +# Renamed to STM32F103RE_creality +extends = renamed [env:STM32F103RET6_creality_xfer] -extends = STM32F103Rx_creality_xfer -board = genericSTM32F103RE +# Renamed to STM32F103RE_creality_xfer +extends = renamed + +[env:STM32F103RC_btt_512K] +# Renamed to STM32F103RE_btt +extends = renamed + +[env:STM32F103RC_btt_512K_USB] +# Renamed to STM32F103RE_btt_USB +extends = renamed + +[env:STM32F103RC_btt_512K_maple] +# Renamed to STM32F103RE_btt_maple +extends = renamed + +[env:STM32F103RC_btt_512K_USB_maple] +# Renamed to STM32F103RE_btt_USB_maple +extends = renamed From 22b99a2e382034f951568dda8d2c70af06ddc47f Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 23 Feb 2022 18:03:44 +0000 Subject: [PATCH 503/532] [cron] Bump distribution date (2022-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 ee4b4a636b..d188ab5068 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 "2022-02-22" +//#define STRING_DISTRIBUTION_DATE "2022-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 9c86aea477..838b89c01d 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 "2022-02-22" + #define STRING_DISTRIBUTION_DATE "2022-02-23" #endif /** From 142042760796807d92800cc1bdf93a86f614bc88 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 24 Feb 2022 18:47:57 -0600 Subject: [PATCH 504/532] =?UTF-8?q?=F0=9F=8E=A8=20=20Move=20PROPORTIONAL?= =?UTF-8?q?=5FFONT=5FRATIO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 2d1b14107d..910e779b2a 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -2337,6 +2337,15 @@ // For serial echo, the number of digits after the decimal point //#define SERIAL_FLOAT_PRECISION 4 +/** + * Set the number of proportional font spaces required to fill up a typical character space. + * This can help to better align the output of commands like `G29 O` Mesh Output. + * + * For clients that use a fixed-width font (like OctoPrint), leave this set to 1.0. + * Otherwise, adjust according to your client and font. + */ +#define PROPORTIONAL_FONT_RATIO 1.0 + // @section extras /** @@ -3780,15 +3789,6 @@ //#define REPORT_FAN_CHANGE // Report the new fan speed when changed by M106 (and others) -/** - * Set the number of proportional font spaces required to fill up a typical character space. - * This can help to better align the output of commands like `G29 O` Mesh Output. - * - * For clients that use a fixed-width font (like OctoPrint), leave this set to 1.0. - * Otherwise, adjust according to your client and font. - */ -#define PROPORTIONAL_FONT_RATIO 1.0 - /** * Spend 28 bytes of SRAM to optimize the G-code parser */ From 103b5f1ead5f610f95f19ad02327d73ea2767038 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Fri, 25 Feb 2022 06:07:00 +0000 Subject: [PATCH 505/532] [cron] Bump distribution date (2022-02-25) --- 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 d188ab5068..40cef79e87 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 "2022-02-23" +//#define STRING_DISTRIBUTION_DATE "2022-02-25" /** * 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 838b89c01d..62cd2b23a2 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 "2022-02-23" + #define STRING_DISTRIBUTION_DATE "2022-02-25" #endif /** From 87c4cd20e514b9fc94450e9503e268cc014490e8 Mon Sep 17 00:00:00 2001 From: tombrazier <68918209+tombrazier@users.noreply.github.com> Date: Sat, 26 Feb 2022 20:30:33 +0000 Subject: [PATCH 506/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20steps-to-mm=20with?= =?UTF-8?q?=20backlash=20(#23814)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/feature/backlash.cpp | 31 ++++++++++++++++++++++++++----- Marlin/src/feature/backlash.h | 9 ++++++++- Marlin/src/module/planner.cpp | 27 ++++++++++++++++++++------- 3 files changed, 54 insertions(+), 13 deletions(-) diff --git a/Marlin/src/feature/backlash.cpp b/Marlin/src/feature/backlash.cpp index 24c0f2ca0c..23458cf86c 100644 --- a/Marlin/src/feature/backlash.cpp +++ b/Marlin/src/feature/backlash.cpp @@ -29,6 +29,11 @@ #include "../module/motion.h" #include "../module/planner.h" +axis_bits_t Backlash::last_direction_bits; +#ifdef BACKLASH_SMOOTHING_MM + xyz_long_t Backlash::residual_error{0}; +#endif + #ifdef BACKLASH_DISTANCE_MM #if ENABLED(BACKLASH_GCODE) xyz_float_t Backlash::distance_mm = BACKLASH_DISTANCE_MM; @@ -61,7 +66,6 @@ Backlash backlash; */ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const int32_t &dc, const axis_bits_t dm, block_t * const block) { - static axis_bits_t last_direction_bits; axis_bits_t changed_dir = last_direction_bits ^ dm; // Ignore direction change unless steps are taken in that direction #if DISABLED(CORE_BACKLASH) || EITHER(MARKFORGED_XY, MARKFORGED_YX) @@ -91,10 +95,6 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const // smoothing distance. Since the computation of this proportion involves a floating point // division, defer computation until needed. float segment_proportion = 0; - - // Residual error carried forward across multiple segments, so correction can be applied - // to segments where there is no direction change. - static xyz_long_t residual_error{0}; #else // No direction change, no correction. if (!changed_dir) return; @@ -153,6 +153,27 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const } } +int32_t Backlash::applied_steps(const AxisEnum axis) { + if (axis >= LINEAR_AXES) return 0; + + const bool reversing = TEST(last_direction_bits, axis); + + #ifdef BACKLASH_SMOOTHING_MM + const int32_t residual_error_axis = residual_error[axis]; + #else + constexpr int32_t residual_error_axis = 0; + #endif + + // At startup it is assumed the last move was forwards. So the applied + // steps will always be a non-positive number. + + if (!reversing) return -residual_error_axis; + + const float f_corr = float(correction) / 255.0f; + const int32_t full_error_axis = -f_corr * distance_mm[axis] * planner.settings.axis_steps_per_mm[axis]; + return full_error_axis - residual_error_axis; +} + #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING) #include "../module/probe.h" diff --git a/Marlin/src/feature/backlash.h b/Marlin/src/feature/backlash.h index 17504cc781..ef29012cb1 100644 --- a/Marlin/src/feature/backlash.h +++ b/Marlin/src/feature/backlash.h @@ -27,6 +27,12 @@ constexpr uint8_t all_on = 0xFF, all_off = 0x00; class Backlash { +private: + static axis_bits_t last_direction_bits; + #ifdef BACKLASH_SMOOTHING_MM + static xyz_long_t residual_error; + #endif + public: #if ENABLED(BACKLASH_GCODE) static xyz_float_t distance_mm; @@ -71,7 +77,8 @@ public: return has_measurement(X_AXIS) || has_measurement(Y_AXIS) || has_measurement(Z_AXIS); } - void add_correction_steps(const int32_t &da, const int32_t &db, const int32_t &dc, const axis_bits_t dm, block_t * const block); + static void add_correction_steps(const int32_t &da, const int32_t &db, const int32_t &dc, const axis_bits_t dm, block_t * const block); + static int32_t applied_steps(const AxisEnum axis); }; extern Backlash backlash; diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index d2e11f62fe..37b264a3c5 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1706,7 +1706,8 @@ void Planner::endstop_triggered(const AxisEnum axis) { } float Planner::triggered_position_mm(const AxisEnum axis) { - return stepper.triggered_position(axis) * mm_per_step[axis]; + const float result = DIFF_TERN(BACKLASH_COMPENSATION, stepper.triggered_position(axis), backlash.applied_steps(axis)); + return result * mm_per_step[axis]; } void Planner::finish_and_disable() { @@ -1728,8 +1729,8 @@ float Planner::get_axis_position_mm(const AxisEnum axis) { // Protect the access to the position. const bool was_enabled = stepper.suspend(); - const int32_t p1 = stepper.position(CORE_AXIS_1), - p2 = stepper.position(CORE_AXIS_2); + const int32_t p1 = DIFF_TERN(BACKLASH_COMPENSATION, stepper.position(CORE_AXIS_1), backlash.applied_steps(CORE_AXIS_1)), + p2 = DIFF_TERN(BACKLASH_COMPENSATION, stepper.position(CORE_AXIS_2), backlash.applied_steps(CORE_AXIS_2)); if (was_enabled) stepper.wake_up(); @@ -1738,7 +1739,7 @@ float Planner::get_axis_position_mm(const AxisEnum axis) { axis_steps = (axis == CORE_AXIS_2 ? CORESIGN(p1 - p2) : p1 + p2) * 0.5f; } else - axis_steps = stepper.position(axis); + axis_steps = DIFF_TERN(BACKLASH_COMPENSATION, stepper.position(axis), backlash.applied_steps(axis)); #elif EITHER(MARKFORGED_XY, MARKFORGED_YX) @@ -1755,11 +1756,12 @@ float Planner::get_axis_position_mm(const AxisEnum axis) { axis_steps = ((axis == CORE_AXIS_1) ? p1 - p2 : p2); } else - axis_steps = stepper.position(axis); + axis_steps = DIFF_TERN(BACKLASH_COMPENSATION, stepper.position(axis), backlash.applied_steps(axis)); #else axis_steps = stepper.position(axis); + TERN_(BACKLASH_COMPENSATION, axis_steps -= backlash.applied_steps(axis)); #endif @@ -2841,6 +2843,9 @@ void Planner::buffer_sync_block(TERN_(LASER_SYNCHRONOUS_M106_M107, uint8_t sync_ block->flag = sync_flag; block->position = position; + #if ENABLED(BACKLASH_COMPENSATION) + LOOP_LINEAR_AXES(axis) block->position[axis] += backlash.applied_steps((AxisEnum)axis); + #endif #if BOTH(HAS_FAN, LASER_SYNCHRONOUS_M106_M107) FANS_LOOP(i) block->fan_speed[i] = thermalManager.fan_speed[i]; @@ -3108,13 +3113,21 @@ void Planner::set_machine_position_mm(const abce_pos_t &abce) { LROUND(abce.k * settings.axis_steps_per_mm[K_AXIS]) ) ); + if (has_blocks_queued()) { //previous_nominal_speed_sqr = 0.0; // Reset planner junction speeds. Assume start from rest. //previous_speed.reset(); buffer_sync_block(); } - else - stepper.set_position(position); + else { + #if ENABLED(BACKLASH_COMPENSATION) + abce_long_t stepper_pos = position; + LOOP_LINEAR_AXES(axis) stepper_pos[axis] += backlash.applied_steps((AxisEnum)axis); + stepper.set_position(stepper_pos); + #else + stepper.set_position(position); + #endif + } } void Planner::set_position_mm(const xyze_pos_t &xyze) { From 358ffddef80c50bdbce21407c7538041c9934f4b Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Sun, 27 Feb 2022 09:34:44 +1300 Subject: [PATCH 507/532] =?UTF-8?q?=F0=9F=90=9B=20ESP32=20=5Fdelay=5Fms,?= =?UTF-8?q?=20fix=20u8g=5Fesp32=5Fspi.cpp=20(#23810)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/ESP32/HAL.cpp | 2 ++ Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp | 1 + 2 files changed, 3 insertions(+) diff --git a/Marlin/src/HAL/ESP32/HAL.cpp b/Marlin/src/HAL/ESP32/HAL.cpp index adf5cecabe..4000dcc908 100644 --- a/Marlin/src/HAL/ESP32/HAL.cpp +++ b/Marlin/src/HAL/ESP32/HAL.cpp @@ -167,6 +167,8 @@ uint8_t MarlinHAL::get_reset_source() { return rtc_get_reset_reason(1); } void MarlinHAL::reboot() { ESP.restart(); } +void _delay_ms(int delay_ms) { delay(delay_ms); } + // return free memory between end of heap (or end bss) and whatever is current int MarlinHAL::freeMemory() { return ESP.getFreeHeap(); } diff --git a/Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp b/Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp index e454130d43..0aa66ed2cf 100644 --- a/Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp +++ b/Marlin/src/HAL/ESP32/u8g_esp32_spi.cpp @@ -30,6 +30,7 @@ #include #include "Arduino.h" #include "../shared/HAL_SPI.h" +#include "HAL.h" #include "SPI.h" static SPISettings spiConfig; From f7f29c6b5eb0d1b9a5cde7b4318dca506e3a5be5 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Sun, 27 Feb 2022 11:45:33 +1300 Subject: [PATCH 508/532] =?UTF-8?q?=E2=9C=A8=20MKS=20Robin=20Nano=203.1=20?= =?UTF-8?q?(#23795)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/boards.h | 21 +++---- Marlin/src/pins/pins.h | 2 + .../boards/marlin_STM32F407VET6_CCM.json | 56 +++++++++++++++++++ ini/stm32f4.ini | 23 ++++++++ 4 files changed, 92 insertions(+), 10 deletions(-) create mode 100644 buildroot/share/PlatformIO/boards/marlin_STM32F407VET6_CCM.json diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 4435452005..5ee99b533f 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -404,16 +404,17 @@ #define BOARD_MKS_ROBIN2 4226 // MKS_ROBIN2 (STM32F407ZE) #define BOARD_MKS_ROBIN_PRO_V2 4227 // MKS Robin Pro V2 (STM32F407VE) #define BOARD_MKS_ROBIN_NANO_V3 4228 // MKS Robin Nano V3 (STM32F407VG) -#define BOARD_MKS_MONSTER8 4229 // MKS Monster8 (STM32F407VG) -#define BOARD_ANET_ET4 4230 // ANET ET4 V1.x (STM32F407VG) -#define BOARD_ANET_ET4P 4231 // ANET ET4P V1.x (STM32F407VG) -#define BOARD_FYSETC_CHEETAH_V20 4232 // FYSETC Cheetah V2.0 -#define BOARD_TH3D_EZBOARD_V2 4233 // TH3D EZBoard v2.0 -#define BOARD_INDEX_REV03 4234 // Index PnP Controller REV03 (STM32F407VE/VG) -#define BOARD_MKS_ROBIN_NANO_V1_3_F4 4235 // MKS Robin Nano V1.3 and MKS Robin Nano-S V1.3 (STM32F407VE) -#define BOARD_MKS_EAGLE 4236 // MKS Eagle (STM32F407VE) -#define BOARD_ARTILLERY_RUBY 4237 // Artillery Ruby (STM32F401RC) -#define BOARD_FYSETC_SPIDER_V2_2 4238 // FYSETC Spider V2.2 (STM32F446VE) +#define BOARD_MKS_ROBIN_NANO_V3_1 4229 // MKS Robin Nano V3.1 (STM32F407VE) +#define BOARD_MKS_MONSTER8 4230 // MKS Monster8 (STM32F407VG) +#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 +#define BOARD_TH3D_EZBOARD_V2 4234 // TH3D EZBoard v2.0 +#define BOARD_INDEX_REV03 4235 // Index PnP Controller REV03 (STM32F407VE/VG) +#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) // // ARM Cortex M7 diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 0afff4bd42..88e7946edc 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -669,6 +669,8 @@ #include "stm32f4/pins_MKS_ROBIN_PRO_V2.h" // STM32F4 env:mks_robin_pro2 #elif MB(MKS_ROBIN_NANO_V3) #include "stm32f4/pins_MKS_ROBIN_NANO_V3.h" // STM32F4 env:mks_robin_nano_v3 env:mks_robin_nano_v3_usb_flash_drive env:mks_robin_nano_v3_usb_flash_drive_msc +#elif MB(MKS_ROBIN_NANO_V3_1) + #include "stm32f4/pins_MKS_ROBIN_NANO_V3.h" // STM32F4 env:mks_robin_nano_v3_1 env:mks_robin_nano_v3_1_usb_flash_drive env:mks_robin_nano_v3_1_usb_flash_drive_msc #elif MB(ANET_ET4) #include "stm32f4/pins_ANET_ET4.h" // STM32F4 env:Anet_ET4_OpenBLT #elif MB(ANET_ET4P) diff --git a/buildroot/share/PlatformIO/boards/marlin_STM32F407VET6_CCM.json b/buildroot/share/PlatformIO/boards/marlin_STM32F407VET6_CCM.json new file mode 100644 index 0000000000..faf32c200e --- /dev/null +++ b/buildroot/share/PlatformIO/boards/marlin_STM32F407VET6_CCM.json @@ -0,0 +1,56 @@ +{ + "build": { + "core": "stm32", + "cpu": "cortex-m4", + "extra_flags": "-DSTM32F407xx -DSTM32F4", + "f_cpu": "168000000L", + "hwids": [ + [ + "0x1EAF", + "0x0003" + ], + [ + "0x0483", + "0x3748" + ] + ], + "mcu": "stm32f407vet6", + "product_line": "STM32F407xx", + "variant": "Generic_F4x7Vx" + }, + "debug": { + "default_tools": [ + "stlink" + ], + "jlink_device": "STM32F407VE", + "openocd_extra_args": [ + "-c", + "reset_config none" + ], + "openocd_target": "stm32f4x", + "svd_path": "STM32F40x.svd" + }, + "frameworks": [ + "arduino", + "cmsis", + "stm32cube", + "libopencm3" + ], + "name": "STM32F407VE (128k RAM, 64k CCM RAM, 512k Flash", + "upload": { + "disable_flushing": false, + "maximum_ram_size": 131072, + "maximum_size": 524288, + "protocol": "stlink", + "protocols": [ + "stlink", + "dfu", + "jlink" + ], + "require_upload_port": true, + "use_1200bps_touch": false, + "wait_for_upload_port": false + }, + "url": "https://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32-high-performance-mcus/stm32f4-series/stm32f407-417/stm32f407vg.html", + "vendor": "Generic" +} diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini index c7d70dd01d..9e6e213427 100644 --- a/ini/stm32f4.ini +++ b/ini/stm32f4.ini @@ -440,6 +440,29 @@ build_flags = ${env:mks_robin_nano_v3_usb_flash_drive.build_flags} -DUSBD_USE_CDC_MSC build_unflags = -DUSBD_USE_CDC +# +# MKS Robin Nano V3_1 +# +[env:mks_robin_nano_v3_1] +extends = env:mks_robin_nano_v3 +board = marlin_STM32F407VET6_CCM + +# +# MKS Robin Nano V3.1 with USB Flash Drive Support +# Currently, using a STM32duino fork, until USB Host get merged +# +[env:mks_robin_nano_v3_1_usb_flash_drive] +extends = env:mks_robin_nano_v3_usb_flash_drive +board = marlin_STM32F407VET6_CCM + +# +# MKS Robin Nano V3.1 with USB Flash Drive Support and Shared Media +# Currently, using a STM32duino fork, until USB Host and USB Device MSC get merged +# +[env:mks_robin_nano_v3_1_usb_flash_drive_msc] +extends = env:mks_robin_nano_v3_usb_flash_drive_msc +board = marlin_STM32F407VET6_CCM + # # MKS Eagle # 5 TMC2209 uart mode on board From c2c257ace75292dcc5d815d259dc790349db0e7b Mon Sep 17 00:00:00 2001 From: sam <8531653+minteyay@users.noreply.github.com> Date: Sun, 27 Feb 2022 00:48:59 +0200 Subject: [PATCH 509/532] =?UTF-8?q?=F0=9F=93=BA=20BTT=20SKR=20Mini=20E3=20?= =?UTF-8?q?with=20Fysetc=20V2.1=20/=20MKS=20V3=20/=20BTT=20V1=20Mini=20128?= =?UTF-8?q?64=20(#23793)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stm32f1/pins_BTT_SKR_MINI_E3_common.h | 66 ++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) 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 a8ba9049ef..92d65babfa 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 @@ -235,9 +235,73 @@ #define TFTGLCD_CS PA9 #endif + + #elif ENABLED(FYSETC_MINI_12864_2_1) + + #error "CAUTION! FYSETC_MINI_12864_2_1 / MKS_MINI_12864_V3 / BTT_MINI_12864_V1 requires wiring modifications. See 'pins_BTT_SKR_MINI_E3_common.h' for details. Comment out this line to continue." + + /** + * FYSETC_MINI_12864_2_1 / MKS_MINI_12864_V3 / BTT_MINI_12864_V1 display pinout + * + * Board Display + * ------ ------ + * PB5 |10 9 | PA15 (BEEP) |10 9 | BTN_ENC + * PA9 | 8 7 | RESET LCD_CS | 8 7 | LCD A0 + * PA10 | 6 5 | PB9 LCD_RST | 6 5 | RED + * PB8 | 4 3 | PB15 (GREEN) | 4 3 | (BLUE) + * GND | 2 1 | 5V GND | 2 1 | 5V + * ------ ------ + * EXP1 EXP1 + * + * --- ------ + * RST | 1 | (MISO) |10 9 | SCK + * (RX2) PA2 | 2 | BTN_EN1 | 8 7 | (SS) + * (TX2) PA3 | 3 | BTN_EN2 | 6 5 | MOSI + * GND | 4 | (CD) | 4 3 | (RST) + * 5V | 5 | (GND) | 2 1 | (KILL) + * --- ------ + * TFT EXP2 + * + * Needs custom cable: + * + * Board Display + * + * EXP1-1 ----------- EXP1-1 + * EXP1-2 ----------- EXP1-2 + * EXP1-3 ----------- EXP2-6 + * EXP1-4 ----------- EXP1-5 + * EXP1-5 ----------- EXP2-8 + * EXP1-6 ----------- EXP1-6 + * EXP1-8 ----------- EXP1-8 + * EXP1-9 ----------- EXP1-9 + * EXP1-10 ----------- EXP1-7 + * + * TFT-2 ----------- EXP2-9 + * TFT-3 ----------- EXP2-5 + * + * for backlight configuration see steps 2 (V2.1) and 3 in https://wiki.fysetc.com/Mini12864_Panel/ + */ + + #define LCD_PINS_RS PA9 // CS + #define LCD_PINS_ENABLE PA3 // MOSI + #define LCD_BACKLIGHT_PIN -1 + #define NEOPIXEL_PIN PB8 + #define LCD_CONTRAST 255 + #define LCD_RESET_PIN PA10 + + #define DOGLCD_CS PA9 + #define DOGLCD_A0 PB5 + #define DOGLCD_SCK PA2 + #define DOGLCD_MOSI PA3 + + #define BTN_ENC PA15 + #define BTN_EN1 PB9 + #define BTN_EN2 PB15 + + #define FORCE_SOFT_SPI #else - #error "Only CR10_STOCKDISPLAY, ZONESTAR_LCD, ENDER2_STOCKDISPLAY, MKS_MINI_12864, and TFTGLCD_PANEL_(SPI|I2C) are currently supported on the BIGTREE_SKR_MINI_E3." + #error "Only CR10_STOCKDISPLAY, ZONESTAR_LCD, ENDER2_STOCKDISPLAY, MKS_MINI_12864, TFTGLCD_PANEL_(SPI|I2C), FYSETC_MINI_12864_2_1, MKS_MINI_12864_V3, and BTT_MINI_12864_V1 are currently supported on the BIGTREE_SKR_MINI_E3." #endif #endif // HAS_WIRED_LCD From 12b038dde58a63c06b21f05c594419000c61dcdf Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Sun, 27 Feb 2022 11:50:17 +1300 Subject: [PATCH 510/532] =?UTF-8?q?=F0=9F=94=A7=20SHOW=5FCUSTOM=5FBOOTSCRE?= =?UTF-8?q?EN=20sanity-check=20(#23807)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/SanityCheck.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 9c74ce32db..7b335dc929 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -860,6 +860,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS */ #if ENABLED(SHOW_CUSTOM_BOOTSCREEN) && NONE(HAS_MARLINUI_U8GLIB, TOUCH_UI_FTDI_EVE) #error "SHOW_CUSTOM_BOOTSCREEN requires Graphical LCD or TOUCH_UI_FTDI_EVE." +#elif ENABLED(SHOW_CUSTOM_BOOTSCREEN) && DISABLED(SHOW_BOOTSCREEN) + #error "SHOW_CUSTOM_BOOTSCREEN requires SHOW_BOOTSCREEN." #elif ENABLED(CUSTOM_STATUS_SCREEN_IMAGE) && !HAS_MARLINUI_U8GLIB #error "CUSTOM_STATUS_SCREEN_IMAGE requires a 128x64 DOGM B/W Graphical LCD." #endif From 0e7be8e8c4b1a7ca351ce19b462cac2d27fab82d Mon Sep 17 00:00:00 2001 From: "M. FURIC Franck" Date: Sat, 26 Feb 2022 23:54:04 +0100 Subject: [PATCH 511/532] =?UTF-8?q?=E2=9C=A8=20LCD=20Backlight=20Timer=20(?= =?UTF-8?q?#23768)?= 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/Configuration_adv.h | 5 ++++ Marlin/src/inc/SanityCheck.h | 8 ++++++ Marlin/src/lcd/language/language_en.h | 1 + Marlin/src/lcd/language/language_fr.h | 1 + Marlin/src/lcd/marlinui.cpp | 24 ++++++++++++++-- Marlin/src/lcd/marlinui.h | 8 ++++++ Marlin/src/lcd/menu/menu_configuration.cpp | 4 +++ Marlin/src/module/settings.cpp | 32 ++++++++++++++++++++++ 9 files changed, 82 insertions(+), 3 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 6f7b1bdf4a..7162e74acb 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -2820,7 +2820,7 @@ #define BUTTON_DELAY_EDIT 50 // (ms) Button repeat delay for edit screens #define BUTTON_DELAY_MENU 250 // (ms) Button repeat delay for menus - //#define TOUCH_IDLE_SLEEP 300 // (secs) Turn off the TFT backlight if set (5mn) + //#define TOUCH_IDLE_SLEEP 300 // (s) Turn off the TFT backlight if set (5mn) #define TOUCH_SCREEN_CALIBRATION diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 910e779b2a..4a9cb77b8b 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1277,6 +1277,11 @@ #define FEEDRATE_CHANGE_BEEP_FREQUENCY 440 #endif +// +// LCD Backlight Timeout +// +//#define LCD_BACKLIGHT_TIMEOUT 30 // (s) Timeout before turning off the backlight + #if HAS_BED_PROBE && EITHER(HAS_MARLINUI_MENU, HAS_TFT_LVGL_UI) //#define PROBE_OFFSET_WIZARD // Add a Probe Z Offset calibration option to the LCD menu #if ENABLED(PROBE_OFFSET_WIZARD) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 7b335dc929..e847339e2a 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2857,6 +2857,14 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #endif #endif +#if LCD_BACKLIGHT_TIMEOUT + #if !HAS_ENCODER_ACTION + #error "LCD_BACKLIGHT_TIMEOUT requires an LCD with encoder or keypad." + #elif !PIN_EXISTS(LCD_BACKLIGHT) + #error "LCD_BACKLIGHT_TIMEOUT requires LCD_BACKLIGHT_PIN." + #endif +#endif + /** * Some boards forbid the use of -1 Native USB */ diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index d8d161701f..9925f225e3 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -402,6 +402,7 @@ namespace Language_en { LSTR MSG_ADVANCE_K_E = _UxGT("Advance K *"); LSTR MSG_CONTRAST = _UxGT("LCD Contrast"); LSTR MSG_BRIGHTNESS = _UxGT("LCD Brightness"); + LSTR MSG_LCD_BKL_TIMEOUT = _UxGT("LCD Sleep (s)"); LSTR MSG_STORE_EEPROM = _UxGT("Store Settings"); LSTR MSG_LOAD_EEPROM = _UxGT("Load Settings"); LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restore Defaults"); diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h index 2eb64fc2c2..02f9d2f549 100644 --- a/Marlin/src/lcd/language/language_fr.h +++ b/Marlin/src/lcd/language/language_fr.h @@ -335,6 +335,7 @@ namespace Language_fr { LSTR MSG_ADVANCE_K_E = _UxGT("Avance K *"); LSTR MSG_BRIGHTNESS = _UxGT("Luminosité LCD"); LSTR MSG_CONTRAST = _UxGT("Contraste LCD"); + LSTR MSG_LCD_BKL_TIMEOUT = _UxGT("Veille LCD (s)"); LSTR MSG_STORE_EEPROM = _UxGT("Enregistrer config."); LSTR MSG_LOAD_EEPROM = _UxGT("Charger config."); LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restaurer défauts"); diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index d0cc2a25b8..d2884cc3f1 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -180,6 +180,15 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; volatile int8_t encoderDiff; // Updated in update_buttons, added to encoderPosition every LCD update #endif +#if LCD_BACKLIGHT_TIMEOUT + uint16_t MarlinUI::lcd_backlight_timeout; // Initialized by settings.load() + millis_t MarlinUI::backlight_off_ms = 0; + void MarlinUI::refresh_backlight_timeout() { + backlight_off_ms = lcd_backlight_timeout ? millis() + lcd_backlight_timeout * 1000UL : 0; + WRITE(LCD_BACKLIGHT_PIN, HIGH); + } +#endif + void MarlinUI::init() { init_lcd(); @@ -1033,14 +1042,18 @@ void MarlinUI::init() { reset_status_timeout(ms); + #if LCD_BACKLIGHT_TIMEOUT + refresh_backlight_timeout(); + #endif + refresh(LCDVIEW_REDRAW_NOW); #if LED_POWEROFF_TIMEOUT > 0 if (!powerManager.psu_on) leds.reset_timeout(ms); #endif - } + } // encoder activity - #endif + #endif // HAS_ENCODER_ACTION // This runs every ~100ms when idling often enough. // Instead of tracking changes just redraw the Status Screen once per second. @@ -1137,6 +1150,13 @@ void MarlinUI::init() { return_to_status(); #endif + #if LCD_BACKLIGHT_TIMEOUT + if (backlight_off_ms && ELAPSED(ms, backlight_off_ms)) { + WRITE(LCD_BACKLIGHT_PIN, LOW); // Backlight off + backlight_off_ms = 0; + } + #endif + // Change state of drawing flag between screen updates if (!drawing_screen) switch (lcdDrawUpdate) { case LCDVIEW_CLEAR_CALL_REDRAW: diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index 17c2468737..15e9f73d65 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -275,6 +275,14 @@ public: FORCE_INLINE static void refresh_brightness() { set_brightness(brightness); } #endif + #if LCD_BACKLIGHT_TIMEOUT + #define LCD_BKL_TIMEOUT_MIN 1 + #define LCD_BKL_TIMEOUT_MAX (60*60*18) // 18 hours max within uint16_t + static uint16_t lcd_backlight_timeout; + static millis_t backlight_off_ms; + static void refresh_backlight_timeout(); + #endif + #if HAS_DWIN_E3V2_BASIC static void refresh(); #else diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 33e43b08eb..b4e9287bd4 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -541,6 +541,10 @@ void menu_configuration() { #if HAS_LCD_CONTRAST && LCD_CONTRAST_MIN < LCD_CONTRAST_MAX EDIT_ITEM_FAST(uint8, MSG_CONTRAST, &ui.contrast, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX, ui.refresh_contrast, true); #endif + #if LCD_BACKLIGHT_TIMEOUT && LCD_BKL_TIMEOUT_MIN < LCD_BKL_TIMEOUT_MAX + EDIT_ITEM(uint16_4, MSG_LCD_BKL_TIMEOUT, &ui.lcd_backlight_timeout, LCD_BKL_TIMEOUT_MIN, LCD_BKL_TIMEOUT_MAX, ui.refresh_backlight_timeout); + #endif + #if ENABLED(FWRETRACT) SUBMENU(MSG_RETRACT, menu_config_retract); #endif diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index bcbe8fa985..66316edbbb 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -391,6 +391,13 @@ typedef struct SettingsDataStruct { // uint8_t lcd_brightness; // M256 B + // + // LCD_BACKLIGHT_TIMEOUT + // + #if LCD_BACKLIGHT_TIMEOUT + uint16_t lcd_backlight_timeout; // (G-code needed) + #endif + // // Controller fan settings // @@ -607,6 +614,10 @@ void MarlinSettings::postprocess() { // Moved as last update due to interference with Neopixel init TERN_(HAS_LCD_CONTRAST, ui.refresh_contrast()); TERN_(HAS_LCD_BRIGHTNESS, ui.refresh_brightness()); + + #if LCD_BACKLIGHT_TIMEOUT + ui.refresh_backlight_timeout(); + #endif } #if BOTH(PRINTCOUNTER, EEPROM_SETTINGS) @@ -1108,6 +1119,13 @@ void MarlinSettings::postprocess() { EEPROM_WRITE(lcd_brightness); } + // + // LCD Backlight Timeout + // + #if LCD_BACKLIGHT_TIMEOUT + EEPROM_WRITE(ui.lcd_backlight_timeout); + #endif + // // Controller Fan // @@ -2015,6 +2033,13 @@ void MarlinSettings::postprocess() { TERN_(HAS_LCD_BRIGHTNESS, if (!validating) ui.brightness = lcd_brightness); } + // + // LCD Backlight Timeout + // + #if LCD_BACKLIGHT_TIMEOUT + EEPROM_READ(ui.lcd_backlight_timeout); + #endif + // // Controller Fan // @@ -3040,6 +3065,13 @@ void MarlinSettings::reset() { // TERN_(HAS_LCD_BRIGHTNESS, ui.brightness = LCD_BRIGHTNESS_DEFAULT); + // + // LCD Backlight Timeout + // + #if LCD_BACKLIGHT_TIMEOUT + ui.lcd_backlight_timeout = LCD_BACKLIGHT_TIMEOUT; + #endif + // // Controller Fan // From 4b0e84d9f320d3e15f8f5c70542349e7f793299e Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sun, 27 Feb 2022 00:25:43 +0000 Subject: [PATCH 512/532] [cron] Bump distribution date (2022-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 40cef79e87..5884952505 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 "2022-02-25" +//#define STRING_DISTRIBUTION_DATE "2022-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 62cd2b23a2..68ddf4a18c 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 "2022-02-25" + #define STRING_DISTRIBUTION_DATE "2022-02-27" #endif /** From 9ea6a588c36760b3d53d06748cfc58b4204580e7 Mon Sep 17 00:00:00 2001 From: kisslorand <50251547+kisslorand@users.noreply.github.com> Date: Mon, 28 Feb 2022 04:38:11 +0200 Subject: [PATCH 513/532] =?UTF-8?q?=E2=9C=A8=20M21=20P=20/=20S=20/=20U=20-?= =?UTF-8?q?=20Select=20Volume=20(#23780)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/Configuration_adv.h | 5 ++++- Marlin/src/gcode/gcode.h | 2 +- Marlin/src/gcode/host/M115.cpp | 5 +++++ Marlin/src/gcode/sd/M21_M22.cpp | 15 ++++++++++++++- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 4a9cb77b8b..e5379ed84f 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1631,7 +1631,10 @@ // Enable if SD detect is rendered useless (e.g., by using an SD extender) //#define NO_SD_DETECT - // Multiple volume support - EXPERIMENTAL. + /** + * Multiple volume support - EXPERIMENTAL. + * Adds 'M21 Pm' / 'M21 S' / 'M21 U' to mount SD Card / USB Drive. + */ //#define MULTI_VOLUME #if ENABLED(MULTI_VOLUME) #define VOLUME_SD_ONBOARD diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 78dd0bc680..a150aca41d 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -91,7 +91,7 @@ * *** Print from Media (SDSUPPORT) *** * M20 - List SD card. (Requires SDSUPPORT) - * M21 - Init SD card. (Requires SDSUPPORT) + * M21 - Init SD card. (Requires SDSUPPORT) With MULTI_VOLUME select a drive with `M21 Pn` / 'M21 S' / 'M21 U'. * M22 - Release SD card. (Requires SDSUPPORT) * M23 - Select SD file: "M23 /path/file.gco". (Requires SDSUPPORT) * M24 - Start/resume SD print. (Requires SDSUPPORT) diff --git a/Marlin/src/gcode/host/M115.cpp b/Marlin/src/gcode/host/M115.cpp index 45e0061a5b..36731c23da 100644 --- a/Marlin/src/gcode/host/M115.cpp +++ b/Marlin/src/gcode/host/M115.cpp @@ -142,6 +142,11 @@ void GcodeSuite::M115() { // SDCARD (M20, M23, M24, etc.) cap_line(F("SDCARD"), ENABLED(SDSUPPORT)); + // MULTI_VOLUME (M21 S/M21 U) + #if ENABLED(SDSUPPORT) + cap_line(F("MULTI_VOLUME"), ENABLED(MULTI_VOLUME)); + #endif + // REPEAT (M808) cap_line(F("REPEAT"), ENABLED(GCODE_REPEAT_MARKERS)); diff --git a/Marlin/src/gcode/sd/M21_M22.cpp b/Marlin/src/gcode/sd/M21_M22.cpp index c7f41f9c81..aec0de27ca 100644 --- a/Marlin/src/gcode/sd/M21_M22.cpp +++ b/Marlin/src/gcode/sd/M21_M22.cpp @@ -29,8 +29,21 @@ /** * M21: Init SD Card + * + * With MULTI_VOLUME: + * P0 or S - Change to the SD Card and mount it + * P1 or U - Change to the USB Drive and mount it */ -void GcodeSuite::M21() { card.mount(); } +void GcodeSuite::M21() { + #if ENABLED(MULTI_VOLUME) + const int8_t vol = parser.intval('P', -1); + if (vol == 0 || parser.seen_test('S')) // "S" for SD Card + card.changeMedia(&card.media_driver_sdcard); + else if (vol == 1 || parser.seen_test('U')) // "U" for USB + card.changeMedia(&card.media_driver_usbFlash); + #endif + card.mount(); +} /** * M22: Release SD Card From 1aa988c63c5803e6a54ad8c3e59a7bd610a51997 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Mon, 28 Feb 2022 06:07:09 +0000 Subject: [PATCH 514/532] [cron] Bump distribution date (2022-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 5884952505..d481674947 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 "2022-02-27" +//#define STRING_DISTRIBUTION_DATE "2022-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 68ddf4a18c..46ce0820c7 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 "2022-02-27" + #define STRING_DISTRIBUTION_DATE "2022-02-28" #endif /** From d09a2ee80a057de7e56b13c041f6a7beb8023515 Mon Sep 17 00:00:00 2001 From: Ludy Date: Tue, 1 Mar 2022 23:09:11 +0100 Subject: [PATCH 515/532] =?UTF-8?q?=F0=9F=8C=90=20Update=20German=20langua?= =?UTF-8?q?ge=20(#23832)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/language/language_de.h | 150 ++++++++++++++++++++- Marlin/src/lcd/language/language_jp_kana.h | 1 - 2 files changed, 143 insertions(+), 8 deletions(-) diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h index 6a5f504e91..bf408d436f 100644 --- a/Marlin/src/lcd/language/language_de.h +++ b/Marlin/src/lcd/language/language_de.h @@ -56,19 +56,42 @@ namespace Language_de { LSTR MSG_DISABLE_STEPPERS = _UxGT("Motoren deaktivieren"); // M84 :: Max length 19 characters LSTR MSG_DEBUG_MENU = _UxGT("Debug-Menü"); LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Statusbalken-Test"); + LSTR MSG_HOMING = _UxGT("Homing"); LSTR MSG_AUTO_HOME = _UxGT("Auto Home"); + LSTR MSG_AUTO_HOME_A = _UxGT("Home @"); LSTR MSG_AUTO_HOME_X = _UxGT("Home X"); LSTR MSG_AUTO_HOME_Y = _UxGT("Home Y"); LSTR MSG_AUTO_HOME_Z = _UxGT("Home Z"); + LSTR MSG_FILAMENT_SET = _UxGT("Fila. Einstellungen"); + LSTR MSG_FILAMENT_MAN = _UxGT("Filament Management"); + LSTR MSG_LEVBED_FL = _UxGT("Vorne Links"); + LSTR MSG_LEVBED_FR = _UxGT("Vorne Rechts"); + LSTR MSG_LEVBED_C = _UxGT("Mitte"); + LSTR MSG_LEVBED_BL = _UxGT("Hinten Links"); + LSTR MSG_LEVBED_BR = _UxGT("Hinten Rechts"); + LSTR MSG_MANUAL_MESH = _UxGT("manuelles Netz"); + LSTR MSG_AUTO_MESH = _UxGT("Netz auto. erstellen"); LSTR MSG_AUTO_Z_ALIGN = _UxGT("Z-Achsen ausgleichen"); + LSTR MSG_ITERATION = _UxGT("G34 Iteration: %i"); + LSTR MSG_DECREASING_ACCURACY = _UxGT("Genauigkeit sinkt!"); + LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Genauigkeit erreicht"); LSTR MSG_LEVEL_BED_HOMING = _UxGT("XYZ homen"); LSTR MSG_LEVEL_BED_WAITING = _UxGT("Klick zum Starten"); LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Nächste Koordinate"); LSTR MSG_LEVEL_BED_DONE = _UxGT("Nivellieren fertig!"); LSTR MSG_Z_FADE_HEIGHT = _UxGT("Ausblendhöhe"); LSTR MSG_SET_HOME_OFFSETS = _UxGT("Setze Homeversatz"); + LSTR MSG_HOME_OFFSET_X = _UxGT("Homeversatz X"); + LSTR MSG_HOME_OFFSET_Y = _UxGT("Homeversatz Y"); + LSTR MSG_HOME_OFFSET_Z = _UxGT("Homeversatz Z"); + LSTR MSG_HOME_OFFSET_I = _UxGT("Homeversatz ") STR_I; + LSTR MSG_HOME_OFFSET_J = _UxGT("Homeversatz ") STR_J; + LSTR MSG_HOME_OFFSET_K = _UxGT("Homeversatz ") STR_K; LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Homeversatz aktiv"); LSTR MSG_SET_ORIGIN = _UxGT("Setze Nullpunkte"); //"G92 X0 Y0 Z0" commented out in marlinui.cpp + LSTR MSG_TRAMMING_WIZARD = _UxGT("Tramming Assistent"); + LSTR MSG_SELECT_ORIGIN = _UxGT("Wählen Sie Ursprung"); + LSTR MSG_LAST_VALUE_SP = _UxGT("Letzter Wert "); #if HAS_PREHEAT LSTR MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" Vorwärmen"); LSTR MSG_PREHEAT_1_H = PREHEAT_1_LABEL _UxGT(" Vorwärmen ~"); @@ -88,11 +111,21 @@ namespace Language_de { #endif LSTR MSG_PREHEAT_CUSTOM = _UxGT("benutzerdef. Heizen"); LSTR MSG_COOLDOWN = _UxGT("Abkühlen"); + LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frequenz"); LSTR MSG_LASER_MENU = _UxGT("Laser"); - LSTR MSG_LASER_POWER = _UxGT("Laserleistung"); LSTR MSG_SPINDLE_MENU = _UxGT("Spindel-Steuerung"); + LSTR MSG_LASER_POWER = _UxGT("Laserleistung"); LSTR MSG_SPINDLE_POWER = _UxGT("Spindelleistung"); + LSTR MSG_LASER_TOGGLE = _UxGT("Laser umschalten"); + LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Gebläse umschalten"); + LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Luftunterstützung"); + LSTR MSG_LASER_PULSE_MS = _UxGT("Test Impuls ms"); + LSTR MSG_LASER_FIRE_PULSE = _UxGT("Fire Impuls"); + LSTR MSG_FLOWMETER_FAULT = _UxGT("Feh. Kühlmittelfluss"); + LSTR MSG_SPINDLE_TOGGLE = _UxGT("Spindel umschalten"); + LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Vakuum umschalten"); + LSTR MSG_SPINDLE_FORWARD = _UxGT("Spindel vorwärts"); LSTR MSG_SPINDLE_REVERSE = _UxGT("Spindelrichtung"); LSTR MSG_SWITCH_PS_ON = _UxGT("Netzteil ein"); LSTR MSG_SWITCH_PS_OFF = _UxGT("Netzteil aus"); @@ -102,10 +135,17 @@ namespace Language_de { LSTR MSG_BED_LEVELING = _UxGT("Bett-Nivellierung"); LSTR MSG_LEVEL_BED = _UxGT("Bett nivellieren"); LSTR MSG_BED_TRAMMING = _UxGT("Bett ausrichten"); + LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Das Bett anpassen, bis zum auslösen."); + LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Ecken in der Toleranz. Bett ausger."); + LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Gute Punkte: "); + LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Letztes Z: "); LSTR MSG_NEXT_CORNER = _UxGT("Nächste Ecke"); LSTR MSG_MESH_EDITOR = _UxGT("Netz Editor"); + LSTR MSG_MESH_VIEWER = _UxGT("Netzbetrachter"); LSTR MSG_EDIT_MESH = _UxGT("Netz bearbeiten"); + LSTR MSG_MESH_VIEW = _UxGT("Netz ansehen"); LSTR MSG_EDITING_STOPPED = _UxGT("Netzbearb. angeh."); + LSTR MSG_NO_VALID_MESH = _UxGT("Kein gültiges Netz"); LSTR MSG_PROBING_POINT = _UxGT("Messpunkt"); LSTR MSG_MESH_X = _UxGT("Index X"); LSTR MSG_MESH_Y = _UxGT("Index Y"); @@ -121,6 +161,7 @@ namespace Language_de { LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplizieren"); LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Spiegelkopie"); LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("vollstä. Kontrolle"); + LSTR MSG_IDEX_DUPE_GAP = _UxGT("X-Lücke duplizieren"); LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2. Düse Z"); LSTR MSG_HOTEND_OFFSET_A = _UxGT("2. Düse @"); LSTR MSG_UBL_DOING_G29 = _UxGT("G29 ausführen"); @@ -128,6 +169,7 @@ namespace Language_de { LSTR MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling"); LSTR MSG_LCD_TILTING_MESH = _UxGT("Berührungspunkt"); LSTR MSG_UBL_MANUAL_MESH = _UxGT("Netz manuell erst."); + LSTR MSG_UBL_MESH_WIZARD = _UxGT("UBL Netz Assistent"); LSTR MSG_UBL_BC_INSERT = _UxGT("Unterlegen & messen"); LSTR MSG_UBL_BC_INSERT2 = _UxGT("Messen"); LSTR MSG_UBL_BC_REMOVE = _UxGT("Entfernen & messen"); @@ -212,6 +254,10 @@ namespace Language_de { LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violett"); LSTR MSG_SET_LEDS_WHITE = _UxGT("Weiß"); LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Standard"); + LSTR MSG_LED_CHANNEL_N = _UxGT("Kanal ="); + LSTR MSG_LEDS2 = _UxGT("Lichter #2"); + LSTR MSG_NEO2_PRESETS = _UxGT("Licht #2 Voreinst."); + LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Helligkeit"); LSTR MSG_CUSTOM_LEDS = _UxGT("Benutzerdefiniert"); LSTR MSG_INTENSITY_R = _UxGT("Intensität Rot"); LSTR MSG_INTENSITY_G = _UxGT("Intensität Grün"); @@ -224,6 +270,9 @@ namespace Language_de { LSTR MSG_MOVE_X = _UxGT("Bewege X"); LSTR MSG_MOVE_Y = _UxGT("Bewege Y"); LSTR MSG_MOVE_Z = _UxGT("Bewege Z"); + LSTR MSG_MOVE_I = _UxGT("Bewege ") STR_I; + LSTR MSG_MOVE_J = _UxGT("Bewege ") STR_J; + LSTR MSG_MOVE_K = _UxGT("Bewege ") STR_K; LSTR MSG_MOVE_E = _UxGT("Bewege Extruder"); LSTR MSG_MOVE_EN = _UxGT("Bewege Extruder *"); LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hotend zu kalt"); @@ -232,7 +281,17 @@ namespace Language_de { LSTR MSG_MOVE_1MM = _UxGT(" 1,0 mm"); LSTR MSG_MOVE_10MM = _UxGT(" 10,0 mm"); LSTR MSG_MOVE_100MM = _UxGT("100,0 mm"); + LSTR MSG_MOVE_0001IN = _UxGT("0.001 in"); + LSTR MSG_MOVE_001IN = _UxGT("0.010 in"); + LSTR MSG_MOVE_01IN = _UxGT("0.100 in"); + LSTR MSG_MOVE_1IN = _UxGT("1.000 in"); LSTR MSG_SPEED = _UxGT("Geschw."); + LSTR MSG_MAXSPEED = _UxGT("Max Geschw. (mm/s)"); + LSTR MSG_MAXSPEED_X = _UxGT("Max ") STR_A _UxGT(" Geschw."); + LSTR MSG_MAXSPEED_Y = _UxGT("Max ") STR_B _UxGT(" Geschw."); + LSTR MSG_MAXSPEED_Z = _UxGT("Max ") STR_C _UxGT(" Geschw."); + LSTR MSG_MAXSPEED_E = _UxGT("Max ") STR_E _UxGT(" Geschw."); + LSTR MSG_MAXSPEED_A = _UxGT("Max @ Geschw."); LSTR MSG_BED_Z = _UxGT("Bett Z"); LSTR MSG_NOZZLE = _UxGT("Düse"); LSTR MSG_NOZZLE_N = _UxGT("Düse ~"); @@ -240,6 +299,10 @@ namespace Language_de { LSTR MSG_NOZZLE_STANDBY = _UxGT("Düse bereit"); LSTR MSG_BED = _UxGT("Bett"); LSTR MSG_CHAMBER = _UxGT("Gehäuse"); + LSTR MSG_COOLER = _UxGT("Laser-Kühlmittel"); + LSTR MSG_COOLER_TOGGLE = _UxGT("Kühler umschalten"); + LSTR MSG_FLOWMETER_SAFETY = _UxGT("Durchflusssicherheit"); + LSTR MSG_LASER = _UxGT("Laser"); LSTR MSG_FAN_SPEED = _UxGT("Lüfter"); LSTR MSG_FAN_SPEED_N = _UxGT("Lüfter ~"); LSTR MSG_STORED_FAN_N = _UxGT("Gespeich. Lüfter ~"); @@ -261,6 +324,7 @@ namespace Language_de { LSTR MSG_LCD_OFF = _UxGT("aus"); LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autotune"); LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *"); + LSTR MSG_PID_CYCLE = _UxGT("PID Zyklus"); LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID Tuning fertig"); LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune fehlge. Falscher Extruder"); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune fehlge. Temperatur zu hoch."); @@ -289,7 +353,6 @@ namespace Language_de { LSTR MSG_VMIN = _UxGT("V min "); LSTR MSG_VTRAV_MIN = _UxGT("V min Leerfahrt"); LSTR MSG_ACCELERATION = _UxGT("Beschleunigung"); - LSTR MSG_AMAX = _UxGT("A max "); // space intentional LSTR MSG_AMAX_A = _UxGT("A max ") STR_A; LSTR MSG_AMAX_B = _UxGT("A max ") STR_B; LSTR MSG_AMAX_C = _UxGT("A max ") STR_C; @@ -324,6 +387,8 @@ namespace Language_de { LSTR MSG_ADVANCE_K = _UxGT("Vorschubfaktor"); LSTR MSG_ADVANCE_K_E = _UxGT("Vorschubfaktor *"); LSTR MSG_CONTRAST = _UxGT("LCD-Kontrast"); + LSTR MSG_BRIGHTNESS = _UxGT("LCD Helligkeit"); + LSTR MSG_LCD_BKL_TIMEOUT = _UxGT("LCD-Ruhezustand (s)"); LSTR MSG_STORE_EEPROM = _UxGT("Konfig. speichern"); LSTR MSG_LOAD_EEPROM = _UxGT("Konfig. laden"); LSTR MSG_RESTORE_DEFAULTS = _UxGT("Standardwerte laden"); @@ -353,20 +418,32 @@ namespace Language_de { LSTR MSG_BUTTON_DONE = _UxGT("Fertig"); LSTR MSG_BUTTON_BACK = _UxGT("Zurück"); LSTR MSG_BUTTON_PROCEED = _UxGT("Weiter"); + LSTR MSG_BUTTON_SKIP = _UxGT("Überspringen"); + LSTR MSG_BUTTON_INFO = _UxGT("Info"); + LSTR MSG_BUTTON_LEVEL = _UxGT("Level"); + LSTR MSG_BUTTON_PAUSE = _UxGT("Pause"); + LSTR MSG_BUTTON_RESUME = _UxGT("Fortsetzen"); + LSTR MSG_BUTTON_ADVANCED = _UxGT("Erweitert"); LSTR MSG_PAUSING = _UxGT("Pause..."); LSTR MSG_PAUSE_PRINT = _UxGT("SD-Druck pausieren"); + LSTR MSG_ADVANCED_PAUSE = _UxGT("Erweiterte Pause"); LSTR MSG_RESUME_PRINT = _UxGT("SD-Druck fortsetzen"); + LSTR MSG_HOST_START_PRINT = _UxGT("Host-Druck starten"); LSTR MSG_STOP_PRINT = _UxGT("SD-Druck abbrechen"); + LSTR MSG_END_LOOPS = _UxGT("Wiederholung beenden"); LSTR MSG_PRINTING_OBJECT = _UxGT("Objekt drucken"); LSTR MSG_CANCEL_OBJECT = _UxGT("Objekt abbrechen"); LSTR MSG_CANCEL_OBJECT_N = _UxGT("Objekt abbrechen ="); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Wiederh. n. Stroma."); + LSTR MSG_CONTINUE_PRINT_JOB = _UxGT("Druckauftrag fortset."); LSTR MSG_MEDIA_MENU = _UxGT("Druck vom Medium"); LSTR MSG_NO_MEDIA = _UxGT("Kein Medium"); LSTR MSG_DWELL = _UxGT("Warten..."); LSTR MSG_USERWAIT = _UxGT("Klick zum Fortsetzen"); LSTR MSG_PRINT_PAUSED = _UxGT("Druck pausiert..."); LSTR MSG_PRINTING = _UxGT("Druckt..."); + LSTR MSG_STOPPING = _UxGT("Stoppen..."); + LSTR MSG_REMAINING_TIME = _UxGT("Verbleiben"); LSTR MSG_PRINT_ABORTED = _UxGT("Druck abgebrochen"); LSTR MSG_PRINT_DONE = _UxGT("Druck fertig"); LSTR MSG_NO_MOVE = _UxGT("Motoren angeschaltet"); @@ -416,6 +493,7 @@ namespace Language_de { LSTR MSG_BLTOUCH_STOW = _UxGT("Einfahren"); LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Ausfahren"); LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Modus"); + LSTR MSG_BLTOUCH_SPEED_MODE = _UxGT("High Speed"); LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Modus"); LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Modus"); LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store"); @@ -431,33 +509,43 @@ namespace Language_de { LSTR MSG_MANUAL_DEPLOY = _UxGT("Z-Sonde ausfahren"); LSTR MSG_MANUAL_STOW = _UxGT("Z-Sonde einfahren"); LSTR MSG_HOME_FIRST = _UxGT("Vorher %s%s%s homen"); + LSTR MSG_ZPROBE_SETTINGS = _UxGT("Sondeneinstellungen"); LSTR MSG_ZPROBE_OFFSETS = _UxGT("Sondenversatz"); LSTR MSG_ZPROBE_XOFFSET = _UxGT("Sondenversatz X"); LSTR MSG_ZPROBE_YOFFSET = _UxGT("Sondenversatz Y"); LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Sondenversatz Z"); + LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Bewege Düse zum Bett"); LSTR MSG_BABYSTEP_X = _UxGT("Babystep X"); LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y"); LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z"); + LSTR MSG_BABYSTEP_I = _UxGT("Babystep ") STR_I; + LSTR MSG_BABYSTEP_J = _UxGT("Babystep ") STR_J; + LSTR MSG_BABYSTEP_K = _UxGT("Babystep ") STR_K; LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total"); LSTR MSG_ENDSTOP_ABORT = _UxGT("Abbr. mit Endstopp"); LSTR MSG_HEATING_FAILED_LCD = _UxGT("HEIZEN ERFOLGLOS"); LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("REDUND. TEMP-ABWEI."); LSTR MSG_THERMAL_RUNAWAY = " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT"); + LSTR MSG_TEMP_MALFUNCTION = _UxGT("TEMP-FEHLER"); LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("BETT") " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT"); LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("GEH.") " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT"); + LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("Kühler Runaway"); + LSTR MSG_COOLING_FAILED = _UxGT("Kühlung fehlgeschla."); LSTR MSG_ERR_MAXTEMP = " " LCD_STR_THERMOMETER _UxGT(" ÜBERSCHRITTEN"); LSTR MSG_ERR_MINTEMP = " " LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN"); LSTR MSG_HALTED = _UxGT("DRUCKER GESTOPPT"); + LSTR MSG_PLEASE_WAIT = _UxGT("Bitte warten..."); LSTR MSG_PLEASE_RESET = _UxGT("Bitte neustarten"); - LSTR MSG_SHORT_DAY = _UxGT("t"); // One character only - LSTR MSG_SHORT_HOUR = _UxGT("h"); // One character only - LSTR MSG_SHORT_MINUTE = _UxGT("m"); // One character only + LSTR MSG_PREHEATING = _UxGT("vorheizen..."); LSTR MSG_HEATING = _UxGT("heizt..."); LSTR MSG_COOLING = _UxGT("kühlt..."); LSTR MSG_BED_HEATING = _UxGT("Bett heizt..."); LSTR MSG_BED_COOLING = _UxGT("Bett kühlt..."); + LSTR MSG_PROBE_HEATING = _UxGT("Sonde heizt..."); + LSTR MSG_PROBE_COOLING = _UxGT("Sonde kühlt..."); LSTR MSG_CHAMBER_HEATING = _UxGT("Gehäuse heizt..."); LSTR MSG_CHAMBER_COOLING = _UxGT("Gehäuse kühlt..."); + LSTR MSG_LASER_COOLING = _UxGT("Laser kühlt..."); LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta kalibrieren"); LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibriere X"); LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibriere Y"); @@ -475,8 +563,9 @@ namespace Language_de { LSTR MSG_3POINT_LEVELING = _UxGT("3-Punkt-Nivellierung"); LSTR MSG_LINEAR_LEVELING = _UxGT("Lineare Nivellierung"); LSTR MSG_BILINEAR_LEVELING = _UxGT("Bilineare Nivell."); - LSTR MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling"); + LSTR MSG_UBL_LEVELING = _UxGT("Einheit. Bettnivell."); LSTR MSG_MESH_LEVELING = _UxGT("Netz-Nivellierung"); + LSTR MSG_MESH_DONE = _UxGT("Nivellierung fertig"); LSTR MSG_INFO_STATS_MENU = _UxGT("Drucker-Statistik"); LSTR MSG_INFO_BOARD_MENU = _UxGT("Board-Info"); LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistoren"); @@ -486,23 +575,39 @@ namespace Language_de { LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Runaway Watch: AUS"); LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Runaway Watch: AN"); LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout"); + LSTR MSG_FAN_SPEED_FAULT = _UxGT("Fehler Lüftergeschw."); + LSTR MSG_CASE_LIGHT = _UxGT("Beleuchtung"); LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Helligkeit"); - LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Falscher Drucker"); #if LCD_WIDTH >= 20 || HAS_DWIN_E3V2 + LSTR MSG_MEDIA_NOT_INSERTED = _UxGT("Kein Medium eingelegt."); + LSTR MSG_PLEASE_WAIT_REBOOT = _UxGT("Bitte auf Neustart warten. "); + LSTR MSG_PLEASE_PREHEAT = _UxGT("Bitte das Hot-End vorheizen."); + LSTR MSG_INFO_PRINT_COUNT_RESET = _UxGT("Druckzähler zurücksetzen"); LSTR MSG_INFO_PRINT_COUNT = _UxGT("Gesamte Drucke"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Komplette Drucke"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Gesamte Druckzeit"); LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Längste Druckzeit"); LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Gesamt Extrudiert"); + LSTR MSG_COLORS_GET = _UxGT("Farbe"); + LSTR MSG_COLORS_SELECT = _UxGT("Farben auswählen"); + LSTR MSG_COLORS_APPLIED = _UxGT("Farben verwenden"); + LSTR MSG_COLORS_RED = _UxGT("Rot"); + LSTR MSG_COLORS_GREEN = _UxGT("Grün"); + LSTR MSG_COLORS_BLUE = _UxGT("Blau"); + LSTR MSG_COLORS_WHITE = _UxGT("Weiß"); + LSTR MSG_UI_LANGUAGE = _UxGT("UI Sprache"); + LSTR MSG_SOUND_ENABLE = _UxGT("Ton aktivieren"); + LSTR MSG_LOCKSCREEN = _UxGT("Bildschirm sperren"); #else LSTR MSG_INFO_PRINT_COUNT = _UxGT("Drucke"); LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Komplette"); LSTR MSG_INFO_PRINT_TIME = _UxGT("Gesamte"); LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Längste"); LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extrud."); + LSTR MSG_PLEASE_PREHEAT = _UxGT("Bitte vorheizen"); #endif LSTR MSG_INFO_MIN_TEMP = _UxGT("Min Temp"); @@ -528,6 +633,8 @@ namespace Language_de { LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Düse: "); LSTR MSG_RUNOUT_SENSOR = _UxGT("Runout-Sensor"); LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Runout-Weg mm"); + LSTR MSG_RUNOUT_ENABLE = _UxGT("Runout aktivieren"); + LSTR MSG_FANCHECK = _UxGT("Lüftergeschw. prüfen"); LSTR MSG_KILL_HOMING_FAILED = _UxGT("Homing gescheitert"); LSTR MSG_LCD_PROBING_FAILED = _UxGT("Probing gescheitert"); @@ -639,4 +746,33 @@ namespace Language_de { #endif LSTR MSG_REHEAT = _UxGT("Erneut aufheizen"); LSTR MSG_REHEATING = _UxGT("Erneut aufhei. ..."); + LSTR MSG_REHEATDONE = _UxGT("Aufwärmen fertig"); + + LSTR MSG_PROBE_WIZARD = _UxGT("Sonden-Assistent"); + LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Sonden-Bezug"); + LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Bewege zur Position"); + + LSTR MSG_XATC = _UxGT("X-Verdreh-Assistent"); + LSTR MSG_XATC_DONE = _UxGT("X-Verdreh-Assi fertig!"); + LSTR MSG_XATC_UPDATE_Z_OFFSET = _UxGT("Z-Versatz Sonde akt. auf "); + + LSTR MSG_SOUND = _UxGT("Ton"); + + LSTR MSG_TOP_LEFT = _UxGT("Oben Links"); + LSTR MSG_BOTTOM_LEFT = _UxGT("Unten Links"); + LSTR MSG_TOP_RIGHT = _UxGT("Oben Rechts"); + LSTR MSG_BOTTOM_RIGHT = _UxGT("Unten Rechts"); + LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Kalibrierung beendet"); + LSTR MSG_CALIBRATION_FAILED = _UxGT("Kalibrierung geschei."); + + LSTR MSG_DRIVER_BACKWARD = _UxGT(" Driver zurück"); + + LSTR MSG_SD_CARD = _UxGT("SD Karte"); + LSTR MSG_USB_DISK = _UxGT("USB Disk"); + + LSTR MSG_HOST_SHUTDOWN = _UxGT("Host abschalten"); + + LSTR MSG_SHORT_DAY = _UxGT("t"); // 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_jp_kana.h b/Marlin/src/lcd/language/language_jp_kana.h index 3a876a07e3..164dca8fcf 100644 --- a/Marlin/src/lcd/language/language_jp_kana.h +++ b/Marlin/src/lcd/language/language_jp_kana.h @@ -137,7 +137,6 @@ namespace Language_jp_kana { LSTR MSG_VMIN = _UxGT("サイショウオクリソクド"); // "Vmin" LSTR MSG_VTRAV_MIN = _UxGT("サイショウイドウソクド"); // "VTrav min" LSTR MSG_ACCELERATION = _UxGT("カソクド mm/s") SUPERSCRIPT_TWO; // "Accel" - LSTR MSG_AMAX = _UxGT("サイダイカソクド "); // "Amax " LSTR MSG_A_RETRACT = _UxGT("ヒキコミカソクド"); // "A-retract" LSTR MSG_A_TRAVEL = _UxGT("イドウカソクド"); // "A-travel" LSTR MSG_TEMPERATURE = _UxGT("オンド"); // "Temperature" From 15de14dd89d9d6037e6e7e2286b051f4827f026d Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Wed, 2 Mar 2022 11:11:26 +1300 Subject: [PATCH 516/532] =?UTF-8?q?=F0=9F=94=A8=20Fix=20'renamed'=20env=20?= =?UTF-8?q?(platform=20=3D=20ststm32)=20(#23831)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ini/renamed.ini | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ini/renamed.ini b/ini/renamed.ini index abc8ee5c28..b325476d2f 100644 --- a/ini/renamed.ini +++ b/ini/renamed.ini @@ -14,7 +14,8 @@ # [renamed] -platform = native +platform = ststm32 +board = genericSTM32F103RE # # List of environment names that are no longer used From 6b7868d943cd08b83af085ea0d507cc8433799c6 Mon Sep 17 00:00:00 2001 From: tombrazier <68918209+tombrazier@users.noreply.github.com> Date: Tue, 1 Mar 2022 22:14:52 +0000 Subject: [PATCH 517/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20backlash=20applied?= =?UTF-8?q?=20steps=20when=20config=20changes=20(#23826)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Followup to #23814 --- Marlin/src/feature/backlash.cpp | 76 ++++++++++++++++----------- Marlin/src/feature/backlash.h | 46 ++++++++++------ Marlin/src/gcode/calibrate/G425.cpp | 60 +++++++++++++-------- Marlin/src/gcode/calibrate/M425.cpp | 24 ++++----- Marlin/src/lcd/extui/ui_api.cpp | 12 ++--- Marlin/src/lcd/menu/menu_backlash.cpp | 13 +++-- Marlin/src/module/planner.cpp | 16 +++--- Marlin/src/module/settings.cpp | 37 ++++++------- 8 files changed, 167 insertions(+), 117 deletions(-) diff --git a/Marlin/src/feature/backlash.cpp b/Marlin/src/feature/backlash.cpp index 23458cf86c..84382cf856 100644 --- a/Marlin/src/feature/backlash.cpp +++ b/Marlin/src/feature/backlash.cpp @@ -30,9 +30,7 @@ #include "../module/planner.h" axis_bits_t Backlash::last_direction_bits; -#ifdef BACKLASH_SMOOTHING_MM - xyz_long_t Backlash::residual_error{0}; -#endif +xyz_long_t Backlash::residual_error{0}; #ifdef BACKLASH_DISTANCE_MM #if ENABLED(BACKLASH_GCODE) @@ -43,7 +41,7 @@ axis_bits_t Backlash::last_direction_bits; #endif #if ENABLED(BACKLASH_GCODE) - uint8_t Backlash::correction = (BACKLASH_CORRECTION) * 0xFF; + uint8_t Backlash::correction = (BACKLASH_CORRECTION) * all_on; #ifdef BACKLASH_SMOOTHING_MM float Backlash::smoothing_mm = BACKLASH_SMOOTHING_MM; #endif @@ -87,7 +85,7 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const #endif last_direction_bits ^= changed_dir; - if (correction == 0) return; + if (!correction && !residual_error) return; #ifdef BACKLASH_SMOOTHING_MM // The segment proportion is a value greater than 0.0 indicating how much residual_error @@ -95,35 +93,28 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const // smoothing distance. Since the computation of this proportion involves a floating point // division, defer computation until needed. float segment_proportion = 0; - #else - // No direction change, no correction. - if (!changed_dir) return; - // No leftover residual error from segment to segment - xyz_long_t residual_error{0}; #endif - const float f_corr = float(correction) / 255.0f; + const float f_corr = float(correction) / all_on; LOOP_LINEAR_AXES(axis) { if (distance_mm[axis]) { - const bool reversing = TEST(dm,axis); + const bool reverse = TEST(dm, axis); // When an axis changes direction, add axis backlash to the residual error if (TEST(changed_dir, axis)) - residual_error[axis] += (reversing ? -f_corr : f_corr) * distance_mm[axis] * planner.settings.axis_steps_per_mm[axis]; + residual_error[axis] += (reverse ? -f_corr : f_corr) * distance_mm[axis] * planner.settings.axis_steps_per_mm[axis]; // Decide how much of the residual error to correct in this segment int32_t error_correction = residual_error[axis]; + if (reverse != (error_correction < 0)) + error_correction = 0; // Don't take up any backlash in this segment, as it would subtract steps + #ifdef BACKLASH_SMOOTHING_MM if (error_correction && smoothing_mm != 0) { - // Take up a portion of the residual_error in this segment, but only when - // the current segment travels in the same direction as the correction - if (reversing == (error_correction < 0)) { - if (segment_proportion == 0) segment_proportion = _MIN(1.0f, block->millimeters / smoothing_mm); - error_correction = CEIL(segment_proportion * error_correction); - } - else - error_correction = 0; // Don't take up any backlash in this segment, as it would subtract steps + // Take up a portion of the residual_error in this segment + if (segment_proportion == 0) segment_proportion = _MIN(1.0f, block->millimeters / smoothing_mm); + error_correction = CEIL(segment_proportion * error_correction); } #endif @@ -153,27 +144,52 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const } } -int32_t Backlash::applied_steps(const AxisEnum axis) { +int32_t Backlash::get_applied_steps(const AxisEnum axis) { if (axis >= LINEAR_AXES) return 0; - const bool reversing = TEST(last_direction_bits, axis); + const bool reverse = TEST(last_direction_bits, axis); - #ifdef BACKLASH_SMOOTHING_MM - const int32_t residual_error_axis = residual_error[axis]; - #else - constexpr int32_t residual_error_axis = 0; - #endif + const int32_t residual_error_axis = residual_error[axis]; // At startup it is assumed the last move was forwards. So the applied // steps will always be a non-positive number. - if (!reversing) return -residual_error_axis; + if (!reverse) return -residual_error_axis; - const float f_corr = float(correction) / 255.0f; + const float f_corr = float(correction) / all_on; const int32_t full_error_axis = -f_corr * distance_mm[axis] * planner.settings.axis_steps_per_mm[axis]; return full_error_axis - residual_error_axis; } +class Backlash::StepAdjuster { + xyz_long_t applied_steps; +public: + StepAdjuster() { + LOOP_LINEAR_AXES(axis) applied_steps[axis] = backlash.get_applied_steps((AxisEnum)axis); + } + ~StepAdjuster() { + // after backlash compensation parameter changes, ensure applied step count does not change + LOOP_LINEAR_AXES(axis) residual_error[axis] += backlash.get_applied_steps((AxisEnum)axis) - applied_steps[axis]; + } +}; + +void Backlash::set_correction_uint8(const uint8_t v) { + StepAdjuster adjuster; + correction = v; +} + +void Backlash::set_distance_mm(const AxisEnum axis, const float v) { + StepAdjuster adjuster; + distance_mm[axis] = v; +} + +#ifdef BACKLASH_SMOOTHING_MM + void Backlash::set_smoothing_mm(const float v) { + StepAdjuster adjuster; + smoothing_mm = v; + } +#endif + #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING) #include "../module/probe.h" diff --git a/Marlin/src/feature/backlash.h b/Marlin/src/feature/backlash.h index ef29012cb1..0bace526e5 100644 --- a/Marlin/src/feature/backlash.h +++ b/Marlin/src/feature/backlash.h @@ -24,27 +24,22 @@ #include "../inc/MarlinConfigPre.h" #include "../module/planner.h" -constexpr uint8_t all_on = 0xFF, all_off = 0x00; - class Backlash { +public: + static constexpr uint8_t all_on = 0xFF, all_off = 0x00; + private: static axis_bits_t last_direction_bits; - #ifdef BACKLASH_SMOOTHING_MM - static xyz_long_t residual_error; - #endif + static xyz_long_t residual_error; -public: #if ENABLED(BACKLASH_GCODE) - static xyz_float_t distance_mm; static uint8_t correction; + static xyz_float_t distance_mm; #ifdef BACKLASH_SMOOTHING_MM static float smoothing_mm; #endif - - static void set_correction(const_float_t v) { correction = _MAX(0, _MIN(1.0, v)) * all_on; } - static float get_correction() { return float(ui8_to_percent(correction)) / 100.0f; } #else - static constexpr uint8_t correction = (BACKLASH_CORRECTION) * 0xFF; + static constexpr uint8_t correction = (BACKLASH_CORRECTION) * all_on; static const xyz_float_t distance_mm; #ifdef BACKLASH_SMOOTHING_MM static constexpr float smoothing_mm = BACKLASH_SMOOTHING_MM; @@ -52,13 +47,13 @@ public: #endif #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING) - private: - static xyz_float_t measured_mm; - static xyz_uint8_t measured_count; - public: - static void measure_with_probe(); + static xyz_float_t measured_mm; + static xyz_uint8_t measured_count; #endif + class StepAdjuster; + +public: static float get_measurement(const AxisEnum a) { UNUSED(a); // Return the measurement averaged over all readings @@ -78,7 +73,24 @@ public: } static void add_correction_steps(const int32_t &da, const int32_t &db, const int32_t &dc, const axis_bits_t dm, block_t * const block); - static int32_t applied_steps(const AxisEnum axis); + static int32_t get_applied_steps(const AxisEnum axis); + + #if ENABLED(BACKLASH_GCODE) + static void set_correction_uint8(const uint8_t v); + static uint8_t get_correction_uint8() { return correction; } + static void set_correction(const float v) { set_correction_uint8(_MAX(0, _MIN(1.0, v)) * all_on + 0.5f); } + static float get_correction() { return float(get_correction_uint8()) / all_on; } + static void set_distance_mm(const AxisEnum axis, const float v); + static float get_distance_mm(const AxisEnum axis) {return distance_mm[axis];} + #ifdef BACKLASH_SMOOTHING_MM + static void set_smoothing_mm(const float v); + static float get_smoothing_mm() {return smoothing_mm;} + #endif + #endif + + #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING) + static void measure_with_probe(); + #endif }; extern Backlash backlash; diff --git a/Marlin/src/gcode/calibrate/G425.cpp b/Marlin/src/gcode/calibrate/G425.cpp index 906f8cc419..a2dec64bc3 100644 --- a/Marlin/src/gcode/calibrate/G425.cpp +++ b/Marlin/src/gcode/calibrate/G425.cpp @@ -105,13 +105,27 @@ struct measurements_t { }; #if ENABLED(BACKLASH_GCODE) - #define TEMPORARY_BACKLASH_CORRECTION(value) REMEMBER(tbst, backlash.correction, value) + class restorer_correction { + const uint8_t val_; + public: + restorer_correction(const uint8_t temp_val) : val_(backlash.get_correction_uint8()) { backlash.set_correction_uint8(temp_val); } + ~restorer_correction() { backlash.set_correction_uint8(val_); } + }; + + #define TEMPORARY_BACKLASH_CORRECTION(value) restorer_correction restorer_tbst(value) #else #define TEMPORARY_BACKLASH_CORRECTION(value) #endif #if ENABLED(BACKLASH_GCODE) && defined(BACKLASH_SMOOTHING_MM) - #define TEMPORARY_BACKLASH_SMOOTHING(value) REMEMBER(tbsm, backlash.smoothing_mm, value) + class restorer_smoothing { + const float val_; + public: + restorer_smoothing(const float temp_val) : val_(backlash.get_smoothing_mm()) { backlash.set_smoothing_mm(temp_val); } + ~restorer_smoothing() { backlash.set_smoothing_mm(val_); } + }; + + #define TEMPORARY_BACKLASH_SMOOTHING(value) restorer_smoothing restorer_tbsm(value) #else #define TEMPORARY_BACKLASH_SMOOTHING(value) #endif @@ -524,7 +538,7 @@ inline void calibrate_backlash(measurements_t &m, const float uncertainty) { { // New scope for TEMPORARY_BACKLASH_CORRECTION - TEMPORARY_BACKLASH_CORRECTION(all_off); + TEMPORARY_BACKLASH_CORRECTION(backlash.all_off); TEMPORARY_BACKLASH_SMOOTHING(0.0f); probe_sides(m, uncertainty); @@ -532,45 +546,45 @@ inline void calibrate_backlash(measurements_t &m, const float uncertainty) { #if ENABLED(BACKLASH_GCODE) #if HAS_X_CENTER - backlash.distance_mm.x = (m.backlash[LEFT] + m.backlash[RIGHT]) / 2; + backlash.set_distance_mm(X_AXIS, (m.backlash[LEFT] + m.backlash[RIGHT]) / 2); #elif ENABLED(CALIBRATION_MEASURE_LEFT) - backlash.distance_mm.x = m.backlash[LEFT]; + backlash.set_distance_mm(X_AXIS, m.backlash[LEFT]); #elif ENABLED(CALIBRATION_MEASURE_RIGHT) - backlash.distance_mm.x = m.backlash[RIGHT]; + backlash.set_distance_mm(X_AXIS, m.backlash[RIGHT]); #endif #if HAS_Y_CENTER - backlash.distance_mm.y = (m.backlash[FRONT] + m.backlash[BACK]) / 2; + backlash.set_distance_mm(Y_AXIS, (m.backlash[FRONT] + m.backlash[BACK]) / 2); #elif ENABLED(CALIBRATION_MEASURE_FRONT) - backlash.distance_mm.y = m.backlash[FRONT]; + backlash.set_distance_mm(Y_AXIS, m.backlash[FRONT]); #elif ENABLED(CALIBRATION_MEASURE_BACK) - backlash.distance_mm.y = m.backlash[BACK]; + backlash.set_distance_mm(Y_AXIS, m.backlash[BACK]); #endif - TERN_(HAS_Z_AXIS, if (AXIS_CAN_CALIBRATE(Z)) backlash.distance_mm.z = m.backlash[TOP]); + TERN_(HAS_Z_AXIS, if (AXIS_CAN_CALIBRATE(Z)) backlash.set_distance_mm(Z_AXIS, m.backlash[TOP])); #if HAS_I_CENTER - backlash.distance_mm.i = (m.backlash[IMINIMUM] + m.backlash[IMAXIMUM]) / 2; + backlash.set_distance_mm(I_AXIS, (m.backlash[IMINIMUM] + m.backlash[IMAXIMUM]) / 2); #elif ENABLED(CALIBRATION_MEASURE_IMIN) - backlash.distance_mm.i = m.backlash[IMINIMUM]; + backlash.set_distance_mm(I_AXIS, m.backlash[IMINIMUM]); #elif ENABLED(CALIBRATION_MEASURE_IMAX) - backlash.distance_mm.i = m.backlash[IMAXIMUM]; + backlash.set_distance_mm(I_AXIS, m.backlash[IMAXIMUM]); #endif #if HAS_J_CENTER - backlash.distance_mm.j = (m.backlash[JMINIMUM] + m.backlash[JMAXIMUM]) / 2; + backlash.set_distance_mm(J_AXIS, (m.backlash[JMINIMUM] + m.backlash[JMAXIMUM]) / 2); #elif ENABLED(CALIBRATION_MEASURE_JMIN) - backlash.distance_mm.j = m.backlash[JMINIMUM]; + backlash.set_distance_mm(J_AXIS, m.backlash[JMINIMUM]); #elif ENABLED(CALIBRATION_MEASURE_JMAX) - backlash.distance_mm.j = m.backlash[JMAXIMUM]; + backlash.set_distance_mm(J_AXIS, m.backlash[JMAXIMUM]); #endif #if HAS_K_CENTER - backlash.distance_mm.k = (m.backlash[KMINIMUM] + m.backlash[KMAXIMUM]) / 2; + backlash.set_distance_mm(K_AXIS, (m.backlash[KMINIMUM] + m.backlash[KMAXIMUM]) / 2); #elif ENABLED(CALIBRATION_MEASURE_KMIN) - backlash.distance_mm.k = m.backlash[KMINIMUM]; + backlash.set_distance_mm(K_AXIS, m.backlash[KMINIMUM]); #elif ENABLED(CALIBRATION_MEASURE_KMAX) - backlash.distance_mm.k = m.backlash[KMAXIMUM]; + backlash.set_distance_mm(K_AXIS, m.backlash[KMAXIMUM]); #endif #endif // BACKLASH_GCODE @@ -581,7 +595,7 @@ inline void calibrate_backlash(measurements_t &m, const float uncertainty) { // allowed directions to take up any backlash { // New scope for TEMPORARY_BACKLASH_CORRECTION - TEMPORARY_BACKLASH_CORRECTION(all_on); + TEMPORARY_BACKLASH_CORRECTION(backlash.all_on); TEMPORARY_BACKLASH_SMOOTHING(0.0f); const xyz_float_t move = LINEAR_AXIS_ARRAY( AXIS_CAN_CALIBRATE(X) * 3, AXIS_CAN_CALIBRATE(Y) * 3, AXIS_CAN_CALIBRATE(Z) * 3, @@ -611,7 +625,7 @@ inline void update_measurements(measurements_t &m, const AxisEnum axis) { * - Call calibrate_backlash() beforehand for best accuracy */ inline void calibrate_toolhead(measurements_t &m, const float uncertainty, const uint8_t extruder) { - TEMPORARY_BACKLASH_CORRECTION(all_on); + TEMPORARY_BACKLASH_CORRECTION(backlash.all_on); TEMPORARY_BACKLASH_SMOOTHING(0.0f); TERN(HAS_MULTI_HOTEND, set_nozzle(m, extruder), UNUSED(extruder)); @@ -648,7 +662,7 @@ inline void calibrate_toolhead(measurements_t &m, const float uncertainty, const * uncertainty in - How far away from the object to begin probing */ inline void calibrate_all_toolheads(measurements_t &m, const float uncertainty) { - TEMPORARY_BACKLASH_CORRECTION(all_on); + TEMPORARY_BACKLASH_CORRECTION(backlash.all_on); TEMPORARY_BACKLASH_SMOOTHING(0.0f); HOTEND_LOOP() calibrate_toolhead(m, uncertainty, e); @@ -674,7 +688,7 @@ inline void calibrate_all() { TERN_(HAS_HOTEND_OFFSET, reset_hotend_offsets()); - TEMPORARY_BACKLASH_CORRECTION(all_on); + TEMPORARY_BACKLASH_CORRECTION(backlash.all_on); TEMPORARY_BACKLASH_SMOOTHING(0.0f); // Do a fast and rough calibration of the toolheads diff --git a/Marlin/src/gcode/calibrate/M425.cpp b/Marlin/src/gcode/calibrate/M425.cpp index 2d36e0d410..6b1f56fcf6 100644 --- a/Marlin/src/gcode/calibrate/M425.cpp +++ b/Marlin/src/gcode/calibrate/M425.cpp @@ -63,7 +63,7 @@ void GcodeSuite::M425() { LOOP_LINEAR_AXES(a) { if (axis_can_calibrate(a) && parser.seen(AXIS_CHAR(a))) { planner.synchronize(); - backlash.distance_mm[a] = parser.has_value() ? parser.value_linear_units() : backlash.get_measurement(AxisEnum(a)); + backlash.set_distance_mm(AxisEnum(a), parser.has_value() ? parser.value_linear_units() : backlash.get_measurement(AxisEnum(a))); noArgs = false; } } @@ -77,25 +77,25 @@ void GcodeSuite::M425() { #ifdef BACKLASH_SMOOTHING_MM if (parser.seen('S')) { planner.synchronize(); - backlash.smoothing_mm = parser.value_linear_units(); + backlash.set_smoothing_mm(parser.value_linear_units()); noArgs = false; } #endif if (noArgs) { SERIAL_ECHOPGM("Backlash Correction "); - if (!backlash.correction) SERIAL_ECHOPGM("in"); + if (!backlash.get_correction_uint8()) SERIAL_ECHOPGM("in"); SERIAL_ECHOLNPGM("active:"); SERIAL_ECHOLNPGM(" Correction Amount/Fade-out: F", backlash.get_correction(), " (F1.0 = full, F0.0 = none)"); SERIAL_ECHOPGM(" Backlash Distance (mm): "); LOOP_LINEAR_AXES(a) if (axis_can_calibrate(a)) { SERIAL_CHAR(' ', AXIS_CHAR(a)); - SERIAL_ECHO(backlash.distance_mm[a]); + SERIAL_ECHO(backlash.get_distance_mm(AxisEnum(a))); SERIAL_EOL(); } #ifdef BACKLASH_SMOOTHING_MM - SERIAL_ECHOLNPGM(" Smoothing (mm): S", backlash.smoothing_mm); + SERIAL_ECHOLNPGM(" Smoothing (mm): S", backlash.get_smoothing_mm()); #endif #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING) @@ -118,15 +118,15 @@ void GcodeSuite::M425_report(const bool forReplay/*=true*/) { SERIAL_ECHOLNPGM_P( PSTR(" M425 F"), backlash.get_correction() #ifdef BACKLASH_SMOOTHING_MM - , PSTR(" S"), LINEAR_UNIT(backlash.smoothing_mm) + , PSTR(" S"), LINEAR_UNIT(backlash.get_smoothing_mm()) #endif , LIST_N(DOUBLE(LINEAR_AXES), - SP_X_STR, LINEAR_UNIT(backlash.distance_mm.x), - SP_Y_STR, LINEAR_UNIT(backlash.distance_mm.y), - SP_Z_STR, LINEAR_UNIT(backlash.distance_mm.z), - SP_I_STR, LINEAR_UNIT(backlash.distance_mm.i), - SP_J_STR, LINEAR_UNIT(backlash.distance_mm.j), - SP_K_STR, LINEAR_UNIT(backlash.distance_mm.k) + SP_X_STR, LINEAR_UNIT(backlash.get_distance_mm(X_AXIS)), + SP_Y_STR, LINEAR_UNIT(backlash.get_distance_mm(Y_AXIS)), + SP_Z_STR, LINEAR_UNIT(backlash.get_distance_mm(Z_AXIS)), + SP_I_STR, LINEAR_UNIT(backlash.get_distance_mm(I_AXIS)), + SP_J_STR, LINEAR_UNIT(backlash.get_distance_mm(J_AXIS)), + SP_K_STR, LINEAR_UNIT(backlash.get_distance_mm(K_AXIS)) ) ); } diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index f44e8bf720..bfcbc39d7b 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -861,16 +861,16 @@ namespace ExtUI { #endif #if ENABLED(BACKLASH_GCODE) - float getAxisBacklash_mm(const axis_t axis) { return backlash.distance_mm[axis]; } + float getAxisBacklash_mm(const axis_t axis) { return backlash.get_distance_mm((AxisEnum)axis); } void setAxisBacklash_mm(const_float_t value, const axis_t axis) - { backlash.distance_mm[axis] = constrain(value,0,5); } + { backlash.set_distance_mm((AxisEnum)axis, constrain(value,0,5)); } - float getBacklashCorrection_percent() { return ui8_to_percent(backlash.correction); } - void setBacklashCorrection_percent(const_float_t value) { backlash.correction = map(constrain(value, 0, 100), 0, 100, 0, 255); } + float getBacklashCorrection_percent() { return backlash.get_correction() * 100.0f; } + void setBacklashCorrection_percent(const_float_t value) { backlash.set_correction(constrain(value, 0, 100) / 100.0f); } #ifdef BACKLASH_SMOOTHING_MM - float getBacklashSmoothing_mm() { return backlash.smoothing_mm; } - void setBacklashSmoothing_mm(const_float_t value) { backlash.smoothing_mm = constrain(value, 0, 999); } + float getBacklashSmoothing_mm() { return backlash.get_smoothing_mm(); } + void setBacklashSmoothing_mm(const_float_t value) { backlash.set_smoothing_mm(constrain(value, 0, 999)); } #endif #endif diff --git a/Marlin/src/lcd/menu/menu_backlash.cpp b/Marlin/src/lcd/menu/menu_backlash.cpp index 5776234f72..faed8cf777 100644 --- a/Marlin/src/lcd/menu/menu_backlash.cpp +++ b/Marlin/src/lcd/menu/menu_backlash.cpp @@ -36,14 +36,20 @@ void menu_backlash() { START_MENU(); BACK_ITEM(MSG_MAIN); - EDIT_ITEM_FAST(percent, MSG_BACKLASH_CORRECTION, &backlash.correction, all_off, all_on); + editable.uint8 = backlash.get_correction_uint8(); + EDIT_ITEM_FAST(percent, MSG_BACKLASH_CORRECTION, &editable.uint8, backlash.all_off, backlash.all_on, []{ backlash.set_correction_uint8(editable.uint8); }); #if DISABLED(CORE_BACKLASH) || EITHER(MARKFORGED_XY, MARKFORGED_YX) #define _CAN_CALI AXIS_CAN_CALIBRATE #else #define _CAN_CALI(A) true #endif - #define EDIT_BACKLASH_DISTANCE(N) EDIT_ITEM_FAST(float43, MSG_BACKLASH_##N, &backlash.distance_mm[_AXIS(N)], 0.0f, 9.9f); + + #define EDIT_BACKLASH_DISTANCE(N) do { \ + editable.decimal = backlash.get_distance_mm(_AXIS(N)); \ + EDIT_ITEM_FAST(float43, MSG_BACKLASH_##N, &editable.decimal, 0.0f, 9.9f, []{ backlash.set_distance_mm(_AXIS(N), editable.decimal); }); \ + } while (0); + if (_CAN_CALI(A)) EDIT_BACKLASH_DISTANCE(A); #if HAS_Y_AXIS && _CAN_CALI(B) EDIT_BACKLASH_DISTANCE(B); @@ -62,7 +68,8 @@ void menu_backlash() { #endif #ifdef BACKLASH_SMOOTHING_MM - EDIT_ITEM_FAST(float43, MSG_BACKLASH_SMOOTHING, &backlash.smoothing_mm, 0.0f, 9.9f); + editable.decimal = backlash.get_smoothing_mm(); + EDIT_ITEM_FAST(float43, MSG_BACKLASH_SMOOTHING, &editable.decimal, 0.0f, 9.9f, []{ backlash.set_smoothing_mm(editable.decimal); }); #endif END_MENU(); diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 37b264a3c5..51440aac26 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1706,7 +1706,7 @@ void Planner::endstop_triggered(const AxisEnum axis) { } float Planner::triggered_position_mm(const AxisEnum axis) { - const float result = DIFF_TERN(BACKLASH_COMPENSATION, stepper.triggered_position(axis), backlash.applied_steps(axis)); + const float result = DIFF_TERN(BACKLASH_COMPENSATION, stepper.triggered_position(axis), backlash.get_applied_steps(axis)); return result * mm_per_step[axis]; } @@ -1729,8 +1729,8 @@ float Planner::get_axis_position_mm(const AxisEnum axis) { // Protect the access to the position. const bool was_enabled = stepper.suspend(); - const int32_t p1 = DIFF_TERN(BACKLASH_COMPENSATION, stepper.position(CORE_AXIS_1), backlash.applied_steps(CORE_AXIS_1)), - p2 = DIFF_TERN(BACKLASH_COMPENSATION, stepper.position(CORE_AXIS_2), backlash.applied_steps(CORE_AXIS_2)); + const int32_t p1 = DIFF_TERN(BACKLASH_COMPENSATION, stepper.position(CORE_AXIS_1), backlash.get_applied_steps(CORE_AXIS_1)), + p2 = DIFF_TERN(BACKLASH_COMPENSATION, stepper.position(CORE_AXIS_2), backlash.get_applied_steps(CORE_AXIS_2)); if (was_enabled) stepper.wake_up(); @@ -1739,7 +1739,7 @@ float Planner::get_axis_position_mm(const AxisEnum axis) { axis_steps = (axis == CORE_AXIS_2 ? CORESIGN(p1 - p2) : p1 + p2) * 0.5f; } else - axis_steps = DIFF_TERN(BACKLASH_COMPENSATION, stepper.position(axis), backlash.applied_steps(axis)); + axis_steps = DIFF_TERN(BACKLASH_COMPENSATION, stepper.position(axis), backlash.get_applied_steps(axis)); #elif EITHER(MARKFORGED_XY, MARKFORGED_YX) @@ -1756,12 +1756,12 @@ float Planner::get_axis_position_mm(const AxisEnum axis) { axis_steps = ((axis == CORE_AXIS_1) ? p1 - p2 : p2); } else - axis_steps = DIFF_TERN(BACKLASH_COMPENSATION, stepper.position(axis), backlash.applied_steps(axis)); + axis_steps = DIFF_TERN(BACKLASH_COMPENSATION, stepper.position(axis), backlash.get_applied_steps(axis)); #else axis_steps = stepper.position(axis); - TERN_(BACKLASH_COMPENSATION, axis_steps -= backlash.applied_steps(axis)); + TERN_(BACKLASH_COMPENSATION, axis_steps -= backlash.get_applied_steps(axis)); #endif @@ -2844,7 +2844,7 @@ void Planner::buffer_sync_block(TERN_(LASER_SYNCHRONOUS_M106_M107, uint8_t sync_ block->position = position; #if ENABLED(BACKLASH_COMPENSATION) - LOOP_LINEAR_AXES(axis) block->position[axis] += backlash.applied_steps((AxisEnum)axis); + LOOP_LINEAR_AXES(axis) block->position[axis] += backlash.get_applied_steps((AxisEnum)axis); #endif #if BOTH(HAS_FAN, LASER_SYNCHRONOUS_M106_M107) @@ -3122,7 +3122,7 @@ void Planner::set_machine_position_mm(const abce_pos_t &abce) { else { #if ENABLED(BACKLASH_COMPENSATION) abce_long_t stepper_pos = position; - LOOP_LINEAR_AXES(axis) stepper_pos[axis] += backlash.applied_steps((AxisEnum)axis); + LOOP_LINEAR_AXES(axis) stepper_pos[axis] += backlash.get_applied_steps((AxisEnum)axis); stepper.set_position(stepper_pos); #else stepper.set_position(position); diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 66316edbbb..f512d87b99 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -1426,14 +1426,15 @@ void MarlinSettings::postprocess() { // { #if ENABLED(BACKLASH_GCODE) - const xyz_float_t &backlash_distance_mm = backlash.distance_mm; - const uint8_t &backlash_correction = backlash.correction; + xyz_float_t backlash_distance_mm; + LOOP_LINEAR_AXES(axis) backlash_distance_mm[axis] = backlash.get_distance_mm((AxisEnum)axis); + const uint8_t backlash_correction = backlash.get_correction_uint8(); #else const xyz_float_t backlash_distance_mm{0}; const uint8_t backlash_correction = 0; #endif #if ENABLED(BACKLASH_GCODE) && defined(BACKLASH_SMOOTHING_MM) - const float &backlash_smoothing_mm = backlash.smoothing_mm; + const float backlash_smoothing_mm = backlash.get_smoothing_mm(); #else const float backlash_smoothing_mm = 3; #endif @@ -2364,22 +2365,22 @@ void MarlinSettings::postprocess() { // Backlash Compensation // { - #if ENABLED(BACKLASH_GCODE) - const xyz_float_t &backlash_distance_mm = backlash.distance_mm; - const uint8_t &backlash_correction = backlash.correction; - #else - xyz_float_t backlash_distance_mm; - uint8_t backlash_correction; - #endif - #if ENABLED(BACKLASH_GCODE) && defined(BACKLASH_SMOOTHING_MM) - const float &backlash_smoothing_mm = backlash.smoothing_mm; - #else - float backlash_smoothing_mm; - #endif + xyz_float_t backlash_distance_mm; + uint8_t backlash_correction; + float backlash_smoothing_mm; + _FIELD_TEST(backlash_distance_mm); EEPROM_READ(backlash_distance_mm); EEPROM_READ(backlash_correction); EEPROM_READ(backlash_smoothing_mm); + + #if ENABLED(BACKLASH_GCODE) + LOOP_LINEAR_AXES(axis) backlash.set_distance_mm((AxisEnum)axis, backlash_distance_mm[axis]); + backlash.set_correction_uint8(backlash_correction); + #ifdef BACKLASH_SMOOTHING_MM + backlash.set_smoothing_mm(backlash_smoothing_mm); + #endif + #endif } // @@ -2811,11 +2812,11 @@ void MarlinSettings::reset() { #endif #if ENABLED(BACKLASH_GCODE) - backlash.correction = (BACKLASH_CORRECTION) * 255; + backlash.set_correction(BACKLASH_CORRECTION); constexpr xyz_float_t tmp = BACKLASH_DISTANCE_MM; - backlash.distance_mm = tmp; + LOOP_LINEAR_AXES(axis) backlash.set_distance_mm((AxisEnum)axis, tmp[axis]); #ifdef BACKLASH_SMOOTHING_MM - backlash.smoothing_mm = BACKLASH_SMOOTHING_MM; + backlash.set_smoothing_mm(BACKLASH_SMOOTHING_MM); #endif #endif From 7d7439c4b62e3d353bb20158c04d60defe89c694 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Wed, 2 Mar 2022 11:22:36 +1300 Subject: [PATCH 518/532] =?UTF-8?q?=F0=9F=9A=A8=20Fix=20BLTouch=205V=20pin?= =?UTF-8?q?=20tolerance=20checks=20(#23823)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/inc/SanityCheck.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index e847339e2a..b34d982e75 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1574,10 +1574,14 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #else #define _IS_5V_TOLERANT(P) 1 // Assume 5V tolerance #endif - #if USES_Z_MIN_PROBE_PIN && !_IS_5V_TOLERANT(Z_MIN_PROBE_PIN) - #error "BLTOUCH_SET_5V_MODE is not compatible with the Z_MIN_PROBE_PIN." + #if USES_Z_MIN_PROBE_PIN + #if !_IS_5V_TOLERANT(Z_MIN_PROBE_PIN) + #error "BLTOUCH_SET_5V_MODE is not compatible with the Z_MIN_PROBE_PIN." + #endif #elif !_IS_5V_TOLERANT(Z_MIN_PIN) - #error "BLTOUCH_SET_5V_MODE is not compatible with the Z_MIN_PIN." + #if !MB(CHITU3D_V6) + #error "BLTOUCH_SET_5V_MODE is not compatible with the Z_MIN_PIN." + #endif #endif #undef _IS_5V_TOLERANT #undef _5V From 9ef01d43bb2f4384482ae8205ca6c80ebe388a52 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Tue, 1 Mar 2022 17:25:30 -0500 Subject: [PATCH 519/532] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20E3V2=20blank=20bg?= =?UTF-8?q?=20for=20S1=20compatibility=20(#23822)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/e3v2/creality/dwin_lcd.cpp | 1 + Marlin/src/lcd/e3v2/jyersui/dwin.cpp | 2 ++ Marlin/src/lcd/e3v2/marlinui/dwin_lcd.cpp | 1 + Marlin/src/lcd/e3v2/proui/dwin.cpp | 2 ++ 4 files changed, 6 insertions(+) diff --git a/Marlin/src/lcd/e3v2/creality/dwin_lcd.cpp b/Marlin/src/lcd/e3v2/creality/dwin_lcd.cpp index fee22932d2..3d60e32a79 100644 --- a/Marlin/src/lcd/e3v2/creality/dwin_lcd.cpp +++ b/Marlin/src/lcd/e3v2/creality/dwin_lcd.cpp @@ -49,6 +49,7 @@ void DWIN_Startup() { #if DISABLED(SHOW_BOOTSCREEN) DWIN_Frame_Clear(Color_Bg_Black); // MarlinUI handles the bootscreen so just clear here #endif + DWIN_JPG_ShowAndCache(3); DWIN_UpdateLCD(); } diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp index 0eedddb500..d384bae3e3 100644 --- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp @@ -4989,6 +4989,8 @@ void MarlinUI::init_lcd() { DWIN_UpdateLCD(); delay(20); } + + DWIN_JPG_ShowAndCache(3); DWIN_JPG_CacheTo1(Language_English); CrealityDWIN.Redraw_Screen(); } diff --git a/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.cpp b/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.cpp index ef390ac9dc..a4cefe4ab9 100644 --- a/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.cpp +++ b/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.cpp @@ -45,6 +45,7 @@ void DWIN_Startup() { const bool success = DWIN_Handshake(); if (success) DEBUG_ECHOLNPGM("ok."); else DEBUG_ECHOLNPGM("error."); DWIN_Frame_SetDir(TERN(DWIN_MARLINUI_LANDSCAPE, 0, 1)); + DWIN_JPG_ShowAndCache(3); DWIN_Frame_Clear(Color_Bg_Black); // MarlinUI handles the bootscreen so just clear here DWIN_UpdateLCD(); } diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index d65fa9ec79..5af7fc294d 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1836,6 +1836,7 @@ void DWIN_Startup() { DWINUI::onCursorErase = Erase_Menu_Cursor; DWINUI::onTitleDraw = Draw_Title; DWINUI::onMenuDraw = Draw_Menu; + DWIN_JPG_ShowAndCache(3); HMI_SetLanguage(); } @@ -1937,6 +1938,7 @@ void DWIN_RebootScreen() { DWINUI::Draw_CenteredString(Color_White, 220, GET_TEXT_F(MSG_PLEASE_WAIT_REBOOT)); DWIN_UpdateLCD(); delay(500); + DWIN_JPG_ShowAndCache(3); } void DWIN_Redraw_screen() { From c9fe822920f8df22553373b8ad066a33b80030f3 Mon Sep 17 00:00:00 2001 From: Julien Staub Date: Tue, 1 Mar 2022 23:42:20 +0100 Subject: [PATCH 520/532] =?UTF-8?q?=E2=9C=A8=20Weedo=2062A=20Tina2=20/=20M?= =?UTF-8?q?onoprice=20Cadet=20(#23817)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/core/boards.h | 1 + Marlin/src/pins/mega/pins_PICA.h | 1 + Marlin/src/pins/mega/pins_WEEDO_62A.h | 106 ++++++++++++++++++++++++++ Marlin/src/pins/pins.h | 2 + 4 files changed, 110 insertions(+) create mode 100644 Marlin/src/pins/mega/pins_WEEDO_62A.h diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 5ee99b533f..3ec24e7760 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -164,6 +164,7 @@ #define BOARD_MALYAN_M180 1327 // Malyan M180 Mainboard Version 2 (no display function, direct gcode only) #define BOARD_GT2560_V4_A20 1328 // Geeetech GT2560 Rev B for A20(M/T/D) #define BOARD_PROTONEER_CNC_SHIELD_V3 1329 // Mega controller & Protoneer CNC Shield V3.00 +#define BOARD_WEEDO_62A 1330 // WEEDO 62A board (TINA2, Monoprice Cadet, etc.) // // ATmega1281, ATmega2561 diff --git a/Marlin/src/pins/mega/pins_PICA.h b/Marlin/src/pins/mega/pins_PICA.h index 47c101711c..0e29d8dffe 100644 --- a/Marlin/src/pins/mega/pins_PICA.h +++ b/Marlin/src/pins/mega/pins_PICA.h @@ -51,6 +51,7 @@ #define SERVO0_PIN 3 #define SERVO1_PIN 4 #define SERVO2_PIN 5 + // // Limit Switches // diff --git a/Marlin/src/pins/mega/pins_WEEDO_62A.h b/Marlin/src/pins/mega/pins_WEEDO_62A.h new file mode 100644 index 0000000000..4b3bf6a43b --- /dev/null +++ b/Marlin/src/pins/mega/pins_WEEDO_62A.h @@ -0,0 +1,106 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2022 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 . + * + */ + +/** + * Based on WEEDO 62A pin configuration + * Copyright (c) 2019 WEEDO3D Perron + */ + +#pragma once + +#include "env_validate.h" + +#ifndef BOARD_INFO_NAME + #define BOARD_INFO_NAME "WEEDO 62A" +#endif + +// +// Limit Switches +// +#define X_MIN_PIN 3 +#define X_MAX_PIN 2 +#define Y_MIN_PIN 40 +#define Y_MAX_PIN 41 +#define Z_MIN_PIN 18 +#define Z_MAX_PIN 19 + +// +// Steppers +// +#define X_STEP_PIN 26 +#define X_DIR_PIN 28 +#define X_ENABLE_PIN 24 + +#define Y_STEP_PIN 60 +#define Y_DIR_PIN 61 +#define Y_ENABLE_PIN 56 + +#define Z_STEP_PIN 46 +#define Z_DIR_PIN 48 +#define Z_ENABLE_PIN 62 + +#define E0_STEP_PIN 54 +#define E0_DIR_PIN 55 +#define E0_ENABLE_PIN 38 + +// +// Temperature Sensors +// +#define TEMP_0_PIN 13 // ANALOG NUMBERING +#define TEMP_BED_PIN 14 // ANALOG NUMBERING + +// +// Heaters / Fans +// +#define HEATER_0_PIN 10 // EXTRUDER 1 +#define HEATER_BED_PIN 8 // BED +#define FAN_PIN 4 // IO pin. Buffer needed + +// +// Misc. Functions +// +#define PS_ON_PIN 12 +#define LED_PIN 13 + +// +// SD Support +// +#if ENABLED(SDSUPPORT) + #define SDSS 53 + #define SD_DETECT_PIN 49 +#endif + +// +// LCD / Controller +// +#if HAS_WIRED_LCD + #define BEEPER_PIN 37 + + #define DOGLCD_A0 27 + #define DOGLCD_CS 29 + #define LCD_RESET_PIN 25 + #define LCD_CONTRAST_INIT 255 + + #define BTN_EN1 33 + #define BTN_EN2 31 + #define BTN_ENC 35 +#endif diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 88e7946edc..7f0eac8c88 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -287,6 +287,8 @@ #include "mega/pins_MALYAN_M180.h" // ATmega2560 env:mega2560 #elif MB(PROTONEER_CNC_SHIELD_V3) #include "mega/pins_PROTONEER_CNC_SHIELD_V3.h"// ATmega2560 env:mega2560 +#elif MB(WEEDO_62A) + #include "mega/pins_WEEDO_62A.h" // ATmega2560 env:mega2560 // // ATmega1281, ATmega2561 From fd1a5fe36692319bc41739833a0dbd9cae67c37a Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Wed, 2 Mar 2022 00:26:24 +0000 Subject: [PATCH 521/532] [cron] Bump distribution date (2022-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 d481674947..04cabb79e2 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 "2022-02-28" +//#define STRING_DISTRIBUTION_DATE "2022-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 46ce0820c7..e37cb894e2 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 "2022-02-28" + #define STRING_DISTRIBUTION_DATE "2022-03-02" #endif /** From b07a34eb6bd8928aebef631554626aaa8c88c567 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 2 Mar 2022 16:04:17 -0600 Subject: [PATCH 522/532] =?UTF-8?q?=F0=9F=90=9B=20Fix=20M=5FState=5Fgrbl?= =?UTF-8?q?=20when=20G29=20calls=20G28?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/bedlevel/abl/G29.cpp | 33 +++++++++++++++++++-------- Marlin/src/gcode/bedlevel/mbl/G29.cpp | 4 ++-- Marlin/src/gcode/calibrate/G28.cpp | 9 +++++--- Marlin/src/module/motion.h | 8 ++++--- 4 files changed, 36 insertions(+), 18 deletions(-) diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 24c0268b9f..a6ef6d2729 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -77,7 +77,12 @@ #endif #endif -#define G29_RETURN(b) return TERN_(G29_RETRY_AND_RECOVER, b) +#define G29_RETURN(retry) do{ \ + if (TERN(G29_RETRY_AND_RECOVER, !retry, true)) { \ + TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_IDLE, false)); \ + } \ + return TERN_(G29_RETRY_AND_RECOVER, retry); \ +}while(0) // For manual probing values persist over multiple G29 class G29_State { @@ -218,12 +223,13 @@ public: G29_TYPE GcodeSuite::G29() { DEBUG_SECTION(log_G29, "G29", DEBUGGING(LEVELING)); + // Leveling state is persistent when done manually with multiple G29 commands TERN_(PROBE_MANUALLY, static) G29_State abl; - TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_PROBE)); - + // Keep powered steppers from timing out reset_stepper_timeout(); + // Q = Query leveling and G29 state const bool seenQ = EITHER(DEBUG_LEVELING_FEATURE, PROBE_MANUALLY) && parser.seen_test('Q'); // G29 Q is also available if debugging @@ -232,11 +238,14 @@ G29_TYPE GcodeSuite::G29() { if (DISABLED(PROBE_MANUALLY) && seenQ) G29_RETURN(false); #endif + // A = Abort manual probing + // C = Generate fake probe points (DEBUG_LEVELING_FEATURE) const bool seenA = TERN0(PROBE_MANUALLY, parser.seen_test('A')), no_action = seenA || seenQ, faux = ENABLED(DEBUG_LEVELING_FEATURE) && DISABLED(PROBE_MANUALLY) ? parser.boolval('C') : no_action; - if (!no_action && planner.leveling_active && parser.boolval('O')) { // Auto-level only if needed + // O = Don't level if leveling is already active + if (!no_action && planner.leveling_active && parser.boolval('O')) { if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> Auto-level not needed, skip"); G29_RETURN(false); } @@ -248,15 +257,20 @@ G29_TYPE GcodeSuite::G29() { // Don't allow auto-leveling without homing first if (homing_needed_error()) G29_RETURN(false); + // 3-point leveling gets points from the probe class #if ENABLED(AUTO_BED_LEVELING_3POINT) vector_3 points[3]; probe.get_three_points(points); #endif + // Storage for ABL Linear results #if ENABLED(AUTO_BED_LEVELING_LINEAR) struct linear_fit_data lsf_results; #endif + // Set and report "probing" state to host + TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_PROBE, false)); + /** * On the initial G29 fetch command parameters. */ @@ -429,10 +443,10 @@ G29_TYPE GcodeSuite::G29() { if (!no_action) set_bed_leveling_enabled(false); // Deploy certain probes before starting probing - #if HAS_BED_PROBE - if (ENABLED(BLTOUCH)) - do_z_clearance(Z_CLEARANCE_DEPLOY_PROBE); - else if (probe.deploy()) { + #if ENABLED(BLTOUCH) + do_z_clearance(Z_CLEARANCE_DEPLOY_PROBE); + #elif HAS_BED_PROBE + if (probe.deploy()) { // (returns true on deploy failure) set_bed_leveling_enabled(abl.reenable); G29_RETURN(false); } @@ -483,6 +497,7 @@ G29_TYPE GcodeSuite::G29() { SERIAL_ECHOLNPGM("idle"); } + // For 'A' or 'Q' exit with success state if (no_action) G29_RETURN(false); if (abl.abl_probe_index == 0) { @@ -893,8 +908,6 @@ G29_TYPE GcodeSuite::G29() { report_current_position(); - TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_IDLE)); - G29_RETURN(isnan(abl.measured_z)); } diff --git a/Marlin/src/gcode/bedlevel/mbl/G29.cpp b/Marlin/src/gcode/bedlevel/mbl/G29.cpp index 090c15b057..4ffeec6eec 100644 --- a/Marlin/src/gcode/bedlevel/mbl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/mbl/G29.cpp @@ -75,8 +75,6 @@ void GcodeSuite::G29() { } #endif - TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_PROBE)); - static int mbl_probe_index = -1; MeshLevelingState state = (MeshLevelingState)parser.byteval('S', (int8_t)MeshReport); @@ -85,6 +83,8 @@ void GcodeSuite::G29() { return; } + TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_PROBE)); + int8_t ix, iy; ix = iy = 0; diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index a38c567939..4d8891d55b 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -213,8 +213,6 @@ void GcodeSuite::G28() { TERN_(LASER_MOVE_G28_OFF, cutter.set_inline_enabled(false)); // turn off laser - TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_HOMING)); - #if ENABLED(DUAL_X_CARRIAGE) bool IDEX_saved_duplication_state = extruder_duplication_enabled; DualXMode IDEX_saved_mode = dual_x_carriage_mode; @@ -236,6 +234,11 @@ void GcodeSuite::G28() { return; } + #if ENABLED(FULL_REPORT_TO_HOST_FEATURE) + const M_StateEnum old_grblstate = M_State_grbl; + set_and_report_grblstate(M_HOMING); + #endif + TERN_(HAS_DWIN_E3V2_BASIC, DWIN_StartHoming()); TERN_(EXTENSIBLE_UI, ExtUI::onHomingStart()); @@ -557,7 +560,7 @@ void GcodeSuite::G28() { if (ENABLED(NANODLP_Z_SYNC) && (doZ || ENABLED(NANODLP_ALL_AXIS))) SERIAL_ECHOLNPGM(STR_Z_MOVE_COMP); - TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(M_IDLE)); + TERN_(FULL_REPORT_TO_HOST_FEATURE, set_and_report_grblstate(old_grblstate)); #if HAS_L64XX // Set L6470 absolute position registers to counts diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 9fe61aad33..2fbb4ce114 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -265,9 +265,11 @@ void report_current_position_projected(); void report_current_position_moving(); #if ENABLED(FULL_REPORT_TO_HOST_FEATURE) - inline void set_and_report_grblstate(const M_StateEnum state) { - M_State_grbl = state; - report_current_grblstate_moving(); + inline void set_and_report_grblstate(const M_StateEnum state, const bool force=true) { + if (force || M_State_grbl != state) { + M_State_grbl = state; + report_current_grblstate_moving(); + } } #endif From 2e39bc30fd748b0ade7aafdab4827f942536cdcd Mon Sep 17 00:00:00 2001 From: tombrazier <68918209+tombrazier@users.noreply.github.com> Date: Wed, 2 Mar 2022 22:13:46 +0000 Subject: [PATCH 523/532] =?UTF-8?q?=F0=9F=9A=B8=20Universal=20X=5FAXIS=5FT?= =?UTF-8?q?WIST=5FCOMPENSATION=20(#23828)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 3 +- Marlin/src/feature/bedlevel/bedlevel.h | 3 - .../feature/{bedlevel/abl => }/x_twist.cpp | 15 ++++- .../src/feature/{bedlevel/abl => }/x_twist.h | 5 +- Marlin/src/gcode/bedlevel/abl/G29.cpp | 2 +- Marlin/src/lcd/menu/menu_x_twist.cpp | 3 + Marlin/src/module/probe.cpp | 5 ++ Marlin/src/module/settings.cpp | 58 ++++++++++++------- ini/features.ini | 2 +- platformio.ini | 2 +- 10 files changed, 67 insertions(+), 31 deletions(-) rename Marlin/src/feature/{bedlevel/abl => }/x_twist.cpp (82%) rename Marlin/src/feature/{bedlevel/abl => }/x_twist.h (88%) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index e5379ed84f..970be38667 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1299,7 +1299,7 @@ #if HAS_MARLINUI_MENU - #if BOTH(HAS_BED_PROBE, AUTO_BED_LEVELING_BILINEAR) + #if HAS_BED_PROBE // Add calibration in the Probe Offsets menu to compensate for X-axis twist. //#define X_AXIS_TWIST_COMPENSATION #if ENABLED(X_AXIS_TWIST_COMPENSATION) @@ -1311,6 +1311,7 @@ #define XATC_START_Z 0.0 #define XATC_MAX_POINTS 3 // Number of points to probe in the wizard #define XATC_Y_POSITION Y_CENTER // (mm) Y position to probe + #define XATC_Z_OFFSETS { 0, 0, 0 } // Z offsets for X axis sample points #endif #endif diff --git a/Marlin/src/feature/bedlevel/bedlevel.h b/Marlin/src/feature/bedlevel/bedlevel.h index c623c99b5c..63f032eee8 100644 --- a/Marlin/src/feature/bedlevel/bedlevel.h +++ b/Marlin/src/feature/bedlevel/bedlevel.h @@ -63,9 +63,6 @@ class TemporaryBedLevelingState { #if ENABLED(AUTO_BED_LEVELING_BILINEAR) #include "abl/abl.h" - #if ENABLED(X_AXIS_TWIST_COMPENSATION) - #include "abl/x_twist.h" - #endif #elif ENABLED(AUTO_BED_LEVELING_UBL) #include "ubl/ubl.h" #elif ENABLED(MESH_BED_LEVELING) diff --git a/Marlin/src/feature/bedlevel/abl/x_twist.cpp b/Marlin/src/feature/x_twist.cpp similarity index 82% rename from Marlin/src/feature/bedlevel/abl/x_twist.cpp rename to Marlin/src/feature/x_twist.cpp index 24fdbca950..deac1bceba 100644 --- a/Marlin/src/feature/bedlevel/abl/x_twist.cpp +++ b/Marlin/src/feature/x_twist.cpp @@ -19,16 +19,24 @@ * along with this program. If not, see . * */ -#include "../../../inc/MarlinConfig.h" +#include "../inc/MarlinConfig.h" #if ENABLED(X_AXIS_TWIST_COMPENSATION) -#include "../bedlevel.h" +#include "x_twist.h" XATC xatc; +bool XATC::enabled = true; float XATC::spacing, XATC::start; -xatc_array_t XATC::z_offset; +xatc_array_t XATC::z_offset; // Initialized by settings.load() + +void XATC::reset() { + constexpr float xzo[] = XATC_Z_OFFSETS; + static_assert(COUNT(xzo) == XATC_MAX_POINTS, "XATC_Z_OFFSETS is the wrong size."); + enabled = false; + COPY(z_offset, xzo); +} void XATC::print_points() { SERIAL_ECHOLNPGM(" X-Twist Correction:"); @@ -49,6 +57,7 @@ void XATC::print_points() { float lerp(const_float_t t, const_float_t a, const_float_t b) { return a + t * (b - a); } float XATC::compensation(const xy_pos_t &raw) { + if (!enabled) return 0; if (NEAR_ZERO(spacing)) return 0; float t = (raw.x - start) / spacing; int i = FLOOR(t); diff --git a/Marlin/src/feature/bedlevel/abl/x_twist.h b/Marlin/src/feature/x_twist.h similarity index 88% rename from Marlin/src/feature/bedlevel/abl/x_twist.h rename to Marlin/src/feature/x_twist.h index 9deb45a8b7..6a2ff27901 100644 --- a/Marlin/src/feature/bedlevel/abl/x_twist.h +++ b/Marlin/src/feature/x_twist.h @@ -21,15 +21,18 @@ */ #pragma once -#include "../../../inc/MarlinConfigPre.h" +#include "../inc/MarlinConfigPre.h" typedef float xatc_array_t[XATC_MAX_POINTS]; class XATC { + static bool enabled; public: static float spacing, start; static xatc_array_t z_offset; + static void reset(); + static void set_enabled(const bool ena) { enabled = ena; } static float compensation(const xy_pos_t &raw); static void print_points(); }; diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index a6ef6d2729..20f2369b03 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -681,7 +681,7 @@ G29_TYPE GcodeSuite::G29() { #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) const float z = abl.measured_z + abl.Z_offset; - z_values[abl.meshCount.x][abl.meshCount.y] = z PLUS_TERN0(X_AXIS_TWIST_COMPENSATION, xatc.compensation(abl.probePos)); + z_values[abl.meshCount.x][abl.meshCount.y] = z; TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(abl.meshCount, z)); #endif diff --git a/Marlin/src/lcd/menu/menu_x_twist.cpp b/Marlin/src/lcd/menu/menu_x_twist.cpp index fab3b5ae11..ca385ebfeb 100644 --- a/Marlin/src/lcd/menu/menu_x_twist.cpp +++ b/Marlin/src/lcd/menu/menu_x_twist.cpp @@ -27,6 +27,7 @@ #include "menu_addon.h" #include "../../module/planner.h" #include "../../feature/bedlevel/bedlevel.h" +#include "../../feature/x_twist.h" #include "../../module/motion.h" #include "../../gcode/queue.h" #include "../../module/probe.h" @@ -148,7 +149,9 @@ void xatc_wizard_goto_next_point() { // Deploy certain probes before starting probing TERN_(BLTOUCH, do_z_clearance(Z_CLEARANCE_DEPLOY_PROBE)); + xatc.set_enabled(false); measured_z = probe.probe_at_point(x, XATC_Y_POSITION, PROBE_PT_STOW); + xatc.set_enabled(true); current_position += probe.offset_xy; current_position.z = XATC_START_Z - probe.offset.z + measured_z; line_to_current_position(MMM_TO_MMS(XY_PROBE_FEEDRATE)); diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 95776ffda1..89d2769247 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -81,6 +81,10 @@ #include "../feature/probe_temp_comp.h" #endif +#if ENABLED(X_AXIS_TWIST_COMPENSATION) + #include "../feature/x_twist.h" +#endif + #if ENABLED(EXTENSIBLE_UI) #include "../lcd/extui/ui_api.h" #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED) @@ -808,6 +812,7 @@ float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRai if (!deploy()) { measured_z = run_z_probe(sanity_check) + offset.z; TERN_(HAS_PTC, ptc.apply_compensation(measured_z)); + TERN_(X_AXIS_TWIST_COMPENSATION, measured_z += xatc.compensation(npos + offset_xy)); } if (!isnan(measured_z)) { const bool big_raise = raise_after == PROBE_PT_BIG_RAISE; diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index f512d87b99..2c103b89b4 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -64,7 +64,7 @@ #if HAS_LEVELING #include "../feature/bedlevel/bedlevel.h" #if ENABLED(X_AXIS_TWIST_COMPENSATION) - #include "../feature/bedlevel/abl/x_twist.h" + #include "../feature/x_twist.h" #endif #endif @@ -269,13 +269,17 @@ typedef struct SettingsDataStruct { xy_pos_t bilinear_grid_spacing, bilinear_start; // G29 L F #if ENABLED(AUTO_BED_LEVELING_BILINEAR) bed_mesh_t z_values; // G29 - #if ENABLED(X_AXIS_TWIST_COMPENSATION) - XATC xatc; // TBD - #endif #else float z_values[3][3]; #endif + // + // X_AXIS_TWIST_COMPENSATION + // + #if ENABLED(X_AXIS_TWIST_COMPENSATION) + XATC xatc; // TBD + #endif + // // AUTO_BED_LEVELING_UBL // @@ -298,7 +302,7 @@ typedef struct SettingsDataStruct { int16_t z_offsets_bed[COUNT(ptc.z_offsets_bed)]; // M871 B I V #endif #if ENABLED(PTC_HOTEND) - int16_t z_offsets_hotend[COUNT(ptc.z_offsets_hotend)]; // M871 E I V + int16_t z_offsets_hotend[COUNT(ptc.z_offsets_hotend)]; // M871 E I V #endif #endif @@ -873,9 +877,6 @@ void MarlinSettings::postprocess() { sizeof(z_values) == (GRID_MAX_POINTS) * sizeof(z_values[0][0]), "Bilinear Z array is the wrong size." ); - #if ENABLED(X_AXIS_TWIST_COMPENSATION) - static_assert(COUNT(xatc.z_offset) == XATC_MAX_POINTS, "XATC Z-offset mesh is the wrong size."); - #endif #else const xy_pos_t bilinear_start{0}, bilinear_grid_spacing{0}; #endif @@ -889,15 +890,20 @@ void MarlinSettings::postprocess() { #if ENABLED(AUTO_BED_LEVELING_BILINEAR) EEPROM_WRITE(z_values); // 9-256 floats - #if ENABLED(X_AXIS_TWIST_COMPENSATION) - EEPROM_WRITE(xatc); - #endif #else dummyf = 0; for (uint16_t q = grid_max_x * grid_max_y; q--;) EEPROM_WRITE(dummyf); #endif } + // + // X Axis Twist Compensation + // + #if ENABLED(X_AXIS_TWIST_COMPENSATION) + _FIELD_TEST(xatc); + EEPROM_WRITE(xatc); + #endif + // // Unified Bed Leveling // @@ -1785,9 +1791,6 @@ void MarlinSettings::postprocess() { EEPROM_READ(bilinear_grid_spacing); // 2 ints EEPROM_READ(bilinear_start); // 2 ints EEPROM_READ(z_values); // 9 to 256 floats - #if ENABLED(X_AXIS_TWIST_COMPENSATION) - EEPROM_READ(xatc); - #endif } else // EEPROM data is stale #endif // AUTO_BED_LEVELING_BILINEAR @@ -1800,6 +1803,13 @@ void MarlinSettings::postprocess() { } } + // + // X Axis Twist Compensation + // + #if ENABLED(X_AXIS_TWIST_COMPENSATION) + EEPROM_READ(xatc); + #endif + // // Unified Bed Leveling active state // @@ -2849,6 +2859,14 @@ void MarlinSettings::reset() { TERN_(ENABLE_LEVELING_FADE_HEIGHT, new_z_fade_height = (DEFAULT_LEVELING_FADE_HEIGHT)); TERN_(HAS_LEVELING, reset_bed_level()); + // + // X Axis Twist Compensation + // + TERN_(X_AXIS_TWIST_COMPENSATION, xatc.reset()); + + // + // Nozzle-to-probe Offset + // #if HAS_BED_PROBE constexpr float dpo[] = NOZZLE_TO_PROBE_OFFSET; static_assert(COUNT(dpo) == LINEAR_AXES, "NOZZLE_TO_PROBE_OFFSET must contain offsets for each linear axis X, Y, Z...."); @@ -3313,14 +3331,14 @@ void MarlinSettings::reset() { } } - // TODO: Create G-code for settings - //#if ENABLED(X_AXIS_TWIST_COMPENSATION) - // CONFIG_ECHO_START(); - // xatc.print_points(); - //#endif - #endif + // TODO: Create G-code for settings + //#if ENABLED(X_AXIS_TWIST_COMPENSATION) + // CONFIG_ECHO_START(); + // xatc.print_points(); + //#endif + #endif // HAS_LEVELING // diff --git a/ini/features.ini b/ini/features.ini index 627f094e07..4d394e0901 100644 --- a/ini/features.ini +++ b/ini/features.ini @@ -98,7 +98,7 @@ USB_FLASH_DRIVE_SUPPORT = src_filter=+ + AUTO_BED_LEVELING_BILINEAR = src_filter=+ AUTO_BED_LEVELING_(3POINT|(BI)?LINEAR) = src_filter=+ -X_AXIS_TWIST_COMPENSATION = src_filter=+ + +X_AXIS_TWIST_COMPENSATION = src_filter=+ + MESH_BED_LEVELING = src_filter=+ + AUTO_BED_LEVELING_UBL = src_filter=+ + UBL_HILBERT_CURVE = src_filter=+ diff --git a/platformio.ini b/platformio.ini index 3a02b5ab18..9b64bdd377 100644 --- a/platformio.ini +++ b/platformio.ini @@ -100,7 +100,6 @@ default_src_filter = + - - + - - - - - - - - - - - - @@ -151,6 +150,7 @@ default_src_filter = + - - + - - - - + - - - - From bb2f100fcdaef30958601ec90ebcaad0fcae8815 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 2 Mar 2022 17:50:55 -0600 Subject: [PATCH 524/532] =?UTF-8?q?=F0=9F=9A=B8=20Use=20Z=5FSTEPPER=5FALIG?= =?UTF-8?q?N=5FSTEPPER=5FXY=20to=20enable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 20 +++++++++-------- Marlin/src/feature/z_stepper_align.cpp | 4 ++-- Marlin/src/feature/z_stepper_align.h | 2 +- Marlin/src/gcode/calibrate/G34_M422.cpp | 30 ++++++++++++------------- Marlin/src/inc/Conditionals_adv.h | 5 +++-- Marlin/src/inc/SanityCheck.h | 6 +++-- Marlin/src/module/settings.cpp | 8 +++---- buildroot/tests/DUE | 2 +- 8 files changed, 41 insertions(+), 36 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 970be38667..55857f5dec 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -959,15 +959,17 @@ //#define Z_STEPPERS_ORIENTATION 0 #endif - // Provide Z stepper positions for more rapid convergence in bed alignment. - // Requires triple stepper drivers (i.e., set NUM_Z_STEPPER_DRIVERS to 3) - //#define Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS - #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) - // Define Stepper XY positions for Z1, Z2, Z3 corresponding to - // the Z screw positions in the bed carriage. - // Define one position per Z stepper in stepper driver order. - #define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } } - #else + /** + * Z Stepper positions for more rapid convergence in bed alignment. + * Requires NUM_Z_STEPPER_DRIVERS to be 3 or 4. + * + * Define Stepper XY positions for Z1, Z2, Z3... corresponding to the screw + * positions in the bed carriage, with one position per Z stepper in stepper + * driver order. + */ + //#define Z_STEPPER_ALIGN_STEPPER_XY { { 210.7, 102.5 }, { 152.6, 220.0 }, { 94.5, 102.5 } } + + #ifndef Z_STEPPER_ALIGN_STEPPER_XY // Amplification factor. Used to scale the correction step up or down in case // the stepper (spindle) position is farther out than the test point. #define Z_STEPPER_ALIGN_AMP 1.0 // Use a value > 1.0 NOTE: This may cause instability! diff --git a/Marlin/src/feature/z_stepper_align.cpp b/Marlin/src/feature/z_stepper_align.cpp index 1b4eb44749..fdbd464ea1 100644 --- a/Marlin/src/feature/z_stepper_align.cpp +++ b/Marlin/src/feature/z_stepper_align.cpp @@ -35,7 +35,7 @@ ZStepperAlign z_stepper_align; xy_pos_t ZStepperAlign::xy[NUM_Z_STEPPER_DRIVERS]; -#if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) +#if HAS_Z_STEPPER_ALIGN_STEPPER_XY xy_pos_t ZStepperAlign::stepper_xy[NUM_Z_STEPPER_DRIVERS]; #endif @@ -103,7 +103,7 @@ void ZStepperAlign::reset_to_default() { COPY(xy, xy_init); - #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #if HAS_Z_STEPPER_ALIGN_STEPPER_XY constexpr xy_pos_t stepper_xy_init[] = Z_STEPPER_ALIGN_STEPPER_XY; static_assert( COUNT(stepper_xy_init) == NUM_Z_STEPPER_DRIVERS, diff --git a/Marlin/src/feature/z_stepper_align.h b/Marlin/src/feature/z_stepper_align.h index e1b235b52c..8a12cd18b0 100644 --- a/Marlin/src/feature/z_stepper_align.h +++ b/Marlin/src/feature/z_stepper_align.h @@ -31,7 +31,7 @@ class ZStepperAlign { public: static xy_pos_t xy[NUM_Z_STEPPER_DRIVERS]; - #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #if HAS_Z_STEPPER_ALIGN_STEPPER_XY static xy_pos_t stepper_xy[NUM_Z_STEPPER_DRIVERS]; #endif diff --git a/Marlin/src/gcode/calibrate/G34_M422.cpp b/Marlin/src/gcode/calibrate/G34_M422.cpp index 328a40dbb4..fc4430885e 100644 --- a/Marlin/src/gcode/calibrate/G34_M422.cpp +++ b/Marlin/src/gcode/calibrate/G34_M422.cpp @@ -41,7 +41,7 @@ #include "../../module/tool_change.h" #endif -#if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) +#if HAS_Z_STEPPER_ALIGN_STEPPER_XY #include "../../libs/least_squares_fit.h" #endif @@ -122,7 +122,7 @@ void GcodeSuite::G34() { break; } - const float z_auto_align_amplification = TERN(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS, Z_STEPPER_ALIGN_AMP, parser.floatval('A', Z_STEPPER_ALIGN_AMP)); + const float z_auto_align_amplification = TERN(HAS_Z_STEPPER_ALIGN_STEPPER_XY, Z_STEPPER_ALIGN_AMP, parser.floatval('A', Z_STEPPER_ALIGN_AMP)); if (!WITHIN(ABS(z_auto_align_amplification), 0.5f, 2.0f)) { SERIAL_ECHOLNPGM("?(A)mplification out of bounds (0.5-2.0)."); break; @@ -179,7 +179,7 @@ void GcodeSuite::G34() { // Now, the Z origin lies below the build plate. That allows to probe deeper, before run_z_probe throws an error. // This hack is un-done at the end of G34 - either by re-homing, or by using the probed heights of the last iteration. - #if DISABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #if !HAS_Z_STEPPER_ALIGN_STEPPER_XY float last_z_align_move[NUM_Z_STEPPER_DRIVERS] = ARRAY_N_1(NUM_Z_STEPPER_DRIVERS, 10000.0f); #else float last_z_align_level_indicator = 10000.0f; @@ -188,7 +188,7 @@ void GcodeSuite::G34() { z_maxdiff = 0.0f, amplification = z_auto_align_amplification; - #if DISABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #if !HAS_Z_STEPPER_ALIGN_STEPPER_XY bool adjustment_reverse = false; #endif @@ -256,7 +256,7 @@ void GcodeSuite::G34() { z_maxdiff = z_measured_max - z_measured_min; z_probe = Z_BASIC_CLEARANCE + z_measured_max + z_maxdiff; - #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #if HAS_Z_STEPPER_ALIGN_STEPPER_XY // Replace the initial values in z_measured with calculated heights at // each stepper position. This allows the adjustment algorithm to be // shared between both possible probing mechanisms. @@ -338,7 +338,7 @@ void GcodeSuite::G34() { return false; }; - #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #if HAS_Z_STEPPER_ALIGN_STEPPER_XY // Check if the applied corrections go in the correct direction. // Calculate the sum of the absolute deviations from the mean of the probe measurements. // Compare to the last iteration to ensure it's getting better. @@ -370,7 +370,7 @@ void GcodeSuite::G34() { float z_align_move = z_measured[zstepper] - z_measured_min; const float z_align_abs = ABS(z_align_move); - #if DISABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #if !HAS_Z_STEPPER_ALIGN_STEPPER_XY // Optimize one iteration's correction based on the first measurements if (z_align_abs) amplification = (iteration == 1) ? _MIN(last_z_align_move[zstepper] / z_align_abs, 2.0f) : z_auto_align_amplification; @@ -394,7 +394,7 @@ void GcodeSuite::G34() { // Lock all steppers except one stepper.set_all_z_lock(true, zstepper); - #if DISABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #if !HAS_Z_STEPPER_ALIGN_STEPPER_XY // Decreasing accuracy was detected so move was inverted. // Will match reversed Z steppers on dual steppers. Triple will need more work to map. if (adjustment_reverse) { @@ -467,7 +467,7 @@ void GcodeSuite::G34() { * * S : Index of the probe point to set * - * With Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS: + * With Z_STEPPER_ALIGN_STEPPER_XY: * W : Index of the Z stepper position to set * The W and S parameters may not be combined. * @@ -488,18 +488,18 @@ void GcodeSuite::M422() { const bool is_probe_point = parser.seen('S'); - if (TERN0(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS, is_probe_point && parser.seen('W'))) { + if (TERN0(HAS_Z_STEPPER_ALIGN_STEPPER_XY, is_probe_point && parser.seen('W'))) { SERIAL_ECHOLNPGM("?(S) and (W) may not be combined."); return; } xy_pos_t *pos_dest = ( - TERN_(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS, !is_probe_point ? z_stepper_align.stepper_xy :) + TERN_(HAS_Z_STEPPER_ALIGN_STEPPER_XY, !is_probe_point ? z_stepper_align.stepper_xy :) z_stepper_align.xy ); - if (!is_probe_point && TERN1(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS, !parser.seen('W'))) { - SERIAL_ECHOLNPGM("?(S)" TERN_(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS, " or (W)") " is required."); + if (!is_probe_point && TERN1(HAS_Z_STEPPER_ALIGN_STEPPER_XY, !parser.seen('W'))) { + SERIAL_ECHOLNPGM("?(S)" TERN_(HAS_Z_STEPPER_ALIGN_STEPPER_XY, " or (W)") " is required."); return; } @@ -513,7 +513,7 @@ void GcodeSuite::M422() { } } else { - #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #if HAS_Z_STEPPER_ALIGN_STEPPER_XY position_index = parser.intval('W') - 1; if (!WITHIN(position_index, 0, NUM_Z_STEPPER_DRIVERS - 1)) { SERIAL_ECHOLNPGM("?(W) Z-stepper index invalid."); @@ -551,7 +551,7 @@ void GcodeSuite::M422_report(const bool forReplay/*=true*/) { SP_Y_STR, z_stepper_align.xy[i].y ); } - #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #if HAS_Z_STEPPER_ALIGN_STEPPER_XY LOOP_L_N(i, NUM_Z_STEPPER_DRIVERS) { report_echo_start(forReplay); SERIAL_ECHOLNPGM_P( diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index 82b32ba003..d63395a719 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -630,7 +630,8 @@ #endif #if ENABLED(Z_STEPPER_AUTO_ALIGN) - #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #ifdef Z_STEPPER_ALIGN_STEPPER_XY + #define HAS_Z_STEPPER_ALIGN_STEPPER_XY 1 #undef Z_STEPPER_ALIGN_AMP #endif #ifndef Z_STEPPER_ALIGN_AMP @@ -986,7 +987,7 @@ #endif // Flag whether least_squares_fit.cpp is used -#if ANY(AUTO_BED_LEVELING_UBL, AUTO_BED_LEVELING_LINEAR, Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) +#if ANY(AUTO_BED_LEVELING_UBL, AUTO_BED_LEVELING_LINEAR, HAS_Z_STEPPER_ALIGN_STEPPER_XY) #define NEED_LSF 1 #endif diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index b34d982e75..e8abf1b286 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -613,6 +613,8 @@ #error "NOZZLE_PARK_X_ONLY is now NOZZLE_PARK_MOVE 1." #elif defined(NOZZLE_PARK_Y_ONLY) #error "NOZZLE_PARK_X_ONLY is now NOZZLE_PARK_MOVE 2." +#elif defined(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #error "Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS is now just Z_STEPPER_ALIGN_STEPPER_XY." #endif constexpr float arm[] = AXIS_RELATIVE_MODES; @@ -3479,10 +3481,10 @@ static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive."); #error "Z_STEPPER_AUTO_ALIGN requires NUM_Z_STEPPER_DRIVERS greater than 1." #elif !HAS_BED_PROBE #error "Z_STEPPER_AUTO_ALIGN requires a Z-bed probe." - #elif ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #elif HAS_Z_STEPPER_ALIGN_STEPPER_XY static_assert(WITHIN(Z_STEPPER_ALIGN_AMP, 0.5, 2.0), "Z_STEPPER_ALIGN_AMP must be between 0.5 and 2.0."); #if NUM_Z_STEPPER_DRIVERS < 3 - #error "Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS requires NUM_Z_STEPPER_DRIVERS to be 3 or 4." + #error "Z_STEPPER_ALIGN_STEPPER_XY requires NUM_Z_STEPPER_DRIVERS to be 3 or 4." #endif #endif #endif diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 2c103b89b4..fed1f67755 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -341,11 +341,11 @@ typedef struct SettingsDataStruct { #endif // - // Z_STEPPER_AUTO_ALIGN, Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS + // Z_STEPPER_AUTO_ALIGN, HAS_Z_STEPPER_ALIGN_STEPPER_XY // #if ENABLED(Z_STEPPER_AUTO_ALIGN) xy_pos_t z_stepper_align_xy[NUM_Z_STEPPER_DRIVERS]; // M422 S X Y - #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #if HAS_Z_STEPPER_ALIGN_STEPPER_XY xy_pos_t z_stepper_align_stepper_xy[NUM_Z_STEPPER_DRIVERS]; // M422 W X Y #endif #endif @@ -1005,7 +1005,7 @@ void MarlinSettings::postprocess() { #if ENABLED(Z_STEPPER_AUTO_ALIGN) EEPROM_WRITE(z_stepper_align.xy); - #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #if HAS_Z_STEPPER_ALIGN_STEPPER_XY EEPROM_WRITE(z_stepper_align.stepper_xy); #endif #endif @@ -1924,7 +1924,7 @@ void MarlinSettings::postprocess() { #if ENABLED(Z_STEPPER_AUTO_ALIGN) EEPROM_READ(z_stepper_align.xy); - #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) + #if HAS_Z_STEPPER_ALIGN_STEPPER_XY EEPROM_READ(z_stepper_align.stepper_xy); #endif #endif diff --git a/buildroot/tests/DUE b/buildroot/tests/DUE index 5810b73bdc..9b968cbd8d 100755 --- a/buildroot/tests/DUE +++ b/buildroot/tests/DUE @@ -37,7 +37,7 @@ exec_test $1 $2 "RAMPS4DUE_EFB with ABL (Bilinear), ExtUI, S-Curve, many options restore_configs opt_set MOTHERBOARD BOARD_RADDS NUM_Z_STEPPER_DRIVERS 3 opt_enable USE_XMAX_PLUG USE_YMAX_PLUG ENDSTOPPULLUPS BLTOUCH AUTO_BED_LEVELING_BILINEAR \ - Z_STEPPER_AUTO_ALIGN Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS Z_SAFE_HOMING + Z_STEPPER_AUTO_ALIGN Z_STEPPER_ALIGN_STEPPER_XY Z_SAFE_HOMING pins_set ramps/RAMPS X_MAX_PIN -1 pins_set ramps/RAMPS Y_MAX_PIN -1 exec_test $1 $2 "RADDS with ABL (Bilinear), Triple Z Axis, Z_STEPPER_AUTO_ALIGN, E_DUAL_STEPPER_DRIVERS" "$3" From 6aee2c755bb0468df1672d566897f2c6becab597 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 2 Mar 2022 17:58:23 -0600 Subject: [PATCH 525/532] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20Use=20seen=5Ftest?= =?UTF-8?q?=20in=20`M422`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/gcode/calibrate/G34_M422.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/gcode/calibrate/G34_M422.cpp b/Marlin/src/gcode/calibrate/G34_M422.cpp index fc4430885e..61e817fe94 100644 --- a/Marlin/src/gcode/calibrate/G34_M422.cpp +++ b/Marlin/src/gcode/calibrate/G34_M422.cpp @@ -486,9 +486,9 @@ void GcodeSuite::M422() { return; } - const bool is_probe_point = parser.seen('S'); + const bool is_probe_point = parser.seen_test('S'); - if (TERN0(HAS_Z_STEPPER_ALIGN_STEPPER_XY, is_probe_point && parser.seen('W'))) { + if (TERN0(HAS_Z_STEPPER_ALIGN_STEPPER_XY, is_probe_point && parser.seen_test('W'))) { SERIAL_ECHOLNPGM("?(S) and (W) may not be combined."); return; } @@ -498,7 +498,7 @@ void GcodeSuite::M422() { z_stepper_align.xy ); - if (!is_probe_point && TERN1(HAS_Z_STEPPER_ALIGN_STEPPER_XY, !parser.seen('W'))) { + if (!is_probe_point && TERN1(HAS_Z_STEPPER_ALIGN_STEPPER_XY, !parser.seen_test('W'))) { SERIAL_ECHOLNPGM("?(S)" TERN_(HAS_Z_STEPPER_ALIGN_STEPPER_XY, " or (W)") " is required."); return; } From 445c3c651463ab30ebd0348fde66e2bbaa0424cd Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Thu, 3 Mar 2022 00:27:06 +0000 Subject: [PATCH 526/532] [cron] Bump distribution date (2022-03-03) --- 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 04cabb79e2..f3bc739f95 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 "2022-03-02" +//#define STRING_DISTRIBUTION_DATE "2022-03-03" /** * 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 e37cb894e2..7d9bd44b1f 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 "2022-03-02" + #define STRING_DISTRIBUTION_DATE "2022-03-03" #endif /** From 755c196cfa92fa1b9e139d39e83e490305822212 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 4 Mar 2022 15:18:27 -0600 Subject: [PATCH 527/532] =?UTF-8?q?=F0=9F=9A=B8=2012345.6=20num-to-string?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/dogm/status_screen_DOGM.cpp | 2 +- Marlin/src/lcd/menu/menu_item.h | 2 +- Marlin/src/libs/numtostr.cpp | 6 +++--- Marlin/src/libs/numtostr.h | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp index cac8ffd6ac..c9a44e0c64 100644 --- a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp +++ b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp @@ -674,7 +674,7 @@ void MarlinUI::draw_status_screen() { #if CUTTER_UNIT_IS(PERCENT) lcd_put_u8str(STATUS_CUTTER_TEXT_X, STATUS_CUTTER_TEXT_Y, cutter_power2str(cutter.unitPower)); #elif CUTTER_UNIT_IS(RPM) - lcd_put_u8str(STATUS_CUTTER_TEXT_X - 2, STATUS_CUTTER_TEXT_Y, ftostr51rj(float(cutter.unitPower) / 1000)); + lcd_put_u8str(STATUS_CUTTER_TEXT_X - 2, STATUS_CUTTER_TEXT_Y, ftostr61rj(float(cutter.unitPower) / 1000)); lcd_put_wchar('K'); #else lcd_put_u8str(STATUS_CUTTER_TEXT_X, STATUS_CUTTER_TEXT_Y, cutter_power2str(cutter.unitPower)); diff --git a/Marlin/src/lcd/menu/menu_item.h b/Marlin/src/lcd/menu/menu_item.h index 1834b56a88..fcde9f5801 100644 --- a/Marlin/src/lcd/menu/menu_item.h +++ b/Marlin/src/lcd/menu/menu_item.h @@ -150,7 +150,7 @@ DEFINE_MENU_EDIT_ITEM_TYPE(float43 ,float ,ftostr43sign ,1000 ); DEFINE_MENU_EDIT_ITEM_TYPE(float4 ,float ,ftostr4sign , 1 ); // 1234 right-justified DEFINE_MENU_EDIT_ITEM_TYPE(float5 ,float ,ftostr5rj , 1 ); // 12345 right-justified DEFINE_MENU_EDIT_ITEM_TYPE(float5_25 ,float ,ftostr5rj , 0.04f ); // 12345 right-justified (25 increment) -DEFINE_MENU_EDIT_ITEM_TYPE(float51 ,float ,ftostr51rj , 10 ); // 1234.5 right-justified +DEFINE_MENU_EDIT_ITEM_TYPE(float61 ,float ,ftostr61rj , 10 ); // 12345.6 right-justified DEFINE_MENU_EDIT_ITEM_TYPE(float31sign ,float ,ftostr31sign , 10 ); // +12.3 DEFINE_MENU_EDIT_ITEM_TYPE(float41sign ,float ,ftostr41sign , 10 ); // +123.4 DEFINE_MENU_EDIT_ITEM_TYPE(float51sign ,float ,ftostr51sign , 10 ); // +1234.5 diff --git a/Marlin/src/libs/numtostr.cpp b/Marlin/src/libs/numtostr.cpp index 1e1ac05710..f4d47983d2 100644 --- a/Marlin/src/libs/numtostr.cpp +++ b/Marlin/src/libs/numtostr.cpp @@ -377,10 +377,10 @@ const char* ftostr53sign(const_float_t f) { return conv; } -// Convert unsigned float to string with ____4.5, __34.5, _234.5, 1234.5 format -const char* ftostr51rj(const_float_t f) { +// Convert unsigned float to string with ____5.6, ___45.6, __345.6, _2345.6, 12345.6 format +const char* ftostr61rj(const_float_t f) { const long i = UINTFLOAT(f, 1); - conv[0] = ' '; + conv[0] = RJDIGIT(i, 100000); conv[1] = RJDIGIT(i, 10000); conv[2] = RJDIGIT(i, 1000); conv[3] = RJDIGIT(i, 100); diff --git a/Marlin/src/libs/numtostr.h b/Marlin/src/libs/numtostr.h index b058f3cdf6..1704d35e88 100644 --- a/Marlin/src/libs/numtostr.h +++ b/Marlin/src/libs/numtostr.h @@ -113,8 +113,8 @@ const char* ftostr52sign(const_float_t x); // Convert signed float to string with +12.345 format const char* ftostr53sign(const_float_t f); -// Convert unsigned float to string with 1234.5 format omitting trailing zeros -const char* ftostr51rj(const_float_t x); +// Convert unsigned float to string with 12345.6 format omitting trailing zeros +const char* ftostr61rj(const_float_t x); // Convert float to rj string with 123 or -12 format FORCE_INLINE const char* ftostr3(const_float_t x) { return i16tostr3rj(int16_t(x + (x < 0 ? -0.5f : 0.5f))); } From 687dc9ad4d89212ec4da8983e71b8772c03a1619 Mon Sep 17 00:00:00 2001 From: tombrazier <68918209+tombrazier@users.noreply.github.com> Date: Fri, 4 Mar 2022 21:57:51 +0000 Subject: [PATCH 528/532] =?UTF-8?q?=F0=9F=A9=B9=20Improve=20and=20apply=20?= =?UTF-8?q?XATC=20reset()=20(#23840)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/feature/x_twist.cpp | 7 +++++-- Marlin/src/lcd/menu/menu_x_twist.cpp | 3 +-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Marlin/src/feature/x_twist.cpp b/Marlin/src/feature/x_twist.cpp index deac1bceba..8910091239 100644 --- a/Marlin/src/feature/x_twist.cpp +++ b/Marlin/src/feature/x_twist.cpp @@ -24,18 +24,21 @@ #if ENABLED(X_AXIS_TWIST_COMPENSATION) #include "x_twist.h" +#include "../module/probe.h" XATC xatc; -bool XATC::enabled = true; +bool XATC::enabled; float XATC::spacing, XATC::start; xatc_array_t XATC::z_offset; // Initialized by settings.load() void XATC::reset() { constexpr float xzo[] = XATC_Z_OFFSETS; static_assert(COUNT(xzo) == XATC_MAX_POINTS, "XATC_Z_OFFSETS is the wrong size."); - enabled = false; COPY(z_offset, xzo); + xatc.spacing = (probe.max_x() - probe.min_x()) / (XATC_MAX_POINTS - 1); + xatc.start = probe.min_x(); + enabled = true; } void XATC::print_points() { diff --git a/Marlin/src/lcd/menu/menu_x_twist.cpp b/Marlin/src/lcd/menu/menu_x_twist.cpp index ca385ebfeb..93f8de07ad 100644 --- a/Marlin/src/lcd/menu/menu_x_twist.cpp +++ b/Marlin/src/lcd/menu/menu_x_twist.cpp @@ -189,8 +189,7 @@ void xatc_wizard_homing_done() { } if (ui.use_click()) { - xatc.spacing = (probe.max_x() - probe.min_x()) / (XATC_MAX_POINTS - 1); - xatc.start = probe.min_x(); + xatc.reset(); SET_SOFT_ENDSTOP_LOOSE(true); // Disable soft endstops for free Z movement From 0e1ecf1fe0868d5467aa8b61feeac22a857db6ec Mon Sep 17 00:00:00 2001 From: Jack Wilsdon Date: Fri, 4 Mar 2022 21:59:38 +0000 Subject: [PATCH 529/532] =?UTF-8?q?=F0=9F=90=9B=20Emergency=20Parser=20wit?= =?UTF-8?q?h=20STM32=20Mass=20Storage=20(#23827)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/HAL/STM32/HAL.cpp | 2 +- Marlin/src/HAL/STM32/usb_serial.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/HAL/STM32/HAL.cpp b/Marlin/src/HAL/STM32/HAL.cpp index 324a78316a..d28f506db9 100644 --- a/Marlin/src/HAL/STM32/HAL.cpp +++ b/Marlin/src/HAL/STM32/HAL.cpp @@ -89,7 +89,7 @@ void MarlinHAL::init() { SetTimerInterruptPriorities(); - #if ENABLED(EMERGENCY_PARSER) && USBD_USE_CDC + #if ENABLED(EMERGENCY_PARSER) && (USBD_USE_CDC || USBD_USE_CDC_MSC) USB_Hook_init(); #endif diff --git a/Marlin/src/HAL/STM32/usb_serial.cpp b/Marlin/src/HAL/STM32/usb_serial.cpp index b607275db5..0b2372f3a7 100644 --- a/Marlin/src/HAL/STM32/usb_serial.cpp +++ b/Marlin/src/HAL/STM32/usb_serial.cpp @@ -26,7 +26,7 @@ #include "../../inc/MarlinConfigPre.h" -#if ENABLED(EMERGENCY_PARSER) && USBD_USE_CDC +#if ENABLED(EMERGENCY_PARSER) && (USBD_USE_CDC || USBD_USE_CDC_MSC) #include "usb_serial.h" #include "../../feature/e_parser.h" From 87e19fe5e714feaebea4f91f6dbc8324d0eecc3f Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 4 Mar 2022 16:07:38 -0600 Subject: [PATCH 530/532] =?UTF-8?q?=F0=9F=94=A7=20Mark=20Thermal=20Varianc?= =?UTF-8?q?e=20Monitor=20EXPERIMENTAL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/Configuration_adv.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 55857f5dec..2cccfce054 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -347,7 +347,11 @@ #endif #if ANY(THERMAL_PROTECTION_HOTENDS, THERMAL_PROTECTION_BED, THERMAL_PROTECTION_CHAMBER, THERMAL_PROTECTION_COOLER) - #define THERMAL_PROTECTION_VARIANCE_MONITOR // Detect a sensor malfunction preventing temperature updates + /** + * Thermal Protection Variance Monitor - EXPERIMENTAL. + * Kill the machine on a stuck temperature sensor. Disable if you get false positives. + */ + //#define THERMAL_PROTECTION_VARIANCE_MONITOR // Detect a sensor malfunction preventing temperature updates #endif #if ENABLED(PIDTEMP) From d2c503eea2b5373fa8af6577c8047014966ce0f4 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 4 Mar 2022 16:55:01 -0600 Subject: [PATCH 531/532] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20num-to-string=20fo?= =?UTF-8?q?llowup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/menu/menu_advanced.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp index d2c9b30c04..1bc9b9e88e 100644 --- a/Marlin/src/lcd/menu/menu_advanced.cpp +++ b/Marlin/src/lcd/menu/menu_advanced.cpp @@ -523,7 +523,7 @@ void menu_advanced_steps_per_mm() { START_MENU(); BACK_ITEM(MSG_ADVANCED_SETTINGS); - #define EDIT_QSTEPS(Q) EDIT_ITEM_FAST(float51, MSG_##Q##_STEPS, &planner.settings.axis_steps_per_mm[_AXIS(Q)], 5, 9999, []{ planner.refresh_positioning(); }) + #define EDIT_QSTEPS(Q) EDIT_ITEM_FAST(float61, MSG_##Q##_STEPS, &planner.settings.axis_steps_per_mm[_AXIS(Q)], 5, 9999, []{ planner.refresh_positioning(); }) LINEAR_AXIS_CODE( EDIT_QSTEPS(A), EDIT_QSTEPS(B), EDIT_QSTEPS(C), EDIT_QSTEPS(I), EDIT_QSTEPS(J), EDIT_QSTEPS(K) @@ -531,7 +531,7 @@ void menu_advanced_steps_per_mm() { #if ENABLED(DISTINCT_E_FACTORS) LOOP_L_N(n, E_STEPPERS) - EDIT_ITEM_FAST_N(float51, n, MSG_EN_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(n)], 5, 9999, []{ + EDIT_ITEM_FAST_N(float61, n, MSG_EN_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(n)], 5, 9999, []{ const uint8_t e = MenuItemBase::itemIndex; if (e == active_extruder) planner.refresh_positioning(); @@ -539,7 +539,7 @@ void menu_advanced_steps_per_mm() { planner.mm_per_step[E_AXIS_N(e)] = 1.0f / planner.settings.axis_steps_per_mm[E_AXIS_N(e)]; }); #elif E_STEPPERS - EDIT_ITEM_FAST(float51, MSG_E_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, []{ planner.refresh_positioning(); }); + EDIT_ITEM_FAST(float61, MSG_E_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, []{ planner.refresh_positioning(); }); #endif END_MENU(); From 323ac9488ce0562611d0144ab8ba700d272c00c7 Mon Sep 17 00:00:00 2001 From: thinkyhead Date: Sat, 5 Mar 2022 00:25:32 +0000 Subject: [PATCH 532/532] [cron] Bump distribution date (2022-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 f3bc739f95..bd05df75c0 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 "2022-03-03" +//#define STRING_DISTRIBUTION_DATE "2022-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 7d9bd44b1f..4af25302be 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 "2022-03-03" + #define STRING_DISTRIBUTION_DATE "2022-03-05" #endif /**