Compare commits
33 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a942c93336 | ||
|
fff0d70361 | ||
|
53392f39a4 | ||
|
1f8587d312 | ||
|
aa778c3cb0 | ||
|
af8747ec69 | ||
|
e6787f7283 | ||
|
4f146ef657 | ||
|
c674f01c01 | ||
|
f7680f3f73 | ||
|
34305439cd | ||
|
23fda5b3cf | ||
|
1d13aaa31f | ||
|
9e02be465d | ||
|
798284a53e | ||
|
7c4855381b | ||
|
63fba6119b | ||
|
fe9e890233 | ||
|
1289141f4b | ||
|
18288ceadc | ||
|
5b0c818522 | ||
|
ece37ba0fc | ||
|
80071ea216 | ||
|
d3cc44aef1 | ||
|
5170d27fd5 | ||
|
3f3d1f0a10 | ||
|
7616d0e389 | ||
|
e81b3fe677 | ||
|
cb62e14f27 | ||
|
7efc5cb864 | ||
|
11ea940b3b | ||
|
2378a7f257 | ||
|
9755d8e510 |
@@ -35,7 +35,7 @@
|
|||||||
*
|
*
|
||||||
* Advanced settings can be found in Configuration_adv.h
|
* Advanced settings can be found in Configuration_adv.h
|
||||||
*/
|
*/
|
||||||
#define CONFIGURATION_H_VERSION 02010202
|
#define CONFIGURATION_H_VERSION 02010204
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//============================= Getting Started =============================
|
//============================= Getting Started =============================
|
||||||
|
@@ -30,7 +30,7 @@
|
|||||||
*
|
*
|
||||||
* Basic settings can be found in Configuration.h
|
* Basic settings can be found in Configuration.h
|
||||||
*/
|
*/
|
||||||
#define CONFIGURATION_ADV_H_VERSION 02010202
|
#define CONFIGURATION_ADV_H_VERSION 02010204
|
||||||
|
|
||||||
// @section develop
|
// @section develop
|
||||||
|
|
||||||
@@ -1152,11 +1152,11 @@
|
|||||||
* XY Frequency limit
|
* XY Frequency limit
|
||||||
* Reduce resonance by limiting the frequency of small zigzag infill moves.
|
* Reduce resonance by limiting the frequency of small zigzag infill moves.
|
||||||
* See https://hydraraptor.blogspot.com/2010/12/frequency-limit.html
|
* See https://hydraraptor.blogspot.com/2010/12/frequency-limit.html
|
||||||
* Use M201 F<freq> G<min%> to change limits at runtime.
|
* Use M201 F<freq> S<min%> to change limits at runtime.
|
||||||
*/
|
*/
|
||||||
//#define XY_FREQUENCY_LIMIT 10 // (Hz) Maximum frequency of small zigzag infill moves. Set with M201 F<hertz>.
|
//#define XY_FREQUENCY_LIMIT 10 // (Hz) Maximum frequency of small zigzag infill moves. Set with M201 F<hertz>.
|
||||||
#ifdef XY_FREQUENCY_LIMIT
|
#ifdef XY_FREQUENCY_LIMIT
|
||||||
#define XY_FREQUENCY_MIN_PERCENT 5 // (%) Minimum FR percentage to apply. Set with M201 G<min%>.
|
#define XY_FREQUENCY_MIN_PERCENT 5 // (%) Minimum FR percentage to apply. Set with M201 S<min%>.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
|
// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
|
||||||
@@ -4083,7 +4083,7 @@
|
|||||||
* Extras for an ESP32-based motherboard with WIFISUPPORT
|
* Extras for an ESP32-based motherboard with WIFISUPPORT
|
||||||
* These options don't apply to add-on WiFi modules based on ESP32 WiFi101.
|
* These options don't apply to add-on WiFi modules based on ESP32 WiFi101.
|
||||||
*/
|
*/
|
||||||
#if ENABLED(WIFISUPPORT)
|
#if ANY(WIFISUPPORT, ESP3D_WIFISUPPORT)
|
||||||
//#define WEBSUPPORT // Start a webserver (which may include auto-discovery) using SPIFFS
|
//#define WEBSUPPORT // Start a webserver (which may include auto-discovery) using SPIFFS
|
||||||
//#define OTASUPPORT // Support over-the-air firmware updates
|
//#define OTASUPPORT // Support over-the-air firmware updates
|
||||||
//#define WIFI_CUSTOM_COMMAND // Accept feature config commands (e.g., WiFi ESP3D) from the host
|
//#define WIFI_CUSTOM_COMMAND // Accept feature config commands (e.g., WiFi ESP3D) from the host
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin release version identifier
|
* Marlin release version identifier
|
||||||
*/
|
*/
|
||||||
//#define SHORT_BUILD_VERSION "2.1.2.2"
|
//#define SHORT_BUILD_VERSION "2.1.2.4"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verbose version identifier which should contain a reference to the location
|
* Verbose version identifier which should contain a reference to the location
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
* here we define this default string as the date where the latest release
|
* here we define this default string as the date where the latest release
|
||||||
* version was tagged.
|
* version was tagged.
|
||||||
*/
|
*/
|
||||||
//#define STRING_DISTRIBUTION_DATE "2024-02-08"
|
//#define STRING_DISTRIBUTION_DATE "2024-05-29"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines a generic printer name to be output to the LCD after booting Marlin.
|
* Defines a generic printer name to be output to the LCD after booting Marlin.
|
||||||
|
@@ -150,7 +150,7 @@ void MarlinHAL::set_pwm_frequency(const pin_t pin, const uint16_t f_desired) {
|
|||||||
else {
|
else {
|
||||||
if (p == 32 || p == 128) continue; // Skip TIMER2 specific prescalers when not TIMER2
|
if (p == 32 || p == 128) continue; // Skip TIMER2 specific prescalers when not TIMER2
|
||||||
const uint16_t rft = (F_CPU) / (p * f_desired);
|
const uint16_t rft = (F_CPU) / (p * f_desired);
|
||||||
DEBUG_ECHOLNPGM("(Not Timer 2) F_CPU=" STRINGIFY(F_CPU), " prescaler=", p, " f_desired=", f_desired);
|
DEBUG_ECHOLNPGM("(Not Timer 2) F_CPU=", STRINGIFY(F_CPU), " prescaler=", p, " f_desired=", f_desired);
|
||||||
res_fast_temp = rft - 1;
|
res_fast_temp = rft - 1;
|
||||||
res_pc_temp = rft / 2;
|
res_pc_temp = rft / 2;
|
||||||
}
|
}
|
||||||
|
@@ -28,9 +28,6 @@
|
|||||||
* Port : E0 E1 E4 E5 G5 E3 H3 H4 H5 H6 B4 B5 B6 B7 J1 J0 H1 H0 D3 D2 D1 D0 A0 A1 A2 A3 A4 A5 A6 A7 C7 C6 C5 C4 C3 C2 C1 C0 D7 G2 G1 G0 L7 L6 L5 L4 L3 L2 L1 L0 B3 B2 B1 B0 F0 F1 F2 F3 F4 F5 F6 F7 K0 K1 K2 K3 K4 K5 K6 K7 | E2 E6 E7 xx xx H2 H7 G3 G4 xx xx xx xx xx D4 D5 D6 xx xx J2 J3 J4 J5 J6 J7 xx xx xx xx xx
|
* Port : E0 E1 E4 E5 G5 E3 H3 H4 H5 H6 B4 B5 B6 B7 J1 J0 H1 H0 D3 D2 D1 D0 A0 A1 A2 A3 A4 A5 A6 A7 C7 C6 C5 C4 C3 C2 C1 C0 D7 G2 G1 G0 L7 L6 L5 L4 L3 L2 L1 L0 B3 B2 B1 B0 F0 F1 F2 F3 F4 F5 F6 F7 K0 K1 K2 K3 K4 K5 K6 K7 | E2 E6 E7 xx xx H2 H7 G3 G4 xx xx xx xx xx D4 D5 D6 xx xx J2 J3 J4 J5 J6 J7 xx xx xx xx xx
|
||||||
* Logical Pin : 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 78 79 80 xx xx 84 85 71 70 xx xx xx xx xx 81 82 83 xx xx 72 73 75 76 77 74 xx xx xx xx xx
|
* Logical Pin : 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 78 79 80 xx xx 84 85 71 70 xx xx xx xx xx 81 82 83 xx xx 72 73 75 76 77 74 xx xx xx xx xx
|
||||||
* Analog Input : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
* Analog Input : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||||
*
|
|
||||||
* Arduino Pin Layout video: https://youtu.be/rIqeVCX09FA
|
|
||||||
* AVR alternate pin function overview video: https://youtu.be/1yd8wuI5Plg
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../fastio.h"
|
#include "../fastio.h"
|
||||||
|
@@ -26,9 +26,6 @@
|
|||||||
*
|
*
|
||||||
* Logical Pin: 38 39 40 41 42 43 44 45 16 10 11 12 06 07 08 09 30 31 32 33 34 35 36 37 17 18 19 20 21 22 23 24 00 01 13 05 02 03 14 15 46 47 48 49 50 51 52 53 25 26 27 28 29 04
|
* Logical Pin: 38 39 40 41 42 43 44 45 16 10 11 12 06 07 08 09 30 31 32 33 34 35 36 37 17 18 19 20 21 22 23 24 00 01 13 05 02 03 14 15 46 47 48 49 50 51 52 53 25 26 27 28 29 04
|
||||||
* Port: A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C0 C1 C2 C3 C4 C5 C6 C7 D0 D1 D2 D3 D4 D5 D6 D7 E0 E1 E2 E3 E4 E5 E6 E7 F0 F1 F2 F3 F4 F5 F6 F7 G0 G1 G2 G3 G4 G5
|
* Port: A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C0 C1 C2 C3 C4 C5 C6 C7 D0 D1 D2 D3 D4 D5 D6 D7 E0 E1 E2 E3 E4 E5 E6 E7 F0 F1 F2 F3 F4 F5 F6 F7 G0 G1 G2 G3 G4 G5
|
||||||
*
|
|
||||||
* Arduino Pin Layout video: https://youtu.be/rIqeVCX09FA
|
|
||||||
* AVR alternate pin function overview video: https://youtu.be/1yd8wuI5Plg
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../fastio.h"
|
#include "../fastio.h"
|
||||||
|
@@ -26,9 +26,6 @@
|
|||||||
*
|
*
|
||||||
* Logical Pin: 08 09 10 11 12 13 14 15 16 17 18 19 20 21 00 01 02 03 04 05 06 07
|
* Logical Pin: 08 09 10 11 12 13 14 15 16 17 18 19 20 21 00 01 02 03 04 05 06 07
|
||||||
* Port: B0 B1 B2 B3 B4 B5 C0 C1 C2 C3 C4 C5 C6 C7 D0 D1 D2 D3 D4 D5 D6 D7
|
* Port: B0 B1 B2 B3 B4 B5 C0 C1 C2 C3 C4 C5 C6 C7 D0 D1 D2 D3 D4 D5 D6 D7
|
||||||
*
|
|
||||||
* Arduino Pin Layout video: https://youtu.be/rIqeVCX09FA
|
|
||||||
* AVR alternate pin function overview video: https://youtu.be/1yd8wuI5Plg
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../fastio.h"
|
#include "../fastio.h"
|
||||||
|
@@ -26,9 +26,6 @@
|
|||||||
*
|
*
|
||||||
* Logical Pin: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
* Logical Pin: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
||||||
* Port: B0 B1 B2 B3 B4 B5 B6 B7 D0 D1 D2 D3 D4 D5 D6 D7 C0 C1 C2 C3 C4 C5 C6 C7 A7 A6 A5 A4 A3 A2 A1 A0
|
* Port: B0 B1 B2 B3 B4 B5 B6 B7 D0 D1 D2 D3 D4 D5 D6 D7 C0 C1 C2 C3 C4 C5 C6 C7 A7 A6 A5 A4 A3 A2 A1 A0
|
||||||
*
|
|
||||||
* Arduino Pin Layout video: https://youtu.be/rIqeVCX09FA
|
|
||||||
* AVR alternate pin function overview video: https://youtu.be/1yd8wuI5Plg
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** ATMega644
|
/** ATMega644
|
||||||
|
@@ -27,9 +27,6 @@
|
|||||||
* Logical Pin: 28 29 30 31 32 33 34 35 20 21 22 23 24 25 26 27 10 11 12 13 14 15 16 17 00 01 02 03 04 05 06 07 08 09(46*47)36 37 18 19 38 39 40 41 42 43 44 45
|
* Logical Pin: 28 29 30 31 32 33 34 35 20 21 22 23 24 25 26 27 10 11 12 13 14 15 16 17 00 01 02 03 04 05 06 07 08 09(46*47)36 37 18 19 38 39 40 41 42 43 44 45
|
||||||
* Port: A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C0 C1 C2 C3 C4 C5 C6 C7 D0 D1 D2 D3 D4 D5 D6 D7 E0 E1 E2 E3 E4 E5 E6 E7 F0 F1 F2 F3 F4 F5 F6 F7
|
* Port: A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C0 C1 C2 C3 C4 C5 C6 C7 D0 D1 D2 D3 D4 D5 D6 D7 E0 E1 E2 E3 E4 E5 E6 E7 F0 F1 F2 F3 F4 F5 F6 F7
|
||||||
* The logical pins 46 and 47 are not supported by Teensyduino, but are supported below as E2 and E3
|
* The logical pins 46 and 47 are not supported by Teensyduino, but are supported below as E2 and E3
|
||||||
*
|
|
||||||
* Arduino Pin Layout video: https://youtu.be/rIqeVCX09FA
|
|
||||||
* AVR alternate pin function overview video: https://youtu.be/1yd8wuI5Plg
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../fastio.h"
|
#include "../fastio.h"
|
||||||
|
@@ -68,16 +68,15 @@
|
|||||||
* Usually the hardware SPI pins are only available to the LCD. This makes the DUE hard SPI used at the same time
|
* Usually the hardware SPI pins are only available to the LCD. This makes the DUE hard SPI used at the same time
|
||||||
* as the TMC2130 soft SPI the most common setup.
|
* as the TMC2130 soft SPI the most common setup.
|
||||||
*/
|
*/
|
||||||
#define _IS_HW_SPI(P) (defined(TMC_SPI_##P) && (TMC_SPI_##P == SD_MOSI_PIN || TMC_SPI_##P == SD_MISO_PIN || TMC_SPI_##P == SD_SCK_PIN))
|
|
||||||
|
|
||||||
#if HAS_MEDIA && HAS_DRIVER(TMC2130)
|
#if HAS_MEDIA && HAS_DRIVER(TMC2130)
|
||||||
#if ENABLED(TMC_USE_SW_SPI)
|
#define _IS_HW_SPI(P) (defined(TMC_SPI_##P) && (TMC_SPI_##P == SD_MOSI_PIN || TMC_SPI_##P == SD_MISO_PIN || TMC_SPI_##P == SD_SCK_PIN))
|
||||||
#if DISABLED(DUE_SOFTWARE_SPI) && (_IS_HW_SPI(MOSI) || _IS_HW_SPI(MISO) || _IS_HW_SPI(SCK))
|
#if DISABLED(DUE_SOFTWARE_SPI) && ENABLED(TMC_USE_SW_SPI) && (_IS_HW_SPI(MOSI) || _IS_HW_SPI(MISO) || _IS_HW_SPI(SCK))
|
||||||
#error "DUE hardware SPI is required but is incompatible with TMC2130 software SPI. Either disable TMC_USE_SW_SPI or use separate pins for the two SPIs."
|
#error "DUE hardware SPI is required but is incompatible with TMC2130 software SPI. Either disable TMC_USE_SW_SPI or use separate pins for the two SPIs."
|
||||||
#endif
|
#endif
|
||||||
#elif ENABLED(DUE_SOFTWARE_SPI)
|
#if ENABLED(DUE_SOFTWARE_SPI) && DISABLED(TMC_USE_SW_SPI)
|
||||||
#error "DUE software SPI is required but is incompatible with TMC2130 hardware SPI. Enable TMC_USE_SW_SPI to fix."
|
#error "DUE software SPI is required but is incompatible with TMC2130 hardware SPI. Enable TMC_USE_SW_SPI to fix."
|
||||||
#endif
|
#endif
|
||||||
|
#undef _IS_HW_SPI
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_FREQUENCY
|
#if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_FREQUENCY
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
/**
|
/**
|
||||||
* Define SPI Pins: SCK, MISO, MOSI, SS
|
* Define SPI Pins: SCK, MISO, MOSI, SS
|
||||||
*
|
*
|
||||||
* Available chip select pins for HW SPI are 4 10 52 77
|
* Available chip select pins for HW SPI are 4 10 52 77 87
|
||||||
*/
|
*/
|
||||||
#if SDSS == 4 || SDSS == 10 || SDSS == 52 || SDSS == 77 || SDSS == 87
|
#if SDSS == 4 || SDSS == 10 || SDSS == 52 || SDSS == 77 || SDSS == 87
|
||||||
#if SDSS == 4
|
#if SDSS == 4
|
||||||
|
@@ -31,12 +31,6 @@
|
|||||||
// spiBeginTransaction.
|
// spiBeginTransaction.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Onboard SD
|
|
||||||
//#define SD_SCK_PIN P0_07
|
|
||||||
//#define SD_MISO_PIN P0_08
|
|
||||||
//#define SD_MOSI_PIN P0_09
|
|
||||||
//#define SD_SS_PIN P0_06
|
|
||||||
|
|
||||||
// External SD
|
// External SD
|
||||||
#ifndef SD_SCK_PIN
|
#ifndef SD_SCK_PIN
|
||||||
#define SD_SCK_PIN 50
|
#define SD_SCK_PIN 50
|
||||||
|
@@ -66,7 +66,7 @@
|
|||||||
#define _WRITE(IO,V) WRITE_PIN(IO,V)
|
#define _WRITE(IO,V) WRITE_PIN(IO,V)
|
||||||
|
|
||||||
/// toggle a pin
|
/// toggle a pin
|
||||||
#define _TOGGLE(IO) _WRITE(IO, !READ(IO))
|
#define _TOGGLE(IO) LPC176x::gpio_toggle(IO)
|
||||||
|
|
||||||
/// set pin as input
|
/// set pin as input
|
||||||
#define _SET_INPUT(IO) SET_DIR_INPUT(IO)
|
#define _SET_INPUT(IO) SET_DIR_INPUT(IO)
|
||||||
|
@@ -30,12 +30,13 @@
|
|||||||
// spiBeginTransaction.
|
// spiBeginTransaction.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** onboard SD card */
|
// Onboard SD
|
||||||
//#define SD_SCK_PIN P0_07
|
//#define SD_SCK_PIN P0_07
|
||||||
//#define SD_MISO_PIN P0_08
|
//#define SD_MISO_PIN P0_08
|
||||||
//#define SD_MOSI_PIN P0_09
|
//#define SD_MOSI_PIN P0_09
|
||||||
//#define SD_SS_PIN P0_06
|
//#define SD_SS_PIN P0_06
|
||||||
/** external */
|
|
||||||
|
// External SD
|
||||||
#ifndef SD_SCK_PIN
|
#ifndef SD_SCK_PIN
|
||||||
#define SD_SCK_PIN P0_15
|
#define SD_SCK_PIN P0_15
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1329,7 +1329,7 @@ void setup() {
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ALL(HAS_MEDIA, SDCARD_EEPROM_EMULATION)
|
#if HAS_MEDIA && ANY(SDCARD_EEPROM_EMULATION, POWER_LOSS_RECOVERY)
|
||||||
SETUP_RUN(card.mount()); // Mount media with settings before first_load
|
SETUP_RUN(card.mount()); // Mount media with settings before first_load
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -679,7 +679,7 @@
|
|||||||
#define DEFER4(M) M EMPTY EMPTY EMPTY EMPTY()()()()
|
#define DEFER4(M) M EMPTY EMPTY EMPTY EMPTY()()()()
|
||||||
|
|
||||||
// Force define expansion
|
// Force define expansion
|
||||||
#define EVAL EVAL16
|
#define EVAL(V...) EVAL16(V)
|
||||||
#define EVAL4096(V...) EVAL2048(EVAL2048(V))
|
#define EVAL4096(V...) EVAL2048(EVAL2048(V))
|
||||||
#define EVAL2048(V...) EVAL1024(EVAL1024(V))
|
#define EVAL2048(V...) EVAL1024(EVAL1024(V))
|
||||||
#define EVAL1024(V...) EVAL512(EVAL512(V))
|
#define EVAL1024(V...) EVAL512(EVAL512(V))
|
||||||
|
@@ -451,7 +451,7 @@ struct XYval {
|
|||||||
// Length reduced to one dimension
|
// Length reduced to one dimension
|
||||||
FI constexpr T magnitude() const { return (T)sqrtf(x*x + y*y); }
|
FI constexpr T magnitude() const { return (T)sqrtf(x*x + y*y); }
|
||||||
// Pointer to the data as a simple array
|
// Pointer to the data as a simple array
|
||||||
FI operator T* () { return pos; }
|
explicit FI operator T* () { return pos; }
|
||||||
// If any element is true then it's true
|
// If any element is true then it's true
|
||||||
FI constexpr operator bool() const { return x || y; }
|
FI constexpr operator bool() const { return x || y; }
|
||||||
// Smallest element
|
// Smallest element
|
||||||
@@ -601,7 +601,7 @@ struct XYZval {
|
|||||||
// Length reduced to one dimension
|
// Length reduced to one dimension
|
||||||
FI constexpr T magnitude() const { return (T)TERN(HAS_X_AXIS, sqrtf(NUM_AXIS_GANG(x*x, + y*y, + z*z, + i*i, + j*j, + k*k, + u*u, + v*v, + w*w)), 0); }
|
FI constexpr T magnitude() const { return (T)TERN(HAS_X_AXIS, sqrtf(NUM_AXIS_GANG(x*x, + y*y, + z*z, + i*i, + j*j, + k*k, + u*u, + v*v, + w*w)), 0); }
|
||||||
// Pointer to the data as a simple array
|
// Pointer to the data as a simple array
|
||||||
FI operator T* () { return pos; }
|
explicit FI operator T* () { return pos; }
|
||||||
// If any element is true then it's true
|
// If any element is true then it's true
|
||||||
FI constexpr operator bool() const { return 0 NUM_AXIS_GANG(|| x, || y, || z, || i, || j, || k, || u, || v, || w); }
|
FI constexpr operator bool() const { return 0 NUM_AXIS_GANG(|| x, || y, || z, || i, || j, || k, || u, || v, || w); }
|
||||||
// Smallest element
|
// Smallest element
|
||||||
@@ -749,7 +749,7 @@ struct XYZEval {
|
|||||||
// Length reduced to one dimension
|
// Length reduced to one dimension
|
||||||
FI constexpr T magnitude() const { return (T)sqrtf(LOGICAL_AXIS_GANG(+ e*e, + x*x, + y*y, + z*z, + i*i, + j*j, + k*k, + u*u, + v*v, + w*w)); }
|
FI constexpr T magnitude() const { return (T)sqrtf(LOGICAL_AXIS_GANG(+ e*e, + x*x, + y*y, + z*z, + i*i, + j*j, + k*k, + u*u, + v*v, + w*w)); }
|
||||||
// Pointer to the data as a simple array
|
// Pointer to the data as a simple array
|
||||||
FI operator T* () { return pos; }
|
explicit FI operator T* () { return pos; }
|
||||||
// If any element is true then it's true
|
// If any element is true then it's true
|
||||||
FI constexpr operator bool() const { return 0 LOGICAL_AXIS_GANG(|| e, || x, || y, || z, || i, || j, || k, || u, || v, || w); }
|
FI constexpr operator bool() const { return 0 LOGICAL_AXIS_GANG(|| e, || x, || y, || z, || i, || j, || k, || u, || v, || w); }
|
||||||
// Smallest element
|
// Smallest element
|
||||||
|
@@ -31,6 +31,10 @@
|
|||||||
#include "powerloss.h"
|
#include "powerloss.h"
|
||||||
#include "../core/macros.h"
|
#include "../core/macros.h"
|
||||||
|
|
||||||
|
#if ENABLED(EXTENSIBLE_UI)
|
||||||
|
#include "../lcd/extui/ui_api.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
bool PrintJobRecovery::enabled; // Initialized by settings.load()
|
bool PrintJobRecovery::enabled; // Initialized by settings.load()
|
||||||
|
|
||||||
MediaFile PrintJobRecovery::file;
|
MediaFile PrintJobRecovery::file;
|
||||||
|
@@ -112,9 +112,9 @@ void GcodeSuite::M81() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HAS_SUICIDE
|
#if ENABLED(PSU_CONTROL)
|
||||||
suicide();
|
|
||||||
#elif ENABLED(PSU_CONTROL)
|
|
||||||
powerManager.power_off_soon();
|
powerManager.power_off_soon();
|
||||||
|
#elif HAS_SUICIDE
|
||||||
|
suicide();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@@ -456,6 +456,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#ifdef Y2_DRIVER_TYPE
|
#ifdef Y2_DRIVER_TYPE
|
||||||
#define HAS_Y2_STEPPER 1
|
#define HAS_Y2_STEPPER 1
|
||||||
|
#define HAS_DUAL_Y_STEPPERS 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -2852,7 +2852,7 @@
|
|||||||
#ifndef PROBE_OFFSET_YMAX
|
#ifndef PROBE_OFFSET_YMAX
|
||||||
#define PROBE_OFFSET_YMAX 50
|
#define PROBE_OFFSET_YMAX 50
|
||||||
#endif
|
#endif
|
||||||
#if ALL(ENDSTOPPULLUPS, USE_Z_MIN_PROBE)
|
#if ALL(ENDSTOPPULLUPS, HAS_Z_MIN_PROBE_PIN)
|
||||||
#define ENDSTOPPULLUP_ZMIN_PROBE
|
#define ENDSTOPPULLUP_ZMIN_PROBE
|
||||||
#endif
|
#endif
|
||||||
#ifndef XY_PROBE_FEEDRATE
|
#ifndef XY_PROBE_FEEDRATE
|
||||||
|
@@ -3679,11 +3679,11 @@ static_assert(_PLUS_TEST(3), "DEFAULT_MAX_ACCELERATION values must be positive."
|
|||||||
#if !(defined(WIFI_SSID) && defined(WIFI_PWD))
|
#if !(defined(WIFI_SSID) && defined(WIFI_PWD))
|
||||||
#error "ESP32 motherboard with WIFISUPPORT requires WIFI_SSID and WIFI_PWD."
|
#error "ESP32 motherboard with WIFISUPPORT requires WIFI_SSID and WIFI_PWD."
|
||||||
#endif
|
#endif
|
||||||
#elif ENABLED(WIFI_CUSTOM_COMMAND)
|
#elif ENABLED(WIFI_CUSTOM_COMMAND) && NONE(ESP3D_WIFISUPPORT, WIFISUPPORT)
|
||||||
#error "WIFI_CUSTOM_COMMAND requires an ESP32 motherboard and WIFISUPPORT."
|
#error "WIFI_CUSTOM_COMMAND requires an ESP32 motherboard and WIFISUPPORT."
|
||||||
#elif ENABLED(OTASUPPORT)
|
#elif ENABLED(OTASUPPORT) && NONE(ESP3D_WIFISUPPORT, WIFISUPPORT)
|
||||||
#error "OTASUPPORT requires an ESP32 motherboard and WIFISUPPORT."
|
#error "OTASUPPORT requires an ESP32 motherboard and WIFISUPPORT."
|
||||||
#elif defined(WIFI_SSID) || defined(WIFI_PWD)
|
#elif (defined(WIFI_SSID) || defined(WIFI_PWD)) && NONE(ESP3D_WIFISUPPORT, WIFISUPPORT)
|
||||||
#error "WIFI_SSID and WIFI_PWD only apply to ESP32 motherboard with WIFISUPPORT."
|
#error "WIFI_SSID and WIFI_PWD only apply to ESP32 motherboard with WIFISUPPORT."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -25,7 +25,7 @@
|
|||||||
* Release version. Leave the Marlin version or apply a custom scheme.
|
* Release version. Leave the Marlin version or apply a custom scheme.
|
||||||
*/
|
*/
|
||||||
#ifndef SHORT_BUILD_VERSION
|
#ifndef SHORT_BUILD_VERSION
|
||||||
#define SHORT_BUILD_VERSION "2.1.2.2"
|
#define SHORT_BUILD_VERSION "2.1.2.4"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
* version was tagged.
|
* version was tagged.
|
||||||
*/
|
*/
|
||||||
#ifndef STRING_DISTRIBUTION_DATE
|
#ifndef STRING_DISTRIBUTION_DATE
|
||||||
#define STRING_DISTRIBUTION_DATE "2024-02-08"
|
#define STRING_DISTRIBUTION_DATE "2024-06-16"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
* to alert users to major changes.
|
* to alert users to major changes.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MARLIN_HEX_VERSION 02010202
|
#define MARLIN_HEX_VERSION 02010204
|
||||||
#ifndef REQUIRED_CONFIGURATION_H_VERSION
|
#ifndef REQUIRED_CONFIGURATION_H_VERSION
|
||||||
#define REQUIRED_CONFIGURATION_H_VERSION MARLIN_HEX_VERSION
|
#define REQUIRED_CONFIGURATION_H_VERSION MARLIN_HEX_VERSION
|
||||||
#endif
|
#endif
|
||||||
|
@@ -567,6 +567,7 @@ namespace Language_en {
|
|||||||
#else
|
#else
|
||||||
LSTR MSG_ATTACH_MEDIA = _UxGT("Attach ") MEDIA_TYPE_EN;
|
LSTR MSG_ATTACH_MEDIA = _UxGT("Attach ") MEDIA_TYPE_EN;
|
||||||
#endif
|
#endif
|
||||||
|
LSTR MSG_ATTACH_SD_MEDIA = _UxGT("Attach SD Card");
|
||||||
LSTR MSG_CHANGE_MEDIA = _UxGT("Change ") MEDIA_TYPE_EN;
|
LSTR MSG_CHANGE_MEDIA = _UxGT("Change ") MEDIA_TYPE_EN;
|
||||||
LSTR MSG_RELEASE_MEDIA = _UxGT("Release ") MEDIA_TYPE_EN;
|
LSTR MSG_RELEASE_MEDIA = _UxGT("Release ") MEDIA_TYPE_EN;
|
||||||
LSTR MSG_ZPROBE_OUT = _UxGT("Z Probe Past Bed");
|
LSTR MSG_ZPROBE_OUT = _UxGT("Z Probe Past Bed");
|
||||||
|
@@ -233,12 +233,11 @@ void menu_configuration();
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void menu_main() {
|
void menu_main() {
|
||||||
const bool busy = printingIsActive()
|
const bool busy = printingIsActive();
|
||||||
#if HAS_MEDIA
|
#if HAS_MEDIA
|
||||||
, card_detected = card.isMounted()
|
const bool card_detected = card.isMounted(),
|
||||||
, card_open = card_detected && card.isFileOpen()
|
card_open = card_detected && card.isFileOpen();
|
||||||
#endif
|
#endif
|
||||||
;
|
|
||||||
|
|
||||||
START_MENU();
|
START_MENU();
|
||||||
BACK_ITEM(MSG_INFO_SCREEN);
|
BACK_ITEM(MSG_INFO_SCREEN);
|
||||||
@@ -275,12 +274,12 @@ void menu_main() {
|
|||||||
else {
|
else {
|
||||||
#if ALL(HAS_MEDIA, MEDIA_MENU_AT_TOP)
|
#if ALL(HAS_MEDIA, MEDIA_MENU_AT_TOP)
|
||||||
// BEGIN MEDIA MENU
|
// BEGIN MEDIA MENU
|
||||||
#if ENABLED(MENU_ADDAUTOSTART)
|
|
||||||
ACTION_ITEM(MSG_RUN_AUTO_FILES, card.autofile_begin); // Run Auto Files
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (card_detected) {
|
if (card_detected) {
|
||||||
if (!card_open) {
|
if (!card_open) {
|
||||||
|
#if ENABLED(MENU_ADDAUTOSTART)
|
||||||
|
ACTION_ITEM(MSG_RUN_AUTO_FILES, card.autofile_begin); // Run Auto Files
|
||||||
|
#endif
|
||||||
|
|
||||||
#if HAS_SD_DETECT
|
#if HAS_SD_DETECT
|
||||||
GCODES_ITEM(MSG_CHANGE_MEDIA, F("M21" TERN_(MULTI_VOLUME, "S"))); // M21 Change Media
|
GCODES_ITEM(MSG_CHANGE_MEDIA, F("M21" TERN_(MULTI_VOLUME, "S"))); // M21 Change Media
|
||||||
#if ENABLED(MULTI_VOLUME)
|
#if ENABLED(MULTI_VOLUME)
|
||||||
@@ -392,12 +391,12 @@ void menu_main() {
|
|||||||
|
|
||||||
#if HAS_MEDIA && DISABLED(MEDIA_MENU_AT_TOP)
|
#if HAS_MEDIA && DISABLED(MEDIA_MENU_AT_TOP)
|
||||||
// BEGIN MEDIA MENU
|
// BEGIN MEDIA MENU
|
||||||
#if ENABLED(MENU_ADDAUTOSTART)
|
|
||||||
ACTION_ITEM(MSG_RUN_AUTO_FILES, card.autofile_begin); // Run Auto Files
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (card_detected) {
|
if (card_detected) {
|
||||||
if (!card_open) {
|
if (!card_open) {
|
||||||
|
#if ENABLED(MENU_ADDAUTOSTART)
|
||||||
|
ACTION_ITEM(MSG_RUN_AUTO_FILES, card.autofile_begin); // Run Auto Files
|
||||||
|
#endif
|
||||||
|
|
||||||
#if HAS_SD_DETECT
|
#if HAS_SD_DETECT
|
||||||
GCODES_ITEM(MSG_CHANGE_MEDIA, F("M21" TERN_(MULTI_VOLUME, "S"))); // M21 Change Media
|
GCODES_ITEM(MSG_CHANGE_MEDIA, F("M21" TERN_(MULTI_VOLUME, "S"))); // M21 Change Media
|
||||||
#if ENABLED(MULTI_VOLUME)
|
#if ENABLED(MULTI_VOLUME)
|
||||||
|
@@ -2046,6 +2046,7 @@ void prepare_line_to_destination() {
|
|||||||
do_homing_move(axis, -bump, TERN(HOMING_Z_WITH_PROBE, (axis == Z_AXIS ? z_probe_fast_mm_s : 0), 0), false);
|
do_homing_move(axis, -bump, TERN(HOMING_Z_WITH_PROBE, (axis == Z_AXIS ? z_probe_fast_mm_s : 0), 0), false);
|
||||||
|
|
||||||
#if ENABLED(DETECT_BROKEN_ENDSTOP)
|
#if ENABLED(DETECT_BROKEN_ENDSTOP)
|
||||||
|
|
||||||
// Check for a broken endstop
|
// Check for a broken endstop
|
||||||
EndstopEnum es;
|
EndstopEnum es;
|
||||||
switch (axis) {
|
switch (axis) {
|
||||||
@@ -2053,11 +2054,20 @@ void prepare_line_to_destination() {
|
|||||||
MAIN_AXIS_MAP(_ESCASE)
|
MAIN_AXIS_MAP(_ESCASE)
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLED(DUAL_X_CARRIAGE)
|
||||||
|
if (axis == X_AXIS && axis_home_dir > 0) {
|
||||||
|
es = X_MAX;
|
||||||
|
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("DUAL_X_CARRIAGE: Homing to X_MAX");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (TEST(endstops.state(), es)) {
|
if (TEST(endstops.state(), es)) {
|
||||||
SERIAL_ECHO_MSG("Bad ", C(AXIS_CHAR(axis)), " Endstop?");
|
SERIAL_ECHO_MSG("Bad ", C(AXIS_CHAR(axis)), " Endstop?");
|
||||||
kill(GET_TEXT_F(MSG_KILL_HOMING_FAILED));
|
kill(GET_TEXT_F(MSG_KILL_HOMING_FAILED));
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#endif // DETECT_BROKEN_ENDSTOP
|
||||||
|
|
||||||
#if ALL(HOMING_Z_WITH_PROBE, BLTOUCH)
|
#if ALL(HOMING_Z_WITH_PROBE, BLTOUCH)
|
||||||
if (axis == Z_AXIS && !bltouch.high_speed_mode && bltouch.deploy())
|
if (axis == Z_AXIS && !bltouch.high_speed_mode && bltouch.deploy())
|
||||||
|
@@ -274,7 +274,7 @@ xyze_int8_t Stepper::count_direction{0};
|
|||||||
#define MINDIR(A) (count_direction[_AXIS(A)] < 0)
|
#define MINDIR(A) (count_direction[_AXIS(A)] < 0)
|
||||||
#define MAXDIR(A) (count_direction[_AXIS(A)] > 0)
|
#define MAXDIR(A) (count_direction[_AXIS(A)] > 0)
|
||||||
|
|
||||||
#define STEPTEST(A,M,I) TERN0(HAS_ ##A## ##I## _ ##M, !(TEST(endstops.state(), A## ##I## _ ##M) && M## DIR(A)) && !locked_ ##A## ##I## _motor)
|
#define STEPTEST(A,M,I) TERN0(USE_##A##I##_##M, !(TEST(endstops.state(), A##I##_##M) && M## DIR(A)) && !locked_ ##A##I##_motor)
|
||||||
|
|
||||||
#define DUAL_ENDSTOP_APPLY_STEP(A,V) \
|
#define DUAL_ENDSTOP_APPLY_STEP(A,V) \
|
||||||
if (separate_multi_axis) { \
|
if (separate_multi_axis) { \
|
||||||
@@ -1610,7 +1610,7 @@ void Stepper::isr() {
|
|||||||
#if MINIMUM_STEPPER_PULSE || MAXIMUM_STEPPER_RATE
|
#if MINIMUM_STEPPER_PULSE || MAXIMUM_STEPPER_RATE
|
||||||
#define ISR_PULSE_CONTROL 1
|
#define ISR_PULSE_CONTROL 1
|
||||||
#endif
|
#endif
|
||||||
#if ISR_PULSE_CONTROL && DISABLED(I2S_STEPPER_STREAM)
|
#if ISR_PULSE_CONTROL && MULTISTEPPING_LIMIT > 1 && DISABLED(I2S_STEPPER_STREAM)
|
||||||
#define ISR_MULTI_STEPS 1
|
#define ISR_MULTI_STEPS 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1655,10 +1655,11 @@ void Stepper::pulse_phase_isr() {
|
|||||||
// Just update the value we will get at the end of the loop
|
// Just update the value we will get at the end of the loop
|
||||||
step_events_completed += events_to_do;
|
step_events_completed += events_to_do;
|
||||||
|
|
||||||
// Take multiple steps per interrupt (For high speed moves)
|
TERN_(ISR_PULSE_CONTROL, USING_TIMED_PULSE());
|
||||||
#if ISR_MULTI_STEPS
|
|
||||||
|
// Take multiple steps per interrupt. For high speed moves.
|
||||||
|
#if ENABLED(ISR_MULTI_STEPS)
|
||||||
bool firstStep = true;
|
bool firstStep = true;
|
||||||
USING_TIMED_PULSE();
|
|
||||||
#endif
|
#endif
|
||||||
xyze_bool_t step_needed{0};
|
xyze_bool_t step_needed{0};
|
||||||
|
|
||||||
@@ -1944,7 +1945,7 @@ void Stepper::pulse_phase_isr() {
|
|||||||
TERN_(I2S_STEPPER_STREAM, i2s_push_sample());
|
TERN_(I2S_STEPPER_STREAM, i2s_push_sample());
|
||||||
|
|
||||||
// TODO: need to deal with MINIMUM_STEPPER_PULSE over i2s
|
// TODO: need to deal with MINIMUM_STEPPER_PULSE over i2s
|
||||||
#if ISR_MULTI_STEPS
|
#if ISR_PULSE_CONTROL
|
||||||
START_TIMED_PULSE();
|
START_TIMED_PULSE();
|
||||||
AWAIT_HIGH_PULSE();
|
AWAIT_HIGH_PULSE();
|
||||||
#endif
|
#endif
|
||||||
@@ -2333,7 +2334,8 @@ uint32_t Stepper::block_phase_isr() {
|
|||||||
*/
|
*/
|
||||||
if (cutter.cutter_mode == CUTTER_MODE_DYNAMIC
|
if (cutter.cutter_mode == CUTTER_MODE_DYNAMIC
|
||||||
&& planner.laser_inline.status.isPowered // isPowered flag set on any parsed G1, G2, G3, or G5 move; cleared on any others.
|
&& planner.laser_inline.status.isPowered // isPowered flag set on any parsed G1, G2, G3, or G5 move; cleared on any others.
|
||||||
&& cutter.last_block_power != current_block->laser.power // Prevent constant update without change
|
&& current_block // Block may not be available if steps completed (see discard_current_block() above)
|
||||||
|
&& cutter.last_block_power != current_block->laser.power // Only update if the power changed
|
||||||
) {
|
) {
|
||||||
cutter.apply_power(current_block->laser.power);
|
cutter.apply_power(current_block->laser.power);
|
||||||
cutter.last_block_power = current_block->laser.power;
|
cutter.last_block_power = current_block->laser.power;
|
||||||
@@ -3952,22 +3954,22 @@ void Stepper::report_positions() {
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_I_MS_PINS
|
#if HAS_I_MS_PINS
|
||||||
case I_AXIS: WRITE(I_MS1_PIN, ms1); break
|
case I_AXIS: WRITE(I_MS1_PIN, ms1); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_J_MS_PINS
|
#if HAS_J_MS_PINS
|
||||||
case J_AXIS: WRITE(J_MS1_PIN, ms1); break
|
case J_AXIS: WRITE(J_MS1_PIN, ms1); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_K_MS_PINS
|
#if HAS_K_MS_PINS
|
||||||
case K_AXIS: WRITE(K_MS1_PIN, ms1); break
|
case K_AXIS: WRITE(K_MS1_PIN, ms1); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_U_MS_PINS
|
#if HAS_U_MS_PINS
|
||||||
case U_AXIS: WRITE(U_MS1_PIN, ms1); break
|
case U_AXIS: WRITE(U_MS1_PIN, ms1); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_V_MS_PINS
|
#if HAS_V_MS_PINS
|
||||||
case V_AXIS: WRITE(V_MS1_PIN, ms1); break
|
case V_AXIS: WRITE(V_MS1_PIN, ms1); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_W_MS_PINS
|
#if HAS_W_MS_PINS
|
||||||
case W_AXIS: WRITE(W_MS1_PIN, ms1); break
|
case W_AXIS: WRITE(W_MS1_PIN, ms1); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_E0_MS_PINS
|
#if HAS_E0_MS_PINS
|
||||||
case E_AXIS: WRITE(E0_MS1_PIN, ms1); break;
|
case E_AXIS: WRITE(E0_MS1_PIN, ms1); break;
|
||||||
@@ -4032,22 +4034,22 @@ void Stepper::report_positions() {
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_I_MS_PINS
|
#if HAS_I_MS_PINS
|
||||||
case I_AXIS: WRITE(I_MS2_PIN, ms2); break
|
case I_AXIS: WRITE(I_MS2_PIN, ms2); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_J_MS_PINS
|
#if HAS_J_MS_PINS
|
||||||
case J_AXIS: WRITE(J_MS2_PIN, ms2); break
|
case J_AXIS: WRITE(J_MS2_PIN, ms2); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_K_MS_PINS
|
#if HAS_K_MS_PINS
|
||||||
case K_AXIS: WRITE(K_MS2_PIN, ms2); break
|
case K_AXIS: WRITE(K_MS2_PIN, ms2); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_U_MS_PINS
|
#if HAS_U_MS_PINS
|
||||||
case U_AXIS: WRITE(U_MS2_PIN, ms2); break
|
case U_AXIS: WRITE(U_MS2_PIN, ms2); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_V_MS_PINS
|
#if HAS_V_MS_PINS
|
||||||
case V_AXIS: WRITE(V_MS2_PIN, ms2); break
|
case V_AXIS: WRITE(V_MS2_PIN, ms2); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_W_MS_PINS
|
#if HAS_W_MS_PINS
|
||||||
case W_AXIS: WRITE(W_MS2_PIN, ms2); break
|
case W_AXIS: WRITE(W_MS2_PIN, ms2); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_E0_MS_PINS
|
#if HAS_E0_MS_PINS
|
||||||
case E_AXIS: WRITE(E0_MS2_PIN, ms2); break;
|
case E_AXIS: WRITE(E0_MS2_PIN, ms2); break;
|
||||||
@@ -4111,23 +4113,23 @@ void Stepper::report_positions() {
|
|||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_I_MS_PINS
|
#if HAS_I_MS_PINS && PIN_EXISTS(I_MS3)
|
||||||
case I_AXIS: WRITE(I_MS3_PIN, ms3); break
|
case I_AXIS: WRITE(I_MS3_PIN, ms3); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_J_MS_PINS
|
#if HAS_J_MS_PINS && PIN_EXISTS(J_MS3)
|
||||||
case J_AXIS: WRITE(J_MS3_PIN, ms3); break
|
case J_AXIS: WRITE(J_MS3_PIN, ms3); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_K_MS_PINS
|
#if HAS_K_MS_PINS && PIN_EXISTS(K_MS3)
|
||||||
case K_AXIS: WRITE(K_MS3_PIN, ms3); break
|
case K_AXIS: WRITE(K_MS3_PIN, ms3); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_U_MS_PINS
|
#if HAS_U_MS_PINS && PIN_EXISTS(U_MS3)
|
||||||
case U_AXIS: WRITE(U_MS3_PIN, ms3); break
|
case U_AXIS: WRITE(U_MS3_PIN, ms3); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_V_MS_PINS
|
#if HAS_V_MS_PINS && PIN_EXISTS(V_MS3)
|
||||||
case V_AXIS: WRITE(V_MS3_PIN, ms3); break
|
case V_AXIS: WRITE(V_MS3_PIN, ms3); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_W_MS_PINS
|
#if HAS_W_MS_PINS && PIN_EXISTS(W_MS3)
|
||||||
case W_AXIS: WRITE(W_MS3_PIN, ms3); break
|
case W_AXIS: WRITE(W_MS3_PIN, ms3); break;
|
||||||
#endif
|
#endif
|
||||||
#if HAS_E0_MS_PINS && PIN_EXISTS(E0_MS3)
|
#if HAS_E0_MS_PINS && PIN_EXISTS(E0_MS3)
|
||||||
case E_AXIS: WRITE(E0_MS3_PIN, ms3); break;
|
case E_AXIS: WRITE(E0_MS3_PIN, ms3); break;
|
||||||
|
@@ -595,7 +595,7 @@ volatile bool Temperature::raw_temps_ready = false;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if MILLISECONDS_PREHEAT_TIME > 0
|
#if MILLISECONDS_PREHEAT_TIME > 0
|
||||||
millis_t Temperature::preheat_end_ms_hotend[HOTENDS]; // = { 0 };
|
millis_t Temperature::preheat_end_ms_hotend[HOTENDS]; // = { 0 }
|
||||||
#endif
|
#endif
|
||||||
#if HAS_HEATED_BED && PREHEAT_TIME_BED_MS > 0
|
#if HAS_HEATED_BED && PREHEAT_TIME_BED_MS > 0
|
||||||
millis_t Temperature::preheat_end_ms_bed = 0;
|
millis_t Temperature::preheat_end_ms_bed = 0;
|
||||||
@@ -1814,7 +1814,7 @@ void Temperature::mintemp_error(const heater_id_t heater_id) {
|
|||||||
// Make sure temperature is decreasing
|
// Make sure temperature is decreasing
|
||||||
if (watch_cooler.elapsed(ms)) { // Time to check the cooler?
|
if (watch_cooler.elapsed(ms)) { // Time to check the cooler?
|
||||||
if (degCooler() > watch_cooler.target) // Failed to decrease enough?
|
if (degCooler() > watch_cooler.target) // Failed to decrease enough?
|
||||||
_temp_error(H_COOLER, GET_TEXT_F(MSG_COOLING_FAILED), GET_TEXT_F(MSG_COOLING_FAILED));
|
_temp_error(H_COOLER, GET_EN_TEXT_F(MSG_COOLING_FAILED), GET_TEXT_F(MSG_COOLING_FAILED));
|
||||||
else
|
else
|
||||||
start_watching_cooler(); // Start again if the target is still far off
|
start_watching_cooler(); // Start again if the target is still far off
|
||||||
}
|
}
|
||||||
@@ -2442,7 +2442,7 @@ void Temperature::updateTemperaturesFromRawValues() {
|
|||||||
/**
|
/**
|
||||||
// DEBUG PREHEATING TIME
|
// DEBUG PREHEATING TIME
|
||||||
SERIAL_ECHOLNPGM("\nExtruder = ", e, " Preheat On/Off = ", is_preheating(e));
|
SERIAL_ECHOLNPGM("\nExtruder = ", e, " Preheat On/Off = ", is_preheating(e));
|
||||||
const float test_is_preheating = (preheat_end_time[HOTEND_INDEX] - millis()) * 0.001f;
|
const float test_is_preheating = (preheat_end_ms_hotend[HOTEND_INDEX] - millis()) * 0.001f;
|
||||||
if (test_is_preheating < 31) SERIAL_ECHOLNPGM("Extruder = ", e, " Preheat remaining time = ", test_is_preheating, "s", "\n");
|
if (test_is_preheating < 31) SERIAL_ECHOLNPGM("Extruder = ", e, " Preheat remaining time = ", test_is_preheating, "s", "\n");
|
||||||
//*/
|
//*/
|
||||||
|
|
||||||
|
@@ -747,7 +747,7 @@ class Temperature {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if MILLISECONDS_PREHEAT_TIME > 0
|
#if MILLISECONDS_PREHEAT_TIME > 0
|
||||||
static millis_t preheat_end_time[HOTENDS];
|
static millis_t preheat_end_ms_hotend[HOTENDS];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_FAN_LOGIC
|
#if HAS_FAN_LOGIC
|
||||||
@@ -909,13 +909,13 @@ class Temperature {
|
|||||||
*/
|
*/
|
||||||
#if MILLISECONDS_PREHEAT_TIME > 0
|
#if MILLISECONDS_PREHEAT_TIME > 0
|
||||||
static bool is_preheating(const uint8_t E_NAME) {
|
static bool is_preheating(const uint8_t E_NAME) {
|
||||||
return preheat_end_time[HOTEND_INDEX] && PENDING(millis(), preheat_end_time[HOTEND_INDEX]);
|
return preheat_end_ms_hotend[HOTEND_INDEX] && PENDING(millis(), preheat_end_ms_hotend[HOTEND_INDEX]);
|
||||||
}
|
}
|
||||||
static void start_preheat_time(const uint8_t E_NAME) {
|
static void start_preheat_time(const uint8_t E_NAME) {
|
||||||
preheat_end_time[HOTEND_INDEX] = millis() + MILLISECONDS_PREHEAT_TIME;
|
preheat_end_ms_hotend[HOTEND_INDEX] = millis() + MILLISECONDS_PREHEAT_TIME;
|
||||||
}
|
}
|
||||||
static void reset_preheat_time(const uint8_t E_NAME) {
|
static void reset_preheat_time(const uint8_t E_NAME) {
|
||||||
preheat_end_time[HOTEND_INDEX] = 0;
|
preheat_end_ms_hotend[HOTEND_INDEX] = 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#define is_preheating(n) (false)
|
#define is_preheating(n) (false)
|
||||||
|
@@ -29,17 +29,57 @@
|
|||||||
|
|
||||||
#define BOARD_INFO_NAME "Creality3D RAMPS"
|
#define BOARD_INFO_NAME "Creality3D RAMPS"
|
||||||
|
|
||||||
|
//#define CR2020_INDUSTRIAL_SERIES // Use layout specific to CR2020
|
||||||
|
|
||||||
|
//
|
||||||
|
// 4-pin expansion header
|
||||||
|
//
|
||||||
|
#define EXP1_PIN 65 // A11 - Used by CR2020 Industrial series for case
|
||||||
|
#define EXP2_PIN 66 // A12
|
||||||
|
#define EXP3_PIN 11 // RAMPS: SERVO0_PIN
|
||||||
|
#define EXP4_PIN 12 // RAMPS: PS_ON_PIN
|
||||||
|
|
||||||
|
//
|
||||||
|
// Servos
|
||||||
|
//
|
||||||
|
#define SERVO1_PIN 12
|
||||||
|
|
||||||
//
|
//
|
||||||
// Heaters / Fans
|
// Heaters / Fans
|
||||||
//
|
//
|
||||||
#define MOSFET_B_PIN 7
|
#define MOSFET_B_PIN 7
|
||||||
#define FAN0_PIN 9
|
#define FAN0_PIN 9
|
||||||
|
|
||||||
|
//
|
||||||
|
// Filament Runout Sensor
|
||||||
|
//
|
||||||
#define FIL_RUNOUT_PIN 2
|
#define FIL_RUNOUT_PIN 2
|
||||||
#if NUM_RUNOUT_SENSORS >= 2
|
#if NUM_RUNOUT_SENSORS >= 2
|
||||||
#define FIL_RUNOUT2_PIN 15 // Creality CR-X can use dual runout sensors
|
#define FIL_RUNOUT2_PIN 15 // Creality CR-X can use dual runout sensors
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
// Misc. Functions
|
||||||
|
//
|
||||||
|
#ifdef CR2020_INDUSTRIAL_SERIES
|
||||||
|
#if ENABLED(PSU_CONTROL) && !defined(PS_ON_PIN)
|
||||||
|
#define PS_ON_PIN 40 // Used by CR2020 Industrial series
|
||||||
|
#endif
|
||||||
|
#ifndef SUICIDE_PIN
|
||||||
|
#define SUICIDE_PIN 12 // Used by CR2020 Industrial series
|
||||||
|
#endif
|
||||||
|
#ifndef SUICIDE_PIN_STATE
|
||||||
|
#define SUICIDE_PIN_STATE HIGH
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ENABLED(CASE_LIGHT_ENABLE) && !defined(CASE_LIGHT_PIN)
|
||||||
|
#define CASE_LIGHT_PIN 65
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
// SD Card
|
||||||
|
//
|
||||||
#ifndef SD_DETECT_PIN
|
#ifndef SD_DETECT_PIN
|
||||||
#if SD_CONNECTION_IS(ONBOARD)
|
#if SD_CONNECTION_IS(ONBOARD)
|
||||||
//#define HAS_ONBOARD_SD_DETECT // If the SD_DETECT_PIN is wired up
|
//#define HAS_ONBOARD_SD_DETECT // If the SD_DETECT_PIN is wired up
|
||||||
@@ -49,28 +89,14 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef PS_ON_PIN
|
//
|
||||||
#define PS_ON_PIN 40 // Used by CR2020 Industrial series
|
// Based on RAMPS 1.4
|
||||||
#endif
|
//
|
||||||
|
|
||||||
#if ENABLED(CASE_LIGHT_ENABLE) && !defined(CASE_LIGHT_PIN)
|
|
||||||
#define CASE_LIGHT_PIN 65
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define SERVO1_PIN 12
|
|
||||||
|
|
||||||
#include "pins_RAMPS.h"
|
#include "pins_RAMPS.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// LCD / Controller
|
||||||
|
//
|
||||||
#ifndef BEEPER_PIN
|
#ifndef BEEPER_PIN
|
||||||
#define BEEPER_PIN 37 // Always define beeper pin so Play Tone works with ExtUI
|
#define BEEPER_PIN 37 // Always define beeper pin so Play Tone works with ExtUI
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define EXP1_PIN 65 // A11 - Used by CR2020 Industrial series for case
|
|
||||||
#define EXP2_PIN 66 // A12
|
|
||||||
#define EXP3_PIN 11 // SERVO0_PIN
|
|
||||||
#define EXP4_PIN 12 // PS_ON_PIN
|
|
||||||
|
|
||||||
#define SUICIDE_PIN 12 // Used by CR2020 Industrial series
|
|
||||||
#ifndef SUICIDE_PIN_STATE
|
|
||||||
#define SUICIDE_PIN_STATE HIGH
|
|
||||||
#endif
|
|
||||||
|
@@ -26,10 +26,10 @@
|
|||||||
*
|
*
|
||||||
* The Archim 1.0 board requires Arduino Archim addons installed.
|
* The Archim 1.0 board requires Arduino Archim addons installed.
|
||||||
*
|
*
|
||||||
* - Add the following URL to Arduino IDE's Additional Board Manager URLs:
|
* - Add the following URL to Arduino IDE's Additional Boards Manager URLs:
|
||||||
* https://raw.githubusercontent.com/ultimachine/ArduinoAddons/master/package_ultimachine_index.json
|
* https://raw.githubusercontent.com/ultimachine/ArduinoAddons/master/package_ultimachine_index.json
|
||||||
*
|
*
|
||||||
* - In the Arduino IDE Board Manager search for Archim and install the package.
|
* - In the Arduino IDE Boards Manager search for Archim and install the package.
|
||||||
*
|
*
|
||||||
* - Change your target board to "Archim".
|
* - Change your target board to "Archim".
|
||||||
*
|
*
|
||||||
|
@@ -26,10 +26,10 @@
|
|||||||
*
|
*
|
||||||
* The Archim 2.0 board requires Arduino Archim addons installed.
|
* The Archim 2.0 board requires Arduino Archim addons installed.
|
||||||
*
|
*
|
||||||
* - Add the following URL to Arduino IDE's Additional Board Manager URLs:
|
* - Add the following URL to Arduino IDE's Additional Boards Manager URLs:
|
||||||
* https://raw.githubusercontent.com/ultimachine/ArduinoAddons/master/package_ultimachine_index.json
|
* https://raw.githubusercontent.com/ultimachine/ArduinoAddons/master/package_ultimachine_index.json
|
||||||
*
|
*
|
||||||
* - In the Arduino IDE Board Manager search for Archim and install the package.
|
* - In the Arduino IDE Boards Manager search for Archim and install the package.
|
||||||
*
|
*
|
||||||
* - Change your target board to "Archim".
|
* - Change your target board to "Archim".
|
||||||
*
|
*
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The standard Arduino IDE extension (board manager) for this board
|
* The standard Arduino IDE extension (Boards Manager) for this board
|
||||||
* is located at https://github.com/SkyNet3D/anet-board.
|
* is located at https://github.com/SkyNet3D/anet-board.
|
||||||
*
|
*
|
||||||
* Installation instructions are on that page.
|
* Installation instructions are on that page.
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Another usable Arduino IDE extension (board manager) can be found at
|
* Another usable Arduino IDE extension (Boards Manager) can be found at
|
||||||
* https://github.com/Lauszus/Sanguino
|
* https://github.com/Lauszus/Sanguino
|
||||||
*
|
*
|
||||||
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A useable Arduino IDE extension (board manager) can be found at
|
* A useable Arduino IDE extension (Boards Manager) can be found at
|
||||||
* https://github.com/Lauszus/Sanguino
|
* https://github.com/Lauszus/Sanguino
|
||||||
*
|
*
|
||||||
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
||||||
|
@@ -32,7 +32,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A useable Arduino IDE extension (board manager) can be found at
|
* A useable Arduino IDE extension (Boards Manager) can be found at
|
||||||
* https://github.com/Lauszus/Sanguino
|
* https://github.com/Lauszus/Sanguino
|
||||||
*
|
*
|
||||||
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
||||||
|
@@ -36,7 +36,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A useable Arduino IDE extension (board manager) can be found at
|
* A useable Arduino IDE extension (Boards Manager) can be found at
|
||||||
* https://github.com/Lauszus/Sanguino
|
* https://github.com/Lauszus/Sanguino
|
||||||
*
|
*
|
||||||
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
||||||
|
@@ -32,7 +32,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A useable Arduino IDE extension (board manager) can be found at
|
* A useable Arduino IDE extension (Boards Manager) can be found at
|
||||||
* https://github.com/Lauszus/Sanguino
|
* https://github.com/Lauszus/Sanguino
|
||||||
*
|
*
|
||||||
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
||||||
|
@@ -42,7 +42,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A useable Arduino IDE extension (board manager) can be found at
|
* A useable Arduino IDE extension (Boards Manager) can be found at
|
||||||
* https://github.com/Lauszus/Sanguino
|
* https://github.com/Lauszus/Sanguino
|
||||||
*
|
*
|
||||||
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
||||||
|
@@ -32,7 +32,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A useable Arduino IDE extension (board manager) can be found at
|
* A useable Arduino IDE extension (Boards Manager) can be found at
|
||||||
* https://github.com/Lauszus/Sanguino
|
* https://github.com/Lauszus/Sanguino
|
||||||
*
|
*
|
||||||
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
||||||
|
@@ -38,7 +38,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A useable Arduino IDE extension (board manager) can be found at
|
* A useable Arduino IDE extension (Boards Manager) can be found at
|
||||||
* https://github.com/Lauszus/Sanguino
|
* https://github.com/Lauszus/Sanguino
|
||||||
*
|
*
|
||||||
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
||||||
|
@@ -37,7 +37,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A useable Arduino IDE extension (board manager) can be found at
|
* A useable Arduino IDE extension (Boards Manager) can be found at
|
||||||
* https://github.com/Lauszus/Sanguino
|
* https://github.com/Lauszus/Sanguino
|
||||||
*
|
*
|
||||||
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
||||||
|
@@ -59,7 +59,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A useable Arduino IDE extension (board manager) can be found at
|
* A useable Arduino IDE extension (Boards Manager) can be found at
|
||||||
* https://github.com/Lauszus/Sanguino
|
* https://github.com/Lauszus/Sanguino
|
||||||
*
|
*
|
||||||
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
||||||
|
@@ -57,7 +57,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A useable Arduino IDE extension (board manager) can be found at
|
* A useable Arduino IDE extension (Boards Manager) can be found at
|
||||||
* https://github.com/Lauszus/Sanguino
|
* https://github.com/Lauszus/Sanguino
|
||||||
*
|
*
|
||||||
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
||||||
|
@@ -44,7 +44,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A useable Arduino IDE extension (board manager) can be found at
|
* A useable Arduino IDE extension (Boards Manager) can be found at
|
||||||
* https://github.com/Lauszus/Sanguino
|
* https://github.com/Lauszus/Sanguino
|
||||||
*
|
*
|
||||||
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A useable Arduino IDE extension (board manager) can be found at
|
* A useable Arduino IDE extension (Boards Manager) can be found at
|
||||||
* https://github.com/Lauszus/Sanguino
|
* https://github.com/Lauszus/Sanguino
|
||||||
*
|
*
|
||||||
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
||||||
|
@@ -160,7 +160,8 @@
|
|||||||
#define LCD_BRIGHTNESS_DEFAULT TFT_BACKLIGHT_PWM
|
#define LCD_BRIGHTNESS_DEFAULT TFT_BACKLIGHT_PWM
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(ONBOARD_SDIO)
|
#if SD_CONNECTION_IS(ONBOARD)
|
||||||
|
#define ONBOARD_SDIO
|
||||||
#define SD_SS_PIN -1 // else SDSS set to PA4 in M43 (spi_pins.h)
|
#define SD_SS_PIN -1 // else SDSS set to PA4 in M43 (spi_pins.h)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -78,7 +78,7 @@ uint8_t const SD_CARD_TYPE_SD1 = 1, // Standard capacity V1 SD card
|
|||||||
/**
|
/**
|
||||||
* Define SOFTWARE_SPI to use bit-bang SPI
|
* Define SOFTWARE_SPI to use bit-bang SPI
|
||||||
*/
|
*/
|
||||||
#if ANY(MEGA_SOFT_SPI, USE_SOFTWARE_SPI)
|
#if ANY(MEGA_SOFT_SPI, SDFAT_USE_SOFTWARE_SPI)
|
||||||
#define SOFTWARE_SPI
|
#define SOFTWARE_SPI
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -88,8 +88,8 @@
|
|||||||
*/
|
*/
|
||||||
#define MEGA_SOFT_SPI 0
|
#define MEGA_SOFT_SPI 0
|
||||||
|
|
||||||
// Set USE_SOFTWARE_SPI nonzero to ALWAYS use Software SPI.
|
// Set SDFAT_USE_SOFTWARE_SPI nonzero to ALWAYS use Software SPI.
|
||||||
#define USE_SOFTWARE_SPI 0
|
#define SDFAT_USE_SOFTWARE_SPI 0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The __cxa_pure_virtual function is an error handler that is invoked when
|
* The __cxa_pure_virtual function is an error handler that is invoked when
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
/**
|
/**
|
||||||
* Define SOFTWARE_SPI to use bit-bang SPI
|
* Define SOFTWARE_SPI to use bit-bang SPI
|
||||||
*/
|
*/
|
||||||
#if ANY(MEGA_SOFT_SPI, USE_SOFTWARE_SPI)
|
#if ANY(MEGA_SOFT_SPI, SDFAT_USE_SOFTWARE_SPI)
|
||||||
#define SOFTWARE_SPI
|
#define SOFTWARE_SPI
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
58
README.md
58
README.md
@@ -94,53 +94,19 @@ The Issue Queue is reserved for Bug Reports and Feature Requests. To get help wi
|
|||||||
|
|
||||||
Marlin is constantly improving thanks to a huge number of contributors from all over the world bringing their specialties and talents. Huge thanks are due to [all the contributors](https://github.com/MarlinFirmware/Marlin/graphs/contributors) who regularly patch up bugs, help direct traffic, and basically keep Marlin from falling apart. Marlin's continued existence would not be possible without them.
|
Marlin is constantly improving thanks to a huge number of contributors from all over the world bringing their specialties and talents. Huge thanks are due to [all the contributors](https://github.com/MarlinFirmware/Marlin/graphs/contributors) who regularly patch up bugs, help direct traffic, and basically keep Marlin from falling apart. Marlin's continued existence would not be possible without them.
|
||||||
|
|
||||||
## Administration
|
## Project Leadership
|
||||||
|
|
||||||
Regular users can open and close their own issues, but only the administrators can do project-related things like add labels, merge changes, set milestones, and kick trolls. The current Marlin admin team consists of:
|
Name|Role|Link|Donate
|
||||||
|
----|----|----|----
|
||||||
<table align="center">
|
🇺🇸 Scott Lahteine|Project Lead|[[@thinkyhead](https://github.com/thinkyhead)]|[💸 Donate](https://marlinfw.org/docs/development/contributing.html#donate)
|
||||||
<tr><td>Project Maintainer</td></tr>
|
🇺🇸 Roxanne Neufeld|Admin|[[@Roxy-3D](https://github.com/Roxy-3D)]|
|
||||||
<tr><td>
|
🇺🇸 Keith Bennett|Admin|[[@thisiskeithb](https://github.com/thisiskeithb)]|[💸 Donate](https://github.com/sponsors/thisiskeithb)
|
||||||
|
🇺🇸 Jason Smith|Admin|[[@sjasonsmith](https://github.com/sjasonsmith)]|
|
||||||
🇺🇸 **Scott Lahteine**
|
🇧🇷 Victor Oliveira|Admin|[[@rhapsodyv](https://github.com/rhapsodyv)]|
|
||||||
[@thinkyhead](https://github.com/thinkyhead)
|
🇬🇧 Chris Pepper|Admin|[[@p3p](https://github.com/p3p)]|
|
||||||
[<kbd> Donate 💸 </kbd>](https://www.thinkyhead.com/donate-to-marlin)
|
🇳🇿 Peter Ellens|Admin|[[@ellensp](https://github.com/ellensp)]|[💸 Donate](https://ko-fi.com/ellensp)
|
||||||
|
🇺🇸 Bob Kuhn|Admin|[[@Bob-the-Kuhn](https://github.com/Bob-the-Kuhn)]|
|
||||||
</td><td>
|
🇳🇱 Erik van der Zalm|Founder|[[@ErikZalm](https://github.com/ErikZalm)]|
|
||||||
|
|
||||||
🇺🇸 **Roxanne Neufeld**
|
|
||||||
[@Roxy-3D](https://github.com/Roxy-3D)
|
|
||||||
|
|
||||||
🇺🇸 **Keith Bennett**
|
|
||||||
[@thisiskeithb](https://github.com/thisiskeithb)
|
|
||||||
[<kbd> Donate 💸 </kbd>](https://github.com/sponsors/thisiskeithb)
|
|
||||||
|
|
||||||
🇺🇸 **Jason Smith**
|
|
||||||
[@sjasonsmith](https://github.com/sjasonsmith)
|
|
||||||
|
|
||||||
</td><td>
|
|
||||||
|
|
||||||
🇧🇷 **Victor Oliveira**
|
|
||||||
[@rhapsodyv](https://github.com/rhapsodyv)
|
|
||||||
|
|
||||||
🇬🇧 **Chris Pepper**
|
|
||||||
[@p3p](https://github.com/p3p)
|
|
||||||
|
|
||||||
🇳🇿 **Peter Ellens**
|
|
||||||
[@ellensp](https://github.com/ellensp)
|
|
||||||
[<kbd> Donate 💸 </kbd>](https://ko-fi.com/ellensp)
|
|
||||||
|
|
||||||
</td><td>
|
|
||||||
|
|
||||||
🇺🇸 **Bob Kuhn**
|
|
||||||
[@Bob-the-Kuhn](https://github.com/Bob-the-Kuhn)
|
|
||||||
|
|
||||||
🇳🇱 **Erik van der Zalm**
|
|
||||||
[@ErikZalm](https://github.com/ErikZalm)
|
|
||||||
[<kbd> Donate 💸 </kbd>](https://flattr.com/submit/auto?user_id=ErikZalm&url=https://github.com/MarlinFirmware/Marlin&title=Marlin&language=&tags=github&category=software)
|
|
||||||
|
|
||||||
</td></tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
@@ -18,13 +18,13 @@ def enabled_defines(filepath):
|
|||||||
Each entry is a dictionary with a 'name' and a 'section' key. We end up with:
|
Each entry is a dictionary with a 'name' and a 'section' key. We end up with:
|
||||||
{ MOTHERBOARD: { name: "MOTHERBOARD", section: "hardware" }, ... }
|
{ MOTHERBOARD: { name: "MOTHERBOARD", section: "hardware" }, ... }
|
||||||
|
|
||||||
The 'name' key might get dropped as redundant, but it's useful for debugging.
|
TODO: Drop the 'name' key as redundant. For now it's useful for debugging.
|
||||||
|
|
||||||
|
This list is only used to filter config-defined options from those defined elsewhere.
|
||||||
|
|
||||||
Because the option names are the keys, only the last occurrence is retained.
|
Because the option names are the keys, only the last occurrence is retained.
|
||||||
Use the Schema class for a more complete list of options, soon with full parsing.
|
This means the actual used value might not be reflected by this function.
|
||||||
|
The Schema class does more complete parsing for a more accurate list of options.
|
||||||
This list is used to filter what is actually a config-defined option versus
|
|
||||||
defines from elsewhere.
|
|
||||||
|
|
||||||
While the Schema class parses the configurations on its own, this script will
|
While the Schema class parses the configurations on its own, this script will
|
||||||
get the preprocessor output and get the intersection of the enabled options from
|
get the preprocessor output and get the intersection of the enabled options from
|
||||||
@@ -44,13 +44,10 @@ def enabled_defines(filepath):
|
|||||||
# This will avoid false positives from #defines in comments
|
# This will avoid false positives from #defines in comments
|
||||||
f = re.sub(r'/\*.*?\*/', '', '\n'.join(f), flags=re.DOTALL).split("\n")
|
f = re.sub(r'/\*.*?\*/', '', '\n'.join(f), flags=re.DOTALL).split("\n")
|
||||||
|
|
||||||
a = []
|
|
||||||
for line in f:
|
for line in f:
|
||||||
sline = line.strip()
|
sline = line.strip()
|
||||||
m = re.match(spatt, sline) # @section ...
|
m = re.match(spatt, sline) # @section ...
|
||||||
if m:
|
if m: section = m.group(1).strip() ; continue
|
||||||
section = m.group(1).strip()
|
|
||||||
continue
|
|
||||||
if sline[:7] == "#define":
|
if sline[:7] == "#define":
|
||||||
# Extract the key here (we don't care about the value)
|
# Extract the key here (we don't care about the value)
|
||||||
kv = sline[8:].strip().split()
|
kv = sline[8:].strip().split()
|
||||||
@@ -79,6 +76,7 @@ def compute_build_signature(env):
|
|||||||
Compute the build signature by extracting all configuration settings and
|
Compute the build signature by extracting all configuration settings and
|
||||||
building a unique reversible signature that can be included in the binary.
|
building a unique reversible signature that can be included in the binary.
|
||||||
The signature can be reversed to get a 1:1 equivalent configuration file.
|
The signature can be reversed to get a 1:1 equivalent configuration file.
|
||||||
|
Used by common-dependencies.py after filtering build files by feature.
|
||||||
'''
|
'''
|
||||||
if 'BUILD_SIGNATURE' in env: return
|
if 'BUILD_SIGNATURE' in env: return
|
||||||
env.Append(BUILD_SIGNATURE=1)
|
env.Append(BUILD_SIGNATURE=1)
|
||||||
|
@@ -157,14 +157,14 @@ def Upload(source, target, env):
|
|||||||
marlin_string_config_h_author = _GetMarlinEnv(MarlinEnv, 'STRING_CONFIG_H_AUTHOR')
|
marlin_string_config_h_author = _GetMarlinEnv(MarlinEnv, 'STRING_CONFIG_H_AUTHOR')
|
||||||
|
|
||||||
# Get firmware upload params
|
# Get firmware upload params
|
||||||
upload_firmware_source_name = env['PROGNAME'] + '.bin' if 'PROGNAME' in env else str(source[0])
|
upload_firmware_source_path = os.path.join(env["PROJECT_BUILD_DIR"], env["PIOENV"], f"{env['PROGNAME']}.bin") if 'PROGNAME' in env else str(source[0])
|
||||||
# Source firmware filename
|
# Source firmware filename
|
||||||
upload_speed = env['UPLOAD_SPEED'] if 'UPLOAD_SPEED' in env else 115200
|
upload_speed = env['UPLOAD_SPEED'] if 'UPLOAD_SPEED' in env else 115200
|
||||||
# baud rate of serial connection
|
# baud rate of serial connection
|
||||||
upload_port = _GetUploadPort(env) # Serial port to use
|
upload_port = _GetUploadPort(env) # Serial port to use
|
||||||
|
|
||||||
# Set local upload params
|
# Set local upload params
|
||||||
upload_firmware_target_name = os.path.basename(upload_firmware_source_name)
|
upload_firmware_target_name = os.path.basename(upload_firmware_source_path)
|
||||||
# Target firmware filename
|
# Target firmware filename
|
||||||
upload_timeout = 1000 # Communication timout, lossy/slow connections need higher values
|
upload_timeout = 1000 # Communication timout, lossy/slow connections need higher values
|
||||||
upload_blocksize = 512 # Transfer block size. 512 = Autodetect
|
upload_blocksize = 512 # Transfer block size. 512 = Autodetect
|
||||||
@@ -216,7 +216,7 @@ def Upload(source, target, env):
|
|||||||
print(f' LONG_FILENAME_WRITE_SUPPORT : {marlin_longname_write}')
|
print(f' LONG_FILENAME_WRITE_SUPPORT : {marlin_longname_write}')
|
||||||
print(f' CUSTOM_FIRMWARE_UPLOAD : {marlin_custom_firmware_upload}')
|
print(f' CUSTOM_FIRMWARE_UPLOAD : {marlin_custom_firmware_upload}')
|
||||||
print('---- Upload parameters ------------------------')
|
print('---- Upload parameters ------------------------')
|
||||||
print(f' Source : {upload_firmware_source_name}')
|
print(f' Source : {upload_firmware_source_path}')
|
||||||
print(f' Target : {upload_firmware_target_name}')
|
print(f' Target : {upload_firmware_target_name}')
|
||||||
print(f' Port : {upload_port} @ {upload_speed} baudrate')
|
print(f' Port : {upload_port} @ {upload_speed} baudrate')
|
||||||
print(f' Timeout : {upload_timeout}')
|
print(f' Timeout : {upload_timeout}')
|
||||||
@@ -271,14 +271,14 @@ def Upload(source, target, env):
|
|||||||
# WARNING! The serial port must be closed here because the serial transfer that follow needs it!
|
# WARNING! The serial port must be closed here because the serial transfer that follow needs it!
|
||||||
|
|
||||||
# Upload firmware file
|
# Upload firmware file
|
||||||
debugPrint(f"Copy '{upload_firmware_source_name}' --> '{upload_firmware_target_name}'")
|
debugPrint(f"Copy '{upload_firmware_source_path}' --> '{upload_firmware_target_name}'")
|
||||||
protocol = MarlinBinaryProtocol.Protocol(upload_port, upload_speed, upload_blocksize, float(upload_error_ratio), int(upload_timeout))
|
protocol = MarlinBinaryProtocol.Protocol(upload_port, upload_speed, upload_blocksize, float(upload_error_ratio), int(upload_timeout))
|
||||||
#echologger = MarlinBinaryProtocol.EchoProtocol(protocol)
|
#echologger = MarlinBinaryProtocol.EchoProtocol(protocol)
|
||||||
protocol.connect()
|
protocol.connect()
|
||||||
# Mark the rollback (delete broken transfer) from this point on
|
# Mark the rollback (delete broken transfer) from this point on
|
||||||
rollback = True
|
rollback = True
|
||||||
filetransfer = MarlinBinaryProtocol.FileTransferProtocol(protocol)
|
filetransfer = MarlinBinaryProtocol.FileTransferProtocol(protocol)
|
||||||
transferOK = filetransfer.copy(upload_firmware_source_name, upload_firmware_target_name, upload_compression, upload_test)
|
transferOK = filetransfer.copy(upload_firmware_source_path, upload_firmware_target_name, upload_compression, upload_test)
|
||||||
protocol.disconnect()
|
protocol.disconnect()
|
||||||
|
|
||||||
# Notify upload completed
|
# Notify upload completed
|
||||||
|
@@ -1,3 +1,3 @@
|
|||||||
# Where have all the configurations gone?
|
# Where have all the configurations gone?
|
||||||
|
|
||||||
## https://github.com/MarlinFirmware/Configurations/archive/release-2.1.2.2.zip
|
## https://github.com/MarlinFirmware/Configurations/archive/release-2.1.2.4.zip
|
||||||
|
@@ -81,7 +81,7 @@ A reduced entry laser power factor is based on the entry step rate to cruise ste
|
|||||||
|
|
||||||
block entry laser power = laser power * ( entry step rate / cruise step rate )
|
block entry laser power = laser power * ( entry step rate / cruise step rate )
|
||||||
|
|
||||||
The initial power will be set to no less than the laser_power_floor or the inital power calculation.
|
The initial power will be set to no less than the laser_power_floor or the initial power calculation.
|
||||||
|
|
||||||
The reduced final power factor is based on the final step rate to cruise step rate ratio for deceleration.
|
The reduced final power factor is based on the final step rate to cruise step rate ratio for deceleration.
|
||||||
|
|
||||||
|
@@ -15,11 +15,12 @@
|
|||||||
[env:SAMD51_grandcentral_m4]
|
[env:SAMD51_grandcentral_m4]
|
||||||
platform = atmelsam
|
platform = atmelsam
|
||||||
board = adafruit_grandcentral_m4
|
board = adafruit_grandcentral_m4
|
||||||
build_flags = ${common.build_flags} -std=gnu++17
|
build_flags = ${common.build_flags} -std=gnu++17 -DUSE_TINYUSB
|
||||||
build_unflags = -std=gnu++11
|
build_unflags = -std=gnu++11
|
||||||
build_src_filter = ${common.default_src_filter} +<src/HAL/SAMD51>
|
build_src_filter = ${common.default_src_filter} +<src/HAL/SAMD51>
|
||||||
lib_deps = ${common.lib_deps}
|
lib_deps = ${common.lib_deps}
|
||||||
SoftwareSerialM
|
SoftwareSerialM
|
||||||
|
Adafruit TinyUSB Library
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
pre:buildroot/share/PlatformIO/scripts/SAMD51_grandcentral_m4.py
|
pre:buildroot/share/PlatformIO/scripts/SAMD51_grandcentral_m4.py
|
||||||
custom_marlin.HAS_MEDIA = SdFat - Adafruit Fork, Adafruit SPIFlash
|
custom_marlin.HAS_MEDIA = SdFat - Adafruit Fork, Adafruit SPIFlash
|
||||||
|
Reference in New Issue
Block a user