summaryrefslogtreecommitdiff
path: root/app/include
diff options
context:
space:
mode:
Diffstat (limited to 'app/include')
-rw-r--r--app/include/dt-bindings/zmk/keys.h12
-rw-r--r--app/include/dt-bindings/zmk/modifiers.h28
-rw-r--r--app/include/dt-bindings/zmk/outputs.h9
-rw-r--r--app/include/zmk/ble.h1
-rw-r--r--app/include/zmk/endpoints.h8
-rw-r--r--app/include/zmk/events/keycode-state-changed.h11
-rw-r--r--app/include/zmk/events/usb-conn-state-changed.h20
-rw-r--r--app/include/zmk/handlers.h2
-rw-r--r--app/include/zmk/hid.h63
-rw-r--r--app/include/zmk/usb.h12
10 files changed, 120 insertions, 46 deletions
diff --git a/app/include/dt-bindings/zmk/keys.h b/app/include/dt-bindings/zmk/keys.h
index a3b2229..5a52753 100644
--- a/app/include/dt-bindings/zmk/keys.h
+++ b/app/include/dt-bindings/zmk/keys.h
@@ -3,9 +3,10 @@
*
* SPDX-License-Identifier: MIT
*/
-
#pragma once
+#include <dt-bindings/zmk/modifiers.h>
+
#define USAGE_KEYPAD 0x07
#define USAGE_CONSUMER 0x0C
@@ -143,12 +144,3 @@
#define M_MUTE 0xE2
#define M_VOLU 0xE9
#define M_VOLD 0xEA
-
-#define MOD_LCTL (1 << 0x00)
-#define MOD_LSFT (1 << 0x01)
-#define MOD_LALT (1 << 0x02)
-#define MOD_LGUI (1 << 0x03)
-#define MOD_RCTL (1 << 0x04)
-#define MOD_RSFT (1 << 0x05)
-#define MOD_RALT (1 << 0x06)
-#define MOD_RGUI (1 << 0x07) \ No newline at end of file
diff --git a/app/include/dt-bindings/zmk/modifiers.h b/app/include/dt-bindings/zmk/modifiers.h
new file mode 100644
index 0000000..b49849d
--- /dev/null
+++ b/app/include/dt-bindings/zmk/modifiers.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2020 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#pragma once
+
+#define MOD_LCTL 0x01
+#define MOD_LSFT 0x02
+#define MOD_LALT 0x04
+#define MOD_LGUI 0x08
+#define MOD_RCTL 0x10
+#define MOD_RSFT 0x20
+#define MOD_RALT 0x40
+#define MOD_RGUI 0x80
+
+#define SELECT_MODS(keycode) (keycode >> 24)
+#define STRIP_MODS(keycode) (keycode & ~(0xFF << 24))
+#define APPLY_MODS(mods, keycode) (mods << 24 | keycode)
+
+#define LC(keycode) APPLY_MODS(MOD_LCTL, keycode)
+#define LS(keycode) APPLY_MODS(MOD_LSFT, keycode)
+#define LA(keycode) APPLY_MODS(MOD_LALT, keycode)
+#define LG(keycode) APPLY_MODS(MOD_LGUI, keycode)
+#define RC(keycode) APPLY_MODS(MOD_RCTL, keycode)
+#define RS(keycode) APPLY_MODS(MOD_RSFT, keycode)
+#define RA(keycode) APPLY_MODS(MOD_RALT, keycode)
+#define RG(keycode) APPLY_MODS(MOD_RGUI, keycode) \ No newline at end of file
diff --git a/app/include/dt-bindings/zmk/outputs.h b/app/include/dt-bindings/zmk/outputs.h
new file mode 100644
index 0000000..f24380f
--- /dev/null
+++ b/app/include/dt-bindings/zmk/outputs.h
@@ -0,0 +1,9 @@
+/*
+ * Copyright (c) 2020 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#define OUT_TOG 0
+#define OUT_USB 1
+#define OUT_BLE 2 \ No newline at end of file
diff --git a/app/include/zmk/ble.h b/app/include/zmk/ble.h
index 1cf71a7..56980c6 100644
--- a/app/include/zmk/ble.h
+++ b/app/include/zmk/ble.h
@@ -15,6 +15,7 @@ int zmk_ble_prof_prev();
int zmk_ble_prof_select(u8_t index);
bt_addr_le_t *zmk_ble_active_profile_addr();
+bool zmk_ble_active_profile_is_connected();
char *zmk_ble_active_profile_name();
int zmk_ble_unpair_all();
diff --git a/app/include/zmk/endpoints.h b/app/include/zmk/endpoints.h
index aad6265..aad688e 100644
--- a/app/include/zmk/endpoints.h
+++ b/app/include/zmk/endpoints.h
@@ -9,4 +9,12 @@
#include <zmk/keys.h>
#include <zmk/hid.h>
+enum zmk_endpoint {
+ ZMK_ENDPOINT_USB,
+ ZMK_ENDPOINT_BLE,
+};
+
+int zmk_endpoints_select(enum zmk_endpoint endpoint);
+int zmk_endpoints_toggle();
+
int zmk_endpoints_send_report(u8_t usage_report);
diff --git a/app/include/zmk/events/keycode-state-changed.h b/app/include/zmk/events/keycode-state-changed.h
index 1e2c24e..26d07ec 100644
--- a/app/include/zmk/events/keycode-state-changed.h
+++ b/app/include/zmk/events/keycode-state-changed.h
@@ -7,22 +7,25 @@
#pragma once
#include <zephyr.h>
+#include <dt-bindings/zmk/modifiers.h>
#include <zmk/event-manager.h>
struct keycode_state_changed {
struct zmk_event_header header;
u8_t usage_page;
u32_t keycode;
+ u8_t implicit_modifiers;
bool state;
};
ZMK_EVENT_DECLARE(keycode_state_changed);
-inline struct keycode_state_changed *create_keycode_state_changed(u8_t usage_page, u32_t keycode,
- bool state) {
+static inline struct keycode_state_changed *
+create_keycode_state_changed(u8_t usage_page, u32_t keycode, bool state) {
struct keycode_state_changed *ev = new_keycode_state_changed();
ev->usage_page = usage_page;
- ev->keycode = keycode;
+ ev->keycode = STRIP_MODS(keycode);
+ ev->implicit_modifiers = SELECT_MODS(keycode);
ev->state = state;
return ev;
-} \ No newline at end of file
+}
diff --git a/app/include/zmk/events/usb-conn-state-changed.h b/app/include/zmk/events/usb-conn-state-changed.h
new file mode 100644
index 0000000..d6cc698
--- /dev/null
+++ b/app/include/zmk/events/usb-conn-state-changed.h
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2020 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#pragma once
+
+#include <zephyr.h>
+#include <usb/usb_device.h>
+
+#include <zmk/event-manager.h>
+#include <zmk/usb.h>
+
+struct usb_conn_state_changed {
+ struct zmk_event_header header;
+ enum zmk_usb_conn_state conn_state;
+};
+
+ZMK_EVENT_DECLARE(usb_conn_state_changed); \ No newline at end of file
diff --git a/app/include/zmk/handlers.h b/app/include/zmk/handlers.h
index 7ce1d27..92bd7e0 100644
--- a/app/include/zmk/handlers.h
+++ b/app/include/zmk/handlers.h
@@ -6,8 +6,6 @@
#pragma once
-#include <dt-bindings/zmk/keys.h>
-
#include <zmk/keymap.h>
#include <zmk/keys.h>
diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h
index 744de98..2426c2d 100644
--- a/app/include/zmk/hid.h
+++ b/app/include/zmk/hid.h
@@ -9,13 +9,13 @@
#include <usb/usb_device.h>
#include <usb/class/usb_hid.h>
-#include <dt-bindings/zmk/keys.h>
-
#include <zmk/keys.h>
#define COLLECTION_REPORT 0x03
-#define ZMK_HID_MAX_KEYCODE GUI
+#define ZMK_HID_KEYPAD_NKRO_SIZE 6
+
+#define ZMK_HID_CONSUMER_NKRO_SIZE 6
static const u8_t zmk_hid_report_desc[] = {
/* USAGE_PAGE (Generic Desktop) */
@@ -59,39 +59,41 @@ static const u8_t zmk_hid_report_desc[] = {
/* USAGE_PAGE (Keypad) */
HID_GI_USAGE_PAGE,
USAGE_GEN_DESKTOP_KEYPAD,
+ /* REPORT_SIZE (8) */
+ HID_GI_REPORT_SIZE,
+ 0x08,
+ /* REPORT_COUNT (1) */
+ HID_GI_REPORT_COUNT,
+ 0x01,
+ /* INPUT (Cnst,Var,Abs) */
+ HID_MI_INPUT,
+ 0x03,
+
+ /* USAGE_PAGE (Keypad) */
+ HID_GI_USAGE_PAGE,
+ USAGE_GEN_DESKTOP_KEYPAD,
/* LOGICAL_MINIMUM (0) */
HID_GI_LOGICAL_MIN(1),
0x00,
- /* LOGICAL_MAXIMUM (1) */
+ /* LOGICAL_MAXIMUM (0xFF) */
HID_GI_LOGICAL_MAX(1),
- 0x01,
+ 0xFF,
/* USAGE_MINIMUM (Reserved) */
HID_LI_USAGE_MIN(1),
0x00,
/* USAGE_MAXIMUM (Keyboard Application) */
HID_LI_USAGE_MAX(1),
- ZMK_HID_MAX_KEYCODE,
- /* REPORT_SIZE (8) */
+ 0xFF,
+ /* REPORT_SIZE (1) */
HID_GI_REPORT_SIZE,
- 0x01,
- /* REPORT_COUNT (6) */
+ 0x08,
+ /* REPORT_COUNT (ZMK_HID_KEYPAD_NKRO_SIZE) */
HID_GI_REPORT_COUNT,
- ZMK_HID_MAX_KEYCODE + 1,
+ ZMK_HID_KEYPAD_NKRO_SIZE,
/* INPUT (Data,Ary,Abs) */
HID_MI_INPUT,
- 0x02,
- /* USAGE_PAGE (Keypad) */
- HID_GI_USAGE_PAGE,
- USAGE_GEN_DESKTOP_KEYPAD,
- /* REPORT_SIZE (8) */
- HID_GI_REPORT_SIZE,
- 0x02,
- /* REPORT_COUNT (6) */
- HID_GI_REPORT_COUNT,
- 0x01,
- /* INPUT (Cnst,Var,Abs) */
- HID_MI_INPUT,
- 0x03,
+ 0x00,
+
/* END_COLLECTION */
HID_MI_COLLECTION_END,
/* USAGE_PAGE (Consumer) */
@@ -124,9 +126,9 @@ static const u8_t zmk_hid_report_desc[] = {
/* REPORT_SIZE (8) */
HID_GI_REPORT_SIZE,
0x08,
- /* REPORT_COUNT (8) */
+ /* REPORT_COUNT (ZMK_HID_CONSUMER_NKRO_SIZE) */
HID_GI_REPORT_COUNT,
- 0x06,
+ ZMK_HID_CONSUMER_NKRO_SIZE,
HID_MI_INPUT,
0x00,
/* END COLLECTION */
@@ -142,7 +144,8 @@ static const u8_t zmk_hid_report_desc[] = {
struct zmk_hid_keypad_report_body {
zmk_mod_flags modifiers;
- u8_t keys[13];
+ u8_t _reserved;
+ u8_t keys[ZMK_HID_KEYPAD_NKRO_SIZE];
} __packed;
struct zmk_hid_keypad_report {
@@ -151,7 +154,7 @@ struct zmk_hid_keypad_report {
} __packed;
struct zmk_hid_consumer_report_body {
- u8_t keys[6];
+ u8_t keys[ZMK_HID_CONSUMER_NKRO_SIZE];
} __packed;
struct zmk_hid_consumer_report {
@@ -161,13 +164,15 @@ struct zmk_hid_consumer_report {
int zmk_hid_register_mod(zmk_mod modifier);
int zmk_hid_unregister_mod(zmk_mod modifier);
-int zmk_hid_register_mods(zmk_mod_flags modifiers);
-int zmk_hid_unregister_mods(zmk_mod_flags modifiers);
+int zmk_hid_implicit_modifiers_press(zmk_mod_flags implicit_modifiers);
+int zmk_hid_implicit_modifiers_release();
int zmk_hid_keypad_press(zmk_key key);
int zmk_hid_keypad_release(zmk_key key);
+void zmk_hid_keypad_clear();
int zmk_hid_consumer_press(zmk_key key);
int zmk_hid_consumer_release(zmk_key key);
+void zmk_hid_consumer_clear();
struct zmk_hid_keypad_report *zmk_hid_get_keypad_report();
struct zmk_hid_consumer_report *zmk_hid_get_consumer_report();
diff --git a/app/include/zmk/usb.h b/app/include/zmk/usb.h
index 452fd54..30461de 100644
--- a/app/include/zmk/usb.h
+++ b/app/include/zmk/usb.h
@@ -12,8 +12,18 @@
#include <zmk/keys.h>
#include <zmk/hid.h>
+enum zmk_usb_conn_state {
+ ZMK_USB_CONN_NONE,
+ ZMK_USB_CONN_POWERED,
+ ZMK_USB_CONN_HID,
+};
+
enum usb_dc_status_code zmk_usb_get_status();
+enum zmk_usb_conn_state zmk_usb_get_conn_state();
+
+static inline bool zmk_usb_is_powered() { return zmk_usb_get_conn_state() != ZMK_USB_CONN_NONE; }
+static inline bool zmk_usb_is_hid_ready() { return zmk_usb_get_conn_state() == ZMK_USB_CONN_HID; }
#ifdef CONFIG_ZMK_USB
-int zmk_usb_hid_send_report(u8_t *report, size_t len);
+int zmk_usb_hid_send_report(const u8_t *report, size_t len);
#endif /* CONFIG_ZMK_USB */ \ No newline at end of file