diff options
Diffstat (limited to 'app/include')
-rw-r--r-- | app/include/dt-bindings/zmk/keys.h | 12 | ||||
-rw-r--r-- | app/include/dt-bindings/zmk/modifiers.h | 28 | ||||
-rw-r--r-- | app/include/dt-bindings/zmk/outputs.h | 9 | ||||
-rw-r--r-- | app/include/zmk/ble.h | 1 | ||||
-rw-r--r-- | app/include/zmk/endpoints.h | 8 | ||||
-rw-r--r-- | app/include/zmk/events/keycode-state-changed.h | 11 | ||||
-rw-r--r-- | app/include/zmk/events/usb-conn-state-changed.h | 20 | ||||
-rw-r--r-- | app/include/zmk/handlers.h | 2 | ||||
-rw-r--r-- | app/include/zmk/hid.h | 63 | ||||
-rw-r--r-- | app/include/zmk/usb.h | 12 |
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 |