aboutsummaryrefslogtreecommitdiff
path: root/quantum/quantum.c
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/quantum.c')
-rw-r--r--quantum/quantum.c67
1 files changed, 45 insertions, 22 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c
index a4a12061b..5a9e771a9 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -7,6 +7,9 @@
7#define TAPPING_TERM 200 7#define TAPPING_TERM 200
8#endif 8#endif
9 9
10#include "backlight.h"
11extern backlight_config_t backlight_config;
12
10#ifdef FAUXCLICKY_ENABLE 13#ifdef FAUXCLICKY_ENABLE
11#include "fauxclicky.h" 14#include "fauxclicky.h"
12#endif 15#endif
@@ -294,14 +297,6 @@ bool process_record_quantum(keyrecord_t *record) {
294 return false; 297 return false;
295 break; 298 break;
296 #endif 299 #endif
297 #ifdef ADAFRUIT_BLE_ENABLE
298 case OUT_BLE:
299 if (record->event.pressed) {
300 set_output(OUTPUT_ADAFRUIT_BLE);
301 }
302 return false;
303 break;
304 #endif
305 #endif 300 #endif
306 case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_NKRO: 301 case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_NKRO:
307 if (record->event.pressed) { 302 if (record->event.pressed) {
@@ -604,6 +599,10 @@ void matrix_scan_quantum() {
604 matrix_scan_combo(); 599 matrix_scan_combo();
605 #endif 600 #endif
606 601
602 #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_PIN)
603 backlight_task();
604 #endif
605
607 matrix_scan_kb(); 606 matrix_scan_kb();
608} 607}
609 608
@@ -671,13 +670,13 @@ __attribute__ ((weak))
671void backlight_set(uint8_t level) 670void backlight_set(uint8_t level)
672{ 671{
673 // Prevent backlight blink on lowest level 672 // Prevent backlight blink on lowest level
674 #if BACKLIGHT_ON_STATE == 0 673 // #if BACKLIGHT_ON_STATE == 0
675 // PORTx &= ~n 674 // // PORTx &= ~n
676 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF); 675 // _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
677 #else 676 // #else
678 // PORTx |= n 677 // // PORTx |= n
679 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); 678 // _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
680 #endif 679 // #endif
681 680
682 if ( level == 0 ) { 681 if ( level == 0 ) {
683 #ifndef NO_BACKLIGHT_CLOCK 682 #ifndef NO_BACKLIGHT_CLOCK
@@ -685,13 +684,13 @@ void backlight_set(uint8_t level)
685 TCCR1A &= ~(_BV(COM1x1)); 684 TCCR1A &= ~(_BV(COM1x1));
686 OCR1x = 0x0; 685 OCR1x = 0x0;
687 #else 686 #else
688 #if BACKLIGHT_ON_STATE == 0 687 // #if BACKLIGHT_ON_STATE == 0
689 // PORTx |= n 688 // // PORTx |= n
690 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); 689 // _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
691 #else 690 // #else
692 // PORTx &= ~n 691 // // PORTx &= ~n
693 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF); 692 // _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
694 #endif 693 // #endif
695 #endif 694 #endif
696 } 695 }
697 #ifndef NO_BACKLIGHT_CLOCK 696 #ifndef NO_BACKLIGHT_CLOCK
@@ -714,6 +713,30 @@ void backlight_set(uint8_t level)
714 #endif 713 #endif
715} 714}
716 715
716uint8_t backlight_tick = 0;
717
718void backlight_task(void) {
719 #ifdef NO_BACKLIGHT_CLOCK
720 if ((0xFFFF >> ((BACKLIGHT_LEVELS - backlight_config.level) * ((BACKLIGHT_LEVELS + 1) / 2))) & (1 << backlight_tick)) {
721 #if BACKLIGHT_ON_STATE == 0
722 // PORTx &= ~n
723 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
724 #else
725 // PORTx |= n
726 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
727 #endif
728 } else {
729 #if BACKLIGHT_ON_STATE == 0
730 // PORTx |= n
731 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
732 #else
733 // PORTx &= ~n
734 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
735 #endif
736 }
737 backlight_tick = (backlight_tick + 1) % 16;
738 #endif
739}
717 740
718#ifdef BACKLIGHT_BREATHING 741#ifdef BACKLIGHT_BREATHING
719 742