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:
authorDavid Crocker <dcrocker@eschertech.com>2020-01-08 22:29:11 +0300
committerDavid Crocker <dcrocker@eschertech.com>2020-01-08 22:29:11 +0300
commit8f60184447dec94e54ef90a4b4a4ca316dfba970 (patch)
treec0127e337cc55636bb25fe49489d323186c6bbd4
parentade692419913c4777aa14f89b10e14c7ff298648 (diff)
Added Move.Axes to object model
-rw-r--r--src/GCodes/GCodeBuffer/StringParser.cpp4
-rw-r--r--src/Movement/Move.cpp52
-rw-r--r--src/ObjectModel/ObjectModel.cpp20
-rw-r--r--src/ObjectModel/ObjectModel.h22
-rw-r--r--src/OutputMemory.h3
-rw-r--r--src/Version.h2
6 files changed, 59 insertions, 44 deletions
diff --git a/src/GCodes/GCodeBuffer/StringParser.cpp b/src/GCodes/GCodeBuffer/StringParser.cpp
index 662419b3..db99746f 100644
--- a/src/GCodes/GCodeBuffer/StringParser.cpp
+++ b/src/GCodes/GCodeBuffer/StringParser.cpp
@@ -1589,6 +1589,10 @@ void StringParser::AppendAsString(ExpressionValue val, const StringRef& str)
{
switch (val.type)
{
+ case TYPE_OF(char):
+ str.cat(val.cVal);
+ break;
+
case TYPE_OF(const char*):
str.cat(val.sVal);
break;
diff --git a/src/Movement/Move.cpp b/src/Movement/Move.cpp
index 969bf2f9..c656b29b 100644
--- a/src/Movement/Move.cpp
+++ b/src/Movement/Move.cpp
@@ -54,34 +54,42 @@
// Macro to build a standard lambda function that includes the necessary type conversions
#define OBJECT_MODEL_FUNC(...) OBJECT_MODEL_FUNC_BODY(Move, __VA_ARGS__)
-//static const ObjectModelArrayDescriptor axesArrayDescriptor =
-//{
-// [] (ObjectModel *self) noexcept -> size_t { return reprap.GetGCodes().GetVisibleAxes(); },
-// [] (ObjectModel *self, size_t n) noexcept -> void* { return (void *)(((Move*)self)->GetAxis(n)); }
-//};
+static const ObjectModelArrayDescriptor axesArrayDescriptor =
+{
+ [] (const ObjectModel *self, const ObjectExplorationContext&) noexcept -> size_t { return reprap.GetGCodes().GetVisibleAxes(); },
+ [] (const ObjectModel *self, ObjectExplorationContext& context) noexcept -> ExpressionValue { return ExpressionValue(self, 3); }
+};
constexpr ObjectModelTableEntry Move::objectModelTable[] =
{
// Within each group, these entries must be in alphabetical order
- // Move members
-// { "Axes", OBJECT_MODEL_FUNC_NOSELF(&axesArrayDescriptor), ObjectModelEntryFlags::none },
- { "Daa", OBJECT_MODEL_FUNC(self, 1), ObjectModelEntryFlags::none },
- { "Idle", OBJECT_MODEL_FUNC(self, 2), ObjectModelEntryFlags::none },
- { "PrintingAcceleration", OBJECT_MODEL_FUNC(self->maxPrintingAcceleration), ObjectModelEntryFlags::none },
- { "TravelAcceleration", OBJECT_MODEL_FUNC(self->maxTravelAcceleration), ObjectModelEntryFlags::none },
- { "SpeedFactor", OBJECT_MODEL_FUNC_NOSELF(reprap.GetGCodes().GetSpeedFactor()), ObjectModelEntryFlags::none },
-
- // Move.Daa members
- { "Enabled", OBJECT_MODEL_FUNC(self->drcEnabled), ObjectModelEntryFlags::none },
- { "MinimumAcceleration", OBJECT_MODEL_FUNC(self->drcMinimumAcceleration), ObjectModelEntryFlags::none },
- { "Period", OBJECT_MODEL_FUNC(self->drcPeriod), ObjectModelEntryFlags::none },
-
- // Move.Idle members
- { "Factor", OBJECT_MODEL_FUNC_NOSELF(reprap.GetPlatform().GetIdleCurrentFactor()), ObjectModelEntryFlags::none },
- { "Timeout", OBJECT_MODEL_FUNC((int32_t)self->idleTimeout), ObjectModelEntryFlags::none },
+ // 0. Move members
+ { "Axes", OBJECT_MODEL_FUNC_NOSELF(&axesArrayDescriptor), ObjectModelEntryFlags::none },
+ { "Daa", OBJECT_MODEL_FUNC(self, 1), ObjectModelEntryFlags::none },
+ { "Idle", OBJECT_MODEL_FUNC(self, 2), ObjectModelEntryFlags::none },
+ { "PrintingAcceleration", OBJECT_MODEL_FUNC(self->maxPrintingAcceleration), ObjectModelEntryFlags::none },
+ { "TravelAcceleration", OBJECT_MODEL_FUNC(self->maxTravelAcceleration), ObjectModelEntryFlags::none },
+ { "SpeedFactor", OBJECT_MODEL_FUNC_NOSELF(reprap.GetGCodes().GetSpeedFactor()), ObjectModelEntryFlags::none },
+
+ // 1. Move.Daa members
+ { "Enabled", OBJECT_MODEL_FUNC(self->drcEnabled), ObjectModelEntryFlags::none },
+ { "MinimumAcceleration", OBJECT_MODEL_FUNC(self->drcMinimumAcceleration), ObjectModelEntryFlags::none },
+ { "Period", OBJECT_MODEL_FUNC(self->drcPeriod), ObjectModelEntryFlags::none },
+
+ // 2. Move.Idle members
+ { "Factor", OBJECT_MODEL_FUNC_NOSELF(reprap.GetPlatform().GetIdleCurrentFactor()), ObjectModelEntryFlags::none },
+ { "Timeout", OBJECT_MODEL_FUNC((int32_t)self->idleTimeout), ObjectModelEntryFlags::none },
+
+ // 3. Move.Axis[] members
+ { "Homed", OBJECT_MODEL_FUNC_NOSELF(reprap.GetGCodes().IsAxisHomed(context.GetIndex(0))), ObjectModelEntryFlags::none },
+ { "Letter", OBJECT_MODEL_FUNC_NOSELF(reprap.GetGCodes().GetAxisLetters()[context.GetIndex(0)]), ObjectModelEntryFlags::none },
+ { "Max", OBJECT_MODEL_FUNC_NOSELF(reprap.GetPlatform().AxisMaximum(context.GetIndex(0))), ObjectModelEntryFlags::none },
+ { "Min", OBJECT_MODEL_FUNC_NOSELF(reprap.GetPlatform().AxisMinimum(context.GetIndex(0))), ObjectModelEntryFlags::none },
+ { "UserPosition", OBJECT_MODEL_FUNC_NOSELF(reprap.GetGCodes().GetUserCoordinate(context.GetIndex(0))), ObjectModelEntryFlags::none },
+ { "Visible", OBJECT_MODEL_FUNC_NOSELF(context.GetIndex(0) < reprap.GetGCodes().GetVisibleAxes()), ObjectModelEntryFlags::none },
};
-constexpr uint8_t Move::objectModelTableDescriptor[] = { 3, 5, 3, 2 };
+constexpr uint8_t Move::objectModelTableDescriptor[] = { 4, 6, 3, 2, 6 };
DEFINE_GET_OBJECT_MODEL_TABLE(Move)
diff --git a/src/ObjectModel/ObjectModel.cpp b/src/ObjectModel/ObjectModel.cpp
index 2ff93878..36375ec5 100644
--- a/src/ObjectModel/ObjectModel.cpp
+++ b/src/ObjectModel/ObjectModel.cpp
@@ -9,17 +9,18 @@
#if SUPPORT_OBJECT_MODEL
-#include "OutputMemory.h"
+#include <OutputMemory.h>
#include <GCodes/GCodeBuffer/StringParser.h>
#include <cstring>
#include <General/SafeStrtod.h>
void ObjectExplorationContext::AddIndex(unsigned int index)
{
- if (numIndices == MaxIndices) // should always be true
+ if (numIndices == MaxIndices)
{
THROW_INTERNAL_ERROR;
}
+ indices[numIndices] = index;
++numIndices;
}
@@ -179,14 +180,13 @@ bool ObjectModel::ReportItemAsJson(OutputBuffer *buf, ObjectExplorationContext&
break;
case TYPE_OF(bool):
- if (context.ShortFormReport())
- {
- buf->cat((val.bVal) ? '1' : '0');
- }
- else
- {
- buf->cat((val.bVal) ? "\"yes\"" : "\"no\"");
- }
+ buf->cat((val.bVal) ? "true" : "false");
+ break;
+
+ case TYPE_OF(char):
+ buf->cat('"');
+ buf->EncodeChar(val.cVal);
+ buf->cat('"');
break;
case TYPE_OF(IPAddress):
diff --git a/src/ObjectModel/ObjectModel.h b/src/ObjectModel/ObjectModel.h
index 9ffb5f57..bde3eabd 100644
--- a/src/ObjectModel/ObjectModel.h
+++ b/src/ObjectModel/ObjectModel.h
@@ -30,15 +30,16 @@ class ObjectModelArrayDescriptor; // forward declaration
template<class T> constexpr TypeCode TypeOf() noexcept;
template<> constexpr TypeCode TypeOf<bool>() noexcept { return 1; }
-template<> constexpr TypeCode TypeOf<uint32_t>() noexcept { return 2; }
-template<> constexpr TypeCode TypeOf<int32_t>() noexcept { return 3; }
-template<> constexpr TypeCode TypeOf<float>() noexcept { return 4; }
-template<> constexpr TypeCode TypeOf<Bitmap32>() noexcept { return 5; }
-template<> constexpr TypeCode TypeOf<Enum32>() noexcept { return 6; }
-template<> constexpr TypeCode TypeOf<const ObjectModel*>() noexcept { return 7; }
-template<> constexpr TypeCode TypeOf<const char*>() noexcept { return 8; }
-template<> constexpr TypeCode TypeOf<IPAddress>() noexcept { return 9; }
-template<> constexpr TypeCode TypeOf<const ObjectModelArrayDescriptor*>() noexcept { return 10; }
+template<> constexpr TypeCode TypeOf<char>() noexcept { return 2; }
+template<> constexpr TypeCode TypeOf<uint32_t>() noexcept { return 3; }
+template<> constexpr TypeCode TypeOf<int32_t>() noexcept { return 4; }
+template<> constexpr TypeCode TypeOf<float>() noexcept { return 5; }
+template<> constexpr TypeCode TypeOf<Bitmap32>() noexcept { return 6; }
+template<> constexpr TypeCode TypeOf<Enum32>() noexcept { return 7; }
+template<> constexpr TypeCode TypeOf<const ObjectModel*>() noexcept { return 8; }
+template<> constexpr TypeCode TypeOf<const char*>() noexcept { return 9; }
+template<> constexpr TypeCode TypeOf<IPAddress>() noexcept { return 10; }
+template<> constexpr TypeCode TypeOf<const ObjectModelArrayDescriptor*>() noexcept { return 11; }
#define TYPE_OF(_t) (TypeOf<_t>())
@@ -61,6 +62,7 @@ struct ExpressionValue
union
{
bool bVal;
+ char cVal;
float fVal;
int32_t iVal;
uint32_t uVal; // used for enumerations, bitmaps and IP addresses (not for integers, we always use int32_t for those)
@@ -71,6 +73,7 @@ struct ExpressionValue
ExpressionValue() noexcept : type(NoType) { }
explicit constexpr ExpressionValue(bool b) noexcept : type(TYPE_OF(bool)), param(0), bVal(b) { }
+ explicit constexpr ExpressionValue(char c) noexcept : type(TYPE_OF(char)), param(0), cVal(c) { }
explicit constexpr ExpressionValue(float f) noexcept : type(TYPE_OF(float)), param(1), fVal(f) { }
constexpr ExpressionValue(float f, uint8_t numDecimalPlaces) noexcept : type(TYPE_OF(float)), param(numDecimalPlaces), fVal(f) { }
explicit constexpr ExpressionValue(int32_t i) noexcept : type(TYPE_OF(int32_t)), param(0), iVal(i) { }
@@ -82,6 +85,7 @@ struct ExpressionValue
explicit constexpr ExpressionValue(nullptr_t dummy) noexcept : type(NoType), param(0), uVal(0) { }
void Set(bool b) noexcept { type = TYPE_OF(bool); bVal = b; }
+ void Set(char c) noexcept { type = TYPE_OF(char); cVal = c; }
void Set(int32_t i) noexcept { type = TYPE_OF(int32_t); iVal = i; }
void Set(int i) noexcept { type = TYPE_OF(int32_t); iVal = i; }
void Set(float f) noexcept { type = TYPE_OF(float); fVal = f; param = 1; }
diff --git a/src/OutputMemory.h b/src/OutputMemory.h
index 4c832ba3..9006f371 100644
--- a/src/OutputMemory.h
+++ b/src/OutputMemory.h
@@ -59,6 +59,7 @@ class OutputBuffer
size_t cat(StringRef &str) noexcept;
size_t EncodeString(const char *src, bool allowControlChars, bool prependAsterisk = false) noexcept;
+ size_t EncodeChar(char c) noexcept;
template<size_t Len> size_t EncodeString(const String<Len>& str, bool allowControlChars, bool prependAsterisk = false) noexcept
{
@@ -97,8 +98,6 @@ class OutputBuffer
static unsigned int GetFreeBuffers() { return OUTPUT_BUFFER_COUNT - usedOutputBuffers; }
private:
- size_t EncodeChar(char c) noexcept;
-
OutputBuffer *next;
OutputBuffer *last;
diff --git a/src/Version.h b/src/Version.h
index 0982d50b..a156cd0b 100644
--- a/src/Version.h
+++ b/src/Version.h
@@ -20,7 +20,7 @@
#endif
#ifndef DATE
-# define DATE "2020-01-07b2"
+# define DATE "2020-01-07b3"
#endif
#define AUTHORS "reprappro, dc42, chrishamm, t3p3, dnewman, printm3d"