@@ -235,6 +235,7 @@ void board_kblight_init(void)
235
235
#define FN_PRESSED BIT(0)
236
236
#define FN_LOCKED BIT(1)
237
237
static uint8_t Fn_key ;
238
+ static uint8_t keep_fn_key_code ;
238
239
239
240
void fnkey_shutdown (void ) {
240
241
uint8_t current_kb = 0 ;
@@ -263,13 +264,26 @@ void fnkey_startup(void) {
263
264
}
264
265
DECLARE_HOOK (HOOK_CHIPSET_STARTUP , fnkey_startup , HOOK_PRIO_DEFAULT );
265
266
267
+ static void fn_keep_check (int8_t pressed )
268
+ {
269
+ if (pressed )
270
+ keep_fn_key_code = 1 ;
271
+ else
272
+ keep_fn_key_code = 0 ;
273
+ }
274
+
266
275
int hotkey_F1_F12 (uint16_t * key_code , uint16_t lock , int8_t pressed )
267
276
{
268
277
const uint16_t prss_key = * key_code ;
269
278
270
- if (!(Fn_key & FN_LOCKED ) && lock & FN_PRESSED )
279
+ if (!(Fn_key & FN_LOCKED ) &&
280
+ (lock & FN_PRESSED ) &&
281
+ !keep_fn_key_code )
271
282
return EC_SUCCESS ;
272
- else if (Fn_key & FN_LOCKED && !(Fn_key & FN_PRESSED ))
283
+ else if (Fn_key & FN_LOCKED &&
284
+ !(lock & FN_PRESSED ))
285
+ return EC_SUCCESS ;
286
+ else if (!pressed && !keep_fn_key_code )
273
287
return EC_SUCCESS ;
274
288
275
289
switch (prss_key ) {
@@ -278,33 +292,26 @@ int hotkey_F1_F12(uint16_t *key_code, uint16_t lock, int8_t pressed)
278
292
break ;
279
293
case SCANCODE_F2 : /* VOLUME_DOWN */
280
294
* key_code = SCANCODE_VOLUME_DOWN ;
281
-
282
295
break ;
283
296
case SCANCODE_F3 : /* VOLUME_UP */
284
297
* key_code = SCANCODE_VOLUME_UP ;
285
-
286
298
break ;
287
299
case SCANCODE_F4 : /* PREVIOUS_TRACK */
288
300
* key_code = SCANCODE_PREV_TRACK ;
289
-
290
301
break ;
291
302
case SCANCODE_F5 : /* PLAY_PAUSE */
292
303
* key_code = 0xe034 ;
293
-
294
304
break ;
295
305
case SCANCODE_F6 : /* NEXT_TRACK */
296
306
* key_code = SCANCODE_NEXT_TRACK ;
297
-
298
307
break ;
299
308
case SCANCODE_F7 : /* TODO: DIM_SCREEN */
300
309
update_hid_key (HID_KEY_DISPLAY_BRIGHTNESS_DN , pressed );
301
310
return EC_ERROR_UNIMPLEMENTED ;
302
-
303
311
break ;
304
312
case SCANCODE_F8 : /* TODO: BRIGHTEN_SCREEN */
305
313
update_hid_key (HID_KEY_DISPLAY_BRIGHTNESS_UP , pressed );
306
314
return EC_ERROR_UNIMPLEMENTED ;
307
-
308
315
break ;
309
316
case SCANCODE_F9 : /* EXTERNAL_DISPLAY */
310
317
if (pressed ) {
@@ -319,7 +326,6 @@ int hotkey_F1_F12(uint16_t *key_code, uint16_t lock, int8_t pressed)
319
326
case SCANCODE_F10 : /* FLIGHT_MODE */
320
327
update_hid_key (HID_KEY_AIRPLANE_MODE , pressed );
321
328
return EC_ERROR_UNIMPLEMENTED ;
322
-
323
329
break ;
324
330
case SCANCODE_F11 :
325
331
/*
@@ -333,9 +339,11 @@ int hotkey_F1_F12(uint16_t *key_code, uint16_t lock, int8_t pressed)
333
339
case SCANCODE_F12 : /* TODO: FRAMEWORK */
334
340
/* Media Select scan code */
335
341
* key_code = 0xE050 ;
336
-
337
342
break ;
343
+ default :
344
+ return EC_SUCCESS ;
338
345
}
346
+ fn_keep_check (pressed );
339
347
return EC_SUCCESS ;
340
348
}
341
349
0 commit comments