From 91d29fe41858ce72228ac2f89b4e92c067b0ab91 Mon Sep 17 00:00:00 2001 From: Florian Didron Date: Tue, 2 Sep 2025 16:51:28 +0700 Subject: [PATCH] fix: trackball cpi boundaries, restore user set default cpi at boot --- drivers/sensors/navigator_trackball.c | 6 ++---- drivers/sensors/navigator_trackball.h | 29 ++------------------------- 2 files changed, 4 insertions(+), 31 deletions(-) diff --git a/drivers/sensors/navigator_trackball.c b/drivers/sensors/navigator_trackball.c index a034a61c2a..62b836dd04 100644 --- a/drivers/sensors/navigator_trackball.c +++ b/drivers/sensors/navigator_trackball.c @@ -192,6 +192,7 @@ void navigator_trackball_device_init(void) { } trackball_init = 1; + restore_cpi(current_cpi); if (!callback_token) { // Register the callback to read the trackball motion callback_token = defer_exec(NAVIGATOR_TRACKBALL_READ, sci18is606_read_callback, NULL); @@ -217,20 +218,17 @@ uint16_t navigator_trackball_get_cpi(void) { void restore_cpi(uint8_t cpi) { current_cpi = cpi; paw3805ek_set_cpi(); - printf("restored cpi: %d\n", current_cpi); } void navigator_trackball_set_cpi(uint16_t cpi) { if (cpi == 0) { // Decrease one tick if (current_cpi > NAVIGATOR_TRACKBALL_CPI_TICK) { current_cpi -= NAVIGATOR_TRACKBALL_CPI_TICK; - printf("decreased cpi: %d\n", current_cpi); paw3805ek_set_cpi(); } } else { - if (current_cpi < 255 - NAVIGATOR_TRACKBALL_CPI_TICK) { + if (current_cpi <= NAVIGATOR_TRACKBALL_CPI_MAX - NAVIGATOR_TRACKBALL_CPI_TICK) { current_cpi += NAVIGATOR_TRACKBALL_CPI_TICK; - printf("increased cpi: %d\n", current_cpi); paw3805ek_set_cpi(); } } diff --git a/drivers/sensors/navigator_trackball.h b/drivers/sensors/navigator_trackball.h index bd270d8d92..4b117a783a 100644 --- a/drivers/sensors/navigator_trackball.h +++ b/drivers/sensors/navigator_trackball.h @@ -18,6 +18,8 @@ # define NAVIGATOR_TRACKBALL_CPI_TICK 5 #endif +#define NAVIGATOR_TRACKBALL_CPI_MAX 125 + #ifndef NAVIGATOR_TRACKBALL_TIMEOUT # define NAVIGATOR_TRACKBALL_TIMEOUT 100 #endif @@ -36,33 +38,6 @@ #define SCI18IS606_GET_ID 0xFE #define WRITE_REG_BIT 0x80 -/* -The PAW3805EK datasheet suggests the following CPI values for the X and Y axes: -CPI X-axis Y-axis -800 0x1F 0x22 -1000 0x26 0x2A -1200 0x2E 0x32 -1600 0x3C 0x43 -2000 0x4C 0x54 -2400 0x5B 0x64 -3000 0x70 0x7B -*/ -#define CPI_TICKS 7 -#define DEFAULT_CPI_TICK 1 -#define CPI_X_800 0x1F -#define CPI_Y_800 0x22 -#define CPI_X_1000 0x26 -#define CPI_Y_1000 0x2A -#define CPI_X_1200 0x2E -#define CPI_Y_1200 0x32 -#define CPI_X_1600 0x3C -#define CPI_Y_1600 0x43 -#define CPI_X_2000 0x4C -#define CPI_Y_2000 0x54 -#define CPI_X_2400 0x5B -#define CPI_Y_2400 0x64 -#define CPI_X_3000 0x70 -#define CPI_Y_3000 0x7B typedef struct { uint8_t reg;