]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - tmk_core/common/backlight.c
Store backlight breathing state in EEPROM (#6105)
[qmk_firmware.git] / tmk_core / common / backlight.c
index 0e0ad2d1541d8e05dc7de68f64ce1eec4ec3b2a9..c0e9fb5ee48994ad4dc3927d4fd1b4278bf02222 100644 (file)
@@ -21,6 +21,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 backlight_config_t backlight_config;
 
+/** \brief Backlight initialization
+ *
+ * FIXME: needs doc
+ */
 void backlight_init(void)
 {
     /* check signature */
@@ -28,9 +32,16 @@ void backlight_init(void)
         eeconfig_init();
     }
     backlight_config.raw = eeconfig_read_backlight();
+    if (backlight_config.level > BACKLIGHT_LEVELS) {
+       backlight_config.level = BACKLIGHT_LEVELS;
+    }
     backlight_set(backlight_config.enable ? backlight_config.level : 0);
 }
 
+/** \brief Backlight increase
+ *
+ * FIXME: needs doc
+ */
 void backlight_increase(void)
 {
     if(backlight_config.level < BACKLIGHT_LEVELS)
@@ -43,6 +54,10 @@ void backlight_increase(void)
     backlight_set(backlight_config.level);
 }
 
+/** \brief Backlight decrease
+ *
+ * FIXME: needs doc
+ */
 void backlight_decrease(void)
 {
     if(backlight_config.level > 0)
@@ -55,14 +70,63 @@ void backlight_decrease(void)
     backlight_set(backlight_config.level);
 }
 
+/** \brief Backlight toggle
+ *
+ * FIXME: needs doc
+ */
 void backlight_toggle(void)
 {
-    backlight_config.enable ^= 1;
-    eeconfig_update_backlight(backlight_config.raw);
-    dprintf("backlight toggle: %u\n", backlight_config.enable);
-    backlight_set(backlight_config.enable ? backlight_config.level : 0);
+       bool enabled = backlight_config.enable;
+       dprintf("backlight toggle: %u\n", enabled);
+       if (enabled) 
+               backlight_disable();
+       else
+               backlight_enable();
+}
+
+/** \brief Enable backlight
+ *
+ * FIXME: needs doc
+ */
+void backlight_enable(void)
+{
+       if (backlight_config.enable) return; // do nothing if backlight is already on
+
+       backlight_config.enable = true;
+       if (backlight_config.raw == 1) // enabled but level == 0
+               backlight_config.level = 1;
+       eeconfig_update_backlight(backlight_config.raw);
+       dprintf("backlight enable\n");
+       backlight_set(backlight_config.level);
+}
+
+/** \brief Disable backlight
+ *
+ * FIXME: needs doc
+ */
+void backlight_disable(void)
+{
+       if (!backlight_config.enable) return; // do nothing if backlight is already off
+
+       backlight_config.enable = false;
+       eeconfig_update_backlight(backlight_config.raw);
+       dprintf("backlight disable\n");
+       backlight_set(0);
+}
+
+/** /brief Get the backlight status
+ *
+ * FIXME: needs doc
+ */
+bool is_backlight_enabled(void)
+{
+       return backlight_config.enable;
 }
 
+/** \brief Backlight step through levels
+ *
+ * FIXME: needs doc
+ */
 void backlight_step(void)
 {
     backlight_config.level++;
@@ -76,15 +140,78 @@ void backlight_step(void)
     backlight_set(backlight_config.level);
 }
 
+/** \brief Backlight set level
+ *
+ * FIXME: needs doc
+ */
 void backlight_level(uint8_t level)
 {
-    backlight_config.level ^= level;
+    if (level > BACKLIGHT_LEVELS)
+        level = BACKLIGHT_LEVELS;
+    backlight_config.level = level;
     backlight_config.enable = !!backlight_config.level;
     eeconfig_update_backlight(backlight_config.raw);
     backlight_set(backlight_config.level);
 }
 
+/** \brief Get backlight level
+ *
+ * FIXME: needs doc
+ */
 uint8_t get_backlight_level(void)
 {
     return backlight_config.level;
-}
\ No newline at end of file
+}
+
+#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