DEBUG: Working BIOS hotkeys
Works from cold boot and from reboot in windows. Signed-off-by: Daniel Schaefer <dhs@frame.work>
This commit is contained in:
parent
324b8d7736
commit
c6ba5ad0a2
@ -79,7 +79,7 @@ void handle_factory_command(uint8_t *data) {
|
|||||||
rgb_matrix_sethsv_noeeprom(0, 0, 0xFF);
|
rgb_matrix_sethsv_noeeprom(0, 0, 0xFF);
|
||||||
rgb_matrix_mode_noeeprom(1);
|
rgb_matrix_mode_noeeprom(1);
|
||||||
#endif
|
#endif
|
||||||
bios_mode = false;
|
//bios_mode = false;
|
||||||
writePin(GP24, 0);
|
writePin(GP24, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "quantum.h"
|
#include "quantum.h"
|
||||||
#include "framework.h"
|
#include "framework.h"
|
||||||
|
#include "os_detection.h"
|
||||||
|
|
||||||
void keyboard_post_init_kb(void) {
|
void keyboard_post_init_kb(void) {
|
||||||
keyboard_post_init_user();
|
keyboard_post_init_user();
|
||||||
@ -65,7 +66,7 @@ void suspend_wakeup_init_kb(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If in BIOS mode, no matter what the keys have been remapped to, always send them as the F keys
|
// 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 bios_mode = true;
|
||||||
bool handle_bios_hotkeys(uint16_t keycode, keyrecord_t *record) {
|
bool handle_bios_hotkeys(uint16_t keycode, keyrecord_t *record) {
|
||||||
// Not in bios mode, no special handling, handle as normal
|
// Not in bios mode, no special handling, handle as normal
|
||||||
if (!bios_mode)
|
if (!bios_mode)
|
||||||
@ -174,6 +175,66 @@ bool handle_bios_hotkeys(uint16_t keycode, keyrecord_t *record) {
|
|||||||
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||||
process_record_user(keycode, record);
|
process_record_user(keycode, record);
|
||||||
|
|
||||||
|
os_variant_t os = detected_host_os();
|
||||||
|
#if defined(RGB_MATRIX_ENABLE)
|
||||||
|
//rgb_matrix_mode_noeeprom(1);
|
||||||
|
#endif
|
||||||
|
bios_mode = true;
|
||||||
|
writePin(GP24, 0);
|
||||||
|
//#if defined(RGB_MATRIX_ENABLE)
|
||||||
|
// switch (os) {
|
||||||
|
// case OS_UNSURE:
|
||||||
|
// //rgb_matrix_sethsv(0, 0, 255); // White
|
||||||
|
// break;
|
||||||
|
// case OS_LINUX:
|
||||||
|
// bios_mode = false
|
||||||
|
// writePin(GP24, 0);
|
||||||
|
// // Works on laptop and android
|
||||||
|
// //rgb_matrix_sethsv(213, 255, 255); // purple
|
||||||
|
// break;
|
||||||
|
// case OS_WINDOWS:
|
||||||
|
// bios_mode = false
|
||||||
|
// writePin(GP24, 0);
|
||||||
|
// // works
|
||||||
|
// //rgb_matrix_sethsv(170, 255, 255); // blue
|
||||||
|
// break;
|
||||||
|
// case OS_MACOS:
|
||||||
|
// //rgb_matrix_sethsv(85, 255, 255); // green
|
||||||
|
// break;
|
||||||
|
// case OS_UEFI:
|
||||||
|
// case OS_IOS:
|
||||||
|
// bios_mode = true
|
||||||
|
// writePin(GP24, 1)
|
||||||
|
// // works on M1 mac
|
||||||
|
// //rgb_matrix_sethsv(43, 255, 255); // yellow
|
||||||
|
// break;
|
||||||
|
// default:
|
||||||
|
// //rgb_matrix_sethsv(125, 255, 255); // cyan
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
//#else
|
||||||
|
switch (os) {
|
||||||
|
case OS_UNSURE:
|
||||||
|
break;
|
||||||
|
case OS_LINUX:
|
||||||
|
//bios_mode = false;
|
||||||
|
//writePin(GP24, 1);
|
||||||
|
break;
|
||||||
|
case OS_WINDOWS:
|
||||||
|
bios_mode = false;
|
||||||
|
writePin(GP24, 1);
|
||||||
|
break;
|
||||||
|
case OS_MACOS:
|
||||||
|
break;
|
||||||
|
case OS_UEFI:
|
||||||
|
case OS_IOS:
|
||||||
|
bios_mode = true;
|
||||||
|
writePin(GP24, 0);
|
||||||
|
// works on M1 mac
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//#endif
|
||||||
|
|
||||||
if (!handle_bios_hotkeys(keycode, record)) {
|
if (!handle_bios_hotkeys(keycode, record)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -233,6 +294,8 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
|||||||
default:
|
default:
|
||||||
return true; // Process all other keycodes normally
|
return true; // Process all other keycodes normally
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool led_update_kb(led_t led_state) {
|
bool led_update_kb(led_t led_state) {
|
||||||
|
@ -313,10 +313,26 @@ bool handle_idle(void) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef RGB_MATRIX_ENABLE
|
||||||
|
static bool rgb_init = false;
|
||||||
|
static uint16_t rgb_init_timer = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Overriding behavior of matrix_scan from quantum/matrix.c
|
* Overriding behavior of matrix_scan from quantum/matrix.c
|
||||||
*/
|
*/
|
||||||
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
|
bool matrix_scan_custom(matrix_row_t current_matrix[]) {
|
||||||
|
#ifdef RGB_MATRIX_ENABLE
|
||||||
|
if (!rgb_init) {
|
||||||
|
if (!bios_mode) {
|
||||||
|
//if (rgb_init_timer > 0 && TIMER_DIFF_16(timer_read(), rgb_init_timer) >= 10000) {
|
||||||
|
//if (rgb_init_timer > 0 && TIMER_DIFF_16(timer_read(), rgb_init_timer) >= 100) {
|
||||||
|
//if (!bios_mode || rgb_init_timer > 0 && TIMER_DIFF_16(timer_read(), rgb_init_timer) >= 10000) {
|
||||||
|
rgb_matrix_init();
|
||||||
|
rgb_init = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
|
|
||||||
adc10ksample_t voltages[MATRIX_ROWS][MATRIX_COLS] = {};
|
adc10ksample_t voltages[MATRIX_ROWS][MATRIX_COLS] = {};
|
||||||
@ -436,4 +452,8 @@ void matrix_init_custom(void) {
|
|||||||
// Set unused pins to input to avoid interfering. They're hooked up to rows 5 and 6
|
// Set unused pins to input to avoid interfering. They're hooked up to rows 5 and 6
|
||||||
setPinInput(GP6);
|
setPinInput(GP6);
|
||||||
setPinInput(GP7);
|
setPinInput(GP7);
|
||||||
|
|
||||||
|
#ifdef RGB_MATRIX_ENABLE
|
||||||
|
rgb_init_timer = timer_read();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,9 @@ RAW_ENABLE = no
|
|||||||
BACKLIGHT_ENABLE = yes
|
BACKLIGHT_ENABLE = yes
|
||||||
BACKLIGHT_DRIVER = pwm
|
BACKLIGHT_DRIVER = pwm
|
||||||
|
|
||||||
|
OS_DETECTION_ENABLE = yes
|
||||||
|
#OS_DETECTION_DEBUG_ENABLE = yes
|
||||||
|
|
||||||
# Custom matrix scanning code via ADC
|
# Custom matrix scanning code via ADC
|
||||||
CUSTOM_MATRIX = lite
|
CUSTOM_MATRIX = lite
|
||||||
SRC += matrix.c analog.c
|
SRC += matrix.c analog.c
|
||||||
|
@ -384,19 +384,20 @@ void quantum_init(void) {
|
|||||||
backlight_init_ports();
|
backlight_init_ports();
|
||||||
#endif
|
#endif
|
||||||
#ifdef AUDIO_ENABLE
|
#ifdef AUDIO_ENABLE
|
||||||
audio_init();
|
audio_init()
|
||||||
#endif
|
#endif
|
||||||
#ifdef LED_MATRIX_ENABLE
|
#ifdef LED_MATRIX_ENABLE
|
||||||
led_matrix_init();
|
led_matrix_init()
|
||||||
#endif
|
#endif
|
||||||
#ifdef RGB_MATRIX_ENABLE
|
#ifdef RGB_MATRIX_ENABLE
|
||||||
rgb_matrix_init();
|
// Here
|
||||||
|
//rgb_matrix_init();
|
||||||
#endif
|
#endif
|
||||||
#if defined(UNICODE_COMMON_ENABLE)
|
#if defined(UNICODE_COMMON_ENABLE)
|
||||||
unicode_input_mode_init();
|
unicode_input_mode_init()
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAPTIC_ENABLE
|
#ifdef HAPTIC_ENABLE
|
||||||
haptic_init();
|
haptic_init()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -408,13 +409,13 @@ void keyboard_init(void) {
|
|||||||
timer_init();
|
timer_init();
|
||||||
sync_timer_init();
|
sync_timer_init();
|
||||||
#ifdef VIA_ENABLE
|
#ifdef VIA_ENABLE
|
||||||
via_init();
|
//via_init();
|
||||||
#endif
|
#endif
|
||||||
#ifdef SPLIT_KEYBOARD
|
#ifdef SPLIT_KEYBOARD
|
||||||
split_pre_init();
|
split_pre_init()
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENCODER_ENABLE
|
#ifdef ENCODER_ENABLE
|
||||||
encoder_init();
|
encoder_init()
|
||||||
#endif
|
#endif
|
||||||
matrix_init();
|
matrix_init();
|
||||||
quantum_init();
|
quantum_init();
|
||||||
@ -428,39 +429,39 @@ void keyboard_init(void) {
|
|||||||
st7565_init(DISPLAY_ROTATION_0);
|
st7565_init(DISPLAY_ROTATION_0);
|
||||||
#endif
|
#endif
|
||||||
#ifdef PS2_MOUSE_ENABLE
|
#ifdef PS2_MOUSE_ENABLE
|
||||||
ps2_mouse_init();
|
ps2_mouse_init()
|
||||||
#endif
|
#endif
|
||||||
#ifdef BACKLIGHT_ENABLE
|
#ifdef BACKLIGHT_ENABLE
|
||||||
backlight_init();
|
backlight_init();
|
||||||
#endif
|
#endif
|
||||||
#ifdef RGBLIGHT_ENABLE
|
#ifdef RGBLIGHT_ENABLE
|
||||||
rgblight_init();
|
rgblight_init()
|
||||||
#endif
|
#endif
|
||||||
#ifdef STENO_ENABLE_ALL
|
#ifdef STENO_ENABLE_ALL
|
||||||
steno_init();
|
steno_init()
|
||||||
#endif
|
#endif
|
||||||
#if defined(NKRO_ENABLE) && defined(FORCE_NKRO)
|
#if defined(NKRO_ENABLE) && defined(FORCE_NKRO)
|
||||||
keymap_config.nkro = 1;
|
keymap_config.nkro = 1;
|
||||||
eeconfig_update_keymap(keymap_config.raw);
|
eeconfig_update_keymap(keymap_config.raw);
|
||||||
#endif
|
#endif
|
||||||
#ifdef DIP_SWITCH_ENABLE
|
#ifdef DIP_SWITCH_ENABLE
|
||||||
dip_switch_init();
|
dip_switch_init()
|
||||||
#endif
|
#endif
|
||||||
#ifdef SLEEP_LED_ENABLE
|
#ifdef SLEEP_LED_ENABLE
|
||||||
sleep_led_init();
|
sleep_led_init()
|
||||||
#endif
|
#endif
|
||||||
#ifdef VIRTSER_ENABLE
|
#ifdef VIRTSER_ENABLE
|
||||||
virtser_init();
|
virtser_init();
|
||||||
#endif
|
#endif
|
||||||
#ifdef SPLIT_KEYBOARD
|
#ifdef SPLIT_KEYBOARD
|
||||||
split_post_init();
|
split_post_init()
|
||||||
#endif
|
#endif
|
||||||
#ifdef POINTING_DEVICE_ENABLE
|
#ifdef POINTING_DEVICE_ENABLE
|
||||||
// init after split init
|
// init after split init
|
||||||
pointing_device_init();
|
pointing_device_init();
|
||||||
#endif
|
#endif
|
||||||
#ifdef BLUETOOTH_ENABLE
|
#ifdef BLUETOOTH_ENABLE
|
||||||
bluetooth_init();
|
bluetooth_init()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(DEBUG_MATRIX_SCAN_RATE) && defined(CONSOLE_ENABLE)
|
#if defined(DEBUG_MATRIX_SCAN_RATE) && defined(CONSOLE_ENABLE)
|
||||||
|
@ -35,6 +35,7 @@ struct setups_data_t {
|
|||||||
uint8_t cnt_02;
|
uint8_t cnt_02;
|
||||||
uint8_t cnt_04;
|
uint8_t cnt_04;
|
||||||
uint8_t cnt_ff;
|
uint8_t cnt_ff;
|
||||||
|
uint8_t cnt_zoid;
|
||||||
uint16_t last_wlength;
|
uint16_t last_wlength;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -43,20 +44,30 @@ struct setups_data_t setups_data = {
|
|||||||
.cnt_02 = 0,
|
.cnt_02 = 0,
|
||||||
.cnt_04 = 0,
|
.cnt_04 = 0,
|
||||||
.cnt_ff = 0,
|
.cnt_ff = 0,
|
||||||
|
.cnt_zoid = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
os_variant_t detected_os = OS_UNSURE;
|
os_variant_t detected_os = OS_UNSURE;
|
||||||
|
|
||||||
// Some collected sequences of wLength can be found in tests.
|
// Some collected sequences of wLength can be found in tests.
|
||||||
void make_guess(void) {
|
void make_guess(void) {
|
||||||
if (setups_data.count < 3) {
|
//if (setups_data.count < 3 && setups_data.cnt_zoid != 0) {
|
||||||
|
// return;
|
||||||
|
//}
|
||||||
|
//if (setups_data.cnt_zoid == 0) {
|
||||||
|
// detected_os = OS_UEFI;
|
||||||
|
// return;
|
||||||
|
//}
|
||||||
|
if (setups_data.cnt_zoid == 0) {
|
||||||
|
detected_os = OS_UEFI;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (setups_data.cnt_ff >= 2 && setups_data.cnt_04 >= 1) {
|
if (setups_data.cnt_ff >= 2 && setups_data.cnt_04 >= 1) {
|
||||||
detected_os = OS_WINDOWS;
|
detected_os = OS_WINDOWS;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (setups_data.count == setups_data.cnt_ff) {
|
// I changed this
|
||||||
|
if (setups_data.count > 3 && setups_data.count == setups_data.cnt_ff) {
|
||||||
// Linux has 3 packets with 0xFF.
|
// Linux has 3 packets with 0xFF.
|
||||||
detected_os = OS_LINUX;
|
detected_os = OS_LINUX;
|
||||||
return;
|
return;
|
||||||
@ -80,6 +91,15 @@ void make_guess(void) {
|
|||||||
detected_os = OS_LINUX;
|
detected_os = OS_LINUX;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (setups_data.cnt_zoid == 0) {
|
||||||
|
detected_os = OS_UEFI;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void process_zoid(const uint16_t zoid) {
|
||||||
|
setups_data.cnt_zoid = zoid;
|
||||||
|
make_guess();
|
||||||
}
|
}
|
||||||
|
|
||||||
void process_wlength(const uint16_t w_length) {
|
void process_wlength(const uint16_t w_length) {
|
||||||
@ -99,6 +119,7 @@ void process_wlength(const uint16_t w_length) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
os_variant_t detected_host_os(void) {
|
os_variant_t detected_host_os(void) {
|
||||||
|
make_guess();
|
||||||
return detected_os;
|
return detected_os;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,8 +25,10 @@ typedef enum {
|
|||||||
OS_WINDOWS,
|
OS_WINDOWS,
|
||||||
OS_MACOS,
|
OS_MACOS,
|
||||||
OS_IOS,
|
OS_IOS,
|
||||||
|
OS_UEFI,
|
||||||
} os_variant_t;
|
} os_variant_t;
|
||||||
|
|
||||||
|
void process_zoid(const uint16_t zoid);
|
||||||
void process_wlength(const uint16_t w_length);
|
void process_wlength(const uint16_t w_length);
|
||||||
os_variant_t detected_host_os(void);
|
os_variant_t detected_host_os(void);
|
||||||
void erase_wlength_data(void);
|
void erase_wlength_data(void);
|
||||||
|
@ -1177,6 +1177,9 @@ uint16_t get_usb_descriptor(const uint16_t wValue, const uint16_t wIndex, const
|
|||||||
if (wLength >= sizeof(USB_Descriptor_Bos_t)) {
|
if (wLength >= sizeof(USB_Descriptor_Bos_t)) {
|
||||||
Size = sizeof(USB_Descriptor_Bos_t);
|
Size = sizeof(USB_Descriptor_Bos_t);
|
||||||
}
|
}
|
||||||
|
#ifdef OS_DETECTION_ENABLE
|
||||||
|
process_zoid(31);
|
||||||
|
#endif
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case DTYPE_String:
|
case DTYPE_String:
|
||||||
|
Loading…
Reference in New Issue
Block a user