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
path: root/src
diff options
context:
space:
mode:
authorDavid Crocker <dcrocker@eschertech.com>2022-01-05 20:41:13 +0300
committerDavid Crocker <dcrocker@eschertech.com>2022-01-05 20:41:13 +0300
commit4f4e9453e28cb13278f21d83d12899144fce8c7f (patch)
tree03a4455e824a4ae8051012f6d89edb772d1447f0 /src
parent191dba062b1781185253c1d322f44fb412e18aa5 (diff)
Prevent LinearAnalog filtering being enabled if port hasn't a filter
Diffstat (limited to 'src')
-rw-r--r--src/Heating/Heat.cpp2
-rw-r--r--src/Heating/Sensors/LinearAnalogSensor.cpp10
-rw-r--r--src/Platform/Platform.cpp4
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;
}