diff options
| -rwxr-xr-x | lib/python/qmk/cli/generate/config_h.py | 114 | ||||
| -rw-r--r-- | lib/python/qmk/tests/test_cli_commands.py | 20 | 
2 files changed, 41 insertions, 93 deletions
| diff --git a/lib/python/qmk/cli/generate/config_h.py b/lib/python/qmk/cli/generate/config_h.py index a2178bf1e9..d6e87c8803 100755 --- a/lib/python/qmk/cli/generate/config_h.py +++ b/lib/python/qmk/cli/generate/config_h.py @@ -13,6 +13,14 @@ from qmk.path import normpath  from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE +def generate_define(define, value=None): +    value = f' {value}' if value is not None else '' +    return f""" +#ifndef {define} +#    define {define}{value} +#endif // {define}""" + +  def direct_pins(direct_pins, postfix):      """Return the config.h lines that set the direct pins.      """ @@ -22,11 +30,7 @@ def direct_pins(direct_pins, postfix):          cols = ','.join(map(str, [col or 'NO_PIN' for col in row]))          rows.append('{' + cols + '}') -    return f""" -#ifndef DIRECT_PINS{postfix} -#   define DIRECT_PINS{postfix} {{ {", ".join(rows)} }} -#endif // DIRECT_PINS{postfix} -""" +    return generate_define(f'DIRECT_PINS{postfix}', f'{{ {", ".join(rows)} }}')  def pin_array(define, pins, postfix): @@ -34,11 +38,7 @@ def pin_array(define, pins, postfix):      """      pin_array = ', '.join(map(str, [pin or 'NO_PIN' for pin in pins])) -    return f""" -#ifndef {define}_PINS{postfix} -#   define {define}_PINS{postfix} {{ {pin_array} }} -#endif // {define}_PINS{postfix} -""" +    return generate_define(f'{define}_PINS{postfix}', f'{{ {pin_array} }}')  def matrix_pins(matrix_pins, postfix=''): @@ -62,18 +62,8 @@ def generate_matrix_size(kb_info_json, config_h_lines):      """Add the matrix size to the config.h.      """      if 'matrix_pins' in kb_info_json: -        col_count = kb_info_json['matrix_size']['cols'] -        row_count = kb_info_json['matrix_size']['rows'] - -        config_h_lines.append(f""" -#ifndef MATRIX_COLS -#   define MATRIX_COLS {col_count} -#endif // MATRIX_COLS - -#ifndef MATRIX_ROWS -#   define MATRIX_ROWS {row_count} -#endif // MATRIX_ROWS -""") +        config_h_lines.append(generate_define('MATRIX_COLS', kb_info_json['matrix_size']['cols'])) +        config_h_lines.append(generate_define('MATRIX_ROWS', kb_info_json['matrix_size']['rows']))  def generate_config_items(kb_info_json, config_h_lines): @@ -95,44 +85,23 @@ def generate_config_items(kb_info_json, config_h_lines):              continue          if key_type.startswith('array.array'): -            config_h_lines.append('') -            config_h_lines.append(f'#ifndef {config_key}') -            config_h_lines.append(f'#   define {config_key} {{ {", ".join(["{" + ",".join(list(map(str, x))) + "}" for x in config_value])} }}') -            config_h_lines.append(f'#endif // {config_key}') +            config_h_lines.append(generate_define(config_key, f'{{ {", ".join(["{" + ",".join(list(map(str, x))) + "}" for x in config_value])} }}'))          elif key_type.startswith('array'): -            config_h_lines.append('') -            config_h_lines.append(f'#ifndef {config_key}') -            config_h_lines.append(f'#   define {config_key} {{ {", ".join(map(str, config_value))} }}') -            config_h_lines.append(f'#endif // {config_key}') +            config_h_lines.append(generate_define(config_key, f'{{ {", ".join(map(str, config_value))} }}'))          elif key_type == 'bool':              if config_value: -                config_h_lines.append('') -                config_h_lines.append(f'#ifndef {config_key}') -                config_h_lines.append(f'#   define {config_key}') -                config_h_lines.append(f'#endif // {config_key}') +                config_h_lines.append(generate_define(config_key))          elif key_type == 'mapping':              for key, value in config_value.items(): -                config_h_lines.append('') -                config_h_lines.append(f'#ifndef {key}') -                config_h_lines.append(f'#   define {key} {value}') -                config_h_lines.append(f'#endif // {key}') +                config_h_lines.append(generate_define(key, value))          elif key_type == 'str':              escaped_str = config_value.replace('\\', '\\\\').replace('"', '\\"') -            config_h_lines.append('') -            config_h_lines.append(f'#ifndef {config_key}') -            config_h_lines.append(f'#   define {config_key} "{escaped_str}"') -            config_h_lines.append(f'#endif // {config_key}') +            config_h_lines.append(generate_define(config_key, f'"{escaped_str}"'))          elif key_type == 'bcd_version':              (major, minor, revision) = config_value.split('.') -            config_h_lines.append('') -            config_h_lines.append(f'#ifndef {config_key}') -            config_h_lines.append(f'#   define {config_key} 0x{major.zfill(2)}{minor}{revision}') -            config_h_lines.append(f'#endif // {config_key}') +            config_h_lines.append(generate_define(config_key, f'0x{major.zfill(2)}{minor}{revision}'))          else: -            config_h_lines.append('') -            config_h_lines.append(f'#ifndef {config_key}') -            config_h_lines.append(f'#   define {config_key} {config_value}') -            config_h_lines.append(f'#endif // {config_key}') +            config_h_lines.append(generate_define(config_key, config_value))  def generate_encoder_config(encoder_json, config_h_lines, postfix=''): @@ -145,24 +114,15 @@ def generate_encoder_config(encoder_json, config_h_lines, postfix=''):          b_pads.append(encoder["pin_b"])          resolutions.append(encoder.get("resolution", None)) -    config_h_lines.append(f'#ifndef ENCODERS_PAD_A{postfix}') -    config_h_lines.append(f'#   define ENCODERS_PAD_A{postfix} {{ { ", ".join(a_pads) } }}') -    config_h_lines.append(f'#endif // ENCODERS_PAD_A{postfix}') - -    config_h_lines.append(f'#ifndef ENCODERS_PAD_B{postfix}') -    config_h_lines.append(f'#   define ENCODERS_PAD_B{postfix} {{ { ", ".join(b_pads) } }}') -    config_h_lines.append(f'#endif // ENCODERS_PAD_B{postfix}') +    config_h_lines.append(generate_define(f'ENCODERS_PAD_A{postfix}', f'{{ {", ".join(a_pads)} }}')) +    config_h_lines.append(generate_define(f'ENCODERS_PAD_B{postfix}', f'{{ {", ".join(b_pads)} }}'))      if None in resolutions:          cli.log.debug("Unable to generate ENCODER_RESOLUTION configuration")      elif len(set(resolutions)) == 1: -        config_h_lines.append(f'#ifndef ENCODER_RESOLUTION{postfix}') -        config_h_lines.append(f'#   define ENCODER_RESOLUTION{postfix} { resolutions[0] }') -        config_h_lines.append(f'#endif // ENCODER_RESOLUTION{postfix}') +        config_h_lines.append(generate_define(f'ENCODER_RESOLUTION{postfix}', resolutions[0]))      else: -        config_h_lines.append(f'#ifndef ENCODER_RESOLUTIONS{postfix}') -        config_h_lines.append(f'#   define ENCODER_RESOLUTIONS{postfix} {{ { ", ".join(map(str,resolutions)) } }}') -        config_h_lines.append(f'#endif // ENCODER_RESOLUTIONS{postfix}') +        config_h_lines.append(generate_define(f'ENCODER_RESOLUTIONS{postfix}', f'{{ {", ".join(map(str,resolutions))} }}'))  def generate_split_config(kb_info_json, config_h_lines): @@ -171,35 +131,23 @@ def generate_split_config(kb_info_json, config_h_lines):          if kb_info_json['split']['primary'] in ('left', 'right'):              config_h_lines.append('')              config_h_lines.append('#ifndef MASTER_LEFT') -            config_h_lines.append('#   ifndef MASTER_RIGHT') +            config_h_lines.append('#    ifndef MASTER_RIGHT')              if kb_info_json['split']['primary'] == 'left': -                config_h_lines.append('#       define MASTER_LEFT') +                config_h_lines.append('#        define MASTER_LEFT')              elif kb_info_json['split']['primary'] == 'right': -                config_h_lines.append('#       define MASTER_RIGHT') -            config_h_lines.append('#   endif // MASTER_RIGHT') +                config_h_lines.append('#        define MASTER_RIGHT') +            config_h_lines.append('#    endif // MASTER_RIGHT')              config_h_lines.append('#endif // MASTER_LEFT')          elif kb_info_json['split']['primary'] == 'pin': -            config_h_lines.append('') -            config_h_lines.append('#ifndef SPLIT_HAND_PIN') -            config_h_lines.append('#   define SPLIT_HAND_PIN') -            config_h_lines.append('#endif // SPLIT_HAND_PIN') +            config_h_lines.append(generate_define('SPLIT_HAND_PIN'))          elif kb_info_json['split']['primary'] == 'matrix_grid': -            config_h_lines.append('') -            config_h_lines.append('#ifndef SPLIT_HAND_MATRIX_GRID') -            config_h_lines.append('#   define SPLIT_HAND_MATRIX_GRID {%s}' % (','.join(kb_info_json["split"]["matrix_grid"],))) -            config_h_lines.append('#endif // SPLIT_HAND_MATRIX_GRID') +            config_h_lines.append(generate_define('SPLIT_HAND_MATRIX_GRID', f'{{ {",".join(kb_info_json["split"]["matrix_grid"])} }}'))          elif kb_info_json['split']['primary'] == 'eeprom': -            config_h_lines.append('') -            config_h_lines.append('#ifndef EE_HANDS') -            config_h_lines.append('#   define EE_HANDS') -            config_h_lines.append('#endif // EE_HANDS') +            config_h_lines.append(generate_define('EE_HANDS'))      if 'protocol' in kb_info_json['split'].get('transport', {}):          if kb_info_json['split']['transport']['protocol'] == 'i2c': -            config_h_lines.append('') -            config_h_lines.append('#ifndef USE_I2C') -            config_h_lines.append('#   define USE_I2C') -            config_h_lines.append('#endif // USE_I2C') +            config_h_lines.append(generate_define('USE_I2C'))      if 'right' in kb_info_json['split'].get('matrix_pins', {}):          config_h_lines.append(matrix_pins(kb_info_json['split']['matrix_pins']['right'], '_RIGHT')) diff --git a/lib/python/qmk/tests/test_cli_commands.py b/lib/python/qmk/tests/test_cli_commands.py index c8c4e2f80c..9bfc5a0a79 100644 --- a/lib/python/qmk/tests/test_cli_commands.py +++ b/lib/python/qmk/tests/test_cli_commands.py @@ -263,16 +263,16 @@ def test_generate_rgb_breathe_table():  def test_generate_config_h():      result = check_subcommand('generate-config-h', '-kb', 'handwired/pytest/basic')      check_returncode(result) -    assert '#   define DEVICE_VER 0x0001' in result.stdout -    assert '#   define DIODE_DIRECTION COL2ROW' in result.stdout -    assert '#   define MANUFACTURER "none"' in result.stdout -    assert '#   define PRODUCT "pytest"' in result.stdout -    assert '#   define PRODUCT_ID 0x6465' in result.stdout -    assert '#   define VENDOR_ID 0xFEED' in result.stdout -    assert '#   define MATRIX_COLS 1' in result.stdout -    assert '#   define MATRIX_COL_PINS { F4 }' in result.stdout -    assert '#   define MATRIX_ROWS 1' in result.stdout -    assert '#   define MATRIX_ROW_PINS { F5 }' in result.stdout +    assert '#    define DEVICE_VER 0x0001' in result.stdout +    assert '#    define DIODE_DIRECTION COL2ROW' in result.stdout +    assert '#    define MANUFACTURER "none"' in result.stdout +    assert '#    define PRODUCT "pytest"' in result.stdout +    assert '#    define PRODUCT_ID 0x6465' in result.stdout +    assert '#    define VENDOR_ID 0xFEED' in result.stdout +    assert '#    define MATRIX_COLS 1' in result.stdout +    assert '#    define MATRIX_COL_PINS { F4 }' in result.stdout +    assert '#    define MATRIX_ROWS 1' in result.stdout +    assert '#    define MATRIX_ROW_PINS { F5 }' in result.stdout  def test_generate_rules_mk(): | 
