Emit Disable Power Loss Recovery (#11616)

* Emit Disable Power Loss Recovery

Now only works if it's enabled but the goal it's to force disable it.
With this change it will always emit the command for BBL or Marlin 2.

Co-Authored-By: Michael Rook <54159303+michaelr0@users.noreply.github.com>

* Refactor power loss recovery G-code comments

* Return empty power loss recovery when no compatible printer

* Update power loss recovery comments

Update label and tooltip for power loss recovery

* Add enum for power loss recovery mode

Refactored power loss recovery configuration to use a new PowerLossRecoveryMode enum instead of a boolean. Updated GCodeWriter and related logic to handle the new enum, allowing for 'printer_configuration', 'enable', and 'disable' options. Updated config handling, legacy value conversion, and default values accordingly.

* Update PrintConfig.cpp

---------

Co-authored-by: Michael Rook <54159303+michaelr0@users.noreply.github.com>
Co-authored-by: SoftFever <softfeverever@gmail.com>
This commit is contained in:
Ian Bassi
2025-12-30 13:16:47 -03:00
committed by GitHub
parent f322756543
commit 70b5b5748b
6 changed files with 60 additions and 25 deletions

View File

@@ -3084,10 +3084,11 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
m_sorted_layer_filaments.emplace_back(lt.extruders);
}
// Orca: finish tracking power lost recovery
// Orca: disable power loss recovery if it was enabled earlier
{
if (m_second_layer_things_done && print.config().enable_power_loss_recovery.value == true) {
file.write(m_writer.enable_power_loss_recovery(false));
const auto plr_mode = print.config().enable_power_loss_recovery.value;
if (m_second_layer_things_done && plr_mode == PowerLossRecoveryMode::Enable) {
file.write(m_writer.enable_power_loss_recovery(PowerLossRecoveryMode::Disable));
}
}
++ finished_objects;
@@ -3165,9 +3166,9 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
m_sorted_layer_filaments.emplace_back(lt.extruders);
}
// Orca: finish tracking power lost recovery
if (m_second_layer_things_done && print.config().enable_power_loss_recovery.value == true) {
file.write(m_writer.enable_power_loss_recovery(false));
// Orca: disable power loss recovery
if (m_second_layer_things_done && print.config().enable_power_loss_recovery.value == PowerLossRecoveryMode::Enable) {
file.write(m_writer.enable_power_loss_recovery(PowerLossRecoveryMode::Disable));
}
if (m_wipe_tower)
// Purge the extruder, pull out the active filament.
@@ -4381,10 +4382,9 @@ LayerResult GCode::process_layer(
}
if (!first_layer && !m_second_layer_things_done) {
// Orca: start tracking power lost recovery
if (print.config().enable_power_loss_recovery.value == true) {
gcode += m_writer.enable_power_loss_recovery(true);
}
// Orca: set power loss recovery
const auto plr_mode = print.config().enable_power_loss_recovery.value;
gcode += m_writer.enable_power_loss_recovery(plr_mode);
if (print.is_BBL_printer()) {
// BBS: open first layer inspection at second layer