]> git.donarmstrong.com Git - qmk_firmware.git/blob - tmk_core/common/backlight.c
8ddacd98b699caf1032e43d041c60ef7698a732a
[qmk_firmware.git] / tmk_core / common / backlight.c
1 /*
2 Copyright 2013 Mathias Andersson <wraul@dbox.se>
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 #include "backlight.h"
19 #include "eeconfig.h"
20 #include "debug.h"
21
22 backlight_config_t backlight_config;
23
24 /** \brief Backlight initialization
25  *
26  * FIXME: needs doc
27  */
28 void backlight_init(void)
29 {
30     /* check signature */
31     if (!eeconfig_is_enabled()) {
32         eeconfig_init();
33     }
34     backlight_config.raw = eeconfig_read_backlight();
35     if (backlight_config.level > BACKLIGHT_LEVELS) {
36        backlight_config.level = BACKLIGHT_LEVELS;
37     }
38     backlight_set(backlight_config.enable ? backlight_config.level : 0);
39 }
40
41 /** \brief Backlight increase
42  *
43  * FIXME: needs doc
44  */
45 void backlight_increase(void)
46 {
47     if(backlight_config.level < BACKLIGHT_LEVELS)
48     {
49         backlight_config.level++;
50     }
51     backlight_config.enable = 1;
52     eeconfig_update_backlight(backlight_config.raw);
53     dprintf("backlight increase: %u\n", backlight_config.level);
54     backlight_set(backlight_config.level);
55 }
56
57 /** \brief Backlight decrease
58  *
59  * FIXME: needs doc
60  */
61 void backlight_decrease(void)
62 {
63     if(backlight_config.level > 0)
64     {
65         backlight_config.level--;
66         backlight_config.enable = !!backlight_config.level;
67         eeconfig_update_backlight(backlight_config.raw);
68     }
69     dprintf("backlight decrease: %u\n", backlight_config.level);
70     backlight_set(backlight_config.level);
71 }
72
73 /** \brief Backlight toggle
74  *
75  * FIXME: needs doc
76  */
77 void backlight_toggle(void)
78 {
79         bool enabled = backlight_config.enable;
80         dprintf("backlight toggle: %u\n", enabled);
81         if (enabled) 
82                 backlight_disable();
83         else
84                 backlight_enable();
85 }
86
87 /** \brief Enable backlight
88  *
89  * FIXME: needs doc
90  */
91 void backlight_enable(void)
92 {
93         if (backlight_config.enable) return; // do nothing if backlight is already on
94
95         backlight_config.enable = true;
96         if (backlight_config.raw == 1) // enabled but level == 0
97                 backlight_config.level = 1;
98         eeconfig_update_backlight(backlight_config.raw);
99         dprintf("backlight enable\n");
100         backlight_set(backlight_config.level);
101 }
102
103 /** /brief Disable backlight
104  *
105  * FIXME: needs doc
106  */
107 void backlight_disable(void)
108 {
109         if (!backlight_config.enable) return; // do nothing if backlight is already off
110
111         backlight_config.enable = false;
112         eeconfig_update_backlight(backlight_config.raw);
113         dprintf("backlight disable\n");
114         backlight_set(0);
115 }
116
117 /** /brief Get the backlight status
118  *
119  * FIXME: needs doc
120  */
121 bool is_backlight_enabled(void)
122 {
123         return backlight_config.enable;
124 }
125
126 /** \brief Backlight step through levels
127  *
128  * FIXME: needs doc
129  */
130 void backlight_step(void)
131 {
132     backlight_config.level++;
133     if(backlight_config.level > BACKLIGHT_LEVELS)
134     {
135         backlight_config.level = 0;
136     }
137     backlight_config.enable = !!backlight_config.level;
138     eeconfig_update_backlight(backlight_config.raw);
139     dprintf("backlight step: %u\n", backlight_config.level);
140     backlight_set(backlight_config.level);
141 }
142
143 /** \brief Backlight set level
144  *
145  * FIXME: needs doc
146  */
147 void backlight_level(uint8_t level)
148 {
149     if (level > BACKLIGHT_LEVELS)
150         level = BACKLIGHT_LEVELS;
151     backlight_config.level = level;
152     backlight_config.enable = !!backlight_config.level;
153     eeconfig_update_backlight(backlight_config.raw);
154     backlight_set(backlight_config.level);
155 }
156
157 /** \brief Get backlight level
158  *
159  * FIXME: needs doc
160  */
161 uint8_t get_backlight_level(void)
162 {
163     return backlight_config.level;
164 }