[Core] Rework PS/2 driver selection (#17892)
* [Core] Rework PS/2 driver selection Enabling and selecting PS/2 driver was using old approach, so it was reworked to current approach, inspired by Serial and WS2812 driver selections. * [Keyboard] Update keyboards using PS/2 to use new PS/2 driver selection * [Docs] Update PS/2 documentation to use new PS/2 driver selection * Fix indentation * [Core] Add PS2 to data driver * Fix oversight in property name Co-authored-by: Drashna Jaelre <drashna@live.com> * Add PS/2 pins to data driven mappings Co-authored-by: Drashna Jaelre <drashna@live.com>
This commit is contained in:
parent
ba7030d216
commit
0237ff0c62
26 changed files with 93 additions and 61 deletions
|
@ -805,31 +805,25 @@ ifeq ($(strip $(PS2_MOUSE_ENABLE)), yes)
|
|||
OPT_DEFS += -DMOUSE_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(PS2_USE_BUSYWAIT)), yes)
|
||||
PS2_ENABLE := yes
|
||||
SRC += ps2_busywait.c
|
||||
SRC += ps2_io.c
|
||||
OPT_DEFS += -DPS2_USE_BUSYWAIT
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(PS2_USE_INT)), yes)
|
||||
PS2_ENABLE := yes
|
||||
SRC += ps2_interrupt.c
|
||||
SRC += ps2_io.c
|
||||
OPT_DEFS += -DPS2_USE_INT
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(PS2_USE_USART)), yes)
|
||||
PS2_ENABLE := yes
|
||||
SRC += ps2_usart.c
|
||||
SRC += ps2_io.c
|
||||
OPT_DEFS += -DPS2_USE_USART
|
||||
endif
|
||||
VALID_PS2_DRIVER_TYPES := busywait interrupt usart vendor
|
||||
|
||||
PS2_DRIVER ?= busywait
|
||||
ifeq ($(strip $(PS2_ENABLE)), yes)
|
||||
ifeq ($(filter $(PS2_DRIVER),$(VALID_PS2_DRIVER_TYPES)),)
|
||||
$(call CATASTROPHIC_ERROR,Invalid PS2_DRIVER,PS2_DRIVER="$(PS2_DRIVER)" is not a valid PS/2 driver)
|
||||
endif
|
||||
|
||||
OPT_DEFS += -DPS2_DRIVER_$(strip $(shell echo $(PS2_DRIVER) | tr '[:lower:]' '[:upper:]'))
|
||||
|
||||
COMMON_VPATH += $(DRIVER_PATH)/ps2
|
||||
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/ps2
|
||||
OPT_DEFS += -DPS2_ENABLE
|
||||
|
||||
ifneq ($(strip $(PS2_DRIVER)), vendor)
|
||||
SRC += ps2_io.c
|
||||
endif
|
||||
|
||||
SRC += ps2_$(strip $(PS2_DRIVER)).c
|
||||
endif
|
||||
|
||||
JOYSTICK_ENABLE ?= no
|
||||
|
|
|
@ -66,7 +66,9 @@ OTHER_OPTION_NAMES = \
|
|||
KEYLOGGER_ENABLE \
|
||||
LCD_BACKLIGHT_ENABLE \
|
||||
MACROS_ENABLED \
|
||||
PS2_ENABLE \
|
||||
PS2_MOUSE_ENABLE \
|
||||
PS2_DRIVER \
|
||||
RAW_ENABLE \
|
||||
SWAP_HANDS_ENABLE \
|
||||
RING_BUFFERED_6KRO_REPORT_ENABLE \
|
||||
|
|
|
@ -52,6 +52,8 @@
|
|||
"ONESHOT_TAP_TOGGLE": {"info_key": "oneshot.tap_toggle", "value_type": "int"},
|
||||
"PERMISSIVE_HOLD": {"info_key": "tapping.permissive_hold", "value_type": "bool"},
|
||||
"PERMISSIVE_HOLD_PER_KEY": {"info_key": "tapping.permissive_hold_per_key", "value_type": "bool"},
|
||||
"PS2_CLOCK_PIN": {"info_key": "ps2.clock_pin"},
|
||||
"PS2_DATA_PIN": {"info_key": "ps2.data_pin"},
|
||||
"RETRO_TAPPING": {"info_key": "tapping.retro", "value_type": "bool"},
|
||||
"RETRO_TAPPING_PER_KEY": {"info_key": "tapping.retro_per_key", "value_type": "bool"},
|
||||
"RGB_DI_PIN": {"info_key": "rgblight.pin"},
|
||||
|
|
|
@ -32,6 +32,9 @@
|
|||
"WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"},
|
||||
"STENO_ENABLE": {"info_key": "stenography.enabled", "value_type": "bool"},
|
||||
"STENO_PROTOCOL": {"info_key": "stenography.protocol"},
|
||||
"PS2_ENABLE": {"info_key": "ps2.enabled", "value_type": "bool"},
|
||||
"PS2_MOUSE_ENABLE": {"info_key": "ps2.mouse_enabled", "value_type": "bool"},
|
||||
"PS2_DRIVER": {"info_key": "ps2.driver"},
|
||||
|
||||
# Items we want flagged in lint
|
||||
"CTPC": {"info_key": "_deprecated.ctpc", "deprecated": true, "replace_with": "CONVERT_TO=proton_c"},
|
||||
|
|
|
@ -390,6 +390,20 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"ps2": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"enabled": {"type": "boolean"},
|
||||
"mouse_enabled": {"type": "boolean"},
|
||||
"clock_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
|
||||
"data_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
|
||||
"driver": {
|
||||
"type": "string",
|
||||
"enum": ["busywait", "interrupt", "usart", "vendor"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
|
|
|
@ -32,13 +32,14 @@ In rules.mk:
|
|||
|
||||
```make
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_BUSYWAIT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = busywait
|
||||
```
|
||||
|
||||
In your keyboard config.h:
|
||||
|
||||
```c
|
||||
#ifdef PS2_USE_BUSYWAIT
|
||||
#ifdef PS2_DRIVER_BUSYWAIT
|
||||
# define PS2_CLOCK_PIN D1
|
||||
# define PS2_DATA_PIN D2
|
||||
#endif
|
||||
|
@ -52,13 +53,14 @@ In rules.mk:
|
|||
|
||||
```make
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_INT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = interrupt
|
||||
```
|
||||
|
||||
In your keyboard config.h:
|
||||
|
||||
```c
|
||||
#ifdef PS2_USE_INT
|
||||
#ifdef PS2_DRIVER_INTERRUPT
|
||||
#define PS2_CLOCK_PIN D2
|
||||
#define PS2_DATA_PIN D5
|
||||
|
||||
|
@ -84,7 +86,8 @@ In rules.mk:
|
|||
|
||||
```
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_INT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = interrupt
|
||||
```
|
||||
|
||||
In your keyboard config.h:
|
||||
|
@ -108,13 +111,14 @@ In rules.mk:
|
|||
|
||||
```make
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_USART = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = usart
|
||||
```
|
||||
|
||||
In your keyboard config.h:
|
||||
|
||||
```c
|
||||
#ifdef PS2_USE_USART
|
||||
#ifdef PS2_DRIVER_USART
|
||||
#define PS2_CLOCK_PIN D5
|
||||
#define PS2_DATA_PIN D2
|
||||
|
||||
|
|
|
@ -36,13 +36,14 @@ rules.mk で:
|
|||
|
||||
```makefile
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_BUSYWAIT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = busywait
|
||||
```
|
||||
|
||||
キーボードの config.h で:
|
||||
|
||||
```c
|
||||
#ifdef PS2_USE_BUSYWAIT
|
||||
#ifdef PS2_DRIVER_BUSYWAIT
|
||||
# define PS2_CLOCK_PIN D1
|
||||
# define PS2_DATA_PIN D2
|
||||
#endif
|
||||
|
@ -56,13 +57,14 @@ rules.mk で:
|
|||
|
||||
```makefile
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_INT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = interrupt
|
||||
```
|
||||
|
||||
キーボードの config.h で:
|
||||
|
||||
```c
|
||||
#ifdef PS2_USE_INT
|
||||
#ifdef PS2_DRIVER_INTERRUPT
|
||||
#define PS2_CLOCK_PIN D2
|
||||
#define PS2_DATA_PIN D5
|
||||
|
||||
|
@ -88,14 +90,14 @@ rules.mk で:
|
|||
|
||||
```makefile
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_USART = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = usart
|
||||
```
|
||||
|
||||
キーボードの config.h で:
|
||||
|
||||
```c
|
||||
#ifdef PS2_USE_USART
|
||||
#ifdef PS2_USE_USART
|
||||
#ifdef PS2_DRIVER_USART
|
||||
#define PS2_CLOCK_PIN D5
|
||||
#define PS2_DATA_PIN D2
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#define SPLIT_OLED_ENABLE
|
||||
#endif
|
||||
|
||||
#ifdef PS2_USE_INT
|
||||
#ifdef PS2_DRIVER_INTERRUPT
|
||||
#define PS2_CLOCK_PIN E6
|
||||
#define PS2_DATA_PIN D7
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
OLED_DRIVER = SSD1306
|
||||
|
||||
PS2_USE_INT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = interrupt
|
||||
|
|
|
@ -36,7 +36,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
/*
|
||||
* PS/2 USART configuration for ATMega32U4
|
||||
*/
|
||||
#ifdef PS2_USE_USART
|
||||
#ifdef PS2_DRIVER_USART
|
||||
/* XCK for clock line */
|
||||
#define PS2_CLOCK_PIN D5
|
||||
#define PS2_DATA_PIN D2
|
||||
|
@ -77,7 +77,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
/*
|
||||
* PS/2 Interrupt configuration
|
||||
*/
|
||||
#ifdef PS2_USE_INT
|
||||
#ifdef PS2_DRIVER_INTERRUPT
|
||||
/* uses INT1 for clock line(ATMega32U4) */
|
||||
#define PS2_CLOCK_PIN D1
|
||||
#define PS2_DATA_PIN D0
|
||||
|
@ -99,7 +99,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
/*
|
||||
* PS/2 Busywait configuration
|
||||
*/
|
||||
#ifdef PS2_USE_BUSYWAIT
|
||||
#ifdef PS2_DRIVER_BUSYWAIT
|
||||
#define PS2_CLOCK_PIN D1
|
||||
#define PS2_DATA_PIN D0
|
||||
#endif
|
||||
|
|
|
@ -7,4 +7,5 @@ NKRO_ENABLE = yes
|
|||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
PS2_USE_USART = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = usart
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
|
||||
|
@ -14,8 +14,9 @@ AUDIO_ENABLE = no # Audio output on port C6
|
|||
UNICODE_ENABLE = no # Unicode
|
||||
UNICODEMAP_ENABLE = yes
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
PS2_USE_USART = yes
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = usart
|
||||
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
|
|
@ -16,7 +16,8 @@ NKRO_ENABLE = yes # Enable N-Key Rollover
|
|||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
PS2_USE_USART = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = usart
|
||||
CUSTOM_MATRIX = yes
|
||||
|
||||
SRC = matrix.c led.c
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#ifdef PS2_USE_USART
|
||||
#ifdef PS2_DRIVER_USART
|
||||
#define PS2_CLOCK_PIN D5
|
||||
#define PS2_DATA_PIN D2
|
||||
|
||||
|
@ -51,7 +51,7 @@
|
|||
#define PS2_USART_ERROR (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
|
||||
#define PS2_USART_RX_VECT USART1_RX_vect
|
||||
#define PS2_MOUSE_ENABLE_SCROLLING
|
||||
#define PS2_MOUSE_INIT_DELAY 1000
|
||||
#define PS2_MOUSE_INIT_DELAY 1000
|
||||
#define PS2_MOUSE_BTN_LEFT 0
|
||||
#define PS2_MOUSE_BTN_RIGHT 1
|
||||
#define PS2_MOUSE_BTN_MIDDLE 2
|
||||
|
|
|
@ -2,4 +2,5 @@
|
|||
# change yes to no to disable
|
||||
#
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_USART = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = usart
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#define MATRIX_ROWS 8
|
||||
#define MATRIX_COLS 23
|
||||
|
||||
#ifdef PS2_USE_USART
|
||||
#ifdef PS2_DRIVER_USART
|
||||
#define PS2_CLOCK_PIN D5
|
||||
#define PS2_DATA_PIN D2
|
||||
|
||||
|
|
|
@ -17,4 +17,5 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
|||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_USART = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = usart
|
||||
|
|
|
@ -210,13 +210,13 @@ enum led_sequence {
|
|||
#endif
|
||||
|
||||
/* PS/2 mouse */
|
||||
#ifdef PS2_USE_BUSYWAIT
|
||||
#ifdef PS2_DRIVER_BUSYWAIT
|
||||
# define PS2_CLOCK_PIN D3
|
||||
# define PS2_DATA_PIN D2
|
||||
#endif
|
||||
|
||||
/* PS/2 mouse interrupt version */
|
||||
#ifdef PS2_USE_INT
|
||||
#ifdef PS2_DRIVER_INTERRUPT
|
||||
/* uses INT1 for clock line(ATMega32U4) */
|
||||
# define PS2_CLOCK_PIN D3
|
||||
# define PS2_DATA_PIN D2
|
||||
|
@ -237,7 +237,7 @@ enum led_sequence {
|
|||
#endif
|
||||
|
||||
/* PS/2 mouse USART version */
|
||||
#ifdef PS2_USE_USART
|
||||
#ifdef PS2_DRIVER_USART
|
||||
/* XCK for clock line and RXD for data line */
|
||||
#define PS2_CLOCK_PIN D5
|
||||
#define PS2_DATA_PIN D2
|
||||
|
|
|
@ -9,4 +9,5 @@ AUDIO_ENABLE = no # Audio output
|
|||
UNICODEMAP_ENABLE = yes
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_INT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = interrupt
|
||||
|
|
|
@ -17,7 +17,8 @@ UNICODE_ENABLE = no # Unicode
|
|||
UNICODEMAP_ENABLE = yes
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_INT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = interrupt
|
||||
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
|
|
@ -20,7 +20,8 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
|||
AUDIO_ENABLE = no # Audio output
|
||||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_INT = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = interrupt
|
||||
CUSTOM_MATRIX = yes
|
||||
BLUETOOTH_ENABLE = yes
|
||||
BLUETOOTH_DRIVER = BluefruitLE
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#define MATRIX_ROWS 1
|
||||
#define MATRIX_COLS 3
|
||||
|
||||
#ifdef PS2_USE_USART
|
||||
#ifdef PS2_DRIVER_USART
|
||||
#define PS2_CLOCK_PIN D5
|
||||
#define PS2_DATA_PIN D2
|
||||
|
||||
|
|
|
@ -17,4 +17,5 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
|||
AUDIO_ENABLE = no # Audio output
|
||||
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_USART = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = usart
|
||||
|
|
|
@ -26,7 +26,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#define BOOTMAGIC_LITE_COLUMN 6
|
||||
|
||||
/* Only required if you add in a trackpoint hardware to the pcb */
|
||||
#ifdef PS2_USE_USART
|
||||
#ifdef PS2_DRIVER_USART
|
||||
#define PS2_CLOCK_PIN D5
|
||||
#define PS2_DATA_PIN D2
|
||||
|
||||
|
@ -63,7 +63,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#define PS2_USART_RX_VECT USART1_RX_vect
|
||||
#endif
|
||||
|
||||
#ifdef PS2_USE_INT
|
||||
#ifdef PS2_DRIVER_INTERRUPT
|
||||
#define PS2_CLOCK_PIN D2
|
||||
#define PS2_DATA_PIN D5
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#define COMBO_COUNT 3
|
||||
#define COMBO_TERM 35
|
||||
|
||||
#ifdef PS2_USE_USART
|
||||
#ifdef PS2_DRIVER_USART
|
||||
#define PS2_CLOCK_PIN D5
|
||||
#define PS2_DATA_PIN D2
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
ifeq ($(strip $(TRACKPOINT)), yes)
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_USART = yes
|
||||
PS2_ENABLE = yes
|
||||
PS2_DRIVER = usart
|
||||
OPT_DEFS += -DUSART
|
||||
endif
|
||||
|
||||
|
|
Loading…
Reference in a new issue