summaryrefslogtreecommitdiff
path: root/quantum/quantum.c
diff options
context:
space:
mode:
authorWilliam Chang <william@factual.com>2019-07-13 10:18:33 -0700
committerWilliam Chang <william@factual.com>2019-07-13 10:18:33 -0700
commit71493b2f9bbd5f3d18373c518fa14ccafcbf48fc (patch)
tree3bb3e5e496621535611e087720aa5c4d7a533e5e /quantum/quantum.c
parent86ad4988fe7ff64916127509d84f44c56fa097aa (diff)
parentda1f05fbc19477c05c0c01bb07fabfaf1ece9d54 (diff)
Merge branch 'master' of https://github.com/qmk/qmk_firmware
Diffstat (limited to 'quantum/quantum.c')
-rw-r--r--quantum/quantum.c73
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;