~ruther/qmk_firmware

a32f7e1a25a8a200d838aa8256ffe39708fbd723 — fauxpark 6 years ago e2dfb78
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
M quantum/quantum.c => quantum/quantum.c +10 -2
@@ 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
}


M quantum/template/avr/config.h => quantum/template/avr/config.h +0 -2
@@ 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 */

M quantum/template/avr/rules.mk => quantum/template/avr/rules.mk +1 -1
@@ 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

M tmk_core/common/backlight.c => tmk_core/common/backlight.c +54 -1
@@ 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

M tmk_core/common/backlight.h => tmk_core/common/backlight.h +17 -2
@@ 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