- if (fn_bits == last_bits) { // Fn key is not changed
- if (current_layer != new_layer) {
- // not switch layer yet
- if (timer_elapsed(last_timer) > LAYER_ENTER_DELAY) {
- debug("Fn case: 1,2,3(switch layer)\n");
- // case: 1,2,3
- // switch layer after LAYER_ENTER_DELAY elapse
- current_layer = new_layer;
- debug("timer_elapsed: "); debug_hex16(timer_elapsed(last_timer)); debug("\n");
- debug("switch layer: "); debug_hex(current_layer); debug("\n");
- } else if (usb_keyboard_has_key()) {
- debug("Fn case: 4(send Fn first, then add Fn to report)\n");
- // case: 4
- // send only Fn key first
- usb_keyboard_swap_report();
- usb_keyboard_clear_report();
- usb_keyboard_add_code(keymap_fn_keycode(last_bits));
- usb_keyboard_set_mods(last_mods);
- usb_keyboard_send();
- usb_keyboard_swap_report();
- // add Fn key to send with other keys
- usb_keyboard_add_code(keymap_fn_keycode(last_bits));
- // cancel layer switching
- new_layer = 0;
- }