~ruther/qmk_firmware

0237ff0c62d4278df3c0c93f5f85f84c1a0ed519 — Marek Kraus 3 years ago ba7030d
[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>
M builddefs/common_features.mk => builddefs/common_features.mk +13 -19
@@ 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
VALID_PS2_DRIVER_TYPES := busywait interrupt usart vendor

ifeq ($(strip $(PS2_USE_INT)), yes)
    PS2_ENABLE := yes
    SRC += ps2_interrupt.c
    SRC += ps2_io.c
    OPT_DEFS += -DPS2_USE_INT
endif
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

ifeq ($(strip $(PS2_USE_USART)), yes)
    PS2_ENABLE := yes
    SRC += ps2_usart.c
    SRC += ps2_io.c
    OPT_DEFS += -DPS2_USE_USART
endif
    OPT_DEFS += -DPS2_DRIVER_$(strip $(shell echo $(PS2_DRIVER) | tr '[:lower:]' '[:upper:]'))

ifeq ($(strip $(PS2_ENABLE)), yes)
    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

M builddefs/show_options.mk => builddefs/show_options.mk +2 -0
@@ 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 \

M data/mappings/info_config.json => data/mappings/info_config.json +2 -0
@@ 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"},

M data/mappings/info_rules.json => data/mappings/info_rules.json +3 -0
@@ 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"},

M data/schemas/keyboard.jsonschema => data/schemas/keyboard.jsonschema +14 -0
@@ 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,

M docs/feature_ps2_mouse.md => docs/feature_ps2_mouse.md +11 -7
@@ 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


M docs/ja/feature_ps2_mouse.md => docs/ja/feature_ps2_mouse.md +9 -7
@@ 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


M keyboards/buzzard/rev1/config.h => keyboards/buzzard/rev1/config.h +1 -1
@@ 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


M keyboards/buzzard/rev1/rules.mk => keyboards/buzzard/rev1/rules.mk +2 -1
@@ 1,3 1,4 @@
OLED_DRIVER = SSD1306

PS2_USE_INT = yes
PS2_ENABLE = yes
PS2_DRIVER = interrupt

M keyboards/converter/ibm_terminal/config.h => keyboards/converter/ibm_terminal/config.h +3 -3
@@ 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

M keyboards/converter/ibm_terminal/keymaps/default/rules.mk => keyboards/converter/ibm_terminal/keymaps/default/rules.mk +2 -1
@@ 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

M keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk => keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk +4 -3
@@ 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

M keyboards/converter/ibm_terminal/rules.mk => keyboards/converter/ibm_terminal/rules.mk +2 -1
@@ 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

M keyboards/evyd13/gh80_3700/keymaps/ps2/config.h => keyboards/evyd13/gh80_3700/keymaps/ps2/config.h +2 -2
@@ 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

M keyboards/evyd13/gh80_3700/keymaps/ps2/rules.mk => keyboards/evyd13/gh80_3700/keymaps/ps2/rules.mk +2 -1
@@ 2,4 2,5 @@
#   change yes to no to disable
#
PS2_MOUSE_ENABLE = yes
PS2_USE_USART = yes
PS2_ENABLE = yes
PS2_DRIVER = usart

M keyboards/handwired/108key_trackpoint/config.h => keyboards/handwired/108key_trackpoint/config.h +1 -1
@@ 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


M keyboards/handwired/108key_trackpoint/rules.mk => keyboards/handwired/108key_trackpoint/rules.mk +2 -1
@@ 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

M keyboards/handwired/promethium/config.h => keyboards/handwired/promethium/config.h +3 -3
@@ 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

M keyboards/handwired/promethium/keymaps/default/rules.mk => keyboards/handwired/promethium/keymaps/default/rules.mk +2 -1
@@ 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

M keyboards/handwired/promethium/keymaps/priyadi/rules.mk => keyboards/handwired/promethium/keymaps/priyadi/rules.mk +2 -1
@@ 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

M keyboards/handwired/promethium/rules.mk => keyboards/handwired/promethium/rules.mk +2 -1
@@ 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

M keyboards/handwired/trackpoint/config.h => keyboards/handwired/trackpoint/config.h +1 -1
@@ 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


M keyboards/handwired/trackpoint/rules.mk => keyboards/handwired/trackpoint/rules.mk +2 -1
@@ 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

M keyboards/kapcave/paladin64/config.h => keyboards/kapcave/paladin64/config.h +2 -2
@@ 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


M keyboards/pierce/keymaps/durken1/config.h => keyboards/pierce/keymaps/durken1/config.h +1 -1
@@ 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


M keyboards/pierce/post_rules.mk => keyboards/pierce/post_rules.mk +2 -1
@@ 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