Browse Source

PFW-1323 Fix MMU error screen doesn't disappear when error resolved on the MMU

Guðni Már Gilbert 3 years ago
parent
commit
d49e858cf7
2 changed files with 23 additions and 3 deletions
  1. 4 1
      Firmware/mmu2.h
  2. 19 2
      Firmware/mmu2_reporting.cpp

+ 4 - 1
Firmware/mmu2.h

@@ -119,7 +119,10 @@ public:
 
     /// @returns current state of FINDA (true=filament present, false=filament not present)
     inline bool FindaDetectsFilament()const { return logic.FindaPressed(); }
-    
+
+    /// @returns Current error code
+    inline ErrorCode MMUCurrentErrorCode() const { return logic.Error(); }
+
     /// @returns the version of the connected MMU FW.
     /// In the future we'll return the trully detected FW version
     Version GetMMUFWVersion()const {

+ 19 - 2
Firmware/mmu2_reporting.cpp

@@ -190,8 +190,9 @@ static uint8_t ReportErrorHookMonitor(uint16_t ec) {
 }
 
 enum class ReportErrorHookStates : uint8_t {
-    RENDER_ERROR_SCREEN = 0,
-    MONITOR_SELECTION = 1,
+    RENDER_ERROR_SCREEN  = 0,
+    MONITOR_SELECTION    = 1,
+    DISMISS_ERROR_SCREEN = 2,
 };
 
 enum ReportErrorHookStates ReportErrorHookState;
@@ -202,6 +203,14 @@ enum ReportErrorHookStates ReportErrorHookState;
  * @param[in] ec Error code
  */
 void ReportErrorHook(uint16_t ec) {
+    if (mmu2.MMUCurrentErrorCode() == ErrorCode::OK)
+    {
+        // If the error code suddenly changes to OK, that means
+        // a button was pushed on the MMU and the LCD should
+        // dismiss the error screen until MMU raises a new error
+        ReportErrorHookState = ReportErrorHookStates::DISMISS_ERROR_SCREEN;
+    }
+
     switch ((uint8_t)ReportErrorHookState)
     {
     case (uint8_t)ReportErrorHookStates::RENDER_ERROR_SCREEN:
@@ -234,6 +243,14 @@ void ReportErrorHook(uint16_t ec) {
         }
         return; // Always return to loop() to let MMU trigger a call to ReportErrorHook again
         break;
+    case (uint8_t)ReportErrorHookStates::DISMISS_ERROR_SCREEN:
+        lcd_set_custom_characters();
+        lcd_update_enable(true);
+        lcd_return_to_status();
+        // Reset the state in case a new error is reported
+        mmu2.is_mmu_error_monitor_active = false;
+        ReportErrorHookState = ReportErrorHookStates::RENDER_ERROR_SCREEN;
+        break;
     default:
         break;
     }