Add PMW3389 optical sensor Support (Updated) (#15740)
Co-authored-by: Drashna Jaelre <drashna@live.com>
This commit is contained in:
parent
a7eb27b867
commit
2842ab4052
9 changed files with 721 additions and 294 deletions
|
@ -242,6 +242,42 @@ const pointing_device_driver_t pointing_device_driver = {
|
|||
.get_cpi = pmw3360_get_cpi
|
||||
};
|
||||
// clang-format on
|
||||
#elif defined(POINTING_DEVICE_DRIVER_pmw3389)
|
||||
static void pmw3389_device_init(void) { pmw3389_init(); }
|
||||
|
||||
report_mouse_t pmw3389_get_report(report_mouse_t mouse_report) {
|
||||
report_pmw3389_t data = pmw3389_read_burst();
|
||||
static uint16_t MotionStart = 0; // Timer for accel, 0 is resting state
|
||||
|
||||
if (data.isOnSurface && data.isMotion) {
|
||||
// Reset timer if stopped moving
|
||||
if (!data.isMotion) {
|
||||
if (MotionStart != 0) MotionStart = 0;
|
||||
return mouse_report;
|
||||
}
|
||||
|
||||
// Set timer if new motion
|
||||
if ((MotionStart == 0) && data.isMotion) {
|
||||
# ifdef CONSOLE_ENABLE
|
||||
if (debug_mouse) dprintf("Starting motion.\n");
|
||||
# endif
|
||||
MotionStart = timer_read();
|
||||
}
|
||||
mouse_report.x = constrain_hid(data.dx);
|
||||
mouse_report.y = constrain_hid(data.dy);
|
||||
}
|
||||
|
||||
return mouse_report;
|
||||
}
|
||||
|
||||
// clang-format off
|
||||
const pointing_device_driver_t pointing_device_driver = {
|
||||
.init = pmw3389_device_init,
|
||||
.get_report = pmw3389_get_report,
|
||||
.set_cpi = pmw3389_set_cpi,
|
||||
.get_cpi = pmw3389_get_cpi
|
||||
};
|
||||
// clang-format on
|
||||
#else
|
||||
__attribute__((weak)) void pointing_device_driver_init(void) {}
|
||||
__attribute__((weak)) report_mouse_t pointing_device_driver_get_report(report_mouse_t mouse_report) { return mouse_report; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue