diff options
Diffstat (limited to 'drivers/ps2')
| -rw-r--r-- | drivers/ps2/ps2.h | 1 | ||||
| -rw-r--r-- | drivers/ps2/ps2_interrupt.c | 4 | ||||
| -rw-r--r-- | drivers/ps2/ps2_mouse.c | 19 | 
3 files changed, 20 insertions, 4 deletions
| diff --git a/drivers/ps2/ps2.h b/drivers/ps2/ps2.h index f123192852..2465e16235 100644 --- a/drivers/ps2/ps2.h +++ b/drivers/ps2/ps2.h @@ -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 diff --git a/drivers/ps2/ps2_interrupt.c b/drivers/ps2/ps2_interrupt.c index c49b4f8b75..c9a9f1e1ec 100644 --- a/drivers/ps2/ps2_interrupt.c +++ b/drivers/ps2/ps2_interrupt.c @@ -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(); diff --git a/drivers/ps2/ps2_mouse.c b/drivers/ps2/ps2_mouse.c index ccb0a929ae..66b48bb3c3 100644 --- a/drivers/ps2/ps2_mouse.c +++ b/drivers/ps2/ps2_mouse.c @@ -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)) { | 
