aboutsummaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorZach White <skullydazed@gmail.com>2021-08-16 15:33:30 -0700
committerGitHub <noreply@github.com>2021-08-16 23:33:30 +0100
commit8d9bfdc25437bb401985ba93b47edae2126e7fac (patch)
tree2439e7adde0bafd6af9a403c92c1a89384c3f6ea /data
parentfac717c11cfa27780f2f9098383673784174141a (diff)
downloadqmk_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.json56
-rw-r--r--data/mappings/info_rules.json14
-rw-r--r--data/schemas/keyboard.jsonschema220
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": {