diff --git a/keyboards/framework/factory.c b/keyboards/framework/factory.c index bc6d601e26..c3f3e84b23 100644 --- a/keyboards/framework/factory.c +++ b/keyboards/framework/factory.c @@ -15,6 +15,7 @@ enum factory_commands { f_emu_keypress = 0x01, // Next byte is keycode f_serialnum = 0x04, // Read device serial number + f_bios_mode = 0x05, // Read device serial number f_bootloader = 0xFE, }; @@ -61,6 +62,12 @@ void handle_factory_command(uint8_t *data) { uprintf("Serial number unavailable\n"); #endif break; + case f_bios_mode: + if (command_data[0] == 0x01) + bios_mode = true; + else + bios_mode = false; + break; default: uprintf("Unknown factory command: %u\n", factory_command_id); break; diff --git a/keyboards/framework/framework.c b/keyboards/framework/framework.c index 1b4e123e56..f3d1616f25 100644 --- a/keyboards/framework/framework.c +++ b/keyboards/framework/framework.c @@ -59,9 +59,50 @@ void suspend_wakeup_init_kb(void) { #endif } +// If in BIOS mode, no matter what the keys have been remapped to, always send them as the F keys +bool bios_mode = false; +bool handle_bios_hotkeys(uint16_t keycode, keyrecord_t *record) { + // Not in bios mode, no special handling, handle as normal + if (!bios_mode) + return true; + + if (record->event.key.col == 5 && record->event.key.row == 2) { + if (record->event.pressed) { + register_code(KC_F2); + } else { + unregister_code(KC_F2); + } + return false; + } + + if (record->event.key.col == 8 && record->event.key.row == 4) { + if (record->event.pressed) { + register_code(KC_F10); + } else { + unregister_code(KC_F10); + } + return false; + } + + if (record->event.key.col == 13 && record->event.key.row == 3) { + if (record->event.pressed) { + register_code(KC_F12); + } else { + unregister_code(KC_F12); + } + return false; + } + + return true; +} + bool process_record_kb(uint16_t keycode, keyrecord_t *record) { process_record_user(keycode, record); + if (!handle_bios_hotkeys(keycode, record)) { + return false; + } + #ifdef RGB_MATRIX_ENABLE uint8_t h; uint8_t s; diff --git a/keyboards/framework/framework.h b/keyboards/framework/framework.h index 68fd53b5c1..7624af1d41 100644 --- a/keyboards/framework/framework.h +++ b/keyboards/framework/framework.h @@ -23,6 +23,8 @@ enum framework_keycodes { FN_LOCK, }; +extern bool bios_mode; + #define SLEEP_GPIO GP0 #define MUX_ENABLE_GPIO GP4 #define BOOT_DONE_GPIO GP5