From ef4246dd9aaa8b7ba92796736433de15e5bc5851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gu=C3=B0ni=20M=C3=A1r=20Gilbert?= Date: Wed, 26 Oct 2022 20:39:28 +0000 Subject: [PATCH] Fix issue where firmware panic error code is overwritten If QUEUE_FULL error happened, it would be overwritten as INTERNAL and incorrectly display FW_RUNTIME_ERROR on MK3S. The fix is to add handling for ERRInternal in every StepInner() and forward the error to higher application layer --- src/logic/cut_filament.cpp | 3 +++ src/logic/eject_filament.cpp | 3 +++ src/logic/home.cpp | 3 +++ src/logic/hw_sanity.cpp | 3 +++ src/logic/load_filament.cpp | 3 +++ src/logic/move_selector.cpp | 3 +++ src/logic/tool_change.cpp | 3 +++ src/logic/unload_filament.cpp | 3 +++ 8 files changed, 24 insertions(+) diff --git a/src/logic/cut_filament.cpp b/src/logic/cut_filament.cpp index 59edd92..14449be 100644 --- a/src/logic/cut_filament.cpp +++ b/src/logic/cut_filament.cpp @@ -100,6 +100,9 @@ bool CutFilament::StepInner() { break; case ProgressCode::OK: return true; + case ProgressCode::ERRInternal: + // firmware panic triggered + return true; default: // we got into an unhandled state, better report it state = ProgressCode::ERRInternal; error = ErrorCode::INTERNAL; diff --git a/src/logic/eject_filament.cpp b/src/logic/eject_filament.cpp index 223eacb..bc17818 100644 --- a/src/logic/eject_filament.cpp +++ b/src/logic/eject_filament.cpp @@ -75,6 +75,9 @@ bool EjectFilament::StepInner() { case ProgressCode::OK: dbg_logic_fP(PSTR("FilamentLoadState after Eject %d"), mg::globals.FilamentLoaded()); return true; + case ProgressCode::ERRInternal: + // firmware panic triggered + return true; default: // we got into an unhandled state, better report it state = ProgressCode::ERRInternal; error = ErrorCode::INTERNAL; diff --git a/src/logic/home.cpp b/src/logic/home.cpp index cded6fd..1ee1785 100644 --- a/src/logic/home.cpp +++ b/src/logic/home.cpp @@ -28,6 +28,9 @@ bool Home::StepInner() { break; case ProgressCode::OK: return true; + case ProgressCode::ERRInternal: + // firmware panic triggered + return true; default: // we got into an unhandled state, better report it state = ProgressCode::ERRInternal; error = ErrorCode::INTERNAL; diff --git a/src/logic/hw_sanity.cpp b/src/logic/hw_sanity.cpp index c665f7f..99558d1 100644 --- a/src/logic/hw_sanity.cpp +++ b/src/logic/hw_sanity.cpp @@ -168,6 +168,9 @@ bool HWSanity::StepInner() { } case ProgressCode::OK: return true; + case ProgressCode::ERRInternal: + // firmware panic triggered + return true; default: // we got into an unhandled state, better report it state = ProgressCode::ERRInternal; error = ErrorCode::INTERNAL; diff --git a/src/logic/load_filament.cpp b/src/logic/load_filament.cpp index 831feea..a622b9e 100644 --- a/src/logic/load_filament.cpp +++ b/src/logic/load_filament.cpp @@ -162,6 +162,9 @@ bool LoadFilament::StepInner() { GoToErrDisengagingIdler(ErrorCode::FINDA_DIDNT_SWITCH_ON); } return false; + case ProgressCode::ERRInternal: + // firmware panic triggered + return true; default: // we got into an unhandled state, better report it state = ProgressCode::ERRInternal; error = ErrorCode::INTERNAL; diff --git a/src/logic/move_selector.cpp b/src/logic/move_selector.cpp index a6f687d..1749a37 100644 --- a/src/logic/move_selector.cpp +++ b/src/logic/move_selector.cpp @@ -31,6 +31,9 @@ bool MoveSelector::StepInner() { break; case ProgressCode::OK: return true; + case ProgressCode::ERRInternal: + // firmware panic triggered + return true; default: // we got into an unhandled state, better report it state = ProgressCode::ERRInternal; error = ErrorCode::INTERNAL; diff --git a/src/logic/tool_change.cpp b/src/logic/tool_change.cpp index a599b8e..5f93c6e 100644 --- a/src/logic/tool_change.cpp +++ b/src/logic/tool_change.cpp @@ -179,6 +179,9 @@ bool ToolChange::StepInner() { GoToErrDisengagingIdler(ErrorCode::FSENSOR_DIDNT_SWITCH_ON); } return false; + case ProgressCode::ERRInternal: + // firmware panic triggered + return true; default: // we got into an unhandled state, better report it state = ProgressCode::ERRInternal; error = ErrorCode::INTERNAL; diff --git a/src/logic/unload_filament.cpp b/src/logic/unload_filament.cpp index 086fe9d..1c2a863 100644 --- a/src/logic/unload_filament.cpp +++ b/src/logic/unload_filament.cpp @@ -159,6 +159,9 @@ bool UnloadFilament::StepInner() { break; case ProgressCode::OK: return true; // successfully finished + case ProgressCode::ERRInternal: + // firmware panic triggered + return true; default: // we got into an unhandled state, better report it state = ProgressCode::ERRInternal; error = ErrorCode::INTERNAL;