aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/command.h18
-rw-r--r--src/ctr.h13
2 files changed, 20 insertions, 11 deletions
diff --git a/src/command.h b/src/command.h
index c924e59d..e0911733 100644
--- a/src/command.h
+++ b/src/command.h
@@ -7,17 +7,19 @@
#include "ctr.h" // DECL_CTR
// Declare a function to run when the specified command is received
+#define DECL_COMMAND_FLAGS(FUNC, FLAGS, MSG) \
+ DECL_CTR("_DECL_COMMAND " __stringify(FUNC) " " __stringify(FLAGS) " " MSG)
#define DECL_COMMAND(FUNC, MSG) \
- _DECL_COMMAND(FUNC, 0, MSG)
-#define DECL_COMMAND_FLAGS(FUNC, FLAGS, MSG) \
- _DECL_COMMAND(FUNC, FLAGS, MSG)
+ DECL_COMMAND_FLAGS(FUNC, 0, MSG)
// Flags for command handler declarations.
#define HF_IN_SHUTDOWN 0x01 // Handler can run even when in emergency stop
// Declare a constant exported to the host
-#define DECL_CONSTANT(NAME, VALUE) _DECL_CONSTANT(NAME, __stringify(VALUE))
-#define DECL_CONSTANT_STR(NAME, VALUE) _DECL_CONSTANT(NAME, VALUE)
+#define DECL_CONSTANT(NAME, VALUE) \
+ DECL_CTR_INT("_DECL_CONSTANT " NAME, (VALUE))
+#define DECL_CONSTANT_STR(NAME, VALUE) \
+ DECL_CTR("_DECL_CONSTANT_STR " NAME " " VALUE)
// Send an output message (and declare a static message type for it)
#define output(FMT, args...) \
@@ -85,12 +87,6 @@ const struct command_encoder *ctr_lookup_encoder(const char *str);
const struct command_encoder *ctr_lookup_output(const char *str);
uint8_t ctr_lookup_static_string(const char *str);
-#define _DECL_COMMAND(FUNC, FLAGS, MSG) \
- DECL_CTR("_DECL_COMMAND " __stringify(FUNC) " " __stringify(FLAGS) " " MSG)
-
-#define _DECL_CONSTANT(NAME, VALUE) \
- DECL_CTR("_DECL_CONSTANT " NAME " " VALUE)
-
#define _DECL_ENCODER(FMT) ({ \
DECL_CTR("_DECL_ENCODER " FMT); \
ctr_lookup_encoder(FMT); })
diff --git a/src/ctr.h b/src/ctr.h
index 3396644c..959cef45 100644
--- a/src/ctr.h
+++ b/src/ctr.h
@@ -14,4 +14,17 @@
static char __PASTE(_DECLS_, __LINE__)[] __attribute__((used)) \
__section(".compile_time_request") = (REQUEST)
+#define CTR_INT(V, S) ((((uint32_t)(V) >> S) & 0x3f) + 48)
+
+// Declare a compile time request with an integer expression
+#define DECL_CTR_INT(REQUEST, VALUE) \
+ static struct { char _r[sizeof(REQUEST)]; char _v[8]; } \
+ __PASTE(_DECLI_, __LINE__) __attribute__((used)) \
+ __section(".compile_time_request") = { \
+ REQUEST " ", { \
+ (VALUE) < 0 ? '-' : '+', \
+ CTR_INT((VALUE),0), CTR_INT((VALUE),6), \
+ CTR_INT((VALUE),12), CTR_INT((VALUE),18), \
+ CTR_INT((VALUE),24), CTR_INT((VALUE),30), 0 } }
+
#endif // ctr.h