* 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
#PS2_USE_INT = yes # uses external interrupt for falling edge of PS/2 clock pin | #PS2_USE_INT = yes # uses external interrupt for falling edge of PS/2 clock pin | ||||
#PS2_USE_BUSYWAIT = yes # uses primitive reference code | #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" | # Optimize size but this may cause error "relocation truncated to fit" | ||||
#EXTRALDFLAGS = -Wl,--relax | #EXTRALDFLAGS = -Wl,--relax |
#endif | #endif | ||||
#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 | #endif |
endif | 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 | # Search Path | ||||
VPATH += $(TOP_DIR)/protocol | VPATH += $(TOP_DIR)/protocol |
#endif | #endif | ||||
#include "suspend.h" | #include "suspend.h" | ||||
#ifdef SERIAL_MOUSE_ENABLE | |||||
#include "serial_mouse.h" | |||||
#endif | |||||
#include "descriptor.h" | #include "descriptor.h" | ||||
#include "lufa.h" | #include "lufa.h" | ||||
sleep_led_init(); | sleep_led_init(); | ||||
#endif | #endif | ||||
#ifdef SERIAL_MOUSE_ENABLE | |||||
serial_mouse_init(); | |||||
#endif | |||||
print("Keyboard start.\n"); | print("Keyboard start.\n"); | ||||
while (1) { | while (1) { | ||||
while (USB_DeviceState == DEVICE_STATE_Suspended) { | while (USB_DeviceState == DEVICE_STATE_Suspended) { | ||||
keyboard_task(); | keyboard_task(); | ||||
#ifdef SERIAL_MOUSE_ENABLE | |||||
serial_mouse_task(); | |||||
#endif | |||||
#if !defined(INTERRUPT_CONTROL_ENDPOINT) | #if !defined(INTERRUPT_CONTROL_ENDPOINT) | ||||
USB_USBTask(); | USB_USBTask(); | ||||
#endif | #endif |
#include "print.h" | #include "print.h" | ||||
#include "debug.h" | #include "debug.h" | ||||
#define SERIAL_MOUSE_CENTER_SCROLL | |||||
//#define SERIAL_MOUSE_CENTER_SCROLL | |||||
static void print_usb_data(const report_mouse_t *report); | static void print_usb_data(const report_mouse_t *report); | ||||