diff options
author | Christian Hammacher <bmasterc@gmail.com> | 2021-11-01 14:34:35 +0300 |
---|---|---|
committer | Christian Hammacher <bmasterc@gmail.com> | 2021-11-01 14:34:35 +0300 |
commit | e7892b8a2d4609a687fe9acde367fe2ce07e33e2 (patch) | |
tree | 3f67a9f0ae86f00774dc6eb971e8e578e224180c | |
parent | ccb57d99649e034750db1dd094f79c67d256dd74 (diff) |
Fixed standalone mode detection for SBCs
-rw-r--r-- | src/SBC/SbcInterface.cpp | 14 | ||||
-rw-r--r-- | src/SBC/SbcInterface.h | 2 |
2 files changed, 12 insertions, 4 deletions
diff --git a/src/SBC/SbcInterface.cpp b/src/SBC/SbcInterface.cpp index 691ba401..d4bbb5a5 100644 --- a/src/SBC/SbcInterface.cpp +++ b/src/SBC/SbcInterface.cpp @@ -49,7 +49,7 @@ extern "C" [[noreturn]] void SBCTaskStart(void * pvParameters) noexcept reprap.GetSbcInterface().TaskLoop(); } -SbcInterface::SbcInterface() noexcept : isConnected(false), numDisconnects(0), numTimeouts(0), +SbcInterface::SbcInterface() noexcept : isConnected(false), numDisconnects(0), numTimeouts(0), lastTransferTime(0), maxDelayBetweenTransfers(SpiTransferDelay), maxFileOpenDelay(SpiFileOpenDelay), numMaxEvents(SpiEventsRequired), delaying(false), numEvents(0), reportPause(false), reportPauseWritten(false), printAborted(false), codeBuffer(nullptr), rxPointer(0), txPointer(0), txEnd(0), sendBufferUpdate(true), @@ -87,10 +87,18 @@ void SbcInterface::Init() noexcept void SbcInterface::Spin() noexcept { - if (transfer.DoTransfer() != TransferState::finishingTransfer) + state = transfer.DoTransfer(); + if (state == TransferState::connectionTimeout || (lastTransferTime != 0 && millis() - lastTransferTime > SpiTransferTimeout) || + state == TransferState::connectionReset || state == TransferState::finished) { // Don't process anything, just kick off the next transfer to report we're operating in standalone mode - transfer.StartNextTransfer(); + transfer.ResetConnection(true); + lastTransferTime = 0; + } + else if (state == TransferState::doingPartialTransfer && lastTransferTime == 0) + { + // Make sure the full transfer is restarted if a timeout occurs + lastTransferTime = millis(); } } diff --git a/src/SBC/SbcInterface.h b/src/SBC/SbcInterface.h index 7e0c7805..622b87fa 100644 --- a/src/SBC/SbcInterface.h +++ b/src/SBC/SbcInterface.h @@ -72,7 +72,7 @@ private: DataTransfer transfer; volatile bool isConnected; TransferState state; - uint32_t numDisconnects, numTimeouts; + uint32_t numDisconnects, numTimeouts, lastTransferTime; uint32_t maxDelayBetweenTransfers, maxFileOpenDelay, numMaxEvents; bool skipNextDelay; |