aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2020-01-13 01:30:56 +0000
committerGitHub <noreply@github.com>2020-01-13 01:30:56 +0000
commitb89e35bdd33b3953711de8b0be64c76b64e9701b (patch)
treea597dafbaf6dfe50f94a70eade9954d78b84acd6
parent2ce3025be2fd28c7ea3f2fd33c7aba7277ff668b (diff)
downloadqmk_firmware-b89e35bdd33b3953711de8b0be64c76b64e9701b.tar.gz
qmk_firmware-b89e35bdd33b3953711de8b0be64c76b64e9701b.zip
Relocate common backlight functionally (#7273)
-rw-r--r--common_features.mk8
-rw-r--r--quantum/backlight/backlight.c21
-rw-r--r--quantum/backlight/backlight.h23
-rw-r--r--quantum/backlight/backlight_arm.c25
-rw-r--r--quantum/backlight/backlight_avr.c35
-rw-r--r--quantum/quantum.h24
6 files changed, 55 insertions, 81 deletions
diff --git a/common_features.mk b/common_features.mk
index 67c64b425..01ceb8278 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -257,13 +257,11 @@ ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
257 SRC += $(QUANTUM_DIR)/backlight/backlight.c 257 SRC += $(QUANTUM_DIR)/backlight/backlight.c
258 OPT_DEFS += -DBACKLIGHT_ENABLE 258 OPT_DEFS += -DBACKLIGHT_ENABLE
259 259
260 ifeq ($(strip $(BACKLIGHT_DRIVER)), software) 260 ifeq ($(strip $(BACKLIGHT_DRIVER)), custom)
261 OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
262 else ifeq ($(strip $(BACKLIGHT_DRIVER)), software)
261 SRC += $(QUANTUM_DIR)/backlight/backlight_soft.c 263 SRC += $(QUANTUM_DIR)/backlight/backlight_soft.c
262 else 264 else
263 ifeq ($(strip $(BACKLIGHT_DRIVER)), custom)
264 OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
265 endif
266
267 ifeq ($(PLATFORM),AVR) 265 ifeq ($(PLATFORM),AVR)
268 SRC += $(QUANTUM_DIR)/backlight/backlight_avr.c 266 SRC += $(QUANTUM_DIR)/backlight/backlight_avr.c
269 else 267 else
diff --git a/quantum/backlight/backlight.c b/quantum/backlight/backlight.c
index 708022f68..e57b31d10 100644
--- a/quantum/backlight/backlight.c
+++ b/quantum/backlight/backlight.c
@@ -21,6 +21,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
21 21
22backlight_config_t backlight_config; 22backlight_config_t backlight_config;
23 23
24// TODO: migrate to backlight_config_t
25static uint8_t breathing_period = BREATHING_PERIOD;
26
24/** \brief Backlight initialization 27/** \brief Backlight initialization
25 * 28 *
26 * FIXME: needs doc 29 * FIXME: needs doc
@@ -191,3 +194,21 @@ void backlight_disable_breathing(void) {
191 */ 194 */
192bool is_backlight_breathing(void) { return backlight_config.breathing; } 195bool is_backlight_breathing(void) { return backlight_config.breathing; }
193#endif 196#endif
197
198// following are marked as weak purely for backwards compatibility
199__attribute__((weak)) void breathing_period_set(uint8_t value) { breathing_period = value ? value : 1; }
200
201__attribute__((weak)) uint8_t get_breathing_period(void) { return breathing_period; }
202
203__attribute__((weak)) void breathing_period_default(void) { breathing_period_set(BREATHING_PERIOD); }
204
205__attribute__((weak)) void breathing_period_inc(void) { breathing_period_set(breathing_period + 1); }
206
207__attribute__((weak)) void breathing_period_dec(void) { breathing_period_set(breathing_period - 1); }
208
209// defaults for backlight api
210__attribute__((weak)) void backlight_init_ports(void) {}
211
212__attribute__((weak)) void backlight_set(uint8_t level) {}
213
214__attribute__((weak)) void backlight_task(void) {}
diff --git a/quantum/backlight/backlight.h b/quantum/backlight/backlight.h
index 1e581055d..9f0a5e81d 100644
--- a/quantum/backlight/backlight.h
+++ b/quantum/backlight/backlight.h
@@ -41,22 +41,39 @@ typedef union {
41} backlight_config_t; 41} backlight_config_t;
42 42
43void backlight_init(void); 43void backlight_init(void);
44void backlight_increase(void);
45void backlight_decrease(void);
46void backlight_toggle(void); 44void backlight_toggle(void);
47void backlight_enable(void); 45void backlight_enable(void);
48void backlight_disable(void); 46void backlight_disable(void);
49bool is_backlight_enabled(void); 47bool is_backlight_enabled(void);
50void backlight_step(void); 48void backlight_step(void);
51void backlight_set(uint8_t level); 49void backlight_increase(void);
50void backlight_decrease(void);
52void backlight_level(uint8_t level); 51void backlight_level(uint8_t level);
53uint8_t get_backlight_level(void); 52uint8_t get_backlight_level(void);
54 53
54// implementation specific
55void backlight_init_ports(void);
56void backlight_set(uint8_t level);
57void backlight_task(void);
58
55#ifdef BACKLIGHT_BREATHING 59#ifdef BACKLIGHT_BREATHING
60
56void backlight_toggle_breathing(void); 61void backlight_toggle_breathing(void);
57void backlight_enable_breathing(void); 62void backlight_enable_breathing(void);
58void backlight_disable_breathing(void); 63void backlight_disable_breathing(void);
59bool is_backlight_breathing(void); 64bool is_backlight_breathing(void);
65
66void breathing_period_set(uint8_t value);
67uint8_t get_breathing_period(void);
68void breathing_period_default(void);
69void breathing_period_inc(void);
70void breathing_period_dec(void);
71
72// implementation specific
60void breathing_enable(void); 73void breathing_enable(void);
61void breathing_disable(void); 74void breathing_disable(void);
75void breathing_toggle(void);
76bool is_breathing(void);
77void breathing_pulse(void);
78void breathing_task(void);
62#endif 79#endif
diff --git a/quantum/backlight/backlight_arm.c b/quantum/backlight/backlight_arm.c
index 8c6909a4a..f7065906f 100644
--- a/quantum/backlight/backlight_arm.c
+++ b/quantum/backlight/backlight_arm.c
@@ -106,7 +106,6 @@ void backlight_task(void) {}
106# define BREATHING_HALT_ON 2 106# define BREATHING_HALT_ON 2
107# define BREATHING_STEPS 128 107# define BREATHING_STEPS 128
108 108
109static uint8_t breathing_period = BREATHING_PERIOD;
110static uint8_t breathing_halt = BREATHING_NO_HALT; 109static uint8_t breathing_halt = BREATHING_NO_HALT;
111static uint16_t breathing_counter = 0; 110static uint16_t breathing_counter = 0;
112 111
@@ -114,7 +113,7 @@ bool is_breathing(void) { return BACKLIGHT_PWM_DRIVER.config == &pwmCFG_breathin
114 113
115static inline void breathing_min(void) { breathing_counter = 0; } 114static inline void breathing_min(void) { breathing_counter = 0; }
116 115
117static inline void breathing_max(void) { breathing_counter = breathing_period * 256 / 2; } 116static inline void breathing_max(void) { breathing_counter = get_breathing_period() * 256 / 2; }
118 117
119void breathing_interrupt_enable(void) { 118void breathing_interrupt_enable(void) {
120 pwmStop(&BACKLIGHT_PWM_DRIVER); 119 pwmStop(&BACKLIGHT_PWM_DRIVER);
@@ -166,17 +165,6 @@ void breathing_toggle(void) {
166 breathing_enable(); 165 breathing_enable();
167} 166}
168 167
169void breathing_period_set(uint8_t value) {
170 if (!value) value = 1;
171 breathing_period = value;
172}
173
174void breathing_period_default(void) { breathing_period_set(BREATHING_PERIOD); }
175
176void breathing_period_inc(void) { breathing_period_set(breathing_period + 1); }
177
178void breathing_period_dec(void) { breathing_period_set(breathing_period - 1); }
179
180/* To generate breathing curve in python: 168/* To generate breathing curve in python:
181 * from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)] 169 * from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
182 */ 170 */
@@ -187,7 +175,8 @@ static inline uint16_t scale_backlight(uint16_t v) { return v / BACKLIGHT_LEVELS
187 175
188static void breathing_callback(PWMDriver *pwmp) { 176static void breathing_callback(PWMDriver *pwmp) {
189 (void)pwmp; 177 (void)pwmp;
190 uint16_t interval = (uint16_t)breathing_period * 256 / BREATHING_STEPS; 178 uint8_t breathing_period = get_breathing_period();
179 uint16_t interval = (uint16_t)breathing_period * 256 / BREATHING_STEPS;
191 // resetting after one period to prevent ugly reset at overflow. 180 // resetting after one period to prevent ugly reset at overflow.
192 breathing_counter = (breathing_counter + 1) % (breathing_period * 256); 181 breathing_counter = (breathing_counter + 1) % (breathing_period * 256);
193 uint8_t index = breathing_counter / interval % BREATHING_STEPS; 182 uint8_t index = breathing_counter / interval % BREATHING_STEPS;
@@ -203,12 +192,4 @@ static void breathing_callback(PWMDriver *pwmp) {
203 chSysUnlockFromISR(); 192 chSysUnlockFromISR();
204} 193}
205 194
206#else
207
208__attribute__((weak)) void backlight_init_ports(void) {}
209
210__attribute__((weak)) void backlight_set(uint8_t level) {}
211
212__attribute__((weak)) void backlight_task(void) {}
213
214#endif 195#endif
diff --git a/quantum/backlight/backlight_avr.c b/quantum/backlight/backlight_avr.c
index edda6ea0b..7cf1e0fb3 100644
--- a/quantum/backlight/backlight_avr.c
+++ b/quantum/backlight/backlight_avr.c
@@ -206,7 +206,7 @@ static const pin_t backlight_pin = BACKLIGHT_PIN;
206# endif 206# endif
207 207
208# ifdef NO_HARDWARE_PWM 208# ifdef NO_HARDWARE_PWM
209__attribute__((weak)) void backlight_init_ports(void) { 209void backlight_init_ports(void) {
210 // Setup backlight pin as output and output to on state. 210 // Setup backlight pin as output and output to on state.
211 FOR_EACH_LED(setPinOutput(backlight_pin); backlight_on(backlight_pin);) 211 FOR_EACH_LED(setPinOutput(backlight_pin); backlight_on(backlight_pin);)
212 212
@@ -217,8 +217,6 @@ __attribute__((weak)) void backlight_init_ports(void) {
217# endif 217# endif
218} 218}
219 219
220__attribute__((weak)) void backlight_set(uint8_t level) {}
221
222uint8_t backlight_tick = 0; 220uint8_t backlight_tick = 0;
223 221
224# ifndef BACKLIGHT_CUSTOM_DRIVER 222# ifndef BACKLIGHT_CUSTOM_DRIVER
@@ -303,7 +301,7 @@ static uint16_t cie_lightness(uint16_t v) {
303static inline void set_pwm(uint16_t val) { OCRxx = val; } 301static inline void set_pwm(uint16_t val) { OCRxx = val; }
304 302
305# ifndef BACKLIGHT_CUSTOM_DRIVER 303# ifndef BACKLIGHT_CUSTOM_DRIVER
306__attribute__((weak)) void backlight_set(uint8_t level) { 304void backlight_set(uint8_t level) {
307 if (level > BACKLIGHT_LEVELS) level = BACKLIGHT_LEVELS; 305 if (level > BACKLIGHT_LEVELS) level = BACKLIGHT_LEVELS;
308 306
309 if (level == 0) { 307 if (level == 0) {
@@ -342,7 +340,6 @@ void backlight_task(void) {}
342# define BREATHING_HALT_ON 2 340# define BREATHING_HALT_ON 2
343# define BREATHING_STEPS 128 341# define BREATHING_STEPS 128
344 342
345static uint8_t breathing_period = BREATHING_PERIOD;
346static uint8_t breathing_halt = BREATHING_NO_HALT; 343static uint8_t breathing_halt = BREATHING_NO_HALT;
347static uint16_t breathing_counter = 0; 344static uint16_t breathing_counter = 0;
348 345
@@ -377,9 +374,9 @@ bool is_breathing(void) { return !!(TIMSKx & _BV(TOIEx)); }
377 do { \ 374 do { \
378 breathing_counter = 0; \ 375 breathing_counter = 0; \
379 } while (0) 376 } while (0)
380# define breathing_max() \ 377# define breathing_max() \
381 do { \ 378 do { \
382 breathing_counter = breathing_period * 244 / 2; \ 379 breathing_counter = get_breathing_period() * 244 / 2; \
383 } while (0) 380 } while (0)
384 381
385void breathing_enable(void) { 382void breathing_enable(void) {
@@ -417,17 +414,6 @@ void breathing_toggle(void) {
417 breathing_enable(); 414 breathing_enable();
418} 415}
419 416
420void breathing_period_set(uint8_t value) {
421 if (!value) value = 1;
422 breathing_period = value;
423}
424
425void breathing_period_default(void) { breathing_period_set(BREATHING_PERIOD); }
426
427void breathing_period_inc(void) { breathing_period_set(breathing_period + 1); }
428
429void breathing_period_dec(void) { breathing_period_set(breathing_period - 1); }
430
431/* To generate breathing curve in python: 417/* To generate breathing curve in python:
432 * from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)] 418 * from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
433 */ 419 */
@@ -445,6 +431,7 @@ void breathing_task(void)
445ISR(TIMERx_OVF_vect) 431ISR(TIMERx_OVF_vect)
446# endif 432# endif
447{ 433{
434 uint8_t breathing_period = get_breathing_period();
448 uint16_t interval = (uint16_t)breathing_period * 244 / BREATHING_STEPS; 435 uint16_t interval = (uint16_t)breathing_period * 244 / BREATHING_STEPS;
449 // resetting after one period to prevent ugly reset at overflow. 436 // resetting after one period to prevent ugly reset at overflow.
450 breathing_counter = (breathing_counter + 1) % (breathing_period * 244); 437 breathing_counter = (breathing_counter + 1) % (breathing_period * 244);
@@ -459,7 +446,7 @@ ISR(TIMERx_OVF_vect)
459 446
460# endif // BACKLIGHT_BREATHING 447# endif // BACKLIGHT_BREATHING
461 448
462__attribute__((weak)) void backlight_init_ports(void) { 449void backlight_init_ports(void) {
463 // Setup backlight pin as output and output to on state. 450 // Setup backlight pin as output and output to on state.
464 FOR_EACH_LED(setPinOutput(backlight_pin); backlight_on(backlight_pin);) 451 FOR_EACH_LED(setPinOutput(backlight_pin); backlight_on(backlight_pin);)
465 452
@@ -500,10 +487,4 @@ __attribute__((weak)) void backlight_init_ports(void) {
500 487
501# endif // hardware backlight 488# endif // hardware backlight
502 489
503#else // no backlight 490#endif // backlight
504
505__attribute__((weak)) void backlight_init_ports(void) {}
506
507__attribute__((weak)) void backlight_set(uint8_t level) {}
508
509#endif // backlight \ No newline at end of file
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 9758374f6..09550fec3 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -251,30 +251,6 @@ void register_code16(uint16_t code);
251void unregister_code16(uint16_t code); 251void unregister_code16(uint16_t code);
252void tap_code16(uint16_t code); 252void tap_code16(uint16_t code);
253 253
254#ifdef BACKLIGHT_ENABLE
255void backlight_init_ports(void);
256void backlight_task(void);
257void backlight_task_internal(void);
258void backlight_on(pin_t backlight_pin);
259void backlight_off(pin_t backlight_pin);
260
261# ifdef BACKLIGHT_BREATHING
262void breathing_task(void);
263void breathing_enable(void);
264void breathing_pulse(void);
265void breathing_disable(void);
266void breathing_self_disable(void);
267void breathing_toggle(void);
268bool is_breathing(void);
269
270void breathing_intensity_default(void);
271void breathing_period_default(void);
272void breathing_period_set(uint8_t value);
273void breathing_period_inc(void);
274void breathing_period_dec(void);
275# endif
276#endif
277
278void send_dword(uint32_t number); 254void send_dword(uint32_t number);
279void send_word(uint16_t number); 255void send_word(uint16_t number);
280void send_byte(uint8_t number); 256void send_byte(uint8_t number);