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:
commit
4831ff8050
@ -1771,17 +1771,17 @@
|
||||
// @section stepper drivers
|
||||
|
||||
// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
|
||||
// :{ 0:'Low', 1:'High' }
|
||||
#define X_ENABLE_ON 0
|
||||
#define Y_ENABLE_ON 0
|
||||
#define Z_ENABLE_ON 0
|
||||
#define E_ENABLE_ON 0 // For all extruders
|
||||
//#define I_ENABLE_ON 0
|
||||
//#define J_ENABLE_ON 0
|
||||
//#define K_ENABLE_ON 0
|
||||
//#define U_ENABLE_ON 0
|
||||
//#define V_ENABLE_ON 0
|
||||
//#define W_ENABLE_ON 0
|
||||
// :['LOW', 'HIGH']
|
||||
#define X_ENABLE_ON LOW
|
||||
#define Y_ENABLE_ON LOW
|
||||
#define Z_ENABLE_ON LOW
|
||||
#define E_ENABLE_ON LOW // For all extruders
|
||||
//#define I_ENABLE_ON LOW
|
||||
//#define J_ENABLE_ON LOW
|
||||
//#define K_ENABLE_ON LOW
|
||||
//#define U_ENABLE_ON LOW
|
||||
//#define V_ENABLE_ON LOW
|
||||
//#define W_ENABLE_ON LOW
|
||||
|
||||
// Disable axis steppers immediately when they're not being stepped.
|
||||
// WARNING: When motors turn off there is a chance of losing position accuracy!
|
||||
|
@ -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-11-04"
|
||||
//#define STRING_DISTRIBUTION_DATE "2024-11-21"
|
||||
|
||||
/**
|
||||
* The protocol for communication to the host. Protocol indicates communication
|
||||
|
@ -291,7 +291,7 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
|
||||
uint32_t *p1 = (uint32_t*)addrflash;
|
||||
uint32_t *p2 = (uint32_t*)data;
|
||||
int count = 0;
|
||||
for (i =0; i<PageSize >> 2; i++) {
|
||||
for (i = 0; i < PageSize >> 2; i++) {
|
||||
if (p1[i] != p2[i]) {
|
||||
uint32_t delta = p1[i] ^ p2[i];
|
||||
while (delta) {
|
||||
|
@ -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);
|
||||
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;
|
||||
}
|
||||
|
||||
bool IS_ANALOG(const pin_t Ard_num) {
|
||||
bool isAnalogPin(const pin_t Ard_num) {
|
||||
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;
|
||||
}
|
||||
|
||||
void print_port(const pin_t Ard_num) {
|
||||
void printPinPort(const pin_t Ard_num) {
|
||||
SERIAL_ECHOPGM("Pin: ");
|
||||
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;
|
||||
}
|
||||
|
||||
void pwm_details(const pin_t Ard_num) {
|
||||
void printPinPWM(const pin_t Ard_num) {
|
||||
if (PWM_PIN(Ard_num)) {
|
||||
}
|
||||
}
|
||||
|
@ -188,3 +188,16 @@
|
||||
|| HAS_DRIVER(TMC5130_STANDALONE) || HAS_DRIVER(TMC5160_STANDALONE)
|
||||
#define HAS_DIAG_PINS 1
|
||||
#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)
|
||||
|
@ -99,7 +99,7 @@ PrintJobRecovery recovery;
|
||||
/**
|
||||
* Clear the recovery info
|
||||
*/
|
||||
void PrintJobRecovery::init() { memset(&info, 0, sizeof(info)); }
|
||||
void PrintJobRecovery::init() { info = {}; }
|
||||
|
||||
/**
|
||||
* Enable or disable then call changed()
|
||||
|
@ -77,8 +77,8 @@ class TMCStorage {
|
||||
|
||||
struct {
|
||||
OPTCODE(HAS_STEALTHCHOP, bool stealthChop_enabled = false)
|
||||
OPTCODE(HYBRID_THRESHOLD, uint8_t hybrid_thrs = 0)
|
||||
OPTCODE(USE_SENSORLESS, int16_t homing_thrs = 0)
|
||||
OPTCODE(HYBRID_THRESHOLD, uint16_t hybrid_thrs = 0)
|
||||
OPTCODE(USE_SENSORLESS, int16_t homing_thrs = 0)
|
||||
} stored;
|
||||
};
|
||||
|
||||
|
@ -53,7 +53,7 @@
|
||||
* 41 - Counter-Clockwise M4
|
||||
* 50 - Clockwise M5
|
||||
* 51 - Counter-Clockwise M5
|
||||
**/
|
||||
*/
|
||||
void GcodeSuite::G35() {
|
||||
|
||||
DEBUG_SECTION(log_G35, "G35", DEBUGGING(LEVELING));
|
||||
|
@ -43,40 +43,40 @@
|
||||
* P : Flag to put the probe at the given point
|
||||
*/
|
||||
void GcodeSuite::G42() {
|
||||
if (MOTION_CONDITIONS) {
|
||||
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 (!MOTION_CONDITIONS) return;
|
||||
|
||||
if ((hasI && !WITHIN(ix, 0, GRID_MAX_POINTS_X - 1)) || (hasJ && !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1))) {
|
||||
SERIAL_ECHOLNPGM(STR_ERR_MESH_XY);
|
||||
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;
|
||||
|
||||
// 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
|
||||
if ((hasI && !WITHIN(ix, 0, GRID_MAX_POINTS_X - 1)) || (hasJ && !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1))) {
|
||||
SERIAL_ECHOLNPGM(STR_ERR_MESH_XY);
|
||||
return;
|
||||
}
|
||||
|
||||
// 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
|
||||
|
@ -212,7 +212,28 @@ void GcodeSuite::G34() {
|
||||
// Probe a Z height for each stepper.
|
||||
// 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.
|
||||
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)) {
|
||||
SERIAL_ECHOLNPGM(STR_ERR_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.
|
||||
// Safe_height = lowest distance to bed (= highest measurement) plus highest measured misalignment.
|
||||
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
|
||||
// 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.
|
||||
// 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.
|
||||
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();
|
||||
#endif
|
||||
|
||||
|
@ -75,7 +75,9 @@ void GcodeSuite::G61(int8_t slot/*=-1*/) {
|
||||
|
||||
// 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()) {
|
||||
DEBUG_ECHOLNPGM(STR_RESTORING_POSITION, slot, " (all axes)");
|
||||
// Move to the saved position, all axes except E
|
||||
|
@ -128,6 +128,8 @@
|
||||
* 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.
|
||||
* 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)
|
||||
*
|
||||
* 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)
|
||||
* M282 - Detach servo: "M282 P<index>". (Requires SERVO_DETACH_GCODE)
|
||||
* 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>
|
||||
* 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)
|
||||
@ -246,6 +250,7 @@
|
||||
* 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)
|
||||
* 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)
|
||||
* M501 - Restore parameters from EEPROM. (Requires EEPROM_SETTINGS)
|
||||
* 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)
|
||||
* 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)
|
||||
* 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])
|
||||
* 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)
|
||||
@ -274,15 +279,17 @@
|
||||
* M701 - Load filament (Requires FILAMENT_LOAD_UNLOAD_GCODES)
|
||||
* M702 - Unload filament (Requires FILAMENT_LOAD_UNLOAD_GCODES)
|
||||
*
|
||||
* M704 - Preload to MMU (Requires PRUSA_MMU3)
|
||||
* M705 - Eject filament (Requires PRUSA_MMU3)
|
||||
* M706 - Cut filament (Requires PRUSA_MMU3)
|
||||
* M707 - Read from MMU register (Requires PRUSA_MMU3)
|
||||
* M708 - Write to MMU register (Requires PRUSA_MMU3)
|
||||
* M709 - MMU power & reset (Requires PRUSA_MMU3)
|
||||
*** PRUSA_MMU3 ***
|
||||
* M704 - Preload to MMU
|
||||
* M705 - Eject filament
|
||||
* M706 - Cut filament
|
||||
* M707 - Read from MMU register
|
||||
* M708 - Write to MMU register
|
||||
* M709 - MMU power & reset
|
||||
*
|
||||
* M808 - Set or Goto a Repeat Marker (Requires GCODE_REPEAT_MARKERS)
|
||||
* 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)
|
||||
* M852 - Set skew factors: "M852 [I<xy>] [J<xz>] [K<yz>]". (Requires SKEW_CORRECTION_GCODE, plus SKEW_CORRECTION_FOR_Z for IJ)
|
||||
*
|
||||
|
@ -109,7 +109,7 @@ void GcodeSuite::M115() {
|
||||
SERIAL_ECHO(F("CEDE2A2F-"));
|
||||
for (uint8_t i = 1; i <= 6; i++) {
|
||||
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
|
||||
|
@ -45,25 +45,24 @@
|
||||
* G5: Cubic B-spline
|
||||
*/
|
||||
void GcodeSuite::G5() {
|
||||
if (MOTION_CONDITIONS) {
|
||||
if (!MOTION_CONDITIONS) return;
|
||||
|
||||
#if ENABLED(CNC_WORKSPACE_PLANES)
|
||||
if (workspace_plane != PLANE_XY) {
|
||||
SERIAL_ERROR_MSG(STR_ERR_BAD_PLANE_MODE);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#if ENABLED(CNC_WORKSPACE_PLANES)
|
||||
if (workspace_plane != PLANE_XY) {
|
||||
SERIAL_ERROR_MSG(STR_ERR_BAD_PLANE_MODE);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
get_destination_from_command();
|
||||
get_destination_from_command();
|
||||
|
||||
const xy_pos_t offsets[2] = {
|
||||
{ parser.linearval('I'), parser.linearval('J') },
|
||||
{ parser.linearval('P'), parser.linearval('Q') }
|
||||
};
|
||||
const xy_pos_t offsets[2] = {
|
||||
{ parser.linearval('I'), parser.linearval('J') },
|
||||
{ parser.linearval('P'), parser.linearval('Q') }
|
||||
};
|
||||
|
||||
cubic_b_spline(current_position, destination, offsets, MMS_SCALED(feedrate_mm_s), active_extruder);
|
||||
current_position = destination;
|
||||
}
|
||||
cubic_b_spline(current_position, destination, offsets, MMS_SCALED(feedrate_mm_s), active_extruder);
|
||||
current_position = destination;
|
||||
}
|
||||
|
||||
#endif // BEZIER_CURVE_SUPPORT
|
||||
|
@ -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."
|
||||
#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
|
||||
*/
|
||||
|
@ -42,7 +42,7 @@
|
||||
* version was tagged.
|
||||
*/
|
||||
#ifndef STRING_DISTRIBUTION_DATE
|
||||
#define STRING_DISTRIBUTION_DATE "2024-11-04"
|
||||
#define STRING_DISTRIBUTION_DATE "2024-11-21"
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
#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
|
||||
constexpr xyz_uint_t max_homing_edit_values =
|
||||
constexpr xyz_long_t max_homing_edit_values =
|
||||
#ifdef DEFAULT_MAX_MULTIPLIER
|
||||
default_homing * DEFAULT_MAX_MULTIPLIER
|
||||
#else
|
||||
|
@ -2672,7 +2672,7 @@ void applyMaxAccel() { planner.set_max_acceleration(hmiValue.axis, menuData.valu
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
void applyHomingFR() { updateHomingFR(HMI_value.axis, MenuData.Value); }
|
||||
void applyHomingFR() { updateHomingFR(hmiValue.axis, menuData.value); }
|
||||
#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); }
|
||||
#endif
|
||||
@ -3799,15 +3799,15 @@ void drawMaxAccelMenu() {
|
||||
if (SET_MENU(homingFRMenu, MSG_HOMING_FEEDRATE, 4)) {
|
||||
BACK_ITEM(drawMotionMenu);
|
||||
#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);
|
||||
#endif
|
||||
#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);
|
||||
#endif
|
||||
#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);
|
||||
#endif
|
||||
}
|
||||
|
@ -410,17 +410,17 @@ void menu_advanced_settings();
|
||||
|
||||
#if ENABLED(MENUS_ALLOW_INCH_UNITS)
|
||||
#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)]); \
|
||||
editable.decimal = A##_AXIS_UNIT(homing_feedrate_mm_m.A); \
|
||||
EDIT_ITEM(float5, MSG_HOMING_FEEDRATE_N, &editable.decimal, \
|
||||
A##_AXIS_UNIT(10), A##_AXIS_UNIT(maxfr), []{ \
|
||||
EDIT_ITEM_FAST_N(float5, _AXIS(A), MSG_HOMING_FEEDRATE_N, &editable.decimal, \
|
||||
A##_AXIS_UNIT(minfr), A##_AXIS_UNIT(maxfr), []{ \
|
||||
homing_feedrate_mm_m.A = parser.axis_value_to_mm(_AXIS(A), editable.decimal); \
|
||||
}); \
|
||||
}while(0);
|
||||
#else
|
||||
#define _EDIT_HOMING_FR(A) do{ \
|
||||
EDIT_ITEM(float5, MSG_HOMING_FEEDRATE_N, &homing_feedrate_mm_m.A, 10, MMS_TO_MMM(planner.settings.max_feedrate_mm_s[_AXIS(A)])); \
|
||||
}while(0);
|
||||
#define _EDIT_HOMING_FR(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)]));
|
||||
#endif
|
||||
|
||||
MAIN_AXIS_MAP(_EDIT_HOMING_FR);
|
||||
|
@ -90,7 +90,7 @@ void menu_tmc_current() {
|
||||
|
||||
#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() {
|
||||
START_MENU();
|
||||
|
@ -75,7 +75,7 @@
|
||||
// Servos
|
||||
//
|
||||
#ifndef SERVO0_PIN
|
||||
#define SERVO0_PIN PB0 // BLTouch OUT *
|
||||
#define SERVO0_PIN PB1
|
||||
#endif
|
||||
|
||||
//
|
||||
@ -83,17 +83,17 @@
|
||||
//
|
||||
#define X_STOP_PIN PA5
|
||||
#define Y_STOP_PIN PA6
|
||||
#define Z_STOP_PIN PB0 // BLTOUCH *
|
||||
#define Z_STOP_PIN PB0
|
||||
|
||||
#ifndef Z_MIN_PROBE_PIN
|
||||
#define Z_MIN_PROBE_PIN PB1 // BLTouch IN *
|
||||
#define Z_MIN_PROBE_PIN PB2
|
||||
#endif
|
||||
|
||||
//
|
||||
// Filament Runout Sensor
|
||||
//
|
||||
#ifndef FIL_RUNOUT_PIN
|
||||
#define FIL_RUNOUT_PIN PC15 // "Pulled-high" *
|
||||
#define FIL_RUNOUT_PIN PA4 // "Pulled-high" *
|
||||
#endif
|
||||
|
||||
//
|
||||
|
@ -44,9 +44,9 @@
|
||||
//
|
||||
// Limit Switches
|
||||
//
|
||||
#define X_MIN_PIN 5
|
||||
#define Y_MIN_PIN 2
|
||||
#define Z_MIN_PIN 6
|
||||
#define X_STOP_PIN 5
|
||||
#define Y_STOP_PIN 2
|
||||
#define Z_STOP_PIN 6
|
||||
|
||||
//
|
||||
// Steppers
|
||||
|
@ -151,8 +151,10 @@ fi
|
||||
echo -e "=====================\nProceed with builds...\n====================="
|
||||
shopt -s nullglob
|
||||
|
||||
export PAUSE=1
|
||||
|
||||
# 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
|
||||
CONF=${CONF%/*}
|
||||
@ -198,10 +200,14 @@ find -ds "$CBASE"/config/examples -type d -name 'Configuration.h' -o -name 'Conf
|
||||
fi
|
||||
|
||||
echo
|
||||
((--LIMIT)) || { echo "Specified limit reached" ; PAUSE=1 ; break ; }
|
||||
((--LIMIT)) || { echo "Specified limit reached" ; break ; }
|
||||
echo
|
||||
|
||||
export PAUSE=0
|
||||
|
||||
done
|
||||
|
||||
echo "Exiting"
|
||||
|
||||
# Delete the build state if not paused early
|
||||
[[ $PAUSE ]] || rm -f "$STAT_FILE"
|
||||
((PAUSE)) || rm -f "$STAT_FILE"
|
||||
|
@ -37,6 +37,7 @@ PATH="$HERE:$PATH"
|
||||
. mfutil
|
||||
|
||||
annc() { echo -e "\033[0;32m$1\033[0m" ; }
|
||||
alrt() { echo -e "\033[0;31m$1\033[0m" ; }
|
||||
|
||||
# Get arguments
|
||||
BUILD=./.pio/build
|
||||
@ -153,8 +154,7 @@ ENAME=("-name" "marlin_config.json" \
|
||||
"-o" "-name" "schema.yml")
|
||||
|
||||
# Possible built firmware names (in the build folder)
|
||||
BNAME=("-type" "f" \
|
||||
"-name" 'firmware*.hex' \
|
||||
BNAME=("-name" 'firmware*.hex' \
|
||||
"-o" "-name" "firmware*.bin" \
|
||||
"-o" "-name" "project*.bin" \
|
||||
"-o" "-name" "Robin*.bin" \
|
||||
@ -176,44 +176,54 @@ set +e
|
||||
echo "Building example $CONFIG ..."
|
||||
mftest -s -a -n1 ; ERR=$?
|
||||
|
||||
((ERR)) && echo "Failed" || echo "Success"
|
||||
((ERR)) && alrt "Failed ($ERR)" || annc "Success"
|
||||
|
||||
set -e
|
||||
|
||||
# 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" \;
|
||||
if [[ $ERR -gt 0 ]]; then
|
||||
|
||||
# Error? For --nofail simply log. Otherwise return the error.
|
||||
if [[ -n $NOFAIL ]]; then
|
||||
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
|
||||
|
||||
# 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
|
||||
|
@ -51,6 +51,8 @@ if pioutil.is_pio_build():
|
||||
|
||||
# Make sure the local variant sub-folder exists
|
||||
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()
|
||||
board.update("build.variants_dir", "buildroot/share/PlatformIO/variants");
|
||||
board.update("build.variants_dir", str(variants_dir));
|
||||
|
@ -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
|
@ -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
@ -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
|
||||
)
|
@ -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
|
||||
)
|
@ -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>
|
||||
build_flags=-funwind-tables
|
||||
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>
|
||||
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
|
||||
|
@ -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
|
||||
}
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue
Block a user