diff options
Diffstat (limited to 'quantum/quantum.c')
-rw-r--r-- | quantum/quantum.c | 73 |
1 files changed, 45 insertions, 28 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c index d4fa7f2efc..6530738b71 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -258,7 +258,7 @@ bool process_record_quantum(keyrecord_t *record) { #ifdef HAPTIC_ENABLE process_haptic(keycode, record) && #endif //HAPTIC_ENABLE - #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_KEYREACTIVE_ENABLED) + #if defined(RGB_MATRIX_ENABLE) process_rgb_matrix(keycode, record) && #endif process_record_kb(keycode, record) && @@ -312,8 +312,12 @@ bool process_record_quantum(keyrecord_t *record) { return false; case DEBUG: if (record->event.pressed) { - debug_enable = true; + debug_enable ^= 1; + if (debug_enable) { print("DEBUG: enabled.\n"); + } else { + print("DEBUG: disabled.\n"); + } } return false; case EEPROM_RESET: @@ -703,8 +707,9 @@ bool process_record_quantum(keyrecord_t *record) { #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_BREATHING) case BL_BRTG: { - if (record->event.pressed) + if (record->event.pressed) { breathing_toggle(); + } return false; } #endif @@ -1023,35 +1028,49 @@ void matrix_scan_quantum() { # define TCCRxB TCCR1B # define COMxx1 COM1C1 # define OCRxx OCR1C +# define TIMERx_OVF_vect TIMER1_OVF_vect +# define TOIEx TOIE1 # define ICRx ICR1 +# define TIMSKx TIMSK1 #elif BACKLIGHT_PIN == B6 # define HARDWARE_PWM # define TCCRxA TCCR1A # define TCCRxB TCCR1B # define COMxx1 COM1B1 # define OCRxx OCR1B +# define TIMERx_OVF_vect TIMER1_OVF_vect +# define TOIEx TOIE1 # define ICRx ICR1 +# define TIMSKx TIMSK1 #elif BACKLIGHT_PIN == B5 # define HARDWARE_PWM # define TCCRxA TCCR1A # define TCCRxB TCCR1B # define COMxx1 COM1A1 # define OCRxx OCR1A +# define TIMERx_OVF_vect TIMER1_OVF_vect +# define TOIEx TOIE1 # define ICRx ICR1 +# define TIMSKx TIMSK1 #elif BACKLIGHT_PIN == C6 # define HARDWARE_PWM # define TCCRxA TCCR3A # define TCCRxB TCCR3B -# define COMxx1 COM1A1 +# define COMxx1 COM3A1 # define OCRxx OCR3A +# define TIMERx_OVF_vect TIMER3_OVF_vect +# define TOIEx TOIE3 # define ICRx ICR3 +# define TIMSKx TIMSK3 #elif defined(__AVR_ATmega32A__) && BACKLIGHT_PIN == D4 # define TCCRxA TCCR1A # define TCCRxB TCCR1B # define COMxx1 COM1B1 # define OCRxx OCR1B +# define TIMERx_OVF_vect TIMER1_OVF_vect +# define TOIEx TOIE1 # define ICRx ICR1 -# define TIMSK1 TIMSK +# define TIMSKx TIMSK1 #else # if !defined(BACKLIGHT_CUSTOM_DRIVER) # if !defined(B5_AUDIO) && !defined(B6_AUDIO) && !defined(B7_AUDIO) @@ -1062,15 +1081,15 @@ void matrix_scan_quantum() { # define TCCRxA TCCR1A # define TCCRxB TCCR1B # define OCRxx OCR1A -# define OCRxAH OCR1AH -# define OCRxAL OCR1AL # define TIMERx_COMPA_vect TIMER1_COMPA_vect # define TIMERx_OVF_vect TIMER1_OVF_vect # define OCIExA OCIE1A # define TOIEx TOIE1 # define ICRx ICR1 -# ifndef TIMSK -# define TIMSK TIMSK1 +# if defined(__AVR_ATmega32A__) // This MCU has only one TIMSK register +# define TIMSKx TIMSK +# else +# define TIMSKx TIMSK1 # endif # elif !defined(C6_AUDIO) && !defined(C5_AUDIO) && !defined(C4_AUDIO) #pragma message "Using hardware timer 3 with software PWM" @@ -1080,16 +1099,12 @@ void matrix_scan_quantum() { # define TCCRxA TCCR3A # define TCCRxB TCCR3B # define OCRxx OCR3A -# define OCRxAH OCR3AH -# define OCRxAL OCR3AL # define TIMERx_COMPA_vect TIMER3_COMPA_vect # define TIMERx_OVF_vect TIMER3_OVF_vect # define OCIExA OCIE3A # define TOIEx TOIE3 # define ICRx ICR1 -# ifndef TIMSK -# define TIMSK TIMSK3 -# endif +# define TIMSKx TIMSK3 # else #pragma message "Audio in use - using pure software PWM" #define NO_HARDWARE_PWM @@ -1134,13 +1149,13 @@ void backlight_off(uint8_t backlight_pin) { #define BACKLIGHT_PIN_INIT BACKLIGHT_PINS #endif -#define FOR_EACH_LED(x) \ +#define FOR_EACH_LED(x) \ for (uint8_t i = 0; i < BACKLIGHT_LED_COUNT; i++) \ - { \ - uint8_t backlight_pin = backlight_pins[i]; \ + { \ + uint8_t backlight_pin = backlight_pins[i]; \ { \ - x \ - } \ + x \ + } \ } static const uint8_t backlight_pins[BACKLIGHT_LED_COUNT] = BACKLIGHT_PIN_INIT; @@ -1219,7 +1234,9 @@ ISR(TIMERx_COMPA_vect) { // this one triggers at F_CPU/65536 =~ 244 Hz ISR(TIMERx_OVF_vect) { #ifdef BACKLIGHT_BREATHING - breathing_task(); + if(is_breathing()) { + breathing_task(); + } #endif // for very small values of OCRxx (or backlight level) // we can't guarantee this whole code won't execute @@ -1270,8 +1287,8 @@ void backlight_set(uint8_t level) { if (level == 0) { #ifdef BACKLIGHT_PWM_TIMER if (OCRxx) { - TIMSK &= ~(_BV(OCIExA)); - TIMSK &= ~(_BV(TOIEx)); + TIMSKx &= ~(_BV(OCIExA)); + TIMSKx &= ~(_BV(TOIEx)); FOR_EACH_LED( backlight_off(backlight_pin); ) @@ -1283,8 +1300,8 @@ void backlight_set(uint8_t level) { } else { #ifdef BACKLIGHT_PWM_TIMER if (!OCRxx) { - TIMSK |= _BV(OCIExA); - TIMSK |= _BV(TOIEx); + TIMSKx |= _BV(OCIExA); + TIMSKx |= _BV(TOIEx); } #else // Turn on PWM control of backlight pin @@ -1321,11 +1338,11 @@ bool is_breathing(void) { #else bool is_breathing(void) { - return !!(TIMSK1 & _BV(TOIE1)); + return !!(TIMSKx & _BV(TOIEx)); } -#define breathing_interrupt_enable() do {TIMSK1 |= _BV(TOIE1);} while (0) -#define breathing_interrupt_disable() do {TIMSK1 &= ~_BV(TOIE1);} while (0) +#define breathing_interrupt_enable() do {TIMSKx |= _BV(TOIEx);} while (0) +#define breathing_interrupt_disable() do {TIMSKx &= ~_BV(TOIEx);} while (0) #endif #define breathing_min() do {breathing_counter = 0;} while (0) @@ -1407,7 +1424,7 @@ void breathing_task(void) /* Assuming a 16MHz CPU clock and a timer that resets at 64k (ICR1), the following interrupt handler will run * about 244 times per second. */ -ISR(TIMER1_OVF_vect) +ISR(TIMERx_OVF_vect) #endif { uint16_t interval = (uint16_t) breathing_period * 244 / BREATHING_STEPS; |