diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/zmk/ble.h | 7 | ||||
-rw-r--r-- | include/zmk/endpoints.h | 6 | ||||
-rw-r--r-- | include/zmk/handlers.h | 8 | ||||
-rw-r--r-- | include/zmk/hid.h | 107 | ||||
-rw-r--r-- | include/zmk/hog.h | 9 | ||||
-rw-r--r-- | include/zmk/keymap.h | 18 | ||||
-rw-r--r-- | include/zmk/keys.h | 12 | ||||
-rw-r--r-- | include/zmk/kscan.h | 3 | ||||
-rw-r--r-- | include/zmk/matrix.h | 6 | ||||
-rw-r--r-- | include/zmk/usb_hid.h | 14 |
10 files changed, 190 insertions, 0 deletions
diff --git a/include/zmk/ble.h b/include/zmk/ble.h new file mode 100644 index 0000000..a77237d --- /dev/null +++ b/include/zmk/ble.h @@ -0,0 +1,7 @@ + +#pragma once + +#include <zmk/keys.h> + +int zmk_ble_init(); +bool zmk_ble_handle_key_user(struct zmk_key_event *key_event); diff --git a/include/zmk/endpoints.h b/include/zmk/endpoints.h new file mode 100644 index 0000000..42734aa --- /dev/null +++ b/include/zmk/endpoints.h @@ -0,0 +1,6 @@ +#pragma once + +#include <zmk/keys.h> + +int zmk_endpoints_init(); +int zmk_endpoints_send_key_event(struct zmk_key_event key_event); diff --git a/include/zmk/handlers.h b/include/zmk/handlers.h new file mode 100644 index 0000000..a10851f --- /dev/null +++ b/include/zmk/handlers.h @@ -0,0 +1,8 @@ +#pragma once + +#include <dt-bindings/zmk/keys.h> + +#include <zmk/keymap.h> +#include <zmk/keys.h> + +void zmk_handle_key(struct zmk_key_event key_event); diff --git a/include/zmk/hid.h b/include/zmk/hid.h new file mode 100644 index 0000000..9f0760a --- /dev/null +++ b/include/zmk/hid.h @@ -0,0 +1,107 @@ +#pragma once + +#include <usb/usb_device.h> +#include <usb/class/usb_hid.h> + +#include <dt-bindings/zmk/keys.h> + +#include <zmk/keys.h> + +#define ZMK_HID_MAX_KEYCODE KC_APP + +static const u8_t zmk_hid_report_desc[] = { + /* USAGE_PAGE (Generic Desktop) */ + HID_GI_USAGE_PAGE, + USAGE_GEN_DESKTOP, + /* USAGE (Keyboard) */ + HID_LI_USAGE, + USAGE_GEN_DESKTOP_KEYBOARD, + /* COLLECTION (Application) */ + HID_MI_COLLECTION, + COLLECTION_APPLICATION, + /* REPORT ID (1) */ + HID_GI_REPORT_ID, + 0x01, + /* USAGE_PAGE (Keypad) */ + HID_GI_USAGE_PAGE, + USAGE_GEN_DESKTOP_KEYPAD, + /* USAGE_MINIMUM (Keyboard LeftControl) */ + HID_LI_USAGE_MIN(1), + 0xE0, + /* USAGE_MAXIMUM (Keyboard Right GUI) */ + HID_LI_USAGE_MAX(1), + 0xE7, + /* LOGICAL_MINIMUM (0) */ + HID_GI_LOGICAL_MIN(1), + 0x00, + /* LOGICAL_MAXIMUM (1) */ + HID_GI_LOGICAL_MAX(1), + 0x01, + + /* REPORT_SIZE (1) */ + HID_GI_REPORT_SIZE, + 0x01, + /* REPORT_COUNT (8) */ + HID_GI_REPORT_COUNT, + 0x08, + /* INPUT (Data,Var,Abs) */ + HID_MI_INPUT, + 0x02, + + /* USAGE_PAGE (Keypad) */ + HID_GI_USAGE_PAGE, + USAGE_GEN_DESKTOP_KEYPAD, + /* LOGICAL_MINIMUM (0) */ + HID_GI_LOGICAL_MIN(1), + 0x00, + /* LOGICAL_MAXIMUM (101) */ + HID_GI_LOGICAL_MAX(1), + 0x01, + /* 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) */ + HID_GI_REPORT_SIZE, + 0x01, + /* REPORT_COUNT (6) */ + HID_GI_REPORT_COUNT, + ZMK_HID_MAX_KEYCODE + 1, + /* 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, + /* END_COLLECTION */ + HID_MI_COLLECTION_END, +}; + +// struct zmk_hid_boot_report +// { +// u8_t modifiers; +// u8_t _unused; +// u8_t keys[6]; +// } __packed; + +struct zmk_hid_report +{ + u8_t modifiers; + u8_t keys[13]; +} __packed; + +int zmk_hid_press_key(zmk_key key); +int zmk_hid_release_key(zmk_key key); + +struct zmk_hid_report *zmk_hid_get_report(); diff --git a/include/zmk/hog.h b/include/zmk/hog.h new file mode 100644 index 0000000..a48fa98 --- /dev/null +++ b/include/zmk/hog.h @@ -0,0 +1,9 @@ + +#pragma once + +#include <zmk/keys.h> +#include <zmk/hid.h> + +int zmk_hog_init(); + +int zmk_hog_send_report(struct zmk_hid_report *report); diff --git a/include/zmk/keymap.h b/include/zmk/keymap.h new file mode 100644 index 0000000..9b58cc0 --- /dev/null +++ b/include/zmk/keymap.h @@ -0,0 +1,18 @@ +#pragma once + +#include <devicetree.h> +#include <usb/usb_device.h> +#include <usb/class/usb_hid.h> +#include <dt-bindings/zmk/keys.h> + +#include <zmk/matrix.h> +#include <zmk/keys.h> + +#define ZMK_KEYMAP_NODE DT_CHOSEN(zmk_keymap) +#define ZMK_KEYMAP_LAYERS_LEN DT_PROP_LEN(ZMK_KEYMAP_NODE, layers) + +bool zmk_keymap_layer_activate(u8_t layer); +bool zmk_keymap_layer_deactivate(u8_t layer); + +zmk_key +zmk_keymap_keycode_from_position(u32_t row, u32_t column); diff --git a/include/zmk/keys.h b/include/zmk/keys.h new file mode 100644 index 0000000..b61ef81 --- /dev/null +++ b/include/zmk/keys.h @@ -0,0 +1,12 @@ +#pragma once + +#include <zephyr.h> +#include <dt-bindings/zmk/keys.h> + +typedef u64_t zmk_key; + +struct zmk_key_event +{ + zmk_key key; + bool pressed; +};
\ No newline at end of file diff --git a/include/zmk/kscan.h b/include/zmk/kscan.h new file mode 100644 index 0000000..ebffccd --- /dev/null +++ b/include/zmk/kscan.h @@ -0,0 +1,3 @@ +#pragma once + +int zmk_kscan_init(char *name); diff --git a/include/zmk/matrix.h b/include/zmk/matrix.h new file mode 100644 index 0000000..83a8e2d --- /dev/null +++ b/include/zmk/matrix.h @@ -0,0 +1,6 @@ +#pragma once + +#define ZMK_MATRIX_NODE_ID DT_CHOSEN(zmk_kscan) +#define ZMK_MATRIX_ROWS DT_PROP_LEN(ZMK_MATRIX_NODE_ID,row_gpios) +#define ZMK_MATRIX_COLS DT_PROP_LEN(ZMK_MATRIX_NODE_ID,col_gpios) + diff --git a/include/zmk/usb_hid.h b/include/zmk/usb_hid.h new file mode 100644 index 0000000..893e7e4 --- /dev/null +++ b/include/zmk/usb_hid.h @@ -0,0 +1,14 @@ +#ifndef ZMK_USB_HID +#define ZMK_USB_HID + +#include <usb/usb_device.h> +#include <usb/class/usb_hid.h> + +#include <zmk/keys.h> +#include <zmk/hid.h> + +int zmk_usb_hid_init(); + +int zmk_usb_hid_send_report(const struct zmk_hid_report *report); + +#endif |