Compare commits

...

73 Commits

Author SHA1 Message Date
Scott Lahteine
136075d3fe Update .gitignore 2023-12-27 15:25:59 -06:00
Scott Lahteine
42facec7ce 🔖 Marlin 2.0.4.5 2023-07-20 14:14:30 -05:00
Scott Lahteine
e8b5641b27 🔨 PlatformIO 6 compatibility 2023-07-20 14:14:30 -05:00
Scott Lahteine
d6e767e36b Version 2.0.4.4 Release 2020-02-27 04:15:00 -06:00
Scott Lahteine
b29aae6c0c Merge 'bugfix-2.0.x' into 2.0.x 2020-02-27 04:14:33 -06:00
Roman Moravčík
9f8ee31144 Update Slovak language (#17002) 2020-02-27 03:38:46 -06:00
Makoto Schoppert
8164cac797 Fix planner.cpp compile (#16996) 2020-02-27 03:29:44 -06:00
thinkyhead
a80eda41bc [cron] Bump distribution date (2020-02-27) 2020-02-27 00:03:42 +00:00
Scott Lahteine
bafe8d920a Handle print completed LED event in M0 2020-02-26 12:02:54 -06:00
Scott Lahteine
633b716a3a Define DIAG pins for MKS SGen-L 2020-02-26 11:35:07 -06:00
Scott Lahteine
832951ec44 Case-insensitive g-code option (#16932) 2020-02-26 09:23:55 -06:00
Scott Lahteine
18b875dc9f Allow print recovery after parking 2020-02-26 08:16:46 -06:00
Scott Lahteine
6fd7f4fe1b Fix unified status bed temp display 2020-02-26 08:09:57 -06:00
Scott Lahteine
263a7beeb5 More extra travel jerk changes
Co-Authored-By: josedpedroso <josedpedroso@users.noreply.github.com>
2020-02-26 07:24:36 -06:00
Scott Lahteine
6913a4dfa8 Prevent park_point compile error 2020-02-26 07:10:35 -06:00
Scott Lahteine
025c50cc6d Quick-homing sensorless back-off (#16872) 2020-02-26 06:50:13 -06:00
Scott Lahteine
02cce7d4b4 Add TRAVEL_EXTRA_XYJERK option
See #16949

Co-Authored-By: josedpedroso <josedpedroso@users.noreply.github.com>
2020-02-26 06:43:07 -06:00
Scott Lahteine
0a7e7a6fa5 Allow servo features in combination (#16960) 2020-02-26 06:26:54 -06:00
Scott Lahteine
daa32013b1 Sanity check for LPC serial pin conflict (#16981) 2020-02-26 06:26:30 -06:00
Scott Lahteine
ec1b86d9cb Serial strings in macros 2020-02-26 05:38:33 -06:00
Scott Lahteine
cf597e2bb1 Allow weird probe values in G33 2020-02-26 05:33:57 -06:00
ellensp
e76f2ed4cb Fix Trinamic pulse rate auto-assignment (#16966) 2020-02-26 04:34:21 -06:00
Scott Lahteine
b5c2190b38 String optimize followup 2020-02-26 04:32:40 -06:00
InsanityAutomation
28008aced0 Correct SKR expansion port pins (#16974) 2020-02-26 04:18:34 -06:00
ellensp
70af080813 Add LPC1768 Serial ports for pinsDebug (#16980) 2020-02-26 04:12:53 -06:00
Scott Lahteine
5ebba4b19f More serial strings 2020-02-26 04:11:12 -06:00
InsanityAutomation
cdcd45d651 Set LCD status for EEPROM errors (#16977) 2020-02-26 03:04:02 -06:00
Scott Lahteine
e78f607ef3 Use a STR_ prefix for non-translated strings 2020-02-26 03:02:03 -06:00
Scott Lahteine
6b9a17be16 Language: "failsafe" => "Defaults" 2020-02-26 02:03:47 -06:00
InsanityAutomation
4250a98908 Toolchange improvements (#16979) 2020-02-26 00:12:14 -06:00
InsanityAutomation
ba4f49f4a2 Fix GTR10 overlapping defines (#16976) 2020-02-25 22:56:52 -06:00
Scott Lahteine
5b438fb20d HAS_SDCARD_CONNECTION is more obsolete 2020-02-25 22:30:30 -06:00
Scott Lahteine
5071fe82ab Ensure proper SD print completion (#16967) 2020-02-25 22:18:14 -06:00
thinkyhead
91cff02596 [cron] Bump distribution date (2020-02-26) 2020-02-26 00:03:52 +00:00
Scott Lahteine
454cbcce51 Fix the wait loop in M0 / M1 2020-02-25 12:20:54 -06:00
InsanityAutomation
6bfae5de6f Fix SKR 1.4 Turbo SD_DETECT_PIN (#16955) 2020-02-25 03:17:08 -06:00
InsanityAutomation
3e685777a8 Fix LCD cutter/bed icons overlapping (#16956) 2020-02-25 03:07:36 -06:00
Giuliano Zaro
d13b153230 Update Italian language (#16947) 2020-02-25 03:05:58 -06:00
InsanityAutomation
3a6f776c4b Update POWER_LOSS_PIN comment (#16957) 2020-02-24 23:51:10 -06:00
thinkyhead
ca305b03b7 [cron] Bump distribution date (2020-02-25) 2020-02-25 00:04:00 +00:00
Scott Lahteine
1955eea1b8 Version 2.0.4.3 Release 2020-02-24 11:01:52 -06:00
Scott Lahteine
42fa9fc570 Fix card_eof error 2020-02-24 11:01:52 -06:00
Marcio T
130d0395d0 Restore tabs in Makefile (#16944) 2020-02-24 11:01:52 -06:00
Marcio T
c5f1ff9ee1 Allow Z_SAFE_HOMING_POINT outside bed (#16945) 2020-02-24 11:01:52 -06:00
Scott Lahteine
9040394e8e Fix card_eof error 2020-02-24 11:00:01 -06:00
Marcio T
955ce393df Restore tabs in Makefile (#16944) 2020-02-24 10:42:12 -06:00
Marcio T
92278a45ed Allow Z_SAFE_HOMING_POINT outside bed (#16945) 2020-02-24 10:40:12 -06:00
Scott Lahteine
089cc68a04 Merge nightly patches 2020-02-24 06:12:15 -06:00
Scott Lahteine
a254354e68 BS_TOTAL_AXIS => BS_TOTAL_IND 2020-02-24 06:11:43 -06:00
Scott Lahteine
5e197df89a Fix Babystepping loop (again) 2020-02-24 05:48:42 -06:00
Scott Lahteine
8ba5ef8cae "Init. Media" => "Attach Media" 2020-02-24 05:33:23 -06:00
Scott Lahteine
9a51f29efa Simplified E_AXIS_HAS macro 2020-02-23 23:55:56 -06:00
Jason Smith
ebd2bcc177 Fix AXIS_HAS_SW_SERIAL 2020-02-23 21:59:31 -06:00
thinkyhead
9717b3044f [cron] Bump distribution date (2020-02-24) 2020-02-24 00:03:56 +00:00
Jason Smith
2bcc2ec7d1 Reduce default TMC baudrate to 57600 with Software Serial (#16930) 2020-02-23 07:48:56 -06:00
Giuliano Zaro
529d57bddf Sync Italian language (#16935) 2020-02-23 07:47:30 -06:00
Scott Lahteine
0ba18848af Allow USE_GCODE_SUBCODES for debugging 2020-02-22 22:50:03 -06:00
Scott Lahteine
b2328d089a Allow LCD_PIXEL_WIDTH/HEIGHT override 2020-02-22 21:36:21 -06:00
Scott Lahteine
29ec868c4b Commit last SD line before fileHasFinished 2020-02-22 20:46:52 -06:00
Scott Lahteine
1d431fe8d2 Suppress "packed member" warning 2020-02-22 19:28:24 -06:00
Scott Lahteine
2b759b9e8d Suppress "packed member" warning 2020-02-22 19:26:52 -06:00
Scott Lahteine
5f27f7de47 Version 2.0.4.2 Release 2020-02-22 18:49:59 -06:00
Scott Lahteine
282f4678cd Merge nightly patches 2020-02-22 18:47:09 -06:00
ZMiguel Alves
2471a8bb91 Define ANET_FULL_GRAPHICS_LCD pins for SKR 1.4 (#16928) 2020-02-22 18:45:10 -06:00
ellensp
7bf3581b02 Fix M0/M1 broken wait loop (#16921) 2020-02-22 18:37:39 -06:00
Scott Lahteine
b9b29bf4c0 Followup to babystep hotfix 2020-02-22 18:34:49 -06:00
thisiskeithb
20df64814e Finish Custom User Menu sanity-check (#16917) 2020-02-22 18:33:34 -06:00
thinkyhead
34c92bbc17 [cron] Bump distribution date (2020-02-23) 2020-02-23 00:03:55 +00:00
vivian-ng
eeec4c27e7 [ESP32] Allow user to define pins for hardware Serial1 and Serial2 (#16918) 2020-02-22 04:00:10 -06:00
Scott Lahteine
484e1a624c CoreXY Babystepping hotfix 2020-02-22 02:52:59 -06:00
Scott Lahteine
ac3e27c026 Hotfix for Babystepping 2020-02-22 02:52:21 -06:00
Scott Lahteine
1ab6f910b6 Use moves_free in ok_to_send 2020-02-22 02:30:59 -06:00
thinkyhead
cfd49740eb [cron] Bump distribution date (2020-02-22) 2020-02-22 00:03:47 +00:00
168 changed files with 1712 additions and 1349 deletions

112
.gitignore vendored
View File

@@ -1,6 +1,6 @@
# #
# Marlin 3D Printer Firmware # Marlin 3D Printer Firmware
# Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] # Copyright (c) 2023 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
# #
# Based on Sprinter and grbl. # Based on Sprinter and grbl.
# Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm # Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
@@ -16,37 +16,26 @@
# GNU General Public License for more details. # GNU General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
# #
# Our automatic versioning scheme generates the following file # Generated files
# NEVER put it in the repository
_Version.h _Version.h
bdf2u8g.exe
genpages.exe
marlin_config.json
mczip.h
language*.csv
out-csv/
out-language/
*.gen
*.sublime-workspace
#
# OS # OS
#
applet/ applet/
*.DS_Store .DS_Store
# # Compiled C++ Object files
# Misc
#
*~
*.orig
*.rej
*.bak
*.idea
*.s
*.i
*.ii
*.swp
tags
#
# C++
#
# Compiled Object files
*.slo *.slo
*.lo *.lo
*.o *.o
@@ -77,11 +66,7 @@ tags
*.out *.out
*.app *.app
# Compiled C Object files
#
# C
#
# Object files
*.o *.o
*.ko *.ko
*.obj *.obj
@@ -123,33 +108,10 @@ tags
.gcc-flags.json .gcc-flags.json
/lib/ /lib/
# Workaround for Deviot+platformio quirks
Marlin/lib
Marlin/platformio.ini
Marlin/*/platformio.ini
Marlin/*/*/platformio.ini
Marlin/*/*/*/platformio.ini
Marlin/*/*/*/*/platformio.ini
Marlin/.travis.yml
Marlin/*/.travis.yml
Marlin/*/*/.travis.yml
Marlin/*/*/*/.travis.yml
Marlin/*/*/*/*/.travis.yml
Marlin/.gitignore
Marlin/*/.gitignore
Marlin/*/*/.gitignore
Marlin/*/*/*/.gitignore
Marlin/*/*/*/*/.gitignore
Marlin/readme.txt
Marlin/*/readme.txt
Marlin/*/*/readme.txt
Marlin/*/*/*/readme.txt
Marlin/*/*/*/*/readme.txt
# Secure Credentials # Secure Credentials
Configuration_Secure.h Configuration_Secure.h
#Visual Studio # Visual Studio
*.sln *.sln
*.vcxproj *.vcxproj
*.vcxproj.user *.vcxproj.user
@@ -160,27 +122,49 @@ __vm/
.vs/ .vs/
vc-fileutils.settings vc-fileutils.settings
#Visual Studio Code # Visual Studio Code
.vscode .vscode/*
.vscode/.browse.c_cpp.db* !.vscode/extensions.json
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/*.db
#cmake # Simulation files
imgui.ini
eeprom.dat
spi_flash.bin
fs.img
# CMake
buildroot/share/cmake/*
CMakeLists.txt CMakeLists.txt
!buildroot/share/cmake/CMakeLists.txt
src/CMakeLists.txt src/CMakeLists.txt
CMakeListsPrivate.txt CMakeListsPrivate.txt
build/
#CLion # CLion
cmake-build-* cmake-build-*
#Eclipse # Eclipse
.project .project
.cproject .cproject
.pydevproject .pydevproject
.settings .settings
.classpath .classpath
#Python # Python
__pycache__ __pycache__
# IOLogger logs
*_log.csv
# Misc.
*~
*.orig
*.rej
*.bak
*.idea
*.i
*.ii
*.swp
tags
*.logs
*.bak

View File

@@ -784,6 +784,8 @@
#define DEFAULT_YJERK 10.0 #define DEFAULT_YJERK 10.0
#define DEFAULT_ZJERK 0.3 #define DEFAULT_ZJERK 0.3
//#define TRAVEL_EXTRA_XYJERK 0.0 // Additional jerk allowance for all travel moves
//#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
#if ENABLED(LIMITED_JERK_EDITING) #if ENABLED(LIMITED_JERK_EDITING)
#define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits

View File

@@ -1044,7 +1044,7 @@
#if ENABLED(POWER_LOSS_RECOVERY) #if ENABLED(POWER_LOSS_RECOVERY)
//#define BACKUP_POWER_SUPPLY // Backup power / UPS to move the steppers on power loss //#define BACKUP_POWER_SUPPLY // Backup power / UPS to move the steppers on power loss
//#define POWER_LOSS_ZRAISE 2 // (mm) Z axis raise on resume (on power loss with UPS) //#define POWER_LOSS_ZRAISE 2 // (mm) Z axis raise on resume (on power loss with UPS)
//#define POWER_LOSS_PIN 44 // Pin to detect power loss //#define POWER_LOSS_PIN 44 // Pin to detect power loss. Set to -1 to disable default pin on boards without module.
//#define POWER_LOSS_STATE HIGH // State of pin indicating power loss //#define POWER_LOSS_STATE HIGH // State of pin indicating power loss
//#define POWER_LOSS_PULL // Set pullup / pulldown as appropriate //#define POWER_LOSS_PULL // Set pullup / pulldown as appropriate
//#define POWER_LOSS_PURGE_LEN 20 // (mm) Length of filament to purge on resume //#define POWER_LOSS_PURGE_LEN 20 // (mm) Length of filament to purge on resume
@@ -1172,18 +1172,16 @@
// Add an optimized binary file transfer mode, initiated with 'M28 B1' // Add an optimized binary file transfer mode, initiated with 'M28 B1'
//#define BINARY_FILE_TRANSFER //#define BINARY_FILE_TRANSFER
#if HAS_SDCARD_CONNECTION /**
/** * Set this option to one of the following (or the board's defaults apply):
* Set this option to one of the following (or the board's defaults apply): *
* * LCD - Use the SD drive in the external LCD controller.
* LCD - Use the SD drive in the external LCD controller. * ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.)
* ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.) * CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file).
* CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file). *
* * :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ]
* :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ] */
*/ //#define SDCARD_CONNECTION LCD
//#define SDCARD_CONNECTION LCD
#endif
#endif // SDSUPPORT #endif // SDSUPPORT
@@ -1260,6 +1258,7 @@
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating #define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating #define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
#define STATUS_CHAMBER_ANIM // Use a second bitmap to indicate chamber heating #define STATUS_CHAMBER_ANIM // Use a second bitmap to indicate chamber heating
//#define STATUS_CUTTER_ANIM // Use a second bitmap to indicate spindle / laser active
//#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap //#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap
//#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap //#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_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames
@@ -1896,7 +1895,7 @@
* TMC26X Stepper Driver options * TMC26X Stepper Driver options
* *
* The TMC26XStepper library is required for this stepper driver. * The TMC26XStepper library is required for this stepper driver.
* https://github.com/trinamic/TMC26XStepper * https://github.com/MarlinFirmware/TMC26XStepper
*/ */
#if HAS_DRIVER(TMC26X) #if HAS_DRIVER(TMC26X)
@@ -2791,6 +2790,8 @@
//#define GCODE_QUOTED_STRINGS // Support for quoted string parameters //#define GCODE_QUOTED_STRINGS // Support for quoted string parameters
#endif #endif
//#define GCODE_CASE_INSENSITIVE // Accept G-code sent to the firmware in lowercase
/** /**
* CNC G-code options * CNC G-code options
* Support CNC-style G-code dialects used by laser cutters, drawing machine cams, etc. * Support CNC-style G-code dialects used by laser cutters, drawing machine cams, etc.

View File

@@ -789,11 +789,11 @@ sym: $(BUILD_DIR)/$(TARGET).sym
# Do not try to reset an Arduino if it's not one # Do not try to reset an Arduino if it's not one
upload: $(BUILD_DIR)/$(TARGET).hex upload: $(BUILD_DIR)/$(TARGET).hex
ifeq (${AVRDUDE_PROGRAMMER}, arduino) ifeq (${AVRDUDE_PROGRAMMER}, arduino)
stty hup < $(UPLOAD_PORT); true stty hup < $(UPLOAD_PORT); true
endif endif
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)
ifeq (${AVRDUDE_PROGRAMMER}, arduino) ifeq (${AVRDUDE_PROGRAMMER}, arduino)
stty -hup < $(UPLOAD_PORT); true stty -hup < $(UPLOAD_PORT); true
endif endif
# Display size of file. # Display size of file.
@@ -801,10 +801,10 @@ HEXSIZE = $(SIZE) --target=$(FORMAT) $(BUILD_DIR)/$(TARGET).hex
ELFSIZE = $(SIZE) $(SIZE_FLAGS) $(BUILD_DIR)/$(TARGET).elf; \ ELFSIZE = $(SIZE) $(SIZE_FLAGS) $(BUILD_DIR)/$(TARGET).elf; \
$(SIZE) $(BUILD_DIR)/$(TARGET).elf $(SIZE) $(BUILD_DIR)/$(TARGET).elf
sizebefore: sizebefore:
$P if [ -f $(BUILD_DIR)/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(HEXSIZE); echo; fi $P if [ -f $(BUILD_DIR)/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(HEXSIZE); echo; fi
sizeafter: build sizeafter: build
$P if [ -f $(BUILD_DIR)/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi $P if [ -f $(BUILD_DIR)/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. # Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
@@ -816,71 +816,71 @@ COFFCONVERT=$(OBJCOPY) --debugging \
coff: $(BUILD_DIR)/$(TARGET).elf coff: $(BUILD_DIR)/$(TARGET).elf
$(COFFCONVERT) -O coff-avr $(BUILD_DIR)/$(TARGET).elf $(TARGET).cof $(COFFCONVERT) -O coff-avr $(BUILD_DIR)/$(TARGET).elf $(TARGET).cof
extcoff: $(TARGET).elf extcoff: $(TARGET).elf
$(COFFCONVERT) -O coff-ext-avr $(BUILD_DIR)/$(TARGET).elf $(TARGET).cof $(COFFCONVERT) -O coff-ext-avr $(BUILD_DIR)/$(TARGET).elf $(TARGET).cof
.SUFFIXES: .elf .hex .eep .lss .sym .bin .SUFFIXES: .elf .hex .eep .lss .sym .bin
.PRECIOUS: .o .PRECIOUS: .o
.elf.hex: .elf.hex:
$(Pecho) " COPY $@" $(Pecho) " COPY $@"
$P $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ $P $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
.elf.bin: .elf.bin:
$(Pecho) " COPY $@" $(Pecho) " COPY $@"
$P $(OBJCOPY) -O binary -R .eeprom $< $@ $P $(OBJCOPY) -O binary -R .eeprom $< $@
.elf.eep: .elf.eep:
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@ --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
# Create extended listing file from ELF output file. # Create extended listing file from ELF output file.
.elf.lss: .elf.lss:
$(OBJDUMP) -h -S $< > $@ $(OBJDUMP) -h -S $< > $@
# Create a symbol table from ELF output file. # Create a symbol table from ELF output file.
.elf.sym: .elf.sym:
$(NM) -n $< > $@ $(NM) -n $< > $@
# Link: create ELF output file from library. # Link: create ELF output file from library.
$(BUILD_DIR)/$(TARGET).elf: $(OBJ) Configuration.h $(BUILD_DIR)/$(TARGET).elf: $(OBJ) Configuration.h
$(Pecho) " CXX $@" $(Pecho) " CXX $@"
$P $(CC) $(LD_PREFIX) $(ALL_CXXFLAGS) -o $@ -L. $(OBJ) $(LDFLAGS) $(LD_SUFFIX) $P $(CC) $(LD_PREFIX) $(ALL_CXXFLAGS) -o $@ -L. $(OBJ) $(LDFLAGS) $(LD_SUFFIX)
# Object files that were found in "src" will be stored in $(BUILD_DIR) # Object files that were found in "src" will be stored in $(BUILD_DIR)
# in directories that mirror the structure of "src" # in directories that mirror the structure of "src"
$(BUILD_DIR)/%.o: %.c Configuration.h Configuration_adv.h $(MAKEFILE) $(BUILD_DIR)/%.o: %.c Configuration.h Configuration_adv.h $(MAKEFILE)
$(Pecho) " CC $<" $(Pecho) " CC $<"
$P $(CC) -MMD -c $(ALL_CFLAGS) $(CWARN) $< -o $@ $P $(CC) -MMD -c $(ALL_CFLAGS) $(CWARN) $< -o $@
$(BUILD_DIR)/%.o: %.cpp Configuration.h Configuration_adv.h $(MAKEFILE) $(BUILD_DIR)/%.o: %.cpp Configuration.h Configuration_adv.h $(MAKEFILE)
$(Pecho) " CXX $<" $(Pecho) " CXX $<"
$P $(CXX) -MMD -c $(ALL_CXXFLAGS) $(CXXWARN) $< -o $@ $P $(CXX) -MMD -c $(ALL_CXXFLAGS) $(CXXWARN) $< -o $@
# Object files for Arduino libs will be created in $(BUILD_DIR)/arduino # Object files for Arduino libs will be created in $(BUILD_DIR)/arduino
$(BUILD_DIR)/arduino/%.o: %.c Configuration.h Configuration_adv.h $(MAKEFILE) $(BUILD_DIR)/arduino/%.o: %.c Configuration.h Configuration_adv.h $(MAKEFILE)
$(Pecho) " CC $<" $(Pecho) " CC $<"
$P $(CC) -MMD -c $(ALL_CFLAGS) $(LIBWARN) $< -o $@ $P $(CC) -MMD -c $(ALL_CFLAGS) $(LIBWARN) $< -o $@
$(BUILD_DIR)/arduino/%.o: %.cpp Configuration.h Configuration_adv.h $(MAKEFILE) $(BUILD_DIR)/arduino/%.o: %.cpp Configuration.h Configuration_adv.h $(MAKEFILE)
$(Pecho) " CXX $<" $(Pecho) " CXX $<"
$P $(CXX) -MMD -c $(ALL_CXXFLAGS) $(LIBWARN) $< -o $@ $P $(CXX) -MMD -c $(ALL_CXXFLAGS) $(LIBWARN) $< -o $@
$(BUILD_DIR)/arduino/%.o: %.S $(MAKEFILE) $(BUILD_DIR)/arduino/%.o: %.S $(MAKEFILE)
$(Pecho) " CXX $<" $(Pecho) " CXX $<"
$P $(CXX) -MMD -c $(ALL_ASFLAGS) $< -o $@ $P $(CXX) -MMD -c $(ALL_ASFLAGS) $< -o $@
# Target: clean project. # Target: clean project.
clean: clean:
$(Pecho) " RMDIR $(BUILD_DIR)/" $(Pecho) " RMDIR $(BUILD_DIR)/"
$P rm -rf $(BUILD_DIR) $P rm -rf $(BUILD_DIR)
.PHONY: all build elf hex eep lss sym program coff extcoff clean depend sizebefore sizeafter .PHONY: all build elf hex eep lss sym program coff extcoff clean depend sizebefore sizeafter

View File

@@ -28,7 +28,7 @@
/** /**
* Marlin release version identifier * Marlin release version identifier
*/ */
//#define SHORT_BUILD_VERSION "2.0.4.1" //#define SHORT_BUILD_VERSION "2.0.4.5"
/** /**
* Verbose version identifier which should contain a reference to the location * Verbose version identifier which should contain a reference to the location
@@ -41,7 +41,7 @@
* here we define this default string as the date where the latest release * here we define this default string as the date where the latest release
* version was tagged. * version was tagged.
*/ */
//#define STRING_DISTRIBUTION_DATE "2020-01-31" //#define STRING_DISTRIBUTION_DATE "2023-07-19"
/** /**
* Defines a generic printer name to be output to the LCD after booting Marlin. * Defines a generic printer name to be output to the LCD after booting Marlin.

View File

@@ -39,7 +39,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
if (v != eeprom_read_byte(p)) { if (v != eeprom_read_byte(p)) {
eeprom_write_byte(p, v); eeprom_write_byte(p, v);
if (eeprom_read_byte(p) != v) { if (eeprom_read_byte(p) != v) {
SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE); SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
return true; return true;
} }
} }

View File

@@ -62,7 +62,7 @@ void watchdog_init() {
#if ENABLED(WATCHDOG_RESET_MANUAL) #if ENABLED(WATCHDOG_RESET_MANUAL)
ISR(WDT_vect) { ISR(WDT_vect) {
sei(); // With the interrupt driven serial we need to allow interrupts. sei(); // With the interrupt driven serial we need to allow interrupts.
SERIAL_ERROR_MSG(MSG_WATCHDOG_FIRED); SERIAL_ERROR_MSG(STR_WATCHDOG_FIRED);
minkill(); // interrupt-safe final kill and infinite loop minkill(); // interrupt-safe final kill and infinite loop
} }
#endif #endif

View File

@@ -54,7 +54,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
eeprom_write_byte(p, v); eeprom_write_byte(p, v);
delay(2); delay(2);
if (eeprom_read_byte(p) != v) { if (eeprom_read_byte(p) != v) {
SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE); SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
return true; return true;
} }
} }

View File

@@ -27,6 +27,7 @@
#include <rom/rtc.h> #include <rom/rtc.h>
#include <driver/adc.h> #include <driver/adc.h>
#include <esp_adc_cal.h> #include <esp_adc_cal.h>
#include <HardwareSerial.h>
#include "../../inc/MarlinConfigPre.h" #include "../../inc/MarlinConfigPre.h"
@@ -105,6 +106,27 @@ void HAL_init_board() {
#endif #endif
server.begin(); server.begin();
#endif #endif
// ESP32 uses a GPIO matrix that allows pins to be assigned to hardware serial ports.
// The following code initializes hardware Serial1 and Serial2 to use user-defined pins
// if they have been defined.
#if defined(HARDWARE_SERIAL1_RX) && defined(HARDWARE_SERIAL1_TX)
HardwareSerial Serial1(1);
#ifdef TMC_BAUD_RATE // use TMC_BAUD_RATE for Serial1 if defined
Serial1.begin(TMC_BAUD_RATE, SERIAL_8N1, HARDWARE_SERIAL1_RX, HARDWARE_SERIAL1_TX);
#else // use default BAUDRATE if TMC_BAUD_RATE not defined
Serial1.begin(BAUDRATE, SERIAL_8N1, HARDWARE_SERIAL1_RX, HARDWARE_SERIAL1_TX);
#endif
#endif
#if defined(HARDWARE_SERIAL2_RX) && defined(HARDWARE_SERIAL2_TX)
HardwareSerial Serial2(2);
#ifdef TMC_BAUD_RATE // use TMC_BAUD_RATE for Serial1 if defined
Serial2.begin(TMC_BAUD_RATE, SERIAL_8N1, HARDWARE_SERIAL2_RX, HARDWARE_SERIAL2_TX);
#else // use default BAUDRATE if TMC_BAUD_RATE not defined
Serial2.begin(BAUDRATE, SERIAL_8N1, HARDWARE_SERIAL2_RX, HARDWARE_SERIAL2_TX);
#endif
#endif
} }
void HAL_idletask() { void HAL_idletask() {

View File

@@ -32,21 +32,21 @@
} }
#endif #endif
#if (defined(SERIAL_PORT) && SERIAL_PORT == 1) || (defined(SERIAL_PORT_2) && SERIAL_PORT_2 == 1) || (defined(DGUS_SERIAL_PORT) && DGUS_SERIAL_PORT == 1) #if SERIAL_PORT == 1 || SERIAL_PORT_2 == 1 || DGUS_SERIAL_PORT == 1
MarlinSerial MSerial1((LPC_UART_TypeDef *) LPC_UART1); MarlinSerial MSerial1((LPC_UART_TypeDef *) LPC_UART1);
extern "C" void UART1_IRQHandler() { extern "C" void UART1_IRQHandler() {
MSerial1.IRQHandler(); MSerial1.IRQHandler();
} }
#endif #endif
#if (defined(SERIAL_PORT) && SERIAL_PORT == 2) || (defined(SERIAL_PORT_2) && SERIAL_PORT_2 == 2) || (defined(DGUS_SERIAL_PORT) && DGUS_SERIAL_PORT == 2) #if SERIAL_PORT == 2 || SERIAL_PORT_2 == 2 || DGUS_SERIAL_PORT == 2
MarlinSerial MSerial2(LPC_UART2); MarlinSerial MSerial2(LPC_UART2);
extern "C" void UART2_IRQHandler() { extern "C" void UART2_IRQHandler() {
MSerial2.IRQHandler(); MSerial2.IRQHandler();
} }
#endif #endif
#if (defined(SERIAL_PORT) && SERIAL_PORT == 3) || (defined(SERIAL_PORT_2) && SERIAL_PORT_2 == 3) || (defined(DGUS_SERIAL_PORT) && DGUS_SERIAL_PORT == 3) #if SERIAL_PORT == 3 || SERIAL_PORT_2 == 3 || DGUS_SERIAL_PORT == 3
MarlinSerial MSerial3(LPC_UART3); MarlinSerial MSerial3(LPC_UART3);
extern "C" void UART3_IRQHandler() { extern "C" void UART3_IRQHandler() {
MSerial3.IRQHandler(); MSerial3.IRQHandler();

View File

@@ -76,3 +76,52 @@
#if ENABLED(BAUD_RATE_GCODE) #if ENABLED(BAUD_RATE_GCODE)
#error "BAUD_RATE_GCODE is not yet supported on LPC176x." #error "BAUD_RATE_GCODE is not yet supported on LPC176x."
#endif #endif
/**
* Flag any serial port conflicts
*
* Port | TX | RX |
* --- | --- | --- |
* Serial | P0_02 | P0_03 |
* Serial1 | P0_15 | P0_16 |
* Serial2 | P0_10 | P0_11 |
* Serial3 | P0_00 | P0_01 |
*/
#if (defined(SERIAL_PORT) && SERIAL_PORT == 0) || (defined(SERIAL_PORT_2) && SERIAL_PORT_2 == 0) || (defined(DGUS_SERIAL_PORT) && DGUS_SERIAL_PORT == 0)
#if X_CS_PIN == P0_02 || TMC_SW_MISO == P0_02 || (E_STEPPERS && E_MUX1_PIN == P0_02) \
|| Y_CS_PIN == P0_03 || TMC_SW_MOSI == P0_03 || (E_STEPPERS && E_MUX0_PIN == P0_03)
#error "Serial port assignment (0) conflicts with other pins!"
#endif
#endif
#if SERIAL_PORT == 1 || SERIAL_PORT_2 == 1 || DGUS_SERIAL_PORT == 1
#if TMC_SW_SCK == P0_15
#error "Serial port assignment (1) conflicts with other pins!"
#elif HAS_SPI_LCD
#if BTN_EN2 == P0_15 || SCK_PIN == P0_15 || LCD_PINS_D4 == P0_15 || DOGLCD_SCK == P0_15 || LCD_RESET_PIN == P0_15 || LCD_PINS_RS == P0_15 || SHIFT_CLK == P0_15 \
|| BTN_EN1 == P0_16 || LCD_SDSS == P0_16 || LCD_PINS_RS == P0_16 || MISO_PIN == P0_16 || DOGLCD_A0 == P0_16 || SS_PIN == P0_16 || LCD_SDSS == P0_16 || DOGLCD_CS == P0_16 || LCD_RESET_PIN == P0_16 || LCD_BACKLIGHT_PIN == P0_16
#error "Serial port assignment (1) conflicts with other pins!"
#endif
#endif
#endif
#if SERIAL_PORT == 2 || SERIAL_PORT_2 == 2 || DGUS_SERIAL_PORT == 2
#if Y_MIN_PIN == P0_10 || Z_MIN_PROBE_PIN == P0_10 \
|| X_ENABLE_PIN == P0_10 || Y_ENABLE_PIN == P0_10 || X2_ENABLE_PIN == P0_10 || Y2_ENABLE_PIN == P0_10 || Z2_ENABLE_PIN == P0_10 || Z3_ENABLE_PIN == P0_10 || Z4_ENABLE_PIN == P0_10 \
|| X2_CS_PIN == P0_10 || Y2_CS_PIN == P0_10 || Z2_CS_PIN == P0_10 || Z3_CS_PIN == P0_10 || Z4_CS_PIN == P0_10 \
|| X_DIR_PIN == P0_11 || Y_DIR_PIN == P0_11 || X2_DIR_PIN == P0_11 || Y2_DIR_PIN == P0_11 || Z2_DIR_PIN == P0_11 || Z3_DIR_PIN == P0_11 || Z4_DIR_PIN == P0_11 \
|| X2_STEP_PIN == P0_11 || Y2_STEP_PIN == P0_11 || Z2_STEP_PIN == P0_11 || Z3_STEP_PIN == P0_11 || Z4_STEP_PIN == P0_11
#error "Serial port assignment (2) conflicts with other pins!"
#elif (E_STEPPERS > 1 && (E1_ENABLE_PIN == P0_10 || E1_CS_PIN == P0_10)) || (E_STEPPERS > 0 && (E0_DIR_PIN == P0_11 || E0_STEP_PIN == P0_11))
#error "Serial port assignment (2) conflicts with other pins!"
#endif
#endif
#if SERIAL_PORT == 3 || SERIAL_PORT_2 == 3 || DGUS_SERIAL_PORT == 3
#if X_MIN_PIN == P0_00 || Y_SERIAL_TX_PIN == P0_00 || Y_SERIAL_RX_PIN == P0_00 \
|| X_MAX_PIN == P0_01 || X_SERIAL_TX_PIN == P0_01 || X_SERIAL_RX_PIN == P0_01
#error "Serial port assignment (2) conflicts with other pins!"
#elif E_STEPPERS > 1 && (E1_DIR_PIN == P0_00 || E1_STEP_PIN == P0_01)
#error "Serial port assignment (2) conflicts with other pins!"
#endif
#endif

View File

@@ -72,7 +72,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
eeprom_write_byte(p, v); eeprom_write_byte(p, v);
delay(2); delay(2);
if (eeprom_read_byte(p) != v) { if (eeprom_read_byte(p) != v) {
SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE); SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
return true; return true;
} }
} }

View File

@@ -48,7 +48,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
if (v != eeprom_read_byte(p)) { if (v != eeprom_read_byte(p)) {
eeprom_write_byte(p, v); eeprom_write_byte(p, v);
if (eeprom_read_byte(p) != v) { if (eeprom_read_byte(p) != v) {
SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE); SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
return true; return true;
} }
} }

View File

@@ -49,7 +49,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
if (v != eeprom_read_byte(p)) { if (v != eeprom_read_byte(p)) {
eeprom_write_byte(p, v); eeprom_write_byte(p, v);
if (eeprom_read_byte(p) != v) { if (eeprom_read_byte(p) != v) {
SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE); SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
return true; return true;
} }
} }

View File

@@ -41,7 +41,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
if (v != eeprom_read_byte(p)) { if (v != eeprom_read_byte(p)) {
eeprom_write_byte(p, v); eeprom_write_byte(p, v);
if (eeprom_read_byte(p) != v) { if (eeprom_read_byte(p) != v) {
SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE); SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
return true; return true;
} }
} }

View File

@@ -36,7 +36,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
if (v != eeprom_read_byte(p)) { if (v != eeprom_read_byte(p)) {
eeprom_write_byte(p, v); eeprom_write_byte(p, v);
if (eeprom_read_byte(p) != v) { if (eeprom_read_byte(p) != v) {
SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE); SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
return true; return true;
} }
} }

View File

@@ -42,7 +42,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
if (v != eeprom_read_byte(p)) { if (v != eeprom_read_byte(p)) {
eeprom_write_byte(p, v); eeprom_write_byte(p, v);
if (eeprom_read_byte(p) != v) { if (eeprom_read_byte(p) != v) {
SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE); SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
return true; return true;
} }
} }

View File

@@ -278,7 +278,7 @@ bool pin_is_protected(const pin_t pin) {
} }
void protected_pin_err() { void protected_pin_err() {
SERIAL_ERROR_MSG(MSG_ERR_PROTECTED_PIN); SERIAL_ERROR_MSG(STR_ERR_PROTECTED_PIN);
} }
void quickstop_stepper() { void quickstop_stepper() {
@@ -390,8 +390,8 @@ void startOrResumeJob() {
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
void abortSDPrinting() { inline void abortSDPrinting() {
card.stopSDPrint( card.endFilePrint(
#if SD_RESORT #if SD_RESORT
true true
#endif #endif
@@ -412,10 +412,58 @@ void startOrResumeJob() {
#endif #endif
} }
#endif inline void finishSDPrinting() {
bool did_state = true;
switch (card.sdprinting_done_state) {
#if HAS_RESUME_CONTINUE // Display "Click to Continue..."
case 1:
did_state = queue.enqueue_P(PSTR("M0Q1S"
#if HAS_LCD_MENU
"1800" // ...for 30 minutes with LCD
#else
"60" // ...for 1 minute with no LCD
#endif
));
break;
#endif
case 2: print_job_timer.stop(); break;
case 3:
did_state = print_job_timer.duration() < 60 || queue.enqueue_P(PSTR("M31"));
break;
case 4:
#if ENABLED(POWER_LOSS_RECOVERY)
recovery.purge();
#endif
#if ENABLED(SD_FINISHED_STEPPERRELEASE) && defined(SD_FINISHED_RELEASECOMMAND)
planner.finish_and_disable();
#endif
#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
ui.set_progress_done();
#endif
#if ENABLED(SD_REPRINT_LAST_SELECTED_FILE)
ui.reselect_last_file();
#endif
SERIAL_ECHOLNPGM(STR_FILE_PRINTED);
default:
did_state = false;
card.sdprinting_done_state = 0;
}
if (did_state) ++card.sdprinting_done_state;
}
#endif // SDSUPPORT
/** /**
* Manage several activities: * Minimal management of Marlin's core activities:
* - Check for Filament Runout * - Check for Filament Runout
* - Keep the command buffer full * - Keep the command buffer full
* - Check for maximum inactive time between commands * - Check for maximum inactive time between commands
@@ -440,7 +488,7 @@ inline void manage_inactivity(const bool ignore_stepper_queue=false) {
if (max_inactive_time && ELAPSED(ms, gcode.previous_move_ms + max_inactive_time)) { if (max_inactive_time && ELAPSED(ms, gcode.previous_move_ms + max_inactive_time)) {
SERIAL_ERROR_START(); SERIAL_ERROR_START();
SERIAL_ECHOLNPAIR(MSG_KILL_INACTIVE_TIME, parser.command_ptr); SERIAL_ECHOLNPAIR(STR_KILL_INACTIVE_TIME, parser.command_ptr);
kill(); kill();
} }
@@ -505,7 +553,7 @@ inline void manage_inactivity(const bool ignore_stepper_queue=false) {
// KILL the machine // KILL the machine
// ---------------------------------------------------------------- // ----------------------------------------------------------------
if (killCount >= KILL_DELAY) { if (killCount >= KILL_DELAY) {
SERIAL_ERROR_MSG(MSG_KILL_BUTTON); SERIAL_ERROR_MSG(STR_KILL_BUTTON);
kill(); kill();
} }
#endif #endif
@@ -723,7 +771,7 @@ void idle(
void kill(PGM_P const lcd_error/*=nullptr*/, PGM_P const lcd_component/*=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(); thermalManager.disable_all_heaters();
SERIAL_ERROR_MSG(MSG_ERR_KILLED); SERIAL_ERROR_MSG(STR_ERR_KILLED);
#if HAS_DISPLAY #if HAS_DISPLAY
ui.kill_screen(lcd_error ?: GET_TEXT(MSG_KILLED), lcd_component ?: NUL_STR); ui.kill_screen(lcd_error ?: GET_TEXT(MSG_KILLED), lcd_component ?: NUL_STR);
@@ -794,7 +842,7 @@ void stop() {
#endif #endif
if (IsRunning()) { if (IsRunning()) {
SERIAL_ERROR_MSG(MSG_ERR_STOPPED); SERIAL_ERROR_MSG(STR_ERR_STOPPED);
LCD_MESSAGEPGM(MSG_STOPPED); LCD_MESSAGEPGM(MSG_STOPPED);
safe_delay(350); // allow enough time for messages to get out before stopping safe_delay(350); // allow enough time for messages to get out before stopping
Running = false; Running = false;
@@ -900,11 +948,11 @@ void setup() {
// Check startup - does nothing if bootloader sets MCUSR to 0 // Check startup - does nothing if bootloader sets MCUSR to 0
byte mcu = HAL_get_reset_source(); byte mcu = HAL_get_reset_source();
if (mcu & 1) SERIAL_ECHOLNPGM(MSG_POWERUP); if (mcu & 1) SERIAL_ECHOLNPGM(STR_POWERUP);
if (mcu & 2) SERIAL_ECHOLNPGM(MSG_EXTERNAL_RESET); if (mcu & 2) SERIAL_ECHOLNPGM(STR_EXTERNAL_RESET);
if (mcu & 4) SERIAL_ECHOLNPGM(MSG_BROWNOUT_RESET); if (mcu & 4) SERIAL_ECHOLNPGM(STR_BROWNOUT_RESET);
if (mcu & 8) SERIAL_ECHOLNPGM(MSG_WATCHDOG_RESET); if (mcu & 8) SERIAL_ECHOLNPGM(STR_WATCHDOG_RESET);
if (mcu & 32) SERIAL_ECHOLNPGM(MSG_SOFTWARE_RESET); if (mcu & 32) SERIAL_ECHOLNPGM(STR_SOFTWARE_RESET);
HAL_clear_reset_source(); HAL_clear_reset_source();
serialprintPGM(GET_TEXT(MSG_MARLIN)); serialprintPGM(GET_TEXT(MSG_MARLIN));
@@ -914,15 +962,15 @@ void setup() {
#if defined(STRING_DISTRIBUTION_DATE) && defined(STRING_CONFIG_H_AUTHOR) #if defined(STRING_DISTRIBUTION_DATE) && defined(STRING_CONFIG_H_AUTHOR)
SERIAL_ECHO_MSG( SERIAL_ECHO_MSG(
MSG_CONFIGURATION_VER STR_CONFIGURATION_VER
STRING_DISTRIBUTION_DATE STRING_DISTRIBUTION_DATE
MSG_AUTHOR STRING_CONFIG_H_AUTHOR STR_AUTHOR STRING_CONFIG_H_AUTHOR
); );
SERIAL_ECHO_MSG("Compiled: " __DATE__); SERIAL_ECHO_MSG("Compiled: " __DATE__);
#endif #endif
SERIAL_ECHO_START(); SERIAL_ECHO_START();
SERIAL_ECHOLNPAIR(MSG_FREE_MEMORY, freeMemory(), MSG_PLANNER_BUFFER_BYTES, (int)sizeof(block_t) * (BLOCK_BUFFER_SIZE)); SERIAL_ECHOLNPAIR(STR_FREE_MEMORY, freeMemory(), STR_PLANNER_BUFFER_BYTES, (int)sizeof(block_t) * (BLOCK_BUFFER_SIZE));
// UI must be initialized before EEPROM // UI must be initialized before EEPROM
// (because EEPROM code calls the UI). // (because EEPROM code calls the UI).
@@ -937,32 +985,28 @@ void setup() {
ui.show_bootscreen(); ui.show_bootscreen();
#endif #endif
#if ENABLED(SDSUPPORT) ui.reset_status(); // Load welcome message early. (Retained if no errors exist.)
card.mount(); // Mount the SD card before settings.first_load
#endif
// Load data from EEPROM if available (or use defaults) #if ENABLED(SDSUPPORT)
// This also updates variables in the planner, elsewhere card.mount(); // Mount the SD card before settings.first_load
settings.first_load(); #endif
// Load data from EEPROM if available (or use defaults)
settings.first_load(); // This also updates variables in the planner, elsewhere
#if ENABLED(TOUCH_BUTTONS) #if ENABLED(TOUCH_BUTTONS)
touch.init(); touch.init();
#endif #endif
#if HAS_M206_COMMAND #if HAS_M206_COMMAND // Initialize current position based on home_offset
// Initialize current position based on home_offset
current_position += home_offset; current_position += home_offset;
#endif #endif
// Vital to init stepper/planner equivalent for current_position sync_plan_position(); // Vital to init stepper/planner equivalent for current_position
sync_plan_position();
thermalManager.init(); // Initialize temperature loop thermalManager.init(); // Initialize temperature loop
print_job_timer.init(); // Initial setup of print job timer print_job_timer.init(); // Initial setup of print job timer
ui.reset_status(); // Print startup message after print statistics are loaded
endstops.init(); // Init endstops and pullups endstops.init(); // Init endstops and pullups
stepper.init(); // Init stepper. This enables interrupts! stepper.init(); // Init stepper. This enables interrupts!
@@ -1117,15 +1161,24 @@ void setup() {
#if ENABLED(PRUSA_MMU2) #if ENABLED(PRUSA_MMU2)
mmu2.init(); mmu2.init();
#endif #endif
#if HAS_SERVICE_INTERVALS
ui.reset_status(true); // Show service messages or keep current status
#endif
} }
/** /**
* The main Marlin program loop * The main Marlin program loop
* *
* - Save or log commands to SD * - Call idle() to handle all tasks between G-code commands
* - Process available commands (if not saving) * Note that no G-codes from the queue can be executed during idle()
* - Call endstop manager * but many G-codes can be called directly anytime like macros.
* - Call inactivity manager * - Check whether SD card auto-start is needed now.
* - Check whether SD print finishing is needed now.
* - Run one G-code command from the immediate or main command queue
* and open up one space. Commands in the main queue may come from sd
* card, host, or by direct injection. The queue will continue to fill
* as long as idle() or manage_inactivity() are being called.
*/ */
void loop() { void loop() {
do { do {
@@ -1135,6 +1188,7 @@ void loop() {
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
card.checkautostart(); card.checkautostart();
if (card.flag.abort_sd_printing) abortSDPrinting(); if (card.flag.abort_sd_printing) abortSDPrinting();
if (card.sdprinting_done_state) finishSDPrinting();
#endif #endif
queue.advance(); queue.advance();

View File

@@ -158,7 +158,7 @@
|| AXIS_DRIVER_TYPE(A,TMC5160) ) || AXIS_DRIVER_TYPE(A,TMC5160) )
#define _OR_EAH(N,T) || AXIS_HAS_##T(E##N) #define _OR_EAH(N,T) || AXIS_HAS_##T(E##N)
#define E_AXIS_HAS(T) (0 RREPEAT2(E_STEPPERS, _OR_EAH, T)) #define E_AXIS_HAS(T) (0 _OR_EAH(0,T) _OR_EAH(1,T) _OR_EAH(2,T) _OR_EAH(3,T) _OR_EAH(4,T) _OR_EAH(5,T) _OR_EAH(6,T) _OR_EAH(7,T))
#define ANY_AXIS_HAS(T) ( AXIS_HAS_##T(X) || AXIS_HAS_##T(X2) \ #define ANY_AXIS_HAS(T) ( AXIS_HAS_##T(X) || AXIS_HAS_##T(X2) \
|| AXIS_HAS_##T(Y) || AXIS_HAS_##T(Y2) \ || AXIS_HAS_##T(Y) || AXIS_HAS_##T(Y2) \

View File

@@ -97,6 +97,210 @@
// #define STRING_SPLASH_LINE3 WEBSITE_URL // #define STRING_SPLASH_LINE3 WEBSITE_URL
//#endif //#endif
//
// Common Serial Console Messages
// Don't change these strings because serial hosts look for them.
//
#define STR_ENQUEUEING "enqueueing \""
#define STR_POWERUP "PowerUp"
#define STR_EXTERNAL_RESET " External Reset"
#define STR_BROWNOUT_RESET " Brown out Reset"
#define STR_WATCHDOG_RESET " Watchdog Reset"
#define STR_SOFTWARE_RESET " Software Reset"
#define STR_AUTHOR " | Author: "
#define STR_CONFIGURATION_VER " Last Updated: "
#define STR_FREE_MEMORY " Free Memory: "
#define STR_PLANNER_BUFFER_BYTES " PlannerBufferBytes: "
#define STR_OK "ok"
#define STR_WAIT "wait"
#define STR_STATS "Stats: "
#define STR_FILE_SAVED "Done saving file."
#define STR_ERR_LINE_NO "Line Number is not Last Line Number+1, Last Line: "
#define STR_ERR_CHECKSUM_MISMATCH "checksum mismatch, Last Line: "
#define STR_ERR_NO_CHECKSUM "No Checksum with line number, Last Line: "
#define STR_FILE_PRINTED "Done printing file"
#define STR_BEGIN_FILE_LIST "Begin file list"
#define STR_END_FILE_LIST "End file list"
#define STR_INVALID_EXTRUDER "Invalid extruder"
#define STR_INVALID_E_STEPPER "Invalid E stepper"
#define STR_E_STEPPER_NOT_SPECIFIED "E stepper not specified"
#define STR_INVALID_SOLENOID "Invalid solenoid"
#define STR_M115_REPORT "FIRMWARE_NAME:Marlin " DETAILED_BUILD_VERSION " SOURCE_CODE_URL:" SOURCE_CODE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID
#define STR_COUNT_X " Count X:"
#define STR_COUNT_A " Count A:"
#define STR_WATCHDOG_FIRED "Watchdog timeout. Reset required."
#define STR_ERR_KILLED "Printer halted. kill() called!"
#define STR_ERR_STOPPED "Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)"
#define STR_BUSY_PROCESSING "busy: processing"
#define STR_BUSY_PAUSED_FOR_USER "busy: paused for user"
#define STR_BUSY_PAUSED_FOR_INPUT "busy: paused for input"
#define STR_Z_MOVE_COMP "Z_move_comp"
#define STR_RESEND "Resend: "
#define STR_UNKNOWN_COMMAND "Unknown command: \""
#define STR_ACTIVE_EXTRUDER "Active Extruder: "
#define STR_X_MIN "x_min"
#define STR_X_MAX "x_max"
#define STR_X2_MIN "x2_min"
#define STR_X2_MAX "x2_max"
#define STR_Y_MIN "y_min"
#define STR_Y_MAX "y_max"
#define STR_Y2_MIN "y2_min"
#define STR_Y2_MAX "y2_max"
#define STR_Z_MIN "z_min"
#define STR_Z_MAX "z_max"
#define STR_Z2_MIN "z2_min"
#define STR_Z2_MAX "z2_max"
#define STR_Z3_MIN "z3_min"
#define STR_Z3_MAX "z3_max"
#define STR_Z4_MIN "z4_min"
#define STR_Z4_MAX "z4_max"
#define STR_Z_PROBE "z_probe"
#define STR_FILAMENT_RUNOUT_SENSOR "filament"
#define STR_PROBE_OFFSET "Probe Offset"
#define STR_SKEW_MIN "min_skew_factor: "
#define STR_SKEW_MAX "max_skew_factor: "
#define STR_ERR_MATERIAL_INDEX "M145 S<index> out of range (0-1)"
#define STR_ERR_M421_PARAMETERS "M421 incorrect parameter usage"
#define STR_ERR_BAD_PLANE_MODE "G5 requires XY plane mode"
#define STR_ERR_MESH_XY "Mesh point cannot be resolved"
#define STR_ERR_ARC_ARGS "G2/G3 bad parameters"
#define STR_ERR_PROTECTED_PIN "Protected Pin"
#define STR_ERR_M420_FAILED "Failed to enable Bed Leveling"
#define STR_ERR_M428_TOO_FAR "Too far from reference point"
#define STR_ERR_M303_DISABLED "PIDTEMP disabled"
#define STR_M119_REPORT "Reporting endstop status"
#define STR_ON "ON"
#define STR_OFF "OFF"
#define STR_ENDSTOP_HIT "TRIGGERED"
#define STR_ENDSTOP_OPEN "open"
#define STR_HOTEND_OFFSET "Hotend offsets:"
#define STR_DUPLICATION_MODE "Duplication mode: "
#define STR_SOFT_ENDSTOPS "Soft endstops: "
#define STR_SOFT_MIN " Min: "
#define STR_SOFT_MAX " Max: "
#define STR_SAVED_POS "Position saved"
#define STR_RESTORING_POS "Restoring position"
#define STR_INVALID_POS_SLOT "Invalid slot. Total: "
#define STR_SD_CANT_OPEN_SUBDIR "Cannot open subdir "
#define STR_SD_INIT_FAIL "SD init fail"
#define STR_SD_VOL_INIT_FAIL "volume.init failed"
#define STR_SD_OPENROOT_FAIL "openRoot failed"
#define STR_SD_CARD_OK "SD card ok"
#define STR_SD_WORKDIR_FAIL "workDir open failed"
#define STR_SD_OPEN_FILE_FAIL "open failed, File: "
#define STR_SD_FILE_OPENED "File opened: "
#define STR_SD_SIZE " Size: "
#define STR_SD_FILE_SELECTED "File selected"
#define STR_SD_WRITE_TO_FILE "Writing to file: "
#define STR_SD_PRINTING_BYTE "SD printing byte "
#define STR_SD_NOT_PRINTING "Not SD printing"
#define STR_SD_ERR_WRITE_TO_FILE "error writing to file"
#define STR_SD_ERR_READ "SD read error"
#define STR_SD_CANT_ENTER_SUBDIR "Cannot enter subdir: "
#define STR_ENDSTOPS_HIT "endstops hit: "
#define STR_ERR_COLD_EXTRUDE_STOP " cold extrusion prevented"
#define STR_ERR_LONG_EXTRUDE_STOP " too long extrusion prevented"
#define STR_ERR_HOTEND_TOO_COLD "Hotend too cold"
#define STR_ERR_Z_HOMING_SER "Home XY first"
#define STR_ERR_EEPROM_WRITE "Error writing to EEPROM!"
#define STR_FILAMENT_CHANGE_HEAT_LCD "Press button to heat nozzle"
#define STR_FILAMENT_CHANGE_INSERT_LCD "Insert filament and press button"
#define STR_FILAMENT_CHANGE_WAIT_LCD "Press button to resume"
#define STR_FILAMENT_CHANGE_HEAT_M108 "Send M108 to heat nozzle"
#define STR_FILAMENT_CHANGE_INSERT_M108 "Insert filament and send M108"
#define STR_FILAMENT_CHANGE_WAIT_M108 "Send M108 to resume"
#define STR_STOP_BLTOUCH "!! STOP called because of BLTouch error - restart with M999"
#define STR_STOP_UNHOMED "!! STOP called because of unhomed error - restart with M999"
#define STR_KILL_INACTIVE_TIME "!! KILL caused by too much inactive time - current command: "
#define STR_KILL_BUTTON "!! KILL caused by KILL button/pin"
// temperature.cpp strings
#define STR_PID_AUTOTUNE_PREFIX "PID Autotune"
#define STR_PID_AUTOTUNE_START STR_PID_AUTOTUNE_PREFIX " start"
#define STR_PID_AUTOTUNE_FAILED STR_PID_AUTOTUNE_PREFIX " failed!"
#define STR_PID_BAD_EXTRUDER_NUM STR_PID_AUTOTUNE_FAILED " Bad extruder number"
#define STR_PID_TEMP_TOO_HIGH STR_PID_AUTOTUNE_FAILED " Temperature too high"
#define STR_PID_TIMEOUT STR_PID_AUTOTUNE_FAILED " timeout"
#define STR_BIAS " bias: "
#define STR_D_COLON " d: "
#define STR_T_MIN " min: "
#define STR_T_MAX " max: "
#define STR_KU " Ku: "
#define STR_TU " Tu: "
#define STR_CLASSIC_PID " Classic PID "
#define STR_KP " Kp: "
#define STR_KI " Ki: "
#define STR_KD " Kd: "
#define STR_PID_AUTOTUNE_FINISHED STR_PID_AUTOTUNE_PREFIX " finished! Put the last Kp, Ki and Kd constants from below into Configuration.h"
#define STR_PID_DEBUG " PID_DEBUG "
#define STR_PID_DEBUG_INPUT ": Input "
#define STR_PID_DEBUG_OUTPUT " Output "
#define STR_PID_DEBUG_PTERM " pTerm "
#define STR_PID_DEBUG_ITERM " iTerm "
#define STR_PID_DEBUG_DTERM " dTerm "
#define STR_PID_DEBUG_CTERM " cTerm "
#define STR_INVALID_EXTRUDER_NUM " - Invalid extruder number !"
#define STR_HEATER_BED "bed"
#define STR_HEATER_CHAMBER "chamber"
#define STR_STOPPED_HEATER ", system stopped! Heater_ID: "
#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_MAXTEMP "MAXTEMP triggered"
#define STR_T_MINTEMP "MINTEMP triggered"
#define STR_ERR_PROBING_FAILED "Probing Failed"
#define STR_ZPROBE_OUT_SER "Z Probe Past Bed"
// Debug
#define STR_DEBUG_PREFIX "DEBUG:"
#define STR_DEBUG_OFF "off"
#define STR_DEBUG_ECHO "ECHO"
#define STR_DEBUG_INFO "INFO"
#define STR_DEBUG_ERRORS "ERRORS"
#define STR_DEBUG_DRYRUN "DRYRUN"
#define STR_DEBUG_COMMUNICATION "COMMUNICATION"
#define STR_DEBUG_LEVELING "LEVELING"
// LCD Menu Messages
#define LANGUAGE_DATA_INCL_(M) STRINGIFY_(fontdata/langdata_##M.h)
#define LANGUAGE_DATA_INCL(M) LANGUAGE_DATA_INCL_(M)
#define LANGUAGE_INCL_(M) STRINGIFY_(../lcd/language/language_##M.h)
#define LANGUAGE_INCL(M) LANGUAGE_INCL_(M)
#define STR_X "X"
#define STR_Y "Y"
#define STR_Z "Z"
#define STR_E "E"
#if IS_KINEMATIC
#define STR_A "A"
#define STR_B "B"
#define STR_C "C"
#else
#define STR_A "X"
#define STR_B "Y"
#define STR_C "Z"
#endif
#define STR_X2 "X2"
#define STR_Y2 "Y2"
#define STR_Z2 "Z2"
#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_E STR_E
#if HAS_CHARACTER_LCD #if HAS_CHARACTER_LCD
// Custom characters defined in the first 8 characters of the LCD // Custom characters defined in the first 8 characters of the LCD
@@ -135,210 +339,6 @@
#endif #endif
// Common Serial Console Messages (do not translate those!)
#define MSG_ENQUEUEING "enqueueing \""
#define MSG_POWERUP "PowerUp"
#define MSG_EXTERNAL_RESET " External Reset"
#define MSG_BROWNOUT_RESET " Brown out Reset"
#define MSG_WATCHDOG_RESET " Watchdog Reset"
#define MSG_SOFTWARE_RESET " Software Reset"
#define MSG_AUTHOR " | Author: "
#define MSG_CONFIGURATION_VER " Last Updated: "
#define MSG_FREE_MEMORY " Free Memory: "
#define MSG_PLANNER_BUFFER_BYTES " PlannerBufferBytes: "
#define MSG_OK "ok"
#define MSG_WAIT "wait"
#define MSG_STATS "Stats: "
#define MSG_FILE_SAVED "Done saving file."
#define MSG_ERR_LINE_NO "Line Number is not Last Line Number+1, Last Line: "
#define MSG_ERR_CHECKSUM_MISMATCH "checksum mismatch, Last Line: "
#define MSG_ERR_NO_CHECKSUM "No Checksum with line number, Last Line: "
#define MSG_FILE_PRINTED "Done printing file"
#define MSG_BEGIN_FILE_LIST "Begin file list"
#define MSG_END_FILE_LIST "End file list"
#define MSG_INVALID_EXTRUDER "Invalid extruder"
#define MSG_INVALID_E_STEPPER "Invalid E stepper"
#define MSG_E_STEPPER_NOT_SPECIFIED "E stepper not specified"
#define MSG_INVALID_SOLENOID "Invalid solenoid"
#define MSG_M115_REPORT "FIRMWARE_NAME:Marlin " DETAILED_BUILD_VERSION " SOURCE_CODE_URL:" SOURCE_CODE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID
#define MSG_COUNT_X " Count X:"
#define MSG_COUNT_A " Count A:"
#define MSG_WATCHDOG_FIRED "Watchdog timeout. Reset required."
#define MSG_ERR_KILLED "Printer halted. kill() called!"
#define MSG_ERR_STOPPED "Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)"
#define MSG_BUSY_PROCESSING "busy: processing"
#define MSG_BUSY_PAUSED_FOR_USER "busy: paused for user"
#define MSG_BUSY_PAUSED_FOR_INPUT "busy: paused for input"
#define MSG_Z_MOVE_COMP "Z_move_comp"
#define MSG_RESEND "Resend: "
#define MSG_UNKNOWN_COMMAND "Unknown command: \""
#define MSG_ACTIVE_EXTRUDER "Active Extruder: "
#define MSG_X_MIN "x_min"
#define MSG_X_MAX "x_max"
#define MSG_X2_MIN "x2_min"
#define MSG_X2_MAX "x2_max"
#define MSG_Y_MIN "y_min"
#define MSG_Y_MAX "y_max"
#define MSG_Y2_MIN "y2_min"
#define MSG_Y2_MAX "y2_max"
#define MSG_Z_MIN "z_min"
#define MSG_Z_MAX "z_max"
#define MSG_Z2_MIN "z2_min"
#define MSG_Z2_MAX "z2_max"
#define MSG_Z3_MIN "z3_min"
#define MSG_Z3_MAX "z3_max"
#define MSG_Z4_MIN "z4_min"
#define MSG_Z4_MAX "z4_max"
#define MSG_Z_PROBE "z_probe"
#define MSG_FILAMENT_RUNOUT_SENSOR "filament"
#define MSG_PROBE_OFFSET "Probe Offset"
#define MSG_SKEW_MIN "min_skew_factor: "
#define MSG_SKEW_MAX "max_skew_factor: "
#define MSG_ERR_MATERIAL_INDEX "M145 S<index> out of range (0-1)"
#define MSG_ERR_M421_PARAMETERS "M421 incorrect parameter usage"
#define MSG_ERR_BAD_PLANE_MODE "G5 requires XY plane mode"
#define MSG_ERR_MESH_XY "Mesh point cannot be resolved"
#define MSG_ERR_ARC_ARGS "G2/G3 bad parameters"
#define MSG_ERR_PROTECTED_PIN "Protected Pin"
#define MSG_ERR_M420_FAILED "Failed to enable Bed Leveling"
#define MSG_ERR_M428_TOO_FAR "Too far from reference point"
#define MSG_ERR_M303_DISABLED "PIDTEMP disabled"
#define MSG_M119_REPORT "Reporting endstop status"
#define MSG_ON "ON"
#define MSG_OFF "OFF"
#define MSG_ENDSTOP_HIT "TRIGGERED"
#define MSG_ENDSTOP_OPEN "open"
#define MSG_HOTEND_OFFSET "Hotend offsets:"
#define MSG_DUPLICATION_MODE "Duplication mode: "
#define MSG_SOFT_ENDSTOPS "Soft endstops: "
#define MSG_SOFT_MIN " Min: "
#define MSG_SOFT_MAX " Max: "
#define MSG_SAVED_POS "Position saved"
#define MSG_RESTORING_POS "Restoring position"
#define MSG_INVALID_POS_SLOT "Invalid slot. Total: "
#define MSG_SD_CANT_OPEN_SUBDIR "Cannot open subdir "
#define MSG_SD_INIT_FAIL "SD init fail"
#define MSG_SD_VOL_INIT_FAIL "volume.init failed"
#define MSG_SD_OPENROOT_FAIL "openRoot failed"
#define MSG_SD_CARD_OK "SD card ok"
#define MSG_SD_WORKDIR_FAIL "workDir open failed"
#define MSG_SD_OPEN_FILE_FAIL "open failed, File: "
#define MSG_SD_FILE_OPENED "File opened: "
#define MSG_SD_SIZE " Size: "
#define MSG_SD_FILE_SELECTED "File selected"
#define MSG_SD_WRITE_TO_FILE "Writing to file: "
#define MSG_SD_PRINTING_BYTE "SD printing byte "
#define MSG_SD_NOT_PRINTING "Not SD printing"
#define MSG_SD_ERR_WRITE_TO_FILE "error writing to file"
#define MSG_SD_ERR_READ "SD read error"
#define MSG_SD_CANT_ENTER_SUBDIR "Cannot enter subdir: "
#define MSG_STEPPER_TOO_HIGH "Steprate too high: "
#define MSG_ENDSTOPS_HIT "endstops hit: "
#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_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"
#define MSG_FILAMENT_CHANGE_HEAT_M108 "Send M108 to heat nozzle"
#define MSG_FILAMENT_CHANGE_INSERT_M108 "Insert filament and send M108"
#define MSG_FILAMENT_CHANGE_WAIT_M108 "Send M108 to resume"
#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: "
#define MSG_KILL_BUTTON "!! KILL caused by KILL button/pin"
// temperature.cpp strings
#define MSG_PID_AUTOTUNE_PREFIX "PID Autotune"
#define MSG_PID_AUTOTUNE_START MSG_PID_AUTOTUNE_PREFIX " start"
#define MSG_PID_AUTOTUNE_FAILED MSG_PID_AUTOTUNE_PREFIX " failed!"
#define MSG_PID_BAD_EXTRUDER_NUM MSG_PID_AUTOTUNE_FAILED " Bad extruder number"
#define MSG_PID_TEMP_TOO_HIGH MSG_PID_AUTOTUNE_FAILED " Temperature too high"
#define MSG_PID_TIMEOUT MSG_PID_AUTOTUNE_FAILED " timeout"
#define MSG_BIAS " bias: "
#define MSG_D " d: "
#define MSG_T_MIN " min: "
#define MSG_T_MAX " max: "
#define MSG_KU " Ku: "
#define MSG_TU " Tu: "
#define MSG_CLASSIC_PID " Classic PID "
#define MSG_KP " Kp: "
#define MSG_KI " Ki: "
#define MSG_KD " Kd: "
#define MSG_AT " @:"
#define MSG_PID_AUTOTUNE_FINISHED MSG_PID_AUTOTUNE_PREFIX " finished! Put the last Kp, Ki and Kd constants from below into Configuration.h"
#define MSG_PID_DEBUG " PID_DEBUG "
#define MSG_PID_DEBUG_INPUT ": Input "
#define MSG_PID_DEBUG_OUTPUT " Output "
#define MSG_PID_DEBUG_PTERM " pTerm "
#define MSG_PID_DEBUG_ITERM " iTerm "
#define MSG_PID_DEBUG_DTERM " dTerm "
#define MSG_PID_DEBUG_CTERM " cTerm "
#define MSG_INVALID_EXTRUDER_NUM " - Invalid extruder number !"
#define MSG_HEATER_BED "bed"
#define MSG_HEATER_CHAMBER "chamber"
#define MSG_STOPPED_HEATER ", system stopped! Heater_ID: "
#define MSG_REDUNDANCY "Heater switched off. Temperature difference between temp sensors is too high !"
#define MSG_T_HEATING_FAILED "Heating failed"
#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:"
#define MSG_DEBUG_OFF "off"
#define MSG_DEBUG_ECHO "ECHO"
#define MSG_DEBUG_INFO "INFO"
#define MSG_DEBUG_ERRORS "ERRORS"
#define MSG_DEBUG_DRYRUN "DRYRUN"
#define MSG_DEBUG_COMMUNICATION "COMMUNICATION"
#define MSG_DEBUG_LEVELING "LEVELING"
// LCD Menu Messages
#define LANGUAGE_DATA_INCL_(M) STRINGIFY_(fontdata/langdata_##M.h)
#define LANGUAGE_DATA_INCL(M) LANGUAGE_DATA_INCL_(M)
#define LANGUAGE_INCL_(M) STRINGIFY_(../lcd/language/language_##M.h)
#define LANGUAGE_INCL(M) LANGUAGE_INCL_(M)
// Never translate these strings
#define MSG_X "X"
#define MSG_Y "Y"
#define MSG_Z "Z"
#define MSG_E "E"
#if IS_KINEMATIC
#define MSG_A "A"
#define MSG_B "B"
#define MSG_C "C"
#else
#define MSG_A "X"
#define MSG_B "Y"
#define MSG_C "Z"
#endif
#define MSG_X2 "X2"
#define MSG_Y2 "Y2"
#define MSG_Z2 "Z2"
#define MSG_Z3 "Z3"
#define MSG_Z4 "Z4"
#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 * Tool indexes for LCD display only
* *

View File

@@ -54,7 +54,7 @@ void serial_ternary(const bool onoff, PGM_P const pre, PGM_P const on, PGM_P con
serialprintPGM(onoff ? on : off); serialprintPGM(onoff ? on : off);
if (post) serialprintPGM(post); if (post) serialprintPGM(post);
} }
void serialprint_onoff(const bool onoff) { serialprintPGM(onoff ? PSTR(MSG_ON) : PSTR(MSG_OFF)); } void serialprint_onoff(const bool onoff) { serialprintPGM(onoff ? PSTR(STR_ON) : PSTR(STR_OFF)); }
void serialprintln_onoff(const bool onoff) { serialprint_onoff(onoff); SERIAL_EOL(); } void serialprintln_onoff(const bool onoff) { serialprint_onoff(onoff); SERIAL_EOL(); }
void serialprint_truefalse(const bool tf) { serialprintPGM(tf ? PSTR("true") : PSTR("false")); } void serialprint_truefalse(const bool tf) { serialprintPGM(tf ? PSTR("true") : PSTR("false")); }

View File

@@ -35,17 +35,17 @@
Babystep babystep; Babystep babystep;
volatile int16_t Babystep::steps[BS_TODO_AXIS(Z_AXIS) + 1]; volatile int16_t Babystep::steps[BS_AXIS_IND(Z_AXIS) + 1];
#if ENABLED(BABYSTEP_DISPLAY_TOTAL) #if ENABLED(BABYSTEP_DISPLAY_TOTAL)
int16_t Babystep::axis_total[BS_TOTAL_AXIS(Z_AXIS) + 1]; int16_t Babystep::axis_total[BS_TOTAL_IND(Z_AXIS) + 1];
#endif #endif
int16_t Babystep::accum; int16_t Babystep::accum;
void Babystep::step_axis(const AxisEnum axis) { void Babystep::step_axis(const AxisEnum axis) {
const int16_t curTodo = steps[BS_TODO_AXIS(axis)]; // get rid of volatile for performance const int16_t curTodo = steps[BS_AXIS_IND(axis)]; // get rid of volatile for performance
if (curTodo) { if (curTodo) {
stepper.do_babystep((AxisEnum)axis, curTodo > 0); stepper.do_babystep((AxisEnum)axis, curTodo > 0);
if (curTodo > 0) steps[BS_TODO_AXIS(axis)]--; else steps[BS_TODO_AXIS(axis)]++; if (curTodo > 0) steps[BS_AXIS_IND(axis)]--; else steps[BS_AXIS_IND(axis)]++;
} }
} }
@@ -66,7 +66,7 @@ void Babystep::add_steps(const AxisEnum axis, const int16_t distance) {
accum += distance; // Count up babysteps for the UI accum += distance; // Count up babysteps for the UI
#if ENABLED(BABYSTEP_DISPLAY_TOTAL) #if ENABLED(BABYSTEP_DISPLAY_TOTAL)
axis_total[BS_TOTAL_AXIS(axis)] += distance; axis_total[BS_TOTAL_IND(axis)] += distance;
#endif #endif
#if ENABLED(BABYSTEP_ALWAYS_AVAILABLE) #if ENABLED(BABYSTEP_ALWAYS_AVAILABLE)
@@ -112,7 +112,7 @@ void Babystep::add_steps(const AxisEnum axis, const int16_t distance) {
#else #else
BSA_ENABLE(Z_AXIS); BSA_ENABLE(Z_AXIS);
#endif #endif
steps[BS_TODO_AXIS(axis)] += distance; steps[BS_AXIS_IND(axis)] += distance;
#endif #endif
#if ENABLED(BABYSTEP_ALWAYS_AVAILABLE) #if ENABLED(BABYSTEP_ALWAYS_AVAILABLE)
gcode.reset_stepper_timeout(); gcode.reset_stepper_timeout();

View File

@@ -32,32 +32,34 @@
#endif #endif
#if IS_CORE || EITHER(BABYSTEP_XY, I2C_POSITION_ENCODERS) #if IS_CORE || EITHER(BABYSTEP_XY, I2C_POSITION_ENCODERS)
#define BS_TODO_AXIS(A) A #define BS_AXIS_IND(A) A
#define BS_AXIS(I) AxisEnum(I)
#else #else
#define BS_TODO_AXIS(A) 0 #define BS_AXIS_IND(A) 0
#define BS_AXIS(I) Z_AXIS
#endif #endif
#if ENABLED(BABYSTEP_DISPLAY_TOTAL) #if ENABLED(BABYSTEP_DISPLAY_TOTAL)
#if ENABLED(BABYSTEP_XY) #if ENABLED(BABYSTEP_XY)
#define BS_TOTAL_AXIS(A) A #define BS_TOTAL_IND(A) A
#else #else
#define BS_TOTAL_AXIS(A) 0 #define BS_TOTAL_IND(A) 0
#endif #endif
#endif #endif
class Babystep { class Babystep {
public: public:
static volatile int16_t steps[BS_TODO_AXIS(Z_AXIS) + 1]; static volatile int16_t steps[BS_AXIS_IND(Z_AXIS) + 1];
static int16_t accum; // Total babysteps in current edit static int16_t accum; // Total babysteps in current edit
#if ENABLED(BABYSTEP_DISPLAY_TOTAL) #if ENABLED(BABYSTEP_DISPLAY_TOTAL)
static int16_t axis_total[BS_TOTAL_AXIS(Z_AXIS) + 1]; // Total babysteps since G28 static int16_t axis_total[BS_TOTAL_IND(Z_AXIS) + 1]; // Total babysteps since G28
static inline void reset_total(const AxisEnum axis) { static inline void reset_total(const AxisEnum axis) {
if (true if (true
#if ENABLED(BABYSTEP_XY) #if ENABLED(BABYSTEP_XY)
&& axis == Z_AXIS && axis == Z_AXIS
#endif #endif
) axis_total[BS_TOTAL_AXIS(axis)] = 0; ) axis_total[BS_TOTAL_IND(axis)] = 0;
} }
#endif #endif
@@ -65,7 +67,7 @@ public:
static void add_mm(const AxisEnum axis, const float &mm); static void add_mm(const AxisEnum axis, const float &mm);
static inline bool has_steps() { static inline bool has_steps() {
return steps[BS_TODO_AXIS(X_AXIS)] || steps[BS_TODO_AXIS(Y_AXIS)] || steps[BS_TODO_AXIS(Z_AXIS)]; return steps[BS_AXIS_IND(X_AXIS)] || steps[BS_AXIS_IND(Y_AXIS)] || steps[BS_AXIS_IND(Z_AXIS)];
} }
// //
@@ -73,7 +75,7 @@ public:
// apply accumulated babysteps to the axes. // apply accumulated babysteps to the axes.
// //
static inline void task() { static inline void task() {
LOOP_LE_N(axis, BS_TODO_AXIS(Z_AXIS)) step_axis((AxisEnum)axis); LOOP_LE_N(i, BS_AXIS_IND(Z_AXIS)) step_axis(BS_AXIS(i));
} }
private: private:

View File

@@ -124,7 +124,7 @@ bool BLTouch::deploy_proc() {
// The deploy might have failed or the probe is actually triggered (nozzle too low?) again // The deploy might have failed or the probe is actually triggered (nozzle too low?) again
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("BLTouch Recovery Failed"); if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("BLTouch Recovery Failed");
SERIAL_ERROR_MSG(MSG_STOP_BLTOUCH); // Tell the user something is wrong, needs action SERIAL_ERROR_MSG(STR_STOP_BLTOUCH); // Tell the user something is wrong, needs action
stop(); // but it's not too bad, no need to kill, allow restart stop(); // but it's not too bad, no need to kill, allow restart
return true; // Tell our caller we goofed in case he cares to know return true; // Tell our caller we goofed in case he cares to know
@@ -169,7 +169,7 @@ bool BLTouch::stow_proc() {
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("BLTouch Recovery Failed"); if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("BLTouch Recovery Failed");
SERIAL_ERROR_MSG(MSG_STOP_BLTOUCH); // Tell the user something is wrong, needs action SERIAL_ERROR_MSG(STR_STOP_BLTOUCH); // Tell the user something is wrong, needs action
stop(); // but it's not too bad, no need to kill, allow restart stop(); // but it's not too bad, no need to kill, allow restart
return true; // Tell our caller we goofed in case he cares to know return true; // Tell our caller we goofed in case he cares to know

View File

@@ -105,7 +105,4 @@ private:
static void mode_conv_proc(const bool M5V); static void mode_conv_proc(const bool M5V);
}; };
// Deploy/stow angles for use by servo.cpp / servo.h
#define BLTOUCH_ANGLES { BLTOUCH_DEPLOY, BLTOUCH_STOW }
extern BLTouch bltouch; extern BLTouch bltouch;

View File

@@ -120,7 +120,7 @@ static bool ensure_safe_temperature(const PauseMode mode=PAUSE_MODE_SAME) {
#if ENABLED(PREVENT_COLD_EXTRUSION) #if ENABLED(PREVENT_COLD_EXTRUSION)
if (!DEBUGGING(DRYRUN) && thermalManager.targetTooColdToExtrude(active_extruder)) { if (!DEBUGGING(DRYRUN) && thermalManager.targetTooColdToExtrude(active_extruder)) {
SERIAL_ECHO_MSG(MSG_ERR_HOTEND_TOO_COLD); SERIAL_ECHO_MSG(STR_ERR_HOTEND_TOO_COLD);
return false; return false;
} }
#endif #endif
@@ -175,7 +175,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
#if HAS_LCD_MENU #if HAS_LCD_MENU
if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_INSERT, mode); if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_INSERT, mode);
#endif #endif
SERIAL_ECHO_MSG(_PMSG(MSG_FILAMENT_CHANGE_INSERT)); SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_INSERT));
#if HAS_BUZZER #if HAS_BUZZER
filament_change_beep(max_beep_count, true); filament_change_beep(max_beep_count, true);
@@ -400,7 +400,7 @@ bool pause_print(const float &retract, const xyz_pos_t &park_point, const float
#endif #endif
if (!DEBUGGING(DRYRUN) && unload_length && thermalManager.targetTooColdToExtrude(active_extruder)) { if (!DEBUGGING(DRYRUN) && unload_length && thermalManager.targetTooColdToExtrude(active_extruder)) {
SERIAL_ECHO_MSG(MSG_ERR_HOTEND_TOO_COLD); SERIAL_ECHO_MSG(STR_ERR_HOTEND_TOO_COLD);
#if HAS_LCD_MENU #if HAS_LCD_MENU
if (show_lcd) { // Show status screen if (show_lcd) { // Show status screen
@@ -480,7 +480,7 @@ void show_continue_prompt(const bool is_reload) {
lcd_pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING); lcd_pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING);
#endif #endif
SERIAL_ECHO_START(); SERIAL_ECHO_START();
serialprintPGM(is_reload ? PSTR(_PMSG(MSG_FILAMENT_CHANGE_INSERT) "\n") : PSTR(_PMSG(MSG_FILAMENT_CHANGE_WAIT) "\n")); serialprintPGM(is_reload ? PSTR(_PMSG(STR_FILAMENT_CHANGE_INSERT) "\n") : PSTR(_PMSG(STR_FILAMENT_CHANGE_WAIT) "\n"));
} }
void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep_count/*=0*/ DXC_ARGS) { void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep_count/*=0*/ DXC_ARGS) {
@@ -530,7 +530,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
#if HAS_LCD_MENU #if HAS_LCD_MENU
lcd_pause_show_message(PAUSE_MESSAGE_HEAT); lcd_pause_show_message(PAUSE_MESSAGE_HEAT);
#endif #endif
SERIAL_ECHO_MSG(_PMSG(MSG_FILAMENT_CHANGE_HEAT)); SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_HEAT));
#if ENABLED(HOST_PROMPT_SUPPORT) #if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("HeaterTimeout"), PSTR("Reheat")); host_prompt_do(PROMPT_USER_CONTINUE, PSTR("HeaterTimeout"), PSTR("Reheat"));

View File

@@ -141,7 +141,7 @@ void PrintJobRecovery::prepare() {
/** /**
* Save the current machine state to the power-loss recovery file * Save the current machine state to the power-loss recovery file
*/ */
void PrintJobRecovery::save(const bool force/*=false*/, const bool save_queue/*=true*/) { void PrintJobRecovery::save(const bool force/*=false*/) {
#if SAVE_INFO_INTERVAL_MS > 0 #if SAVE_INFO_INTERVAL_MS > 0
static millis_t next_save_ms; // = 0 static millis_t next_save_ms; // = 0

View File

@@ -159,13 +159,10 @@ class PrintJobRecovery {
static inline void cancel() { purge(); card.autostart_index = 0; } static inline void cancel() { purge(); card.autostart_index = 0; }
static void load(); static void load();
static void save(const bool force= static void save(const bool force=false
#if ENABLED(SAVE_EACH_CMD_MODE) #if ENABLED(SAVE_EACH_CMD_MODE)
true || true
#else
false
#endif #endif
, const bool save_queue=true
); );
#if PIN_EXISTS(POWER_LOSS) #if PIN_EXISTS(POWER_LOSS)

View File

@@ -57,7 +57,7 @@ class ProbeTempComp {
static const temp_calib_t cali_info[TSI_COUNT]; static const temp_calib_t cali_info[TSI_COUNT];
// Where to park nozzle to wait for probe cooldown // Where to park nozzle to wait for probe cooldown
static constexpr xyz_pos_t park_point = { PTC_PARK_POS_X, PTC_PARK_POS_Y, PTC_PARK_POS_Z }; static constexpr xyz_pos_t park_point = xyz_pos_t({ PTC_PARK_POS_X, PTC_PARK_POS_Y, PTC_PARK_POS_Z });
static constexpr int max_bed_temp = PTC_MAX_BED_TEMP, // Max temperature to avoid heating errors static constexpr int max_bed_temp = PTC_MAX_BED_TEMP, // Max temperature to avoid heating errors

View File

@@ -462,7 +462,7 @@ void MMU2::tool_change(uint8_t index) {
ENABLE_AXIS_E0(); ENABLE_AXIS_E0();
SERIAL_ECHO_START(); SERIAL_ECHO_START();
SERIAL_ECHOLNPAIR(MSG_ACTIVE_EXTRUDER, int(extruder)); SERIAL_ECHOLNPAIR(STR_ACTIVE_EXTRUDER, int(extruder));
ui.reset_status(); ui.reset_status();
} }

View File

@@ -67,7 +67,7 @@ static void set_solenoid(const uint8_t num, const bool active) {
break; break;
#endif #endif
default: default:
SERIAL_ECHO_MSG(MSG_INVALID_SOLENOID); SERIAL_ECHO_MSG(STR_INVALID_SOLENOID);
break; break;
} }
} }

View File

@@ -41,7 +41,7 @@ void GcodeSuite::G42() {
const int8_t iy = hasJ ? parser.value_int() : 0; const int8_t iy = hasJ ? parser.value_int() : 0;
if ((hasI && !WITHIN(ix, 0, GRID_MAX_POINTS_X - 1)) || (hasJ && !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1))) { if ((hasI && !WITHIN(ix, 0, GRID_MAX_POINTS_X - 1)) || (hasJ && !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1))) {
SERIAL_ECHOLNPGM(MSG_ERR_MESH_XY); SERIAL_ECHOLNPGM(STR_ERR_MESH_XY);
return; return;
} }

View File

@@ -235,7 +235,7 @@ void GcodeSuite::M420() {
// Error if leveling failed to enable or reenable // Error if leveling failed to enable or reenable
if (to_enable && !planner.leveling_active) if (to_enable && !planner.leveling_active)
SERIAL_ERROR_MSG(MSG_ERR_M420_FAILED); SERIAL_ERROR_MSG(STR_ERR_M420_FAILED);
SERIAL_ECHO_START(); SERIAL_ECHO_START();
SERIAL_ECHOPGM("Bed Leveling "); SERIAL_ECHOPGM("Bed Leveling ");
@@ -247,7 +247,7 @@ void GcodeSuite::M420() {
if (planner.z_fade_height > 0.0) if (planner.z_fade_height > 0.0)
SERIAL_ECHOLN(planner.z_fade_height); SERIAL_ECHOLN(planner.z_fade_height);
else else
SERIAL_ECHOLNPGM(MSG_OFF); SERIAL_ECHOLNPGM(STR_OFF);
#endif #endif
// Report change in position // Report change in position

View File

@@ -50,9 +50,9 @@ void GcodeSuite::M421() {
hasQ = !hasZ && parser.seen('Q'); hasQ = !hasZ && parser.seen('Q');
if (!hasI || !hasJ || !(hasZ || hasQ)) if (!hasI || !hasJ || !(hasZ || hasQ))
SERIAL_ERROR_MSG(MSG_ERR_M421_PARAMETERS); SERIAL_ERROR_MSG(STR_ERR_M421_PARAMETERS);
else if (!WITHIN(ix, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1)) else if (!WITHIN(ix, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1))
SERIAL_ERROR_MSG(MSG_ERR_MESH_XY); SERIAL_ERROR_MSG(STR_ERR_MESH_XY);
else { else {
z_values[ix][iy] = parser.value_linear_units() + (hasQ ? z_values[ix][iy] : 0); z_values[ix][iy] = parser.value_linear_units() + (hasQ ? z_values[ix][iy] : 0);
#if ENABLED(ABL_BILINEAR_SUBDIVISION) #if ENABLED(ABL_BILINEAR_SUBDIVISION)

View File

@@ -49,9 +49,9 @@ void GcodeSuite::M421() {
const bool hasZ = parser.seen('Z'), hasQ = !hasZ && parser.seen('Q'); const bool hasZ = parser.seen('Z'), hasQ = !hasZ && parser.seen('Q');
if (int(hasI && hasJ) + int(hasX && hasY) != 1 || !(hasZ || hasQ)) if (int(hasI && hasJ) + int(hasX && hasY) != 1 || !(hasZ || hasQ))
SERIAL_ERROR_MSG(MSG_ERR_M421_PARAMETERS); SERIAL_ERROR_MSG(STR_ERR_M421_PARAMETERS);
else if (ix < 0 || iy < 0) else if (ix < 0 || iy < 0)
SERIAL_ERROR_MSG(MSG_ERR_MESH_XY); SERIAL_ERROR_MSG(STR_ERR_MESH_XY);
else else
mbl.set_z(ix, iy, parser.value_linear_units() + (hasQ ? mbl.z_values[ix][iy] : 0)); mbl.set_z(ix, iy, parser.value_linear_units() + (hasQ ? mbl.z_values[ix][iy] : 0));
} }

View File

@@ -57,9 +57,9 @@ void GcodeSuite::M421() {
if (hasC) ij = ubl.find_closest_mesh_point_of_type(REAL, current_position); if (hasC) ij = ubl.find_closest_mesh_point_of_type(REAL, current_position);
if (int(hasC) + int(hasI && hasJ) != 1 || !(hasZ || hasQ || hasN)) if (int(hasC) + int(hasI && hasJ) != 1 || !(hasZ || hasQ || hasN))
SERIAL_ERROR_MSG(MSG_ERR_M421_PARAMETERS); SERIAL_ERROR_MSG(STR_ERR_M421_PARAMETERS);
else if (!WITHIN(ij.x, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(ij.y, 0, GRID_MAX_POINTS_Y - 1)) else if (!WITHIN(ij.x, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(ij.y, 0, GRID_MAX_POINTS_Y - 1))
SERIAL_ERROR_MSG(MSG_ERR_MESH_XY); SERIAL_ERROR_MSG(STR_ERR_MESH_XY);
else { else {
float &zval = ubl.z_values[ij.x][ij.y]; float &zval = ubl.z_values[ij.x][ij.y];
zval = hasN ? NAN : parser.value_linear_units() + (hasQ ? zval : 0); zval = hasN ? NAN : parser.value_linear_units() + (hasQ ? zval : 0);

View File

@@ -106,6 +106,8 @@
#if AXIS_HAS_STALLGUARD(Y2) #if AXIS_HAS_STALLGUARD(Y2)
tmc_disable_stallguard(stepperY2, stealth_states.y2); tmc_disable_stallguard(stepperY2, stealth_states.y2);
#endif #endif
do_blocking_move_to_xy(-0.5 * x_axis_home_dir, -0.5 * home_dir(Y_AXIS), fr_mm_s / 2);
safe_delay(100);
#endif #endif
} }
@@ -118,7 +120,7 @@
// Disallow Z homing if X or Y are unknown // Disallow Z homing if X or Y are unknown
if (!TEST(axis_known_position, X_AXIS) || !TEST(axis_known_position, Y_AXIS)) { if (!TEST(axis_known_position, X_AXIS) || !TEST(axis_known_position, Y_AXIS)) {
LCD_MESSAGEPGM(MSG_ERR_Z_HOMING); LCD_MESSAGEPGM(MSG_ERR_Z_HOMING);
SERIAL_ECHO_MSG(MSG_ERR_Z_HOMING_SER); SERIAL_ECHO_MSG(STR_ERR_Z_HOMING_SER);
return; return;
} }
@@ -154,7 +156,7 @@
} }
else { else {
LCD_MESSAGEPGM(MSG_ZPROBE_OUT); LCD_MESSAGEPGM(MSG_ZPROBE_OUT);
SERIAL_ECHO_MSG(MSG_ZPROBE_OUT_SER); SERIAL_ECHO_MSG(STR_ZPROBE_OUT_SER);
} }
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< home_z_safely"); if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< home_z_safely");
@@ -529,7 +531,7 @@ void GcodeSuite::G28(const bool always_home_all) {
#define _HOME_SYNC doZ // Only for Z-axis #define _HOME_SYNC doZ // Only for Z-axis
#endif #endif
if (_HOME_SYNC) if (_HOME_SYNC)
SERIAL_ECHOLNPGM(MSG_Z_MOVE_COMP); SERIAL_ECHOLNPGM(STR_Z_MOVE_COMP);
#endif #endif
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< G28"); if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< G28");

View File

@@ -190,7 +190,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) { static float calibration_probe(const xy_pos_t &xy, const bool stow) {
#if HAS_BED_PROBE #if HAS_BED_PROBE
return probe.probe_at_point(xy, stow ? PROBE_PT_STOW : PROBE_PT_RAISE, 0, true); return probe.probe_at_point(xy, stow ? PROBE_PT_STOW : PROBE_PT_RAISE, 0, true, false);
#else #else
UNUSED(stow); UNUSED(stow);
return lcd_probe_pt(xy); return lcd_probe_pt(xy);

View File

@@ -82,7 +82,7 @@ void GcodeSuite::M852() {
#endif #endif
if (badval) if (badval)
SERIAL_ECHOLNPGM(MSG_SKEW_MIN " " STRINGIFY(SKEW_FACTOR_MIN) " " MSG_SKEW_MAX " " STRINGIFY(SKEW_FACTOR_MAX)); SERIAL_ECHOLNPGM(STR_SKEW_MIN " " STRINGIFY(SKEW_FACTOR_MIN) " " STR_SKEW_MAX " " STRINGIFY(SKEW_FACTOR_MAX));
// When skew is changed the current position changes // When skew is changed the current position changes
if (setval) { if (setval) {

View File

@@ -50,7 +50,7 @@ void GcodeSuite::M218() {
if (!parser.seen("XYZ")) { if (!parser.seen("XYZ")) {
SERIAL_ECHO_START(); SERIAL_ECHO_START();
SERIAL_ECHOPGM(MSG_HOTEND_OFFSET); SERIAL_ECHOPGM(STR_HOTEND_OFFSET);
HOTEND_LOOP() { HOTEND_LOOP() {
SERIAL_CHAR(' '); SERIAL_CHAR(' ');
SERIAL_ECHO(hotend_offset[e].x); SERIAL_ECHO(hotend_offset[e].x);

View File

@@ -30,6 +30,12 @@ void GcodeSuite::M281() {
if (!parser.seenval('P')) return; if (!parser.seenval('P')) return;
const int servo_index = parser.value_int(); const int servo_index = parser.value_int();
if (WITHIN(servo_index, 0, NUM_SERVOS - 1)) { if (WITHIN(servo_index, 0, NUM_SERVOS - 1)) {
#if ENABLED(BLTOUCH)
if (servo_index == Z_PROBE_SERVO_NR) {
SERIAL_ERROR_MSG("BLTouch angles can't be changed.");
return;
}
#endif
bool angle_change = false; bool angle_change = false;
if (parser.seen('L')) { if (parser.seen('L')) {
servo_angles[servo_index][0] = parser.value_int(); servo_angles[servo_index][0] = parser.value_int();

View File

@@ -82,7 +82,7 @@ void GcodeSuite::M301() {
SERIAL_EOL(); SERIAL_EOL();
} }
else else
SERIAL_ERROR_MSG(MSG_INVALID_EXTRUDER); SERIAL_ERROR_MSG(STR_INVALID_EXTRUDER);
} }
#endif // PIDTEMP #endif // PIDTEMP

View File

@@ -28,13 +28,13 @@
void GcodeSuite::M111() { void GcodeSuite::M111() {
if (parser.seen('S')) marlin_debug_flags = parser.byteval('S'); if (parser.seen('S')) marlin_debug_flags = parser.byteval('S');
static const char str_debug_1[] PROGMEM = MSG_DEBUG_ECHO, static const char str_debug_1[] PROGMEM = STR_DEBUG_ECHO,
str_debug_2[] PROGMEM = MSG_DEBUG_INFO, str_debug_2[] PROGMEM = STR_DEBUG_INFO,
str_debug_4[] PROGMEM = MSG_DEBUG_ERRORS, str_debug_4[] PROGMEM = STR_DEBUG_ERRORS,
str_debug_8[] PROGMEM = MSG_DEBUG_DRYRUN, str_debug_8[] PROGMEM = STR_DEBUG_DRYRUN,
str_debug_16[] PROGMEM = MSG_DEBUG_COMMUNICATION str_debug_16[] PROGMEM = STR_DEBUG_COMMUNICATION
#if ENABLED(DEBUG_LEVELING_FEATURE) #if ENABLED(DEBUG_LEVELING_FEATURE)
, str_debug_lvl[] PROGMEM = MSG_DEBUG_LEVELING , str_debug_lvl[] PROGMEM = STR_DEBUG_LEVELING
#endif #endif
; ;
@@ -46,7 +46,7 @@ void GcodeSuite::M111() {
}; };
SERIAL_ECHO_START(); SERIAL_ECHO_START();
SERIAL_ECHOPGM(MSG_DEBUG_PREFIX); SERIAL_ECHOPGM(STR_DEBUG_PREFIX);
if (marlin_debug_flags) { if (marlin_debug_flags) {
uint8_t comma = 0; uint8_t comma = 0;
for (uint8_t i = 0; i < COUNT(debug_strings); i++) { for (uint8_t i = 0; i < COUNT(debug_strings); i++) {
@@ -57,7 +57,7 @@ void GcodeSuite::M111() {
} }
} }
else { else {
SERIAL_ECHOPGM(MSG_DEBUG_OFF); SERIAL_ECHOPGM(STR_DEBUG_OFF);
#if !defined(__AVR__) || !defined(USBCON) #if !defined(__AVR__) || !defined(USBCON)
#if ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS) #if ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS)
SERIAL_ECHOPAIR("\nBuffer Overruns: ", MYSERIAL0.buffer_overruns()); SERIAL_ECHOPAIR("\nBuffer Overruns: ", MYSERIAL0.buffer_overruns());

View File

@@ -36,11 +36,11 @@ void GcodeSuite::M211() {
const xyz_pos_t l_soft_min = soft_endstop.min.asLogical(), const xyz_pos_t l_soft_min = soft_endstop.min.asLogical(),
l_soft_max = soft_endstop.max.asLogical(); l_soft_max = soft_endstop.max.asLogical();
SERIAL_ECHO_START(); SERIAL_ECHO_START();
SERIAL_ECHOPGM(MSG_SOFT_ENDSTOPS); SERIAL_ECHOPGM(STR_SOFT_ENDSTOPS);
if (parser.seen('S')) soft_endstops_enabled = parser.value_bool(); if (parser.seen('S')) soft_endstops_enabled = parser.value_bool();
serialprint_onoff(soft_endstops_enabled); serialprint_onoff(soft_endstops_enabled);
print_xyz(l_soft_min, PSTR(MSG_SOFT_MIN), PSTR(" ")); print_xyz(l_soft_min, PSTR(STR_SOFT_MIN), PSTR(" "));
print_xyz(l_soft_max, PSTR(MSG_SOFT_MAX)); print_xyz(l_soft_max, PSTR(STR_SOFT_MAX));
} }
#endif #endif

View File

@@ -167,7 +167,7 @@
extruder_duplication_enabled = ena && (duplication_e_mask >= 3); extruder_duplication_enabled = ena && (duplication_e_mask >= 3);
} }
SERIAL_ECHO_START(); SERIAL_ECHO_START();
SERIAL_ECHOPGM(MSG_DUPLICATION_MODE); SERIAL_ECHOPGM(STR_DUPLICATION_MODE);
serialprint_onoff(extruder_duplication_enabled); serialprint_onoff(extruder_duplication_enabled);
if (ena) { if (ena) {
SERIAL_ECHOPGM(" ( "); SERIAL_ECHOPGM(" ( ");

View File

@@ -110,6 +110,6 @@ void GcodeSuite::M81() {
#endif #endif
#if HAS_LCD_MENU #if HAS_LCD_MENU
LCD_MESSAGEPGM_P(PSTR(MACHINE_NAME " " MSG_OFF ".")); LCD_MESSAGEPGM_P(PSTR(MACHINE_NAME " " STR_OFF "."));
#endif #endif
} }

View File

@@ -40,7 +40,7 @@ void GcodeSuite::G60() {
const uint8_t slot = parser.byteval('S'); const uint8_t slot = parser.byteval('S');
if (slot >= SAVED_POSITIONS) { if (slot >= SAVED_POSITIONS) {
SERIAL_ERROR_MSG(MSG_INVALID_POS_SLOT STRINGIFY(SAVED_POSITIONS)); SERIAL_ERROR_MSG(STR_INVALID_POS_SLOT STRINGIFY(SAVED_POSITIONS));
return; return;
} }
@@ -49,7 +49,7 @@ void GcodeSuite::G60() {
#if ENABLED(SAVED_POSITIONS_DEBUG) #if ENABLED(SAVED_POSITIONS_DEBUG)
const xyze_pos_t &pos = stored_position[slot]; const xyze_pos_t &pos = stored_position[slot];
DEBUG_ECHOPAIR_F(MSG_SAVED_POS " S", slot); DEBUG_ECHOPAIR_F(STR_SAVED_POS " S", slot);
DEBUG_ECHOPAIR_F(" : X", pos.x); DEBUG_ECHOPAIR_F(" : X", pos.x);
DEBUG_ECHOPAIR_F_P(SP_Y_STR, pos.y); DEBUG_ECHOPAIR_F_P(SP_Y_STR, pos.y);
DEBUG_ECHOLNPAIR_F_P(SP_Z_STR, pos.z); DEBUG_ECHOLNPAIR_F_P(SP_Z_STR, pos.z);

View File

@@ -42,7 +42,7 @@ void GcodeSuite::G61(void) {
#if SAVED_POSITIONS < 256 #if SAVED_POSITIONS < 256
if (slot >= SAVED_POSITIONS) { if (slot >= SAVED_POSITIONS) {
SERIAL_ERROR_MSG(MSG_INVALID_POS_SLOT STRINGIFY(SAVED_POSITIONS)); SERIAL_ERROR_MSG(STR_INVALID_POS_SLOT STRINGIFY(SAVED_POSITIONS));
return; return;
} }
#endif #endif
@@ -54,7 +54,7 @@ void GcodeSuite::G61(void) {
const float fr = parser.linearval('F'); const float fr = parser.linearval('F');
if (fr > 0.0) feedrate_mm_s = MMM_TO_MMS(fr); if (fr > 0.0) feedrate_mm_s = MMM_TO_MMS(fr);
SERIAL_ECHOPAIR(MSG_RESTORING_POS " S", int(slot)); SERIAL_ECHOPAIR(STR_RESTORING_POS " S", int(slot));
LOOP_XYZ(i) { LOOP_XYZ(i) {
destination[i] = parser.seen(axis_codes[i]) destination[i] = parser.seen(axis_codes[i])
? stored_position[slot][i] + parser.value_axis_units((AxisEnum)i) ? stored_position[slot][i] + parser.value_axis_units((AxisEnum)i)

View File

@@ -35,6 +35,10 @@
#include "../../../lcd/ultralcd.h" #include "../../../lcd/ultralcd.h"
#endif #endif
#if ENABLED(POWER_LOSS_RECOVERY)
#include "../../../feature/power_loss_recovery.h"
#endif
/** /**
* M125: Store current position and move to parking position. * M125: Store current position and move to parking position.
* Called on pause (by M25) to prevent material leaking onto the * Called on pause (by M25) to prevent material leaking onto the
@@ -85,6 +89,9 @@ void GcodeSuite::M125() {
#endif #endif
if (pause_print(retract, park_point, 0, show_lcd)) { if (pause_print(retract, park_point, 0, show_lcd)) {
#if ENABLED(POWER_LOSS_RECOVERY)
if (recovery.enabled) recovery.save(true);
#endif
if (!sd_printing || show_lcd) { if (!sd_printing || show_lcd) {
wait_for_confirmation(false, 0); wait_for_confirmation(false, 0);
resume_print(0, 0, PAUSE_PARK_RETRACT_LENGTH, 0); resume_print(0, 0, PAUSE_PARK_RETRACT_LENGTH, 0);

View File

@@ -94,7 +94,7 @@ int8_t GcodeSuite::get_target_extruder_from_command() {
if (e < EXTRUDERS) return e; if (e < EXTRUDERS) return e;
SERIAL_ECHO_START(); SERIAL_ECHO_START();
SERIAL_CHAR('M'); SERIAL_ECHO(parser.codenum); SERIAL_CHAR('M'); SERIAL_ECHO(parser.codenum);
SERIAL_ECHOLNPAIR(" " MSG_INVALID_EXTRUDER " ", int(e)); SERIAL_ECHOLNPAIR(" " STR_INVALID_EXTRUDER " ", int(e));
return -1; return -1;
} }
return active_extruder; return active_extruder;
@@ -111,9 +111,9 @@ int8_t GcodeSuite::get_target_e_stepper_from_command() {
SERIAL_ECHO_START(); SERIAL_ECHO_START();
SERIAL_CHAR('M'); SERIAL_ECHO(parser.codenum); SERIAL_CHAR('M'); SERIAL_ECHO(parser.codenum);
if (e == -1) if (e == -1)
SERIAL_ECHOLNPGM(" " MSG_E_STEPPER_NOT_SPECIFIED); SERIAL_ECHOLNPGM(" " STR_E_STEPPER_NOT_SPECIFIED);
else else
SERIAL_ECHOLNPAIR(" " MSG_INVALID_E_STEPPER " ", int(e)); SERIAL_ECHOLNPAIR(" " STR_INVALID_E_STEPPER " ", int(e));
return -1; return -1;
} }
@@ -951,13 +951,13 @@ void GcodeSuite::process_subcommands_now(char * gcode) {
switch (busy_state) { switch (busy_state) {
case IN_HANDLER: case IN_HANDLER:
case IN_PROCESS: case IN_PROCESS:
SERIAL_ECHO_MSG(MSG_BUSY_PROCESSING); SERIAL_ECHO_MSG(STR_BUSY_PROCESSING);
break; break;
case PAUSED_FOR_USER: case PAUSED_FOR_USER:
SERIAL_ECHO_MSG(MSG_BUSY_PAUSED_FOR_USER); SERIAL_ECHO_MSG(STR_BUSY_PAUSED_FOR_USER);
break; break;
case PAUSED_FOR_INPUT: case PAUSED_FOR_INPUT:
SERIAL_ECHO_MSG(MSG_BUSY_PAUSED_FOR_INPUT); SERIAL_ECHO_MSG(STR_BUSY_PAUSED_FOR_INPUT);
break; break;
default: default:
break; break;

View File

@@ -35,7 +35,7 @@ void GcodeSuite::G92() {
bool sync_E = false, sync_XYZ = false; bool sync_E = false, sync_XYZ = false;
#if USE_GCODE_SUBCODES #if ENABLED(USE_GCODE_SUBCODES)
const uint8_t subcode_G92 = parser.subcode; const uint8_t subcode_G92 = parser.subcode;
#else #else
constexpr uint8_t subcode_G92 = 0; constexpr uint8_t subcode_G92 = 0;

View File

@@ -69,7 +69,7 @@ void GcodeSuite::M428() {
if (!WITHIN(diff[i], -20, 20) && home_dir((AxisEnum)i) > 0) if (!WITHIN(diff[i], -20, 20) && home_dir((AxisEnum)i) > 0)
diff[i] = -current_position[i]; diff[i] = -current_position[i];
if (!WITHIN(diff[i], -20, 20)) { if (!WITHIN(diff[i], -20, 20)) {
SERIAL_ERROR_MSG(MSG_ERR_M428_TOO_FAR); SERIAL_ERROR_MSG(STR_ERR_M428_TOO_FAR);
LCD_ALERTMESSAGEPGM_P(PSTR("Err: Too far!")); LCD_ALERTMESSAGEPGM_P(PSTR("Err: Too far!"));
BUZZ(200, 40); BUZZ(200, 40);
return; return;

View File

@@ -39,7 +39,7 @@
*/ */
void GcodeSuite::M115() { void GcodeSuite::M115() {
SERIAL_ECHOLNPGM(MSG_M115_REPORT); SERIAL_ECHOLNPGM(STR_M115_REPORT);
#if ENABLED(EXTENDED_CAPABILITIES_REPORT) #if ENABLED(EXTENDED_CAPABILITIES_REPORT)

View File

@@ -67,11 +67,16 @@ void GcodeSuite::M0_M1() {
planner.synchronize(); planner.synchronize();
#if HAS_LEDS_OFF_FLAG
if (parser.seen('Q'))
printerEventLEDs.onPrintCompleted(); // Change LED color for Print Completed
#endif
#if HAS_LCD_MENU #if HAS_LCD_MENU
if (has_message) if (has_message)
ui.set_status(args, true); ui.set_status(args, true);
else if (!parser.seenval('Q')) { else {
LCD_MESSAGEPGM(MSG_USERWAIT); LCD_MESSAGEPGM(MSG_USERWAIT);
#if ENABLED(LCD_PROGRESS_BAR) && PROGRESS_MSG_EXPIRE > 0 #if ENABLED(LCD_PROGRESS_BAR) && PROGRESS_MSG_EXPIRE > 0
ui.reset_progress_bar_timeout(); ui.reset_progress_bar_timeout();
@@ -98,11 +103,11 @@ void GcodeSuite::M0_M1() {
wait_for_user = true; wait_for_user = true;
#if ENABLED(HOST_PROMPT_SUPPORT) #if ENABLED(HOST_PROMPT_SUPPORT)
host_prompt_do(PROMPT_USER_CONTINUE, PSTR("M0/1 Break Called"), CONTINUE_STR); host_prompt_do(PROMPT_USER_CONTINUE, parser.codenum ? PSTR("M1 Stop") : PSTR("M0 Stop"), CONTINUE_STR);
#endif #endif
if (ms > 0) ms += millis(); // wait until this time for a click if (ms > 0) ms += millis(); // wait until this time for a click
while (wait_for_user && (ms > 0 || PENDING(millis(), ms))) idle(); while (wait_for_user && (ms == 0 || PENDING(millis(), ms))) idle();
#if HAS_LEDS_OFF_FLAG #if HAS_LEDS_OFF_FLAG
printerEventLEDs.onResumeAfterWait(); printerEventLEDs.onResumeAfterWait();

View File

@@ -38,7 +38,7 @@
void GcodeSuite::M145() { void GcodeSuite::M145() {
const uint8_t material = (uint8_t)parser.intval('S'); const uint8_t material = (uint8_t)parser.intval('S');
if (material >= COUNT(ui.preheat_hotend_temp)) if (material >= COUNT(ui.preheat_hotend_temp))
SERIAL_ERROR_MSG(MSG_ERR_MATERIAL_INDEX); SERIAL_ERROR_MSG(STR_ERR_MATERIAL_INDEX);
else { else {
int v; int v;
if (parser.seenval('H')) { if (parser.seenval('H')) {

View File

@@ -118,7 +118,7 @@ void GcodeSuite::G0_G1(
#endif #endif
if (_MOVE_SYNC) { if (_MOVE_SYNC) {
planner.synchronize(); planner.synchronize();
SERIAL_ECHOLNPGM(MSG_Z_MOVE_COMP); SERIAL_ECHOLNPGM(STR_Z_MOVE_COMP);
} }
#endif #endif
} }

View File

@@ -327,7 +327,7 @@ void GcodeSuite::G2_G3(const bool clockwise) {
// P indicates number of circles to do // P indicates number of circles to do
int8_t circles_to_do = parser.byteval('P'); int8_t circles_to_do = parser.byteval('P');
if (!WITHIN(circles_to_do, 0, 100)) if (!WITHIN(circles_to_do, 0, 100))
SERIAL_ERROR_MSG(MSG_ERR_ARC_ARGS); SERIAL_ERROR_MSG(STR_ERR_ARC_ARGS);
while (circles_to_do--) while (circles_to_do--)
plan_arc(current_position, arc_offset, clockwise); plan_arc(current_position, arc_offset, clockwise);
@@ -338,7 +338,7 @@ void GcodeSuite::G2_G3(const bool clockwise) {
reset_stepper_timeout(); reset_stepper_timeout();
} }
else else
SERIAL_ERROR_MSG(MSG_ERR_ARC_ARGS); SERIAL_ERROR_MSG(STR_ERR_ARC_ARGS);
} }
} }

View File

@@ -35,7 +35,7 @@ void GcodeSuite::G4() {
planner.synchronize(); planner.synchronize();
#if ENABLED(NANODLP_Z_SYNC) #if ENABLED(NANODLP_Z_SYNC)
SERIAL_ECHOLNPGM(MSG_Z_MOVE_COMP); SERIAL_ECHOLNPGM(STR_Z_MOVE_COMP);
#endif #endif
if (!ui.has_status()) LCD_MESSAGEPGM(MSG_DWELL); if (!ui.has_status()) LCD_MESSAGEPGM(MSG_DWELL);

View File

@@ -45,7 +45,7 @@ void GcodeSuite::G5() {
#if ENABLED(CNC_WORKSPACE_PLANES) #if ENABLED(CNC_WORKSPACE_PLANES)
if (workspace_plane != PLANE_XY) { if (workspace_plane != PLANE_XY) {
SERIAL_ERROR_MSG(MSG_ERR_BAD_PLANE_MODE); SERIAL_ERROR_MSG(STR_ERR_BAD_PLANE_MODE);
return; return;
} }
#endif #endif

View File

@@ -48,13 +48,13 @@
) { ) {
probe.offset.z += offs; probe.offset.z += offs;
SERIAL_ECHO_START(); SERIAL_ECHO_START();
SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET MSG_Z ": ", probe.offset.z); SERIAL_ECHOLNPAIR(STR_PROBE_OFFSET STR_Z ": ", probe.offset.z);
} }
else { else {
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
hotend_offset[active_extruder].z -= offs; hotend_offset[active_extruder].z -= offs;
SERIAL_ECHO_START(); SERIAL_ECHO_START();
SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET MSG_Z ": ", hotend_offset[active_extruder].z); SERIAL_ECHOLNPAIR(STR_PROBE_OFFSET STR_Z ": ", hotend_offset[active_extruder].z);
#endif #endif
} }
} }
@@ -98,7 +98,7 @@ void GcodeSuite::M290() {
SERIAL_ECHO_START(); SERIAL_ECHO_START();
#if ENABLED(BABYSTEP_ZPROBE_OFFSET) #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET " " MSG_Z, probe.offset.z); SERIAL_ECHOLNPAIR(STR_PROBE_OFFSET " " STR_Z, probe.offset.z);
#endif #endif
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
@@ -131,7 +131,7 @@ void GcodeSuite::M290() {
#else #else
PSTR("Babystep Z") PSTR("Babystep Z")
#endif #endif
, babystep.axis_total[BS_TODO_AXIS(Z_AXIS)] , babystep.axis_total[BS_AXIS_IND(Z_AXIS)]
); );
} }
#endif #endif

View File

@@ -51,13 +51,13 @@ char *GCodeParser::command_ptr,
char GCodeParser::command_letter; char GCodeParser::command_letter;
int GCodeParser::codenum; int GCodeParser::codenum;
#if USE_GCODE_SUBCODES #if ENABLED(USE_GCODE_SUBCODES)
uint8_t GCodeParser::subcode; uint8_t GCodeParser::subcode;
#endif #endif
#if ENABLED(GCODE_MOTION_MODES) #if ENABLED(GCODE_MOTION_MODES)
int16_t GCodeParser::motion_mode_codenum = -1; int16_t GCodeParser::motion_mode_codenum = -1;
#if USE_GCODE_SUBCODES #if ENABLED(USE_GCODE_SUBCODES)
uint8_t GCodeParser::motion_mode_subcode; uint8_t GCodeParser::motion_mode_subcode;
#endif #endif
#endif #endif
@@ -83,7 +83,7 @@ void GCodeParser::reset() {
string_arg = nullptr; // No whole line argument string_arg = nullptr; // No whole line argument
command_letter = '?'; // No command letter command_letter = '?'; // No command letter
codenum = 0; // No command code codenum = 0; // No command code
#if USE_GCODE_SUBCODES #if ENABLED(USE_GCODE_SUBCODES)
subcode = 0; // No command sub-code subcode = 0; // No command sub-code
#endif #endif
#if ENABLED(FASTER_GCODE_PARSER) #if ENABLED(FASTER_GCODE_PARSER)
@@ -118,11 +118,18 @@ void GCodeParser::parse(char *p) {
reset(); // No codes to report reset(); // No codes to report
auto uppercase = [](char c) {
#if ENABLED(GCODE_CASE_INSENSITIVE)
if (WITHIN(c, 'a', 'z')) c += 'A' - 'a';
#endif
return c;
};
// Skip spaces // Skip spaces
while (*p == ' ') ++p; while (*p == ' ') ++p;
// Skip N[-0-9] if included in the command line // Skip N[-0-9] if included in the command line
if (*p == 'N' && NUMERIC_SIGNED(p[1])) { if (uppercase(*p) == 'N' && NUMERIC_SIGNED(p[1])) {
#if ENABLED(FASTER_GCODE_PARSER) #if ENABLED(FASTER_GCODE_PARSER)
//set('N', p + 1); // (optional) Set the 'N' parameter value //set('N', p + 1); // (optional) Set the 'N' parameter value
#endif #endif
@@ -135,7 +142,7 @@ void GCodeParser::parse(char *p) {
command_ptr = p; command_ptr = p;
// Get the command letter, which must be G, M, or T // Get the command letter, which must be G, M, or T
const char letter = *p++; const char letter = uppercase(*p++);
// Nullify asterisk and trailing whitespace // Nullify asterisk and trailing whitespace
char *starpos = strchr(p, '*'); char *starpos = strchr(p, '*');
@@ -187,12 +194,12 @@ void GCodeParser::parse(char *p) {
do { codenum *= 10, codenum += *p++ - '0'; } while (NUMERIC(*p)); do { codenum *= 10, codenum += *p++ - '0'; } while (NUMERIC(*p));
// Allow for decimal point in command // Allow for decimal point in command
#if USE_GCODE_SUBCODES #if ENABLED(USE_GCODE_SUBCODES)
if (*p == '.') { if (*p == '.') {
p++; p++;
while (NUMERIC(*p)) while (NUMERIC(*p))
subcode *= 10, subcode += *p++ - '0'; subcode *= 10, subcode += *p++ - '0';
} }
#endif #endif
// Skip all spaces to get to the first argument, or nul // Skip all spaces to get to the first argument, or nul
@@ -206,7 +213,7 @@ void GCodeParser::parse(char *p) {
) )
) { ) {
motion_mode_codenum = codenum; motion_mode_codenum = codenum;
#if USE_GCODE_SUBCODES #if ENABLED(USE_GCODE_SUBCODES)
motion_mode_subcode = subcode; motion_mode_subcode = subcode;
#endif #endif
} }
@@ -225,7 +232,7 @@ void GCodeParser::parse(char *p) {
if (motion_mode_codenum < 0) return; if (motion_mode_codenum < 0) return;
command_letter = 'G'; command_letter = 'G';
codenum = motion_mode_codenum; codenum = motion_mode_codenum;
#if USE_GCODE_SUBCODES #if ENABLED(USE_GCODE_SUBCODES)
subcode = motion_mode_subcode; subcode = motion_mode_subcode;
#endif #endif
p--; // Back up one character to use the current parameter p--; // Back up one character to use the current parameter
@@ -271,7 +278,7 @@ void GCodeParser::parse(char *p) {
bool quoted_string_arg = false; bool quoted_string_arg = false;
#endif #endif
string_arg = nullptr; string_arg = nullptr;
while (const char param = *p++) { // Get the next parameter. A NUL ends the loop while (const char param = uppercase(*p++)) { // Get the next parameter. A NUL ends the loop
// Special handling for M32 [P] !/path/to/file.g# // Special handling for M32 [P] !/path/to/file.g#
// The path must be the last parameter // The path must be the last parameter
@@ -289,14 +296,14 @@ void GCodeParser::parse(char *p) {
} }
#endif #endif
// Arguments MUST be uppercase for fast GCode parsing
#if ENABLED(FASTER_GCODE_PARSER) #if ENABLED(FASTER_GCODE_PARSER)
#define PARAM_TEST WITHIN(param, 'A', 'Z') // Arguments MUST be uppercase for fast GCode parsing
#define PARAM_OK(P) WITHIN((P), 'A', 'Z')
#else #else
#define PARAM_TEST true #define PARAM_OK(P) true
#endif #endif
if (PARAM_TEST) { if (PARAM_OK(param)) {
while (*p == ' ') p++; // Skip spaces between parameters & values while (*p == ' ') p++; // Skip spaces between parameters & values
@@ -365,7 +372,7 @@ void GCodeParser::parse(char *p) {
#endif // CNC_COORDINATE_SYSTEMS #endif // CNC_COORDINATE_SYSTEMS
void GCodeParser::unknown_command_warning() { void GCodeParser::unknown_command_warning() {
SERIAL_ECHO_MSG(MSG_UNKNOWN_COMMAND, command_ptr, "\""); SERIAL_ECHO_MSG(STR_UNKNOWN_COMMAND, command_ptr, "\"");
} }
#if ENABLED(DEBUG_GCODE_PARSER) #if ENABLED(DEBUG_GCODE_PARSER)

View File

@@ -85,13 +85,13 @@ public:
*string_arg, // string of command line *string_arg, // string of command line
command_letter; // G, M, or T command_letter; // G, M, or T
static int codenum; // 123 static int codenum; // 123
#if USE_GCODE_SUBCODES #if ENABLED(USE_GCODE_SUBCODES)
static uint8_t subcode; // .1 static uint8_t subcode; // .1
#endif #endif
#if ENABLED(GCODE_MOTION_MODES) #if ENABLED(GCODE_MOTION_MODES)
static int16_t motion_mode_codenum; static int16_t motion_mode_codenum;
#if USE_GCODE_SUBCODES #if ENABLED(USE_GCODE_SUBCODES)
static uint8_t motion_mode_subcode; static uint8_t motion_mode_subcode;
#endif #endif
FORCE_INLINE static void cancel_motion_mode() { motion_mode_codenum = -1; } FORCE_INLINE static void cancel_motion_mode() { motion_mode_codenum = -1; }
@@ -166,7 +166,6 @@ public:
#ifdef CPU_32_BIT #ifdef CPU_32_BIT
FORCE_INLINE static bool seen(const char * const str) { return !!(codebits & letter_bits(str)); } FORCE_INLINE static bool seen(const char * const str) { return !!(codebits & letter_bits(str)); }
#else #else
// At least one of a list of code letters was seen
FORCE_INLINE static bool seen(const char * const str) { FORCE_INLINE static bool seen(const char * const str) {
const uint32_t letrbits = letter_bits(str); const uint32_t letrbits = letter_bits(str);
const uint8_t * const cb = (uint8_t*)&codebits; const uint8_t * const cb = (uint8_t*)&codebits;
@@ -177,14 +176,27 @@ public:
static inline bool seen_any() { return !!codebits; } static inline bool seen_any() { return !!codebits; }
#define SEEN_TEST(L) TEST32(codebits, LETTER_BIT(L)) FORCE_INLINE static bool seen_test(const char c) { return TEST32(codebits, LETTER_BIT(c)); }
#else // !FASTER_GCODE_PARSER #else // !FASTER_GCODE_PARSER
#if ENABLED(GCODE_CASE_INSENSITIVE)
FORCE_INLINE static char* strgchr(char *p, char g) {
auto uppercase = [](char c) {
return c + (WITHIN(c, 'a', 'z') ? 'A' - 'a' : 0);
};
const char d = uppercase(g);
for (char cc; (cc = uppercase(*p)); p++) if (cc == d) return p;
return nullptr;
}
#else
#define strgchr strchr
#endif
// Code is found in the string. If not found, value_ptr is unchanged. // 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. // This allows "if (seen('A')||seen('B'))" to use the last-found value.
static inline bool seen(const char c) { static inline bool seen(const char c) {
char *p = strchr(command_args, c); char *p = strgchr(command_args, c);
const bool b = !!p; const bool b = !!p;
if (b) value_ptr = valid_float(&p[1]) ? &p[1] : nullptr; if (b) value_ptr = valid_float(&p[1]) ? &p[1] : nullptr;
return b; return b;
@@ -192,12 +204,12 @@ public:
static inline bool seen_any() { return *command_args == '\0'; } static inline bool seen_any() { return *command_args == '\0'; }
#define SEEN_TEST(L) !!strchr(command_args, L) 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 // At least one of a list of code letters was seen
static inline bool seen(const char * const str) { static inline bool seen(const char * const str) {
for (uint8_t i = 0; const char c = str[i]; i++) for (uint8_t i = 0; const char c = str[i]; i++)
if (SEEN_TEST(c)) return true; if (seen_test(c)) return true;
return false; return false;
} }
@@ -205,7 +217,7 @@ public:
// Seen any axis parameter // Seen any axis parameter
static inline bool seen_axis() { static inline bool seen_axis() {
return SEEN_TEST('X') || SEEN_TEST('Y') || SEEN_TEST('Z') || SEEN_TEST('E'); return seen_test('X') || seen_test('Y') || seen_test('Z') || seen_test('E');
} }
#if ENABLED(GCODE_QUOTED_STRINGS) #if ENABLED(GCODE_QUOTED_STRINGS)
@@ -229,7 +241,7 @@ public:
// Seen a parameter with a value // Seen a parameter with a value
static inline bool seenval(const char c) { return seen(c) && has_value(); } static inline bool seenval(const char c) { return seen(c) && has_value(); }
// Float removes 'E' to prevent scientific notation interpretation // The value as a string
static inline char* value_string() { return value_ptr; } static inline char* value_string() { return value_ptr; }
// Float removes 'E' to prevent scientific notation interpretation // Float removes 'E' to prevent scientific notation interpretation

View File

@@ -39,9 +39,9 @@ void GcodeSuite::M851() {
if (!parser.seen("XYZ")) { if (!parser.seen("XYZ")) {
SERIAL_ECHOLNPAIR_P( SERIAL_ECHOLNPAIR_P(
#if HAS_PROBE_XY_OFFSET #if HAS_PROBE_XY_OFFSET
PSTR(MSG_PROBE_OFFSET " X"), probe.offset_xy.x, SP_Y_STR, probe.offset_xy.y, SP_Z_STR PSTR(STR_PROBE_OFFSET " X"), probe.offset_xy.x, SP_Y_STR, probe.offset_xy.y, SP_Z_STR
#else #else
PSTR(MSG_PROBE_OFFSET " X0 Y0 Z") PSTR(STR_PROBE_OFFSET " X0 Y0 Z")
#endif #endif
, probe.offset.z , probe.offset.z
); );

View File

@@ -163,7 +163,7 @@ bool GCodeQueue::enqueue_one(const char* cmd) {
if (*cmd == 0 || *cmd == '\n' || *cmd == '\r') return true; if (*cmd == 0 || *cmd == '\n' || *cmd == '\r') return true;
if (_enqueue(cmd)) { if (_enqueue(cmd)) {
SERIAL_ECHO_MSG(MSG_ENQUEUEING, cmd, "\""); SERIAL_ECHO_MSG(STR_ENQUEUEING, cmd, "\"");
return true; return true;
} }
return false; return false;
@@ -244,7 +244,7 @@ void GCodeQueue::ok_to_send() {
PORT_REDIRECT(pn); // Reply to the serial port that sent the command PORT_REDIRECT(pn); // Reply to the serial port that sent the command
#endif #endif
if (!send_ok[index_r]) return; if (!send_ok[index_r]) return;
SERIAL_ECHOPGM(MSG_OK); SERIAL_ECHOPGM(STR_OK);
#if ENABLED(ADVANCED_OK) #if ENABLED(ADVANCED_OK)
char* p = command_buffer[index_r]; char* p = command_buffer[index_r];
if (*p == 'N') { if (*p == 'N') {
@@ -270,7 +270,7 @@ void GCodeQueue::flush_and_request_resend() {
PORT_REDIRECT(pn); // Reply to the serial port that sent the command PORT_REDIRECT(pn); // Reply to the serial port that sent the command
#endif #endif
SERIAL_FLUSH(); SERIAL_FLUSH();
SERIAL_ECHOPGM(MSG_RESEND); SERIAL_ECHOPGM(STR_RESEND);
SERIAL_ECHOLN(last_N + 1); SERIAL_ECHOLN(last_N + 1);
ok_to_send(); ok_to_send();
} }
@@ -397,7 +397,7 @@ void GCodeQueue::get_serial_commands() {
static millis_t last_command_time = 0; static millis_t last_command_time = 0;
const millis_t ms = millis(); const millis_t ms = millis();
if (length == 0 && !serial_data_available() && ELAPSED(ms, last_command_time + NO_TIMEOUTS)) { if (length == 0 && !serial_data_available() && ELAPSED(ms, last_command_time + NO_TIMEOUTS)) {
SERIAL_ECHOLNPGM(MSG_WAIT); SERIAL_ECHOLNPGM(STR_WAIT);
last_command_time = ms; last_command_time = ms;
} }
#endif #endif
@@ -436,24 +436,24 @@ void GCodeQueue::get_serial_commands() {
gcode_N = strtol(npos + 1, nullptr, 10); gcode_N = strtol(npos + 1, nullptr, 10);
if (gcode_N != last_N + 1 && !M110) if (gcode_N != last_N + 1 && !M110)
return gcode_line_error(PSTR(MSG_ERR_LINE_NO), i); return gcode_line_error(PSTR(STR_ERR_LINE_NO), i);
char *apos = strrchr(command, '*'); char *apos = strrchr(command, '*');
if (apos) { if (apos) {
uint8_t checksum = 0, count = uint8_t(apos - command); uint8_t checksum = 0, count = uint8_t(apos - command);
while (count) checksum ^= command[--count]; while (count) checksum ^= command[--count];
if (strtol(apos + 1, nullptr, 10) != checksum) if (strtol(apos + 1, nullptr, 10) != checksum)
return gcode_line_error(PSTR(MSG_ERR_CHECKSUM_MISMATCH), i); return gcode_line_error(PSTR(STR_ERR_CHECKSUM_MISMATCH), i);
} }
else else
return gcode_line_error(PSTR(MSG_ERR_NO_CHECKSUM), i); return gcode_line_error(PSTR(STR_ERR_NO_CHECKSUM), i);
last_N = gcode_N; last_N = gcode_N;
} }
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
// Pronterface "M29" and "M29 " has no line number // Pronterface "M29" and "M29 " has no line number
else if (card.flag.saving && !is_M29(command)) else if (card.flag.saving && !is_M29(command))
return gcode_line_error(PSTR(MSG_ERR_NO_CHECKSUM), i); return gcode_line_error(PSTR(STR_ERR_NO_CHECKSUM), i);
#endif #endif
// //
@@ -472,7 +472,7 @@ void GCodeQueue::get_serial_commands() {
case 5: case 5:
#endif #endif
PORT_REDIRECT(i); // Reply to the serial port that sent the command PORT_REDIRECT(i); // Reply to the serial port that sent the command
SERIAL_ECHOLNPGM(MSG_ERR_STOPPED); SERIAL_ECHOLNPGM(STR_ERR_STOPPED);
LCD_MESSAGEPGM(MSG_STOPPED); LCD_MESSAGEPGM(MSG_STOPPED);
break; break;
} }
@@ -512,9 +512,10 @@ void GCodeQueue::get_serial_commands() {
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
/** /**
* Get commands from the SD Card until the command buffer is full * Get lines from the SD Card until the command buffer is full
* or until the end of the file is reached. The special character '#' * or until the end of the file is reached. Because this method
* can also interrupt buffering. * always receives complete command-lines, they can go directly
* into the main command queue.
*/ */
inline void GCodeQueue::get_sdcard_commands() { inline void GCodeQueue::get_sdcard_commands() {
static uint8_t sd_input_state = PS_NORMAL; static uint8_t sd_input_state = PS_NORMAL;
@@ -526,42 +527,22 @@ void GCodeQueue::get_serial_commands() {
while (length < BUFSIZE && !card_eof) { while (length < BUFSIZE && !card_eof) {
const int16_t n = card.get(); const int16_t n = card.get();
card_eof = card.eof(); card_eof = card.eof();
if (n < 0 && !card_eof) { SERIAL_ERROR_MSG(STR_SD_ERR_READ); continue; }
const char sd_char = (char)n; const char sd_char = (char)n;
if (card_eof || n < 0 || sd_char == '\n' || sd_char == '\r') { const bool is_eol = sd_char == '\n' || sd_char == '\r';
if (card_eof) { if (is_eol || card_eof) {
card.printingHasFinished(); // Reset stream state, terminate the buffer, and commit a non-empty command
if (!is_eol && sd_count) ++sd_count; // End of file with no newline
if (IS_SD_PRINTING()) if (!process_line_done(sd_input_state, command_buffer[index_w], sd_count)) {
sd_count = 0; // If a sub-file was printing, continue from call point _commit_command(false);
else { #if ENABLED(POWER_LOSS_RECOVERY)
SERIAL_ECHOLNPGM(MSG_FILE_PRINTED); recovery.cmd_sdpos = card.getIndex(); // Prime for the NEXT _commit_command
#if ENABLED(PRINTER_EVENT_LEDS) #endif
printerEventLEDs.onPrintCompleted();
#if HAS_RESUME_CONTINUE
enqueue_now_P(PSTR("M0 S"
#if HAS_LCD_MENU
"1800"
#else
"60"
#endif
));
#endif
#endif
}
} }
else if (n < 0)
SERIAL_ERROR_MSG(MSG_SD_ERR_READ);
// Terminate the buffer, reset the input state, continue for empty line if (card_eof) card.fileHasFinished(); // Handle end of file reached
if (process_line_done(sd_input_state, command_buffer[index_w], sd_count))
continue;
_commit_command(false);
#if ENABLED(POWER_LOSS_RECOVERY)
recovery.cmd_sdpos = card.getIndex(); // Prime for the next _commit_command
#endif
} }
else else
process_stream_char(sd_char, sd_input_state, command_buffer[index_w], sd_count); process_stream_char(sd_char, sd_input_state, command_buffer[index_w], sd_count);
@@ -604,7 +585,7 @@ void GCodeQueue::advance() {
if (is_M29(command)) { if (is_M29(command)) {
// M29 closes the file // M29 closes the file
card.closefile(); card.closefile();
SERIAL_ECHOLNPGM(MSG_FILE_SAVED); SERIAL_ECHOLNPGM(STR_FILE_SAVED);
#if !defined(__AVR__) || !defined(USBCON) #if !defined(__AVR__) || !defined(USBCON)
#if ENABLED(SERIAL_STATS_DROPPED_RX) #if ENABLED(SERIAL_STATS_DROPPED_RX)
@@ -637,9 +618,7 @@ void GCodeQueue::advance() {
#endif // SDSUPPORT #endif // SDSUPPORT
// The queue may be reset by a command handler or by code invoked by idle() within a handler // The queue may be reset by a command handler or by code invoked by idle() within a handler
if (length) { --length;
--length; if (++index_r >= BUFSIZE) index_r = 0;
if (++index_r >= BUFSIZE) index_r = 0;
}
} }

View File

@@ -117,6 +117,12 @@ public:
*/ */
static void flush_and_request_resend(); static void flush_and_request_resend();
/**
* Attempt to enqueue a single G-code command
* and return 'true' if successful.
*/
FORCE_INLINE static bool enqueue_P(const char* cmd) { return _enqueue(cmd); }
private: private:
static uint8_t index_w; // Ring buffer write position static uint8_t index_w; // Ring buffer write position

View File

@@ -31,9 +31,9 @@
* M20: List SD card to serial output * M20: List SD card to serial output
*/ */
void GcodeSuite::M20() { void GcodeSuite::M20() {
SERIAL_ECHOLNPGM(MSG_BEGIN_FILE_LIST); SERIAL_ECHOLNPGM(STR_BEGIN_FILE_LIST);
card.ls(); card.ls();
SERIAL_ECHOLNPGM(MSG_END_FILE_LIST); SERIAL_ECHOLNPGM(STR_END_FILE_LIST);
} }
#endif // SDSUPPORT #endif // SDSUPPORT

View File

@@ -86,10 +86,6 @@ void GcodeSuite::M24() {
*/ */
void GcodeSuite::M25() { void GcodeSuite::M25() {
#if ENABLED(POWER_LOSS_RECOVERY)
if (recovery.enabled) recovery.save(true, false);
#endif
// Set initial pause flag to prevent more commands from landing in the queue while we try to pause // Set initial pause flag to prevent more commands from landing in the queue while we try to pause
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
if (IS_SD_PRINTING()) card.pauseSDPrint(); if (IS_SD_PRINTING()) card.pauseSDPrint();
@@ -101,6 +97,10 @@ void GcodeSuite::M25() {
#else #else
#if ENABLED(POWER_LOSS_RECOVERY)
if (recovery.enabled) recovery.save(true);
#endif
print_job_timer.pause(); print_job_timer.pause();
ui.reset_status(); ui.reset_status();

View File

@@ -31,7 +31,7 @@ void GcodeSuite::M105() {
const int8_t target_extruder = get_target_extruder_from_command(); const int8_t target_extruder = get_target_extruder_from_command();
if (target_extruder < 0) return; if (target_extruder < 0) return;
SERIAL_ECHOPGM(MSG_OK); SERIAL_ECHOPGM(STR_OK);
#if HAS_TEMP_SENSOR #if HAS_TEMP_SENSOR

View File

@@ -52,7 +52,7 @@ void GcodeSuite::M303() {
#endif #endif
const heater_ind_t e = (heater_ind_t)parser.intval('E'); const heater_ind_t e = (heater_ind_t)parser.intval('E');
if (!WITHIN(e, SI, EI)) { if (!WITHIN(e, SI, EI)) {
SERIAL_ECHOLNPGM(MSG_PID_BAD_EXTRUDER_NUM); SERIAL_ECHOLNPGM(STR_PID_BAD_EXTRUDER_NUM);
#if ENABLED(EXTENSIBLE_UI) #if ENABLED(EXTENSIBLE_UI)
ExtUI::OnPidTuning(ExtUI::result_t::PID_BAD_EXTRUDER_NUM); ExtUI::OnPidTuning(ExtUI::result_t::PID_BAD_EXTRUDER_NUM);
#endif #endif

View File

@@ -361,6 +361,15 @@
#define HAS_ADC_BUTTONS ENABLED(ADC_KEYPAD) #define HAS_ADC_BUTTONS ENABLED(ADC_KEYPAD)
#define HAS_DGUS_LCD ANY(DGUS_LCD_UI_ORIGIN, DGUS_LCD_UI_FYSETC, DGUS_LCD_UI_HIPRECY) #define HAS_DGUS_LCD ANY(DGUS_LCD_UI_ORIGIN, DGUS_LCD_UI_FYSETC, DGUS_LCD_UI_HIPRECY)
#if HAS_GRAPHICAL_LCD
#ifndef LCD_PIXEL_WIDTH
#define LCD_PIXEL_WIDTH 128
#endif
#ifndef LCD_PIXEL_HEIGHT
#define LCD_PIXEL_HEIGHT 64
#endif
#endif
/** /**
* Extruders have some combination of stepper motors and hotends * Extruders have some combination of stepper motors and hotends
* so we separate these concepts into the defines: * so we separate these concepts into the defines:
@@ -493,6 +502,10 @@
* Set a flag for a servo probe (or BLTouch) * Set a flag for a servo probe (or BLTouch)
*/ */
#define HAS_Z_SERVO_PROBE (defined(Z_PROBE_SERVO_NR) && Z_PROBE_SERVO_NR >= 0) #define HAS_Z_SERVO_PROBE (defined(Z_PROBE_SERVO_NR) && Z_PROBE_SERVO_NR >= 0)
#define HAS_SERVO_ANGLES (HAS_Z_SERVO_PROBE || EITHER(SWITCHING_EXTRUDER, SWITCHING_NOZZLE))
#if !HAS_SERVO_ANGLES
#undef EDITABLE_SERVO_ANGLES
#endif
/** /**
* Set flags for enabled probes * Set flags for enabled probes
@@ -562,8 +575,6 @@
#define IS_RE_ARM_BOARD MB(RAMPS_14_RE_ARM_EFB, RAMPS_14_RE_ARM_EEB, RAMPS_14_RE_ARM_EFF, RAMPS_14_RE_ARM_EEF, RAMPS_14_RE_ARM_SF) #define IS_RE_ARM_BOARD MB(RAMPS_14_RE_ARM_EFB, RAMPS_14_RE_ARM_EEB, RAMPS_14_RE_ARM_EFF, RAMPS_14_RE_ARM_EEF, RAMPS_14_RE_ARM_SF)
#define HAS_SDCARD_CONNECTION EITHER(TARGET_LPC1768, ADAFRUIT_GRAND_CENTRAL_M4)
#define HAS_LINEAR_E_JERK (DISABLED(CLASSIC_JERK) && ENABLED(LIN_ADVANCE)) #define HAS_LINEAR_E_JERK (DISABLED(CLASSIC_JERK) && ENABLED(LIN_ADVANCE))
#ifndef SPI_SPEED #ifndef SPI_SPEED

View File

@@ -645,7 +645,7 @@
#define MINIMUM_STEPPER_PULSE 2 #define MINIMUM_STEPPER_PULSE 2
#elif HAS_DRIVER(A4988) || HAS_DRIVER(A5984) #elif HAS_DRIVER(A4988) || HAS_DRIVER(A5984)
#define MINIMUM_STEPPER_PULSE 1 #define MINIMUM_STEPPER_PULSE 1
#elif TRINAMICS #elif HAS_TRINAMIC || HAS_TRINAMIC_STANDALONE
#define MINIMUM_STEPPER_PULSE 0 #define MINIMUM_STEPPER_PULSE 0
#elif HAS_DRIVER(LV8729) #elif HAS_DRIVER(LV8729)
#define MINIMUM_STEPPER_PULSE 0 #define MINIMUM_STEPPER_PULSE 0
@@ -665,7 +665,7 @@
#define MAXIMUM_STEPPER_RATE 500000 #define MAXIMUM_STEPPER_RATE 500000
#elif HAS_DRIVER(LV8729) #elif HAS_DRIVER(LV8729)
#define MAXIMUM_STEPPER_RATE 1000000 #define MAXIMUM_STEPPER_RATE 1000000
#elif TRINAMICS #elif HAS_TRINAMIC || HAS_TRINAMIC_STANDALONE
#define MAXIMUM_STEPPER_RATE 5000000 #define MAXIMUM_STEPPER_RATE 5000000
#else #else
#define MAXIMUM_STEPPER_RATE 250000 #define MAXIMUM_STEPPER_RATE 250000
@@ -1546,16 +1546,6 @@
#define HAS_SERVO_3 (PIN_EXISTS(SERVO3) && NUM_SERVOS > 3) #define HAS_SERVO_3 (PIN_EXISTS(SERVO3) && NUM_SERVOS > 3)
#define HAS_SERVOS (NUM_SERVOS > 0) #define HAS_SERVOS (NUM_SERVOS > 0)
#if HAS_SERVOS && !defined(Z_PROBE_SERVO_NR)
#define Z_PROBE_SERVO_NR -1
#endif
#define HAS_SERVO_ANGLES (EITHER(SWITCHING_EXTRUDER, SWITCHING_NOZZLE) || (HAS_Z_SERVO_PROBE && defined(Z_PROBE_SERVO_NR)))
#if !HAS_SERVO_ANGLES || ENABLED(BLTOUCH)
#undef EDITABLE_SERVO_ANGLES
#endif
// Sensors // Sensors
#define HAS_FILAMENT_WIDTH_SENSOR (PIN_EXISTS(FILWIDTH)) #define HAS_FILAMENT_WIDTH_SENSOR (PIN_EXISTS(FILWIDTH))
@@ -2110,7 +2100,9 @@
#endif #endif
// Add commands that need sub-codes to this list // Add commands that need sub-codes to this list
#define USE_GCODE_SUBCODES ANY(G38_PROBE_TARGET, CNC_COORDINATE_SYSTEMS, POWER_LOSS_RECOVERY) #if ANY(G38_PROBE_TARGET, CNC_COORDINATE_SYSTEMS, POWER_LOSS_RECOVERY)
#define USE_GCODE_SUBCODES
#endif
// Parking Extruder // Parking Extruder
#if ENABLED(PARKING_EXTRUDER) #if ENABLED(PARKING_EXTRUDER)

View File

@@ -1361,8 +1361,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
* Make sure Z_SAFE_HOMING point is reachable * Make sure Z_SAFE_HOMING point is reachable
*/ */
#if ENABLED(Z_SAFE_HOMING) #if ENABLED(Z_SAFE_HOMING)
static_assert(WITHIN(Z_SAFE_HOMING_X_POINT, X_MIN_BED, X_MAX_BED), "Z_SAFE_HOMING_X_POINT can't be reached by the nozzle."); static_assert(WITHIN(Z_SAFE_HOMING_X_POINT, X_MIN_POS, X_MAX_POS), "Z_SAFE_HOMING_X_POINT can't be reached by the nozzle.");
static_assert(WITHIN(Z_SAFE_HOMING_Y_POINT, Y_MIN_BED, Y_MAX_BED), "Z_SAFE_HOMING_Y_POINT can't be reached by the nozzle."); static_assert(WITHIN(Z_SAFE_HOMING_Y_POINT, Y_MIN_POS, Y_MAX_POS), "Z_SAFE_HOMING_Y_POINT can't be reached by the nozzle.");
#endif #endif
/** /**
@@ -2474,6 +2474,86 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
constexpr char _chr5 = USER_GCODE_5[strlen(USER_GCODE_5) - 1]; constexpr char _chr5 = USER_GCODE_5[strlen(USER_GCODE_5) - 1];
static_assert(_chr5 != '\n' && _chr5 != '\r', "USER_GCODE_5 cannot have a newline at the end. Please remove it."); static_assert(_chr5 != '\n' && _chr5 != '\r', "USER_GCODE_5 cannot have a newline at the end. Please remove it.");
#endif #endif
#ifdef USER_GCODE_6
constexpr char _chr6 = USER_GCODE_6[strlen(USER_GCODE_6) - 1];
static_assert(_chr6 != '\n' && _chr6 != '\r', "USER_GCODE_6 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_7
constexpr char _chr7 = USER_GCODE_7[strlen(USER_GCODE_7) - 1];
static_assert(_chr7 != '\n' && _chr7 != '\r', "USER_GCODE_7 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_8
constexpr char _chr8 = USER_GCODE_8[strlen(USER_GCODE_8) - 1];
static_assert(_chr8 != '\n' && _chr8 != '\r', "USER_GCODE_8 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_9
constexpr char _chr9 = USER_GCODE_9[strlen(USER_GCODE_9) - 1];
static_assert(_chr9 != '\n' && _chr9 != '\r', "USER_GCODE_9 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_10
constexpr char _chr10 = USER_GCODE_10[strlen(USER_GCODE_10) - 1];
static_assert(_chr10 != '\n' && _chr10 != '\r', "USER_GCODE_10 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_11
constexpr char _chr11 = USER_GCODE_11[strlen(USER_GCODE_11) - 1];
static_assert(_chr11 != '\n' && _chr11 != '\r', "USER_GCODE_11 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_12
constexpr char _chr12 = USER_GCODE_12[strlen(USER_GCODE_12) - 1];
static_assert(_chr12 != '\n' && _chr12 != '\r', "USER_GCODE_12 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_13
constexpr char _chr13 = USER_GCODE_13[strlen(USER_GCODE_13) - 1];
static_assert(_chr13 != '\n' && _chr13 != '\r', "USER_GCODE_13 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_14
constexpr char _chr14 = USER_GCODE_14[strlen(USER_GCODE_14) - 1];
static_assert(_chr14 != '\n' && _chr14 != '\r', "USER_GCODE_14 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_15
constexpr char _chr15 = USER_GCODE_15[strlen(USER_GCODE_15) - 1];
static_assert(_chr15 != '\n' && _chr15 != '\r', "USER_GCODE_15 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_16
constexpr char _chr16 = USER_GCODE_16[strlen(USER_GCODE_16) - 1];
static_assert(_chr16 != '\n' && _chr16 != '\r', "USER_GCODE_16 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_17
constexpr char _chr17 = USER_GCODE_17[strlen(USER_GCODE_17) - 1];
static_assert(_chr17 != '\n' && _chr17 != '\r', "USER_GCODE_17 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_18
constexpr char _chr18 = USER_GCODE_18[strlen(USER_GCODE_18) - 1];
static_assert(_chr18 != '\n' && _chr18 != '\r', "USER_GCODE_18 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_19
constexpr char _chr19 = USER_GCODE_19[strlen(USER_GCODE_19) - 1];
static_assert(_chr19 != '\n' && _chr19 != '\r', "USER_GCODE_19 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_20
constexpr char _chr20 = USER_GCODE_20[strlen(USER_GCODE_20) - 1];
static_assert(_chr20 != '\n' && _chr20 != '\r', "USER_GCODE_20 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_21
constexpr char _chr21 = USER_GCODE_21[strlen(USER_GCODE_21) - 1];
static_assert(_chr21 != '\n' && _chr21 != '\r', "USER_GCODE_21 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_22
constexpr char _chr22 = USER_GCODE_22[strlen(USER_GCODE_22) - 1];
static_assert(_chr22 != '\n' && _chr22 != '\r', "USER_GCODE_22 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_23
constexpr char _chr23 = USER_GCODE_23[strlen(USER_GCODE_23) - 1];
static_assert(_chr23 != '\n' && _chr23 != '\r', "USER_GCODE_23 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_24
constexpr char _chr24 = USER_GCODE_24[strlen(USER_GCODE_24) - 1];
static_assert(_chr24 != '\n' && _chr24 != '\r', "USER_GCODE_24 cannot have a newline at the end. Please remove it.");
#endif
#ifdef USER_GCODE_25
constexpr char _chr25 = USER_GCODE_25[strlen(USER_GCODE_25) - 1];
static_assert(_chr25 != '\n' && _chr25 != '\r', "USER_GCODE_25 cannot have a newline at the end. Please remove it.");
#endif
#endif #endif
#if ENABLED(BACKLASH_COMPENSATION) #if ENABLED(BACKLASH_COMPENSATION)

View File

@@ -25,7 +25,7 @@
* Release version. Leave the Marlin version or apply a custom scheme. * Release version. Leave the Marlin version or apply a custom scheme.
*/ */
#ifndef SHORT_BUILD_VERSION #ifndef SHORT_BUILD_VERSION
#define SHORT_BUILD_VERSION "2.0.4.1" #define SHORT_BUILD_VERSION "2.0.4.5"
#endif #endif
/** /**
@@ -42,7 +42,7 @@
* version was tagged. * version was tagged.
*/ */
#ifndef STRING_DISTRIBUTION_DATE #ifndef STRING_DISTRIBUTION_DATE
#define STRING_DISTRIBUTION_DATE "2020-02-22" #define STRING_DISTRIBUTION_DATE "2023-07-18"
#endif #endif
/** /**

View File

@@ -25,7 +25,7 @@
#include <U8glib.h> #include <U8glib.h>
#ifndef U8G_HAL_LINKS #ifndef U8G_HAL_LINKS // Defined by LPC1768/9 environments in platform.ini
#ifdef __SAM3X8E__ #ifdef __SAM3X8E__
@@ -75,6 +75,7 @@
#define U8G_COM_ST7920_HAL_HW_SPI u8g_com_arduino_st7920_hw_spi_fn #define U8G_COM_ST7920_HAL_HW_SPI u8g_com_arduino_st7920_hw_spi_fn
#endif #endif
// This can't be invoked from the current platformio.ini
#ifdef TARGET_LPC1768 #ifdef TARGET_LPC1768
uint8_t u8g_com_HAL_LPC1768_ssd_hw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr); uint8_t u8g_com_HAL_LPC1768_ssd_hw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr);
#endif #endif

View File

@@ -785,7 +785,9 @@
#endif #endif
#endif #endif
#else #endif
#ifndef STATUS_BED_WIDTH
#define STATUS_BED_WIDTH 0 #define STATUS_BED_WIDTH 0
#endif #endif
@@ -1729,8 +1731,8 @@
#define DO_DRAW_LOGO (STATUS_LOGO_WIDTH && ENABLED(CUSTOM_STATUS_SCREEN_IMAGE)) #define DO_DRAW_LOGO (STATUS_LOGO_WIDTH && ENABLED(CUSTOM_STATUS_SCREEN_IMAGE))
#define DO_DRAW_HOTENDS (HOTENDS > 0) #define DO_DRAW_HOTENDS (HOTENDS > 0)
#define DO_DRAW_CUTTER (HAS_CUTTER) #define DO_DRAW_BED (HAS_HEATED_BED && HOTENDS <= 4)
#define DO_DRAW_BED (HAS_HEATED_BED && STATUS_BED_WIDTH && HOTENDS <= 4) #define DO_DRAW_CUTTER (HAS_CUTTER && !DO_DRAW_BED)
#define DO_DRAW_CHAMBER (HAS_TEMP_CHAMBER && STATUS_CHAMBER_WIDTH && HOTENDS <= 4) #define DO_DRAW_CHAMBER (HAS_TEMP_CHAMBER && STATUS_CHAMBER_WIDTH && HOTENDS <= 4)
#define DO_DRAW_FAN (HAS_FAN0 && STATUS_FAN_WIDTH && HOTENDS <= 4 && defined(STATUS_FAN_FRAMES)) #define DO_DRAW_FAN (HAS_FAN0 && STATUS_FAN_WIDTH && HOTENDS <= 4 && defined(STATUS_FAN_FRAMES))

View File

@@ -188,21 +188,6 @@ FORCE_INLINE void _draw_centered_temp(const int16_t temp, const uint8_t tx, cons
u8g.drawBitmapP(hx, STATUS_HEATERS_Y, bw, STATUS_HEATERS_HEIGHT, HOTEND_BITMAP(heater, isHeat)); u8g.drawBitmapP(hx, STATUS_HEATERS_Y, bw, STATUS_HEATERS_HEIGHT, HOTEND_BITMAP(heater, isHeat));
#endif #endif
// Draw a heating progress bar, if specified
#if DO_DRAW_BED && ENABLED(STATUS_HEAT_PERCENT)
if (STATIC_HOTEND && isHeat) {
const uint8_t bx = STATUS_HOTEND_X(heater) + STATUS_HOTEND_WIDTH(heater) + 1;
u8g.drawFrame(bx, STATUS_HEATERS_Y, 3, STATUS_HEATERS_HEIGHT);
if (tall) {
const uint8_t ph = STATUS_HEATERS_HEIGHT - 1 - tall;
if (PAGE_OVER(STATUS_HEATERS_Y + ph))
u8g.drawVLine(bx + 1, STATUS_HEATERS_Y + ph, tall);
}
}
#endif
} // PAGE_CONTAINS } // PAGE_CONTAINS
if (PAGE_UNDER(7)) { if (PAGE_UNDER(7)) {
@@ -240,11 +225,11 @@ FORCE_INLINE void _draw_centered_temp(const int16_t temp, const uint8_t tx, cons
const float temp = thermalManager.degBed(), const float temp = thermalManager.degBed(),
target = thermalManager.degTargetBed(); target = thermalManager.degTargetBed();
#if ENABLED(STATUS_HEAT_PERCENT) || (DO_DRAW_BED && DISABLED(STATUS_BED_ANIM)) #if ENABLED(STATUS_HEAT_PERCENT) || DISABLED(STATUS_BED_ANIM)
const bool isHeat = BED_ALT(); const bool isHeat = BED_ALT();
#endif #endif
#if DO_DRAW_BED && DISABLED(STATUS_BED_ANIM) #if DISABLED(STATUS_BED_ANIM)
#define STATIC_BED true #define STATIC_BED true
#define BED_DOT isHeat #define BED_DOT isHeat
#else #else
@@ -513,7 +498,7 @@ void MarlinUI::draw_status_screen() {
u8g.drawBitmapP(STATUS_HEATERS_X, STATUS_HEATERS_Y, STATUS_HEATERS_BYTEWIDTH, STATUS_HEATERS_HEIGHT, status_heaters_bmp); u8g.drawBitmapP(STATUS_HEATERS_X, STATUS_HEATERS_Y, STATUS_HEATERS_BYTEWIDTH, STATUS_HEATERS_HEIGHT, status_heaters_bmp);
#endif #endif
#if DO_DRAW_CUTTER #if DO_DRAW_CUTTER && DISABLED(STATUS_COMBINE_HEATERS)
#if ANIM_CUTTER #if ANIM_CUTTER
#define CUTTER_BITMAP(S) ((S) ? status_cutter_on_bmp : status_cutter_bmp) #define CUTTER_BITMAP(S) ((S) ? status_cutter_on_bmp : status_cutter_bmp)
#else #else
@@ -537,7 +522,7 @@ void MarlinUI::draw_status_screen() {
u8g.drawBitmapP(STATUS_BED_X, bedy, STATUS_BED_BYTEWIDTH, bedh, BED_BITMAP(BED_ALT())); u8g.drawBitmapP(STATUS_BED_X, bedy, STATUS_BED_BYTEWIDTH, bedh, BED_BITMAP(BED_ALT()));
#endif #endif
#if DO_DRAW_CHAMBER #if DO_DRAW_CHAMBER && DISABLED(STATUS_COMBINE_HEATERS)
#if ANIM_CHAMBER #if ANIM_CHAMBER
#define CHAMBER_BITMAP(S) ((S) ? status_chamber_on_bmp : status_chamber_bmp) #define CHAMBER_BITMAP(S) ((S) ? status_chamber_on_bmp : status_chamber_bmp)
#else #else

View File

@@ -59,8 +59,6 @@
#include "HAL_LCD_com_defines.h" #include "HAL_LCD_com_defines.h"
#define LCD_PIXEL_WIDTH 128
#define LCD_PIXEL_HEIGHT 64
#define PAGE_HEIGHT 8 #define PAGE_HEIGHT 8
/* init sequence from https://github.com/adafruit/ST7565-LCD/blob/master/ST7565/ST7565.cpp */ /* init sequence from https://github.com/adafruit/ST7565-LCD/blob/master/ST7565/ST7565.cpp */

View File

@@ -196,13 +196,6 @@
#endif #endif
#endif #endif
#ifndef LCD_PIXEL_WIDTH
#define LCD_PIXEL_WIDTH 128
#endif
#ifndef LCD_PIXEL_HEIGHT
#define LCD_PIXEL_HEIGHT 64
#endif
// LCD_FULL_PIXEL_WIDTH = // LCD_FULL_PIXEL_WIDTH =
// LCD_PIXEL_OFFSET_X + (LCD_PIXEL_WIDTH * 2) + LCD_PIXEL_OFFSET_X // LCD_PIXEL_OFFSET_X + (LCD_PIXEL_WIDTH * 2) + LCD_PIXEL_OFFSET_X
#if ENABLED(FSMC_GRAPHICAL_TFT) #if ENABLED(FSMC_GRAPHICAL_TFT)

View File

@@ -154,4 +154,4 @@ u8g_dev_t u8g_dev_st7920_128x64_rrd_sw_spi = { u8g_dev_rrd_st7920_128x64_fn, &u8
#endif #endif
#endif // U8GLIB_ST7920 #endif // U8GLIB_ST7920
#endif // __AVR__ && !U8G_HAL_LINKS #endif // !U8G_HAL_LINKS && (__AVR__ || ARDUINO_ARCH_STM32 || ARDUINO_ARCH_ESP32)

View File

@@ -31,12 +31,9 @@
#define ST7920_DAT_PIN LCD_PINS_ENABLE #define ST7920_DAT_PIN LCD_PINS_ENABLE
#define ST7920_CS_PIN LCD_PINS_RS #define ST7920_CS_PIN LCD_PINS_RS
//#define PAGE_HEIGHT 8 //128 byte framebuffer //#define PAGE_HEIGHT 8 // 128 byte framebuffer
#define PAGE_HEIGHT 16 //256 byte framebuffer #define PAGE_HEIGHT 16 // 256 byte framebuffer
//#define PAGE_HEIGHT 32 //512 byte framebuffer //#define PAGE_HEIGHT 32 // 512 byte framebuffer
#define LCD_PIXEL_WIDTH 128
#define LCD_PIXEL_HEIGHT 64
#include <U8glib.h> #include <U8glib.h>

View File

@@ -137,16 +137,16 @@ namespace ExtUI {
SERIAL_ECHOLNPAIR("OnPidTuning:", rst); SERIAL_ECHOLNPAIR("OnPidTuning:", rst);
switch (rst) { switch (rst) {
case PID_BAD_EXTRUDER_NUM: case PID_BAD_EXTRUDER_NUM:
StatusScreen::setStatusMessage(MSG_PID_BAD_EXTRUDER_NUM); StatusScreen::setStatusMessage(STR_PID_BAD_EXTRUDER_NUM);
break; break;
case PID_TEMP_TOO_HIGH: case PID_TEMP_TOO_HIGH:
StatusScreen::setStatusMessage(MSG_PID_TEMP_TOO_HIGH); StatusScreen::setStatusMessage(STR_PID_TEMP_TOO_HIGH);
break; break;
case PID_TUNING_TIMEOUT: case PID_TUNING_TIMEOUT:
StatusScreen::setStatusMessage(MSG_PID_TIMEOUT); StatusScreen::setStatusMessage(STR_PID_TIMEOUT);
break; break;
case PID_DONE: case PID_DONE:
StatusScreen::setStatusMessage(MSG_PID_AUTOTUNE_FINISHED); StatusScreen::setStatusMessage(STR_PID_AUTOTUNE_FINISHED);
break; break;
} }
GOTO_SCREEN(StatusScreen); GOTO_SCREEN(StatusScreen);

View File

@@ -84,7 +84,7 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
.tag(12).button( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXT_F(MSG_LCD_ENDSTOPS)) .tag(12).button( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXT_F(MSG_LCD_ENDSTOPS))
.tag(15).button( BTN_POS(2,6), BTN_SIZE(1,1), GET_TEXT_F(MSG_DISPLAY_MENU)) .tag(15).button( BTN_POS(2,6), BTN_SIZE(1,1), GET_TEXT_F(MSG_DISPLAY_MENU))
.tag(9) .button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(MSG_INTERFACE_SETTINGS)) .tag(9) .button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(MSG_INTERFACE_SETTINGS))
.tag(10).button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXT_F(MSG_RESTORE_FAILSAFE)) .tag(10).button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXT_F(MSG_RESTORE_DEFAULTS))
.tag(5) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXT_F(MSG_VELOCITY)) .tag(5) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXT_F(MSG_VELOCITY))
.tag(6) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXT_F(MSG_ACCELERATION)) .tag(6) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXT_F(MSG_ACCELERATION))
#if DISABLED(CLASSIC_JERK) #if DISABLED(CLASSIC_JERK)
@@ -154,7 +154,7 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
.tag(11).button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXT_F(MSG_FILAMENT)) .tag(11).button( BTN_POS(1,3), BTN_SIZE(1,1), GET_TEXT_F(MSG_FILAMENT))
.tag(15).button( BTN_POS(3,5), BTN_SIZE(1,1), GET_TEXT_F(MSG_DISPLAY_MENU)) .tag(15).button( BTN_POS(3,5), BTN_SIZE(1,1), GET_TEXT_F(MSG_DISPLAY_MENU))
.tag(9) .button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXT_F(MSG_INTERFACE_SETTINGS)) .tag(9) .button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXT_F(MSG_INTERFACE_SETTINGS))
.tag(10).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(MSG_RESTORE_FAILSAFE)) .tag(10).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(MSG_RESTORE_DEFAULTS))
.colors(action_btn) .colors(action_btn)
.tag(1) .button( BTN_POS(3,6), BTN_SIZE(1,1), GET_TEXT_F(MSG_BACK)); .tag(1) .button( BTN_POS(3,6), BTN_SIZE(1,1), GET_TEXT_F(MSG_BACK));
#endif #endif

View File

@@ -86,7 +86,7 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
) )
.tag(12) .button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(MSG_LINEAR_ADVANCE)) .tag(12) .button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(MSG_LINEAR_ADVANCE))
.tag(13) .button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXT_F(MSG_INTERFACE_SETTINGS)) .tag(13) .button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXT_F(MSG_INTERFACE_SETTINGS))
.tag(14) .button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(MSG_RESTORE_FAILSAFE)) .tag(14) .button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(MSG_RESTORE_DEFAULTS))
.colors(action_btn) .colors(action_btn)
.tag(1). button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXT_F(MSG_BACK)); .tag(1). button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXT_F(MSG_BACK));
#undef GRID_COLS #undef GRID_COLS

View File

@@ -62,34 +62,34 @@ void EndstopStatesScreen::onRedraw(draw_mode_t) {
.text(BTN_POS(1,1), BTN_SIZE(6,1), GET_TEXT_F(MSG_LCD_ENDSTOPS)) .text(BTN_POS(1,1), BTN_SIZE(6,1), GET_TEXT_F(MSG_LCD_ENDSTOPS))
.font(font_tiny); .font(font_tiny);
#if PIN_EXISTS(X_MAX) #if PIN_EXISTS(X_MAX)
PIN_ENABLED (1, 2, PSTR(MSG_X_MAX), X_MAX, X_MAX_ENDSTOP_INVERTING) PIN_ENABLED (1, 2, PSTR(STR_X_MAX), X_MAX, X_MAX_ENDSTOP_INVERTING)
#else #else
PIN_DISABLED(1, 2, PSTR(MSG_X_MAX), X_MAX) PIN_DISABLED(1, 2, PSTR(STR_X_MAX), X_MAX)
#endif #endif
#if PIN_EXISTS(Y_MAX) #if PIN_EXISTS(Y_MAX)
PIN_ENABLED (3, 2, PSTR(MSG_Y_MAX), Y_MAX, Y_MAX_ENDSTOP_INVERTING) PIN_ENABLED (3, 2, PSTR(STR_Y_MAX), Y_MAX, Y_MAX_ENDSTOP_INVERTING)
#else #else
PIN_DISABLED(3, 2, PSTR(MSG_Y_MAX), Y_MAX) PIN_DISABLED(3, 2, PSTR(STR_Y_MAX), Y_MAX)
#endif #endif
#if PIN_EXISTS(Z_MAX) #if PIN_EXISTS(Z_MAX)
PIN_ENABLED (5, 2, PSTR(MSG_Z_MAX), Z_MAX, Z_MAX_ENDSTOP_INVERTING) PIN_ENABLED (5, 2, PSTR(STR_Z_MAX), Z_MAX, Z_MAX_ENDSTOP_INVERTING)
#else #else
PIN_DISABLED(5, 2, PSTR(MSG_Z_MAX), Z_MAX) PIN_DISABLED(5, 2, PSTR(STR_Z_MAX), Z_MAX)
#endif #endif
#if PIN_EXISTS(X_MIN) #if PIN_EXISTS(X_MIN)
PIN_ENABLED (1, 3, PSTR(MSG_X_MIN), X_MIN, X_MIN_ENDSTOP_INVERTING) PIN_ENABLED (1, 3, PSTR(STR_X_MIN), X_MIN, X_MIN_ENDSTOP_INVERTING)
#else #else
PIN_DISABLED(1, 3, PSTR(MSG_X_MIN), X_MIN) PIN_DISABLED(1, 3, PSTR(STR_X_MIN), X_MIN)
#endif #endif
#if PIN_EXISTS(Y_MIN) #if PIN_EXISTS(Y_MIN)
PIN_ENABLED (3, 3, PSTR(MSG_Y_MIN), Y_MIN, Y_MIN_ENDSTOP_INVERTING) PIN_ENABLED (3, 3, PSTR(STR_Y_MIN), Y_MIN, Y_MIN_ENDSTOP_INVERTING)
#else #else
PIN_DISABLED(3, 3, PSTR(MSG_Y_MIN), Y_MIN) PIN_DISABLED(3, 3, PSTR(STR_Y_MIN), Y_MIN)
#endif #endif
#if PIN_EXISTS(Z_MIN) #if PIN_EXISTS(Z_MIN)
PIN_ENABLED (5, 3, PSTR(MSG_Z_MIN), Z_MIN, Z_MIN_ENDSTOP_INVERTING) PIN_ENABLED (5, 3, PSTR(STR_Z_MIN), Z_MIN, Z_MIN_ENDSTOP_INVERTING)
#else #else
PIN_DISABLED(5, 3, PSTR(MSG_Z_MIN), Z_MIN) PIN_DISABLED(5, 3, PSTR(STR_Z_MIN), Z_MIN)
#endif #endif
#if ENABLED(FILAMENT_RUNOUT_SENSOR) && PIN_EXISTS(FIL_RUNOUT) #if ENABLED(FILAMENT_RUNOUT_SENSOR) && PIN_EXISTS(FIL_RUNOUT)
PIN_ENABLED (1, 4, GET_TEXT_F(MSG_RUNOUT_1), FIL_RUNOUT, FIL_RUNOUT_INVERTING) PIN_ENABLED (1, 4, GET_TEXT_F(MSG_RUNOUT_1), FIL_RUNOUT, FIL_RUNOUT_INVERTING)
@@ -102,9 +102,9 @@ void EndstopStatesScreen::onRedraw(draw_mode_t) {
PIN_DISABLED(3, 4, GET_TEXT_F(MSG_RUNOUT_2), FIL_RUNOUT2) PIN_DISABLED(3, 4, GET_TEXT_F(MSG_RUNOUT_2), FIL_RUNOUT2)
#endif #endif
#if PIN_EXISTS(Z_MIN_PROBE) #if PIN_EXISTS(Z_MIN_PROBE)
PIN_ENABLED (5, 4, PSTR(MSG_Z_PROBE), Z_MIN_PROBE, Z_MIN_PROBE_ENDSTOP_INVERTING) PIN_ENABLED (5, 4, PSTR(STR_Z_PROBE), Z_MIN_PROBE, Z_MIN_PROBE_ENDSTOP_INVERTING)
#else #else
PIN_DISABLED(5, 4, PSTR(MSG_Z_PROBE), Z_MIN_PROBE) PIN_DISABLED(5, 4, PSTR(STR_Z_PROBE), Z_MIN_PROBE)
#endif #endif
#if HAS_SOFTWARE_ENDSTOPS #if HAS_SOFTWARE_ENDSTOPS

View File

@@ -785,7 +785,7 @@ namespace ExtUI {
#if HAS_BED_PROBE #if HAS_BED_PROBE
return probe.offset.z; return probe.offset.z;
#elif ENABLED(BABYSTEP_DISPLAY_TOTAL) #elif ENABLED(BABYSTEP_DISPLAY_TOTAL)
return (planner.steps_to_mm[Z_AXIS] * babystep.axis_total[BS_TODO_AXIS(Z_AXIS)]); return (planner.steps_to_mm[Z_AXIS] * babystep.axis_total[BS_AXIS_IND(Z_AXIS)]);
#else #else
return 0.0; return 0.0;
#endif #endif

View File

@@ -136,16 +136,16 @@ namespace ExtUI {
SERIAL_ECHOLNPAIR("OnPidTuning:",rst); SERIAL_ECHOLNPAIR("OnPidTuning:",rst);
switch(rst) { switch(rst) {
case PID_BAD_EXTRUDER_NUM: case PID_BAD_EXTRUDER_NUM:
ScreenHandler.setstatusmessagePGM(PSTR(MSG_PID_BAD_EXTRUDER_NUM)); ScreenHandler.setstatusmessagePGM(PSTR(STR_PID_BAD_EXTRUDER_NUM));
break; break;
case PID_TEMP_TOO_HIGH: case PID_TEMP_TOO_HIGH:
ScreenHandler.setstatusmessagePGM(PSTR(MSG_PID_TEMP_TOO_HIGH)); ScreenHandler.setstatusmessagePGM(PSTR(STR_PID_TEMP_TOO_HIGH));
break; break;
case PID_TUNING_TIMEOUT: case PID_TUNING_TIMEOUT:
ScreenHandler.setstatusmessagePGM(PSTR(MSG_PID_TIMEOUT)); ScreenHandler.setstatusmessagePGM(PSTR(STR_PID_TIMEOUT));
break; break;
case PID_DONE: case PID_DONE:
ScreenHandler.setstatusmessagePGM(PSTR(MSG_PID_AUTOTUNE_FINISHED)); ScreenHandler.setstatusmessagePGM(PSTR(STR_PID_AUTOTUNE_FINISHED));
break; break;
} }
ScreenHandler.GotoScreen(DGUSLCD_SCREEN_MAIN); ScreenHandler.GotoScreen(DGUSLCD_SCREEN_MAIN);

View File

@@ -125,7 +125,7 @@ namespace Language_an {
PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste"); PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste");
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Alzar memoria"); PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Alzar memoria");
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Cargar memoria"); PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Cargar memoria");
PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Restaurar memoria"); PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Restaurar memoria");
PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Tornar a cargar"); PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Tornar a cargar");
PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Informacion"); PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Informacion");
PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar"); PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar");
@@ -151,7 +151,7 @@ namespace Language_an {
PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Retraccion auto."); PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Retraccion auto.");
PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambear filamento"); PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambear filamento");
PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Cambear filamento *"); PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Cambear filamento *");
PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Encetan. tarcheta"); PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Encetan. tarcheta");
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambiar tarcheta"); PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambiar tarcheta");
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z fuera"); PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z fuera");
PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch"); PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch");

View File

@@ -110,7 +110,7 @@ namespace Language_bg {
PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD контраст"); PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD контраст");
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Запази в EPROM"); PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Запази в EPROM");
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Зареди от EPROM"); PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Зареди от EPROM");
PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Фабрични настройки"); PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Фабрични настройки");
PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Обнови"); PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Обнови");
PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Преглед"); PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Преглед");
PROGMEM Language_Str MSG_PREPARE = _UxGT("Действия"); PROGMEM Language_Str MSG_PREPARE = _UxGT("Действия");
@@ -136,7 +136,7 @@ namespace Language_bg {
PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Автоoткат"); PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Автоoткат");
PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Смяна нишка"); PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Смяна нишка");
PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Смяна нишка *"); PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Смяна нишка *");
PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Иниц. SD-Карта"); PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Иниц. SD-Карта");
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Смяна SD-Карта"); PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Смяна SD-Карта");
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z-сондата е извадена"); PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z-сондата е извадена");
PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z Отстояние"); PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z Отстояние");

View File

@@ -120,7 +120,7 @@ namespace Language_ca {
PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contrast de LCD"); PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contrast de LCD");
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Desa memoria"); PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Desa memoria");
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Carrega memoria"); PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Carrega memoria");
PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Restaura valors"); PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Restaura valors");
PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Actualitza"); PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Actualitza");
PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Pantalla Info."); PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Pantalla Info.");
PROGMEM Language_Str MSG_PREPARE = _UxGT("Prepara"); PROGMEM Language_Str MSG_PREPARE = _UxGT("Prepara");
@@ -146,7 +146,7 @@ namespace Language_ca {
PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto retraccio"); PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto retraccio");
PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Canvia filament"); PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Canvia filament");
PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Canvia filament *"); PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Canvia filament *");
PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Inicialitza SD"); PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Inicialitza SD");
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Canvia SD"); PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Canvia SD");
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z fora"); PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z fora");
PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reinicia BLTouch"); PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reinicia BLTouch");

View File

@@ -310,7 +310,7 @@ namespace Language_cz {
PROGMEM Language_Str MSG_CONTRAST = _UxGT("Kontrast LCD"); PROGMEM Language_Str MSG_CONTRAST = _UxGT("Kontrast LCD");
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Uložit nastavení"); PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Uložit nastavení");
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Načíst nastavení"); PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Načíst nastavení");
PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Obnovit výchozí"); PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Obnovit výchozí");
PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Inic. EEPROM"); PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Inic. EEPROM");
PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Aktualizace z SD"); PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Aktualizace z SD");
PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Reset tiskárny"); PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Reset tiskárny");
@@ -369,7 +369,7 @@ namespace Language_cz {
PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Vysunout filament *"); PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Vysunout filament *");
PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Vysunout vše"); PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Vysunout vše");
PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Načíst médium"); PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Načíst médium");
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Vyměnit médium"); PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Vyměnit médium");
PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Vysunout médium"); PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Vysunout médium");
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z mimo podl"); PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z mimo podl");

View File

@@ -105,7 +105,7 @@ namespace Language_da {
PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD kontrast"); PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD kontrast");
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Gem i EEPROM"); PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Gem i EEPROM");
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Hent fra EEPROM"); PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Hent fra EEPROM");
PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Gendan failsafe"); PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Gendan Defaults");
PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Genopfrisk"); PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Genopfrisk");
PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Info skærm"); PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Info skærm");
PROGMEM Language_Str MSG_PREPARE = _UxGT("Forbered"); PROGMEM Language_Str MSG_PREPARE = _UxGT("Forbered");

View File

@@ -290,7 +290,7 @@ namespace Language_de {
PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD-Kontrast"); PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD-Kontrast");
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Konfig. speichern"); PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Konfig. speichern");
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Konfig. laden"); PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Konfig. laden");
PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Standardwerte laden"); PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Standardwerte laden");
PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Werkseinstellungen"); PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Werkseinstellungen");
PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("FW Update vom Medium"); PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("FW Update vom Medium");
PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Drucker neustarten"); PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Drucker neustarten");
@@ -343,7 +343,7 @@ namespace Language_de {
PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Filament entladen"); PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Filament entladen");
PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Filament entladen *"); PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Filament entladen *");
PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Alles entladen"); PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Alles entladen");
PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Medium initial."); // Manually initialize the SD-card via user interface PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Medium initial."); // Manually initialize the SD-card via user interface
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Medium getauscht"); // SD-card changed by user. For machines with no autocarddetect. Both send "M21" PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Medium getauscht"); // SD-card changed by user. For machines with no autocarddetect. Both send "M21"
PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Medium freigeben"); // if Marlin gets confused - M22 PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Medium freigeben"); // if Marlin gets confused - M22
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z-Sonde außerhalb"); PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z-Sonde außerhalb");

View File

@@ -136,7 +136,7 @@ namespace Language_el {
PROGMEM Language_Str MSG_CONTRAST = _UxGT("Κοντράστ LCD"); PROGMEM Language_Str MSG_CONTRAST = _UxGT("Κοντράστ LCD");
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Αποθήκευση"); PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Αποθήκευση");
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Φόρτωση"); PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Φόρτωση");
PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Επαναφορά ασφαλούς αντιγράφου"); //SHORTEN PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Επαναφορά ασφαλούς αντιγράφου"); //SHORTEN
PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ανανέωση"); PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ανανέωση");
PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Οθόνη πληροφόρησης"); PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Οθόνη πληροφόρησης");
PROGMEM Language_Str MSG_PREPARE = _UxGT("Προετοιμασία"); PROGMEM Language_Str MSG_PREPARE = _UxGT("Προετοιμασία");
@@ -162,7 +162,7 @@ namespace Language_el {
PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Αυτόματη ανάσυρση"); PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Αυτόματη ανάσυρση");
PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Αλλαγή νήματος"); PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Αλλαγή νήματος");
PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Αλλαγή νήματος *"); PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Αλλαγή νήματος *");
PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Προετοιμασία κάρτας SD"); //SHORTEN PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Προετοιμασία κάρτας SD"); //SHORTEN
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Αλλαγή κάρτας SD"); PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Αλλαγή κάρτας SD");
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Διερεύνηση Z εκτός Επ.Εκτύπωσης"); //SHORTEN PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Διερεύνηση Z εκτός Επ.Εκτύπωσης"); //SHORTEN
PROGMEM Language_Str MSG_YX_UNHOMED = _UxGT("Επαναφορά Χ/Υ πριν από Ζ"); //SHORTEN PROGMEM Language_Str MSG_YX_UNHOMED = _UxGT("Επαναφορά Χ/Υ πριν από Ζ"); //SHORTEN

View File

@@ -138,7 +138,7 @@ namespace Language_el_gr {
PROGMEM Language_Str MSG_CONTRAST = _UxGT("Κοντράστ LCD"); PROGMEM Language_Str MSG_CONTRAST = _UxGT("Κοντράστ LCD");
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Αποθήκευση"); PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Αποθήκευση");
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Φόρτωση"); PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Φόρτωση");
PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Επαναφορά ασφαλούς αντιγράφου"); PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Επαναφορά ασφαλούς αντιγράφου");
PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ανανέωση"); PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ανανέωση");
PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Οθόνη πληροφόρησης"); PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Οθόνη πληροφόρησης");
PROGMEM Language_Str MSG_PREPARE = _UxGT("Προετοιμασία"); PROGMEM Language_Str MSG_PREPARE = _UxGT("Προετοιμασία");
@@ -164,7 +164,7 @@ namespace Language_el_gr {
PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Αυτόματη ανάσυρση"); PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Αυτόματη ανάσυρση");
PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Αλλαγή νήματος"); PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Αλλαγή νήματος");
PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Αλλαγή νήματος *"); PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Αλλαγή νήματος *");
PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Προετοιμασία κάρτας SD"); PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Προετοιμασία κάρτας SD");
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Αλλαγή κάρτας SD"); PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Αλλαγή κάρτας SD");
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Διερεύνηση Z εκτός κλίνης"); PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Διερεύνηση Z εκτός κλίνης");
PROGMEM Language_Str MSG_YX_UNHOMED = _UxGT("Επαναφορά Χ/Υ πριν από Ζ"); PROGMEM Language_Str MSG_YX_UNHOMED = _UxGT("Επαναφορά Χ/Υ πριν από Ζ");

View File

@@ -312,8 +312,11 @@ namespace Language_en {
PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD Contrast"); PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD Contrast");
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Store Settings"); PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Store Settings");
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Load Settings"); PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Load Settings");
PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Restore failsafe"); PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Restore Defaults");
PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Initialize EEPROM"); PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Initialize EEPROM");
PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("Err: EEPROM CRC");
PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("Err: EEPROM Index");
PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("Err: EEPROM Version");
PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Media Update"); PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Media Update");
PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Reset Printer"); PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Reset Printer");
PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Refresh"); PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Refresh");
@@ -370,7 +373,7 @@ namespace Language_en {
PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Unload Filament"); PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Unload Filament");
PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Unload Filament *"); PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Unload Filament *");
PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Unload All"); PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Unload All");
PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Init. Media"); PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Attach Media");
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Change Media"); PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Change Media");
PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Release Media"); PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Release Media");
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z Probe Past Bed"); PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z Probe Past Bed");

View File

@@ -284,7 +284,7 @@ namespace Language_es {
PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste LCD"); PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste LCD");
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Guardar EEPROM"); PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Guardar EEPROM");
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Cargar EEPROM"); PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Cargar EEPROM");
PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Rest. fábrica"); PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Rest. fábrica");
PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Inicializar EEPROM"); PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Inicializar EEPROM");
PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/USB"); PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/USB");
PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Resetear Impresora"); PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Resetear Impresora");
@@ -337,7 +337,7 @@ namespace Language_es {
PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Descargar filamento"); PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Descargar filamento");
PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Descargar fil. *"); PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Descargar fil. *");
PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Descargar todo"); PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Descargar todo");
PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Iniciar SD/USB"); PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Iniciar SD/USB");
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambiar SD/USB"); PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambiar SD/USB");
PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Lanzar SD/USB"); PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Lanzar SD/USB");
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z fuera cama"); PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z fuera cama");

View File

@@ -187,7 +187,7 @@ namespace Language_eu {
PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD kontrastea"); PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD kontrastea");
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Gorde memoria"); PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Gorde memoria");
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Kargatu memoria"); PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Kargatu memoria");
PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Larri. berriz."); PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Larri. berriz.");
PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("EEPROM-a hasieratu"); PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("EEPROM-a hasieratu");
PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Berriz kargatu"); PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Berriz kargatu");
PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Pantaila info"); PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Pantaila info");
@@ -221,7 +221,7 @@ namespace Language_eu {
PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Harizpia deskargatu"); PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Harizpia deskargatu");
PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Harizpia deskargatu *"); PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Harizpia deskargatu *");
PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Erabat deskargatu"); PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Erabat deskargatu");
PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Hasieratu SD-a"); PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Hasieratu SD-a");
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Aldatu txartela"); PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Aldatu txartela");
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z zunda kanpora"); PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z zunda kanpora");
PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Okertze faktorea"); PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Okertze faktorea");

View File

@@ -97,7 +97,7 @@ namespace Language_fi {
PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD kontrasti"); PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD kontrasti");
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Tallenna muistiin"); PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Tallenna muistiin");
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Lataa muistista"); PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Lataa muistista");
PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Palauta oletus"); PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Palauta oletus");
PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Päivitä"); PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Päivitä");
PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Seuraa"); PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Seuraa");
PROGMEM Language_Str MSG_PREPARE = _UxGT("Valmistele"); PROGMEM Language_Str MSG_PREPARE = _UxGT("Valmistele");

View File

@@ -282,7 +282,7 @@ namespace Language_fr {
PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste LCD"); PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste LCD");
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Enregistrer config."); PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Enregistrer config.");
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Charger config."); PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Charger config.");
PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Restaurer défauts"); PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Restaurer défauts");
PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Initialiser EEPROM"); PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Initialiser EEPROM");
PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("MaJ Firmware SD"); PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("MaJ Firmware SD");
PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("RaZ imprimante"); PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("RaZ imprimante");
@@ -340,7 +340,7 @@ namespace Language_fr {
PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Retrait filament"); PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Retrait filament");
PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Retrait filament *"); PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Retrait filament *");
PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Retirer tout"); PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Retirer tout");
PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Charger le média"); PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Charger le média");
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Actualiser média"); PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Actualiser média");
PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Retirer le média"); PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Retirer le média");
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonde Z hors lit"); PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonde Z hors lit");

View File

@@ -117,7 +117,7 @@ namespace Language_gl {
PROGMEM Language_Str MSG_CONTRAST = _UxGT("Constraste LCD"); PROGMEM Language_Str MSG_CONTRAST = _UxGT("Constraste LCD");
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Gardar en memo."); PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Gardar en memo.");
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Cargar de memo."); PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Cargar de memo.");
PROGMEM Language_Str MSG_RESTORE_FAILSAFE = _UxGT("Cargar de firm."); PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Cargar de firm.");
PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Volver a cargar"); PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Volver a cargar");
PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Monitorizacion"); PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Monitorizacion");
PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar"); PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar");
@@ -143,7 +143,7 @@ namespace Language_gl {
PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Retraccion auto."); PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Retraccion auto.");
PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambiar filamen."); PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambiar filamen.");
PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Cambiar filamen. *"); PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Cambiar filamen. *");
PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("Iniciando SD"); PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Iniciando SD");
PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambiar SD"); PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambiar SD");
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda-Z sen cama"); PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda-Z sen cama");
PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Comprobar BLTouch"); PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Comprobar BLTouch");

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