From 384bb7ddc75b5272192467d812d21871c61c0f09 Mon Sep 17 00:00:00 2001 From: zvecr Date: Thu, 13 Oct 2022 02:21:15 +0100 Subject: [PATCH] Correctly handle 'latest' --- lib/python/qmk/xap/common.py | 38 ++++++++++++++++++- .../qmk/xap/gen_firmware/inline_generator.py | 26 +------------ 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/lib/python/qmk/xap/common.py b/lib/python/qmk/xap/common.py index a30b8d2f1ab..dc3c53e0221 100755 --- a/lib/python/qmk/xap/common.py +++ b/lib/python/qmk/xap/common.py @@ -1,5 +1,6 @@ """This script handles the XAP protocol data files. """ +import re import os import hjson import jsonschema @@ -17,6 +18,39 @@ from qmk.path import keyboard XAP_SPEC = 'xap.hjson' +def list_lighting_versions(feature): + """Return available versions - sorted newest first + """ + ret = [] + for file in Path('data/constants/').glob(f'{feature}_[0-9].[0-9].[0-9].json'): + ret.append(file.stem.split('_')[-1]) + + ret.sort(reverse=True) + return ret + + +def load_lighting_spec(feature, version='latest'): + """Build lighting data from the requested spec file + """ + if version == 'latest': + version = list_lighting_versions(feature)[0] + + spec = json_load(Path(f'data/constants/{feature}_{version}.json')) + + # preprocess for gross rgblight "mode + n" + for obj in spec.get('effects', {}).values(): + define = obj['key'] + offset = 0 + found = re.match('(.*)_(\\d+)$', define) + if found: + define = found.group(1) + offset = int(found.group(2)) - 1 + obj['define'] = define + obj['offset'] = offset + + return spec + + def _get_jinja2_env(data_templates_xap_subdir: str): templates_dir = os.path.join(QMK_FIRMWARE, 'data', 'templates', 'xap', data_templates_xap_subdir) j2 = Environment(loader=FileSystemLoader(templates_dir), autoescape=select_autoescape()) @@ -29,8 +63,8 @@ def render_xap_output(data_templates_xap_subdir, file_to_render, defs): j2.globals['to_snake'] = to_snake constants = {} - for feature in ['rgblight', 'rgb_matrix']: - constants[feature] = json_load(Path(f'data/constants/{feature}_0.0.1.json')) + for feature in ['rgblight', 'rgb_matrix', 'led_matrix']: + constants[feature] = load_lighting_spec(feature) return j2.get_template(file_to_render).render(xap=defs, xap_str=hjson.dumps(defs), constants=constants) diff --git a/lib/python/qmk/xap/gen_firmware/inline_generator.py b/lib/python/qmk/xap/gen_firmware/inline_generator.py index e61ec19f524..78ceb2aa1d3 100755 --- a/lib/python/qmk/xap/gen_firmware/inline_generator.py +++ b/lib/python/qmk/xap/gen_firmware/inline_generator.py @@ -1,13 +1,9 @@ """This script generates the XAP protocol generated header to be compiled into QMK. """ -import re -from pathlib import Path - from qmk.casing import to_snake from qmk.commands import dump_lines from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE -from qmk.xap.common import merge_xap_defs, route_conditions -from qmk.json_schema import json_load +from qmk.xap.common import merge_xap_defs, route_conditions, load_lighting_spec PREFIX_MAP = { 'rgblight': { @@ -25,24 +21,6 @@ PREFIX_MAP = { } -def _get_lighting_spec(feature): - version = '0.0.1' - spec = json_load(Path(f'data/constants/{feature}_{version}.json')) - - # preprocess for gross rgblight "mode + n" - for obj in spec.get('effects', {}).values(): - define = obj['key'] - offset = 0 - found = re.match('(.*)_(\\d+)$', define) - if found: - define = found.group(1) - offset = int(found.group(2)) - 1 - obj['define'] = define - obj['offset'] = offset - - return spec - - def _get_c_type(xap_type): if xap_type == 'bool': return 'bool' @@ -407,7 +385,7 @@ def _append_lighting_mapping(lines, xap_defs): ''') for feature in PREFIX_MAP.keys(): - spec = _get_lighting_spec(feature) + spec = load_lighting_spec(feature) lines.append(f'#ifdef {feature.upper()}_ENABLE') _append_lighting_map(lines, feature, spec)