@ -1027,35 +1027,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 COM 1 A1
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   define COMxx1 COM 3 A1
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   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 TIMSK x TIMSK1 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# else 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#   if !defined(BACKLIGHT_CUSTOM_DRIVER) 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					#     if !defined(B5_AUDIO) && !defined(B6_AUDIO) && !defined(B7_AUDIO) 
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -1066,15 +1080,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" 
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -1084,16 +1098,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 
 
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -1274,8 +1284,8 @@ void backlight_set(uint8_t level) {
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  if  ( level  = =  0 )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    # ifdef BACKLIGHT_PWM_TIMER 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      if  ( OCRxx )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        TIMSK  & =  ~ ( _BV ( OCIExA ) ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        TIMSK  & =  ~ ( _BV ( TOIEx ) ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        TIMSK x  & =  ~ ( _BV ( OCIExA ) ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        TIMSK x  & =  ~ ( _BV ( TOIEx ) ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        FOR_EACH_LED ( 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					          backlight_off ( backlight_pin ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        ) 
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -1287,8 +1297,8 @@ void backlight_set(uint8_t level) {
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  }  else  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    # ifdef BACKLIGHT_PWM_TIMER 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      if  ( ! OCRxx )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        TIMSK  | =  _BV ( OCIExA ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        TIMSK  | =  _BV ( TOIEx ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        TIMSK x  | =  _BV ( OCIExA ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        TIMSK x  | =  _BV ( TOIEx ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					      } 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    # else 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    // Turn on PWM control of backlight pin
 
 
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -1325,11 +1335,11 @@ bool is_breathing(void) {
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# else 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					bool  is_breathing ( void )  { 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  ! ! ( TIMSK 1 &  _BV ( TOIE1  ) ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    return  ! ! ( TIMSK x &  _BV ( TOIEx  ) ) ; 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					} 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# define breathing_interrupt_enable() do {TIMSK 1 |= _BV(TOIE1 );} while (0)
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# define breathing_interrupt_disable() do {TIMSK 1 &= ~_BV(TOIE1 );} while (0)
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# define breathing_interrupt_enable() do {TIMSK x |= _BV(TOIEx );} while (0)
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# define breathing_interrupt_disable() do {TIMSK x &= ~_BV(TOIEx );} while (0)
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# endif 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# define breathing_min() do {breathing_counter = 0;} while (0) 
 
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -1411,7 +1421,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 ( TIMER 1 _OVF_vect) 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					ISR ( TIMER x _OVF_vect) 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					# endif 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					{ 
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					  uint16_t  interval  =  ( uint16_t )  breathing_period  *  244  /  BREATHING_STEPS ;