]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Store backlight breathing state in EEPROM (#6105)
authorfauxpark <fauxpark@gmail.com>
Tue, 16 Jul 2019 07:56:36 +0000 (17:56 +1000)
committerskullydazed <skullydazed@users.noreply.github.com>
Tue, 16 Jul 2019 07:56:36 +0000 (00:56 -0700)
* 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

quantum/quantum.c
quantum/template/avr/config.h
quantum/template/avr/rules.mk
tmk_core/common/backlight.c
tmk_core/common/backlight.h

index 31dfa60cd61603a641aa4aaa4706eaffbdf8959f..d98c601d991ab381e1375dedbe1dcad32d6a9d43 100644 (file)
@@ -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
 }
 
index 1e41a2d31d7b64867ccf582fe45b517351fa8aad..fc65bb5976678cbf2b874336c63490b85cc25143 100644 (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 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 */
index bc370be0397cc582556dd8f4528d4b589b33e530..133c9e363b94b577512b066969dd7464c0695c43 100644 (file)
@@ -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
index 8ddacd98b699caf1032e43d041c60ef7698a732a..c0e9fb5ee48994ad4dc3927d4fd1b4278bf02222 100644 (file)
@@ -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
index 420c9d19edd8529ce402b6de08c1dcafc464ca48..cc56fb9af060859a9d05b3bc6d5b3841b82dbd71 100644 (file)
@@ -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