diff options
Diffstat (limited to 'lib/python/qmk/info.py')
-rw-r--r-- | lib/python/qmk/info.py | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py index 7e588b5182..e73d825696 100644 --- a/lib/python/qmk/info.py +++ b/lib/python/qmk/info.py @@ -10,7 +10,6 @@ from qmk.constants import CHIBIOS_PROCESSORS, LUFA_PROCESSORS, VUSB_PROCESSORS from qmk.c_parse import find_layouts, parse_config_h_file, find_led_config from qmk.json_schema import deep_update, json_load, validate from qmk.keyboard import config_h, rules_mk -from qmk.keymap import list_keymaps, locate_keymap from qmk.commands import parse_configurator_json from qmk.makefile import parse_rules_mk_file from qmk.math import compute @@ -53,7 +52,7 @@ def _validate(keyboard, info_data): community_layouts_names = list(map(lambda layout: f'LAYOUT_{layout}', community_layouts)) # Make sure we have at least one layout - if len(layouts) == 0: + if len(layouts) == 0 or all(not layout.get('json_layout', False) for layout in layouts.values()): _log_error(info_data, 'No LAYOUTs defined! Need at least one layout defined in info.json.') # Providing only LAYOUT_all "because I define my layouts in a 3rd party tool" @@ -99,10 +98,6 @@ def info_json(keyboard): 'maintainer': 'qmk', } - # Populate the list of JSON keymaps - for keymap in list_keymaps(keyboard, c=False, fullpath=True): - info_data['keymaps'][keymap.name] = {'url': f'https://raw.githubusercontent.com/qmk/qmk_firmware/master/{keymap}/keymap.json'} - # Populate layout data layouts, aliases = _search_keyboard_h(keyboard) @@ -112,6 +107,7 @@ def info_json(keyboard): for layout_name, layout_json in layouts.items(): if not layout_name.startswith('LAYOUT_kc'): layout_json['c_macro'] = True + layout_json['json_layout'] = False info_data['layouts'][layout_name] = layout_json # Merge in the data from info.json, config.h, and rules.mk @@ -561,8 +557,16 @@ def _process_defaults(info_data): for default_type in defaults_map.keys(): thing_map = defaults_map[default_type] if default_type in info_data: - for key, value in thing_map.get(info_data[default_type], {}).items(): - info_data[key] = value + merged_count = 0 + thing_items = thing_map.get(info_data[default_type], {}).items() + for key, value in thing_items: + if key not in info_data: + info_data[key] = value + merged_count += 1 + + if merged_count == 0 and len(thing_items) > 0: + _log_warning(info_data, 'All defaults for \'%s\' were skipped, potential redundant config or misconfiguration detected' % (default_type)) + return info_data @@ -748,6 +752,7 @@ def arm_processor_rules(info_data, rules): """ info_data['processor_type'] = 'arm' info_data['protocol'] = 'ChibiOS' + info_data['platform_key'] = 'chibios' if 'STM32' in info_data['processor']: info_data['platform'] = 'STM32' @@ -755,6 +760,7 @@ def arm_processor_rules(info_data, rules): info_data['platform'] = rules['MCU_SERIES'] elif 'ARM_ATSAM' in rules: info_data['platform'] = 'ARM_ATSAM' + info_data['platform_key'] = 'arm_atsam' return info_data @@ -764,6 +770,7 @@ def avr_processor_rules(info_data, rules): """ info_data['processor_type'] = 'avr' info_data['platform'] = rules['ARCH'] if 'ARCH' in rules else 'unknown' + info_data['platform_key'] = 'avr' info_data['protocol'] = 'V-USB' if info_data['processor'] in VUSB_PROCESSORS else 'LUFA' # FIXME(fauxpark/anyone): Eventually we should detect the protocol by looking at PROTOCOL inherited from mcu_selection.mk: @@ -818,6 +825,7 @@ def merge_info_jsons(keyboard, info_data): msg = 'Number of keys for %s does not match! info.json specifies %d keys, C macro specifies %d' _log_error(info_data, msg % (layout_name, len(layout['layout']), len(info_data['layouts'][layout_name]['layout']))) else: + info_data['layouts'][layout_name]['json_layout'] = True for new_key, existing_key in zip(layout['layout'], info_data['layouts'][layout_name]['layout']): existing_key.update(new_key) else: @@ -825,6 +833,7 @@ def merge_info_jsons(keyboard, info_data): _log_error(info_data, f'Layout "{layout_name}" has no "matrix" definition in either "info.json" or "<keyboard>.h"!') else: layout['c_macro'] = False + layout['json_layout'] = True info_data['layouts'][layout_name] = layout # Update info_data with the new data @@ -864,6 +873,9 @@ def find_info_json(keyboard): def keymap_json_config(keyboard, keymap): """Extract keymap level config """ + # TODO: resolve keymap.py and info.py circular dependencies + from qmk.keymap import locate_keymap + keymap_folder = locate_keymap(keyboard, keymap).parent km_info_json = parse_configurator_json(keymap_folder / 'keymap.json') @@ -873,6 +885,9 @@ def keymap_json_config(keyboard, keymap): def keymap_json(keyboard, keymap): """Generate the info.json data for a specific keymap. """ + # TODO: resolve keymap.py and info.py circular dependencies + from qmk.keymap import locate_keymap + keymap_folder = locate_keymap(keyboard, keymap).parent # Files to scan |