From e93d853f3d0413ca5e1a9fc5796c571a5778a3d2 Mon Sep 17 00:00:00 2001 From: Johannes Marbach Date: Mon, 20 Sep 2021 10:12:18 +0200 Subject: [PATCH] Introduce custom control flags and treat locked layer switchers like active modifiers --- examples/de+es+fr+us/sq2lv_layouts.c | 60 +++++++++---------- examples/de+es+fr+us/sq2lv_layouts.h | 7 ++- .../sq2lv_layouts.c | 18 +++--- .../sq2lv_layouts.h | 7 ++- examples/us/sq2lv_layouts.c | 12 ++-- examples/us/sq2lv_layouts.h | 7 ++- squeek2lvgl.py | 35 +++++++---- 7 files changed, 86 insertions(+), 60 deletions(-) diff --git a/examples/de+es+fr+us/sq2lv_layouts.c b/examples/de+es+fr+us/sq2lv_layouts.c index 11516bc..374ddb7 100644 --- a/examples/de+es+fr+us/sq2lv_layouts.c +++ b/examples/de+es+fr+us/sq2lv_layouts.c @@ -25,8 +25,8 @@ static const char * const keycaps_lower_de[] = { \ static const lv_btnmatrix_ctrl_t attributes_lower_de[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_MOD_INACTIVE | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_lower_de = 0; @@ -59,8 +59,8 @@ static const char * const keycaps_upper_de[] = { \ static const lv_btnmatrix_ctrl_t attributes_upper_de[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_MOD_ACTIVE | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_upper_de = 0; @@ -93,8 +93,8 @@ static const char * const keycaps_numbers_de[] = { \ static const lv_btnmatrix_ctrl_t attributes_numbers_de[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_numbers_de = 0; @@ -127,8 +127,8 @@ static const char * const keycaps_special_de[] = { \ static const lv_btnmatrix_ctrl_t attributes_special_de[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_NON_CHAR | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_MOD_ACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_special_de = 0; @@ -215,8 +215,8 @@ static const char * const keycaps_lower_es[] = { \ static const lv_btnmatrix_ctrl_t attributes_lower_es[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_MOD_INACTIVE | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_lower_es = 0; @@ -249,8 +249,8 @@ static const char * const keycaps_upper_es[] = { \ static const lv_btnmatrix_ctrl_t attributes_upper_es[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_MOD_ACTIVE | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_upper_es = 0; @@ -283,8 +283,8 @@ static const char * const keycaps_numbers_es[] = { \ static const lv_btnmatrix_ctrl_t attributes_numbers_es[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_numbers_es = 0; @@ -317,8 +317,8 @@ static const char * const keycaps_special_es[] = { \ static const lv_btnmatrix_ctrl_t attributes_special_es[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_NON_CHAR | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_MOD_ACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_special_es = 0; @@ -405,8 +405,8 @@ static const char * const keycaps_lower_fr[] = { \ static const lv_btnmatrix_ctrl_t attributes_lower_fr[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_MOD_INACTIVE | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_lower_fr = 0; @@ -439,8 +439,8 @@ static const char * const keycaps_upper_fr[] = { \ static const lv_btnmatrix_ctrl_t attributes_upper_fr[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_MOD_ACTIVE | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_upper_fr = 0; @@ -473,8 +473,8 @@ static const char * const keycaps_numbers_fr[] = { \ static const lv_btnmatrix_ctrl_t attributes_numbers_fr[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_numbers_fr = 0; @@ -507,8 +507,8 @@ static const char * const keycaps_special_fr[] = { \ static const lv_btnmatrix_ctrl_t attributes_special_fr[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_NON_CHAR | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, SQ2LV_CTRL_MOD_ACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_special_fr = 0; @@ -595,8 +595,8 @@ static const char * const keycaps_lower_us[] = { \ static const lv_btnmatrix_ctrl_t attributes_lower_us[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_MOD_INACTIVE | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_lower_us = 0; @@ -629,8 +629,8 @@ static const char * const keycaps_upper_us[] = { \ static const lv_btnmatrix_ctrl_t attributes_upper_us[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_MOD_ACTIVE | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_upper_us = 0; @@ -663,8 +663,8 @@ static const char * const keycaps_numbers_us[] = { \ static const lv_btnmatrix_ctrl_t attributes_numbers_us[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_numbers_us = 0; diff --git a/examples/de+es+fr+us/sq2lv_layouts.h b/examples/de+es+fr+us/sq2lv_layouts.h index b4e514b..0fe89ca 100644 --- a/examples/de+es+fr+us/sq2lv_layouts.h +++ b/examples/de+es+fr+us/sq2lv_layouts.h @@ -9,6 +9,11 @@ #define SQ2LV_SCANCODES_ENABLED 0 +/* Key attributes */ +#define SQ2LV_CTRL_NON_CHAR (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKED) +#define SQ2LV_CTRL_MOD_ACTIVE (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKABLE) +#define SQ2LV_CTRL_MOD_INACTIVE (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKABLE | LV_BTNMATRIX_CTRL_CHECKED) + /* Layout IDs, values can be used as indexes into the sq2lv_layouts array */ typedef enum { SQ2LV_LAYOUT_DE = 0, @@ -23,7 +28,7 @@ typedef struct { const int num_keys; /* Key caps */ const char ** const keycaps; - /* Button matrix attributes */ + /* Key attributes */ const lv_btnmatrix_ctrl_t * const attributes; /* Number of modifier keys */ const int num_modifiers; diff --git a/examples/us-terminal-with-scancodes/sq2lv_layouts.c b/examples/us-terminal-with-scancodes/sq2lv_layouts.c index fe3fef5..fdeadf3 100644 --- a/examples/us-terminal-with-scancodes/sq2lv_layouts.c +++ b/examples/us-terminal-with-scancodes/sq2lv_layouts.c @@ -25,11 +25,11 @@ static const char * const keycaps_lower_terminal_us[] = { \ }; static const lv_btnmatrix_ctrl_t attributes_lower_terminal_us[] = { \ - LV_KEYBOARD_CTRL_BTN_FLAGS | LV_BTNMATRIX_CTRL_CHECKABLE | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | LV_BTNMATRIX_CTRL_CHECKABLE | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 3, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_MOD_INACTIVE | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, 7, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_lower_terminal_us = 2; @@ -87,11 +87,11 @@ static const char * const keycaps_upper_terminal_us[] = { \ }; static const lv_btnmatrix_ctrl_t attributes_upper_terminal_us[] = { \ - LV_KEYBOARD_CTRL_BTN_FLAGS | LV_BTNMATRIX_CTRL_CHECKABLE | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | LV_BTNMATRIX_CTRL_CHECKABLE | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 3, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_MOD_ACTIVE | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, 7, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_upper_terminal_us = 2; @@ -149,11 +149,11 @@ static const char * const keycaps_numbers_terminal_us[] = { \ }; static const lv_btnmatrix_ctrl_t attributes_numbers_terminal_us[] = { \ - LV_KEYBOARD_CTRL_BTN_FLAGS | LV_BTNMATRIX_CTRL_CHECKABLE | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | LV_BTNMATRIX_CTRL_CHECKABLE | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ + SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_MOD_INACTIVE | 3, SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 3, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, 7, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_numbers_terminal_us = 2; diff --git a/examples/us-terminal-with-scancodes/sq2lv_layouts.h b/examples/us-terminal-with-scancodes/sq2lv_layouts.h index d2add50..4a02eef 100644 --- a/examples/us-terminal-with-scancodes/sq2lv_layouts.h +++ b/examples/us-terminal-with-scancodes/sq2lv_layouts.h @@ -9,6 +9,11 @@ #define SQ2LV_SCANCODES_ENABLED 1 +/* Key attributes */ +#define SQ2LV_CTRL_NON_CHAR (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKED) +#define SQ2LV_CTRL_MOD_ACTIVE (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKABLE) +#define SQ2LV_CTRL_MOD_INACTIVE (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKABLE | LV_BTNMATRIX_CTRL_CHECKED) + /* Layout IDs, values can be used as indexes into the sq2lv_layouts array */ typedef enum { SQ2LV_LAYOUT_TERMINAL_US = 0 @@ -20,7 +25,7 @@ typedef struct { const int num_keys; /* Key caps */ const char ** const keycaps; - /* Button matrix attributes */ + /* Key attributes */ const lv_btnmatrix_ctrl_t * const attributes; /* Number of modifier keys */ const int num_modifiers; diff --git a/examples/us/sq2lv_layouts.c b/examples/us/sq2lv_layouts.c index 598cb34..0e83dc6 100644 --- a/examples/us/sq2lv_layouts.c +++ b/examples/us/sq2lv_layouts.c @@ -25,8 +25,8 @@ static const char * const keycaps_lower_us[] = { \ static const lv_btnmatrix_ctrl_t attributes_lower_us[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_MOD_INACTIVE | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_lower_us = 0; @@ -59,8 +59,8 @@ static const char * const keycaps_upper_us[] = { \ static const lv_btnmatrix_ctrl_t attributes_upper_us[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + SQ2LV_CTRL_MOD_ACTIVE | 3, 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_upper_us = 0; @@ -93,8 +93,8 @@ static const char * const keycaps_numbers_us[] = { \ static const lv_btnmatrix_ctrl_t attributes_numbers_us[] = { \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, \ - 2, 2, 2, 2, 2, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3, \ - LV_KEYBOARD_CTRL_BTN_FLAGS | 3, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 7, 2, 2, LV_KEYBOARD_CTRL_BTN_FLAGS | 3 \ + 2, 2, 2, 2, 2, 2, 2, SQ2LV_CTRL_NON_CHAR | 3, \ + SQ2LV_CTRL_NON_CHAR | 3, SQ2LV_CTRL_NON_CHAR | 2, 7, SQ2LV_CTRL_NON_CHAR | 2, 2, SQ2LV_CTRL_NON_CHAR | 3 \ }; static const int num_modifiers_numbers_us = 0; diff --git a/examples/us/sq2lv_layouts.h b/examples/us/sq2lv_layouts.h index 07810aa..1175da6 100644 --- a/examples/us/sq2lv_layouts.h +++ b/examples/us/sq2lv_layouts.h @@ -9,6 +9,11 @@ #define SQ2LV_SCANCODES_ENABLED 0 +/* Key attributes */ +#define SQ2LV_CTRL_NON_CHAR (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKED) +#define SQ2LV_CTRL_MOD_ACTIVE (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKABLE) +#define SQ2LV_CTRL_MOD_INACTIVE (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKABLE | LV_BTNMATRIX_CTRL_CHECKED) + /* Layout IDs, values can be used as indexes into the sq2lv_layouts array */ typedef enum { SQ2LV_LAYOUT_US = 0 @@ -20,7 +25,7 @@ typedef struct { const int num_keys; /* Key caps */ const char ** const keycaps; - /* Button matrix attributes */ + /* Key attributes */ const lv_btnmatrix_ctrl_t * const attributes; /* Number of modifier keys */ const int num_modifiers; diff --git a/squeek2lvgl.py b/squeek2lvgl.py index d9e20a0..b3b036b 100644 --- a/squeek2lvgl.py +++ b/squeek2lvgl.py @@ -332,11 +332,6 @@ keycap_for_key = { 'base': 'ABC', 'upper': 'abc' }, - 'show_eschars': { - 'de': 'äöü', - 'es': 'áéí', - 'fr': 'áàéô' - }, 'space': ' ', 'Return': 'LV_SYMBOL_OK', } @@ -368,19 +363,24 @@ def key_is_modifier(key, data_buttons): return key in data_buttons and 'modifier' in data_buttons[key] -def key_to_attributes(key, data_buttons): +def key_to_attributes(key, is_locked, is_lockable, data_buttons): """Return the LVGL button attributes for a key. key -- the key in question + is_locked - whether the key is locked in the current view + is_lockable - whether the key can be locked in the current view data_buttons -- the "buttons" object from the layout's YAML file """ attributes = [] - if key in data_buttons and key not in ['period', 'colon', '"']: - attributes.append('LV_KEYBOARD_CTRL_BTN_FLAGS') - if key_is_modifier(key, data_buttons): - attributes.append('LV_BTNMATRIX_CTRL_CHECKABLE') + attributes.append('SQ2LV_CTRL_MOD_INACTIVE') + elif is_locked: + attributes.append('SQ2LV_CTRL_MOD_ACTIVE') + elif is_lockable: + attributes.append('SQ2LV_CTRL_MOD_INACTIVE') + elif key in data_buttons and key not in ['"', 'colon', 'period', 'space'] or key in ['←', '→']: + attributes.append('SQ2LV_CTRL_NON_CHAR') if key not in data_buttons or key in ['period', 'colon', '"']: attributes.append('2') @@ -560,11 +560,13 @@ def get_keycaps_attrs_modifiers_switchers_scancodes(args, layout_id, view_id, da continue keycaps_in_row.append(keycap_to_c_value(keycap)) - attrs_in_row.append(key_to_attributes(key, data_buttons)) if key_is_modifier(key, data_buttons): modifier_idxs.append(idx) + is_locked = False + is_lockable = False + if key in data_buttons and 'action' in data_buttons[key]: action = data_buttons[key]['action'] dest = None @@ -574,12 +576,16 @@ def get_keycaps_attrs_modifiers_switchers_scancodes(args, layout_id, view_id, da elif 'locking' in action and 'lock_view' in action['locking'] and 'unlock_view' in action['locking']: if action['locking']['lock_view'] == view_id: dest = action['locking']['unlock_view'] + is_locked = True else: dest = action['locking']['lock_view'] + is_lockable = True if dest: switcher_idxs.append(idx) switcher_dests.append(dest) + attrs_in_row.append(key_to_attributes(key, is_locked, is_lockable, data_buttons)) + if args.generate_scancodes: scancodes_in_row.append(keycap_to_scancodes(keycap)) @@ -642,6 +648,11 @@ if __name__ == '__main__': h_builder.add_line() h_builder.add_line(f'#define SQ2LV_SCANCODES_ENABLED {1 if args.generate_scancodes else 0}') h_builder.add_line() + h_builder.add_subsection_comment('Key attributes') + h_builder.add_line('#define SQ2LV_CTRL_NON_CHAR (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKED)') + h_builder.add_line('#define SQ2LV_CTRL_MOD_ACTIVE (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKABLE)') + h_builder.add_line('#define SQ2LV_CTRL_MOD_INACTIVE (LV_BTNMATRIX_CTRL_NO_REPEAT | LV_BTNMATRIX_CTRL_CLICK_TRIG | LV_BTNMATRIX_CTRL_CHECKABLE | LV_BTNMATRIX_CTRL_CHECKED)') + h_builder.add_line() layouts = [] unique_scancodes = {} @@ -760,7 +771,7 @@ if __name__ == '__main__': h_builder.add_line(' const int num_keys;') h_builder.add_line(' /* Key caps */') h_builder.add_line(' const char ** const keycaps;') - h_builder.add_line(' /* Button matrix attributes */') + h_builder.add_line(' /* Key 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;')