diff options
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/api_keyboard.jsonschema | 44 | ||||
| -rw-r--r-- | data/schemas/definitions.jsonschema | 107 | ||||
| -rw-r--r-- | data/schemas/keyboard.jsonschema | 453 |
5 files changed, 432 insertions, 242 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/api_keyboard.jsonschema b/data/schemas/api_keyboard.jsonschema index d570ee999..d638658a1 100644 --- a/data/schemas/api_keyboard.jsonschema +++ b/data/schemas/api_keyboard.jsonschema | |||
| @@ -1,34 +1,22 @@ | |||
| 1 | { | 1 | { |
| 2 | "$id": "qmk.api.keyboard.v1", | ||
| 2 | "allOf": [ | 3 | "allOf": [ |
| 3 | { "$ref": "qmk.keyboard.v1" }, | 4 | {"$ref": "qmk.keyboard.v1"}, |
| 4 | { | 5 | { |
| 5 | "$id": "qmk.api.keyboard.v1", | 6 | "properties": { |
| 6 | "keymaps": { | 7 | "keymaps": { |
| 7 | "type": "string" | 8 | "type": "object", |
| 8 | }, | 9 | "properties": { |
| 9 | "parse_errors": { | 10 | "url": {"type": "string"} |
| 10 | "type": "array", | 11 | } |
| 11 | "items": { | 12 | |
| 12 | "type": "string" | 13 | }, |
| 13 | } | 14 | "parse_errors": {"$ref": "qmk.definitions.v1#/string_array"}, |
| 14 | }, | 15 | "parse_warnings": {"$ref": "qmk.definitions.v1#/string_array"}, |
| 15 | "parse_warnings": { | 16 | "processor_type": {"type": "string"}, |
| 16 | "type": "array", | 17 | "protocol": {"type": "string"}, |
| 17 | "items": { | 18 | "keyboard_folder": {"type": "string"}, |
| 18 | "type": "string" | 19 | "platform": {"type": "string"} |
| 19 | } | ||
| 20 | }, | ||
| 21 | "processor_type": { | ||
| 22 | "type": "string" | ||
| 23 | }, | ||
| 24 | "protocol": { | ||
| 25 | "type": "string" | ||
| 26 | }, | ||
| 27 | "keyboard_folder": { | ||
| 28 | "type": "string" | ||
| 29 | }, | ||
| 30 | "platform": { | ||
| 31 | "type": "string" | ||
| 32 | } | 20 | } |
| 33 | } | 21 | } |
| 34 | ] | 22 | ] |
diff --git a/data/schemas/definitions.jsonschema b/data/schemas/definitions.jsonschema new file mode 100644 index 000000000..822f23707 --- /dev/null +++ b/data/schemas/definitions.jsonschema | |||
| @@ -0,0 +1,107 @@ | |||
| 1 | { | ||
| 2 | "$schema": "http://json-schema.org/draft-07/schema#", | ||
| 3 | "$id": "qmk.definitions.v1", | ||
| 4 | "title": "Common definitions used across QMK's jsonschemas.", | ||
| 5 | "type": "object", | ||
| 6 | "boolean_array": { | ||
| 7 | "type": "object", | ||
| 8 | "additionalProperties": {"type": "boolean"} | ||
| 9 | }, | ||
| 10 | "filename": { | ||
| 11 | "type": "string", | ||
| 12 | "minLength": 1, | ||
| 13 | "pattern": "^[0-9a-z_]*$" | ||
| 14 | }, | ||
| 15 | "hex_number_2d": { | ||
| 16 | "type": "string", | ||
| 17 | "pattern": "^0x[0-9A-F]{2}$" | ||
| 18 | }, | ||
| 19 | "hex_number_4d": { | ||
| 20 | "type": "string", | ||
| 21 | "pattern": "^0x[0-9A-F]{4}$" | ||
| 22 | }, | ||
| 23 | "text_identifier": { | ||
| 24 | "type": "string", | ||
| 25 | "minLength": 1, | ||
| 26 | "maxLength": 250 | ||
| 27 | }, | ||
| 28 | "layout_macro": { | ||
| 29 | "oneOf": [ | ||
| 30 | { | ||
| 31 | "type": "string", | ||
| 32 | "enum": ["LAYOUT", "LAYOUT_planck_1x2uC"] | ||
| 33 | }, | ||
| 34 | { | ||
| 35 | "type": "string", | ||
| 36 | "pattern": "^LAYOUT_[0-9a-z_]*$" | ||
| 37 | } | ||
| 38 | ] | ||
| 39 | }, | ||
| 40 | "key_unit": { | ||
| 41 | "type": "number", | ||
| 42 | "min": 0.25 | ||
| 43 | }, | ||
| 44 | "mcu_pin_array": { | ||
| 45 | "type": "array", | ||
| 46 | "items": {"$ref": "#/mcu_pin"} | ||
| 47 | }, | ||
| 48 | "mcu_pin": { | ||
| 49 | "oneOf": [ | ||
| 50 | { | ||
| 51 | "type": "string", | ||
| 52 | "pattern": "^[A-K]\\d{1,2}$" | ||
| 53 | }, | ||
| 54 | { | ||
| 55 | "type": "string", | ||
| 56 | "pattern": "^LINE_PIN\\d{1,2}$" | ||
| 57 | }, | ||
| 58 | { | ||
| 59 | "type": "number", | ||
| 60 | "multipleOf": 1 | ||
| 61 | }, | ||
| 62 | { | ||
| 63 | "type": "null" | ||
| 64 | } | ||
| 65 | ] | ||
| 66 | }, | ||
| 67 | "signed_decimal": { | ||
| 68 | "type": "number" | ||
| 69 | }, | ||
| 70 | "signed_int": { | ||
| 71 | "type": "number", | ||
| 72 | "multipleOf": 1 | ||
| 73 | } | ||
| 74 | "signed_int_8": { | ||
| 75 | "type": "number", | ||
| 76 | "min": -127, | ||
| 77 | "max": 127, | ||
| 78 | "multipleOf": 1 | ||
| 79 | } | ||
| 80 | "string_array": { | ||
| 81 | "type": "array", | ||
| 82 | "items": { | ||
| 83 | "type": "string" | ||
| 84 | } | ||
| 85 | }, | ||
| 86 | "string_object": { | ||
| 87 | "type": "object", | ||
| 88 | "additionalProperties": { | ||
| 89 | "type": "string" | ||
| 90 | } | ||
| 91 | }, | ||
| 92 | "unsigned_decimal": { | ||
| 93 | "type": "number", | ||
| 94 | "min": 0 | ||
| 95 | }, | ||
| 96 | "unsigned_int": { | ||
| 97 | "type": "number", | ||
| 98 | "min": 0, | ||
| 99 | "multipleOf": 1 | ||
| 100 | } | ||
| 101 | "unsigned_int_8": { | ||
| 102 | "type": "number", | ||
| 103 | "min": 0, | ||
| 104 | "max": 255, | ||
| 105 | "multipleOf": 1 | ||
| 106 | } | ||
| 107 | } | ||
diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index c335f49d5..78c9a8d36 100644 --- a/data/schemas/keyboard.jsonschema +++ b/data/schemas/keyboard.jsonschema | |||
| @@ -1,31 +1,53 @@ | |||
| 1 | { | 1 | { |
| 2 | "$schema": "http://json-schema.org/schema#", | 2 | "$schema": "http://json-schema.org/draft-07/schema#", |
| 3 | "$id": "qmk.keyboard.v1", | 3 | "$id": "qmk.keyboard.v1", |
| 4 | "title": "Keyboard Information", | 4 | "title": "Keyboard Information", |
| 5 | "type": "object", | 5 | "type": "object", |
| 6 | "properties": { | 6 | "properties": { |
| 7 | "keyboard_name": { | 7 | "keyboard_name": {"$ref": "qmk.definitions.v1#/text_identifier"}, |
| 8 | "type": "string", | 8 | "maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"}, |
| 9 | "minLength": 2, | 9 | "manufacturer": {"$ref": "qmk.definitions.v1#/text_identifier"}, |
| 10 | "maxLength": 250 | ||
| 11 | }, | ||
| 12 | "maintainer": { | ||
| 13 | "type": "string", | ||
| 14 | "minLength": 2, | ||
| 15 | "maxLength": 250 | ||
| 16 | }, | ||
| 17 | "manufacturer": { | ||
| 18 | "type": "string", | ||
| 19 | "minLength": 2, | ||
| 20 | "maxLength": 250 | ||
| 21 | }, | ||
| 22 | "url": { | 10 | "url": { |
| 23 | "type": "string", | 11 | "type": "string", |
| 24 | "format": "uri" | 12 | "format": "uri" |
| 25 | }, | 13 | }, |
| 26 | "processor": { | 14 | "processor": { |
| 27 | "type": "string", | 15 | "type": "string", |
| 28 | "enum": ["cortex-m0", "cortex-m0plus", "cortex-m3", "cortex-m4", "MKL26Z64", "MK20DX128", "MK20DX256", "MK66F18", "STM32F042", "STM32F072", "STM32F103", "STM32F303", "STM32F401", "STM32F411", "STM32F446", "STM32G431", "STM32G474", "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 | }, | ||
| 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 | } | ||
| 29 | }, | 51 | }, |
| 30 | "board": { | 52 | "board": { |
| 31 | "type": "string", | 53 | "type": "string", |
| @@ -34,68 +56,55 @@ | |||
| 34 | }, | 56 | }, |
| 35 | "bootloader": { | 57 | "bootloader": { |
| 36 | "type": "string", | 58 | "type": "string", |
| 37 | "enum": ["atmel-dfu", "bootloadHID", "caterina", "halfkay", "kiibohd", "lufa-dfu", "lufa-ms", "micronucleus", "qmk-dfu", "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"], |
| 38 | }, | 60 | }, |
| 39 | "diode_direction": { | 61 | "bootloader_instructions": { |
| 40 | "type": "string", | 62 | "type": "string", |
| 41 | "enum": ["COL2ROW", "ROW2COL"] | 63 | "description": "Instructions for putting the keyboard into a mode that allows for firmware flashing." |
| 42 | }, | 64 | }, |
| 43 | "debounce": { | 65 | "build": { |
| 44 | "type": "number", | 66 | "type": "object", |
| 45 | "min": 0, | 67 | "additionalProperties": false, |
| 46 | "multipleOf": 1 | 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 | } | ||
| 47 | }, | 79 | }, |
| 48 | "height": { | 80 | "diode_direction": { |
| 49 | "type": "number", | 81 | "type": "string", |
| 50 | "min": 0.25 | 82 | "enum": ["COL2ROW", "ROW2COL"] |
| 51 | }, | 83 | }, |
| 52 | "width": { | 84 | "debounce": {"$ref": "qmk.definitions.v1#/unsigned_int"}, |
| 53 | "type": "number", | 85 | "combo": { |
| 54 | "min": 0.25 | 86 | "type": "object", |
| 87 | "properties": { | ||
| 88 | "count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, | ||
| 89 | "term": {"$ref": "qmk.definitions.v1#/unsigned_int"} | ||
| 90 | } | ||
| 55 | }, | 91 | }, |
| 56 | "community_layouts": { | 92 | "community_layouts": { |
| 57 | "type": "array", | 93 | "type": "array", |
| 58 | "items": { | 94 | "items": {"$ref": "qmk.definitions.v1#/filename"} |
| 59 | "type": "string", | ||
| 60 | "minLength": 2, | ||
| 61 | "pattern": "^[0-9a-z_]*$" | ||
| 62 | } | ||
| 63 | }, | ||
| 64 | "features": { | ||
| 65 | "type": "object", | ||
| 66 | "additionalProperties": {"type": "boolean"} | ||
| 67 | }, | 95 | }, |
| 96 | "features": {"$ref": "qmk.definitions.v1#/boolean_array"}, | ||
| 68 | "indicators": { | 97 | "indicators": { |
| 69 | "type": "object", | 98 | "type": "object", |
| 70 | "properties": { | 99 | "properties": { |
| 71 | "caps_lock": { | 100 | "caps_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}, |
| 72 | "type": "string", | 101 | "num_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}, |
| 73 | "pattern": "^[A-K]\\d{1,2}$" | 102 | "scroll_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"} |
| 74 | }, | ||
| 75 | "num_lock": { | ||
| 76 | "type": "string", | ||
| 77 | "pattern": "^[A-K]\\d{1,2}$" | ||
| 78 | }, | ||
| 79 | "scroll_lock": { | ||
| 80 | "type": "string", | ||
| 81 | "pattern": "^[A-K]\\d{1,2}$" | ||
| 82 | } | ||
| 83 | } | 103 | } |
| 84 | }, | 104 | }, |
| 85 | "layout_aliases": { | 105 | "layout_aliases": { |
| 86 | "type": "object", | 106 | "type": "object", |
| 87 | "additionalProperties": { | 107 | "additionalProperties": {"$ref": "qmk.definitions.v1#/layout_macro"} |
| 88 | "oneOf": [ | ||
| 89 | { | ||
| 90 | "type": "string", | ||
| 91 | "enum": ["LAYOUT", "LAYOUT_planck_1x2uC"] | ||
| 92 | }, | ||
| 93 | { | ||
| 94 | "type": "string", | ||
| 95 | "pattern": "^LAYOUT_[0-9a-z_]*$" | ||
| 96 | } | ||
| 97 | ] | ||
| 98 | } | ||
| 99 | }, | 108 | }, |
| 100 | "layouts": { | 109 | "layouts": { |
| 101 | "type": "object", | 110 | "type": "object", |
| @@ -109,11 +118,7 @@ | |||
| 109 | "c_macro": { | 118 | "c_macro": { |
| 110 | "type": "boolean" | 119 | "type": "boolean" |
| 111 | }, | 120 | }, |
| 112 | "key_count": { | 121 | "key_count": {"$ref": "qmk.definitions.v1#/key_unit"}, |
| 113 | "type": "number", | ||
| 114 | "min": 0, | ||
| 115 | "multipleOf": 1 | ||
| 116 | }, | ||
| 117 | "layout": { | 122 | "layout": { |
| 118 | "type": "array", | 123 | "type": "array", |
| 119 | "items": { | 124 | "items": { |
| @@ -131,101 +136,61 @@ | |||
| 131 | "multipleOf": 1 | 136 | "multipleOf": 1 |
| 132 | } | 137 | } |
| 133 | }, | 138 | }, |
| 134 | "h": { | 139 | "key_count": {"$ref": "qmk.definitions.v1#/key_unit"}, |
| 135 | "type": "number", | 140 | "r": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}, |
| 136 | "min": 0.25 | 141 | "rx": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}, |
| 137 | }, | 142 | "ry": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}, |
| 138 | "r": { | 143 | "h": {"$ref": "qmk.definitions.v1#/key_unit"}, |
| 139 | "type": "number", | 144 | "w": {"$ref": "qmk.definitions.v1#/key_unit"}, |
| 140 | "min": 0 | 145 | "x": {"$ref": "qmk.definitions.v1#/key_unit"}, |
| 141 | }, | 146 | "y": {"$ref": "qmk.definitions.v1#/key_unit"} |
| 142 | "rx": { | ||
| 143 | "type": "number", | ||
| 144 | "min": 0 | ||
| 145 | }, | ||
| 146 | "ry": { | ||
| 147 | "type": "number", | ||
| 148 | "min": 0 | ||
| 149 | }, | ||
| 150 | "w": { | ||
| 151 | "type": "number", | ||
| 152 | "min": 0.25 | ||
| 153 | }, | ||
| 154 | "x": { | ||
| 155 | "type": "number", | ||
| 156 | "min": 0 | ||
| 157 | }, | ||
| 158 | "y": { | ||
| 159 | "type": "number", | ||
| 160 | "min": 0 | ||
| 161 | } | ||
| 162 | } | 147 | } |
| 163 | } | 148 | } |
| 164 | } | 149 | } |
| 165 | } | 150 | } |
| 166 | } | 151 | } |
| 167 | }, | 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 | }, | ||
| 168 | "matrix_pins": { | 161 | "matrix_pins": { |
| 169 | "type": "object", | 162 | "type": "object", |
| 170 | "additionalProperties": false, | 163 | "additionalProperties": false, |
| 171 | "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"}, | ||
| 172 | "direct": { | 169 | "direct": { |
| 173 | "type": "array", | 170 | "type": "array", |
| 174 | "items": { | 171 | "items": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} |
| 175 | "type": "array", | ||
| 176 | "items": { | ||
| 177 | "oneOf": [ | ||
| 178 | { | ||
| 179 | "type": "string", | ||
| 180 | "pattern": "^[A-K]\\d{1,2}$" | ||
| 181 | }, | ||
| 182 | { | ||
| 183 | "type": "number", | ||
| 184 | "multipleOf": 1 | ||
| 185 | }, | ||
| 186 | { | ||
| 187 | "type": "null" | ||
| 188 | } | ||
| 189 | ] | ||
| 190 | } | ||
| 191 | } | ||
| 192 | }, | ||
| 193 | "cols": { | ||
| 194 | "type": "array", | ||
| 195 | "items": { | ||
| 196 | "oneOf": [ | ||
| 197 | { | ||
| 198 | "type": "string", | ||
| 199 | "pattern": "^[A-K]\\d{1,2}$" | ||
| 200 | }, | ||
| 201 | { | ||
| 202 | "type": "number", | ||
| 203 | "multipleOf": 1 | ||
| 204 | }, | ||
| 205 | { | ||
| 206 | "type": "null" | ||
| 207 | } | ||
| 208 | ] | ||
| 209 | } | ||
| 210 | }, | 172 | }, |
| 211 | "rows": { | 173 | "cols": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, |
| 212 | "type": "array", | 174 | "rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, |
| 213 | "items": { | 175 | "unused": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} |
| 214 | "oneOf": [ | 176 | } |
| 215 | { | 177 | }, |
| 216 | "type": "string", | 178 | "mouse_key": { |
| 217 | "pattern": "^[A-K]\\d{1,2}$" | 179 | "type": "object", |
| 218 | }, | 180 | "properties": { |
| 219 | { | 181 | "enabled": {"type": "boolean"}, |
| 220 | "type": "number", | 182 | "delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} |
| 221 | "multipleOf": 1 | 183 | "interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} |
| 222 | }, | 184 | "max_speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} |
| 223 | { | 185 | "time_to_max": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} |
| 224 | "type": "null" | 186 | "wheel_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} |
| 225 | } | 187 | } |
| 226 | ] | 188 | }, |
| 227 | } | 189 | "oneshot": { |
| 228 | } | 190 | "type": "object", |
| 191 | "properties": { | ||
| 192 | "tap_toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"}, | ||
| 193 | "timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} | ||
| 229 | } | 194 | } |
| 230 | }, | 195 | }, |
| 231 | "rgblight": { | 196 | "rgblight": { |
| @@ -238,88 +203,160 @@ | |||
| 238 | "type": "boolean" | 203 | "type": "boolean" |
| 239 | } | 204 | } |
| 240 | }, | 205 | }, |
| 241 | "brightness_steps": { | 206 | "brightness_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, |
| 242 | "type": "number", | 207 | "hue_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, |
| 243 | "min": 0, | 208 | "layers": { |
| 244 | "multipleOf": 1 | 209 | "type": "object", |
| 245 | }, | 210 | "additionalProperties": false, |
| 246 | "hue_steps": { | 211 | "properties": { |
| 247 | "type": "number", | 212 | "blink": {"type": "boolean"}, |
| 248 | "min": 0, | 213 | "enabled": {"type": "boolean"}, |
| 249 | "multipleOf": 1 | 214 | "max": { |
| 215 | "type": "number", | ||
| 216 | "min": 1, | ||
| 217 | "max": 32, | ||
| 218 | "multipleOf": 1 | ||
| 219 | }, | ||
| 220 | "override_rgb": {"type": "boolean"} | ||
| 221 | } | ||
| 250 | }, | 222 | }, |
| 251 | "led_count": { | 223 | "led_count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, |
| 252 | "type": "number", | 224 | "max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, |
| 253 | "min": 0, | 225 | "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, |
| 254 | "multipleOf": 1 | 226 | "rgbw": {"type": "boolean"}, |
| 227 | "saturation_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, | ||
| 228 | "sleep": {"type": "boolean"}, | ||
| 229 | "split": {"type": "boolean"}, | ||
| 230 | "split_count": { | ||
| 231 | "type": "array", | ||
| 232 | "minLength": 2, | ||
| 233 | "maxLength": 2, | ||
| 234 | "items": {"$ref": "qmk.definitions.v1#/unsigned_int"} | ||
| 235 | } | ||
| 236 | } | ||
| 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"} | ||
| 255 | }, | 246 | }, |
| 256 | "max_brightness": { | 247 | "matrix_pins": { |
| 257 | "type": "number", | 248 | "type": "object", |
| 258 | "min": 0, | 249 | "additionalProperties": false, |
| 259 | "max": 255, | 250 | "properties": { |
| 260 | "multipleOf": 1 | 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 | } | ||
| 261 | }, | 265 | }, |
| 262 | "pin": { | 266 | "main": { |
| 263 | "type": "string", | 267 | "type": "string", |
| 264 | "pattern": "^[A-K]\\d{1,2}$" | 268 | "enum": ["eeprom", "left", "matrix_grid", "pin", "right"] |
| 265 | }, | 269 | }, |
| 266 | "saturation_steps": { | 270 | "soft_serial_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, |
| 271 | "soft_serial_speed": { | ||
| 267 | "type": "number", | 272 | "type": "number", |
| 268 | "min": 0, | 273 | "min": 0, |
| 274 | "max": 5, | ||
| 269 | "multipleOf": 1 | 275 | "multipleOf": 1 |
| 270 | }, | 276 | }, |
| 271 | "sleep": {"type": "boolean"}, | 277 | "transport": { |
| 272 | "split": {"type": "boolean"}, | 278 | "type": "object", |
| 273 | "split_count": { | 279 | "additionalProperties": false, |
| 274 | "type": "array", | 280 | "properties": { |
| 275 | "minLength": 2, | 281 | "protocol": { |
| 276 | "maxLength": 2, | 282 | "type": "string", |
| 277 | "items": { | 283 | "enum": ["custom", "i2c", "serial", "serial_usart"] |
| 278 | "type": "number", | 284 | }, |
| 279 | "min": 0, | 285 | "sync_matrix_state": {"type": "boolean"}, |
| 280 | "multipleOf": 1 | 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"} | ||
| 281 | } | 296 | } |
| 282 | } | 297 | } |
| 283 | } | 298 | } |
| 284 | }, | 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 | }, | ||
| 285 | "usb": { | 320 | "usb": { |
| 286 | "type": "object", | 321 | "type": "object", |
| 287 | "additionalProperties": false, | 322 | "additionalProperties": false, |
| 288 | "properties": { | 323 | "properties": { |
| 289 | "device_ver": { | 324 | "device_ver": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, |
| 290 | "type": "string", | 325 | "force_nkro": {"type": "boolean"}, |
| 291 | "pattern": "^[0-9A-F]x[0-9A-F][0-9A-F][0-9A-F][0-9A-F]" | 326 | "pid": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, |
| 292 | }, | 327 | "vid": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, |
| 293 | "pid": { | 328 | "max_power": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, |
| 294 | "type": "string", | 329 | "no_startup_check": {"type": "boolean"}, |
| 295 | "pattern": "^[0-9A-F]x[0-9A-F][0-9A-F][0-9A-F][0-9A-F]" | 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 | } | ||
| 296 | }, | 338 | }, |
| 297 | "vid": { | 339 | "suspend_wakeup_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, |
| 298 | "type": "string", | 340 | "wait_for": {"type": "boolean"}, |
| 299 | "pattern": "^[0-9A-F]x[0-9A-F][0-9A-F][0-9A-F][0-9A-F]" | 341 | } |
| 300 | } | 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"}, | ||
| 301 | } | 350 | } |
| 302 | }, | 351 | }, |
| 303 | "qmk_lufa_bootloader": { | 352 | "qmk_lufa_bootloader": { |
| 304 | "type": "object", | 353 | "type": "object", |
| 305 | "additionalProperties": false, | 354 | "additionalProperties": false, |
| 306 | "properties": { | 355 | "properties": { |
| 307 | "esc_output": { | 356 | "esc_output": {"$ref": "qmk.definitions.v1#/mcu_pin"}, |
| 308 | "type": "string", | 357 | "esc_input": {"$ref": "qmk.definitions.v1#/mcu_pin"}, |
| 309 | "pattern": "^[A-K]\\d{1,2}$" | 358 | "led": {"$ref": "qmk.definitions.v1#/mcu_pin"}, |
| 310 | }, | 359 | "speaker": {"$ref": "qmk.definitions.v1#/mcu_pin"} |
| 311 | "esc_input": { | ||
| 312 | "type": "string", | ||
| 313 | "pattern": "^[A-K]\\d{1,2}$" | ||
| 314 | }, | ||
| 315 | "led": { | ||
| 316 | "type": "string", | ||
| 317 | "pattern": "^[A-K]\\d{1,2}$" | ||
| 318 | }, | ||
| 319 | "speaker": { | ||
| 320 | "type": "string", | ||
| 321 | "pattern": "^[A-K]\\d{1,2}$" | ||
| 322 | } | ||
| 323 | } | 360 | } |
| 324 | } | 361 | } |
| 325 | } | 362 | } |
