Add repeating of Fn key with alt keycode.
This commit is contained in:
		
							parent
							
								
									c845fd078c
								
							
						
					
					
						commit
						e9af482690
					
				
							
								
								
									
										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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user