From d08a7c08d629f4e1edf847992b71fe0e055d5724 Mon Sep 17 00:00:00 2001 From: Merlinov <64584348+Merlinov@users.noreply.github.com> Date: Wed, 8 Feb 2023 21:40:49 +0300 Subject: [PATCH] Add files via upload --- app/src/endpoints.c | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/app/src/endpoints.c b/app/src/endpoints.c index 33760010..7aabc5d4 100644 --- a/app/src/endpoints.c +++ b/app/src/endpoints.c @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include #include @@ -35,12 +35,13 @@ static void endpoints_save_preferred_work(struct k_work *work) { settings_save_one("endpoints/preferred", &preferred_endpoint, sizeof(preferred_endpoint)); } -static struct k_work_delayable endpoints_save_work; +static struct k_delayed_work endpoints_save_work; #endif static int endpoints_save_preferred() { #if IS_ENABLED(CONFIG_SETTINGS) - return k_work_reschedule(&endpoints_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); + k_delayed_work_cancel(&endpoints_save_work); + return k_delayed_work_submit(&endpoints_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE)); #else return 0; #endif @@ -144,6 +145,40 @@ int zmk_endpoints_send_report(uint16_t usage_page) { } } +int zmk_endpoints_send_mouse_report() { + struct zmk_hid_mouse_report *mouse_report = zmk_hid_get_mouse_report(); + + switch (current_endpoint) { +#if IS_ENABLED(CONFIG_ZMK_USB) + case ZMK_ENDPOINT_USB: { + int err = zmk_usb_hid_send_report((uint8_t *)mouse_report, sizeof(*mouse_report)); + if (err) { + LOG_ERR("FAILED TO SEND OVER USB: %d", err); + } + return err; + } +#endif /* IS_ENABLED(CONFIG_ZMK_USB) */ + +#if IS_ENABLED(CONFIG_ZMK_BLE) + case ZMK_ENDPOINT_BLE: { +#if IS_ENABLED(CONFIG_ZMK_MOUSE_WORK_QUEUE_DEDICATED) + int err = zmk_hog_send_mouse_report_direct(&mouse_report->body); +#else + int err = zmk_hog_send_mouse_report(&mouse_report->body); +#endif + if (err) { + LOG_ERR("FAILED TO SEND OVER HOG: %d", err); + } + return err; + } +#endif /* IS_ENABLED(CONFIG_ZMK_BLE) */ + + default: + LOG_ERR("Unsupported endpoint %d", current_endpoint); + return -ENOTSUP; + } +} + #if IS_ENABLED(CONFIG_SETTINGS) static int endpoints_handle_set(const char *name, size_t len, settings_read_cb read_cb, @@ -181,7 +216,7 @@ static int zmk_endpoints_init(const struct device *_arg) { return err; } - k_work_init_delayable(&endpoints_save_work, endpoints_save_preferred_work); + k_delayed_work_init(&endpoints_save_work, endpoints_save_preferred_work); settings_load_subtree("endpoints"); #endif @@ -228,6 +263,7 @@ static enum zmk_endpoint get_selected_endpoint() { static void disconnect_current_endpoint() { zmk_hid_keyboard_clear(); zmk_hid_consumer_clear(); + zmk_hid_mouse_clear(); zmk_endpoints_send_report(HID_USAGE_KEY); zmk_endpoints_send_report(HID_USAGE_CONSUMER);