summaryrefslogtreecommitdiff
path: root/app/src/event_manager.c
diff options
context:
space:
mode:
authorPete Johanson <peter@peterjohanson.com>2020-06-30 16:42:52 -0400
committerGitHub <noreply@github.com>2020-06-30 16:42:52 -0400
commit4c5ed99381c47633c009177639896eebfb7e2002 (patch)
treeb0c6ddd628fd4357e04905182ba6f0e620f5390e /app/src/event_manager.c
parentb23a73e4888856fe476ab5fee655f8ccf6626e4c (diff)
parent7bf8621d5bea45c57dbbf0fac927d3332177b81b (diff)
Merge pull request #42 from petejohanson/core/event-manager-refactor
Refactor to generic event manager, ditch "global behaviors" as a concept.
Diffstat (limited to 'app/src/event_manager.c')
-rw-r--r--app/src/event_manager.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/app/src/event_manager.c b/app/src/event_manager.c
new file mode 100644
index 0000000..567cdf0
--- /dev/null
+++ b/app/src/event_manager.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2020 Peter Johanson <peter@peterjohanson.com>
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <zephyr.h>
+#include <logging/log.h>
+
+LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
+
+#include <zmk/event-manager.h>
+
+extern struct zmk_event_type* __event_type_start[];
+extern struct zmk_event_type* __event_type_end[];
+
+extern struct zmk_event_subscription __event_subscriptions_start[];
+extern struct zmk_event_subscription __event_subscriptions_end[];
+
+int zmk_event_manager_raise(struct zmk_event_header *event)
+{
+ int ret;
+ struct zmk_event_subscription *ev_sub;
+ for (ev_sub = __event_subscriptions_start; ev_sub != __event_subscriptions_end; ev_sub++) {
+ if (ev_sub->event_type == event->event) {
+ ret = ev_sub->listener->callback(event);
+ if (ret) {
+ LOG_DBG("Listener returned an error: %d", ret);
+ goto release;
+ }
+ }
+ }
+
+release:
+ k_free(event);
+ return ret;
+} \ No newline at end of file