mirror of https://github.com/Desuuuu/klipper.git
ctr: Add support for multiple integers in DECL_CTR_INT
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
1b83fb72f5
commit
84fd89b8cf
|
@ -17,16 +17,16 @@
|
||||||
|
|
||||||
// Declare a constant exported to the host
|
// Declare a constant exported to the host
|
||||||
#define DECL_CONSTANT(NAME, VALUE) \
|
#define DECL_CONSTANT(NAME, VALUE) \
|
||||||
DECL_CTR_INT("_DECL_CONSTANT " NAME, (VALUE))
|
DECL_CTR_INT("_DECL_CONSTANT " NAME, 1, CTR_INT(VALUE))
|
||||||
#define DECL_CONSTANT_STR(NAME, VALUE) \
|
#define DECL_CONSTANT_STR(NAME, VALUE) \
|
||||||
DECL_CTR("_DECL_CONSTANT_STR " NAME " " VALUE)
|
DECL_CTR("_DECL_CONSTANT_STR " NAME " " VALUE)
|
||||||
|
|
||||||
// Declare an enumeration
|
// Declare an enumeration
|
||||||
#define DECL_ENUMERATION(ENUM, NAME, VALUE) \
|
#define DECL_ENUMERATION(ENUM, NAME, VALUE) \
|
||||||
DECL_CTR_INT("_DECL_ENUMERATION " ENUM " " NAME, (VALUE))
|
DECL_CTR_INT("_DECL_ENUMERATION " ENUM " " NAME, 1, CTR_INT(VALUE))
|
||||||
#define DECL_ENUMERATION_RANGE(ENUM, NAME, VALUE, COUNT) \
|
#define DECL_ENUMERATION_RANGE(ENUM, NAME, VALUE, COUNT) \
|
||||||
DECL_CTR_INT("_DECL_ENUMERATION_RANGE " ENUM " " NAME \
|
DECL_CTR_INT("_DECL_ENUMERATION_RANGE " ENUM " " NAME \
|
||||||
" " __stringify(COUNT), (VALUE))
|
" " __stringify(COUNT), 1, CTR_INT(VALUE))
|
||||||
|
|
||||||
// Send an output message (and declare a static message type for it)
|
// Send an output message (and declare a static message type for it)
|
||||||
#define output(FMT, args...) \
|
#define output(FMT, args...) \
|
||||||
|
|
28
src/ctr.h
28
src/ctr.h
|
@ -14,20 +14,24 @@
|
||||||
static char __PASTE(_DECLS_, __LINE__)[] __attribute__((used)) \
|
static char __PASTE(_DECLS_, __LINE__)[] __attribute__((used)) \
|
||||||
__section(".compile_time_request") = (REQUEST)
|
__section(".compile_time_request") = (REQUEST)
|
||||||
|
|
||||||
// Helper macros for encoding an integer
|
// Macro to encode an integer for use with DECL_CTR_INT()
|
||||||
#define CTR_HEX(H) ((H) > 9 ? (H) - 10 + 'A' : (H) + '0')
|
#define _CTR_HEX(H) ((H) > 9 ? (H) - 10 + 'A' : (H) + '0')
|
||||||
#define CTR_INT(V, S) CTR_HEX(((uint32_t)(V) >> (S)) & 0x0f)
|
#define _CTR_INT(V, S) _CTR_HEX(((uint32_t)(V) >> (S)) & 0x0f)
|
||||||
|
#define CTR_INT(VALUE) { \
|
||||||
|
' ', (VALUE) < 0 ? '-' : '+', '0', 'x', \
|
||||||
|
_CTR_INT((VALUE),28), _CTR_INT((VALUE),24), \
|
||||||
|
_CTR_INT((VALUE),20), _CTR_INT((VALUE),16), \
|
||||||
|
_CTR_INT((VALUE),12), _CTR_INT((VALUE),8), \
|
||||||
|
_CTR_INT((VALUE),4), _CTR_INT((VALUE),0) }
|
||||||
|
|
||||||
// Declare a compile time request with an integer expression
|
// Declare a compile time request with an integer expression
|
||||||
#define DECL_CTR_INT(REQUEST, VALUE) \
|
#define DECL_CTR_INT(REQUEST, PARAM_COUNT, args...) \
|
||||||
static struct { char _r[sizeof(REQUEST)]; char _v[12]; } \
|
static struct { \
|
||||||
__PASTE(_DECLI_, __LINE__) __attribute__((used)) \
|
char _request[sizeof(REQUEST)-1]; \
|
||||||
|
char _values[(PARAM_COUNT)][12]; \
|
||||||
|
char _end_of_line; \
|
||||||
|
} __PASTE(_DECLI_, __LINE__) __attribute__((used)) \
|
||||||
__section(".compile_time_request") = { \
|
__section(".compile_time_request") = { \
|
||||||
REQUEST " ", { \
|
(REQUEST), { args }, 0 }
|
||||||
(VALUE) < 0 ? '-' : '+', '0', 'x', \
|
|
||||||
CTR_INT((VALUE),28), CTR_INT((VALUE),24), \
|
|
||||||
CTR_INT((VALUE),20), CTR_INT((VALUE),16), \
|
|
||||||
CTR_INT((VALUE),12), CTR_INT((VALUE),8), \
|
|
||||||
CTR_INT((VALUE),4), CTR_INT((VALUE),0), 0 } }
|
|
||||||
|
|
||||||
#endif // ctr.h
|
#endif // ctr.h
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
// Declare an IRQ handler
|
// Declare an IRQ handler
|
||||||
#define DECL_ARMCM_IRQ(FUNC, NUM) \
|
#define DECL_ARMCM_IRQ(FUNC, NUM) \
|
||||||
DECL_CTR_INT("DECL_ARMCM_IRQ " __stringify(FUNC), (NUM))
|
DECL_CTR_INT("DECL_ARMCM_IRQ " __stringify(FUNC), 1, CTR_INT(NUM))
|
||||||
|
|
||||||
// Statically declare an IRQ handler and run-time enable it
|
// Statically declare an IRQ handler and run-time enable it
|
||||||
#define armcm_enable_irq(FUNC, NUM, PRIORITY) do { \
|
#define armcm_enable_irq(FUNC, NUM, PRIORITY) do { \
|
||||||
|
|
Loading…
Reference in New Issue