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>2021-02-22 12:15:06 +0300
committerDavid Crocker <dcrocker@eschertech.com>2021-02-22 12:15:06 +0300
commit6c9a98d0bb993e87ecfd737092f4c6a775a7bea2 (patch)
tree69fea542ba9907f9ec2288333113ad4dc4073d64 /src/GCodes
parent9a97cb757731ab7fb6d624ddaf3dd6445e4538a6 (diff)
Added M486 error messages
Diffstat (limited to 'src/GCodes')
-rw-r--r--src/GCodes/ObjectTracker.cpp27
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)