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
pull/6512/head
fauxpark 5 years ago committed by Florian Didron
parent b279d2b94e
commit 4083565334

@ -703,8 +703,9 @@ 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;
} }
#endif #endif
@ -1070,14 +1071,15 @@ __attribute__ ((weak))
void backlight_init_ports(void) void backlight_init_ports(void)
{ {
// Setup backlight pin as output and output to on state. // Setup backlight pin as output and output to on state.
// DDRx |= n FOR_EACH_LED(
_SFR_IO8((backlight_pin >> 4) + 1) |= _BV(backlight_pin & 0xF); setPinOutput(backlight_pin);
#if BACKLIGHT_ON_STATE == 0 backlight_on(backlight_pin);
// PORTx &= ~n )
_SFR_IO8((backlight_pin >> 4) + 2) &= ~_BV(backlight_pin & 0xF);
#else #ifdef BACKLIGHT_BREATHING
// PORTx |= n if (is_backlight_breathing()) {
_SFR_IO8((backlight_pin >> 4) + 2) |= _BV(backlight_pin & 0xF); breathing_enable();
}
#endif #endif
} }
@ -1303,7 +1305,9 @@ void backlight_init_ports(void)
backlight_init(); backlight_init();
#ifdef BACKLIGHT_BREATHING #ifdef BACKLIGHT_BREATHING
breathing_enable(); if (is_backlight_breathing()) {
breathing_enable();
}
#endif #endif
} }

@ -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 */

@ -71,7 +71,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

@ -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

@ -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

Loading…
Cancel
Save