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:
authorDavid Crocker <dcrocker@eschertech.com>2020-07-20 00:35:49 +0300
committerDavid Crocker <dcrocker@eschertech.com>2020-07-20 00:35:49 +0300
commita245796ed4a1eba52172c9bacd7bcf2f992be06c (patch)
tree2a674fef30d949b7a0cdbaaa46351cb96aaf0f12 /src/Networking
parent79bd393659a46b352c7e235cc5575ef1648b61e5 (diff)
Fix (I hope) for strange network task crashes on Duet 3 Mini WiFi
Diffstat (limited to 'src/Networking')
-rw-r--r--src/Networking/ESP8266WiFi/WiFiInterface.cpp2
-rw-r--r--src/Networking/HttpResponder.cpp26
-rw-r--r--src/Networking/HttpResponder.h2
3 files changed, 18 insertions, 12 deletions
diff --git a/src/Networking/ESP8266WiFi/WiFiInterface.cpp b/src/Networking/ESP8266WiFi/WiFiInterface.cpp
index 1303b8bc..17b2e8cb 100644
--- a/src/Networking/ESP8266WiFi/WiFiInterface.cpp
+++ b/src/Networking/ESP8266WiFi/WiFiInterface.cpp
@@ -1604,6 +1604,7 @@ static void spi_slave_dma_setup(uint32_t dataOutSize, uint32_t dataInSize) noexc
#endif
#if USE_DMAC || USE_XDMAC || USE_DMAC_MANAGER
+ spi_dma_disable(); // if we don't do this we get strange crashes on the Duet 3 Mini
DisableSpi();
spi_rx_dma_setup(&bufferIn, dataInSize + sizeof(MessageHeaderEspToSam));
spi_tx_dma_setup(&bufferOut, dataOutSize + sizeof(MessageHeaderSamToEsp));
@@ -1679,7 +1680,6 @@ void WiFiInterface::SetupSpi() noexcept
#endif
#if SAME5x
- // Set up the correct SPI mode etc. (I am assuming that we don't need to reset the SPI between transactions)
WiFiSpiSercom->SPI.INTENCLR.reg = 0xFF; // disable all interrupts
WiFiSpiSercom->SPI.INTFLAG.reg = 0xFF; // clear any pending interrupts
#else
diff --git a/src/Networking/HttpResponder.cpp b/src/Networking/HttpResponder.cpp
index 7bdb7b11..fa0323da 100644
--- a/src/Networking/HttpResponder.cpp
+++ b/src/Networking/HttpResponder.cpp
@@ -735,17 +735,25 @@ bool HttpResponder::RemoveAuthentication() noexcept
return false;
}
- for (size_t k = i + 1; k < numSessions; ++k)
- {
- sessions[k - 1] = sessions[k];
- }
- numSessions--;
+ RemoveSession(i);
return true;
}
}
return false;
}
+/*static*/ void HttpResponder::RemoveSession(size_t sessionToRemove) noexcept
+{
+ if (sessionToRemove < numSessions)
+ {
+ --numSessions;
+ for (size_t k = sessionToRemove; k < numSessions; ++k)
+ {
+ sessions[k] = sessions[k + 1];
+ }
+ }
+}
+
void HttpResponder::SendFile(const char* nameOfFileToSend, bool isWebFile) noexcept
{
#if HAS_MASS_STORAGE
@@ -1443,13 +1451,9 @@ void HttpResponder::Diagnostics(MessageType mt) const noexcept
for (size_t i = numSessions; i != 0; )
{
--i;
- if ((now - sessions[i].lastQueryTime) > HttpSessionTimeout)
+ if (now - sessions[i].lastQueryTime > HttpSessionTimeout)
{
- for (size_t k = i + 1; k < numSessions; k++)
- {
- sessions[k - 1] = sessions[k];
- }
- numSessions--;
+ RemoveSession(i);
clientsTimedOut++;
}
}
diff --git a/src/Networking/HttpResponder.h b/src/Networking/HttpResponder.h
index c329210a..eb975f04 100644
--- a/src/Networking/HttpResponder.h
+++ b/src/Networking/HttpResponder.h
@@ -96,6 +96,8 @@ private:
const char* GetKeyValue(const char *key) const noexcept; // return the value of the specified key, or nullptr if not present
+ static void RemoveSession(size_t sessionToRemove) noexcept;
+
HttpParseState parseState;
// Buffers for processing HTTP input