aboutsummaryrefslogtreecommitdiff
path: root/quantum/quantum.c
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/quantum.c')
-rw-r--r--quantum/quantum.c122
1 files changed, 105 insertions, 17 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c
index e60378afe..ac8857df8 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -25,10 +25,6 @@
25# include "backlight.h" 25# include "backlight.h"
26#endif 26#endif
27 27
28#ifdef API_ENABLE
29# include "api.h"
30#endif
31
32#ifdef MIDI_ENABLE 28#ifdef MIDI_ENABLE
33# include "process_midi.h" 29# include "process_midi.h"
34#endif 30#endif
@@ -145,12 +141,13 @@ void reset_keyboard(void) {
145/* Convert record into usable keycode via the contained event. */ 141/* Convert record into usable keycode via the contained event. */
146uint16_t get_record_keycode(keyrecord_t *record, bool update_layer_cache) { 142uint16_t get_record_keycode(keyrecord_t *record, bool update_layer_cache) {
147#ifdef COMBO_ENABLE 143#ifdef COMBO_ENABLE
148 if (record->keycode) { return record->keycode; } 144 if (record->keycode) {
145 return record->keycode;
146 }
149#endif 147#endif
150 return get_event_keycode(record->event, update_layer_cache); 148 return get_event_keycode(record->event, update_layer_cache);
151} 149}
152 150
153
154/* Convert event into usable keycode. Checks the layer cache to ensure that it 151/* Convert event into usable keycode. Checks the layer cache to ensure that it
155 * retains the correct keycode after a layer change, if the key is still pressed. 152 * retains the correct keycode after a layer change, if the key is still pressed.
156 * "update_layer_cache" is to ensure that it only updates the layer cache when 153 * "update_layer_cache" is to ensure that it only updates the layer cache when
@@ -179,12 +176,12 @@ uint16_t get_event_keycode(keyevent_t event, bool update_layer_cache) {
179bool pre_process_record_quantum(keyrecord_t *record) { 176bool pre_process_record_quantum(keyrecord_t *record) {
180 if (!( 177 if (!(
181#ifdef COMBO_ENABLE 178#ifdef COMBO_ENABLE
182 process_combo(get_record_keycode(record, true), record) && 179 process_combo(get_record_keycode(record, true), record) &&
183#endif 180#endif
184 true)) { 181 true)) {
185 return false; 182 return false;
186 } 183 }
187 return true; // continue processing 184 return true; // continue processing
188} 185}
189 186
190/* Get keycode, and then call keyboard function */ 187/* Get keycode, and then call keyboard function */
@@ -296,6 +293,9 @@ bool process_record_quantum(keyrecord_t *record) {
296#ifdef JOYSTICK_ENABLE 293#ifdef JOYSTICK_ENABLE
297 process_joystick(keycode, record) && 294 process_joystick(keycode, record) &&
298#endif 295#endif
296#ifdef PROGRAMMABLE_BUTTON_ENABLE
297 process_programmable_button(keycode, record) &&
298#endif
299 true)) { 299 true)) {
300 return false; 300 return false;
301 } 301 }
@@ -465,14 +465,6 @@ void matrix_scan_quantum() {
465# include "hd44780.h" 465# include "hd44780.h"
466#endif 466#endif
467 467
468void api_send_unicode(uint32_t unicode) {
469#ifdef API_ENABLE
470 uint8_t chunk[4];
471 dword_to_bytes(unicode, chunk);
472 MT_SEND_DATA(DT_UNICODE, chunk, 5);
473#endif
474}
475
476//------------------------------------------------------------------------------ 468//------------------------------------------------------------------------------
477// Override these functions in your keymap file to play different tunes on 469// Override these functions in your keymap file to play different tunes on
478// different events such as startup and bootloader jump 470// different events such as startup and bootloader jump
@@ -480,3 +472,99 @@ void api_send_unicode(uint32_t unicode) {
480__attribute__((weak)) void startup_user() {} 472__attribute__((weak)) void startup_user() {}
481 473
482__attribute__((weak)) void shutdown_user() {} 474__attribute__((weak)) void shutdown_user() {}
475
476/** \brief Run keyboard level Power down
477 *
478 * FIXME: needs doc
479 */
480__attribute__((weak)) void suspend_power_down_user(void) {}
481/** \brief Run keyboard level Power down
482 *
483 * FIXME: needs doc
484 */
485__attribute__((weak)) void suspend_power_down_kb(void) { suspend_power_down_user(); }
486
487void suspend_power_down_quantum(void) {
488#ifndef NO_SUSPEND_POWER_DOWN
489// Turn off backlight
490# ifdef BACKLIGHT_ENABLE
491 backlight_set(0);
492# endif
493
494# ifdef LED_MATRIX_ENABLE
495 led_matrix_task();
496# endif
497# ifdef RGB_MATRIX_ENABLE
498 rgb_matrix_task();
499# endif
500
501 // Turn off LED indicators
502 uint8_t leds_off = 0;
503# if defined(BACKLIGHT_CAPS_LOCK) && defined(BACKLIGHT_ENABLE)
504 if (is_backlight_enabled()) {
505 // Don't try to turn off Caps Lock indicator as it is backlight and backlight is already off
506 leds_off |= (1 << USB_LED_CAPS_LOCK);
507 }
508# endif
509 led_set(leds_off);
510
511// Turn off audio
512# ifdef AUDIO_ENABLE
513 stop_all_notes();
514# endif
515
516// Turn off underglow
517# if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE)
518 rgblight_suspend();
519# endif
520
521# if defined(LED_MATRIX_ENABLE)
522 led_matrix_set_suspend_state(true);
523# endif
524# if defined(RGB_MATRIX_ENABLE)
525 rgb_matrix_set_suspend_state(true);
526# endif
527
528# ifdef OLED_ENABLE
529 oled_off();
530# endif
531# ifdef ST7565_ENABLE
532 st7565_off();
533# endif
534#endif
535}
536
537/** \brief run user level code immediately after wakeup
538 *
539 * FIXME: needs doc
540 */
541__attribute__((weak)) void suspend_wakeup_init_user(void) {}
542
543/** \brief run keyboard level code immediately after wakeup
544 *
545 * FIXME: needs doc
546 */
547__attribute__((weak)) void suspend_wakeup_init_kb(void) { suspend_wakeup_init_user(); }
548
549__attribute__((weak)) void suspend_wakeup_init_quantum(void) {
550// Turn on backlight
551#ifdef BACKLIGHT_ENABLE
552 backlight_init();
553#endif
554
555 // Restore LED indicators
556 led_set(host_keyboard_leds());
557
558// Wake up underglow
559#if defined(RGBLIGHT_SLEEP) && defined(RGBLIGHT_ENABLE)
560 rgblight_wakeup();
561#endif
562
563#if defined(LED_MATRIX_ENABLE)
564 led_matrix_set_suspend_state(false);
565#endif
566#if defined(RGB_MATRIX_ENABLE)
567 rgb_matrix_set_suspend_state(false);
568#endif
569 suspend_wakeup_init_kb();
570}