diff options
author | Zach White <skullydazed@gmail.com> | 2021-08-16 15:33:30 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-16 23:33:30 +0100 |
commit | 8d9bfdc25437bb401985ba93b47edae2126e7fac (patch) | |
tree | 2439e7adde0bafd6af9a403c92c1a89384c3f6ea /data | |
parent | fac717c11cfa27780f2f9098383673784174141a (diff) | |
download | qmk_firmware-8d9bfdc25437bb401985ba93b47edae2126e7fac.tar.gz qmk_firmware-8d9bfdc25437bb401985ba93b47edae2126e7fac.zip |
Add a lot more data to info.json (#13366)
* add some split data to info.json
* add tags
* add half of config_options.md to info.json
* add support for designating master split
* sort out split transport and primary
* fix bad data in UNUSED_PINS
* fixup custom transport
* wip
* allow for setting split right half keyboard matrix
* add SPLIT_USB_DETECT
* minor cleanup
* fix an erroneous message
* rework split.usb_detect
* adding missing rgblight vars to info.json
* add mouse_key to info.json
* add all remaining options from docs/config_options.md
* fix audio voices
* qmk info: Change text output to use dotted notation
* tweak layout output
* resolve alias names
* break out some functions to make flake8 happy
* add a field for bootloader instructions
* qmk generate-info-json: add a write-to-file argument
Adds an argument that instructs qmk generate-info-json to write the output to a file instead of just to the terminal.
* -arg_only, +action
Because it was never my intention that one would have to specify a value for the argument that enables writing the file.
* Bring qmk generate-info-json inline with other generate commands
* pytest fixup
* fix esca/getawayvan
* fix data driven errors for bpiphany converters
* features.force_nkro -> usb.force_nkro
* split.primary->split.main
* fix esca/getawayvan_f042
* fix the bpiphany converters for real
* fix bpiphany/tiger_lily
* Apply suggestions from code review
Co-authored-by: Nick Brassel <nick@tzarc.org>
* fix generate-api errors
* fix matrix pin extraction for split boards
* fix ploopyco/trackball_nano/rev1_001
Co-authored-by: James Young <18669334+noroadsleft@users.noreply.github.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
Diffstat (limited to 'data')
-rw-r--r-- | data/mappings/info_config.json | 56 | ||||
-rw-r--r-- | data/mappings/info_rules.json | 14 | ||||
-rw-r--r-- | data/schemas/keyboard.jsonschema | 220 |
3 files changed, 280 insertions, 10 deletions
diff --git a/data/mappings/info_config.json b/data/mappings/info_config.json index b949b1332..18477f912 100644 --- a/data/mappings/info_config.json +++ b/data/mappings/info_config.json | |||
@@ -1,21 +1,46 @@ | |||
1 | # This file maps keys between `config.h` and `info.json`. It is used by QMK | 1 | # This file maps keys between `config.h` and `info.json`. It is used by QMK |
2 | # to correctly and consistently map back and forth between the two systems. | 2 | # to correctly and consistently map back and forth between the two systems. |
3 | { | 3 | { |
4 | # Format: | 4 | # Format: |
5 | # <config.h key>: {"info_key": <info.json key>, ["value_type": <value_type>], ["to_json": <true/false>], ["to_c": <true/false>]} | 5 | # <config.h key>: {"info_key": <info.json key>, ["value_type": <value_type>], ["to_json": <true/false>], ["to_c": <true/false>]} |
6 | # value_type: one of "array", "array.int", "int", "hex", "list", "mapping" | 6 | # value_type: one of "array", "array.int", "bool", "int", "hex", "list", "mapping" |
7 | # to_json: Default `true`. Set to `false` to exclude this mapping from info.json | 7 | # to_json: Default `true`. Set to `false` to exclude this mapping from info.json |
8 | # to_c: Default `true`. Set to `false` to exclude this mapping from config.h | 8 | # to_c: Default `true`. Set to `false` to exclude this mapping from config.h |
9 | # warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places | 9 | # warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places |
10 | "DEBOUNCE": {"info_key": "debounce", "value_type": "int"} | 10 | "AUDIO_VOICES": {"info_key": "audio.voices", "value_type": "bool"}, |
11 | "BACKLIGHT_BREATHING": {"info_key": "backlight.breathing", "value_type": "bool"}, | ||
12 | "BREATHING_PERIOD": {"info_key": "backlight.breathing_period", "value_type": "int"}, | ||
13 | "BACKLIGHT_PIN": {"info_key": "backlight.pin"}, | ||
14 | "COMBO_COUNT": {"info_key": "combo.count", "value_type": "int"}, | ||
15 | "COMBO_TERM": {"info_key": "combo.term", "value_type": "int"}, | ||
16 | "DEBOUNCE": {"info_key": "debounce", "value_type": "int"}, | ||
11 | "DEVICE_VER": {"info_key": "usb.device_ver", "value_type": "hex"}, | 17 | "DEVICE_VER": {"info_key": "usb.device_ver", "value_type": "hex"}, |
12 | "DESCRIPTION": {"info_key": "keyboard_folder", "to_json": false}, | 18 | "DESCRIPTION": {"info_key": "keyboard_folder", "to_json": false}, |
13 | "DIODE_DIRECTION": {"info_key": "diode_direction"}, | 19 | "DIODE_DIRECTION": {"info_key": "diode_direction"}, |
20 | "FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "bool"}, | ||
21 | "IGNORE_MOD_TAP_INTERRUPT": {"info_key": "tapping.ignore_mod_tap_interrupt", "value_type": "bool"}, | ||
22 | "IGNORE_MOD_TAP_INTERRUPT_PER_KEY": {"info_key": "tapping.ignore_mod_tap_interrupt_per_key", "value_type": "bool"}, | ||
14 | "LAYOUTS": {"info_key": "layout_aliases", "value_type": "mapping"}, | 23 | "LAYOUTS": {"info_key": "layout_aliases", "value_type": "mapping"}, |
24 | "LEADER_PER_KEY_TIMING": {"info_key": "leader_key.timing", "value_type": "bool"}, | ||
25 | "LEADER_KEY_STRICT_KEY_PROCESSING": {"info_key": "leader_key.strict_processing", "value_type": "bool"}, | ||
26 | "LEADER_TIMEOUT": {"info_key": "leader_key.timeout", "value_type": "int"}, | ||
15 | "LED_CAPS_LOCK_PIN": {"info_key": "indicators.caps_lock"}, | 27 | "LED_CAPS_LOCK_PIN": {"info_key": "indicators.caps_lock"}, |
16 | "LED_NUM_LOCK_PIN": {"info_key": "indicators.num_lock"}, | 28 | "LED_NUM_LOCK_PIN": {"info_key": "indicators.num_lock"}, |
17 | "LED_SCROLL_LOCK_PIN": {"info_key": "indicators.scroll_lock"}, | 29 | "LED_SCROLL_LOCK_PIN": {"info_key": "indicators.scroll_lock"}, |
18 | "MANUFACTURER": {"info_key": "manufacturer"}, | 30 | "MANUFACTURER": {"info_key": "manufacturer"}, |
31 | "MATRIX_HAS_GHOST": {"info_key": "matrix_pins.ghost", "value_type": "bool"}, | ||
32 | "MATRIX_IO_DELAY": {"info_key": "matrix_pins.io_delay", "value_type": "int"}, | ||
33 | "MOUSEKEY_DELAY": {"info_key": "mousekey.delay", "value_type": "int"}, | ||
34 | "MOUSEKEY_INTERVAL": {"info_key": "mousekey.interval", "value_type": "int"}, | ||
35 | "MOUSEKEY_MAX_SPEED": {"info_key": "mousekey.max_speed", "value_type": "int"}, | ||
36 | "MOUSEKEY_TIME_TO_MAX": {"info_key": "mousekey.time_to_max", "value_type": "int"}, | ||
37 | "MOUSEKEY_WHEEL_DELAY": {"info_key": "mousekey.wheel_delay", "value_type": "int"}, | ||
38 | "ONESHOT_TIMEOUT": {"info_key": "oneshot.timeout", "value_type": "int"}, | ||
39 | "ONESHOT_TAP_TOGGLE": {"info_key": "oneshot.tap_toggle", "value_type": "int"}, | ||
40 | "PERMISSIVE_HOLD": {"info_key": "tapping.permissive_hold", "value_type": "bool"}, | ||
41 | "PERMISSIVE_HOLD_PER_KEY": {"info_key": "tapping.permissive_hold_per_key", "value_type": "bool"}, | ||
42 | "RETRO_TAPPING": {"info_key": "tapping.retro", "value_type": "bool"}, | ||
43 | "RETRO_TAPPING_PER_KEY": {"info_key": "tapping.retro_per_key", "value_type": "bool"}, | ||
19 | "RGB_DI_PIN": {"info_key": "rgblight.pin"}, | 44 | "RGB_DI_PIN": {"info_key": "rgblight.pin"}, |
20 | "RGBLED_NUM": {"info_key": "rgblight.led_count", "value_type": "int"}, | 45 | "RGBLED_NUM": {"info_key": "rgblight.led_count", "value_type": "int"}, |
21 | "RGBLED_SPLIT": {"info_key": "rgblight.split_count", "value_type": "array.int"}, | 46 | "RGBLED_SPLIT": {"info_key": "rgblight.split_count", "value_type": "array.int"}, |
@@ -30,17 +55,40 @@ | |||
30 | "RGBLIGHT_EFFECT_SNAKE": {"info_key": "rgblight.animations.snake", "value_type": "bool"}, | 55 | "RGBLIGHT_EFFECT_SNAKE": {"info_key": "rgblight.animations.snake", "value_type": "bool"}, |
31 | "RGBLIGHT_EFFECT_STATIC_GRADIENT": {"info_key": "rgblight.animations.static_gradient", "value_type": "bool"}, | 56 | "RGBLIGHT_EFFECT_STATIC_GRADIENT": {"info_key": "rgblight.animations.static_gradient", "value_type": "bool"}, |
32 | "RGBLIGHT_EFFECT_TWINKLE": {"info_key": "rgblight.animations.twinkle"}, | 57 | "RGBLIGHT_EFFECT_TWINKLE": {"info_key": "rgblight.animations.twinkle"}, |
58 | "RGBLIGHT_LAYER_BLINK": {"info_key": "rgblight.layers.blink", "value_type": "bool"}, | ||
59 | "RGBLIGHT_LAYERS": {"info_key": "rgblight.layers.enabled", "value_type": "bool"}, | ||
60 | "RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF": {"info_key": "rgblight.layers.override_rgb", "value_type": "bool"}, | ||
33 | "RGBLIGHT_LIMIT_VAL": {"info_key": "rgblight.max_brightness", "value_type": "int"}, | 61 | "RGBLIGHT_LIMIT_VAL": {"info_key": "rgblight.max_brightness", "value_type": "int"}, |
62 | "RGBLIGHT_MAX_LAYERS": {"info_key": "rgblight.layers.max", "value_type": "int"}, | ||
34 | "RGBLIGHT_HUE_STEP": {"info_key": "rgblight.hue_steps", "value_type": "int"}, | 63 | "RGBLIGHT_HUE_STEP": {"info_key": "rgblight.hue_steps", "value_type": "int"}, |
35 | "RGBLIGHT_SAT_STEP": {"info_key": "rgblight.saturation_steps", "value_type": "int"}, | 64 | "RGBLIGHT_SAT_STEP": {"info_key": "rgblight.saturation_steps", "value_type": "int"}, |
36 | "RGBLIGHT_VAL_STEP": {"info_key": "rgblight.brightness_steps", "value_type": "int"}, | 65 | "RGBLIGHT_VAL_STEP": {"info_key": "rgblight.brightness_steps", "value_type": "int"}, |
37 | "RGBLIGHT_SLEEP": {"info_key": "rgblight.sleep", "value_type": "bool"}, | 66 | "RGBLIGHT_SLEEP": {"info_key": "rgblight.sleep", "value_type": "bool"}, |
38 | "RGBLIGHT_SPLIT": {"info_key": "rgblight.split", "value_type": "bool"}, | 67 | "RGBLIGHT_SPLIT": {"info_key": "rgblight.split", "value_type": "bool"}, |
68 | "RGBW": {"info_key": "rgblight.rgbw", "value_type": "bool"}, | ||
39 | "PRODUCT": {"info_key": "keyboard_folder", "to_json": false}, | 69 | "PRODUCT": {"info_key": "keyboard_folder", "to_json": false}, |
40 | "PRODUCT_ID": {"info_key": "usb.pid", "value_type": "hex"}, | 70 | "PRODUCT_ID": {"info_key": "usb.pid", "value_type": "hex"}, |
41 | "VENDOR_ID": {"info_key": "usb.vid", "value_type": "hex"}, | 71 | "VENDOR_ID": {"info_key": "usb.vid", "value_type": "hex"}, |
42 | "QMK_ESC_OUTPUT": {"info_key": "qmk_lufa_bootloader.esc_output"}, | 72 | "QMK_ESC_OUTPUT": {"info_key": "qmk_lufa_bootloader.esc_output"}, |
43 | "QMK_ESC_INPUT": {"info_key": "qmk_lufa_bootloader.esc_input"}, | 73 | "QMK_ESC_INPUT": {"info_key": "qmk_lufa_bootloader.esc_input"}, |
74 | "QMK_KEYS_PER_SCAN": {"info_key": "qmk.keys_per_scan", "value_type": "int"}, | ||
44 | "QMK_LED": {"info_key": "qmk_lufa_bootloader.led"}, | 75 | "QMK_LED": {"info_key": "qmk_lufa_bootloader.led"}, |
45 | "QMK_SPEAKER": {"info_key": "qmk_lufa_bootloader.speaker"} | 76 | "QMK_SPEAKER": {"info_key": "qmk_lufa_bootloader.speaker"}, |
77 | "SPLIT_MODS_ENABLE": {"info_key": "split.transport.sync_modifiers", "value_type": "bool"}, | ||
78 | "SPLIT_TRANSPORT_MIRROR": {"info_key": "split.transport.sync_matrix_state", "value_type": "bool"}, | ||
79 | "SPLIT_USB_DETECT": {"info_key": "split.usb_detect.enabled", "value_type": "bool"}, | ||
80 | "SPLIT_USB_TIMEOUT": {"info_key": "split.usb_detect.timeout", "value_type": "int"}, | ||
81 | "SPLIT_USB_TIMEOUT_POLL": {"info_key": "split.usb_detect.polling_interval", "value_type": "int"}, | ||
82 | "SOFT_SERIAL_PIN": {"info_key": "split.soft_serial_pin"}, | ||
83 | "SOFT_SERIAL_SPEED": {"info_key": "split.soft_serial_speed"}, | ||
84 | "TAP_CODE_DELAY": {"info_key": "qmk.tap_keycode_delay", "value_type": "int"}, | ||
85 | "TAP_HOLD_CAPS_DELAY": {"info_key": "qmk.tap_capslock_delay", "value_type": "int"}, | ||
86 | "TAPPING_FORCE_HOLD": {"info_key": "tapping.force_hold", "value_type": "bool"}, | ||
87 | "TAPPING_FORCE_HOLD_PER_KEY": {"info_key": "tapping.force_hold_per_key", "value_type": "bool"}, | ||
88 | "TAPPING_TERM": {"info_key": "tapping.term", "value_type": "int"}, | ||
89 | "TAPPING_TERM_PER_KEY": {"info_key": "tapping.term_per_key", "value_type": "bool"}, | ||
90 | "TAPPING_TOGGLE": {"info_key": "tapping.toggle", "value_type": "int"}, | ||
91 | "USB_MAX_POWER_CONSUMPTION": {"info_key": "usb.max_power", "value_type": "int"}, | ||
92 | "USB_POLLING_INTERVAL_MS": {"info_key": "usb.polling_interval", "value_type": "int"}, | ||
93 | "USB_SUSPEND_WAKEUP_DELAY": {"info_key": "usb.suspend_wakeup_delay", "value_type": "int"}, | ||
46 | } | 94 | } |
diff --git a/data/mappings/info_rules.json b/data/mappings/info_rules.json index 97f772c4d..aea67e04c 100644 --- a/data/mappings/info_rules.json +++ b/data/mappings/info_rules.json | |||
@@ -1,15 +1,25 @@ | |||
1 | # This file maps keys between `rules.mk` and `info.json`. It is used by QMK | 1 | # This file maps keys between `rules.mk` and `info.json`. It is used by QMK |
2 | # to correctly and consistently map back and forth between the two systems. | 2 | # to correctly and consistently map back and forth between the two systems. |
3 | { | 3 | { |
4 | # Format: | 4 | # Format: |
5 | # <rules.mk key>: {"info_key": <info.json key>, ["value_type": <value_type>], ["to_json": <true/false>], ["to_c": <true/false>]} | 5 | # <rules.mk key>: {"info_key": <info.json key>, ["value_type": <value_type>], ["to_json": <true/false>], ["to_c": <true/false>]} |
6 | # value_type: one of "array", "array.int", "int", "list", "hex", "mapping" | 6 | # value_type: one of "array", "array.int", "bool", "int", "list", "hex", "mapping" |
7 | # to_json: Default `true`. Set to `false` to exclude this mapping from info.json | 7 | # to_json: Default `true`. Set to `false` to exclude this mapping from info.json |
8 | # to_c: Default `true`. Set to `false` to exclude this mapping from rules.mk | 8 | # to_c: Default `true`. Set to `false` to exclude this mapping from rules.mk |
9 | # warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places | 9 | # warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places |
10 | "BOARD": {"info_key": "board"}, | 10 | "BOARD": {"info_key": "board"}, |
11 | "BOOTLOADER": {"info_key": "bootloader", "warn_duplicate": false}, | 11 | "BOOTLOADER": {"info_key": "bootloader", "warn_duplicate": false}, |
12 | "BLUETOOTH": {"info_key": "bluetooth.driver"}, | ||
13 | "FIRMWARE_FORMAT": {"info_key": "build.firmware_format"}, | ||
14 | "KEYBOARD_SHARED_EP": {"info_key": "usb.shared_endpoint.keyboard", "value_type": "bool"}, | ||
15 | "MOUSE_SHARED_EP": {"info_key": "usb.shared_endpoint.mouse", "value_type": "bool"}, | ||
12 | "LAYOUTS": {"info_key": "community_layouts", "value_type": "list"}, | 16 | "LAYOUTS": {"info_key": "community_layouts", "value_type": "list"}, |
13 | "LED_MATRIX_DRIVER": {"info_key": "led_matrix.driver"}, | 17 | "LED_MATRIX_DRIVER": {"info_key": "led_matrix.driver"}, |
18 | "LTO_ENABLE": {"info_key": "build.lto", "value_type": "bool"}, | ||
14 | "MCU": {"info_key": "processor", "warn_duplicate": false}, | 19 | "MCU": {"info_key": "processor", "warn_duplicate": false}, |
20 | "MOUSEKEY_ENABLE": {"info_key": "mouse_key.enabled", "value_type": "bool"}, | ||
21 | "NO_USB_STARTUP_CHECK": {"info_key": "usb.no_startup_check", "value_type": "bool"}, | ||
22 | "SPLIT_KEYBOARD": {"info_key": "split.enabled", "value_type": "bool"}, | ||
23 | "SPLIT_TRANSPORT": {"info_key": "split.transport.protocol", "value_type": "str", "to_c": false}, | ||
24 | "WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"} | ||
15 | } | 25 | } |
diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index 3a3fa4b73..78c9a8d36 100644 --- a/data/schemas/keyboard.jsonschema +++ b/data/schemas/keyboard.jsonschema | |||
@@ -15,6 +15,40 @@ | |||
15 | "type": "string", | 15 | "type": "string", |
16 | "enum": ["cortex-m0", "cortex-m0plus", "cortex-m3", "cortex-m4", "MKL26Z64", "MK20DX128", "MK20DX256", "MK66F18", "STM32F042", "STM32F072", "STM32F103", "STM32F303", "STM32F401", "STM32F407", "STM32F411", "STM32F446", "STM32G431", "STM32G474", "STM32L412", "STM32L422", "STM32L433", "STM32L443", "atmega16u2", "atmega32u2", "atmega16u4", "atmega32u4", "at90usb162", "at90usb646", "at90usb647", "at90usb1286", "at90usb1287", "atmega32a", "atmega328p", "atmega328", "attiny85", "unknown"] | 16 | "enum": ["cortex-m0", "cortex-m0plus", "cortex-m3", "cortex-m4", "MKL26Z64", "MK20DX128", "MK20DX256", "MK66F18", "STM32F042", "STM32F072", "STM32F103", "STM32F303", "STM32F401", "STM32F407", "STM32F411", "STM32F446", "STM32G431", "STM32G474", "STM32L412", "STM32L422", "STM32L433", "STM32L443", "atmega16u2", "atmega32u2", "atmega16u4", "atmega32u4", "at90usb162", "at90usb646", "at90usb647", "at90usb1286", "at90usb1287", "atmega32a", "atmega328p", "atmega328", "attiny85", "unknown"] |
17 | }, | 17 | }, |
18 | "audio": { | ||
19 | "type": "object", | ||
20 | "additionalProperties": false, | ||
21 | "properties": { | ||
22 | "pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, | ||
23 | "voices": {"type": "boolean"} | ||
24 | } | ||
25 | }, | ||
26 | "backlight": { | ||
27 | "type": "object", | ||
28 | "additionalProperties": false, | ||
29 | "properties": { | ||
30 | "breathing": {"type": "boolean"}, | ||
31 | "breathing_period": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, | ||
32 | "levels": { | ||
33 | "type": "number", | ||
34 | "min": 1, | ||
35 | "max": 31, | ||
36 | "multipleOf": 1 | ||
37 | }, | ||
38 | "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"} | ||
39 | } | ||
40 | }, | ||
41 | "bluetooth": { | ||
42 | "type": "object", | ||
43 | "additionalProperties": false, | ||
44 | "properties": { | ||
45 | "driver": { | ||
46 | "type": "string", | ||
47 | "enum": ["AdafruitBLE", "RN42"] | ||
48 | }, | ||
49 | "lto": {"type": "boolean"}, | ||
50 | } | ||
51 | }, | ||
18 | "board": { | 52 | "board": { |
19 | "type": "string", | 53 | "type": "string", |
20 | "minLength": 2, | 54 | "minLength": 2, |
@@ -22,13 +56,39 @@ | |||
22 | }, | 56 | }, |
23 | "bootloader": { | 57 | "bootloader": { |
24 | "type": "string", | 58 | "type": "string", |
25 | "enum": ["atmel-dfu", "bootloadHID", "caterina", "halfkay", "kiibohd", "lufa-dfu", "lufa-ms", "micronucleus", "qmk-dfu", "qmk-hid", "stm32-dfu", "stm32duino", "unknown", "USBasp", "tinyuf2"] | 59 | "enum": ["atmel-dfu", "bootloadHID", "caterina", "halfkay", "kiibohd", "lufa-dfu", "lufa-ms", "micronucleus", "qmk-dfu", "qmk-hid", "stm32-dfu", "stm32duino", "unknown", "USBasp", "tinyuf2"], |
60 | }, | ||
61 | "bootloader_instructions": { | ||
62 | "type": "string", | ||
63 | "description": "Instructions for putting the keyboard into a mode that allows for firmware flashing." | ||
64 | }, | ||
65 | "build": { | ||
66 | "type": "object", | ||
67 | "additionalProperties": false, | ||
68 | "properties": { | ||
69 | "debounce_type": { | ||
70 | "type": "string", | ||
71 | "enum": ["custom", "eager_pk", "eager_pr", "sym_defer_pk", "sym_eager_pk"] | ||
72 | }, | ||
73 | "firmware_format": { | ||
74 | "type": "string", | ||
75 | "enum": ["bin", "hex", "uf2"] | ||
76 | }, | ||
77 | "lto": {"type": "boolean"}, | ||
78 | } | ||
26 | }, | 79 | }, |
27 | "diode_direction": { | 80 | "diode_direction": { |
28 | "type": "string", | 81 | "type": "string", |
29 | "enum": ["COL2ROW", "ROW2COL"] | 82 | "enum": ["COL2ROW", "ROW2COL"] |
30 | }, | 83 | }, |
31 | "debounce": {"$ref": "qmk.definitions.v1#/unsigned_int"}, | 84 | "debounce": {"$ref": "qmk.definitions.v1#/unsigned_int"}, |
85 | "combo": { | ||
86 | "type": "object", | ||
87 | "properties": { | ||
88 | "count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, | ||
89 | "term": {"$ref": "qmk.definitions.v1#/unsigned_int"} | ||
90 | } | ||
91 | }, | ||
32 | "community_layouts": { | 92 | "community_layouts": { |
33 | "type": "array", | 93 | "type": "array", |
34 | "items": {"$ref": "qmk.definitions.v1#/filename"} | 94 | "items": {"$ref": "qmk.definitions.v1#/filename"} |
@@ -90,16 +150,47 @@ | |||
90 | } | 150 | } |
91 | } | 151 | } |
92 | }, | 152 | }, |
153 | "leader_key": { | ||
154 | "type": "object", | ||
155 | "properties": { | ||
156 | "timing": {"type": "boolean"}, | ||
157 | "strict_processing": {"type": "boolean"}, | ||
158 | "timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} | ||
159 | } | ||
160 | }, | ||
93 | "matrix_pins": { | 161 | "matrix_pins": { |
94 | "type": "object", | 162 | "type": "object", |
95 | "additionalProperties": false, | 163 | "additionalProperties": false, |
96 | "properties": { | 164 | "properties": { |
165 | "custom": {"type": "boolean"}, | ||
166 | "custom_lite": {"type": "boolean"}, | ||
167 | "ghost": {"type": "boolean"}, | ||
168 | "io_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}, | ||
97 | "direct": { | 169 | "direct": { |
98 | "type": "array", | 170 | "type": "array", |
99 | "items": {$ref": "qmk.definitions.v1#/mcu_pin_array"} | 171 | "items": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} |
100 | }, | 172 | }, |
101 | "cols": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, | 173 | "cols": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, |
102 | "rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} | 174 | "rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, |
175 | "unused": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} | ||
176 | } | ||
177 | }, | ||
178 | "mouse_key": { | ||
179 | "type": "object", | ||
180 | "properties": { | ||
181 | "enabled": {"type": "boolean"}, | ||
182 | "delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} | ||
183 | "interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} | ||
184 | "max_speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} | ||
185 | "time_to_max": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} | ||
186 | "wheel_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} | ||
187 | } | ||
188 | }, | ||
189 | "oneshot": { | ||
190 | "type": "object", | ||
191 | "properties": { | ||
192 | "tap_toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"}, | ||
193 | "timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} | ||
103 | } | 194 | } |
104 | }, | 195 | }, |
105 | "rgblight": { | 196 | "rgblight": { |
@@ -114,9 +205,25 @@ | |||
114 | }, | 205 | }, |
115 | "brightness_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, | 206 | "brightness_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, |
116 | "hue_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, | 207 | "hue_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, |
208 | "layers": { | ||
209 | "type": "object", | ||
210 | "additionalProperties": false, | ||
211 | "properties": { | ||
212 | "blink": {"type": "boolean"}, | ||
213 | "enabled": {"type": "boolean"}, | ||
214 | "max": { | ||
215 | "type": "number", | ||
216 | "min": 1, | ||
217 | "max": 32, | ||
218 | "multipleOf": 1 | ||
219 | }, | ||
220 | "override_rgb": {"type": "boolean"} | ||
221 | } | ||
222 | }, | ||
117 | "led_count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, | 223 | "led_count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, |
118 | "max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, | 224 | "max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, |
119 | "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, | 225 | "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, |
226 | "rgbw": {"type": "boolean"}, | ||
120 | "saturation_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, | 227 | "saturation_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, |
121 | "sleep": {"type": "boolean"}, | 228 | "sleep": {"type": "boolean"}, |
122 | "split": {"type": "boolean"}, | 229 | "split": {"type": "boolean"}, |
@@ -128,13 +235,118 @@ | |||
128 | } | 235 | } |
129 | } | 236 | } |
130 | }, | 237 | }, |
238 | "split": { | ||
239 | "type": "object", | ||
240 | "additionalProperties": false, | ||
241 | "properties": { | ||
242 | "enabled": {"type": "boolean"}, | ||
243 | "matrix_grid": { | ||
244 | "type": "array", | ||
245 | "items": {"$ref": "qmk.definitions.v1#/mcu_pin"} | ||
246 | }, | ||
247 | "matrix_pins": { | ||
248 | "type": "object", | ||
249 | "additionalProperties": false, | ||
250 | "properties": { | ||
251 | "right": { | ||
252 | "type": "object", | ||
253 | "additionalProperties": false, | ||
254 | "properties": { | ||
255 | "direct": { | ||
256 | "type": "array", | ||
257 | "items": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} | ||
258 | }, | ||
259 | "cols": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, | ||
260 | "rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, | ||
261 | "unused": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} | ||
262 | } | ||
263 | } | ||
264 | } | ||
265 | }, | ||
266 | "main": { | ||
267 | "type": "string", | ||
268 | "enum": ["eeprom", "left", "matrix_grid", "pin", "right"] | ||
269 | }, | ||
270 | "soft_serial_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, | ||
271 | "soft_serial_speed": { | ||
272 | "type": "number", | ||
273 | "min": 0, | ||
274 | "max": 5, | ||
275 | "multipleOf": 1 | ||
276 | }, | ||
277 | "transport": { | ||
278 | "type": "object", | ||
279 | "additionalProperties": false, | ||
280 | "properties": { | ||
281 | "protocol": { | ||
282 | "type": "string", | ||
283 | "enum": ["custom", "i2c", "serial", "serial_usart"] | ||
284 | }, | ||
285 | "sync_matrix_state": {"type": "boolean"}, | ||
286 | "sync_modifiers": {"type": "boolean"} | ||
287 | } | ||
288 | }, | ||
289 | "usb_detect": { | ||
290 | "type": "object", | ||
291 | "additionalProperties": false, | ||
292 | "properties": { | ||
293 | "enabled": {"type": "boolean"}, | ||
294 | "polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int"}, | ||
295 | "timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} | ||
296 | } | ||
297 | } | ||
298 | } | ||
299 | }, | ||
300 | "tags": { | ||
301 | "type": "array", | ||
302 | "items": {"type": "string"} | ||
303 | }, | ||
304 | "tapping": { | ||
305 | "type": "object", | ||
306 | "properties": { | ||
307 | "force_hold": {"type": "boolean"}, | ||
308 | "force_hold_per_key": {"type": "boolean"}, | ||
309 | "ignore_mod_tap_interrupt": {"type": "boolean"}, | ||
310 | "ignore_mod_tap_interrupt_per_key": {"type": "boolean"}, | ||
311 | "permissive_hold": {"type": "boolean"}, | ||
312 | "permissive_hold_per_key": {"type": "boolean"}, | ||
313 | "retro": {"type": "boolean"}, | ||
314 | "retro_per_key": {"type": "boolean"}, | ||
315 | "term": {"$ref": "qmk.definitions.v1#/unsigned_int"}, | ||
316 | "term_per_key": {"type": "boolean"}, | ||
317 | "toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"}, | ||
318 | } | ||
319 | }, | ||
131 | "usb": { | 320 | "usb": { |
132 | "type": "object", | 321 | "type": "object", |
133 | "additionalProperties": false, | 322 | "additionalProperties": false, |
134 | "properties": { | 323 | "properties": { |
135 | "device_ver": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, | 324 | "device_ver": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, |
325 | "force_nkro": {"type": "boolean"}, | ||
136 | "pid": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, | 326 | "pid": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, |
137 | "vid": {"$ref": "qmk.definitions.v1#/hex_number_4d"} | 327 | "vid": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, |
328 | "max_power": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, | ||
329 | "no_startup_check": {"type": "boolean"}, | ||
330 | "polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, | ||
331 | "shared_endpoint": { | ||
332 | "type": "object", | ||
333 | "additionalProperties": false, | ||
334 | "properties": { | ||
335 | "keyboard": {"type": "boolean"}, | ||
336 | "mouse": {"type": "boolean"} | ||
337 | } | ||
338 | }, | ||
339 | "suspend_wakeup_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, | ||
340 | "wait_for": {"type": "boolean"}, | ||
341 | } | ||
342 | }, | ||
343 | "qmk": { | ||
344 | "type": "object", | ||
345 | "additionalProperties": false, | ||
346 | "properties": { | ||
347 | "keys_per_scan": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, | ||
348 | "tap_keycode_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, | ||
349 | "tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, | ||
138 | } | 350 | } |
139 | }, | 351 | }, |
140 | "qmk_lufa_bootloader": { | 352 | "qmk_lufa_bootloader": { |