+ USB 6KRO + SoftPWM LED + Breathing LED + Fading LED + Typing LED + Ledmap + Ledmap in EEPROMkimera
@@ -52,6 +52,7 @@ SRC = keymap_common.c \ | |||
matrix.c \ | |||
led.c \ | |||
backlight.c \ | |||
ledmap.c \ | |||
twimaster.c \ | |||
kimera.c | |||
@@ -136,12 +137,18 @@ CONSOLE_ENABLE = yes # Console for debug(+400) | |||
COMMAND_ENABLE = yes # Commands for debug and configuration | |||
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend | |||
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_USE_BUSYWAIT = yes | |||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality | |||
KEYMAP_IN_EEPROM_ENABLE = yes # External keymap in 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 | |||
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" | |||
#EXTRALDFLAGS = -Wl,--relax |
@@ -52,6 +52,7 @@ SRC = keymap_common.c \ | |||
matrix.c \ | |||
led.c \ | |||
backlight.c \ | |||
ledmap.c \ | |||
twimaster.c \ | |||
kimera.c | |||
@@ -99,13 +100,17 @@ CONSOLE_ENABLE = yes # Console for debug(+400) | |||
COMMAND_ENABLE = yes # Commands for debug and configuration | |||
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend | |||
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_USE_BUSYWAIT = yes | |||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality | |||
KEYMAP_IN_EEPROM_ENABLE = yes # External keymap in eeprom | |||
KEYMAP_SECTION_ENABLE = yes # Fixed address keymap for keymap editor | |||
#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 | |||
LEDMAP_ENABLE = yes # Enable LED mapping | |||
LEDMAP_IN_EEPROM_ENABLE = yes # Read LED mapping from eeprom | |||
# Search Path |
@@ -52,6 +52,7 @@ SRC = keymap_common.c \ | |||
matrix.c \ | |||
led.c \ | |||
backlight.c \ | |||
ledmap.c \ | |||
twimaster.c \ | |||
kimera.c | |||
@@ -130,12 +131,17 @@ CONSOLE_ENABLE = yes # Console for debug(+400) | |||
COMMAND_ENABLE = yes # Commands for debug and configuration | |||
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend | |||
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_USE_BUSYWAIT = yes | |||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality | |||
KEYMAP_IN_EEPROM_ENABLE = yes # External keymap in eeprom | |||
KEYMAP_SECTION_ENABLE = yes # Fixed address keymap for keymap editor | |||
#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 | |||
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" | |||
#EXTRALDFLAGS = -Wl,--relax |
@@ -19,7 +19,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
#include <avr/interrupt.h> | |||
#include <avr/pgmspace.h> | |||
#include "backlight.h" | |||
#ifdef SOFTPWM_LED_ENABLE | |||
#include "softpwm_led.h" | |||
#else | |||
#include "breathing_led.h" | |||
#endif | |||
#include "action.h" | |||
#include "kimera.h" | |||
#ifdef BACKLIGHT_ENABLE | |||
@@ -32,9 +37,16 @@ static const uint8_t backlight_table[] PROGMEM = { | |||
0, 16, 128, 255 | |||
}; | |||
#ifdef SOFTPWM_LED_ENABLE | |||
#ifdef FADING_LED_ENABLE | |||
static uint8_t backlight_mode; | |||
#endif | |||
#endif | |||
/* Backlight pin configuration | |||
* LED4: PB6 (D10) OC1B | |||
*/ | |||
#ifndef SOFTPWM_LED_ENABLE | |||
void backlight_enable(void) | |||
{ | |||
// Turn on PWM | |||
@@ -44,7 +56,9 @@ void backlight_enable(void) | |||
TCCR1B |= ((1<<CS11) | (1<<CS10)); | |||
sei(); | |||
} | |||
#endif | |||
#ifndef SOFTPWM_LED_ENABLE | |||
void backlight_disable(void) | |||
{ | |||
// Turn off PWM | |||
@@ -55,29 +69,76 @@ void backlight_disable(void) | |||
sei(); | |||
LED4_OCR = 0; | |||
} | |||
#endif | |||
void backlight_set(uint8_t level) | |||
{ | |||
#ifdef FADING_LED_ENABLE | |||
backlight_mode = level; | |||
#endif | |||
#ifdef BREATHING_LED_ENABLE | |||
switch (level) { | |||
case 1: | |||
case 2: | |||
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(); | |||
breathing_led_disable(); | |||
#endif | |||
backlight_set_raw(pgm_read_byte(&backlight_table[level])); | |||
break; | |||
case 4: | |||
case 5: | |||
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(); | |||
breathing_led_enable(); | |||
#endif | |||
breathing_led_set_duration(6 - level); | |||
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: | |||
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(); | |||
backlight_disable(); | |||
#endif | |||
break; | |||
} | |||
#else | |||
@@ -91,16 +152,59 @@ void backlight_set(uint8_t level) | |||
#endif | |||
} | |||
#ifndef SOFTPWM_LED_ENABLE | |||
#ifdef BREATHING_LED_ENABLE | |||
void breathing_led_set_raw(uint8_t raw) | |||
{ | |||
backlight_set_raw(raw); | |||
} | |||
#endif | |||
#endif | |||
inline void backlight_set_raw(uint8_t raw) | |||
{ | |||
#ifdef SOFTPWM_LED_ENABLE | |||
softpwm_led_set_all(raw); | |||
#else | |||
LED4_OCR = raw; | |||
#endif | |||
} | |||
#ifndef LEDMAP_ENABLE | |||
#ifdef SOFTPWM_LED_ENABLE | |||
void softpwm_led_init(void) | |||
{ | |||
LED4_DDR |= (1<<LED4_BIT); | |||
} | |||
void softpwm_led_on(uint8_t index) | |||
{ | |||
LED4_PORT |= (1<<LED4_BIT); | |||
} | |||
void softpwm_led_off(uint8_t index) | |||
{ | |||
LED4_PORT &= ~(1<<LED4_BIT); | |||
} | |||
#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 |
@@ -35,7 +35,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
#define MATRIX_SIZE 16 * 16 | |||
#define FN_ACTIONS_COUNT 32 | |||
#define KEYMAPS_COUNT 3 | |||
#define EECONFIG_KEYMAP_IN_EEPROM 41 | |||
#define EECONFIG_KEYMAP_IN_EEPROM 45 | |||
/* define if matrix has ghost */ | |||
//#define MATRIX_HAS_GHOST | |||
@@ -45,11 +45,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
/* number of backlight levels */ | |||
#ifdef BREATHING_LED_ENABLE | |||
#ifdef FADING_LED_ENABLE | |||
#define BACKLIGHT_LEVELS 8 | |||
#else | |||
#define BACKLIGHT_LEVELS 6 | |||
#endif | |||
#else | |||
#define BACKLIGHT_LEVELS 3 | |||
#endif | |||
/* enable customized backlight logic */ | |||
#define BACKLIGHT_CUSTOM | |||
/* number of leds */ | |||
#define LED_COUNT 4 | |||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ | |||
#define LOCKING_SUPPORT_ENABLE | |||
@@ -79,4 +89,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
//#define NO_ACTION_MACRO | |||
//#define NO_ACTION_FUNCTION | |||
#define NO_SUSPEND_POWER_DOWN | |||
#endif |
@@ -116,9 +116,9 @@ const uint16_t PROGMEM dummy[] = { | |||
/* Matrix Mapping in EEPROM */ | |||
#define EECONFIG_ROW_COUNT (uint8_t *)7 | |||
#define EECONFIG_COL_COUNT (uint8_t *)8 | |||
#define EECONFIG_ROW_COL_MAPPING (uint8_t *)9 | |||
#define EECONFIG_ROW_COUNT (uint8_t *)11 | |||
#define EECONFIG_COL_COUNT (uint8_t *)12 | |||
#define EECONFIG_ROW_COL_MAPPING (uint8_t *)13 | |||
#define UNCONFIGURED 0xFF | |||
/* Functions */ |
@@ -20,9 +20,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
#include "led.h" | |||
#include "kimera.h" | |||
#ifndef LEDMAP_ENABLE | |||
void led_set(uint8_t usb_led) | |||
{ | |||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) { | |||
if (usb_led & (1<<USB_LED_NUM_LOCK)) { | |||
// output low | |||
LED1_DDR |= (1<<LED1_BIT); | |||
LED1_PORT &= ~(1<<LED1_BIT); | |||
@@ -31,7 +33,7 @@ void led_set(uint8_t usb_led) | |||
LED1_DDR &= ~(1<<LED1_BIT); | |||
LED1_PORT &= ~(1<<LED1_BIT); | |||
} | |||
if (usb_led & (1<<USB_LED_SCROLL_LOCK)) { | |||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) { | |||
// output low | |||
LED2_DDR |= (1<<LED2_BIT); | |||
LED2_PORT &= ~(1<<LED2_BIT); | |||
@@ -40,7 +42,7 @@ void led_set(uint8_t usb_led) | |||
LED2_DDR &= ~(1<<LED2_BIT); | |||
LED2_PORT &= ~(1<<LED2_BIT); | |||
} | |||
if (usb_led & (1<<USB_LED_NUM_LOCK)) { | |||
if (usb_led & (1<<USB_LED_SCROLL_LOCK)) { | |||
// output low | |||
LED3_DDR |= (1<<LED3_BIT); | |||
LED3_PORT &= ~(1<<LED3_BIT); | |||
@@ -50,3 +52,5 @@ void led_set(uint8_t usb_led) | |||
LED3_PORT &= ~(1<<LED3_BIT); | |||
} | |||
} | |||
#endif |
@@ -0,0 +1,84 @@ | |||
/* | |||
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" | |||
#include "kimera.h" | |||
#ifdef LEDMAP_ENABLE | |||
static const uint8_t ledmaps[LED_COUNT] PROGMEM = { | |||
[0] = LEDMAP_NUM_LOCK, // LED1 | |||
[1] = LEDMAP_CAPS_LOCK, // LED2 | |||
[2] = LEDMAP_SCROLL_LOCK, // LED3 | |||
[3] = LEDMAP_NO | LEDMAP_BACKLIGHT, // LED4 | |||
}; | |||
uint8_t ledmap_get_code(uint8_t index) | |||
{ | |||
return pgm_read_byte(&ledmaps[index]); | |||
} | |||
void ledmap_led_init(void) | |||
{ | |||
LED1_DDR |= (1<<LED1_BIT); | |||
LED1_PORT |= (1<<LED1_BIT); | |||
LED2_DDR |= (1<<LED2_BIT); | |||
LED2_PORT |= (1<<LED2_BIT); | |||
LED3_DDR |= (1<<LED3_BIT); | |||
LED3_PORT |= (1<<LED3_BIT); | |||
LED4_DDR |= (1<<LED4_BIT); | |||
LED4_PORT &= ~(1<<LED4_BIT); | |||
} | |||
void ledmap_led_on(uint8_t index) | |||
{ | |||
switch (index) { | |||
case 0: | |||
LED1_PORT &= ~(1<<LED1_BIT); | |||
break; | |||
case 1: | |||
LED2_PORT &= ~(1<<LED2_BIT); | |||
break; | |||
case 2: | |||
LED3_PORT &= ~(1<<LED3_BIT); | |||
break; | |||
case 3: | |||
LED4_PORT |= (1<<LED4_BIT); | |||
break; | |||
} | |||
} | |||
void ledmap_led_off(uint8_t index) | |||
{ | |||
switch (index) { | |||
case 0: | |||
LED1_PORT |= (1<<LED1_BIT); | |||
break; | |||
case 1: | |||
LED2_PORT |= (1<<LED2_BIT); | |||
break; | |||
case 2: | |||
LED3_PORT |= (1<<LED3_BIT); | |||
break; | |||
case 3: | |||
LED4_PORT &= ~(1<<LED4_BIT); | |||
break; | |||
} | |||
} | |||
#endif |