diff options
author | tmk <nobody@nowhere> | 2012-10-07 12:25:18 +0900 |
---|---|---|
committer | tmk <nobody@nowhere> | 2012-10-17 15:55:37 +0900 |
commit | e9af482690152f1beedbbb915791eccd2d5c22d1 (patch) | |
tree | 771d255d3f718fbfab1b2123bb3aefe2d3cdef49 | |
parent | c845fd078c8a8e38e66f625f669a34aa2400d63b (diff) | |
download | qmk_firmware-e9af482690152f1beedbbb915791eccd2d5c22d1.tar.gz qmk_firmware-e9af482690152f1beedbbb915791eccd2d5c22d1.zip |
Add repeating of Fn key with alt keycode.
-rw-r--r--[-rwxr-xr-x] | common/keyboard.c | 29 | ||||
-rw-r--r--[-rwxr-xr-x] | common/keyboard.h | 0 |
2 files changed, 22 insertions, 7 deletions
diff --git a/common/keyboard.c b/common/keyboard.c index 9f0c27670e..b7063a264e 100755..100644 --- a/common/keyboard.c +++ b/common/keyboard.c @@ -163,7 +163,7 @@ static void unregister_code(uint8_t code) * Event/State|IDLE DELAYING[f] WAITING[f,k] PRESSING * -----------+------------------------------------------------------------------ * Fn Down |IDLE(L+) WAITING(Sk) WAITING(Sk) - - * Up |IDLE(L-) IDLE(L-) IDLE(L-) IDLE(L-) + * Up |IDLE(L-) IDLE(L-) IDLE(L-) IDLE(L-) * Fnk Down |DELAYING(Sf) WAITING(Sk) WAINTING(Sk) PRESSING(Rf) * Up |IDLE(L-) IDLE(Rf,Uf) IDLE(Rf,Ps,Uf)*3 PRESSING(Uf) * Key Down |PRESSING(Rk) WAITING(Sk) WAITING(Sk) PRESSING(Rk) @@ -208,7 +208,6 @@ static void unregister_code(uint8_t code) static inline void process_key(keyevent_t event) { - /* TODO: ring buffer static keyrecord_t waiting_keys[5]; static uint8_t waiting_keys_head = 0; @@ -220,12 +219,12 @@ static inline void process_key(keyevent_t event) uint8_t tmp_mods; - //debug("kbdstate: "); debug_hex(kbdstate); debug("state: "); print_P(state_str(kbdstate)); debug(" kind: "); debug_hex(kind); debug(" code: "); debug_hex(code); if (event.pressed) { debug("d"); } else { debug("u"); } debug("\n"); + switch (kbdstate) { case IDLE: switch (kind) { @@ -236,9 +235,20 @@ static inline void process_key(keyevent_t event) layer_switch_off(code); break; case FNK_DOWN: - // store event - delayed_fn = (keyrecord_t) { .event = event, .code = code, .mods = keyboard_report->mods, .time = timer_read() }; - NEXT(DELAYING); + // repeat Fn alt key when press Fn key down, up then down again quickly + if (KEYEQ(delayed_fn.event.key, event.key) && + timer_elapsed(delayed_fn.time) < LAYER_DELAY) { + register_code(keymap_fn_keycode(FN_INDEX(code))); + NEXT(PRESSING); + } else { + delayed_fn = (keyrecord_t) { + .event = event, + .code = code, + .mods = keyboard_report->mods, + .time = timer_read() + }; + NEXT(DELAYING); + } break; case FNK_UP: layer_switch_off(code); @@ -298,7 +308,12 @@ static inline void process_key(keyevent_t event) case FNK_DOWN: case KEY_DOWN: case MOUSEKEY_DOWN: - waiting_key = (keyrecord_t) { .event = event, .code = code, .mods = keyboard_report->mods, .time = timer_read() }; + waiting_key = (keyrecord_t) { + .event = event, + .code = code, + .mods = keyboard_report->mods, + .time = timer_read() + }; NEXT(WAITING); break; case MOD_DOWN: diff --git a/common/keyboard.h b/common/keyboard.h index 2353805e17..2353805e17 100755..100644 --- a/common/keyboard.h +++ b/common/keyboard.h |