Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Hammacher <bmasterc@gmail.com>2021-11-01 14:34:35 +0300
committerChristian Hammacher <bmasterc@gmail.com>2021-11-01 14:34:35 +0300
commite7892b8a2d4609a687fe9acde367fe2ce07e33e2 (patch)
tree3f67a9f0ae86f00774dc6eb971e8e578e224180c
parentccb57d99649e034750db1dd094f79c67d256dd74 (diff)
Fixed standalone mode detection for SBCs
-rw-r--r--src/SBC/SbcInterface.cpp14
-rw-r--r--src/SBC/SbcInterface.h2
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;