Backlight level handling for the visualizer

example_keyboards
Fred Sundvik 8 years ago
parent 0f9bfafb9e
commit effffa33a5

@ -58,8 +58,11 @@ SOFTWARE.
static visualizer_keyboard_status_t current_status = { static visualizer_keyboard_status_t current_status = {
.layer = 0xFFFFFFFF, .layer = 0xFFFFFFFF,
.default_layer = 0xFFFFFFFF, .default_layer = 0xFFFFFFFF,
.mods = 0xFF,
.leds = 0xFFFFFFFF, .leds = 0xFFFFFFFF,
#ifdef BACKLIGHT_ENABLE
.backlight_level = 0,
#endif
.mods = 0xFF,
.suspended = false, .suspended = false,
#ifdef VISUALIZER_USER_DATA_SIZE #ifdef VISUALIZER_USER_DATA_SIZE
.user_data = {0} .user_data = {0}
@ -72,6 +75,9 @@ static bool same_status(visualizer_keyboard_status_t* status1, visualizer_keyboa
status1->mods == status2->mods && status1->mods == status2->mods &&
status1->leds == status2->leds && status1->leds == status2->leds &&
status1->suspended == status2->suspended status1->suspended == status2->suspended
#ifdef BACKLIGHT_ENABLE
&& status1->backlight_level == status2->backlight_level
#endif
#ifdef VISUALIZER_USER_DATA_SIZE #ifdef VISUALIZER_USER_DATA_SIZE
&& memcmp(status1->user_data, status2->user_data, VISUALIZER_USER_DATA_SIZE) == 0 && memcmp(status1->user_data, status2->user_data, VISUALIZER_USER_DATA_SIZE) == 0
#endif #endif
@ -279,6 +285,18 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) {
bool enabled = visualizer_enabled; bool enabled = visualizer_enabled;
if (force_update || !same_status(&state.status, &current_status)) { if (force_update || !same_status(&state.status, &current_status)) {
force_update = false; force_update = false;
#if BACKLIGHT_ENABLE
if(current_status.backlight_level != state.status.backlight_level) {
if (current_status.backlight_level != 0) {
gdispGSetPowerMode(LED_DISPLAY, powerOn);
uint16_t percent = (uint16_t)current_status.backlight_level * 100 / 255;
gdispGSetBacklight(LED_DISPLAY, percent);
}
else {
gdispGSetPowerMode(LED_DISPLAY, powerOff);
}
}
#endif
if (visualizer_enabled) { if (visualizer_enabled) {
if (current_status.suspended) { if (current_status.suspended) {
stop_all_keyframe_animations(); stop_all_keyframe_animations();
@ -445,6 +463,9 @@ void visualizer_update(uint32_t default_state, uint32_t state, uint8_t mods, uin
.default_layer = default_state, .default_layer = default_state,
.mods = mods, .mods = mods,
.leds = leds, .leds = leds,
#ifdef BACKLIGHT_ENABLE
.backlight_level = current_status.backlight_level,
#endif
.suspended = current_status.suspended, .suspended = current_status.suspended,
}; };
#ifdef VISUALIZER_USER_DATA_SIZE #ifdef VISUALIZER_USER_DATA_SIZE
@ -467,3 +488,10 @@ void visualizer_resume(void) {
current_status.suspended = false; current_status.suspended = false;
update_status(true); update_status(true);
} }
#ifdef BACKLIGHT_ENABLE
void backlight_set(uint8_t level) {
current_status.backlight_level = level;
update_status(true);
}
#endif

@ -34,6 +34,10 @@ SOFTWARE.
#include "lcd_backlight.h" #include "lcd_backlight.h"
#endif #endif
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
// use this function to merge both real_mods and oneshot_mods in a uint16_t // use this function to merge both real_mods and oneshot_mods in a uint16_t
uint8_t visualizer_get_mods(void); uint8_t visualizer_get_mods(void);
@ -65,9 +69,12 @@ struct keyframe_animation_t;
typedef struct { typedef struct {
uint32_t layer; uint32_t layer;
uint32_t default_layer; uint32_t default_layer;
uint8_t mods;
uint32_t leds; // See led.h for available statuses uint32_t leds; // See led.h for available statuses
uint8_t mods;
bool suspended; bool suspended;
#ifdef BACKLIGHT_ENABLE
uint8_t backlight_level;
#endif
#ifdef VISUALIZER_USER_DATA_SIZE #ifdef VISUALIZER_USER_DATA_SIZE
uint8_t user_data[VISUALIZER_USER_DATA_SIZE]; uint8_t user_data[VISUALIZER_USER_DATA_SIZE];
#endif #endif

Loading…
Cancel
Save