summaryrefslogtreecommitdiff
path: root/app/src/events.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/events.c')
-rw-r--r--app/src/events.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/app/src/events.c b/app/src/events.c
new file mode 100644
index 0000000..fabb93e
--- /dev/null
+++ b/app/src/events.c
@@ -0,0 +1,83 @@
+
+#include <zephyr.h>
+#include <drivers/behavior.h>
+#include <zmk/behavior.h>
+#include <zmk/events.h>
+#include <sys/util.h>
+
+#define DT_DRV_COMPAT zmk_behavior_global
+#define GLOBAL_BEHAVIOR_LEN DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT)
+
+#define LABEL_ENTRY(i) DT_INST_LABEL(i),
+static const char *global_behaviors[] = {
+ DT_INST_FOREACH_STATUS_OKAY(LABEL_ENTRY)
+};
+
+int zmk_events_position_pressed(u32_t position)
+{
+ for (int i = 0; i < GLOBAL_BEHAVIOR_LEN; i++) {
+ const char* label = global_behaviors[i];
+ struct device *dev = device_get_binding(label);
+ behavior_position_pressed(dev, position);
+ }
+ return 0;
+};
+
+int zmk_events_position_released(u32_t position)
+{
+ for (int i = 0; i < GLOBAL_BEHAVIOR_LEN; i++) {
+ const char* label = global_behaviors[i];
+ struct device *dev = device_get_binding(label);
+ behavior_position_released(dev, position);
+ }
+ return 0;
+};
+
+int zmk_events_keycode_pressed(u8_t usage_page, u32_t keycode)
+{
+ for (int i = 0; i < GLOBAL_BEHAVIOR_LEN; i++) {
+ const char* label = global_behaviors[i];
+ struct device *dev = device_get_binding(label);
+ behavior_keycode_pressed(dev, usage_page, keycode);
+ }
+ return 0;
+};
+
+int zmk_events_keycode_released(u8_t usage_page, u32_t keycode)
+{
+ for (int i = 0; i < GLOBAL_BEHAVIOR_LEN; i++) {
+ const char* label = global_behaviors[i];
+ struct device *dev = device_get_binding(label);
+ behavior_keycode_released(dev, usage_page, keycode);
+ }
+ return 0;
+};
+
+int zmk_events_modifiers_pressed(zmk_mod_flags modifiers)
+{
+ for (int i = 0; i < GLOBAL_BEHAVIOR_LEN; i++) {
+ const char* label = global_behaviors[i];
+ struct device *dev = device_get_binding(label);
+ behavior_modifiers_pressed(dev, modifiers);
+ }
+ return 0;
+};
+
+int zmk_events_modifiers_released(zmk_mod_flags modifiers)
+{
+ for (int i = 0; i < GLOBAL_BEHAVIOR_LEN; i++) {
+ const char* label = global_behaviors[i];
+ struct device *dev = device_get_binding(label);
+ behavior_modifiers_released(dev, modifiers);
+ }
+ return 0;
+};
+
+int zmk_events_consumer_key_pressed(u32_t usage)
+{
+ return 0;
+};
+int zmk_events_consumer_key_released(u32_t usage)
+{
+ return 0;
+};