aboutsummaryrefslogtreecommitdiff
path: root/quantum/quantum.c
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/quantum.c')
-rw-r--r--quantum/quantum.c61
1 files changed, 47 insertions, 14 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 4a6d0355f..761ba37f3 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -7,9 +7,14 @@
7#define TAPPING_TERM 200 7#define TAPPING_TERM 200
8#endif 8#endif
9 9
10<<<<<<< HEAD
11#include "backlight.h"
12extern backlight_config_t backlight_config;
13=======
10#ifdef FAUXCLICKY_ENABLE 14#ifdef FAUXCLICKY_ENABLE
11#include "fauxclicky.h" 15#include "fauxclicky.h"
12#endif 16#endif
17>>>>>>> 49e72632d2200fc3bf71d5ced2aa43058da3b2e0
13 18
14static void do_code16 (uint16_t code, void (*f) (uint8_t)) { 19static void do_code16 (uint16_t code, void (*f) (uint8_t)) {
15 switch (code) { 20 switch (code) {
@@ -601,6 +606,10 @@ void matrix_scan_quantum() {
601 matrix_scan_combo(); 606 matrix_scan_combo();
602 #endif 607 #endif
603 608
609 #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_PIN)
610 backlight_task();
611 #endif
612
604 matrix_scan_kb(); 613 matrix_scan_kb();
605} 614}
606 615
@@ -668,13 +677,13 @@ __attribute__ ((weak))
668void backlight_set(uint8_t level) 677void backlight_set(uint8_t level)
669{ 678{
670 // Prevent backlight blink on lowest level 679 // Prevent backlight blink on lowest level
671 #if BACKLIGHT_ON_STATE == 0 680 // #if BACKLIGHT_ON_STATE == 0
672 // PORTx &= ~n 681 // // PORTx &= ~n
673 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF); 682 // _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
674 #else 683 // #else
675 // PORTx |= n 684 // // PORTx |= n
676 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); 685 // _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
677 #endif 686 // #endif
678 687
679 if ( level == 0 ) { 688 if ( level == 0 ) {
680 #ifndef NO_BACKLIGHT_CLOCK 689 #ifndef NO_BACKLIGHT_CLOCK
@@ -682,13 +691,13 @@ void backlight_set(uint8_t level)
682 TCCR1A &= ~(_BV(COM1x1)); 691 TCCR1A &= ~(_BV(COM1x1));
683 OCR1x = 0x0; 692 OCR1x = 0x0;
684 #else 693 #else
685 #if BACKLIGHT_ON_STATE == 0 694 // #if BACKLIGHT_ON_STATE == 0
686 // PORTx |= n 695 // // PORTx |= n
687 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); 696 // _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
688 #else 697 // #else
689 // PORTx &= ~n 698 // // PORTx &= ~n
690 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF); 699 // _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
691 #endif 700 // #endif
692 #endif 701 #endif
693 } 702 }
694 #ifndef NO_BACKLIGHT_CLOCK 703 #ifndef NO_BACKLIGHT_CLOCK
@@ -711,6 +720,30 @@ void backlight_set(uint8_t level)
711 #endif 720 #endif
712} 721}
713 722
723uint8_t backlight_tick = 0;
724
725void backlight_task(void) {
726 #ifdef NO_BACKLIGHT_CLOCK
727 if ((0xFFFF >> ((BACKLIGHT_LEVELS - backlight_config.level) * ((BACKLIGHT_LEVELS + 1) / 2))) & (1 << backlight_tick)) {
728 #if BACKLIGHT_ON_STATE == 0
729 // PORTx &= ~n
730 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
731 #else
732 // PORTx |= n
733 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
734 #endif
735 } else {
736 #if BACKLIGHT_ON_STATE == 0
737 // PORTx |= n
738 _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
739 #else
740 // PORTx &= ~n
741 _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
742 #endif
743 }
744 backlight_tick = (backlight_tick + 1) % 16;
745 #endif
746}
714 747
715#ifdef BACKLIGHT_BREATHING 748#ifdef BACKLIGHT_BREATHING
716 749