serial_mouse: Add initial files
This commit is contained in:
parent
4923f09377
commit
0e1aeaa2cb
4 changed files with 294 additions and 0 deletions
92
converter/serial_mouse/Makefile
Normal file
92
converter/serial_mouse/Makefile
Normal file
|
|
@ -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
|
||||||
60
converter/serial_mouse/README
Normal file
60
converter/serial_mouse/README
Normal file
|
|
@ -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/
|
||||||
121
converter/serial_mouse/config.h
Normal file
121
converter/serial_mouse/config.h
Normal file
|
|
@ -0,0 +1,121 @@
|
||||||
|
/*
|
||||||
|
Copyright 2022 Jun Wako <wakojun@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#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<<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 */ \
|
||||||
|
UCSR1B |= (0<<TXCIE1) | (1<<TXEN1); /* TX interrupt, TX: enable */ \
|
||||||
|
UCSR1C = (1<<UCSZ11) | (0<<UCSZ10) | /* data: 7-bit */ \
|
||||||
|
(0<<UPM11) | (0<<UPM10); /* parity: none(00), even(01), odd(11) */ \
|
||||||
|
DDRD &= ~(1<<2); PORTD |= (1<<2); /* Pull-up RXD pin */ \
|
||||||
|
sei(); \
|
||||||
|
} while(0)
|
||||||
|
#else
|
||||||
|
#error "USART configuration is needed."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Software Serial
|
||||||
|
* Add protocol/serial_soft.c to SRC in Makefile
|
||||||
|
*/
|
||||||
|
#define SERIAL_SOFT_BAUD 1200
|
||||||
|
#define SERIAL_SOFT_PARITY_NONE
|
||||||
|
#define SERIAL_SOFT_BIT_ORDER_MSB
|
||||||
|
//#define SERIAL_SOFT_LOGIC_NEGATIVE
|
||||||
|
#define SERIAL_SOFT_DATA_7BIT
|
||||||
|
#define SERIAL_SOFT_DEBUG
|
||||||
|
/* RXD Port */
|
||||||
|
#define SERIAL_SOFT_RXD_DDR DDRD
|
||||||
|
#define SERIAL_SOFT_RXD_PORT PORTD
|
||||||
|
#define SERIAL_SOFT_RXD_PIN PIND
|
||||||
|
#define SERIAL_SOFT_RXD_BIT 2
|
||||||
|
#define SERIAL_SOFT_RXD_READ() (SERIAL_SOFT_RXD_PIN&(1<<SERIAL_SOFT_RXD_BIT))
|
||||||
|
/* RXD Interupt */
|
||||||
|
#define SERIAL_SOFT_RXD_VECT INT2_vect
|
||||||
|
#define SERIAL_SOFT_RXD_INIT() do { \
|
||||||
|
/* pin configuration: input with pull-up */ \
|
||||||
|
SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \
|
||||||
|
SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \
|
||||||
|
/* enable interrupt: INT2(Positive:falling edge, Negative:rising edge) */ \
|
||||||
|
EICRA |= ((1<<ISC21)|(1<<ISC20)); \
|
||||||
|
/* EICRA |= ((1<<ISC21)|(0<<ISC20)); \ */ \
|
||||||
|
EIMSK |= (1<<INT2); \
|
||||||
|
sei(); \
|
||||||
|
} while (0)
|
||||||
|
#define SERIAL_SOFT_RXD_INT_ENTER()
|
||||||
|
#define SERIAL_SOFT_RXD_INT_EXIT() do { \
|
||||||
|
/* clear interrupt flag */ \
|
||||||
|
EIFR = (1<<INTF2); \
|
||||||
|
} while (0)
|
||||||
|
/* TXD Port */
|
||||||
|
#define SERIAL_SOFT_TXD_DDR DDRD
|
||||||
|
#define SERIAL_SOFT_TXD_PORT PORTD
|
||||||
|
#define SERIAL_SOFT_TXD_PIN PIND
|
||||||
|
#define SERIAL_SOFT_TXD_BIT 3
|
||||||
|
#define SERIAL_SOFT_TXD_HI() do { SERIAL_SOFT_TXD_PORT |= (1<<SERIAL_SOFT_TXD_BIT); } while (0)
|
||||||
|
#define SERIAL_SOFT_TXD_LO() do { SERIAL_SOFT_TXD_PORT &= ~(1<<SERIAL_SOFT_TXD_BIT); } while (0)
|
||||||
|
#define SERIAL_SOFT_TXD_INIT() do { \
|
||||||
|
/* pin configuration: output */ \
|
||||||
|
SERIAL_SOFT_TXD_DDR |= (1<<SERIAL_SOFT_TXD_BIT); \
|
||||||
|
/* idle */ \
|
||||||
|
SERIAL_SOFT_TXD_ON(); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
21
converter/serial_mouse/serial_mouse.c
Normal file
21
converter/serial_mouse/serial_mouse.c
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
Copyright 2022 Jun Wako <wakojun@gmail.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#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();
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue