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
path: root/src
diff options
context:
space:
mode:
authorDavid Crocker <dcrocker@eschertech.com>2022-02-17 13:51:04 +0300
committerDavid Crocker <dcrocker@eschertech.com>2022-02-17 13:51:04 +0300
commit4197b60ab476b6cd615b59bcf5ea580ad85ab268 (patch)
tree97eecc2fc6a92e1e31553d930304686579c5f1df /src
parent008ab726cc6ec639ed43d8dbe2fe2b9d43314c6e (diff)
Added "CRC required" option to serial input channels
Diffstat (limited to 'src')
-rw-r--r--src/GCodes/GCodeBuffer/StringParser.cpp7
-rw-r--r--src/GCodes/GCodeBuffer/StringParser.h3
-rw-r--r--src/GCodes/GCodes2.cpp4
3 files changed, 8 insertions, 6 deletions
diff --git a/src/GCodes/GCodeBuffer/StringParser.cpp b/src/GCodes/GCodeBuffer/StringParser.cpp
index 78669752..bab919b7 100644
--- a/src/GCodes/GCodeBuffer/StringParser.cpp
+++ b/src/GCodes/GCodeBuffer/StringParser.cpp
@@ -26,7 +26,7 @@ static constexpr char eofString[] = EOF_STRING; // What's at the end of an HTML
StringParser::StringParser(GCodeBuffer& gcodeBuffer) noexcept
: gb(gcodeBuffer), fileBeingWritten(nullptr), writingFileSize(0), indentToSkipTo(NoIndentSkip), eofStringCounter(0),
- hasCommandNumber(false), commandLetter('Q'), checksumRequired(false), binaryWriting(false)
+ hasCommandNumber(false), commandLetter('Q'), checksumRequired(false), crcRequired(false), binaryWriting(false)
{
StartNewFile();
Init();
@@ -305,7 +305,8 @@ bool StringParser::LineFinished() noexcept
case 1:
case 2:
case 3:
- badChecksum = (computedChecksum != declaredChecksum);
+ // If a CRC is required then the only command we allow without a CRC is M409
+ badChecksum = (computedChecksum != declaredChecksum) || (crcRequired && !StringStartsWith(gb.buffer, "M409 "));
break;
case 5:
@@ -320,7 +321,7 @@ bool StringParser::LineFinished() noexcept
else
{
badChecksum = false;
- missingChecksum = (checksumRequired && gb.LatestMachineState().GetPrevious() == nullptr);
+ missingChecksum = ((checksumRequired || crcRequired) && gb.LatestMachineState().GetPrevious() == nullptr);
}
if (reprap.GetDebugFlags(moduleGcodes).IsBitSet(gb.GetChannel().ToBaseType()) && fileBeingWritten == nullptr)
diff --git a/src/GCodes/GCodeBuffer/StringParser.h b/src/GCodes/GCodeBuffer/StringParser.h
index 331c5213..c73087f6 100644
--- a/src/GCodes/GCodeBuffer/StringParser.h
+++ b/src/GCodes/GCodeBuffer/StringParser.h
@@ -63,7 +63,7 @@ public:
void GetDriverIdArray(DriverId arr[], size_t& length) THROWS(GCodeException); // Get a :-separated list of drivers after a key letter
void SetFinished() noexcept; // Set the G Code finished
- void SetCommsProperties(uint32_t arg) noexcept { checksumRequired = (arg & 1); }
+ void SetCommsProperties(uint32_t arg) noexcept { checksumRequired = (arg & 1); crcRequired = (arg & 4); }
#if HAS_MASS_STORAGE
bool OpenFileToWrite(const char* directory, const char* fileName, const FilePosition size, const bool binaryWrite, const uint32_t fileCRC32) noexcept;
@@ -164,6 +164,7 @@ private:
bool seenExpression;
bool checksumRequired; // True if we only accept commands with a valid checksum
+ bool crcRequired; // True if we only accept commands with a valid CRC, except for M409 commands
int8_t commandFraction;
bool binaryWriting; // Executing gcode or writing binary file?
diff --git a/src/GCodes/GCodes2.cpp b/src/GCodes/GCodes2.cpp
index f4055731..158b8a59 100644
--- a/src/GCodes/GCodes2.cpp
+++ b/src/GCodes/GCodes2.cpp
@@ -3522,13 +3522,13 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply) THROWS(GCodeEx
bool seen = false;
if (gb.Seen('B'))
{
- platform.SetBaudRate(chan, gb.GetIValue());
+ platform.SetBaudRate(chan, gb.GetUIValue());
seen = true;
}
if (gb.Seen('S'))
{
- const uint32_t val = gb.GetIValue();
+ const uint32_t val = gb.GetUIValue();
platform.SetCommsProperties(chan, val);
if (chan == 0)
{