keyrouter: add initial apis for creating / destroying keyrouter 65/119765/5
authorJengHyun Kang <jhyuni.kang@samsung.com>
Mon, 20 Mar 2017 05:26:32 +0000 (14:26 +0900)
committerJengHyun Kang <jhyuni.kang@samsung.com>
Mon, 20 Mar 2017 09:59:42 +0000 (18:59 +0900)
Change-Id: I1d5d0b1c0bf8ab804784fa735677939038673974

src/lib/keyrouter/keyrouter-internal.h [new file with mode: 0644]
src/lib/keyrouter/keyrouter.c [new file with mode: 0644]
src/lib/keyrouter/keyrouter.h [new file with mode: 0644]

diff --git a/src/lib/keyrouter/keyrouter-internal.h b/src/lib/keyrouter/keyrouter-internal.h
new file mode 100644 (file)
index 0000000..5e1cf53
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef KEYROUTER_INTERNAL_H
+#define KEYROUTER_INTERNAL_H
+
+#include <unistd.h>
+#include <config.h>
+
+#include "keyrouter.h"
+
+typedef struct keyrouter_grabbed keyrouter_grabbed_t;
+
+struct keyrouter {
+       pepper_compositor_t        *compositor;
+       keyrouter_grabbed_t *hard_keys;
+};
+
+struct keyrouter_grabbed {
+       int keycode;
+       struct {
+               pepper_list_t excl;
+               pepper_list_t or_excl;
+               pepper_list_t top;
+               pepper_list_t shared;
+       } grab;
+       pepper_list_t pressed;
+};
+
+#endif /* KEYROUTER_INTERNAL_H */
diff --git a/src/lib/keyrouter/keyrouter.c b/src/lib/keyrouter/keyrouter.c
new file mode 100644 (file)
index 0000000..cc4ecf6
--- /dev/null
@@ -0,0 +1,74 @@
+#include "keyrouter-internal.h"
+
+PEPPER_API keyrouter_t *
+keyrouter_create(void)
+{
+       keyrouter_t *keyrouter = NULL;
+       int i;
+
+       keyrouter = (keyrouter_t *)calloc(1, sizeof(keyrouter_t));
+       PEPPER_CHECK(keyrouter, return NULL, "keyrouter allocation failed.\n");
+
+       /* FIXME: Who defined max keycode? */
+       keyrouter->hard_keys = (keyrouter_grabbed_t *)calloc(KEYROUTER_MAX_KEYS, sizeof(keyrouter_grabbed_t));
+       PEPPER_CHECK(keyrouter->hard_keys, goto alloc_failed, "keyrouter allocation failed.\n");
+
+       for (i = 0; i < KEYROUTER_MAX_KEYS; i++) {
+               /* Enable all of keys to grab */
+               //keyrouter->hard_keys[i].keycode = i;
+               pepper_list_init(&keyrouter->hard_keys[i].grab.excl);
+               pepper_list_init(&keyrouter->hard_keys[i].grab.or_excl);
+               pepper_list_init(&keyrouter->hard_keys[i].grab.top);
+               pepper_list_init(&keyrouter->hard_keys[i].grab.shared);
+               pepper_list_init(&keyrouter->hard_keys[i].pressed);
+       }
+
+       return keyrouter;
+
+alloc_failed:
+       if (keyrouter) {
+               if (keyrouter->hard_keys) {
+                       free(keyrouter->hard_keys);
+                       keyrouter->hard_keys = NULL;
+               }
+               free(keyrouter);
+               keyrouter = NULL;
+       }
+       return NULL;
+}
+
+static void
+_keyrouter_list_free(pepper_list_t *list)
+{
+       keyrouter_key_info_t *info, *tmp;
+
+       if (pepper_list_empty(list)) return;
+
+       pepper_list_for_each_safe(info, tmp, list, link) {
+               pepper_list_remove(&info->link);
+               free(info);
+               info = NULL;
+       }
+}
+
+PEPPER_API void
+keyrouter_destroy(keyrouter_t *keyrouter)
+{
+       int i;
+
+       PEPPER_CHECK(keyrouter, return, "Invalid keyrouter resource.\n");
+       PEPPER_CHECK(keyrouter->hard_keys, return, "Invalid keyrouter resource.\n");
+
+       for (i = 0; i < KEYROUTER_MAX_KEYS; i++) {
+               _keyrouter_list_free(&keyrouter->hard_keys[i].grab.excl);
+               _keyrouter_list_free(&keyrouter->hard_keys[i].grab.or_excl);
+               _keyrouter_list_free(&keyrouter->hard_keys[i].grab.top);
+               _keyrouter_list_free(&keyrouter->hard_keys[i].grab.shared);
+               _keyrouter_list_free(&keyrouter->hard_keys[i].pressed);
+       }
+
+       free(keyrouter->hard_keys);
+       keyrouter->hard_keys = NULL;
+       free(keyrouter);
+       keyrouter = NULL;
+}
diff --git a/src/lib/keyrouter/keyrouter.h b/src/lib/keyrouter/keyrouter.h
new file mode 100644 (file)
index 0000000..b31936a
--- /dev/null
@@ -0,0 +1,29 @@
+#ifndef KEYROUTER_H
+#define KEYROUTER_H
+
+#include <pepper.h>
+#include <tizen-extension-server-protocol.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define KEYROUTER_MAX_KEYS 512
+
+typedef struct keyrouter keyrouter_t;
+typedef struct keyrouter_key_info keyrouter_key_info_t;
+
+struct keyrouter_key_info {
+       void *data;
+       pepper_list_t link;
+};
+
+PEPPER_API keyrouter_t *keyrouter_create(void);
+PEPPER_API void keyrouter_destroy(keyrouter_t *keyrouter);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* KEYROUTER_H */
+