summaryrefslogtreecommitdiff
path: root/app/src/usb.c
diff options
context:
space:
mode:
authorJoel Spadin <joelspadin@gmail.com>2020-10-11 17:03:21 -0500
committerJoel Spadin <joelspadin@gmail.com>2020-10-28 18:15:05 -0500
commit1d369ffa73ae63af821d012b1c2ab4a07a5dc9c7 (patch)
tree409067d51461b939cccbc4381d7185921444a545 /app/src/usb.c
parentdfb69d8727e01cb9ee855ac2d1cb7a6da1d6aa85 (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.c29
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;