diff options
author | Dasky <32983009+daskygit@users.noreply.github.com> | 2024-10-25 18:11:51 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-25 18:11:51 +0100 |
commit | f5b495e06e257796a9be845f47bfc375fece81f8 (patch) | |
tree | 3772da6b18ad610df774269d3542c6fb660b812c /drivers/sensors/pmw33xx_common.c | |
parent | 5c85271e48b4f2be7da47d1728ad1ddb95364ad7 (diff) |
Move pointing device driver code (#24445)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Diffstat (limited to 'drivers/sensors/pmw33xx_common.c')
-rw-r--r-- | drivers/sensors/pmw33xx_common.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/drivers/sensors/pmw33xx_common.c b/drivers/sensors/pmw33xx_common.c index b4fa727af9..f3285ec497 100644 --- a/drivers/sensors/pmw33xx_common.c +++ b/drivers/sensors/pmw33xx_common.c @@ -26,6 +26,13 @@ static bool in_burst_right[ARRAY_SIZE(cs_pins_right)] = {0}; bool __attribute__((cold)) pmw33xx_upload_firmware(uint8_t sensor); bool __attribute__((cold)) pmw33xx_check_signature(uint8_t sensor); +const pointing_device_driver_t pmw33xx_pointing_device_driver = { + .init = pmw33xx_init_wrapper, + .get_report = pmw33xx_get_report, + .set_cpi = pmw33xx_set_cpi_wrapper, + .get_cpi = pmw33xx_get_cpi_wrapper, +}; + uint16_t __attribute__((weak)) pmw33xx_srom_get_length(void) { return 0; } @@ -228,3 +235,38 @@ pmw33xx_report_t pmw33xx_read_burst(uint8_t sensor) { return report; } + +void pmw33xx_init_wrapper(void) { + pmw33xx_init(0); +} + +void pmw33xx_set_cpi_wrapper(uint16_t cpi) { + pmw33xx_set_cpi(0, cpi); +} + +uint16_t pmw33xx_get_cpi_wrapper(void) { + return pmw33xx_get_cpi(0); +} + +report_mouse_t pmw33xx_get_report(report_mouse_t mouse_report) { + pmw33xx_report_t report = pmw33xx_read_burst(0); + static bool in_motion = false; + + if (report.motion.b.is_lifted) { + return mouse_report; + } + + if (!report.motion.b.is_motion) { + in_motion = false; + return mouse_report; + } + + if (!in_motion) { + in_motion = true; + pd_dprintf("PWM3360 (0): starting motion\n"); + } + + mouse_report.x = CONSTRAIN_HID_XY(report.delta_x); + mouse_report.y = CONSTRAIN_HID_XY(report.delta_y); + return mouse_report; +} |