diff --git a/Firmware/mmu2_protocol_logic.cpp b/Firmware/mmu2_protocol_logic.cpp index 6fe760572..ba898fdd3 100644 --- a/Firmware/mmu2_protocol_logic.cpp +++ b/Firmware/mmu2_protocol_logic.cpp @@ -124,8 +124,6 @@ struct OldMMUFWDetector { return State::MatchingPart; } else if(ok == 1 && c == 'k'){ ++ok; - return State::MatchingPart; - } else if(ok == 2 && c == '\n'){ return State::Matched; } return State::SomethingElse; @@ -154,10 +152,8 @@ StepStatus ProtocolLogic::ExpectingMessage() { // consume old MMU FW's data if any -> avoid confusion of protocol decoder auto old = oldMMUh4x0r.Detect(c); if( old == OldMMUFWDetector::State::Matched ){ - // hack bad FW version - BEWARE - we silently assume that the first query is an "S0" - // The old MMU FW responds with "ok\n" and we fake the response to a bad FW version at this spot - rsp = ResponseMsg(RequestMsg(RequestMsgCodes::Version, 0), ResponseMsgParamCodes::Accepted, 0); - return MessageReady; + // Old MMU FW 1.0.6 detected. Firmwares are incompatible. + return VersionMismatch; } else if( old == OldMMUFWDetector::State::MatchingPart ){ break; } @@ -171,7 +167,7 @@ StepStatus ProtocolLogic::ExpectingMessage() { if (bytesConsumed != 0) { RecordUARTActivity(); // something has happened on the UART, update the timeout record return Processing; // consumed some bytes, but message still not ready - } else if (Elapsed(linkLayerTimeout)) { + } else if (Elapsed(linkLayerTimeout) && currentScope != Scope::Stopped) { return CommunicationTimeout; } return Processing; @@ -794,7 +790,6 @@ StepStatus ProtocolLogic::Step() { break; case VersionMismatch: LogError(PSTR("Version mismatch")); - Stop(); // cannot continue break; case ProtocolError: currentStatus = HandleProtocolError();