summaryrefslogtreecommitdiff
path: root/app/include/zmk/events/keycode_state_changed.h
diff options
context:
space:
mode:
Diffstat (limited to 'app/include/zmk/events/keycode_state_changed.h')
-rw-r--r--app/include/zmk/events/keycode_state_changed.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/app/include/zmk/events/keycode_state_changed.h b/app/include/zmk/events/keycode_state_changed.h
new file mode 100644
index 0000000..28282b6
--- /dev/null
+++ b/app/include/zmk/events/keycode_state_changed.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2020 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#pragma once
+
+#include <zephyr.h>
+#include <dt-bindings/zmk/modifiers.h>
+#include <dt-bindings/zmk/hid_usage_pages.h>
+#include <zmk/event_manager.h>
+#include <zmk/keys.h>
+
+struct keycode_state_changed {
+ struct zmk_event_header header;
+ uint8_t usage_page;
+ uint32_t keycode;
+ uint8_t implicit_modifiers;
+ bool state;
+ int64_t timestamp;
+};
+
+ZMK_EVENT_DECLARE(keycode_state_changed);
+
+static inline struct keycode_state_changed *
+keycode_state_changed_from_encoded(uint32_t encoded, bool pressed, int64_t timestamp) {
+ uint16_t page = HID_USAGE_PAGE(encoded) & 0xFF;
+ uint16_t id = HID_USAGE_ID(encoded);
+ zmk_mod_flags implicit_mods = SELECT_MODS(encoded);
+
+ if (!page) {
+ page = HID_USAGE_KEY;
+ }
+
+ struct keycode_state_changed *ev = new_keycode_state_changed();
+ ev->usage_page = page;
+ ev->keycode = id;
+ ev->implicit_modifiers = implicit_mods;
+ ev->state = pressed;
+ ev->timestamp = timestamp;
+ return ev;
+}