-static void process(keyevent_t event);
-static void register_code(uint8_t code);
-static void unregister_code(uint8_t code);
-static void add_mods(uint8_t mods);
-static void del_mods(uint8_t mods);
-static void set_mods(uint8_t mods);
-static void clear_keyboard(void);
-static void clear_keyboard_but_mods(void);
-static bool sending_anykey(void);
-static void layer_switch(uint8_t new_layer);
-
-
-/* tap */
-#define TAP_TIME 200
-static keyevent_t last_event = {};
-static uint8_t tap_count = 0;
-
-/* layer */
-uint8_t default_layer = 0;
-uint8_t current_layer = 0;
-static keyrecord_t tapping_key = {};
-// time 0 means no event.
-#define IS_TAPPING (tapping_key.event.time != 0)
-/* TODO:
-#define IS_TAPPING_KEY(key) (tapping_key.event.time != 0 && KEYEQ(tapping_key.event.key, key))
- */
-
-/* waiting keys buffer */
-#define WAITING_KEYS_BUFFER 3
-static keyrecord_t waiting_keys[WAITING_KEYS_BUFFER] = {};
-// TODO: double buffer?
-static keyrecord_t waiting_keys0[WAITING_KEYS_BUFFER] = {};
-static keyrecord_t waiting_keys1[WAITING_KEYS_BUFFER] = {};
-static uint8_t waiting_keys_head = 0;
-static bool waiting_keys_enqueue(keyevent_t event)
-{
- debug("waiting_keys["); debug_dec(waiting_keys_head); debug("] = ");
- debug_hex16(event.key.raw); debug("\n");
- if (waiting_keys_head < WAITING_KEYS_BUFFER) {
- waiting_keys[waiting_keys_head++] = (keyrecord_t){ .event = event,
- .mods = host_get_mods() };
- } else {
- return true;
- }
-}
-static void waiting_keys_clear(void)
-{
- waiting_keys_head = 0;
-}
-static bool waiting_keys_has(key_t key)
-{
- for (uint8_t i = 0; i < waiting_keys_head; i++) {
- if KEYEQ(key, waiting_keys[i].event.key) return true;
- }
- return false;
-}
-static void waiting_keys_process_in_current_layer(void)
-{
- // TODO: in case of including layer key in waiting keys
- for (uint8_t i = 0; i < waiting_keys_head; i++) {
- debug("waiting_keys_process_in_current_layer["); debug_dec(i); debug("]\n");
- process(waiting_keys[i].event);
- }
- waiting_keys_clear();
-}
-
-