]> git.donarmstrong.com Git - tmk_firmware.git/commitdiff
integrated serial mouse drivers as a feature into the firmware architecture
authorRobin Haberkorn <robin.haberkorn@googlemail.com>
Sun, 27 Jul 2014 15:07:26 +0000 (17:07 +0200)
committerRobin Haberkorn <robin.haberkorn@googlemail.com>
Sun, 27 Jul 2014 15:38:31 +0000 (17:38 +0200)
 * 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

converter/ps2_usb/Makefile
converter/ps2_usb/config.h
protocol.mk
protocol/lufa/lufa.c
protocol/serial_mouse_mousesystems.c

index 1dd23c157e1f32ee652b1d2f9e357d7071a45a06..f20039c6f07c9f70b8f2a896166700f227b63cd8 100644 (file)
@@ -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
index 889f0c38ebab1520ae64a30b022e754023f1f5b4..5b644002dcff2007641ee0cb222e972cdc947b83 100644 (file)
@@ -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
index 7f561e62d60dc0a5dc7c49ca0cb9a9fee25d781e..de7014e866386c281774cc59e55a2442ecffd7c7 100644 (file)
@@ -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
index 16a602df13f76d7bd4485ac273af01fbc90dd50a..58201e5c986e8cf042c4fb968cb6e1ba24395b53 100644 (file)
 #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
index ec708c911f910b5706c9de855ed8db78bb6b29c0..68b2b5b3593081a3a7888a3815d3877c75ab7164 100644 (file)
@@ -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);