|
|
@ -26,7 +26,6 @@ void setup();
|
|
|
|
#include "layers.h"
|
|
|
|
#include "layers.h"
|
|
|
|
#include "macro_map.h"
|
|
|
|
#include "macro_map.h"
|
|
|
|
#include "kaleidoscope_internal/event_dispatch.h"
|
|
|
|
#include "kaleidoscope_internal/event_dispatch.h"
|
|
|
|
#include "kaleidoscope_internal/deprecations.h"
|
|
|
|
|
|
|
|
#include "macro_helpers.h"
|
|
|
|
#include "macro_helpers.h"
|
|
|
|
#include "plugin.h"
|
|
|
|
#include "plugin.h"
|
|
|
|
|
|
|
|
|
|
|
@ -109,82 +108,6 @@ class Kaleidoscope_ {
|
|
|
|
return millis_at_cycle_start_;
|
|
|
|
return millis_at_cycle_start_;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ---- Kaleidoscope.use() ----
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if KALEIDOSCOPE_ENABLE_V1_PLUGIN_API
|
|
|
|
|
|
|
|
// First, we have the zero-argument version, which will satisfy the tail case.
|
|
|
|
|
|
|
|
inline void use() {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Then, the one-argument version, that gives us type safety for a single
|
|
|
|
|
|
|
|
// plugin.
|
|
|
|
|
|
|
|
inline void DEPRECATED(USE) use(kaleidoscope::Plugin *p) {
|
|
|
|
|
|
|
|
p->begin();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// We have a no-op with a int argument, as a temporary hack until we remove
|
|
|
|
|
|
|
|
// the last instance of a NULL-terminated Kaleidoscope.use() call.
|
|
|
|
|
|
|
|
inline void use(int) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// And the magic is in the last one, a template. The first parameter is
|
|
|
|
|
|
|
|
// matched out by the compiler, and passed to one of the functions above. The
|
|
|
|
|
|
|
|
// rest of the parameter pack (which may be an empty set in a recursive case),
|
|
|
|
|
|
|
|
// are passed back to either ourselves, or the zero-argument version a few
|
|
|
|
|
|
|
|
// lines above.
|
|
|
|
|
|
|
|
template <typename... Plugins>
|
|
|
|
|
|
|
|
void DEPRECATED(USE) use(kaleidoscope::Plugin *first, Plugins&&... plugins) {
|
|
|
|
|
|
|
|
#pragma GCC diagnostic push
|
|
|
|
|
|
|
|
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
|
|
|
|
|
|
|
use(first);
|
|
|
|
|
|
|
|
use(plugins...);
|
|
|
|
|
|
|
|
#pragma GCC diagnostic pop
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
// NOTE: Do **NOT** remove this when sunsetting the V1 API!
|
|
|
|
|
|
|
|
template <typename Plugin__>
|
|
|
|
|
|
|
|
inline void use(Plugin__ first, ...) {
|
|
|
|
|
|
|
|
static_assert(sizeof(Plugin__) < 0, _DEPRECATE(_DEPRECATED_MESSAGE_USE));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ---- hooks ----
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
* In most cases, one only wants a single copy of a hook. On the other hand,
|
|
|
|
|
|
|
|
* plugins that depend on other plugins, may want to make it easier for the
|
|
|
|
|
|
|
|
* end-user to use the plugin, and call the setup function of the dependent
|
|
|
|
|
|
|
|
* plugins too. In case the end-user calls the same setup function, we'd end up
|
|
|
|
|
|
|
|
* with hooks registered multiple times.
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* To avoid this, protection against double-registration has been introduced.
|
|
|
|
|
|
|
|
* The `event_handler_hook_use` and `loop_hook_use` functions will only allow
|
|
|
|
|
|
|
|
* one copy of the hook. The `event_handler_hook_append` and `loop_hook_append`
|
|
|
|
|
|
|
|
* functions will, on the other hand, just append the hooks, and not care about
|
|
|
|
|
|
|
|
* protection.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
#if KALEIDOSCOPE_ENABLE_V1_PLUGIN_API
|
|
|
|
|
|
|
|
typedef Key(*eventHandlerHook)(Key mappedKey, byte row, byte col, uint8_t keyState);
|
|
|
|
|
|
|
|
typedef void (*loopHook)(bool postClear);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static eventHandlerHook eventHandlers[HOOK_MAX];
|
|
|
|
|
|
|
|
static loopHook loopHooks[HOOK_MAX];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void replaceEventHandlerHook(eventHandlerHook oldHook, eventHandlerHook newHook)
|
|
|
|
|
|
|
|
DEPRECATED(EVENT_HANDLER_HOOK);
|
|
|
|
|
|
|
|
static void appendEventHandlerHook(eventHandlerHook hook)
|
|
|
|
|
|
|
|
DEPRECATED(EVENT_HANDLER_HOOK);
|
|
|
|
|
|
|
|
static void useEventHandlerHook(eventHandlerHook hook)
|
|
|
|
|
|
|
|
DEPRECATED(EVENT_HANDLER_HOOK);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void replaceLoopHook(loopHook oldHook, loopHook newHook)
|
|
|
|
|
|
|
|
DEPRECATED(LOOP_HOOK);
|
|
|
|
|
|
|
|
static void appendLoopHook(loopHook hook)
|
|
|
|
|
|
|
|
DEPRECATED(LOOP_HOOK);
|
|
|
|
|
|
|
|
static void useLoopHook(loopHook hook)
|
|
|
|
|
|
|
|
DEPRECATED(LOOP_HOOK);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static bool focusHook(const char *command);
|
|
|
|
static bool focusHook(const char *command);
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
private:
|
|
|
|