From a1a5869ef871937c2ae7646ab639c4f5ffe59355 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 27 Jun 2025 08:17:45 +0100 Subject: [PATCH] Add MATRIX_MASKED DD config (#25383) --- data/mappings/info_config.hjson | 1 + data/schemas/keyboard.jsonschema | 1 + docs/reference_info_json.md | 3 +++ lib/python/qmk/cli/generate/config_h.py | 15 --------------- lib/python/qmk/info.py | 20 ++++++++++++++++++++ 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson index e4def1a4d72..356dd6ba526 100644 --- a/data/mappings/info_config.hjson +++ b/data/mappings/info_config.hjson @@ -120,6 +120,7 @@ "MATRIX_HAS_GHOST": {"info_key": "matrix_pins.ghost", "value_type": "flag"}, "MATRIX_INPUT_PRESSED_STATE": {"info_key": "matrix_pins.input_pressed_state", "value_type": "int"}, "MATRIX_IO_DELAY": {"info_key": "matrix_pins.io_delay", "value_type": "int"}, + "MATRIX_MASKED": {"info_key": "matrix_pins.masked", "value_type": "flag"}, // Mouse Keys "MOUSEKEY_DELAY": {"info_key": "mousekey.delay", "value_type": "int"}, diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index 3aa259605ea..13ceec5afab 100644 --- a/data/schemas/keyboard.jsonschema +++ b/data/schemas/keyboard.jsonschema @@ -473,6 +473,7 @@ "ghost": {"type": "boolean"}, "input_pressed_state": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "io_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "masked": {"type": "boolean"}, "direct": { "type": "array", "items": {"$ref": "./definitions.jsonschema#/mcu_pin_array"} diff --git a/docs/reference_info_json.md b/docs/reference_info_json.md index a64f2992b55..71d1c5c865f 100644 --- a/docs/reference_info_json.md +++ b/docs/reference_info_json.md @@ -480,6 +480,9 @@ Configures the [LED Matrix](features/led_matrix) feature. * `io_delay` Number * The amount of time to wait between row/col selection and col/row pin reading, in microseconds. * Default: `30` (30 µs) + * `masked` Boolean + * Whether configured intersections should be ignored. + * Default: `false` * `rows` Array: Pin * A list of GPIO pins connected to the matrix rows. * Example: `["B0", "B1", "B2"]` diff --git a/lib/python/qmk/cli/generate/config_h.py b/lib/python/qmk/cli/generate/config_h.py index d613f7b92c1..d6d0299291c 100755 --- a/lib/python/qmk/cli/generate/config_h.py +++ b/lib/python/qmk/cli/generate/config_h.py @@ -72,19 +72,6 @@ def generate_matrix_size(kb_info_json, config_h_lines): config_h_lines.append(generate_define('MATRIX_ROWS', kb_info_json['matrix_size']['rows'])) -def generate_matrix_masked(kb_info_json, config_h_lines): - """"Enable matrix mask if required""" - mask_required = False - - if 'matrix_grid' in kb_info_json.get('dip_switch', {}): - mask_required = True - if 'matrix_grid' in kb_info_json.get('split', {}).get('handedness', {}): - mask_required = True - - if mask_required: - config_h_lines.append(generate_define('MATRIX_MASKED')) - - def generate_config_items(kb_info_json, config_h_lines): """Iterate through the info_config map to generate basic config values. """ @@ -202,8 +189,6 @@ def generate_config_h(cli): generate_matrix_size(kb_info_json, config_h_lines) - generate_matrix_masked(kb_info_json, config_h_lines) - if 'matrix_pins' in kb_info_json: config_h_lines.append(matrix_pins(kb_info_json['matrix_pins'])) diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py index db8a02d1325..b4fa481b1bc 100644 --- a/lib/python/qmk/info.py +++ b/lib/python/qmk/info.py @@ -254,6 +254,7 @@ def info_json(keyboard, force_layout=None): # Ensure that we have various calculated values info_data = _matrix_size(info_data) info_data = _joystick_axis_count(info_data) + info_data = _matrix_masked(info_data) # Merge in data from info_data = _extract_led_config(info_data, str(keyboard)) @@ -830,6 +831,25 @@ def _joystick_axis_count(info_data): return info_data +def _matrix_masked(info_data): + """"Add info_data['matrix_pins.masked'] if required""" + mask_required = False + + if 'matrix_grid' in info_data.get('dip_switch', {}): + mask_required = True + if 'matrix_grid' in info_data.get('split', {}).get('handedness', {}): + mask_required = True + + if mask_required: + if 'masked' not in info_data.get('matrix_pins', {}): + if 'matrix_pins' not in info_data: + info_data['matrix_pins'] = {} + + info_data['matrix_pins']['masked'] = True + + return info_data + + def _check_matrix(info_data): """Check the matrix to ensure that row/column count is consistent. """