forked from mirrors/qmk_userspace
		
	Improve PS/2 mouse performance (#17111)
This commit is contained in:
		
					parent
					
						
							
								d44a950c10
							
						
					
				
			
			
				commit
				
					
						ecce9900c9
					
				
			
		
					 4 changed files with 22 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -89,6 +89,7 @@ uint8_t ps2_host_send(uint8_t data);
 | 
			
		|||
uint8_t ps2_host_recv_response(void);
 | 
			
		||||
uint8_t ps2_host_recv(void);
 | 
			
		||||
void    ps2_host_set_led(uint8_t usb_led);
 | 
			
		||||
bool    pbuf_has_data(void);
 | 
			
		||||
 | 
			
		||||
/*--------------------------------------------------------------------
 | 
			
		||||
 * static functions
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -66,8 +66,8 @@ uint8_t ps2_error = PS2_ERR_NONE;
 | 
			
		|||
 | 
			
		||||
static inline uint8_t pbuf_dequeue(void);
 | 
			
		||||
static inline void    pbuf_enqueue(uint8_t data);
 | 
			
		||||
static inline bool    pbuf_has_data(void);
 | 
			
		||||
static inline void    pbuf_clear(void);
 | 
			
		||||
bool                  pbuf_has_data(void);
 | 
			
		||||
 | 
			
		||||
#if defined(PROTOCOL_CHIBIOS)
 | 
			
		||||
void ps2_interrupt_service_routine(void);
 | 
			
		||||
| 
						 | 
				
			
			@ -309,7 +309,7 @@ static inline uint8_t pbuf_dequeue(void) {
 | 
			
		|||
 | 
			
		||||
    return val;
 | 
			
		||||
}
 | 
			
		||||
static inline bool pbuf_has_data(void) {
 | 
			
		||||
bool pbuf_has_data(void) {
 | 
			
		||||
#if defined(__AVR__)
 | 
			
		||||
    uint8_t sreg = SREG;
 | 
			
		||||
    cli();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,6 +53,7 @@ void ps2_mouse_init(void) {
 | 
			
		|||
    ps2_mouse_set_remote_mode();
 | 
			
		||||
#else
 | 
			
		||||
    ps2_mouse_enable_data_reporting();
 | 
			
		||||
    ps2_mouse_set_stream_mode();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef PS2_MOUSE_ENABLE_SCROLLING
 | 
			
		||||
| 
						 | 
				
			
			@ -75,19 +76,33 @@ void ps2_mouse_task(void) {
 | 
			
		|||
    extern int     tp_buttons;
 | 
			
		||||
 | 
			
		||||
    /* receives packet from mouse */
 | 
			
		||||
#ifdef PS2_MOUSE_USE_REMOTE_MODE
 | 
			
		||||
    uint8_t rcv;
 | 
			
		||||
    rcv = ps2_host_send(PS2_MOUSE_READ_DATA);
 | 
			
		||||
    if (rcv == PS2_ACK) {
 | 
			
		||||
        mouse_report.buttons = ps2_host_recv_response() | tp_buttons;
 | 
			
		||||
        mouse_report.x       = ps2_host_recv_response() * PS2_MOUSE_X_MULTIPLIER;
 | 
			
		||||
        mouse_report.y       = ps2_host_recv_response() * PS2_MOUSE_Y_MULTIPLIER;
 | 
			
		||||
#ifdef PS2_MOUSE_ENABLE_SCROLLING
 | 
			
		||||
#    ifdef PS2_MOUSE_ENABLE_SCROLLING
 | 
			
		||||
        mouse_report.v = -(ps2_host_recv_response() & PS2_MOUSE_SCROLL_MASK) * PS2_MOUSE_V_MULTIPLIER;
 | 
			
		||||
#endif
 | 
			
		||||
#    endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (debug_mouse) print("ps2_mouse: fail to get mouse packet\n");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
#else
 | 
			
		||||
    if (pbuf_has_data()) {
 | 
			
		||||
        mouse_report.buttons = ps2_host_recv_response() | tp_buttons;
 | 
			
		||||
        mouse_report.x       = ps2_host_recv_response() * PS2_MOUSE_X_MULTIPLIER;
 | 
			
		||||
        mouse_report.y       = ps2_host_recv_response() * PS2_MOUSE_Y_MULTIPLIER;
 | 
			
		||||
#    ifdef PS2_MOUSE_ENABLE_SCROLLING
 | 
			
		||||
        mouse_report.v       = -(ps2_host_recv_response() & PS2_MOUSE_SCROLL_MASK) * PS2_MOUSE_V_MULTIPLIER;
 | 
			
		||||
#    endif
 | 
			
		||||
    } else {
 | 
			
		||||
        if (debug_mouse) print("ps2_mouse: fail to get mouse packet\n");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    /* if mouse moves or buttons state changes */
 | 
			
		||||
    if (mouse_report.x || mouse_report.y || mouse_report.v || ((mouse_report.buttons ^ buttons_prev) & PS2_MOUSE_BTN_MASK)) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,8 +72,8 @@ uint8_t ps2_error = PS2_ERR_NONE;
 | 
			
		|||
 | 
			
		||||
static inline uint8_t pbuf_dequeue(void);
 | 
			
		||||
static inline void    pbuf_enqueue(uint8_t data);
 | 
			
		||||
static inline bool    pbuf_has_data(void);
 | 
			
		||||
static inline void    pbuf_clear(void);
 | 
			
		||||
bool                  pbuf_has_data(void);
 | 
			
		||||
 | 
			
		||||
void ps2_host_init(void) {
 | 
			
		||||
    idle(); // without this many USART errors occur when cable is disconnected
 | 
			
		||||
| 
						 | 
				
			
			@ -212,7 +212,7 @@ static inline uint8_t pbuf_dequeue(void) {
 | 
			
		|||
 | 
			
		||||
    return val;
 | 
			
		||||
}
 | 
			
		||||
static inline bool pbuf_has_data(void) {
 | 
			
		||||
bool pbuf_has_data(void) {
 | 
			
		||||
    uint8_t sreg = SREG;
 | 
			
		||||
    cli();
 | 
			
		||||
    bool has_data = (pbuf_head != pbuf_tail);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue