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:
Diffstat (limited to 'src/GCodes/TriggerItem.cpp')
-rw-r--r--src/GCodes/TriggerItem.cpp37
1 files changed, 19 insertions, 18 deletions
diff --git a/src/GCodes/TriggerItem.cpp b/src/GCodes/TriggerItem.cpp
index b1282613..7fc665df 100644
--- a/src/GCodes/TriggerItem.cpp
+++ b/src/GCodes/TriggerItem.cpp
@@ -122,28 +122,29 @@ GCodeResult TriggerItem::Configure(unsigned int number, GCodeBuffer &gb, const S
const int sParam = (gb.Seen('S')) ? gb.GetIValue() : 1;
if (gb.Seen('P'))
{
- if (gb.GetIValue() == -1)
+ // We need a try..catch block here so that if we pass an array we do not abort when trying to read a single value
+ try
{
- Init(); // P-1 clears all inputs and sets condition to 0
- return GCodeResult::ok;
+ if (gb.GetIValue() == -1)
+ {
+ Init(); // P-1 clears all inputs and sets condition to 0
+ return GCodeResult::ok;
+ }
+ } catch (const GCodeException&) { }
+ gb.Seen('P');
+ seen = true;
+ uint32_t inputNumbers[MaxGpInPorts];
+ size_t numValues = MaxGpInPorts;
+ gb.GetUnsignedArray(inputNumbers, numValues, false);
+ const InputPortsBitmap portsToWaitFor = InputPortsBitmap::MakeFromArray(inputNumbers, numValues);
+ if (sParam < 0)
+ {
+ highLevelInputs &= ~portsToWaitFor;
+ lowLevelInputs &= ~portsToWaitFor;
}
else
{
- seen = true;
- gb.Seen('P');
- uint32_t inputNumbers[MaxGpInPorts];
- size_t numValues = MaxGpInPorts;
- gb.GetUnsignedArray(inputNumbers, numValues, false);
- const InputPortsBitmap portsToWaitFor = InputPortsBitmap::MakeFromArray(inputNumbers, numValues);
- if (sParam < 0)
- {
- highLevelInputs &= ~portsToWaitFor;
- lowLevelInputs &= ~portsToWaitFor;
- }
- else
- {
- ((sParam >= 1) ? highLevelInputs : lowLevelInputs) |= portsToWaitFor;
- }
+ ((sParam >= 1) ? highLevelInputs : lowLevelInputs) |= portsToWaitFor;
}
}