Browse Source

Merge remote-tracking branch 'origin/develop' into xap

QMK Bot 3 years ago
parent
commit
36fe36201e
3 changed files with 13 additions and 1 deletions
  1. 2 0
      data/mappings/info_config.hjson
  2. 2 0
      data/schemas/keyboard.jsonschema
  3. 9 1
      lib/python/qmk/info.py

+ 2 - 0
data/mappings/info_config.hjson

@@ -71,6 +71,7 @@
     "LED_MATRIX_SPLIT": {"info_key": "led_matrix.split_count", "value_type": "array.int"},
     "LED_MATRIX_TIMEOUT": {"info_key": "led_matrix.timeout", "value_type": "int"},
     "LED_MATRIX_VAL_STEP": {"info_key": "led_matrix.val_steps", "value_type": "int"},
+    "LED_MATRIX_LED_COUNT": {"info_key": "led_matrix.led_count", "value_type": "int", "to_json": false},
 
     // LUFA Bootloader
     "QMK_ESC_INPUT": {"info_key": "qmk_lufa_bootloader.esc_input"},
@@ -109,6 +110,7 @@
     "RGB_MATRIX_SPLIT": {"info_key": "rgb_matrix.split_count", "value_type": "array.int"},
     "RGB_MATRIX_TIMEOUT": {"info_key": "rgb_matrix.timeout", "value_type": "int"},
     "RGB_MATRIX_VAL_STEP": {"info_key": "rgb_matrix.val_steps", "value_type": "int"},
+    "RGB_MATRIX_LED_COUNT": {"info_key": "rgb_matrix.led_count", "value_type": "int", "to_json": false},
 
     // RGBLight
     "RGBLED_NUM": {"info_key": "rgblight.led_count", "value_type": "int"},

+ 2 - 0
data/schemas/keyboard.jsonschema

@@ -372,6 +372,7 @@
                     }
                 },
                 "driver": {"type": "string"},
+                "led_count": {"$ref": "qmk.definitions.v1#/unsigned_int"},
                 "center_point": {
                     "type": "array",
                     "minItems": 2,
@@ -423,6 +424,7 @@
                     }
                 },
                 "driver": {"type": "string"},
+                "led_count": {"$ref": "qmk.definitions.v1#/unsigned_int"},
                 "center_point": {
                     "type": "array",
                     "minItems": 2,

+ 9 - 1
lib/python/qmk/info.py

@@ -55,7 +55,7 @@ def _get_key_left_position(key):
     return key['x'] - 0.25 if key.get('h', 1) == 2 and key.get('w', 1) == 1.25 else key['x']
 
 
-def _additional_validation(keyboard, info_data):
+def _additional_validation(keyboard, info_data):  # noqa: C901
     """Non schema checks
     """
     layouts = info_data.get('layouts', {})
@@ -105,6 +105,14 @@ def _additional_validation(keyboard, info_data):
             if not decl.get("aliases", []):
                 _log_error(info_data, f'Keycode {decl["key"]} has no short form alias')
 
+    # Ensure LED config is somewhat valid
+    for feature in ['rgb_matrix', 'led_matrix']:
+        if feature in info_data and all(key in info_data[feature] for key in ["layout", "led_count"]):
+            layout_count = len(info_data[feature]["layout"])
+            led_count = info_data[feature]["led_count"]
+            if led_count != layout_count:
+                _log_warning(info_data, '%s: mismatch between LED count (%d) and layout items (%d)' % (feature, led_count, layout_count))
+
 
 def _validate(keyboard, info_data):
     """Perform various validation on the provided info.json data