|
@@ -440,6 +440,47 @@ def _extract_device_version(info_data):
|
|
|
info_data['usb']['device_version'] = f'{major}.{minor}.{revision}'
|
|
|
|
|
|
|
|
|
+def _config_to_json(key_type, config_value):
|
|
|
+ """Convert config value using spec
|
|
|
+ """
|
|
|
+ if key_type.startswith('array'):
|
|
|
+ if '.' in key_type:
|
|
|
+ key_type, array_type = key_type.split('.', 1)
|
|
|
+ else:
|
|
|
+ array_type = None
|
|
|
+
|
|
|
+ config_value = config_value.replace('{', '').replace('}', '').strip()
|
|
|
+
|
|
|
+ if array_type == 'int':
|
|
|
+ return list(map(int, config_value.split(',')))
|
|
|
+ else:
|
|
|
+ return config_value.split(',')
|
|
|
+
|
|
|
+ elif key_type == 'bool':
|
|
|
+ return config_value in true_values
|
|
|
+
|
|
|
+ elif key_type == 'hex':
|
|
|
+ return '0x' + config_value[2:].upper()
|
|
|
+
|
|
|
+ elif key_type == 'list':
|
|
|
+ return config_value.split()
|
|
|
+
|
|
|
+ elif key_type == 'int':
|
|
|
+ return int(config_value)
|
|
|
+
|
|
|
+ elif key_type == 'str':
|
|
|
+ return config_value.strip('"')
|
|
|
+
|
|
|
+ elif key_type == 'bcd_version':
|
|
|
+ major = int(config_value[2:4])
|
|
|
+ minor = int(config_value[4])
|
|
|
+ revision = int(config_value[5])
|
|
|
+
|
|
|
+ return f'{major}.{minor}.{revision}'
|
|
|
+
|
|
|
+ return config_value
|
|
|
+
|
|
|
+
|
|
|
def _extract_config_h(info_data, config_c):
|
|
|
"""Pull some keyboard information from existing config.h files
|
|
|
"""
|
|
@@ -452,47 +493,16 @@ def _extract_config_h(info_data, config_c):
|
|
|
key_type = info_dict.get('value_type', 'raw')
|
|
|
|
|
|
try:
|
|
|
+ if config_key in config_c and info_dict.get('invalid', False):
|
|
|
+ _log_error(info_data, '%s in config.h is no longer a valid option' % config_key)
|
|
|
+ elif config_key in config_c and info_dict.get('deprecated', False):
|
|
|
+ _log_warning(info_data, '%s in config.h is deprecated and will be removed at a later date' % config_key)
|
|
|
+
|
|
|
if config_key in config_c and info_dict.get('to_json', True):
|
|
|
if dotty_info.get(info_key) and info_dict.get('warn_duplicate', True):
|
|
|
_log_warning(info_data, '%s in config.h is overwriting %s in info.json' % (config_key, info_key))
|
|
|
|
|
|
- if key_type.startswith('array'):
|
|
|
- if '.' in key_type:
|
|
|
- key_type, array_type = key_type.split('.', 1)
|
|
|
- else:
|
|
|
- array_type = None
|
|
|
-
|
|
|
- config_value = config_c[config_key].replace('{', '').replace('}', '').strip()
|
|
|
-
|
|
|
- if array_type == 'int':
|
|
|
- dotty_info[info_key] = list(map(int, config_value.split(',')))
|
|
|
- else:
|
|
|
- dotty_info[info_key] = config_value.split(',')
|
|
|
-
|
|
|
- elif key_type == 'bool':
|
|
|
- dotty_info[info_key] = config_c[config_key] in true_values
|
|
|
-
|
|
|
- elif key_type == 'hex':
|
|
|
- dotty_info[info_key] = '0x' + config_c[config_key][2:].upper()
|
|
|
-
|
|
|
- elif key_type == 'list':
|
|
|
- dotty_info[info_key] = config_c[config_key].split()
|
|
|
-
|
|
|
- elif key_type == 'int':
|
|
|
- dotty_info[info_key] = int(config_c[config_key])
|
|
|
-
|
|
|
- elif key_type == 'str':
|
|
|
- dotty_info[info_key] = config_c[config_key].strip('"')
|
|
|
-
|
|
|
- elif key_type == 'bcd_version':
|
|
|
- major = int(config_c[config_key][2:4])
|
|
|
- minor = int(config_c[config_key][4])
|
|
|
- revision = int(config_c[config_key][5])
|
|
|
-
|
|
|
- dotty_info[info_key] = f'{major}.{minor}.{revision}'
|
|
|
-
|
|
|
- else:
|
|
|
- dotty_info[info_key] = config_c[config_key]
|
|
|
+ dotty_info[info_key] = _config_to_json(key_type, config_c[config_key])
|
|
|
|
|
|
except Exception as e:
|
|
|
_log_warning(info_data, f'{config_key}->{info_key}: {e}')
|
|
@@ -547,40 +557,16 @@ def _extract_rules_mk(info_data, rules):
|
|
|
key_type = info_dict.get('value_type', 'raw')
|
|
|
|
|
|
try:
|
|
|
+ if rules_key in rules and info_dict.get('invalid', False):
|
|
|
+ _log_error(info_data, '%s in rules.mk is no longer a valid option' % rules_key)
|
|
|
+ elif rules_key in rules and info_dict.get('deprecated', False):
|
|
|
+ _log_warning(info_data, '%s in rules.mk is deprecated and will be removed at a later date' % rules_key)
|
|
|
+
|
|
|
if rules_key in rules and info_dict.get('to_json', True):
|
|
|
if dotty_info.get(info_key) and info_dict.get('warn_duplicate', True):
|
|
|
_log_warning(info_data, '%s in rules.mk is overwriting %s in info.json' % (rules_key, info_key))
|
|
|
|
|
|
- if key_type.startswith('array'):
|
|
|
- if '.' in key_type:
|
|
|
- key_type, array_type = key_type.split('.', 1)
|
|
|
- else:
|
|
|
- array_type = None
|
|
|
-
|
|
|
- rules_value = rules[rules_key].replace('{', '').replace('}', '').strip()
|
|
|
-
|
|
|
- if array_type == 'int':
|
|
|
- dotty_info[info_key] = list(map(int, rules_value.split(',')))
|
|
|
- else:
|
|
|
- dotty_info[info_key] = rules_value.split(',')
|
|
|
-
|
|
|
- elif key_type == 'list':
|
|
|
- dotty_info[info_key] = rules[rules_key].split()
|
|
|
-
|
|
|
- elif key_type == 'bool':
|
|
|
- dotty_info[info_key] = rules[rules_key] in true_values
|
|
|
-
|
|
|
- elif key_type == 'hex':
|
|
|
- dotty_info[info_key] = '0x' + rules[rules_key][2:].upper()
|
|
|
-
|
|
|
- elif key_type == 'int':
|
|
|
- dotty_info[info_key] = int(rules[rules_key])
|
|
|
-
|
|
|
- elif key_type == 'str':
|
|
|
- dotty_info[info_key] = rules[rules_key].strip('"')
|
|
|
-
|
|
|
- else:
|
|
|
- dotty_info[info_key] = rules[rules_key]
|
|
|
+ dotty_info[info_key] = _config_to_json(key_type, rules[rules_key])
|
|
|
|
|
|
except Exception as e:
|
|
|
_log_warning(info_data, f'{rules_key}->{info_key}: {e}')
|