forked from mirrors/qmk_firmware
integrated serial mouse drivers as a feature into the firmware architecture
* 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.h
This commit is contained in:
parent
388fe60c67
commit
7dde35d4f7
5 changed files with 84 additions and 1 deletions
|
@ -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_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
|
||||||
|
|
|
@ -170,4 +170,42 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#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
|
||||||
|
|
20
protocol.mk
20
protocol.mk
|
@ -23,5 +23,25 @@ ifdef PS2_USE_USART
|
||||||
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
|
||||||
|
|
|
@ -49,6 +49,10 @@
|
||||||
#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"
|
||||||
|
|
||||||
|
@ -571,6 +575,10 @@ int main(void)
|
||||||
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) {
|
||||||
|
@ -582,6 +590,10 @@ int main(void)
|
||||||
|
|
||||||
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
|
||||||
|
|
|
@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue