Add repeating of Fn key with alt keycode.
This commit is contained in:
parent
c845fd078c
commit
e9af482690
2 changed files with 22 additions and 7 deletions
29
common/keyboard.c
Executable file → Normal file
29
common/keyboard.c
Executable file → Normal file
|
@ -163,7 +163,7 @@ static void unregister_code(uint8_t code)
|
||||||
* Event/State|IDLE DELAYING[f] WAITING[f,k] PRESSING
|
* Event/State|IDLE DELAYING[f] WAITING[f,k] PRESSING
|
||||||
* -----------+------------------------------------------------------------------
|
* -----------+------------------------------------------------------------------
|
||||||
* Fn Down |IDLE(L+) WAITING(Sk) WAITING(Sk) -
|
* 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)
|
* Fnk Down |DELAYING(Sf) WAITING(Sk) WAINTING(Sk) PRESSING(Rf)
|
||||||
* Up |IDLE(L-) IDLE(Rf,Uf) IDLE(Rf,Ps,Uf)*3 PRESSING(Uf)
|
* Up |IDLE(L-) IDLE(Rf,Uf) IDLE(Rf,Ps,Uf)*3 PRESSING(Uf)
|
||||||
* Key Down |PRESSING(Rk) WAITING(Sk) WAITING(Sk) PRESSING(Rk)
|
* 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)
|
static inline void process_key(keyevent_t event)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* TODO: ring buffer
|
/* TODO: ring buffer
|
||||||
static keyrecord_t waiting_keys[5];
|
static keyrecord_t waiting_keys[5];
|
||||||
static uint8_t waiting_keys_head = 0;
|
static uint8_t waiting_keys_head = 0;
|
||||||
|
@ -220,12 +219,12 @@ static inline void process_key(keyevent_t event)
|
||||||
|
|
||||||
uint8_t tmp_mods;
|
uint8_t tmp_mods;
|
||||||
|
|
||||||
//debug("kbdstate: "); debug_hex(kbdstate);
|
|
||||||
debug("state: "); print_P(state_str(kbdstate));
|
debug("state: "); print_P(state_str(kbdstate));
|
||||||
debug(" kind: "); debug_hex(kind);
|
debug(" kind: "); debug_hex(kind);
|
||||||
debug(" code: "); debug_hex(code);
|
debug(" code: "); debug_hex(code);
|
||||||
if (event.pressed) { debug("d"); } else { debug("u"); }
|
if (event.pressed) { debug("d"); } else { debug("u"); }
|
||||||
debug("\n");
|
debug("\n");
|
||||||
|
|
||||||
switch (kbdstate) {
|
switch (kbdstate) {
|
||||||
case IDLE:
|
case IDLE:
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
|
@ -236,9 +235,20 @@ static inline void process_key(keyevent_t event)
|
||||||
layer_switch_off(code);
|
layer_switch_off(code);
|
||||||
break;
|
break;
|
||||||
case FNK_DOWN:
|
case FNK_DOWN:
|
||||||
// store event
|
// repeat Fn alt key when press Fn key down, up then down again quickly
|
||||||
delayed_fn = (keyrecord_t) { .event = event, .code = code, .mods = keyboard_report->mods, .time = timer_read() };
|
if (KEYEQ(delayed_fn.event.key, event.key) &&
|
||||||
NEXT(DELAYING);
|
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;
|
break;
|
||||||
case FNK_UP:
|
case FNK_UP:
|
||||||
layer_switch_off(code);
|
layer_switch_off(code);
|
||||||
|
@ -298,7 +308,12 @@ static inline void process_key(keyevent_t event)
|
||||||
case FNK_DOWN:
|
case FNK_DOWN:
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
case MOUSEKEY_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);
|
NEXT(WAITING);
|
||||||
break;
|
break;
|
||||||
case MOD_DOWN:
|
case MOD_DOWN:
|
||||||
|
|
0
common/keyboard.h
Executable file → Normal file
0
common/keyboard.h
Executable file → Normal file
Loading…
Reference in a new issue