diff options
author | Joel Spadin <joelspadin@gmail.com> | 2020-10-11 17:03:21 -0500 |
---|---|---|
committer | Joel Spadin <joelspadin@gmail.com> | 2020-10-28 18:15:05 -0500 |
commit | 1d369ffa73ae63af821d012b1c2ab4a07a5dc9c7 (patch) | |
tree | 409067d51461b939cccbc4381d7185921444a545 /app/src/usb.c | |
parent | dfb69d8727e01cb9ee855ac2d1cb7a6da1d6aa85 (diff) |
feat: only send HID reports to one endpoint
Added some utility functions and an event for tracking the state of the
USB connection.
Updated endpoints.c to select a single endpoint to send HID reports to
based on the status of the USB and BLE connections. Partially fixes #206.
Future commits will add a user setting to control which endpoint is used if
both USB and BLE are ready.
Diffstat (limited to 'app/src/usb.c')
-rw-r--r-- | app/src/usb.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/app/src/usb.c b/app/src/usb.c index 434b3d4..d4bc2e4 100644 --- a/app/src/usb.c +++ b/app/src/usb.c @@ -13,6 +13,8 @@ #include <zmk/hid.h> #include <zmk/keymap.h> +#include <zmk/event-manager.h> +#include <zmk/events/usb-conn-state-changed.h> LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -53,9 +55,34 @@ int zmk_usb_hid_send_report(const u8_t *report, size_t len) { #endif /* CONFIG_ZMK_USB */ +static void raise_usb_status_changed_event() { + struct usb_conn_state_changed *ev = new_usb_conn_state_changed(); + ev->conn_state = zmk_usb_get_conn_state(); + + ZMK_EVENT_RAISE(ev); +} + enum usb_dc_status_code zmk_usb_get_status() { return usb_status; } -void usb_status_cb(enum usb_dc_status_code status, const u8_t *params) { usb_status = status; }; +enum zmk_usb_conn_state zmk_usb_get_conn_state() { + switch (usb_status) { + case USB_DC_DISCONNECTED: + case USB_DC_UNKNOWN: + return ZMK_USB_CONN_NONE; + + case USB_DC_ERROR: + case USB_DC_RESET: + return ZMK_USB_CONN_POWERED; + + default: + return ZMK_USB_CONN_HID; + } +} + +void usb_status_cb(enum usb_dc_status_code status, const u8_t *params) { + usb_status = status; + raise_usb_status_changed_event(); +}; static int zmk_usb_init(struct device *_arg) { int usb_enable_ret; |