- USB 6KRO - SoftPWM LED - Breathing LED - Fading LED - Typing LED - Ledmap - Ledmap in EEPROMyuk86
SRC = keymap_common.c \ | SRC = keymap_common.c \ | ||||
matrix.c \ | matrix.c \ | ||||
led.c \ | led.c \ | ||||
backlight.c | |||||
backlight.c \ | |||||
ledmap.c | |||||
ifdef KEYMAP | ifdef KEYMAP | ||||
SRC := keymap_$(KEYMAP).c $(SRC) | SRC := keymap_$(KEYMAP).c $(SRC) | ||||
COMMAND_ENABLE = yes # Commands for debug and configuration | COMMAND_ENABLE = yes # Commands for debug and configuration | ||||
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend | #SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend | ||||
NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA | NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA | ||||
USB_6KRO_ENABLE = yes # USB 6key Rollover | |||||
#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support | #PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support | ||||
#PS2_USE_BUSYWAIT = yes | #PS2_USE_BUSYWAIT = yes | ||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality | BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality | ||||
KEYMAP_EX_ENABLE = yes # External keymap in eeprom | |||||
KEYMAP_SECTION_ENABLE = yes # Fixed address keymap for keymap editor | |||||
KEYMAP_IN_EEPROM_ENABLE = yes # Read keymap from eeprom | |||||
#KEYMAP_SECTION_ENABLE = yes # Fixed address keymap for keymap editor | |||||
SOFTPWM_LED_ENABLE = yes # Enable SoftPWM to drive backlight | |||||
FADING_LED_ENABLE = yes # Enable fading backlight | |||||
BREATHING_LED_ENABLE = yes # Enable breathing backlight | BREATHING_LED_ENABLE = yes # Enable breathing backlight | ||||
LEDMAP_ENABLE = yes # Enable LED mapping | |||||
LEDMAP_IN_EEPROM_ENABLE = yes # Read LED mapping from eeprom | |||||
# Optimize size but this may cause error "relocation truncated to fit" | # Optimize size but this may cause error "relocation truncated to fit" | ||||
#EXTRALDFLAGS = -Wl,--relax | #EXTRALDFLAGS = -Wl,--relax |
#---------------------------------------------------------------------------- | #---------------------------------------------------------------------------- | ||||
# Target file name (without extension). | # Target file name (without extension). | ||||
TARGET = RedScarfII__pjrc | |||||
TARGET = RedScarfII_pjrc | |||||
# Directory common source filess exist | # Directory common source filess exist | ||||
TOP_DIR = ../.. | TOP_DIR = ../.. | ||||
SRC = keymap_common.c \ | SRC = keymap_common.c \ | ||||
matrix.c \ | matrix.c \ | ||||
led.c \ | led.c \ | ||||
backlight.c | |||||
backlight.c \ | |||||
ledmap.c | |||||
ifdef KEYMAP | ifdef KEYMAP | ||||
SRC := keymap_$(KEYMAP).c $(SRC) | SRC := keymap_$(KEYMAP).c $(SRC) | ||||
#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA | #NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA | ||||
#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support | #PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support | ||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality | BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality | ||||
KEYMAP_EX_ENABLE = yes # External keymap in eeprom | |||||
KEYMAP_SECTION_ENABLE = yes # Fixed address keymap for keymap editor | |||||
KEYMAP_IN_EEPROM_ENABLE = yes # Read keymap from eeprom | |||||
#KEYMAP_SECTION_ENABLE = yes # Fixed address keymap for keymap editor | |||||
SOFTPWM_LED_ENABLE = yes # Enable SoftPWM to drive backlight | |||||
FADING_LED_ENABLE = yes # Enable fading backlight | |||||
BREATHING_LED_ENABLE = yes # Enable breathing backlight | BREATHING_LED_ENABLE = yes # Enable breathing backlight | ||||
LEDMAP_ENABLE = yes # Enable LED mapping | |||||
LEDMAP_IN_EEPROM_ENABLE = yes # Read LED mapping from eeprom | |||||
# Search Path | # Search Path |
#include <avr/interrupt.h> | #include <avr/interrupt.h> | ||||
#include <avr/pgmspace.h> | #include <avr/pgmspace.h> | ||||
#include "backlight.h" | #include "backlight.h" | ||||
#ifdef SOFTPWM_LED_ENABLE | |||||
#include "softpwm_led.h" | |||||
#else | |||||
#include "breathing_led.h" | #include "breathing_led.h" | ||||
#endif | |||||
#include "action.h" | |||||
#ifdef BACKLIGHT_ENABLE | #ifdef BACKLIGHT_ENABLE | ||||
void backlight_enable(void); | |||||
void backlight_disable(void); | |||||
inline void backlight_set_raw(uint8_t raw); | |||||
static uint8_t backlight_mode; | |||||
static const uint8_t backlight_table[] PROGMEM = { | static const uint8_t backlight_table[] PROGMEM = { | ||||
0, 16, 128, 255 | 0, 16, 128, 255 | ||||
}; | }; | ||||
void backlight_enable(void); | |||||
void backlight_disable(void); | |||||
inline void backlight_set_raw(uint8_t raw); | |||||
/* Backlight pin configuration | /* Backlight pin configuration | ||||
* PWM: PB7(OC1C) | * PWM: PB7(OC1C) | ||||
*/ | */ | ||||
void backlight_enable(void) | void backlight_enable(void) | ||||
{ | { | ||||
#ifdef SOFTPWM_LED_ENABLE | |||||
DDRB |= (1<<PB7); | |||||
softpwm_led_enable(); | |||||
#else | |||||
// Turn on PWM | // Turn on PWM | ||||
DDRB |= (1<<PB7); | DDRB |= (1<<PB7); | ||||
cli(); | cli(); | ||||
TCCR1A |= ((1<<WGM10) | (1<<COM1C1)); | TCCR1A |= ((1<<WGM10) | (1<<COM1C1)); | ||||
TCCR1B |= ((1<<CS11) | (1<<CS10)); | TCCR1B |= ((1<<CS11) | (1<<CS10)); | ||||
sei(); | sei(); | ||||
#endif | |||||
} | } | ||||
void backlight_disable(void) | void backlight_disable(void) | ||||
{ | { | ||||
#ifdef SOFTPWM_LED_ENABLE | |||||
DDRB &= ~(1<<PB7); | |||||
softpwm_led_disable(); | |||||
#else | |||||
// Turn off PWM | // Turn off PWM | ||||
cli(); | cli(); | ||||
DDRB &= ~(1<<PB7); | DDRB &= ~(1<<PB7); | ||||
TCCR1B &= ~( (1<<CS11) | (1<<CS10) ); | TCCR1B &= ~( (1<<CS11) | (1<<CS10) ); | ||||
sei(); | sei(); | ||||
OCR1C = 0; | OCR1C = 0; | ||||
#endif | |||||
} | } | ||||
void backlight_set(uint8_t level) | void backlight_set(uint8_t level) | ||||
case 2: | case 2: | ||||
case 3: | case 3: | ||||
backlight_enable(); | backlight_enable(); | ||||
#ifdef SOFTPWM_LED_ENABLE | |||||
#ifdef FADING_LED_ENABLE | |||||
fading_led_disable_all(); | |||||
#endif | |||||
breathing_led_disable_all(); | |||||
#else | |||||
breathing_led_disable(); | breathing_led_disable(); | ||||
#endif | |||||
backlight_set_raw(pgm_read_byte(&backlight_table[level])); | backlight_set_raw(pgm_read_byte(&backlight_table[level])); | ||||
break; | break; | ||||
case 4: | case 4: | ||||
case 5: | case 5: | ||||
case 6: | case 6: | ||||
backlight_enable(); | backlight_enable(); | ||||
#ifdef SOFTPWM_LED_ENABLE | |||||
#ifdef FADING_LED_ENABLE | |||||
fading_led_disable_all(); | |||||
#endif | |||||
breathing_led_enable_all(); | |||||
#else | |||||
breathing_led_enable(); | breathing_led_enable(); | ||||
#endif | |||||
breathing_led_set_duration(6 - level); | breathing_led_set_duration(6 - level); | ||||
break; | break; | ||||
#ifdef FADING_LED_ENABLE | |||||
case 7: | |||||
backlight_enable(); | |||||
fading_led_enable_all(); | |||||
breathing_led_disable_all(); | |||||
fading_led_set_direction(FADING_LED_FADE_IN); | |||||
fading_led_set_duration(3); | |||||
case 8: | |||||
backlight_enable(); | |||||
fading_led_enable_all(); | |||||
breathing_led_disable_all(); | |||||
fading_led_set_direction(FADING_LED_FADE_OUT); | |||||
fading_led_set_duration(3); | |||||
#endif | |||||
case 0: | case 0: | ||||
default: | default: | ||||
#ifdef SOFTPWM_LED_ENABLE | |||||
#ifdef FADING_LED_ENABLE | |||||
fading_led_disable_all(); | |||||
#endif | |||||
breathing_led_disable_all(); | |||||
#else | |||||
breathing_led_disable(); | breathing_led_disable(); | ||||
#endif | |||||
backlight_disable(); | backlight_disable(); | ||||
break; | break; | ||||
} | } | ||||
#endif | #endif | ||||
} | } | ||||
#ifndef SOFTPWM_LED_ENABLE | |||||
#ifdef BREATHING_LED_ENABLE | #ifdef BREATHING_LED_ENABLE | ||||
void breathing_led_set_raw(uint8_t raw) | void breathing_led_set_raw(uint8_t raw) | ||||
{ | { | ||||
backlight_set_raw(raw); | backlight_set_raw(raw); | ||||
} | } | ||||
#endif | #endif | ||||
#endif | |||||
inline void backlight_set_raw(uint8_t raw) | inline void backlight_set_raw(uint8_t raw) | ||||
{ | { | ||||
#ifdef SOFTPWM_LED_ENABLE | |||||
softpwm_led_set_all(raw); | |||||
#else | |||||
OCR1C = raw; | OCR1C = raw; | ||||
#endif | |||||
} | |||||
#ifndef LEDMAP_ENABLE | |||||
#ifdef SOFTPWM_LED_ENABLE | |||||
void softpwm_led_on(uint8_t index) | |||||
{ | |||||
PORTB |= (1<<PB7); | |||||
} | |||||
void softpwm_led_off(uint8_t index) | |||||
{ | |||||
PORTB &= ~(1<<PB7); | |||||
} | } | ||||
#endif | |||||
#endif | |||||
#ifdef SOFTPWM_LED_ENABLE | |||||
#ifdef FADING_LED_ENABLE | |||||
void action_keyevent(keyevent_t event) | |||||
{ | |||||
if (backlight_mode == 7) { | |||||
if (event.pressed) { | |||||
softpwm_led_decrease_all(32); | |||||
} | |||||
} | |||||
if (backlight_mode == 8) { | |||||
if (event.pressed) { | |||||
softpwm_led_increase_all(32); | |||||
} | |||||
} | |||||
} | |||||
#endif | |||||
#endif | |||||
#endif | #endif |
/* number of backlight levels */ | /* number of backlight levels */ | ||||
#ifdef BREATHING_LED_ENABLE | #ifdef BREATHING_LED_ENABLE | ||||
#ifdef FADING_LED_ENABLE | |||||
#define BACKLIGHT_LEVELS 8 | |||||
#else | |||||
#define BACKLIGHT_LEVELS 6 | #define BACKLIGHT_LEVELS 6 | ||||
#endif | |||||
#else | #else | ||||
#define BACKLIGHT_LEVELS 3 | #define BACKLIGHT_LEVELS 3 | ||||
#endif | #endif | ||||
#define LED_COUNT 4 | |||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ | /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ | ||||
#define LOCKING_SUPPORT_ENABLE | #define LOCKING_SUPPORT_ENABLE | ||||
/* translates key to keycode */ | /* translates key to keycode */ | ||||
uint8_t keymap_key_to_keycode(uint8_t layer, key_t key) | uint8_t keymap_key_to_keycode(uint8_t layer, key_t key) | ||||
{ | { | ||||
#ifndef KEYMAP_EX_ENABLE | |||||
#ifndef KEYMAP_IN_EEPROM_ENABLE | |||||
return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]); | return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]); | ||||
#else | #else | ||||
return eeconfig_read_keymap_key(layer, key.row, key.col); | return eeconfig_read_keymap_key(layer, key.row, key.col); | ||||
action_t keymap_fn_to_action(uint8_t keycode) | action_t keymap_fn_to_action(uint8_t keycode) | ||||
{ | { | ||||
return (action_t) { | return (action_t) { | ||||
#ifndef KEYMAP_EX_ENABLE | |||||
#ifndef KEYMAP_IN_EEPROM_ENABLE | |||||
.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) | .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) | ||||
#else | #else | ||||
.code = eeconfig_read_keymap_fn_action(FN_INDEX(keycode)) | .code = eeconfig_read_keymap_fn_action(FN_INDEX(keycode)) | ||||
}; | }; | ||||
} | } | ||||
#ifdef KEYMAP_EX_ENABLE | |||||
#ifdef KEYMAP_IN_EEPROM_ENABLE | |||||
const uint8_t* keymaps_pointer(void) { | const uint8_t* keymaps_pointer(void) { | ||||
return (const uint8_t*)keymaps; | return (const uint8_t*)keymaps; | ||||
} | } |
#include "print.h" | #include "print.h" | ||||
#include "debug.h" | #include "debug.h" | ||||
#include "keymap.h" | #include "keymap.h" | ||||
#include "keymap_ex.h" | |||||
#include "keymap_in_eeprom.h" | |||||
extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; | extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; |
[4] = ACTION_LAYER_TOGGLE(2) | [4] = ACTION_LAYER_TOGGLE(2) | ||||
}; | }; | ||||
#ifdef KEYMAP_EX_ENABLE | |||||
#ifdef KEYMAP_IN_EEPROM_ENABLE | |||||
uint16_t keys_count(void) { | uint16_t keys_count(void) { | ||||
return sizeof(keymaps) / sizeof(keymaps[0]) * MATRIX_ROWS * MATRIX_COLS; | return sizeof(keymaps) / sizeof(keymaps[0]) * MATRIX_ROWS * MATRIX_COLS; | ||||
} | } |
#include "stdint.h" | #include "stdint.h" | ||||
#include "led.h" | #include "led.h" | ||||
#ifndef LEDMAP_ENABLE | |||||
/* LED pin configuration | /* LED pin configuration | ||||
* CapsLock: PC7 | * CapsLock: PC7 | ||||
* NumLock: PE6 | * NumLock: PE6 | ||||
PORTC &= ~(1<<PC6); | PORTC &= ~(1<<PC6); | ||||
} | } | ||||
} | } | ||||
#endif |
/* | |||||
Copyright 2014 Kai Ryu <[email protected]> | |||||
This program is free software: you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation, either version 2 of the License, or | |||||
(at your option) any later version. | |||||
This program is distributed in the hope that it will be useful, | |||||
but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
GNU General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with this program. If not, see <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#include <avr/pgmspace.h> | |||||
#include "ledmap.h" | |||||
#ifdef LEDMAP_ENABLE | |||||
static const uint8_t ledmaps[LED_COUNT] PROGMEM = { | |||||
[0] = LEDMAP_CAPS_LOCK | LEDMAP_BACKLIGHT, // CapsLock | |||||
[1] = LEDMAP_NUM_LOCK | LEDMAP_BACKLIGHT, // NumLock | |||||
[2] = LEDMAP_SCROLL_LOCK | LEDMAP_BACKLIGHT, // Logo | |||||
[3] = LEDMAP_BACKLIGHT, // Backlight | |||||
}; | |||||
uint8_t ledmap_get_code(uint8_t index) | |||||
{ | |||||
return pgm_read_byte(&ledmaps[index]); | |||||
} | |||||
/* LED pin configration | |||||
* CapsLock: PC7 | |||||
* NumLock: PE6 | |||||
* Logo: PC6 | |||||
* Backlight: PB7 | |||||
*/ | |||||
void ledmap_led_init(void) | |||||
{ | |||||
DDRC |= (1<<PC7); | |||||
PORTC |= (1<<PC7); | |||||
DDRE |= (1<<PE6); | |||||
PORTE |= (1<<PE6); | |||||
DDRC |= (1<<PC6); | |||||
PORTC &= ~(1<<PC6); | |||||
DDRB |= (1<<PB7); | |||||
PORTB &= ~(1<<PB7); | |||||
} | |||||
void ledmap_led_on(uint8_t index) | |||||
{ | |||||
switch (index) { | |||||
case 0: | |||||
PORTC &= ~(1<<PC7); | |||||
break; | |||||
case 1: | |||||
PORTE &= ~(1<<PE6); | |||||
break; | |||||
case 2: | |||||
PORTC |= (1<<PC6); | |||||
break; | |||||
case 3: | |||||
PORTB |= (1<<PB7); | |||||
} | |||||
} | |||||
void ledmap_led_off(uint8_t index) | |||||
{ | |||||
switch (index) { | |||||
case 0: | |||||
PORTC |= (1<<PC7); | |||||
break; | |||||
case 1: | |||||
PORTE |= (1<<PE6); | |||||
break; | |||||
case 2: | |||||
PORTC &= ~(1<<PB6); | |||||
break; | |||||
case 3: | |||||
PORTB &= ~(1<<PB7); | |||||
break; | |||||
} | |||||
} | |||||
#endif |