Initial migration of software PWM backlight (#6709)
* Initial migration of software PWM backlight * First pass at backlight driver docs * Correct driver name in docs * Run backlight_task when using BACKLIGHT_PINS * Resolve backlight docs TODOs
This commit is contained in:
parent
ff8d436946
commit
4531cc874e
6 changed files with 173 additions and 61 deletions
66
quantum/backlight/backlight_soft.c
Normal file
66
quantum/backlight/backlight_soft.c
Normal file
|
@ -0,0 +1,66 @@
|
|||
#include "quantum.h"
|
||||
#include "backlight.h"
|
||||
|
||||
#if !defined(BACKLIGHT_PIN) && !defined(BACKLIGHT_PINS)
|
||||
# error "Backlight pin/pins not defined. Please configure."
|
||||
#endif
|
||||
|
||||
#ifdef BACKLIGHT_BREATHING
|
||||
# error "Backlight breathing is not available for software PWM. Please disable."
|
||||
#endif
|
||||
|
||||
#ifndef BACKLIGHT_ON_STATE
|
||||
# define BACKLIGHT_ON_STATE 0
|
||||
#endif
|
||||
|
||||
#ifdef BACKLIGHT_PINS
|
||||
# define BACKLIGHT_PIN_INIT BACKLIGHT_PINS
|
||||
#else
|
||||
# define BACKLIGHT_PIN_INIT \
|
||||
{ BACKLIGHT_PIN }
|
||||
#endif
|
||||
|
||||
static const pin_t backlight_pins[] = BACKLIGHT_PIN_INIT;
|
||||
#define BACKLIGHT_LED_COUNT (sizeof(backlight_pins) / sizeof(pin_t))
|
||||
|
||||
#define FOR_EACH_LED(x) \
|
||||
for (uint8_t i = 0; i < BACKLIGHT_LED_COUNT; i++) { \
|
||||
pin_t backlight_pin = backlight_pins[i]; \
|
||||
{ x } \
|
||||
}
|
||||
|
||||
void backlight_on(pin_t backlight_pin) {
|
||||
#if BACKLIGHT_ON_STATE == 0
|
||||
writePinLow(backlight_pin);
|
||||
#else
|
||||
writePinHigh(backlight_pin);
|
||||
#endif
|
||||
}
|
||||
|
||||
void backlight_off(pin_t backlight_pin) {
|
||||
#if BACKLIGHT_ON_STATE == 0
|
||||
writePinHigh(backlight_pin);
|
||||
#else
|
||||
writePinLow(backlight_pin);
|
||||
#endif
|
||||
}
|
||||
|
||||
void backlight_init_ports(void) {
|
||||
// Setup backlight pin as output and output to on state.
|
||||
FOR_EACH_LED(setPinOutput(backlight_pin); backlight_on(backlight_pin);)
|
||||
}
|
||||
|
||||
void backlight_task(void) {
|
||||
static uint8_t backlight_tick = 0;
|
||||
|
||||
if ((0xFFFF >> (get_backlight_level() * ((BACKLIGHT_LEVELS + 1) / 2))) & (1 << backlight_tick)) {
|
||||
FOR_EACH_LED(backlight_on(backlight_pin);)
|
||||
} else {
|
||||
FOR_EACH_LED(backlight_off(backlight_pin);)
|
||||
}
|
||||
backlight_tick = (backlight_tick + 1) % 16;
|
||||
}
|
||||
|
||||
void backlight_set(uint8_t level) {
|
||||
// noop as backlight_task uses get_backlight_level()
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue