adds soft pwm for non-timed ports
This commit is contained in:
		
							parent
							
								
									a0c2305bd1
								
							
						
					
					
						commit
						8d0fdf1008
					
				
					 4 changed files with 50 additions and 18 deletions
				
			
		| 
						 | 
					@ -56,13 +56,13 @@ EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
 | 
				
			||||||
CONSOLE_ENABLE ?= no         # Console for debug(+400)
 | 
					CONSOLE_ENABLE ?= no         # Console for debug(+400)
 | 
				
			||||||
COMMAND_ENABLE ?= no        # Commands for debug and configuration
 | 
					COMMAND_ENABLE ?= no        # Commands for debug and configuration
 | 
				
			||||||
NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | 
					NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | 
				
			||||||
BACKLIGHT_ENABLE ?= no      # Enable keyboard backlight functionality
 | 
					BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
 | 
				
			||||||
MIDI_ENABLE ?= yes            # MIDI controls
 | 
					MIDI_ENABLE ?= yes            # MIDI controls
 | 
				
			||||||
AUDIO_ENABLE ?= yes           # Audio output on port C6
 | 
					AUDIO_ENABLE ?= yes           # Audio output on port C6
 | 
				
			||||||
UNICODE_ENABLE ?= no         # Unicode
 | 
					UNICODE_ENABLE ?= no         # Unicode
 | 
				
			||||||
BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
					BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
				
			||||||
RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.
 | 
					RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.
 | 
				
			||||||
API_SYSEX_ENABLE = yes
 | 
					API_SYSEX_ENABLE = no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 | 
					# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 | 
				
			||||||
SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
 | 
					SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,13 +58,13 @@ EXTRAKEY_ENABLE ?= yes       # Audio control and System control(+450)
 | 
				
			||||||
CONSOLE_ENABLE ?= no         # Console for debug(+400)
 | 
					CONSOLE_ENABLE ?= no         # Console for debug(+400)
 | 
				
			||||||
COMMAND_ENABLE ?= no        # Commands for debug and configuration
 | 
					COMMAND_ENABLE ?= no        # Commands for debug and configuration
 | 
				
			||||||
NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | 
					NKRO_ENABLE ?= no            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 | 
				
			||||||
BACKLIGHT_ENABLE ?= no      # Enable keyboard backlight functionality
 | 
					BACKLIGHT_ENABLE ?= yes      # Enable keyboard backlight functionality
 | 
				
			||||||
MIDI_ENABLE ?= yes            # MIDI controls
 | 
					MIDI_ENABLE ?= yes            # MIDI controls
 | 
				
			||||||
AUDIO_ENABLE ?= yes           # Audio output on port C6
 | 
					AUDIO_ENABLE ?= yes           # Audio output on port C6
 | 
				
			||||||
UNICODE_ENABLE ?= no         # Unicode
 | 
					UNICODE_ENABLE ?= no         # Unicode
 | 
				
			||||||
BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
					BLUETOOTH_ENABLE ?= no       # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
				
			||||||
RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.
 | 
					RGBLIGHT_ENABLE ?= no        # Enable WS2812 RGB underlight.
 | 
				
			||||||
API_SYSEX_ENABLE ?= yes
 | 
					API_SYSEX_ENABLE ?= no
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 | 
					# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
 | 
				
			||||||
SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
 | 
					SLEEP_LED_ENABLE ?= no    # Breathing sleep LED during USB suspend
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,9 @@
 | 
				
			||||||
#define TAPPING_TERM 200
 | 
					#define TAPPING_TERM 200
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "backlight.h"
 | 
				
			||||||
 | 
					extern backlight_config_t backlight_config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void do_code16 (uint16_t code, void (*f) (uint8_t)) {
 | 
					static void do_code16 (uint16_t code, void (*f) (uint8_t)) {
 | 
				
			||||||
  switch (code) {
 | 
					  switch (code) {
 | 
				
			||||||
  case QK_MODS ... QK_MODS_MAX:
 | 
					  case QK_MODS ... QK_MODS_MAX:
 | 
				
			||||||
| 
						 | 
					@ -577,6 +580,10 @@ void matrix_scan_quantum() {
 | 
				
			||||||
    matrix_scan_combo();
 | 
					    matrix_scan_combo();
 | 
				
			||||||
  #endif
 | 
					  #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_PIN)
 | 
				
			||||||
 | 
					    backlight_task();
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  matrix_scan_kb();
 | 
					  matrix_scan_kb();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -644,13 +651,13 @@ __attribute__ ((weak))
 | 
				
			||||||
void backlight_set(uint8_t level)
 | 
					void backlight_set(uint8_t level)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  // Prevent backlight blink on lowest level
 | 
					  // Prevent backlight blink on lowest level
 | 
				
			||||||
  #if BACKLIGHT_ON_STATE == 0
 | 
					  // #if BACKLIGHT_ON_STATE == 0
 | 
				
			||||||
    // PORTx &= ~n
 | 
					  //   // PORTx &= ~n
 | 
				
			||||||
    _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
 | 
					  //   _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
 | 
				
			||||||
  #else
 | 
					  // #else
 | 
				
			||||||
    // PORTx |= n
 | 
					  //   // PORTx |= n
 | 
				
			||||||
    _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
 | 
					  //   _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
 | 
				
			||||||
  #endif
 | 
					  // #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if ( level == 0 ) {
 | 
					  if ( level == 0 ) {
 | 
				
			||||||
    #ifndef NO_BACKLIGHT_CLOCK
 | 
					    #ifndef NO_BACKLIGHT_CLOCK
 | 
				
			||||||
| 
						 | 
					@ -658,13 +665,13 @@ void backlight_set(uint8_t level)
 | 
				
			||||||
      TCCR1A &= ~(_BV(COM1x1));
 | 
					      TCCR1A &= ~(_BV(COM1x1));
 | 
				
			||||||
      OCR1x = 0x0;
 | 
					      OCR1x = 0x0;
 | 
				
			||||||
    #else
 | 
					    #else
 | 
				
			||||||
      #if BACKLIGHT_ON_STATE == 0
 | 
					      // #if BACKLIGHT_ON_STATE == 0
 | 
				
			||||||
        // PORTx |= n
 | 
					      //   // PORTx |= n
 | 
				
			||||||
        _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
 | 
					      //   _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
 | 
				
			||||||
      #else
 | 
					      // #else
 | 
				
			||||||
        // PORTx &= ~n
 | 
					      //   // PORTx &= ~n
 | 
				
			||||||
        _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
 | 
					      //   _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
 | 
				
			||||||
      #endif
 | 
					      // #endif
 | 
				
			||||||
    #endif
 | 
					    #endif
 | 
				
			||||||
  } 
 | 
					  } 
 | 
				
			||||||
  #ifndef NO_BACKLIGHT_CLOCK
 | 
					  #ifndef NO_BACKLIGHT_CLOCK
 | 
				
			||||||
| 
						 | 
					@ -687,6 +694,30 @@ void backlight_set(uint8_t level)
 | 
				
			||||||
  #endif
 | 
					  #endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t backlight_tick = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void backlight_task(void) {
 | 
				
			||||||
 | 
					  #ifdef NO_BACKLIGHT_CLOCK
 | 
				
			||||||
 | 
					  if ((0xFFFF >> ((BACKLIGHT_LEVELS - backlight_config.level) * ((BACKLIGHT_LEVELS + 1) / 2))) & (1 << backlight_tick)) { 
 | 
				
			||||||
 | 
					    #if BACKLIGHT_ON_STATE == 0
 | 
				
			||||||
 | 
					      // PORTx &= ~n
 | 
				
			||||||
 | 
					      _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
 | 
				
			||||||
 | 
					    #else
 | 
				
			||||||
 | 
					      // PORTx |= n
 | 
				
			||||||
 | 
					      _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
 | 
				
			||||||
 | 
					    #endif
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    #if BACKLIGHT_ON_STATE == 0
 | 
				
			||||||
 | 
					      // PORTx |= n
 | 
				
			||||||
 | 
					      _SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF);
 | 
				
			||||||
 | 
					    #else
 | 
				
			||||||
 | 
					      // PORTx &= ~n
 | 
				
			||||||
 | 
					      _SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
 | 
				
			||||||
 | 
					    #endif
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  backlight_tick = (backlight_tick + 1) % 16;
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef BACKLIGHT_BREATHING
 | 
					#ifdef BACKLIGHT_BREATHING
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -95,6 +95,7 @@ void unregister_code16 (uint16_t code);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef BACKLIGHT_ENABLE
 | 
					#ifdef BACKLIGHT_ENABLE
 | 
				
			||||||
void backlight_init_ports(void);
 | 
					void backlight_init_ports(void);
 | 
				
			||||||
 | 
					void backlight_task(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef BACKLIGHT_BREATHING
 | 
					#ifdef BACKLIGHT_BREATHING
 | 
				
			||||||
void breathing_enable(void);
 | 
					void breathing_enable(void);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue