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