summary refs log tree commit diff
path: root/quantum
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2019-10-17 17:48:58 +0100
committerGitHub <noreply@github.com>2019-10-17 17:48:58 +0100
commitabfd6ed9613013d3c9f15da8b575a902d9bcf274 (patch)
tree8f2a4601586a7bc67f5f684e0d07b41e9608f3b3 /quantum
parente3a21348c3879c11072c7c42d3b4d04b022f4fe2 (diff)
Move tmk_core/common/backlight to quantum/backlight (#6710)
* Move tmk_core/common/backlight to quantum/backlight

* Add guards to backlight inclusion

* Add guards to backlight inclusion

* Update backlight guards on clueboard/60

* Use full paths to avoid vpath issues
Diffstat (limited to 'quantum')
-rw-r--r--quantum/backlight/backlight.c194
-rw-r--r--quantum/backlight/backlight.h62
-rw-r--r--quantum/keymap_common.c5
-rw-r--r--quantum/quantum.c6
4 files changed, 263 insertions, 4 deletions
diff --git a/quantum/backlight/backlight.c b/quantum/backlight/backlight.c
index e26de86bf9..708022f68f 100644
--- a/quantum/backlight/backlight.c
+++ b/quantum/backlight/backlight.c
@@ -1 +1,193 @@
-// TODO: Add common code here, for example cie_lightness implementation
+/*
+Copyright 2013 Mathias Andersson <wraul@dbox.se>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "backlight.h"
+#include "eeconfig.h"
+#include "debug.h"
+
+backlight_config_t backlight_config;
+
+/** \brief Backlight initialization
+ *
+ * FIXME: needs doc
+ */
+void backlight_init(void) {
+    /* check signature */
+    if (!eeconfig_is_enabled()) {
+        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) {
+        backlight_config.level++;
+    }
+    backlight_config.enable = 1;
+    eeconfig_update_backlight(backlight_config.raw);
+    dprintf("backlight increase: %u\n", backlight_config.level);
+    backlight_set(backlight_config.level);
+}
+
+/** \brief Backlight decrease
+ *
+ * FIXME: needs doc
+ */
+void backlight_decrease(void) {
+    if (backlight_config.level > 0) {
+        backlight_config.level--;
+        backlight_config.enable = !!backlight_config.level;
+        eeconfig_update_backlight(backlight_config.raw);
+    }
+    dprintf("backlight decrease: %u\n", backlight_config.level);
+    backlight_set(backlight_config.level);
+}
+
+/** \brief Backlight toggle
+ *
+ * FIXME: needs doc
+ */
+void backlight_toggle(void) {
+    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++;
+    if (backlight_config.level > BACKLIGHT_LEVELS) {
+        backlight_config.level = 0;
+    }
+    backlight_config.enable = !!backlight_config.level;
+    eeconfig_update_backlight(backlight_config.raw);
+    dprintf("backlight step: %u\n", backlight_config.level);
+    backlight_set(backlight_config.level);
+}
+
+/** \brief Backlight set level
+ *
+ * FIXME: needs doc
+ */
+void backlight_level(uint8_t 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; }
+
+#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
diff --git a/quantum/backlight/backlight.h b/quantum/backlight/backlight.h
new file mode 100644
index 0000000000..1e581055db
--- /dev/null
+++ b/quantum/backlight/backlight.h
@@ -0,0 +1,62 @@
+/*
+Copyright 2013 Mathias Andersson <wraul@dbox.se>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#ifndef BACKLIGHT_LEVELS
+#    define BACKLIGHT_LEVELS 3
+#elif BACKLIGHT_LEVELS > 31
+#    error "Maximum value of BACKLIGHT_LEVELS is 31"
+#endif
+
+#ifndef BREATHING_PERIOD
+#    define BREATHING_PERIOD 6
+#endif
+
+typedef union {
+    uint8_t raw;
+    struct {
+        bool    enable : 1;
+        bool    breathing : 1;
+        uint8_t reserved : 1;  // Reserved for possible future backlight modes
+        uint8_t level : 5;
+    };
+} backlight_config_t;
+
+void    backlight_init(void);
+void    backlight_increase(void);
+void    backlight_decrease(void);
+void    backlight_toggle(void);
+void    backlight_enable(void);
+void    backlight_disable(void);
+bool    is_backlight_enabled(void);
+void    backlight_step(void);
+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
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c
index 9af9510081..4fa45ac37b 100644
--- a/quantum/keymap_common.c
+++ b/quantum/keymap_common.c
@@ -26,9 +26,12 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "action.h"
 #include "action_macro.h"
 #include "debug.h"
-#include "backlight.h"
 #include "quantum.h"
 
+#ifdef BACKLIGHT_ENABLE
+#    include "backlight.h"
+#endif
+
 #ifdef MIDI_ENABLE
 #    include "process_midi.h"
 #endif
diff --git a/quantum/quantum.c b/quantum/quantum.c
index e615cfc0fe..2020770ea5 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -24,8 +24,10 @@
 #    include "outputselect.h"
 #endif
 
-#include "backlight.h"
-extern backlight_config_t backlight_config;
+#ifdef BACKLIGHT_ENABLE
+#    include "backlight.h"
+    extern backlight_config_t backlight_config;
+#endif
 
 #ifdef FAUXCLICKY_ENABLE
 #    include "fauxclicky.h"