From 56e3f06a26851976e559aacf7a096c61403304be Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sun, 14 Nov 2021 22:03:24 -0800 Subject: Rework and expand Pointing Device support (#14343) Co-authored-by: Dasky <32983009+daskygit@users.noreply.github.com> --- keyboards/ploopyco/trackball_mini/trackball_mini.c | 108 +++++---------------- 1 file changed, 26 insertions(+), 82 deletions(-) (limited to 'keyboards/ploopyco/trackball_mini/trackball_mini.c') diff --git a/keyboards/ploopyco/trackball_mini/trackball_mini.c b/keyboards/ploopyco/trackball_mini/trackball_mini.c index b50850b549..2158a8f488 100644 --- a/keyboards/ploopyco/trackball_mini/trackball_mini.c +++ b/keyboards/ploopyco/trackball_mini/trackball_mini.c @@ -37,20 +37,17 @@ # define OPT_SCALE 1 // Multiplier for wheel #endif -#define PLOOPY_DPI_OPTIONS { CPI375, CPI750, CPI1375 } +#define PLOOPY_DPI_OPTIONS \ + { 375, 750, 1375 } #define PLOOPY_DPI_DEFAULT 2 #ifndef PLOOPY_DRAGSCROLL_DPI -# define PLOOPY_DRAGSCROLL_DPI CPI375 // Fixed-DPI Drag Scroll +# define PLOOPY_DRAGSCROLL_DPI 375 // Fixed-DPI Drag Scroll #endif #ifndef PLOOPY_DRAGSCROLL_MULTIPLIER # define PLOOPY_DRAGSCROLL_MULTIPLIER 0.75 // Variable-DPI Drag Scroll #endif -// Transformation constants for delta-X and delta-Y -const static float ADNS_X_TRANSFORM = -1.0; -const static float ADNS_Y_TRANSFORM = 1.0; - keyboard_config_t keyboard_config; uint16_t dpi_array[] = PLOOPY_DPI_OPTIONS; #define DPI_OPTION_SIZE (sizeof(dpi_array) / sizeof(uint16_t)) @@ -70,12 +67,7 @@ uint8_t OptLowPin = OPT_ENC1; bool debug_encoder = false; bool is_drag_scroll = false; -__attribute__((weak)) void process_wheel_user(report_mouse_t* mouse_report, int16_t h, int16_t v) { - mouse_report->h = h; - mouse_report->v = v; -} - -__attribute__((weak)) void process_wheel(report_mouse_t* mouse_report) { +void process_wheel(report_mouse_t* mouse_report) { // If the mouse wheel was just released, do not scroll. if (timer_elapsed(lastMidClick) < SCROLL_BUTT_DEBOUNCE) return; @@ -103,33 +95,31 @@ __attribute__((weak)) void process_wheel(report_mouse_t* mouse_report) { if (dir == 0) return; - process_wheel_user(mouse_report, mouse_report->h, (int)(mouse_report->v + (dir * OPT_SCALE))); + mouse_report->v = (int8_t)(dir * OPT_SCALE); } -__attribute__((weak)) void process_mouse_user(report_mouse_t* mouse_report, int16_t x, int16_t y) { - mouse_report->x = x; - mouse_report->y = y; -} - -__attribute__((weak)) void process_mouse(report_mouse_t* mouse_report) { - report_adns_t data = adns_read_burst(); - - if (data.dx != 0 || data.dy != 0) { - if (debug_mouse) - dprintf("Raw ] X: %d, Y: %d\n", data.dx, data.dy); +void pointing_device_init_kb(void) { + opt_encoder_init(); - // Apply delta-X and delta-Y transformations. - // x and y are swapped - // the sensor is rotated - // by 90 degrees - float xt = (float) data.dy * ADNS_X_TRANSFORM; - float yt = (float) data.dx * ADNS_Y_TRANSFORM; + // set the DPI. + pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]); +} - int16_t xti = (int16_t)xt; - int16_t yti = (int16_t)yt; +report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { - process_mouse_user(mouse_report, xti, yti); + if (is_drag_scroll) { + mouse_report.h = mouse_report.x; +#ifdef PLOOPY_DRAGSCROLL_INVERT + // Invert vertical scroll direction + mouse_report.v = -mouse_report.y; +#else + mouse_report.v = mouse_report.y; +#endif + mouse_report.x = 0; + mouse_report.y = 0; } + + return pointing_device_task_user(mouse_report); } bool process_record_kb(uint16_t keycode, keyrecord_t* record) { @@ -147,7 +137,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) { if (keycode == DPI_CONFIG && record->event.pressed) { keyboard_config.dpi_config = (keyboard_config.dpi_config + 1) % DPI_OPTION_SIZE; eeconfig_update_kb(keyboard_config.raw); - adns_set_cpi(dpi_array[keyboard_config.dpi_config]); + pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]); } if (keycode == DRAG_SCROLL) { @@ -157,7 +147,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) { { is_drag_scroll ^= 1; } - adns_set_cpi(is_drag_scroll ? PLOOPY_DRAGSCROLL_DPI : dpi_array[keyboard_config.dpi_config]); + pointing_device_set_cpi(is_drag_scroll ? PLOOPY_DRAGSCROLL_DPI : dpi_array[keyboard_config.dpi_config]); } /* If Mousekeys is disabled, then use handle the mouse button @@ -168,11 +158,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) { #ifndef MOUSEKEY_ENABLE if (IS_MOUSEKEY_BUTTON(keycode)) { report_mouse_t currentReport = pointing_device_get_report(); - if (record->event.pressed) { - currentReport.buttons |= 1 << (keycode - KC_MS_BTN1); - } else { - currentReport.buttons &= ~(1 << (keycode - KC_MS_BTN1)); - } + currentReport.buttons = pointing_device_handle_buttons(currentReport.buttons, record->event.pressed, keycode - KC_MS_BTN1); pointing_device_set_report(currentReport); pointing_device_send(); } @@ -207,48 +193,6 @@ void keyboard_pre_init_kb(void) { keyboard_pre_init_user(); } -void pointing_device_init(void) { - adns_init(); - opt_encoder_init(); - - // reboot the adns. - // if the adns hasn't initialized yet, this is harmless. - adns_write_reg(REG_CHIP_RESET, 0x5a); - - // wait maximum time before adns is ready. - // this ensures that the adns is actuall ready after reset. - wait_ms(55); - - // read a burst from the adns and then discard it. - // gets the adns ready for write commands - // (for example, setting the dpi). - adns_read_burst(); - - // set the DPI. - adns_set_cpi(dpi_array[keyboard_config.dpi_config]); -} - -void pointing_device_task(void) { - report_mouse_t mouse_report = pointing_device_get_report(); - process_wheel(&mouse_report); - process_mouse(&mouse_report); - - if (is_drag_scroll) { - mouse_report.h = mouse_report.x; -#ifdef PLOOPY_DRAGSCROLL_INVERT - // Invert vertical scroll direction - mouse_report.v = -mouse_report.y; -#else - mouse_report.v = mouse_report.y; -#endif - mouse_report.x = 0; - mouse_report.y = 0; - } - - pointing_device_set_report(mouse_report); - pointing_device_send(); -} - void eeconfig_init_kb(void) { keyboard_config.dpi_config = PLOOPY_DPI_DEFAULT; eeconfig_update_kb(keyboard_config.raw); -- cgit v1.2.3