diff --git a/examples/us-terminal-with-scancodes/sq2lv_layouts.c b/examples/us-terminal-with-scancodes/sq2lv_layouts.c index e82b8a3..8906896 100644 --- a/examples/us-terminal-with-scancodes/sq2lv_layouts.c +++ b/examples/us-terminal-with-scancodes/sq2lv_layouts.c @@ -173,6 +173,46 @@ static const int scancode_nums_numbers_terminal_us[] = { \ 0, 1, 1, 1 \ }; +/* Layer array */ + +static const int num_layers_terminal_us = 3; + +static const sq2lv_layer_t layers_terminal_us[] = { + { + .keycaps = keycaps_lower_terminal_us, + .attributes = attributes_lower_terminal_us, + .num_switchers = num_switchers_lower_terminal_us, + .switcher_idxs = switcher_idxs_lower_terminal_us, + .switcher_dests = switcher_dests_lower_terminal_us, + .num_scancodes = num_scancodes_lower_terminal_us, + .scancodes = scancodes_lower_terminal_us, + .scancode_idxs = scancode_idxs_lower_terminal_us, + .scancode_nums = scancode_nums_lower_terminal_us + }, + { + .keycaps = keycaps_upper_terminal_us, + .attributes = attributes_upper_terminal_us, + .num_switchers = num_switchers_upper_terminal_us, + .switcher_idxs = switcher_idxs_upper_terminal_us, + .switcher_dests = switcher_dests_upper_terminal_us, + .num_scancodes = num_scancodes_upper_terminal_us, + .scancodes = scancodes_upper_terminal_us, + .scancode_idxs = scancode_idxs_upper_terminal_us, + .scancode_nums = scancode_nums_upper_terminal_us + }, + { + .keycaps = keycaps_numbers_terminal_us, + .attributes = attributes_numbers_terminal_us, + .num_switchers = num_switchers_numbers_terminal_us, + .switcher_idxs = switcher_idxs_numbers_terminal_us, + .switcher_dests = switcher_dests_numbers_terminal_us, + .num_scancodes = num_scancodes_numbers_terminal_us, + .scancodes = scancodes_numbers_terminal_us, + .scancode_idxs = scancode_idxs_numbers_terminal_us, + .scancode_nums = scancode_nums_numbers_terminal_us + } +}; + /** * Public interface **/ @@ -180,42 +220,8 @@ static const int scancode_nums_numbers_terminal_us[] = { \ const sq2lv_layout_t sq2lv_layouts[] = { /* US English (Terminal) */ { - .layers = (sq2lv_layer_t[]){ - { - .keycaps = keycaps_lower_terminal_us, - .attributes = attributes_lower_terminal_us, - .num_switchers = num_switchers_lower_terminal_us, - .switcher_idxs = switcher_idxs_lower_terminal_us, - .switcher_dests = switcher_dests_lower_terminal_us, - .num_scancodes = num_scancodes_lower_terminal_us, - .scancodes = scancodes_lower_terminal_us, - .scancode_idxs = scancode_idxs_lower_terminal_us, - .scancode_nums = scancode_nums_lower_terminal_us - }, - { - .keycaps = keycaps_upper_terminal_us, - .attributes = attributes_upper_terminal_us, - .num_switchers = num_switchers_upper_terminal_us, - .switcher_idxs = switcher_idxs_upper_terminal_us, - .switcher_dests = switcher_dests_upper_terminal_us, - .num_scancodes = num_scancodes_upper_terminal_us, - .scancodes = scancodes_upper_terminal_us, - .scancode_idxs = scancode_idxs_upper_terminal_us, - .scancode_nums = scancode_nums_upper_terminal_us - }, - { - .keycaps = keycaps_numbers_terminal_us, - .attributes = attributes_numbers_terminal_us, - .num_switchers = num_switchers_numbers_terminal_us, - .switcher_idxs = switcher_idxs_numbers_terminal_us, - .switcher_dests = switcher_dests_numbers_terminal_us, - .num_scancodes = num_scancodes_numbers_terminal_us, - .scancodes = scancodes_numbers_terminal_us, - .scancode_idxs = scancode_idxs_numbers_terminal_us, - .scancode_nums = scancode_nums_numbers_terminal_us - } - }, - .num_layers = 3 + .num_layers = num_layers_terminal_us, + .layers = layers_terminal_us } }; diff --git a/examples/us-terminal-with-scancodes/sq2lv_layouts.h b/examples/us-terminal-with-scancodes/sq2lv_layouts.h index 2fb8052..8b0ec30 100644 --- a/examples/us-terminal-with-scancodes/sq2lv_layouts.h +++ b/examples/us-terminal-with-scancodes/sq2lv_layouts.h @@ -36,10 +36,10 @@ typedef struct { /* Layout type */ typedef struct { - /* Layers array */ - const sq2lv_layer_t * const layers; /* Total number of layers */ const int num_layers; + /* Layers array */ + const sq2lv_layer_t * const layers; } sq2lv_layout_t; /* Layouts */ diff --git a/examples/us/sq2lv_layouts.c b/examples/us/sq2lv_layouts.c index 2d119c2..57267a1 100644 --- a/examples/us/sq2lv_layouts.c +++ b/examples/us/sq2lv_layouts.c @@ -88,6 +88,34 @@ static const int switcher_dests_numbers_us[] = { \ 0 \ }; +/* Layer array */ + +static const int num_layers_us = 3; + +static const sq2lv_layer_t layers_us[] = { + { + .keycaps = keycaps_lower_us, + .attributes = attributes_lower_us, + .num_switchers = num_switchers_lower_us, + .switcher_idxs = switcher_idxs_lower_us, + .switcher_dests = switcher_dests_lower_us + }, + { + .keycaps = keycaps_upper_us, + .attributes = attributes_upper_us, + .num_switchers = num_switchers_upper_us, + .switcher_idxs = switcher_idxs_upper_us, + .switcher_dests = switcher_dests_upper_us + }, + { + .keycaps = keycaps_numbers_us, + .attributes = attributes_numbers_us, + .num_switchers = num_switchers_numbers_us, + .switcher_idxs = switcher_idxs_numbers_us, + .switcher_dests = switcher_dests_numbers_us + } +}; + /** * Public interface **/ @@ -95,30 +123,8 @@ static const int switcher_dests_numbers_us[] = { \ const sq2lv_layout_t sq2lv_layouts[] = { /* US English */ { - .layers = (sq2lv_layer_t[]){ - { - .keycaps = keycaps_lower_us, - .attributes = attributes_lower_us, - .num_switchers = num_switchers_lower_us, - .switcher_idxs = switcher_idxs_lower_us, - .switcher_dests = switcher_dests_lower_us - }, - { - .keycaps = keycaps_upper_us, - .attributes = attributes_upper_us, - .num_switchers = num_switchers_upper_us, - .switcher_idxs = switcher_idxs_upper_us, - .switcher_dests = switcher_dests_upper_us - }, - { - .keycaps = keycaps_numbers_us, - .attributes = attributes_numbers_us, - .num_switchers = num_switchers_numbers_us, - .switcher_idxs = switcher_idxs_numbers_us, - .switcher_dests = switcher_dests_numbers_us - } - }, - .num_layers = 3 + .num_layers = num_layers_us, + .layers = layers_us } }; diff --git a/examples/us/sq2lv_layouts.h b/examples/us/sq2lv_layouts.h index d5c070d..f634d77 100644 --- a/examples/us/sq2lv_layouts.h +++ b/examples/us/sq2lv_layouts.h @@ -28,10 +28,10 @@ typedef struct { /* Layout type */ typedef struct { - /* Layers array */ - const sq2lv_layer_t * const layers; /* Total number of layers */ const int num_layers; + /* Layers array */ + const sq2lv_layer_t * const layers; } sq2lv_layout_t; /* Layouts */ diff --git a/squeek2lvgl.py b/squeek2lvgl.py index 06987bf..60b84ed 100644 --- a/squeek2lvgl.py +++ b/squeek2lvgl.py @@ -665,10 +665,25 @@ if __name__ == '__main__': c_builder.add_array(True, 'const int', f'scancode_nums_{layer_identifier}', scancode_nums, '', '') c_builder.add_line() + c_builder.add_subsection_comment(f'Layer array') + c_builder.add_line() + c_builder.add_line(f'static const int num_layers_{layout_identifier} = {len(layer_identifiers)};') + c_builder.add_line() + c_builder.add_line(f'static const sq2lv_layer_t layers_{layout_identifier}[] = ' + '{') + for i, identifier in enumerate(layer_identifiers): + c_builder.add_line(' {') + fields = ['keycaps', 'attributes', 'num_switchers', 'switcher_idxs', 'switcher_dests'] + if args.generate_scancodes: + fields += ['num_scancodes', 'scancodes', 'scancode_idxs', 'scancode_nums'] + for k, field in enumerate(fields): + c_builder.add_line(f' .{field} = {field}_{identifier}{comma_if_needed(fields, k)}') + c_builder.add_line(' }' + comma_if_needed(layer_identifiers, i)) + c_builder.add_line('};') + c_builder.add_line() + layouts.append({ 'name': layout_id_to_layout_name(layout_id), - 'identifier': layout_identifier, - 'layer_identifiers': layer_identifiers + 'identifier': layout_identifier }) h_builder.add_line('/* Layout IDs, values can be used as indexes into the sq2lv_layouts array */') @@ -705,10 +720,10 @@ if __name__ == '__main__': h_builder.add_line('/* Layout type */') h_builder.add_line('typedef struct {') - h_builder.add_line(' /* Layers array */') - h_builder.add_line(' const sq2lv_layer_t * const layers;') h_builder.add_line(' /* Total number of layers */') h_builder.add_line(' const int num_layers;') + h_builder.add_line(' /* Layers array */') + h_builder.add_line(' const sq2lv_layer_t * const layers;') h_builder.add_line('} sq2lv_layout_t;') h_builder.add_line() @@ -727,17 +742,8 @@ if __name__ == '__main__': for i, layout in enumerate(layouts): c_builder.add_line(' /* ' + layout['name'] + ' */') c_builder.add_line(' {') - c_builder.add_line(' .layers = (sq2lv_layer_t[]){') - for j, identifier in enumerate(layout['layer_identifiers']): - c_builder.add_line(' {') - fields = ['keycaps', 'attributes', 'num_switchers', 'switcher_idxs', 'switcher_dests'] - if args.generate_scancodes: - fields += ['num_scancodes', 'scancodes', 'scancode_idxs', 'scancode_nums'] - for k, field in enumerate(fields): - c_builder.add_line(f' .{field} = {field}_{identifier}{comma_if_needed(fields, k)}') - c_builder.add_line(' }' + comma_if_needed(layout['layer_identifiers'], j)) - c_builder.add_line(' },') - c_builder.add_line(' .num_layers = ' + str(len(layout['layer_identifiers']))) + c_builder.add_line(' .num_layers = num_layers_' + layout['identifier'] + ',') + c_builder.add_line(' .layers = layers_' + layout['identifier']) c_builder.add_line(' }' + comma_if_needed(layouts, i)) c_builder.add_line('};') c_builder.add_line()