qmk

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.z3bra.org/qmk.git
Log | Files | Refs | Submodules | LICENSE

commit a32f7e1a25a8a200d838aa8256ffe39708fbd723
parent e2dfb787da2a2ba88e0e074b396a2b988e10eccf
Author: fauxpark <fauxpark@gmail.com>
Date:   Tue, 16 Jul 2019 17:56:36 +1000

Store backlight breathing state in EEPROM (#6105)

* Store backlight breathing state in EEPROM

* Reduce backlight_config.level from 6 bits to 4 (max 15 "on" levels)

* Error out if BACKLIGHT_LEVELS is > 15

* Remove mention of default backlight pin in rules.mk template

* Remove pointless comment

Diffstat:
quantum/quantum.c | 12++++++++++--
quantum/template/avr/config.h | 2--
quantum/template/avr/rules.mk | 2+-
tmk_core/common/backlight.c | 55++++++++++++++++++++++++++++++++++++++++++++++++++++++-
tmk_core/common/backlight.h | 19+++++++++++++++++--
5 files changed, 82 insertions(+), 8 deletions(-)

diff --git a/quantum/quantum.c b/quantum/quantum.c @@ -708,7 +708,7 @@ bool process_record_quantum(keyrecord_t *record) { #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_BREATHING) case BL_BRTG: { if (record->event.pressed) { - breathing_toggle(); + backlight_toggle_breathing(); } return false; } @@ -1196,6 +1196,12 @@ void backlight_init_ports(void) setPinOutput(backlight_pin); backlight_on(backlight_pin); ) + + #ifdef BACKLIGHT_BREATHING + if (is_backlight_breathing()) { + breathing_enable(); + } + #endif } __attribute__ ((weak)) @@ -1500,7 +1506,9 @@ void backlight_init_ports(void) backlight_init(); #ifdef BACKLIGHT_BREATHING - breathing_enable(); + if (is_backlight_breathing()) { + breathing_enable(); + } #endif } diff --git a/quantum/template/avr/config.h b/quantum/template/avr/config.h @@ -91,8 +91,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. /* define if matrix has ghost (lacks anti-ghosting diodes) */ //#define MATRIX_HAS_GHOST -/* number of backlight levels */ - /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE /* Locking resynchronize hack */ diff --git a/quantum/template/avr/rules.mk b/quantum/template/avr/rules.mk @@ -70,7 +70,7 @@ COMMAND_ENABLE = yes # Commands for debug and configuration SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work NKRO_ENABLE = no # USB Nkey Rollover -BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) UNICODE_ENABLE = no # Unicode diff --git a/tmk_core/common/backlight.c b/tmk_core/common/backlight.c @@ -100,7 +100,7 @@ void backlight_enable(void) backlight_set(backlight_config.level); } -/** /brief Disable backlight +/** \brief Disable backlight * * FIXME: needs doc */ @@ -162,3 +162,56 @@ uint8_t get_backlight_level(void) { return backlight_config.level; } + +#ifdef BACKLIGHT_BREATHING +/** \brief Backlight breathing toggle + * + * FIXME: needs doc + */ +void backlight_toggle_breathing(void) +{ + bool breathing = backlight_config.breathing; + dprintf("backlight breathing toggle: %u\n", breathing); + if (breathing) + backlight_disable_breathing(); + else + backlight_enable_breathing(); +} + +/** \brief Enable backlight breathing + * + * FIXME: needs doc + */ +void backlight_enable_breathing(void) +{ + if (backlight_config.breathing) return; // do nothing if breathing is already on + + backlight_config.breathing = true; + eeconfig_update_backlight(backlight_config.raw); + dprintf("backlight breathing enable\n"); + breathing_enable(); +} + +/** \brief Disable backlight breathing + * + * FIXME: needs doc + */ +void backlight_disable_breathing(void) +{ + if (!backlight_config.breathing) return; // do nothing if breathing is already off + + backlight_config.breathing = false; + eeconfig_update_backlight(backlight_config.raw); + dprintf("backlight breathing disable\n"); + breathing_disable(); +} + +/** \brief Get the backlight breathing status + * + * FIXME: needs doc + */ +bool is_backlight_breathing(void) +{ + return backlight_config.breathing; +} +#endif diff --git a/tmk_core/common/backlight.h b/tmk_core/common/backlight.h @@ -20,11 +20,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include <stdint.h> #include <stdbool.h> +#ifndef BACKLIGHT_LEVELS + #define BACKLIGHT_LEVELS 3 +#elif BACKLIGHT_LEVELS > 15 + #error "Maximum value of BACKLIGHT_LEVELS is 15" +#endif + typedef union { uint8_t raw; struct { - bool enable :1; - uint8_t level :7; + bool enable :1; + bool breathing :1; + uint8_t level :4; }; } backlight_config_t; @@ -40,3 +47,11 @@ void backlight_set(uint8_t level); void backlight_level(uint8_t level); uint8_t get_backlight_level(void); +#ifdef BACKLIGHT_BREATHING +void backlight_toggle_breathing(void); +void backlight_enable_breathing(void); +void backlight_disable_breathing(void); +bool is_backlight_breathing(void); +void breathing_enable(void); +void breathing_disable(void); +#endif