diff options
author | David Crocker <dcrocker@eschertech.com> | 2022-01-05 20:41:13 +0300 |
---|---|---|
committer | David Crocker <dcrocker@eschertech.com> | 2022-01-05 20:41:13 +0300 |
commit | 4f4e9453e28cb13278f21d83d12899144fce8c7f (patch) | |
tree | 03a4455e824a4ae8051012f6d89edb772d1447f0 /src | |
parent | 191dba062b1781185253c1d322f44fb412e18aa5 (diff) |
Prevent LinearAnalog filtering being enabled if port hasn't a filter
Diffstat (limited to 'src')
-rw-r--r-- | src/Heating/Heat.cpp | 2 | ||||
-rw-r--r-- | src/Heating/Sensors/LinearAnalogSensor.cpp | 10 | ||||
-rw-r--r-- | src/Platform/Platform.cpp | 4 |
3 files changed, 13 insertions, 3 deletions
diff --git a/src/Heating/Heat.cpp b/src/Heating/Heat.cpp index 1e06c968..ad90f237 100644 --- a/src/Heating/Heat.cpp +++ b/src/Heating/Heat.cpp @@ -1090,7 +1090,7 @@ GCodeResult Heat::ConfigureSensor(GCodeBuffer& gb, const StringRef& reply) THROW try { const GCodeResult rslt = newSensor->Configure(gb, reply, changed); - if (rslt == GCodeResult::ok) + if (rslt == GCodeResult::ok || rslt == GCodeResult::warning) { InsertSensor(newSensor); } diff --git a/src/Heating/Sensors/LinearAnalogSensor.cpp b/src/Heating/Sensors/LinearAnalogSensor.cpp index b1a40623..7f8bf0a8 100644 --- a/src/Heating/Sensors/LinearAnalogSensor.cpp +++ b/src/Heating/Sensors/LinearAnalogSensor.cpp @@ -49,11 +49,17 @@ GCodeResult LinearAnalogSensor::Configure(GCodeBuffer& gb, const StringRef& repl if (changed) { + const bool wasFiltered = filtered; CalcDerivedParameters(); if (adcFilterChannel >= 0) { reprap.GetPlatform().GetAdcFilter(adcFilterChannel).Init(0); } + else if (wasFiltered) + { + reply.copy("filtering not supported on this port"); + return GCodeResult::warning; + } } else { @@ -87,6 +93,10 @@ void LinearAnalogSensor::Poll() noexcept void LinearAnalogSensor::CalcDerivedParameters() noexcept { adcFilterChannel = reprap.GetPlatform().GetAveragingFilterIndex(port); + if (adcFilterChannel < 0) + { + filtered = false; + } linearIncreasePerCount = (highTemp - lowTemp)/((filtered) ? FilteredAdcRange : UnfilteredAdcRange); } diff --git a/src/Platform/Platform.cpp b/src/Platform/Platform.cpp index 1b4e2ebb..8e1b12f8 100644 --- a/src/Platform/Platform.cpp +++ b/src/Platform/Platform.cpp @@ -2353,9 +2353,9 @@ GCodeResult Platform::DiagnosticTest(GCodeBuffer& gb, const StringRef& reply, Ou // Note, the Thermistor code assumes that this is also the thermistor input number int Platform::GetAveragingFilterIndex(const IoPort& port) const noexcept { - for (size_t i = 0; i < NumAdcFilters; ++i) + for (size_t i = 0; i < ARRAY_SIZE(TEMP_SENSE_PINS); ++i) { - if (port.GetAnalogChannel() == filteredAdcChannels[i]) + if (port.GetPin() == TEMP_SENSE_PINS[i]) { return (int)i; } |