-
-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 300
-/* This counts up when tap occurs */
-static uint8_t tap_count = 0;
-static bool is_tap_key(keyevent_t event)
-{
- action_t action = keymap_get_action(current_layer, event.key.pos.row, event.key.pos.col);
- switch (action.kind.id) {
- case ACT_LMODS_TAP:
- case ACT_RMODS_TAP:
- return true;
- case ACT_LAYER_PRESSED:
- case ACT_LAYER_BIT:
- switch (action.layer.code) {
- case 0x00:
- case 0xF1 ... 0xFF:
- return false;
- case 0xF0:
- default:
- return true;
- }
- return false;
- }
- return false;
-}
-
-/* layer */
-uint8_t default_layer = 0;
-uint8_t current_layer = 0;
-static keyevent_t tapping_event = {};
-
-/* TAPPING: This indicates that whether tap or not is not decided yet. */
-// NOTE: keyevent_t.time 0 means no event.
-#define IS_TAPPING(k) (tapping_event.time != 0 && KEYEQ(tapping_event.key, (k)))
-
-/* waiting keys buffer */
-#define WAITING_KEYS_BUFFER 8
-static keyevent_t waiting_events[WAITING_KEYS_BUFFER] = {};
-static uint8_t waiting_events_head = 0;
-static bool waiting_events_enqueue(keyevent_t event)
-{
- if (IS_NOEVENT(event)) { return true; }
-
- if (waiting_events_head < WAITING_KEYS_BUFFER) {
- debug("waiting_events["); debug_dec(waiting_events_head); debug("] = ");
- debug_hex16(event.key.raw); debug("\n");
- waiting_events[waiting_events_head++] = event;
- return true;
- }
- debug("waiting_events_enqueue: Over flow.\n");
- return false;
-}
-static void waiting_events_clear(void)
-{
- waiting_events_head = 0;
-}
-static bool waiting_events_has(key_t key)
-{
- for (uint8_t i = 0; i < waiting_events_head; i++) {
- if KEYEQ(key, waiting_events[i].key) return true;
- }
- return false;
-}
-static void waiting_events_process_in_current_layer(void)
-{
- // TODO: in case of including tap key in waiting keys
- for (uint8_t i = 0; i < waiting_events_head; i++) {
- debug("waiting_events_process_in_current_layer["); debug_dec(i); debug("]\n");
- process(waiting_events[i]);
- }
- waiting_events_clear();
-}
-static bool waiting_events_has_anykey_pressed(void)
-{
- for (uint8_t i = 0; i < waiting_events_head; i++) {
- if (waiting_events[i].pressed) return true;
- }
- return false;
-}