zmk/app/src/behavior.c
2021-01-03 20:38:46 +01:00

53 lines
No EOL
1.3 KiB
C

/*
* Copyright (c) 2020 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/
#include <sys/util.h>
#include <logging/log.h>
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
#include <zmk/matrix.h>
#include <zmk/sensors.h>
#include <zmk/keymap.h>
#include <drivers/behavior.h>
#include <zmk/behavior.h>
#include <zmk/event_manager.h>
#include <zmk/events/position_state_changed.h>
#include <zmk/events/behavior_state_changed.h>
#include <zmk/events/sensor_event.h>
int zmk_behavior_state_changed(const struct behavior_state_changed *ev) {
int ret;
if (ev->pressed) {
ret = behavior_keymap_binding_pressed(ev);
} else {
ret = behavior_keymap_binding_released(ev);
}
if (ret < 0) {
return ret;
}
switch (ret) {
case ZMK_BEHAVIOR_TRANSPARENT:
return ZMK_EV_EVENT_BUBBLE;
case ZMK_BEHAVIOR_OPAQUE:
return ZMK_EV_EVENT_HANDLED;
case ZMK_BEHAVIOR_CAPTURED:
return ZMK_EV_EVENT_CAPTURED;
default:
return -ENOTSUP;
}
}
int behavior_listener(const struct zmk_event_header *eh) {
if (is_behavior_state_changed(eh)) {
const struct behavior_state_changed *ev = cast_behavior_state_changed(eh);
return zmk_behavior_state_changed(ev);
}
return 0;
}
ZMK_LISTENER(behavior, behavior_listener);
ZMK_SUBSCRIPTION(behavior, behavior_state_changed);