🚸 Extend M360 (a Repetier code)
This commit is contained in:
parent
12fdde24d8
commit
5a88a80690
1 changed files with 115 additions and 64 deletions
|
|
@ -22,6 +22,10 @@
|
||||||
|
|
||||||
#include "../../inc/MarlinConfig.h"
|
#include "../../inc/MarlinConfig.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* M360 Report Printer Configuration - Repetier Firmware
|
||||||
|
* See https://github.com/repetier/Repetier-Firmware/blob/master/src/ArduinoAVR/Repetier/Printer.cpp
|
||||||
|
*/
|
||||||
#if ENABLED(REPETIER_GCODE_M360)
|
#if ENABLED(REPETIER_GCODE_M360)
|
||||||
|
|
||||||
#include "../gcode.h"
|
#include "../gcode.h"
|
||||||
|
|
@ -33,74 +37,112 @@
|
||||||
#include "../../module/temperature.h"
|
#include "../../module/temperature.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void config_prefix(PGM_P const name, PGM_P const pref=nullptr, const int8_t ind=-1) {
|
#include <cstddef>
|
||||||
|
|
||||||
|
struct ProgStr {
|
||||||
|
PGM_P ptr;
|
||||||
|
constexpr ProgStr(PGM_P p) : ptr(p) {}
|
||||||
|
ProgStr(FSTR_P f) : ptr(FTOP(f)) {}
|
||||||
|
ProgStr(std::nullptr_t) : ptr(nullptr) {}
|
||||||
|
|
||||||
|
constexpr operator PGM_P() const { return ptr; }
|
||||||
|
constexpr explicit operator bool() const { return ptr != nullptr; }
|
||||||
|
};
|
||||||
|
|
||||||
|
static void config_prefix(ProgStr name, ProgStr pref=nullptr, int8_t ind=-1) {
|
||||||
SERIAL_ECHOPGM("Config:");
|
SERIAL_ECHOPGM("Config:");
|
||||||
if (pref) SERIAL_ECHOPGM_P(pref);
|
if (pref) SERIAL_ECHOPGM_P(static_cast<PGM_P>(pref));
|
||||||
if (ind >= 0) { SERIAL_ECHO(ind); SERIAL_CHAR(':'); }
|
if (ind >= 0) { SERIAL_ECHO(ind); SERIAL_CHAR(':'); }
|
||||||
SERIAL_ECHOPGM_P(name, C(':'));
|
SERIAL_ECHOPGM_P(static_cast<PGM_P>(name), C(':'));
|
||||||
}
|
}
|
||||||
static void config_line(PGM_P const name, const float val, PGM_P const pref=nullptr, const int8_t ind=-1) {
|
|
||||||
|
template<typename T>
|
||||||
|
static void config_line(ProgStr name, const T val, ProgStr pref=nullptr, int8_t ind=-1) {
|
||||||
config_prefix(name, pref, ind);
|
config_prefix(name, pref, ind);
|
||||||
SERIAL_ECHOLN(val);
|
SERIAL_ECHOLN(val);
|
||||||
}
|
}
|
||||||
static void config_line(FSTR_P const name, const float val, FSTR_P const pref=nullptr, const int8_t ind=-1) {
|
|
||||||
config_line(FTOP(name), val, FTOP(pref), ind);
|
template<typename T>
|
||||||
}
|
static void config_line_e(int8_t e, ProgStr name, const T val) {
|
||||||
static void config_line_e(const int8_t e, PGM_P const name, const float val) {
|
|
||||||
config_line(name, val, PSTR("Extr."), e + 1);
|
config_line(name, val, PSTR("Extr."), e + 1);
|
||||||
}
|
}
|
||||||
static void config_line_e(const int8_t e, FSTR_P const name, const float val) {
|
|
||||||
config_line_e(e, FTOP(name), val);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* M360: Report Firmware configuration
|
* M360: Report Firmware configuration
|
||||||
* in RepRapFirmware-compatible format
|
* in RepRapFirmware-compatible format
|
||||||
*/
|
*/
|
||||||
void GcodeSuite::M360() {
|
void GcodeSuite::M360() {
|
||||||
PGMSTR(X_STR, "X");
|
|
||||||
PGMSTR(Y_STR, "Y");
|
|
||||||
PGMSTR(Z_STR, "Z");
|
|
||||||
#if ANY(CLASSIC_JERK, HAS_LINEAR_E_JERK)
|
|
||||||
PGMSTR(JERK_STR, "Jerk");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Basics and Enabled items
|
// Basics and Enabled items
|
||||||
//
|
//
|
||||||
config_line(F("Baudrate"), BAUDRATE);
|
config_line(F("Baudrate"), BAUDRATE);
|
||||||
config_line(F("InputBuffer"), MAX_CMD_SIZE);
|
config_line(F("InputBuffer"), MAX_CMD_SIZE);
|
||||||
config_line(F("PrintlineCache"), BUFSIZE);
|
config_line(F("PrintlineCache"), BUFSIZE);
|
||||||
config_line(F("MixingExtruder"), ENABLED(MIXING_EXTRUDER));
|
config_line(F("MixingExtruder"), bool(ENABLED(MIXING_EXTRUDER)));
|
||||||
config_line(F("SDCard"), ENABLED(HAS_MEDIA));
|
config_line(F("SDCard"), bool(ENABLED(HAS_MEDIA)));
|
||||||
config_line(F("Fan"), ENABLED(HAS_FAN));
|
config_line(F("Fan"), bool(ENABLED(HAS_FAN)));
|
||||||
config_line(F("LCD"), ENABLED(HAS_DISPLAY));
|
config_line(F("LCD"), bool(ENABLED(HAS_DISPLAY)));
|
||||||
config_line(F("SoftwarePowerSwitch"), 1);
|
config_line(F("SoftwarePowerSwitch"), 1);
|
||||||
config_line(F("SupportLocalFilamentchange"), ENABLED(ADVANCED_PAUSE_FEATURE));
|
config_line(F("SupportLocalFilamentchange"), bool(ENABLED(ADVANCED_PAUSE_FEATURE)));
|
||||||
config_line(F("CaseLights"), ENABLED(CASE_LIGHT_ENABLE));
|
config_line(F("CaseLights"), bool(ENABLED(CASE_LIGHT_ENABLE)));
|
||||||
config_line(F("ZProbe"), ENABLED(HAS_BED_PROBE));
|
config_line(F("ZProbe"), bool(ENABLED(HAS_BED_PROBE)));
|
||||||
config_line(F("Autolevel"), ENABLED(HAS_LEVELING));
|
config_line(F("Autolevel"), bool(ENABLED(HAS_LEVELING)));
|
||||||
config_line(F("EEPROM"), ENABLED(EEPROM_SETTINGS));
|
config_line(F("EEPROM"), bool(ENABLED(EEPROM_SETTINGS)));
|
||||||
|
|
||||||
|
//
|
||||||
|
// Axis letters, in PROGMEM
|
||||||
|
//
|
||||||
|
#define _DEFINE_A_STR(Q) PGMSTR(Q##_STR, STR_##Q);
|
||||||
|
MAIN_AXIS_MAP(_DEFINE_A_STR);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Homing Directions
|
// Homing Directions
|
||||||
//
|
//
|
||||||
PGMSTR(H_DIR_STR, "HomeDir");
|
PGMSTR(H_DIR_STR, "HomeDir");
|
||||||
config_line(H_DIR_STR, X_HOME_DIR, X_STR);
|
#if X_HOME_DIR
|
||||||
config_line(H_DIR_STR, Y_HOME_DIR, Y_STR);
|
config_line(H_DIR_STR, X_HOME_DIR, X_STR);
|
||||||
config_line(H_DIR_STR, Z_HOME_DIR, Z_STR);
|
#endif
|
||||||
|
#if Y_HOME_DIR
|
||||||
|
config_line(H_DIR_STR, Y_HOME_DIR, Y_STR);
|
||||||
|
#endif
|
||||||
|
#if Z_HOME_DIR
|
||||||
|
config_line(H_DIR_STR, Z_HOME_DIR, Z_STR);
|
||||||
|
#endif
|
||||||
|
#if I_HOME_DIR
|
||||||
|
config_line(H_DIR_STR, I_HOME_DIR, I_STR);
|
||||||
|
#endif
|
||||||
|
#if J_HOME_DIR
|
||||||
|
config_line(H_DIR_STR, J_HOME_DIR, J_STR);
|
||||||
|
#endif
|
||||||
|
#if K_HOME_DIR
|
||||||
|
config_line(H_DIR_STR, K_HOME_DIR, K_STR);
|
||||||
|
#endif
|
||||||
|
#if U_HOME_DIR
|
||||||
|
config_line(H_DIR_STR, U_HOME_DIR, U_STR);
|
||||||
|
#endif
|
||||||
|
#if V_HOME_DIR
|
||||||
|
config_line(H_DIR_STR, V_HOME_DIR, V_STR);
|
||||||
|
#endif
|
||||||
|
#if W_HOME_DIR
|
||||||
|
config_line(H_DIR_STR, W_HOME_DIR, W_STR);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ANY(CLASSIC_JERK, HAS_LINEAR_E_JERK)
|
||||||
|
PGMSTR(JERK_STR, "Jerk");
|
||||||
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// XYZ Axis Jerk
|
// XYZ Axis Jerk
|
||||||
//
|
//
|
||||||
#if ENABLED(CLASSIC_JERK)
|
#if ENABLED(CLASSIC_JERK)
|
||||||
if (planner.max_jerk.x == planner.max_jerk.y)
|
#define _REPORT_JERK(Q) config_line(Q##_STR, planner.max_jerk.Q, JERK_STR);
|
||||||
config_line(F("XY"), planner.max_jerk.x, FPSTR(JERK_STR));
|
if (TERN0(HAS_Y_AXIS, planner.max_jerk.x == planner.max_jerk.y))
|
||||||
|
config_line(F("XY"), planner.max_jerk.x, JERK_STR);
|
||||||
else {
|
else {
|
||||||
config_line(X_STR, planner.max_jerk.x, JERK_STR);
|
TERN_(HAS_X_AXIS, _REPORT_JERK(X));
|
||||||
config_line(Y_STR, planner.max_jerk.y, JERK_STR);
|
TERN_(HAS_Y_AXIS, _REPORT_JERK(Y));
|
||||||
}
|
}
|
||||||
config_line(Z_STR, planner.max_jerk.z, JERK_STR);
|
TERN_(HAS_Z_AXIS, config_line(Z_STR, planner.max_jerk.z, JERK_STR));
|
||||||
|
SECONDARY_AXIS_MAP(_REPORT_JERK);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
@ -112,53 +154,62 @@ void GcodeSuite::M360() {
|
||||||
PGMSTR(UNRET_STR, "RetractionUndo");
|
PGMSTR(UNRET_STR, "RetractionUndo");
|
||||||
PGMSTR(SPEED_STR, "Speed");
|
PGMSTR(SPEED_STR, "Speed");
|
||||||
// M10 Retract with swap (long) moves
|
// M10 Retract with swap (long) moves
|
||||||
config_line(F("Length"), fwretract.settings.retract_length, FPSTR(RET_STR));
|
config_line(F("Length"), fwretract.settings.retract_length, RET_STR);
|
||||||
|
config_line(F("LongLength"), fwretract.settings.swap_retract_length, RET_STR);
|
||||||
config_line(SPEED_STR, fwretract.settings.retract_feedrate_mm_s, RET_STR);
|
config_line(SPEED_STR, fwretract.settings.retract_feedrate_mm_s, RET_STR);
|
||||||
config_line(F("ZLift"), fwretract.settings.retract_zraise, FPSTR(RET_STR));
|
config_line(F("ZLift"), fwretract.settings.retract_zraise, RET_STR);
|
||||||
config_line(F("LongLength"), fwretract.settings.swap_retract_length, FPSTR(RET_STR));
|
|
||||||
// M11 Recover (undo) with swap (long) moves
|
// M11 Recover (undo) with swap (long) moves
|
||||||
|
config_line(F("ExtraLength"), fwretract.settings.retract_recover_extra, UNRET_STR);
|
||||||
|
config_line(F("ExtraLongLength"), fwretract.settings.swap_retract_recover_extra, UNRET_STR);
|
||||||
config_line(SPEED_STR, fwretract.settings.retract_recover_feedrate_mm_s, UNRET_STR);
|
config_line(SPEED_STR, fwretract.settings.retract_recover_feedrate_mm_s, UNRET_STR);
|
||||||
config_line(F("ExtraLength"), fwretract.settings.retract_recover_extra, FPSTR(UNRET_STR));
|
config_line(F("LongSpeed"), fwretract.settings.swap_retract_recover_feedrate_mm_s, UNRET_STR);
|
||||||
config_line(F("ExtraLongLength"), fwretract.settings.swap_retract_recover_extra, FPSTR(UNRET_STR));
|
|
||||||
config_line(F("LongSpeed"), fwretract.settings.swap_retract_recover_feedrate_mm_s, FPSTR(UNRET_STR));
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// Workspace boundaries
|
// Workspace boundaries
|
||||||
//
|
//
|
||||||
const xyz_pos_t dmin = { X_MIN_POS, Y_MIN_POS, Z_MIN_POS },
|
const xyz_pos_t dmin = NUM_AXIS_ARRAY(X_MIN_POS, Y_MIN_POS, Z_MIN_POS, I_MIN_POS, J_MIN_POS, K_MIN_POS, U_MIN_POS, V_MIN_POS, W_MIN_POS),
|
||||||
dmax = { X_MAX_POS, Y_MAX_POS, Z_MAX_POS };
|
dmax = NUM_AXIS_ARRAY(X_MAX_POS, Y_MAX_POS, Z_MAX_POS, I_MAX_POS, J_MAX_POS, K_MAX_POS, U_MAX_POS, V_MAX_POS, W_MAX_POS);
|
||||||
xyz_pos_t cmin = dmin, cmax = dmax;
|
xyz_pos_t cmin = dmin, cmax = dmax;
|
||||||
apply_motion_limits(cmin);
|
apply_motion_limits(cmin);
|
||||||
apply_motion_limits(cmax);
|
apply_motion_limits(cmax);
|
||||||
const xyz_pos_t wmin = cmin.asLogical(), wmax = cmax.asLogical();
|
const xyz_pos_t wmin = cmin.asLogical(), wmax = cmax.asLogical();
|
||||||
|
|
||||||
PGMSTR(MIN_STR, "Min");
|
PGMSTR(MIN_STR, "Min");
|
||||||
|
#define _REPORT_MIN(Q) config_line(MIN_STR, wmin.Q, Q##_STR);
|
||||||
|
MAIN_AXIS_MAP(_REPORT_MIN);
|
||||||
|
|
||||||
PGMSTR(MAX_STR, "Max");
|
PGMSTR(MAX_STR, "Max");
|
||||||
|
#define _REPORT_MAX(Q) config_line(MAX_STR, wmax.Q, Q##_STR);
|
||||||
|
MAIN_AXIS_MAP(_REPORT_MAX);
|
||||||
|
|
||||||
PGMSTR(SIZE_STR, "Size");
|
PGMSTR(SIZE_STR, "Size");
|
||||||
config_line(MIN_STR, wmin.x, X_STR);
|
#define _REPORT_SIZE(Q) config_line(SIZE_STR, wmax.Q - wmin.Q, Q##_STR);
|
||||||
config_line(MIN_STR, wmin.y, Y_STR);
|
MAIN_AXIS_MAP(_REPORT_SIZE);
|
||||||
config_line(MIN_STR, wmin.z, Z_STR);
|
|
||||||
config_line(MAX_STR, wmax.x, X_STR);
|
//
|
||||||
config_line(MAX_STR, wmax.y, Y_STR);
|
// Axis Steps per mm
|
||||||
config_line(MAX_STR, wmax.z, Z_STR);
|
//
|
||||||
config_line(SIZE_STR, wmax.x - wmin.x, X_STR);
|
PGMSTR(S_MM_STR, "Steps/mm");
|
||||||
config_line(SIZE_STR, wmax.y - wmin.y, Y_STR);
|
#define _REPORT_S_MM(Q) config_line(S_MM_STR, planner.settings.axis_steps_per_mm[_AXIS(Q)], Q##_STR);
|
||||||
config_line(SIZE_STR, wmax.z - wmin.z, Z_STR);
|
MAIN_AXIS_MAP(_REPORT_S_MM);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Print and Travel Acceleration
|
// Print and Travel Acceleration
|
||||||
//
|
//
|
||||||
#define _ACCEL(A,B) _MIN(planner.settings.max_acceleration_mm_per_s2[A##_AXIS], planner.settings.B)
|
#define _ACCEL(Q,B) _MIN(planner.settings.max_acceleration_mm_per_s2[Q##_AXIS], planner.settings.B)
|
||||||
PGMSTR(P_ACC_STR, "PrintAccel");
|
|
||||||
PGMSTR(T_ACC_STR, "TravelAccel");
|
|
||||||
config_line(P_ACC_STR, _ACCEL(X, acceleration), X_STR);
|
|
||||||
config_line(P_ACC_STR, _ACCEL(Y, acceleration), Y_STR);
|
|
||||||
config_line(P_ACC_STR, _ACCEL(Z, acceleration), Z_STR);
|
|
||||||
config_line(T_ACC_STR, _ACCEL(X, travel_acceleration), X_STR);
|
|
||||||
config_line(T_ACC_STR, _ACCEL(Y, travel_acceleration), Y_STR);
|
|
||||||
config_line(T_ACC_STR, _ACCEL(Z, travel_acceleration), Z_STR);
|
|
||||||
|
|
||||||
|
PGMSTR(P_ACC_STR, "PrintAccel");
|
||||||
|
#define _REPORT_P_ACC(Q) config_line(P_ACC_STR, _ACCEL(Q, acceleration), Q##_STR);
|
||||||
|
MAIN_AXIS_MAP(_REPORT_P_ACC);
|
||||||
|
|
||||||
|
PGMSTR(T_ACC_STR, "TravelAccel");
|
||||||
|
#define _REPORT_T_ACC(Q) config_line(T_ACC_STR, _ACCEL(Q, travel_acceleration), Q##_STR);
|
||||||
|
MAIN_AXIS_MAP(_REPORT_T_ACC);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Printer Type
|
||||||
|
//
|
||||||
config_prefix(PSTR("PrinterType"));
|
config_prefix(PSTR("PrinterType"));
|
||||||
SERIAL_ECHOLNPGM(
|
SERIAL_ECHOLNPGM(
|
||||||
TERN_(DELTA, "Delta")
|
TERN_(DELTA, "Delta")
|
||||||
|
|
@ -189,12 +240,12 @@ void GcodeSuite::M360() {
|
||||||
#elif ENABLED(CLASSIC_JERK)
|
#elif ENABLED(CLASSIC_JERK)
|
||||||
config_line_e(e, JERK_STR, planner.max_jerk.e);
|
config_line_e(e, JERK_STR, planner.max_jerk.e);
|
||||||
#endif
|
#endif
|
||||||
config_line_e(e, F("MaxSpeed"), planner.settings.max_feedrate_mm_s[E_AXIS_N(e)]);
|
|
||||||
config_line_e(e, F("Acceleration"), planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(e)]);
|
config_line_e(e, F("Acceleration"), planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(e)]);
|
||||||
|
config_line_e(e, F("MaxSpeed"), planner.settings.max_feedrate_mm_s[E_AXIS_N(e)]);
|
||||||
config_line_e(e, F("Diameter"), TERN(NO_VOLUMETRICS, DEFAULT_NOMINAL_FILAMENT_DIA, planner.filament_size[e]));
|
config_line_e(e, F("Diameter"), TERN(NO_VOLUMETRICS, DEFAULT_NOMINAL_FILAMENT_DIA, planner.filament_size[e]));
|
||||||
config_line_e(e, F("MaxTemp"), thermalManager.hotend_maxtemp[e]);
|
config_line_e(e, F("MaxTemp"), thermalManager.hotend_maxtemp[e]);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif // REPETIER_GCODE_M360
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue