diff --git a/keyboard/smart68/Makefile b/keyboard/smart68/Makefile
index b9e18697..e4d8dc4e 100644
--- a/keyboard/smart68/Makefile
+++ b/keyboard/smart68/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)
@@ -130,9 +131,13 @@ NKRO_ENABLE = yes # USB Nkey Rollover
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_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
+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/smart68/Makefile.pjrc b/keyboard/smart68/Makefile.pjrc
index 913e1671..08797080 100644
--- a/keyboard/smart68/Makefile.pjrc
+++ b/keyboard/smart68/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)
@@ -100,9 +101,13 @@ NKRO_ENABLE = yes # USB Nkey Rollover
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_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
+LEDMAP_ENABLE = yes # Enable LED mapping
+LEDMAP_IN_EEPROM_ENABLE = yes # Read LED mapping from eeprom
diff --git a/keyboard/smart68/backlight.c b/keyboard/smart68/backlight.c
index f92e6a74..c2aa615f 100644
--- a/keyboard/smart68/backlight.c
+++ b/keyboard/smart68/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: PB7
+ * PWM: PB7(OC1C)
*/
+#ifndef SOFTPWM_LED_ENABLE
void backlight_enable(void)
{
// Turn on PWM
@@ -48,29 +62,76 @@ void backlight_disable(void)
TCCR1B &= ~( (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/smart68/keymap_common.c b/keyboard/smart68/keymap_common.c
index 6ab88064..5d03cffe 100644
--- a/keyboard/smart68/keymap_common.c
+++ b/keyboard/smart68/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/smart68/keymap_default.c b/keyboard/smart68/keymap_default.c
index 04d72441..e897b697 100644
--- a/keyboard/smart68/keymap_default.c
+++ b/keyboard/smart68/keymap_default.c
@@ -76,3 +76,31 @@ uint16_t fn_actions_count(void) {
return sizeof(fn_actions) / sizeof(fn_actions[0]);
}
#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;
+ }
+}
diff --git a/keyboard/smart68/led.c b/keyboard/smart68/led.c
index 5899603f..2cf429f8 100644
--- a/keyboard/smart68/led.c
+++ b/keyboard/smart68/led.c
@@ -19,6 +19,7 @@ along with this program. If not, see .
#include "stdint.h"
#include "led.h"
+#ifndef LEDMAP_ENABLE
void led_set(uint8_t usb_led)
{
@@ -32,3 +33,5 @@ void led_set(uint8_t usb_led)
PORTB &= ~(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 - 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<