Add last activity functions for pointing device (#20079)
This commit is contained in:
		
							parent
							
								
									8686c527f7
								
							
						
					
					
						commit
						297779385f
					
				
					 6 changed files with 61 additions and 40 deletions
				
			
		| 
						 | 
				
			
			@ -74,7 +74,8 @@ uint16_t pointing_device_get_shared_cpi(void) {
 | 
			
		|||
 | 
			
		||||
#endif // defined(SPLIT_POINTING_ENABLE)
 | 
			
		||||
 | 
			
		||||
static report_mouse_t local_mouse_report = {};
 | 
			
		||||
static report_mouse_t local_mouse_report         = {};
 | 
			
		||||
static bool           pointing_device_force_send = false;
 | 
			
		||||
 | 
			
		||||
extern const pointing_device_driver_t pointing_device_driver;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -163,11 +164,11 @@ __attribute__((weak)) void pointing_device_init(void) {
 | 
			
		|||
 * This sends the mouse report generated by pointing_device_task if changed since the last report. Once send zeros mouse report except buttons.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
__attribute__((weak)) void pointing_device_send(void) {
 | 
			
		||||
    static report_mouse_t old_report = {};
 | 
			
		||||
__attribute__((weak)) bool pointing_device_send(void) {
 | 
			
		||||
    static report_mouse_t old_report         = {};
 | 
			
		||||
    bool                  should_send_report = has_mouse_report_changed(&local_mouse_report, &old_report);
 | 
			
		||||
 | 
			
		||||
    // If you need to do other things, like debugging, this is the place to do it.
 | 
			
		||||
    if (has_mouse_report_changed(&local_mouse_report, &old_report)) {
 | 
			
		||||
    if (should_send_report) {
 | 
			
		||||
        host_mouse_send(&local_mouse_report);
 | 
			
		||||
    }
 | 
			
		||||
    // send it and 0 it out except for buttons, so those stay until they are explicity over-ridden using update_pointing_device
 | 
			
		||||
| 
						 | 
				
			
			@ -175,6 +176,8 @@ __attribute__((weak)) void pointing_device_send(void) {
 | 
			
		|||
    memset(&local_mouse_report, 0, sizeof(local_mouse_report));
 | 
			
		||||
    local_mouse_report.buttons = buttons;
 | 
			
		||||
    memcpy(&old_report, &local_mouse_report, sizeof(local_mouse_report));
 | 
			
		||||
 | 
			
		||||
    return should_send_report || buttons;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -220,18 +223,18 @@ report_mouse_t pointing_device_adjust_by_defines(report_mouse_t mouse_report) {
 | 
			
		|||
 * It applies any optional configuration e.g. rotation or axis inversion and then initiates a send.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
__attribute__((weak)) void pointing_device_task(void) {
 | 
			
		||||
__attribute__((weak)) bool pointing_device_task(void) {
 | 
			
		||||
#if defined(SPLIT_POINTING_ENABLE)
 | 
			
		||||
    // Don't poll the target side pointing device.
 | 
			
		||||
    if (!is_keyboard_master()) {
 | 
			
		||||
        return;
 | 
			
		||||
        return false;
 | 
			
		||||
    };
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if (POINTING_DEVICE_TASK_THROTTLE_MS > 0)
 | 
			
		||||
    static uint32_t last_exec = 0;
 | 
			
		||||
    if (timer_elapsed32(last_exec) < POINTING_DEVICE_TASK_THROTTLE_MS) {
 | 
			
		||||
        return;
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    last_exec = timer_read32();
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -286,7 +289,11 @@ __attribute__((weak)) void pointing_device_task(void) {
 | 
			
		|||
    report_mouse_t mousekey_report = mousekey_get_report();
 | 
			
		||||
    local_mouse_report.buttons     = local_mouse_report.buttons | mousekey_report.buttons;
 | 
			
		||||
#endif
 | 
			
		||||
    pointing_device_send();
 | 
			
		||||
 | 
			
		||||
    const bool send_report     = pointing_device_send() || pointing_device_force_send;
 | 
			
		||||
    pointing_device_force_send = false;
 | 
			
		||||
 | 
			
		||||
    return send_report;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			@ -304,7 +311,8 @@ report_mouse_t pointing_device_get_report(void) {
 | 
			
		|||
 * @param[in] mouse_report
 | 
			
		||||
 */
 | 
			
		||||
void pointing_device_set_report(report_mouse_t mouse_report) {
 | 
			
		||||
    local_mouse_report = mouse_report;
 | 
			
		||||
    pointing_device_force_send = has_mouse_report_changed(&local_mouse_report, &mouse_report);
 | 
			
		||||
    memcpy(&local_mouse_report, &mouse_report, sizeof(local_mouse_report));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue