aboutsummaryrefslogtreecommitdiff
path: root/quantum/quantum.c
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/quantum.c')
-rw-r--r--quantum/quantum.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c
index b63300add8..adb14d64b6 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -162,6 +162,10 @@ __attribute__((weak)) void tap_code16(uint16_t code) {
tap_code16_delay(code, code == KC_CAPS_LOCK ? TAP_HOLD_CAPS_DELAY : TAP_CODE_DELAY);
}
+__attribute__((weak)) bool pre_process_record_modules(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
__attribute__((weak)) bool pre_process_record_kb(uint16_t keycode, keyrecord_t *record) {
return pre_process_record_user(keycode, record);
}
@@ -174,6 +178,10 @@ __attribute__((weak)) bool process_action_kb(keyrecord_t *record) {
return true;
}
+__attribute__((weak)) bool process_record_modules(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
__attribute__((weak)) bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
return process_record_user(keycode, record);
}
@@ -182,12 +190,22 @@ __attribute__((weak)) bool process_record_user(uint16_t keycode, keyrecord_t *re
return true;
}
+__attribute__((weak)) void post_process_record_modules(uint16_t keycode, keyrecord_t *record) {}
+
__attribute__((weak)) void post_process_record_kb(uint16_t keycode, keyrecord_t *record) {
post_process_record_user(keycode, record);
}
__attribute__((weak)) void post_process_record_user(uint16_t keycode, keyrecord_t *record) {}
+__attribute__((weak)) bool shutdown_modules(bool jump_to_bootloader) {
+ return true;
+}
+
+__attribute__((weak)) void suspend_power_down_modules(void) {}
+
+__attribute__((weak)) void suspend_wakeup_init_modules(void) {}
+
void shutdown_quantum(bool jump_to_bootloader) {
clear_keyboard();
#if defined(MIDI_ENABLE) && defined(MIDI_BASIC)
@@ -199,11 +217,13 @@ void shutdown_quantum(bool jump_to_bootloader) {
# endif
uint16_t timer_start = timer_read();
PLAY_SONG(goodbye_song);
+ shutdown_modules(jump_to_bootloader);
shutdown_kb(jump_to_bootloader);
while (timer_elapsed(timer_start) < 250)
wait_ms(1);
stop_all_notes();
#else
+ shutdown_modules(jump_to_bootloader);
shutdown_kb(jump_to_bootloader);
wait_ms(250);
#endif
@@ -258,7 +278,7 @@ uint16_t get_event_keycode(keyevent_t event, bool update_layer_cache) {
/* Get keycode, and then process pre tapping functionality */
bool pre_process_record_quantum(keyrecord_t *record) {
- return pre_process_record_kb(get_record_keycode(record, true), record) &&
+ return pre_process_record_modules(get_record_keycode(record, true), record) && pre_process_record_kb(get_record_keycode(record, true), record) &&
#ifdef COMBO_ENABLE
process_combo(get_record_keycode(record, true), record) &&
#endif
@@ -268,6 +288,7 @@ bool pre_process_record_quantum(keyrecord_t *record) {
/* Get keycode, and then call keyboard function */
void post_process_record_quantum(keyrecord_t *record) {
uint16_t keycode = get_record_keycode(record, false);
+ post_process_record_modules(keycode, record);
post_process_record_kb(keycode, record);
}
@@ -332,6 +353,7 @@ bool process_record_quantum(keyrecord_t *record) {
#if defined(POINTING_DEVICE_ENABLE) && defined(POINTING_DEVICE_AUTO_MOUSE_ENABLE)
process_auto_mouse(keycode, record) &&
#endif
+ process_record_modules(keycode, record) && // modules must run before kb
process_record_kb(keycode, record) &&
#if defined(VIA_ENABLE)
process_record_via(keycode, record) &&
@@ -526,6 +548,7 @@ __attribute__((weak)) bool shutdown_kb(bool jump_to_bootloader) {
}
void suspend_power_down_quantum(void) {
+ suspend_power_down_modules();
suspend_power_down_kb();
#ifndef NO_SUSPEND_POWER_DOWN
// Turn off backlight
@@ -593,6 +616,7 @@ __attribute__((weak)) void suspend_wakeup_init_quantum(void) {
#if defined(RGB_MATRIX_ENABLE)
rgb_matrix_set_suspend_state(false);
#endif
+ suspend_wakeup_init_modules();
suspend_wakeup_init_kb();
}