diff options
author | Drashna Jaelre <drashna@live.com> | 2021-11-14 22:03:24 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-14 22:03:24 -0800 |
commit | 56e3f06a26851976e559aacf7a096c61403304be (patch) | |
tree | 1e9ec98ad239fdd241e77ac4c4822fc2721a9cea /keyboards/ploopyco/trackball | |
parent | 462c3a615113e84ac3ca837a5caeb928c0ec8505 (diff) |
Rework and expand Pointing Device support (#14343)
Co-authored-by: Dasky <32983009+daskygit@users.noreply.github.com>
Diffstat (limited to 'keyboards/ploopyco/trackball')
-rw-r--r-- | keyboards/ploopyco/trackball/rules.mk | 5 | ||||
-rw-r--r-- | keyboards/ploopyco/trackball/trackball.c | 105 | ||||
-rw-r--r-- | keyboards/ploopyco/trackball/trackball.h | 6 |
3 files changed, 24 insertions, 92 deletions
diff --git a/keyboards/ploopyco/trackball/rules.mk b/keyboards/ploopyco/trackball/rules.mk index af9bc7d4ce..d118581523 100644 --- a/keyboards/ploopyco/trackball/rules.mk +++ b/keyboards/ploopyco/trackball/rules.mk @@ -19,9 +19,10 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow AUDIO_ENABLE = no # Audio output POINTING_DEVICE_ENABLE = yes +POINTING_DEVICE_DRIVER = pmw3360 MOUSEKEY_ENABLE = yes # Mouse keys -QUANTUM_LIB_SRC += analog.c spi_master.c -SRC += drivers/sensors/pmw3360.c opt_encoder.c +QUANTUM_LIB_SRC += analog.c +SRC += opt_encoder.c DEFAULT_FOLDER = ploopyco/trackball/rev1_005 diff --git a/keyboards/ploopyco/trackball/trackball.c b/keyboards/ploopyco/trackball/trackball.c index 7190209979..e2a6e4ed5c 100644 --- a/keyboards/ploopyco/trackball/trackball.c +++ b/keyboards/ploopyco/trackball/trackball.c @@ -65,12 +65,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) { // TODO: Replace this with interrupt driven code, polling is S L O W // Lovingly ripped from the Ploopy Source @@ -99,56 +94,25 @@ __attribute__((weak)) void process_wheel(report_mouse_t* mouse_report) { int dir = opt_encoder_handler(p1, p2); 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_pmw_t data = pmw_read_burst(); - if (data.isOnSurface && data.isMotion) { - // Reset timer if stopped moving - if (!data.isMotion) { - if (MotionStart != 0) MotionStart = 0; - return; - } - - // Set timer if new motion - if ((MotionStart == 0) && data.isMotion) { - if (debug_mouse) dprintf("Starting motion.\n"); - MotionStart = timer_read(); - } +report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { + process_wheel(&mouse_report); - if (debug_mouse) { - dprintf("Delt] d: %d t: %u\n", abs(data.dx) + abs(data.dy), MotionStart); - } - if (debug_mouse) { - dprintf("Pre ] X: %d, Y: %d\n", data.dx, data.dy); - } -#if defined(PROFILE_LINEAR) - float scale = float(timer_elaspsed(MotionStart)) / 1000.0; - data.dx *= scale; - data.dy *= scale; -#elif defined(PROFILE_INVERSE) - // TODO + 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 - // no post processing + mouse_report.v = mouse_report.y; #endif - // apply multiplier - // data.dx *= mouse_multiplier; - // data.dy *= mouse_multiplier; - - // Wrap to HID size - data.dx = constrain(data.dx, -127, 127); - data.dy = constrain(data.dy, -127, 127); - if (debug_mouse) dprintf("Cons] X: %d, Y: %d\n", data.dx, data.dy); - // dprintf("Elapsed:%u, X: %f Y: %\n", i, pgm_read_byte(firmware_data+i)); - - process_mouse_user(mouse_report, data.dx, -data.dy); + 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) { @@ -169,7 +133,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); - pmw_set_cpi(dpi_array[keyboard_config.dpi_config]); + pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]); } if (keycode == DRAG_SCROLL) { @@ -180,9 +144,9 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) { is_drag_scroll ^= 1; } #ifdef PLOOPY_DRAGSCROLL_FIXED - pmw_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]); #else - pmw_set_cpi(is_drag_scroll ? (dpi_array[keyboard_config.dpi_config] * PLOOPY_DRAGSCROLL_MULTIPLIER) : dpi_array[keyboard_config.dpi_config]); + pointing_device_set_cpi(is_drag_scroll ? (dpi_array[keyboard_config.dpi_config] * PLOOPY_DRAGSCROLL_MULTIPLIER) : dpi_array[keyboard_config.dpi_config]); #endif } @@ -194,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(record->event.pressed, keycode - KC_MS_BTN1); pointing_device_set_report(currentReport); pointing_device_send(); } @@ -239,35 +199,12 @@ void keyboard_pre_init_kb(void) { keyboard_pre_init_user(); } -void pointing_device_init(void) { - // initialize ball sensor - pmw_spi_init(); +void pointing_device_init_kb(void) { + pmw3360_set_cpi(dpi_array[keyboard_config.dpi_config]); // initialize the scroll wheel's optical encoder opt_encoder_init(); } - -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); @@ -285,7 +222,7 @@ void matrix_init_kb(void) { } void keyboard_post_init_kb(void) { - pmw_set_cpi(dpi_array[keyboard_config.dpi_config]); + pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]); keyboard_post_init_user(); } diff --git a/keyboards/ploopyco/trackball/trackball.h b/keyboards/ploopyco/trackball/trackball.h index 70f5d83b11..52d955325b 100644 --- a/keyboards/ploopyco/trackball/trackball.h +++ b/keyboards/ploopyco/trackball/trackball.h @@ -19,11 +19,8 @@ #pragma once #include "quantum.h" -#include "spi_master.h" -#include "drivers/sensors/pmw3360.h" #include "analog.h" #include "opt_encoder.h" -#include "pointing_device.h" #if defined(KEYBOARD_ploopyco_trackball_rev1) # include "rev1.h" #elif defined(KEYBOARD_ploopyco_trackball_rev1_005) @@ -36,10 +33,7 @@ #define OPT_ENC1_MUX 0 #define OPT_ENC2_MUX 4 -void process_mouse(report_mouse_t* mouse_report); -void process_mouse_user(report_mouse_t* mouse_report, int16_t x, int16_t y); void process_wheel(report_mouse_t* mouse_report); -void process_wheel_user(report_mouse_t* mouse_report, int16_t h, int16_t v); #define LAYOUT(BL, BM, BR, BF, BB) \ { {BL, BM, BR, BF, BB}, } |