Add ds_keyboard
[platform/core/uifw/libds.git] / include / libds / interfaces / keyboard.h
1 #ifndef LIBDS_INTERFACES_KEYBOARD_H
2 #define LIBDS_INTERFACES_KEYBOARD_H
3
4 #include <wayland-server.h>
5 #include <xkbcommon/xkbcommon.h>
6
7 #include <libds/keyboard.h>
8
9 #define DS_LED_COUNT 3
10
11 enum ds_keyboard_led {
12     DS_LED_NUM_LOCK = 1 << 0,
13     DS_LED_CAPS_LOCK = 1 << 1,
14     DS_LED_SCROLL_LOCK = 1 << 2,
15 };
16
17 #define DS_MODIFIER_COUNT 8
18
19 enum ds_keyboard_modifier {
20     DS_MODIFIER_SHIFT = 1 << 0,
21     DS_MODIFIER_CAPS = 1 << 1,
22     DS_MODIFIER_CTRL = 1 << 2,
23     DS_MODIFIER_ALT = 1 << 3,
24     DS_MODIFIER_MOD2 = 1 << 4,
25     DS_MODIFIER_MOD3 = 1 << 5,
26     DS_MODIFIER_LOGO = 1 << 6,
27     DS_MODIFIER_MOD5 = 1 << 7,
28 };
29
30 #define DS_KEYBOARD_KEYS_CAP 32
31
32 struct ds_keyboard;
33
34 struct ds_keyboard_interface
35 {
36     void (*destroy)(struct ds_keyboard *keyboard);
37 };
38
39 struct ds_keyboard_modifiers
40 {
41     xkb_mod_mask_t depressed;
42     xkb_mod_mask_t latched;
43     xkb_mod_mask_t locked;
44     xkb_mod_mask_t group;
45 };
46
47 struct ds_keyboard
48 {
49     const struct ds_keyboard_interface *iface;
50
51     char *keymap_string;
52     size_t keymap_size;
53     int keymap_fd;
54     struct xkb_keymap *keymap;
55     struct xkb_state *xkb_state;
56     xkb_led_index_t led_indexes[DS_LED_COUNT];
57     xkb_mod_index_t mod_indexes[DS_MODIFIER_COUNT];
58
59     uint32_t keycodes[DS_KEYBOARD_KEYS_CAP];
60     size_t num_keycodes;
61     struct ds_keyboard_modifiers modifiers;
62
63     struct {
64         int32_t rate;
65         int32_t delay;
66     } repeat_info;
67
68     struct {
69         struct wl_signal destroy;
70         struct wl_signal key;
71         struct wl_signal modifiers;
72         struct wl_signal keymap;
73         struct wl_signal repeat_info;
74     } events;
75 };
76
77 void ds_keyboard_init(struct ds_keyboard *keyboard,
78         const struct ds_keyboard_interface *iface);
79
80 void ds_keyboard_destroy(struct ds_keyboard *keyboard);
81
82 void ds_keyboard_notify_key(struct ds_keyboard *keyboard,
83         struct ds_event_keyboard_key *event);
84
85 void ds_keyboard_notify_modifiers(struct ds_keyboard *keyboard,
86         uint32_t mods_depressed, uint32_t mods_latched, uint32_t mods_locked,
87         uint32_t group);
88
89 #endif