From d3b1af9572e123c939fc355474bf12402c86d292 Mon Sep 17 00:00:00 2001 From: tmk Date: Thu, 30 Sep 2010 14:17:01 +0900 Subject: add mouse function. --- usb_mouse.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 usb_mouse.c (limited to 'usb_mouse.c') diff --git a/usb_mouse.c b/usb_mouse.c new file mode 100644 index 0000000000..539f2edd37 --- /dev/null +++ b/usb_mouse.c @@ -0,0 +1,62 @@ +#include +#include +#include "usb_mouse.h" + + +// which buttons are currently pressed +uint8_t mouse_buttons=0; + +// 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); +} + +// 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) +{ + 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; + intr_state = SREG; + cli(); + UENUM = MOUSE_ENDPOINT; + timeout = UDFNUML + 50; + while (1) { + // are we ready to transmit? + if (UEINTX & (1<