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