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/Platform.cpp')
-rw-r--r--src/Platform.cpp71
1 files changed, 41 insertions, 30 deletions
diff --git a/src/Platform.cpp b/src/Platform.cpp
index ef3baf88..5fa5aeda 100644
--- a/src/Platform.cpp
+++ b/src/Platform.cpp
@@ -26,7 +26,7 @@
#include "Movement/Move.h"
#include "Network.h"
#include "PrintMonitor.h"
-#include "FilamentSensors/FilamentSensor.h"
+#include "FilamentMonitors/FilamentMonitor.h"
#include "RepRap.h"
#include "Scanner.h"
#include "Version.h"
@@ -948,7 +948,7 @@ bool Platform::ProgramZProbe(GCodeBuffer& gb, StringRef& reply)
{
uint32_t zProbeProgram[MaxZProbeProgramBytes];
size_t len = MaxZProbeProgramBytes;
- gb.GetUnsignedArray(zProbeProgram, len);
+ gb.GetUnsignedArray(zProbeProgram, len, false);
if (len != 0)
{
for (size_t i = 0; i < len; ++i)
@@ -1579,8 +1579,8 @@ void Platform::Spin()
{
bool reported = false;
#if HAS_SMART_DRIVERS
- ReportDrivers(shortToGroundDrivers, "Error: Short-to-ground", reported);
- ReportDrivers(temperatureShutdownDrivers, "Error: Over temperature shutdown", reported);
+ ReportDrivers(ErrorMessage, shortToGroundDrivers, "short-to-ground", reported);
+ ReportDrivers(ErrorMessage, temperatureShutdownDrivers, "over temperature shutdown", reported);
// Don't report open load because we get too many spurious open load reports
//ReportDrivers(openLoadDrivers, "Error: Open load", reported);
@@ -1594,7 +1594,7 @@ void Platform::Spin()
|| (offBoardOtw && (!offBoardDriversFanRunning || now - offBoardDriversFanStartMillis >= DriverCoolingTimeout))
)
{
- ReportDrivers(temperatureWarningDrivers, "Warning: high temperature", reported);
+ ReportDrivers(WarningMessage, temperatureWarningDrivers, "high temperature", reported);
}
}
#endif
@@ -1702,7 +1702,7 @@ void Platform::Spin()
// Report driver status conditions that require attention.
// Sets 'reported' if we reported anything, else leaves 'reported' alone.
-void Platform::ReportDrivers(DriversBitmap whichDrivers, const char* text, bool& reported)
+void Platform::ReportDrivers(MessageType mt, DriversBitmap whichDrivers, const char* text, bool& reported)
{
if (whichDrivers != 0)
{
@@ -1715,7 +1715,7 @@ void Platform::ReportDrivers(DriversBitmap whichDrivers, const char* text, bool&
}
whichDrivers >>= 1;
}
- MessageF(WarningMessage, "%s\n", scratchString.Pointer());
+ MessageF(mt, "%s\n", scratchString.Pointer());
reported = true;
}
}
@@ -1724,8 +1724,8 @@ void Platform::ReportDrivers(DriversBitmap whichDrivers, const char* text, bool&
#if HAS_STALL_DETECT
-// Return true if any motor driving this axis or extruder is stalled
-bool Platform::AnyMotorStalled(size_t drive) const
+// Return true if any motor driving this axis is stalled
+bool Platform::AnyAxisMotorStalled(size_t drive) const
{
const size_t numAxes = reprap.GetGCodes().GetTotalAxes();
if (drive < numAxes)
@@ -1743,6 +1743,12 @@ bool Platform::AnyMotorStalled(size_t drive) const
return (SmartDrivers::GetLiveStatus(extruderDrivers[drive - numAxes]) & TMC_RR_SG) != 0;
}
+// Return true if the motor driving this extruder is stalled
+bool Platform::ExtruderMotorStalled(size_t extruder) const pre(drive < DRIVES)
+{
+ return (SmartDrivers::GetLiveStatus(extruderDrivers[extruder]) & TMC_RR_SG) != 0;
+}
+
#endif
#if HAS_VOLTAGE_MONITOR
@@ -1925,7 +1931,7 @@ static void FanInterrupt(CallbackParameter)
++fanInterruptCount;
if (fanInterruptCount == fanMaxInterruptCount)
{
- uint32_t now = micros();
+ const uint32_t now = micros();
fanInterval = now - fanLastResetTime;
fanLastResetTime = now;
fanInterruptCount = 0;
@@ -2681,7 +2687,8 @@ void Platform::UpdateConfiguredHeaters()
EndStopHit Platform::Stopped(size_t drive) const
{
- if (drive < reprap.GetGCodes().GetTotalAxes())
+ const size_t numAxes = reprap.GetGCodes().GetTotalAxes();
+ if (drive < numAxes)
{
switch (endStopInputType[drive])
{
@@ -2702,28 +2709,28 @@ EndStopHit Platform::Stopped(size_t drive) const
case KinematicsType::coreXY:
// Both X and Y motors are involved in homing X or Y
motorIsStalled = (drive == X_AXIS || drive == Y_AXIS)
- ? AnyMotorStalled(X_AXIS) || AnyMotorStalled(Y_AXIS)
- : AnyMotorStalled(drive);
+ ? AnyAxisMotorStalled(X_AXIS) || AnyAxisMotorStalled(Y_AXIS)
+ : AnyAxisMotorStalled(drive);
break;
case KinematicsType::coreXYU:
// Both X and Y motors are involved in homing X or Y, and both U and V motors are involved in homing U
motorIsStalled = (drive == X_AXIS || drive == Y_AXIS)
- ? AnyMotorStalled(X_AXIS) || AnyMotorStalled(Y_AXIS)
+ ? AnyAxisMotorStalled(X_AXIS) || AnyAxisMotorStalled(Y_AXIS)
: (drive == U_AXIS)
- ? AnyMotorStalled(U_AXIS) || AnyMotorStalled(V_AXIS)
- : AnyMotorStalled(drive);
+ ? AnyAxisMotorStalled(U_AXIS) || AnyAxisMotorStalled(V_AXIS)
+ : AnyAxisMotorStalled(drive);
break;
case KinematicsType::coreXZ:
// Both X and Z motors are involved in homing X or Z
motorIsStalled = (drive == X_AXIS || drive == Z_AXIS)
- ? AnyMotorStalled(X_AXIS) || AnyMotorStalled(Z_AXIS)
- : AnyMotorStalled(drive);
+ ? AnyAxisMotorStalled(X_AXIS) || AnyAxisMotorStalled(Z_AXIS)
+ : AnyAxisMotorStalled(drive);
break;
default:
- motorIsStalled = AnyMotorStalled(drive);
+ motorIsStalled = AnyAxisMotorStalled(drive);
break;
}
return (!motorIsStalled) ? EndStopHit::noStop
@@ -2734,14 +2741,17 @@ EndStopHit Platform::Stopped(size_t drive) const
#endif
case EndStopInputType::activeLow:
+ if (endStopPins[drive] != NoPin)
+ {
+ const bool b = IoPort::ReadPin(endStopPins[drive]);
+ return (b) ? EndStopHit::noStop : (endStopPos[drive] == EndStopPosition::highEndStop) ? EndStopHit::highHit : EndStopHit::lowHit;
+ }
+ break;
+
case EndStopInputType::activeHigh:
if (endStopPins[drive] != NoPin)
{
- bool b = IoPort::ReadPin(endStopPins[drive]);
- if (endStopInputType[drive] == EndStopInputType::activeHigh)
- {
- b = !b;
- }
+ const bool b = !IoPort::ReadPin(endStopPins[drive]);
return (b) ? EndStopHit::noStop : (endStopPos[drive] == EndStopPosition::highEndStop) ? EndStopHit::highHit : EndStopHit::lowHit;
}
break;
@@ -2750,12 +2760,13 @@ EndStopHit Platform::Stopped(size_t drive) const
break;
}
}
+#if HAS_STALL_DETECT
else if (drive < DRIVES)
{
- // Endstop not used for an axis, so no configuration data available.
- // To allow us to see its status in DWC, pretend it is configured as a high-end active high endstop.
- return (endStopPins[drive] != NoPin && IoPort::ReadPin(endStopPins[drive])) ? EndStopHit::highHit : EndStopHit::noStop;
+ // Endstop is for an extruder drive, so use stall detection
+ return (ExtruderMotorStalled(drive - numAxes)) ? EndStopHit::highHit : EndStopHit::noStop;
}
+#endif
return EndStopHit::noStop;
}
@@ -4269,7 +4280,7 @@ bool Platform::ConfigureStallDetection(GCodeBuffer& gb, StringRef& reply)
{
uint32_t drives[DRIVES];
size_t dCount = DRIVES;
- gb.GetUnsignedArray(drives, dCount);
+ gb.GetUnsignedArray(drives, dCount, false);
for (size_t i = 0; i < dCount; i++)
{
if (drives[i] >= numSmartDrivers)
@@ -4469,7 +4480,7 @@ void STEP_TC_HANDLER()
{
const irqflags_t flags = cpu_irq_save();
const int32_t diff = (int32_t)(tim - GetInterruptClocks()); // see how long we have to go
- if (diff < (int32_t)DDA::minInterruptInterval) // if less than about 6us or already passed
+ if (diff < (int32_t)DDA::MinInterruptInterval) // if less than about 6us or already passed
{
cpu_irq_restore(flags);
return true; // tell the caller to simulate an interrupt instead
@@ -4502,7 +4513,7 @@ void STEP_TC_HANDLER()
{
const irqflags_t flags = cpu_irq_save();
const int32_t diff = (int32_t)(tim - GetInterruptClocks()); // see how long we have to go
- if (diff < (int32_t)DDA::minInterruptInterval) // if less than about 6us or already passed
+ if (diff < (int32_t)DDA::MinInterruptInterval) // if less than about 6us or already passed
{
cpu_irq_restore(flags);
return true; // tell the caller to simulate an interrupt instead