Add pointing device support to data driven config (#18215)

Co-authored-by: Joel Challis <git@zvecr.com>
This commit is contained in:
Drashna Jaelre 2022-11-13 08:05:46 -08:00 committed by GitHub
parent 8812872794
commit d3073ef494
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 96 additions and 0 deletions

View file

@ -11,6 +11,10 @@
// invalid: Default `false`. Set to `true` to generate errors when a value exists
// replace_with: use with a key marked deprecated or invalid to designate a replacement
"AUDIO_VOICES": {"info_key": "audio.voices", "value_type": "bool"},
"AUTO_MOUSE_DEFAULT_LAYER": {"info_key": "pointing_device.auto_mouse.default_layer"},
"AUTO_MOUSE_TIME": {"info_key": "pointing_device.auto_mouse.time"},
"AUTO_MOUSE_DELAY": {"info_key": "pointing_device.auto_mouse.delay"},
"AUTO_MOUSE_DEBOUNCE": {"info_key": "pointing_device.auto_mouse.debounce"},
"BACKLIGHT_BREATHING": {"info_key": "backlight.breathing", "value_type": "bool"},
"BREATHING_PERIOD": {"info_key": "backlight.breathing_period", "value_type": "int"},
"BACKLIGHT_LEVELS": {"info_key": "backlight.levels", "value_type": "int"},
@ -87,6 +91,19 @@
"RGB_MATRIX_VAL_STEP": {"info_key": "rgb_matrix.val_steps", "value_type": "int"},
"RGB_MATRIX_SPD_STEP": {"info_key": "rgb_matrix.speed_steps", "value_type": "int"},
"RGBW": {"info_key": "rgblight.rgbw", "value_type": "bool"},
"POINTING_DEVICE_AUTO_MOUSE_ENABLE": {"info_key": "pointing_device.auto_mouse.enabled"},
"POINTING_DEVICE_CS_PIN": {"info_key": "pointing_device.pins.cs"},
"POINTING_DEVICE_INVERT_X": {"info_key": "pointing_device.invert_x", "value_type": "bool"},
"POINTING_DEVICE_INVERT_X_RIGHT": {"info_key": "split.pointing_device.right.invert_x", "value_type": "bool"},
"POINTING_DEVICE_INVERT_Y": {"info_key": "pointing_device.invert_y", "value_type": "bool"},
"POINTING_DEVICE_INVERT_Y_RIGHT": {"info_key": "split.pointing_device.right.invert_y", "value_type": "bool"},
"POINTING_DEVICE_MOTION_PIN": {"info_key": "pointing_device.pins.motion"},
"POINTING_DEVICE_SDIO_PIN": {"info_key": "pointing_device.pins.sdio"},
"POINTING_DEVICE_SCLK_PIN": {"info_key": "pointing_device.pins.sclk"},
"POINTING_DEVICE_TASK_THROTTLE_MS": {"info_key": "pointing_device.throttle", "value_type": "int"},
"POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE": {"info_key": "pointing_device.gestures.cursor_glide", "value_type": "bool"},
"POINTING_DEVICE_GESTURES_SCROLL_ENABLE": {"info_key": "pointing_device.gestures.scroll", "value_type": "bool"},
"PRODUCT": {"info_key": "keyboard_name", "warn_duplicate": false, "value_type": "str"},
"PRODUCT_ID": {"info_key": "usb.pid", "value_type": "hex"},
"VENDOR_ID": {"info_key": "usb.vid", "value_type": "hex"},
@ -99,6 +116,7 @@
"SECURE_IDLE_TIMEOUT": {"info_key": "secure.idle_timeout", "value_type": "int"},
"SENDSTRING_BELL": {"info_key": "audio.macro_beep", "value_type": "bool"},
"SPLIT_MODS_ENABLE": {"info_key": "split.transport.sync_modifiers", "value_type": "bool"},
"SPLIT_POINTING_ENABLE": {"info_key": "split.transport.sync_pointing", "value_type": "bool"},
"SPLIT_TRANSPORT_MIRROR": {"info_key": "split.transport.sync_matrix_state", "value_type": "bool"},
"SPLIT_USB_DETECT": {"info_key": "split.usb_detect.enabled", "value_type": "bool"},
"SPLIT_USB_TIMEOUT": {"info_key": "split.usb_detect.timeout", "value_type": "int"},

View file

@ -36,6 +36,8 @@
"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"},
"POINTING_DEVICE_ENABLE": {"info_key": "pointing_device.enabled", "value_type": "bool"},
"POINTING_DEVICE_DRIVER": {"info_key": "pointing_device.driver"},
// Items we want flagged in lint
"CTPC": {"info_key": "_deprecated.ctpc", "deprecated": true, "replace_with": "CONVERT_TO=proton_c"},

View file

@ -363,6 +363,48 @@
}
}
},
"pointing_device": {
"type": "object",
"properties": {
"enabled": {"type": "boolean"},
"driver": {"type": "string"},
"auto_mouse": {
"type": "object",
"properties": {
"enabled": {"type": "boolean"},
"default_layer": {"type": "qmk.definitions.v1#/unsigned_int_8"},
"time": {"type": "qmk.definitions.v1#/unsigned_int"},
"delay": {"type": "qmk.definitions.v1#/unsigned_int"},
"debounce": {"type": "qmk.definitions.v1#/unsigned_int"}
}
}
"pins": {
"type": "object",
"additionalProperties": false,
"properties": {
"motion": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"cs": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"sdio": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"sclk": {"$ref": "qmk.definitions.v1#/mcu_pin"}
}
},
"throttle": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"invert_x": {"type": "boolean"},
"invert_y": {"type": "boolean"},
"gestures": {
"type": "object",
"properties": {
"cursor_glide": {"type": "boolean"},
"scroll": {"type": "boolean"}
}
},
"rotation": {
"type": "integer",
"minimum": 0,
"enum": [0, 90, 180, 270]
}
}
},
"rgb_matrix": {
"type": "object",
"properties": {
@ -544,6 +586,26 @@
"type": "string",
"enum": ["eeprom", "left", "matrix_grid", "pin", "right"]
},
"pointing_device": {
"right": {
"type": "object",
"additionalProperties": false,
"type": "object",
"properties": {
"side": {
"type": "string",
"enum": ["left", "right", "combined"]
},
"invert_x": {"type": "boolean"},
"invert_y": {"type": "boolean"},
"rotation": {
"type": "integer",
"minimum": 0,
"enum": [0, 90, 180, 270]
}
}
}
},
"soft_serial_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
"soft_serial_speed": {
"type": "integer",
@ -560,6 +622,7 @@
},
"sync_matrix_state": {"type": "boolean"},
"sync_modifiers": {"type": "boolean"},
"sync_pointing": {"type": "boolean"},
"watchdog": {"type": "boolean"},
"watchdog_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}

View file

@ -126,6 +126,13 @@ def generate_encoder_config(encoder_json, config_h_lines, postfix=''):
config_h_lines.append(generate_define(f'ENCODER_RESOLUTIONS{postfix}', f'{{ {", ".join(map(str,resolutions))} }}'))
def generate_pointing_device_config(pointing_device_json, config_h_lines, postfix=''):
rotation = pointing_device_json.get('rotation', 0)
generate_define(f'POINTING_DEVICE_ROTATION_{rotation}{postfix}')
def generate_split_config(kb_info_json, config_h_lines):
"""Generate the config.h lines for split boards."""
if 'primary' in kb_info_json['split']:
@ -156,6 +163,9 @@ def generate_split_config(kb_info_json, config_h_lines):
if 'right' in kb_info_json['split'].get('encoder', {}):
generate_encoder_config(kb_info_json['split']['encoder']['right'], config_h_lines, '_RIGHT')
if 'right' in kb_info_json['split'].get('pointing_device', {}):
generate_pointing_device_config(kb_info_json['split']['pointing_device']['right'], config_h_lines, '_RIGHT')
def generate_led_animations_config(led_feature_json, config_h_lines, prefix):
for animation in led_feature_json.get('animations', {}):
@ -207,5 +217,8 @@ def generate_config_h(cli):
if 'rgblight' in kb_info_json:
generate_led_animations_config(kb_info_json['rgblight'], config_h_lines, 'RGBLIGHT_EFFECT_')
if 'pointing_device' in kb_info_json:
generate_pointing_device_config(kb_info_json['pointing_device'], config_h_lines)
# Show the results
dump_lines(cli.args.output, config_h_lines, cli.args.quiet)