Refactor inactivity dimming to seperate file
This commit is contained in:
parent
ddb43d8c86
commit
1d4846c8bb
145
layout/my-layout/inactivity-dimming.c
Normal file
145
layout/my-layout/inactivity-dimming.c
Normal file
@ -0,0 +1,145 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
// Declarations for inactivity tracking
|
||||
#define INACTIVITY_STEPS {0, 100, 60000, 20, 300000, 0}
|
||||
#define TIME_TO_CHANGE_BETWEEN_STEPS 10000
|
||||
uint32_t activity_timer;
|
||||
|
||||
bool is_led_dimmed = 0;
|
||||
|
||||
float led_edge_brightness_pre_dim;
|
||||
float led_gcr_desired_pre_dim;
|
||||
|
||||
void handle_activity(void);
|
||||
void handle_inactivity(void);
|
||||
|
||||
void reset_after_inactivity(void);
|
||||
void update_during_inactivity(void);
|
||||
|
||||
float get_desired_percentage(void);
|
||||
float get_desired_gcr_desired(void);
|
||||
float get_desired_led_edge_brightness(void);
|
||||
|
||||
void update_activity_timer(void);
|
||||
uint32_t get_inactive_time(void);
|
||||
|
||||
void led_increase_key_brightness(void);
|
||||
void led_increase_edge_brightness(void);
|
||||
void led_decrease_key_brightness(void);
|
||||
void led_decrease_edge_brightness(void);
|
||||
|
||||
// Inactivity tracking
|
||||
void handle_activity(void) {
|
||||
update_activity_timer();
|
||||
|
||||
if (is_led_dimmed) {
|
||||
reset_after_inactivity();
|
||||
}
|
||||
}
|
||||
|
||||
void handle_inactivity(void) {
|
||||
if (!is_led_dimmed) {
|
||||
led_edge_brightness_pre_dim = led_edge_brightness;
|
||||
led_gcr_desired_pre_dim = gcr_desired;
|
||||
}
|
||||
|
||||
update_during_inactivity();
|
||||
}
|
||||
|
||||
void reset_after_inactivity(void) {
|
||||
gcr_desired = led_gcr_desired_pre_dim;
|
||||
led_edge_brightness = led_edge_brightness_pre_dim;
|
||||
|
||||
is_led_dimmed = 0;
|
||||
}
|
||||
|
||||
void update_during_inactivity(void) {
|
||||
float desired_gcr_desired = get_desired_gcr_desired();
|
||||
float desired_led_edge_brightness = get_desired_led_edge_brightness();
|
||||
|
||||
if (!is_led_dimmed && (desired_gcr_desired < led_gcr_desired_pre_dim || desired_led_edge_brightness < led_edge_brightness_pre_dim)) {
|
||||
is_led_dimmed = 1;
|
||||
}
|
||||
|
||||
if (desired_led_edge_brightness < led_edge_brightness) {
|
||||
led_decrease_edge_brightness();
|
||||
}
|
||||
|
||||
if (desired_gcr_desired < gcr_desired) {
|
||||
led_decrease_key_brightness();
|
||||
}
|
||||
}
|
||||
|
||||
float get_desired_percentage(void) {
|
||||
static int steps[] = INACTIVITY_STEPS;
|
||||
static int size = sizeof steps / sizeof steps[0];
|
||||
|
||||
uint32_t inactive_time = get_inactive_time();
|
||||
|
||||
int last_target = steps[1];
|
||||
int time_offset = steps[0];
|
||||
int target = steps[1];
|
||||
|
||||
for (int i = 2; i < size; i += 2) {
|
||||
if (steps[i] > inactive_time) {
|
||||
break;
|
||||
}
|
||||
|
||||
last_target = target;
|
||||
|
||||
time_offset = steps[i];
|
||||
target = steps[i+1];
|
||||
}
|
||||
|
||||
uint32_t time_into_current_target = inactive_time - time_offset;
|
||||
|
||||
time_into_current_target = time_into_current_target > TIME_TO_CHANGE_BETWEEN_STEPS ? TIME_TO_CHANGE_BETWEEN_STEPS : time_into_current_target;
|
||||
time_into_current_target = time_into_current_target < 0 ? 0 : time_into_current_target;
|
||||
|
||||
return (float)last_target + ((float)time_into_current_target / (float)TIME_TO_CHANGE_BETWEEN_STEPS) * (float)(target - last_target);
|
||||
}
|
||||
|
||||
float get_desired_gcr_desired(void) {
|
||||
float pct = get_desired_percentage();
|
||||
|
||||
return pct * LED_GCR_MAX / 100;
|
||||
}
|
||||
|
||||
float get_desired_led_edge_brightness(void) {
|
||||
float pct = get_desired_percentage();
|
||||
|
||||
return pct / 100;
|
||||
}
|
||||
|
||||
void update_activity_timer(void) {
|
||||
activity_timer = timer_read32();
|
||||
}
|
||||
|
||||
uint32_t get_inactive_time(void) {
|
||||
return timer_read32() - activity_timer;
|
||||
}
|
||||
|
||||
// Lighting stuff for inactivity tracking
|
||||
// Increase
|
||||
void led_increase_key_brightness(void) {
|
||||
if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
|
||||
else gcr_desired += LED_GCR_STEP;
|
||||
if (led_animation_breathing) gcr_breathe = gcr_desired;
|
||||
}
|
||||
|
||||
void led_increase_edge_brightness(void) {
|
||||
led_edge_brightness += 0.1;
|
||||
if (led_edge_brightness > 1) { led_edge_brightness = 1; }
|
||||
}
|
||||
|
||||
// Decrease
|
||||
void led_decrease_key_brightness(void) {
|
||||
if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
|
||||
else gcr_desired -= LED_GCR_STEP;
|
||||
if (led_animation_breathing) gcr_breathe = gcr_desired;
|
||||
}
|
||||
|
||||
void led_decrease_edge_brightness(void) {
|
||||
led_edge_brightness -= 0.1;
|
||||
if (led_edge_brightness < 0) { led_edge_brightness = 0; }
|
||||
}
|
||||
@ -1,5 +1,7 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#include <inactivity-dimming.c>
|
||||
|
||||
enum shift_keycodes {
|
||||
L_BRI = SAFE_RANGE, //LED Brightness Increase
|
||||
L_BRD, //LED Brightness Decrease
|
||||
@ -81,150 +83,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
*/
|
||||
};
|
||||
|
||||
// Declarations for inactivity tracking
|
||||
#define INACTIVITY_STEPS {0, 100, 60000, 20, 300000, 0}
|
||||
#define TIME_TO_CHANGE_BETWEEN_STEPS 10000
|
||||
uint32_t activity_timer;
|
||||
|
||||
bool is_led_dimmed = 0;
|
||||
|
||||
float led_edge_brightness_pre_dim;
|
||||
float led_gcr_desired_pre_dim;
|
||||
|
||||
void handle_activity(void);
|
||||
void handle_inactivity(void);
|
||||
|
||||
void reset_after_inactivity(void);
|
||||
void update_during_inactivity(void);
|
||||
|
||||
float get_desired_percentage(void);
|
||||
float get_desired_gcr_desired(void);
|
||||
float get_desired_led_edge_brightness(void);
|
||||
|
||||
void update_activity_timer(void);
|
||||
uint32_t get_inactive_time(void);
|
||||
|
||||
void led_increase_key_brightness(void);
|
||||
void led_increase_edge_brightness(void);
|
||||
void led_decrease_key_brightness(void);
|
||||
void led_decrease_edge_brightness(void);
|
||||
|
||||
// Inactivity tracking
|
||||
void handle_activity(void) {
|
||||
update_activity_timer();
|
||||
|
||||
if (is_led_dimmed) {
|
||||
reset_after_inactivity();
|
||||
}
|
||||
}
|
||||
|
||||
void handle_inactivity(void) {
|
||||
if (!is_led_dimmed) {
|
||||
led_edge_brightness_pre_dim = led_edge_brightness;
|
||||
led_gcr_desired_pre_dim = gcr_desired;
|
||||
}
|
||||
|
||||
update_during_inactivity();
|
||||
}
|
||||
|
||||
void reset_after_inactivity(void) {
|
||||
gcr_desired = led_gcr_desired_pre_dim;
|
||||
led_edge_brightness = led_edge_brightness_pre_dim;
|
||||
|
||||
is_led_dimmed = 0;
|
||||
}
|
||||
|
||||
void update_during_inactivity(void) {
|
||||
float desired_gcr_desired = get_desired_gcr_desired();
|
||||
float desired_led_edge_brightness = get_desired_led_edge_brightness();
|
||||
|
||||
if (!is_led_dimmed && (desired_gcr_desired < led_gcr_desired_pre_dim || desired_led_edge_brightness < led_edge_brightness_pre_dim)) {
|
||||
is_led_dimmed = 1;
|
||||
}
|
||||
|
||||
if (desired_led_edge_brightness < led_edge_brightness) {
|
||||
led_decrease_edge_brightness();
|
||||
}
|
||||
|
||||
if (desired_gcr_desired < gcr_desired) {
|
||||
led_decrease_key_brightness();
|
||||
}
|
||||
}
|
||||
|
||||
float get_desired_percentage(void) {
|
||||
static int steps[] = INACTIVITY_STEPS;
|
||||
static int size = sizeof steps / sizeof steps[0];
|
||||
|
||||
uint32_t inactive_time = get_inactive_time();
|
||||
|
||||
int last_target = steps[1];
|
||||
int time_offset = steps[0];
|
||||
int target = steps[1];
|
||||
|
||||
for (int i = 2; i < size; i += 2) {
|
||||
if (steps[i] > inactive_time) {
|
||||
break;
|
||||
}
|
||||
|
||||
last_target = target;
|
||||
|
||||
time_offset = steps[i];
|
||||
target = steps[i+1];
|
||||
}
|
||||
|
||||
uint32_t time_into_current_target = inactive_time - time_offset;
|
||||
|
||||
time_into_current_target = time_into_current_target > TIME_TO_CHANGE_BETWEEN_STEPS ? TIME_TO_CHANGE_BETWEEN_STEPS : time_into_current_target;
|
||||
time_into_current_target = time_into_current_target < 0 ? 0 : time_into_current_target;
|
||||
|
||||
return (float)last_target + ((float)time_into_current_target / (float)TIME_TO_CHANGE_BETWEEN_STEPS) * (float)(target - last_target);
|
||||
}
|
||||
|
||||
float get_desired_gcr_desired(void) {
|
||||
float pct = get_desired_percentage();
|
||||
|
||||
return pct * LED_GCR_MAX / 100;
|
||||
}
|
||||
|
||||
float get_desired_led_edge_brightness(void) {
|
||||
float pct = get_desired_percentage();
|
||||
|
||||
return pct / 100;
|
||||
}
|
||||
|
||||
void update_activity_timer(void) {
|
||||
activity_timer = timer_read32();
|
||||
}
|
||||
|
||||
uint32_t get_inactive_time(void) {
|
||||
return timer_read32() - activity_timer;
|
||||
}
|
||||
|
||||
// Lighting stuff for inactivity tracking
|
||||
// Increase
|
||||
void led_increase_key_brightness(void) {
|
||||
if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
|
||||
else gcr_desired += LED_GCR_STEP;
|
||||
if (led_animation_breathing) gcr_breathe = gcr_desired;
|
||||
}
|
||||
|
||||
void led_increase_edge_brightness(void) {
|
||||
led_edge_brightness += 0.1;
|
||||
if (led_edge_brightness > 1) { led_edge_brightness = 1; }
|
||||
}
|
||||
|
||||
// Decrease
|
||||
void led_decrease_key_brightness(void) {
|
||||
if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
|
||||
else gcr_desired -= LED_GCR_STEP;
|
||||
if (led_animation_breathing) gcr_breathe = gcr_desired;
|
||||
}
|
||||
|
||||
void led_decrease_edge_brightness(void) {
|
||||
led_edge_brightness -= 0.1;
|
||||
if (led_edge_brightness < 0) { led_edge_brightness = 0; }
|
||||
}
|
||||
|
||||
// Runs just one time when the keyboard initializes.
|
||||
void matrix_init_user(void) {
|
||||
led_animation_direction = 1;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user