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/RepRap.cpp')
-rw-r--r--src/RepRap.cpp113
1 files changed, 84 insertions, 29 deletions
diff --git a/src/RepRap.cpp b/src/RepRap.cpp
index e727bf55..1dcd27c4 100644
--- a/src/RepRap.cpp
+++ b/src/RepRap.cpp
@@ -234,7 +234,7 @@ void RepRap::EmergencyStop()
}
heat->Exit();
- for(size_t heater = 0; heater < HEATERS; heater++)
+ for(size_t heater = 0; heater < Heaters; heater++)
{
platform->SetHeater(heater, 0.0);
}
@@ -479,7 +479,7 @@ void RepRap::Tick()
if (ticksInSpinState >= 20000) // if we stall for 20 seconds, save diagnostic data and reset
{
resetting = true;
- for(size_t i = 0; i < HEATERS; i++)
+ for(size_t i = 0; i < Heaters; i++)
{
platform->SetHeater(i, 0.0);
}
@@ -515,7 +515,7 @@ OutputBuffer *RepRap::GetStatusResponse(uint8_t type, ResponseSource source)
response->printf("{\"status\":\"%c\",\"coords\":{", ch);
// Coordinates
- const size_t numAxes = reprap.GetGCodes().GetNumAxes();
+ const size_t numAxes = reprap.GetGCodes().GetVisibleAxes();
{
float liveCoordinates[DRIVES + 1];
#if SUPPORT_ROLAND
@@ -684,49 +684,104 @@ OutputBuffer *RepRap::GetStatusResponse(uint8_t type, ResponseSource source)
}
/* Heads */
+ response->cat("\"heads\":{\"current\":");
+
+ // Current temperatures
+ ch = '[';
+ for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++)
+ {
+ response->catf("%c%.1f", ch, heat->GetTemperature(heater));
+ ch = ',';
+ }
+ response->cat((ch == '[') ? "[]" : "]");
+
+ // Active temperatures
+ response->catf(",\"active\":");
+ ch = '[';
+ for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++)
+ {
+ response->catf("%c%.1f", ch, heat->GetActiveTemperature(heater));
+ ch = ',';
+ }
+ response->cat((ch == '[') ? "[]" : "]");
+
+ // Standby temperatures
+ response->catf(",\"standby\":");
+ ch = '[';
+ for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++)
+ {
+ response->catf("%c%.1f", ch, heat->GetStandbyTemperature(heater));
+ ch = ',';
+ }
+ response->cat((ch == '[') ? "[]" : "]");
+
+ // Heater statuses (0=off, 1=standby, 2=active, 3=fault)
+ response->cat(",\"state\":");
+ ch = '[';
+ for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++)
{
- response->cat("\"heads\":{\"current\":");
+ response->catf("%c%d", ch, static_cast<int>(heat->GetStatus(heater)));
+ ch = ',';
+ }
+ response->cat((ch == '[') ? "[]" : "]");
- // Current temperatures
+ /* Tool temperatures */
+ response->cat("},\"tools\":{\"active\":[");
+ for (const Tool *tool = toolList; tool != nullptr; tool = tool->Next())
+ {
ch = '[';
- for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++)
+ for (size_t heater = 0; heater < tool->heaterCount; heater++)
{
- response->catf("%c%.1f", ch, heat->GetTemperature(heater));
+ response->catf("%c%.1f", ch, tool->activeTemperatures[heater]);
ch = ',';
}
response->cat((ch == '[') ? "[]" : "]");
- // Active temperatures
- response->catf(",\"active\":");
- ch = '[';
- for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++)
+ if (tool->Next() != nullptr)
{
- response->catf("%c%.1f", ch, heat->GetActiveTemperature(heater));
- ch = ',';
+ response->cat(",");
}
- response->cat((ch == '[') ? "[]" : "]");
+ }
- // Standby temperatures
- response->catf(",\"standby\":");
+ response->cat("],\"standby\":[");
+ for (const Tool *tool = toolList; tool != nullptr; tool = tool->Next())
+ {
ch = '[';
- for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++)
+ for (size_t heater = 0; heater < tool->heaterCount; heater++)
{
- response->catf("%c%.1f", ch, heat->GetStandbyTemperature(heater));
+ response->catf("%c%.1f", ch, tool->standbyTemperatures[heater]);
ch = ',';
}
response->cat((ch == '[') ? "[]" : "]");
- // Heater statuses (0=off, 1=standby, 2=active, 3=fault)
- response->cat(",\"state\":");
- ch = '[';
- for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++)
+ if (tool->Next() != nullptr)
{
- response->catf("%c%d", ch, static_cast<int>(heat->GetStatus(heater)));
- ch = ',';
+ response->cat(",");
+ }
+ }
+
+ // Named extra temperature sensors
+ response->cat("]},\"extra\":[");
+ bool first = true;
+ for (size_t heater = FirstVirtualHeater; heater < FirstVirtualHeater + MaxVirtualHeaters; ++heater)
+ {
+ const char *nm = heat->GetHeaterName(heater);
+ if (nm != nullptr)
+ {
+ if (!first)
+ {
+ response->cat(',');
+ }
+ first = false;
+ response->cat("{\"name\":");
+ response->EncodeString(nm, strlen(nm), false, true);
+ TemperatureError err;
+ const float t = heat->GetTemperature(heater, err);
+ response->catf(",\"temp\":%.1f}", t);
}
- response->cat((ch == '[') ? "[]" : "]");
}
- response->cat("}}");
+
+ response->cat("]}");
}
// Time since last reset
@@ -825,7 +880,7 @@ OutputBuffer *RepRap::GetStatusResponse(uint8_t type, ResponseSource source)
// Axis mapping. Currently we only map the X axis, but we return an array of arrays to allow for mapping other axes in future.
response->cat("],\"axisMap\":[[");
bool first = true;
- for (size_t xi = 0; xi < MAX_AXES; ++xi)
+ for (size_t xi = 0; xi < MaxAxes; ++xi)
{
if ((tool->GetXAxisMap() & (1u << xi)) != 0)
{
@@ -948,7 +1003,7 @@ OutputBuffer *RepRap::GetConfigResponse()
return nullptr;
}
- const size_t numAxes = reprap.GetGCodes().GetNumAxes();
+ const size_t numAxes = reprap.GetGCodes().GetVisibleAxes();
// Axis minima
response->copy("{\"axisMins\":");
@@ -1131,7 +1186,7 @@ OutputBuffer *RepRap::GetLegacyStatusResponse(uint8_t type, int seq)
response->cat((ch == '[') ? "[]" : "]");
// Send XYZ positions
- const size_t numAxes = reprap.GetGCodes().GetNumAxes();
+ const size_t numAxes = reprap.GetGCodes().GetVisibleAxes();
float liveCoordinates[DRIVES];
reprap.GetMove().LiveCoordinates(liveCoordinates, GetCurrentXAxes());
const Tool* const currentTool = reprap.GetCurrentTool();