aboutsummaryrefslogtreecommitdiff
path: root/quantum/quantum.c
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/quantum.c')
-rw-r--r--quantum/quantum.c137
1 files changed, 52 insertions, 85 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c
index d4ebd58e7f..09e5fe1dac 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -15,12 +15,17 @@
*/
#include "quantum.h"
+#include "process_quantum.h"
+
+#ifdef SLEEP_LED_ENABLE
+# include "sleep_led.h"
+#endif
#ifdef BACKLIGHT_ENABLE
# include "process_backlight.h"
#endif
-#ifdef BLUETOOTH_ENABLE
+#ifdef CONNECTION_ENABLE
# include "process_connection.h"
#endif
@@ -84,6 +89,10 @@
# include "process_layer_lock.h"
#endif
+#ifndef NO_ACTION_ONESHOT
+# include "process_oneshot.h"
+#endif
+
#ifdef AUDIO_ENABLE
# ifndef GOODBYE_SONG
# define GOODBYE_SONG SONG(GOODBYE_SOUND)
@@ -162,6 +171,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);
}
@@ -170,7 +183,7 @@ __attribute__((weak)) bool pre_process_record_user(uint16_t keycode, keyrecord_t
return true;
}
-__attribute__((weak)) bool process_action_kb(keyrecord_t *record) {
+__attribute__((weak)) bool process_record_modules(uint16_t keycode, keyrecord_t *record) {
return true;
}
@@ -182,12 +195,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 +222,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 +283,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,12 +293,14 @@ 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);
}
-/* Core keycode function, hands off handling to other functions,
- then processes internal quantum keycodes, and then processes
- ACTIONs. */
+/** \brief Core keycode function
+ *
+ * Hands off handling to other quantum/process_keycode/ functions
+ */
bool process_record_quantum(keyrecord_t *record) {
uint16_t keycode = get_record_keycode(record, true);
@@ -329,13 +356,14 @@ bool process_record_quantum(keyrecord_t *record) {
#ifdef HAPTIC_ENABLE
process_haptic(keycode, record) &&
#endif
-#if defined(VIA_ENABLE)
- process_record_via(keycode, record) &&
-#endif
#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) &&
+#endif
#if defined(SECURE_ENABLE)
process_secure(keycode, record) &&
#endif
@@ -414,88 +442,17 @@ bool process_record_quantum(keyrecord_t *record) {
#ifdef LAYER_LOCK_ENABLE
process_layer_lock(keycode, record) &&
#endif
-#ifdef BLUETOOTH_ENABLE
+#ifdef CONNECTION_ENABLE
process_connection(keycode, record) &&
#endif
- true)) {
- return false;
- }
-
- if (record->event.pressed) {
- switch (keycode) {
-#ifndef NO_RESET
- case QK_BOOTLOADER:
- reset_keyboard();
- return false;
- case QK_REBOOT:
- soft_reset_keyboard();
- return false;
-#endif
-#ifndef NO_DEBUG
- case QK_DEBUG_TOGGLE:
- debug_enable ^= 1;
- if (debug_enable) {
- print("DEBUG: enabled.\n");
- } else {
- print("DEBUG: disabled.\n");
- }
-#endif
- return false;
- case QK_CLEAR_EEPROM:
-#ifdef NO_RESET
- eeconfig_init();
-#else
- eeconfig_disable();
- soft_reset_keyboard();
-#endif
- return false;
-#ifdef VELOCIKEY_ENABLE
- case QK_VELOCIKEY_TOGGLE:
- velocikey_toggle();
- return false;
-#endif
#ifndef NO_ACTION_ONESHOT
- case QK_ONE_SHOT_TOGGLE:
- oneshot_toggle();
- break;
- case QK_ONE_SHOT_ON:
- oneshot_enable();
- break;
- case QK_ONE_SHOT_OFF:
- oneshot_disable();
- break;
-#endif
-#ifdef ENABLE_COMPILE_KEYCODE
- case QK_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader
- {
-# ifdef NO_ACTION_ONESHOT
- const uint8_t temp_mod = mod_config(get_mods());
-# else
- const uint8_t temp_mod = mod_config(get_mods() | get_oneshot_mods());
- clear_oneshot_mods();
-# endif
- clear_mods();
-
- SEND_STRING_DELAY("qmk", TAP_CODE_DELAY);
- if (temp_mod & MOD_MASK_SHIFT) { // if shift is held, flash rather than compile
- SEND_STRING_DELAY(" flash ", TAP_CODE_DELAY);
- } else {
- SEND_STRING_DELAY(" compile ", TAP_CODE_DELAY);
- }
-# if defined(CONVERTER_ENABLED)
- SEND_STRING_DELAY("-kb " QMK_KEYBOARD " -km " QMK_KEYMAP " -e CONVERT_TO=" CONVERTER_TARGET SS_TAP(X_ENTER), TAP_CODE_DELAY);
-# else
- SEND_STRING_DELAY("-kb " QMK_KEYBOARD " -km " QMK_KEYMAP SS_TAP(X_ENTER), TAP_CODE_DELAY);
-# endif
- if (temp_mod & MOD_MASK_SHIFT && temp_mod & MOD_MASK_CTRL) {
- reset_keyboard();
- }
- }
+ process_oneshot(keycode, record) &&
#endif
- }
+ process_quantum(keycode, record))) {
+ return false;
}
- return process_action_kb(record);
+ return true;
}
void set_single_default_layer(uint8_t default_layer) {
@@ -526,6 +483,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
@@ -533,6 +491,10 @@ void suspend_power_down_quantum(void) {
backlight_level_noeeprom(0);
# endif
+# ifdef SLEEP_LED_ENABLE
+ sleep_led_enable();
+# endif
+
# ifdef LED_MATRIX_ENABLE
led_matrix_task();
# endif
@@ -579,6 +541,10 @@ __attribute__((weak)) void suspend_wakeup_init_quantum(void) {
backlight_init();
#endif
+#ifdef SLEEP_LED_ENABLE
+ sleep_led_disable();
+#endif
+
// Restore LED indicators
led_wakeup();
@@ -593,6 +559,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();
}