From f5df642eb58b0bb203ce918d6d8d90ddddd41be6 Mon Sep 17 00:00:00 2001 From: "D.R.racer" Date: Mon, 19 Jul 2021 12:33:40 +0200 Subject: [PATCH] Improve error codes - Distinguish among FINDA on/off failuje - The same applies to newly introduced Filament sensor errors - Add TMC init error - Add a communication error ID - to be used on the printer --- src/logic/error_codes.h | 13 +++++++++++-- src/logic/load_filament.cpp | 2 +- src/logic/unload_filament.cpp | 2 +- .../unit/logic/load_filament/test_load_filament.cpp | 10 +++++----- .../logic/unload_filament/test_unload_filament.cpp | 10 +++++----- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/logic/error_codes.h b/src/logic/error_codes.h index 3bdee56..c7978c1 100644 --- a/src/logic/error_codes.h +++ b/src/logic/error_codes.h @@ -9,8 +9,17 @@ enum class ErrorCode : int_fast8_t { OK, ///< the operation finished OK /// Unload Filament related error codes - FINDA_DIDNT_TRIGGER = -1, ///< FINDA didn't trigger while unloading filament - either there is something blocking the metal ball or a cable is broken/disconnected - UNLOAD_ERROR2 = -2, + FINDA_DIDNT_SWITCH_ON = -1, ///< FINDA didn't switch on while loading filament - either there is something blocking the metal ball or a cable is broken/disconnected + FINDA_DIDNT_SWITCH_OFF = -2, ///< FINDA didn't switch off while unloading filament + + FSENSOR_DIDNT_SWITCH_ON = -3, ///< Filament sensor didn't switch on while performing LoadFilament + FSENSOR_DIDNT_SWITCH_OFF = -4, ///< Filament sensor didn't switch off while performing UnloadFilament + + FILAMENT_ALREADY_LOADED = -5, ///< cannot perform operation LoadFilament or move the selector as the filament is already loaded + + TMC_INIT_ERROR = -6, ///< TMC driver init error - the MMU cannot move one motor due to a HW problem + + MMU_NOT_RESPONDING = -126, ///< internal error of the printer - communication with the MMU is not working INTERNAL = -127, ///< internal runtime error (software) }; diff --git a/src/logic/load_filament.cpp b/src/logic/load_filament.cpp index 121bde9..30bcddf 100644 --- a/src/logic/load_filament.cpp +++ b/src/logic/load_filament.cpp @@ -43,7 +43,7 @@ bool LoadFilament::Step() { if (feed.State() == FeedToFinda::Failed) { // @@TODO - try to repeat 6x - push/pull sequence - probably something to put into feed_to_finda as an option state = ProgressCode::ERR1DisengagingIdler; - error = ErrorCode::FINDA_DIDNT_TRIGGER; + error = ErrorCode::FINDA_DIDNT_SWITCH_ON; mi::idler.Disengage(); ml::leds.SetMode(mg::globals.ActiveSlot(), ml::Color::green, ml::Mode::off); ml::leds.SetMode(mg::globals.ActiveSlot(), ml::Color::red, ml::Mode::blink0); // signal loading error diff --git a/src/logic/unload_filament.cpp b/src/logic/unload_filament.cpp index 3e32394..8072d8f 100644 --- a/src/logic/unload_filament.cpp +++ b/src/logic/unload_filament.cpp @@ -36,7 +36,7 @@ bool UnloadFilament::Step() { if (unl.State() == UnloadToFinda::Failed) { // couldn't unload to FINDA, report error and wait for user to resolve it state = ProgressCode::ERR1DisengagingIdler; - error = ErrorCode::FINDA_DIDNT_TRIGGER; + error = ErrorCode::FINDA_DIDNT_SWITCH_OFF; ml::leds.SetMode(mg::globals.ActiveSlot(), ml::red, ml::blink0); ml::leds.SetMode(mg::globals.ActiveSlot(), ml::green, ml::off); } else { diff --git a/tests/unit/logic/load_filament/test_load_filament.cpp b/tests/unit/logic/load_filament/test_load_filament.cpp index 36694d7..08091d5 100644 --- a/tests/unit/logic/load_filament/test_load_filament.cpp +++ b/tests/unit/logic/load_filament/test_load_filament.cpp @@ -96,11 +96,11 @@ void FailedLoadToFinda(uint8_t slot, logic::LoadFilament &lf) { // Stage 2 - feeding to finda // we'll assume the finda is defective here and does not trigger REQUIRE(WhileTopState(lf, ProgressCode::FeedingToFinda, 5000)); - REQUIRE(VerifyState(lf, false, slot, slot, false, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_TRIGGER, ProgressCode::ERR1DisengagingIdler)); + REQUIRE(VerifyState(lf, false, slot, slot, false, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_SWITCH_ON, ProgressCode::ERR1DisengagingIdler)); // Stage 3 - disengaging idler in error mode REQUIRE(WhileTopState(lf, ProgressCode::ERR1DisengagingIdler, 5000)); - REQUIRE(VerifyState(lf, false, mi::Idler::IdleSlotIndex(), slot, false, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_TRIGGER, ProgressCode::ERR1WaitingForUser)); + REQUIRE(VerifyState(lf, false, mi::Idler::IdleSlotIndex(), slot, false, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_SWITCH_ON, ProgressCode::ERR1WaitingForUser)); } void FailedLoadToFindaResolveHelp(uint8_t slot, logic::LoadFilament &lf) { @@ -119,12 +119,12 @@ void FailedLoadToFindaResolveHelp(uint8_t slot, logic::LoadFilament &lf) { lf.Step(); } - REQUIRE(VerifyState(lf, false, mi::Idler::IdleSlotIndex(), slot, false, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_TRIGGER, ProgressCode::ERR1EngagingIdler)); + REQUIRE(VerifyState(lf, false, mi::Idler::IdleSlotIndex(), slot, false, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_SWITCH_ON, ProgressCode::ERR1EngagingIdler)); // Stage 4 - engage the idler REQUIRE(WhileTopState(lf, ProgressCode::ERR1EngagingIdler, 5000)); - REQUIRE(VerifyState(lf, false, slot, slot, false, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_TRIGGER, ProgressCode::ERR1HelpingFilament)); + REQUIRE(VerifyState(lf, false, slot, slot, false, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_SWITCH_ON, ProgressCode::ERR1HelpingFilament)); } void FailedLoadToFindaResolveHelpFindaTriggered(uint8_t slot, logic::LoadFilament &lf) { @@ -145,7 +145,7 @@ void FailedLoadToFindaResolveHelpFindaDidntTrigger(uint8_t slot, logic::LoadFila // Stage 5 - move the pulley a bit - no FINDA change REQUIRE(WhileTopState(lf, ProgressCode::ERR1HelpingFilament, 5000)); - REQUIRE(VerifyState(lf, false, slot, slot, false, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_TRIGGER, ProgressCode::ERR1DisengagingIdler)); + REQUIRE(VerifyState(lf, false, slot, slot, false, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_SWITCH_ON, ProgressCode::ERR1DisengagingIdler)); } TEST_CASE("load_filament::failed_load_to_finda_0-4_resolve_help_second_ok", "[load_filament]") { diff --git a/tests/unit/logic/unload_filament/test_unload_filament.cpp b/tests/unit/logic/unload_filament/test_unload_filament.cpp index 8b38fa9..24da0be 100644 --- a/tests/unit/logic/unload_filament/test_unload_filament.cpp +++ b/tests/unit/logic/unload_filament/test_unload_filament.cpp @@ -158,7 +158,7 @@ void FindaDidntTriggerCommonSetup(uint8_t slot, logic::UnloadFilament &uf) { // no change in selector's position // FINDA still on // red LED should blink, green LED should be off - REQUIRE(VerifyState(uf, true, slot, slot, true, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_TRIGGER, ProgressCode::ERR1DisengagingIdler)); + REQUIRE(VerifyState(uf, true, slot, slot, true, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_SWITCH_OFF, ProgressCode::ERR1DisengagingIdler)); // Stage 2 - idler should get disengaged REQUIRE(WhileTopState(uf, ProgressCode::ERR1DisengagingIdler, 5000)); @@ -169,7 +169,7 @@ void FindaDidntTriggerCommonSetup(uint8_t slot, logic::UnloadFilament &uf) { // FINDA still on // red LED should blink // green LED should be off - REQUIRE(VerifyState(uf, true, mi::Idler::IdleSlotIndex(), slot, true, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_TRIGGER, ProgressCode::ERR1WaitingForUser)); + REQUIRE(VerifyState(uf, true, mi::Idler::IdleSlotIndex(), slot, true, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_SWITCH_OFF, ProgressCode::ERR1WaitingForUser)); } void FindaDidntTriggerResolveHelp(uint8_t slot, logic::UnloadFilament &uf) { @@ -194,7 +194,7 @@ void FindaDidntTriggerResolveHelp(uint8_t slot, logic::UnloadFilament &uf) { // no change in selector's position // FINDA still on // red LED should blink, green LED should be off - REQUIRE(VerifyState(uf, true, mi::Idler::IdleSlotIndex(), slot, true, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_TRIGGER, ProgressCode::ERR1EngagingIdler)); + REQUIRE(VerifyState(uf, true, mi::Idler::IdleSlotIndex(), slot, true, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_SWITCH_OFF, ProgressCode::ERR1EngagingIdler)); // Stage 4 - engage the idler REQUIRE(WhileTopState(uf, ProgressCode::ERR1EngagingIdler, 5000)); @@ -204,7 +204,7 @@ void FindaDidntTriggerResolveHelp(uint8_t slot, logic::UnloadFilament &uf) { // no change in selector's position // FINDA still on // red LED should blink, green LED should be off - REQUIRE(VerifyState(uf, true, slot, slot, true, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_TRIGGER, ProgressCode::ERR1HelpingFilament)); + REQUIRE(VerifyState(uf, true, slot, slot, true, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_SWITCH_OFF, ProgressCode::ERR1HelpingFilament)); } void FindaDidntTriggerResolveHelpFindaTriggered(uint8_t slot, logic::UnloadFilament &uf) { @@ -235,7 +235,7 @@ void FindaDidntTriggerResolveHelpFindaDidntTrigger(uint8_t slot, logic::UnloadFi // no change in selector's position // FINDA still pressed // red LED should blink, green LED should be off - REQUIRE(VerifyState(uf, true, slot, slot, true, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_TRIGGER, ProgressCode::ERR1DisengagingIdler)); + REQUIRE(VerifyState(uf, true, slot, slot, true, ml::off, ml::blink0, ErrorCode::FINDA_DIDNT_SWITCH_OFF, ProgressCode::ERR1DisengagingIdler)); } TEST_CASE("unload_filament::finda_didnt_trigger_resolve_help_second_ok", "[unload_filament]") {