Compare commits
50 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
5b7b065b96 | ||
|
a739af823f | ||
|
493eb446b7 | ||
|
1b45b3802a | ||
|
7898307d78 | ||
|
8da8aa140f | ||
|
4572af2bce | ||
|
6dc17f0e6e | ||
|
3fcf3f69ca | ||
|
a9fd2769f3 | ||
|
9adaf92674 | ||
|
e75c3b6c54 | ||
|
61f2bb1228 | ||
|
d1502f74ea | ||
|
83f9413196 | ||
|
cdc3e18d99 | ||
|
55a6315862 | ||
|
cf447a5442 | ||
|
7597b4fb40 | ||
|
7cd0f2a32a | ||
|
4dae5890e9 | ||
|
738ae4be33 | ||
|
e573611021 | ||
|
f60965a107 | ||
|
3995e8373c | ||
|
ddc82b84e2 | ||
|
87a943756a | ||
|
8e28731f96 | ||
|
cdbd438a04 | ||
|
3220c49f1b | ||
|
94e67a036a | ||
|
c977e82074 | ||
|
9878a5ab58 | ||
|
2de914c38c | ||
|
49b05ba989 | ||
|
85fa8c55c9 | ||
|
57eef65d9c | ||
|
894c954e8f | ||
|
046bac6769 | ||
|
765720e98b | ||
|
26a244325b | ||
|
f7d28ce1d6 | ||
|
c85633b47f | ||
|
6861b1ec82 | ||
|
003cb20b9f | ||
|
f1f622de01 | ||
|
dbb8f3db09 | ||
|
5d7c72db5a | ||
|
755adb8973 | ||
|
0977429138 |
4
.github/workflows/check-pr.yml
vendored
4
.github/workflows/check-pr.yml
vendored
@@ -20,10 +20,8 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: peter-evans/close-pull@v1
|
||||
- uses: superbrothers/close-pull-request@v3
|
||||
with:
|
||||
token: ${{ github.token }}
|
||||
delete-branch: false
|
||||
comment: >
|
||||
Thanks for your contribution! Unfortunately we can't accept PRs directed at release branches. We make patches to the bugfix branches and only later do we push them out as releases.
|
||||
|
||||
|
@@ -105,21 +105,9 @@
|
||||
#define SERIAL_PORT 0
|
||||
|
||||
/**
|
||||
* Select a secondary serial port on the board to use for communication with the host.
|
||||
* Currently Ethernet (-2) is only supported on Teensy 4.1 boards.
|
||||
* :[-2, -1, 0, 1, 2, 3, 4, 5, 6, 7]
|
||||
*/
|
||||
//#define SERIAL_PORT_2 -1
|
||||
|
||||
/**
|
||||
* Select a third serial port on the board to use for communication with the host.
|
||||
* Currently only supported for AVR, DUE, LPC1768/9 and STM32/STM32F1
|
||||
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
|
||||
*/
|
||||
//#define SERIAL_PORT_3 1
|
||||
|
||||
/**
|
||||
* This setting determines the communication speed of the printer.
|
||||
* Serial Port Baud Rate
|
||||
* This is the default communication speed for all serial ports.
|
||||
* Set the baud rate defaults for additional serial ports below.
|
||||
*
|
||||
* 250000 works in most cases, but you might try a lower speed if
|
||||
* you commonly experience drop-outs during host printing.
|
||||
@@ -128,6 +116,23 @@
|
||||
* :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000]
|
||||
*/
|
||||
#define BAUDRATE 250000
|
||||
//#define BAUD_RATE_GCODE // Enable G-code M575 to set the baud rate
|
||||
|
||||
/**
|
||||
* Select a secondary serial port on the board to use for communication with the host.
|
||||
* Currently Ethernet (-2) is only supported on Teensy 4.1 boards.
|
||||
* :[-2, -1, 0, 1, 2, 3, 4, 5, 6, 7]
|
||||
*/
|
||||
//#define SERIAL_PORT_2 -1
|
||||
//#define BAUDRATE_2 250000 // Enable to override BAUDRATE
|
||||
|
||||
/**
|
||||
* Select a third serial port on the board to use for communication with the host.
|
||||
* Currently only supported for AVR, DUE, LPC1768/9 and STM32/STM32F1
|
||||
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
|
||||
*/
|
||||
//#define SERIAL_PORT_3 1
|
||||
//#define BAUDRATE_3 250000 // Enable to override BAUDRATE
|
||||
|
||||
// Enable the Bluetooth serial interface on AT90USB devices
|
||||
//#define BLUETOOTH
|
||||
@@ -2685,7 +2690,7 @@
|
||||
//#define NEOPIXEL_LED
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
#define NEOPIXEL_TYPE NEO_GRBW // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
|
||||
#define NEOPIXEL_PIN 4 // LED driving pin
|
||||
//#define NEOPIXEL_PIN 4 // LED driving pin
|
||||
//#define NEOPIXEL2_TYPE NEOPIXEL_TYPE
|
||||
//#define NEOPIXEL2_PIN 5
|
||||
#define NEOPIXEL_PIXELS 30 // Number of LEDs in the strip. (Longest strip when NEOPIXEL2_SEPARATE is disabled.)
|
||||
@@ -2703,10 +2708,11 @@
|
||||
//#define NEOPIXEL2_INSERIES // Default behavior is NeoPixel 2 in parallel
|
||||
#endif
|
||||
|
||||
// Use a single NeoPixel LED for static (background) lighting
|
||||
//#define NEOPIXEL_BKGD_LED_INDEX 0 // Index of the LED to use
|
||||
//#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 } // R, G, B, W
|
||||
//#define NEOPIXEL_BKGD_ALWAYS_ON // Keep the backlight on when other NeoPixels are off
|
||||
// Use some of the NeoPixel LEDs for static (background) lighting
|
||||
//#define NEOPIXEL_BKGD_INDEX_FIRST 0 // Index of the first background LED
|
||||
//#define NEOPIXEL_BKGD_INDEX_LAST 5 // Index of the last background LED
|
||||
//#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 } // R, G, B, W
|
||||
//#define NEOPIXEL_BKGD_ALWAYS_ON // Keep the backlight on when other NeoPixels are off
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@@ -1301,6 +1301,8 @@
|
||||
|
||||
//#define BROWSE_MEDIA_ON_INSERT // Open the file browser when media is inserted
|
||||
|
||||
//#define MEDIA_MENU_AT_TOP // Force the media menu to be listed on the top of the main menu
|
||||
|
||||
#define EVENT_GCODE_SD_ABORT "G28XY" // G-code to run on SD Abort Print (e.g., "G28XY" or "G27")
|
||||
|
||||
#if ENABLED(PRINTER_EVENT_LEDS)
|
||||
@@ -2114,9 +2116,6 @@
|
||||
//#define SERIAL_XON_XOFF
|
||||
#endif
|
||||
|
||||
// Add M575 G-code to change the baud rate
|
||||
//#define BAUD_RATE_GCODE
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
// Enable this option to collect and display the maximum
|
||||
// RX queue usage after transferring a file to SD.
|
||||
|
@@ -28,7 +28,7 @@
|
||||
/**
|
||||
* Marlin release version identifier
|
||||
*/
|
||||
//#define SHORT_BUILD_VERSION "2.0.8.1"
|
||||
//#define SHORT_BUILD_VERSION "2.0.8.2"
|
||||
|
||||
/**
|
||||
* 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
|
||||
* version was tagged.
|
||||
*/
|
||||
//#define STRING_DISTRIBUTION_DATE "2021-05-15"
|
||||
//#define STRING_DISTRIBUTION_DATE "2021-05-29"
|
||||
|
||||
/**
|
||||
* Defines a generic printer name to be output to the LCD after booting Marlin.
|
||||
|
@@ -38,7 +38,7 @@
|
||||
// portModeRegister takes a different argument
|
||||
#define digitalPinToTimer_DEBUG(p) digitalPinToTimer(p)
|
||||
#define digitalPinToBitMask_DEBUG(p) digitalPinToBitMask(p)
|
||||
#define digitalPinToPort_DEBUG(p) digitalPinToPort_Teensy(p)
|
||||
#define digitalPinToPort_DEBUG(p) digitalPinToPort(p)
|
||||
#define GET_PINMODE(pin) (*portModeRegister(pin) & digitalPinToBitMask_DEBUG(pin))
|
||||
|
||||
#elif AVR_ATmega2560_FAMILY_PLUS_70 // So we can access/display all the pins on boards using more than 70
|
||||
|
@@ -144,7 +144,7 @@ static_assert(DISABLED(BAUD_RATE_GCODE), "BAUD_RATE_GCODE is not yet supported o
|
||||
#error "Serial port pins (2) conflict with Z4 pins!"
|
||||
#elif ANY_RX(2, X_DIR_PIN, Y_DIR_PIN)
|
||||
#error "Serial port pins (2) conflict with other pins!"
|
||||
#elif Y_HOME_DIR < 0 && IS_TX2(Y_STOP_PIN)
|
||||
#elif Y_HOME_TO_MIN && IS_TX2(Y_STOP_PIN)
|
||||
#error "Serial port pins (2) conflict with Y endstop pin!"
|
||||
#elif HAS_CUSTOM_PROBE_PIN && IS_TX2(Z_MIN_PROBE_PIN)
|
||||
#error "Serial port pins (2) conflict with probe pin!"
|
||||
|
@@ -80,7 +80,7 @@ typedef uint16_t hal_timer_t;
|
||||
//#define TEMP_TIMER_NUM 4 // 2->4, Timer 2 for Stepper Current PWM
|
||||
#endif
|
||||
|
||||
#if MB(BTT_SKR_MINI_E3_V1_0, BTT_SKR_E3_DIP, BTT_SKR_MINI_E3_V1_2, MKS_ROBIN_LITE)
|
||||
#if MB(BTT_SKR_MINI_E3_V1_0, BTT_SKR_E3_DIP, BTT_SKR_MINI_E3_V1_2, MKS_ROBIN_LITE, MKS_ROBIN_E3D, MKS_ROBIN_E3)
|
||||
// SKR Mini E3 boards use PA8 as FAN_PIN, so TIMER 1 is used for Fan PWM.
|
||||
#ifdef STM32_HIGH_DENSITY
|
||||
#define SERVO0_TIMER_NUM 8 // tone.cpp uses Timer 4
|
||||
|
@@ -1073,11 +1073,17 @@ void setup() {
|
||||
while (!MYSERIAL1.connected() && PENDING(millis(), serial_connect_timeout)) { /*nada*/ }
|
||||
|
||||
#if HAS_MULTI_SERIAL && !HAS_ETHERNET
|
||||
MYSERIAL2.begin(BAUDRATE);
|
||||
#ifndef BAUDRATE_2
|
||||
#define BAUDRATE_2 BAUDRATE
|
||||
#endif
|
||||
MYSERIAL2.begin(BAUDRATE_2);
|
||||
serial_connect_timeout = millis() + 1000UL;
|
||||
while (!MYSERIAL2.connected() && PENDING(millis(), serial_connect_timeout)) { /*nada*/ }
|
||||
#ifdef SERIAL_PORT_3
|
||||
MYSERIAL3.begin(BAUDRATE);
|
||||
#ifndef BAUDRATE_3
|
||||
#define BAUDRATE_3 BAUDRATE
|
||||
#endif
|
||||
MYSERIAL3.begin(BAUDRATE_3);
|
||||
serial_connect_timeout = millis() + 1000UL;
|
||||
while (!MYSERIAL3.connected() && PENDING(millis(), serial_connect_timeout)) { /*nada*/ }
|
||||
#endif
|
||||
@@ -1488,7 +1494,7 @@ void setup() {
|
||||
#endif
|
||||
|
||||
#if HAS_TRINAMIC_CONFIG && DISABLED(PSU_DEFAULT_OFF)
|
||||
SETUP_RUN(test_tmc_connection(true, true, true, true));
|
||||
SETUP_RUN(test_tmc_connection());
|
||||
#endif
|
||||
|
||||
#if HAS_DRIVER_SAFE_POWER_PROTECT
|
||||
|
@@ -159,6 +159,7 @@
|
||||
#define BOARD_PICA_REVB 1324 // PICA Shield (original version)
|
||||
#define BOARD_PICA 1325 // PICA Shield (rev C or later)
|
||||
#define BOARD_INTAMSYS40 1326 // Intamsys 4.0 (Funmat HT)
|
||||
#define BOARD_MALYAN_M180 1327 // Malyan M180 Mainboard Version 2 (no display function, direct gcode only)
|
||||
|
||||
//
|
||||
// ATmega1281, ATmega2561
|
||||
|
@@ -44,6 +44,6 @@ private:
|
||||
SERIAL_ECHOPGM_P(the_msg);
|
||||
}
|
||||
SERIAL_CHAR(' ');
|
||||
print_xyz(current_position);
|
||||
print_pos(current_position);
|
||||
}
|
||||
};
|
||||
|
@@ -140,25 +140,7 @@
|
||||
#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_PROBE_EN "probe_en"
|
||||
#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: "
|
||||
@@ -277,14 +259,30 @@
|
||||
#define STR_REMINDER_SAVE_SETTINGS "Remember to save!"
|
||||
#define STR_PASSWORD_SET "Password is "
|
||||
|
||||
// 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)
|
||||
//
|
||||
// Endstop Names used by Endstops::report_states
|
||||
//
|
||||
#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_PROBE_EN "probe_en"
|
||||
#define STR_FILAMENT_RUNOUT_SENSOR "filament"
|
||||
|
||||
// General axis names
|
||||
#define STR_X "X"
|
||||
#define STR_Y "Y"
|
||||
#define STR_Z "Z"
|
||||
@@ -386,6 +384,14 @@
|
||||
#define LCD_STR_E6 "E" LCD_STR_N6
|
||||
#define LCD_STR_E7 "E" LCD_STR_N7
|
||||
|
||||
// Include localized 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)
|
||||
|
||||
// Use superscripts, if possible. Evaluated at point of use.
|
||||
#define SUPERSCRIPT_TWO TERN(NOT_EXTENDED_ISO10646_1_5X7, "^2", "²")
|
||||
#define SUPERSCRIPT_THREE TERN(NOT_EXTENDED_ISO10646_1_5X7, "^3", "³")
|
||||
|
@@ -195,6 +195,11 @@
|
||||
#define __TERN(T,V...) ___TERN(_CAT(_NO,T),V) // Prepend '_NO' to get '_NOT_0' or '_NOT_1'
|
||||
#define ___TERN(P,V...) THIRD(P,V) // If first argument has a comma, A. Else B.
|
||||
|
||||
#define _OPTARG(A) , A
|
||||
#define OPTARG(O,A) TERN_(O,DEFER4(_OPTARG)(A))
|
||||
#define _OPTCODE(A) A;
|
||||
#define OPTCODE(O,A) TERN_(O,DEFER4(_OPTCODE)(A))
|
||||
|
||||
// Macros to avoid 'f + 0.0' which is not always optimized away. Minus included for symmetry.
|
||||
// Compiler flags -fno-signed-zeros -ffinite-math-only also cover 'f * 1.0', 'f - f', etc.
|
||||
#define PLUS_TERN0(O,A) _TERN(_ENA_1(O),,+ (A)) // OPTION ? '+ (A)' : '<nul>'
|
||||
|
@@ -101,7 +101,7 @@ void print_bin(uint16_t val) {
|
||||
}
|
||||
}
|
||||
|
||||
void print_xyz(const_float_t x, const_float_t y, const_float_t z, PGM_P const prefix/*=nullptr*/, PGM_P const suffix/*=nullptr*/) {
|
||||
void print_pos(const_float_t x, const_float_t y, const_float_t z, PGM_P const prefix/*=nullptr*/, PGM_P const suffix/*=nullptr*/) {
|
||||
if (prefix) serialprintPGM(prefix);
|
||||
SERIAL_ECHOPAIR_P(SP_X_STR, x, SP_Y_STR, y, SP_Z_STR, z);
|
||||
if (suffix) serialprintPGM(suffix); else SERIAL_EOL();
|
||||
|
@@ -310,11 +310,11 @@ void serialprint_truefalse(const bool tf);
|
||||
void serial_spaces(uint8_t count);
|
||||
|
||||
void print_bin(const uint16_t val);
|
||||
void print_xyz(const_float_t x, const_float_t y, const_float_t z, PGM_P const prefix=nullptr, PGM_P const suffix=nullptr);
|
||||
void print_pos(const_float_t x, const_float_t y, const_float_t z, PGM_P const prefix=nullptr, PGM_P const suffix=nullptr);
|
||||
|
||||
inline void print_xyz(const xyz_pos_t &xyz, PGM_P const prefix=nullptr, PGM_P const suffix=nullptr) {
|
||||
print_xyz(xyz.x, xyz.y, xyz.z, prefix, suffix);
|
||||
inline void print_pos(const xyz_pos_t &xyz, PGM_P const prefix=nullptr, PGM_P const suffix=nullptr) {
|
||||
print_pos(xyz.x, xyz.y, xyz.z, prefix, suffix);
|
||||
}
|
||||
|
||||
#define SERIAL_POS(SUFFIX,VAR) do { print_xyz(VAR, PSTR(" " STRINGIFY(VAR) "="), PSTR(" : " SUFFIX "\n")); }while(0)
|
||||
#define SERIAL_XYZ(PREFIX,V...) do { print_xyz(V, PSTR(PREFIX), nullptr); }while(0)
|
||||
#define SERIAL_POS(SUFFIX,VAR) do { print_pos(VAR, PSTR(" " STRINGIFY(VAR) "="), PSTR(" : " SUFFIX "\n")); }while(0)
|
||||
#define SERIAL_XYZ(PREFIX,V...) do { print_pos(V, PSTR(PREFIX), nullptr); }while(0)
|
||||
|
@@ -29,34 +29,6 @@
|
||||
class __FlashStringHelper;
|
||||
typedef const __FlashStringHelper *progmem_str;
|
||||
|
||||
//
|
||||
// Enumerated axis indices
|
||||
//
|
||||
// - X_AXIS, Y_AXIS, and Z_AXIS should be used for axes in Cartesian space
|
||||
// - A_AXIS, B_AXIS, and C_AXIS should be used for Steppers, corresponding to XYZ on Cartesians
|
||||
// - X_HEAD, Y_HEAD, and Z_HEAD should be used for Steppers on Core kinematics
|
||||
//
|
||||
enum AxisEnum : uint8_t {
|
||||
X_AXIS = 0, A_AXIS = 0,
|
||||
Y_AXIS = 1, B_AXIS = 1,
|
||||
Z_AXIS = 2, C_AXIS = 2,
|
||||
E_AXIS = 3,
|
||||
X_HEAD = 4, Y_HEAD = 5, Z_HEAD = 6,
|
||||
E0_AXIS = 3,
|
||||
E1_AXIS, E2_AXIS, E3_AXIS, E4_AXIS, E5_AXIS, E6_AXIS, E7_AXIS,
|
||||
ALL_AXES = 0xFE, NO_AXIS = 0xFF
|
||||
};
|
||||
|
||||
//
|
||||
// Loop over XYZE axes
|
||||
//
|
||||
#define LOOP_XYZ(VAR) LOOP_S_LE_N(VAR, X_AXIS, Z_AXIS)
|
||||
#define LOOP_XYZE(VAR) LOOP_S_LE_N(VAR, X_AXIS, E_AXIS)
|
||||
#define LOOP_XYZE_N(VAR) LOOP_S_L_N(VAR, X_AXIS, XYZE_N)
|
||||
#define LOOP_ABC(VAR) LOOP_S_LE_N(VAR, A_AXIS, C_AXIS)
|
||||
#define LOOP_ABCE(VAR) LOOP_S_LE_N(VAR, A_AXIS, E_AXIS)
|
||||
#define LOOP_ABCE_N(VAR) LOOP_S_L_N(VAR, A_AXIS, XYZE_N)
|
||||
|
||||
//
|
||||
// Conditional type assignment magic. For example...
|
||||
//
|
||||
@@ -67,6 +39,32 @@ struct IF { typedef R type; };
|
||||
template <class L, class R>
|
||||
struct IF<true, L, R> { typedef L type; };
|
||||
|
||||
//
|
||||
// Enumerated axis indices
|
||||
//
|
||||
// - X_AXIS, Y_AXIS, and Z_AXIS should be used for axes in Cartesian space
|
||||
// - A_AXIS, B_AXIS, and C_AXIS should be used for Steppers, corresponding to XYZ on Cartesians
|
||||
// - X_HEAD, Y_HEAD, and Z_HEAD should be used for Steppers on Core kinematics
|
||||
//
|
||||
enum AxisEnum : uint8_t {
|
||||
X_AXIS = 0, A_AXIS = X_AXIS,
|
||||
Y_AXIS = 1, B_AXIS = Y_AXIS,
|
||||
Z_AXIS = 2, C_AXIS = Z_AXIS,
|
||||
E_AXIS,
|
||||
X_HEAD, Y_HEAD, Z_HEAD,
|
||||
E0_AXIS = E_AXIS,
|
||||
E1_AXIS, E2_AXIS, E3_AXIS, E4_AXIS, E5_AXIS, E6_AXIS, E7_AXIS,
|
||||
ALL_AXES_ENUM = 0xFE, NO_AXIS_ENUM = 0xFF
|
||||
};
|
||||
|
||||
//
|
||||
// Loop over axes
|
||||
//
|
||||
#define LOOP_ABC(VAR) LOOP_S_LE_N(VAR, A_AXIS, C_AXIS)
|
||||
#define LOOP_LINEAR_AXES(VAR) LOOP_S_L_N(VAR, X_AXIS, LINEAR_AXES)
|
||||
#define LOOP_LOGICAL_AXES(VAR) LOOP_S_L_N(VAR, X_AXIS, LOGICAL_AXES)
|
||||
#define LOOP_DISTINCT_AXES(VAR) LOOP_S_L_N(VAR, X_AXIS, DISTINCT_AXES)
|
||||
|
||||
//
|
||||
// feedRate_t is just a humble float
|
||||
//
|
||||
@@ -201,8 +199,8 @@ struct XYval {
|
||||
FI void set(const T (&arr)[XY]) { x = arr[0]; y = arr[1]; }
|
||||
FI void set(const T (&arr)[XYZ]) { x = arr[0]; y = arr[1]; }
|
||||
FI void set(const T (&arr)[XYZE]) { x = arr[0]; y = arr[1]; }
|
||||
#if XYZE_N > XYZE
|
||||
FI void set(const T (&arr)[XYZE_N]) { x = arr[0]; y = arr[1]; }
|
||||
#if DISTINCT_AXES > LOGICAL_AXES
|
||||
FI void set(const T (&arr)[DISTINCT_AXES]) { x = arr[0]; y = arr[1]; }
|
||||
#endif
|
||||
FI void reset() { x = y = 0; }
|
||||
FI T magnitude() const { return (T)sqrtf(x*x + y*y); }
|
||||
@@ -312,8 +310,8 @@ struct XYZval {
|
||||
FI void set(const T (&arr)[XY]) { x = arr[0]; y = arr[1]; }
|
||||
FI void set(const T (&arr)[XYZ]) { x = arr[0]; y = arr[1]; z = arr[2]; }
|
||||
FI void set(const T (&arr)[XYZE]) { x = arr[0]; y = arr[1]; z = arr[2]; }
|
||||
#if XYZE_N > XYZE
|
||||
FI void set(const T (&arr)[XYZE_N]) { x = arr[0]; y = arr[1]; z = arr[2]; }
|
||||
#if DISTINCT_AXES > XYZE
|
||||
FI void set(const T (&arr)[DISTINCT_AXES]) { x = arr[0]; y = arr[1]; z = arr[2]; }
|
||||
#endif
|
||||
FI void reset() { x = y = z = 0; }
|
||||
FI T magnitude() const { return (T)sqrtf(x*x + y*y + z*z); }
|
||||
@@ -427,8 +425,8 @@ struct XYZEval {
|
||||
FI void set(const T (&arr)[XY]) { x = arr[0]; y = arr[1]; }
|
||||
FI void set(const T (&arr)[XYZ]) { x = arr[0]; y = arr[1]; z = arr[2]; }
|
||||
FI void set(const T (&arr)[XYZE]) { x = arr[0]; y = arr[1]; z = arr[2]; e = arr[3]; }
|
||||
#if XYZE_N > XYZE
|
||||
FI void set(const T (&arr)[XYZE_N]) { x = arr[0]; y = arr[1]; z = arr[2]; e = arr[3]; }
|
||||
#if DISTINCT_AXES > XYZE
|
||||
FI void set(const T (&arr)[DISTINCT_AXES]) { x = arr[0]; y = arr[1]; z = arr[2]; e = arr[3]; }
|
||||
#endif
|
||||
FI XYZEval<T> copy() const { return *this; }
|
||||
FI XYZEval<T> ABS() const { return { T(_ABS(x)), T(_ABS(y)), T(_ABS(z)), T(_ABS(e)) }; }
|
||||
@@ -518,4 +516,4 @@ struct XYZEval {
|
||||
#undef FI
|
||||
|
||||
const xyze_char_t axis_codes { 'X', 'Y', 'Z', 'E' };
|
||||
#define XYZ_CHAR(A) ((char)('X' + A))
|
||||
#define AXIS_CHAR(A) ((char)('X' + A))
|
||||
|
@@ -123,9 +123,9 @@ void safe_delay(millis_t ms) {
|
||||
#endif
|
||||
#if ABL_PLANAR
|
||||
SERIAL_ECHOPGM("ABL Adjustment X");
|
||||
LOOP_XYZ(a) {
|
||||
LOOP_LINEAR_AXES(a) {
|
||||
const float v = planner.get_axis_position_mm(AxisEnum(a)) - current_position[a];
|
||||
SERIAL_CHAR(' ', XYZ_CHAR(a));
|
||||
SERIAL_CHAR(' ', AXIS_CHAR(a));
|
||||
if (v > 0) SERIAL_CHAR('+');
|
||||
SERIAL_DECIMAL(v);
|
||||
}
|
||||
|
@@ -104,7 +104,7 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const
|
||||
|
||||
const float f_corr = float(correction) / 255.0f;
|
||||
|
||||
LOOP_XYZ(axis) {
|
||||
LOOP_LINEAR_AXES(axis) {
|
||||
if (distance_mm[axis]) {
|
||||
const bool reversing = TEST(dm,axis);
|
||||
|
||||
|
@@ -103,9 +103,7 @@ public:
|
||||
}
|
||||
|
||||
static float get_z(const xy_pos_t &pos
|
||||
#if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
|
||||
, const_float_t factor=1.0f
|
||||
#endif
|
||||
OPTARG(ENABLE_LEVELING_FADE_HEIGHT, const_float_t factor=1.0f)
|
||||
) {
|
||||
#if DISABLED(ENABLE_LEVELING_FADE_HEIGHT)
|
||||
constexpr float factor = 1.0f;
|
||||
|
@@ -581,7 +581,7 @@ void unified_bed_leveling::G29() {
|
||||
// use cases for the users. So we can wait and see what to do with it.
|
||||
//
|
||||
|
||||
if (parser.seen_test('K')) // Kompare Current Mesh Data to Specified Stored Mesh
|
||||
if (parser.seen('K')) // Kompare Current Mesh Data to Specified Stored Mesh
|
||||
g29_compare_current_mesh_to_stored_mesh();
|
||||
|
||||
#endif // UBL_DEVEL_DEBUGGING
|
||||
|
@@ -362,15 +362,11 @@
|
||||
while (--segments) {
|
||||
raw += diff;
|
||||
planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, segment_xyz_mm
|
||||
#if ENABLED(SCARA_FEEDRATE_SCALING)
|
||||
, inv_duration
|
||||
#endif
|
||||
OPTARG(SCARA_FEEDRATE_SCALING, inv_duration)
|
||||
);
|
||||
}
|
||||
planner.buffer_line(destination, scaled_fr_mm_s, active_extruder, segment_xyz_mm
|
||||
#if ENABLED(SCARA_FEEDRATE_SCALING)
|
||||
, inv_duration
|
||||
#endif
|
||||
OPTARG(SCARA_FEEDRATE_SCALING, inv_duration)
|
||||
);
|
||||
return false; // Did not set current from destination
|
||||
}
|
||||
|
@@ -41,11 +41,7 @@ bool CaseLight::on = CASE_LIGHT_DEFAULT_ON;
|
||||
#if CASE_LIGHT_IS_COLOR_LED
|
||||
#include "leds/leds.h"
|
||||
constexpr uint8_t init_case_light[] = CASE_LIGHT_DEFAULT_COLOR;
|
||||
LEDColor CaseLight::color = { init_case_light[0], init_case_light[1], init_case_light[2], TERN_(HAS_WHITE_LED, init_case_light[3]) };
|
||||
#endif
|
||||
|
||||
#ifndef INVERT_CASE_LIGHT
|
||||
#define INVERT_CASE_LIGHT false
|
||||
LEDColor CaseLight::color = { init_case_light[0], init_case_light[1], init_case_light[2] OPTARG(HAS_WHITE_LED, init_case_light[3]) };
|
||||
#endif
|
||||
|
||||
void CaseLight::update(const bool sflag) {
|
||||
@@ -64,14 +60,12 @@ void CaseLight::update(const bool sflag) {
|
||||
if (sflag && on)
|
||||
brightness = brightness_sav; // Restore last brightness for M355 S1
|
||||
|
||||
const uint8_t i = on ? brightness : 0, n10ct = INVERT_CASE_LIGHT ? 255 - i : i;
|
||||
const uint8_t i = on ? brightness : 0, n10ct = ENABLED(INVERT_CASE_LIGHT) ? 255 - i : i;
|
||||
UNUSED(n10ct);
|
||||
#endif
|
||||
|
||||
#if CASE_LIGHT_IS_COLOR_LED
|
||||
|
||||
leds.set_color(MakeLEDColor(color.r, color.g, color.b, color.w, n10ct));
|
||||
|
||||
leds.set_color(LEDColor(color.r, color.g, color.b OPTARG(HAS_WHITE_LED, color.w), n10ct));
|
||||
#else // !CASE_LIGHT_IS_COLOR_LED
|
||||
|
||||
#if CASELIGHT_USES_BRIGHTNESS
|
||||
@@ -86,7 +80,7 @@ void CaseLight::update(const bool sflag) {
|
||||
else
|
||||
#endif
|
||||
{
|
||||
const bool s = on ? !INVERT_CASE_LIGHT : INVERT_CASE_LIGHT;
|
||||
const bool s = on ? TERN(INVERT_CASE_LIGHT, LOW, HIGH) : TERN(INVERT_CASE_LIGHT, HIGH, LOW);
|
||||
WRITE(CASE_LIGHT_PIN, s ? HIGH : LOW);
|
||||
}
|
||||
|
||||
|
@@ -78,10 +78,8 @@ public:
|
||||
|
||||
// Get the total flow (in liters per minute) since the last reading
|
||||
static void calc_flowrate() {
|
||||
//flowmeter_interrupt_disable();
|
||||
// const uint16_t pulses = flowpulses;
|
||||
//flowmeter_interrupt_enable();
|
||||
flowrate = flowpulses * 60.0f * (1000.0f / (FLOWMETER_INTERVAL)) * (1000.0f / (FLOWMETER_PPL));
|
||||
// flowrate = (litres) * (seconds) = litres per minute
|
||||
flowrate = (flowpulses / (float)FLOWMETER_PPL) * ((1000.0f / (float)FLOWMETER_INTERVAL) * 60.0f);
|
||||
flowpulses = 0;
|
||||
}
|
||||
|
||||
|
@@ -73,7 +73,7 @@ uint8_t MCP4728::analogWrite(const uint8_t channel, const uint16_t value) {
|
||||
uint8_t MCP4728::eepromWrite() {
|
||||
Wire.beginTransmission(I2C_ADDRESS(DAC_DEV_ADDRESS));
|
||||
Wire.write(SEQWRITE);
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
Wire.write(DAC_STEPPER_VREF << 7 | DAC_STEPPER_GAIN << 4 | highByte(dac_values[i]));
|
||||
Wire.write(lowByte(dac_values[i]));
|
||||
}
|
||||
@@ -135,7 +135,7 @@ void MCP4728::setDrvPct(xyze_uint_t &pct) {
|
||||
*/
|
||||
uint8_t MCP4728::fastWrite() {
|
||||
Wire.beginTransmission(I2C_ADDRESS(DAC_DEV_ADDRESS));
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
Wire.write(highByte(dac_values[i]));
|
||||
Wire.write(lowByte(dac_values[i]));
|
||||
}
|
||||
|
@@ -51,7 +51,7 @@ int StepperDAC::init() {
|
||||
mcp4728.setVref_all(DAC_STEPPER_VREF);
|
||||
mcp4728.setGain_all(DAC_STEPPER_GAIN);
|
||||
|
||||
if (mcp4728.getDrvPct(0) < 1 || mcp4728.getDrvPct(1) < 1 || mcp4728.getDrvPct(2) < 1 || mcp4728.getDrvPct(3) < 1 ) {
|
||||
if (mcp4728.getDrvPct(0) < 1 || mcp4728.getDrvPct(1) < 1 || mcp4728.getDrvPct(2) < 1 || mcp4728.getDrvPct(3) < 1) {
|
||||
mcp4728.setDrvPct(dac_channel_pct);
|
||||
mcp4728.eepromWrite();
|
||||
}
|
||||
@@ -77,7 +77,7 @@ static float dac_amps(int8_t n) { return mcp4728.getValue(dac_order[n]) * 0.125
|
||||
|
||||
uint8_t StepperDAC::get_current_percent(const AxisEnum axis) { return mcp4728.getDrvPct(dac_order[axis]); }
|
||||
void StepperDAC::set_current_percents(xyze_uint8_t &pct) {
|
||||
LOOP_XYZE(i) dac_channel_pct[i] = pct[dac_order[i]];
|
||||
LOOP_LOGICAL_AXES(i) dac_channel_pct[i] = pct[dac_order[i]];
|
||||
mcp4728.setDrvPct(dac_channel_pct);
|
||||
}
|
||||
|
||||
|
@@ -337,7 +337,7 @@ bool I2CPositionEncoder::test_axis() {
|
||||
ec = false;
|
||||
|
||||
xyze_pos_t startCoord, endCoord;
|
||||
LOOP_XYZ(a) {
|
||||
LOOP_LINEAR_AXES(a) {
|
||||
startCoord[a] = planner.get_axis_position_mm((AxisEnum)a);
|
||||
endCoord[a] = planner.get_axis_position_mm((AxisEnum)a);
|
||||
}
|
||||
@@ -392,7 +392,7 @@ void I2CPositionEncoder::calibrate_steps_mm(const uint8_t iter) {
|
||||
travelDistance = endDistance - startDistance;
|
||||
|
||||
xyze_pos_t startCoord, endCoord;
|
||||
LOOP_XYZ(a) {
|
||||
LOOP_LINEAR_AXES(a) {
|
||||
startCoord[a] = planner.get_axis_position_mm((AxisEnum)a);
|
||||
endCoord[a] = planner.get_axis_position_mm((AxisEnum)a);
|
||||
}
|
||||
@@ -822,7 +822,7 @@ void I2CPositionEncodersMgr::M860() {
|
||||
const bool hasU = parser.seen_test('U'), hasO = parser.seen_test('O');
|
||||
|
||||
if (I2CPE_idx == 0xFF) {
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
if (!I2CPE_anyaxis || parser.seen_test(axis_codes[i])) {
|
||||
const uint8_t idx = idx_from_axis(AxisEnum(i));
|
||||
if ((int8_t)idx >= 0) report_position(idx, hasU, hasO);
|
||||
@@ -849,7 +849,7 @@ void I2CPositionEncodersMgr::M861() {
|
||||
if (parse()) return;
|
||||
|
||||
if (I2CPE_idx == 0xFF) {
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
if (!I2CPE_anyaxis || parser.seen(axis_codes[i])) {
|
||||
const uint8_t idx = idx_from_axis(AxisEnum(i));
|
||||
if ((int8_t)idx >= 0) report_status(idx);
|
||||
@@ -877,7 +877,7 @@ void I2CPositionEncodersMgr::M862() {
|
||||
if (parse()) return;
|
||||
|
||||
if (I2CPE_idx == 0xFF) {
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
if (!I2CPE_anyaxis || parser.seen(axis_codes[i])) {
|
||||
const uint8_t idx = idx_from_axis(AxisEnum(i));
|
||||
if ((int8_t)idx >= 0) test_axis(idx);
|
||||
@@ -908,7 +908,7 @@ void I2CPositionEncodersMgr::M863() {
|
||||
const uint8_t iterations = constrain(parser.byteval('P', 1), 1, 10);
|
||||
|
||||
if (I2CPE_idx == 0xFF) {
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
if (!I2CPE_anyaxis || parser.seen(axis_codes[i])) {
|
||||
const uint8_t idx = idx_from_axis(AxisEnum(i));
|
||||
if ((int8_t)idx >= 0) calibrate_steps_mm(idx, iterations);
|
||||
@@ -984,7 +984,7 @@ void I2CPositionEncodersMgr::M865() {
|
||||
if (parse()) return;
|
||||
|
||||
if (!I2CPE_addr) {
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
if (!I2CPE_anyaxis || parser.seen(axis_codes[i])) {
|
||||
const uint8_t idx = idx_from_axis(AxisEnum(i));
|
||||
if ((int8_t)idx >= 0) report_module_firmware(encoders[idx].get_address());
|
||||
@@ -1015,7 +1015,7 @@ void I2CPositionEncodersMgr::M866() {
|
||||
const bool hasR = parser.seen_test('R');
|
||||
|
||||
if (I2CPE_idx == 0xFF) {
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
if (!I2CPE_anyaxis || parser.seen(axis_codes[i])) {
|
||||
const uint8_t idx = idx_from_axis(AxisEnum(i));
|
||||
if ((int8_t)idx >= 0) {
|
||||
@@ -1053,7 +1053,7 @@ void I2CPositionEncodersMgr::M867() {
|
||||
const int8_t onoff = parser.seenval('S') ? parser.value_int() : -1;
|
||||
|
||||
if (I2CPE_idx == 0xFF) {
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
if (!I2CPE_anyaxis || parser.seen(axis_codes[i])) {
|
||||
const uint8_t idx = idx_from_axis(AxisEnum(i));
|
||||
if ((int8_t)idx >= 0) {
|
||||
@@ -1089,7 +1089,7 @@ void I2CPositionEncodersMgr::M868() {
|
||||
const float newThreshold = parser.seenval('T') ? parser.value_float() : -9999;
|
||||
|
||||
if (I2CPE_idx == 0xFF) {
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
if (!I2CPE_anyaxis || parser.seen(axis_codes[i])) {
|
||||
const uint8_t idx = idx_from_axis(AxisEnum(i));
|
||||
if ((int8_t)idx >= 0) {
|
||||
@@ -1123,7 +1123,7 @@ void I2CPositionEncodersMgr::M869() {
|
||||
if (parse()) return;
|
||||
|
||||
if (I2CPE_idx == 0xFF) {
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
if (!I2CPE_anyaxis || parser.seen(axis_codes[i])) {
|
||||
const uint8_t idx = idx_from_axis(AxisEnum(i));
|
||||
if ((int8_t)idx >= 0) report_error(idx);
|
||||
|
@@ -91,11 +91,7 @@ void FWRetract::reset() {
|
||||
* Note: Auto-retract will apply the set Z hop in addition to any Z hop
|
||||
* included in the G-code. Use M207 Z0 to to prevent double hop.
|
||||
*/
|
||||
void FWRetract::retract(const bool retracting
|
||||
#if HAS_MULTI_EXTRUDER
|
||||
, bool swapping/*=false*/
|
||||
#endif
|
||||
) {
|
||||
void FWRetract::retract(const bool retracting OPTARG(HAS_MULTI_EXTRUDER, bool swapping/*=false*/)) {
|
||||
// Prevent two retracts or recovers in a row
|
||||
if (retracted[active_extruder] == retracting) return;
|
||||
|
||||
|
@@ -74,11 +74,7 @@ public:
|
||||
#endif
|
||||
}
|
||||
|
||||
static void retract(const bool retracting
|
||||
#if HAS_MULTI_EXTRUDER
|
||||
, bool swapping = false
|
||||
#endif
|
||||
);
|
||||
static void retract(const bool retracting OPTARG(HAS_MULTI_EXTRUDER, bool swapping = false));
|
||||
|
||||
static void M207();
|
||||
static void M207_report(const bool forReplay=false);
|
||||
|
@@ -163,7 +163,7 @@ Joystick joystick;
|
||||
// norm_jog values of [-1 .. 1] maps linearly to [-feedrate .. feedrate]
|
||||
xyz_float_t move_dist{0};
|
||||
float hypot2 = 0;
|
||||
LOOP_XYZ(i) if (norm_jog[i]) {
|
||||
LOOP_LINEAR_AXES(i) if (norm_jog[i]) {
|
||||
move_dist[i] = seg_time * norm_jog[i] * TERN(EXTENSIBLE_UI, manual_feedrate_mm_s, planner.settings.max_feedrate_mm_s)[i];
|
||||
hypot2 += sq(move_dist[i]);
|
||||
}
|
||||
|
@@ -47,9 +47,10 @@
|
||||
#endif
|
||||
|
||||
#if ENABLED(LED_COLOR_PRESETS)
|
||||
const LEDColor LEDLights::defaultLEDColor = MakeLEDColor(
|
||||
LED_USER_PRESET_RED, LED_USER_PRESET_GREEN, LED_USER_PRESET_BLUE,
|
||||
LED_USER_PRESET_WHITE, LED_USER_PRESET_BRIGHTNESS
|
||||
const LEDColor LEDLights::defaultLEDColor = LEDColor(
|
||||
LED_USER_PRESET_RED, LED_USER_PRESET_GREEN, LED_USER_PRESET_BLUE
|
||||
OPTARG(HAS_WHITE_LED, LED_USER_PRESET_WHITE)
|
||||
OPTARG(NEOPIXEL_LED, LED_USER_PRESET_BRIGHTNESS)
|
||||
);
|
||||
#endif
|
||||
|
||||
@@ -75,36 +76,35 @@ void LEDLights::setup() {
|
||||
}
|
||||
|
||||
void LEDLights::set_color(const LEDColor &incol
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
, bool isSequence/*=false*/
|
||||
#endif
|
||||
OPTARG(NEOPIXEL_IS_SEQUENTIAL, bool isSequence/*=false*/)
|
||||
) {
|
||||
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
|
||||
const uint32_t neocolor = LEDColorWhite() == incol
|
||||
? neo.Color(NEO_WHITE)
|
||||
: neo.Color(incol.r, incol.g, incol.b, incol.w);
|
||||
static uint16_t nextLed = 0;
|
||||
: neo.Color(incol.r, incol.g, incol.b OPTARG(HAS_WHITE_LED, incol.w));
|
||||
|
||||
#ifdef NEOPIXEL_BKGD_LED_INDEX
|
||||
if (NEOPIXEL_BKGD_LED_INDEX == nextLed) {
|
||||
neo.set_color_background();
|
||||
if (++nextLed >= neo.pixels()) {
|
||||
nextLed = 0;
|
||||
return;
|
||||
#if ENABLED(NEOPIXEL_IS_SEQUENTIAL)
|
||||
static uint16_t nextLed = 0;
|
||||
#ifdef NEOPIXEL_BKGD_INDEX_FIRST
|
||||
while (WITHIN(nextLed, NEOPIXEL_BKGD_INDEX_FIRST, NEOPIXEL_BKGD_INDEX_LAST)) {
|
||||
neo.reset_background_color();
|
||||
if (++nextLed >= neo.pixels()) { nextLed = 0; return; }
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
neo.set_brightness(incol.i);
|
||||
|
||||
if (isSequence) {
|
||||
neo.set_pixel_color(nextLed, neocolor);
|
||||
neo.show();
|
||||
if (++nextLed >= neo.pixels()) nextLed = 0;
|
||||
return;
|
||||
}
|
||||
#if ENABLED(NEOPIXEL_IS_SEQUENTIAL)
|
||||
if (isSequence) {
|
||||
neo.set_pixel_color(nextLed, neocolor);
|
||||
neo.show();
|
||||
if (++nextLed >= neo.pixels()) nextLed = 0;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
neo.set_color(neocolor);
|
||||
|
||||
@@ -169,9 +169,10 @@ void LEDLights::set_color(const LEDColor &incol
|
||||
#if ENABLED(NEOPIXEL2_SEPARATE)
|
||||
|
||||
#if ENABLED(NEO2_COLOR_PRESETS)
|
||||
const LEDColor LEDLights2::defaultLEDColor = MakeLEDColor(
|
||||
NEO2_USER_PRESET_RED, NEO2_USER_PRESET_GREEN, NEO2_USER_PRESET_BLUE,
|
||||
NEO2_USER_PRESET_WHITE, NEO2_USER_PRESET_BRIGHTNESS
|
||||
const LEDColor LEDLights2::defaultLEDColor = LEDColor(
|
||||
LED_USER_PRESET_RED, LED_USER_PRESET_GREEN, LED_USER_PRESET_BLUE
|
||||
OPTARG(HAS_WHITE_LED2, LED_USER_PRESET_WHITE)
|
||||
OPTARG(NEOPIXEL_LED, LED_USER_PRESET_BRIGHTNESS)
|
||||
);
|
||||
#endif
|
||||
|
||||
@@ -190,7 +191,7 @@ void LEDLights::set_color(const LEDColor &incol
|
||||
void LEDLights2::set_color(const LEDColor &incol) {
|
||||
const uint32_t neocolor = LEDColorWhite() == incol
|
||||
? neo2.Color(NEO2_WHITE)
|
||||
: neo2.Color(incol.r, incol.g, incol.b, incol.w);
|
||||
: neo2.Color(incol.r, incol.g, incol.b OPTARG(HAS_WHITE_LED2, incol.w));
|
||||
neo2.set_brightness(incol.i);
|
||||
neo2.set_color(neocolor);
|
||||
|
||||
|
@@ -29,13 +29,15 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
#include "neopixel.h"
|
||||
// A white component can be passed
|
||||
#if EITHER(RGBW_LED, PCA9632_RGBW)
|
||||
#define HAS_WHITE_LED 1
|
||||
#endif
|
||||
|
||||
// A white component can be passed
|
||||
#if ANY(RGBW_LED, NEOPIXEL_LED, PCA9632_RGBW)
|
||||
#define HAS_WHITE_LED 1
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
#define _NEOPIXEL_INCLUDE_
|
||||
#include "neopixel.h"
|
||||
#undef _NEOPIXEL_INCLUDE_
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -43,46 +45,21 @@
|
||||
*/
|
||||
typedef struct LEDColor {
|
||||
uint8_t r, g, b
|
||||
#if HAS_WHITE_LED
|
||||
, w
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
, i
|
||||
#endif
|
||||
#endif
|
||||
OPTARG(HAS_WHITE_LED, w)
|
||||
OPTARG(NEOPIXEL_LED, i)
|
||||
;
|
||||
|
||||
LEDColor() : r(255), g(255), b(255)
|
||||
#if HAS_WHITE_LED
|
||||
, w(255)
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
, i(NEOPIXEL_BRIGHTNESS)
|
||||
#endif
|
||||
#endif
|
||||
OPTARG(HAS_WHITE_LED, w(255))
|
||||
OPTARG(NEOPIXEL_LED, i(NEOPIXEL_BRIGHTNESS))
|
||||
{}
|
||||
|
||||
LEDColor(uint8_t r, uint8_t g, uint8_t b
|
||||
#if HAS_WHITE_LED
|
||||
, uint8_t w=0
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
, uint8_t i=NEOPIXEL_BRIGHTNESS
|
||||
#endif
|
||||
#endif
|
||||
) : r(r), g(g), b(b)
|
||||
#if HAS_WHITE_LED
|
||||
, w(w)
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
, i(i)
|
||||
#endif
|
||||
#endif
|
||||
{}
|
||||
LEDColor(uint8_t r, uint8_t g, uint8_t b OPTARG(HAS_WHITE_LED, uint8_t w=0) OPTARG(NEOPIXEL_LED, uint8_t i=NEOPIXEL_BRIGHTNESS))
|
||||
: r(r), g(g), b(b) OPTARG(HAS_WHITE_LED, w(w)) OPTARG(NEOPIXEL_LED, i(i)) {}
|
||||
|
||||
LEDColor(const uint8_t (&rgbw)[4]) : r(rgbw[0]), g(rgbw[1]), b(rgbw[2])
|
||||
#if HAS_WHITE_LED
|
||||
, w(rgbw[3])
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
, i(NEOPIXEL_BRIGHTNESS)
|
||||
#endif
|
||||
#endif
|
||||
OPTARG(HAS_WHITE_LED, w(rgbw[3]))
|
||||
OPTARG(NEOPIXEL_LED, i(NEOPIXEL_BRIGHTNESS))
|
||||
{}
|
||||
|
||||
LEDColor& operator=(const uint8_t (&rgbw)[4]) {
|
||||
@@ -109,17 +86,8 @@ typedef struct LEDColor {
|
||||
} LEDColor;
|
||||
|
||||
/**
|
||||
* Color helpers and presets
|
||||
* Color presets
|
||||
*/
|
||||
#if HAS_WHITE_LED
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
#define MakeLEDColor(R,G,B,W,I) LEDColor(R, G, B, W, I)
|
||||
#else
|
||||
#define MakeLEDColor(R,G,B,W,I) LEDColor(R, G, B, W)
|
||||
#endif
|
||||
#else
|
||||
#define MakeLEDColor(R,G,B,W,I) LEDColor(R, G, B)
|
||||
#endif
|
||||
|
||||
#define LEDColorOff() LEDColor( 0, 0, 0)
|
||||
#define LEDColorRed() LEDColor(255, 0, 0)
|
||||
@@ -147,25 +115,15 @@ public:
|
||||
static void setup(); // init()
|
||||
|
||||
static void set_color(const LEDColor &color
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
, bool isSequence=false
|
||||
#endif
|
||||
OPTARG(NEOPIXEL_IS_SEQUENTIAL, bool isSequence=false)
|
||||
);
|
||||
|
||||
static inline void set_color(uint8_t r, uint8_t g, uint8_t b
|
||||
#if HAS_WHITE_LED
|
||||
, uint8_t w=0
|
||||
#endif
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
, uint8_t i=NEOPIXEL_BRIGHTNESS
|
||||
, bool isSequence=false
|
||||
#endif
|
||||
OPTARG(HAS_WHITE_LED, uint8_t w=0)
|
||||
OPTARG(NEOPIXEL_LED, uint8_t i=NEOPIXEL_BRIGHTNESS)
|
||||
OPTARG(NEOPIXEL_IS_SEQUENTIAL, bool isSequence=false)
|
||||
) {
|
||||
set_color(MakeLEDColor(r, g, b, w, i)
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
, isSequence
|
||||
#endif
|
||||
);
|
||||
set_color(LEDColor(r, g, b OPTARG(HAS_WHITE_LED, w) OPTARG(NEOPIXEL_LED, i)) OPTARG(NEOPIXEL_IS_SEQUENTIAL, isSequence));
|
||||
}
|
||||
|
||||
static inline void set_off() { set_color(LEDColorOff()); }
|
||||
@@ -223,8 +181,14 @@ extern LEDLights leds;
|
||||
|
||||
static void set_color(const LEDColor &color);
|
||||
|
||||
inline void set_color(uint8_t r, uint8_t g, uint8_t b, uint8_t w=0, uint8_t i=NEOPIXEL2_BRIGHTNESS) {
|
||||
set_color(MakeLEDColor(r, g, b, w, i));
|
||||
static inline void set_color(uint8_t r, uint8_t g, uint8_t b
|
||||
OPTARG(HAS_WHITE_LED, uint8_t w=0)
|
||||
OPTARG(NEOPIXEL_LED, uint8_t i=NEOPIXEL_BRIGHTNESS)
|
||||
) {
|
||||
set_color(LEDColor(r, g, b
|
||||
OPTARG(HAS_WHITE_LED, w)
|
||||
OPTARG(NEOPIXEL_LED, i)
|
||||
));
|
||||
}
|
||||
|
||||
static inline void set_off() { set_color(LEDColorOff()); }
|
||||
|
@@ -28,7 +28,7 @@
|
||||
|
||||
#if ENABLED(NEOPIXEL_LED)
|
||||
|
||||
#include "neopixel.h"
|
||||
#include "leds.h"
|
||||
|
||||
#if EITHER(NEOPIXEL_STARTUP_TEST, NEOPIXEL2_STARTUP_TEST)
|
||||
#include "../../core/utility.h"
|
||||
@@ -37,17 +37,21 @@
|
||||
Marlin_NeoPixel neo;
|
||||
int8_t Marlin_NeoPixel::neoindex;
|
||||
|
||||
Adafruit_NeoPixel Marlin_NeoPixel::adaneo1(NEOPIXEL_PIXELS, NEOPIXEL_PIN, NEOPIXEL_TYPE + NEO_KHZ800)
|
||||
#if CONJOINED_NEOPIXEL
|
||||
, Marlin_NeoPixel::adaneo2(NEOPIXEL_PIXELS, NEOPIXEL2_PIN, NEOPIXEL2_TYPE + NEO_KHZ800)
|
||||
#endif
|
||||
;
|
||||
Adafruit_NeoPixel Marlin_NeoPixel::adaneo1(NEOPIXEL_PIXELS, NEOPIXEL_PIN, NEOPIXEL_TYPE + NEO_KHZ800);
|
||||
#if CONJOINED_NEOPIXEL
|
||||
Adafruit_NeoPixel Marlin_NeoPixel::adaneo2(NEOPIXEL_PIXELS, NEOPIXEL2_PIN, NEOPIXEL2_TYPE + NEO_KHZ800);
|
||||
#endif
|
||||
|
||||
#ifdef NEOPIXEL_BKGD_LED_INDEX
|
||||
#ifdef NEOPIXEL_BKGD_INDEX_FIRST
|
||||
|
||||
void Marlin_NeoPixel::set_color_background() {
|
||||
uint8_t background_color[4] = NEOPIXEL_BKGD_COLOR;
|
||||
set_pixel_color(NEOPIXEL_BKGD_LED_INDEX, adaneo1.Color(background_color[0], background_color[1], background_color[2], background_color[3]));
|
||||
void Marlin_NeoPixel::set_background_color(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
|
||||
for (int background_led = NEOPIXEL_BKGD_INDEX_FIRST; background_led <= NEOPIXEL_BKGD_INDEX_LAST; background_led++)
|
||||
set_pixel_color(background_led, adaneo1.Color(r, g, b, w));
|
||||
}
|
||||
|
||||
void Marlin_NeoPixel::reset_background_color() {
|
||||
constexpr uint8_t background_color[4] = NEOPIXEL_BKGD_COLOR;
|
||||
set_background_color(background_color[0], background_color[1], background_color[2], background_color[3]);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -59,9 +63,10 @@ void Marlin_NeoPixel::set_color(const uint32_t color) {
|
||||
}
|
||||
else {
|
||||
for (uint16_t i = 0; i < pixels(); ++i) {
|
||||
#ifdef NEOPIXEL_BKGD_LED_INDEX
|
||||
if (i == NEOPIXEL_BKGD_LED_INDEX && TERN(NEOPIXEL_BKGD_ALWAYS_ON, true, color != 0x000000)) {
|
||||
set_color_background();
|
||||
#ifdef NEOPIXEL_BKGD_INDEX_FIRST
|
||||
if (i == NEOPIXEL_BKGD_INDEX_FIRST && TERN(NEOPIXEL_BKGD_ALWAYS_ON, true, color != 0x000000)) {
|
||||
reset_background_color();
|
||||
i += NEOPIXEL_BKGD_INDEX_LAST - (NEOPIXEL_BKGD_INDEX_FIRST);
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
@@ -90,36 +95,23 @@ void Marlin_NeoPixel::init() {
|
||||
safe_delay(500);
|
||||
set_color_startup(adaneo1.Color(0, 0, 255, 0)); // blue
|
||||
safe_delay(500);
|
||||
#if HAS_WHITE_LED
|
||||
set_color_startup(adaneo1.Color(0, 0, 0, 255)); // white
|
||||
safe_delay(500);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef NEOPIXEL_BKGD_LED_INDEX
|
||||
set_color_background();
|
||||
#ifdef NEOPIXEL_BKGD_INDEX_FIRST
|
||||
reset_background_color();
|
||||
#endif
|
||||
|
||||
#if ENABLED(LED_USER_PRESET_STARTUP)
|
||||
set_color(adaneo1.Color(LED_USER_PRESET_RED, LED_USER_PRESET_GREEN, LED_USER_PRESET_BLUE, LED_USER_PRESET_WHITE));
|
||||
#else
|
||||
set_color(adaneo1.Color(0, 0, 0, 0));
|
||||
#endif
|
||||
set_color(adaneo1.Color
|
||||
TERN(LED_USER_PRESET_STARTUP,
|
||||
(LED_USER_PRESET_RED, LED_USER_PRESET_GREEN, LED_USER_PRESET_BLUE, LED_USER_PRESET_WHITE),
|
||||
(0, 0, 0, 0))
|
||||
);
|
||||
}
|
||||
|
||||
#if 0
|
||||
bool Marlin_NeoPixel::set_led_color(const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t w, const uint8_t p) {
|
||||
const uint32_t color = adaneo1.Color(r, g, b, w);
|
||||
set_brightness(p);
|
||||
#if DISABLED(NEOPIXEL_IS_SEQUENTIAL)
|
||||
set_color(color);
|
||||
return false;
|
||||
#else
|
||||
static uint16_t nextLed = 0;
|
||||
set_pixel_color(nextLed, color);
|
||||
show();
|
||||
if (++nextLed >= pixels()) nextLed = 0;
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ENABLED(NEOPIXEL2_SEPARATE)
|
||||
|
||||
Marlin_NeoPixel2 neo2;
|
||||
@@ -158,13 +150,17 @@ bool Marlin_NeoPixel::set_led_color(const uint8_t r, const uint8_t g, const uint
|
||||
safe_delay(500);
|
||||
set_color_startup(adaneo.Color(0, 0, 255, 0)); // blue
|
||||
safe_delay(500);
|
||||
#if HAS_WHITE_LED2
|
||||
set_color_startup(adaneo.Color(0, 0, 0, 255)); // white
|
||||
safe_delay(500);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ENABLED(NEO2_USER_PRESET_STARTUP)
|
||||
set_color(adaneo.Color(NEO2_USER_PRESET_RED, NEO2_USER_PRESET_GREEN, NEO2_USER_PRESET_BLUE, NEO2_USER_PRESET_WHITE));
|
||||
#else
|
||||
set_color(adaneo.Color(0, 0, 0, 0));
|
||||
#endif
|
||||
set_color(adaneo.Color
|
||||
TERN(NEO2_USER_PRESET_STARTUP,
|
||||
(NEO2_USER_PRESET_RED, NEO2_USER_PRESET_GREEN, NEO2_USER_PRESET_BLUE, NEO2_USER_PRESET_WHITE),
|
||||
(0, 0, 0, 0))
|
||||
);
|
||||
}
|
||||
|
||||
#endif // NEOPIXEL2_SEPARATE
|
||||
|
@@ -25,6 +25,10 @@
|
||||
* NeoPixel support
|
||||
*/
|
||||
|
||||
#ifndef _NEOPIXEL_INCLUDE_
|
||||
#error "Always include 'leds.h' and not 'neopixel.h' directly."
|
||||
#endif
|
||||
|
||||
// ------------------------
|
||||
// Includes
|
||||
// ------------------------
|
||||
@@ -38,6 +42,18 @@
|
||||
// Defines
|
||||
// ------------------------
|
||||
|
||||
#define _NEO_IS_RGB(N) (N == NEO_RGB || N == NEO_RBG || N == NEO_GRB || N == NEO_GBR || N == NEO_BRG || N == NEO_BGR)
|
||||
|
||||
#if !_NEO_IS_RGB(NEOPIXEL_TYPE)
|
||||
#define HAS_WHITE_LED 1
|
||||
#endif
|
||||
|
||||
#if HAS_WHITE_LED
|
||||
#define NEO_WHITE 0, 0, 0, 255
|
||||
#else
|
||||
#define NEO_WHITE 255, 255, 255
|
||||
#endif
|
||||
|
||||
#if defined(NEOPIXEL2_TYPE) && NEOPIXEL2_TYPE != NEOPIXEL_TYPE && DISABLED(NEOPIXEL2_SEPARATE)
|
||||
#define MULTIPLE_NEOPIXEL_TYPES 1
|
||||
#endif
|
||||
@@ -46,29 +62,16 @@
|
||||
#define CONJOINED_NEOPIXEL 1
|
||||
#endif
|
||||
|
||||
#if NEOPIXEL_TYPE == NEO_RGB || NEOPIXEL_TYPE == NEO_RBG || NEOPIXEL_TYPE == NEO_GRB || NEOPIXEL_TYPE == NEO_GBR || NEOPIXEL_TYPE == NEO_BRG || NEOPIXEL_TYPE == NEO_BGR
|
||||
#define NEOPIXEL_IS_RGB 1
|
||||
#else
|
||||
#define NEOPIXEL_IS_RGBW 1
|
||||
#endif
|
||||
|
||||
#if NEOPIXEL_IS_RGB
|
||||
#define NEO_WHITE 255, 255, 255, 0
|
||||
#else
|
||||
#define NEO_WHITE 0, 0, 0, 255
|
||||
#endif
|
||||
|
||||
// ------------------------
|
||||
// Function prototypes
|
||||
// ------------------------
|
||||
|
||||
class Marlin_NeoPixel {
|
||||
private:
|
||||
static Adafruit_NeoPixel adaneo1
|
||||
#if CONJOINED_NEOPIXEL
|
||||
, adaneo2
|
||||
#endif
|
||||
;
|
||||
static Adafruit_NeoPixel adaneo1;
|
||||
#if CONJOINED_NEOPIXEL
|
||||
static Adafruit_NeoPixel adaneo2;
|
||||
#endif
|
||||
|
||||
public:
|
||||
static int8_t neoindex;
|
||||
@@ -78,8 +81,9 @@ public:
|
||||
|
||||
static void set_color(const uint32_t c);
|
||||
|
||||
#ifdef NEOPIXEL_BKGD_LED_INDEX
|
||||
static void set_color_background();
|
||||
#ifdef NEOPIXEL_BKGD_INDEX_FIRST
|
||||
static void set_background_color(uint8_t r, uint8_t g, uint8_t b, uint8_t w);
|
||||
static void reset_background_color();
|
||||
#endif
|
||||
|
||||
static inline void begin() {
|
||||
@@ -93,9 +97,7 @@ public:
|
||||
else adaneo1.setPixelColor(n, c);
|
||||
#else
|
||||
adaneo1.setPixelColor(n, c);
|
||||
#if MULTIPLE_NEOPIXEL_TYPES
|
||||
adaneo2.setPixelColor(n, c);
|
||||
#endif
|
||||
TERN_(MULTIPLE_NEOPIXEL_TYPES, adaneo2.setPixelColor(n, c));
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -120,15 +122,13 @@ public:
|
||||
TERN_(HAS_PAUSE_SERVO_OUTPUT, RESUME_SERVO_OUTPUT());
|
||||
}
|
||||
|
||||
#if 0
|
||||
bool set_led_color(const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t w, const uint8_t p);
|
||||
#endif
|
||||
|
||||
// Accessors
|
||||
static inline uint16_t pixels() { TERN(NEOPIXEL2_INSERIES, return adaneo1.numPixels() * 2, return adaneo1.numPixels()); }
|
||||
static inline uint16_t pixels() { return adaneo1.numPixels() * TERN1(NEOPIXEL2_INSERIES, 2); }
|
||||
|
||||
static inline uint8_t brightness() { return adaneo1.getBrightness(); }
|
||||
static inline uint32_t Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
|
||||
return adaneo1.Color(r, g, b, w);
|
||||
|
||||
static inline uint32_t Color(uint8_t r, uint8_t g, uint8_t b OPTARG(HAS_WHITE_LED, uint8_t w)) {
|
||||
return adaneo1.Color(r, g, b OPTARG(HAS_WHITE_LED, w));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -137,15 +137,12 @@ extern Marlin_NeoPixel neo;
|
||||
// Neo pixel channel 2
|
||||
#if ENABLED(NEOPIXEL2_SEPARATE)
|
||||
|
||||
#if NEOPIXEL2_TYPE == NEO_RGB || NEOPIXEL2_TYPE == NEO_RBG || NEOPIXEL2_TYPE == NEO_GRB || NEOPIXEL2_TYPE == NEO_GBR || NEOPIXEL2_TYPE == NEO_BRG || NEOPIXEL2_TYPE == NEO_BGR
|
||||
#if _NEO_IS_RGB(NEOPIXEL2_TYPE)
|
||||
#define NEOPIXEL2_IS_RGB 1
|
||||
#define NEO2_WHITE 255, 255, 255
|
||||
#else
|
||||
#define NEOPIXEL2_IS_RGBW 1
|
||||
#endif
|
||||
|
||||
#if NEOPIXEL2_IS_RGB
|
||||
#define NEO2_WHITE 255, 255, 255, 0
|
||||
#else
|
||||
#define HAS_WHITE_LED2 1 // A white component can be passed for NEOPIXEL2
|
||||
#define NEO2_WHITE 0, 0, 0, 255
|
||||
#endif
|
||||
|
||||
@@ -172,11 +169,13 @@ extern Marlin_NeoPixel neo;
|
||||
// Accessors
|
||||
static inline uint16_t pixels() { return adaneo.numPixels();}
|
||||
static inline uint8_t brightness() { return adaneo.getBrightness(); }
|
||||
static inline uint32_t Color(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
|
||||
return adaneo.Color(r, g, b, w);
|
||||
static inline uint32_t Color(uint8_t r, uint8_t g, uint8_t b OPTARG(HAS_WHITE_LED2, uint8_t w)) {
|
||||
return adaneo.Color(r, g, b OPTARG(HAS_WHITE_LED2, w));
|
||||
}
|
||||
};
|
||||
|
||||
extern Marlin_NeoPixel2 neo2;
|
||||
|
||||
#endif // NEOPIXEL2_SEPARATE
|
||||
|
||||
#undef _NEO_IS_RGB
|
||||
|
@@ -93,9 +93,7 @@ static void PCA9632_WriteRegister(const byte addr, const byte regadd, const byte
|
||||
}
|
||||
|
||||
static void PCA9632_WriteAllRegisters(const byte addr, const byte regadd, const byte vr, const byte vg, const byte vb
|
||||
#if ENABLED(PCA9632_RGBW)
|
||||
, const byte vw
|
||||
#endif
|
||||
OPTARG(PCA9632_RGBW, const byte vw)
|
||||
) {
|
||||
#if DISABLED(PCA9632_NO_AUTO_INC)
|
||||
uint8_t data[4];
|
||||
@@ -143,9 +141,7 @@ void PCA9632_set_led_color(const LEDColor &color) {
|
||||
;
|
||||
|
||||
PCA9632_WriteAllRegisters(PCA9632_ADDRESS,PCA9632_PWM0, color.r, color.g, color.b
|
||||
#if ENABLED(PCA9632_RGBW)
|
||||
, color.w
|
||||
#endif
|
||||
OPTARG(PCA9632_RGBW, color.w)
|
||||
);
|
||||
PCA9632_WriteRegister(PCA9632_ADDRESS,PCA9632_LEDOUT, LEDOUT);
|
||||
}
|
||||
|
@@ -45,12 +45,10 @@ PrinterEventLEDs printerEventLEDs;
|
||||
return (uint8_t)map(constrain(current, start, target), start, target, 0, 255);
|
||||
}
|
||||
|
||||
inline void pel_set_rgb(const uint8_t r, const uint8_t g, const uint8_t b) {
|
||||
inline void pel_set_rgb(const uint8_t r, const uint8_t g, const uint8_t b OPTARG(HAS_WHITE_LED, const uint8_t w=0)) {
|
||||
leds.set_color(
|
||||
MakeLEDColor(r, g, b, 0, neo.brightness())
|
||||
#if ENABLED(NEOPIXEL_IS_SEQUENTIAL)
|
||||
, true
|
||||
#endif
|
||||
LEDColor(r, g, b OPTARG(HAS_WHITE_LED, w) OPTARG(NEOPIXEL_LED, neo.brightness()))
|
||||
OPTARG(NEOPIXEL_IS_SEQUENTIAL, true)
|
||||
);
|
||||
}
|
||||
|
||||
|
@@ -197,7 +197,7 @@ void PrintJobRecovery::save(const bool force/*=false*/, const float zraise/*=POW
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if EXTRUDERS
|
||||
#if HAS_EXTRUDERS
|
||||
HOTEND_LOOP() info.target_temperature[e] = thermalManager.degTargetHotend(e);
|
||||
#endif
|
||||
|
||||
@@ -375,7 +375,7 @@ void PrintJobRecovery::resume() {
|
||||
|
||||
gcode.process_subcommands_now_P(PSTR("G92.9E0")); // Reset E to 0
|
||||
|
||||
#if Z_HOME_DIR > 0
|
||||
#if Z_HOME_TO_MAX
|
||||
|
||||
float z_now = z_raised;
|
||||
|
||||
@@ -549,7 +549,7 @@ void PrintJobRecovery::resume() {
|
||||
TERN_(HAS_HOME_OFFSET, home_offset = info.home_offset);
|
||||
TERN_(HAS_POSITION_SHIFT, position_shift = info.position_shift);
|
||||
#if HAS_HOME_OFFSET || HAS_POSITION_SHIFT
|
||||
LOOP_XYZ(i) update_workspace_offset((AxisEnum)i);
|
||||
LOOP_LINEAR_AXES(i) update_workspace_offset((AxisEnum)i);
|
||||
#endif
|
||||
|
||||
// Relative axis modes
|
||||
@@ -581,7 +581,7 @@ void PrintJobRecovery::resume() {
|
||||
if (info.valid_head) {
|
||||
if (info.valid_head == info.valid_foot) {
|
||||
DEBUG_ECHOPGM("current_position: ");
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
if (i) DEBUG_CHAR(',');
|
||||
DEBUG_DECIMAL(info.current_position[i]);
|
||||
}
|
||||
@@ -599,7 +599,7 @@ void PrintJobRecovery::resume() {
|
||||
|
||||
#if HAS_HOME_OFFSET
|
||||
DEBUG_ECHOPGM("home_offset: ");
|
||||
LOOP_XYZ(i) {
|
||||
LOOP_LINEAR_AXES(i) {
|
||||
if (i) DEBUG_CHAR(',');
|
||||
DEBUG_DECIMAL(info.home_offset[i]);
|
||||
}
|
||||
@@ -608,7 +608,7 @@ void PrintJobRecovery::resume() {
|
||||
|
||||
#if HAS_POSITION_SHIFT
|
||||
DEBUG_ECHOPGM("position_shift: ");
|
||||
LOOP_XYZ(i) {
|
||||
LOOP_LINEAR_AXES(i) {
|
||||
if (i) DEBUG_CHAR(',');
|
||||
DEBUG_DECIMAL(info.position_shift[i]);
|
||||
}
|
||||
|
@@ -211,7 +211,7 @@
|
||||
SERIAL_PRINTLN(data.drv_status, HEX);
|
||||
if (data.is_ot) SERIAL_ECHOLNPGM("overtemperature");
|
||||
if (data.is_s2g) SERIAL_ECHOLNPGM("coil short circuit");
|
||||
TERN_(TMC_DEBUG, tmc_report_all(true, true, true, true));
|
||||
TERN_(TMC_DEBUG, tmc_report_all());
|
||||
kill(PSTR("Driver error"));
|
||||
}
|
||||
#endif
|
||||
@@ -889,7 +889,7 @@
|
||||
* M122 report functions
|
||||
*/
|
||||
|
||||
void tmc_report_all(bool print_x, const bool print_y, const bool print_z, const bool print_e) {
|
||||
void tmc_report_all(const bool print_x/*=true*/, const bool print_y/*=true*/, const bool print_z/*=true*/, const bool print_e/*=true*/) {
|
||||
#define TMC_REPORT(LABEL, ITEM) do{ SERIAL_ECHOPGM(LABEL); tmc_debug_loop(ITEM, print_x, print_y, print_z, print_e); }while(0)
|
||||
#define DRV_REPORT(LABEL, ITEM) do{ SERIAL_ECHOPGM(LABEL); drv_status_loop(ITEM, print_x, print_y, print_z, print_e); }while(0)
|
||||
TMC_REPORT("\t", TMC_CODES);
|
||||
@@ -1214,7 +1214,7 @@ static bool test_connection(TMC &st) {
|
||||
return test_result;
|
||||
}
|
||||
|
||||
void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z, const bool test_e) {
|
||||
void test_tmc_connection(const bool test_x/*=true*/, const bool test_y/*=true*/, const bool test_z/*=true*/, const bool test_e/*=true*/) {
|
||||
uint8_t axis_connection = 0;
|
||||
|
||||
if (test_x) {
|
||||
|
@@ -70,15 +70,9 @@ class TMCStorage {
|
||||
}
|
||||
|
||||
struct {
|
||||
#if ENABLED(HAS_STEALTHCHOP)
|
||||
bool stealthChop_enabled = false;
|
||||
#endif
|
||||
#if ENABLED(HYBRID_THRESHOLD)
|
||||
uint8_t hybrid_thrs = 0;
|
||||
#endif
|
||||
#if ENABLED(USE_SENSORLESS)
|
||||
int16_t homing_thrs = 0;
|
||||
#endif
|
||||
OPTCODE(HAS_STEALTHCHOP, bool stealthChop_enabled = false)
|
||||
OPTCODE(HYBRID_THRESHOLD, uint8_t hybrid_thrs = 0)
|
||||
OPTCODE(USE_SENSORLESS, int16_t homing_thrs = 0)
|
||||
} stored;
|
||||
};
|
||||
|
||||
@@ -341,13 +335,13 @@ void tmc_print_current(TMC &st) {
|
||||
#endif
|
||||
|
||||
void monitor_tmc_drivers();
|
||||
void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z, const bool test_e);
|
||||
void test_tmc_connection(const bool test_x=true, const bool test_y=true, const bool test_z=true, const bool test_e=true);
|
||||
|
||||
#if ENABLED(TMC_DEBUG)
|
||||
#if ENABLED(MONITOR_DRIVER_STATUS)
|
||||
void tmc_set_report_interval(const uint16_t update_interval);
|
||||
#endif
|
||||
void tmc_report_all(const bool print_x, const bool print_y, const bool print_z, const bool print_e);
|
||||
void tmc_report_all(const bool print_x=true, const bool print_y=true, const bool print_z=true, const bool print_e=true);
|
||||
void tmc_get_registers(const bool print_x, const bool print_y, const bool print_z, const bool print_e);
|
||||
#endif
|
||||
|
||||
|
@@ -330,12 +330,8 @@ typedef struct {
|
||||
thermalManager.setTargetBed(bed_temp);
|
||||
|
||||
// Wait for the temperature to stabilize
|
||||
if (!thermalManager.wait_for_bed(true
|
||||
#if G26_CLICK_CAN_CANCEL
|
||||
, true
|
||||
#endif
|
||||
)
|
||||
) return G26_ERR;
|
||||
if (!thermalManager.wait_for_bed(true OPTARG(G26_CLICK_CAN_CANCEL, true)))
|
||||
return G26_ERR;
|
||||
}
|
||||
|
||||
#else
|
||||
@@ -352,11 +348,8 @@ typedef struct {
|
||||
thermalManager.setTargetHotend(hotend_temp, active_extruder);
|
||||
|
||||
// Wait for the temperature to stabilize
|
||||
if (!thermalManager.wait_for_hotend(active_extruder, true
|
||||
#if G26_CLICK_CAN_CANCEL
|
||||
, true
|
||||
#endif
|
||||
)) return G26_ERR;
|
||||
if (!thermalManager.wait_for_hotend(active_extruder, true OPTARG(G26_CLICK_CAN_CANCEL, true)))
|
||||
return G26_ERR;
|
||||
|
||||
#if HAS_WIRED_LCD
|
||||
ui.reset_status();
|
||||
|
@@ -73,7 +73,7 @@
|
||||
current_position.set(0.0, 0.0);
|
||||
sync_plan_position();
|
||||
|
||||
const int x_axis_home_dir = x_home_dir(active_extruder);
|
||||
const int x_axis_home_dir = TOOL_X_HOME_DIR(active_extruder);
|
||||
|
||||
const float mlx = max_length(X_AXIS),
|
||||
mly = max_length(Y_AXIS),
|
||||
@@ -220,7 +220,7 @@ void GcodeSuite::G28() {
|
||||
|
||||
#if ENABLED(MARLIN_DEV_MODE)
|
||||
if (parser.seen_test('S')) {
|
||||
LOOP_XYZ(a) set_axis_is_at_home((AxisEnum)a);
|
||||
LOOP_LINEAR_AXES(a) set_axis_is_at_home((AxisEnum)a);
|
||||
sync_plan_position();
|
||||
SERIAL_ECHOLNPGM("Simulated Homing");
|
||||
report_current_position();
|
||||
|
@@ -347,7 +347,7 @@ static float auto_tune_a() {
|
||||
abc_float_t delta_e = { 0.0f }, delta_t = { 0.0f };
|
||||
|
||||
delta_t.reset();
|
||||
LOOP_XYZ(axis) {
|
||||
LOOP_LINEAR_AXES(axis) {
|
||||
delta_t[axis] = diff;
|
||||
calc_kinematics_diff_probe_points(z_pt, delta_e, delta_r, delta_t);
|
||||
delta_t[axis] = 0;
|
||||
@@ -525,7 +525,7 @@ void GcodeSuite::G33() {
|
||||
|
||||
case 1:
|
||||
test_precision = 0.0f; // forced end
|
||||
LOOP_XYZ(axis) e_delta[axis] = +Z4(CEN);
|
||||
LOOP_LINEAR_AXES(axis) e_delta[axis] = +Z4(CEN);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
@@ -573,14 +573,14 @@ void GcodeSuite::G33() {
|
||||
// Normalize angles to least-squares
|
||||
if (_angle_results) {
|
||||
float a_sum = 0.0f;
|
||||
LOOP_XYZ(axis) a_sum += delta_tower_angle_trim[axis];
|
||||
LOOP_XYZ(axis) delta_tower_angle_trim[axis] -= a_sum / 3.0f;
|
||||
LOOP_LINEAR_AXES(axis) a_sum += delta_tower_angle_trim[axis];
|
||||
LOOP_LINEAR_AXES(axis) delta_tower_angle_trim[axis] -= a_sum / 3.0f;
|
||||
}
|
||||
|
||||
// adjust delta_height and endstops by the max amount
|
||||
const float z_temp = _MAX(delta_endstop_adj.a, delta_endstop_adj.b, delta_endstop_adj.c);
|
||||
delta_height -= z_temp;
|
||||
LOOP_XYZ(axis) delta_endstop_adj[axis] -= z_temp;
|
||||
LOOP_LINEAR_AXES(axis) delta_endstop_adj[axis] -= z_temp;
|
||||
}
|
||||
recalc_delta_settings();
|
||||
NOMORE(zero_std_dev_min, zero_std_dev);
|
||||
|
@@ -194,16 +194,20 @@ float measuring_movement(const AxisEnum axis, const int dir, const bool stop_sta
|
||||
inline float measure(const AxisEnum axis, const int dir, const bool stop_state, float * const backlash_ptr, const float uncertainty) {
|
||||
const bool fast = uncertainty == CALIBRATION_MEASUREMENT_UNKNOWN;
|
||||
|
||||
// Save position
|
||||
destination = current_position;
|
||||
const float start_pos = destination[axis];
|
||||
// Save the current position of the specified axis
|
||||
const float start_pos = current_position[axis];
|
||||
|
||||
// Take a measurement. Only the specified axis will be affected.
|
||||
const float measured_pos = measuring_movement(axis, dir, stop_state, fast);
|
||||
|
||||
// Measure backlash
|
||||
if (backlash_ptr && !fast) {
|
||||
const float release_pos = measuring_movement(axis, -dir, !stop_state, fast);
|
||||
*backlash_ptr = ABS(release_pos - measured_pos);
|
||||
}
|
||||
// Return to starting position
|
||||
|
||||
// Move back to the starting position
|
||||
destination = current_position;
|
||||
destination[axis] = start_pos;
|
||||
do_blocking_move_to(destination, MMM_TO_MMS(CALIBRATION_FEEDRATE_TRAVEL));
|
||||
return measured_pos;
|
||||
@@ -235,12 +239,12 @@ inline void probe_side(measurements_t &m, const float uncertainty, const side_t
|
||||
}
|
||||
#endif
|
||||
#if AXIS_CAN_CALIBRATE(X)
|
||||
case RIGHT: dir = -1;
|
||||
case LEFT: axis = X_AXIS; break;
|
||||
case RIGHT: axis = X_AXIS; dir = -1; break;
|
||||
#endif
|
||||
#if AXIS_CAN_CALIBRATE(Y)
|
||||
case BACK: dir = -1;
|
||||
case FRONT: axis = Y_AXIS; break;
|
||||
case BACK: axis = Y_AXIS; dir = -1; break;
|
||||
#endif
|
||||
default: return;
|
||||
}
|
||||
@@ -303,16 +307,8 @@ inline void probe_sides(measurements_t &m, const float uncertainty) {
|
||||
|
||||
// The difference between the known and the measured location
|
||||
// of the calibration object is the positional error
|
||||
m.pos_error.x = (0
|
||||
#if HAS_X_CENTER
|
||||
+ true_center.x - m.obj_center.x
|
||||
#endif
|
||||
);
|
||||
m.pos_error.y = (0
|
||||
#if HAS_Y_CENTER
|
||||
+ true_center.y - m.obj_center.y
|
||||
#endif
|
||||
);
|
||||
m.pos_error.x = TERN0(HAS_X_CENTER, true_center.x - m.obj_center.x);
|
||||
m.pos_error.y = TERN0(HAS_Y_CENTER, true_center.y - m.obj_center.y);
|
||||
m.pos_error.z = true_center.z - m.obj_center.z;
|
||||
}
|
||||
|
||||
@@ -589,12 +585,12 @@ void GcodeSuite::G425() {
|
||||
SET_SOFT_ENDSTOP_LOOSE(true);
|
||||
|
||||
measurements_t m;
|
||||
float uncertainty = parser.seenval('U') ? parser.value_float() : CALIBRATION_MEASUREMENT_UNCERTAIN;
|
||||
const float uncertainty = parser.floatval('U', CALIBRATION_MEASUREMENT_UNCERTAIN);
|
||||
|
||||
if (parser.seen('B'))
|
||||
if (parser.seen_test('B'))
|
||||
calibrate_backlash(m, uncertainty);
|
||||
else if (parser.seen('T'))
|
||||
calibrate_toolhead(m, uncertainty, parser.has_value() ? parser.value_int() : active_extruder);
|
||||
else if (parser.seen_test('T'))
|
||||
calibrate_toolhead(m, uncertainty, parser.intval('T', active_extruder));
|
||||
#if ENABLED(CALIBRATION_REPORTING)
|
||||
else if (parser.seen('V')) {
|
||||
probe_sides(m, uncertainty);
|
||||
|
@@ -55,8 +55,8 @@ void GcodeSuite::M425() {
|
||||
}
|
||||
};
|
||||
|
||||
LOOP_XYZ(a) {
|
||||
if (axis_can_calibrate(a) && parser.seen(XYZ_CHAR(a))) {
|
||||
LOOP_LINEAR_AXES(a) {
|
||||
if (axis_can_calibrate(a) && parser.seen(AXIS_CHAR(a))) {
|
||||
planner.synchronize();
|
||||
backlash.distance_mm[a] = parser.has_value() ? parser.value_linear_units() : backlash.get_measurement(AxisEnum(a));
|
||||
noArgs = false;
|
||||
@@ -83,8 +83,8 @@ void GcodeSuite::M425() {
|
||||
SERIAL_ECHOLNPGM("active:");
|
||||
SERIAL_ECHOLNPAIR(" Correction Amount/Fade-out: F", backlash.get_correction(), " (F1.0 = full, F0.0 = none)");
|
||||
SERIAL_ECHOPGM(" Backlash Distance (mm): ");
|
||||
LOOP_XYZ(a) if (axis_can_calibrate(a)) {
|
||||
SERIAL_CHAR(' ', XYZ_CHAR(a));
|
||||
LOOP_LINEAR_AXES(a) if (axis_can_calibrate(a)) {
|
||||
SERIAL_CHAR(' ', AXIS_CHAR(a));
|
||||
SERIAL_ECHO(backlash.distance_mm[a]);
|
||||
SERIAL_EOL();
|
||||
}
|
||||
@@ -96,8 +96,8 @@ void GcodeSuite::M425() {
|
||||
#if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
|
||||
SERIAL_ECHOPGM(" Average measured backlash (mm):");
|
||||
if (backlash.has_any_measurement()) {
|
||||
LOOP_XYZ(a) if (axis_can_calibrate(a) && backlash.has_measurement(AxisEnum(a))) {
|
||||
SERIAL_CHAR(' ', XYZ_CHAR(a));
|
||||
LOOP_LINEAR_AXES(a) if (axis_can_calibrate(a) && backlash.has_measurement(AxisEnum(a))) {
|
||||
SERIAL_CHAR(' ', AXIS_CHAR(a));
|
||||
SERIAL_ECHO(backlash.get_measurement(AxisEnum(a)));
|
||||
}
|
||||
}
|
||||
|
@@ -39,11 +39,11 @@
|
||||
*/
|
||||
void GcodeSuite::M666() {
|
||||
DEBUG_SECTION(log_M666, "M666", DEBUGGING(LEVELING));
|
||||
LOOP_XYZ(i) {
|
||||
if (parser.seen(XYZ_CHAR(i))) {
|
||||
LOOP_LINEAR_AXES(i) {
|
||||
if (parser.seen(AXIS_CHAR(i))) {
|
||||
const float v = parser.value_linear_units();
|
||||
if (v * Z_HOME_DIR <= 0) delta_endstop_adj[i] = v;
|
||||
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("delta_endstop_adj[", AS_CHAR(XYZ_CHAR(i)), "] = ", delta_endstop_adj[i]);
|
||||
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("delta_endstop_adj[", AS_CHAR(AXIS_CHAR(i)), "] = ", delta_endstop_adj[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -86,7 +86,7 @@ void GcodeSuite::M852() {
|
||||
|
||||
// When skew is changed the current position changes
|
||||
if (setval) {
|
||||
set_current_from_steppers_for_axis(ALL_AXES);
|
||||
set_current_from_steppers_for_axis(ALL_AXES_ENUM);
|
||||
sync_plan_position();
|
||||
report_current_position();
|
||||
}
|
||||
|
@@ -86,8 +86,8 @@ void GcodeSuite::M201() {
|
||||
if (parser.seenval('G')) planner.xy_freq_min_speed_factor = constrain(parser.value_float(), 1, 100) / 100;
|
||||
#endif
|
||||
|
||||
LOOP_XYZE(i) {
|
||||
if (parser.seen(axis_codes[i])) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
if (parser.seenval(axis_codes[i])) {
|
||||
const uint8_t a = (i == E_AXIS ? uint8_t(E_AXIS_N(target_extruder)) : i);
|
||||
planner.set_max_acceleration(a, parser.value_axis_units((AxisEnum)a));
|
||||
}
|
||||
@@ -104,8 +104,8 @@ void GcodeSuite::M203() {
|
||||
const int8_t target_extruder = get_target_extruder_from_command();
|
||||
if (target_extruder < 0) return;
|
||||
|
||||
LOOP_XYZE(i)
|
||||
if (parser.seen(axis_codes[i])) {
|
||||
LOOP_LOGICAL_AXES(i)
|
||||
if (parser.seenval(axis_codes[i])) {
|
||||
const uint8_t a = (i == E_AXIS ? uint8_t(E_AXIS_N(target_extruder)) : i);
|
||||
planner.set_max_feedrate(a, parser.value_axis_units((AxisEnum)a));
|
||||
}
|
||||
@@ -147,24 +147,14 @@ void GcodeSuite::M204() {
|
||||
* J = Junction Deviation (mm) (If not using CLASSIC_JERK)
|
||||
*/
|
||||
void GcodeSuite::M205() {
|
||||
#if HAS_JUNCTION_DEVIATION
|
||||
#define J_PARAM "J"
|
||||
#else
|
||||
#define J_PARAM
|
||||
#endif
|
||||
#if HAS_CLASSIC_JERK
|
||||
#define XYZE_PARAM "XYZE"
|
||||
#else
|
||||
#define XYZE_PARAM
|
||||
#endif
|
||||
if (!parser.seen("BST" J_PARAM XYZE_PARAM)) return;
|
||||
if (!parser.seen("BST" TERN_(HAS_JUNCTION_DEVIATION, "J") TERN_(HAS_CLASSIC_JERK, "XYZE"))) return;
|
||||
|
||||
//planner.synchronize();
|
||||
if (parser.seen('B')) planner.settings.min_segment_time_us = parser.value_ulong();
|
||||
if (parser.seen('S')) planner.settings.min_feedrate_mm_s = parser.value_linear_units();
|
||||
if (parser.seen('T')) planner.settings.min_travel_feedrate_mm_s = parser.value_linear_units();
|
||||
if (parser.seenval('B')) planner.settings.min_segment_time_us = parser.value_ulong();
|
||||
if (parser.seenval('S')) planner.settings.min_feedrate_mm_s = parser.value_linear_units();
|
||||
if (parser.seenval('T')) planner.settings.min_travel_feedrate_mm_s = parser.value_linear_units();
|
||||
#if HAS_JUNCTION_DEVIATION
|
||||
if (parser.seen('J')) {
|
||||
if (parser.seenval('J')) {
|
||||
const float junc_dev = parser.value_linear_units();
|
||||
if (WITHIN(junc_dev, 0.01f, 0.3f)) {
|
||||
planner.junction_deviation_mm = junc_dev;
|
||||
@@ -175,9 +165,9 @@ void GcodeSuite::M205() {
|
||||
}
|
||||
#endif
|
||||
#if HAS_CLASSIC_JERK
|
||||
if (parser.seen('X')) planner.set_max_jerk(X_AXIS, parser.value_linear_units());
|
||||
if (parser.seen('Y')) planner.set_max_jerk(Y_AXIS, parser.value_linear_units());
|
||||
if (parser.seen('Z')) {
|
||||
if (parser.seenval('X')) planner.set_max_jerk(X_AXIS, parser.value_linear_units());
|
||||
if (parser.seenval('Y')) planner.set_max_jerk(Y_AXIS, parser.value_linear_units());
|
||||
if (parser.seenval('Z')) {
|
||||
planner.set_max_jerk(Z_AXIS, parser.value_linear_units());
|
||||
#if HAS_MESH && DISABLED(LIMITED_JERK_EDITING)
|
||||
if (planner.max_jerk.z <= 0.1f)
|
||||
@@ -185,7 +175,7 @@ void GcodeSuite::M205() {
|
||||
#endif
|
||||
}
|
||||
#if HAS_CLASSIC_E_JERK
|
||||
if (parser.seen('E')) planner.set_max_jerk(E_AXIS, parser.value_linear_units());
|
||||
if (parser.seenval('E')) planner.set_max_jerk(E_AXIS, parser.value_linear_units());
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
@@ -23,7 +23,7 @@
|
||||
#include "../gcode.h"
|
||||
#include "../../module/planner.h"
|
||||
|
||||
#if EXTRUDERS
|
||||
#if HAS_EXTRUDERS
|
||||
|
||||
/**
|
||||
* M221: Set extrusion percentage (M221 T0 S95)
|
||||
|
@@ -42,7 +42,7 @@ void report_M92(const bool echo=true, const int8_t e=-1) {
|
||||
}
|
||||
#endif
|
||||
|
||||
UNUSED_E(e);
|
||||
UNUSED(e);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -64,13 +64,10 @@ void GcodeSuite::M92() {
|
||||
if (target_extruder < 0) return;
|
||||
|
||||
// No arguments? Show M92 report.
|
||||
if (!parser.seen("XYZE"
|
||||
#if ENABLED(MAGIC_NUMBERS_GCODE)
|
||||
"HL"
|
||||
#endif
|
||||
)) return report_M92(true, target_extruder);
|
||||
if (!parser.seen("XYZE" TERN_(MAGIC_NUMBERS_GCODE, "HL")))
|
||||
return report_M92(true, target_extruder);
|
||||
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
if (parser.seenval(axis_codes[i])) {
|
||||
if (i == E_AXIS) {
|
||||
const float value = parser.value_per_axis_units((AxisEnum)(E_AXIS_N(target_extruder)));
|
||||
|
@@ -34,10 +34,10 @@
|
||||
*/
|
||||
void GcodeSuite::M17() {
|
||||
if (parser.seen("XYZE")) {
|
||||
if (parser.seen('X')) ENABLE_AXIS_X();
|
||||
if (parser.seen('Y')) ENABLE_AXIS_Y();
|
||||
if (parser.seen('Z')) ENABLE_AXIS_Z();
|
||||
if (TERN0(HAS_E_STEPPER_ENABLE, parser.seen('E'))) enable_e_steppers();
|
||||
if (parser.seen_test('X')) ENABLE_AXIS_X();
|
||||
if (parser.seen_test('Y')) ENABLE_AXIS_Y();
|
||||
if (parser.seen_test('Z')) ENABLE_AXIS_Z();
|
||||
if (TERN0(HAS_E_STEPPER_ENABLE, parser.seen_test('E'))) enable_e_steppers();
|
||||
}
|
||||
else {
|
||||
LCD_MESSAGEPGM(MSG_NO_MOVE);
|
||||
@@ -56,10 +56,10 @@ void GcodeSuite::M18_M84() {
|
||||
else {
|
||||
if (parser.seen("XYZE")) {
|
||||
planner.synchronize();
|
||||
if (parser.seen('X')) DISABLE_AXIS_X();
|
||||
if (parser.seen('Y')) DISABLE_AXIS_Y();
|
||||
if (parser.seen('Z')) DISABLE_AXIS_Z();
|
||||
if (TERN0(HAS_E_STEPPER_ENABLE, parser.seen('E'))) disable_e_steppers();
|
||||
if (parser.seen_test('X')) DISABLE_AXIS_X();
|
||||
if (parser.seen_test('Y')) DISABLE_AXIS_Y();
|
||||
if (parser.seen_test('Z')) DISABLE_AXIS_Z();
|
||||
if (TERN0(HAS_E_STEPPER_ENABLE, parser.seen_test('E'))) disable_e_steppers();
|
||||
}
|
||||
else
|
||||
planner.finish_and_disable();
|
||||
|
@@ -39,8 +39,8 @@ void GcodeSuite::M211() {
|
||||
SERIAL_ECHOPGM(STR_SOFT_ENDSTOPS);
|
||||
if (parser.seen('S')) soft_endstop._enabled = parser.value_bool();
|
||||
serialprint_onoff(soft_endstop._enabled);
|
||||
print_xyz(l_soft_min, PSTR(STR_SOFT_MIN), PSTR(" "));
|
||||
print_xyz(l_soft_max, PSTR(STR_SOFT_MAX));
|
||||
print_pos(l_soft_min, PSTR(STR_SOFT_MIN), PSTR(" "));
|
||||
print_pos(l_soft_max, PSTR(STR_SOFT_MAX));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -34,7 +34,7 @@
|
||||
*/
|
||||
void GcodeSuite::M350() {
|
||||
if (parser.seen('S')) LOOP_LE_N(i, 4) stepper.microstep_mode(i, parser.value_byte());
|
||||
LOOP_XYZE(i) if (parser.seen(axis_codes[i])) stepper.microstep_mode(i, parser.value_byte());
|
||||
LOOP_LOGICAL_AXES(i) if (parser.seen(axis_codes[i])) stepper.microstep_mode(i, parser.value_byte());
|
||||
if (parser.seen('B')) stepper.microstep_mode(4, parser.value_byte());
|
||||
stepper.microstep_readings();
|
||||
}
|
||||
@@ -46,15 +46,15 @@ void GcodeSuite::M350() {
|
||||
void GcodeSuite::M351() {
|
||||
if (parser.seenval('S')) switch (parser.value_byte()) {
|
||||
case 1:
|
||||
LOOP_XYZE(i) if (parser.seenval(axis_codes[i])) stepper.microstep_ms(i, parser.value_byte(), -1, -1);
|
||||
LOOP_LOGICAL_AXES(i) if (parser.seenval(axis_codes[i])) stepper.microstep_ms(i, parser.value_byte(), -1, -1);
|
||||
if (parser.seenval('B')) stepper.microstep_ms(4, parser.value_byte(), -1, -1);
|
||||
break;
|
||||
case 2:
|
||||
LOOP_XYZE(i) if (parser.seenval(axis_codes[i])) stepper.microstep_ms(i, -1, parser.value_byte(), -1);
|
||||
LOOP_LOGICAL_AXES(i) if (parser.seenval(axis_codes[i])) stepper.microstep_ms(i, -1, parser.value_byte(), -1);
|
||||
if (parser.seenval('B')) stepper.microstep_ms(4, -1, parser.value_byte(), -1);
|
||||
break;
|
||||
case 3:
|
||||
LOOP_XYZE(i) if (parser.seenval(axis_codes[i])) stepper.microstep_ms(i, -1, -1, parser.value_byte());
|
||||
LOOP_LOGICAL_AXES(i) if (parser.seenval(axis_codes[i])) stepper.microstep_ms(i, -1, -1, parser.value_byte());
|
||||
if (parser.seenval('B')) stepper.microstep_ms(4, -1, -1, parser.value_byte());
|
||||
break;
|
||||
}
|
||||
|
@@ -141,7 +141,7 @@
|
||||
|
||||
HOTEND_LOOP() {
|
||||
DEBUG_ECHOPAIR_P(SP_T_STR, e);
|
||||
LOOP_XYZ(a) DEBUG_ECHOPAIR(" hotend_offset[", e, "].", AS_CHAR(XYZ_CHAR(a) | 0x20), "=", hotend_offset[e][a]);
|
||||
LOOP_LINEAR_AXES(a) DEBUG_ECHOPAIR(" hotend_offset[", e, "].", AS_CHAR(AXIS_CHAR(a) | 0x20), "=", hotend_offset[e][a]);
|
||||
DEBUG_EOL();
|
||||
}
|
||||
DEBUG_EOL();
|
||||
|
@@ -234,7 +234,7 @@ void GcodeSuite::M906() {
|
||||
const uint8_t index = parser.byteval('I');
|
||||
#endif
|
||||
|
||||
LOOP_XYZE(i) if (uint16_t value = parser.intval(axis_codes[i])) {
|
||||
LOOP_LOGICAL_AXES(i) if (uint16_t value = parser.intval(axis_codes[i])) {
|
||||
|
||||
report_current = false;
|
||||
|
||||
|
@@ -44,7 +44,7 @@
|
||||
void GcodeSuite::M907() {
|
||||
#if HAS_MOTOR_CURRENT_SPI
|
||||
|
||||
LOOP_XYZE(i) if (parser.seenval(axis_codes[i])) stepper.set_digipot_current(i, parser.value_int());
|
||||
LOOP_LOGICAL_AXES(i) if (parser.seenval(axis_codes[i])) stepper.set_digipot_current(i, parser.value_int());
|
||||
if (parser.seenval('B')) stepper.set_digipot_current(4, parser.value_int());
|
||||
if (parser.seenval('S')) LOOP_LE_N(i, 4) stepper.set_digipot_current(i, parser.value_int());
|
||||
|
||||
@@ -64,7 +64,7 @@ void GcodeSuite::M907() {
|
||||
|
||||
#if HAS_MOTOR_CURRENT_I2C
|
||||
// this one uses actual amps in floating point
|
||||
LOOP_XYZE(i) if (parser.seenval(axis_codes[i])) digipot_i2c.set_current(i, parser.value_float());
|
||||
LOOP_LOGICAL_AXES(i) if (parser.seenval(axis_codes[i])) digipot_i2c.set_current(i, parser.value_float());
|
||||
// Additional extruders use B,C,D for channels 4,5,6.
|
||||
// TODO: Change these parameters because 'E' is used. B<index>?
|
||||
for (uint8_t i = E_AXIS + 1; i < DIGIPOT_I2C_NUM_CHANNELS; i++)
|
||||
@@ -76,7 +76,7 @@ void GcodeSuite::M907() {
|
||||
const float dac_percent = parser.value_float();
|
||||
LOOP_LE_N(i, 4) stepper_dac.set_current_percent(i, dac_percent);
|
||||
}
|
||||
LOOP_XYZE(i) if (parser.seenval(axis_codes[i])) stepper_dac.set_current_percent(i, parser.value_float());
|
||||
LOOP_LOGICAL_AXES(i) if (parser.seenval(axis_codes[i])) stepper_dac.set_current_percent(i, parser.value_float());
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -66,12 +66,12 @@ void GcodeSuite::M150() {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
const LEDColor color = MakeLEDColor(
|
||||
const LEDColor color = LEDColor(
|
||||
parser.seen('R') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
|
||||
parser.seen('U') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
|
||||
parser.seen('B') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
|
||||
parser.seen('W') ? (parser.has_value() ? parser.value_byte() : 255) : 0,
|
||||
parser.seen('P') ? (parser.has_value() ? parser.value_byte() : 255) : brightness
|
||||
parser.seen('B') ? (parser.has_value() ? parser.value_byte() : 255) : 0
|
||||
OPTARG(HAS_WHITE_LED, parser.seen('W') ? (parser.has_value() ? parser.value_byte() : 255) : 0)
|
||||
OPTARG(NEOPIXEL_LED, parser.seen('P') ? (parser.has_value() ? parser.value_byte() : 255) : brightness)
|
||||
);
|
||||
|
||||
#if ENABLED(NEOPIXEL2_SEPARATE)
|
||||
|
@@ -71,11 +71,11 @@ void GcodeSuite::G61(void) {
|
||||
else {
|
||||
if (parser.seen("XYZ")) {
|
||||
DEBUG_ECHOPAIR(STR_RESTORING_POS " S", slot);
|
||||
LOOP_XYZ(i) {
|
||||
destination[i] = parser.seen(XYZ_CHAR(i))
|
||||
LOOP_LINEAR_AXES(i) {
|
||||
destination[i] = parser.seen(AXIS_CHAR(i))
|
||||
? stored_position[slot][i] + parser.value_axis_units((AxisEnum)i)
|
||||
: current_position[i];
|
||||
DEBUG_CHAR(' ', XYZ_CHAR(i));
|
||||
DEBUG_CHAR(' ', AXIS_CHAR(i));
|
||||
DEBUG_ECHO_F(destination[i]);
|
||||
}
|
||||
DEBUG_EOL();
|
||||
|
@@ -32,12 +32,12 @@
|
||||
* M122: Debug TMC drivers
|
||||
*/
|
||||
void GcodeSuite::M122() {
|
||||
xyze_bool_t print_axis = ARRAY_N_1(XYZE, false);
|
||||
xyze_bool_t print_axis = ARRAY_N_1(LOGICAL_AXES, false);
|
||||
|
||||
bool print_all = true;
|
||||
LOOP_XYZE(i) if (parser.seen(axis_codes[i])) { print_axis[i] = true; print_all = false; }
|
||||
LOOP_LOGICAL_AXES(i) if (parser.seen(axis_codes[i])) { print_axis[i] = true; print_all = false; }
|
||||
|
||||
if (print_all) LOOP_XYZE(i) print_axis[i] = true;
|
||||
if (print_all) LOOP_LOGICAL_AXES(i) print_axis[i] = true;
|
||||
|
||||
if (parser.boolval('I')) restore_stepper_drivers();
|
||||
|
||||
|
@@ -50,7 +50,7 @@ static void set_stealth_status(const bool enable, const int8_t target_extruder)
|
||||
const uint8_t index = parser.byteval('I');
|
||||
#endif
|
||||
|
||||
LOOP_XYZE(i) if (parser.seen(axis_codes[i])) {
|
||||
LOOP_LOGICAL_AXES(i) if (parser.seen(axis_codes[i])) {
|
||||
switch (i) {
|
||||
case X_AXIS:
|
||||
#if AXIS_HAS_STEALTHCHOP(X)
|
||||
|
@@ -52,7 +52,7 @@ void GcodeSuite::M906() {
|
||||
const uint8_t index = parser.byteval('I');
|
||||
#endif
|
||||
|
||||
LOOP_XYZE(i) if (uint16_t value = parser.intval(axis_codes[i])) {
|
||||
LOOP_LOGICAL_AXES(i) if (uint16_t value = parser.intval(axis_codes[i])) {
|
||||
report = false;
|
||||
switch (i) {
|
||||
case X_AXIS:
|
||||
|
@@ -35,10 +35,19 @@
|
||||
#define M91x_USE(ST) (AXIS_DRIVER_TYPE(ST, TMC2130) || AXIS_DRIVER_TYPE(ST, TMC2160) || AXIS_DRIVER_TYPE(ST, TMC2208) || AXIS_DRIVER_TYPE(ST, TMC2209) || AXIS_DRIVER_TYPE(ST, TMC2660) || AXIS_DRIVER_TYPE(ST, TMC5130) || AXIS_DRIVER_TYPE(ST, TMC5160))
|
||||
#define M91x_USE_E(N) (E_STEPPERS > N && M91x_USE(E##N))
|
||||
|
||||
#define M91x_SOME_X (M91x_USE(X) || M91x_USE(X2))
|
||||
#define M91x_SOME_Y (M91x_USE(Y) || M91x_USE(Y2))
|
||||
#define M91x_SOME_Z (M91x_USE(Z) || M91x_USE(Z2) || M91x_USE(Z3) || M91x_USE(Z4))
|
||||
#define M91x_SOME_E (M91x_USE_E(0) || M91x_USE_E(1) || M91x_USE_E(2) || M91x_USE_E(3) || M91x_USE_E(4) || M91x_USE_E(5) || M91x_USE_E(6) || M91x_USE_E(7))
|
||||
#if M91x_USE(X) || M91x_USE(X2)
|
||||
#define M91x_SOME_X 1
|
||||
#endif
|
||||
#if M91x_USE(Y) || M91x_USE(Y2)
|
||||
#define M91x_SOME_Y 1
|
||||
#endif
|
||||
#if M91x_USE(Z) || M91x_USE(Z2) || M91x_USE(Z3) || M91x_USE(Z4)
|
||||
#define M91x_SOME_Z 1
|
||||
#endif
|
||||
|
||||
#if M91x_USE_E(0) || M91x_USE_E(1) || M91x_USE_E(2) || M91x_USE_E(3) || M91x_USE_E(4) || M91x_USE_E(5) || M91x_USE_E(6) || M91x_USE_E(7)
|
||||
#define M91x_SOME_E 1
|
||||
#endif
|
||||
|
||||
#if !M91x_SOME_X && !M91x_SOME_Y && !M91x_SOME_Z && !M91x_SOME_E
|
||||
#error "MONITOR_DRIVER_STATUS requires at least one TMC2130, 2160, 2208, 2209, 2660, 5130, or 5160."
|
||||
@@ -112,31 +121,12 @@
|
||||
* M912 E1 ; clear E1 only
|
||||
*/
|
||||
void GcodeSuite::M912() {
|
||||
#if M91x_SOME_X
|
||||
const bool hasX = parser.seen(axis_codes.x);
|
||||
#else
|
||||
constexpr bool hasX = false;
|
||||
#endif
|
||||
const bool hasX = TERN0(M91x_SOME_X, parser.seen(axis_codes.x)),
|
||||
hasY = TERN0(M91x_SOME_Y, parser.seen(axis_codes.y)),
|
||||
hasZ = TERN0(M91x_SOME_Z, parser.seen(axis_codes.z)),
|
||||
hasE = TERN0(M91x_SOME_E, parser.seen(axis_codes.e));
|
||||
|
||||
#if M91x_SOME_Y
|
||||
const bool hasY = parser.seen(axis_codes.y);
|
||||
#else
|
||||
constexpr bool hasY = false;
|
||||
#endif
|
||||
|
||||
#if M91x_SOME_Z
|
||||
const bool hasZ = parser.seen(axis_codes.z);
|
||||
#else
|
||||
constexpr bool hasZ = false;
|
||||
#endif
|
||||
|
||||
#if M91x_SOME_E
|
||||
const bool hasE = parser.seen(axis_codes.e);
|
||||
#else
|
||||
constexpr bool hasE = false;
|
||||
#endif
|
||||
|
||||
const bool hasNone = !hasX && !hasY && !hasZ && !hasE;
|
||||
const bool hasNone = !hasE && !hasX && !hasY && !hasZ;
|
||||
|
||||
#if M91x_SOME_X
|
||||
const int8_t xval = int8_t(parser.byteval(axis_codes.x, 0xFF));
|
||||
@@ -219,7 +209,7 @@
|
||||
#if AXIS_IS_TMC(X) || AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3) || AXIS_IS_TMC(Z4)
|
||||
const uint8_t index = parser.byteval('I');
|
||||
#endif
|
||||
LOOP_XYZE(i) if (int32_t value = parser.longval(axis_codes[i])) {
|
||||
LOOP_LOGICAL_AXES(i) if (int32_t value = parser.longval(axis_codes[i])) {
|
||||
report = false;
|
||||
switch (i) {
|
||||
case X_AXIS:
|
||||
@@ -348,7 +338,7 @@
|
||||
|
||||
bool report = true;
|
||||
const uint8_t index = parser.byteval('I');
|
||||
LOOP_XYZ(i) if (parser.seen(XYZ_CHAR(i))) {
|
||||
LOOP_LINEAR_AXES(i) if (parser.seen(AXIS_CHAR(i))) {
|
||||
const int16_t value = parser.value_int();
|
||||
report = false;
|
||||
switch (i) {
|
||||
|
@@ -140,7 +140,7 @@ int8_t GcodeSuite::get_target_e_stepper_from_command() {
|
||||
* - Set the feedrate, if included
|
||||
*/
|
||||
void GcodeSuite::get_destination_from_command() {
|
||||
xyze_bool_t seen = { false, false, false, false };
|
||||
xyze_bool_t seen{false};
|
||||
|
||||
#if ENABLED(CANCEL_OBJECTS)
|
||||
const bool &skip_move = cancelable.skipping;
|
||||
@@ -149,8 +149,8 @@ void GcodeSuite::get_destination_from_command() {
|
||||
#endif
|
||||
|
||||
// Get new XYZ position, whether absolute or relative
|
||||
LOOP_XYZ(i) {
|
||||
if ( (seen[i] = parser.seenval(XYZ_CHAR(i))) ) {
|
||||
LOOP_LINEAR_AXES(i) {
|
||||
if ( (seen[i] = parser.seenval(AXIS_CHAR(i))) ) {
|
||||
const float v = parser.value_axis_units((AxisEnum)i);
|
||||
if (skip_move)
|
||||
destination[i] = current_position[i];
|
||||
@@ -520,7 +520,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
|
||||
case 100: M100(); break; // M100: Free Memory Report
|
||||
#endif
|
||||
|
||||
#if EXTRUDERS
|
||||
#if HAS_EXTRUDERS
|
||||
case 104: M104(); break; // M104: Set hot end temperature
|
||||
case 109: M109(); break; // M109: Wait for hotend temperature to reach target
|
||||
#endif
|
||||
@@ -566,7 +566,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
|
||||
#endif
|
||||
|
||||
#if ENABLED(AUTO_REPORT_POSITION)
|
||||
case 154: M154(); break; // M155: Set position auto-report interval
|
||||
case 154: M154(); break; // M154: Set position auto-report interval
|
||||
#endif
|
||||
|
||||
#if BOTH(AUTO_REPORT_TEMPERATURES, HAS_TEMP_SENSOR)
|
||||
@@ -596,14 +596,18 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
|
||||
#endif
|
||||
case 81: M81(); break; // M81: Turn off Power, including Power Supply, if possible
|
||||
|
||||
case 82: M82(); break; // M82: Set E axis normal mode (same as other axes)
|
||||
case 83: M83(); break; // M83: Set E axis relative mode
|
||||
#if HAS_EXTRUDERS
|
||||
case 82: M82(); break; // M82: Set E axis normal mode (same as other axes)
|
||||
case 83: M83(); break; // M83: Set E axis relative mode
|
||||
#endif
|
||||
case 18: case 84: M18_M84(); break; // M18/M84: Disable Steppers / Set Timeout
|
||||
case 85: M85(); break; // M85: Set inactivity stepper shutdown timeout
|
||||
case 92: M92(); break; // M92: Set the steps-per-unit for one or more axes
|
||||
case 114: M114(); break; // M114: Report current position
|
||||
case 115: M115(); break; // M115: Report capabilities
|
||||
case 117: M117(); break; // M117: Set LCD message text, if possible
|
||||
|
||||
case 117: TERN_(HAS_STATUS_MESSAGE, M117()); break; // M117: Set LCD message text, if possible
|
||||
|
||||
case 118: M118(); break; // M118: Display a message in the host console
|
||||
case 119: M119(); break; // M119: Report endstop states
|
||||
case 120: M120(); break; // M120: Enable endstops
|
||||
@@ -674,7 +678,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
|
||||
|
||||
case 220: M220(); break; // M220: Set Feedrate Percentage: S<percent> ("FR" on your LCD)
|
||||
|
||||
#if EXTRUDERS
|
||||
#if HAS_EXTRUDERS
|
||||
case 221: M221(); break; // M221: Set Flow Percentage
|
||||
#endif
|
||||
|
||||
|
@@ -633,10 +633,13 @@ private:
|
||||
#if ENABLED(PSU_CONTROL)
|
||||
static void M80();
|
||||
#endif
|
||||
|
||||
static void M81();
|
||||
static void M82();
|
||||
static void M83();
|
||||
|
||||
#if HAS_EXTRUDERS
|
||||
static void M82();
|
||||
static void M83();
|
||||
#endif
|
||||
|
||||
static void M85();
|
||||
static void M92();
|
||||
|
||||
@@ -644,9 +647,10 @@ private:
|
||||
static void M100();
|
||||
#endif
|
||||
|
||||
#if EXTRUDERS
|
||||
static void M104();
|
||||
static void M109();
|
||||
#if HAS_EXTRUDERS
|
||||
static void M104_M109(const bool isM109);
|
||||
FORCE_INLINE static void M104() { M104_M109(false); }
|
||||
FORCE_INLINE static void M109() { M104_M109(true); }
|
||||
#endif
|
||||
|
||||
static void M105();
|
||||
@@ -674,7 +678,11 @@ private:
|
||||
|
||||
static void M114();
|
||||
static void M115();
|
||||
static void M117();
|
||||
|
||||
#if HAS_STATUS_MESSAGE
|
||||
static void M117();
|
||||
#endif
|
||||
|
||||
static void M118();
|
||||
static void M119();
|
||||
static void M120();
|
||||
@@ -696,8 +704,9 @@ private:
|
||||
#endif
|
||||
|
||||
#if HAS_HEATED_BED
|
||||
static void M140();
|
||||
static void M190();
|
||||
static void M140_M190(const bool isM190);
|
||||
FORCE_INLINE static void M140() { M140_M190(false); }
|
||||
FORCE_INLINE static void M190() { M140_M190(true); }
|
||||
#endif
|
||||
|
||||
#if HAS_HEATED_CHAMBER
|
||||
@@ -776,7 +785,7 @@ private:
|
||||
|
||||
static void M220();
|
||||
|
||||
#if EXTRUDERS
|
||||
#if HAS_EXTRUDERS
|
||||
static void M221();
|
||||
#endif
|
||||
|
||||
|
@@ -39,7 +39,7 @@ bool GcodeSuite::select_coordinate_system(const int8_t _new) {
|
||||
xyz_float_t new_offset{0};
|
||||
if (WITHIN(_new, 0, MAX_COORDINATE_SYSTEMS - 1))
|
||||
new_offset = coordinate_system[_new];
|
||||
LOOP_XYZ(i) {
|
||||
LOOP_LINEAR_AXES(i) {
|
||||
if (position_shift[i] != new_offset[i]) {
|
||||
position_shift[i] = new_offset[i];
|
||||
update_workspace_offset((AxisEnum)i);
|
||||
|
@@ -61,7 +61,7 @@ void GcodeSuite::G92() {
|
||||
|
||||
#if ENABLED(CNC_COORDINATE_SYSTEMS) && !IS_SCARA
|
||||
case 1: // G92.1 - Zero the Workspace Offset
|
||||
LOOP_XYZ(i) if (position_shift[i]) {
|
||||
LOOP_LINEAR_AXES(i) if (position_shift[i]) {
|
||||
position_shift[i] = 0;
|
||||
update_workspace_offset((AxisEnum)i);
|
||||
}
|
||||
@@ -70,7 +70,7 @@ void GcodeSuite::G92() {
|
||||
|
||||
#if ENABLED(POWER_LOSS_RECOVERY)
|
||||
case 9: // G92.9 - Set Current Position directly (like Marlin 1.0)
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
if (parser.seenval(axis_codes[i])) {
|
||||
if (i == E_AXIS) sync_E = true; else sync_XYZE = true;
|
||||
current_position[i] = parser.value_axis_units((AxisEnum)i);
|
||||
@@ -80,7 +80,7 @@ void GcodeSuite::G92() {
|
||||
#endif
|
||||
|
||||
case 0:
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
if (parser.seenval(axis_codes[i])) {
|
||||
const float l = parser.value_axis_units((AxisEnum)i), // Given axis coordinate value, converted to millimeters
|
||||
v = i == E_AXIS ? l : LOGICAL_TO_NATIVE(l, i), // Axis position in NATIVE space (applying the existing offset)
|
||||
|
@@ -42,8 +42,8 @@ void M206_report() {
|
||||
* *** In the 2.0 release, it will simply be disabled by default.
|
||||
*/
|
||||
void GcodeSuite::M206() {
|
||||
LOOP_XYZ(i)
|
||||
if (parser.seen(XYZ_CHAR(i)))
|
||||
LOOP_LINEAR_AXES(i)
|
||||
if (parser.seen(AXIS_CHAR(i)))
|
||||
set_home_offset((AxisEnum)i, parser.value_linear_units());
|
||||
|
||||
#if ENABLED(MORGAN_SCARA)
|
||||
@@ -72,7 +72,7 @@ void GcodeSuite::M428() {
|
||||
if (homing_needed_error()) return;
|
||||
|
||||
xyz_float_t diff;
|
||||
LOOP_XYZ(i) {
|
||||
LOOP_LINEAR_AXES(i) {
|
||||
diff[i] = base_home_pos((AxisEnum)i) - current_position[i];
|
||||
if (!WITHIN(diff[i], -20, 20) && home_dir((AxisEnum)i) > 0)
|
||||
diff[i] = -current_position[i];
|
||||
@@ -84,7 +84,7 @@ void GcodeSuite::M428() {
|
||||
}
|
||||
}
|
||||
|
||||
LOOP_XYZ(i) set_home_offset((AxisEnum)i, diff[i]);
|
||||
LOOP_LINEAR_AXES(i) set_home_offset((AxisEnum)i, diff[i]);
|
||||
report_current_position();
|
||||
LCD_MESSAGEPGM(MSG_HOME_OFFSETS_APPLIED);
|
||||
BUZZ(100, 659);
|
||||
|
@@ -34,7 +34,7 @@
|
||||
#include "../../core/debug_out.h"
|
||||
#endif
|
||||
|
||||
void report_xyze(const xyze_pos_t &pos, const uint8_t n=XYZE, const uint8_t precision=3) {
|
||||
void report_all_axis_pos(const xyze_pos_t &pos, const uint8_t n=XYZE, const uint8_t precision=3) {
|
||||
char str[12];
|
||||
LOOP_L_N(a, n) {
|
||||
SERIAL_CHAR(' ', axis_codes[a], ':');
|
||||
@@ -43,12 +43,12 @@
|
||||
}
|
||||
SERIAL_EOL();
|
||||
}
|
||||
inline void report_xyz(const xyze_pos_t &pos) { report_xyze(pos, XYZ); }
|
||||
inline void report_linear_axis_pos(const xyze_pos_t &pos) { report_all_axis_pos(pos, XYZ); }
|
||||
|
||||
void report_xyz(const xyz_pos_t &pos, const uint8_t precision=3) {
|
||||
void report_linear_axis_pos(const xyz_pos_t &pos, const uint8_t precision=3) {
|
||||
char str[12];
|
||||
LOOP_XYZ(a) {
|
||||
SERIAL_CHAR(' ', XYZ_CHAR(a), ':');
|
||||
LOOP_LINEAR_AXES(a) {
|
||||
SERIAL_CHAR(' ', AXIS_CHAR(a), ':');
|
||||
SERIAL_ECHO(dtostrf(pos[a], 1, precision, str));
|
||||
}
|
||||
SERIAL_EOL();
|
||||
@@ -57,11 +57,11 @@
|
||||
void report_current_position_detail() {
|
||||
// Position as sent by G-code
|
||||
SERIAL_ECHOPGM("\nLogical:");
|
||||
report_xyz(current_position.asLogical());
|
||||
report_linear_axis_pos(current_position.asLogical());
|
||||
|
||||
// Cartesian position in native machine space
|
||||
SERIAL_ECHOPGM("Raw: ");
|
||||
report_xyz(current_position);
|
||||
report_linear_axis_pos(current_position);
|
||||
|
||||
xyze_pos_t leveled = current_position;
|
||||
|
||||
@@ -69,20 +69,20 @@
|
||||
// Current position with leveling applied
|
||||
SERIAL_ECHOPGM("Leveled:");
|
||||
planner.apply_leveling(leveled);
|
||||
report_xyz(leveled);
|
||||
report_linear_axis_pos(leveled);
|
||||
|
||||
// Test planner un-leveling. This should match the Raw result.
|
||||
SERIAL_ECHOPGM("UnLevel:");
|
||||
xyze_pos_t unleveled = leveled;
|
||||
planner.unapply_leveling(unleveled);
|
||||
report_xyz(unleveled);
|
||||
report_linear_axis_pos(unleveled);
|
||||
#endif
|
||||
|
||||
#if IS_KINEMATIC
|
||||
// Kinematics applied to the leveled position
|
||||
SERIAL_ECHOPGM(TERN(IS_SCARA, "ScaraK: ", "DeltaK: "));
|
||||
inverse_kinematics(leveled); // writes delta[]
|
||||
report_xyz(delta);
|
||||
report_linear_axis_pos(delta);
|
||||
#endif
|
||||
|
||||
planner.synchronize();
|
||||
@@ -153,7 +153,7 @@
|
||||
#endif // HAS_L64XX
|
||||
|
||||
SERIAL_ECHOPGM("Stepper:");
|
||||
LOOP_XYZE(i) {
|
||||
LOOP_LOGICAL_AXES(i) {
|
||||
SERIAL_CHAR(' ', axis_codes[i], ':');
|
||||
SERIAL_ECHO(stepper.position((AxisEnum)i));
|
||||
}
|
||||
@@ -165,17 +165,17 @@
|
||||
planner.get_axis_position_degrees(B_AXIS)
|
||||
};
|
||||
SERIAL_ECHOPGM("Degrees:");
|
||||
report_xyze(deg, 2);
|
||||
report_all_axis_pos(deg, 2);
|
||||
#endif
|
||||
|
||||
SERIAL_ECHOPGM("FromStp:");
|
||||
get_cartesian_from_steppers(); // writes 'cartes' (with forward kinematics)
|
||||
xyze_pos_t from_steppers = { cartes.x, cartes.y, cartes.z, planner.get_axis_position_mm(E_AXIS) };
|
||||
report_xyze(from_steppers);
|
||||
report_all_axis_pos(from_steppers);
|
||||
|
||||
const xyze_float_t diff = from_steppers - leveled;
|
||||
SERIAL_ECHOPGM("Diff: ");
|
||||
report_xyze(diff);
|
||||
report_all_axis_pos(diff);
|
||||
|
||||
TERN_(FULL_REPORT_TO_HOST_FEATURE, report_current_grblstate_moving());
|
||||
}
|
||||
|
@@ -119,6 +119,9 @@ void GcodeSuite::M115() {
|
||||
// EMERGENCY_PARSER (M108, M112, M410, M876)
|
||||
cap_line(PSTR("EMERGENCY_PARSER"), ENABLED(EMERGENCY_PARSER));
|
||||
|
||||
// HOST ACTION COMMANDS (paused, resume, resumed, cancel, etc.)
|
||||
cap_line(PSTR("HOST_ACTION_COMMANDS"), ENABLED(HOST_ACTION_COMMANDS));
|
||||
|
||||
// PROMPT SUPPORT (M876)
|
||||
cap_line(PSTR("PROMPT_SUPPORT"), ENABLED(HOST_PROMPT_SUPPORT));
|
||||
|
||||
|
@@ -28,7 +28,7 @@
|
||||
#include "../../module/motion.h"
|
||||
#include "../../module/planner.h"
|
||||
|
||||
#if EXTRUDERS
|
||||
#if HAS_EXTRUDERS
|
||||
#include "../../module/temperature.h"
|
||||
#endif
|
||||
|
||||
@@ -171,7 +171,7 @@ void GcodeSuite::M360() {
|
||||
// Per-Extruder settings
|
||||
//
|
||||
config_line(PSTR("NumExtruder"), EXTRUDERS);
|
||||
#if EXTRUDERS
|
||||
#if HAS_EXTRUDERS
|
||||
LOOP_L_N(e, EXTRUDERS) {
|
||||
config_line_e(e, JERK_STR, TERN(HAS_LINEAR_E_JERK, planner.max_e_jerk[E_INDEX_N(e)], TERN(HAS_CLASSIC_JERK, planner.max_jerk.e, DEFAULT_EJERK)));
|
||||
config_line_e(e, PSTR("MaxSpeed"), planner.settings.max_feedrate_mm_s[E_AXIS_N(e)]);
|
||||
|
@@ -20,6 +20,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "../../inc/MarlinConfig.h"
|
||||
|
||||
#if HAS_STATUS_MESSAGE
|
||||
|
||||
#include "../gcode.h"
|
||||
#include "../../lcd/marlinui.h"
|
||||
|
||||
@@ -34,3 +38,5 @@ void GcodeSuite::M117() {
|
||||
ui.reset_status();
|
||||
|
||||
}
|
||||
|
||||
#endif // HAS_STATUS_MESSAGE
|
||||
|
@@ -83,7 +83,7 @@ void GcodeSuite::G0_G1(TERN_(HAS_FAST_MOVES, const bool fast_move/*=false*/)) {
|
||||
|
||||
if (MIN_AUTORETRACT <= MAX_AUTORETRACT) {
|
||||
// When M209 Autoretract is enabled, convert E-only moves to firmware retract/recover moves
|
||||
if (fwretract.autoretract_enabled && parser.seen('E') && !(parser.seen('X') || parser.seen('Y') || parser.seen('Z'))) {
|
||||
if (fwretract.autoretract_enabled && parser.seen('E') && !parser.seen("XYZ")) {
|
||||
const float echange = destination.e - current_position.e;
|
||||
// Is this a retract or recover move?
|
||||
if (WITHIN(ABS(echange), MIN_AUTORETRACT, MAX_AUTORETRACT) && fwretract.retracted[active_extruder] == (echange > 0.0)) {
|
||||
|
@@ -249,9 +249,7 @@ void plan_arc(
|
||||
#endif
|
||||
|
||||
if (!planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, 0
|
||||
#if ENABLED(SCARA_FEEDRATE_SCALING)
|
||||
, inv_duration
|
||||
#endif
|
||||
OPTARG(SCARA_FEEDRATE_SCALING, inv_duration)
|
||||
)) break;
|
||||
}
|
||||
|
||||
@@ -266,9 +264,7 @@ void plan_arc(
|
||||
#endif
|
||||
|
||||
planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, 0
|
||||
#if ENABLED(SCARA_FEEDRATE_SCALING)
|
||||
, inv_duration
|
||||
#endif
|
||||
OPTARG(SCARA_FEEDRATE_SCALING, inv_duration)
|
||||
);
|
||||
|
||||
TERN_(AUTO_BED_LEVELING_UBL, raw[l_axis] = start_L);
|
||||
@@ -291,12 +287,12 @@ void plan_arc(
|
||||
* Mixing IJ/JK/KI with R will throw an error.
|
||||
*
|
||||
* - R specifies the radius. X or Y (Y or Z / Z or X) is required.
|
||||
* Omitting both XY/YZ/ZX will throw an error.
|
||||
* XY/YZ/ZX must differ from the current XY/YZ/ZX.
|
||||
* Mixing R with IJ/JK/KI will throw an error.
|
||||
* Omitting both XY/YZ/ZX will throw an error.
|
||||
* XY/YZ/ZX must differ from the current XY/YZ/ZX.
|
||||
* Mixing R with IJ/JK/KI will throw an error.
|
||||
*
|
||||
* - P specifies the number of full circles to do
|
||||
* before the specified arc move.
|
||||
* before the specified arc move.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
|
@@ -69,8 +69,8 @@
|
||||
*/
|
||||
void GcodeSuite::M290() {
|
||||
#if ENABLED(BABYSTEP_XY)
|
||||
LOOP_XYZ(a)
|
||||
if (parser.seenval(XYZ_CHAR(a)) || (a == Z_AXIS && parser.seenval('S'))) {
|
||||
LOOP_LINEAR_AXES(a)
|
||||
if (parser.seenval(AXIS_CHAR(a)) || (a == Z_AXIS && parser.seenval('S'))) {
|
||||
const float offs = constrain(parser.value_axis_units((AxisEnum)a), -2, 2);
|
||||
babystep.add_mm((AxisEnum)a, offs);
|
||||
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
|
||||
|
@@ -222,7 +222,7 @@ void GCodeParser::parse(char *p) {
|
||||
|
||||
#if ENABLED(GCODE_MOTION_MODES)
|
||||
if (letter == 'G'
|
||||
&& (codenum <= TERN(ARC_SUPPORT, 3, 1) || codenum == 5 || TERN0(G38_PROBE_TARGET, codenum == 38))
|
||||
&& (codenum <= TERN(ARC_SUPPORT, 3, 1) || TERN0(BEZIER_CURVE_SUPPORT, codenum == 5) || TERN0(G38_PROBE_TARGET, codenum == 38))
|
||||
) {
|
||||
motion_mode_codenum = codenum;
|
||||
TERN_(USE_GCODE_SUBCODES, motion_mode_subcode = subcode);
|
||||
|
@@ -226,7 +226,7 @@ public:
|
||||
|
||||
// Seen any axis parameter
|
||||
static inline bool seen_axis() {
|
||||
return seen_test('X') || seen_test('Y') || seen_test('Z') || seen_test('E');
|
||||
return seen("XYZE");
|
||||
}
|
||||
|
||||
#if ENABLED(GCODE_QUOTED_STRINGS)
|
||||
|
@@ -38,7 +38,7 @@ inline void G38_single_probe(const uint8_t move_value) {
|
||||
planner.synchronize();
|
||||
G38_move = 0;
|
||||
endstops.hit_on_purpose();
|
||||
set_current_from_steppers_for_axis(ALL_AXES);
|
||||
set_current_from_steppers_for_axis(ALL_AXES_ENUM);
|
||||
sync_plan_position();
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ inline bool G38_run_probe() {
|
||||
#if MULTIPLE_PROBING > 1
|
||||
// Get direction of move and retract
|
||||
xyz_float_t retract_mm;
|
||||
LOOP_XYZ(i) {
|
||||
LOOP_LINEAR_AXES(i) {
|
||||
const float dist = destination[i] - current_position[i];
|
||||
retract_mm[i] = ABS(dist) < G38_MINIMUM_MOVE ? 0 : home_bump_mm((AxisEnum)i) * (dist > 0 ? -1 : 1);
|
||||
}
|
||||
@@ -119,7 +119,7 @@ void GcodeSuite::G38(const int8_t subcode) {
|
||||
;
|
||||
|
||||
// If any axis has enough movement, do the move
|
||||
LOOP_XYZ(i)
|
||||
LOOP_LINEAR_AXES(i)
|
||||
if (ABS(destination[i] - current_position[i]) >= G38_MINIMUM_MOVE) {
|
||||
if (!parser.seenval('F')) feedrate_mm_s = homing_feedrate((AxisEnum)i);
|
||||
// If G38.2 fails throw an error
|
||||
|
@@ -84,9 +84,7 @@ char GCodeQueue::injected_commands[64]; // = { 0 }
|
||||
|
||||
|
||||
void GCodeQueue::RingBuffer::commit_command(bool skip_ok
|
||||
#if HAS_MULTI_SERIAL
|
||||
, serial_index_t serial_ind/*=-1*/
|
||||
#endif
|
||||
OPTARG(HAS_MULTI_SERIAL, serial_index_t serial_ind/*=-1*/)
|
||||
) {
|
||||
commands[index_w].skip_ok = skip_ok;
|
||||
TERN_(HAS_MULTI_SERIAL, commands[index_w].port = serial_ind);
|
||||
@@ -100,9 +98,7 @@ void GCodeQueue::RingBuffer::commit_command(bool skip_ok
|
||||
* Return false for a full buffer, or if the 'command' is a comment.
|
||||
*/
|
||||
bool GCodeQueue::RingBuffer::enqueue(const char *cmd, bool skip_ok/*=true*/
|
||||
#if HAS_MULTI_SERIAL
|
||||
, serial_index_t serial_ind/*=-1*/
|
||||
#endif
|
||||
OPTARG(HAS_MULTI_SERIAL, serial_index_t serial_ind/*=-1*/)
|
||||
) {
|
||||
if (*cmd == ';' || length >= BUFSIZE) return false;
|
||||
strcpy(commands[index_w].buffer, cmd);
|
||||
|
@@ -80,15 +80,11 @@ public:
|
||||
void advance_pos(uint8_t &p, const int inc) { if (++p >= BUFSIZE) p = 0; length += inc; }
|
||||
|
||||
void commit_command(bool skip_ok
|
||||
#if HAS_MULTI_SERIAL
|
||||
, serial_index_t serial_ind = serial_index_t()
|
||||
#endif
|
||||
OPTARG(HAS_MULTI_SERIAL, serial_index_t serial_ind = serial_index_t())
|
||||
);
|
||||
|
||||
bool enqueue(const char *cmd, bool skip_ok = true
|
||||
#if HAS_MULTI_SERIAL
|
||||
, serial_index_t serial_ind = serial_index_t()
|
||||
#endif
|
||||
OPTARG(HAS_MULTI_SERIAL, serial_index_t serial_ind = serial_index_t())
|
||||
);
|
||||
|
||||
void ok_to_send();
|
||||
|
@@ -28,7 +28,7 @@
|
||||
|
||||
#include "../../inc/MarlinConfigPre.h"
|
||||
|
||||
#if EXTRUDERS
|
||||
#if HAS_EXTRUDERS
|
||||
|
||||
#include "../gcode.h"
|
||||
#include "../../module/temperature.h"
|
||||
@@ -51,89 +51,29 @@
|
||||
|
||||
/**
|
||||
* M104: Set Hotend Temperature target and return immediately
|
||||
*
|
||||
* Parameters:
|
||||
* I<preset> : Material Preset index (if material presets are defined)
|
||||
* T<index> : Tool index. If omitted, applies to the active tool
|
||||
* S<target> : The target temperature in current units
|
||||
*/
|
||||
void GcodeSuite::M104() {
|
||||
|
||||
if (DEBUGGING(DRYRUN)) return;
|
||||
|
||||
#if ENABLED(MIXING_EXTRUDER) && MIXING_VIRTUAL_TOOLS > 1
|
||||
constexpr int8_t target_extruder = 0;
|
||||
#else
|
||||
const int8_t target_extruder = get_target_extruder_from_command();
|
||||
if (target_extruder < 0) return;
|
||||
#endif
|
||||
|
||||
bool got_temp = false;
|
||||
celsius_t temp = 0;
|
||||
|
||||
// Accept 'I' if temperature presets are defined
|
||||
#if PREHEAT_COUNT
|
||||
got_temp = parser.seenval('I');
|
||||
if (got_temp) {
|
||||
const uint8_t index = parser.value_byte();
|
||||
temp = ui.material_preset[_MIN(index, PREHEAT_COUNT - 1)].hotend_temp;
|
||||
}
|
||||
#endif
|
||||
|
||||
// If no 'I' get the temperature from 'S'
|
||||
if (!got_temp) {
|
||||
got_temp = parser.seenval('S');
|
||||
if (got_temp) temp = parser.value_celsius();
|
||||
}
|
||||
|
||||
if (got_temp) {
|
||||
#if ENABLED(SINGLENOZZLE_STANDBY_TEMP)
|
||||
thermalManager.singlenozzle_temp[target_extruder] = temp;
|
||||
if (target_extruder != active_extruder) return;
|
||||
#endif
|
||||
thermalManager.setTargetHotend(temp, target_extruder);
|
||||
|
||||
#if ENABLED(DUAL_X_CARRIAGE)
|
||||
if (idex_is_duplicating() && target_extruder == 0)
|
||||
thermalManager.setTargetHotend(temp ? temp + duplicate_extruder_temp_offset : 0, 1);
|
||||
#endif
|
||||
|
||||
#if ENABLED(PRINTJOB_TIMER_AUTOSTART)
|
||||
/**
|
||||
* Stop the timer at the end of print. Start is managed by 'heat and wait' M109.
|
||||
* Hotends use EXTRUDE_MINTEMP / 2 to allow nozzles to be put into hot standby
|
||||
* mode, for instance in a dual extruder setup, without affecting the running
|
||||
* print timer.
|
||||
*/
|
||||
thermalManager.auto_job_check_timer(false, true);
|
||||
#endif
|
||||
}
|
||||
|
||||
TERN_(AUTOTEMP, planner.autotemp_M104_M109());
|
||||
}
|
||||
|
||||
/**
|
||||
* M109: Set Hotend Temperature target and wait
|
||||
*
|
||||
* Parameters
|
||||
* I<preset> : Material Preset index (if material presets are defined)
|
||||
* T<index> : Tool index. If omitted, applies to the active tool
|
||||
* S<target> : The target temperature in current units. Wait for heating only.
|
||||
* R<target> : The target temperature in current units. Wait for heating and cooling.
|
||||
* S<target> : The target temperature in current units. For M109, only wait when heating up.
|
||||
*
|
||||
* With AUTOTEMP...
|
||||
* F<factor> : Autotemp Scaling Factor. Set non-zero to enable Auto-temp.
|
||||
* S<min> : Minimum temperature, in current units.
|
||||
* B<max> : Maximum temperature, in current units.
|
||||
*
|
||||
* M109 Parameters
|
||||
* R<target> : The target temperature in current units. Wait for heating and cooling.
|
||||
*
|
||||
* Examples
|
||||
* M109 S100 : Set target to 100°. Wait until the hotend is at or above 100°.
|
||||
* M104 S100 : Set target to 100° and return.
|
||||
* M109 R150 : Set target to 150°. Wait until the hotend gets close to 150°.
|
||||
*
|
||||
* With PRINTJOB_TIMER_AUTOSTART turning on heaters will start the print job timer
|
||||
* (used by printingIsActive, etc.) and turning off heaters will stop the timer.
|
||||
*/
|
||||
void GcodeSuite::M109() {
|
||||
void GcodeSuite::M104_M109(const bool isM109) {
|
||||
|
||||
if (DEBUGGING(DRYRUN)) return;
|
||||
|
||||
@@ -160,7 +100,7 @@ void GcodeSuite::M109() {
|
||||
bool no_wait_for_cooling = false;
|
||||
if (!got_temp) {
|
||||
no_wait_for_cooling = parser.seenval('S');
|
||||
got_temp = no_wait_for_cooling || parser.seenval('R');
|
||||
got_temp = no_wait_for_cooling || (isM109 && parser.seenval('R'));
|
||||
if (got_temp) temp = parser.value_celsius();
|
||||
}
|
||||
|
||||
@@ -182,18 +122,16 @@ void GcodeSuite::M109() {
|
||||
* standby mode, (e.g., in a dual extruder setup) without affecting
|
||||
* the running print timer.
|
||||
*/
|
||||
thermalManager.auto_job_check_timer(true, true);
|
||||
thermalManager.auto_job_check_timer(isM109, true);
|
||||
#endif
|
||||
|
||||
#if HAS_STATUS_MESSAGE
|
||||
if (thermalManager.isHeatingHotend(target_extruder) || !no_wait_for_cooling)
|
||||
thermalManager.set_heating_message(target_extruder);
|
||||
#endif
|
||||
if (thermalManager.isHeatingHotend(target_extruder) || !no_wait_for_cooling)
|
||||
thermalManager.set_heating_message(target_extruder);
|
||||
}
|
||||
|
||||
TERN_(AUTOTEMP, planner.autotemp_M104_M109());
|
||||
|
||||
if (got_temp)
|
||||
if (isM109 && got_temp)
|
||||
(void)thermalManager.wait_for_hotend(target_extruder, no_wait_for_cooling);
|
||||
}
|
||||
|
||||
|
@@ -35,62 +35,28 @@
|
||||
#include "../../lcd/marlinui.h"
|
||||
|
||||
/**
|
||||
* M140: Set bed temperature
|
||||
* M140 - Set Bed Temperature target and return immediately
|
||||
* M190 - Set Bed Temperature target and wait
|
||||
*
|
||||
* I<index> : Preset index (if material presets are defined)
|
||||
* S<target> : The target temperature in current units
|
||||
*/
|
||||
void GcodeSuite::M140() {
|
||||
if (DEBUGGING(DRYRUN)) return;
|
||||
|
||||
bool got_temp = false;
|
||||
celsius_t temp = 0;
|
||||
|
||||
// Accept 'I' if temperature presets are defined
|
||||
#if PREHEAT_COUNT
|
||||
got_temp = parser.seenval('I');
|
||||
if (got_temp) {
|
||||
const uint8_t index = parser.value_byte();
|
||||
temp = ui.material_preset[_MIN(index, PREHEAT_COUNT - 1)].bed_temp;
|
||||
}
|
||||
#endif
|
||||
|
||||
// If no 'I' get the temperature from 'S'
|
||||
if (!got_temp) {
|
||||
got_temp = parser.seenval('S');
|
||||
if (got_temp) temp = parser.value_celsius();
|
||||
}
|
||||
|
||||
if (got_temp) {
|
||||
thermalManager.setTargetBed(temp);
|
||||
|
||||
#if ENABLED(PRINTJOB_TIMER_AUTOSTART)
|
||||
/**
|
||||
* Stop the timer at the end of print. Hotend, bed target, and chamber
|
||||
* temperatures need to be set below mintemp. Order of M140, M104, and M141
|
||||
* at the end of the print does not matter.
|
||||
*/
|
||||
thermalManager.auto_job_check_timer(false, true);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* M190 - Set Bed Temperature target and wait
|
||||
*
|
||||
* Parameters:
|
||||
* Parameters
|
||||
* I<index> : Preset index (if material presets are defined)
|
||||
* S<target> : The target temperature in current units. Wait for heating only.
|
||||
*
|
||||
* M190 Parameters
|
||||
* R<target> : The target temperature in current units. Wait for heating and cooling.
|
||||
*
|
||||
* Examples:
|
||||
* M190 S60 : Set target to 60°. Wait until the bed is at or above 60°.
|
||||
* Examples
|
||||
* M140 S60 : Set target to 60° and return right away.
|
||||
* M190 R40 : Set target to 40°. Wait until the bed gets close to 40°.
|
||||
*
|
||||
* With PRINTJOB_TIMER_AUTOSTART turning on heaters will start the print job timer
|
||||
* (used by printingIsActive, etc.) and turning off heaters will stop the timer.
|
||||
*/
|
||||
void GcodeSuite::M190() {
|
||||
void GcodeSuite::M140_M190(const bool isM190) {
|
||||
|
||||
if (DEBUGGING(DRYRUN)) return;
|
||||
|
||||
bool got_temp = false;
|
||||
@@ -109,7 +75,7 @@ void GcodeSuite::M190() {
|
||||
bool no_wait_for_cooling = false;
|
||||
if (!got_temp) {
|
||||
no_wait_for_cooling = parser.seenval('S');
|
||||
got_temp = no_wait_for_cooling || parser.seenval('R');
|
||||
got_temp = no_wait_for_cooling || (isM190 && parser.seenval('R'));
|
||||
if (got_temp) temp = parser.value_celsius();
|
||||
}
|
||||
|
||||
@@ -121,7 +87,8 @@ void GcodeSuite::M190() {
|
||||
|
||||
ui.set_status_P(thermalManager.isHeatingBed() ? GET_TEXT(MSG_BED_HEATING) : GET_TEXT(MSG_BED_COOLING));
|
||||
|
||||
thermalManager.wait_for_bed(no_wait_for_cooling);
|
||||
if (isM190)
|
||||
thermalManager.wait_for_bed(no_wait_for_cooling);
|
||||
}
|
||||
|
||||
#endif // HAS_HEATED_BED
|
||||
|
@@ -20,6 +20,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "../../inc/MarlinConfigPre.h"
|
||||
|
||||
#if HAS_EXTRUDERS
|
||||
|
||||
#include "../gcode.h"
|
||||
|
||||
/**
|
||||
@@ -31,3 +35,5 @@ void GcodeSuite::M82() { set_e_absolute(); }
|
||||
* M83: Set E codes relative while in Absolute Coordinates (G90) mode
|
||||
*/
|
||||
void GcodeSuite::M83() { set_e_relative(); }
|
||||
|
||||
#endif // HAS_EXTRUDERS
|
||||
|
@@ -538,7 +538,12 @@
|
||||
* E_MANUAL - Number of E steppers for LCD move options
|
||||
*/
|
||||
|
||||
#if EXTRUDERS == 0
|
||||
#if EXTRUDERS
|
||||
#define HAS_EXTRUDERS 1
|
||||
#if EXTRUDERS > 1
|
||||
#define HAS_MULTI_EXTRUDER 1
|
||||
#endif
|
||||
#else
|
||||
#undef EXTRUDERS
|
||||
#define EXTRUDERS 0
|
||||
#undef SINGLENOZZLE
|
||||
@@ -546,8 +551,6 @@
|
||||
#undef SWITCHING_NOZZLE
|
||||
#undef MIXING_EXTRUDER
|
||||
#undef HOTEND_IDLE_TIMEOUT
|
||||
#elif EXTRUDERS > 1
|
||||
#define HAS_MULTI_EXTRUDER 1
|
||||
#endif
|
||||
|
||||
#if ENABLED(SWITCHING_EXTRUDER) // One stepper for every two EXTRUDERS
|
||||
@@ -651,22 +654,38 @@
|
||||
#endif
|
||||
|
||||
/**
|
||||
* DISTINCT_E_FACTORS affects how some E factors are accessed
|
||||
* Number of Linear Axes (e.g., XYZ)
|
||||
* All the logical axes except for the tool (E) axis
|
||||
*/
|
||||
#ifndef LINEAR_AXES
|
||||
#define LINEAR_AXES XYZ
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Number of Logical Axes (e.g., XYZE)
|
||||
* All the logical axes that can be commanded directly by G-code.
|
||||
* Delta maps stepper-specific values to ABC steppers.
|
||||
*/
|
||||
#if HAS_EXTRUDERS
|
||||
#define LOGICAL_AXES INCREMENT(LINEAR_AXES)
|
||||
#else
|
||||
#define LOGICAL_AXES LINEAR_AXES
|
||||
#endif
|
||||
|
||||
/**
|
||||
* DISTINCT_E_FACTORS affects whether Extruders use different settings
|
||||
*/
|
||||
#if ENABLED(DISTINCT_E_FACTORS) && E_STEPPERS > 1
|
||||
#define DISTINCT_E E_STEPPERS
|
||||
#define XYZE_N (XYZ + E_STEPPERS)
|
||||
#define DISTINCT_AXES (LINEAR_AXES + E_STEPPERS)
|
||||
#define E_INDEX_N(E) (E)
|
||||
#define E_AXIS_N(E) AxisEnum(E_AXIS + E)
|
||||
#define UNUSED_E(E) NOOP
|
||||
#else
|
||||
#undef DISTINCT_E_FACTORS
|
||||
#define DISTINCT_E 1
|
||||
#define XYZE_N XYZE
|
||||
#define DISTINCT_AXES LOGICAL_AXES
|
||||
#define E_INDEX_N(E) 0
|
||||
#define E_AXIS_N(E) E_AXIS
|
||||
#define UNUSED_E(E) UNUSED(E)
|
||||
#endif
|
||||
#define E_AXIS_N(E) AxisEnum(E_AXIS + E_INDEX_N(E))
|
||||
|
||||
/**
|
||||
* The BLTouch Probe emulates a servo probe
|
||||
@@ -798,14 +817,31 @@
|
||||
#endif
|
||||
#endif // FILAMENT_RUNOUT_SENSOR
|
||||
|
||||
// Homing to Min or Max
|
||||
#if X_HOME_DIR > 0
|
||||
#define X_HOME_TO_MAX 1
|
||||
#elif X_HOME_DIR < 0
|
||||
#define X_HOME_TO_MIN 1
|
||||
#endif
|
||||
#if Y_HOME_DIR > 0
|
||||
#define Y_HOME_TO_MAX 1
|
||||
#elif Y_HOME_DIR < 0
|
||||
#define Y_HOME_TO_MIN 1
|
||||
#endif
|
||||
#if Z_HOME_DIR > 0
|
||||
#define Z_HOME_TO_MAX 1
|
||||
#elif Z_HOME_DIR < 0
|
||||
#define Z_HOME_TO_MIN 1
|
||||
#endif
|
||||
|
||||
#if HAS_BED_PROBE
|
||||
#if DISABLED(NOZZLE_AS_PROBE)
|
||||
#define HAS_PROBE_XY_OFFSET 1
|
||||
#endif
|
||||
#if DISABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
|
||||
#if DISABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) && !BOTH(DELTA, SENSORLESS_PROBING)
|
||||
#define HAS_CUSTOM_PROBE_PIN 1
|
||||
#endif
|
||||
#if Z_HOME_DIR < 0 && (!HAS_CUSTOM_PROBE_PIN || ENABLED(USE_PROBE_FOR_Z_HOMING))
|
||||
#if Z_HOME_TO_MIN && (!HAS_CUSTOM_PROBE_PIN || ENABLED(USE_PROBE_FOR_Z_HOMING))
|
||||
#define HOMING_Z_WITH_PROBE 1
|
||||
#endif
|
||||
#ifndef Z_PROBE_LOW_POINT
|
||||
@@ -827,7 +863,7 @@
|
||||
#undef USE_PROBE_FOR_Z_HOMING
|
||||
#endif
|
||||
|
||||
#if Z_HOME_DIR > 0
|
||||
#if Z_HOME_TO_MAX
|
||||
#define HOME_Z_FIRST // If homing away from BED do Z first
|
||||
#endif
|
||||
|
||||
@@ -1267,3 +1303,10 @@
|
||||
#else
|
||||
#define COORDINATE_OKAY(N,L,H) true
|
||||
#endif
|
||||
|
||||
/**
|
||||
* LED Backlight INDEX END
|
||||
*/
|
||||
#if defined(NEOPIXEL_BKGD_INDEX_FIRST) && !defined(NEOPIXEL_BKGD_INDEX_LAST)
|
||||
#define NEOPIXEL_BKGD_INDEX_LAST NEOPIXEL_BKGD_INDEX_FIRST
|
||||
#endif
|
||||
|
@@ -75,7 +75,7 @@
|
||||
#define SERVO_DELAY { 50 }
|
||||
#endif
|
||||
|
||||
#if EXTRUDERS == 0
|
||||
#if !HAS_EXTRUDERS
|
||||
#define NO_VOLUMETRICS
|
||||
#undef TEMP_SENSOR_0
|
||||
#undef TEMP_SENSOR_1
|
||||
@@ -391,6 +391,12 @@
|
||||
#define POLL_JOG
|
||||
#endif
|
||||
|
||||
#if X2_HOME_DIR > 0
|
||||
#define X2_HOME_TO_MAX 1
|
||||
#elif X2_HOME_DIR < 0
|
||||
#define X2_HOME_TO_MIN 1
|
||||
#endif
|
||||
|
||||
#ifndef HOMING_BUMP_MM
|
||||
#define HOMING_BUMP_MM { 0, 0, 0 }
|
||||
#endif
|
||||
|
@@ -125,7 +125,7 @@
|
||||
#if EITHER(IS_CORE, MARKFORGED_XY)
|
||||
#define CAN_CALIBRATE(A,B) (_AXIS(A) == B)
|
||||
#else
|
||||
#define CAN_CALIBRATE(A,B) 1
|
||||
#define CAN_CALIBRATE(A,B) true
|
||||
#endif
|
||||
#endif
|
||||
#define AXIS_CAN_CALIBRATE(A) CAN_CALIBRATE(A,NORMAL_AXIS)
|
||||
@@ -155,7 +155,7 @@
|
||||
#ifdef MANUAL_X_HOME_POS
|
||||
#define X_HOME_POS MANUAL_X_HOME_POS
|
||||
#else
|
||||
#define X_END_POS (X_HOME_DIR < 0 ? X_MIN_POS : X_MAX_POS)
|
||||
#define X_END_POS TERN(X_HOME_TO_MIN, X_MIN_POS, X_MAX_POS)
|
||||
#if ENABLED(BED_CENTER_AT_0_0)
|
||||
#define X_HOME_POS TERN(DELTA, 0, X_END_POS)
|
||||
#else
|
||||
@@ -166,7 +166,7 @@
|
||||
#ifdef MANUAL_Y_HOME_POS
|
||||
#define Y_HOME_POS MANUAL_Y_HOME_POS
|
||||
#else
|
||||
#define Y_END_POS (Y_HOME_DIR < 0 ? Y_MIN_POS : Y_MAX_POS)
|
||||
#define Y_END_POS TERN(Y_HOME_TO_MIN, Y_MIN_POS, Y_MAX_POS)
|
||||
#if ENABLED(BED_CENTER_AT_0_0)
|
||||
#define Y_HOME_POS TERN(DELTA, 0, Y_END_POS)
|
||||
#else
|
||||
@@ -177,7 +177,7 @@
|
||||
#ifdef MANUAL_Z_HOME_POS
|
||||
#define Z_HOME_POS MANUAL_Z_HOME_POS
|
||||
#else
|
||||
#define Z_HOME_POS (Z_HOME_DIR < 0 ? Z_MIN_POS : Z_MAX_POS)
|
||||
#define Z_HOME_POS TERN(Z_HOME_TO_MIN, Z_MIN_POS, Z_MAX_POS)
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -798,7 +798,7 @@
|
||||
* X_DUAL_ENDSTOPS endstop reassignment
|
||||
*/
|
||||
#if ENABLED(X_DUAL_ENDSTOPS)
|
||||
#if X_HOME_DIR > 0
|
||||
#if X_HOME_TO_MAX
|
||||
#ifndef X2_MAX_ENDSTOP_INVERTING
|
||||
#if X2_USE_ENDSTOP == _XMIN_
|
||||
#define X2_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
|
||||
@@ -921,7 +921,7 @@
|
||||
* Y_DUAL_ENDSTOPS endstop reassignment
|
||||
*/
|
||||
#if ENABLED(Y_DUAL_ENDSTOPS)
|
||||
#if Y_HOME_DIR > 0
|
||||
#if Y_HOME_TO_MAX
|
||||
#ifndef Y2_MAX_ENDSTOP_INVERTING
|
||||
#if Y2_USE_ENDSTOP == _XMIN_
|
||||
#define Y2_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
|
||||
@@ -1045,7 +1045,7 @@
|
||||
*/
|
||||
#if ENABLED(Z_MULTI_ENDSTOPS)
|
||||
|
||||
#if Z_HOME_DIR > 0
|
||||
#if Z_HOME_TO_MAX
|
||||
#ifndef Z2_MAX_ENDSTOP_INVERTING
|
||||
#if Z2_USE_ENDSTOP == _XMIN_
|
||||
#define Z2_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
|
||||
@@ -1164,7 +1164,7 @@
|
||||
#endif
|
||||
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 3
|
||||
#if Z_HOME_DIR > 0
|
||||
#if Z_HOME_TO_MAX
|
||||
#ifndef Z3_MAX_ENDSTOP_INVERTING
|
||||
#if Z3_USE_ENDSTOP == _XMIN_
|
||||
#define Z3_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
|
||||
@@ -1284,7 +1284,7 @@
|
||||
#endif
|
||||
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 4
|
||||
#if Z_HOME_DIR > 0
|
||||
#if Z_HOME_TO_MAX
|
||||
#ifndef Z4_MAX_ENDSTOP_INVERTING
|
||||
#if Z4_USE_ENDSTOP == _XMIN_
|
||||
#define Z4_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
|
||||
|
@@ -562,6 +562,8 @@
|
||||
#error "CUSTOM_USER_MENUS has been replaced by CUSTOM_MENU_MAIN and CUSTOM_MENU_CONFIG."
|
||||
#elif defined(MKS_LCD12864)
|
||||
#error "MKS_LCD12864 is now MKS_LCD12864A or MKS_LCD12864B."
|
||||
#elif defined(NEOPIXEL_BKGD_LED_INDEX)
|
||||
#error "NEOPIXEL_BKGD_LED_INDEX is now NEOPIXEL_BKGD_INDEX_FIRST."
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -1555,7 +1557,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#endif
|
||||
|
||||
#if ENABLED(G26_MESH_VALIDATION)
|
||||
#if !EXTRUDERS
|
||||
#if !HAS_EXTRUDERS
|
||||
#error "G26_MESH_VALIDATION requires at least one extruder."
|
||||
#elif !HAS_MESH
|
||||
#error "G26_MESH_VALIDATION requires MESH_BED_LEVELING, AUTO_BED_LEVELING_BILINEAR, or AUTO_BED_LEVELING_UBL."
|
||||
@@ -1582,6 +1584,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#error "LCD_BED_LEVELING requires a programmable LCD controller."
|
||||
#elif !(ENABLED(MESH_BED_LEVELING) || HAS_ABL_NOT_UBL)
|
||||
#error "LCD_BED_LEVELING requires MESH_BED_LEVELING or AUTO_BED_LEVELING."
|
||||
#elif ENABLED(MESH_EDIT_MENU) && !HAS_MESH
|
||||
#error "MESH_EDIT_MENU requires MESH_BED_LEVELING, AUTO_BED_LEVELING_BILINEAR or AUTO_BED_LEVELING_UBL."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1682,7 +1686,7 @@ static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal
|
||||
* Allen Key
|
||||
* Deploying the Allen Key probe uses big moves in z direction. Too dangerous for an unhomed z-axis.
|
||||
*/
|
||||
#if BOTH(Z_PROBE_ALLEN_KEY, Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) && Z_HOME_DIR < 0
|
||||
#if ALL(Z_HOME_TO_MIN, Z_PROBE_ALLEN_KEY, Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
|
||||
#error "You can't home to a Z min endstop with a Z_PROBE_ALLEN_KEY."
|
||||
#endif
|
||||
|
||||
@@ -1700,7 +1704,7 @@ static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal
|
||||
#error "DUAL_X_CARRIAGE requires USE_XMAX_PLUG and an X Max Endstop."
|
||||
#elif !defined(X2_HOME_POS) || !defined(X2_MIN_POS) || !defined(X2_MAX_POS)
|
||||
#error "DUAL_X_CARRIAGE requires X2_HOME_POS, X2_MIN_POS, and X2_MAX_POS."
|
||||
#elif X_HOME_DIR != -1 || X2_HOME_DIR != 1
|
||||
#elif X_HOME_TO_MAX || X2_HOME_TO_MIN
|
||||
#error "DUAL_X_CARRIAGE requires X_HOME_DIR -1 and X2_HOME_DIR 1."
|
||||
#endif
|
||||
#endif
|
||||
@@ -2089,25 +2093,25 @@ static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal
|
||||
|
||||
// Delta and Cartesian use 3 homing endstops
|
||||
#if NONE(IS_SCARA, SPI_ENDSTOPS)
|
||||
#if X_HOME_DIR < 0 && DISABLED(USE_XMIN_PLUG)
|
||||
#if X_HOME_TO_MIN && DISABLED(USE_XMIN_PLUG)
|
||||
#error "Enable USE_XMIN_PLUG when homing X to MIN."
|
||||
#elif X_HOME_DIR > 0 && DISABLED(USE_XMAX_PLUG)
|
||||
#elif X_HOME_TO_MAX && DISABLED(USE_XMAX_PLUG)
|
||||
#error "Enable USE_XMAX_PLUG when homing X to MAX."
|
||||
#elif Y_HOME_DIR < 0 && DISABLED(USE_YMIN_PLUG)
|
||||
#elif Y_HOME_TO_MIN && DISABLED(USE_YMIN_PLUG)
|
||||
#error "Enable USE_YMIN_PLUG when homing Y to MIN."
|
||||
#elif Y_HOME_DIR > 0 && DISABLED(USE_YMAX_PLUG)
|
||||
#elif Y_HOME_TO_MAX && DISABLED(USE_YMAX_PLUG)
|
||||
#error "Enable USE_YMAX_PLUG when homing Y to MAX."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Z homing direction and plug usage flags
|
||||
#if Z_HOME_DIR < 0 && NONE(USE_ZMIN_PLUG, HOMING_Z_WITH_PROBE)
|
||||
#if Z_HOME_TO_MIN && NONE(USE_ZMIN_PLUG, HOMING_Z_WITH_PROBE)
|
||||
#error "Enable USE_ZMIN_PLUG when homing Z to MIN."
|
||||
#elif Z_HOME_DIR > 0 && ENABLED(USE_PROBE_FOR_Z_HOMING)
|
||||
#elif Z_HOME_TO_MAX && ENABLED(USE_PROBE_FOR_Z_HOMING)
|
||||
#error "Z_HOME_DIR must be -1 when homing Z with the probe."
|
||||
#elif BOTH(HOMING_Z_WITH_PROBE, Z_MULTI_ENDSTOPS)
|
||||
#error "Z_MULTI_ENDSTOPS is incompatible with USE_PROBE_FOR_Z_HOMING."
|
||||
#elif Z_HOME_DIR > 0 && DISABLED(USE_ZMAX_PLUG)
|
||||
#elif Z_HOME_TO_MAX && DISABLED(USE_ZMAX_PLUG)
|
||||
#error "Enable USE_ZMAX_PLUG when homing Z to MAX."
|
||||
#endif
|
||||
#endif
|
||||
@@ -2304,7 +2308,7 @@ static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal
|
||||
+ (DISABLED(IS_LEGACY_TFT) && ENABLED(TFT_GENERIC)) \
|
||||
+ (ENABLED(IS_LEGACY_TFT) && COUNT_ENABLED(TFT_320x240, TFT_320x240_SPI, TFT_480x320, TFT_480x320_SPI)) \
|
||||
+ COUNT_ENABLED(ANYCUBIC_LCD_I3MEGA, ANYCUBIC_LCD_CHIRON, ANYCUBIC_TFT35) \
|
||||
+ COUNT_ENABLED(DGUS_LCD_UI_ORIGIN, DGUS_LCD_UI_FYSETC, DGUS_LCD_UI_HIPRECY,DGUS_LCD_UI_MKS) \
|
||||
+ COUNT_ENABLED(DGUS_LCD_UI_ORIGIN, DGUS_LCD_UI_FYSETC, DGUS_LCD_UI_HIPRECY, DGUS_LCD_UI_MKS) \
|
||||
+ COUNT_ENABLED(ENDER2_STOCKDISPLAY, CR10_STOCKDISPLAY, DWIN_CREALITY_LCD) \
|
||||
+ COUNT_ENABLED(FYSETC_MINI_12864_X_X, FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0, FYSETC_MINI_12864_2_1, FYSETC_GENERIC_12864_1_1) \
|
||||
+ COUNT_ENABLED(LCD_SAINSMART_I2C_1602, LCD_SAINSMART_I2C_2004) \
|
||||
@@ -2630,17 +2634,17 @@ static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal
|
||||
#define Z_ENDSTOP_INVERTING !AXIS_DRIVER_TYPE(Z,TMC2209)
|
||||
|
||||
#if NONE(SPI_ENDSTOPS, ONBOARD_ENDSTOPPULLUPS, ENDSTOPPULLUPS)
|
||||
#if X_SENSORLESS && X_HOME_DIR < 0 && DISABLED(ENDSTOPPULLUP_XMIN)
|
||||
#if X_SENSORLESS && X_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_XMIN)
|
||||
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_XMIN (or ENDSTOPPULLUPS) when homing to X_MIN."
|
||||
#elif X_SENSORLESS && X_HOME_DIR > 0 && DISABLED(ENDSTOPPULLUP_XMAX)
|
||||
#elif X_SENSORLESS && X_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_XMAX)
|
||||
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_XMAX (or ENDSTOPPULLUPS) when homing to X_MAX."
|
||||
#elif Y_SENSORLESS && Y_HOME_DIR < 0 && DISABLED(ENDSTOPPULLUP_YMIN)
|
||||
#elif Y_SENSORLESS && Y_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_YMIN)
|
||||
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_YMIN (or ENDSTOPPULLUPS) when homing to Y_MIN."
|
||||
#elif Y_SENSORLESS && Y_HOME_DIR > 0 && DISABLED(ENDSTOPPULLUP_YMAX)
|
||||
#elif Y_SENSORLESS && Y_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_YMAX)
|
||||
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_YMAX (or ENDSTOPPULLUPS) when homing to Y_MAX."
|
||||
#elif Z_SENSORLESS && Z_HOME_DIR < 0 && DISABLED(ENDSTOPPULLUP_ZMIN)
|
||||
#elif Z_SENSORLESS && Z_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_ZMIN)
|
||||
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMIN (or ENDSTOPPULLUPS) when homing to Z_MIN."
|
||||
#elif Z_SENSORLESS && Z_HOME_DIR > 0 && DISABLED(ENDSTOPPULLUP_ZMAX)
|
||||
#elif Z_SENSORLESS && Z_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_ZMAX)
|
||||
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMAX (or ENDSTOPPULLUPS) when homing to Z_MAX."
|
||||
#endif
|
||||
#endif
|
||||
@@ -2650,37 +2654,37 @@ static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal
|
||||
#warning "SPI_ENDSTOPS may be unreliable with QUICK_HOME. Adjust back-offs for better results."
|
||||
#endif
|
||||
#else
|
||||
#if X_SENSORLESS && X_HOME_DIR < 0 && X_MIN_ENDSTOP_INVERTING != X_ENDSTOP_INVERTING
|
||||
#if X_SENSORLESS && X_HOME_TO_MIN && X_MIN_ENDSTOP_INVERTING != X_ENDSTOP_INVERTING
|
||||
#if X_ENDSTOP_INVERTING
|
||||
#error "SENSORLESS_HOMING requires X_MIN_ENDSTOP_INVERTING = true when homing to X_MIN."
|
||||
#else
|
||||
#error "SENSORLESS_HOMING requires X_MIN_ENDSTOP_INVERTING = false when homing TMC2209 to X_MIN."
|
||||
#endif
|
||||
#elif X_SENSORLESS && X_HOME_DIR > 0 && X_MAX_ENDSTOP_INVERTING != X_ENDSTOP_INVERTING
|
||||
#elif X_SENSORLESS && X_HOME_TO_MAX && X_MAX_ENDSTOP_INVERTING != X_ENDSTOP_INVERTING
|
||||
#if X_ENDSTOP_INVERTING
|
||||
#error "SENSORLESS_HOMING requires X_MAX_ENDSTOP_INVERTING = true when homing to X_MAX."
|
||||
#else
|
||||
#error "SENSORLESS_HOMING requires X_MAX_ENDSTOP_INVERTING = false when homing TMC2209 to X_MAX."
|
||||
#endif
|
||||
#elif Y_SENSORLESS && Y_HOME_DIR < 0 && Y_MIN_ENDSTOP_INVERTING != Y_ENDSTOP_INVERTING
|
||||
#elif Y_SENSORLESS && Y_HOME_TO_MIN && Y_MIN_ENDSTOP_INVERTING != Y_ENDSTOP_INVERTING
|
||||
#if Y_ENDSTOP_INVERTING
|
||||
#error "SENSORLESS_HOMING requires Y_MIN_ENDSTOP_INVERTING = true when homing to Y_MIN."
|
||||
#else
|
||||
#error "SENSORLESS_HOMING requires Y_MIN_ENDSTOP_INVERTING = false when homing TMC2209 to Y_MIN."
|
||||
#endif
|
||||
#elif Y_SENSORLESS && Y_HOME_DIR > 0 && Y_MAX_ENDSTOP_INVERTING != Y_ENDSTOP_INVERTING
|
||||
#elif Y_SENSORLESS && Y_HOME_TO_MAX && Y_MAX_ENDSTOP_INVERTING != Y_ENDSTOP_INVERTING
|
||||
#if Y_ENDSTOP_INVERTING
|
||||
#error "SENSORLESS_HOMING requires Y_MAX_ENDSTOP_INVERTING = true when homing to Y_MAX."
|
||||
#else
|
||||
#error "SENSORLESS_HOMING requires Y_MAX_ENDSTOP_INVERTING = false when homing TMC2209 to Y_MAX."
|
||||
#endif
|
||||
#elif Z_SENSORLESS && Z_HOME_DIR < 0 && Z_MIN_ENDSTOP_INVERTING != Z_ENDSTOP_INVERTING
|
||||
#elif Z_SENSORLESS && Z_HOME_TO_MIN && Z_MIN_ENDSTOP_INVERTING != Z_ENDSTOP_INVERTING
|
||||
#if Z_ENDSTOP_INVERTING
|
||||
#error "SENSORLESS_HOMING requires Z_MIN_ENDSTOP_INVERTING = true when homing to Z_MIN."
|
||||
#else
|
||||
#error "SENSORLESS_HOMING requires Z_MIN_ENDSTOP_INVERTING = false when homing TMC2209 to Z_MIN."
|
||||
#endif
|
||||
#elif Z_SENSORLESS && Z_HOME_DIR > 0 && Z_MAX_ENDSTOP_INVERTING != Z_ENDSTOP_INVERTING
|
||||
#elif Z_SENSORLESS && Z_HOME_TO_MAX && Z_MAX_ENDSTOP_INVERTING != Z_ENDSTOP_INVERTING
|
||||
#if Z_ENDSTOP_INVERTING
|
||||
#error "SENSORLESS_HOMING requires Z_MAX_ENDSTOP_INVERTING = true when homing to Z_MAX."
|
||||
#else
|
||||
@@ -2819,22 +2823,22 @@ constexpr float sanity_arr_1[] = DEFAULT_AXIS_STEPS_PER_UNIT,
|
||||
#define _EXTRA_NOTE ""
|
||||
#endif
|
||||
|
||||
static_assert(COUNT(sanity_arr_1) >= XYZE, "DEFAULT_AXIS_STEPS_PER_UNIT requires X, Y, Z and E elements.");
|
||||
static_assert(COUNT(sanity_arr_1) <= XYZE_N, "DEFAULT_AXIS_STEPS_PER_UNIT has too many elements." _EXTRA_NOTE);
|
||||
static_assert(COUNT(sanity_arr_1) >= LOGICAL_AXES, "DEFAULT_AXIS_STEPS_PER_UNIT requires X, Y, Z and E elements.");
|
||||
static_assert(COUNT(sanity_arr_1) <= DISTINCT_AXES, "DEFAULT_AXIS_STEPS_PER_UNIT has too many elements." _EXTRA_NOTE);
|
||||
static_assert( _ARR_TEST(1,0) && _ARR_TEST(1,1) && _ARR_TEST(1,2)
|
||||
&& _ARR_TEST(1,3) && _ARR_TEST(1,4) && _ARR_TEST(1,5)
|
||||
&& _ARR_TEST(1,6) && _ARR_TEST(1,7) && _ARR_TEST(1,8),
|
||||
"DEFAULT_AXIS_STEPS_PER_UNIT values must be positive.");
|
||||
|
||||
static_assert(COUNT(sanity_arr_2) >= XYZE, "DEFAULT_MAX_FEEDRATE requires X, Y, Z and E elements.");
|
||||
static_assert(COUNT(sanity_arr_2) <= XYZE_N, "DEFAULT_MAX_FEEDRATE has too many elements." _EXTRA_NOTE);
|
||||
static_assert(COUNT(sanity_arr_2) >= LOGICAL_AXES, "DEFAULT_MAX_FEEDRATE requires X, Y, Z and E elements.");
|
||||
static_assert(COUNT(sanity_arr_2) <= DISTINCT_AXES, "DEFAULT_MAX_FEEDRATE has too many elements." _EXTRA_NOTE);
|
||||
static_assert( _ARR_TEST(2,0) && _ARR_TEST(2,1) && _ARR_TEST(2,2)
|
||||
&& _ARR_TEST(2,3) && _ARR_TEST(2,4) && _ARR_TEST(2,5)
|
||||
&& _ARR_TEST(2,6) && _ARR_TEST(2,7) && _ARR_TEST(2,8),
|
||||
"DEFAULT_MAX_FEEDRATE values must be positive.");
|
||||
|
||||
static_assert(COUNT(sanity_arr_3) >= XYZE, "DEFAULT_MAX_ACCELERATION requires X, Y, Z and E elements.");
|
||||
static_assert(COUNT(sanity_arr_3) <= XYZE_N, "DEFAULT_MAX_ACCELERATION has too many elements." _EXTRA_NOTE);
|
||||
static_assert(COUNT(sanity_arr_3) >= LOGICAL_AXES, "DEFAULT_MAX_ACCELERATION requires X, Y, Z and E elements.");
|
||||
static_assert(COUNT(sanity_arr_3) <= DISTINCT_AXES, "DEFAULT_MAX_ACCELERATION has too many elements." _EXTRA_NOTE);
|
||||
static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||
&& _ARR_TEST(3,3) && _ARR_TEST(3,4) && _ARR_TEST(3,5)
|
||||
&& _ARR_TEST(3,6) && _ARR_TEST(3,7) && _ARR_TEST(3,8),
|
||||
@@ -2843,8 +2847,8 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||
#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
|
||||
#ifdef MAX_ACCEL_EDIT_VALUES
|
||||
constexpr float sanity_arr_4[] = MAX_ACCEL_EDIT_VALUES;
|
||||
static_assert(COUNT(sanity_arr_4) >= XYZE, "MAX_ACCEL_EDIT_VALUES requires X, Y, Z and E elements.");
|
||||
static_assert(COUNT(sanity_arr_4) <= XYZE, "MAX_ACCEL_EDIT_VALUES has too many elements. X, Y, Z and E elements only.");
|
||||
static_assert(COUNT(sanity_arr_4) >= LOGICAL_AXES, "MAX_ACCEL_EDIT_VALUES requires X, Y, Z and E elements.");
|
||||
static_assert(COUNT(sanity_arr_4) <= LOGICAL_AXES, "MAX_ACCEL_EDIT_VALUES has too many elements. X, Y, Z and E elements only.");
|
||||
static_assert( _ARR_TEST(4,0) && _ARR_TEST(4,1) && _ARR_TEST(4,2)
|
||||
&& _ARR_TEST(4,3) && _ARR_TEST(4,4) && _ARR_TEST(4,5)
|
||||
&& _ARR_TEST(4,6) && _ARR_TEST(4,7) && _ARR_TEST(4,8),
|
||||
@@ -2855,8 +2859,8 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||
#if ENABLED(LIMITED_MAX_FR_EDITING)
|
||||
#ifdef MAX_FEEDRATE_EDIT_VALUES
|
||||
constexpr float sanity_arr_5[] = MAX_FEEDRATE_EDIT_VALUES;
|
||||
static_assert(COUNT(sanity_arr_5) >= XYZE, "MAX_FEEDRATE_EDIT_VALUES requires X, Y, Z and E elements.");
|
||||
static_assert(COUNT(sanity_arr_5) <= XYZE, "MAX_FEEDRATE_EDIT_VALUES has too many elements. X, Y, Z and E elements only.");
|
||||
static_assert(COUNT(sanity_arr_5) >= LOGICAL_AXES, "MAX_FEEDRATE_EDIT_VALUES requires X, Y, Z and E elements.");
|
||||
static_assert(COUNT(sanity_arr_5) <= LOGICAL_AXES, "MAX_FEEDRATE_EDIT_VALUES has too many elements. X, Y, Z and E elements only.");
|
||||
static_assert( _ARR_TEST(5,0) && _ARR_TEST(5,1) && _ARR_TEST(5,2)
|
||||
&& _ARR_TEST(5,3) && _ARR_TEST(5,4) && _ARR_TEST(5,5)
|
||||
&& _ARR_TEST(5,6) && _ARR_TEST(5,7) && _ARR_TEST(5,8),
|
||||
@@ -2867,8 +2871,8 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||
#if ENABLED(LIMITED_JERK_EDITING)
|
||||
#ifdef MAX_JERK_EDIT_VALUES
|
||||
constexpr float sanity_arr_6[] = MAX_JERK_EDIT_VALUES;
|
||||
static_assert(COUNT(sanity_arr_6) >= XYZE, "MAX_JERK_EDIT_VALUES requires X, Y, Z and E elements.");
|
||||
static_assert(COUNT(sanity_arr_6) <= XYZE, "MAX_JERK_EDIT_VALUES has too many elements. X, Y, Z and E elements only.");
|
||||
static_assert(COUNT(sanity_arr_6) >= LOGICAL_AXES, "MAX_JERK_EDIT_VALUES requires X, Y, Z and E elements.");
|
||||
static_assert(COUNT(sanity_arr_6) <= LOGICAL_AXES, "MAX_JERK_EDIT_VALUES has too many elements. X, Y, Z and E elements only.");
|
||||
static_assert( _ARR_TEST(6,0) && _ARR_TEST(6,1) && _ARR_TEST(6,2)
|
||||
&& _ARR_TEST(6,3) && _ARR_TEST(6,4) && _ARR_TEST(6,5)
|
||||
&& _ARR_TEST(6,6) && _ARR_TEST(6,7) && _ARR_TEST(6,8),
|
||||
@@ -2918,9 +2922,9 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||
#error "POWER_LOSS_RECOVER_ZHOME cannot be used with Z_SAFE_HOMING."
|
||||
#elif BOTH(POWER_LOSS_PULLUP, POWER_LOSS_PULLDOWN)
|
||||
#error "You can't enable POWER_LOSS_PULLUP and POWER_LOSS_PULLDOWN at the same time."
|
||||
#elif ENABLED(POWER_LOSS_RECOVER_ZHOME) && Z_HOME_DIR > 0
|
||||
#elif ENABLED(POWER_LOSS_RECOVER_ZHOME) && Z_HOME_TO_MAX
|
||||
#error "POWER_LOSS_RECOVER_ZHOME is not needed on a machine that homes to ZMAX."
|
||||
#elif BOTH(IS_CARTESIAN, POWER_LOSS_RECOVER_ZHOME) && Z_HOME_DIR < 0 && !defined(POWER_LOSS_ZHOME_POS)
|
||||
#elif BOTH(IS_CARTESIAN, POWER_LOSS_RECOVER_ZHOME) && Z_HOME_TO_MIN && !defined(POWER_LOSS_ZHOME_POS)
|
||||
#error "POWER_LOSS_RECOVER_ZHOME requires POWER_LOSS_ZHOME_POS for a Cartesian that homes to ZMIN."
|
||||
#endif
|
||||
#endif
|
||||
@@ -3247,7 +3251,7 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||
/**
|
||||
* Sanity check for MIXING_EXTRUDER & DISTINCT_E_FACTORS these are not compatible
|
||||
*/
|
||||
#if ENABLED(MIXING_EXTRUDER) && ENABLED(DISTINCT_E_FACTORS)
|
||||
#if BOTH(MIXING_EXTRUDER, DISTINCT_E_FACTORS)
|
||||
#error "MIXING_EXTRUDER can't be used with DISTINCT_E_FACTORS. But you may use SINGLENOZZLE with DISTINCT_E_FACTORS."
|
||||
#endif
|
||||
|
||||
|
@@ -25,7 +25,7 @@
|
||||
* Release version. Leave the Marlin version or apply a custom scheme.
|
||||
*/
|
||||
#ifndef SHORT_BUILD_VERSION
|
||||
#define SHORT_BUILD_VERSION "2.0.8.1"
|
||||
#define SHORT_BUILD_VERSION "2.0.8.2"
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -42,7 +42,7 @@
|
||||
* version was tagged.
|
||||
*/
|
||||
#ifndef STRING_DISTRIBUTION_DATE
|
||||
#define STRING_DISTRIBUTION_DATE "2021-05-15"
|
||||
#define STRING_DISTRIBUTION_DATE "2021-05-29"
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@@ -954,7 +954,7 @@ void MarlinUI::draw_status_screen() {
|
||||
else
|
||||
#endif
|
||||
{
|
||||
#if EXTRUDERS
|
||||
#if HAS_EXTRUDERS
|
||||
c = 'E';
|
||||
per = planner.flow_percentage[0];
|
||||
#endif
|
||||
|
@@ -422,7 +422,7 @@ void DGUSScreenHandler::HandleTemperatureChanged(DGUS_VP_Variable &var, void *va
|
||||
}
|
||||
|
||||
void DGUSScreenHandler::HandleFlowRateChanged(DGUS_VP_Variable &var, void *val_ptr) {
|
||||
#if EXTRUDERS
|
||||
#if HAS_EXTRUDERS
|
||||
uint16_t newvalue = swap16(*(uint16_t*)val_ptr);
|
||||
uint8_t target_extruder;
|
||||
switch (var.VP) {
|
||||
|
@@ -147,6 +147,7 @@ namespace ExtUI {
|
||||
case PID_DONE:
|
||||
ScreenHandler.setstatusmessagePGM(GET_TEXT(MSG_PID_AUTOTUNE_DONE));
|
||||
break;
|
||||
case PID_STARTED: break;
|
||||
}
|
||||
ScreenHandler.GotoScreen(DGUSLCD_SCREEN_MAIN);
|
||||
}
|
||||
|
@@ -691,7 +691,10 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = {
|
||||
VPHELPER(VP_X_PARK_POS, &mks_park_pos.x, ScreenHandler.GetParkPos_MKS, ScreenHandler.DGUSLCD_SendWordValueToDisplay),
|
||||
VPHELPER(VP_Y_PARK_POS, &mks_park_pos.y, ScreenHandler.GetParkPos_MKS, ScreenHandler.DGUSLCD_SendWordValueToDisplay),
|
||||
VPHELPER(VP_Z_PARK_POS, &mks_park_pos.z, ScreenHandler.GetParkPos_MKS, ScreenHandler.DGUSLCD_SendWordValueToDisplay),
|
||||
VPHELPER(VP_MIN_EX_T, &thermalManager.extrude_min_temp, ScreenHandler.HandleGetExMinTemp_MKS, ScreenHandler.DGUSLCD_SendWordValueToDisplay),
|
||||
|
||||
#if ENABLED(PREVENT_COLD_EXTRUSION)
|
||||
VPHELPER(VP_MIN_EX_T, &thermalManager.extrude_min_temp, ScreenHandler.HandleGetExMinTemp_MKS, ScreenHandler.DGUSLCD_SendWordValueToDisplay),
|
||||
#endif
|
||||
|
||||
#if ENABLED(SENSORLESS_HOMING) // TMC SENSORLESS Setting
|
||||
#if AXIS_HAS_STEALTHCHOP(X)
|
||||
@@ -743,7 +746,11 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = {
|
||||
VPHELPER(VP_ZOffset_Distance,nullptr ,ScreenHandler.GetZoffsetDistance, nullptr),
|
||||
VPHELPER(VP_MESH_LEVEL_ADJUST, nullptr, ScreenHandler.MeshLevelDistanceConfig, nullptr),
|
||||
VPHELPER(VP_MESH_LEVEL_POINT,nullptr, ScreenHandler.MeshLevel,nullptr),
|
||||
VPHELPER(VP_Min_EX_T_E, &thermalManager.extrude_min_temp, &ScreenHandler.GetMinExtrudeTemp, &ScreenHandler.DGUSLCD_SendWordValueToDisplay),
|
||||
|
||||
#if ENABLED(PREVENT_COLD_EXTRUSION)
|
||||
VPHELPER(VP_Min_EX_T_E, &thermalManager.extrude_min_temp, &ScreenHandler.GetMinExtrudeTemp, &ScreenHandler.DGUSLCD_SendWordValueToDisplay),
|
||||
#endif
|
||||
|
||||
VPHELPER(VP_AutoTurnOffSw, nullptr, &ScreenHandler.GetTurnOffCtrl, nullptr),
|
||||
|
||||
#if HOTENDS >= 1
|
||||
|
@@ -342,7 +342,7 @@ void DGUSScreenHandler::GetTurnOffCtrl(DGUS_VP_Variable &var, void *val_ptr) {
|
||||
void DGUSScreenHandler::GetMinExtrudeTemp(DGUS_VP_Variable &var, void *val_ptr) {
|
||||
DEBUG_ECHOLNPGM("GetMinExtrudeTemp");
|
||||
const uint16_t value = swap16(*(uint16_t *)val_ptr);
|
||||
thermalManager.extrude_min_temp = value;
|
||||
TERN_(PREVENT_COLD_EXTRUSION, thermalManager.extrude_min_temp = value);
|
||||
mks_min_extrusion_temp = value;
|
||||
settings.save();
|
||||
}
|
||||
@@ -1083,11 +1083,13 @@ void DGUSScreenHandler::HandleAccChange_MKS(DGUS_VP_Variable &var, void *val_ptr
|
||||
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
|
||||
}
|
||||
|
||||
void DGUSScreenHandler::HandleGetExMinTemp_MKS(DGUS_VP_Variable &var, void *val_ptr) {
|
||||
const uint16_t value_ex_min_temp = swap16(*(uint16_t*)val_ptr);
|
||||
thermalManager.extrude_min_temp = value_ex_min_temp;
|
||||
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
|
||||
}
|
||||
#if ENABLED(PREVENT_COLD_EXTRUSION)
|
||||
void DGUSScreenHandler::HandleGetExMinTemp_MKS(DGUS_VP_Variable &var, void *val_ptr) {
|
||||
const uint16_t value_ex_min_temp = swap16(*(uint16_t*)val_ptr);
|
||||
thermalManager.extrude_min_temp = value_ex_min_temp;
|
||||
skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
|
||||
}
|
||||
#endif
|
||||
|
||||
#if HAS_PID_HEATING
|
||||
void DGUSScreenHandler::HandleTemperaturePIDChanged(DGUS_VP_Variable &var, void *val_ptr) {
|
||||
@@ -1231,7 +1233,7 @@ void DGUSScreenHandler::MKS_FilamentLoadUnload(DGUS_VP_Variable &var, void *val_
|
||||
break;
|
||||
}
|
||||
|
||||
#if HAS_HOTEND
|
||||
#if BOTH(HAS_HOTEND, PREVENT_COLD_EXTRUSION)
|
||||
if (hotend_too_cold) {
|
||||
if (thermalManager.targetTooColdToExtrude(hotend_too_cold - 1)) thermalManager.setTargetHotend(thermalManager.extrude_min_temp, hotend_too_cold - 1);
|
||||
sendinfoscreen(PSTR("NOTICE"), nullptr, PSTR("Please wait."), PSTR("Nozzle heating!"), true, true, true, true);
|
||||
@@ -1428,8 +1430,10 @@ bool DGUSScreenHandler::loop() {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (mks_min_extrusion_temp != 0)
|
||||
thermalManager.extrude_min_temp = mks_min_extrusion_temp;
|
||||
#if ENABLED(PREVENT_COLD_EXTRUSION)
|
||||
if (mks_min_extrusion_temp != 0)
|
||||
thermalManager.extrude_min_temp = mks_min_extrusion_temp;
|
||||
#endif
|
||||
|
||||
DGUS_ExtrudeLoadInit();
|
||||
|
||||
|
@@ -82,7 +82,9 @@ public:
|
||||
static void GetZoffsetDistance(DGUS_VP_Variable &var, void *val_ptr);
|
||||
static void GetMinExtrudeTemp(DGUS_VP_Variable &var, void *val_ptr);
|
||||
static void GetParkPos_MKS(DGUS_VP_Variable &var, void *val_ptr);
|
||||
static void HandleGetExMinTemp_MKS(DGUS_VP_Variable &var, void *val_ptr);
|
||||
#if ENABLED(PREVENT_COLD_EXTRUSION)
|
||||
static void HandleGetExMinTemp_MKS(DGUS_VP_Variable &var, void *val_ptr);
|
||||
#endif
|
||||
static void DGUS_LanguageDisplay(uint8_t var);
|
||||
static void TMC_ChangeConfig(DGUS_VP_Variable &var, void *val_ptr);
|
||||
static void GetTurnOffCtrl(DGUS_VP_Variable &var, void *val_ptr);
|
||||
|
@@ -119,6 +119,12 @@ namespace ExtUI {
|
||||
#if HAS_PID_HEATING
|
||||
void onPidTuning(const result_t rst) {
|
||||
// Called for temperature PID tuning result
|
||||
switch (rst) {
|
||||
case PID_BAD_EXTRUDER_NUM: break;
|
||||
case PID_TEMP_TOO_HIGH: break;
|
||||
case PID_TUNING_TIMEOUT: break;
|
||||
case PID_DONE: break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@@ -66,7 +66,7 @@ void MoveAxisScreen::onRedraw(draw_mode_t what) {
|
||||
w.adjuster( 14, GET_TEXT_F(MSG_AXIS_E4), mydata.e_rel[3], canMove(E3));
|
||||
#endif
|
||||
#endif
|
||||
#if Z_HOME_DIR < 0
|
||||
#if Z_HOME_TO_MIN
|
||||
w.button(24, GET_TEXT_F(MSG_MOVE_Z_TO_TOP), !axis_should_home(Z_AXIS));
|
||||
#endif
|
||||
w.increments();
|
||||
|
@@ -28,11 +28,12 @@
|
||||
#include "wifi_upload.h"
|
||||
#include "SPI_TFT.h"
|
||||
|
||||
#include "../../marlinui.h"
|
||||
|
||||
#include "../../../MarlinCore.h"
|
||||
#include "../../../module/temperature.h"
|
||||
#include "../../../gcode/queue.h"
|
||||
#include "../../../gcode/gcode.h"
|
||||
#include "../../../lcd/marlinui.h"
|
||||
#include "../../../sd/cardreader.h"
|
||||
#include "../../../module/planner.h"
|
||||
#include "../../../module/servo.h"
|
||||
@@ -621,9 +622,9 @@ static void wifi_gcode_exec(uint8_t *cmd_line) {
|
||||
|
||||
if (tmpStr == 0) {
|
||||
gCfgItems.fileSysType = FILE_SYS_SD;
|
||||
send_to_wifi((uint8_t *)"Begin file list\r\n", strlen("Begin file list\r\n"));
|
||||
send_to_wifi((uint8_t *)(STR_BEGIN_FILE_LIST "\r\n"), strlen(STR_BEGIN_FILE_LIST "\r\n"));
|
||||
get_file_list((char *)"0:/");
|
||||
send_to_wifi((uint8_t *)"End file list\r\n", strlen("End file list\r\n"));
|
||||
send_to_wifi((uint8_t *)(STR_END_FILE_LIST "\r\n"), strlen(STR_END_FILE_LIST "\r\n"));
|
||||
SEND_OK_TO_WIFI;
|
||||
break;
|
||||
}
|
||||
@@ -634,7 +635,7 @@ static void wifi_gcode_exec(uint8_t *cmd_line) {
|
||||
char *path = (char *)tempBuf;
|
||||
|
||||
if (strlen((char *)&tmpStr[index]) < 80) {
|
||||
send_to_wifi((uint8_t *)"Begin file list\r\n", strlen("Begin file list\r\n"));
|
||||
send_to_wifi((uint8_t *)(STR_BEGIN_FILE_LIST "\r\n"), strlen(STR_BEGIN_FILE_LIST "\r\n"));
|
||||
|
||||
if (strncmp((char *)&tmpStr[index], "1:", 2) == 0)
|
||||
gCfgItems.fileSysType = FILE_SYS_SD;
|
||||
@@ -643,7 +644,7 @@ static void wifi_gcode_exec(uint8_t *cmd_line) {
|
||||
|
||||
strcpy((char *)path, (char *)&tmpStr[index]);
|
||||
get_file_list(path);
|
||||
send_to_wifi((uint8_t *)"End file list\r\n", strlen("End file list\r\n"));
|
||||
send_to_wifi((uint8_t *)(STR_END_FILE_LIST "\r\n"), strlen(STR_END_FILE_LIST "\r\n"));
|
||||
}
|
||||
SEND_OK_TO_WIFI;
|
||||
}
|
||||
|
@@ -569,7 +569,7 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
float getAxisSteps_per_mm(const extruder_t extruder) {
|
||||
UNUSED_E(extruder);
|
||||
UNUSED(extruder);
|
||||
return planner.settings.axis_steps_per_mm[E_AXIS_N(extruder - E0)];
|
||||
}
|
||||
|
||||
@@ -579,7 +579,7 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
void setAxisSteps_per_mm(const_float_t value, const extruder_t extruder) {
|
||||
UNUSED_E(extruder);
|
||||
UNUSED(extruder);
|
||||
planner.settings.axis_steps_per_mm[E_AXIS_N(extruder - E0)] = value;
|
||||
planner.refresh_positioning();
|
||||
}
|
||||
@@ -589,7 +589,7 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
feedRate_t getAxisMaxFeedrate_mm_s(const extruder_t extruder) {
|
||||
UNUSED_E(extruder);
|
||||
UNUSED(extruder);
|
||||
return planner.settings.max_feedrate_mm_s[E_AXIS_N(extruder - E0)];
|
||||
}
|
||||
|
||||
@@ -598,7 +598,7 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
void setAxisMaxFeedrate_mm_s(const feedRate_t value, const extruder_t extruder) {
|
||||
UNUSED_E(extruder);
|
||||
UNUSED(extruder);
|
||||
planner.set_max_feedrate(E_AXIS_N(extruder - E0), value);
|
||||
}
|
||||
|
||||
@@ -607,7 +607,7 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
float getAxisMaxAcceleration_mm_s2(const extruder_t extruder) {
|
||||
UNUSED_E(extruder);
|
||||
UNUSED(extruder);
|
||||
return planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(extruder - E0)];
|
||||
}
|
||||
|
||||
@@ -616,7 +616,7 @@ namespace ExtUI {
|
||||
}
|
||||
|
||||
void setAxisMaxAcceleration_mm_s2(const_float_t value, const extruder_t extruder) {
|
||||
UNUSED_E(extruder);
|
||||
UNUSED(extruder);
|
||||
planner.set_max_acceleration(E_AXIS_N(extruder - E0), value);
|
||||
}
|
||||
|
||||
|
@@ -26,6 +26,13 @@
|
||||
*
|
||||
* LCD Menu Messages
|
||||
* See also https://marlinfw.org/docs/development/lcd_language.html
|
||||
*
|
||||
* Substitutions are applied for the following characters when used
|
||||
* in menu items that call lcd_put_u8str_ind_P with an index:
|
||||
*
|
||||
* = displays '0'....'10' for indexes 0 - 10
|
||||
* ~ displays '1'....'11' for indexes 0 - 10
|
||||
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
|
||||
*/
|
||||
|
||||
#define DISPLAY_CHARSET_ISO10646_PL
|
||||
@@ -34,9 +41,10 @@ namespace Language_pl {
|
||||
using namespace Language_en; // Inherit undefined strings from English
|
||||
|
||||
constexpr uint8_t CHARSIZE = 2;
|
||||
PROGMEM Language_Str LANGUAGE = _UxGT("Polish");
|
||||
PROGMEM Language_Str LANGUAGE = _UxGT("Polski");
|
||||
|
||||
PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" gotowy.");
|
||||
//PROGMEM Language_Str MSG_MARLIN = _UxGT("Marlin");
|
||||
PROGMEM Language_Str MSG_YES = _UxGT("TAK");
|
||||
PROGMEM Language_Str MSG_NO = _UxGT("NIE");
|
||||
PROGMEM Language_Str MSG_BACK = _UxGT("Wstecz");
|
||||
@@ -44,9 +52,11 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Karta włożona");
|
||||
PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Karta usunięta");
|
||||
PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Oczekiwanie na kartę");
|
||||
PROGMEM Language_Str MSG_SD_INIT_FAIL = _UxGT("Błąd inicializacji karty");
|
||||
PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Bład odczytu karty");
|
||||
PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("Urządzenie USB usunięte");
|
||||
PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Błąd uruchomienia USB");
|
||||
//PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Subcall Overflow");
|
||||
PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Krańców."); // Max length 8 characters
|
||||
PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Progr. Krańcówki");
|
||||
PROGMEM Language_Str MSG_MAIN = _UxGT("Menu główne");
|
||||
@@ -61,14 +71,24 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Zeruj Y");
|
||||
PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Zeruj Z");
|
||||
PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Autowyrównanie Z");
|
||||
//PROGMEM Language_Str MSG_ITERATION = _UxGT("G34 Iteration: %i");
|
||||
PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("Spadek dokładności!");
|
||||
PROGMEM Language_Str MSG_ACCURACY_ACHIEVED = _UxGT("Osiągnięto dokładność");
|
||||
PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Pozycja zerowa");
|
||||
PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Kliknij by rozp.");
|
||||
PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Następny punkt");
|
||||
PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Wypoziomowano!");
|
||||
PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Wys. zanikania");
|
||||
PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Ust. poz. zer.");
|
||||
//PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Home Offset X");
|
||||
//PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Home Offset Y");
|
||||
//PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Home Offset Z");
|
||||
PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Poz. zerowa ust.");
|
||||
PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Ustaw punkt zero");
|
||||
//PROGMEM Language_Str MSG_ASSISTED_TRAMMING = _UxGT("Assisted Tramming");
|
||||
//PROGMEM Language_Str MSG_TRAMMING_WIZARD = _UxGT("Tramming Wizard");
|
||||
PROGMEM Language_Str MSG_SELECT_ORIGIN = _UxGT("Wybierz punkt zero");
|
||||
PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Poprzednia wartość ");
|
||||
#if PREHEAT_COUNT
|
||||
PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL;
|
||||
PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " ~";
|
||||
@@ -88,10 +108,21 @@ namespace Language_pl {
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Rozgrzej własne ust.");
|
||||
PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Chłodzenie");
|
||||
|
||||
PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Częstotliwość");
|
||||
PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Sterowanie Lasera");
|
||||
PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Zasilanie Lasera");
|
||||
PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Sterowanie wrzeciona");
|
||||
PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Zasilanie Lasera");
|
||||
PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Zasilanie wrzeciona");
|
||||
//PROGMEM Language_Str MSG_LASER_TOGGLE = _UxGT("Toggle Laser");
|
||||
//PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE = _UxGT("Toggle Blower");
|
||||
//PROGMEM Language_Str MSG_LASER_ASSIST_TOGGLE = _UxGT("Air Assist");
|
||||
//PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("Test Pulse ms");
|
||||
//PROGMEM Language_Str MSG_LASER_FIRE_PULSE = _UxGT("Fire Pulse");
|
||||
//PROGMEM Language_Str MSG_FLOWMETER_FAULT = _UxGT("Coolant Flow Fault");
|
||||
//PROGMEM Language_Str MSG_SPINDLE_TOGGLE = _UxGT("Toggle Spindle");
|
||||
//PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Toggle Vacuum");
|
||||
//PROGMEM Language_Str MSG_SPINDLE_FORWARD = _UxGT("Spindle Forward");
|
||||
PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Rewers wrzeciona");
|
||||
PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Włącz zasilacz");
|
||||
PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Wyłącz zasilacz");
|
||||
@@ -101,6 +132,10 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Poziomowanie stołu");
|
||||
PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Wypoziomuj stół");
|
||||
PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Narożniki poziomowania");
|
||||
//PROGMEM Language_Str MSG_LEVEL_CORNERS_RAISE = _UxGT("Raise Bed Until Probe Triggered");
|
||||
//PROGMEM Language_Str MSG_LEVEL_CORNERS_IN_RANGE = _UxGT("All Corners Within Tolerance. Level Bed");
|
||||
//PROGMEM Language_Str MSG_LEVEL_CORNERS_GOOD_POINTS = _UxGT("Good Points: ");
|
||||
//PROGMEM Language_Str MSG_LEVEL_CORNERS_LAST_Z = _UxGT("Last Z: ");
|
||||
PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Nastepny narożnik");
|
||||
PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Edytor siatki");
|
||||
PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Edycja siatki");
|
||||
@@ -112,6 +147,7 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Własne Polecenia");
|
||||
PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Test sondy");
|
||||
PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Punky");
|
||||
//PROGMEM Language_Str MSG_M48_OUT_OF_BOUNDS = _UxGT("Probe out of bounds");
|
||||
PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Odchylenie");
|
||||
PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Tryb IDEX");
|
||||
PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Przesunięcie narzędzia");
|
||||
@@ -119,14 +155,16 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikowanie");
|
||||
PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Kopia lustrzana");
|
||||
PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Pełne sterowanie");
|
||||
//PROGMEM Language_Str MSG_IDEX_DUPE_GAP = _UxGT("Duplicate X-Gap");
|
||||
PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2ga dysza X");
|
||||
PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2ga dysza Y");
|
||||
PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2ga dysza Z");
|
||||
PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Wykonywanie G29");
|
||||
PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Narzędzia UBL");
|
||||
PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
|
||||
//PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
|
||||
PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Punkt pochylenia");
|
||||
PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Ręczne Budowanie Siatki");
|
||||
//PROGMEM Language_Str MSG_UBL_MESH_WIZARD = _UxGT("UBL Mesh Wizard");
|
||||
PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Umieść podkładkę i zmierz");
|
||||
PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Zmierz");
|
||||
PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Usuń & Zmierz Stół");
|
||||
@@ -143,14 +181,12 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Koniec edycji siati");
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Buduj własna siatkę");
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Buduj siatkę");
|
||||
#if PREHEAT_COUNT
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Buduj siatkę ($)");
|
||||
PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Sprawdzenie siatki ($)");
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Buduj siatkę ($)");
|
||||
PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Buduj siatkę na zimno");
|
||||
PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Dostrojenie wysokości siatki");
|
||||
PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Wartość wysokości");
|
||||
PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Sprawdzenie siatki");
|
||||
PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Sprawdzenie siatki ($)");
|
||||
PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Sprawdzenie własnej siatki");
|
||||
PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Nagrzewanie stołu");
|
||||
PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Nagrzewanie dyszy");
|
||||
@@ -211,6 +247,10 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Fioletowy");
|
||||
PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Biały");
|
||||
PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Domyślny");
|
||||
PROGMEM Language_Str MSG_LED_CHANNEL_N = _UxGT("Kanał =");
|
||||
//PROGMEM Language_Str MSG_LEDS2 = _UxGT("Lights #2");
|
||||
//PROGMEM Language_Str MSG_NEO2_PRESETS = _UxGT("Light #2 Presets");
|
||||
PROGMEM Language_Str MSG_NEO2_BRIGHTNESS = _UxGT("Jasność");
|
||||
PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Własne światła");
|
||||
PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Czerwony");
|
||||
PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Zielony");
|
||||
@@ -226,31 +266,60 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_MOVE_E = _UxGT("Ekstruzja (os E)");
|
||||
PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Ekstruzja (os E) *");
|
||||
PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Dysza za zimna");
|
||||
PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Przesuń co %smm");
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Przesuń co .1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Przesuń co 1mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Przesuń co 10mm");
|
||||
PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Przesuń co %s mm");
|
||||
PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Przesuń co .1 mm");
|
||||
PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Przesuń co 1 mm");
|
||||
PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Przesuń co 10 mm");
|
||||
PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Przesuń co 0.001 cala");
|
||||
PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Przesuń co 0.01 cala");
|
||||
PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Przesuń co 0.1 cala");
|
||||
PROGMEM Language_Str MSG_SPEED = _UxGT("Predkość");
|
||||
PROGMEM Language_Str MSG_BED_Z = _UxGT("Stół Z");
|
||||
PROGMEM Language_Str MSG_NOZZLE = _UxGT("Dysza");
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Dysza ~");
|
||||
//PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Nozzle Parked");
|
||||
PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Dysza w oczekiwaniu");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Stół");
|
||||
PROGMEM Language_Str MSG_CHAMBER = _UxGT("Obudowa");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Obroty wiatraka");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Obroty wiatraka ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Obroty dodatkowego wiatraka");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Obroty dodatkowego wiatraka ~");
|
||||
//PROGMEM Language_Str MSG_COOLER = _UxGT("Laser Coolant");
|
||||
//PROGMEM Language_Str MSG_COOLER_TOGGLE = _UxGT("Toggle Cooler");
|
||||
//PROGMEM Language_Str MSG_FLOWMETER_SAFETY = _UxGT("Flow Safety");
|
||||
//PROGMEM Language_Str MSG_LASER = _UxGT("Laser");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Obroty wentylatora");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Obroty wentylatora ~");
|
||||
//PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Stored Fan ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Obroty dodatkowego wentylatora");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Obroty dodatkowego wentylatora ~");
|
||||
PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Wentylator kontrolera");
|
||||
//PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Idle Speed");
|
||||
//PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto Mode");
|
||||
//PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Active Speed");
|
||||
//PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("Idle Period");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Przepływ");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Przepływ ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Ustawienia");
|
||||
PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
|
||||
PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
|
||||
//PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
|
||||
//PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
|
||||
PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Mnożnik");
|
||||
PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Auto. temperatura");
|
||||
PROGMEM Language_Str MSG_LCD_ON = _UxGT("Wł.");
|
||||
PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Wył.");
|
||||
PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID Autostrojenie");
|
||||
PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID Autostrojenie *");
|
||||
PROGMEM Language_Str MSG_PID_AUTOTUNE_DONE = _UxGT("Strojenie PID zakończone");
|
||||
//PROGMEM Language_Str MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune failed. Bad extruder.");
|
||||
//PROGMEM Language_Str MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune failed. Temperature too high.");
|
||||
//PROGMEM Language_Str MSG_PID_TIMEOUT = _UxGT("Autotune failed! Timeout.");
|
||||
//PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
|
||||
//PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
|
||||
//PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
|
||||
//PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
|
||||
//PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
|
||||
//PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
|
||||
//PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
|
||||
//PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
|
||||
//PROGMEM Language_Str MSG_PID_F = _UxGT("PID-F");
|
||||
//PROGMEM Language_Str MSG_PID_F_E = _UxGT("PID-F *");
|
||||
PROGMEM Language_Str MSG_SELECT = _UxGT("Wybierz");
|
||||
PROGMEM Language_Str MSG_SELECT_E = _UxGT("Wybierz *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("Przyspieszenie");
|
||||
@@ -259,61 +328,83 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_VB_JERK = _UxGT("Zryw V") LCD_STR_B;
|
||||
PROGMEM Language_Str MSG_VC_JERK = _UxGT("Zryw V") LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_VE_JERK = _UxGT("Zryw Ve");
|
||||
PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
|
||||
//PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
|
||||
PROGMEM Language_Str MSG_VELOCITY = _UxGT("Prędkość (V)");
|
||||
PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
|
||||
PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
|
||||
PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
|
||||
PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Vmax *");
|
||||
PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
|
||||
//PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
|
||||
//PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
|
||||
//PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
|
||||
//PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
|
||||
//PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Vmax *");
|
||||
//PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
|
||||
PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vskok min");
|
||||
PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Przyspieszenie (A)");
|
||||
PROGMEM Language_Str MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A;
|
||||
PROGMEM Language_Str MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B;
|
||||
PROGMEM Language_Str MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E;
|
||||
PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Amax *");
|
||||
//PROGMEM Language_Str MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A;
|
||||
//PROGMEM Language_Str MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B;
|
||||
//PROGMEM Language_Str MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C;
|
||||
//PROGMEM Language_Str MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E;
|
||||
//PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Amax *");
|
||||
PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-wycofanie");
|
||||
PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-przesuń.");
|
||||
PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT = _UxGT("Częstotliwość max");
|
||||
//PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Feed min");
|
||||
PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("kroki/mm");
|
||||
PROGMEM Language_Str MSG_A_STEPS = _UxGT("kroki") LCD_STR_A _UxGT("/mm");
|
||||
PROGMEM Language_Str MSG_B_STEPS = _UxGT("kroki") LCD_STR_B _UxGT("/mm");
|
||||
PROGMEM Language_Str MSG_C_STEPS = _UxGT("kroki") LCD_STR_C _UxGT("/mm");
|
||||
PROGMEM Language_Str MSG_E_STEPS = _UxGT("krokiE/mm");
|
||||
PROGMEM Language_Str MSG_EN_STEPS = _UxGT("kroki */mm");
|
||||
PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" kroki/mm");
|
||||
PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" kroki/mm");
|
||||
PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" kroki/mm");
|
||||
PROGMEM Language_Str MSG_E_STEPS = _UxGT("E kroki/mm");
|
||||
PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* kroki/mm");
|
||||
PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
|
||||
PROGMEM Language_Str MSG_MOTION = _UxGT("Ruch");
|
||||
PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
|
||||
//PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
|
||||
PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E w mm") SUPERSCRIPT_THREE;
|
||||
//PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit in mm") SUPERSCRIPT_THREE;
|
||||
//PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
|
||||
PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Śr. fil.");
|
||||
PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Śr. fil. *");
|
||||
PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Wysuń mm");
|
||||
PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Wsuń mm");
|
||||
PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Advance K");
|
||||
PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Advance K *");
|
||||
//PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Advance K");
|
||||
//PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Advance K *");
|
||||
PROGMEM Language_Str MSG_CONTRAST = _UxGT("Kontrast LCD");
|
||||
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Zapisz w pamięci");
|
||||
PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Wczytaj z pamięci");
|
||||
PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Ustaw. fabryczne");
|
||||
PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Initializuj EEPROM");
|
||||
//PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Error");
|
||||
//PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Error");
|
||||
//PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Error");
|
||||
//PROGMEM Language_Str MSG_SETTINGS_STORED = _UxGT("Settings Stored");
|
||||
PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Uaktualnij kartę");
|
||||
PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Resetuj drukarkę");
|
||||
PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Odswież");
|
||||
PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Ekran główny");
|
||||
PROGMEM Language_Str MSG_PREPARE = _UxGT("Przygotuj");
|
||||
PROGMEM Language_Str MSG_TUNE = _UxGT("Strojenie");
|
||||
//PROGMEM Language_Str MSG_POWER_MONITOR = _UxGT("Power monitor");
|
||||
PROGMEM Language_Str MSG_CURRENT = _UxGT("Natężenie");
|
||||
PROGMEM Language_Str MSG_VOLTAGE = _UxGT("Napięcie");
|
||||
PROGMEM Language_Str MSG_POWER = _UxGT("Moc");
|
||||
PROGMEM Language_Str MSG_START_PRINT = _UxGT("Start wydruku");
|
||||
PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Następny");
|
||||
PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Inic.");
|
||||
PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stop");
|
||||
//PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stop");
|
||||
PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Drukuj");
|
||||
PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Resetuj");
|
||||
PROGMEM Language_Str MSG_BUTTON_IGNORE = _UxGT("Ignoruj");
|
||||
PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Przerwij");
|
||||
PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Gotowe");
|
||||
PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Wstecz");
|
||||
PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Kontynuuj");
|
||||
PROGMEM Language_Str MSG_BUTTON_SKIP = _UxGT("Pomiń");
|
||||
PROGMEM Language_Str MSG_PAUSING = _UxGT("Wstrzymywanie...");
|
||||
PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Wstrzymaj druk");
|
||||
PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Wznowienie");
|
||||
//PROGMEM Language_Str MSG_HOST_START_PRINT = _UxGT("Host Start");
|
||||
PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Stop");
|
||||
//PROGMEM Language_Str MSG_END_LOOPS = _UxGT("End Repeat Loops");
|
||||
PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Drukowanie obiektu");
|
||||
PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Anunuj obiekt");
|
||||
PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Anunuj obiekt =");
|
||||
PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Odzyskiwanie po awarii");
|
||||
PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Karta SD");
|
||||
PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Brak karty");
|
||||
@@ -322,6 +413,7 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Druk wstrzymany");
|
||||
PROGMEM Language_Str MSG_PRINTING = _UxGT("Drukowanie...");
|
||||
PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Druk przerwany");
|
||||
PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Druk zakończony");
|
||||
PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Brak ruchu");
|
||||
PROGMEM Language_Str MSG_KILLED = _UxGT("Ubity. ");
|
||||
PROGMEM Language_Str MSG_STOPPED = _UxGT("Zatrzymany. ");
|
||||
@@ -331,15 +423,26 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Skok Z mm");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Cof. wycof. mm");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Z Cof. wyc. mm");
|
||||
//PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
|
||||
PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Cof. wycof. V");
|
||||
PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto. wycofanie");
|
||||
PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Długość zmiany");
|
||||
//PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Swap Extra");
|
||||
PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Długość oczyszczania");
|
||||
PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Zmiana narzędzia");
|
||||
PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Podniesienie Z");
|
||||
PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prędkość napełniania");
|
||||
PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Prędkość wycofania");
|
||||
PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Dysza w oczekiwaniu");
|
||||
//PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("Park Head");
|
||||
//PROGMEM Language_Str MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Recover Speed");
|
||||
//PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Fan Speed");
|
||||
//PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Fan Time");
|
||||
//PROGMEM Language_Str MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
|
||||
//PROGMEM Language_Str MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
|
||||
//PROGMEM Language_Str MSG_TOOL_MIGRATION = _UxGT("Tool Migration");
|
||||
//PROGMEM Language_Str MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-migration");
|
||||
//PROGMEM Language_Str MSG_TOOL_MIGRATION_END = _UxGT("Last Extruder");
|
||||
//PROGMEM Language_Str MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrate to *");
|
||||
PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Zmień filament");
|
||||
PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Zmień filament *");
|
||||
PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Wsuń Filament");
|
||||
@@ -352,31 +455,35 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Zwolnienie karty");
|
||||
PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z za stołem");
|
||||
PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Współczynik skrzywienia");
|
||||
PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
|
||||
//PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Self-Test");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Stow");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Deploy");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("SW-Mode");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("5V-Mode");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("OD-Mode");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Set BLTouch to 5V");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Set BLTouch to OD");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Report Drain");
|
||||
//PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Stow");
|
||||
//PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Deploy");
|
||||
//PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("SW-Mode");
|
||||
//PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("5V-Mode");
|
||||
//PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("OD-Mode");
|
||||
//PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
|
||||
//PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Set BLTouch to 5V");
|
||||
//PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Set BLTouch to OD");
|
||||
//PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Report Drain");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("UWAGA: Złe ustawienia mogą uszkodzić drukarkę. Kontynuować?");
|
||||
PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
|
||||
PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
|
||||
PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Z Offset Test");
|
||||
PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Save");
|
||||
PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Deploy TouchMI");
|
||||
PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Deploy Z-Probe");
|
||||
PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Stow Z-Probe");
|
||||
//PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
|
||||
//PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
|
||||
//PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Z Offset Test");
|
||||
//PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Save");
|
||||
//PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Deploy TouchMI");
|
||||
//PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Deploy Z-Probe");
|
||||
//PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Stow Z-Probe");
|
||||
PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Najpierw Home %s%s%s");
|
||||
//PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Probe Offsets");
|
||||
//PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Probe X Offset");
|
||||
//PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Probe Y Offset");
|
||||
PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Offset Z");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
|
||||
PROGMEM Language_Str MSG_MOVE_NOZZLE_TO_BED = _UxGT("Przesuń dyszę do stołu");
|
||||
//PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
|
||||
//PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
|
||||
//PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Łącznie");
|
||||
PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Błąd krańcówki");
|
||||
PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Rozgrz. nieudane");
|
||||
@@ -384,19 +491,24 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ZANIK TEMPERATURY");
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("ZANIK TEMP. STOŁU");
|
||||
PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ZANIK TEMP.KOMORY");
|
||||
//PROGMEM Language_Str MSG_THERMAL_RUNAWAY_COOLER = _UxGT("Cooler Runaway");
|
||||
//PROGMEM Language_Str MSG_COOLING_FAILED = _UxGT("Cooling Failed");
|
||||
PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Błąd: MAXTEMP");
|
||||
PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Błąd: MINTEMP");
|
||||
PROGMEM Language_Str MSG_HALTED = _UxGT("Drukarka zatrzym.");
|
||||
PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Proszę zresetować");
|
||||
PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
|
||||
//PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
|
||||
PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("g"); // One character only
|
||||
PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
|
||||
//PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
|
||||
PROGMEM Language_Str MSG_HEATING = _UxGT("Rozgrzewanie...");
|
||||
PROGMEM Language_Str MSG_COOLING = _UxGT("Chłodzenie...");
|
||||
PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Rozgrzewanie stołu...");
|
||||
PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Chłodzenie stołu...");
|
||||
//PROGMEM Language_Str MSG_PROBE_HEATING = _UxGT("Probe Heating...");
|
||||
//PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Probe Cooling...");
|
||||
PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Rozgrzewanie komory...");
|
||||
PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Chłodzenie komory...");
|
||||
//PROGMEM Language_Str MSG_LASER_COOLING = _UxGT("Laser Cooling...");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Kalibrowanie Delty");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibruj X");
|
||||
PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibruj Y");
|
||||
@@ -414,8 +526,9 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Poziomowanie 3-punktowe");
|
||||
PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Poziomowanie liniowe");
|
||||
PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Poziomowanie biliniowe");
|
||||
PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
|
||||
//PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
|
||||
PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Poziomowanie siatką");
|
||||
//PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Mesh probing done");
|
||||
PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Statystyki");
|
||||
PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info płyty");
|
||||
PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistory");
|
||||
@@ -424,6 +537,7 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokół");
|
||||
PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Zegar pracy: OFF");
|
||||
PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Zegar pracy: ON");
|
||||
//PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
|
||||
|
||||
PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Oświetlenie obudowy");
|
||||
PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jasność oświetlenia");
|
||||
@@ -443,8 +557,8 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Użyty fil.");
|
||||
#endif
|
||||
|
||||
PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
|
||||
PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
|
||||
//PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
|
||||
//PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
|
||||
PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Zasilacz");
|
||||
PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Siła silnika");
|
||||
PROGMEM Language_Str MSG_DAC_PERCENT_X = _UxGT("X Siła %");
|
||||
@@ -467,7 +581,7 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Sondowanie nieudane");
|
||||
|
||||
PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("WYBIERZ FILAMENT");
|
||||
PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
|
||||
//PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
|
||||
PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("Uaktualnij firmware MMU!");
|
||||
PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU wymaga uwagi.");
|
||||
PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Wznów wydruk");
|
||||
@@ -482,7 +596,7 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Wysuwanie fil. ...");
|
||||
PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Wysuwanie fil....");
|
||||
PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Wszystko");
|
||||
PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
|
||||
//PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
|
||||
PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Resetuj MMU");
|
||||
PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Resetowanie MMU...");
|
||||
PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Usuń, kliknij");
|
||||
@@ -490,12 +604,41 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_MIX = _UxGT("Miks");
|
||||
PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Komponent =");
|
||||
PROGMEM Language_Str MSG_MIXER = _UxGT("Mikser");
|
||||
PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradient");
|
||||
//PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradient");
|
||||
PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Pełny gradient");
|
||||
PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Przełacz miks");
|
||||
PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Cycle Mix");
|
||||
PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
|
||||
//PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Cycle Mix");
|
||||
//PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
|
||||
PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Odwrotny gradient");
|
||||
//PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
|
||||
//PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Start V-tool");
|
||||
//PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" End V-tool");
|
||||
//PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
|
||||
//PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Reset V-tools");
|
||||
//PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Commit V-tool Mix");
|
||||
//PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-tools Were Reset");
|
||||
//PROGMEM Language_Str MSG_START_Z = _UxGT("Start Z:");
|
||||
//PROGMEM Language_Str MSG_END_Z = _UxGT(" End Z:");
|
||||
|
||||
PROGMEM Language_Str MSG_GAMES = _UxGT("Gry");
|
||||
//PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
|
||||
//PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
|
||||
//PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
|
||||
//PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
|
||||
|
||||
//PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Bad page index");
|
||||
//PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Bad page speed");
|
||||
|
||||
PROGMEM Language_Str MSG_EDIT_PASSWORD = _UxGT("Zmień hasło");
|
||||
PROGMEM Language_Str MSG_LOGIN_REQUIRED = _UxGT("Wymagane zalogowanie");
|
||||
PROGMEM Language_Str MSG_PASSWORD_SETTINGS = _UxGT("Ustawienia hasła");
|
||||
PROGMEM Language_Str MSG_ENTER_DIGIT = _UxGT("Wprowadź cyfrę");
|
||||
PROGMEM Language_Str MSG_CHANGE_PASSWORD = _UxGT("Ustaw/zmień hasło");
|
||||
PROGMEM Language_Str MSG_REMOVE_PASSWORD = _UxGT("Usuń hasło");
|
||||
PROGMEM Language_Str MSG_PASSWORD_SET = _UxGT("Hasło to ");
|
||||
PROGMEM Language_Str MSG_START_OVER = _UxGT("Od nowa");
|
||||
PROGMEM Language_Str MSG_REMINDER_SAVE_SETTINGS = _UxGT("Pamiętaj by zapisać!");
|
||||
PROGMEM Language_Str MSG_PASSWORD_REMOVED = _UxGT("Hasło usunięte");
|
||||
|
||||
//
|
||||
// Filament Change screens show up to 3 lines on a 4-line display
|
||||
@@ -526,4 +669,51 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Kliknij by zakończyć"));
|
||||
PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Wznawianie..."));
|
||||
#endif
|
||||
PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Sterowniki TMC");
|
||||
PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Prąd sterownika");
|
||||
//PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hybrid Threshold");
|
||||
PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Zerowanie bezczujnikowe");
|
||||
//PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Stepping Mode");
|
||||
//PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Enabled");
|
||||
//PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Reset");
|
||||
//PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" in:");
|
||||
//PROGMEM Language_Str MSG_BACKLASH = _UxGT("Backlash");
|
||||
//PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
|
||||
//PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
|
||||
//PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Korekcja");
|
||||
PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Wygładzanie");
|
||||
|
||||
PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Wypoziomuj oś X");
|
||||
PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Autokalibracja");
|
||||
#if ENABLED(TOUCH_UI_FTDI_EVE)
|
||||
//PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Idle timeout, temperature decreased. Press Okay to reheat and again to resume.");
|
||||
#else
|
||||
//PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Heater Timeout");
|
||||
#endif
|
||||
//PROGMEM Language_Str MSG_REHEAT = _UxGT("Reheat");
|
||||
//PROGMEM Language_Str MSG_REHEATING = _UxGT("Reheating...");
|
||||
|
||||
//PROGMEM Language_Str MSG_PROBE_WIZARD = _UxGT("Z Probe Wizard");
|
||||
//PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Probing Z Reference");
|
||||
//PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Moving to Probing Pos");
|
||||
|
||||
PROGMEM Language_Str MSG_SOUND = _UxGT("Dźwięk");
|
||||
|
||||
//PROGMEM Language_Str MSG_TOP_LEFT = _UxGT("Top Left");
|
||||
//PROGMEM Language_Str MSG_BOTTOM_LEFT = _UxGT("Bottom Left");
|
||||
//PROGMEM Language_Str MSG_TOP_RIGHT = _UxGT("Top Right");
|
||||
//PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Bottom Right");
|
||||
PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Kalibracja zakończona");
|
||||
PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Kalibracja nie powiodła się");
|
||||
|
||||
//PROGMEM Language_Str MSG_DRIVER_BACKWARD = _UxGT(" driver backward");
|
||||
}
|
||||
|
||||
#if FAN_COUNT == 1
|
||||
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED
|
||||
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED
|
||||
#else
|
||||
#define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N
|
||||
#define MSG_EXTRA_FIRST_FAN_SPEED MSG_EXTRA_FAN_SPEED_N
|
||||
#endif
|
||||
|
@@ -488,12 +488,12 @@ bool MarlinUI::get_blink() {
|
||||
|
||||
if (RRK(EN_KEYPAD_MIDDLE)) goto_screen(menu_move);
|
||||
|
||||
#if DISABLED(DELTA) && Z_HOME_DIR < 0
|
||||
#if NONE(DELTA, Z_HOME_TO_MAX)
|
||||
if (RRK(EN_KEYPAD_F2)) _reprapworld_keypad_move(Z_AXIS, 1);
|
||||
#endif
|
||||
|
||||
if (homed) {
|
||||
#if ENABLED(DELTA) || Z_HOME_DIR != -1
|
||||
#if EITHER(DELTA, Z_HOME_TO_MAX)
|
||||
if (RRK(EN_KEYPAD_F2)) _reprapworld_keypad_move(Z_AXIS, 1);
|
||||
#endif
|
||||
if (RRK(EN_KEYPAD_F3)) _reprapworld_keypad_move(Z_AXIS, -1);
|
||||
@@ -636,8 +636,8 @@ void MarlinUI::kill_screen(PGM_P lcd_error, PGM_P lcd_component) {
|
||||
// RED ALERT. RED ALERT.
|
||||
#ifdef LED_BACKLIGHT_TIMEOUT
|
||||
leds.set_color(LEDColorRed());
|
||||
#ifdef NEOPIXEL_BKGD_LED_INDEX
|
||||
neo.set_pixel_color(NEOPIXEL_BKGD_LED_INDEX, 255, 0, 0, 0);
|
||||
#ifdef NEOPIXEL_BKGD_INDEX_FIRST
|
||||
neo.set_background_color(255, 0, 0, 0);
|
||||
neo.show();
|
||||
#endif
|
||||
#endif
|
||||
@@ -681,10 +681,10 @@ void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) {
|
||||
xyze_pos_t ManualMove::all_axes_destination = { 0 };
|
||||
bool ManualMove::processing = false;
|
||||
#endif
|
||||
#if ENABLED(MULTI_MANUAL)
|
||||
#if MULTI_E_MANUAL
|
||||
int8_t ManualMove::e_index = 0;
|
||||
#endif
|
||||
AxisEnum ManualMove::axis = NO_AXIS;
|
||||
AxisEnum ManualMove::axis = NO_AXIS_ENUM;
|
||||
|
||||
/**
|
||||
* If a manual move has been posted and its time has arrived, and if the planner
|
||||
@@ -695,7 +695,7 @@ void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) {
|
||||
*
|
||||
* To post a manual move:
|
||||
* - Update current_position to the new place you want to go.
|
||||
* - Set manual_move.axis to an axis like X_AXIS. Use ALL_AXES for diagonal moves.
|
||||
* - Set manual_move.axis to an axis like X_AXIS. Use ALL_AXES_ENUM for diagonal moves.
|
||||
* - Set manual_move.start_time to a point in the future (in ms) when the move should be done.
|
||||
*
|
||||
* For kinematic machines:
|
||||
@@ -710,7 +710,7 @@ void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) {
|
||||
if (processing) return; // Prevent re-entry from idle() calls
|
||||
|
||||
// Add a manual move to the queue?
|
||||
if (axis != NO_AXIS && ELAPSED(millis(), start_time) && !planner.is_full()) {
|
||||
if (axis != NO_AXIS_ENUM && ELAPSED(millis(), start_time) && !planner.is_full()) {
|
||||
|
||||
const feedRate_t fr_mm_s = (axis <= E_AXIS) ? manual_feedrate_mm_s[axis] : XY_PROBE_FEEDRATE_MM_S;
|
||||
|
||||
@@ -722,7 +722,7 @@ void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) {
|
||||
#endif
|
||||
|
||||
// Apply a linear offset to a single axis
|
||||
if (axis == ALL_AXES)
|
||||
if (axis == ALL_AXES_ENUM)
|
||||
destination = all_axes_destination;
|
||||
else if (axis <= XYZE) {
|
||||
destination = current_position;
|
||||
@@ -731,7 +731,7 @@ void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) {
|
||||
|
||||
// Reset for the next move
|
||||
offset = 0;
|
||||
axis = NO_AXIS;
|
||||
axis = NO_AXIS_ENUM;
|
||||
|
||||
// DELTA and SCARA machines use segmented moves, which could fill the planner during the call to
|
||||
// move_to_destination. This will cause idle() to be called, which can then call this function while the
|
||||
@@ -748,7 +748,7 @@ void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) {
|
||||
|
||||
//SERIAL_ECHOLNPAIR("Add planner.move with Axis ", AS_CHAR(axis_codes[axis]), " at FR ", fr_mm_s);
|
||||
|
||||
axis = NO_AXIS;
|
||||
axis = NO_AXIS_ENUM;
|
||||
|
||||
#endif
|
||||
}
|
||||
@@ -758,13 +758,9 @@ void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) {
|
||||
// Tell ui.update() to start a move to current_position after a short delay.
|
||||
//
|
||||
void ManualMove::soon(const AxisEnum move_axis
|
||||
#if MULTI_MANUAL
|
||||
, const int8_t eindex/*=-1*/
|
||||
#endif
|
||||
OPTARG(MULTI_E_MANUAL, const int8_t eindex/*=active_extruder*/)
|
||||
) {
|
||||
#if MULTI_MANUAL
|
||||
if (move_axis == E_AXIS) e_index = eindex >= 0 ? eindex : active_extruder;
|
||||
#endif
|
||||
TERN_(MULTI_E_MANUAL, if (move_axis == E_AXIS) e_index = eindex);
|
||||
start_time = millis() + (menu_scale < 0.99f ? 0UL : 250UL); // delay for bigger moves
|
||||
axis = move_axis;
|
||||
//SERIAL_ECHOLNPAIR("Post Move with Axis ", AS_CHAR(axis_codes[axis]), " soon.");
|
||||
|
@@ -48,7 +48,7 @@
|
||||
#endif
|
||||
|
||||
#if E_MANUAL > 1
|
||||
#define MULTI_MANUAL 1
|
||||
#define MULTI_E_MANUAL 1
|
||||
#endif
|
||||
|
||||
#if HAS_DISPLAY
|
||||
@@ -129,7 +129,7 @@
|
||||
class ManualMove {
|
||||
private:
|
||||
static AxisEnum axis;
|
||||
#if MULTI_MANUAL
|
||||
#if MULTI_E_MANUAL
|
||||
static int8_t e_index;
|
||||
#else
|
||||
static int8_t constexpr e_index = 0;
|
||||
@@ -182,11 +182,7 @@
|
||||
static bool constexpr processing = false;
|
||||
#endif
|
||||
static void task();
|
||||
static void soon(const AxisEnum axis
|
||||
#if MULTI_MANUAL
|
||||
, const int8_t eindex=-1
|
||||
#endif
|
||||
);
|
||||
static void soon(const AxisEnum axis OPTARG(MULTI_E_MANUAL, const int8_t eindex=active_extruder));
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -64,7 +64,7 @@ void menu_backlash();
|
||||
|
||||
void menu_dac() {
|
||||
static xyze_uint8_t driverPercent;
|
||||
LOOP_XYZE(i) driverPercent[i] = stepper_dac.get_current_percent((AxisEnum)i);
|
||||
LOOP_LOGICAL_AXES(i) driverPercent[i] = stepper_dac.get_current_percent((AxisEnum)i);
|
||||
START_MENU();
|
||||
BACK_ITEM(MSG_ADVANCED_SETTINGS);
|
||||
#define EDIT_DAC_PERCENT(A) EDIT_ITEM(uint8, MSG_DAC_PERCENT_##A, &driverPercent[_AXIS(A)], 0, 100, []{ stepper_dac.set_current_percents(driverPercent); })
|
||||
|
@@ -225,7 +225,7 @@ static void _lcd_level_bed_corners_get_next_position() {
|
||||
if (verify) do_blocking_move_to_z(current_position.z + LEVEL_CORNERS_Z_HOP); // do clearance if needed
|
||||
TERN_(BLTOUCH_SLOW_MODE, bltouch.deploy()); // Deploy in LOW SPEED MODE on every probe action
|
||||
do_blocking_move_to_z(last_z - LEVEL_CORNERS_PROBE_TOLERANCE, MMM_TO_MMS(Z_PROBE_FEEDRATE_SLOW)); // Move down to lower tolerance
|
||||
if (TEST(endstops.trigger_state(), TERN(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN, Z_MIN, Z_MIN_PROBE))) { // check if probe triggered
|
||||
if (TEST(endstops.trigger_state(), Z_MIN_PROBE)) { // check if probe triggered
|
||||
endstops.hit_on_purpose();
|
||||
set_current_from_steppers_for_axis(Z_AXIS);
|
||||
sync_plan_position();
|
||||
|
@@ -206,7 +206,7 @@
|
||||
#if ENABLED(MESH_EDIT_MENU)
|
||||
|
||||
inline void refresh_planner() {
|
||||
set_current_from_steppers_for_axis(ALL_AXES);
|
||||
set_current_from_steppers_for_axis(ALL_AXES_ENUM);
|
||||
sync_plan_position();
|
||||
}
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user