From 8b8bfaff6538da523df643edf657015d4aed5c36 Mon Sep 17 00:00:00 2001 From: Kai Ryu Date: Tue, 9 Dec 2014 19:31:40 +0900 Subject: [PATCH] New features for LR94 - SoftPWM LED - Breathing LED - Fading LED - Typing LED - Ledmap - Ledmap in EEPROM - Built-in macro keypad 00 --- keyboard/lr94/Makefile | 9 ++- keyboard/lr94/Makefile.pjrc | 9 ++- keyboard/lr94/backlight.c | 107 +++++++++++++++++++++++++++++++++ keyboard/lr94/config.h | 15 +++++ keyboard/lr94/keymap_common.c | 2 +- keyboard/lr94/keymap_default.c | 15 +++++ keyboard/lr94/led.c | 4 ++ keyboard/lr94/ledmap.c | 66 ++++++++++++++++++++ 8 files changed, 222 insertions(+), 5 deletions(-) create mode 100644 keyboard/lr94/ledmap.c diff --git a/keyboard/lr94/Makefile b/keyboard/lr94/Makefile index 5cd80c52..4236bce1 100644 --- a/keyboard/lr94/Makefile +++ b/keyboard/lr94/Makefile @@ -51,7 +51,8 @@ TARGET_DIR = . SRC = keymap_common.c \ matrix.c \ led.c \ - backlight.c + backlight.c \ + ledmap.c ifdef KEYMAP SRC := keymap_$(KEYMAP).c $(SRC) @@ -131,8 +132,12 @@ USB_6KRO_ENABLE = yes # USB 6key Rollover #PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support 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_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" diff --git a/keyboard/lr94/Makefile.pjrc b/keyboard/lr94/Makefile.pjrc index 8de0a556..8605134a 100644 --- a/keyboard/lr94/Makefile.pjrc +++ b/keyboard/lr94/Makefile.pjrc @@ -51,7 +51,8 @@ TARGET_DIR = . SRC = keymap_common.c \ matrix.c \ led.c \ - backlight.c + backlight.c \ + ledmap.c ifdef KEYMAP SRC := keymap_$(KEYMAP).c $(SRC) @@ -101,8 +102,12 @@ USB_6KRO_ENABLE = yes # USB 6key Rollover #PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support 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_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 diff --git a/keyboard/lr94/backlight.c b/keyboard/lr94/backlight.c index beaabd88..ee6f6ebc 100644 --- a/keyboard/lr94/backlight.c +++ b/keyboard/lr94/backlight.c @@ -19,7 +19,14 @@ along with this program. If not, see . #include #include #include "backlight.h" +#ifdef SOFTPWM_LED_ENABLE +#include "softpwm_led.h" +#else #include "breathing_led.h" +#endif +#include "action.h" + +#ifdef BACKLIGHT_ENABLE static const uint8_t backlight_table[] PROGMEM = { 0, 16, 128, 255 @@ -27,9 +34,16 @@ static const uint8_t backlight_table[] PROGMEM = { 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 * PWM: PC6(OC3A) */ +#ifndef SOFTPWM_LED_ENABLE void backlight_enable(void) { // Turn on PWM @@ -48,29 +62,76 @@ void backlight_disable(void) TCCR3B &= ~( (1<. #define DEBOUNCE 5 /* number of backlight levels */ +#ifdef SOFTPWM_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 #else #define BACKLIGHT_LEVELS 3 #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 */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboard/lr94/keymap_common.c b/keyboard/lr94/keymap_common.c index 6ab88064..5d03cffe 100644 --- a/keyboard/lr94/keymap_common.c +++ b/keyboard/lr94/keymap_common.c @@ -17,7 +17,7 @@ along with this program. If not, see . #include "keymap_common.h" /* 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 return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]); diff --git a/keyboard/lr94/keymap_default.c b/keyboard/lr94/keymap_default.c index cf5a4da8..e8429dfb 100644 --- a/keyboard/lr94/keymap_default.c +++ b/keyboard/lr94/keymap_default.c @@ -99,3 +99,18 @@ uint16_t fn_actions_count(void) { return sizeof(fn_actions) / sizeof(fn_actions[0]); } #endif + +enum macro_id { + KEYPAD_00 = 0, +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch (id) { + case KEYPAD_00: + return (record->event.pressed ? + MACRO( T(P0), T(P0), END ) : + MACRO_NONE ); + } + return MACRO_NONE; +} diff --git a/keyboard/lr94/led.c b/keyboard/lr94/led.c index 5899603f..a028040e 100644 --- a/keyboard/lr94/led.c +++ b/keyboard/lr94/led.c @@ -20,6 +20,8 @@ along with this program. If not, see . #include "led.h" +#ifndef LEDMAP_ENABLE + void led_set(uint8_t usb_led) { if (usb_led & (1< + +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 . +*/ + +#include +#include "ledmap.h" + + +#ifdef LEDMAP_ENABLE + +static const uint16_t ledmaps[LED_COUNT] PROGMEM = { + [0] = LEDMAP_CAPS_LOCK, // CapsLock - PB2 + [1] = LEDMAP_BACKLIGHT, // PWM - PC6 +}; + +ledmap_t ledmap_get_code(uint8_t index) +{ + return (ledmap_t) { .code = pgm_read_word(&ledmaps[index]) }; +} + +void ledmap_led_init(void) +{ + DDRB |= (1<