Support for Debug Codes - Dnnn (#19225)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
This commit is contained in:
committed by
Scott Lahteine
parent
bec1844954
commit
631457ffea
@@ -114,6 +114,11 @@ public:
|
||||
return valid_signless(p) || ((p[0] == '-' || p[0] == '+') && valid_signless(&p[1])); // [-+]?.?[0-9]
|
||||
}
|
||||
|
||||
FORCE_INLINE static bool valid_number(const char * const p) {
|
||||
// TODO: With MARLIN_DEV_MODE allow HEX values starting with "x"
|
||||
return valid_float(p);
|
||||
}
|
||||
|
||||
#if ENABLED(FASTER_GCODE_PARSER)
|
||||
|
||||
FORCE_INLINE static bool valid_int(const char * const p) {
|
||||
@@ -142,8 +147,12 @@ public:
|
||||
if (ind >= COUNT(param)) return false; // Only A-Z
|
||||
const bool b = TEST32(codebits, ind);
|
||||
if (b) {
|
||||
char * const ptr = command_ptr + param[ind];
|
||||
value_ptr = param[ind] && valid_float(ptr) ? ptr : nullptr;
|
||||
if (param[ind]) {
|
||||
char * const ptr = command_ptr + param[ind];
|
||||
value_ptr = valid_number(ptr) ? ptr : nullptr;
|
||||
}
|
||||
else
|
||||
value_ptr = nullptr;
|
||||
}
|
||||
return b;
|
||||
}
|
||||
@@ -198,7 +207,7 @@ public:
|
||||
static inline bool seen(const char c) {
|
||||
char *p = strgchr(command_args, c);
|
||||
const bool b = !!p;
|
||||
if (b) value_ptr = valid_float(&p[1]) ? &p[1] : nullptr;
|
||||
if (b) value_ptr = valid_number(&p[1]) ? &p[1] : nullptr;
|
||||
return b;
|
||||
}
|
||||
|
||||
@@ -401,6 +410,25 @@ public:
|
||||
static inline float linearval(const char c, const float dval=0) { return seenval(c) ? value_linear_units() : dval; }
|
||||
static inline float celsiusval(const char c, const float dval=0) { return seenval(c) ? value_celsius() : dval; }
|
||||
|
||||
#if ENABLED(MARLIN_DEV_MODE)
|
||||
|
||||
static inline uint8_t* hex_adr_val(const char c, uint8_t * const dval=nullptr) {
|
||||
if (!seen(c) || *value_ptr != 'x') return dval;
|
||||
uint8_t *out = nullptr;
|
||||
for (char *vp = value_ptr + 1; HEXCHR(*vp) >= 0; vp++)
|
||||
out = (uint8_t*)((uintptr_t(out) << 8) | HEXCHR(*vp));
|
||||
return out;
|
||||
}
|
||||
|
||||
static inline uint16_t hex_val(const char c, uint16_t const dval=0) {
|
||||
if (!seen(c) || *value_ptr != 'x') return dval;
|
||||
uint16_t out = 0;
|
||||
for (char *vp = value_ptr + 1; HEXCHR(*vp) >= 0; vp++)
|
||||
out = ((out) << 8) | HEXCHR(*vp);
|
||||
return out;
|
||||
}
|
||||
|
||||
#endif
|
||||
};
|
||||
|
||||
extern GCodeParser parser;
|
||||
|
||||
Reference in New Issue
Block a user