diff options
Diffstat (limited to 'quantum/template')
| -rw-r--r-- | quantum/template/Makefile | 46 | ||||
| -rw-r--r-- | quantum/template/template.c | 61 | ||||
| -rw-r--r-- | quantum/template/template.h | 5 | 
3 files changed, 97 insertions, 15 deletions
diff --git a/quantum/template/Makefile b/quantum/template/Makefile index 4fa195468d..1a535ef2cb 100644 --- a/quantum/template/Makefile +++ b/quantum/template/Makefile @@ -111,23 +111,41 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512  # Build Options -#   comment out to disable the options. -# -BOOTMAGIC_ENABLE = yes		# Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes		# Mouse keys(+4700) -EXTRAKEY_ENABLE = yes		# Audio control and System control(+450) -CONSOLE_ENABLE = yes		# Console for debug(+400) -COMMAND_ENABLE = yes		# Commands for debug and configuration -KEYBOARD_LOCK_ENABLE = yes	# Allow locking of keyboard via magic key +#   change yes to no to disable +# +BOOTMAGIC_ENABLE = yes      # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes       # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes       # Audio control and System control(+450) +CONSOLE_ENABLE = yes        # Console for debug(+400) +COMMAND_ENABLE = yes        # Commands for debug and configuration +KEYBOARD_LOCK_ENABLE = yes  # Allow locking of keyboard via magic key  # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -# SLEEP_LED_ENABLE = yes	# Breathing sleep LED during USB suspend -#NKRO_ENABLE = yes			# USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -# BACKLIGHT_ENABLE = yes	# Enable keyboard backlight functionality -# MIDI_ENABLE = YES			# MIDI controls -# UNICODE_ENABLE = YES		# Unicode -# BLUETOOTH_ENABLE = yes	# Enable Bluetooth with the Adafruit EZ-Key HID +SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no            # USB Nkey Rollover +BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality +MIDI_ENABLE = no            # MIDI controls +UNICODE_ENABLE = no         # Unicode +BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no           # Audio output on port C6 +ifdef KEYMAP + +ifeq ("$(wildcard keymaps/$(KEYMAP).c)","") +ifneq ("$(wildcard keymaps/$(KEYMAP)/makefile.mk)","") +    include keymaps/$(KEYMAP)/makefile.mk +endif  +endif + +else + +ifneq ("$(wildcard keymaps/default/makefile.mk)","") +    include keymaps/default/makefile.mk +endif + +endif +  # Optimize size but this may cause error "relocation truncated to fit"  #EXTRALDFLAGS = -Wl,--relax diff --git a/quantum/template/template.c b/quantum/template/template.c index cc52e496ff..6050a2d20c 100644 --- a/quantum/template/template.c +++ b/quantum/template/template.c @@ -46,3 +46,64 @@ void led_set_kb(uint8_t usb_led) {  	led_set_user(usb_led);  } + +#ifdef BACKLIGHT_ENABLE +#define CHANNEL OCR1C + +void backlight_init_ports() +{ + +    // Setup PB7 as output and output low. +    DDRB |= (1<<7); +    PORTB &= ~(1<<7); +     +    // Use full 16-bit resolution.  +    ICR1 = 0xFFFF; + +    // I could write a wall of text here to explain... but TL;DW +    // Go read the ATmega32u4 datasheet. +    // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on +     +    // Pin PB7 = OCR1C (Timer 1, Channel C) +    // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0 +    // (i.e. start high, go low when counter matches.) +    // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0 +    // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1 +     +    TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010; +    TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001; + +    backlight_init(); +} + +void backlight_set(uint8_t level) +{ +    if ( level == 0 ) +    { +        // Turn off PWM control on PB7, revert to output low. +        TCCR1A &= ~(_BV(COM1C1)); +        CHANNEL = 0x0; +        // Prevent backlight blink on lowest level +        PORTB &= ~(_BV(PORTB7)); +    } +    else if ( level == BACKLIGHT_LEVELS ) +    { +        // Prevent backlight blink on lowest level +        PORTB &= ~(_BV(PORTB7)); +        // Turn on PWM control of PB7 +        TCCR1A |= _BV(COM1C1); +        // Set the brightness +        CHANNEL = 0xFFFF; +    } +    else         +    { +        // Prevent backlight blink on lowest level +        PORTB &= ~(_BV(PORTB7)); +        // Turn on PWM control of PB7 +        TCCR1A |= _BV(COM1C1); +        // Set the brightness +        CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2)); +    } +} + +#endif
\ No newline at end of file diff --git a/quantum/template/template.h b/quantum/template/template.h index b1c34d3cbe..22742105a3 100644 --- a/quantum/template/template.h +++ b/quantum/template/template.h @@ -3,7 +3,10 @@  #include "matrix.h"  #include "keymap_common.h" -#include "backlight.h" +#ifdef BACKLIGHT_ENABLE +	#include "backlight.h" +#endif +#include <avr/io.h>  #include <stddef.h>  // This a shortcut to help you visually see your layout.  | 
