* can be enabled by defining Makefile macro SERIAL_MOUSE_MICROSOFT_ENABLE or SERIAL_MOUSE_MOUSESYSTEMS_ENABLE. * Serial implementation can be chosen via SERIAL_MOUSE_USE_SOFT and SERIAL_MOUSE_USE_UART macros * UART configuration still has to be done in config.h: I added working clauses for both mouse protocols to ps2_usb's config.hledmap
@@ -91,6 +91,19 @@ PS2_USE_USART = yes # uses hardware USART engine for PS/2 signal receive(recomen | |||
#PS2_USE_INT = yes # uses external interrupt for falling edge of PS/2 clock pin | |||
#PS2_USE_BUSYWAIT = yes # uses primitive reference code | |||
# Serial Mouse Options | |||
# You can choose a mouse protocol and the implementation of | |||
# the underlying serial connection. | |||
# | |||
#SERIAL_MOUSE_MICROSOFT_ENABLE = yes # Enable support for Microsoft-compatible mice | |||
#SERIAL_MOUSE_MOUSESYSTEMS_ENABLE = yes # Enable support for Mousesystems-compatible mice | |||
#SERIAL_MOUSE_USE_UART = yes # use hardware UART for serial connection | |||
#SERIAL_MOUSE_USE_SOFT = yes # use software serial implementation | |||
# Optional serial mouse driver features | |||
# Support scrolling while holding the middle mouse button | |||
# (currently only supported for Mousesystems mice): | |||
#OPT_DEFS += -DSERIAL_MOUSE_CENTER_SCROLL | |||
# Optimize size but this may cause error "relocation truncated to fit" | |||
#EXTRALDFLAGS = -Wl,--relax |
@@ -170,4 +170,42 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
#endif | |||
#endif | |||
#ifdef SERIAL_MOUSE_MICROSOFT | |||
/* | |||
* Serial(USART) configuration (for Microsoft serial mice) | |||
* asynchronous, positive logic, 1200baud, bit order: LSB first | |||
* 1-start bit, 7-data bit, no parity, 1-stop bit | |||
*/ | |||
#define SERIAL_UART_BAUD 1200 | |||
#define SERIAL_UART_DATA UDR1 | |||
#define SERIAL_UART_UBRR ((F_CPU/(16UL*SERIAL_UART_BAUD))-1) | |||
#define SERIAL_UART_RXD_VECT USART1_RX_vect | |||
#define SERIAL_UART_TXD_READY (UCSR1A&(1<<UDRE1)) | |||
#define SERIAL_UART_INIT() do { \ | |||
UBRR1L = (uint8_t) SERIAL_UART_UBRR; /* baud rate */ \ | |||
UBRR1H = (uint8_t) (SERIAL_UART_UBRR>>8); /* baud rate */ \ | |||
UCSR1B |= (1<<RXCIE1) | (1<<RXEN1); /* RX interrupt, RX: enable */ \ | |||
UCSR1C = (1<<UCSZ11) | (0<<UCSZ10); /* no parity, 1 stop bit, 7-bit characters */ \ | |||
sei(); \ | |||
} while(0) | |||
#elif defined(SERIAL_MOUSE_MOUSESYSTEMS) | |||
/* | |||
* Serial(USART) configuration (for Mousesystems serial mice) | |||
* asynchronous, positive logic, 1200baud, bit order: LSB first | |||
* 1-start bit, 8-data bit, no parity, 1-stop bit | |||
*/ | |||
#define SERIAL_UART_BAUD 1200 | |||
#define SERIAL_UART_DATA UDR1 | |||
#define SERIAL_UART_UBRR ((F_CPU/(16UL*SERIAL_UART_BAUD))-1) | |||
#define SERIAL_UART_RXD_VECT USART1_RX_vect | |||
#define SERIAL_UART_TXD_READY (UCSR1A&(1<<UDRE1)) | |||
#define SERIAL_UART_INIT() do { \ | |||
UBRR1L = (uint8_t) SERIAL_UART_UBRR; /* baud rate */ \ | |||
UBRR1H = (uint8_t) (SERIAL_UART_UBRR>>8); /* baud rate */ \ | |||
UCSR1B |= (1<<RXCIE1) | (1<<RXEN1); /* RX interrupt, RX: enable */ \ | |||
UCSR1C = (1<<UCSZ11) | (1<<UCSZ10); /* no parity, 1 stop bit, 8-bit characters */ \ | |||
sei(); \ | |||
} while(0) | |||
#endif | |||
#endif |
@@ -23,5 +23,25 @@ ifdef PS2_USE_USART | |||
endif | |||
ifdef SERIAL_MOUSE_MICROSOFT_ENABLE | |||
SRC += $(PROTOCOL_DIR)/serial_mouse_microsoft.c | |||
OPT_DEFS += -DSERIAL_MOUSE_ENABLE -DSERIAL_MOUSE_MICROSOFT \ | |||
-DMOUSE_ENABLE | |||
endif | |||
ifdef SERIAL_MOUSE_MOUSESYSTEMS_ENABLE | |||
SRC += $(PROTOCOL_DIR)/serial_mouse_mousesystems.c | |||
OPT_DEFS += -DSERIAL_MOUSE_ENABLE -DSERIAL_MOUSE_MOUSESYSTEMS \ | |||
-DMOUSE_ENABLE | |||
endif | |||
ifdef SERIAL_MOUSE_USE_SOFT | |||
SRC += $(PROTOCOL_DIR)/serial_soft.c | |||
endif | |||
ifdef SERIAL_MOUSE_USE_UART | |||
SRC += $(PROTOCOL_DIR)/serial_uart.c | |||
endif | |||
# Search Path | |||
VPATH += $(TOP_DIR)/protocol |
@@ -49,6 +49,10 @@ | |||
#endif | |||
#include "suspend.h" | |||
#ifdef SERIAL_MOUSE_ENABLE | |||
#include "serial_mouse.h" | |||
#endif | |||
#include "descriptor.h" | |||
#include "lufa.h" | |||
@@ -571,6 +575,10 @@ int main(void) | |||
sleep_led_init(); | |||
#endif | |||
#ifdef SERIAL_MOUSE_ENABLE | |||
serial_mouse_init(); | |||
#endif | |||
print("Keyboard start.\n"); | |||
while (1) { | |||
while (USB_DeviceState == DEVICE_STATE_Suspended) { | |||
@@ -582,6 +590,10 @@ int main(void) | |||
keyboard_task(); | |||
#ifdef SERIAL_MOUSE_ENABLE | |||
serial_mouse_task(); | |||
#endif | |||
#if !defined(INTERRUPT_CONTROL_ENDPOINT) | |||
USB_USBTask(); | |||
#endif |
@@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
#include "print.h" | |||
#include "debug.h" | |||
#define SERIAL_MOUSE_CENTER_SCROLL | |||
//#define SERIAL_MOUSE_CENTER_SCROLL | |||
static void print_usb_data(const report_mouse_t *report); | |||