-
-static void process(keyevent_t event, action_t action);
-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;
-keyrecord_t delaying_layer = {};
-
-/* waiting keys buffer */
-#define WAITING_KEYS_BUFFER 3
-static keyrecord_t waiting_keys[WAITING_KEYS_BUFFER] = {};
-static uint8_t waiting_keys_head = 0;
-static bool waiting_keys_enqueue(keyevent_t event, action_t action)
-{
- debug("waiting_keys["); debug_dec(waiting_keys_head); debug("] = ");
- debug_hex16(action.code); debug("\n");
- if (waiting_keys_head < WAITING_KEYS_BUFFER) {
- waiting_keys[waiting_keys_head++] = (keyrecord_t){ .event = event,
- .action = action,
- .mods = host_get_mods() };
- } else {
- return true;
- }
-}
-static void waiting_keys_clear(void)
-{
- waiting_keys_head = 0;
-}
-static bool waiting_keys_has(keypos_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
- uint8_t tmp_mods = host_get_mods();
- for (uint8_t i = 0; i < waiting_keys_head; i++) {
- /* revive status of mods */
- host_set_mods(waiting_keys[i].mods);
- process(waiting_keys[i].event, keymap_get_action(current_layer,
- waiting_keys[i].event.key.row,
- waiting_keys[i].event.key.col));
- debug("waiting_keys_process_in_current_layer["); debug_dec(i); debug("]\n");
- }
- host_set_mods(tmp_mods);
- waiting_keys_clear();
-}