- SoftPWM LED - Breathing LED - Fading LED - Typing LED - Ledmap - Ledmap in EEPROM - Built-in function tricky escold_master
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) | ||||
USB_6KRO_ENABLE = yes # USB 6Key Rollover | 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 | ||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality | BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality | ||||
KEYMAP_IN_EEPROM_ENABLE = yes # Read keymap from 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" |
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) | ||||
USB_6KRO_ENABLE = yes # USB 6Key Rollover | 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 | ||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality | BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality | ||||
KEYMAP_IN_EEPROM_ENABLE = yes # Read keymap from 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 | |||||
#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 | |||||
static const uint8_t backlight_table[] PROGMEM = { | static const uint8_t backlight_table[] PROGMEM = { | ||||
0, 16, 128, 255 | 0, 16, 128, 255 | ||||
inline void backlight_set_raw(uint8_t raw); | inline void backlight_set_raw(uint8_t raw); | ||||
#ifdef SOFTPWM_LED_ENABLE | |||||
#ifdef FADING_LED_ENABLE | |||||
static uint8_t backlight_mode; | |||||
#endif | |||||
#endif | |||||
/* Backlight pin configuration | /* Backlight pin configuration | ||||
* PWM: PB7 | |||||
* PWM: PB7(OC1C) | |||||
*/ | */ | ||||
#ifndef SOFTPWM_LED_ENABLE | |||||
void backlight_enable(void) | void backlight_enable(void) | ||||
{ | { | ||||
// Turn on PWM | // Turn on PWM | ||||
TCCR1B &= ~( (1<<CS11) | (1<<CS10) ); | TCCR1B &= ~( (1<<CS11) | (1<<CS10) ); | ||||
sei(); | sei(); | ||||
} | } | ||||
#endif | |||||
void backlight_set(uint8_t level) | void backlight_set(uint8_t level) | ||||
{ | { | ||||
#ifdef FADING_LED_ENABLE | |||||
backlight_mode = level; | |||||
#endif | |||||
#ifdef BREATHING_LED_ENABLE | #ifdef BREATHING_LED_ENABLE | ||||
switch (level) { | switch (level) { | ||||
case 1: | case 1: | ||||
case 2: | case 2: | ||||
case 3: | case 3: | ||||
#ifdef SOFTPWM_LED_ENABLE | |||||
softpwm_led_enable(); | |||||
#ifdef FADING_LED_ENABLE | |||||
fading_led_disable_all(); | |||||
#endif | |||||
breathing_led_disable_all(); | |||||
#else | |||||
backlight_enable(); | backlight_enable(); | ||||
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: | ||||
#ifdef SOFTPWM_LED_ENABLE | |||||
softpwm_led_enable(); | |||||
#ifdef FADING_LED_ENABLE | |||||
fading_led_disable_all(); | |||||
#endif | |||||
breathing_led_enable_all(); | |||||
#else | |||||
backlight_enable(); | backlight_enable(); | ||||
breathing_led_enable(); | breathing_led_enable(); | ||||
#endif | |||||
breathing_led_set_duration(6 - level); | breathing_led_set_duration(6 - level); | ||||
break; | break; | ||||
#ifdef SOFTPWM_LED_ENABLE | |||||
#ifdef FADING_LED_ENABLE | |||||
case 7: | |||||
softpwm_led_enable(); | |||||
fading_led_enable_all(); | |||||
breathing_led_disable_all(); | |||||
fading_led_set_direction(FADING_LED_FADE_IN); | |||||
fading_led_set_duration(3); | |||||
break; | |||||
case 8: | |||||
softpwm_led_enable(); | |||||
fading_led_enable_all(); | |||||
breathing_led_disable_all(); | |||||
fading_led_set_direction(FADING_LED_FADE_OUT); | |||||
fading_led_set_duration(3); | |||||
break; | |||||
#endif | |||||
#endif | |||||
case 0: | case 0: | ||||
default: | default: | ||||
#ifdef SOFTPWM_LED_ENABLE | |||||
#ifdef FADING_LED_ENABLE | |||||
fading_led_disable_all(); | |||||
#endif | |||||
breathing_led_disable_all(); | |||||
softpwm_led_disable(); | |||||
#else | |||||
breathing_led_disable(); | breathing_led_disable(); | ||||
backlight_disable(); | backlight_disable(); | ||||
#endif | |||||
break; | break; | ||||
} | } | ||||
#else | #else | ||||
backlight_disable(); | backlight_disable(); | ||||
} | } | ||||
#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_init(void) | |||||
{ | |||||
DDRB |= (1<<PB7); | |||||
} | |||||
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 |
#define DEBOUNCE 5 | #define DEBOUNCE 5 | ||||
/* number of backlight levels */ | /* number of backlight levels */ | ||||
#ifdef SOFTPWM_LED_ENABLE | |||||
#ifdef BREATHING_LED_ENABLE | #ifdef BREATHING_LED_ENABLE | ||||
#ifdef FADING_LED_ENABLE | |||||
#define BACKLIGHT_LEVELS 8 | |||||
#else | |||||
#define BACKLIGHT_LEVELS 6 | |||||
#endif | |||||
#else | |||||
#define BACKLIGHT_LEVELS 3 | |||||
#endif | |||||
#else | |||||
#ifdef BREATHING_LED_ENABLE | |||||
#define BREATHING_LED_TIMER1 | |||||
#define BACKLIGHT_LEVELS 6 | #define BACKLIGHT_LEVELS 6 | ||||
#else | #else | ||||
#define BACKLIGHT_LEVELS 3 | #define BACKLIGHT_LEVELS 3 | ||||
#endif | #endif | ||||
#endif | |||||
#define BACKLIGHT_CUSTOM | |||||
/* number of leds */ | |||||
#define LED_COUNT 2 | |||||
/* 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 |
#include "keymap_common.h" | #include "keymap_common.h" | ||||
/* 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, keypos_t key) | |||||
{ | { | ||||
#ifndef KEYMAP_IN_EEPROM_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)]); |
return sizeof(fn_actions) / sizeof(fn_actions[0]); | return sizeof(fn_actions) / sizeof(fn_actions[0]); | ||||
} | } | ||||
#endif | #endif | ||||
enum function_id { | |||||
TRICKY_ESC = 0, | |||||
}; | |||||
#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) | |||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) | |||||
{ | |||||
static uint8_t tricky_esc_registered; | |||||
switch (id) { | |||||
case TRICKY_ESC: | |||||
if (record->event.pressed) { | |||||
if (get_mods() & MODS_SHIFT_MASK) { | |||||
tricky_esc_registered = KC_GRV; | |||||
} | |||||
else { | |||||
tricky_esc_registered = KC_ESC; | |||||
} | |||||
register_code(tricky_esc_registered); | |||||
send_keyboard_report(); | |||||
} | |||||
else { | |||||
unregister_code(tricky_esc_registered); | |||||
send_keyboard_report(); | |||||
} | |||||
break; | |||||
} | |||||
} |
#include "stdint.h" | #include "stdint.h" | ||||
#include "led.h" | #include "led.h" | ||||
#ifndef LEDMAP_ENABLE | |||||
void led_set(uint8_t usb_led) | void led_set(uint8_t usb_led) | ||||
{ | { | ||||
PORTB &= ~(1<<PB2); | PORTB &= ~(1<<PB2); | ||||
} | } | ||||
} | } | ||||
#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 uint16_t ledmaps[LED_COUNT] PROGMEM = { | |||||
[0] = LEDMAP_CAPS_LOCK, // CapsLock - PB2 | |||||
[1] = LEDMAP_BACKLIGHT, // PWM - PB7 | |||||
}; | |||||
ledmap_t ledmap_get_code(uint8_t index) | |||||
{ | |||||
return (ledmap_t) { .code = pgm_read_word(&ledmaps[index]) }; | |||||
} | |||||
void ledmap_led_init(void) | |||||
{ | |||||
DDRB |= (1<<PB2 | 1<<PB7); | |||||
PORTB |= (1<<PB2); | |||||
PORTB &= ~(1<<PB7); | |||||
} | |||||
void ledmap_led_on(uint8_t index) | |||||
{ | |||||
switch (index) { | |||||
case 0: | |||||
PORTB &= ~(1<<PB2); | |||||
break; | |||||
case 1: | |||||
PORTB |= (1<<PB7); | |||||
break; | |||||
} | |||||
} | |||||
void ledmap_led_off(uint8_t index) | |||||
{ | |||||
switch (index) { | |||||
case 0: | |||||
PORTB |= (1<<PB2); | |||||
break; | |||||
case 1: | |||||
PORTB &= ~(1<<PB7); | |||||
break; | |||||
} | |||||
} | |||||
#endif |