Skip to content

Commit 93d749c

Browse files
committed
Merge branch 'bugfix-2.1.x' into pr/27748
2 parents c3a9adf + ac07ff5 commit 93d749c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+315
-259
lines changed

Marlin/Configuration.h

+44-22
Original file line numberDiff line numberDiff line change
@@ -1540,6 +1540,20 @@
15401540
#define PROBE_DEPLOY_FEEDRATE (133*60) // (mm/min) Probe deploy speed
15411541
#define PROBE_STOW_FEEDRATE (133*60) // (mm/min) Probe stow speed
15421542

1543+
/**
1544+
* Magnetically Mounted Probe with a Servo mechanism
1545+
* Probe Deploy and Stow both follow the same basic sequence:
1546+
* - Rotate the SERVO to its Deployed angle
1547+
* - Perform XYZ moves to deploy or stow the PROBE
1548+
* - Rotate the SERVO to its Stowed angle
1549+
*/
1550+
//#define MAG_MOUNTED_PROBE_SERVO_NR 0 // Servo Number for this probe
1551+
#ifdef MAG_MOUNTED_PROBE_SERVO_NR
1552+
#define MAG_MOUNTED_PROBE_SERVO_ANGLES { 90, 0 } // Servo Angles for Deployed, Stowed
1553+
#define MAG_MOUNTED_PRE_DEPLOY { PROBE_DEPLOY_FEEDRATE, { 15, 160, 30 } } // Safe position for servo activation
1554+
#define MAG_MOUNTED_PRE_STOW { PROBE_DEPLOY_FEEDRATE, { 15, 160, 30 } } // Safe position for servo deactivation
1555+
#endif
1556+
15431557
#define MAG_MOUNTED_DEPLOY_1 { PROBE_DEPLOY_FEEDRATE, { 245, 114, 30 } } // Move to side Dock & Attach probe
15441558
#define MAG_MOUNTED_DEPLOY_2 { PROBE_DEPLOY_FEEDRATE, { 210, 114, 30 } } // Move probe off dock
15451559
#define MAG_MOUNTED_DEPLOY_3 { PROBE_DEPLOY_FEEDRATE, { 0, 0, 0 } } // Extra move if needed
@@ -2899,13 +2913,15 @@
28992913
//
29002914
//#define MAKEBOARD_MINI_2_LINE_DISPLAY_1602
29012915

2902-
//
2903-
// ANET and Tronxy 20x4 Controller
2904-
//
2905-
//#define ZONESTAR_LCD // Requires ADC_KEYPAD_PIN to be assigned to an analog pin.
2906-
// This LCD is known to be susceptible to electrical interference
2907-
// which scrambles the display. Pressing any button clears it up.
2908-
// This is a LCD2004 display with 5 analog buttons.
2916+
/**
2917+
* ANET and Tronxy 20x4 Controller
2918+
* LCD2004 display with 5 analog buttons.
2919+
*
2920+
* NOTE: Requires ADC_KEYPAD_PIN to be assigned to an analog pin.
2921+
* This LCD is known to be susceptible to electrical interference which
2922+
* scrambles the display. Press any button to clear it up.
2923+
*/
2924+
//#define ZONESTAR_LCD
29092925

29102926
//
29112927
// Generic 16x2, 16x4, 20x2, or 20x4 character-based LCD.
@@ -3542,22 +3558,26 @@
35423558
// :[1,2,3,4,5,6,7,8]
35433559
//#define NUM_M106_FANS 1
35443560

3545-
// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
3546-
// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
3547-
// is too low, you should also increment SOFT_PWM_SCALE.
3561+
/**
3562+
* Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
3563+
* which is not as annoying as with the hardware PWM. On the other hand, if this frequency
3564+
* is too low, you should also increment SOFT_PWM_SCALE.
3565+
*/
35483566
//#define FAN_SOFT_PWM
35493567

3550-
// Incrementing this by 1 will double the software PWM frequency,
3551-
// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
3552-
// However, control resolution will be halved for each increment;
3553-
// at zero value, there are 128 effective control positions.
3554-
// :[0,1,2,3,4,5,6,7]
3568+
/**
3569+
* Incrementing this by 1 will double the software PWM frequency, affecting heaters, and
3570+
* the fan if FAN_SOFT_PWM is enabled. However, control resolution will be halved for each
3571+
* increment; at zero value, there are 128 effective control positions.
3572+
* :[0,1,2,3,4,5,6,7]
3573+
*/
35553574
#define SOFT_PWM_SCALE 0
35563575

3557-
// If SOFT_PWM_SCALE is set to a value higher than 0, dithering can
3558-
// be used to mitigate the associated resolution loss. If enabled,
3559-
// some of the PWM cycles are stretched so on average the desired
3560-
// duty cycle is attained.
3576+
/**
3577+
* If SOFT_PWM_SCALE is set to a value higher than 0, dithering can be used to mitigate the
3578+
* associated resolution loss. If enabled, some of the PWM cycles are stretched so on average
3579+
* the desired duty cycle is attained.
3580+
*/
35613581
//#define SOFT_PWM_DITHER
35623582

35633583
// @section extras
@@ -3567,9 +3587,11 @@
35673587

35683588
// @section lights
35693589

3570-
// Temperature status LEDs that display the hotend and bed temperature.
3571-
// If all hotends, bed temperature, and target temperature are under 54C
3572-
// then the BLUE led is on. Otherwise the RED led is on. (1C hysteresis)
3590+
/**
3591+
* Temperature status LEDs that display the hotend and bed temperature.
3592+
* If all hotends, bed temperature, and target temperature are under 54C
3593+
* the BLUE led is on. Otherwise the RED led is on. (1C hysteresis)
3594+
*/
35733595
//#define TEMP_STAT_LEDS
35743596

35753597
// Support for BlinkM/CyzRgb

Marlin/Configuration_adv.h

+35-28
Original file line numberDiff line numberDiff line change
@@ -1419,24 +1419,24 @@
14191419
#define MICROSTEP_MODES { 16, 16, 16, 16, 16, 16 } // [1,2,4,8,16]
14201420

14211421
/**
1422-
* @section stepper motor current
1422+
* @section stepper motor current
14231423
*
1424-
* Some boards have a means of setting the stepper motor current via firmware.
1424+
* Some boards have a means of setting the stepper motor current via firmware.
14251425
*
1426-
* The power on motor currents are set by:
1427-
* PWM_MOTOR_CURRENT - used by MINIRAMBO & ULTIMAIN_2
1428-
* known compatible chips: A4982
1429-
* DIGIPOT_MOTOR_CURRENT - used by BQ_ZUM_MEGA_3D, RAMBO & SCOOVO_X9H
1430-
* known compatible chips: AD5206
1431-
* DAC_MOTOR_CURRENT_DEFAULT - used by PRINTRBOARD_REVF & RIGIDBOARD_V2
1432-
* known compatible chips: MCP4728
1433-
* DIGIPOT_I2C_MOTOR_CURRENTS - used by 5DPRINT, AZTEEG_X3_PRO, AZTEEG_X5_MINI_WIFI, MIGHTYBOARD_REVE
1434-
* known compatible chips: MCP4451, MCP4018
1426+
* The power on motor currents are set by:
1427+
* PWM_MOTOR_CURRENT - used by MINIRAMBO & ULTIMAIN_2
1428+
* known compatible chips: A4982
1429+
* DIGIPOT_MOTOR_CURRENT - used by BQ_ZUM_MEGA_3D, RAMBO & SCOOVO_X9H
1430+
* known compatible chips: AD5206
1431+
* DAC_MOTOR_CURRENT_DEFAULT - used by PRINTRBOARD_REVF & RIGIDBOARD_V2
1432+
* known compatible chips: MCP4728
1433+
* DIGIPOT_I2C_MOTOR_CURRENTS - used by 5DPRINT, AZTEEG_X3_PRO, AZTEEG_X5_MINI_WIFI, MIGHTYBOARD_REVE
1434+
* known compatible chips: MCP4451, MCP4018
14351435
*
1436-
* Motor currents can also be set by M907 - M910 and by the LCD.
1437-
* M907 - applies to all.
1438-
* M908 - BQ_ZUM_MEGA_3D, RAMBO, PRINTRBOARD_REVF, RIGIDBOARD_V2 & SCOOVO_X9H
1439-
* M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2
1436+
* Motor currents can also be set by M907 - M910 and by the LCD.
1437+
* M907 - applies to all.
1438+
* M908 - BQ_ZUM_MEGA_3D, RAMBO, PRINTRBOARD_REVF, RIGIDBOARD_V2 & SCOOVO_X9H
1439+
* M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2
14401440
*/
14411441
//#define PWM_MOTOR_CURRENT { 1300, 1300, 1250 } // Values in milliamps
14421442
//#define DIGIPOT_MOTOR_CURRENT { 135,135,135,135,135 } // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
@@ -1619,6 +1619,10 @@
16191619
//#define SOUND_MENU_ITEM // Add a mute option to the LCD menu
16201620
#define SOUND_ON_DEFAULT // Buzzer/speaker default enabled state
16211621

1622+
#if ENABLED(U8GLIB_SSD1309)
1623+
//#define LCD_DOUBLE_BUFFER // Optimize display updates. Costs ~1K of SRAM.
1624+
#endif
1625+
16221626
#if HAS_WIRED_LCD
16231627
//#define DOUBLE_LCD_FRAMERATE // Not recommended for slow boards.
16241628
#endif
@@ -2634,19 +2638,23 @@
26342638
#define MAX_CMD_SIZE 96
26352639
#define BUFSIZE 4
26362640

2637-
// Transmission to Host Buffer Size
2638-
// To save 386 bytes of flash (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
2639-
// To buffer a simple "ok" you need 4 bytes.
2640-
// For ADVANCED_OK (M105) you need 32 bytes.
2641-
// For debug-echo: 128 bytes for the optimal speed.
2642-
// Other output doesn't need to be that speedy.
2643-
// :[0, 2, 4, 8, 16, 32, 64, 128, 256]
2641+
/**
2642+
* Host Transmit Buffer Size
2643+
* - Costs 386 bytes of flash and TX_BUFFER_SIZE+3 bytes of SRAM (if not 0).
2644+
* - 4 bytes required to buffer a simple "ok".
2645+
* - 32 bytes for ADVANCED_OK (M105).
2646+
* - 128 bytes for the optimal speed of 'debug-echo:'
2647+
* - Other output doesn't need to be that speedy.
2648+
* :[0, 2, 4, 8, 16, 32, 64, 128, 256]
2649+
*/
26442650
#define TX_BUFFER_SIZE 0
26452651

2646-
// Host Receive Buffer Size
2647-
// Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough.
2648-
// To use flow control, set this buffer size to at least 1024 bytes.
2649-
// :[0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
2652+
/**
2653+
* Host Receive Buffer Size
2654+
* Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough.
2655+
* To use flow control, set this buffer size to at least 1024 bytes.
2656+
* :[0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
2657+
*/
26502658
//#define RX_BUFFER_SIZE 1024
26512659

26522660
#if RX_BUFFER_SIZE >= 1024
@@ -3913,7 +3921,7 @@
39133921
/**
39143922
* Extra options for the M114 "Current Position" report
39153923
*/
3916-
//#define M114_DETAIL // Use 'M114` for details to check planner calculations
3924+
//#define M114_DETAIL // Use 'M114 D' for details to check planner calculations
39173925
//#define M114_REALTIME // Real current position based on forward kinematics
39183926
//#define M114_LEGACY // M114 used to synchronize on every call. Enable if needed.
39193927

@@ -3960,7 +3968,6 @@
39603968
* Spend 28 bytes of SRAM to optimize the G-code parser
39613969
*/
39623970
#define FASTER_GCODE_PARSER
3963-
39643971
#if ENABLED(FASTER_GCODE_PARSER)
39653972
//#define GCODE_QUOTED_STRINGS // Support for quoted string parameters
39663973
#endif

Marlin/Version.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
* here we define this default string as the date where the latest release
4242
* version was tagged.
4343
*/
44-
//#define STRING_DISTRIBUTION_DATE "2025-03-16"
44+
//#define STRING_DISTRIBUTION_DATE "2025-03-19"
4545

4646
/**
4747
* The protocol for communication to the host. Protocol indicates communication

Marlin/src/gcode/lcd/M145.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
* S<material>
3838
* H<hotend temp>
3939
* B<bed temp>
40+
* C<chamber temp>
4041
* F<fan speed>
4142
*/
4243
void GcodeSuite::M145() {
@@ -53,6 +54,10 @@ void GcodeSuite::M145() {
5354
if (parser.seenval('B'))
5455
mat.bed_temp = constrain(parser.value_int(), BED_MINTEMP, BED_MAX_TARGET);
5556
#endif
57+
#if HAS_HEATED_CHAMBER
58+
if (parser.seenval('C'))
59+
mat.chamber_temp = constrain(parser.value_int(), CHAMBER_MINTEMP, CHAMBER_MAX_TARGET);
60+
#endif
5661
#if HAS_FAN
5762
if (parser.seenval('F'))
5863
mat.fan_speed = constrain(parser.value_int(), 0, 255);

Marlin/src/gcode/temp/M141_M191.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,16 @@
3939
*/
4040
void GcodeSuite::M141() {
4141
if (DEBUGGING(DRYRUN)) return;
42+
// Accept 'I' if temperature presets are defined
43+
#if HAS_PREHEAT
44+
if (parser.seenval('I')) {
45+
const uint8_t index = parser.value_byte();
46+
thermalManager.setTargetChamber(ui.material_preset[_MIN(index, PREHEAT_COUNT - 1)].chamber_temp);
47+
return;
48+
}
49+
#endif
4250
if (parser.seenval('S')) {
4351
thermalManager.setTargetChamber(parser.value_celsius());
44-
4552
#if ENABLED(PRINTJOB_TIMER_AUTOSTART)
4653
/**
4754
* Stop the timer at the end of print. Hotend, bed target, and chamber

Marlin/src/inc/Conditionals-3-etc.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,10 @@
135135
#ifdef Z_PROBE_SERVO_NR
136136
#define HAS_Z_SERVO_PROBE 1
137137
#endif
138-
#if ANY(HAS_Z_SERVO_PROBE, SWITCHING_EXTRUDER, SWITCHING_NOZZLE)
138+
#ifdef MAG_MOUNTED_PROBE_SERVO_NR
139+
#define HAS_MAG_MOUNTED_SERVO_PROBE 1
140+
#endif
141+
#if ANY(HAS_Z_SERVO_PROBE, HAS_MAG_MOUNTED_SERVO_PROBE, SWITCHING_EXTRUDER, SWITCHING_NOZZLE)
139142
#define HAS_SERVO_ANGLES 1
140143
#endif
141144
#if !HAS_SERVO_ANGLES

Marlin/src/inc/Conditionals-4-adv.h

+4
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@
5353
#undef NUM_SERVOS
5454
#define NUM_SERVOS INCREMENT(Z_PROBE_SERVO_NR)
5555
#endif
56+
#if HAS_MAG_MOUNTED_SERVO_PROBE && NUM_SERVOS <= MAG_MOUNTED_PROBE_SERVO_NR
57+
#undef NUM_SERVOS
58+
#define NUM_SERVOS INCREMENT(MAG_MOUNTED_PROBE_SERVO_NR)
59+
#endif
5660
#if ENABLED(CHAMBER_VENT) && NUM_SERVOS <= CHAMBER_VENT_SERVO_NR
5761
#undef NUM_SERVOS
5862
#define NUM_SERVOS INCREMENT(CHAMBER_VENT_SERVO_NR)

Marlin/src/inc/SanityCheck.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -982,7 +982,7 @@ static_assert(NUM_SERVOS <= NUM_SERVO_PLUGS, "NUM_SERVOS (or some servo index) i
982982
/**
983983
* Servo deactivation depends on servo endstops, switching nozzle, or switching extruder
984984
*/
985-
#if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) && NONE(HAS_Z_SERVO_PROBE, POLARGRAPH) && !defined(SWITCHING_NOZZLE_SERVO_NR) && !defined(SWITCHING_EXTRUDER_SERVO_NR) && !defined(SWITCHING_TOOLHEAD_SERVO_NR)
985+
#if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) && NONE(HAS_Z_SERVO_PROBE, POLARGRAPH) && !defined(SWITCHING_NOZZLE_SERVO_NR) && !defined(SWITCHING_EXTRUDER_SERVO_NR) && !defined(SWITCHING_TOOLHEAD_SERVO_NR) && !defined(MAG_MOUNTED_PROBE_SERVO_NR)
986986
#error "Z_PROBE_SERVO_NR, switching nozzle, switching toolhead, switching extruder, or POLARGRAPH is required for DEACTIVATE_SERVOS_AFTER_MOVE."
987987
#endif
988988

Marlin/src/inc/Version.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
* version was tagged.
4343
*/
4444
#ifndef STRING_DISTRIBUTION_DATE
45-
#define STRING_DISTRIBUTION_DATE "2025-03-16"
45+
#define STRING_DISTRIBUTION_DATE "2025-03-19"
4646
#endif
4747

4848
/**

Marlin/src/lcd/dogm/marlinui_DOGM.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@
201201

202202
// Generic support for SSD1309 OLED I2C LCDs
203203

204-
#define U8G_CLASS U8GLIB_SSD1309_128X64
204+
#define U8G_CLASS TERN(LCD_DOUBLE_BUFFER, U8GLIB_SSD1309_128X64_F, U8GLIB_SSD1309_128X64)
205205
#define U8G_PARAM (U8G_I2C_OPT_NONE | U8G_I2C_OPT_FAST) // I2C
206206

207207
#elif ENABLED(U8GLIB_SSD1306)

Marlin/src/lcd/dogm/u8g/u8g_dev_tft_upscale_from_128x64.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,7 @@ U8G_PB_DEV(u8g_dev_tft_320x240_upscale_from_128x64, WIDTH, HEIGHT, PAGE_HEIGHT,
542542
tftio.set_window(TFT_PIXEL_OFFSET_X, TFT_PIXEL_OFFSET_Y, X_HI, Y_HI);
543543
do {
544544
set_font(FONT_MENU);
545+
lcd_put_u8str(0, 7, GET_TEXT_F(MSG_TOUCH_CALIBRATION));
545546
lcd_put_u8str(0, LCD_PIXEL_HEIGHT / 2, str);
546547
} while (u8g.nextPage());
547548
drawing_screen = false;

Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/scripts/svg2cpp.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ def handle_endtag(self, tag):
296296
parser.add_argument('--layer', help='only include layers which have this string in their names')
297297
args = parser.parse_args()
298298

299-
f = open(args.filename, "r")
299+
f = open(args.filename, "r", encoding='utf-8')
300300
data = f.read()
301301

302302
# First pass to grab viewbox

Marlin/src/lcd/extui/ui_api.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,9 @@ namespace ExtUI {
811811
#if HAS_HEATED_BED
812812
uint16_t getMaterial_preset_B(const uint16_t index) { return ui.material_preset[index].bed_temp; }
813813
#endif
814+
#if HAS_HEATED_CHAMBER
815+
uint16_t getMaterial_preset_C(const uint16_t index) { return ui.material_preset[index].chamber_temp; }
816+
#endif
814817
#endif
815818

816819
feedRate_t getFeedrate_mm_s() { return feedrate_mm_s; }

Marlin/src/lcd/extui/ui_api.h

+3
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,9 @@ namespace ExtUI {
214214
#if HAS_HEATED_BED
215215
uint16_t getMaterial_preset_B(const uint16_t);
216216
#endif
217+
#if HAS_HEATED_CHAMBER
218+
uint16_t getMaterial_preset_C(const uint16_t);
219+
#endif
217220
#endif
218221

219222
// IDEX Machine Mode

Marlin/src/lcd/language/language_en.h

+8-4
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ namespace LanguageNarrow_en {
155155
LSTR MSG_PREHEAT_M_END_E = _UxGT("Preheat $ End ~");
156156
LSTR MSG_PREHEAT_M_ALL = _UxGT("Preheat $ All");
157157
LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Preheat $ Bed");
158+
LSTR MSG_PREHEAT_M_CHAMBER = _UxGT("Preheat $ Chmb");
158159
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Preheat $ Conf");
159160

160161
LSTR MSG_PREHEAT_HOTEND = _UxGT("Preheat Hotend");
@@ -924,10 +925,11 @@ namespace LanguageNarrow_en {
924925

925926
LSTR MSG_SOUND = _UxGT("Sound");
926927

927-
LSTR MSG_TOP_LEFT = _UxGT("Top Left");
928-
LSTR MSG_BOTTOM_LEFT = _UxGT("Bottom Left");
929-
LSTR MSG_TOP_RIGHT = _UxGT("Top Right");
930-
LSTR MSG_BOTTOM_RIGHT = _UxGT("Bottom Right");
928+
LSTR MSG_TOP_LEFT = _UxGT("Touch Top Left");
929+
LSTR MSG_BOTTOM_LEFT = _UxGT("Touch Bottom Left");
930+
LSTR MSG_TOP_RIGHT = _UxGT("Touch Top Right");
931+
LSTR MSG_BOTTOM_RIGHT = _UxGT("Touch Bottom Right");
932+
LSTR MSG_TOUCH_CALIBRATION = _UxGT("Touch Calibration");
931933
LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Calibration Completed");
932934
LSTR MSG_CALIBRATION_FAILED = _UxGT("Calibration Failed");
933935

@@ -1108,6 +1110,8 @@ namespace LanguageWide_en {
11081110
LSTR MSG_HOMING_FEEDRATE_Y = _UxGT("Y Homing Feedrate");
11091111
LSTR MSG_HOMING_FEEDRATE_Z = _UxGT("Z Homing Feedrate");
11101112
LSTR MSG_EEPROM_INITIALIZED = _UxGT("Default Settings Restored");
1113+
LSTR MSG_PREHEAT_M_CHAMBER = _UxGT("Preheat $ Chamber");
1114+
LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Preheat $ Config");
11111115
#endif
11121116
}
11131117

0 commit comments

Comments
 (0)