aboutsummaryrefslogtreecommitdiff
path: root/quantum
diff options
context:
space:
mode:
authorAndré Silva <123550+andresilva@users.noreply.github.com>2021-01-14 19:29:00 +0000
committerGitHub <noreply@github.com>2021-01-14 11:29:00 -0800
commit345a041cf54d93cb35eabf429a6d99ae603760c4 (patch)
treef38759ece08a66948dd7ad9e23f5cc5b3946a263 /quantum
parente9f73e54548a0eae05f62bebe25ea8cdd79dd991 (diff)
downloadqmk_firmware-345a041cf54d93cb35eabf429a6d99ae603760c4.tar.gz
qmk_firmware-345a041cf54d93cb35eabf429a6d99ae603760c4.zip
allow customizing decrease delay of rgb heatmap (#11322)
* allow customizing decrease delay of rgb heatmap * rename rgb typing heatmap decrease delay variable * address review comments * nix-shell: add clang-tools required for formatting the C code * heatmap: use real timer to track decrement rate * heatmap: fix ifndef var name typo * heatmap: add docs * Update docs/feature_rgb_matrix.md Co-authored-by: Drashna Jaelre <drashna@live.com> Co-authored-by: Drashna Jaelre <drashna@live.com>
Diffstat (limited to 'quantum')
-rw-r--r--quantum/rgb_matrix_animations/typing_heatmap_anim.h25
1 files changed, 24 insertions, 1 deletions
diff --git a/quantum/rgb_matrix_animations/typing_heatmap_anim.h b/quantum/rgb_matrix_animations/typing_heatmap_anim.h
index b855fdc19..e06437bf7 100644
--- a/quantum/rgb_matrix_animations/typing_heatmap_anim.h
+++ b/quantum/rgb_matrix_animations/typing_heatmap_anim.h
@@ -2,6 +2,10 @@
2RGB_MATRIX_EFFECT(TYPING_HEATMAP) 2RGB_MATRIX_EFFECT(TYPING_HEATMAP)
3# ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS 3# ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
4 4
5# ifndef RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS
6# define RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS 25
7# endif
8
5void process_rgb_matrix_typing_heatmap(keyrecord_t* record) { 9void process_rgb_matrix_typing_heatmap(keyrecord_t* record) {
6 uint8_t row = record->event.key.row; 10 uint8_t row = record->event.key.row;
7 uint8_t col = record->event.key.col; 11 uint8_t col = record->event.key.col;
@@ -27,6 +31,11 @@ void process_rgb_matrix_typing_heatmap(keyrecord_t* record) {
27 } 31 }
28} 32}
29 33
34// A timer to track the last time we decremented all heatmap values.
35static uint16_t heatmap_decrease_timer;
36// Whether we should decrement the heatmap values during the next update.
37static bool decrease_heatmap_values;
38
30bool TYPING_HEATMAP(effect_params_t* params) { 39bool TYPING_HEATMAP(effect_params_t* params) {
31 // Modified version of RGB_MATRIX_USE_LIMITS to work off of matrix row / col size 40 // Modified version of RGB_MATRIX_USE_LIMITS to work off of matrix row / col size
32 uint8_t led_min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter; 41 uint8_t led_min = RGB_MATRIX_LED_PROCESS_LIMIT * params->iter;
@@ -38,6 +47,18 @@ bool TYPING_HEATMAP(effect_params_t* params) {
38 memset(g_rgb_frame_buffer, 0, sizeof g_rgb_frame_buffer); 47 memset(g_rgb_frame_buffer, 0, sizeof g_rgb_frame_buffer);
39 } 48 }
40 49
50 // The heatmap animation might run in several iterations depending on
51 // `RGB_MATRIX_LED_PROCESS_LIMIT`, therefore we only want to update the
52 // timer when the animation starts.
53 if (params->iter == 0) {
54 decrease_heatmap_values = timer_elapsed(heatmap_decrease_timer) >= RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS;
55
56 // Restart the timer if we are going to decrease the heatmap this frame.
57 if (decrease_heatmap_values) {
58 heatmap_decrease_timer = timer_read();
59 }
60 }
61
41 // Render heatmap & decrease 62 // Render heatmap & decrease
42 for (int i = led_min; i < led_max; i++) { 63 for (int i = led_min; i < led_max; i++) {
43 uint8_t row = i % MATRIX_ROWS; 64 uint8_t row = i % MATRIX_ROWS;
@@ -55,7 +76,9 @@ bool TYPING_HEATMAP(effect_params_t* params) {
55 rgb_matrix_set_color(led[j], rgb.r, rgb.g, rgb.b); 76 rgb_matrix_set_color(led[j], rgb.r, rgb.g, rgb.b);
56 } 77 }
57 78
58 g_rgb_frame_buffer[row][col] = qsub8(val, 1); 79 if (decrease_heatmap_values) {
80 g_rgb_frame_buffer[row][col] = qsub8(val, 1);
81 }
59 } 82 }
60 83
61 return led_max < sizeof(g_rgb_frame_buffer); 84 return led_max < sizeof(g_rgb_frame_buffer);