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:
		| @@ -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 | ||||
|   | ||||
							
								
								
									
										20
									
								
								protocol.mk
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								protocol.mk
									
									
									
									
									
								
							| @@ -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); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user