Browse Source

Multi-language support (#15453)

Marcio Teixeira 5 years ago
parent
commit
6a865a6146

+ 5 - 4
Marlin/src/Marlin.cpp

@@ -324,7 +324,7 @@ void disable_all_steppers() {
       #ifdef ACTION_ON_CANCEL
         host_action_cancel();
       #endif
-      kill(PSTR(MSG_ERR_PROBING_FAILED));
+      kill(GET_TEXT(MSG_LCD_PROBING_FAILED));
     #endif
   }
 
@@ -686,15 +686,16 @@ void idle(
  * Kill all activity and lock the machine.
  * After this the machine will need to be reset.
  */
-void kill(PGM_P const lcd_msg/*=nullptr*/, const bool steppers_off/*=false*/) {
+void kill(PGM_P const lcd_error/*=nullptr*/, PGM_P const lcd_component/*=nullptr*/, const bool steppers_off/*=false*/) {
   thermalManager.disable_all_heaters();
 
   SERIAL_ERROR_MSG(MSG_ERR_KILLED);
 
   #if HAS_DISPLAY
-    ui.kill_screen(lcd_msg ?: PSTR(MSG_KILLED));
+    ui.kill_screen(lcd_error ?: GET_TEXT(MSG_KILLED), lcd_component);
   #else
-    UNUSED(lcd_msg);
+    UNUSED(lcd_error);
+    UNUSED(lcd_component);
   #endif
 
   #ifdef ACTION_ON_KILL

+ 1 - 1
Marlin/src/Marlin.h

@@ -322,7 +322,7 @@ void disable_e_stepper(const uint8_t e);
 void disable_e_steppers();
 void disable_all_steppers();
 
-void kill(PGM_P const lcd_msg=nullptr, const bool steppers_off=false);
+void kill(PGM_P const lcd_error=nullptr, PGM_P const lcd_component=nullptr, const bool steppers_off=false);
 void minkill(const bool steppers_off=false);
 
 void quickstop_stepper();

+ 31 - 24
Marlin/src/core/language.h

@@ -97,7 +97,20 @@
 //  #define STRING_SPLASH_LINE3 WEBSITE_URL
 //#endif
 
-#if HAS_GRAPHICAL_LCD
+#if HAS_CHARACTER_LCD
+
+  // Custom characters defined in the first 8 characters of the LCD
+  #define LCD_STR_BEDTEMP     "\x00" // Print only as a char. This will have 'unexpected' results when used in a string!
+  #define LCD_STR_DEGREE      "\x01"
+  #define LCD_STR_THERMOMETER "\x02" // Still used with string concatenation
+  #define LCD_STR_UPLEVEL     "\x03"
+  #define LCD_STR_REFRESH     "\x04"
+  #define LCD_STR_FOLDER      "\x05"
+  #define LCD_STR_FEEDRATE    "\x06"
+  #define LCD_STR_CLOCK       "\x07"
+  #define LCD_STR_ARROW_RIGHT ">"  /* from the default character set */
+
+#else
   //
   // Custom characters from Marlin_symbols.fon which was merged into ISO10646-0-3.bdf
   // \x00 intentionally skipped to avoid problems in strings
@@ -120,19 +133,6 @@
   #define LCD_STR_FILAM_DIA   "\xF8"
   #define LCD_STR_FILAM_MUL   "\xA4"
 
-#elif HAS_CHARACTER_LCD
-
-  // Custom characters defined in the first 8 characters of the LCD
-  #define LCD_STR_BEDTEMP     "\x00" // Print only as a char. This will have 'unexpected' results when used in a string!
-  #define LCD_STR_DEGREE      "\x01"
-  #define LCD_STR_THERMOMETER "\x02" // Still used with string concatenation
-  #define LCD_STR_UPLEVEL     "\x03"
-  #define LCD_STR_REFRESH     "\x04"
-  #define LCD_STR_FOLDER      "\x05"
-  #define LCD_STR_FEEDRATE    "\x06"
-  #define LCD_STR_CLOCK       "\x07"
-  #define LCD_STR_ARROW_RIGHT ">"  /* from the default character set */
-
 #endif
 
 // Common LCD messages
@@ -243,10 +243,9 @@
 #define MSG_ERR_COLD_EXTRUDE_STOP           " cold extrusion prevented"
 #define MSG_ERR_LONG_EXTRUDE_STOP           " too long extrusion prevented"
 #define MSG_ERR_HOTEND_TOO_COLD             "Hotend too cold"
+#define MSG_ERR_Z_HOMING_SER                "Home XY first"
+#define MSG_ERR_EEPROM_WRITE                "Error writing to EEPROM!"
 
-#define MSG_FILAMENT_CHANGE_HEAT            "Press button (or M108) to heat nozzle"
-#define MSG_FILAMENT_CHANGE_INSERT          "Insert filament and press button (or M108)"
-#define MSG_FILAMENT_CHANGE_WAIT            "Press button (or M108) to resume"
 #define MSG_FILAMENT_CHANGE_HEAT_LCD        "Press button to heat nozzle"
 #define MSG_FILAMENT_CHANGE_INSERT_LCD      "Insert filament and press button"
 #define MSG_FILAMENT_CHANGE_WAIT_LCD        "Press button to resume"
@@ -254,8 +253,6 @@
 #define MSG_FILAMENT_CHANGE_INSERT_M108     "Insert filament and send M108"
 #define MSG_FILAMENT_CHANGE_WAIT_M108       "Send M108 to resume"
 
-#define MSG_ERR_EEPROM_WRITE                "Error writing to EEPROM!"
-
 #define MSG_STOP_BLTOUCH                    "STOP called because of BLTouch error - restart with M999"
 #define MSG_STOP_UNHOMED                    "STOP called because of unhomed error - restart with M999"
 #define MSG_KILL_INACTIVE_TIME              "KILL caused by too much inactive time - current command: "
@@ -298,6 +295,8 @@
 #define MSG_T_THERMAL_RUNAWAY               "Thermal Runaway"
 #define MSG_T_MAXTEMP                       "MAXTEMP triggered"
 #define MSG_T_MINTEMP                       "MINTEMP triggered"
+#define MSG_ERR_PROBING_FAILED              "Probing Failed"
+#define MSG_ZPROBE_OUT_SER                  "Z Probe Past Bed"
 
 // Debug
 #define MSG_DEBUG_PREFIX                    "DEBUG:"
@@ -313,11 +312,9 @@
 
 #define LANGUAGE_DATA_INCL_(M) STRINGIFY_(fontdata/langdata_##M.h)
 #define LANGUAGE_DATA_INCL(M) LANGUAGE_DATA_INCL_(M)
-#define INCLUDE_LANGUAGE_DATA LANGUAGE_DATA_INCL(LCD_LANGUAGE)
 
 #define LANGUAGE_INCL_(M) STRINGIFY_(../lcd/language/language_##M.h)
 #define LANGUAGE_INCL(M) LANGUAGE_INCL_(M)
-#define INCLUDE_LANGUAGE LANGUAGE_INCL(LCD_LANGUAGE)
 
 // Never translate these strings
 #define MSG_X "X"
@@ -338,6 +335,11 @@
 #define MSG_Z2 "Z2"
 #define MSG_Z3 "Z3"
 
+#define LCD_STR_A MSG_A
+#define LCD_STR_B MSG_B
+#define LCD_STR_C MSG_C
+#define LCD_STR_E MSG_E
+
 /**
  * Tool indexes for LCD display only
  *
@@ -370,7 +372,14 @@
 #define LCD_STR_E4 "E" LCD_STR_N4
 #define LCD_STR_E5 "E" LCD_STR_N5
 
-#include INCLUDE_LANGUAGE
+#include "multi_language.h"   // Allow multiple languages
+
+#include "../lcd/language/language_en.h"
+#include LANGUAGE_INCL(LCD_LANGUAGE)
+#include LANGUAGE_INCL(LCD_LANGUAGE_2)
+#include LANGUAGE_INCL(LCD_LANGUAGE_3)
+#include LANGUAGE_INCL(LCD_LANGUAGE_4)
+#include LANGUAGE_INCL(LCD_LANGUAGE_5)
 
 #if NONE(DISPLAY_CHARSET_ISO10646_1, \
          DISPLAY_CHARSET_ISO10646_5, \
@@ -383,5 +392,3 @@
          DISPLAY_CHARSET_ISO10646_SK)
   #define DISPLAY_CHARSET_ISO10646_1 // use the better font on full graphic displays.
 #endif
-
-#include "../lcd/language/language_en.h"

+ 0 - 0
Marlin/src/core/multi_language.cpp


+ 79 - 0
Marlin/src/core/multi_language.h

@@ -0,0 +1,79 @@
+/********************
+ * multi_language.h *
+ ********************/
+
+/****************************************************************************
+ *   Written By Marcio Teixeira 2019 - Aleph Objects, Inc.                  *
+ *                                                                          *
+ *   This program is free software: you can redistribute it and/or modify   *
+ *   it under the terms of the GNU General Public License as published by   *
+ *   the Free Software Foundation, either version 3 of the License, or      *
+ *   (at your option) any later version.                                    *
+ *                                                                          *
+ *   This program is distributed in the hope that it will be useful,        *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+ *   GNU General Public License for more details.                           *
+ *                                                                          *
+ *   To view a copy of the GNU General Public License, go to the following  *
+ *   location: <http://www.gnu.org/licenses/>.                              *
+ ****************************************************************************/
+#pragma once
+
+typedef const char Language_Str[];
+
+#if defined(LCD_LANGUAGE_5)
+  #define NUM_LANGUAGES 5
+#elif defined(LCD_LANGUAGE_4)
+  #define NUM_LANGUAGES 4
+#elif defined(LCD_LANGUAGE_3)
+  #define NUM_LANGUAGES 3
+#elif defined(LCD_LANGUAGE_2)
+  #define NUM_LANGUAGES 2
+#else
+  #define NUM_LANGUAGES 1
+#endif
+
+// Setting the unused languages equal to each other allows
+// the compiler to optimize away the conditionals
+
+#ifndef LCD_LANGUAGE_2
+  #define LCD_LANGUAGE_2 LCD_LANGUAGE
+#endif
+
+#ifndef LCD_LANGUAGE_3
+  #define LCD_LANGUAGE_3 LCD_LANGUAGE_2
+#endif
+
+#ifndef LCD_LANGUAGE_4
+  #define LCD_LANGUAGE_4 LCD_LANGUAGE_3
+#endif
+
+#ifndef LCD_LANGUAGE_5
+  #define LCD_LANGUAGE_5 LCD_LANGUAGE_4
+#endif
+
+#define _GET_LANG(LANG) Language_##LANG
+#define GET_LANG(LANG) _GET_LANG(LANG)
+
+#if NUM_LANGUAGES > 1
+  extern uint8_t lang;
+  #define GET_TEXT(MSG) ( \
+    lang == 0 ? GET_LANG(LCD_LANGUAGE)::MSG : \
+    lang == 1 ? GET_LANG(LCD_LANGUAGE_2)::MSG : \
+    lang == 2 ? GET_LANG(LCD_LANGUAGE_3)::MSG : \
+    lang == 3 ? GET_LANG(LCD_LANGUAGE_4)::MSG : \
+                GET_LANG(LCD_LANGUAGE_5)::MSG \
+    )
+  #define MAX_LANG_CHARSIZE max(GET_LANG(LCD_LANGUAGE)::CHARSIZE, \
+                                GET_LANG(LCD_LANGUAGE_2)::CHARSIZE, \
+                                GET_LANG(LCD_LANGUAGE_3)::CHARSIZE, \
+                                GET_LANG(LCD_LANGUAGE_4)::CHARSIZE, \
+                                GET_LANG(LCD_LANGUAGE_5)::CHARSIZE)
+#else
+  #define GET_TEXT(MSG) GET_LANG(LCD_LANGUAGE)::MSG
+  #define MAX_LANG_CHARSIZE GET_LANG(LCD_LANGUAGE)::CHARSIZE
+#endif
+#define GET_TEXT_F(MSG) (const __FlashStringHelper*)GET_TEXT(MSG)
+
+#define MSG_CONCAT(A,B) pgm_p_pair_t(GET_TEXT(A),GET_TEXT(B))

+ 10 - 10
Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp

@@ -757,7 +757,7 @@
         const int point_num = (GRID_MAX_POINTS) - count + 1;
         SERIAL_ECHOLNPAIR("\nProbing mesh point ", point_num, "/", int(GRID_MAX_POINTS), ".\n");
         #if HAS_DISPLAY
-          ui.status_printf_P(0, PSTR(MSG_PROBING_MESH " %i/%i"), point_num, int(GRID_MAX_POINTS));
+          ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_MESH), point_num, int(GRID_MAX_POINTS));
         #endif
 
         #if HAS_LCD_MENU
@@ -921,7 +921,7 @@
 
         if (do_ubl_mesh_map) display_map(g29_map_type);  // show user where we're probing
 
-        serialprintPGM(parser.seen('B') ? PSTR(MSG_UBL_BC_INSERT) : PSTR(MSG_UBL_BC_INSERT2));
+        serialprintPGM(parser.seen('B') ? GET_TEXT(MSG_UBL_BC_INSERT) : GET_TEXT(MSG_UBL_BC_INSERT2));
 
         const float z_step = 0.01f;                         // existing behavior: 0.01mm per click, occasionally step
         //const float z_step = planner.steps_to_mm[Z_AXIS]; // approx one step each click
@@ -959,7 +959,7 @@
     void abort_fine_tune() {
       ui.return_to_status();
       do_blocking_move_to_z(Z_CLEARANCE_BETWEEN_PROBES);
-      set_message_with_feedback(PSTR(MSG_EDITING_STOPPED));
+      set_message_with_feedback(GET_TEXT(MSG_EDITING_STOPPED));
     }
 
     void unified_bed_leveling::fine_tune_mesh(const xy_pos_t &pos, const bool do_ubl_mesh_map) {
@@ -1072,7 +1072,7 @@
     bool err_flag = false;
 
     #if HAS_LCD_MENU
-      set_message_with_feedback(PSTR(MSG_UBL_DOING_G29));
+      set_message_with_feedback(GET_TEXT(MSG_UBL_DOING_G29));
     #endif
 
     g29_constant = 0;
@@ -1196,7 +1196,7 @@
       if (ubl_state_recursion_chk != 1) {
         SERIAL_ECHOLNPGM("save_ubl_active_state_and_disabled() called multiple times in a row.");
         #if HAS_LCD_MENU
-          set_message_with_feedback(PSTR(MSG_UBL_SAVE_ERROR));
+          set_message_with_feedback(GET_TEXT(MSG_UBL_SAVE_ERROR));
         #endif
         return;
       }
@@ -1210,7 +1210,7 @@
       if (--ubl_state_recursion_chk) {
         SERIAL_ECHOLNPGM("restore_ubl_active_state_and_leave() called too many times.");
         #if HAS_LCD_MENU
-          set_message_with_feedback(PSTR(MSG_UBL_RESTORE_ERROR));
+          set_message_with_feedback(GET_TEXT(MSG_UBL_RESTORE_ERROR));
         #endif
         return;
       }
@@ -1410,7 +1410,7 @@
       if (do_3_pt_leveling) {
         SERIAL_ECHOLNPGM("Tilting mesh (1/3)");
         #if HAS_DISPLAY
-          ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 1/3"));
+          ui.status_printf_P(0, PSTR(S_FMT " 1/3"), GET_TEXT(MSG_LCD_TILTING_MESH));
         #endif
 
         measured_z = probe_at_point(points[0], PROBE_PT_RAISE, g29_verbose_level);
@@ -1431,7 +1431,7 @@
         if (!abort_flag) {
           SERIAL_ECHOLNPGM("Tilting mesh (2/3)");
           #if HAS_DISPLAY
-            ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 2/3"));
+            ui.status_printf_P(0, PSTR(S_FMT " 2/3"), GET_TEXT(MSG_LCD_TILTING_MESH));
           #endif
 
           measured_z = probe_at_point(points[1], PROBE_PT_RAISE, g29_verbose_level);
@@ -1453,7 +1453,7 @@
         if (!abort_flag) {
           SERIAL_ECHOLNPGM("Tilting mesh (3/3)");
           #if HAS_DISPLAY
-            ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 3/3"));
+            ui.status_printf_P(0, PSTR(S_FMT " 3/3"), GET_TEXT(MSG_LCD_TILTING_MESH));
           #endif
 
           measured_z = probe_at_point(points[2], PROBE_PT_STOW, g29_verbose_level);
@@ -1497,7 +1497,7 @@
             if (!abort_flag) {
               SERIAL_ECHOLNPAIR("Tilting mesh point ", point_num, "/", total_points, "\n");
               #if HAS_DISPLAY
-                ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " %i/%i"), point_num, total_points);
+                ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_LCD_TILTING_MESH), point_num, total_points);
               #endif
 
               measured_z = probe_at_point(rpos, parser.seen('E') ? PROBE_PT_STOW : PROBE_PT_RAISE, g29_verbose_level); // TODO: Needs error handling

+ 13 - 14
Marlin/src/feature/pause.cpp

@@ -53,6 +53,7 @@
   #include "../lcd/extensible_ui/ui_api.h"
 #endif
 
+#include "../core/language.h"
 #include "../lcd/ultralcd.h"
 
 #if HAS_BUZZER
@@ -76,6 +77,12 @@ fil_change_settings_t fc_settings[EXTRUDERS];
   #include "../sd/cardreader.h"
 #endif
 
+#if ENABLED(EMERGENCY_PARSER)
+  #define _PMSG(L) L##_M108
+#else
+  #define _PMSG(L) L##_LCD
+#endif
+
 #if HAS_BUZZER
   static void filament_change_beep(const int8_t max_beep_count, const bool init=false) {
     if (pause_mode == PAUSE_MODE_PAUSE_PRINT) return;
@@ -163,7 +170,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
     #if HAS_LCD_MENU
       if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_INSERT, mode);
     #endif
-    SERIAL_ECHO_MSG(MSG_FILAMENT_CHANGE_INSERT);
+    SERIAL_ECHO_MSG(_PMSG(MSG_FILAMENT_CHANGE_INSERT));
 
     #if HAS_BUZZER
       filament_change_beep(max_beep_count, true);
@@ -188,7 +195,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
       host_action_prompt_show();
     #endif
     #if ENABLED(EXTENSIBLE_UI)
-      ExtUI::onUserConfirmRequired(PSTR("Load Filament"));
+      ExtUI::onUserConfirmRequired_P(PSTR("Load Filament"));
     #endif
     while (wait_for_user) {
       #if HAS_BUZZER
@@ -243,7 +250,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
       host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Filament Purge Running..."), PSTR("Continue"));
     #endif
     #if ENABLED(EXTENSIBLE_UI)
-      ExtUI::onUserConfirmRequired(PSTR("Filament Purge Running..."));
+      ExtUI::onUserConfirmRequired_P(PSTR("Filament Purge Running..."));
     #endif
     for (float purge_count = purge_length; purge_count > 0 && wait_for_user; --purge_count)
       do_pause_e_move(1, ADVANCED_PAUSE_PURGE_FEEDRATE);
@@ -481,14 +488,6 @@ bool pause_print(const float &retract, const xyz_pos_t &park_point, const float
  * Used by M125 and M600
  */
 
-#if (HAS_LCD_MENU || ENABLED(EXTENSIBLE_UI)) && ENABLED(EMERGENCY_PARSER)
-  #define _PMSG(L) L
-#elif ENABLED(EMERGENCY_PARSER)
-  #define _PMSG(L) L##_M108
-#else
-  #define _PMSG(L) L##_LCD
-#endif
-
 void show_continue_prompt(const bool is_reload) {
   #if HAS_LCD_MENU
     lcd_pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING);
@@ -527,7 +526,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
     host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Nozzle Parked"), PSTR("Continue"));
   #endif
   #if ENABLED(EXTENSIBLE_UI)
-    ExtUI::onUserConfirmRequired(PSTR("Nozzle Parked"));
+    ExtUI::onUserConfirmRequired_P(PSTR("Nozzle Parked"));
   #endif
   while (wait_for_user) {
     #if HAS_BUZZER
@@ -551,7 +550,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
       #endif
 
       #if ENABLED(EXTENSIBLE_UI)
-        ExtUI::onUserConfirmRequired(PSTR("HeaterTimeout"));
+        ExtUI::onUserConfirmRequired_P(PSTR("HeaterTimeout"));
       #endif
 
       // Wait for LCD click or M108
@@ -581,7 +580,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
         host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Reheat Done"), PSTR("Continue"));
       #endif
       #if ENABLED(EXTENSIBLE_UI)
-        ExtUI::onUserConfirmRequired("Reheat finished.");
+        ExtUI::onUserConfirmRequired_P(PSTR("Reheat finished."));
       #endif
       wait_for_user = true;
       nozzle_timed_out = false;

+ 1 - 1
Marlin/src/feature/power_loss_recovery.cpp

@@ -228,7 +228,7 @@ void PrintJobRecovery::save(const bool force/*=false*/, const bool save_queue/*=
 #if PIN_EXISTS(POWER_LOSS)
   void PrintJobRecovery::_outage() {
     save(true);
-    kill(PSTR(MSG_OUTAGE_RECOVERY));
+    kill(GET_TEXT(MSG_OUTAGE_RECOVERY));
   }
 #endif
 

+ 3 - 3
Marlin/src/feature/prusa_MMU2/mmu2.cpp

@@ -433,7 +433,7 @@ bool MMU2::rx_ok() {
 void MMU2::check_version() {
   if (buildnr < MMU_REQUIRED_FW_BUILDNR) {
     SERIAL_ERROR_MSG("Invalid MMU2 firmware. Version >= " STRINGIFY(MMU_REQUIRED_FW_BUILDNR) " required.");
-    kill(MSG_MMU2_WRONG_FIRMWARE);
+    kill(GET_TEXT(MSG_MMU2_WRONG_FIRMWARE));
   }
 }
 
@@ -449,7 +449,7 @@ void MMU2::tool_change(uint8_t index) {
   if (index != extruder) {
 
     disable_E0();
-    ui.status_printf_P(0, PSTR(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
+    ui.status_printf_P(0, GET_TEXT(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
 
     command(MMU_CMD_T0 + index);
 
@@ -712,7 +712,7 @@ void MMU2::filament_runout() {
         host_prompt_do(PROMPT_USER_CONTINUE, PSTR("MMU2 Eject Recover"), PSTR("Continue"));
       #endif
       #if ENABLED(EXTENSIBLE_UI)
-        ExtUI::onUserConfirmRequired(PSTR("MMU2 Eject Recover"));
+        ExtUI::onUserConfirmRequired_P(PSTR("MMU2 Eject Recover"));
       #endif
       while (wait_for_user) idle();
       BUZZ(200, 404);

+ 1 - 1
Marlin/src/feature/tmc_util.cpp

@@ -1118,7 +1118,7 @@ void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z
     #endif
   }
 
-  if (axis_connection) ui.set_status_P(PSTR(MSG_ERROR_TMC));
+  if (axis_connection) ui.set_status_P(GET_TEXT(MSG_ERROR_TMC));
 }
 
 #endif // HAS_TRINAMIC

Some files were not shown because too many files changed in this diff