diff --git a/examples/us-terminal-with-scancodes/sq2lv_layouts.c b/examples/us-terminal-with-scancodes/sq2lv_layouts.c index bb290cf..d4c20bf 100644 --- a/examples/us-terminal-with-scancodes/sq2lv_layouts.c +++ b/examples/us-terminal-with-scancodes/sq2lv_layouts.c @@ -31,6 +31,12 @@ static const lv_btnmatrix_ctrl_t attributes_lower_terminal_us[] = { \ LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ }; +static const int num_modifiers_lower_terminal_us = 2; + +static const int modifier_idxs_lower_terminal_us[] = { \ + 0, 1 \ +}; + static const int num_switchers_lower_terminal_us = 2; static const int switcher_idxs_lower_terminal_us[] = { \ @@ -87,6 +93,12 @@ static const lv_btnmatrix_ctrl_t attributes_upper_terminal_us[] = { \ LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ }; +static const int num_modifiers_upper_terminal_us = 2; + +static const int modifier_idxs_upper_terminal_us[] = { \ + 0, 1 \ +}; + static const int num_switchers_upper_terminal_us = 2; static const int switcher_idxs_upper_terminal_us[] = { \ @@ -143,6 +155,12 @@ static const lv_btnmatrix_ctrl_t attributes_numbers_terminal_us[] = { \ LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ }; +static const int num_modifiers_numbers_terminal_us = 2; + +static const int modifier_idxs_numbers_terminal_us[] = { \ + 0, 1 \ +}; + static const int num_switchers_numbers_terminal_us = 1; static const int switcher_idxs_numbers_terminal_us[] = { \ @@ -188,6 +206,8 @@ static const sq2lv_layer_t layers_terminal_us[] = { .num_keys = num_keys_lower_terminal_us, .keycaps = keycaps_lower_terminal_us, .attributes = attributes_lower_terminal_us, + .num_modifiers = num_modifiers_lower_terminal_us, + .modifier_idxs = modifier_idxs_lower_terminal_us, .num_switchers = num_switchers_lower_terminal_us, .switcher_idxs = switcher_idxs_lower_terminal_us, .switcher_dests = switcher_dests_lower_terminal_us, @@ -200,6 +220,8 @@ static const sq2lv_layer_t layers_terminal_us[] = { .num_keys = num_keys_upper_terminal_us, .keycaps = keycaps_upper_terminal_us, .attributes = attributes_upper_terminal_us, + .num_modifiers = num_modifiers_upper_terminal_us, + .modifier_idxs = modifier_idxs_upper_terminal_us, .num_switchers = num_switchers_upper_terminal_us, .switcher_idxs = switcher_idxs_upper_terminal_us, .switcher_dests = switcher_dests_upper_terminal_us, @@ -212,6 +234,8 @@ static const sq2lv_layer_t layers_terminal_us[] = { .num_keys = num_keys_numbers_terminal_us, .keycaps = keycaps_numbers_terminal_us, .attributes = attributes_numbers_terminal_us, + .num_modifiers = num_modifiers_numbers_terminal_us, + .modifier_idxs = modifier_idxs_numbers_terminal_us, .num_switchers = num_switchers_numbers_terminal_us, .switcher_idxs = switcher_idxs_numbers_terminal_us, .switcher_dests = switcher_dests_numbers_terminal_us, diff --git a/examples/us-terminal-with-scancodes/sq2lv_layouts.h b/examples/us-terminal-with-scancodes/sq2lv_layouts.h index 674274b..e8cff27 100644 --- a/examples/us-terminal-with-scancodes/sq2lv_layouts.h +++ b/examples/us-terminal-with-scancodes/sq2lv_layouts.h @@ -20,6 +20,10 @@ typedef struct { const char ** const keycaps; /* Button matrix attributes */ const lv_btnmatrix_ctrl_t * const attributes; + /* Number of modifier keys */ + const int num_modifiers; + /* Button indexes of modifier keys */ + const int * const modifier_idxs; /* Number of buttons that trigger a layer switch */ const int num_switchers; /* Button indexes that trigger a layer switch */ diff --git a/examples/us/sq2lv_layouts.c b/examples/us/sq2lv_layouts.c index fe4f232..05ed3b8 100644 --- a/examples/us/sq2lv_layouts.c +++ b/examples/us/sq2lv_layouts.c @@ -28,6 +28,12 @@ static const lv_btnmatrix_ctrl_t attributes_lower_us[] = { \ LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ }; +static const int num_modifiers_lower_us = 0; + +static const int modifier_idxs_lower_us[] = { \ + \ +}; + static const int num_switchers_lower_us = 2; static const int switcher_idxs_lower_us[] = { \ @@ -56,6 +62,12 @@ static const lv_btnmatrix_ctrl_t attributes_upper_us[] = { \ LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ }; +static const int num_modifiers_upper_us = 0; + +static const int modifier_idxs_upper_us[] = { \ + \ +}; + static const int num_switchers_upper_us = 2; static const int switcher_idxs_upper_us[] = { \ @@ -84,6 +96,12 @@ static const lv_btnmatrix_ctrl_t attributes_numbers_us[] = { \ LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ }; +static const int num_modifiers_numbers_us = 0; + +static const int modifier_idxs_numbers_us[] = { \ + \ +}; + static const int num_switchers_numbers_us = 1; static const int switcher_idxs_numbers_us[] = { \ @@ -103,6 +121,8 @@ static const sq2lv_layer_t layers_us[] = { .num_keys = num_keys_lower_us, .keycaps = keycaps_lower_us, .attributes = attributes_lower_us, + .num_modifiers = num_modifiers_lower_us, + .modifier_idxs = modifier_idxs_lower_us, .num_switchers = num_switchers_lower_us, .switcher_idxs = switcher_idxs_lower_us, .switcher_dests = switcher_dests_lower_us @@ -111,6 +131,8 @@ static const sq2lv_layer_t layers_us[] = { .num_keys = num_keys_upper_us, .keycaps = keycaps_upper_us, .attributes = attributes_upper_us, + .num_modifiers = num_modifiers_upper_us, + .modifier_idxs = modifier_idxs_upper_us, .num_switchers = num_switchers_upper_us, .switcher_idxs = switcher_idxs_upper_us, .switcher_dests = switcher_dests_upper_us @@ -119,6 +141,8 @@ static const sq2lv_layer_t layers_us[] = { .num_keys = num_keys_numbers_us, .keycaps = keycaps_numbers_us, .attributes = attributes_numbers_us, + .num_modifiers = num_modifiers_numbers_us, + .modifier_idxs = modifier_idxs_numbers_us, .num_switchers = num_switchers_numbers_us, .switcher_idxs = switcher_idxs_numbers_us, .switcher_dests = switcher_dests_numbers_us diff --git a/examples/us/sq2lv_layouts.h b/examples/us/sq2lv_layouts.h index 0ba6115..8ae6969 100644 --- a/examples/us/sq2lv_layouts.h +++ b/examples/us/sq2lv_layouts.h @@ -20,6 +20,10 @@ typedef struct { const char ** const keycaps; /* Button matrix attributes */ const lv_btnmatrix_ctrl_t * const attributes; + /* Number of modifier keys */ + const int num_modifiers; + /* Button indexes of modifier keys */ + const int * const modifier_idxs; /* Number of buttons that trigger a layer switch */ const int num_switchers; /* Button indexes that trigger a layer switch */ diff --git a/squeek2lvgl.py b/squeek2lvgl.py index 7c23f35..8d3d05c 100644 --- a/squeek2lvgl.py +++ b/squeek2lvgl.py @@ -478,9 +478,9 @@ def keycap_to_scancodes(keycap): return scancodes_for_keycap[keycap] -def get_keycaps_attrs_switchers_scancodes(args, layout_id, view_id, data_views, data_buttons): - """Return keycaps, LVGL button attributes, layer switching key indexes, layer switching key - destinations and scancodes for a view +def get_keycaps_attrs_modifiers_switchers_scancodes(args, layout_id, view_id, data_views, data_buttons): + """Return keycaps, LVGL button attributes, modifier key indexes, layer switching key indexes, + layer switching key destinations and scancodes for a view args -- Commandline arguments layout_id -- ID of the layout @@ -490,6 +490,7 @@ def get_keycaps_attrs_switchers_scancodes(args, layout_id, view_id, data_views, """ keycaps = [] attrs = [] + modifier_idxs = [] switcher_idxs = [] switcher_dests = [] scancodes = [] @@ -522,6 +523,9 @@ def get_keycaps_attrs_switchers_scancodes(args, layout_id, view_id, data_views, keycaps_in_row.append(keycap_to_c_value(keycap)) attrs_in_row.append(key_to_attributes(key, data_buttons)) + if key in data_buttons and 'modifier' in data_buttons[key]: + modifier_idxs.append(idx) + if key in data_buttons and 'action' in data_buttons[key]: action = data_buttons[key]['action'] dest = None @@ -546,7 +550,7 @@ def get_keycaps_attrs_switchers_scancodes(args, layout_id, view_id, data_views, attrs.append(attrs_in_row) scancodes.append(scancodes_in_row) - return keycaps, attrs, switcher_idxs, switcher_dests, scancodes + return keycaps, attrs, modifier_idxs, switcher_idxs, switcher_dests, scancodes def flatten_scancodes(scancodes): @@ -635,7 +639,7 @@ if __name__ == '__main__': c_builder.add_subsection_comment(f'Layer: {layer_name} - generated from {view_id}') c_builder.add_line() - keycaps, attrs, switcher_idxs, switcher_dests, scancodes = get_keycaps_attrs_switchers_scancodes( + keycaps, attrs, modifier_idxs, switcher_idxs, switcher_dests, scancodes = get_keycaps_attrs_modifiers_switchers_scancodes( args, layout_id, view_id, data_views, data_buttons) for dest in switcher_dests: @@ -650,6 +654,10 @@ if __name__ == '__main__': c_builder.add_array(True, 'const lv_btnmatrix_ctrl_t', f'attributes_{layer_identifier}', attrs, '', '') c_builder.add_line() + c_builder.add_line(f'static const int num_modifiers_{layer_identifier} = {len(modifier_idxs)};') + c_builder.add_line() + c_builder.add_flat_array(True, 'const int', f'modifier_idxs_{layer_identifier}', modifier_idxs, '') + c_builder.add_line() c_builder.add_line(f'static const int num_switchers_{layer_identifier} = {len(switcher_idxs)};') c_builder.add_line() @@ -681,7 +689,7 @@ if __name__ == '__main__': 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 = ['num_keys', 'keycaps', 'attributes', 'num_switchers', 'switcher_idxs', 'switcher_dests'] + fields = ['num_keys', 'keycaps', 'attributes', 'num_modifiers', 'modifier_idxs', 'num_switchers', 'switcher_idxs', 'switcher_dests'] if args.generate_scancodes: fields += ['num_scancodes', 'scancodes', 'scancode_idxs', 'scancode_nums'] for k, field in enumerate(fields): @@ -711,6 +719,10 @@ if __name__ == '__main__': h_builder.add_line(' const char ** const keycaps;') h_builder.add_line(' /* Button matrix attributes */') h_builder.add_line(' const lv_btnmatrix_ctrl_t * const attributes;') + h_builder.add_line(' /* Number of modifier keys */') + h_builder.add_line(' const int num_modifiers;') + h_builder.add_line(' /* Button indexes of modifier keys */') + h_builder.add_line(' const int * const modifier_idxs;') h_builder.add_line(' /* Number of buttons that trigger a layer switch */') h_builder.add_line(' const int num_switchers;') h_builder.add_line(' /* Button indexes that trigger a layer switch */')