+ USB 6KRO + SoftPWM LED + Breathing LED + Fading LED + Typing LED + Ledmap + Ledmap in EEPROMkimera
matrix.c \ | matrix.c \ | ||||
led.c \ | led.c \ | ||||
backlight.c \ | backlight.c \ | ||||
ledmap.c \ | |||||
twimaster.c \ | twimaster.c \ | ||||
kimera.c | kimera.c | ||||
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_IN_EEPROM_ENABLE = yes # External keymap in eeprom | 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 | 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 |
matrix.c \ | matrix.c \ | ||||
led.c \ | led.c \ | ||||
backlight.c \ | backlight.c \ | ||||
ledmap.c \ | |||||
twimaster.c \ | twimaster.c \ | ||||
kimera.c | kimera.c | ||||
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_IN_EEPROM_ENABLE = yes # External keymap in eeprom | 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 | 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 |
matrix.c \ | matrix.c \ | ||||
led.c \ | led.c \ | ||||
backlight.c \ | backlight.c \ | ||||
ledmap.c \ | |||||
twimaster.c \ | twimaster.c \ | ||||
kimera.c | kimera.c | ||||
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_IN_EEPROM_ENABLE = yes # External keymap in eeprom | 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 | 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 |
#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" | |||||
#include "kimera.h" | #include "kimera.h" | ||||
#ifdef BACKLIGHT_ENABLE | #ifdef BACKLIGHT_ENABLE | ||||
0, 16, 128, 255 | 0, 16, 128, 255 | ||||
}; | }; | ||||
#ifdef SOFTPWM_LED_ENABLE | |||||
#ifdef FADING_LED_ENABLE | |||||
static uint8_t backlight_mode; | |||||
#endif | |||||
#endif | |||||
/* Backlight pin configuration | /* Backlight pin configuration | ||||
* LED4: PB6 (D10) OC1B | * LED4: PB6 (D10) OC1B | ||||
*/ | */ | ||||
#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 | |||||
#ifndef SOFTPWM_LED_ENABLE | |||||
void backlight_disable(void) | void backlight_disable(void) | ||||
{ | { | ||||
// Turn off PWM | // Turn off PWM | ||||
sei(); | sei(); | ||||
LED4_OCR = 0; | LED4_OCR = 0; | ||||
} | } | ||||
#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 | ||||
#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 | |||||
LED4_OCR = raw; | 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 | #endif |
#define MATRIX_SIZE 16 * 16 | #define MATRIX_SIZE 16 * 16 | ||||
#define FN_ACTIONS_COUNT 32 | #define FN_ACTIONS_COUNT 32 | ||||
#define KEYMAPS_COUNT 3 | #define KEYMAPS_COUNT 3 | ||||
#define EECONFIG_KEYMAP_IN_EEPROM 41 | |||||
#define EECONFIG_KEYMAP_IN_EEPROM 45 | |||||
/* define if matrix has ghost */ | /* define if matrix has ghost */ | ||||
//#define MATRIX_HAS_GHOST | //#define MATRIX_HAS_GHOST | ||||
/* 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 | ||||
/* 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 */ | /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ | ||||
#define LOCKING_SUPPORT_ENABLE | #define LOCKING_SUPPORT_ENABLE | ||||
//#define NO_ACTION_MACRO | //#define NO_ACTION_MACRO | ||||
//#define NO_ACTION_FUNCTION | //#define NO_ACTION_FUNCTION | ||||
#define NO_SUSPEND_POWER_DOWN | |||||
#endif | #endif |
/* Matrix Mapping in EEPROM */ | /* 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 | #define UNCONFIGURED 0xFF | ||||
/* Functions */ | /* Functions */ |
#include "led.h" | #include "led.h" | ||||
#include "kimera.h" | #include "kimera.h" | ||||
#ifndef LEDMAP_ENABLE | |||||
void led_set(uint8_t usb_led) | 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 | // output low | ||||
LED1_DDR |= (1<<LED1_BIT); | LED1_DDR |= (1<<LED1_BIT); | ||||
LED1_PORT &= ~(1<<LED1_BIT); | LED1_PORT &= ~(1<<LED1_BIT); | ||||
LED1_DDR &= ~(1<<LED1_BIT); | LED1_DDR &= ~(1<<LED1_BIT); | ||||
LED1_PORT &= ~(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 | // output low | ||||
LED2_DDR |= (1<<LED2_BIT); | LED2_DDR |= (1<<LED2_BIT); | ||||
LED2_PORT &= ~(1<<LED2_BIT); | LED2_PORT &= ~(1<<LED2_BIT); | ||||
LED2_DDR &= ~(1<<LED2_BIT); | LED2_DDR &= ~(1<<LED2_BIT); | ||||
LED2_PORT &= ~(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 | // output low | ||||
LED3_DDR |= (1<<LED3_BIT); | LED3_DDR |= (1<<LED3_BIT); | ||||
LED3_PORT &= ~(1<<LED3_BIT); | LED3_PORT &= ~(1<<LED3_BIT); | ||||
LED3_PORT &= ~(1<<LED3_BIT); | LED3_PORT &= ~(1<<LED3_BIT); | ||||
} | } | ||||
} | } | ||||
#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" | |||||
#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 |