1
0
mirror of https://github.com/MarlinFirmware/Marlin.git synced 2024-11-22 18:25:18 +00:00

Merge branch 'bugfix-2.1.x' of https://github.com/MarlinFirmware/Marlin into bugfix-2.1.x-July6

This commit is contained in:
classicrocker883 2024-11-21 09:30:40 -05:00
commit 4831ff8050
No known key found for this signature in database
GPG Key ID: 11D10A09D3B1FFC2
32 changed files with 226 additions and 2072 deletions

View File

@ -1771,17 +1771,17 @@
// @section stepper drivers // @section stepper drivers
// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1 // For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
// :{ 0:'Low', 1:'High' } // :['LOW', 'HIGH']
#define X_ENABLE_ON 0 #define X_ENABLE_ON LOW
#define Y_ENABLE_ON 0 #define Y_ENABLE_ON LOW
#define Z_ENABLE_ON 0 #define Z_ENABLE_ON LOW
#define E_ENABLE_ON 0 // For all extruders #define E_ENABLE_ON LOW // For all extruders
//#define I_ENABLE_ON 0 //#define I_ENABLE_ON LOW
//#define J_ENABLE_ON 0 //#define J_ENABLE_ON LOW
//#define K_ENABLE_ON 0 //#define K_ENABLE_ON LOW
//#define U_ENABLE_ON 0 //#define U_ENABLE_ON LOW
//#define V_ENABLE_ON 0 //#define V_ENABLE_ON LOW
//#define W_ENABLE_ON 0 //#define W_ENABLE_ON LOW
// Disable axis steppers immediately when they're not being stepped. // Disable axis steppers immediately when they're not being stepped.
// WARNING: When motors turn off there is a chance of losing position accuracy! // WARNING: When motors turn off there is a chance of losing position accuracy!

View File

@ -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-11-04" //#define STRING_DISTRIBUTION_DATE "2024-11-21"
/** /**
* The protocol for communication to the host. Protocol indicates communication * The protocol for communication to the host. Protocol indicates communication

View File

@ -291,7 +291,7 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
uint32_t *p1 = (uint32_t*)addrflash; uint32_t *p1 = (uint32_t*)addrflash;
uint32_t *p2 = (uint32_t*)data; uint32_t *p2 = (uint32_t*)data;
int count = 0; int count = 0;
for (i =0; i<PageSize >> 2; i++) { for (i = 0; i < PageSize >> 2; i++) {
if (p1[i] != p2[i]) { if (p1[i] != p2[i]) {
uint32_t delta = p1[i] ^ p2[i]; uint32_t delta = p1[i] ^ p2[i];
while (delta) { while (delta) {

View File

@ -112,7 +112,7 @@ uint8_t get_pin_mode(const pin_t Ard_num) {
} }
bool GET_PINMODE(const pin_t Ard_num) { bool getValidPinMode(const pin_t Ard_num) {
const uint8_t pin_mode = get_pin_mode(Ard_num); const uint8_t pin_mode = get_pin_mode(Ard_num);
return pin_mode == MODE_PIN_OUTPUT || pin_mode == MODE_PIN_ALT; // assume all alt definitions are PWM return pin_mode == MODE_PIN_OUTPUT || pin_mode == MODE_PIN_ALT; // assume all alt definitions are PWM
} }
@ -122,7 +122,7 @@ int8_t digital_pin_to_analog_pin(pin_t Ard_num) {
return (Ard_num >= 0 && Ard_num < NUM_ANALOG_INPUTS) ? Ard_num : -1; return (Ard_num >= 0 && Ard_num < NUM_ANALOG_INPUTS) ? Ard_num : -1;
} }
bool IS_ANALOG(const pin_t Ard_num) { bool isAnalogPin(const pin_t Ard_num) {
return digital_pin_to_analog_pin(Ard_num) != -1; return digital_pin_to_analog_pin(Ard_num) != -1;
} }
@ -131,7 +131,7 @@ bool is_digital(const pin_t x) {
return pin_mode == MODE_PIN_INPUT || pin_mode == MODE_PIN_OUTPUT; return pin_mode == MODE_PIN_INPUT || pin_mode == MODE_PIN_OUTPUT;
} }
void print_port(const pin_t Ard_num) { void printPinPort(const pin_t Ard_num) {
SERIAL_ECHOPGM("Pin: "); SERIAL_ECHOPGM("Pin: ");
SERIAL_ECHO(Ard_num); SERIAL_ECHO(Ard_num);
} }
@ -140,7 +140,7 @@ bool pwm_status(const pin_t Ard_num) {
return get_pin_mode(Ard_num) == MODE_PIN_ALT; return get_pin_mode(Ard_num) == MODE_PIN_ALT;
} }
void pwm_details(const pin_t Ard_num) { void printPinPWM(const pin_t Ard_num) {
if (PWM_PIN(Ard_num)) { if (PWM_PIN(Ard_num)) {
} }
} }

View File

@ -188,3 +188,16 @@
|| HAS_DRIVER(TMC5130_STANDALONE) || HAS_DRIVER(TMC5160_STANDALONE) || HAS_DRIVER(TMC5130_STANDALONE) || HAS_DRIVER(TMC5160_STANDALONE)
#define HAS_DIAG_PINS 1 #define HAS_DIAG_PINS 1
#endif #endif
// Hybrid Threshold ranges
#define THRS_TMC2100 65535
#define THRS_TMC2130 65535
#define THRS_TMC2160 255
#define THRS_TMC2208 255
#define THRS_TMC2209 255
#define THRS_TMC2660 65535
#define THRS_TMC5130 65535
#define THRS_TMC5160 65535
#define _DRIVER_THRS(V) CAT(THRS_, V)
#define STEPPER_MAX_THRS(S) _DRIVER_THRS(S##_DRIVER_TYPE)

View File

@ -99,7 +99,7 @@ PrintJobRecovery recovery;
/** /**
* Clear the recovery info * Clear the recovery info
*/ */
void PrintJobRecovery::init() { memset(&info, 0, sizeof(info)); } void PrintJobRecovery::init() { info = {}; }
/** /**
* Enable or disable then call changed() * Enable or disable then call changed()

View File

@ -77,8 +77,8 @@ class TMCStorage {
struct { struct {
OPTCODE(HAS_STEALTHCHOP, bool stealthChop_enabled = false) OPTCODE(HAS_STEALTHCHOP, bool stealthChop_enabled = false)
OPTCODE(HYBRID_THRESHOLD, uint8_t hybrid_thrs = 0) OPTCODE(HYBRID_THRESHOLD, uint16_t hybrid_thrs = 0)
OPTCODE(USE_SENSORLESS, int16_t homing_thrs = 0) OPTCODE(USE_SENSORLESS, int16_t homing_thrs = 0)
} stored; } stored;
}; };

View File

@ -53,7 +53,7 @@
* 41 - Counter-Clockwise M4 * 41 - Counter-Clockwise M4
* 50 - Clockwise M5 * 50 - Clockwise M5
* 51 - Counter-Clockwise M5 * 51 - Counter-Clockwise M5
**/ */
void GcodeSuite::G35() { void GcodeSuite::G35() {
DEBUG_SECTION(log_G35, "G35", DEBUGGING(LEVELING)); DEBUG_SECTION(log_G35, "G35", DEBUGGING(LEVELING));

View File

@ -43,40 +43,40 @@
* P : Flag to put the probe at the given point * P : Flag to put the probe at the given point
*/ */
void GcodeSuite::G42() { void GcodeSuite::G42() {
if (MOTION_CONDITIONS) { if (!MOTION_CONDITIONS) return;
const bool hasI = parser.seenval('I');
const int8_t ix = hasI ? parser.value_int() : 0;
const bool hasJ = parser.seenval('J');
const int8_t iy = hasJ ? parser.value_int() : 0;
if ((hasI && !WITHIN(ix, 0, GRID_MAX_POINTS_X - 1)) || (hasJ && !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1))) { const bool hasI = parser.seenval('I');
SERIAL_ECHOLNPGM(STR_ERR_MESH_XY); const int8_t ix = hasI ? parser.value_int() : 0;
return; const bool hasJ = parser.seenval('J');
} const int8_t iy = hasJ ? parser.value_int() : 0;
// Move to current_position, as modified by I, J, P parameters if ((hasI && !WITHIN(ix, 0, GRID_MAX_POINTS_X - 1)) || (hasJ && !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1))) {
destination = current_position; SERIAL_ECHOLNPGM(STR_ERR_MESH_XY);
return;
if (hasI) destination.x = bedlevel.get_mesh_x(ix);
if (hasJ) destination.y = bedlevel.get_mesh_y(iy);
#if HAS_PROBE_XY_OFFSET
if (parser.seen_test('P')) {
if (hasI) destination.x -= probe.offset_xy.x;
if (hasJ) destination.y -= probe.offset_xy.y;
}
#endif
const feedRate_t fval = parser.linearval('F'),
fr_mm_s = MMM_TO_MMS(fval > 0 ? fval : 0.0f);
// SCARA kinematic has "safe" XY raw moves
#if IS_SCARA
prepare_internal_fast_move_to_destination(fr_mm_s);
#else
prepare_internal_move_to_destination(fr_mm_s);
#endif
} }
// Move to current_position, as modified by I, J, P parameters
destination = current_position;
if (hasI) destination.x = bedlevel.get_mesh_x(ix);
if (hasJ) destination.y = bedlevel.get_mesh_y(iy);
#if HAS_PROBE_XY_OFFSET
if (parser.seen_test('P')) {
if (hasI) destination.x -= probe.offset_xy.x;
if (hasJ) destination.y -= probe.offset_xy.y;
}
#endif
const feedRate_t fval = parser.linearval('F'),
fr_mm_s = MMM_TO_MMS(fval > 0 ? fval : 0.0f);
// SCARA kinematic has "safe" XY raw moves
#if IS_SCARA
prepare_internal_fast_move_to_destination(fr_mm_s);
#else
prepare_internal_move_to_destination(fr_mm_s);
#endif
} }
#endif // HAS_MESH #endif // HAS_MESH

View File

@ -212,7 +212,28 @@ void GcodeSuite::G34() {
// Probe a Z height for each stepper. // Probe a Z height for each stepper.
// Probing sanity check is disabled, as it would trigger even in normal cases because // Probing sanity check is disabled, as it would trigger even in normal cases because
// current_position.z has been manually altered in the "dirty trick" above. // current_position.z has been manually altered in the "dirty trick" above.
const float z_probed_height = probe.probe_at_point(DIFF_TERN(HAS_HOME_OFFSET, ppos, xy_pos_t(home_offset)), raise_after, 0, true, false, (Z_PROBE_LOW_POINT) - z_probe * 0.5f, z_probe * 0.5f);
if (DEBUGGING(LEVELING))
DEBUG_ECHOLNPGM(
"Z_PROBE_LOW_POINT: ", p_float_t(Z_PROBE_LOW_POINT, 2),
"z_probe: ", p_float_t(z_probe, 2),
"Probe Tgt: ", p_float_t((Z_PROBE_LOW_POINT) - z_probe * 0.5f, 2)
);
const float z_probed_height = probe.probe_at_point(
DIFF_TERN(HAS_HOME_OFFSET, ppos, xy_pos_t(home_offset)), // xy
raise_after, // raise_after
(DEBUGGING(LEVELING) || DEBUGGING(INFO)) ? 3 : 0, // verbose_level
true, false, // probe_relative, sanity_check
(Z_PROBE_LOW_POINT) - (z_probe * 0.5f), // z_min_point
Z_TWEEN_SAFE_CLEARANCE // z_clearance
);
if (DEBUGGING(LEVELING)) {
DEBUG_ECHOLNPGM_P(PSTR("Probing X"), ppos.x, SP_Y_STR, ppos.y);
DEBUG_ECHOLNPGM("Height = ", z_probed_height);
}
if (isnan(z_probed_height)) { if (isnan(z_probed_height)) {
SERIAL_ECHOLNPGM(STR_ERR_PROBING_FAILED); SERIAL_ECHOLNPGM(STR_ERR_PROBING_FAILED);
LCD_MESSAGE(MSG_LCD_PROBING_FAILED); LCD_MESSAGE(MSG_LCD_PROBING_FAILED);
@ -236,7 +257,12 @@ void GcodeSuite::G34() {
// Adapt the next probe clearance height based on the new measurements. // Adapt the next probe clearance height based on the new measurements.
// Safe_height = lowest distance to bed (= highest measurement) plus highest measured misalignment. // Safe_height = lowest distance to bed (= highest measurement) plus highest measured misalignment.
z_maxdiff = z_measured_max - z_measured_min; z_maxdiff = z_measured_max - z_measured_min;
z_probe = (Z_TWEEN_SAFE_CLEARANCE + zoffs) + z_measured_max + z_maxdiff; //Not sure we need z_maxdiff, but leaving it in for safety.
// The intent of the line below seems to be to clamp the probe depth on successive iterations of G34, but in reality if the amplification
// factor is not completely accurate, this was causing probing to fail as the probe stopped fractions of a mm from the trigger point
// on the second iteration very reliably. This may be restored with an uncertainty factor at some point, however its usefulness after
// all probe points have seen a successful probe is questionable.
//z_probe = (Z_TWEEN_SAFE_CLEARANCE + zoffs) + z_measured_max + z_maxdiff; // Not sure we need z_maxdiff, but leaving it in for safety.
#if HAS_Z_STEPPER_ALIGN_STEPPER_XY #if HAS_Z_STEPPER_ALIGN_STEPPER_XY
// Replace the initial values in z_measured with calculated heights at // Replace the initial values in z_measured with calculated heights at
@ -401,7 +427,15 @@ void GcodeSuite::G34() {
// Use the probed height from the last iteration to determine the Z height. // Use the probed height from the last iteration to determine the Z height.
// z_measured_min is used, because all steppers are aligned to z_measured_min. // z_measured_min is used, because all steppers are aligned to z_measured_min.
// Ideally, this would be equal to the 'z_probe * 0.5f' which was added earlier. // Ideally, this would be equal to the 'z_probe * 0.5f' which was added earlier.
current_position.z -= z_measured_min - (Z_TWEEN_SAFE_CLEARANCE + zoffs); //we shouldn't want to subtract the clearance from here right? (Depends if we added it further up) if (DEBUGGING(LEVELING))
DEBUG_ECHOLNPGM(
"z_measured_min: ", p_float_t(z_measured_min, 2),
"Z_TWEEN_SAFE_CLEARANCE: ", p_float_t(Z_TWEEN_SAFE_CLEARANCE, 2),
"zoffs: ", p_float_t(zoffs, 2)
);
if (!err_break)
current_position.z -= z_measured_min - (Z_TWEEN_SAFE_CLEARANCE + zoffs); // We shouldn't want to subtract the clearance from here right? (Depends if we added it further up)
sync_plan_position(); sync_plan_position();
#endif #endif

View File

@ -75,7 +75,9 @@ void GcodeSuite::G61(int8_t slot/*=-1*/) {
// No XYZ...E parameters, move to stored position // No XYZ...E parameters, move to stored position
float epos = stored_position[slot].e; #if HAS_EXTRUDERS
float epos = stored_position[slot].e;
#endif
if (!parser.seen_axis()) { if (!parser.seen_axis()) {
DEBUG_ECHOLNPGM(STR_RESTORING_POSITION, slot, " (all axes)"); DEBUG_ECHOLNPGM(STR_RESTORING_POSITION, slot, " (all axes)");
// Move to the saved position, all axes except E // Move to the saved position, all axes except E

View File

@ -128,6 +128,8 @@
* M84 - Disable steppers until next move, or use S<seconds> to specify an idle * M84 - Disable steppers until next move, or use S<seconds> to specify an idle
* duration after which steppers should turn off. S0 disables the timeout. * duration after which steppers should turn off. S0 disables the timeout.
* M85 - Set inactivity shutdown timer with parameter S<seconds>. To disable set zero (default) * M85 - Set inactivity shutdown timer with parameter S<seconds>. To disable set zero (default)
* M86 - Set / Report Hotend Idle Timeout. (Requires HOTEND_IDLE_TIMEOUT)
* M87 - Cancel Hotend Idle Timeout (by setting the timeout period to 0). (Requires HOTEND_IDLE_TIMEOUT)
* M92 - Set planner.settings.axis_steps_per_mm for one or more axes. (Requires EDITABLE_STEPS_PER_UNIT) * M92 - Set planner.settings.axis_steps_per_mm for one or more axes. (Requires EDITABLE_STEPS_PER_UNIT)
* *
* M100 - Watch Free Memory (for debugging) (Requires M100_FREE_MEMORY_WATCHER) * M100 - Watch Free Memory (for debugging) (Requires M100_FREE_MEMORY_WATCHER)
@ -213,6 +215,8 @@
* M281 - Set servo min|max position: "M281 P<index> L<min> U<max>". (Requires EDITABLE_SERVO_ANGLES) * M281 - Set servo min|max position: "M281 P<index> L<min> U<max>". (Requires EDITABLE_SERVO_ANGLES)
* M282 - Detach servo: "M282 P<index>". (Requires SERVO_DETACH_GCODE) * M282 - Detach servo: "M282 P<index>". (Requires SERVO_DETACH_GCODE)
* M290 - Babystepping (Requires BABYSTEPPING) * M290 - Babystepping (Requires BABYSTEPPING)
* M293 - Babystep Z UP (Requires EP_BABYSTEPPING)
* M294 - Babystep Z DOWN (Requires EP_BABYSTEPPING)
* M300 - Play beep sound S<frequency Hz> P<duration ms> * M300 - Play beep sound S<frequency Hz> P<duration ms>
* M301 - Set PID parameters P I and D. (Requires PIDTEMP) * M301 - Set PID parameters P I and D. (Requires PIDTEMP)
* M302 - Allow cold extrudes, or set the minimum extrude S<temperature>. (Requires PREVENT_COLD_EXTRUSION) * M302 - Allow cold extrudes, or set the minimum extrude S<temperature>. (Requires PREVENT_COLD_EXTRUSION)
@ -246,6 +250,7 @@
* M430 - Read the system current, voltage, and power (Requires POWER_MONITOR_CURRENT, POWER_MONITOR_VOLTAGE, or POWER_MONITOR_FIXED_VOLTAGE) * M430 - Read the system current, voltage, and power (Requires POWER_MONITOR_CURRENT, POWER_MONITOR_VOLTAGE, or POWER_MONITOR_FIXED_VOLTAGE)
* M485 - Send RS485 packets (Requires RS485_SERIAL_PORT) * M485 - Send RS485 packets (Requires RS485_SERIAL_PORT)
* M486 - Identify and cancel objects. (Requires CANCEL_OBJECTS) * M486 - Identify and cancel objects. (Requires CANCEL_OBJECTS)
* M493 - Get or set input FT Motion / Shaping parameters. (Requires FT_MOTION)
* M500 - Store parameters in EEPROM. (Requires EEPROM_SETTINGS) * M500 - Store parameters in EEPROM. (Requires EEPROM_SETTINGS)
* M501 - Restore parameters from EEPROM. (Requires EEPROM_SETTINGS) * M501 - Restore parameters from EEPROM. (Requires EEPROM_SETTINGS)
* M502 - Revert to the default "factory settings". ** Does not write them to EEPROM! ** * M502 - Revert to the default "factory settings". ** Does not write them to EEPROM! **
@ -261,7 +266,7 @@
* M554 - Get or set IP gateway. (Requires enabled Ethernet port) * M554 - Get or set IP gateway. (Requires enabled Ethernet port)
* M569 - Enable stealthChop on an axis. (Requires at least one _DRIVER_TYPE to be TMC2130/2160/2208/2209/5130/5160) * M569 - Enable stealthChop on an axis. (Requires at least one _DRIVER_TYPE to be TMC2130/2160/2208/2209/5130/5160)
* M575 - Change the serial baud rate. (Requires BAUD_RATE_GCODE) * M575 - Change the serial baud rate. (Requires BAUD_RATE_GCODE)
* M592 - Get or set nonlinear extrusion parameters. (Requires NONLINEAR_EXTRUSION) * M592 - Get or set Nonlinear Extrusion parameters. (Requires NONLINEAR_EXTRUSION)
* M593 - Get or set input shaping parameters. (Requires INPUT_SHAPING_[XY]) * M593 - Get or set input shaping parameters. (Requires INPUT_SHAPING_[XY])
* M600 - Pause for filament change: "M600 X<pos> Y<pos> Z<raise> E<first_retract> L<later_retract>". (Requires ADVANCED_PAUSE_FEATURE) * M600 - Pause for filament change: "M600 X<pos> Y<pos> Z<raise> E<first_retract> L<later_retract>". (Requires ADVANCED_PAUSE_FEATURE)
* M603 - Configure filament change: "M603 T<tool> U<unload_length> L<load_length>". (Requires ADVANCED_PAUSE_FEATURE) * M603 - Configure filament change: "M603 T<tool> U<unload_length> L<load_length>". (Requires ADVANCED_PAUSE_FEATURE)
@ -274,15 +279,17 @@
* M701 - Load filament (Requires FILAMENT_LOAD_UNLOAD_GCODES) * M701 - Load filament (Requires FILAMENT_LOAD_UNLOAD_GCODES)
* M702 - Unload filament (Requires FILAMENT_LOAD_UNLOAD_GCODES) * M702 - Unload filament (Requires FILAMENT_LOAD_UNLOAD_GCODES)
* *
* M704 - Preload to MMU (Requires PRUSA_MMU3) *** PRUSA_MMU3 ***
* M705 - Eject filament (Requires PRUSA_MMU3) * M704 - Preload to MMU
* M706 - Cut filament (Requires PRUSA_MMU3) * M705 - Eject filament
* M707 - Read from MMU register (Requires PRUSA_MMU3) * M706 - Cut filament
* M708 - Write to MMU register (Requires PRUSA_MMU3) * M707 - Read from MMU register
* M709 - MMU power & reset (Requires PRUSA_MMU3) * M708 - Write to MMU register
* M709 - MMU power & reset
* *
* M808 - Set or Goto a Repeat Marker (Requires GCODE_REPEAT_MARKERS) * M808 - Set or Goto a Repeat Marker (Requires GCODE_REPEAT_MARKERS)
* M810-M819 - Define/execute a G-code macro (Requires GCODE_MACROS) * M810-M819 - Define/execute a G-code macro (Requires GCODE_MACROS)
* M820 - Report all defined M810-M819 G-code macros (Requires GCODE_MACROS)
* M851 - Set Z probe's XYZ offsets in current units. (Negative values: X=left, Y=front, Z=below) * M851 - Set Z probe's XYZ offsets in current units. (Negative values: X=left, Y=front, Z=below)
* M852 - Set skew factors: "M852 [I<xy>] [J<xz>] [K<yz>]". (Requires SKEW_CORRECTION_GCODE, plus SKEW_CORRECTION_FOR_Z for IJ) * M852 - Set skew factors: "M852 [I<xy>] [J<xz>] [K<yz>]". (Requires SKEW_CORRECTION_GCODE, plus SKEW_CORRECTION_FOR_Z for IJ)
* *

View File

@ -109,7 +109,7 @@ void GcodeSuite::M115() {
SERIAL_ECHO(F("CEDE2A2F-")); SERIAL_ECHO(F("CEDE2A2F-"));
for (uint8_t i = 1; i <= 6; i++) { for (uint8_t i = 1; i <= 6; i++) {
print_hex_word(UID[(i % 2) ? i : i - 2]); // 1111-0000-3333-222255554444 print_hex_word(UID[(i % 2) ? i : i - 2]); // 1111-0000-3333-222255554444
if (i <= 3) SERIAL_ECHO(C('-')); if (i <= 3) SERIAL_CHAR('-');
} }
#endif #endif
#endif #endif

View File

@ -45,25 +45,24 @@
* G5: Cubic B-spline * G5: Cubic B-spline
*/ */
void GcodeSuite::G5() { void GcodeSuite::G5() {
if (MOTION_CONDITIONS) { if (!MOTION_CONDITIONS) return;
#if ENABLED(CNC_WORKSPACE_PLANES) #if ENABLED(CNC_WORKSPACE_PLANES)
if (workspace_plane != PLANE_XY) { if (workspace_plane != PLANE_XY) {
SERIAL_ERROR_MSG(STR_ERR_BAD_PLANE_MODE); SERIAL_ERROR_MSG(STR_ERR_BAD_PLANE_MODE);
return; return;
} }
#endif #endif
get_destination_from_command(); get_destination_from_command();
const xy_pos_t offsets[2] = { const xy_pos_t offsets[2] = {
{ parser.linearval('I'), parser.linearval('J') }, { parser.linearval('I'), parser.linearval('J') },
{ parser.linearval('P'), parser.linearval('Q') } { parser.linearval('P'), parser.linearval('Q') }
}; };
cubic_b_spline(current_position, destination, offsets, MMS_SCALED(feedrate_mm_s), active_extruder); cubic_b_spline(current_position, destination, offsets, MMS_SCALED(feedrate_mm_s), active_extruder);
current_position = destination; current_position = destination;
}
} }
#endif // BEZIER_CURVE_SUPPORT #endif // BEZIER_CURVE_SUPPORT

View File

@ -4329,6 +4329,17 @@ static_assert(_PLUS_TEST(3), "DEFAULT_MAX_ACCELERATION values must be positive."
#error "SDSUPPORT, BINARY_FILE_TRANSFER, and CUSTOM_FIRMWARE_UPLOAD are required for custom upload." #error "SDSUPPORT, BINARY_FILE_TRANSFER, and CUSTOM_FIRMWARE_UPLOAD are required for custom upload."
#endif #endif
/**
* Direct Stepping requirements
*/
#if ENABLED(DIRECT_STEPPING)
#if ENABLED(CPU_32_BIT)
#error "Direct Stepping is not supported on 32-bit boards."
#elif !IS_FULL_CARTESIAN
#error "Direct Stepping is incompatible with enabled kinematics."
#endif
#endif
/** /**
* Input Shaping requirements * Input Shaping requirements
*/ */

View File

@ -42,7 +42,7 @@
* version was tagged. * version was tagged.
*/ */
#ifndef STRING_DISTRIBUTION_DATE #ifndef STRING_DISTRIBUTION_DATE
#define STRING_DISTRIBUTION_DATE "2024-11-04" #define STRING_DISTRIBUTION_DATE "2024-11-21"
#endif #endif
/** /**

View File

@ -115,9 +115,9 @@ constexpr xyze_float_t max_steps_edit_values =
constexpr xyz_uint_t min_homing_edit_values = NUM_AXIS_ARRAY_1(MIN_HOMING_EDIT_VALUE); constexpr xyz_uint_t min_homing_edit_values = NUM_AXIS_ARRAY_1(MIN_HOMING_EDIT_VALUE);
#ifdef DEFAULT_MAX_MULTIPLIER #ifdef DEFAULT_MAX_MULTIPLIER
constexpr xyz_uint_t default_homing = HOMING_FEEDRATE_MM_M; constexpr xyz_long_t default_homing = HOMING_FEEDRATE_MM_M;
#endif #endif
constexpr xyz_uint_t max_homing_edit_values = constexpr xyz_long_t max_homing_edit_values =
#ifdef DEFAULT_MAX_MULTIPLIER #ifdef DEFAULT_MAX_MULTIPLIER
default_homing * DEFAULT_MAX_MULTIPLIER default_homing * DEFAULT_MAX_MULTIPLIER
#else #else

View File

@ -2672,7 +2672,7 @@ void applyMaxAccel() { planner.set_max_acceleration(hmiValue.axis, menuData.valu
default: break; default: break;
} }
} }
void applyHomingFR() { updateHomingFR(HMI_value.axis, MenuData.Value); } void applyHomingFR() { updateHomingFR(hmiValue.axis, menuData.value); }
#if HAS_X_AXIS #if HAS_X_AXIS
void setHomingX() { hmiValue.axis = X_AXIS; setIntOnClick(min_homing_edit_values.x, max_homing_edit_values.x, homing_feedrate_mm_m.x, applyHomingFR); } void setHomingX() { hmiValue.axis = X_AXIS; setIntOnClick(min_homing_edit_values.x, max_homing_edit_values.x, homing_feedrate_mm_m.x, applyHomingFR); }
#endif #endif
@ -3799,15 +3799,15 @@ void drawMaxAccelMenu() {
if (SET_MENU(homingFRMenu, MSG_HOMING_FEEDRATE, 4)) { if (SET_MENU(homingFRMenu, MSG_HOMING_FEEDRATE, 4)) {
BACK_ITEM(drawMotionMenu); BACK_ITEM(drawMotionMenu);
#if HAS_X_AXIS #if HAS_X_AXIS
static uint16_t xhome = static_cast<uint16_t>(homing_feedrate_mm_m.x); uint16_t xhome = static_cast<uint16_t>(homing_feedrate_mm_m.x);
EDIT_ITEM(ICON_MaxSpeedJerkX, MSG_HOMING_FEEDRATE_X, onDrawPIntMenu, setHomingX, &xhome); EDIT_ITEM(ICON_MaxSpeedJerkX, MSG_HOMING_FEEDRATE_X, onDrawPIntMenu, setHomingX, &xhome);
#endif #endif
#if HAS_Y_AXIS #if HAS_Y_AXIS
static uint16_t yhome = static_cast<uint16_t>(homing_feedrate_mm_m.y); uint16_t yhome = static_cast<uint16_t>(homing_feedrate_mm_m.y);
EDIT_ITEM(ICON_MaxSpeedJerkY, MSG_HOMING_FEEDRATE_Y, onDrawPIntMenu, setHomingY, &yhome); EDIT_ITEM(ICON_MaxSpeedJerkY, MSG_HOMING_FEEDRATE_Y, onDrawPIntMenu, setHomingY, &yhome);
#endif #endif
#if HAS_Z_AXIS #if HAS_Z_AXIS
static uint16_t zhome = static_cast<uint16_t>(homing_feedrate_mm_m.z); uint16_t zhome = static_cast<uint16_t>(homing_feedrate_mm_m.z);
EDIT_ITEM(ICON_MaxSpeedJerkZ, MSG_HOMING_FEEDRATE_Z, onDrawPIntMenu, setHomingZ, &zhome); EDIT_ITEM(ICON_MaxSpeedJerkZ, MSG_HOMING_FEEDRATE_Z, onDrawPIntMenu, setHomingZ, &zhome);
#endif #endif
} }

View File

@ -410,17 +410,17 @@ void menu_advanced_settings();
#if ENABLED(MENUS_ALLOW_INCH_UNITS) #if ENABLED(MENUS_ALLOW_INCH_UNITS)
#define _EDIT_HOMING_FR(A) do{ \ #define _EDIT_HOMING_FR(A) do{ \
const float minfr = MMS_TO_MMM(planner.settings.min_feedrate_mm_s); \
const float maxfr = MMS_TO_MMM(planner.settings.max_feedrate_mm_s[_AXIS(A)]); \ const float maxfr = MMS_TO_MMM(planner.settings.max_feedrate_mm_s[_AXIS(A)]); \
editable.decimal = A##_AXIS_UNIT(homing_feedrate_mm_m.A); \ editable.decimal = A##_AXIS_UNIT(homing_feedrate_mm_m.A); \
EDIT_ITEM(float5, MSG_HOMING_FEEDRATE_N, &editable.decimal, \ EDIT_ITEM_FAST_N(float5, _AXIS(A), MSG_HOMING_FEEDRATE_N, &editable.decimal, \
A##_AXIS_UNIT(10), A##_AXIS_UNIT(maxfr), []{ \ A##_AXIS_UNIT(minfr), A##_AXIS_UNIT(maxfr), []{ \
homing_feedrate_mm_m.A = parser.axis_value_to_mm(_AXIS(A), editable.decimal); \ homing_feedrate_mm_m.A = parser.axis_value_to_mm(_AXIS(A), editable.decimal); \
}); \ }); \
}while(0); }while(0);
#else #else
#define _EDIT_HOMING_FR(A) do{ \ #define _EDIT_HOMING_FR(A) \
EDIT_ITEM(float5, MSG_HOMING_FEEDRATE_N, &homing_feedrate_mm_m.A, 10, MMS_TO_MMM(planner.settings.max_feedrate_mm_s[_AXIS(A)])); \ EDIT_ITEM_FAST_N(float5, _AXIS(A), MSG_HOMING_FEEDRATE_N, &homing_feedrate_mm_m.A, MMS_TO_MMM(planner.settings.min_feedrate_mm_s), MMS_TO_MMM(planner.settings.max_feedrate_mm_s[_AXIS(A)]));
}while(0);
#endif #endif
MAIN_AXIS_MAP(_EDIT_HOMING_FR); MAIN_AXIS_MAP(_EDIT_HOMING_FR);

View File

@ -90,7 +90,7 @@ void menu_tmc_current() {
#if ENABLED(HYBRID_THRESHOLD) #if ENABLED(HYBRID_THRESHOLD)
#define TMC_EDIT_STORED_HYBRID_THRS(ST, STR) EDIT_ITEM_F(uint8, F(STR), &stepper##ST.stored.hybrid_thrs, 0, 255, []{ stepper##ST.refresh_hybrid_thrs(); }); #define TMC_EDIT_STORED_HYBRID_THRS(ST, STR) EDIT_ITEM_F(uint16_3, F(STR), &stepper##ST.stored.hybrid_thrs, 0, STEPPER_MAX_THRS(ST), []{ stepper##ST.refresh_hybrid_thrs(); });
void menu_tmc_hybrid_thrs() { void menu_tmc_hybrid_thrs() {
START_MENU(); START_MENU();

View File

@ -75,7 +75,7 @@
// Servos // Servos
// //
#ifndef SERVO0_PIN #ifndef SERVO0_PIN
#define SERVO0_PIN PB0 // BLTouch OUT * #define SERVO0_PIN PB1
#endif #endif
// //
@ -83,17 +83,17 @@
// //
#define X_STOP_PIN PA5 #define X_STOP_PIN PA5
#define Y_STOP_PIN PA6 #define Y_STOP_PIN PA6
#define Z_STOP_PIN PB0 // BLTOUCH * #define Z_STOP_PIN PB0
#ifndef Z_MIN_PROBE_PIN #ifndef Z_MIN_PROBE_PIN
#define Z_MIN_PROBE_PIN PB1 // BLTouch IN * #define Z_MIN_PROBE_PIN PB2
#endif #endif
// //
// Filament Runout Sensor // Filament Runout Sensor
// //
#ifndef FIL_RUNOUT_PIN #ifndef FIL_RUNOUT_PIN
#define FIL_RUNOUT_PIN PC15 // "Pulled-high" * #define FIL_RUNOUT_PIN PA4 // "Pulled-high" *
#endif #endif
// //

View File

@ -44,9 +44,9 @@
// //
// Limit Switches // Limit Switches
// //
#define X_MIN_PIN 5 #define X_STOP_PIN 5
#define Y_MIN_PIN 2 #define Y_STOP_PIN 2
#define Z_MIN_PIN 6 #define Z_STOP_PIN 6
// //
// Steppers // Steppers

View File

@ -151,8 +151,10 @@ fi
echo -e "=====================\nProceed with builds...\n=====================" echo -e "=====================\nProceed with builds...\n====================="
shopt -s nullglob shopt -s nullglob
export PAUSE=1
# Get a list of all folders that contain a file matching "Configuration*.h" # Get a list of all folders that contain a file matching "Configuration*.h"
find -ds "$CBASE"/config/examples -type d -name 'Configuration.h' -o -name 'Configuration_adv.h' -print0 | while IFS= read -r -d '' CONF; do find -ds "$CBASE"/config/examples -type d -name 'Configuration.h' -o -name 'Configuration_adv.h' -print0 | while IFS= read -r -d $'\0' CONF; do
# Remove the file name and slash from the end of the path # Remove the file name and slash from the end of the path
CONF=${CONF%/*} CONF=${CONF%/*}
@ -198,10 +200,14 @@ find -ds "$CBASE"/config/examples -type d -name 'Configuration.h' -o -name 'Conf
fi fi
echo echo
((--LIMIT)) || { echo "Specified limit reached" ; PAUSE=1 ; break ; } ((--LIMIT)) || { echo "Specified limit reached" ; break ; }
echo echo
export PAUSE=0
done done
echo "Exiting"
# Delete the build state if not paused early # Delete the build state if not paused early
[[ $PAUSE ]] || rm -f "$STAT_FILE" ((PAUSE)) || rm -f "$STAT_FILE"

View File

@ -37,6 +37,7 @@ PATH="$HERE:$PATH"
. mfutil . mfutil
annc() { echo -e "\033[0;32m$1\033[0m" ; } annc() { echo -e "\033[0;32m$1\033[0m" ; }
alrt() { echo -e "\033[0;31m$1\033[0m" ; }
# Get arguments # Get arguments
BUILD=./.pio/build BUILD=./.pio/build
@ -153,8 +154,7 @@ ENAME=("-name" "marlin_config.json" \
"-o" "-name" "schema.yml") "-o" "-name" "schema.yml")
# Possible built firmware names (in the build folder) # Possible built firmware names (in the build folder)
BNAME=("-type" "f" \ BNAME=("-name" 'firmware*.hex' \
"-name" 'firmware*.hex' \
"-o" "-name" "firmware*.bin" \ "-o" "-name" "firmware*.bin" \
"-o" "-name" "project*.bin" \ "-o" "-name" "project*.bin" \
"-o" "-name" "Robin*.bin" \ "-o" "-name" "Robin*.bin" \
@ -176,44 +176,54 @@ set +e
echo "Building example $CONFIG ..." echo "Building example $CONFIG ..."
mftest -s -a -n1 ; ERR=$? mftest -s -a -n1 ; ERR=$?
((ERR)) && echo "Failed" || echo "Success" ((ERR)) && alrt "Failed ($ERR)" || annc "Success"
set -e set -e
# Copy exports back to the configs if [[ $ERR -gt 0 ]]; then
if [[ -n $EXPNUM ]]; then
annc "Exporting $EXPNUM" # Error? For --nofail simply log. Otherwise return the error.
[[ -f Marlin/Config-export.h ]] && { cp Marlin/Config-export.h "$ARCSUB"/Config.h ; } if [[ -n $NOFAIL ]]; then
find "$BUILD" "${ENAME[@]}" -exec cp "{}" "$ARCSUB" \; date +"%F %T [FAIL] $CONFIG" >>./.pio/error-log.txt
else
exit $ERR
fi
else
# Copy exports back to the configs
if [[ -n $EXPNUM ]]; then
annc "Exporting $EXPNUM"
[[ -f Marlin/Config-export.h ]] && { cp Marlin/Config-export.h "$ARCSUB"/Config.h ; }
find "$BUILD" \( "${ENAME[@]}" \) -exec cp "{}" "$ARCSUB" \;
fi
# Copy potential firmware files into the config folder
# TODO: Consider firmware that needs an STM32F4_UPDATE folder.
# Currently only BOARD_CREALITY_F401RE env:STM32F401RE_creality
if ((ARCHIVE)); then
annc "Archiving"
rm -f "$ARCSUB"/*.tar.gz "$ARCSUB"/*.sha256.txt
find "$BUILD" \( "${BNAME[@]}" \) -exec sh -c '
ARCSUB="$1"
CONFIG="$2"
shift 2
for FILE in "$@"; do
cd "${FILE%/*}"
NAME=${FILE##*/}
SHRT=${NAME%.*}
SHASUM=$(sha256sum "$NAME" | cut -d" " -f1)
tar -czf "$ARCSUB/$SHRT.tar.gz" "$NAME"
echo "$CONFIG\n$SHASUM" > "$ARCSUB/$NAME.sha256.txt"
rm "$NAME"
cd - >/dev/null
done
' sh "$ARCSUB" "$CONFIG" {} +
fi
# Reveal the configs after the build, if requested
((REVEAL)) && { annc "Revealing $ARCSUB" ; open "$ARCSUB" ; }
fi fi
# Copy potential firmware files into the config folder
# TODO: Consider firmware that needs an STM32F4_UPDATE folder.
# Currently only BOARD_CREALITY_F401RE env:STM32F401RE_creality
if ((ARCHIVE)); then
annc "Archiving"
rm -f "$ARCSUB"/*.bin.tar.gz "$ARCSUB"/*.hex.tar.gz
find "$BUILD" \( "${BNAME[@]}" \) -exec sh -c '
ARCSUB="$1"
CONFIG="$2"
shift 2
for FILE in "$@"; do
cd "${FILE%/*}"
BASE=${FILE##*/}
SHRT=${BASE%.*}
SHASUM=$(sha256sum "$BASE" | cut -d" " -f1)
tar -czf "$ARCSUB/$SHRT.tar.gz" "$BASE"
echo "$CONFIG\n$SHASUM" > "$ARCSUB/$BASE.sha256.txt"
rm "$BASE"
cd - >/dev/null
done
' sh "$ARCSUB" "$CONFIG" {} +
fi
# Exit with error unless --nofail is set
[[ $ERR -gt 0 && -z $NOFAIL ]] && exit $ERR
# Reveal the configs after the build, if requested
((REVEAL)) && { annc "Revealing $ARCSUB" ; open "$ARCSUB" ; }
exit 0 exit 0

View File

@ -51,6 +51,8 @@ if pioutil.is_pio_build():
# Make sure the local variant sub-folder exists # Make sure the local variant sub-folder exists
if marlin_variant_pattern.match(str(variant).lower()): if marlin_variant_pattern.match(str(variant).lower()):
source_dir = Path("buildroot/share/PlatformIO/variants", variant) here = Path.cwd()
variants_dir = here / 'buildroot' / 'share' / 'PlatformIO' / 'variants'
source_dir = variants_dir / variant
assert source_dir.is_dir() assert source_dir.is_dir()
board.update("build.variants_dir", "buildroot/share/PlatformIO/variants"); board.update("build.variants_dir", str(variants_dir));

View File

@ -1,40 +0,0 @@
Overview:
1) Install Sublime
2) Install Deviot (?optional?)
3) Install WebDevShell (this will execute the auto-build script)
4) Copy the menu configuration to the proper Sublime directory
5) Add platformio to your path (usually not needed)
Sublime with autobuild
Tools
Install Package Control
Tools
Command Palette
Package Control: Install Package
type in deviot and click on it
Tools
Command Palette
Package Control: Install Package
type in WebDevShell and click on it
in Sublime, open Marlin directory with "platformio.ini" in it
starting in the top level directory, go to the folder "Buildroot/shared/Sublime"
copy the folder "auto_build_sublime_menu" and contents to:
Windows
\Users\your_user_name\AppData\Roaming\Sublime Text 3\Packages
Linux
/home/your_user_name/.config/sublime-text-3/Packages/User
macOS (Click on the Finder's 'Go' menu and hold down Option to open...)
~/Library/Application Support/Sublime Text 3/Packages/User
The menu should now be visible
If you get an error message that says "file not found" and "subprocess.Popen(['platformio' ... "
then you'll need to add platformio to your path.
macOS
sudo nano /etc/paths
add these to the bottom
/Users/bob/.platformio
/Users/bob/.platformio/penv/bin

View File

@ -1,66 +0,0 @@
[
{
"caption": "Auto Build",
"children": [
{
"caption": "PIO Build",
"command": "webdevshell",
"args": {
"command": "python buildroot/share/vscode/auto_build.py build"
}
},
{
"caption": "PIO Clean",
"command": "webdevshell",
"args": {
"command": "python buildroot/share/vscode/auto_build.py clean"
}
},
{
"caption": "PIO Upload",
"command": "webdevshell",
"args": {
"command": "python buildroot/share/vscode/auto_build.py upload"
}
},
{
"caption": "PIO Upload (traceback)",
"command": "webdevshell",
"args": {
"command": "python buildroot/share/vscode/auto_build.py traceback"
}
},
{
"caption": "PIO Upload using Programmer",
"command": "webdevshell",
"args": {
"command": "python buildroot/share/vscode/auto_build.py program"
}
},
{
"caption": "PIO Test",
"command": "webdevshell",
"args": {
"command": "python buildroot/share/vscode/auto_build.py test"
}
},
{
"caption": "PIO Debug",
"command": "webdevshell",
"args": {
"command": "python buildroot/share/vscode/auto_build.py debug"
}
},
{
"caption": "PIO Remote",
"command": "webdevshell",
"args": {
"command": "python buildroot/share/vscode/auto_build.py remote"
}
}
],
"id": "AutoBuild",
"mnemonic": "A"
}
]

File diff suppressed because it is too large Load Diff

View File

@ -1,143 +0,0 @@
#!/usr/bin/env python
#
# Builds custom upload command
# 1) Run platformio as a subprocess to find a COM port
# 2) Build the upload command
# 3) Exit and let upload tool do the work
#
# This script runs between completion of the library/dependencies installation and compilation.
#
# Will continue on if a COM port isn't found so that the compilation can be done.
#
from __future__ import print_function
from __future__ import division
import subprocess, os, platform
from SCons.Script import DefaultEnvironment
current_OS = platform.system()
env = DefaultEnvironment()
build_type = os.environ.get("BUILD_TYPE", 'Not Set')
if not(build_type == 'upload' or build_type == 'traceback' or build_type == 'Not Set') :
env.Replace(UPLOAD_PROTOCOL = 'teensy-gui') # run normal Teensy2 scripts
else:
com_first = ''
com_last = ''
com_CDC = ''
description_first = ''
description_last = ''
description_CDC = ''
#
# grab the first com port that pops up unless we find one we know for sure
# is a CDC device
#
def get_com_port(com_search_text, descr_search_text, start):
global com_first
global com_last
global com_CDC
global description_first
global description_last
global description_CDC
print('\nLooking for Serial Port\n')
# stream output from subprocess and split it into lines
pio_subprocess = subprocess.Popen(['platformio', 'device', 'list'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
looking_for_description = False
for line in iter(pio_subprocess.stdout.readline, ''):
if 0 <= line.find(com_search_text):
looking_for_description = True
com_last = line.replace('\n', '')
if com_first == '':
com_first = com_last
if 0 <= line.find(descr_search_text) and looking_for_description:
looking_for_description = False
description_last = line[ start : ]
if description_first == '':
description_first = description_last
if 0 <= description_last.find('CDC'):
com_CDC = com_last
description_CDC = description_last
if com_CDC == '' and com_first != '':
com_CDC = com_first
description_CDC = description_first
elif com_CDC == '':
com_CDC = 'COM_PORT_NOT_FOUND'
while 0 <= com_CDC.find('\n'):
com_CDC = com_CDC.replace('\n', '')
while 0 <= com_CDC.find('\r'):
com_CDC = com_CDC.replace('\r', '')
if com_CDC == 'COM_PORT_NOT_FOUND':
print(com_CDC, '\n')
else:
print('FOUND: ', com_CDC)
print('DESCRIPTION: ', description_CDC, '\n')
if current_OS == 'Windows':
get_com_port('COM', 'Hardware ID:', 13)
# avrdude_conf_path = env.get("PIOHOME_DIR") + '\\packages\\toolchain-atmelavr\\etc\\avrdude.conf'
avrdude_conf_path = 'buildroot\\share\\vscode\\avrdude.conf'
avrdude_exe_path = 'buildroot\\share\\vscode\\avrdude_5.10.exe'
# source_path = env.get("PROJECTBUILD_DIR") + '\\' + env.get("PIOENV") + '\\firmware.hex'
source_path = '.pio\\build\\' + env.get("PIOENV") + '\\firmware.hex'
upload_string = avrdude_exe_path + ' -p usb1286 -c avr109 -P ' + com_CDC + ' -U flash:w:' + source_path + ':i'
if current_OS == 'Darwin': # MAC
get_com_port('usbmodem', 'Description:', 13)
# avrdude_conf_path = env.get("PIOHOME_DIR") + '/packages/toolchain-atmelavr/etc/avrdude.conf'
avrdude_conf_path = 'buildroot/share/vscode/avrdude_macOS.conf'
avrdude_exe_path = 'buildroot/share/vscode/avrdude_5.10_macOS'
# source_path = env.get("PROJECTBUILD_DIR") + '/' + env.get("PIOENV") + '/firmware.hex'
source_path = '.pio/build/' + env.get("PIOENV") + '/firmware.hex'
# upload_string = 'avrdude -p usb1286 -c avr109 -P ' + com_CDC + ' -U flash:w:' + source_path + ':i'
upload_string = avrdude_exe_path + ' -p usb1286 -c avr109 -P ' + com_CDC + ' -C ' + avrdude_conf_path + ' -U flash:w:' + source_path + ':i'
print('upload_string: ', upload_string)
if current_OS == 'Linux':
get_com_port('/dev/tty', 'Description:', 13)
# avrdude_conf_path = env.get("PIOHOME_DIR") + '/packages/toolchain-atmelavr/etc/avrdude.conf'
avrdude_conf_path = 'buildroot/share/vscode/avrdude_linux.conf'
avrdude_exe_path = 'buildroot/share/vscode/avrdude_5.10_linux'
# source_path = env.get("PROJECTBUILD_DIR") + '/' + env.get("PIOENV") + '/firmware.hex'
source_path = '.pio/build/' + env.get("PIOENV") + '/firmware.hex'
# upload_string = 'avrdude -p usb1286 -c avr109 -P ' + com_CDC + ' -U flash:w:' + source_path + ':i'
upload_string = avrdude_exe_path + ' -p usb1286 -c avr109 -P ' + com_CDC + ' -C ' + avrdude_conf_path + ' -U flash:w:' + source_path + ':i'
env.Replace(
UPLOADCMD = upload_string,
MAXIMUM_RAM_SIZE = 8192,
MAXIMUM_SIZE = 130048
)

View File

@ -1,41 +0,0 @@
#
# Builds custom upload command
# 1) Run platformio as a subprocess to find a COM port
# 2) Build the upload command
# 3) Exit and let upload tool do the work
#
# This script runs between completion of the library/dependencies installation and compilation.
#
# Will continue on if a COM port isn't found so that the compilation can be done.
#
import os, platform
from SCons.Script import DefaultEnvironment
current_OS = platform.system()
env = DefaultEnvironment()
build_type = os.environ.get("BUILD_TYPE", 'Not Set')
if not(build_type == 'upload' or build_type == 'traceback' or build_type == 'Not Set') :
env.Replace(UPLOAD_PROTOCOL = 'teensy-gui') # run normal Teensy2 scripts
else:
if current_OS == 'Windows':
avrdude_conf_path = env.get("PIOHOME_DIR") + '\\packages\\toolchain-atmelavr\\etc\\avrdude.conf'
source_path = env.get("PROJECTBUILD_DIR") + '\\' + env.get("PIOENV") + '\\firmware.hex'
upload_string = 'avrdude -p usb1286 -c flip1 -C ' + avrdude_conf_path + ' -U flash:w:' + source_path + ':i'
else:
source_path = env.get("PROJECTBUILD_DIR") + '/' + env.get("PIOENV") + '/firmware.hex'
upload_string = 'avrdude -p usb1286 -c flip1 -U flash:w:' + source_path + ':i'
env.Replace(
UPLOADCMD = upload_string,
MAXIMUM_RAM_SIZE = 8192,
MAXIMUM_SIZE = 130048
)

View File

@ -20,7 +20,7 @@ MARLIN_TEST_BUILD = build_src_filter=+<src/tests>
POSTMORTEM_DEBUGGING = build_src_filter=+<src/HAL/shared/cpu_exception> +<src/HAL/shared/backtrace> POSTMORTEM_DEBUGGING = build_src_filter=+<src/HAL/shared/cpu_exception> +<src/HAL/shared/backtrace>
build_flags=-funwind-tables build_flags=-funwind-tables
MKS_WIFI_MODULE = QRCode=https://github.com/makerbase-mks/QRCode/archive/261c5a696a.zip MKS_WIFI_MODULE = QRCode=https://github.com/makerbase-mks/QRCode/archive/261c5a696a.zip
HAS_TRINAMIC_CONFIG = TMCStepper@~0.7.3 HAS_TRINAMIC_CONFIG = TMCStepper=https://github.com/MarlinFirmware/TMCStepper/archive/marlin-2.1.3.x.zip
build_src_filter=+<src/module/stepper/trinamic.cpp> +<src/gcode/feature/trinamic/M122.cpp> +<src/gcode/feature/trinamic/M906.cpp> +<src/gcode/feature/trinamic/M911-M914.cpp> +<src/gcode/feature/trinamic/M919.cpp> build_src_filter=+<src/module/stepper/trinamic.cpp> +<src/gcode/feature/trinamic/M122.cpp> +<src/gcode/feature/trinamic/M906.cpp> +<src/gcode/feature/trinamic/M911-M914.cpp> +<src/gcode/feature/trinamic/M919.cpp>
HAS_T(RINAMIC_CONFIG|MC_SPI) = build_src_filter=+<src/feature/tmc_util.cpp> HAS_T(RINAMIC_CONFIG|MC_SPI) = build_src_filter=+<src/feature/tmc_util.cpp>
SR_LCD_3W_NL = SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/6f53c19a8a.zip SR_LCD_3W_NL = SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/6f53c19a8a.zip

View File

@ -1,357 +0,0 @@
{
"patterns": {
"P1": {
"expression": "(path):(line)"
},
"P2": {
"expression": "(path)\\s+(line)",
"path": "(?:\\/[\\w\\.\\-]+)+"
}
},
"commands": [
{
"namespace": "process-palette",
"action": "PIO Build",
"command": "python buildroot/share/vscode/auto_build.py build",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": true,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": "",
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
},
{
"namespace": "process-palette",
"action": "PIO Clean",
"command": "python buildroot/share/vscode/auto_build.py clean",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": false,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": null,
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
},
{
"namespace": "process-palette",
"action": "PIO Upload",
"command": "python buildroot/share/vscode/auto_build.py upload",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": false,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": null,
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
},
{
"namespace": "process-palette",
"action": "PIO Upload (traceback)",
"command": "python buildroot/share/vscode/auto_build.py traceback",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": false,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": null,
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
},
{
"namespace": "process-palette",
"action": "PIO Upload using Programmer",
"command": "python buildroot/share/vscode/auto_build.py program",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": false,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": null,
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
},
{
"namespace": "process-palette",
"action": "PIO Test",
"command": "python buildroot/share/vscode/auto_build.py test",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": false,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": null,
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
},
{
"namespace": "process-palette",
"action": "PIO Debug",
"command": "python buildroot/share/vscode/auto_build.py debug",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": false,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": null,
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
},
{
"namespace": "process-palette",
"action": "PIO Remote",
"command": "python buildroot/share/vscode/auto_build.py remote",
"arguments": [],
"cwd": "{projectPath}",
"inputDialogs": [],
"env": {},
"keystroke": null,
"stream": true,
"outputTarget": "panel",
"outputBufferSize": 80000,
"maxCompleted": 3,
"autoShowOutput": true,
"autoHideOutput": false,
"scrollLockEnabled": false,
"singular": false,
"promptToSave": true,
"saveOption": "none",
"patterns": [
"default"
],
"successOutput": "{stdout}",
"errorOutput": "{stdout}\n{stderr}",
"fatalOutput": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"startMessage": null,
"successMessage": "Executed : {fullCommand}",
"errorMessage": "Executed : {fullCommand}\nReturned with code {exitStatus}\n{stderr}",
"fatalMessage": "Failed to execute : {fullCommand}\n{stdout}\n{stderr}",
"menus": [
"Auto Build"
],
"startScript": null,
"successScript": null,
"errorScript": null,
"scriptOnStart": false,
"scriptOnSuccess": false,
"scriptOnError": false,
"notifyOnStart": false,
"notifyOnSuccess": true,
"notifyOnError": true,
"input": null
}
]
}