Simplified tick rate and made it configurable

This commit is contained in:
krikun98 2021-08-27 03:19:57 +03:00 committed by Alexander Krikun
parent eb089b5f29
commit 96660dce4f
4 changed files with 7 additions and 12 deletions

View file

@ -7,6 +7,10 @@ menuconfig ZMK_MOUSE
if ZMK_MOUSE if ZMK_MOUSE
config ZMK_MOUSE_TICK_DURATION
int "Mouse tick duration in ms"
default 8
choice ZMK_MOUSE_WORK_QUEUE choice ZMK_MOUSE_WORK_QUEUE
prompt "Work queue selection for mouse events" prompt "Work queue selection for mouse events"
default ZMK_MOUSE_WORK_QUEUE_DEDICATED default ZMK_MOUSE_WORK_QUEUE_DEDICATED

View file

@ -47,7 +47,7 @@ static int mouse_timer_ref_count = 0;
void mouse_timer_ref() { void mouse_timer_ref() {
if (mouse_timer_ref_count == 0) { if (mouse_timer_ref_count == 0) {
k_timer_start(&mouse_timer, K_NO_WAIT, K_MSEC(10)); k_timer_start(&mouse_timer, K_NO_WAIT, K_MSEC(CONFIG_ZMK_MOUSE_TICK_DURATION));
} }
mouse_timer_ref_count += 1; mouse_timer_ref_count += 1;
// trigger the first mouse tick event immediately // trigger the first mouse tick event immediately

View file

@ -5,9 +5,6 @@
*/ */
#include <kernel.h> #include <kernel.h>
#include <init.h>
#include <device.h>
#include <devicetree.h>
#if IS_ENABLED(CONFIG_ZMK_MOUSE_WORK_QUEUE_DEDICATED) #if IS_ENABLED(CONFIG_ZMK_MOUSE_WORK_QUEUE_DEDICATED)

View file

@ -34,7 +34,6 @@ static float powf(float base, float exponent) {
struct movement_state { struct movement_state {
int64_t start; int64_t start;
int64_t last_tick;
struct vector2d fractional_remainder; struct vector2d fractional_remainder;
}; };
@ -52,8 +51,6 @@ static struct mouse_config scroll_config = (struct mouse_config){
.acceleration_exponent = 2.0, .acceleration_exponent = 2.0,
}; };
static int64_t ms_since_last_tick(int64_t last_tick, int64_t now) { return now - last_tick; }
static int64_t ms_since_start(int64_t start, int64_t now) { static int64_t ms_since_start(int64_t start, int64_t now) {
int64_t move_duration = now - start; int64_t move_duration = now - start;
// start can be in the future if there's a delay // start can be in the future if there's a delay
@ -88,20 +85,17 @@ static struct vector2d update_movement(struct movement_state *state, struct mous
} }
if (state->start == 0) { if (state->start == 0) {
state->start = now + config->delay_ms; state->start = now + config->delay_ms;
state->last_tick = now;
} }
int64_t tick_duration = ms_since_last_tick(state->last_tick, now);
int64_t move_duration = ms_since_start(state->start, now); int64_t move_duration = ms_since_start(state->start, now);
move = (struct vector2d){ move = (struct vector2d){
.x = speed(config, max_speed.x, move_duration) * tick_duration / 1000, .x = speed(config, max_speed.x, move_duration) * CONFIG_ZMK_MOUSE_TICK_DURATION / 1000,
.y = speed(config, max_speed.y, move_duration) * tick_duration / 1000, .y = speed(config, max_speed.y, move_duration) * CONFIG_ZMK_MOUSE_TICK_DURATION / 1000,
}; };
track_remainder(&(move.x), &state->fractional_remainder.x); track_remainder(&(move.x), &state->fractional_remainder.x);
track_remainder(&(move.y), &state->fractional_remainder.y); track_remainder(&(move.y), &state->fractional_remainder.y);
state->last_tick = now;
return move; return move;
} }