Create sprinter firmware option to decouple it from reprap, because of the changes in reprap-firmware.

also add g10 to temperature detection
This commit is contained in:
supermerill 2020-08-20 12:17:50 +02:00
parent cb9eced74c
commit a42bf8602f
8 changed files with 31 additions and 18 deletions

View File

@ -527,7 +527,7 @@ std::string WipeTowerIntegration::prime(GCode &gcodegen)
// Disable linear advance for the wipe tower operations. // Disable linear advance for the wipe tower operations.
//gcode += (gcodegen.config().gcode_flavor == gcfRepRap ? std::string("M572 D0 S0\n") : std::string("M900 K0\n")); //gcode += (gcodegen.config().gcode_flavor == gcfRepRap || m_gcode_flavor == gcfSprinter ? std::string("M572 D0 S0\n") : std::string("M900 K0\n"));
for (const WipeTower::ToolChangeResult& tcr : m_priming) { for (const WipeTower::ToolChangeResult& tcr : m_priming) {
if (!tcr.extrusions.empty()) if (!tcr.extrusions.empty())
@ -1774,10 +1774,10 @@ static bool custom_gcode_sets_temperature(const std::string &gcode, const int mc
// Do not process this piece of G-code by the time estimator, it already knows the values through another sources. // Do not process this piece of G-code by the time estimator, it already knows the values through another sources.
void GCode::print_machine_envelope(FILE *file, Print &print) void GCode::print_machine_envelope(FILE *file, Print &print)
{ {
// gcfRepRap, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlin, gcfKlipper, gcfSailfish, gcfMach3, gcfMachinekit, // gcfRepRap, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlin, gcfKlipper, gcfSailfish, gcfSprinter, gcfMach3, gcfMachinekit,
/// gcfSmoothie, gcfNoExtrusion, gcfLerdge, /// gcfSmoothie, gcfNoExtrusion, gcfLerdge,
if (print.config().print_machine_envelope) { if (print.config().print_machine_envelope) {
if (std::set<uint8_t>{gcfMarlin, gcfLerdge, gcfRepetier, gcfRepRap}.count(print.config().gcode_flavor.value) > 0) if (std::set<uint8_t>{gcfMarlin, gcfLerdge, gcfRepetier, gcfRepRap, gcfSprinter}.count(print.config().gcode_flavor.value) > 0)
fprintf(file, "M201 X%d Y%d Z%d E%d ; sets maximum accelerations, mm/sec^2\n", fprintf(file, "M201 X%d Y%d Z%d E%d ; sets maximum accelerations, mm/sec^2\n",
int(print.config().machine_max_acceleration_x.values.front() + 0.5), int(print.config().machine_max_acceleration_x.values.front() + 0.5),
int(print.config().machine_max_acceleration_y.values.front() + 0.5), int(print.config().machine_max_acceleration_y.values.front() + 0.5),
@ -1787,7 +1787,7 @@ void GCode::print_machine_envelope(FILE *file, Print &print)
fprintf(file, "M202 X%d Y%d ; sets maximum travel speed\n", fprintf(file, "M202 X%d Y%d ; sets maximum travel speed\n",
int(print.config().travel_speed.value), int(print.config().travel_speed.value),
int(print.config().travel_speed.value)); int(print.config().travel_speed.value));
if (std::set<uint8_t>{gcfMarlin, gcfLerdge, gcfRepetier, gcfRepRap, gcfSmoothie}.count(print.config().gcode_flavor.value) > 0) if (std::set<uint8_t>{gcfMarlin, gcfLerdge, gcfRepetier, gcfRepRap, gcfSmoothie, gcfSprinter}.count(print.config().gcode_flavor.value) > 0)
fprintf(file, "M203 X%d Y%d Z%d E%d ; sets maximum feedrates, mm/sec\n", fprintf(file, "M203 X%d Y%d Z%d E%d ; sets maximum feedrates, mm/sec\n",
int(print.config().machine_max_feedrate_x.values.front() + 0.5), int(print.config().machine_max_feedrate_x.values.front() + 0.5),
int(print.config().machine_max_feedrate_y.values.front() + 0.5), int(print.config().machine_max_feedrate_y.values.front() + 0.5),
@ -1798,7 +1798,7 @@ void GCode::print_machine_envelope(FILE *file, Print &print)
int(print.config().machine_max_acceleration_extruding.values.front() + 0.5), int(print.config().machine_max_acceleration_extruding.values.front() + 0.5),
int(print.config().machine_max_acceleration_retracting.values.front() + 0.5), int(print.config().machine_max_acceleration_retracting.values.front() + 0.5),
int(print.config().machine_max_acceleration_travel.values.front() + 0.5)); int(print.config().machine_max_acceleration_travel.values.front() + 0.5));
if (std::set<uint8_t>{gcfRepRap, gcfKlipper}.count(print.config().gcode_flavor.value) > 0) if (std::set<uint8_t>{gcfRepRap, gcfKlipper, gcfSprinter}.count(print.config().gcode_flavor.value) > 0)
fprintf(file, "M204 P%d T%d ; sets acceleration (P, T), mm/sec^2\n", fprintf(file, "M204 P%d T%d ; sets acceleration (P, T), mm/sec^2\n",
int(print.config().machine_max_acceleration_extruding.values.front() + 0.5), int(print.config().machine_max_acceleration_extruding.values.front() + 0.5),
int(print.config().machine_max_acceleration_travel.values.front() + 0.5)); int(print.config().machine_max_acceleration_travel.values.front() + 0.5));
@ -1828,8 +1828,8 @@ void GCode::print_machine_envelope(FILE *file, Print &print)
// Write 1st layer bed temperatures into the G-code. // Write 1st layer bed temperatures into the G-code.
// Only do that if the start G-code does not already contain any M-code controlling an extruder temperature. // Only do that if the start G-code does not already contain any M-code controlling an extruder temperature.
// M140 - Set Extruder Temperature // M140 - Set Bed Temperature
// M190 - Set Extruder Temperature and Wait // M190 - Set Bed Temperature and Wait
void GCode::_print_first_layer_bed_temperature(FILE *file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait) void GCode::_print_first_layer_bed_temperature(FILE *file, Print &print, const std::string &gcode, unsigned int first_printing_extruder_id, bool wait)
{ {
// Initial bed temperature based on the first extruder. // Initial bed temperature based on the first extruder.

View File

@ -421,8 +421,16 @@ void GCodeAnalyzer::_processG1(const GCodeReader::GCodeLine& line)
void GCodeAnalyzer::_processG10(const GCodeReader::GCodeLine& line) void GCodeAnalyzer::_processG10(const GCodeReader::GCodeLine& line)
{ {
//special case for reprap (temp done, TODO: offsets)
float new_temp;
if (m_gcode_flavor == gcfRepRap && line.has_value('S', new_temp))
{
_set_extruder_temp(new_temp);
}
// stores retract move // stores retract move
_store_move(GCodeMove::Retract); else {
_store_move(GCodeMove::Retract);
}
} }
void GCodeAnalyzer::_processG11(const GCodeReader::GCodeLine& line) void GCodeAnalyzer::_processG11(const GCodeReader::GCodeLine& line)

View File

@ -103,7 +103,7 @@ public:
} }
WipeTowerWriter& disable_linear_advance() { WipeTowerWriter& disable_linear_advance() {
if(m_gcode_flavor == gcfRepRap) if(m_gcode_flavor == gcfRepRap || m_gcode_flavor == gcfSprinter)
m_gcode += std::string("M572 D0 S0\n"); m_gcode += std::string("M572 D0 S0\n");
else if(m_gcode_flavor == gcfKlipper) else if(m_gcode_flavor == gcfKlipper)
m_gcode += std::string("SET_PRESSURE_ADVANCE ADVANCE=0\n"); m_gcode += std::string("SET_PRESSURE_ADVANCE ADVANCE=0\n");
@ -407,7 +407,7 @@ public:
{ {
if (m_gcode_flavor == gcfKlipper) if (m_gcode_flavor == gcfKlipper)
return *this; return *this;
if (m_gcode_flavor == gcfRepRap) if (m_gcode_flavor == gcfRepRap || m_gcode_flavor == gcfSprinter)
m_gcode += "M906 E"; m_gcode += "M906 E";
else else
m_gcode += "M907 E"; m_gcode += "M907 E";

View File

@ -687,7 +687,7 @@ namespace Slic3r {
void GCodeTimeEstimator::set_default() void GCodeTimeEstimator::set_default()
{ {
set_units(Millimeters); set_units(Millimeters);
set_dialect(gcfRepRap); set_dialect(gcfSprinter);
set_global_positioning_type(Absolute); set_global_positioning_type(Absolute);
set_e_local_positioning_type(Absolute); set_e_local_positioning_type(Absolute);
@ -1261,7 +1261,8 @@ namespace Slic3r {
(dialect == gcfKlipper) || (dialect == gcfKlipper) ||
(dialect == gcfSmoothie) || (dialect == gcfSmoothie) ||
(dialect == gcfLerdge) || (dialect == gcfLerdge) ||
(dialect == gcfRepRap)) (dialect == gcfRepRap)||
(dialect == gcfSprinter))
{ {
if (line.has_value('S', value)) if (line.has_value('S', value))
add_additional_time(value); add_additional_time(value);
@ -1373,7 +1374,7 @@ namespace Slic3r {
GCodeFlavor dialect = get_dialect(); GCodeFlavor dialect = get_dialect();
// see http://reprap.org/wiki/G-code#M201:_Set_max_printing_acceleration // see http://reprap.org/wiki/G-code#M201:_Set_max_printing_acceleration
float factor = ((dialect != gcfRepRap) && (get_units() == GCodeTimeEstimator::Inches)) ? INCHES_TO_MM : 1.0f; float factor = ((dialect != gcfRepRap) && (dialect != gcfSprinter) && (get_units() == GCodeTimeEstimator::Inches)) ? INCHES_TO_MM : 1.0f;
if (line.has_x()) if (line.has_x())
set_axis_max_acceleration(X, line.x() * factor); set_axis_max_acceleration(X, line.x() * factor);

View File

@ -62,7 +62,7 @@ std::string GCodeWriter::preamble()
gcode << "G90 ; use absolute coordinates\n"; gcode << "G90 ; use absolute coordinates\n";
} }
if (FLAVOR_IS(gcfRepRap) || FLAVOR_IS(gcfMarlin) || FLAVOR_IS(gcfLerdge) || FLAVOR_IS(gcfTeacup) || FLAVOR_IS(gcfRepetier) || FLAVOR_IS(gcfSmoothie) if (FLAVOR_IS(gcfRepRap) || FLAVOR_IS(gcfMarlin) || FLAVOR_IS(gcfLerdge) || FLAVOR_IS(gcfTeacup) || FLAVOR_IS(gcfRepetier) || FLAVOR_IS(gcfSmoothie)
|| FLAVOR_IS(gcfKlipper) || FLAVOR_IS(gcfLerdge)) { || FLAVOR_IS(gcfSprinter) || FLAVOR_IS(gcfKlipper) || FLAVOR_IS(gcfLerdge)) {
if (this->config.use_relative_e_distances) { if (this->config.use_relative_e_distances) {
gcode << "M83 ; use relative distances for extrusion\n"; gcode << "M83 ; use relative distances for extrusion\n";
} else { } else {
@ -88,7 +88,7 @@ std::string GCodeWriter::set_temperature(unsigned int temperature, bool wait, in
return ""; return "";
std::string code, comment; std::string code, comment;
if (wait && FLAVOR_IS_NOT(gcfTeacup) && FLAVOR_IS_NOT(gcfRepRap)) { if (wait && FLAVOR_IS_NOT(gcfTeacup) && FLAVOR_IS_NOT(gcfRepRap) && FLAVOR_IS_NOT(gcfSprinter)) {
code = "M109"; code = "M109";
comment = "set temperature and wait for it to be reached"; comment = "set temperature and wait for it to be reached";
} else { } else {

View File

@ -1336,7 +1336,7 @@ std::pair<PrintBase::PrintValidationError, std::string> Print::validate() const
"and use filaments of the same diameter.") }; "and use filaments of the same diameter.") };
} }
if (m_config.gcode_flavor != gcfRepRap && m_config.gcode_flavor != gcfRepetier && m_config.gcode_flavor != gcfMarlin if (m_config.gcode_flavor != gcfRepRap && m_config.gcode_flavor != gcfSprinter && m_config.gcode_flavor != gcfRepetier && m_config.gcode_flavor != gcfMarlin
&& m_config.gcode_flavor != gcfKlipper) && m_config.gcode_flavor != gcfKlipper)
return { PrintBase::PrintValidationError::pveWrongSettings,L("The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter and Repetier G-code flavors.") }; return { PrintBase::PrintValidationError::pveWrongSettings,L("The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter and Repetier G-code flavors.") };
if (! m_config.use_relative_e_distances) if (! m_config.use_relative_e_distances)

View File

@ -1642,9 +1642,10 @@ void PrintConfigDef::init_fff_params()
def->enum_values.push_back("mach3"); def->enum_values.push_back("mach3");
def->enum_values.push_back("machinekit"); def->enum_values.push_back("machinekit");
def->enum_values.push_back("smoothie"); def->enum_values.push_back("smoothie");
def->enum_values.push_back("sprinter");
def->enum_values.push_back("lerdge"); def->enum_values.push_back("lerdge");
def->enum_values.push_back("no-extrusion"); def->enum_values.push_back("no-extrusion");
def->enum_labels.push_back("RepRap/Sprinter"); def->enum_labels.push_back("RepRap");
def->enum_labels.push_back("Repetier"); def->enum_labels.push_back("Repetier");
def->enum_labels.push_back("Teacup"); def->enum_labels.push_back("Teacup");
def->enum_labels.push_back("MakerWare (MakerBot)"); def->enum_labels.push_back("MakerWare (MakerBot)");
@ -1654,6 +1655,7 @@ void PrintConfigDef::init_fff_params()
def->enum_labels.push_back("Mach3/LinuxCNC"); def->enum_labels.push_back("Mach3/LinuxCNC");
def->enum_labels.push_back("Machinekit"); def->enum_labels.push_back("Machinekit");
def->enum_labels.push_back("Smoothie"); def->enum_labels.push_back("Smoothie");
def->enum_labels.push_back("Sprinter");
def->enum_labels.push_back("Lerdge"); def->enum_labels.push_back("Lerdge");
def->enum_labels.push_back(L("No extrusion")); def->enum_labels.push_back(L("No extrusion"));
def->mode = comAdvanced; def->mode = comAdvanced;
@ -4716,6 +4718,7 @@ std::string FullPrintConfig::validate()
if (this->use_firmware_retraction.value && if (this->use_firmware_retraction.value &&
this->gcode_flavor.value != gcfSmoothie && this->gcode_flavor.value != gcfSmoothie &&
this->gcode_flavor.value != gcfSprinter &&
this->gcode_flavor.value != gcfRepRap && this->gcode_flavor.value != gcfRepRap &&
this->gcode_flavor.value != gcfMarlin && this->gcode_flavor.value != gcfMarlin &&
this->gcode_flavor.value != gcfMachinekit && this->gcode_flavor.value != gcfMachinekit &&

View File

@ -49,7 +49,7 @@ enum WipeAlgo {
enum GCodeFlavor : uint8_t { enum GCodeFlavor : uint8_t {
gcfRepRap, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlin, gcfKlipper, gcfSailfish, gcfMach3, gcfMachinekit, gcfRepRap, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlin, gcfKlipper, gcfSailfish, gcfMach3, gcfMachinekit,
gcfSmoothie, gcfNoExtrusion, gcfLerdge, gcfSmoothie, gcfSprinter, gcfNoExtrusion, gcfLerdge,
}; };
enum PrintHostType { enum PrintHostType {
@ -142,6 +142,7 @@ template<> inline const t_config_enum_values& ConfigOptionEnum<GCodeFlavor>::get
keys_map["klipper"] = gcfKlipper; keys_map["klipper"] = gcfKlipper;
keys_map["sailfish"] = gcfSailfish; keys_map["sailfish"] = gcfSailfish;
keys_map["smoothie"] = gcfSmoothie; keys_map["smoothie"] = gcfSmoothie;
keys_map["sprinter"] = gcfSprinter;
keys_map["mach3"] = gcfMach3; keys_map["mach3"] = gcfMach3;
keys_map["machinekit"] = gcfMachinekit; keys_map["machinekit"] = gcfMachinekit;
keys_map["no-extrusion"] = gcfNoExtrusion; keys_map["no-extrusion"] = gcfNoExtrusion;