Ver código fonte

Reset MMU upon start + fix reporting its start errors

D.R.racer 2 anos atrás
pai
commit
b880559ba7
2 arquivos alterados com 16 adições e 1 exclusões
  1. 3 1
      Firmware/mmu2.cpp
  2. 13 0
      Firmware/mmu2_protocol_logic.cpp

+ 3 - 1
Firmware/mmu2.cpp

@@ -103,7 +103,9 @@ void MMU2::Start() {
 
     mmu2Serial.begin(MMU_BAUD);
 
-    PowerOn();
+    // PowerOn(); we cannot do that on MK3, but at least reset the MMU
+    Reset(ResetForm::ResetPin);
+
     mmu2Serial.flush(); // make sure the UART buffer is clear before starting communication
 
     extruder = MMU2_NO_TOOL;

+ 13 - 0
Firmware/mmu2_protocol_logic.cpp

@@ -294,6 +294,19 @@ StepStatus Idle::Step() {
                 logic->SwitchFromIdleToCommand();
                 return Processing;
             }
+            break;
+        case RequestMsgCodes::Reset:
+            // this one is kind of special
+            // we do not transfer to any "running" command (i.e. we stay in Idle),
+            // but in case there is an error reported we must make sure it gets propagated
+            if( logic->rsp.paramCode != ResponseMsgParamCodes::Finished ){
+                logic->errorCode = static_cast<ErrorCode>(logic->rsp.paramValue);
+                SendFINDAQuery(); // continue Idle state without restarting the communication
+                return CommandError;
+            } else {
+                logic->errorCode = ErrorCode::OK;
+            }
+            break;
         default:
             break;
         }