summaryrefslogtreecommitdiff
path: root/app/src/endpoints.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/endpoints.c')
-rw-r--r--app/src/endpoints.c105
1 files changed, 105 insertions, 0 deletions
diff --git a/app/src/endpoints.c b/app/src/endpoints.c
new file mode 100644
index 0000000..f46d42d
--- /dev/null
+++ b/app/src/endpoints.c
@@ -0,0 +1,105 @@
+
+#include <zmk/endpoints.h>
+#include <zmk/hid.h>
+#include <zmk/usb_hid.h>
+#include <zmk/hog.h>
+
+#include <logging/log.h>
+LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
+
+int zmk_endpoints_init()
+{
+ int err;
+
+ LOG_DBG("");
+
+#ifdef CONFIG_ZMK_USB
+ err = zmk_usb_hid_init();
+ if (err)
+ {
+ LOG_ERR("USB HID Init Failed\n");
+ return err;
+ }
+#endif /* CONFIG_ZMK_USB */
+
+#ifdef CONFIG_ZMK_BLE
+ err = zmk_hog_init();
+ if (err)
+ {
+ LOG_ERR("HOG Init Failed\n");
+ return err;
+ }
+
+#endif /* CONFIG_ZMK_BLE */
+
+ return 0;
+}
+
+int zmk_endpoints_send_report(enum zmk_hid_report_changes report_type)
+{
+ int err;
+ struct zmk_hid_keypad_report *keypad_report;
+ struct zmk_hid_consumer_report *consumer_report;
+ switch (report_type)
+ {
+ case Keypad:
+ keypad_report = zmk_hid_get_keypad_report();
+#ifdef CONFIG_ZMK_USB
+ if (zmk_usb_hid_send_report((u8_t *)keypad_report, sizeof(struct zmk_hid_keypad_report)) != 0)
+ {
+ LOG_DBG("USB Send Failed");
+ }
+#endif /* CONFIG_ZMK_USB */
+
+#ifdef CONFIG_ZMK_BLE
+ err = zmk_hog_send_keypad_report(&keypad_report->body);
+ if (err)
+ {
+ LOG_ERR("FAILED TO SEND OVER HOG: %d", err);
+ }
+#endif /* CONFIG_ZMK_BLE */
+
+ break;
+ case Consumer:
+ consumer_report = zmk_hid_get_consumer_report();
+#ifdef CONFIG_ZMK_USB
+ if (zmk_usb_hid_send_report((u8_t *)consumer_report, sizeof(struct zmk_hid_consumer_report)) != 0)
+ {
+ LOG_DBG("USB Send Failed");
+ }
+#endif /* CONFIG_ZMK_USB */
+
+#ifdef CONFIG_ZMK_BLE
+ err = zmk_hog_send_consumer_report(&consumer_report->body);
+ if (err)
+ {
+ LOG_ERR("FAILED TO SEND OVER HOG: %d", err);
+ }
+#endif /* CONFIG_ZMK_BLE */
+
+ break;
+ default:
+ LOG_ERR("Unknown report change type %d", report_type);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+int zmk_endpoints_send_key_event(struct zmk_key_event key_event)
+{
+ enum zmk_hid_report_changes changes;
+
+ LOG_DBG("key %d, state %d\n", key_event.key, key_event.pressed);
+
+ if (key_event.pressed)
+ {
+ changes = zmk_hid_press_key(key_event.key);
+ }
+ else
+ {
+ changes = zmk_hid_release_key(key_event.key);
+ }
+
+ return zmk_endpoints_send_report(changes);
+}