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
This commit is contained in:
fauxpark 2019-07-16 17:56:36 +10:00 committed by skullydazed
parent e2dfb787da
commit a32f7e1a25
5 changed files with 82 additions and 8 deletions

View File

@ -708,7 +708,7 @@ bool process_record_quantum(keyrecord_t *record) {
#if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_BREATHING) #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_BREATHING)
case BL_BRTG: { case BL_BRTG: {
if (record->event.pressed) { if (record->event.pressed) {
breathing_toggle(); backlight_toggle_breathing();
} }
return false; return false;
} }
@ -1196,6 +1196,12 @@ void backlight_init_ports(void)
setPinOutput(backlight_pin); setPinOutput(backlight_pin);
backlight_on(backlight_pin); backlight_on(backlight_pin);
) )
#ifdef BACKLIGHT_BREATHING
if (is_backlight_breathing()) {
breathing_enable();
}
#endif
} }
__attribute__ ((weak)) __attribute__ ((weak))
@ -1500,7 +1506,9 @@ void backlight_init_ports(void)
backlight_init(); backlight_init();
#ifdef BACKLIGHT_BREATHING #ifdef BACKLIGHT_BREATHING
if (is_backlight_breathing()) {
breathing_enable(); breathing_enable();
}
#endif #endif
} }

View File

@ -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 if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST //#define MATRIX_HAS_GHOST
/* number of backlight levels */
/* 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
/* Locking resynchronize hack */ /* Locking resynchronize hack */

View File

@ -70,7 +70,7 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend 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 # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover 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 RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode UNICODE_ENABLE = no # Unicode

View File

@ -100,7 +100,7 @@ void backlight_enable(void)
backlight_set(backlight_config.level); backlight_set(backlight_config.level);
} }
/** /brief Disable backlight /** \brief Disable backlight
* *
* FIXME: needs doc * FIXME: needs doc
*/ */
@ -162,3 +162,56 @@ uint8_t get_backlight_level(void)
{ {
return backlight_config.level; 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

View File

@ -20,11 +20,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <stdint.h> #include <stdint.h>
#include <stdbool.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 { typedef union {
uint8_t raw; uint8_t raw;
struct { struct {
bool enable :1; bool enable :1;
uint8_t level :7; bool breathing :1;
uint8_t level :4;
}; };
} backlight_config_t; } backlight_config_t;
@ -40,3 +47,11 @@ void backlight_set(uint8_t level);
void backlight_level(uint8_t level); void backlight_level(uint8_t level);
uint8_t get_backlight_level(void); 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