diff options
author | David Crocker <dcrocker@eschertech.com> | 2022-02-17 13:51:04 +0300 |
---|---|---|
committer | David Crocker <dcrocker@eschertech.com> | 2022-02-17 13:51:04 +0300 |
commit | 4197b60ab476b6cd615b59bcf5ea580ad85ab268 (patch) | |
tree | 97eecc2fc6a92e1e31553d930304686579c5f1df /src | |
parent | 008ab726cc6ec639ed43d8dbe2fe2b9d43314c6e (diff) |
Added "CRC required" option to serial input channels
Diffstat (limited to 'src')
-rw-r--r-- | src/GCodes/GCodeBuffer/StringParser.cpp | 7 | ||||
-rw-r--r-- | src/GCodes/GCodeBuffer/StringParser.h | 3 | ||||
-rw-r--r-- | src/GCodes/GCodes2.cpp | 4 |
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) { |