From 1d4846c8bb4eea21a76a5f29847d3a48dcdb3d58 Mon Sep 17 00:00:00 2001 From: Daniel-I-Am Date: Tue, 24 May 2022 19:00:57 +0200 Subject: [PATCH] Refactor inactivity dimming to seperate file --- layout/my-layout/inactivity-dimming.c | 145 +++++++++++++++++++++++++ layout/my-layout/keymap.c | 146 +------------------------- 2 files changed, 147 insertions(+), 144 deletions(-) create mode 100644 layout/my-layout/inactivity-dimming.c diff --git a/layout/my-layout/inactivity-dimming.c b/layout/my-layout/inactivity-dimming.c new file mode 100644 index 0000000..8b07f66 --- /dev/null +++ b/layout/my-layout/inactivity-dimming.c @@ -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; } +} \ No newline at end of file diff --git a/layout/my-layout/keymap.c b/layout/my-layout/keymap.c index f0e441a..c14d980 100644 --- a/layout/my-layout/keymap.c +++ b/layout/my-layout/keymap.c @@ -1,5 +1,7 @@ #include QMK_KEYBOARD_H +#include + 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;