aboutsummaryrefslogtreecommitdiff
path: root/quantum/wpm.c
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/wpm.c')
-rw-r--r--quantum/wpm.c39
1 files changed, 18 insertions, 21 deletions
diff --git a/quantum/wpm.c b/quantum/wpm.c
index d4c971f31..da30bd252 100644
--- a/quantum/wpm.c
+++ b/quantum/wpm.c
@@ -17,12 +17,12 @@
17 17
18#include "wpm.h" 18#include "wpm.h"
19 19
20//WPM Stuff 20// WPM Stuff
21static uint8_t current_wpm = 0; 21static uint8_t current_wpm = 0;
22static uint8_t latest_wpm = 0; 22static uint8_t latest_wpm = 0;
23static uint16_t wpm_timer = 0; 23static uint16_t wpm_timer = 0;
24 24
25//This smoothing is 40 keystrokes 25// This smoothing is 40 keystrokes
26static const float wpm_smoothing = 0.0487; 26static const float wpm_smoothing = 0.0487;
27 27
28void set_current_wpm(uint8_t new_wpm) { current_wpm = new_wpm; } 28void set_current_wpm(uint8_t new_wpm) { current_wpm = new_wpm; }
@@ -34,34 +34,31 @@ bool wpm_keycode(uint16_t keycode) { return wpm_keycode_kb(keycode); }
34__attribute__((weak)) bool wpm_keycode_kb(uint16_t keycode) { return wpm_keycode_user(keycode); } 34__attribute__((weak)) bool wpm_keycode_kb(uint16_t keycode) { return wpm_keycode_user(keycode); }
35 35
36__attribute__((weak)) bool wpm_keycode_user(uint16_t keycode) { 36__attribute__((weak)) bool wpm_keycode_user(uint16_t keycode) {
37
38 if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX) || (keycode >= QK_MODS && keycode <= QK_MODS_MAX)) { 37 if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX) || (keycode >= QK_MODS && keycode <= QK_MODS_MAX)) {
39 keycode = keycode & 0xFF; 38 keycode = keycode & 0xFF;
40 } else if (keycode > 0xFF) { 39 } else if (keycode > 0xFF) {
41 keycode = 0; 40 keycode = 0;
42 } 41 }
43 if((keycode >= KC_A && keycode <= KC_0) || (keycode >= KC_TAB && keycode <= KC_SLASH)) { 42 if ((keycode >= KC_A && keycode <= KC_0) || (keycode >= KC_TAB && keycode <= KC_SLASH)) {
44 return true; 43 return true;
45 } 44 }
46 45
47 return false; 46 return false;
48} 47}
49 48
50
51void update_wpm(uint16_t keycode) { 49void update_wpm(uint16_t keycode) {
52 if(wpm_keycode(keycode)) { 50 if (wpm_keycode(keycode)) {
53 if(wpm_timer > 0) { 51 if (wpm_timer > 0) {
54 latest_wpm = 60000 / timer_elapsed(wpm_timer) / 5; 52 latest_wpm = 60000 / timer_elapsed(wpm_timer) / 5;
55 current_wpm = (latest_wpm - current_wpm) * wpm_smoothing + current_wpm; 53 current_wpm = (latest_wpm - current_wpm) * wpm_smoothing + current_wpm;
56 } 54 }
57 wpm_timer = timer_read(); 55 wpm_timer = timer_read();
58 } 56 }
59} 57}
60 58
61void decay_wpm(void) { 59void decay_wpm(void) {
62 if (timer_elapsed(wpm_timer) > 1000) { 60 if (timer_elapsed(wpm_timer) > 1000) {
63 current_wpm = (0 - current_wpm) * wpm_smoothing + 61 current_wpm = (0 - current_wpm) * wpm_smoothing + current_wpm;
64 current_wpm; 62 wpm_timer = timer_read();
65 wpm_timer = timer_read(); 63 }
66 }
67} 64}