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
|
||||
*/
|
||||
#define CONFIGURATION_H_VERSION 02010202
|
||||
#define CONFIGURATION_H_VERSION 02010204
|
||||
|
||||
//===========================================================================
|
||||
//============================= Getting Started =============================
|
||||
|
@@ -30,7 +30,7 @@
|
||||
*
|
||||
* Basic settings can be found in Configuration.h
|
||||
*/
|
||||
#define CONFIGURATION_ADV_H_VERSION 02010202
|
||||
#define CONFIGURATION_ADV_H_VERSION 02010204
|
||||
|
||||
// @section develop
|
||||
|
||||
@@ -1152,11 +1152,11 @@
|
||||
* XY Frequency limit
|
||||
* Reduce resonance by limiting the frequency of small zigzag infill moves.
|
||||
* 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>.
|
||||
#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
|
||||
|
||||
// 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
|
||||
* 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 OTASUPPORT // Support over-the-air firmware updates
|
||||
//#define WIFI_CUSTOM_COMMAND // Accept feature config commands (e.g., WiFi ESP3D) from the host
|
||||
|
@@ -28,7 +28,7 @@
|
||||
/**
|
||||
* 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
|
||||
@@ -41,7 +41,7 @@
|
||||
* here we define this default string as the date where the latest release
|
||||
* 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.
|
||||
|
@@ -150,7 +150,7 @@ void MarlinHAL::set_pwm_frequency(const pin_t pin, const uint16_t f_desired) {
|
||||
else {
|
||||
if (p == 32 || p == 128) continue; // Skip TIMER2 specific prescalers when not TIMER2
|
||||
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_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
|
||||
* 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
|
||||
*
|
||||
* Arduino Pin Layout video: https://youtu.be/rIqeVCX09FA
|
||||
* AVR alternate pin function overview video: https://youtu.be/1yd8wuI5Plg
|
||||
*/
|
||||
|
||||
#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
|
||||
* 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"
|
||||
|
@@ -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
|
||||
* 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"
|
||||
|
@@ -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
|
||||
* 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
|
||||
|
@@ -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
|
||||
* 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
|
||||
*
|
||||
* Arduino Pin Layout video: https://youtu.be/rIqeVCX09FA
|
||||
* AVR alternate pin function overview video: https://youtu.be/1yd8wuI5Plg
|
||||
*/
|
||||
|
||||
#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
|
||||
* 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 ENABLED(TMC_USE_SW_SPI)
|
||||
#if DISABLED(DUE_SOFTWARE_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."
|
||||
#endif
|
||||
#elif ENABLED(DUE_SOFTWARE_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) && 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."
|
||||
#endif
|
||||
#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."
|
||||
#endif
|
||||
#undef _IS_HW_SPI
|
||||
#endif
|
||||
|
||||
#if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_FREQUENCY
|
||||
|
@@ -24,7 +24,7 @@
|
||||
/**
|
||||
* 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
|
||||
|
@@ -31,12 +31,6 @@
|
||||
// spiBeginTransaction.
|
||||
#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
|
||||
#ifndef SD_SCK_PIN
|
||||
#define SD_SCK_PIN 50
|
||||
|
@@ -66,7 +66,7 @@
|
||||
#define _WRITE(IO,V) WRITE_PIN(IO,V)
|
||||
|
||||
/// toggle a pin
|
||||
#define _TOGGLE(IO) _WRITE(IO, !READ(IO))
|
||||
#define _TOGGLE(IO) LPC176x::gpio_toggle(IO)
|
||||
|
||||
/// set pin as input
|
||||
#define _SET_INPUT(IO) SET_DIR_INPUT(IO)
|
||||
|
@@ -30,12 +30,13 @@
|
||||
// spiBeginTransaction.
|
||||
#endif
|
||||
|
||||
/** onboard SD card */
|
||||
//#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 */
|
||||
// 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
|
||||
#ifndef SD_SCK_PIN
|
||||
#define SD_SCK_PIN P0_15
|
||||
#endif
|
||||
|
@@ -1329,7 +1329,7 @@ void setup() {
|
||||
#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
|
||||
#endif
|
||||
|
||||
|
@@ -679,7 +679,7 @@
|
||||
#define DEFER4(M) M EMPTY EMPTY EMPTY EMPTY()()()()
|
||||
|
||||
// Force define expansion
|
||||
#define EVAL EVAL16
|
||||
#define EVAL(V...) EVAL16(V)
|
||||
#define EVAL4096(V...) EVAL2048(EVAL2048(V))
|
||||
#define EVAL2048(V...) EVAL1024(EVAL1024(V))
|
||||
#define EVAL1024(V...) EVAL512(EVAL512(V))
|
||||
|
@@ -451,7 +451,7 @@ struct XYval {
|
||||
// Length reduced to one dimension
|
||||
FI constexpr T magnitude() const { return (T)sqrtf(x*x + y*y); }
|
||||
// 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
|
||||
FI constexpr operator bool() const { return x || y; }
|
||||
// Smallest element
|
||||
@@ -601,7 +601,7 @@ struct XYZval {
|
||||
// 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); }
|
||||
// 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
|
||||
FI constexpr operator bool() const { return 0 NUM_AXIS_GANG(|| x, || y, || z, || i, || j, || k, || u, || v, || w); }
|
||||
// Smallest element
|
||||
@@ -749,7 +749,7 @@ struct XYZEval {
|
||||
// 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)); }
|
||||
// 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
|
||||
FI constexpr operator bool() const { return 0 LOGICAL_AXIS_GANG(|| e, || x, || y, || z, || i, || j, || k, || u, || v, || w); }
|
||||
// Smallest element
|
||||
|
@@ -31,6 +31,10 @@
|
||||
#include "powerloss.h"
|
||||
#include "../core/macros.h"
|
||||
|
||||
#if ENABLED(EXTENSIBLE_UI)
|
||||
#include "../lcd/extui/ui_api.h"
|
||||
#endif
|
||||
|
||||
bool PrintJobRecovery::enabled; // Initialized by settings.load()
|
||||
|
||||
MediaFile PrintJobRecovery::file;
|
||||
|
@@ -112,9 +112,9 @@ void GcodeSuite::M81() {
|
||||
return;
|
||||
}
|
||||
|
||||
#if HAS_SUICIDE
|
||||
suicide();
|
||||
#elif ENABLED(PSU_CONTROL)
|
||||
#if ENABLED(PSU_CONTROL)
|
||||
powerManager.power_off_soon();
|
||||
#elif HAS_SUICIDE
|
||||
suicide();
|
||||
#endif
|
||||
}
|
||||
|
@@ -456,6 +456,7 @@
|
||||
#endif
|
||||
#ifdef Y2_DRIVER_TYPE
|
||||
#define HAS_Y2_STEPPER 1
|
||||
#define HAS_DUAL_Y_STEPPERS 1
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@@ -2852,7 +2852,7 @@
|
||||
#ifndef PROBE_OFFSET_YMAX
|
||||
#define PROBE_OFFSET_YMAX 50
|
||||
#endif
|
||||
#if ALL(ENDSTOPPULLUPS, USE_Z_MIN_PROBE)
|
||||
#if ALL(ENDSTOPPULLUPS, HAS_Z_MIN_PROBE_PIN)
|
||||
#define ENDSTOPPULLUP_ZMIN_PROBE
|
||||
#endif
|
||||
#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))
|
||||
#error "ESP32 motherboard with WIFISUPPORT requires WIFI_SSID and WIFI_PWD."
|
||||
#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."
|
||||
#elif ENABLED(OTASUPPORT)
|
||||
#elif ENABLED(OTASUPPORT) && NONE(ESP3D_WIFISUPPORT, 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."
|
||||
#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.1.2.2"
|
||||
#define SHORT_BUILD_VERSION "2.1.2.4"
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -42,7 +42,7 @@
|
||||
* version was tagged.
|
||||
*/
|
||||
#ifndef STRING_DISTRIBUTION_DATE
|
||||
#define STRING_DISTRIBUTION_DATE "2024-02-08"
|
||||
#define STRING_DISTRIBUTION_DATE "2024-06-16"
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -52,7 +52,7 @@
|
||||
* to alert users to major changes.
|
||||
*/
|
||||
|
||||
#define MARLIN_HEX_VERSION 02010202
|
||||
#define MARLIN_HEX_VERSION 02010204
|
||||
#ifndef REQUIRED_CONFIGURATION_H_VERSION
|
||||
#define REQUIRED_CONFIGURATION_H_VERSION MARLIN_HEX_VERSION
|
||||
#endif
|
||||
|
@@ -567,6 +567,7 @@ namespace Language_en {
|
||||
#else
|
||||
LSTR MSG_ATTACH_MEDIA = _UxGT("Attach ") MEDIA_TYPE_EN;
|
||||
#endif
|
||||
LSTR MSG_ATTACH_SD_MEDIA = _UxGT("Attach SD Card");
|
||||
LSTR MSG_CHANGE_MEDIA = _UxGT("Change ") MEDIA_TYPE_EN;
|
||||
LSTR MSG_RELEASE_MEDIA = _UxGT("Release ") MEDIA_TYPE_EN;
|
||||
LSTR MSG_ZPROBE_OUT = _UxGT("Z Probe Past Bed");
|
||||
|
@@ -233,12 +233,11 @@ void menu_configuration();
|
||||
#endif
|
||||
|
||||
void menu_main() {
|
||||
const bool busy = printingIsActive()
|
||||
#if HAS_MEDIA
|
||||
, card_detected = card.isMounted()
|
||||
, card_open = card_detected && card.isFileOpen()
|
||||
#endif
|
||||
;
|
||||
const bool busy = printingIsActive();
|
||||
#if HAS_MEDIA
|
||||
const bool card_detected = card.isMounted(),
|
||||
card_open = card_detected && card.isFileOpen();
|
||||
#endif
|
||||
|
||||
START_MENU();
|
||||
BACK_ITEM(MSG_INFO_SCREEN);
|
||||
@@ -275,12 +274,12 @@ void menu_main() {
|
||||
else {
|
||||
#if ALL(HAS_MEDIA, MEDIA_MENU_AT_TOP)
|
||||
// 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_open) {
|
||||
#if ENABLED(MENU_ADDAUTOSTART)
|
||||
ACTION_ITEM(MSG_RUN_AUTO_FILES, card.autofile_begin); // Run Auto Files
|
||||
#endif
|
||||
|
||||
#if HAS_SD_DETECT
|
||||
GCODES_ITEM(MSG_CHANGE_MEDIA, F("M21" TERN_(MULTI_VOLUME, "S"))); // M21 Change Media
|
||||
#if ENABLED(MULTI_VOLUME)
|
||||
@@ -392,12 +391,12 @@ void menu_main() {
|
||||
|
||||
#if HAS_MEDIA && DISABLED(MEDIA_MENU_AT_TOP)
|
||||
// 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_open) {
|
||||
#if ENABLED(MENU_ADDAUTOSTART)
|
||||
ACTION_ITEM(MSG_RUN_AUTO_FILES, card.autofile_begin); // Run Auto Files
|
||||
#endif
|
||||
|
||||
#if HAS_SD_DETECT
|
||||
GCODES_ITEM(MSG_CHANGE_MEDIA, F("M21" TERN_(MULTI_VOLUME, "S"))); // M21 Change Media
|
||||
#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);
|
||||
|
||||
#if ENABLED(DETECT_BROKEN_ENDSTOP)
|
||||
|
||||
// Check for a broken endstop
|
||||
EndstopEnum es;
|
||||
switch (axis) {
|
||||
@@ -2053,11 +2054,20 @@ void prepare_line_to_destination() {
|
||||
MAIN_AXIS_MAP(_ESCASE)
|
||||
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)) {
|
||||
SERIAL_ECHO_MSG("Bad ", C(AXIS_CHAR(axis)), " Endstop?");
|
||||
kill(GET_TEXT_F(MSG_KILL_HOMING_FAILED));
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // DETECT_BROKEN_ENDSTOP
|
||||
|
||||
#if ALL(HOMING_Z_WITH_PROBE, BLTOUCH)
|
||||
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 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) \
|
||||
if (separate_multi_axis) { \
|
||||
@@ -1610,7 +1610,7 @@ void Stepper::isr() {
|
||||
#if MINIMUM_STEPPER_PULSE || MAXIMUM_STEPPER_RATE
|
||||
#define ISR_PULSE_CONTROL 1
|
||||
#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
|
||||
#endif
|
||||
|
||||
@@ -1655,10 +1655,11 @@ void Stepper::pulse_phase_isr() {
|
||||
// Just update the value we will get at the end of the loop
|
||||
step_events_completed += events_to_do;
|
||||
|
||||
// Take multiple steps per interrupt (For high speed moves)
|
||||
#if ISR_MULTI_STEPS
|
||||
TERN_(ISR_PULSE_CONTROL, USING_TIMED_PULSE());
|
||||
|
||||
// Take multiple steps per interrupt. For high speed moves.
|
||||
#if ENABLED(ISR_MULTI_STEPS)
|
||||
bool firstStep = true;
|
||||
USING_TIMED_PULSE();
|
||||
#endif
|
||||
xyze_bool_t step_needed{0};
|
||||
|
||||
@@ -1944,7 +1945,7 @@ void Stepper::pulse_phase_isr() {
|
||||
TERN_(I2S_STEPPER_STREAM, i2s_push_sample());
|
||||
|
||||
// TODO: need to deal with MINIMUM_STEPPER_PULSE over i2s
|
||||
#if ISR_MULTI_STEPS
|
||||
#if ISR_PULSE_CONTROL
|
||||
START_TIMED_PULSE();
|
||||
AWAIT_HIGH_PULSE();
|
||||
#endif
|
||||
@@ -2333,7 +2334,8 @@ uint32_t Stepper::block_phase_isr() {
|
||||
*/
|
||||
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.
|
||||
&& 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.last_block_power = current_block->laser.power;
|
||||
@@ -3952,22 +3954,22 @@ void Stepper::report_positions() {
|
||||
break;
|
||||
#endif
|
||||
#if HAS_I_MS_PINS
|
||||
case I_AXIS: WRITE(I_MS1_PIN, ms1); break
|
||||
case I_AXIS: WRITE(I_MS1_PIN, ms1); break;
|
||||
#endif
|
||||
#if HAS_J_MS_PINS
|
||||
case J_AXIS: WRITE(J_MS1_PIN, ms1); break
|
||||
case J_AXIS: WRITE(J_MS1_PIN, ms1); break;
|
||||
#endif
|
||||
#if HAS_K_MS_PINS
|
||||
case K_AXIS: WRITE(K_MS1_PIN, ms1); break
|
||||
case K_AXIS: WRITE(K_MS1_PIN, ms1); break;
|
||||
#endif
|
||||
#if HAS_U_MS_PINS
|
||||
case U_AXIS: WRITE(U_MS1_PIN, ms1); break
|
||||
case U_AXIS: WRITE(U_MS1_PIN, ms1); break;
|
||||
#endif
|
||||
#if HAS_V_MS_PINS
|
||||
case V_AXIS: WRITE(V_MS1_PIN, ms1); break
|
||||
case V_AXIS: WRITE(V_MS1_PIN, ms1); break;
|
||||
#endif
|
||||
#if HAS_W_MS_PINS
|
||||
case W_AXIS: WRITE(W_MS1_PIN, ms1); break
|
||||
case W_AXIS: WRITE(W_MS1_PIN, ms1); break;
|
||||
#endif
|
||||
#if HAS_E0_MS_PINS
|
||||
case E_AXIS: WRITE(E0_MS1_PIN, ms1); break;
|
||||
@@ -4032,22 +4034,22 @@ void Stepper::report_positions() {
|
||||
break;
|
||||
#endif
|
||||
#if HAS_I_MS_PINS
|
||||
case I_AXIS: WRITE(I_MS2_PIN, ms2); break
|
||||
case I_AXIS: WRITE(I_MS2_PIN, ms2); break;
|
||||
#endif
|
||||
#if HAS_J_MS_PINS
|
||||
case J_AXIS: WRITE(J_MS2_PIN, ms2); break
|
||||
case J_AXIS: WRITE(J_MS2_PIN, ms2); break;
|
||||
#endif
|
||||
#if HAS_K_MS_PINS
|
||||
case K_AXIS: WRITE(K_MS2_PIN, ms2); break
|
||||
case K_AXIS: WRITE(K_MS2_PIN, ms2); break;
|
||||
#endif
|
||||
#if HAS_U_MS_PINS
|
||||
case U_AXIS: WRITE(U_MS2_PIN, ms2); break
|
||||
case U_AXIS: WRITE(U_MS2_PIN, ms2); break;
|
||||
#endif
|
||||
#if HAS_V_MS_PINS
|
||||
case V_AXIS: WRITE(V_MS2_PIN, ms2); break
|
||||
case V_AXIS: WRITE(V_MS2_PIN, ms2); break;
|
||||
#endif
|
||||
#if HAS_W_MS_PINS
|
||||
case W_AXIS: WRITE(W_MS2_PIN, ms2); break
|
||||
case W_AXIS: WRITE(W_MS2_PIN, ms2); break;
|
||||
#endif
|
||||
#if HAS_E0_MS_PINS
|
||||
case E_AXIS: WRITE(E0_MS2_PIN, ms2); break;
|
||||
@@ -4111,23 +4113,23 @@ void Stepper::report_positions() {
|
||||
#endif
|
||||
break;
|
||||
#endif
|
||||
#if HAS_I_MS_PINS
|
||||
case I_AXIS: WRITE(I_MS3_PIN, ms3); break
|
||||
#if HAS_I_MS_PINS && PIN_EXISTS(I_MS3)
|
||||
case I_AXIS: WRITE(I_MS3_PIN, ms3); break;
|
||||
#endif
|
||||
#if HAS_J_MS_PINS
|
||||
case J_AXIS: WRITE(J_MS3_PIN, ms3); break
|
||||
#if HAS_J_MS_PINS && PIN_EXISTS(J_MS3)
|
||||
case J_AXIS: WRITE(J_MS3_PIN, ms3); break;
|
||||
#endif
|
||||
#if HAS_K_MS_PINS
|
||||
case K_AXIS: WRITE(K_MS3_PIN, ms3); break
|
||||
#if HAS_K_MS_PINS && PIN_EXISTS(K_MS3)
|
||||
case K_AXIS: WRITE(K_MS3_PIN, ms3); break;
|
||||
#endif
|
||||
#if HAS_U_MS_PINS
|
||||
case U_AXIS: WRITE(U_MS3_PIN, ms3); break
|
||||
#if HAS_U_MS_PINS && PIN_EXISTS(U_MS3)
|
||||
case U_AXIS: WRITE(U_MS3_PIN, ms3); break;
|
||||
#endif
|
||||
#if HAS_V_MS_PINS
|
||||
case V_AXIS: WRITE(V_MS3_PIN, ms3); break
|
||||
#if HAS_V_MS_PINS && PIN_EXISTS(V_MS3)
|
||||
case V_AXIS: WRITE(V_MS3_PIN, ms3); break;
|
||||
#endif
|
||||
#if HAS_W_MS_PINS
|
||||
case W_AXIS: WRITE(W_MS3_PIN, ms3); break
|
||||
#if HAS_W_MS_PINS && PIN_EXISTS(W_MS3)
|
||||
case W_AXIS: WRITE(W_MS3_PIN, ms3); break;
|
||||
#endif
|
||||
#if HAS_E0_MS_PINS && PIN_EXISTS(E0_MS3)
|
||||
case E_AXIS: WRITE(E0_MS3_PIN, ms3); break;
|
||||
|
@@ -595,7 +595,7 @@ volatile bool Temperature::raw_temps_ready = false;
|
||||
#endif
|
||||
|
||||
#if MILLISECONDS_PREHEAT_TIME > 0
|
||||
millis_t Temperature::preheat_end_ms_hotend[HOTENDS]; // = { 0 };
|
||||
millis_t Temperature::preheat_end_ms_hotend[HOTENDS]; // = { 0 }
|
||||
#endif
|
||||
#if HAS_HEATED_BED && PREHEAT_TIME_BED_MS > 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
|
||||
if (watch_cooler.elapsed(ms)) { // Time to check the cooler?
|
||||
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
|
||||
start_watching_cooler(); // Start again if the target is still far off
|
||||
}
|
||||
@@ -2442,7 +2442,7 @@ void Temperature::updateTemperaturesFromRawValues() {
|
||||
/**
|
||||
// DEBUG PREHEATING TIME
|
||||
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");
|
||||
//*/
|
||||
|
||||
|
@@ -747,7 +747,7 @@ class Temperature {
|
||||
#endif
|
||||
|
||||
#if MILLISECONDS_PREHEAT_TIME > 0
|
||||
static millis_t preheat_end_time[HOTENDS];
|
||||
static millis_t preheat_end_ms_hotend[HOTENDS];
|
||||
#endif
|
||||
|
||||
#if HAS_FAN_LOGIC
|
||||
@@ -909,13 +909,13 @@ class Temperature {
|
||||
*/
|
||||
#if MILLISECONDS_PREHEAT_TIME > 0
|
||||
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) {
|
||||
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) {
|
||||
preheat_end_time[HOTEND_INDEX] = 0;
|
||||
preheat_end_ms_hotend[HOTEND_INDEX] = 0;
|
||||
}
|
||||
#else
|
||||
#define is_preheating(n) (false)
|
||||
|
@@ -29,17 +29,57 @@
|
||||
|
||||
#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
|
||||
//
|
||||
#define MOSFET_B_PIN 7
|
||||
#define FAN0_PIN 9
|
||||
|
||||
//
|
||||
// Filament Runout Sensor
|
||||
//
|
||||
#define FIL_RUNOUT_PIN 2
|
||||
#if NUM_RUNOUT_SENSORS >= 2
|
||||
#define FIL_RUNOUT2_PIN 15 // Creality CR-X can use dual runout sensors
|
||||
#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
|
||||
#if SD_CONNECTION_IS(ONBOARD)
|
||||
//#define HAS_ONBOARD_SD_DETECT // If the SD_DETECT_PIN is wired up
|
||||
@@ -49,28 +89,14 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef PS_ON_PIN
|
||||
#define PS_ON_PIN 40 // Used by CR2020 Industrial series
|
||||
#endif
|
||||
|
||||
#if ENABLED(CASE_LIGHT_ENABLE) && !defined(CASE_LIGHT_PIN)
|
||||
#define CASE_LIGHT_PIN 65
|
||||
#endif
|
||||
|
||||
#define SERVO1_PIN 12
|
||||
|
||||
//
|
||||
// Based on RAMPS 1.4
|
||||
//
|
||||
#include "pins_RAMPS.h"
|
||||
|
||||
//
|
||||
// LCD / Controller
|
||||
//
|
||||
#ifndef BEEPER_PIN
|
||||
#define BEEPER_PIN 37 // Always define beeper pin so Play Tone works with ExtUI
|
||||
#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.
|
||||
*
|
||||
* - 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
|
||||
*
|
||||
* - 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".
|
||||
*
|
||||
|
@@ -26,10 +26,10 @@
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* - 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".
|
||||
*
|
||||
|
@@ -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.
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* This extension has been tested on Arduino 1.6.12 & 1.8.0
|
||||
|
@@ -160,7 +160,8 @@
|
||||
#define LCD_BRIGHTNESS_DEFAULT TFT_BACKLIGHT_PWM
|
||||
#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)
|
||||
#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
|
||||
*/
|
||||
#if ANY(MEGA_SOFT_SPI, USE_SOFTWARE_SPI)
|
||||
#if ANY(MEGA_SOFT_SPI, SDFAT_USE_SOFTWARE_SPI)
|
||||
#define SOFTWARE_SPI
|
||||
#endif
|
||||
|
||||
|
@@ -88,8 +88,8 @@
|
||||
*/
|
||||
#define MEGA_SOFT_SPI 0
|
||||
|
||||
// Set USE_SOFTWARE_SPI nonzero to ALWAYS use Software SPI.
|
||||
#define USE_SOFTWARE_SPI 0
|
||||
// Set SDFAT_USE_SOFTWARE_SPI nonzero to ALWAYS use Software SPI.
|
||||
#define SDFAT_USE_SOFTWARE_SPI 0
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
#if ANY(MEGA_SOFT_SPI, USE_SOFTWARE_SPI)
|
||||
#if ANY(MEGA_SOFT_SPI, SDFAT_USE_SOFTWARE_SPI)
|
||||
#define SOFTWARE_SPI
|
||||
#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.
|
||||
|
||||
## 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:
|
||||
|
||||
<table align="center">
|
||||
<tr><td>Project Maintainer</td></tr>
|
||||
<tr><td>
|
||||
|
||||
🇺🇸 **Scott Lahteine**
|
||||
[@thinkyhead](https://github.com/thinkyhead)
|
||||
[<kbd> Donate 💸 </kbd>](https://www.thinkyhead.com/donate-to-marlin)
|
||||
|
||||
</td><td>
|
||||
|
||||
🇺🇸 **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>
|
||||
Name|Role|Link|Donate
|
||||
----|----|----|----
|
||||
🇺🇸 Scott Lahteine|Project Lead|[[@thinkyhead](https://github.com/thinkyhead)]|[💸 Donate](https://marlinfw.org/docs/development/contributing.html#donate)
|
||||
🇺🇸 Roxanne Neufeld|Admin|[[@Roxy-3D](https://github.com/Roxy-3D)]|
|
||||
🇺🇸 Keith Bennett|Admin|[[@thisiskeithb](https://github.com/thisiskeithb)]|[💸 Donate](https://github.com/sponsors/thisiskeithb)
|
||||
🇺🇸 Jason Smith|Admin|[[@sjasonsmith](https://github.com/sjasonsmith)]|
|
||||
🇧🇷 Victor Oliveira|Admin|[[@rhapsodyv](https://github.com/rhapsodyv)]|
|
||||
🇬🇧 Chris Pepper|Admin|[[@p3p](https://github.com/p3p)]|
|
||||
🇳🇿 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)]|
|
||||
🇳🇱 Erik van der Zalm|Founder|[[@ErikZalm](https://github.com/ErikZalm)]|
|
||||
|
||||
## 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:
|
||||
{ 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.
|
||||
Use the Schema class for a more complete list of options, soon with full parsing.
|
||||
|
||||
This list is used to filter what is actually a config-defined option versus
|
||||
defines from elsewhere.
|
||||
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.
|
||||
|
||||
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
|
||||
@@ -44,13 +44,10 @@ def enabled_defines(filepath):
|
||||
# This will avoid false positives from #defines in comments
|
||||
f = re.sub(r'/\*.*?\*/', '', '\n'.join(f), flags=re.DOTALL).split("\n")
|
||||
|
||||
a = []
|
||||
for line in f:
|
||||
sline = line.strip()
|
||||
m = re.match(spatt, sline) # @section ...
|
||||
if m:
|
||||
section = m.group(1).strip()
|
||||
continue
|
||||
if m: section = m.group(1).strip() ; continue
|
||||
if sline[:7] == "#define":
|
||||
# Extract the key here (we don't care about the value)
|
||||
kv = sline[8:].strip().split()
|
||||
@@ -79,6 +76,7 @@ def compute_build_signature(env):
|
||||
Compute the build signature by extracting all configuration settings and
|
||||
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.
|
||||
Used by common-dependencies.py after filtering build files by feature.
|
||||
'''
|
||||
if 'BUILD_SIGNATURE' in env: return
|
||||
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')
|
||||
|
||||
# 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
|
||||
upload_speed = env['UPLOAD_SPEED'] if 'UPLOAD_SPEED' in env else 115200
|
||||
# baud rate of serial connection
|
||||
upload_port = _GetUploadPort(env) # Serial port to use
|
||||
|
||||
# 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
|
||||
upload_timeout = 1000 # Communication timout, lossy/slow connections need higher values
|
||||
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' CUSTOM_FIRMWARE_UPLOAD : {marlin_custom_firmware_upload}')
|
||||
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' Port : {upload_port} @ {upload_speed} baudrate')
|
||||
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!
|
||||
|
||||
# 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))
|
||||
#echologger = MarlinBinaryProtocol.EchoProtocol(protocol)
|
||||
protocol.connect()
|
||||
# Mark the rollback (delete broken transfer) from this point on
|
||||
rollback = True
|
||||
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()
|
||||
|
||||
# Notify upload completed
|
||||
|
@@ -1,3 +1,3 @@
|
||||
# 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 )
|
||||
|
||||
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.
|
||||
|
||||
|
@@ -15,11 +15,12 @@
|
||||
[env:SAMD51_grandcentral_m4]
|
||||
platform = atmelsam
|
||||
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_src_filter = ${common.default_src_filter} +<src/HAL/SAMD51>
|
||||
lib_deps = ${common.lib_deps}
|
||||
SoftwareSerialM
|
||||
Adafruit TinyUSB Library
|
||||
extra_scripts = ${common.extra_scripts}
|
||||
pre:buildroot/share/PlatformIO/scripts/SAMD51_grandcentral_m4.py
|
||||
custom_marlin.HAS_MEDIA = SdFat - Adafruit Fork, Adafruit SPIFlash
|
||||
|
Reference in New Issue
Block a user