diff options
author | Pete Johanson <peter@peterjohanson.com> | 2020-06-30 16:42:52 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-30 16:42:52 -0400 |
commit | 4c5ed99381c47633c009177639896eebfb7e2002 (patch) | |
tree | b0c6ddd628fd4357e04905182ba6f0e620f5390e /app/src/event_manager.c | |
parent | b23a73e4888856fe476ab5fee655f8ccf6626e4c (diff) | |
parent | 7bf8621d5bea45c57dbbf0fac927d3332177b81b (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.c | 37 |
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 |