c9fd698711
* Reimplements WPM feature. - Now calculates exact WPM over the last up to three seconds of typing. - WPM_SMOOTHING removed, as it's no longer needed. - WPM_SAMPLE_SECONDS added, to specify how long a period to average WPM over, set to 5 seconds by default. - WPM_SAMPLE_PERIODS added, to specify how many sampling buffers we'll use. Each one uses one extra byte of space. Having more will lead to smoother decay of WPM values. Defaults to 50 (we're saving so many bytes of firmware space I felt like being extravagent, and this change is still a big size saving overall) - WPM_UNFILTERED option added (defaults to unset), which disables all filtering within the WPM feature. This saves some space in the firmware and also reduces latency between typing and the WPM calculation measuring it. (saves 70 bytes in my tests) - WPM_LAUNCH_CONTROL added (defaults to unset). When typing begins while the current displayed WPM value is zero, the WPM calculation only considers the time elapsed since typing began, not the whole WPM_SAMPLE_SECONDS buffer. The result of this is that the displayed WPM value much more rapidly reaches an accurate WPM value, even when results are being filtered. (costs 22 bytes in my tests) - Updates documentation to reflect changed options. Saves about 900 bytes, in my tests, compared against the previous implementation, with default settings. * Apply suggestions from code review Co-authored-by: Sergey Vlasov <sigprof@gmail.com> Co-authored-by: Trevor Powell <trevor@vectorstorm.org> Co-authored-by: Nick Brassel <nick@tzarc.org> Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
44 lines
1.3 KiB
C
44 lines
1.3 KiB
C
/*
|
|
* Copyright 2020 Richard Sutherland (rich@brickbots.com)
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "quantum.h"
|
|
|
|
#ifndef WPM_ESTIMATED_WORD_SIZE
|
|
# define WPM_ESTIMATED_WORD_SIZE 5
|
|
#endif
|
|
#ifndef WPM_SAMPLE_SECONDS
|
|
# define WPM_SAMPLE_SECONDS 5
|
|
#endif
|
|
#ifndef WPM_SAMPLE_PERIODS
|
|
# define WPM_SAMPLE_PERIODS 50
|
|
#endif
|
|
|
|
bool wpm_keycode(uint16_t keycode);
|
|
bool wpm_keycode_kb(uint16_t keycode);
|
|
bool wpm_keycode_user(uint16_t keycode);
|
|
|
|
#ifdef WPM_ALLOW_COUNT_REGRESSION
|
|
uint8_t wpm_regress_count(uint16_t keycode);
|
|
#endif
|
|
|
|
void set_current_wpm(uint8_t);
|
|
uint8_t get_current_wpm(void);
|
|
void update_wpm(uint16_t);
|
|
|
|
void decay_wpm(void);
|