From 0326355edcfd8008646d2ff2f6eca3e69fdc5738 Mon Sep 17 00:00:00 2001
From: Joel Challis
Date: Mon, 9 Jun 2025 05:08:56 +0100
Subject: Remove `DEFAULT_FOLDER` handling (#23281)
---
lib/python/qmk/cli/ci/validate_aliases.py | 6 +-----
lib/python/qmk/cli/list/keyboards.py | 3 +--
lib/python/qmk/cli/migrate.py | 4 ++--
lib/python/qmk/cli/resolve_alias.py | 2 +-
4 files changed, 5 insertions(+), 10 deletions(-)
(limited to 'lib/python/qmk/cli')
diff --git a/lib/python/qmk/cli/ci/validate_aliases.py b/lib/python/qmk/cli/ci/validate_aliases.py
index 7f781d4397..8b062dbe56 100644
--- a/lib/python/qmk/cli/ci/validate_aliases.py
+++ b/lib/python/qmk/cli/ci/validate_aliases.py
@@ -2,7 +2,7 @@
"""
from milc import cli
-from qmk.keyboard import resolve_keyboard, keyboard_folder, keyboard_alias_definitions
+from qmk.keyboard import keyboard_folder, keyboard_alias_definitions
def _safe_keyboard_folder(target):
@@ -17,10 +17,6 @@ def _target_keyboard_exists(target):
if not target:
return False
- # If the target directory existed but there was no rules.mk or rules.mk was incorrectly parsed, then we can't build it.
- if not resolve_keyboard(target):
- return False
-
# If the target directory exists but it itself has an invalid alias or invalid rules.mk, then we can't build it either.
if not _safe_keyboard_folder(target):
return False
diff --git a/lib/python/qmk/cli/list/keyboards.py b/lib/python/qmk/cli/list/keyboards.py
index 405b9210e4..8b6c451673 100644
--- a/lib/python/qmk/cli/list/keyboards.py
+++ b/lib/python/qmk/cli/list/keyboards.py
@@ -5,10 +5,9 @@ from milc import cli
import qmk.keyboard
-@cli.argument('--no-resolve-defaults', arg_only=True, action='store_false', help='Ignore any "DEFAULT_FOLDER" within keyboards rules.mk')
@cli.subcommand("List the keyboards currently defined within QMK")
def list_keyboards(cli):
"""List the keyboards currently defined within QMK
"""
- for keyboard_name in qmk.keyboard.list_keyboards(cli.args.no_resolve_defaults):
+ for keyboard_name in qmk.keyboard.list_keyboards():
print(keyboard_name)
diff --git a/lib/python/qmk/cli/migrate.py b/lib/python/qmk/cli/migrate.py
index 0bab5c1949..d0f195d737 100644
--- a/lib/python/qmk/cli/migrate.py
+++ b/lib/python/qmk/cli/migrate.py
@@ -6,14 +6,14 @@ from dotty_dict import dotty
from milc import cli
-from qmk.keyboard import keyboard_completer, keyboard_folder, resolve_keyboard
+from qmk.keyboard import keyboard_completer, keyboard_folder
from qmk.info import info_json, find_info_json
from qmk.json_encoders import InfoJSONEncoder
from qmk.json_schema import json_load
def _candidate_files(keyboard):
- kb_dir = Path(resolve_keyboard(keyboard))
+ kb_dir = Path(keyboard)
cur_dir = Path('keyboards')
files = []
diff --git a/lib/python/qmk/cli/resolve_alias.py b/lib/python/qmk/cli/resolve_alias.py
index b9ffb46618..dff2242b28 100644
--- a/lib/python/qmk/cli/resolve_alias.py
+++ b/lib/python/qmk/cli/resolve_alias.py
@@ -5,7 +5,7 @@ from milc import cli
@cli.argument('--allow-unknown', arg_only=True, action='store_true', help="Return original if rule is not a valid keyboard.")
@cli.argument('keyboard', arg_only=True, help='The keyboard\'s name')
-@cli.subcommand('Resolve DEFAULT_FOLDER and any keyboard_aliases for provided rule')
+@cli.subcommand('Resolve any keyboard_aliases for provided rule')
def resolve_alias(cli):
try:
print(keyboard_folder(cli.args.keyboard))
--
cgit v1.2.3
From a1a5869ef871937c2ae7646ab639c4f5ffe59355 Mon Sep 17 00:00:00 2001
From: Joel Challis
Date: Fri, 27 Jun 2025 08:17:45 +0100
Subject: 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(-)
(limited to 'lib/python/qmk/cli')
diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson
index e4def1a4d7..356dd6ba52 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 3aa259605e..13ceec5afa 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 a64f2992b5..71d1c5c865 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 d613f7b92c..d6d0299291 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 db8a02d132..b4fa481b1b 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.
"""
--
cgit v1.2.3
From 865c29f4dec268da53ccc290217c957307275a93 Mon Sep 17 00:00:00 2001
From: Joel Challis
Date: Thu, 17 Jul 2025 13:36:04 +0100
Subject: Ensure keyboard aliases do not point to themselves (#25500)
---
lib/python/qmk/cli/ci/validate_aliases.py | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
(limited to 'lib/python/qmk/cli')
diff --git a/lib/python/qmk/cli/ci/validate_aliases.py b/lib/python/qmk/cli/ci/validate_aliases.py
index 8b062dbe56..4f2fe6c941 100644
--- a/lib/python/qmk/cli/ci/validate_aliases.py
+++ b/lib/python/qmk/cli/ci/validate_aliases.py
@@ -25,6 +25,21 @@ def _target_keyboard_exists(target):
return True
+def _alias_not_self(alias):
+ """Check if alias points to itself, either directly or within a circular reference
+ """
+ aliases = keyboard_alias_definitions()
+
+ found = set()
+ while alias in aliases:
+ found.add(alias)
+ alias = aliases[alias].get('target', alias)
+ if alias in found:
+ return False
+
+ return True
+
+
@cli.subcommand('Validates the list of keyboard aliases.', hidden=True)
def ci_validate_aliases(cli):
aliases = keyboard_alias_definitions()
@@ -32,7 +47,11 @@ def ci_validate_aliases(cli):
success = True
for alias in aliases.keys():
target = aliases[alias].get('target', None)
- if not _target_keyboard_exists(target):
+ if not _alias_not_self(alias):
+ cli.log.error(f'Keyboard alias {alias} should not point to itself')
+ success = False
+
+ elif not _target_keyboard_exists(target):
cli.log.error(f'Keyboard alias {alias} has a target that doesn\'t exist: {target}')
success = False
--
cgit v1.2.3