aboutsummaryrefslogtreecommitdiff
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
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>
-rw-r--r--docs/feature_rgb_matrix.md13
-rw-r--r--quantum/rgb_matrix_animations/typing_heatmap_anim.h25
-rw-r--r--shell.nix2
3 files changed, 38 insertions, 2 deletions
diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md
index a9e711c9f..7b597143c 100644
--- a/docs/feature_rgb_matrix.md
+++ b/docs/feature_rgb_matrix.md
@@ -296,6 +296,19 @@ You can disable a single effect by defining `DISABLE_[EFFECT_NAME]` in your `con
296|`#define DISABLE_RGB_MATRIX_SOLID_SPLASH` |Disables `RGB_MATRIX_SOLID_SPLASH` | 296|`#define DISABLE_RGB_MATRIX_SOLID_SPLASH` |Disables `RGB_MATRIX_SOLID_SPLASH` |
297|`#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH` |Disables `RGB_MATRIX_SOLID_MULTISPLASH` | 297|`#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH` |Disables `RGB_MATRIX_SOLID_MULTISPLASH` |
298 298
299### RGB Matrix Effect Typing Heatmap :id=rgb-matrix-effect-typing-heatmap
300
301This effect will color the RGB matrix according to a heatmap of recently pressed
302keys. Whenever a key is pressed its "temperature" increases as well as that of
303its neighboring keys. The temperature of each key is then decreased
304automatically every 25 milliseconds by default.
305
306In order to change the delay of temperature decrease define
307`RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS`:
308
309```c
310#define RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS 50
311```
299 312
300## Custom RGB Matrix Effects :id=custom-rgb-matrix-effects 313## Custom RGB Matrix Effects :id=custom-rgb-matrix-effects
301 314
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);
diff --git a/shell.nix b/shell.nix
index 6cfda2da9..82505d5d2 100644
--- a/shell.nix
+++ b/shell.nix
@@ -71,7 +71,7 @@ in
71mkShell { 71mkShell {
72 name = "qmk-firmware"; 72 name = "qmk-firmware";
73 73
74 buildInputs = [ dfu-programmer dfu-util diffutils git pythonEnv ] 74 buildInputs = [ clang-tools dfu-programmer dfu-util diffutils git pythonEnv ]
75 ++ lib.optional avr [ 75 ++ lib.optional avr [
76 pkgsCross.avr.buildPackages.binutils 76 pkgsCross.avr.buildPackages.binutils
77 pkgsCross.avr.buildPackages.gcc8 77 pkgsCross.avr.buildPackages.gcc8