From 0e1aeaa2cb1fc2f80cf52c146f0cd812229bc5a3 Mon Sep 17 00:00:00 2001 From: tmk Date: Mon, 23 May 2022 18:02:56 +0900 Subject: [PATCH] serial_mouse: Add initial files --- converter/serial_mouse/Makefile | 92 ++++++++++++++++++++ converter/serial_mouse/README | 60 +++++++++++++ converter/serial_mouse/config.h | 121 ++++++++++++++++++++++++++ converter/serial_mouse/serial_mouse.c | 21 +++++ 4 files changed, 294 insertions(+) create mode 100644 converter/serial_mouse/Makefile create mode 100644 converter/serial_mouse/README create mode 100644 converter/serial_mouse/config.h create mode 100644 converter/serial_mouse/serial_mouse.c diff --git a/converter/serial_mouse/Makefile b/converter/serial_mouse/Makefile new file mode 100644 index 00000000..b547e3ec --- /dev/null +++ b/converter/serial_mouse/Makefile @@ -0,0 +1,92 @@ +# Target file name (without extension). +TARGET = serial_mouse + +# Directory common source filess exist +TMK_DIR = ../../tmk_core + +# Directory keyboard dependent files exist +TARGET_DIR = . + +# project specific files +SRC = serial_mouse.c + +CONFIG_H = config.h + + +# MCU name +#MCU = at90usb1287 +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +#OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +#MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +#EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = yes # Console for debug(+400) +#COMMAND_ENABLE = yes # Commands for debug and configuration +#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend +#NKRO_ENABLE = yes # USB Nkey Rollover + + +NO_KEYBOARD = yes # disable keyboard +SERIAL_MOUSE_MICROSOFT_ENABLE = yes +SERIAL_MOUSE_USE_UART = yes +#SERIAL_MOUSE_USE_SOFT = yes # Not work atm + + + +# Search Path +VPATH += $(TARGET_DIR) +VPATH += $(TMK_DIR) + +include $(TMK_DIR)/common.mk +include $(TMK_DIR)/protocol.mk +include $(TMK_DIR)/protocol/lufa.mk +include $(TMK_DIR)/rules.mk diff --git a/converter/serial_mouse/README b/converter/serial_mouse/README new file mode 100644 index 00000000..7db5503e --- /dev/null +++ b/converter/serial_mouse/README @@ -0,0 +1,60 @@ +Serial Mouse Converter +====================== +This makes old serial mouse into modern USB one. + +Tested by: +- Microsoft green-eyed mouse +- DELL mouse can work with DTR only. + + +Pinout +------ + + DE-9 DB-25 DTE DCE Description + ---------------------------------------------------------------- + 2 3 RXD TXD data from mouse + 3 2 TXD RXD used by mouse as power source? + 4 20 DTR DSR used by mouse as power source + 5 7 GND GND + 7 4 RTS CTS used by mouse as power source + *DTE=Converter, DCE=Mouse + + + +## RS-232 Driver +Microsoft mouse seems to need higher voltage for power source. +SP3232E outputs only +-6V at charge pump output and didn't work. +ADM232A works for both Microsoft and DELL. + +Microsoft green-eyed mouse requires both while DELL mouse can work with DTR only. + + +## Wiring +Mouse RXD, TXD, DTR and RTS should be wired to RS-232 driver. +Wire up RS-232 driver charge pump output V+ to DTR and RTS for power source purpose. + +Connect Mouse TXD to AVR PD2(RXD) *through* RS-232 driver for mouse data. + + + +UART Setting +------------ +defined in config.h. + +### Microsoft serial mouse +1200 baud, 7-bit data, no parity, 1-bit stop, lsb-first + +### MouseSystems +1200 baud, 8-bit data, no parity, 1-bit stop, lsb-first(Not tested) + + +Resources +--------- +Get power out of PC RS-232 port: +https://www.epanorama.net/circuits/rspower.html + +Microsoft serial mouse: +https://web.archive.org/web/20130307230349/www.kryslix.com/nsfaq/Q.12.html + +Serial Mice Protocols: +https://roborooter.com/post/serial-mice/ diff --git a/converter/serial_mouse/config.h b/converter/serial_mouse/config.h new file mode 100644 index 00000000..d4f20cb8 --- /dev/null +++ b/converter/serial_mouse/config.h @@ -0,0 +1,121 @@ +/* +Copyright 2022 Jun Wako +*/ + +#ifndef CONFIG_H +#define CONFIG_H + + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x31CE +#define DEVICE_VER 0x0001 +#define MANUFACTURER TMK +#define PRODUCT Serial Mouse +#define DESCRIPTION TMK keyboard firmware + +/* key matrix size */ +#define MATRIX_ROWS 1 +#define MATRIX_COLS 1 + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + + + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + + + +/* + * Hardware Serial(UART) + * Add protocol/serial_uart.c to SRC in Makefile + */ +#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega32U2__) + #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<>8); /* baud rate */ \ + UCSR1B |= (1< +*/ + +#include +#include +#include "debug.h" +#include "serial_mouse.h" + + +void hook_early_init(void) +{ + debug_enable = true; + debug_mouse = true; + serial_mouse_init(); +} + +void hook_main_loop(void) +{ + serial_mouse_task(); +}