diff options
author | David Crocker <dcrocker@eschertech.com> | 2021-02-22 12:15:06 +0300 |
---|---|---|
committer | David Crocker <dcrocker@eschertech.com> | 2021-02-22 12:15:06 +0300 |
commit | 6c9a98d0bb993e87ecfd737092f4c6a775a7bea2 (patch) | |
tree | 69fea542ba9907f9ec2288333113ad4dc4073d64 /src/GCodes | |
parent | 9a97cb757731ab7fb6d624ddaf3dd6445e4538a6 (diff) |
Added M486 error messages
Diffstat (limited to 'src/GCodes')
-rw-r--r-- | src/GCodes/ObjectTracker.cpp | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/GCodes/ObjectTracker.cpp b/src/GCodes/ObjectTracker.cpp index c4f45551..6c19b12a 100644 --- a/src/GCodes/ObjectTracker.cpp +++ b/src/GCodes/ObjectTracker.cpp @@ -153,8 +153,20 @@ GCodeResult ObjectTracker::HandleM486(GCodeBuffer &gb, const StringRef &reply, O { // Cancel an object seen = true; - const int objectToCancel = (seenC) ? currentObjectNumber : gb.GetIValue(); - if (objectToCancel >= 0 && objectToCancel < (int)objectsCancelled.MaxBits() && !objectsCancelled.IsBitSet(objectToCancel)) + const int objectToCancel = (seenC) ? currentObjectNumber : (int)gb.GetUIValue(); + if (objectToCancel < 0) + { + reply.copy("No current object"); + return GCodeResult::error; + } + if (objectToCancel >= (int)objectsCancelled.MaxBits()) + { + reply.copy("Object number out of range"); + return GCodeResult::error; + } + + // We don't flag an error if you try to cancel the same object twice + if (!objectsCancelled.IsBitSet(objectToCancel)) { objectsCancelled.SetBit(objectToCancel); if (objectToCancel == currentObjectNumber) @@ -170,8 +182,15 @@ GCodeResult ObjectTracker::HandleM486(GCodeBuffer &gb, const StringRef &reply, O { // Resume an object seen = true; - const int objectToResume = gb.GetIValue(); - if (objectToResume >= 0 && objectToResume < (int)objectsCancelled.MaxBits() && objectsCancelled.IsBitSet(objectToResume)) + const int objectToResume = gb.GetUIValue(); + if (objectToResume >= (int)objectsCancelled.MaxBits()) + { + reply.copy("Object number out of range"); + return GCodeResult::error; + } + + // We don't flag an error if you try to resume an object that is not cancelled + if (objectsCancelled.IsBitSet(objectToResume)) { objectsCancelled.ClearBit(objectToResume); if (objectToResume == currentObjectNumber) |