Hi @bader ,
the solution I posted is a bit outdated, once I gained a bit of familiarity with LVGL I realized my solution bypassed the event system, I had to redo it. I’m stuck with evdev, but it should work fine with libinput.
This is my current evdev file,
evdev.c (6.7 KB)
And it is used like this,
static evdev_drv_state_t kp_state;
static lv_indev_drv_t kp_driver;
static lv_indev_t *kp_desc;
static void my_kp_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
{
evdev_read(&kp_state, indev_drv, kp_desc, data);
}
int main() {
...
evdev_init_keypad(&kp_state, "/dev/keypad");
lv_indev_drv_init(&kp_driver);
kp_driver.type = LV_INDEV_TYPE_KEYPAD;
kp_driver.read_cb = my_kp_read;
kp_desc = lv_indev_drv_register(&kp_driver);
...
}
P.S:
typedef struct multitap_keymap
{
char key;
char *sequence;
} multitap_keymap_t;
static multitap_keymap_t key_maps[INPUT_KEYBOARD_MAX_KEY_MAP][12] = {
{ /* 0 - NUMERIC */
{ PKEY_1, "1" },
{ PKEY_2, "2" },
{ PKEY_3, "3" },
{ PKEY_4, "4" },
{ PKEY_5, "5" },
{ PKEY_6, "6" },
{ PKEY_7, "7" },
{ PKEY_8, "8" },
{ PKEY_9, "9" },
{ PKEY_0, "0" },
{ PKEY_UNDEFINED, NULL},
{ PKEY_UNDEFINED, NULL},
},
{ /* 1 - ALPHANUMERIC */
{ PKEY_1, "1." },
{ PKEY_2, "2ABCabc" },
{ PKEY_3, "3DEFdef" },
{ PKEY_4, "4GHIghi" },
{ PKEY_5, "5JKLjkl" },
{ PKEY_6, "6MNOmno" },
{ PKEY_7, "7PQRSpqrs" },
{ PKEY_8, "8TUVtuv" },
{ PKEY_9, "9WXYZwxyz" },
{ PKEY_0, "0 " },
{ PKEY_UNDEFINED, NULL},
{ PKEY_UNDEFINED, NULL},
},
...
}