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