What are Dc, Tc, Uc useful for?

Hello. At https://github.com/keyboardio/Kaleidoscope-Macros/blob/master/src/MacroSteps.h#L34:

#define Dc(k) MACRO_ACTION_STEP_KEYCODEDOWN, (Key_ ## k).keyCode
#define Uc(k) MACRO_ACTION_STEP_KEYCODEUP, (Key_ ## k).keyCode
#define Tc(k) MACRO_ACTION_STEP_TAPCODE, (Key_ ## k).keyCode

What are these Dc, Tc, Uc useful for? The readme doesn’t talk about them and they aren’t used in any of the Kaleidoscope code.

They are an optimization. T(), Tr() & friends require three bytes of PROGMEM, one for the step, two for the keycode. Tc() & co need only two, because we don’t store the key flags. When one’s low on free PROGMEM space, yet, wants to use macros, this is one way to save a few bytes. The downside is that this only works for keys where the flags are empty (so, only normal keyboard keys; no mouse keys, no consumer keys, etc).

1 Like