Add unique scancodes array
This commit is contained in:
parent
ff72362365
commit
4111119320
5 changed files with 56 additions and 19 deletions
|
|
@ -217,6 +217,8 @@ static const sq2lv_layer_t layers_terminal_us[] = {
|
|||
* Public interface
|
||||
**/
|
||||
|
||||
const int sq2lv_num_layouts = 1;
|
||||
|
||||
const sq2lv_layout_t sq2lv_layouts[] = {
|
||||
/* US English (Terminal) */
|
||||
{
|
||||
|
|
@ -225,7 +227,16 @@ const sq2lv_layout_t sq2lv_layouts[] = {
|
|||
}
|
||||
};
|
||||
|
||||
const int sq2lv_num_layouts = 1;
|
||||
|
||||
const char * const sq2lv_layout_names =
|
||||
"US English (Terminal)";
|
||||
|
||||
const int sq2lv_num_unique_scancodes = 57;
|
||||
|
||||
const int sq2lv_unique_scancodes[] = {
|
||||
KEY_LEFTCTRL, KEY_LEFTALT, KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_Q, KEY_W, KEY_E, KEY_R,
|
||||
KEY_T, KEY_Y, KEY_U, KEY_I, KEY_O, KEY_P, KEY_A, KEY_S, KEY_D, KEY_F,
|
||||
KEY_G, KEY_H, KEY_J, KEY_K, KEY_L, KEY_Z, KEY_X, KEY_C, KEY_V, KEY_B,
|
||||
KEY_N, KEY_M, KEY_BACKSPACE, KEY_SPACE, KEY_ENTER, KEY_PAGEUP, KEY_PAGEDOWN, KEY_HOME, KEY_END, KEY_LEFTSHIFT,
|
||||
KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0,
|
||||
KEY_QUESTION, KEY_MINUS, KEY_EQUAL, KEY_COMMA, KEY_APOSTROPHE, KEY_SEMICOLON, KEY_DOT
|
||||
};
|
||||
|
|
|
|||
|
|
@ -43,10 +43,14 @@ typedef struct {
|
|||
} sq2lv_layout_t;
|
||||
|
||||
/* Layouts */
|
||||
extern const sq2lv_layout_t sq2lv_layouts[];
|
||||
extern const int sq2lv_num_layouts;
|
||||
extern const sq2lv_layout_t sq2lv_layouts[];
|
||||
|
||||
/* Layout names (suitable for use in lv_dropdown_t */
|
||||
/* Layout names (suitable for use in lv_dropdown_t) */
|
||||
extern const char * const sq2lv_layout_names;
|
||||
|
||||
/* Unique scancodes from all layout (suitable for setting up uinput devices) */
|
||||
extern const int sq2lv_num_unique_scancodes;
|
||||
extern const int sq2lv_unique_scancodes[];
|
||||
|
||||
#endif /* SQ2LV_LAYOUTS_H */
|
||||
|
|
|
|||
|
|
@ -120,6 +120,8 @@ static const sq2lv_layer_t layers_us[] = {
|
|||
* Public interface
|
||||
**/
|
||||
|
||||
const int sq2lv_num_layouts = 1;
|
||||
|
||||
const sq2lv_layout_t sq2lv_layouts[] = {
|
||||
/* US English */
|
||||
{
|
||||
|
|
@ -128,7 +130,5 @@ const sq2lv_layout_t sq2lv_layouts[] = {
|
|||
}
|
||||
};
|
||||
|
||||
const int sq2lv_num_layouts = 1;
|
||||
|
||||
const char * const sq2lv_layout_names =
|
||||
"US English";
|
||||
|
|
|
|||
|
|
@ -35,10 +35,10 @@ typedef struct {
|
|||
} sq2lv_layout_t;
|
||||
|
||||
/* Layouts */
|
||||
extern const sq2lv_layout_t sq2lv_layouts[];
|
||||
extern const int sq2lv_num_layouts;
|
||||
extern const sq2lv_layout_t sq2lv_layouts[];
|
||||
|
||||
/* Layout names (suitable for use in lv_dropdown_t */
|
||||
/* Layout names (suitable for use in lv_dropdown_t) */
|
||||
extern const char * const sq2lv_layout_names;
|
||||
|
||||
#endif /* SQ2LV_LAYOUTS_H */
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ class SourceFileBuilder(object):
|
|||
self.lines.insert(idx, '')
|
||||
self.lines.insert(idx + 1, f'#ifndef {macro}')
|
||||
self.lines.insert(idx + 2, f'#define {macro}')
|
||||
self.add_lines(['', f'#endif /* {macro} */'])
|
||||
self.add_lines([f'#endif /* {macro} */', ''])
|
||||
|
||||
def _add_header_comment(self):
|
||||
"""Add the generator header comment and return the builder.
|
||||
|
|
@ -550,8 +550,8 @@ def get_keycaps_attrs_switchers_scancodes(args, layout_id, view_id, data_views,
|
|||
|
||||
|
||||
def flatten_scancodes(scancodes):
|
||||
"""Process a nested list of scancodes per key and return a flattened list, a list of starting indexes and a
|
||||
list of scancode counts.
|
||||
"""Process a nested list of scancodes per row and key and return a flattened list of scancodes per row,
|
||||
a list of starting indexes and a list of scancode counts.
|
||||
|
||||
scancodes -- list (rows) of list (keys) of list (scancodes) of scancodes
|
||||
"""
|
||||
|
|
@ -599,6 +599,7 @@ if __name__ == '__main__':
|
|||
h_builder.add_line()
|
||||
|
||||
layouts = []
|
||||
unique_scancodes = {}
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
clone_squeekboard_repo(tmp)
|
||||
|
|
@ -658,6 +659,10 @@ if __name__ == '__main__':
|
|||
if args.generate_scancodes:
|
||||
scancodes_flat, scancode_idxs, scancode_nums = flatten_scancodes(scancodes)
|
||||
|
||||
for scancodes_in_row in scancodes_flat:
|
||||
for scancode in scancodes_in_row:
|
||||
unique_scancodes[scancode] = True
|
||||
|
||||
c_builder.add_line(f'static const int num_scancodes_{layer_identifier} = {len(scancodes)};')
|
||||
c_builder.add_line()
|
||||
c_builder.add_array(True, 'const int', f'scancodes_{layer_identifier}', scancodes_flat, '', '')
|
||||
|
|
@ -730,16 +735,26 @@ if __name__ == '__main__':
|
|||
h_builder.add_line()
|
||||
|
||||
h_builder.add_line('/* Layouts */')
|
||||
h_builder.add_line('extern const sq2lv_layout_t sq2lv_layouts[];')
|
||||
h_builder.add_line('extern const int sq2lv_num_layouts;')
|
||||
h_builder.add_line('extern const sq2lv_layout_t sq2lv_layouts[];')
|
||||
h_builder.add_line()
|
||||
|
||||
h_builder.add_line('/* Layout names (suitable for use in lv_dropdown_t */')
|
||||
h_builder.add_line('/* Layout names (suitable for use in lv_dropdown_t) */')
|
||||
h_builder.add_line('extern const char * const sq2lv_layout_names;')
|
||||
h_builder.add_line()
|
||||
|
||||
if args.generate_scancodes:
|
||||
h_builder.add_line('/* Unique scancodes from all layout (suitable for setting up uinput devices) */')
|
||||
h_builder.add_line('extern const int sq2lv_num_unique_scancodes;')
|
||||
h_builder.add_line('extern const int sq2lv_unique_scancodes[];')
|
||||
h_builder.add_line()
|
||||
|
||||
c_builder.add_section_comment('Public interface')
|
||||
c_builder.add_line()
|
||||
|
||||
c_builder.add_line('const int sq2lv_num_layouts = ' + str(len(layouts)) + ';')
|
||||
c_builder.add_line()
|
||||
|
||||
c_builder.add_line('const sq2lv_layout_t sq2lv_layouts[] = {')
|
||||
for i, layout in enumerate(layouts):
|
||||
c_builder.add_line(' /* ' + layout['name'] + ' */')
|
||||
|
|
@ -750,16 +765,23 @@ if __name__ == '__main__':
|
|||
c_builder.add_line('};')
|
||||
c_builder.add_line()
|
||||
|
||||
c_builder.add_line('const int sq2lv_num_layouts = ' + str(len(layouts)) + ';')
|
||||
c_builder.add_line()
|
||||
|
||||
names = [layout['name'] for layout in layouts]
|
||||
names = '\n ' + ' "\\n"\n '.join([f'"{name}"' for name in names])
|
||||
c_builder.add_line(f'const char * const sq2lv_layout_names = {names};')
|
||||
c_builder.add_line()
|
||||
|
||||
if args.generate_scancodes:
|
||||
c_builder.add_line(f'const int sq2lv_num_unique_scancodes = {len(unique_scancodes)};')
|
||||
c_builder.add_line()
|
||||
c_builder.add_line('const int sq2lv_unique_scancodes[] = {')
|
||||
scancodes = list(unique_scancodes.keys())
|
||||
chunks = [scancodes[i:i + 10] for i in range(0, len(scancodes), 10)]
|
||||
for i, chunk in enumerate(chunks):
|
||||
joined = ', '.join(chunk)
|
||||
c_builder.add_line(f' {joined}{comma_if_needed(chunks, i)}')
|
||||
c_builder.add_line('};')
|
||||
c_builder.add_line()
|
||||
|
||||
h_builder.wrap_in_ifndef('SQ2LV_LAYOUTS_H')
|
||||
|
||||
c_builder.add_line()
|
||||
h_builder.add_line()
|
||||
|
||||
write_files(c_builder.lines, h_builder.lines)
|
||||
Loading…
Add table
Add a link
Reference in a new issue