diff options
Diffstat (limited to 'data')
| -rw-r--r-- | data/mappings/info_config.json | 58 | ||||
| -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 | ||||
| -rw-r--r-- | data/schemas/keymap.jsonschema | 24 | 
6 files changed, 458 insertions, 242 deletions
diff --git a/data/mappings/info_config.json b/data/mappings/info_config.json index b949b13320..72bb0f4a1c 100644 --- a/data/mappings/info_config.json +++ b/data/mappings/info_config.json @@ -1,21 +1,48 @@ -# This file maps keys between `config.h` and `info.json`. It is used by QMK  +# This file maps keys between `config.h` and `info.json`. It is used by QMK  # to correctly and consistently map back and forth between the two systems.  {      # Format:      # <config.h key>: {"info_key": <info.json key>, ["value_type": <value_type>], ["to_json": <true/false>], ["to_c": <true/false>]} -    # value_type: one of "array", "array.int", "int", "hex", "list", "mapping" +    # value_type: one of "array", "array.int", "bool", "int", "hex", "list", "mapping"      # to_json: Default `true`. Set to `false` to exclude this mapping from info.json      # to_c: Default `true`. Set to `false` to exclude this mapping from config.h      # warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places -    "DEBOUNCE": {"info_key": "debounce", "value_type": "int"} +    "AUDIO_VOICES": {"info_key": "audio.voices", "value_type": "bool"}, +    "BACKLIGHT_BREATHING": {"info_key": "backlight.breathing", "value_type": "bool"}, +    "BREATHING_PERIOD": {"info_key": "backlight.breathing_period", "value_type": "int"}, +    "BACKLIGHT_PIN": {"info_key": "backlight.pin"}, +    "COMBO_COUNT": {"info_key": "combo.count", "value_type": "int"}, +    "COMBO_TERM": {"info_key": "combo.term", "value_type": "int"}, +    "DEBOUNCE": {"info_key": "debounce", "value_type": "int"},      "DEVICE_VER": {"info_key": "usb.device_ver", "value_type": "hex"},      "DESCRIPTION": {"info_key": "keyboard_folder", "to_json": false},      "DIODE_DIRECTION": {"info_key": "diode_direction"}, +    "FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "bool"}, +    "DYNAMIC_KEYMAP_EEPROM_MAX_ADDR": {"info_key": "dynamic_keymap.eeprom_max_addr", "value_type": "int"}, +    "DYNAMIC_KEYMAP_LAYER_COUNT": {"info_key": "dynamic_keymap.layer_count", "value_type": "int"}, +    "IGNORE_MOD_TAP_INTERRUPT": {"info_key": "tapping.ignore_mod_tap_interrupt", "value_type": "bool"}, +    "IGNORE_MOD_TAP_INTERRUPT_PER_KEY": {"info_key": "tapping.ignore_mod_tap_interrupt_per_key", "value_type": "bool"},      "LAYOUTS": {"info_key": "layout_aliases", "value_type": "mapping"}, +    "LEADER_PER_KEY_TIMING": {"info_key": "leader_key.timing", "value_type": "bool"}, +    "LEADER_KEY_STRICT_KEY_PROCESSING": {"info_key": "leader_key.strict_processing", "value_type": "bool"}, +    "LEADER_TIMEOUT": {"info_key": "leader_key.timeout", "value_type": "int"},      "LED_CAPS_LOCK_PIN": {"info_key": "indicators.caps_lock"},      "LED_NUM_LOCK_PIN": {"info_key": "indicators.num_lock"},      "LED_SCROLL_LOCK_PIN": {"info_key": "indicators.scroll_lock"},      "MANUFACTURER": {"info_key": "manufacturer"}, +    "MATRIX_HAS_GHOST": {"info_key": "matrix_pins.ghost", "value_type": "bool"}, +    "MATRIX_IO_DELAY": {"info_key": "matrix_pins.io_delay", "value_type": "int"}, +    "MOUSEKEY_DELAY": {"info_key": "mousekey.delay", "value_type": "int"}, +    "MOUSEKEY_INTERVAL": {"info_key": "mousekey.interval", "value_type": "int"}, +    "MOUSEKEY_MAX_SPEED": {"info_key": "mousekey.max_speed", "value_type": "int"}, +    "MOUSEKEY_TIME_TO_MAX": {"info_key": "mousekey.time_to_max", "value_type": "int"}, +    "MOUSEKEY_WHEEL_DELAY": {"info_key": "mousekey.wheel_delay", "value_type": "int"}, +    "ONESHOT_TIMEOUT": {"info_key": "oneshot.timeout", "value_type": "int"}, +    "ONESHOT_TAP_TOGGLE": {"info_key": "oneshot.tap_toggle", "value_type": "int"}, +    "PERMISSIVE_HOLD": {"info_key": "tapping.permissive_hold", "value_type": "bool"}, +    "PERMISSIVE_HOLD_PER_KEY": {"info_key": "tapping.permissive_hold_per_key", "value_type": "bool"}, +    "RETRO_TAPPING": {"info_key": "tapping.retro", "value_type": "bool"}, +    "RETRO_TAPPING_PER_KEY": {"info_key": "tapping.retro_per_key", "value_type": "bool"},      "RGB_DI_PIN": {"info_key": "rgblight.pin"},      "RGBLED_NUM": {"info_key": "rgblight.led_count", "value_type": "int"},      "RGBLED_SPLIT": {"info_key": "rgblight.split_count", "value_type": "array.int"}, @@ -30,17 +57,40 @@      "RGBLIGHT_EFFECT_SNAKE": {"info_key": "rgblight.animations.snake", "value_type": "bool"},      "RGBLIGHT_EFFECT_STATIC_GRADIENT": {"info_key": "rgblight.animations.static_gradient", "value_type": "bool"},      "RGBLIGHT_EFFECT_TWINKLE": {"info_key": "rgblight.animations.twinkle"}, +    "RGBLIGHT_LAYER_BLINK": {"info_key": "rgblight.layers.blink", "value_type": "bool"}, +    "RGBLIGHT_LAYERS": {"info_key": "rgblight.layers.enabled", "value_type": "bool"}, +    "RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF": {"info_key": "rgblight.layers.override_rgb", "value_type": "bool"},      "RGBLIGHT_LIMIT_VAL": {"info_key": "rgblight.max_brightness", "value_type": "int"}, +    "RGBLIGHT_MAX_LAYERS": {"info_key": "rgblight.layers.max", "value_type": "int"},      "RGBLIGHT_HUE_STEP": {"info_key": "rgblight.hue_steps", "value_type": "int"},      "RGBLIGHT_SAT_STEP": {"info_key": "rgblight.saturation_steps", "value_type": "int"},      "RGBLIGHT_VAL_STEP": {"info_key": "rgblight.brightness_steps", "value_type": "int"},      "RGBLIGHT_SLEEP": {"info_key": "rgblight.sleep", "value_type": "bool"},      "RGBLIGHT_SPLIT": {"info_key": "rgblight.split", "value_type": "bool"}, +    "RGBW": {"info_key": "rgblight.rgbw", "value_type": "bool"},      "PRODUCT": {"info_key": "keyboard_folder", "to_json": false},      "PRODUCT_ID": {"info_key": "usb.pid", "value_type": "hex"},      "VENDOR_ID": {"info_key": "usb.vid", "value_type": "hex"},      "QMK_ESC_OUTPUT": {"info_key": "qmk_lufa_bootloader.esc_output"},      "QMK_ESC_INPUT": {"info_key": "qmk_lufa_bootloader.esc_input"}, +    "QMK_KEYS_PER_SCAN": {"info_key": "qmk.keys_per_scan", "value_type": "int"},      "QMK_LED": {"info_key": "qmk_lufa_bootloader.led"}, -    "QMK_SPEAKER": {"info_key": "qmk_lufa_bootloader.speaker"} +    "QMK_SPEAKER": {"info_key": "qmk_lufa_bootloader.speaker"}, +    "SPLIT_MODS_ENABLE": {"info_key": "split.transport.sync_modifiers", "value_type": "bool"}, +    "SPLIT_TRANSPORT_MIRROR": {"info_key": "split.transport.sync_matrix_state", "value_type": "bool"}, +    "SPLIT_USB_DETECT": {"info_key": "split.usb_detect.enabled", "value_type": "bool"}, +    "SPLIT_USB_TIMEOUT": {"info_key": "split.usb_detect.timeout", "value_type": "int"}, +    "SPLIT_USB_TIMEOUT_POLL": {"info_key": "split.usb_detect.polling_interval", "value_type": "int"}, +    "SOFT_SERIAL_PIN": {"info_key": "split.soft_serial_pin"}, +    "SOFT_SERIAL_SPEED": {"info_key": "split.soft_serial_speed"}, +    "TAP_CODE_DELAY": {"info_key": "qmk.tap_keycode_delay", "value_type": "int"}, +    "TAP_HOLD_CAPS_DELAY": {"info_key": "qmk.tap_capslock_delay", "value_type": "int"}, +    "TAPPING_FORCE_HOLD": {"info_key": "tapping.force_hold", "value_type": "bool"}, +    "TAPPING_FORCE_HOLD_PER_KEY": {"info_key": "tapping.force_hold_per_key", "value_type": "bool"}, +    "TAPPING_TERM": {"info_key": "tapping.term", "value_type": "int"}, +    "TAPPING_TERM_PER_KEY": {"info_key": "tapping.term_per_key", "value_type": "bool"}, +    "TAPPING_TOGGLE": {"info_key": "tapping.toggle", "value_type": "int"}, +    "USB_MAX_POWER_CONSUMPTION": {"info_key": "usb.max_power", "value_type": "int"}, +    "USB_POLLING_INTERVAL_MS": {"info_key": "usb.polling_interval", "value_type": "int"}, +    "USB_SUSPEND_WAKEUP_DELAY": {"info_key": "usb.suspend_wakeup_delay", "value_type": "int"},  } diff --git a/data/mappings/info_rules.json b/data/mappings/info_rules.json index 97f772c4d5..aea67e04c8 100644 --- a/data/mappings/info_rules.json +++ b/data/mappings/info_rules.json @@ -1,15 +1,25 @@ -# This file maps keys between `rules.mk` and `info.json`. It is used by QMK  +# This file maps keys between `rules.mk` and `info.json`. It is used by QMK  # to correctly and consistently map back and forth between the two systems.  {      # Format:      # <rules.mk key>: {"info_key": <info.json key>, ["value_type": <value_type>], ["to_json": <true/false>], ["to_c": <true/false>]} -    # value_type: one of "array", "array.int", "int", "list", "hex", "mapping" +    # value_type: one of "array", "array.int", "bool", "int", "list", "hex", "mapping"      # to_json: Default `true`. Set to `false` to exclude this mapping from info.json      # to_c: Default `true`. Set to `false` to exclude this mapping from rules.mk      # warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places      "BOARD": {"info_key": "board"},      "BOOTLOADER": {"info_key": "bootloader", "warn_duplicate": false}, +    "BLUETOOTH": {"info_key": "bluetooth.driver"}, +    "FIRMWARE_FORMAT": {"info_key": "build.firmware_format"}, +    "KEYBOARD_SHARED_EP": {"info_key": "usb.shared_endpoint.keyboard", "value_type": "bool"}, +    "MOUSE_SHARED_EP": {"info_key": "usb.shared_endpoint.mouse", "value_type": "bool"},      "LAYOUTS": {"info_key": "community_layouts", "value_type": "list"},      "LED_MATRIX_DRIVER": {"info_key": "led_matrix.driver"}, +    "LTO_ENABLE": {"info_key": "build.lto", "value_type": "bool"},      "MCU": {"info_key": "processor", "warn_duplicate": false}, +    "MOUSEKEY_ENABLE": {"info_key": "mouse_key.enabled", "value_type": "bool"}, +    "NO_USB_STARTUP_CHECK": {"info_key": "usb.no_startup_check", "value_type": "bool"}, +    "SPLIT_KEYBOARD": {"info_key": "split.enabled", "value_type": "bool"}, +    "SPLIT_TRANSPORT": {"info_key": "split.transport.protocol", "value_type": "str", "to_c": false}, +    "WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"}  } diff --git a/data/schemas/api_keyboard.jsonschema b/data/schemas/api_keyboard.jsonschema index d570ee9990..d638658a1d 100644 --- a/data/schemas/api_keyboard.jsonschema +++ b/data/schemas/api_keyboard.jsonschema @@ -1,34 +1,22 @@  { +    "$id": "qmk.api.keyboard.v1",      "allOf": [ -        { "$ref": "qmk.keyboard.v1" }, +        {"$ref": "qmk.keyboard.v1"},          { -            "$id": "qmk.api.keyboard.v1", -            "keymaps": { -                "type": "string" -            }, -            "parse_errors": { -                "type": "array", -                "items": { -                    "type": "string" -                } -            }, -            "parse_warnings": { -                "type": "array", -                "items": { -                    "type": "string" -                } -            }, -            "processor_type": { -                "type": "string" -            }, -            "protocol": { -                "type": "string" -            }, -            "keyboard_folder": { -                "type": "string" -            }, -            "platform": { -                "type": "string" +            "properties": { +                "keymaps": { +                    "type": "object", +                    "properties": { +                        "url": {"type": "string"} +                    } + +                }, +                "parse_errors": {"$ref": "qmk.definitions.v1#/string_array"}, +                "parse_warnings": {"$ref": "qmk.definitions.v1#/string_array"}, +                "processor_type": {"type": "string"}, +                "protocol": {"type": "string"}, +                "keyboard_folder": {"type": "string"}, +                "platform": {"type": "string"}              }          }      ] diff --git a/data/schemas/definitions.jsonschema b/data/schemas/definitions.jsonschema new file mode 100644 index 0000000000..822f237073 --- /dev/null +++ b/data/schemas/definitions.jsonschema @@ -0,0 +1,107 @@ +{ +    "$schema": "http://json-schema.org/draft-07/schema#", +    "$id": "qmk.definitions.v1", +    "title": "Common definitions used across QMK's jsonschemas.", +    "type": "object", +    "boolean_array": { +        "type": "object", +        "additionalProperties": {"type": "boolean"} +    }, +    "filename": { +        "type": "string", +        "minLength": 1, +        "pattern": "^[0-9a-z_]*$" +    }, +    "hex_number_2d": { +        "type": "string", +        "pattern": "^0x[0-9A-F]{2}$" +    }, +    "hex_number_4d": { +        "type": "string", +        "pattern": "^0x[0-9A-F]{4}$" +    }, +    "text_identifier": { +        "type": "string", +        "minLength": 1, +        "maxLength": 250 +    }, +    "layout_macro": { +        "oneOf": [ +            { +                "type": "string", +                "enum": ["LAYOUT", "LAYOUT_planck_1x2uC"] +            }, +            { +                "type": "string", +                "pattern": "^LAYOUT_[0-9a-z_]*$" +            } +        ] +    }, +    "key_unit": { +        "type": "number", +        "min": 0.25 +    }, +    "mcu_pin_array": { +        "type": "array", +        "items": {"$ref": "#/mcu_pin"} +    }, +    "mcu_pin": { +        "oneOf": [ +            { +                "type": "string", +                "pattern": "^[A-K]\\d{1,2}$" +            }, +            { +                "type": "string", +                "pattern": "^LINE_PIN\\d{1,2}$" +            }, +            { +                "type": "number", +                "multipleOf": 1 +            }, +            { +                "type": "null" +            } +        ] +    }, +    "signed_decimal": { +        "type": "number" +    }, +    "signed_int": { +        "type": "number", +        "multipleOf": 1 +    } +    "signed_int_8": { +        "type": "number", +        "min": -127, +        "max": 127, +        "multipleOf": 1 +    } +    "string_array": { +        "type": "array", +        "items": { +            "type": "string" +        } +    }, +    "string_object": { +        "type": "object", +        "additionalProperties": { +            "type": "string" +        } +    }, +    "unsigned_decimal": { +        "type": "number", +        "min": 0 +    }, +    "unsigned_int": { +        "type": "number", +        "min": 0, +        "multipleOf": 1 +    } +    "unsigned_int_8": { +        "type": "number", +        "min": 0, +        "max": 255, +        "multipleOf": 1 +    } +} diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index c335f49d52..78c9a8d36b 100644 --- a/data/schemas/keyboard.jsonschema +++ b/data/schemas/keyboard.jsonschema @@ -1,31 +1,53 @@  { -    "$schema": "http://json-schema.org/schema#", +    "$schema": "http://json-schema.org/draft-07/schema#",      "$id": "qmk.keyboard.v1",      "title": "Keyboard Information",      "type": "object",      "properties": { -        "keyboard_name": { -            "type": "string", -            "minLength": 2, -            "maxLength": 250 -        }, -        "maintainer": { -            "type": "string", -            "minLength": 2, -            "maxLength": 250 -        }, -        "manufacturer": { -            "type": "string", -            "minLength": 2, -            "maxLength": 250 -        }, +        "keyboard_name": {"$ref": "qmk.definitions.v1#/text_identifier"}, +        "maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"}, +        "manufacturer": {"$ref": "qmk.definitions.v1#/text_identifier"},          "url": {              "type": "string",              "format": "uri"          },          "processor": {              "type": "string", -            "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"] +            "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"] +        }, +        "audio": { +            "type": "object", +            "additionalProperties": false, +            "properties": { +                "pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, +                "voices": {"type": "boolean"} +            } +        }, +        "backlight": { +            "type": "object", +            "additionalProperties": false, +            "properties": { +                "breathing": {"type": "boolean"}, +                "breathing_period": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, +                "levels": { +                    "type": "number", +                    "min": 1, +                    "max": 31, +                    "multipleOf": 1 +                }, +                "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"} +            } +        }, +        "bluetooth": { +            "type": "object", +            "additionalProperties": false, +            "properties": { +                "driver": { +                    "type": "string", +                    "enum": ["AdafruitBLE", "RN42"] +                }, +                "lto": {"type": "boolean"}, +            }          },          "board": {              "type": "string", @@ -34,68 +56,55 @@          },          "bootloader": {              "type": "string", -            "enum": ["atmel-dfu", "bootloadHID", "caterina", "halfkay", "kiibohd", "lufa-dfu", "lufa-ms", "micronucleus", "qmk-dfu", "stm32-dfu", "stm32duino", "unknown", "USBasp", "tinyuf2"] +            "enum": ["atmel-dfu", "bootloadHID", "caterina", "halfkay", "kiibohd", "lufa-dfu", "lufa-ms", "micronucleus", "qmk-dfu", "qmk-hid", "stm32-dfu", "stm32duino", "unknown", "USBasp", "tinyuf2"],          }, -        "diode_direction": { +        "bootloader_instructions": {              "type": "string", -            "enum": ["COL2ROW", "ROW2COL"] +            "description": "Instructions for putting the keyboard into a mode that allows for firmware flashing."          }, -        "debounce": { -            "type": "number", -            "min": 0, -            "multipleOf": 1 +        "build": { +            "type": "object", +            "additionalProperties": false, +            "properties": { +                "debounce_type": { +                    "type": "string", +                    "enum": ["custom", "eager_pk", "eager_pr", "sym_defer_pk", "sym_eager_pk"] +                }, +                "firmware_format": { +                    "type": "string", +                    "enum": ["bin", "hex", "uf2"] +                }, +                "lto": {"type": "boolean"}, +            }          }, -        "height": { -            "type": "number", -            "min": 0.25 +        "diode_direction": { +            "type": "string", +            "enum": ["COL2ROW", "ROW2COL"]          }, -        "width": { -            "type": "number", -            "min": 0.25 +        "debounce": {"$ref": "qmk.definitions.v1#/unsigned_int"}, +        "combo": { +            "type": "object", +            "properties": { +                "count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, +                "term": {"$ref": "qmk.definitions.v1#/unsigned_int"} +            }          },          "community_layouts": {              "type": "array", -            "items": { -                "type": "string", -                "minLength": 2, -                "pattern": "^[0-9a-z_]*$" -            } -        }, -        "features": { -            "type": "object", -            "additionalProperties": {"type": "boolean"} +            "items": {"$ref": "qmk.definitions.v1#/filename"}          }, +        "features": {"$ref": "qmk.definitions.v1#/boolean_array"},          "indicators": {              "type": "object",              "properties": { -                "caps_lock": { -                    "type": "string", -                    "pattern": "^[A-K]\\d{1,2}$" -                }, -                "num_lock": { -                    "type": "string", -                    "pattern": "^[A-K]\\d{1,2}$" -                }, -                "scroll_lock": { -                    "type": "string", -                    "pattern": "^[A-K]\\d{1,2}$" -                } +                "caps_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}, +                "num_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}, +                "scroll_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}              }          },          "layout_aliases": {              "type": "object", -            "additionalProperties": { -                "oneOf": [ -                    { -                        "type": "string", -                        "enum": ["LAYOUT", "LAYOUT_planck_1x2uC"] -                    }, -                    { -                        "type": "string", -                        "pattern": "^LAYOUT_[0-9a-z_]*$" -                    } -                ] -            } +            "additionalProperties": {"$ref": "qmk.definitions.v1#/layout_macro"}          },          "layouts": {              "type": "object", @@ -109,11 +118,7 @@                      "c_macro": {                          "type": "boolean"                      }, -                    "key_count": { -                        "type": "number", -                        "min": 0, -                        "multipleOf": 1 -                    }, +                    "key_count": {"$ref": "qmk.definitions.v1#/key_unit"},                      "layout": {                          "type": "array",                          "items": { @@ -131,101 +136,61 @@                                          "multipleOf": 1                                      }                                  }, -                                "h": { -                                    "type": "number", -                                    "min": 0.25 -                                }, -                                "r": { -                                    "type": "number", -                                    "min": 0 -                                }, -                                "rx": { -                                    "type": "number", -                                    "min": 0 -                                }, -                                "ry": { -                                    "type": "number", -                                    "min": 0 -                                }, -                                "w": { -                                    "type": "number", -                                    "min": 0.25 -                                }, -                                "x": { -                                    "type": "number", -                                    "min": 0 -                                }, -                                "y": { -                                    "type": "number", -                                    "min": 0 -                                } +                                "key_count": {"$ref": "qmk.definitions.v1#/key_unit"}, +                                "r": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}, +                                "rx": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}, +                                "ry": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}, +                                "h": {"$ref": "qmk.definitions.v1#/key_unit"}, +                                "w": {"$ref": "qmk.definitions.v1#/key_unit"}, +                                "x": {"$ref": "qmk.definitions.v1#/key_unit"}, +                                "y": {"$ref": "qmk.definitions.v1#/key_unit"}                              }                          }                      }                  }              }          }, +        "leader_key": { +            "type": "object", +            "properties": { +                "timing": {"type": "boolean"}, +                "strict_processing": {"type": "boolean"}, +                "timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} +            } +        },          "matrix_pins": {              "type": "object",              "additionalProperties": false,              "properties": { +                "custom": {"type": "boolean"}, +                "custom_lite": {"type": "boolean"}, +                "ghost": {"type": "boolean"}, +                "io_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},                  "direct": {                      "type": "array", -                    "items": { -                        "type": "array", -                        "items": { -                            "oneOf": [ -                                { -                                    "type": "string", -                                    "pattern": "^[A-K]\\d{1,2}$" -                                }, -                                { -                                    "type": "number", -                                    "multipleOf": 1 -                                }, -                                { -                                    "type": "null" -                                } -                            ] -                        } -                    } -                }, -                "cols": { -                    "type": "array", -                    "items": { -                        "oneOf": [ -                            { -                                "type": "string", -                                "pattern": "^[A-K]\\d{1,2}$" -                            }, -                            { -                                "type": "number", -                                "multipleOf": 1 -                            }, -                            { -                                "type": "null" -                            } -                        ] -                    } +                    "items": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}                  }, -                "rows": { -                    "type": "array", -                    "items": { -                        "oneOf": [ -                            { -                                "type": "string", -                                "pattern": "^[A-K]\\d{1,2}$" -                            }, -                            { -                                "type": "number", -                                "multipleOf": 1 -                            }, -                            { -                                "type": "null" -                            } -                        ] -                    } -                } +                "cols": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, +                "rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, +                "unused": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} +            } +        }, +        "mouse_key": { +            "type": "object", +            "properties": { +                "enabled": {"type": "boolean"}, +                "delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} +                "interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} +                "max_speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} +                "time_to_max": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} +                "wheel_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} +            } +        }, +        "oneshot": { +            "type": "object", +            "properties": { +                "tap_toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"}, +                "timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}              }          },          "rgblight": { @@ -238,88 +203,160 @@                          "type": "boolean"                      }                  }, -                "brightness_steps": { -                    "type": "number", -                    "min": 0, -                    "multipleOf": 1 -                }, -                "hue_steps": { -                    "type": "number", -                    "min": 0, -                    "multipleOf": 1 +                "brightness_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, +                "hue_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, +                "layers": { +                    "type": "object", +                    "additionalProperties": false, +                    "properties": { +                        "blink": {"type": "boolean"}, +                        "enabled": {"type": "boolean"}, +                        "max": { +                            "type": "number", +                            "min": 1, +                            "max": 32, +                            "multipleOf": 1 +                        }, +                        "override_rgb": {"type": "boolean"} +                    }                  }, -                "led_count": { -                    "type": "number", -                    "min": 0, -                    "multipleOf": 1 +                "led_count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, +                "max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, +                "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, +                "rgbw": {"type": "boolean"}, +                "saturation_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, +                "sleep": {"type": "boolean"}, +                "split": {"type": "boolean"}, +                "split_count": { +                    "type": "array", +                    "minLength": 2, +                    "maxLength": 2, +                    "items": {"$ref": "qmk.definitions.v1#/unsigned_int"} +                } +            } +        }, +        "split": { +            "type": "object", +            "additionalProperties": false, +            "properties": { +                "enabled": {"type": "boolean"}, +                "matrix_grid": { +                    "type": "array", +                    "items": {"$ref": "qmk.definitions.v1#/mcu_pin"}                  }, -                "max_brightness": { -                    "type": "number", -                    "min": 0, -                    "max": 255, -                    "multipleOf": 1 +                "matrix_pins": { +                    "type": "object", +                    "additionalProperties": false, +                    "properties": { +                        "right": { +                            "type": "object", +                            "additionalProperties": false, +                            "properties": { +                                "direct": { +                                    "type": "array", +                                    "items": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} +                                }, +                                "cols": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, +                                "rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, +                                "unused": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} +                            } +                        } +                    }                  }, -                "pin": { +                "main": {                      "type": "string", -                    "pattern": "^[A-K]\\d{1,2}$" +                    "enum": ["eeprom", "left", "matrix_grid", "pin", "right"]                  }, -                "saturation_steps": { +                "soft_serial_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, +                "soft_serial_speed": {                      "type": "number",                      "min": 0, +                    "max": 5,                      "multipleOf": 1                  }, -                "sleep": {"type": "boolean"}, -                "split": {"type": "boolean"}, -                "split_count": { -                    "type": "array", -                    "minLength": 2, -                    "maxLength": 2, -                    "items": { -                        "type": "number", -                        "min": 0, -                        "multipleOf": 1 +                "transport": { +                    "type": "object", +                    "additionalProperties": false, +                    "properties": { +                        "protocol": { +                            "type": "string", +                            "enum": ["custom", "i2c", "serial", "serial_usart"] +                        }, +                        "sync_matrix_state": {"type": "boolean"}, +                        "sync_modifiers": {"type": "boolean"} +                    } +                }, +                "usb_detect": { +                    "type": "object", +                    "additionalProperties": false, +                    "properties": { +                        "enabled": {"type": "boolean"}, +                        "polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int"}, +                        "timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}                      }                  }              }          }, +        "tags": { +            "type": "array", +            "items": {"type": "string"} +        }, +        "tapping": { +            "type": "object", +            "properties": { +                "force_hold": {"type": "boolean"}, +                "force_hold_per_key": {"type": "boolean"}, +                "ignore_mod_tap_interrupt": {"type": "boolean"}, +                "ignore_mod_tap_interrupt_per_key": {"type": "boolean"}, +                "permissive_hold": {"type": "boolean"}, +                "permissive_hold_per_key": {"type": "boolean"}, +                "retro": {"type": "boolean"}, +                "retro_per_key": {"type": "boolean"}, +                "term": {"$ref": "qmk.definitions.v1#/unsigned_int"}, +                "term_per_key": {"type": "boolean"}, +                "toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"}, +            } +        },          "usb": {              "type": "object",              "additionalProperties": false,              "properties": { -                "device_ver": { -                    "type": "string", -                    "pattern": "^[0-9A-F]x[0-9A-F][0-9A-F][0-9A-F][0-9A-F]" -                }, -                "pid": { -                    "type": "string", -                    "pattern": "^[0-9A-F]x[0-9A-F][0-9A-F][0-9A-F][0-9A-F]" +                "device_ver": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, +                "force_nkro": {"type": "boolean"}, +                "pid": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, +                "vid": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, +                "max_power": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, +                "no_startup_check": {"type": "boolean"}, +                "polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, +                "shared_endpoint": { +                    "type": "object", +                    "additionalProperties": false, +                    "properties": { +                        "keyboard": {"type": "boolean"}, +                        "mouse": {"type": "boolean"} +                    }                  }, -                "vid": { -                    "type": "string", -                    "pattern": "^[0-9A-F]x[0-9A-F][0-9A-F][0-9A-F][0-9A-F]" -                } +                "suspend_wakeup_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, +                "wait_for": {"type": "boolean"}, +            } +        }, +        "qmk": { +            "type": "object", +            "additionalProperties": false, +            "properties": { +                "keys_per_scan": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, +                "tap_keycode_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, +                "tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},              }          },          "qmk_lufa_bootloader": {              "type": "object",              "additionalProperties": false,              "properties": { -                "esc_output": { -                    "type": "string", -                    "pattern": "^[A-K]\\d{1,2}$" -                }, -                "esc_input": { -                    "type": "string", -                    "pattern": "^[A-K]\\d{1,2}$" -                }, -                "led": { -                    "type": "string", -                    "pattern": "^[A-K]\\d{1,2}$" -                }, -                "speaker": { -                    "type": "string", -                    "pattern": "^[A-K]\\d{1,2}$" -                } +                "esc_output": {"$ref": "qmk.definitions.v1#/mcu_pin"}, +                "esc_input": {"$ref": "qmk.definitions.v1#/mcu_pin"}, +                "led": {"$ref": "qmk.definitions.v1#/mcu_pin"}, +                "speaker": {"$ref": "qmk.definitions.v1#/mcu_pin"}              }          }      } diff --git a/data/schemas/keymap.jsonschema b/data/schemas/keymap.jsonschema new file mode 100644 index 0000000000..a4bdab966b --- /dev/null +++ b/data/schemas/keymap.jsonschema @@ -0,0 +1,24 @@ +{ +    "$schema": "http://json-schema.org/draft-07/schema#", +    "$id": "qmk.keymap.v1", +    "title": "Keymap Information", +    "type": "object", +    "properties": { +        "author": {"type": "string"}, +        "keyboard": {"$ref": "qmk.definitions.v1#/text_identifier"}, +        "keymap": {"$ref": "qmk.definitions.v1#/text_identifier"}, +        "layout": {"$ref": "qmk.definitions.v1#/layout_macro"}, +        "layers": { +            "type": "array", +            "items": { +                "type": "array", +                "items": {"type": "string"} +            } +        }, +        "config": {"$ref": "qmk.keyboard.v1"}, +        "notes": { +            "type": "string", +            "description": "asdf" +        } +    } +}
\ No newline at end of file  | 
