X-Git-Url: https://git.friedersdorff.com/?a=blobdiff_plain;f=usb_mouse.c;h=319b65a1cb3b8dfa82254158c743633820025cef;hb=7272c65d3d24187487e7d38e332401002f5f233b;hp=a3992efbc6908c7c9544a42f84b461ff2239d154;hpb=7e3975e0ef00b2095e32595597ba054d408f249c;p=max%2Ftmk_keyboard.git diff --git a/usb_mouse.c b/usb_mouse.c index a3992efb..319b65a1 100644 --- a/usb_mouse.c +++ b/usb_mouse.c @@ -1,40 +1,22 @@ #include #include #include "usb_mouse.h" +#include "print.h" +#include "debug.h" -// which buttons are currently pressed -uint8_t mouse_buttons=0; +uint8_t usb_mouse_protocol=1; -// protocol setting from the host. We use exactly the same report -// either way, so this variable only stores the setting since we -// are required to be able to report which setting is in use. -uint8_t mouse_protocol=1; - -// Set the mouse buttons. To create a "click", 2 calls are needed, -// one to push the button down and the second to release it -int8_t usb_mouse_buttons(uint8_t left, uint8_t middle, uint8_t right) -{ - uint8_t mask=0; - - if (left) mask |= 1; - if (middle) mask |= 4; - if (right) mask |= 2; - mouse_buttons = mask; - return usb_mouse_move(0, 0, 0, 0); -} - -// Move the mouse. x, y and wheel are -127 to 127. Use 0 for no movement. -int8_t usb_mouse_move(int8_t x, int8_t y, int8_t wheel, int8_t hwheel) +int8_t usb_mouse_send(int8_t x, int8_t y, int8_t wheel_v, int8_t wheel_h, uint8_t buttons) { uint8_t intr_state, timeout; if (!usb_configured()) return -1; if (x == -128) x = -127; if (y == -128) y = -127; - if (wheel == -128) wheel = -127; - if (hwheel == -128) hwheel = -127; + if (wheel_v == -128) wheel_v = -127; + if (wheel_h == -128) wheel_h = -127; intr_state = SREG; cli(); UENUM = MOUSE_ENDPOINT; @@ -52,12 +34,25 @@ int8_t usb_mouse_move(int8_t x, int8_t y, int8_t wheel, int8_t hwheel) cli(); UENUM = MOUSE_ENDPOINT; } - UEDATX = mouse_buttons; + UEDATX = buttons; UEDATX = x; UEDATX = y; - UEDATX = wheel; - //UEDATX = hwheel; + if (usb_mouse_protocol) { + UEDATX = wheel_v; + UEDATX = wheel_h; + } + UEINTX = 0x3A; SREG = intr_state; return 0; } + +void usb_mouse_print(int8_t x, int8_t y, int8_t wheel_v, int8_t wheel_h, uint8_t buttons) { + if (!debug_mouse) return; + print("usb_mouse[btn|x y v h]: "); + phex(buttons); print("|"); + phex(x); print(" "); + phex(y); print(" "); + phex(wheel_v); print(" "); + phex(wheel_h); print("\n"); +}