MCPcopy Create free account
hub / github.com/Duet3D/RepRapFirmware / TaskLoop

Method TaskLoop

src/SBC/SbcInterface.cpp:75–162  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

73}
74
75[[noreturn]] void SbcInterface::TaskLoop() noexcept
76{
77 transfer.InitFromTask();
78 transfer.StartNextTransfer();
79
80 bool busy = false, transferComplete = false, hadTimeout = false, hadSbcTimeout = false, hadReset = false;
81 for (;;)
82 {
83 // Try to exchange data with the SBC
84 transferComplete = hadTimeout = hadReset = false;
85 do
86 {
87 busy = false;
88 state = transfer.DoTransfer();
89 const uint32_t transferStartTime = millis();
90 switch (state)
91 {
92 case TransferState::doingFullTransfer:
93 hadTimeout = !TaskBase::TakeIndexed(NotifyIndices::SbcInterface, isConnected ? SpiConnectionTimeout : TaskBase::TimeoutUnlimited);
94 hadSbcTimeout = hadTimeout && millis() - transferStartTime < SpiConnectionTimeout + SbcYieldTimeout;
95 break;
96 case TransferState::doingPartialTransfer:
97 hadTimeout = !TaskBase::TakeIndexed(NotifyIndices::SbcInterface, SpiTransferTimeout);
98 hadSbcTimeout = hadTimeout && millis() - transferStartTime < SpiTransferTimeout + SbcYieldTimeout;
99 break;
100 case TransferState::finishingTransfer:
101 busy = true;
102 break;
103 case TransferState::connectionTimeout:
104 hadTimeout = hadSbcTimeout = true;
105 break;
106 case TransferState::connectionReset:
107 hadReset = true;
108 break;
109 case TransferState::finished:
110 transferComplete = true;
111 break;
112 }
113 } while (busy);
114
115 // Handle connection errors
116 if (isConnected && (hadReset || hadTimeout))
117 {
118 isConnected = false;
119 numDisconnects++;
120 if (hadTimeout)
121 {
122 numTimeouts++;
123 if (hadSbcTimeout)
124 {
125 numSbcTimeouts++;
126 }
127 reprap.GetPlatform().MessageF(NetworkInfoMessage, "Lost connection to SBC due to %s timeout\n", hadSbcTimeout ? "remote" : "local");
128 }
129 else
130 {
131 reprap.GetPlatform().Message(NetworkInfoMessage, "Lost connection to SBC due to connection reset\n");
132 }

Callers 1

SBCTaskStartFunction · 0.80

Calls 6

InitFromTaskMethod · 0.80
StartNextTransferMethod · 0.80
DoTransferMethod · 0.80
MessageMethod · 0.80
ResetConnectionMethod · 0.80
MessageFMethod · 0.45

Tested by

no test coverage detected