Initial event manager work, and two first events.

* Add initial event manager implementation,
  roughly mimicking Nordic's API.
* Add `position_state_changed` and
  `keycode_state_changed` events.
* Hook up HID and keymap to new events
  instead of using behaviour global event
  crazy.
This commit is contained in:
Pete Johanson
2020-06-30 00:31:09 -04:00
parent 22238d24de
commit 9a991bf019
19 changed files with 249 additions and 112 deletions

32
app/src/event_manager.c Normal file
View File

@@ -0,0 +1,32 @@
#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;
}